Jelajahi Sumber

adapted to 64-bit Unix.off_t

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7875 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 7 tahun lalu
induk
melakukan
8a91db450c

+ 25 - 18
source/Generic.Darwin.I386.Unix.Mod

@@ -76,7 +76,8 @@ CONST
 	rdonly* = {};  rdwr* = {1};  creat* = {6};  trunc* = {9};
 
 	(* access modes *)
-	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};
+(*	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};	*)
+	rwrwr* = 1B4H;  rwxrwxrwx* = 1FFH;
 
 	F_OK* = {};  X_Ok* = {0};  W_OK* = {1};  R_OK* = {2};
 
@@ -161,11 +162,9 @@ TYPE
 	Sigset = ARRAY 4 OF CHAR;
 	SignalTrap = PROCEDURE ( sig: LONGINT; mc: Mcontext );
 	
-	pid_t*		= LONGINT;
 	path_t*	= ARRAY OF CHAR;
 	arg_t*		= ARRAY OF CHAR;
 	argv_t*	= ARRAY OF arg_t;
-	off_t*		= HUGEINT;
 
 
 CONST
@@ -230,14 +229,13 @@ CONST
 	B200*	= 200;
 	B300*	= 300;
 	B600*	= 600;
-	B1200*		= 1200;
-	B1800*		= 1800;
-	B2400*		= 2400;
-	B4800*		= 4800;
-	B9600*		= 9600;
+	B1200*	= 1200;
+	B1800*	= 1800;
+	B2400*	= 2400;
+	B4800*	= 4800;
+	B9600*	= 9600;
 	B19200*	= 19200;
 	B38400*	= 38400;
-
 	B57600*	= 57600;
 	B115200*	= 115200;
 	B230400*	= 230400;
@@ -250,7 +248,7 @@ CONST
 	   CS7*		= {9}; 	(* 7 bits *)
 	   CS8*		= {8,9};	(* 8 bits *)
 	CSTOPB*	= {10};	(* send 2 stop bits *)
-	CREAD*	= {11};	(* enable receiver *)
+	CREAD*		= {11};	(* enable receiver *)
 	PARENB*	= {12};	(* parity enable *)
 	PARODD*	= {13};	(* odd parity, else even *)
 	HUPCL*		= {14};	(* hang up on last close *)
@@ -268,8 +266,16 @@ TYPE
 
 
 TYPE
-	dev_t* = LONGINT;
-	ino_t* = LONGINT;
+	dev_t*		= LONGINT;
+	ino_t*		= LONGINT;
+	nlink_t*	= INTEGER;
+	mode_t*	= INTEGER;
+	off_t*		= HUGEINT;
+	blksize_t*= LONGINT;
+	blkcnt_t*	= HUGEINT;
+	uid_t*		= LONGINT;
+	gid_t*		= LONGINT;
+	pid_t*		= LONGINT;
 
 	Status* = RECORD
 				dev-		: dev_t;
@@ -325,7 +331,7 @@ TYPE
 	FdSet* = ARRAY FdSetLen OF SET;
 
 	Dirent* = POINTER TO RECORD
-				ino-		: ino_t;
+				ino-		: LONGINT;
 				reclen-	: INTEGER;
 				typ-		: SHORTINT;
 				namlen-	: SHORTINT;
@@ -355,17 +361,18 @@ TYPE
 				r_trapno-		: LONGINT;
 				r_err-			: LONGINT;
 				r_faultvaddr-	: ADDRESS;
+				
 				r_ax-			: ADDRESS;
 				r_bx-			: ADDRESS;
 				r_cx-			: ADDRESS;
 				r_dx-			: ADDRESS;
 				r_di-			: ADDRESS;
 				r_si-			: ADDRESS;
-				r_bp*			: ADDRESS;
-				r_sp*			: ADDRESS;
+				r_bp-			: ADDRESS;
+				r_sp-			: ADDRESS;
 				r_ss-			: ADDRESS;
 				r_flags-		: ADDRESS;
-				r_pc*			: ADDRESS;
+				r_pc-			: ADDRESS;
 				r_cs-			: ADDRESS;
 				r_ds-			: ADDRESS;
 				r_es-			: ADDRESS;
@@ -475,7 +482,7 @@ VAR
 	pread-		: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE; pos: off_t ): SIZE;
 	write-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): SIZE;
 	pwrite-		: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE; pos: off_t ): SIZE;
