DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦400ca49b8⟧ Ada Source

    Length: 18432 (0x4800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Trame, seg_0570ae

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



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;

E3 Meta Data

    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