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

⟦59d3c226a⟧ Ada Source

    Length: 19456 (0x4c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Frame_Defs, seg_055deb

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 Text_Io;
with Utils;
with Host_Id_Io;
with Transport_Defs;

package body Frame_Defs is


    Separator : constant Byte_Defs.Byte := 16#FF#;


    procedure Cut_Frame (The_Data : Communication_Data;
                         Position : in out Positive;
                         The_Var_Str : out V_String.Variable_String) is  
        I : Positive := Position;
    begin
        while not (Byte_Defs."=" (The_Data (I), Separator)) loop
            I := I + 1;
        end loop;
        The_Var_Str := V_String.Value (Utils.Byte_String_To_String
                                          (The_Data (Position .. I - 1)));
        Position := I + 1;
    end Cut_Frame;


    procedure Cut_Frame (The_Data : Communication_Data;
                         Position : in out Positive;
                         The_Byte_String : out Byte_Defs.Byte_String) is

        I : Positive := Position;
    begin
        while not (Byte_Defs."=" (The_Data (I), Separator)) loop
            I := I + 1;
        end loop;
        The_Byte_String := The_Data (Position .. I - 1);
        Position := I + 1;
    end Cut_Frame;

    procedure Cut_Frame (The_Data : Communication_Data;
                         Position : in out Positive;
                         The_Nat : out Natural) is
        I : Positive := Position;
    begin
        while not (Byte_Defs."=" (The_Data (I), Separator)) loop
            I := I + 1;
        end loop;
        The_Nat := Natural'Value (Utils.Byte_String_To_String
                                     (The_Data (Position .. I - 1)));
        Position := I + 1;
    end Cut_Frame;


    function Image (The_Frame : Frame) return String is
        The_Str_Separator : String (1 .. 1) :=
           Utils.Byte_String_To_String
              (Byte_Defs.Byte_String'(1 .. 1 => Separator));
    begin
        return V_String.Image (The_Frame.Nom_Exp) & The_Str_Separator &
                  Utils.Byte_String_To_String
                     (Byte_Defs.Byte_String (The_Frame.Dest_Socket)) &
                  The_Str_Separator & Host_Id_Io.Image (The_Frame.Dest_Host) &
                  The_Str_Separator &
                  Utils.Byte_String_To_String
                     (Byte_Defs.Byte_String (The_Frame.Exp_Socket)) &
                  The_Str_Separator &
                  Host_Id_Io.Image (The_Frame.Exp_Host) &
                  The_Str_Separator &
                  Natural'Image (The_Frame.Phase) &
                  The_Str_Separator &
                  Natural'Image (The_Frame.Message_Number) &
                  The_Str_Separator &
                  V_String.Image (The_Frame.Service_Kind) &
                  The_Str_Separator &
                  V_String.Image (The_Frame.Service) &
                  The_Str_Separator &
                  V_String.Image (The_Frame.Message) & The_Str_Separator;

    end Image;


    procedure Init_Frame (Nom_Exp : String;
                          Dest_Socket : Orb_Defs.Socket_Id;
                          Dest_Host : Orb_Defs.Host_Id;
                          Exp_Socket : Orb_Defs.Socket_Id;
                          Exp_Host : Orb_Defs.Host_Id;
                          Phase : Natural;
                          Message_Number : Natural;
                          Service_Kind, Service, Message : String;
                          The_Frame : out Frame) is  
    begin
        The_Frame.Nom_Exp := V_String.Value (Nom_Exp);
        The_Frame.Dest_Socket := Dest_Socket;
        The_Frame.Dest_Host := Dest_Host;
        The_Frame.Exp_Socket := Exp_Socket;
        The_Frame.Exp_Host := Exp_Host;
        The_Frame.Phase := Phase;
        The_Frame.Message_Number := Message_Number;
        The_Frame.Service_Kind := V_String.Value (Service_Kind);
        The_Frame.Service := V_String.Value (Service);
        The_Frame.Message := V_String.Value (Message);
    end Init_Frame;


    function Init_Frame
                (Nom_Exp : String;
                 Dest_Socket : Orb_Defs.Socket_Id;
                 Dest_Host : Orb_Defs.Host_Id;
                 Exp_Socket : Orb_Defs.Socket_Id;
                 Exp_Host : Orb_Defs.Host_Id;
                 Phase : Natural;
                 Message_Number : Natural;
                 Service_Kind, Service, Message : String) return Frame is
        Tmp_Frame : Frame;
    begin
        Init_Frame (Nom_Exp, Dest_Socket, Dest_Host, Exp_Socket,
                    Exp_Host, Phase, Message_Number,
                    Service_Kind, Service, Message, Tmp_Frame);
        return Tmp_Frame;
    end Init_Frame;


    procedure Set_Frame (The_Data : Communication_Data;
                         The_Frame : out Frame) is
        Position : Positive := The_Data'First;
    begin
        Cut_Frame (The_Data, Position, The_Frame.Nom_Exp);
        Cut_Frame (The_Data, Position,
                   Byte_Defs.Byte_String (The_Frame.Dest_Socket));
        Cut_Frame (The_Data, Position,
                   Byte_Defs.Byte_String (The_Frame.Dest_Host));
        Cut_Frame (The_Data, Position,
                   Byte_Defs.Byte_String (The_Frame.Exp_Socket));
        Cut_Frame (The_Data, Position,
                   Byte_Defs.Byte_String (The_Frame.Exp_Host));
        Cut_Frame (The_Data, Position, The_Frame.Phase);
        Cut_Frame (The_Data, Position, The_Frame.Message_Number);
        Cut_Frame (The_Data, Position, The_Frame.Service_Kind);
        Cut_Frame (The_Data, Position, The_Frame.Service);
        Cut_Frame (The_Data, Position, The_Frame.Message);
    end Set_Frame;




    procedure Get_Frame (The_Frame : in Frame;
                         The_Byte_String : out Communication_Data) is
        Max : Positive := 256;
        Len : Positive := 22 + V_String.Length (The_Frame.Nom_Exp) +
                             Natural'Image (The_Frame.Phase)'Length +
                             Natural'Image (The_Frame.Message_Number)'Length +
                             V_String.Length (The_Frame.Service_Kind) +
                             V_String.Length (The_Frame.Service) +
                             V_String.Length (The_Frame.Message);
        Fin_Trame : Byte_Defs.Byte_String (Len + 1 .. Max) :=
           Byte_Defs.Byte_String'(Len + 1 .. Max => 0);
        use Byte_Defs;
    begin
        The_Byte_String :=
           Utils.String_To_Byte_String (V_String.Image (The_Frame.Nom_Exp)) &
              Separator & Byte_String (The_Frame.Dest_Socket) &
              Separator & Byte_String (The_Frame.Dest_Host) &
              Separator & Byte_String (The_Frame.Exp_Socket) &
              Separator & Byte_String (The_Frame.Exp_Host) & Separator &
              Utils.String_To_Byte_String (Natural'Image (The_Frame.Phase)) &
              Separator & Utils.String_To_Byte_String
                             (Natural'Image (The_Frame.Message_Number)) &
              Separator & Utils.String_To_Byte_String
                             (V_String.Image (The_Frame.Service_Kind)) &
              Separator & Utils.String_To_Byte_String
                             (V_String.Image (The_Frame.Service)) & Separator &
              Utils.String_To_Byte_String
                 (V_String.Image (The_Frame.Message)) & Separator & Fin_Trame;

    end Get_Frame;







    procedure Set (The_String_Field : String_Field;
                   The_Str : String;
                   The_Frame : in out Frame) is
    begin
        case The_String_Field is
            when Nom_Exp_Field =>
                V_String.Free (The_Frame.Nom_Exp);
                V_String.Copy (The_Frame.Nom_Exp, The_Str);
            when Service_Kind_Field =>
                V_String.Free (The_Frame.Service_Kind);
                V_String.Copy (The_Frame.Service_Kind, The_Str);
            when Service_Field =>
                V_String.Free (The_Frame.Service);
                V_String.Copy (The_Frame.Service, The_Str);
            when Message_Field =>
                V_String.Free (The_Frame.Message);
                V_String.Copy (The_Frame.Message, The_Str);
        end case;
    end Set;

    procedure Set (The_String_Field : String_Field;
                   The_Var_Str : in V_String.Variable_String;
                   The_Frame : in out Frame) is
    begin
        case The_String_Field is
            when Nom_Exp_Field =>
                V_String.Free (The_Frame.Nom_Exp);
                V_String.Copy (The_Frame.Nom_Exp, The_Var_Str);
            when Service_Kind_Field =>
                V_String.Free (The_Frame.Service_Kind);
                V_String.Copy (The_Frame.Service_Kind, The_Var_Str);
            when Service_Field =>
                V_String.Free (The_Frame.Service);
                V_String.Copy (The_Frame.Service, The_Var_Str);
            when Message_Field =>
                V_String.Free (The_Frame.Message);
                V_String.Copy (The_Frame.Message, The_Var_Str);
        end case;
    end Set;

    procedure Set (The_Socket_Field : Socket_Field;
                   The_Var_Socket : in Orb_Defs.Socket_Id;
                   The_Frame : in out Frame) is
    begin
        case The_Socket_Field is
            when Dest_Socket_Field =>
                The_Frame.Dest_Socket := The_Var_Socket;
            when Exp_Socket_Field =>
                The_Frame.Exp_Socket := The_Var_Socket;
        end case;
    end Set;


    procedure Set (The_Host_Field : Host_Field;
                   The_Var_Host : in Orb_Defs.Host_Id;
                   The_Frame : in out Frame) is
    begin
        case The_Host_Field is
            when Dest_Host_Field =>
                The_Frame.Dest_Host := The_Var_Host;
            when Exp_Host_Field =>
                The_Frame.Exp_Host := The_Var_Host;
        end case;
    end Set;


    procedure Set (The_Natural_Field : Natural_Field;
                   The_Var_Nat : in Natural;
                   The_Frame : in out Frame) is
    begin
        case The_Natural_Field is
            when Phase_Field =>
                The_Frame.Phase := The_Var_Nat;
            when Message_Number_Field =>
                The_Frame.Message_Number := The_Var_Nat;
        end case;
    end Set;


    procedure Get (The_String_Field : String_Field;
                   The_Frame : Frame;
                   The_Str : out String) is
    begin
        case The_String_Field is
            when Nom_Exp_Field =>
                The_Str := V_String.Extract (The_Frame.Nom_Exp, 1, 8);
            when Service_Kind_Field =>
                The_Str := V_String.Extract (The_Frame.Service_Kind, 1, 4);
            when Service_Field =>
                The_Str := V_String.Extract (The_Frame.Service, 1, 4);
            when Message_Field =>
                The_Str :=
                   V_String.Image (The_Frame.Message) &
                      String'(V_String.Length (The_Frame.Message) + 1 .. 256 =>
                                 ' ');
        end case;
    end Get;

    procedure Get (The_String_Field : String_Field;
                   The_Frame : Frame;
                   The_Str : in out V_String.Variable_String) is
    begin
        case The_String_Field is
            when Nom_Exp_Field =>
                V_String.Copy (The_Str, V_String.Extract
                                           (The_Frame.Nom_Exp, 1, 8));
            when Service_Kind_Field =>
                V_String.Copy (The_Str, V_String.Extract
                                           (The_Frame.Service_Kind, 1, 4));
            when Service_Field =>
                V_String.Copy (The_Str, V_String.Extract
                                           (The_Frame.Service, 1, 4));
            when Message_Field =>
                V_String.Copy (The_Str, The_Frame.Message);

        end case;
    end Get;

    procedure Get (The_Socket_Field : Socket_Field;
                   The_Frame : Frame;
                   The_Socket_Id : out Orb_Defs.Socket_Id) is
    begin
        case The_Socket_Field is
            when Dest_Socket_Field =>
                The_Socket_Id := The_Frame.Dest_Socket;
            when Exp_Socket_Field =>
                The_Socket_Id := The_Frame.Exp_Socket;
        end case;
    end Get;


    procedure Get (The_Host_Field : Host_Field;
                   The_Frame : Frame;
                   The_Host_Id : out Orb_Defs.Host_Id) is
    begin
        case The_Host_Field is
            when Dest_Host_Field =>
                The_Host_Id := The_Frame.Dest_Host;
            when Exp_Host_Field =>
                The_Host_Id := The_Frame.Exp_Host;
        end case;
    end Get;


    procedure Get (The_Natural_Field : Natural_Field;
                   The_Frame : Frame;
                   The_Nat : out Natural) is
    begin
        case The_Natural_Field is
            when Phase_Field =>
                The_Nat := The_Frame.Phase;
            when Message_Number_Field =>
                The_Nat := The_Frame.Message_Number;  
        end case;
    end Get;

end Frame_Defs;

E3 Meta Data

    nblk1=12
    nid=3
    hdr6=22
        [0x00] rec0=22 rec1=00 rec2=01 rec3=048
        [0x01] rec0=1b rec1=00 rec2=08 rec3=018
        [0x02] rec0=16 rec1=00 rec2=0f rec3=03a
        [0x03] rec0=08 rec1=00 rec2=02 rec3=02c
        [0x04] rec0=18 rec1=00 rec2=0e rec3=01a
        [0x05] rec0=11 rec1=00 rec2=04 rec3=060
        [0x06] rec0=15 rec1=00 rec2=0a rec3=070
        [0x07] rec0=11 rec1=00 rec2=0d rec3=070
        [0x08] rec0=1c rec1=00 rec2=0c rec3=040
        [0x09] rec0=17 rec1=00 rec2=12 rec3=014
        [0x0a] rec0=01 rec1=00 rec2=07 rec3=018
        [0x0b] rec0=1e rec1=00 rec2=06 rec3=046
        [0x0c] rec0=19 rec1=00 rec2=0b rec3=09e
        [0x0d] rec0=1a rec1=00 rec2=09 rec3=02e
        [0x0e] rec0=01 rec1=00 rec2=11 rec3=04c
        [0x0f] rec0=1f rec1=00 rec2=05 rec3=028
        [0x10] rec0=06 rec1=00 rec2=10 rec3=000
        [0x11] rec0=00 rec1=00 rec2=00 rec3=000
    tail 0x21761355887c07ca7d22e 0x42a00088462060003
Free Block Chain:
  0x3: 0000  00 00 00 15 80 03 73 65 3b 03 00 0c 20 20 20 20  ┆      se;       ┆