Copyright (C) 1992, Digital Equipment Corporation                         
 All rights reserved.                                                      
 See the file COPYRIGHT for a full description.                            
                                                                           
 Last modified on Thu Jun  9 13:13:39 PDT 1994 by heydon                   
UNSAFE MODULE JunoMarshal;
IMPORT JunoValue, JunoRT;
TYPE
  Byte = JunoRT.ByteCode;
  RefShort = UNTRACED REF ARRAY [0..ShortSize-1] OF Byte;
  RefUShort = UNTRACED REF ARRAY [0..UShortSize-1] OF Byte;
  RefULong = UNTRACED REF ARRAY [0..ULongSize-1] OF Byte;
  RefReal = UNTRACED REF ARRAY [0..RealSize-1] OF Byte;
PROCEDURE ReadShort(VAR a: BytePtr): Short =
  VAR res: Short; ra: RefShort := ADR(res); BEGIN
    FOR i := 0 TO ShortSize - 1 DO
      ra^[i] := a^; INC(a, ADRSIZE(a^))
    END;
    RETURN res
  END ReadShort;
PROCEDURE WriteShort(VAR a: BytePtr; sh: Short) =
  VAR ri: RefShort := ADR(sh); BEGIN
    FOR i := 0 TO ShortSize - 1 DO
      a^ := ri^[i]; INC(a, ADRSIZE(a^))
    END
  END WriteShort;
PROCEDURE ReadUShort(VAR a: BytePtr): UShort =
  VAR res: UShort; ra: RefUShort := ADR(res); BEGIN
    FOR i := 0 TO UShortSize - 1 DO
      ra^[i] := a^; INC(a, ADRSIZE(a^))
    END;
    RETURN res
  END ReadUShort;
PROCEDURE WriteUShort(VAR a: BytePtr; us: UShort) =
  VAR ri: RefUShort := ADR(us); BEGIN
    FOR i := 0 TO UShortSize - 1 DO
      a^ := ri^[i]; INC(a, ADRSIZE(a^))
    END
  END WriteUShort;
PROCEDURE ReadULong(VAR a: BytePtr): ULong =
  VAR res: ULong; ra: RefULong := ADR(res); BEGIN
    FOR i := 0 TO ULongSize - 1 DO
      ra^[i] := a^; INC(a, ADRSIZE(a^))
    END;
    RETURN res
  END ReadULong;
PROCEDURE WriteULong(VAR a: BytePtr; ul: ULong) =
  VAR ri: RefULong := ADR(ul); BEGIN
    FOR i := 0 TO ULongSize - 1 DO
      a^ := ri^[i]; INC(a, ADRSIZE(a^))
    END
  END WriteULong;
PROCEDURE ReadReal(VAR a: BytePtr): JunoValue.Real =
  VAR res: JunoValue.Real; ra: RefReal := ADR(res); BEGIN
    FOR i := 0 TO RealSize - 1 DO
      ra^[i] := a^; INC(a, ADRSIZE(a^))
    END;
    RETURN res
  END ReadReal;
PROCEDURE WriteReal(VAR a: BytePtr; r: JunoValue.Real) =
  VAR rr: RefReal := ADR(r); BEGIN
    FOR i := 0 TO RealSize - 1 DO
      a^ := rr^[i]; INC(a, ADRSIZE(a^))
    END
  END WriteReal;
BEGIN
END JunoMarshal.