--- 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!