Merged 89d51443ba6f and 0d02e659675b (branch default - CVS HEAD) jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 21 Jun 2013 19:04:37 +0100
branchjv
changeset 18067 27352a7171ab
parent 18066 89d51443ba6f (current diff)
parent 15416 0d02e659675b (diff)
child 18068 3e841ddcb18a
Merged 89d51443ba6f and 0d02e659675b (branch default - CVS HEAD)
ApplicationDefinition.st
CharacterArray.st
ClassDescription.st
Collection.st
CompiledCode.st
ExternalBytes.st
GenericException.st
Infinity.st
Method.st
Object.st
OrderedCollection.st
ProcessorScheduler.st
ProjectDefinition.st
Stream.st
Win32OperatingSystem.st
--- a/.hgtags	Mon Jun 10 17:32:35 2013 +0100
+++ b/.hgtags	Fri Jun 21 19:04:37 2013 +0100
@@ -5,8 +5,6 @@
 03f1bd57c0016b7761c5a4828408b27157788075 release
 135cee5b1fe83574ef2e1336d17930bea5d8fb63 expecco_2_4_1
 187baeafc381324b2be71399be1263af19f79b1a rel5_2_8
-1b0f7426a7bb86818ed31dd0aa9b0d81edaa7028 expecco_2_5_0
-1b0f7426a7bb86818ed31dd0aa9b0d81edaa7028 stable
 27fb4984e97ba85d254d442042a0a57688f8f586 expecco_1_7_0rc8
 288a01786ed5f59915047167fba6c00b36226c4a expeccoNET_1_5_1rc1
 28ef0472cf2f08acd9c2056a517e1fae4bc8033d expecco_2_2_5
@@ -16,6 +14,8 @@
 471ed2bb3bf16111afbf2e0d6dfb422d78294aca expecco_1_0_3
 520c27f8cae267240021277e257e013b60b9cdb8 rel5_2_2
 54dd825d531c7adec355b2ffbdd6b66d00d4678a expecco_1_6_0rc5
+5fcd709c7fd282e9c55d8642d1a6b1d5d77baf5e expecco_2_5_0
+5fcd709c7fd282e9c55d8642d1a6b1d5d77baf5e stable
 615c4fe0f449a6be077b11450d39fb6560b1695a rel4_1_3_1
 62ff001533901d30b624539b2f404d73f01db468 expecco_1_6_0
 664991bb352e0a9f98bd7d36ec1c0b6a75e649eb rel5_4_6
--- a/ApplicationDefinition.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/ApplicationDefinition.st	Fri Jun 21 19:04:37 2013 +0100
@@ -919,7 +919,8 @@
         at: 'REQUIRED_LIBS' put: (self generateRequiredLibs_bc_dot_mak); 
         at: 'PREREQUISITES_LIBS' put: (self generatePreRequisiteLines_bc_dot_mak );  
         at: 'DEPENDENCIES' put: (self generateDependencies_win32);
-        at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_bc_dot_mak ); 
+        at: 'SUBPROJECT_LIBS' put: (self generateSubProjectLibs_bc_dot_mak ); 
+        at: 'SUBPROJECTS_LINES' put: (self generateSubProjectLines_bc_dot_mak ); 
         at: 'BUILD_TARGET' put: (self buildTarget );
         at: 'REQUIRED_SUPPORT_DIRS' put: (self extraTargets asStringWith:' ');
         yourself.
@@ -1062,11 +1063,11 @@
         at: 'MAIN_DEFINES' put: (self mainDefines);
         at: 'REQUIRED_LIBS' put: (self generateRequiredLibs_make_dot_proto);  
         at: 'PREREQUISITES_LIBS' put: (self generatePreRequisiteLines_make_dot_proto);  
-        at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto); 
+        at: 'SUBPROJECTS_LINES' put: (self generateSubProjectLines_make_dot_proto); 
+        at: 'SUBPROJECT_LIBS' put: (self generateSubProjectLibs_make_dot_proto); 
         at: 'REQUIRED_LIBOBJS' put: (self generateRequiredLibobjs_make_dot_proto);
         at: 'REQUIRED_LINK_LIBOBJS' put: (self generateRequiredLinkLibobjs_make_dot_proto);
         at: 'DEPENDENCIES' put: (self generateDependencies_unix);
-        at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto ); 
         at: 'REQUIRED_SUPPORT_DIRS' put: (self extraTargets asStringWith:' ');
         at: 'PRODUCT_NAME' put: (self productName);
         at: 'PRODUCT_FILENAME' put: (self productFilename);
@@ -1362,7 +1363,7 @@
 subProjectLine_bc_dot_mak_mappings: aProjectID 
     ^ Dictionary new
         at: 'LIBRARY_NAME' put: (self libraryNameFor: aProjectID );     
