ExtStream.st
changeset 12 8e03bd717355
parent 10 4f1f9a91e406
child 22 847106305963
--- a/ExtStream.st	Sat Dec 11 01:42:02 1993 +0100
+++ b/ExtStream.st	Sat Dec 11 01:46:55 1993 +0100
@@ -11,7 +11,7 @@
 "
 
 ReadWriteStream subclass:#ExternalStream
-       instanceVariableNames:'filePointer mode buffered binary'
+       instanceVariableNames:'filePointer mode buffered binary useCRLF'
        classVariableNames:'lobby'
        poolDictionaries:''
        category:'Streams-External'
@@ -29,7 +29,7 @@
 In text-mode, the elements read/written are characters; while in binary-mode the basic
 elements are bytes which read/write as SmallIntegers in the range 0..255.
 
-$Header: /cvs/stx/stx/libbasic/Attic/ExtStream.st,v 1.5 1993-11-08 02:30:14 claus Exp $
+$Header: /cvs/stx/stx/libbasic/Attic/ExtStream.st,v 1.6 1993-12-11 00:46:55 claus Exp $
 
 written 88 by claus
 '!
@@ -73,7 +73,7 @@
     |newStream|
 
     newStream := self basicNew.
-    newStream text.
+    newStream text; buffered:true; useCRLF:false.
     ^ newStream
 ! !
 
@@ -90,7 +90,15 @@
 
 %{  /* NOCONTEXT */
 
-    fclose(MKFD(_INST(filePointer)));
+    if (_INST(filePointer) != nil) {
+        int savInt;
+        extern int _immediateInterrupt;
+
+        savInt = _immediateInterrupt;
+        _immediateInterrupt = 1;
+        fclose(MKFD(_INST(filePointer)));
+        _immediateInterrupt = savInt;
+    }
 %}
 ! !
 
@@ -214,6 +222,12 @@
     buffered := aBoolean
 !
 
+useCRLF:aBoolean
+    "turn on or off CRLF sending (instead of LF only) - default is off"
+
+    useCRLF := aBoolean
+!
+
 binary
     "switch to binary mode - default is text"
 
@@ -361,9 +375,9 @@
             f = MKFD(_INST(filePointer));
             savInt = _immediateInterrupt;
             _immediateInterrupt = 1;
