ExternalStream.st
changeset 4383 7a5abc09fb39
parent 4368 d69568f9ad95
child 4384 f8e779b99b14
--- a/ExternalStream.st	Tue Jul 13 18:12:05 1999 +0200
+++ b/ExternalStream.st	Wed Jul 14 21:26:54 1999 +0200
@@ -2581,25 +2581,28 @@
     __INST(lastErrorNumber) = nil;
     if (((fp = __INST(filePointer)) != nil)
      && (__INST(mode) != @symbol(writeonly))) {
-	f = __FILEVal(fp);
-
-	_buffered = (__INST(buffered) == true);
-	if (_buffered) {
-	    __READING__(f)
-	}
-	__READBYTE__(ret, f, &byte, _buffered);
-	if (ret > 0) {
-	    if (__INST(position) != nil)
-		__INST(position) = __MKSMALLINT(__intVal(__INST(position)) + 1);
-	    RETURN (__MKSMALLINT(byte));
-	}
-
-	if (ret == 0) {
-	    __INST(hitEOF) = true;
-	} else /* ret < 0 */ {
-	    __INST(position) = nil;
-	    __INST(lastErrorNumber) = __MKSMALLINT(errno);
-	}
+        f = __FILEVal(fp);
+
+        _buffered = (__INST(buffered) == true);
+        if (_buffered) {
+            __READING__(f)
+        }
+        __READBYTE__(ret, f, &byte, _buffered);
+        if (ret > 0) {
+            OBJ pos;
+
+            if ((pos = __INST(position)) != nil) {
+                __INST(position) = __MKSMALLINT(__intVal(pos) + 1);
+            }
+            RETURN (__MKSMALLINT(byte));
+        }
+
+        if (ret == 0) {
+            __INST(hitEOF) = true;
+        } else /* ret < 0 */ {
+            __INST(position) = nil;
+            __INST(lastErrorNumber) = __MKSMALLINT(errno);
+        }
     }
 %}.
     hitEOF ifTrue:[^ self pastEnd].
@@ -2745,43 +2748,64 @@
 
     __INST(lastErrorNumber) = nil;
     if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
+        && (__INST(mode) != @symbol(writeonly))
     ) {
-	FILEPOINTER f;
-	int ret;
-	int value;
-	char buffer[4];
-
-	f = __FILEVal(fp);
-	__READBYTES__(ret, f, buffer, 4, __INST(buffered) == true);
-
-	if (ret == 4) {
-	    if (__INST(position) != nil) {
-		__INST(position) = __MKSMALLINT(__intVal(__INST(position)) + 4);
-	    }
-	    if (msbFlag == true) {
-		value = (buffer[0] & 0xFF);
-		value = (value << 8) | (buffer[1] & 0xFF);
-		value = (value << 8) | (buffer[2] & 0xFF);
-		value = (value << 8) | (buffer[3] & 0xFF);
-	    } else {
-		value = (buffer[3] & 0xFF);
-		value = (value << 8) | (buffer[2] & 0xFF);
-		value = (value << 8) | (buffer[1] & 0xFF);
-		value = (value << 8) | (buffer[0] & 0xFF);
-	    }
-	    if ((value >= _MIN_INT) && (value <= _MAX_INT)) {
-		RETURN ( __MKSMALLINT(value));
-	    }
-	    RETURN ( __MKLARGEINT(value) );
-	}
-
-	if (ret < 0) {
-	    __INST(position) = nil;
-	    __INST(lastErrorNumber) = __MKSMALLINT(errno);
-	} else /* ret == 0 */ {
-	    __INST(hitEOF) = true;
-	}
+        FILEPOINTER f;
+        int ret, _buffered;
+        int value;
+        union {
+            unsigned char buffer[4];
+            int intVal;
+        } u;
+
+        f = __FILEVal(fp);
+        _buffered = (__INST(buffered) == true);
+        if (_buffered) {
+            __READING__(f)
+        }
+        __READBYTES__(ret, f, u.buffer, 4, _buffered);
+
+        if (ret == 4) {
+            OBJ pos;
+
+            if ((pos = __INST(position)) != nil) {
+                __INST(position) = __MKSMALLINT(__intVal(pos) + 4);
+            }
+            if (msbFlag == true) {
+#if defined(__MSBFIRST)
+                value = u.intVal;
+#else
+                value = (u.buffer[0] & 0xFF);
+                value = (value << 8) | (u.buffer[1] & 0xFF);
+                value = (value << 8) | (u.buffer[2] & 0xFF);
+                value = (value << 8) | (u.buffer[3] & 0xFF);
+#endif
+            } else {
+#if defined(__LSBFIRST)
+                value = u.intVal;
+#else
+                value = (u.buffer[3] & 0xFF);
+                value = (value << 8) | (u.buffer[2] & 0xFF);
+                value = (value << 8) | (u.buffer[1] & 0xFF);
+                value = (value << 8) | (u.buffer[0] & 0xFF);
+#endif
+            }
+#ifdef alpha64
+            RETURN ( __MKSMALLINT(value));
+#else
+            if ((value >= _MIN_INT) && (value <= _MAX_INT)) {
+                RETURN ( __MKSMALLINT(value));
+            }
+            RETURN ( __MKLARGEINT(value) );
+#endif
+        }
+
+        if (ret < 0) {
+            __INST(position) = nil;
+            __INST(lastErrorNumber) = __MKSMALLINT(errno);
+        } else /* ret == 0 */ {
+            __INST(hitEOF) = true;
+        }
     }
 %}.
     hitEOF ifTrue:[^ self pastEnd].
