Merged fa8a879502cb and b010cb2aa396 (branch default - CVS HEAD) jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Tue, 05 Mar 2013 18:10:13 +0000
branchjv
changeset 18027 3621469cc5e8
parent 18026 fa8a879502cb (current diff)
parent 14832 b010cb2aa396 (diff)
child 18028 e39da2aa21bc
Merged fa8a879502cb and b010cb2aa396 (branch default - CVS HEAD)
AbstractOperatingSystem.st
ApplicationDefinition.st
Block.st
CharacterArray.st
CharacterEncoder.st
ExternalStream.st
Filename.st
Integer.st
LargeInteger.st
LibraryDefinition.st
MD5Stream.st
Make.proto
Make.spec
Makefile
MiniDebugger.st
Object.st
ProcessorScheduler.st
ProjectDefinition.st
RecursionLock.st
SHA1Stream.st
Semaphore.st
SemaphoreSet.st
SmallInteger.st
Smalltalk.st
Stream.st
UnixFilename.st
UnixOperatingSystem.st
Win32OperatingSystem.st
abbrev.stc
bc.mak
libInit.cc
libbasic.rc
stx_libbasic.st
--- a/.hgtags	Thu Feb 07 09:53:25 2013 +0100
+++ b/.hgtags	Tue Mar 05 18:10:13 2013 +0000
@@ -18,16 +18,17 @@
 30909b044a03222f1f011a863fe50ea6c4491101 ecpecco_1_6_0
 37bd8fc58d5933d683b33c23312adaea79a06784 expecco_1_7_0rc1
 38800080caa28181285c9d8b61b189253a887bcf initialR
+3a8ef902a2198f96ca3adabeaa2d94229132c900 stable
 3dc78835e119759ccc4ba073d8ec67d6b2f70d33 rel5_2_1
 40e71fa11ff77b8e81c47bc30b49f12144fea6b8 stable_expecco_sel
 45d070e53b953c93364b1a7713a21e20d7030430 stx_6_2_2
+4657463cd9f3ff64605a0f1ddfbec74be67a221a expecco_2_4_1
 498aaf09d52bbd5b750814e7e4452c8b9fbaa9b4 expecco_1_7_0b1
 498aaf09d52bbd5b750814e7e4452c8b9fbaa9b4 expecco_1_7_0b2
 4cfcb1c3d0cc3098ffb5af37a66b5789b3c9e14a rel5_1_3
 4cfcb1c3d0cc3098ffb5af37a66b5789b3c9e14a stx_513
 6516bfb2ae56ebcb9dee9ca2ccd2acb80a9a1e88 expecco_1_0_3
 66c655c1a7cbe4cff09bf03fd379abed2ee0c539 expecco_1_5_0
-6a70a70060931430d722dd71e3e1d89e5c3d2175 stable
 6dcd44bc2ff92d95c87750dece318217585ea275 expeccoNET_1_4_0rc1
 751f95f1fff0e0772ea359d56aa7be91ad927ddd expecco_2_2_0
 78a0707fdf33e9e7f9e893c868634320e1e413d7 rel2_10_8_6_last_before_vmData_change
--- a/AbstractOperatingSystem.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/AbstractOperatingSystem.st	Tue Mar 05 18:10:13 2013 +0000
@@ -184,6 +184,28 @@
 
 !AbstractOperatingSystem class methodsFor:'initialization'!
 
+getConcreteClass
+    |osType|
+
+    osType := self getSystemType.
+    osType = 'win32' ifTrue:[
+        ^ Win32OperatingSystem
+    ].
+    osType = 'osx' ifTrue:[
+        ^ OSXOperatingSystem
+    ].
+    osType = 'os2' ifTrue:[
+        ^ OS2OperatingSystem
+    ].
+    osType = 'macos' ifTrue:[
+        ^ MacOperatingSystem
+    ].
+    ((osType = 'VMS') or:[osType = 'openVMS']) ifTrue:[
+        ^ OpenVMSOperatingSystem
+    ].
+    ^ UnixOperatingSystem
+!
+
 initResources
     "/ allow for ResourcePack class to be missing (non-GUI smalltalks)
 
@@ -220,27 +242,7 @@
 !
 
 initializeConcreteClass
-    |osType cls|
-
-    osType := self getSystemType.
-    osType = 'win32' ifTrue:[
-	cls := Win32OperatingSystem
-    ] ifFalse:[
-	osType = 'os2' ifTrue:[
-	    cls := OS2OperatingSystem
-	] ifFalse:[
-	    osType = 'macos' ifTrue:[
-		cls := MacOperatingSystem
-	    ] ifFalse:[
-		((osType = 'VMS') or:[osType = 'openVMS']) ifTrue:[
-		    cls := OpenVMSOperatingSystem
-		] ifFalse:[
-		    cls := UnixOperatingSystem
-		]
-	    ]
-	]
-    ].
-    OperatingSystem := ConcreteClass := cls.
+    OperatingSystem := ConcreteClass := self getConcreteClass.
 ! !
 
 !AbstractOperatingSystem class methodsFor:'OS signal constants'!
@@ -1167,228 +1169,228 @@
     terminateLock := Semaphore forMutualExclusion.
     ((externalInStream := anInStream) notNil
      and:[externalInStream isExternalStream not]) ifTrue:[
-	pIn := NonPositionableExternalStream makePipe.
-	inStreamToClose := externalInStream := pIn at:1.
-	shuffledInStream := pIn at:2.
-	anInStream isBinary ifTrue:[
-	    shuffledInStream binary
-	].
-	lineWise ifFalse:[
-	    shuffledInStream blocking:false.
-	].
-
-	"/ start a reader process, shuffling data from the given
-	"/ inStream to the pipe (which is connected to the commands input)
-	inputShufflerProcess :=
-	    [
-		[
-		    [anInStream atEnd] whileFalse:[
-			self shuffleFrom:anInStream to:shuffledInStream lineWise:lineWise.
-			shuffledInStream flush
-		    ]
-		] ensure:[
-		    shuffledInStream close
-		]
-	    ] newProcess
-		name:'cmd input shuffler';
+        pIn := NonPositionableExternalStream makePipe.
+        inStreamToClose := externalInStream := pIn at:1.
+        shuffledInStream := pIn at:2.
+        anInStream isBinary ifTrue:[
+            shuffledInStream binary
+        ].
+        lineWise ifFalse:[
+            shuffledInStream blocking:false.
+        ].
+
+        "/ start a reader process, shuffling data from the given
+        "/ inStream to the pipe (which is connected to the commands input)
+        inputShufflerProcess :=
+            [
+                [
+                    [anInStream atEnd] whileFalse:[
+                        self shuffleFrom:anInStream to:shuffledInStream lineWise:lineWise.
+                        shuffledInStream flush
+                    ]
+                ] ensure:[
+                    shuffledInStream close
+                ]
+            ] newProcess
+                name:'cmd input shuffler';
 "/                beSystemProcess;
-		resume.
+                resume.
     ].
     ((externalOutStream := anOutStream) notNil
      and:[externalOutStream isExternalStream not]) ifTrue:[
-	pOut := NonPositionableExternalStream makePipe.
-	shuffledOutStream := (pOut at:1).
-	anOutStream isBinary ifTrue:[
-	    shuffledOutStream binary
-	].
-	outStreamToClose := externalOutStream := pOut at:2.
-	outputShufflerProcess :=
-	    [
-		WriteError handle:[:ex |
-		    "/ ignored
-		] do:[
-		    self shuffleAllFrom:shuffledOutStream to:anOutStream lineWise:lineWise lockWith:terminateLock.
-		].
-	    ] newProcess
-		name:'cmd output shuffler';
+        pOut := NonPositionableExternalStream makePipe.
+        shuffledOutStream := (pOut at:1).
+        anOutStream isBinary ifTrue:[
+            shuffledOutStream binary
+        ].
+        outStreamToClose := externalOutStream := pOut at:2.
+        outputShufflerProcess :=
+            [
+                WriteError handle:[:ex |
+                    "/ ignored
+                ] do:[
+                    self shuffleAllFrom:shuffledOutStream to:anOutStream lineWise:lineWise lockWith:terminateLock.
+                ].
+            ] newProcess
+                name:'cmd output shuffler';
 "/                beSystemProcess;
-		resume.
+                resume.
     ].
     (externalErrStream := anErrStream) notNil ifTrue:[
-	anErrStream == anOutStream ifTrue:[
-	    externalErrStream := externalOutStream
-	] ifFalse:[
-	    anErrStream isExternalStream ifFalse:[
-		pErr := NonPositionableExternalStream makePipe.
-		shuffledErrStream := (pErr at:1).
-		anErrStream isBinary ifTrue:[
-		    shuffledErrStream binary
-		].
-		errStreamToClose := externalErrStream := pErr at:2.
-		errorShufflerProcess :=
-		    [
-			self shuffleAllFrom:shuffledErrStream to:anErrStream lineWise:lineWise lockWith:terminateLock.
-		    ] newProcess
-			name:'cmd err-output shuffler';
+        anErrStream == anOutStream ifTrue:[
+            externalErrStream := externalOutStream
+        ] ifFalse:[
+            anErrStream isExternalStream ifFalse:[
+                pErr := NonPositionableExternalStream makePipe.
+                shuffledErrStream := (pErr at:1).
+                anErrStream isBinary ifTrue:[
+                    shuffledErrStream binary
+                ].
+                errStreamToClose := externalErrStream := pErr at:2.
+                errorShufflerProcess :=
+                    [
+                        self shuffleAllFrom:shuffledErrStream to:anErrStream lineWise:lineWise lockWith:terminateLock.
+                    ] newProcess
+                        name:'cmd err-output shuffler';
 "/                        beSystemProcess;
-			resume.
-	    ]
-	]
+                        resume.
+            ]
+        ]
     ].
     ((externalAuxStream := anAuxStream) notNil
      and:[externalAuxStream isExternalStream not]) ifTrue:[
-	pAux := NonPositionableExternalStream makePipe.
-	auxStreamToClose := externalAuxStream := pAux at:1.
-	shuffledAuxStream := pAux at:2.
-	shuffledAuxStream blocking:false.
-	anAuxStream isBinary ifTrue:[
-	    shuffledAuxStream binary
-	].
-
-	"/ start a reader process, shuffling data from the given
-	"/ auxStream to the pipe (which is connected to the commands aux)
-	auxShufflerProcess :=
-	    [
-		[
-		    [anAuxStream atEnd] whileFalse:[
-			self shuffleFrom:anAuxStream to:shuffledAuxStream lineWise:false.
-			shuffledAuxStream flush
-		    ]
-		] ensure:[
-		    shuffledAuxStream close
-		]
-	    ] newProcess
-		name:'cmd aux shuffler';
+        pAux := NonPositionableExternalStream makePipe.
+        auxStreamToClose := externalAuxStream := pAux at:1.
+        shuffledAuxStream := pAux at:2.
+        shuffledAuxStream blocking:false.
+        anAuxStream isBinary ifTrue:[
+            shuffledAuxStream binary
+        ].
+
+        "/ start a reader process, shuffling data from the given
+        "/ auxStream to the pipe (which is connected to the commands aux)
+        auxShufflerProcess :=
+            [
+                [
+                    [anAuxStream atEnd] whileFalse:[
+                        self shuffleFrom:anAuxStream to:shuffledAuxStream lineWise:false.
+                        shuffledAuxStream flush
+                    ]
+                ] ensure:[
+                    shuffledAuxStream close
+                ]
+            ] newProcess
+                name:'cmd aux shuffler';
 "/                beSystemProcess;
-		resume.
+                resume.
     ].
 
-    stopShufflers := [
-	inputShufflerProcess notNil ifTrue:[
-	    terminateLock critical:[inputShufflerProcess terminate].
-	    inputShufflerProcess waitUntilTerminated
-	].
-	auxShufflerProcess notNil ifTrue:[
-	    terminateLock critical:[auxShufflerProcess terminate].
-	    auxShufflerProcess waitUntilTerminated
-	].
-	outputShufflerProcess notNil ifTrue:[
-	    terminateLock critical:[outputShufflerProcess terminate].
-	    outputShufflerProcess waitUntilTerminated.
-	    self shuffleRestFrom:shuffledOutStream to:anOutStream lineWise:lineWise.
-	    shuffledOutStream close.
-	].
-	errorShufflerProcess notNil ifTrue:[
-	    terminateLock critical:[errorShufflerProcess terminate].
-	    errorShufflerProcess waitUntilTerminated.
-	    self shuffleRestFrom:shuffledErrStream to:anErrStream lineWise:lineWise.
-	    shuffledErrStream close.
-	].
+    stopShufflers := [:shuffleRest |
+        inputShufflerProcess notNil ifTrue:[
+            terminateLock critical:[inputShufflerProcess terminate].
+            inputShufflerProcess waitUntilTerminated
+        ].
+        auxShufflerProcess notNil ifTrue:[
+            terminateLock critical:[auxShufflerProcess terminate].
+            auxShufflerProcess waitUntilTerminated
+        ].
+        outputShufflerProcess notNil ifTrue:[
+            terminateLock critical:[outputShufflerProcess terminate].
+            outputShufflerProcess waitUntilTerminated.
+            shuffleRest ifTrue:[ self shuffleRestFrom:shuffledOutStream to:anOutStream lineWise:lineWise ].
+            shuffledOutStream close.
+        ].
+        errorShufflerProcess notNil ifTrue:[
+            terminateLock critical:[errorShufflerProcess terminate].
+            errorShufflerProcess waitUntilTerminated.
+            shuffleRest ifTrue:[ self shuffleRestFrom:shuffledErrStream to:anErrStream lineWise:lineWise ].
+            shuffledErrStream close.
+        ].
     ].
 
     closeStreams := [
-	inStreamToClose notNil ifTrue:[
-	    inStreamToClose close
-	].
-	errStreamToClose notNil ifTrue:[
-	    errStreamToClose close
-	].
-	outStreamToClose notNil ifTrue:[
-	    outStreamToClose close
-	].
-	auxStreamToClose notNil ifTrue:[
-	    auxStreamToClose close
-	].
+        inStreamToClose notNil ifTrue:[
+            inStreamToClose close
+        ].
+        errStreamToClose notNil ifTrue:[
+            errStreamToClose close
+        ].
+        outStreamToClose notNil ifTrue:[
+            outStreamToClose close
+        ].
+        auxStreamToClose notNil ifTrue:[
+            auxStreamToClose close
+        ].
     ].
 
 
     sema := Semaphore new name:'OS command wait'.
     [
-	pid := Processor
-		    monitor:[
-			self
-			    startProcess:aCommandString
-			    inputFrom:externalInStream
-			    outputTo:externalOutStream
-			    errorTo:externalErrStream
-			    auxFrom:externalAuxStream
-			    environment:environmentDictionary
-			    inDirectory:dirOrNil
-		    ]
-		    action:[:status |
-			status stillAlive ifFalse:[
-			    exitStatus := status.
-			    sema signal.
-			    self closePid:pid
-			]
-		    ].
-
-	pid isNil ifTrue:[
-	    exitStatus := self osProcessStatusClass processCreationFailure
-	] ifFalse:[
-	    sema wait.
-	].
+        pid := Processor
+                    monitor:[
+                        self
+                            startProcess:aCommandString
+                            inputFrom:externalInStream
+                            outputTo:externalOutStream
+                            errorTo:externalErrStream
+                            auxFrom:externalAuxStream
+                            environment:environmentDictionary
+                            inDirectory:dirOrNil
+                    ]
+                    action:[:status |
+                        status stillAlive ifFalse:[
+                            exitStatus := status.
+                            sema signal.
+                            self closePid:pid
+                        ]
+                    ].
+
+        pid isNil ifTrue:[
+            exitStatus := self osProcessStatusClass processCreationFailure
+        ] ifFalse:[
+            sema wait.
+        ].
     ] ifCurtailed:[
-	closeStreams value.
-	pid notNil ifTrue:[
-	    "/ terminate the os-command (and all of its forked commands)
-	    self terminateProcessGroup:pid.
-	    self terminateProcess:pid.
-	    self closePid:pid.
-	].
-	stopShufflers value.
+        closeStreams value.
+        pid notNil ifTrue:[
+            "/ terminate the os-command (and all of its forked commands)
+            self terminateProcessGroup:pid.
+            self terminateProcess:pid.
+            self closePid:pid.
+        ].
+        stopShufflers value:false.
     ].
 
     closeStreams value.
-    stopShufflers value.
+    stopShufflers value:true.
     exitStatus success ifFalse:[
-	^ aBlock value:exitStatus
+        ^ aBlock value:exitStatus
     ].
     ^ true
 
     "
-	|outStream errStream|
-
-	outStream := '' writeStream.
-
-	OperatingSystem executeCommand:'ls -l'
-			inputFrom:'abc' readStream
-			outputTo:outStream
-			errorTo:nil
-			inDirectory:nil
-			lineWise:true
-			onError:[:exitStatus | ^ false].
-	outStream contents
-    "
-
-    "
-	|outStream errStream|
-
-	outStream := #[] writeStream.
-
-	OperatingSystem executeCommand:'cat'
-			inputFrom:(ByteArray new:5000000) readStream
-			outputTo:outStream
-			errorTo:nil
-			inDirectory:nil
-			lineWise:false
-			onError:[:exitStatus | ^ false].
-	outStream size
-    "
-
-    "
-	|outStream errStream|
-
-	outStream := '' writeStream.
-
-	OperatingSystem executeCommand:'gpg -s --batch --no-tty --passphrase-fd 0 /tmp/passwd'
-			inputFrom:'bla' readStream
-			outputTo:outStream
-			errorTo:nil
-			inDirectory:nil
-			lineWise:true
-			onError:[:exitStatus |  false].
-	outStream contents
+        |outStream errStream|
+
+        outStream := '' writeStream.
+
+        OperatingSystem executeCommand:'ls -l'
+                        inputFrom:'abc' readStream
+                        outputTo:outStream
+                        errorTo:nil
+                        inDirectory:nil
+                        lineWise:true
+                        onError:[:exitStatus | ^ false].
+        outStream contents
+    "
+
+    "
+        |outStream errStream|
+
+        outStream := #[] writeStream.
+
+        OperatingSystem executeCommand:'cat'
+                        inputFrom:(ByteArray new:5000000) readStream
+                        outputTo:outStream
+                        errorTo:nil
+                        inDirectory:nil
+                        lineWise:false
+                        onError:[:exitStatus | ^ false].
+        outStream size
+    "
+
+    "
+        |outStream errStream|
+
+        outStream := '' writeStream.
+
+        OperatingSystem executeCommand:'gpg -s --batch --no-tty --passphrase-fd 0 /tmp/passwd'
+                        inputFrom:'bla' readStream
+                        outputTo:outStream
+                        errorTo:nil
+                        inDirectory:nil
+                        lineWise:true
+                        onError:[:exitStatus |  false].
+        outStream contents
     "
 
     "Modified: / 11-02-2007 / 20:54:39 / cg"
@@ -2841,16 +2843,22 @@
 !
 
 enableAbortInterrupts
-    "enable abort signalhandling, and make it a regular signalInterrupt.
+    "enable SIGABRT signal handling, and make it a regular signalInterrupt.
      (the default will dump core and exit - which is not a good idea for
       end-user applications ...).
+     After enabling, these exceptions will send the message
+     'signalInterrupt' to the SignalInterruptHandler object.
      This is especially useful, if linked-in C-libraries call abort() ..."
 
     self enableSignal:(self sigABRT)
+
+    "
+     OperatingSystem enableAbortInterrupts
+    "
 !
 
 enableChildSignalInterrupts
-    "enable childSignal interrupts
+    "enable child process interrupts
      (SIGCHLD, if the architecture supports it).
      After enabling, these signals will send the message
      'childSignalInterrupt' to the ChildSignalInterruptHandler object."
@@ -2867,8 +2875,7 @@
 !
 
 enableFpExceptionInterrupts
-    "enable floating point exception interrupts (if the
-     architecture supports it).
+    "enable floating point exception interrupts (if the architecture supports it).
      After enabling, fpu-exceptions will send the message
      'fpuExceptionInterrupt' to the FPUExceptionInterruptHandler object."
 
@@ -2876,7 +2883,7 @@
 !
 
 enableHardSignalInterrupts
-    "enable hard signal exception interrupts (trap, buserror & segm. violation).
+    "enable hard signal exception interrupts (trap, bus error & segm. violation).
      After enabling, these exceptions will send the message
      'signalInterrupt' to the SignalInterruptHandler object."
 
@@ -3837,6 +3844,12 @@
     ^ false
 !
 
+isOSXlike
+    "return true, if the OS we're running on is a mac OSX like (but not A/UX or OS9)."
+
+    ^ false
+!
+
 isProcessIdPresent:pid
     "answer true, if a process with process id pid is present, false if not.
      Raise an error, if an exception occures"
@@ -7169,11 +7182,11 @@
 !AbstractOperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.225 2013-02-05 22:12:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.230 2013-03-04 15:16:51 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.225 2013-02-05 22:12:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.230 2013-03-04 15:16:51 cg Exp $'
 ! !
 
 
--- a/ApplicationDefinition.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/ApplicationDefinition.st	Tue Mar 05 18:10:13 2013 +0000
@@ -162,14 +162,6 @@
         value:self subProjects_code
         value:'description'.
 
-    aTwoArgBlock 
-        value:self preRequisites_code
-        value:'description'.
-
-    aTwoArgBlock 
-        value:self excludedFromPreRequisites_code
-        value:'description'.
-
     (self class includesSelector:#startupClassName) ifFalse:[
         aTwoArgBlock 
             value:self startupClassName_code
@@ -497,6 +489,29 @@
     "Created: / 15-10-2006 / 12:44:14 / cg"
 !
 
+includedInPreRequisites
+    "list packages which are to be explicitely included in the prerequisites list,
+     even if not found by the automatic search.
+     Redefine this, if classes from other packages are referred to via reflection
+     or by constructing names dynamically (i.e. the search cannot find it)"
+
+    ^ self isGUIApplication ifTrue:[
+        #(
+            'stx:libcomp'   "/ to read the rc file
+            'stx:libbasic2' "/ UI framework
+            'stx:libview'   "/ UI framework
+            'stx:libview2'  "/ UI framework
+            'stx:libwidg'   "/ UI framework
+            'stx:libwidg2'  "/ UI framework
+            'stx:libui'     "/ UI framework
+        )
+    ] ifFalse:[
+        #(
+            'stx:libcomp'   "/ to read the rc file
+        )
+    ].
+!
+
 initiallyLoadedPreRequisites
    "Prereqisites packages that are not to be loaded at application startup, but
     that maybe loaded later by the application.
@@ -2223,7 +2238,7 @@
 prereq:
 %(MAKE_PREREQUISITES)
 
-setup:
+setup::
         @if test -d autoPackage; then \
             makepackage; \
         else \
@@ -2904,11 +2919,11 @@
 !ApplicationDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.211 2013-01-17 21:06:02 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.214 2013-03-01 19:54:26 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.211 2013-01-17 21:06:02 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.214 2013-03-01 19:54:26 stefan Exp $'
 !
 
 version_SVN
--- a/Block.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/Block.st	Tue Mar 05 18:10:13 2013 +0000
@@ -2087,6 +2087,33 @@
     "Modified: / 26.7.1999 / 11:24:06 / stefan"
 !
 
