--- 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(©Context, ctx, sizeof(copyContext));
+ memcpy(©Context, ctx, sizeof(SHA1_CTX));
SHA1Final(__ByteArrayInstPtr(digest)->ba_element, ©Context);
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 §'
! !
+