-	open-			: PROCEDURE {C} ( name: ADDRESS;  flags, mode: SET ): LONGINT;
+	open-			: PROCEDURE {C} ( name: ADDRESS;  flags: SET;  mode: mode_t ): LONGINT;
 	close-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
 	lseek-		: PROCEDURE {C} ( fd: LONGINT; offset: off_t; origin: LONGINT ): off_t;
 	fsync-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
@@ -490,7 +497,7 @@ VAR
 	realpath-	: PROCEDURE {C} (file_name: ADDRESS; resolved_name: ADDRESS): ADDRESS;
 
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
-	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
+	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: off_t ): LONGINT;
 	rmdir-			: PROCEDURE {C} ( path: ADDRESS ): LONGINT;
 
 	stat-			: PROCEDURE {C} ( name: ADDRESS;  VAR buf: Status ): LONGINT;

+ 18 - 17
source/Generic.Linux.AMD64.Unix.Mod

@@ -73,10 +73,11 @@ CONST
 	ENOLCK* = 37;   (* No record locks available. *)
 
 	(* open flags *)
-	rdonly* = {};  rdwr* = {1};  creat* = {6};  trunc* = {9};
+	rdonly* = SET32({});  rdwr* = SET32({1});  creat* = SET32({6});  trunc* = SET32({9});
 
 	(* access modes *)
-	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};
+(*	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};	*)
+	rwrwr* = 1B4H;  rwxrwxrwx* = 1FFH; 
 
 	F_OK* = {};  X_Ok* = {0};  W_OK* = {1};  R_OK* = {2};
 
@@ -457,19 +458,19 @@ VAR
 	pthread_sigmask: PROCEDURE {C}(how: LONGINT; set: ADDRESS; oldset: ADDRESS): LONGINT;
 
 	(*pid: return param for process id. Only set if initialized non-null. path: pointer to string denoting the executable. file_actions: modify which files are open for the new process, if NIL it inherits open files from parent process. attrp: sets process groups, scheduler, signals etc, leave NIL. argv, evp: char** to the arguments and env. variables*)
-	posix_spawnp- 	: PROCEDURE{C}(pid: ADDRESS; path: ADDRESS; file_actions: ADDRESS; attrp: ADDRESS; argv: ADDRESS ; envp: ADDRESS): LONGINT;
+	posix_spawnp- 	: PROCEDURE {C} (pid: ADDRESS; path: ADDRESS; file_actions: ADDRESS; attrp: ADDRESS; argv: ADDRESS ; envp: ADDRESS): LONGINT;
 	(*more restrictive than spawnp*)
-	posix_spawn- 	: PROCEDURE{C}(pid: ADDRESS; path: ADDRESS; file_actions: ADDRESS; attrp: ADDRESS; argv: ADDRESS ; envp: ADDRESS): LONGINT;
-	waitpid-			: PROCEDURE{C}(pid: pid_t; status: ADDRESS; options: LONGINT): pid_t;
-	pipe-				:PROCEDURE{C}(pipefd: ADDRESS): LONGINT; (*pipefd is assumed to be a pointer to a C array of 2 elements, after pipe creation the array will contain file descriptors for the input and output end of the pipe. returns 0 on success, or -1 on fail*)
-	dup2-				:PROCEDURE{C}(oldfd,newfd: LONGINT): LONGINT; (*overwrites file descriptor newfd with a copy of oldfd. useful for redirecting pipes.*)
-	dup-				:PROCEDURE{C}(oldfd: LONGINT): LONGINT;
-
-	read-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): LONGINT;
-	write-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): LONGINT;
-	open-			: PROCEDURE {C} ( name: ADDRESS;  flags, mode: SET ): LONGINT;
+	posix_spawn- 	: PROCEDURE {C} (pid: ADDRESS; path: ADDRESS; file_actions: ADDRESS; attrp: ADDRESS; argv: ADDRESS ; envp: ADDRESS): LONGINT;
+	waitpid-			: PROCEDURE {C} (pid: pid_t; status: ADDRESS; options: LONGINT): pid_t;
+	pipe-				: PROCEDURE {C} (pipefd: ADDRESS): LONGINT; (*pipefd is assumed to be a pointer to a C array of 2 elements, after pipe creation the array will contain file descriptors for the input and output end of the pipe. returns 0 on success, or -1 on fail*)
+	dup2-				: PROCEDURE {C} (oldfd,newfd: LONGINT): LONGINT; (*overwrites file descriptor newfd with a copy of oldfd. useful for redirecting pipes.*)
+	dup-				: PROCEDURE {C} (oldfd: LONGINT): LONGINT;
+
+	read-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): SIZE;
+	write-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): SIZE;
+	open-			: PROCEDURE {C} ( name: ADDRESS;  flags: SET32; mode: mode_t ): LONGINT;
 	close-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
