with System;

package Interchange_Defs is

    -- This package defines fundamental types and operators
    -- for the RPC facility, running on a VAX/VMS system.

    -- When porting the RPC facility, you should modify this
    -- package to indicate the appropriate types on your system.

    subtype Longest_Integer is Standard.Integer;
    -- The longest (highest-precision) supported signed integer.
    -- If you've got an arbitrary-precision package, that's ideal.
    -- See INTERCHANGE.HUGE_INTEGER.

    function "=" (X, Y : Longest_Integer) return Boolean renames Standard."=";
    function ">" (X, Y : Longest_Integer) return Boolean renames Standard.">";
    function "<" (X, Y : Longest_Integer) return Boolean renames Standard."<";
    function ">=" (X, Y : Longest_Integer) return Boolean renames Standard.">=";
    function "<=" (X, Y : Longest_Integer) return Boolean renames Standard."<=";

    function "+" (X, Y : Longest_Integer) return Longest_Integer
        renames Standard."+";
    function "-" (X, Y : Longest_Integer) return Longest_Integer
        renames Standard."-";
    function "*" (X, Y : Longest_Integer) return Longest_Integer
        renames Standard."*";
    function "/" (X, Y : Longest_Integer) return Longest_Integer
        renames Standard."/";
    function "mod" (X, Y : Longest_Integer) return Longest_Integer
        renames Standard."mod";
    function "rem" (X, Y : Longest_Integer) return Longest_Integer
        renames Standard."rem";


    type Float is new Standard.Long_Float digits 8 range -2.0 * (2.0 ** 127) ..
                                                            2.0 * (2.0 ** 127);

    type Long_Float is new Standard.Long_Long_Float
                              digits 15 range -2.0 * (2.0 ** 1023) ..
                                                 2.0 * (2.0 ** 1023);

    -- These definitions are intended to represent IEEE floating
    -- point single- and double-precision formats, respectively.
    -- Float'last is IEEE infinity, float'first is IEEE -infinity.


    function Duration_Magnitude return Standard.Integer;
    -- This should be the largest integral power of 10
    -- which is <= Standard.Duration'Last, <= 10 ** 9,
    -- and <= Integer'Last.  It may be a constant.
    -- It is used by the body of INTERCHANGE.CONVERT.

end Interchange_Defs;