@@ -2803,34 +2827,51 @@
 
     __INST(lastErrorNumber) = nil;
     if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
+        && (__INST(mode) != @symbol(writeonly))
     ) {
-	FILEPOINTER f;
-	int ret;
-	short value;
-	char buffer[2];
-
-	f = __FILEVal(fp);
-	__READBYTES__(ret, f, buffer, 2, __INST(buffered) == true);
-
-	if (ret == 2) {
-	    if (__INST(position) != nil) {
-		__INST(position) = __MKSMALLINT(__intVal(__INST(position)) + 2);
-	    }
-	    if (msbFlag == true) {
-		value = ((buffer[0] & 0xFF) << 8) | (buffer[1] & 0xFF);
-	    } else {
-		value = ((buffer[1] & 0xFF) << 8) | (buffer[0] & 0xFF);
-	    }
-	    RETURN (__MKSMALLINT(value));
-	}
-
-	if (ret < 0) {
-	    __INST(position) = nil;
-	    __INST(lastErrorNumber) = __MKSMALLINT(errno);
-	} else /* ret == 0 */ {
-	    __INST(hitEOF) = true;
-	}
+        FILEPOINTER f;
+        int ret, _buffered;
+        short value;
+        union {
+            unsigned char buffer[2];
+            short shortVal;
+        } u;
+
+        f = __FILEVal(fp);
+        _buffered = (__INST(buffered) == true);
+        if (_buffered) {
+            __READING__(f)
+        }
+        __READBYTES__(ret, f, u.buffer, 2, _buffered);
+
+        if (ret == 2) {
+            OBJ pos;
+
+            if ((pos = __INST(position)) != nil) {
+                __INST(position) = __MKSMALLINT(__intVal(pos) + 2);
+            }
+            if (msbFlag == true) {
+#if defined(__MSBFIRST)
+                value = u.shortVal;
+#else
+                value = ((u.buffer[0] & 0xFF) << 8) | (u.buffer[1] & 0xFF);
+#endif
+            } else {
+#if defined(__LSBFIRST)
+                value = u.shortVal;
+#else
+                value = ((u.buffer[1] & 0xFF) << 8) | (u.buffer[0] & 0xFF);
+#endif
+            }
+            RETURN (__MKSMALLINT(value));
+        }
+
+        if (ret < 0) {
+            __INST(position) = nil;
+            __INST(lastErrorNumber) = __MKSMALLINT(errno);
+        } else /* ret == 0 */ {
+            __INST(hitEOF) = true;
+        }
     }
 %}.
     hitEOF ifTrue:[^ self pastEnd].
@@ -2852,46 +2893,65 @@
 
     __INST(lastErrorNumber) = nil;
     if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
