*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Tue, 21 Oct 1997 19:44:59 +0200
changeset 3044 a0bbac91639b
parent 3043 aae6b34587c0
child 3045 fb2d17c7a360
*** empty log message ***
Behavior.st
Class.st
ExtBytes.st
ExtStream.st
ExternalBytes.st
ExternalStream.st
False.st
FileStr.st
FileStream.st
Integer.st
Object.st
SeqColl.st
SequenceableCollection.st
Smalltalk.st
True.st
UndefObj.st
UndefinedObject.st
--- a/Behavior.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/Behavior.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,6 +10,8 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:3.2.1 on 17-oct-1997 at 4:16:14 pm'                  !
+
 Object subclass:#Behavior
 	instanceVariableNames:'superclass flags methodDictionary otherSuperclasses instSize'
 	classVariableNames:'SubclassInfo'
@@ -2668,6 +2670,12 @@
     "
 !
 
+classPool
+    ^ IdentityDictionary new
+
+    "Modified: 17.10.1997 / 12:07:29 / cg"
+!
+
 classVarNames
     "return a collection of the class variable name-strings.
      Returning empty here, since Behavior does not define any classVariables.
@@ -3641,5 +3649,5 @@
 !Behavior class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Behavior.st,v 1.120 1997-09-02 20:52:02 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Behavior.st,v 1.121 1997-10-21 17:40:47 cg Exp $'
 ! !
--- a/Class.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/Class.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,6 +10,8 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:3.2.1 on 20-oct-1997 at 9:54:40 pm'                  !
+
 ClassDescription subclass:#Class
 	instanceVariableNames:'name category classvars comment subclasses classFilename package
 		revision primitiveSpec environment signature hook'
@@ -506,6 +508,31 @@
     "Modified: 15.10.1996 / 18:53:21 / cg"
 !
 
+classPool
+    "return a dictionary filled with classVarName->value
+     associations. This has been added for ST80 compatibility,
+     and is not the way classVars are technically implemented in
+     ST/X. Changing the values in the returned dictionary has no effect
+     on the classVars value(s)"
+
+    |d|
+
+    d := IdentityDictionary new.
+    self classVarNames do:[:nm |
+        |sym|
+
+        sym := nm asSymbol.
+        d at:sym put:(self classVarAt:sym)
+    ].
+    ^ d
+
+    "
+     Button classPool
+    "
+
+    "Modified: 17.10.1997 / 12:12:14 / cg"
+!
+
 classVarAt:aSymbol
     "return the value of a class variable.
      Currently, this returns nil if there is no such classvar -
@@ -2978,20 +3005,23 @@
     "/ first, create the public class ...
     sel := self definitionSelector.
 
-    newClass := self superclass
-        perform:sel
-        withArguments:(Array 
-                        with:(self nameWithoutPrefix asSymbol)
-                        with:(self instanceVariableString)
-                        with:(self classVariableString)
-                        with:''
-                        with:(owner category)).
-
-    "/ copy over methods ...
-    self class copyInvalidatedMethodsFrom:self class for:newClass class.
-    self class copyInvalidatedMethodsFrom:self for:newClass.
-    newClass class recompileInvalidatedMethods.
-    newClass recompileInvalidatedMethods.
+    Class nameSpaceQuerySignal answer:Smalltalk
+    do:[
+        newClass := self superclass
+            perform:sel
+            withArguments:(Array 
+                            with:(self nameWithoutPrefix asSymbol)
+                            with:(self instanceVariableString)
+                            with:(self classVariableString)
+                            with:''
+                            with:(owner category)).
+
+        "/ copy over methods ...
+        self class copyInvalidatedMethodsFrom:self class for:newClass class.
+        self class copyInvalidatedMethodsFrom:self for:newClass.
+        newClass class recompileInvalidatedMethods.
+        newClass recompileInvalidatedMethods.
+    ].
 
     owner changed:#newClass with:newClass.
     Smalltalk changed:#newClass with:newClass.
@@ -3001,7 +3031,7 @@
     ^ newClass
 
     "Created: 23.6.1997 / 13:28:52 / cg"
-    "Modified: 5.8.1997 / 14:30:50 / cg"
+    "Modified: 20.10.1997 / 21:43:38 / cg"
 !
 
 renameTo:newName
@@ -3836,5 +3866,5 @@
 !Class class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Class.st,v 1.295 1997-10-07 12:42:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Class.st,v 1.296 1997-10-21 17:41:32 cg Exp $'
 ! !
--- a/ExtBytes.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/ExtBytes.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,7 +10,7 @@
  hereby transferred.
 "
 
-'From Smalltalk/X, Version:3.1.10 on 20-sep-1997 at 12:04:19 am'                !
+'From Smalltalk/X, Version:3.2.1 on 21-oct-1997 at 2:47:16 pm'                  !
 
 ArrayedCollection subclass:#ExternalBytes
 	instanceVariableNames:'address* size'
@@ -808,20 +808,27 @@
     "return the unsigned long at index, anInteger. fetching is MSB-first.
      Here, unaligned accesses are allowed - in C, this is usually an error."
 
-    |val|
+    |val b1 b2 b3 b4|
+
+    b1 := self at:index.
+    b2 := self at:(index + 1).
+    b3 := self at:(index + 2).
+    b4 := self at:(index + 3).
 
     msb ifTrue:[
-	val := self at:index.
-	val := (val bitShift:8) + (self at:(index + 1)).
-	val := (val bitShift:8) + (self at:(index + 2)).
-	val := (val * 256) + (self at:(index + 3)).
+        val := b1.
+        val := (val bitShift:8) + b2.
+        val := (val bitShift:8) + b3.
+        val := (val * 256) + b4.
     ] ifFalse:[
-	val := self at:index+3.
-	val := (val bitShift:8) + (self at:(index + 2)).
-	val := (val bitShift:8) + (self at:(index + 1)).
-	val := (val * 256) + (self at:(index)).
+        val := b4.
+        val := (val bitShift:8) + b3.
+        val := (val bitShift:8) + b2.
+        val := (val * 256) + b1.
     ].
     ^ val
+
+    "Modified: 21.10.1997 / 02:46:40 / cg"
 !
 
 doubleWordAt:index put:aNumber
@@ -1126,6 +1133,6 @@
 !ExternalBytes class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/ExtBytes.st,v 1.14 1997-09-20 21:06:33 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/ExtBytes.st,v 1.15 1997-10-21 17:41:43 cg Exp $'
 ! !
 ExternalBytes initialize!
--- a/ExtStream.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/ExtStream.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,7 +10,7 @@
  hereby transferred.
 "
 
-'From Smalltalk/X, Version:3.2.1 on 14-oct-1997 at 11:16:38 pm'                 !
+'From Smalltalk/X, Version:3.2.1 on 20-oct-1997 at 7:24:15 pm'                  !
 
 ReadWriteStream subclass:#ExternalStream
 	instanceVariableNames:'filePointer mode buffered binary eolMode hitEOF didWrite
@@ -1056,6 +1056,17 @@
     "
 ! !
 
+!ExternalStream methodsFor:'Squeak compatibility'!
+
+readOnly
+    "Squeak compatibility: make the stream readOnly"
+
+    mode := #readonly
+
+    "Modified: 20.10.1997 / 19:23:04 / cg"
+    "Created: 20.10.1997 / 19:23:19 / cg"
+! !
+
 !ExternalStream methodsFor:'accessing'!
 
 binary
@@ -4189,6 +4200,6 @@
 !ExternalStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/ExtStream.st,v 1.148 1997-10-15 12:31:32 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/ExtStream.st,v 1.149 1997-10-21 17:41:45 cg Exp $'
 ! !
 ExternalStream initialize!
--- a/ExternalBytes.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/ExternalBytes.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,7 +10,7 @@
  hereby transferred.
 "
 
-'From Smalltalk/X, Version:3.1.10 on 20-sep-1997 at 12:04:19 am'                !
+'From Smalltalk/X, Version:3.2.1 on 21-oct-1997 at 2:47:16 pm'                  !
 
 ArrayedCollection subclass:#ExternalBytes
 	instanceVariableNames:'address* size'
@@ -808,20 +808,27 @@
     "return the unsigned long at index, anInteger. fetching is MSB-first.
      Here, unaligned accesses are allowed - in C, this is usually an error."
 
-    |val|
+    |val b1 b2 b3 b4|
+
+    b1 := self at:index.
+    b2 := self at:(index + 1).
+    b3 := self at:(index + 2).
+    b4 := self at:(index + 3).
 
     msb ifTrue:[
-	val := self at:index.
-	val := (val bitShift:8) + (self at:(index + 1)).
-	val := (val bitShift:8) + (self at:(index + 2)).
-	val := (val * 256) + (self at:(index + 3)).
+        val := b1.
+        val := (val bitShift:8) + b2.
+        val := (val bitShift:8) + b3.
+        val := (val * 256) + b4.
     ] ifFalse:[
-	val := self at:index+3.
-	val := (val bitShift:8) + (self at:(index + 2)).
-	val := (val bitShift:8) + (self at:(index + 1)).
-	val := (val * 256) + (self at:(index)).
+        val := b4.
+        val := (val bitShift:8) + b3.
+        val := (val bitShift:8) + b2.
+        val := (val * 256) + b1.
     ].
     ^ val