+valueWithTimeout:aTimeDuration
+    "execute the receiver, but abort the evaluation after aTimeDuration if still running.
+     Return the receivers value, or nil if aborted."
+
+    ^ self valueWithWatchDog:[^ nil] afterMilliseconds:aTimeDuration asMilliseconds
+
+    "
+     [
+        1 to:15 do:[:round |
+            Transcript showCR:round.
+            Delay waitForMilliseconds:20.
+        ].
+        true
+     ] valueWithTimeout:(TimeDuration seconds:1)      
+    "
+
+    "
+     [
+        1 to:100 do:[:round |
+            Transcript showCR:round.
+            Delay waitForMilliseconds:20.
+        ].
+        true
+     ] valueWithTimeout:(TimeDuration seconds:1)                  
+    "
+!
+
 valueWithWatchDog:exceptionBlock afterMilliseconds:aTimeLimit
     "a watchdog on a block's execution. If the block does not finish its
      evaluation after aTimeLimit milliseconds, it is interrupted (aborted) and
@@ -3058,11 +3085,11 @@
 !Block class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Block.st,v 1.190 2013-01-22 18:43:43 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Block.st,v 1.191 2013-02-24 19:24:28 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Block.st,v 1.190 2013-01-22 18:43:43 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Block.st,v 1.191 2013-02-24 19:24:28 cg Exp $'
 ! !
 
 
--- a/CharacterArray.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/CharacterArray.st	Tue Mar 05 18:10:13 2013 +0000
@@ -326,6 +326,7 @@
     "
 ! !
 
+
 !CharacterArray class methodsFor:'pattern matching'!
 
 matchEscapeCharacter
@@ -677,6 +678,7 @@
     ^ self == CharacterArray
 ! !
 
+
 !CharacterArray methodsFor:'Compatibility-ANSI'!
 
 addLineDelimiters
@@ -1572,6 +1574,7 @@
 ! !
 
 
+
 !CharacterArray methodsFor:'character searching'!
 
 includesMatchCharacters
@@ -4385,6 +4388,7 @@
 ! !
 
 
+
 !CharacterArray methodsFor:'padded copying'!
 
 centerPaddedTo:newSize
@@ -4909,8 +4913,192 @@
     "Modified: 17.4.1997 / 12:50:23 / cg"
 ! !
 
+
 !CharacterArray methodsFor:'special string converting'!
 
+expandPlaceholders:escapeCharacter with:argArrayOrDictionary
+    "this is the generic version of the old %-escaping method, allowing for an arbitrary
+     escape character to be used (typically $$ or $% are effectively used).
+     Return a copy of the receiver, where all %i escapes are
+     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
+     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
+     in the new string 'hello world; how is this'.
+     As an extension, the argument may also be a dictionary, providing
+     values for symbolic keys.
+     In this case, %a .. %z and %(...) are also allowed.
+     (%1..%9 require a numeric key in the dictionary, however)
+     To get a '%' character, use a '%%'-escape.
+     To get an integer-indexed placeHolder followed by another digit,
+     or an index > 9, you must use %(digit).
+     See also bindWith:... for VisualAge compatibility."
+
+    |stream|
+
+    stream := (TextStream ? WriteStream) on:(self species new:self size + 20).
+    self expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:stream.
+    ^ stream contents.
+
+
+    "
+     'hello %1' expandPlaceholdersWith:#('world')
+     'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this')
+     'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this')
+     '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9)
+     '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123)
+     '%%10 gives %10' expandPlaceholdersWith:#(123)
+     '%%(10) gives %(10)' expandPlaceholdersWith:#(123)
+     '%test gives %1' expandPlaceholdersWith:#(123)
+     'bla %1 bla' expandPlaceholdersWith:{ 'hello' allBold }
+     'bla %1 bla' expandPlaceholdersWith:{ 'hello' }
+    "
+
+    "
+     |dict|
+
+     dict := Dictionary new.
+     dict at:1 put:'one'.
+     dict at:$a put:'AAAAA'.
+     dict at:$b put:[ Time now ].
+     dict at:'foo' put:[ Date today ].
+     'hello $1 %a $b %(foo)' expandPlaceholders:$$ with:dict       
+    "
+
+    "Modified: 1.7.1997 / 00:53:24 / cg"
+!
+
+expandPlaceholders:escapeCharacter with:argArrayOrDictionary on:aStream
+    "this is the generic version of the old %-escaping method, allowing for an arbitrary
+     escape character to be used (typically $$ or $% are effectively used).
+     Write the receiver to aStream, where all %i escapes are
+     replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
+     I.e. 'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') results
+     in the new string 'hello world; how is this'.
+     As an extension, the argument may also be a dictionary, providing
+     values for symbolic keys.
+     In this case, %a .. %z and %(...) are also allowed.
+     (%1..%9 require a numeric key in the dictionary, however)
+     To get a '%' character, use a '%%'-escape.
+     To get an integer-indexed placeHolder followed by another digit,
+     or an index > 9, you must use %(digit).
+     See also bindWith:... for VisualAge compatibility.
+     Use %<cr> to insert a CR and %<tab> to insert a TAB."
+
+    |next v key
+     idx   "{ SmallInteger }"
+     idx2  "{ SmallInteger }"
+     start "{ SmallInteger }"
+     stop  "{ SmallInteger }"|
+
+    stop := self size.
+    start := 1.
+    [start <= stop] whileTrue:[
+        idx := self indexOf:escapeCharacter startingAt:start.
+        (idx == 0 or:[idx == stop]) ifTrue:[
+            aStream nextPutAll:self startingAt:start to:stop.
+            ^ self.
+        ].
+        "found an escapeCharacter"
+        aStream nextPutAll:self startingAt:start to:(idx - 1).
+        next := self at:(idx + 1).
+        (next == escapeCharacter) ifTrue:[
+            aStream nextPut:escapeCharacter.
+        ] ifFalse:[
+            next == $< ifTrue:[
+                idx2 := self indexOf:$> startingAt:idx+2.
+                key := self copyFrom:idx+2 to:idx2-1.
+                idx := idx2 - 1.
+                key := key asSymbolIfInterned.
+                (#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
+                    aStream nextPut:(Character perform:key).
+                ].
+            ] ifFalse:[
+                next isDigit ifTrue:[
+                    v := argArrayOrDictionary at:(next digitValue) ifAbsent:''
+                ] ifFalse:[
+                    next == $( ifTrue:[
+                        idx2 := self indexOf:$) startingAt:idx+2.
+                        key := self copyFrom:idx+2 to:idx2-1.
+                        idx := idx2 - 1.
+                        (argArrayOrDictionary includesKey:key) ifTrue:[
+                            v := argArrayOrDictionary at:key
+                        ] ifFalse:[
+                            key := key asSymbolIfInterned ? key.
+                            (argArrayOrDictionary includesKey:key) ifTrue:[
+                                v := argArrayOrDictionary at:key
+                            ] ifFalse:[
+                                (key size == 1 and:[ argArrayOrDictionary includesKey:(key at:1)]) ifTrue:[
+                                    v := argArrayOrDictionary at:(key at:1)
+                                ] ifFalse:[
+                                    key isNumeric ifTrue:[
+                                        key := Integer readFrom:key onError:nil.
+                                    ].
+                                    v := argArrayOrDictionary at:key ifAbsent:''
+                                ]
+                            ].
+                        ].
+                    ] ifFalse:[
+                        (next isLetter and:[argArrayOrDictionary isSequenceable not "is a Dictionary"]) ifTrue:[
+                            "so next is a non-numeric single character."
+                            v := argArrayOrDictionary
+                                    at:next
+                                    ifAbsent:[
+                                        "try symbol instead of character"
+                                        argArrayOrDictionary
+                                            at:next asSymbol
+                                            ifAbsent:[String with:escapeCharacter with:next].
+                                 ].
+                        ] ifFalse:[
+                            v := String with:$% with:next.
+                        ].
+                    ]
+                ].
+                "/ v notNil ifTrue:[
+                    v isBlock ifTrue:[
+                        v := v value
+                    ].
+
+                    v printOn:aStream.
+                "/ ].
+            ]
+        ].
+        start := idx + 2
+    ].
+
+    "
+     String streamContents:[:s|
+        'hello %1' expandPlaceholders:$% with:#('world') on:s.
+        s cr.
+        'hello $1; how is $2' expandPlaceholders:$$ with:#('world' 'this') on:s.
+        s cr.
+        'hello %2; how is %1' expandPlaceholders:$% with:#('world' 'this') on:s.
+        s cr.
+        '%1 plus %2 gives %3 ' expandPlaceholders:$% with:#(4 5 9) on:s.
+        s cr.
+        '%%(1)0 gives %(1)0' expandPlaceholders:$% with:#(123) on:s.
+        s cr.
+        '%%10 gives %10' expandPlaceholders:$% with:#(123) on:s.
+        s cr.
+        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholders:$% with:#(123) on:s.
+        s cr.
+        '%test gives %1' expandPlaceholders:$% with:#(123) on:s.
+     ]  
+    "
+
+    "
+     |dict|
+
+     dict := Dictionary new.
+     dict at:1 put:'one'.
+     dict at:$a put:'AAAAA'.
+     dict at:$b put:[ Time now ].
+     String streamContents:[:s|
+         'hello $1 $a $b' expandPlaceholders:$$ with:dict on:s.
+     ].
+    "
+
+    "Modified: / 18-11-2010 / 15:43:28 / cg"
+!
+
 expandPlaceholdersWith:argArrayOrDictionary
     "return a copy of the receiver, where all %i escapes are
      replaced by corresponding arguments' printStrings from the argArrayOrDictionary.
@@ -4974,104 +5162,25 @@
      See also bindWith:... for VisualAge compatibility.
      Use %<cr> to insert a CR and %<tab> to insert a TAB."
 
-    |next v key
-     idx   "{ SmallInteger }"
-     idx2  "{ SmallInteger }"
-     start "{ SmallInteger }"
-     stop  "{ SmallInteger }"|
-
-    stop := self size.
-    start := 1.
-    [start <= stop] whileTrue:[
-	idx := self indexOf:$% startingAt:start.
-	(idx == 0 or:[idx == stop]) ifTrue:[
-	    aStream nextPutAll:self startingAt:start to:stop.
-	    ^ self.
-	].
-	"found a %"
-	aStream nextPutAll:self startingAt:start to:(idx - 1).
-	next := self at:(idx + 1).
-	(next == $%) ifTrue:[
-	    aStream nextPut:$%.
-	] ifFalse:[
-	    next == $< ifTrue:[
-		idx2 := self indexOf:$> startingAt:idx+2.
-		key := self copyFrom:idx+2 to:idx2-1.
-		idx := idx2 - 1.
-		key := key asSymbolIfInterned.
-		(#(cr tab nl return lf ff null) includesIdentical:key) ifTrue:[
-		    aStream nextPut:(Character perform:key).
-		].
-	    ] ifFalse:[
-		next isDigit ifTrue:[
-		    v := argArrayOrDictionary at:(next digitValue) ifAbsent:''
-		] ifFalse:[
-		    next == $( ifTrue:[
-			idx2 := self indexOf:$) startingAt:idx+2.
-			key := self copyFrom:idx+2 to:idx2-1.
-			idx := idx2 - 1.
-			(argArrayOrDictionary includesKey:key) ifTrue:[
-			    v := argArrayOrDictionary at:key
-			] ifFalse:[
-			    key := key asSymbolIfInterned ? key.
-			    (argArrayOrDictionary includesKey:key) ifTrue:[
-				v := argArrayOrDictionary at:key
-			    ] ifFalse:[
-				(key size == 1 and:[ argArrayOrDictionary includesKey:(key at:1)]) ifTrue:[
-				    v := argArrayOrDictionary at:(key at:1)
-				] ifFalse:[
-				    key isNumeric ifTrue:[
-					key := Integer readFrom:key onError:nil.
-				    ].
-				    v := argArrayOrDictionary at:key ifAbsent:''
-				]
-			    ].
-			].
-		    ] ifFalse:[
-			(next isLetter and:[argArrayOrDictionary isSequenceable not "is a Dictionary"]) ifTrue:[
-			    "so next is a non-numeric single character."
-			    v := argArrayOrDictionary
-				    at:next
-				    ifAbsent:[
-					"try symbol instead of character"
-					argArrayOrDictionary
-					    at:next asSymbol
-					    ifAbsent:[String with:$% with:next].
-				 ].
-			] ifFalse:[
-			    v := String with:$% with:next.
-			].
-		    ]
-		].
-		"/ v notNil ifTrue:[
-		    v isBlock ifTrue:[
-			v := v value
-		    ].
-
-		    v printOn:aStream.
-		"/ ].
-	    ]
-	].
-	start := idx + 2
-    ].
+    ^ self expandPlaceholders:$% with:argArrayOrDictionary on:aStream
 
     "
      String streamContents:[:s|
-	'hello %1' expandPlaceholdersWith:#('world') on:s.
-	s cr.
-	'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
-	s cr.
-	'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
-	s cr.
-	'%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
-	s cr.
-	'%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
-	s cr.
-	'%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
-	s cr.
-	'%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
-	s cr.
-	'%test gives %1' expandPlaceholdersWith:#(123) on:s.
+        'hello %1' expandPlaceholdersWith:#('world') on:s.
+        s cr.
+        'hello %1; how is %2' expandPlaceholdersWith:#('world' 'this') on:s.
+        s cr.
+        'hello %2; how is %1' expandPlaceholdersWith:#('world' 'this') on:s.
+        s cr.
+        '%1 plus %2 gives %3 ' expandPlaceholdersWith:#(4 5 9) on:s.
+        s cr.
+        '%%(1)0 gives %(1)0' expandPlaceholdersWith:#(123) on:s.
+        s cr.
+        '%%10 gives %10' expandPlaceholdersWith:#(123) on:s.
+        s cr.
+        '%%(10) gives %(10) %<cr>%<tab>next line' expandPlaceholdersWith:#(123) on:s.
+        s cr.
+        '%test gives %1' expandPlaceholdersWith:#(123) on:s.
      ]
     "
 
@@ -5083,7 +5192,7 @@
      dict at:$a put:'AAAAA'.
      dict at:$b put:[ Time now ].
      String streamContents:[:s|
-	 'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
+         'hello %1 %a %b' expandPlaceholdersWith:dict on:s.
      ].
     "
 
@@ -5713,6 +5822,7 @@
     "
 ! !
 
+
 !CharacterArray methodsFor:'substring searching'!
 
 findString:subString
@@ -6204,11 +6314,11 @@
 !CharacterArray class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.492 2013-01-22 14:11:02 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.494 2013-02-08 14:45:04 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.492 2013-01-22 14:11:02 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.494 2013-02-08 14:45:04 cg Exp $'
 ! !
 
 
--- a/CharacterEncoder.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/CharacterEncoder.st	Tue Mar 05 18:10:13 2013 +0000
@@ -213,6 +213,7 @@
 "
 ! !
 
+
 !CharacterEncoder class methodsFor:'instance creation'!
 
 encoderFor:encodingNameSymbol
@@ -518,6 +519,7 @@
     "Modified: / 12-07-2012 / 19:45:15 / cg"
 ! !
 
+
 !CharacterEncoder class methodsFor:'Compatibility-ST80'!
 
 encoderNamed: encoderName
@@ -537,18 +539,20 @@
     "Modified: 20.6.1997 / 17:38:40 / cg"
 ! !
 
+
 !CharacterEncoder class methodsFor:'accessing'!
 
 nullEncoderInstance
     ^ NullEncoderInstance
 ! !
 
+
 !CharacterEncoder class methodsFor:'class initialization'!
 
 initialize
     |ud|
 
-    AccessLock := RecursionLock new.
+    AccessLock := RecursionLock new name:'CharacterEncoder'.
     NullEncoderInstance := NullEncoder new.
 
     EncodersByName := Dictionary new.
@@ -719,6 +723,7 @@
     "Modified (format): / 23-01-2013 / 09:56:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+
 !CharacterEncoder class methodsFor:'constants'!
 
 jis7KanjiEscapeSequence
@@ -764,6 +769,7 @@
     ^ JisISO2022EscapeSequence.
 ! !
 
+
 !CharacterEncoder class methodsFor:'encoding & decoding'!
 
 decode:aCodePoint
@@ -870,6 +876,7 @@
     "
 ! !
 
+
 !CharacterEncoder class methodsFor:'private'!
 
 flushCode
@@ -887,6 +894,7 @@
     "
 ! !
 
+
 !CharacterEncoder class methodsFor:'private-mapping setup'!
 
 generateCode
@@ -937,6 +945,7 @@
     ^ 'http://std.dkuug.dk/i18n/charmaps/' , rel
 ! !
 
+
 !CharacterEncoder class methodsFor:'queries'!
 
 isEncoding:subSetEncodingArg subSetOf:superSetEncodingArg
@@ -1040,6 +1049,7 @@
     ^ self nameOfEncoding asUppercaseFirst
 ! !
 
+
 !CharacterEncoder class methodsFor:'testing'!
 
 isAbstract
@@ -1050,6 +1060,7 @@
     ^ self == CharacterEncoder
 ! !
 
+
 !CharacterEncoder class methodsFor:'utilities'!
 
 guessEncodingOfBuffer:buffer
@@ -1235,6 +1246,7 @@
     "
 ! !
 
+
 !CharacterEncoder methodsFor:'encoding & decoding'!
 
 decode:anEncoding
@@ -1311,6 +1323,7 @@
     ^ newString
 ! !
 
+
 !CharacterEncoder methodsFor:'error handling'!
 
 decodingError 
@@ -1367,6 +1380,7 @@
     "Modified: / 12-07-2012 / 20:36:37 / cg"
 ! !
 
+
 !CharacterEncoder methodsFor:'printing'!
 
 printOn:aStream
@@ -1376,12 +1390,14 @@
         nextPutAll:(self nameOfEncoding)
 ! !
 
+
 !CharacterEncoder methodsFor:'private'!
 
 newString:size
     self subclassResponsibility
 ! !
 
+
 !CharacterEncoder methodsFor:'queries'!
 
 characterSize:codePoint
@@ -1411,6 +1427,7 @@
     ^ self class userFriendlyNameOfEncoding
 ! !
 
+
 !CharacterEncoder methodsFor:'stream support'!
 
 readNext:charactersToRead charactersFrom:stream 
@@ -1436,6 +1453,7 @@
     ^ aStream next
 ! !
 
+
 !CharacterEncoder::CompoundEncoder class methodsFor:'documentation'!
 
 documentation
@@ -1455,6 +1473,7 @@
 "
 ! !
 
+
 !CharacterEncoder::CompoundEncoder methodsFor:'accessing'!
 
 encoder:encoderArg decoder:decoderArg  
@@ -1464,6 +1483,7 @@
     encoder := encoderArg.
 ! !
 
+
 !CharacterEncoder::CompoundEncoder methodsFor:'encoding & decoding'!
 
 decode:aCode
@@ -1482,6 +1502,7 @@
     ^ encoder encodeString:(decoder decodeString:aString)
 ! !
 
+
 !CharacterEncoder::CompoundEncoder methodsFor:'printing'!
 
 printOn:aStream
@@ -1494,6 +1515,7 @@
     encoder printOn:aStream
 ! !
 
+
 !CharacterEncoder::DefaultEncoder class methodsFor:'documentation'!
 
 documentation
@@ -1502,6 +1524,7 @@
 "
 ! !
 
+
 !CharacterEncoder::InverseEncoder class methodsFor:'documentation'!
 
 documentation
@@ -1511,12 +1534,14 @@
 "
 ! !
 
+
 !CharacterEncoder::InverseEncoder methodsFor:'accessing'!
 
 decoder:something
     decoder := something.
 ! !
 
+
 !CharacterEncoder::InverseEncoder methodsFor:'encoding & decoding'!
 
 decode:aCode
@@ -1535,6 +1560,7 @@
     ^ decoder decodeString:aString
 ! !
 
+
 !CharacterEncoder::InverseEncoder methodsFor:'printing'!
 
 printOn:aStream
@@ -1544,18 +1570,21 @@
         nextPutAll:(decoder nameOfDecodedCode)
 ! !
 
+
 !CharacterEncoder::InverseEncoder methodsFor:'queries'!
 
 characterSize:charOrcodePoint
     ^ decoder characterSize:charOrcodePoint
 ! !
 
+
 !CharacterEncoder::InverseEncoder methodsFor:'stream support'!
 
 readNextInputCharacterFrom:aStream
     ^ decoder readNextInputCharacterFrom:aStream
 ! !
 
+
 !CharacterEncoder::NullEncoder class methodsFor:'documentation'!
 
 documentation
@@ -1564,6 +1593,7 @@
 "
 ! !
 
+
 !CharacterEncoder::NullEncoder methodsFor:'encoding & decoding'!
 
 decode:aCode
@@ -1582,12 +1612,14 @@
     ^ aString
 ! !
 
+
 !CharacterEncoder::NullEncoder methodsFor:'queries'!
 
 isNullEncoder
     ^ true
 ! !
 
+
 !CharacterEncoder::OtherEncoding class methodsFor:'private'!
 
 flushCode
@@ -1596,6 +1628,7 @@
 generateEncoderCode
 ! !
 
+
 !CharacterEncoder::TwoStepEncoder class methodsFor:'documentation'!
 
 documentation
@@ -1608,6 +1641,7 @@
 "
 ! !
 
+
 !CharacterEncoder::TwoStepEncoder methodsFor:'accessing'!
 
 encoder1:encoder1Arg encoder2:encoder2Arg
@@ -1617,6 +1651,7 @@
     encoder2 := encoder2Arg.
 ! !
 
+
 !CharacterEncoder::TwoStepEncoder methodsFor:'encoding & decoding'!
 
 decode:aCode
@@ -1635,6 +1670,7 @@
     ^ encoder2 encodeString:(encoder1 encodeString:aString)
 ! !
 
+
 !CharacterEncoder::TwoStepEncoder methodsFor:'printing'!
 
 printOn:aStream
@@ -1646,6 +1682,7 @@
         nextPutAll:(encoder2 nameOfEncoding)
 ! !
 
+
 !CharacterEncoder::TwoStepEncoder methodsFor:'queries'!
 
 characterSize:codePoint
@@ -1675,14 +1712,15 @@
 
 ! !
 
+
 !CharacterEncoder class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.120 2012-12-12 22:57:59 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.121 2013-02-08 19:02:11 stefan Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.120 2012-12-12 22:57:59 stefan Exp §'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterEncoder.st,v 1.121 2013-02-08 19:02:11 stefan Exp $'
 !
 
 version_HG
--- a/ExternalStream.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/ExternalStream.st	Tue Mar 05 18:10:13 2013 +0000
@@ -3017,6 +3017,8 @@
 sync
     "make sure, that the OS writes cached data to the disk"
 
