Merged with /trunk jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 04 Feb 2011 23:09:23 +0000
branchjv
changeset 17815 956b46750806
parent 17814 b75a7f0c346b
child 17816 22014a145e7c
Merged with /trunk
AbstractOperatingSystem.st
AbstractTime.st
ApplicationDefinition.st
Behavior.st
Block.st
ByteArray.st
CharacterArray.st
CharacterEncoderImplementations__MAC_Roman.st
Class.st
ClassBuilder.st
ClassDescription.st
Collection.st
Date.st
Delay.st
ExternalAddress.st
ExternalBytes.st
Filename.st
GenericException.st
LibraryDefinition.st
Make.proto
Make.spec
MessageSend.st
Method.st
NameSpace.st
Object.st
Process.st
ProgrammingLanguage.st
ProjectDefinition.st
SequenceableCollection.st
SharedPool.st
Smalltalk.st
SmalltalkLanguage.st
String.st
SubclassResponsibilityError.st
Time.st
Timestamp.st
UtcTimestamp.st
Visitor.st
Win32Constants.st
Win32OperatingSystem.st
abbrev.stc
autopackage/.cvsignore
autopackage/default.apspec
bc.mak
libInit.cc
libbasic.rc
stx_libbasic.st
--- a/AbstractOperatingSystem.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/AbstractOperatingSystem.st	Fri Feb 04 23:09:23 2011 +0000
@@ -6724,6 +6724,16 @@
     dayInWeek := dayInWeekArg.
 ! !
 
+!AbstractOperatingSystem::TimeInfo methodsFor:'converting'!
+
+asDate
+    ^ Date new year:year month:month day:day.
+!
+
+asTime
+    ^ Time hours:hours minutes:minutes seconds:seconds
+! !
+
 !AbstractOperatingSystem::TimeZoneInfo class methodsFor:'documentation'!
 
 documentation
@@ -6995,15 +7005,15 @@
 !AbstractOperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Id: AbstractOperatingSystem.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: AbstractOperatingSystem.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.206 2010/12/01 19:52:36 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.207 2011/01/24 13:17:37 stefan Exp '
 !
 
 version_SVN
-    ^ '$Id: AbstractOperatingSystem.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: AbstractOperatingSystem.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 AbstractOperatingSystem initialize!
@@ -7013,3 +7023,4 @@
 
 
 
+
--- a/AbstractTime.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/AbstractTime.st	Fri Feb 04 23:09:23 2011 +0000
@@ -178,6 +178,22 @@
     "
 
     "Modified: 1.7.1996 / 15:20:10 / cg"
+!
+
+utcNow
+    "return an instance of myself representing this momentin the UTC timezone."
+
+    ^ self subclassResponsibility
+
+    "
+     Timestamp utcNow   
+     Timestamp utcNow
+
+     Time now   
+     Time utcNow   
+    "
+
+    "Modified: 1.7.1996 / 15:20:10 / cg"
 ! !
 
 !AbstractTime class methodsFor:'Compatibility-Squeak'!
@@ -516,18 +532,6 @@
 
 timeZoneName
     ^ #utc
-!
-
-weekInYear
-    "return the week number of the receiver - 1 for Jan, 1st."
-
-    ^ Date weekInYearOf:self
-
-    "
-     (Timestamp newDay:1 year:2000) weekInYear    
-     (Timestamp newDay:2 year:2000) weekInYear    
-     (Timestamp newDay:3 year:2000) weekInYear    
-    "
 ! !
 
 !AbstractTime methodsFor:'arithmetic'!
@@ -843,7 +847,21 @@
     ^ self asTimestamp
 !
 
+asLocalTimestamp
+    "represent myself as a timestamp in the local timezone"
+
+    ^ self subclassResponsibility
+!
+
 asTimestamp
+    "represent myself as a Timestamp"
+
+    ^ self subclassResponsibility
+!
+
+asUtcTimestamp
+    "represent myself as a timestamp in the local timezone"
+
     ^ self subclassResponsibility
 ! !
 
@@ -863,7 +881,8 @@
 
 addPrintBindingsTo:aDictionary language:languageOrNil
     "private print support: add bindings for printing to aDictionary.
-     languageOrNil can only be #en or nil for the current language.
+     languageOrNil can be #en, #fr, #de or nil for the current language.
+
      bindings:
         %h      hours, 00..23 (i.e. european)  0-padded to length 2
         %u      hours, 00..12 (i.e. us)        0-padded to length 2
@@ -890,19 +909,36 @@
 
         %(TZD)  timeZone delta from UTC in the format +/-hh:mm  
 
-        %milli1 milliseconds, truncated to 1/10th of a second 0..9         
-        %milli2 milliseconds, truncated to 1/100th of a second 00..99 0-padded to length 2        
-
-        %nth           - counting day-in-month (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
-        %weekDayNth    - counting day-in-week (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
-        %weekNth       - counting week-in-year (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
+        %(milli1) milliseconds, truncated to 1/10th of a second 0..9         
+        %(milli2) milliseconds, truncated to 1/100th of a second 00..99 0-padded to length 2        
 
      Timestamp only:
-        %Day    day - unpadded                    
-        %Month  month - unpadded                    
-        %(yearOrTime)  year or time 5 digits    as in unix-ls:
-                                                year if it is not the current year;
-                                                time otherwise
+        %(Day)         - day - unpadded                    
+        %(Month)       - month - unpadded                    
+        %(yearOrTime)  - year or time 5 digits    as in unix-ls:
+                                                  year if it is not the current year;
+                                                  time otherwise
+        %(weekDay)      - day in week (1->monday, 2->tuesday, ... ,7->sunday)
+
+        %(dayName)      - full day name     
+        %(DayName)      - full day name, first character uppercase      
+        %(DAYNAME)      - full day name, all uppercase       
+
+        %(monthName)    - full month name     
+        %(MonthName)    - full month name, first character uppercase      
+        %(MONTHNAME)    - full month name, all uppercase       
+
+        %(shortDayName) - short (abbreviated) day name     
+        %(ShortDayName) - short (abbreviated) day name, first character uppercase      
+        %(SHORTDAYNAME) - short (abbreviated) day name, all uppercase       
+
+        %(shortMonthName) - short (abbreviated) month name     
+        %(ShortMonthName) - short (abbreviated) month name, first character uppercase      
+        %(SHORTMONTHNAME) - short (abbreviated) month name, all uppercase       
+
+        %(nth)          - counting day-in-month (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
+        %(weekDayNth)   - counting day-in-week (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
+        %(weekNth)      - counting week-in-year (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')
 
 
      The ISO8601 printString are generated with:
@@ -988,84 +1024,9 @@
 
 printOn:aStream format:aFormatString
     "print using a format string;
-     valid format items are:
-        %h      hours, 00..23 (i.e. european)  0-padded to length 2
-        %u      hours, 00..12 (i.e. us)        0-padded to length 2
-        %m      minutes, 00..59                0-padded to length 2
-        %s      seconds, 00..59                0-padded to length 2
-        %i      milliseconds, 000..999         0-padded to length 3
-        %a      am/pm
-
-     Timestamp only:
-        %(day)   day, 00..31                    0-padded to length 2
-        %(month) month, 00..12                  0-padded to length 2
-        %(year)  year, 4 digits                 0-padded to length 4
-
-     special:
-        %H      24-hours - unpadded
-        %U      12-hours - unpadded
-        %M      minutes - unpadded
-        %S      seconds - unpadded
-        %I      milliseconds, unpadded
-        %A      AM/PM   - uppercase
-
-        %t      seconds within hour  (unpadded)
-        %T      seconds from midNight  (unpadded)
-
-        %(TZD)  timeZone delta from UTC in the format +/-hh:mm  
-
-        %milli1 milliseconds, truncated to 1/10th of a second 0..9         
-        %milli2 milliseconds, truncated to 1/100th of a second 00..99 0-padded to length 2        
-
-        %nth           - counting day-in-month (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
-        %weekDayNth    - counting day-in-week (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
-        %weekNth       - counting week-in-year (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
+     See #addPrintBindingsTo:language: for allowed format strings"
 
-     Timestamp only:
-        %Day    day - unpadded                    
-        %Month  month - unpadded                    
-        %(yearOrTime)  year or time 5 digits    as in unix-ls:
-                                                year if it is not the current year;
-                                                time otherwise
-
-
-     The ISO8601 printString are generated with:
-
-       Year:
-          YYYY (eg 1997)
-                Date today printStringFormat:'%(year)'
-                Timestamp now printStringFormat:'%(year)'  
-
-       Year and month:
-          YYYY-MM (eg 1997-07)
-                Date today printStringFormat:'%(year)-%(month)'  
-                Timestamp now printStringFormat:'%(year)-%(month)'  
-
-       Complete date:
-          YYYY-MM-DD (eg 1997-07-16)
-                Date today printStringFormat:'%(year)-%(month)-%(day)'    
-                Timestamp now printStringFormat:'%(year)-%(month)-%(day)'  
-
-       Complete date plus hours and minutes:
-          YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
-                Timestamp now printStringFormat:'%(year)-%(month)-%(day)T%h:%m%(TZD)'  
-
-       Complete date plus hours, minutes and seconds:
-          YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
-                Timestamp now printStringFormat:'%(year)-%(month)-%(day)T%h:%m:%s%(TZD)'  
-
-       Complete date plus hours, minutes, seconds and a decimal fraction of a second
-          YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
-                Timestamp now printStringFormat:'%(year)-%(month)-%(day)T%h:%m:%s.%(milli2)%(TZD)'  
-
-    "
-
-    |dict|
-
-    dict := IdentityDictionary new.
-    self addPrintBindingsTo:dict.
-
-    aFormatString expandPlaceholdersWith:dict on:aStream
+    self printOn:aStream format:aFormatString language:nil.
 
     "
      Timestamp now printOn:Transcript format:'%h:%m:%s'   . Transcript cr.      
@@ -1082,77 +1043,7 @@
 
 printOn:aStream format:aFormatString language:languageString
     "print using a format string;
-     valid format items are:
-        %h      hours, 00..23 (i.e. european)  0-padded to length 2
-        %u      hours, 00..12 (i.e. us)        0-padded to length 2
-        %m      minutes, 00..59                0-padded to length 2
-        %s      seconds, 00..59                0-padded to length 2
-        %i      milliseconds, 000..999         0-padded to length 3
-        %a      am/pm
-
-     Timestamp only:
-        %(day)   day, 00..31                    0-padded to length 2
-        %(month) month, 00..12                  0-padded to length 2
-        %(year)  year, 4 digits                 0-padded to length 4
-
-     special:
-        %H      24-hours - unpadded
-        %U      12-hours - unpadded
-        %M      minutes - unpadded
-        %S      seconds - unpadded
-        %I      milliseconds, unpadded
-        %A      AM/PM   - uppercase
-
-        %t      seconds within hour  (unpadded)
-        %T      seconds from midNight  (unpadded)
-
-        %(TZD)  timeZone delta from UTC in the format +/-hh:mm  
-
-        %milli1 milliseconds, truncated to 1/10th of a second 0..9         
-        %milli2 milliseconds, truncated to 1/100th of a second 00..99 0-padded to length 2        
-
-        %nth           - counting day-in-month (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
-        %weekDayNth    - counting day-in-week (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
-        %weekNth       - counting week-in-year (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
-
-     Timestamp only:
-        %Day    day - unpadded                    
-        %Month  month - unpadded                    
-        %(yearOrTime)  year or time 5 digits    as in unix-ls:
-                                                year if it is not the current year;
-                                                time otherwise
-
-
-     The ISO8601 printString are generated with:
-
-       Year:
-          YYYY (eg 1997)
-                Date today printStringFormat:'%(year)'
-                Timestamp now printStringFormat:'%(year)'  
-
-       Year and month:
-          YYYY-MM (eg 1997-07)
-                Date today printStringFormat:'%(year)-%(month)'  
-                Timestamp now printStringFormat:'%(year)-%(month)'  
-
-       Complete date:
-          YYYY-MM-DD (eg 1997-07-16)
-                Date today printStringFormat:'%(year)-%(month)-%(day)'    
-                Timestamp now printStringFormat:'%(year)-%(month)-%(day)'  
-
-       Complete date plus hours and minutes:
-          YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
-                Timestamp now printStringFormat:'%(year)-%(month)-%(day)T%h:%m%(TZD)'  
-
-       Complete date plus hours, minutes and seconds:
-          YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
-                Timestamp now printStringFormat:'%(year)-%(month)-%(day)T%h:%m:%s%(TZD)'  
-
-       Complete date plus hours, minutes, seconds and a decimal fraction of a second
-          YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
-                Timestamp now printStringFormat:'%(year)-%(month)-%(day)T%h:%m:%s.%(milli2)%(TZD)'  
-
-    "
+     See #addPrintBindingsTo:language: for allowed format strings"
 
     |dict|
 
@@ -1175,13 +1066,10 @@
 !
 
 printStringFormat:aFormatString
-    "print using a format string  - see #printOn:format:"
-
-    |s|
+    "print using a format string.
+     See #addPrintBindingsTo:language: for allowed format strings"
 
-    s := WriteStream on:(String new:20).
-    self printOn:s format:aFormatString.
-    ^ s contents.
+    ^ self printStringFormat:aFormatString language:nil.
 
     "
      Timestamp now printStringFormat:'%U:%m:%s %a'   
@@ -1208,7 +1096,8 @@
 !
 
 printStringFormat:aFormatString language:languageString
-    "print using a format string  - see #printOn:format:"
+    "print using a format string.
+     See #addPrintBindingsTo:language: for allowed format strings"
 
     |s|
 
@@ -1227,7 +1116,9 @@
      Timestamp now printStringFormat:'%H:%m:%s.%(milli1)'   
      Timestamp now printStringFormat:'%H:%m:%s.%(milli2)'     
      Timestamp now printStringFormat:'%(day)-%(month)-%(year) :%m:%s'       
-     Timestamp now printStringFormat:'%(day)-%(monthName)-%(year) :%m:%s'       
+     Timestamp now printStringFormat:'%(day)-%(monthName)-%(year) :%m:%s' language:#en      
+     Timestamp now printStringFormat:'%(day)-%(monthName)-%(year) :%m:%s' language:#de      
+     Timestamp now printStringFormat:'%(day)-%(monthName)-%(year) :%m:%s' language:#fr      
      Time now printStringFormat:'%u:%m:%s %a'   
      Time now printStringFormat:'%h:%m'         
      Time now printStringFormat:'%h:%m'         
@@ -1289,15 +1180,15 @@
 !AbstractTime class methodsFor:'documentation'!
 
 version
-    ^ '$Id: AbstractTime.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: AbstractTime.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/AbstractTime.st,v 1.71 2010/09/29 09:15:08 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/AbstractTime.st,v 1.73 2011/01/24 19:55:34 stefan Exp '
 !
 
 version_SVN
-    ^ '$Id: AbstractTime.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: AbstractTime.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
@@ -1305,3 +1196,4 @@
 
 
 
+
--- a/ApplicationDefinition.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/ApplicationDefinition.st	Fri Feb 04 23:09:23 2011 +0000
@@ -642,6 +642,8 @@
         at:self nsiFilename     put:#'generate_packageName_dot_nsi'.
 
     ^ dict.
+
+    "Modified: / 21-12-2010 / 11:01:27 / cg"
 !
 
 generateFile:filename
@@ -649,6 +651,8 @@
         ^ self generate_packageName_dot_nsi
     ].
     ^ super generateFile:filename
+
+    "Modified: / 21-12-2010 / 11:00:59 / cg"
 !
 
 generate_modules_dot_c
@@ -766,6 +770,59 @@
     "Created: / 15-10-2006 / 12:59:03 / cg"
 !
 
+autopackage_default_dot_apspec_mappings
+    |mappings|
+
+    mappings := super autopackage_default_dot_apspec_mappings.
+
+    mappings
+"/        at: 'TOP' put: ( self pathToTop_unix );
+"/        at: 'NSI_FILENAME' put: self nsiFilename ;
+        at: 'APPLICATION' put: self applicationName;
+        at: 'APPLICATION_PACKAGE' put: self package printString "applicationPackage";
+        at: 'APPLICATION_TYPE' put: self applicationType;
+"/        at: 'STARTUP_CLASS' put: (self startupClassName);
+"/        at: 'STARTUP_SELECTOR' put: (self startupSelector);
+"/        at: 'MAIN_DEFINES' put: (self mainDefines);
+"/        at: 'REQUIRED_LIBS' put: (self generateRequiredLibs_make_dot_proto);  
+"/        at: 'PREREQUISITES_LIBS' put: (self generatePreRequisiteLines_make_dot_proto);  
+"/        at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto); 
+"/        at: 'REQUIRED_LIBOBJS' put: (self generateRequiredLibobjs_make_dot_proto);
+"/        at: 'REQUIRED_LINK_LIBOBJS' put: (self generateRequiredLinkLibobjs_make_dot_proto);
+"/        at: 'DEPENDENCIES' put: (self generateDependencies_unix);
+"/        at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto ); 
+"/        at: 'BUILD_TARGET' put: (self buildTarget );
+        yourself.
+
+    self offerSmalltalkSourceCode ifTrue:[ 
+"/        mappings
+"/            at: 'STX_SOURCE_RULES' put: ( self replaceMappings: mappings 
+"/                                            in: self make_dot_proto_stx_source_rules).
+    ].
+
+    self offerApplicationSourceCode ifTrue:[  
+"/        mappings
+"/            at: 'SOURCE_RULES' put:( self replaceMappings: mappings 
+"/                                            in: self make_dot_proto_app_source_rules ).
+    ].
+
+    self needResources ifTrue:[
+"/        mappings
+"/            at: 'REQUIRED_SUPPORT_DIRS' put: 'RESOURCEFILES';
+"/            at: 'RESOURCE_RULES' put:( self replaceMappings: mappings 
+"/                                            in: self make_dot_proto_resource_rules );
+"/            at: 'STX_RESOURCE_RULES' put: ( self replaceMappings: mappings 
+"/                                            in: self make_dot_proto_stx_resource_rules);
+"/            at: 'ADDITIONAL_RESOURCE_TARGETS' put:( self additionalResourceTargets asStringWith:' ');
+"/            yourself.
+    ].
+
+    ^ mappings
+
+    "Created: / 21-12-2010 / 09:00:49 / cg"
+    "Modified: / 21-12-2010 / 11:00:22 / cg"
+!
+
 bc_dot_mak_mappings
     |d|
 
@@ -1527,10 +1584,10 @@
 
 REQUIRED_SUPPORT_DIRS=%(REQUIRED_SUPPORT_DIRS)
 
-target: %(BUILD_TARGET) 
+target: %(BUILD_TARGET) postBuildCleanup 
 
 # the executable, all required files and a self-installing-installer-exe
-ALL:: prereq exe setup
+ALL:: prereq exe postBuildCleanup setup 
 
 exe:  newBuildDate %(NOCONSOLE_APPLICATION_OR_EMPTY) %(CONSOLE_APPLICATION_OR_EMPTY) $(REQUIRED_SUPPORT_DIRS) %(ADDITIONAL_TARGETS)
 
@@ -1570,7 +1627,7 @@
 
 # This uses the Nullsoft Installer Package and works in Windows only
 
-install_%(APPLICATION).exe: $(PROJECT) %(NSI_FILENAME)
+install_%(APPLICATION).exe: $(PROJECT) postBuildCleanup %(NSI_FILENAME)
         $(MAKENSIS) %(NSI_FILENAME)
 
 new:
@@ -1649,6 +1706,7 @@
 
 %(ADDITIONAL_RULES)
 
+
 clean::
         -del genDate.exe
         -del c0x32.dll
@@ -1669,12 +1727,16 @@
 clobber:: clean
         -del *.dll *.exe *.com
 
+# stupid win-make does not allow empty - therefore delete something which is not there...
+postBuildCleanup::
+        -del xxxxx.xxxxx
+
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
 %(DEPENDENCIES)
 # ENDMAKEDEPEND --- do not remove this line
 '.
 
-    "Modified: / 26-07-2010 / 12:26:36 / cg"
+    "Modified: / 31-01-2011 / 22:25:27 / cg"
 !
 
 bc_dot_mak_app_source_rules
@@ -2705,14 +2767,15 @@
 !ApplicationDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ApplicationDefinition.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ApplicationDefinition.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.163 2010/11/09 10:57:46 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.170 2011/01/31 21:25:34 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: ApplicationDefinition.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ApplicationDefinition.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
+
--- a/Behavior.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Behavior.st	Fri Feb 04 23:09:23 2011 +0000
@@ -810,55 +810,55 @@
     classesInLoadOrder := OrderedCollection new:(remaining size).
 
     [remaining notEmpty] whileTrue:[
-	|thoseWithOtherSuperclasses thoseWhichCanBeLoadedNow|
-
-	"find the next class(es) to be loaded.
-	 Consider first:
-	    all those, which do not have a superclass in the remaining set.
-	    and which do not use a shared pool defined in the remaining set"
-
-	thoseWithOtherSuperclasses :=
-	    remaining
-		reject:[:eachClass |
-		    (remaining includes:eachClass superclass)
-		    or:[eachClass sharedPools contains:[:eachPoolSymbol|
-			    remaining contains:[:eachRemainingClass| eachPoolSymbol = eachRemainingClass name]
-			]
-		    ].
-		].
-
-	"second: the subset with all those having no private classes,
-		 or having private classes, whose superclasses are NOT in the remaining set"
-
-	thoseWhichCanBeLoadedNow :=
-	    thoseWithOtherSuperclasses
-		reject:[:eachClass |
-		    eachClass allPrivateClasses contains:[:eachPrivateClass| |superClassesOwner|
-			superClassesOwner := eachPrivateClass superclass.
-			"take care of classes inheriting from nil or ProtoObject"
-			superClassesOwner isBehavior ifTrue:[
-			    superClassesOwner := superClassesOwner owningClassOrYourself.
-			].
-			superClassesOwner ~~ eachClass
-			and:[remaining includes:superClassesOwner]
-		    ].
-		].
-
-	thoseWhichCanBeLoadedNow isEmpty ifTrue:[
-	    thoseWithOtherSuperclasses isEmpty ifTrue:[
-		"this does not normally happen"
-		self error:'superclass order is cyclic'.
-	    ] ifFalse:[
-		"no class found, that may be loaded - maybe there is a cyclic
-		 dependency involving private classes.
-		 If you proceed here, private class dependencies are ignored
-		 for this pass"
-		self error:'load order is cyclic (care for private classes)' mayProceed:true.
-		thoseWhichCanBeLoadedNow := thoseWithOtherSuperclasses.
-	    ].
-	].
-	remaining removeAllFoundIn:thoseWhichCanBeLoadedNow.
-	classesInLoadOrder addAll:(thoseWhichCanBeLoadedNow asArray sort:[:a :b | a name < b name]).
+        |thoseWithOtherSuperclasses thoseWhichCanBeLoadedNow|
+
+        "find the next class(es) to be loaded.
+         Consider first:
+            all those, which do not have a superclass in the remaining set.
+            and which do not use a shared pool defined in the remaining set"
+
+        thoseWithOtherSuperclasses :=
+            remaining
+                reject:[:eachClass |
+                    (remaining includes:eachClass superclass)
+                    or:[eachClass sharedPoolNames contains:[:eachPoolSymbol|
+                            remaining contains:[:eachRemainingClass| eachPoolSymbol = eachRemainingClass name]
+                        ]
+                    ].
+                ].
+
+        "second: the subset with all those having no private classes,
+                 or having private classes, whose superclasses are NOT in the remaining set"
+
+        thoseWhichCanBeLoadedNow :=
+            thoseWithOtherSuperclasses
+                reject:[:eachClass |
+                    eachClass allPrivateClasses contains:[:eachPrivateClass| |superClassesOwner|
+                        superClassesOwner := eachPrivateClass superclass.
+                        "take care of classes inheriting from nil or ProtoObject"
+                        superClassesOwner isBehavior ifTrue:[
+                            superClassesOwner := superClassesOwner owningClassOrYourself.
+                        ].
+                        superClassesOwner ~~ eachClass
+                        and:[remaining includes:superClassesOwner]
+                    ].
+                ].
+
+        thoseWhichCanBeLoadedNow isEmpty ifTrue:[
+            thoseWithOtherSuperclasses isEmpty ifTrue:[
+                "this does not normally happen"
+                self error:'superclass order is cyclic'.
+            ] ifFalse:[
+                "no class found, that may be loaded - maybe there is a cyclic
+                 dependency involving private classes.
+                 If you proceed here, private class dependencies are ignored
+                 for this pass"
+                self error:'load order is cyclic (care for private classes)' mayProceed:true.
+                thoseWhichCanBeLoadedNow := thoseWithOtherSuperclasses.
+            ].
+        ].
+        remaining removeAllFoundIn:thoseWhichCanBeLoadedNow.
+        classesInLoadOrder addAll:(thoseWhichCanBeLoadedNow asArray sort:[:a :b | a name < b name]).
     ].
     ^ classesInLoadOrder
 
@@ -869,6 +869,7 @@
     "
 
     "Created: / 14-09-2006 / 11:21:25 / cg"
+    "Modified: / 18-01-2011 / 17:55:59 / cg"
 !
 
 commonSuperclassOf:listOfClassesOrClassNames
@@ -1153,6 +1154,7 @@
 ! !
 
 
+
 !Behavior methodsFor:'accessing'!
 
 addSelector:newSelector withMethod:newMethod
@@ -2730,9 +2732,11 @@
 !
 
 classOperationsMenu
-    "a chance to return additional menu items for the browsers class-menu"
+    "a chance to return additional menu items for the browser's class-menu"
 
     ^ nil
+
+    "Modified: / 31-01-2011 / 11:05:49 / cg"
 !
 
 flushSubclasses
@@ -4709,15 +4713,16 @@
 !Behavior class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Behavior.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Behavior.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Behavior.st,v 1.305 2010/07/08 14:12:15 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Behavior.st,v 1.307 2011/01/31 10:12:36 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Behavior.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Behavior.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
+
--- a/Block.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Block.st	Fri Feb 04 23:09:23 2011 +0000
@@ -554,6 +554,7 @@
     "Created: / 28-08-2010 / 14:41:15 / cg"
 ! !
 
+
 !Block methodsFor:'accessing'!
 
 home
@@ -611,6 +612,7 @@
     ^ nargs
 ! !
 
+
 !Block methodsFor:'compatibility-Cola & Pepsi'!
 
 arity
@@ -2019,27 +2021,44 @@
      exceptionBlock's value is returned. The receiver's code must be prepared
      for premature returning (by adding ensure blocks, as required)"
 
-    |showStopper me retVal done|
+    |showStopper me retVal done inError|
 
     done := false.
     me := Processor activeProcess.
 
-    showStopper := [ done ifFalse:[ me interruptWith:[ done ifFalse:[ TimeoutNotification raiseRequest ]] ]].
+    showStopper := 
+        [ 
+            done ifFalse:[ 
+                me interruptWith:[
+                    (Processor activeProcess state ~~ #debug) ifTrue:[
+                        done ifFalse:[ TimeoutNotification raiseRequest ]
+                    ]
+                ] 
+            ]
+        ].
 
     TimeoutNotification handle:[:ex |
+        inError ifTrue:[
+            ex proceed
+        ].
         retVal := exceptionBlock value.
     ] do:[
-        [
-            Processor 
-                addTimedBlock:showStopper 
-                for:me 
-                afterMilliseconds:aTimeLimit.
-
-            retVal := self value.
-            done := true.
-        ] ensure:[ 
-            Processor removeTimedBlock:showStopper 
-        ].
+        NoHandlerError handle:[:ex |
+            inError := true.
+            ex reject.
+        ] do:[
+            [
+                Processor 
+                    addTimedBlock:showStopper 
+                    for:me 
+                    afterMilliseconds:aTimeLimit.
+
+                retVal := self value.
+                done := true.
+            ] ensure:[ 
+                Processor removeTimedBlock:showStopper 
+            ].
+        ]
     ].
     ^ retVal
 
@@ -2051,7 +2070,7 @@
     "
 
     "Modified: / 21-05-2010 / 12:19:57 / sr"
-    "Modified: / 20-08-2010 / 12:16:58 / cg"
+    "Modified: / 18-01-2011 / 19:24:13 / cg"
 ! !
 
 !Block methodsFor:'exception handling private'!
@@ -2931,15 +2950,15 @@
 !Block class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Block.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Block.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Block.st,v 1.183 2010/09/05 16:08:19 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Block.st,v 1.184 2011/01/18 18:24:31 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Block.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Block.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Block initialize!
@@ -2952,3 +2971,4 @@
 
 
 
+
--- a/ByteArray.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/ByteArray.st	Fri Feb 04 23:09:23 2011 +0000
@@ -162,6 +162,7 @@
 ! !
 
 
+
 !ByteArray class methodsFor:'queries'!
 
 isBuiltInClass
@@ -173,6 +174,8 @@
     "Modified: 23.4.1996 / 15:56:25 / cg"
 ! !
 
+
+
 !ByteArray methodsFor:'Compatibility-Squeak'!
 
 bitXor:aByteArray
@@ -2701,34 +2704,6 @@
     "Created: / 31.10.2001 / 09:43:41 / cg"
 !
 
-storeArrayElementOn:aStream
-    "Store as element of an array. Omit the leading '#'"
-
-    |cls|
-
-    ((cls := self class) == ByteArray or:[cls == ImmutableByteArray]) ifTrue:[
-	"/ care for subclasses
-	aStream nextPut:$[.
-	self
-	    do:[:byte | byte storeOn:aStream]
-	    separatedBy:[aStream space].
-	aStream nextPut:$].
-	^ self
-    ].
-    super storeArrayElementOn:aStream
-
-    "
-     #[1 2 3 4 5] storeOn:Transcript
-     #[1 2 3 4 5] storeArrayElementOn:Transcript
-
-     #[1 2 3 4 5] storeString
-     #[1 2 3 4 5] displayString
-     #[1 2 3 4 5] printString
-    "
-
-    "Modified: 12.9.1997 / 22:11:33 / cg"
-!
-
 storeOn:aStream
     "append a printed representation from which the receiver can be
      reconstructed to aStream. (reimplemented to make it look better)"
@@ -2930,6 +2905,7 @@
     "
 ! !
 
+
 !ByteArray methodsFor:'searching'!
 
 indexOf:aByte startingAt:start
@@ -2985,6 +2961,7 @@
     "
 ! !
 
+
 !ByteArray methodsFor:'testing'!
 
 isByteArray
@@ -3012,15 +2989,15 @@
 !ByteArray class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ByteArray.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ByteArray.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/ByteArray.st,v 1.203 2010/09/21 06:58:04 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/ByteArray.st,v 1.204 2011/01/18 17:09:02 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: ByteArray.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ByteArray.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
@@ -3028,3 +3005,4 @@
 
 
 
+
--- a/CharacterArray.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/CharacterArray.st	Fri Feb 04 23:09:23 2011 +0000
@@ -228,14 +228,16 @@
     "Modified: / 06-10-2006 / 14:05:32 / cg"
 !
 
-writeStream
-    "create a write-stream on an instance of the receiver-class"
-
-    ^ CharacterWriteStream on:(self new:50).
+writeStreamClass
+    "the class used by writeStream"
+
+    ^ CharacterWriteStream
 
     "
      String writeStream
     "
+
+    "Created: / 09-01-2011 / 10:37:57 / cg"
 ! !
 
 !CharacterArray class methodsFor:'Compatibility-VW'!
@@ -1506,7 +1508,6 @@
 ! !
 
 
-
 !CharacterArray methodsFor:'character searching'!
 
 includesMatchCharacters
@@ -4725,7 +4726,6 @@
     "Modified: 17.4.1997 / 12:50:23 / cg"
 ! !
 
-
 !CharacterArray methodsFor:'special string converting'!
 
 expandPlaceholdersWith:argArrayOrDictionary
@@ -5901,15 +5901,15 @@
 !CharacterArray class methodsFor:'documentation'!
 
 version
-    ^ '$Id: CharacterArray.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: CharacterArray.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.445 2010/12/13 10:42:56 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.446 2011/01/09 09:38:33 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: CharacterArray.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: CharacterArray.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 CharacterArray initialize!
@@ -5923,3 +5923,4 @@
 
 
 
+
--- a/CharacterEncoderImplementations__MAC_Roman.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/CharacterEncoderImplementations__MAC_Roman.st	Fri Feb 04 23:09:23 2011 +0000
@@ -9,7 +9,6 @@
  other person.  No title to or ownership of the software is
  hereby transferred.
 "
-
 "{ Package: 'stx:libbasic' }"
 
 "{ NameSpace: CharacterEncoderImplementations }"
@@ -41,6 +40,12 @@
 
 mapFileURL1_relativePathName
     ^ 'VENDORS/APPLE/ROMAN.TXT'
+
+    "
+     self generateCode
+    "
+
+    "Modified: / 29-01-2011 / 21:32:53 / cg"
 !
 
 mapping
@@ -413,8 +418,557 @@
 "
 ! !
 
+!MAC_Roman methodsFor:'encoding & decoding'!
+
+decode:codeArg
+    "Automagically generated by generateCode - do not modify.
+     Decode from my encoding into unicode."
+
+    |code "{ Class: SmallInteger }"|
+
+    code := codeArg.
+    code <= 16r1F ifTrue:[
+        ^ self decodingError.
+    ].
+    code <= 16r7E ifTrue:[ ^ code ].
+    code > 16rFF ifTrue:[
+        ^ self decodingError.
+    ].
+    [
+        |t|
+        t := #(
+           "16r007F"    16r0000 " invalid " 
+           "16r0080"    16r00C4 " LATIN CAPITAL LETTER A WITH DIAERESIS " 
+           "16r0081"    16r00C5 " LATIN CAPITAL LETTER A WITH RING ABOVE " 
+           "16r0082"    16r00C7 " LATIN CAPITAL LETTER C WITH CEDILLA " 
+           "16r0083"    16r00C9 " LATIN CAPITAL LETTER E WITH ACUTE " 
+           "16r0084"    16r00D1 " LATIN CAPITAL LETTER N WITH TILDE " 
+           "16r0085"    16r00D6 " LATIN CAPITAL LETTER O WITH DIAERESIS " 
+           "16r0086"    16r00DC " LATIN CAPITAL LETTER U WITH DIAERESIS " 
+           "16r0087"    16r00E1 " LATIN SMALL LETTER A WITH ACUTE " 
+           "16r0088"    16r00E0 " LATIN SMALL LETTER A WITH GRAVE " 
+           "16r0089"    16r00E2 " LATIN SMALL LETTER A WITH CIRCUMFLEX " 
+           "16r008A"    16r00E4 " LATIN SMALL LETTER A WITH DIAERESIS " 
+           "16r008B"    16r00E3 " LATIN SMALL LETTER A WITH TILDE " 
+           "16r008C"    16r00E5 " LATIN SMALL LETTER A WITH RING ABOVE " 
+           "16r008D"    16r00E7 " LATIN SMALL LETTER C WITH CEDILLA " 
+           "16r008E"    16r00E9 " LATIN SMALL LETTER E WITH ACUTE " 
+           "16r008F"    16r00E8 " LATIN SMALL LETTER E WITH GRAVE " 
+           "16r0090"    16r00EA " LATIN SMALL LETTER E WITH CIRCUMFLEX " 
+           "16r0091"    16r00EB " LATIN SMALL LETTER E WITH DIAERESIS " 
+           "16r0092"    16r00ED " LATIN SMALL LETTER I WITH ACUTE " 
+           "16r0093"    16r00EC " LATIN SMALL LETTER I WITH GRAVE " 
+           "16r0094"    16r00EE " LATIN SMALL LETTER I WITH CIRCUMFLEX " 
+           "16r0095"    16r00EF " LATIN SMALL LETTER I WITH DIAERESIS " 
+           "16r0096"    16r00F1 " LATIN SMALL LETTER N WITH TILDE " 
+           "16r0097"    16r00F3 " LATIN SMALL LETTER O WITH ACUTE " 
+           "16r0098"    16r00F2 " LATIN SMALL LETTER O WITH GRAVE " 
+           "16r0099"    16r00F4 " LATIN SMALL LETTER O WITH CIRCUMFLEX " 
+           "16r009A"    16r00F6 " LATIN SMALL LETTER O WITH DIAERESIS " 
+           "16r009B"    16r00F5 " LATIN SMALL LETTER O WITH TILDE " 
+           "16r009C"    16r00FA " LATIN SMALL LETTER U WITH ACUTE " 
+           "16r009D"    16r00F9 " LATIN SMALL LETTER U WITH GRAVE " 
+           "16r009E"    16r00FB " LATIN SMALL LETTER U WITH CIRCUMFLEX " 
+           "16r009F"    16r00FC " LATIN SMALL LETTER U WITH DIAERESIS " 
+           "16r00A0"    16r2020 " DAGGER " 
+           "16r00A1"    16r00B0 " DEGREE SIGN " 
+           "16r00A2"    16r00A2 " CENT SIGN " 
+           "16r00A3"    16r00A3 " POUND SIGN " 
+           "16r00A4"    16r00A7 " SECTION SIGN " 
+           "16r00A5"    16r2022 " BULLET " 
+           "16r00A6"    16r00B6 " PILCROW SIGN " 
+           "16r00A7"    16r00DF " LATIN SMALL LETTER SHARP S " 
+           "16r00A8"    16r00AE " REGISTERED SIGN " 
+           "16r00A9"    16r00A9 " COPYRIGHT SIGN " 
+           "16r00AA"    16r2122 " TRADE MARK SIGN " 
+           "16r00AB"    16r00B4 " ACUTE ACCENT " 
+           "16r00AC"    16r00A8 " DIAERESIS " 
+           "16r00AD"    16r2260 " NOT EQUAL TO " 
+           "16r00AE"    16r00C6 " LATIN CAPITAL LETTER AE " 
+           "16r00AF"    16r00D8 " LATIN CAPITAL LETTER O WITH STROKE " 
+           "16r00B0"    16r221E " INFINITY " 
+           "16r00B1"    16r00B1 " PLUS-MINUS SIGN " 
+           "16r00B2"    16r2264 " LESS-THAN OR EQUAL TO " 
+           "16r00B3"    16r2265 " GREATER-THAN OR EQUAL TO " 
+           "16r00B4"    16r00A5 " YEN SIGN " 
+           "16r00B5"    16r00B5 " MICRO SIGN " 
+           "16r00B6"    16r2202 " PARTIAL DIFFERENTIAL " 
+           "16r00B7"    16r2211 " N-ARY SUMMATION " 
+           "16r00B8"    16r220F " N-ARY PRODUCT " 
+           "16r00B9"    16r03C0 " GREEK SMALL LETTER PI " 
+           "16r00BA"    16r222B " INTEGRAL " 
+           "16r00BB"    16r00AA " FEMININE ORDINAL INDICATOR " 
+           "16r00BC"    16r00BA " MASCULINE ORDINAL INDICATOR " 
+           "16r00BD"    16r03A9 " GREEK CAPITAL LETTER OMEGA " 
+           "16r00BE"    16r00E6 " LATIN SMALL LETTER AE " 
+           "16r00BF"    16r00F8 " LATIN SMALL LETTER O WITH STROKE " 
+           "16r00C0"    16r00BF " INVERTED QUESTION MARK " 
+           "16r00C1"    16r00A1 " INVERTED EXCLAMATION MARK " 
+           "16r00C2"    16r00AC " NOT SIGN " 
+           "16r00C3"    16r221A " SQUARE ROOT " 
+           "16r00C4"    16r0192 " LATIN SMALL LETTER F WITH HOOK " 
+           "16r00C5"    16r2248 " ALMOST EQUAL TO " 
+           "16r00C6"    16r2206 " INCREMENT " 
+           "16r00C7"    16r00AB " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+           "16r00C8"    16r00BB " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+           "16r00C9"    16r2026 " HORIZONTAL ELLIPSIS " 
+           "16r00CA"    16r00A0 " NO-BREAK SPACE " 
+           "16r00CB"    16r00C0 " LATIN CAPITAL LETTER A WITH GRAVE " 
+           "16r00CC"    16r00C3 " LATIN CAPITAL LETTER A WITH TILDE " 
+           "16r00CD"    16r00D5 " LATIN CAPITAL LETTER O WITH TILDE " 
+           "16r00CE"    16r0152 " LATIN CAPITAL LIGATURE OE " 
+           "16r00CF"    16r0153 " LATIN SMALL LIGATURE OE " 
+           "16r00D0"    16r2013 " EN DASH " 
+           "16r00D1"    16r2014 " EM DASH " 
+           "16r00D2"    16r201C " LEFT DOUBLE QUOTATION MARK " 
+           "16r00D3"    16r201D " RIGHT DOUBLE QUOTATION MARK " 
+           "16r00D4"    16r2018 " LEFT SINGLE QUOTATION MARK " 
+           "16r00D5"    16r2019 " RIGHT SINGLE QUOTATION MARK " 
+           "16r00D6"    16r00F7 " DIVISION SIGN " 
+           "16r00D7"    16r25CA " LOZENGE " 
+           "16r00D8"    16r00FF " LATIN SMALL LETTER Y WITH DIAERESIS " 
+           "16r00D9"    16r0178 " LATIN CAPITAL LETTER Y WITH DIAERESIS " 
+           "16r00DA"    16r2044 " FRACTION SLASH " 
+           "16r00DB"    16r20AC " EURO SIGN " 
+           "16r00DC"    16r2039 " SINGLE LEFT-POINTING ANGLE QUOTATION MARK " 
+           "16r00DD"    16r203A " SINGLE RIGHT-POINTING ANGLE QUOTATION MARK " 
+           "16r00DE"    16rFB01 " LATIN SMALL LIGATURE FI " 
+           "16r00DF"    16rFB02 " LATIN SMALL LIGATURE FL " 
+           "16r00E0"    16r2021 " DOUBLE DAGGER " 
+           "16r00E1"    16r00B7 " MIDDLE DOT " 
+           "16r00E2"    16r201A " SINGLE LOW-9 QUOTATION MARK " 
+           "16r00E3"    16r201E " DOUBLE LOW-9 QUOTATION MARK " 
+           "16r00E4"    16r2030 " PER MILLE SIGN " 
+           "16r00E5"    16r00C2 " LATIN CAPITAL LETTER A WITH CIRCUMFLEX " 
+           "16r00E6"    16r00CA " LATIN CAPITAL LETTER E WITH CIRCUMFLEX " 
+           "16r00E7"    16r00C1 " LATIN CAPITAL LETTER A WITH ACUTE " 
+           "16r00E8"    16r00CB " LATIN CAPITAL LETTER E WITH DIAERESIS " 
+           "16r00E9"    16r00C8 " LATIN CAPITAL LETTER E WITH GRAVE " 
+           "16r00EA"    16r00CD " LATIN CAPITAL LETTER I WITH ACUTE " 
+           "16r00EB"    16r00CE " LATIN CAPITAL LETTER I WITH CIRCUMFLEX " 
+           "16r00EC"    16r00CF " LATIN CAPITAL LETTER I WITH DIAERESIS " 
+           "16r00ED"    16r00CC " LATIN CAPITAL LETTER I WITH GRAVE " 
+           "16r00EE"    16r00D3 " LATIN CAPITAL LETTER O WITH ACUTE " 
+           "16r00EF"    16r00D4 " LATIN CAPITAL LETTER O WITH CIRCUMFLEX " 
+           "16r00F0"    16rF8FF " Apple logo " 
+           "16r00F1"    16r00D2 " LATIN CAPITAL LETTER O WITH GRAVE " 
+           "16r00F2"    16r00DA " LATIN CAPITAL LETTER U WITH ACUTE " 
+           "16r00F3"    16r00DB " LATIN CAPITAL LETTER U WITH CIRCUMFLEX " 
+           "16r00F4"    16r00D9 " LATIN CAPITAL LETTER U WITH GRAVE " 
+           "16r00F5"    16r0131 " LATIN SMALL LETTER DOTLESS I " 
+           "16r00F6"    16r02C6 " MODIFIER LETTER CIRCUMFLEX ACCENT " 
+           "16r00F7"    16r02DC " SMALL TILDE " 
+           "16r00F8"    16r00AF " MACRON " 
+           "16r00F9"    16r02D8 " BREVE " 
+           "16r00FA"    16r02D9 " DOT ABOVE " 
+           "16r00FB"    16r02DA " RING ABOVE " 
+           "16r00FC"    16r00B8 " CEDILLA " 
+           "16r00FD"    16r02DD " DOUBLE ACUTE ACCENT " 
+           "16r00FE"    16r02DB " OGONEK " 
+           "16r00FF"    16r02C7 " CARON " 
+           ) at:(code - 16r7E).
+        t == 0 ifFalse:[^ t].
+        ^ self decodingError.
+    ] value.
+!
+
+encode:unicodeArg
+    "Automagically generated by generateCode - do not modify.
+     Encode from unicode into my encoding."
+
+    |unicode "{ Class: SmallInteger }"|
+
+    unicode := unicodeArg.
+    unicode <= 16r1F ifTrue:[
+        ^ self decodingError.
+    ].
+    unicode <= 16r7E ifTrue:[ ^ unicode ].
+    unicode > 16rFB02 ifTrue:[
+        ^ self encodingError.
+    ].
+    unicode <= 16r9F ifTrue:[
+        ^ self encodingError
+    ].
+    unicode <= 16r25CA ifTrue:[
+        unicode <= 16r3C0 ifTrue:[
+            unicode <= 16r192 ifTrue:[
+                unicode <= 16rFF ifTrue:[
+                    [
+                        |t|
+                        t := #[
+                           "16r00A0"    16rCA " NO-BREAK SPACE " 
+                           "16r00A1"    16rC1 " INVERTED EXCLAMATION MARK " 
+                           "16r00A2"    16rA2 " CENT SIGN " 
+                           "16r00A3"    16rA3 " POUND SIGN " 
+                           "16r00A4"    16r00 " invalid " 
+                           "16r00A5"    16rB4 " YEN SIGN " 
+                           "16r00A6"    16r00 " invalid " 
+                           "16r00A7"    16rA4 " SECTION SIGN " 
+                           "16r00A8"    16rAC " DIAERESIS " 
+                           "16r00A9"    16rA9 " COPYRIGHT SIGN " 
+                           "16r00AA"    16rBB " FEMININE ORDINAL INDICATOR " 
+                           "16r00AB"    16rC7 " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+                           "16r00AC"    16rC2 " NOT SIGN " 
+                           "16r00AD"    16r00 " invalid " 
+                           "16r00AE"    16rA8 " REGISTERED SIGN " 
+                           "16r00AF"    16rF8 " MACRON " 
+                           "16r00B0"    16rA1 " DEGREE SIGN " 
+                           "16r00B1"    16rB1 " PLUS-MINUS SIGN " 
+                           "16r00B2"    16r00 " invalid " 
+                           "16r00B3"    16r00 " invalid " 
+                           "16r00B4"    16rAB " ACUTE ACCENT " 
+                           "16r00B5"    16rB5 " MICRO SIGN " 
+                           "16r00B6"    16rA6 " PILCROW SIGN " 
+                           "16r00B7"    16rE1 " MIDDLE DOT " 
+                           "16r00B8"    16rFC " CEDILLA " 
+                           "16r00B9"    16r00 " invalid " 
+                           "16r00BA"    16rBC " MASCULINE ORDINAL INDICATOR " 
+                           "16r00BB"    16rC8 " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK " 
+                           "16r00BC"    16r00 " invalid " 
+                           "16r00BD"    16r00 " invalid " 
+                           "16r00BE"    16r00 " invalid " 
+                           "16r00BF"    16rC0 " INVERTED QUESTION MARK " 
+                           "16r00C0"    16rCB " LATIN CAPITAL LETTER A WITH GRAVE " 
+                           "16r00C1"    16rE7 " LATIN CAPITAL LETTER A WITH ACUTE " 
+                           "16r00C2"    16rE5 " LATIN CAPITAL LETTER A WITH CIRCUMFLEX " 
+                           "16r00C3"    16rCC " LATIN CAPITAL LETTER A WITH TILDE " 
+                           "16r00C4"    16r80 " LATIN CAPITAL LETTER A WITH DIAERESIS " 
+                           "16r00C5"    16r81 " LATIN CAPITAL LETTER A WITH RING ABOVE " 
+                           "16r00C6"    16rAE " LATIN CAPITAL LETTER AE " 
+                           "16r00C7"    16r82 " LATIN CAPITAL LETTER C WITH CEDILLA " 
+                           "16r00C8"    16rE9 " LATIN CAPITAL LETTER E WITH GRAVE " 
+                           "16r00C9"    16r83 " LATIN CAPITAL LETTER E WITH ACUTE " 
+                           "16r00CA"    16rE6 " LATIN CAPITAL LETTER E WITH CIRCUMFLEX " 
+                           "16r00CB"    16rE8 " LATIN CAPITAL LETTER E WITH DIAERESIS " 
+                           "16r00CC"    16rED " LATIN CAPITAL LETTER I WITH GRAVE " 
+                           "16r00CD"    16rEA " LATIN CAPITAL LETTER I WITH ACUTE " 
+                           "16r00CE"    16rEB " LATIN CAPITAL LETTER I WITH CIRCUMFLEX " 
+                           "16r00CF"    16rEC " LATIN CAPITAL LETTER I WITH DIAERESIS " 
+                           "16r00D0"    16r00 " invalid " 
+                           "16r00D1"    16r84 " LATIN CAPITAL LETTER N WITH TILDE " 
+                           "16r00D2"    16rF1 " LATIN CAPITAL LETTER O WITH GRAVE " 
+                           "16r00D3"    16rEE " LATIN CAPITAL LETTER O WITH ACUTE " 
+                           "16r00D4"    16rEF " LATIN CAPITAL LETTER O WITH CIRCUMFLEX " 
+                           "16r00D5"    16rCD " LATIN CAPITAL LETTER O WITH TILDE " 
+                           "16r00D6"    16r85 " LATIN CAPITAL LETTER O WITH DIAERESIS " 
+                           "16r00D7"    16r00 " invalid " 
+                           "16r00D8"    16rAF " LATIN CAPITAL LETTER O WITH STROKE " 
+                           "16r00D9"    16rF4 " LATIN CAPITAL LETTER U WITH GRAVE " 
+                           "16r00DA"    16rF2 " LATIN CAPITAL LETTER U WITH ACUTE " 
+                           "16r00DB"    16rF3 " LATIN CAPITAL LETTER U WITH CIRCUMFLEX " 
+                           "16r00DC"    16r86 " LATIN CAPITAL LETTER U WITH DIAERESIS " 
+                           "16r00DD"    16r00 " invalid " 
+                           "16r00DE"    16r00 " invalid " 
+                           "16r00DF"    16rA7 " LATIN SMALL LETTER SHARP S " 
+                           "16r00E0"    16r88 " LATIN SMALL LETTER A WITH GRAVE " 
+                           "16r00E1"    16r87 " LATIN SMALL LETTER A WITH ACUTE " 
+                           "16r00E2"    16r89 " LATIN SMALL LETTER A WITH CIRCUMFLEX " 
+                           "16r00E3"    16r8B " LATIN SMALL LETTER A WITH TILDE " 
+                           "16r00E4"    16r8A " LATIN SMALL LETTER A WITH DIAERESIS " 
+                           "16r00E5"    16r8C " LATIN SMALL LETTER A WITH RING ABOVE " 
+                           "16r00E6"    16rBE " LATIN SMALL LETTER AE " 
+                           "16r00E7"    16r8D " LATIN SMALL LETTER C WITH CEDILLA " 
+                           "16r00E8"    16r8F " LATIN SMALL LETTER E WITH GRAVE " 
+                           "16r00E9"    16r8E " LATIN SMALL LETTER E WITH ACUTE " 
+                           "16r00EA"    16r90 " LATIN SMALL LETTER E WITH CIRCUMFLEX " 
+                           "16r00EB"    16r91 " LATIN SMALL LETTER E WITH DIAERESIS " 
+                           "16r00EC"    16r93 " LATIN SMALL LETTER I WITH GRAVE " 
+                           "16r00ED"    16r92 " LATIN SMALL LETTER I WITH ACUTE " 
+                           "16r00EE"    16r94 " LATIN SMALL LETTER I WITH CIRCUMFLEX " 
+                           "16r00EF"    16r95 " LATIN SMALL LETTER I WITH DIAERESIS " 
+                           "16r00F0"    16r00 " invalid " 
+                           "16r00F1"    16r96 " LATIN SMALL LETTER N WITH TILDE " 
+                           "16r00F2"    16r98 " LATIN SMALL LETTER O WITH GRAVE " 
+                           "16r00F3"    16r97 " LATIN SMALL LETTER O WITH ACUTE " 
+                           "16r00F4"    16r99 " LATIN SMALL LETTER O WITH CIRCUMFLEX " 
+                           "16r00F5"    16r9B " LATIN SMALL LETTER O WITH TILDE " 
+                           "16r00F6"    16r9A " LATIN SMALL LETTER O WITH DIAERESIS " 
+                           "16r00F7"    16rD6 " DIVISION SIGN " 
+                           "16r00F8"    16rBF " LATIN SMALL LETTER O WITH STROKE " 
+                           "16r00F9"    16r9D " LATIN SMALL LETTER U WITH GRAVE " 
+                           "16r00FA"    16r9C " LATIN SMALL LETTER U WITH ACUTE " 
+                           "16r00FB"    16r9E " LATIN SMALL LETTER U WITH CIRCUMFLEX " 
+                           "16r00FC"    16r9F " LATIN SMALL LETTER U WITH DIAERESIS " 
+                           "16r00FD"    16r00 " invalid " 
+                           "16r00FE"    16r00 " invalid " 
+                           "16r00FF"    16rD8 " LATIN SMALL LETTER Y WITH DIAERESIS " 
+                           ] at:(unicode - 16r9F).
+                        t == 0 ifFalse:[^ t].
+                        ^ self encodingError
+                    ] value.
+                ].
+                unicode <= 16r130 ifTrue:[
+                    ^ self encodingError
+                ].
+                unicode <= 16r153 ifTrue:[
+                    unicode == 16r131 ifTrue:[
+                        ^  "16r0131" 16r00F5 " LATIN SMALL LETTER DOTLESS I " 
+                    ].
+                    unicode <= 16r151 ifTrue:[
+                        ^ self encodingError
+                    ].
+                    ^ #[
+                       "16r0152"    16rCE " LATIN CAPITAL LIGATURE OE " 
+                       "16r0153"    16rCF " LATIN SMALL LIGATURE OE " 
+                       ] at:(unicode - 16r151).
+                ].
+                unicode <= 16r177 ifTrue:[
+                    ^ self encodingError
+                ].
+                unicode == 16r178 ifTrue:[
+                    ^  "16r0178" 16r00D9 " LATIN CAPITAL LETTER Y WITH DIAERESIS " 
+                ].
+                unicode <= 16r191 ifTrue:[
+                    ^ self encodingError
+                ].
+                ^  "16r0192" 16r00C4 " LATIN SMALL LETTER F WITH HOOK " 
+            ].
+            unicode <= 16r2C5 ifTrue:[
+                ^ self encodingError
+            ].
+            unicode <= 16r2DD ifTrue:[
+                unicode <= 16r2C7 ifTrue:[
+                    ^ #[
+                       "16r02C6"    16rF6 " MODIFIER LETTER CIRCUMFLEX ACCENT " 
+                       "16r02C7"    16rFF " CARON " 
+                       ] at:(unicode - 16r2C5).
+                ].
+                unicode <= 16r2D7 ifTrue:[
+                    ^ self encodingError
+                ].
+                ^ #[
+                   "16r02D8"    16rF9 " BREVE " 
+                   "16r02D9"    16rFA " DOT ABOVE " 
+                   "16r02DA"    16rFB " RING ABOVE " 
+                   "16r02DB"    16rFE " OGONEK " 
+                   "16r02DC"    16rF7 " SMALL TILDE " 
+                   "16r02DD"    16rFD " DOUBLE ACUTE ACCENT " 
+                   ] at:(unicode - 16r2D7).
+            ].
+            unicode <= 16r3A8 ifTrue:[
+                ^ self encodingError
+            ].
+            unicode == 16r3A9 ifTrue:[
+                ^  "16r03A9" 16r00BD " GREEK CAPITAL LETTER OMEGA " 
+            ].
+            unicode <= 16r3BF ifTrue:[
+                ^ self encodingError
+            ].
+            ^  "16r03C0" 16r00B9 " GREEK SMALL LETTER PI " 
+        ].
+        unicode <= 16r2012 ifTrue:[
+            ^ self encodingError
+        ].
+        unicode <= 16r2265 ifTrue:[
+            unicode <= 16r2122 ifTrue:[
+                unicode <= 16r20AC ifTrue:[
+                    unicode <= 16r2044 ifTrue:[
+                        [
+                            |t|
+                            t := #[
+                               "16r2013"    16rD0 " EN DASH " 
+                               "16r2014"    16rD1 " EM DASH " 
+                               "16r2015"    16r00 " invalid " 
+                               "16r2016"    16r00 " invalid " 
+                               "16r2017"    16r00 " invalid " 
+                               "16r2018"    16rD4 " LEFT SINGLE QUOTATION MARK " 
+                               "16r2019"    16rD5 " RIGHT SINGLE QUOTATION MARK " 
+                               "16r201A"    16rE2 " SINGLE LOW-9 QUOTATION MARK " 
+                               "16r201B"    16r00 " invalid " 
+                               "16r201C"    16rD2 " LEFT DOUBLE QUOTATION MARK " 
+                               "16r201D"    16rD3 " RIGHT DOUBLE QUOTATION MARK " 
+                               "16r201E"    16rE3 " DOUBLE LOW-9 QUOTATION MARK " 
+                               "16r201F"    16r00 " invalid " 
+                               "16r2020"    16rA0 " DAGGER " 
+                               "16r2021"    16rE0 " DOUBLE DAGGER " 
+                               "16r2022"    16rA5 " BULLET " 
+                               "16r2023"    16r00 " invalid " 
+                               "16r2024"    16r00 " invalid " 
+                               "16r2025"    16r00 " invalid " 
+                               "16r2026"    16rC9 " HORIZONTAL ELLIPSIS " 
+                               "16r2027"    16r00 " invalid " 
+                               "16r2028"    16r00 " invalid " 
+                               "16r2029"    16r00 " invalid " 
+                               "16r202A"    16r00 " invalid " 
+                               "16r202B"    16r00 " invalid " 
+                               "16r202C"    16r00 " invalid " 
+                               "16r202D"    16r00 " invalid " 
+                               "16r202E"    16r00 " invalid " 
+                               "16r202F"    16r00 " invalid " 
+                               "16r2030"    16rE4 " PER MILLE SIGN " 
+                               "16r2031"    16r00 " invalid " 
+                               "16r2032"    16r00 " invalid " 
+                               "16r2033"    16r00 " invalid " 
+                               "16r2034"    16r00 " invalid " 
+                               "16r2035"    16r00 " invalid " 
+                               "16r2036"    16r00 " invalid " 
+                               "16r2037"    16r00 " invalid " 
+                               "16r2038"    16r00 " invalid " 
+                               "16r2039"    16rDC " SINGLE LEFT-POINTING ANGLE QUOTATION MARK " 
+                               "16r203A"    16rDD " SINGLE RIGHT-POINTING ANGLE QUOTATION MARK " 
+                               "16r203B"    16r00 " invalid " 
+                               "16r203C"    16r00 " invalid " 
+                               "16r203D"    16r00 " invalid " 
+                               "16r203E"    16r00 " invalid " 
+                               "16r203F"    16r00 " invalid " 
+                               "16r2040"    16r00 " invalid " 
+                               "16r2041"    16r00 " invalid " 
+                               "16r2042"    16r00 " invalid " 
+                               "16r2043"    16r00 " invalid " 
+                               "16r2044"    16rDA " FRACTION SLASH " 
+                               ] at:(unicode - 16r2012).
+                            t == 0 ifFalse:[^ t].
+                            ^ self encodingError
+                        ] value.
+                    ].
+                    unicode <= 16r20AB ifTrue:[
+                        ^ self encodingError
+                    ].
+                    ^  "16r20AC" 16r00DB " EURO SIGN " 
+                ].
+                unicode <= 16r2121 ifTrue:[
+                    ^ self encodingError
+                ].
+                ^  "16r2122" 16r00AA " TRADE MARK SIGN " 
+            ].
+            unicode <= 16r2201 ifTrue:[
+                ^ self encodingError
+            ].
+            [
+                |t|
+                t := #[
+                   "16r2202"    16rB6 " PARTIAL DIFFERENTIAL " 
+                   "16r2203"    16r00 " invalid " 
+                   "16r2204"    16r00 " invalid " 
+                   "16r2205"    16r00 " invalid " 
+                   "16r2206"    16rC6 " INCREMENT " 
+                   "16r2207"    16r00 " invalid " 
+                   "16r2208"    16r00 " invalid " 
+                   "16r2209"    16r00 " invalid " 
+                   "16r220A"    16r00 " invalid " 
+                   "16r220B"    16r00 " invalid " 
+                   "16r220C"    16r00 " invalid " 
+                   "16r220D"    16r00 " invalid " 
+                   "16r220E"    16r00 " invalid " 
+                   "16r220F"    16rB8 " N-ARY PRODUCT " 
+                   "16r2210"    16r00 " invalid " 
+                   "16r2211"    16rB7 " N-ARY SUMMATION " 
+                   "16r2212"    16r00 " invalid " 
+                   "16r2213"    16r00 " invalid " 
+                   "16r2214"    16r00 " invalid " 
+                   "16r2215"    16r00 " invalid " 
+                   "16r2216"    16r00 " invalid " 
+                   "16r2217"    16r00 " invalid " 
+                   "16r2218"    16r00 " invalid " 
+                   "16r2219"    16r00 " invalid " 
+                   "16r221A"    16rC3 " SQUARE ROOT " 
+                   "16r221B"    16r00 " invalid " 
+                   "16r221C"    16r00 " invalid " 
+                   "16r221D"    16r00 " invalid " 
+                   "16r221E"    16rB0 " INFINITY " 
+                   "16r221F"    16r00 " invalid " 
+                   "16r2220"    16r00 " invalid " 
+                   "16r2221"    16r00 " invalid " 
+                   "16r2222"    16r00 " invalid " 
+                   "16r2223"    16r00 " invalid " 
+                   "16r2224"    16r00 " invalid " 
+                   "16r2225"    16r00 " invalid " 
+                   "16r2226"    16r00 " invalid " 
+                   "16r2227"    16r00 " invalid " 
+                   "16r2228"    16r00 " invalid " 
+                   "16r2229"    16r00 " invalid " 
+                   "16r222A"    16r00 " invalid " 
+                   "16r222B"    16rBA " INTEGRAL " 
+                   "16r222C"    16r00 " invalid " 
+                   "16r222D"    16r00 " invalid " 
+                   "16r222E"    16r00 " invalid " 
+                   "16r222F"    16r00 " invalid " 
+                   "16r2230"    16r00 " invalid " 
+                   "16r2231"    16r00 " invalid " 
+                   "16r2232"    16r00 " invalid " 
+                   "16r2233"    16r00 " invalid " 
+                   "16r2234"    16r00 " invalid " 
+                   "16r2235"    16r00 " invalid " 
+                   "16r2236"    16r00 " invalid " 
+                   "16r2237"    16r00 " invalid " 
+                   "16r2238"    16r00 " invalid " 
+                   "16r2239"    16r00 " invalid " 
+                   "16r223A"    16r00 " invalid " 
+                   "16r223B"    16r00 " invalid " 
+                   "16r223C"    16r00 " invalid " 
+                   "16r223D"    16r00 " invalid " 
+                   "16r223E"    16r00 " invalid " 
+                   "16r223F"    16r00 " invalid " 
+                   "16r2240"    16r00 " invalid " 
+                   "16r2241"    16r00 " invalid " 
+                   "16r2242"    16r00 " invalid " 
+                   "16r2243"    16r00 " invalid " 
+                   "16r2244"    16r00 " invalid " 
+                   "16r2245"    16r00 " invalid " 
+                   "16r2246"    16r00 " invalid " 
+                   "16r2247"    16r00 " invalid " 
+                   "16r2248"    16rC5 " ALMOST EQUAL TO " 
+                   "16r2249"    16r00 " invalid " 
+                   "16r224A"    16r00 " invalid " 
+                   "16r224B"    16r00 " invalid " 
+                   "16r224C"    16r00 " invalid " 
+                   "16r224D"    16r00 " invalid " 
+                   "16r224E"    16r00 " invalid " 
+                   "16r224F"    16r00 " invalid " 
+                   "16r2250"    16r00 " invalid " 
+                   "16r2251"    16r00 " invalid " 
+                   "16r2252"    16r00 " invalid " 
+                   "16r2253"    16r00 " invalid " 
+                   "16r2254"    16r00 " invalid " 
+                   "16r2255"    16r00 " invalid " 
+                   "16r2256"    16r00 " invalid " 
+                   "16r2257"    16r00 " invalid " 
+                   "16r2258"    16r00 " invalid " 
+                   "16r2259"    16r00 " invalid " 
+                   "16r225A"    16r00 " invalid " 
+                   "16r225B"    16r00 " invalid " 
+                   "16r225C"    16r00 " invalid " 
+                   "16r225D"    16r00 " invalid " 
+                   "16r225E"    16r00 " invalid " 
+                   "16r225F"    16r00 " invalid " 
+                   "16r2260"    16rAD " NOT EQUAL TO " 
+                   "16r2261"    16r00 " invalid " 
+                   "16r2262"    16r00 " invalid " 
+                   "16r2263"    16r00 " invalid " 
+                   "16r2264"    16rB2 " LESS-THAN OR EQUAL TO " 
+                   "16r2265"    16rB3 " GREATER-THAN OR EQUAL TO " 
+                   ] at:(unicode - 16r2201).
+                t == 0 ifFalse:[^ t].
+                ^ self encodingError
+            ] value.
+        ].
+        unicode <= 16r25C9 ifTrue:[
+            ^ self encodingError
+        ].
+        ^  "16r25CA" 16r00D7 " LOZENGE " 
+    ].
+    unicode <= 16rF8FE ifTrue:[
+        ^ self encodingError
+    ].
+    unicode == 16rF8FF ifTrue:[
+        ^  "16rF8FF" 16r00F0 " Apple logo " 
+    ].
+    unicode <= 16rFB00 ifTrue:[
+        ^ self encodingError
+    ].
+    ^ #[
+       "16rFB01"    16rDE " LATIN SMALL LIGATURE FI " 
+       "16rFB02"    16rDF " LATIN SMALL LIGATURE FL " 
+       ] at:(unicode - 16rFB00).
+! !
+
 !MAC_Roman class methodsFor:'documentation'!
 
 version
-    ^ '$Id: CharacterEncoderImplementations__MAC_Roman.st 10467 2009-08-19 16:14:36Z vranyj1 $'
+    ^ '$Id: CharacterEncoderImplementations__MAC_Roman.st 10604 2011-02-04 23:09:23Z vranyj1 $'
+!
+
+version_CVS
+    ^ '§Header: /cvs/stx/stx/libbasic/Encoder_MAC_Roman.st,v 1.4 2011/01/29 20:33:33 cg Exp §'
 ! !
+
--- a/Class.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Class.st	Fri Feb 04 23:09:23 2011 +0000
@@ -670,19 +670,33 @@
     "add a class variable if not already there and initialize it with nil.
      Also writes a change record and notifies dependents."
 
-    (self classVarNames includes:aString) ifFalse:[
-        self classVariableString:(self classVariableString , ' ' , aString).
-        Class withoutUpdatingChangesDo:[
-            self withAllSubclasses do:[:cls|
-                cls recompileMethodsAccessingAnyClassvarOrGlobal:
-                                        (Array with:aString asSymbol)
-            ].
+    self addClassVarNames:(Array with:aString).
+
+    "Created: / 29-10-1995 / 19:40:51 / cg"
+    "Modified: / 23-01-1998 / 15:46:23 / stefan"
+    "Modified: / 15-01-2011 / 14:17:41 / cg"
+!
+
+addClassVarNames:aCollectionOfStrings
+    "add a number of class variables if not already there and initialize them with nil.
+     Also writes a change record and notifies dependents."
+
+    |newVariables|
+
+    newVariables := aCollectionOfStrings reject:[:each | self classVarNames includes:each].
+    newVariables isEmpty ifTrue:[^ self].
+
+    newVariables := newVariables collect:[:each | each asSymbol].
+    self classVariableString:(self classVariableString , ' ' , (newVariables asStringWith:' ')).
+    Class withoutUpdatingChangesDo:[
+        self withAllSubclasses do:[:cls|
+            cls recompileMethodsAccessingAnyClassvarOrGlobal:newVariables
         ].
-        self addChangeRecordForClass:self andNotifyChangeOf:#classVariables.
-    ]
-
-    "Created: / 29.10.1995 / 19:40:51 / cg"
-    "Modified: / 23.1.1998 / 15:46:23 / stefan"
+    ].
+    self addChangeRecordForClass:self andNotifyChangeOf:#classVariables.
+
+    "Modified: / 23-01-1998 / 15:46:23 / stefan"
+    "Created: / 15-01-2011 / 14:17:21 / cg"
 !
 
 allPrivateClasses
@@ -1088,6 +1102,14 @@
     "Modified: / 09-08-2006 / 17:58:53 / fm"
 !
 
+poolDictionaries
+    "this returns the concatenated pool name string"
+
+    ^ self sharedPoolNames asStringWith:' '
+
+    "Modified: / 18-01-2011 / 17:56:12 / cg"
+!
+
 primitiveDefinitions:aString
     "{ Pragma: +optSpace }"
 
@@ -1397,12 +1419,12 @@
     "Created: / 19-09-2006 / 22:02:06 / cg"
 !
 
-realSharedPools
+realSharedPoolNames
     "this returns the namespace aware pool names"
 
     |poolNames ns|
 
-    poolNames := self sharedPools.
+    poolNames := self sharedPoolNames.
     (ns := self topNameSpace) notNil ifTrue:[
         ^ poolNames 
                 collect:[:nm | 
@@ -1419,6 +1441,27 @@
      Croquet::OpenGL sharedPools
      Croquet::OpenGL realSharedPools
     "
+
+    "Created: / 18-01-2011 / 18:02:25 / cg"
+!
+
+realSharedPools
+    "this returns the namespace aware pools"
+
+    |ns|
+
+    ns := self topNameSpace.
+    ^ self sharedPoolNames collect:[:nm | ns at:nm]
+
+    "
+     Croquet::OpenGL sharedPools
+     Croquet::OpenGL realSharedPools
+
+     Win32OperatingSystem realSharedPools
+     Win32OperatingSystem realSharedPoolNames
+    "
+
+    "Modified: / 18-01-2011 / 18:05:19 / cg"
 !
 
 removeClassVarName:aString
@@ -1525,8 +1568,8 @@
     "Modified: / 09-08-2006 / 17:59:13 / fm"
 !
 
-sharedPools
-    "this returns the plain (non-namespace aware) pool names"
+sharedPoolNames
+    "this returns a collection of the plain (non-namespace aware) pool names"
 
     |pools|
 
@@ -1543,18 +1586,50 @@
     "
      Croquet::OpenGL sharedPools
      OpenGLRenderingContext sharedPools  
+     Character sharedPools    
+     Win32OperatingSystem sharedPools    
     "
+
+    "Created: / 18-01-2011 / 17:55:42 / cg"
+!
+
+sharedPoolNames:aStringOrCollection
+    "{ Pragma: +optSpace }"
+
+    "set the sharedPools string (no change notifications)"
+
+    self setSharedPoolNames:aStringOrCollection.
+    self addChangeRecordForClass:self.
+
+    "Created: / 18-01-2011 / 17:55:48 / cg"
+    "Modified: / 18-01-2011 / 20:41:17 / cg"
+!
+
+sharedPools
+    "this returns a collection of the plain (non-namespace aware) pool names.
+     WARNING: this will soon cahnge to return the real pools (i.e. the PoolDictionaries)"
+
+    ^ self sharedPoolNames
+
+    "
+     Croquet::OpenGL sharedPools
+     OpenGLRenderingContext sharedPools  
+     Character sharedPools    
+     Win32OperatingSystem sharedPools    
+    "
+
+    "Modified: / 18-01-2011 / 18:01:39 / cg"
 !
 
 sharedPools:aStringOrCollection
     "{ Pragma: +optSpace }"
 
-    "set the sharedPools string (no change notifications)"
-
-    self setSharedPools:aStringOrCollection.
-    self addChangeRecordForClass:self.
-
-    "Modified: / 06-10-2006 / 13:35:14 / cg"
+    "set the sharedPools string (no change notifications).
+     WARNING: this will soon cahnge to expect the real pools (i.e. the PoolDictionaries)"
+
+    self sharedPoolNames:aStringOrCollection.
+
+    "Modified: / 18-01-2011 / 18:01:58 / cg"
 !
 
 source
@@ -3251,7 +3326,9 @@
 printSharedPoolNamesOn:aStream indent:indent
     "print the pool names indented and breaking at line end"
 
-    self printNameArray:(self sharedPools) on:aStream indent:indent
+    self printNameArray:(self sharedPoolNames) on:aStream indent:indent
+
+    "Modified: / 18-01-2011 / 17:56:16 / cg"
 !
 
 storeOn:aStream
@@ -3376,12 +3453,14 @@
     ^ self setAttribute:#primitiveVariables to:aString
 !
 
-setSharedPools:aStringOrCollection
+setSharedPoolNames:aStringOrCollection
     "{ Pragma: +optSpace }"
 
     "set the sharedPools string (no change notifications)"
 
     ^ self setAttribute:#sharedPools to:aStringOrCollection
+
+    "Created: / 18-01-2011 / 20:41:09 / cg"
 !
 
 setSubclasses:aCollection
@@ -5095,15 +5174,16 @@
 !Class class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Class.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Class.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Class.st,v 1.575 2010/10/27 14:35:25 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Class.st,v 1.579 2011/01/18 19:41:48 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Class.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Class.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
+
--- a/ClassBuilder.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/ClassBuilder.st	Fri Feb 04 23:09:23 2011 +0000
@@ -283,7 +283,17 @@
     metaclass := metaclassOrASubclassOfIt.
 !
 
-name:newName inEnvironment:aSystemDictionaryOrClass subclassOf:aClass instanceVariableNames:stringOfInstVarNames variable:variableBoolean words:wordsBoolean pointers:pointersBoolean classVariableNames:stringOfClassVarNames poolDictionaries:stringOfPoolNames category:categoryString comment:commentString changed:changedBoolean classInstanceVariableNames:stringOfClassInstVarNamesOrNil 
+name:newName inEnvironment:aSystemDictionaryOrClass subclassOf:aClass 
+        instanceVariableNames:stringOfInstVarNames 
+        variable:variableBoolean 
+        words:wordsBoolean pointers:pointersBoolean 
+        classVariableNames:stringOfClassVarNames 
+        poolDictionaries:stringOfPoolNames 
+        category:categoryString 
+        comment:commentString 
+        changed:changedBoolean 
+        classInstanceVariableNames:stringOfClassInstVarNamesOrNil 
+
     className := newName asSymbol.
     environment := aSystemDictionaryOrClass.
     superClass := aClass.
@@ -303,7 +313,7 @@
     changed := changedBoolean.
     classInstanceVariableNames := stringOfClassInstVarNamesOrNil
 
-    "Modified: / 07-06-2007 / 12:16:57 / cg"
+    "Modified: / 30-01-2011 / 10:07:36 / cg"
 !
 
 oldMetaclass:aMetaclass instanceVariableNames:stringOfInstVarNames
@@ -565,7 +575,7 @@
     Class flushSubclassInfoFor:oldSuperClass.
     Class flushSubclassInfoFor:newSuperClass.
 
-    oldPoolDictionaries := oldClass sharedPools.
+    oldPoolDictionaries := oldClass sharedPoolNames.
 
     superClassChange ifFalse:[
         (oldClass instSize == newClass instSize) ifTrue:[
@@ -573,7 +583,7 @@
                 (oldClass name = newClass name) ifTrue:[
                     (oldInstVars = newInstVars) ifTrue:[
                         (oldClassInstVars = newClassInstVars) ifTrue:[
-                            (oldPoolDictionaries = newClass sharedPools) ifTrue:[
+                            (oldPoolDictionaries = newClass sharedPoolNames) ifTrue:[
                                 self handleEasyNewClass:newClass.
                                 ^ oldClass
                             ]
@@ -589,7 +599,7 @@
 
     "Created: / 26-05-1996 / 11:55:26 / cg"
     "Modified: / 18-03-1999 / 18:23:31 / stefan"
-    "Modified: / 26-04-2010 / 23:47:33 / cg"
+    "Modified: / 18-01-2011 / 17:56:34 / cg"
 !
 
 newSubclassOf:baseClass type:typeOfClass instanceVariables:instanceVariables from:oldClassArg
@@ -1134,7 +1144,7 @@
 
     self environmentChanged:#classDefinition with:newClass.
 
-    "Modified: / 28-08-2006 / 20:13:31 / cg"
+    "Modified: / 18-01-2011 / 20:45:34 / cg"
 !
 
 handleHardNewClass:newClass
@@ -1663,6 +1673,7 @@
 "/        newSub class setMethodDictionary:(aSubclass class methodDictionary copy).
         newSub setName:(aSubclass name).
         newSub setClassVariableString:(aSubclass classVariableString).
+        newSub setSharedPoolNames:(aSubclass sharedPoolNames).
         newSub setInstanceVariableString:(aSubclass instanceVariableString).
         (t := aSubclass attributes) notNil ifTrue:[
             newSub classAttributes:t.
@@ -1813,7 +1824,7 @@
 
     "Created: / 29-10-1995 / 19:57:08 / cg"
     "Modified: / 01-04-1997 / 15:44:09 / stefan"
-    "Modified: / 11-07-2010 / 16:37:48 / cg"
+    "Modified: / 18-01-2011 / 20:44:41 / cg"
 !
 
 setPackageInNewClass:newClass fromOld:oldClass
@@ -1902,6 +1913,7 @@
     oldClass notNil ifTrue:[
         "/ setting first will make new class clear obsolete classvars
         newClass setClassVariableString:(oldClass classVariableString).
+        newClass setSharedPoolNames:(oldClass sharedPoolNames).
         newClass setClassFilename:(oldClass getClassFilename).
         newClass setPrimitiveDefinitions:(oldClass primitiveDefinitionsString).
         newClass setPrimitiveFunctions:(oldClass primitiveFunctionsString).
@@ -1909,7 +1921,7 @@
     ].
     newClass setClassVariableString:classVariableNames.
 
-    "Modified: / 07-06-2007 / 12:13:55 / cg"
+    "Modified: / 18-01-2011 / 20:44:04 / cg"
 ! !
 
 !ClassBuilder methodsFor:'checks'!
@@ -2217,15 +2229,15 @@
 !ClassBuilder class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ClassBuilder.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ClassBuilder.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/ClassBuilder.st,v 1.96 2010/10/22 11:54:47 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/ClassBuilder.st,v 1.99 2011/01/30 09:59:26 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: ClassBuilder.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ClassBuilder.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
@@ -2234,3 +2246,4 @@
 
 
 
+
--- a/ClassDescription.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/ClassDescription.st	Fri Feb 04 23:09:23 2011 +0000
@@ -714,7 +714,7 @@
                     words:self isWords
                     pointers:self isPointers
                     classVariableNames:self classVariableString
-                    poolDictionaries: (self sharedPools asStringWith:Character space)
+                    poolDictionaries: (self poolDictionaries)
                     category:self category
                     comment:self comment
                     changed:true.
@@ -759,6 +759,7 @@
     "
 
     "Modified: / 25-02-2009 / 14:51:01 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 18-01-2011 / 17:57:23 / cg"
 !
 
 organization
@@ -4104,15 +4105,15 @@
 !ClassDescription class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ClassDescription.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ClassDescription.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/ClassDescription.st,v 1.214 2010/04/19 16:46:03 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/ClassDescription.st,v 1.215 2011/01/18 17:07:42 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: ClassDescription.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ClassDescription.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 ClassDescription initialize!
@@ -4124,3 +4125,4 @@
 
 
 
+
--- a/Collection.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Collection.st	Fri Feb 04 23:09:23 2011 +0000
@@ -259,6 +259,7 @@
     ^ self withSize:n
 ! !
 
+
 !Collection class methodsFor:'Signal constants'!
 
 emptyCollectionSignal
@@ -479,6 +480,7 @@
     ].
 ! !
 
+
 !Collection methodsFor:'accessing'!
 
 anElement
@@ -2255,7 +2257,8 @@
 
 flatDo:aBlock
     "for each element of the collection, if its a scalar, evaluate aBlock for it;
-     otherwise, recursively invoke flatDo on the collection."
+     otherwise, recursively invoke flatDo on the collection.
+     Thus implementing a depth-first enumeration"
 
     self do:[:each |
         (each isNonByteCollection) ifTrue:[
@@ -2273,6 +2276,8 @@
         7
         (8 (9 10) 11 12 (13 (14 (15) 16)))) flatDo:[:el | Transcript showCR:el]
     "
+
+    "Modified: / 22-01-2011 / 09:12:22 / cg"
 !
 
 inject:thisValue into:binaryBlock
@@ -3867,15 +3872,15 @@
 !Collection class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Collection.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Collection.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Collection.st,v 1.252 2010/09/21 06:58:29 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Collection.st,v 1.253 2011/01/22 08:13:45 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Collection.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Collection.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Collection initialize!
@@ -3887,3 +3892,4 @@
 
 
 
+
--- a/Date.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Date.st	Fri Feb 04 23:09:23 2011 +0000
@@ -667,6 +667,20 @@
     "
 !
 
+utcToday
+    "return a date, representing today.
+     See also: Time now / Timestamp now."
+
+    ^ self new fromUtcOSTime:(OperatingSystem getOSTime)
+
+    "
+     Date today
+     Date utcToday
+    "
+
+    "Modified: 1.7.1996 / 15:20:16 / cg"
+!
+
 yesterday
     "return a date, representing yesterday.
      See also: Time now / Timestamp now."
@@ -1244,17 +1258,19 @@
      the returned week number starts with 1 for the first week which has a thursday in it.
      The above definition can lead to the 1st week starting in the old year!!"
 
-    |dayInYear numDays dayOfFirstWeekInYear dayOfFirstWeekInNextYear week|
-
-    dayInYear := aDateOrTimestamp dayInYear.
-    dayOfFirstWeekInYear := self dayOfFirstWeekInYear:aDateOrTimestamp year.
-
-    numDays := aDateOrTimestamp asDate subtractDate:dayOfFirstWeekInYear asDate.
+    |date dayInYear numDays dayOfFirstWeekInYear dayOfFirstWeekInNextYear week|
+
+    date := aDateOrTimestamp asDate.
+
+    dayInYear := date dayInYear.
+    dayOfFirstWeekInYear := self dayOfFirstWeekInYear:date year.
+
+    numDays := date subtractDate:dayOfFirstWeekInYear.
     "/ careful with the first days - could be W52/W53 of the previous year ...
     numDays < 0 ifTrue:[
         "/ not in a week here ...
         "/ can be either 52 or 53, depending on the previous year.
-        ^ self weekInYearOf:(Date newDay:31 month:12 year:aDateOrTimestamp year - 1)
+        ^ self weekInYearOf:(Date newDay:31 month:12 year:date year - 1)
     ].
 
     "/ compute the week 
@@ -1263,7 +1279,7 @@
     "/ careful with the last days - could be W01 of the next year ...
     week == 53 ifTrue:[
         dayOfFirstWeekInNextYear := self dayOfFirstWeekInYear:aDateOrTimestamp year + 1.
-        aDateOrTimestamp asDate >= dayOfFirstWeekInNextYear asDate ifTrue:[
+        date >= dayOfFirstWeekInNextYear ifTrue:[
             ^ 1
         ].
     ].
@@ -1660,17 +1676,6 @@
     "
 !
 
-isLeapYear
-    "return true, if the receivers year is a leap year"
-
-    ^ self leap
-
-    "
-     Date today isLeapYear
-     (Date newDay:1 month:1 year:1992) isLeapYear
-    "
-!
-
 monthAbbreviation
     "return the month of the receiver as a string.
      The returned string depends on the language setting.
@@ -2037,23 +2042,6 @@
     "
      Date today mmddyyyy
     "
-!
-
-yyyymmdd
-    "return a printed representation of the receiver in the
-     form yyyymmdd.
-     The receiver can be reconstructed with: 
-        Date readYYYYMMDDFrom:aStringOrStream onError:[...]"
-
-    ^ self printStringFormat:'%y%m%d'
-
-"/    ^ (self year printStringLeftPaddedTo:4 with:$0)
-"/       , (self month printStringLeftPaddedTo:2 with:$0)
-"/       , (self day printStringLeftPaddedTo:2 with:$0) 
-
-    "
-     Date today yyyymmdd  
-    "
 ! !
 
 !Date methodsFor:'accessing'!
@@ -2268,14 +2256,14 @@
     "
 !
 
-leap
+isLeapYear
     "return true, if the receivers year is a leap year"
 
     ^ Date leapYear:(self year)
 
     "
-     Date today leap
-     (Date newDay:1 month:1 year:1992) leap
+     Date today isLeapYear
+     (Date newDay:1 month:1 year:1992) isLeapYear
     "
 !
 
@@ -2602,7 +2590,7 @@
     ^ self
 !
 
-asTimestamp
+asLocalTimestamp
     "return an TimeStamp instance, representing midnight of last night"
 
     ^ Timestamp 
@@ -2610,8 +2598,30 @@
         hour:0 minute:0 second:0 millisecond:0
 
     "
+     Date today asLocalTimestamp
+    "
+!
+
+asTimestamp
+    "return an TimeStamp instance, representing midnight of last night"
+
+    ^ self asLocalTimestamp
+
+    "
      Date today asTimestamp
     "
+!
+
+asUtcTimestamp
+    "return an TimeStamp instance, representing midnight of last night"
+
+    ^ UtcTimestamp 
+        year:(self year) month:(self month) day:(self day)  
+        hour:0 minute:0 second:0 millisecond:0
+
+    "
+     Date today asUtcTimestamp
+    "
 ! !
 
 !Date methodsFor:'obsolete'!
@@ -2646,6 +2656,18 @@
     ^ self weekday
 !
 
+leap
+    "return true, if the receivers year is a leap year"
+    <resource: #obsolete>
+
+    ^ self isLeapYear
+
+    "
+     Date today leap
+     (Date newDay:1 month:1 year:1992) leap
+    "
+!
+
 minusDays:days
     "return a new date representing 'days' before the receiver.
      The argument should be some kind of integer.
@@ -2693,27 +2715,27 @@
         %W              - week in year - unpadded
         %Y              - year, last 2 digits only i.e. 99, 04 (danger: year 2k bug)                     
 
-        %weekDay        - day in week (1->monday, 2->tuesday, ... ,7->sunday)
-
-        %dayName        - full day name     
-        %DayName        - full day name, first character uppercase      
-        %DAYNAME        - full day name, all uppercase       
-
-        %monthName      - full month name     
-        %MonthName      - full month name, first character uppercase      
-        %MONTHNAME      - full month name, all uppercase       
-
-        %shortDayName   - short (abbreviated) day name     
-        %ShortDayName   - short (abbreviated) day name, first character uppercase      
-        %SHORTDAYNAME   - short (abbreviated) day name, all uppercase       
-
-        %shortMonthName - short (abbreviated) month name     
-        %ShortMonthName - short (abbreviated) month name, first character uppercase      
-        %SHORTMONTHNAME - short (abbreviated) month name, all uppercase       
-
-        %nth            - counting day-in-month (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
-        %weekDayNth     - counting day-in-week (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
-        %weekNth        - counting week-in-year (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')"     
+        %(weekDay)      - day in week (1->monday, 2->tuesday, ... ,7->sunday)
+
+        %(dayName)      - full day name     
+        %(DayName)      - full day name, first character uppercase      
+        %(DAYNAME)      - full day name, all uppercase       
+
+        %(monthName)    - full month name     
+        %(MonthName)    - full month name, first character uppercase      
+        %(MONTHNAME)    - full month name, all uppercase       
+
+        %(shortDayName) - short (abbreviated) day name     
+        %(ShortDayName) - short (abbreviated) day name, first character uppercase      
+        %(SHORTDAYNAME) - short (abbreviated) day name, all uppercase       
+
+        %(shortMonthName) - short (abbreviated) month name     
+        %(ShortMonthName) - short (abbreviated) month name, first character uppercase      
+        %(SHORTMONTHNAME) - short (abbreviated) month name, all uppercase       
+
+        %(nth)          - counting day-in-month (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
+        %(weekDayNth)   - counting day-in-week (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')      
+        %(weekNth)      - counting week-in-year (1->'st'; 2->'nd'; 3->'rd'; 4...->'th')"     
 
     |day ds dsPadded0 dsPaddedB month ms msPadded0 msPaddedB 
      year weekInYear monthName shortMonthName 
@@ -2795,7 +2817,7 @@
 
     aDictionary at:#nth        put:(#('th' 'st' 'nd' 'rd' 'th' 'th' 'th' 'th' 'th' 'th') at:day \\ 10 + 1).
                                      "/ 0   1    2    3    4    5    6    7    8    9
-    aDictionary at:#weekDayNth put:(#('th' 'st' 'nd' 'rd' 'th' 'th' 'th') at:dayOfWeek-1 \\ 10 + 1). 
+    aDictionary at:#weekDayNth put:(#('th' 'st' 'nd' 'rd' 'th' 'th' 'th') at:(dayOfWeek-1) \\ 10 + 1). 
                                      "/ 0   1    2    3    4    5    6      
     aDictionary at:#weekNth    put:(#('th' 'st' 'nd' 'rd' 'th' 'th' 'th' 'th' 'th' 'th') at:weekInYear \\ 10 + 1).
                                      "/ 0   1    2    3    4    5    6    7    8    9     
@@ -2881,6 +2903,7 @@
 
     "
      Date today printOn:Transcript language:#en
+     Date today printOn:Transcript language:#de
     "
 
     "Modified: / 27-08-1995 / 01:01:49 / claus"
@@ -2975,7 +2998,7 @@
 !
 
 fromOSTime:osTime
-    "set my dateEncoding from an OS time.
+    "set my dateEncoding as date in the local timezone from an OS time.
      This somewhat clumsy implementation hides the OS's date representation
      (i.e. makes this class independent of what the OS starts its time values with).
      Don't use this method, the osTime representation is totally unportable."
@@ -2988,6 +3011,20 @@
     "Modified: 1.7.1996 / 15:23:12 / cg"
 !
 
+fromUtcOSTime:osTime
+    "set my dateEncoding as UTC date from an OS time.
+     This somewhat clumsy implementation hides the OS's date representation
+     (i.e. makes this class independent of what the OS starts its time values with).
+     Don't use this method, the osTime representation is totally unportable."
+
+    |v|
+
+    v := OperatingSystem computeUTCTimeAndDateFrom:osTime.
+    dateEncoding := self class encodeYear:v year month:v month day:v day
+
+    "Modified: 1.7.1996 / 15:23:12 / cg"
+!
+
 getMilliseconds
     "compatibility with Timestamp for comparing"
 
@@ -3014,15 +3051,15 @@
 !Date class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Date.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Date.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Date.st,v 1.135 2010/03/26 14:26:26 fm Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Date.st,v 1.138 2011/01/24 19:56:01 stefan Exp '
 !
 
 version_SVN
-    ^ '$Id: Date.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Date.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Date initialize!
@@ -3031,3 +3068,4 @@
 
 
 
+
--- a/Delay.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Delay.st	Fri Feb 04 23:09:23 2011 +0000
@@ -245,10 +245,11 @@
     "set the millisecond delta and create a new semaphore internally to wait upon"
 
     self assert:(numberOfMillis notNil).
+    self assert:(numberOfMillis isKindOf:SmallInteger).
     millisecondDelta := numberOfMillis.
     delaySemaphore := Semaphore new name:'delaySema'.
 
-    "Modified: / 24-09-2007 / 20:36:22 / cg"
+    "Modified: / 22-12-2010 / 14:18:00 / cg"
 !
 
 delaySemaphore
@@ -343,16 +344,17 @@
 !Delay class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Delay.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Delay.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_SVN
-    ^ '$Id: Delay.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Delay.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic/Delay.st,v 1.43 2010/08/02 14:02:50 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic/Delay.st,v 1.44 2010/12/22 13:18:18 cg Exp §'
 ! !
 
 
 
+
--- a/ExternalAddress.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/ExternalAddress.st	Fri Feb 04 23:09:23 2011 +0000
@@ -105,6 +105,20 @@
     ^ self new setAddress:addr
 ! !
 
+!ExternalAddress class methodsFor:'Compatibility-V''Age'!
+
+fromAddress:anInteger
+    ^ self newAddress:anInteger
+
+    "Created: / 22-12-2010 / 13:48:42 / cg"
+!
+
+sizeInBytes
+    ^ self pointerSize
+
+    "Created: / 21-12-2010 / 15:18:06 / cg"
+! !
+
 !ExternalAddress class methodsFor:'queries'!
 
 isBuiltInClass
@@ -128,6 +142,7 @@
     "
 ! !
 
+
 !ExternalAddress methodsFor:'Compatibility-Squeak'!
 
 beNull
@@ -307,18 +322,26 @@
     "Modified: / 07-08-2006 / 15:16:32 / fm"
 ! !
 
+!ExternalAddress methodsFor:'testing'!
+
+isExternalAddress
+    ^ true
+
+    "Created: / 22-12-2010 / 17:14:57 / cg"
+! !
+
 !ExternalAddress class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ExternalAddress.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ExternalAddress.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/ExternalAddress.st,v 1.26 2010/10/26 21:45:34 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/ExternalAddress.st,v 1.30 2010/12/24 09:28:27 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: ExternalAddress.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ExternalAddress.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
@@ -326,3 +349,4 @@
 
 
 
+
--- a/ExternalBytes.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/ExternalBytes.st	Fri Feb 04 23:09:23 2011 +0000
@@ -629,6 +629,7 @@
     "
 ! !
 
+
 !ExternalBytes methodsFor:'accessing'!
 
 address
@@ -743,16 +744,9 @@
     ^ self basicAt:index put:aByteValuedInteger
 !
 
-instVarAt:index
-    "redefined to suppress direct access to my address, which is a non-object"
+copyCStringFromHeap
+    "fetch a 0-terminated string from my pointed-to address"
 
-    index == 1 ifTrue:[^ self address].
-    ^ super instVarAt:index
-! !
-
-!ExternalBytes methodsFor:'compatibility-VW'!
-
-copyCStringFromHeap
     |idx byte s|
 
     idx := 1.
@@ -761,7 +755,28 @@
         s nextPut:(Character value:byte).
         idx := idx + 1.
     ].
-    ^ s contents asString
+    ^ s contents
+!
+
+copyUnicodeStringFromHeap
+    "fetch a 0-terminated wide-string from my pointed-to address"
+
+    |idx word s|
+
+    idx := 1.
+    s := WriteStream on:Unicode16String new.
+    [(word := self unsignedShortAt:idx) ~~ 0] whileTrue:[
+        s nextPut:(Character value:word).
+        idx := idx + 2.
+    ].
+    ^ s contents
+!
+
+instVarAt:index
+    "redefined to suppress direct access to my address, which is a non-object"
+
+    index == 1 ifTrue:[^ self address].
+    ^ super instVarAt:index
 ! !
 
 !ExternalBytes methodsFor:'converting'!
@@ -1290,15 +1305,15 @@
 !ExternalBytes class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ExternalBytes.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ExternalBytes.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/ExternalBytes.st,v 1.79 2010/09/21 06:57:43 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/ExternalBytes.st,v 1.80 2011/01/05 15:11:14 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: ExternalBytes.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ExternalBytes.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 ExternalBytes initialize!
@@ -1308,3 +1323,4 @@
 
 
 
+
--- a/Filename.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Filename.st	Fri Feb 04 23:09:23 2011 +0000
@@ -2061,6 +2061,25 @@
     "Modified: / 29-05-2007 / 12:02:46 / cg"
 !
 
+recursiveDirectoryContentsAsFilenamesDo:aBlock 
+    "evaluate aBlock for all files and directories found under the receiver.
+     The block is invoked with the filenames as argument.
+     The walk is bread-first.
+     This excludes any entries for '.' or '..'.
+     Subdirectory files are included with a relative pathname.
+     Warning: this may take a long time to execute (especially with deep and/or remote fileSystems)."
+
+    self recursiveDirectoryContentsDo:[:relFn |
+        aBlock value:(self construct:relFn)
+    ].
+
+    "
+     '.' asFilename recursiveDirectoryContentsAsFilenamesDo:[:f | Transcript showCR:f] 
+    "
+
+    "Modified: / 12-09-2010 / 15:43:22 / cg"
+!
+
 recursiveDirectoryContentsDo:aBlock 
     "evaluate aBlock for all files and directories found under the receiver.
      The block is invoked with the relative filenames as string-argument.
@@ -2683,7 +2702,7 @@
 
         [
             inStream copyToEndInto:outStream.
-        ] on:OperatingSystem errorSignal do:[:ex|
+        ] on:Error do:[:ex|
             ^ self fileCreationError:newName
         ]
     ] ensure:[
@@ -2961,9 +2980,8 @@
     "Modified: / 5.5.1999 / 13:43:35 / cg"
 !
 
-recursiveRemoveWithoutOSCommand
-    "if I represent a regular file, remove it.
-     Otherwise, remove the directory and all of its subfiles/subdirectories.
+recursiveRemoveAll
+    "Remove all of my subfiles/subdirectories.
      Raise an error if not successful.
      This one walks down the directory hierarchy, not using any OS
      command to do the remove."
@@ -2991,6 +3009,29 @@
             ].
         ]
     ].
+
+    "
+     'foo' asFilename makeDirectory.
+     'foo/bar' asFilename writeStream close.
+     'foo' asFilename remove
+    "
+    "
+     'foo' asFilename makeDirectory.
+     'foo/bar' asFilename writeStream close.
+     'foo' asFilename recursiveRemove
+    "
+
+    "Created: / 25-01-2011 / 16:42:15 / cg"
+!
+
+recursiveRemoveWithoutOSCommand
+    "if I represent a regular file, remove it.
+     Otherwise, remove the directory and all of its subfiles/subdirectories.
+     Raise an error if not successful.
+     This one walks down the directory hierarchy, not using any OS
+     command to do the remove."
+
+    self recursiveRemoveAll.
     self remove
 
     "
@@ -3004,8 +3045,8 @@
      'foo' asFilename recursiveRemove
     "
 
-    "Created: / 25.2.1998 / 19:50:40 / cg"
-    "Modified: / 25.2.1998 / 19:52:08 / cg"
+    "Created: / 25-02-1998 / 19:50:40 / cg"
+    "Modified: / 25-01-2011 / 16:42:24 / cg"
 !
 
 remove
@@ -5792,15 +5833,15 @@
 !Filename class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Filename.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Filename.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Filename.st,v 1.361 2010/11/19 13:25:20 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Filename.st,v 1.365 2011/01/25 15:46:32 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Filename.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Filename.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Filename initialize!
@@ -5813,3 +5854,4 @@
 
 
 
+
--- a/GenericException.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/GenericException.st	Fri Feb 04 23:09:23 2011 +0000
@@ -638,6 +638,19 @@
     "Created: / 23.7.1999 / 14:08:36 / stefan"
 !
 
+raiseRequestIn:aContext
+    "raise a signal proceedable.
+     The signals notifierString is used as messageText."
+
+    <context: #return>
+    <resource: #skipInDebuggersWalkBack>
+
+    ^ self basicNew
+        raiseRequestIn:aContext
+
+    "Created: / 27-01-2011 / 17:28:53 / cg"
+!
+
 raiseRequestWith:aParameter
     "raise a signal proceedable.
      The signals notifierString is used as messageText."
@@ -2273,15 +2286,15 @@
 !GenericException class methodsFor:'documentation'!
 
 version
-    ^ '$Id: GenericException.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: GenericException.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/GenericException.st,v 1.128 2010/11/17 16:53:23 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/GenericException.st,v 1.129 2011/01/27 17:32:38 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: GenericException.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: GenericException.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 GenericException initialize!
@@ -2292,3 +2305,4 @@
 
 
 
+
--- a/LibraryDefinition.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/LibraryDefinition.st	Fri Feb 04 23:09:23 2011 +0000
@@ -72,6 +72,14 @@
     ^self description , ' (LIB)'
 
     "Created: / 14-09-2006 / 10:55:23 / cg"
+!
+
+productType
+    "Returns the product type for autopackage"
+
+    ^ 'Library'
+
+    "Created: / 21-12-2010 / 09:28:59 / cg"
 ! !
 
 !LibraryDefinition class methodsFor:'file generation'!
@@ -682,18 +690,19 @@
 !LibraryDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Id: LibraryDefinition.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: LibraryDefinition.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.98 2010/03/08 12:00:07 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.99 2010/12/21 10:38:23 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: LibraryDefinition.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: LibraryDefinition.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
 
 
 
+
--- a/Make.proto	Mon Dec 20 07:13:27 2010 +0000
+++ b/Make.proto	Fri Feb 04 23:09:23 2011 +0000
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic/Make.proto,v 1.233 2010-10-14 16:54:58 cg Exp $
+# $Header: /cvs/stx/stx/libbasic/Make.proto,v 1.234 2011/01/24 20:29:46 stefan Exp $
 #
 # DO NOT EDIT
 # automagically generated from the projectDefinition: stx_libbasic.
@@ -237,7 +237,6 @@
 $(OUTDIR)UserInterrupt.$(O) UserInterrupt.$(H): UserInterrupt.st $(INCLUDE_TOP)/stx/libbasic/ControlInterrupt.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)UserNotification.$(O) UserNotification.$(H): UserNotification.st $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)YesToAllConfirmation.$(O) YesToAllConfirmation.$(H): YesToAllConfirmation.st $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)SameForAllNotification.$(O) SameForAllNotification.$(H): SameForAllNotification.st $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)stx_libbasic.$(O) stx_libbasic.$(H): stx_libbasic.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)AbortAllOperationRequest.$(O) AbortAllOperationRequest.$(H): AbortAllOperationRequest.st $(INCLUDE_TOP)/stx/libbasic/ControlRequest.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)AbstractSourceFileWriter.$(O) AbstractSourceFileWriter.$(H): AbstractSourceFileWriter.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Query.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(STCHDR)
@@ -266,6 +265,7 @@
 $(OUTDIR)RecursionError.$(O) RecursionError.$(H): RecursionError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)RecursiveExceptionError.$(O) RecursiveExceptionError.$(H): RecursiveExceptionError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)RestartProcessRequest.$(O) RestartProcessRequest.$(H): RestartProcessRequest.st $(INCLUDE_TOP)/stx/libbasic/ControlRequest.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)SameForAllNotification.$(O) SameForAllNotification.$(H): SameForAllNotification.st $(INCLUDE_TOP)/stx/libbasic/YesToAllConfirmation.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SemaphoreSet.$(O) SemaphoreSet.$(H): SemaphoreSet.st $(INCLUDE_TOP)/stx/libbasic/IdentitySet.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SignalSet.$(O) SignalSet.$(H): SignalSet.st $(INCLUDE_TOP)/stx/libbasic/IdentitySet.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)SnapshotError.$(O) SnapshotError.$(H): SnapshotError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -275,6 +275,7 @@
 $(OUTDIR)UninterpretedBytes.$(O) UninterpretedBytes.$(H): UninterpretedBytes.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)UserConfirmation.$(O) UserConfirmation.$(H): UserConfirmation.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)UserInformation.$(O) UserInformation.$(H): UserInformation.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)UtcTimestamp.$(O) UtcTimestamp.$(H): UtcTimestamp.st $(INCLUDE_TOP)/stx/libbasic/Timestamp.$(H) $(INCLUDE_TOP)/stx/libbasic/AbstractTime.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)VMInternalError.$(O) VMInternalError.$(H): VMInternalError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)VarArgBlock.$(O) VarArgBlock.$(H): VarArgBlock.st $(INCLUDE_TOP)/stx/libbasic/Block.$(H) $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Warning.$(O) Warning.$(H): Warning.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -391,3 +392,4 @@
 
 # ENDMAKEDEPEND --- do not remove this line
 
+
--- a/Make.spec	Mon Dec 20 07:13:27 2010 +0000
+++ b/Make.spec	Fri Feb 04 23:09:23 2011 +0000
@@ -1,6 +1,6 @@
-# $Header: /cvs/stx/stx/libbasic/Make.spec,v 1.110 2010-10-14 16:54:58 cg Exp $
+# $Header: /cvs/stx/stx/libbasic/Make.spec,v 1.111 2011/01/24 20:28:30 stefan Exp $
 #
-# DO NOT EDIT
+# DO NOT EDIT 
 # automagically generated from the projectDefinition: stx_libbasic.
 #
 # Warning: once you modify this file, do not rerun
@@ -191,7 +191,6 @@
 	UserInterrupt \
 	UserNotification \
 	YesToAllConfirmation \
-	SameForAllNotification \
 	stx_libbasic \
 	AbortAllOperationRequest \
 	AbstractSourceFileWriter \
@@ -340,6 +339,8 @@
 	Symbol \
 	Unicode16String \
 	CharacterEncoderImplementations::EBCDIC \
+	SameForAllNotification \
+	UtcTimestamp \
 
 WIN32_CLASSES= \
 	CharacterEncoderImplementations::MS_Baltic \
@@ -497,7 +498,6 @@
     $(OUTDIR)UserInterrupt.$(O) \
     $(OUTDIR)UserNotification.$(O) \
     $(OUTDIR)YesToAllConfirmation.$(O) \
-    $(OUTDIR)SameForAllNotification.$(O) \
     $(OUTDIR)stx_libbasic.$(O) \
     $(OUTDIR)AbortAllOperationRequest.$(O) \
     $(OUTDIR)AbstractSourceFileWriter.$(O) \
@@ -646,6 +646,8 @@
     $(OUTDIR)Symbol.$(O) \
     $(OUTDIR)Unicode16String.$(O) \
     $(OUTDIR)CharacterEncoderImplementations__EBCDIC.$(O) \
+    $(OUTDIR)SameForAllNotification.$(O) \
+    $(OUTDIR)UtcTimestamp.$(O) \
 
 WIN32_OBJS= \
     $(OUTDIR)CharacterEncoderImplementations__MS_Baltic.$(O) \
@@ -659,3 +661,4 @@
     $(OUTDIR)Win32Process.$(O) \
 
 
+
--- a/MessageSend.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/MessageSend.st	Fri Feb 04 23:09:23 2011 +0000
@@ -160,6 +160,26 @@
     "Modified: 20.3.1997 / 21:55:44 / cg"
 ! !
 
+!MessageSend methodsFor:'Compatibility-V''Age'!
+
+evaluate
+    ^ self value
+
+    "Created: / 22-12-2010 / 12:59:25 / cg"
+!
+
+evaluateWith:someArgument
+    ^ self value:someArgument
+
+    "Created: / 22-12-2010 / 13:50:33 / cg"
+!
+
+evaluateWithArguments:argArray
+    ^ self valueWithArguments:argArray
+
+    "Created: / 22-12-2010 / 12:59:42 / cg"
+! !
+
 !MessageSend methodsFor:'accessing'!
 
 argumentCount
@@ -269,15 +289,16 @@
 !MessageSend class methodsFor:'documentation'!
 
 version
-    ^ '$Id: MessageSend.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: MessageSend.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_SVN
-    ^ '$Id: MessageSend.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: MessageSend.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic/MessageSend.st,v 1.22 2010/09/14 14:05:26 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic/MessageSend.st,v 1.23 2010/12/22 12:50:41 cg Exp §'
 ! !
 
 
+
--- a/Method.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Method.st	Fri Feb 04 23:09:23 2011 +0000
@@ -2241,7 +2241,42 @@
     "if this is an externalLibraryFunction call, return the externalLibraryFunction.
      Returns nil otherwise."
 
-    ^ self literalsDetect:[:lit | lit isExternalLibraryFunction] ifNone:nil
+    |newMethod function|
+
+    (self 
+        literalsDetect:[:lit | 
+            #(
+                #'invoke'
+                #'invokeWith:'
+                #'invokeWith:with:'
+                #'invokeWith:with:with:'
+                #'invokeWith:with:with:with:'
+                #'invokeWithArguments:'
+                #'invokeCPPVirtualOn:'
+                #'invokeCPPVirtualOn:with:'
+                #'invokeCPPVirtualOn:with:with:'
+                #'invokeCPPVirtualOn:with:with:with:'
+                #'invokeCPPVirtualOn:with:with:with:with:'
+                #'invokeCPPVirtualOn:withArguments:'
+            ) includes:lit
+        ] 
+        ifNone:nil) notNil 
+    ifTrue:[
+        "/ sigh - for stc-compiled code, this does not work:
+        function := self literalsDetect:[:lit | lit isExternalLibraryFunction] ifNone:nil.
+        function isNil ifTrue:[
+            "/ parse it and ask the parser
+            newMethod := Compiler compile:self source forClass:self mclass install:false.
+            function := newMethod literalsDetect:[:lit | lit isExternalLibraryFunction] ifNone:nil.
+        ].
+        ^ function
+    ].
+    ^ nil
+
+    "
+     (IDispatchPointer compiledMethodAt:#'invokeGetTypeInfo:_:_:')
+        externalLibraryFunction  
+    "
 !
 
 hasAnnotation
@@ -3358,17 +3393,18 @@
 !Method class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Method.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Method.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic/Method.st,v 1.354 2010/12/01 13:00:17 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic/Method.st,v 1.355 2010/12/23 15:16:43 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id: Method.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Method.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Method initialize!
 
 
+
--- a/NameSpace.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/NameSpace.st	Fri Feb 04 23:09:23 2011 +0000
@@ -506,6 +506,19 @@
     ].
 !
 
+keyAtValue:anObject
+    "return the symbol under which anObject is stored - or nil"
+
+    self keysDo:[:aKey |
+        (self at:aKey) == anObject ifTrue:[^ aKey]
+    ].
+    ^ nil
+
+    "Smalltalk keyAtValue:Object"
+
+    "Created: / 19-12-2010 / 14:35:49 / cg"
+!
+
 keys
     "enumerate all class names in this namespace"
 
@@ -705,15 +718,16 @@
 !NameSpace class methodsFor:'documentation'!
 
 version
-    ^ '$Id: NameSpace.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: NameSpace.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/NameSpace.st,v 1.69 2009/12/03 10:42:57 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/NameSpace.st,v 1.70 2010/12/20 11:06:03 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: NameSpace.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: NameSpace.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
+
--- a/Object.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Object.st	Fri Feb 04 23:09:23 2011 +0000
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1988 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -33,7 +33,7 @@
 copyright
 "
  COPYRIGHT (c) 1988 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -117,52 +117,52 @@
 
    [Class variables:]
 
-        ErrorSignal     <Signal>        Signal raised for error/error: messages
-                                        also, parent of all other signals.
-
-        HaltSignal      <Signal>        Signal raised for halt/halt: messages
-
-        MessageNotUnderstoodSignal      Signals raised for various error conditions
-        UserInterruptSignal
-        RecursionInterruptSignal
-        ExceptionInterruptSignal
-        SubscriptOutOfBoundsSignal
-        NonIntegerIndexSignal
-        NotFoundSignal
-        KeyNotFoundSignal
-        ElementOutOfBoundsSignal
-        InformationSignal
-        WarningSignal
-        DeepCopyErrorSignal
-        InternalErrorSignal
-
-        AbortSignal      <Signal>       Signal raised by debugger, to abort a computation
-                                        BUT, the debugger will only raise it if it is handled.
-                                        By handling the abortSignal, you can control where the
-                                        debuggers abort-function resumes execution in case of
-                                        an error.
-
-        ErrorRecursion   <Boolean>      controls behavior when recursive errors occur (i.e.
-                                        an error while handling an error).
-
-        Dependencies     <WeakDependencyDictionary>
-                                        keeps track of object dependencies.
-
-        InfoPrinting     <Boolean>      controls weather informational messages
-                                        are printed.
-
-        ActivityNotificationSignal <QuerySignal>
-                                         raised on #activityNotification:
-
-        NonWeakDependencies <Dictionary> keeps track of object dependencies.
-                                         Dependents stay alive.
-
-        SynchronizationSemaphores <WeakIdentityDictionary>
-                                         Semaphores for per-object-monitor.
+	ErrorSignal     <Signal>        Signal raised for error/error: messages
+					also, parent of all other signals.
+
+	HaltSignal      <Signal>        Signal raised for halt/halt: messages
+
+	MessageNotUnderstoodSignal      Signals raised for various error conditions
+	UserInterruptSignal
+	RecursionInterruptSignal
+	ExceptionInterruptSignal
+	SubscriptOutOfBoundsSignal
+	NonIntegerIndexSignal
+	NotFoundSignal
+	KeyNotFoundSignal
+	ElementOutOfBoundsSignal
+	InformationSignal
+	WarningSignal
+	DeepCopyErrorSignal
+	InternalErrorSignal
+
+	AbortSignal      <Signal>       Signal raised by debugger, to abort a computation
+					BUT, the debugger will only raise it if it is handled.
+					By handling the abortSignal, you can control where the
+					debuggers abort-function resumes execution in case of
+					an error.
+
+	ErrorRecursion   <Boolean>      controls behavior when recursive errors occur (i.e.
+					an error while handling an error).
+
+	Dependencies     <WeakDependencyDictionary>
+					keeps track of object dependencies.
+
+	InfoPrinting     <Boolean>      controls weather informational messages
+					are printed.
+
+	ActivityNotificationSignal <QuerySignal>
+					 raised on #activityNotification:
+
+	NonWeakDependencies <Dictionary> keeps track of object dependencies.
+					 Dependents stay alive.
+
+	SynchronizationSemaphores <WeakIdentityDictionary>
+					 Semaphores for per-object-monitor.
 
 
     [author:]
-        Claus Gittinger
+	Claus Gittinger
 
 "
 ! !
@@ -236,23 +236,23 @@
     "called only once - initialize signals"
 
     ErrorSignal isNil ifTrue:[
-        self initSignals
+	self initSignals
     ].
 
     ObjectAttributes isNil ifTrue:[
-        ObjectAttributes := WeakIdentityDictionary new.
+	ObjectAttributes := WeakIdentityDictionary new.
     ].
     Dependencies isNil ifTrue:[
-        Dependencies := WeakDependencyDictionary new.
+	Dependencies := WeakDependencyDictionary new.
     ].
     NonWeakDependencies isNil ifTrue:[
-        NonWeakDependencies := IdentityDictionary new.
+	NonWeakDependencies := IdentityDictionary new.
     ].
     SynchronizationSemaphores isNil ifTrue:[
-        SynchronizationSemaphores := WeakIdentityDictionary new.
+	SynchronizationSemaphores := WeakIdentityDictionary new.
     ].
     FinalizationLobby isNil ifTrue:[
-        FinalizationLobby := Registry new.
+	FinalizationLobby := Registry new.
     ].
 
     "/ initialize InfoPrinting to the VM's infoPrint setting
@@ -432,13 +432,13 @@
 
     "
      RecursiveStoreError handle:[:ex |
-        self halt
+	self halt
      ] do:[
-        |a|
-
-        a := Array new:1.
-        a at:1 put:a.
-        a storeOn:Transcript
+	|a|
+
+	a := Array new:1.
+	a at:1 put:a.
+	a storeOn:Transcript
      ]
     "
 
@@ -525,9 +525,6 @@
     "Modified: 23.4.1996 / 16:00:07 / cg"
 ! !
 
-
-
-
 !Object methodsFor:'Compatibility-Dolphin'!
 
 stbFixup: anSTBInFiler at: newObjectIndex
@@ -619,7 +616,7 @@
 explore
     (self confirm:'The Squeak explorer has not yet been ported to ST/X\\Inspect instead ?' withCRs)
     ifTrue:[
-        self inspect
+	self inspect
     ]
 !
 
@@ -636,13 +633,13 @@
 !
 
 stringForReadout
-        ^ self stringRepresentation
+	^ self stringRepresentation
 !
 
 stringRepresentation
-        "Answer a string that represents the receiver.  For most objects this is simply its printString, but for strings themselves, it's themselves.  6/12/96 sw"
-
-        ^ self printString
+	"Answer a string that represents the receiver.  For most objects this is simply its printString, but for strings themselves, it's themselves.  6/12/96 sw"
+
+	^ self printString
 !
 
 valueWithPossibleArguments:argArray
@@ -689,7 +686,6 @@
     "
 ! !
 
-
 !Object methodsFor:'accessing'!
 
 at:index
@@ -726,239 +722,239 @@
      * and SmallInteger
      */
     if (__isSmallInteger(index)) {
-        myClass = __qClass(self);
-        indx = __intVal(index) - 1;
-        n /* nInstVars */ = __intVal(__ClassInstPtr(myClass)->c_ninstvars);
-        n /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(n /* nInstVars */);
-        nbytes = __qSize(self) - n /* nInstBytes */;
-        pFirst = (char *)(__InstPtr(self)) + n /* nInstBytes */;
-
-        switch ((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
-            case __MASKSMALLINT(POINTERARRAY):
-            case __MASKSMALLINT(WKPOINTERARRAY):
-                /*
-                 * pointers
-                 */
-                if ((unsigned)indx < (__BYTES2OBJS__(nbytes))) {
-                    OBJ *op;
-
-                    op = (OBJ *)pFirst + indx;
-                    RETURN ( *op );
-                }
-                break;
-
-            case __MASKSMALLINT(BYTEARRAY):
-                /*
-                 * (unsigned) bytes
-                 */
-                if ((unsigned)indx < nbytes) {
-                    unsigned char *cp;
-
-                    cp = (unsigned char *)pFirst + indx;
-                    RETURN ( __mkSmallInteger( (*cp & 0xFF)) );
-                }
-                break;
-
-            case __MASKSMALLINT(FLOATARRAY):
-                /*
-                 * native floats
-                 */
-                if ((unsigned)indx < (nbytes / sizeof(float))) {
-                    float *fp;
-                    float f;
-                    OBJ v;
-
-                    fp = (float *)pFirst + indx;
-                    f = *fp;
-                    if (f == 0.0) {
-                        v = __float0;
-                    } else {
-                        __qMKSFLOAT(v, f);
-                    }
-                    RETURN (v);
-                }
-                break;
-
-            case __MASKSMALLINT(DOUBLEARRAY):
-                /*
-                 * native doubles
-                 */
+	myClass = __qClass(self);
+	indx = __intVal(index) - 1;
+	n /* nInstVars */ = __intVal(__ClassInstPtr(myClass)->c_ninstvars);
+	n /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(n /* nInstVars */);
+	nbytes = __qSize(self) - n /* nInstBytes */;
+	pFirst = (char *)(__InstPtr(self)) + n /* nInstBytes */;
+
+	switch ((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
+	    case __MASKSMALLINT(POINTERARRAY):
+	    case __MASKSMALLINT(WKPOINTERARRAY):
+		/*
+		 * pointers
+		 */
+		if ((unsigned)indx < (__BYTES2OBJS__(nbytes))) {
+		    OBJ *op;
+
+		    op = (OBJ *)pFirst + indx;
+		    RETURN ( *op );
+		}
+		break;
+
+	    case __MASKSMALLINT(BYTEARRAY):
+		/*
+		 * (unsigned) bytes
+		 */
+		if ((unsigned)indx < nbytes) {
+		    unsigned char *cp;
+
+		    cp = (unsigned char *)pFirst + indx;
+		    RETURN ( __mkSmallInteger( (*cp & 0xFF)) );
+		}
+		break;
+
+	    case __MASKSMALLINT(FLOATARRAY):
+		/*
+		 * native floats
+		 */
+		if ((unsigned)indx < (nbytes / sizeof(float))) {
+		    float *fp;
+		    float f;
+		    OBJ v;
+
+		    fp = (float *)pFirst + indx;
+		    f = *fp;
+		    if (f == 0.0) {
+			v = __float0;
+		    } else {
+			__qMKSFLOAT(v, f);
+		    }
+		    RETURN (v);
+		}
+		break;
+
+	    case __MASKSMALLINT(DOUBLEARRAY):
+		/*
+		 * native doubles
+		 */
 #ifdef __NEED_DOUBLE_ALIGN
-                if ((INT)pFirst & (__DOUBLE_ALIGN-1)) {
-                    int delta = __DOUBLE_ALIGN - ((INT)pFirst & (__DOUBLE_ALIGN-1));
-
-                    pFirst += delta;
-                    nbytes -= delta;
-                }
+		if ((INT)pFirst & (__DOUBLE_ALIGN-1)) {
+		    int delta = __DOUBLE_ALIGN - ((INT)pFirst & (__DOUBLE_ALIGN-1));
+
+		    pFirst += delta;
+		    nbytes -= delta;
+		}
 #endif
-                if ((unsigned)indx < (nbytes / sizeof(double))) {
-                    double *dp;
-                    double d;
-                    OBJ v;
-
-                    dp = (double *)pFirst + indx;
-                    d = *dp;
-                    if (d == 0.0) {
-                        v = __float0;
-                    } else {
-                        __qMKFLOAT(v, d);
-                    }
-                    RETURN (v);
-                }
-                break;
-
-            case __MASKSMALLINT(WORDARRAY):
-                /*
-                 * unsigned 16bit ints
-                 */
-                /* Notice: the hard coded shifts are by purpose;
-                 * it makes us independent of the short-size of the machine
-                 */
-                if ((unsigned)indx < (nbytes>>1)) {
-                    unsigned short *sp;
-
-                    sp = (unsigned short *)(pFirst + (indx<<1));
-                    RETURN ( __mkSmallInteger( (*sp & 0xFFFF)) );
-                }
-                break;
-
-            case __MASKSMALLINT(SWORDARRAY):
-                /*
-                 * signed 16bit ints
-                 */
-                /* Notice: the hard coded shifts are by purpose;
-                 * it makes us independent of the short-size of the machine
-                 */
-                if ((unsigned)indx < (nbytes>>1)) {
-                    short *ssp;
-
-                    ssp = (short *)(pFirst + (indx<<1));
-                    RETURN ( __mkSmallInteger( (*ssp) ));
-                }
-                break;
-
-            case __MASKSMALLINT(LONGARRAY):
-                /*
-                 * unsigned 32bit ints
-                 */
-                /* Notice: the hard coded shifts are by purpose;
-                 * it makes us independent of the int-size of the machine
-                 */
-                if ((unsigned)indx < (nbytes>>2)) {
-                    unsigned int32 ul;
-                    unsigned int32 *lp;
-
-                    lp = (unsigned int32 *)(pFirst + (indx<<2));
-                    ul = *lp;
+		if ((unsigned)indx < (nbytes / sizeof(double))) {
+		    double *dp;
+		    double d;
+		    OBJ v;
+
+		    dp = (double *)pFirst + indx;
+		    d = *dp;
+		    if (d == 0.0) {
+			v = __float0;
+		    } else {
+			__qMKFLOAT(v, d);
+		    }
+		    RETURN (v);
+		}
+		break;
+
+	    case __MASKSMALLINT(WORDARRAY):
+		/*
+		 * unsigned 16bit ints
+		 */
+		/* Notice: the hard coded shifts are by purpose;
+		 * it makes us independent of the short-size of the machine
+		 */
+		if ((unsigned)indx < (nbytes>>1)) {
+		    unsigned short *sp;
+
+		    sp = (unsigned short *)(pFirst + (indx<<1));
+		    RETURN ( __mkSmallInteger( (*sp & 0xFFFF)) );
+		}
+		break;
+
+	    case __MASKSMALLINT(SWORDARRAY):
+		/*
+		 * signed 16bit ints
+		 */
+		/* Notice: the hard coded shifts are by purpose;
+		 * it makes us independent of the short-size of the machine
+		 */
+		if ((unsigned)indx < (nbytes>>1)) {
+		    short *ssp;
+
+		    ssp = (short *)(pFirst + (indx<<1));
+		    RETURN ( __mkSmallInteger( (*ssp) ));
+		}
+		break;
+
+	    case __MASKSMALLINT(LONGARRAY):
+		/*
+		 * unsigned 32bit ints
+		 */
+		/* Notice: the hard coded shifts are by purpose;
+		 * it makes us independent of the int-size of the machine
+		 */
+		if ((unsigned)indx < (nbytes>>2)) {
+		    unsigned int32 ul;
+		    unsigned int32 *lp;
+
+		    lp = (unsigned int32 *)(pFirst + (indx<<2));
+		    ul = *lp;
 #if __POINTER_SIZE__ == 8
-                    {
-                        unsigned  INT ull = (unsigned INT)ul;
-                        RETURN ( __mkSmallInteger(ull) );
-                    }
+		    {
+			unsigned  INT ull = (unsigned INT)ul;
+			RETURN ( __mkSmallInteger(ull) );
+		    }
 #else
-                    if (ul <= _MAX_INT) {
-                        RETURN ( __mkSmallInteger(ul) );
-                    }
-                    RETURN ( __MKULARGEINT(ul) );
+		    if (ul <= _MAX_INT) {
+			RETURN ( __mkSmallInteger(ul) );
+		    }
+		    RETURN ( __MKULARGEINT(ul) );
 #endif
-                }
-                break;
-
-            case __MASKSMALLINT(SLONGARRAY):
-                /*
-                 * signed 32bit ints
-                 */
-                /* Notice: the hard coded shifts are by purpose;
-                 * it makes us independent of the int-size of the machine
-                 */
-                if ((unsigned)indx < (nbytes>>2)) {
-                    int32 *slp;
-                    int32 l;
-
-                    slp = (int32 *)(pFirst + (indx<<2));
-                    l = *slp;
+		}
+		break;
+
+	    case __MASKSMALLINT(SLONGARRAY):
+		/*
+		 * signed 32bit ints
+		 */
+		/* Notice: the hard coded shifts are by purpose;
+		 * it makes us independent of the int-size of the machine
+		 */
+		if ((unsigned)indx < (nbytes>>2)) {
+		    int32 *slp;
+		    int32 l;
+
+		    slp = (int32 *)(pFirst + (indx<<2));
+		    l = *slp;
 #if __POINTER_SIZE__ == 8
-                    {
-                        INT ll = (INT)l;
-                        RETURN ( __mkSmallInteger(ll) );
-                    }
+		    {
+			INT ll = (INT)l;
+			RETURN ( __mkSmallInteger(ll) );
+		    }
 #else
-                    if (__ISVALIDINTEGER(l)) {
-                        RETURN ( __mkSmallInteger(l) );
-                    }
-                    RETURN ( __MKLARGEINT(l) );
+		    if (__ISVALIDINTEGER(l)) {
+			RETURN ( __mkSmallInteger(l) );
+		    }
+		    RETURN ( __MKLARGEINT(l) );
 #endif
-                }
-                break;
-
-            case __MASKSMALLINT(SLONGLONGARRAY):
-                /*
-                 * signed 64bit longlongs
-                 */
+		}
+		break;
+
+	    case __MASKSMALLINT(SLONGLONGARRAY):
+		/*
+		 * signed 64bit longlongs
+		 */
 #ifdef __NEED_LONGLONG_ALIGN
-                if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
-                    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
-
-                    pFirst += delta;
-                    nbytes -= delta;
-                }
+		if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
+		    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
+
+		    pFirst += delta;
+		    nbytes -= delta;
+		}
 #endif
-                /* Notice: the hard coded shifts are by purpose;
-                 * it makes us independent of the long/longlong-size of the machine
-                 */
-                if ((unsigned)indx < (nbytes>>3)) {
+		/* Notice: the hard coded shifts are by purpose;
+		 * it makes us independent of the long/longlong-size of the machine
+		 */
+		if ((unsigned)indx < (nbytes>>3)) {
 #if __POINTER_SIZE__ == 8
-                    INT *slp, ll;
-
-                    slp = (INT *)(pFirst + (indx<<3));
-                    ll = *slp;
-                    if (__ISVALIDINTEGER(ll)) {
-                        RETURN ( __mkSmallInteger(ll) );
-                    }
-                    RETURN ( __MKLARGEINT(ll) );
+		    INT *slp, ll;
+
+		    slp = (INT *)(pFirst + (indx<<3));
+		    ll = *slp;
+		    if (__ISVALIDINTEGER(ll)) {
+			RETURN ( __mkSmallInteger(ll) );
+		    }
+		    RETURN ( __MKLARGEINT(ll) );
 #else
-                    __int64__ *llp;
-
-                    llp = (__int64__ *)(pFirst + (indx<<3));
-                    RETURN (__MKINT64(llp));
+		    __int64__ *llp;
+
+		    llp = (__int64__ *)(pFirst + (indx<<3));
+		    RETURN (__MKINT64(llp));
 #endif
-                }
-                break;
-
-            case __MASKSMALLINT(LONGLONGARRAY):
-                /*
-                 * unsigned 64bit longlongs
-                 */
+		}
+		break;
+
+	    case __MASKSMALLINT(LONGLONGARRAY):
+		/*
+		 * unsigned 64bit longlongs
+		 */
 #ifdef __NEED_LONGLONG_ALIGN
-                if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
-                    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
-
-                    pFirst += delta;
-                    nbytes -= delta;
-                }
+		if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
+		    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
+
+		    pFirst += delta;
+		    nbytes -= delta;
+		}
 #endif
-                /* Notice: the hard coded shifts are by purpose;
-                 * it makes us independent of the long/longlong-size of the machine
-                 */
-                if ((unsigned)indx < (nbytes>>3)) {
+		/* Notice: the hard coded shifts are by purpose;
+		 * it makes us independent of the long/longlong-size of the machine
+		 */
+		if ((unsigned)indx < (nbytes>>3)) {
 #if __POINTER_SIZE__ == 8
-                    unsigned INT *ulp, ul;
-
-                    ulp = (unsigned INT *)(pFirst + (indx<<3));
-                    ul = *ulp;
-                    if (ul <= _MAX_INT) {
-                        RETURN ( __mkSmallInteger(ul) );
-                    }
-                    RETURN ( __MKULARGEINT(ul) );
+		    unsigned INT *ulp, ul;
+
+		    ulp = (unsigned INT *)(pFirst + (indx<<3));
+		    ul = *ulp;
+		    if (ul <= _MAX_INT) {
+			RETURN ( __mkSmallInteger(ul) );
+		    }
+		    RETURN ( __MKULARGEINT(ul) );
 #else
-                    __uint64__ *llp;
-
-                    llp = (__uint64__ *)(pFirst + (indx<<3));
-                    RETURN (__MKUINT64(llp));
+		    __uint64__ *llp;
+
+		    llp = (__uint64__ *)(pFirst + (indx<<3));
+		    RETURN (__MKUINT64(llp));
 #endif
-                }
-                break;
-        }
+		}
+		break;
+	}
     }
 %}.
     ^ self indexNotIntegerOrOutOfBounds:index
@@ -986,246 +982,246 @@
        and SmallInteger */
 
     if (__isSmallInteger(index)) {
-        indx = __intVal(index) - 1;
-        myClass = __qClass(self);
-        n /* ninstvars */ = __intVal(__ClassInstPtr(myClass)->c_ninstvars);
-        n /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(n /* ninstvars */);
-        nbytes = __qSize(self) - n /* nInstBytes */;
-        pFirst = (char *)(__InstPtr(self)) + n /* nInstBytes */;
-
-        switch ((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
-            case __MASKSMALLINT(POINTERARRAY):
-            case __MASKSMALLINT(WKPOINTERARRAY):
-                if ((unsigned)indx < (__BYTES2OBJS__(nbytes))) {
-                    OBJ *op;
-
-                    op = (OBJ *)pFirst + indx;
-                    *op = anObject;
-                    __STORE(self, anObject);
-                    RETURN ( anObject );
-                }
-                break;
-
-            case __MASKSMALLINT(BYTEARRAY):
-                if (__isSmallInteger(anObject)) {
-                    val = __intVal(anObject);
-                    if ((val & ~0xFF) == 0 /* i.e. (val >= 0) && (val <= 255) */) {
-                        if ((unsigned)indx < nbytes) {
-                            char *cp;
-
-                            cp = pFirst + indx;
-                            *cp = val;
-                            RETURN ( anObject );
-                        }
-                    }
-                }
-                break;
-
-            case __MASKSMALLINT(FLOATARRAY):
-                if ((unsigned)indx < (nbytes / sizeof(float))) {
-                    float *fp;
-
-                    fp = (float *)pFirst + indx;
-                    if (anObject != nil) {
-                        if (! __isSmallInteger(anObject)) {
-                            if (__qIsFloatLike(anObject)) {
-                                *fp = (float)(__floatVal(anObject));
-                                RETURN ( anObject );
-                            }
-                            if (__qIsShortFloat(anObject)) {
-                                *fp = __shortFloatVal(anObject);
-                                RETURN ( anObject );
-                            }
-                        } else {
-                            *fp = (float) __intVal(anObject);
-                            RETURN ( anObject );
-                        }
-                    }
-                }
-                break;
-
-            case __MASKSMALLINT(DOUBLEARRAY):
+	indx = __intVal(index) - 1;
+	myClass = __qClass(self);
+	n /* ninstvars */ = __intVal(__ClassInstPtr(myClass)->c_ninstvars);
+	n /* nInstBytes */ = OHDR_SIZE + __OBJS2BYTES__(n /* ninstvars */);
+	nbytes = __qSize(self) - n /* nInstBytes */;
+	pFirst = (char *)(__InstPtr(self)) + n /* nInstBytes */;
+
+	switch ((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
+	    case __MASKSMALLINT(POINTERARRAY):
+	    case __MASKSMALLINT(WKPOINTERARRAY):
+		if ((unsigned)indx < (__BYTES2OBJS__(nbytes))) {
+		    OBJ *op;
+
+		    op = (OBJ *)pFirst + indx;
+		    *op = anObject;
+		    __STORE(self, anObject);
+		    RETURN ( anObject );
+		}
+		break;
+
+	    case __MASKSMALLINT(BYTEARRAY):
+		if (__isSmallInteger(anObject)) {
+		    val = __intVal(anObject);
+		    if ((val & ~0xFF) == 0 /* i.e. (val >= 0) && (val <= 255) */) {
+			if ((unsigned)indx < nbytes) {
+			    char *cp;
+
+			    cp = pFirst + indx;
+			    *cp = val;
+			    RETURN ( anObject );
+			}
+		    }
+		}
+		break;
+
+	    case __MASKSMALLINT(FLOATARRAY):
+		if ((unsigned)indx < (nbytes / sizeof(float))) {
+		    float *fp;
+
+		    fp = (float *)pFirst + indx;
+		    if (anObject != nil) {
+			if (! __isSmallInteger(anObject)) {
+			    if (__qIsFloatLike(anObject)) {
+				*fp = (float)(__floatVal(anObject));
+				RETURN ( anObject );
+			    }
+			    if (__qIsShortFloat(anObject)) {
+				*fp = __shortFloatVal(anObject);
+				RETURN ( anObject );
+			    }
+			} else {
+			    *fp = (float) __intVal(anObject);
+			    RETURN ( anObject );
+			}
+		    }
+		}
+		break;
+
+	    case __MASKSMALLINT(DOUBLEARRAY):
 #ifdef __NEED_DOUBLE_ALIGN
-                if ((INT)pFirst & (__DOUBLE_ALIGN-1)) {
-                    int delta = __DOUBLE_ALIGN - ((INT)pFirst & (__DOUBLE_ALIGN-1));
-
-                    pFirst += delta;
-                    nbytes -= delta;
-                }
+		if ((INT)pFirst & (__DOUBLE_ALIGN-1)) {
+		    int delta = __DOUBLE_ALIGN - ((INT)pFirst & (__DOUBLE_ALIGN-1));
+
+		    pFirst += delta;
+		    nbytes -= delta;
+		}
 #endif
-                if ((unsigned)indx < (nbytes / sizeof(double))) {
-                    double *dp;
-
-                    dp = (double *)pFirst + indx;
-                    if (anObject != nil) {
-                        if (! __isSmallInteger(anObject)) {
-                            if (__qIsFloatLike(anObject)) {
-                                *dp = __floatVal(anObject);
-                                RETURN ( anObject );
-                            }
-                            if (__qIsShortFloat(anObject)) {
-                                *dp = (double)__shortFloatVal(anObject);
-                                RETURN ( anObject );
-                            }
-                        } else {
-                            *dp = (double) __intVal(anObject);
-                            RETURN ( anObject );
-                        }
-                    }
-                }
-                break;
-
-            case __MASKSMALLINT(WORDARRAY):
-                if (__isSmallInteger(anObject)) {
-                    val = __intVal(anObject);
-                    if ((unsigned)val <= 0xFFFF) {
-                        if ((unsigned)indx < (nbytes>>1)) {
-                            unsigned short *sp;
-
-                            sp = (unsigned short *)(pFirst + (indx<<1));
-                            *sp = val;
-                            RETURN ( anObject );
-                        }
-                    }
-                }
-                break;
-
-            case __MASKSMALLINT(SWORDARRAY):
-                if (__isSmallInteger(anObject)) {
-                    val = __intVal(anObject);
-                    if ((val >= -32768) && (val < 32768)) {
-                        if ((unsigned)indx < (nbytes>>1)) {
-                            short *ssp;
-
-                            ssp = (short *)(pFirst + (indx<<1));
-                            *ssp = val;
-                            RETURN ( anObject );
-                        }
-                    }
-                }
-                break;
-
-            case __MASKSMALLINT(SLONGARRAY):
-                if ((unsigned)indx < (nbytes>>2)) {
-                    int32 *slp;
-
-                    slp = (int32 *)(pFirst + (indx<<2));
-                    if (__isSmallInteger(anObject)) {
-                        *slp = __intVal(anObject);
-                        RETURN ( anObject );
-                    }
-                    n = __signedLongIntVal(anObject);
-                    /*
-                     * zero means failure for an int larger than 4 bytes
-                     * (would be a smallInteger)
-                     */
-                    if (n) {
-                        *slp = n;
-                        RETURN ( anObject );
-                    }
-                }
-                break;
-
-            case __MASKSMALLINT(LONGARRAY):
-                if ((unsigned)indx < (nbytes>>2)) {
-                    unsigned int32 *lp;
-
-                    lp = (unsigned int32 *)(pFirst + (indx<<2));
-                    if (anObject == __mkSmallInteger(0)) {
-                        *lp = 0;
-                        RETURN ( anObject );
-                    }
-                    u = __longIntVal(anObject);
-                    /*
-                     * zero means failure for an int larger than 4 bytes
-                     * (would be a smallInteger)
-                     */
-                    if (u) {
-                        *lp = u;
-                        RETURN ( anObject );
-                    }
-                }
-                break;
-
-            case __MASKSMALLINT(SLONGLONGARRAY):
+		if ((unsigned)indx < (nbytes / sizeof(double))) {
+		    double *dp;
+
+		    dp = (double *)pFirst + indx;
+		    if (anObject != nil) {
+			if (! __isSmallInteger(anObject)) {
+			    if (__qIsFloatLike(anObject)) {
+				*dp = __floatVal(anObject);
+				RETURN ( anObject );
+			    }
+			    if (__qIsShortFloat(anObject)) {
+				*dp = (double)__shortFloatVal(anObject);
+				RETURN ( anObject );
+			    }
+			} else {
+			    *dp = (double) __intVal(anObject);
+			    RETURN ( anObject );
+			}
+		    }
+		}
+		break;
+
+	    case __MASKSMALLINT(WORDARRAY):
+		if (__isSmallInteger(anObject)) {
+		    val = __intVal(anObject);
+		    if ((unsigned)val <= 0xFFFF) {
+			if ((unsigned)indx < (nbytes>>1)) {
+			    unsigned short *sp;
+
+			    sp = (unsigned short *)(pFirst + (indx<<1));
+			    *sp = val;
+			    RETURN ( anObject );
+			}
+		    }
+		}
+		break;
+
+	    case __MASKSMALLINT(SWORDARRAY):
+		if (__isSmallInteger(anObject)) {
+		    val = __intVal(anObject);
+		    if ((val >= -32768) && (val < 32768)) {
+			if ((unsigned)indx < (nbytes>>1)) {
+			    short *ssp;
+
+			    ssp = (short *)(pFirst + (indx<<1));
+			    *ssp = val;
+			    RETURN ( anObject );
+			}
+		    }
+		}
+		break;
+
+	    case __MASKSMALLINT(SLONGARRAY):
+		if ((unsigned)indx < (nbytes>>2)) {
+		    int32 *slp;
+
+		    slp = (int32 *)(pFirst + (indx<<2));
+		    if (__isSmallInteger(anObject)) {
+			*slp = __intVal(anObject);
+			RETURN ( anObject );
+		    }
+		    n = __signedLongIntVal(anObject);
+		    /*
+		     * zero means failure for an int larger than 4 bytes
+		     * (would be a smallInteger)
+		     */
+		    if (n) {
+			*slp = n;
+			RETURN ( anObject );
+		    }
+		}
+		break;
+
+	    case __MASKSMALLINT(LONGARRAY):
+		if ((unsigned)indx < (nbytes>>2)) {
+		    unsigned int32 *lp;
+
+		    lp = (unsigned int32 *)(pFirst + (indx<<2));
+		    if (anObject == __mkSmallInteger(0)) {
+			*lp = 0;
+			RETURN ( anObject );
+		    }
+		    u = __longIntVal(anObject);
+		    /*
+		     * zero means failure for an int larger than 4 bytes
+		     * (would be a smallInteger)
+		     */
+		    if (u) {
+			*lp = u;
+			RETURN ( anObject );
+		    }
+		}
+		break;
+
+	    case __MASKSMALLINT(SLONGLONGARRAY):
 #ifdef __NEED_LONGLONG_ALIGN
-                if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
-                    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
-
-                    pFirst += delta;
-                    nbytes -= delta;
-                }
+		if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
+		    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
+
+		    pFirst += delta;
+		    nbytes -= delta;
+		}
 #endif
-                if ((unsigned)indx < (nbytes>>3)) {
-                    __int64__ ll;
-                    __int64__ *sllp;
-
-                    sllp = (__int64__ *)(pFirst + (indx<<3));
-
-                    if (anObject == __mkSmallInteger(0)) {
-                        ll.lo = ll.hi = 0;
-                        *sllp = ll;
-                        RETURN ( anObject );
-                    }
-                    if (__signedLong64IntVal(anObject, &ll)) {
-                        *sllp = ll;
-                        RETURN ( anObject );
-                    }
-                }
-                break;
-
-            case __MASKSMALLINT(LONGLONGARRAY):
+		if ((unsigned)indx < (nbytes>>3)) {
+		    __int64__ ll;
+		    __int64__ *sllp;
+
+		    sllp = (__int64__ *)(pFirst + (indx<<3));
+
+		    if (anObject == __mkSmallInteger(0)) {
+			ll.lo = ll.hi = 0;
+			*sllp = ll;
+			RETURN ( anObject );
+		    }
+		    if (__signedLong64IntVal(anObject, &ll)) {
+			*sllp = ll;
+			RETURN ( anObject );
+		    }
+		}
+		break;
+
+	    case __MASKSMALLINT(LONGLONGARRAY):
 #ifdef __NEED_LONGLONG_ALIGN
-                if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
-                    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
-
-                    pFirst += delta;
-                    nbytes -= delta;
-                }
+		if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
+		    int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
+
+		    pFirst += delta;
+		    nbytes -= delta;
+		}
 #endif
-                if ((unsigned)indx < (nbytes>>3)) {
-                    __uint64__ ll;
-                    __uint64__ *llp;
-
-                    llp = (__uint64__ *)(pFirst + (indx<<3));
-                    if (anObject == __mkSmallInteger(0)) {
-                        ll.lo = ll.hi = 0;
-                        *llp = ll;
-                        RETURN ( anObject );
-                    }
-                    if (__unsignedLong64IntVal(anObject, &ll)) {
-                        *llp = ll;
-                        RETURN ( anObject );
-                    }
-                }
-                break;
-        }
+		if ((unsigned)indx < (nbytes>>3)) {
+		    __uint64__ ll;
+		    __uint64__ *llp;
+
+		    llp = (__uint64__ *)(pFirst + (indx<<3));
+		    if (anObject == __mkSmallInteger(0)) {
+			ll.lo = ll.hi = 0;
+			*llp = ll;
+			RETURN ( anObject );
+		    }
+		    if (__unsignedLong64IntVal(anObject, &ll)) {
+			*llp = ll;
+			RETURN ( anObject );
+		    }
+		}
+		break;
+	}
     }
 %}.
     index isInteger ifFalse:[
-        "
-         the index should be an integer number
-        "
-        ^ self indexNotInteger:index
+	"
+	 the index should be an integer number
+	"
+	^ self indexNotInteger:index
     ].
     (index between:1 and:self size) ifFalse:[
-        "
-         the index is less than 1 or greater than the size of the
-         receiver collection
-        "
-        ^ self subscriptBoundsError:index
+	"
+	 the index is less than 1 or greater than the size of the
+	 receiver collection
+	"
+	^ self subscriptBoundsError:index
     ].
     (self class isFloatsOrDoubles) ifTrue:[
-        anObject isNumber ifTrue:[
-            ^ self basicAt:index put:(anObject asFloat)
-        ]
+	anObject isNumber ifTrue:[
+	    ^ self basicAt:index put:(anObject asFloat)
+	]
     ].
     anObject isInteger ifFalse:[
-        "
-         the object to put into the receiver collection
-         should be an integer number
-        "
-        ^ self elementNotInteger
+	"
+	 the object to put into the receiver collection
+	 should be an integer number
+	"
+	^ self elementNotInteger
     ].
     "
      the object to put into the receiver collection
@@ -1253,56 +1249,56 @@
     REGISTER OBJ cls;
 
     if (__isSmallInteger(index)) {
-        slf = self;
-        if (__isNonNilObject(slf)) {
-            unsigned char *pFirst;
-            int nIndex;
-
-            cls = __qClass(slf);
-
-            pFirst = __byteArrayVal(slf);
-            pFirst += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
-            nIndex = __byteArraySize(slf);
-            indx = __intVal(index) - 1;
-
-            switch ((INT)(__ClassInstPtr(cls)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
-                case __MASKSMALLINT(DOUBLEARRAY):
+	slf = self;
+	if (__isNonNilObject(slf)) {
+	    unsigned char *pFirst;
+	    int nIndex;
+
+	    cls = __qClass(slf);
+
+	    pFirst = __byteArrayVal(slf);
+	    pFirst += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+	    nIndex = __byteArraySize(slf);
+	    indx = __intVal(index) - 1;
+
+	    switch ((INT)(__ClassInstPtr(cls)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
+		case __MASKSMALLINT(DOUBLEARRAY):
 #ifdef __NEED_DOUBLE_ALIGN
-                    if ((INT)pFirst & (__DOUBLE_ALIGN-1)) {
-                        int delta = __DOUBLE_ALIGN - ((INT)pFirst & (__DOUBLE_ALIGN-1));
-
-                        pFirst += delta;
-                        nIndex -= delta;
-                    }
+		    if ((INT)pFirst & (__DOUBLE_ALIGN-1)) {
+			int delta = __DOUBLE_ALIGN - ((INT)pFirst & (__DOUBLE_ALIGN-1));
+
+			pFirst += delta;
+			nIndex -= delta;
+		    }
 #endif
-                    /* fall into */
-                case __MASKSMALLINT(BYTEARRAY):
-                case __MASKSMALLINT(WORDARRAY):
-                case __MASKSMALLINT(LONGARRAY):
-                case __MASKSMALLINT(SWORDARRAY):
-                case __MASKSMALLINT(SLONGARRAY):
-                case __MASKSMALLINT(FLOATARRAY):
-                    if ((unsigned)indx < (unsigned)nIndex) {
-                        RETURN ( __mkSmallInteger( (INT)(pFirst[indx])) );
-                    }
-                    break;
-
-                case __MASKSMALLINT(LONGLONGARRAY):
-                case __MASKSMALLINT(SLONGLONGARRAY):
+		    /* fall into */
+		case __MASKSMALLINT(BYTEARRAY):
+		case __MASKSMALLINT(WORDARRAY):
+		case __MASKSMALLINT(LONGARRAY):
+		case __MASKSMALLINT(SWORDARRAY):
+		case __MASKSMALLINT(SLONGARRAY):
+		case __MASKSMALLINT(FLOATARRAY):
+		    if ((unsigned)indx < (unsigned)nIndex) {
+			RETURN ( __mkSmallInteger( (INT)(pFirst[indx])) );
+		    }
+		    break;
+
+		case __MASKSMALLINT(LONGLONGARRAY):
+		case __MASKSMALLINT(SLONGLONGARRAY):
 #ifdef __NEED_LONGLONG_ALIGN
-                    if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
-                        int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
-
-                        pFirst += delta;
-                        nIndex -= delta;
-                    }
+		    if ((INT)pFirst & (__LONGLONG_ALIGN-1)) {
+			int delta = __LONGLONG_ALIGN - ((INT)pFirst & (__LONGLONG_ALIGN-1));
+
+			pFirst += delta;
+			nIndex -= delta;
+		    }
 #endif
-                    if ((unsigned)indx < (unsigned)nIndex) {
-                        RETURN ( __mkSmallInteger( (INT)(pFirst[indx])) );
-                    }
-                    break;
-            }
-        }
+		    if ((unsigned)indx < (unsigned)nIndex) {
+			RETURN ( __mkSmallInteger( (INT)(pFirst[indx])) );
+		    }
+		    break;
+	    }
+	}
     }
 %}.
     "/ index not integer or index out of range
@@ -1335,33 +1331,33 @@
     REGISTER OBJ cls;
 
     if (__bothSmallInteger(index, byteValue)) {
-        val = __intVal(byteValue);
-        if ((unsigned)(val) <= 0xFF /* i.e. (val >= 0) && (val <= 255) */) {
-            slf = self;
-            if (__isNonNilObject(slf)) {
-                cls = __qClass(slf);
-
-                indx = __intVal(index) - 1;
-                switch ((INT)(__ClassInstPtr(cls)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
-                    case __MASKSMALLINT(BYTEARRAY):
-                    case __MASKSMALLINT(WORDARRAY):
-                    case __MASKSMALLINT(LONGARRAY):
-                    case __MASKSMALLINT(SWORDARRAY):
-                    case __MASKSMALLINT(SLONGARRAY):
-                    case __MASKSMALLINT(LONGLONGARRAY):
-                    case __MASKSMALLINT(SLONGLONGARRAY):
-                    case __MASKSMALLINT(FLOATARRAY):
-                    case __MASKSMALLINT(DOUBLEARRAY):
-                        indx += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
-                        nIndex = __byteArraySize(slf);
-                        if ((unsigned)indx < (unsigned)nIndex) {
-                            __ByteArrayInstPtr(slf)->ba_element[indx] = val;
-                            RETURN ( byteValue );
-                        }
-                        break;
-                }
-            }
-        }
+	val = __intVal(byteValue);
+	if ((unsigned)(val) <= 0xFF /* i.e. (val >= 0) && (val <= 255) */) {
+	    slf = self;
+	    if (__isNonNilObject(slf)) {
+		cls = __qClass(slf);
+
+		indx = __intVal(index) - 1;
+		switch ((INT)(__ClassInstPtr(cls)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
+		    case __MASKSMALLINT(BYTEARRAY):
+		    case __MASKSMALLINT(WORDARRAY):
+		    case __MASKSMALLINT(LONGARRAY):
+		    case __MASKSMALLINT(SWORDARRAY):
+		    case __MASKSMALLINT(SLONGARRAY):
+		    case __MASKSMALLINT(LONGLONGARRAY):
+		    case __MASKSMALLINT(SLONGLONGARRAY):
+		    case __MASKSMALLINT(FLOATARRAY):
+		    case __MASKSMALLINT(DOUBLEARRAY):
+			indx += __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+			nIndex = __byteArraySize(slf);
+			if ((unsigned)indx < (unsigned)nIndex) {
+			    __ByteArrayInstPtr(slf)->ba_element[indx] = val;
+			    RETURN ( byteValue );
+			}
+			break;
+		}
+	    }
+	}
     }
 %}.
     "/ index not integer or index out of range
@@ -1386,22 +1382,22 @@
     int idx, ninstvars;
 
     if (__isSmallInteger(index)) {
-        myClass = __Class(self);
-        idx = __intVal(index) - 1;
-        /*
-         * do not allow returning of non-object fields.
-         * if subclass did not make provisions for that,
-         * we won't do so here ...
-         */
-        if (((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(NONOBJECT_INSTS))) {
-            if (idx == 0) {
-                RETURN ( nil )
-            }
-        }
-        ninstvars = __intVal(__ClassInstPtr(myClass)->c_ninstvars);
-        if ((idx >= 0) && (idx < ninstvars)) {
-            RETURN ( __InstPtr(self)->i_instvars[idx] );
-        }
+	myClass = __Class(self);
+	idx = __intVal(index) - 1;
+	/*
+	 * do not allow returning of non-object fields.
+	 * if subclass did not make provisions for that,
+	 * we won't do so here ...
+	 */
+	if (((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(NONOBJECT_INSTS))) {
+	    if (idx == 0) {
+		RETURN ( nil )
+	    }
+	}
+	ninstvars = __intVal(__ClassInstPtr(myClass)->c_ninstvars);
+	if ((idx >= 0) && (idx < ninstvars)) {
+	    RETURN ( __InstPtr(self)->i_instvars[idx] );
+	}
     }
 %}.
     ^ self indexNotIntegerOrOutOfBounds:index
@@ -1418,24 +1414,24 @@
     int idx, ninstvars;
 
     if (__isSmallInteger(index)) {
-        myClass = __Class(self);
-        idx = __intVal(index) - 1;
-        ninstvars = __intVal(__ClassInstPtr(myClass)->c_ninstvars);
-        /*
-         * do not allow setting of non-object fields.
-         * if subclass did not make provisions for that,
-         * we won't do so here ...
-         */
-        if (((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(NONOBJECT_INSTS))) {
-            if (idx == 0) {
-                RETURN ( nil )
-            }
-        }
-        if ((idx >= 0) && (idx < ninstvars)) {
-            __InstPtr(self)->i_instvars[idx] = value;
-            __STORE(self, value);
-            RETURN ( value );
-        }
+	myClass = __Class(self);
+	idx = __intVal(index) - 1;
+	ninstvars = __intVal(__ClassInstPtr(myClass)->c_ninstvars);
+	/*
+	 * do not allow setting of non-object fields.
+	 * if subclass did not make provisions for that,
+	 * we won't do so here ...
+	 */
+	if (((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(NONOBJECT_INSTS))) {
+	    if (idx == 0) {
+		RETURN ( nil )
+	    }
+	}
+	if ((idx >= 0) && (idx < ninstvars)) {
+	    __InstPtr(self)->i_instvars[idx] = value;
+	    __STORE(self, value);
+	    RETURN ( value );
+	}
     }
 %}.
     ^ self indexNotIntegerOrOutOfBounds:index
@@ -1452,7 +1448,7 @@
 
     idx := self class instVarOffsetOf:name.
     idx isNil ifTrue:[
-        ^ self errorKeyNotFound:name.
+	^ self errorKeyNotFound:name.
     ].
     ^ self instVarAt:idx.
 
@@ -1504,7 +1500,7 @@
 
     idx := self class instVarOffsetOf:name.
     idx isNil ifTrue:[
-        ^ self errorKeyNotFound:name.
+	^ self errorKeyNotFound:name.
     ].
     ^ self instVarAt:idx put:value.
 
@@ -1556,7 +1552,7 @@
 
     attrs := self objectAttributes.
     (attrs notNil and:[attrs size > 0]) ifTrue:[
-        ^ attrs at:attributeKey ifAbsent:[]
+	^ attrs at:attributeKey ifAbsent:[]
     ].
     ^ nil
 
@@ -1570,16 +1566,16 @@
     "/ must do this save from interrupts, since the attributes collection
     "/ is possibly accessed from multiple threads ...
     [
-        | attrs |
-
-        attrs := self objectAttributes.
-        (attrs isNil or:[attrs size == 0]) ifTrue:[
-            attrs := WeakIdentityDictionary new.
-            attrs at:attributeKey put:anObject.
-            self objectAttributes:attrs.
-        ] ifFalse:[
-            attrs at:attributeKey put:anObject.
-        ].
+	| attrs |
+
+	attrs := self objectAttributes.
+	(attrs isNil or:[attrs size == 0]) ifTrue:[
+	    attrs := WeakIdentityDictionary new.
+	    attrs at:attributeKey put:anObject.
+	    self objectAttributes:attrs.
+	] ifFalse:[
+	    attrs at:attributeKey put:anObject.
+	].
     ] valueUninterruptably
 
     "Attaching additional attributes (slots) to an arbitrary object:
@@ -1620,24 +1616,24 @@
     "/ is possibly accessed from multiple threads.
 
     (OperatingSystem blockInterrupts) ifTrue:[
-        "/ the common case - already blocked
-
-        (aCollection isNil or:[aCollection isEmpty]) ifTrue:[
-            ObjectAttributes removeKey:self ifAbsent:nil
-        ] ifFalse:[
-            ObjectAttributes at:self put:aCollection
-        ].
-        ^ self
+	"/ the common case - already blocked
+
+	(aCollection isNil or:[aCollection isEmpty]) ifTrue:[
+	    ObjectAttributes removeKey:self ifAbsent:nil
+	] ifFalse:[
+	    ObjectAttributes at:self put:aCollection
+	].
+	^ self
     ].
 
     [
-        (aCollection isNil or:[aCollection isEmpty]) ifTrue:[
-            ObjectAttributes removeKey:self ifAbsent:nil
-        ] ifFalse:[
-            ObjectAttributes at:self put:aCollection
-        ].
+	(aCollection isNil or:[aCollection isEmpty]) ifTrue:[
+	    ObjectAttributes removeKey:self ifAbsent:nil
+	] ifFalse:[
+	    ObjectAttributes at:self put:aCollection
+	].
     ] ensure:[
-        OperatingSystem unblockInterrupts
+	OperatingSystem unblockInterrupts
     ]
 
     "Created: / 22.1.1998 / 21:29:35 / av"
@@ -1650,31 +1646,30 @@
     "/ must do this save from interrupts, since the attributes collection
     "/ is possibly accessed from multiple threads.
     [
-        |attrs n a|
-
-        attrs := self objectAttributes.
-        attrs size == 0 ifTrue:[
-            self objectAttributes:nil
-        ] ifFalse:[
-            attrs removeKey:attributeKey ifAbsent:nil.
-            attrs size == 0 ifTrue:[
-                self objectAttributes:nil
-            ]
-        ]
+	|attrs n a|
+
+	attrs := self objectAttributes.
+	attrs size == 0 ifTrue:[
+	    self objectAttributes:nil
+	] ifFalse:[
+	    attrs removeKey:attributeKey ifAbsent:nil.
+	    attrs size == 0 ifTrue:[
+		self objectAttributes:nil
+	    ]
+	]
     ] valueUninterruptably
 
     "Created: / 22.1.1998 / 21:29:39 / av"
     "Modified: / 18.2.2000 / 11:32:19 / cg"
 ! !
 
-
 !Object methodsFor:'change & update'!
 
 broadcast:aSelectorSymbol
     "send a message with selector aSelectorSymbol to all my dependents"
 
     self dependentsDo:[:dependent |
-        dependent perform:aSelectorSymbol
+	dependent perform:aSelectorSymbol
     ]
 !
 
@@ -1683,7 +1678,7 @@
      argument anArgument to all my dependents."
 
     self dependentsDo:[:dependent |
-        dependent perform:aSelectorSymbol with:anArgument
+	dependent perform:aSelectorSymbol with:anArgument
     ]
 !
 
@@ -1692,7 +1687,7 @@
      grant the request, and return true if so"
 
     self dependentsDo:[:dependent |
-        dependent updateRequest ifFalse:[^ false].
+	dependent updateRequest ifFalse:[^ false].
     ].
     ^ true
 !
@@ -1702,7 +1697,7 @@
      grant the request, and return true if so"
 
     self dependentsDo:[:dependent |
-        (dependent updateRequest:aSymbol) ifFalse:[^ false].
+	(dependent updateRequest:aSymbol) ifFalse:[^ false].
     ].
     ^ true
 !
@@ -1730,9 +1725,9 @@
      about to send the change request."
 
     self dependentsDo:[:dependent |
-        dependent == anObject ifFalse:[
-            (dependent updateRequest:aSymbol with:aParameter from:anObject) ifFalse:[^ false].
-        ]
+	dependent == anObject ifFalse:[
+	    (dependent updateRequest:aSymbol with:aParameter from:anObject) ifFalse:[^ false].
+	]
     ].
     ^ true
 !
@@ -1744,9 +1739,9 @@
      about to send the change request."
 
     self dependentsDo:[:dependent |
-        dependent == anObject ifFalse:[
-            (dependent updateRequest) ifFalse:[^ false].
-        ]
+	dependent == anObject ifFalse:[
+	    (dependent updateRequest) ifFalse:[^ false].
+	]
     ].
     ^ true
 !
@@ -1773,7 +1768,7 @@
      and anArgument as arguments."
 
     self dependentsDo:[:dependent |
-        dependent update:aParameter with:anArgument from:self
+	dependent update:aParameter with:anArgument from:self
     ]
 !
 
@@ -1842,7 +1837,7 @@
 
     (self dependents includesIdentical:someone)
     ifFalse:[
-        ^ aBlock value.
+	^ aBlock value.
     ].
     self removeDependent:someone.
     ^ aBlock ensure:[ self addDependent:someone ]
@@ -1857,15 +1852,14 @@
     ^ self
 ! !
 
-
 !Object methodsFor:'comparing'!
 
 = anObject
     "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."
+	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
 !
@@ -1874,8 +1868,8 @@
     "return true, if the receiver and the arg are the same object.
      Never redefine this in any class.
      Notice:
-        This method is open coded (inlined) by the compiler(s)
-        - redefining it may not work as expected."
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
 %{  /* NOCONTEXT */
 
@@ -1893,28 +1887,28 @@
 
     myClass := self class.
     myClass isVariable ifTrue:[
-        sz := self basicSize.
-
-        "compare the indexed variables"
-        1 to:sz do:[:i |
-            val := self basicAt:i.
-            val isLiteral ifTrue:[
-                val = (anObject basicAt:i) ifFalse:[^ false].
-            ] ifFalse:[
-                (val deepSameContentsAs:(anObject basicAt:i)) ifFalse:[^ false].
-            ]
-        ]
+	sz := self basicSize.
+
+	"compare the indexed variables"
+	1 to:sz do:[:i |
+	    val := self basicAt:i.
+	    val isLiteral ifTrue:[
+		val = (anObject basicAt:i) ifFalse:[^ false].
+	    ] ifFalse:[
+		(val deepSameContentsAs:(anObject basicAt:i)) ifFalse:[^ false].
+	    ]
+	]
     ].
 
     "compare the instance variables"
     sz := myClass instSize.
     1 to:sz do:[:i |
-        val := self instVarAt:i.
-        val isLiteral ifTrue:[
-            val = (anObject instVarAt:i) ifFalse:[^ false].
-        ] ifFalse:[
-            (val deepSameContentsAs:(anObject instVarAt:i)) ifFalse:[^ false].
-        ]
+	val := self instVarAt:i.
+	val isLiteral ifTrue:[
+	    val = (anObject instVarAt:i) ifFalse:[^ false].
+	] ifFalse:[
+	    (val deepSameContentsAs:(anObject instVarAt:i)) ifFalse:[^ false].
+	]
     ].
 
     ^ true
@@ -1953,25 +1947,25 @@
     static unsigned nextHash = 0;
 
     if (__isNonNilObject(self)) {
-        hash = __GET_HASH(self);
-        if (hash == 0) {
-            /* has no hash yet */
-
-            if (++nextHash > __MAX_HASH__) {
-                nextHash = 1;
-            }
-            hash = nextHash;
-            __SET_HASH(self, hash);
-        }
-
-        /*
-         * now, we got 11 bits for hashing;
-         * make it as large as possible; since most hashers use the returned
-         * key and take it modulo some prime number, this will allow for
-         * better distribution (i.e. bigger empty spaces) in hashed collection.
-         */
-        hash = __MAKE_HASH__(hash);
-        RETURN ( __mkSmallInteger(hash) );
+	hash = __GET_HASH(self);
+	if (hash == 0) {
+	    /* has no hash yet */
+
+	    if (++nextHash > __MAX_HASH__) {
+		nextHash = 1;
+	    }
+	    hash = nextHash;
+	    __SET_HASH(self, hash);
+	}
+
+	/*
+	 * now, we got 11 bits for hashing;
+	 * make it as large as possible; since most hashers use the returned
+	 * key and take it modulo some prime number, this will allow for
+	 * better distribution (i.e. bigger empty spaces) in hashed collection.
+	 */
+	hash = __MAKE_HASH__(hash);
+	RETURN ( __mkSmallInteger(hash) );
     }
 %}.
     ^ 0 "never reached, since redefined in UndefinedObject and SmallInteger"
@@ -1991,53 +1985,53 @@
     static unsigned INT nextClassHash = 0;
 
     if (__isNonNilObject(self)) {
-        /*
-         * my own identityHash
-         */
-        hash1 = __GET_HASH(self);
-        if (hash1 == 0) {
-            /* has no hash yet */
-
-            if (++nextHash > __MAX_HASH__) {
-                nextHash = 1;
-            }
-            hash1 = nextHash;
-            __SET_HASH(self, hash1);
-        }
-        /*
-         * my classes identityHash
-         */
-        o = __qClass(self);
-        hash2 = __GET_HASH(o);
-        if (hash2 == 0) {
-            /* has no hash yet */
-
-            if (++nextClassHash > __MAX_HASH__) {
-                nextClassHash = 1;
-            }
-            hash2 = nextClassHash;
-            __SET_HASH(o, hash2);
-        }
-
-        /*
-         * some bits of my size
-         */
-        sz = __qSize(self);
-
-        /*
-         * now, we got 11 + 11 + 8 bits for hashing;
-         * make it as large as possible; since most hashers use the returned
-         * key and take it modulo some prime number, this will allow for
-         * better distribution (i.e. bigger empty spaces) in hashed collection.
-         */
-        hash = (hash1 << 11) | hash2;           /* 22 bits */
-        hash = (hash << 8) | (sz & 0xFC);       /* 30 bits */
-
-        while ((hash & 0x20000000) == 0) {
-            hash <<= 1;
-        }
-
-        RETURN ( __mkSmallInteger(hash) );
+	/*
+	 * my own identityHash
+	 */
+	hash1 = __GET_HASH(self);
+	if (hash1 == 0) {
+	    /* has no hash yet */
+
+	    if (++nextHash > __MAX_HASH__) {
+		nextHash = 1;
+	    }
+	    hash1 = nextHash;
+	    __SET_HASH(self, hash1);
+	}
+	/*
+	 * my classes identityHash
+	 */
+	o = __qClass(self);
+	hash2 = __GET_HASH(o);
+	if (hash2 == 0) {
+	    /* has no hash yet */
+
+	    if (++nextClassHash > __MAX_HASH__) {
+		nextClassHash = 1;
+	    }
+	    hash2 = nextClassHash;
+	    __SET_HASH(o, hash2);
+	}
+
+	/*
+	 * some bits of my size
+	 */
+	sz = __qSize(self);
+
+	/*
+	 * now, we got 11 + 11 + 8 bits for hashing;
+	 * make it as large as possible; since most hashers use the returned
+	 * key and take it modulo some prime number, this will allow for
+	 * better distribution (i.e. bigger empty spaces) in hashed collection.
+	 */
+	hash = (hash1 << 11) | hash2;           /* 22 bits */
+	hash = (hash << 8) | (sz & 0xFC);       /* 30 bits */
+
+	while ((hash & 0x20000000) == 0) {
+	    hash <<= 1;
+	}
+
+	RETURN ( __mkSmallInteger(hash) );
     }
 %}.
     "never reached, since UndefinedObject and SmallInteger are not hashed upon in binary storage"
@@ -2056,13 +2050,13 @@
 
     myClass := self class.
     myClass isVariable ifTrue:[
-        sz := self basicSize.
-        anObject basicSize >= sz ifFalse:[^ false].
-
-        "compare the indexed variables"
-        1 to:sz do:[:i |
-            (self basicAt:i) == (anObject basicAt:i) ifFalse:[^ false].
-        ]
+	sz := self basicSize.
+	anObject basicSize >= sz ifFalse:[^ false].
+
+	"compare the indexed variables"
+	1 to:sz do:[:i |
+	    (self basicAt:i) == (anObject basicAt:i) ifFalse:[^ false].
+	]
     ].
 
     "compare the instance variables"
@@ -2070,7 +2064,7 @@
     anObject class instSize >= sz ifFalse:[^ false].
 
     1 to:sz do:[:i |
-        (self instVarAt:i) == (anObject instVarAt:i) ifFalse:[^ false].
+	(self instVarAt:i) == (anObject instVarAt:i) ifFalse:[^ false].
     ].
 
     ^ true
@@ -2087,9 +2081,9 @@
 ~= anObject
     "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."
+	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
 !
@@ -2098,8 +2092,8 @@
     "return true, if the receiver and the arg are not the same object.
      Never redefine this in any class.
      Notice:
-        This method is open coded (inlined) by the compiler(s)
-        - redefining it may not work as expected."
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
 %{  /* NOCONTEXT */
     RETURN ( (self == anObject) ? false : true );
@@ -2179,26 +2173,26 @@
 
     myClass := self class.
     myClass isVariable ifTrue:[
-        sz := self basicSize.
-
-        "process the indexed instance variables"
-        1 to:sz do:[:i |
-            t := anObject basicAt:i.
-            aSymbol ~~ #yourself ifTrue:[
-                t := t perform:aSymbol.
-            ].
-            self basicAt:i put:t.
-        ]
+	sz := self basicSize.
+
+	"process the indexed instance variables"
+	1 to:sz do:[:i |
+	    t := anObject basicAt:i.
+	    aSymbol ~~ #yourself ifTrue:[
+		t := t perform:aSymbol.
+	    ].
+	    self basicAt:i put:t.
+	]
     ].
 
     "process the named instance variables"
     sz := myClass instSize.
     1 to:sz do:[:i |
-        t := anObject instVarAt:i.
-        aSymbol ~~ #yourself ifTrue:[
-            t := t perform:aSymbol
-        ].
-        self instVarAt:i put:t
+	t := anObject instVarAt:i.
+	aSymbol ~~ #yourself ifTrue:[
+	    t := t perform:aSymbol
+	].
+	self instVarAt:i put:t
     ].
 
     ^ self
@@ -2216,36 +2210,36 @@
     myInfo := self class instanceVariableOffsets.
     otherInfo := aPrototype class instanceVariableOffsets.
     myInfo keysAndValuesDo:[:name :index | |varIndexAssoc|
-        varIndexAssoc := otherInfo at:name ifAbsent:[].
-        varIndexAssoc notNil ifTrue:[
-            self instVarAt:index put:(aPrototype instVarAt:(varIndexAssoc value))
-        ]
+	varIndexAssoc := otherInfo at:name ifAbsent:[].
+	varIndexAssoc notNil ifTrue:[
+	    self instVarAt:index put:(aPrototype instVarAt:(varIndexAssoc value))
+	]
     ].
     self isVariable ifTrue:[
-        1 to:(self basicSize min:aPrototype basicSize) do:[:index |
-            self basicAt:index put:(aPrototype basicAt:index)
-        ].
+	1 to:(self basicSize min:aPrototype basicSize) do:[:index |
+	    self basicAt:index put:(aPrototype basicAt:index)
+	].
     ].
 
     "
      Class withoutUpdatingChangesDo:[
-         Point subclass:#Point3D
-           instanceVariableNames:'z'
-           classVariableNames:''
-           poolDictionaries:''
-           category:'testing'.
-         (Point3D new cloneInstanceVariablesFrom:1@2) inspect.
+	 Point subclass:#Point3D
+	   instanceVariableNames:'z'
+	   classVariableNames:''
+	   poolDictionaries:''
+	   category:'testing'.
+	 (Point3D new cloneInstanceVariablesFrom:1@2) inspect.
      ]
     "
 
     "
      Class withoutUpdatingChangesDo:[
-         Point variableSubclass:#Point3D
-           instanceVariableNames:'z'
-           classVariableNames:''
-           poolDictionaries:''
-           category:'testing'.
-         ((Point3D new:2) cloneInstanceVariablesFrom:#(1 2 3)) inspect.
+	 Point variableSubclass:#Point3D
+	   instanceVariableNames:'z'
+	   classVariableNames:''
+	   poolDictionaries:''
+	   category:'testing'.
+	 ((Point3D new:2) cloneInstanceVariablesFrom:#(1 2 3)) inspect.
      ]
     "
 
@@ -2253,19 +2247,19 @@
      |someObject|
 
      Class withoutUpdatingChangesDo:[
-         Object subclass:#TestClass1
-           instanceVariableNames:'foo bar'
-           classVariableNames:''
-           poolDictionaries:''
-           category:'testing'.
-         someObject := TestClass1 new.
-         someObject instVarAt:1 put:'foo'; instVarAt:2 put:'bar'.
-         Object subclass:#TestClass2
-           instanceVariableNames:'bar foo'
-           classVariableNames:''
-           poolDictionaries:''
-           category:'testing'.
-         (TestClass2 new cloneInstanceVariablesFrom:someObject) inspect.
+	 Object subclass:#TestClass1
+	   instanceVariableNames:'foo bar'
+	   classVariableNames:''
+	   poolDictionaries:''
+	   category:'testing'.
+	 someObject := TestClass1 new.
+	 someObject instVarAt:1 put:'foo'; instVarAt:2 put:'bar'.
+	 Object subclass:#TestClass2
+	   instanceVariableNames:'bar foo'
+	   classVariableNames:''
+	   poolDictionaries:''
+	   category:'testing'.
+	 (TestClass2 new cloneInstanceVariablesFrom:someObject) inspect.
      ]
     "
 
@@ -2295,8 +2289,8 @@
 copyToLevel:level
     "a controlled deepCopy, where the number of levels can be specified.
      Notice:
-         This method DOES NOT handle cycles/self-refs and does NOT preserve object identity;
-         i.e. identical references in the source are copied multiple times into the copy."
+	 This method DOES NOT handle cycles/self-refs and does NOT preserve object identity;
+	 i.e. identical references in the source are copied multiple times into the copy."
 
     |newObject class index|
 
@@ -2306,16 +2300,16 @@
     newObject := self clone.
     newObject == self ifTrue: [^ self].
     class isVariable ifTrue:[
-        index := self basicSize.
-        [index > 0] whileTrue:[
-            newObject basicAt: index put: ((self basicAt: index) copyToLevel:(level-1)).
-            index := index - 1
-        ]
+	index := self basicSize.
+	[index > 0] whileTrue:[
+	    newObject basicAt: index put: ((self basicAt: index) copyToLevel:(level-1)).
+	    index := index - 1
+	]
     ].
     index := class instSize.
     [index > 0] whileTrue:[
-        newObject instVarAt: index put: ((self instVarAt: index) copyToLevel:(level-1)).
-        index := index - 1
+	newObject instVarAt: index put: ((self instVarAt: index) copyToLevel:(level-1)).
+	index := index - 1
     ].
     ^ newObject
 
@@ -2323,24 +2317,24 @@
      |a b|
 
      a := #(
-            '1.1'
-            '1.2'
-            '1.3'
-            (
-                '1.41'
-                '1.42'
-                '1.43'
-                    (
-                        '1.441'
-                        '1.442'
-                        '1.443'
-                        ( '1.4441' '1.4442' '1.4443' )
-                        '1.445'
-                    )
-                '1.45'
-            )
-            '1.5'
-           ).
+	    '1.1'
+	    '1.2'
+	    '1.3'
+	    (
+		'1.41'
+		'1.42'
+		'1.43'
+		    (
+			'1.441'
+			'1.442'
+			'1.443'
+			( '1.4441' '1.4442' '1.4443' )
+			'1.445'
+		    )
+		'1.45'
+	    )
+	    '1.5'
+	   ).
 
       b := a copyToLevel:1.
       self assert: ( (a at:1) == (b at:1) ).
@@ -2440,11 +2434,11 @@
 "/    ].
 
     myClass isVariable ifTrue:[
-        sz := self basicSize.
-        aCopy := myClass basicNew:sz.
+	sz := self basicSize.
+	aCopy := myClass basicNew:sz.
     ] ifFalse:[
-        sz := 0.
-        aCopy := myClass basicNew
+	sz := 0.
+	aCopy := myClass basicNew
     ].
     aCopy setHashFrom:self.
     aDictionary at:self put:aCopy.
@@ -2453,24 +2447,24 @@
      copy indexed instvars - if any
     "
     sz ~~ 0 ifTrue:[
-        myClass isBits ifTrue:[
-            "block-copy indexed instvars"
-            aCopy replaceFrom:1 to:sz with:self startingAt:1
-        ] ifFalse:[
-            "individual deep copy the indexed variables"
-            1 to:sz do:[:i |
-                iOrig := self basicAt:i.
-                iOrig notNil ifTrue:[
-                    "/ used to be dict-includesKey-ifTrue[dict-at:],
-                    "/ changed to use dict-at:ifAbsent:, to avoid double lookup in dictionary
-                    iCopy := aDictionary at:iOrig ifAbsent:nil.
-                    iCopy isNil ifTrue:[
-                        iCopy := iOrig deepCopyUsing:aDictionary postCopySelector:postCopySelector
-                    ].
-                    aCopy basicAt:i put:iCopy
-                ]
-            ]
-        ]
+	myClass isBits ifTrue:[
+	    "block-copy indexed instvars"
+	    aCopy replaceFrom:1 to:sz with:self startingAt:1
+	] ifFalse:[
+	    "individual deep copy the indexed variables"
+	    1 to:sz do:[:i |
+		iOrig := self basicAt:i.
+		iOrig notNil ifTrue:[
+		    "/ used to be dict-includesKey-ifTrue[dict-at:],
+		    "/ changed to use dict-at:ifAbsent:, to avoid double lookup in dictionary
+		    iCopy := aDictionary at:iOrig ifAbsent:nil.
+		    iCopy isNil ifTrue:[
+			iCopy := iOrig deepCopyUsing:aDictionary postCopySelector:postCopySelector
+		    ].
+		    aCopy basicAt:i put:iCopy
+		]
+	    ]
+	]
     ].
 
     "
@@ -2478,16 +2472,16 @@
     "
     sz := myClass instSize.
     1 to:sz do:[:i |
-        (self skipInstvarIndexInDeepCopy:i) ifFalse:[
-            iOrig := self instVarAt:i.
-            iOrig notNil ifTrue:[
-                iCopy := aDictionary at:iOrig ifAbsent:nil.
-                iCopy isNil ifTrue:[
-                    iCopy := iOrig deepCopyUsing:aDictionary postCopySelector:postCopySelector
-                ].
-                aCopy instVarAt:i put:iCopy
-            ]
-        ]
+	(self skipInstvarIndexInDeepCopy:i) ifFalse:[
+	    iOrig := self instVarAt:i.
+	    iOrig notNil ifTrue:[
+		iCopy := aDictionary at:iOrig ifAbsent:nil.
+		iCopy isNil ifTrue:[
+		    iCopy := iOrig deepCopyUsing:aDictionary postCopySelector:postCopySelector
+		].
+		aCopy instVarAt:i put:iCopy
+	    ]
+	]
     ].
     aCopy perform:postCopySelector with:self "ifNotUnderstood:[]".
     ^ aCopy
@@ -2523,9 +2517,9 @@
     REGISTER unsigned h;
 
     if (__isNonNilObject(self) && __isNonNilObject(anObject)) {
-        h = __GET_HASH(anObject);
-        __SET_HASH(self, h);
-        RETURN (self);
+	h = __GET_HASH(anObject);
+	__SET_HASH(self, h);
+	RETURN (self);
     }
 %}.
     self primitiveFailed    "neither receiver not arg may be nil or SmallInteger"
@@ -2550,54 +2544,54 @@
      */
     if (((flags & ~ARRAYMASK) == 0)
      && ((flags & ARRAYMASK) != WKPOINTERARRAY)) {
-        sz = __qSize(self);
-        __PROTECT__(self);
-        __qNew(theCopy, sz);    /* OBJECT ALLOCATION */
-        __UNPROTECT__(self);
-        if (theCopy) {
-            cls = __qClass(self);
-            spc = __qSpace(theCopy);
-
-            theCopy->o_class = cls; __STORE_SPC(theCopy, cls, spc);
-
-            sz = sz - OHDR_SIZE;
-            if (sz) {
-                char *src, *dst;
-
-                src = (char *)(__InstPtr(self)->i_instvars);
-                dst = (char *)(__InstPtr(theCopy)->i_instvars);
+	sz = __qSize(self);
+	__PROTECT__(self);
+	__qNew(theCopy, sz);    /* OBJECT ALLOCATION */
+	__UNPROTECT__(self);
+	if (theCopy) {
+	    cls = __qClass(self);
+	    spc = __qSpace(theCopy);
+
+	    theCopy->o_class = cls; __STORE_SPC(theCopy, cls, spc);
+
+	    sz = sz - OHDR_SIZE;
+	    if (sz) {
+		char *src, *dst;
+
+		src = (char *)(__InstPtr(self)->i_instvars);
+		dst = (char *)(__InstPtr(theCopy)->i_instvars);
 #ifdef bcopy4
-                {
-                    /* care for odd-number of longs */
-                    int nW = sz >> 2;
-
-                    if (sz & 3) {
-                        nW++;
-                    }
-
-                    bcopy4(src, dst, nW);
-                }
+		{
+		    /* care for odd-number of longs */
+		    int nW = sz >> 2;
+
+		    if (sz & 3) {
+			nW++;
+		    }
+
+		    bcopy4(src, dst, nW);
+		}
 #else
-                bcopy(src, dst, sz);
+		bcopy(src, dst, sz);
 #endif
 
-                flags &= ARRAYMASK;
-                if (flags == POINTERARRAY) {
-                    ninsts = __BYTES2OBJS__(sz);
-                } else {
-                    ninsts = __intVal(__ClassInstPtr(cls)->c_ninstvars);
-                }
-                if (ninsts) {
-                    do {
-                        OBJ el;
-
-                        el = __InstPtr(theCopy)->i_instvars[ninsts-1];
-                        __STORE_SPC(theCopy, el, spc);
-                    } while (--ninsts);
-                }
-            }
-            RETURN (theCopy);
-        }
+		flags &= ARRAYMASK;
+		if (flags == POINTERARRAY) {
+		    ninsts = __BYTES2OBJS__(sz);
+		} else {
+		    ninsts = __intVal(__ClassInstPtr(cls)->c_ninstvars);
+		}
+		if (ninsts) {
+		    do {
+			OBJ el;
+
+			el = __InstPtr(theCopy)->i_instvars[ninsts-1];
+			__STORE_SPC(theCopy, el, spc);
+		    } while (--ninsts);
+		}
+	    }
+	    RETURN (theCopy);
+	}
     }
 %}.
     "/ fallBack for special objects & memoryAllocation failure case
@@ -2617,9 +2611,9 @@
     |myClass aCopy|
 
     (myClass := self class) isVariable ifTrue:[
-        aCopy := myClass basicNew:(self basicSize).
+	aCopy := myClass basicNew:(self basicSize).
     ] ifFalse:[
-        aCopy := myClass basicNew
+	aCopy := myClass basicNew
     ].
 
     "copy the instance variables"
@@ -2652,9 +2646,9 @@
     |myClass aCopy|
 
     (myClass := self class) isVariable ifTrue:[
-        aCopy := myClass basicNew:(self basicSize).
+	aCopy := myClass basicNew:(self basicSize).
     ] ifFalse:[
-        aCopy := myClass basicNew
+	aCopy := myClass basicNew
     ].
 
     "copy the instance variables"
@@ -2676,11 +2670,11 @@
 
     "/ could still be a block or false.
     (aBooleanOrBlock value) ifFalse:[
-        AssertionFailedError
-            raiseRequestWith:self
-            errorString:('Assertion failed in ', 
-                         thisContext sender printString,
-                         '[', thisContext sender lineNumber printString,']')
+	AssertionFailedError
+	    raiseRequestWith:self
+	    errorString:('Assertion failed in ',
+			 thisContext sender printString,
+			 '[', thisContext sender lineNumber printString,']')
     ].
 
     "
@@ -2701,9 +2695,9 @@
     (Smalltalk at:#IgnoreAssertion ifAbsent:false) == true ifTrue:[^ self].
 
     (aBooleanOrBlock value) ifFalse:[
-        AssertionFailedError
-            raiseRequestWith:self
-            errorString:(messageIfFailing, ' {',thisContext sender printString,' }')
+	AssertionFailedError
+	    raiseRequestWith:self
+	    errorString:(messageIfFailing, ' {',thisContext sender printString,' }')
     ].
 
     "
@@ -2718,12 +2712,12 @@
      this method should NOT be redefined in subclasses."
 
     Inspector isNil ifTrue:[
-        "
-         for systems without GUI
-        "
-        self warn:'No Inspector defined (Inspector is nil).'
+	"
+	 for systems without GUI
+	"
+	self warn:'No Inspector defined (Inspector is nil).'
     ] ifFalse:[
-        Inspector openOn:self
+	Inspector openOn:self
     ]
 
     "Modified: 18.5.1996 / 15:43:25 / cg"
@@ -2743,9 +2737,9 @@
 
     "/ dont send #breakPoint:info: here - ask cg why.
     (self isBreakPointEnabled:someKey) ifTrue:[
-        ^ HaltSignal
-            raiseRequestWith:someKey
-            errorString:('Breakpoint encountered: %1' bindWith:someKey)
+	^ HaltSignal
+	    raiseRequestWith:someKey
+	    errorString:('Breakpoint encountered: %1' bindWith:someKey)
     ].
 
     "
@@ -2773,9 +2767,9 @@
     <resource: #skipInDebuggersWalkBack>
 
     (self isBreakPointEnabled:someKey) ifTrue:[
-        ^ HaltSignal
-            raiseRequestWith:someKey
-            errorString:(infoString bindWith:someKey)
+	^ HaltSignal
+	    raiseRequestWith:someKey
+	    errorString:(infoString bindWith:someKey)
     ].
 !
 
@@ -2805,7 +2799,7 @@
     <resource: #skipInDebuggersWalkBack>
 
     (self isBreakPointEnabled:someKey) ifTrue:[
-        aBlock value
+	aBlock value
     ].
 
     "
@@ -2826,10 +2820,10 @@
     "{ Pragma: +optSpace }"
 
     EnabledBreakPoints notNil ifTrue:[
-        EnabledBreakPoints remove:someKey ifAbsent:[].
-        EnabledBreakPoints isEmpty ifTrue:[
-            EnabledBreakPoints := nil
-        ].
+	EnabledBreakPoints remove:someKey ifAbsent:[].
+	EnabledBreakPoints isEmpty ifTrue:[
+	    EnabledBreakPoints := nil
+	].
     ].
 
     "
@@ -2846,7 +2840,7 @@
     "{ Pragma: +optSpace }"
 
     EnabledBreakPoints isNil ifTrue:[
-        EnabledBreakPoints := Set new.
+	EnabledBreakPoints := Set new.
     ].
     EnabledBreakPoints add:someKey.
 
@@ -2888,15 +2882,6 @@
     "Modified: / 18-11-2010 / 11:22:16 / cg"
 !
 
-inspectorClass
-    "{ Pragma: +optSpace }"
-
-    "return the class to use for inspect.
-     Can (should) be redefined in classes for which a better inspector is available"
-
-    ^ Inspector
-!
-
 isBreakPointEnabled:someKey
     "{ Pragma: +optSpace }"
 
@@ -2905,7 +2890,7 @@
 "/    something = OperatingSystem getLoginName ifTrue:[^ true].
 "/    something = 'testThis' ifTrue:[^ true].
     EncounteredBreakPoints notNil ifTrue:[
-        EncounteredBreakPoints add:someKey
+	EncounteredBreakPoints add:someKey
     ].
 
     ^ (EnabledBreakPoints notNil and:[ EnabledBreakPoints includes:someKey ])
@@ -2936,18 +2921,18 @@
     "for compatibility & debugging support:
      check if the receiver isKindOf:aClass and raise an error if not.
      Notice:
-        it is VERY questionable, if it makes sense to add manual
-        type checks to a dynamically typed language like smalltalk.
-        It will, at least, slow down performance,
-        make your code less reusable and clutter your code with stupid sends
-        of this selector. Also, read the comment in isKindOf:, regarding the
-        use of isXXX check methods.
+	it is VERY questionable, if it makes sense to add manual
+	type checks to a dynamically typed language like smalltalk.
+	It will, at least, slow down performance,
+	make your code less reusable and clutter your code with stupid sends
+	of this selector. Also, read the comment in isKindOf:, regarding the
+	use of isXXX check methods.
      You see: The author does not like this at all ..."
 
     <resource: #skipInDebuggersWalkBack>
 
     (self isKindOf:aClass) ifFalse:[
-        self error:'argument is not of expected type'
+	self error:'argument is not of expected type'
     ]
 !
 
@@ -2995,7 +2980,7 @@
     ('         called from ' , sender sender printString) infoPrintCR.
     ].
     message notNil ifTrue:[
-        '------>  ' infoPrint. message infoPrintCR
+	'------>  ' infoPrint. message infoPrintCR
     ]
 
     "
@@ -3040,8 +3025,8 @@
     |spec sender|
 
     Smalltalk isSmalltalkDevelopmentSystem ifFalse:[
-        "ignore in production systems"
-        ^ self.
+	"ignore in production systems"
+	^ self.
     ].
 
     spec := aContext methodPrintString.
@@ -3050,14 +3035,14 @@
     ('         And may not be present in future ST/X versions.') infoPrintCR.
     ('         called from ' , sender printString) infoPrintCR.
     (sender selector startsWith:'perform:') ifTrue:[
-        sender := sender sender.
-        (sender selector startsWith:'perform:') ifTrue:[
-            sender := sender sender.
-        ].
-        ('         called from ' , sender printString) infoPrintCR.
+	sender := sender sender.
+	(sender selector startsWith:'perform:') ifTrue:[
+	    sender := sender sender.
+	].
+	('         called from ' , sender printString) infoPrintCR.
     ].
     message notNil ifTrue:[
-        '------>  ' infoPrint. message infoPrintCR
+	'------>  ' infoPrint. message infoPrintCR
     ]
 
     "
@@ -3078,9 +3063,9 @@
     "
      example:
 
-        ...
-        self todo.
-        ...
+	...
+	self todo.
+	...
     "
 !
 
@@ -3095,11 +3080,11 @@
     "
      example:
 
-        ...
-        self todo:[
-            code which needs more work ...
-        ].
-        ...
+	...
+	self todo:[
+	    code which needs more work ...
+	].
+	...
     "
 
     "Created: / 25-05-2007 / 21:34:39 / cg"
@@ -3120,35 +3105,35 @@
 
     wasBlocked := OperatingSystem blockInterrupts.
     [
-        |deps dep|
-
-        deps := self dependents.
-
-        "/ to save a fair amount of memory in case of
-        "/ many dependencies, we store a single dependent in
-        "/ a WeakArray, and switch to a WeakSet if more dependents are
-        "/ added.
-
-        (deps isNil or:[deps size == 0]) ifTrue:[
-            self dependents:(WeakArray with:anObject)
-        ] ifFalse:[
-            deps class == WeakArray ifTrue:[
-                dep := deps at:1.
-                dep ~~ anObject ifTrue:[
-                    (dep isNil or:[dep == 0]) ifTrue:[
-                        deps at:1 put:anObject
-                    ] ifFalse:[
-                        self dependents:(WeakIdentitySet with:dep with:anObject)
-                    ]
-                ]
-            ] ifFalse:[
-                deps add:anObject
-            ]
-        ]
+	|deps dep|
+
+	deps := self dependents.
+
+	"/ to save a fair amount of memory in case of
+	"/ many dependencies, we store a single dependent in
+	"/ a WeakArray, and switch to a WeakSet if more dependents are
+	"/ added.
+
+	(deps isNil or:[deps size == 0]) ifTrue:[
+	    self dependents:(WeakArray with:anObject)
+	] ifFalse:[
+	    deps class == WeakArray ifTrue:[
+		dep := deps at:1.
+		dep ~~ anObject ifTrue:[
+		    (dep isNil or:[dep == 0]) ifTrue:[
+			deps at:1 put:anObject
+		    ] ifFalse:[
+			self dependents:(WeakIdentitySet with:dep with:anObject)
+		    ]
+		]
+	    ] ifFalse:[
+		deps add:anObject
+	    ]
+	]
     ] ensure:[
-        wasBlocked ifFalse:[
-            OperatingSystem unblockInterrupts
-        ]
+	wasBlocked ifFalse:[
+	    OperatingSystem unblockInterrupts
+	]
     ]
 
     "Modified: / 27.10.1997 / 19:35:52 / cg"
@@ -3170,10 +3155,10 @@
 
     self breakDependents.
     1 to:self class instSize do:[:idx |
-        (self instVarAt:idx) breakDependentsRecursively.
+	(self instVarAt:idx) breakDependentsRecursively.
     ].
     1 to:self basicSize do:[:idx |
-        (self basicAt:idx) breakDependentsRecursively.
+	(self basicAt:idx) breakDependentsRecursively.
     ]
 !
 
@@ -3188,7 +3173,7 @@
     |deps|
 
     (deps := Dependencies at:self ifAbsent:nil) isNil ifTrue:[
-        ^ #().
+	^ #().
     ].
     ^ deps
 
@@ -3207,24 +3192,24 @@
     "/ faster execution (and to avoid creation of garbage blocks).
 
     (OperatingSystem blockInterrupts) ifTrue:[
-        "/ the common case - already blocked
-
-        (aCollection isNil or:[aCollection isEmpty]) ifTrue:[
-            Dependencies removeKey:self ifAbsent:nil
-        ] ifFalse:[
-            Dependencies at:self put:aCollection
-        ].
-        ^ self
+	"/ the common case - already blocked
+
+	(aCollection isNil or:[aCollection isEmpty]) ifTrue:[
+	    Dependencies removeKey:self ifAbsent:nil
+	] ifFalse:[
+	    Dependencies at:self put:aCollection
+	].
+	^ self
     ].
 
     [
-        (aCollection isNil or:[aCollection isEmpty]) ifTrue:[
-            Dependencies removeKey:self ifAbsent:nil
-        ] ifFalse:[
-            Dependencies at:self put:aCollection
-        ].
+	(aCollection isNil or:[aCollection isEmpty]) ifTrue:[
+	    Dependencies removeKey:self ifAbsent:nil
+	] ifFalse:[
+	    Dependencies at:self put:aCollection
+	].
     ] ensure:[
-        OperatingSystem unblockInterrupts
+	OperatingSystem unblockInterrupts
     ]
 
     "Modified: 30.1.1997 / 21:22:10 / cg"
@@ -3237,15 +3222,15 @@
 
     deps := self dependents.
     deps size ~~ 0 ifTrue:[
-        deps do:[:d |
-                    (d notNil and:[d ~~ 0]) ifTrue:[
-                        aBlock value:d
-                    ]
-                ]
+	deps do:[:d |
+		    (d notNil and:[d ~~ 0]) ifTrue:[
+			aBlock value:d
+		    ]
+		]
     ].
     nwDeps := self nonWeakDependents.
     (nwDeps ~~ deps and:[nwDeps size ~~ 0]) ifTrue:[
-        nwDeps do:aBlock
+	nwDeps do:aBlock
     ].
 
     "Modified: / 30.1.1998 / 14:03:40 / cg"
@@ -3278,43 +3263,43 @@
 
     wasBlocked := OperatingSystem blockInterrupts.
     [
-        |deps n d|
-
-        deps := self dependents.
-        deps size ~~ 0 ifTrue:[
-
-            "/ to save a fair amount of memory in case of
-            "/ many dependencies, we store a single dependent in
-            "/ a WeakArray, and switch to a WeakSet if more dependents are
-            "/ added. Here we have to do the inverse ...
-
-            ((deps class == WeakArray) or:[deps class == Array]) ifTrue:[
-                ((d := deps at:1) == anObject
-                or:[d isNil
-                or:[d == 0]]) ifTrue:[
-                    self dependents:nil
-                ]
-            ] ifFalse:[
-                deps remove:anObject ifAbsent:[].
-                (n := deps size) == 0 ifTrue:[
-                    self dependents:nil
-                ] ifFalse:[
-                    n == 1 ifTrue:[
-                        d := deps firstIfEmpty:nil.
-                        d notNil ifTrue:[
-                            deps := (deps isWeakCollection ifTrue:WeakArray ifFalse:Array) with:d
-                        ] ifFalse:[
-                            deps := nil
-                        ].
-                        self dependents:deps.
-                    ]
-                ]
-            ]
-        ]
+	|deps n d|
+
+	deps := self dependents.
+	deps size ~~ 0 ifTrue:[
+
+	    "/ to save a fair amount of memory in case of
+	    "/ many dependencies, we store a single dependent in
+	    "/ a WeakArray, and switch to a WeakSet if more dependents are
+	    "/ added. Here we have to do the inverse ...
+
+	    ((deps class == WeakArray) or:[deps class == Array]) ifTrue:[
+		((d := deps at:1) == anObject
+		or:[d isNil
+		or:[d == 0]]) ifTrue:[
+		    self dependents:nil
+		]
+	    ] ifFalse:[
+		deps remove:anObject ifAbsent:[].
+		(n := deps size) == 0 ifTrue:[
+		    self dependents:nil
+		] ifFalse:[
+		    n == 1 ifTrue:[
+			d := deps firstIfEmpty:nil.
+			d notNil ifTrue:[
+			    deps := (deps isWeakCollection ifTrue:WeakArray ifFalse:Array) with:d
+			] ifFalse:[
+			    deps := nil
+			].
+			self dependents:deps.
+		    ]
+		]
+	    ]
+	]
     ] ensure:[
-        wasBlocked ifFalse:[
-            OperatingSystem unblockInterrupts
-        ]
+	wasBlocked ifFalse:[
+	    OperatingSystem unblockInterrupts
+	]
     ]
 
     "Modified: / 26.1.1998 / 19:51:50 / cg"
@@ -3337,37 +3322,37 @@
 
     wasBlocked := OperatingSystem blockInterrupts.
     [
-        |deps dep|
-
-        deps := self nonWeakDependents.
-
-        "/ to save a fair amount of memory in case of
-        "/ many dependencies, we store a single dependent in
-        "/ an Array, and switch to a Set if more dependents are
-        "/ added.
-
-        deps size == 0 ifTrue:[
-            anObject notNil ifTrue:[
-                self nonWeakDependents:(Array with:anObject).
-            ] ifFalse:[
-                "adding nil causes problems when adding the next one
-                 (see below: trying to add nil to IdentitySet)"
+	|deps dep|
+
+	deps := self nonWeakDependents.
+
+	"/ to save a fair amount of memory in case of
+	"/ many dependencies, we store a single dependent in
+	"/ an Array, and switch to a Set if more dependents are
+	"/ added.
+
+	deps size == 0 ifTrue:[
+	    anObject notNil ifTrue:[
+		self nonWeakDependents:(Array with:anObject).
+	    ] ifFalse:[
+		"adding nil causes problems when adding the next one
+		 (see below: trying to add nil to IdentitySet)"
 "/                self halt:'try to add nil to list of dependents'.
-            ].
-        ] ifFalse:[
-            deps class == Array ifTrue:[
-                dep := deps at:1.
-                dep ~~ anObject ifTrue:[
-                    self nonWeakDependents:(IdentitySet with:dep with:anObject)
-                ]
-            ] ifFalse:[
-                deps add:anObject
-            ]
-        ]
+	    ].
+	] ifFalse:[
+	    deps class == Array ifTrue:[
+		dep := deps at:1.
+		dep ~~ anObject ifTrue:[
+		    self nonWeakDependents:(IdentitySet with:dep with:anObject)
+		]
+	    ] ifFalse:[
+		deps add:anObject
+	    ]
+	]
     ] ensure:[
-        wasBlocked ifFalse:[
-            OperatingSystem unblockInterrupts
-        ]
+	wasBlocked ifFalse:[
+	    OperatingSystem unblockInterrupts
+	]
     ]
 
     "Created: / 19.4.1996 / 10:54:08 / cg"
@@ -3390,11 +3375,11 @@
      This is a private helper for directed dependencies."
 
     [
-        (aCollection isNil or:[aCollection isEmpty]) ifTrue:[
-            NonWeakDependencies removeKey:self ifAbsent:nil
-        ] ifFalse:[
-            NonWeakDependencies at:self put:aCollection
-        ]
+	(aCollection isNil or:[aCollection isEmpty]) ifTrue:[
+	    NonWeakDependencies removeKey:self ifAbsent:nil
+	] ifFalse:[
+	    NonWeakDependencies at:self put:aCollection
+	]
     ] valueUninterruptably
 
     "Created: 19.4.1996 / 11:07:47 / cg"
@@ -3413,29 +3398,29 @@
 
     wasBlocked := OperatingSystem blockInterrupts.
     [
-        |deps n|
-
-        deps := self nonWeakDependents.
-        deps size ~~ 0 ifTrue:[
-            deps class == Array ifTrue:[
-                (deps at:1) == anObject ifTrue:[
-                    self nonWeakDependents:nil
-                ]
-            ] ifFalse:[
-                deps remove:anObject ifAbsent:[].
-                (n := deps size) == 0 ifTrue:[
-                    self nonWeakDependents:nil
-                ] ifFalse:[
-                    n == 1 ifTrue:[
-                        self nonWeakDependents:(Array with:(deps first))
-                    ]
-                ]
-            ]
-        ]
+	|deps n|
+
+	deps := self nonWeakDependents.
+	deps size ~~ 0 ifTrue:[
+	    deps class == Array ifTrue:[
+		(deps at:1) == anObject ifTrue:[
+		    self nonWeakDependents:nil
+		]
+	    ] ifFalse:[
+		deps remove:anObject ifAbsent:[].
+		(n := deps size) == 0 ifTrue:[
+		    self nonWeakDependents:nil
+		] ifFalse:[
+		    n == 1 ifTrue:[
+			self nonWeakDependents:(Array with:(deps first))
+		    ]
+		]
+	    ]
+	]
     ] ensure:[
-        wasBlocked ifFalse:[
-            OperatingSystem unblockInterrupts
-        ]
+	wasBlocked ifFalse:[
+	    OperatingSystem unblockInterrupts
+	]
     ]
 
     "Created: / 19.4.1996 / 11:44:44 / cg"
@@ -3487,8 +3472,8 @@
     "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
     "/ ST/X (and some old ST80's) mean: draw-yourself on a GC.
     (aGCOrStream isStream or:[aGCOrStream == Transcript]) ifTrue:[
-        self printOn:aGCOrStream.
-        ^ self
+	self printOn:aGCOrStream.
+	^ self
     ].
     ^ self displayOn:aGCOrStream x:0 y:0.
 
@@ -3524,9 +3509,9 @@
     s := self displayString.
     yBaseline := y "+ aGc font ascent".
     opaque ifTrue:[
-        aGc displayOpaqueString:s x:x y:yBaseline.
+	aGc displayOpaqueString:s x:x y:yBaseline.
     ] ifFalse:[
-        aGc displayString:s x:x y:yBaseline.
+	aGc displayString:s x:x y:yBaseline.
     ].
 
     "Modified: 29.5.1996 / 16:29:38 / cg"
@@ -3707,22 +3692,22 @@
     stop := aSpecArray size.
 
     2 to:stop by:2 do:[:i|
-        sel := aSpecArray at:i.
-        litVal := aSpecArray at:i + 1.
-
-        (self respondsTo:sel) ifTrue:[
-            val := litVal decodeAsLiteralArray.
-            self perform:sel with:val
-        ] ifFalse:[
-            Transcript show:self class name; show:': unhandled literalArrayEncoding attribute: '.
-            Transcript showCR:sel.
-
-            "/ thats a debug halt,
-            "/ it should probably be removed (to simply ignore unhandled attributes)...
-            "/ for now, it is left in, in order to easily find incompatibilities between
-            "/ VW and ST/X.
-            self halt:('Unrecognized attribute in spec: #', sel).  "/ value is:   val  / litVal.
-        ]
+	sel := aSpecArray at:i.
+	litVal := aSpecArray at:i + 1.
+
+	(self respondsTo:sel) ifTrue:[
+	    val := litVal decodeAsLiteralArray.
+	    self perform:sel with:val
+	] ifFalse:[
+	    Transcript show:self class name; show:': unhandled literalArrayEncoding attribute: '.
+	    Transcript showCR:sel.
+
+	    "/ thats a debug halt,
+	    "/ it should probably be removed (to simply ignore unhandled attributes)...
+	    "/ for now, it is left in, in order to easily find incompatibilities between
+	    "/ VW and ST/X.
+	    self halt:('Unrecognized attribute in spec: #', sel).  "/ value is:   val  / litVal.
+	]
     ]
 !
 
@@ -3735,7 +3720,7 @@
     |names encoding cls skipped slots|
 
     self isLiteral ifTrue:[
-        ^ self
+	^ self
     ].
 
     slots    := self literalArrayEncodingSlotOrder.
@@ -3746,22 +3731,22 @@
     encoding add:cls name.
 
     slots do:[:instSlot |
-        |value nm|
-
-        nm := names at:instSlot.
-        (skipped includes:nm) ifFalse:[
-            (value := self instVarAt:instSlot) notNil ifTrue:[
-                encoding add:(nm , ':') asSymbol.
-                encoding add:value literalArrayEncoding
-            ]
-        ]
+	|value nm|
+
+	nm := names at:instSlot.
+	(skipped includes:nm) ifFalse:[
+	    (value := self instVarAt:instSlot) notNil ifTrue:[
+		encoding add:(nm , ':') asSymbol.
+		encoding add:value literalArrayEncoding
+	    ]
+	]
     ].
     ^ encoding asArray
 
     "
-        (1 -> 2) literalArrayEncoding
-        DebugView menuSpec decodeAsLiteralArray literalArrayEncoding  =
-           DebugView menuSpec
+	(1 -> 2) literalArrayEncoding
+	DebugView menuSpec decodeAsLiteralArray literalArrayEncoding  =
+	   DebugView menuSpec
     "
 !
 
@@ -3817,34 +3802,34 @@
     (Processor isNil
     or:[Processor activeProcessIsSystemProcess
     or:[Smalltalk isInitialized not]]) ifTrue:[
-        ^ MiniDebugger
+	^ MiniDebugger
     ].
     (Screen isNil or:[Screen default isNil or:[Screen default isOpen not]]) ifTrue:[
-        Debugger isNil ifTrue:[^ nil].
-        ^ MiniDebugger
+	Debugger isNil ifTrue:[^ nil].
+	^ MiniDebugger
     ].
 
     context := thisContext.
     context := context findNextContextWithSelector:aSelector or:nil or:nil.
     [context notNil] whileTrue:[
-        ((context receiver class == Debugger)
-         and:[context selector == aSelector]) ifTrue:[
-            "we are already in some Debugger"
-            (Debugger == MiniDebugger) ifTrue:[
-                "we are already in the MiniDebugger"
-                ErrorRecursion ifFalse:[
-                    Smalltalk fatalAbort:'recursive error ...'
-                ]
-            ].
-            MiniDebugger isNil ifTrue:[
-                Smalltalk fatalAbort:'no debugger'
-            ].
-
-            "ok, an error occured while in the graphical debugger;
-             lets try MiniDebugger"
-            ^ MiniDebugger
-        ].
-        context := context findNextContextWithSelector:aSelector or:nil or:nil.
+	((context receiver class == Debugger)
+	 and:[context selector == aSelector]) ifTrue:[
+	    "we are already in some Debugger"
+	    (Debugger == MiniDebugger) ifTrue:[
+		"we are already in the MiniDebugger"
+		ErrorRecursion ifFalse:[
+		    Smalltalk fatalAbort:'recursive error ...'
+		]
+	    ].
+	    MiniDebugger isNil ifTrue:[
+		Smalltalk fatalAbort:'no debugger'
+	    ].
+
+	    "ok, an error occured while in the graphical debugger;
+	     lets try MiniDebugger"
+	    ^ MiniDebugger
+	].
+	context := context findNextContextWithSelector:aSelector or:nil or:nil.
     ].
     "not within Debugger - no problem"
     ^ Debugger
@@ -3861,8 +3846,8 @@
     <resource: #skipInDebuggersWalkBack>
 
     ^ VMInternalError
-          raiseWith:someReceiver
-          errorString:('bad class in send of #' , aMessage selector)
+	  raiseWith:someReceiver
+	  errorString:('bad class in send of #' , aMessage selector)
 
     "Modified: 23.1.1997 / 00:05:39 / cg"
 !
@@ -3999,7 +3984,7 @@
     <resource: #skipInDebuggersWalkBack>
 
     mayProceed ifTrue:[
-        ^ ProceedableError raiseRequestWith:#error: errorString:aString
+	^ ProceedableError raiseRequestWith:#error: errorString:aString
     ].
 
     Error raiseWith:#error: errorString:aString
@@ -4128,7 +4113,7 @@
     <resource: #skipInDebuggersWalkBack>
 
     index isInteger ifFalse:[
-        ^ self indexNotInteger:index
+	^ self indexNotInteger:index
     ].
     ^ self subscriptBoundsError:index
 !
@@ -4141,7 +4126,7 @@
     <resource: #skipInDebuggersWalkBack>
 
     ^ self error:'bad assign of ' , self printString ,
-                  ' (' , self class name , ') to integer-typed variable'
+		  ' (' , self class name , ') to integer-typed variable'
 !
 
 invalidCodeObject
@@ -4196,7 +4181,7 @@
     <resource: #skipInDebuggersWalkBack>
 
     ^ SubscriptOutOfBoundsError
-        raiseErrorString:'receiver has no indexed variables'
+	raiseErrorString:'receiver has no indexed variables'
 
     "Modified: 26.7.1996 / 16:43:13 / cg"
 !
@@ -4227,89 +4212,89 @@
      ignore will raise an AbortOperationRequest.
     "
     Debugger isNil ifTrue:[
-        msgString := 'Error: ' , msgString.
-
-        thisContext isRecursive ifTrue:[
-            msgString errorPrintCR.
-            Smalltalk fatalAbort:'recursive unhandled exception'
-        ].
-
-        Smalltalk isStandAloneApp ifTrue:[
-            (ex signal == NoHandlerError and:[HaltInterrupt handles:ex unhandledException]) ifTrue:[
-                "/ 'Halt ignored' infoPrintCR.
-                ^ self
-            ].
-        ].
-
-        (Dialog notNil and:[Screen default notNil]) ifTrue:[
+	msgString := 'Error: ' , msgString.
+
+	thisContext isRecursive ifTrue:[
+	    msgString errorPrintCR.
+	    Smalltalk fatalAbort:'recursive unhandled exception'
+	].
+
+	Smalltalk isStandAloneApp ifTrue:[
+	    (ex signal == NoHandlerError and:[HaltInterrupt handles:ex unhandledException]) ifTrue:[
+		"/ 'Halt ignored' infoPrintCR.
+		^ self
+	    ].
+	].
+
+	(Dialog notNil and:[Screen default notNil]) ifTrue:[
 false "oldCode" ifTrue:[
-            AbortOperationRequest isHandled ifTrue:[
-                answer := OptionBox
-                        request:msgString
-                        label:msgString
-                        buttonLabels:#('Exit' 'Terminate Thread' 'Ignore' 'Abort' )
-                        values:#(exit terminate ignore abort)
-                        default:#abort.
-            ] ifFalse:[
-                answer := OptionBox
-                        request:msgString
-                        label:msgString
-                        buttonLabels:#('Exit' 'Terminate Thread' 'Ignore' )
-                        values:#(exit terminate ignore )
-                        default:#terminate.
-            ].
-            answer isNil ifTrue:[ answer := #ignore].
-
-            answer == #abort ifTrue:[
-                ^ AbortOperationRequest raiseRequest
-            ].
-            answer == #ignore ifTrue:[
-                ^ nil
-            ].
-            answer == #terminate ifTrue:[
-                Processor activeProcess isSystemProcess ifTrue:[
-                    (Dialog confirm:'Are you sure (this might finish the application)') ifFalse:[
-                        ^ nil
-                    ].
-                ].
-                ^ Processor activeProcess terminate.
-            ].
-            "asking second time here to prevent the user from accidently closing his app"
-            answer == #exit ifTrue:[
-                answer := OptionBox
-                        request:'Do you really wish to exit this application (all changes will be lost)?'
-                        label:msgString
-                        buttonLabels:#('Yes' 'No' )
-                        values:#(exit abort)
-                        default:#abort.
-            ].
-            answer == #abort ifTrue:[
-                ^ AbortOperationRequest raiseRequest
-            ].
-
-            (Dialog confirm:'Are you sure you want to finish the application ?') ifFalse:[
-                ^ nil
-            ].
+	    AbortOperationRequest isHandled ifTrue:[
+		answer := OptionBox
+			request:msgString
+			label:msgString
+			buttonLabels:#('Exit' 'Terminate Thread' 'Ignore' 'Abort' )
+			values:#(exit terminate ignore abort)
+			default:#abort.
+	    ] ifFalse:[
+		answer := OptionBox
+			request:msgString
+			label:msgString
+			buttonLabels:#('Exit' 'Terminate Thread' 'Ignore' )
+			values:#(exit terminate ignore )
+			default:#terminate.
+	    ].
+	    answer isNil ifTrue:[ answer := #ignore].
+
+	    answer == #abort ifTrue:[
+		^ AbortOperationRequest raiseRequest
+	    ].
+	    answer == #ignore ifTrue:[
+		^ nil
+	    ].
+	    answer == #terminate ifTrue:[
+		Processor activeProcess isSystemProcess ifTrue:[
+		    (Dialog confirm:'Are you sure (this might finish the application)') ifFalse:[
+			^ nil
+		    ].
+		].
+		^ Processor activeProcess terminate.
+	    ].
+	    "asking second time here to prevent the user from accidently closing his app"
+	    answer == #exit ifTrue:[
+		answer := OptionBox
+			request:'Do you really wish to exit this application (all changes will be lost)?'
+			label:msgString
+			buttonLabels:#('Yes' 'No' )
+			values:#(exit abort)
+			default:#abort.
+	    ].
+	    answer == #abort ifTrue:[
+		^ AbortOperationRequest raiseRequest
+	    ].
+
+	    (Dialog confirm:'Are you sure you want to finish the application ?') ifFalse:[
+		^ nil
+	    ].
 ] ifFalse:[
-            self
-                errorNotify:msgString
-                from:ex suspendedContext
-                allowDebug:false.
-
-            "/ arrive here if proceeded...
-            ^ nil
+	    self
+		errorNotify:msgString
+		from:ex suspendedContext
+		allowDebug:false.
+
+	    "/ arrive here if proceeded...
+	    ^ nil
 ].
 
-        ].
-
-        "don't output the message, if the exception is a UserInterrupt (CTRL-C)"
-        (ex signal == NoHandlerError
-         and:[ex unhandledException signal == UserInterrupt]) ifTrue:[
-            OperatingSystem exit:130.
-        ].
-        msgString errorPrintCR.
-        thisContext fullPrintAll.
-        OperatingSystem exit:1
+	].
+
+	"don't output the message, if the exception is a UserInterrupt (CTRL-C)"
+	(ex signal == NoHandlerError
+	 and:[ex unhandledException signal == UserInterrupt]) ifTrue:[
+	    OperatingSystem exit:130.
+	].
+	msgString errorPrintCR.
+	thisContext fullPrintAll.
+	OperatingSystem exit:1
     ].
 
     "
@@ -4317,13 +4302,13 @@
     "
     debugger := self appropriateDebugger:(thisContext selector).
     debugger isNil ifTrue:[
-        ^ AbortOperationRequest raiseRequest
+	^ AbortOperationRequest raiseRequest
     ].
 
     ^ debugger
-        enter:ex returnableSuspendedContext
-        withMessage:ex descriptionForDebugger
-        mayProceed:(ex mayProceed).
+	enter:ex returnableSuspendedContext
+	withMessage:ex descriptionForDebugger
+	mayProceed:(ex mayProceed).
 
     "Modified: / 06-12-2006 / 18:51:55 / cg"
 !
@@ -4341,15 +4326,15 @@
     sender := thisContext sender.
 
     ^ PrimitiveFailure raiseRequestWith:(Message selector:sender selector arguments:sender args)
-                       in:sender.
+		       in:sender.
 
     "
      1234 primitiveFailed
 
      [
-        ExternalBytes new   basicAt:40
+	ExternalBytes new   basicAt:40
      ] on:PrimitiveFailure do:[:ex|
-        ex inspect
+	ex inspect
      ]
     "
 !
@@ -4367,8 +4352,8 @@
     sender := thisContext sender.
 
     ^ PrimitiveFailure raiseRequestWith:(Message selector:sender selector arguments:sender args)
-                       errorString:messageString
-                       in:sender.
+		       errorString:messageString
+		       in:sender.
 
     "
      1234 primitiveFailed:'this is a test'
@@ -4389,7 +4374,7 @@
     sender := thisContext sender.
 
     ^ UnimplementedFunctionalityError
-        raiseRequestWith:(Message selector:sender selector arguments:sender args)
+	raiseRequestWith:(Message selector:sender selector arguments:sender args)
 
      "
       self shouldImplement
@@ -4410,8 +4395,8 @@
     sender := thisContext sender.
 
     ^ UnimplementedFunctionalityError
-        raiseRequestWith:(Message selector:sender selector arguments:sender args)
-        errorString:what
+	raiseRequestWith:(Message selector:sender selector arguments:sender args)
+	errorString:what
 
      "
       self shouldImplement:'foobar'
@@ -4422,7 +4407,7 @@
     "report an error that this point may never be reached."
 
     ^ self
-        error:'Oops, this may never reached. Something somewhere was terribly wrong.'.
+	error:'Oops, this may never reached. Something somewhere was terribly wrong.'.
 
     "Modified: / 20-04-2005 / 18:59:28 / janfrog"
 !
@@ -4493,8 +4478,8 @@
     <resource: #skipInDebuggersWalkBack>
 
     ^ SubscriptOutOfBoundsError
-        raiseRequestWith:anIndex
-        errorString:('subscript (' , anIndex printString , ') out of bounds')
+	raiseRequestWith:anIndex
+	errorString:('subscript (' , anIndex printString , ') out of bounds')
 
     "Modified: / 17.11.2001 / 22:49:56 / cg"
 !
@@ -4508,7 +4493,7 @@
     <resource: #skipInDebuggersWalkBack>
 
     ^ self error:'bad assign of ' , self printString ,
-                  ' (' , self class name , ') to typed variable'
+		  ' (' , self class name , ') to typed variable'
 ! !
 
 !Object methodsFor:'evaluation'!
@@ -4522,7 +4507,7 @@
     ^ 0
 
     "
-        [1 // 0] on:ArithmeticError do:9999
+	[1 // 0] on:ArithmeticError do:9999
     "
 !
 
@@ -4536,16 +4521,16 @@
      style ... (the idea was borrowed from the Self language).
 
      WARNING: dont 'optimize' away ifXXX: blocks
-              (i.e. do NOT replace
-                        foo ifTrue:[var1] ifFalse:[var2]
-               by:
-                        foo ifTrue:var1 ifFalse:var2
-              )
-              - the compilers will only generate inline code for the if,
-                iff the argument(s) are blocks - otherwise, a true send is
-                generated.
-              This 'oprimization' will work semantically correct,
-              but execute SLOWER instead."
+	      (i.e. do NOT replace
+			foo ifTrue:[var1] ifFalse:[var2]
+	       by:
+			foo ifTrue:var1 ifFalse:var2
+	      )
+	      - the compilers will only generate inline code for the if,
+		iff the argument(s) are blocks - otherwise, a true send is
+		generated.
+	      This 'oprimization' will work semantically correct,
+	      but execute SLOWER instead."
 
     ^ self
 
@@ -4650,6 +4635,17 @@
     ^ self
 ! !
 
+!Object methodsFor:'inspecting'!
+
+inspectorClass
+    "{ Pragma: +optSpace }"
+
+    "return the class to use for inspect.
+     Can (should) be redefined in classes for which a better inspector is available"
+
+    ^ Inspector
+! !
+
 !Object methodsFor:'interrupt handling'!
 
 childSignalInterrupt
@@ -4676,30 +4672,30 @@
      used from other C subsystems too, to upcast errors.
      Especially, for subsystems which call errorHandler functions asynchronously.
      IDs (currently) used:
-        #DisplayError ..... x-error interrupt
-        #XtError      ..... xt-error interrupt (Xt interface is not yet published)
+	#DisplayError ..... x-error interrupt
+	#XtError      ..... xt-error interrupt (Xt interface is not yet published)
     "
 
     |handlers handler|
 
     handlers := ObjectMemory registeredErrorInterruptHandlers.
     handlers notNil ifTrue:[
-        handler := handlers at:errorID ifAbsent:nil.
-        handler notNil ifTrue:[
-            "/
-            "/ handler found; let it do whatever it wants ...
-            "/
-            handler errorInterrupt:errorID with:aParameter.
-            ^ self
-        ].
+	handler := handlers at:errorID ifAbsent:nil.
+	handler notNil ifTrue:[
+	    "/
+	    "/ handler found; let it do whatever it wants ...
+	    "/
+	    handler errorInterrupt:errorID with:aParameter.
+	    ^ self
+	].
     ].
 
     "/
     "/ no handler - raise errorSignal passing the errorId as parameter
     "/
     ^ Error
-        raiseRequestWith:errorID
-        errorString:('Subsystem error. ErrorID = ' , errorID printString)
+	raiseRequestWith:errorID
+	errorString:('Subsystem error. ErrorID = ' , errorID printString)
 !
 
 exceptionInterrupt
@@ -4725,12 +4721,12 @@
     where := thisContext sender.
     rec := where receiver.
     rec isNumber ifTrue:[
-        ^ rec class
-            raise:#domainErrorSignal
-            receiver:rec
-            selector:where selector
-            arguments:(where args asArray)
-            errorString:'floating point exception'
+	^ rec class
+	    raise:#domainErrorSignal
+	    receiver:rec
+	    selector:where selector
+	    arguments:(where args asArray)
+	    errorString:'floating point exception'
     ].
 
     "/ could be in some C-library ...
@@ -4795,31 +4791,31 @@
 "/            'Stray recursionInterrupt ...' infoPrintCR.
 "/            ^ self
 "/        ].
-        ObjectMemory infoPrinting ifTrue:[
-            'Object [info]: recursionInterrupt from:' printCR.
-            con := con sender.
-            remaining := 50.
-            [con notNil and:[remaining > 0]] whileTrue:[
-                sender := con sender.
-                '| ' print. con fullPrint.
-
-                nSkipped := 0.
-                [sender notNil and:[sender sender notNil
-                and:[sender selector == con selector
-                and:[sender sender selector == con selector
-                and:[sender method == con method]]]]] whileTrue:[
-                    nSkipped := nSkipped + 1.
-                    con := sender.
-                    sender := con sender.
-                ].
-                nSkipped > 0 ifTrue:[
-                    '| ... ***** ' print. nSkipped print. ' recursive contexts skipped *****' printCR.
-                ].
-                con := sender.
-                remaining := remaining - 1
-            ].
-        ].
-        ^ RecursionInterruptSignal raiseSignal
+	ObjectMemory infoPrinting ifTrue:[
+	    'Object [info]: recursionInterrupt from:' printCR.
+	    con := con sender.
+	    remaining := 50.
+	    [con notNil and:[remaining > 0]] whileTrue:[
+		sender := con sender.
+		'| ' print. con fullPrint.
+
+		nSkipped := 0.
+		[sender notNil and:[sender sender notNil
+		and:[sender selector == con selector
+		and:[sender sender selector == con selector
+		and:[sender method == con method]]]]] whileTrue:[
+		    nSkipped := nSkipped + 1.
+		    con := sender.
+		    sender := con sender.
+		].
+		nSkipped > 0 ifTrue:[
+		    '| ... ***** ' print. nSkipped print. ' recursive contexts skipped *****' printCR.
+		].
+		con := sender.
+		remaining := remaining - 1
+	    ].
+	].
+	^ RecursionInterruptSignal raiseSignal
     ]
 
     "Modified: / 10.11.2001 / 15:15:56 / cg"
@@ -4850,6 +4846,16 @@
     |name here sig fatal titles actions badContext msg pc addr
      action title screen|
 
+    thisContext isRecursive ifTrue:[
+        'severe error: signalInterrupt while processing a signalInterrupt. Terminate this process' errorPrintCR.
+        GenericException handle:[:ex |
+            "/ ignore any error during termination
+        ] do:[
+           Processor activeProcess terminate.
+        ].
+        Processor activeProcess terminateNoSignal.
+    ].
+
     "if there has been an ST-signal installed, use it ..."
     sig := OperatingSystem operatingSystemSignal:signalNumber.
     sig notNil ifTrue:[
@@ -4998,7 +5004,7 @@
         "action == #ignore"
     ].
 
-    "Modified: / 29-09-2006 / 12:27:20 / cg"
+    "Modified: / 31-01-2011 / 13:04:46 / cg"
 !
 
 spyInterrupt
@@ -5014,10 +5020,10 @@
      Start a mini debugger or exit if none is present"
 
     MiniDebugger isNil ifTrue:[
-        "a system without debugging facilities (i.e. a standalone system)
-         output a message and exit."
-        ('Object [error]: exit due to ', text, ' - and no debugger.') errorPrintCR.
-        OperatingSystem exit:99.
+	"a system without debugging facilities (i.e. a standalone system)
+	 output a message and exit."
+	('Object [error]: exit due to ', text, ' - and no debugger.') errorPrintCR.
+	OperatingSystem exit:99.
     ].
     MiniDebugger enterWithMessage:text mayProceed:true.
 !
@@ -5070,7 +5076,7 @@
     REGISTER OBJ sel = aSelector;
 
     if (InterruptPending == nil) {
-        struct inlineCache *pIlc;
+	struct inlineCache *pIlc;
     /* JV @ 2010-22-07: To improve performance I use 256 ILCs instead
        of default 4. This significantly reduces ILC misses. The code 
        should be further optimized by remembering last selector index and 
@@ -5121,10 +5127,10 @@
             pIlc->ilc_poly = 0;
         }
 perform0_send_and_return:
-        RETURN ( (*(pIlc->ilc_func))(self, sel, nil, pIlc) );
+	RETURN ( (*(pIlc->ilc_func))(self, sel, nil, pIlc) );
     } else {
-        static struct inlineCache ilc0 = __DUMMYILCSELF0(@line+1);
-        RETURN (_SEND0(self, aSelector, nil, &ilc0));
+	static struct inlineCache ilc0 = __DUMMYILCSELF0(@line+1);
+	RETURN (_SEND0(self, aSelector, nil, &ilc0));
     }
 %}.
     ^ self perform:aSelector withArguments:#()
@@ -5137,7 +5143,7 @@
      to execute a method in ANY superclass of the receiver (not just the
      immediate superclass).
      Thus, it is (theoretically) possible to do
-         '5 perform:#< inClass:Magnitude withArguments:#(6)'
+	 '5 perform:#< inClass:Magnitude withArguments:#(6)'
      and evaluate Magnitudes compare method even if there was one in Number.
      This method is used by the interpreter to evaluate super sends
      and could be used for very special behavior (language extension ?).
@@ -5151,174 +5157,174 @@
     "
     myClass := self class.
     (myClass == aClass or:[myClass isSubclassOf:aClass]) ifFalse:[
-        self error:'lookup-class argument is not a superclass of the receiver'.
-        ^ nil
+	self error:'lookup-class argument is not a superclass of the receiver'.
+	^ nil
     ].
 %{
     REGISTER OBJ *argP;
     int nargs, i;
 
     if (__isArrayLike(argArray)) {
-        nargs = __arraySize(argArray);
-        argP = __arrayVal(argArray);
+	nargs = __arraySize(argArray);
+	argP = __arrayVal(argArray);
     } else {
-        if (__isNonNilObject(argArray)) {
-            static struct inlineCache ilcSize = __ILC0(@line+1);
-            numberOfArgs = (*ilcSize.ilc_func)(argArray, @symbol(size), nil, &ilcSize);
-            if (!__isSmallInteger(numberOfArgs))
-                goto bad;
-            nargs = __intVal(numberOfArgs);
-            argP = (OBJ *)(&a1);
-            for (i=1; i <= nargs; i++) {
-                *argP++ = __AT_(argArray, __mkSmallInteger(i));
-            }
-            argP = (OBJ *)(&a1);
-        } else {
-            nargs = 0;
-        }
+	if (__isNonNilObject(argArray)) {
+	    static struct inlineCache ilcSize = __ILC0(@line+1);
+	    numberOfArgs = (*ilcSize.ilc_func)(argArray, @symbol(size), nil, &ilcSize);
+	    if (!__isSmallInteger(numberOfArgs))
+		goto bad;
+	    nargs = __intVal(numberOfArgs);
+	    argP = (OBJ *)(&a1);
+	    for (i=1; i <= nargs; i++) {
+		*argP++ = __AT_(argArray, __mkSmallInteger(i));
+	    }
+	    argP = (OBJ *)(&a1);
+	} else {
+	    nargs = 0;
+	}
     }
     switch (nargs) {
-        case 0:
-            {
-                static struct inlineCache ilc0 = __DUMMYILCSELF0(@line+1);
-                RETURN ( _SEND0(self, aSelector, aClass, &ilc0));
-            }
-
-        case 1:
-            {
-                static struct inlineCache ilc1 = __DUMMYILCSELF1(@line+1);
-                RETURN ( _SEND1(self, aSelector, aClass, &ilc1, argP[0]));
-            }
-
-        case 2:
-            {
-                static struct inlineCache ilc2 = __DUMMYILCSELF2(@line+1);
-                RETURN ( _SEND2(self, aSelector, aClass, &ilc2, argP[0], argP[1]));
-            }
-
-        case 3:
-            {
-                static struct inlineCache ilc3 = __DUMMYILCSELF3(@line+1);
-                RETURN ( _SEND3(self, aSelector, aClass, &ilc3,
-                                argP[0], argP[1], argP[2]));
-            }
-
-        case 4:
-            {
-                static struct inlineCache ilc4 = __DUMMYILCSELF4(@line+1);
-                RETURN ( _SEND4(self, aSelector, aClass, &ilc4,
-                                argP[0], argP[1], argP[2], argP[3]));
-            }
-
-        case 5:
-            {
-                static struct inlineCache ilc5 = __DUMMYILCSELF5(@line+1);
-                RETURN ( _SEND5(self, aSelector, aClass, &ilc5,
-                                argP[0], argP[1], argP[2], argP[3], argP[4]));
-            }
-
-        case 6:
-            {
-                static struct inlineCache ilc6 = __DUMMYILCSELF6(@line+1);
-                RETURN ( _SEND6(self, aSelector, aClass, &ilc6,
-                                argP[0], argP[1], argP[2], argP[3], argP[4], argP[5]));
-            }
-
-        case 7:
-            {
-                static struct inlineCache ilc7 = __DUMMYILCSELF7(@line+1);
-                RETURN ( _SEND7(self, aSelector, aClass, &ilc7,
-                                argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                argP[6]));
-            }
-
-        case 8:
-            {
-                static struct inlineCache ilc8 = __DUMMYILCSELF8(@line+1);
-                RETURN ( _SEND8(self, aSelector, aClass, &ilc8,
-                                argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                argP[6], argP[7]));
-            }
-
-        case 9:
-            {
-                static struct inlineCache ilc9 = __DUMMYILCSELF9(@line+1);
-                RETURN ( _SEND9(self, aSelector, aClass, &ilc9,
-                                argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                argP[6], argP[7], argP[8]));
-            }
-
-        case 10:
-            {
-                static struct inlineCache ilc10 = __DUMMYILCSELF10(@line+1);
-                RETURN ( _SEND10(self, aSelector, aClass, &ilc10,
-                                 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                 argP[6], argP[7], argP[8], argP[9]));
-            }
-
-        case 11:
-            {
-                static struct inlineCache ilc11 = __DUMMYILCSELF11(@line+1);
-                RETURN ( _SEND11(self, aSelector, aClass, &ilc11,
-                                 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                 argP[6], argP[7], argP[8], argP[9], argP[10]));
-            }
-
-        case 12:
-            {
-                static struct inlineCache ilc12 = __DUMMYILCSELF12(@line+1);
-                RETURN ( _SEND12(self, aSelector, aClass, &ilc12,
-                                 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                 argP[6], argP[7], argP[8], argP[9], argP[10],
-                                 argP[11]));
-            }
-
-        case 13:
-            {
-                static struct inlineCache ilc13 = __DUMMYILCSELF13(@line+1);
-                RETURN ( _SEND13(self, aSelector, aClass, &ilc13,
-                                 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                 argP[6], argP[7], argP[8], argP[9], argP[10],
-                                 argP[11], argP[12]));
-            }
-
-        case 14:
-            {
-                static struct inlineCache ilc14 = __DUMMYILCSELF14(@line+1);
-                RETURN ( _SEND14(self, aSelector, aClass, &ilc14,
-                                 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                 argP[6], argP[7], argP[8], argP[9], argP[10],
-                                 argP[11], argP[12], argP[13]));
-            }
-
-        case 15:
-            {
-                static struct inlineCache ilc15 = __DUMMYILCSELF15(@line+1);
-                RETURN ( _SEND15(self, aSelector, aClass, &ilc15,
-                                 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                 argP[6], argP[7], argP[8], argP[9], argP[10],
-                                 argP[11], argP[12], argP[13], argP[14]));
-            }
+	case 0:
+	    {
+		static struct inlineCache ilc0 = __DUMMYILCSELF0(@line+1);
+		RETURN ( _SEND0(self, aSelector, aClass, &ilc0));
+	    }
+
+	case 1:
+	    {
+		static struct inlineCache ilc1 = __DUMMYILCSELF1(@line+1);
+		RETURN ( _SEND1(self, aSelector, aClass, &ilc1, argP[0]));
+	    }
+
+	case 2:
+	    {
+		static struct inlineCache ilc2 = __DUMMYILCSELF2(@line+1);
+		RETURN ( _SEND2(self, aSelector, aClass, &ilc2, argP[0], argP[1]));
+	    }
+
+	case 3:
+	    {
+		static struct inlineCache ilc3 = __DUMMYILCSELF3(@line+1);
+		RETURN ( _SEND3(self, aSelector, aClass, &ilc3,
+				argP[0], argP[1], argP[2]));
+	    }
+
+	case 4:
+	    {
+		static struct inlineCache ilc4 = __DUMMYILCSELF4(@line+1);
+		RETURN ( _SEND4(self, aSelector, aClass, &ilc4,
+				argP[0], argP[1], argP[2], argP[3]));
+	    }
+
+	case 5:
+	    {
+		static struct inlineCache ilc5 = __DUMMYILCSELF5(@line+1);
+		RETURN ( _SEND5(self, aSelector, aClass, &ilc5,
+				argP[0], argP[1], argP[2], argP[3], argP[4]));
+	    }
+
+	case 6:
+	    {
+		static struct inlineCache ilc6 = __DUMMYILCSELF6(@line+1);
+		RETURN ( _SEND6(self, aSelector, aClass, &ilc6,
+				argP[0], argP[1], argP[2], argP[3], argP[4], argP[5]));
+	    }
+
+	case 7:
+	    {
+		static struct inlineCache ilc7 = __DUMMYILCSELF7(@line+1);
+		RETURN ( _SEND7(self, aSelector, aClass, &ilc7,
+				argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				argP[6]));
+	    }
+
+	case 8:
+	    {
+		static struct inlineCache ilc8 = __DUMMYILCSELF8(@line+1);
+		RETURN ( _SEND8(self, aSelector, aClass, &ilc8,
+				argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				argP[6], argP[7]));
+	    }
+
+	case 9:
+	    {
+		static struct inlineCache ilc9 = __DUMMYILCSELF9(@line+1);
+		RETURN ( _SEND9(self, aSelector, aClass, &ilc9,
+				argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				argP[6], argP[7], argP[8]));
+	    }
+
+	case 10:
+	    {
+		static struct inlineCache ilc10 = __DUMMYILCSELF10(@line+1);
+		RETURN ( _SEND10(self, aSelector, aClass, &ilc10,
+				 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				 argP[6], argP[7], argP[8], argP[9]));
+	    }
+
+	case 11:
+	    {
+		static struct inlineCache ilc11 = __DUMMYILCSELF11(@line+1);
+		RETURN ( _SEND11(self, aSelector, aClass, &ilc11,
+				 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				 argP[6], argP[7], argP[8], argP[9], argP[10]));
+	    }
+
+	case 12:
+	    {
+		static struct inlineCache ilc12 = __DUMMYILCSELF12(@line+1);
+		RETURN ( _SEND12(self, aSelector, aClass, &ilc12,
+				 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				 argP[6], argP[7], argP[8], argP[9], argP[10],
+				 argP[11]));
+	    }
+
+	case 13:
+	    {
+		static struct inlineCache ilc13 = __DUMMYILCSELF13(@line+1);
+		RETURN ( _SEND13(self, aSelector, aClass, &ilc13,
+				 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				 argP[6], argP[7], argP[8], argP[9], argP[10],
+				 argP[11], argP[12]));
+	    }
+
+	case 14:
+	    {
+		static struct inlineCache ilc14 = __DUMMYILCSELF14(@line+1);
+		RETURN ( _SEND14(self, aSelector, aClass, &ilc14,
+				 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				 argP[6], argP[7], argP[8], argP[9], argP[10],
+				 argP[11], argP[12], argP[13]));
+	    }
+
+	case 15:
+	    {
+		static struct inlineCache ilc15 = __DUMMYILCSELF15(@line+1);
+		RETURN ( _SEND15(self, aSelector, aClass, &ilc15,
+				 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				 argP[6], argP[7], argP[8], argP[9], argP[10],
+				 argP[11], argP[12], argP[13], argP[14]));
+	    }
 
 #ifdef _SEND16
-        case 16:
-            {
-                static struct inlineCache ilc16 = __DUMMYILCSELF16(@line+1);
-                RETURN ( _SEND16(self, aSelector, aClass, &ilc15,
-                                 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                 argP[6], argP[7], argP[8], argP[9], argP[10],
-                                 argP[11], argP[12], argP[13], argP[14], argP[15]));
-            }
+	case 16:
+	    {
+		static struct inlineCache ilc16 = __DUMMYILCSELF16(@line+1);
+		RETURN ( _SEND16(self, aSelector, aClass, &ilc15,
+				 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				 argP[6], argP[7], argP[8], argP[9], argP[10],
+				 argP[11], argP[12], argP[13], argP[14], argP[15]));
+	    }
 #endif
 #ifdef _SEND17
-        case 17:
-            {
-                static struct inlineCache ilc17 = __DUMMYILCSELF17(@line+1);
-                RETURN ( _SEND17(self, aSelector, aClass, &ilc15,
-                                 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
-                                 argP[6], argP[7], argP[8], argP[9], argP[10],
-                                 argP[11], argP[12], argP[13], argP[14], argP[15], argP[16]));
-            }
+	case 17:
+	    {
+		static struct inlineCache ilc17 = __DUMMYILCSELF17(@line+1);
+		RETURN ( _SEND17(self, aSelector, aClass, &ilc15,
+				 argP[0], argP[1], argP[2], argP[3], argP[4], argP[5],
+				 argP[6], argP[7], argP[8], argP[9], argP[10],
+				 argP[11], argP[12], argP[13], argP[14], argP[15], argP[16]));
+	    }
 #endif
 
 
@@ -5338,7 +5344,7 @@
     REGISTER OBJ sel = aSelector;
 
     if (InterruptPending == nil) {
-        struct inlineCache *pIlc;
+	struct inlineCache *pIlc;
     /* JV @ 2010-22-07: To improve performance I use 256 ILCs instead
        of default 4. For details, see comment in perform: */
 
@@ -5384,10 +5390,10 @@
             pIlc->ilc_poly = 0;
         }
 perform1_send_and_return:
-        RETURN ( (*(pIlc->ilc_func))(self, sel, nil, pIlc, arg) );
+	RETURN ( (*(pIlc->ilc_func))(self, sel, nil, pIlc, arg) );
     } else {
-        static struct inlineCache ilc1 = __DUMMYILCSELF1(@line+1);
-        RETURN (_SEND1(self, aSelector, nil, &ilc1, arg));
+	static struct inlineCache ilc1 = __DUMMYILCSELF1(@line+1);
+	RETURN (_SEND1(self, aSelector, nil, &ilc1, arg));
     }
 %}.
     ^ self perform:aSelector withArguments:(Array with:arg)
@@ -5448,10 +5454,10 @@
             pIlc->ilc_poly = 0;
         }
 perform2_send_and_return:
-        RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc, arg1, arg2) );
+	RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc, arg1, arg2) );
     } else {
-        static struct inlineCache ilc2 = __DUMMYILCSELF2(@line+1);
-        RETURN (_SEND2(self, aSelector, nil, &ilc2, arg1, arg2));
+	static struct inlineCache ilc2 = __DUMMYILCSELF2(@line+1);
+	RETURN (_SEND2(self, aSelector, nil, &ilc2, arg1, arg2));
     }
 %}.
     ^ self perform:aSelector withArguments:(Array with:arg1 with:arg2)
@@ -5470,32 +5476,32 @@
     static flip = 0;
 
     if (InterruptPending == nil) {
-        if (aSelector != last_0) {
-            if (aSelector != last_1) {
-                if (flip) {
-                    pIlc = &ilc_0;
-                    flip = 0;
-                    last_0 = aSelector;
-                } else {
-                    pIlc = &ilc_1;
-                    flip = 1;
-                    last_1 = aSelector;
-                }
-                pIlc->ilc_func = __SEND3ADDR__;
-                if (pIlc->ilc_poly) {
-                    __flushPolyCache(pIlc->ilc_poly);
-                    pIlc->ilc_poly = 0;
-                }
-            } else {
-                pIlc = &ilc_1;
-            }
-        } else {
-            pIlc = &ilc_0;
-        }
-        RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc, arg1, arg2, arg3) );
+	if (aSelector != last_0) {
+	    if (aSelector != last_1) {
+		if (flip) {
+		    pIlc = &ilc_0;
+		    flip = 0;
+		    last_0 = aSelector;
+		} else {
+		    pIlc = &ilc_1;
+		    flip = 1;
+		    last_1 = aSelector;
+		}
+		pIlc->ilc_func = __SEND3ADDR__;
+		if (pIlc->ilc_poly) {
+		    __flushPolyCache(pIlc->ilc_poly);
+		    pIlc->ilc_poly = 0;
+		}
+	    } else {
+		pIlc = &ilc_1;
+	    }
+	} else {
+	    pIlc = &ilc_0;
+	}
+	RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc, arg1, arg2, arg3) );
     } else {
-        static struct inlineCache ilc3 = __DUMMYILCSELF3(@line+1);
-        RETURN (_SEND3(self, aSelector, nil, &ilc3, arg1, arg2, arg3));
+	static struct inlineCache ilc3 = __DUMMYILCSELF3(@line+1);
+	RETURN (_SEND3(self, aSelector, nil, &ilc3, arg1, arg2, arg3));
     }
 %}.
     ^ self perform:aSelector withArguments:(Array with:arg1 with:arg2 with:arg3)
@@ -5514,34 +5520,34 @@
     static flip = 0;
 
     if (InterruptPending == nil) {
-        if (aSelector != last_0) {
-            if (aSelector != last_1) {
-                if (flip) {
-                    pIlc = &ilc_0;
-                    flip = 0;
-                    last_0 = aSelector;
-                } else {
-                    pIlc = &ilc_1;
-                    flip = 1;
-                    last_1 = aSelector;
-                }
-                pIlc->ilc_func = __SEND4ADDR__;
-                if (pIlc->ilc_poly) {
-                    __flushPolyCache(pIlc->ilc_poly);
-                    pIlc->ilc_poly = 0;
-                }
-            } else {
-                pIlc = &ilc_1;
-            }
-        } else {
-            pIlc = &ilc_0;
-        }
-        RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc,
-                                     arg1, arg2, arg3, arg4) );
+	if (aSelector != last_0) {
+	    if (aSelector != last_1) {
+		if (flip) {
+		    pIlc = &ilc_0;
+		    flip = 0;
+		    last_0 = aSelector;
+		} else {
+		    pIlc = &ilc_1;
+		    flip = 1;
+		    last_1 = aSelector;
+		}
+		pIlc->ilc_func = __SEND4ADDR__;
+		if (pIlc->ilc_poly) {
+		    __flushPolyCache(pIlc->ilc_poly);
+		    pIlc->ilc_poly = 0;
+		}
+	    } else {
+		pIlc = &ilc_1;
+	    }
+	} else {
+	    pIlc = &ilc_0;
+	}
+	RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc,
+				     arg1, arg2, arg3, arg4) );
     } else {
-        static struct inlineCache ilc4 = __DUMMYILCSELF4(@line+1);
-        RETURN (_SEND4(self, aSelector, nil, &ilc4,
-                       arg1, arg2, arg3, arg4));
+	static struct inlineCache ilc4 = __DUMMYILCSELF4(@line+1);
+	RETURN (_SEND4(self, aSelector, nil, &ilc4,
+		       arg1, arg2, arg3, arg4));
     }
 %}.
     ^ self perform:aSelector withArguments:(Array with:arg1 with:arg2 with:arg3 with:arg4)
@@ -5560,38 +5566,38 @@
     static flip = 0;
 
     if (InterruptPending == nil) {
-        if (aSelector != last_0) {
-            if (aSelector != last_1) {
-                if (flip) {
-                    pIlc = &ilc_0;
-                    flip = 0;
-                    last_0 = aSelector;
-                } else {
-                    pIlc = &ilc_1;
-                    flip = 1;
-                    last_1 = aSelector;
-                }
-                pIlc->ilc_func = __SEND5ADDR__;
-                if (pIlc->ilc_poly) {
-                    __flushPolyCache(pIlc->ilc_poly);
-                    pIlc->ilc_poly = 0;
-                }
-            } else {
-                pIlc = &ilc_1;
-            }
-        } else {
-            pIlc = &ilc_0;
-        }
-        RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc,
-                                     arg1, arg2, arg3, arg4, arg5) );
+	if (aSelector != last_0) {
+	    if (aSelector != last_1) {
+		if (flip) {
+		    pIlc = &ilc_0;
+		    flip = 0;
+		    last_0 = aSelector;
+		} else {
+		    pIlc = &ilc_1;
+		    flip = 1;
+		    last_1 = aSelector;
+		}
+		pIlc->ilc_func = __SEND5ADDR__;
+		if (pIlc->ilc_poly) {
+		    __flushPolyCache(pIlc->ilc_poly);
+		    pIlc->ilc_poly = 0;
+		}
+	    } else {
+		pIlc = &ilc_1;
+	    }
+	} else {
+	    pIlc = &ilc_0;
+	}
+	RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc,
+				     arg1, arg2, arg3, arg4, arg5) );
     } else {
-        static struct inlineCache ilc5 = __DUMMYILCSELF5(@line+1);
-        RETURN (_SEND5(self, aSelector, nil, &ilc5,
-                       arg1, arg2, arg3, arg4, arg5));
+	static struct inlineCache ilc5 = __DUMMYILCSELF5(@line+1);
+	RETURN (_SEND5(self, aSelector, nil, &ilc5,
+		       arg1, arg2, arg3, arg4, arg5));
     }
 %}.
     ^ self perform:aSelector withArguments:(Array with:arg1 with:arg2 with:arg3 with:arg4
-                                                  with:arg5)
+						  with:arg5)
 
 !
 
@@ -5607,39 +5613,39 @@
     static flip = 0;
 
     if (InterruptPending == nil) {
-        if (aSelector != last_0) {
-            if (aSelector != last_1) {
-                if (flip) {
-                    pIlc = &ilc_0;
-                    flip = 0;
-                    last_0 = aSelector;
-                } else {
-                    pIlc = &ilc_1;
-                    flip = 1;
-                    last_1 = aSelector;
-                }
-                pIlc->ilc_func = __SEND6ADDR__;
-                if (pIlc->ilc_poly) {
-                    __flushPolyCache(pIlc->ilc_poly);
-                    pIlc->ilc_poly = 0;
-                }
-            } else {
-                pIlc = &ilc_1;
-            }
-        } else {
-            pIlc = &ilc_0;
-        }
-
-        RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc,
-                                     arg1, arg2, arg3, arg4, arg5, arg6) );
+	if (aSelector != last_0) {
+	    if (aSelector != last_1) {
+		if (flip) {
+		    pIlc = &ilc_0;
+		    flip = 0;
+		    last_0 = aSelector;
+		} else {
+		    pIlc = &ilc_1;
+		    flip = 1;
+		    last_1 = aSelector;
+		}
+		pIlc->ilc_func = __SEND6ADDR__;
+		if (pIlc->ilc_poly) {
+		    __flushPolyCache(pIlc->ilc_poly);
+		    pIlc->ilc_poly = 0;
+		}
+	    } else {
+		pIlc = &ilc_1;
+	    }
+	} else {
+	    pIlc = &ilc_0;
+	}
+
+	RETURN ( (*(pIlc->ilc_func))(self, aSelector, nil, pIlc,
+				     arg1, arg2, arg3, arg4, arg5, arg6) );
     } else {
-        static struct inlineCache ilc6 = __DUMMYILCSELF6(@line+1);
-        RETURN (_SEND6(self, aSelector, nil, &ilc6,
-                       arg1, arg2, arg3, arg4, arg5, arg6));
+	static struct inlineCache ilc6 = __DUMMYILCSELF6(@line+1);
+	RETURN (_SEND6(self, aSelector, nil, &ilc6,
+		       arg1, arg2, arg3, arg4, arg5, arg6));
     }
 %}.
     ^ self perform:aSelector withArguments:(Array with:arg1 with:arg2 with:arg3 with:arg4
-                                                  with:arg5 with:arg6)
+						  with:arg5 with:arg6)
 
 !
 
@@ -5655,398 +5661,398 @@
     OBJ l;
 
     if (__isArrayLike(argArray)) {
-        nargs = __arraySize(argArray);
-        argP = __arrayVal(argArray);
+	nargs = __arraySize(argArray);
+	argP = __arrayVal(argArray);
     } else {
-        if (__isNonNilObject(argArray)) {
-            static struct inlineCache ilcSize = __ILC0(@line);
-            int i;
-
-            numberOfArgs = (*ilcSize.ilc_func)(argArray, @symbol(size), nil, &ilcSize);
-            if (!__isSmallInteger(numberOfArgs))
-                goto bad;
-            nargs = __intVal(numberOfArgs);
-            argP = (OBJ *)(&a1);
-            for (i=1; i <= nargs; i++) {
-                *argP++ = __AT_(argArray, __mkSmallInteger(i));
-            }
-            argP = (OBJ *)(&a1);
-        } else {
-            nargs = 0;
-        }
+	if (__isNonNilObject(argArray)) {
+	    static struct inlineCache ilcSize = __ILC0(@line);
+	    int i;
+
+	    numberOfArgs = (*ilcSize.ilc_func)(argArray, @symbol(size), nil, &ilcSize);
+	    if (!__isSmallInteger(numberOfArgs))
+		goto bad;
+	    nargs = __intVal(numberOfArgs);
+	    argP = (OBJ *)(&a1);
+	    for (i=1; i <= nargs; i++) {
+		*argP++ = __AT_(argArray, __mkSmallInteger(i));
+	    }
+	    argP = (OBJ *)(&a1);
+	} else {
+	    nargs = 0;
+	}
     }
     switch (nargs) {
-        case 0:
-            if (InterruptPending == nil) {
-                static OBJ last0_0 = nil; static struct inlineCache ilc0_0 = __ILCPERF0(@line);
-                static OBJ last0_1 = nil; static struct inlineCache ilc0_1 = __ILCPERF0(@line);
-                static OBJ last0_2 = nil; static struct inlineCache ilc0_2 = __ILCPERF0(@line);
-                static OBJ last0_3 = nil; static struct inlineCache ilc0_3 = __ILCPERF0(@line);
-                static int flip0 = 0;
-                struct inlineCache *pIlc;
-
-                if (aSelector == last0_0) {
-                    pIlc = &ilc0_0;
-                } else if (aSelector == last0_1) {
-                    pIlc = &ilc0_1;
-                } else if (aSelector == last0_2) {
-                    pIlc = &ilc0_2;
-                } else if (aSelector == last0_3) {
-                    pIlc = &ilc0_3;
-                } else {
-                    if (flip0 == 0) {
-                        pIlc = &ilc0_0;
-                        flip0 = 1;
-                        last0_0 = aSelector;
-                    } else if (flip0 == 1) {
-                        pIlc = &ilc0_1;
-                        flip0 = 2;
-                        last0_1 = aSelector;
-                    } else if (flip0 == 2) {
-                        pIlc = &ilc0_2;
-                        flip0 = 3;
-                        last0_2 = aSelector;
-                    } else {
-                        pIlc = &ilc0_3;
-                        flip0 = 0;
-                        last0_3 = aSelector;
-                    }
-
-                    pIlc->ilc_func = __SEND0ADDR__;
-                    if (pIlc->ilc_poly) {
-                        __flushPolyCache(pIlc->ilc_poly);
-                        pIlc->ilc_poly = 0;
-                    }
-                }
-                RETURN ((*pIlc->ilc_func)(self, aSelector, nil, pIlc));
-            } else {
-                static struct inlineCache ilc0 = __DUMMYILCSELF0(@line+1);
-                RETURN (_SEND0(self, aSelector, nil, &ilc0));
-            }
-
-        case 1:
-            if (InterruptPending == nil) {
-                static OBJ last1_0 = nil; static struct inlineCache ilc1_0 = __ILCPERF1(@line);
-                static OBJ last1_1 = nil; static struct inlineCache ilc1_1 = __ILCPERF1(@line);
-                static OBJ last1_2 = nil; static struct inlineCache ilc1_2 = __ILCPERF1(@line);
-                static OBJ last1_3 = nil; static struct inlineCache ilc1_3 = __ILCPERF1(@line);
-                static int flip1 = 0;
-                struct inlineCache *pIlc;
-
-                if (aSelector == last1_0) {
-                    pIlc = &ilc1_0;
-                } else if (aSelector == last1_1) {
-                    pIlc = &ilc1_1;
-                } else if (aSelector == last1_2) {
-                    pIlc = &ilc1_2;
-                } else if (aSelector == last1_3) {
-                    pIlc = &ilc1_3;
-                } else {
-                    if (flip1 == 0) {
-                        pIlc = &ilc1_0;
-                        flip1 = 1;
-                        last1_0 = aSelector;
-                    } else if (flip1 == 1) {
-                        pIlc = &ilc1_1;
-                        flip1 = 2;
-                        last1_1 = aSelector;
-                    } else if (flip1 == 2) {
-                        pIlc = &ilc1_2;
-                        flip1 = 3;
-                        last1_2 = aSelector;
-                    } else {
-                        pIlc = &ilc1_3;
-                        flip1 = 0;
-                        last1_3 = aSelector;
-                    }
-
-                    pIlc->ilc_func = __SEND1ADDR__;
-                    if (pIlc->ilc_poly) {
-                        __flushPolyCache(pIlc->ilc_poly);
-                        pIlc->ilc_poly = 0;
-                    }
-                }
-                RETURN ((*pIlc->ilc_func)(self, aSelector, nil, pIlc, argP[0]));
-            } else {
-                static struct inlineCache ilc1 = __DUMMYILCSELF1(@line+1);
-                RETURN (_SEND1(self, aSelector, nil, &ilc1, argP[0]));
-            }
-
-        case 2:
-            if (InterruptPending == nil) {
-                static OBJ last2_0 = nil; static struct inlineCache ilc2_0 = __ILCPERF2(@line);
-                static OBJ last2_1 = nil; static struct inlineCache ilc2_1 = __ILCPERF2(@line);
-                static int flip2 = 0;
-                struct inlineCache *pIlc;
-
-                if (aSelector == last2_0) {
-                    pIlc = &ilc2_0;
-                } else if (aSelector == last2_1) {
-                    pIlc = &ilc2_1;
-                } else {
-                    if (flip2 == 0) {
-                        pIlc = &ilc2_0;
-                        flip2 = 1;
-                        last2_0 = aSelector;
-                    } else {
-                        pIlc = &ilc2_1;
-                        flip2 = 0;
-                        last2_1 = aSelector;
-                    }
-
-                    pIlc->ilc_func = __SEND2ADDR__;
-                    if (pIlc->ilc_poly) {
-                        __flushPolyCache(pIlc->ilc_poly);
-                        pIlc->ilc_poly = 0;
-                    }
-                }
-                RETURN ((*pIlc->ilc_func)(self, aSelector, nil, pIlc, argP[0], argP[1]));
-            } else {
-                static struct inlineCache ilc2 = __DUMMYILCSELF2(@line+1);
-                RETURN (_SEND2(self, aSelector, nil, &ilc2, argP[0], argP[1]));
-            }
-
-        case 3:
-            if (InterruptPending == nil) {
-                static OBJ last3_0 = nil; static struct inlineCache ilc3_0 = __ILCPERF3(@line);
-                static OBJ last3_1 = nil; static struct inlineCache ilc3_1 = __ILCPERF3(@line);
-                static int flip3 = 0;
-                struct inlineCache *pIlc;
-
-                if (aSelector == last3_0) {
-                    pIlc = &ilc3_0;
-                } else if (aSelector == last3_1) {
-                    pIlc = &ilc3_1;
-                } else {
-                    if (flip3 == 0) {
-                        pIlc = &ilc3_0;
-                        flip3 = 1;
-                        last3_0 = aSelector;
-                    } else {
-                        pIlc = &ilc3_1;
-                        flip3 = 0;
-                        last3_1 = aSelector;
-                    }
-
-                    pIlc->ilc_func = __SEND3ADDR__;
-                    if (pIlc->ilc_poly) {
-                        __flushPolyCache(pIlc->ilc_poly);
-                        pIlc->ilc_poly = 0;
-                    }
-                }
-                RETURN ((*pIlc->ilc_func)(self, aSelector, nil, pIlc, argP[0], argP[1], argP[2]));
-            } else {
-                static struct inlineCache ilc3 = __DUMMYILCSELF3(@line+1);
-                RETURN (_SEND3(self, aSelector, nil, &ilc3, argP[0], argP[1], argP[2]));
-            }
-
-        case 4:
-            {
-                static OBJ last4 = nil; static struct inlineCache ilc4 = __ILCPERF4(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last4)) {
-                    ilc4.ilc_func = __SEND4ADDR__;
-                    if (ilc4.ilc_poly) {
-                        __flushPolyCache(ilc4.ilc_poly);
-                        ilc4.ilc_poly = 0;
-                    }
-                    last4 = aSelector;
-                }
-                RETURN ( (*ilc4.ilc_func)(self, aSelector, nil, &ilc4,
-                                                argP[0], argP[1], argP[2], argP[3]));
-            }
-
-        case 5:
-            {
-                static OBJ last5 = nil; static struct inlineCache ilc5 = __ILCPERF5(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last5)) {
-                    ilc5.ilc_func = __SEND5ADDR__;
-                    if (ilc5.ilc_poly) {
-                        __flushPolyCache(ilc5.ilc_poly);
-                        ilc5.ilc_poly = 0;
-                    }
-                    last5 = aSelector;
-                }
-                RETURN ( (*ilc5.ilc_func)(self, aSelector, nil, &ilc5,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4]));
-            }
-
-        case 6:
-            {
-                static OBJ last6 = nil; static struct inlineCache ilc6 = __ILCPERF6(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last6)) {
-                    ilc6.ilc_func = __SEND6ADDR__;
-                    if (ilc6.ilc_poly) {
-                        __flushPolyCache(ilc6.ilc_poly);
-                        ilc6.ilc_poly = 0;
-                    }
-                    last6 = aSelector;
-                }
-                RETURN ( (*ilc6.ilc_func)(self, aSelector, nil, &ilc6,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5]));
-            }
-
-        case 7:
-            {
-                static OBJ last7 = nil; static struct inlineCache ilc7 = __ILCPERF7(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last7)) {
-                    ilc7.ilc_func = __SEND7ADDR__;
-                    if (ilc7.ilc_poly) {
-                        __flushPolyCache(ilc7.ilc_poly);
-                        ilc7.ilc_poly = 0;
-                    }
-                    last7 = aSelector;
-                }
-                RETURN ( (*ilc7.ilc_func)(self, aSelector, nil, &ilc7,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5], argP[6]));
-            }
-
-        case 8:
-            {
-                static OBJ last8 = nil; static struct inlineCache ilc8 = __ILCPERF8(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last8)) {
-                    ilc8.ilc_func = __SEND8ADDR__;
-                    if (ilc8.ilc_poly) {
-                        __flushPolyCache(ilc8.ilc_poly);
-                        ilc8.ilc_poly = 0;
-                    }
-                    last8 = aSelector;
-                }
-                RETURN ( (*ilc8.ilc_func)(self, aSelector, nil, &ilc8,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5], argP[6], argP[7]));
-            }
-
-        case 9:
-            {
-                static OBJ last9 = nil; static struct inlineCache ilc9 = __ILCPERF9(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last9)) {
-                    ilc9.ilc_func = __SEND9ADDR__;
-                    if (ilc9.ilc_poly) {
-                        __flushPolyCache(ilc9.ilc_poly);
-                        ilc9.ilc_poly = 0;
-                    }
-                    last9 = aSelector;
-                }
-                RETURN ( (*ilc9.ilc_func)(self, aSelector, nil, &ilc9,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5], argP[6], argP[7], argP[8]));
-            }
-
-        case 10:
-            {
-                static OBJ last10 = nil; static struct inlineCache ilc10 = __ILCPERF10(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last10)) {
-                    ilc10.ilc_func = __SEND10ADDR__;
-                    if (ilc10.ilc_poly) {
-                        __flushPolyCache(ilc10.ilc_poly);
-                        ilc10.ilc_poly = 0;
-                    }
-                    last10 = aSelector;
-                }
-                RETURN ( (*ilc10.ilc_func)(self, aSelector, nil, &ilc10,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5], argP[6], argP[7], argP[8], argP[9]));
-            }
-
-        case 11:
-            {
-                static OBJ last11 = nil; static struct inlineCache ilc11 = __ILCPERF11(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last11)) {
-                    ilc11.ilc_func = __SEND11ADDR__;
-                    if (ilc11.ilc_poly) {
-                        __flushPolyCache(ilc11.ilc_poly);
-                        ilc11.ilc_poly = 0;
-                    }
-                    last11 = aSelector;
-                }
-                RETURN ( (*ilc11.ilc_func)(self, aSelector, nil, &ilc11,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5], argP[6], argP[7], argP[8], argP[9],
-                                                argP[10]));
-            }
-
-        case 12:
-            {
-                static OBJ last12 = nil; static struct inlineCache ilc12 = __ILCPERF12(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last12)) {
-                    ilc12.ilc_func = __SEND12ADDR__;
-                    if (ilc12.ilc_poly) {
-                        __flushPolyCache(ilc12.ilc_poly);
-                        ilc12.ilc_poly = 0;
-                    }
-                    last12 = aSelector;
-                }
-                RETURN ( (*ilc12.ilc_func)(self, aSelector, nil, &ilc12,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5], argP[6], argP[7], argP[8], argP[9],
-                                                argP[10], argP[11]));
-            }
-
-        case 13:
-            {
-                static OBJ last13 = nil; static struct inlineCache ilc13 = __ILCPERF13(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last13)) {
-                    ilc13.ilc_func = __SEND13ADDR__;
-                    if (ilc13.ilc_poly) {
-                        __flushPolyCache(ilc13.ilc_poly);
-                        ilc13.ilc_poly = 0;
-                    }
-                    last13 = aSelector;
-                }
-                RETURN ( (*ilc13.ilc_func)(self, aSelector, nil, &ilc13,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5], argP[6], argP[7], argP[8], argP[9],
-                                                argP[10], argP[11], argP[12]));
-            }
-
-        case 14:
-            {
-                static OBJ last14 = nil; static struct inlineCache ilc14 = __ILCPERF14(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last14)) {
-                    ilc14.ilc_func = __SEND14ADDR__;
-                    if (ilc14.ilc_poly) {
-                        __flushPolyCache(ilc14.ilc_poly);
-                        ilc14.ilc_poly = 0;
-                    }
-                    last14 = aSelector;
-                }
-                RETURN ( (*ilc14.ilc_func)(self, aSelector, nil, &ilc14,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5], argP[6], argP[7], argP[8], argP[9],
-                                                argP[10], argP[11], argP[12], argP[13]));
-            }
-
-        case 15:
-            {
-                static OBJ last15 = nil; static struct inlineCache ilc15 = __ILCPERF15(@line);
-
-                if ((InterruptPending != nil) || (aSelector != last15)) {
-                    ilc15.ilc_func = __SEND15ADDR__;
-                    if (ilc15.ilc_poly) {
-                        __flushPolyCache(ilc15.ilc_poly);
-                        ilc15.ilc_poly = 0;
-                    }
-                    last15 = aSelector;
-                }
-                RETURN ( (*ilc15.ilc_func)(self, aSelector, nil, &ilc15,
-                                                argP[0], argP[1], argP[2], argP[3], argP[4],
-                                                argP[5], argP[6], argP[7], argP[8], argP[9],
-                                                argP[10], argP[11], argP[12], argP[13],
-                                                argP[14]));
-            }
+	case 0:
+	    if (InterruptPending == nil) {
+		static OBJ last0_0 = nil; static struct inlineCache ilc0_0 = __ILCPERF0(@line);
+		static OBJ last0_1 = nil; static struct inlineCache ilc0_1 = __ILCPERF0(@line);
+		static OBJ last0_2 = nil; static struct inlineCache ilc0_2 = __ILCPERF0(@line);
+		static OBJ last0_3 = nil; static struct inlineCache ilc0_3 = __ILCPERF0(@line);
+		static int flip0 = 0;
+		struct inlineCache *pIlc;
+
+		if (aSelector == last0_0) {
+		    pIlc = &ilc0_0;
+		} else if (aSelector == last0_1) {
+		    pIlc = &ilc0_1;
+		} else if (aSelector == last0_2) {
+		    pIlc = &ilc0_2;
+		} else if (aSelector == last0_3) {
+		    pIlc = &ilc0_3;
+		} else {
+		    if (flip0 == 0) {
+			pIlc = &ilc0_0;
+			flip0 = 1;
+			last0_0 = aSelector;
+		    } else if (flip0 == 1) {
+			pIlc = &ilc0_1;
+			flip0 = 2;
+			last0_1 = aSelector;
+		    } else if (flip0 == 2) {
+			pIlc = &ilc0_2;
+			flip0 = 3;
+			last0_2 = aSelector;
+		    } else {
+			pIlc = &ilc0_3;
+			flip0 = 0;
+			last0_3 = aSelector;
+		    }
+
+		    pIlc->ilc_func = __SEND0ADDR__;
+		    if (pIlc->ilc_poly) {
+			__flushPolyCache(pIlc->ilc_poly);
+			pIlc->ilc_poly = 0;
+		    }
+		}
+		RETURN ((*pIlc->ilc_func)(self, aSelector, nil, pIlc));
+	    } else {
+		static struct inlineCache ilc0 = __DUMMYILCSELF0(@line+1);
+		RETURN (_SEND0(self, aSelector, nil, &ilc0));
+	    }
+
+	case 1:
+	    if (InterruptPending == nil) {
+		static OBJ last1_0 = nil; static struct inlineCache ilc1_0 = __ILCPERF1(@line);
+		static OBJ last1_1 = nil; static struct inlineCache ilc1_1 = __ILCPERF1(@line);
+		static OBJ last1_2 = nil; static struct inlineCache ilc1_2 = __ILCPERF1(@line);
+		static OBJ last1_3 = nil; static struct inlineCache ilc1_3 = __ILCPERF1(@line);
+		static int flip1 = 0;
+		struct inlineCache *pIlc;
+
+		if (aSelector == last1_0) {
+		    pIlc = &ilc1_0;
+		} else if (aSelector == last1_1) {
+		    pIlc = &ilc1_1;
+		} else if (aSelector == last1_2) {
+		    pIlc = &ilc1_2;
+		} else if (aSelector == last1_3) {
+		    pIlc = &ilc1_3;
+		} else {
+		    if (flip1 == 0) {
+			pIlc = &ilc1_0;
+			flip1 = 1;
+			last1_0 = aSelector;
+		    } else if (flip1 == 1) {
+			pIlc = &ilc1_1;
+			flip1 = 2;
+			last1_1 = aSelector;
+		    } else if (flip1 == 2) {
+			pIlc = &ilc1_2;
+			flip1 = 3;
+			last1_2 = aSelector;
+		    } else {
+			pIlc = &ilc1_3;
+			flip1 = 0;
+			last1_3 = aSelector;
+		    }
+
+		    pIlc->ilc_func = __SEND1ADDR__;
+		    if (pIlc->ilc_poly) {
+			__flushPolyCache(pIlc->ilc_poly);
+			pIlc->ilc_poly = 0;
+		    }
+		}
+		RETURN ((*pIlc->ilc_func)(self, aSelector, nil, pIlc, argP[0]));
+	    } else {
+		static struct inlineCache ilc1 = __DUMMYILCSELF1(@line+1);
+		RETURN (_SEND1(self, aSelector, nil, &ilc1, argP[0]));
+	    }
+
+	case 2:
+	    if (InterruptPending == nil) {
+		static OBJ last2_0 = nil; static struct inlineCache ilc2_0 = __ILCPERF2(@line);
+		static OBJ last2_1 = nil; static struct inlineCache ilc2_1 = __ILCPERF2(@line);
+		static int flip2 = 0;
+		struct inlineCache *pIlc;
+
+		if (aSelector == last2_0) {
+		    pIlc = &ilc2_0;
+		} else if (aSelector == last2_1) {
+		    pIlc = &ilc2_1;
+		} else {
+		    if (flip2 == 0) {
+			pIlc = &ilc2_0;
+			flip2 = 1;
+			last2_0 = aSelector;
+		    } else {
+			pIlc = &ilc2_1;
+			flip2 = 0;
+			last2_1 = aSelector;
+		    }
+
+		    pIlc->ilc_func = __SEND2ADDR__;
+		    if (pIlc->ilc_poly) {
+			__flushPolyCache(pIlc->ilc_poly);
+			pIlc->ilc_poly = 0;
+		    }
+		}
+		RETURN ((*pIlc->ilc_func)(self, aSelector, nil, pIlc, argP[0], argP[1]));
+	    } else {
+		static struct inlineCache ilc2 = __DUMMYILCSELF2(@line+1);
+		RETURN (_SEND2(self, aSelector, nil, &ilc2, argP[0], argP[1]));
+	    }
+
+	case 3:
+	    if (InterruptPending == nil) {
+		static OBJ last3_0 = nil; static struct inlineCache ilc3_0 = __ILCPERF3(@line);
+		static OBJ last3_1 = nil; static struct inlineCache ilc3_1 = __ILCPERF3(@line);
+		static int flip3 = 0;
+		struct inlineCache *pIlc;
+
+		if (aSelector == last3_0) {
+		    pIlc = &ilc3_0;
+		} else if (aSelector == last3_1) {
+		    pIlc = &ilc3_1;
+		} else {
+		    if (flip3 == 0) {
+			pIlc = &ilc3_0;
+			flip3 = 1;
+			last3_0 = aSelector;
+		    } else {
+			pIlc = &ilc3_1;
+			flip3 = 0;
+			last3_1 = aSelector;
+		    }
+
+		    pIlc->ilc_func = __SEND3ADDR__;
+		    if (pIlc->ilc_poly) {
+			__flushPolyCache(pIlc->ilc_poly);
+			pIlc->ilc_poly = 0;
+		    }
+		}
+		RETURN ((*pIlc->ilc_func)(self, aSelector, nil, pIlc, argP[0], argP[1], argP[2]));
+	    } else {
+		static struct inlineCache ilc3 = __DUMMYILCSELF3(@line+1);
+		RETURN (_SEND3(self, aSelector, nil, &ilc3, argP[0], argP[1], argP[2]));
+	    }
+
+	case 4:
+	    {
+		static OBJ last4 = nil; static struct inlineCache ilc4 = __ILCPERF4(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last4)) {
+		    ilc4.ilc_func = __SEND4ADDR__;
+		    if (ilc4.ilc_poly) {
+			__flushPolyCache(ilc4.ilc_poly);
+			ilc4.ilc_poly = 0;
+		    }
+		    last4 = aSelector;
+		}
+		RETURN ( (*ilc4.ilc_func)(self, aSelector, nil, &ilc4,
+						argP[0], argP[1], argP[2], argP[3]));
+	    }
+
+	case 5:
+	    {
+		static OBJ last5 = nil; static struct inlineCache ilc5 = __ILCPERF5(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last5)) {
+		    ilc5.ilc_func = __SEND5ADDR__;
+		    if (ilc5.ilc_poly) {
+			__flushPolyCache(ilc5.ilc_poly);
+			ilc5.ilc_poly = 0;
+		    }
+		    last5 = aSelector;
+		}
+		RETURN ( (*ilc5.ilc_func)(self, aSelector, nil, &ilc5,
+						argP[0], argP[1], argP[2], argP[3], argP[4]));
+	    }
+
+	case 6:
+	    {
+		static OBJ last6 = nil; static struct inlineCache ilc6 = __ILCPERF6(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last6)) {
+		    ilc6.ilc_func = __SEND6ADDR__;
+		    if (ilc6.ilc_poly) {
+			__flushPolyCache(ilc6.ilc_poly);
+			ilc6.ilc_poly = 0;
+		    }
+		    last6 = aSelector;
+		}
+		RETURN ( (*ilc6.ilc_func)(self, aSelector, nil, &ilc6,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5]));
+	    }
+
+	case 7:
+	    {
+		static OBJ last7 = nil; static struct inlineCache ilc7 = __ILCPERF7(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last7)) {
+		    ilc7.ilc_func = __SEND7ADDR__;
+		    if (ilc7.ilc_poly) {
+			__flushPolyCache(ilc7.ilc_poly);
+			ilc7.ilc_poly = 0;
+		    }
+		    last7 = aSelector;
+		}
+		RETURN ( (*ilc7.ilc_func)(self, aSelector, nil, &ilc7,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5], argP[6]));
+	    }
+
+	case 8:
+	    {
+		static OBJ last8 = nil; static struct inlineCache ilc8 = __ILCPERF8(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last8)) {
+		    ilc8.ilc_func = __SEND8ADDR__;
+		    if (ilc8.ilc_poly) {
+			__flushPolyCache(ilc8.ilc_poly);
+			ilc8.ilc_poly = 0;
+		    }
+		    last8 = aSelector;
+		}
+		RETURN ( (*ilc8.ilc_func)(self, aSelector, nil, &ilc8,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5], argP[6], argP[7]));
+	    }
+
+	case 9:
+	    {
+		static OBJ last9 = nil; static struct inlineCache ilc9 = __ILCPERF9(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last9)) {
+		    ilc9.ilc_func = __SEND9ADDR__;
+		    if (ilc9.ilc_poly) {
+			__flushPolyCache(ilc9.ilc_poly);
+			ilc9.ilc_poly = 0;
+		    }
+		    last9 = aSelector;
+		}
+		RETURN ( (*ilc9.ilc_func)(self, aSelector, nil, &ilc9,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5], argP[6], argP[7], argP[8]));
+	    }
+
+	case 10:
+	    {
+		static OBJ last10 = nil; static struct inlineCache ilc10 = __ILCPERF10(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last10)) {
+		    ilc10.ilc_func = __SEND10ADDR__;
+		    if (ilc10.ilc_poly) {
+			__flushPolyCache(ilc10.ilc_poly);
+			ilc10.ilc_poly = 0;
+		    }
+		    last10 = aSelector;
+		}
+		RETURN ( (*ilc10.ilc_func)(self, aSelector, nil, &ilc10,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5], argP[6], argP[7], argP[8], argP[9]));
+	    }
+
+	case 11:
+	    {
+		static OBJ last11 = nil; static struct inlineCache ilc11 = __ILCPERF11(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last11)) {
+		    ilc11.ilc_func = __SEND11ADDR__;
+		    if (ilc11.ilc_poly) {
+			__flushPolyCache(ilc11.ilc_poly);
+			ilc11.ilc_poly = 0;
+		    }
+		    last11 = aSelector;
+		}
+		RETURN ( (*ilc11.ilc_func)(self, aSelector, nil, &ilc11,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5], argP[6], argP[7], argP[8], argP[9],
+						argP[10]));
+	    }
+
+	case 12:
+	    {
+		static OBJ last12 = nil; static struct inlineCache ilc12 = __ILCPERF12(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last12)) {
+		    ilc12.ilc_func = __SEND12ADDR__;
+		    if (ilc12.ilc_poly) {
+			__flushPolyCache(ilc12.ilc_poly);
+			ilc12.ilc_poly = 0;
+		    }
+		    last12 = aSelector;
+		}
+		RETURN ( (*ilc12.ilc_func)(self, aSelector, nil, &ilc12,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5], argP[6], argP[7], argP[8], argP[9],
+						argP[10], argP[11]));
+	    }
+
+	case 13:
+	    {
+		static OBJ last13 = nil; static struct inlineCache ilc13 = __ILCPERF13(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last13)) {
+		    ilc13.ilc_func = __SEND13ADDR__;
+		    if (ilc13.ilc_poly) {
+			__flushPolyCache(ilc13.ilc_poly);
+			ilc13.ilc_poly = 0;
+		    }
+		    last13 = aSelector;
+		}
+		RETURN ( (*ilc13.ilc_func)(self, aSelector, nil, &ilc13,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5], argP[6], argP[7], argP[8], argP[9],
+						argP[10], argP[11], argP[12]));
+	    }
+
+	case 14:
+	    {
+		static OBJ last14 = nil; static struct inlineCache ilc14 = __ILCPERF14(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last14)) {
+		    ilc14.ilc_func = __SEND14ADDR__;
+		    if (ilc14.ilc_poly) {
+			__flushPolyCache(ilc14.ilc_poly);
+			ilc14.ilc_poly = 0;
+		    }
+		    last14 = aSelector;
+		}
+		RETURN ( (*ilc14.ilc_func)(self, aSelector, nil, &ilc14,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5], argP[6], argP[7], argP[8], argP[9],
+						argP[10], argP[11], argP[12], argP[13]));
+	    }
+
+	case 15:
+	    {
+		static OBJ last15 = nil; static struct inlineCache ilc15 = __ILCPERF15(@line);
+
+		if ((InterruptPending != nil) || (aSelector != last15)) {
+		    ilc15.ilc_func = __SEND15ADDR__;
+		    if (ilc15.ilc_poly) {
+			__flushPolyCache(ilc15.ilc_poly);
+			ilc15.ilc_poly = 0;
+		    }
+		    last15 = aSelector;
+		}
+		RETURN ( (*ilc15.ilc_func)(self, aSelector, nil, &ilc15,
+						argP[0], argP[1], argP[2], argP[3], argP[4],
+						argP[5], argP[6], argP[7], argP[8], argP[9],
+						argP[10], argP[11], argP[12], argP[13],
+						argP[14]));
+	    }
     }
 bad:;
 %}.
@@ -6062,7 +6068,7 @@
      If the message expects an argument, pass arg."
 
     aSelector numArgs == 1 ifTrue:[
-        ^ self perform:aSelector with:arg
+	^ self perform:aSelector with:arg
     ].
     ^ self perform:aSelector
 
@@ -6087,10 +6093,10 @@
 
     numArgs := aSelector numArgs.
     numArgs == 0 ifTrue:[
-        ^ self perform:aSelector
+	^ self perform:aSelector
     ].
     numArgs == 1 ifTrue:[
-        ^ self perform:aSelector with:optionalArg1
+	^ self perform:aSelector with:optionalArg1
     ].
     ^ self perform:aSelector with:optionalArg1 with:optionalArg2.
 
@@ -6115,13 +6121,13 @@
 
     numArgs := aSelector numArgs.
     numArgs == 0 ifTrue:[
-        ^ self perform:aSelector
+	^ self perform:aSelector
     ].
     numArgs == 1 ifTrue:[
-        ^ self perform:aSelector with:optionalArg1
+	^ self perform:aSelector with:optionalArg1
     ].
     numArgs == 2 ifTrue:[
-        ^ self perform:aSelector with:optionalArg1 with:optionalArg2
+	^ self perform:aSelector with:optionalArg1 with:optionalArg2
     ].
     ^ self perform:aSelector with:optionalArg1 with:optionalArg2 with:optionalArg3.
 
@@ -6146,16 +6152,16 @@
 
     numArgs := aSelector numArgs.
     numArgs == 0 ifTrue:[
-        ^ self perform:aSelector
+	^ self perform:aSelector
     ].
     numArgs == 1 ifTrue:[
-        ^ self perform:aSelector with:optionalArg1
+	^ self perform:aSelector with:optionalArg1
     ].
     numArgs == 2 ifTrue:[
-        ^ self perform:aSelector with:optionalArg1 with:optionalArg2
+	^ self perform:aSelector with:optionalArg1 with:optionalArg2
     ].
     numArgs == 3 ifTrue:[
-        ^ self perform:aSelector with:optionalArg1 with:optionalArg2 with:optionalArg3
+	^ self perform:aSelector with:optionalArg1 with:optionalArg2 with:optionalArg3
     ].
     ^ self perform:aSelector with:optionalArg1 with:optionalArg2 with:optionalArg3 with:optionalArg4.
 
@@ -6177,8 +6183,8 @@
      This is a non-object-oriented entry, applying a method
      in a functional way on a receiver.
      Warning:
-         Take care for the method to be appropriate for the
-         receiver - no checking is done by the VM."
+	 Take care for the method to be appropriate for the
+	 receiver - no checking is done by the VM."
 
     ^ aMethod valueWithReceiver:self arguments:#()
 
@@ -6207,8 +6213,8 @@
      This is a non-object-oriented entry, applying a method
      in a functional way on a receiver.
      Warning:
-         Take care for the method to be appropriate for the
-         receiver - no checking is done by the VM."
+	 Take care for the method to be appropriate for the
+	 receiver - no checking is done by the VM."
 
     ^ aMethod valueWithReceiver:self arguments:argumentArray
 
@@ -6228,8 +6234,8 @@
      This is a non-object-oriented entry, applying a method
      in a functional way on a receiver.
      Warning:
-         Take care for the method to be appropriate for the
-         receiver - no checking is done by the VM."
+	 Take care for the method to be appropriate for the
+	 receiver - no checking is done by the VM."
 
     ^ aMethod valueWithReceiver:self arguments:(Array with:arg)
 
@@ -6249,8 +6255,8 @@
      This is a non-object-oriented entry, applying a method
      in a functional way on a receiver.
      Warning:
-         Take care for the method to be appropriate for the
-         receiver - no checking is done by the VM."
+	 Take care for the method to be appropriate for the
+	 receiver - no checking is done by the VM."
 
     ^ aMethod valueWithReceiver:self arguments:(Array with:arg1 with:arg2)
 
@@ -6272,8 +6278,8 @@
      This is a non-object-oriented entry, applying a method
      in a functional way on a receiver.
      Warning:
-         Take care for the method to be appropriate for the
-         receiver - no checking is done by the VM."
+	 Take care for the method to be appropriate for the
+	 receiver - no checking is done by the VM."
 
     ^ aMethod valueWithReceiver:self arguments:(Array with:arg1 with:arg2 with:arg3)
 
@@ -6295,10 +6301,10 @@
 
     ret := 0.
     anAspectSymbol notNil ifTrue:[
-        ret := self perform:anAspectSymbol ifNotUnderstood:[0].
+	ret := self perform:anAspectSymbol ifNotUnderstood:[0].
     ].
     ret == 0 ifTrue:[
-        ^ self elementDescriptorForNonNilInstanceVariables
+	^ self elementDescriptorForNonNilInstanceVariables
     ].
     ^ ret.
 !
@@ -6331,16 +6337,16 @@
 
     instVarNames := theClass allInstVarNames.
     1 to:instSize do:[:i | |var|
-        var := self instVarAt:i.
-        (aBlock value:var) ifTrue:[
-            children add:((instVarNames at:i) -> var)
-        ]
+	var := self instVarAt:i.
+	(aBlock value:var) ifTrue:[
+	    children add:((instVarNames at:i) -> var)
+	]
     ].
 
     varSize ~~ 0 ifTrue:[
-        1 to:varSize do:[:i |
-            children add:(i -> (self basicAt:i))
-        ]
+	1 to:varSize do:[:i |
+	    children add:(i -> (self basicAt:i))
+	]
     ].
 
     ^ children.
@@ -6393,7 +6399,7 @@
     | cls|
 
     (cls := self class) == self ifTrue:[
-        ^ 'a funny object'
+	^ 'a funny object'
     ].
     ^ cls nameWithArticle
 
@@ -6415,10 +6421,10 @@
     |s|
 
     s := Processor activeProcess isSystemProcess
-                        ifTrue:Stderr
-                        ifFalse:Transcript.
+			ifTrue:Stderr
+			ifFalse:Transcript.
     StreamError catch:[
-        self printOn:s
+	self printOn:s
     ].
 "/    s ~~ Stderr ifTrue:[
 "/        self printOn:Stderr
@@ -6437,11 +6443,11 @@
     |s|
 
     s := Processor activeProcess isSystemProcess
-                        ifTrue:Stderr
-                        ifFalse:Transcript.
+			ifTrue:Stderr
+			ifFalse:Transcript.
     StreamError catch:[
-        self printOn:s.
-        s cr
+	self printOn:s.
+	s cr
     ].
 "/    s ~~ Stderr ifTrue:[
 "/        self printOn:Stderr.
@@ -6485,7 +6491,7 @@
      These messages can be turned on/off by 'Object infoPrinting:true/false'"
 
     InfoPrinting == true ifTrue:[
-        self errorPrint
+	self errorPrint
     ]
 !
 
@@ -6498,7 +6504,7 @@
      These messages can be turned on/off by 'Object infoPrinting:true/false'"
 
     InfoPrinting == true ifTrue:[
-        self errorPrintCR
+	self errorPrintCR
     ]
 
     "Created: 20.5.1996 / 10:21:28 / cg"
@@ -6522,8 +6528,8 @@
     "/ (depends on string to respond to #print)
 
     Stdout isNil ifTrue:[
-        self printString print.
-        ^ self
+	self printString print.
+	^ self
     ].
     self printOn:Stdout
 
@@ -6538,8 +6544,8 @@
     "/ (depends on string to respond to #printCR)
 
     Stdout isNil ifTrue:[
-        self printString printCR.
-        ^ self
+	self printString printCR.
+	^ self
     ].
     self printOn:Stdout.
     Stdout cr
@@ -6767,9 +6773,9 @@
     |rslt|
 
     Error handle:[:ex |
-        rslt := exceptionBlock value
+	rslt := exceptionBlock value
     ] do:[
-        rslt := self printString
+	rslt := self printString
     ].
     ^ rslt
 !
@@ -6910,12 +6916,12 @@
     |myClass hasSemi sz "{ Class: SmallInteger }" |
 
     thisContext isRecursive ifTrue:[
-        Object recursiveStoreStringSignal raiseRequestWith:self.
-        'Object [error]: storeString of self referencing object (' errorPrint.
-        self class name errorPrint.
-        ')' errorPrintCR.
-        aStream nextPutAll:'#("recursive")'.
-        ^ self
+	Object recursiveStoreStringSignal raiseRequestWith:self.
+	'Object [error]: storeString of self referencing object (' errorPrint.
+	self class name errorPrint.
+	')' errorPrintCR.
+	aStream nextPutAll:'#("recursive")'.
+	^ self
     ].
 
     myClass := self class.
@@ -6924,34 +6930,34 @@
 
     hasSemi := false.
     myClass isVariable ifTrue:[
-        aStream nextPutAll:' basicNew:'.
-        self basicSize printOn:aStream
+	aStream nextPutAll:' basicNew:'.
+	self basicSize printOn:aStream
     ] ifFalse:[
-        aStream nextPutAll:' basicNew'
+	aStream nextPutAll:' basicNew'
     ].
 
     sz := myClass instSize.
     1 to:sz do:[:i |
-        aStream nextPutAll:' instVarAt:'.
-        i printOn:aStream.
-        aStream nextPutAll:' put:'.
-        (self instVarAt:i) storeOn:aStream.
-        aStream nextPut:$;.
-        hasSemi := true
+	aStream nextPutAll:' instVarAt:'.
+	i printOn:aStream.
+	aStream nextPutAll:' put:'.
+	(self instVarAt:i) storeOn:aStream.
+	aStream nextPut:$;.
+	hasSemi := true
     ].
     myClass isVariable ifTrue:[
-        sz := self basicSize.
-        1 to:sz do:[:i |
-            aStream nextPutAll:' basicAt:'.
-            i printOn:aStream.
-            aStream nextPutAll:' put:'.
-            (self basicAt:i) storeOn:aStream.
-            aStream nextPut:$;.
-            hasSemi := true
-        ]
+	sz := self basicSize.
+	1 to:sz do:[:i |
+	    aStream nextPutAll:' basicAt:'.
+	    i printOn:aStream.
+	    aStream nextPutAll:' put:'.
+	    (self basicAt:i) storeOn:aStream.
+	    aStream nextPut:$;.
+	    hasSemi := true
+	]
     ].
     hasSemi ifTrue:[
-        aStream nextPutAll:' yourself'
+	aStream nextPutAll:' yourself'
     ].
     aStream nextPut:$).
 
@@ -7029,43 +7035,43 @@
     nInstBytes = OHDR_SIZE + __OBJS2BYTES__( __intVal(__ClassInstPtr(myClass)->c_ninstvars) );
 
     switch ((INT)(__ClassInstPtr(myClass)->c_flags) & __MASKSMALLINT(ARRAYMASK)) {
-        case __MASKSMALLINT(POINTERARRAY):
-        case __MASKSMALLINT(WKPOINTERARRAY):
-            nbytes -= nInstBytes;
-            RETURN ( __mkSmallInteger(__BYTES2OBJS__(nbytes)) );
-
-        case __MASKSMALLINT(BYTEARRAY):
-            nbytes -= nInstBytes;
-            RETURN ( __mkSmallInteger(nbytes / sizeof(char)) );
-
-        case __MASKSMALLINT(FLOATARRAY):
-            nbytes -= nInstBytes;
-            RETURN ( __mkSmallInteger(nbytes / sizeof(float)) );
-
-        case __MASKSMALLINT(DOUBLEARRAY):
+	case __MASKSMALLINT(POINTERARRAY):
+	case __MASKSMALLINT(WKPOINTERARRAY):
+	    nbytes -= nInstBytes;
+	    RETURN ( __mkSmallInteger(__BYTES2OBJS__(nbytes)) );
+
+	case __MASKSMALLINT(BYTEARRAY):
+	    nbytes -= nInstBytes;
+	    RETURN ( __mkSmallInteger(nbytes / sizeof(char)) );
+
+	case __MASKSMALLINT(FLOATARRAY):
+	    nbytes -= nInstBytes;
+	    RETURN ( __mkSmallInteger(nbytes / sizeof(float)) );
+
+	case __MASKSMALLINT(DOUBLEARRAY):
 #ifdef __NEED_DOUBLE_ALIGN
-            nInstBytes = (nInstBytes-1+__DOUBLE_ALIGN) &~ (__DOUBLE_ALIGN-1);
+	    nInstBytes = (nInstBytes-1+__DOUBLE_ALIGN) &~ (__DOUBLE_ALIGN-1);
 #endif
-            nbytes -= nInstBytes;
-            RETURN ( __mkSmallInteger(nbytes / sizeof(double)) );
-
-        case __MASKSMALLINT(WORDARRAY):
-        case __MASKSMALLINT(SWORDARRAY):
-            nbytes -= nInstBytes;
-            RETURN ( __mkSmallInteger(nbytes>>1) ); /* notice the hardcoded 2 here - not sizeof(short) */
-
-        case __MASKSMALLINT(LONGARRAY):
-        case __MASKSMALLINT(SLONGARRAY):
-            nbytes -= nInstBytes;
-            RETURN ( __mkSmallInteger(nbytes>>2) ); /* notice the hardcoded 4 here - not sizeof(int) */
-
-        case __MASKSMALLINT(LONGLONGARRAY):
-        case __MASKSMALLINT(SLONGLONGARRAY):
+	    nbytes -= nInstBytes;
+	    RETURN ( __mkSmallInteger(nbytes / sizeof(double)) );
+
+	case __MASKSMALLINT(WORDARRAY):
+	case __MASKSMALLINT(SWORDARRAY):
+	    nbytes -= nInstBytes;
+	    RETURN ( __mkSmallInteger(nbytes>>1) ); /* notice the hardcoded 2 here - not sizeof(short) */
+
+	case __MASKSMALLINT(LONGARRAY):
+	case __MASKSMALLINT(SLONGARRAY):
+	    nbytes -= nInstBytes;
+	    RETURN ( __mkSmallInteger(nbytes>>2) ); /* notice the hardcoded 4 here - not sizeof(int) */
+
+	case __MASKSMALLINT(LONGLONGARRAY):
+	case __MASKSMALLINT(SLONGLONGARRAY):
 #ifdef __NEED_LONGLONG_ALIGN
-            nInstBytes = (nInstBytes-1+__LONGLONG_ALIGN) &~ (__LONGLONG_ALIGN-1);
+	    nInstBytes = (nInstBytes-1+__LONGLONG_ALIGN) &~ (__LONGLONG_ALIGN-1);
 #endif
-            nbytes -= nInstBytes;
-            RETURN ( __mkSmallInteger(nbytes>>3) ); /* notice the hardcoded 8 here - not sizeof(long long) */
+	    nbytes -= nInstBytes;
+	    RETURN ( __mkSmallInteger(nbytes>>3) ); /* notice the hardcoded 8 here - not sizeof(long long) */
     }
 %}.
     ^ 0
@@ -7082,36 +7088,36 @@
 
     myClass := self class.
     myClass isVariable ifTrue:[
-        myClass isPointers ifFalse:[
-            myClass isBytes ifTrue:[
-                ^ self basicSize.
-            ].
-            myClass isWords ifTrue:[
-                ^ self basicSize * 2.
-            ].
-            myClass isSignedWords ifTrue:[
-                ^ self basicSize * 2.
-            ].
-            myClass isLongs ifTrue:[
-                ^ self basicSize * 4.
-            ].
-            myClass isSignedLongs ifTrue:[
-                ^ self basicSize * 4.
-            ].
-            myClass isLongLongs ifTrue:[
-                ^ self basicSize * 8.
-            ].
-            myClass isSignedLongLongs ifTrue:[
-                ^ self basicSize * 8.
-            ].
-            myClass isFloats ifTrue:[
-                ^ self basicSize * (ExternalBytes sizeofFloat)
-            ].
-            myClass isDoubles ifTrue:[
-                ^ self basicSize * (ExternalBytes sizeofDouble)
-            ].
-            self error:'unknown variable size class species'.
-        ]
+	myClass isPointers ifFalse:[
+	    myClass isBytes ifTrue:[
+		^ self basicSize.
+	    ].
+	    myClass isWords ifTrue:[
+		^ self basicSize * 2.
+	    ].
+	    myClass isSignedWords ifTrue:[
+		^ self basicSize * 2.
+	    ].
+	    myClass isLongs ifTrue:[
+		^ self basicSize * 4.
+	    ].
+	    myClass isSignedLongs ifTrue:[
+		^ self basicSize * 4.
+	    ].
+	    myClass isLongLongs ifTrue:[
+		^ self basicSize * 8.
+	    ].
+	    myClass isSignedLongLongs ifTrue:[
+		^ self basicSize * 8.
+	    ].
+	    myClass isFloats ifTrue:[
+		^ self basicSize * (ExternalBytes sizeofFloat)
+	    ].
+	    myClass isDoubles ifTrue:[
+		^ self basicSize * (ExternalBytes sizeofDouble)
+	    ].
+	    self error:'unknown variable size class species'.
+	]
     ].
     ^ 0
 
@@ -7152,7 +7158,7 @@
 %{  /* NOCONTEXT */
 
     if (__lookup(__Class(self), aSelector) == nil) {
-        RETURN ( false );
+	RETURN ( false );
     }
     RETURN ( true );
 %}
@@ -7193,7 +7199,6 @@
     ^ self
 ! !
 
-
 !Object methodsFor:'secure message sending'!
 
 ?: selector
@@ -7259,17 +7264,17 @@
     |val ok|
 
     MessageNotUnderstood handle:[:ex |
-        "/ reject, if the bad message is not the one
-        "/ we have sent originally
-        (ex selector == aSelector and:[ex receiver == self]) ifFalse:[
-            ex reject
-        ].
+	"/ reject, if the bad message is not the one
+	"/ we have sent originally
+	(ex selector == aSelector and:[ex receiver == self]) ifFalse:[
+	    ex reject
+	].
     ] do:[
-        val := self perform:aSelector.
-        ok := true.
+	val := self perform:aSelector.
+	ok := true.
     ].
     ok isNil ifTrue:[
-        ^ exceptionBlock value
+	^ exceptionBlock value
     ].
     ^ val
 
@@ -7293,17 +7298,17 @@
     |val ok|
 
     MessageNotUnderstood handle:[:ex |
-        "/ reject, if the bad message is not the one
-        "/ we have sent originally
-        (ex selector == aSelector and:[ex receiver == self]) ifFalse:[
-            ex reject
-        ]
+	"/ reject, if the bad message is not the one
+	"/ we have sent originally
+	(ex selector == aSelector and:[ex receiver == self]) ifFalse:[
+	    ex reject
+	]
     ] do:[
-        val := self perform:aSelector with:argument.
-        ok := true.
+	val := self perform:aSelector with:argument.
+	ok := true.
     ].
     ok isNil ifTrue:[
-        ^ exceptionBlock value
+	^ exceptionBlock value
     ].
     ^ val
 
@@ -7330,17 +7335,17 @@
     |val ok|
 
     MessageNotUnderstood handle:[:ex |
-        "/ reject, if the bad message is not the one
-        "/ we have sent originally
-        (ex selector == aSelector and:[ex receiver == self]) ifFalse:[
-            ex reject
-        ]
+	"/ reject, if the bad message is not the one
+	"/ we have sent originally
+	(ex selector == aSelector and:[ex receiver == self]) ifFalse:[
+	    ex reject
+	]
     ] do:[
-        val := self perform:aSelector with:arg1 with:arg2.
-        ok := true.
+	val := self perform:aSelector with:arg1 with:arg2.
+	ok := true.
     ].
     ok isNil ifTrue:[
-        ^ exceptionBlock value
+	^ exceptionBlock value
     ].
     ^ val
 !
@@ -7358,17 +7363,17 @@
     |val ok|
 
     MessageNotUnderstood handle:[:ex |
-        "/ reject, if the bad message is not the one
-        "/ we have sent originally.
-        (ex selector == aSelector and:[ex receiver == self]) ifFalse:[
-            ex reject
-        ]
+	"/ reject, if the bad message is not the one
+	"/ we have sent originally.
+	(ex selector == aSelector and:[ex receiver == self]) ifFalse:[
+	    ex reject
+	]
     ] do:[
-        val := self perform:aSelector withArguments:argumentArray.
-        ok := true.
+	val := self perform:aSelector withArguments:argumentArray.
+	ok := true.
     ].
     ok isNil ifTrue:[
-        ^ exceptionBlock value
+	^ exceptionBlock value
     ].
     ^ val
 
@@ -7424,148 +7429,148 @@
     int nInsts, inst;
 
     if (! __isNonNilObject(self)) {
-        RETURN (false);
+	RETURN (false);
     }
 
     if (__isArrayLike(aCollection)) {
-        int nObjs = __arraySize(aCollection);
-        char *minAddr = 0, *maxAddr = 0;
-
-        if (nObjs == 0) {
-            RETURN (false);
-        }
-
-        /*
-         * a little optimization: use the fact that all old objects
-         * refering to a new object are on the remSet; if I am not,
-         * a trivial reject is possible, if all objects are newbees.
-         * as a side effect, gather min/max addresses
-         */
-        if ((__qSpace(self) <= OLDSPACE) && !__isRemembered(self)) {
-            int allNewBees = 1;
-            int i;
-
-            minAddr = (char *)(__ArrayInstPtr(aCollection)->a_element[0]);
-            maxAddr = minAddr;
-
-            for (i=0; i<nObjs; i++) {
-                OBJ anObject;
-
-                anObject = __ArrayInstPtr(aCollection)->a_element[i];
-
-                if (__isNonNilObject(anObject)) {
-                    int spc;
-
-                    if (((spc = __qSpace(anObject)) != NEWSPACE) && (spc != SURVSPACE)) {
-                        allNewBees = 0;
-                    }
-                }
-
-                if ((char *)anObject < minAddr) {
-                    minAddr = (char *)anObject;
-                } else if ((char *)anObject > maxAddr) {
-                    maxAddr = (char *)anObject;
-                }
-            }
-            if (allNewBees) {
-                RETURN (false);
-            }
-        }
-
-        /*
-         * fetch min/max in searchList (if not already done)
-         */
-        if (minAddr == 0) {
-            int i;
-
-            for (i=0; i<nObjs; i++) {
-                OBJ anObject;
-
-                anObject = __ArrayInstPtr(aCollection)->a_element[i];
-                if ((char *)anObject < minAddr) {
-                    minAddr = (char *)anObject;
-                } else if ((char *)anObject > maxAddr) {
-                    maxAddr = (char *)anObject;
-                }
-            }
-        }
-
-        cls = __qClass(self);
-        if (((char *)cls >= minAddr) && ((char *)cls <= maxAddr)) {
+	int nObjs = __arraySize(aCollection);
+	char *minAddr = 0, *maxAddr = 0;
+
+	if (nObjs == 0) {
+	    RETURN (false);
+	}
+
+	/*
+	 * a little optimization: use the fact that all old objects
+	 * refering to a new object are on the remSet; if I am not,
+	 * a trivial reject is possible, if all objects are newbees.
+	 * as a side effect, gather min/max addresses
+	 */
+	if ((__qSpace(self) <= OLDSPACE) && !__isRemembered(self)) {
+	    int allNewBees = 1;
+	    int i;
+
+	    minAddr = (char *)(__ArrayInstPtr(aCollection)->a_element[0]);
+	    maxAddr = minAddr;
+
+	    for (i=0; i<nObjs; i++) {
+		OBJ anObject;
+
+		anObject = __ArrayInstPtr(aCollection)->a_element[i];
+
+		if (__isNonNilObject(anObject)) {
+		    int spc;
+
+		    if (((spc = __qSpace(anObject)) != NEWSPACE) && (spc != SURVSPACE)) {
+			allNewBees = 0;
+		    }
+		}
+
+		if ((char *)anObject < minAddr) {
+		    minAddr = (char *)anObject;
+		} else if ((char *)anObject > maxAddr) {
+		    maxAddr = (char *)anObject;
+		}
+	    }
+	    if (allNewBees) {
+		RETURN (false);
+	    }
+	}
+
+	/*
+	 * fetch min/max in searchList (if not already done)
+	 */
+	if (minAddr == 0) {
+	    int i;
+
+	    for (i=0; i<nObjs; i++) {
+		OBJ anObject;
+
+		anObject = __ArrayInstPtr(aCollection)->a_element[i];
+		if ((char *)anObject < minAddr) {
+		    minAddr = (char *)anObject;
+		} else if ((char *)anObject > maxAddr) {
+		    maxAddr = (char *)anObject;
+		}
+	    }
+	}
+
+	cls = __qClass(self);
+	if (((char *)cls >= minAddr) && ((char *)cls <= maxAddr)) {
 #if defined(memsrch4)
-            if (memsrch4(__arrayVal(aCollection), (INT)cls, nObjs)) {
-                RETURN (true);
-            }
+	    if (memsrch4(__arrayVal(aCollection), (INT)cls, nObjs)) {
+		RETURN (true);
+	    }
 #else
-            int i;
-
-            for (i=0; i<nObjs; i++) {
-                OBJ anObject;
-
-                anObject = __ArrayInstPtr(aCollection)->a_element[i];
-                if (cls == anObject) {
-                    RETURN (true);
-                }
-            }
+	    int i;
+
+	    for (i=0; i<nObjs; i++) {
+		OBJ anObject;
+
+		anObject = __ArrayInstPtr(aCollection)->a_element[i];
+		if (cls == anObject) {
+		    RETURN (true);
+		}
+	    }
 #endif /* memsrch4 */
-        }
-
-        flags = __ClassInstPtr(cls)->c_flags;
-        if (((INT)flags & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(POINTERARRAY)) {
-            nInsts = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
-        } else {
-            nInsts = __intVal(__ClassInstPtr(cls)->c_ninstvars);
-        }
-        if (! nInsts) {
-            RETURN (false);
-        }
-
-        if (nObjs == 1) {
-            /* better reverse the loop */
-            OBJ anObject;
-
-            anObject = __ArrayInstPtr(aCollection)->a_element[0];
+	}
+
+	flags = __ClassInstPtr(cls)->c_flags;
+	if (((INT)flags & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(POINTERARRAY)) {
+	    nInsts = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
+	} else {
+	    nInsts = __intVal(__ClassInstPtr(cls)->c_ninstvars);
+	}
+	if (! nInsts) {
+	    RETURN (false);
+	}
+
+	if (nObjs == 1) {
+	    /* better reverse the loop */
+	    OBJ anObject;
+
+	    anObject = __ArrayInstPtr(aCollection)->a_element[0];
 #if defined(memsrch4)
-            if (memsrch4(__InstPtr(self)->i_instvars, (INT)anObject, nInsts)) {
-                RETURN (true);
-            }
+	    if (memsrch4(__InstPtr(self)->i_instvars, (INT)anObject, nInsts)) {
+		RETURN (true);
+	    }
 #else
-            for (inst=0; inst<nInsts; inst++) {
-                if ((__InstPtr(self)->i_instvars[inst]) == anObject) {
-                    RETURN (true);
-                }
-            }
+	    for (inst=0; inst<nInsts; inst++) {
+		if ((__InstPtr(self)->i_instvars[inst]) == anObject) {
+		    RETURN (true);
+		}
+	    }
 #endif
-            RETURN (false);
-        }
-
-        for (inst=0; inst<nInsts; inst++) {
-            OBJ instVar = __InstPtr(self)->i_instvars[inst];
-            int i;
-
-            if (((char *)instVar >= minAddr) && ((char *)instVar <= maxAddr)) {
+	    RETURN (false);
+	}
+
+	for (inst=0; inst<nInsts; inst++) {
+	    OBJ instVar = __InstPtr(self)->i_instvars[inst];
+	    int i;
+
+	    if (((char *)instVar >= minAddr) && ((char *)instVar <= maxAddr)) {
 #if defined(memsrch4)
-                if (memsrch4(__arrayVal(aCollection), (INT)instVar, nObjs)) {
-                    RETURN (true);
-                }
+		if (memsrch4(__arrayVal(aCollection), (INT)instVar, nObjs)) {
+		    RETURN (true);
+		}
 #else
-                for (i=0; i<nObjs; i++) {
-                    OBJ anObject;
-
-                    anObject = __ArrayInstPtr(aCollection)->a_element[i];
-                    if (instVar == anObject) {
-                        RETURN (true);
-                    }
-                }
+		for (i=0; i<nObjs; i++) {
+		    OBJ anObject;
+
+		    anObject = __ArrayInstPtr(aCollection)->a_element[i];
+		    if (instVar == anObject) {
+			RETURN (true);
+		    }
+		}
 #endif /* memsrch4 */
-            }
-        }
-        RETURN (false);
+	    }
+	}
+	RETURN (false);
     }
 %}.
 
     aCollection do:[:el |
-        (self referencesObject:el) ifTrue:[^ true].
+	(self referencesObject:el) ifTrue:[^ true].
     ].
     ^ false
 !
@@ -7585,19 +7590,19 @@
     "check the instance variables"
     numInst := myClass instSize.
     1 to:numInst do:[:i |
-        ((self instVarAt:i) isKindOf:aClass) ifTrue:[^ true]
+	((self instVarAt:i) isKindOf:aClass) ifTrue:[^ true]
     ].
 
     "check the indexed variables"
     myClass isVariable ifTrue:[
-        myClass isPointers ifFalse:[
-            "no need to search in non pointer fields"
-            ((aClass == Number) or:[aClass isSubclassOf:Number]) ifFalse:[^ false].
-        ].
-        numInst := self basicSize.
-        1 to:numInst do:[:i |
-            ((self basicAt:i) isKindOf:aClass) ifTrue:[^ true]
-        ]
+	myClass isPointers ifFalse:[
+	    "no need to search in non pointer fields"
+	    ((aClass == Number) or:[aClass isSubclassOf:Number]) ifFalse:[^ false].
+	].
+	numInst := self basicSize.
+	1 to:numInst do:[:i |
+	    ((self basicAt:i) isKindOf:aClass) ifTrue:[^ true]
+	]
     ].
     ^ false
 
@@ -7616,21 +7621,21 @@
     "check the instance variables"
     numInst := myClass instSize.
     1 to:numInst do:[:i |
-        inst := self instVarAt:i.
-        (checkBlock value:inst) ifTrue:[actionBlock value:inst].
+	inst := self instVarAt:i.
+	(checkBlock value:inst) ifTrue:[actionBlock value:inst].
     ].
 
     "check the indexed variables"
     myClass isVariable ifTrue:[
-        myClass isPointers ifTrue:[
-            "no need to search in non pointer fields"
-
-            numInst := self basicSize.
-            1 to:numInst do:[:i |
-                inst := self basicAt:i.
-                (checkBlock value:inst) ifTrue:[actionBlock value:inst].
-            ]
-        ]
+	myClass isPointers ifTrue:[
+	    "no need to search in non pointer fields"
+
+	    numInst := self basicSize.
+	    1 to:numInst do:[:i |
+		inst := self basicAt:i.
+		(checkBlock value:inst) ifTrue:[actionBlock value:inst].
+	    ]
+	]
     ].
 
     "
@@ -7654,24 +7659,24 @@
     "check the instance variables"
     numInst := myClass instSize.
     1 to:numInst do:[:i |
-        ((self instVarAt:i) isMemberOf:aClass) ifTrue:[^ true]
+	((self instVarAt:i) isMemberOf:aClass) ifTrue:[^ true]
     ].
 
     "check the indexed variables"
     myClass isVariable ifTrue:[
-        myClass isPointers ifFalse:[
-            "no need to search in non-pointer indexed fields"
-            myClass isLongs ifTrue:[
-                (aClass == SmallInteger or:[aClass == LargeInteger]) ifFalse:[^ false].
-            ] ifFalse:[
-                myClass isFloatsOrDoubles ifTrue:[^ aClass == Float].
-                ^ aClass == SmallInteger
-            ]
-        ].
-        numInst := self basicSize.
-        1 to:numInst do:[:i |
-            ((self basicAt:i) isMemberOf:aClass) ifTrue:[^ true]
-        ]
+	myClass isPointers ifFalse:[
+	    "no need to search in non-pointer indexed fields"
+	    myClass isLongs ifTrue:[
+		(aClass == SmallInteger or:[aClass == LargeInteger]) ifFalse:[^ false].
+	    ] ifFalse:[
+		myClass isFloatsOrDoubles ifTrue:[^ aClass == Float].
+		^ aClass == SmallInteger
+	    ]
+	].
+	numInst := self basicSize.
+	1 to:numInst do:[:i |
+	    ((self basicAt:i) isMemberOf:aClass) ifTrue:[^ true]
+	]
     ].
     ^ false
 
@@ -7691,7 +7696,7 @@
     int nInsts, i;
 
     if (! __isNonNilObject(self)) {
-        RETURN (false);
+	RETURN (false);
     }
 
     /*
@@ -7700,38 +7705,38 @@
      * a trivial reject is possible, if anObject is a newbee
      */
     if (__isNonNilObject(anObject)) {
-        if ((__qSpace(self) <= OLDSPACE) && !__isRemembered(self)) {
-            int spc;
-
-            if (((spc = __qSpace(anObject)) == NEWSPACE) || (spc == SURVSPACE)) {
-                RETURN (false);
-            }
-        }
+	if ((__qSpace(self) <= OLDSPACE) && !__isRemembered(self)) {
+	    int spc;
+
+	    if (((spc = __qSpace(anObject)) == NEWSPACE) || (spc == SURVSPACE)) {
+		RETURN (false);
+	    }
+	}
     }
 
     cls = __qClass(self);
     if (cls == anObject) {
-        RETURN (true);
+	RETURN (true);
     }
 
     flags = __ClassInstPtr(cls)->c_flags;
     if (((INT)flags & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(POINTERARRAY)) {
-        nInsts = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
+	nInsts = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
     } else {
-        nInsts = __intVal(__ClassInstPtr(cls)->c_ninstvars);
+	nInsts = __intVal(__ClassInstPtr(cls)->c_ninstvars);
     }
     if (! nInsts) {
-        RETURN (false);
+	RETURN (false);
     }
 #if defined(memsrch4)
     if (memsrch4(__InstPtr(self)->i_instvars, (INT)anObject, nInsts)) {
-        RETURN (true);
+	RETURN (true);
     }
 #else
     for (i=0; i<nInsts; i++) {
-        if (__InstPtr(self)->i_instvars[i] == anObject) {
-            RETURN (true);
-        }
+	if (__InstPtr(self)->i_instvars[i] == anObject) {
+	    RETURN (true);
+	}
     }
 #endif /* memsrch4 */
 
@@ -7806,8 +7811,8 @@
 
     sema := self synchronizationSemaphore.
     sema notNil ifTrue:[
-        sema wait.              "/ get lock
-        self synchronizationSemaphore:nil.
+	sema wait.              "/ get lock
+	self synchronizationSemaphore:nil.
     ].
 
     "
@@ -7838,10 +7843,10 @@
      subclasses may redefine this method"
 
     aSemaphore isNil ifTrue:[
-        "/ remove Semaphore
-        SynchronizationSemaphores removeKey:self ifAbsent:nil.
+	"/ remove Semaphore
+	SynchronizationSemaphores removeKey:self ifAbsent:nil.
     ] ifFalse:[
-        SynchronizationSemaphores at:self put:aSemaphore.
+	SynchronizationSemaphores at:self put:aSemaphore.
     ].
 
     "Modified: 28.1.1997 / 19:37:48 / stefan"
@@ -7856,8 +7861,8 @@
 
     sema := self synchronizationSemaphore.
     sema isNil ifTrue:[
-        sema := RecursionLock new name:self className.
-        self synchronizationSemaphore:sema.
+	sema := RecursionLock new name:self className.
+	self synchronizationSemaphore:sema.
     ].
 
     wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
@@ -7896,7 +7901,7 @@
 
 %{  /* NOCONTEXT */
     if (! __isNonNilObject(self)) {
-        RETURN (self);
+	RETURN (self);
     }
     __beImmutable(self);
 %}
@@ -7907,7 +7912,7 @@
 
 %{  /* NOCONTEXT */
     if (! __isNonNilObject(self)) {
-        RETURN (self);
+	RETURN (self);
     }
     __beMutable(self);
 %}
@@ -7931,7 +7936,7 @@
       - the Collection-classes have been rewritten to not use it.)"
 %{
     if (__primBecome(self, anotherObject)) {
-        RETURN ( self );
+	RETURN ( self );
     }
 %}.
     self primitiveFailed
@@ -7947,7 +7952,7 @@
 
 %{
     if (__primBecomeNil(self)) {
-        RETURN ( nil );
+	RETURN ( nil );
     }
 %}.
     self primitiveFailed
@@ -7968,7 +7973,7 @@
      or nil, or is a context of a living method (i.e. one that has not already returned)."
 %{
     if (__primBecomeSameAs(self, anotherObject)) {
-        RETURN ( self );
+	RETURN ( self );
     }
 %}.
     self primitiveFailed
@@ -7989,72 +7994,72 @@
     "check for UndefinedObject/SmallInteger receiver or newClass"
 %{
     {
-        OBJ other = otherClass;
-
-        if (__isNonNilObject(self)
-         && __isNonNilObject(other)
-         && (other != UndefinedObject)
-         && (other != SmallInteger)) {
-            ok = true;
-        } else {
-            ok = false;
-        }
+	OBJ other = otherClass;
+
+	if (__isNonNilObject(self)
+	 && __isNonNilObject(other)
+	 && (other != UndefinedObject)
+	 && (other != SmallInteger)) {
+	    ok = true;
+	} else {
+	    ok = false;
+	}
     }
 %}.
     ok ifTrue:[
-        ok := false.
-        myClass := self class.
-        myClass flags == otherClass flags ifTrue:[
-            myClass instSize == otherClass instSize ifTrue:[
-                "same instance layout and types: its ok to do it"
-                ok := true.
-            ] ifFalse:[
-                myClass isPointers ifTrue:[
-                    myClass isVariable ifTrue:[
-                        ok := true
-                    ]
-                ]
-            ]
-        ] ifFalse:[
-            myClass isPointers ifTrue:[
-                "if newClass is a variable class, with instSize <= my instsize,
-                 we can do it (effectively mapping additional instvars into the
-                 variable part) - usefulness is questionable, though"
-
-                otherClass isPointers ifTrue:[
-                    otherClass isVariable ifTrue:[
-                        otherClass instSize <= (myClass instSize + self basicSize)
-                        ifTrue:[
-                            ok := true
-                        ]
-                    ] ifFalse:[
-                        otherClass instSize == (myClass instSize + self basicSize)
-                        ifTrue:[
-                            ok := true
-                        ]
-                    ]
-                ] ifFalse:[
-                    "it does not make sense to convert pointers to bytes ..."
-                ]
-            ] ifFalse:[
-                "does it make sense, to convert bits ?"
-                "could allow byteArray->wordArray->longArray->floatArray->doubleArray here ..."
-                (myClass isBitsExtended and:[otherClass isBitsExtended]) ifTrue:[
-                    ok := true
-                ]
-            ]
-        ]
+	ok := false.
+	myClass := self class.
+	myClass flags == otherClass flags ifTrue:[
+	    myClass instSize == otherClass instSize ifTrue:[
+		"same instance layout and types: its ok to do it"
+		ok := true.
+	    ] ifFalse:[
+		myClass isPointers ifTrue:[
+		    myClass isVariable ifTrue:[
+			ok := true
+		    ]
+		]
+	    ]
+	] ifFalse:[
+	    myClass isPointers ifTrue:[
+		"if newClass is a variable class, with instSize <= my instsize,
+		 we can do it (effectively mapping additional instvars into the
+		 variable part) - usefulness is questionable, though"
+
+		otherClass isPointers ifTrue:[
+		    otherClass isVariable ifTrue:[
+			otherClass instSize <= (myClass instSize + self basicSize)
+			ifTrue:[
+			    ok := true
+			]
+		    ] ifFalse:[
+			otherClass instSize == (myClass instSize + self basicSize)
+			ifTrue:[
+			    ok := true
+			]
+		    ]
+		] ifFalse:[
+		    "it does not make sense to convert pointers to bytes ..."
+		]
+	    ] ifFalse:[
+		"does it make sense, to convert bits ?"
+		"could allow byteArray->wordArray->longArray->floatArray->doubleArray here ..."
+		(myClass isBitsExtended and:[otherClass isBitsExtended]) ifTrue:[
+		    ok := true
+		]
+	    ]
+	]
     ].
     ok ifTrue:[
-        "now, change the receivers class ..."
+	"now, change the receivers class ..."
 %{
-        {
-            OBJ me = self;
-
-            __qClass(me) = otherClass;
-            __STORE(me, otherClass);
-            RETURN (me);
-        }
+	{
+	    OBJ me = self;
+
+	    __qClass(me) = otherClass;
+	    __STORE(me, otherClass);
+	    RETURN (me);
+	}
 %}.
     ].
 
@@ -8082,7 +8087,7 @@
 
 %{  /* NOCONTEXT */
     if (! __isNonNilObject(self)) {
-        RETURN (true);
+	RETURN (true);
     }
     RETURN (__isImmutable(self) ? true : false);
 %}
@@ -8098,7 +8103,7 @@
     int nInsts, i;
 
     if (! __isNonNilObject(self)) {
-        RETURN (false);
+	RETURN (false);
     }
 
     /*
@@ -8107,33 +8112,33 @@
      * a trivial reject is possible, if anObject is a newbee
      */
     if (__isNonNilObject(anObject)) {
-        if ((__qSpace(self) <= OLDSPACE) && !__isRemembered(self)) {
-            int spc;
-
-            if (((spc = __qSpace(anObject)) == NEWSPACE) || (spc == SURVSPACE)) {
-                RETURN (false);
-            }
-        }
+	if ((__qSpace(self) <= OLDSPACE) && !__isRemembered(self)) {
+	    int spc;
+
+	    if (((spc = __qSpace(anObject)) == NEWSPACE) || (spc == SURVSPACE)) {
+		RETURN (false);
+	    }
+	}
     }
 
     cls = __qClass(self);
 
     flags = __ClassInstPtr(cls)->c_flags;
     if (((INT)flags & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(POINTERARRAY)) {
-        nInsts = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
+	nInsts = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
     } else {
-        nInsts = __intVal(__ClassInstPtr(cls)->c_ninstvars);
+	nInsts = __intVal(__ClassInstPtr(cls)->c_ninstvars);
     }
     if (! nInsts) {
-        RETURN (false);
+	RETURN (false);
     }
     anyChange = false;
     for (i=0; i<nInsts; i++) {
-        if (__InstPtr(self)->i_instvars[i] == anObject) {
-            __InstPtr(self)->i_instvars[i] = newRef;
-            __STORE(self, newRef);
-            anyChange = true;
-        }
+	if (__InstPtr(self)->i_instvars[i] == anObject) {
+	    __InstPtr(self)->i_instvars[i] = newRef;
+	    __STORE(self, newRef);
+	    anyChange = true;
+	}
     }
     RETURN (anyChange);
 %}.
@@ -8157,27 +8162,27 @@
       the recevier is retuned here.
 
       Thus, if foo and bar are simple variables or constants,
-          foo ? bar
+	  foo ? bar
       is the same as:
-          (foo isNil ifTrue:[bar] ifFalse:[foo])
+	  (foo isNil ifTrue:[bar] ifFalse:[foo])
 
       if they are message sends, the equivalent code is:
-          [
-              |t1 t2|
-
-              t1 := foo.
-              t2 := bar.
-              t1 isNil ifTrue:[t2] ifFalse:[t1]
-          ] value
+	  [
+	      |t1 t2|
+
+	      t1 := foo.
+	      t2 := bar.
+	      t1 isNil ifTrue:[t2] ifFalse:[t1]
+	  ] value
 
       Can be used to provide defaultValues to variables,
       as in:
-          foo := arg ? #defaultValue
+	  foo := arg ? #defaultValue
 
       Note: this method should never be redefined in classes other than UndefinedObject.
       Notice:
-         This method is open coded (inlined) by the compiler(s)
-         - redefining it may not work as expected."
+	 This method is open coded (inlined) by the compiler(s)
+	 - redefining it may not work as expected."
 
     ^ self
 
@@ -8200,21 +8205,21 @@
       the recevier is retuned here.
 
       Thus, if foo and bar are simple variables or constants,
-          foo ?? bar
+	  foo ?? bar
       is the same as:
-          (foo isNil ifTrue:[bar value] ifFalse:[foo])
+	  (foo isNil ifTrue:[bar value] ifFalse:[foo])
 
       if they are message sends, the equivalent code is:
-          [
-              |t t2|
-
-              t := foo.
-              t isNil ifTrue:[bar value] ifFalse:[t]
-          ] value
+	  [
+	      |t t2|
+
+	      t := foo.
+	      t isNil ifTrue:[bar value] ifFalse:[t]
+	  ] value
 
       Can be used to provide defaultValues to variables,
       as in:
-          foo := arg ?? [ self computeDefault ]
+	  foo := arg ?? [ self computeDefault ]
 
       Note: this method should never be redefined in classes other than UndefinedObject.
      "
@@ -8239,8 +8244,8 @@
      This is much like #?, but sends #value to the argument in case of a nil
      receiver.
      Notice:
-        This method is open coded (inlined) by the compiler(s)
-        - redefining it may not work as expected."
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ self
 !
@@ -8249,8 +8254,8 @@
     "return the value of the first arg, if I am nil,
      the result from evaluating the 2nd argument, if I am not nil.
      Notice:
-        This method is open coded (inlined) by the compiler(s)
-        - redefining it may not work as expected."
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ notNilBlockOrValue value
 
@@ -8260,8 +8265,8 @@
     "return myself if nil, or the result from evaluating the argument,
      if I am not nil.
      Notice:
-        This method is open coded (inlined) by the compiler(s)
-        - redefining it may not work as expected."
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ aBlockOrValue value
 
@@ -8271,8 +8276,8 @@
     "return the value of the 2nd arg, if I am nil,
      the result from evaluating the 1st argument, if I am not nil.
      Notice:
-        This method is open coded (inlined) by the compiler(s)
-        - redefining it may not work as expected."
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ notNilBlockOrValue value
 
@@ -8416,6 +8421,15 @@
     ^ false
 !
 
+isExternalAddress
+    "return true, if the receiver is some kind of externalAddress;
+     false is returned here - the method is only redefined in ExternalAddress."
+
+    ^ false
+
+    "Created: / 22-12-2010 / 17:20:36 / cg"
+!
+
 isExternalLibraryFunction
     "return true, if the receiver is some kind of externalLibrary function;
      false is returned here - the method is only redefined in ExternalLibraryFunction."
@@ -8615,21 +8629,21 @@
     "return true, if the receiver is an instance of aClass or one of its
      subclasses, false otherwise.
      Advice:
-        use of this to check objects for certain attributes/protocoll should
-        be avoided; it limits the reusability of your classes by limiting use
-        to instances of certain classes and fences you into a specific inheritance
-        hierarchy.
-        Use check-methods to check an object for a certain attributes/protocol
-        (such as #isXXXX, #respondsTo: or #isNumber).
-
-        Using #isKindOf: is considered BAD STYLE.
+	use of this to check objects for certain attributes/protocoll should
+	be avoided; it limits the reusability of your classes by limiting use
+	to instances of certain classes and fences you into a specific inheritance
+	hierarchy.
+	Use check-methods to check an object for a certain attributes/protocol
+	(such as #isXXXX, #respondsTo: or #isNumber).
+
+	Using #isKindOf: is considered BAD STYLE.
 
      Advice2:
-        Be aware, that using an #isXXX method is usually much faster than
-        using #isKindOf:; because isKindOf: has to walk up all the superclass
-        hierarchy, comparing every class on the way.
-        Due to caching in the VM, a call to #isXXX is normally reached via
-        a single function call.
+	Be aware, that using an #isXXX method is usually much faster than
+	using #isKindOf:; because isKindOf: has to walk up all the superclass
+	hierarchy, comparing every class on the way.
+	Due to caching in the VM, a call to #isXXX is normally reached via
+	a single function call.
      "
 
 %{  /* NOCONTEXT */
@@ -8637,10 +8651,10 @@
 
     thisClass = __Class(self);
     while (thisClass != nil) {
-        if (thisClass == aClass) {
-            RETURN ( true );
-        }
-        thisClass = __ClassInstPtr(thisClass)->c_superclass;
+	if (thisClass == aClass) {
+	    RETURN ( true );
+	}
+	thisClass = __ClassInstPtr(thisClass)->c_superclass;
     }
     RETURN ( false );
 %}
@@ -8695,16 +8709,16 @@
 isMemberOf:aClass
     "return true, if the receiver is an instance of aClass, false otherwise.
      Advice:
-        use of this to check objects for certain attributes/protocol should
-        be avoided; it limits the reusability of your classes by limiting use
-        to instances of a certain class.
-        Use check-methods to check an object for a certain attributes/protocol
-        (such as #isXXX, #respondsTo: or #isNumber);
-
-        Using #isMemberOf: is considered BAD STYLE.
+	use of this to check objects for certain attributes/protocol should
+	be avoided; it limits the reusability of your classes by limiting use
+	to instances of a certain class.
+	Use check-methods to check an object for a certain attributes/protocol
+	(such as #isXXX, #respondsTo: or #isNumber);
+
+	Using #isMemberOf: is considered BAD STYLE.
      Notice:
-        This method is open coded (inlined) by the compiler(s)
-        - redefining it may not work as expected."
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ (self class) == aClass
 !
@@ -8755,8 +8769,8 @@
      Because isNil is redefined in UndefinedObject,
      the receiver is definitely not nil here, so unconditionally return false.
      Notice:
-        This method is open coded (inlined) by the compiler(s)
-        - redefining it may not work as expected."
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ false
 !
@@ -8779,11 +8793,11 @@
     ^ false
 
     "
-        21 isNonByteCollection
-        'abc' isNonByteCollection
-        #'abc' isNonByteCollection
-        #[1 2 3] isNonByteCollection
-        #(1 2 3) isNonByteCollection
+	21 isNonByteCollection
+	'abc' isNonByteCollection
+	#'abc' isNonByteCollection
+	#[1 2 3] isNonByteCollection
+	#(1 2 3) isNonByteCollection
     "
 !
 
@@ -8929,6 +8943,10 @@
     "Created: 12.5.1996 / 10:56:50 / cg"
 !
 
+isTimestamp
+    ^ false
+!
+
 isValueModel
     "return true, if the receiver is some kind of valueModel;
      false is returned here - the method is only redefined in ValueModel."
@@ -8974,8 +8992,8 @@
      Because notNil is redefined in UndefinedObject,
      the receiver is definitely not nil here, so unconditionally return true.
      Notice:
-        This method is open coded (inlined) by the compiler(s)
-        - redefining it may not work as expected."
+	This method is open coded (inlined) by the compiler(s)
+	- redefining it may not work as expected."
 
     ^ true
 ! !
@@ -9004,7 +9022,7 @@
      It could also be put into some logfile or printed on the standard output/error."
 
     ActivityNotification isHandled ifTrue:[
-        ^ ActivityNotification raiseRequestWith:self errorString:aString
+	^ ActivityNotification raiseRequestWith:self errorString:aString
     ].
 
     "
@@ -9014,12 +9032,12 @@
 
     "
      ActivityNotification handle:[:ex |
-        ex errorString printCR.
-        ex proceed.
+	ex errorString printCR.
+	ex proceed.
      ] do:[
-        'hello' printCR.
-        self activityNotification:'doing some long time computation'.
-        'world' printCR.
+	'hello' printCR.
+	self activityNotification:'doing some long time computation'.
+	'world' printCR.
      ]
     "
 
@@ -9051,7 +9069,7 @@
 
     answer := self confirmWithCancel:aString.
     answer isNil ifTrue:[
-        ^ cancelBlock value
+	^ cancelBlock value
     ].
     ^ answer
 
@@ -9087,10 +9105,10 @@
      by handling the UserConfirmation."
 
     ^ UserConfirmation new
-        defaultAnswer:defaultAnswerOrNil;
-        canCancel:true;
-        errorString:aString;
-        raiseRequest
+	defaultAnswer:defaultAnswerOrNil;
+	canCancel:true;
+	errorString:aString;
+	raiseRequest
 
     "
      nil confirmWithCancel:'hello' defaultAnswer:true
@@ -9103,9 +9121,9 @@
      and give user a chance to enter debugger."
 
     ^ self
-        errorNotify:aString
-        from:thisContext sender
-        allowDebug:true
+	errorNotify:aString
+	from:thisContext sender
+	allowDebug:true
 
     "
      nil errorNotify:'hello there'
@@ -9131,118 +9149,118 @@
     |currentScreen con sender action boxLabels boxValues default s|
 
     Smalltalk isInitialized ifFalse:[
-        'errorNotification: ' print. aString printCR.
-        aContext sender printAllLevels:10.
-        ^ nil
+	'errorNotification: ' print. aString printCR.
+	aContext sender printAllLevels:10.
+	^ nil
     ].
 
     (Dialog isNil
      or:[Screen isNil
      or:[(currentScreen := Screen current) isNil
      or:[currentScreen isOpen not]]]) ifTrue:[
-        "
-         on systems without GUI, simply show
-         the message on the Transcript and abort.
-        "
-        Transcript showCR:aString.
-        AbortOperationRequest raise.
-        "not reached"
-        ^ nil
+	"
+	 on systems without GUI, simply show
+	 the message on the Transcript and abort.
+	"
+	Transcript showCR:aString.
+	AbortOperationRequest raise.
+	"not reached"
+	^ nil
     ].
 
     Processor activeProcessIsSystemProcess ifTrue:[
-        action := #debug.
-        sender := aContext.
-        Debugger isNil ifTrue:[
-            '****************** Cought Error while in SystemProcess ****************' errorPrintCR.
-            thisContext fullPrintAll.
-            action := #abort.
-        ].
+	action := #debug.
+	sender := aContext.
+	Debugger isNil ifTrue:[
+	    '****************** Cought Error while in SystemProcess ****************' errorPrintCR.
+	    thisContext fullPrintAll.
+	    action := #abort.
+	].
     ] ifFalse:[
-        Dialog autoload.        "in case it's autoloaded"
-
-        Error handle:[:ex |
-            "/ a recursive error - quickly enter debugger
-            "/ this happened, when I corrupted the Dialog class ...
-            ('Object [error]: ' , ex description , ' caught in errorNotification') errorPrintCR.
-            action := #debug.
-            ex return.
-        ] do:[ |s|
-            sender := aContext.
-            sender isNil ifTrue:[
-                sender := thisContext sender.
-            ].
-            con := sender.
-
-            "/ skip intermediate (signal & exception) contexts
-            DebugView notNil ifTrue:[
-                con := DebugView interestingContextFrom:sender
-            ].
-
-            "/ show the first few contexts
-
-            s := WriteStream with:aString.
-            s cr; cr.
-            s nextPutLine:'Calling Chain:'.
-            s nextPutLine:'--------------------------------------------------------------'.
-            1 to:25 do:[:n |
-                con notNil ifTrue:[
-                    con printOn:s.
-                    s cr.
-                    con := con sender
-                ]
-            ].
-
-            boxLabels := #('Proceed').
-            boxValues := #(#proceed).
-            default := #proceed.
-
-            AbortOperationRequest isHandled ifTrue:[
-                default := #abort.
-                boxLabels := boxLabels , #('Abort').
-                boxValues := boxValues , #(#abort).
-                true "allowDebug" ifTrue:[
-                    boxLabels := boxLabels , #('Copy Trace and Abort').
-                    boxValues := boxValues , #(#copyAndAbort).
-                ]
-            ] ifFalse:[
-                true "allowDebug" ifTrue:[
-                    boxLabels := boxLabels , #('Copy Trace and Proceed').
-                    boxValues := boxValues , #(#copyAndProceed).
-                ].
-            ].
-
-            (allowDebug and:[Debugger notNil]) ifTrue:[
-                boxLabels := boxLabels , #('Debug').
-                boxValues := boxValues , #(#debug).
-                default := #debug.
-            ].
-
-            action := Dialog
-                    choose:s contents
-                    label:('Exception [' , Processor activeProcess nameOrId , ']')
-                    image:WarningBox errorIconBitmap
-                    labels:boxLabels
-                    values:boxValues
-                    default:default
-                    onCancel:nil.
-        ].
+	Dialog autoload.        "in case it's autoloaded"
+
+	Error handle:[:ex |
+	    "/ a recursive error - quickly enter debugger
+	    "/ this happened, when I corrupted the Dialog class ...
+	    ('Object [error]: ' , ex description , ' caught in errorNotification') errorPrintCR.
+	    action := #debug.
+	    ex return.
+	] do:[ |s|
+	    sender := aContext.
+	    sender isNil ifTrue:[
+		sender := thisContext sender.
+	    ].
+	    con := sender.
+
+	    "/ skip intermediate (signal & exception) contexts
+	    DebugView notNil ifTrue:[
+		con := DebugView interestingContextFrom:sender
+	    ].
+
+	    "/ show the first few contexts
+
+	    s := WriteStream with:aString.
+	    s cr; cr.
+	    s nextPutLine:'Calling Chain:'.
+	    s nextPutLine:'--------------------------------------------------------------'.
+	    1 to:25 do:[:n |
+		con notNil ifTrue:[
+		    con printOn:s.
+		    s cr.
+		    con := con sender
+		]
+	    ].
+
+	    boxLabels := #('Proceed').
+	    boxValues := #(#proceed).
+	    default := #proceed.
+
+	    AbortOperationRequest isHandled ifTrue:[
+		default := #abort.
+		boxLabels := boxLabels , #('Abort').
+		boxValues := boxValues , #(#abort).
+		true "allowDebug" ifTrue:[
+		    boxLabels := boxLabels , #('Copy Trace and Abort').
+		    boxValues := boxValues , #(#copyAndAbort).
+		]
+	    ] ifFalse:[
+		true "allowDebug" ifTrue:[
+		    boxLabels := boxLabels , #('Copy Trace and Proceed').
+		    boxValues := boxValues , #(#copyAndProceed).
+		].
+	    ].
+
+	    (allowDebug and:[Debugger notNil]) ifTrue:[
+		boxLabels := boxLabels , #('Debug').
+		boxValues := boxValues , #(#debug).
+		default := #debug.
+	    ].
+
+	    action := Dialog
+		    choose:s contents
+		    label:('Exception [' , Processor activeProcess nameOrId , ']')
+		    image:WarningBox errorIconBitmap
+		    labels:boxLabels
+		    values:boxValues
+		    default:default
+		    onCancel:nil.
+	].
     ].
 
     action == #debug ifTrue:[
-        ^ Debugger enter:sender withMessage:aString mayProceed:true
+	^ Debugger enter:sender withMessage:aString mayProceed:true
     ].
     action == #proceed ifTrue:[
-        ^ nil.
+	^ nil.
     ].
     (action == #copyAndProceed
     or:[action == #copyAndAbort]) ifTrue:[
-        s := '' writeStream.
-        sender fullPrintAllOn:s.
-        currentScreen rootView setClipboardText:s contents.
-        action == #copyAndProceed ifTrue:[
-            ^ nil
-        ].
+	s := '' writeStream.
+	sender fullPrintAllOn:s.
+	currentScreen rootView setClipboardText:s contents.
+	action == #copyAndProceed ifTrue:[
+	    ^ nil
+	].
     ].
 
     AbortOperationRequest raise.
@@ -9274,12 +9292,12 @@
 
     "
      InformationSignal handle:[:ex |
-        'no box popped' printCR.
-        ex proceed.
+	'no box popped' printCR.
+	ex proceed.
      ] do:[
-        'hello' printCR.
-        self information:'some info'.
-        'world' printCR.
+	'hello' printCR.
+	self information:'some info'.
+	'world' printCR.
      ]
     "
 
@@ -9294,9 +9312,9 @@
 
 
     Smalltalk isInitialized ifFalse:[
-        "/ thisContext fullPrintAll.
-        'information: ' print. aString printCR.
-        ^ self
+	"/ thisContext fullPrintAll.
+	'information: ' print. aString printCR.
+	^ self
     ].
     UserNotification raiseRequestWith:self errorString:aString.
 
@@ -9324,12 +9342,12 @@
 
     "
      Warning handle:[:ex |
-        Transcript showCR:ex description.
-        ex proceed.
+	Transcript showCR:ex description.
+	ex proceed.
      ] do:[
-        'hello' printCR.
-        self warn:'some info'.
-        'world' printCR.
+	'hello' printCR.
+	self warn:'some info'.
+	'world' printCR.
      ]
     "
 
@@ -9354,15 +9372,15 @@
 !Object class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Object.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Object.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Object.st,v 1.657 2010/12/09 09:23:08 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Object.st,v 1.663 2011/01/31 12:05:03 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Object.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Object.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Object initialize!
@@ -9370,3 +9388,4 @@
 
 
 
+
--- a/Process.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Process.st	Fri Feb 04 23:09:23 2011 +0000
@@ -1430,7 +1430,8 @@
 
 waitUntilTerminatedWithTimeout:secondsOrNil
     "wait until the receiver is terminated or (if non-nil) until
-     the time period exired. Returns true if a timeout occurred.
+     the time period exired. 
+     Returns true if a timeout occurred.
      This method allows another process to wait until the receiver finishes
      (optionally) within some time."
 
@@ -1462,7 +1463,7 @@
      ]
     "
 
-    "Modified: 12.1.1997 / 00:40:59 / cg"
+    "Modified: / 13-01-2011 / 13:45:08 / cg"
 !
 
 withHigherPriorityDo:aBlock
@@ -2053,15 +2054,15 @@
 !Process class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Process.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Process.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Process.st,v 1.171 2010/08/13 07:40:24 sr Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Process.st,v 1.172 2011/01/13 12:50:05 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Process.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Process.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Process initialize!
@@ -2071,3 +2072,4 @@
 
 
 
+
--- a/ProgrammingLanguage.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/ProgrammingLanguage.st	Fri Feb 04 23:09:23 2011 +0000
@@ -238,6 +238,13 @@
 
 !ProgrammingLanguage methodsFor:'accessing - classes'!
 
+codeGeneratorClass
+    "Answer a class suitable for generating code (such as getters, setters, etc.)
+     It is ok to return nil, which means that no code can be generated automagically"
+
+    ^ nil
+!
+
 compilerClass
     "Answer a class suitable for compiling a source code in 'my' language"
 
@@ -271,6 +278,15 @@
     ^ nil
 !
 
+metaClass
+    "will be used for new classes (in the class wizard);
+     a fallback here"
+
+    ^ Metaclass
+
+    "Created: / 30-01-2011 / 10:05:03 / cg"
+!
+
 parserClass
     "Answer a class suitable for parsing a source code in 'my' language"
 
@@ -413,18 +429,19 @@
 !ProgrammingLanguage class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ProgrammingLanguage.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ProgrammingLanguage.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic/ProgrammingLanguage.st,v 1.12 2010/08/04 10:06:44 cg Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic/ProgrammingLanguage.st,v 1.14 2011/01/30 09:06:33 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id: ProgrammingLanguage.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ProgrammingLanguage.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 ProgrammingLanguage initialize!
 
 
 
+
--- a/ProjectDefinition.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/ProjectDefinition.st	Fri Feb 04 23:09:23 2011 +0000
@@ -695,12 +695,13 @@
 
     "
       stx_libbasic projectIsLoaded
+      (ProjectDefinition definitionClassForPackage:#'stx:libbasic') projectIsLoaded
     "
 !
 
 projectIsLoaded:something
     projectIsLoaded := something.
-    something == true ifTrue:[
+    something ifTrue:[
         "register myself as dependent - I want to get notified on method changes"
         self class addDependent:self.
     ].
@@ -2232,6 +2233,14 @@
     "Created: / 17-08-2006 / 20:17:28 / cg"
 !
 
+productDescription
+    "Returns a description (for autopackage)"
+
+    ^ self description
+
+    "Created: / 21-12-2010 / 09:32:16 / cg"
+!
+
 productFilename
     "Returns a filename which be used as linkname, product file name etc."
 
@@ -2253,6 +2262,22 @@
     "Created: / 14-09-2006 / 21:23:01 / cg"
 !
 
+productLicense
+    "Returns the license (for autopackage)"
+
+    ^ 'Commercial'
+
+    "Created: / 21-12-2010 / 09:31:25 / cg"
+!
+
+productMaintainer
+    "Returns the maintainer (for autopackage)"
+
+    ^ self companyName
+
+    "Created: / 21-12-2010 / 09:26:16 / cg"
+!
+
 productName
     "Returns a product name which will appear in <lib>.rc.
      Under win32, this is placed into the dlls file-info"
@@ -2303,6 +2328,14 @@
     "Created: / 14-09-2006 / 21:12:54 / cg"
 !
 
+productType
+    "Returns the product type for autopackage"
+
+    ^ 'Application'
+
+    "Created: / 21-12-2010 / 09:28:48 / cg"
+!
+
 productVersion
     "Returns a product version which will appear in libName.rc and the installer file"
 
@@ -2391,6 +2424,12 @@
 
 !ProjectDefinition class methodsFor:'file generation'!
 
+apspecFilename
+    ^ 'autopackage/default.apspec'
+
+    "Created: / 21-12-2010 / 09:43:13 / cg"
+!
+
 basicFileNamesToGenerate
     "answer a dictionary (filename -> generator method) with all the files, 
      that have to be generated for this package"
@@ -2409,11 +2448,12 @@
     ).
 
     dict 
-        at:self rcFilename      put:#'generate_packageName_dot_rc'.
+        at:self rcFilename      put:#'generate_packageName_dot_rc';
+        at:self apspecFilename  put:#'generate_autopackage_default_dot_apspec'.
 
     ^ dict.
 
-    "Modified: / 30-11-2010 / 18:24:21 / cg"
+    "Modified: / 21-12-2010 / 11:02:02 / cg"
 !
 
 fileNamesToGenerate
@@ -2461,10 +2501,12 @@
     (filename = 'loadAll') ifTrue:[
         ^ self generate_loadAll
     ].
-    self error:('File "%1" not appropriate (not generated) for this type of project.'
-                bindWith:filename)
-
-    "Modified: / 14-09-2006 / 21:07:49 / cg"
+    (filename = 'autopackage/default.apspec' or:[filename = self apspecFilename]) ifTrue:[
+        ^ self generate_autopackage_default_dot_apspec
+    ].
+    self error:('File "%1" not appropriate (not generated) for this type of project.' bindWith:filename)
+
+    "Modified: / 21-12-2010 / 11:01:10 / cg"
 !
 
 generateRemoveShellScriptOn:aStream
@@ -2585,6 +2627,19 @@
     "Modified: / 20-10-2006 / 16:31:08 / cg"
 !
 
+generate_autopackage_default_dot_apspec
+
+    ^self 
+        replaceMappings: self autopackage_default_dot_apspec_mappings 
+        in: self autopackage_default_dot_apspec
+
+    "
+     stx_projects_smalltalk generate_autopackage_default_dot_apspec
+    "
+
+    "Created: / 21-12-2010 / 09:40:04 / cg"
+!
+
 generate_bc_dot_mak         
     ^ (self 
         replaceMappings: self bc_dot_mak_mappings 
@@ -2787,12 +2842,13 @@
 !
 
 protectedFileNames
-    "names of files which should NOT be generated 
+    "names of files which should NOT be generated (because they are hand-maintained)
      - redefine this to protect a hand-written Make.proto or other handwritten support files"
 
     ^ #()
 
     "Created: / 14-09-2006 / 14:38:40 / cg"
+    "Modified: / 21-12-2010 / 11:36:46 / cg"
 !
 
 rcFilename
@@ -2803,6 +2859,67 @@
 
 !ProjectDefinition class methodsFor:'file mappings'!
 
+autopackage_default_dot_apspec_mappings
+    |mappings|
+
+    mappings := Dictionary new.
+
+    mappings
+"/        at: 'TOP' put: ( self pathToTop_unix );
+"/        at: 'NSI_FILENAME' put: self nsiFilename ;
+        at: 'DESCRIPTION' put: (self description);
+        at: 'PRODUCT_VERSION' put: (self productVersion);
+        at: 'PRODUCT_DATE' put: (self productDate);
+        at: 'PRODUCT_PUBLISHER' put: (self productPublisher);
+        at: 'PRODUCT_WEBSITE' put: (self productWebSite);
+        at: 'PRODUCT_INSTALLDIR' put: (self productInstallDir);
+        at: 'PRODUCT_TYPE' put: (self productType);
+        at: 'PRODUCT_LICENSE' put: (self productLicense);
+        at: 'PRODUCT_DESCRIPTION' put: (self productDescription);
+        at: 'MAINTAINER' put: (self productMaintainer);
+        at: 'PACKAGER' put: (self productPublisher);
+"/        at: 'STARTUP_CLASS' put: (self startupClassName);
+"/        at: 'STARTUP_SELECTOR' put: (self startupSelector);
+"/        at: 'MAIN_DEFINES' put: (self mainDefines);
+"/        at: 'REQUIRED_LIBS' put: (self generateRequiredLibs_make_dot_proto);  
+"/        at: 'PREREQUISITES_LIBS' put: (self generatePreRequisiteLines_make_dot_proto);  
+"/        at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto); 
+"/        at: 'REQUIRED_LIBOBJS' put: (self generateRequiredLibobjs_make_dot_proto);
+"/        at: 'REQUIRED_LINK_LIBOBJS' put: (self generateRequiredLinkLibobjs_make_dot_proto);
+"/        at: 'DEPENDENCIES' put: (self generateDependencies_unix);
+"/        at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto ); 
+"/        at: 'BUILD_TARGET' put: (self buildTarget );
+        yourself.
+
+"/    self offerSmalltalkSourceCode ifTrue:[ 
+"/        mappings
+"/            at: 'STX_SOURCE_RULES' put: ( self replaceMappings: mappings 
+"/                                            in: self make_dot_proto_stx_source_rules).
+"/    ].
+
+"/    self offerApplicationSourceCode ifTrue:[  
+"/        mappings
+"/            at: 'SOURCE_RULES' put:( self replaceMappings: mappings 
+"/                                            in: self make_dot_proto_app_source_rules ).
+"/    ].
+
+"/    self needResources ifTrue:[
+"/        mappings
+"/            at: 'REQUIRED_SUPPORT_DIRS' put: 'RESOURCEFILES';
+"/            at: 'RESOURCE_RULES' put:( self replaceMappings: mappings 
+"/                                            in: self make_dot_proto_resource_rules );
+"/            at: 'STX_RESOURCE_RULES' put: ( self replaceMappings: mappings 
+"/                                            in: self make_dot_proto_stx_resource_rules);
+"/            at: 'ADDITIONAL_RESOURCE_TARGETS' put:( self additionalResourceTargets asStringWith:' ');
+"/            yourself.
+"/    ].
+
+    ^ mappings
+
+    "Created: / 21-12-2010 / 09:00:49 / cg"
+    "Modified: / 21-12-2010 / 11:14:41 / cg"
+!
+
 bc_dot_mak_mappings
     |d|
 
@@ -3044,7 +3161,7 @@
         |mustComeBefore pivateClassesOfB|
 
         mustComeBefore := false.                        
-        mustComeBefore := (a isSharedPool and:[(b sharedPools includes: a name)]).
+        mustComeBefore := (a isSharedPool and:[(b sharedPoolNames includes: a name)]).
         mustComeBefore := mustComeBefore or:[b isSubclassOf:a].
         mustComeBefore ifFalse:[
             pivateClassesOfB := pivateClassesOf at:b ifAbsent:[ #() ].
@@ -3094,7 +3211,7 @@
     "
 
     "Created: / 09-08-2006 / 11:24:39 / fm"
-    "Modified: / 20-10-2006 / 16:18:54 / cg"
+    "Modified: / 18-01-2011 / 17:58:29 / cg"
 !
 
 commonSymbolsFlag
@@ -3640,6 +3757,100 @@
 
 !ProjectDefinition class methodsFor:'file templates'!
 
+autopackage_default_dot_apspec
+    "for linux's autopackage"
+
+^
+'# -*- shell-script -*-
+[Meta]
+ShortName: %(APPLICATION)
+SoftwareVersion: %(PRODUCT_VERSION)
+DisplayName: %(DESCRIPTION)
+RootName: @exept.de/expecco:$SOFTWAREVERSION
+Summary: %(DESCRIPTION)
+Maintainer: %(MAINTAINER)
+Packager: %(PACKAGER)
+PackageVersion: 1
+CPUArchitectures: x86
+AutopackageTarget: 1.0
+Type: %(PRODUCT_TYPE)
+License: %(PRODUCT_LICENSE) 
+
+[Description]
+%(PRODUCT_DESCRIPTION)
+
+[BuildPrepare]
+# If you''re using autotools, the default should be enough.
+# prepareBuild will set up apbuild and run configure for you. If you
+# need to pass arguments to configure, just add them to prepareBuild:
+# prepareBuild --enable-foo --disable-bar
+#prepareBuild
+
+[BuildUnprepare]
+# If you''re using prepareBuild above, there is no need to change this!!
+#unprepareBuild
+
+[Globals]
+# Variables declared in this section will be available in all other sections
+export APKG_BUILD_SKIP_CONFIGURE=1
+export APKG_BUILD_SKIP_MAKE=1
+export MYPREFIX=/opt/%(APPLICATION)
+
+[Prepare]
+#recommend ''@autopackage.org/autopackage-gtk'' 1
+
+[Imports]
+import <<EOF
+$source_dir/%(APPLICATION)
+$source_dir/resources
+$source_dir/keyboard.rc
+$source_dir/display.rc
+$source_dir/../doc
+$source_dir/../testsuites/webedition
+$source_dir/../projects/libraries
+$source_dir/../reportGenerator/tools
+$source_dir/../../pdf/afm
+$source_dir/../plugin/selenium/libexept_expecco_plugin_selenium.so
+$source_dir/../externalTools
+EOF
+
+for i in $source_dir/*.so
+do
+    echo $source_dir/$(readlink $i)
+done | import
+
+[Install]
+if [ "$PREFIX" !!= "/usr" ]
+then
+    export MYPREFIX=$PREFIX
+fi
+
+find . -type d \( -name CVS -or -name ''not_*'' \) -print | xargs rm -rf
+mkdir -p $MYPREFIX
+copyFiles expecco *.rc resources        $MYPREFIX/bin
+copyFiles *.so                          $MYPREFIX/lib
+copyFiles doc externalTools             $MYPREFIX/packages/exept/expecco
+copyFiles webedition/projects libraries $MYPREFIX/testsuites
+copyFiles tools                         $MYPREFIX/packages/exept/expecco/reportGenerator
+copyFiles afm                           $MYPREFIX/packages/exept/pdf
+copyFiles libexept_expecco_plugin_selenium.so   $MYPREFIX/plugin
+
+#installExe expecco
+#installLib *.so
+#installData resources
+#installData keyboard.rc
+#installData doc
+
+[Uninstall]
+# Leaving this at the default is safe unless you use custom commands in
+# "Install" to create files. All autopackage API functions
+# that installs files are logged.
+uninstallFromLog
+'
+
+    "Created: / 21-12-2010 / 09:06:21 / cg"
+!
+
 bc_dot_mak
     "answer a template for the bc.mak makefile.
      Any variable definition %(Variable) will be later replaced by the mapping.
@@ -3948,7 +4159,7 @@
         self activityNotification:'Loading sub projects'.
         meOrMySecondIncarnation loadSubProjectsAsAutoloaded:asAutoloaded.
     ].
-    self activityNotification:'Executing post-load action'.
+    self activityNotification:('Executing post-load action for %1' bindWith:self package).
 
     "/ mhmh - already done for dll-loaded packages
     "/ meOrMySecondIncarnation initializeAllClasses.
@@ -3959,12 +4170,13 @@
         self projectIsLoaded:true.
     ].
 
+    self activityNotification:('Done (%1).' bindWith:self package).
     ^ newStuffHasBeenLoaded
 
     "Created: / 17-08-2006 / 01:01:41 / cg"
-    "Modified: / 21-11-2006 / 15:07:09 / cg"
     "Modified: / 30-10-2008 / 08:16:21 / Jan Vrany <vranyj1@fel.cvut.cz>"
     "Modified: / 22-08-2009 / 12:02:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 29-12-2010 / 10:09:34 / cg"
 !
 
 unloadPackage
@@ -4444,7 +4656,7 @@
             ]
         ].
 
-        cls sharedPools do:[:eachPoolName |
+        cls sharedPoolNames do:[:eachPoolName |
             |eachPoolClass|
 
             eachPoolClass := Smalltalk classNamed:eachPoolName.
@@ -4473,7 +4685,7 @@
     "
 
     "Created: / 07-12-2006 / 17:46:38 / cg"
-    "Modified: / 09-11-2007 / 17:38:02 / cg"
+    "Modified: / 18-01-2011 / 17:58:33 / cg"
 !
 
 searchForSiblingProjects
@@ -4933,14 +5145,12 @@
 
     |packagesToLoad packagesBefore|
 
-    "/ assume that the packages are loaded IFF the definition class is present and
-    "/ the extensions are present.
     packagesToLoad := aListOfPackages 
                             reject:[:packageID | 
                                 |cls|
 
                                 cls := ProjectDefinition definitionClassForPackage:packageID.
-                                cls notNil and:[cls isFullyLoaded "hasAllExtensionsLoaded"]
+                                cls notNil and:[cls projectIsLoaded]
                             ].
     packagesToLoad isEmpty ifTrue:[^ self].
 
@@ -4951,17 +5161,9 @@
     [
         Class withoutUpdatingChangesDo:[
             packagesToLoad do:[:aPackage |
-                |def|
-
                 (PackagesBeingLoaded includes:aPackage) ifFalse:[
                     PackagesBeingLoaded add:aPackage.
-                
-                    "/ def := aPackage asPackageId projectDefinitionClass.
-                    (def notNil and:[def isFullyLoaded]) ifTrue:[
-                        "/ nothing to be done...
-                    ] ifFalse:[
-                        Smalltalk loadPackage:aPackage asAutoloaded:asAutoloaded.
-                    ]
+                    Smalltalk loadPackage:aPackage asAutoloaded:asAutoloaded.
                 ]
             ].
         ].
@@ -5747,16 +5949,17 @@
 !ProjectDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Id: ProjectDefinition.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ProjectDefinition.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.326 2010/12/09 11:36:24 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.332 2011/01/28 15:39:06 stefan Exp '
 !
 
 version_SVN
-    ^ '$Id: ProjectDefinition.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: ProjectDefinition.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 ProjectDefinition initialize!
 
+
--- a/SequenceableCollection.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/SequenceableCollection.st	Fri Feb 04 23:09:23 2011 +0000
@@ -201,20 +201,6 @@
     "
 ! !
 
-!SequenceableCollection class methodsFor:'Compatibility-Squeak'!
-
-writeStream
-    "create a write-stream on an instance of the receiver-class"
-
-    ^ WriteStream on:(self new:50).
-
-    "
-     OrderedCollection writeStream
-    "
-
-    "Modified: / 29-03-2007 / 15:20:02 / cg"
-! !
-
 !SequenceableCollection class methodsFor:'Signal constants'!
 
 missingClassInLiteralArrayErrorSignal
@@ -346,6 +332,42 @@
     "
 
     "Created: / 29-03-2007 / 15:05:30 / cg"
+!
+
+writeStream
+    "create a write-stream on an instance of the receiver-class"
+
+    ^ self writeStreamClass on:(self new:50).
+
+    "
+     OrderedCollection writeStream
+    "
+
+    "Modified: / 09-01-2011 / 10:37:35 / cg"
+!
+
+writeStreamClass
+    "the type of stream used in writeStream"
+
+    ^ WriteStream
+
+    "
+     OrderedCollection writeStreamClass
+    "
+
+    "Created: / 09-01-2011 / 10:37:15 / cg"
+!
+
+writeStreamWithInitialSize:l
+    "create a write-stream on an instance of the receiver-class"
+
+    ^ self writeStreamClass on:(self new:l).
+
+    "
+     OrderedCollection writeStream
+    "
+
+    "Created: / 09-01-2011 / 10:36:28 / cg"
 ! !
 
 !SequenceableCollection class methodsFor:'queries'!
@@ -358,6 +380,7 @@
     ^ self == SequenceableCollection
 ! !
 
+
 !SequenceableCollection methodsFor:'Compatibility-Squeak'!
 
 allButFirst
@@ -638,6 +661,7 @@
     ^ self replaceFrom:start to:stop with:anArray startingAt:repStart
 ! !
 
+
 !SequenceableCollection methodsFor:'accessing'!
 
 after:anObject
@@ -2076,7 +2100,6 @@
     "
 ! !
 
-
 !SequenceableCollection methodsFor:'converting'!
 
 asCollectionOfSubCollectionsOfSize:pieceSize
@@ -5959,6 +5982,7 @@
     "Created: 14.2.1997 / 16:13:03 / cg"
 ! !
 
+
 !SequenceableCollection methodsFor:'searching'!
 
 detect:aBlock startingAt:startIndex
@@ -6181,7 +6205,10 @@
     "
      #(10 20 30 40 50 60 70) indexOfAnyOf:#(40 30 50)
      #(10 20 30 40 50 60 70) indexOfAnyOf:#(40.0 30.0 50)
-    "
+     'abcdefg' indexOfAnyOf:(CharacterSet newFrom:'cef')
+    "
+
+    "Modified: / 28-01-2011 / 18:03:14 / cg"
 !
 
 indexOfAnyOf:aCollection startingAt:start
@@ -7849,15 +7876,15 @@
 !SequenceableCollection class methodsFor:'documentation'!
 
 version
-    ^ '$Id: SequenceableCollection.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: SequenceableCollection.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/SequenceableCollection.st,v 1.299 2010/08/24 08:16:49 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/SequenceableCollection.st,v 1.301 2011/01/29 09:15:02 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: SequenceableCollection.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: SequenceableCollection.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 SequenceableCollection initialize!
@@ -7869,3 +7896,4 @@
 
 
 
+
--- a/SharedPool.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/SharedPool.st	Fri Feb 04 23:09:23 2011 +0000
@@ -57,6 +57,36 @@
     self classVarAt:constantName put:value.
 ! !
 
+!SharedPool class methodsFor:'code generation'!
+
+initializeFrom:aDictionary
+    "given a dictionary, generate my classvars and the init code"
+
+    |sortedNames code|
+
+    sortedNames := aDictionary keys asSortedCollection.
+    self addClassVarNames:sortedNames.
+
+    code := String streamContents:[:s |
+        s nextPutLine:'initialize'.
+        sortedNames do:[:k |
+            |v|
+
+            v := aDictionary at:k.
+            s nextPutLine:('    %1 := %2.' bindWith:k with:v storeString).
+        ].
+    ].
+    self class compile:code classified:'initialization'
+
+    "
+     OLEStatusCodeConstants initializeFrom:aDictionary
+    "
+
+    "Created: / 21-12-2010 / 17:58:25 / cg"
+    "Modified: / 15-01-2011 / 14:20:58 / cg"
+! !
+
+
 !SharedPool class methodsFor:'misc ui support'!
 
 iconInBrowserSymbol
@@ -160,15 +190,15 @@
 !SharedPool class methodsFor:'documentation'!
 
 version
-    ^ '$Id: SharedPool.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: SharedPool.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/SharedPool.st,v 1.10 2010/10/14 10:05:04 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/SharedPool.st,v 1.15 2011/01/15 13:21:03 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: SharedPool.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: SharedPool.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
@@ -176,3 +206,4 @@
 
 
 
+
--- a/Smalltalk.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Smalltalk.st	Fri Feb 04 23:09:23 2011 +0000
@@ -4382,6 +4382,18 @@
     "Modified: / 19-10-2006 / 23:17:36 / cg"
 !
 
+languageAndTerritory
+    "return the language and territory in the format lang-terr (i.e. de-de, en-us)"
+
+    ^ Language , '-' , (LanguageTerritory ? Language)
+
+    "
+     Smalltalk languageAndTerritory
+    "
+
+    "Created: / 16-01-2011 / 10:19:42 / cg"
+!
+
 languageTerritory
     "return the language territory setting"
 
@@ -7528,15 +7540,15 @@
 !Smalltalk class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Smalltalk.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Smalltalk.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.946 2010/11/18 10:26:49 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.947 2011/01/16 09:20:09 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Smalltalk.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Smalltalk.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
@@ -7554,3 +7566,4 @@
 
 
 
+
--- a/SmalltalkLanguage.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/SmalltalkLanguage.st	Fri Feb 04 23:09:23 2011 +0000
@@ -66,6 +66,14 @@
 
 !SmalltalkLanguage methodsFor:'accessing - classes'!
 
+codeGeneratorClass
+    "Answers a class that can generate smalltalk code"
+
+    ^ SmalltalkCodeGeneratorTool
+
+    "Created: / 30-01-2011 / 15:19:52 / cg"
+!
+
 compilerClass
     "Answer a class suitable for compiling a source code in 'my' language"
 
@@ -211,18 +219,19 @@
 !SmalltalkLanguage class methodsFor:'documentation'!
 
 version
-    ^ '$Id: SmalltalkLanguage.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: SmalltalkLanguage.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic/SmalltalkLanguage.st,v 1.12 2009/11/12 13:53:17 stefan Exp §'
+    ^ '§Header: /cvs/stx/stx/libbasic/SmalltalkLanguage.st,v 1.15 2011/01/30 14:20:27 cg Exp §'
 !
 
 version_SVN
-    ^ '$Id: SmalltalkLanguage.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: SmalltalkLanguage.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
 
 
 
+
--- a/String.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/String.st	Fri Feb 04 23:09:23 2011 +0000
@@ -488,6 +488,8 @@
     ^ Character tab asString
 ! !
 
+
+
 !String class methodsFor:'queries'!
 
 defaultPlatformClass
@@ -507,16 +509,22 @@
     "Modified: 23.4.1996 / 16:00:38 / cg"
 ! !
 
+
+
+
 !String methodsFor:'Compatibility-VW5.4'!
 
 asGUID
-    "return self as a UUID"
-
+    "return self as a GUID (or UUID if not present)"
+
+    GUID notNil ifTrue:[ ^ GUID fromString:self ].
     ^ self asUUID
 
     "
      '{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}' asGUID
     "
+
+    "Modified: / 12-01-2011 / 12:33:58 / cg"
 ! !
 
 !String methodsFor:'accessing'!
@@ -697,6 +705,7 @@
     "
 ! !
 
+
 !String methodsFor:'character searching'!
 
 identityIndexOf:aCharacter
@@ -3243,6 +3252,7 @@
     ^ super reverse
 ! !
 
+
 !String methodsFor:'substring searching'!
 
 indexOfSubCollection:aSubString startingAt:startIndex ifAbsent:exceptionValue caseSensitive:caseSensitive
@@ -3706,18 +3716,19 @@
 !String class methodsFor:'documentation'!
 
 version
-    ^ '$Id: String.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: String.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/String.st,v 1.272 2010/10/29 16:58:16 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/String.st,v 1.275 2011/01/12 13:51:12 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: String.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: String.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
 
 
 
+
--- a/SubclassResponsibilityError.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/SubclassResponsibilityError.st	Fri Feb 04 23:09:23 2011 +0000
@@ -52,17 +52,25 @@
 !SubclassResponsibilityError methodsFor:'queries'!
 
 description
+    parameter isNil ifTrue:[^ super description].
     ^ '"',parameter , '" ', super description
+
+    "Modified: / 19-12-2010 / 08:50:13 / cg"
 ! !
 
 !SubclassResponsibilityError class methodsFor:'documentation'!
 
 version
-    ^ '$Id: SubclassResponsibilityError.st 10517 2010-04-26 18:26:38Z vranyj1 $'
+    ^ '$Id: SubclassResponsibilityError.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
+version_CVS
+    ^ '§Header: /cvs/stx/stx/libbasic/SubclassResponsibilityError.st,v 1.8 2010/12/19 11:59:59 cg Exp §'
+!
+    
 version_SVN
-    ^ '$Id: SubclassResponsibilityError.st 10517 2010-04-26 18:26:38Z vranyj1 $'
+    ^ '$Id: SubclassResponsibilityError.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 SubclassResponsibilityError initialize!
+
--- a/Time.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Time.st	Fri Feb 04 23:09:23 2011 +0000
@@ -43,6 +43,9 @@
 
     Use instances of Timestamp (and read the comment there) to do this.
 
+    Time now returns the time in the local timezone.
+    Use Time utcNow to get the time in the UTC zone.
+
     Examples:
         |t|
 
@@ -128,7 +131,7 @@
 midnight
     "Answer a new instance at midnight."
 
-    ^self fromSeconds: 0
+    ^ self fromSeconds: 0
 
     "
      Time midnight
@@ -138,7 +141,7 @@
 noon
     "Answer a new instance at noon."
 
-    ^self fromSeconds: 43200 "12*60*60"
+    ^ self fromSeconds: 43200 "12*60*60"
 
     "
      Time noon
@@ -245,10 +248,36 @@
     "
 
     "Modified: 8.10.1996 / 19:32:11 / cg"
+!
+
+utcNow
+    "return an instance of myself representing this moment."
+
+    ^ self basicNew fromUtcOSTime:(OperatingSystem getOSTime)
+
+    "
+     Timestamp now   
+     Timestamp utcNow
+
+     Time now   
+     Time utcNow   
+    "
+
+    "Modified: 1.7.1996 / 15:20:10 / cg"
 ! !
 
 !Time class methodsFor:'format strings'!
 
+defaultFormatString
+    LanguageTerritory == #us ifTrue:[
+        ^ self formatString12us
+    ] ifFalse:[
+        ^ self formatString24
+    ]
+
+    "Created: / 16-01-2011 / 11:23:36 / cg"
+!
+
 formatString12us
     "return the format string used to format US times (and other areas)"
 
@@ -261,6 +290,7 @@
     ^ '%h:%m:%s'
 ! !
 
+
 !Time methodsFor:'Compatibility-Squeak'!
 
 intervalString
@@ -461,9 +491,23 @@
 
 !Time methodsFor:'converting'!
 
-asNative
-	#swAdded.
-	^self
+asLocalTimestamp
+    "return an Timestamp object from the receiver.
+     So I am interpreted as a Time in the local timezone.
+     The date components are taken from today."
+
+    |todayTimestamp|
+
+    todayTimestamp := Timestamp now.
+    todayTimestamp year:todayTimestamp year month:todayTimestamp month day:todayTimestamp day
+                   hour:(self hours) minute:(self minutes) second:(self seconds)
+                   millisecond:(self milliseconds).
+
+    ^ todayTimestamp.
+
+    "
+      Time now asLocalTimestamp
+    "
 !
 
 asSeconds
@@ -498,15 +542,30 @@
     "return an Timestamp object from the receiver.
      The date components are taken from today."
 
-    |today|
+    ^ self asLocalTimestamp
 
-    today := Date today.
-    ^ Timestamp year:today year month:today month day:today day
-                   hour:(self hours) minute:(self minutes) second:(self seconds)
-                   millisecond:(self milliseconds)
     "
       Time now asTimestamp
     "
+!
+
+asUtcTimestamp
+    "return an UtcTimestamp object from the receiver.
+     So I am interpreted as a Time in the UTC zone.
+     The date components are taken from today."
+
+    |todayTimestamp|
+
+    todayTimestamp := UtcTimestamp now.
+    todayTimestamp year:todayTimestamp year month:todayTimestamp month day:todayTimestamp day
+                   hour:(self hours) minute:(self minutes) second:(self seconds)
+                   millisecond:(self milliseconds).
+
+    ^ todayTimestamp.
+
+    "
+      Time now asUtcTimestamp
+    "
 ! !
 
 !Time methodsFor:'printing & storing'!
@@ -594,17 +653,15 @@
      depending on the setting of LanguageTerritory.
      I dont know what ST-80 does here (12-hour format ?)"
 
-    LanguageTerritory == #us ifTrue:[
-        self print12HourFormatOn:aStream
-    ] ifFalse:[
-        self print24HourFormatOn:aStream
-    ]
+    ^ self
+        printOn:aStream 
+        format:(self class defaultFormatString)               
 
     "
      Time now printOn:Transcript. Transcript cr
     "
 
-    "Modified: 22.2.1996 / 16:58:30 / cg"
+    "Modified: / 16-01-2011 / 11:27:24 / cg"
 !
 
 printString12HourFormat
@@ -639,7 +696,7 @@
 !Time methodsFor:'private'!
 
 fromOSTime:osTime
-    "set my time, given an osTime"
+    "set my time in the local timezone, given an osTime"
 
     |i|
 
@@ -649,6 +706,17 @@
     "Modified: 1.7.1996 / 15:21:06 / cg"
 !
 
+fromUtcOSTime:osTime
+    "set my time in the local timezone, given an osTime"
+
+    |i|
+
+    i := OperatingSystem computeUTCTimeAndDateFrom:osTime.
+    self setHours:(i hours) minutes:(i minutes) seconds:(i seconds)
+
+    "Modified: 1.7.1996 / 15:21:06 / cg"
+!
+
 getMilliseconds
     "return the number of milliseconds since midnight"
 
@@ -711,21 +779,23 @@
     timeEncoding := encoding
 ! !
 
+
 !Time class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Time.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Time.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Time.st,v 1.87 2010/03/31 09:39:45 stefan Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Time.st,v 1.89 2011/01/24 19:56:23 stefan Exp '
 !
 
 version_SVN
-    ^ '$Id: Time.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Time.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
 
 
 
+
--- a/Timestamp.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Timestamp.st	Fri Feb 04 23:09:23 2011 +0000
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-	      All Rights Reserved
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -12,24 +12,24 @@
 "{ Package: 'stx:libbasic' }"
 
 AbstractTime subclass:#Timestamp
-	instanceVariableNames:'osTime'
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Magnitude-Time'
+        instanceVariableNames:'osTime'
+        classVariableNames:''
+        poolDictionaries:''
+        category:'Magnitude-Time'
 !
 
 Object subclass:#TimestampBuilderAbstract
-	instanceVariableNames:'year month day hour minute second millisecond'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:Timestamp
+        instanceVariableNames:'year month day hour minute second millisecond isUtcTime'
+        classVariableNames:''
+        poolDictionaries:''
+        privateIn:Timestamp
 !
 
 Timestamp::TimestampBuilderAbstract subclass:#TimestampISO8601Builder
-	instanceVariableNames:'stream'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:Timestamp
+        instanceVariableNames:'stream'
+        classVariableNames:''
+        poolDictionaries:''
+        privateIn:Timestamp
 !
 
 !Timestamp class methodsFor:'documentation'!
@@ -37,7 +37,7 @@
 copyright
 "
  COPYRIGHT (c) 1989 by Claus Gittinger
-	      All Rights Reserved
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -51,9 +51,11 @@
 documentation
 "
     This class represents time values in milliSeconds starting some
-    time in the past. 
-    (typically, from 1st. Jan 1970, as used in the Unix operating system,
-     but other systems may bias the time differently.
+    time in the past. When printing an accessing values like #hour, the timestamp will be
+    interpreted in the local timezone.
+
+    (The internal representation, osTime, will typically start with 1970-01-01 0:00, 
+     as used in the Unix operating system, but other systems may bias the time differently.
      Actually, the implementation does not depend or even know which time/date 
      the OperatingSystem bases its time upon - it is simply keeping the value(s)
      as returned from the OS.
@@ -81,7 +83,7 @@
         Claus Gittinger
 
     [See also:]
-        Time Date
+        UtcTimestamp Time Date
         Delay ProcessorScheduler
 "
 ! !
@@ -96,9 +98,8 @@
 !Timestamp class methodsFor:'instance creation'!
 
 UTCYear:y month:m day:d hour:h minute:min second:s millisecond:millis
-    "return an instance of the receiver, given individual components.
-     See also `Timestamp now' and other protocol inherited
-     from my superclass."
+    "return an instance of the receiver, given individual components,
+     interpreted in the UTC timezone."
 
     ^ self basicNew 
         fromOSTime:(OperatingSystem 
@@ -112,6 +113,8 @@
      Timestamp UTCYear:1991 month:1 day:2 hour:12 minute:30 second:0 millisecond:100
      Timestamp UTCYear:1999 month:7 day:1 hour:1 minute:0 second:0 millisecond:0
      Timestamp UTCYear:2000 month:1 day:1 hour:1 minute:0 second:0 millisecond:0
+
+     UtcTimestamp UTCYear:2000 month:1 day:1 hour:1 minute:0 second:0 millisecond:0
     "
 
     "Modified: / 1.7.1996 / 15:22:07 / cg"
@@ -119,36 +122,6 @@
     "Modified: / 13.7.1999 / 12:42:30 / stefan"
 !
 
-day:d month:m year:y hour:h minutes:min seconds:s
-    <resource: #obsolete>
-    "This is obsolete. User #year:month:day:hour:minute:second:"
-
-    ^ self 
-        year:y month:m day:d hour:h 
-        minute:min second:s millisecond:0
-
-
-    "Modified: / 1.7.1996 / 15:22:26 / cg"
-    "Modified: / 13.7.1999 / 12:29:56 / stefan"
-!
-
-day:d month:m year:y hour:h minutes:min seconds:s milliseconds:millis
-    <resource: #obsolete>
-    "This is obsolete. User #year:month:day:hour:minute:second:millisecond:"
-
-    ^ self year:y month:m day:d hour:h minute:min second:s millisecond:millis
-
-    "
-     Timestamp day:1 month:1 year:1970 hour:1 minute:0 second:0 
-     Timestamp day:2 month:1 year:1991 hour:12 minute:30 second:0 
-     Timestamp day:2 month:1 year:1991 hour:12 minute:30 second:0 millisecond:100
-    "
-
-    "Created: / 1.7.1996 / 14:46:09 / cg"
-    "Modified: / 1.7.1996 / 15:22:07 / cg"
-    "Modified: / 13.7.1999 / 12:30:26 / stefan"
-!
-
 decodeFromLiteralArray:anArray
     "decode an Timestamp literalArray.
 
@@ -214,6 +187,397 @@
     "Modified: 2.7.1996 / 09:39:30 / cg"
 !
 
+secondsSince1970:secs
+    "set time from elapsed seconds since 1-1-1970, 0:0:0.
+     This is the format used in the UNIX world"
+
+    ^ self basicNew setSeconds:secs.
+
+    "
+     Timestamp secondsSince1970:0      
+     Timestamp secondsSince1970:3600
+     Timestamp secondsSince1970:3600*24
+     (Timestamp year:2010 month:7 day:1 hour:0 minute:0 second:0)
+       =
+     (Timestamp secondsSince1970:1277935200)
+    "
+
+    "Created: / 21-10-1996 / 17:48:30 / stefan"
+    "Modified: / 13-07-1999 / 12:31:22 / stefan"
+    "Modified: / 08-01-2011 / 16:06:28 / cg"
+!
+
+utcMillisecondsSince1970:secs
+    "set time from elapsed milliseconds since 1-1-1970, 0:0:0."
+
+    ^ self basicNew setMilliseconds:secs
+
+    "Created: / 08-01-2011 / 16:09:32 / cg"
+!
+
+utcNow
+    ^ UtcTimestamp now
+
+    "
+        Timestamp now
+        Timestamp utcNow
+    "
+!
+
+utcSecondsSince1970:secs
+    "set time from elapsed seconds since 1-1-1970, 0:0:0.
+     This is the format used in the UNIX world"
+
+    ^ self secondsSince1970:secs
+
+"/    |divMod|
+"/
+"/    divMod := secs divMod:3600.
+"/    ^ self year:1970 month:1 day:1 hour:(divMod at:1) minute:0 second:(divMod at:2) millisecond:0.
+
+    "
+     Timestamp secondsSince1970:0      
+     Timestamp secondsSince1970:3600    
+     Timestamp secondsSince1970:3600*24  
+    "
+
+    "Modified: / 13-07-1999 / 12:31:22 / stefan"
+    "Created: / 08-01-2011 / 16:05:09 / cg"
+!
+
+year:y month:m day:d hour:h minute:min second:s
+    "return an instance of the receiver, given individual components.
+     See also `Timestamp now' and other protocol inherited
+     from my superclass."
+
+    ^ self year:y month:m day:d hour:h minute:min second:s millisecond:0
+
+    "
+     Timestamp year:1970 month:1 day:1 hour:1 minute:0 second:0 
+     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 
+     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 millisecond:100
+     Timestamp year:2000 month:7 day:1 hour:1 minute:0 second:0 
+    "
+
+    "Modified: / 1.7.1996 / 15:22:07 / cg"
+    "Created: / 13.7.1999 / 12:06:39 / stefan"
+    "Modified: / 13.7.1999 / 12:27:47 / stefan"
+!
+
+year:y month:m day:d hour:h minute:min second:s millisecond:millis
+    "return an instance of the receiver, given individual components.
+     See also `Timestamp now' and other protocol inherited
+     from my superclass."
+
+    ^ self basicNew 
+            year:y month:m day:d hour:h minute:min second:s millisecond:millis
+    "
+     Timestamp year:1970 month:1 day:1 hour:0 minute:0 second:0 
+     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 
+     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 millisecond:100
+     Timestamp year:2000 month:7 day:1 hour:1 minute:0 second:0 
+     UtcTimestamp year:2000 month:7 day:1 hour:1 minute:0 second:0 
+    "
+
+    "Modified: / 1.7.1996 / 15:22:07 / cg"
+    "Created: / 13.7.1999 / 12:28:44 / stefan"
+    "Modified: / 13.7.1999 / 12:37:57 / stefan"
+! !
+
+!Timestamp class methodsFor:'Compatibility-Squeak'!
+
+current
+    ^ self now
+! !
+
+!Timestamp class methodsFor:'obsolete'!
+
+day:d month:m year:y hour:h minutes:min seconds:s
+    <resource: #obsolete>
+    "This is obsolete. User #year:month:day:hour:minute:second:"
+
+    ^ self 
+        year:y month:m day:d hour:h 
+        minute:min second:s millisecond:0
+
+
+    "Modified: / 1.7.1996 / 15:22:26 / cg"
+    "Modified: / 13.7.1999 / 12:29:56 / stefan"
+!
+
+day:d month:m year:y hour:h minutes:min seconds:s milliseconds:millis
+    <resource: #obsolete>
+    "This is obsolete. User #year:month:day:hour:minute:second:millisecond:"
+
+    ^ self year:y month:m day:d hour:h minute:min second:s millisecond:millis
+
+    "
+     Timestamp day:1 month:1 year:1970 hour:1 minute:0 second:0 
+     Timestamp day:2 month:1 year:1991 hour:12 minute:30 second:0 
+     Timestamp day:2 month:1 year:1991 hour:12 minute:30 second:0 millisecond:100
+    "
+
+    "Created: / 1.7.1996 / 14:46:09 / cg"
+    "Modified: / 1.7.1996 / 15:22:07 / cg"
+    "Modified: / 13.7.1999 / 12:30:26 / stefan"
+! !
+
+!Timestamp class methodsFor:'private'!
+
+basicReadFrom:aStream
+    "return a new Timestamp, reading a printed representation from aStream.
+     The string is interpreted as 24 hour format, as printed.
+     Notice, that this is not the storeString format and 
+     is different from the format expected by readFrom:.
+     KLUDGE: 
+        us and non-us format have different ordering of day and month;
+        The format read here is (non-us) dd-mm-yyyy hh:mm:ss.iii
+        or (us-format, for Travis) mm/dd/yyyy hh:mm:ss.iii.
+     On error, raise an exception"
+
+    |firstNumber secondNumber day month year hour min sec millis usFormat possibeMonthName|
+
+    firstNumber := Integer readFrom:aStream onError:[TimeConversionError raiseErrorString:' - integer expected'].
+    firstNumber > 31 ifTrue:[
+        "/ assume iso8601 format;
+        ^ self readIso8601FormatFrom:aStream yearAlreadyRead:firstNumber.
+    ].
+    aStream skipSeparators.
+
+    "/ consider this a kludge
+    usFormat := (aStream peek == $/ ).
+
+    [aStream peek isLetterOrDigit] whileFalse:[aStream next].
+    aStream peek isDigit ifTrue:[
+        secondNumber := Integer readFrom:aStream onError:-1.
+
+        usFormat ifTrue:[
+            month := firstNumber.
+            day := secondNumber.
+        ] ifFalse:[
+            month := secondNumber.
+            day := firstNumber.
+        ].
+
+    ] ifFalse:[
+        possibeMonthName := aStream throughAnyForWhich:[:ch | ch isLetter].
+        month := Date indexOfMonth:possibeMonthName asLowercase.
+        day := firstNumber.
+    ].
+
+    (day between:1 and:31) ifFalse:[ TimeConversionError raiseErrorString:' - bad day' ].
+    (month between:1 and:12) ifFalse:[ TimeConversionError raiseErrorString:' - bad month' ].
+
+    [aStream peek isDigit] whileFalse:[aStream next].
+    year := Integer readFrom:aStream onError:[ TimeConversionError raiseErrorString:' - bad year' ].
+
+    aStream atEnd ifTrue:[
+        hour := min := sec := millis := 0.
+    ] ifFalse:[
+        [aStream peek isDigit] whileFalse:[aStream next].
+        hour := Integer readFrom:aStream onError:-1.
+        (hour between:0 and:24) ifFalse:[ TimeConversionError raiseErrorString:' - bad hour' ].
+
+        [aStream peek isDigit] whileFalse:[aStream next].
+        min := Integer readFrom:aStream onError:-1.
+        (min between:0 and:59) ifFalse:[ TimeConversionError raiseErrorString:' - bad minute' ].
+
+        aStream atEnd ifTrue:[
+            sec := millis := 0.
+        ] ifFalse:[
+            [aStream peek isDigit] whileFalse:[aStream next].
+            sec := Integer readFrom:aStream onError:-1.
+            (sec between:0 and:59) ifFalse:[ TimeConversionError raiseErrorString:' - bad second' ].
+
+            aStream peek = $. ifTrue:[
+                aStream next.
+                millis := Integer readFrom:aStream onError:0.
+                millis >= 1000 ifTrue:[ TimeConversionError raiseErrorString:' - bad millisecond' ].
+            ] ifFalse:[
+                millis := 0.
+            ].
+        ].
+    ].
+
+    "special check - only 24:00:00 is allowed;
+     every time after that must wrap"
+    hour == 24 ifTrue:[
+        (min ~~ 0 or:[sec ~~ 0 or:[millis ~~ 0]]) ifTrue:[ TimeConversionError raiseErrorString:' - bad hour' ].
+    ].
+    ^ self year:year month:month day:day hour:hour minute:min second:sec millisecond:millis.
+
+    "
+     Timestamp basicReadFrom:'20-2-1995 13:11:06' readStream   
+     Timestamp basicReadFrom:'20-2-1995 13:11:06.' readStream   
+     (Timestamp basicReadFrom:'10-9-1995 13:11:06' readStream) month   
+     (Timestamp basicReadFrom:'10/9/1995 13:11:06' readStream) month   
+     Timestamp basicReadFrom:'20-2-1995 13:11' readStream       
+     Timestamp basicReadFrom:'20-2-1995 13:11:06.100' readStream    
+     Timestamp basicReadFrom:'32-2-1995 13:11:06.100' readStream  
+     Timestamp basicReadFrom:'32-foo-1995 13:11:06.100' readStream 
+     Timestamp basicReadFrom:'20-13-1995 13:11:06.100' readStream   
+     Timestamp basicReadFrom:'20-12-1995 25:11:06.100' readStream   
+     Timestamp basicReadFrom:'20-12-1995 23:61:06.100' readStream   
+     Timestamp basicReadFrom:'20-12-1995 23:10:66.100' readStream   
+     Timestamp basicReadFrom:'20-12-1995 23:10:00.1000' readStream   
+     Timestamp basicReadFrom:'20-2-1995 24:01:00.100' readStream 
+     Timestamp basicReadFrom:'20-2-1995 24:00:01.100' readStream 
+     Timestamp basicReadFrom:'foo' readStream                    
+     Timestamp basicReadFrom:(Timestamp now printString readStream)                  
+     Timestamp basicReadFrom:'1995-10-20 24:00:00.000' readStream 
+     Timestamp basicReadFrom:'1995-10-20 12:10:00.000' readStream 
+
+     UtcTimestamp basicReadFrom:'1995-10-20 12:10:00.000' readStream 
+    "
+!
+
+readIso8601FormatFrom:aStringOrStream yearAlreadyRead:yearOrNil
+    "common helper for read methods.
+     Return a new Timestamp, reading an iso8601 representation from aStream.
+
+     If the time ends with a 'Z' it is the UTC (or zulu) time,
+     othrwise it is local time.
+
+     Missing month/day values are replaced with 1; i.e. 1999T24:00
+     is the same as 1999-01-01T24:00:00.
+     Missing minute, second and ms values are replaced with 0;
+     i.e. 1999T12 is the same as 1999-01-01T12:00:00.000.
+     Of course, a 24 hour clock is used.
+     On error, raise an exception.
+     Please use this format for all external representations - its the standard."
+
+    |str day month year hour min sec millis fraction isUtcTime peekChar|
+
+    str := aStringOrStream readStream.
+
+    month := day := 1.
+    hour := min := sec := millis := 0.
+    isUtcTime := false.
+
+    yearOrNil notNil ifTrue:[
+        year := yearOrNil
+    ] ifFalse:[
+        year := Integer readFrom:str onError:nil.
+        year isNil ifTrue:[ TimeConversionError raiseErrorString:' - bad year' ]
+    ].
+
+    str skipSeparators.
+    str peek == $- ifTrue:[
+        str next.
+        "/ month follows.
+        month := Integer readFrom:str.
+        (month between:1 and:12) ifFalse:[ TimeConversionError raiseErrorString:' - bad month' ].
+
+        str skipSeparators.
+        str peek == $- ifTrue:[
+            str next.
+            "/ day follows.
+            day := Integer readFrom:str.
+            (day between:1 and:31) ifFalse:[ TimeConversionError raiseErrorString:' - bad day' ].
+        ].
+    ].
+
+    str skipSeparators.
+    str atEnd ifFalse:[
+        "time follows"
+
+        str peek == $T ifTrue:[
+            "we treat the T as optional here"
+            str next.
+            str skipSeparators.
+        ].
+        hour := Integer readFrom:str onError:-1.
+        (hour between:0 and:24) ifFalse:[ TimeConversionError raiseErrorString:' - bad hour' ].
+        str skipSeparators.
+        str peekOrNil == $: ifTrue:[
+            str next.
+            "/ minutes follow.
+            min := Integer readFrom:str onError:-1.
+            (min between:0 and:59) ifFalse:[ TimeConversionError raiseErrorString:' - bad minute' ].
+            str skipSeparators.
+            str peekOrNil == $: ifTrue:[
+                str next.
+                "/ seconds follow.
+                sec := Integer readFrom:str onError:-1.
+                (sec between:0 and:59) ifFalse:[ TimeConversionError raiseErrorString:' - bad seconds' ].
+                str skipSeparators.
+                str peekOrNil == $. ifTrue:[
+                    str next.
+                    "/ millis follow.
+                    fraction := Number readMantissaFrom:str radix:10.    
+                    millis := (1000 * fraction) rounded.  "/ mhmh - should it be truncated ?
+                ]
+            ].
+        ].
+        
+        peekChar := str peekOrNil.
+        peekChar notNil ifTrue:[
+            peekChar == $Z ifTrue:[
+                str next.
+                isUtcTime := true.
+            ]
+"/ Todo
+"/            ifFalse:[peekChar == $+ ifTrue:[
+"/                str next.
+"/                isUtcTime := true.
+"/            ] ifFalse:[peekChar == $- ifTrue:[
+"/                str next.
+"/                isUtcTime := true.
+"/            ]]]
+        ].
+    ].
+
+    "special check - only 24:00:00 is allowed;
+     every time after that must wrap"
+    hour == 24 ifTrue:[
+        (min ~~ 0 or:[sec ~~ 0 or:[millis ~~ 0]]) ifTrue:[ TimeConversionError raiseErrorString:' - bad hour' ].
+    ].
+
+    isUtcTime ifTrue:[
+        ^ self 
+            UTCYear:year month:month day:day 
+            hour:hour minute:min second:sec millisecond:millis.
+    ] ifFalse:[
+        ^ self 
+            year:year month:month day:day 
+            hour:hour minute:min second:sec millisecond:millis.
+    ]
+
+    "
+     Timestamp readIso8601FormatFrom:'1995-02-20T13:11:06.123'    
+     Timestamp readIso8601FormatFrom:'1995-02-20T13:11:06'    
+     Timestamp readIso8601FormatFrom:'1995-02T13:11:06'     
+     Timestamp readIso8601FormatFrom:'1995T13:11:06'        
+     Timestamp readIso8601FormatFrom:'1995T13:11'           
+     Timestamp readIso8601FormatFrom:'1995T13'              
+     Timestamp readIso8601FormatFrom:'1995'              
+
+     Timestamp readIso8601FormatFrom:'1995-02-20 13:11:06'    
+     Timestamp readIso8601FormatFrom:'1995-02-20 13:11:06Z'    
+
+     Timestamp readIso8601FormatFrom:'1995-02-20 13:11'    
+     Timestamp readIso8601FormatFrom:'1995-02-20 13'    
+
+   24 is allowed with ISO, and is 00:00 of the next day:
+     Timestamp readIso8601FormatFrom:'1995-02-20 24:00:00'    
+    "
+!
+
+readIso8601FormatFrom:aStringOrStream yearAlreadyRead:yearOrNil onError:exceptionValue
+    "common helper for read methods."
+
+    |retVal|
+
+    ConversionError handle:[:ex |
+        retVal := exceptionValue value
+    ] do:[
+        retVal := self readIso8601FormatFrom:aStringOrStream yearAlreadyRead:yearOrNil
+    ].
+    ^ retVal
+! !
+
+!Timestamp class methodsFor:'reading'!
+
 readFrom:aStringOrStream onError:exceptionBlock
     "return a new Timestamp, reading a printed representation from aStream.
      The string is interpreted as 24 hour format, as printed.
@@ -460,6 +824,13 @@
     "Modified: / 22-08-2006 / 12:30:11 / cg"
 !
 
+readISO8601From: stringOrStream
+
+    ^ TimestampISO8601Builder read:stringOrStream withClass:self
+
+    "Created: / 16-06-2005 / 16:13:36 / masca"
+!
+
 readIso8601FormatFrom:aStringOrStream
     "return a new Timestamp, reading an iso8601 UTC representation from aStream.
      Missing month/day values are replaced with 1; i.e. 1999T24:00
@@ -578,316 +949,11 @@
         (Date abbreviatedNameOfMonth:i language:#en) sameAs:monthName 
     ] ifNone:[^ exceptionBlock].    
 
-    ^ (Timestamp 
+    ^ (self 
         fromDate:(Date newDay:day monthIndex:month year:year) 
         andTime:time) + utcOffset
 
     "Modified: / 05-10-2010 / 16:05:32 / cg"
-!
-
-secondsSince1970:sec
-    "set time from elapsed seconds since 1-1-1970, 0:0:0.
-     This is the format used in the UNIX world"
-
-    |divMod|
-
-    divMod := sec divMod:3600.
-    ^ self year:1970 month:1 day:1 hour:(divMod at:1) minute:0 second:(divMod at:2) millisecond:0.
-
-    "
-     Timestamp secondsSince1970:0      
-     Timestamp secondsSince1970:3600
-     Timestamp secondsSince1970:3600*24
-    "
-
-    "Created: / 21.10.1996 / 17:48:30 / stefan"
-    "Modified: / 13.7.1999 / 12:31:22 / stefan"
-!
-
-year:y month:m day:d hour:h minute:min second:s
-    "return an instance of the receiver, given individual components.
-     See also `Timestamp now' and other protocol inherited
-     from my superclass."
-
-    ^ self year:y month:m day:d hour:h minute:min second:s millisecond:0
-
-    "
-     Timestamp year:1970 month:1 day:1 hour:1 minute:0 second:0 
-     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 
-     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 millisecond:100
-     Timestamp year:2000 month:7 day:1 hour:1 minute:0 second:0 
-    "
-
-    "Modified: / 1.7.1996 / 15:22:07 / cg"
-    "Created: / 13.7.1999 / 12:06:39 / stefan"
-    "Modified: / 13.7.1999 / 12:27:47 / stefan"
-!
-
-year:y month:m day:d hour:h minute:min second:s millisecond:millis
-    "return an instance of the receiver, given individual components.
-     See also `Timestamp now' and other protocol inherited
-     from my superclass."
-
-    ^ self basicNew 
-        fromOSTime:(OperatingSystem 
-                        computeOSTimeFromYear:y month:m day:d 
-                                         hour:h minute:min seconds:s millis:millis)
-
-    "
-     Timestamp year:1970 month:1 day:1 hour:0 minute:0 second:0 
-     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 
-     Timestamp year:1991 month:1 day:2 hour:12 minute:30 second:0 millisecond:100
-     Timestamp year:2000 month:7 day:1 hour:1 minute:0 second:0 
-    "
-
-    "Modified: / 1.7.1996 / 15:22:07 / cg"
-    "Created: / 13.7.1999 / 12:28:44 / stefan"
-    "Modified: / 13.7.1999 / 12:37:57 / stefan"
-! !
-
-!Timestamp class methodsFor:'Compatibility-Squeak'!
-
-current
-    ^ self now
-! !
-
-!Timestamp class methodsFor:'private'!
-
-basicReadFrom:aStream
-    "return a new Timestamp, reading a printed representation from aStream.
-     The string is interpreted as 24 hour format, as printed.
-     Notice, that this is not the storeString format and 
-     is different from the format expected by readFrom:.
-     KLUDGE: 
-        us and non-us format have different ordering of day and month;
-        The format read here is (non-us) dd-mm-yyyy hh:mm:ss.iii
-        or (us-format, for Travis) mm/dd/yyyy hh:mm:ss.iii.
-     On error, raise an exception"
-
-    |firstNumber secondNumber day month year hour min sec millis usFormat possibeMonthName|
-
-    firstNumber := Integer readFrom:aStream onError:[ConversionError raiseErrorString:' - integer expected'].
-    firstNumber > 31 ifTrue:[
-        "/ assume iso8601 format;
-        ^ self readIso8601FormatFrom:aStream yearAlreadyRead:firstNumber.
-    ].
-    aStream skipSeparators.
-
-    "/ consider this a kludge
-    usFormat := (aStream peek == $/ ).
-
-    [aStream peek isLetterOrDigit] whileFalse:[aStream next].
-    aStream peek isDigit ifTrue:[
-        secondNumber := Integer readFrom:aStream onError:-1.
-
-        usFormat ifTrue:[
-            month := firstNumber.
-            day := secondNumber.
-        ] ifFalse:[
-            month := secondNumber.
-            day := firstNumber.
-        ].
-
-    ] ifFalse:[
-        possibeMonthName := aStream throughAnyForWhich:[:ch | ch isLetter].
-        month := Date indexOfMonth:possibeMonthName asLowercase.
-        day := firstNumber.
-    ].
-
-    (day between:1 and:31) ifFalse:[ ConversionError raiseErrorString:' - bad day' ].
-    (month between:1 and:12) ifFalse:[ ConversionError raiseErrorString:' - bad month' ].
-
-    [aStream peek isDigit] whileFalse:[aStream next].
-    year := Integer readFrom:aStream onError:[ ConversionError raiseErrorString:' - bad year' ].
-
-    aStream atEnd ifTrue:[
-        hour := min := sec := millis := 0.
-    ] ifFalse:[
-        [aStream peek isDigit] whileFalse:[aStream next].
-        hour := Integer readFrom:aStream onError:-1.
-        (hour between:0 and:24) ifFalse:[ ConversionError raiseErrorString:' - bad hour' ].
-
-        [aStream peek isDigit] whileFalse:[aStream next].
-        min := Integer readFrom:aStream onError:-1.
-        (min between:0 and:59) ifFalse:[ ConversionError raiseErrorString:' - bad minute' ].
-
-        aStream atEnd ifTrue:[
-            sec := millis := 0.
-        ] ifFalse:[
-            [aStream peek isDigit] whileFalse:[aStream next].
-            sec := Integer readFrom:aStream onError:-1.
-            (sec between:0 and:59) ifFalse:[ ConversionError raiseErrorString:' - bad second' ].
-
-            aStream peek = $. ifTrue:[
-                aStream next.
-                millis := Integer readFrom:aStream onError:0.
-                millis >= 1000 ifTrue:[ ConversionError raiseErrorString:' - bad millisecond' ].
-            ] ifFalse:[
-                millis := 0.
-            ].
-        ].
-    ].
-
-    "special check - only 24:00:00 is allowed;
-     every time after that must wrap"
-    hour == 24 ifTrue:[
-        (min ~~ 0 or:[sec ~~ 0 or:[millis ~~ 0]]) ifTrue:[ ConversionError raiseErrorString:' - bad hour' ].
-    ].
-    ^ self year:year month:month day:day hour:hour minute:min second:sec millisecond:millis.
-
-    "
-     Timestamp basicReadFrom:'20-2-1995 13:11:06' readStream   
-     Timestamp basicReadFrom:'20-2-1995 13:11:06.' readStream   
-     (Timestamp basicReadFrom:'10-9-1995 13:11:06' readStream) month   
-     (Timestamp basicReadFrom:'10/9/1995 13:11:06' readStream) month   
-     Timestamp basicReadFrom:'20-2-1995 13:11' readStream       
-     Timestamp basicReadFrom:'20-2-1995 13:11:06.100' readStream    
-     Timestamp basicReadFrom:'32-2-1995 13:11:06.100' readStream  
-     Timestamp basicReadFrom:'32-foo-1995 13:11:06.100' readStream 
-     Timestamp basicReadFrom:'20-13-1995 13:11:06.100' readStream   
-     Timestamp basicReadFrom:'20-12-1995 25:11:06.100' readStream   
-     Timestamp basicReadFrom:'20-12-1995 23:61:06.100' readStream   
-     Timestamp basicReadFrom:'20-12-1995 23:10:66.100' readStream   
-     Timestamp basicReadFrom:'20-12-1995 23:10:00.1000' readStream   
-     Timestamp basicReadFrom:'20-2-1995 24:01:00.100' readStream 
-     Timestamp basicReadFrom:'20-2-1995 24:00:01.100' readStream 
-     Timestamp basicReadFrom:'foo' readStream                    
-     Timestamp basicReadFrom:(Timestamp now printString readStream)                  
-     Timestamp basicReadFrom:'1995-10-20 24:00:00.000' readStream 
-     Timestamp basicReadFrom:'1995-10-20 12:10:00.000' readStream 
-    "
-!
-
-readIso8601FormatFrom:aStringOrStream yearAlreadyRead:yearOrNil
-    "common helper for read methods.
-     Return a new Timestamp, reading an iso8601 UTC representation from aStream.
-     Missing month/day values are replaced with 1; i.e. 1999T24:00
-     is the same as 1999-01-01T24:00:00.
-     Missing minute, second and ms values are replaced with 0;
-     i.e. 1999T12 is the same as 1999-01-01T12:00:00.000.
-     Of course, a 24 hour clock is used.
-     On error, raise an exception.
-     Please use this format for all external representations - its the standard."
-
-    |str day month year hour min sec millis fraction|
-
-    str := aStringOrStream readStream.
-
-    month := day := 1.
-    hour := min := sec := millis := 0.
-
-    yearOrNil notNil ifTrue:[
-        year := yearOrNil
-    ] ifFalse:[
-        year := Integer readFrom:str onError:nil.
-        year isNil ifTrue:[ ConversionError raiseErrorString:' - bad year' ]
-    ].
-
-    str skipSeparators.
-    str peek == $- ifTrue:[
-        str next.
-        "/ month follows.
-        month := Integer readFrom:str.
-        (month between:1 and:12) ifFalse:[ ConversionError raiseErrorString:' - bad month' ].
-
-        str skipSeparators.
-        str peek == $- ifTrue:[
-            str next.
-            "/ day follows.
-            day := Integer readFrom:str.
-            (day between:1 and:31) ifFalse:[ ConversionError raiseErrorString:' - bad day' ].
-        ].
-    ].
-
-    str skipSeparators.
-    str atEnd ifFalse:[
-        "time follows"
-
-        str peek == $T ifTrue:[
-            "we treat the T as optional here"
-            str next.
-            str skipSeparators.
-        ].
-        hour := Integer readFrom:str onError:-1.
-        (hour between:0 and:24) ifFalse:[ ConversionError raiseErrorString:' - bad hour' ].
-        str skipSeparators.
-        str peek == $: ifTrue:[
-            str next.
-            "/ minutes follow.
-            min := Integer readFrom:str onError:-1.
-            (min between:0 and:59) ifFalse:[ ConversionError raiseErrorString:' - bad minute' ].
-            str skipSeparators.
-            str peek == $: ifTrue:[
-                str next.
-                "/ seconds follow.
-                sec := Integer readFrom:str onError:-1.
-                (sec between:0 and:59) ifFalse:[ ConversionError raiseErrorString:' - bad seconds' ].
-                str skipSeparators.
-                str peek == $. ifTrue:[
-                    str next.
-                    "/ millis follow.
-                    fraction := Number readMantissaFrom:str radix:10.    
-                    millis := (1000 * fraction) rounded.  "/ mhmh - should it be truncated ?
-                ]
-            ].
-        ].
-    ].
-
-    "special check - only 24:00:00 is allowed;
-     every time after that must wrap"
-    hour == 24 ifTrue:[
-        (min ~~ 0 or:[sec ~~ 0 or:[millis ~~ 0]]) ifTrue:[ ConversionError raiseErrorString:' - bad hour' ].
-    ].
-    ^ self 
-        year:year month:month day:day 
-        hour:hour minute:min second:sec millisecond:millis.
-
-    "
-     Timestamp readIso8601FormatFrom:'1995-02-20T13:11:06.123'    
-     Timestamp readIso8601FormatFrom:'1995-02-20T13:11:06'    
-     Timestamp readIso8601FormatFrom:'1995-02T13:11:06'     
-     Timestamp readIso8601FormatFrom:'1995T13:11:06'        
-     Timestamp readIso8601FormatFrom:'1995T13:11'           
-     Timestamp readIso8601FormatFrom:'1995T13'              
-     Timestamp readIso8601FormatFrom:'1995'              
-
-     Timestamp readIso8601FormatFrom:'1995-02-20 13:11:06'    
-     Timestamp readIso8601FormatFrom:'1995-02-20 13:11'    
-     Timestamp readIso8601FormatFrom:'1995-02-20 13'    
-
-   24 is allowed with ISO, and is 00:00 of the next day:
-     Timestamp readIso8601FormatFrom:'1995-02-20 24:00:00'    
-    "
-!
-
-readIso8601FormatFrom:aStringOrStream yearAlreadyRead:yearOrNil onError:exceptionValue
-    "common helper for read methods.
-     Return a new Timestamp, reading an iso8601 UTC representation from aStream.
-     Missing month/day values are replaced with 1; i.e. 1999T24:00
-     is the same as 1999-01-01T24:00:00.
-     Missing minute, second and ms values are replaced with 0;
-     i.e. 1999T12 is the same as 1999-01-01T12:00:00.000.
-     Of course, a 24 hour clock is used.
-     On error, raise an exception.
-     Please use this format for all external representations - its the standard."
-
-    |retVal|
-
-    ConversionError handle:[:ex |
-        retVal := exceptionValue value
-    ] do:[
-        retVal := self readIso8601FormatFrom:aStringOrStream yearAlreadyRead:yearOrNil
-    ].
-    ^ retVal
-! !
-
-!Timestamp class methodsFor:'reading'!
-
-readISO8601From: stringOrStream
-
-    ^TimestampISO8601Builder read: stringOrStream
-
-    "Created: / 16-06-2005 / 16:13:36 / masca"
 ! !
 
 
@@ -897,7 +963,7 @@
     "return the day-in-month of the receiver (1..31).
      For compatibility, use instances of Date for this."
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) day.
+    ^ self timeInfo day.
 
     "
      Timestamp now day 
@@ -912,7 +978,7 @@
      WARNING: does not care for pre-julian dates 
         (i.e. do not use this for dates before 1752)"
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) dayInWeek
+    ^ self timeInfo dayInWeek
 
     "
      Timestamp now dayInWeek 
@@ -925,7 +991,7 @@
 dayInYear
     "return the year-day of the receiver - 1 for Jan, 1st."
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) dayInYear
+    ^ self timeInfo dayInYear
 
     "
      Timestamp now dayInYear 
@@ -935,6 +1001,35 @@
     "Modified: 2.7.1996 / 10:21:02 / cg"
 !
 
+dayOfMonth
+    "Answer the day of the month represented by me.
+     Same as day; for ST-80 compatibility."
+
+    ^ self asDate dayOfMonth
+
+    "
+     Timestamp now dayOfMonth 
+     (Timestamp newDay:184 year:1996) dayOfMonth  
+    "
+
+    "Created: / 20-01-2011 / 12:26:54 / cg"
+!
+
+dayOfWeekName
+    "return the week-day of the receiver as a string.
+     The returned string depends on the language setting.
+     Expect things like 'monday', 'tuesday' ..."
+
+    ^ self asDate dayOfWeekName
+
+    "
+     Timestamp now dayOfWeekName 
+     (Timestamp newDay:184 year:1996) dayOfWeekName  
+    "
+
+    "Created: / 20-01-2011 / 12:28:46 / cg"
+!
+
 hour
     "return the hour (0..23).
      ST-80 Timestamp compatibility (I'd prefer the name #hours, for Time compatibility)."
@@ -948,7 +1043,7 @@
 hours
     "return the hours (0..23)"
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) hours
+    ^ self timeInfo hours
 
     "
      Timestamp now hours  
@@ -970,7 +1065,7 @@
 milliseconds
     "return the milliseconds (0..999)"
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) milliseconds
+    ^ self timeInfo milliseconds
 
     "
      Timestamp now milliseconds   
@@ -993,7 +1088,7 @@
 minutes
     "return the minutes (0..59)"
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) minutes
+    ^ self timeInfo minutes
 
     "
      Timestamp now minutes 
@@ -1006,7 +1101,7 @@
     "return the month of the receiver (1..12).
      For compatibility, use instances of Date for this."
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) month
+    ^ self timeInfo month
 
     "
      Timestamp now month
@@ -1041,7 +1136,7 @@
 seconds
     "return the seconds (0..59)"
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) seconds
+    ^ self timeInfo seconds
 
     "
      Timestamp now seconds 
@@ -1051,7 +1146,22 @@
 !
 
 timeInfo
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime)
+    ^ OperatingSystem computeTimeAndDateFrom:osTime
+!
+
+timeZoneDeltaInMinutes
+    "answer the number of minutes between local time and utc time.
+     Delta is positive if local time is ahead of utc, negative if behind utc."
+
+    ^ self utcOffset negated // 60
+
+    "
+     Timestamp now timeZoneDeltaInMinutes 
+     (Timestamp day:1 month:7 year:1995 hour:12 minutes:0 seconds:0) timeZoneDeltaInMinutes
+    "
+
+    "Modified: 20.12.1995 / 17:28:49 / stefan"
+    "Modified: 1.7.1996 / 15:21:29 / cg"
 !
 
 utcOffset
@@ -1064,7 +1174,7 @@
      If utcOffset is negative, the local timezone is east of Greenwich.
      If utcOffset is positive, the local timezone is west of Greenwich."
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) utcOffset
+    ^ self timeInfo utcOffset
 
     "
      Timestamp now utcOffset 
@@ -1075,11 +1185,23 @@
     "Modified: 1.7.1996 / 15:21:29 / cg"
 !
 
+weekInYear
+    "return the week number of the receiver - 1 for Jan, 1st."
+
+    ^ Date weekInYearOf:self
+
+    "
+     (Timestamp newDay:1 year:2000) weekInYear    
+     (Timestamp newDay:2 year:2000) weekInYear    
+     (Timestamp newDay:3 year:2000) weekInYear    
+    "
+!
+
 year
     "return the year of the receiver i.e. 1992.
      For compatibility, use instances of Date for this."
 
-    ^ (OperatingSystem computeTimeAndDateFrom:osTime) year
+    ^ self timeInfo year
 
     "
      Timestamp now year
@@ -1090,6 +1212,25 @@
 
 !Timestamp methodsFor:'arithmetic'!
 
+ceilingSecond
+    "return a timestamp which represents the next full second"
+
+    |offs|
+
+    offs := (self milliseconds / 1000) ceiling.
+    ^ self class basicNew setSeconds:(self getSeconds + offs).
+
+    "
+     |t1 t2|
+
+     t1 := Timestamp now.
+     t2 := t1 ceilingSecond.
+     self halt
+    "
+
+    "Created: / 08-01-2011 / 16:23:03 / cg"
+!
+
 deltaFrom:aTimestamp
     "return the delta as a timeDuration between 2 timeStamps.
      The argument is supposed to be BEFORE the receiver,
@@ -1110,6 +1251,22 @@
     "Modified: / 10-07-2010 / 09:37:01 / cg"
 !
 
+floorSecond
+    "return a timestamp truncated to the last full second"
+
+    ^ self class basicNew setSeconds:(self getSeconds).
+
+    "
+     |t1 t2|
+
+     t1 := Timestamp now.
+     t2 := t1 floorSecond.
+     self halt
+    "
+
+    "Created: / 08-01-2011 / 16:20:55 / cg"
+!
+
 millisecondDeltaFrom:aTimestamp
     "return the delta in milliseconds between 2 absolute times.
      The argument is supposed to be BEFORE the receiver,
@@ -1129,6 +1286,25 @@
     "Modified: / 10-07-2010 / 09:37:18 / cg"
 !
 
+roundedToSecond
+    "return a timestamp which represents the time rounded to the nearest full second"
+
+    |offs|
+
+    offs := (self milliseconds / 1000) rounded.
+    ^ self class basicNew setSeconds:(self getSeconds + offs).
+
+    "
+     |t1 t2|
+
+     t1 := Timestamp now.
+     t2 := t1 roundedToSecond.
+     self halt
+    "
+
+    "Created: / 08-01-2011 / 16:24:12 / cg"
+!
+
 secondDeltaFrom:aTimestamp
     "return the delta in seconds between 2 absolute times.
      The argument is supposed to be BEFORE the receiver,
@@ -1153,7 +1329,7 @@
 = aTime
     "return true if the argument, aTime represents the same time"
 
-    (aTime species == self species) ifFalse:[^ false].
+    aTime isTimestamp ifFalse:[^ false].
     ^ (self getMilliseconds = aTime getMilliseconds)
 
     "Modified: 3.7.1996 / 13:10:24 / cg"
@@ -1182,7 +1358,7 @@
     "return a Date object from the receiver.
      The returned date will only represent the day - not the timeOfDay."
 
-    ^ Date fromOSTime:osTime 
+    ^ self timeInfo asDate 
 
     "
      Timestamp now  
@@ -1195,9 +1371,9 @@
 !
 
 asLocalTimestamp
-    "convert an utc timestamp to local time "
-
-    ^ self - self utcOffset
+    "represent myself as a timestamp in the local timezone"
+
+    ^ self
 
     "
      Timestamp now asUtcTimestamp
@@ -1234,11 +1410,12 @@
     "return a Time object from the receiver.
      The returned time will only represent the timeOfDay - not the day."
 
-    ^ Time fromOSTime:osTime
+    ^ self timeInfo asTime
 
     "
      Timestamp now  
      Timestamp now asTime
+     UtcTimestamp now asTime
      (Timestamp now addTime:3600) asTime 
     "
 !
@@ -1250,12 +1427,13 @@
 !
 
 asUtcTimestamp
-    "convert a local time timestamp to UTC"
-
-    ^ self + self utcOffset
+    "represent myself as a timestamp in the UTC timezone"
+    
+    ^ UtcTimestamp fromOSTime:osTime
 
     "
      Timestamp now asUtcTimestamp
+     Timestamp now asUtcTimestamp asLocalTimestamp
     "
 !
 
@@ -1297,42 +1475,17 @@
     "
 ! !
 
-!Timestamp methodsFor:'printing'!
-
-printISO8601
-
-    ^ TimestampISO8601Builder print: self
-
-    "
-     Timestamp now printISO8601           
-    "
-
-    "Created: / 16-06-2005 / 16:11:15 / masca"
-!
-
-printISO8601Compressed
-
-    ^ TimestampISO8601Builder printCompressed: self
-
-    "
-     Timestamp now printISO8601Compressed           
-    "
-
-    "Created: / 16-06-2005 / 16:11:31 / masca"
-!
-
-printISO8601CompressedOn: aStream
-
-    TimestampISO8601Builder printCompressed: self on: aStream
-
-    "Created: / 16-06-2005 / 16:11:50 / masca"
-!
-
-printISO8601On: aStream
-
-    TimestampISO8601Builder print: self on: aStream
-
-    "Created: / 16-06-2005 / 16:11:07 / masca"
+!Timestamp methodsFor:'initialization'!
+
+year:y month:m day:d hour:h minute:min second:s millisecond:millis 
+    osTime := OperatingSystem 
+                computeOSTimeFromYear:y
+                month:m
+                day:d
+                hour:h
+                minute:min
+                seconds:s
+                millis:millis
 ! !
 
 !Timestamp methodsFor:'printing & storing'!
@@ -1371,18 +1524,6 @@
 
     self printGeneralizedOn:aStream isLocal:isLocal short:false
 
-    "
-     Timestamp now printGeneralizedOn:Transcript. Transcript cr. 
-     (Timestamp fromSeconds:0) printGeneralizedOn:Transcript. Transcript cr.
-     Time now printOn:Transcript. Transcript cr.           
-     Date today printOn:Transcript. Transcript cr.        
-
-     Time now asTimestamp printGeneralizedOn:Transcript. Transcript cr.           
-     Timestamp now printGeneralizedOn:Transcript. Transcript cr. 
-
-     Date today asTimestamp printGeneralizedOn:Transcript. Transcript cr.           
-     Date today printOn:Transcript. Transcript cr.           
-    "
 
     "Modified: / 1.7.1996 / 15:20:59 / cg"
     "Modified: / 17.1.2000 / 15:53:02 / stefan"
@@ -1403,9 +1544,9 @@
     |t off|
 
     isLocal ifTrue:[
-        t := OperatingSystem computeTimeAndDateFrom:osTime.
+        t := self timeInfo.
     ] ifFalse:[
-        t := OperatingSystem computeUTCTimeAndDateFrom:osTime.
+        t := self asUtcTimestamp timeInfo.
     ].
 
     shortFormat ifTrue:[
@@ -1426,7 +1567,7 @@
         "/ this should be printed as non-local-time
 
         off := t utcOffset.
-        off == 0 ifTrue:[
+        (self isUtcTimestamp or:[off == 0]) ifTrue:[
             aStream nextPut:$Z.
         ] ifFalse:[ |min|
             off < 0 ifTrue:[
@@ -1448,8 +1589,8 @@
      Time now printOn:Transcript. Transcript cr.           
      Date today printOn:Transcript. Transcript cr.        
 
-     Time now asTimestamp printGeneralizedOn:Transcript. Transcript cr.           
-     Timestamp now printGeneralizedOn:Transcript. Transcript cr. 
+     Timestamp now printGeneralizedOn:Transcript isLocal:false short:false. Transcript cr. 
+     UtcTimestamp now printGeneralizedOn:Transcript isLocal:false short:false. Transcript cr. 
 
      Date today asTimestamp printGeneralizedOn:Transcript. Transcript cr.           
      Date today printOn:Transcript. Transcript cr.           
@@ -1459,13 +1600,51 @@
     "Modified: / 17.1.2000 / 15:53:02 / stefan"
 !
 
+printISO8601
+
+    ^ TimestampISO8601Builder print: self
+
+    "
+     Timestamp now printISO8601           
+    "
+
+    "Created: / 16-06-2005 / 16:11:15 / masca"
+!
+
+printISO8601Compressed
+
+    ^ TimestampISO8601Builder printCompressed: self
+
+    "
+     Timestamp now printISO8601Compressed           
+    "
+
+    "Created: / 16-06-2005 / 16:11:31 / masca"
+!
+
+printISO8601CompressedOn: aStream
+
+    TimestampISO8601Builder printCompressed: self on: aStream
+
+    "Created: / 16-06-2005 / 16:11:50 / masca"
+!
+
+printISO8601On: aStream
+
+    TimestampISO8601Builder print: self on: aStream
+
+    "Created: / 16-06-2005 / 16:11:07 / masca"
+!
+
 printIso8601FormatOn:aStream
-    "append the iso8601 UTC representation of the receiver to aStream.
+    "append the iso8601 representation of the receiver to aStream.
      This format looks like:
         1999-01-01T24:00:00
      or, for zero hr:min:sec, 
         1999-01-01
-     Of course, a 24 hour clock is used."
+     Of course, a 24 hour clock is used.
+
+     No timezone information (eg. Z or +0100) is added, so the reader will read as local time."
 
     |format|
 
@@ -1544,10 +1723,9 @@
 "/                      | "May" | "Jun" | "Jul" | "Aug"
 "/                      | "Sep" | "Oct" | "Nov" | "Dec"
 
-    |meUTC timeInfo|
-
-    meUTC := self class fromSeconds:((self asSeconds) + (self utcOffset)).
-    timeInfo := meUTC timeInfo.
+    |timeInfo|
+
+    timeInfo := self asUtcTimestamp timeInfo.
 
     aStream nextPutAll:(#('Mon' 'Tue' 'Wed' 'Thu' 'Fri' 'Sat' 'Sun') at:timeInfo dayInWeek);
             nextPutAll:', '.
@@ -1555,11 +1733,8 @@
     aStream space.
     aStream nextPutAll:(#('Jan' 'Feb' 'Mar' 'Apr' 'May' 'Jun' 'Jul' 'Aug' 'Sep' 'Oct' 'Nov' 'Dec') at:timeInfo month).
 
-"/ The following line is wrong, because the names are printed in the current locale!!
-"/    timeInfo printOn:aStream format:'%(ShortDayName), %(day) %(ShortMonthName) %y %h:%m:%s GMT'. 
-
 "/ the following is too slow for heavy use    
-"/    timeInfo printOn:aStream format:' %y %h:%m:%s GMT'. 
+"/    timeInfo printOn:aStream format:'%(ShortDayName), %(day) %(ShortMonthName) %y %h:%m:%s GMT' language:#en. 
 
     aStream nextPut:Character space.
     timeInfo year printOn:aStream.
@@ -1572,7 +1747,7 @@
     aStream nextPutAll:' GMT'.
 
     "
-     Timestamp now printRFC1123FormatOn:Transcript   
+     String streamContents:[:s| Timestamp now printRFC1123FormatOn:s]   
     "
 !
 
@@ -1677,18 +1852,26 @@
 
 
 
+!Timestamp methodsFor:'testing'!
+
+isTimestamp
+    ^ true
+!
+
+isUtcTimestamp
+    ^ false
+! !
+
 !Timestamp methodsFor:'visiting'!
 
 acceptVisitor:aVisitor with:aParameter
-
     ^ aVisitor visitTimestamp:self with:aParameter
 ! !
 
 !Timestamp::TimestampBuilderAbstract methodsFor:'error reporting'!
 
-malformed: aString
-
-    ConversionError raiseErrorString: aString
+malformed:aString
+    TimeConversionError raiseErrorString:(' - ', aString)
 
     "Created: / 15-06-2005 / 15:54:04 / masca"
 ! !
@@ -1707,15 +1890,15 @@
     minutes := arrayWithHoursAndMinutes second.
 
     minutes isZero ifFalse: [
-	minute := minute + minutes.
-	minute >= 60 ifTrue: [
-	    hours := hours + minute // 60.
-	    minute := minute \\ 60.
-	].
-	minute < 0 ifTrue: [
-	    hours := hours + minute // 60.
-	    minute := (minute \\ 60) negated
-	]
+        minute := minute + minutes.
+        minute >= 60 ifTrue: [
+            hours := hours + minute // 60.
+            minute := minute \\ 60.
+        ].
+        minute < 0 ifTrue: [
+            hours := hours + minute // 60.
+            minute := (minute \\ 60) negated
+        ]
     ].
 
     "Hours may get zero by time zone specification or by minutes modifications above."
@@ -1724,22 +1907,22 @@
     "Add or subtract the hour and make date corrections if necessary."
     hour := hour + hours.
     hour < 0 ifTrue: [
-	"Oops, got to previous day, must adjust even the date."
-	hour := 24 - ((hour negated) \\ 24).
-	day := day - 1.
-	day <= 0 ifTrue: [
-	    "Got to previous month..."
-	    month := month - 1.
-	    month <= 0 ifTrue: [year := year - 1. month := 12].
-	    day := self lastDayInMonth: month]
+        "Oops, got to previous day, must adjust even the date."
+        hour := 24 - ((hour negated) \\ 24).
+        day := day - 1.
+        day <= 0 ifTrue: [
+            "Got to previous month..."
+            month := month - 1.
+            month <= 0 ifTrue: [year := year - 1. month := 12].
+            day := self lastDayInMonth: month]
     ].
     hour >= 24 ifTrue: [
-	hour := hour \\ 24.
-	day := day + 1.
-	day > (self lastDayInMonth: month) ifTrue: [
-	    month := month + 1.
-	    month > 12 ifTrue: [year := year + 1. month := 1].
-	    day := 1]
+        hour := hour \\ 24.
+        day := day + 1.
+        day > (self lastDayInMonth: month) ifTrue: [
+            month := month + 1.
+            month > 12 ifTrue: [year := year + 1. month := 1].
+            day := 1]
     ]
 
     "Created: / 15-06-2005 / 16:45:49 / masca"
@@ -1753,8 +1936,8 @@
     leap := self isLeapYear: year.
 
     (anInteger between: 1 and: 365) ifFalse: [
-	(leap and: [anInteger = 366])
-	    ifFalse: [self malformed: 'Bad day number: ' , anInteger printString]
+        (leap and: [anInteger = 366])
+            ifFalse: [self malformed: 'Bad day number: ' , anInteger printString]
     ].
 
     self shouldImplement
@@ -1797,21 +1980,28 @@
     "Answer the number of the last day of the given month in the current year."
 
     ^anInteger = 2
-	ifTrue: [(self isLeapYear: year) ifTrue: [29] ifFalse: [28]]
-	ifFalse: [#(31 28 31 30 31 30 31 31 30 31 30 31) at: month]
+        ifTrue: [(self isLeapYear: year) ifTrue: [29] ifFalse: [28]]
+        ifFalse: [#(31 28 31 30 31 30 31 31 30 31 30 31) at: month]
 
     "Created: / 15-06-2005 / 17:12:31 / masca"
 !
 
-timestamp
+timestampWithClass:timestampClass
     "Answer the timestamp as it has been parsed."
     "Notes:
-     - Should use UTCYear:... here? This will produce timezone-dependent timestamp.
+     - When reading, the time has either been adjusted to UTZ/zulu time,
+       or is a local time.
      - On UNIX, timestamps can only hold dates between 1970-01-01T01:00:00Z and 2038-01-19T00:00:00Z"
 
-    ^Timestamp
-	year: year month: month day: day
-	hour: hour minute: minute second: second millisecond: millisecond
+    isUtcTime ifTrue:[
+        ^ timestampClass
+            UTCYear: year month: month day: day
+            hour: hour minute: minute second: second millisecond: millisecond
+    ] ifFalse:[
+        ^ timestampClass
+            year: year month: month day: day
+            hour: hour minute: minute second: second millisecond: millisecond
+    ]
 
     "Created: / 15-06-2005 / 15:39:24 / masca"
     "Modified: / 30-06-2005 / 16:48:25 / masca"
@@ -1858,7 +2048,9 @@
     It covers the main features this builder has.
 
     Just to introduce some coding examples, try:
-        TimestampISO8601Builder read: (TimestampISO8601Builder print: Timestamp now)
+        Timestamp readISO8601From: (TimestampISO8601Builder print: Timestamp now)
+        UtcTimestamp readISO8601From: (TimestampISO8601Builder print: UtcTimestamp now)
+        Timestamp readISO8601From: (TimestampISO8601Builder print: UtcTimestamp now)
 "
 !
 
@@ -1868,9 +2060,8 @@
 
 !Timestamp::TimestampISO8601Builder class methodsFor:'parsing'!
 
-read: stringOrStream
-
-    ^self new read: stringOrStream
+read: stringOrStream withClass:timestampClass
+    ^ self new read:stringOrStream withClass:timestampClass
 
     "Created: / 15-06-2005 / 17:52:03 / masca"
 ! !
@@ -1881,9 +2072,9 @@
     "Print the given timestamp in general ISO8601 format."
 
     | stream |
-    stream := String new writeStream.
+    stream := '' writeStream.
     self print: aTimestamp on: stream.
-    ^stream contents
+    ^ stream contents
 
     "Created: / 15-06-2005 / 17:52:29 / masca"
 !
@@ -1891,19 +2082,23 @@
 print: aTimestamp on: aStream
     "Print the given timestamp in general ISO8601 format."
 
+    |timeInfo|
+
+    timeInfo := aTimestamp asUtcTimestamp timeInfo.
+
     aStream
-	nextPutAll: (aTimestamp year printStringRadix: 10 size: 4 fill: $0);
-	nextPut: $-;
-	nextPutAll: (aTimestamp month printStringRadix: 10 size: 2 fill: $0);
-	nextPut: $-;
-	nextPutAll: (aTimestamp day printStringRadix: 10 size: 2 fill: $0);
-	nextPut: $T;
-	nextPutAll: (aTimestamp hour printStringRadix: 10 size: 2 fill: $0);
-	nextPut: $:;
-	nextPutAll: (aTimestamp minute printStringRadix: 10 size: 2 fill: $0);
-	nextPut: $:;
-	nextPutAll: (aTimestamp second printStringRadix: 10 size: 2 fill: $0);
-	nextPut: $Z
+        nextPutAll: (timeInfo year printStringRadix: 10 size: 4 fill: $0);
+        nextPut: $-;
+        nextPutAll: (timeInfo month printStringRadix: 10 size: 2 fill: $0);
+        nextPut: $-;
+        nextPutAll: (timeInfo day printStringRadix: 10 size: 2 fill: $0);
+        nextPut: $T;
+        nextPutAll: (timeInfo hours printStringRadix: 10 size: 2 fill: $0);
+        nextPut: $:;
+        nextPutAll: (timeInfo minutes printStringRadix: 10 size: 2 fill: $0);
+        nextPut: $:;
+        nextPutAll: (timeInfo seconds printStringRadix: 10 size: 2 fill: $0);
+        nextPut: $Z
 
     "Created: / 15-06-2005 / 17:56:51 / masca"
 !
@@ -1912,41 +2107,184 @@
     "Print in special compressed format for timestamp interchange with mobile devices."
 
     | stream |
-    stream := String new writeStream.
+    stream := '' writeStream.
     self printCompressed: aTimestamp on: stream.
-    ^stream contents
+    ^ stream contents
 
     "Created: / 15-06-2005 / 17:52:52 / masca"
 !
 
 printCompressed: aTimestamp on: aStream
 
+    |timeInfo|
+
+    timeInfo := aTimestamp asUtcTimestamp timeInfo.
+
     aStream
-	nextPutAll: (aTimestamp year printStringRadix: 10 size: 4 fill: $0);
-	nextPutAll: (aTimestamp month printStringRadix: 10 size: 2 fill: $0);
-	nextPutAll: (aTimestamp day printStringRadix: 10 size: 2 fill: $0);
-	nextPut: $T;
-	nextPutAll: (aTimestamp hour printStringRadix: 10 size: 2 fill: $0);
-	nextPutAll: (aTimestamp minute printStringRadix: 10 size: 2 fill: $0);
-	nextPutAll: (aTimestamp second printStringRadix: 10 size: 2 fill: $0);
-	nextPut: $Z
+        nextPutAll: (timeInfo year printStringRadix: 10 size: 4 fill: $0);
+        nextPutAll: (timeInfo month printStringRadix: 10 size: 2 fill: $0);
+        nextPutAll: (timeInfo day printStringRadix: 10 size: 2 fill: $0);
+        nextPut: $T;
+        nextPutAll: (timeInfo hours printStringRadix: 10 size: 2 fill: $0);
+        nextPutAll: (timeInfo minutes printStringRadix: 10 size: 2 fill: $0);
+        nextPutAll: (timeInfo seconds printStringRadix: 10 size: 2 fill: $0);
+        nextPut: $Z
 
     "Created: / 15-06-2005 / 17:54:17 / masca"
 ! !
 
+!Timestamp::TimestampISO8601Builder class methodsFor:'testing'!
+
+test
+
+    self test_date.
+    self test_time.
+    self test_timezone.
+    self test_edge.
+
+    "
+        TimestampISO8601Builder test
+    "
+
+    "Created: / 15-06-2005 / 17:51:16 / masca"
+    "Modified: / 16-06-2005 / 10:15:55 / masca"
+!
+
+test_date
+
+    | ts |
+    ts := UtcTimestamp
+         year: 2005 month: 6 day: 15
+         hour: 0 minute: 0 second: 0 millisecond: 0.
+
+    "Test common dates"
+    self assert: ts = (self read: '20050615' withClass:Timestamp).
+    self assert: ts = (self read: '2005-06-15'  withClass:Timestamp).
+    self assert: ts = (self read: '05-06-15'  withClass:Timestamp).
+    self assert: ts = (self read: '05-0615'  withClass:Timestamp). "/ Is this correct?
+    self assert: ts = (self read: ':50615'  withClass:Timestamp). "/ Should not happen and should not appear after 2009
+    self assert: ts = (self read: '200506-15'  withClass:Timestamp). "/ Is this corect?
+    self assert: ts = (self read: '105-06-15'  withClass:Timestamp). "/ Should not happen
+
+    "Test week numbers"
+    "/self assert: ts = (self read: '05W243'  withClass:Timestamp).
+    "/self assert: ts = (self read: '2005W24-3'  withClass:Timestamp).
+
+    "Test day numbers"
+    "self assert: ts = (self read: '2005-166'  withClass:Timestamp).
+
+    ts := Timestamp year: 2004 month: 12 day: 31 hour: 0 minute: 0 second: 0 millisecond: 0.
+    self assert: ts = (self read: '2004-366'  withClass:Timestamp).
+
+    ts := Timestamp year: 2005 month: 12 day: 31 hour: 0 minute: 0 second: 0 millisecond: 0.
+    self assert: ts = (self read: '2004-365'  withClass:Timestamp)."
+
+    "Test february"
+    ts := UtcTimestamp year: 2000 month: 2 day: 28 hour: 0 minute: 0 second: 0 millisecond: 0.
+    self assert: ts = (self read: '20000228'  withClass:Timestamp).
+
+    ts := UtcTimestamp year: 2000 month: 2 day: 29 hour: 0 minute: 0 second: 0 millisecond: 0.
+    self assert: ts = (self read: '20000229'  withClass:Timestamp).
+
+    "
+        TimestampISO8601Builder new test_date
+    "
+
+
+    "Created: / 15-06-2005 / 17:21:56 / masca"
+    "Modified: / 16-06-2005 / 11:50:04 / masca"
+!
+
+test_edge
+
+    | ts |
+
+    self test_mustFail: [self read: '20050229' withClass:Timestamp].
+    self test_mustFail: [self read: '20050029' withClass:Timestamp].
+    self test_mustFail: [self read: '20050332' withClass:Timestamp].
+    self test_mustFail: [self read: '2005-366' withClass:Timestamp].
+
+    ts := UtcTimestamp year: 2005 month: 1 day: 1 hour: 0 minute: 0 second: 0 millisecond: 0.
+    self assert: ts = (self read: '20041231T22-0200' withClass:Timestamp).
+
+    ts := UtcTimestamp year: 2004 month: 12 day: 31 hour: 22 minute: 0 second: 0 millisecond: 0.
+    self assert: ts = (self read: '20050101T0000+0200' withClass:Timestamp).
+
+    "
+        TimestampISO8601Builder new test_edge
+    "
+
+
+    "Created: / 16-06-2005 / 09:44:34 / masca"
+    "Modified: / 16-06-2005 / 11:48:59 / masca"
+!
+
+test_mustFail: aBlock
+
+    TimeConversionError
+        handle: [:ex | ex return]
+        do: [
+            aBlock value.
+            self error: 'Assertion failed'
+        ]
+
+    "Created: / 16-06-2005 / 09:43:37 / masca"
+!
+
+test_time
+
+    | ts |
+
+    ts := UtcTimestamp  year: 2005 month: 6 day: 15 hour: 17 minute: 37 second: 0 millisecond: 0.
+    self assert: ts = (self read: '2005-06-15 17:37' withClass:Timestamp).
+    self assert: ts = (self read: '20050615T1737' withClass:Timestamp).
+    self assert: ts = (self read: '05-0615T17:3700' withClass:Timestamp).
+
+    ts := UtcTimestamp  year: 2005 month: 6 day: 15 hour: 17 minute: 37 second: 0 millisecond: 30.
+    self assert: ts = (self read: '05-0615T17:3700.03' withClass:Timestamp).
+    self assert: ts = (self read: '2005-06-15T17:37:00.0305486-00:00' withClass:Timestamp).
+
+    "
+        TimestampISO8601Builder new test_time
+    "
+
+    "Created: / 15-06-2005 / 17:39:26 / masca"
+    "Modified: / 16-06-2005 / 11:54:30 / masca"
+!
+
+test_timezone
+
+    | ts |
+    ts := UtcTimestamp
+         year: 2005 month: 6 day: 15
+         hour: 17 minute: 37 second: 0 millisecond: 0.
+
+    self assert: ts = (self read: '2005-06-15T17:37Z' withClass:UtcTimestamp).
+    self assert: ts = (self read: '2005-06-15T17:37+0000' withClass:Timestamp).
+    self assert: ts = (self read: '2005-06-15T17:37-00:00' withClass:Timestamp).
+    self assert: ts = (self read: '2005-06-15T15:37:00-0200' withClass:Timestamp).
+    self assert: ts = (self read: '2005-06-15T19:37:00+0200'withClass:Timestamp).
+
+    "
+        TimestampISO8601Builder new test_timezone
+    "
+
+    "Created: / 15-06-2005 / 17:40:23 / masca"
+    "Modified: / 16-06-2005 / 10:17:57 / masca"
+! !
+
 !Timestamp::TimestampISO8601Builder methodsFor:'private-reading'!
 
 nextDigit
-
     | char |
-    char := stream peek.
-    char ifNil: [^-1].
+    char := stream peekOrNil.
+    char isNil ifTrue: [^-1].
 
     ^char isDigit
-	ifTrue: [
-	    stream next.
-	    char codePoint - $0 codePoint]
-	ifFalse: [-1]
+        ifTrue: [
+            stream next.
+            char codePoint - $0 codePoint]
+        ifFalse: [-1]
 
     "Created: / 14-06-2005 / 11:48:52 / masca"
 !
@@ -1955,9 +2293,9 @@
 
     | digit |
     digit := self nextDigit.
-    ^digit < 0
-	ifTrue: [self malformed: 'No digit found']
-	ifFalse: [digit]
+    ^ digit < 0
+        ifTrue: [self malformed: 'No digit found']
+        ifFalse: [digit]
 
     "Created: / 15-06-2005 / 10:57:00 / masca"
     "Modified: / 15-06-2005 / 17:22:52 / masca"
@@ -1968,15 +2306,15 @@
     | char number |
     number := 0.
     anInteger timesRepeat: [
-	char := stream peek.
-	char ifNil: [self malformed: 'Stream does not contain all ' , anInteger printString , ' digits'].
-	char isDigit
-	    ifTrue: [
-		stream next.
-		number := number * 10 + char codePoint - $0 codePoint]
-	    ifFalse: [self malformed: 'Requested ' , anInteger printString , ' digits not found']
+        char := stream peekOrNil.
+        char ifNil: [self malformed: 'Stream does not contain all ' , anInteger printString , ' digits'].
+        char isDigit
+            ifTrue: [
+                stream next.
+                number := number * 10 + char codePoint - $0 codePoint]
+            ifFalse: [self malformed: 'Requested ' , anInteger printString , ' digits not found']
     ].
-    ^number
+    ^ number
 
     "Created: / 14-06-2005 / 11:57:22 / masca"
     "Modified: / 15-06-2005 / 15:54:29 / masca"
@@ -1984,8 +2322,7 @@
 
 !Timestamp::TimestampISO8601Builder methodsFor:'processing'!
 
-read: stringOrStream
-
+read:stringOrStream withClass:timestampClass
     | peek |
 
     stream := stringOrStream readStream.
@@ -1999,48 +2336,48 @@
     "Check if date has been read, ie. T or space necountered. If yes, read the time.
     There is possible inconsistency - a dash may be read followed by T, which is not
     valid. But don't mind that, timestamps will be well-formatted in most cases."
-    peek := stream peek.
+    peek := stream peekOrNil.
     peek ifNil: [
-	"End of stream, only year has been read."
-	^self timestamp].
+        "End of stream, only year has been read."
+        ^self timestampWithClass:timestampClass].
     peek = $- ifTrue: [
-	"Skip the dash after year, if present."
-	stream next.
-	peek := stream peek].
+        "Skip the dash after year, if present."
+        stream next.
+        peek := stream peekOrNil].
     peek := peek asUppercase.
 
     (peek = $T or: [peek = Character space])
-	ifTrue: [
-	    "Got time signature. Skip the signature, read time and answer the timestamp."
-	    stream next.
-	    self readTime.
-	    self readTimezone.
-	    ^self timestamp]
-	ifFalse: [
-	    "Date not read completely yet, expecting month/day or week/day or day"
-	    peek = $W
-		ifTrue: [
-		    "Parse week number and (possibly) day number."
-		    stream next.
-		    self readWeekNumber]
-		ifFalse: [
-		    "Got digit, read month number followed by day or day number."
-		    self readMonthOrDay]
-	].
-
-    peek := stream peek.
+        ifTrue: [
+            "Got time signature. Skip the signature, read time and answer the timestamp."
+            stream next.
+            self readTime.
+            self readTimezone.
+            ^ self timestampWithClass:timestampClass]
+        ifFalse: [
+            "Date not read completely yet, expecting month/day or week/day or day"
+            peek = $W
+                ifTrue: [
+                    "Parse week number and (possibly) day number."
+                    stream next.
+                    self readWeekNumber]
+                ifFalse: [
+                    "Got digit, read month number followed by day or day number."
+                    self readMonthOrDay]
+        ].
+
+    peek := stream peekOrNil.
     peek ifNil: [
-	"End of stream, only year has been read."
-	^self timestamp].
+        "End of stream, only year has been read."
+        ^ self timestampWithClass:timestampClass].
 
     (peek asUppercase = $T or: [peek = Character space])
-	ifTrue: [
-	    "Got time signature, expecting time follows. Otherwise only date was in the stream."
-	    stream next.
-	    self readTime.
-	    self readTimezone].
-
-    ^self timestamp
+        ifTrue: [
+            "Got time signature, expecting time follows. Otherwise only date was in the stream."
+            stream next.
+            self readTime.
+            self readTimezone].
+
+    ^ self timestampWithClass:timestampClass
 
     "Created: / 14-06-2005 / 11:45:04 / masca"
     "Modified: / 16-06-2005 / 10:15:35 / masca"
@@ -2053,17 +2390,18 @@
     hold only integer amounts of milliseconds, don't mind the rest of the digits."
 
     | digit factor |
+
     factor := 100.
 
     [
-	digit := self nextDigit.
-	digit >= 0
+        digit := self nextDigit.
+        digit >= 0
     ] whileTrue: [
-	factor > 0 ifTrue: [
-	    "Factor still > 0, did not read all three digits of mantissa."
-	    millisecond := digit * factor + millisecond.
-	    factor := (factor / 10) integerPart
-	]
+        factor > 0 ifTrue: [
+            "Factor still > 0, did not read all three digits of mantissa."
+            millisecond := digit * factor + millisecond.
+            factor := (factor / 10) integerPart
+        ]
     ].
 
     factor = 100 ifTrue: [self malformed: 'No digits after millisecond separator']
@@ -2077,30 +2415,30 @@
     | dayDigit1 dayDigit2 |
     month := self nextDigits: 2.
 
-    stream peek = $-
-	ifTrue: [
-	    "Got dash. Day number must follow."
-	    stream next.
-	    day := self nextDigits: 2.
-	    (self isAllowedDay: day) ifFalse: [self malformed: 'Bad day: ' , day printString].
-	    ^self].
+    stream peekOrNil = $-
+        ifTrue: [
+            "Got dash. Day number must follow."
+            stream next.
+            day := self nextDigits: 2.
+            (self isAllowedDay: day) ifFalse: [self malformed: 'Bad day: ' , day printString].
+            ^self].
 
     dayDigit1 := self nextDigit.
     dayDigit1 < 0 ifTrue: [
-	"No more digits than month, leave day unspecified."
-	(month between: 1 and: 12) ifFalse: [self malformed: 'Bad month: ' , month printString].
-	^self].
+        "No more digits than month, leave day unspecified."
+        (month between: 1 and: 12) ifFalse: [self malformed: 'Bad month: ' , month printString].
+        ^self].
 
     dayDigit2 := self nextDigit.
     dayDigit2 < 0
-	ifTrue: [
-	    "Read only three digits, this is absolute day number in a year."
-	    self dateFromDayNumber: month * 10 + dayDigit1]
-	ifFalse: [
-	    "Read four digits. So there's month and day."
-	    (month between: 1 and: 12) ifFalse: [self malformed: 'Bad month: ' , month printString].
-	    day := dayDigit1 * 10 + dayDigit2.
-	    (self isAllowedDay: day) ifFalse: [self malformed: 'Bad day: ' , day printString]]
+        ifTrue: [
+            "Read only three digits, this is absolute day number in a year."
+            self dateFromDayNumber: month * 10 + dayDigit1]
+        ifFalse: [
+            "Read four digits. So there's month and day."
+            (month between: 1 and: 12) ifFalse: [self malformed: 'Bad month: ' , month printString].
+            day := dayDigit1 * 10 + dayDigit2.
+            (self isAllowedDay: day) ifFalse: [self malformed: 'Bad day: ' , day printString]]
 
     "Created: / 15-06-2005 / 11:12:02 / masca"
     "Modified: / 16-06-2005 / 11:47:34 / masca"
@@ -2114,45 +2452,45 @@
     hour := self nextDigits: 2.
     (hour between: 0 and: 24) ifFalse: [self malformed: 'Bad hour: ' , hour printString].
 
-    peek := stream peek.
+    peek := stream peekOrNil.
     peek = $:
-	ifTrue: [stream next]
-	ifFalse: [(peek notNil and: [peek isDigit]) ifFalse: [^self]].
+        ifTrue: [stream next]
+        ifFalse: [(peek notNil and: [peek isDigit]) ifFalse: [^self]].
 
     minute := self nextDigits: 2.
     (minute between: 0 and: 59) ifFalse: [self malformed: 'Bad minute: ' , minute printString].
 
-    peek := stream peek.
+    peek := stream peekOrNil.
     peek = $:
-	ifTrue: [stream next]
-	ifFalse: [(peek notNil and: [peek isDigit]) ifFalse: [^self]].
+        ifTrue: [stream next]
+        ifFalse: [(peek notNil and: [peek isDigit]) ifFalse: [^self]].
 
     second := self nextDigits: 2.
     (second between: 0 and: 59) ifFalse: [
-	"Seconds are usually in this range, do a special check for leap seconds."
-	second <= 61
-	    ifTrue: [
-		"Leap seconds can occur only on midnight on 31.12. or 30.6. Dont' check year
-		as it's not deterministic."
-		(minute = 59 and: [hour = 23 and: [(month = 12 and: [day = 31]) or: [month = 6 and: [day = 30]]]])
-		    ifFalse: [self malformed: 'Bad leap second']]
-	    ifFalse: [self malformed: 'Bad second: ' , second printString]
+        "Seconds are usually in this range, do a special check for leap seconds."
+        second <= 61
+            ifTrue: [
+                "Leap seconds can occur only on midnight on 31.12. or 30.6. Dont' check year
+                as it's not deterministic."
+                (minute = 59 and: [hour = 23 and: [(month = 12 and: [day = 31]) or: [month = 6 and: [day = 30]]]])
+                    ifFalse: [self malformed: 'Bad leap second']]
+            ifFalse: [self malformed: 'Bad second: ' , second printString]
     ].
 
     "Hour, minute and second read. Read appendices."
-    stream peek = $.
-	ifTrue: [
-	    "Read dot. Skip it and read milliseconds."
-	    stream next.
-	    self readMilliseconds].
+    stream peekOrNil = $.
+        ifTrue: [
+            "Read dot. Skip it and read milliseconds."
+            stream next.
+            self readMilliseconds].
 
     hour = 24 ifTrue: [
-	(minute = 0 and: [second = 0 and: [millisecond = 0]])
-	    ifTrue: [
-		"On 24 hour, advance to the next day."
-		"hour := 0.
-		self addMinutes: 1440"]
-	    ifFalse: [self malformed: 'Bad 24 hour (minutes, seconds and millis not 0)']
+        (minute = 0 and: [second = 0 and: [millisecond = 0]])
+            ifTrue: [
+                "On 24 hour, advance to the next day."
+                "hour := 0.
+                self addMinutes: 1440"]
+            ifFalse: [self malformed: 'Bad 24 hour (minutes, seconds and millis not 0)']
     ]
 
     "Created: / 14-06-2005 / 17:27:00 / masca"
@@ -2172,24 +2510,30 @@
     "If the time is in Zulu, don't modify the timestamp. This makes the machine
     run in Zulu time zone, maybe some corrections would be nice."
     peek = $Z
-	ifTrue: [
-	    "Time read, skip Zulu signature and exit."
-	    stream next.
-	    ^self].
+        ifTrue: [
+            "Time read, skip Zulu signature and exit."
+            isUtcTime := true.
+            stream next.
+            ^ self].
 
     peek = $+
-	ifTrue: [
-	    "Read a plus, expect a negative time zone difference."
-	    stream next.
-	    self addHoursAndMinutes: (self readTimezoneOffset collect: [:e | e negated]).
-	    ^self].
+        ifTrue: [
+            "Read a plus, expect a negative time zone difference."
+            isUtcTime := true.
+            stream next.
+            self addHoursAndMinutes: (self readTimezoneOffset collect: [:e | e negated]).
+            ^ self].
 
     peek = $-
-	ifTrue: [
-	    "Read a minus, expect positive time zone difference or unknown offset."
-	    stream next.
-	    self addHoursAndMinutes: self readTimezoneOffset.
-	    ^self]
+        ifTrue: [
+            "Read a minus, expect positive time zone difference or unknown offset."
+            isUtcTime := true.
+            stream next.
+            self addHoursAndMinutes: self readTimezoneOffset.
+            ^ self].
+
+    "This is local time"
+    isUtcTime := false.
 
     "Created: / 16-06-2005 / 09:54:21 / masca"
 !
@@ -2204,16 +2548,16 @@
     hours := self nextDigits: 2.
     (hours between: 0 and: 12) ifFalse: [self malformed: 'Bad offset hour: ' , hours printString].
 
-    stream peek = $:
-	ifTrue: [
-	    "Colon read, minutes must follow."
-	    stream next.
-	    digit := self nextDigits: 2.
-	    (digit between: 0 and: 59) ifFalse: [self malformed: 'Bad offset minute: ' , digit printString].
-	    ^Array with: hours with: digit].
+    stream peekOrNil = $:
+        ifTrue: [
+            "Colon read, minutes must follow."
+            stream next.
+            digit := self nextDigits: 2.
+            (digit between: 0 and: 59) ifFalse: [self malformed: 'Bad offset minute: ' , digit printString].
+            ^Array with: hours with: digit].
 
     "Read next digit and check whether minutes follow. If not, return only with hours. If yes,
-    check boundaries."
+     check boundaries."
     digit := self nextDigit.
     digit < 0 ifTrue: [^Array with: hours with: 0].
     digit >= 6 ifTrue: [self malformed: 'Bad offset minute: ' , (digit * 10) printString].
@@ -2231,14 +2575,14 @@
     "Read week number. It is always two digits long."
     week := self nextDigits: 2.
 
-    stream peek = $-
-	ifTrue: [
-	    "Got dash, day number must follow."
-	    stream next.
-	    digit := self nextDigit.
-	    digit < 0 ifTrue: [self malformed: 'Bad weekday number'].
-	    self dateFromWeek: week andWeekday: digit.
-	    ^self].
+    stream peekOrNil = $-
+        ifTrue: [
+            "Got dash, day number must follow."
+            stream next.
+            digit := self nextDigit.
+            digit < 0 ifTrue: [self malformed: 'Bad weekday number'].
+            self dateFromWeek: week andWeekday: digit.
+            ^self].
 
     "Read day number that follows the week. If the number is not given, consider it monday."
     day := self nextDigit.
@@ -2254,197 +2598,57 @@
     "Read YYYY or :Y (broken decade) from the stream. Also handles correctly YY- and YYY-."
 
     | read peek |
-    stream peek = $:
-	ifTrue: [
-	    "Broken two digit year > 1999 follows."
-	    stream next.
-	    year := self nextDigitOrError + 2000.
-	    ^self].
+    stream peekOrNil = $:
+        ifTrue: [
+            "Broken two digit year > 1999 follows."
+            stream next.
+            year := self nextDigitOrError + 2000.
+            ^self].
 
     "Expecting two-, three- or four-digit year"
     "Read the first two digits. They must be there."
     read := self nextDigits: 2.
 
     "Check if there's a dash, this can help us deciding whether the year ends."
-    peek := stream peek.
+    peek := stream peekOrNil.
     peek ifNil: [^self].
 
     year := peek = $-
-	ifTrue: [
-	    "OK, got two digits. These are expected to be the year after 1970."
-	    read < 70
-		ifTrue: [read + 2000]
-		ifFalse: [read + 1900]]
-	ifFalse: [
-	    "Read the next digit for the case of three-digit year after 1900 (ie. year > 1999)."
-	     read := read * 10 + self nextDigitOrError.
-	     peek := stream peek.
-	     (peek isNil or: [peek = $-])
-		ifTrue: [
-		    "Read three digit year, return it."
-		    read + 1900]
-		ifFalse: [
-		    "Read the fourth digit of the year. These can be month digits but the
-		    two-digit year format is deprecated anyway."
-		    read := read * 10 + self nextDigitOrError]
-	]
+        ifTrue: [
+            "OK, got two digits. These are expected to be the year after 1970."
+            read < 70
+                ifTrue: [read + 2000]
+                ifFalse: [read + 1900]]
+        ifFalse: [
+            "Read the next digit for the case of three-digit year after 1900 (ie. year > 1999)."
+             read := read * 10 + self nextDigitOrError.
+             peek := stream peekOrNil.
+             (peek isNil or: [peek = $-])
+                ifTrue: [
+                    "Read three digit year, return it."
+                    read + 1900]
+                ifFalse: [
+                    "Read the fourth digit of the year. These can be month digits but the
+                    two-digit year format is deprecated anyway."
+                    read := read * 10 + self nextDigitOrError]
+        ]
 
     "Created: / 14-06-2005 / 12:01:11 / masca"
     "Modified: / 15-06-2005 / 17:31:56 / masca"
 ! !
 
-!Timestamp::TimestampISO8601Builder methodsFor:'testing'!
-
-test
-
-    self test_date.
-    self test_time.
-    self test_timezone.
-    self test_edge.
-
-    "
-        TimestampISO8601Builder new test
-    "
-
-    "Created: / 15-06-2005 / 17:51:16 / masca"
-    "Modified: / 16-06-2005 / 10:15:55 / masca"
-!
-
-test_date
-
-    | ts |
-    ts := Timestamp
-         year: 2005 month: 6 day: 15
-         hour: 0 minute: 0 second: 0 millisecond: 0.
-
-    "Test common dates"
-    self assert: ts = (self read: '20050615').
-    self assert: ts = (self read: '2005-06-15').
-    self assert: ts = (self read: '05-06-15').
-    self assert: ts = (self read: '05-0615'). "/ Is this correct?
-    self assert: ts = (self read: ':50615'). "/ Should not happen and should not appear after 2009
-    self assert: ts = (self read: '200506-15'). "/ Is this corect?
-    self assert: ts = (self read: '105-06-15'). "/ Should not happen
-
-    "Test week numbers"
-    "/self assert: ts = (self read: '05W243').
-    "/self assert: ts = (self read: '2005W24-3').
-
-    "Test day numbers"
-    "self assert: ts = (self read: '2005-166').
-
-    ts := Timestamp year: 2004 month: 12 day: 31 hour: 0 minute: 0 second: 0 millisecond: 0.
-    self assert: ts = (self read: '2004-366').
-
-    ts := Timestamp year: 2005 month: 12 day: 31 hour: 0 minute: 0 second: 0 millisecond: 0.
-    self assert: ts = (self read: '2004-365')."
-
-    "Test february"
-    ts := Timestamp year: 2000 month: 2 day: 28 hour: 0 minute: 0 second: 0 millisecond: 0.
-    self assert: ts = (self read: '20000228').
-
-    ts := Timestamp year: 2000 month: 2 day: 29 hour: 0 minute: 0 second: 0 millisecond: 0.
-    self assert: ts = (self read: '20000229').
-
-    "
-        TimestampISO8601Builder new test_date
-    "
-
-
-    "Created: / 15-06-2005 / 17:21:56 / masca"
-    "Modified: / 16-06-2005 / 11:50:04 / masca"
-!
-
-test_edge
-
-    | ts |
-
-    self test_mustFail: [self read: '20050229'].
-    self test_mustFail: [self read: '20050029'].
-    self test_mustFail: [self read: '20050332'].
-    self test_mustFail: [self read: '2005-366'].
-
-    ts := Timestamp year: 2005 month: 1 day: 1 hour: 0 minute: 0 second: 0 millisecond: 0.
-    self assert: ts = (self read: '20041231T22-0200').
-
-    ts := Timestamp year: 2004 month: 12 day: 31 hour: 22 minute: 0 second: 0 millisecond: 0.
-    self assert: ts = (self read: '20050101T0000+0200').
-
-    "
-        TimestampISO8601Builder new test_edge
-    "
-
-
-    "Created: / 16-06-2005 / 09:44:34 / masca"
-    "Modified: / 16-06-2005 / 11:48:59 / masca"
-!
-
-test_mustFail: aBlock
-
-    ConversionError
-	handle: [:ex | ex return]
-	do: [
-	    aBlock value.
-	    self error: 'Assertion failed'
-	]
-
-    "Created: / 16-06-2005 / 09:43:37 / masca"
-!
-
-test_time
-
-    | ts |
-
-    ts := Timestamp  year: 2005 month: 6 day: 15 hour: 17 minute: 37 second: 0 millisecond: 0.
-    self assert: ts = (self read: '2005-06-15 17:37').
-    self assert: ts = (self read: '20050615T1737').
-    self assert: ts = (self read: '05-0615T17:3700').
-
-    ts := Timestamp  year: 2005 month: 6 day: 15 hour: 17 minute: 37 second: 0 millisecond: 30.
-    self assert: ts = (self read: '05-0615T17:3700.03').
-    self assert: ts = (self read: '2005-06-15T17:37:00.0305486-00:00').
-
-    "
-        TimestampISO8601Builder new test_time
-    "
-
-    "Created: / 15-06-2005 / 17:39:26 / masca"
-    "Modified: / 16-06-2005 / 11:54:30 / masca"
-!
-
-test_timezone
-
-    | ts |
-    ts := Timestamp
-         year: 2005 month: 6 day: 15
-         hour: 17 minute: 37 second: 0 millisecond: 0.
-
-    self assert: ts = (self read: '2005-06-15T17:37Z').
-    self assert: ts = (self read: '2005-06-15T17:37+0000').
-    self assert: ts = (self read: '2005-06-15T17:37-00:00').
-    self assert: ts = (self read: '2005-06-15T15:37:00-0200').
-    self assert: ts = (self read: '2005-06-15T19:37:00+0200').
-
-    "
-        TimestampISO8601Builder new test_timezone
-    "
-
-    "Created: / 15-06-2005 / 17:40:23 / masca"
-    "Modified: / 16-06-2005 / 10:17:57 / masca"
-! !
-
 !Timestamp class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Timestamp.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Timestamp.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Timestamp.st,v 1.131 2010/10/05 14:40:57 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Timestamp.st,v 1.136 2011/01/24 19:59:15 stefan Exp '
 !
 
 version_SVN
-    ^ '$Id: Timestamp.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Timestamp.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Timestamp initialize!
@@ -2453,3 +2657,4 @@
 
 
 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UtcTimestamp.st	Fri Feb 04 23:09:23 2011 +0000
@@ -0,0 +1,115 @@
+"
+ COPYRIGHT (c) 2011 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
+"{ Package: 'stx:libbasic' }"
+
+Timestamp subclass:#UtcTimestamp
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Magnitude-Time'
+!
+
+!UtcTimestamp class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2011 by eXept Software AG
+              All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+
+"
+!
+
+documentation
+"
+    This is a Timestamp, that represents itself as UTC.
+    Internally it stores exactly the same value as Timestamp, 
+    so the following experssion is always true:
+
+        someTimestamp asUtcTimestamp = someTimestamp asLocalTimestamp
+
+    But when printing, accessing hour, minute, ... and converting to Date and Time,
+    it returns the values represented in the UTC zone instead of the local timezone.
+
+    [author:]
+        Stefan Vogel (stefan@zwerg.nil.exept.de)
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+        Time Date
+
+"
+! !
+
+!UtcTimestamp methodsFor:'accessing'!
+
+timeInfo
+    ^ OperatingSystem computeUTCTimeAndDateFrom:osTime
+!
+
+timeZoneName
+    ^ #utc
+! !
+
+!UtcTimestamp methodsFor:'converting'!
+
+asLocalTimestamp
+    "represent myself as a timestamp in the local timezone"
+
+    ^ Timestamp fromOSTime:osTime
+!
+
+asUtcTimestamp
+    "I am an UtcTimestamp"
+
+    ^ self
+! !
+
+!UtcTimestamp methodsFor:'initialization'!
+
+year:y month:m day:d hour:h minute:min second:s millisecond:millis 
+    osTime := OperatingSystem 
+                computeOSTimeFromUTCYear:y
+                month:m
+                day:d
+                hour:h
+                minute:min
+                second:s
+                millisecond:millis
+! !
+
+!UtcTimestamp methodsFor:'testing'!
+
+isUtcTimestamp
+    ^ true
+! !
+
+!UtcTimestamp methodsFor:'visiting'!
+
+acceptVisitor:aVisitor with:aParameter
+    ^ aVisitor visitUtcTimestamp:self with:aParameter
+! !
+
+!UtcTimestamp class methodsFor:'documentation'!
+
+version_CVS
+    ^ '§Header: /cvs/stx/stx/libbasic/UtcTimestamp.st,v 1.3 2011/01/24 17:58:33 stefan Exp §'
+! !
--- a/Visitor.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Visitor.st	Fri Feb 04 23:09:23 2011 +0000
@@ -251,14 +251,25 @@
     "visit an timestamp value"
 
     self visitObject:aTimestamp with:aParameter
+!
+
+visitUtcTimestamp:aTimestamp with:aParameter
+    "visit an UTC timestamp value"
+
+    self visitTimestamp:aTimestamp with:aParameter
 ! !
 
 !Visitor class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Visitor.st 10517 2010-04-26 18:26:38Z vranyj1 $'
+    ^ '$Id: Visitor.st 10604 2011-02-04 23:09:23Z vranyj1 $'
+!
+
+version_CVS
+    ^ '§Header: /cvs/stx/stx/libbasic/Visitor.st,v 1.7 2011/01/24 13:20:08 stefan Exp §'
 !
 
 version_SVN
-    ^ '$Id: Visitor.st 10517 2010-04-26 18:26:38Z vranyj1 $'
+    ^ '$Id: Visitor.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
+
--- a/Win32Constants.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Win32Constants.st	Fri Feb 04 23:09:23 2011 +0000
@@ -15,7 +15,7 @@
 	instanceVariableNames:''
 	classVariableNames:'FILE_ATTRIBUTE_HIDDEN FILE_ATTRIBUTE_NORMAL
 		FILE_ATTRIBUTE_TEMPORARY FILE_ATTRIBUTE_DIRECTORY
-		FILE_ATTRIBUTE_READONLY'
+		FILE_ATTRIBUTE_READONLY LOGPIXELSX LOGPIXELSY'
 	poolDictionaries:''
 	category:'OS-Windows'
 !
@@ -52,16 +52,21 @@
     FILE_ATTRIBUTE_DIRECTORY := 16.
     FILE_ATTRIBUTE_NORMAL := 128.
     FILE_ATTRIBUTE_TEMPORARY := 256.
+
+    LOGPIXELSX := 88.
+    LOGPIXELSY := 90.
+
+    "Modified: / 24-12-2010 / 11:17:57 / cg"
 ! !
 
 !Win32Constants class methodsFor:'documentation'!
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Win32Constants.st,v 1.3 2010/02/01 11:29:27 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Win32Constants.st,v 1.4 2010/12/24 10:22:26 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Win32Constants.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Win32Constants.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Win32Constants initialize!
@@ -70,3 +75,4 @@
 
 
 
+
--- a/Win32OperatingSystem.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/Win32OperatingSystem.st	Fri Feb 04 23:09:23 2011 +0000
@@ -580,6 +580,10 @@
     return __get_functionAddress(&libHandle, "ole32.DLL", functionName);
 }
 
+/*
+ * The difference between the Windows epoch (1601-01-01 00:00:00)
+ * and the Unix epoch (1970-01-01 00:00:00) in milliseconds is: 11644473600000L
+ */
 void
 TimetToFileTime( time_t t, LPFILETIME pft )
 {
@@ -592,7 +596,7 @@
 FileTimeToOsTime(LPFILETIME pft)
 {
     LONGLONG lTime = ((LONGLONG)pft->dwHighDateTime << 32) + pft->dwLowDateTime;
-    lTime = (lTime / 10000) - 11644473600000;
+    lTime = (lTime / 10000) - 11644473600000L;
 
     return(__MKLARGEINT64(1, (unsigned INT)(lTime & 0xFFFFFFFF), (unsigned INT)(lTime >> 32)));
 }
@@ -3992,6 +3996,25 @@
      ^ self openFile:pathName attributes:#(#'GENERIC_READ' #'GENERIC_WRITE' #'CREATE_ALWAYS')
 !
 
+createHardLinkFrom:oldPath to:newPath
+    "link the file 'oldPath' to 'newPath'. The link will be a hard link.
+     Return true if successful, false if not."
+
+    self executeCommand:('mklink/h "%1" "%2"' bindWith:newPath with:oldPath)
+
+    "Created: / 19-01-2011 / 08:42:11 / cg"
+!
+
+createSymbolicLinkFrom:oldPath to:newPath
+    "make a link from the file 'oldPath' to the file 'newPath'.
+     The link will be a soft (symbolic) link.
+     Return true if successful, false if not."
+
+    self executeCommand:('mklink "%1" "%2"' bindWith:newPath with:oldPath)
+
+    "Created: / 19-01-2011 / 08:41:44 / cg"
+!
+
 getLastError
 %{
     RETURN ( __mkSmallInteger( __WIN32_ERR(GetLastError()) ));
@@ -4087,20 +4110,19 @@
      Return true if successful, false if not."
 
     (oldPath isString not or:[newPath isString not]) ifTrue:[
-	"/
-	"/ bad argument(s) given
-	"/
-	^ self primitiveFailed
-    ].
-
-    "/
-    "/ this OperatingSystem does not support links
-    "/
-    ^ UnsupportedOperationSignal raise
+        "/
+        "/ bad argument(s) given
+        "/
+        ^ self primitiveFailed
+    ].
+
+    ^ self createHardLinkFrom:oldPath to:newPath
 
     "
      OperatingSystem linkFile:'foo' to:'bar'
     "
+
+    "Modified: / 19-01-2011 / 08:42:53 / cg"
 !
 
 openFile:pathName attributes:attributeSpec
@@ -9648,7 +9670,8 @@
 
     "Created: / 04-08-2006 / 18:04:52 / fm"
     "Modified: / 26-01-2007 / 14:05:44 / cg"
-!
+! !
+
 !Win32OperatingSystem class methodsFor:'socket support'!
 
 socketAccessor
@@ -13616,17 +13639,33 @@
 key:aKeyNamePath
     "retrieve an entry by full path name (starting at a root)"
 
+    ^ self key:aKeyNamePath createIfAbsent:false
+
+    "
+     self key:'HKEY_LOCAL_MACHINE'
+     self key:'HKEY_LOCAL_MACHINE\Software'
+     self key:'HKEY_LOCAL_MACHINE\Software\Borland\'
+     self key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X\3.2.5\Directory'
+     (self key:'HKEY_CLASSES_ROOT\MicrosoftWorks.WordProcessor\CLSID') valueNamed:''
+    "
+
+    "Modified: / 19-01-2011 / 15:59:36 / cg"
+!
+
+key:aKeyNamePath createIfAbsent:createIfAbsent
+    "retrieve an entry by full path name (starting at a root)"
+
     |idx first rest root|
 
     HKEY_CLASSES_ROOT isNil ifTrue:[self initialize].
 
     idx := aKeyNamePath indexOf:(self separator).
     idx == 0 ifTrue:[
-	first := aKeyNamePath.
-	rest := nil.
+        first := aKeyNamePath.
+        rest := nil.
     ] ifFalse:[
-	first := aKeyNamePath copyTo:idx-1.
-	rest := aKeyNamePath copyFrom:idx+1
+        first := aKeyNamePath copyTo:idx-1.
+        rest := aKeyNamePath copyFrom:idx+1
     ].
 
     first := first asUppercase.
@@ -13634,17 +13673,17 @@
     "/ the first is a pseudo name
     root := self rootKey:first.
     root isNil ifTrue:[
-	^ nil
+        ^ nil
     ].
 
     rest size == 0 ifTrue:[
-	^ root
+        ^ root
     ].
 
     Error handle:[:ex |
-	^ nil
+        ^ nil
     ] do:[
-	^ root subKeyNamed:rest.
+        ^ root subKeyNamed:rest createIfAbsent:createIfAbsent.
     ].
 
     "
@@ -13655,7 +13694,7 @@
      (self key:'HKEY_CLASSES_ROOT\MicrosoftWorks.WordProcessor\CLSID') valueNamed:''
     "
 
-    "Modified: / 24.12.1999 / 00:01:52 / cg"
+    "Created: / 19-01-2011 / 15:59:21 / cg"
 !
 
 rootKey:aRootKeyStringOrSymbol
@@ -14111,6 +14150,23 @@
      top := self key:'HKEY_LOCAL_MACHINE'.
      sub := top subKeyNamed:'Software'
     "
+!
+
+subKeyNamed:subKeyString createIfAbsent:createIfAbsent
+    "return a new registry entry below mySelf with the given subKey.
+     If no such key exists and createIfAbsent is true, the key is created.
+     Otherwise, nil is returned"
+
+    |k|
+
+    (k := self subKeyNamed:subKeyString) isNil ifTrue:[
+        createIfAbsent ifTrue:[
+            ^ self createSubKeyNamed:subKeyString
+        ].
+    ].
+    ^ k
+
+    "Created: / 19-01-2011 / 15:58:45 / cg"
 ! !
 
 !Win32OperatingSystem::RegistryEntry methodsFor:'accessing values'!
@@ -14615,6 +14671,16 @@
     "
 !
 
+valueNames
+    "evaluate aBlock for all value names"
+
+    ^ Array streamContents:[:s |
+        self valueNamesDo:[:nm | s nextPut:nm]
+    ].
+
+    "Created: / 18-01-2011 / 20:24:52 / cg"
+!
+
 valueNamesAndValuesDo:aBlock
     "evaluate aBlock for all value names"
 
@@ -16241,15 +16307,15 @@
 !Win32OperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Win32OperatingSystem.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Win32OperatingSystem.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.414 2010/12/01 19:25:36 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.417 2011/01/19 15:04:48 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: Win32OperatingSystem.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: Win32OperatingSystem.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 Win32OperatingSystem initialize!
@@ -16262,3 +16328,4 @@
 
 
 
+
--- a/abbrev.stc	Mon Dec 20 07:13:27 2010 +0000
+++ b/abbrev.stc	Fri Feb 04 23:09:23 2011 +0000
@@ -370,3 +370,6 @@
 Unicode16String Unicode16String stx:libbasic 'Collections-Text' 0
 CharacterEncoderImplementations::EBCDIC CharacterEncoderImplementations__EBCDIC stx:libbasic 'Collections-Text-Encodings' 0
 
+SameForAllNotification SameForAllNotification stx:libbasic 'Kernel-Exceptions-Notifications' 1
+UtcTimestamp UtcTimestamp stx:libbasic 'Magnitude-Time' 0
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autopackage/default.apspec	Fri Feb 04 23:09:23 2011 +0000
@@ -0,0 +1,85 @@
+# -*- shell-script -*-
+[Meta]
+ShortName: 
+SoftwareVersion: 6.1.2.1
+DisplayName: Smalltalk/X Basic Classes
+RootName: @exept.de/expecco:$SOFTWAREVERSION
+Summary: Smalltalk/X Basic Classes
+Maintainer: eXept Software AG
+Packager: eXept Software AG
+PackageVersion: 1
+CPUArchitectures: x86
+AutopackageTarget: 1.0
+Type: Library
+License: Commercial 
+
+[Description]
+Smalltalk/X Basic Classes
+
+[BuildPrepare]
+# If you're using autotools, the default should be enough.
+# prepareBuild will set up apbuild and run configure for you. If you
+# need to pass arguments to configure, just add them to prepareBuild:
+# prepareBuild --enable-foo --disable-bar
+#prepareBuild
+
+[BuildUnprepare]
+# If you're using prepareBuild above, there is no need to change this!
+#unprepareBuild
+
+[Globals]
+# Variables declared in this section will be available in all other sections
+export APKG_BUILD_SKIP_CONFIGURE=1
+export APKG_BUILD_SKIP_MAKE=1
+export MYPREFIX=/opt/
+
+[Prepare]
+#recommend '@autopackage.org/autopackage-gtk' 1
+
+[Imports]
+import <<EOF
+$source_dir/
+$source_dir/resources
+$source_dir/keyboard.rc
+$source_dir/display.rc
+$source_dir/../doc
+$source_dir/../testsuites/webedition
+$source_dir/../projects/libraries
+$source_dir/../reportGenerator/tools
+$source_dir/../../pdf/afm
+$source_dir/../plugin/selenium/libexept_expecco_plugin_selenium.so
+$source_dir/../externalTools
+EOF
+
+for i in $source_dir/*.so
+do
+    echo $source_dir/$(readlink $i)
+done | import
+
+[Install]
+if [ "$PREFIX" != "/usr" ]
+then
+    export MYPREFIX=$PREFIX
+fi
+
+find . -type d \( -name CVS -or -name 'not_*' \) -print | xargs rm -rf
+mkdir -p $MYPREFIX
+copyFiles expecco *.rc resources        $MYPREFIX/bin
+copyFiles *.so                          $MYPREFIX/lib
+copyFiles doc externalTools             $MYPREFIX/packages/exept/expecco
+copyFiles webedition/projects libraries $MYPREFIX/testsuites
+copyFiles tools                         $MYPREFIX/packages/exept/expecco/reportGenerator
+copyFiles afm                           $MYPREFIX/packages/exept/pdf
+copyFiles libexept_expecco_plugin_selenium.so   $MYPREFIX/plugin
+
+#installExe expecco
+#installLib *.so
+#installData resources
+#installData keyboard.rc
+#installData doc
+
+[Uninstall]
+# Leaving this at the default is safe unless you use custom commands in
+# "Install" to create files. All autopackage API functions
+# that installs files are logged.
+uninstallFromLog
--- a/bc.mak	Mon Dec 20 07:13:27 2010 +0000
+++ b/bc.mak	Fri Feb 04 23:09:23 2011 +0000
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic/bc.mak,v 1.168 2010/09/20 15:40:18 cg Exp $
+# $Header: /cvs/stx/stx/libbasic/bc.mak,v 1.169 2011/01/24 20:31:51 stefan Exp $
 #
 # DO NOT EDIT
 # automagically generated from the projectDefinition: stx_libbasic.
@@ -218,6 +218,7 @@
 $(OUTDIR)RecursionError.$(O) RecursionError.$(H): RecursionError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)RecursiveExceptionError.$(O) RecursiveExceptionError.$(H): RecursiveExceptionError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)RestartProcessRequest.$(O) RestartProcessRequest.$(H): RestartProcessRequest.st $(INCLUDE_TOP)\stx\libbasic\ControlRequest.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SameForAllNotification.$(O) SameForAllNotification.$(H): SameForAllNotification.st $(INCLUDE_TOP)\stx\libbasic\YesToAllConfirmation.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SemaphoreSet.$(O) SemaphoreSet.$(H): SemaphoreSet.st $(INCLUDE_TOP)\stx\libbasic\IdentitySet.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SignalSet.$(O) SignalSet.$(H): SignalSet.st $(INCLUDE_TOP)\stx\libbasic\IdentitySet.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)SnapshotError.$(O) SnapshotError.$(H): SnapshotError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -227,6 +228,7 @@
 $(OUTDIR)UninterpretedBytes.$(O) UninterpretedBytes.$(H): UninterpretedBytes.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)UserConfirmation.$(O) UserConfirmation.$(H): UserConfirmation.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)UserInformation.$(O) UserInformation.$(H): UserInformation.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)UtcTimestamp.$(O) UtcTimestamp.$(H): UtcTimestamp.st $(INCLUDE_TOP)\stx\libbasic\Timestamp.$(H) $(INCLUDE_TOP)\stx\libbasic\AbstractTime.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)VMInternalError.$(O) VMInternalError.$(H): VMInternalError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)VarArgBlock.$(O) VarArgBlock.$(H): VarArgBlock.st $(INCLUDE_TOP)\stx\libbasic\Block.$(H) $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Warning.$(O) Warning.$(H): Warning.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -345,8 +347,9 @@
 $(OUTDIR)Win32FILEHandle.$(O) Win32FILEHandle.$(H): Win32FILEHandle.st $(INCLUDE_TOP)\stx\libbasic\OSFileHandle.$(H) $(INCLUDE_TOP)\stx\libbasic\OSHandle.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Win32Handle.$(O) Win32Handle.$(H): Win32Handle.st $(INCLUDE_TOP)\stx\libbasic\OSHandle.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Win32Process.$(O) Win32Process.$(H): Win32Process.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)Win32OperatingSystem.$(O) Win32OperatingSystem.$(H): Win32OperatingSystem.st $(INCLUDE_TOP)\stx\libbasic\AbstractOperatingSystem.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\OSHandle.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Win32Handle.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(STCHDR)
+$(OUTDIR)Win32OperatingSystem.$(O) Win32OperatingSystem.$(H): Win32OperatingSystem.st $(INCLUDE_TOP)\stx\libbasic\AbstractOperatingSystem.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Win32Handle.$(H) $(INCLUDE_TOP)\stx\libbasic\OSHandle.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
 
+
--- a/libInit.cc	Mon Dec 20 07:13:27 2010 +0000
+++ b/libInit.cc	Fri Feb 04 23:09:23 2011 +0000
@@ -1,5 +1,5 @@
 /*
- * $Header: /cvs/stx/stx/libbasic/libInit.cc,v 1.161 2010/10/14 16:54:58 cg Exp $
+ * $Header: /cvs/stx/stx/libbasic/libInit.cc,v 1.162 2011/01/24 20:39:47 stefan Exp $
  *
  * DO NOT EDIT
  * automagically generated from the projectDefinition: stx_libbasic.
@@ -164,7 +164,6 @@
 _UserInterrupt_Init(pass,__pRT__,snd);
 _UserNotification_Init(pass,__pRT__,snd);
 _YesToAllConfirmation_Init(pass,__pRT__,snd);
-_SameForAllNotification_Init(pass,__pRT__,snd);
 _stx_137libbasic_Init(pass,__pRT__,snd);
 _AbortAllOperationRequest_Init(pass,__pRT__,snd);
 _AbstractSourceFileWriter_Init(pass,__pRT__,snd);
@@ -193,6 +192,7 @@
 _RecursionError_Init(pass,__pRT__,snd);
 _RecursiveExceptionError_Init(pass,__pRT__,snd);
 _RestartProcessRequest_Init(pass,__pRT__,snd);
+_SameForAllNotification_Init(pass,__pRT__,snd);
 _SemaphoreSet_Init(pass,__pRT__,snd);
 _SignalSet_Init(pass,__pRT__,snd);
 _SnapshotError_Init(pass,__pRT__,snd);
@@ -202,6 +202,7 @@
 _UninterpretedBytes_Init(pass,__pRT__,snd);
 _UserConfirmation_Init(pass,__pRT__,snd);
 _UserInformation_Init(pass,__pRT__,snd);
+_UtcTimestamp_Init(pass,__pRT__,snd);
 _VMInternalError_Init(pass,__pRT__,snd);
 _VarArgBlock_Init(pass,__pRT__,snd);
 _Warning_Init(pass,__pRT__,snd);
@@ -333,3 +334,4 @@
 __END_PACKAGE__();
 }
 
+
--- a/libbasic.rc	Mon Dec 20 07:13:27 2010 +0000
+++ b/libbasic.rc	Fri Feb 04 23:09:23 2011 +0000
@@ -3,7 +3,7 @@
 // automagically generated from the projectDefinition: stx_libbasic.
 //
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION     6,1,1,76
+  FILEVERSION     6,1,1,79
   PRODUCTVERSION  6,1,2,1
   FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
   FILEFLAGS       VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
@@ -18,12 +18,12 @@
     BEGIN
       VALUE "CompanyName", "eXept Software AG\0"
       VALUE "FileDescription", "Smalltalk/X Basic Classes (LIB)\0"
-      VALUE "FileVersion", "6.1.1.76\0"
+      VALUE "FileVersion", "6.1.1.79\0"
       VALUE "InternalName", "stx:libbasic\0"
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2009\nCopyright eXept Software AG 1998-2009\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.1.2.1\0"
-      VALUE "ProductDate", "Mon, 20 Sep 2010 15:39:34 GMT\0"
+      VALUE "ProductDate", "Mon, 24 Jan 2011 20:27:14 GMT\0"
     END
 
   END
@@ -34,3 +34,4 @@
   END
 END
 
+
--- a/stx_libbasic.st	Mon Dec 20 07:13:27 2010 +0000
+++ b/stx_libbasic.st	Fri Feb 04 23:09:23 2011 +0000
@@ -489,6 +489,7 @@
         Unicode16String
         #'CharacterEncoderImplementations::EBCDIC'
         SameForAllNotification
+        UtcTimestamp
     )
 !
 
@@ -517,9 +518,9 @@
 legalCopyright
     "Return a copyright string which will appear in <lib>.rc"
 
-    ^ 'Copyright Claus Gittinger 1988-2009\nCopyright eXept Software AG 1998-2009'
+    ^ 'Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011'
 
-    "Modified: / 08-11-2007 / 16:58:06 / cg"
+    "Modified: / 01-02-2011 / 11:55:33 / cg"
 ! !
 
 !stx_libbasic class methodsFor:'description - svn'!
@@ -528,21 +529,22 @@
     "Return a SVN revision number of myself.
      This number is updated after a commit"
 
-    ^ "$SVN-Revision:"'10601M'"$"
+    ^ "$SVN-Revision:"'10603M'"$"
 ! !
 
 !stx_libbasic class methodsFor:'documentation'!
 
 version
-    ^ '$Id: stx_libbasic.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: stx_libbasic.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 !
 
 version_CVS
-    ^ 'Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.78 2010/10/14 08:42:44 cg Exp '
+    ^ 'Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.80 2011/02/01 10:58:58 cg Exp '
 !
 
 version_SVN
-    ^ '$Id: stx_libbasic.st 10602 2010-12-20 07:13:27Z vranyj1 $'
+    ^ '$Id: stx_libbasic.st 10604 2011-02-04 23:09:23Z vranyj1 $'
 ! !
 
 
+