Forráskód Böngészése

fixed Timeval structure, LONGINT -> HUGEINT

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6615 8c9fc860-2736-0410-a75d-ab315db34111
eth.guenter 9 éve
szülő
commit
5683661088

+ 8 - 6
source/Darwin.AMD64.Unix.Mod

@@ -209,8 +209,8 @@ TYPE
 			END;
 
 	Timeval* = RECORD
-				sec*		: LONGINT;
-				usec*		: LONGINT
+				sec*		: HUGEINT;
+				usec*		: HUGEINT
 			END;
 
 	TmPtr* = POINTER TO Tm;
@@ -232,9 +232,11 @@ TYPE
 			END;
 
 
-
-	FdSet* = ARRAY 32 OF SET;
-	FdSetPtr* = POINTER TO FdSet;
+CONST
+	FdSetLen* = 16;
+	
+TYPE
+	FdSet* = ARRAY FdSetLen OF SET;
 
 	Dirent* = POINTER TO RECORD
 				ino-		: LONGINT;
@@ -340,7 +342,7 @@ VAR
 	chmod-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
 	utime-		: PROCEDURE {C} ( name: ADDRESS;  tb: ADDRESS ): LONGINT;
 	access-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
-	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: FdSetPtr;  VAR timeout: Timeval ): LONGINT;
+	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: ADDRESS;  VAR timeout: Timeval ): LONGINT;
 
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
 	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;

+ 8 - 6
source/Darwin.I386.Unix.Mod

@@ -209,8 +209,8 @@ TYPE
 			END;
 
 	Timeval* = RECORD
-				sec*		: LONGINT;
-				usec*		: LONGINT
+				sec*		: HUGEINT;
+				usec*		: HUGEINT
 			END;
 
 	TmPtr* = POINTER TO Tm;
@@ -232,9 +232,11 @@ TYPE
 			END;
 
 
-
-	FdSet* = ARRAY 32 OF SET;
-	FdSetPtr* = POINTER TO FdSet;
+CONST
+	FdSetLen* = 32;
+	
+TYPE
+	FdSet* = ARRAY FdSetLen OF SET;
 
 	Dirent* = POINTER TO RECORD
 				ino-		: LONGINT;
@@ -317,7 +319,7 @@ VAR
 	chmod-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
 	utime-		: PROCEDURE {C} ( name: ADDRESS;  tb: ADDRESS ): LONGINT;
 	access-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
-	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: FdSetPtr;  VAR timeout: Timeval ): LONGINT;
+	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: ADDRESS;  VAR timeout: Timeval ): LONGINT;
 
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
 	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;

+ 8 - 7
source/Linux.AMD64.Unix.Mod

@@ -210,8 +210,8 @@ TYPE
 			END;
 
 	Timeval* = RECORD
-				sec*	: LONGINT;
-				usec*	: LONGINT
+				sec*	: HUGEINT;
+				usec*	: HUGEINT
 			END;
 
 	TmPtr* = POINTER TO Tm;
@@ -232,10 +232,11 @@ TYPE
 				interval*, value*: Timeval
 			END;
 
-
-
-	FdSet* = ARRAY 32 OF SET;
-	FdSetPtr* = POINTER TO FdSet;
+CONST
+	FdSetLen* = 16;
+	
+TYPE
+	FdSet* = ARRAY FdSetLen OF SET;
 
 	Dirent* = POINTER TO RECORD
 				ino-, off-	: LONGINT;   (* these may change to HUGEINT in future Linux releases!! *)
@@ -334,7 +335,7 @@ VAR
 	chmod-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
 	utime-		: PROCEDURE {C} ( name: ADDRESS;  tb: ADDRESS ): LONGINT;
 	access-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
-	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: FdSetPtr;  VAR timeout: Timeval ): LONGINT;
+	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: ADDRESS;  VAR timeout: Timeval ): LONGINT;
 
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
 	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;

+ 8 - 5
source/Linux.I386.Unix.Mod

@@ -210,8 +210,8 @@ TYPE
 			END;
 
 	Timeval* = RECORD