-	    do {
+            do {
                 ret = ioctl(fileno(f), ioNum);
-	    } while ((ret < 0) && (errno == EINTR));
+            } while ((ret < 0) && (errno == EINTR));
             _immediateInterrupt = savInt;
             if (ret >= 0) {
                 RETURN ( _MKSMALLINT(ret) );
@@ -403,13 +417,13 @@
             ioNum = _intVal(ioctlNumber);
             savInt = _immediateInterrupt;
             _immediateInterrupt = 1;
-	    do {
+            do {
                 if (isStructure == true) {
                     ret = ioctl(fileno(f), ioNum, _ByteArrayInstPtr(arg)->ba_element);
                 } else {
                     ret = ioctl(fileno(f), ioNum, _intVal(arg));
                 }
-	    } while ((ret < 0) && (errno == EINTR));
+            } while ((ret < 0) && (errno == EINTR));
             _immediateInterrupt = savInt;
             if (ret >= 0) {
                 RETURN ( _MKSMALLINT(ret) );
@@ -439,31 +453,29 @@
     extern errno;
     extern int _immediateInterrupt;
 
-    if (_INST(filePointer) != nil) {
-        if (_INST(mode) != _writeonly) {
-            f = MKFD(_INST(filePointer));
-            savInt = _immediateInterrupt;
-            _immediateInterrupt = 1;
-	    do {
-                if (_INST(buffered) == false) {
-                    cnt = read(fileno(f), &byte, 1);
-                } else {
-                    if (_INST(mode) == _readwrite)
-                        fseek(f, 0L, 1); /* needed in stdio */
-                    cnt = fread(&byte, 1, 1, f);
-                }
-	    } while ((cnt < 0) && (errno == EINTR));
-            _immediateInterrupt = savInt;
-            if (cnt == 1) {
-                if (_INST(position) != nil)
-                    _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 1);
-                RETURN ( _MKSMALLINT(byte) );
+    if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
+        f = MKFD(_INST(filePointer));
+        savInt = _immediateInterrupt;
+        _immediateInterrupt = 1;
+        do {
+            if (_INST(buffered) == false) {
+                cnt = read(fileno(f), &byte, 1);
+            } else {
+                if (_INST(mode) == _readwrite)
+                    fseek(f, 0L, 1); /* needed in stdio */
+                cnt = fread(&byte, 1, 1, f);
             }
-            if (cnt < 0) {
-                ErrorNumber = _MKSMALLINT(errno);
-            }
-            RETURN ( nil );
+        } while ((cnt < 0) && (errno == EINTR));
+        _immediateInterrupt = savInt;
+        if (cnt == 1) {
+            if (_INST(position) != nil)
+                _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 1);
+            RETURN ( _MKSMALLINT(byte) );
         }
+        if (cnt < 0) {
+            ErrorNumber = _MKSMALLINT(errno);
+        }
+        RETURN ( nil );
     }
 %}
 .
@@ -497,36 +509,34 @@
     OBJ pos;
     extern int _immediateInterrupt;
 
-    if (_INST(filePointer) != nil) {
-        if (_INST(mode) != _writeonly) {
-            if (_isSmallInteger(count) && _isSmallInteger(start)) {
-                cnt = _intVal(count);
-                offs = _intVal(start) - 1;
-                f = MKFD(_INST(filePointer));
-                objSize = _Size(anObject) - OHDR_SIZE;
-                if ((offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs))) {
-                    cp = (char *)_InstPtr(anObject) + OHDR_SIZE + offs;
-                    savInt = _immediateInterrupt;
-                    _immediateInterrupt = 1;
-		    do {
-                        if (_INST(buffered) == false) {
-                            cnt = read(fileno(f), cp, cnt);
-                        } else {
-                            if (_INST(mode) == _readwrite)
-                                fseek(f, 0L, 1); /* needed in stdio */
-                            cnt = fread(cp, 1, cnt, f);
-                        }
-		    } while ((cnt < 0) && (errno == EINTR));
-                    _immediateInterrupt = savInt;
-                    if (cnt >= 0) {
-                        pos = _INST(position);
-                        if (pos != nil)
-                            _INST(position) = _MKSMALLINT(_intVal(pos) + cnt);
-                        RETURN ( _MKSMALLINT(cnt) );
+    if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
+        if (_isSmallInteger(count) && _isSmallInteger(start)) {
+            cnt = _intVal(count);
+            offs = _intVal(start) - 1;
+            f = MKFD(_INST(filePointer));
+            objSize = _Size(anObject) - OHDR_SIZE;
+            if ((offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs))) {
+                cp = (char *)_InstPtr(anObject) + OHDR_SIZE + offs;
+                savInt = _immediateInterrupt;
+                _immediateInterrupt = 1;
+                do {
+                    if (_INST(buffered) == false) {
+                        cnt = read(fileno(f), cp, cnt);
+                    } else {
+                        if (_INST(mode) == _readwrite)
+                            fseek(f, 0L, 1); /* needed in stdio */
+                        cnt = fread(cp, 1, cnt, f);
                     }
-                    ErrorNumber = _MKSMALLINT(errno);
-                    RETURN ( nil );
+                } while ((cnt < 0) && (errno == EINTR));
+                _immediateInterrupt = savInt;
+                if (cnt >= 0) {
+                    pos = _INST(position);
+                    if (pos != nil)
+                        _INST(position) = _MKSMALLINT(_intVal(pos) + cnt);
+                    RETURN ( _MKSMALLINT(cnt) );
                 }
+                ErrorNumber = _MKSMALLINT(errno);
+                RETURN ( nil );
             }
         }
     }
@@ -550,56 +560,54 @@
     int savInt;
 
     if (_INST(binary) == true) {
-        if (_INST(filePointer) != nil) {
-            if (_INST(mode) != _writeonly) {
-                FILE *f;
-                unsigned char hi, low;
-		int cnt;
+        if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
+            FILE *f;
+            unsigned char hi, low;
+            int cnt;
 
-                savInt = _immediateInterrupt;
-                _immediateInterrupt = 1;
-                f = MKFD(_INST(filePointer));
-		do {
-                    if (_INST(buffered) == false) {
-                        cnt = read(fileno(f), &hi, 1);
-                    } else {
-                        if (_INST(mode) == _readwrite)
-                            fseek(f, 0L, 1); /* needed in stdio */
-                        cnt = fread(&hi, 1, 1, f);
-                    }
-		} while ((cnt < 0) && (errno == EINTR));
-
-		if (cnt < 0) {
-                    _immediateInterrupt = savInt;
-                    RETURN ( nil );
+            savInt = _immediateInterrupt;
+            _immediateInterrupt = 1;
+            f = MKFD(_INST(filePointer));
+            do {
+                if (_INST(buffered) == false) {
+                    cnt = read(fileno(f), &hi, 1);
+                } else {
+                    if (_INST(mode) == _readwrite)
+                        fseek(f, 0L, 1); /* needed in stdio */
+                    cnt = fread(&hi, 1, 1, f);
                 }
-                do {
-                    if (_INST(buffered) == false) {
-                        cnt = read(fileno(f), &low, 1);
-                    } else {
-                        if (_INST(mode) == _readwrite)
-                            fseek(f, 0L, 1); /* needed in stdio */
-                        cnt = fread(&low, 1, 1, f);
-                    }
-                } while ((cnt < 0) && (errno == EINTR));
+            } while ((cnt < 0) && (errno == EINTR));
 
+            if (cnt < 0) {
                 _immediateInterrupt = savInt;
-                if (cnt < 0) {
-                    if (_INST(position) != nil) {
-                        _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 1);
-                    }
-                    RETURN ( _MKSMALLINT(hi & 0xFF) );
+                RETURN ( nil );
+            }
+            do {
+                if (_INST(buffered) == false) {
+                    cnt = read(fileno(f), &low, 1);
+                } else {
+                    if (_INST(mode) == _readwrite)
+                        fseek(f, 0L, 1); /* needed in stdio */
+                    cnt = fread(&low, 1, 1, f);
                 }
+            } while ((cnt < 0) && (errno == EINTR));
+
+            _immediateInterrupt = savInt;
+            if (cnt < 0) {
                 if (_INST(position) != nil) {
-                    _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 2);
+                    _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 1);
                 }
-                RETURN ( _MKSMALLINT(((hi & 0xFF)<<8) | (low & 0xFF)) );
+                RETURN ( _MKSMALLINT(hi & 0xFF) );
             }
+            if (_INST(position) != nil) {
+                _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 2);
+            }
+            RETURN ( _MKSMALLINT(((hi & 0xFF)<<8) | (low & 0xFF)) );
         }
     }
 %}
 .
-%{
+%{  /* STACK: 2000 */
     FILE *f;
     int len;
     char buffer[1024];
@@ -607,54 +615,52 @@
     int cnt = 0;
     extern int _immediateInterrupt;
 
-    if (_INST(filePointer) != nil) {
-        if (_INST(mode) != _writeonly) {
-            f = MKFD(_INST(filePointer));
-            savInt = _immediateInterrupt;
-            _immediateInterrupt = 1;
+    if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
+        f = MKFD(_INST(filePointer));
+        savInt = _immediateInterrupt;
+        _immediateInterrupt = 1;
 
-            /* text-mode */
-            for (;;) {
-                ch = getc(f);
-                cnt++;
+        /* text-mode */
+        for (;;) {
+            ch = getc(f);
+            cnt++;
 
-                if (ch >= ' ') break;
-                if ((ch != ' ') && (ch != '\t') && (ch != '\r')
-                 && (ch != '\n') && (ch != 0x0b)) break;
-            }
-            ungetc(ch, f);
-            cnt--;
+            if (ch >= ' ') break;
+            if ((ch != ' ') && (ch != '\t') && (ch != '\r')
+             && (ch != '\n') && (ch != 0x0b)) break;
+        }
+        ungetc(ch, f);
+        cnt--;
 
-            len = 0;
-            for (;;) {
-                ch = getc(f);
-                if (ch == EOF)
-                    break;
-                ch &= 0xFF;
-                if (! (((ch >= 'a') && (ch <= 'z')) ||
-                       ((ch >= 'A') && (ch <= 'Z')) ||
-                       ((ch >= '0') && (ch <= '9')))) {
-                    ungetc(ch, f);
-                    break;
-                }
-                cnt++;
-                buffer[len++] = ch;
-                if (len >= sizeof(buffer)-1) {
-                    /* emergency */
-                    break;
-                }
+        len = 0;
+        for (;;) {
+            ch = getc(f);
+            if (ch == EOF)
+                break;
+            ch &= 0xFF;
+            if (! (((ch >= 'a') && (ch <= 'z')) ||
+                   ((ch >= 'A') && (ch <= 'Z')) ||
+                   ((ch >= '0') && (ch <= '9')))) {
+                ungetc(ch, f);
+                break;
             }
-            _immediateInterrupt = savInt;
-
-            if (_INST(position) != nil) {
-                _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + cnt);
+            cnt++;
+            buffer[len++] = ch;
+            if (len >= sizeof(buffer)-1) {
+                /* emergency */
+                break;
             }
-            buffer[len] = '\0';
-            if (len != 0) {
-                RETURN ( _MKSTRING(buffer COMMA_CON) );
-            }
-            RETURN ( nil );
+        }
+        _immediateInterrupt = savInt;
+
+        if (_INST(position) != nil) {
+            _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + cnt);
         }
+        buffer[len] = '\0';
+        if (len != 0) {
+            RETURN ( _MKSTRING(buffer COMMA_CON) );
+        }
+        RETURN ( nil );
     }
 %}
 .
@@ -674,35 +680,33 @@
     extern int _immediateInterrupt;
 
     if (_INST(binary) == true) {
-        if (_INST(filePointer) != nil) {
-            if (_INST(mode) != _writeonly) {
-                FILE *f;
-                int first, second;
-                short value;
+        if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
+            FILE *f;
+            int first, second;
+            short value;
 
-                savInt = _immediateInterrupt;
-                _immediateInterrupt = 1;
+            savInt = _immediateInterrupt;
+            _immediateInterrupt = 1;
 
-                f = MKFD(_INST(filePointer));
-                first = getc(f);
-                if (first == EOF) {
-                    _immediateInterrupt = savInt;
-                    RETURN ( nil );
-                }
-                second = getc(f);
+            f = MKFD(_INST(filePointer));
+            first = getc(f);
+            if (first == EOF) {
                 _immediateInterrupt = savInt;
+                RETURN ( nil );
+            }
+            second = getc(f);
+            _immediateInterrupt = savInt;
 
-                if (second == EOF) {
-                    RETURN ( nil );
-                }
-                if (_INST(position) != nil) {
-                    _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 2);
-                }
-                if (msbFlag == true) {
-                    RETURN ( _MKSMALLINT(((first & 0xFF)<<8) | (second & 0xFF)) );
-                }
-                RETURN ( _MKSMALLINT(((second & 0xFF)<<8) | (first & 0xFF)) );
+            if (second == EOF) {
+                RETURN ( nil );
             }
+            if (_INST(position) != nil) {
+                _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 2);
+            }
+            if (msbFlag == true) {
+                RETURN ( _MKSMALLINT(((first & 0xFF)<<8) | (second & 0xFF)) );
+            }
+            RETURN ( _MKSMALLINT(((second & 0xFF)<<8) | (first & 0xFF)) );
         }
     }
 %}
@@ -725,33 +729,31 @@
     extern int _immediateInterrupt;
 
     if (_INST(binary) == true) {
-        if (_INST(filePointer) != nil) {
-            if (_INST(mode) != _writeonly) {
-                FILE *f;
-                int first, second;
+        if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
+            FILE *f;
+            int first, second;
 
-                savInt = _immediateInterrupt;
-                _immediateInterrupt = 1;
-                f = MKFD(_INST(filePointer));
-                first = getc(f);
-                if (first == EOF) {
-                    _immediateInterrupt = savInt;
-                    RETURN ( nil );
-                }
-                second = getc(f);
+            savInt = _immediateInterrupt;
+            _immediateInterrupt = 1;
+            f = MKFD(_INST(filePointer));
+            first = getc(f);
+            if (first == EOF) {
                 _immediateInterrupt = savInt;
+                RETURN ( nil );
+            }
+            second = getc(f);
+            _immediateInterrupt = savInt;
 
-                if (second == EOF) {
-                    RETURN ( nil );
-                }
-                if (_INST(position) != nil) {
-                    _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 2);
-                }
-                if (msbFlag == true) {
-                    RETURN ( _MKSMALLINT(((first & 0xFF)<<8) | (second & 0xFF)) );
-                }
-                RETURN ( _MKSMALLINT(((second & 0xFF)<<8) | (first & 0xFF)) );
+            if (second == EOF) {
+                RETURN ( nil );
             }
+            if (_INST(position) != nil) {
+                _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 2);
+            }
+            if (msbFlag == true) {
+                RETURN ( _MKSMALLINT(((first & 0xFF)<<8) | (second & 0xFF)) );
+            }
+            RETURN ( _MKSMALLINT(((second & 0xFF)<<8) | (first & 0xFF)) );
         }
     }
 %}
