DEFINITION MODULE PeekNPoke;
(*
 The routines of this module allow to read/build a data structure in a  machine
 independent way. Instead of aliasing datatypes to memory areas, the structure
 is read/built by copying individual bytes from/to the correct place.

 In all routines, base is a pointer (anchor) to the memory block you want to
 manipulate and offset an address relativ to this base.

 Word is used to denominate a 2 byte entity, long to denominate a 4 byte entity.
*)

FROM SYSTEM IMPORT ADDRESS;

PROCEDURE PutByte(base:ADDRESS; offset:LONGINT; value:SHORTCARD);
(* Write a single byte *)

PROCEDURE PutWordB(base:ADDRESS; offset:LONGINT; value:CARDINAL);
(*
 Write a word in big endian fashion, i.e. most significant byte
 at lowest memory address.
*)

PROCEDURE PutWordL(base:ADDRESS; offset:LONGINT; value:CARDINAL);
(*
 Write a word in little endian fashion, i.e. most significant byte
 at highest memory address.
*)

PROCEDURE PutLongB(base:ADDRESS; offset:LONGINT; value:LONGCARD);
(*
 Write a long word in big endian fashion, i.e. most significant byte
 at lowest memory address.
*)

PROCEDURE PutLongL(base:ADDRESS; offset:LONGINT; value:LONGCARD);
(*
 Write a long word in little endian fashion, i.e. most significant byte
 at highest memory address.
*)

PROCEDURE GetByte(base:ADDRESS; offset:LONGINT):SHORTCARD;
(* Read a byte *)

PROCEDURE GetWordB(base:ADDRESS; offset:LONGINT):CARDINAL;
(*
 Read a word in big endian fashion, i.e. the most significant
 byte from the lowest memory address.
*)

PROCEDURE GetWordL(base:ADDRESS; offset:LONGINT):CARDINAL;
(*
 Read a word in little endian fashion, i.e. the most significant
 byte from the highest memory address.
*)

PROCEDURE GetLongB(base:ADDRESS; offset:LONGINT):LONGCARD;
(*
 Read a long word in big endian fashion, i.e. the most significant
 byte from the lowest memory address.
*)

PROCEDURE GetLongL(base:ADDRESS; offset:LONGINT):LONGCARD;
(*
 Read a long word in little endian fashion, i.e. the most significant
 byte from the highest memory address.
*)

END PeekNPoke.