-	lseek-		: PROCEDURE {C} ( fd: LONGINT; offset, origin: SIZE ): LONGINT;
+	lseek-		: PROCEDURE {C} ( fd: LONGINT; offset: off_t; origin: LONGINT ): off_t;
 	fsync-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
 	ioctl-			: PROCEDURE {C} ( fd: LONGINT; request: LONGINT; arg: ADDRESS ): LONGINT;
 	unlink-		: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
@@ -479,15 +480,15 @@ VAR
 	utime-		: PROCEDURE {C} ( name: ADDRESS;  tb: ADDRESS ): LONGINT;
 	access-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
 	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: ADDRESS;  VAR timeout: Timeval ): LONGINT;
-	realpath-	: PROCEDURE {C} (file_name: ADDRESS; resolved_name: ADDRESS): ADDRESS;
+	realpath-		: PROCEDURE {C} ( file_name: ADDRESS; resolved_name: ADDRESS ): ADDRESS;
 
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
-	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
+	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: mode_t ): LONGINT;
 	rmdir-			: PROCEDURE {C} ( path: ADDRESS ): LONGINT;
 
 	xstat-			: PROCEDURE {C} ( ver: LONGINT; name: ADDRESS;  VAR buf: Status ): LONGINT;
-	lxstat-			: PROCEDURE {C} ( ver: LONGINT; name: ADDRESS;  VAR buf: Status ): LONGINT;
-	fxstat-			: PROCEDURE {C} ( ver: LONGINT; fd: LONGINT;  VAR buf: Status ): LONGINT;
+	lxstat-		: PROCEDURE {C} ( ver: LONGINT; name: ADDRESS;  VAR buf: Status ): LONGINT;
+	fxstat-		: PROCEDURE {C} ( ver: LONGINT; fd: LONGINT;  VAR buf: Status ): LONGINT;
 
 	getpid-		: PROCEDURE {C} ( ): LONGINT;
 	getuid-		: PROCEDURE {C} ( ): LONGINT;

+ 5 - 4
source/Generic.Linux.I386.Unix.Mod

@@ -76,7 +76,8 @@ CONST
 	rdonly* = {};  rdwr* = {1};  creat* = {6};  trunc* = {9};
 
 	(* access modes *)
-	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};
+(*	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};	*)
+	rwrwr* = 1B4H;  rwxrwxrwx* = 1FFH; 
 
 	F_OK* = {};  X_Ok* = {0};  W_OK* = {1};  R_OK* = {2};
 
@@ -463,7 +464,7 @@ VAR
 
 	read-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): LONGINT;
 	write-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): LONGINT;
-	open-			: PROCEDURE {C} ( name: ADDRESS;  flags, mode: SET ): LONGINT;
+	open-			: PROCEDURE {C} ( name: ADDRESS;  flags: SET; mode: mode_t ): LONGINT;
 	close-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
 	lseek-		: PROCEDURE {C} ( fd: LONGINT; offset, origin: SIZE ): LONGINT;
 	fsync-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
@@ -475,10 +476,10 @@ VAR
 	utime-		: PROCEDURE {C} ( name: ADDRESS;  tb: ADDRESS ): LONGINT;
 	access-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
 	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: ADDRESS;  VAR timeout: Timeval ): LONGINT;
-	realpath-	: PROCEDURE {C} (file_name: ADDRESS; resolved_name: ADDRESS): ADDRESS;
+	realpath-		: PROCEDURE {C} ( file_name: ADDRESS; resolved_name: ADDRESS): ADDRESS;
 
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
-	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
+	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: mode_t ): LONGINT;
 	rmdir-			: PROCEDURE {C} ( path: ADDRESS ): LONGINT;
 
 	xstat-			: PROCEDURE {C} ( ver: LONGINT; name: ADDRESS;  VAR buf: Status ): LONGINT;

