3 (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
4 See the copyright notice in the ACK home directory, in the file "Copyright".
8 IMPLEMENTATION MODULE Terminal
;
10 Module: Input/Output to/from terminals
11 Author: Ceriel J.H. Jacobs
14 Implementation for Unix.
16 FROM SYSTEM
IMPORT ADR
;
18 FROM Unix
IMPORT read
, write
, open
, fcntl
;
20 FROM Unix
IMPORT read
, write
, open
, ioctl
;
25 tty
: ARRAY[0.
.8] OF CHAR;
27 PROCEDURE Read(VAR ch
: CHAR);
33 IF read(fildes
, ADR(ch
), 1) < 0 THEN
40 PROCEDURE BusyRead(VAR ch
: CHAR);
48 l
:= fcntl(fildes
, (*FGETFL*) 3, 0);
51 l
+ (*ONDELAY*) 2) < 0 THEN
54 IF read(fildes
, ADR(ch
), 1) = 0 THEN
59 IF fcntl(fildes
, (*FSETFL*)4, l
) < 0 THEN
64 IF ioctl(fildes
, INTEGER(ORD('f')*256+127+4*65536+40000000H
), ADR(l
)) < 0 THEN
66 IF ioctl(fildes
, INTEGER(ORD('f')*256+127), ADR(l
)) < 0 THEN
74 IF read(fildes
, ADR(ch
), 1) < 0 THEN
88 PROCEDURE Write(ch
: CHAR);
90 IF write(fildes
, ADR(ch
), 1) < 0 THEN
100 PROCEDURE WriteString(s
: ARRAY OF CHAR);
104 WHILE (i
<= HIGH(s
)) & (s
[i
] #
0C
) DO
112 fildes
:= open(ADR(tty
), 2);