support for V'Age fileIn (application stuff)
authorClaus Gittinger <cg@exept.de>
Mon, 15 Jun 1998 21:41:00 +0200
changeset 3584 099a64bc9b63
parent 3583 5b0111ca8692
child 3585 96a7143a8ef9
support for V'Age fileIn (application stuff)
PosStream.st
PositionableStream.st
--- a/PosStream.st	Mon Jun 15 21:39:03 1998 +0200
+++ b/PosStream.st	Mon Jun 15 21:41:00 1998 +0200
@@ -456,8 +456,16 @@
      Someone (which is usually some codeView) is notified of errors."
 
     |lastValue pkg spc spaces
-     packageQuerySignal nameSpaceQuerySignal usedNameSpaceQuerySignal|
+     packageQuerySignal nameSpaceQuerySignal usedNameSpaceQuerySignal
+     changeDefaultApplicationNotificationSignal
+     defaultApplicationQuerySignal defaultApplication
+     handledSignals|
 
+    "/ support for V'Age applications
+    defaultApplicationQuerySignal := Class defaultApplicationQuerySignal.
+    changeDefaultApplicationNotificationSignal := Class changeDefaultApplicationNotificationSignal.
+
+    "/ support for ST/X's namespaces & packages
     packageQuerySignal := Class packageQuerySignal.
     nameSpaceQuerySignal := Class nameSpaceQuerySignal.
     usedNameSpaceQuerySignal := Class usedNameSpaceQuerySignal.
@@ -477,79 +485,109 @@
     ] ifTrue:[
         spaces := someone usedNameSpaces
     ].
