ExternalStream.st
changeset 10361 ee6a8af317ce
parent 10352 f2e9bb8906db
child 10450 bb40b56ed6b6
--- a/ExternalStream.st	Wed Jan 24 17:49:57 2007 +0100
+++ b/ExternalStream.st	Wed Jan 24 17:57:22 2007 +0100
@@ -191,7 +191,7 @@
 # define DEBUGBUFFER(buf)  \
     if (((char *)(buf) >= __survStartPtr) \
      && ((char *)(buf) < __survEndPtr)) { \
-	__fatal0("read into survivor\n"); \
+        __fatal0("read into survivor\n"); \
     }
 
 #else
@@ -221,46 +221,46 @@
 # ifdef __BORLANDC__
 #  define READ(ret,f, cp, n) \
       { int __res;\
-	HANDLE h; \
-	h = _get_osfhandle(fileno(f)); \
-	if (ioctlsocket((SOCKET)h,FIONREAD,&__res)==0) \
-	  (ret) = __STX_WSA_NOINT_CALL4("recv", recv, h, (cp), (n), 0);\
-	else \
-	  (ret) = __STX_C_NOINT_CALL3("_rtl_read", _rtl_read, fileno(f), (cp), (n));\
+        HANDLE h; \
+        h = _get_osfhandle(fileno(f)); \
+        if (ioctlsocket((SOCKET)h,FIONREAD,&__res)==0) \
+          (ret) = __STX_WSA_NOINT_CALL4("recv", recv, h, (cp), (n), 0);\
+        else \
+          (ret) = __STX_C_NOINT_CALL3("_rtl_read", _rtl_read, fileno(f), (cp), (n));\
       }
 #  define WRITE(ret,f, cp, n) \
       { int __res;\
-	HANDLE h; \
-	h = _get_osfhandle(fileno(f)); \
-	if (ioctlsocket((SOCKET)h,FIONREAD,&__res)==0) \
-	  (ret) = __STX_WSA_NOINT_CALL4("send", send, h, (cp), (n), 0);\
-	else \
-	  (ret) = __STX_C_NOINT_CALL3("_rtl_write", _rtl_write, fileno(f), (cp), (n));\
+        HANDLE h; \
+        h = _get_osfhandle(fileno(f)); \
+        if (ioctlsocket((SOCKET)h,FIONREAD,&__res)==0) \
+          (ret) = __STX_WSA_NOINT_CALL4("send", send, h, (cp), (n), 0);\
+        else \
+          (ret) = __STX_C_NOINT_CALL3("_rtl_write", _rtl_write, fileno(f), (cp), (n));\
       }
 # else /* MSC */
 #  define READ(ret,f, cp, n) \
       { int __res;\
-	HANDLE h; \
-	h = _get_osfhandle(fileno(f)); \
-	if (ioctlsocket((SOCKET)h,FIONREAD,&__res)==0) \
-	  (ret) = __STX_WSA_NOINT_CALL4("recv", recv, h, (cp), (n), 0);\
-	else { \
-	  (ret) = __STX_API_NOINT_CALL5("ReadFile", ReadFile, h, (cp), (n), &__res, 0);\
-	  if (ret) \
-	    ret = __res; \
-	} \
+        HANDLE h; \
+        h = _get_osfhandle(fileno(f)); \
+        if (ioctlsocket((SOCKET)h,FIONREAD,&__res)==0) \
+          (ret) = __STX_WSA_NOINT_CALL4("recv", recv, h, (cp), (n), 0);\
+        else { \
+          (ret) = __STX_API_NOINT_CALL5("ReadFile", ReadFile, h, (cp), (n), &__res, 0);\
+          if (ret) \
+            ret = __res; \
+        } \
       }
 #  define WRITE(ret,f, cp, n) \
       { int __res;\
-	HANDLE h; \
-	h = _get_osfhandle(fileno(f)); \
-	if (ioctlsocket((SOCKET)h,FIONREAD,&__res)==0) \
-	  (ret) = __STX_WSA_NOINT_CALL4("send", send, h, (cp), (n), 0);\
-	else {\
-	  (ret) = __STX_API_NOINT_CALL5("WriteFile", WriteFile, h, (cp), (n), &__res, 0);\
-	  if (ret) \
-	    ret = __res; \
-	} \
+        HANDLE h; \
+        h = _get_osfhandle(fileno(f)); \
+        if (ioctlsocket((SOCKET)h,FIONREAD,&__res)==0) \
+          (ret) = __STX_WSA_NOINT_CALL4("send", send, h, (cp), (n), 0);\
+        else {\
+          (ret) = __STX_API_NOINT_CALL5("WriteFile", WriteFile, h, (cp), (n), &__res, 0);\
+          if (ret) \
+            ret = __res; \
+        } \
       }
 # endif /* MSC */
 
