|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 5471 (0x155f)
Types: TextFile
Names: »B«
└─⟦149519bd4⟧ Bits:30000546 8mm tape, Rational 1000, !projects 93-07-13
└─⟦124ff5788⟧ »DATA«
└─⟦this⟧
└─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16
└─⟦6f12a12be⟧ »DATA«
└─⟦this⟧
WITH Io_Exceptions;
WITH Transport_Interchange;
PACKAGE BODY Rpc IS
PACKAGE Rkind IS NEW Transport_Interchange.Discrete (Reject_Kind);
PACKAGE Mkind IS NEW Transport_Interchange.Discrete (Message_Kind);
PACKAGE Error IS NEW Transport_Interchange.Discrete (Error_Type);
USE Transport_Interchange;
PROCEDURE Put (Into : Stream_Id; Data : Version_Range) IS
BEGIN
Put (Into, Interchange.Short_Integer (Data.First));
Put (Into, Interchange.Short_Integer (Data.Last));
END Put;
PROCEDURE Get (From : Stream_Id; Data : OUT Version_Range) IS
BEGIN
Get (From, Interchange.Short_Integer (Data.First));
Get (From, Interchange.Short_Integer (Data.Last));
END Get;
PROCEDURE Put_Reject (Into : Stream_Id; Data : Reject_Details) IS
BEGIN
Rkind.Put (Into, Data.Kind);
CASE Data.Kind IS
WHEN Rej_No_Such_Version =>
Put (Into, Data.Supported);
WHEN OTHERS =>
NULL;
END CASE;
END Put_Reject;
FUNCTION Get_Reject (From : Stream_Id) RETURN Reject_Details IS
Kind : Reject_Kind;
BEGIN
Rkind.Get (From, Kind);
DECLARE
Data : Reject_Details (Kind => Kind);
BEGIN
CASE Data.Kind IS
WHEN Rej_No_Such_Program =>
RAISE No_Such_Program;
WHEN Rej_No_Such_Version =>
Get (From, Data.Supported);
RAISE No_Such_Version;
WHEN Rej_No_Such_Procedure =>
RAISE No_Such_Procedure;
WHEN Rej_Invalid_Argument =>
RAISE Invalid_Argument;
END CASE;
RETURN Data;
END;
END Get_Reject;
PROCEDURE Put_Message (Into : Stream_Id; Data : Message_Header) IS
BEGIN
Mkind.Put (Into, Data.Kind);
Put (Into, Interchange.Short_Integer (Data.Id));
CASE Data.Kind IS
WHEN Call_Message =>
Put (Into, Interchange.Integer (Data.Program));
Put (Into, Interchange.Short_Integer (Data.Version));
Put (Into, Interchange.Short_Integer (Data.Proc));
WHEN Reject_Message =>
Put_Reject (Into, Data.Details);
WHEN Return_Message =>
NULL;
WHEN Abort_Message =>
Error.Put (Into, Data.Error);
END CASE;
END Put_Message;
FUNCTION Get_Message (From : Stream_Id) RETURN Message_Header IS
Kind : Message_Kind;
BEGIN
Mkind.Get (From, Kind);
DECLARE
Data : Message_Header (Kind => Kind);
BEGIN
Get (From, Interchange.Short_Integer (Data.Id));
CASE Kind IS
WHEN Call_Message =>
Get (From, Interchange.Integer (Data.Program));
Get (From, Interchange.Short_Integer (Data.Version));
Get (From, Interchange.Short_Integer (Data.Proc));
WHEN Reject_Message =>
Data.Details := Get_Reject (From);
WHEN Return_Message =>
NULL;
WHEN Abort_Message =>
Error.Get (From, Data.Error);
CASE Data.Error IS
WHEN Error_Other =>
RAISE Other_Error;
WHEN Error_Constraint =>
RAISE Standard.Constraint_Error;
WHEN Error_Numeric =>
RAISE Standard.Numeric_Error;
WHEN Error_Program =>
RAISE Standard.Program_Error;
WHEN Error_Storage =>
RAISE Standard.Storage_Error;
WHEN Error_Tasking =>
RAISE Standard.Tasking_Error;
WHEN Status_Error =>
RAISE Io_Exceptions.Status_Error;
WHEN Mode_Error =>
RAISE Io_Exceptions.Mode_Error;
WHEN Name_Error =>
RAISE Io_Exceptions.Name_Error;
WHEN Use_Error =>
RAISE Io_Exceptions.Use_Error;
WHEN Device_Error =>
RAISE Io_Exceptions.Device_Error;
WHEN End_Error =>
RAISE Io_Exceptions.End_Error;
WHEN Data_Error =>
RAISE Io_Exceptions.Data_Error;
WHEN Layout_Error =>
RAISE Io_Exceptions.Layout_Error;
WHEN Error_Server_Defined =>
RAISE Server_Defined_Error;
WHEN OTHERS =>
RAISE Protocol_Error;
END CASE;
END CASE;
RETURN Data;
END;
END Get_Message;
PROCEDURE Put (Into : Stream_Id; Data : Exception_Number) IS
BEGIN
Transport_Interchange.Put (Into, Interchange.Integer (Data));
END Put;
PROCEDURE Get (From : Stream_Id; Data : OUT Exception_Number) IS
BEGIN
Transport_Interchange.Get (From, Interchange.Integer (Data));
END Get;
FUNCTION Non_Null (X : Version_Range) RETURN Boolean IS
BEGIN
RETURN X.First <= X.Last;
END Non_Null;
FUNCTION Overlaps (X, Y : Version_Range) RETURN Boolean IS
BEGIN
RETURN Non_Null (X) AND THEN Non_Null (Y) AND THEN
(X.First <= Y.Last OR ELSE X.Last >= Y.First);
END Overlaps;
FUNCTION Max (X, Y : Version_Range) RETURN Version_Number IS
BEGIN
IF X.Last > Y.Last THEN
RETURN Y.Last;
ELSE
RETURN X.Last;
END IF;
END Max;
END Rpc;