Return d0 correctly in ulmSYSTEM read unixcall handler. Fixes #43.

This commit is contained in:
David Brown 2016-09-15 13:30:08 +01:00
parent da88496c5f
commit b8694e65ab

View file

@ -50,23 +50,25 @@ TYPE pchar = POINTER TO ARRAY 1 OF CHAR;
END TAS; END TAS;
PROCEDURE UNIXCALL*(syscall: LONGINT; VAR d0, d1: LONGINT; (* in ulm version both LONGINT and INTEGER are 4 byte size *) PROCEDURE UNIXCALL*(syscall: LONGINT; VAR d0, d1: LONGINT; (* in ulm version both LONGINT and INTEGER are 4 byte size *)
arg1, arg2, arg3: LONGINT) : BOOLEAN; arg1, arg2, arg3: LONGINT) : BOOLEAN;
VAR VAR
n: LONGINT; n: LONGINT;
ch: CHAR; ch: CHAR;
pch: pchar; pch: pchar;
pstr: pstring; pstr: pstring;
h: Platform.FileHandle; h: Platform.FileHandle;
(* pst : pstatus; *) (* pst : pstatus; *)
BEGIN BEGIN
IF syscall = Sys.read THEN IF syscall = Sys.read THEN
RETURN Platform.Read(arg1, arg2, arg3, n) = 0; d0 := Platform.Read(arg1, arg2, arg3, n);
IF d0 >= 0 THEN d0 := n END;
RETURN d0 >= 0;
(*NEW(pch); (*NEW(pch);
pch := SYSTEM.VAL(pchar, arg2); pch := SYSTEM.VAL(pchar, arg2);
ch := pch^[0]; ch := pch^[0];
n := read(ch); n := read(ch);
IF n # 1 THEN IF n # 1 THEN
ch := 0X; ch := 0X;
RETURN FALSE RETURN FALSE
ELSE ELSE
@ -81,7 +83,7 @@ TYPE pchar = POINTER TO ARRAY 1 OF CHAR;
n := Write(SYSTEM.VAL(LONGINT, pch), 1); n := Write(SYSTEM.VAL(LONGINT, pch), 1);
IF n # 1 THEN RETURN FALSE ELSE RETURN TRUE END IF n # 1 THEN RETURN FALSE ELSE RETURN TRUE END
*) *)
ELSIF syscall = Sys.open THEN ELSIF syscall = Sys.open THEN
pstr := SYSTEM.VAL(pstring, arg1); pstr := SYSTEM.VAL(pstring, arg1);
IF SYSTEM.VAL(SET, arg3) * {0,1} # {} THEN IF SYSTEM.VAL(SET, arg3) * {0,1} # {} THEN
RETURN Platform.OldRW(pstr^, d0) = 0 RETURN Platform.OldRW(pstr^, d0) = 0