-				sec*	: LONGINT;
-				usec*	: LONGINT
+				sec*	: HUGEINT;
+				usec*	: HUGEINT
 			END;
 
 	TmPtr* = POINTER TO Tm;
@@ -233,9 +233,12 @@ TYPE
 			END;
 
 
+CONST
+	FdSetLen* = 32;
+	
+TYPE
+	FdSet* = ARRAY FdSetLen OF SET;
 
-	FdSet* = ARRAY 32 OF SET;
-	FdSetPtr* = POINTER TO FdSet;
 
 	Dirent* = POINTER TO RECORD
 				ino-, off-	: LONGINT;   (* these may change to HUGEINT in future Linux releases!! *)
@@ -313,7 +316,7 @@ VAR
 	chmod-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
 	utime-		: PROCEDURE {C} ( name: ADDRESS;  tb: ADDRESS ): LONGINT;
 	access-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
-	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: FdSetPtr;  VAR timeout: Timeval ): LONGINT;
+	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: ADDRESS;  VAR timeout: Timeval ): LONGINT;
 
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
 	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;

+ 11 - 28
source/Solaris.AMD64.Unix.Mod

@@ -213,8 +213,8 @@ TYPE
 			END;
 
 	Timeval* = RECORD
-				sec*	: LONGINT;
-				usec*	: LONGINT
+				sec-		: HUGEINT;
+				usec-		: HUGEINT;
 			END;
 
 	TmPtr* = POINTER TO Tm;
@@ -235,9 +235,11 @@ TYPE
 				interval*, value*: Timeval
 			END;
 
-
-	FdSet* = ARRAY 32 OF SET;
-	FdSetPtr* = POINTER TO FdSet;
+CONST
+	FdSetLen* = 16;
+	
+TYPE
+	FdSet* = ARRAY FdSetLen OF SET;
 
 	Dirent* = POINTER TO RECORD
 				ino-, off-	: LONGINT;
@@ -245,12 +247,13 @@ TYPE
 				name-	: (*array of*) CHAR;
 			END;
 
-	Sigset* = ARRAY 4 OF SET;
+	Sigset* = ARRAY 4 OF LONGINT;
 
 	Stack* = RECORD
 				sp*	: ADDRESS;
 				size*	: SIZE;
-				flags*	: SET;
+				flags*	: LONGINT;
+				dummy: ADDRESS; 
 			END;
 
 	Ucontext* = POINTER TO UcontextDesc;
@@ -292,26 +295,6 @@ TYPE
 				r_ds		: HUGEINT;
 				r_fsbase	: HUGEINT;
 				r_gsbase	: HUGEINT;
-				
-			(*	r_gs-		: LONGINT;
-				r_fs-		: LONGINT;
-				r_es-		: LONGINT;
-				r_ds-		: LONGINT;
-				r_di-		: LONGINT;
-				r_si-		: LONGINT;
-				r_bp-		: LONGINT;
-				r_sp-		: LONGINT;
-				r_bx-		: LONGINT;
-				r_dx-		: LONGINT;
-				r_cx-		: LONGINT;
-				r_ax-		: LONGINT;
-				r_trapno-	: LONGINT;
-				r_err-		: LONGINT;
-				r_pc-		: LONGINT;
-				r_cs-		: LONGINT;
-				r_flags-	: LONGINT;
-				r_spatsig-	: LONGINT;
-				r_ss-		: LONGINT;		*)
 			END;
 
 
@@ -340,7 +323,7 @@ VAR
 	chmod-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
 	utime-		: PROCEDURE {C} ( name: ADDRESS;  tb: ADDRESS ): LONGINT;
 	access-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
-	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: FdSetPtr;  VAR timeout: Timeval ): LONGINT;
+	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: ADDRESS;  VAR timeout: Timeval ): LONGINT;
 
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
 	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;

+ 8 - 6
source/Solaris.I386.Unix.Mod

@@ -213,8 +213,8 @@ TYPE
 			END;
 
 	Timeval* = RECORD
-				sec*	: LONGINT;
-				usec*	: LONGINT
+				sec*	: HUGEINT;
+				usec*	: HUGEINT
 			END;
 
 	TmPtr* = POINTER TO Tm;