@@ -272,56 +272,56 @@
 # define __READING__(f)                          \
     if ((__INST(didWrite) != false)              \
      && (__INST(mode) == @symbol(readwrite))) {  \
-	__INST(didWrite) = false;                \
-	OPT_FSEEK(f, 0L, SEEK_CUR); /* needed in stdio */  \
+        __INST(didWrite) = false;                \
+        OPT_FSEEK(f, 0L, SEEK_CUR); /* needed in stdio */  \
     }
 
 # define __WRITING__(f)                          \
     if ((__INST(didWrite) != true)               \
      && (__INST(mode) == @symbol(readwrite))) {  \
-	__INST(didWrite) = true;                 \
-	OPT_FSEEK(f, 0L, SEEK_CUR); /* needed in stdio */  \
+        __INST(didWrite) = true;                 \
+        OPT_FSEEK(f, 0L, SEEK_CUR); /* needed in stdio */  \
     }
 
 # define __UNGETC__(c, f, isBuffered)                   \
     if (isBuffered) {                                   \
-	ungetc((c), (f));                               \
+        ungetc((c), (f));                               \
     } else {                                            \
       __INST(readAhead) = __mkSmallInteger((c));            \
     }
 
 # define __READBYTE__(ret, f, buf, isBuffered)          \
     if (isBuffered) {                                   \
-	for (;;) {                                      \
-	    CLEAR_ERRNO;                                \
-	    (ret) = getc(f);                            \
-	    if ((ret) >= 0) {                           \
-		*(buf) = (ret);                         \
-		(ret) = 1;                              \
-	    } else if (ferror(f)) {                     \
-		if (__threadErrno == EINTR) {           \
-		    clearerr(f);                        \
-		    continue;                           \
-		}                                       \
-	    } else {                                    \
-		(ret) = 0;                              \
-	    }                                           \
-	    break;                                      \
-	}                                               \
+        for (;;) {                                      \
+            CLEAR_ERRNO;                                \
+            (ret) = getc(f);                            \
+            if ((ret) >= 0) {                           \
+                *(buf) = (ret);                         \
+                (ret) = 1;                              \
+            } else if (ferror(f)) {                     \
+                if (__threadErrno == EINTR) {           \
+                    clearerr(f);                        \
+                    continue;                           \
+                }                                       \
+            } else {                                    \
+                (ret) = 0;                              \
+            }                                           \
+            break;                                      \
+        }                                               \
     } else {                                            \
-	OBJ rA = __INST(readAhead);                     \
-	if (rA != nil) {                                \
-	    *(buf) = (char)__intVal(rA);                \
-	    __INST(readAhead) = nil;                    \
-	    (ret) = 1;                                  \
-	} else {                                        \
-	    for (;;) {                                  \
-		CLEAR_ERRNO;                            \
-		READ(ret,f, buf, 1);                    \
-		if ((ret) >= 0 || __threadErrno != EINTR)       \
-		    break;                              \
-	    }                                           \
-	}                                               \
+        OBJ rA = __INST(readAhead);                     \
+        if (rA != nil) {                                \
+            *(buf) = (char)__intVal(rA);                \
+            __INST(readAhead) = nil;                    \
+            (ret) = 1;                                  \
+        } else {                                        \
+            for (;;) {                                  \
+                CLEAR_ERRNO;                            \
+                READ(ret,f, buf, 1);                    \
+                if ((ret) >= 0 || __threadErrno != EINTR)       \
+                    break;                              \
+            }                                           \
+        }                                               \
     }
 
   /*
@@ -331,118 +331,118 @@
 # define __READBYTES__(ret, f, buf, cnt, isBuffered)    \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	int __offs = 0;                                 \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    (ret) = getc(f);                            \
-	    if ((ret) < 0) {                            \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			clearerr(f);                    \
-			continue;                       \
-		    }                                   \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    (buf)[__offs++] = (ret);                    \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0;                                 \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            (ret) = getc(f);                            \
+            if ((ret) < 0) {                            \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        clearerr(f);                    \
+                        continue;                       \
+                    }                                   \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+                break;                                  \
+            }                                           \
+            (buf)[__offs++] = (ret);                    \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	int __offs = 0;                                 \
-							\
-	while (__offs < (cnt)) {                        \
-	    OBJ rA = __INST(readAhead);                 \
-	    if (rA != nil) {                            \
-		(buf)[__offs] = __intVal(rA);           \
-		__INST(readAhead) = nil;                \
-		(ret) = 1;                              \
-	    } else {                                    \
-		CLEAR_ERRNO;                            \
-		READ(ret,f, (buf)+__offs, (cnt)-__offs); \
-		if ((ret) <= 0) {                       \
-		    if ((ret) < 0 && __threadErrno == EINTR) {  \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		}                                       \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0;                                 \
+                                                        \
+        while (__offs < (cnt)) {                        \
+            OBJ rA = __INST(readAhead);                 \
+            if (rA != nil) {                            \
+                (buf)[__offs] = __intVal(rA);           \
+                __INST(readAhead) = nil;                \
+                (ret) = 1;                              \
+            } else {                                    \
+                CLEAR_ERRNO;                            \
+                READ(ret,f, (buf)+__offs, (cnt)-__offs); \
+                if ((ret) <= 0) {                       \
+                    if ((ret) < 0 && __threadErrno == EINTR) {  \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                }                                       \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
    }
 
 # define __READAVAILBYTES__(ret, f, buf, cnt, isBuffered) \
   {                                                     \
     int __offs = 0;                                     \
     int oldFlags;                                       \
-							\
+                                                        \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    (ret) = getc(f);                            \
-	    if ((ret) < 0) {                            \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			clearerr(f);                    \
-			continue;                       \
-		    }                                   \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    (buf)[__offs++] = (ret);                    \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            (ret) = getc(f);                            \
+            if ((ret) < 0) {                            \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        clearerr(f);                    \
+                        continue;                       \
+                    }                                   \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+                break;                                  \
+            }                                           \
+            (buf)[__offs++] = (ret);                    \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	while (__offs < (cnt)) {                        \
-	    OBJ rA = __INST(readAhead);                 \
-	    if (rA != nil) {                            \
-		(buf)[__offs] = __intVal(rA);           \
-		__INST(readAhead) = nil;                \
-		(ret) = 1;                              \
-		__offs += (ret);                        \
-		continue;                               \
-	    }                                           \
-	    CLEAR_ERRNO;                                \
-	    {                                           \
-	      int res;                                  \
-	      if (ioctlsocket((SOCKET)_get_osfhandle(fileno(f)),FIONREAD,&res)==0) { \
-		  if (res > 0) {                        \
-		      if (res > ((cnt)-__offs))         \
-			res = (cnt)-__offs;             \
-		      READ(ret,f, (buf)+__offs, res);   \
-		  } else {                              \
-		      (ret) = 0;                        \
-		  }                                     \
-	      } else if (PeekNamedPipe((HANDLE)_get_osfhandle(fileno(f)),0, 0,0,&res,0)) { \
-		  if (res > 0) {                        \
-		      if (res > ((cnt)-__offs))         \
-			res = (cnt)-__offs;             \
-		      READ(ret,f, (buf)+__offs, res);   \
-		  } else                                \
-		      ret = 0;                          \
-	      } else {                                  \
-		  READ(ret,f, (buf)+__offs, (cnt)-__offs); \
-	      }                                         \
-	    }                                           \
-	    if ((ret) < 0) {                            \
-		if (__threadErrno == EINTR) {                   \
-		    continue;                           \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    __offs += (ret);                            \
-	    break;                                      \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            OBJ rA = __INST(readAhead);                 \
+            if (rA != nil) {                            \
+                (buf)[__offs] = __intVal(rA);           \
+                __INST(readAhead) = nil;                \
+                (ret) = 1;                              \
+                __offs += (ret);                        \
+                continue;                               \
+            }                                           \
+            CLEAR_ERRNO;                                \
+            {                                           \
+              int res;                                  \
+              if (ioctlsocket((SOCKET)_get_osfhandle(fileno(f)),FIONREAD,&res)==0) { \
+                  if (res > 0) {                        \
+                      if (res > ((cnt)-__offs))         \
+                        res = (cnt)-__offs;             \
+                      READ(ret,f, (buf)+__offs, res);   \
+                  } else {                              \
+                      (ret) = 0;                        \
+                  }                                     \
+              } else if (PeekNamedPipe((HANDLE)_get_osfhandle(fileno(f)),0, 0,0,&res,0)) { \
+                  if (res > 0) {                        \
+                      if (res > ((cnt)-__offs))         \
+                        res = (cnt)-__offs;             \
+                      READ(ret,f, (buf)+__offs, res);   \
+                  } else                                \
+                      ret = 0;                          \
+              } else {                                  \
+                  READ(ret,f, (buf)+__offs, (cnt)-__offs); \
+              }                                         \
+            }                                           \
+            if ((ret) < 0) {                            \
+                if (__threadErrno == EINTR) {                   \
+                    continue;                           \
+                }                                       \
+                break;                                  \
+            }                                           \
+            __offs += (ret);                            \
+            break;                                      \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
   }
 
@@ -453,63 +453,63 @@
     int __ooffs = obj_offs;                             \
     int __offs = 0;                                     \
     char *buf = (char *)(obj);                          \
-							\
+                                                        \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    (ret) = getc(f);                            \
-	    if ((ret) < 0) {                            \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			clearerr(f);                    \
-			/* refetch */                   \
-			buf = (char *)(obj);            \
-			continue;                       \
-		    }                                   \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    (buf)[__ooffs+__offs] = (ret);              \
-	    __offs++;                                   \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            (ret) = getc(f);                            \
+            if ((ret) < 0) {                            \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        clearerr(f);                    \
+                        /* refetch */                   \
+                        buf = (char *)(obj);            \
+                        continue;                       \
+                    }                                   \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+                break;                                  \
+            }                                           \
+            (buf)[__ooffs+__offs] = (ret);              \
+            __offs++;                                   \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	while (__offs < (cnt)) {                        \
-	    char __buf[IO_BUFFER_SIZE];                 \
-	    OBJ rA = __INST(readAhead);                 \
-	    if (rA != nil) {                            \
-		(buf)[__ooffs+__offs] = __intVal(rA);   \
-		__INST(readAhead) = nil;                \
-		(ret) = 1;                              \
-	    } else {                                    \
-		int l;                                  \
-		CLEAR_ERRNO;                            \
-		l = (cnt)-__offs;                       \
-		if ( l > IO_BUFFER_SIZE)                \
-		  l = IO_BUFFER_SIZE;                   \
-		READ(ret,f, __buf, l);                  \
-		if ((ret) <= 0) {                       \
-		    if ((ret) < 0 && __threadErrno == EINTR) {  \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		}                                       \
-	    }                                           \
-	    if( (ret) > 0 ) {                               \
-		/* refetch */                               \
-		buf = (volatile char *)(obj);               \
-		memcpy((buf)+__ooffs+__offs,__buf,(ret));   \
-		__offs += (ret);                            \
-	    } else {                                        \
-		(ret) = 0;                                  \
-	    }                                               \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            char __buf[IO_BUFFER_SIZE];                 \
+            OBJ rA = __INST(readAhead);                 \
+            if (rA != nil) {                            \
+                (buf)[__ooffs+__offs] = __intVal(rA);   \
+                __INST(readAhead) = nil;                \
+                (ret) = 1;                              \
+            } else {                                    \
+                int l;                                  \
+                CLEAR_ERRNO;                            \
+                l = (cnt)-__offs;                       \
+                if ( l > IO_BUFFER_SIZE)                \
+                  l = IO_BUFFER_SIZE;                   \
+                READ(ret,f, __buf, l);                  \
+                if ((ret) <= 0) {                       \
+                    if ((ret) < 0 && __threadErrno == EINTR) {  \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                }                                       \
+            }                                           \
+            if( (ret) > 0 ) {                               \
+                /* refetch */                               \
+                buf = (volatile char *)(obj);               \
+                memcpy((buf)+__ooffs+__offs,__buf,(ret));   \
+                __offs += (ret);                            \
+            } else {                                        \
+                (ret) = 0;                                  \
+            }                                               \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
   }
 
@@ -518,147 +518,147 @@
     int __ooffs = obj_offs;                          \
     int __offs = 0;                                  \
     char *buf = (char *)(obj);                       \
-						     \
+                                                     \
     (ret) = 0;                                       \
     if (isBuffered) {                                \
-	while (__offs < (cnt)) {                     \
-	    CLEAR_ERRNO;                             \
-	    (ret) = getc(f);                         \
-	    if ((ret) < 0) {                         \
-		if (ferror(f)) {                     \
-		    if (__threadErrno == EINTR) {            \
-			clearerr(f);                 \
-			/* refetch */                \
-			buf = (char *)(obj);         \
-			continue;                    \
-		    }                                \
-		} else {                             \
-		    (ret) = 0;                       \
-		}                                    \
-		break;                               \
-	    }                                        \
-	    (buf)[__ooffs+__offs] = (ret);           \
-	    __offs++;                                \
-	}                                            \
-	if (__offs > 0)                              \
-	    (ret) = __offs;                          \
+        while (__offs < (cnt)) {                     \
+            CLEAR_ERRNO;                             \
+            (ret) = getc(f);                         \
+            if ((ret) < 0) {                         \
+                if (ferror(f)) {                     \
+                    if (__threadErrno == EINTR) {            \
+                        clearerr(f);                 \
+                        /* refetch */                \
+                        buf = (char *)(obj);         \
+                        continue;                    \
+                    }                                \
+                } else {                             \
+                    (ret) = 0;                       \
+                }                                    \
+                break;                               \
+            }                                        \
+            (buf)[__ooffs+__offs] = (ret);           \
+            __offs++;                                \
+        }                                            \
+        if (__offs > 0)                              \
+            (ret) = __offs;                          \
     } else {                                         \
-	while (__offs < (cnt)) {                     \
-	    char __buf[IO_BUFFER_SIZE];              \
-	    OBJ rA = __INST(readAhead);              \
-	    if (rA != nil) {                         \
-		(buf)[__ooffs+__offs] = __intVal(rA);\
-		__INST(readAhead) = nil;             \
-		(ret) = 1;                           \
-		__offs += (ret);                     \
-		continue;                            \
-	    }                                        \
-	    {                                        \
-		int l;                               \
-		int res;                             \
-		CLEAR_ERRNO;                         \
-		l = (cnt)-__offs;                    \
-		if ( l > IO_BUFFER_SIZE)             \
-		    l = IO_BUFFER_SIZE;              \
-		if (ioctlsocket((SOCKET)_get_osfhandle(fileno(f)),FIONREAD,&res)==0) { \
-		if (res > 0) {                       \
-			if (res > l)                 \
-			    res = l;                 \
-			READ(ret,f, __buf, res);     \
-		    } else {                         \
-			(ret) = 0;                   \
-		    }                                \
-		} else if (PeekNamedPipe((HANDLE)_get_osfhandle(fileno(f)),0, 0,0,&res,0)) { \
-		    if (res > 0) {                   \
-			if (res > l)                 \
-			    res = l;                 \
-			READ(ret,f, __buf, res);     \
-		    } else                           \
-			(ret) = 0;                   \
-		} else {                             \
-		    READ(ret,f, __buf, l);           \
-		}                                    \
-		if ((ret) < 0 && __threadErrno == EINTR) {   \
-		    continue;                        \
-		}                                    \
-	    }                                        \
-	    if( (ret) > 0 ) {                               \
-		/* refetch */                               \
-		buf = (volatile char *)(obj);               \
-		memcpy((buf)+__ooffs+__offs,__buf,(ret));   \
-		__offs += (ret);                            \
-	    } else {                                        \
-		(ret) = 0;                                  \
-	    }                                               \
-	    break;                                      \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                     \
+            char __buf[IO_BUFFER_SIZE];              \
+            OBJ rA = __INST(readAhead);              \
+            if (rA != nil) {                         \
+                (buf)[__ooffs+__offs] = __intVal(rA);\
+                __INST(readAhead) = nil;             \
+                (ret) = 1;                           \
+                __offs += (ret);                     \
+                continue;                            \
+            }                                        \
+            {                                        \
+                int l;                               \
+                int res;                             \
+                CLEAR_ERRNO;                         \
+                l = (cnt)-__offs;                    \
+                if ( l > IO_BUFFER_SIZE)             \
+                    l = IO_BUFFER_SIZE;              \
+                if (ioctlsocket((SOCKET)_get_osfhandle(fileno(f)),FIONREAD,&res)==0) { \
+                if (res > 0) {                       \
+                        if (res > l)                 \
+                            res = l;                 \
+                        READ(ret,f, __buf, res);     \
+                    } else {                         \
+                        (ret) = 0;                   \
+                    }                                \
+                } else if (PeekNamedPipe((HANDLE)_get_osfhandle(fileno(f)),0, 0,0,&res,0)) { \
+                    if (res > 0) {                   \
+                        if (res > l)                 \
+                            res = l;                 \
+                        READ(ret,f, __buf, res);     \
+                    } else                           \
+                        (ret) = 0;                   \
+                } else {                             \
+                    READ(ret,f, __buf, l);           \
+                }                                    \
+                if ((ret) < 0 && __threadErrno == EINTR) {   \
+                    continue;                        \
+                }                                    \
+            }                                        \
+            if( (ret) > 0 ) {                               \
+                /* refetch */                               \
+                buf = (volatile char *)(obj);               \
+                memcpy((buf)+__ooffs+__offs,__buf,(ret));   \
+                __offs += (ret);                            \
+            } else {                                        \
+                (ret) = 0;                                  \
+            }                                               \
+            break;                                      \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
   }
 
 # define __WRITEBYTE__(ret, f, buf, isBuffered)         \
     if (isBuffered) {                                   \
-	for (;;) {                                      \
-	    CLEAR_ERRNO;                                \
-	    ret = putc(*(buf), f);                      \
-	    if ((ret) >= 0) {                           \
-		(ret) = 1;                              \
-	    } else if (ferror(f)) {                     \
-		if (__threadErrno == EINTR) {                   \
-		    clearerr(f);                        \
-		    continue;                           \
-		}                                       \
-	    } else                                      \
-		(ret) = 0;                              \
-	    break;                                      \
-	}                                               \
+        for (;;) {                                      \
+            CLEAR_ERRNO;                                \
+            ret = putc(*(buf), f);                      \
+            if ((ret) >= 0) {                           \
+                (ret) = 1;                              \
+            } else if (ferror(f)) {                     \
+                if (__threadErrno == EINTR) {                   \
+                    clearerr(f);                        \
+                    continue;                           \
+                }                                       \
+            } else                                      \
+                (ret) = 0;                              \
+            break;                                      \
+        }                                               \
     } else {                                            \
-	for (;;) {                                      \
-	    CLEAR_ERRNO;                                \
-	    WRITE(ret,f, buf, 1);                       \
-	    if ((ret) >= 0 || __threadErrno != EINTR)           \
-		break;                                  \
-	}                                               \
+        for (;;) {                                      \
+            CLEAR_ERRNO;                                \
+            WRITE(ret,f, buf, 1);                       \
+            if ((ret) >= 0 || __threadErrno != EINTR)           \
+                break;                                  \
+        }                                               \
    }
 
 # define __WRITEBYTES__(ret, f, buf, cnt, isBuffered)   \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	int __offs = 0;                                 \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    ret = fwrite((buf)+__offs, 1, (cnt)-__offs, f);\
-	    if ((ret) <= 0) {                           \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			clearerr(f);                    \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0;                                 \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            ret = fwrite((buf)+__offs, 1, (cnt)-__offs, f);\
+            if ((ret) <= 0) {                           \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        clearerr(f);                    \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	int __offs = 0;                                 \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    WRITE(ret,f, (buf)+__offs, (cnt)-__offs);   \
-	    if (ret <= 0) {                             \
-		if (ret < 0 && __threadErrno == EINTR) {        \
-		    continue;                           \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0;                                 \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            WRITE(ret,f, (buf)+__offs, (cnt)-__offs);   \
+            if (ret <= 0) {                             \
+                if (ret < 0 && __threadErrno == EINTR) {        \
+                    continue;                           \
+                }                                       \
+                break;                                  \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
    }
 
 # define __WRITEBYTES_OBJ__(ret, f, obj, obj_offs, cnt, isBuffered) \
@@ -666,51 +666,51 @@
     int __ooffs = obj_offs;                             \
     int __offs = 0;                                     \
     char *buf = (char *)(obj);                          \
-							\
+                                                        \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    ret = fwrite((buf)+__ooffs+__offs, 1, (cnt)-__offs, f); \
-	    if ((ret) <= 0) {                           \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			/* refetch */                   \
-			buf = (char *)(obj);            \
-			clearerr(f);                    \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            ret = fwrite((buf)+__ooffs+__offs, 1, (cnt)-__offs, f); \
+            if ((ret) <= 0) {                           \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        /* refetch */                   \
+                        buf = (char *)(obj);            \
+                        clearerr(f);                    \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	while (__offs < (cnt)) {                        \
-	    char __buf[IO_BUFFER_SIZE];                 \
-	    int l;                                      \
-	    CLEAR_ERRNO;                                \
-	    l = (cnt)-__offs;                           \
-	    if ( l > IO_BUFFER_SIZE)                    \
-	      l = IO_BUFFER_SIZE;                       \
-	    /* refetch */                               \
-	    buf = (volatile char *)(obj);               \
-	    memcpy(__buf,(buf)+__ooffs+__offs,l);       \
-	    WRITE(ret,f, __buf, l);                     \
-	    if (ret <= 0) {                             \
-		if (ret < 0 && __threadErrno == EINTR) {        \
-		    continue;                           \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            char __buf[IO_BUFFER_SIZE];                 \
+            int l;                                      \
+            CLEAR_ERRNO;                                \
+            l = (cnt)-__offs;                           \
+            if ( l > IO_BUFFER_SIZE)                    \
+              l = IO_BUFFER_SIZE;                       \
+            /* refetch */                               \
+            buf = (volatile char *)(obj);               \
+            memcpy(__buf,(buf)+__ooffs+__offs,l);       \
+            WRITE(ret,f, __buf, l);                     \
+            if (ret <= 0) {                             \
+                if (ret < 0 && __threadErrno == EINTR) {        \
+                    continue;                           \
+                }                                       \
+                break;                                  \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
   }
 
@@ -719,15 +719,15 @@
 # define __READING__(f)                          \
     if ((__INST(didWrite) != false)              \
      && (__INST(mode) == @symbol(readwrite))) {  \
-	__INST(didWrite) = false;                \
-	OPT_FSEEK(f, 0L, SEEK_CUR); /* needed in stdio */  \
+        __INST(didWrite) = false;                \
+        OPT_FSEEK(f, 0L, SEEK_CUR); /* needed in stdio */  \
     }
 
 # define __WRITING__(f)                          \
     if ((__INST(didWrite) != true)               \
      && (__INST(mode) == @symbol(readwrite))) {  \
-	__INST(didWrite) = true;                 \
-	OPT_FSEEK(f, 0L, SEEK_CUR); /* needed in stdio */  \
+        __INST(didWrite) = true;                 \
+        OPT_FSEEK(f, 0L, SEEK_CUR); /* needed in stdio */  \
     }
 
 
@@ -737,69 +737,69 @@
 # else /* use STDIO */
 #  define __UNGETC__(c, f, isBuffered)                  \
     if (isBuffered) {                                   \
-	ungetc((c), (f));                               \
+        ungetc((c), (f));                               \
     } else {                                            \
-	__INST(readAhead) = __mkSmallInteger((c));          \
+        __INST(readAhead) = __mkSmallInteger((c));          \
     }
 # endif /* use STDIO */
 
 # ifdef NO_STDIO
 #  define __READBYTE__(ret, f, buf, isBuffered)         \
     {                                                   \
-	OBJ rA = __INST(readAhead);                     \
-	if (rA != nil) {                                \
-	    *(buf) = __intVal(rA);                      \
-	    DEBUGBUFFER(buf);                           \
-	    __INST(readAhead) = nil;                    \
-	    (ret) = 1;                                  \
-	} else {                                        \
-	    for (;;) {                                  \
-		CLEAR_ERRNO;                            \
-		(ret) = READ(f, buf, 1);                \
-		DEBUGBUFFER(buf);                       \
-		if ((ret) >= 0 || __threadErrno != EINTR)       \
-		    break;                              \
-		__HANDLE_INTERRUPTS__;                  \
-	    }                                           \
-	}                                               \
+        OBJ rA = __INST(readAhead);                     \
+        if (rA != nil) {                                \
+            *(buf) = __intVal(rA);                      \
+            DEBUGBUFFER(buf);                           \
+            __INST(readAhead) = nil;                    \
+            (ret) = 1;                                  \
+        } else {                                        \
+            for (;;) {                                  \
+                CLEAR_ERRNO;                            \
+                (ret) = READ(f, buf, 1);                \
+                DEBUGBUFFER(buf);                       \
+                if ((ret) >= 0 || __threadErrno != EINTR)       \
+                    break;                              \
+                __HANDLE_INTERRUPTS__;                  \
+            }                                           \
+        }                                               \
     }
 # else /* use STDIO */
 #  define __READBYTE__(ret, f, buf, isBuffered)         \
     if (isBuffered) {                                   \
-	for (;;) {                                      \
-	    CLEAR_ERRNO;                                \
-	    (ret) = getc(f);                            \
-	    if ((ret) >= 0) {                           \
-		DEBUGBUFFER(buf);                       \
-		*(buf) = (ret);                         \
-		(ret) = 1;                              \
-	    } else if (ferror(f)) {                     \
-		if (__threadErrno == EINTR) {                   \
-		    __HANDLE_INTERRUPTS__;              \
-		    clearerr(f);                        \
-		    continue;                           \
-		}                                       \
-	    } else                                      \
-		(ret) = 0;                              \
-	    break;                                      \
-	}                                               \
+        for (;;) {                                      \
+            CLEAR_ERRNO;                                \
+            (ret) = getc(f);                            \
+            if ((ret) >= 0) {                           \
+                DEBUGBUFFER(buf);                       \
+                *(buf) = (ret);                         \
+                (ret) = 1;                              \
+            } else if (ferror(f)) {                     \
+                if (__threadErrno == EINTR) {                   \
+                    __HANDLE_INTERRUPTS__;              \
+                    clearerr(f);                        \
+                    continue;                           \
+                }                                       \
+            } else                                      \
+                (ret) = 0;                              \
+            break;                                      \
+        }                                               \
     } else {                                            \
-	OBJ rA = __INST(readAhead);                     \
-	if (rA != nil) {                                \
-	    *(buf) = __intVal(rA);                      \
-	    DEBUGBUFFER(buf);                           \
-	    __INST(readAhead) = nil;                    \
-	    (ret) = 1;                                  \
-	} else {                                        \
-	    for (;;) {                                  \
-		CLEAR_ERRNO;                            \
-		(ret) = read(fileno(f), buf, 1);        \
-		DEBUGBUFFER(buf);                       \
-		if ((ret) >= 0 || __threadErrno != EINTR)       \
-		    break;                              \
-		__HANDLE_INTERRUPTS__;                  \
-	    }                                           \
-	}                                               \
+        OBJ rA = __INST(readAhead);                     \
+        if (rA != nil) {                                \
+            *(buf) = __intVal(rA);                      \
+            DEBUGBUFFER(buf);                           \
+            __INST(readAhead) = nil;                    \
+            (ret) = 1;                                  \
+        } else {                                        \
+            for (;;) {                                  \
+                CLEAR_ERRNO;                            \
+                (ret) = read(fileno(f), buf, 1);        \
+                DEBUGBUFFER(buf);                       \
+                if ((ret) >= 0 || __threadErrno != EINTR)       \
+                    break;                              \
+                __HANDLE_INTERRUPTS__;                  \
+            }                                           \
+        }                                               \
    }
 # endif /* use STDIO */
 
@@ -810,84 +810,84 @@
 # ifdef NO_STDIO
 #  define __READBYTES__(ret, f, buf, cnt, isBuffered)   \
     {                                                   \
-	int __offs = 0, __cnt;                                 \
-							\
-	while (__offs < (cnt)) {                        \
-	    OBJ rA = __INST(readAhead);                 \
-	    if (rA != nil) {                            \
-		(buf)[__offs] = __intVal(rA);           \
-		DEBUGBUFFER(buf);                       \
-		__INST(readAhead) = nil;                \
-		__offs++;                               \
-	    } else {                                    \
-		CLEAR_ERRNO;                            \
-		__cnt = READ(f, (buf)+__offs, (cnt)-__offs); \
-		DEBUGBUFFER(buf);                       \
-		if (__cnt <= 0) {                       \
-		    if (__cnt < 0 && __threadErrno == EINTR) {  \
-			__HANDLE_INTERRUPTS__;          \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		}                                       \
-		__offs += __cnt;                        \
-	    }                                           \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0, __cnt;                                 \
+                                                        \
+        while (__offs < (cnt)) {                        \
+            OBJ rA = __INST(readAhead);                 \
+            if (rA != nil) {                            \
+                (buf)[__offs] = __intVal(rA);           \
+                DEBUGBUFFER(buf);                       \
+                __INST(readAhead) = nil;                \
+                __offs++;                               \
+            } else {                                    \
+                CLEAR_ERRNO;                            \
+                __cnt = READ(f, (buf)+__offs, (cnt)-__offs); \
+                DEBUGBUFFER(buf);                       \
+                if (__cnt <= 0) {                       \
+                    if (__cnt < 0 && __threadErrno == EINTR) {  \
+                        __HANDLE_INTERRUPTS__;          \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                }                                       \
+                __offs += __cnt;                        \
+            }                                           \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
    }
 # else /* use STDIO */
 #  define __READBYTES__(ret, f, buf, cnt, isBuffered)     \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	int __offs = 0;                                 \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    (ret) = getc(f);                            \
-	    if ((ret) < 0) {                            \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			__HANDLE_INTERRUPTS__;          \
-			clearerr(f);                    \
-			continue;                       \
-		    }                                   \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    DEBUGBUFFER(buf);                           \
-	    (buf)[__offs++] = (ret);                    \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0;                                 \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            (ret) = getc(f);                            \
+            if ((ret) < 0) {                            \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        __HANDLE_INTERRUPTS__;          \
+                        clearerr(f);                    \
+                        continue;                       \
+                    }                                   \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+                break;                                  \
+            }                                           \
+            DEBUGBUFFER(buf);                           \
+            (buf)[__offs++] = (ret);                    \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	int __offs = 0, __cnt;                                 \
-	int fd = fileno(f);                             \
-							\
-	while (__offs < (cnt)) {                        \
-	    OBJ rA = __INST(readAhead);                 \
-	    if (rA != nil) {                            \
-		DEBUGBUFFER(buf);                       \
-		(buf)[__offs] = __intVal(rA);           \
-		__INST(readAhead) = nil;                \
-		__offs++;                               \
-	    } else {                                    \
-		CLEAR_ERRNO;                            \
-		__cnt = read(fd, (buf)+__offs, (cnt)-__offs);                 \
-		DEBUGBUFFER(buf);                       \
-		if (__cnt <= 0) {                       \
-		    if (__cnt < 0 && __threadErrno == EINTR) {  \
-			__HANDLE_INTERRUPTS__;          \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		}                                       \
-		__offs += __cnt;                        \
-	    }                                           \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0, __cnt;                                 \
+        int fd = fileno(f);                             \
+                                                        \
+        while (__offs < (cnt)) {                        \
+            OBJ rA = __INST(readAhead);                 \
+            if (rA != nil) {                            \
+                DEBUGBUFFER(buf);                       \
+                (buf)[__offs] = __intVal(rA);           \
+                __INST(readAhead) = nil;                \
+                __offs++;                               \
+            } else {                                    \
+                CLEAR_ERRNO;                            \
+                __cnt = read(fd, (buf)+__offs, (cnt)-__offs);                 \
+                DEBUGBUFFER(buf);                       \
+                if (__cnt <= 0) {                       \
+                    if (__cnt < 0 && __threadErrno == EINTR) {  \
+                        __HANDLE_INTERRUPTS__;          \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                }                                       \
+                __offs += __cnt;                        \
+            }                                           \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
    }
 
 
@@ -897,10 +897,10 @@
 
 #  if defined(F_GETFL) && defined(F_SETFL) && (defined(O_NONBLOCK) || defined(O_NDELAY) || defined(FNDELAY))
 #   define GETFLAGS(fd) \
-	fcntl(fd, F_GETFL, 0);
+        fcntl(fd, F_GETFL, 0);
 
 #   define SETFLAGS(fd, flags) \
-	fcntl(fd, F_SETFL, flags)
+        fcntl(fd, F_SETFL, flags)
 
 #   if defined(O_NONBLOCK)
 #    define __STX_NONBLOCK_FLAG O_NONBLOCK
@@ -913,13 +913,13 @@
 #   endif
 
 #   define SETNONBLOCKING(fd) \
-	{ \
-	    int flags; \
-	    flags = fcntl(fd, F_GETFL, 0); \
-	    if (flags >= 0) { \
-		fcntl(fd, F_SETFL, flags | __STX_NONBLOCK_FLAG); \
-	    } \
-	}
+        { \
+            int flags; \
+            flags = fcntl(fd, F_GETFL, 0); \
+            if (flags >= 0) { \
+                fcntl(fd, F_SETFL, flags | __STX_NONBLOCK_FLAG); \
+            } \
+        }
 #  else
 #   define GETFLAGS(fd) 0
 #   define SETFLAGS(fd, flags) /* nothing */
@@ -930,53 +930,53 @@
   {                                                     \
     int __offs = 0, __cnt;                                     \
     int oldFlags;                                       \
-							\
+                                                        \
     (ret) = 0;                                          \
     oldFlags = GETFLAGS(fileno(f));                     \
     SETNONBLOCKING(fileno(f));                          \
     if (isBuffered) {                                   \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    (ret) = getc(f);                            \
-	    if ((ret) < 0) {                            \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			(ret) = 0;                      \
-			clearerr(f);                    \
-			break;                          \
-		    }                                   \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    (buf)[__offs++] = (ret);                    \
-	    DEBUGBUFFER(buf);                           \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            (ret) = getc(f);                            \
+            if ((ret) < 0) {                            \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        (ret) = 0;                      \
+                        clearerr(f);                    \
+                        break;                          \
+                    }                                   \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+                break;                                  \
+            }                                           \
+            (buf)[__offs++] = (ret);                    \
+            DEBUGBUFFER(buf);                           \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	int fd = fileno(f);                             \
-							\
-	while (__offs < (cnt)) {                        \
-	    OBJ rA = __INST(readAhead);                 \
-	    if (rA != nil) {                            \
-		(buf)[__offs] = __intVal(rA);           \
-		DEBUGBUFFER(buf);                       \
-		__INST(readAhead) = nil;                \
-		__offs++;                               \
-		continue;                               \
-	    }                                           \
-	    CLEAR_ERRNO;                                \
-	    __cnt = read(fd, (buf)+__offs, (cnt)-__offs); \
-	    DEBUGBUFFER(buf);                           \
-	    if (__cnt > 0) {                            \
-		__offs += __cnt;                        \
-	    }                                           \
-	    break;                                      \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int fd = fileno(f);                             \
+                                                        \
+        while (__offs < (cnt)) {                        \
+            OBJ rA = __INST(readAhead);                 \
+            if (rA != nil) {                            \
+                (buf)[__offs] = __intVal(rA);           \
+                DEBUGBUFFER(buf);                       \
+                __INST(readAhead) = nil;                \
+                __offs++;                               \
+                continue;                               \
+            }                                           \
+            CLEAR_ERRNO;                                \
+            __cnt = read(fd, (buf)+__offs, (cnt)-__offs); \
+            DEBUGBUFFER(buf);                           \
+            if (__cnt > 0) {                            \
+                __offs += __cnt;                        \
+            }                                           \
+            break;                                      \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
     SETFLAGS(fileno(f), oldFlags);                      \
   }
@@ -994,34 +994,34 @@
     int __offs = 0;                                     \
     int __cnt;                                          \
     char *buf = (char *)(obj);                          \
-							\
+                                                        \
     (ret) = 0;                                          \
     {                                                   \
-	while (__offs < (cnt)) {                        \
-	    OBJ rA = __INST(readAhead);                 \
-	    if (rA != nil) {                            \
-		(buf)[__ooffs+__offs] = __intVal(rA);   \
-		DEBUGBUFFER(buf);                       \
-		__INST(readAhead) = nil;                \
-		__offs++;                               \
-	    } else {                                    \
-		CLEAR_ERRNO;                            \
-		__cnt = READ(f, (buf)+__ooffs+__offs, (cnt)-__offs); \
-		DEBUGBUFFER(buf);                       \
-		if (__cnt <= 0) {                       \
-		    if (__cnt < 0 && __threadErrno == EINTR) {  \
-			__HANDLE_INTERRUPTS__;          \
-			/* refetch */                   \
-			buf = (char *)(obj);            \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		}                                       \
-		__offs += __cnt;                        \
-	    }                                           \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            OBJ rA = __INST(readAhead);                 \
+            if (rA != nil) {                            \
+                (buf)[__ooffs+__offs] = __intVal(rA);   \
+                DEBUGBUFFER(buf);                       \
+                __INST(readAhead) = nil;                \
+                __offs++;                               \
+            } else {                                    \
+                CLEAR_ERRNO;                            \
+                __cnt = READ(f, (buf)+__ooffs+__offs, (cnt)-__offs); \
+                DEBUGBUFFER(buf);                       \
+                if (__cnt <= 0) {                       \
+                    if (__cnt < 0 && __threadErrno == EINTR) {  \
+                        __HANDLE_INTERRUPTS__;          \
+                        /* refetch */                   \
+                        buf = (char *)(obj);            \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                }                                       \
+                __offs += __cnt;                        \
+            }                                           \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
   }
 # else /* use STDIO */
@@ -1031,61 +1031,61 @@
     int __offs = 0;                                     \
     int __cnt;                                          \
     char *buf = (char *)(obj);                          \
-							\
+                                                        \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    (ret) = getc(f);                            \
-	    if ((ret) < 0) {                            \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			__HANDLE_INTERRUPTS__;          \
-			clearerr(f);                    \
-			/* refetch */                   \
-			buf = (char *)(obj);            \
-			DEBUGBUFFER(buf);               \
-			continue;                       \
-		    }                                   \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    (buf)[__ooffs+__offs] = (ret);              \
-	    DEBUGBUFFER(buf);                           \
-	    __offs++;                                   \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            (ret) = getc(f);                            \
+            if ((ret) < 0) {                            \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        __HANDLE_INTERRUPTS__;          \
+                        clearerr(f);                    \
+                        /* refetch */                   \
+                        buf = (char *)(obj);            \
+                        DEBUGBUFFER(buf);               \
+                        continue;                       \
+                    }                                   \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+                break;                                  \
+            }                                           \
+            (buf)[__ooffs+__offs] = (ret);              \
+            DEBUGBUFFER(buf);                           \
+            __offs++;                                   \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	int fd = fileno(f);                             \
-							\
-	while (__offs < (cnt)) {                        \
-	    OBJ rA = __INST(readAhead);                 \
-	    if (rA != nil) {                            \
-		(buf)[__ooffs+__offs] = __intVal(rA);   \
-		DEBUGBUFFER(buf);                       \
-		__INST(readAhead) = nil;                \
-		__offs++;                               \
-	    } else {                                    \
-		CLEAR_ERRNO;                            \
-		__cnt = read(fd, (buf)+__ooffs+__offs, (cnt)-__offs); \
-		DEBUGBUFFER(buf);                       \
-		if (__cnt <= 0) {                       \
-		    if (__cnt < 0 && __threadErrno == EINTR) {  \
-			__HANDLE_INTERRUPTS__;          \
-			/* refetch */                   \
-			buf = (char *)(obj);            \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		}                                       \
-		__offs += __cnt;                        \
-	    }                                           \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int fd = fileno(f);                             \
+                                                        \
+        while (__offs < (cnt)) {                        \
+            OBJ rA = __INST(readAhead);                 \
+            if (rA != nil) {                            \
+                (buf)[__ooffs+__offs] = __intVal(rA);   \
+                DEBUGBUFFER(buf);                       \
+                __INST(readAhead) = nil;                \
+                __offs++;                               \
+            } else {                                    \
+                CLEAR_ERRNO;                            \
+                __cnt = read(fd, (buf)+__ooffs+__offs, (cnt)-__offs); \
+                DEBUGBUFFER(buf);                       \
+                if (__cnt <= 0) {                       \
+                    if (__cnt < 0 && __threadErrno == EINTR) {  \
+                        __HANDLE_INTERRUPTS__;          \
+                        /* refetch */                   \
+                        buf = (char *)(obj);            \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                }                                       \
+                __offs += __cnt;                        \
+            }                                           \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
   }
 
@@ -1095,54 +1095,54 @@
     int __offs = 0;                                     \
     int __cnt;                                          \
     char *buf = (char *)(obj);                          \
-							\
+                                                        \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    (ret) = getc(f);                            \
-	    if ((ret) < 0) {                            \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {       \
-			clearerr(f);                    \
-			/* refetch */                   \
-			buf = (char *)(obj);            \
-			(ret) = 0;                      \
-			break;                          \
-		    }                                   \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    (buf)[__ooffs+__offs] = (ret);              \
-	    DEBUGBUFFER(buf);                           \
-	    __offs++;                                   \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            (ret) = getc(f);                            \
+            if ((ret) < 0) {                            \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {       \
+                        clearerr(f);                    \
+                        /* refetch */                   \
+                        buf = (char *)(obj);            \
+                        (ret) = 0;                      \
+                        break;                          \
+                    }                                   \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+                break;                                  \
+            }                                           \
+            (buf)[__ooffs+__offs] = (ret);              \
+            DEBUGBUFFER(buf);                           \
+            __offs++;                                   \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	int fd = fileno(f);                             \
-							\
-	while (__offs < (cnt)) {                        \
-	    OBJ rA = __INST(readAhead);                 \
-	    if (rA != nil) {                            \
-		(buf)[__ooffs+__offs] = __intVal(rA);   \
-		DEBUGBUFFER(buf);                       \
-		__INST(readAhead) = nil;                \
-		__offs++;                               \
-		continue;                               \
-	    }                                           \
-	    CLEAR_ERRNO;                                \
-	    __cnt = read(fd, (buf)+__ooffs+__offs, (cnt)-__offs); \
-	    DEBUGBUFFER(buf);                           \
-	    if (__cnt > 0) {                            \
-		__offs += __cnt;                        \
-	    }                                           \
-	    break;                                      \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int fd = fileno(f);                             \
+                                                        \
+        while (__offs < (cnt)) {                        \
+            OBJ rA = __INST(readAhead);                 \
+            if (rA != nil) {                            \
+                (buf)[__ooffs+__offs] = __intVal(rA);   \
+                DEBUGBUFFER(buf);                       \
+                __INST(readAhead) = nil;                \
+                __offs++;                               \
+                continue;                               \
+            }                                           \
+            CLEAR_ERRNO;                                \
+            __cnt = read(fd, (buf)+__ooffs+__offs, (cnt)-__offs); \
+            DEBUGBUFFER(buf);                           \
+            if (__cnt > 0) {                            \
+                __offs += __cnt;                        \
+            }                                           \
+            break;                                      \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
   }
 
@@ -1151,40 +1151,40 @@
 
 # ifdef NO_STDIO
 #  define __WRITEBYTE__(ret, f, buf, isBuffered)          \
-	for (;;) {                                      \
-	    CLEAR_ERRNO;                                \
-	    (ret) = WRITE(f, buf, 1);                   \
-	    if ((ret) >= 0 || __threadErrno != EINTR)           \
-		break;                                  \
-	    __HANDLE_INTERRUPTS__;                      \
-	}
+        for (;;) {                                      \
+            CLEAR_ERRNO;                                \
+            (ret) = WRITE(f, buf, 1);                   \
+            if ((ret) >= 0 || __threadErrno != EINTR)           \
+                break;                                  \
+            __HANDLE_INTERRUPTS__;                      \
+        }
 # else /* use STDIO */
 #  define __WRITEBYTE__(ret, f, buf, isBuffered)        \
     if (isBuffered) {                                   \
-	for (;;) {                                      \
-	    CLEAR_ERRNO;                                \
-	    ret = putc(*(buf), f);                      \
-	    if ((ret) >= 0) {                           \
-		(ret) = 1;                              \
-	    } else if (ferror(f)) {                     \
-		/* SOLARIS/SPARC (2.6) generates spurious errors with errno = 0 */ \
-		if (__threadErrno == EINTR || __threadErrno == 0) {     \
-		    __HANDLE_INTERRUPTS__;              \
-		    clearerr(f);                        \
-		    continue;                           \
-		}                                       \
-	    } else                                      \
-		(ret) = 0;                              \
-	    break;                                      \
-	}                                               \
+        for (;;) {                                      \
+            CLEAR_ERRNO;                                \
+            ret = putc(*(buf), f);                      \
+            if ((ret) >= 0) {                           \
+                (ret) = 1;                              \
+            } else if (ferror(f)) {                     \
+                /* SOLARIS/SPARC (2.6) generates spurious errors with errno = 0 */ \
+                if (__threadErrno == EINTR || __threadErrno == 0) {     \
+                    __HANDLE_INTERRUPTS__;              \
+                    clearerr(f);                        \
+                    continue;                           \
+                }                                       \
+            } else                                      \
+                (ret) = 0;                              \
+            break;                                      \
+        }                                               \
     } else {                                            \
-	for (;;) {                                      \
-	    CLEAR_ERRNO;                                \
-	    (ret) = write(fileno(f), buf, 1);           \
-	    if ((ret) >= 0 || __threadErrno != EINTR)           \
-		break;                                  \
-	    __HANDLE_INTERRUPTS__;                      \
-	}                                               \
+        for (;;) {                                      \
+            CLEAR_ERRNO;                                \
+            (ret) = write(fileno(f), buf, 1);           \
+            if ((ret) >= 0 || __threadErrno != EINTR)           \
+                break;                                  \
+            __HANDLE_INTERRUPTS__;                      \
+        }                                               \
    }
 # endif /* use STDIO */
 
@@ -1196,62 +1196,62 @@
 #  define __WRITEBYTES__(ret, f, buf, cnt, isBuffered)    \
     (ret) = 0;                                          \
     {                                                   \
-	int __offs = 0;                                 \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    ret = WRITE(f, (buf)+__offs, (cnt)-__offs); \
-	    if (ret <= 0) {                             \
-		if (ret < 0 && __threadErrno == EINTR) {        \
-		    __HANDLE_INTERRUPTS__;              \
-		    continue;                           \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0;                                 \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            ret = WRITE(f, (buf)+__offs, (cnt)-__offs); \
+            if (ret <= 0) {                             \
+                if (ret < 0 && __threadErrno == EINTR) {        \
+                    __HANDLE_INTERRUPTS__;              \
+                    continue;                           \
+                }                                       \
+                break;                                  \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
    }
 # else /* use STDIO */
 #  define __WRITEBYTES__(ret, f, buf, cnt, isBuffered)    \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	int __offs = 0;                                 \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    ret = fwrite((buf)+__offs, 1, (cnt)-__offs, f);\
-	    if ((ret) <= 0) {                            \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			__HANDLE_INTERRUPTS__;          \
-			clearerr(f);                    \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0;                                 \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            ret = fwrite((buf)+__offs, 1, (cnt)-__offs, f);\
+            if ((ret) <= 0) {                            \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        __HANDLE_INTERRUPTS__;          \
+                        clearerr(f);                    \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	int __offs = 0;                                 \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    ret = write(fileno(f), (buf)+__offs, (cnt)-__offs);\
-	    if (ret <= 0) {                             \
-		if (ret < 0 && __threadErrno == EINTR) {        \
-		    __HANDLE_INTERRUPTS__;              \
-		    continue;                           \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        int __offs = 0;                                 \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            ret = write(fileno(f), (buf)+__offs, (cnt)-__offs);\
+            if (ret <= 0) {                             \
+                if (ret < 0 && __threadErrno == EINTR) {        \
+                    __HANDLE_INTERRUPTS__;              \
+                    continue;                           \
+                }                                       \
+                break;                                  \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
    }
 # endif /* use STDIO */
 
@@ -1265,25 +1265,25 @@
     int __ooffs = obj_offs;                             \
     int __offs = 0;                                     \
     char *buf = (char *)(obj);                          \
-							\
+                                                        \
     (ret) = 0;                                          \
     {                                                   \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    ret = WRITE(f, (buf)+__ooffs+__offs, (cnt)-__offs);               \
-	    if (ret <= 0) {                             \
-		if (ret < 0 && __threadErrno == EINTR) {        \
-		    __HANDLE_INTERRUPTS__;              \
-		    /* refetch */                       \
-		    buf = (char *)(obj);                \
-		    continue;                           \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            ret = WRITE(f, (buf)+__ooffs+__offs, (cnt)-__offs);               \
+            if (ret <= 0) {                             \
+                if (ret < 0 && __threadErrno == EINTR) {        \
+                    __HANDLE_INTERRUPTS__;              \
+                    /* refetch */                       \
+                    buf = (char *)(obj);                \
+                    continue;                           \
+                }                                       \
+                break;                                  \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
   }
 # else /* use STDIO */
@@ -1292,47 +1292,47 @@
     int __ooffs = obj_offs;                             \
     int __offs = 0;                                     \
     char *buf = (char *)(obj);                          \
-							\
+                                                        \
     (ret) = 0;                                          \
     if (isBuffered) {                                   \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    ret = fwrite((buf)+__ooffs+__offs, 1, (cnt)-__offs, f);           \
-	    if ((ret) <= 0) {                           \
-		if (ferror(f)) {                        \
-		    if (__threadErrno == EINTR) {               \
-			__HANDLE_INTERRUPTS__;          \
-			/* refetch */                   \
-			buf = (char *)(obj);            \
-			clearerr(f);                    \
-			continue;                       \
-		    }                                   \
-		    break;                              \
-		} else {                                \
-		    (ret) = 0;                          \
-		}                                       \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            ret = fwrite((buf)+__ooffs+__offs, 1, (cnt)-__offs, f);           \
+            if ((ret) <= 0) {                           \
+                if (ferror(f)) {                        \
+                    if (__threadErrno == EINTR) {               \
+                        __HANDLE_INTERRUPTS__;          \
+                        /* refetch */                   \
+                        buf = (char *)(obj);            \
+                        clearerr(f);                    \
+                        continue;                       \
+                    }                                   \
+                    break;                              \
+                } else {                                \
+                    (ret) = 0;                          \
+                }                                       \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     } else {                                            \
-	while (__offs < (cnt)) {                        \
-	    CLEAR_ERRNO;                                \
-	    ret = write(fileno(f), (buf)+__ooffs+__offs, (cnt)-__offs);       \
-	    if (ret <= 0) {                             \
-		if (ret < 0 && __threadErrno == EINTR) {        \
-		    __HANDLE_INTERRUPTS__;              \
-		    /* refetch */                       \
-		    buf = (char *)(obj);                \
-		    continue;                           \
-		}                                       \
-		break;                                  \
-	    }                                           \
-	    __offs += (ret);                            \
-	}                                               \
-	if (__offs > 0)                                 \
-	    (ret) = __offs;                             \
+        while (__offs < (cnt)) {                        \
+            CLEAR_ERRNO;                                \
+            ret = write(fileno(f), (buf)+__ooffs+__offs, (cnt)-__offs);       \
+            if (ret <= 0) {                             \
+                if (ret < 0 && __threadErrno == EINTR) {        \
+                    __HANDLE_INTERRUPTS__;              \
+                    /* refetch */                       \
+                    buf = (char *)(obj);                \
+                    continue;                           \
+                }                                       \
+                break;                                  \
+            }                                           \
+            __offs += (ret);                            \
+        }                                               \
+        if (__offs > 0)                                 \
+            (ret) = __offs;                             \
     }                                                   \
   }
 # endif /* use STDIO */
@@ -3098,6 +3098,473 @@
     "
 ! !
 
+!ExternalStream methodsFor:'no longer reimplemented for speed'!
+
+XXXnextAlphaNumericWord
+    "read the next word (i.e. up to non letter-or-digit) after first
+     skipping any whiteSpace.
+     Return a string containing those characters.
+     There is a limit of 1023 characters in the word - if longer,
+     it is truncated."
+    
+    
+%{  /* STACK: 2000 */
+    FILEPOINTER f;
+    int len;
+    char buffer[1024];
+    unsigned char ch;
+    int cnt = 0;
+    int ret, _buffered;
+    OBJ fp;
+
+    if (((fp = __INST(filePointer)) != nil)
+     && (__INST(mode) != @symbol(writeonly))
+    ) {
+	f = __FILEVal(fp);
+	_buffered = (__INST(buffered) == true);
+	if (_buffered) {
+	    __READING__(f)
+	}
+
+	/*
+	 * skip whiteSpace first ...
+	 */
+	do {
+	    __READBYTE__(ret, f, &ch, _buffered);
+	    if (ret > 0)
+		cnt++;
+	    else
+		break;
+	} while (
+#ifndef NON_ASCII
+		 (ch < ' ') ||
+#endif
+		 (ch == ' ' ) || (ch == '\t') || (ch == '\r')
+	      || (ch == '\n') || (ch == 0x0b));
+
+	len = 0;
+	while (ret > 0 &&
+	       (((ch >= 'a') && (ch <= 'z')) ||
+		((ch >= 'A') && (ch <= 'Z')) ||
+		((ch >= '0') && (ch <= '9')))
+	) {
+	    buffer[len++] = ch;
+	    if (len >= (sizeof(buffer)-1)) {
+		/* emergency */
+		break;
+	    }
+	    __READBYTE__(ret, f, &ch, _buffered);
+	    if (ret > 0)
+		cnt++;
+	    else
+		break;
+	}
+
+	if (ret <= 0) {
+	    if (ret < 0) {
+		__INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+		goto err;
+	    }
+	    else if (ret == 0)
+		__INST(hitEOF) = true;
+	} else {
+	    __UNGETC__(ch, f, _buffered);
+	    cnt--;
+	}
+
+	if (__isSmallInteger(__INST(position))) {
+	    INT np = __intVal(__INST(position)) + cnt;
+	    OBJ t;
+
+	    t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+	} else {
+	    __INST(position) = nil; /* i.e. do not know */
+	}
+
+	if (len != 0) {
+	    buffer[len] = '\0';
+	    RETURN ( __MKSTRING_L(buffer, len) );
+	}
+    }
+err: ;
+%}.
+    hitEOF ifTrue:[
+        ^ self pastEndRead
+    ].
+    lastErrorNumber notNil ifTrue:[
+        ^ self readError
+    ].
+    filePointer isNil ifTrue:[
+        ^ self errorNotOpen
+    ].
+    mode == #writeonly ifTrue:[
+        ^ self errorWriteOnly
+    ].
+    ^ super nextAlphaNumericWord
+!
+
+XXXpeekFor:anObject 
+    "return true and move past next element, if next == something.
+     Otherwise, stay and return false. False is also returned
+     when EOF is encountered.
+     The argument must be an integer if in binary, a character if in
+     text mode; only single byte characters are currently supported."
+    
+    
+%{
+    FILEPOINTER f;
+    unsigned char c;
+    int ret, peekValue, _buffered;
+    OBJ fp;
+
+    __INST(lastErrorNumber) = nil;
+    if (((fp = __INST(filePointer)) != nil)
+	&& (__INST(mode) != @symbol(writeonly))
+    ) {
+	if (__INST(binary) == true) {
+	    if (__isSmallInteger(anObject)) {
+		peekValue = __intVal(anObject) & 0xFF;
+	    } else {
+		goto bad;
+	    }
+	} else {
+	    if (__isCharacter(anObject)) {
+		peekValue = __intVal(_characterVal(anObject)) & 0xFF;
+	    } else {
+		goto bad;
+	    }
+	}
+
+	f = __FILEVal(fp);
+
+	_buffered = (__INST(buffered) == true);
+	if (_buffered) {
+	    __READING__(f)
+	}
+	__READBYTE__(ret, f, &c, _buffered);
+	if (ret > 0) {
+	    if (c == peekValue) {
+		if (__isSmallInteger(__INST(position))) {
+		    INT np = __intVal(__INST(position)) + 1;
+		    OBJ t;
+
+		    t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+		} else {
+		    __INST(position) = nil; /* i.e. do not know */
+		}
+		RETURN (true);
+	    }
+	    __UNGETC__(c, f, _buffered);
+	    RETURN (false);
+	}
+	if (ret < 0) {
+	    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+	} else /* ret == 0 */
+	    __INST(hitEOF) = true;
+	}
+bad: ;
+%}.
+    ^ super peekFor:anObject
+!
+
+XXXskipLine
+    "read the next line (characters up to newline) skip only;
+     return nil if EOF reached, self otherwise.
+     Not allowed in binary mode."
+    
+    
+%{  /* STACK:2000 */
+
+    FILEPOINTER f;
+    OBJ fp;
+    int ret, _buffered;
+    char c;
+
+    __INST(lastErrorNumber) = nil;
+    if (((fp = __INST(filePointer)) != nil)
+	&& (__INST(mode) != @symbol(writeonly))
+	&& (__INST(binary) != true)
+    ) {
+	f = __FILEVal(fp);
+	if (_buffered = (__INST(buffered) == true)) {
+	    __READING__(f)
+	}
+	for (;;) {
+	    __READBYTE__(ret, f, &c, _buffered);
+	    if (ret > 0) {
+		if (c == '\n')
+		    RETURN(self)
+	    } else
+		break;
+	}
+	if (ret < 0) {
+	    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+	} else /* ret == 0 */ {
+	    __INST(hitEOF) = true;
+	}
+    }
+%}.
+    hitEOF ifTrue:[
+        ^ self pastEndRead
+    ].
+    lastErrorNumber notNil ifTrue:[
+        self readError.
+        ^ self
+    ].
+    filePointer isNil ifTrue:[
+        self errorNotOpen.
+        ^ self
+    ].
+    binary ifTrue:[
+        self errorBinary.
+        ^ self
+    ].
+    self errorWriteOnly
+!
+
+XXXskipSeparators
+    "skip all whitespace; next will return next non-white-space character
+     or nil if endOfFile reached. Not allowed in binary mode.
+     - reimplemented for speed"
+    
+    
+%{
+    FILEPOINTER f;
+    char c;
+    int ret, _buffered;
+    OBJ fp;
+
+    __INST(lastErrorNumber) = nil;
+    if (((fp = __INST(filePointer)) != nil)
+	&& (__INST(mode) != @symbol(writeonly))
+	&& (__INST(binary) != true)
+    ) {
+	f = __FILEVal(fp);
+	_buffered = (__INST(buffered) == true);
+	if (_buffered) {
+	    __READING__(f)
+	}
+
+	while (1) {
+	    __READBYTE__(ret, f, &c, _buffered);
+	    if (ret <= 0) {
+		if (ret < 0) {
+		    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+		} else /* ret == 0 */ {
+		    __INST(hitEOF) = true;
+		}
+		break;
+	    }
+	    switch (c) {
+		case ' ':
+		case '\t':
+		case '\n':
+		case '\r':
+		case '\b':
+		case '\f':
+		    break;
+
+		default:
+		    __UNGETC__(c, f, _buffered);
+		    RETURN ( __MKCHARACTER(c & 0xFF) );
+	    }
+	}
+    }
+%}.
+    hitEOF == true ifTrue:[
+        ^ self pastEndRead
+    ].
+    lastErrorNumber notNil ifTrue:[
+        ^ self readError
+    ].
+    filePointer isNil ifTrue:[
+        ^ self errorNotOpen
+    ].
+    (mode == #writeonly) ifTrue:[
+        ^ self errorWriteOnly
+    ].
+    (binary == true) ifTrue:[
+        ^ self errorBinary
+    ].
+    ^ super skipSeparators.
+!
+
+XXXskipSeparatorsExceptCR
+    "skip all whitespace but no newlines;
+     next will return next non-white-space character
+     or nil if endOfFile reached. Not allowed in binary mode.
+     - reimplemented for speed"
+    
+    
+%{
+    FILEPOINTER f;
+    char c;
+    int ret, _buffered;
+    OBJ fp;
+
+    __INST(lastErrorNumber) = nil;
+    if (((fp = __INST(filePointer)) != nil)
+	&& (__INST(mode) != @symbol(writeonly))
+	&& (__INST(binary) != true)
+    ) {
+	f = __FILEVal(fp);
+	_buffered = (__INST(buffered) == true);
+	if (_buffered) {
+	    __READING__(f)
+	}
+	while (1) {
+	    __READBYTE__(ret, f, &c, _buffered);
+	    if (ret <= 0) {
+		if (ret < 0) {
+		    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+		} else /* ret == 0 */ {
+		    __INST(hitEOF) = true;
+		}
+		break;
+	    }
+	    switch (c) {
+		case ' ':
+		case '\t':
+		case '\b':
+		case '\f':
+		    break;
+
+		default:
+		    __UNGETC__(c, f, _buffered);
+		    RETURN ( __MKCHARACTER(c & 0xFF) );
+	    }
+	}
+    }
+%}.
+    hitEOF ifTrue:[
+        ^ self pastEndRead
+    ].
+    lastErrorNumber notNil ifTrue:[
+        ^ self readError
+    ].
+    filePointer isNil ifTrue:[
+        ^ self errorNotOpen
+    ].
+    (mode == #writeonly) ifTrue:[
+        ^ self errorWriteOnly
+    ].
+    ^ self errorBinary.
+!
+
+XXXskipThrough:aCharacter 
+    "skip all characters up-to and including aCharacter.
+     Return the receiver if skip was successful,
+     otherwise (i.e. if not found) return nil and leave the stream positioned at the end.
+     The next read operation will return the character after aCharacter.
+     The argument, aCharacter must be character, or integer when in binary mode.
+     Only single byte characters are currently supported."
+    
+    
+%{
+    FILEPOINTER f;
+    REGISTER int cSearch;
+    unsigned char c;
+    int ret, _buffered;
+    OBJ fp;
+
+    __INST(lastErrorNumber) = nil;
+    if (((fp = __INST(filePointer)) != nil)
+        && (__INST(mode) != @symbol(writeonly))
+    ) {
+        if (__INST(binary) == true) {
+            /* searched for object must be a smallInteger */
+            if (! __isSmallInteger(aCharacter)) goto badArgument;
+            cSearch = __intVal(aCharacter);
+        } else {
+            /* searched for object must be a character */
+            if (! __isCharacter(aCharacter)) goto badArgument;
+            cSearch = __intVal(_characterVal(aCharacter));
+        }
+        /* Q: should we just say: "not found" ? */
+        if ((cSearch < 0) || (cSearch > 255)) goto badArgument;
+
+        f = __FILEVal(fp);
+        if (_buffered = (__INST(buffered) == true)) {
+            __READING__(f)
+        }
+
+        while (1) {
+            __READBYTE__(ret, f, &c, _buffered);
+            if (ret <= 0) {
+                if (ret < 0) {
+                    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+                } else /* ret == 0 */ {
+                    __INST(hitEOF) = true;
+                }
+                break;
+            }
+            if (c == cSearch) {
+                RETURN (self);
+            }
+        }
+    }
+badArgument: ;
+%}.
+    hitEOF ifTrue:[ ^ nil ].
+    lastErrorNumber notNil ifTrue:[
+        self readError.
+        ^ self
+    ].
+    filePointer isNil ifTrue:[
+        self errorNotOpen.
+        ^ self
+    ].
+    (mode == #writeonly) ifTrue:[
+        self errorWriteOnly.
+        ^ self
+    ].
+     "
+     argument must be integer/character in binary mode,
+     character in text mode
+    "
+    self error:'invalid argument'.
+
+    "
+     |s|
+     s := 'Makefile' asFilename readStream.
+     s skipThrough:$E.
+     s next:10
+    "
+!
+
+XXXskipToAll:aString 
+    "skip for the sequence given by the argument, aCollection;
+     return nil if not found, self otherwise.
+     On a successful match, the next read will return characters of aString."
+    
+    |oldPos|
+
+    oldPos := self position.
+    (self skipThroughAll:aString) isNil ifTrue:[
+        "
+         restore position"
+        self position:oldPos.
+        ^ nil
+    ].
+     "
+     position before match-string
+    "
+    self position:(self position - aString size).
+    ^ self
+
+    "
+     |s|
+     s := 'Makefile' asFilename readStream.
+     [
+         (s skipToAll:'EDIT') notNil ifTrue:[
+            s next:100.
+         ].
+     ] ensure:[
+        s close.
+     ]"
+    "Modified: 26.6.1996 / 09:22:05 / cg"
+! !
+
 !ExternalStream methodsFor:'non homogenous reading'!
 
 nextAvailable:count
@@ -4341,37 +4808,37 @@
 
     __INST(lastErrorNumber) = nil;
     if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
+        && (__INST(mode) != @symbol(writeonly))
     ) {
-	f = __FILEVal(fp);
-
-	_buffered = (__INST(buffered) == true);
-	if (_buffered) {
-	    __READING__(f)
-	}
-	__READBYTE__(ret, f, &ch, _buffered);
-
-	if (ret > 0) {
-	    pos = __INST(position);
-	    if (__isSmallInteger(pos)) {
-		OBJ t;
-
-		t = __MKINT(__intVal(pos) + 1); __INST(position) = t; __STORE(self, t);
-	    } else {
-		__INST(position) = nil; /* i.e. do not know */
-	    }
-	    if (__INST(binary) == true) {
-		RETURN ( __mkSmallInteger(ch) );
-	    }
-	    RETURN ( __MKCHARACTER(ch) );
-	}
-
-	__INST(position) = nil;
-	if (ret < 0) {
-	    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-	} else /* ret == 0 */ {
-	    __INST(hitEOF) = true;
-	}
+        f = __FILEVal(fp);
+
+        _buffered = (__INST(buffered) == true);
+        if (_buffered) {
+            __READING__(f)
+        }
+        __READBYTE__(ret, f, &ch, _buffered);
+
+        if (ret > 0) {
+            pos = __INST(position);
+            if (__isSmallInteger(pos)) {
+                OBJ t;
+
+                t = __MKINT(__intVal(pos) + 1); __INST(position) = t; __STORE(self, t);
+            } else {
+                __INST(position) = nil; /* i.e. do not know */
+            }
+            if (__INST(binary) == true) {
+                RETURN ( __mkSmallInteger(ch) );
+            }
+            RETURN ( __MKCHARACTER(ch) );
+        }
+
+        __INST(position) = nil;
+        if (ret < 0) {
+            __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+        } else /* ret == 0 */ {
+            __INST(hitEOF) = true;
+        }
     }
 %}.
     hitEOF == true ifTrue:[^ self pastEndRead].
@@ -4380,16 +4847,16 @@
     (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
 
     readAhead notNil ifTrue:[
-	c := readAhead.
-	readAhead := nil.
-	^ c.
+        c := readAhead.
+        readAhead := nil.
+        ^ c.
     ].
     c := self nextByteFromFile:filePointer.
     c isNil ifTrue:[
-	^ self pastEndRead.
+        ^ self pastEndRead.
     ].
     binary == true ifTrue:[
-	^ c
+        ^ c
     ].
     ^ Character value:c
 !
@@ -4433,37 +4900,37 @@
 
     __INST(lastErrorNumber) = nil;
     if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
+        && (__INST(mode) != @symbol(writeonly))
     ) {
-	f = __FILEVal(fp);
-
-	_buffered = (__INST(buffered) == true);
-	if (_buffered) {
-	    __READING__(f)
-	}
-	__READBYTE__(ret, f, &ch, _buffered);
-
-	if (ret > 0) {
-	    pos = __INST(position);
-	    if (__isSmallInteger(pos)) {
-		OBJ t;
-
-		t = __MKINT(__intVal(pos) + 1); __INST(position) = t; __STORE(self, t);
-	    } else {
-		__INST(position) = nil; /* i.e. do not know */
-	    }
-	    if (__INST(binary) == true) {
-		RETURN ( __mkSmallInteger(ch) );
-	    }
-	    RETURN ( __MKCHARACTER(ch) );
-	}
-
-	__INST(position) = nil;
-	if (ret < 0) {
-	    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-	} else /* ret == 0 */ {
-	    __INST(hitEOF) = true;
-	}
+        f = __FILEVal(fp);
+
+        _buffered = (__INST(buffered) == true);
+        if (_buffered) {
+            __READING__(f)
+        }
+        __READBYTE__(ret, f, &ch, _buffered);
+
+        if (ret > 0) {
+            pos = __INST(position);
+            if (__isSmallInteger(pos)) {
+                OBJ t;
+
+                t = __MKINT(__intVal(pos) + 1); __INST(position) = t; __STORE(self, t);
+            } else {
+                __INST(position) = nil; /* i.e. do not know */
+            }
+            if (__INST(binary) == true) {
+                RETURN ( __mkSmallInteger(ch) );
+            }
+            RETURN ( __MKCHARACTER(ch) );
+        }
+
+        __INST(position) = nil;
+        if (ret < 0) {
+            __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+        } else /* ret == 0 */ {
+            __INST(hitEOF) = true;
+        }
     }
 %}.
     hitEOF == true ifTrue:[^ nil].
@@ -4472,16 +4939,16 @@
     (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
 
     readAhead notNil ifTrue:[
-	c := readAhead.
-	readAhead := nil.
-	^ c.
+        c := readAhead.
+        readAhead := nil.
+        ^ c.
     ].
     c := self nextByteFromFile:filePointer.
     c isNil ifTrue:[
-	^ nil.
+        ^ nil.
     ].
     binary == true ifTrue:[
-	^ c
+        ^ c
     ].
     ^ Character value:c
 !
@@ -4500,38 +4967,38 @@
     OBJ ra;
 
     if ((ra = __INST(readAhead)) != nil) {
-	if (__INST(binary) == true) {
-	    RETURN ( ra );
-	}
-	c = __intVal(ra);
-	RETURN ( __MKCHARACTER(c) );
+        if (__INST(binary) == true) {
+            RETURN ( ra );
+        }
+        c = __intVal(ra);
+        RETURN ( __MKCHARACTER(c) );
     }
 
     __INST(lastErrorNumber) = nil;
 
     if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
+        && (__INST(mode) != @symbol(writeonly))
     ) {
-	f = __FILEVal(fp);
-	_buffered = (__INST(buffered) == true);
-	if (_buffered) {
-	    __READING__(f)
-	}
-	__READBYTE__(ret, f, &c, _buffered);
-
-	if (ret > 0) {
-	    __UNGETC__(c, f, _buffered);
-
-	    if (__INST(binary) == true) {
-		RETURN ( __mkSmallInteger(c) );
-	    }
-	    RETURN ( __MKCHARACTER(c) );
-	}
-	if (ret < 0) {
-	    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-	} else /* ret == 0 */ {
-	    __INST(hitEOF) = true;
-	}
+        f = __FILEVal(fp);
+        _buffered = (__INST(buffered) == true);
+        if (_buffered) {
+            __READING__(f)
+        }
+        __READBYTE__(ret, f, &c, _buffered);
+
+        if (ret > 0) {
+            __UNGETC__(c, f, _buffered);
+
+            if (__INST(binary) == true) {
+                RETURN ( __mkSmallInteger(c) );
+            }
+            RETURN ( __MKCHARACTER(c) );
+        }
+        if (ret < 0) {
+            __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+        } else /* ret == 0 */ {
+            __INST(hitEOF) = true;
+        }
     }
 %}.
     hitEOF == true ifTrue:[^ self pastEndRead].
@@ -4540,10 +5007,10 @@
     (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
 
     readAhead isNil ifTrue:[
-	readAhead := self nextOrNil.
-	readAhead isNil ifTrue:[
-	    ^ self pastEndRead.
-	].
+        readAhead := self nextOrNil.
+        readAhead isNil ifTrue:[
+            ^ self pastEndRead.
+        ].
     ].
     ^ readAhead
 !
@@ -4562,38 +5029,38 @@
     OBJ ra;
 
     if ((ra = __INST(readAhead)) != nil) {
-	if (__INST(binary) == true) {
-	    RETURN ( ra );
-	}
-	c = __intVal(ra);
-	RETURN ( __MKCHARACTER(c) );
+        if (__INST(binary) == true) {
+            RETURN ( ra );
+        }
+        c = __intVal(ra);
+        RETURN ( __MKCHARACTER(c) );
     }
 
     __INST(lastErrorNumber) = nil;
 
     if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
+        && (__INST(mode) != @symbol(writeonly))
     ) {
-	f = __FILEVal(fp);
-	_buffered = (__INST(buffered) == true);
-	if (_buffered) {
-	    __READING__(f)
-	}
-	__READBYTE__(ret, f, &c, _buffered);
-
-	if (ret > 0) {
-	    __UNGETC__(c, f, _buffered);
-
-	    if (__INST(binary) == true) {
-		RETURN ( __mkSmallInteger(c) );
-	    }
-	    RETURN ( __MKCHARACTER(c) );
-	}
-	if (ret < 0) {
-	    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-	} else /* ret == 0 */ {
-	    __INST(hitEOF) = true;
-	}
+        f = __FILEVal(fp);
+        _buffered = (__INST(buffered) == true);
+        if (_buffered) {
+            __READING__(f)
+        }
+        __READBYTE__(ret, f, &c, _buffered);
+
+        if (ret > 0) {
+            __UNGETC__(c, f, _buffered);
+
+            if (__INST(binary) == true) {
+                RETURN ( __mkSmallInteger(c) );
+            }
+            RETURN ( __MKCHARACTER(c) );
+        }
+        if (ret < 0) {
+            __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+        } else /* ret == 0 */ {
+            __INST(hitEOF) = true;
+        }
     }
 %}.
     hitEOF == true ifTrue:[^ nil].
@@ -4602,7 +5069,7 @@
     (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
 
     readAhead isNil ifTrue:[
-	readAhead := self nextOrNil.
+        readAhead := self nextOrNil.
     ].
     ^ readAhead
 !
@@ -4636,478 +5103,6 @@
     "
 ! !
 
-!ExternalStream methodsFor:'reimplemented for speed'!
-
-nextAlphaNumericWord
-    "read the next word (i.e. up to non letter-or-digit) after first
-     skipping any whiteSpace.
-     Return a string containing those characters.
-     There is a limit of 1023 characters in the word - if longer,
-     it is truncated."
-
-%{  /* STACK: 2000 */
-    FILEPOINTER f;
-    int len;
-    char buffer[1024];
-    unsigned char ch;
-    int cnt = 0;
-    int ret, _buffered;
-    OBJ fp;
-
-    if (((fp = __INST(filePointer)) != nil)
-     && (__INST(mode) != @symbol(writeonly))
-    ) {
-	f = __FILEVal(fp);
-	_buffered = (__INST(buffered) == true);
-	if (_buffered) {
-	    __READING__(f)
-	}
-
-	/*
-	 * skip whiteSpace first ...
-	 */
-	do {
-	    __READBYTE__(ret, f, &ch, _buffered);
-	    if (ret > 0)
-		cnt++;
-	    else
-		break;
-	} while (
-#ifndef NON_ASCII
-		 (ch < ' ') ||
-#endif
-		 (ch == ' ' ) || (ch == '\t') || (ch == '\r')
-	      || (ch == '\n') || (ch == 0x0b));
-
-	len = 0;
-	while (ret > 0 &&
-	       (((ch >= 'a') && (ch <= 'z')) ||
-		((ch >= 'A') && (ch <= 'Z')) ||
-		((ch >= '0') && (ch <= '9')))
-	) {
-	    buffer[len++] = ch;
-	    if (len >= (sizeof(buffer)-1)) {
-		/* emergency */
-		break;
-	    }
-	    __READBYTE__(ret, f, &ch, _buffered);
-	    if (ret > 0)
-		cnt++;
-	    else
-		break;
-	}
-
-	if (ret <= 0) {
-	    if (ret < 0) {
-		__INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-		goto err;
-	    }
-	    else if (ret == 0)
-		__INST(hitEOF) = true;
-	} else {
-	    __UNGETC__(ch, f, _buffered);
-	    cnt--;
-	}
-
-	if (__isSmallInteger(__INST(position))) {
-	    INT np = __intVal(__INST(position)) + cnt;
-	    OBJ t;
-
-	    t = __MKINT(np); __INST(position) = t; __STORE(self, t);
-	} else {
-	    __INST(position) = nil; /* i.e. do not know */
-	}
-
-	if (len != 0) {
-	    buffer[len] = '\0';
-	    RETURN ( __MKSTRING_L(buffer, len) );
-	}
-    }
-err: ;
-%}.
-    hitEOF ifTrue:[^ self pastEndRead].
-    lastErrorNumber notNil ifTrue:[^ self readError].
-    filePointer isNil ifTrue:[^ self errorNotOpen].
-    mode == #writeonly ifTrue:[^ self errorWriteOnly].
-
-    ^ super nextAlphaNumericWord
-!
-
-nextMatchFor:anObject
-    "skip all objects up-to and including anObject, return anObject on success,
-     nil if end-of-file is reached before. The next read operation will return
-     the element after anObject.
-     Only single byte characters are currently supported."
-
-%{
-    FILEPOINTER f;
-    int ret, peekValue;
-    char c;
-    OBJ fp;
-
-    __INST(lastErrorNumber) = nil;
-    if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
-    ) {
-	if ((__INST(binary) == true) && __isSmallInteger(anObject)) {
-	    peekValue = __intVal(anObject) & 0xFF;
-	} else {
-	    if ((__INST(binary) != true) && __isCharacter(anObject)) {
-		peekValue = __intVal(_characterVal(anObject)) & 0xFF;
-	    } else {
-		peekValue = -1;
-	    }
-	}
-
-	if (peekValue >= 0) {
-	    int _buffered;
-
-	    __INST(position) = nil; /* i.e. do not know */
-	    f = __FILEVal(fp);
-
-	    if (_buffered = (__INST(buffered) == true)) {
-		__READING__(f)
-	    }
-
-	    for (;;) {
-		__READBYTE__(ret, f, &c, _buffered);
-		if (ret <= 0) {
-		    if (ret < 0)
-			__INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-		    else
-			__INST(hitEOF) = true;
-		    break;
-		}
-		if (c == peekValue) {
-		    RETURN (anObject);
-		}
-	    }
-	}
-    }
-%}.
-    hitEOF ifTrue:[^ self pastEndRead].
-    lastErrorNumber notNil ifTrue:[^ self readError].
-    filePointer isNil ifTrue:[^ self errorNotOpen].
-    ^ super nextMatchFor:anObject
-!
-
-peekFor:anObject
-    "return true and move past next element, if next == something.
-     Otherwise, stay and return false. False is also returned
-     when EOF is encountered.
-     The argument must be an integer if in binary, a character if in
-     text mode; only single byte characters are currently supported."
-
-%{
-    FILEPOINTER f;
-    unsigned char c;
-    int ret, peekValue, _buffered;
-    OBJ fp;
-
-    __INST(lastErrorNumber) = nil;
-    if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
-    ) {
-	if (__INST(binary) == true) {
-	    if (__isSmallInteger(anObject)) {
-		peekValue = __intVal(anObject) & 0xFF;
-	    } else {
-		goto bad;
-	    }
-	} else {
-	    if (__isCharacter(anObject)) {
-		peekValue = __intVal(_characterVal(anObject)) & 0xFF;
-	    } else {
-		goto bad;
-	    }
-	}
-
-	f = __FILEVal(fp);
-
-	_buffered = (__INST(buffered) == true);
-	if (_buffered) {
-	    __READING__(f)
-	}
-	__READBYTE__(ret, f, &c, _buffered);
-	if (ret > 0) {
-	    if (c == peekValue) {
-		if (__isSmallInteger(__INST(position))) {
-		    INT np = __intVal(__INST(position)) + 1;
-		    OBJ t;
-
-		    t = __MKINT(np); __INST(position) = t; __STORE(self, t);
-		} else {
-		    __INST(position) = nil; /* i.e. do not know */
-		}
-		RETURN (true);
-	    }
-	    __UNGETC__(c, f, _buffered);
-	    RETURN (false);
-	}
-	if (ret < 0) {
-	    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-	} else /* ret == 0 */
-	    __INST(hitEOF) = true;
-	}
-bad: ;
-%}.
-    ^ super peekFor:anObject
-!
-
-skipLine
-    "read the next line (characters up to newline) skip only;
-     return nil if EOF reached, self otherwise.
-     Not allowed in binary mode."
-
-%{  /* STACK:2000 */
-
-    FILEPOINTER f;
-    OBJ fp;
-    int ret, _buffered;
-    char c;
-
-    __INST(lastErrorNumber) = nil;
-    if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
-	&& (__INST(binary) != true)
-    ) {
-	f = __FILEVal(fp);
-	if (_buffered = (__INST(buffered) == true)) {
-	    __READING__(f)
-	}
-	for (;;) {
-	    __READBYTE__(ret, f, &c, _buffered);
-	    if (ret > 0) {
-		if (c == '\n')
-		    RETURN(self)
-	    } else
-		break;
-	}
-	if (ret < 0) {
-	    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-	} else /* ret == 0 */ {
-	    __INST(hitEOF) = true;
-	}
-    }
-%}.
-    hitEOF ifTrue:[^ self pastEndRead].
-    lastErrorNumber notNil ifTrue:[self readError. ^ self].
-    filePointer isNil ifTrue:[self errorNotOpen. ^ self].
-    binary ifTrue:[self errorBinary. ^ self].
-    self errorWriteOnly
-!
-
-skipSeparators
-    "skip all whitespace; next will return next non-white-space character
-     or nil if endOfFile reached. Not allowed in binary mode.
-     - reimplemented for speed"
-
-%{
-    FILEPOINTER f;
-    char c;
-    int ret, _buffered;
-    OBJ fp;
-
-    __INST(lastErrorNumber) = nil;
-    if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
-	&& (__INST(binary) != true)
-    ) {
-	f = __FILEVal(fp);
-	_buffered = (__INST(buffered) == true);
-	if (_buffered) {
-	    __READING__(f)
-	}
-
-	while (1) {
-	    __READBYTE__(ret, f, &c, _buffered);
-	    if (ret <= 0) {
-		if (ret < 0) {
-		    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-		} else /* ret == 0 */ {
-		    __INST(hitEOF) = true;
-		}
-		break;
-	    }
-	    switch (c) {
-		case ' ':
-		case '\t':
-		case '\n':
-		case '\r':
-		case '\b':
-		case '\f':
-		    break;
-
-		default:
-		    __UNGETC__(c, f, _buffered);
-		    RETURN ( __MKCHARACTER(c & 0xFF) );
-	    }
-	}
-    }
-%}.
-    hitEOF == true ifTrue:[^ self pastEndRead].
-    lastErrorNumber notNil ifTrue:[^ self readError].
-    filePointer isNil ifTrue:[^ self errorNotOpen].
-    (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
-    (binary == true) ifTrue:[^ self errorBinary].
-    ^ super skipSeparators.
-!
-
-skipSeparatorsExceptCR
-    "skip all whitespace but no newlines;
-     next will return next non-white-space character
-     or nil if endOfFile reached. Not allowed in binary mode.
-     - reimplemented for speed"
-
-%{
-    FILEPOINTER f;
-    char c;
-    int ret, _buffered;
-    OBJ fp;
-
-    __INST(lastErrorNumber) = nil;
-    if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
-	&& (__INST(binary) != true)
-    ) {
-	f = __FILEVal(fp);
-	_buffered = (__INST(buffered) == true);
-	if (_buffered) {
-	    __READING__(f)
-	}
-	while (1) {
-	    __READBYTE__(ret, f, &c, _buffered);
-	    if (ret <= 0) {
-		if (ret < 0) {
-		    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-		} else /* ret == 0 */ {
-		    __INST(hitEOF) = true;
-		}
-		break;
-	    }
-	    switch (c) {
-		case ' ':
-		case '\t':
-		case '\b':
-		case '\f':
-		    break;
-
-		default:
-		    __UNGETC__(c, f, _buffered);
-		    RETURN ( __MKCHARACTER(c & 0xFF) );
-	    }
-	}
-    }
-%}.
-    hitEOF ifTrue:[^ self pastEndRead].
-    lastErrorNumber notNil ifTrue:[^ self readError].
-    filePointer isNil ifTrue:[^ self errorNotOpen].
-    (mode == #writeonly) ifTrue:[^ self errorWriteOnly].
-    ^ self errorBinary.
-!
-
-skipThrough:aCharacter
-    "skip all characters up-to and including aCharacter.
-     Return the receiver if skip was successful,
-     otherwise (i.e. if not found) return nil and leave the stream positioned at the end.
-     The next read operation will return the character after aCharacter.
-     The argument, aCharacter must be character, or integer when in binary mode.
-     Only single byte characters are currently supported."
-
-%{
-    FILEPOINTER f;
-    REGISTER int cSearch;
-    unsigned char c;
-    int ret, _buffered;
-    OBJ fp;
-
-    __INST(lastErrorNumber) = nil;
-    if (((fp = __INST(filePointer)) != nil)
-	&& (__INST(mode) != @symbol(writeonly))
-    ) {
-	if (__INST(binary) == true) {
-	    /* searched for object must be a smallInteger */
-	    if (! __isSmallInteger(aCharacter)) goto badArgument;
-	    cSearch = __intVal(aCharacter);
-	} else {
-	    /* searched for object must be a character */
-	    if (! __isCharacter(aCharacter)) goto badArgument;
-	    cSearch = __intVal(_characterVal(aCharacter));
-	}
-	/* Q: should we just say: "not found" ? */
-	if ((cSearch < 0) || (cSearch > 255)) goto badArgument;
-
-	f = __FILEVal(fp);
-	if (_buffered = (__INST(buffered) == true)) {
-	    __READING__(f)
-	}
-
-	while (1) {
-	    __READBYTE__(ret, f, &c, _buffered);
-	    if (ret <= 0) {
-		if (ret < 0) {
-		    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-		} else /* ret == 0 */ {
-		    __INST(hitEOF) = true;
-		}
-		break;
-	    }
-	    if (c == cSearch) {
-		RETURN (self);
-	    }
-	}
-    }
-badArgument: ;
-%}.
-    hitEOF ifTrue:[^ nil].
-    lastErrorNumber notNil ifTrue:[self readError. ^ self].
-    filePointer isNil ifTrue:[self errorNotOpen. ^ self].
-    (mode == #writeonly) ifTrue:[self errorWriteOnly. ^ self].
-    "
-     argument must be integer/character in binary mode,
-     character in text mode
-    "
-    self error:'invalid argument'.
-
-    "
-     |s|
-     s := 'Makefile' asFilename readStream.
-     s skipThrough:$=.
-     s next:10
-    "
-!
-
-skipToAll:aString
-    "skip for the sequence given by the argument, aCollection;
-     return nil if not found, self otherwise.
-     On a successful match, the next read will return characters of aString."
-
-    |oldPos|
-
-    oldPos := self position.
-    (self skipThroughAll:aString) isNil ifTrue:[
-	"
-	 restore position
-	"
-	self position:oldPos.
-	^ nil
-    ].
-    "
-     position before match-string
-    "
-    self position:(self position - aString size).
-    ^ self
-
-    "
-     |s|
-     s := 'Makefile' asFilename readStream.
-     s skipToAll:'are'.
-     s next:10
-    "
-
-    "Modified: 26.6.1996 / 09:22:05 / cg"
-! !
-
 !ExternalStream methodsFor:'rel5 protocol'!
 
 atEndFile:filePointer
@@ -5882,7 +5877,7 @@
 !ExternalStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.301 2007-01-24 15:17:48 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.302 2007-01-24 16:57:22 stefan Exp $'
 ! !
 
 ExternalStream initialize!