-        at: 'PATH_TO_SUB_PROJECT' put: ( (PackageId from:aProjectID) module,'\',(PackageId from:aProjectID) directory copy replaceAll:$/ with:$\ ); 
+        at: 'PATH_TO_SUB_PROJECT' put: (self msdosPathToPackage:aProjectID from:self package); 
         at: 'PATH_TO_MYPROJECT' put: (self msdosPathToPackage: self package from: aProjectID); 
         yourself
 
@@ -1371,9 +1372,9 @@
 
 subProjectLine_make_dot_proto_mappings: aProjectID 
     ^ Dictionary new
-        at: 'LIBRARY_NAME' put: (self libraryNameFor: aProjectID );     
-        at: 'PATH_TO_SUB_PROJECT' put: ( (PackageId from:aProjectID) module,'\',(PackageId from:aProjectID) directory copy replaceAll:$/ with:$\ ); 
-        at: 'PATH_TO_MYPROJECT' put: (self unixPathToPackage: self package from: aProjectID); 
+        at: 'LIBRARY_NAME' put: (self libraryNameFor:aProjectID );     
+        at: 'PATH_TO_SUB_PROJECT' put: (self unixPathToPackage:aProjectID from:self package); 
+        at: 'PATH_TO_MYPROJECT' put: (self unixPathToPackage:self package from:aProjectID); 
         yourself
 
     "Modified: / 14-09-2006 / 18:59:26 / cg"
@@ -1494,20 +1495,20 @@
 !
 
 generateRequiredLibobjs_make_dot_proto
-    |libobjPath libPath|
-
     ^ String streamContents:[:s |
         self allPreRequisitesSorted do:[:projectID |
+            |libobjPath libPath|
+
             libPath := self pathToPackage_unix:projectID.
             libobjPath := libPath , '/', (self libraryNameFor:projectID).
-            s space; nextPutAll: libobjPath,'$(O_EXT)'; nextPutLine:' \'.
+            s space; nextPutAll: libobjPath; nextPutLine:'$(O_EXT) \'.
         ].
 
         s cr.
     ].
 
     "
-     alspa_batch_application generateRequiredLibobjs_make_dot_proto      
+     exept_expecco_application generateRequiredLibobjs_make_dot_proto      
     "
 !
 
@@ -1515,20 +1516,19 @@
     ^ String streamContents:[:s |
         s nextPutLine:' \'.
         self allPreRequisitesSorted do:[:projectID | 
-            s space; nextPutAll:(self libraryNameFor:projectID),'.dll'; nextPutLine:' \'.
+            s space; nextPutAll:(self libraryNameFor:projectID); nextPutLine:'.dll \'.
         ].
-        self subProjects do:[:projectID | 
-            s space; nextPutAll:(self libraryNameFor:projectID),'.dll'; nextPutLine:' \'.
-        ].
+
+"/ Subprojects are not linked to the exe!!
+"/        self subProjects do:[:projectID | 
+"/            s space; nextPutAll:(self libraryNameFor:projectID),'.dll'; nextPutLine:' \'.
+"/        ].
 
         self isGUIApplication ifTrue:[
             self guiClassFileNames_win32 do:[:eachFilename |
                 s space; nextPutAll:eachFilename; nextPutLine:' \'.
             ].
         ].
-"/        self subProjects do:[:projectID | 
-"/            s space; nextPutAll:(self libraryNameFor:projectID),'.dll'; nextPutLine:' \'.
-"/        ].
         s cr.
     ].
 
@@ -1545,18 +1545,16 @@
         self allPreRequisitesSorted do:[:projectID | 
             s space; nextPutAll:(self libraryNameFor:projectID); nextPutLine:' \'.
         ].
-        self subProjects do:[:projectID | 
-            s space; nextPutAll:(self libraryNameFor:projectID); nextPutLine:' \'.
-        ].
+"/ Subprojects are only built, but not linked to the executable!!
+"/        self subProjects do:[:projectID | 
+"/            s space; nextPutAll:(self libraryNameFor:projectID); nextPutLine:' \'.
+"/        ].
 
         self isGUIApplication ifTrue:[
             self guiClassFileNames_unix do:[:eachFilename |
                 s space; nextPutAll:eachFilename; nextPutLine:' \'.
             ].
         ].
-"/        self subProjects do:[:projectID | 
-"/            s space; nextPutAll:(self libraryNameFor:projectID); nextPutLine:' \'.
-"/        ].
         s cr.
     ].
 
@@ -1588,10 +1586,48 @@
     "
 !
 
+generateSubProjectLibs_bc_dot_mak         
+    ^ String streamContents:[:s |
+        self subProjects do:[:projectID | 
+            |libPath libobjPath|
+
+            libPath := self pathToPackage_win32:projectID.
+            libobjPath := libPath , '\', (self libraryNameFor:projectID).
+            s space; nextPutAll:libobjPath; nextPutLine:'.dll \'.
+        ].
+        s cr.
+    ].
+
+    "
+     exept_expecco_application generateSubProjectLibs_bc_dot_mak 
+     cg_newCompiler_driver_stc generateSubProjectLines_bc_dot_mak 
+    "
+
+    "Created: / 09-08-2006 / 11:24:39 / fm"
+    "Modified: / 14-09-2006 / 18:46:09 / cg"
+!
+
+generateSubProjectLibs_make_dot_proto
+    ^ String streamContents:[:s |
+        self subProjects do:[:projectID | 
+            |libPath libobjPath|
+
+            libPath := self pathToPackage_unix:projectID.
+            libobjPath := libPath , '/', (self libraryNameFor:projectID).
+            s space; nextPutAll:libobjPath; nextPutLine:'$(O_EXT) \'.
+        ].
+        s cr.
+    ].
+
+    "
+     exept_expecco_application generateSubProjectLibs_make_dot_proto      
+    "
+!
+
 generateSubProjectLines_bc_dot_mak         
 
     ^ String streamContents:[:s |
-        self subProjects do:[:projectID |
+        self effectiveSubProjects do:[:projectID |
             |mappings newObjectLine|
 
             mappings := self subProjectLine_bc_dot_mak_mappings: projectID.
@@ -1614,12 +1650,12 @@
 generateSubProjectLines_make_dot_proto         
 
     ^ String streamContents:[:s |
-        self subProjects do:[:projectID |
+        self effectiveSubProjects do:[:projectID |
             |mappings newObjectLine|
 
             mappings := self subProjectLine_make_dot_proto_mappings: projectID.
             newObjectLine := self replaceMappings: mappings
-                                in: self subProjectLine_bc_dot_mak.
+                                in: self subProjectLine_make_dot_proto.
             s nextPutAll:newObjectLine. 
             s cr. 
         ]
@@ -1814,7 +1850,7 @@
 %(STX_SOURCE_RULES)
 
 %(PREREQUISITES_LIBS)      
-%(SUBPROJECTS_LIBS)
+%(SUBPROJECTS_LINES)
 
 sources\NUL: 
         mkdir sources
@@ -2209,6 +2245,15 @@
     "Created: / 15-10-2006 / 12:50:00 / cg"
 !
 
+defineExtensionLine_nsi_for:extension 
+    "the template code for a single extenions definition line in the <appname>.nsi file"
+    
+    ^ '  WriteRegStr HKCR ".' , extension 
+        , '" "" "%(MODULE_KEY).%(PRODUCT_FILENAME).1"'
+
+    "Created: / 15-10-2006 / 12:50:00 / cg"
+!
+
 defineSTXSourceLine_nsi_for: projectID
 
 ^      
@@ -2313,12 +2358,14 @@
 REQUIRED_LINK_LIBOBJS=%(REQUIRED_LINK_LIBOBJS)
 REQUIRED_SUPPORT_DIRS=%(REQUIRED_SUPPORT_DIRS)
 
+SUBPROJECT_LIBS=%(SUBPROJECT_LIBS)
+
 target: %(BUILD_TARGET)
 
 all::   prereq ALL_NP
 
 # like ALL, but not prereqs
-ALL_NP:: exe $(REQUIRED_SUPPORT_DIRS) $(SETUP_RULE)
+ALL_NP:: exe $(SUBPROJECT_LIBS) $(REQUIRED_SUPPORT_DIRS) $(SETUP_RULE)
 
 exe:    %(APPLICATION) 
 
@@ -2387,7 +2434,7 @@
 %(STX_RESOURCE_RULES)
 
 %(PREREQUISITES_LIBS)
-%(SUBPROJECTS_LIBS)
+%(SUBPROJECTS_LINES)
 
 %(ADDITIONAL_RULES)
 
@@ -2623,7 +2670,6 @@
 # Others might be autoloaded or loaded explicit using "Smalltalk loadPackage:xxx".
 #
 %(ALLPREREQUISITE_LIBS)
-%(SUBPROJECT_LIBS)
 '
 
     "Created: / 08-08-2006 / 12:26:58 / fm"
@@ -2944,8 +2990,11 @@
 '%(FILE_NAME).so: %(MODULE_DIRECTORY)/%(FILE_NAME).so
         ln -sf %(MODULE_DIRECTORY)/%(FILE_NAME).so .
 
-%(MODULE_DIRECTORY)/%(FILE_NAME).so: $(FORCE)
+%(MODULE_DIRECTORY)/%(FILE_NAME).so: %(MODULE_DIRECTORY)/makefile $(FORCE)
         cd %(MODULE_DIRECTORY) && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+
+%(MODULE_DIRECTORY)/makefile: %(MODULE_DIRECTORY)/Make.proto
+        $(TOP)/rules/stmkmf --cd %(MODULE_DIRECTORY)
 '
 
     "Modified: / 09-02-2007 / 16:22:47 / cg"
@@ -2953,18 +3002,29 @@
 
 subProjectLine_bc_dot_mak
 
-^'%(LIBRARY_NAME).dll: $(TOP)\..\%(PATH_TO_SUB_PROJECT)\$(OBJDIR)\%(LIBRARY_NAME).dll
-        copy $(TOP)\..\%(PATH_TO_SUB_PROJECT)\$(OBJDIR)\%(LIBRARY_NAME).dll *.*
-
-$(TOP)\..\%(PATH_TO_SUB_PROJECT)\$(OBJDIR)\%(LIBRARY_NAME).dll:
-        cd $(TOP)\..\%(PATH_TO_SUB_PROJECT)
-        $(MAKE_BAT)
-        -cd $(TOP)\..\%(PATH_TO_MYPROJECT)
+^'%(LIBRARY_NAME).dll: %(PATH_TO_SUB_PROJECT)\$(OBJDIR)\%(LIBRARY_NAME).dll
+        copy %(PATH_TO_SUB_PROJECT)\$(OBJDIR)\%(LIBRARY_NAME).dll *.*
+
+%(PATH_TO_SUB_PROJECT)\$(OBJDIR)\%(LIBRARY_NAME).dll:
+        pushd %(PATH_TO_SUB_PROJECT) & $(MAKE_BAT)
 '
 
     "Modified: / 26-07-2010 / 12:26:01 / cg"
 !
 
+subProjectLine_make_dot_proto
+
+^'%(LIBRARY_NAME).so: %(PATH_TO_SUB_PROJECT)/%(LIBRARY_NAME).so
+        ln -sf %(PATH_TO_SUB_PROJECT)/%(LIBRARY_NAME).so .
+
+%(PATH_TO_SUB_PROJECT)/%(LIBRARY_NAME).so: %(PATH_TO_SUB_PROJECT)/makefile
+        cd %(PATH_TO_SUB_PROJECT) && $(MAKE)
+
+%(PATH_TO_SUB_PROJECT)/makefile: %(PATH_TO_SUB_PROJECT)/Make.proto
+        $(TOP)/rules/stmkmf --cd %(PATH_TO_SUB_PROJECT)
+'
+!
+
 undefineExtenionLine_nsi_for:extension
     "the template code for a single extenions undefinition line in the <appname>.nsi file"
 
@@ -2972,6 +3032,15 @@
 '  DeleteRegKey HKCR ".',extension,'"'
 
     "Created: / 15-10-2006 / 12:51:00 / cg"
+!
+
+undefineExtensionLine_nsi_for:extension
+    "the template code for a single extenions undefinition line in the <appname>.nsi file"
+
+^ 
+'  DeleteRegKey HKCR ".',extension,'"'
+
+    "Created: / 15-10-2006 / 12:51:00 / cg"
 ! !
 
 !ApplicationDefinition class methodsFor:'queries'!
@@ -3044,11 +3113,11 @@
 !ApplicationDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.244 2013-06-04 15:30:51 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.248 2013-06-10 18:14:13 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.244 2013-06-04 15:30:51 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.248 2013-06-10 18:14:13 stefan Exp $'
 !
 
 version_SVN
--- a/CharacterArray.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/CharacterArray.st	Fri Jun 21 19:04:37 2013 +0100
@@ -283,6 +283,7 @@
     "Created: 3.8.1997 / 18:16:40 / cg"
 ! !
 
+
 !CharacterArray class methodsFor:'cleanup'!
 
 lowSpaceCleanup
@@ -326,6 +327,7 @@
     "
 ! !
 
+
 !CharacterArray class methodsFor:'pattern matching'!
 
 matchEscapeCharacter
@@ -677,6 +679,7 @@
     ^ self == CharacterArray
 ! !
 
+
 !CharacterArray methodsFor:'Compatibility-ANSI'!
 
 addLineDelimiters
@@ -1568,6 +1571,7 @@
 ! !
 
 
+
 !CharacterArray methodsFor:'character searching'!
 
 includesMatchCharacters
@@ -3946,6 +3950,8 @@
 ! !
 
 
+
+
 !CharacterArray methodsFor:'matching - glob expressions'!
 
 compoundMatch:aString
@@ -4390,6 +4396,7 @@
 ! !
 
 
+
 !CharacterArray methodsFor:'padded copying'!
 
 centerPaddedTo:newSize
@@ -4914,6 +4921,7 @@
     "Modified: 17.4.1997 / 12:50:23 / cg"
 ! !
 
+
 !CharacterArray methodsFor:'special string converting'!
 
 expandPlaceholders:escapeCharacter with:argArrayOrDictionary
@@ -5305,6 +5313,7 @@
 !
 
 withEscapes
+    <resource: #obsolete>
     "has been renamed; the name withEscapes is misleading"
 
     self obsoleteMethodWarning:'use withoutCEscapes'.
@@ -5857,6 +5866,7 @@
     "
 ! !
 
+
 !CharacterArray methodsFor:'substring searching'!
 
 findRangeOfString:subString
@@ -6408,11 +6418,11 @@
 !CharacterArray class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.502 2013-05-06 09:55:08 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.504 2013-06-19 06:36:14 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.502 2013-05-06 09:55:08 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.504 2013-06-19 06:36:14 stefan Exp $'
 ! !
 
 
--- a/ClassDescription.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/ClassDescription.st	Fri Jun 21 19:04:37 2013 +0100
@@ -654,7 +654,6 @@
     "Modified: 23.4.1996 / 15:56:54 / cg"
 ! !
 
-
 !ClassDescription methodsFor:'Compatibility-Dolphin'!
 
 categoriesFor:aMethodSelector
@@ -3316,8 +3315,16 @@
 topNameSpace
     "return the nameSpace of my topOwningClass (if private) or my own nameSpace."
 
+    |ns|
+
     self isPrivate ifTrue:[^ self topOwningClass topNameSpace].
-    ^ self nameSpace
+    ns := self nameSpace.
+    ns isNameSpace ifFalse:[
+        "detect the problem, that a class has the same name as a namsSpace"
+        self halt:'Not a namspace'.
+        ns := Smalltalk.         "/ What a KLUDGE
+    ].
+    ^ ns.
 !
 
 whichCategoryIncludesSelector:aSelector
@@ -4275,11 +4282,11 @@
 !ClassDescription class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ClassDescription.st,v 1.239 2013-06-07 12:18:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ClassDescription.st,v 1.240 2013-06-19 06:42:05 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ClassDescription.st,v 1.239 2013-06-07 12:18:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ClassDescription.st,v 1.240 2013-06-19 06:42:05 stefan Exp $'
 ! !
 
 
--- a/Collection.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/Collection.st	Fri Jun 21 19:04:37 2013 +0100
@@ -703,6 +703,15 @@
     ^ self keys asNewOrderedCollection sort
 !
 
+keysSorted:aBlock
+    "return the keys as a sorted sequenceable collection.
+     Some collections (which keep their keys already sorted) may
+     redefine this method to return the keys as they are kept internally.
+     The fallback here sorts them into an OrderedCollection"
+
+    ^ self keys asNewOrderedCollection sort:aBlock
+!
+
 last
     "return the last element of the collection.
      This should be redefined in subclasses."
@@ -2316,6 +2325,40 @@
     "Modified: / 13-09-2006 / 11:17:42 / cg"
 !
 
+detect:checkBlock thenCompute:evalBlock 
+    "evaluate the argument, aBlock for each element in the receiver until
+     chloeckBck returns true; in this case return the value from evalBlock
+     applied to the element which caused the true evaluation.
+     If none of the evaluations returns true, report an error"
+
+    ^ self detect:checkBlock thenCompute:evalBlock ifNone:[self errorNotFound]
+
+    "
+     #((1 'one') (2 'two') (3 'three') (4 'four')) 
+        detect:[:pair | pair first odd] thenCompute:[:pair | pair second]  
+    "
+!
+
+detect:checkBlock thenCompute:evalBlock ifNone:exceptionValue
+    "evaluate the argument, aBlock for each element in the receiver until
+     chloeckBck returns true; in this case return the value from evalBlock
+     applied to the element which caused the true evaluation.
+     If none of the evaluations returns true, return the value from exceptionValue."
+
+    ^ evalBlock value:(self detect:checkBlock ifNone:[^ exceptionValue value]).
+
+    "
+     #((1 'one') (2 'two') (3 'three') (4 'four')) 
+        detect:[:pair | pair first odd] thenCompute:[:pair | pair second]
+        ifNone:[ nil ].     
+    "
+    "
+     #( (2 'two')  (4 'four')) 
+        detect:[:pair | pair first odd] thenCompute:[:pair | pair second]
+        ifNone:[ nil ].
+    "
+!
+
 detectLast:aBlock
     "evaluate the argument, aBlock for each element in the receiver until
      the block returns true; in this case return the element which caused
@@ -4769,11 +4812,11 @@
 !Collection class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.304 2013-06-09 13:03:50 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.306 2013-06-20 11:29:55 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.304 2013-06-09 13:03:50 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.306 2013-06-20 11:29:55 cg Exp $'
 ! !
 
 
--- a/CompiledCode.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/CompiledCode.st	Fri Jun 21 19:04:37 2013 +0100
@@ -659,13 +659,18 @@
 isCounting
     "return true, if invokations of this method are counted"
 
-    ^ MessageTracer notNil
-      and:[MessageTracer isCounting:self]
+    ^ MessageTracer notNil and:[MessageTracer isCounting:self]
 
     "Modified: / 27.7.1998 / 11:06:00 / cg"
     "Created: / 30.1.1999 / 14:49:19 / cg"
 !
 
+isCountingByReceiverClass
+    "return true, if invokations of this method are counted"
+
+    ^ MessageTracer notNil and:[MessageTracer isCountingByReceiverClass:self]
+!
+
 isCountingMemoryUsage
     "return true, if memory allocations done by this method (and callees)
      are counted"
@@ -760,6 +765,15 @@
     "Created: / 30.1.1999 / 14:50:38 / cg"
 !
 
+startCountingByReceiverClass
+    "start counting invokations of the receiver"
+
+    MessageTracer countMethodByReceiverClass:self
+
+    "Modified: / 12.1.1998 / 18:23:45 / cg"
+    "Created: / 30.1.1999 / 14:50:38 / cg"
+!
+
 startCountingMemoryUsage
     "start counting memory usage of the receiver (and every callee)"
 
@@ -1871,13 +1885,14 @@
 !CompiledCode class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/CompiledCode.st,v 1.120 2012-11-04 14:13:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CompiledCode.st,v 1.121 2013-06-20 11:16:04 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/CompiledCode.st,v 1.120 2012-11-04 14:13:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/CompiledCode.st,v 1.121 2013-06-20 11:16:04 cg Exp $'
 !
 
 version_SVN
-    ^ '§ Id: CompiledCode.st 10643 2011-06-08 21:53:07Z vranyj1  §'
+    ^ '$ Id: CompiledCode.st 10643 2011-06-08 21:53:07Z vranyj1  $'
 ! !
+
--- a/ExternalBytes.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/ExternalBytes.st	Fri Jun 21 19:04:37 2013 +0100
@@ -409,7 +409,7 @@
 
 new:numberOfBytes
     "allocate some memory usable for data;
-     the memory is not controlled by the garbage collector.
+     the memory safe from being finalized by the garbage collector.
      Return a corresponding ExternalBytes object or raise MallocFailure (if malloc fails).
 
      Use this, if you have to pass a block of bytes to some
@@ -420,8 +420,8 @@
      may change their address.
 
      DANGER ALERT: the memory is NOT automatically freed until it is either
-		   MANUALLY freed (see #free) or the returned externalBytes object
-		   is unprotected or the classes releaseAllMemory method is called."
+                   MANUALLY freed (see #free) or the returned externalBytes object
+                   is unprotected or the classes releaseAllMemory method is called."
 
     |newInst|
 
@@ -448,14 +448,15 @@
 
 unprotectedNew:numberOfBytes
     "allocate some memory usable for data;
-     the memory is under the control of the garbage collector.
+     the memory is under the control of the garbage collector (i.e. the instance will
+     be finalized and the malloc'd memory will be freed, if the instance goes away).
      Return a corresponding ExternalBytes object or raise MallocFailure (if malloc fails).
 
      DANGER ALERT: the memory block as allocated will be automatically freed
-		   as soon as the reference to the returned externalBytes object
-		   is gone (by the next garbage collect).
-		   If the memory has been passed to a C-function which
-		   remembers this pointer, bad things may happen ...."
+                   as soon as the reference to the returned externalBytes object
+                   is gone (by the next garbage collect).
+                   If the memory has been passed to a C-function which
+                   remembers this pointer, bad things may happen ...."
 
     |newInst|
 
@@ -1247,6 +1248,7 @@
 unprotectFromGC
     "remove the receiver from the AllocatedInstances
      class variable - if there is no other reference to the receiver,
+     and this was ever allocated by me (i.e. not by the outside world),
      the next garbage collect will finalize the receiver and the underlying
      memory be freed."
 
@@ -1258,7 +1260,7 @@
     wasBlocked := OperatingSystem blockInterrupts.
 "/    AccessLock critical:[
     AllocatedInstances notNil ifTrue:[
-	AllocatedInstances remove:self ifAbsent:nil.
+        AllocatedInstances remove:self ifAbsent:nil.
     ].
 "/    ]
     wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
@@ -1316,11 +1318,11 @@
 !ExternalBytes class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ExternalBytes.st,v 1.89 2013-05-21 20:44:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ExternalBytes.st,v 1.90 2013-06-14 12:37:48 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ExternalBytes.st,v 1.89 2013-05-21 20:44:47 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ExternalBytes.st,v 1.90 2013-06-14 12:37:48 cg Exp $'
 ! !
 
 
--- a/GenericException.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/GenericException.st	Fri Jun 21 19:04:37 2013 +0100
@@ -1389,7 +1389,7 @@
      This will change in the near future; please use #creator to get
      the creator. Marked as obsolete, until the change is done!!"
 
-    self obsoleteMethodWarning:'meaning of #signal will change. Use #creator'.
+    self obsoleteFeatureWarning:'meaning of #signal will change. Use #creator'.
     ^ self creator.
 !
 
@@ -2354,11 +2354,11 @@
 !GenericException class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/GenericException.st,v 1.141 2013-05-27 14:13:24 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/GenericException.st,v 1.142 2013-06-19 06:34:00 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/GenericException.st,v 1.141 2013-05-27 14:13:24 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/GenericException.st,v 1.142 2013-06-19 06:34:00 stefan Exp $'
 !
 
 version_HG
--- a/Infinity.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/Infinity.st	Fri Jun 21 19:04:37 2013 +0100
@@ -206,19 +206,6 @@
      vectors (e.g. Points)"
 
     ^ 105
-!
-
-retryReverseOf: aSymbol with: aNumber
-    self obsoleteMethodWarning:'leftover - no longer used'.
-
-    (aSymbol == #* or: [aSymbol == #+]) ifTrue: [
-        ^self perform: aSymbol with: aNumber
-    ].
-    (aSymbol == #/ and: [aNumber isFinite]) ifTrue: [^ 0].
-    (aSymbol == #< and: [aNumber isFinite]) ifTrue: [^ self positive].
-    (aSymbol == #> and: [ aNumber isFinite ]) ifTrue: [^ self positive not].
-    (aSymbol == #= and: [ aNumber isFinite ])ifTrue: [ ^ false ]. 
-    self errorUndefinedResult: aSymbol
 ! !
 
 !Infinity methodsFor:'comparing'!
@@ -425,11 +412,12 @@
 !Infinity class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Infinity.st,v 1.13 2009-10-12 19:34:30 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Infinity.st,v 1.14 2013-06-19 06:35:15 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Infinity.st,v 1.13 2009-10-12 19:34:30 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Infinity.st,v 1.14 2013-06-19 06:35:15 stefan Exp $'
 ! !
 
+
 Infinity initialize!
--- a/Method.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/Method.st	Fri Jun 21 19:04:37 2013 +0100
@@ -1910,6 +1910,151 @@
     "Modified: / 22-10-2010 / 12:07:25 / cg"
 !
 
+printStringForBrowserWithSelector:selector inClass:aClass
+    "return a printString to represent myself to the user in a browser.
+     Defined here to allow for browsers to deal with nonStandard pseudoMethods"
+
+    |s privInfo moreInfo p info n cls ns currentChangeSet isInChangeSet mthdPackage
+     userPreferences shownSelector suppressPackage timeRounded shadowsOrNot 
+     overAllCount counts|
+
+    moreInfo := ''.
+    privInfo := ''.
+    userPreferences := UserPreferences current.
+
+    ns := self nameSpace.
+    (ns notNil and:[ns isNameSpace]) ifTrue:[
+        moreInfo := moreInfo , 
+            ((' < %1 >' bindWith: ns name) asText emphasisAllAdd:
+                userPreferences emphasisForNamespacedCode)
+
+    ].
+
+    self isWrapped ifTrue:[
+        (MessageTracer isCounting:self) ifTrue:[
+            (MessageTracer isCountingByReceiverClass:self) ifTrue:[
+                overAllCount := (MessageTracer executionCountOfMethod:self).
+                moreInfo := moreInfo , (' (cnt: %1' bindWith:overAllCount printString allBold).
+                overAllCount ~~ 0 ifTrue:[
+                    counts := MessageTracer executionCountsByReceiverClassOfMethod:self.
+                    (counts keysSorted:[:a :b | (counts at:a) < (counts at:b)]) reverseDo:[:cls |
+                        |cnt clsName percentage|
+
+                        clsName := cls name.
+                        cnt := counts at:cls.
+                        percentage := ((cnt / overAllCount) * 100) rounded.
+                        moreInfo := moreInfo , ('; %1->%2%%' bindWith:clsName with:percentage).
+                    ].
+                ].
+                moreInfo := moreInfo , ')'.
+            ] ifFalse:[
+                (MessageTracer isCountingMemoryUsage:self) ifTrue:[
+                    moreInfo := moreInfo , (' (mem: %1 bytes avg)' bindWith:(MessageTracer memoryUsageOfMethod:self) printString allBold).
+                ] ifFalse:[
+                    moreInfo := moreInfo , (' (cnt: %1)' bindWith:(MessageTracer executionCountOfMethod:self) printString allBold).
+                ]
+            ].
+        ] ifFalse:[
+            (MessageTracer isTiming:self) ifTrue:[
+                info := MessageTracer executionTimesOfMethod:self.
+                ((n := info count) == 0) ifTrue:[
+                    moreInfo := moreInfo , (' (cnt: %1)' bindWith:n)
+                ] ifFalse:[
+                    timeRounded := [:millis |
+                        |rnd|
+                        rnd := (millis > 100)
+                                 ifTrue:[ 1 ]
+                                 ifFalse:[
+                                     (millis > 10)
+                                        ifTrue:[ 0.1 ]
+                                        ifFalse:[
+                                            (millis > 1)
+                                                ifTrue:[ 0.01 ]
+                                                ifFalse:[ 0.001 ]]].
+                        millis roundTo:rnd
+                    ].
+
+                    (n == 1 or:[ info avgTimeRounded = info minTimeRounded  ]) ifTrue:[
+                        moreInfo := moreInfo ,
+                                    (' (t: %1ms cnt: %2)'
+                                        bindWith:((timeRounded value:info avgTimeRounded) printString allBold)
+                                        with:n)
+                    ] ifFalse:[
+                        moreInfo := moreInfo ,
+                                    (' (avg: %1ms min: %2 max: %3 cnt: %4)'
+                                        bindWith:((timeRounded value:info avgTimeRounded) printString allBold)
+                                        with:((timeRounded value:info minTimeRounded) printString)
+                                        with:((timeRounded value:info maxTimeRounded) printString)
+                                        with:n)
+                    ].
+                ].
+            ] ifFalse:[
+                moreInfo := ' !!'
+            ]
+        ].
+    ].
+    p := self privacy.
+
+    p ~~ #public ifTrue:[
+        privInfo := (' (* ' , p , ' *)') allItalic.
+    ].
+
+"/    self isInvalid ifTrue:[
+"/        moreInfo := ' (** not executable **)'.
+"/    ].
+
+    (self isLazyMethod not and:[self isUnloaded]) ifTrue:[
+        moreInfo := ' (** unloaded **)'
+    ].
+
+    privInfo size ~~ 0 ifTrue:[
+        moreInfo := privInfo , ' ' , moreInfo
+    ].
+
+    s := shownSelector := (self selectorPrintStringInBrowserFor:selector class:aClass).
+
+    (cls := aClass) isNil ifTrue:[
+        cls := self containingClass
+    ].
+
+    currentChangeSet := ChangeSet current.
+    isInChangeSet := currentChangeSet includesChangeForClass:cls selector:selector.
+
+    isInChangeSet ifTrue:[
+        s := s asText emphasisAllAdd:(userPreferences emphasisForChangedCode)
+    ].
+
+    (cls isNil or:[(mthdPackage := self package) ~= cls package]) ifTrue:[
+        suppressPackage := false.
+        mthdPackage = PackageId noProjectID ifTrue:[
+            mthdPackage := '+'.
+            "/ suppressPackage := true
+        ].
+        suppressPackage ifFalse:[
+            shadowsOrNot := (self isShadowingExtension)
+                                ifTrue:[' shadowed' ]
+                                ifFalse:[ '' ].
+            p := ' [' , ((mthdPackage ? '?'), shadowsOrNot allBold) allItalic , '] '.
+            p := p asText emphasisAllAdd:(userPreferences emphasisForDifferentPackage).
+            s := s , ' ' , p
+        ].
+    ].
+
+    moreInfo size == 0 ifTrue:[^ s].
+
+    s := shownSelector , moreInfo.
+
+    self isInvalid ifTrue:[
+        s := s asText emphasizeAllWith:(userPreferences emphasisForObsoleteCode).
+    ].
+    ^ s
+
+    "Modified: / 23-01-1998 / 13:15:15 / stefan"
+    "Created: / 05-02-2000 / 22:55:56 / cg"
+    "Modified: / 05-03-2007 / 16:18:53 / cg"
+    "Modified: / 20-07-2010 / 15:39:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 whoString
     "return a string as className>>selector, if this is not an unbound
      method. Otherwise return 'unbound'. Used with debugging."
@@ -3244,7 +3389,7 @@
 
     self annotationsDo:[:annot |
         (annot refersToLiteral: anObject) ifTrue:[
-            self halt.
+            "/ self halt.
             ^ true
         ].
     ].
@@ -3258,7 +3403,7 @@
 
     self annotationsDo:[:annot |
         (annot refersToLiteralMatching: aMatchString) ifTrue:[
-            self halt.
+            "/ self halt.
             ^ true
         ].
     ].
@@ -3835,11 +3980,11 @@
 !Method class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Method.st,v 1.413 2013-06-09 13:32:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Method.st,v 1.417 2013-06-20 23:00:55 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Method.st,v 1.413 2013-06-09 13:32:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Method.st,v 1.417 2013-06-20 23:00:55 cg Exp $'
 !
 
 version_HG
--- a/Object.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/Object.st	Fri Jun 21 19:04:37 2013 +0100
@@ -1670,11 +1670,24 @@
         | attrs |
 
         attrs := self objectAttributes.
+        "/ only need a WeakIdentityDictionary, if there are any non-symbol keys in
+        "/ it. Start with a regular IDDict, and migrate to WeakIDDict if ever required.
+        "/ Typically, this never happens (but does in the UIPainter!!)
         (attrs isNil or:[attrs size == 0]) ifTrue:[
-            attrs := WeakIdentityDictionary new.
+            attributeKey isSymbol ifTrue:[
+                attrs := IdentityDictionary new.
+            ] ifFalse:[
+                attrs := WeakIdentityDictionary new.
+            ].
             attrs at:attributeKey put:anObject.
             self objectAttributes:attrs.
         ] ifFalse:[
+            attributeKey isSymbol ifFalse:[
+                attrs class == WeakIdentityDictionary ifFalse:[
+                    attrs := WeakIdentityDictionary new declareAllFrom:attrs.
+                    self objectAttributes:attrs.                    
+                ].
+            ].
             attrs at:attributeKey put:anObject.
         ].
     ] valueUninterruptably
@@ -3203,7 +3216,9 @@
     ].
     message notNil ifTrue:[
         '------>  ' infoPrint. message infoPrintCR
-    ]
+    ].
+
+    self halt:'Please fix this now!!'
 
     "
      Object obsoleteMethodWarning:'foo' from:thisContext sender sender
@@ -8358,6 +8373,7 @@
         if (__InstPtr(self)->i_instvars[i] == anObject) {
             __InstPtr(self)->i_instvars[i] = newRef;
             __STORE(self, newRef);
+__dumpObject__(self, __LINE__);
             anyChange = true;
         }
     }
@@ -9659,11 +9675,11 @@
 !Object class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.724 2013-06-04 13:52:42 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.726 2013-06-19 06:43:15 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.724 2013-06-04 13:52:42 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Object.st,v 1.726 2013-06-19 06:43:15 stefan Exp $'
 !
 
 version_SVN
--- a/OrderedCollection.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/OrderedCollection.st	Fri Jun 21 19:04:37 2013 +0100
@@ -619,7 +619,14 @@
     "remove all elements from the collection.
      Returns the receiver."
 
-    self initContents:10
+    contentsArray size <= 20 ifTrue:[
+        "/ reuse the contents array
+        contentsArray atAllPut:nil.
+        firstIndex := 1.
+        lastIndex := 0.
+    ] ifFalse:[
+        self initContents:10
+    ].
 
     "Modified: 12.4.1996 / 13:34:19 / cg"
 !
@@ -1960,6 +1967,6 @@
 !OrderedCollection class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/OrderedCollection.st,v 1.105 2013-04-04 07:59:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/OrderedCollection.st,v 1.106 2013-06-17 21:15:10 cg Exp $'
 ! !
 
--- a/ProcessorScheduler.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/ProcessorScheduler.st	Fri Jun 21 19:04:37 2013 +0100
@@ -2083,66 +2083,66 @@
 recomputeDynamicPriorities
     "recompute dynamic priorities."
 
-    |processesDecreased processesToIncrease|
+    |processesToDecrease processesToIncrease|
 
     scheduledProcesses notNil ifTrue:[
-	"/ this is written a bit cryptic - to avoid creation
-	"/ of garbage objects (Id'sets) if possible.
-	"/ since this runs 50 times a second and most of the
-	"/ time, no rescheduling is req'd
-
-	scheduledProcesses do:[:aProcess |
-	    |range prio|
-
-	    "/ decrease priority of processes that did run
-	    (range := aProcess priorityRange) notNil ifTrue:[
-		aProcess priority > range start ifTrue:[
-		    processesDecreased isNil ifTrue:[
-			processesDecreased := IdentitySet new.
-		    ].
-		    processesDecreased add:aProcess.
-		]
-	    ]
-	].
-
-	processesDecreased notNil ifTrue:[
-	    processesDecreased do:[:aProcess |
-		|newPri|
-
-		"/ newPri := aProcess priority - 1.
-		newPri := aProcess priorityRange start.
-		self changePriority:newPri for:aProcess.
-	    ].
-	].
-
-	"/ and increase all prios of those that did not run, but are runnable
-
-	TimeSlicingPriorityLimit to:1 by:-1 do:[:i |
-	    |list|
-
-	    (list := quiescentProcessLists at:i) size > 0 ifTrue:[
-		list do:[:aProcess |
-		    |range prio|
-
-		    (range := aProcess priorityRange) notNil ifTrue:[
-			(processesDecreased isNil
-			or:[(processesDecreased includes:aProcess) not]) ifTrue:[
-			    aProcess priority < range stop ifTrue:[
-				processesToIncrease isNil ifTrue:[
-				    processesToIncrease := IdentitySet new.
-				].
-				processesToIncrease add:aProcess
-			    ]
-			]
-		    ]
-		]
-	    ]
-	].
-	processesToIncrease notNil ifTrue:[
-	    processesToIncrease do:[:aProcess |
-		self changePriority:(aProcess priority + 1) for:aProcess.
-	    ].
-	].
+        "/ this is written a bit cryptic - to avoid creation
+        "/ of garbage objects (Id'sets) if possible.
+        "/ since this runs 50 times a second and most of the
+        "/ time, no rescheduling is req'd
+
+        scheduledProcesses do:[:aProcess |
+            |range prio|
+
+            "/ decrease priority of processes that did run
+            (range := aProcess priorityRange) notNil ifTrue:[
+                aProcess priority > range start ifTrue:[
+                    processesToDecrease isNil ifTrue:[
+                        processesToDecrease := IdentitySet new.
+                    ].
+                    processesToDecrease add:aProcess.
+                ]
+            ]
+        ].
+
+        processesToDecrease notNil ifTrue:[
+            processesToDecrease do:[:aProcess |
+                |newPri|
+
+                "/ newPri := aProcess priority - 1.
+                newPri := aProcess priorityRange start.
+                self changePriority:newPri for:aProcess.
+            ].
+        ].
+
+        "/ and increase all prios of those that did not run, but are runnable
+
+        TimeSlicingPriorityLimit to:1 by:-1 do:[:i |
+            |list|
+
+            (list := quiescentProcessLists at:i) size > 0 ifTrue:[
+                list do:[:aProcess |
+                    |range prio|
+
+                    (range := aProcess priorityRange) notNil ifTrue:[
+                        (processesToDecrease isNil
+                        or:[(processesToDecrease includes:aProcess) not]) ifTrue:[
+                            aProcess priority < range stop ifTrue:[
+                                processesToIncrease isNil ifTrue:[
+                                    processesToIncrease := OrderedCollection new:10.
+                                ].
+                                processesToIncrease add:aProcess
+                            ]
+                        ]
+                    ]
+                ]
+            ]
+        ].
+        processesToIncrease notNil ifTrue:[
+            processesToIncrease do:[:aProcess |
+                self changePriority:(aProcess priority + 1) for:aProcess.
+            ].
+        ].
     ].
 
     "Modified: / 21.9.1998 / 09:07:54 / cg"
@@ -3361,11 +3361,11 @@
 !ProcessorScheduler class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.268 2013-04-19 09:35:49 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.269 2013-06-17 21:18:07 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.268 2013-04-19 09:35:49 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProcessorScheduler.st,v 1.269 2013-06-17 21:18:07 cg Exp $'
 ! !
 
 
--- a/ProjectDefinition.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/ProjectDefinition.st	Fri Jun 21 19:04:37 2013 +0100
@@ -1487,7 +1487,8 @@
     |subProjects|
 
     subProjects := self subProjects asNewSet.
-    subProjects 
+    subProjects
+        addAll:self includedInSubProjects;
         removeAllFoundIn:self excludedFromSubProjects;
         remove:self package ifAbsent:[].
 
@@ -1761,6 +1762,7 @@
     "Modified: / 08-08-2006 / 19:24:34 / fm"
     "Created: / 17-08-2006 / 21:28:09 / cg"
     "Modified: / 09-10-2006 / 14:27:20 / cg"
+    "Modified: / 10-06-2013 / 11:50:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 productInstallDirBaseName_code
@@ -2002,6 +2004,17 @@
     ^ #()
 !
 
+includedInSubProjects
+    "list packages which are to be explicitely included in the subproject list,
+     even if not found by the automatic search.
+     However: they are not forced to be loaded when a package is loaded; 
+     for those, redefine #includedInPreRequisites."
+
+    ^ #()
+
+    "Modified: / 17-08-2006 / 19:57:46 / cg"
+!
+
 mandatoryPreRequisites
     "list packages which are mandatory as a prerequisite.
      This are packages containing superclasses of my classes and classes which
@@ -4417,7 +4430,7 @@
 
 subProjectMakeCallsUsing:callString
     ^ String streamContents:[:s |
-        self subProjects do:[:packageID |
+        self effectiveSubProjects do:[:packageID |
             s nextPutLine:'@echo "***********************************"'.
             s nextPutLine:'@echo "Buildung ',(packageID copyReplaceAll:$: with:$/).
             s nextPutLine:'@echo "***********************************"'.
@@ -5009,8 +5022,8 @@
             ].
     "/ no, don't load subProjects here - will lead to a recursion, which leads
     "/ to some classes being loaded from source (soap)
-            self activityNotification:'Loading sub projects'.
-            meOrMySecondIncarnation loadSubProjectsAsAutoloaded:asAutoloaded.
+"/            self activityNotification:'Loading sub projects'.
+"/            meOrMySecondIncarnation loadSubProjectsAsAutoloaded:asAutoloaded.
         ].
         self activityNotification:('Executing post-load action for %1' bindWith:self package).
 
@@ -6184,7 +6197,7 @@
     "load other packages (at least the projectDefinitions and their extensions)"
 
     self loadSubProjectsAsAutoloaded:false.
-    self subProjects do:[:p |
+    self effectiveSubProjects do:[:p |
         |subDef|
 
         subDef := self definitionClassForPackage:p.
@@ -6197,7 +6210,7 @@
 loadSubProjectsAsAutoloaded:asAutoloaded
     "load other packages (at least the projectDefinitions and their extensions)"
 
-    self loadPackages:(self subProjects) asAutoloaded:asAutoloaded
+    self loadPackages:(self effectiveSubProjects) asAutoloaded:asAutoloaded
 
     "Modified: / 25-10-2006 / 17:51:58 / cg"
 !
@@ -6341,7 +6354,7 @@
 unloadSubProjects
     "unload other packages"
 
-    self subProjects do:[:p |
+    self effectiveSubProjects do:[:p |
         |subDef|
 
         subDef := self definitionClassForPackage:p.
@@ -6607,7 +6620,7 @@
     ].
 
     (orderedTuples includes:[:el | el first = el second]) ifTrue:[
-        self halt
+        self halt:'oops - something seems to depend upon itself'
     ].
     sortedPackages := orderedTuples topologicalSort.
 
@@ -7259,11 +7272,11 @@
     |emptyProjects nonProjects emptyOrNonProjects classesInImage 
      classesInDescription onlyInImage onlyInDescription missingPools myPackage|
 
-    emptyProjects := Set withAll:self subProjects.
+    emptyProjects := Set withAll:self effectiveSubProjects.
     Smalltalk allClassesDo:[:cls |
         emptyProjects remove:(cls package) ifAbsent:[].
     ].
-    nonProjects := self subProjects select:[:p |
+    nonProjects := self effectiveSubProjects select:[:p |
                     (ProjectDefinition definitionClassForPackage: p) isNil
                    ].
 
@@ -7353,13 +7366,14 @@
             Transcript show:self name; show:': only in description: '; showCR:onlyInDescription
         ].
         (Dialog confirm:'The set of classes in the image is different from the listed classes in the project definition.\\Proceed?' withCRs) ifFalse:[
-            AbortSignal raiseRequest
+            AbortOperationRequest raiseRequest
         ]
     ].
 
 "/    self validateOrderOfClasses
 
     "
+     exept_expecco_application validateDescription
      squeak_vmMaker validateDescription
     "
 
@@ -7479,11 +7493,11 @@
 !ProjectDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.476 2013-06-08 01:00:50 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.479 2013-06-20 22:45:30 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.476 2013-06-08 01:00:50 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.479 2013-06-20 22:45:30 cg Exp $'
 !
 
 version_HG
--- a/Stream.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/Stream.st	Fri Jun 21 19:04:37 2013 +0100
@@ -1793,17 +1793,13 @@
     ^ self nextPutShort:aNumber MSB:true
 !
 
-nextShortPut:aNumber MSB:msbFlag
-    "for backward compatibility - this will vanish"
-
-    ^ self nextPutShort:aNumber MSB:msbFlag
-
-    "Modified: / 1.11.1997 / 18:31:05 / cg"
-!
-
 nextTwoBytesPut: anInteger
+        <resource: #obsolete>
         "Write anInteger as the next two bytes of the
          receiver stream."
+
+    self obsoleteMethodWarning:'use #nextPutShort:MSB:'.
+
     self
         nextPutByte: (anInteger bitAnd: 255);
         nextPutByte: ((anInteger bitShift: -8) bitAnd: 255)
@@ -3308,11 +3304,11 @@
 !Stream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Stream.st,v 1.200 2013-04-25 13:11:18 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Stream.st,v 1.201 2013-06-12 08:37:20 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Stream.st,v 1.200 2013-04-25 13:11:18 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Stream.st,v 1.201 2013-06-12 08:37:20 stefan Exp $'
 ! !
 
 
--- a/Win32OperatingSystem.st	Mon Jun 10 17:32:35 2013 +0100
+++ b/Win32OperatingSystem.st	Fri Jun 21 19:04:37 2013 +0100
@@ -12226,157 +12226,157 @@
 
     //iterate all following objetcs
     for (objectIterator=0; objectIterator<numObjectTypes; objectIterator++) {
-	//add the st_perObject dictionary to st_objectArray
-	st_perObject = __SSEND0(@global(Dictionary), @symbol(new), 0);
-	__AT_PUT_(st_objectArray, __mkSmallInteger(objectIterator+1), st_perObject);
-
-	//get the object data
-	__AT_PUT_(st_perObject, @symbol(ObjectNameTitleIndex), __mkSmallInteger(perfObjectPtr->ObjectNameTitleIndex));
-	__AT_PUT_(st_perObject, @symbol(DetailLevel), __mkSmallInteger(perfObjectPtr->DetailLevel));
-	__AT_PUT_(st_perObject, @symbol(NumCounters), __mkSmallInteger(perfObjectPtr->NumCounters));
-	__AT_PUT_(st_perObject, @symbol(NumInstances), __mkSmallInteger(perfObjectPtr->NumInstances));
-
-	//setup counter array and initialize its pointer
-	st_counterArray = __ARRAY_NEW_INT(perfObjectPtr->NumCounters);
-	perfCounterPtr = (PERF_COUNTER_DEFINITION *)((char *)perfObjectPtr + perfObjectPtr->HeaderLength);
-
-	//add the st_counterArray to st_perObject dictionary
-	__AT_PUT_(st_perObject, @symbol(Counters), st_counterArray);
-
-	//iterate all following counter definition
-	for (counterIterator=0; counterIterator<perfObjectPtr->NumCounters; counterIterator++) {
-	    //add the st_perCounter dictionary to st_counterArray
-	    st_perCounter = __SSEND0(@global(Dictionary), @symbol(new), 0);
-	    __AT_PUT_(st_counterArray, __mkSmallInteger(counterIterator+1), st_perCounter);
-
-	    //get the counter data
-	    __AT_PUT_(st_perCounter, @symbol(CounterNameTitleIndex), __mkSmallInteger(perfCounterPtr->CounterNameTitleIndex));
-	    __AT_PUT_(st_perCounter, @symbol(CounterTypeBits), __mkSmallInteger(perfCounterPtr->CounterType));
-	    __AT_PUT_(st_perCounter, @symbol(CounterSize), __mkSmallInteger(perfCounterPtr->CounterSize));
-	    __AT_PUT_(st_perCounter, @symbol(CounterOffset), __mkSmallInteger(perfCounterPtr->CounterOffset));
-
-	    //put the counter type size
-	    switch (perfCounterPtr->CounterType & PERF_SIZE_MASK) {
-		case PERF_SIZE_DWORD:
-		    __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(DWORD));
-		    break;
-		case PERF_SIZE_LARGE:
-		    __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(LARGE));
-		    break;
-		case PERF_SIZE_ZERO:
-		    __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(ZERO));
-		    break;
-		case PERF_SIZE_VARIABLE_LEN:
-		    __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(VARIABLE_LEN));
-		    break;
-	    }
-	    switch (perfCounterPtr->CounterType & PERF_TYPE_MASK) {
-		case PERF_TYPE_NUMBER:
-		    __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(NUMBER));
-		    switch (perfCounterPtr->CounterType & PERF_NUMBERTYPE_MASK) {
-			case PERF_NUMBER_HEX:
-			    __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(HEX));
-			    break;
-			case PERF_NUMBER_DECIMAL:
-			    __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(DECIMAL));
-			    break;
-			case PERF_NUMBER_DEC_1000:
-			    __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(DEC_1000));
-			    break;
-		    }
-		    break;
-		case PERF_TYPE_COUNTER:
-		    __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(COUNTER));
-		    switch (perfCounterPtr->CounterType & PERF_COUNTERTYPE_MASK) {
-			case PERF_COUNTER_VALUE:
-			    __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(VALUE));
-			    break;
-			case PERF_COUNTER_RATE:
-			    __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(RATE));
-			    break;
-			case PERF_COUNTER_FRACTION:
-			    __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(FRACTION));
-			    break;
-			case PERF_COUNTER_BASE:
-			    __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(BASE));
-			    break;
-			case PERF_COUNTER_ELAPSED:
-			    __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(ELAPSED));
-			    break;
-			case PERF_COUNTER_QUEUELEN:
-			    __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(QUEUELEN));
-			    break;
-			case PERF_COUNTER_HISTOGRAM:
-			    __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(HISTOGRAM));
-			    break;
+        //add the st_perObject dictionary to st_objectArray
+        st_perObject = __SSEND0(@global(Dictionary), @symbol(new), 0);
+        __AT_PUT_(st_objectArray, __mkSmallInteger(objectIterator+1), st_perObject);
+
+        //get the object data
+        __AT_PUT_(st_perObject, @symbol(ObjectNameTitleIndex), __mkSmallInteger(perfObjectPtr->ObjectNameTitleIndex));
+        __AT_PUT_(st_perObject, @symbol(DetailLevel), __mkSmallInteger(perfObjectPtr->DetailLevel));
+        __AT_PUT_(st_perObject, @symbol(NumCounters), __mkSmallInteger(perfObjectPtr->NumCounters));
+        __AT_PUT_(st_perObject, @symbol(NumInstances), __mkSmallInteger(perfObjectPtr->NumInstances));
+
+        //setup counter array and initialize its pointer
+        st_counterArray = __ARRAY_NEW_INT(perfObjectPtr->NumCounters);
+        perfCounterPtr = (PERF_COUNTER_DEFINITION *)((char *)perfObjectPtr + perfObjectPtr->HeaderLength);
+
+        //add the st_counterArray to st_perObject dictionary
+        __AT_PUT_(st_perObject, @symbol(Counters), st_counterArray);
+
+        //iterate all following counter definition
+        for (counterIterator=0; counterIterator<perfObjectPtr->NumCounters; counterIterator++) {
+            //add the st_perCounter dictionary to st_counterArray
+            st_perCounter = __SSEND0(@global(Dictionary), @symbol(new), 0);
+            __AT_PUT_(st_counterArray, __mkSmallInteger(counterIterator+1), st_perCounter);
+
+            //get the counter data
+            __AT_PUT_(st_perCounter, @symbol(CounterNameTitleIndex), __mkSmallInteger(perfCounterPtr->CounterNameTitleIndex));
+            __AT_PUT_(st_perCounter, @symbol(CounterTypeBits), __mkSmallInteger(perfCounterPtr->CounterType));
+            __AT_PUT_(st_perCounter, @symbol(CounterSize), __mkSmallInteger(perfCounterPtr->CounterSize));
+            __AT_PUT_(st_perCounter, @symbol(CounterOffset), __mkSmallInteger(perfCounterPtr->CounterOffset));
+
+            //put the counter type size
+            switch (perfCounterPtr->CounterType & PERF_SIZE_MASK) {
+                case PERF_SIZE_DWORD:
+                    __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(DWORD));
+                    break;
+                case PERF_SIZE_LARGE:
+                    __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(LARGE));
+                    break;
+                case PERF_SIZE_ZERO:
+                    __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(ZERO));
+                    break;
+                case PERF_SIZE_VARIABLE_LEN:
+                    __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(VARIABLE_LEN));
+                    break;
+            }
+            switch (perfCounterPtr->CounterType & PERF_TYPE_MASK) {
+                case PERF_TYPE_NUMBER:
+                    __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(NUMBER));
+                    switch (perfCounterPtr->CounterType & PERF_NUMBERTYPE_MASK) {
+                        case PERF_NUMBER_HEX:
+                            __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(HEX));
+                            break;
+                        case PERF_NUMBER_DECIMAL:
+                            __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(DECIMAL));
+                            break;
+                        case PERF_NUMBER_DEC_1000:
+                            __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(DEC_1000));
+                            break;
+                    }
+                    break;
+                case PERF_TYPE_COUNTER:
+                    __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(COUNTER));
+                    switch (perfCounterPtr->CounterType & PERF_COUNTERTYPE_MASK) {
+                        case PERF_COUNTER_VALUE:
+                            __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(VALUE));
+                            break;
+                        case PERF_COUNTER_RATE:
+                            __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(RATE));
+                            break;
+                        case PERF_COUNTER_FRACTION:
+                            __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(FRACTION));
+                            break;
+                        case PERF_COUNTER_BASE:
+                            __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(BASE));
+                            break;
+                        case PERF_COUNTER_ELAPSED:
+                            __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(ELAPSED));
+                            break;
+                        case PERF_COUNTER_QUEUELEN:
+                            __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(QUEUELEN));
+                            break;
+                        case PERF_COUNTER_HISTOGRAM:
+                            __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(HISTOGRAM));
+                            break;
 #ifdef PERF_COUNTER_PRECISION