+
+    "Modified: 21.10.1997 / 02:46:40 / cg"
 !
 
 doubleWordAt:index put:aNumber
@@ -1126,6 +1133,6 @@
 !ExternalBytes class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ExternalBytes.st,v 1.14 1997-09-20 21:06:33 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ExternalBytes.st,v 1.15 1997-10-21 17:41:43 cg Exp $'
 ! !
 ExternalBytes initialize!
--- a/ExternalStream.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/ExternalStream.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,7 +10,7 @@
  hereby transferred.
 "
 
-'From Smalltalk/X, Version:3.2.1 on 14-oct-1997 at 11:16:38 pm'                 !
+'From Smalltalk/X, Version:3.2.1 on 20-oct-1997 at 7:24:15 pm'                  !
 
 ReadWriteStream subclass:#ExternalStream
 	instanceVariableNames:'filePointer mode buffered binary eolMode hitEOF didWrite
@@ -1056,6 +1056,17 @@
     "
 ! !
 
+!ExternalStream methodsFor:'Squeak compatibility'!
+
+readOnly
+    "Squeak compatibility: make the stream readOnly"
+
+    mode := #readonly
+
+    "Modified: 20.10.1997 / 19:23:04 / cg"
+    "Created: 20.10.1997 / 19:23:19 / cg"
+! !
+
 !ExternalStream methodsFor:'accessing'!
 
 binary
@@ -4189,6 +4200,6 @@
 !ExternalStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.148 1997-10-15 12:31:32 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.149 1997-10-21 17:41:45 cg Exp $'
 ! !
 ExternalStream initialize!
--- a/False.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/False.st	Tue Oct 21 19:44:59 1997 +0200
@@ -68,7 +68,9 @@
 and:aBlock
     "evaluate aBlock if the receiver is true.
      (since the receiver is false return false).
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ self
 !
@@ -76,28 +78,36 @@
 ifFalse:aBlock
     "return the value of evaluating aBlock if the receiver is false.
      (since the receiver is known to be false always evaluate)
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ aBlock value
 !
 
 ifFalse:falseBlock ifTrue:trueBlock
     "return the value of evaluating falseBlock (since the receiver is false)
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ falseBlock value
 !
 
 ifTrue:aBlock
     "return the false alternative, nil (since the receiver is false)
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ nil
 !
 
 ifTrue:trueBlock ifFalse:falseBlock
     "return the value of evaluating falseBlock (since the receiver is false)
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ falseBlock value
 !
@@ -105,7 +115,9 @@
 or:aBlock
     "evaluate aBlock if the receiver is false.
      (since the receiver is false return the value of evaluating aBlock).
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ aBlock value
 ! !
@@ -128,7 +140,10 @@
 
 not
     "return true, if the receiver is false, false otherwise
-     (since the receiver is false, return true)"
+     (since the receiver is false, return true).
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ true
 !
@@ -158,4 +173,4 @@
 !False class methodsFor:'documentation'!
 
 version
-^ '$Header: /cvs/stx/stx/libbasic/False.st,v 1.17 1996-04-26 07:11:48 cg Exp $'! !
+^ '$Header: /cvs/stx/stx/libbasic/False.st,v 1.18 1997-10-21 17:42:26 cg Exp $'! !
--- a/FileStr.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/FileStr.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,6 +10,8 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:3.2.1 on 20-oct-1997 at 7:23:55 pm'                  !
+
 ExternalStream subclass:#FileStream
 	instanceVariableNames:'pathName canPosition'
 	classVariableNames:''
@@ -351,6 +353,17 @@
     ^ newStream
 ! !
 
+!FileStream methodsFor:'Squeak compatibility'!
+
+fullName
+    "Squeak compatibility: return the full pathname"
+
+    ^ pathName asFilename pathName
+
+    "Created: 17.10.1997 / 17:04:12 / cg"
+    "Modified: 20.10.1997 / 19:22:44 / cg"
+! !
+
 !FileStream methodsFor:'accessing'!
 
 directoryName
@@ -1010,6 +1023,6 @@
 !FileStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/FileStr.st,v 1.53 1997-10-15 20:20:20 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/FileStr.st,v 1.54 1997-10-21 17:42:27 cg Exp $'
 ! !
 FileStream initialize!
--- a/FileStream.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/FileStream.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,6 +10,8 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:3.2.1 on 20-oct-1997 at 7:23:55 pm'                  !
+
 ExternalStream subclass:#FileStream
 	instanceVariableNames:'pathName canPosition'
 	classVariableNames:''
@@ -351,6 +353,17 @@
     ^ newStream
 ! !
 
+!FileStream methodsFor:'Squeak compatibility'!
+
+fullName
+    "Squeak compatibility: return the full pathname"
+
+    ^ pathName asFilename pathName
+
+    "Created: 17.10.1997 / 17:04:12 / cg"
+    "Modified: 20.10.1997 / 19:22:44 / cg"
+! !
+
 !FileStream methodsFor:'accessing'!
 
 directoryName
@@ -1010,6 +1023,6 @@
 !FileStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.53 1997-10-15 20:20:20 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.54 1997-10-21 17:42:27 cg Exp $'
 ! !
 FileStream initialize!
--- a/Integer.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/Integer.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,6 +10,8 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:3.2.1 on 19-oct-1997 at 6:09:22 pm'                  !
+
 Number subclass:#Integer
 	instanceVariableNames:''
 	classVariableNames:'DefaultDisplayRadix'
@@ -66,6 +68,27 @@
 
 !Integer class methodsFor:'instance creation'!
 
+byte1:b1 byte2:b2 byte3:b3 byte4:b4
+    "Squeak compatibility:
+     Return an Integer given four value bytes.
+     The returned integer is either a Small- or a LargeInteger"
+
+    |t|
+
+    t := b4.
+    t := (t bitShift:8) + b3.
+    t := (t bitShift:8) + b2.
+    ^ (t bitShift:8) + b1.
+
+    "
+     (Integer byte1:16r10 byte2:16r32 byte3:16r54 byte4:16r76) hexPrintString
+     (Integer byte1:16r00 byte2:16r11 byte3:16r22 byte4:16r33) hexPrintString
+    "
+
+    "Created: 19.10.1997 / 18:08:52 / cg"
+    "Modified: 19.10.1997 / 18:09:04 / cg"
+!
+
 new:numberOfBytes neg:negative
     "for ST-80 compatibility:
      Return an empty Integer (uninitialized value) with space for
@@ -406,7 +429,8 @@
      revShift   "{ Class: SmallInteger }"
      digitShift "{ Class: SmallInteger }"
      n          "{ Class: SmallInteger }" 
