DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

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 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ R T

⟦a53761b2f⟧ TextFile

    Length: 3278 (0xcce)
    Types: TextFile
    Names: »RPC_V«

Derivation

└─⟦5f3412b64⟧ Bits:30000745 8mm tape, Rational 1000, ENVIRONMENT 12_6_5 TOOLS 
    └─ ⟦91c658230⟧ »DATA« 
        └─⟦458657fb6⟧ 
            └─⟦a5bbbb819⟧ 
                └─⟦this⟧ 
└─⟦d10a02448⟧ Bits:30000409 8mm tape, Rational 1000, ENVIRONMENT, D_12_7_3
    └─ ⟦fc9b38f02⟧ »DATA« 
        └─⟦9b46a407a⟧ 
            └─⟦eec0a994f⟧ 
                └─⟦this⟧ 

TextFile

with Interchange;
with Transport_Stream;

package Rpc is

    type Version_Number is new Interchange.Short_Integer;

    type Version_Range is
        record
            First, Last : Version_Number;
        end record;

    type Transaction_Id is new Interchange.Short_Integer;

    type Program_Number is new Interchange.Integer;

    type Procedure_Number is new Interchange.Short_Integer;


    type Error_Type is 
        (Error_Other, Error_Constraint, Error_Numeric, 
         Error_Program, Error_Storage, Error_Tasking, 
         Status_Error, Mode_Error, Name_Error, 
         Use_Error, Device_Error, End_Error, 
         Data_Error, Layout_Error, Error_Server_Defined);

    for Error_Type use (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);



    type Reject_Kind is 
        (Rej_No_Such_Program, 
         Rej_No_Such_Version, 
         Rej_No_Such_Procedure, 
         Rej_Invalid_Argument);

    for Reject_Kind use (0, 1, 2, 3);



    type Reject_Details (Kind : Reject_Kind := Rej_Invalid_Argument) is
        record
            case Kind is
                when Rej_No_Such_Version => 
                    Supported : Version_Range;
                when others => 
                    null;
            end case;
        end record;


    type Message_Kind is 
        (Call_Message, Reject_Message, Return_Message, Abort_Message);

    for Message_Kind use (0, 1, 2, 3);



    type Message_Header (Kind : Message_Kind := Return_Message) is
        record
            Id : Transaction_Id := 0;
            case Kind is
                when Call_Message => 
                    Program : Program_Number;
                    Version : Version_Number;
                    Proc    : Procedure_Number;
                     -- argument values follow
                when Reject_Message => 
                    Details : Reject_Details;
                when Return_Message => 
                    null;
                     -- result values follow
                when Abort_Message => 
                    Error : Error_Type;
            end case;
        end record;


    -- Interchange operations on the above types:

    subtype Stream_Id is Transport_Stream.Stream_Id;

    procedure Put (Into : Stream_Id; Data : Version_Range);
    procedure Get (From : Stream_Id; Data : out Version_Range);

    procedure Put_Message (Into : Stream_Id; Data : Message_Header);
    function Get_Message (From : Stream_Id) return Message_Header;

    -- This last procedure is a little unusual.  If the gotten value
    -- is OK, it returns it, otherwise it raises the corresponding
    -- exception.  In a sense, an exception (or lack thereof) is a
    -- possible return value.

    Protocol_Error       : exception;
    No_Such_Program      : exception;
    No_Such_Version      : exception;
    No_Such_Procedure    : exception;
    Other_Error          : exception;
    Invalid_Argument     : exception;
    Server_Defined_Error : exception;


    type Exception_Number is new Interchange.Integer;

    procedure Put (Into : Stream_Id; Data : Exception_Number);
    procedure Get (From : Stream_Id; Data : out Exception_Number);


    function Overlaps (X, Y : Version_Range) return Boolean;
    -- Return true if x and y have some versions in common.

end Rpc;