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