|
|
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: 14336 (0x3800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Trame, seg_054ce5
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Transport_Defs;
with Byte_Defs;
with Utils;
with Bounded_String;
with Text_Io;
with String_Utilities;
package body Trame is
function Fait_Trame (Index : Integer;
Adr_Host : Bounded_String.Variable_String;
Adr_Socket : Bounded_String.Variable_String;
Num_Requete : Bounded_String.Variable_String;
Commande : Bounded_String.Variable_String)
return Byte_Defs.Byte_String is
Trame_Temp : Bounded_String.Variable_String (1024);
begin
Bounded_String.Append
(Trame_Temp, String_Utilities.Number_To_String (Index, 10, 0, ' ') &
Ascii.Nul & Ascii.Eot);
Bounded_String.Append (Trame_Temp, Adr_Host);
Bounded_String.Append (Trame_Temp, Ascii.Eot);
Bounded_String.Append (Trame_Temp, Adr_Socket);
Bounded_String.Append (Trame_Temp, Ascii.Eot);
Bounded_String.Append (Trame_Temp, Num_Requete);
Bounded_String.Append (Trame_Temp, Ascii.Eot);
Bounded_String.Append (Trame_Temp, Commande);
Bounded_String.Append (Trame_Temp, Ascii.Eot);
return Utils.String_To_Byte_String (Bounded_String.Image (Trame_Temp));
end Fait_Trame;
function Calc_Long (Chaine : String) return Positive is
Long : Positive := 1;
begin
Debut:
for Taille in 1 .. 1024 loop
if Chaine (Taille) = Ascii.Nul then
exit Debut;
else
Long := Long + 1;
end if;
end loop Debut;
return Long;
end Calc_Long;
function Trouve_Debut
(Chaine_Str : String; Numero : Positive) return Positive is
Pointeur : Positive := 1;
Num_Courant : Positive := 1;
begin
if Numero /= 1 then
begin
Debut:
for Boucle in 1 .. 1024 loop
if Chaine_Str (Boucle) = Ascii.Eot then
begin
if (Num_Courant + 1) = Numero then
Pointeur := Boucle + 1;
exit Debut;
else
Num_Courant := Num_Courant + 1;
end if;
end;
end if;
end loop Debut;
end;
else
Pointeur := 1;
end if;
return Pointeur;
end Trouve_Debut;
function Trouve_Fin
(Chaine_Str : String; Position : Positive) return Positive is
Pointeur : Positive := Position;
begin
Debut:
for Boucle in Position .. 1024 loop
if Chaine_Str (Boucle) = Ascii.Eot then
Pointeur := Boucle;
exit Debut;
end if;
end loop Debut;
return Pointeur - 1;
end Trouve_Fin;
function Donne_String
(Trame_Recue : Byte_Defs.Byte_String; Numero : Positive)
return String is
Chaine_Src : String (1 .. 1024);
Chaine_Dest : String (1 .. 1024);
Debut : Positive;
Fin : Positive;
begin
Chaine_Src := Utils.Byte_String_To_String (Trame_Recue);
Debut := Trame.Trouve_Debut (Chaine_Src, Numero);
Fin := Trame.Trouve_Fin (Chaine_Src, Debut);
for Boucle in Debut .. Fin loop
Chaine_Dest (Boucle - Debut + 1) := Chaine_Src (Boucle);
end loop;
if Fin < 1024 then
for Boucle in Fin + 1 .. 1024 loop
Chaine_Dest (Boucle - Debut + 1) := Ascii.Nul;
end loop;
end if;
return Chaine_Dest;
end Donne_String;
function Donne_Bounded_String
(Trame_Recue : Byte_Defs.Byte_String; Numero : Positive)
return Bounded_String.Variable_String is
Chaine_Src : String (1 .. 1024);
Chaine_Dest : Bounded_String.Variable_String (1024);
Debut : Positive;
Fin : Positive;
Long : Positive;
begin
Chaine_Src := Utils.Byte_String_To_String (Trame_Recue);
Bounded_String.Copy (Chaine_Dest, Chaine_Src);
Long := Bounded_String.Length (Chaine_Dest);
Debut := Trouve_Debut (Chaine_Src, Numero);
Fin := Trouve_Fin (Chaine_Src, Debut);
Bounded_String.Delete (Chaine_Dest, 1, Debut - 1);
Bounded_String.Delete (Chaine_Dest, Fin - Debut + 2, Long - Fin);
return Chaine_Dest;
end Donne_Bounded_String;
function Donne_Integer
(Trame_Recue : Byte_Defs.Byte_String; Numero : Positive)
return Integer is
Chaine_Src : String (1 .. 1024);
Debut : Positive;
Fin : Positive;
Nombre : Integer;
begin
Chaine_Src := Utils.Byte_String_To_String (Trame_Recue);
Debut := Trame.Trouve_Debut (Chaine_Src, Numero);
Fin := Trame.Trouve_Fin (Chaine_Src, Debut);
Chaine_Src := Donne_String (Trame_Recue, Numero);
declare
Chaine_Temp : String (1 .. (Fin - Debut));
Test : Boolean;
begin
for Boucle in 1 .. (Fin - Debut) loop
Chaine_Temp (Boucle) := Chaine_Src (Boucle);
end loop;
String_Utilities.String_To_Number (Chaine_Temp, Nombre, Test, 10);
if not Test then
Text_Io.Put (" > Erreur conversion string->number < ");
end if;
end;
return Nombre;
end Donne_Integer;
function Convert_String (Chaine_Src : String) return String is
Trame_Temp : Bounded_String.Variable_String (1024);
Long : Positive;
begin
Long := Calc_Long (Chaine_Src);
Bounded_String.Copy (Trame_Temp, Chaine_Src);
Bounded_String.Delete (Trame_Temp, Long, 1024 - Long + 1);
return Bounded_String.Image (Trame_Temp);
end Convert_String;
function Donne_Host_Socket
(Trame_Temp : Bounded_String.Variable_String; Numero : Positive)
return Integer is
Long, Debut1, Fin1, Num_Ip : Positive;
Test : Boolean;
Nombre : Integer;
begin
Long := Bounded_String.Length (Trame_Temp);
Num_Ip := 1;
if Numero = 1 then
Debut1 := 1;
else
Cherche_Debut:
for Debut in 1 .. Long loop
if (Bounded_String.Char_At (Trame_Temp, Debut) =
Ascii.Nul) then
if Num_Ip = (Numero - 1) then
begin
Debut1 := Debut + 1;
exit Cherche_Debut;
end;
else
Num_Ip := Num_Ip + 1;
end if;
end if;
end loop Cherche_Debut;
end if;
Num_Ip := 1;
Cherche_Fin:
for Fin in 1 .. Long loop
if (Bounded_String.Char_At (Trame_Temp, Fin) = Ascii.Nul) then
if Num_Ip = Numero then
begin
Fin1 := Fin - 1;
exit Cherche_Fin;
end;
else
Num_Ip := Num_Ip + 1;
end if;
end if;
end loop Cherche_Fin;
String_Utilities.String_To_Number
(Bounded_String.Extract (Trame_Temp, Debut1, Fin1),
Nombre, Test, 10);
if Nombre = 256 then
Nombre := 0;
end if;
return Nombre;
end Donne_Host_Socket;
function Donne_Host (Trame_Temp : Bounded_String.Variable_String)
return Transport_Defs.Host_Id is
Nbr1, Nbr2, Nbr3, Nbr4 : Integer;
Adr_Host : Transport_Defs.Host_Id (1 .. 4);
begin
Nbr1 := Trame.Donne_Host_Socket (Trame_Temp, 1);
Nbr2 := Trame.Donne_Host_Socket (Trame_Temp, 2);
Nbr3 := Trame.Donne_Host_Socket (Trame_Temp, 3);
Nbr4 := Trame.Donne_Host_Socket (Trame_Temp, 4);
Adr_Host (1 .. 4) := (Byte_Defs.Byte (Nbr1), Byte_Defs.Byte (Nbr2),
Byte_Defs.Byte (Nbr3), Byte_Defs.Byte (Nbr4));
return Adr_Host;
end Donne_Host;
function Donne_Socket (Trame_Temp : Bounded_String.Variable_String)
return Transport_Defs.Socket_Id is
Nbr1, Nbr2 : Integer;
Adr_Socket : Transport_Defs.Socket_Id (1 .. 2);
begin
Nbr1 := Trame.Donne_Host_Socket (Trame_Temp, 1);
Nbr2 := Trame.Donne_Host_Socket (Trame_Temp, 2);
Adr_Socket (1 .. 2) := (Byte_Defs.Byte (Nbr1), Byte_Defs.Byte (Nbr2));
return Adr_Socket;
end Donne_Socket;
function Fait_Host_String
(Nbr1 : Integer; Nbr2 : Integer; Nbr3 : Integer; Nbr4 : Integer)
return Bounded_String.Variable_String is
Trame_Temp : Bounded_String.Variable_String (1024);
Long : Positive;
Nbr11, Nbr12, Nbr13, Nbr14 : Integer;
begin
Nbr11 := Nbr1;
Nbr12 := Nbr2;
Nbr13 := Nbr3;
Nbr14 := Nbr4;
if Nbr11 = 0 then
Nbr11 := 256;
end if;
if Nbr12 = 0 then
Nbr12 := 256;
end if;
if Nbr13 = 0 then
Nbr13 := 256;
end if;
if Nbr14 = 0 then
Nbr14 := 256;
end if;
Bounded_String.Append
(Trame_Temp, (String_Utilities.Number_To_String (Nbr11, 10, 0, ' ') &
Ascii.Nul));
Bounded_String.Append
(Trame_Temp, (String_Utilities.Number_To_String (Nbr12, 10, 0, ' ') &
Ascii.Nul));
Bounded_String.Append
(Trame_Temp, (String_Utilities.Number_To_String (Nbr13, 10, 0, ' ') &
Ascii.Nul));
Bounded_String.Append
(Trame_Temp, (String_Utilities.Number_To_String (Nbr14, 10, 0, ' ') &
Ascii.Nul));
return Trame_Temp;
end Fait_Host_String;
function Fait_Socket_String (Nbr1 : Integer; Nbr2 : Integer)
return Bounded_String.Variable_String is
Trame_Temp : Bounded_String.Variable_String (1024);
Long : Positive;
Nbr11, Nbr12 : Integer;
begin
Nbr11 := Nbr1;
Nbr12 := Nbr2;
if Nbr11 = 0 then
Nbr11 := 256;
end if;
if Nbr12 = 0 then
Nbr12 := 256;
end if;
Bounded_String.Append
(Trame_Temp, (String_Utilities.Number_To_String (Nbr11, 10, 0, ' ') &
Ascii.Nul));
Bounded_String.Append
(Trame_Temp, (String_Utilities.Number_To_String (Nbr12, 10, 0, ' ') &
Ascii.Nul));
return Trame_Temp;
end Fait_Socket_String;
function Fait_Host (Adr_Host : Transport_Defs.Host_Id)
return Bounded_String.Variable_String is
Nbr1, Nbr2, Nbr3, Nbr4 : Integer;
begin
Nbr1 := Integer (Adr_Host (1));
Nbr2 := Integer (Adr_Host (2));
Nbr3 := Integer (Adr_Host (3));
Nbr4 := Integer (Adr_Host (4));
return Fait_Host_String (Nbr1, Nbr2, Nbr3, Nbr4);
end Fait_Host;
function Fait_Socket (Adr_Socket : Transport_Defs.Socket_Id)
return Bounded_String.Variable_String is
Nbr1, Nbr2 : Integer;
begin
Nbr1 := Integer (Adr_Socket (1));
Nbr2 := Integer (Adr_Socket (2));
return Fait_Socket_String (Nbr1, Nbr2);
end Fait_Socket;
end Trame;
nblk1=d
nid=0
hdr6=1a
[0x00] rec0=1c rec1=00 rec2=01 rec3=06c
[0x01] rec0=20 rec1=00 rec2=02 rec3=012
[0x02] rec0=1b rec1=00 rec2=03 rec3=056
[0x03] rec0=1f rec1=00 rec2=04 rec3=016
[0x04] rec0=1b rec1=00 rec2=05 rec3=00a
[0x05] rec0=1b rec1=00 rec2=06 rec3=07e
[0x06] rec0=1b rec1=00 rec2=07 rec3=06a
[0x07] rec0=1a rec1=00 rec2=08 rec3=058
[0x08] rec0=1a rec1=00 rec2=09 rec3=078
[0x09] rec0=1f rec1=00 rec2=0a rec3=018
[0x0a] rec0=18 rec1=00 rec2=0b rec3=00a
[0x0b] rec0=1e rec1=00 rec2=0c rec3=000
[0x0c] rec0=0b rec1=00 rec2=0d rec3=000
tail 0x2175d8c0a87b8857dfad6 0x42a00088462060003