-     nn         "{ Class: SmallInteger }"|
+     nn         "{ Class: SmallInteger }"
+     nDigits    "{ Class: SmallInteger }" |
 
     shiftCount > 0 ifTrue:[
         "left shift"
@@ -462,19 +486,18 @@
         byte := (byte bitShift:bitShift) bitAnd:16rFF.
         result digitAt:(digitShift + 1) put:byte.
         revShift := -8 + bitShift.
-        2 to:(self digitLength) do:[:index |
+	nDigits := self digitLength.
+        2 to:nDigits do:[:index |
             byte := self digitAt:index.
             byte2 := self digitAt:index-1.
             byte := byte bitShift:bitShift.
             byte2 := byte2 bitShift:revShift.
-            byte := byte bitOr:byte2.
-            byte := byte bitAnd:16rFF.
+            byte := (byte bitOr:byte2) bitAnd:16rFF.
             result digitAt:(index + digitShift) put:byte.
         ].
-        byte2 := self digitAt:self digitLength.
-        byte2 := byte2 bitShift:revShift.
-        byte2 := byte2 bitAnd:16rFF.
-        result digitAt:(self digitLength + digitShift + 1) put:byte2.
+        byte2 := self digitAt:nDigits.
+        byte2 := (byte2 bitShift:revShift) bitAnd:16rFF.
+        result digitAt:(nDigits + digitShift + 1) put:byte2.
         "
          might have stored a 0-byte ...
         "
@@ -1429,5 +1452,5 @@
 !Integer class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.69 1997-10-15 16:54:40 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.70 1997-10-21 17:42:28 cg Exp $'
 ! !
--- a/Object.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/Object.st	Tue Oct 21 19:44:59 1997 +0200
@@ -1439,7 +1439,11 @@
 !Object methodsFor:'comparing'!
 
 = anObject
-    "return true, if the receiver and the arg have the same structure"
+    "return true, if the receiver and the arg have the same structure.
+     Notice:
+	This method is partially open coded (inlined) by the compiler(s)
+	identical objects are always considered equal.
+	redefining it may not work as expected."
 
     ^ self == anObject
 !
@@ -1447,7 +1451,9 @@
 == anObject
     "return true, if the receiver and the arg are the same object.
      Never redefine this in any class.
-     The compilers generates inline code for it - redefinition is useless."
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
 %{  /* NOCONTEXT */
 
@@ -1574,19 +1580,29 @@
 !
 
 isNil
-    "return true, if the receiver is nil"
+    "return true, if the receiver is nil.
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ false
 !
 
 notNil
-    "return true, if the receiver is not nil"
+    "return true, if the receiver is not nil.
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ true
 !
 
 ~= anObject
-    "return true, if the receiver and the arg do not have the same structure"
+    "return true, if the receiver and the arg do not have the same structure.
+     Notice:
+	This method is partially open coded (inlined) by the compiler(s)
+	identical objects are never considered unequal.
+	redefining it may not work as expected."
 
     ^ (self = anObject) not
 !
@@ -1594,7 +1610,9 @@
 ~~ anObject
     "return true, if the receiver and the arg are not the same object.
      Never redefine this in any class.
-     The compilers generates inline code for it - redefinition is useless."
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
 %{  /* NOCONTEXT */
     RETURN ( (self == anObject) ? false : true );
@@ -5804,7 +5822,10 @@
 	Use check-methods to check an object for a certain attributes/protocol
 	(such as #isXXX, #respondsTo: or #isNumber);
 
-	Using #isMemberOf: is considered BAD STYLE."
+	Using #isMemberOf: is considered BAD STYLE.
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ (self class) == aClass
 !
@@ -6215,6 +6236,6 @@
 !Object class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.209 1997-10-15 09:38:18 ca Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.210 1997-10-21 17:43:15 cg Exp $'
 ! !
 Object initialize!
--- a/SeqColl.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/SeqColl.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,6 +10,8 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:3.2.1 on 17-oct-1997 at 3:54:58 pm'                  !
+
 Collection subclass:#SequenceableCollection
 	instanceVariableNames:''
 	classVariableNames:''
@@ -1466,6 +1468,17 @@
     "
 !
 
+doWithIndex:aBlock
+    "Squeak compatibility; like keysAndValuesDo:, but passes
+     the index as second argument."
+
+    self keysAndValuesDo:[:index :value |
+        aBlock value:value value:index
+    ].
+
+    "Created: 17.10.1997 / 12:33:10 / cg"
+!
+
 from:startIndex do:aBlock
     "evaluate the argument, aBlock for the elements starting with the
      element at startIndex to the end."
@@ -3320,5 +3333,5 @@
 !SequenceableCollection class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/SeqColl.st,v 1.87 1997-10-15 17:44:40 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/SeqColl.st,v 1.88 1997-10-21 17:43:28 cg Exp $'
 ! !
--- a/SequenceableCollection.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/SequenceableCollection.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,6 +10,8 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:3.2.1 on 17-oct-1997 at 3:54:58 pm'                  !
+
 Collection subclass:#SequenceableCollection
 	instanceVariableNames:''
 	classVariableNames:''
@@ -1466,6 +1468,17 @@
     "
 !
 
+doWithIndex:aBlock
+    "Squeak compatibility; like keysAndValuesDo:, but passes
+     the index as second argument."
+
+    self keysAndValuesDo:[:index :value |
+        aBlock value:value value:index
+    ].
+
+    "Created: 17.10.1997 / 12:33:10 / cg"
+!
+
 from:startIndex do:aBlock
     "evaluate the argument, aBlock for the elements starting with the
      element at startIndex to the end."
@@ -3320,5 +3333,5 @@
 !SequenceableCollection class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/SequenceableCollection.st,v 1.87 1997-10-15 17:44:40 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/SequenceableCollection.st,v 1.88 1997-10-21 17:43:28 cg Exp $'
 ! !
--- a/Smalltalk.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/Smalltalk.st	Tue Oct 21 19:44:59 1997 +0200
@@ -10,6 +10,8 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:3.2.1 on 18-oct-1997 at 12:05:27 am'                 !
+
 Object subclass:#Smalltalk
 	instanceVariableNames:''
 	classVariableNames:'StartBlocks ImageStartBlocks ExitBlocks CachedClasses SystemPath
@@ -2244,44 +2246,6 @@
 
 !Smalltalk class methodsFor:'system management'!
 
-bitmapFileStreamFor:aFileName
-    "search aFileName in some standard places;
-     return a readonly fileStream or nil if not found.
-     Searches in subdirectories named 'bitmaps' in SystemPath"
-
-    |aString|
-
-    aString := self getBitmapFileName:aFileName.
-    aString notNil ifTrue:[
-        ^ aString asFilename readStream
-    ].
-    ^ nil
-!
-
-classNameForFile:aFileName
-    "return the className which corresponds to an abbreviated fileName,
-     or nil if no special translation applies. The given filename arg may
-     include a '.st' suffix (but no other)."
-
-    |fn|
-
-    (aFileName asFilename hasSuffix:'st') ifTrue:[
-        fn := aFileName copyWithoutLast:3
-    ] ifFalse:[
-        fn := aFileName
-    ].
-    ^ self filenameAbbreviations keyAtEqualValue:fn ifAbsent:[fn].
-
-    "
-     Smalltalk classNameForFile:'DrawObj'  
-     Smalltalk classNameForFile:'DrawObj.st' 
-     Smalltalk classNameForFile:'ArrColl.st' 
-     Smalltalk classNameForFile:'ArrColl.chg' 
-    "
-
-    "Modified: 11.12.1995 / 14:51:10 / cg"
-!
-
 compressSources
     "{ Pragma: +optSpace }"
 
@@ -2355,17 +2319,363 @@
     "Modified: 16.1.1997 / 01:25:58 / cg"
 !
 
-constructPathFor:aDirectoryName
-    "search for aDirectory in SystemPath; 
-     return a collection of pathes which include that directory."
-
-    ^ self realSystemPath select:[:dirName |
-        |fullPath|
-
-        fullPath := dirName asFilename construct:aDirectoryName.
-        "/ fullPath exists and:[fullPath isDirectory and:[fullPath isReadable]]
-        fullPath isDirectory and:[fullPath isReadable]
+generateSingleSourceFile
+    "{ Pragma: +optSpace }"
+
+    "generate the sources file, and remove all method source strings
+     from the system and replace them by refs to a string in the source file.
+     This makes the image independent from the per-class source files
+     and makes transportation of endUser applications easier, since
+     only 3 files (executable, image and sourceFile) need to be 
+     transported."
+
+    |newStream table source pos fileName|
+
+    newStream := 'src.tmp' asFilename writeStream.
+    newStream isNil ifTrue:[
+        self error:'cannot create new temporary source file'.
+        ^ self
+    ].
+
+    table := IdentityDictionary new:100.
+
+    Method allSubInstancesDo:[:aMethod |
+        source := aMethod source.
+        source notNil ifTrue:[
+            pos := newStream position.
+            newStream nextChunkPut:source.
+
+            "
+             dont change the methods info - maybe some write error
+             occurs later, in that case we abort and leave everything
+             untouched.
+            "
+            table at:aMethod put:pos
+        ]
+    ].
+
+    newStream close.
+
+    "
+     now, rename the new source file,
+    "
+    fileName := (ObjectMemory nameForSources).
+    'src.tmp' asFilename renameTo:fileName.
+
+    "good - now go over all changed methods, and change their
+     source reference"
+
+    table keysAndValuesDo:[:aMethod :pos |
+        aMethod localSourceFilename:fileName position:pos.
+"/        aMethod printCR.
+    ].
+
+    "
+     Smalltalk generateSingleSourceFile
+    "
+
+    "Modified: 16.1.1997 / 01:25:58 / cg"
+    "Created: 17.10.1997 / 13:00:56 / cg"
+!
+
+installAutoloadedClasses
+    "read the standard abbreviation file; install all classes found there as
+     autoloaded. This takes some time ..."
+
+    self installAutoloadedClassesFrom:'include/abbrev.stc'
+
+    "
+     Smalltalk installAutoloadedClasses
+    "
+
+    "Modified: 10.1.1997 / 15:10:48 / cg"
+    "Created: 14.2.1997 / 17:32:57 / cg"
+!
+
+installAutoloadedClassesFrom:anAbbrevFilePath
+    "read the given abbreviation file; install all classes found there as
+     autoloaded. This takes some time ..."
+
+    |f s s2 l clsName abbrev package cat rev cls|
+
+    f := self getSystemFileName:anAbbrevFilePath.
+
+    f notNil ifTrue:[
+        s := f asFilename readStream.
+        s notNil ifTrue:[
+
+            "/ yes, create any required nameSpace, without asking user.
+            Class createNameSpaceQuerySignal answer:true do:[
+
+                [s atEnd] whileFalse:[
+                    l := s nextLine withoutSeparators.
+                    l notEmpty ifTrue:[
+                        s2 := l readStream.
+                        clsName := (s2 upTo:Character space) withoutSeparators asSymbol.
+                        (self at:clsName) isNil ifTrue:[
+                            s2 skipSeparators.
+                            abbrev := (s2 upTo:Character space) withoutSeparators asSymbol.
+                            s2 skipSeparators.
+                            package := (s2 upTo:Character space) withoutSeparators asSymbol.
+                            s2 skipSeparators.
+
+                            rev := nil.    
+                            s2 skipSeparators.
+                            s2 atEnd ifFalse:[
+                                s2 peek isDigit ifTrue:[
+                                    rev := (s2 upTo:Character space) withoutSeparators.
+                                    s2 skipSeparators.
+                                ]
+                            ].
+                            cat := s2 upToEnd withoutSeparators.
+
+                            (cat startsWith:$') ifTrue:[
+                                cat := (cat copyFrom:2 to:(cat size - 1)) withoutSeparators.
+                            ].
+
+                            (cat isNil or:[cat isEmpty]) ifTrue:[
+                                cat := 'autoloaded'
+                            ].
+
+                            "/ '  autoloaded: ' print. clsName print. ' in ' print. cat printCR.
+
+                            "/ install if not already compiled-in
+                            Autoload subclass:clsName
+                                instanceVariableNames:''
+                                classVariableNames:''
+                                poolDictionaries:''
+                                category:cat
+                                inEnvironment:Smalltalk.
+
+                            cls := self at:clsName.
+                            cls isNil ifTrue:[
+                                ('Smalltalk [warning]: failed to add ' , clsName , ' as autoloaded.') infoPrintCR.
+                            ] ifFalse:[
+                                cls package:package asSymbol.
+                                rev notNil ifTrue:[
+                                    cls setBinaryRevision:rev
+                                ]
+                            ]    
+                        ]
+                    ]
+                ]
+            ].
+            s close.
+        ].
+    ]
+
+    "
+     Smalltalk installAutoloadedClassesFrom:'include/abbrev.stc'
+    "
+
+    "Modified: 10.2.1997 / 12:22:44 / cg"
+!
+
+loadBinaries
+    "return true, if binaries should be loaded into the system,
+     false if this should be suppressed. The default is false (for now)."
+
+    ^ LoadBinaries
+!
+
+loadBinaries:aBoolean
+    "{ Pragma: +optSpace }"
+
+    "turn on/off loading of binary objects"
+
+    aBoolean ifTrue:[
+        (ObjectFileLoader notNil and:[ObjectFileLoader canLoadObjectFiles]) ifTrue:[
+            LoadBinaries := true.
+            ^ self
+        ].
+        'Smalltalk [info]: this system does not support binary loading' infoPrintCR.
     ].
+    LoadBinaries := false
+
+    "Modified: 10.1.1997 / 15:11:00 / cg"
+!
+
+logDoits
+    "return true if doits should go into the changes file
+     as well as changes - by default, this is off, since
+     it can blow up the changes file enormously ...
+    "
+
+    ^ LogDoits
+
+    "
+     LogDoits := false
+     LogDoits := true
+    "
+!
+
+logDoits:aBoolean
+    "{ Pragma: +optSpace }"
+
+    "turn on/off logging of doits in the changes file.
+     By default, this is off, since it can blow up the 
+     changes file enormously ...
+    "
+
+    LogDoits := aBoolean
+
+!
+
+makeBytecodeMethods
+    "{ Pragma: +optSpace }"
+
+    "walk over all methods and make each a bytecode method
+     iff it does not contain primitive C code.
+     Experimental and not yet used."
+
+    |newStream table source pos fileName|
+
+    Method allSubInstancesDo:[:aMethod |
+        |newMethod|
+
+        aMethod hasPrimitiveCode ifFalse:[
+            newMethod := aMethod asByteCodeMethod.
+            newMethod ~~ aMethod ifTrue:[
+                aMethod becomeSameAs:newMethod
+            ]
+        ].
+    ].
+
+    "
+     Smalltalk makeBytecodeMethods
+    "
+
+    "Modified: 16.1.1997 / 01:25:58 / cg"
+    "Created: 17.10.1997 / 13:52:19 / cg"
+! !
+
+!Smalltalk class methodsFor:'system management-fileIn'!
+
+fileIn:aFileName
+    "read in the named file - look for it in some standard places;
+     return true if ok, false if failed"
+
+    ^ self fileIn:aFileName lazy:nil silent:nil logged:false 
+
+    "
+     Smalltalk fileIn:'source/TicTacToe.st'
+    "
+
+    "Created: 28.10.1995 / 17:06:28 / cg"
+!
+
+fileIn:aFileName lazy:lazy
+    "read in the named file - look for it in some standard places;
+     return true if ok, false if failed.
+     If lazy is true, no code is generated for methods, instead stubs
+     are created which compile themself when first executed. This allows
+     for much faster fileIn (but slows down the first execution later).
+     Since no syntax checks are done when doing lazy fileIn, use this only for
+     code which is known to be syntactically correct."
+
+    ^ self fileIn:aFileName lazy:lazy silent:nil logged:false 
+
+    "
+     Smalltalk fileIn:'source/TicTacToe.st' lazy:true
+    "
+
+    "Created: 28.10.1995 / 17:06:36 / cg"
+!
+
+fileIn:aFileName lazy:lazy silent:silent
+    "read in the named file - look for it in some standard places;
+     return true if ok, false if failed.
+     If lazy is true, no code is generated for methods, instead stubs
+     are created which compile themself when first executed. This allows
+     for much faster fileIn (but slows down the first execution later).
+     Since no syntax checks are done when doing lazy fileIn, use this only for
+     code which is known to be syntactically correct.
+     If silent is true, no compiler messages are output to the transcript.
+     Giving nil for silent/lazy will use the current settings."
+
+    ^ self fileIn:aFileName lazy:lazy silent:silent logged:false
+
+    "Created: 28.10.1995 / 17:06:41 / cg"
+!
+
+fileIn:aFileNameOrString lazy:lazy silent:silent logged:logged
+    "read in the named file - look for it in some standard places;
+     return true if ok, false if failed.
+     If lazy is true, no code is generated for methods, instead stubs
+     are created which compile themself when first executed. This allows
+     for much faster fileIn (but slows down the first execution later).
+     Since no syntax checks are done when doing lazy fileIn, use this only for
+     code which is known to be syntactically correct.
+     If silent is true, no compiler messages are output to the transcript.
+     Giving nil for silent/lazy will use the current settings."
+
+    |fileNameString aStream path morePath bos|
+
+    fileNameString := aFileNameOrString asString.
+
+    "
+     an object or shared object ?
+    "
+    (ObjectFileLoader notNil
+    and:[ObjectFileLoader hasValidBinaryExtension:fileNameString]) ifTrue:[
+        LoadBinaries ifFalse:[^ false].
+        path := self getBinaryFileName:fileNameString.
+        path isNil ifTrue:[^ false].
+        ^ (ObjectFileLoader loadObjectFile:fileNameString) notNil
+    ].
+
+    (fileNameString asFilename hasSuffix:'cls') ifTrue:[
+        BinaryObjectStorage notNil ifTrue:[
+            path := self getBinaryFileName:fileNameString.
+            path isNil ifTrue:[^ false].
+            aStream := path asFilename readStream.
+            aStream notNil ifTrue:[
+                bos := BinaryObjectStorage onOld:aStream.
+                bos next.
+                bos close.
+                ^ true
+            ].
+            ^ false
+        ]
+    ].
+
+    (fileNameString startsWith:'source/') ifTrue:[
+        aStream := self sourceFileStreamFor:(fileNameString copyFrom:8)
+    ] ifFalse:[
+        (fileNameString startsWith:'fileIn/') ifTrue:[
+            aStream := self fileInFileStreamFor:(fileNameString copyFrom:8)
+        ] ifFalse:[
+            aStream := self systemFileStreamFor:fileNameString.
+            (aStream notNil and:[fileNameString includes:$/]) ifTrue:[
+                "/ temporarily prepend the files directory
+                "/ to the searchPath.
+                "/ This allows fileIn-driver files to refer to local
+                "/ files via a relative path, and drivers to fileIn other
+                "/ drivers ...
+                morePath := aStream pathName asFilename directoryName.
+            ]
+        ]
+    ].
+    aStream isNil ifTrue:[^ false].
+    ^ self fileInStream:aStream lazy:lazy silent:silent logged:logged addPath:morePath
+
+    "
+     Smalltalk fileIn:'source/TicTacToe.st' lazy:true silent:true
+    "
+
+    "Modified: 8.1.1997 / 17:58:31 / cg"
+!
+
+fileIn:aFileName logged:logged
+    "read in the named file - look for it in some standard places;
+     return true if ok, false if failed.
+     The argument logged controls, if the changefile is to be updated."
+
+    ^ self fileIn:aFileName lazy:nil silent:nil logged:logged 
+
+    "
+     Smalltalk fileIn:'source/TicTacToe.st' logged:false
+    "
 !
 
 fileInChanges
@@ -2385,18 +2695,236 @@
     "
 !
 
-fileInFileStreamFor:aFileName
-    "search aFileName in some standard places;
-     return a readonly fileStream or nil if not found.
-     Searches in subdirectories named 'fileIn' in SystemPath"
-
-    |aString|
-
-    aString := self getFileInFileName:aFileName.
-    aString notNil ifTrue:[
-        ^ aString asFilename readStream
+fileInClass:aClassName
+    "find a source/object file for aClassName and -if found - load it.
+     search is in some standard places trying driver-file (.ld), object-file (.o) and 
+     finally source file (.st) in that order.
+     The file is first searched for using the class name, then the abbreviated name."
+
+    ^ self fileInClass:aClassName initialize:true lazy:false silent:nil
+!
+
+fileInClass:aClassName fromObject:aFileName
+    "read in the named object file and dynamic-link it into the system
+     - look for it in some standard places.
+     Only install the named class from this object file.
+     Return true if ok, false if failed."
+
+    |path ok|
+
+    "
+     check if the dynamic loader class is in
+    "
+    (LoadBinaries not or:[ObjectFileLoader isNil]) ifTrue:[^ false].
+
+    (path := self getBinaryFileName:aFileName) isNil ifTrue:[^ false].
+    ok := (ObjectFileLoader loadClass:aClassName fromObjectFile:path) notNil.
+    ok ifTrue:[
+        SilentLoading ifFalse:[
+            Transcript show:'  loaded ' , aClassName , ' from ' ; showCR:aFileName.
+        ]
+    ].
+    ^ ok
+
+    "
+     Smalltalk fileInClass:'AbstractPath' fromObject:'../../goodies/Paths/AbstrPath.so' 
+     Smalltalk fileInClass:'ClockView' fromObject:'../../libwidg3/libwidg3.so' 
+    "
+
+    "Modified: 10.9.1996 / 20:43:52 / cg"
+!
+
+fileInClass:aClassName initialize:doInit
+    "find a source/object file for aClassName and -if found - load it.
+     search is in some standard places trying driver-file (.ld), object-file (.o) and 
+     finally source file (.st) in that order.
+     The file is first searched for using the class name, then the abbreviated name."
+
+    ^ self fileInClass:aClassName initialize:doInit lazy:false silent:nil
+!
+
+fileInClass:aClassName initialize:doInit lazy:loadLazy
+    "find a source/object file for aClassName and -if found - load it.
+     search is in some standard places trying driver-file (.ld), object-file (.o) and 
+     finally source file (.st) in that order.
+     The file is first searched for using the class name, then the abbreviated name."
+
+     ^ self fileInClass:aClassName initialize:doInit lazy:loadLazy silent:nil
+!
+
+fileInClass:aClassName initialize:doInit lazy:loadLazy silent:beSilent 
+    "find a source/object file for aClassName and -if found - load it.
+     This is the workhorse for autoloading.
+     Search is in some standard places, trying driver-file (.ld), object-file (.so / .o) and 
+     finally source file (.st), in that order.
+     The file is first searched for using the class name, then the abbreviated name.
+     The argument doInit controlls if the class should be sent a #initialize after the
+     load; loadLazy tells if it should be loaded lazyly. beSilent tells if the compiler
+     should not send notes to the transcript; it can be true, false or nil, where
+     nil uses the value from SilentLoading."
+
+    |shortName libName newClass ok wasLazy wasSilent sharedLibExtension inStream mgr fn|
+
+    wasLazy := Compiler compileLazy:loadLazy.
+    beSilent notNil ifTrue:[
+        wasSilent := self silentLoading:beSilent.
     ].
-    ^ nil
+
+    [
+        Class withoutUpdatingChangesDo:
+        [
+            ok := false.
+
+            shortName := self fileNameForClass:aClassName.
+            "
+             first, look for a loader-driver file (in fileIn/xxx.ld)
+            "
+            (ok := self fileIn:('fileIn/' , shortName , '.ld') lazy:loadLazy silent:beSilent)
+            ifFalse:[
+                "
+                 try abbreviated driver-file (in fileIn/xxx.ld)
+                "
+                shortName ~= aClassName ifTrue:[
+                    ok := self fileIn:('fileIn/' , aClassName , '.ld') lazy:loadLazy silent:beSilent
+                ].
+                ok ifFalse:[
+                    "
+                     then, if dynamic linking is available, 
+                    "
+                    (LoadBinaries and:[ObjectFileLoader notNil]) ifTrue:[
+                        sharedLibExtension := ObjectFileLoader sharedLibraryExtension.
+
+                        "
+                         first look for a class packages shared binary in binary/xxx.o
+                        "
+                        libName := self libraryFileNameOfClass:aClassName.
+                        libName notNil ifTrue:[
+                            (ok := self fileInClass:aClassName fromObject:(libName, sharedLibExtension))
+                            ifFalse:[
+                                sharedLibExtension ~= '.o' ifTrue:[
+                                    ok := self fileInClass:aClassName fromObject:(libName, '.o')
+                                ]
+                            ].
+                        ].
+
+                        "
+                         then, look for a shared binary in binary/xxx.o
+                        "
+                        ok ifFalse:[
+                            (ok := self fileInClass:aClassName fromObject:(shortName, sharedLibExtension))
+                            ifFalse:[
+                                sharedLibExtension ~= '.o' ifTrue:[
+                                    ok := self fileInClass:aClassName fromObject:(shortName, '.o')
+                                ].
+                                ok ifFalse:[
+                                    shortName ~= aClassName ifTrue:[
+                                        (ok := self fileInClass:aClassName fromObject:(aClassName, sharedLibExtension))
+                                        ifFalse:[
+                                            sharedLibExtension ~= '.o' ifTrue:[
+                                                ok := self fileInClass:aClassName fromObject:(aClassName, '.o')
+                                            ]
+                                        ]
+                                    ].
+                                ].
+                            ].
+                        ].
+                    ].
+
+                    "
+                     if that did not work, look for a compiled-bytecode file ...
+                    "
+                    ok ifFalse:[
+                        (ok := self fileIn:(shortName , '.cls') lazy:loadLazy silent:beSilent)
+                        ifFalse:[
+                            shortName ~= aClassName ifTrue:[
+                                ok := self fileIn:(aClassName , '.cls') lazy:loadLazy silent:beSilent
+                            ]
+                        ]
+                    ].
+
+                    "
+                     if that did not work, look for an st-source file ...
+                    "
+                    ok ifFalse:[
+                        fn := shortName , '.st'.
+                        (ok := self fileIn:fn lazy:loadLazy silent:beSilent)
+                        ifFalse:[
+                            shortName ~= aClassName ifTrue:[
+                                fn := aClassName , '.st'.
+                                ok := self fileIn:fn lazy:loadLazy silent:beSilent
+                            ].
+                            ok ifFalse:[
+                                "
+                                 ... and in the standard source-directory
+                                "
+                                fn := 'source/' , shortName , '.st'.
+                                (ok := self fileIn:fn lazy:loadLazy silent:beSilent)
+                                ifFalse:[
+                                    shortName ~= aClassName ifTrue:[
+                                        fn := 'source/' , aClassName , '.st'.
+                                        ok := self fileIn:fn lazy:loadLazy silent:beSilent
+                                    ]
+                                ]
+                            ]
+                        ].
+                        ok ifFalse:[
+                            "
+                             new: if there is a sourceCodeManager, ask it for the classes sourceCode
+                            "
+                            (mgr := Smalltalk at:#SourceCodeManager) notNil ifTrue:[
+                                inStream := mgr getMostRecentSourceStreamForClassNamed:aClassName.
+                                inStream notNil ifTrue:[
+                                    fn := nil.
+                                    ok := self fileInStream:inStream lazy:loadLazy silent:beSilent logged:false addPath:nil. 
+                                ]
+                            ].
+                        ].
+                    ].
+                ].
+            ]
+        ].
+        ok ifTrue:[
+            newClass := self at:(aClassName asSymbol).
+            newClass notNil ifTrue:[
+                fn notNil ifTrue:[
+                    newClass classFilename isNil ifTrue:[
+                        newClass setClassFilename:fn
+                    ].
+                ].
+
+                doInit ifTrue:[
+                    newClass initialize
+                ]
+            ]
+        ].
+    ] valueNowOrOnUnwindDo:[
+        Compiler compileLazy:wasLazy. 
+        wasSilent notNil ifTrue:[
+            self silentLoading:wasSilent
+        ]
+    ].
+
+    ^ newClass
+
+    "Modified: 11.11.1996 / 09:56:39 / cg"
+!
+
+fileInClassLibrary:aClassLibraryName
+    "find an object file containing a binary class library in some standard places
+     and load it. This install all of its contained classes.
+     Return true if ok, false if not."
+
+    ObjectFileLoader isNil ifTrue:[^ false].
+    ^ (ObjectFileLoader 
+            loadObjectFile:(aClassLibraryName , (ObjectFileLoader sharedLibraryExtension))
+      ) notNil
+
+    "
+     Smalltalk fileInClassLibrary:'libtable'
+     Smalltalk fileInClassLibrary:'binary/libwidg3'
+    "
+
+    "Modified: 8.1.1997 / 17:58:56 / cg"
 !
 
 fileInStream:aStream lazy:lazy silent:silent logged:logged addPath:morePath
@@ -2447,6 +2975,133 @@
     "Modified: 5.11.1996 / 20:03:35 / cg"
 !
 
+loadClassLibraryIfAbsent:name
+    "dynamically load a classLibrary, if not already loaded
+     and the system supports dynamic loading.
+     Return true, if the library is loaded, false if not.
+     This entry is called without system specific filename
+     extensions - it is portable among different architectures
+     as long as corresponding files (x.so / x.dll / x.sl / x.o) 
+     are be present ..."
+
+    ObjectMemory 
+        binaryModuleInfo 
+            do:[:entry | 
+                   entry type == #classLibrary ifTrue:[
+                       entry libraryName = name ifTrue:[
+                          ^ true        "/ already loaded
+                       ]
+                   ].
+               ].
+
+    ^ self fileInClassLibrary:name
+
+    "
+     Smalltalk loadClassLibraryIfAbsent:'libbasic'
+     Smalltalk loadClassLibraryIfAbsent:'libwidg3'
+    "
+
+    "Modified: 31.10.1996 / 16:57:24 / cg"
+!
+
+secureFileIn:aFileName
+    "read in the named file, looking for it at standard places.
+     Catch any error during fileIn. Return true if ok, false if failed"
+
+    |retVal|
+
+    retVal := false.
+
+    (SignalSet with:AbortSignal with:Process terminateSignal)
+        handle:[:ex |
+            ex return
+        ] do:[
+            retVal := self fileIn:aFileName
+        ].
+    ^ retVal
+!
+
+silentFileIn:aFilename
+    "same as fileIn:, but do not output 'compiled...'-messages on Transcript.
+     Main use is during startup."
+
+    |wasSilent|
+
+    wasSilent := self silentLoading:true.
+    [
+        self fileIn:aFilename
+    ] valueNowOrOnUnwindDo:[
+        self silentLoading:wasSilent
+    ]
+! !
+
+!Smalltalk class methodsFor:'system management-files'!
+
+bitmapFileStreamFor:aFileName
+    "search aFileName in some standard places;
+     return a readonly fileStream or nil if not found.
+     Searches in subdirectories named 'bitmaps' in SystemPath"
+
+    |aString|
+
+    aString := self getBitmapFileName:aFileName.
+    aString notNil ifTrue:[
+        ^ aString asFilename readStream
+    ].
+    ^ nil
+!
+
+classNameForFile:aFileName
+    "return the className which corresponds to an abbreviated fileName,
+     or nil if no special translation applies. The given filename arg may
+     include a '.st' suffix (but no other)."
+
+    |fn|
+
+    (aFileName asFilename hasSuffix:'st') ifTrue:[
+        fn := aFileName copyWithoutLast:3
+    ] ifFalse:[
+        fn := aFileName
+    ].
+    ^ self filenameAbbreviations keyAtEqualValue:fn ifAbsent:[fn].
+
+    "
+     Smalltalk classNameForFile:'DrawObj'  
+     Smalltalk classNameForFile:'DrawObj.st' 
+     Smalltalk classNameForFile:'ArrColl.st' 
+     Smalltalk classNameForFile:'ArrColl.chg' 
+    "
+
+    "Modified: 11.12.1995 / 14:51:10 / cg"
+!
+
+constructPathFor:aDirectoryName
+    "search for aDirectory in SystemPath; 
+     return a collection of pathes which include that directory."
+
+    ^ self realSystemPath select:[:dirName |
+        |fullPath|
+
+        fullPath := dirName asFilename construct:aDirectoryName.
+        "/ fullPath exists and:[fullPath isDirectory and:[fullPath isReadable]]
+        fullPath isDirectory and:[fullPath isReadable]
+    ].
+!
+
+fileInFileStreamFor:aFileName
+    "search aFileName in some standard places;
+     return a readonly fileStream or nil if not found.
+     Searches in subdirectories named 'fileIn' in SystemPath"
+
+    |aString|
+
+    aString := self getFileInFileName:aFileName.
+    aString notNil ifTrue:[
+        ^ aString asFilename readStream
+    ].
+    ^ nil
+!
+
 fileNameForClass:aClassOrClassName
     "return a good filename for aClassOrClassName -
      using the abbreviation file if there is one"
@@ -2681,99 +3336,6 @@
     ^ nil
 !
 
-installAutoloadedClasses
-    "read the standard abbreviation file; install all classes found there as
-     autoloaded. This takes some time ..."
-
-    self installAutoloadedClassesFrom:'include/abbrev.stc'
-
-    "
-     Smalltalk installAutoloadedClasses
-    "
-
-    "Modified: 10.1.1997 / 15:10:48 / cg"
-    "Created: 14.2.1997 / 17:32:57 / cg"
-!
-
-installAutoloadedClassesFrom:anAbbrevFilePath
-    "read the given abbreviation file; install all classes found there as
-     autoloaded. This takes some time ..."
-
-    |f s s2 l clsName abbrev package cat rev cls|
-
-    f := self getSystemFileName:anAbbrevFilePath.
-
-    f notNil ifTrue:[
-        s := f asFilename readStream.
-        s notNil ifTrue:[
-
-            "/ yes, create any required nameSpace, without asking user.
-            Class createNameSpaceQuerySignal answer:true do:[
-
-                [s atEnd] whileFalse:[
-                    l := s nextLine withoutSeparators.
-                    l notEmpty ifTrue:[
-                        s2 := l readStream.
-                        clsName := (s2 upTo:Character space) withoutSeparators asSymbol.
-                        (self at:clsName) isNil ifTrue:[
-                            s2 skipSeparators.
-                            abbrev := (s2 upTo:Character space) withoutSeparators asSymbol.
-                            s2 skipSeparators.
-                            package := (s2 upTo:Character space) withoutSeparators asSymbol.
-                            s2 skipSeparators.
-
-                            rev := nil.    
-                            s2 skipSeparators.
-                            s2 atEnd ifFalse:[
-                                s2 peek isDigit ifTrue:[
-                                    rev := (s2 upTo:Character space) withoutSeparators.
-                                    s2 skipSeparators.
-                                ]
-                            ].
-                            cat := s2 upToEnd withoutSeparators.
-
-                            (cat startsWith:$') ifTrue:[
-                                cat := (cat copyFrom:2 to:(cat size - 1)) withoutSeparators.
-                            ].
-
-                            (cat isNil or:[cat isEmpty]) ifTrue:[
-                                cat := 'autoloaded'
-                            ].
-
-                            "/ '  autoloaded: ' print. clsName print. ' in ' print. cat printCR.
-
-                            "/ install if not already compiled-in
-                            Autoload subclass:clsName
-                                instanceVariableNames:''
-                                classVariableNames:''
-                                poolDictionaries:''
-                                category:cat
-                                inEnvironment:Smalltalk.
-
-                            cls := self at:clsName.
-                            cls isNil ifTrue:[
-                                ('Smalltalk [warning]: failed to add ' , clsName , ' as autoloaded.') infoPrintCR.
-                            ] ifFalse:[
-                                cls package:package asSymbol.
-                                rev notNil ifTrue:[
-                                    cls setBinaryRevision:rev
-                                ]
-                            ]    
-                        ]
-                    ]
-                ]
-            ].
-            s close.
-        ].
-    ]
-
-    "
-     Smalltalk installAutoloadedClassesFrom:'include/abbrev.stc'
-    "
-
-    "Modified: 10.2.1997 / 12:22:44 / cg"
-!
-
 libraryFileNameOfClass:aClassOrClassName
     "for a given class, return the name of a classLibrary which contains
      binary code for it.
@@ -2833,85 +3395,6 @@
     "Modified: 6.11.1995 / 15:41:39 / cg"
 !
 
-loadBinaries
-    "return true, if binaries should be loaded into the system,
-     false if this should be suppressed. The default is false (for now)."
-
-    ^ LoadBinaries
-!
-
-loadBinaries:aBoolean
-    "{ Pragma: +optSpace }"
-
-    "turn on/off loading of binary objects"
-
-    aBoolean ifTrue:[
-        (ObjectFileLoader notNil and:[ObjectFileLoader canLoadObjectFiles]) ifTrue:[
-            LoadBinaries := true.
-            ^ self
-        ].
-        'Smalltalk [info]: this system does not support binary loading' infoPrintCR.
-    ].
-    LoadBinaries := false
-
-    "Modified: 10.1.1997 / 15:11:00 / cg"
-!
-
-loadClassLibraryIfAbsent:name
-    "dynamically load a classLibrary, if not already loaded
-     and the system supports dynamic loading.
-     Return true, if the library is loaded, false if not.
-     This entry is called without system specific filename
-     extensions - it is portable among different architectures
-     as long as corresponding files (x.so / x.dll / x.sl / x.o) 
-     are be present ..."
-
-    ObjectMemory 
-        binaryModuleInfo 
-            do:[:entry | 
-                   entry type == #classLibrary ifTrue:[
-                       entry libraryName = name ifTrue:[
-                          ^ true        "/ already loaded
-                       ]
-                   ].
-               ].
-
-    ^ self fileInClassLibrary:name
-
-    "
-     Smalltalk loadClassLibraryIfAbsent:'libbasic'
-     Smalltalk loadClassLibraryIfAbsent:'libwidg3'
-    "
-
-    "Modified: 31.10.1996 / 16:57:24 / cg"
-!
-
-logDoits
-    "return true if doits should go into the changes file
-     as well as changes - by default, this is off, since
-     it can blow up the changes file enormously ...
-    "
-
-    ^ LogDoits
-
-    "
-     LogDoits := false
-     LogDoits := true
-    "
-!
-
-logDoits:aBoolean
-    "{ Pragma: +optSpace }"
-
-    "turn on/off logging of doits in the changes file.
-     By default, this is off, since it can blow up the 
-     changes file enormously ...
-    "
-
-    LogDoits := aBoolean
-
-!
-
 readAbbreviations
     "read classname to filename mappings from include/abbrev.stc.
      sigh - all for those poor sys5.3 or MSDOS people with short filenames ..."
@@ -3049,37 +3532,6 @@
     "Modified: 18.7.1996 / 15:53:35 / cg"
 !
 
-secureFileIn:aFileName
-    "read in the named file, looking for it at standard places.
-     Catch any error during fileIn. Return true if ok, false if failed"
-
-    |retVal|
-
-    retVal := false.
-
-    (SignalSet with:AbortSignal with:Process terminateSignal)
-        handle:[:ex |
-            ex return
-        ] do:[
-            retVal := self fileIn:aFileName
-        ].
-    ^ retVal
-!
-
-silentFileIn:aFilename
-    "same as fileIn:, but do not output 'compiled...'-messages on Transcript.
-     Main use is during startup."
-
-    |wasSilent|
-
-    wasSilent := self silentLoading:true.
-    [
-        self fileIn:aFilename
-    ] valueNowOrOnUnwindDo:[
-        self silentLoading:wasSilent
-    ]
-!
-
 sourceDirectoryNameOfClass:aClassOrClassName
     "for a given class, return the pathname relative to TOP of the classes source code.
      Read the files 'abbrev.stc' and 'liblist.stc' (which are created during the compilation process)
@@ -3194,367 +3646,6 @@
     "
 ! !
 
-!Smalltalk class methodsFor:'system management-fileIn'!
-
-fileIn:aFileName
-    "read in the named file - look for it in some standard places;
-     return true if ok, false if failed"
-
-    ^ self fileIn:aFileName lazy:nil silent:nil logged:false 
-
-    "
-     Smalltalk fileIn:'source/TicTacToe.st'
-    "
-
-    "Created: 28.10.1995 / 17:06:28 / cg"
-!
-
-fileIn:aFileName lazy:lazy
-    "read in the named file - look for it in some standard places;
-     return true if ok, false if failed.
-     If lazy is true, no code is generated for methods, instead stubs
-     are created which compile themself when first executed. This allows
-     for much faster fileIn (but slows down the first execution later).
-     Since no syntax checks are done when doing lazy fileIn, use this only for
-     code which is known to be syntactically correct."
-
-    ^ self fileIn:aFileName lazy:lazy silent:nil logged:false 
-
-    "
-     Smalltalk fileIn:'source/TicTacToe.st' lazy:true
-    "
-
-    "Created: 28.10.1995 / 17:06:36 / cg"
-!
-
-fileIn:aFileName lazy:lazy silent:silent
-    "read in the named file - look for it in some standard places;
-     return true if ok, false if failed.
-     If lazy is true, no code is generated for methods, instead stubs
-     are created which compile themself when first executed. This allows
-     for much faster fileIn (but slows down the first execution later).
-     Since no syntax checks are done when doing lazy fileIn, use this only for
-     code which is known to be syntactically correct.
-     If silent is true, no compiler messages are output to the transcript.
-     Giving nil for silent/lazy will use the current settings."
-
-    ^ self fileIn:aFileName lazy:lazy silent:silent logged:false
-
-    "Created: 28.10.1995 / 17:06:41 / cg"
-!
-
-fileIn:aFileNameOrString lazy:lazy silent:silent logged:logged
-    "read in the named file - look for it in some standard places;
-     return true if ok, false if failed.
-     If lazy is true, no code is generated for methods, instead stubs
-     are created which compile themself when first executed. This allows
-     for much faster fileIn (but slows down the first execution later).
-     Since no syntax checks are done when doing lazy fileIn, use this only for
-     code which is known to be syntactically correct.
-     If silent is true, no compiler messages are output to the transcript.
-     Giving nil for silent/lazy will use the current settings."
-
-    |fileNameString aStream path morePath bos|
-
-    fileNameString := aFileNameOrString asString.
-
-    "
-     an object or shared object ?
-    "
-    (ObjectFileLoader notNil
-    and:[ObjectFileLoader hasValidBinaryExtension:fileNameString]) ifTrue:[
-        LoadBinaries ifFalse:[^ false].
-        path := self getBinaryFileName:fileNameString.
-        path isNil ifTrue:[^ false].
-        ^ (ObjectFileLoader loadObjectFile:fileNameString) notNil
-    ].
-
-    (fileNameString asFilename hasSuffix:'cls') ifTrue:[
-        BinaryObjectStorage notNil ifTrue:[
-            path := self getBinaryFileName:fileNameString.
-            path isNil ifTrue:[^ false].
-            aStream := path asFilename readStream.
-            aStream notNil ifTrue:[
-                bos := BinaryObjectStorage onOld:aStream.
-                bos next.
-                bos close.
-                ^ true
-            ].
-            ^ false
-        ]
-    ].
-
-    (fileNameString startsWith:'source/') ifTrue:[
-        aStream := self sourceFileStreamFor:(fileNameString copyFrom:8)
-    ] ifFalse:[
-        (fileNameString startsWith:'fileIn/') ifTrue:[
-            aStream := self fileInFileStreamFor:(fileNameString copyFrom:8)
-        ] ifFalse:[
-            aStream := self systemFileStreamFor:fileNameString.
-            (aStream notNil and:[fileNameString includes:$/]) ifTrue:[
-                "/ temporarily prepend the files directory
-                "/ to the searchPath.
-                "/ This allows fileIn-driver files to refer to local
-                "/ files via a relative path, and drivers to fileIn other
-                "/ drivers ...
-                morePath := aStream pathName asFilename directoryName.
-            ]
-        ]
-    ].
-    aStream isNil ifTrue:[^ false].
-    ^ self fileInStream:aStream lazy:lazy silent:silent logged:logged addPath:morePath
-
-    "
-     Smalltalk fileIn:'source/TicTacToe.st' lazy:true silent:true
-    "
-
-    "Modified: 8.1.1997 / 17:58:31 / cg"
-!
-
-fileIn:aFileName logged:logged
-    "read in the named file - look for it in some standard places;
-     return true if ok, false if failed.
-     The argument logged controls, if the changefile is to be updated."
-
-    ^ self fileIn:aFileName lazy:nil silent:nil logged:logged 
-
-    "
-     Smalltalk fileIn:'source/TicTacToe.st' logged:false
-    "
-!
-
-fileInClass:aClassName
-    "find a source/object file for aClassName and -if found - load it.
-     search is in some standard places trying driver-file (.ld), object-file (.o) and 
-     finally source file (.st) in that order.
-     The file is first searched for using the class name, then the abbreviated name."
-
-    ^ self fileInClass:aClassName initialize:true lazy:false silent:nil
-!
-
-fileInClass:aClassName fromObject:aFileName
-    "read in the named object file and dynamic-link it into the system
-     - look for it in some standard places.
-     Only install the named class from this object file.
-     Return true if ok, false if failed."
-
-    |path ok|
-
-    "
-     check if the dynamic loader class is in
-    "
-    (LoadBinaries not or:[ObjectFileLoader isNil]) ifTrue:[^ false].
-
-    (path := self getBinaryFileName:aFileName) isNil ifTrue:[^ false].
-    ok := (ObjectFileLoader loadClass:aClassName fromObjectFile:path) notNil.
-    ok ifTrue:[
-        SilentLoading ifFalse:[
-            Transcript show:'  loaded ' , aClassName , ' from ' ; showCR:aFileName.
-        ]
-    ].
-    ^ ok
-
-    "
-     Smalltalk fileInClass:'AbstractPath' fromObject:'../../goodies/Paths/AbstrPath.so' 
-     Smalltalk fileInClass:'ClockView' fromObject:'../../libwidg3/libwidg3.so' 
-    "
-
-    "Modified: 10.9.1996 / 20:43:52 / cg"
-!
-
-fileInClass:aClassName initialize:doInit
-    "find a source/object file for aClassName and -if found - load it.
-     search is in some standard places trying driver-file (.ld), object-file (.o) and 
-     finally source file (.st) in that order.
-     The file is first searched for using the class name, then the abbreviated name."
-
-    ^ self fileInClass:aClassName initialize:doInit lazy:false silent:nil
-!
-
-fileInClass:aClassName initialize:doInit lazy:loadLazy
-    "find a source/object file for aClassName and -if found - load it.
-     search is in some standard places trying driver-file (.ld), object-file (.o) and 
-     finally source file (.st) in that order.
-     The file is first searched for using the class name, then the abbreviated name."
-
-     ^ self fileInClass:aClassName initialize:doInit lazy:loadLazy silent:nil
-!
-
-fileInClass:aClassName initialize:doInit lazy:loadLazy silent:beSilent 
-    "find a source/object file for aClassName and -if found - load it.
-     This is the workhorse for autoloading.
-     Search is in some standard places, trying driver-file (.ld), object-file (.so / .o) and 
-     finally source file (.st), in that order.
-     The file is first searched for using the class name, then the abbreviated name.
-     The argument doInit controlls if the class should be sent a #initialize after the
-     load; loadLazy tells if it should be loaded lazyly. beSilent tells if the compiler
-     should not send notes to the transcript; it can be true, false or nil, where
-     nil uses the value from SilentLoading."
-
-    |shortName libName newClass ok wasLazy wasSilent sharedLibExtension inStream mgr fn|
-
-    wasLazy := Compiler compileLazy:loadLazy.
-    beSilent notNil ifTrue:[
-        wasSilent := self silentLoading:beSilent.
-    ].
-
-    [
-        Class withoutUpdatingChangesDo:
-        [
-            ok := false.
-
-            shortName := self fileNameForClass:aClassName.
-            "
-             first, look for a loader-driver file (in fileIn/xxx.ld)
-            "
-            (ok := self fileIn:('fileIn/' , shortName , '.ld') lazy:loadLazy silent:beSilent)
-            ifFalse:[
-                "
-                 try abbreviated driver-file (in fileIn/xxx.ld)
-                "
-                shortName ~= aClassName ifTrue:[
-                    ok := self fileIn:('fileIn/' , aClassName , '.ld') lazy:loadLazy silent:beSilent
-                ].
-                ok ifFalse:[
-                    "
-                     then, if dynamic linking is available, 
-                    "
-                    (LoadBinaries and:[ObjectFileLoader notNil]) ifTrue:[
-                        sharedLibExtension := ObjectFileLoader sharedLibraryExtension.
-
-                        "
-                         first look for a class packages shared binary in binary/xxx.o
-                        "
-                        libName := self libraryFileNameOfClass:aClassName.
-                        libName notNil ifTrue:[
-                            (ok := self fileInClass:aClassName fromObject:(libName, sharedLibExtension))
-                            ifFalse:[
-                                sharedLibExtension ~= '.o' ifTrue:[
-                                    ok := self fileInClass:aClassName fromObject:(libName, '.o')
-                                ]
-                            ].
-                        ].
-
-                        "
-                         then, look for a shared binary in binary/xxx.o
-                        "
-                        ok ifFalse:[
-                            (ok := self fileInClass:aClassName fromObject:(shortName, sharedLibExtension))
-                            ifFalse:[
-                                sharedLibExtension ~= '.o' ifTrue:[
-                                    ok := self fileInClass:aClassName fromObject:(shortName, '.o')
-                                ].
-                                ok ifFalse:[
-                                    shortName ~= aClassName ifTrue:[
-                                        (ok := self fileInClass:aClassName fromObject:(aClassName, sharedLibExtension))
-                                        ifFalse:[
-                                            sharedLibExtension ~= '.o' ifTrue:[
-                                                ok := self fileInClass:aClassName fromObject:(aClassName, '.o')
-                                            ]
-                                        ]
-                                    ].
-                                ].
-                            ].
-                        ].
-                    ].
-
-                    "
-                     if that did not work, look for a compiled-bytecode file ...
-                    "
-                    ok ifFalse:[
-                        (ok := self fileIn:(shortName , '.cls') lazy:loadLazy silent:beSilent)
-                        ifFalse:[
-                            shortName ~= aClassName ifTrue:[
-                                ok := self fileIn:(aClassName , '.cls') lazy:loadLazy silent:beSilent
-                            ]
-                        ]
-                    ].
-
-                    "
-                     if that did not work, look for an st-source file ...
-                    "
-                    ok ifFalse:[
-                        fn := shortName , '.st'.
-                        (ok := self fileIn:fn lazy:loadLazy silent:beSilent)
-                        ifFalse:[
-                            shortName ~= aClassName ifTrue:[
-                                fn := aClassName , '.st'.
-                                ok := self fileIn:fn lazy:loadLazy silent:beSilent
-                            ].
-                            ok ifFalse:[
-                                "
-                                 ... and in the standard source-directory
-                                "
-                                fn := 'source/' , shortName , '.st'.
-                                (ok := self fileIn:fn lazy:loadLazy silent:beSilent)
-                                ifFalse:[
-                                    shortName ~= aClassName ifTrue:[
-                                        fn := 'source/' , aClassName , '.st'.
-                                        ok := self fileIn:fn lazy:loadLazy silent:beSilent
-                                    ]
-                                ]
-                            ]
-                        ].
-                        ok ifFalse:[
-                            "
-                             new: if there is a sourceCodeManager, ask it for the classes sourceCode
-                            "
-                            (mgr := Smalltalk at:#SourceCodeManager) notNil ifTrue:[
-                                inStream := mgr getMostRecentSourceStreamForClassNamed:aClassName.
-                                inStream notNil ifTrue:[
-                                    fn := nil.
-                                    ok := self fileInStream:inStream lazy:loadLazy silent:beSilent logged:false addPath:nil. 
-                                ]
-                            ].
-                        ].
-                    ].
-                ].
-            ]
-        ].
-        ok ifTrue:[
-            newClass := self at:(aClassName asSymbol).
-            newClass notNil ifTrue:[
-                fn notNil ifTrue:[
-                    newClass classFilename isNil ifTrue:[
-                        newClass setClassFilename:fn
-                    ].
-                ].
-
-                doInit ifTrue:[
-                    newClass initialize
-                ]
-            ]
-        ].
-    ] valueNowOrOnUnwindDo:[
-        Compiler compileLazy:wasLazy. 
-        wasSilent notNil ifTrue:[
-            self silentLoading:wasSilent
-        ]
-    ].
-
-    ^ newClass
-
-    "Modified: 11.11.1996 / 09:56:39 / cg"
-!
-
-fileInClassLibrary:aClassLibraryName
-    "find an object file containing a binary class library in some standard places
-     and load it. This install all of its contained classes.
-     Return true if ok, false if not."
-
-    ObjectFileLoader isNil ifTrue:[^ false].
-    ^ (ObjectFileLoader 
-            loadObjectFile:(aClassLibraryName , (ObjectFileLoader sharedLibraryExtension))
-      ) notNil
-
-    "
-     Smalltalk fileInClassLibrary:'libtable'
-     Smalltalk fileInClassLibrary:'binary/libwidg3'
-    "
-
-    "Modified: 8.1.1997 / 17:58:56 / cg"
-! !
-
 !Smalltalk class methodsFor:'time-versions'!
 
 configuration
@@ -3843,5 +3934,5 @@
 !Smalltalk class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.262 1997-10-15 13:42:16 ca Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.263 1997-10-21 17:44:26 cg Exp $'
 ! !
--- a/True.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/True.st	Tue Oct 21 19:44:59 1997 +0200
@@ -69,35 +69,45 @@
     "evaluate aBlock if the receiver is true.
      since the receiver is known to be true,
      return the value of evaluating the block.
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ aBlock value
 !
 
 ifFalse:aBlock
     "return the true alternative, nil (since the receiver is true)
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ nil
 !
 
 ifFalse:falseBlock ifTrue:trueBlock
     "return the value of evaluating trueBlock (since the receiver is true)
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ trueBlock value
 !
 
 ifTrue:aBlock
     "return the value of evaluating aBlock (since the receiver is true)
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ aBlock value
 !
 
 ifTrue:trueBlock ifFalse:falseBlock
     "return the value of evaluating trueBlock (since the receiver is true)
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ trueBlock value
 !
@@ -105,7 +115,9 @@
 or:aBlock
     "evaluate aBlock if the receiver is false.
      since the receiver is known to be true simply return true.
-     - open coded by compiler"
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ self
 ! !
@@ -128,7 +140,10 @@
 
 not
    "return true if the receiver is false, false otherwise
-    (since the receiver is true, return false)"
+    (since the receiver is true, return false).
+    Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ false
 !
@@ -158,5 +173,5 @@
 !True class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/True.st,v 1.18 1996-04-26 07:12:22 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/True.st,v 1.19 1997-10-21 17:44:58 cg Exp $'
 ! !
--- a/UndefObj.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/UndefObj.st	Tue Oct 21 19:44:59 1997 +0200
@@ -425,13 +425,19 @@
 !
 
 isNil
-    "return true if I am nil - since I am, return true"
+    "return true if I am nil - since I am, return true.
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ true
 !
 
 notNil
-    "return true if I am not nil - since I am nil, return false"
+    "return true if I am not nil - since I am nil, return false.
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ false
 !
@@ -446,6 +452,6 @@
 !UndefinedObject class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/UndefObj.st,v 1.31 1997-06-03 10:02:52 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/UndefObj.st,v 1.32 1997-10-21 17:44:59 cg Exp $'
 ! !
 UndefinedObject initialize!
--- a/UndefinedObject.st	Thu Oct 16 13:17:03 1997 +0200
+++ b/UndefinedObject.st	Tue Oct 21 19:44:59 1997 +0200
@@ -425,13 +425,19 @@
 !
 
 isNil
-    "return true if I am nil - since I am, return true"
+    "return true if I am nil - since I am, return true.
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ true
 !
 
 notNil
-    "return true if I am not nil - since I am nil, return false"
+    "return true if I am not nil - since I am nil, return false.
+     Notice:
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ false
 !
@@ -446,6 +452,6 @@
 !UndefinedObject class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/UndefinedObject.st,v 1.31 1997-06-03 10:02:52 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UndefinedObject.st,v 1.32 1997-10-21 17:44:59 cg Exp $'
 ! !
 UndefinedObject initialize!