@@ -775,54 +777,52 @@
     extern int _immediateInterrupt;
 
     if (_INST(binary) == true) {
-        if (_INST(filePointer) != nil) {
-            if (_INST(mode) != _writeonly) {
-                FILE *f;
-                int first, second, third, fourth;
-                int value;
+        if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
+            FILE *f;
+            int first, second, third, fourth;
+            int value;
 
-                savInt = _immediateInterrupt;
-                _immediateInterrupt = 1;
-                f = MKFD(_INST(filePointer));
-                first = getc(f);
-                if (first == EOF) {
-                    _immediateInterrupt = savInt;
-                    RETURN ( nil );
-                }
-                second = getc(f);
-                if (second == EOF) {
-                    _immediateInterrupt = savInt;
-                    RETURN ( nil );
-                }
-                third = getc(f);
-                if (third == EOF) {
-                    _immediateInterrupt = savInt;
-                    RETURN ( nil );
-                }
-                fourth = getc(f);
+            savInt = _immediateInterrupt;
+            _immediateInterrupt = 1;
+            f = MKFD(_INST(filePointer));
+            first = getc(f);
+            if (first == EOF) {
+                _immediateInterrupt = savInt;
+                RETURN ( nil );
+            }
+            second = getc(f);
+            if (second == EOF) {
+                _immediateInterrupt = savInt;
+                RETURN ( nil );
+            }
+            third = getc(f);
+            if (third == EOF) {
                 _immediateInterrupt = savInt;
-                if (fourth == EOF) {
-                    RETURN ( nil );
-                }
-                if (_INST(position) != nil) {
-                    _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 4);
-                }
-                if (msbFlag == true) {
-                    value = ((first & 0xFF) << 24)
-                            | ((second & 0xFF) << 16)
-                            | ((third & 0xFF) << 8)
-                            | (fourth & 0xFF);
-                } else {
-                    value = ((fourth & 0xFF) << 24)
-                            | ((third & 0xFF) << 16)
-                            | ((second & 0xFF) << 8)
-                            | (first & 0xFF);
-                }
-                if ((value >= _MIN_INT) && (value <= _MAX_INT)) {
-                    RETURN ( _MKSMALLINT(value));
-                }
-                RETURN ( _makeLarge(value) );
+                RETURN ( nil );
+            }
+            fourth = getc(f);
+            _immediateInterrupt = savInt;
+            if (fourth == EOF) {
+                RETURN ( nil );
+            }
+            if (_INST(position) != nil) {
+                _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 4);
             }
+            if (msbFlag == true) {
+                value = ((first & 0xFF) << 24)
+                        | ((second & 0xFF) << 16)
+                        | ((third & 0xFF) << 8)
+                        | (fourth & 0xFF);
+            } else {
+                value = ((fourth & 0xFF) << 24)
+                        | ((third & 0xFF) << 16)
+                        | ((second & 0xFF) << 8)
+                        | (first & 0xFF);
+            }
+            if ((value >= _MIN_INT) && (value <= _MAX_INT)) {
+                RETURN ( _MKSMALLINT(value));
+            }
+            RETURN ( _makeLarge(value) );
         }
     }
 %}