-    packageQuerySignal answer:pkg
-    do:[
-        usedNameSpaceQuerySignal answer:spaces
-        do:[
-            nameSpaceQuerySignal answer:spc
-            do:[
-                |methodRedefinitionSignal|
+    (someone respondsTo:#defaultApplication) ifFalse:[
+        defaultApplication := defaultApplicationQuerySignal raise.
+    ] ifTrue:[
+        defaultApplication := someone defaultApplication
+    ].
 
-                methodRedefinitionSignal := Class methodRedefinitionSignal.
-
-                "
-                 catch any errors during fileIn 
-                 - offer debug/abort/continue choice
-                "
-                ErrorSignal handle:[:ex |
-                    |action what sender msg param oldPackage newPackage|
+    handledSignals := SignalSet new.
+    handledSignals add:changeDefaultApplicationNotificationSignal.
+    handledSignals add:packageQuerySignal.
+    handledSignals add:usedNameSpaceQuerySignal.
+    handledSignals add:nameSpaceQuerySignal.
+    handledSignals add:defaultApplicationQuerySignal.
+    handledSignals add:ErrorSignal.
+    handledSignals handle:[:ex |
+        |sig action what sender msg param oldPackage newPackage|
 
-                    ex signal == Signal noHandlerSignal ifTrue:[
-                        ex parameter rejected ifTrue:[
-                            ex reject
-                        ]
-                    ].
+        sig := ex signal.
+        sig == changeDefaultApplicationNotificationSignal ifTrue:[
+            "/ invoked via #becomeDefault to set the defaultApp and the package.
+            "/ (only when filing in V'Age code)
+            defaultApplication := ex parameter.
+            pkg := defaultApplication name asSymbol.
+            ex proceed
+        ].
+        sig == defaultApplicationQuerySignal ifTrue:[
+            "/ query for the application to add classes & methods into
+            "/ (only when filing in V'Age code)
+            ex proceedWith:defaultApplication
+        ].
+        sig == packageQuerySignal ifTrue:[
+            "/ query for the package to use for classes & methods
+            ex proceedWith:pkg
+        ].
+        sig == usedNameSpaceQuerySignal ifTrue:[
+            "/ query for the namespaces searched when encountering globals
+            ex proceedWith:spaces
+        ].
+        sig == nameSpaceQuerySignal ifTrue:[
+            "/ query for the namespace to install new classes in
+            ex proceedWith:spc
+        ].
 
-                    "/ for your convenience ...
-                    ex signal == methodRedefinitionSignal ifTrue:[
-                        param := ex parameter. "/ an association: oldMethod -> newMethod
-                        oldPackage := param key package.
-                        newPackage := param value package.
-                        msg := 'trying to overwrite method:\\    %1\\in package ''' 
-                               , oldPackage , ''' with method from package ''' , newPackage , ''''
-                    ] ifFalse:[
-                        msg := 'error in fileIn: %1'
-                    ].
+        sig == Signal noHandlerSignal ifTrue:[
+            ex parameter rejected ifTrue:[
+                ex reject
+            ]
+        ].
 
-                    what := ex errorString.
-                    what isNil ifTrue:[
-                        what := ex signal notifierString.
-                    ].
-
-                    "/ handle the case where no GUI has been built in,
-                    "/ just abort the fileIn with a notification
+        "/ for your convenience ...
+        sig == Class methodRedefinitionSignal ifTrue:[
+            param := ex parameter. "/ an association: oldMethod -> newMethod
+            oldPackage := param key package.
+            newPackage := param value package.
+            msg := 'trying to overwrite method:\\    %1\\in package ''' 
+                   , oldPackage , ''' with method from package ''' , newPackage , ''''
+        ] ifFalse:[
+            msg := 'error in fileIn: %1'
+        ].
 
-                    Display isNil ifTrue:[
-                        sender := ex suspendedContext sender.
-                        self notify:(what , 
-                                     ' in ' , sender receiver class name ,
-                                     '>>>' , sender selector).
-                        ex return
-                    ].
+        what := ex errorString.
+        what isNil ifTrue:[
+            what := ex signal notifierString.
+        ].
+
+        "/ handle the case where no GUI has been built in,
+        "/ just abort the fileIn with a notification
 
-                    "/ otherwise ask what should be done now and either
-                    "/ continue or abort the fileIn
+        Display isNil ifTrue:[
+            sender := ex suspendedContext sender.
+            self notify:(what , 
+                         ' in ' , sender receiver class name ,
+                         '>>>' , sender selector).
+            ex return
+        ].
+
+        msg := msg bindWith:what.
+
+        sig == Object haltSignal ifTrue:[
+            sender := ex suspendedContext.
+            msg := msg , ('\\in ' , sender receiver class name , '>>>' , sender selector) withCRs
+        ].
 
-                    action := self askForDebug:(msg bindWith:what) withCRs.
-                    action == #continue ifTrue:[
-                        ex proceed
-                    ].
-                    action == #abort ifTrue:[
-                        ex return
-                    ].
-                    "/ (ex signal) enterDebuggerWith:ex message:what.
-                    ex reject
-                ] do:[
-                    [self atEnd] whileFalse:[
-                        lastValue := self fileInNextChunkNotifying:someone passChunk:passChunk
-                    ]
-                ].
-            ].
+        "/ otherwise ask what should be done now and either
+        "/ continue or abort the fileIn
+
+        action := self askForDebug:msg withCRs.
+        action == #continue ifTrue:[
+            ex proceed
         ].
+        action == #abort ifTrue:[
+            ex return
+        ].
+
+        "/ (ex signal) enterDebuggerWith:ex message:what.
+        ex reject
+    ] do:[
+        [self atEnd] whileFalse:[
+            lastValue := self fileInNextChunkNotifying:someone passChunk:passChunk
+        ]
     ].
     ^ lastValue
 
-    "Modified: 14.10.1997 / 15:55:11 / cg"
+    "Modified: / 15.6.1998 / 21:40:27 / cg"
 ! !
 
 !PositionableStream methodsFor:'positioning'!
@@ -795,6 +833,6 @@
 !PositionableStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/PosStream.st,v 1.64 1998-06-15 16:03:52 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/PosStream.st,v 1.65 1998-06-15 19:41:00 cg Exp $'
 ! !
 PositionableStream initialize!
--- a/PositionableStream.st	Mon Jun 15 21:39:03 1998 +0200
+++ b/PositionableStream.st	Mon Jun 15 21:41:00 1998 +0200
@@ -456,8 +456,16 @@
      Someone (which is usually some codeView) is notified of errors."
 
     |lastValue pkg spc spaces
-     packageQuerySignal nameSpaceQuerySignal usedNameSpaceQuerySignal|
+     packageQuerySignal nameSpaceQuerySignal usedNameSpaceQuerySignal
+     changeDefaultApplicationNotificationSignal
+     defaultApplicationQuerySignal defaultApplication
+     handledSignals|
 
+    "/ support for V'Age applications
+    defaultApplicationQuerySignal := Class defaultApplicationQuerySignal.
+    changeDefaultApplicationNotificationSignal := Class changeDefaultApplicationNotificationSignal.
+
+    "/ support for ST/X's namespaces & packages
     packageQuerySignal := Class packageQuerySignal.
     nameSpaceQuerySignal := Class nameSpaceQuerySignal.
     usedNameSpaceQuerySignal := Class usedNameSpaceQuerySignal.
@@ -477,79 +485,109 @@
     ] ifTrue:[
         spaces := someone usedNameSpaces
     ].
-    packageQuerySignal answer:pkg
-    do:[
-        usedNameSpaceQuerySignal answer:spaces
-        do:[
-            nameSpaceQuerySignal answer:spc
-            do:[
-                |methodRedefinitionSignal|
+    (someone respondsTo:#defaultApplication) ifFalse:[
+        defaultApplication := defaultApplicationQuerySignal raise.
+    ] ifTrue:[
+        defaultApplication := someone defaultApplication
+    ].
 
-                methodRedefinitionSignal := Class methodRedefinitionSignal.
-
-                "
-                 catch any errors during fileIn 
-                 - offer debug/abort/continue choice
-                "
-                ErrorSignal handle:[:ex |
-                    |action what sender msg param oldPackage newPackage|
+    handledSignals := SignalSet new.
+    handledSignals add:changeDefaultApplicationNotificationSignal.
+    handledSignals add:packageQuerySignal.
+    handledSignals add:usedNameSpaceQuerySignal.
+    handledSignals add:nameSpaceQuerySignal.
+    handledSignals add:defaultApplicationQuerySignal.
+    handledSignals add:ErrorSignal.
+    handledSignals handle:[:ex |
+        |sig action what sender msg param oldPackage newPackage|
 
-                    ex signal == Signal noHandlerSignal ifTrue:[
-                        ex parameter rejected ifTrue:[
-                            ex reject
-                        ]
-                    ].
+        sig := ex signal.
+        sig == changeDefaultApplicationNotificationSignal ifTrue:[
+            "/ invoked via #becomeDefault to set the defaultApp and the package.
+            "/ (only when filing in V'Age code)
+            defaultApplication := ex parameter.
+            pkg := defaultApplication name asSymbol.
+            ex proceed
+        ].
+        sig == defaultApplicationQuerySignal ifTrue:[
+            "/ query for the application to add classes & methods into
+            "/ (only when filing in V'Age code)
+            ex proceedWith:defaultApplication
+        ].
+        sig == packageQuerySignal ifTrue:[
+            "/ query for the package to use for classes & methods
+            ex proceedWith:pkg
+        ].
+        sig == usedNameSpaceQuerySignal ifTrue:[
+            "/ query for the namespaces searched when encountering globals
+            ex proceedWith:spaces
+        ].
+        sig == nameSpaceQuerySignal ifTrue:[
+            "/ query for the namespace to install new classes in
+            ex proceedWith:spc
+        ].
 
-                    "/ for your convenience ...
-                    ex signal == methodRedefinitionSignal ifTrue:[
-                        param := ex parameter. "/ an association: oldMethod -> newMethod
-                        oldPackage := param key package.
-                        newPackage := param value package.
-                        msg := 'trying to overwrite method:\\    %1\\in package ''' 
-                               , oldPackage , ''' with method from package ''' , newPackage , ''''
-                    ] ifFalse:[
-                        msg := 'error in fileIn: %1'
-                    ].
+        sig == Signal noHandlerSignal ifTrue:[
+            ex parameter rejected ifTrue:[
+                ex reject
+            ]
+        ].
 
-                    what := ex errorString.
-                    what isNil ifTrue:[
-                        what := ex signal notifierString.
-                    ].
-
-                    "/ handle the case where no GUI has been built in,
-                    "/ just abort the fileIn with a notification
+        "/ for your convenience ...
+        sig == Class methodRedefinitionSignal ifTrue:[
+            param := ex parameter. "/ an association: oldMethod -> newMethod
+            oldPackage := param key package.
+            newPackage := param value package.
+            msg := 'trying to overwrite method:\\    %1\\in package ''' 
+                   , oldPackage , ''' with method from package ''' , newPackage , ''''
+        ] ifFalse:[
+            msg := 'error in fileIn: %1'
+        ].
 
-                    Display isNil ifTrue:[
-                        sender := ex suspendedContext sender.
-                        self notify:(what , 
-                                     ' in ' , sender receiver class name ,
-                                     '>>>' , sender selector).
-                        ex return
-                    ].
+        what := ex errorString.
+        what isNil ifTrue:[
+            what := ex signal notifierString.
+        ].
+
+        "/ handle the case where no GUI has been built in,
+        "/ just abort the fileIn with a notification
 
-                    "/ otherwise ask what should be done now and either
-                    "/ continue or abort the fileIn
+        Display isNil ifTrue:[
+            sender := ex suspendedContext sender.
+            self notify:(what , 
+                         ' in ' , sender receiver class name ,
+                         '>>>' , sender selector).
+            ex return
+        ].
+
+        msg := msg bindWith:what.
+
+        sig == Object haltSignal ifTrue:[
+            sender := ex suspendedContext.
+            msg := msg , ('\\in ' , sender receiver class name , '>>>' , sender selector) withCRs
+        ].
 
-                    action := self askForDebug:(msg bindWith:what) withCRs.
-                    action == #continue ifTrue:[
-                        ex proceed
-                    ].
-                    action == #abort ifTrue:[
-                        ex return
-                    ].
-                    "/ (ex signal) enterDebuggerWith:ex message:what.
-                    ex reject
-                ] do:[
-                    [self atEnd] whileFalse:[
-                        lastValue := self fileInNextChunkNotifying:someone passChunk:passChunk
-                    ]
-                ].
-            ].
+        "/ otherwise ask what should be done now and either
+        "/ continue or abort the fileIn
+
+        action := self askForDebug:msg withCRs.
+        action == #continue ifTrue:[
+            ex proceed
         ].
+        action == #abort ifTrue:[
+            ex return
+        ].
+
+        "/ (ex signal) enterDebuggerWith:ex message:what.
+        ex reject
+    ] do:[
+        [self atEnd] whileFalse:[
+            lastValue := self fileInNextChunkNotifying:someone passChunk:passChunk
+        ]
     ].
     ^ lastValue
 
-    "Modified: 14.10.1997 / 15:55:11 / cg"
+    "Modified: / 15.6.1998 / 21:40:27 / cg"
 ! !
 
 !PositionableStream methodsFor:'positioning'!
@@ -795,6 +833,6 @@
 !PositionableStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/PositionableStream.st,v 1.64 1998-06-15 16:03:52 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/PositionableStream.st,v 1.65 1998-06-15 19:41:00 cg Exp $'
 ! !
 PositionableStream initialize!