-			case PERF_COUNTER_PRECISION:
-			    __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(PRECISION));
-			    break;
-#endif
-		    }
-		    break;
-		case PERF_TYPE_TEXT:
-		    __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(TEXT));
-		    switch (perfCounterPtr->CounterType & PERF_TEXTTYPE_MASK) {
-			case PERF_TEXT_UNICODE:
-			    __AT_PUT_(st_perCounter, @symbol(TEXT),@symbol(UNICODE));
-			    break;
-			case PERF_TEXT_ASCII:
-			    __AT_PUT_(st_perCounter, @symbol(TEXT),@symbol(ASCII));
-			    break;
-		    }
-		    break;
-		case PERF_TYPE_ZERO:
-		    __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(ZERO));
-		    break;
-	    }
-
-	    //setup the counter pointer to the next counter definition
-	    perfCounterPtr = (PERF_COUNTER_DEFINITION *)((char *)perfCounterPtr + perfCounterPtr->ByteLength);
-	}
-
-	//goon dependent on the count of instances
-	if (perfObjectPtr->NumInstances < 1) {
-	    perfCounterBlockPtr = (PERF_COUNTER_BLOCK *)(perfCounterPtr);
-	    __AT_PUT_(st_perObject, @symbol(RawData), __MKBYTEARRAY(perfCounterBlockPtr, perfCounterBlockPtr->ByteLength));
-	} else {
-	    //setup the instance pointer to the end of all counters
-	    perfInstancePtr = (PERF_INSTANCE_DEFINITION *)(perfCounterPtr);
-
-	    //setup st_instanceArray and add it to st_perObject
-	    st_instanceArray = __ARRAY_NEW_INT(perfObjectPtr->NumInstances);
-	    __AT_PUT_(st_perObject, @symbol(Instances), st_instanceArray);
-
-	    //iterate the instances
-	    for (instanceIterator=0; instanceIterator<perfObjectPtr->NumInstances; instanceIterator++) {
-		//setup st_perInstance and add it to st_instanceArray
-		st_perInstance = __SSEND0(@global(Dictionary), @symbol(new), 0);
-		__AT_PUT_(st_instanceArray, __mkSmallInteger(instanceIterator+1), st_perInstance);
-
-		//get the instance data
-		__AT_PUT_(st_perInstance, @symbol(Name), __MKBYTEARRAY((wchar_t *)((BYTE *)perfInstancePtr + perfInstancePtr->NameOffset),perfInstancePtr->NameLength));
-		__AT_PUT_(st_perInstance, @symbol(ParentObjectTitleIndex), __mkSmallInteger(perfInstancePtr->ParentObjectTitleIndex));
-		__AT_PUT_(st_perInstance, @symbol(ParentObjectInstance), __mkSmallInteger(perfInstancePtr->ParentObjectInstance));
-		__AT_PUT_(st_perInstance, @symbol(NameOffset), __mkSmallInteger(perfInstancePtr->NameOffset));
-		__AT_PUT_(st_perInstance, @symbol(NameLength), __mkSmallInteger(perfInstancePtr->NameLength));
-
-		//setup the instance pointer to the its end
-		perfInstancePtr = (PERF_INSTANCE_DEFINITION *)((char *)perfInstancePtr + perfInstancePtr->ByteLength);
-
-		//setup the counter block pointer
-		perfCounterBlockPtr = (PERF_COUNTER_BLOCK *)(perfInstancePtr);
-
-		//get the instance raw data
-		__AT_PUT_(st_perInstance, @symbol(RawData), __MKBYTEARRAY(perfCounterBlockPtr, perfCounterBlockPtr->ByteLength));
-
-		//setup the instance pointer to the next instance
-		perfInstancePtr = (PERF_INSTANCE_DEFINITION *)((char *)perfCounterBlockPtr + perfCounterBlockPtr->ByteLength);
-	    }
-	}
-
-	//setup the object pointer to the next object
-	perfObjectPtr = (PERF_OBJECT_TYPE *)((char *)perfObjectPtr + perfObjectPtr->TotalByteLength);
+                        case PERF_COUNTER_PRECISION:
+                            __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(PRECISION));
+                            break;
+#endif
+                    }
+                    break;
+                case PERF_TYPE_TEXT:
+                    __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(TEXT));
+                    switch (perfCounterPtr->CounterType & PERF_TEXTTYPE_MASK) {
+                        case PERF_TEXT_UNICODE:
+                            __AT_PUT_(st_perCounter, @symbol(TEXT),@symbol(UNICODE));
+                            break;
+                        case PERF_TEXT_ASCII:
+                            __AT_PUT_(st_perCounter, @symbol(TEXT),@symbol(ASCII));
+                            break;
+                    }
+                    break;
+                case PERF_TYPE_ZERO:
+                    __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(ZERO));
+                    break;
+            }
+
+            //setup the counter pointer to the next counter definition
+            perfCounterPtr = (PERF_COUNTER_DEFINITION *)((char *)perfCounterPtr + perfCounterPtr->ByteLength);
+        }
+
+        //goon dependent on the count of instances
+        if (perfObjectPtr->NumInstances < 1) {
+            perfCounterBlockPtr = (PERF_COUNTER_BLOCK *)(perfCounterPtr);
+            __AT_PUT_(st_perObject, @symbol(RawData), __MKBYTEARRAY(perfCounterBlockPtr, perfCounterBlockPtr->ByteLength));
+        } else {
+            //setup the instance pointer to the end of all counters
+            perfInstancePtr = (PERF_INSTANCE_DEFINITION *)(perfCounterPtr);
+
+            //setup st_instanceArray and add it to st_perObject
+            st_instanceArray = __ARRAY_NEW_INT(perfObjectPtr->NumInstances);
+            __AT_PUT_(st_perObject, @symbol(Instances), st_instanceArray);
+
+            //iterate the instances
+            for (instanceIterator=0; instanceIterator<perfObjectPtr->NumInstances; instanceIterator++) {
+                //setup st_perInstance and add it to st_instanceArray
+                st_perInstance = __SSEND0(@global(Dictionary), @symbol(new), 0);
+                __AT_PUT_(st_instanceArray, __mkSmallInteger(instanceIterator+1), st_perInstance);
+
+                //get the instance data
+                __AT_PUT_(st_perInstance, @symbol(Name), __MKBYTEARRAY((wchar_t *)((BYTE *)perfInstancePtr + perfInstancePtr->NameOffset),perfInstancePtr->NameLength));
+                __AT_PUT_(st_perInstance, @symbol(ParentObjectTitleIndex), __mkSmallInteger(perfInstancePtr->ParentObjectTitleIndex));
+                __AT_PUT_(st_perInstance, @symbol(ParentObjectInstance), __mkSmallInteger(perfInstancePtr->ParentObjectInstance));
+                __AT_PUT_(st_perInstance, @symbol(NameOffset), __mkSmallInteger(perfInstancePtr->NameOffset));
+                __AT_PUT_(st_perInstance, @symbol(NameLength), __mkSmallInteger(perfInstancePtr->NameLength));
+
+                //setup the instance pointer to the its end
+                perfInstancePtr = (PERF_INSTANCE_DEFINITION *)((char *)perfInstancePtr + perfInstancePtr->ByteLength);
+
+                //setup the counter block pointer
+                perfCounterBlockPtr = (PERF_COUNTER_BLOCK *)(perfInstancePtr);
+
+                //get the instance raw data
+                __AT_PUT_(st_perInstance, @symbol(RawData), __MKBYTEARRAY(perfCounterBlockPtr, perfCounterBlockPtr->ByteLength));
+
+                //setup the instance pointer to the next instance
+                perfInstancePtr = (PERF_INSTANCE_DEFINITION *)((char *)perfCounterBlockPtr + perfCounterBlockPtr->ByteLength);
+            }
+        }
+
+        //setup the object pointer to the next object
+        perfObjectPtr = (PERF_OBJECT_TYPE *)((char *)perfObjectPtr + perfObjectPtr->TotalByteLength);
     }
 %}.
     objectArray := st_objectArray.
