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

⟦6185da91a⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Trame_Old, seg_054770

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 Byte_Defs;
with Utils;
with Bounded_String;
with Text_Io;
with String_Utilities;

package body Trame_Old is


    function Fait_Trame (Adr_Client : String;
                         Adr_Serveur : String;
                         Num_Requete : Integer;
                         Type_Msg : Integer;
                         Donnees : String) return Byte_Defs.Byte_String is
        Trame_Faite : Byte_Defs.Byte_String (1 .. 1024);

        Trame_Temp : Bounded_String.Variable_String (1024);
        Long_Courante : Positive;
        Long_Trame : Positive;
        Long_Element : Positive;
        Pointeur : Positive;

    begin
        Pointeur := 1;
        Bounded_String.Insert (Trame_Temp, Pointeur, Adr_Client);
        Pointeur :=
           Pointeur + Calc_Long
                         (Adr_Client);      --l'octet nul est aussi contenu
        Bounded_String.Insert (Trame_Temp, Pointeur,
                               Ascii.Eot);    --eot: separateur
        Pointeur := Pointeur + 1;
        Bounded_String.Insert (Trame_Temp, Pointeur, Adr_Serveur);
        Pointeur := Pointeur + Calc_Long (Adr_Serveur);
        Bounded_String.Insert (Trame_Temp, Pointeur,
                               Ascii.Eot);    --eot: separateur
        Pointeur := Pointeur + 1;
        Bounded_String.Insert
           (Trame_Temp, Pointeur,
            String_Utilities.Number_To_String (Num_Requete, 10, 0, ' ') &
               Ascii.Nul);
        Pointeur := Pointeur + Calc_Long
                                  (String_Utilities.Number_To_String
                                      (Num_Requete, 10, 0, ' ') & Ascii.Nul);
        Bounded_String.Insert (Trame_Temp, Pointeur,
                               Ascii.Eot);    --eot: separateur
        Pointeur := Pointeur + 1;
        Bounded_String.Insert
           (Trame_Temp, Pointeur,
            String_Utilities.Number_To_String (Type_Msg, 10, 0, ' ') &
               Ascii.Nul);
        Pointeur := Pointeur + Calc_Long
                                  (String_Utilities.Number_To_String
                                      (Type_Msg, 10, 0, ' ') & Ascii.Nul);
        Bounded_String.Insert (Trame_Temp, Pointeur,
                               Ascii.Eot);    --eot: separateur
        Pointeur := Pointeur + 1;
        Bounded_String.Insert (Trame_Temp, Pointeur, Donnees);
        Pointeur := Pointeur +
                       Calc_Long (Donnees);      --l'octet nul est aussi contenu
        Bounded_String.Insert (Trame_Temp, Pointeur,
                               Ascii.Eot);    --eot: separateur
        return Utils.String_To_Byte_String
                  (Bounded_String.Extract (Trame_Temp, 1, Pointeur));
    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.Nul then
                    Pointeur := Boucle;
                    exit Debut;
                end if;
            end loop Debut;
        return Pointeur;
    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 := Trouve_Debut (Chaine_Src, Numero);
        Fin := 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_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 := Trouve_Debut (Chaine_Src, Numero);
        Fin := 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< ");
            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;

end Trame_Old;

E3 Meta Data

    nblk1=7
    nid=0
    hdr6=e
        [0x00] rec0=1f rec1=00 rec2=01 rec3=06c
        [0x01] rec0=14 rec1=00 rec2=02 rec3=028
        [0x02] rec0=16 rec1=00 rec2=03 rec3=05e
        [0x03] rec0=1c rec1=00 rec2=04 rec3=026
        [0x04] rec0=21 rec1=00 rec2=05 rec3=07c
        [0x05] rec0=1e rec1=00 rec2=06 rec3=01e
        [0x06] rec0=1c rec1=00 rec2=07 rec3=000
    tail 0x2175d8c3887b885828a6c 0x42a00088462060003