+ 15 - 14
source/Generic.Solaris.AMD64.Unix.Mod

@@ -150,10 +150,11 @@ CONST
 	
 		
 	(* open flags *)
-	rdonly* = {};  rdwr* = {1};  creat* = {8};  trunc* = {9};
+	rdonly* = SET32({});  rdwr* = SET32({1});  creat* = SET32({8});  trunc* = SET32({9});
 
 	(* access modes *)
-	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};
+(*	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};	*)
+	rwrwr* = 1B4H;  rwxrwxrwx* = 1FFH;  
 	
 	F_OK* = {};  X_Ok* = {0};  W_OK* = {1};  R_OK* = {2};
 
@@ -474,19 +475,19 @@ VAR
 	pthread_sigmask	: PROCEDURE {C} ( how: LONGINT; set: ADDRESS; oldset: ADDRESS ): LONGINT;
 	
 	(*pid: return param for process id. Only set if initialized non-null. path: pointer to string denoting the executable. file_actions: modify which files are open for the new process, if NIL it inherits open files from parent process. attrp: sets process groups, scheduler, signals etc, leave NIL. argv, evp: char** to the arguments and env. variables*)
-	posix_spawnp- 	: PROCEDURE{C} ( pid: ADDRESS; path: ADDRESS; file_actions: ADDRESS; attrp: ADDRESS; argv: ADDRESS ; envp: ADDRESS ): LONGINT;
+	posix_spawnp- 	: PROCEDURE {C} ( pid: ADDRESS; path: ADDRESS; file_actions: ADDRESS; attrp: ADDRESS; argv: ADDRESS ; envp: ADDRESS ): LONGINT;
 	(*more restrictive than spawnp*)
-	posix_spawn- 	: PROCEDURE{C} ( pid: ADDRESS; path: ADDRESS; file_actions: ADDRESS; attrp: ADDRESS; argv: ADDRESS ; envp: ADDRESS ): LONGINT;
-	waitpid-			: PROCEDURE{C} ( pid: pid_t; status: ADDRESS; options: LONGINT ): pid_t;
-	pipe-				: PROCEDURE{C} ( pipefd: ADDRESS ): LONGINT; (*pipefd is assumed to be a pointer to a C array of 2 elements, after pipe creation the array will contain file descriptors for the input and output end of the pipe. returns 0 on success, or -1 on fail*)	
-	dup2-				: PROCEDURE{C} ( oldfd,newfd: LONGINT ): LONGINT; (*overwrites file descriptor newfd with a copy of oldfd. useful for redirecting pipes.*)
-	dup-				: PROCEDURE{C} ( oldfd: LONGINT ): LONGINT;
-	
-	read-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): LONGINT;
-	write-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): LONGINT;
-	open-			: PROCEDURE {C} ( name: ADDRESS;  flags, mode: SET ): LONGINT;
+	posix_spawn- 	: PROCEDURE {C} ( pid: ADDRESS; path: ADDRESS; file_actions: ADDRESS; attrp: ADDRESS; argv: ADDRESS ; envp: ADDRESS ): LONGINT;
+	waitpid-			: PROCEDURE {C} ( pid: pid_t; status: ADDRESS; options: LONGINT ): pid_t;
+	pipe-				: PROCEDURE {C} ( pipefd: ADDRESS ): LONGINT; (*pipefd is assumed to be a pointer to a C array of 2 elements, after pipe creation the array will contain file descriptors for the input and output end of the pipe. returns 0 on success, or -1 on fail*)	
+	dup2-				: PROCEDURE {C} ( oldfd,newfd: LONGINT ): LONGINT; (*overwrites file descriptor newfd with a copy of oldfd. useful for redirecting pipes.*)
+	dup-				: PROCEDURE {C} ( oldfd: LONGINT ): LONGINT;
+	
+	read-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): SIZE;
+	write-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): SIZE;
+	open-			: PROCEDURE {C} ( name: ADDRESS;  flags: SET32;  mode: mode_t ): LONGINT;
 	close-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
-	lseek-		: PROCEDURE {C} ( fd: LONGINT; offset: LONGWORD; origin: WORD ): LONGWORD;
+	lseek-		: PROCEDURE {C} ( fd: LONGINT; offset: off_t; origin: WORD ): off_t;
 	fsync-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
 	ioctl-			: PROCEDURE {C} ( fd: LONGINT; request: LONGINT; arg: ADDRESS ): LONGINT;
 	unlink-		: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
