From f4e37e13193b62a875f20a99039c1ceef00c16b8 Mon Sep 17 00:00:00 2001 From: dtrg Date: Sat, 21 Apr 2007 23:07:05 +0000 Subject: [PATCH] Changed to call the isatty() syscall directly, rather than fiddling around with non-portable ioctls. --- lang/m2/libm2/Streams.mod | 37 +++++++++++++++---------------------- lang/m2/libm2/StripUnix.def | 1 + lang/m2/libm2/Unix.def | 1 + 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/lang/m2/libm2/Streams.mod b/lang/m2/libm2/Streams.mod index 7e123bacb..a40133757 100644 --- a/lang/m2/libm2/Streams.mod +++ b/lang/m2/libm2/Streams.mod @@ -17,8 +17,7 @@ IMPLEMENTATION MODULE Streams; FROM SYSTEM IMPORT BYTE, ADR; FROM Epilogue IMPORT CallAtEnd; FROM Storage IMPORT Allocate, Available; - FROM StripUnix IMPORT - open, close, lseek, read, write, creat, ioctl; + IMPORT StripUnix; CONST BUFSIZ = 1024; (* tunable *) TYPE IOB = RECORD @@ -82,17 +81,17 @@ IMPLEMENTATION MODULE Streams; buf[HIGH(filename)+2] := BYTE(0C); END; IF (mode = reading) THEN - fd := open(ADR(stream^.buf), 0); + fd := StripUnix.open(ADR(stream^.buf), 0); ELSE fd := -1; IF (mode = appending) THEN - fd := open(ADR(stream^.buf), 1); + fd := StripUnix.open(ADR(stream^.buf), 1); IF fd >= 0 THEN - IF (lseek(fd, 0D , 2) < 0D) THEN ; END; + IF (StripUnix.lseek(fd, 0D , 2) < 0D) THEN ; END; END; END; IF fd < 0 THEN - fd := creat(ADR(stream^.buf), 666B); + fd := StripUnix.creat(ADR(stream^.buf), 666B); END; END; IF fd < 0 THEN @@ -153,7 +152,7 @@ IMPLEMENTATION MODULE Streams; IF (cnt > 0) THEN cnt1 := cnt; cnt := 0; - IF write(fildes, ADR(buf), cnt1) < 0 THEN END; + IF StripUnix.write(fildes, ADR(buf), cnt1) < 0 THEN END; END; END; END FlushStream; @@ -165,7 +164,7 @@ IMPLEMENTATION MODULE Streams; IF stream^.mode # reading THEN FlushStream(stream, result); END; - IF close(stream^.fildes) < 0 THEN ; END; + IF StripUnix.close(stream^.fildes) < 0 THEN ; END; freestruct(stream); ELSE result := nostream; @@ -212,7 +211,7 @@ IMPLEMENTATION MODULE Streams; IF stream = InputStream THEN FlushLineBuffers(); END; - maxcnt := read(fildes, ADR(buf), bufferedcnt); + maxcnt := StripUnix.read(fildes, ADR(buf), bufferedcnt); cnt := 1; IF maxcnt <= 0 THEN eof := TRUE; @@ -335,7 +334,7 @@ IMPLEMENTATION MODULE Streams; RETURN; END; IF (s^.mode # reading) THEN FlushStream(s, result); END; - position := lseek(s^.fildes, 0D, 1); + position := StripUnix.lseek(s^.fildes, 0D, 1); IF position < 0D THEN result := illegaloperation; RETURN; @@ -360,7 +359,7 @@ IMPLEMENTATION MODULE Streams; s^.eof := FALSE; END; IF s^.mode = appending THEN - currpos := lseek(s^.fildes, 0D, 1); + currpos := StripUnix.lseek(s^.fildes, 0D, 1); IF currpos < 0D THEN result := illegaloperation; RETURN; @@ -370,7 +369,7 @@ IMPLEMENTATION MODULE Streams; result := illegaloperation; RETURN; END; - currpos := lseek(s^.fildes, position, 0); + currpos := StripUnix.lseek(s^.fildes, position, 0); IF currpos < 0D THEN result := illegaloperation; RETURN; @@ -379,21 +378,15 @@ IMPLEMENTATION MODULE Streams; END SetPosition; PROCEDURE isatty(stream: Stream; VAR result: StreamResult): BOOLEAN; - VAR buf: ARRAY[1..100] OF CHAR; BEGIN IF (stream = NIL) OR (stream^.kind = none) THEN result := nostream; RETURN FALSE; END; -#ifdef __USG - RETURN ioctl(stream^.fildes, INTEGER(ORD('T') * 256 + 1), ADR(buf)) >= 0; -#else -#ifdef __BSD4_2 - RETURN ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8 + 6*65536 + 40000000H), ADR(buf)) >= 0; -#else - RETURN ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8), ADR(buf)) >= 0; -#endif -#endif + IF (StripUnix.isatty(stream^.fildes) = 0) THEN + RETURN FALSE; + END; + RETURN TRUE; END isatty; PROCEDURE InitStreams; diff --git a/lang/m2/libm2/StripUnix.def b/lang/m2/libm2/StripUnix.def index 8a016d813..3587dd793 100644 --- a/lang/m2/libm2/StripUnix.def +++ b/lang/m2/libm2/StripUnix.def @@ -21,6 +21,7 @@ DEFINITION MODULE StripUnix; (* Sys5 *) PROCEDURE fcntl(fildes, request, arg: INTEGER) : INTEGER; PROCEDURE getpid() : INTEGER; PROCEDURE ioctl(fildes, request: INTEGER; arg: ADDRESS) : INTEGER; + PROCEDURE isatty(fildes: INTEGER) : INTEGER; PROCEDURE lseek(fildes: INTEGER; offset: LONGINT; whence: INTEGER) : LONGINT; PROCEDURE open(path: ADDRESS; oflag: INTEGER) : INTEGER; PROCEDURE read(fildes: INTEGER; diff --git a/lang/m2/libm2/Unix.def b/lang/m2/libm2/Unix.def index 12ce95051..f246160bb 100644 --- a/lang/m2/libm2/Unix.def +++ b/lang/m2/libm2/Unix.def @@ -79,6 +79,7 @@ DEFINITION MODULE Unix; PROCEDURE getgid() : INTEGER; PROCEDURE getegid() : INTEGER; PROCEDURE ioctl(fildes, request: INTEGER; arg: ADDRESS) : INTEGER; + PROCEDURE isatty(fildes: INTEGER) : INTEGER; PROCEDURE stty(fildes: INTEGER; buf: ADDRESS) : INTEGER; PROCEDURE gtty(fildes: INTEGER; buf: ADDRESS) : INTEGER; PROCEDURE kill(pid, sig: INTEGER) : INTEGER;