@@ -12385,61 +12385,61 @@
     perfTime100nSec := st_perfTime100nSec.
 
     getNameBlock := [:i|
-	self class counterIndexTextDictionary at:i ifAbsent:['<<no name>>'].
+        self class counterIndexTextDictionary at:i ifAbsent:['<<no name>>'].
     ].
 
     getCounterValueBlock := [:counter :rawData|
-	|offset counterValue|
-
-	offset := counter at:#CounterOffset.
-	offset >= rawData size ifTrue:[
-	    counterValue := nil.
-	] ifFalse:[
-	    (counter at:#SIZE) == #LARGE ifTrue:[
-		counterValue := rawData unsignedLongLongAt:offset + 1 bigEndian:false.
-	    ] ifFalse:[
-		(counter at:#SIZE) == #DWORD ifTrue:[
-		    counterValue := rawData unsignedLongAt:offset + 1 bigEndian:false.
-		] ifFalse:[
-		    self halt.
-		].
-	    ].
-	].
-
-	counterValue
+        |offset counterValue|
+
+        offset := counter at:#CounterOffset.
+        offset >= rawData size ifTrue:[
+            counterValue := nil.
+        ] ifFalse:[
+            (counter at:#SIZE) == #LARGE ifTrue:[
+                counterValue := rawData unsignedLongLongAt:offset + 1 bigEndian:false.
+            ] ifFalse:[
+                (counter at:#SIZE) == #DWORD ifTrue:[
+                    counterValue := rawData unsignedLongAt:offset + 1 bigEndian:false.
+                ] ifFalse:[
+                    self halt:'unhandled counter-size; please check'.
+                ].
+            ].
+        ].
+
+        counterValue
     ].
 
     objectArray do:[:anObject|
-	"setup the object name"
-	anObject at:#ObjectNameTitle put:(getNameBlock value:(anObject at:#ObjectNameTitleIndex)).
-
-	"setup the name and a counter value array to each counter"
-	(anObject at:#Counters) do:[:aCounter|
-	    aCounter at:#CounterNameTitle put:(getNameBlock value:(aCounter at:#CounterNameTitleIndex)).
-	    aCounter at:#CounterValueArray put:OrderedCollection new.
-	].
-
-	(anObject at:#NumInstances) < 1 ifTrue:[
-	    |rawData|
-
-	    rawData := anObject at:#RawData.
-
-	    (anObject at:#Counters) do:[:aCounter|
-		(aCounter at:#CounterValueArray) add:(getCounterValueBlock value:aCounter value:rawData).
-	    ].
-	] ifFalse:[
-	    (anObject at:#Instances) do:[:anInstance|
-		|rawData|
-
-		rawData := anInstance at:#RawData.
-
-		anInstance at:#Name put:((Unicode16String fromBytes:(anInstance at:#Name) copy swapBytes) copyButLast:1).
-
-		(anObject at:#Counters) do:[:aCounter|
-		    (aCounter at:#CounterValueArray) add:(getCounterValueBlock value:aCounter value:rawData).
-		].
-	    ].
-	].
+        "setup the object name"
+        anObject at:#ObjectNameTitle put:(getNameBlock value:(anObject at:#ObjectNameTitleIndex)).
+
+        "setup the name and a counter value array to each counter"
+        (anObject at:#Counters) do:[:aCounter|
+            aCounter at:#CounterNameTitle put:(getNameBlock value:(aCounter at:#CounterNameTitleIndex)).
+            aCounter at:#CounterValueArray put:OrderedCollection new.
+        ].
+
+        (anObject at:#NumInstances) < 1 ifTrue:[
+            |rawData|
+
+            rawData := anObject at:#RawData.
+
+            (anObject at:#Counters) do:[:aCounter|
+                (aCounter at:#CounterValueArray) add:(getCounterValueBlock value:aCounter value:rawData).
+            ].
+        ] ifFalse:[
+            (anObject at:#Instances) do:[:anInstance|
+                |rawData|
+
+                rawData := anInstance at:#RawData.
+
+                anInstance at:#Name put:((Unicode16String fromBytes:(anInstance at:#Name) copy swapBytes) copyButLast:1).
+
+                (anObject at:#Counters) do:[:aCounter|
+                    (aCounter at:#CounterValueArray) add:(getCounterValueBlock value:aCounter value:rawData).
+                ].
+            ].
+        ].
     ].
 
     ^ self
@@ -17136,15 +17136,15 @@
 !Win32OperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.466 2013-06-06 11:02:00 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.467 2013-06-20 22:33:31 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.466 2013-06-06 11:02:00 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.467 2013-06-20 22:33:31 cg Exp $'
 !
 
 version_SVN
-    ^ '$Id: Win32OperatingSystem.st,v 1.466 2013-06-06 11:02:00 cg Exp $'
+    ^ '$Id: Win32OperatingSystem.st,v 1.467 2013-06-20 22:33:31 cg Exp $'
 
 ! !