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

⟦369dc8aed⟧ Ada Source

    Length: 7168 (0x1c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Rs6000_Server, seg_03cc99

Derivation

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

E3 Source Code



with System_Interface;
with Text_Io;
with Transport_Interchange;
with Interchange;
with Unix_Base_Types;
with System;
package body Rs6000_Server is


    procedure Write_String_C (C_Message : System.Address;
                              C_Tty : System.Address;
                              C_Length : Integer);
    pragma Interface (C, Write_String_C);
    pragma Interface_Information (Write_String_C, ".write_string");

    procedure Write_Char_C (C_Message : Interchange.Byte;
                            C_Tty : System.Address);  
    pragma Interface (C, Write_Char_C);
    pragma Interface_Information (Write_Char_C, ".write_char");


    procedure Process_Call (Stream : Transport_Stream.Stream_Id;
                            Id : Rpc.Transaction_Id;
                            Version : Rpc.Version_Number;
                            Proc : Rpc.Procedure_Number) is

    begin
        case Proc is
            when Rs6000_Defs.Proc_Number.Put_String =>
                -- Text_Io.Put_Line (Transport_Interchange.Get_String (Stream));
                -- Text_Io.Put_Line (Transport_Interchange.Get_String (Stream));

                declare
                    C_Message : constant String :=
                       Transport_Interchange.Get_String (Stream);
                    C_Tty : constant String :=
                       Transport_Interchange.Get_String (Stream) & Ascii.Nul;
                begin
                    Write_String_C (C_Message =>
                                       C_Message (C_Message'First)'Address,
                                    C_Tty => C_Tty (C_Tty'First)'Address,
                                    C_Length => C_Message'Length);
                end;

                Rpc_Server.Begin_Response (Stream, Id);


            when Rs6000_Defs.Proc_Number.Put_Byte =>
                declare
                    C_Message : Interchange.Byte;
                begin
                    Transport_Interchange.Get (Stream, C_Message);  
                    Text_Io.Put_Line
                       ("received byte => *" &
                        Natural'Image (Natural (C_Message)) & "*");
                    declare
                        C_Tty : constant String :=
                           Transport_Interchange.Get_String (Stream) &
                              Ascii.Nul;
                    begin
                        Write_Char_C (C_Message => C_Message,
                                      C_Tty => C_Tty (C_Tty'First)'Address);  
                    end;
                end;

                Rpc_Server.Begin_Response (Stream, Id);


            when Rs6000_Defs.Proc_Number.Put_Byte_String =>
                declare
                    C_Message : constant Interchange.Byte_String :=
                       Transport_Interchange.Get_Byte_String (Stream);
                    C_Tty : constant String :=
                       Transport_Interchange.Get_String (Stream) & Ascii.Nul;
                begin
                    Write_String_C (C_Message =>
                                       C_Message (C_Message'First)'Address,
                                    C_Tty => C_Tty (C_Tty'First)'Address,
                                    C_Length => C_Message'Length);
                end;

                Rpc_Server.Begin_Response (Stream, Id);


            when others =>
                raise Rpc.No_Such_Procedure;
        end case;
    end Process_Call;

    procedure Serve_Gets is new Rpc_Server.Serve
                                   (Program => Rs6000_Defs.Program,
                                    Supported => (0, Rpc.Version_Number'Last),
                                    Process_Call => Process_Call);


    procedure Serve (Connection : Transport.Connection_Id) is
    begin
        Serve_Gets (Connection);

    end Serve;
end Rs6000_Server;

E3 Meta Data

    nblk1=6
    nid=5
    hdr6=8
        [0x00] rec0=1e rec1=00 rec2=01 rec3=05e
        [0x01] rec0=17 rec1=00 rec2=06 rec3=022
        [0x02] rec0=16 rec1=00 rec2=02 rec3=048
        [0x03] rec0=1c rec1=00 rec2=04 rec3=000
        [0x04] rec0=19 rec1=00 rec2=04 rec3=000
        [0x05] rec0=41 rec1=89 rec2=b6 rec3=213
    tail 0x2153544fc85e24e7af780 0x42a00088462060003
Free Block Chain:
  0x5: 0000  00 03 03 fc 80 08 20 64 65 63 6c 61 72 65 08 00  ┆       declare  ┆
  0x3: 0000  00 00 00 06 80 03 20 20 20 03 61 6c 6c 3b 08 00  ┆          all;  ┆