DEFINITION MODULE CardinalIO;
(*
        Terminal input/output of CARDINALs in decimal and hex

Derived from the Lilith Modula-2 system developed by the
group of Prof. N. Wirth at ETH Zurich, Switzerland.
*)

EXPORT QUALIFIED ReadCardinal, WriteCardinal, ReadHex, WriteHex;


PROCEDURE ReadCardinal (VAR c: CARDINAL);
(*- Read an unsigned decimal number from the terminal.
out:    c       the value that was read.

The read terminates only on ESC, EOL, or blank, and the terminator
must be re-read, for example with Terminal.Read.

If the read encounters a non-digit, or a digit which would cause the
number to exceed the maximum CARDINAL value, the bell is sounded and
that character is ignored.  No more than one leading '0' is allowed.
*)

PROCEDURE WriteCardinal (c: CARDINAL; w: CARDINAL);
(*- Write a CARDINAL in decimal format to the terminal.
in:     c       value to write,
        w       minimum field width.

The value of c is written, even if it takes more than w digits.
If it takes fewer digits, leading blanks are output to make the
field w characters wide.
*)

PROCEDURE ReadHex (VAR c: CARDINAL);
(*- Read a CARDINAL in hexadecimal format from the terminal.
        [see ReadCardinal above]
*)

PROCEDURE WriteHex (c: CARDINAL; digits: CARDINAL);
(*- Write a CARDINAL in hexadecimal format to the terminal.
        [see WriteCardinal above]
*)

END CardinalIO.

AL);
(*- Write a CARDINAL in hexadecimal format to the terminal.
        [see WriteCardinal above]
*)

EN