ExternalStream.st
changeset 249 810798c5c2e5
parent 244 9faa2da0650a
child 255 2b2c5c0facab
--- a/ExternalStream.st	Sat Feb 11 17:42:24 1995 +0100
+++ b/ExternalStream.st	Wed Feb 15 11:22:05 1995 +0100
@@ -24,7 +24,7 @@
 COPYRIGHT (c) 1988 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.26 1995-02-11 14:08:30 claus Exp $
+$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.27 1995-02-15 10:21:55 claus Exp $
 '!
 
 !ExternalStream primitiveDefinitions!
@@ -87,7 +87,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.26 1995-02-11 14:08:30 claus Exp $
+$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.27 1995-02-15 10:21:55 claus Exp $
 "
 !
 
@@ -727,7 +727,7 @@
 
     _INST(lastErrorNumber) = nil;
     if ((fp = _INST(filePointer)) != nil) {
-	if (_isSmallInteger(ioctlNumber)) {
+	if (__isSmallInteger(ioctlNumber)) {
 	    ioNum = _intVal(ioctlNumber);
 	    f = MKFD(fp);
 
@@ -768,14 +768,14 @@
 
     _INST(lastErrorNumber) = nil;
     if ((fp = _INST(filePointer)) != nil) {
-	if (_isSmallInteger(ioctlNumber) 
-	 && (_isSmallInteger(arg) || __isBytes(arg))) {
+	if (__isSmallInteger(ioctlNumber) 
+	 && (__isSmallInteger(arg) || __isBytes(arg))) {
 	    f = MKFD(fp);
 	    ioNum = _intVal(ioctlNumber);
 
 	    __immediateInterrupt__ = 1;
 	    do {
-		if (_isSmallInteger(arg)) {
+		if (__isSmallInteger(arg)) {
 		    ret = ioctl(fileno(f), ioNum, _intVal(arg));
 		} else {
 		    ret = ioctl(fileno(f), ioNum, _ByteArrayInstPtr(arg)->ba_element);
@@ -913,7 +913,7 @@
     _INST(lastErrorNumber) = nil;
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(writeonly))) {
-	if (_isSmallInteger(count) && _isSmallInteger(start)) {
+	if (__bothSmallInteger(count, start)) {
 	    f = MKFD(fp);
 
 	    oClass = _Class(anObject);
@@ -1276,7 +1276,7 @@
     _INST(lastErrorNumber) = nil;
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(readonly))) {
-	if (_isSmallInteger(aByteValue)) {
+	if (__isSmallInteger(aByteValue)) {
 	    c = _intVal(aByteValue);
 	    f = MKFD(fp);
 	    __immediateInterrupt__ = 1;
@@ -1357,7 +1357,7 @@
     _INST(lastErrorNumber) = nil;
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(readonly))) {
-	if (_isSmallInteger(count) && _isSmallInteger(start)) {
+	if (__bothSmallInteger(count, start)) {
 	    oClass = _Class(anObject);
 	    switch (_intVal(_ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
 		case BYTEARRAY:
@@ -1429,7 +1429,7 @@
     _INST(lastErrorNumber) = nil;
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(readonly))
-     && _isSmallInteger(aNumber)) {
+     && __isSmallInteger(aNumber)) {
 	num = _intVal(aNumber);
 	if (msbFlag == true) {
 	    bytes[0] = (num >> 8) & 0xFF;
@@ -1488,7 +1488,7 @@
     _INST(lastErrorNumber) = nil;
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(readonly))
-     && _isSmallInteger(aNumber)) {
+     && __isSmallInteger(aNumber)) {
 	num = _intVal(aNumber);
 	if (msbFlag == true) {
 	    bytes[0] = (num >> 24) & 0xFF;
@@ -1634,7 +1634,7 @@
 
 	if (c != EOF) {
 	    pos = _INST(position);
-	    if (_isSmallInteger(pos)) {
+	    if (__isSmallInteger(pos)) {
 		_INST(position) = _MKSMALLINT(_intVal(pos) + 1);
 	    } else {
 		_INST(position) = nil;
@@ -1736,7 +1736,7 @@
 		_INST(lastErrorNumber) = _MKSMALLINT(errno);
 	    }
 	} else {
-	    if (_isSmallInteger(aCharacter)) {
+	    if (__isSmallInteger(aCharacter)) {
 		c = _intVal(aCharacter);
 		goto doWrite;
 	    }
@@ -1846,7 +1846,7 @@
     _INST(lastErrorNumber) = nil;
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(readonly))) {
-	if (_isSmallInteger(start) && _isSmallInteger(stop)) {
+	if (__bothSmallInteger(start, stop)) {
 	    cp = NULL;
 	    if (_INST(binary) != true) {
 		if (__isString(aCollection) || __isSymbol(aCollection)) {
@@ -1988,6 +1988,11 @@
 	    buffer[0] = 0;
 
 	    _buffered = (_INST(buffered) == true);
+	    if (_buffered) {
+	        __READING__(f);
+	    } else {
+	        fd = fileno(f);
+	    }
 
 	    /*
 	     * mhmh - the following code looks ok to me,
@@ -2000,16 +2005,17 @@
 		rslt = fgets(buffer, sizeof(buffer), f);
 	    } while ((rslt == NULL) && (errno == EINTR));
 #else
-	    if (_buffered) {
-		__READING__(f)
-	    }
+
 	    rslt = buffer;
-	    fd = fileno(f);
 	    for (;;) {
 		if (_buffered) {
+/*
 		    do {
+*/
 			ch = getc(f);
+/*
 		    } while ((ch < 0) && (errno == EINTR));
+*/
 		    if (ch == EOF) {
 			if (ferror(f)) {
 			    if (errno == EINTR) {
@@ -2164,7 +2170,7 @@
     char buffer[1024];
 
     _INST(lastErrorNumber) = nil;
-    if (_isSmallInteger(srcFilePointer)) {
+    if (__isSmallInteger(srcFilePointer)) {
 	if ((aStringOrNil == nil) || __isString(aStringOrNil)) {
 	    if (aStringOrNil != nil) {
 		matchString = (char *) _stringVal(aStringOrNil);
@@ -2342,6 +2348,7 @@
 	    c = getc(f);
 	} while ((c < 0) && (errno == EINTR));
 	__immediateInterrupt__ = 0;
+
 	if (c != EOF) {
 	    ungetc(c, f);
 	    RETURN (false);
@@ -2513,7 +2520,7 @@
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(writeonly))) {
 	if (_INST(binary) == true) {
-	    if (_isSmallInteger(anObject)) {
+	    if (__isSmallInteger(anObject)) {
 		peekValue = _intVal(anObject) & 0xFF;
 	    } else {
 		goto bad;
@@ -2526,9 +2533,9 @@
 	    }
 	}
 
+	f = MKFD(fp);
 	__READING__(f)
 
-	f = MKFD(fp);
 	__immediateInterrupt__ = 1;
 	do {
 	    c = getc(f);
@@ -2578,7 +2585,7 @@
     _INST(lastErrorNumber) = nil;
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(writeonly))) {
-	if ((_INST(binary) == true) && _isSmallInteger(anObject)) {
+	if ((_INST(binary) == true) && __isSmallInteger(anObject)) {
 	    peekValue = _intVal(anObject) & 0xFF;
 	} else {
 	    if ((_INST(binary) != true) && __isCharacter(anObject)) {
@@ -2589,9 +2596,8 @@
 	}
 
 	if (peekValue >= 0) {
+	    _INST(position) = nil;
 	    f = MKFD(fp);
-	    _INST(position) = nil;
-
 	    __immediateInterrupt__ = 1;
 	    __READING__(f)
 
@@ -2614,7 +2620,6 @@
 		    RETURN (anObject);
 		}
 	    }
-	    __immediateInterrupt__ = 0;
 	}
     }
 %}.
@@ -2648,6 +2653,7 @@
 		RETURN ( self );
 	    }
 	    __immediateInterrupt__ = 0;
+
 	    if (ferror(f) && (errno != 0)) {
 		_INST(lastErrorNumber) = _MKSMALLINT(errno);
 	    } else {
@@ -2748,7 +2754,7 @@
      && (_INST(mode) != @symbol(writeonly))) {
 	if (_INST(binary) == true) {
 	    /* searched for object must be a smallInteger */
-	    if (! _isSmallInteger(aCharacter)) goto badArgument;
+	    if (! __isSmallInteger(aCharacter)) goto badArgument;
 	    cSearch = _intVal(aCharacter);
 	} else {
 	    /* searched for object must be a character */
@@ -2759,7 +2765,6 @@
 	if ((cSearch < 0) || (cSearch > 255)) goto badArgument;
 
 	f = MKFD(fp);
-        
 	__READING__(f)
 
 	__immediateInterrupt__ = 1;
@@ -2889,7 +2894,6 @@
      && (_INST(mode) != @symbol(writeonly))) {
 	if (_INST(binary) != true) {
 	    f = MKFD(fp);
-
 	    __READING__(f)
 
 	    __immediateInterrupt__ = 1;
@@ -2949,9 +2953,7 @@
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(writeonly))) {
 	f = MKFD(fp);
-
 	__immediateInterrupt__ = 1;
-
 	__READING__(f)
 
 	for (;;) {
@@ -2961,6 +2963,7 @@
 	    if (ch < 0) {
 		if (ferror(f) && (errno != 0)) {
 		    _INST(lastErrorNumber) = _MKSMALLINT(errno);
+		    __immediateInterrupt__ = 0;
 		    goto err;
 		}
 		_INST(hitEOF) = true;
@@ -2983,6 +2986,7 @@
 	    if (ch < 0) {
 		if (ferror(f) && (errno != 0)) {
 		    _INST(lastErrorNumber) = _MKSMALLINT(errno);
+		    __immediateInterrupt__ = 0;
 		    goto err;
 		}
 		_INST(hitEOF) = true;
@@ -3126,6 +3130,7 @@
 		 * mhmh - chunk seems to be very big ....
 		 */
 		outOfMemory = true;
+    		__immediateInterrupt__ = 0;
 		goto err;
 	    }
 	    bcopy(buffer, newBuffer, index);