cleaned up interface a bit

This commit is contained in:
ceriel 1988-11-24 11:46:31 +00:00
parent 15377abec5
commit 9eb1f7a67b
2 changed files with 26 additions and 16 deletions

View file

@ -14,19 +14,18 @@
that are explicit in the C-version, are hidden. These buffers are initialized that are explicit in the C-version, are hidden. These buffers are initialized
by a call to Tgetent. The "ARRAY OF CHAR" parameters must be null-terminated. by a call to Tgetent. The "ARRAY OF CHAR" parameters must be null-terminated.
You can call them with a constant string argument, as these are always You can call them with a constant string argument, as these are always
null-terminated in our Modula-2 implementation. Also, the strings returned null-terminated in our Modula-2 implementation.
by these routines are null-terminated. Unlike the C version, this version takes care of UP, BC, and PC
automatically. Only ospeed must still be set by the user.
*) *)
DEFINITION MODULE Termcap; DEFINITION MODULE Termcap;
TYPE STR = ARRAY[1..32] OF CHAR; TYPE STRCAP;
PTSTR = POINTER TO STR;
PUTPROC = PROCEDURE(CHAR); PUTPROC = PROCEDURE(CHAR);
VAR UP, BC: PTSTR; (* must be null-terminated *) VAR
ospeed: INTEGER; (* see termcap(3), tty(4) *) ospeed: INTEGER; (* see termcap(3), tty(4) *)
PC: CHAR; (* is initially 0C *)
PROCEDURE Tgetent(name: ARRAY OF CHAR) : INTEGER; PROCEDURE Tgetent(name: ARRAY OF CHAR) : INTEGER;
@ -34,12 +33,12 @@ DEFINITION MODULE Termcap;
PROCEDURE Tgetflag(id: ARRAY OF CHAR): BOOLEAN; PROCEDURE Tgetflag(id: ARRAY OF CHAR): BOOLEAN;
PROCEDURE Tgoto(cm: PTSTR; col, line: INTEGER): PTSTR; PROCEDURE Tgoto(cm: STRCAP; col, line: INTEGER): STRCAP;
(* Result exists until next call to Tgoto *) (* Result exists until next call to Tgoto *)
PROCEDURE Tgetstr(id: ARRAY OF CHAR): PTSTR; PROCEDURE Tgetstr(id: ARRAY OF CHAR): STRCAP;
(* Result exists until next call to Tgetent *) (* Result exists until next call to Tgetent *)
PROCEDURE Tputs(cp: PTSTR; affcnt: INTEGER; p: PUTPROC); PROCEDURE Tputs(cp: STRCAP; affcnt: INTEGER; p: PUTPROC);
END Termcap. END Termcap.

View file

@ -15,7 +15,12 @@ IMPLEMENTATION MODULE Termcap;
IMPORT XXTermcap; IMPORT XXTermcap;
FROM SYSTEM IMPORT ADR, ADDRESS; FROM SYSTEM IMPORT ADR, ADDRESS;
TYPE STR = ARRAY[1..32] OF CHAR;
STRCAP = POINTER TO STR;
VAR Buf, Buf1 : ARRAY [1..1024] OF CHAR; VAR Buf, Buf1 : ARRAY [1..1024] OF CHAR;
UP, BC: STRCAP;
PC: CHAR;
Initialized: BOOLEAN; Initialized: BOOLEAN;
BufCnt : INTEGER; BufCnt : INTEGER;
@ -23,10 +28,17 @@ IMPLEMENTATION MODULE Termcap;
VAR i: INTEGER; VAR i: INTEGER;
BEGIN BEGIN
i := XXTermcap.tgetent(ADR(Buf), ADR(name)); i := XXTermcap.tgetent(ADR(Buf), ADR(name));
IF i > 0 THEN
Initialized := TRUE
END;
BufCnt := 1; BufCnt := 1;
IF i > 0 THEN
Initialized := TRUE;
UP := Tgetstr("pc");
IF UP # NIL THEN
PC := UP^[1];
ELSE PC := 0C;
END;
UP := Tgetstr("up");
BC := Tgetstr("bc");
END;
RETURN i; RETURN i;
END Tgetent; END Tgetent;
@ -46,14 +58,14 @@ IMPLEMENTATION MODULE Termcap;
RETURN XXTermcap.tgetflag(ADR(id)) = 1; RETURN XXTermcap.tgetflag(ADR(id)) = 1;
END Tgetflag; END Tgetflag;
PROCEDURE Tgoto(cm: PTSTR; col, line: INTEGER): PTSTR; PROCEDURE Tgoto(cm: STRCAP; col, line: INTEGER): STRCAP;
BEGIN BEGIN
XXTermcap.UP := UP; XXTermcap.UP := UP;
XXTermcap.BC := BC; XXTermcap.BC := BC;
RETURN XXTermcap.tgoto(cm, col, line); RETURN XXTermcap.tgoto(cm, col, line);
END Tgoto; END Tgoto;
PROCEDURE Tgetstr(id: ARRAY OF CHAR): PTSTR; PROCEDURE Tgetstr(id: ARRAY OF CHAR): STRCAP;
VAR a, a2: ADDRESS; VAR a, a2: ADDRESS;
b: CARDINAL; b: CARDINAL;
BEGIN BEGIN
@ -70,7 +82,7 @@ IMPLEMENTATION MODULE Termcap;
RETURN a2; RETURN a2;
END Tgetstr; END Tgetstr;
PROCEDURE Tputs(cp: PTSTR; affcnt: INTEGER; p: PUTPROC); PROCEDURE Tputs(cp: STRCAP; affcnt: INTEGER; p: PUTPROC);
BEGIN BEGIN
XXTermcap.PC := PC; XXTermcap.PC := PC;
XXTermcap.ospeed := ospeed; XXTermcap.ospeed := ospeed;
@ -79,5 +91,4 @@ IMPLEMENTATION MODULE Termcap;
BEGIN BEGIN
Initialized := FALSE; Initialized := FALSE;
PC := 0C;
END Termcap. END Termcap.