@@ -499,7 +500,7 @@ VAR
 	realpath-		: PROCEDURE {C} ( file_name: ADDRESS; resolved_name: ADDRESS ): ADDRESS;
 	
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
-	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
+	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: mode_t ): LONGINT;
 	rmdir-			: PROCEDURE {C} ( path: ADDRESS ): LONGINT;
 
 	stat-			: PROCEDURE {C} ( name: ADDRESS;  VAR buf: Status ): LONGINT;

+ 6 - 5
source/Generic.Solaris.I386.Unix.Mod

@@ -153,7 +153,8 @@ CONST
 	rdonly* = {};  rdwr* = {1};  creat* = {8};  trunc* = {9};
 
 	(* access modes *)
-	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};
+(*	rwrwr* = {2, 4, 5, 7, 8};  rwxrwxrwx* = {0..8};	*)
+	rwrwr* = 1B4H;  rwxrwxrwx* = 1FFH; 
 	
 	F_OK* = {};  X_Ok* = {0};  W_OK* = {1};  R_OK* = {2};
 
@@ -481,9 +482,9 @@ VAR
 	dup2-				: PROCEDURE{C} ( oldfd,newfd: LONGINT ): LONGINT; (*overwrites file descriptor newfd with a copy of oldfd. useful for redirecting pipes.*)
 	dup-				: PROCEDURE{C} ( oldfd: LONGINT ): LONGINT;
 	
-	read-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): LONGINT;
-	write-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): LONGINT;
-	open-			: PROCEDURE {C} ( name: ADDRESS;  flags, mode: SET ): LONGINT;
+	read-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): SIZE;
+	write-			: PROCEDURE {C} ( fd: LONGINT; buf: ADDRESS; n: SIZE ): SIZE;
+	open-			: PROCEDURE {C} ( name: ADDRESS;  flags: SET; mode: mode_t ): LONGINT;
 	close-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
 	lseek-		: PROCEDURE {C} ( fd: LONGINT; offset, origin: SIZE ): LONGINT;
 	fsync-		: PROCEDURE {C} ( fd: LONGINT ): LONGINT;
@@ -498,7 +499,7 @@ VAR
 	realpath-		: PROCEDURE {C} ( file_name: ADDRESS; resolved_name: ADDRESS ): ADDRESS;
 	
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
-	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
+	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: mode_t ): LONGINT;
 	rmdir-			: PROCEDURE {C} ( path: ADDRESS ): LONGINT;
 
 	stat-			: PROCEDURE {C} ( name: ADDRESS;  VAR buf: Status ): LONGINT;

+ 2 - 2
source/Generic.Unix.AMD64.Machine.Mod

@@ -846,14 +846,14 @@ END GetTimer;
 	END CPUSpeed;
 	
 	PROCEDURE Log( c: CHAR );
-	VAR ignore: LONGINT;
+	VAR ignore: SIZE;
 	BEGIN
 		ignore := Unix.write( 1, ADDRESSOF( c ), 1 );
 		ignore := Unix.write( logfile, ADDRESSOF( c ), 1 );
 	END Log;
 	
 	PROCEDURE LogFileOnly( c: CHAR );
-	VAR ignore: LONGINT;
+	VAR ignore: SIZE;
 	BEGIN
 		ignore := Unix.write( logfile, ADDRESSOF( c ), 1 );
 	END LogFileOnly;

+ 6 - 15
source/Unix.StdIO.Mod

@@ -44,37 +44,28 @@ BEGIN
 END Args;
 
 PROCEDURE ReceiveStdin( VAR data: ARRAY OF CHAR;  ofs, size, min: LONGINT;  VAR len, res: LONGINT );
-VAR ures,i,err: LONGINT;
+VAR ures: HUGEINT;  i, err: LONGINT;
 BEGIN
 	len := 0;
 	REPEAT
 		ures := Unix.read( 0, ADDRESSOF( data[ofs] ), size );
