PositionableStream.st
changeset 5223 06cf79da1d4a
parent 5098 4cb82101e94a
child 5228 637a1a93b740
--- a/PositionableStream.st	Mon Jan 31 20:07:40 2000 +0100
+++ b/PositionableStream.st	Tue Feb 01 14:19:49 2000 +0100
@@ -13,7 +13,7 @@
 PeekableStream subclass:#PositionableStream
 	instanceVariableNames:'collection position readLimit writeLimit'
 	classVariableNames:'ZeroPosition InvalidPositionErrorSignal ErrorDuringFileInSignal
-		ChunkSeparator'
+		ChunkSeparator CurrentFileInDirectoryQuerySignal'
 	poolDictionaries:''
 	category:'Streams'
 !
@@ -72,6 +72,11 @@
         InvalidPositionErrorSignal nameClass:self message:#invalidPositionErrorSignal.
         InvalidPositionErrorSignal notifierString:'invalid position'.
 
+        CurrentFileInDirectoryQuerySignal := QuerySignal new.
+        CurrentFileInDirectoryQuerySignal nameClass:self message:#currentFileInDirectoryQuerySignal.
+        CurrentFileInDirectoryQuerySignal notifierString:'query for current directory when filing in'.
+        CurrentFileInDirectoryQuerySignal handlerBlock:[:ex | ex proceedWith:Filename currentDirectory].
+
         ChunkSeparator := $!!.
 
         ZeroPosition := 1.
@@ -103,6 +108,13 @@
 
 !PositionableStream class methodsFor:'Signal constants'!
 
+currentFileInDirectoryQuerySignal
+    "return the querySignal, which can be used to ask for the current directory
+     during a fileIn (that is the directory where the filed-in file resides)"
+
+    ^ CurrentFileInDirectoryQuerySignal
+!
+
 invalidPositionErrorSignal
     "return the signal raised if positioning is attempted to an
      invalid position (i.e. before the begin of the stream or after
@@ -429,10 +441,14 @@
         ^ self fileInNotifying:(SourceFileLoader on:self) passChunk:true.
     ].
 
-    [
+    [   |thisDirectory|
+
         oldPath := Smalltalk systemPath.
-        Smalltalk systemPath:(oldPath copy addFirst:(self pathName asFilename directoryName); yourself).
-        val := self fileInNotifying:(SourceFileLoader on:self) passChunk:true.
+        thisDirectory := self pathName asFilename directory.
+        Smalltalk systemPath:(oldPath copy addFirst:thisDirectory pathName; yourself).
+        CurrentFileInDirectoryQuerySignal answer:thisDirectory do:[
+            val := self fileInNotifying:(SourceFileLoader on:self) passChunk:true.
+        ]
     ] valueNowOrOnUnwindDo:[
         Smalltalk systemPath:oldPath.
     ].
@@ -1037,6 +1053,6 @@
 !PositionableStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/PositionableStream.st,v 1.86 1999-12-14 14:00:03 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/PositionableStream.st,v 1.87 2000-02-01 13:19:49 tm Exp $'
 ! !
 PositionableStream initialize!