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

⟦fa12d4063⟧ Ada Source

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

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 Text_Io;
with Message;
with Communication;
with Transport;
with V_String;
with Gestion_Orb;
with Transport_Defs;

package body Orb is

    Connection1 : Transport.Connection_Id;
    Connection2 : Transport.Connection_Id;  
    Host_Id : Transport_Defs.Host_Id (1 .. 4);
    Socket_Id : Transport_Defs.Socket_Id (1 .. 2);
    Arret_General : Boolean := False;

    task Emission1 is
        entry Emission_Message (O : Message.Objet);
        entry Arret;
        entry Go;
    end Emission1;

    task Reception2 is
        entry Arret;
        entry Go;
    end Reception2;

    procedure Traitement (O : in out Message.Objet;
                          Socket_Recue : Transport_Defs.Socket_Id;
                          Host_Recu : Transport_Defs.Host_Id;
                          Socket_Envoi : in out Transport_Defs.Socket_Id;
                          Host_Envoi : in out Transport_Defs.Host_Id);

    task body Emission1 is
        O : Message.Objet;
        Stop : Boolean := False;  
    begin
        loop
            accept Go do
                Communication.Ouvrir_Autre (Connection1);
            end Go;
            loop
                select
                    accept Emission_Message (O : Message.Objet) do
                        Text_Io.Put_Line ("objet avant emission orb");  
                        Message.Afficher (O);
                        Text_Io.Put_Line ("");
                        Message.Emission_Orb
                           (O, Connection1, Socket_Id, Host_Id);  
                        Text_Io.Put_Line
                           ("apres emission de la reponse de l'orb");
                    end Emission_Message;

                or
                    accept Arret do
                        Communication.Fermer (Connection1);
                        Stop := True;
                    end Arret;  
                end select;
                exit when Stop;
            end loop;
            exit when Stop;
        end loop;
        Text_Io.Put_Line ("fin emission");
    end Emission1;


    task body Reception2 is

        Socket_A_Emettre : Transport_Defs.Socket_Id (1 .. 2);
        Host_A_Emettre : Transport_Defs.Host_Id (1 .. 4);
        O : Message.Objet;
        Stop : Boolean := False;

    begin
        loop  
            accept Go do
                Communication.Ouvrir_Orb (Connection2);
                Gestion_Orb.Init_Tableaux;
            end Go;
            loop
                select
                    accept Arret do
                        Communication.Fermer_Orb (Connection2);
                        Stop := True;
                    end Arret;

                else
                    Text_Io.Put_Line ("avant la reception de l'orb");
                    if Arret_General then
                        Communication.Fermer (Connection2);
                        Stop := True;
                    else
                        Message.Reception_Orb
                           (O, Connection2, Socket_Id, Host_Id);  
                        Text_Io.Put_Line ("affichage apres reception de l'orb");
                        Message.Afficher (O);
                        Text_Io.Put_Line ("");
                        Text_Io.Put_Line ("avant traitement reception orb");
                        Traitement (O, Socket_Id, Host_Id,
                                    Socket_A_Emettre, Host_A_Emettre);
                    end if;
                    Text_Io.Put_Line ("apres traitement reception orb");
                end select;
                exit when Stop;
            end loop;
            exit when Stop;
        end loop;
        Text_Io.Put_Line ("fin reception");
    end Reception2;

    procedure Traitement (O : in out Message.Objet;
                          Socket_Recue : Transport_Defs.Socket_Id;
                          Host_Recu : Transport_Defs.Host_Id;
                          Socket_Envoi : in out Transport_Defs.Socket_Id;
                          Host_Envoi : in out Transport_Defs.Host_Id) is  
    begin
        Gestion_Orb.Traite_Objet (O, Socket_Recue, Host_Recu,
                                  Socket_Envoi, Host_Envoi);  
        Socket_Id := Socket_Envoi;
        Host_Id := Host_Envoi;
        Emission1.Emission_Message (O);
    end Traitement;

    procedure Mise_En_Route_Orb is
    begin
        Reception2.Go;
        Emission1.Go;
    end Mise_En_Route_Orb;

    procedure Arret_Orb is
    begin
        Emission1.Arret;
        Arret_General := True;
    end Arret_Orb;

end Orb;

E3 Meta Data

    nblk1=7
    nid=3
    hdr6=a
        [0x00] rec0=24 rec1=00 rec2=01 rec3=016
        [0x01] rec0=1a rec1=00 rec2=02 rec3=006
        [0x02] rec0=20 rec1=00 rec2=05 rec3=008
        [0x03] rec0=15 rec1=00 rec2=07 rec3=05e
        [0x04] rec0=18 rec1=00 rec2=04 rec3=000
        [0x05] rec0=18 rec1=00 rec2=05 rec3=000
        [0x06] rec0=68 rec1=5c rec2=00 rec3=000
    tail 0x21763015287c4992b34bf 0x42a00088462060003
Free Block Chain:
  0x3: 0000  00 06 03 fc 80 24 20 20 20 20 20 20 20 20 20 20  ┆     $          ┆
  0x6: 0000  00 00 01 d5 80 01 3b 01 00 22 20 20 20 20 20 20  ┆      ;  "      ┆