@@ -847,54 +847,52 @@
     extern OBJ _makeULarge();
 
     if (_INST(binary) == true) {
-        if (_INST(filePointer) != nil) {
-            if (_INST(mode) != _writeonly) {
-                FILE *f;
-                int first, second, third, fourth;
-                unsigned int value;
+        if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
+            FILE *f;
+            int first, second, third, fourth;
+            unsigned int value;
 
-                savInt = _immediateInterrupt;
-                _immediateInterrupt = 1;
-                f = MKFD(_INST(filePointer));
-                first = getc(f);
-                if (first == EOF) {
-                    _immediateInterrupt = savInt;
-                    RETURN ( nil );
-                }
-                second = getc(f);
-                if (second == EOF) {
-                    _immediateInterrupt = savInt;
-                    RETURN ( nil );
-                }
-                third = getc(f);
-                if (third == EOF) {
-                    _immediateInterrupt = savInt;
-                    RETURN ( nil );
-                }
-                fourth = getc(f);
+            savInt = _immediateInterrupt;
+            _immediateInterrupt = 1;
+            f = MKFD(_INST(filePointer));
+            first = getc(f);
+            if (first == EOF) {
+                _immediateInterrupt = savInt;
+                RETURN ( nil );
+            }
+            second = getc(f);
+            if (second == EOF) {
+                _immediateInterrupt = savInt;
+                RETURN ( nil );
+            }
+            third = getc(f);
+            if (third == EOF) {
                 _immediateInterrupt = savInt;
-                if (fourth == EOF) {
-                    RETURN ( nil );
-                }
-                if (_INST(position) != nil) {
-                    _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 4);
-                }
-                if (msbFlag == true) {
-                    value = ((first & 0xFF) << 24)
-                            | ((second & 0xFF) << 16)
-                            | ((third & 0xFF) << 8)
-                            | (fourth & 0xFF);
-                } else {
-                    value = ((fourth & 0xFF) << 24)
-                            | ((third & 0xFF) << 16)
-                            | ((second & 0xFF) << 8)
-                            | (first & 0xFF);
-                }
-                if (value <= _MAX_INT) {
-                    RETURN ( _MKSMALLINT(value));
-                }
-                RETURN ( _makeULarge(value) );
+                RETURN ( nil );
+            }
+            fourth = getc(f);
+            _immediateInterrupt = savInt;
+            if (fourth == EOF) {
+                RETURN ( nil );
+            }
+            if (_INST(position) != nil) {
+                _INST(position) = _MKSMALLINT(_intVal(_INST(position)) + 4);
             }
+            if (msbFlag == true) {
+                value = ((first & 0xFF) << 24)
+                        | ((second & 0xFF) << 16)
+                        | ((third & 0xFF) << 8)
+                        | (fourth & 0xFF);
+            } else {
+                value = ((fourth & 0xFF) << 24)
+                        | ((third & 0xFF) << 16)
+                        | ((second & 0xFF) << 8)
+                        | (first & 0xFF);
+            }
+            if (value <= _MAX_INT) {
+                RETURN ( _MKSMALLINT(value));
+            }
+            RETURN ( _makeULarge(value) );
         }
     }
 %}
