Added a stripped version of the Unix module

This commit is contained in:
ceriel 1988-05-03 08:33:33 +00:00
parent 8b655cb67e
commit 7dcfb2b4ad
4 changed files with 49 additions and 15 deletions

View file

@ -24,3 +24,4 @@ CSP.def
Epilogue.def Epilogue.def
Streams.def Streams.def
ArraySort.def ArraySort.def
StripUnix.def

View file

@ -6,7 +6,7 @@ SOURCES = ASCII.def EM.def MathLib0.def Processes.def \
random.def Semaphores.def Unix.def RealConver.def \ random.def Semaphores.def Unix.def RealConver.def \
Strings.def InOut.def Terminal.def \ Strings.def InOut.def Terminal.def \
Mathlib.def PascalIO.def Traps.def CSP.def \ Mathlib.def PascalIO.def Traps.def CSP.def \
Epilogue.def Streams.def ArraySort.def Epilogue.def Streams.def ArraySort.def StripUnix.def
all: all:
clean: clean:

View file

@ -15,7 +15,7 @@ IMPLEMENTATION MODULE Streams;
*) *)
FROM SYSTEM IMPORT BYTE, ADR; FROM SYSTEM IMPORT BYTE, ADR;
IMPORT Unix, Storage, Epilogue; IMPORT StripUnix, Storage, Epilogue;
CONST BUFSIZ = 1024; (* tunable *) CONST BUFSIZ = 1024; (* tunable *)
TYPE IOB = RECORD TYPE IOB = RECORD
@ -79,17 +79,17 @@ IMPLEMENTATION MODULE Streams;
buf[HIGH(filename)+2] := BYTE(0C); buf[HIGH(filename)+2] := BYTE(0C);
END; END;
IF (mode = reading) THEN IF (mode = reading) THEN
fd := Unix.open(ADR(stream^.buf), 0); fd := StripUnix.open(ADR(stream^.buf), 0);
ELSE ELSE
fd := -1; fd := -1;
IF (mode = appending) THEN IF (mode = appending) THEN
fd := Unix.open(ADR(stream^.buf), 1); fd := StripUnix.open(ADR(stream^.buf), 1);
IF fd >= 0 THEN IF fd >= 0 THEN
IF (Unix.lseek(fd, 0D , 2) < 0D) THEN ; END; IF (StripUnix.lseek(fd, 0D , 2) < 0D) THEN ; END;
END; END;
END; END;
IF fd < 0 THEN IF fd < 0 THEN
fd := Unix.creat(ADR(stream^.buf), 666B); fd := StripUnix.creat(ADR(stream^.buf), 666B);
END; END;
END; END;
IF fd < 0 THEN IF fd < 0 THEN
@ -150,7 +150,7 @@ IMPLEMENTATION MODULE Streams;
IF (cnt > 0) THEN IF (cnt > 0) THEN
cnt1 := cnt; cnt1 := cnt;
cnt := 0; cnt := 0;
IF Unix.write(fildes, ADR(buf), cnt1) < 0 THEN END; IF StripUnix.write(fildes, ADR(buf), cnt1) < 0 THEN END;
END; END;
END; END;
END FlushStream; END FlushStream;
@ -162,7 +162,7 @@ IMPLEMENTATION MODULE Streams;
IF stream^.mode # reading THEN IF stream^.mode # reading THEN
FlushStream(stream, result); FlushStream(stream, result);
END; END;
IF Unix.close(stream^.fildes) < 0 THEN ; END; IF StripUnix.close(stream^.fildes) < 0 THEN ; END;
freestruct(stream); freestruct(stream);
ELSE ELSE
result := nostream; result := nostream;
@ -209,7 +209,7 @@ IMPLEMENTATION MODULE Streams;
IF stream = InputStream THEN IF stream = InputStream THEN
FlushLineBuffers(); FlushLineBuffers();
END; END;
maxcnt := Unix.read(fildes, ADR(buf), bufferedcnt); maxcnt := StripUnix.read(fildes, ADR(buf), bufferedcnt);
cnt := 1; cnt := 1;
IF maxcnt <= 0 THEN IF maxcnt <= 0 THEN
eof := TRUE; eof := TRUE;
@ -332,7 +332,7 @@ IMPLEMENTATION MODULE Streams;
RETURN; RETURN;
END; END;
IF (s^.mode # reading) THEN FlushStream(s, result); END; IF (s^.mode # reading) THEN FlushStream(s, result); END;
position := Unix.lseek(s^.fildes, 0D, 1); position := StripUnix.lseek(s^.fildes, 0D, 1);
IF position < 0D THEN IF position < 0D THEN
result := illegaloperation; result := illegaloperation;
RETURN; RETURN;
@ -357,7 +357,7 @@ IMPLEMENTATION MODULE Streams;
s^.eof := FALSE; s^.eof := FALSE;
END; END;
IF s^.mode = appending THEN IF s^.mode = appending THEN
currpos := Unix.lseek(s^.fildes, 0D, 1); currpos := StripUnix.lseek(s^.fildes, 0D, 1);
IF currpos < 0D THEN IF currpos < 0D THEN
result := illegaloperation; result := illegaloperation;
RETURN; RETURN;
@ -367,7 +367,7 @@ IMPLEMENTATION MODULE Streams;
result := illegaloperation; result := illegaloperation;
RETURN; RETURN;
END; END;
currpos := Unix.lseek(s^.fildes, position, 0); currpos := StripUnix.lseek(s^.fildes, position, 0);
IF currpos < 0D THEN IF currpos < 0D THEN
result := illegaloperation; result := illegaloperation;
RETURN; RETURN;
@ -383,12 +383,12 @@ IMPLEMENTATION MODULE Streams;
RETURN FALSE; RETURN FALSE;
END; END;
#ifdef __USG #ifdef __USG
RETURN Unix.ioctl(stream^.fildes, INTEGER(ORD('T') * 256 + 1), ADR(buf)) >= 0; RETURN StripUnix.ioctl(stream^.fildes, INTEGER(ORD('T') * 256 + 1), ADR(buf)) >= 0;
#else #else
#ifdef __BSD4_2 #ifdef __BSD4_2
RETURN Unix.ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8 + 6*65536 + 40000000H), ADR(buf)) >= 0; RETURN StripUnix.ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8 + 6*65536 + 40000000H), ADR(buf)) >= 0;
#else #else
RETURN Unix.ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8), ADR(buf)) >= 0; RETURN StripUnix.ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8), ADR(buf)) >= 0;
#endif #endif
#endif #endif
END isatty; END isatty;