@@ -235,9 +235,11 @@ TYPE
 				interval*, value*: Timeval
 			END;
 
-
-	FdSet* = ARRAY 32 OF SET;
-	FdSetPtr* = POINTER TO FdSet;
+CONST
+	FdSetLen* = 32;
+	
+TYPE
+	FdSet* = ARRAY FdSetLen OF SET;
 
 	Dirent* = POINTER TO RECORD
 				ino-, off-	: LONGINT;
@@ -316,7 +318,7 @@ VAR
 	chmod-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
 	utime-		: PROCEDURE {C} ( name: ADDRESS;  tb: ADDRESS ): LONGINT;
 	access-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;
-	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: FdSetPtr;  VAR timeout: Timeval ): LONGINT;
+	select-		: PROCEDURE {C} ( width: LONGINT; rd, wr, ex: ADDRESS;  VAR timeout: Timeval ): LONGINT;
 
 	chdir-			: PROCEDURE {C} ( name: ADDRESS ): LONGINT;
 	mkdir-		: PROCEDURE {C} ( name: ADDRESS;  mode: SET ): LONGINT;

+ 16 - 8
source/Unix.Sockets.Mod

@@ -307,29 +307,37 @@ VAR
 	END Available;
 
 	PROCEDURE Requested*( s: LONGINT ): BOOLEAN;
-	VAR res, i: LONGINT;
+	CONST
+		SLen = Unix.FdSetLen;
+		SetBits = SIZEOF( SET ) * 8;
+	VAR 
+		res, i: LONGINT;
 		readfds: Unix.FdSet;
 		timeout: Unix.Timeval;
 	BEGIN
 		timeout.sec := 0; timeout.usec := 0;
-		FOR i := 0 TO LEN( readfds ) - 1  DO readfds[i] := {} END;
-		INCL( readfds[s DIV 32],  s MOD 32 );
-		res := Unix.select( s+1, S.VAL( Unix.FdSetPtr, ADDRESSOF( readfds ) ), NIL, NIL, timeout );
+		FOR i := 0 TO SLen - 1  DO readfds[i] := {} END;
+		INCL( readfds[s DIV SetBits],  s MOD SetBits );
+		res := Unix.select( s+1, ADDRESSOF( readfds ), 0, 0, timeout );
 		RETURN res > 0 
 	END Requested;
 	
 	
 	PROCEDURE AwaitPacket*( s: LONGINT; ms: LONGINT ): BOOLEAN;
-	VAR res, err, i: LONGINT;
+	CONST
+		SLen = Unix.FdSetLen;
+		SetBits = SIZEOF( SET ) * 8;
+	VAR 
+		res, err, i: LONGINT;
 		readfds: Unix.FdSet;
 		timeout: Unix.Timeval;
 	BEGIN
 		timeout.sec := ms DIV 1000;  ms := ms MOD 1000;
 		timeout.usec := 1000*ms;
-		FOR i := 0 TO LEN( readfds ) - 1  DO readfds[i] := {} END;
-		INCL( readfds[s DIV 32],  s MOD 32 );
+		FOR i := 0 TO SLen - 1  DO readfds[i] := {} END;
+		INCL( readfds[s DIV SetBits],  s MOD SetBits );
 		REPEAT
-			res := Unix.select( s+1, S.VAL( Unix.FdSetPtr, ADDRESSOF( readfds ) ), NIL, NIL, timeout );
+			res := Unix.select( s+1, ADDRESSOF( readfds ), 0, 0, timeout );
 			IF res < 0 THEN  err := Unix.errno()  END
 		UNTIL (res >= 0) OR (err # Unix.EINTR);
 		RETURN res > 0 

+ 1 - 1
source/Unix.UnixFiles.Mod

@@ -391,7 +391,7 @@ TYPE
 				tempFile: BOOLEAN;
 				dev: Unix.DevT;
 				ino: LONGINT;
-				mtime: LONGINT;
+				mtime: HUGEINT;
 				fsize, fpos: SIZE;
 				bufs: ARRAY NBufs OF Buffer;
 				swapper, state: LONGINT;