|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 13312 (0x3400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body C_Driver_Serie, seg_057e0a
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Simple_Io;
package body C_Driver_Serie is
task body Tache_Driver_Serie is
Fin_Chaine_A : Boolean := False;
Fin_Chaine_B : Boolean := False;
Taille_Trame_Envoi : Integer;
Increment_Envoi : Integer := 1;
Longueur : Integer;
Ecriture_Trame_Ok : Boolean := True;
Trame_En_Cours : Boolean := False;
I : Integer;
Tempo : General_Defs.Byte;
Fin_Chaine : General_Defs.Byte := (16#0D#);
Car_Essai : General_Defs.Byte := (16#71#);
Car_Essai1 : General_Defs.Byte := (16#72#);
begin
--Interface_Serie.Emission_Reception (Interface_Serie.R_Seule);
--Interface_Serie.Validation_It (Interface_Serie.R_Ab);
Buffer_Reception.Raz (Buffer_Reception_A);
Buffer_Reception.Raz (Buffer_Reception_B);
loop
select
-------------------------------------------------------------------------------
-- Lancement lecture prioritaire
-------------------------------------------------------------------------------
accept Lecture_Circuit
(Car : in G_Defs.Byte; Port : G_Defs.Port) do
if (G_Defs."=" (Port, G_Defs.Port_A)) then
Buffer_Reception.Enfiler
(File_Attente => Buffer_Reception_A, Elem => Car);
if General_Defs.Egaux (Fin_Chaine, Car) then
Fin_Chaine_A := True;
end if;
else
Buffer_Reception.Enfiler
(File_Attente => Buffer_Reception_B, Elem => Car);
if General_Defs.Egaux (Fin_Chaine, Car) then
Fin_Chaine_B := True;
end if;
end if;
end Lecture_Circuit;
else
-------------------------------------------------------------------------------
-- Lancement lecture/ecriture
-------------------------------------------------------------------------------
select
-------------------------------------------------------------------------------
-- Lecture
-------------------------------------------------------------------------------
accept Lecture_Circuit
(Car : in G_Defs.Byte; Port : G_Defs.Port) do
if (G_Defs."=" (Port, G_Defs.Port_A)) then
Buffer_Reception.Enfiler
(File_Attente => Buffer_Reception_A,
Elem => Car);
if General_Defs.Egaux (Fin_Chaine, Car) then
Fin_Chaine_A := True;
end if;
else
Buffer_Reception.Enfiler
(File_Attente => Buffer_Reception_B,
Elem => Car);
if General_Defs.Egaux (Fin_Chaine, Car) then
Fin_Chaine_B := True;
end if;
end if;
end Lecture_Circuit;
or
when Fin_Chaine_A =>
accept Lecture_Trame (Trame : in out G_Defs.Byte_String;
Taille : out Integer;
Port : out G_Defs.Port) do
I := 1;
Buffer_Reception.Element_Tete
(Buffer_Reception_A, Trame (I));
Buffer_Reception.Defiler (Buffer_Reception_A);
while General_Defs.Egaux (Fin_Chaine, Trame (I)) =
False loop
I := I + 1;
Buffer_Reception.Element_Tete
(Buffer_Reception_A, Trame (I));
Buffer_Reception.Defiler (Buffer_Reception_A);
end loop;
Taille := I;
Fin_Chaine_A := False;
end Lecture_Trame;
or
when Fin_Chaine_B =>
accept Lecture_Trame (Trame : in out G_Defs.Byte_String;
Taille : out Integer;
Port : out G_Defs.Port) do
I := 1;
Buffer_Reception.Element_Tete
(Buffer_Reception_B, Trame (I));
Buffer_Reception.Defiler (Buffer_Reception_B);
while General_Defs.Egaux (Fin_Chaine, Trame (I)) =
False loop
I := I + 1;
Buffer_Reception.Element_Tete
(Buffer_Reception_B, Trame (I));
Buffer_Reception.Defiler (Buffer_Reception_B);
end loop;
Taille := I;
Fin_Chaine_B := False;
end Lecture_Trame;
or
-------------------------------------------------------------------------------
-- Ecriture
-------------------------------------------------------------------------------
accept Ecriture_Trame (Trame : in G_Defs.Byte_String;
Port : G_Defs.Port) do
Longueur := Trame'Length;
Interface_Serie.Envoi_Donnee_Par_It (Type_Port => Port);
Increment_Envoi := 1;
while (Increment_Envoi <= Longueur) loop
accept Ecriture_Circuit (Car : out G_Defs.Byte;
N_Port : G_Defs.Port) do
Car := Trame (Increment_Envoi);
end Ecriture_Circuit;
delay 0.01;
Increment_Envoi := Increment_Envoi + 1;
if (Increment_Envoi <= Longueur) then
Interface_Serie.Envoi_Donnee_Par_It
(Type_Port => Port);
end if;
end loop;
end Ecriture_Trame;
or
delay 100.0;
end select;
end select;
end loop;
end Tache_Driver_Serie;
end C_Driver_Serie;
nblk1=c
nid=7
hdr6=10
[0x00] rec0=1c rec1=00 rec2=01 rec3=02e
[0x01] rec0=13 rec1=00 rec2=04 rec3=034
[0x02] rec0=11 rec1=00 rec2=09 rec3=028
[0x03] rec0=12 rec1=00 rec2=02 rec3=008
[0x04] rec0=11 rec1=00 rec2=0a rec3=08e
[0x05] rec0=14 rec1=00 rec2=08 rec3=008
[0x06] rec0=13 rec1=00 rec2=03 rec3=012
[0x07] rec0=06 rec1=00 rec2=0b rec3=000
[0x08] rec0=10 rec1=00 rec2=0b rec3=086
[0x09] rec0=0f rec1=00 rec2=03 rec3=000
[0x0a] rec0=08 rec1=00 rec2=0a rec3=000
[0x0b] rec0=e3 rec1=80 rec2=00 rec3=000
tail 0x217652a6287d474737b4b 0x42a00088462060003
Free Block Chain:
0x7: 0000 00 05 02 7e 80 1f 20 20 20 20 20 20 20 20 20 20 ┆ ~ ┆
0x5: 0000 00 0c 00 52 80 21 20 20 20 20 20 20 20 20 20 20 ┆ R ! ┆
0xc: 0000 00 06 00 05 80 02 2a 2a 02 00 34 f4 aa cd 83 42 ┆ ** 4 B┆
0x6: 0000 00 00 03 fc 80 08 2a 2a 2a 2a 2a 2a 2a 2a 08 00 ┆ ******** ┆