OSSI: SITerminal
Edoardo Biagioni
biagioni at unc.UUCP
Fri Nov 7 03:55:20 AEST 1986
(***************************************************************************)
(*** ***)
(*** ***)
(*** O S S I ***)
(*** ========== ***)
(*** ***)
(**) DEFINITION MODULE SITerminal; (**)
(*** ============================ ***)
(*** ***)
(*** This module defines a machine-independent terminal interface. ***)
(*** ***)
(***---------------------------------------------------------------------***)
(*** ***)
(*** Hardware: independent ***)
(*** Operating System: UNIX BSD 4.2 ***)
(*** Compiler: independent ***)
(*** ***)
(*** Version: 3.0 ***)
(*** Implemented: see copyright ***)
(*** Date: 1986-03-12 ***)
(*** ***)
(***---------------------------------------------------------------------***)
(*** ***)
(*** Copyright 1984, 1985, 1986 by ***)
(*** E. S. Biagioni ***)
(*** G. Heiser ***)
(*** K. Hinrichs ***)
(*** C. Muller ***)
(*** ***)
(*** Institut fuer Informatik ***)
(*** ETH Zuerich ***)
(*** CH 8092 Zuerich ***)
(*** Switzerland ***)
(*** ***)
(*** Department of Computer Science ***)
(*** University of North Carolina ***)
(*** Chapel Hill, North Carolina 27514 ***)
(*** U.S.A. ***)
(*** ***)
(*** Permission to copy without fee all of this material is granted ***)
(*** provided that the copies are not made or distributed for direct ***)
(*** commercial advantage, that this OSSI copyright notice is ***)
(*** included in the copy, that the module is not modified in any way ***)
(*** except where necessary for compilation on a particular system, ***)
(*** and that the module is always distributed in its original form. ***)
(*** Distribution of this module in a modified form without including ***)
(*** the original version is a violation of this copyright notice. ***)
(*** ***)
(***---------------------------------------------------------------------***)
(*** ***)
(*** Updates: ***)
(*** ***)
(*** ***)
(***************************************************************************)
(* =========================================================================
Warning:
========
Usage of this module will cause unusual behavior of any other terminal
input/output (using the Cambridge library or module StreamIO)!
The Cambridge library modules should never be used for terminal I/O if
this module is used.
========================================================================*)
EXPORT QUALIFIED
DEL, (* CONST *)
DelLine,
BS,
FF,
TAB,
KeypressProc,
WriteProc, (* TYPE *)
ReadProc,
WriteStringProc,
ReadStringProc,
WriteLnProc,
Keypress, (* VAR *)
Write,
Read,
WriteString,
ReadString,
WriteLn,
ReadWithoutEcho,
ReadAgain,
ResetTermProcedures; (* PROC *)
(* the values of these constants are system-dependent *)
(* these constants are for use with the UNIX system *)
CONST DEL = 177C;
DelLine = 25C; (* CTRL-U *)
BS = 10C; (* CTRL-H *)
FF = 14C; (* CTRL-L *)
TAB = 11C; (* CTRL-I *)
(* these types are used to avoid type incompatibilities
when the input/output procedure variables are changed *)
TYPE KeypressProc = PROCEDURE() : BOOLEAN;
ReadAgainProc = PROCEDURE;
ReadProc = PROCEDURE() : CHAR;
ReadStringProc = PROCEDURE(VAR ARRAY OF CHAR);
WriteProc = PROCEDURE(CHAR);
WriteStringProc = PROCEDURE(ARRAY OF CHAR);
WriteLnProc = PROCEDURE;
(* the following procedure variables are initialized by this module
to default values. Their value may be changed as necessary, but
they must satisfy the specification given in the comments *)
VAR Read: ReadProc;
(* returns the next character entered by the user.
All characters are echoed to the screen. *)
ReadWithoutEcho: ReadProc;
(* returns the next character entered by the user. Characters
are not echoed on the screen. *)
ReadString: ReadStringProc;
(* returns a string entered by the user; control chars are ignored,
accepted chars are echoed on the screen. The user must close the
string with RETURN (not copied to the string and not echoed).
The procedure adds the EOS character at the end of the string.
Line-Editing capabilities included are delete char, delete line.
Truncation occurs when the actual parameter is shorter than the
entered string (i.e. the procedure will no longer accept
characters, and characters will not be echoed *)
Write: WriteProc;
(* writes a character to the screen.
An internal line position is maintained to allow correct
operation of DelLine. The exact operation of the procedure
depends on the character witten, as follows:
EOL: causes a new line to be started, and scrolls the screen
if the new line would not be visible, the internal
line position is set to the begin of the line;
DEL: causes the cursor to move back one place and the character
at this position to be deleted and the internal line
position to be decremented, unless the cursor is at the
beginning of a line;
DelLine: causes the cursor to move to the beginning of the
current line, clears the line and resets the internal
line position;
BS: causes the cursor to move back one place non-destructively,
and the internal line position to be decremented,
unless the cursor is at the beginning of a line;
FF: is printed on the screen and the internal line position
is reset;
TAB: is printed on the screen and the internal line position
is incremented;
other control characters (ASCII: < 40C):
printed on the screen but not affecting the internal line
position;
non standard character codes (ASCII: >= 200C):
printed on the screen, the effect on the internal line
position is system dependent;
other (graphic) characters ((ASCII: 40C <= ch <= 177C):
printed on the screen, the internal line position is
incremented. *)
WriteString: WriteStringProc;
(* is completely equivalent to a series of calls to Write, but usually
more efficient and never less efficient *)
WriteLn: WriteLnProc;
(* completely equivalent to Write (EOL) *)
Keypress: KeypressProc;
(* returns TRUE if a key was pressed but not yet read.
In this case the corresponding character may be read by a call
to the 'Read', 'ReadWithoutEcho' or 'ReadString' procedures *)
ReadAgain: ReadAgainProc;
(* A call to this procedure prevents the next call to 'Read' from
getting the next typed character. Instead, the last character
read before the call to 'ReadAgain' will be returned again. *)
PROCEDURE ResetTermProcedures;
(* assigns the default procedures to the procedure variables 'Read',
'ReadWithoutEcho', 'ReadString', 'Write', 'WriteString',
'WriteLn', 'Keypress' and sets the cursor at the beginning of the
next line. *)
END SITerminal.
More information about the Comp.sources.unix
mailing list