+    self flush.
+
 %{
 #if !defined(__openVMS__)
     FILEPOINTER f;
@@ -3028,29 +3030,29 @@
      || (__INST(handleType) == @symbol(filePointer))
      || (__INST(handleType) == @symbol(socketFilePointer))
      || (__INST(handleType) == @symbol(pipeFilePointer))) {
-	if ((fp = __INST(handle)) != nil) {
-	    f = __FILEVal(fp);
+        if ((fp = __INST(handle)) != nil) {
+            f = __FILEVal(fp);
 #ifdef WIN32
-	    __threadErrno = 0;
-	    ret = __STX_API_NOINT_CALL1( "FlushFileBuffers", FlushFileBuffers, _get_osfhandle(fileno(f)));
-	    if (ret) {
-		RETURN (self);
-	    }
+            __threadErrno = 0;
+            ret = __STX_API_NOINT_CALL1( "FlushFileBuffers", FlushFileBuffers, _get_osfhandle(fileno(f)));
+            if (ret) {
+                RETURN (self);
+            }
 #else
 
-	    __BEGIN_INTERRUPTABLE__
-	    do {
-		__threadErrno = 0;
-		ret = fsync(fileno(f));
-	    } while ((ret < 0) && (__threadErrno == EINTR));
-	    __END_INTERRUPTABLE__
-
-	    if (ret >= 0) {
-		RETURN (self);
-	    }
+            __BEGIN_INTERRUPTABLE__
+            do {
+                __threadErrno = 0;
+                ret = fsync(fileno(f));
+            } while ((ret < 0) && (__threadErrno == EINTR));
+            __END_INTERRUPTABLE__
+
+            if (ret >= 0) {
+                RETURN (self);
+            }
 #endif /* ! WIN32 */
-	    __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-	}
+            __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+        }
     }
 #endif /* ! __openVMS__ */
 %}.
@@ -3058,9 +3060,9 @@
     handle isNil ifTrue:[^ self errorNotOpen].
 
     "
-	|f|
-	f := 'x' asFilename writeStream.
-	f nextPutAll:'hallo'; sync; syncData; close
+        |f|
+        f := 'x' asFilename writeStream.
+        f nextPutAll:'hallo'; sync; syncData; close
     "
 !
 
@@ -3070,6 +3072,8 @@
      required to read the file's data (so metadata will not be written,
      if only access/modification time has changed)."
 
+    self flush.
+
 %{
 #if defined(HAS_FDATASYNC)
     int ret;
@@ -5731,11 +5735,11 @@
 !ExternalStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.359 2013-02-06 16:02:24 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.360 2013-02-08 16:57:45 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.359 2013-02-06 16:02:24 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.360 2013-02-08 16:57:45 stefan Exp $'
 ! !
 
 
--- a/Filename.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/Filename.st	Tue Mar 05 18:10:13 2013 +0000
@@ -3932,6 +3932,29 @@
         operation:#explore.
 
     "Created: / 21-07-2012 / 12:28:18 / cg"
+!
+
+openFinder
+    "open a finder on the directory represented by the receiver.
+     On non-osx systems, an error is raised"
+
+    OperatingSystem isOSXlike ifFalse:[
+        self warn:'sorry - this operation is only available under osx'.
+    ].
+
+    OperatingSystem executeCommand:'open ',self pathName 
+!
+
+openTerminal
+    "open a terminal window on the directory represented by the receiver.
+     On non-osx systems, an error is raised"
+
+    OperatingSystem isOSXlike ifTrue:[
+        OperatingSystem executeCommand:'/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal ' inDirectory:self pathName. 
+        ^ self
+    ].
+
+    OperatingSystem executeCommand:'xterm ' inDirectory:self pathName. 
 ! !
 
 !Filename methodsFor:'printing & storing'!
@@ -5907,11 +5930,11 @@
 !Filename class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.384 2013-02-06 15:57:06 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.385 2013-02-24 20:25:06 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.384 2013-02-06 15:57:06 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.385 2013-02-24 20:25:06 cg Exp $'
 ! !
 
 
--- a/Integer.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/Integer.st	Tue Mar 05 18:10:13 2013 +0000
@@ -757,6 +757,8 @@
     "Modified: / 15.11.1999 / 20:35:20 / cg"
 ! !
 
+
+
 !Integer class methodsFor:'class initialization'!
 
 initialize
@@ -817,6 +819,7 @@
     "
 ! !
 
+
 !Integer class methodsFor:'prime numbers'!
 
 flushPrimeCache
@@ -1139,6 +1142,7 @@
     ^ self == Integer
 ! !
 
+
 !Integer methodsFor:'Compatibility-Dolphin'!
 
 & aNumber
@@ -1253,8 +1257,10 @@
 
     | bytes |
 
-    size < self digitLength ifTrue: [^ self error: 'number too big for ', size asString].
     bytes := self digitBytesMSB:true.
+    size < bytes size ifTrue: [
+        ^ ConversionError raiseRequestWith:self errorString:'number too big for ', size asString
+    ].
     ^ (ByteArray new: (size - bytes size)), bytes
 
     "
@@ -3016,9 +3022,13 @@
       100 log:2
       999 integerLog2
       999 log:2
-      120000 integerLog2
-      120000 log:2
+      120000 integerLog2 
+      120000 log:2       
       -1 integerLog2
+      50 factorial integerLog2   
+      50 factorial log:2
+      1000 factorial integerLog2   
+      1000 factorial log:2       -- float error!!
     "
 !
 
@@ -4232,6 +4242,7 @@
     "Created: / 09-01-2012 / 17:18:06 / cg"
 ! !
 
+
 !Integer methodsFor:'special modulu arithmetic'!
 
 add_32:anInteger
@@ -4918,11 +4929,11 @@
 !Integer class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.273 2013-01-22 14:10:37 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.275 2013-02-22 11:41:18 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.273 2013-01-22 14:10:37 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.275 2013-02-22 11:41:18 stefan Exp $'
 ! !
 
 
--- a/LargeInteger.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/LargeInteger.st	Tue Mar 05 18:10:13 2013 +0000
@@ -454,7 +454,10 @@
     "return the quotient of the receiver and the argument, aNumber"
 
     aNumber isInteger ifTrue:[
-	^ Fraction numerator:self denominator:aNumber
+        ^ Fraction numerator:self denominator:aNumber
+    ].
+    aNumber isFraction ifTrue:[
+        ^ Fraction numerator:(self * aNumber denominator) denominator:(aNumber numerator)
     ].
 
     "this is a q&d hack - we loose lots of precision here ..."
@@ -1924,31 +1927,41 @@
     |otherSign|
 
     (aNumber class == self class) ifTrue:[
-	otherSign := aNumber sign.
-
-	(sign > 0) ifTrue:[
-	    "I am positive"
-	    (otherSign > 0) ifTrue:[^ self absLess:aNumber].
-	    ^ false "aNumber is <= 0"
-	].
-	"I am negative"
-	(otherSign > 0) ifTrue:[^ true].
-	(otherSign == 0) ifTrue:[^ true].
-	^ (aNumber absLess:self)
+        otherSign := aNumber sign.
+
+        (sign > 0) ifTrue:[
+            "I am positive"
+            (otherSign > 0) ifTrue:[^ self absLess:aNumber].
+            ^ false "aNumber is <= 0"
+        ].
+        "I am negative"
+        (otherSign > 0) ifTrue:[^ true].
+        (otherSign == 0) ifTrue:[^ true].
+        ^ (aNumber absLess:self)
     ].
     (aNumber class == SmallInteger) ifTrue:[
-	otherSign := aNumber sign.
-
-	(sign > 0) ifTrue:[
-	    "I am positive"
-	    ^ false "aNumber is <= 0"
-	].
-	(sign == 0) ifTrue:[
-	    (otherSign > 0) ifTrue:[^ true].
-	    ^ false
-	].
-	"I am negative"
-	^ true
+        otherSign := aNumber sign.
+
+        (sign > 0) ifTrue:[
+            "I am positive"
+            ^ false "aNumber is <= 0"
+        ].
+        (sign == 0) ifTrue:[
+            (otherSign > 0) ifTrue:[^ true].
+            ^ false
+        ].
+        "I am negative"
+        ^ true
+    ].
+    "/ hack for epsilon tests
+    (aNumber class == Float) ifTrue:[
+        self negative ifTrue:[
+            "/ I am a large negative; so my value is definitely below SmallInteger minVal
+            aNumber >= SmallInteger minVal asFloat ifTrue:[^ true].
+        ] ifFalse:[
+            "/ I am a large positive; so my value is definitely above SmallInteger maxVal
+            aNumber <= SmallInteger maxVal asFloat ifTrue:[^ false].
+        ].
     ].
 
     ^ aNumber lessFromInteger:self
@@ -5157,9 +5170,9 @@
 !LargeInteger class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.204 2012-01-31 11:18:26 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.205 2013-02-08 12:57:01 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.204 2012-01-31 11:18:26 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.205 2013-02-08 12:57:01 cg Exp $'
 ! !
--- a/LibraryDefinition.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/LibraryDefinition.st	Tue Mar 05 18:10:13 2013 +0000
@@ -34,6 +34,7 @@
 "
 ! !
 
+
 !LibraryDefinition class methodsFor:'code generation'!
 
 forEachMethodsCodeToCompileDo:aTwoArgBlock ignoreOldDefinition:ignoreOldDefinition
@@ -43,6 +44,7 @@
     "Modified: / 18-08-2006 / 16:22:49 / cg"
 ! !
 
+
 !LibraryDefinition class methodsFor:'description - compilation'!
 
 primaryTarget
@@ -51,6 +53,7 @@
     ^ 'classLibRule'
 ! !
 
+
 !LibraryDefinition class methodsFor:'description - project information'!
 
 description
@@ -82,6 +85,7 @@
     "Created: / 21-12-2010 / 09:28:59 / cg"
 ! !
 
+
 !LibraryDefinition class methodsFor:'file generation'!
 
 basicFileNamesToGenerate
@@ -125,6 +129,7 @@
     "Modified: / 19-09-2006 / 22:41:40 / cg"
 ! !
 
+
 !LibraryDefinition class methodsFor:'file mappings'!
 
 bc_dot_mak_mappings
@@ -185,6 +190,7 @@
     "Modified: / 14-09-2006 / 18:58:07 / cg"
 ! !
 
+
 !LibraryDefinition class methodsFor:'file mappings support'!
 
 commonSymbolsFlag
@@ -230,6 +236,7 @@
     "Modified: / 14-09-2006 / 14:19:59 / cg"
 ! !
 
+
 !LibraryDefinition class methodsFor:'file templates'!
 
 bc_dot_def
@@ -328,6 +335,10 @@
 test: $(TOP)\goodies\builder\reports\NUL
         pushd $(TOP)\goodies\builder\reports & $(MAKE_BAT)
         $(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
+        
+clean::
+        del *.$(CSUFFIX)
+
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
 %(DEPENDENCIES)
@@ -367,15 +378,15 @@
 
 #if defined(INIT_TEXT_SECTION) || defined(DLL_EXPORT)
 DLL_EXPORT void _%(LIBRARY_NAME)_Init() INIT_TEXT_SECTION;
-// DLL_EXPORT void _%(LIBRARY_NAME)_InitDefinition() INIT_TEXT_SECTION;
+DLL_EXPORT void _%(LIBRARY_NAME)_InitDefinition() INIT_TEXT_SECTION;
 #endif
 
-// void _%(LIBRARY_NAME)_InitDefinition(pass, __pRT__, snd)
-// OBJ snd; struct __vmData__ *__pRT__; {
-// __BEGIN_PACKAGE2__("%(LIBRARY_NAME)__DFN", _%(LIBRARY_NAME)_InitDefinition, "%(PACKAGE)");
-// %(DEFINITION_CLASSES)
-// __END_PACKAGE__();
-// }
+void _%(LIBRARY_NAME)_InitDefinition(pass, __pRT__, snd)
+OBJ snd; struct __vmData__ *__pRT__; {
+__BEGIN_PACKAGE2__("%(LIBRARY_NAME)__DFN", _%(LIBRARY_NAME)_InitDefinition, "%(PACKAGE)");
+%(DEFINITION_CLASSES)
+__END_PACKAGE__();
+}
 
 void _%(LIBRARY_NAME)_Init(pass, __pRT__, snd)
 OBJ snd; struct __vmData__ *__pRT__; {
@@ -566,6 +577,7 @@
     "Modified: / 08-08-2006 / 19:33:14 / fm"
 ! !
 
+
 !LibraryDefinition class methodsFor:'misc ui support'!
 
 iconInBrowserSymbol
@@ -581,6 +593,7 @@
 "/        ].
 ! !
 
+
 !LibraryDefinition class methodsFor:'obsolete'!
 
 lib_dot_rc
@@ -636,6 +649,7 @@
     "Modified: / 24-01-2012 / 18:35:45 / cg"
 ! !
 
+
 !LibraryDefinition class methodsFor:'queries'!
 
 canHaveExtensions
@@ -655,6 +669,7 @@
     ^ LibraryType
 ! !
 
+
 !LibraryDefinition class methodsFor:'sanity checks'!
 
 searchForInconsistencies
@@ -685,6 +700,7 @@
     "Created: / 09-08-2006 / 16:31:54 / fm"
 ! !
 
+
 !LibraryDefinition class methodsFor:'testing'!
 
 isAbstract
@@ -715,12 +731,14 @@
     "Modified: / 08-02-2011 / 10:03:42 / cg"
 ! !
 
+
 !LibraryDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.110 2012-10-25 20:40:23 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.112 2013-02-28 11:15:51 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.110 2012-10-25 20:40:23 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.112 2013-02-28 11:15:51 cg Exp $'
 ! !
+
--- a/MD5Stream.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/MD5Stream.st	Tue Mar 05 18:10:13 2013 +0000
@@ -55,37 +55,38 @@
     This may be used as checksum or for generating cryptographic signatures.
 
     Note:
-	in August 2004, some researchers have found a way to generate full collisions for MD5.
-	Therefore, for new applications, it may be wise to choose another hash function for security stuff.
-	See a hash-collision example in the examples method.
+        in August 2004, some researchers have found a way to generate full collisions for MD5.
+        Therefore, for new applications, it may be wise to choose another hash function for security stuff.
+        See a hash-collision example in the examples method.
 
-	So, the MD5 algorithm has severe weaknesses, for example it is easy to compute two messages yielding
-	the same hash (collision attack).
-	The use of this algorithm is only justified for non-cryptographic application.
+        So, the MD5 algorithm has severe weaknesses, for example it is easy to compute two messages yielding
+        the same hash (collision attack).
+        The use of this algorithm is only justified for non-cryptographic application.
 
 
     performance: roughly
-			80000 Kb/s on a 2Ghz Duo
-			27200 Kb/s on a 1.2Ghz Athlon
-			12600 Kb/s on a 400Mhz PIII
-			 9150 Kb/s on a 300Mhz Sparc.
-	performance is almost completely limited by the speed of the md5-routine, which is the reference
-	implementation in C from md5lib.
+                       104000 Kb/s on a 2.5Ghz 64X2 Athlon 4800+ (64bit)
+                        80000 Kb/s on a 2Ghz Duo
+                        27200 Kb/s on a 1.2Ghz Athlon
+                        12600 Kb/s on a 400Mhz PIII
+                         9150 Kb/s on a 300Mhz Sparc.
+        performance is almost completely limited by the speed of the md5-routine, which is the reference
+        implementation in C from md5lib.
 
     [author:]
-	Stefan Vogel
+        Stefan Vogel
 
     [see also:]
-	SHA1Stream
-	SHA256Stream SHA512Stream (in libcrypt)
+        SHA1Stream
+        SHA256Stream SHA512Stream (in libcrypt)
 
     [class variables:]
-	HashSize        size of returned hash value
-	ContextSize     (implementation) size of hash context
+        HashSize        size of returned hash value
+        ContextSize     (implementation) size of hash context
 
     [instance variables:]
-	hashContext     (implementation)
-			internal buffer for computation of the hash value
+        hashContext     (implementation)
+                        internal buffer for computation of the hash value
 "
 !
 
@@ -385,11 +386,11 @@
 !MD5Stream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/MD5Stream.st,v 1.24 2013-01-27 13:55:22 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/MD5Stream.st,v 1.25 2013-02-20 15:39:28 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/MD5Stream.st,v 1.24 2013-01-27 13:55:22 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/MD5Stream.st,v 1.25 2013-02-20 15:39:28 cg Exp $'
 ! !
 
 
--- a/Make.proto	Thu Feb 07 09:53:25 2013 +0100
+++ b/Make.proto	Tue Mar 05 18:10:13 2013 +0000
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic/Make.proto,v 1.258 2012-11-02 15:05:36 cg Exp $
+# $Header: /cvs/stx/stx/libbasic/Make.proto,v 1.259 2013-03-04 12:43:19 cg Exp $
 #
 # DO NOT EDIT
 # automagically generated from the projectDefinition: stx_libbasic.
@@ -112,7 +112,6 @@
 postMake:: cleanjunk
 
 prereq: $(REQUIRED_SUPPORT_DIRS)
-	cd ../librun && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
 
 
 
@@ -450,9 +449,10 @@
 $(OUTDIR)DirectoryStream.$(O) DirectoryStream.$(H): DirectoryStream.st $(INCLUDE_TOP)/stx/libbasic/FileStream.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStream.$(H) $(INCLUDE_TOP)/stx/libbasic/ReadWriteStream.$(H) $(INCLUDE_TOP)/stx/libbasic/WriteStream.$(H) $(INCLUDE_TOP)/stx/libbasic/PositionableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/PeekableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/Stream.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)InvalidEncodingError.$(O) InvalidEncodingError.$(H): InvalidEncodingError.st $(INCLUDE_TOP)/stx/libbasic/DecodingError.$(H) $(INCLUDE_TOP)/stx/libbasic/CharacterEncoderError.$(H) $(INCLUDE_TOP)/stx/libbasic/ConversionError.$(H) $(INCLUDE_TOP)/stx/libbasic/ProceedableError.$(H) $(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)PipeStream.$(O) PipeStream.$(H): PipeStream.st $(INCLUDE_TOP)/stx/libbasic/NonPositionableExternalStream.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStream.$(H) $(INCLUDE_TOP)/stx/libbasic/ReadWriteStream.$(H) $(INCLUDE_TOP)/stx/libbasic/WriteStream.$(H) $(INCLUDE_TOP)/stx/libbasic/PositionableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/PeekableStream.$(H) $(INCLUDE_TOP)/stx/libbasic/Stream.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)UnixFileDescriptorHandle.$(O) UnixFileDescriptorHandle.$(H): UnixFileDescriptorHandle.st $(STCHDR)
-$(OUTDIR)UnixFileHandle.$(O) UnixFileHandle.$(H): UnixFileHandle.st $(STCHDR)
-$(OUTDIR)UnixOperatingSystem.$(O) UnixOperatingSystem.$(H): UnixOperatingSystem.st $(STCHDR)
+$(OUTDIR)UnixFileDescriptorHandle.$(O) UnixFileDescriptorHandle.$(H): UnixFileDescriptorHandle.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)UnixFileHandle.$(O) UnixFileHandle.$(H): UnixFileHandle.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)UnixOperatingSystem.$(O) UnixOperatingSystem.$(H): UnixOperatingSystem.st $(INCLUDE_TOP)/stx/libbasic/AbstractOperatingSystem.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/OSFileHandle.$(H) $(INCLUDE_TOP)/stx/libbasic/OSHandle.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(STCHDR)
+$(OUTDIR)OSXOperatingSystem.$(O) OSXOperatingSystem.$(H): OSXOperatingSystem.st $(INCLUDE_TOP)/stx/libbasic/UnixOperatingSystem.$(H) $(INCLUDE_TOP)/stx/libbasic/AbstractOperatingSystem.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/Make.spec	Thu Feb 07 09:53:25 2013 +0100
+++ b/Make.spec	Tue Mar 05 18:10:13 2013 +0000
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic/Make.spec,v 1.141 2013-01-10 11:43:30 cg Exp $
+# $Header: /cvs/stx/stx/libbasic/Make.spec,v 1.142 2013-03-04 12:43:18 cg Exp $
 #
 # DO NOT EDIT
 # automagically generated from the projectDefinition: stx_libbasic.
@@ -58,6 +58,7 @@
 	UnixFileDescriptorHandle \
 	UnixFileHandle \
 	UnixOperatingSystem \
+	OSXOperatingSystem \
 
 COMMON_CLASSES= \
 	Autoload \
@@ -392,6 +393,12 @@
 	Win32OperatingSystem \
 	Win32Process \
 
+OSX_CLASSES= \
+	UnixFileDescriptorHandle \
+	UnixFileHandle \
+	UnixOperatingSystem \
+	OSXOperatingSystem \
+
 
 
 
@@ -404,6 +411,7 @@
     $(OUTDIR_SLASH)UnixFileDescriptorHandle.$(O) \
     $(OUTDIR_SLASH)UnixFileHandle.$(O) \
     $(OUTDIR_SLASH)UnixOperatingSystem.$(O) \
+    $(OUTDIR_SLASH)OSXOperatingSystem.$(O) \
 
 COMMON_OBJS= \
     $(OUTDIR_SLASH)Autoload.$(O) \
@@ -737,3 +745,12 @@
     $(OUTDIR_SLASH)Win32Handle.$(O) \
     $(OUTDIR_SLASH)Win32OperatingSystem.$(O) \
     $(OUTDIR_SLASH)Win32Process.$(O) \
+
+OSX_OBJS= \
+    $(OUTDIR_SLASH)UnixFileDescriptorHandle.$(O) \
+    $(OUTDIR_SLASH)UnixFileHandle.$(O) \
+    $(OUTDIR_SLASH)UnixOperatingSystem.$(O) \
+    $(OUTDIR_SLASH)OSXOperatingSystem.$(O) \
+
+
+
--- a/Makefile	Thu Feb 07 09:53:25 2013 +0100
+++ b/Makefile	Tue Mar 05 18:10:13 2013 +0000
@@ -15,5 +15,7 @@
 #only needed for the definition of $(TOP)
 include Make.proto
 
-makefile:
+makefile: mf
+
+mf:
 	$(TOP)/rules/stmkmf
--- a/MiniDebugger.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/MiniDebugger.st	Tue Mar 05 18:10:13 2013 +0000
@@ -14,7 +14,7 @@
 Object subclass:#MiniDebugger
 	instanceVariableNames:'tracing stepping traceBlock command commandArg commandCount
 		enteringContext dot nesting'
-	classVariableNames:'TheOneAndOnlyDebugger'
+	classVariableNames:'TheOneAndOnlyDebugger NotFirstTimeEntered'
 	poolDictionaries:''
 	category:'System-Debugging-Support'
 !