@@ -929,30 +927,36 @@
     int cnt, savInt;
     extern int _immediateInterrupt;
 
-    if (_INST(filePointer) != nil) {
-        if (_INST(mode) != _readonly) {
-            if (_isSmallInteger(aByteValue)) {
-                c = _intVal(aByteValue);
-                f = MKFD(_INST(filePointer));
-                savInt = _immediateInterrupt;
-                _immediateInterrupt = 1;
+    if ((_INST(filePointer) != nil) && (_INST(mode) != _readonly)) {
+        if (_isSmallInteger(aByteValue)) {
+            c = _intVal(aByteValue);
+            f = MKFD(_INST(filePointer));
+            savInt = _immediateInterrupt;
+            _immediateInterrupt = 1;
+#ifdef OLD
+            if (_INST(buffered) == false) {
+                cnt = write(fileno(f), &c, 1);
+            } else 
+#endif
+            {
+                if (_INST(mode) == _readwrite)
+                    fseek(f, 0L, 1); /* needed in stdio */
+                cnt = fwrite(&c, 1, 1, f);
+#ifndef OLD
                 if (_INST(buffered) == false) {
-                    cnt = write(fileno(f), &c, 1);
-                } else {
-                    if (_INST(mode) == _readwrite)
-                        fseek(f, 0L, 1); /* needed in stdio */
-                    cnt = fwrite(&c, 1, 1, f);
+                    fflush(f);
                 }
-                _immediateInterrupt = savInt;
-                if (cnt == 1) {
-                    pos = _INST(position);
-                    if (pos != nil)
-                        _INST(position) = _MKSMALLINT(_intVal(pos) + 1);
-                    RETURN ( self );
-                }
-                ErrorNumber = _MKSMALLINT(errno);
-                RETURN (nil);
+#endif
             }
+            _immediateInterrupt = savInt;
+            if (cnt == 1) {
+                pos = _INST(position);
+                if (pos != nil)
+                    _INST(position) = _MKSMALLINT(_intVal(pos) + 1);
+                RETURN ( self );
+            }
+            ErrorNumber = _MKSMALLINT(errno);
+            RETURN (nil);
         }
     }
 %}
@@ -999,13 +1003,21 @@
                     cp = (char *)_InstPtr(anObject) + OHDR_SIZE + offs;
                     savInt = _immediateInterrupt;
                     _immediateInterrupt = 1;
+#ifdef OLD
                     if (_INST(buffered) == false) {
                         cnt = write(fileno(f), cp, cnt);
-                    } else {
+                    } else
+#endif
+                    {
                         if (_INST(mode) == _readwrite)
                             fseek(f, 0L, 1); /* needed in stdio */
                         cnt = fwrite(cp, 1, cnt, f);
                     }
+#ifndef OLD
+                    if (_INST(buffered) == false) {
+                        fflush(f);
+                    }
+#endif
                     _immediateInterrupt = savInt;
                     if (cnt >= 0) {
                         pos = _INST(position);
@@ -1067,13 +1079,21 @@
                     f = MKFD(_INST(filePointer));
                     savInt = _immediateInterrupt;
                     _immediateInterrupt = 1;
+#ifdef OLD
                     if (_INST(buffered) == false) {
                         cnt = write(fileno(f), bytes, 2);
-                    } else {
+                    } else 
+#endif
+                    {
                         if (_INST(mode) == _readwrite)
                             fseek(f, 0L, 1); /* needed in stdio */
                         cnt = fwrite(bytes, 1, 2, f);
                     }
+#ifndef OLD
+                    if (_INST(buffered) == false) {
+                        fflush(f);
+                    }
+#endif
                     _immediateInterrupt = savInt;
                     if (cnt == 2) {
                         if (_INST(position) != nil) {
@@ -1131,11 +1151,19 @@
                     f = MKFD(_INST(filePointer));
                     savInt = _immediateInterrupt;
                     _immediateInterrupt = 1;
+#ifdef OLD
                     if (_INST(buffered) == false) {
                         cnt = write(fileno(f), bytes, 4);
-                    } else {
+                    } else 
+#endif
+                    {
                         cnt = fwrite(bytes, 1, 4, f);
                     }
+#ifndef OLD
+                    if (_INST(buffered) == false) {
+                        fflush(f);
+                    }
+#endif
                     _immediateInterrupt = savInt;
                     if (cnt == 4) {
                         if (_INST(position) != nil) {
@@ -1155,7 +1183,7 @@
     (mode == #readonly) ifTrue:[^ self errorReadOnly].
     binary ifFalse:[^ self errorNotBinary].
 
-    (aNumber isKindOf:Integer) ifTrue:[
+    aNumber isInteger ifTrue:[
         (self nextShortPut:(aNumber // 16r10000) MSB:msbFlag) isNil ifTrue:[^ nil].
         ^ self nextShortPut:(aNumber \\ 16r10000) MSB:msbFlag.
     ].
@@ -1179,7 +1207,10 @@
 
     if (_INST(filePointer) != nil) {
         if (_INST(mode) != _writeonly) {
-            if (_INST(buffered) == true) {
+#ifdef OLD
+            if (_INST(buffered) == true) 
+#endif
+            {
                 f = MKFD(_INST(filePointer));
                 savInt = _immediateInterrupt;
                 _immediateInterrupt = 1;
@@ -1223,18 +1254,21 @@
             f = MKFD(_INST(filePointer));
             savInt = _immediateInterrupt;
             _immediateInterrupt = 1;
-	    do {
+            do {
+#ifdef OLD
                 if (_INST(buffered) == false) {
                     if (read(fileno(f), &ch, 1) != 1)
                         c = EOF;
                     else
                         c = ch;
-                } else {
+                } else 
+#endif
+                {
                     if (_INST(mode) == _readwrite)
                         fseek(f, 0L, 1); /* needed in stdio */
                     c = getc(f);
                 }
-	    } while ((c < 0) && (errno == EINTR));
+            } while ((c < 0) && (errno == EINTR));
 
             _immediateInterrupt = savInt;
             if (c != EOF) {
@@ -1283,12 +1317,10 @@
 
 %{  /* NOCONTEXT */
 
-    FILE *f;
-
     if (_INST(filePointer) != nil) {
         if (_INST(mode) != _readonly) {
             if (_INST(buffered) == true) {
-                fflush(f);
+                fflush( MKFD(_INST(filePointer)) );
             }
         }
     }
@@ -1319,13 +1351,21 @@
 
                     savInt = _immediateInterrupt;
                     _immediateInterrupt = 1;
+#ifdef OLD
                     if (_INST(buffered) == false) {
                         cnt = write(fileno(f), &c, 1);
-                    } else { 
+                    } else 
+#endif
+                    { 
                         if (_INST(mode) == _readwrite)
                             fseek(f, 0L, 1); /* needed in stdio */
                         cnt = fwrite(&c, 1, 1, f);
                     }
+#ifndef OLD
+                    if (_INST(buffered) == false) {
+                        fflush(f);
+                    }
+#endif
                     _immediateInterrupt = savInt;
                     if (cnt == 1) {
                         pos = _INST(position);
@@ -1385,13 +1425,21 @@
 
             savInt = _immediateInterrupt;
             _immediateInterrupt = 1;
+#ifdef OLD
             if (_INST(buffered) == false) {
                 cnt = write(fileno(f), cp, len);
-            } else { 
+            } else 
+#endif
+            { 
                 if (_INST(mode) == _readwrite)
                     fseek(f, 0L, 1); /* needed in stdio */
                 cnt = fwrite(cp, 1, len, f);
             }
+#ifndef OLD
+                    if (_INST(buffered) == false) {
+                        fflush(f);
+                    }
+#endif
             _immediateInterrupt = savInt;
             if (cnt == len) {
                 pos = _INST(position);
@@ -1454,13 +1502,21 @@
                 savInt = _immediateInterrupt;
                 _immediateInterrupt = 1;
                 len = index2 - index1 + 1;
+#ifdef OLD
                 if (_INST(buffered) == false) {
                     cnt = write(fileno(f), cp + index1 - 1, len);
-                } else { 
+                } else 
+#endif
+                { 
                     if (_INST(mode) == _readwrite)
                         fseek(f, 0L, 1); /* needed in stdio */
                     cnt = fwrite(cp + index1 - 1, 1, len, f);
                 }
+#ifndef OLD
+                    if (_INST(buffered) == false) {
+                        fflush(f);
+                    }
+#endif
                 _immediateInterrupt = savInt;
                 if (cnt == len) {
                     if (_INST(position) != nil) {
@@ -1500,13 +1556,21 @@
 
             savInt = _immediateInterrupt;
             _immediateInterrupt = 1;
+#ifdef OLD
             if (_INST(buffered) == false) {
                 cnt = write(fileno(f), "\n", 1);
-            } else { 
+            } else 
+#endif
+            { 
                 if (_INST(mode) == _readwrite)
                     fseek(f, 0L, 1); /* needed in stdio */
                 cnt = fwrite("\n", 1, 1, f);
             }
+#ifndef OLD
+                    if (_INST(buffered) == false) {
+                        fflush(f);
+                    }
+#endif
             _immediateInterrupt = savInt;
             if (cnt == 1) {
                 if (_INST(position) != nil) {
@@ -1533,32 +1597,42 @@
      If the previous-to-last character is a cr, this is also removed,
      so its possible to read alien (i.e. ms-dos) text as well."
 
-%{  /* NOCONTEXT */
+%{  /* STACK:2000 */
 
     FILE *f;
     int len;
-    char buffer[1024*8];
+    char buffer[1024];
     extern int _immediateInterrupt;
     int savInt;
     char *rslt;
     extern errno;
+    int fd;
 
-    if ((_INST(filePointer) != nil) && (_INST(filePointer) != _writeonly)) {
+    if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
         if (_INST(binary) != true) {
             f = MKFD(_INST(filePointer));
             savInt = _immediateInterrupt;
             _immediateInterrupt = 1;
             buffer[0] = 0;
+
+#ifndef OLD
+            if (_INST(mode) == _readwrite)
+                fseek(f, 0L, 1); /* needed in stdio */
+#endif
+#ifdef OLD
             if (_INST(buffered) == true) {
-		do {
+#endif
+                do {
                     rslt = fgets(buffer, sizeof(buffer), f);
-	        } while ((rslt == NULL) && (errno == EINTR));
+                } while ((rslt == NULL) && (errno == EINTR));
+#ifdef OLD
             } else {
                 rslt = buffer;
+                fd = fileno(f);
                 for (;;) {
-		    do {
-                        len = read(fileno(f), rslt, 1);
-		    } while ((len < 0) && (errno == EINTR));
+                    do {
+                        len = read(fd, rslt, 1);
+                    } while ((len < 0) && (errno == EINTR));
                     if (len <= 0) {
                         if (rslt == buffer) {
                             rslt = NULL;
@@ -1578,6 +1652,7 @@
                     }
                 }
             }
+#endif
             _immediateInterrupt = savInt;
             if (rslt != NULL) {
                 len = strlen(buffer);
@@ -1626,19 +1701,30 @@
 
                 savInt = _immediateInterrupt;
                 _immediateInterrupt = 1;
+#ifdef OLD
                 if (_INST(buffered) == false) {
                     cnt = write(fileno(f), s, len);
-                } else { 
+                } else 
+#endif
+                { 
                     if (_INST(mode) == _readwrite)
                         fseek(f, 0L, 1); /* needed in stdio */
                     cnt = fwrite(s, 1, len, f);
                 }
                 if (cnt == len) {
+#ifdef OLD
                     if (_INST(buffered) == false) {
                         cnt = write(fileno(f), "\n", 1);
-                    } else { 
+                    } else 
+#endif
+                    { 
                         cnt = fwrite("\n", 1, 1, f);
                     }
+#ifndef OLD
+                    if (_INST(buffered) == false) {
+                        fflush(f);
+                    }
+#endif
                     if (cnt == 1) {
                         pos = _INST(position);
                         if (pos != nil) {
@@ -1674,15 +1760,20 @@
     filePointer isNil ifTrue:[^ self errorNotOpen].
     srcFilePointer := aStream filePointer.
     srcFilePointer isNil ifTrue:[^ aStream errorNotOpen].
-%{
+
+%{  /* STACK:2000 */
     FILE *dst, *src;
     char *matchString;
     int matchLen = 0;
-    char buffer[1024*8];
+    char buffer[1024];
     extern int _immediateInterrupt;
     int savInt;
 
-    if (_isSmallInteger(srcFilePointer) && (_INST(buffered) == true)) {
+    if (_isSmallInteger(srcFilePointer) 
+#ifdef OLD
+     && (_INST(buffered) == true)
+#endif
+    ) {
         if ((aStringOrNil == nil) || _isString(aStringOrNil)) {
             if (aStringOrNil != nil) {
                 matchString = (char *) _stringVal(aStringOrNil);
@@ -1695,6 +1786,11 @@
             for (;;) {
                 if (fgets(buffer, sizeof(buffer), src) == NULL) break;
                 if (fputs(buffer, dst) == EOF) break;
+#ifndef OLD
+                    if (_INST(buffered) == false) {
+                        fflush(dst);
+                    }
+#endif
                 if (matchLen) {
                     if (strncmp(matchString, buffer, matchLen) == 0) 
                         break;
@@ -1719,10 +1815,11 @@
     (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
     filePointer isNil ifTrue:[^ self errorNotOpen].
     binary ifTrue:[^ self errorBinary].
-%{
+
+%{  /* STACK: 2000 */
     FILE *f;
     int l;
-    char buffer[1024*8];
+    char buffer[1024];
     char *cp;
     char *matchString;
     int  firstpos, lastpos;
@@ -1736,12 +1833,14 @@
         f = MKFD(_INST(filePointer));
         firstpos = ftell(f);
         for (;;) {
+            if (_INST(mode) == _readwrite)
+                fseek(f, 0L, 1); /* needed in stdio */
             lastpos = ftell(f);
             savInt = _immediateInterrupt;
             _immediateInterrupt = 1;
-	    do {
+            do {
                 cp = fgets(buffer, sizeof(buffer), f);
-	    } while ((cp == NULL) && (errno == EINTR));
+            } while ((cp == NULL) && (errno == EINTR));
             _immediateInterrupt = savInt;
             if (cp == NULL) {
                 fseek(f, firstpos, 0);
@@ -1824,9 +1923,10 @@
     sema := Semaphore new.
 
     [OperatingSystem readCheck:fd] whileFalse:[
-        Processor enableIOSemaphore:sema on:fd.
+        Processor enableSemaphore:sema onInput:fd.
+        Processor currentProcess state:#ioWait.
         sema wait.
-        Processor disableIOSemaphore:sema
+        Processor disableSemaphore:sema
     ]
 !
 
@@ -1842,9 +1942,10 @@
     sema := Semaphore new.
 
     [OperatingSystem writeCheck:fd] whileFalse:[
-        Processor enableIOSemaphore:sema on:fd.
+        Processor enableSemaphore:sema onOutput:fd.
+        Processor currentProcess state:#ioWait.
         sema wait.
-        Processor disableIOSemaphore:sema
+        Processor disableSemaphore:sema
     ]
 ! !
      
@@ -1919,6 +2020,8 @@
                 savInt = _immediateInterrupt;
                 _immediateInterrupt = 1;
                 _INST(position) = nil;
+                if (_INST(mode) == _readwrite)
+                    fseek(f, 0L, 1); /* needed in stdio */
                 for (;;) {
                     c = getc(f);
                     if (c == EOF) {
@@ -1944,10 +2047,10 @@
     "read the next line (characters up to newline) skip only;
      return nil if EOF reached. Not allowed in binary mode."
 
-%{  /* NOCONTEXT */
+%{  /* STACK:2000 */
 
     FILE *f;
-    char buffer[1024*8];
+    char buffer[1024];
     extern int _immediateInterrupt;
     int savInt;
 
@@ -1956,6 +2059,8 @@
             f = MKFD(_INST(filePointer));
             savInt = _immediateInterrupt;
             _immediateInterrupt = 1;
+            if (_INST(mode) == _readwrite)
+                fseek(f, 0L, 1); /* needed in stdio */
             if (fgets(buffer, sizeof(buffer), f) != NULL) {
                 _immediateInterrupt = savInt;
                 RETURN ( self );
@@ -2016,6 +2121,8 @@
     if ((_INST(filePointer) != nil) && (_INST(mode) != _writeonly)) {
         if (_INST(binary) != true) {
             f = MKFD(_INST(filePointer));
+            if (_INST(mode) == _readwrite)
+                fseek(f, 0L, 1); /* needed in stdio */
             while (1) {
                 if (feof(f)) {
                     RETURN ( nil );
@@ -2066,6 +2173,8 @@
         if (_INST(binary) != true) {
             f = MKFD(_INST(filePointer));
             while (1) {
+                if (_INST(mode) == _readwrite)
+                    fseek(f, 0L, 1); /* needed in stdio */
                 if (feof(f)) {
                     RETURN ( nil );
                 }
@@ -2120,6 +2229,8 @@
     int savInt;
 
     f = MKFD(_INST(filePointer));
+    if (_INST(mode) == _readwrite)
+        fseek(f, 0L, 1); /* needed in stdio */
     /*
      * skip spaces
      */
@@ -2130,9 +2241,9 @@
             _immediateInterrupt = savInt;
             RETURN ( nil );
         }
-	do {
+        do {
             c = getc(f);
-	} while ((c < 0) && (errno == EINTR));
+        } while ((c < 0) && (errno == EINTR));
         switch (c) {
             case ' ':
             case '\t':
@@ -2168,9 +2279,9 @@
             buffer = newBuffer;
             currSize = currSize * 2;
         }
-	do {
+        do {
             c = getc(f);
-	} while (c < 0 && (errno == EINTR));
+        } while (c < 0 && (errno == EINTR));
         if (c == '%') {
             peekC = getc(f);
             ungetc(peekC, f);