|
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 - download
Length: 18432 (0x4800) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Trame, seg_0570ae
└─⟦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 : Integer; Commande : Bounded_String.Variable_String) return Byte_Defs.Byte_String is Trame_Temp : Bounded_String.Variable_String (1024); Long : Positive; 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, String_Utilities.Number_To_String (Num_Requete, 10, 0, ' ') & Ascii.Nul & Ascii.Eot); Bounded_String.Append (Trame_Temp, Commande); Bounded_String.Append (Trame_Temp, Ascii.Eot); Long := Bounded_String.Length (Trame_Temp); for Compteur in Long + 1 .. 1024 loop Bounded_String.Insert (Trame_Temp, Compteur, Ascii.Nul); end loop; 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 Extrait (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, Utils.Byte_String_To_String (Trame_Recue)); Long := Bounded_String.Length (Chaine_Dest); Debut := Trouve_Debut (Utils.Byte_String_To_String (Trame_Recue), Numero); Fin := Trouve_Fin (Utils.Byte_String_To_String (Trame_Recue), Debut); Bounded_String.Delete (Chaine_Dest, 1, Debut - 1); Bounded_String.Delete (Chaine_Dest, Fin - Debut + 2, Long - Fin); return Chaine_Dest; end Extrait; --************************************************************************** function Extrait_Nom_Contrat (Trame_Temp : Byte_Defs.Byte_String) return Bounded_String.Variable_String is Contrat : Bounded_String.Variable_String (1024); Symbole : Character := '('; --Ceci est le symbole a rechercher Long : Positive; Debut : Positive := 1; begin Contrat := Trame.Extrait (Trame_Temp, 5); --Extrait le champ "Commande" Long := Bounded_String.Length (Contrat); while (Bounded_String.Char_At (Contrat, Debut) /= Symbole) and (Debut <= Long) loop Debut := Debut + 1; end loop; if Debut <= Long then --Efface ce qui suit le contrat: les (...) Bounded_String.Delete (Contrat, Debut, Long - Debut + 1); end if; return Contrat; --Si la "(" a ete trouvee, le contrat est retourne --Sinon c'est tout le champ "Commande" (cas Erreur) end Extrait_Nom_Contrat; --************************************************************************** function Donne_Integer (Trame_Recue : Byte_Defs.Byte_String; Numero : Positive) return Integer is Chaine_Src : Bounded_String.Variable_String (1024); Debut : Positive; Fin : Positive; Nombre : Integer; begin Debut := Trame.Trouve_Debut (Utils.Byte_String_To_String (Trame_Recue), Numero); Fin := Trame.Trouve_Fin (Utils.Byte_String_To_String (Trame_Recue), Debut); Chaine_Src := Bounded_String.Value (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) := Bounded_String.Char_At (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=11 nid=0 hdr6=22 [0x00] rec0=1c rec1=00 rec2=01 rec3=06c [0x01] rec0=1a rec1=00 rec2=0e rec3=002 [0x02] rec0=05 rec1=00 rec2=02 rec3=00e [0x03] rec0=1c rec1=00 rec2=03 rec3=038 [0x04] rec0=1c rec1=00 rec2=04 rec3=00a [0x05] rec0=1a rec1=00 rec2=05 rec3=070 [0x06] rec0=18 rec1=00 rec2=06 rec3=038 [0x07] rec0=19 rec1=00 rec2=11 rec3=034 [0x08] rec0=00 rec1=00 rec2=10 rec3=00c [0x09] rec0=1d rec1=00 rec2=0f rec3=030 [0x0a] rec0=03 rec1=00 rec2=07 rec3=00c [0x0b] rec0=1b rec1=00 rec2=08 rec3=00e [0x0c] rec0=1c rec1=00 rec2=09 rec3=016 [0x0d] rec0=17 rec1=00 rec2=0a rec3=036 [0x0e] rec0=1e rec1=00 rec2=0b rec3=004 [0x0f] rec0=1b rec1=00 rec2=0c rec3=01e [0x10] rec0=19 rec1=00 rec2=0d rec3=000 tail 0x21763b26a87c5983cccf2 0x42a00088462060003