-		IF ures > 0 THEN  INC( ofs, ures );  DEC( size, ures );  INC( len, ures )  END;
+		IF ures > 0 THEN  
+			INC( ofs, LONGINT(ures) );  DEC( size, LONGINT(ures) );  INC( len, LONGINT(ures) )  
+		END;
 		IF ures < 0 THEN err := Unix.errno() END;
 	UNTIL (len >= min) OR ((ures <= 0) & (err # Unix.EINTR) & (err # 0));
 	IF len >= min THEN  res := Streams.Ok  ELSE  res := Streams.EOF  END;
-	(*
-	TRACE(len, size, min, ures, Unix.errno(),err);
-	IF len < min THEN
-		Unix.Perror("receive: ")
-	END;
-	Trace.String("received: "); 
-	FOR i := ofs-len TO ofs-1 DO
-		Trace.Char(data[i]); 
-	END;
-	Trace.Ln;
-	*)
 END ReceiveStdin;
 
 PROCEDURE SendStdout( CONST data: ARRAY OF CHAR;  ofs, len: LONGINT;  prop: BOOLEAN;  VAR res: LONGINT );
-VAR ignore: LONGINT;
+VAR ignore: SIZE;
 BEGIN
 	ignore := Unix.write( 1, ADDRESSOF( data[ofs] ), len );  res := Streams.Ok
 END SendStdout;
 
 
 PROCEDURE SendErrout( CONST data: ARRAY OF CHAR;  ofs, len: LONGINT;  prop: BOOLEAN;  VAR res: LONGINT );
-VAR ignore: LONGINT;
+VAR ignore: SIZE;
 BEGIN
 	ignore := Unix.write( 2, ADDRESSOF( data[ofs] ), len );  res := Streams.Ok
 END SendErrout;

+ 21 - 21
source/Unix.UnixFiles.Mod

@@ -259,7 +259,7 @@ TYPE
 
 				PROCEDURE Old0*( name: ARRAY OF CHAR ): Files.File;
 				VAR f: File;  stat: Unix.Status;  fd, r, pos: LONGINT; 
-					oflags: SET;  nextdir, path: Filename; 
+					oflags: SET32;  nextdir, path: Filename; 
 				BEGIN  {EXCLUSIVE}
 					IF name = "" THEN  RETURN NIL  END;
 					
@@ -276,7 +276,7 @@ TYPE
 						IF r >= 0 THEN
 							r := Unix.access( ADDRESSOF( path ), Unix.W_OK );
 							IF r < 0 THEN  oflags := Unix.rdonly  ELSE  oflags := Unix.rdwr  END;
-							fd := UnixOpen( ADDRESSOF( path ), oflags, {} );
+							fd := UnixOpen( ADDRESSOF( path ), oflags, 0 );
 							IF fd >= 0 THEN
 								r := Unix.fstat( fd, stat );
 								f := collection.ByStat(stat);
@@ -337,7 +337,7 @@ TYPE
 				(* return remaining old file, if any *)
 				PROCEDURE TryRename*( old, new: ARRAY OF CHAR;  f: Files.File;  VAR res: LONGINT ): LONGINT;
 				CONST Bufsize = 4096;
-				VAR fdold, fdnew, fo, n, r: LONGINT;  ostat, nstat: Unix.Status;
+				VAR fdold, fdnew, fo, r: LONGINT;  n, n2: SIZE;  ostat, nstat: Unix.Status;
 					buf: ARRAY Bufsize OF CHAR;
 				BEGIN {EXCLUSIVE}
 					fo := NoDesc;
@@ -352,7 +352,7 @@ TYPE
 						IF r < 0 THEN (* could not rename, try copy *)
 							res := Unix.errno( );
 							IF (res = Unix.EXDEV) OR (res = Unix.ETXTBSY) THEN  (* cross device link, move the file / file busy frequently happens in VirtualBox *)
-								fdold := UnixOpen( ADDRESSOF( old ), Unix.rdonly, {} );
+								fdold := UnixOpen( ADDRESSOF( old ), Unix.rdonly, 0 );
 								fo := fdold;
 								IF fdold < 0 THEN    
 									res := Unix.errno( );  
@@ -366,8 +366,8 @@ TYPE
 								REPEAT
 									n := UnixRead( fdold, ADDRESSOF( buf ), Bufsize ); 
 									IF n > 0 THEN
-										r := UnixWrite( fdnew, ADDRESSOF( buf ), n );
-										IF r < 0 THEN
+										n2 := UnixWrite( fdnew, ADDRESSOF( buf ), n );
+										IF n2 < 0 THEN
 											r := Unix.close( fdold );  
 											r := Unix.close( fdnew );   
 											RETURN NoDesc;
@@ -521,7 +521,7 @@ TYPE
 	
 	Buffer =	POINTER TO RECORD (Files.Hint)
 					chg: BOOLEAN;
-					org, size: LONGINT;
+					org, size: SIZE;
 					data: ARRAY Bufsize OF CHAR;
 				END;
 	
@@ -574,7 +574,7 @@ TYPE
 				
 						
 				PROCEDURE Flush( buf: Buffer );
-				VAR res: LONGINT;  stat: Unix.Status;
+				VAR n: SIZE;  res: LONGINT;  stat: Unix.Status;
 				BEGIN
 					IF buf.chg THEN
 						IF fd = NoDesc THEN  CreateUnixFile  END;
@@ -583,8 +583,8 @@ TYPE
 								Halt( SELF, TRUE, "UnixFiles.File.Flush: lseek failed" ) 
 							END 
 						END;
-						res := UnixWrite( fd, ADDRESSOF( buf.data ), buf.size );
-						IF res < 0 THEN  Halt( SELF, TRUE, "UnixFiles.File.Flush: write failed" )  END;
+						n := UnixWrite( fd, ADDRESSOF( buf.data ), buf.size );
+						IF n < 0 THEN  Halt( SELF, TRUE, "UnixFiles.File.Flush: write failed" )  END;
 						fpos := buf.org + buf.size;  buf.chg := FALSE;
 						res := Unix.fstat( fd, stat );  mtime := stat.mtime.sec
 					END
@@ -597,7 +597,7 @@ TYPE
 				END Set;
 						
 				PROCEDURE SetX( VAR r: Files.Rider;  p: LONGINT );
-				VAR  org, offset, i, n: LONGINT;  buf: Buffer;
+				VAR  org, offset, i: LONGINT;  n: SIZE;  buf: Buffer;
 				BEGIN 
 					r.file := SELF;  r.fs := fs;
 					IF p > fsize THEN  p := LONGINT(fsize)
@@ -638,7 +638,7 @@ TYPE
 						END;
 						buf.org := org;  buf.chg := FALSE
 					ELSE
-						org := buf.org 
+						org := LONGINT(buf.org)
 					END;
 
 					r.hint := buf;  r.apos := org;  r.bpos := offset;  
@@ -671,22 +671,22 @@ TYPE
 				END Read;
 
 				PROCEDURE ReadBytes*( VAR r: Files.Rider;  VAR x: ARRAY OF CHAR;  ofs, len: LONGINT );
-				VAR xpos, min, restInBuf, offset: LONGINT;  buf: Buffer;  
+				VAR xpos, offset, restInBuf: SIZE;  min: LONGINT;  buf: Buffer;  
 				BEGIN  {EXCLUSIVE}
 					x[ofs] := 0X;  xpos := ofs;  
 					buf := r.hint(Buffer);  offset := r.bpos;
 					WHILE len > 0 DO
 						IF (r.apos # buf.org) OR (offset >= Bufsize) THEN  
-							SetX( r, r.apos + offset );  
+							SetX( r, r.apos + LONGINT(offset) );  
 							buf := r.hint(Buffer);  offset := r.bpos  
 						END;
 						restInBuf := buf.size - offset;
 						IF restInBuf = 0 THEN  r.res := len;  r.eof := TRUE;  RETURN
-						ELSIF len > restInBuf THEN  min := restInBuf
+						ELSIF len > restInBuf THEN  min := LONGINT(restInBuf)
 						ELSE  min := len
 						END;
 						S.MOVE( ADDRESSOF( buf.data ) + offset, ADDRESSOF( x ) + xpos, min );
-						INC( offset, min );  r.bpos := offset;
+						INC( offset, min );  r.bpos := LONGINT(offset);
 						INC( xpos, min );  DEC( len, min )
 					END;
 					r.res := 0;  r.eof := FALSE;
@@ -1114,7 +1114,7 @@ TYPE
 	(*!	The system calls open, read and write return -1 when they get interrupted 
 		by receiving a signal. Possibly through Objects.SuspendActivities() (GC).
 	*)
-	PROCEDURE UnixOpen( path: ADDRESS; flags, permissions: SET ): LONGINT;
+	PROCEDURE UnixOpen( path: ADDRESS; flags: SET32; permissions: Unix.mode_t ): LONGINT;
 	VAR 
 		fd, fo, errno: LONGINT;  failure: BOOLEAN;
 	BEGIN
@@ -1136,8 +1136,8 @@ TYPE
 		RETURN fd
 	END UnixOpen;
 	
-	PROCEDURE UnixRead( fd: LONGINT; buf: ADDRESS; len: SIZE ): LONGINT;
-	VAR n: LONGINT;
+	PROCEDURE UnixRead( fd: LONGINT; buf: ADDRESS; len: SIZE ): SIZE;
+	VAR n: SIZE;
 	BEGIN
 		REPEAT
 			n := Unix.read( fd, buf, len )
@@ -1145,8 +1145,8 @@ TYPE
 		RETURN n
 	END UnixRead;	
 	
-	PROCEDURE UnixWrite( fd: LONGINT; buf: ADDRESS; len: SIZE ): LONGINT;
-	VAR n: LONGINT;
+	PROCEDURE UnixWrite( fd: LONGINT; buf: ADDRESS; len: SIZE ): SIZE;
+	VAR n: SIZE;
 	BEGIN
 		REPEAT
 			n := Unix.write( fd, buf, len )

+ 9 - 6
source/Unix.V24.Mod

@@ -57,7 +57,7 @@ TYPE
 				res := Serials.WrongData;  RETURN;
 			END;
 
-			fd := Unix.open( ADDRESSOF(portname), Unix.rdwr, {} );
+			fd := Unix.open( ADDRESSOF(portname), Unix.rdwr, 0 );
 			IF fd = -1 THEN  
 				fd := 0;  res := Serials.NoSuchPort;  RETURN 
 			END;
@@ -133,8 +133,9 @@ TYPE
 		END Available;
 
 		PROCEDURE ReceiveChar*( VAR ch: CHAR;  VAR res: LONGINT );
+		VAR r: SIZE;
 		BEGIN	
-			res := Unix.read( fd, ADDRESSOF(ch), 1);
+			r := Unix.read( fd, ADDRESSOF(ch), 1);  res := LONGINT(r);
 			IF res = 1 THEN 
 				INC( charactersReceived );
 				res := Serials.Ok;
@@ -145,8 +146,9 @@ TYPE
 
 		(** Send - Send a byte to the specified port.  Waits until buffer space is available.  res = 0 iff ok. *)		
 		PROCEDURE SendChar*( ch: CHAR;  VAR res: LONGINT );
+		VAR r: SIZE;
 		BEGIN
-			res := Unix.write( fd, ADDRESSOF(ch), 1);
+			r := Unix.write( fd, ADDRESSOF(ch), 1);  res := LONGINT(r);
 			IF res = 1 THEN 
 				INC( charactersSent );
 				res := Serials.Ok;
@@ -156,9 +158,10 @@ TYPE
 		END SendChar;
 
 		PROCEDURE Send*( CONST buf: ARRAY OF CHAR;  ofs, len: LONGINT; propagate: BOOLEAN; VAR res: LONGINT );
+		VAR r: SIZE;
 		BEGIN
 			ASSERT ( LEN( buf ) >= ofs + len );   (* array bound check not implemented in Kernel32.WriteFile *)
-			res := Unix.write( fd, ADDRESSOF(buf[ofs]), len );
+			r := Unix.write( fd, ADDRESSOF(buf[ofs]), len );  res := LONGINT(r);
 			IF res < 0 THEN 
 				res := Serials.TransportError;
 			ELSE	
@@ -168,7 +171,7 @@ TYPE
 		END Send;
 
 		PROCEDURE Receive*( VAR buf: ARRAY OF CHAR;  ofs, size, min: LONGINT;  VAR len, res: LONGINT );
-		VAR i, l, read: LONGINT;
+		VAR i, l: LONGINT;  read: SIZE;
 		BEGIN
 			ASSERT ( LEN( buf ) >= ofs + size );
 			ASSERT ( LEN( buf ) >= ofs + min );   (* array bound check not implemented in Kernel32.ReadFile *)
@@ -179,7 +182,7 @@ TYPE
 				IF  l > 0 THEN
 					read := Unix.read(fd, ADDRESSOF(buf[i]), l );
 					IF  read = l  THEN
-						charactersReceived := charactersReceived + read;
+						charactersReceived := charactersReceived + LONGINT(read);
 						DEC( min, l );  DEC( size, l );  INC( len, l );  INC( i, l );
 					ELSE
 						(* If we've already received <min> bytes, <res> will become Serials.Ok later *)