View file

@ -0,0 +1,33 @@
(*$Foreign language module *)
DEFINITION MODULE StripUnix;
(*
Module: interface to some Unix systemcalls
Author: Ceriel J.H. Jacobs
Version: $Header$
This is a stripped down version of Unix.def, needed to compile some of
the modules on small machines
*)
FROM SYSTEM IMPORT ADDRESS;
CONST
ILLBREAK = ADDRESS(NIL-1);
VAR errno: INTEGER;
PROCEDURE sbrk(incr: INTEGER) : ADDRESS;
PROCEDURE close(fildes: INTEGER) : INTEGER;
PROCEDURE creat(path: ADDRESS;
mode: INTEGER) : INTEGER;
(* Sys5 *) PROCEDURE fcntl(fildes, request, arg: INTEGER) : INTEGER;
PROCEDURE getpid() : INTEGER;
PROCEDURE ioctl(fildes, request: INTEGER; arg: ADDRESS) : INTEGER;
PROCEDURE lseek(fildes: INTEGER; offset: LONGINT; whence: INTEGER) : LONGINT;
PROCEDURE open(path: ADDRESS; oflag: INTEGER) : INTEGER;
PROCEDURE read(fildes: INTEGER;
buf: ADDRESS;
nbyte: CARDINAL) : INTEGER;
PROCEDURE time(tloc: ADDRESS) : LONGINT;
PROCEDURE write(fildes: INTEGER;
buf: ADDRESS;
nbyte: CARDINAL) : INTEGER;
END StripUnix.