@@ -69,59 +69,64 @@
     StepInterruptPending := nil.
 
     Error handle:[:ex |
-	ex return
+        ex return
     ] do:[
-	thisContext isRecursive ifTrue:[
-	    "/ 'recursive error in debugger ignored' errorPrintCR.
-	    ^ self
-	].
-	aString printCR.
-	Processor notNil ifTrue:[
-	    active := Processor activeProcess.
-	    'process: id=' print. active id print.
-	    ' name=' print. active name printCR.
+        thisContext isRecursive ifTrue:[
+            "/ 'recursive error in debugger ignored' errorPrintCR.
+            ^ self
+        ].
+
+        aString printCR.
+        Processor notNil ifTrue:[
+            active := Processor activeProcess.
+            'process: id=' print. active id print.
+            ' name=' print. active name printCR.
 
-	    'context: ' print. aContext printString printCR.
-	    (con := aContext) notNil ifTrue:[
-		con := con sender.
-		' ......: ' print. con printString printCR.
-		[con notNil] whileTrue:[
-		    sender := con sender.
-		    (sender notNil and:[sender selector == con selector]) ifTrue:[
-			' ......: ' print. sender printString printCR.
-			' ......:  [** intermediate recursive contexts skipped **]' printCR.
-			[sender notNil
-			 and:[sender selector == con selector
-			 and:[sender method == con method]]] whileTrue:[
-			    con := sender.
-			    sender := con sender.
-			].
-		    ].
-		    con := sender.
-		    ' ......: ' print. con printString printCR.
-		]
-	    ]
-	].
+            'context: ' print. aContext printString printCR.
+            (con := aContext) notNil ifTrue:[
+                con := con sender.
+                ' ......: ' print. con printString printCR.
+                [con notNil] whileTrue:[
+                    sender := con sender.
+                    (sender notNil and:[sender selector == con selector]) ifTrue:[
+                        ' ......: ' print. sender printString printCR.
+                        ' ......:  [** intermediate recursive contexts skipped **]' printCR.
+                        [sender notNil
+                         and:[sender selector == con selector
+                         and:[sender method == con method]]] whileTrue:[
+                            con := sender.
+                            sender := con sender.
+                        ].
+                    ].
+                    con := sender.
+                    ' ......: ' print. con printString printCR.
+                ]
+            ]
+        ].
+        NotFirstTimeEntered ~~ true ifTrue:[
+            NotFirstTimeEntered := true.
+            'Type "c" to proceed, "?" for help' printCR.
+        ].
     ].
 
     OperatingSystem hasConsole ifFalse:[
-	Error handle:[:ex |
-	    ex return
-	] do:[
-	    self warn:('Unexpected error:\' , aString , '\\No MiniDebugger functionality available') withCRs .
-	].
+        Error handle:[:ex |
+            ex return
+        ] do:[
+            self warn:('Unexpected error:\' , aString , '\\No MiniDebugger functionality available') withCRs .
+        ].
 
-	Error handle:[:ex |
-	    'cannot raise Abort - exiting ...' errorPrintCR.
-	    Smalltalk exit.
-	] do:[
-	    AbortOperationRequest raise.
-	]
+        Error handle:[:ex |
+            'cannot raise Abort - exiting ...' errorPrintCR.
+            Smalltalk exit.
+        ] do:[
+            AbortOperationRequest raise.
+        ]
     ] ifTrue:[
-	self new enter:aContext mayProceed:mayProceed.
+        self new enter:aContext mayProceed:mayProceed.
     ].
     mayProceed ifFalse:[
-	AbortOperationRequest raise
+        AbortOperationRequest raise
     ].
     ^ nil
 
@@ -551,18 +556,26 @@
 !
 
 doCommand:cmd
-    "a single command; return true, if command loop should be finished"
+    "a single command; 
+     return true, if command loop should be finished"
 
-    |id proc|
+    |id proc bool|
 
     commandArg notEmpty ifTrue:[
         id := Number readFrom:commandArg onError:nil.
-
         id notNil ifTrue:[
             proc := Process allSubInstances detect:[:p | p id == id] ifNone:nil.
             proc == Processor activeProcess ifTrue:[
                 id := proc := nil
             ]
+        ] ifFalse:[
+            commandArg = '-' ifTrue:[
+                bool := false
+            ] ifFalse:[
+                commandArg = '+' ifTrue:[
+                    bool := true
+                ] 
+            ]
         ]
     ].
 
@@ -609,7 +622,11 @@
     ].
 
     (cmd == $P) ifTrue:[
-        self showProcesses.
+        self showProcesses:#all.
+        ^ false
+    ].
+    (cmd == $p) ifTrue:[
+        self showProcesses:#live.
         ^ false
     ].
 
@@ -644,6 +661,14 @@
         ^ false
     ].
 
+    (cmd == $h) ifTrue:[
+        (bool notNil) ifTrue:[
+            Smalltalk ignoreHalt:bool not.
+        ].
+        'halts are ' print. (Smalltalk ignoreHalt ifTrue:['disabled'] ifFalse:['enabled']) printCR.
+        ^ false
+    ].
+
     (cmd == $R) ifTrue:[
         proc notNil ifTrue:[
             proc resume.
@@ -790,7 +815,7 @@
             arg := arg copyWith:c.
             c := Character fromUser.
         ].
-        commandArg := arg copyFrom:2.
+        commandArg := (arg copyFrom:2) withoutSeparators.
         command := cmd.
         commandCount := cnt.
     ].
@@ -851,18 +876,29 @@
 !
 
 showProcesses