+        && (__INST(mode) != @symbol(writeonly))
     ) {
-	FILEPOINTER f;
-	int ret;
-	unsigned INT value;
-	unsigned char buffer[4];
-
-	f = __FILEVal(fp);
-	__READBYTES__(ret, f, buffer, 4, __INST(buffered) == true);
-
-	if (ret == 4) {
-	    if (__INST(position) != nil) {
-		__INST(position) = __MKSMALLINT(__intVal(__INST(position)) + 4);
-	    }
-	    if (msbFlag == true) {
-		value = (buffer[0] & 0xFF);
-		value = (value << 8) | (buffer[1] & 0xFF);
-		value = (value << 8) | (buffer[2] & 0xFF);
-		value = (value << 8) | (buffer[3] & 0xFF);
-	    } else {
-		value = (buffer[3] & 0xFF);
-		value = (value << 8) | (buffer[2] & 0xFF);
-		value = (value << 8) | (buffer[1] & 0xFF);
-		value = (value << 8) | (buffer[0] & 0xFF);
-	    }
+        FILEPOINTER f;
+        int ret, _buffered;
+        unsigned INT value;
+        union {
+            unsigned char buffer[4];
+            unsigned int intVal;
+        } u;
+
+        f = __FILEVal(fp);
+        _buffered = (__INST(buffered) == true);
+        if (_buffered) {
+            __READING__(f)
+        }
+        __READBYTES__(ret, f, u.buffer, 4, _buffered);
+
+        if (ret == 4) {
+            OBJ pos;
+
+            if ((pos = __INST(position)) != nil) {
+                __INST(position) = __MKSMALLINT(__intVal(pos) + 4);
+            }
+            if (msbFlag == true) {
+#if defined(__MSBFIRST)
+                value = u.intVal;
+#else
+                value = u.buffer[0];
+                value = (value << 8) | u.buffer[1];
+                value = (value << 8) | u.buffer[2];
+                value = (value << 8) | u.buffer[3];
+#endif
+            } else {
+#if defined(__LSBFIRST)
+                value = u.intVal;
+#else
+                value = u.buffer[3];
+                value = (value << 8) | u.buffer[2];
+                value = (value << 8) | u.buffer[1];
+                value = (value << 8) | u.buffer[0];
+#endif
+            }
 #ifdef alpha64
-	    value &= 0xFFFFFFFF;
+            value &= 0xFFFFFFFF;
+            RETURN (__MKSMALLINT(value));
+#else
+            if (value <= _MAX_INT) {
+                RETURN (__MKSMALLINT(value));
+            }
+            RETURN (__MKULARGEINT(value) );
 #endif
-	    if (value <= _MAX_INT) {
-		RETURN ( __MKSMALLINT(value));
-	    }
-	    RETURN ( __MKULARGEINT(value) );
-	}
-
-	if (ret < 0) {
-	    __INST(position) = nil;
-	    __INST(lastErrorNumber) = __MKSMALLINT(errno);
-	} else /* ret == 0 */ {
-	    __INST(hitEOF) = true;
-	}
+        }
+
+        if (ret < 0) {
+            __INST(position) = nil;
+            __INST(lastErrorNumber) = __MKSMALLINT(errno);
+        } else /* ret == 0 */ {
+            __INST(hitEOF) = true;
+        }
     }
 %}.
     hitEOF ifTrue:[^ self pastEnd].
@@ -2912,34 +2972,51 @@
 
     __INST(lastErrorNumber) = nil;
     if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
+        && (__INST(mode) != @symbol(writeonly))
     ) {
-	FILEPOINTER f;
-	int ret;
-	unsigned int value;
-	char buffer[2];
-
-	f = __FILEVal(fp);
-	__READBYTES__(ret, f, buffer, 2, __INST(buffered) == true);
-
-	if (ret == 2) {
-	    if (__INST(position) != nil) {
-		__INST(position) = __MKSMALLINT(__intVal(__INST(position)) + 2);
-	    }
-	    if (msbFlag == true) {
-		value = ((buffer[0] & 0xFF) << 8) | (buffer[1] & 0xFF);
-	    } else {
-		value = ((buffer[1] & 0xFF) << 8) | (buffer[0] & 0xFF);
-	    }
-	    RETURN (__MKSMALLINT(value));
-	}
-
-	if (ret < 0) {
-	    __INST(position) = nil;
-	    __INST(lastErrorNumber) = __MKSMALLINT(errno);
-	} else /* ret == 0 */ {
-	    __INST(hitEOF) = true;
-	}
+        FILEPOINTER f;
+        int ret, _buffered;
+        unsigned int value;
+        union {
+            unsigned char buffer[2];
+            unsigned short shortVal;
+        } u;
+
+        f = __FILEVal(fp);
+        _buffered = (__INST(buffered) == true);
+        if (_buffered) {
+            __READING__(f)
+        }
+        __READBYTES__(ret, f, u.buffer, 2, _buffered);
+
+        if (ret == 2) {
+            OBJ pos;
+
+            if ((pos = __INST(position)) != nil) {
+                __INST(position) = __MKSMALLINT(__intVal(pos) + 2);
+            }
+            if (msbFlag == true) {
+#if defined(__MSBFIRST)
+                value = u.shortVal;
+#else
+                value = (u.buffer[0] << 8) | u.buffer[1];
+#endif
+            } else {
+#if defined(__LSBFIRST)
+                value = u.shortVal;
+#else
+                value = (u.buffer[1] << 8) | u.buffer[0];
+#endif
+            }
+            RETURN (__MKSMALLINT(value));
+        }
+
+        if (ret < 0) {
+            __INST(position) = nil;
+            __INST(lastErrorNumber) = __MKSMALLINT(errno);
+        } else /* ret == 0 */ {
+            __INST(hitEOF) = true;
+        }
     }
 %}.
     hitEOF ifTrue:[^ self pastEnd].
@@ -4745,6 +4822,6 @@
 !ExternalStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.191 1999-07-10 18:37:44 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.192 1999-07-14 19:26:54 cg Exp $'
 ! !
 ExternalStream initialize!