Smalltalk.st
changeset 5045 7de1d05d5785
parent 5044 dc829a004785
child 5047 75b3fb7c462d
--- a/Smalltalk.st	Thu Dec 02 00:00:29 1999 +0100
+++ b/Smalltalk.st	Thu Dec 02 01:18:40 1999 +0100
@@ -3210,7 +3210,7 @@
      nil uses the value from SilentLoading."
 
     |shortName longName libName newClass ok wasLazy wasSilent sharedLibExtension inStream mgr fn
-     packageDir i|
+     packageDir packageFile i bos|
 
     wasLazy := Compiler compileLazy:loadLazy.
     beSilent notNil ifTrue:[
@@ -3229,9 +3229,7 @@
             shortName := self fileNameForClass:aClassName.
             package notNil ifTrue:[
                 packageDir := package asString.
-                (i := packageDir indexOf:$:) ~~ 0 ifTrue:[
-                    packageDir := packageDir copyFrom:i + 1.
-                ]
+                packageDir := packageDir copyReplaceAll:$: with:$/.
             ].
 
             Class packageQuerySignal answer:package
@@ -3308,11 +3306,36 @@
                          in a package subdir of the source-directory ...
                         "
                         ok ifFalse:[
-                            packageDir notNil ifTrue:[
-                                (ok := self fileIn:(packageDir , '/' , shortName , '.cls') lazy:loadLazy silent:beSilent)
+                            (packageDir notNil and:[BinaryObjectStorage notNil]) ifTrue:[
+                                packageFile := self getPackageFileName:(packageDir , '/classes/' , shortName , '.cls').
+                                packageFile isNil ifTrue:[
+                                    packageFile := (packageDir , '/classes/' , shortName , '.cls').
+                                ].
+                                (ok := self fileIn:packageFile lazy:loadLazy silent:beSilent)
                                 ifFalse:[
                                     shortName ~= aClassName ifTrue:[
-                                        ok := self fileIn:(packageDir , '/' , longName , '.cls') lazy:loadLazy silent:beSilent
+                                        packageFile := self getPackageFileName:(packageDir , '/classes/' , longName , '.cls').
+                                        packageFile isNil ifTrue:[
+                                            packageFile := (packageDir , '/classes/' , longName , '.cls').
+                                        ].
+                                        ok := self fileIn:packageFile lazy:loadLazy silent:beSilent
+                                    ]
+                                ].
+
+                                zarFn := self getPackageFileName:(packageDir , '/classes.zip').
+                                zarFn notNil ifTrue:[
+                                    zar := ZipArchive oldFileNamed:zarFn.
+                                    zar notNil ifTrue:[
+                                        entry := zar extract:(shortName , '.cls').
+                                        (entry isNil and:[shortName ~= longName]) ifTrue:[
+                                            entry := zar extract:(longName , '.cls').
+                                        ].
+                                        entry notNil ifTrue:[
+                                            bos := BinaryObjectStorage onOld:(entry asByteArray readStream).
+                                            bos next.
+                                            bos close.
+                                            ok := true
+                                        ].
                                     ]
                                 ]
                             ]
@@ -3350,26 +3373,49 @@
                             "
                             ok ifFalse:[
                                 packageDir notNil ifTrue:[
-                                    fn := packageDir , '/' , shortName , '.st'.
-                                    (ok := self fileIn:fn lazy:loadLazy silent:beSilent)
+                                    packageFile := self getPackageFileName:(packageDir , '/source/' , shortName , '.st').
+                                    packageFile isNil ifTrue:[
+                                        packageFile := (packageDir , '/source/' , shortName , '.st').
+                                    ].
+                                    (ok := self fileIn:packageFile lazy:loadLazy silent:beSilent)
                                     ifFalse:[
                                         shortName ~= aClassName ifTrue:[
-                                            fn := packageDir , '/' , longName , '.st'.
-                                            ok := self fileIn:fn lazy:loadLazy silent:beSilent
+                                            packageFile := self getPackageFileName:(packageDir , '/source/' , longName , '.st').
+                                            packageFile isNil ifTrue:[
+                                                packageFile := (packageDir , '/source/' , longName , '.st').
+                                            ].
+                                            ok := self fileIn:packageFile lazy:loadLazy silent:beSilent
                                         ].
                                         ok ifFalse:[
-                                            "
-                                             ... and in the standard source-directory
-                                            "
-                                            fn := 'source/' , packageDir , '/' , shortName , '.st'.
-                                            (ok := self fileIn:fn lazy:loadLazy silent:beSilent)
+
+                                            packageFile := self getPackageFileName:(packageDir , '/' , shortName , '.st').
+                                            packageFile isNil ifTrue:[
+                                                packageFile := (packageDir , '/' , shortName , '.st').
+                                            ].
+                                            (ok := self fileIn:packageFile lazy:loadLazy silent:beSilent)
                                             ifFalse:[
                                                 shortName ~= aClassName ifTrue:[
-                                                    fn := 'source/' , packageDir , '/' , longName , '.st'.
-                                                    ok := self fileIn:fn lazy:loadLazy silent:beSilent
+                                                    packageFile := self getPackageFileName:(packageDir , '/' , longName , '.st').
+                                                    packageFile isNil ifTrue:[
+                                                        packageFile := (packageDir , '/' , longName , '.st').
+                                                    ].
+                                                    ok := self fileIn:packageFile lazy:loadLazy silent:beSilent
+                                                ].
+                                                ok ifFalse:[
+                                                    "
+                                                     ... and in the standard source-directory
+                                                    "
+                                                    fn := 'source/' , packageDir , '/' , shortName , '.st'.
+                                                    (ok := self fileIn:fn lazy:loadLazy silent:beSilent)
+                                                    ifFalse:[
+                                                        shortName ~= aClassName ifTrue:[
+                                                            fn := 'source/' , packageDir , '/' , longName , '.st'.
+                                                            ok := self fileIn:fn lazy:loadLazy silent:beSilent
+                                                        ]
+                                                    ]
                                                 ]
-                                            ]
-                                        ]
+                                            ].
+                                        ].
                                     ].
                                 ]
                             ].
@@ -3379,8 +3425,11 @@
                             "
                             ok ifFalse:[
                                 packageDir notNil ifTrue:[
-                                    zarFn := packageDir asFilename withSuffix:'zip'.
-                                    zarFn := self getSourceFileName:zarFn.
+                                    zarFn := self getPackageFileName:(packageDir , '/source.zip').
+                                    zarFn isNil ifTrue:[
+                                        zarFn := packageDir asFilename withSuffix:'zip'.
+                                        zarFn := self getSourceFileName:zarFn.
+                                    ].
                                     zarFn notNil ifTrue:[
                                         zar := ZipArchive oldFileNamed:zarFn.
                                         zar notNil ifTrue:[
@@ -3866,7 +3915,9 @@
     PackagePath isNil ifTrue:[
         PackagePath := self constructPathFor:PackageDirName.
         (p := OperatingSystem getEnvironment:'STX_PACKAGEDIR') notNil ifTrue:[
-            PackagePath addFirst:p.
+            (PackagePath includes:p) ifFalse:[
+                PackagePath addFirst:p.
+            ]
         ]
     ].
 
@@ -3874,6 +3925,7 @@
 
     "
      Smalltalk getPackageFileName:'stx/libview/resources/normal.style'
+     Smalltalk getPackageFileName:'stx/libview/source.zip'
     "
 !
 
@@ -5078,5 +5130,5 @@
 !Smalltalk class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.379 1999-12-01 23:00:29 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.380 1999-12-02 00:18:40 cg Exp $'
 ! !