dos_compilers/Logitech Modula-2 v1.1/INOUT.DEF

233 lines
5.0 KiB
Plaintext
Raw Normal View History

2024-07-01 00:43:04 +02:00
(* Version 1.10, Nov 1984 *)
DEFINITION MODULE InOut;
(*
Standard high-level formatted input/output,
allowing for redirection to/from files
From the book 'Programming in Modula-2' by Prof.
N. Wirth.
*)
FROM SYSTEM IMPORT WORD;
FROM FileSystem IMPORT File;
EXPORT QUALIFIED
EOL, Done, in, out, termCH,
OpenInput, OpenOutput, CloseInput, CloseOutput,
Read, ReadString, ReadInt, ReadCard, ReadWrd,
Write, WriteLn, WriteString, WriteInt, WriteCard,
WriteOct, WriteHex, WriteWrd;
CONST
EOL = 36C;
(*- end-of-line character *)
VAR
Done: BOOLEAN;
(*
- set by several procedures; TRUE if the
operation was successful, FALSE otherwise.
*)
termCH: CHAR;
(*
- terminating character from ReadString, ReadInt,
ReadCard.
*)
in, out: File;
(*
- The currently open input and output files.
Use for exceptional cases only.
*)
PROCEDURE OpenInput(defext: ARRAY OF CHAR);
(*
- Accept a file name from the terminal and open it for
input (file variable 'in').
in: defext default filetype or 'extension'.
If the file name that is read ends with '.', then 'defext'
is appended to the file name.
If OpenInput succeeds, Done = TRUE and subsequent input is
taken from the file until CloseInput is called.
*)
PROCEDURE OpenOutput(defext: ARRAY OF CHAR);
(*
- Accept a file name from the terminal and open it for
output (file variable 'out').
in: defext default filetype or 'extension'.
If the file name that is read ends with '.', then 'defext'
is appended to the file name.
If OpenOutput succeeds, Done = TRUE and subsequent output
is written to the file until CloseOutput is called.
*)
PROCEDURE CloseInput;
(*
- Close current input file and revert to terminal for
input.
*)
PROCEDURE CloseOutput;
(*
- Close current output file and revert to terminal for
output.
*)
PROCEDURE Read(VAR ch: CHAR);
(*
- Read the next character from the current input.
out: ch the character read; EOL for end-of-line
Done = TRUE unless the input is at end of file.
*)
PROCEDURE ReadString(VAR s: ARRAY OF CHAR);
(*
- Read a string from the current input.
out: s the string that was read, excluding
the terminator character.
Leading blanks are accepted and thrown away, then
characters are read into 's' until a blank or control
character is entered. ReadString truncates the input
string if it is too long for 's'. The terminating
character is left in 'termCH'. If input is from the
terminal, BS and DEL are allowed for editing.
*)
PROCEDURE ReadInt(VAR x: INTEGER);
(*
- Read an INTEGER representation from the current input.
out: x the value read.
ReadInt is like ReadString, but the string is converted to
an INTEGER value if possible, using the syntax:
["+"|"-"] digit { digit }.
Done = TRUE if some conversion took place.
*)
PROCEDURE ReadCard(VAR x: CARDINAL);
(*
- Read an unsigned decimal number from the current input.
out: x the value read.
ReadCard is like ReadInt, but the syntax is:
digit { digit }.
*)
PROCEDURE ReadWrd(VAR w: WORD);
(*
- Read a WORD value from the current input.
out: w the value read.
Done is TRUE if a WORD was read successfully. This
procedure cannot be used when reading from the terminal.
Note that the meaning of WORD is system dependent.
*)
PROCEDURE Write(ch: CHAR);
(*
- Write a character to the current output.
in: ch character to write.
*)
PROCEDURE WriteLn;
(*
- Write an end-of-line sequence to the current output.
*)
PROCEDURE WriteString(s: ARRAY OF CHAR);
(*
- Write a string to the current output.
in: s string to write.
*)
PROCEDURE WriteInt(x: INTEGER; n: CARDINAL);
(*
- Write an integer in right-justified decimal format.
in: x value to be output,
n minimum field width.
The decimal representation of 'x' (including '-' if x is
negative) is output, using at least n characters (but
more if needed). Leading blanks are output if necessary.
*)
PROCEDURE WriteCard(x, n: CARDINAL);
(*
- Output a CARDINAL in decimal format.
in: x value to be output,
n minimum field width.
The decimal representation of the value 'x' is output,
using at least n characters (but more if needed).
Leading blanks are output if necessary.
*)
PROCEDURE WriteOct(x, n: CARDINAL);
(*
- Output a CARDINAL in octal format.
[see WriteCard above]
*)
PROCEDURE WriteHex(x, n: CARDINAL);
(*
- Output a CARDINAL in hexadecimal format.
in: x value to be output,
n minimum field width.
Four uppercase hex digits are written, with leading
blanks if n > 4.
*)
PROCEDURE WriteWrd(w: WORD);
(*
- Output a WORD
in: w WORD value to be output.
Note that the meaning of WORD is system dependent, and
that a WORD cannot be written to the terminal.
*)
END InOut.