ExternalStream.st
changeset 85 1343af456e28
parent 77 6c38ca59927f
child 88 81dacba7a63a
--- a/ExternalStream.st	Thu Jun 02 13:20:08 1994 +0200
+++ b/ExternalStream.st	Thu Jun 02 13:21:56 1994 +0200
@@ -12,7 +12,7 @@
 
 ReadWriteStream subclass:#ExternalStream
        instanceVariableNames:'filePointer mode buffered binary useCRLF hitEOF'
-       classVariableNames:'Lobby'
+       classVariableNames:'Lobby LastErrorNumber'
        poolDictionaries:''
        category:'Streams-External'
 !
@@ -22,7 +22,7 @@
 COPYRIGHT (c) 1988 by Claus Gittinger
               All Rights Reserved
 
-$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.16 1994-05-17 10:07:23 claus Exp $
+$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.17 1994-06-02 11:20:13 claus Exp $
 
 written 88 by claus
 '!
@@ -71,6 +71,27 @@
     reOpen in subclasses for more information.
     For streams sitting on some communication channel (i.e. Pipes and Sockets) you should
     reestablish the stream upon image restart (make someone dependent on ObjectMemory).
+
+    Instance variables:
+
+	filePointer 	<Integer>	the unix FILE*; somehow mapped to an integer
+					(notice: not the fd)
+        mode 		<Symbol>	#readwrite, #readonly or #writeonly
+	buffered 	<Boolean>	true, if buffered (i.e. collects characters - does
+					not output immediately)
+	binary 		<Boolean>	true if in binary mode (reads bytes instead of chars)
+	useCRLF 	<Boolean>	true, if lines should be terminated with crlf instead
+					of lf. (i.e. if file is an MSDOS-type file)
+	hitEOF 		<Boolean>	true, if EOF was reached
+
+
+    Class variables:
+	Lobby		<Registry>	keeps track of used ext-streams (to free up FILE*'s)
+
+	LastErrorNumber <Integer>	the value of errno (only valid right after the error -
+					updated with next i/o operation)
+
+    Question: should lastErrorNumber be kept instance-specific ?
 "
 ! !
 
@@ -153,6 +174,12 @@
 
 !ExternalStream methodsFor:'error handling'!
 
+lastErrorNumber
+    "return the last error"
+
+    ^ LastErrorNumber
+!
+
 errorNotOpen
     "report an error, that the stream has not been opened"
 
@@ -415,7 +442,6 @@
     int ret, ioNum, ioArg;
     int savInt;
     extern int _immediateInterrupt;
-    extern OBJ ErrorNumber;
     extern errno;
 
     if (_INST(filePointer) != nil) {
@@ -431,7 +457,7 @@
             if (ret >= 0) {
                 RETURN ( _MKSMALLINT(ret) );
             }
-            ErrorNumber = _MKSMALLINT(errno);
+            ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
             RETURN ( nil );
         }
     }
@@ -456,7 +482,6 @@
     FILE *f;
     int ret, ioNum, savInt;
     extern int _immediateInterrupt;
-    extern OBJ ErrorNumber;
     extern errno;
 
     if (_INST(filePointer) != nil) {
@@ -477,7 +502,7 @@
             if (ret >= 0) {
                 RETURN ( _MKSMALLINT(ret) );
             }
-            ErrorNumber = _MKSMALLINT(errno);
+            ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
             RETURN ( nil );
         }
     }
@@ -499,7 +524,6 @@
     FILE *f;
     unsigned char byte;
     int cnt, savInt;
-    extern OBJ ErrorNumber;
     extern errno;
     extern int _immediateInterrupt;
 
@@ -523,7 +547,7 @@
             RETURN ( _MKSMALLINT(byte) );
         }
         if (cnt < 0) {
-            ErrorNumber = _MKSMALLINT(errno);
+            ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
         }
         _INST(hitEOF) = true;
         RETURN ( nil );
@@ -566,7 +590,6 @@
     int cnt, offs;
     int objSize, nInstVars, nInstBytes, savInt;
     char *cp;
-    extern OBJ ErrorNumber;
     extern errno;
     OBJ pos;
     extern int _immediateInterrupt;
@@ -613,7 +636,7 @@
                         _INST(hitEOF) = true;
                     RETURN ( _MKSMALLINT(cnt) );
                 }
-                ErrorNumber = _MKSMALLINT(errno);
+                ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
                 RETURN ( nil );
             }
         }