+    self showProcesses:#all
+!
+
+showProcesses:how
     |active|
 
     active := Processor activeProcess.
     'current id=' print. active id print. ' name=''' print. active name print. '''' printCR.
 
     Process allSubInstancesDo:[:p |
-	'proc id=' print. (p id printStringPaddedTo:5) print.
-	(p state printStringPaddedTo:10) print.
-	' pri=' print. (p priority printStringPaddedTo:2) print.
-	' creator:' print. (p creatorId printStringPaddedTo:5) print.
-	' name=''' print. p name print.
-	'''' printCR.
+        |doShow|
+
+        doShow := (how == #all).
+        doShow := doShow or:[ (how == #dead) and:[ p isDead ]].
+        doShow := doShow or:[ (how ~~ #dead) and:[ p isDead not ]].
+        doShow ifTrue:[
+            'proc id=' print. (p id printStringPaddedTo:5) print.
+            (p state printStringPaddedTo:10) print.
+            ' pri=' print. (p priority printStringPaddedTo:2) print.
+            ' creator:' print. (p creatorId printStringPaddedTo:5) print.
+            ' name=''' print. p name print.
+            '''' printCR.
+        ]
     ]
 
     "Modified: / 31.7.1998 / 16:30:19 / cg"
@@ -870,58 +906,59 @@
 
 showValidCommandHelp
         'valid commands:
-   c ..... continue
-   s ..... step
-   t ..... trace (continue with trace)
-   a [id]. abort (i.e. raise abort signal) in (current) process
-   T [id]. terminate (current) process
-   W [id]. stop (current) process
-   R [id]. resume (current) process
-   Q [id]. quick terminate (current) process - no unwinds or cleanup
+   c ...... continue
+   s ...... step
+   t ...... trace (continue with trace)
+   a [id]   abort (i.e. raise abort signal) in (current) process
+   T [id]   terminate (current) process
+   W [id]   stop (current) process
+   R [id]   resume (current) process
+   Q [id]   quick terminate (current) process - no unwinds or cleanup
 
-   P ..... list processes
-   w [id]. walkback (of process with id)
-   b [id]. full (VM) backtrace (more detail)
-   B ..... backtrace of all other processes
-
-   U ..... unwrap all traced/breakpointed methods
-   g ..... collect all garbage
-   g 2.... collect all garbage & reclaim symbols
-   g 3.... collect all garbage, reclaim symbols and compress
+   p ...... list processes ("P" for full list)
+   w [id]   walkback (of process with id)
+   b [id]   full (VM) backtrace (more detail)
+   B ...... backtrace of all other processes
 
-   S ..... save snapshot into crash.img
-   x ..... exit Smalltalk
-   X ..... exit Smalltalk (+core dump)
+   U ...... unwrap all traced/breakpointed methods
+   h [-/+]  disable/enable halts
+   g ...... collect all garbage
+   g 2 .... collect all garbage & reclaim symbols
+   g 3 .... collect all garbage, reclaim symbols and compress
+
+   S ...... save snapshot into crash.img
+   x ...... exit Smalltalk ("X" to exit with core dump)
 
-   . ..... print dot (the current context)
-   - ..... move dot up (sender)
-   + ..... move dot down (called context)
-   l ..... list method source around dot''s
-   L ..... list dot''s method source code
+   . ...... print dot (the current context)
+   - ...... move dot up (sender)
+   + ...... move dot down (called context)
+   l ...... list dot''s method source around PC ("L" for full list)
 
-   r ..... receiver (in dot) printString
-   i ..... inspect receiver (in dot)
-   I ..... interpreter (expression evaluator)
-   e expr  evaluate expression
+   r ...... receiver (in dot) printString
+   i ...... inspect receiver (in dot)
+   I ...... interpreter (expression evaluator)
+   e expr   evaluate expression
+'  errorPrintCR.
 
-   To repair a broken X-Connection, enter an interpreter and evaluate:
+   (XWorkstation notNil and:[ Screen default isKindOf:XWorkstation ]) ifTrue:[
+'   To repair a broken X-Connection, enter an interpreter (enter "I") and evaluate:
       Display := XWorkstation new.
-      Display initializeFor:''hostName:0''.
+      Display initializeFor:''localhost:0''.
       Display startDispatch.
       NewLauncher openOnDevice:Display.
       <empty line>
-   then enter ''c'' to continue; a NewLauncher should pop up soon.
-
+    then enter "c" to continue; a NewLauncher should pop up soon.
 '  errorPrintCR
+    ]
 ! !
 
 !MiniDebugger class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/MiniDebugger.st,v 1.80 2013-02-01 14:47:44 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/MiniDebugger.st,v 1.82 2013-02-23 11:14:32 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/MiniDebugger.st,v 1.80 2013-02-01 14:47:44 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/MiniDebugger.st,v 1.82 2013-02-23 11:14:32 cg Exp $'
 ! !
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/OSXOperatingSystem.st	Tue Mar 05 18:10:13 2013 +0000
@@ -0,0 +1,32 @@
+"{ Package: 'stx:libbasic' }"
+
+UnixOperatingSystem subclass:#OSXOperatingSystem
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'OS-Unix'
+!
+
+
+!OSXOperatingSystem class methodsFor:'file queries'!
+
+caseSensitiveFilenames
+    "return true, if the OS has caseSensitive file naming.
+     On MSDOS, this will return false;
+     on a real OS, we return true."
+
+    ^ false
+
+    "Modified: / 5.6.1998 / 18:35:18 / cg"
+! !
+
+!OSXOperatingSystem class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libbasic/OSXOperatingSystem.st,v 1.1 2013-03-04 12:34:14 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libbasic/OSXOperatingSystem.st,v 1.1 2013-03-04 12:34:14 cg Exp $'
+! !
+
--- a/Object.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/Object.st	Tue Mar 05 18:10:13 2013 +0000
@@ -504,6 +504,7 @@
     InfoPrinting := aBoolean
 ! !
 
+
 !Object class methodsFor:'queries'!
 
 isAbstract
@@ -526,6 +527,8 @@
 ! !
 
 
+
+
 !Object methodsFor:'Compatibility-Dolphin'!
 
 stbFixup: anSTBInFiler at: newObjectIndex
@@ -534,18 +537,6 @@
      may also override this method to effectively 'one way become' the receiver to some other object"
 
     ^ self
-!
-
-trigger:anAspect
-    self changed:anAspect
-!
-
-trigger:anAspect with:anArgument
-    self changed:anAspect with:anArgument
-!
-
-when:anAspect sendTo:anObject
-    self expressInterestIn:anAspect for:anObject sendBack:anAspect
 ! !
 
 !Object methodsFor:'Compatibility-GNU'!
@@ -564,12 +555,6 @@
     self printCR
 ! !
 
-!Object methodsFor:'Compatibility-ST/V'!
-
-triggerEvent:aSymbol
-    self changed:aSymbol
-! !
-
 !Object methodsFor:'Compatibility-ST80'!
 
 isMetaclass
@@ -699,6 +684,7 @@
     "
 ! !
 
+
 !Object methodsFor:'accessing'!
 
 _at:index
@@ -1677,6 +1663,7 @@
     "Modified: 6.7.1996 / 23:03:41 / cg"
 ! !
 
+
 !Object methodsFor:'attributes access'!
 
 objectAttributeAt:attributeKey
@@ -1800,6 +1787,7 @@
 ! !
 
 
+
 !Object methodsFor:'change & update'!
 
 broadcast:aSelectorSymbol
@@ -1989,6 +1977,7 @@
     ^ self
 ! !
 
+
 !Object methodsFor:'comparing'!
 
 = anObject
@@ -3052,8 +3041,8 @@
 
     <resource: #skipInDebuggersWalkBack>
 
-    "/ dont send #halt: here - ask cg why.
     Smalltalk ignoreHalt ifTrue:[^ self].
+    "/ don't send #halt: here - ask cg why.
     ^ HaltInterrupt raiseRequestWith:#halt
 
     "Modified: / 02-08-1999 / 17:00:29 / stefan"
@@ -3619,25 +3608,6 @@
 ! !
 
 
-!Object methodsFor:'dependents-st/v event simulation'!
-
-removeActionsForEvent:eventName
-    "remove ST/V-style event triggers."
-
-    self retractInterestsIn:eventName
-!
-
-removeAllActionsWithReceiver:anObject
-    "remove ST/V-style event triggers."
-
-    self retractInterestsFor:anObject
-!
-
-triggerEvent:eventSymbol withArguments:parameters
-    "perform ST/V-style event triggering."
-
-    self changed:eventSymbol with:parameters.
-! !
 
 !Object methodsFor:'displaying'!
 
@@ -7469,6 +7439,7 @@
     ^ self
 ! !
 
+
 !Object methodsFor:'secure message sending'!
 
 ?: selector
@@ -8071,6 +8042,7 @@
     "
 ! !
 
+
 !Object methodsFor:'synchronized evaluation'!
 
 freeSynchronizationSemaphore
@@ -9688,11 +9660,11 @@
 !Object class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.709 2013-01-24 16:26:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.711 2013-03-04 14:30:05 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.709 2013-01-24 16:26:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.711 2013-03-04 14:30:05 cg Exp $'
 !
 
 version_SVN
--- a/ProcessorScheduler.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/ProcessorScheduler.st	Tue Mar 05 18:10:13 2013 +0000
@@ -592,7 +592,7 @@
      Idle blocks are evaluated whenever no other process is runnable,
      and no events are pending.
      Use of idle blocks is not recommended, use a low priority processes
-     instead, which has the same effect. Idle blcoks are still included
+     instead, which has the same effect. Idle blocks are still included
      to support background actions in pure-event systems, where no processes
      are available.
      ATTENTION: Support for idle-blocks may vanish."
@@ -601,7 +601,7 @@
 
     wasBlocked := OperatingSystem blockInterrupts.
     idleActions isNil ifTrue:[
-	idleActions := OrderedCollection new
+        idleActions := OrderedCollection new
     ].
     idleActions add:aBlock.
     wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
@@ -1754,20 +1754,31 @@
 !
 
 makeRunnable:aProcess
-    "set aProcess runnable - but do not reschedule."
-
-    |l pri wasBlocked|
+    "set aProcess runnable - but do not reschedule.
+     Answer true, if a reschedule is required, false if not."
+
+    |l s pri wasBlocked|
 
     "ignore, if process is already dead"
-    (aProcess isNil or:[aProcess id isNil]) ifTrue:[^ self].
-
+    (aProcess isNil or:[aProcess id isNil]) ifTrue:[^ false].
+
+    s := aProcess state.
+    s == #osWait ifTrue:[
+        'Processor [warning]: bad resume: #osWait' errorPrintCR.
+        "/ MiniDebugger enterWithMessage:'bad resume: state osWait'.
+        ^ false.
+    ].
+    s == #stopped ifTrue:[
+        "by definition, stopped processes cannot be resumed"
+        ^ false.
+    ].
 
     aProcess == activeProcess ifTrue:[
         "special handling for waiting schedulers"
         aProcess == scheduler ifTrue:[
             suspendScheduler := false.
         ].
-        ^ self
+        ^ false
     ].
 
     wasBlocked := OperatingSystem blockInterrupts.
@@ -1779,7 +1790,7 @@
     l notNil ifTrue:[
         (l identityIndexOf:aProcess) ~~ 0 ifTrue:[
             wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-            ^ self
+            ^ false
         ]
     ] ifFalse:[
         l := LinkedList new.
@@ -1789,11 +1800,16 @@
     aProcess state:#run.
     wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
 
+    pri > currentPriority ifTrue:[
+        "must reschedule"
+        ^ true.
+    ].
 
     timeSliceNeededSemaphore notNil ifTrue:[
         "/ tell timeslicer, that some work might be needed...
         timeSliceNeededSemaphore signalIf.
-    ]       
+    ].
+    ^ false.
 
     "Modified: / 29.7.1996 / 12:07:37 / cg"
     "Created: / 4.2.1998 / 20:58:28 / cg"
@@ -1822,65 +1838,10 @@
     "set aProcess runnable -
      if its prio is higher than the currently running prio, switch to it."
 
-    |l pri wasBlocked s|
-
-    "ignore, if process is already dead"
-    (aProcess isNil or:[aProcess id isNil]) ifTrue:[^ self].
-
-    (s := aProcess state) == #osWait ifTrue:[
-        'Processor [warning]: bad resume: #osWait' errorPrintCR.
-        "/ MiniDebugger enterWithMessage:'bad resume: state osWait'.
-        ^ self.
-    ].
-    s == #stopped ifTrue:[
-        "by definition, stopped processes cannot be resumed"
-        ^ self.
-    ].
-
-    aProcess == activeProcess ifTrue:[
-        "special handling for waiting schedulers"
-        aProcess == scheduler ifTrue:[
-            suspendScheduler := false.
-        ].
-        ^ self
+    (self makeRunnable:aProcess) ifTrue:[
+        "aProcess prio is higher; immediately transfer control to it"
+        self threadSwitch:aProcess.
     ].
-
-    wasBlocked := OperatingSystem blockInterrupts.
-
-    pri := aProcess priority.
-
-    l := quiescentProcessLists at:pri.
-    "if already running, ignore"
-    l notNil ifTrue:[
-        (l identityIndexOf:aProcess) ~~ 0 ifTrue:[
-            wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-            ^ self
-        ]
-    ] ifFalse:[
-        l := LinkedList new.
-        quiescentProcessLists at:pri put:l.
-    ].
-    l addLast:aProcess.
-
-    (pri > currentPriority) ifTrue:[
-        "
-         its prio is higher; immediately transfer control to it
-        "
-        self threadSwitch:aProcess
-    ] ifFalse:[
-        "
-         its prio is lower; it will have to wait for a while ...
-        "
-        aProcess state:#run.
-        timeSliceNeededSemaphore notNil ifTrue:[
-            "/ tell timeslicer, that some work might be needed...
-            timeSliceNeededSemaphore signalIf.
-        ]
-    ].
-    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-
-    "Modified: / 24-08-1998 / 18:28:42 / cg"
-    "Modified: / 03-08-2004 / 19:01:47 / stefan"
 !
 
 resumeForSingleSend:aProcess
@@ -2227,7 +2188,7 @@
 
     timeSliceProcess notNil ifTrue: [^ self].
 
-    timeSliceNeededSemaphore := Semaphore new.
+    timeSliceNeededSemaphore := Semaphore new name:'timeSlice needed'.
 
     timeSliceProcess := [
         [
@@ -2940,9 +2901,9 @@
 
 timeoutHandlerProcessLoop
     "The timeoutHandlerProcess does nothing but wait.
-     It exists only, so that timeout blocks may be executed its context."
-
-    Semaphore new wait.
+     It exists only, so that timeout blocks may be executed in its context."
+
+    (Semaphore new name:'timeoutHandler') wait.
 ! !
 
 !ProcessorScheduler methodsFor:'wait hooks'!
@@ -3395,11 +3356,12 @@
 !ProcessorScheduler class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.262 2012-10-26 11:18:55 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.265 2013-02-08 21:33:05 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.262 2012-10-26 11:18:55 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.265 2013-02-08 21:33:05 stefan Exp $'
 ! !
 
+
 ProcessorScheduler initialize!
--- a/ProjectDefinition.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/ProjectDefinition.st	Tue Mar 05 18:10:13 2013 +0000
@@ -149,7 +149,7 @@
 definitionClassForPackage: aPackageID createIfAbsent: doCreateIfAbsent projectType:typeOrNil
     |packageDefinitionClassName class|
 
-    packageDefinitionClassName := ProjectDefinition initialClassNameForDefinitionOf:aPackageID.
+    packageDefinitionClassName := self initialClassNameForDefinitionOf:aPackageID.
     class := Smalltalk classNamed:packageDefinitionClassName.
     class isNil ifTrue:[
         doCreateIfAbsent ifTrue:[
@@ -1144,11 +1144,13 @@
 !ProjectDefinition class methodsFor:'class initialization'!
 
 initialize
-    LibraryType := #'Library'.
-    GUIApplicationType := #'GUI-Application'.
-    NonGUIApplicationType := #'NonGUI-Application'.
-    AccessLock := Semaphore forMutualExclusion.
-    Verbose := false.
+    AccessLock isNil ifTrue:[
+        LibraryType := #Library.
+        GUIApplicationType := #'GUI-Application'.
+        NonGUIApplicationType := #'NonGUI-Application'.
+        AccessLock := Semaphore forMutualExclusion name:'ProjectDefinition Lock'.
+        Verbose := false.
+    ].
 
     "
      self initialize
@@ -1481,9 +1483,11 @@
 
     |preRequisites|
 
-    preRequisites := self preRequisites asSet.
-    preRequisites removeAllFoundIn:self excludedFromPreRequisites.
-    preRequisites remove:self package ifAbsent:[].
+    preRequisites := self preRequisites asOrderedSet.    "prerequisite order matters"
+    preRequisites 
+        addAll:self includedInPreRequisites;
+        removeAllFoundIn:self excludedFromPreRequisites;
+        remove:self package ifAbsent:[].
 
     ^ preRequisites
 !
@@ -1602,9 +1606,11 @@
         value: self preRequisites_code
         value: 'description'.
 
-    aTwoArgBlock
-        value: self excludedFromPreRequisites_code
-        value: 'description'.
+    ((self class includesSelector:#excludedFromPreRequisites) not or:[ignoreOldDefinition]) ifTrue:[
+        aTwoArgBlock
+            value: self excludedFromPreRequisites_code
+            value: 'description'.
+    ].
 
     (self monticelloPackageName notNil and:[self respondsTo:#monticelloTimestamps_code]) ifTrue:[
         aTwoArgBlock
@@ -1678,28 +1684,12 @@
 
     |preRequisites searchedPreRequisites importantReason|
 
-    "maybe, some prerequisites have been added manually - keep them
-     The drawback of this - a preRequisite will never go away, even if it is no longer used"
-
-    preRequisites := self preRequisites asSet.
-
     searchedPreRequisites := self searchForPreRequisites.
-    preRequisites addAll: (searchedPreRequisites keys).
-
-    self isApplicationDefinition ifTrue:[
-        preRequisites add:#'stx:libcomp'.
-        self isGUIApplication ifTrue:[
-            preRequisites add:#'stx:libbasic2'.
-            preRequisites add:#'stx:libview'.
-            preRequisites add:#'stx:libview2'.
-            preRequisites add:#'stx:libwidg'.
-            preRequisites add:#'stx:libwidg2'.
-            preRequisites add:#'stx:libui'.
-        ].
-    ].
-
-    preRequisites removeAllFoundIn:self excludedFromPreRequisites.
-    preRequisites remove:self package ifAbsent:[].
+    preRequisites := Set new
+        addAll: searchedPreRequisites keys;
+        removeAllFoundIn:self excludedFromPreRequisites;
+        remove:self package ifAbsent:[];
+        yourself.
 
     ^ String streamContents:[:s |
         s nextPutLine:'preRequisites'.
@@ -1707,8 +1697,9 @@
         s nextPutLine:'     This list can be maintained manually or (better) generated and'.
         s nextPutLine:'     updated by scanning the superclass hierarchies and looking for'.
         s nextPutLine:'     global variable accesses. (the browser has a menu function for that)'.
-        s nextPutLine:'     Howevery, often too much is found, and you may want to explicitely'.
-        s nextPutLine:'     exclude individual packages in the #excludedFromPrerequisites method."'.
+        s nextPutLine:'     However, often too much is found, and you may want to explicitely'.
+        s nextPutLine:'     exclude individual packages in the #excludedFromPreRequisites method.'.
+        s nextPutLine:'     If you have explicit preqrequisites, define them in the #includedInPreRequisites method."'.
         s nextPutLine:''.
         s nextPutLine:'    ^ #('.
         preRequisites asSortedCollection do:[:eachPackageID |
@@ -1906,6 +1897,15 @@
     "Modified: / 17-08-2006 / 19:49:40 / cg"
 !
 
+includedInPreRequisites
+    "list packages which are to be explicitely included in the prerequisites list,
+     even if not found by the automatic search.
+     Redefine this, if classes from other packages are referred to via reflection
+     or by constructing names dynamically (i.e. the search cannot find it)"
+
+    ^ #()
+!
+
 preRequisites
     "list packages which are required as a prerequisite. This method is generated automatically,
      by searching along the inheritance chain of all of my classes.
@@ -5938,37 +5938,25 @@
     "load some packages (at least the projectDefinitions and their extensions).
      If asAutoloaded == true, classes will be only installed as autoloaded."
 
-    |packagesToLoad packagesBefore|
-
-    packagesToLoad := aListOfPackages
-                            reject:[:packageID |
-                                |cls|
-
-                                cls := ProjectDefinition definitionClassForPackage:packageID.
-                                cls notNil and:[cls projectIsLoaded]
-                            ].
-    packagesToLoad isEmpty ifTrue:[^ self].
-
-    packagesBefore := PackagesBeingLoaded copy.
     PackagesBeingLoaded isNil ifTrue:[
         PackagesBeingLoaded := Set new
     ].
-    [
-        Class withoutUpdatingChangesDo:[
-            packagesToLoad do:[:eachPackageID |
-                |cls|
-
-                cls := ProjectDefinition definitionClassForPackage:eachPackageID.
-                (cls isNil or:[cls projectIsLoaded not]) ifTrue:[                        
-                    (PackagesBeingLoaded includes:eachPackageID) ifFalse:[
-                        PackagesBeingLoaded add:eachPackageID.
+    Class withoutUpdatingChangesDo:[
+        aListOfPackages do:[:eachPackageID |
+            |cls|
+
+            cls := self definitionClassForPackage:eachPackageID.
+            (cls isNil or:[cls isLoaded not or:[cls projectIsLoaded not]]) ifTrue:[                        
+                (PackagesBeingLoaded includes:eachPackageID) ifFalse:[
+                    PackagesBeingLoaded add:eachPackageID.
+                    [
                         Smalltalk loadPackage:eachPackageID asAutoloaded:asAutoloaded.
+                    ] ensure:[
+                        PackagesBeingLoaded remove:eachPackageID ifAbsent:[].
                     ]
                 ]
-            ].
+            ]
         ].
-    ] ensure:[
-        PackagesBeingLoaded := packagesBefore.
     ].
 
     "Modified: / 09-12-2010 / 12:36:17 / cg"
@@ -6950,11 +6938,11 @@
 !ProjectDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.409 2013-02-05 14:37:23 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.420 2013-03-01 21:35:18 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.409 2013-02-05 14:37:23 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.420 2013-03-01 21:35:18 stefan Exp $'
 !
 
 version_SVN
--- a/RecursionLock.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/RecursionLock.st	Tue Mar 05 18:10:13 2013 +0000
@@ -231,33 +231,7 @@
     "like critical:, but do not block if the lock cannot be aquired.
      Instead, return the value of the second argument, blockingBlock."
 
-    |active wasBlocked result|
-
-    active := Processor activeProcess.
-    "I already have the lock"
-    process == active ifTrue:[
-        ^ aBlock value
-    ].
-
-    wasBlocked := OperatingSystem blockInterrupts.
-
-    process notNil ifTrue:[
-        wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-        ^ blockingBlock value
-    ].
-
-    [
-        process := active.
-        wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-        result := aBlock value
-    ] ensure:[
-        process := nil.
-        sema signalIf.
-    ].
-    ^ result
-
-    "Created: / 08-06-2007 / 13:23:03 / cg"
-    "Modified: / 09-06-2007 / 14:22:47 / cg"
+    ^ self critical:aBlock timeoutMs:0 ifBlocking:blockingBlock.
 !
 
 critical:aBlock timeoutMs:timeoutMs ifBlocking:blockingBlock
@@ -290,6 +264,10 @@
     "/
     wasBlocked := OperatingSystem blockInterrupts.
     [
+        (process notNil and:[process isDead]) ifTrue:[
+            'RecursionLock [warning]: cleanup lock from dead process' infoPrintCR.
+            process := nil. sema signal.
+        ].
         gotSema := sema waitWithTimeoutMs:timeoutMs.
         gotSema notNil ifTrue:[
             process := active.
@@ -322,10 +300,10 @@
 !RecursionLock class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/RecursionLock.st,v 1.37 2013-01-23 22:28:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/RecursionLock.st,v 1.38 2013-02-08 21:13:20 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/RecursionLock.st,v 1.37 2013-01-23 22:28:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/RecursionLock.st,v 1.38 2013-02-08 21:13:20 stefan Exp $'
 ! !
 
--- a/SHA1Stream.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/SHA1Stream.st	Tue Mar 05 18:10:13 2013 +0000
@@ -100,7 +100,7 @@
     unsigned long a, b, c, d, e;
     typedef union {
 	unsigned char c[64];
-	unsigned long l[16];
+	unsigned int32 /* long */ l[16];
     } CHAR64LONG16;
     CHAR64LONG16* block;
 #ifdef SHA1HANDSOFF
@@ -308,28 +308,29 @@
     This may be used as checksum or for generating cryptographic signatures.
 
     Notice (2005):
-	Be aware that SHA-1 is considered broken and may not be appropriate in some applications.
-	Especially it should no longer be used for security stuff.
+        Be aware that SHA-1 is considered broken and may not be appropriate in some applications.
+        Especially it should no longer be used for security stuff.
 
     performance: roughly
-	   47400 Kb/s on a 2Ghz Duo
-	    9580 Kb/s on a 400Mhz PIII
-	    3970 Kb/s on a 300Mhz Sparc
+          120400 Kb/s on a 2.5Ghz 64X2 Athlon 4800+ (64bit)
+           47400 Kb/s on a 2Ghz Duo (old measure)
+            9580 Kb/s on a 400Mhz PIII
+            3970 Kb/s on a 300Mhz Sparc
 
     [author:]
-	Stefan Vogel
+        Stefan Vogel
 
     [see also:]
-	MD5Stream
-	SHA256Stream SHA512Stream (in libcrypt)
+        MD5Stream
+        SHA256Stream SHA512Stream (in libcrypt)
 
     [class variables:]
-	HashSize        size of returned hash value
-	ContextSize     (implementation) size of hash context
+        HashSize        size of returned hash value
+        ContextSize     (implementation) size of hash context
 
     [instance variables:]
-	hashContext     (implementation)
-			internal buffer for computation of the hash value
+        hashContext     (implementation)
+                        internal buffer for computation of the hash value
 "
 !
 
@@ -486,15 +487,18 @@
     digest := ByteArray new:HashSize.
 
 %{
-    if (__isByteArray(__INST(hashContext)) &&
-	__byteArraySize(__INST(hashContext)) == sizeof(SHA1_CTX) &&
+    OBJ hcon;
+
+    hcon = __INST(hashContext);
+    if (__isByteArray(hcon) &&
+	__byteArraySize(hcon) == sizeof(SHA1_CTX) &&
 	__isByteArray(digest) &&
 	__byteArraySize(digest) == 20
     ) {
-	SHA1_CTX *ctx = (SHA1_CTX *)__ByteArrayInstPtr(__INST(hashContext))->ba_element;
+	SHA1_CTX *ctx = (SHA1_CTX *)(__ByteArrayInstPtr(hcon)->ba_element);
 	SHA1_CTX copyContext;
 
-	memcpy(&copyContext, ctx, sizeof(copyContext));
+	memcpy(&copyContext, ctx, sizeof(SHA1_CTX));
 	SHA1Final(__ByteArrayInstPtr(digest)->ba_element, &copyContext);
 	RETURN(digest);
     }
@@ -578,11 +582,11 @@
 !SHA1Stream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/SHA1Stream.st,v 1.33 2013-01-27 13:55:22 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/SHA1Stream.st,v 1.36 2013-02-21 10:44:11 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/SHA1Stream.st,v 1.33 2013-01-27 13:55:22 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/SHA1Stream.st,v 1.36 2013-02-21 10:44:11 cg Exp $'
 ! !
 
 
--- a/Semaphore.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/Semaphore.st	Tue Mar 05 18:10:13 2013 +0000
@@ -393,7 +393,10 @@
         waitingProcesses := Array with:aProcess
     ] ifFalse:[
         waitingProcesses isArray ifTrue:[
-            waitingProcesses := OrderedCollection withAll:waitingProcesses.
+            "add 2 to reserve space for additional waiters"
+            waitingProcesses := (OrderedCollection new:waitingProcesses size + 2) 
+                                    addAll:waitingProcesses; 
+                                    yourself.
         ].
         waitingProcesses add:aProcess.
     ].
@@ -439,29 +442,31 @@
      NOTE: Must be called when known that waitingProcesses is nonNil and
            also with blocked interrupts"
 
-    |processes anyDead|
+    |processes anyDead currentPriority needsReschedule|
 
     processes := waitingProcesses.
 "/ do not set to nil - a waiting process may be suspended and will not be resumed...
 "/    waitingProcesses := nil.
 
-    "/ todo: resume by priority; higher first.
+    currentPriority := Processor currentPriority.
+    needsReschedule := false.
     anyDead := false.
     processes do:[:eachProcess | 
         (eachProcess isNil or:[eachProcess isDead]) ifTrue:[
             Transcript show:'oops: a dead process: '; showCR:eachProcess.
             anyDead := true.
         ] ifFalse:[
-            Processor resume:eachProcess
+            (Processor makeRunnable:eachProcess) ifTrue:[
+                needsReschedule := true.
+            ].
         ]
     ].
     anyDead ifTrue:[
-        [
-            processes := processes reject:[:p | p isNil or:[p isDead]]
-        ] valueUninterruptably.
+        "interrupts are already blocked by sender"
+        waitingProcesses := processes reject:[:p | p isNil or:[p isDead]]
     ].
 
-    "Modified: / 06-11-2012 / 14:27:09 / anwild"
+    ^ needsReschedule.
 ! !
 
 !Semaphore methodsFor:'private-accessing'!
@@ -573,17 +578,22 @@
     "waking up (the first) waiter.
      Q: should this be the highest prio waiter ?"
 
-    |wasBlocked|
+    |wasBlocked needsReschedule|
 
+    needsReschedule := false.
     wasBlocked := OperatingSystem blockInterrupts.
     [
         count := count + 1.
         waitingProcesses notNil ifTrue:[
-            self wakeupWaiters.
+            needsReschedule := self wakeupWaiters.
         ].
     ] ensure:[
         wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-    ]
+    ].
+    needsReschedule ifTrue:[
+        "now, schedule the highest priority process"
+        Processor reschedule.
+    ].
 
     "Modified: / 4.2.1998 / 21:01:07 / cg"
 !
@@ -593,29 +603,26 @@
      This can be used for process synchronization, if multiple processes are
      waiting for a common event."
 
-    |wasBlocked|
+    |wasBlocked needsReschedule|
 
     waitingProcesses notNil ifTrue:[
+        needsReschedule := false.
         wasBlocked := OperatingSystem blockInterrupts.
         [
-            |processes|
-
             "first, make them all runnable, but do not schedule
              (in case one has higher prio and goes into a wait immediately again.)"
-
-            processes := waitingProcesses.
-            processes size ~~ 0 ifTrue:[
-                waitingProcesses := nil.
-                processes do:[:eachWaitingProcess|
-                    count := count + 1.
-                    Processor makeRunnable:eachWaitingProcess.
-                ]. 
+            waitingProcesses size ~~ 0 ifTrue:[
+                needsReschedule := self wakeupWaiters.
+                "wakeupWaites may have removed dead processes from waitingProcesses!!"
+                count := count + waitingProcesses size.
             ].
         ] ensure:[
             wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
         ].
-        "now, schedule the highest priority process"
-        Processor reschedule
+        needsReschedule ifTrue:[
+            "now, schedule the highest priority process"
+            Processor reschedule.
+        ].
     ]
 
     "Modified: / 5.2.1998 / 10:40:26 / cg"
@@ -646,9 +653,10 @@
     "wakeup waiters - but only once.
      I.e. if the semaphore has already been signaled, this is ignored."
 
-    |wasBlocked|
+    |wasBlocked needsReschedule|
 
     count <= 0 ifTrue:[
+        needsReschedule := false.
         wasBlocked := OperatingSystem blockInterrupts.
         "/ check again - now interrupts are blocked.
         [
@@ -656,14 +664,18 @@
                 count := count + 1.
                 count == 1 ifTrue:[
                     waitingProcesses notNil ifTrue:[
-                        self wakeupWaiters.
+                        needsReschedule := self wakeupWaiters.
                     ].
                 ].
             ].
         ] ensure:[
             wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
-        ]
-    ]
+        ].
+        needsReschedule ifTrue:[
+            "now, schedule the highest priority process"
+            Processor reschedule.
+        ].
+    ].
 
     "Modified: 28.2.1996 / 21:24:08 / cg"
 ! !
@@ -716,7 +728,7 @@
     "evaluate aBlock as a critical region; the receiver must be
      created using Semaphore>>forMutualExclusion"
 
-    |retVal gotSema wasBlocked|
+    |retVal gotSema wasBlocked needsReschedule|
 
     "/ inlined common case - ugly kludge but helpful
     wasBlocked := OperatingSystem blockInterrupts.
@@ -730,14 +742,19 @@
         retVal := aBlock ifCurtailed:[ self signal ].
 
         OperatingSystem blockInterrupts.
+        needsReschedule := false.
         [
             count := count + 1.
             waitingProcesses notNil ifTrue:[
-                self wakeupWaiters.
+                needsReschedule := self wakeupWaiters.
             ].
         ] ensure:[
             wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
         ].
+        needsReschedule ifTrue:[
+            "now, schedule the highest priority process"
+            Processor reschedule.
+        ].
         ^ retVal.
     ].
     wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
@@ -918,7 +935,11 @@
             now := OperatingSystem getMillisecondTime.
             endTime := OperatingSystem millisecondTimeAdd:now and:milliSeconds.
 
-            timeoutBlock := [timeoutOccured := true. timeoutBlock:= nil. Processor resume:activeProcess].
+            timeoutBlock := [
+                    timeoutOccured := true. 
+                    timeoutBlock:= nil. 
+                    Processor resume:activeProcess.
+                ].
             Processor addTimedBlock:timeoutBlock for:activeProcess atMilliseconds:endTime.
         ].
 
@@ -977,9 +998,10 @@
 !Semaphore class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Semaphore.st,v 1.88 2012-11-26 21:48:36 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Semaphore.st,v 1.92 2013-02-08 16:21:33 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Semaphore.st,v 1.88 2012-11-26 21:48:36 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Semaphore.st,v 1.92 2013-02-08 16:21:33 stefan Exp $'
 ! !
+
--- a/SemaphoreSet.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/SemaphoreSet.st	Tue Mar 05 18:10:13 2013 +0000
@@ -261,7 +261,11 @@
                 now := OperatingSystem getMillisecondTime.
                 endTime := OperatingSystem millisecondTimeAdd:now and:milliSeconds.
 
-                timeoutBlock := [timeoutOccured := true. timeoutBlock := nil. Processor resume:currentProcess].
+                timeoutBlock := [
+                        timeoutOccured := true. 
+                        timeoutBlock := nil. 
+                        Processor resume:currentProcess.
+                    ].
                 Processor addTimedBlock:timeoutBlock for:currentProcess atMilliseconds:endTime.
             ].
             [
@@ -306,9 +310,10 @@
 !SemaphoreSet class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/SemaphoreSet.st,v 1.19 2010-02-05 12:58:13 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/SemaphoreSet.st,v 1.20 2013-02-08 16:08:28 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/SemaphoreSet.st,v 1.19 2010-02-05 12:58:13 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/SemaphoreSet.st,v 1.20 2013-02-08 16:08:28 stefan Exp $'
 ! !
+
--- a/SmallInteger.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/SmallInteger.st	Tue Mar 05 18:10:13 2013 +0000
@@ -548,10 +548,11 @@
     "return the integer part of the quotient of the receivers value
      and the arguments value. The result is truncated toward negative infinity
      and negative, if the operands signs differ.
-     Be careful with negative results: 9 // 4 = 2,
-     while -9 // 4 = -3.
+     Be careful with negative results: 9 // 4 -> 2, while -9 // 4 -> -3.
+     Especially surprising:     
+        -1 // 10 -> -1 (because -(1/10) is truncated towards next smaller integer, which is -1.
      The following is always true:
-	(receiver // aNumber) * aNumber + (receiver \\ aNUmber) = receiver
+        (receiver // aNumber) * aNumber + (receiver \\ aNUmber) = receiver
      See #quo: which returns -2 in the latter."
 
 %{  /* NOCONTEXT */
@@ -569,59 +570,59 @@
     INT dividend, divisor, rslt;
 
     if (__isSmallInteger(aNumber)) {
-	divisor = __intVal(aNumber);
-	if (divisor != 0) {
-	    dividend = __intVal(self);
-	    rslt = dividend / divisor;
-	    /*
-	     * Optimized to speed up positive result
-	     */
-	    if (rslt <= 0) {
-		if (rslt == 0) {
-		    if ((dividend ^ divisor) < 0) {
-			/*
-			 * result (negative) has been truncated toward 0.
-			 * Return -1, because we truncate toward negative inf.
-			 */
-			 rslt = -1;
-		    }
-		} else {
-		    /*
-		     * If result (negative) has been truncated toward 0,
-		     * subtract 1, because we truncate toward negative inf.
-		     */
-		    if (divisor > 0) {
-			if (rslt * divisor > dividend) {
-			    rslt--;
-			}
-		    } else {
-			if (rslt * divisor < dividend) {
-			    rslt--;
-			}
-		    }
-		}
-	    }
-	    RETURN ( __mkSmallInteger(rslt) );
-	}
+        divisor = __intVal(aNumber);
+        if (divisor != 0) {
+            dividend = __intVal(self);
+            rslt = dividend / divisor;
+            /*
+             * Optimized to speed up positive result
+             */
+            if (rslt <= 0) {
+                if (rslt == 0) {
+                    if ((dividend ^ divisor) < 0) {
+                        /*
+                         * result (negative) has been truncated toward 0.
+                         * Return -1, because we truncate toward negative inf.
+                         */
+                         rslt = -1;
+                    }
+                } else {
+                    /*
+                     * If result (negative) has been truncated toward 0,
+                     * subtract 1, because we truncate toward negative inf.
+                     */
+                    if (divisor > 0) {
+                        if (rslt * divisor > dividend) {
+                            rslt--;
+                        }
+                    } else {
+                        if (rslt * divisor < dividend) {
+                            rslt--;
+                        }
+                    }
+                }
+            }
+            RETURN ( __mkSmallInteger(rslt) );
+        }
     } else {
-	if (__isFraction(aNumber)) {
-	    OBJ t;
-	    INT num, den;
-
-	    t = __FractionInstPtr(aNumber)->f_numerator;
-	    if (__isSmallInteger(t)) {
-		num = __intVal(t);
-		t = __FractionInstPtr(aNumber)->f_denominator;
-		if (__isSmallInteger(t)) {
-		    den = __intVal(t);
-		    RETURN ( __mkSmallInteger(__intVal(self) * den / num ));
-		}
-	    }
-	}
+        if (__isFraction(aNumber)) {
+            OBJ t;
+            INT num, den;
+
+            t = __FractionInstPtr(aNumber)->f_numerator;
+            if (__isSmallInteger(t)) {
+                num = __intVal(t);
+                t = __FractionInstPtr(aNumber)->f_denominator;
+                if (__isSmallInteger(t)) {
+                    den = __intVal(t);
+                    RETURN ( __mkSmallInteger(__intVal(self) * den / num ));
+                }
+            }
+        }
     }
 %}.
     (aNumber = 0) ifTrue:[
-	^ ZeroDivide raiseRequestWith:thisContext.
+        ^ ZeroDivide raiseRequestWith:thisContext.
     ].
     ^ aNumber integerQuotientFromInteger:self
 
@@ -4163,10 +4164,10 @@
 !SmallInteger class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.201 2013-02-05 16:01:31 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.202 2013-02-22 09:23:20 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.201 2013-02-05 16:01:31 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.202 2013-02-22 09:23:20 cg Exp $'
 ! !
 
--- a/Smalltalk.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/Smalltalk.st	Tue Mar 05 18:10:13 2013 +0000
@@ -219,6 +219,7 @@
 "
 ! !
 
+
 !Smalltalk class methodsFor:'initialization'!
 
 basicInitializeSystem
@@ -382,6 +383,12 @@
     ObjectMemory signalInterruptHandler:self.
     ObjectMemory recursionInterruptHandler:self.
 
+    OperatingSystem isOSXlike ifTrue:[
+        "/ OSX sends SIGABRT for NSExceptions
+        OperatingSystem operatingSystemSignal:(OperatingSystem sigABRT) install:NSException.
+        OperatingSystem enableAbortInterrupts.
+    ].
+
     "
      Smalltalk initInterrupts
     "
@@ -660,6 +667,7 @@
     Stdout reOpen. Stderr reOpen. Stdin reOpen.
 ! !
 
+
 !Smalltalk class methodsFor:'Compatibility-Squeak'!
 
 at:aKey ifAbsentPut:aBlock
@@ -792,6 +800,7 @@
     "
 ! !
 
+
 !Smalltalk class methodsFor:'Compatibility-V''Age'!
 
 allClassesImplementing:aSelector
@@ -826,6 +835,7 @@
     "Created: / 07-02-2012 / 15:57:05 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'Compatibility-VW5.4'!
 
 defineClass:nameSymbol superclass:superclass indexedType:indexed private:private instanceVariableNames:instVars classInstanceVariableNames:classInstVars imports:imports category:category
@@ -870,6 +880,7 @@
     ^ newNameSpace
 ! !
 
+
 !Smalltalk class methodsFor:'accessing'!
 
 associationAt:aKey
@@ -1176,6 +1187,7 @@
     "
 ! !
 
+
 !Smalltalk class methodsFor:'class management'!
 
 changeCategoryOf:aClass to:newCategory
@@ -1591,6 +1603,7 @@
     "Modified: / 05-09-2006 / 12:52:25 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'copying'!
 
 deepCopy
@@ -1626,6 +1639,7 @@
     "Modified: 18.5.1996 / 12:13:42 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'debugging ST/X'!
 
 compileTrace:aBoolean
@@ -1736,6 +1750,7 @@
     "Modified: / 19-01-2012 / 10:15:35 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'enumerating'!
 
 allBehaviorsDo:aBlock
@@ -2061,6 +2076,7 @@
     ]
 ! !
 
+
 !Smalltalk class methodsFor:'message control'!
 
 silentLoading
@@ -2096,6 +2112,7 @@
     aBlock ensure:[ SilentLoading := sav ].
 ! !
 
+
 !Smalltalk class methodsFor:'misc accessing'!
 
 beHeadless:aBoolean
@@ -2118,6 +2135,7 @@
     StandAlone := aBoolean
 ! !
 
+
 !Smalltalk class methodsFor:'private-system management-packages'!
 
 knownPackages
@@ -2439,7 +2457,9 @@
                 ].
             ].
             projectDefinitionClass := ProjectDefinition definitionClassForPackage:aPackageString.
-            projectDefinitionClass loadDirectory:(projectDefinitionFilename asFilename directory)
+            projectDefinitionClass notNil ifTrue:[
+                projectDefinitionClass loadDirectory:(projectDefinitionFilename asFilename directory)
+            ]
         ].
     ].
 
@@ -2674,6 +2694,7 @@
     "Modified: / 04-11-2011 / 13:43:29 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'queries'!
 
 allClasses
@@ -3325,6 +3346,7 @@
     "Modified: / 14.6.1998 / 15:54:03 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'queries-system'!
 
 dialectName
@@ -3399,6 +3421,7 @@
     ^ false
 ! !
 
+
 !Smalltalk class methodsFor:'startup'!
 
 browserWindowStartup
@@ -4210,6 +4233,7 @@
     "Modified: / 07-01-2012 / 12:59:01 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'startup and exit'!
 
 addExitBlock:aBlock
@@ -4297,6 +4321,7 @@
     "
 ! !
 
+
 !Smalltalk class methodsFor:'startup queries'!
 
 commandLine
@@ -4519,6 +4544,7 @@
     "
 ! !
 
+
 !Smalltalk class methodsFor:'system environment'!
 
 language
@@ -4611,6 +4637,7 @@
     LanguageTerritory := aTerritorySymbol asSymbol.
 ! !
 
+
 !Smalltalk class methodsFor:'system management'!
 
 compressSources
@@ -5245,6 +5272,7 @@
     "Modified: / 20.6.1998 / 12:41:34 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'system management-fileIn'!
 
 fileIn:aFileName
@@ -5778,10 +5806,7 @@
                                     zarFn := packageDir asFilename withSuffix:'zip'.
                                     zarFn := self getSourceFileName:zarFn.
                                 ].
-                                "JV@2012-01-30: HACK, what if file does not exist?"
-                                zarFn exists ifFalse:[zarFn := nil].
-
-                                zarFn notNil ifTrue:[
+                                (zarFn notNil and:[zarFn asFilename exists]) ifTrue:[
                                     zar := ZipArchive oldFileNamed:zarFn.
                                     zar notNil ifTrue:[
                                         entry := zar extract:(classFileName , '.st').
@@ -5871,7 +5896,6 @@
     "Created: / 09-01-1998 / 14:40:32 / cg"
     "Modified: / 05-06-1999 / 14:53:01 / cg"
     "Modified: / 16-08-2009 / 14:52:53 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Modified: / 30-01-2013 / 13:02:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 fileInClassLibrary:aClassLibraryName
@@ -6111,6 +6135,7 @@
     ].
 ! !
 
+
 !Smalltalk class methodsFor:'system management-files'!
 
 bitmapFileStreamFor:aFileName
@@ -6251,39 +6276,39 @@
     ].
 
     aClassOrClassName isBehavior ifTrue:[
-	cls := aClassOrClassName.
+        cls := aClassOrClassName.
     ] ifFalse:[
-	cls := Smalltalk classNamed:aClassOrClassName.
-	cls isNil ifTrue:[
-	    nameWithPrefix := aClassOrClassName.
-	    nameWithoutPrefix := (aClassOrClassName copyFrom:(aClassOrClassName lastIndexOf:$:)+1).
-	].
+        cls := Smalltalk classNamed:aClassOrClassName.
+        cls isNil ifTrue:[
+            nameWithPrefix := aClassOrClassName.
+            nameWithoutPrefix := (aClassOrClassName copyFrom:(aClassOrClassName lastIndexOf:$:)+1).
+        ].
     ].
 
     cls notNil ifTrue:[
-	nonMetaclass := cls theNonMetaclass.
-	nm := nonMetaclass getClassFilename.
-	nm isNil ifTrue:[
-	    cls revisionInfo notNil ifTrue:[
-		nm := cls revisionInfo fileName.
-	    ].
-	].
-	nm notNil ifTrue:[
-	    ^ nm asFilename withoutSuffix baseName
-	].
-	nameWithPrefix := nonMetaclass name.
-	nameWithoutPrefix := nonMetaclass nameWithoutPrefix.
+        nonMetaclass := cls theNonMetaclass.
+        nm := nonMetaclass getClassFilename.
+        nm isNil ifTrue:[
+            cls revisionInfo notNil ifTrue:[
+                nm := cls revisionInfo fileName.
+            ].
+        ].
+        nm notNil ifTrue:[
+            ^ nm asFilename withoutSuffix baseName
+        ].
+        nameWithPrefix := nonMetaclass name.
+        nameWithoutPrefix := nonMetaclass nameWithoutPrefix.
     ].
 
     CachedAbbreviations notNil ifTrue:[
-	nameWithPrefix := nameWithPrefix asSymbol.
-	(CachedAbbreviations includesKey:nameWithPrefix) ifTrue:[
-	    ^ (CachedAbbreviations at:nameWithPrefix) asFilename baseName
-	].
-	nameWithoutPrefix := nameWithoutPrefix asSymbol.
-	(CachedAbbreviations includesKey:nameWithoutPrefix) ifTrue:[
-	    ^ (CachedAbbreviations at:nameWithoutPrefix) asFilename baseName
-	].
+        nameWithPrefix := nameWithPrefix asSymbol.
+        (CachedAbbreviations includesKey:nameWithPrefix) ifTrue:[
+            ^ (CachedAbbreviations at:nameWithPrefix) asFilename baseName
+        ].
+        nameWithoutPrefix := nameWithoutPrefix asSymbol.
+        (CachedAbbreviations includesKey:nameWithoutPrefix) ifTrue:[
+            ^ (CachedAbbreviations at:nameWithoutPrefix) asFilename baseName
+        ].
     ].
 
     ^ nameWithPrefix copyReplaceAll:$: with:$_
@@ -7386,6 +7411,7 @@
     "Modified: / 04-08-2011 / 21:35:00 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'system management-packages'!
 
 loadPackage:aPackageIdOrPackage
@@ -7446,6 +7472,7 @@
     "
 ! !
 
+
 !Smalltalk class methodsFor:'system management-undeclared variables'!
 
 clearUndeclaredVariables
@@ -7466,6 +7493,7 @@
     "Created: / 31.10.1997 / 01:13:10 / cg"
 ! !
 
+
 !Smalltalk class methodsFor:'time-versions'!
 
 configuration
@@ -7861,14 +7889,15 @@
     "
 ! !
 
+
 !Smalltalk class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.1006 2012-12-22 14:29:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.1009 2013-03-01 13:47:22 stefan Exp $'
 !
 
 version_CVS
-    ^ '§Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.1006 2012-12-22 14:29:34 cg Exp §'
+    ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.1009 2013-03-01 13:47:22 stefan Exp $'
 !
 
 version_HG
--- a/Stream.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/Stream.st	Tue Mar 05 18:10:13 2013 +0000
@@ -194,6 +194,7 @@
     ^ ChunkSeparator
 ! !
 
+
 !Stream methodsFor:'accessing'!
 
 contents
@@ -2820,6 +2821,25 @@
     "Modified: 11.7.1996 / 10:00:13 / cg"
 !
 
+next:count putAll:aCollection
+    "put all elements from the argument, aCollection count times onto the receiver.
+     This is only allowed, if the receiver supports writing."
+
+    |n "{ Class: SmallInteger }"|
+
+    n := count.
+    n timesRepeat:[self nextPutAll:aCollection].
+    "/ ^ anObject -- return self
+
+    "
+     |s|
+
+     s := WriteStream on:(String new).
+     s next:5 putAll:'Hello'.
+     s contents
+    "
+!
+
 nextPut:anObject
     "put the argument, anObject onto the receiver
      - we do not know here how to do it, it must be redefined in subclass"
@@ -3284,11 +3304,12 @@
 !Stream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Stream.st,v 1.196 2012-12-14 10:13:32 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Stream.st,v 1.197 2013-02-21 12:26:47 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Stream.st,v 1.196 2012-12-14 10:13:32 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Stream.st,v 1.197 2013-02-21 12:26:47 cg Exp $'
 ! !
 
+
 Stream initialize!
--- a/UnixFilename.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/UnixFilename.st	Tue Mar 05 18:10:13 2013 +0000
@@ -61,7 +61,7 @@
 isCaseSensitive
     "return true, if filenames are case sensitive.return true, if filenames are case sensitive."
 
-    ^ true
+    ^ OperatingSystem caseSensitiveFilenames
 !
 
 nullFilename
@@ -211,9 +211,10 @@
 !UnixFilename class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/UnixFilename.st,v 1.18 2012-12-13 13:21:23 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UnixFilename.st,v 1.19 2013-03-04 12:33:45 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/UnixFilename.st,v 1.18 2012-12-13 13:21:23 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UnixFilename.st,v 1.19 2013-03-04 12:33:45 cg Exp $'
 ! !
+
--- a/UnixOperatingSystem.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/UnixOperatingSystem.st	Tue Mar 05 18:10:13 2013 +0000
@@ -1405,6 +1405,11 @@
 	RETURN ( __mkSmallInteger(SIGXFSZ) );
     }
 #endif
+#ifdef SIGINFO
+    if (signalName == @symbol(SIGINFO)) {
+	RETURN ( __mkSmallInteger(SIGINFO) );
+    }
+#endif
 
     RETURN ( __mkSmallInteger(0) );
 %}
@@ -7829,6 +7834,22 @@
     "
 !
 
+isOSXlike
+    "return true, if the OS we're running on is a mac OSX unix (not A/UX or OS9)."
+
+%{  /* NOCONTEXT */
+
+#if defined(__osx__)
+    RETURN ( true );
+#endif
+%}.
+    ^ false
+
+    "
+     OperatingSystem isOSXlike
+    "
+!
+
 isProcessIdPresent:pid
     "answer true, if a process with process id pid is present, false if not"
 
@@ -13217,11 +13238,11 @@
 !UnixOperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.303 2013-01-24 16:32:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.305 2013-02-23 12:34:28 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.303 2013-01-24 16:32:16 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.305 2013-02-23 12:34:28 cg Exp $'
 !
 
 version_HG
--- a/Win32OperatingSystem.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/Win32OperatingSystem.st	Tue Mar 05 18:10:13 2013 +0000
@@ -828,6 +828,7 @@
     "Modified: 7.1.1997 / 19:36:11 / stefan"
 ! !
 
+
 !Win32OperatingSystem class methodsFor:'OS signal constants'!
 
 sigABRT
@@ -3499,7 +3500,7 @@
 
 %{
     DWORD endStatus;
-    int status = -1;
+    INT status = -1;
 
     if (__isExternalAddressLike(aProcessId)) {
 	HANDLE handle = _HANDLEVal(aProcessId);
@@ -3507,10 +3508,10 @@
 #ifdef DO_WRAP_CALLS
 	    do {
 		__threadErrno = 0;
-		endStatus = STX_API_CALL2( "WaitForSingleObject", WaitForSingleObject, handle, INFINITE);
+		endStatus = (INT)STX_API_CALL2( "WaitForSingleObject", WaitForSingleObject, handle, INFINITE);
 	    } while ((endStatus < 0) && (__threadErrno == EINTR));
 #else
-	    endStatus = WaitForSingleObject(handle , INFINITE);
+	    endStatus = (INT)WaitForSingleObject(handle , INFINITE);
 #endif
 	    if (endStatus != WAIT_FAILED) {
 		if (GetExitCodeProcess(handle,&endStatus)) {
@@ -3742,7 +3743,7 @@
 				&lpsiStartInfo,
 				&lppiProcInfo ))
 	    {
-		DWORD processAffinityMask, systemAffinityMask;
+		DWORD_PTR processAffinityMask, systemAffinityMask;
 
 		/*
 		 * Process was created suspended, now set the affinity mask
@@ -3842,7 +3843,7 @@
 	}
 	if (ShellExecuteEx(&shExecInfo)) {
 	    if (shExecInfo.hProcess) {
-		DWORD processAffinityMask, systemAffinityMask;
+		DWORD_PTR processAffinityMask, systemAffinityMask;
 		/*
 		 * Set the affinity mask
 		 * to any processor, and resume the processes main thread.
@@ -6794,28 +6795,38 @@
 !
 
 terminateProcessGroup:processGroupHandleOrPid
-    "terminate a process group.
-     The processes should have a chance to do some cleanup.
-     WIN32:
-	 The processGroup is terminated by sending it a CTRL-C
-	 using GenerateConsoleCtrlEvent."
-
-    | pid list |
+    "terminate a process group (that is all subprocesses of a process)."
+
+    | pid list groupsToTerminate anyMore |
 
     list := self getAllProcesses.
     list size == 0 ifTrue:[^ self ].
 
     processGroupHandleOrPid isInteger ifTrue:[
-	pid := processGroupHandleOrPid
+        pid := processGroupHandleOrPid
     ] ifFalse:[
-	pid := processGroupHandleOrPid pid.
-    ].
-    list do:[:anOSProcess |
-	( anOSProcess parentPid == pid ) ifTrue:[
-	    self terminateProcess:( anOSProcess pid ).
-	].
-    ].
-
+        pid := processGroupHandleOrPid pid.
+    ].
+    groupsToTerminate := Set with:pid.
+    list := list asSet.
+
+    "/ Transcript show:'terminate group '; showCR:pid.
+    anyMore := true.
+    [anyMore] whileTrue:[
+        anyMore := false.
+        list do:[:anOSProcess |
+            |pid|
+
+            (groupsToTerminate includes:anOSProcess parentPid) ifTrue:[
+                pid := anOSProcess pid.
+                groupsToTerminate add:pid.
+                "/ Transcript show:'terminate '; showCR:pid.
+                self terminateProcess:( pid ).
+                list remove:anOSProcess.        
+                anyMore := true.
+            ].
+        ].
+    ].
 ! !
 
 !Win32OperatingSystem class methodsFor:'ipc support'!
@@ -7486,13 +7497,18 @@
     |hostName|
 
 %{  /* STACK: 2048 */
+#if defined(__MINGW32__)
+    char bufferA[512];
+    DWORD buffSize = sizeof(bufferA);
+#else
     WCHAR buffer[512];
     DWORD buffSize = sizeof(buffer)/sizeof(buffer[0]);
+#endif
 
     // Note: GetComputerNameExA can fail in certain locales!
-#ifdef __MINGW32__
-    if (GetComputerName(buffer, &buffSize) == TRUE) {
-	hostName = __MKSTRING_L(buffer, buffSize);
+#if defined(__MINGW32__)
+    if (GetComputerNameA(bufferA, &buffSize) == TRUE) {
+	hostName = __MKSTRING_L(bufferA, buffSize);
     }
 #else
     if (GetComputerNameExW(ComputerNameDnsFullyQualified, buffer, &buffSize) == TRUE) {
@@ -7950,25 +7966,25 @@
        This method is mainly provided to augment error reports with some system
        information.
        (in case of system/version specific OS errors, conditional workarounds and patches
-        may be based upon this info).
+	may be based upon this info).
        Your application should NOT depend upon this in any way.
 
      The returned info may (or may not) contain:
-        #system -> some operating system identification (irix, Linux, nt, win32s ...)
-        #version -> OS version (some os version identification)
-        #release -> OS release (3.5, 1.2.1 ...)
-        #node   -> some host identification (hostname)
-        #domain  -> domain name (hosts domain)
-        #machine -> type of machine (i586, mips ...)
+	#system -> some operating system identification (irix, Linux, nt, win32s ...)
+	#version -> OS version (some os version identification)
+	#release -> OS release (3.5, 1.2.1 ...)
+	#node   -> some host identification (hostname)
+	#domain  -> domain name (hosts domain)
+	#machine -> type of machine (i586, mips ...)
 
      win32:
-        #physicalRam -> total amount of physical memory
-        #freeRam -> amount of free memory
-        #swapSize -> size of swapSpace (page file)
-        #freeSwap -> free bytes in swapSpace
-        #virtualRam -> total amount of virtual memory
-        #freeVirtual -> amount of free virtual memory
-        #memoryLoad -> percentage of memory usage (useless)
+	#physicalRam -> total amount of physical memory
+	#freeRam -> amount of free memory
+	#swapSize -> size of swapSpace (page file)
+	#freeSwap -> free bytes in swapSpace
+	#virtualRam -> total amount of virtual memory
+	#freeVirtual -> amount of free virtual memory
+	#memoryLoad -> percentage of memory usage (useless)
     "
 
     |sys node rel ver minorVer majorVer mach dom info arch
@@ -7994,23 +8010,23 @@
     majorVer = __mkSmallInteger(verMajor);
 
     if (HIWORD(vsn) & 0x8000) {
-        sys = @symbol(win95);
+	sys = @symbol(win95);
     } else {
-        if ((verMajor > 5)
-         || ((verMajor == 5) && (verMinor >= 1))) {
-            sys = @symbol(xp);
-            if (verMajor >= 6) {
-                sys = @symbol(vista);
-                if (verMinor >= 1) {
-                    sys = @symbol(win7);
-                    if (verMinor >= 2) {
-                        sys = @symbol(win8);
-                    }
-                }
-            }
-        } else {
-            sys = @symbol(nt);
-        }
+	if ((verMajor > 5)
+	 || ((verMajor == 5) && (verMinor >= 1))) {
+	    sys = @symbol(xp);
+	    if (verMajor >= 6) {
+		sys = @symbol(vista);
+		if (verMinor >= 1) {
+		    sys = @symbol(win7);
+		    if (verMinor >= 2) {
+			sys = @symbol(win8);
+		    }
+		}
+	    }
+	} else {
+	    sys = @symbol(nt);
+	}
     }
     len = snprintf(vsnBuffer, sizeof(vsnBuffer), "%d.%d", verMajor, verMinor);
     rel = __MKSTRING_L(vsnBuffer, len);
@@ -8036,205 +8052,205 @@
 #endif
     {
 #ifdef PROCESSOR_ARCHITECTURE_INTEL
-        case PROCESSOR_ARCHITECTURE_INTEL:
-            arch = @symbol(intel);
-            break;
+	case PROCESSOR_ARCHITECTURE_INTEL:
+	    arch = @symbol(intel);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_AMD64
-        case PROCESSOR_ARCHITECTURE_AMD64:
-            arch = @symbol(x64);
-            break;
+	case PROCESSOR_ARCHITECTURE_AMD64:
+	    arch = @symbol(x64);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_MIPS
-        case PROCESSOR_ARCHITECTURE_MIPS:
-            arch = @symbol(mips);
-            break;
+	case PROCESSOR_ARCHITECTURE_MIPS:
+	    arch = @symbol(mips);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_ALPHA
-        case PROCESSOR_ARCHITECTURE_ALPHA:
-            arch = @symbol(alpha);
-            break;
+	case PROCESSOR_ARCHITECTURE_ALPHA:
+	    arch = @symbol(alpha);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_ALPHA64
-        case PROCESSOR_ARCHITECTURE_ALPHA64:
-            arch = @symbol(alpha64);
-            break;
+	case PROCESSOR_ARCHITECTURE_ALPHA64:
+	    arch = @symbol(alpha64);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_PPC
-        case PROCESSOR_ARCHITECTURE_PPC:
-            arch = @symbol(ppc);
-            break;
+	case PROCESSOR_ARCHITECTURE_PPC:
+	    arch = @symbol(ppc);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_ARM
-        case PROCESSOR_ARCHITECTURE_ARM:
-            arch = @symbol(arm);
-            break;
+	case PROCESSOR_ARCHITECTURE_ARM:
+	    arch = @symbol(arm);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_SHX
-        case PROCESSOR_ARCHITECTURE_SHX:
-            arch = @symbol(shx);
-            break;
+	case PROCESSOR_ARCHITECTURE_SHX:
+	    arch = @symbol(shx);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_IA64
-        case PROCESSOR_ARCHITECTURE_IA64:
-            arch = @symbol(ia64);
-            break;
+	case PROCESSOR_ARCHITECTURE_IA64:
+	    arch = @symbol(ia64);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_MSIL
-        case PROCESSOR_ARCHITECTURE_MSIL:
-            arch = @symbol(msil);
-            break;
+	case PROCESSOR_ARCHITECTURE_MSIL:
+	    arch = @symbol(msil);
+	    break;
 #endif
 #ifdef PROCESSOR_ARCHITECTURE_IA32_ON_WIN64
-        case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64:
-            arch = @symbol(ia32_on_win64);
-            break;
-#endif
-        default:
-            arch = @symbol(unknown);
-            break;
+	case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64:
+	    arch = @symbol(ia32_on_win64);
+	    break;
+#endif
+	default:
+	    arch = @symbol(unknown);
+	    break;
     }
 
     switch (sysInfo.dwProcessorType) {
 #ifdef PROCESSOR_INTEL_386
-        case PROCESSOR_INTEL_386:
-            mach = @symbol(i386);
-            break;
+	case PROCESSOR_INTEL_386:
+	    mach = @symbol(i386);
+	    break;
 #endif
 #ifdef PROCESSOR_INTEL_486
-        case PROCESSOR_INTEL_486:
-            mach = @symbol(i486);
-            break;
+	case PROCESSOR_INTEL_486:
+	    mach = @symbol(i486);
+	    break;
 #endif
 #ifdef PROCESSOR_INTEL_PENTIUM
-        case PROCESSOR_INTEL_PENTIUM:
-            mach = @symbol(i586);
-            break;
+	case PROCESSOR_INTEL_PENTIUM:
+	    mach = @symbol(i586);
+	    break;
 #endif
 #ifdef PROCESSOR_INTEL_860
-        case PROCESSOR_INTEL_860:
-            mach = @symbol(i860);
-            break;
+	case PROCESSOR_INTEL_860:
+	    mach = @symbol(i860);
+	    break;
 #endif
 #ifdef PROCESSOR_INTEL_IA64
-        case PROCESSOR_INTEL_IA64:
-            mach = @symbol(ia64);
-            break;
+	case PROCESSOR_INTEL_IA64:
+	    mach = @symbol(ia64);
+	    break;
 #endif
 #ifdef PROCESSOR_AMD_X8664
-        case PROCESSOR_AMD_X8664:
-            mach = @symbol(x86_64);
-            break;
+	case PROCESSOR_AMD_X8664:
+	    mach = @symbol(x86_64);
+	    break;
 #endif
 #ifdef PROCESSOR_MIPS_R2000
-        case PROCESSOR_MIPS_R2000:
-            mach = @symbol(r2000);
-            break;
+	case PROCESSOR_MIPS_R2000:
+	    mach = @symbol(r2000);
+	    break;
 #endif
 #ifdef PROCESSOR_MIPS_R3000
-        case PROCESSOR_MIPS_R3000:
-            mach = @symbol(r3000);
-            break;
+	case PROCESSOR_MIPS_R3000:
+	    mach = @symbol(r3000);
+	    break;
 #endif
 #ifdef PROCESSOR_MIPS_R4000
-        case PROCESSOR_MIPS_R4000:
-            mach = @symbol(r4000);
-            break;
+	case PROCESSOR_MIPS_R4000:
+	    mach = @symbol(r4000);
+	    break;
 #endif
 #ifdef PROCESSOR_ALPHA_21064
-        case PROCESSOR_ALPHA_21064:
-            mach = @symbol(alpha21064);
-            break;
+	case PROCESSOR_ALPHA_21064:
+	    mach = @symbol(alpha21064);
+	    break;
 #endif
 #ifdef PROCESSOR_ARM720
-        case PROCESSOR_ARM720:
-            mach = @symbol(arm720);
-            break;
+	case PROCESSOR_ARM720:
+	    mach = @symbol(arm720);
+	    break;
 #endif
 #ifdef PROCESSOR_ARM820
-        case PROCESSOR_ARM820:
-            mach = @symbol(arm820);
-            break;
+	case PROCESSOR_ARM820:
+	    mach = @symbol(arm820);
+	    break;
 #endif
 #ifdef PROCESSOR_ARM920
-        case PROCESSOR_ARM920:
-            mach = @symbol(arm920);
-            break;
+	case PROCESSOR_ARM920:
+	    mach = @symbol(arm920);
+	    break;
 #endif
 #ifdef PROCESSOR_ARM_7TDMI
-        case PROCESSOR_ARM_7TDMI:
-            mach = @symbol(arm70001);
-            break;
+	case PROCESSOR_ARM_7TDMI:
+	    mach = @symbol(arm70001);
+	    break;
 #endif
 #ifdef PROCESSOR_STRONGARM
-        case PROCESSOR_STRONGARM:
-            mach = @symbol(strongarm);
-            break;
+	case PROCESSOR_STRONGARM:
+	    mach = @symbol(strongarm);
+	    break;
 #endif
 #ifdef PROCESSOR_PPC_601
-        case PROCESSOR_PPC_601:
-            mach = @symbol(ppc601);
-            break;
+	case PROCESSOR_PPC_601:
+	    mach = @symbol(ppc601);
+	    break;
 #endif
 #ifdef PROCESSOR_PPC_603
-        case PROCESSOR_PPC_603:
-            mach = @symbol(ppc603);
-            break;
+	case PROCESSOR_PPC_603:
+	    mach = @symbol(ppc603);
+	    break;
 #endif
 #ifdef PROCESSOR_PPC_604
-        case PROCESSOR_PPC_604:
-            mach = @symbol(ppc604);
-            break;
+	case PROCESSOR_PPC_604:
+	    mach = @symbol(ppc604);
+	    break;
 #endif
 #ifdef PROCESSOR_PPC_620
-        case PROCESSOR_PPC_620:
-            mach = @symbol(ppc620);
-            break;
+	case PROCESSOR_PPC_620:
+	    mach = @symbol(ppc620);
+	    break;
 #endif
 #ifdef PROCESSOR_HITACHI_SH3
-        case PROCESSOR_HITACHI_SH3:
-            mach = @symbol(sh3);
-            break;
+	case PROCESSOR_HITACHI_SH3:
+	    mach = @symbol(sh3);
+	    break;
 #endif
 #ifdef PROCESSOR_HITACHI_SH3E
-        case PROCESSOR_HITACHI_SH3E:
-            mach = @symbol(sh3e);
-            break;
+	case PROCESSOR_HITACHI_SH3E:
+	    mach = @symbol(sh3e);
+	    break;
 #endif
 #ifdef PROCESSOR_HITACHI_SH4
-        case PROCESSOR_HITACHI_SH4:
-            mach = @symbol(sh4);
-            break;
+	case PROCESSOR_HITACHI_SH4:
+	    mach = @symbol(sh4);
+	    break;
 #endif
 #ifdef PROCESSOR_MOTOROLA_821
-        case PROCESSOR_MOTOROLA_821:
-            mach = @symbol(mc821);
-            break;
+	case PROCESSOR_MOTOROLA_821:
+	    mach = @symbol(mc821);
+	    break;
 #endif
 #ifdef PROCESSOR_SHx_SH3
-        case PROCESSOR_SHx_SH3:
-            mach = @symbol(shx_sh3);
-            break;
+	case PROCESSOR_SHx_SH3:
+	    mach = @symbol(shx_sh3);
+	    break;
 #endif
 #ifdef PROCESSOR_SHx_SH4
-        case PROCESSOR_SHx_SH4:
-            mach = @symbol(shx_sh4);
-            break;
-#endif
-
-        default:
-            sprintf(vsnBuffer, "%d", sysInfo.dwProcessorType);
-            mach =  __MKSTRING(vsnBuffer);
-            break;
+	case PROCESSOR_SHx_SH4:
+	    mach = @symbol(shx_sh4);
+	    break;
+#endif
+
+	default:
+	    sprintf(vsnBuffer, "%d", sysInfo.dwProcessorType);
+	    mach =  __MKSTRING(vsnBuffer);
+	    break;
     }
 
     numberOfCPUs = __MKUINT(sysInfo.dwNumberOfProcessors);
 %}.
     node isNil ifTrue:[
-        node := self getHostName.
+	node := self getHostName.
     ].
     dom isNil ifTrue:[
-        dom := self getDomainName.
+	dom := self getDomainName.
     ].
 
     info := IdentityDictionary new.
@@ -16514,11 +16530,11 @@
 !Win32OperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.450 2013-02-05 21:01:59 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.453 2013-03-04 15:17:19 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.450 2013-02-05 21:01:59 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.453 2013-03-04 15:17:19 cg Exp $'
 !
 
 version_SVN
--- a/abbrev.stc	Thu Feb 07 09:53:25 2013 +0100
+++ b/abbrev.stc	Tue Mar 05 18:10:13 2013 +0000
@@ -84,10 +84,10 @@
 OSErrorHolder OSErrorHolder stx:libbasic 'OS-Support' 0
 OSProcess OSProcess stx:libbasic 'System-Support' 0
 ObjectMemory ObjectMemory stx:libbasic 'System-Support' 0
-OpenVMSFileHandle OpenVMSFileHandle stx:libbasic 'OS-OpenVMS' 0
-OpenVMSFilename OpenVMSFilename stx:libbasic 'OS-OpenVMS' 0
-OpenVMSOperatingSystem OpenVMSOperatingSystem stx:libbasic 'OS-OpenVMS' 0
-PCFilename PCFilename stx:libbasic 'OS-Windows' 0
+OpenVMSFileHandle OpenVMSFileHandle stx:libbasic  'unknownCategory'  0
+OpenVMSFilename OpenVMSFilename stx:libbasic  'unknownCategory'  0
+OpenVMSOperatingSystem OpenVMSOperatingSystem stx:libbasic  'unknownCategory'  0
+PCFilename PCFilename stx:libbasic  'unknownCategory'  0
 PackageId PackageId stx:libbasic 'System-Support-Projects' 0
 ProcessorScheduler ProcessorScheduler stx:libbasic 'Kernel-Processes' 0
 ProgrammingLanguage ProgrammingLanguage stx:libbasic 'Kernel-Languages' 1
@@ -114,11 +114,11 @@
 UserMessage UserMessage stx:libbasic 'Interface-Internationalization' 0
 Visitor Visitor stx:libbasic 'System-Visiting' 0
 WeakValueIdentityDictionary WeakValueIdentityDictionary stx:libbasic 'Collections-Weak' 0
-Win32Constants Win32Constants stx:libbasic 'OS-Windows' 0
-Win32FILEHandle Win32FILEHandle stx:libbasic 'OS-Windows' 0
-Win32Handle Win32Handle stx:libbasic 'OS-Windows' 0
-Win32OperatingSystem Win32OperatingSystem stx:libbasic 'OS-Windows' 0
-Win32Process Win32Process stx:libbasic 'OS-Windows' 0
+Win32Constants Win32Constants stx:libbasic  'unknownCategory'  0
+Win32FILEHandle Win32FILEHandle stx:libbasic  'unknownCategory'  0
+Win32Handle Win32Handle stx:libbasic  'unknownCategory'  0
+Win32OperatingSystem Win32OperatingSystem stx:libbasic  'unknownCategory'  0
+Win32Process Win32Process stx:libbasic  'unknownCategory'  0
 WindowsDesktop WindowsDesktop stx:libbasic 'System-Desktop' 0
 XDGDesktop XDGDesktop stx:libbasic 'System-Desktop' 0
 AbstractTime AbstractTime stx:libbasic 'Magnitude-Time' 0
@@ -217,10 +217,10 @@
 PositionableStream PositionableStream stx:libbasic 'Streams' 0
 Query Query stx:libbasic 'Kernel-Exceptions' 1
 ReadOnlySequenceableCollection ReadOnlySequenceableCollection stx:libbasic 'Collections-Abstract' 0
-RecursiveStoreError RecursiveStoreError stx:libbasic 'Kernel-Exceptions' 1
+RecursiveStoreError RecursiveStoreError stx:libbasic 'Kernel-Exceptions-Errors' 1
 SHA1Stream SHA1Stream stx:libbasic 'System-Crypt-Hashing' 0
 Time Time stx:libbasic 'Magnitude-Time' 0
-TimeoutNotification TimeoutNotification stx:libbasic 'Kernel-Exceptions' 1
+TimeoutNotification TimeoutNotification stx:libbasic 'Kernel-Exceptions-Notifications' 1
 Timestamp Timestamp stx:libbasic 'Magnitude-Time' 0
 UserInterrupt UserInterrupt stx:libbasic 'Kernel-Exceptions-Control' 1
 UserNotification UserNotification stx:libbasic 'Kernel-Exceptions-Notifications' 1
@@ -393,3 +393,4 @@
 MethodNotAppropriateError MethodNotAppropriateError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
 AbstractClassInstantiationError AbstractClassInstantiationError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
 InvalidTypeError InvalidTypeError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+OSXOperatingSystem OSXOperatingSystem stx:libbasic 'OS-Unix' 0
--- a/bc.mak	Thu Feb 07 09:53:25 2013 +0100
+++ b/bc.mak	Tue Mar 05 18:10:13 2013 +0000
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic/bc.mak,v 1.194 2013-01-08 17:55:11 cg Exp $
+# $Header: /cvs/stx/stx/libbasic/bc.mak,v 1.195 2013-03-04 12:43:23 cg Exp $
 #
 # DO NOT EDIT
 # automagically generated from the projectDefinition: stx_libbasic.
@@ -40,7 +40,7 @@
 LOCALINCLUDES=-I$(TOP)\librun
 LOCALDEFINES=
 
-STCLOCALOPT=-lineInfo -package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) $(COMMONSYMBOLS) -varPrefix=$(LIBNAME)
+STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) $(COMMONSYMBOLS) -varPrefix=$(LIBNAME)
 LOCALLIBS=
 
 OBJS= $(COMMON_OBJS) $(WIN32_OBJS)
@@ -53,12 +53,14 @@
 
 # build all prerequisite packages for this package
 prereq:
-#        pushd ..\librun & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
 
 
 
 
+clean::
+	del *.$(CSUFFIX)
+
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
 $(OUTDIR)Autoload.$(O) Autoload.$(H): Autoload.st $(STCHDR)
 $(OUTDIR)Object.$(O) Object.$(H): Object.st $(STCHDR)
@@ -383,12 +385,12 @@
 $(OUTDIR)DirectoryStream.$(O) DirectoryStream.$(H): DirectoryStream.st $(INCLUDE_TOP)\stx\libbasic\FileStream.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStream.$(H) $(INCLUDE_TOP)\stx\libbasic\ReadWriteStream.$(H) $(INCLUDE_TOP)\stx\libbasic\WriteStream.$(H) $(INCLUDE_TOP)\stx\libbasic\PositionableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\PeekableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\Stream.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)InvalidEncodingError.$(O) InvalidEncodingError.$(H): InvalidEncodingError.st $(INCLUDE_TOP)\stx\libbasic\DecodingError.$(H) $(INCLUDE_TOP)\stx\libbasic\CharacterEncoderError.$(H) $(INCLUDE_TOP)\stx\libbasic\ConversionError.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(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)PipeStream.$(O) PipeStream.$(H): PipeStream.st $(INCLUDE_TOP)\stx\libbasic\NonPositionableExternalStream.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStream.$(H) $(INCLUDE_TOP)\stx\libbasic\ReadWriteStream.$(H) $(INCLUDE_TOP)\stx\libbasic\WriteStream.$(H) $(INCLUDE_TOP)\stx\libbasic\PositionableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\PeekableStream.$(H) $(INCLUDE_TOP)\stx\libbasic\Stream.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)PCFilename.$(O) PCFilename.$(H): PCFilename.st $(INCLUDE_TOP)\stx\libbasic\Filename.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)Win32Constants.$(O) Win32Constants.$(H): Win32Constants.st $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(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\Win32Constants.$(H) $(INCLUDE_TOP)\stx\libbasic\AbstractOperatingSystem.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(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) $(INCLUDE_TOP)\stx\libbasic\OSHandle.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Win32Handle.$(H) $(STCHDR)
+$(OUTDIR)PCFilename.$(O) PCFilename.$(H): PCFilename.st $(STCHDR)
+$(OUTDIR)Win32Constants.$(O) Win32Constants.$(H): Win32Constants.st $(STCHDR)
+$(OUTDIR)Win32FILEHandle.$(O) Win32FILEHandle.$(H): Win32FILEHandle.st $(STCHDR)
+$(OUTDIR)Win32Handle.$(O) Win32Handle.$(H): Win32Handle.st $(STCHDR)
+$(OUTDIR)Win32OperatingSystem.$(O) Win32OperatingSystem.$(H): Win32OperatingSystem.st $(STCHDR)
+$(OUTDIR)Win32Process.$(O) Win32Process.$(H): Win32Process.st $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/libInit.cc	Thu Feb 07 09:53:25 2013 +0100
+++ b/libInit.cc	Tue Mar 05 18:10:13 2013 +0000
@@ -1,5 +1,5 @@
 /*
- * $Header: /cvs/stx/stx/libbasic/libInit.cc,v 1.186 2012-11-02 15:07:06 cg Exp $
+ * $Header: /cvs/stx/stx/libbasic/libInit.cc,v 1.187 2013-03-04 12:43:31 cg Exp $
  *
  * DO NOT EDIT
  * automagically generated from the projectDefinition: stx_libbasic.
@@ -13,16 +13,16 @@
 
 #if defined(INIT_TEXT_SECTION) || defined(DLL_EXPORT)
 DLL_EXPORT void _libstx_libbasic_Init() INIT_TEXT_SECTION;
-// DLL_EXPORT void _libstx_libbasic_InitDefinition() INIT_TEXT_SECTION;
+DLL_EXPORT void _libstx_libbasic_InitDefinition() INIT_TEXT_SECTION;
 #endif
 
-// void _libstx_libbasic_InitDefinition(pass, __pRT__, snd)
-// OBJ snd; struct __vmData__ *__pRT__; {
-// __BEGIN_PACKAGE2__("libstx_libbasic__DFN", _libstx_libbasic_InitDefinition, "stx:libbasic");
-// _stx_137libbasic_Init(pass,__pRT__,snd);
+void _libstx_libbasic_InitDefinition(pass, __pRT__, snd)
+OBJ snd; struct __vmData__ *__pRT__; {
+__BEGIN_PACKAGE2__("libstx_libbasic__DFN", _libstx_libbasic_InitDefinition, "stx:libbasic");
+_stx_137libbasic_Init(pass,__pRT__,snd);
 
-// __END_PACKAGE__();
-// }
+__END_PACKAGE__();
+}
 
 void _libstx_libbasic_Init(pass, __pRT__, snd)
 OBJ snd; struct __vmData__ *__pRT__; {
@@ -353,6 +353,7 @@
 _UnixFileDescriptorHandle_Init(pass,__pRT__,snd);
 _UnixFileHandle_Init(pass,__pRT__,snd);
 _UnixOperatingSystem_Init(pass,__pRT__,snd);
+_OSXOperatingSystem_Init(pass,__pRT__,snd);
 #endif /* UNIX */
 #ifdef WIN32
 _PCFilename_Init(pass,__pRT__,snd);
@@ -367,6 +368,12 @@
 _OpenVMSFilename_Init(pass,__pRT__,snd);
 _OpenVMSOperatingSystem_Init(pass,__pRT__,snd);
 #endif /* VMS */
+#ifdef OSX
+_UnixFileDescriptorHandle_Init(pass,__pRT__,snd);
+_UnixFileHandle_Init(pass,__pRT__,snd);
+_UnixOperatingSystem_Init(pass,__pRT__,snd);
+_OSXOperatingSystem_Init(pass,__pRT__,snd);
+#endif /* OSX */
 
 
 __END_PACKAGE__();
--- a/libbasic.rc	Thu Feb 07 09:53:25 2013 +0100
+++ b/libbasic.rc	Tue Mar 05 18:10:13 2013 +0000
@@ -3,8 +3,8 @@
 // automagically generated from the projectDefinition: stx_libbasic.
 //
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION     6,2,1,108
-  PRODUCTVERSION  6,2,2,1
+  FILEVERSION     6,2,1,109
+  PRODUCTVERSION  6,2,2,0
 #if (__BORLANDC__)
   FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
   FILEFLAGS       VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
@@ -20,12 +20,12 @@
     BEGIN
       VALUE "CompanyName", "eXept Software AG\0"
       VALUE "FileDescription", "Smalltalk/X Basic Classes (LIB)\0"
-      VALUE "FileVersion", "6.2.1.108\0"
+      VALUE "FileVersion", "6.2.1.109\0"
       VALUE "InternalName", "stx:libbasic\0"
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 1998-2012\0"
       VALUE "ProductName", "Smalltalk/X\0"
-      VALUE "ProductVersion", "6.2.2.1\0"
-      VALUE "ProductDate", "Fri, 02 Nov 2012 15:04:42 GMT\0"
+      VALUE "ProductVersion", "6.2.2.0\0"
+      VALUE "ProductDate", "Mon, 04 Mar 2013 12:43:16 GMT\0"
     END
 
   END
--- a/mingwmake.bat	Thu Feb 07 09:53:25 2013 +0100
+++ b/mingwmake.bat	Tue Mar 05 18:10:13 2013 +0000
@@ -6,3 +6,5 @@
 
 @call ..\rules\find_mingw.bat
 make.exe -N -f bc.mak %USEMINGW_ARG% %*
+
+
--- a/stx_libbasic.st	Thu Feb 07 09:53:25 2013 +0100
+++ b/stx_libbasic.st	Tue Mar 05 18:10:13 2013 +0000
@@ -11,7 +11,7 @@
 "
 "{ Package: 'stx:libbasic' }"
 
-LibraryDefinition subclass:#stx_libbasic
+LibraryDefinition subclass:#'stx_libbasic'
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -41,6 +41,7 @@
 "
 ! !
 
+
 !stx_libbasic class methodsFor:'description'!
 
 excludedFromPreRequisites
@@ -65,6 +66,7 @@
     )
 ! !
 
+
 !stx_libbasic class methodsFor:'description - compilation'!
 
 additionalBaseAddressDefinition_bc_dot_mak
@@ -89,6 +91,7 @@
     "Created: / 23-08-2006 / 11:06:17 / cg"
 ! !
 
+
 !stx_libbasic class methodsFor:'description - contents'!
 
 classNamesAndAttributes
@@ -98,400 +101,400 @@
      Attributes are: #autoload or #<os> where os is one of win32, unix,..."
 
     ^ #(
-	"<className> or (<className> attributes...) in load order"
-	Autoload
-	Object
-	ProtoObject
-	(AbstractDesktop autoload)
-	AbstractOperatingSystem
-	AbstractSourceFileReader
-	Annotation
-	(BadRomanNumberFormatError autoload)
-	Behavior
-	Boolean
-	CharacterEncoder
-	(#'CharacterEncoderImplementations::BIG5' autoload)
-	(#'CharacterEncoderImplementations::CNS11643' autoload)
-	(#'CharacterEncoderImplementations::GB2313_1980' autoload)
-	(#'CharacterEncoderImplementations::HANGUL' autoload)
-	(#'CharacterEncoderImplementations::ISO10646_to_JavaText' autoload)
-	(#'CharacterEncoderImplementations::ISO10646_to_SGML' autoload)
-	(#'CharacterEncoderImplementations::JIS0201' autoload)
-	(#'CharacterEncoderImplementations::JIS0208' autoload)
-	(#'CharacterEncoderImplementations::JIS0208_to_EUC' autoload)
-	(#'CharacterEncoderImplementations::JIS0208_to_JIS7' autoload)
-	(#'CharacterEncoderImplementations::JIS0208_to_SJIS' autoload)
-	(#'CharacterEncoderImplementations::JIS0212' autoload)
-	(#'CharacterEncoderImplementations::JOHAB' autoload)
-	(#'CharacterEncoderImplementations::KOI7' autoload)
-	(#'CharacterEncoderImplementations::KSC5601' autoload)
-	(#'CharacterEncoderImplementations::MAC_Arabic' autoload)
-	(#'CharacterEncoderImplementations::MAC_CentralEuropean' autoload)
-	(#'CharacterEncoderImplementations::MAC_Croatian' autoload)
-	(#'CharacterEncoderImplementations::MAC_Cyrillic' autoload)
-	(#'CharacterEncoderImplementations::MAC_Dingbats' autoload)
-	(#'CharacterEncoderImplementations::MAC_Farsi' autoload)
-	(#'CharacterEncoderImplementations::MAC_Greek' autoload)
-	(#'CharacterEncoderImplementations::MAC_Hebrew' autoload)
-	(#'CharacterEncoderImplementations::MAC_Iceland' autoload)
-	(#'CharacterEncoderImplementations::MAC_Japanese' autoload)
-	(#'CharacterEncoderImplementations::MAC_Korean' autoload)
-	(#'CharacterEncoderImplementations::MAC_Roman' autoload)
-	(#'CharacterEncoderImplementations::MAC_Romanian' autoload)
-	(#'CharacterEncoderImplementations::MAC_Symbol' autoload)
-	(#'CharacterEncoderImplementations::MAC_Thai' autoload)
-	(#'CharacterEncoderImplementations::MAC_Turkish' autoload)
-	(#'CharacterEncoderImplementations::NEXT' autoload)
-	ClassBuilder
-	ClassCategoryReader
-	(CmdLineOption autoload)
-	(CmdLineOptionError autoload)
-	(CmdLineParser autoload)
-	(CmdLineParserTest autoload)
-	Collection
-	ConfigurableFeatures
-	Context
-	Continuation
-	Delay
-	ExecutableFunction
-	ExternalAddress
-	ExternalLibrary
-	Filename
-	(GNOMEDesktop autoload)
-	GenericException
-	Geometric
-	(ImaginaryResultError autoload)
-	InlineObject
-	InterestConverter
-	(LargeFloat autoload)
-	Link
-	Lookup
-	(MacFilename macos autoload)
-	Magnitude
-	(MappedExternalBytes autoload)
-	Message
-	(MethodOverrideTests autoload)
-	MiniDebugger
-	MiniInspector
-	MiniLogger
-	(NaiveRomanNumberFormatNotification autoload)
-	NameSpace
-	(NotANumber autoload)
-	(NumberConversionError autoload)
-	(NumberFormatError autoload)
-	OSErrorHolder
-	OSProcess
-	ObjectMemory
-	(OpenVMSFileHandle vms )
-	(OpenVMSFilename vms )
-	(OpenVMSOperatingSystem vms )
-	(PCFilename win32 )
-	PackageId
-	ProcessorScheduler
-	ProgrammingLanguage
-	Project
-	ProjectDefinition
-	(QualifiedName autoload)
-	ReadEvalPrintLoop
-	RecursionLock
-	Registry
-	(RomanNumberFormatError autoload)
-	Semaphore
-	SharedPool
-	Signal
-	Smalltalk
-	(SmalltalkDesktop autoload)
-	StandaloneStartup
-	Stream
-	SystemChangeNotifier
-	(SystemNotification autoload)
-	(TextCollectorStream autoload)
-	(UnboundedExternalStream autoload)
-	UndefinedObject
-	(UnixDesktop autoload)
-	UserMessage
-	Visitor
-	(WeakValueIdentityDictionary autoload)
-	(Win32Constants win32 )
-	(Win32FILEHandle win32 )
-	(Win32Handle win32 )
-	(Win32OperatingSystem win32 )
-	(Win32Process win32 )
-	(WindowsDesktop autoload)
-	(XDGDesktop autoload)
-	AbstractTime
-	ApplicationDefinition
-	ArithmeticValue
-	AspectVisitor
-	AutoDeletedFilename
-	Bag
-	BlockContext
-	BuiltinLookup
-	CachingRegistry
-	Character
-	#'CharacterEncoderImplementations::ISO10646_1'
-	#'CharacterEncoderImplementations::SingleByteEncoder'
-	#'CharacterEncoderImplementations::TwoByteEncoder'
-	CompiledCode
-	ControlInterrupt
-	Date
-	Exception
-	ExternalFunction
-	False
-	HandleRegistry
-	HashStream
-	InlineObjectPrototype
-	KeyedCollection
-	LibraryDefinition
-	LookupKey
-	MessageSend
-	NamespaceAwareLookup
-	NoHandlerError
-	Notification
-	OSHandle
-	PeekableStream
-	Process
-	QuerySignal
-	Rectangle
-	SequenceableCollection
-	Set
-	SmalltalkChunkFileSourceReader
-	SmalltalkLanguage
-	True
-	UnixFilename
-	WeakInterestConverter
-	ArrayedCollection
-	Association
-	Block
-	#'CharacterEncoderImplementations::ASCII'
-	#'CharacterEncoderImplementations::CP437'
-	#'CharacterEncoderImplementations::EBCDIC'
-	#'CharacterEncoderImplementations::ISO10646_to_UTF16BE'
-	#'CharacterEncoderImplementations::ISO10646_to_UTF8'
-	#'CharacterEncoderImplementations::ISO8859_1'
-	#'CharacterEncoderImplementations::ISO8859_10'
-	#'CharacterEncoderImplementations::ISO8859_11'
-	#'CharacterEncoderImplementations::ISO8859_13'
-	#'CharacterEncoderImplementations::ISO8859_14'
-	#'CharacterEncoderImplementations::ISO8859_15'
-	#'CharacterEncoderImplementations::ISO8859_16'
-	#'CharacterEncoderImplementations::ISO8859_2'
-	#'CharacterEncoderImplementations::ISO8859_3'
-	#'CharacterEncoderImplementations::ISO8859_4'
-	#'CharacterEncoderImplementations::ISO8859_5'
-	#'CharacterEncoderImplementations::ISO8859_6'
-	#'CharacterEncoderImplementations::ISO8859_7'
-	#'CharacterEncoderImplementations::ISO8859_8'
-	#'CharacterEncoderImplementations::KOI8_R'
-	#'CharacterEncoderImplementations::MS_Ansi'
-	#'CharacterEncoderImplementations::MS_Arabic'
-	#'CharacterEncoderImplementations::MS_Baltic'
-	#'CharacterEncoderImplementations::MS_Cyrillic'
-	#'CharacterEncoderImplementations::MS_EastEuropean'
-	#'CharacterEncoderImplementations::MS_Greek'
-	#'CharacterEncoderImplementations::MS_Hebrew'
-	#'CharacterEncoderImplementations::MS_Symbol'
-	#'CharacterEncoderImplementations::MS_Turkish'
-	ClassDescription
-	Complex
-	ControlRequest
-	Dictionary
-	EncodedStream
-	EndOfStreamNotification
-	Error
-	ExternalFunctionCallback
-	ExternalLibraryFunction
-	HaltInterrupt
-	IdentitySet
-	LinkedList
-	MD5Stream
-	Method
-	MethodDictionary
-	Number
-	OSFileHandle
-	ObjectCoder
-	OrderedCollection
-	Point
-	PositionableStream
-	Query
-	ReadOnlySequenceableCollection
-	RecursiveStoreError
-	SHA1Stream
-	Time
-	TimeoutNotification
-	Timestamp
-	UserInterrupt
-	UserNotification
-	YesToAllConfirmation
-	#'stx_libbasic'
-	AbortAllOperationRequest
-	AbortAllOperationWantedQuery
-	AbstractSourceFileWriter
-	ActivityNotification
-	Array
-	BreakPointInterrupt
-	#'CharacterEncoderImplementations::ISO10646_to_UTF16LE'
-	#'CharacterEncoderImplementations::ISO8859_9'
-	#'CharacterEncoderImplementations::KOI8_U'
-	CheapBlock
-	ClassBuildError
-	ElementBoundsError
-	FileDirectory
-	Fraction
-	GetOpt
-	IdentityDictionary
-	InlineObjectClassDescription
-	Integer
-	Interval
-	IsDebuggingQuery
-	LimitedPrecisionReal
-	MeasurementValue
-	MetaNumber
-	Metaclass
-	MethodWithBreakpoints
-	OsError
-	PluginSupport
-	ProceedableError
-	QueryWithoutDefault
-	ReadStream
-	RecursionError
-	RecursiveExceptionError
-	RestartProcessRequest
-	SameForAllNotification
-	SemaphoreSet
-	SignalSet
-	SnapshotError
-	SortedCollection
-	StringCollection
-	TerminateProcessRequest
-	UninterpretedBytes
-	(UnixFileDescriptorHandle unix)
-	(UnixFileHandle unix)
-	(UnixOperatingSystem unix)
-	UserConfirmation
-	UserInformation
-	UtcTimestamp
-	VMInternalError
-	VarArgBlock
-	Warning
-	WeakArray
-	WeakIdentitySet
-	WeakValueDictionary
-	WriteStream
-	AbortOperationRequest
-	AbstractNumberVector
-	AllocationFailure
-	AmbiguousMessage
-	ArithmeticError
-	AssertionFailedError
-	AutoloadMetaclass
-	ByteArray
-	CharacterArray
-	CharacterWriteStream
-	Class
-	ContextError
-	ConversionError
-	DeepCopyError
-	ExceptionHandlerSet
-	ExecutionError
-	ExternalBytes
-	FixedPoint
-	Float
-	ImmutableArray
-	Infinity
-	InvalidPatchError
-	LargeInteger
-	LongFloat
-	MessageNotUnderstood
-	NoModificationError
-	NotFoundError
-	OSSignalInterrupt
-	OsIllegalOperation
-	OsInaccessibleError
-	OsInvalidArgumentsError
-	OsNeedRetryError
-	OsNoResourcesError
-	OsNotification
-	OsTransferFaultError
-	PrivateMetaclass
-	ProceedError
-	ReadWriteStream
-	ShortFloat
-	SignalError
-	SmallInteger
-	SmalltalkChunkFileSourceWriter
-	SomeNumber
-	StreamError
-	SubclassResponsibilityError
-	TimeoutError
-	UnimplementedFunctionalityError
-	UserPreferences
-	VarArgCheapBlock
-	WeakIdentityDictionary
-	ArgumentError
-	CannotResumeError
-	CannotReturnError
-	CharacterEncoderError
-	DateConversionError
-	DomainError
-	DoubleArray
-	EndOfStreamError
-	ExternalStream
-	ExternalStructure
-	FloatArray
-	ImmutableByteArray
-	IncompleteNextCountError
-	IndexNotFoundError
-	InvalidCodeError
-	InvalidModeError
-	InvalidOperationError
-	KeyNotFoundError
-	MallocFailure
-	NonBooleanReceiverError
-	OpenError
-	PositionError
-	PositionOutOfBoundsError
-	PrimitiveFailure
-	RangeError
-	ReadError
-	StreamIOError
-	StreamNotOpenError
-	String
-	TimeConversionError
-	TwoByteString
-	UnorderedNumbersError
-	UnprotectedExternalBytes
-	WeakDependencyDictionary
-	WriteError
-	WrongProceedabilityError
-	BadLiteralsError
-	DecodingError
-	EncodingError
-	FileDoesNotExistException
-	FileStream
-	ImmutableString
-	InvalidByteCodeError
-	InvalidInstructionError
-	InvalidReadError
-	InvalidWriteError
-	NoByteCodeError
-	NonIntegerIndexError
-	NonPositionableExternalStream
-	OverflowError
-	SubscriptOutOfBoundsError
-	Symbol
-	UnderflowError
-	Unicode16String
-	WrongNumberOfArgumentsError
-	ZeroDivide
-	CharacterRangeError
-	DirectoryStream
-	InvalidEncodingError
-	PipeStream
-	MethodNotAppropriateError
-	AbstractClassInstantiationError
-	InvalidTypeError
-	(#'CharacterEncoderImplementations::ISO10646_to_XMLUTF8' autoload)
+        "<className> or (<className> attributes...) in load order"
+        Autoload
+        Object
+        ProtoObject
+        (AbstractDesktop autoload)
+        AbstractOperatingSystem
+        AbstractSourceFileReader
+        Annotation
+        (BadRomanNumberFormatError autoload)
+        Behavior
+        Boolean
+        CharacterEncoder
+        (#'CharacterEncoderImplementations::BIG5' autoload)
+        (#'CharacterEncoderImplementations::CNS11643' autoload)
+        (#'CharacterEncoderImplementations::GB2313_1980' autoload)
+        (#'CharacterEncoderImplementations::HANGUL' autoload)
+        (#'CharacterEncoderImplementations::ISO10646_to_JavaText' autoload)
+        (#'CharacterEncoderImplementations::ISO10646_to_SGML' autoload)
+        (#'CharacterEncoderImplementations::JIS0201' autoload)
+        (#'CharacterEncoderImplementations::JIS0208' autoload)
+        (#'CharacterEncoderImplementations::JIS0208_to_EUC' autoload)
+        (#'CharacterEncoderImplementations::JIS0208_to_JIS7' autoload)
+        (#'CharacterEncoderImplementations::JIS0208_to_SJIS' autoload)
+        (#'CharacterEncoderImplementations::JIS0212' autoload)
+        (#'CharacterEncoderImplementations::JOHAB' autoload)
+        (#'CharacterEncoderImplementations::KOI7' autoload)
+        (#'CharacterEncoderImplementations::KSC5601' autoload)
+        (#'CharacterEncoderImplementations::MAC_Arabic' autoload)
+        (#'CharacterEncoderImplementations::MAC_CentralEuropean' autoload)
+        (#'CharacterEncoderImplementations::MAC_Croatian' autoload)
+        (#'CharacterEncoderImplementations::MAC_Cyrillic' autoload)
+        (#'CharacterEncoderImplementations::MAC_Dingbats' autoload)
+        (#'CharacterEncoderImplementations::MAC_Farsi' autoload)
+        (#'CharacterEncoderImplementations::MAC_Greek' autoload)
+        (#'CharacterEncoderImplementations::MAC_Hebrew' autoload)
+        (#'CharacterEncoderImplementations::MAC_Iceland' autoload)
+        (#'CharacterEncoderImplementations::MAC_Japanese' autoload)
+        (#'CharacterEncoderImplementations::MAC_Korean' autoload)
+        (#'CharacterEncoderImplementations::MAC_Roman' autoload)
+        (#'CharacterEncoderImplementations::MAC_Romanian' autoload)
+        (#'CharacterEncoderImplementations::MAC_Symbol' autoload)
+        (#'CharacterEncoderImplementations::MAC_Thai' autoload)
+        (#'CharacterEncoderImplementations::MAC_Turkish' autoload)
+        (#'CharacterEncoderImplementations::NEXT' autoload)
+        ClassBuilder
+        ClassCategoryReader
+        (CmdLineOption autoload)
+        (CmdLineOptionError autoload)
+        (CmdLineParser autoload)
+        (CmdLineParserTest autoload)
+        Collection
+        ConfigurableFeatures
+        Context
+        Continuation
+        Delay
+        ExecutableFunction
+        ExternalAddress
+        ExternalLibrary
+        Filename
+        (GNOMEDesktop autoload)
+        GenericException
+        Geometric
+        (ImaginaryResultError autoload)
+        InlineObject
+        InterestConverter
+        (LargeFloat autoload)
+        Link
+        Lookup
+        (MacFilename macos autoload)
+        Magnitude
+        (MappedExternalBytes autoload)
+        Message
+        (MethodOverrideTests autoload)
+        MiniDebugger
+        MiniInspector
+        MiniLogger
+        (NaiveRomanNumberFormatNotification autoload)
+        NameSpace
+        (NotANumber autoload)
+        (NumberConversionError autoload)
+        (NumberFormatError autoload)
+        OSErrorHolder
+        OSProcess
+        ObjectMemory
+        (OpenVMSFileHandle vms )
+        (OpenVMSFilename vms )
+        (OpenVMSOperatingSystem vms )
+        (PCFilename win32 )
+        PackageId
+        ProcessorScheduler
+        ProgrammingLanguage
+        Project
+        ProjectDefinition
+        (QualifiedName autoload)
+        ReadEvalPrintLoop
+        RecursionLock
+        Registry
+        (RomanNumberFormatError autoload)
+        Semaphore
+        SharedPool
+        Signal
+        Smalltalk
+        (SmalltalkDesktop autoload)
+        StandaloneStartup
+        Stream
+        SystemChangeNotifier
+        (SystemNotification autoload)
+        (TextCollectorStream autoload)
+        (UnboundedExternalStream autoload)
+        UndefinedObject
+        (UnixDesktop autoload)
+        UserMessage
+        Visitor
+        (WeakValueIdentityDictionary autoload)
+        (Win32Constants win32 )
+        (Win32FILEHandle win32 )
+        (Win32Handle win32 )
+        (Win32OperatingSystem win32 )
+        (Win32Process win32 )
+        (WindowsDesktop autoload)
+        (XDGDesktop autoload)
+        AbstractTime
+        ApplicationDefinition
+        ArithmeticValue
+        AspectVisitor
+        AutoDeletedFilename
+        Bag
+        BlockContext
+        BuiltinLookup
+        CachingRegistry
+        Character
+        #'CharacterEncoderImplementations::ISO10646_1'
+        #'CharacterEncoderImplementations::SingleByteEncoder'
+        #'CharacterEncoderImplementations::TwoByteEncoder'
+        CompiledCode
+        ControlInterrupt
+        Date
+        Exception
+        ExternalFunction
+        False
+        HandleRegistry
+        HashStream
+        InlineObjectPrototype
+        KeyedCollection
+        LibraryDefinition
+        LookupKey
+        MessageSend
+        NamespaceAwareLookup
+        NoHandlerError
+        Notification
+        OSHandle
+        PeekableStream
+        Process
+        QuerySignal
+        Rectangle
+        SequenceableCollection
+        Set
+        SmalltalkChunkFileSourceReader
+        SmalltalkLanguage
+        True
+        UnixFilename
+        WeakInterestConverter
+        ArrayedCollection
+        Association
+        Block
+        #'CharacterEncoderImplementations::ASCII'
+        #'CharacterEncoderImplementations::CP437'
+        #'CharacterEncoderImplementations::EBCDIC'
+        #'CharacterEncoderImplementations::ISO10646_to_UTF16BE'
+        #'CharacterEncoderImplementations::ISO10646_to_UTF8'
+        #'CharacterEncoderImplementations::ISO8859_1'
+        #'CharacterEncoderImplementations::ISO8859_10'
+        #'CharacterEncoderImplementations::ISO8859_11'
+        #'CharacterEncoderImplementations::ISO8859_13'
+        #'CharacterEncoderImplementations::ISO8859_14'
+        #'CharacterEncoderImplementations::ISO8859_15'
+        #'CharacterEncoderImplementations::ISO8859_16'
+        #'CharacterEncoderImplementations::ISO8859_2'
+        #'CharacterEncoderImplementations::ISO8859_3'
+        #'CharacterEncoderImplementations::ISO8859_4'
+        #'CharacterEncoderImplementations::ISO8859_5'
+        #'CharacterEncoderImplementations::ISO8859_6'
+        #'CharacterEncoderImplementations::ISO8859_7'
+        #'CharacterEncoderImplementations::ISO8859_8'
+        #'CharacterEncoderImplementations::KOI8_R'
+        #'CharacterEncoderImplementations::MS_Ansi'
+        #'CharacterEncoderImplementations::MS_Arabic'
+        #'CharacterEncoderImplementations::MS_Baltic'
+        #'CharacterEncoderImplementations::MS_Cyrillic'
+        #'CharacterEncoderImplementations::MS_EastEuropean'
+        #'CharacterEncoderImplementations::MS_Greek'
+        #'CharacterEncoderImplementations::MS_Hebrew'
+        #'CharacterEncoderImplementations::MS_Symbol'
+        #'CharacterEncoderImplementations::MS_Turkish'
+        ClassDescription
+        Complex
+        ControlRequest
+        Dictionary
+        EncodedStream
+        EndOfStreamNotification
+        Error
+        ExternalFunctionCallback
+        ExternalLibraryFunction
+        HaltInterrupt
+        IdentitySet
+        LinkedList
+        MD5Stream
+        Method
+        MethodDictionary
+        Number
+        OSFileHandle
+        ObjectCoder
+        OrderedCollection
+        Point
+        PositionableStream
+        Query
+        ReadOnlySequenceableCollection
+        RecursiveStoreError
+        SHA1Stream
+        Time
+        TimeoutNotification
+        Timestamp
+        UserInterrupt
+        UserNotification
+        YesToAllConfirmation
+        #'stx_libbasic'
+        AbortAllOperationRequest
+        AbortAllOperationWantedQuery
+        AbstractSourceFileWriter
+        ActivityNotification
+        Array
+        BreakPointInterrupt
+        #'CharacterEncoderImplementations::ISO10646_to_UTF16LE'
+        #'CharacterEncoderImplementations::ISO8859_9'
+        #'CharacterEncoderImplementations::KOI8_U'
+        CheapBlock
+        ClassBuildError
+        ElementBoundsError
+        FileDirectory
+        Fraction
+        GetOpt
+        IdentityDictionary
+        InlineObjectClassDescription
+        Integer
+        Interval
+        IsDebuggingQuery
+        LimitedPrecisionReal
+        MeasurementValue
+        MetaNumber
+        Metaclass
+        MethodWithBreakpoints
+        OsError
+        PluginSupport
+        ProceedableError
+        QueryWithoutDefault
+        ReadStream
+        RecursionError
+        RecursiveExceptionError
+        RestartProcessRequest
+        SameForAllNotification
+        SemaphoreSet
+        SignalSet
+        SnapshotError
+        SortedCollection
+        StringCollection
+        TerminateProcessRequest
+        UninterpretedBytes
+        (UnixFileDescriptorHandle unix)
+        (UnixFileHandle unix)
+        (UnixOperatingSystem unix)
+        UserConfirmation
+        UserInformation
+        UtcTimestamp
+        VMInternalError
+        VarArgBlock
+        Warning
+        WeakArray
+        WeakIdentitySet
+        WeakValueDictionary
+        WriteStream
+        AbortOperationRequest
+        AbstractNumberVector
+        AllocationFailure
+        AmbiguousMessage
+        ArithmeticError
+        AssertionFailedError
+        AutoloadMetaclass
+        ByteArray
+        CharacterArray
+        CharacterWriteStream
+        Class
+        ContextError
+        ConversionError
+        DeepCopyError
+        ExceptionHandlerSet
+        ExecutionError
+        ExternalBytes
+        FixedPoint
+        Float
+        ImmutableArray
+        Infinity
+        InvalidPatchError
+        LargeInteger
+        LongFloat
+        MessageNotUnderstood
+        NoModificationError
+        NotFoundError
+        OSSignalInterrupt
+        OsIllegalOperation
+        OsInaccessibleError
+        OsInvalidArgumentsError
+        OsNeedRetryError
+        OsNoResourcesError
+        OsNotification
+        OsTransferFaultError
+        PrivateMetaclass
+        ProceedError
+        ReadWriteStream
+        ShortFloat
+        SignalError
+        SmallInteger
+        SmalltalkChunkFileSourceWriter
+        SomeNumber
+        StreamError
+        SubclassResponsibilityError
+        TimeoutError
+        UnimplementedFunctionalityError
+        UserPreferences
+        VarArgCheapBlock
+        WeakIdentityDictionary
+        ArgumentError
+        CannotResumeError
+        CannotReturnError
+        CharacterEncoderError
+        DateConversionError
+        DomainError
+        DoubleArray
+        EndOfStreamError
+        ExternalStream
+        ExternalStructure
+        FloatArray
+        ImmutableByteArray
+        IncompleteNextCountError
+        IndexNotFoundError
+        InvalidCodeError
+        InvalidModeError
+        InvalidOperationError
+        KeyNotFoundError
+        MallocFailure
+        NonBooleanReceiverError
+        OpenError
+        PositionError
+        PositionOutOfBoundsError
+        PrimitiveFailure
+        RangeError
+        ReadError
+        StreamIOError
+        StreamNotOpenError
+        String
+        TimeConversionError
+        TwoByteString
+        UnorderedNumbersError
+        UnprotectedExternalBytes
+        WeakDependencyDictionary
+        WriteError
+        WrongProceedabilityError
+        BadLiteralsError
+        DecodingError
+        EncodingError
+        FileDoesNotExistException
+        FileStream
+        ImmutableString
+        InvalidByteCodeError
+        InvalidInstructionError
+        InvalidReadError
+        InvalidWriteError
+        NoByteCodeError
+        NonIntegerIndexError
+        NonPositionableExternalStream
+        OverflowError
+        SubscriptOutOfBoundsError
+        Symbol
+        UnderflowError
+        Unicode16String
+        WrongNumberOfArgumentsError
+        ZeroDivide
+        CharacterRangeError
+        DirectoryStream
+        InvalidEncodingError
+        PipeStream
+        MethodNotAppropriateError
+        AbstractClassInstantiationError
+        InvalidTypeError
+        (#'CharacterEncoderImplementations::ISO10646_to_XMLUTF8' autoload)
     )
 !
 
@@ -503,6 +506,7 @@
     )
 ! !
 
+
 !stx_libbasic class methodsFor:'description - project information'!
 
 companyName
@@ -525,6 +529,7 @@
     "Modified: / 18-07-2012 / 19:10:19 / cg"
 ! !
 
+
 !stx_libbasic class methodsFor:'description - svn'!
 
 svnRevisionNr
@@ -534,16 +539,18 @@
     ^ "$SVN-Revision:"'exported'"$"
 ! !
 
+
 !stx_libbasic class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.109 2012-11-02 15:07:15 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.110 2013-03-04 12:43:32 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.109 2012-11-02 15:07:15 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.110 2013-03-04 12:43:32 cg Exp $'
 !
 
 version_SVN
     ^ '§ Id: stx_libbasic.st 10648 2011-06-23 15:55:10Z vranyj1  §'
 ! !
+