dos_compilers/Logitech Modula-2 v1.1/TERMBASE.DEF
2024-06-30 15:43:04 -07:00

152 lines
4.0 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(* Version 1.10, Nov 1984 *)
DEFINITION MODULE Termbase;
(*
Terminal input/output with redirection hooks
[Private module of the Modula-2 system]
Derived from the Lilith Modula-2 system developed by the
group of Prof. N. Wirth at ETH Zurich, Switzerland.
*)
EXPORT QUALIFIED
ReadProcedure, StatusProcedure, WriteProcedure,
AssignRead, AssignWrite, UnAssignRead, UnAssignWrite,
Read, KeyPressed, Write;
TYPE
ReadProcedure = PROCEDURE (VAR CHAR);
(*
- To assign a private read procedure (for redirection
of input) a procedure of type 'ReadProcedure' must
be provided. This procedure returns a character
from the input device. It waits until a character
hes been entered.
*)
TYPE
StatusProcedure = PROCEDURE (): BOOLEAN;
(*
- To assign a private status-procedure (for redirection
of input) a procedure of type 'StatusProcedure' must
be provided. This procedure returns TRUE, if a
character is available to read, FALSE otherwise.
*)
TYPE
WriteProcedure = PROCEDURE (CHAR);
(*
- To assign a private write procedure (for redirection
of output) a procedure of type 'WriteProcedure' must
be provided. This is typically used to redirect
output to a file or to the screen and a file (log
file). Special interpretation of characters sent to
the screen can be performed in such a private driver
procedure.
*)
PROCEDURE AssignRead (rp: ReadProcedure;
sp: StatusProcedure;
VAR done: BOOLEAN);
(*
- Install read and status routines for terminal input.
in: rp read-a-character procedure,
sp is-character-available function,
out: done TRUE if the installation was done.
Initially the corresponding procedures of 'Keyboard' are
installed.
Subsequent assignments will be valid until the next
'UnAssignRead' is executed or until the (sub-)program
which has installed the procedures terminates. Upon
termination of a program, the read and status procedures
allocated by that program are removed. Read procedures
are non-sharable resources (see module 'Program').
The assignments are implemented in a stack manner. When a
read procedure is removed, the previously valid procedure
becomes valid again. Up to six levels of re-assignment are
allowed. Done = FALSE if this depth is exceeded.
During execution of a read or status procedure, this
assignments-stack is decremented, which allows an
installed routine to call recursively Terminal.Read
and/or Terminal.KeyPressed to activate the previously
installed routine. At the lowest level however, the
stack is not decremented.
*)
PROCEDURE AssignWrite (wp: WriteProcedure;
VAR done: BOOLEAN);
(*
- Install write routine for terminal output.
in: wp character output procedure,
out: done set TRUE if the installation was done.
[See AssignRead above.]
Initially the procedure Display.Write is assigned.
*)
PROCEDURE UnAssignRead (VAR done: BOOLEAN);
(*
- Undo the last AssignRead by the current program.
out: done set TRUE if there was something to unassign.
The previously valid procedures become active again.
*)
PROCEDURE UnAssignWrite (VAR done: BOOLEAN);
(*
- Undo the last AssignWrite by the current program.
out: done set TRUE if there was something to unassign.
The previously valid procedure becomes active again.
*)
PROCEDURE Read (VAR ch: CHAR);
(*
- Read a character using the current input procedure.
out: ch the character read.
Uses the current read-procedure, as assigned by
AssignRead.
*)
PROCEDURE KeyPressed (): BOOLEAN;
(*
- Test if a character is available from the current input.
Uses the current status-procedure, as assigned by
AssignRead.
*)
PROCEDURE Write (ch: CHAR);
(*
- Write a character to the current output.
in: ch character to write.
Uses the current write-procedure as assigned by
AssignWrite.
*)
END Termbase.