@@ -636,7 +659,6 @@
 
 %{  /* NOCONTEXT */
     extern int _immediateInterrupt;
-    extern OBJ ErrorNumber;
     int savInt;
 
     if (_INST(binary) == true) {
@@ -663,7 +685,7 @@
                 if (cnt == 0)
                     _INST(hitEOF) = true;
                 else
-                    ErrorNumber = _MKSMALLINT(errno);
+                    ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
                 RETURN ( nil );
             }
             do {
@@ -684,7 +706,7 @@
                 if (cnt == 0)
                     _INST(hitEOF) = true;
                 else
-                    ErrorNumber = _MKSMALLINT(errno);
+                    ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
                 RETURN ( _MKSMALLINT(hi & 0xFF) );
             }
             if (_INST(position) != nil) {
@@ -1009,7 +1031,6 @@
 
     FILE *f;
     char c;
-    extern OBJ ErrorNumber;
     extern errno;
     OBJ pos;
     int cnt, savInt;
@@ -1043,7 +1064,7 @@
                     _INST(position) = _MKSMALLINT(_intVal(pos) + 1);
                 RETURN ( self );
             }
-            ErrorNumber = _MKSMALLINT(errno);
+            ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
             RETURN (nil);
         }
     }
@@ -1088,7 +1109,6 @@
     int cnt, offs;
     int objSize, nInstVars, nInstBytes;
     char *cp;
-    extern OBJ ErrorNumber;
     extern errno;
     OBJ oClass;
     OBJ pos;
@@ -1141,7 +1161,7 @@
                         _INST(position) = _MKSMALLINT(_intVal(pos) + cnt);
                     RETURN ( _MKSMALLINT(cnt) );
                 }
-                ErrorNumber = _MKSMALLINT(errno);
+                ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
                 RETURN ( nil );
             }
         }
@@ -1165,7 +1185,6 @@
     int num;
     char bytes[2];
     FILE *f;
-    extern OBJ ErrorNumber;
     extern errno;
     int savInt;
     extern int _immediateInterrupt;
@@ -1207,7 +1226,7 @@
                 }
                 RETURN ( self );
             }
-            ErrorNumber = _MKSMALLINT(errno);
+            ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
             return ( nil );
         }
     }
@@ -1229,7 +1248,6 @@
     int num;
     char bytes[4];
     FILE *f;
-    extern OBJ ErrorNumber;
     extern errno;
     int cnt, savInt;
     extern int _immediateInterrupt;
@@ -1272,7 +1290,7 @@
                 }
                 RETURN ( self );
             }
-            ErrorNumber = _MKSMALLINT(errno);
+            ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
             return ( nil );
         }
     }
@@ -1440,7 +1458,6 @@
 
     FILE *f;
     char c;
-    extern OBJ ErrorNumber;
     extern errno;
     int cnt;
     OBJ pos;
@@ -1480,7 +1497,7 @@
                         }
                         RETURN ( self );
                     }
-                    ErrorNumber = _MKSMALLINT(errno);
+                    ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
                     RETURN ( nil );
                 }
             } else {
@@ -1509,7 +1526,6 @@
     FILE *f;
     unsigned char *cp;
     int len, cnt;
-    extern OBJ ErrorNumber;
     extern errno;
     OBJ pos;
     int savInt;
@@ -1566,7 +1582,7 @@
                 }
                 RETURN ( self );
             }
-            ErrorNumber = _MKSMALLINT(errno);
+            ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
             RETURN ( nil );
         }
     }
@@ -1585,7 +1601,6 @@
     FILE *f;
     unsigned char *cp;
     int len, cnt, index1, index2;
-    extern OBJ ErrorNumber;
     extern errno;
     int savInt;
     extern int _immediateInterrupt;
@@ -1649,7 +1664,7 @@
                     }
                     RETURN ( self );
                 }
-                ErrorNumber = _MKSMALLINT(errno);
+                ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
                 RETURN ( nil );
             }
         }
@@ -1665,7 +1680,6 @@
 %{  /* NOCONTEXT */
 
     FILE *f;
-    extern OBJ ErrorNumber;
     extern errno;
     extern int _immediateInterrupt;
     int cnt, savInt;
@@ -1698,7 +1712,7 @@
                 }
                 RETURN ( self );
             }
-            ErrorNumber = _MKSMALLINT(errno);
+            ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
             return ( nil );
         }
     }
@@ -1821,7 +1835,6 @@
     int len, cnt;
     OBJ pos;
     char *s;
-    extern OBJ ErrorNumber;
     extern errno;
     int savInt;
     extern int _immediateInterrupt;
@@ -1869,7 +1882,7 @@
                     }
                 }
                 _immediateInterrupt = savInt;
-                ErrorNumber = _MKSMALLINT(errno);
+                ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
                 RETURN ( nil );
             }
         }