--- a/AbstractSourceFileReader.st Mon Oct 26 21:51:17 2009 +0000
+++ b/AbstractSourceFileReader.st Thu Nov 05 14:41:30 2009 +0000
@@ -46,14 +46,15 @@
!AbstractSourceFileReader class methodsFor:'documentation'!
version
- ^ '$Id: AbstractSourceFileReader.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: AbstractSourceFileReader.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/AbstractSourceFileReader.st,v 1.4 2009/10/08 11:50:15 fm Exp §'
+ ^ '$Id: AbstractSourceFileReader.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_SVN
- ^ '$Id: AbstractSourceFileReader.st 10465 2009-08-16 17:14:23Z vranyj1$'
+ ^'§Id: AbstractSourceFileReader.st 10465 2009-08-16 17:14:23Z vranyj1§'
! !
+
--- a/AbstractSourceFileWriter.st Mon Oct 26 21:51:17 2009 +0000
+++ b/AbstractSourceFileWriter.st Thu Nov 05 14:41:30 2009 +0000
@@ -142,14 +142,15 @@
!AbstractSourceFileWriter class methodsFor:'documentation'!
version
- ^ '$Id: AbstractSourceFileWriter.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: AbstractSourceFileWriter.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/AbstractSourceFileWriter.st,v 1.6 2009/10/08 12:03:57 fm Exp §'
+ ^ '$Id: AbstractSourceFileWriter.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_SVN
- ^ '$Id: AbstractSourceFileWriter.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^'§Id: AbstractSourceFileWriter.st 10468 2009-08-22 08:34:50Z vranyj1 §'
! !
+
--- a/ApplicationDefinition.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ApplicationDefinition.st Thu Nov 05 14:41:30 2009 +0000
@@ -36,12 +36,14 @@
documentation
"
- subclasses provide the info on how to build executables and class libraries.
- Actually, subclasses must be subclasses of either LibraryDefinition or
- ApplicationDefinition.
- These know how to generate all required help files for make-building.
-
- Concrete definition classes must redefine:
+ subclasses provide the info on the contents of a package/project and
+ how to build executables and class libraries and how to load/unload packages.
+ Actually, subclasses MUST be subclasses of the two abstract classes LibraryDefinition or
+ ApplicationDefinition. These two know how to generate all required help files for the
+ making/building/loading processa.
+ The makefile creation is driven by file templates which are expanded using strings from the file mappings.
+
+ Concrete definition classes MUST redefine:
classNamesAndAttributes
list of classes which are part of the dll/exe
@@ -146,12 +148,12 @@
value:self preRequisites_code
value:'description'.
- (self class implements:#startupClassName) ifFalse:[
+ (self class includesSelector:#startupClassName) ifFalse:[
aTwoArgBlock
value:self startupClassName_code
value:'description - startup'.
].
- (self class implements:#startupSelector) ifFalse:[
+ (self class includesSelector:#startupSelector) ifFalse:[
aTwoArgBlock
value:self startupSelector_code
value:'description - startup'.
@@ -162,18 +164,18 @@
!
startupClassName_code
- |classes startClasses mainClasses appClasses cls|
+ |classes startClasses mainClasses appClasses|
classes := self classNamesAndAttributes
collect:[:nm | Smalltalk classNamed:nm]
thenSelect:[:cls | cls notNil and:[cls isProjectDefinition not ]].
- mainClasses := classes select:[:each | each theMetaclass implements:#main ].
+ mainClasses := classes select:[:each | each theMetaclass includesSelector:#main ].
mainClasses size == 1 ifTrue:[
^ self startupClassName_codeFor:(mainClasses first name)
].
mainClasses isEmpty ifTrue:[
- startClasses := classes select:[:each | each theMetaclass implements:#start ].
+ startClasses := classes select:[:each | each theMetaclass includesSelector:#start ].
startClasses size == 1 ifTrue:[
^ self startupClassName_codeFor:(startClasses first name)
].
@@ -678,6 +680,693 @@
"Created: / 07-09-2006 / 17:12:53 / cg"
! !
+!ApplicationDefinition class methodsFor:'file mappings'!
+
+additionalFilesToInstall_dot_nsi:bindings
+ ^ String
+ streamContents:[:s |
+ self additionalFilesToInstall do:[:pattern |
+ s nextPutLine:((self installFileLine_nsi_for:pattern)
+ expandPlaceholdersWith:bindings)
+ ].
+ ].
+
+ "Created: / 01-03-2007 / 19:59:18 / cg"
+!
+
+additionalSectionsDescriptions_dot_nsi
+ ^''
+!
+
+additionalSectionsDescriptions_dot_nsi:bindings
+ ^self additionalSectionsDescriptions_dot_nsi expandPlaceholdersWith:bindings
+!
+
+additionalSectionsInsertDescriptions_dot_nsi
+ ^''
+!
+
+additionalSectionsInsertDescriptions_dot_nsi:bindings
+ ^self additionalSectionsInsertDescriptions_dot_nsi expandPlaceholdersWith:bindings
+!
+
+additionalSections_dot_nsi
+ ^''
+!
+
+additionalSections_dot_nsi:bindings
+ ^self additionalSections_dot_nsi expandPlaceholdersWith:bindings
+!
+
+appSourcesLines_dot_nsi:bindings
+ ^ String streamContents:[:s |
+ s nextPutAll:
+('Section "Application Sources" Section4
+ SectionIn 1
+ SetOverwrite ifnewer
+' expandPlaceholdersWith:bindings).
+ self appSourcesProjects do:[:projectID |
+ s nextPutAll:((self defineAPPSourceLine_nsi_for: projectID)expandPlaceholdersWith:bindings).
+ s cr.
+ ].
+ s nextPutAll:
+'SectionEnd'
+ ].
+
+ "Created: / 15-10-2006 / 12:59:03 / cg"
+!
+
+bc_dot_mak_mappings
+ |d|
+
+ d := super bc_dot_mak_mappings.
+ d
+ at: 'LOCAL_INCLUDES' put: (self generateLocalIncludes_win32);
+ at: 'CONSOLE_APPLICATION_OR_EMPTY' put:(self makeConsoleApplication ifTrue:['consoleApp'] ifFalse:'');
+ at: 'NOCONSOLE_APPLICATION_OR_EMPTY' put:(self makeNonConsoleApplication ifTrue:['noConsoleApp'] ifFalse:'');
+ at: 'APPLICATION' put: (self applicationName);
+ at: 'NSI_FILENAME' put: self nsiFilename ;
+ at: 'CONSOLE_APPLICATION' put: (self applicationNameConsole);
+ at: 'NOCONSOLE_APPLICATION' put: (self applicationNameNoConsole);
+ at: 'NOCONSOLE_LOGFILE' put:(self logFilenameNoConsole);
+ at: 'RESFILENAME' put: (self resourceFilename );
+ at: 'RCFILENAME' put: (self rcFilename );
+ at: 'STARTUP_CLASS' put: ( self startupClassName );
+ at: 'STARTUP_SELECTOR' put: (self startupSelector );
+ at: 'MAIN_DEFINES' put: (self mainDefines );
+ 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: 'BUILD_TARGET' put: (self buildTarget );
+ at: 'REQUIRED_SUPPORT_DIRS' put: (self extraTargets asStringWith:' ');
+ yourself.
+
+ self needResources ifTrue:[
+ d
+ at: 'RESOURCE_RULES' put:( self replaceMappings: d
+ in: self bc_dot_mak_resource_rules );
+ at: 'STX_RESOURCE_RULES' put: ( self replaceMappings: d
+ in: self bc_dot_mak_stx_resource_rules);
+ at: 'ADDITIONAL_RESOURCE_TARGETS' put:( self additionalResourceTargets asStringWith:' ');
+ yourself
+ ].
+ self offerSmalltalkSourceCode ifTrue:[
+ d
+ at: 'STX_SOURCE_RULES' put: ( self replaceMappings: d
+ in: self bc_dot_mak_stx_source_rules);
+ yourself
+ ].
+ self offerApplicationSourceCode ifTrue:[
+ d
+ at: 'APP_SOURCE_RULES' put: ( self replaceMappings: d
+ in: self bc_dot_mak_app_source_rules);
+ yourself
+ ].
+ ^ d
+
+ "Modified: / 15-05-2007 / 17:27:04 / cg"
+!
+
+buildDate_dot_h_mappings
+ |d|
+
+ d := Dictionary new.
+ d
+ at: 'BUILDDATE' put: (Timestamp now printStringRFC1123Format ).
+
+ ^ d
+
+ "Created: / 30-08-2006 / 19:19:30 / cg"
+ "Modified: / 14-09-2006 / 18:58:31 / cg"
+!
+
+commonFilesToInstall_dot_nsi:bindings
+ ^ String
+ streamContents:[:s |
+ self commonFilesToInstall do:[:pattern |
+ s nextPutLine:((self installFileLine_nsi_for:pattern)
+ expandPlaceholdersWith:bindings)
+ ].
+ ].
+
+ "Created: / 01-03-2007 / 20:05:20 / cg"
+!
+
+directoryUninstallLines_dot_nsi
+ "%(DIRECTORY_UNINSTALL_LINES)"
+
+ ^'
+ Delete "$INSTDIR\*"
+ RMDir /r "$INSTDIR"'
+!
+
+fileExtensionDefinitionLines_dot_nsi:bindings
+ ^ String streamContents:[:s |
+ self documentExtensions do:[:ext |
+ s nextPutAll:((self defineExtenionLine_nsi_for:ext) expandPlaceholdersWith:bindings)
+ ].
+ ].
+
+ "Created: / 15-10-2006 / 12:59:03 / cg"
+!
+
+fileExtensionUndefinitionLines_dot_nsi:bindings
+ ^ String streamContents:[:s |
+ self documentExtensions do:[:ext |
+ s nextPutAll:((self undefineExtenionLine_nsi_for:ext) expandPlaceholdersWith:bindings)
+ ].
+ ].
+
+ "Created: / 15-10-2006 / 12:59:18 / cg"
+!
+
+make_dot_proto_mappings
+ |mappings|
+
+ mappings := super make_dot_proto_mappings.
+
+ mappings
+ at: 'TOP' put: ( self pathToTop_unix );
+ at: 'NSI_FILENAME' put: self nsiFilename ;
+ at: 'APPLICATION' put: self applicationName;
+ at: 'APPLICATION_PACKAGE' put: self package printString "applicationPackage";
+ at: 'APPLICATION_TYPE' put: self applicationType;
+ at: 'STARTUP_CLASS' put: (self startupClassName);
+ at: 'STARTUP_SELECTOR' put: (self startupSelector);
+ at: 'MAIN_DEFINES' put: (self mainDefines);
+ at: 'REQUIRED_LIBS' put: (self generateRequiredLibs_make_dot_proto);
+ at: 'PREREQUISITES_LIBS' put: (self generatePreRequisiteLines_make_dot_proto);
+ at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto);
+ at: 'REQUIRED_LIBOBJS' put: (self generateRequiredLibobjs_make_dot_proto);
+ at: 'REQUIRED_LINK_LIBOBJS' put: (self generateRequiredLinkLibobjs_make_dot_proto);
+ at: 'DEPENDENCIES' put: (self generateDependencies_unix);
+ at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto );
+ at: 'BUILD_TARGET' put: (self buildTarget ).
+
+ self offerSmalltalkSourceCode ifTrue:[
+ mappings
+ at: 'STX_SOURCE_RULES' put: ( self replaceMappings: mappings
+ in: self make_dot_proto_stx_source_rules).
+ ].
+
+ self offerApplicationSourceCode ifTrue:[
+ mappings
+ at: 'SOURCE_RULES' put:( self replaceMappings: mappings
+ in: self make_dot_proto_app_source_rules ).
+ ].
+
+ self needResources ifTrue:[
+ mappings
+ at: 'REQUIRED_SUPPORT_DIRS' put: 'RESOURCEFILES';
+ at: 'RESOURCE_RULES' put:( self replaceMappings: mappings
+ in: self make_dot_proto_resource_rules );
+ at: 'STX_RESOURCE_RULES' put: ( self replaceMappings: mappings
+ in: self make_dot_proto_stx_resource_rules);
+ at: 'ADDITIONAL_RESOURCE_TARGETS' put:( self additionalResourceTargets asStringWith:' ');
+ yourself.
+ ].
+
+ ^ mappings
+!
+
+modules_dot_c_mappings
+ |d|
+
+ d := Dictionary new.
+ d
+ at: 'INIT_LIST' put: (self generateClassLines:(self classLine_modules_dot_c));
+ at: 'EXTERN_INIT_NAME_LIST' put: (self generateClassLines:(self classLine_modules_dot_c_extern));
+ yourself.
+
+ ^ d
+
+ "Created: / 19-09-2006 / 22:42:15 / cg"
+!
+
+modules_dot_stx_mappings
+ |d|
+
+ d := Dictionary new.
+ d
+ at: 'PREREQUISITE_LIBS' put: (self generatePreRequisiteLibs_modules_dot_stx);
+ at: 'ALLPREREQUISITE_LIBS' put: (self generateAllPreRequisiteLibs_modules_dot_stx);
+ at: 'SUBPROJECT_LIBS' put: (self generateSubProjectLines_modules_dot_stx ).
+
+ ^ d
+
+ "Modified: / 14-09-2006 / 18:58:41 / cg"
+!
+
+nsiDeliveredConsoleExecutable
+ self isGUIApplication ifFalse:[^ '' "made anyway"].
+ self makeConsoleApplication ifTrue:[
+ ^ ('"',self applicationName,'.com','"').
+ ].
+ ^ ''
+!
+
+nsiDeliveredExecutables
+ "by default, an executable named after the application.
+ Redefine, if thats not the case. If multiple have to be delivered,
+ return a string containing each individually double-quoted."
+
+ |s|
+
+ s := ''.
+ self makeNonConsoleApplication ifTrue:[
+ s := '"', self applicationNameNoConsole,'"'.
+ ].
+ self makeConsoleApplication ifTrue:[
+ s := s , (' "',self applicationNameConsole,'"').
+ ].
+ ^ s
+!
+
+packageName_dot_nsi_mappings
+ |d s defLines undefLines stxSourcesLines appSourcesLines|
+
+ d := Dictionary new.
+ d
+ at: 'TOP' put: ( self pathToTop_win32 );
+
+ at: 'APPLICATION' put: (self applicationName);
+ at: 'APPLICATION_ICON' put: (self applicationInstallIconFileName);
+ at: 'NSI_FILENAME' put: (self nsiFilename );
+ at: 'CONSOLE_APPLICATION' put: (self applicationNameConsole);
+ at: 'NOCONSOLE_APPLICATION' put: (self applicationNameNoConsole);
+ at: 'DELIVERED_EXECUTABLES' put: (self nsiDeliveredExecutables);
+ at: 'MODULE' put: ( self module );
+ at: 'MODULE_KEY' put: ( self module asUppercaseFirst );
+ at: 'PRODUCT_NAME' put: (self productName);
+ at: 'PRODUCT_FILENAME' put: (self productFilename);
+ at: 'PRODUCT_VERSION' put: (self productVersion);
+ at: 'PRODUCT_DATE' put: (self productDate);
+ at: 'PRODUCT_PUBLISHER' put: (self productPublisher);
+ at: 'PRODUCT_WEBSITE' put: (self productWebSite);
+ at: 'PRODUCT_INSTALLDIR' put: (self productInstallDir);
+ at: 'FILETYPE' put: ( 'VFT_DLL' );
+ at: 'FILE_VERSION_COMMASEPARATED' put: (self fileVersionCommaSeparated);
+ at: 'PRODUCT_VERSION_COMMASEPARATED' put: (self productVersionCommaSeparated);
+
+ at: 'COMPANY_NAME' put: (self companyName);
+ at: 'FILE_DESCRIPTION' put: (self fileDescription);
+ at: 'FILE_VERSION' put: (self fileVersion);
+ at: 'LEGAL_COPYRIGHT' put: (self legalCopyright ? '');
+ at: 'INTERNAL_NAME' put: (self internalName).
+
+ s := self legalCopyright.
+ s notNil ifTrue:[
+ d at: 'LEGAL_COPYRIGHT_LINE' put: ' VALUE "LegalCopyright", "',s,'\0"'
+ ].
+ s := self applicationInstallIconFileName.
+ s isNil ifTrue:[
+ d at:'SEMI_IF_NO_ICON_EXISTS' put:';; '.
+ d at:'SEMI_IF_ICON_EXISTS' put:''.
+ ] ifFalse:[
+ d at:'SEMI_IF_NO_ICON_EXISTS' put:''.
+ d at:'SEMI_IF_ICON_EXISTS' put:';; '.
+"/ d at: #'ICONDEFINITION_LINE' put: 'IDR_MAINFRAME ICON DISCARDABLE "',s,'"'
+ ].
+
+"/ s := self splashFileName.
+"/ s notNil ifTrue:[
+"/ d at: #'SPLASHDEFINITION_LINE' put: 'IDR_SPLASH BITMAP DISCARDABLE "',s,'"'
+"/ ].
+
+ s := self docDirPath_win32.
+ s isEmptyOrNil ifTrue:[
+ d at:'SEMI_IF_NO_DOC_EXISTS' put:';; '.
+ ] ifFalse:[
+ d at:'SEMI_IF_NO_DOC_EXISTS' put:''.
+ ].
+ self offerSmalltalkSourceCode ifTrue:[
+ stxSourcesLines := self stxSourcesLines_dot_nsi:d.
+ d at:'STX_SOURCES_LINES' put:stxSourcesLines.
+ d at:'SEMI_IF_NO_STX_SOURCES' put:''.
+ ] ifFalse:[
+ d at:'STX_SOURCES_LINES' put:''.
+ d at:'SEMI_IF_NO_STX_SOURCES' put:';;'.
+ ].
+ self offerApplicationSourceCode ifTrue:[
+ appSourcesLines := self appSourcesLines_dot_nsi:d.
+ d at:'APP_SOURCES_LINES' put:appSourcesLines.
+ d at:'SEMI_IF_NO_STX_SOURCES' put:''.
+ ] ifFalse:[
+ d at:'APP_SOURCES_LINES' put:''.
+ d at:'SEMI_IF_NO_APP_SOURCES' put:';;'.
+ ].
+
+ defLines := self fileExtensionDefinitionLines_dot_nsi:d.
+ undefLines := self fileExtensionUndefinitionLines_dot_nsi:d.
+
+ d at:'FILE_EXTENSION_DEFINITION_LINES' put:defLines.
+ d at:'FILE_EXTENSION_UNDEFINITION_LINES' put:undefLines.
+ d at:'ADDITIONAL_FILES_TO_INSTALL' put:(self additionalFilesToInstall_dot_nsi:d).
+ d at:'COMMON_FILES_TO_INSTALL' put:(self commonFilesToInstall_dot_nsi:d).
+ d at:'ADDITIONAL_SECTIONS' put:(self additionalSections_dot_nsi:d).
+ d at:'ADDITIONAL_SECTIONS_DESCRIPTIONS' put:(self additionalSectionsDescriptions_dot_nsi:d).
+ d at:'ADDITIONAL_SECTIONS_INSERT_DESCRIPTIONS' put:(self additionalSectionsInsertDescriptions_dot_nsi:d).
+ d at: 'DIRECTORY_UNINSTALL_LINES' put: (self directoryUninstallLines_dot_nsi).
+ ^ d
+
+ "Created: / 14-09-2006 / 21:08:44 / cg"
+ "Modified: / 15-05-2007 / 17:24:27 / cg"
+!
+
+preRequisiteLine_bc_dot_mak_mappings: aProjectID
+
+ ^ Dictionary new
+ at: 'FILE_NAME' put: (self libraryNameFor:aProjectID);
+ at: 'MODULE_DIRECTORY' put: (self msdosPathToPackage:aProjectID from:self package);
+ at: 'BACK_DIRECTORY' put: (self msdosPathToPackage:self package from:aProjectID);
+ yourself
+
+ "Modified: / 09-02-2007 / 16:59:21 / cg"
+!
+
+preRequisiteLine_bc_dot_mak_mappingsForClass:aClass
+ |relPath|
+
+ relPath := (PackageId from:aClass package) directory copy replaceAll:$/ with:$\.
+
+ ^ Dictionary new
+ at: 'FILE_NAME' put: ( aClass classBaseFilename asFilename withoutSuffix baseName );
+ at: 'MODULE_DIRECTORY' put:relPath;
+ yourself
+
+ "Modified: / 09-02-2007 / 16:28:12 / cg"
+!
+
+preRequisiteLine_make_dot_proto_mappings: aProjectID
+
+ ^ Dictionary new
+ at: 'FILE_NAME' put: (self libraryNameFor:aProjectID);
+ at: 'MODULE_DIRECTORY' put: (self unixPathToPackage:aProjectID from:self package);
+ at: 'BACK_DIRECTORY' put: (self unixPathToPackage:self package from:aProjectID);
+ yourself
+!
+
+preRequisiteLine_make_dot_proto_mappingsForClass:aClass
+ |relPath|
+
+ relPath := (PackageId from:aClass package) directory.
+
+ ^ Dictionary new
+ at: 'FILE_NAME' put: ( aClass classBaseFilename asFilename withoutSuffix baseName );
+ at: 'MODULE_DIRECTORY' put:relPath;
+ yourself
+
+ "Modified: / 09-02-2007 / 16:28:12 / cg"
+!
+
+stxSourcesLines_dot_nsi:bindings
+ ^ String streamContents:[:s |
+ s nextPutAll:
+'Section "STX Sources" Section3
+ SectionIn 1
+ SetOverwrite ifnewer
+'.
+ self stxSourcesProjects do:[:projectID |
+ s nextPutAll:((self defineSTXSourceLine_nsi_for: projectID) expandPlaceholdersWith:bindings).
+ s cr.
+ ].
+ s nextPutAll:
+'SectionEnd'.
+
+ ].
+
+ "Created: / 15-10-2006 / 12:59:03 / cg"
+!
+
+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_MYPROJECT' put: (self msdosPathToPackage: self package from: aProjectID);
+ yourself
+
+ "Modified: / 14-09-2006 / 18:59:26 / cg"
+!
+
+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);
+ yourself
+
+ "Modified: / 14-09-2006 / 18:59:26 / cg"
+! !
+
+!ApplicationDefinition class methodsFor:'file mappings support'!
+
+generateAllPreRequisiteLibs_modules_dot_stx
+ ^ String streamContents:[:s |
+ self allPreRequisitesSorted do:[:projectID |
+ s nextPutLine:(self libraryNameFor:projectID)
+ ].
+ self isGUIApplication ifTrue:[
+ self guiClassFileNames_win32 do:[:eachFilename |
+ s nextPutLine:(eachFilename asFilename withoutSuffix baseName)
+ ].
+ ].
+ ].
+
+ "
+ bosch_dapasx_application generatePreRequisiteLibs_modules_dot_stx
+ "
+
+ "Modified: / 07-09-2006 / 17:22:58 / cg"
+!
+
+generatePreRequisiteLibs_modules_dot_stx
+ ^ String streamContents:[:s |
+ self effectivePreRequisites do:[:projectID |
+ s nextPutLine:(self libraryNameFor:projectID)
+ ].
+ self isGUIApplication ifTrue:[
+ self guiClassFileNames_win32 do:[:eachFilename |
+ s nextPutLine:(eachFilename asFilename withoutSuffix baseName)
+ ].
+ ].
+ ].
+
+ "
+ bosch_dapasx_application generatePreRequisiteLibs_modules_dot_stx
+ "
+
+ "Modified: / 07-09-2006 / 17:22:58 / cg"
+!
+
+generatePreRequisiteLines_bc_dot_mak
+
+ ^ String streamContents:[:s |
+ self allPreRequisitesSorted do:[:eachPackage |
+ |mappings newObjectLine|
+ mappings := self preRequisiteLine_bc_dot_mak_mappings: eachPackage.
+ newObjectLine := self replaceMappings: mappings
+ in: self preRequisiteLine_bc_dot_mak.
+ s nextPutAll:newObjectLine.
+ s cr.
+ ].
+ self guiClasses_win32 do:[:eachClass |
+ |mappings newObjectLine|
+ mappings := self preRequisiteLine_bc_dot_mak_mappingsForClass: eachClass.
+ newObjectLine := self replaceMappings: mappings
+ in: self preRequisiteLine_bc_dot_mak.
+ s nextPutAll:newObjectLine.
+ s cr.
+ ].
+ ]
+
+ "
+ bosch_dapasx_application generatePreRequisiteLines_bc_dot_mak
+ "
+
+ "Created: / 09-08-2006 / 11:24:39 / fm"
+ "Modified: / 14-09-2006 / 21:58:47 / cg"
+!
+
+generatePreRequisiteLines_make_dot_proto
+
+ ^ String streamContents:[:s |
+ self allPreRequisitesSorted do:[:eachPackage |
+ |mappings newObjectLine|
+ mappings := self preRequisiteLine_make_dot_proto_mappings: eachPackage.
+ newObjectLine := self replaceMappings: mappings
+ in: self preRequisiteLine_make_dot_proto.
+ s nextPutAll:newObjectLine.
+ s cr.
+ ].
+ self guiClasses_win32 do:[:eachClass |
+ |mappings newObjectLine|
+ mappings := self preRequisiteLine_make_dot_proto_mappingsForClass: eachClass.
+ newObjectLine := self replaceMappings: mappings
+ in: self preRequisiteLine_make_dot_proto.
+ s nextPutAll:newObjectLine.
+ s cr.
+ ].
+ ]
+
+ "
+ bosch_dapasx_application generatePreRequisiteLines_bc_dot_mak
+ "
+
+ "Created: / 09-08-2006 / 11:24:39 / fm"
+ "Modified: / 14-09-2006 / 21:58:47 / cg"
+!
+
+generateRequiredLibobjs_make_dot_proto
+ |libobjPath libPath|
+
+ ^ String streamContents:[:s |
+ self allPreRequisitesSorted do:[:projectID |
+ libPath := self pathToPackage_unix:projectID.
+ libobjPath := libPath , '/', (self libraryNameFor:projectID).
+ s space; nextPutAll: libobjPath,'$(O_EXT)'; nextPutLine:' \'.
+ ].
+
+ s cr.
+ ].
+
+ "
+ alspa_batch_application generateRequiredLibobjs_make_dot_proto
+ "
+!
+
+generateRequiredLibs_bc_dot_mak
+ ^ String streamContents:[:s |
+ s nextPutLine:' \'.
+ self allPreRequisitesSorted 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.
+ ].
+
+ "
+ bosch_dapasx_application generateRequiredLibs_bc_dot_mak
+ "
+
+ "Modified: / 07-09-2006 / 17:22:51 / cg"
+!
+
+generateRequiredLibs_make_dot_proto
+ ^ String streamContents:[:s |
+ self allPreRequisitesSorted 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.
+ ].
+
+ "
+ alspa_batch_application generateRequiredLibs_make_dot_proto
+ "
+!
+
+generateRequiredLinkLibobjs_make_dot_proto
+
+ ^ String streamContents:[:s |
+ self allPreRequisitesSorted do:[:projectID |
+ s space; nextPutAll:(self libraryNameFor:projectID),'$(O_EXT)'; nextPutLine:' \'.
+ ].
+
+ self isGUIApplication ifTrue:[
+ self guiClassFileNames_unix do:[:eachFilename |
+ s space; nextPutAll:eachFilename,'$(O_EXT)'; nextPutLine:' \'.
+ ].
+ ].
+"/ self subProjects do:[:projectID |
+"/ s space; nextPutAll:(self libraryNameFor:projectID),'$(O_EXT)'; nextPutLine:' \'.
+"/ ].
+ s cr.
+ ].
+
+ "
+ alspa_batch_application generateRequiredLinkLibobjs_make_dot_proto
+ "
+!
+
+generateSubProjectLines_bc_dot_mak
+
+ ^ String streamContents:[:s |
+ self subProjects do:[:projectID |
+ |mappings newObjectLine|
+
+ mappings := self subProjectLine_bc_dot_mak_mappings: projectID.
+ newObjectLine := self replaceMappings: mappings
+ in: self subProjectLine_bc_dot_mak.
+ s nextPutAll:newObjectLine.
+ s cr.
+ ]
+ ]
+"
+ bosch_dapasx_application generateSubProjectLines_bc_dot_mak
+
+"
+
+ "Created: / 09-08-2006 / 11:24:39 / fm"
+ "Modified: / 14-09-2006 / 18:46:09 / cg"
+!
+
+generateSubProjectLines_make_dot_proto
+
+ ^ String streamContents:[:s |
+ self subProjects do:[:projectID |
+ |mappings newObjectLine|
+
+ mappings := self subProjectLine_make_dot_proto_mappings: projectID.
+ newObjectLine := self replaceMappings: mappings
+ in: self subProjectLine_bc_dot_mak.
+ s nextPutAll:newObjectLine.
+ s cr.
+ ]
+ ]
+"
+ bosch_dapasx_application generateSubProjectLines_make_dot_proto
+
+"
+
+ "Created: / 09-08-2006 / 11:24:39 / fm"
+ "Modified: / 14-09-2006 / 18:46:09 / cg"
+!
+
+generateSubProjectLines_modules_dot_stx
+ |string|
+
+ string := String streamContents:[:s |
+ self subProjects do:[:projectID |
+ s nextPutLine:(self libraryNameFor:projectID)
+ ].
+ ].
+
+ ^ string
+
+ "
+ bosch_dapasx_application generateSubProjectLines_modules_dot_stx
+ "
+
+ "Modified: / 17-08-2006 / 17:22:37 / cg"
+! !
+
!ApplicationDefinition class methodsFor:'file templates'!
bc_dot_def
@@ -1836,693 +2525,6 @@
"Created: / 15-10-2006 / 12:51:00 / cg"
! !
-!ApplicationDefinition class methodsFor:'mappings'!
-
-additionalFilesToInstall_dot_nsi:bindings
- ^ String
- streamContents:[:s |
- self additionalFilesToInstall do:[:pattern |
- s nextPutLine:((self installFileLine_nsi_for:pattern)
- expandPlaceholdersWith:bindings)
- ].
- ].
-
- "Created: / 01-03-2007 / 19:59:18 / cg"
-!
-
-additionalSectionsDescriptions_dot_nsi
- ^''
-!
-
-additionalSectionsDescriptions_dot_nsi:bindings
- ^self additionalSectionsDescriptions_dot_nsi expandPlaceholdersWith:bindings
-!
-
-additionalSectionsInsertDescriptions_dot_nsi
- ^''
-!
-
-additionalSectionsInsertDescriptions_dot_nsi:bindings
- ^self additionalSectionsInsertDescriptions_dot_nsi expandPlaceholdersWith:bindings
-!
-
-additionalSections_dot_nsi
- ^''
-!
-
-additionalSections_dot_nsi:bindings
- ^self additionalSections_dot_nsi expandPlaceholdersWith:bindings
-!
-
-appSourcesLines_dot_nsi:bindings
- ^ String streamContents:[:s |
- s nextPutAll:
-('Section "Application Sources" Section4
- SectionIn 1
- SetOverwrite ifnewer
-' expandPlaceholdersWith:bindings).
- self appSourcesProjects do:[:projectID |
- s nextPutAll:((self defineAPPSourceLine_nsi_for: projectID)expandPlaceholdersWith:bindings).
- s cr.
- ].
- s nextPutAll:
-'SectionEnd'
- ].
-
- "Created: / 15-10-2006 / 12:59:03 / cg"
-!
-
-bc_dot_mak_mappings
- |d|
-
- d := super bc_dot_mak_mappings.
- d
- at: 'LOCAL_INCLUDES' put: (self generateLocalIncludes_win32);
- at: 'CONSOLE_APPLICATION_OR_EMPTY' put:(self makeConsoleApplication ifTrue:['consoleApp'] ifFalse:'');
- at: 'NOCONSOLE_APPLICATION_OR_EMPTY' put:(self makeNonConsoleApplication ifTrue:['noConsoleApp'] ifFalse:'');
- at: 'APPLICATION' put: (self applicationName);
- at: 'NSI_FILENAME' put: self nsiFilename ;
- at: 'CONSOLE_APPLICATION' put: (self applicationNameConsole);
- at: 'NOCONSOLE_APPLICATION' put: (self applicationNameNoConsole);
- at: 'NOCONSOLE_LOGFILE' put:(self logFilenameNoConsole);
- at: 'RESFILENAME' put: (self resourceFilename );
- at: 'RCFILENAME' put: (self rcFilename );
- at: 'STARTUP_CLASS' put: ( self startupClassName );
- at: 'STARTUP_SELECTOR' put: (self startupSelector );
- at: 'MAIN_DEFINES' put: (self mainDefines );
- 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: 'BUILD_TARGET' put: (self buildTarget );
- at: 'REQUIRED_SUPPORT_DIRS' put: (self extraTargets asStringWith:' ');
- yourself.
-
- self needResources ifTrue:[
- d
- at: 'RESOURCE_RULES' put:( self replaceMappings: d
- in: self bc_dot_mak_resource_rules );
- at: 'STX_RESOURCE_RULES' put: ( self replaceMappings: d
- in: self bc_dot_mak_stx_resource_rules);
- at: 'ADDITIONAL_RESOURCE_TARGETS' put:( self additionalResourceTargets asStringWith:' ');
- yourself
- ].
- self offerSmalltalkSourceCode ifTrue:[
- d
- at: 'STX_SOURCE_RULES' put: ( self replaceMappings: d
- in: self bc_dot_mak_stx_source_rules);
- yourself
- ].
- self offerApplicationSourceCode ifTrue:[
- d
- at: 'APP_SOURCE_RULES' put: ( self replaceMappings: d
- in: self bc_dot_mak_app_source_rules);
- yourself
- ].
- ^ d
-
- "Modified: / 15-05-2007 / 17:27:04 / cg"
-!
-
-buildDate_dot_h_mappings
- |d|
-
- d := Dictionary new.
- d
- at: 'BUILDDATE' put: (Timestamp now printStringRFC1123Format ).
-
- ^ d
-
- "Created: / 30-08-2006 / 19:19:30 / cg"
- "Modified: / 14-09-2006 / 18:58:31 / cg"
-!
-
-commonFilesToInstall_dot_nsi:bindings
- ^ String
- streamContents:[:s |
- self commonFilesToInstall do:[:pattern |
- s nextPutLine:((self installFileLine_nsi_for:pattern)
- expandPlaceholdersWith:bindings)
- ].
- ].
-
- "Created: / 01-03-2007 / 20:05:20 / cg"
-!
-
-directoryUninstallLines_dot_nsi
- "%(DIRECTORY_UNINSTALL_LINES)"
-
- ^'
- Delete "$INSTDIR\*"
- RMDir /r "$INSTDIR"'
-!
-
-fileExtensionDefinitionLines_dot_nsi:bindings
- ^ String streamContents:[:s |
- self documentExtensions do:[:ext |
- s nextPutAll:((self defineExtenionLine_nsi_for:ext) expandPlaceholdersWith:bindings)
- ].
- ].
-
- "Created: / 15-10-2006 / 12:59:03 / cg"
-!
-
-fileExtensionUndefinitionLines_dot_nsi:bindings
- ^ String streamContents:[:s |
- self documentExtensions do:[:ext |
- s nextPutAll:((self undefineExtenionLine_nsi_for:ext) expandPlaceholdersWith:bindings)
- ].
- ].
-
- "Created: / 15-10-2006 / 12:59:18 / cg"
-!
-
-make_dot_proto_mappings
- |mappings|
-
- mappings := super make_dot_proto_mappings.
-
- mappings
- at: 'TOP' put: ( self pathToTop_unix );
- at: 'NSI_FILENAME' put: self nsiFilename ;
- at: 'APPLICATION' put: self applicationName;
- at: 'APPLICATION_PACKAGE' put: self package printString "applicationPackage";
- at: 'APPLICATION_TYPE' put: self applicationType;
- at: 'STARTUP_CLASS' put: (self startupClassName);
- at: 'STARTUP_SELECTOR' put: (self startupSelector);
- at: 'MAIN_DEFINES' put: (self mainDefines);
- at: 'REQUIRED_LIBS' put: (self generateRequiredLibs_make_dot_proto);
- at: 'PREREQUISITES_LIBS' put: (self generatePreRequisiteLines_make_dot_proto);
- at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto);
- at: 'REQUIRED_LIBOBJS' put: (self generateRequiredLibobjs_make_dot_proto);
- at: 'REQUIRED_LINK_LIBOBJS' put: (self generateRequiredLinkLibobjs_make_dot_proto);
- at: 'DEPENDENCIES' put: (self generateDependencies_unix);
- at: 'SUBPROJECTS_LIBS' put: (self generateSubProjectLines_make_dot_proto );
- at: 'BUILD_TARGET' put: (self buildTarget ).
-
- self offerSmalltalkSourceCode ifTrue:[
- mappings
- at: 'STX_SOURCE_RULES' put: ( self replaceMappings: mappings
- in: self make_dot_proto_stx_source_rules).
- ].
-
- self offerApplicationSourceCode ifTrue:[
- mappings
- at: 'SOURCE_RULES' put:( self replaceMappings: mappings
- in: self make_dot_proto_app_source_rules ).
- ].
-
- self needResources ifTrue:[
- mappings
- at: 'REQUIRED_SUPPORT_DIRS' put: 'RESOURCEFILES';
- at: 'RESOURCE_RULES' put:( self replaceMappings: mappings
- in: self make_dot_proto_resource_rules );
- at: 'STX_RESOURCE_RULES' put: ( self replaceMappings: mappings
- in: self make_dot_proto_stx_resource_rules);
- at: 'ADDITIONAL_RESOURCE_TARGETS' put:( self additionalResourceTargets asStringWith:' ');
- yourself.
- ].
-
- ^ mappings
-!
-
-modules_dot_c_mappings
- |d|
-
- d := Dictionary new.
- d
- at: 'INIT_LIST' put: (self generateClassLines:(self classLine_modules_dot_c));
- at: 'EXTERN_INIT_NAME_LIST' put: (self generateClassLines:(self classLine_modules_dot_c_extern));
- yourself.
-
- ^ d
-
- "Created: / 19-09-2006 / 22:42:15 / cg"
-!
-
-modules_dot_stx_mappings
- |d|
-
- d := Dictionary new.
- d
- at: 'PREREQUISITE_LIBS' put: (self generatePreRequisiteLibs_modules_dot_stx);
- at: 'ALLPREREQUISITE_LIBS' put: (self generateAllPreRequisiteLibs_modules_dot_stx);
- at: 'SUBPROJECT_LIBS' put: (self generateSubProjectLines_modules_dot_stx ).
-
- ^ d
-
- "Modified: / 14-09-2006 / 18:58:41 / cg"
-!
-
-nsiDeliveredConsoleExecutable
- self isGUIApplication ifFalse:[^ '' "made anyway"].
- self makeConsoleApplication ifTrue:[
- ^ ('"',self applicationName,'.com','"').
- ].
- ^ ''
-!
-
-nsiDeliveredExecutables
- "by default, an executable named after the application.
- Redefine, if thats not the case. If multiple have to be delivered,
- return a string containing each individually double-quoted."
-
- |s|
-
- s := ''.
- self makeNonConsoleApplication ifTrue:[
- s := '"', self applicationNameNoConsole,'"'.
- ].
- self makeConsoleApplication ifTrue:[
- s := s , (' "',self applicationNameConsole,'"').
- ].
- ^ s
-!
-
-packageName_dot_nsi_mappings
- |d s defLines undefLines stxSourcesLines appSourcesLines|
-
- d := Dictionary new.
- d
- at: 'TOP' put: ( self pathToTop_win32 );
-
- at: 'APPLICATION' put: (self applicationName);
- at: 'APPLICATION_ICON' put: (self applicationInstallIconFileName);
- at: 'NSI_FILENAME' put: (self nsiFilename );
- at: 'CONSOLE_APPLICATION' put: (self applicationNameConsole);
- at: 'NOCONSOLE_APPLICATION' put: (self applicationNameNoConsole);
- at: 'DELIVERED_EXECUTABLES' put: (self nsiDeliveredExecutables);
- at: 'MODULE' put: ( self module );
- at: 'MODULE_KEY' put: ( self module asUppercaseFirst );
- at: 'PRODUCT_NAME' put: (self productName);
- at: 'PRODUCT_FILENAME' put: (self productFilename);
- at: 'PRODUCT_VERSION' put: (self productVersion);
- at: 'PRODUCT_DATE' put: (self productDate);
- at: 'PRODUCT_PUBLISHER' put: (self productPublisher);
- at: 'PRODUCT_WEBSITE' put: (self productWebSite);
- at: 'PRODUCT_INSTALLDIR' put: (self productInstallDir);
- at: 'FILETYPE' put: ( 'VFT_DLL' );
- at: 'FILE_VERSION_COMMASEPARATED' put: (self fileVersionCommaSeparated);
- at: 'PRODUCT_VERSION_COMMASEPARATED' put: (self productVersionCommaSeparated);
-
- at: 'COMPANY_NAME' put: (self companyName);
- at: 'FILE_DESCRIPTION' put: (self fileDescription);
- at: 'FILE_VERSION' put: (self fileVersion);
- at: 'LEGAL_COPYRIGHT' put: (self legalCopyright ? '');
- at: 'INTERNAL_NAME' put: (self internalName).
-
- s := self legalCopyright.
- s notNil ifTrue:[
- d at: 'LEGAL_COPYRIGHT_LINE' put: ' VALUE "LegalCopyright", "',s,'\0"'
- ].
- s := self applicationInstallIconFileName.
- s isNil ifTrue:[
- d at:'SEMI_IF_NO_ICON_EXISTS' put:';; '.
- d at:'SEMI_IF_ICON_EXISTS' put:''.
- ] ifFalse:[
- d at:'SEMI_IF_NO_ICON_EXISTS' put:''.
- d at:'SEMI_IF_ICON_EXISTS' put:';; '.
-"/ d at: #'ICONDEFINITION_LINE' put: 'IDR_MAINFRAME ICON DISCARDABLE "',s,'"'
- ].
-
-"/ s := self splashFileName.
-"/ s notNil ifTrue:[
-"/ d at: #'SPLASHDEFINITION_LINE' put: 'IDR_SPLASH BITMAP DISCARDABLE "',s,'"'
-"/ ].
-
- s := self docDirPath_win32.
- s isEmptyOrNil ifTrue:[
- d at:'SEMI_IF_NO_DOC_EXISTS' put:';; '.
- ] ifFalse:[
- d at:'SEMI_IF_NO_DOC_EXISTS' put:''.
- ].
- self offerSmalltalkSourceCode ifTrue:[
- stxSourcesLines := self stxSourcesLines_dot_nsi:d.
- d at:'STX_SOURCES_LINES' put:stxSourcesLines.
- d at:'SEMI_IF_NO_STX_SOURCES' put:''.
- ] ifFalse:[
- d at:'STX_SOURCES_LINES' put:''.
- d at:'SEMI_IF_NO_STX_SOURCES' put:';;'.
- ].
- self offerApplicationSourceCode ifTrue:[
- appSourcesLines := self appSourcesLines_dot_nsi:d.
- d at:'APP_SOURCES_LINES' put:appSourcesLines.
- d at:'SEMI_IF_NO_STX_SOURCES' put:''.
- ] ifFalse:[
- d at:'APP_SOURCES_LINES' put:''.
- d at:'SEMI_IF_NO_APP_SOURCES' put:';;'.
- ].
-
- defLines := self fileExtensionDefinitionLines_dot_nsi:d.
- undefLines := self fileExtensionUndefinitionLines_dot_nsi:d.
-
- d at:'FILE_EXTENSION_DEFINITION_LINES' put:defLines.
- d at:'FILE_EXTENSION_UNDEFINITION_LINES' put:undefLines.
- d at:'ADDITIONAL_FILES_TO_INSTALL' put:(self additionalFilesToInstall_dot_nsi:d).
- d at:'COMMON_FILES_TO_INSTALL' put:(self commonFilesToInstall_dot_nsi:d).
- d at:'ADDITIONAL_SECTIONS' put:(self additionalSections_dot_nsi:d).
- d at:'ADDITIONAL_SECTIONS_DESCRIPTIONS' put:(self additionalSectionsDescriptions_dot_nsi:d).
- d at:'ADDITIONAL_SECTIONS_INSERT_DESCRIPTIONS' put:(self additionalSectionsInsertDescriptions_dot_nsi:d).
- d at: 'DIRECTORY_UNINSTALL_LINES' put: (self directoryUninstallLines_dot_nsi).
- ^ d
-
- "Created: / 14-09-2006 / 21:08:44 / cg"
- "Modified: / 15-05-2007 / 17:24:27 / cg"
-!
-
-preRequisiteLine_bc_dot_mak_mappings: aProjectID
-
- ^ Dictionary new
- at: 'FILE_NAME' put: (self libraryNameFor:aProjectID);
- at: 'MODULE_DIRECTORY' put: (self msdosPathToPackage:aProjectID from:self package);
- at: 'BACK_DIRECTORY' put: (self msdosPathToPackage:self package from:aProjectID);
- yourself
-
- "Modified: / 09-02-2007 / 16:59:21 / cg"
-!
-
-preRequisiteLine_bc_dot_mak_mappingsForClass:aClass
- |relPath|
-
- relPath := (PackageId from:aClass package) directory copy replaceAll:$/ with:$\.
-
- ^ Dictionary new
- at: 'FILE_NAME' put: ( aClass classBaseFilename asFilename withoutSuffix baseName );
- at: 'MODULE_DIRECTORY' put:relPath;
- yourself
-
- "Modified: / 09-02-2007 / 16:28:12 / cg"
-!
-
-preRequisiteLine_make_dot_proto_mappings: aProjectID
-
- ^ Dictionary new
- at: 'FILE_NAME' put: (self libraryNameFor:aProjectID);
- at: 'MODULE_DIRECTORY' put: (self unixPathToPackage:aProjectID from:self package);
- at: 'BACK_DIRECTORY' put: (self unixPathToPackage:self package from:aProjectID);
- yourself
-!
-
-preRequisiteLine_make_dot_proto_mappingsForClass:aClass
- |relPath|
-
- relPath := (PackageId from:aClass package) directory.
-
- ^ Dictionary new
- at: 'FILE_NAME' put: ( aClass classBaseFilename asFilename withoutSuffix baseName );
- at: 'MODULE_DIRECTORY' put:relPath;
- yourself
-
- "Modified: / 09-02-2007 / 16:28:12 / cg"
-!
-
-stxSourcesLines_dot_nsi:bindings
- ^ String streamContents:[:s |
- s nextPutAll:
-'Section "STX Sources" Section3
- SectionIn 1
- SetOverwrite ifnewer
-'.
- self stxSourcesProjects do:[:projectID |
- s nextPutAll:((self defineSTXSourceLine_nsi_for: projectID) expandPlaceholdersWith:bindings).
- s cr.
- ].
- s nextPutAll:
-'SectionEnd'.
-
- ].
-
- "Created: / 15-10-2006 / 12:59:03 / cg"
-!
-
-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_MYPROJECT' put: (self msdosPathToPackage: self package from: aProjectID);
- yourself
-
- "Modified: / 14-09-2006 / 18:59:26 / cg"
-!
-
-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);
- yourself
-
- "Modified: / 14-09-2006 / 18:59:26 / cg"
-! !
-
-!ApplicationDefinition class methodsFor:'mappings support'!
-
-generateAllPreRequisiteLibs_modules_dot_stx
- ^ String streamContents:[:s |
- self allPreRequisitesSorted do:[:projectID |
- s nextPutLine:(self libraryNameFor:projectID)
- ].
- self isGUIApplication ifTrue:[
- self guiClassFileNames_win32 do:[:eachFilename |
- s nextPutLine:(eachFilename asFilename withoutSuffix baseName)
- ].
- ].
- ].
-
- "
- bosch_dapasx_application generatePreRequisiteLibs_modules_dot_stx
- "
-
- "Modified: / 07-09-2006 / 17:22:58 / cg"
-!
-
-generatePreRequisiteLibs_modules_dot_stx
- ^ String streamContents:[:s |
- self effectivePreRequisites do:[:projectID |
- s nextPutLine:(self libraryNameFor:projectID)
- ].
- self isGUIApplication ifTrue:[
- self guiClassFileNames_win32 do:[:eachFilename |
- s nextPutLine:(eachFilename asFilename withoutSuffix baseName)
- ].
- ].
- ].
-
- "
- bosch_dapasx_application generatePreRequisiteLibs_modules_dot_stx
- "
-
- "Modified: / 07-09-2006 / 17:22:58 / cg"
-!
-
-generatePreRequisiteLines_bc_dot_mak
-
- ^ String streamContents:[:s |
- self allPreRequisitesSorted do:[:eachPackage |
- |mappings newObjectLine|
- mappings := self preRequisiteLine_bc_dot_mak_mappings: eachPackage.
- newObjectLine := self replaceMappings: mappings
- in: self preRequisiteLine_bc_dot_mak.
- s nextPutAll:newObjectLine.
- s cr.
- ].
- self guiClasses_win32 do:[:eachClass |
- |mappings newObjectLine|
- mappings := self preRequisiteLine_bc_dot_mak_mappingsForClass: eachClass.
- newObjectLine := self replaceMappings: mappings
- in: self preRequisiteLine_bc_dot_mak.
- s nextPutAll:newObjectLine.
- s cr.
- ].
- ]
-
- "
- bosch_dapasx_application generatePreRequisiteLines_bc_dot_mak
- "
-
- "Created: / 09-08-2006 / 11:24:39 / fm"
- "Modified: / 14-09-2006 / 21:58:47 / cg"
-!
-
-generatePreRequisiteLines_make_dot_proto
-
- ^ String streamContents:[:s |
- self allPreRequisitesSorted do:[:eachPackage |
- |mappings newObjectLine|
- mappings := self preRequisiteLine_make_dot_proto_mappings: eachPackage.
- newObjectLine := self replaceMappings: mappings
- in: self preRequisiteLine_make_dot_proto.
- s nextPutAll:newObjectLine.
- s cr.
- ].
- self guiClasses_win32 do:[:eachClass |
- |mappings newObjectLine|
- mappings := self preRequisiteLine_make_dot_proto_mappingsForClass: eachClass.
- newObjectLine := self replaceMappings: mappings
- in: self preRequisiteLine_make_dot_proto.
- s nextPutAll:newObjectLine.
- s cr.
- ].
- ]
-
- "
- bosch_dapasx_application generatePreRequisiteLines_bc_dot_mak
- "
-
- "Created: / 09-08-2006 / 11:24:39 / fm"
- "Modified: / 14-09-2006 / 21:58:47 / cg"
-!
-
-generateRequiredLibobjs_make_dot_proto
- |libobjPath libPath|
-
- ^ String streamContents:[:s |
- self allPreRequisitesSorted do:[:projectID |
- libPath := self pathToPackage_unix:projectID.
- libobjPath := libPath , '/', (self libraryNameFor:projectID).
- s space; nextPutAll: libobjPath,'$(O_EXT)'; nextPutLine:' \'.
- ].
-
- s cr.
- ].
-
- "
- alspa_batch_application generateRequiredLibobjs_make_dot_proto
- "
-!
-
-generateRequiredLibs_bc_dot_mak
- ^ String streamContents:[:s |
- s nextPutLine:' \'.
- self allPreRequisitesSorted 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.
- ].
-
- "
- bosch_dapasx_application generateRequiredLibs_bc_dot_mak
- "
-
- "Modified: / 07-09-2006 / 17:22:51 / cg"
-!
-
-generateRequiredLibs_make_dot_proto
- ^ String streamContents:[:s |
- self allPreRequisitesSorted 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.
- ].
-
- "
- alspa_batch_application generateRequiredLibs_make_dot_proto
- "
-!
-
-generateRequiredLinkLibobjs_make_dot_proto
-
- ^ String streamContents:[:s |
- self allPreRequisitesSorted do:[:projectID |
- s space; nextPutAll:(self libraryNameFor:projectID),'$(O_EXT)'; nextPutLine:' \'.
- ].
-
- self isGUIApplication ifTrue:[
- self guiClassFileNames_unix do:[:eachFilename |
- s space; nextPutAll:eachFilename,'$(O_EXT)'; nextPutLine:' \'.
- ].
- ].
-"/ self subProjects do:[:projectID |
-"/ s space; nextPutAll:(self libraryNameFor:projectID),'$(O_EXT)'; nextPutLine:' \'.
-"/ ].
- s cr.
- ].
-
- "
- alspa_batch_application generateRequiredLinkLibobjs_make_dot_proto
- "
-!
-
-generateSubProjectLines_bc_dot_mak
-
- ^ String streamContents:[:s |
- self subProjects do:[:projectID |
- |mappings newObjectLine|
-
- mappings := self subProjectLine_bc_dot_mak_mappings: projectID.
- newObjectLine := self replaceMappings: mappings
- in: self subProjectLine_bc_dot_mak.
- s nextPutAll:newObjectLine.
- s cr.
- ]
- ]
-"
- bosch_dapasx_application generateSubProjectLines_bc_dot_mak
-
-"
-
- "Created: / 09-08-2006 / 11:24:39 / fm"
- "Modified: / 14-09-2006 / 18:46:09 / cg"
-!
-
-generateSubProjectLines_make_dot_proto
-
- ^ String streamContents:[:s |
- self subProjects do:[:projectID |
- |mappings newObjectLine|
-
- mappings := self subProjectLine_make_dot_proto_mappings: projectID.
- newObjectLine := self replaceMappings: mappings
- in: self subProjectLine_bc_dot_mak.
- s nextPutAll:newObjectLine.
- s cr.
- ]
- ]
-"
- bosch_dapasx_application generateSubProjectLines_make_dot_proto
-
-"
-
- "Created: / 09-08-2006 / 11:24:39 / fm"
- "Modified: / 14-09-2006 / 18:46:09 / cg"
-!
-
-generateSubProjectLines_modules_dot_stx
- |string|
-
- string := String streamContents:[:s |
- self subProjects do:[:projectID |
- s nextPutLine:(self libraryNameFor:projectID)
- ].
- ].
-
- ^ string
-
- "
- bosch_dapasx_application generateSubProjectLines_modules_dot_stx
- "
-
- "Modified: / 17-08-2006 / 17:22:37 / cg"
-! !
-
!ApplicationDefinition class methodsFor:'queries'!
canHaveExtensions
@@ -2536,6 +2538,12 @@
"
"Created: / 30-08-2006 / 15:29:49 / cg"
+!
+
+projectType
+ ^ self isGUIApplication
+ ifTrue:[ GUIApplicationType ]
+ ifFalse:[ NonGUIApplicationType ]
! !
!ApplicationDefinition class methodsFor:'sanity checks'!
@@ -2547,7 +2555,7 @@
startupClassName
"/ startupSelector
) do:[:sel |
- (self theMetaclass implements:sel) ifFalse:[
+ (self theMetaclass includesSelector:sel) ifFalse:[
Dialog
warn:('The %1-method is missing from the description %2!!'
bindWith:sel allBold
@@ -2568,6 +2576,10 @@
!ApplicationDefinition class methodsFor:'testing'!
+isAbstract
+ ^ self == ApplicationDefinition
+!
+
isApplicationDefinition
^ self ~~ ApplicationDefinition
@@ -2583,10 +2595,11 @@
!ApplicationDefinition class methodsFor:'documentation'!
version
- ^ '$Id: ApplicationDefinition.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: ApplicationDefinition.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.145 2009/10/10 15:56:54 cg Exp §'
+ ^ '$Id: ApplicationDefinition.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Array.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Array.st Thu Nov 05 14:41:30 2009 +0000
@@ -2546,10 +2546,11 @@
!Array class methodsFor:'documentation'!
version
- ^ '$Id: Array.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Array.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Array.st,v 1.146 2009/10/06 15:16:24 cg Exp §'
+ ^ '$Id: Array.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Association.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Association.st Thu Nov 05 14:41:30 2009 +0000
@@ -173,10 +173,11 @@
!Association class methodsFor:'documentation'!
version
- ^ '$Id: Association.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Association.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Association.st,v 1.23 2009/10/06 15:16:10 cg Exp §'
+ ^ '$Id: Association.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Autoload.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Autoload.st Thu Nov 05 14:41:30 2009 +0000
@@ -763,12 +763,13 @@
!Autoload class methodsFor:'documentation'!
version
- ^ '$Id: Autoload.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Autoload.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.155 2009/10/14 10:50:02 stefan Exp §'
+ ^ '$Id: Autoload.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Autoload initialize!
+
--- a/AutoloadMetaclass.st Mon Oct 26 21:51:17 2009 +0000
+++ b/AutoloadMetaclass.st Thu Nov 05 14:41:30 2009 +0000
@@ -104,10 +104,11 @@
!AutoloadMetaclass class methodsFor:'documentation'!
version
- ^ '$Id: AutoloadMetaclass.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: AutoloadMetaclass.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/AutoloadMetaclass.st,v 1.7 2009/10/14 11:36:30 stefan Exp §'
+ ^ '$Id: AutoloadMetaclass.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Behavior.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Behavior.st Thu Nov 05 14:41:30 2009 +0000
@@ -985,6 +985,7 @@
"Modified: 23.4.1996 / 15:55:52 / cg"
! !
+
!Behavior methodsFor:'Camp Smalltalk'!
sunitAllSelectors
@@ -1034,6 +1035,10 @@
!Behavior methodsFor:'Compatibility-Squeak'!
+classComment:comment stamp:commentStamp
+ self comment:comment
+!
+
defaultNameStemForInstances
"Answer a basis for names of default instances of the receiver"
@@ -1041,6 +1046,22 @@
!
+kindOfSubclass
+ "Answer a String that is the keyword that describes the receiver's kind
+ of subclass, either a regular subclass, a variableSubclass, a
+ variableByteSubclass, a variableWordSubclass, or a weakSubclass."
+
+ self isWeakPointers ifTrue:[
+ ^ ' weakSubclass: '
+ ].
+ ^ ' ',self firstDefinitionSelectorPart,' '
+
+ "
+ Array kindOfSubclass
+ WeakArray kindOfSubclass
+ "
+!
+
lookupSelector:aSelector
"return the method for a selector - Squeak compatibility"
@@ -4111,22 +4132,26 @@
implements:aSelector
"return true, if the receiver implements aSelector.
(i.e. implemented in THIS class - NOT in a superclass).
+ This is semantically equivalent to includesSelector: (which is ST/80/Squeak compatibility).
Caveat:
- This simply checks for the selector being present in the classes
- selector table - therefore, it does not care for ignoredMethods.
- (but: you should not use this method for protocol-testing, anyway).
+ This simply checks for the selector being present in the classes
+ selector table - therefore, it does not care for ignoredMethods.
+ (but: you should not use this method for protocol-testing, anyway).
Hint:
- Dont use this method to check if someone responds to a message -
- use #canUnderstand: on the class or #respondsTo: on the instance
- to do this."
+ Dont use this method to check if someone responds to a message -
+ use #canUnderstand: on the class or #respondsTo: on the instance
+ to do this."
^ self includesSelector:aSelector
"
notice: this is class protocol
+ True includesSelector:#ifTrue:
+ True includesSelector:#==
+
True implements:#ifTrue:
True implements:#==
@@ -4163,11 +4188,17 @@
includesSelector:aSelector
"return true, if the methodDictionary of THIS class includes a method for aSelector.
(i.e. if aSelector is implemented in THIS class - NOT in a superclass).
+ This is semantically equivalent to implements: (ST/80/Squeak compatibility).
Hint:
- Dont use this method to check if someone responds to a message -
- use #canUnderstand: on the class or #respondsTo: on the instance
- to do this."
+ Dont use this method to check if someone responds to a message -
+ use #canUnderstand: on the class or #respondsTo: on the instance
+ to do this.
+
+ Caveat:
+ This simply checks for the selector being present in the classes
+ selector table - therefore, it does not care for ignoredMethods.
+ (but: you should not use this method for protocol-testing, anyway)."
^ self methodDictionary includesIdenticalKey:aSelector
@@ -4572,10 +4603,11 @@
!Behavior class methodsFor:'documentation'!
version
- ^ '$Id: Behavior.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Behavior.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Behavior.st,v 1.294 2009/10/10 09:00:40 cg Exp §'
+ ^ '$Id: Behavior.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Block.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Block.st Thu Nov 05 14:41:30 2009 +0000
@@ -485,7 +485,7 @@
|numArgs|
- numArgs := handlerBlock numArgs.
+ numArgs := handlerBlock isBlock ifTrue:[handlerBlock numArgs] ifFalse:[0].
numArgs == 1 ifTrue:[
^ self on:Error do:handlerBlock
].
@@ -547,7 +547,6 @@
"Created: 15.11.1996 / 11:38:37 / cg"
! !
-
!Block methodsFor:'accessing'!
home
@@ -2027,15 +2026,18 @@
exceptionHandlerInContext isExceptionHandler ifFalse:[
exceptionHandlerInContext isNil ifTrue:[
'Block [warning]: nil ExceptionHandler in on:do:on:do:-context' errorPrintCR.
- ] ifFalse:[(exceptionHandlerInContext isBehavior
- and:[exceptionHandlerInContext isLoaded not]) ifTrue:[
- "If the exception class is still autoloaded,
- it does not accept our exception. Raising the exception would load the class"
- ^ nil
] ifFalse:[
- 'Block [warning]: non-ExceptionHandler in on:do:on:do:-context' errorPrintCR.
- ]].
- aContext fullPrint.
+ (exceptionHandlerInContext isBehavior
+ and:[exceptionHandlerInContext isLoaded not]) ifTrue:[
+ "If the exception class is still autoloaded,
+ it does not accept our exception. Raising the exception would load the class"
+ ^ nil
+ ] ifFalse:[
+ 'Block [warning]: non-ExceptionHandler in on:do:on:do:-context' errorPrintCR.
+ ]
+ ].
+ aContext fullPrintString errorPrintCR.
+ self breakPoint:#cg.
^ nil.
].
(exceptionHandlerInContext accepts:exceptionCreator) ifTrue:[
@@ -2046,15 +2048,18 @@
exceptionHandlerInContext isExceptionHandler ifFalse:[
exceptionHandlerInContext isNil ifTrue:[
'Block [warning]: nil ExceptionHandler in on:do:on:do:-context' errorPrintCR.
- ] ifFalse:[(exceptionHandlerInContext isBehavior
- and:[exceptionHandlerInContext isLoaded not]) ifTrue:[
- "If the exception class is still autoloaded,
- it does not accept our exception. Raising the exception would load the class"
- ^ nil
] ifFalse:[
- 'Block [warning]: non-ExceptionHandler in on:do:on:do:-context' errorPrintCR.
- ]].
- aContext fullPrint.
+ (exceptionHandlerInContext isBehavior
+ and:[exceptionHandlerInContext isLoaded not]) ifTrue:[
+ "If the exception class is still autoloaded,
+ it does not accept our exception. Raising the exception would load the class"
+ ^ nil
+ ] ifFalse:[
+ 'Block [warning]: non-ExceptionHandler in on:do:on:do:-context' errorPrintCR.
+ ]
+ ].
+ aContext fullPrintString errorPrintCR.
+ self breakPoint:#cg.
^ nil.
].
(exceptionHandlerInContext accepts:exceptionCreator) ifTrue:[
@@ -2885,12 +2890,13 @@
!Block class methodsFor:'documentation'!
version
- ^ '$Id: Block.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Block.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Block.st,v 1.172 2009/10/04 15:44:51 cg Exp §'
+ ^ '$Id: Block.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Block initialize!
+
--- a/Boolean.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Boolean.st Thu Nov 05 14:41:30 2009 +0000
@@ -222,10 +222,11 @@
!Boolean class methodsFor:'documentation'!
version
- ^ '$Id: Boolean.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Boolean.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Boolean.st,v 1.39 2009/10/06 15:16:47 cg Exp §'
+ ^ '$Id: Boolean.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/ByteArray.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ByteArray.st Thu Nov 05 14:41:30 2009 +0000
@@ -3244,10 +3244,11 @@
!ByteArray class methodsFor:'documentation'!
version
- ^ '$Id: ByteArray.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: ByteArray.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/ByteArray.st,v 1.193 2009/10/14 17:29:49 stefan Exp §'
+ ^ '$Id: ByteArray.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/CharacterArray.st Mon Oct 26 21:51:17 2009 +0000
+++ b/CharacterArray.st Thu Nov 05 14:41:30 2009 +0000
@@ -1106,6 +1106,13 @@
!
+withSqueakLineEndings
+ "assume the string is textual, and that CR, LF, and CRLF are all
+ valid line endings. Replace each occurence with a single CR"
+
+ ^ self asStringCollection asStringWith:Character cr.
+!
+
withoutLeading: char
"return a copy of myself without leading a char.
Returns an empty string, if the receiver consist only of a char."
@@ -2886,14 +2893,14 @@
|newString firstChar firstCharAsUppercase|
- firstChar := (self at:1).
+ firstChar := (self at:1 ifAbsent:[^ self]).
firstCharAsUppercase := firstChar asUppercase.
firstChar == firstCharAsUppercase ifTrue:[ ^ self].
firstCharAsUppercase bitsPerCharacter > self bitsPerCharacter ifTrue:[
- newString := firstCharAsUppercase stringSpecies fromString:self.
+ newString := firstCharAsUppercase stringSpecies fromString:self.
] ifFalse:[
- newString := self stringSpecies fromString:self.
+ newString := self stringSpecies fromString:self.
].
newString at:1 put:firstCharAsUppercase.
^ newString
@@ -3286,13 +3293,14 @@
!CharacterArray methodsFor:'emphasis'!
actionForAll:aBlock
- "change the action block of all characters"
+ "change the action block of all characters.
+ Some widgets use this like a href if clicked onto the text."
^ self asText actionForAll:aBlock
!
allBold
- "return a test object representing the receiver, but all boldified"
+ "return a text object representing the receiver, but all boldified"
"this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
Text isNil ifTrue:[^ self].
@@ -3305,7 +3313,7 @@
!
allItalic
- "return a test object representing the receiver, but all in italic"
+ "return a text object representing the receiver, but all in italic"
"this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
Text isNil ifTrue:[^ self].
@@ -3318,7 +3326,7 @@
!
allStrikedOut
- "return a test object representing the receiver, but all in strikeout"
+ "return a text object representing the receiver, but all in strikeout"
"this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
Text isNil ifTrue:[^ self].
@@ -3331,7 +3339,7 @@
!
allUnderlined
- "return a test object representing the receiver, but all with underline"
+ "return a text object representing the receiver, but all with underline"
"this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
Text isNil ifTrue:[^ self].
@@ -3344,6 +3352,10 @@
!
colorizeAllWith:aColor
+ "return a text object representing the receiver, but all colorized"
+
+ "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
+ Text isNil ifTrue:[^ self].
^ self asText colorizeAllWith:aColor
"
@@ -3352,6 +3364,20 @@
"
!
+colorizeAllWith:fgColor on:bgColor
+ "return a text object representing the receiver, but all colorized with
+ both fg and background color"
+
+ "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
+ Text isNil ifTrue:[^ self].
+ ^ self asText colorizeAllWith:fgColor on:bgColor
+
+ "
+ Transcript showCR:('hello' colorizeAllWith:Color red on:Color yellow)
+ Transcript showCR:('world' colorizeAllWith:Color red)
+ "
+!
+
emphasis
"return the emphasis.
Since characterArrays do not hold any emphasis information,
@@ -3422,6 +3448,10 @@
!
emphasizeAllWith:emphasis
+ "return a text object representing the receiver, but all emphasized"
+
+ "this test allows for small non-gui apps to be built without libbasic2 (where Text is)"
+ Text isNil ifTrue:[^ self].
^ self asText emphasizeAllWith:emphasis
"
@@ -3446,8 +3476,16 @@
"Created: / 13.12.1999 / 21:49:24 / cg"
!
+withoutBackgroundColorEmphasis
+ ^ self
+!
+
withoutEmphasis:emphasisToRemove
^ self
+!
+
+withoutForegroundColorEmphasis
+ ^ self
! !
!CharacterArray methodsFor:'encoding & decoding'!
@@ -4594,6 +4632,7 @@
"Modified: 17.4.1997 / 12:50:23 / cg"
! !
+
!CharacterArray methodsFor:'special string converting'!
expandPlaceholdersWith:argArrayOrDictionary
@@ -4637,7 +4676,8 @@
dict at:1 put:'one'.
dict at:$a put:'AAAAA'.
dict at:$b put:[ Time now ].
- 'hello %1 %a %b' expandPlaceholdersWith:dict
+ dict at:'foo' put:[ Date today ].
+ 'hello %1 %a %b %(foo)' expandPlaceholdersWith:dict
"
"Modified: 1.7.1997 / 00:53:24 / cg"
@@ -5124,6 +5164,7 @@
This is the reverse operation of withCRs."
^ self copyReplaceAll:(Character cr) with:$\
+
"
'hello
world' withoutCRs
@@ -5234,7 +5275,7 @@
Whitespace is space, tab, newline, formfeed.
Use withoutSpaces, if you want to remove spaces only."
- self trimForWhich:[:ch | ch isSeparator]
+ ^ self trimForWhich:[:ch | ch isSeparator]
"
' foo ' withoutSeparators
@@ -5242,6 +5283,7 @@
'foo ' withoutSeparators
' ' withoutSeparators
(' foo' , Character tab asString , ' ') withoutSeparators inspect
+ ' foo ' asUnicode16String withoutSeparators
"
!
@@ -5251,7 +5293,7 @@
Notice: this does NOT remove tabs, newline or any other whitespace.
Use withoutSeparators for this."
- self trimForWhich:[:ch | ch == Character space]
+ ^ self trimForWhich:[:ch | ch == Character space]
"
' foo ' withoutSpaces
@@ -5750,12 +5792,13 @@
!CharacterArray class methodsFor:'documentation'!
version
- ^ '$Id: CharacterArray.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: CharacterArray.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/CharacterArray.st,v 1.415 2009/10/10 12:06:21 cg Exp §'
+ ^ '$Id: CharacterArray.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
CharacterArray initialize!
+
--- a/CharacterWriteStream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/CharacterWriteStream.st Thu Nov 05 14:41:30 2009 +0000
@@ -240,10 +240,11 @@
!CharacterWriteStream class methodsFor:'documentation'!
version
- ^ '$Id: CharacterWriteStream.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: CharacterWriteStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/CharacterWriteStream.st,v 1.9 2009/10/05 09:20:25 cg Exp §'
+ ^ '$Id: CharacterWriteStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Class.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Class.st Thu Nov 05 14:41:30 2009 +0000
@@ -707,10 +707,12 @@
(owner := self owningClass) notNil ifTrue:[^ owner classFilename].
- (SVN::CompatModeQuery notNil
- and:[SVN::CompatModeQuery isLoaded
- and:[(SVN::CompatModeQuery query ? true) not]])
- ifTrue:[^SVN::Repository containerNameForClass: self].
+"/ This was added as an extension of libsvn - should be no longer needed
+"/ compatQuery := Smalltalk classNamed: 'SVN::CompatModeQuery'.
+"/ (compatQuery notNil
+"/ and:[compatQuery isLoaded
+"/ and:[(compatQuery query ? true) not]])
+"/ ifTrue:[^SVN::Repository containerNameForClass: self].
classFilename notNil ifTrue:[ ^ classFilename ].
@@ -720,15 +722,14 @@
^ fn
].
].
- ^ (Smalltalk fileNameForClass:self), '.st'
+ ^ (Smalltalk fileNameForClass:self), '.', self sourceFileSuffix
"
- SVN::Repository classFilename
- Array classFilename
+ SVN::Repository classFilename
+ Array classFilename
"
"Modified: / 22-10-2008 / 20:58:21 / cg"
- "Modified: / 13-08-2009 / 16:07:07 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
classPool
@@ -1004,7 +1005,7 @@
!
package
- "return the package-ID of the class"
+ "return the package-ID-Symbol of the class."
|owner|
@@ -1020,7 +1021,7 @@
!
package:aSymbol
- "set the package of the class."
+ "set the package-ID.Symbol of the class."
|newPackage oldPackage|
@@ -1040,53 +1041,6 @@
"Modified: / 09-08-2006 / 17:58:53 / fm"
!
-packageInfo
- "return the package-info of the class - or nil.
- The packageManager contains information relevant to the package,
- to which this class belongs - especially, things like pathes to
- resources, additional files etc. can be optioned this way.
- A packageInfo loosely relates to what a classLoader is in Java.
- Experimental."
-
- |packageId prj handle t|
-
- packageId := self package.
- packageId notNil ifTrue:[
- prj := Project projectWithId:packageId.
- prj notNil ifTrue:[^ prj].
-
- "/
- "/ intermediate kludge (will be removed)
- "/ search for a loaded class library and extract
- "/ information from it ...
- "/
- handle := ObjectFileLoader loadedObjectHandles
- detect:[:h | |cls|
- cls := h classes firstIfEmpty:nil.
- cls notNil and:[cls package = packageId]
- ]
- ifNone:nil.
-
- handle notNil ifTrue:[
- prj := Project new.
- prj name:packageId.
- prj directory:(handle pathName asFilename directory pathName).
- prj package:packageId.
- t := packageId asCollectionOfSubstringsSeparatedByAny:'/\:'.
- prj repositoryModule:(t first).
- prj repositoryDirectory:(packageId copyFrom:t first size + 2).
- prj isLoaded:true.
- ^ prj
- ]
- ].
- ^ nil
-
- "
- Object packageInfo
- OSI::FTAMOperation packageInfo
- "
-!
-
primitiveDefinitions:aString
"{ Pragma: +optSpace }"
@@ -1598,19 +1552,15 @@
For now, all classes return the same global manager.
But future versions may support mixed reporitories"
- |owner module|
+ |owner|
(owner := self owningClass) notNil ifTrue:[^ owner sourceCodeManager].
"/ see if there is a package-specific manager
- package notNil ifTrue:[
- module := package upTo:$:.
- AbstractSourceCodeManager notNil ifTrue:[
- AbstractSourceCodeManager availableManagers do:[:mgr |
- (mgr isResponsibleForModule:module) ifTrue:[^ mgr ].
- ]
- ].
+ AbstractSourceCodeManager notNil ifTrue:[
+ ^ AbstractSourceCodeManager sourceCodeManagerForPackage: package.
].
+
^ Smalltalk at:#SourceCodeManager
"
@@ -3588,6 +3538,17 @@
"Modified: / 06-03-2007 / 11:55:39 / cg"
!
+hasUnsavedChanges
+ "return true, if there are changes for this class in the current changeSet"
+
+ ^ ChangeSet current includesChangeForClassOrMetaclassOrPrivateClassOf:self
+
+ "
+ Class hasUnsavedChanges
+ Array hasUnsavedChanges
+ "
+!
+
isBrowserStartable
"return true, if this is an application class,
which can be started from the browser"
@@ -5042,10 +5003,11 @@
!Class class methodsFor:'documentation'!
version
- ^ '$Id: Class.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Class.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Class.st,v 1.555 2009/10/19 22:03:20 cg Exp §'
+ ^ '$Id: Class.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/ClassBuildError.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ClassBuildError.st Thu Nov 05 14:41:30 2009 +0000
@@ -37,9 +37,10 @@
!ClassBuildError class methodsFor:'documentation'!
version
- ^ '$Id: ClassBuildError.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: ClassBuildError.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/ClassBuildError.st,v 1.2 2009/09/29 19:32:30 cg Exp §'
+ ^ '$Id: ClassBuildError.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/ClassBuilder.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ClassBuilder.st Thu Nov 05 14:41:30 2009 +0000
@@ -2182,10 +2182,11 @@
!ClassBuilder class methodsFor:'documentation'!
version
- ^ '$Id: ClassBuilder.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: ClassBuilder.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/ClassBuilder.st,v 1.83 2009/10/13 15:43:32 cg Exp §'
+ ^ '$Id: ClassBuilder.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/ClassDescription.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ClassDescription.st Thu Nov 05 14:41:30 2009 +0000
@@ -4101,14 +4101,15 @@
!ClassDescription class methodsFor:'documentation'!
version
- ^ '$Id: ClassDescription.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: ClassDescription.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/ClassDescription.st,v 1.210 2009/10/02 15:23:39 cg Exp §'
+ ^ '$Id: ClassDescription.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
ClassDescription initialize!
ClassDescription::MethodRedefinitionNotification initialize!
ClassDescription::ClassRedefinitionNotification initialize!
+
--- a/Collection.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Collection.st Thu Nov 05 14:41:30 2009 +0000
@@ -228,7 +228,6 @@
^ self withSize:n
! !
-
!Collection class methodsFor:'Signal constants'!
emptyCollectionSignal
@@ -333,6 +332,35 @@
"
!
+gather:aBlock
+ "return an Array,
+ containing all elements as returned from applying aBlock to each element if the receiver,
+ where the block returns a collection of to-be-added elements.
+ This could also be called: collectAllAsArray:"
+
+ ^ self gather:aBlock as:Array
+
+ "
+ (Set withAll:#(10 20 30 10 20 40)) gather:[:el | Array with:el with:el * 2]
+ "
+!
+
+gather:aBlock as:aClass
+ "return an instance of the collection-class aClass,
+ containing all elements as returned from applying aBlock to each element if the receiver.
+ where the block returns a collection of to-be-added elements.
+ This could also be called: collectAll:as:"
+
+ ^ aClass streamContents:[:s |
+ self do: [:ea | s nextPutAll: (aBlock value: ea)]
+ ]
+
+ "
+ (Set withAll:#(10 20 30 10 20 40)) gather:[:el | Array with:el with:el * 2] as:OrderedCollection
+ (Set withAll:#(10 20 30 10 20 40)) collectAll:[:el | Array with:el with:el * 2]
+ "
+!
+
groupBy:keyBlock having:selectBlock
"Like in SQL operation - Split the recievers contents into collections of
elements for which keyBlock returns the same results, and return those
@@ -402,7 +430,6 @@
].
! !
-
!Collection methodsFor:'accessing'!
anElement
@@ -2165,7 +2192,11 @@
pairsDo:aTwoArgBlock
"evaluate the argument, aTwoArgBlock for every element in the collection,
which is supposed to consist of 2-element collections.
- The block is called with 2 arguments for each collection in the receiver."
+ The block is called with 2 arguments for each collection in the receiver.
+ CONFUSION ATTACK:
+ this is different from pairWiseDo:.
+ but the Squeak-pairsDo: does the same as our pairWiseDo:
+ (sigh: but we were first, so they should have adapted...)"
self do:[:aPair |
aTwoArgBlock value:(aPair at:1) value:(aPair at:2).
@@ -3560,12 +3591,13 @@
!Collection class methodsFor:'documentation'!
version
- ^ '$Id: Collection.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Collection.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Collection.st,v 1.233 2009/10/19 10:21:32 cg Exp §'
+ ^ '$Id: Collection.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Collection initialize!
+
--- a/CompiledCode.st Mon Oct 26 21:51:17 2009 +0000
+++ b/CompiledCode.st Thu Nov 05 14:41:30 2009 +0000
@@ -1769,10 +1769,11 @@
!CompiledCode class methodsFor:'documentation'!
version
- ^ '$Id: CompiledCode.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: CompiledCode.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/CompiledCode.st,v 1.108 2009/10/06 14:59:40 fm Exp §'
+ ^ '$Id: CompiledCode.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Date.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Date.st Thu Nov 05 14:41:30 2009 +0000
@@ -2953,12 +2953,13 @@
!Date class methodsFor:'documentation'!
version
- ^ '$Id: Date.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Date.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Date.st,v 1.129 2009/10/07 15:33:07 cg Exp §'
+ ^ '$Id: Date.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Date initialize!
+
--- a/DirectoryStream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/DirectoryStream.st Thu Nov 05 14:41:30 2009 +0000
@@ -511,10 +511,6 @@
|prevEntry nextEntry isUnix|
%{
-#ifdef unix
- isUnix = true;
-#endif
-
#ifdef HAS_OPENDIR
DIR *d;
DIRENT_STRUCT *dp;
@@ -572,6 +568,11 @@
}
# endif /* WIN32 */
#endif /* HAS_OPENDIR */
+
+#ifdef unix
+ isUnix = true;
+#endif
+
%}.
lastErrorNumber notNil ifTrue:[^ self ioError].
nextEntry notNil ifTrue:[
@@ -796,5 +797,6 @@
!DirectoryStream class methodsFor:'documentation'!
version
- ^ '$Id: DirectoryStream.st 10447 2009-06-14 13:09:55Z vranyj1 $'
+ ^ '$Id: DirectoryStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Error.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Error.st Thu Nov 05 14:41:30 2009 +0000
@@ -85,12 +85,13 @@
!Error class methodsFor:'documentation'!
version
- ^ '$Id: Error.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Error.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Error.st,v 1.10 2009/10/01 13:44:07 cg Exp §'
+ ^ '$Id: Error.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Error initialize!
+
--- a/ExternalStream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ExternalStream.st Thu Nov 05 14:41:30 2009 +0000
@@ -12,7 +12,7 @@
"{ Package: 'stx:libbasic' }"
ReadWriteStream subclass:#ExternalStream
- instanceVariableNames:'filePointer mode buffered binary eolMode hitEOF didWrite
+ instanceVariableNames:'handleType handle mode buffered binary eolMode hitEOF didWrite
lastErrorNumber readAhead'
classVariableNames:'Lobby LastErrorNumber InvalidReadSignal InvalidWriteSignal
InvalidModeSignal OpenErrorSignal StreamNotOpenSignal
@@ -67,11 +67,11 @@
#endif
#ifdef LATER
-#define __isFilePointer(x) (__Class(x) == ExternalStream__FilePointer)
-#define __CHANGECLASS(o, x) (__qClass(o) = (x), o)
-#define __MKFILEPOINTER(f) __CHANGECLASS(__MKEXTERNALADDRESS(f), ExternalStream__FilePointer)
+# define __isFilePointer(x) (__Class(x) == ExternalStream__FilePointer)
+# define __CHANGECLASS(o, x) (__qClass(o) = (x), o)
+# define __MKFILEPOINTER(f) __CHANGECLASS(__MKEXTERNALADDRESS(f), ExternalStream__FilePointer)
#else
-#define __MKFILEPOINTER(f) __MKEXTERNALADDRESS(f)
+# define __MKFILEPOINTER(f) __MKEXTERNALADDRESS(f)
#endif
#ifdef WIN32
@@ -222,6 +222,7 @@
else \
(ret) = __STX_C_NOINT_CALL3("_rtl_read", _rtl_read, fileno(f), (cp), (n));\
}
+
# define WRITE(ret,f, cp, n) \
{ int __res;\
HANDLE h; \
@@ -231,7 +232,23 @@
else \
(ret) = __STX_C_NOINT_CALL3("_rtl_write", _rtl_write, fileno(f), (cp), (n));\
}
+
+# define READ_SOCK_FP(ret,f, cp, n) \
+ { \
+ HANDLE h; \
+ h = _get_osfhandle(fileno(f)); \
+ (ret) = __STX_WSA_NOINT_CALL4("recv", recv, h, (cp), (n), 0);\
+ }
+
+# define WRITE_SOCK_FP(ret,f, cp, n) \
+ { \
+ HANDLE h; \
+ h = _get_osfhandle(fileno(f)); \
+ (ret) = __STX_WSA_NOINT_CALL4("send", send, h, (cp), (n), 0);\
+ }
+
# else /* MSC */
+
# define READ(ret,f, cp, n) \
{ int __res;\
int fd; \
@@ -1030,7 +1047,9 @@
(ret) = __offs; \
} \
}
+
# else /* use STDIO */
+
# define __READBYTES_OBJ__(ret, f, obj, obj_offs, cnt, isBuffered) \
{ \
int __ooffs = obj_offs; \
@@ -1409,9 +1428,11 @@
[Instance variables:]
- filePointer <Integer> the unix FILE*; somehow mapped to an integer
- (notice: not the fd)
- on Windows: the fileHandle
+ handleType <Symbol> desribes what handle is:
+ win32: #fileHandle, #socketHandle
+ unix: #filePointer
+ handle <Integer> used to be always a filePointer somehow mapped to an integer (FILE* - not the fd);
+ now, either a filePointer or a handle (win32)
mode <Symbol> #readwrite, #readonly or #writeonly
buffered <Boolean> true, if buffered (i.e. collects characters - does
not output immediately)
@@ -2070,20 +2091,22 @@
%{
OBJ fp;
- if ((fp = __INST(filePointer)) != nil) {
- FILEPOINTER f;
-
- f = __FILEVal(fp);
- RETURN ( __MKINT(fileno(f)) );
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if ((fp = __INST(handle)) != nil) {
+ FILEPOINTER f;
+
+ f = __FILEVal(fp);
+ RETURN ( __MKINT(fileno(f)) );
+ }
}
%}.
- filePointer isNil ifTrue:[^ self errorNotOpen].
- ^ self fileDescriptorOfFile:filePointer
+ handle isNil ifTrue:[^ self errorNotOpen].
+ ^ self fileDescriptorOfFile:handle
!
-fileDescriptorOfFile:filePointer
+fileDescriptorOfFile:handle
"for migration to rel5 only:
- return the fileDescriptor of the argument filePointer -
+ return the fileDescriptor of the argument handle -
notice: this one returns the underlying OSs fileDescriptor -
this may not be available on all platforms (i.e. non unix systems)."
@@ -2097,25 +2120,32 @@
%{
OBJ fp;
- if ((fp = __INST(filePointer)) != nil) {
- FILEPOINTER f;
- int fd;
-
- f = __FILEVal(fp);
- fd = fileno(f);
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if ((fp = __INST(handle)) != nil) {
+ FILEPOINTER f;
+ int fd;
+
+ f = __FILEVal(fp);
+ fd = fileno(f);
#ifdef WIN32
- {
- HANDLE h;
- h = _get_osfhandle(fd);
- RETURN (__MKEXTERNALADDRESS(h));
- }
+ {
+ HANDLE h;
+ h = _get_osfhandle(fd);
+ RETURN (__MKEXTERNALADDRESS(h));
+ }
#else
- RETURN ( __MKINT(fileno(f)) );
+ RETURN ( __MKINT(fileno(f)) );
#endif
+ }
}
+#ifdef WIN32
+ if ((__INST(handleType) == @symbol(fileHandle)) || (__INST(handleType) == @symbol(socketHandle))) {
+ RETURN (__INST(handle));
+ }
+#endif
%}.
- filePointer isNil ifTrue:[^ self errorNotOpen].
- ^ self fileHandleOfFile:filePointer
+ handle isNil ifTrue:[^ self errorNotOpen].
+ ^ self fileHandleOfFile:handle
!
filePointer
@@ -2126,7 +2156,10 @@
You cannot do much with the returned value
- except passing it to a primitive, for example."
- ^ filePointer
+ (handleType isNil or:[handleType == #filePointer]) ifTrue:[
+ ^ handle
+ ].
+ ^ self error:'not a FILE*'
!
lineEndCRLF
@@ -2401,9 +2434,9 @@
"report an error, that the open failed"
^ OpenError
- raiseRequestWith:self
- errorString:(' : ' , self lastErrorString)
- "/ in:thisContext sender
+ raiseRequestWith:self
+ errorString:(' : ' , self lastErrorString)
+ "/ in:thisContext sender
"Modified: / 28.1.1998 / 14:37:42 / stefan"
"Modified: / 8.5.1999 / 20:12:12 / cg"
@@ -2457,7 +2490,7 @@
since all we need at finalization time is the fileDescriptor,
a cheaper copy is possible."
- ^ self class basicNew setFilePointer:filePointer
+ ^ self class basicNew setAccessor:handleType to:handle
! !
!ExternalStream methodsFor:'line reading/writing'!
@@ -2467,7 +2500,7 @@
Return a string containing those characters excluding the newline.
If the previous-to-last character is a cr, this is also removed,
so its possible to read alien (i.e. ms-dos) text as well.
- The line must be shorter than 16K characters - otherwise an error is signalled."
+ The line must be shorter than 32K characters - otherwise an error is signalled."
|line|
@@ -2484,105 +2517,107 @@
int cutOff = 0;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- && (__INST(binary) != true)
- ) {
- f = __FILEVal(fp);
- buffer[0] = '\0';
-
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f);
- }
-
- rslt = nextPtr = buffer;
- limit = buffer + sizeof(buffer) - 2;
-
- for (;;) {
- __READBYTE__(ret, f, nextPtr, _buffered);
- if (ret <= 0) {
- if (nextPtr == buffer)
- rslt = NULL;
- if (ret == 0) {
- __INST(hitEOF) = true;
- break;
- } else {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- goto err;
- }
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ && (__INST(binary) != true)
+ ) {
+ f = __FILEVal(fp);
+ buffer[0] = '\0';
+
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f);
}
- if (*nextPtr == '\n') {
- cutOff = 1;
- *nextPtr = '\0';
- break;
- }
- if (*nextPtr == '\r') {
- char peekChar;
-
- /*
- * peek ahead for a newLine ...
- */
- __READBYTE__(ret, f, &peekChar, _buffered);
+ rslt = nextPtr = buffer;
+ limit = buffer + sizeof(buffer) - 2;
+
+ for (;;) {
+ __READBYTE__(ret, f, nextPtr, _buffered);
if (ret <= 0) {
- cutOff = 1;
- *nextPtr = '\0';
+ if (nextPtr == buffer)
+ rslt = NULL;
if (ret == 0) {
__INST(hitEOF) = true;
break;
+ } else {
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ goto err;
}
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- goto err;
}
- if (peekChar == '\n') {
- cutOff = 2;
+ if (*nextPtr == '\n') {
+ cutOff = 1;
*nextPtr = '\0';
break;
}
-
- __UNGETC__(peekChar, f, _buffered);
-
- cutOff = 1;
- *nextPtr = '\0';
- break;
- }
-
- nextPtr++;
- if (nextPtr >= limit) {
- *nextPtr = '\0';
- lineTooLong = 1;
- if (@global(InfoPrinting) == true) {
- fprintf(stderr, "ExtStream [warning]: line truncated in nextLine\n");
+ if (*nextPtr == '\r') {
+ char peekChar;
+
+ /*
+ * peek ahead for a newLine ...
+ */
+ __READBYTE__(ret, f, &peekChar, _buffered);
+ if (ret <= 0) {
+ cutOff = 1;
+ *nextPtr = '\0';
+ if (ret == 0) {
+ __INST(hitEOF) = true;
+ break;
+ }
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ goto err;
+ }
+
+ if (peekChar == '\n') {
+ cutOff = 2;
+ *nextPtr = '\0';
+ break;
+ }
+
+ __UNGETC__(peekChar, f, _buffered);
+
+ cutOff = 1;
+ *nextPtr = '\0';
+ break;
}
- break;
- }
- }
-
- if (rslt != NULL) {
- len = nextPtr-buffer;
-
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + len + cutOff;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
- }
- /* remove any EOL character */
- if (len != 0) {
- if (buffer[len-1] == '\n') {
- buffer[--len] = '\0';
- }
- if ((len != 0) && (buffer[len-1] == '\r')) {
- buffer[--len] = '\0';
+
+ nextPtr++;
+ if (nextPtr >= limit) {
+ *nextPtr = '\0';
+ lineTooLong = 1;
+ if (@global(InfoPrinting) == true) {
+ fprintf(stderr, "ExtStream [warning]: line truncated in nextLine\n");
+ }
+ break;
}
}
- line = __MKSTRING_L(buffer, len);
- if (! lineTooLong) {
- RETURN ( line );
+
+ if (rslt != NULL) {
+ len = nextPtr-buffer;
+
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + len + cutOff;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ /* remove any EOL character */
+ if (len != 0) {
+ if (buffer[len-1] == '\n') {
+ buffer[--len] = '\0';
+ }
+ if ((len != 0) && (buffer[len-1] == '\r')) {
+ buffer[--len] = '\0';
+ }
+ }
+ line = __MKSTRING_L(buffer, len);
+ if (! lineTooLong) {
+ RETURN ( line );
+ }
}
}
}
@@ -2604,7 +2639,7 @@
(hitEOF == true) ifTrue:[^ self pastEndRead].
lastErrorNumber notNil ifTrue:[^ self readError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
(binary == true) ifTrue:[^ self errorBinary].
^ super nextLine
@@ -2622,63 +2657,65 @@
int o_offs;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))
- && (__INST(binary) != true)
- && __isString(aString)
- ) {
- f = __FILEVal(fp);
- len = __stringSize(aString);
-
- if (_buffered = (__INST(buffered) == true)) {
- __WRITING__(f)
- }
-#ifdef WIN32
- if ((f == __win32_stdout()) || (f == __win32_stderr())) {
- cnt = __win32_fwrite(__stringVal(aString), 1, len, f);
- } else
-#endif
- {
-#ifdef BUGGY
- __WRITEBYTES__(cnt, f, __stringVal(aString), len, _buffered);
-#else
- o_offs = (char *)__stringVal(aString)-(char *)aString;
- __WRITEBYTES_OBJ__(cnt, f, aString, o_offs, len, _buffered);
-#endif
- }
- if (cnt == len) {
- OBJ mode = __INST(eolMode);
-
- len1 = len;
-
- if (mode == @symbol(cr)) {
- cp = "\r"; len = 1;
- } else if (mode == @symbol(crlf)) {
- cp = "\r\n"; len = 2;
- } else {
- cp = "\n"; len = 1;
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))
+ && (__INST(binary) != true)
+ && __isString(aString)
+ ) {
+ f = __FILEVal(fp);
+ len = __stringSize(aString);
+
+ if (_buffered = (__INST(buffered) == true)) {
+ __WRITING__(f)
}
#ifdef WIN32
if ((f == __win32_stdout()) || (f == __win32_stderr())) {
- cnt = __win32_fwrite(cp, 1, len, f);
+ cnt = __win32_fwrite(__stringVal(aString), 1, len, f);
} else
#endif
{
- __WRITEBYTES__(cnt, f, cp, len, _buffered);
+#ifdef BUGGY
+ __WRITEBYTES__(cnt, f, __stringVal(aString), len, _buffered);
+#else
+ o_offs = (char *)__stringVal(aString)-(char *)aString;
+ __WRITEBYTES_OBJ__(cnt, f, aString, o_offs, len, _buffered);
+#endif
}
- if (cnt > 0) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + cnt;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ if (cnt == len) {
+ OBJ mode = __INST(eolMode);
+
+ len1 = len;
+
+ if (mode == @symbol(cr)) {
+ cp = "\r"; len = 1;
+ } else if (mode == @symbol(crlf)) {
+ cp = "\r\n"; len = 2;
} else {
- __INST(position) = nil; /* i.e. do not know */
+ cp = "\n"; len = 1;
+ }
+#ifdef WIN32
+ if ((f == __win32_stdout()) || (f == __win32_stderr())) {
+ cnt = __win32_fwrite(cp, 1, len, f);
+ } else
+#endif
+ {
+ __WRITEBYTES__(cnt, f, cp, len, _buffered);
}
- RETURN ( self );
+ if (cnt > 0) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + cnt;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN ( self );
+ }
}
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
%}.
super nextPutLine:aString.
@@ -2689,93 +2726,10 @@
and append all lines to self.
Can be used to copy/create large files or copy from a pipe/socket.
- If aStringOrNil is nil or not matched, copy preceeds to the end.
- (this allows for example to read a Socket and transfer the data quickly
- into a file - without creating zillions of temporary strings)"
-
- |srcFilePointer readError line|
-
- (mode == #readonly) ifTrue:[self errorReadOnly. ^ self].
- filePointer isNil ifTrue:[self errorNotOpen. ^ self].
- srcFilePointer := aStream filePointer.
- srcFilePointer isNil ifTrue:[aStream errorNotOpen. ^ self].
-
-%{ /* STACK:2000 */
-
-#ifndef NO_STDIO
- FILEPOINTER dst;
- FILEPOINTER src;
- char *matchString;
- int matchLen = 0;
- char buffer[1024];
-
- __INST(lastErrorNumber) = nil;
- if (__isSmallInteger(srcFilePointer)) {
- if ((aStringOrNil == nil) || __isString(aStringOrNil)) {
- if (aStringOrNil != nil) {
- matchString = (char *) __stringVal(aStringOrNil);
- matchLen = __stringSize(aStringOrNil);
- }
- dst = __FILEVal(__INST(filePointer));
- src = __FILEVal(srcFilePointer);
- __BEGIN_INTERRUPTABLE__
- __threadErrno = 0;
-
- __WRITING__(dst)
-
- for (;;) {
- if (fgets(buffer, sizeof(buffer)-1, src) == NULL) {
- if (ferror(src)) {
- readError = __mkSmallInteger(__threadErrno);
- __END_INTERRUPTABLE__
- goto err;
- }
- break;
- }
- if (fputs(buffer, dst) == EOF) {
- if (ferror(dst)) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- __END_INTERRUPTABLE__
- goto err;
- }
- break;
- }
-# ifndef OLD
- if (__INST(buffered) == false) {
-# ifdef WIN32
- if ((dst == __win32_stdout()) || (dst == __win32_stderr())) {
- win32_fflush(dst);
- } else
-# endif
- {
- FFLUSH(dst);
- }
- }
-# endif
- if (matchLen) {
- if (strncmp(matchString, buffer, matchLen) == 0)
- break;
- }
- }
- __END_INTERRUPTABLE__
- __INST(position) = nil; /* i.e. do not know */
- RETURN (self);
- }
- }
-err: ;
-#endif /* ! NO_STDIO */
-%}.
- readError == true ifTrue:[
- aStream setLastErrorNumber:readError.
- aStream readError.
- ^ self
- ].
- lastErrorNumber notNil ifTrue:[self writeError. ^ self].
- buffered ifFalse:[self errorNotBuffered. ^ self].
-
- "
- argument error or unimplemented; try it linewise
- "
+ If aStringOrNil is nil or not matched, copy proceeds to the end."
+
+ |line|
+
[aStream atEnd] whileFalse:[
line := aStream nextLine.
line isNil ifTrue:[
@@ -2798,87 +2752,10 @@
|firstPos lastPos line|
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
binary ifTrue:[^ self errorBinary].
buffered ifFalse:[^ self errorNotBuffered].
-%{ /* STACK: 2000 */
-#ifndef NO_STDIO
-
- FILEPOINTER f;
- int l;
- char buffer[1024];
- char *cp;
- char *matchString;
- int gotFirst = 0;
-# if defined(__VMS__)
- fpos_t firstpos, lastpos;
-# define FTELL(__f__, __pos__) fgetpos(__f__, &(__pos__))
-# define FSEEK(__f__, __pos__) fsetpos(__f__, &(__pos__))
-# elif defined(_LFS_LARGEFILE)
- off_t firstpos, lastpos;
-# define FTELL(__f__, __pos__) __pos__ = ftello(__f__)
-# define FSEEK(__f__, __pos__) fseeko(__f__, __pos__, SEEK_SET)
-# else
- long firstpos, lastpos;
-# define FTELL(__f__, __pos__) __pos__ = ftell(__f__)
-# define FSEEK(__f__, __pos__) fseek(__f__, __pos__, SEEK_SET)
-# endif
-
- __INST(lastErrorNumber) = nil;
- if (__isString(aString)) {
- matchString = (char *) __stringVal(aString);
- l = __stringSize(aString);
-
- f = __FILEVal(__INST(filePointer));
- __READING__(f)
-
- for (;;) {
- FTELL(f, lastpos);
- if (!gotFirst) {
- firstpos = lastpos;
- gotFirst = 1;
- }
-
- __BEGIN_INTERRUPTABLE__
- do {
- cp = fgets(buffer, sizeof(buffer)-1, f);
- } while ((cp == NULL) && ferror(f) && (__threadErrno == EINTR) && (clearerr(f), 1));
- buffer[sizeof(buffer)-1] = '\0';
- __END_INTERRUPTABLE__
-
- if (cp == NULL) {
- if (ferror(f)) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- goto err;
- } else {
- FSEEK(f, firstpos);
- RETURN (nil);
- }
- }
- if (strncmp(cp, matchString, l) == 0) {
- FSEEK(f, lastpos);
- break;
- }
- }
- /* remove EOL character */
- cp = buffer;
- while (*cp && (*cp != '\n') && (*cp != '\r')) cp++;
- *cp = '\0';
- __INST(position) = nil; /* i.e. do not know */
- RETURN ( __MKSTRING(buffer) );
- }
-err: ;
-
-# undef FTELL
-# undef FSEEK
-
-#endif
-%}.
- lastErrorNumber notNil ifTrue:[^ self readError].
-
- "/ try using generic code ...
-
firstPos := self position.
[self atEnd] whileFalse:[
lastPos := self position.
@@ -2905,7 +2782,7 @@
|line startPos linePos index|
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
binary ifTrue:[^ self errorBinary].
startPos := self position.
@@ -2939,7 +2816,7 @@
|fd|
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
OperatingSystem supportsIOInterrupts ifFalse:[
^ self errorUnsupportedOperation
@@ -2964,7 +2841,7 @@
in advance. However, the data must then be read using #nextBytes:
methods, in order to avoid other (pastEndRead) exceptions."
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
^ OperatingSystem setBlocking:aBoolean on:self fileDescriptor.
"Modified: / 11.1.1997 / 17:48:01 / cg"
@@ -3027,8 +2904,7 @@
Be careful in what you pass - ST/X cannot validate its correctness."
%{
-#if !defined(MSDOS_LIKE)
-# if !defined(__openVMS__)
+#if !defined(MSDOS_LIKE) && !defined(__openVMS__)
FILEPOINTER f;
int ret;
unsigned int ioNum;
@@ -3036,48 +2912,49 @@
INT ioArg;
__INST(lastErrorNumber) = nil;
- if ((fp = __INST(filePointer)) != nil) {
- if (__isInteger(ioctlNumber)
- && (__isInteger(arg)
- || (arg == nil)
- || __isBytes(arg)
- || __isExternalBytesLike(arg)
- || __isExternalAddress(arg))) {
- f = __FILEVal(fp);
- ioNum = __unsignedLongIntVal(ioctlNumber);
-
- __BEGIN_INTERRUPTABLE__
- do {
- __threadErrno = 0;
- if (arg == nil) {
- ioArg = 0;
- } else if (__isSmallInteger(arg)) {
- ioArg = __intVal(arg);
- } else if (__isInteger(arg)) {
- ioArg = __unsignedLongIntVal(arg);
- } else if (__isExternalBytesLike(arg)) {
- ioArg = (INT)(__externalBytesAddress(arg));
- } else if (__isExternalAddress(arg)) {
- ioArg = (INT)(__externalAddressVal(arg));
- } else {
- ioArg = (INT)(__ByteArrayInstPtr(arg)->ba_element);
- }
- ret = ioctl(fileno(f), ioNum, ioArg);
- } while ((ret < 0) && (__threadErrno == EINTR));
- __END_INTERRUPTABLE__
-
- if (ret >= 0) {
- RETURN ( __mkSmallInteger(ret) );
- }
- __INST(position) = nil; /* i.e. do not know */
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- }
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if ((fp = __INST(handle)) != nil) {
+ if (__isInteger(ioctlNumber)
+ && (__isInteger(arg)
+ || (arg == nil)
+ || __isBytes(arg)
+ || __isExternalBytesLike(arg)
+ || __isExternalAddress(arg))) {
+ f = __FILEVal(fp);
+ ioNum = __unsignedLongIntVal(ioctlNumber);
+
+ __BEGIN_INTERRUPTABLE__
+ do {
+ __threadErrno = 0;
+ if (arg == nil) {
+ ioArg = 0;
+ } else if (__isSmallInteger(arg)) {
+ ioArg = __intVal(arg);
+ } else if (__isInteger(arg)) {
+ ioArg = __unsignedLongIntVal(arg);
+ } else if (__isExternalBytesLike(arg)) {
+ ioArg = (INT)(__externalBytesAddress(arg));
+ } else if (__isExternalAddress(arg)) {
+ ioArg = (INT)(__externalAddressVal(arg));
+ } else {
+ ioArg = (INT)(__ByteArrayInstPtr(arg)->ba_element);
+ }
+ ret = ioctl(fileno(f), ioNum, ioArg);
+ } while ((ret < 0) && (__threadErrno == EINTR));
+ __END_INTERRUPTABLE__
+
+ if (ret >= 0) {
+ RETURN ( __mkSmallInteger(ret) );
+ }
+ __INST(position) = nil; /* i.e. do not know */
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ }
+ }
}
-# endif
#endif
%}.
lastErrorNumber notNil ifTrue:[^ self ioError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
"
argument is not an integer
"
@@ -3110,38 +2987,40 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if ((fp = __INST(filePointer)) != nil) {
- f = __FILEVal(fp);
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ 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__ */
%}.
lastErrorNumber notNil ifTrue:[^ self ioError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ 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
"
!
@@ -3153,43 +3032,46 @@
%{
#if !defined(__openVMS__)
- FILEPOINTER f;
int ret;
- OBJ fp;
__INST(lastErrorNumber) = nil;
- if ((fp = __INST(filePointer)) != nil) {
- f = __FILEVal(fp);
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ OBJ fp;
+ FILEPOINTER f;
+
+ 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 = fdatasync(fileno(f));
- } while ((ret < 0) && (__threadErrno == EINTR));
- __END_INTERRUPTABLE__
-
- if (ret >= 0) {
- RETURN (self);
- }
+ __BEGIN_INTERRUPTABLE__
+ do {
+ __threadErrno = 0;
+ ret = fdatasync(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__ */
%}.
lastErrorNumber notNil ifTrue:[^ self ioError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ 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
"
!
@@ -3203,50 +3085,52 @@
OBJ fp;
off_t truncateSize;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))) {
- if (__isSmallInteger(newSize)) {
- truncateSize = __intVal(newSize);
- if (truncateSize < 0) {
- goto getOutOfHere;
- }
- } else {
- truncateSize = __signedLongIntVal(newSize);
- if (truncateSize < 0) {
- goto getOutOfHere;
- }
- if (truncateSize == 0) {
- if (sizeof(truncateSize) == 8) {
- if (__signedLong64IntVal(newSize, &truncateSize) == 0 || truncateSize < 0) {
- goto getOutOfHere;
- }
- } else {
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))) {
+ if (__isSmallInteger(newSize)) {
+ truncateSize = __intVal(newSize);
+ if (truncateSize < 0) {
+ goto getOutOfHere;
+ }
+ } else {
+ truncateSize = __signedLongIntVal(newSize);
+ if (truncateSize < 0) {
goto getOutOfHere;
}
+ if (truncateSize == 0) {
+ if (sizeof(truncateSize) == 8) {
+ if (__signedLong64IntVal(newSize, &truncateSize) == 0 || truncateSize < 0) {
+ goto getOutOfHere;
+ }
+ } else {
+ goto getOutOfHere;
+ }
+ }
}
- }
-
- f = __FILEVal(fp);
-
- if (__INST(buffered) == true) {
- __READING__(f)
+
+ f = __FILEVal(fp);
+
+ if (__INST(buffered) == true) {
+ __READING__(f)
#ifdef WIN32
- if ((dst == __win32_stdout()) || (dst == __win32_stderr())) {
- win32_fflush(f);
- } else
+ if ((dst == __win32_stdout()) || (dst == __win32_stderr())) {
+ win32_fflush(f);
+ } else
#endif
- {
- FFLUSH(f);
+ {
+ FFLUSH(f);
+ }
+ OPT_FSEEK(f, 0L, SEEK_END); /* needed in stdio */
}
- OPT_FSEEK(f, 0L, SEEK_END); /* needed in stdio */
+ ftruncate(fileno(f), truncateSize);
+ RETURN (self);
}
- ftruncate(fileno(f), truncateSize);
- RETURN (self);
}
getOutOfHere: ;
#endif
%}.
- filePointer isNil ifTrue:[self errorNotOpen. ^ self].
+ handle isNil ifTrue:[self errorNotOpen. ^ self].
(mode == #readonly) ifTrue:[self errorReadOnly. ^ self].
newSize < 0 ifTrue:[
self error:'wrong arg'.
@@ -3265,473 +3149,6 @@
"
! !
-!ExternalStream methodsFor:'no longer reimplemented for speed'!
-
-XXXnextAlphaNumericWord
- "read the next word (i.e. up to non letter-or-digit) after first
- skipping any whiteSpace.
- Return a string containing those characters.
- There is a limit of 1023 characters in the word - if longer,
- it is truncated."
-
-
-%{ /* STACK: 2000 */
- FILEPOINTER f;
- int len;
- char buffer[1024];
- unsigned char ch;
- int cnt = 0;
- int ret, _buffered;
- OBJ fp;
-
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- f = __FILEVal(fp);
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
-
- /*
- * skip whiteSpace first ...
- */
- do {
- __READBYTE__(ret, f, &ch, _buffered);
- if (ret > 0)
- cnt++;
- else
- break;
- } while (
-#ifndef NON_ASCII
- (ch < ' ') ||
-#endif
- (ch == ' ' ) || (ch == '\t') || (ch == '\r')
- || (ch == '\n') || (ch == 0x0b));
-
- len = 0;
- while (ret > 0 &&
- (((ch >= 'a') && (ch <= 'z')) ||
- ((ch >= 'A') && (ch <= 'Z')) ||
- ((ch >= '0') && (ch <= '9')))
- ) {
- buffer[len++] = ch;
- if (len >= (sizeof(buffer)-1)) {
- /* emergency */
- break;
- }
- __READBYTE__(ret, f, &ch, _buffered);
- if (ret > 0)
- cnt++;
- else
- break;
- }
-
- if (ret <= 0) {
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- goto err;
- }
- else if (ret == 0)
- __INST(hitEOF) = true;
- } else {
- __UNGETC__(ch, f, _buffered);
- cnt--;
- }
-
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + cnt;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
- }
-
- if (len != 0) {
- buffer[len] = '\0';
- RETURN ( __MKSTRING_L(buffer, len) );
- }
- }
-err: ;
-%}.
- hitEOF ifTrue:[
- ^ self pastEndRead
- ].
- lastErrorNumber notNil ifTrue:[
- ^ self readError
- ].
- filePointer isNil ifTrue:[
- ^ self errorNotOpen
- ].
- mode == #writeonly ifTrue:[
- ^ self errorWriteOnly
- ].
- ^ super nextAlphaNumericWord
-!
-
-XXXpeekFor:anObject
- "return true and move past next element, if next == something.
- Otherwise, stay and return false. False is also returned
- when EOF is encountered.
- The argument must be an integer if in binary, a character if in
- text mode; only single byte characters are currently supported."
-
-
-%{
- FILEPOINTER f;
- unsigned char c;
- int ret, peekValue, _buffered;
- OBJ fp;
-
- __INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- if (__INST(binary) == true) {
- if (__isSmallInteger(anObject)) {
- peekValue = __intVal(anObject) & 0xFF;
- } else {
- goto bad;
- }
- } else {
- if (__isCharacter(anObject)) {
- peekValue = __intVal(_characterVal(anObject)) & 0xFF;
- } else {
- goto bad;
- }
- }
-
- f = __FILEVal(fp);
-
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTE__(ret, f, &c, _buffered);
- if (ret > 0) {
- if (c == peekValue) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 1;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
- }
- RETURN (true);
- }
- __UNGETC__(c, f, _buffered);
- RETURN (false);
- }
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */
- __INST(hitEOF) = true;
- }
-bad: ;
-%}.
- ^ super peekFor:anObject
-!
-
-XXXskipLine
- "read the next line (characters up to newline) skip only;
- return nil if EOF reached, self otherwise.
- Not allowed in binary mode."
-
-
-%{ /* STACK:2000 */
-
- FILEPOINTER f;
- OBJ fp;
- int ret, _buffered;
- char c;
-
- __INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- && (__INST(binary) != true)
- ) {
- f = __FILEVal(fp);
- if (_buffered = (__INST(buffered) == true)) {
- __READING__(f)
- }
- for (;;) {
- __READBYTE__(ret, f, &c, _buffered);
- if (ret > 0) {
- if (c == '\n')
- RETURN(self)
- } else
- break;
- }
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
- }
- }
-%}.
- hitEOF ifTrue:[
- ^ self pastEndRead
- ].
- lastErrorNumber notNil ifTrue:[
- self readError.
- ^ self
- ].
- filePointer isNil ifTrue:[
- self errorNotOpen.
- ^ self
- ].
- binary ifTrue:[
- self errorBinary.
- ^ self
- ].
- self errorWriteOnly
-!
-
-XXXskipSeparators
- "skip all whitespace; next will return next non-white-space character
- or nil if endOfFile reached. Not allowed in binary mode.
- - reimplemented for speed"
-
-
-%{
- FILEPOINTER f;
- char c;
- int ret, _buffered;
- OBJ fp;
-
- __INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- && (__INST(binary) != true)
- ) {
- f = __FILEVal(fp);
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
-
- while (1) {
- __READBYTE__(ret, f, &c, _buffered);
- if (ret <= 0) {
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
- }
- break;
- }
- switch (c) {
- case ' ':
- case '\t':
- case '\n':
- case '\r':
- case '\b':
- case '\f':
- break;
-
- default:
- __UNGETC__(c, f, _buffered);
- RETURN ( __MKCHARACTER(c & 0xFF) );
- }
- }
- }
-%}.
- hitEOF == true ifTrue:[
- ^ self pastEndRead
- ].
- lastErrorNumber notNil ifTrue:[
- ^ self readError
- ].
- filePointer isNil ifTrue:[
- ^ self errorNotOpen
- ].
- (mode == #writeonly) ifTrue:[
- ^ self errorWriteOnly
- ].
- (binary == true) ifTrue:[
- ^ self errorBinary
- ].
- ^ super skipSeparators.
-!
-
-XXXskipSeparatorsExceptCR
- "skip all whitespace but no newlines;
- next will return next non-white-space character
- or nil if endOfFile reached. Not allowed in binary mode.
- - reimplemented for speed"
-
-
-%{
- FILEPOINTER f;
- char c;
- int ret, _buffered;
- OBJ fp;
-
- __INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- && (__INST(binary) != true)
- ) {
- f = __FILEVal(fp);
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- while (1) {
- __READBYTE__(ret, f, &c, _buffered);
- if (ret <= 0) {
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
- }
- break;
- }
- switch (c) {
- case ' ':
- case '\t':
- case '\b':
- case '\f':
- break;
-
- default:
- __UNGETC__(c, f, _buffered);
- RETURN ( __MKCHARACTER(c & 0xFF) );
- }
- }
- }
-%}.
- hitEOF ifTrue:[
- ^ self pastEndRead
- ].
- lastErrorNumber notNil ifTrue:[
- ^ self readError
- ].
- filePointer isNil ifTrue:[
- ^ self errorNotOpen
- ].
- (mode == #writeonly) ifTrue:[
- ^ self errorWriteOnly
- ].
- ^ self errorBinary.
-!
-
-XXXskipThrough:aCharacter
- "skip all characters up-to and including aCharacter.
- Return the receiver if skip was successful,
- otherwise (i.e. if not found) return nil and leave the stream positioned at the end.
- The next read operation will return the character after aCharacter.
- The argument, aCharacter must be character, or integer when in binary mode.
- Only single byte characters are currently supported."
-
-
-%{
- FILEPOINTER f;
- REGISTER int cSearch;
- unsigned char c;
- int ret, _buffered;
- OBJ fp;
-
- __INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- if (__INST(binary) == true) {
- /* searched for object must be a smallInteger */
- if (! __isSmallInteger(aCharacter)) goto badArgument;
- cSearch = __intVal(aCharacter);
- } else {
- /* searched for object must be a character */
- if (! __isCharacter(aCharacter)) goto badArgument;
- cSearch = __intVal(_characterVal(aCharacter));
- }
- /* Q: should we just say: "not found" ? */
- if ((cSearch < 0) || (cSearch > 255)) goto badArgument;
-
- f = __FILEVal(fp);
- if (_buffered = (__INST(buffered) == true)) {
- __READING__(f)
- }
-
- while (1) {
- __READBYTE__(ret, f, &c, _buffered);
- if (ret <= 0) {
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
- }
- break;
- }
- if (c == cSearch) {
- RETURN (self);
- }
- }
- }
-badArgument: ;
-%}.
- hitEOF ifTrue:[ ^ nil ].
- lastErrorNumber notNil ifTrue:[
- self readError.
- ^ self
- ].
- filePointer isNil ifTrue:[
- self errorNotOpen.
- ^ self
- ].
- (mode == #writeonly) ifTrue:[
- self errorWriteOnly.
- ^ self
- ].
- "
- argument must be integer/character in binary mode,
- character in text mode
- "
- self error:'invalid argument'.
-
- "
- |s|
- s := 'Makefile' asFilename readStream.
- s skipThrough:$E.
- s next:10
- "
-!
-
-XXXskipToAll:aString
- "skip for the sequence given by the argument, aCollection;
- return nil if not found, self otherwise.
- On a successful match, the next read will return characters of aString."
-
- |oldPos|
-
- oldPos := self position.
- (self skipThroughAll:aString) isNil ifTrue:[
- "
- restore position"
- self position:oldPos.
- ^ nil
- ].
- "
- position before match-string
- "
- self position:(self position - aString size).
- ^ self
-
- "
- |s|
- s := 'Makefile' asFilename readStream.
- [
- (s skipToAll:'EDIT') notNil ifTrue:[
- s next:100.
- ].
- ] ensure:[
- s close.
- ]"
- "Modified: 26.6.1996 / 09:22:05 / cg"
-! !
-
!ExternalStream methodsFor:'non homogenous reading'!
nextAvailable:count
@@ -3801,90 +3218,92 @@
int o_offs;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- && __bothSmallInteger(count, start)
- ) {
- f = __FILEVal(fp);
-
- cnt = __intVal(count);
- offs = __intVal(start) - 1;
-
- if (__isExternalBytesLike(anObject)) {
- OBJ sz;
-
- nInstBytes = 0;
- extPtr = (char *)(__externalBytesAddress(anObject));
- sz = __externalBytesSize(anObject);
- if (__isSmallInteger(sz)) {
- objSize = __intVal(sz);
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ && __bothSmallInteger(count, start)
+ ) {
+ f = __FILEVal(fp);
+
+ cnt = __intVal(count);
+ offs = __intVal(start) - 1;
+
+ if (__isExternalBytesLike(anObject)) {
+ OBJ sz;
+
+ nInstBytes = 0;
+ extPtr = (char *)(__externalBytesAddress(anObject));
+ sz = __externalBytesSize(anObject);
+ if (__isSmallInteger(sz)) {
+ objSize = __intVal(sz);
+ } else {
+ objSize = 0; /* unknown */
+ }
} else {
- objSize = 0; /* unknown */
- }
- } else {
- OBJ oClass;
-
- oClass = __Class(anObject);
- switch (__intVal(__ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
- case BYTEARRAY:
- case WORDARRAY:
- case LONGARRAY:
- case SWORDARRAY:
- case SLONGARRAY:
- case FLOATARRAY:
- case DOUBLEARRAY:
- break;
- default:
- goto bad;
+ OBJ oClass;
+
+ oClass = __Class(anObject);
+ switch (__intVal(__ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
+ case BYTEARRAY:
+ case WORDARRAY:
+ case LONGARRAY:
+ case SWORDARRAY:
+ case SLONGARRAY:
+ case FLOATARRAY:
+ case DOUBLEARRAY:
+ break;
+ default:
+ goto bad;
+ }
+ extPtr = (char *)0;
+ nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
+ nInstBytes = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
+ objSize = __Size(anObject) - nInstBytes;
}
- extPtr = (char *)0;
- nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
- nInstBytes = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
- objSize = __Size(anObject) - nInstBytes;
- }
-
- if ((offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs))) {
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f);
- }
-
- if (extPtr) {
- __READAVAILBYTES__(ret, f, extPtr+offs, cnt, _buffered);
- } else {
- /*
- * on interrupt, anObject may be moved to another location.
- * So we pass (char *)__InstPtr(anObject) + nInstBytes + offs to the macro __READ_BYTES__,
- * to get a new address.
- */
- offs += nInstBytes;
- __READAVAILBYTES_OBJ__(ret, f, anObject, offs, cnt, _buffered);
- }
+
+ if ((offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs))) {
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f);
+ }
+
+ if (extPtr) {
+ __READAVAILBYTES__(ret, f, extPtr+offs, cnt, _buffered);
+ } else {
+ /*
+ * on interrupt, anObject may be moved to another location.
+ * So we pass (char *)__InstPtr(anObject) + nInstBytes + offs to the macro __READ_BYTES__,
+ * to get a new address.
+ */
+ offs += nInstBytes;
+ __READAVAILBYTES_OBJ__(ret, f, anObject, offs, cnt, _buffered);
+ }
#ifdef PRE_22_jan_2000
- if (ret > 0)
+ if (ret > 0)
#else
- /* 0 is NOT an EOF condition here ... */
- if (ret >= 0)
+ /* 0 is NOT an EOF condition here ... */
+ if (ret >= 0)
#endif
- {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + ret;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
+ {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + ret;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN (__mkSmallInteger(ret));
}
- RETURN (__mkSmallInteger(ret));
- }
#ifdef PRE_22_jan_2000
- if (ret == 0) {
- __INST(hitEOF) = true;
- } else /* ret < 0 */
+ if (ret == 0) {
+ __INST(hitEOF) = true;
+ } else /* ret < 0 */
#endif
- {
- __INST(position) = nil;
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ {
+ __INST(position) = nil;
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ }
}
}
}
@@ -3892,7 +3311,7 @@
%}.
(hitEOF and:[self pastEndRead isNil]) ifTrue:[^ 0].
lastErrorNumber notNil ifTrue:[^ self readError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
"
count not integer or arg not bit-like (String, ByteArray etc)
@@ -3912,38 +3331,40 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))) {
- f = __FILEVal(fp);
-
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTE__(ret, f, &byte, _buffered);
- if (ret > 0) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 1;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))) {
+ f = __FILEVal(fp);
+
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
}
- RETURN (__mkSmallInteger(byte));
- }
-
- if (ret == 0) {
- __INST(hitEOF) = true;
- } else /* ret < 0 */ {
- __INST(position) = nil;
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ __READBYTE__(ret, f, &byte, _buffered);
+ if (ret > 0) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + 1;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN (__mkSmallInteger(byte));
+ }
+
+ if (ret == 0) {
+ __INST(hitEOF) = true;
+ } else /* ret < 0 */ {
+ __INST(position) = nil;
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ }
}
}
%}.
hitEOF ifTrue:[^ self pastEndRead].
lastErrorNumber notNil ifTrue:[^ self readError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
^ self errorWriteOnly
!
@@ -3980,80 +3401,82 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- && __bothSmallInteger(count, start)
- ) {
- f = __FILEVal(fp);
-
- cnt = __intVal(count);
- offs = __intVal(start) - 1;
-
- if (__isExternalBytesLike(anObject)) {
- OBJ sz;
-
- nInstBytes = 0;
- extPtr = (char *)(__externalBytesAddress(anObject));
- sz = __externalBytesSize(anObject);
- if (__isSmallInteger(sz)) {
- objSize = __intVal(sz);
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ && __bothSmallInteger(count, start)
+ ) {
+ f = __FILEVal(fp);
+
+ cnt = __intVal(count);
+ offs = __intVal(start) - 1;
+
+ if (__isExternalBytesLike(anObject)) {
+ OBJ sz;
+
+ nInstBytes = 0;
+ extPtr = (char *)(__externalBytesAddress(anObject));
+ sz = __externalBytesSize(anObject);
+ if (__isSmallInteger(sz)) {
+ objSize = __intVal(sz);
+ } else {
+ objSize = 0; /* unknown */
+ }
} else {
- objSize = 0; /* unknown */
- }
- } else {
- OBJ oClass;
-
- oClass = __Class(anObject);
- switch (__intVal(__ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
- case BYTEARRAY:
- case WORDARRAY:
- case LONGARRAY:
- case SWORDARRAY:
- case SLONGARRAY:
- case FLOATARRAY:
- case DOUBLEARRAY:
- break;
- default:
- goto bad;
+ OBJ oClass;
+
+ oClass = __Class(anObject);
+ switch (__intVal(__ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
+ case BYTEARRAY:
+ case WORDARRAY:
+ case LONGARRAY:
+ case SWORDARRAY:
+ case SLONGARRAY:
+ case FLOATARRAY:
+ case DOUBLEARRAY:
+ break;
+ default:
+ goto bad;
+ }
+ extPtr = (char *)0;
+ nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
+ nInstBytes = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
+ objSize = __Size(anObject) - nInstBytes;
}
- extPtr = (char *)0;
- nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
- nInstBytes = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
- objSize = __Size(anObject) - nInstBytes;
- }
- if ((offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs))) {
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f);
- }
-
- if (extPtr) {
- __READBYTES__(ret, f, extPtr+offs, cnt, _buffered);
- } else {
- /*
- * on interrupt, anObject may be moved to another location.
- * So we pass anObject, and the offset to the __READBYTES_OBJ__ macro.
- */
- offs += nInstBytes;
- __READBYTES_OBJ__(ret, f, anObject, offs, cnt, _buffered);
- }
-
- if (ret > 0) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + ret;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ if ((offs >= 0) && (cnt >= 0) && (objSize >= (cnt + offs))) {
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f);
+ }
+
+ if (extPtr) {
+ __READBYTES__(ret, f, extPtr+offs, cnt, _buffered);
} else {
- __INST(position) = nil; /* i.e. do not know */
+ /*
+ * on interrupt, anObject may be moved to another location.
+ * So we pass anObject, and the offset to the __READBYTES_OBJ__ macro.
+ */
+ offs += nInstBytes;
+ __READBYTES_OBJ__(ret, f, anObject, offs, cnt, _buffered);
}
- RETURN (__mkSmallInteger(ret));
- }
- if (ret == 0) {
- __INST(hitEOF) = true;
- } else /* ret < 0 */ {
- __INST(position) = nil;
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+
+ if (ret > 0) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + ret;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN (__mkSmallInteger(ret));
+ }
+ if (ret == 0) {
+ __INST(hitEOF) = true;
+ } else /* ret < 0 */ {
+ __INST(position) = nil;
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ }
}
}
}
@@ -4061,7 +3484,7 @@
%}.
(hitEOF and:[self pastEndRead isNil]) ifTrue:[^ 0].
lastErrorNumber notNil ifTrue:[^ self readError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
"
count not integer or arg not bit-like (String, ByteArray etc)
@@ -4089,72 +3512,74 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- FILEPOINTER f;
- int ret, _buffered;
- int value;
- union {
- unsigned char buffer[4];
- int intVal;
- } u;
-
- f = __FILEVal(fp);
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTES__(ret, f, u.buffer, 4, _buffered);
-
- if (ret == 4) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 4;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ ) {
+ FILEPOINTER f;
+ int ret, _buffered;
+ int value;
+ union {
+ unsigned char buffer[4];
+ int intVal;
+ } u;
+
+ f = __FILEVal(fp);
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
}
- if (msbFlag == true) {
+ __READBYTES__(ret, f, u.buffer, 4, _buffered);
+
+ if (ret == 4) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + 4;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ if (msbFlag == true) {
#if defined(__MSBFIRST__)
- value = u.intVal;
+ value = u.intVal;
#else
- value = (u.buffer[0] & 0xFF);
- value = (value << 8) | (u.buffer[1] & 0xFF);
- value = (value << 8) | (u.buffer[2] & 0xFF);
- value = (value << 8) | (u.buffer[3] & 0xFF);
+ value = (u.buffer[0] & 0xFF);
+ value = (value << 8) | (u.buffer[1] & 0xFF);
+ value = (value << 8) | (u.buffer[2] & 0xFF);
+ value = (value << 8) | (u.buffer[3] & 0xFF);
#endif
- } else {
+ } else {
#if defined(__LSBFIRST__)
- value = u.intVal;
+ value = u.intVal;
#else
- value = (u.buffer[3] & 0xFF);
- value = (value << 8) | (u.buffer[2] & 0xFF);
- value = (value << 8) | (u.buffer[1] & 0xFF);
- value = (value << 8) | (u.buffer[0] & 0xFF);
+ value = (u.buffer[3] & 0xFF);
+ value = (value << 8) | (u.buffer[2] & 0xFF);
+ value = (value << 8) | (u.buffer[1] & 0xFF);
+ value = (value << 8) | (u.buffer[0] & 0xFF);
+#endif
+ }
+#if __POINTER_SIZE__ == 8
+ RETURN ( __mkSmallInteger(value));
+#else
+ if ((value >= _MIN_INT) && (value <= _MAX_INT)) {
+ RETURN ( __mkSmallInteger(value));
+ }
+ RETURN ( __MKLARGEINT(value) );
#endif
}
-#if __POINTER_SIZE__ == 8
- RETURN ( __mkSmallInteger(value));
-#else
- if ((value >= _MIN_INT) && (value <= _MAX_INT)) {
- RETURN ( __mkSmallInteger(value));
+
+ if (ret < 0) {
+ __INST(position) = nil;
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ } else /* ret == 0 */ {
+ __INST(hitEOF) = true;
}
- RETURN ( __MKLARGEINT(value) );
-#endif
- }
-
- if (ret < 0) {
- __INST(position) = nil;
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
}
}
%}.
hitEOF ifTrue:[^ self pastEndRead].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
^ self readError.
!
@@ -4170,59 +3595,61 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- FILEPOINTER f;
- int ret, _buffered;
- short value;
- union {
- unsigned char buffer[2];
- short shortVal;
- } u;
-
- f = __FILEVal(fp);
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTES__(ret, f, u.buffer, 2, _buffered);
-
- if (ret == 2) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 2;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ ) {
+ FILEPOINTER f;
+ int ret, _buffered;
+ short value;
+ union {
+ unsigned char buffer[2];
+ short shortVal;
+ } u;
+
+ f = __FILEVal(fp);
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
+ }
+ __READBYTES__(ret, f, u.buffer, 2, _buffered);
+
+ if (ret == 2) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + 2;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ if (msbFlag == true) {
+#if defined(__MSBFIRST__)
+ value = u.shortVal;
+#else
+ value = ((u.buffer[0] & 0xFF) << 8) | (u.buffer[1] & 0xFF);
+#endif
+ } else {
+#if defined(__LSBFIRST__)
+ value = u.shortVal;
+#else
+ value = ((u.buffer[1] & 0xFF) << 8) | (u.buffer[0] & 0xFF);
+#endif
+ }
+ RETURN (__mkSmallInteger(value));
+ }
+
+ if (ret < 0) {
__INST(position) = nil; /* i.e. do not know */
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ } else /* ret == 0 */ {
+ __INST(hitEOF) = true;
}
- if (msbFlag == true) {
-#if defined(__MSBFIRST__)
- value = u.shortVal;
-#else
- value = ((u.buffer[0] & 0xFF) << 8) | (u.buffer[1] & 0xFF);
-#endif
- } else {
-#if defined(__LSBFIRST__)
- value = u.shortVal;
-#else
- value = ((u.buffer[1] & 0xFF) << 8) | (u.buffer[0] & 0xFF);
-#endif
- }
- RETURN (__mkSmallInteger(value));
- }
-
- if (ret < 0) {
- __INST(position) = nil; /* i.e. do not know */
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
}
}
%}.
hitEOF ifTrue:[^ self pastEndRead].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
^ self readError.
!
@@ -4239,73 +3666,75 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- FILEPOINTER f;
- int ret, _buffered;
- unsigned INT value;
- union {
- unsigned char buffer[4];
- unsigned int intVal;
- } u;
-
- f = __FILEVal(fp);
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTES__(ret, f, u.buffer, 4, _buffered);
-
- if (ret == 4) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 4;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ ) {
+ FILEPOINTER f;
+ int ret, _buffered;
+ unsigned INT value;
+ union {
+ unsigned char buffer[4];
+ unsigned int intVal;
+ } u;
+
+ f = __FILEVal(fp);
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
}
- if (msbFlag == true) {
+ __READBYTES__(ret, f, u.buffer, 4, _buffered);
+
+ if (ret == 4) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + 4;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ if (msbFlag == true) {
#if defined(__MSBFIRST__)
- value = u.intVal;
+ value = u.intVal;
#else
- value = u.buffer[0];
- value = (value << 8) | u.buffer[1];
- value = (value << 8) | u.buffer[2];
- value = (value << 8) | u.buffer[3];
+ value = u.buffer[0];
+ value = (value << 8) | u.buffer[1];
+ value = (value << 8) | u.buffer[2];
+ value = (value << 8) | u.buffer[3];
#endif
- } else {
+ } else {
#if defined(__LSBFIRST__)
- value = u.intVal;
+ value = u.intVal;
#else
- value = u.buffer[3];
- value = (value << 8) | u.buffer[2];
- value = (value << 8) | u.buffer[1];
- value = (value << 8) | u.buffer[0];
+ value = u.buffer[3];
+ value = (value << 8) | u.buffer[2];
+ value = (value << 8) | u.buffer[1];
+ value = (value << 8) | u.buffer[0];
+#endif
+ }
+#if __POINTER_SIZE__ == 8
+ value &= 0xFFFFFFFF;
+ RETURN (__mkSmallInteger(value));
+#else
+ if (value <= _MAX_INT) {
+ RETURN (__mkSmallInteger(value));
+ }
+ RETURN (__MKULARGEINT(value) );
#endif
}
-#if __POINTER_SIZE__ == 8
- value &= 0xFFFFFFFF;
- RETURN (__mkSmallInteger(value));
-#else
- if (value <= _MAX_INT) {
- RETURN (__mkSmallInteger(value));
+
+ if (ret < 0) {
+ __INST(position) = nil; /* i.e. do not know */
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ } else /* ret == 0 */ {
+ __INST(hitEOF) = true;
}
- RETURN (__MKULARGEINT(value) );
-#endif
- }
-
- if (ret < 0) {
- __INST(position) = nil; /* i.e. do not know */
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
}
}
%}.
hitEOF ifTrue:[^ self pastEndRead].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
^ self readError.
!
@@ -4321,59 +3750,61 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- FILEPOINTER f;
- int ret, _buffered;
- unsigned int value;
- union {
- unsigned char buffer[2];
- unsigned short shortVal;
- } u;
-
- f = __FILEVal(fp);
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTES__(ret, f, u.buffer, 2, _buffered);
-
- if (ret == 2) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 2;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ ) {
+ FILEPOINTER f;
+ int ret, _buffered;
+ unsigned int value;
+ union {
+ unsigned char buffer[2];
+ unsigned short shortVal;
+ } u;
+
+ f = __FILEVal(fp);
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
+ }
+ __READBYTES__(ret, f, u.buffer, 2, _buffered);
+
+ if (ret == 2) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + 2;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ if (msbFlag == true) {
+#if defined(__MSBFIRST__)
+ value = u.shortVal;
+#else
+ value = (u.buffer[0] << 8) | u.buffer[1];
+#endif
+ } else {
+#if defined(__LSBFIRST__)
+ value = u.shortVal;
+#else
+ value = (u.buffer[1] << 8) | u.buffer[0];
+#endif
+ }
+ RETURN (__mkSmallInteger(value));
+ }
+
+ if (ret < 0) {
__INST(position) = nil; /* i.e. do not know */
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ } else /* ret == 0 */ {
+ __INST(hitEOF) = true;
}
- if (msbFlag == true) {
-#if defined(__MSBFIRST__)
- value = u.shortVal;
-#else
- value = (u.buffer[0] << 8) | u.buffer[1];
-#endif
- } else {
-#if defined(__LSBFIRST__)
- value = u.shortVal;
-#else
- value = (u.buffer[1] << 8) | u.buffer[0];
-#endif
- }
- RETURN (__mkSmallInteger(value));
- }
-
- if (ret < 0) {
- __INST(position) = nil; /* i.e. do not know */
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
}
}
%}.
hitEOF ifTrue:[^ self pastEndRead].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
^ self readError.
!
@@ -4405,42 +3836,44 @@
int cnt, _buffered;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))
- && __isSmallInteger(aByteValue)
-
- ) {
- c = __intVal(aByteValue);
- f = __FILEVal(fp);
- if (_buffered = (__INST(buffered) == true)) {
- __WRITING__(f)
- }
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))
+ && __isSmallInteger(aByteValue)
+
+ ) {
+ c = __intVal(aByteValue);
+ f = __FILEVal(fp);
+ if (_buffered = (__INST(buffered) == true)) {
+ __WRITING__(f)
+ }
#ifdef WIN32
- if ((f == __win32_stdout()) || (f == __win32_stderr())) {
- cnt = __win32_fwrite(&c, 1, 1, f);
- } else
+ if ((f == __win32_stdout()) || (f == __win32_stderr())) {
+ cnt = __win32_fwrite(&c, 1, 1, f);
+ } else
#endif
- {
- __WRITEBYTE__(cnt, f, &c, _buffered);
- }
- if (cnt == 1) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 1;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
+ {
+ __WRITEBYTE__(cnt, f, &c, _buffered);
+ }
+ if (cnt == 1) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + 1;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN (self);
+ }
+ if (cnt < 0) {
__INST(position) = nil; /* i.e. do not know */
}
- RETURN (self);
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
- if (cnt < 0) {
- __INST(position) = nil; /* i.e. do not know */
- }
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
%}.
- filePointer isNil ifTrue:[self errorNotOpen. ^ self].
+ handle isNil ifTrue:[self errorNotOpen. ^ self].
(mode == #readonly) ifTrue:[self errorReadOnly. ^ self].
self writeError.
!
@@ -4466,89 +3899,91 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))
- && __bothSmallInteger(count, start)
- ) {
- len = __intVal(count);
- offs = __intVal(start) - 1;
- f = __FILEVal(fp);
-
- if (__isExternalBytesLike(anObject)) {
- OBJ sz;
-
- nInstBytes = 0;
- extPtr = (char *)__externalBytesAddress(anObject);
- sz = __externalBytesSize(anObject);
- if (__isSmallInteger(sz)) {
- objSize = __intVal(sz);
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))
+ && __bothSmallInteger(count, start)
+ ) {
+ len = __intVal(count);
+ offs = __intVal(start) - 1;
+ f = __FILEVal(fp);
+
+ if (__isExternalBytesLike(anObject)) {
+ OBJ sz;
+
+ nInstBytes = 0;
+ extPtr = (char *)__externalBytesAddress(anObject);
+ sz = __externalBytesSize(anObject);
+ if (__isSmallInteger(sz)) {
+ objSize = __intVal(sz);
+ } else {
+ objSize = 0; /* unknown */
+ }
} else {
- objSize = 0; /* unknown */
- }
- } else {
- OBJ oClass;
-
- oClass = __Class(anObject);
- switch (__intVal(__ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
- case BYTEARRAY:
- case WORDARRAY:
- case LONGARRAY:
- case SWORDARRAY:
- case SLONGARRAY:
- case FLOATARRAY:
- case DOUBLEARRAY:
- break;
- default:
- goto bad;
+ OBJ oClass;
+
+ oClass = __Class(anObject);
+ switch (__intVal(__ClassInstPtr(oClass)->c_flags) & ARRAYMASK) {
+ case BYTEARRAY:
+ case WORDARRAY:
+ case LONGARRAY:
+ case SWORDARRAY:
+ case SLONGARRAY:
+ case FLOATARRAY:
+ case DOUBLEARRAY:
+ break;
+ default:
+ goto bad;
+ }
+ extPtr = (char *)0;
+ nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
+ nInstBytes = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
+ objSize = __Size(anObject) - nInstBytes;
}
- extPtr = (char *)0;
- nInstVars = __intVal(__ClassInstPtr(oClass)->c_ninstvars);
- nInstBytes = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
- objSize = __Size(anObject) - nInstBytes;
- }
- if ( (offs >= 0) && (len >= 0) && (objSize >= (len + offs)) ) {
- if (_buffered = (__INST(buffered) == true)) {
- __WRITING__(f)
- }
-
- if (extPtr) {
- __WRITEBYTES__(cnt, f, extPtr+offs, len, _buffered);
- } else {
- /*
- * on interrupt, anObject may be moved to another location.
- * So we pass anObject, and the offset to the __WRITEBYTES_OBJ__ macro.
- */
- offs += nInstBytes;
- __WRITEBYTES_OBJ__(cnt, f, anObject, offs, len, _buffered);
+ if ( (offs >= 0) && (len >= 0) && (objSize >= (len + offs)) ) {
+ if (_buffered = (__INST(buffered) == true)) {
+ __WRITING__(f)
+ }
+
+ if (extPtr) {
+ __WRITEBYTES__(cnt, f, extPtr+offs, len, _buffered);
+ } else {
+ /*
+ * on interrupt, anObject may be moved to another location.
+ * So we pass anObject, and the offset to the __WRITEBYTES_OBJ__ macro.
+ */
+ offs += nInstBytes;
+ __WRITEBYTES_OBJ__(cnt, f, anObject, offs, len, _buffered);
+ }
+
+ if (cnt >= 0) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + cnt;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN ( __mkSmallInteger(cnt) );
+ }
+ if (
+#ifdef EWOULDBLOCK
+ (__threadErrno == EWOULDBLOCK) ||
+#endif
+ (__threadErrno == EAGAIN)
+ ) {
+ RETURN ( __mkSmallInteger(0) );
+ }
+ __INST(position) = nil; /* i.e. do not know */
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
-
- if (cnt >= 0) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + cnt;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
- }
- RETURN ( __mkSmallInteger(cnt) );
- }
- if (
-#ifdef EWOULDBLOCK
- (__threadErrno == EWOULDBLOCK) ||
-#endif
- (__threadErrno == EAGAIN)
- ) {
- RETURN ( __mkSmallInteger(0) );
- }
- __INST(position) = nil; /* i.e. do not know */
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
}
bad: ;
%}.
lastErrorNumber notNil ifTrue:[^ self writeError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #readonly) ifTrue:[^ self errorReadOnly].
^ self primitiveFailed
!
@@ -4589,52 +4024,54 @@
#endif
}
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))
- ) {
- if (msbFlag == true) {
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))
+ ) {
+ if (msbFlag == true) {
#if defined(__MSBFIRST__)
- u.intVal = num;
+ u.intVal = num;
#else
- u.bytes[0] = (num >> 24) & 0xFF;
- u.bytes[1] = (num >> 16) & 0xFF;
- u.bytes[2] = (num >> 8) & 0xFF;
- u.bytes[3] = num & 0xFF;
+ u.bytes[0] = (num >> 24) & 0xFF;
+ u.bytes[1] = (num >> 16) & 0xFF;
+ u.bytes[2] = (num >> 8) & 0xFF;
+ u.bytes[3] = num & 0xFF;
#endif
- } else {
+ } else {
#if defined(__LSBFIRST__)
- u.intVal = num;
+ u.intVal = num;
#else
- u.bytes[3] = (num >> 24) & 0xFF;
- u.bytes[2] = (num >> 16) & 0xFF;
- u.bytes[1] = (num >> 8) & 0xFF;
- u.bytes[0] = num & 0xFF;
+ u.bytes[3] = (num >> 24) & 0xFF;
+ u.bytes[2] = (num >> 16) & 0xFF;
+ u.bytes[1] = (num >> 8) & 0xFF;
+ u.bytes[0] = num & 0xFF;
#endif
- }
-
- f = __FILEVal(fp);
- if (_buffered = (__INST(buffered) == true)) {
- __WRITING__(f)
+ }
+
+ f = __FILEVal(fp);
+ if (_buffered = (__INST(buffered) == true)) {
+ __WRITING__(f)
+ }
+ __WRITEBYTES__(cnt, f, u.bytes, 4, _buffered);
+
+ if (cnt == 4) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + 4;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN ( self );
+ }
+ __INST(position) = nil; /* i.e. do not know */
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
- __WRITEBYTES__(cnt, f, u.bytes, 4, _buffered);
-
- if (cnt == 4) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 4;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
- }
- RETURN ( self );
- }
- __INST(position) = nil; /* i.e. do not know */
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
badArg: ;
%}.
- filePointer isNil ifTrue:[self errorNotOpen. ^ self].
+ handle isNil ifTrue:[self errorNotOpen. ^ self].
(mode == #readonly) ifTrue:[self errorReadOnly. ^ self].
lastErrorNumber notNil ifTrue:[self writeError. ^ self].
@@ -4662,50 +4099,52 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))
- && __isSmallInteger(aNumber)
- ) {
- num = __intVal(aNumber);
- if (msbFlag == true) {
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))
+ && __isSmallInteger(aNumber)
+ ) {
+ num = __intVal(aNumber);
+ if (msbFlag == true) {
#if defined(__MSBFIRST__)
- u.shortVal = num;
+ u.shortVal = num;
+#else
+ u.bytes[0] = (num >> 8) & 0xFF;
+ u.bytes[1] = num & 0xFF;
+#endif
+ } else {
+#if defined(__LSBFIRST__)
+ u.shortVal = num;
#else
- u.bytes[0] = (num >> 8) & 0xFF;
- u.bytes[1] = num & 0xFF;
+ u.bytes[1] = (num >> 8) & 0xFF;
+ u.bytes[0] = num & 0xFF;
#endif
- } else {
-#if defined(__LSBFIRST__)
- u.shortVal = num;
-#else
- u.bytes[1] = (num >> 8) & 0xFF;
- u.bytes[0] = num & 0xFF;
-#endif
+ }
+
+ f = __FILEVal(fp);
+ if (_buffered = (__INST(buffered) == true)) {
+ __WRITING__(f)
+ }
+ __WRITEBYTES__(cnt, f, u.bytes, 2, _buffered);
+
+ if (cnt == 2) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + 2;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN ( self );
+ }
+ __INST(position) = nil; /* i.e. do not know */
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
-
- f = __FILEVal(fp);
- if (_buffered = (__INST(buffered) == true)) {
- __WRITING__(f)
- }
- __WRITEBYTES__(cnt, f, u.bytes, 2, _buffered);
-
- if (cnt == 2) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 2;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
- }
- RETURN ( self );
- }
- __INST(position) = nil; /* i.e. do not know */
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
%}.
lastErrorNumber notNil ifTrue:[self writeError. ^ self.].
- filePointer isNil ifTrue:[self errorNotOpen. ^ self].
+ handle isNil ifTrue:[self errorNotOpen. ^ self].
(mode == #readonly) ifTrue:[self errorReadOnly. ^ self].
self argumentMustBeInteger
! !
@@ -4735,40 +4174,42 @@
|fp|
%{
- if ((fp = __INST(filePointer)) != nil) {
- FILEPOINTER f;
- int rslt;
-
- __INST(filePointer) = nil;
- f = __FILEVal(fp);
- if (@global(FileOpenTrace) == true) {
- fprintf(stderr, "fclose [ExternalStream] %x\n", f);
- }
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if ((fp = __INST(handle)) != nil) {
+ FILEPOINTER f;
+ int rslt;
+
+ __INST(handle) = nil;
+ f = __FILEVal(fp);
+ if (@global(FileOpenTrace) == true) {
+ fprintf(stderr, "fclose [ExternalStream] %x\n", f);
+ }
#ifdef WIN32
- do {
- __threadErrno = 0;
- rslt = __STX_C_CALL1("fclose", fclose, f);
- } while((rslt < 0) && (__threadErrno == EINTR));
+ do {
+ __threadErrno = 0;
+ rslt = __STX_C_CALL1("fclose", fclose, f);
+ } while((rslt < 0) && (__threadErrno == EINTR));
#else
- __BEGIN_INTERRUPTABLE__
- fclose(f);
- __END_INTERRUPTABLE__
+ __BEGIN_INTERRUPTABLE__
+ fclose(f);
+ __END_INTERRUPTABLE__
#endif
+ }
+ RETURN (self);
}
- RETURN (self);
%}.
"/ fallback for rel5
- fp := filePointer.
+ fp := handle.
fp notNil ifTrue:[
- filePointer := nil.
+ handle := nil.
self closeFile:fp
]
! !
!ExternalStream methodsFor:'private'!
-closeFile:filePointer
+closeFile:handle
"for rel5 only"
self primitiveFailed
@@ -4784,7 +4225,7 @@
|retVal|
- filePointer notNil ifTrue:[^ self errorAlreadyOpen].
+ handle notNil ifTrue:[^ self errorAlreadyOpen].
%{
FILEPOINTER f;
OBJ fp;
@@ -4800,7 +4241,8 @@
fprintf(stderr, "fdopen [ExternalStream] %d -> %x\n", __intVal(aFileDescriptor), f);
}
- fp = __MKFILEPOINTER(f); __INST(filePointer) = fp; __STORE(self, fp);
+ fp = __MKFILEPOINTER(f); __INST(handle) = fp; __STORE(self, fp);
+ __INST(handleType) = @symbol(filePointer);
__INST(position) = @global(PositionableStream:ZeroPosition);
retVal = self;
}
@@ -4834,22 +4276,22 @@
Only used internally"
mode == #readonly ifTrue:[
- ^ ReadMode
+ ^ ReadMode
].
mode == #writeonly ifTrue:[
- ^ WriteMode
+ ^ WriteMode
].
mode == #readWrite ifTrue:[
- ^ ReadWriteMode
+ ^ ReadWriteMode
].
mode == #append ifTrue:[
- ^ AppendMode
+ ^ AppendMode
].
^ ReadWriteMode
!
open:aPath withMode:openModeString
- "low level open; opens the file/device and sets the filePointer instance
+ "low level open; opens the file/device and sets the handle instance
variable. Careful: this does not care for any other state."
|ok|
@@ -4883,7 +4325,8 @@
if (@global(FileOpenTrace) == true) {
fprintf(stderr, "fopen %s [ExternalStream] -> %x\n", __stringVal(aPath), f);
}
- fp = __MKFILEPOINTER(f); __INST(filePointer) = fp; __STORE(self, fp);
+ fp = __MKFILEPOINTER(f); __INST(handle) = fp; __STORE(self, fp);
+ __INST(handleType) = @symbol(filePointer);
ok = true;
}
}
@@ -4904,22 +4347,39 @@
cannot reopen here since I am abstract and have no device knowledge"
self class name errorPrint. ' [warning]: automatic reOpen not supported - stream closed' errorPrintCR.
- filePointer := nil.
+ handle := nil.
Lobby unregister:self.
"Modified: 10.1.1997 / 17:50:44 / cg"
!
+setAccessor:what to:something
+ "set the filePointer/fileHandle to the given one;
+ low level private & friend interface; may also be used to connect to some
+ externally provided handle."
+
+ handle := something.
+ handleType := what.
+!
+
setFileDescriptor:anInteger mode:openMode
- "set the filePointer based upon a given fileDescriptor -
+ "set the handle based upon a given fileDescriptor -
notice: this one is based on the underlying OSs fileDescriptor -
this may not be available on all platforms (i.e. non unix systems)."
self setFileHandle:anInteger mode:openMode
!
+setFileHandle:something
+ "set the fileHandle to the given one;
+ low level private & friend interface; may also be used to connect to some
+ externally provided file handle."
+
+ self setAccessor:#fileHandle to:something
+!
+
setFileHandle:anIntegerOrExternalAddress mode:openMode
- "set the filePointer based upon a given fileHandle -
+ "set the handle based upon a given fileHandle -
notice: this one is based on the underlying OSs fileDescriptor -
this is a fileDescriptor (Integer) on Unix and Windows, or an Handle (ExternalAddres) on Windows only.
It may not be available on all platforms."
@@ -4931,26 +4391,27 @@
int fd;
if (!__isStringLike(openMode))
- goto err;
+ goto err;
#ifdef WIN32
if (__isExternalAddressLike(anIntegerOrExternalAddress) ) {
- HANDLE __fileHandle = (HANDLE)(__externalAddressVal(anIntegerOrExternalAddress));
- fd = _open_osfhandle(__fileHandle, 0); /* should we handle readonly, append or text mode? */
+ HANDLE __fileHandle = (HANDLE)(__externalAddressVal(anIntegerOrExternalAddress));
+ fd = _open_osfhandle(__fileHandle, 0); /* should we handle readonly, append or text mode? */
} else
#endif
if (__isSmallInteger(anIntegerOrExternalAddress)) {
- fd = __smallIntegerVal(anIntegerOrExternalAddress);
+ fd = __smallIntegerVal(anIntegerOrExternalAddress);
} else {
- goto err;
+ goto err;
}
f = fdopen(fd, __stringVal(openMode));
if (f != NULL) {
- if (@global(FileOpenTrace) == true) {
- fprintf(stderr, "fdopen [ExternalStream] %d -> %x\n", fd, f);
- }
- fp = __MKFILEPOINTER(f); __INST(filePointer) = fp; __STORE(self, fp);
- RETURN (self);
+ if (@global(FileOpenTrace) == true) {
+ fprintf(stderr, "fdopen [ExternalStream] %d -> %x\n", fd, f);
+ }
+ fp = __MKFILEPOINTER(f); __INST(handle) = fp; __STORE(self, fp);
+ __INST(handleType) = @symbol(filePointer);
+ RETURN (self);
}
err:;
%}.
@@ -4960,13 +4421,21 @@
setFilePointer:something
"set the filePointer to the given one;
low level private & friend interface; may also be used to connect to some
- externally provided file handle."
-
- filePointer := something
+ externally provided file."
+
+ self setAccessor:#filePointer to:something
!
setLastError:aNumber
lastErrorNumber := aNumber
+!
+
+setSocketHandle:something
+ "set the socketHandle to the given one;
+ low level private & friend interface; may also be used to connect to some
+ externally provided socket handle."
+
+ self setAccessor:#socketHandle to:something
! !
!ExternalStream methodsFor:'queries'!
@@ -4981,7 +4450,7 @@
isBlocking
"return true, if O_NONBLOCK is NOT set in the fileDescriptor (propably UNIX specific)"
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
^ OperatingSystem isBlockingOn:self fileDescriptor
!
@@ -4995,7 +4464,7 @@
isOpen
"return true, if this stream is open"
- ^ filePointer notNil
+ ^ handle notNil
!
isReadable
@@ -5026,43 +4495,45 @@
unsigned char ch;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- f = __FILEVal(fp);
-
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTE__(ret, f, &ch, _buffered);
-
- if (ret > 0) {
- pos = __INST(position);
- if (__isSmallInteger(pos)) {
- OBJ t;
-
- t = __MKINT(__intVal(pos) + 1); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ ) {
+ f = __FILEVal(fp);
+
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
}
- if (__INST(binary) == true) {
- RETURN ( __mkSmallInteger(ch) );
+ __READBYTE__(ret, f, &ch, _buffered);
+
+ if (ret > 0) {
+ pos = __INST(position);
+ if (__isSmallInteger(pos)) {
+ OBJ t;
+
+ t = __MKINT(__intVal(pos) + 1); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ if (__INST(binary) == true) {
+ RETURN ( __mkSmallInteger(ch) );
+ }
+ RETURN ( __MKCHARACTER(ch) );
}
- RETURN ( __MKCHARACTER(ch) );
- }
-
- __INST(position) = nil;
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
+
+ __INST(position) = nil;
+ if (ret < 0) {
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ } else /* ret == 0 */ {
+ __INST(hitEOF) = true;
+ }
}
}
%}.
hitEOF == true ifTrue:[^ self pastEndRead].
lastErrorNumber notNil ifTrue:[^ self readError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
readAhead notNil ifTrue:[
@@ -5070,7 +4541,7 @@
readAhead := nil.
^ c.
].
- c := self nextByteFromFile:filePointer.
+ c := self nextByteFromFile:handle.
c isNil ifTrue:[
^ self pastEndRead.
].
@@ -5118,43 +4589,45 @@
unsigned char ch;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- f = __FILEVal(fp);
-
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTE__(ret, f, &ch, _buffered);
-
- if (ret > 0) {
- pos = __INST(position);
- if (__isSmallInteger(pos)) {
- OBJ t;
-
- t = __MKINT(__intVal(pos) + 1); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ ) {
+ f = __FILEVal(fp);
+
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
}
- if (__INST(binary) == true) {
- RETURN ( __mkSmallInteger(ch) );
+ __READBYTE__(ret, f, &ch, _buffered);
+
+ if (ret > 0) {
+ pos = __INST(position);
+ if (__isSmallInteger(pos)) {
+ OBJ t;
+
+ t = __MKINT(__intVal(pos) + 1); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ if (__INST(binary) == true) {
+ RETURN ( __mkSmallInteger(ch) );
+ }
+ RETURN ( __MKCHARACTER(ch) );
}
- RETURN ( __MKCHARACTER(ch) );
- }
-
- __INST(position) = nil;
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
+
+ __INST(position) = nil;
+ if (ret < 0) {
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ } else /* ret == 0 */ {
+ __INST(hitEOF) = true;
+ }
}
}
%}.
hitEOF == true ifTrue:[^ nil].
lastErrorNumber notNil ifTrue:[^ self readError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
readAhead notNil ifTrue:[
@@ -5162,7 +4635,7 @@
readAhead := nil.
^ c.
].
- c := self nextByteFromFile:filePointer.
+ c := self nextByteFromFile:handle.
c isNil ifTrue:[
^ nil.
].
@@ -5195,34 +4668,36 @@
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- f = __FILEVal(fp);
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTE__(ret, f, &c, _buffered);
-
- if (ret > 0) {
- __UNGETC__(c, f, _buffered);
-
- if (__INST(binary) == true) {
- RETURN ( __mkSmallInteger(c) );
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ ) {
+ f = __FILEVal(fp);
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
}
- RETURN ( __MKCHARACTER(c) );
- }
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
+ __READBYTE__(ret, f, &c, _buffered);
+
+ if (ret > 0) {
+ __UNGETC__(c, f, _buffered);
+
+ if (__INST(binary) == true) {
+ RETURN ( __mkSmallInteger(c) );
+ }
+ RETURN ( __MKCHARACTER(c) );
+ }
+ if (ret < 0) {
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ } else /* ret == 0 */ {
+ __INST(hitEOF) = true;
+ }
}
}
%}.
hitEOF == true ifTrue:[^ self pastEndRead].
lastErrorNumber notNil ifTrue:[^ self readError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
readAhead isNil ifTrue:[
@@ -5257,34 +4732,36 @@
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- f = __FILEVal(fp);
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTE__(ret, f, &c, _buffered);
-
- if (ret > 0) {
- __UNGETC__(c, f, _buffered);
-
- if (__INST(binary) == true) {
- RETURN ( __mkSmallInteger(c) );
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ ) {
+ f = __FILEVal(fp);
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
}
- RETURN ( __MKCHARACTER(c) );
- }
- if (ret < 0) {
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- } else /* ret == 0 */ {
- __INST(hitEOF) = true;
+ __READBYTE__(ret, f, &c, _buffered);
+
+ if (ret > 0) {
+ __UNGETC__(c, f, _buffered);
+
+ if (__INST(binary) == true) {
+ RETURN ( __mkSmallInteger(c) );
+ }
+ RETURN ( __MKCHARACTER(c) );
+ }
+ if (ret < 0) {
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ } else /* ret == 0 */ {
+ __INST(hitEOF) = true;
+ }
}
}
%}.
hitEOF == true ifTrue:[^ nil].
lastErrorNumber notNil ifTrue:[^ self readError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
(mode == #writeonly) ifTrue:[^ self errorWriteOnly].
readAhead isNil ifTrue:[
@@ -5324,19 +4801,19 @@
!ExternalStream methodsFor:'rel5 protocol'!
-atEndFile:filePointer
+atEndFile:handle
"for migration to rel5 only"
self primitiveFailed
!
-nextByteFromFile:filePointer
+nextByteFromFile:handle
"for migration to rel5 only"
self primitiveFailed
!
-nextPutByte:aByte toFile:filePointer
+nextPutByte:aByte toFile:handle
"for migration to rel5 only"
self primitiveFailed
@@ -5371,69 +4848,71 @@
__INST(lastErrorNumber) = nil;
- if ((fp = __INST(filePointer)) != nil) {
- f = __FILEVal(fp);
- if (_buffered = (__INST(buffered) == true)) {
- __READING__(f);
- } else {
- if (__INST(readAhead) != nil) {
- RETURN (false);
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if ((fp = __INST(handle)) != nil) {
+ f = __FILEVal(fp);
+ if (_buffered = (__INST(buffered) == true)) {
+ __READING__(f);
+ } else {
+ if (__INST(readAhead) != nil) {
+ RETURN (false);
+ }
}
- }
-
- /*
- * read ahead ...
- */
- do {
+
+ /*
+ * read ahead ...
+ */
+ do {
#ifdef WIN32
# if 1
- __READBYTE__(ret, f, &c, _buffered);
+ __READBYTE__(ret, f, &c, _buffered);
# else
- __BEGIN_INTERRUPTABLE__
- __READBYTE__(ret, f, &c, _buffered);
- __END_INTERRUPTABLE__
+ __BEGIN_INTERRUPTABLE__
+ __READBYTE__(ret, f, &c, _buffered);
+ __END_INTERRUPTABLE__
# endif
#else /* not WIN32 */
- __BEGIN_INTERRUPTABLE__
- __READBYTE__(ret, f, &c, _buffered);
- __END_INTERRUPTABLE__
+ __BEGIN_INTERRUPTABLE__
+ __READBYTE__(ret, f, &c, _buffered);
+ __END_INTERRUPTABLE__
#endif
- } while ((ret < 0) && (__threadErrno == EINTR));
+ } while ((ret < 0) && (__threadErrno == EINTR));
#if defined(WIN32) && defined(EPIPE)
- if (ret < 0) {
- if (__threadErrno == EPIPE) {
- ret = 0;
- __threadErrno = 0;
+ if (ret < 0) {
+ if (__threadErrno == EPIPE) {
+ ret = 0;
+ __threadErrno = 0;
+ }
+ if (__threadErrno == 0) {
+ ret = 0; /* how comes ? */
+ }
}
- if (__threadErrno == 0) {
- ret = 0; /* how comes ? */
- }
- }
#endif
- if (ret > 0) {
- __UNGETC__(c&0xff, f, _buffered);
- RETURN (false);
+ if (ret > 0) {
+ __UNGETC__(c&0xff, f, _buffered);
+ RETURN (false);
+ }
+
+ if (ret == 0) {
+ __INST(hitEOF) = true;
+ RETURN (true);
+ }
+
+ /* ret < 0 */
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
-
- if (ret == 0) {
- __INST(hitEOF) = true;
- RETURN (true);
- }
-
- /* ret < 0 */
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
%}.
lastErrorNumber notNil ifTrue:[^ self readError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
mode == #writeonly ifTrue:[^ self errorWriteOnly].
readAhead notNil ifTrue:[^ false].
"/ migration support
^ self
- atEndFile:filePointer
+ atEndFile:handle
"Modified: / 30.10.1998 / 20:16:06 / cg"
!
@@ -5445,7 +4924,7 @@
|fd|
readAhead notNil ifTrue:[^ true].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
mode == #writeonly ifTrue:[^ self errorWriteOnly].
fd := self fileDescriptor.
@@ -5472,7 +4951,7 @@
|fd|
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
mode == #readonly ifTrue:[^ self errorReadOnly].
fd := self fileDescriptor.
@@ -5497,24 +4976,26 @@
OBJ fp;
unsigned char ch;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(writeonly))
- ) {
- f = __FILEVal(fp);
-
- _buffered = (__INST(buffered) == true);
- if (_buffered) {
- __READING__(f)
- }
- __READBYTE__(ret, f, &ch, _buffered);
-
- if (ret > 0) {
- RETURN(nil)
- }
- if (ret < 0) {
- RETURN(__mkSmallInteger(__threadErrno));
- } else /* ret == 0 */ {
- RETURN(__mkSmallInteger(0)); /* EOF */
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(writeonly))
+ ) {
+ f = __FILEVal(fp);
+
+ _buffered = (__INST(buffered) == true);
+ if (_buffered) {
+ __READING__(f)
+ }
+ __READBYTE__(ret, f, &ch, _buffered);
+
+ if (ret > 0) {
+ RETURN(nil)
+ }
+ if (ret < 0) {
+ RETURN(__mkSmallInteger(__threadErrno));
+ } else /* ret == 0 */ {
+ RETURN(__mkSmallInteger(0)); /* EOF */
+ }
}
}
%}.
@@ -5525,7 +5006,7 @@
|fd|
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
mode == #writeonly ifTrue:[^ self errorWriteOnly].
fd := self fileDescriptor.
@@ -5549,35 +5030,6 @@
^ OperatingSystem supportsSelect
!
-readWait
- "suspend the current process, until the receiver
- becomes ready for reading. If data is already available,
- return immediate.
- The other threads are not affected by the wait."
-
- self readWaitWithTimeoutMs:nil
-!
-
-readWaitTimeoutMs:timeout
- "ST-80 compatibility"
- ^ self readWaitWithTimeoutMs:timeout
-!
-
-readWaitWithTimeout:timeout
- "suspend the current process, until the receiver
- becomes ready for reading or a timeout (in seconds) expired.
- If data is already available, return immediate.
- Return true if a timeout occured (i.e. false, if data is available).
- The other threads are not affected by the wait."
-
- |ms|
-
- timeout notNil ifTrue:[
- ms := timeout * 1000
- ].
- ^ self readWaitWithTimeoutMs:ms
-!
-
readWaitWithTimeoutMs:timeout
"suspend the current process, until the receiver
becomes ready for reading or a timeout (in milliseconds) expired.
@@ -5589,7 +5041,7 @@
readAhead notNil ifTrue:[^ false].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
mode == #writeonly ifTrue:[^ self errorWriteOnly].
fd := self fileDescriptor.
@@ -5617,15 +5069,6 @@
^ hasData not
!
-readWriteWait
- "suspend the current process, until the receiver
- becomes ready for writing or reading.
- Return immediate if the receiver is already ready.
- The other threads are not affected by the wait."
-
- self readWriteWaitWithTimeoutMs:nil
-!
-
readWriteWaitWithTimeoutMs:timeout
"suspend the current process, until the receiver
becomes ready for reading or writing or a timeout (in milliseconds) expired.
@@ -5635,7 +5078,7 @@
|fd sema canReadWrite wasBlocked|
- filePointer isNil ifTrue:[
+ handle isNil ifTrue:[
^ self errorNotOpen
].
@@ -5665,35 +5108,6 @@
^ canReadWrite not
!
-writeWait
- "suspend the current process, until the receiver
- becomes ready for writing.
- Return immediate if the receiver is already ready.
- The other threads are not affected by the wait."
-
- self writeWaitWithTimeoutMs:nil
-!
-
-writeWaitTimeoutMs:timeout
- "ST-80 compatibility"
- ^ self writeWaitWithTimeoutMs:timeout
-!
-
-writeWaitWithTimeout:timeout
- "suspend the current process, until the receiver
- becomes ready for writing or a timeout (in seconds) expired.
- Return true if a timeout occured (i.e. false, if data is available).
- Return immediate if the receiver is already ready.
- The other threads are not affected by the wait."
-
- |ms|
-
- timeout notNil ifTrue:[
- ms := timeout * 1000
- ].
- ^ self writeWaitWithTimeoutMs:ms
-!
-
writeWaitWithTimeoutMs:timeout
"suspend the current process, until the receiver
becomes ready for writing or a timeout (in milliseconds) expired.
@@ -5703,7 +5117,7 @@
|fd outputSema canWrite wasBlocked|
- filePointer isNil ifTrue:[
+ handle isNil ifTrue:[
^ self errorNotOpen
].
mode == #readonly ifTrue:[
@@ -5747,51 +5161,53 @@
OBJ fp;
char *cp;
- __INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))
- && (__INST(binary) != true)
- ) {
- f = __FILEVal(fp);
-
- if (_buffered = (__INST(buffered) == true)) {
- __WRITING__(f)
- }
- {
- OBJ mode = __INST(eolMode);
-
- if (mode == @symbol(cr)) {
- cp = "\r"; len = 1;
- } else if (mode == @symbol(crlf)) {
- cp = "\r\n"; len = 2;
- } else {
- cp = "\n"; len = 1;
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ __INST(lastErrorNumber) = nil;
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))
+ && (__INST(binary) != true)
+ ) {
+ f = __FILEVal(fp);
+
+ if (_buffered = (__INST(buffered) == true)) {
+ __WRITING__(f)
}
+ {
+ OBJ mode = __INST(eolMode);
+
+ if (mode == @symbol(cr)) {
+ cp = "\r"; len = 1;
+ } else if (mode == @symbol(crlf)) {
+ cp = "\r\n"; len = 2;
+ } else {
+ cp = "\n"; len = 1;
+ }
+ }
+#ifdef WIN32
+ if ((f == __win32_stdout()) || (f == __win32_stderr())) {
+ cnt = __win32_fwrite(cp, 1, len, f);
+ } else
+#endif
+ {
+ __WRITEBYTES__(cnt, f, cp, len, _buffered);
+ }
+ if (cnt == len) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + len;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e: dont know */
+ }
+ RETURN ( self );
+ }
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
-#ifdef WIN32
- if ((f == __win32_stdout()) || (f == __win32_stderr())) {
- cnt = __win32_fwrite(cp, 1, len, f);
- } else
-#endif
- {
- __WRITEBYTES__(cnt, f, cp, len, _buffered);
- }
- if (cnt == len) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + len;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e: dont know */
- }
- RETURN ( self );
- }
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
%}.
lastErrorNumber notNil ifTrue:[self writeError. ^ self].
- filePointer isNil ifTrue:[self errorNotOpen. ^ self].
+ handle isNil ifTrue:[self errorNotOpen. ^ self].
(mode == #readonly) ifTrue:[self errorReadOnly. ^ self].
(binary==true) ifTrue:[self errorBinary. ^ self].
@@ -5809,29 +5225,31 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if ((fp = __INST(filePointer)) != nil) {
- if (__INST(mode) != @symbol(readonly)) {
- if (__INST(buffered) == true) {
- FILEPOINTER f = __FILEVal(fp);
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if ((fp = __INST(handle)) != nil) {
+ if (__INST(mode) != @symbol(readonly)) {
+ if (__INST(buffered) == true) {
+ FILEPOINTER f = __FILEVal(fp);
#ifdef WIN32
- if ((f == __win32_stdout()) || (f == __win32_stderr())) {
- __win32_fflush(f);
- } else
+ if ((f == __win32_stdout()) || (f == __win32_stderr())) {
+ __win32_fflush(f);
+ } else
#endif
- {
+ {
#ifdef WIN32
# if 1
- FFLUSH(f);
+ FFLUSH(f);
# else
- __BEGIN_INTERRUPTABLE__
- FFLUSH(f);
- __END_INTERRUPTABLE__
+ __BEGIN_INTERRUPTABLE__
+ FFLUSH(f);
+ __END_INTERRUPTABLE__
# endif
#else
- __BEGIN_INTERRUPTABLE__
- FFLUSH(f);
- __END_INTERRUPTABLE__
+ __BEGIN_INTERRUPTABLE__
+ FFLUSH(f);
+ __END_INTERRUPTABLE__
#endif
+ }
}
}
}
@@ -5851,56 +5269,58 @@
OBJ fp;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))
- ) {
- if (__INST(binary) != true) {
- if (__isCharacter(aCharacter)) {
- codePoint = __intVal(__characterVal(aCharacter));
- if (codePoint <= 0xFF) {
- c = codePoint;
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))
+ ) {
+ if (__INST(binary) != true) {
+ if (__isCharacter(aCharacter)) {
+ codePoint = __intVal(__characterVal(aCharacter));
+ if (codePoint <= 0xFF) {
+ c = codePoint;
doWrite:
- f = __FILEVal(fp);
- if (! f) {
- fprintf(stderr, "oops - fileHandle is NULL in nextPut:\n");
- __INST(filePointer) = nil;
- goto out;
- }
-
- if (_buffered = (__INST(buffered) == true)) {
- __WRITING__(f)
- }
+ f = __FILEVal(fp);
+ if (! f) {
+ fprintf(stderr, "oops - fileHandle is NULL in nextPut:\n");
+ __INST(handle) = nil;
+ goto out;
+ }
+
+ if (_buffered = (__INST(buffered) == true)) {
+ __WRITING__(f)
+ }
#ifdef WIN32
- if ((f == __win32_stdout()) || (f == __win32_stderr())) {
- cnt = __win32_fwrite(&c, 1, 1, f);
- } else
+ if ((f == __win32_stdout()) || (f == __win32_stderr())) {
+ cnt = __win32_fwrite(&c, 1, 1, f);
+ } else
#endif
- __WRITEBYTE__(cnt, f, &c, _buffered);
- if (cnt == 1) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + 1;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
+ __WRITEBYTE__(cnt, f, &c, _buffered);
+ if (cnt == 1) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + 1;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN ( self );
}
- RETURN ( self );
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
- }
- } else {
- if (__isSmallInteger(aCharacter)) {
- c = __intVal(aCharacter);
- goto doWrite;
+ } else {
+ if (__isSmallInteger(aCharacter)) {
+ c = __intVal(aCharacter);
+ goto doWrite;
+ }
}
}
}
out: ;
%}.
lastErrorNumber notNil ifTrue:[self writeError. ^ self].
- filePointer isNil ifTrue:[self errorNotOpen. ^ self].
+ handle isNil ifTrue:[self errorNotOpen. ^ self].
(mode == #readonly) ifTrue:[self errorReadOnly. ^ self].
binary == true ifFalse:[
(aCharacter isCharacter not
@@ -5917,7 +5337,7 @@
"/ migration support
self
nextPutByte:aCharacter asInteger
- toFile:filePointer
+ toFile:handle
!
nextPutAll:aCollection
@@ -5934,73 +5354,75 @@
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))
- ) {
- f = __FILEVal(fp);
- if (! f) {
- fprintf(stderr, "oops - fileHandle is NULL in nextPutAll:\n");
- __INST(filePointer) = nil;
- goto out;
- }
- if (_buffered = (__INST(buffered) == true)) {
- __WRITING__(f)
- }
-
- if (__isString(aCollection) || __isSymbol(aCollection)) {
- len = __stringSize(aCollection);
-#ifdef WIN32
- if ((f == __win32_stdout()) || (f == __win32_stderr())) {
- cnt = __win32_fwrite(__stringVal(aCollection), 1, len, f);
- } else
-#endif
- {
- o_offs = (char *)__stringVal(aCollection)-(char *)__InstPtr(aCollection);
- __WRITEBYTES_OBJ__(cnt, f, aCollection, o_offs, len, _buffered);
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))
+ ) {
+ f = __FILEVal(fp);
+ if (! f) {
+ fprintf(stderr, "oops - fileHandle is NULL in nextPutAll:\n");
+ __INST(handle) = nil;
+ goto out;
}
- } else {
- if (__INST(binary) == true) {
- int offs;
-
- if (__isByteArray(aCollection)) {
- offs = 0;
- len = __byteArraySize(aCollection);
- } else if (__isBytes(aCollection)) {
- offs = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(aCollection))->c_ninstvars));
- len = __byteArraySize(aCollection) - offs;
- } else
- goto out;
+ if (_buffered = (__INST(buffered) == true)) {
+ __WRITING__(f)
+ }
+
+ if (__isString(aCollection) || __isSymbol(aCollection)) {
+ len = __stringSize(aCollection);
#ifdef WIN32
if ((f == __win32_stdout()) || (f == __win32_stderr())) {
cnt = __win32_fwrite(__stringVal(aCollection), 1, len, f);
} else
#endif
{
- o_offs = (char *)(__ByteArrayInstPtr(aCollection)->ba_element) - (char *)__InstPtr(aCollection);
- o_offs += offs;
+ o_offs = (char *)__stringVal(aCollection)-(char *)__InstPtr(aCollection);
__WRITEBYTES_OBJ__(cnt, f, aCollection, o_offs, len, _buffered);
}
- } else
- goto out;
+ } else {
+ if (__INST(binary) == true) {
+ int offs;
+
+ if (__isByteArray(aCollection)) {
+ offs = 0;
+ len = __byteArraySize(aCollection);
+ } else if (__isBytes(aCollection)) {
+ offs = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(aCollection))->c_ninstvars));
+ len = __byteArraySize(aCollection) - offs;
+ } else
+ goto out;
+#ifdef WIN32
+ if ((f == __win32_stdout()) || (f == __win32_stderr())) {
+ cnt = __win32_fwrite(__stringVal(aCollection), 1, len, f);
+ } else
+#endif
+ {
+ o_offs = (char *)(__ByteArrayInstPtr(aCollection)->ba_element) - (char *)__InstPtr(aCollection);
+ o_offs += offs;
+ __WRITEBYTES_OBJ__(cnt, f, aCollection, o_offs, len, _buffered);
+ }
+ } else
+ goto out;
+ }
+
+ if (cnt == len) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + len;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN (self);
+ }
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
-
- if (cnt == len) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + len;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
- }
- RETURN (self);
- }
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
out: ;
%}.
lastErrorNumber notNil ifTrue:[self writeError. ^ self].
- filePointer isNil ifTrue:[self errorNotOpen. ^ self].
+ handle isNil ifTrue:[self errorNotOpen. ^ self].
(mode == #readonly) ifTrue:[self errorReadOnly. ^ self].
^ super nextPutAll:aCollection
@@ -6018,80 +5440,82 @@
int o_offs;
__INST(lastErrorNumber) = nil;
- if (((fp = __INST(filePointer)) != nil)
- && (__INST(mode) != @symbol(readonly))
- && __bothSmallInteger(start, stop)
- ) {
- f = __FILEVal(fp);
- if (_buffered = (__INST(buffered) == true)) {
- __WRITING__(f)
- }
- iStart = __intVal(start);
- iStop = __intVal(stop);
- if ((iStart < 1) || (iStop < iStart)) {
- RETURN(self);
- }
- if (__isString(aCollection) || __isSymbol(aCollection)) {
- len = __stringSize(aCollection);
- if (iStop > len) {
+ if ((__INST(handleType) == nil) || (__INST(handleType) == @symbol(filePointer))) {
+ if (((fp = __INST(handle)) != nil)
+ && (__INST(mode) != @symbol(readonly))
+ && __bothSmallInteger(start, stop)
+ ) {
+ f = __FILEVal(fp);
+ if (_buffered = (__INST(buffered) == true)) {
+ __WRITING__(f)
+ }
+ iStart = __intVal(start);
+ iStop = __intVal(stop);
+ if ((iStart < 1) || (iStop < iStart)) {
RETURN(self);
}
- if (iStop > len)
- iStop = len;
- len = iStop - iStart + 1;
-#ifdef WIN32
- if ((f == __win32_stdout()) || (f == __win32_stderr())) {
- cnt = __win32_fwrite(__stringVal(aCollection)+iStart-1, 1, len, f);
- } else
-#endif
- {
- o_offs = (char *)__stringVal(aCollection)-(char *)__InstPtr(aCollection);
- __WRITEBYTES_OBJ__(cnt, f, aCollection, o_offs+iStart-1, len, _buffered);
- }
- } else {
- if (__INST(binary) == true) {
- int offs;
-
- if (__isByteArray(aCollection)) {
- offs = 0;
- len = __byteArraySize(aCollection);
- } else if (__isBytes(aCollection)) {
- offs = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(aCollection))->c_ninstvars));
- len = __byteArraySize(aCollection) - offs;
- } else
- goto out;
-
+ if (__isString(aCollection) || __isSymbol(aCollection)) {
+ len = __stringSize(aCollection);
if (iStop > len) {
RETURN(self);
}
if (iStop > len)
iStop = len;
len = iStop - iStart + 1;
- offs += iStart - 1;
#ifdef WIN32
if ((f == __win32_stdout()) || (f == __win32_stderr())) {
cnt = __win32_fwrite(__stringVal(aCollection)+iStart-1, 1, len, f);
} else
#endif
{
- o_offs = (char *)(__ByteArrayInstPtr(aCollection)->ba_element)-(char *)__InstPtr(aCollection);
- __WRITEBYTES_OBJ__(cnt, f, aCollection, o_offs+offs, len, _buffered);
+ o_offs = (char *)__stringVal(aCollection)-(char *)__InstPtr(aCollection);
+ __WRITEBYTES_OBJ__(cnt, f, aCollection, o_offs+iStart-1, len, _buffered);
}
- } else
- goto out;
+ } else {
+ if (__INST(binary) == true) {
+ int offs;
+
+ if (__isByteArray(aCollection)) {
+ offs = 0;
+ len = __byteArraySize(aCollection);
+ } else if (__isBytes(aCollection)) {
+ offs = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(aCollection))->c_ninstvars));
+ len = __byteArraySize(aCollection) - offs;
+ } else
+ goto out;
+
+ if (iStop > len) {
+ RETURN(self);
+ }
+ if (iStop > len)
+ iStop = len;
+ len = iStop - iStart + 1;
+ offs += iStart - 1;
+#ifdef WIN32
+ if ((f == __win32_stdout()) || (f == __win32_stderr())) {
+ cnt = __win32_fwrite(__stringVal(aCollection)+iStart-1, 1, len, f);
+ } else
+#endif
+ {
+ o_offs = (char *)(__ByteArrayInstPtr(aCollection)->ba_element)-(char *)__InstPtr(aCollection);
+ __WRITEBYTES_OBJ__(cnt, f, aCollection, o_offs+offs, len, _buffered);
+ }
+ } else
+ goto out;
+ }
+ if (cnt == len) {
+ if (__isSmallInteger(__INST(position))) {
+ INT np = __intVal(__INST(position)) + len;
+ OBJ t;
+
+ t = __MKINT(np); __INST(position) = t; __STORE(self, t);
+ } else {
+ __INST(position) = nil; /* i.e. do not know */
+ }
+ RETURN (self);
+ }
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
- if (cnt == len) {
- if (__isSmallInteger(__INST(position))) {
- INT np = __intVal(__INST(position)) + len;
- OBJ t;
-
- t = __MKINT(np); __INST(position) = t; __STORE(self, t);
- } else {
- __INST(position) = nil; /* i.e. do not know */
- }
- RETURN (self);
- }
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
}
out: ;
%}.
@@ -6102,7 +5526,12 @@
!ExternalStream class methodsFor:'documentation'!
version
- ^ '$Id: ExternalStream.st 10448 2009-06-14 16:10:51Z vranyj1 $'
+ ^ '$Id: ExternalStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
+!
+
+version_CVS
+ ^ '$Id: ExternalStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
ExternalStream initialize!
+
--- a/FileDirectory.st Mon Oct 26 21:51:17 2009 +0000
+++ b/FileDirectory.st Thu Nov 05 14:41:30 2009 +0000
@@ -18,6 +18,13 @@
category:'Obsolete'
!
+ArrayedCollection subclass:#DirectoryEntry
+ instanceVariableNames:'name creationTime modificationTime dirFlag fileSize'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:FileDirectory
+!
+
!FileDirectory class methodsFor:'documentation'!
copyright
@@ -215,6 +222,22 @@
^ self removeFile:fileName
!
+directoryEntryFor:name
+ |info|
+
+ info := self infoOf:name.
+ ^ DirectoryEntry new
+ name:name
+ creationTime:(info creationTime)
+ modificationTime:(info modificationTime)
+ dirFlag:(info isDirectory)
+ fileSize:(info isDirectory)
+
+ "
+ (FileDirectory directoryNamed:'.') entries
+ "
+!
+
directoryExists:dir
"Squeak/ST80 compatibility"
@@ -231,7 +254,7 @@
!
entries
- ^ self contents
+ ^ self contents collect:[:nm | self directoryEntryFor:nm].
!
fileExists:dir
@@ -727,10 +750,56 @@
^ true
! !
+!FileDirectory::DirectoryEntry methodsFor:'accessing'!
+
+at: index
+ "compatibility interface"
+ "self halt: 'old-style access to DirectoryEntry'"
+ index = 1 ifTrue: [ ^self name ].
+ index = 2 ifTrue: [ ^self creationTime ].
+ index = 3 ifTrue: [ ^self modificationTime ].
+ index = 4 ifTrue:[ ^self isDirectory ].
+ index = 5 ifTrue:[ ^self fileSize ].
+ self error: 'invalid index specified'.
+!
+
+creationTime
+ ^ creationTime
+!
+
+dirFlag
+ ^ dirFlag
+!
+
+fileSize
+ ^ fileSize
+!
+
+modificationTime
+ ^ modificationTime
+!
+
+name
+ ^ name
+!
+
+name:nameArg creationTime:creationTimeArg modificationTime:modificationTimeArg dirFlag:dirFlagArg fileSize:fileSizeArg
+ name := nameArg.
+ creationTime := creationTimeArg.
+ modificationTime := modificationTimeArg.
+ dirFlag := dirFlagArg.
+ fileSize := fileSizeArg.
+! !
+
!FileDirectory class methodsFor:'documentation'!
version
- ^ '$Id: FileDirectory.st 10467 2009-08-19 16:14:36Z vranyj1 $'
+ ^ '$Id: FileDirectory.st 10477 2009-11-05 14:41:30Z vranyj1 $'
+!
+
+version_CVS
+ ^ '$Id: FileDirectory.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
FileDirectory initialize!
+
--- a/FileStream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/FileStream.st Thu Nov 05 14:41:30 2009 +0000
@@ -667,9 +667,9 @@
HFILE f;
off_t currentPosition;
- if (__INST(filePointer) != nil) {
+ if (__INST(handle) != nil) {
do {
- f = __FILEVal(__INST(filePointer));
+ f = __FILEVal(__INST(handle));
#ifdef WIN32
__threadErrno = 0;
if (__INST(buffered) == true) {
@@ -719,7 +719,7 @@
}
%}.
lastErrorNumber notNil ifTrue:[^ self ioError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
^ self primitiveFailed
!
@@ -734,7 +734,7 @@
OBJ fp;
if ((__INST(canPosition) != false) || (newPos == __mkSmallInteger(0))) {
- if ((fp = __INST(filePointer)) != nil) {
+ if ((fp = __INST(handle)) != nil) {
#if defined(_LFS_LARGE_FILE) && !defined(WIN32)
# define FSEEK fseeko
@@ -815,9 +815,9 @@
"/ assume I/O error
^ self ioError
].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
- rslt := self positionFile:filePointer position:newPos.
+ rslt := self positionFile:handle position:newPos.
rslt >= 0 ifTrue:[
position := newPos.
] ifFalse:[
@@ -830,17 +830,17 @@
re-open a previously closed file. This behavior is compatible
with other Smalltalk dialects"
- filePointer isNil ifTrue:[
- "reopen the file"
- mode == #readonly ifTrue: [
- self openForReading
- ] ifFalse:[mode == #writeonly ifTrue: [
- self openForWriting.
- ] ifFalse:[
- self openForReadWrite.
- ]].
+ handle isNil ifTrue:[
+ "reopen the file"
+ mode == #readonly ifTrue: [
+ self openForReading
+ ] ifFalse:[mode == #writeonly ifTrue: [
+ self openForWriting.
+ ] ifFalse:[
+ self openForReadWrite.
+ ]].
] ifFalse:[
- super reset.
+ super reset.
].
!
@@ -851,8 +851,8 @@
HFILE f;
off_t ret;
- if (__INST(filePointer) != nil) {
- f = __FILEVal(__INST(filePointer));
+ if (__INST(handle) != nil) {
+ f = __FILEVal(__INST(handle));
__INST(position) = nil; /* i.e. unknown */
do {
#ifdef WIN32
@@ -882,7 +882,7 @@
}
%}.
lastErrorNumber notNil ifTrue:[^ self ioError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
^ self primitiveFailed
!
@@ -1018,357 +1018,357 @@
if (__isNonNilObject(pathName) && (__isStringLike(openmode) || __isArray(openmode)))
#ifdef __VMS__
if (__qClass(pathName)==String) {
- do {
- /*
- * allow passing additional RMS arguments.
- * stupid: DEC does not seem to offer an interface for passing a char **.
- */
- __threadErrno = 0;
+ do {
+ /*
+ * allow passing additional RMS arguments.
+ * stupid: DEC does not seem to offer an interface for passing a char **.
+ */
+ __threadErrno = 0;
- {
- if (__isArray(attributeSpec)) {
- OBJ *ap = __ArrayInstPtr(attributeSpec)->a_element;
- int numAttrib = 0;
- int i;
+ {
+ if (__isArray(attributeSpec)) {
+ OBJ *ap = __ArrayInstPtr(attributeSpec)->a_element;
+ int numAttrib = 0;
+ int i;
- numAttrib = __arraySize(attributeSpec);
- for (i=0; i<numAttrib;i++) {
- if (! __isString(ap[i])) {
- f = NULL;
- __threadErrno = EINVAL; /* invalid argument */
- goto getOutOfHere;
- }
- }
- switch (numAttrib) {
- case 0:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode));
- __END_INTERRUPTABLE__
- break;
- case 1:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]));
- __END_INTERRUPTABLE__
- break;
- case 2:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]), __stringVal(ap[1]));
- __END_INTERRUPTABLE__
- break;
- case 3:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]));
- __END_INTERRUPTABLE__
- break;
- case 4:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
- __stringVal(ap[3]));
- __END_INTERRUPTABLE__
- break;
- case 5:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
- __stringVal(ap[3]), __stringVal(ap[4]));
- __END_INTERRUPTABLE__
- break;
- case 6:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
- __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]));
- __END_INTERRUPTABLE__
- break;
- case 7:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
- __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
- __stringVal(ap[6]));
- __END_INTERRUPTABLE__
- break;
- case 8:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
- __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
- __stringVal(ap[6]), __stringVal(ap[7]));
- __END_INTERRUPTABLE__
- break;
- case 9:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
- __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
- __stringVal(ap[6]), __stringVal(ap[7]), __stringVal(ap[8]));
- __END_INTERRUPTABLE__
- break;
- case 10:
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
- __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
- __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
- __stringVal(ap[6]), __stringVal(ap[7]), __stringVal(ap[8]),
- __stringVal(ap[9]));
- __END_INTERRUPTABLE__
- break;
- default:
- f = NULL;
- __threadErrno = E2BIG; /* too many args */
- goto getOutOfHere;
- }
- } else if (attributeSpec != nil) {
- f = NULL;
- __threadErrno = EINVAL; /* invalid argument */
- goto getOutOfHere;
- } else {
- /*
- * create file as sequential streamLF by default.
- */
- __BEGIN_INTERRUPTABLE__
- f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode), "rfm=stmlf");
- __END_INTERRUPTABLE__
- }
- }
- } while ((f == NULL) && (__threadErrno == EINTR));
+ numAttrib = __arraySize(attributeSpec);
+ for (i=0; i<numAttrib;i++) {
+ if (! __isString(ap[i])) {
+ f = NULL;
+ __threadErrno = EINVAL; /* invalid argument */
+ goto getOutOfHere;
+ }
+ }
+ switch (numAttrib) {
+ case 0:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode));
+ __END_INTERRUPTABLE__
+ break;
+ case 1:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]));
+ __END_INTERRUPTABLE__
+ break;
+ case 2:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]), __stringVal(ap[1]));
+ __END_INTERRUPTABLE__
+ break;
+ case 3:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]));
+ __END_INTERRUPTABLE__
+ break;
+ case 4:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+ __stringVal(ap[3]));
+ __END_INTERRUPTABLE__
+ break;
+ case 5:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+ __stringVal(ap[3]), __stringVal(ap[4]));
+ __END_INTERRUPTABLE__
+ break;
+ case 6:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+ __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]));
+ __END_INTERRUPTABLE__
+ break;
+ case 7:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+ __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
+ __stringVal(ap[6]));
+ __END_INTERRUPTABLE__
+ break;
+ case 8:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+ __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
+ __stringVal(ap[6]), __stringVal(ap[7]));
+ __END_INTERRUPTABLE__
+ break;
+ case 9:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+ __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
+ __stringVal(ap[6]), __stringVal(ap[7]), __stringVal(ap[8]));
+ __END_INTERRUPTABLE__
+ break;
+ case 10:
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+ __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+ __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
+ __stringVal(ap[6]), __stringVal(ap[7]), __stringVal(ap[8]),
+ __stringVal(ap[9]));
+ __END_INTERRUPTABLE__
+ break;
+ default:
+ f = NULL;
+ __threadErrno = E2BIG; /* too many args */
+ goto getOutOfHere;
+ }
+ } else if (attributeSpec != nil) {
+ f = NULL;
+ __threadErrno = EINVAL; /* invalid argument */
+ goto getOutOfHere;
+ } else {
+ /*
+ * create file as sequential streamLF by default.
+ */
+ __BEGIN_INTERRUPTABLE__
+ f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode), "rfm=stmlf");
+ __END_INTERRUPTABLE__
+ }
+ }
+ } while ((f == NULL) && (__threadErrno == EINTR));
}
#else /* not VMS */
# ifdef WIN32
{
- DWORD share = 0, access = 0, create = 0, attr = 0;
- int numAttrib, i;
- OBJ *ap;
- char * __openmode;
- HANDLE handle;
+ DWORD share = 0, access = 0, create = 0, attr = 0;
+ int numAttrib, i;
+ OBJ *ap;
+ char * __openmode;
+ HANDLE handle;
- if (__isStringLike(openmode)) {
- share = FILE_SHARE_READ|FILE_SHARE_WRITE;
- __openmode = __stringVal(openmode);
- if (strcmp(__openmode, "rb") == 0) {
- access = GENERIC_READ;
- create = OPEN_EXISTING;
- } else if (strcmp(__openmode, "rb+") == 0) {
- access = GENERIC_READ | GENERIC_WRITE;
- create = OPEN_ALWAYS;
- } else if (strcmp(__openmode, "wb") == 0) {
- access = GENERIC_WRITE;
- create = CREATE_ALWAYS;
- } else if (strcmp(__openmode, "wb+") == 0) {
- access = GENERIC_READ | GENERIC_WRITE;
- create = CREATE_ALWAYS;
- } else if (strcmp(__openmode, "ab") == 0) {
- access = FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|
- STANDARD_RIGHTS_WRITE|SYNCHRONIZE;
- create = OPEN_ALWAYS;
- } else if (strcmp(__openmode, "ab+") == 0) {
- access = GENERIC_READ |FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|
- STANDARD_RIGHTS_WRITE|SYNCHRONIZE;
- create = OPEN_ALWAYS;
- } else {
- console_fprintf(stderr, "Win32OS [warning]: unsupported open mode\n");
- }
- } else if (__isArrayLike(openmode)) {
- ap = __ArrayInstPtr(attributeSpec)->a_element;
- numAttrib = __arraySize(attributeSpec);
- __openmode = "rb+";
+ if (__isStringLike(openmode)) {
+ share = FILE_SHARE_READ|FILE_SHARE_WRITE;
+ __openmode = __stringVal(openmode);
+ if (strcmp(__openmode, "rb") == 0) {
+ access = GENERIC_READ;
+ create = OPEN_EXISTING;
+ } else if (strcmp(__openmode, "rb+") == 0) {
+ access = GENERIC_READ | GENERIC_WRITE;
+ create = OPEN_ALWAYS;
+ } else if (strcmp(__openmode, "wb") == 0) {
+ access = GENERIC_WRITE;
+ create = CREATE_ALWAYS;
+ } else if (strcmp(__openmode, "wb+") == 0) {
+ access = GENERIC_READ | GENERIC_WRITE;
+ create = CREATE_ALWAYS;
+ } else if (strcmp(__openmode, "ab") == 0) {
+ access = FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|
+ STANDARD_RIGHTS_WRITE|SYNCHRONIZE;
+ create = OPEN_ALWAYS;
+ } else if (strcmp(__openmode, "ab+") == 0) {
+ access = GENERIC_READ |FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|
+ STANDARD_RIGHTS_WRITE|SYNCHRONIZE;
+ create = OPEN_ALWAYS;
+ } else {
+ console_fprintf(stderr, "Win32OS [warning]: unsupported open mode\n");
+ }
+ } else if (__isArrayLike(openmode)) {
+ ap = __ArrayInstPtr(attributeSpec)->a_element;
+ numAttrib = __arraySize(attributeSpec);
+ __openmode = "rb+";
- for (i=0; i<numAttrib; i++) {
- OBJ attrSym = ap[i];
+ for (i=0; i<numAttrib; i++) {
+ OBJ attrSym = ap[i];
- if (attrSym == @symbol(FILE_SHARE_READ)) {
- share |= FILE_SHARE_READ;
- } else if (attrSym == @symbol(FILE_SHARE_WRITE)) {
- share |= FILE_SHARE_WRITE;
+ if (attrSym == @symbol(FILE_SHARE_READ)) {
+ share |= FILE_SHARE_READ;
+ } else if (attrSym == @symbol(FILE_SHARE_WRITE)) {
+ share |= FILE_SHARE_WRITE;
- } else if (attrSym == @symbol(GENERIC_READ)) {
- access |= GENERIC_READ;
- } else if (attrSym == @symbol(GENERIC_WRITE)) {
- access |= GENERIC_WRITE;
+ } else if (attrSym == @symbol(GENERIC_READ)) {
+ access |= GENERIC_READ;
+ } else if (attrSym == @symbol(GENERIC_WRITE)) {
+ access |= GENERIC_WRITE;
- } else if (attrSym == @symbol(CREATE_NEW)) {
- create |= CREATE_NEW;
- } else if (attrSym == @symbol(CREATE_ALWAYS)) {
- create |= CREATE_ALWAYS;
- } else if (attrSym == @symbol(OPEN_EXISTING)) {
- create |= OPEN_EXISTING;
- } else if (attrSym == @symbol(OPEN_ALWAYS)) {
- create |= OPEN_ALWAYS;
- } else if (attrSym == @symbol(TRUNCATE_EXISTING)) {
- create |= TRUNCATE_EXISTING;
+ } else if (attrSym == @symbol(CREATE_NEW)) {
+ create |= CREATE_NEW;
+ } else if (attrSym == @symbol(CREATE_ALWAYS)) {
+ create |= CREATE_ALWAYS;
+ } else if (attrSym == @symbol(OPEN_EXISTING)) {
+ create |= OPEN_EXISTING;
+ } else if (attrSym == @symbol(OPEN_ALWAYS)) {
+ create |= OPEN_ALWAYS;
+ } else if (attrSym == @symbol(TRUNCATE_EXISTING)) {
+ create |= TRUNCATE_EXISTING;
- } else if (attrSym == @symbol(FILE_ATTRIBUTE_HIDDEN)) {
- attr |= FILE_ATTRIBUTE_HIDDEN;
- } else if (attrSym == @symbol(FILE_ATTRIBUTE_READONLY)) {
- attr |= FILE_ATTRIBUTE_READONLY;
- } else if (attrSym == @symbol(FILE_FLAG_WRITE_THROUGH)) {
- attr |= FILE_FLAG_WRITE_THROUGH;
- } else if (attrSym == @symbol(FILE_FLAG_SEQUENTIAL_SCAN)) {
- attr |= FILE_FLAG_SEQUENTIAL_SCAN;
- } else if (attrSym == @symbol(FILE_FLAG_DELETE_ON_CLOSE)) {
- attr |= FILE_FLAG_DELETE_ON_CLOSE;
- } else {
- console_fprintf(stderr, "Win32OS [warning]: unsupported open mode\n");
- }
- }
- } else {
- f = NULL;
+ } else if (attrSym == @symbol(FILE_ATTRIBUTE_HIDDEN)) {
+ attr |= FILE_ATTRIBUTE_HIDDEN;
+ } else if (attrSym == @symbol(FILE_ATTRIBUTE_READONLY)) {
+ attr |= FILE_ATTRIBUTE_READONLY;
+ } else if (attrSym == @symbol(FILE_FLAG_WRITE_THROUGH)) {
+ attr |= FILE_FLAG_WRITE_THROUGH;
+ } else if (attrSym == @symbol(FILE_FLAG_SEQUENTIAL_SCAN)) {
+ attr |= FILE_FLAG_SEQUENTIAL_SCAN;
+ } else if (attrSym == @symbol(FILE_FLAG_DELETE_ON_CLOSE)) {
+ attr |= FILE_FLAG_DELETE_ON_CLOSE;
+ } else {
+ console_fprintf(stderr, "Win32OS [warning]: unsupported open mode\n");
+ }
+ }
+ } else {
+ f = NULL;
// argumentError = @symbol(badAttributeSpec);
- goto badArgument;
- }
- if (create == 0) {
- f = NULL;
+ goto badArgument;
+ }
+ if (create == 0) {
+ f = NULL;
// argumentError = @symbol(missingCreateMode);
- goto badArgument;
- }
- if (attr == 0) {
- attr = FILE_ATTRIBUTE_NORMAL;
- }
+ goto badArgument;
+ }
+ if (attr == 0) {
+ attr = FILE_ATTRIBUTE_NORMAL;
+ }
- if (__isString(pathName)) {
- char _aPathName[MAXPATHLEN];
+ if (__isString(pathName)) {
+ char _aPathName[MAXPATHLEN];
- strncpy(_aPathName, __stringVal(pathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
- do {
- __threadErrno = 0;
- handle = STX_API_CALL7( "CreateFileA", CreateFileA, _aPathName, access, share, 0 /* sa */, create, attr, 0 /* hTempl */);
- if (__threadErrno == EINTR) {
- handle = INVALID_HANDLE_VALUE;
- }
- } while ((handle == INVALID_HANDLE_VALUE) && (__threadErrno == EINTR));
- } else if (__isUnicode16String(pathName)) {
- wchar_t _aPathName[MAXPATHLEN+1];
- int i, l;
+ strncpy(_aPathName, __stringVal(pathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
+ do {
+ __threadErrno = 0;
+ handle = STX_API_CALL7( "CreateFileA", CreateFileA, _aPathName, access, share, 0 /* sa */, create, attr, 0 /* hTempl */);
+ if (__threadErrno == EINTR) {
+ handle = INVALID_HANDLE_VALUE;
+ }
+ } while ((handle == INVALID_HANDLE_VALUE) && (__threadErrno == EINTR));
+ } else if (__isUnicode16String(pathName)) {
+ wchar_t _aPathName[MAXPATHLEN+1];
+ int i, l;
- l = __unicode16StringSize(pathName);
- if (l > MAXPATHLEN) l = MAXPATHLEN;
- for (i=0; i<l; i++) {
- _aPathName[i] = __unicode16StringVal(pathName)[i];
- }
- _aPathName[i] = 0;
+ l = __unicode16StringSize(pathName);
+ if (l > MAXPATHLEN) l = MAXPATHLEN;
+ for (i=0; i<l; i++) {
+ _aPathName[i] = __unicode16StringVal(pathName)[i];
+ }
+ _aPathName[i] = 0;
- do {
- __threadErrno = 0;
- handle = STX_API_CALL7( "CreateFileW", CreateFileW, _aPathName, access, share, 0 /* sa */, create, attr, 0 /* hTempl */);
- if (__threadErrno == EINTR) {
- handle = INVALID_HANDLE_VALUE;
- }
- } while ((handle == INVALID_HANDLE_VALUE) && (__threadErrno == EINTR));
- }
- if (handle != INVALID_HANDLE_VALUE) {
- extern void __stxWrapApiEnterCritical(), __stxWrapApiLeaveCritical();
- __stxWrapApiEnterCritical();
- f = fdopen(_open_osfhandle((long)handle, O_BINARY), __openmode);
- __stxWrapApiLeaveCritical();
- } else {
- f = NULL;
- }
+ do {
+ __threadErrno = 0;
+ handle = STX_API_CALL7( "CreateFileW", CreateFileW, _aPathName, access, share, 0 /* sa */, create, attr, 0 /* hTempl */);
+ if (__threadErrno == EINTR) {
+ handle = INVALID_HANDLE_VALUE;
+ }
+ } while ((handle == INVALID_HANDLE_VALUE) && (__threadErrno == EINTR));
+ }
+ if (handle != INVALID_HANDLE_VALUE) {
+ extern void __stxWrapApiEnterCritical(), __stxWrapApiLeaveCritical();
+ __stxWrapApiEnterCritical();
+ f = fdopen(_open_osfhandle((long)handle, O_BINARY), __openmode);
+ __stxWrapApiLeaveCritical();
+ } else {
+ f = NULL;
+ }
}
# else /* not WIN32 */
if (__qClass(pathName)==String) {
- do {
- __BEGIN_INTERRUPTABLE__
+ do {
+ __BEGIN_INTERRUPTABLE__
# ifdef LINUX
- /*
- * LINUX may ret a non-NULL f even when interrupted.
- * Therefore, check errno and fake a null-ret.
- */
- __threadErrno = 0;
- f = fopen((char *) __stringVal(pathName), (char *) __stringVal(openmode));
- if (__threadErrno == EINTR)
- f = NULL;
+ /*
+ * LINUX may ret a non-NULL f even when interrupted.
+ * Therefore, check errno and fake a null-ret.
+ */
+ __threadErrno = 0;
+ f = fopen((char *) __stringVal(pathName), (char *) __stringVal(openmode));
+ if (__threadErrno == EINTR)
+ f = NULL;
# else /* not LINUX */
- f = fopen((char *) __stringVal(pathName), (char *) __stringVal(openmode));
+ f = fopen((char *) __stringVal(pathName), (char *) __stringVal(openmode));
# endif /* not LINUX */
- __END_INTERRUPTABLE__
- } while ((f == NULL) && (__threadErrno == EINTR));
+ __END_INTERRUPTABLE__
+ } while ((f == NULL) && (__threadErrno == EINTR));
}
# endif /* not WIN32 */
#endif /* not VMS */
if (f == NULL) {
- /*
- * If no filedescriptors available, try to finalize
- * possibly collected fd's and try again.
- */
- if (pass == 0 && (__threadErrno == ENFILE || __threadErrno == EMFILE)) {
- pass = 1;
- __SSEND0(@global(ObjectMemory), @symbol(scavenge), 0);
- __SSEND0(@global(ObjectMemory), @symbol(finalize), 0);
- goto retry;
- }
+ /*
+ * If no filedescriptors available, try to finalize
+ * possibly collected fd's and try again.
+ */
+ if (pass == 0 && (__threadErrno == ENFILE || __threadErrno == EMFILE)) {
+ pass = 1;
+ __SSEND0(@global(ObjectMemory), @symbol(scavenge), 0);
+ __SSEND0(@global(ObjectMemory), @symbol(finalize), 0);
+ goto retry;
+ }
badArgument:
getOutOfHere:
- __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
- __INST(position) = nil;
+ __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+ __INST(position) = nil;
} else {
#ifdef __VMS__
- /*
- * check to see if this is positionable ...
- */
- __INST(canPosition) = false;
+ /*
+ * check to see if this is positionable ...
+ */
+ __INST(canPosition) = false;
# ifndef _POSIX_C_SOURCE
- {
- struct stat statBuffer;
+ {
+ struct stat statBuffer;
- if (fstat(fileno(f), &statBuffer) >= 0) {
- switch (statBuffer.st_fab_rfm) {
- case FAB$C_UDF: /* undefined (also stream binary) */
- case FAB$C_VAR: /* variable length records */
- case FAB$C_VFC: /* variable fixed control */
- case FAB$C_STM: /* RMS-11 stream (valid only for sequen) */
- default:
- __INST(canPosition) = false;
- break;
+ if (fstat(fileno(f), &statBuffer) >= 0) {
+ switch (statBuffer.st_fab_rfm) {
+ case FAB$C_UDF: /* undefined (also stream binary) */
+ case FAB$C_VAR: /* variable length records */
+ case FAB$C_VFC: /* variable fixed control */
+ case FAB$C_STM: /* RMS-11 stream (valid only for sequen) */
+ default:
+ __INST(canPosition) = false;
+ break;
- case FAB$C_FIX: /* fixed length records */
- case FAB$C_STMLF: /* LF stream (valid only for sequential) */
- case FAB$C_STMCR: /* CR stream (valid only for sequential) */
- __INST(canPosition) = true;
- break;
- }
- }
- }
+ case FAB$C_FIX: /* fixed length records */
+ case FAB$C_STMLF: /* LF stream (valid only for sequential) */
+ case FAB$C_STMCR: /* CR stream (valid only for sequential) */
+ __INST(canPosition) = true;
+ break;
+ }
+ }
+ }
# endif
#else /* not VMS */
- __INST(canPosition) = true;
+ __INST(canPosition) = true;
#endif /* not VMS */
- if (@global(FileOpenTrace) == true) {
- console_fprintf(stderr, "fopen %s [FileStream] -> %x\n", __stringVal(pathName), f);
- }
- if (f != NULL) {
- OBJ fp;
+ if (@global(FileOpenTrace) == true) {
+ console_fprintf(stderr, "fopen %s [FileStream] -> %x\n", __stringVal(pathName), f);
+ }
+ if (f != NULL) {
+ OBJ fp;
- wasBlocked = __BLOCKINTERRUPTS();
+ wasBlocked = __BLOCKINTERRUPTS();
#if 0
- // The original code was:
- __INST(filePointer) = fp = __MKOBJ((INT)f); __STORE(self, fp);
- // but for that, gcc generates wrong code, which loads self (volatile) into
- // a register (bp), then calls __MKOBJ, then stores indirect bp.
- // That is wrong if a scavenge occurs in MKOBJ, as bp is now still pointing to the old
- // object.
+ // The original code was:
+ __INST(handle) = fp = __MKOBJ((INT)f); __STORE(self, fp);
+ // but for that, gcc generates wrong code, which loads self (volatile) into
+ // a register (bp), then calls __MKOBJ, then stores indirect bp.
+ // That is wrong if a scavenge occurs in MKOBJ, as bp is now still pointing to the old
+ // object.
#else
- fp = __MKOBJ((INT)f);
- __INST(filePointer) = fp;
- __STORE(self, fp);
+ fp = __MKOBJ((INT)f);
+ __INST(handle) = fp;
+ __STORE(self, fp);
#endif
- }
+ }
}
%}.
position := ZeroPosition.
- filePointer notNil ifTrue:[
- Lobby register:self.
- wasBlocked == false ifTrue:[OperatingSystem unblockInterrupts].
+ handle notNil ifTrue:[
+ Lobby register:self.
+ wasBlocked == false ifTrue:[OperatingSystem unblockInterrupts].
].
- ^ filePointer
+ ^ handle
!
openForAppending
@@ -1437,10 +1437,10 @@
This is a private entry, but maybe useful to open/create a file in a special mode,
which is proprietrary to the operatingSystem."
- filePointer notNil ifTrue:[^ self errorAlreadyOpen].
+ handle notNil ifTrue:[^ self errorAlreadyOpen].
- filePointer := self openFile:pathName withMode:openmode attributes:attributeSpec.
- filePointer isNil ifTrue:[
+ handle := self openFile:pathName withMode:openmode attributes:attributeSpec.
+ handle isNil ifTrue:[
"
the open failed for some reason ...
"
@@ -1472,9 +1472,9 @@
"USERS WILL NEVER INVOKE THIS METHOD
sent after snapin to reopen streams."
- filePointer notNil ifTrue:[
+ handle notNil ifTrue:[
"it was open, when snapped-out"
- filePointer := nil.
+ handle := nil.
Lobby unregister:self.
pathName isNil ifTrue:[
^ self.
@@ -1570,8 +1570,8 @@
#ifdef transputer
unsigned int size;
- if (__INST(filePointer) != nil) {
- f = __FILEVal(__INST(filePointer));
+ if (__INST(handle) != nil) {
+ f = __FILEVal(__INST(handle));
if ((size = filesize(fileno(f))) >= 0) {
RETURN ( __MKUINT(size) );
}
@@ -1581,8 +1581,8 @@
int ret;
int fd;
- if (__INST(filePointer) != nil) {
- f = __FILEVal(__INST(filePointer));
+ if (__INST(handle) != nil) {
+ f = __FILEVal(__INST(handle));
fd = fileno(f);
do {
ret = fstat(fd, &buf);
@@ -1611,7 +1611,7 @@
^ sz
"
lastErrorNumber notNil ifTrue:[^ self ioError].
- filePointer isNil ifTrue:[^ self errorNotOpen].
+ handle isNil ifTrue:[^ self errorNotOpen].
^ self primitiveFailed
!
@@ -1626,7 +1626,7 @@
!FileStream methodsFor:'rel5 protocol'!
-positionFile:filePointer position:newPos
+positionFile:handle position:newPos
"for migration to rel5 only"
self primitiveFailed
@@ -1644,12 +1644,13 @@
!FileStream class methodsFor:'documentation'!
version
- ^ '$Id: FileStream.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: FileStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.134 2009/10/11 09:38:29 cg Exp §'
+ ^ '$Id: FileStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
FileStream initialize!
+
--- a/Filename.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Filename.st Thu Nov 05 14:41:30 2009 +0000
@@ -13,7 +13,8 @@
Object subclass:#Filename
instanceVariableNames:'nameString'
- classVariableNames:'NextTempFilenameIndex TempDirectory ConcreteClass'
+ classVariableNames:'NextTempFilenameIndex TempDirectory DefaultTempDirectory
+ ConcreteClass'
poolDictionaries:''
category:'System-Support'
!
@@ -302,6 +303,38 @@
"
!
+defaultTempDirectory
+ "return the default temp directory as a filename.
+ That is the same as TempDirectory, except that TempDirectory can be changed
+ from the outside (via tempDirectory:).
+ Use this for files which MUST remain the same (stx_sourceCache)"
+
+ DefaultTempDirectory isNil ifTrue:[
+ self tempDirectory.
+ DefaultTempDirectory isNil ifTrue:[
+ DefaultTempDirectory := TempDirectory
+ ].
+ ].
+
+ DefaultTempDirectory exists ifFalse:[
+ DefaultTempDirectory
+ makeDirectory;
+ addAccessRights:#(readUser readGroup readOthers
+ writeUser writeGroup writeOthers
+ executeUser executeGroup executeOthers
+ removeOnlyByOwner).
+ ].
+ ^ DefaultTempDirectory
+
+ "
+ Filename tempDirectory
+ Filename defaultTempDirectory
+ "
+
+ "Created: / 07-03-1996 / 14:51:18 / cg"
+ "Modified: / 29-08-2006 / 12:57:16 / cg"
+!
+
desktopDirectory
"return your desktop directory.
Under windows, thats the real desktop directory;
@@ -745,7 +778,7 @@
tempDir isNil ifTrue:[
tempDir := self named:(self defaultTempDirectoryName pathName)
].
- TempDirectory := tempDir construct:'stx_tmp'.
+ TempDirectory := DefaultTempDirectory := tempDir construct:'stx_tmp'.
].
"Make sure, that the TempDirectory exists - it might have been removed
@@ -3065,10 +3098,14 @@
"rename the file - the argument must be convertable to a String.
Raises an exception if not successful."
+ |errno|
+
(OperatingSystem
renameFile:(self osNameForFile)
to:(newName asFilename osNameForFile)
) ifFalse:[
+ errno := OperatingSystem lastErrorNumber.
+
self exists ifFalse:[
^ self fileNotFoundError:self
].
@@ -3865,7 +3902,7 @@
"return true, if the receiver represents a hidden file.
The definitions of hidden files depends on the OS used;
on UNIX, a name starting with a period is considered hidden;
- on MSDOS, the files hidden attribute is used.
+ on MSDOS, the files hidden attribute is also used.
VMS has no concept of hidden files."
^ false
@@ -5705,8 +5742,13 @@
!Filename class methodsFor:'documentation'!
version
- ^ '$Id: Filename.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Filename.st 10477 2009-11-05 14:41:30Z vranyj1 $'
+!
+
+version_CVS
+ ^ '$Id: Filename.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Filename initialize!
+
--- a/GenericException.st Mon Oct 26 21:51:17 2009 +0000
+++ b/GenericException.st Thu Nov 05 14:41:30 2009 +0000
@@ -2100,12 +2100,13 @@
!GenericException class methodsFor:'documentation'!
version
- ^ '$Id: GenericException.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: GenericException.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/GenericException.st,v 1.120 2009/10/06 10:15:04 cg Exp §'
+ ^ '$Id: GenericException.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
GenericException initialize!
+
--- a/HashStream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/HashStream.st Thu Nov 05 14:41:30 2009 +0000
@@ -322,10 +322,11 @@
!HashStream class methodsFor:'documentation'!
version
- ^ '$Id: HashStream.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: HashStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/HashStream.st,v 1.11 2009/10/14 12:12:40 stefan Exp §'
+ ^ '$Id: HashStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Infinity.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Infinity.st Thu Nov 05 14:41:30 2009 +0000
@@ -425,12 +425,13 @@
!Infinity class methodsFor:'documentation'!
version
- ^ '$Id: Infinity.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Infinity.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Infinity.st,v 1.13 2009/10/12 19:34:30 cg Exp §'
+ ^ '$Id: Infinity.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Infinity initialize!
+
--- a/Integer.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Integer.st Thu Nov 05 14:41:30 2009 +0000
@@ -4443,12 +4443,13 @@
!Integer class methodsFor:'documentation'!
version
- ^ '$Id: Integer.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Integer.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Integer.st,v 1.233 2009/10/14 21:08:51 cg Exp §'
+ ^ '$Id: Integer.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Integer initialize!
+
--- a/LargeInteger.st Mon Oct 26 21:51:17 2009 +0000
+++ b/LargeInteger.st Thu Nov 05 14:41:30 2009 +0000
@@ -4953,10 +4953,11 @@
!LargeInteger class methodsFor:'documentation'!
version
- ^ '$Id: LargeInteger.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: LargeInteger.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.197 2009/10/04 21:07:18 cg Exp §'
+ ^ '$Id: LargeInteger.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/LibraryDefinition.st Mon Oct 26 21:51:17 2009 +0000
+++ b/LibraryDefinition.st Thu Nov 05 14:41:30 2009 +0000
@@ -117,6 +117,110 @@
"Modified: / 19-09-2006 / 22:41:40 / cg"
! !
+!LibraryDefinition class methodsFor:'file mappings'!
+
+bc_dot_mak_mappings
+ |d resFileName|
+
+ resFileName := (self package copyFrom:(self package lastIndexOfAny:':/')+1),'.res'.
+
+ d := super bc_dot_mak_mappings.
+ d
+ at: 'LIBRARY_NAME' put: ( self libraryName );
+ at: 'COMMONSYMFLAG' put: (self commonSymbolsFlag);
+ at: 'HEADEROUTPUTARG' put: (self headerFileOutputArg);
+ at: 'RESFILENAME' put: resFileName;
+ at: 'DEPENDENCIES' put: (self generateDependencies_win32);
+ yourself.
+ ^ d.
+
+ "Created: / 09-08-2006 / 11:44:36 / fm"
+ "Modified: / 09-08-2006 / 20:00:01 / fm"
+ "Modified: / 14-09-2006 / 18:58:15 / cg"
+!
+
+extensionLine_libInit_dot_cc_mappings
+
+^Dictionary new
+ at: 'LIBRARY_NAME' put: ( self st2c:(self package copy asString replaceAny:':/' with:$_) );
+ yourself
+
+ "Created: / 09-08-2006 / 11:19:59 / fm"
+ "Modified: / 14-09-2006 / 18:56:26 / cg"
+!
+
+libInit_dot_cc_mappings
+
+^Dictionary new
+ at: 'LIBRARY_NAME' put: (self libraryName);
+ at: 'PACKAGE' put: (self package);
+ at: 'CLASSES' put: (self generateClassLines_libInit_dot_cc);
+ at: 'EXTENSION' put: (self generateExtensionLine_libInit_dot_cc);
+
+ yourself
+
+ "Created: / 09-08-2006 / 11:20:24 / fm"
+ "Modified: / 16-08-2006 / 18:19:03 / User"
+ "Modified: / 14-09-2006 / 18:56:42 / cg"
+!
+
+vc_dot_def_mappings
+
+^Dictionary new
+ at: 'LIBRARY_NAME' put: (self libraryName);
+ at: 'DESCRIPTION' put: (self description asString storeString);
+ at: 'VERSION_NUMBER' put: (self versionNumber);
+ yourself
+
+ "Created: / 09-08-2006 / 11:21:21 / fm"
+ "Modified: / 14-09-2006 / 18:58:07 / cg"
+! !
+
+!LibraryDefinition class methodsFor:'file mappings support'!
+
+commonSymbolsFlag
+ "some libraries are compiled with COMMONSYMBOLS -
+ This saves a lot of space in the generated dll/so files;
+ However, it also requires the librun to be rebuilt, whenever one of
+ the commonSymbols-libs changes.
+ Therefore, NEVER do this for end-user or application libraries;
+ ONLY do it for a subset of the predefined, eXept-provided standard stx libraries"
+
+ (
+ #(
+ 'stx:libbasic' 'stx:libview' 'stx:libtool'
+ 'stx:libbasic2' 'stx:libview2' 'stx:libtool2'
+ 'stx:libbasic3' 'stx:libwidg' 'stx:libhtml'
+ 'stx:libcomp' 'stx:libwidg2' 'stx:libui'
+ 'stx:libboss' 'stx:libdb'
+ )
+ includes:self package) ifTrue:[
+ ^ '$(COMMONSYMBOLS)'
+ ].
+ ^ ''
+
+ "Created: / 18-08-2006 / 13:01:52 / cg"
+ "Modified: / 23-08-2006 / 09:48:11 / cg"
+!
+
+generateExtensionLine_libInit_dot_cc
+ |mappings|
+
+ ^self hasExtensionMethods
+ ifFalse:['']
+ ifTrue:[
+ mappings := self extensionLine_libInit_dot_cc_mappings.
+ self replaceMappings: mappings in: self extensionLine_libInit_dot_cc.]
+
+ "
+ DapasXProject generateExtensionLine_libInit_dot_cc
+ DapasX_Datenbasis generateExtensionLine_libInit_dot_cc
+ "
+
+ "Created: / 09-08-2006 / 11:23:34 / fm"
+ "Modified: / 14-09-2006 / 14:19:59 / cg"
+! !
+
!LibraryDefinition class methodsFor:'file templates'!
bc_dot_def
@@ -394,110 +498,6 @@
"Modified: / 08-08-2006 / 19:33:14 / fm"
! !
-!LibraryDefinition class methodsFor:'mappings'!
-
-bc_dot_mak_mappings
- |d resFileName|
-
- resFileName := (self package copyFrom:(self package lastIndexOfAny:':/')+1),'.res'.
-
- d := super bc_dot_mak_mappings.
- d
- at: 'LIBRARY_NAME' put: ( self libraryName );
- at: 'COMMONSYMFLAG' put: (self commonSymbolsFlag);
- at: 'HEADEROUTPUTARG' put: (self headerFileOutputArg);
- at: 'RESFILENAME' put: resFileName;
- at: 'DEPENDENCIES' put: (self generateDependencies_win32);
- yourself.
- ^ d.
-
- "Created: / 09-08-2006 / 11:44:36 / fm"
- "Modified: / 09-08-2006 / 20:00:01 / fm"
- "Modified: / 14-09-2006 / 18:58:15 / cg"
-!
-
-extensionLine_libInit_dot_cc_mappings
-
-^Dictionary new
- at: 'LIBRARY_NAME' put: ( self st2c:(self package copy asString replaceAny:':/' with:$_) );
- yourself
-
- "Created: / 09-08-2006 / 11:19:59 / fm"
- "Modified: / 14-09-2006 / 18:56:26 / cg"
-!
-
-libInit_dot_cc_mappings
-
-^Dictionary new
- at: 'LIBRARY_NAME' put: (self libraryName);
- at: 'PACKAGE' put: (self package);
- at: 'CLASSES' put: (self generateClassLines_libInit_dot_cc);
- at: 'EXTENSION' put: (self generateExtensionLine_libInit_dot_cc);
-
- yourself
-
- "Created: / 09-08-2006 / 11:20:24 / fm"
- "Modified: / 16-08-2006 / 18:19:03 / User"
- "Modified: / 14-09-2006 / 18:56:42 / cg"
-!
-
-vc_dot_def_mappings
-
-^Dictionary new
- at: 'LIBRARY_NAME' put: (self libraryName);
- at: 'DESCRIPTION' put: (self description asString storeString);
- at: 'VERSION_NUMBER' put: (self versionNumber);
- yourself
-
- "Created: / 09-08-2006 / 11:21:21 / fm"
- "Modified: / 14-09-2006 / 18:58:07 / cg"
-! !
-
-!LibraryDefinition class methodsFor:'mappings support'!
-
-commonSymbolsFlag
- "some libraries are compiled with COMMONSYMBOLS -
- This saves a lot of space in the generated dll/so files;
- However, it also requires the librun to be rebuilt, whenever one of
- the commonSymbols-libs changes.
- Therefore, NEVER do this for end-user or application libraries;
- ONLY do it for a subset of the predefined, eXept-provided standard stx libraries"
-
- (
- #(
- 'stx:libbasic' 'stx:libview' 'stx:libtool'
- 'stx:libbasic2' 'stx:libview2' 'stx:libtool2'
- 'stx:libbasic3' 'stx:libwidg' 'stx:libhtml'
- 'stx:libcomp' 'stx:libwidg2' 'stx:libui'
- 'stx:libboss' 'stx:libdb'
- )
- includes:self package) ifTrue:[
- ^ '$(COMMONSYMBOLS)'
- ].
- ^ ''
-
- "Created: / 18-08-2006 / 13:01:52 / cg"
- "Modified: / 23-08-2006 / 09:48:11 / cg"
-!
-
-generateExtensionLine_libInit_dot_cc
- |mappings|
-
- ^self hasExtensionMethods
- ifFalse:['']
- ifTrue:[
- mappings := self extensionLine_libInit_dot_cc_mappings.
- self replaceMappings: mappings in: self extensionLine_libInit_dot_cc.]
-
- "
- DapasXProject generateExtensionLine_libInit_dot_cc
- DapasX_Datenbasis generateExtensionLine_libInit_dot_cc
- "
-
- "Created: / 09-08-2006 / 11:23:34 / fm"
- "Modified: / 14-09-2006 / 14:19:59 / cg"
-! !
-
!LibraryDefinition class methodsFor:'misc ui support'!
iconInBrowserSymbol
@@ -570,15 +570,19 @@
canHaveExtensions
"return true, if this class allows extensions from other packages.
- Private classes, namespaces and projectDefinitions dont allow this"
+ Private classes, namespaces and projectDefinitions don't allow this"
- ^ self == ApplicationDefinition
+ ^ self == LibraryDefinition
"
Smalltalk allClasses select:[:each | each canHaveExtensions not]
"
"Created: / 30-08-2006 / 15:29:53 / cg"
+!
+
+projectType
+ ^ LibraryType
! !
!LibraryDefinition class methodsFor:'sanity checks'!
@@ -613,6 +617,10 @@
!LibraryDefinition class methodsFor:'testing'!
+isAbstract
+ ^ self == LibraryDefinition
+!
+
isLibraryDefinition
^ self ~~ LibraryDefinition
@@ -640,10 +648,11 @@
!LibraryDefinition class methodsFor:'documentation'!
version
- ^ '$Id: LibraryDefinition.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: LibraryDefinition.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.93 2009/10/12 17:26:27 cg Exp §'
+ ^ '$Id: LibraryDefinition.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/LimitedPrecisionReal.st Mon Oct 26 21:51:17 2009 +0000
+++ b/LimitedPrecisionReal.st Thu Nov 05 14:41:30 2009 +0000
@@ -1174,12 +1174,13 @@
!LimitedPrecisionReal class methodsFor:'documentation'!
version
- ^ '$Id: LimitedPrecisionReal.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: LimitedPrecisionReal.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/LimitedPrecisionReal.st,v 1.70 2009/10/04 20:08:00 cg Exp §'
+ ^ '$Id: LimitedPrecisionReal.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
LimitedPrecisionReal initialize!
+
--- a/MD5Stream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/MD5Stream.st Thu Nov 05 14:41:30 2009 +0000
@@ -446,12 +446,13 @@
!MD5Stream class methodsFor:'documentation'!
version
- ^ '$Id: MD5Stream.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: MD5Stream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/MD5Stream.st,v 1.10 2009/10/14 05:17:40 cg Exp §'
+ ^ '$Id: MD5Stream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
MD5Stream initialize!
+
--- a/Make.proto Mon Oct 26 21:51:17 2009 +0000
+++ b/Make.proto Thu Nov 05 14:41:30 2009 +0000
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic/Make.proto,v 1.220 2009/10/12 19:32:42 cg Exp $
+# $Header: /cvs/stx/stx/libbasic/Make.proto,v 1.222 2009/10/30 14:39:39 cg Exp $
#
# DO NOT EDIT
# automagically generated from the projectDefinition: stx_libbasic.
@@ -99,7 +99,6 @@
$(OUTDIR)Autoload.$(O) Autoload.$(H): Autoload.st $(STCHDR)
$(OUTDIR)Object.$(O) Object.$(H): Object.st $(STCHDR)
$(OUTDIR)ProtoObject.$(O) ProtoObject.$(H): ProtoObject.st $(STCHDR)
-$(OUTDIR)AbstractDesktop.$(O) AbstractDesktop.$(H): AbstractDesktop.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)AbstractOperatingSystem.$(O) AbstractOperatingSystem.$(H): AbstractOperatingSystem.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)AbstractSourceFileReader.$(O) AbstractSourceFileReader.$(H): AbstractSourceFileReader.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Behavior.$(O) Behavior.$(H): Behavior.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -107,8 +106,6 @@
$(OUTDIR)CharacterEncoder.$(O) CharacterEncoder.$(H): CharacterEncoder.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)ClassBuilder.$(O) ClassBuilder.$(H): ClassBuilder.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)ClassCategoryReader.$(O) ClassCategoryReader.$(H): ClassCategoryReader.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)CmdLineOption.$(O) CmdLineOption.$(H): CmdLineOption.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)CmdLineParser.$(O) CmdLineParser.$(H): CmdLineParser.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Collection.$(O) Collection.$(H): Collection.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Context.$(O) Context.$(H): Context.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Continuation.$(O) Continuation.$(H): Continuation.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -181,15 +178,10 @@
$(OUTDIR)SequenceableCollection.$(O) SequenceableCollection.$(H): SequenceableCollection.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Set.$(O) Set.$(H): Set.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)SmalltalkChunkFileSourceReader.$(O) SmalltalkChunkFileSourceReader.$(H): SmalltalkChunkFileSourceReader.st $(INCLUDE_TOP)/stx/libbasic/AbstractSourceFileReader.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)SmalltalkDesktop.$(O) SmalltalkDesktop.$(H): SmalltalkDesktop.st $(INCLUDE_TOP)/stx/libbasic/AbstractDesktop.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)SmalltalkLanguage.$(O) SmalltalkLanguage.$(H): SmalltalkLanguage.st $(INCLUDE_TOP)/stx/libbasic/ProgrammingLanguage.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)True.$(O) True.$(H): True.st $(INCLUDE_TOP)/stx/libbasic/Boolean.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)UnixDesktop.$(O) UnixDesktop.$(H): UnixDesktop.st $(INCLUDE_TOP)/stx/libbasic/AbstractDesktop.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)UnixFilename.$(O) UnixFilename.$(H): UnixFilename.st $(INCLUDE_TOP)/stx/libbasic/Filename.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)UserNotification.$(O) UserNotification.$(H): UserNotification.st $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)WeakInterestConverter.$(O) WeakInterestConverter.$(H): WeakInterestConverter.st $(INCLUDE_TOP)/stx/libbasic/InterestConverter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)WindowsDesktop.$(O) WindowsDesktop.$(H): WindowsDesktop.st $(INCLUDE_TOP)/stx/libbasic/AbstractDesktop.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)ActivityNotification.$(O) ActivityNotification.$(H): ActivityNotification.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)ArrayedCollection.$(O) ArrayedCollection.$(H): ArrayedCollection.st $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Association.$(O) Association.$(H): Association.st $(INCLUDE_TOP)/stx/libbasic/LookupKey.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Block.$(O) Block.$(H): Block.st $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -228,26 +220,22 @@
$(OUTDIR)SHA1Stream.$(O) SHA1Stream.$(H): SHA1Stream.st $(INCLUDE_TOP)/stx/libbasic/HashStream.$(H) $(INCLUDE_TOP)/stx/libbasic/Stream.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Time.$(O) Time.$(H): Time.st $(INCLUDE_TOP)/stx/libbasic/AbstractTime.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Timestamp.$(O) Timestamp.$(H): Timestamp.st $(INCLUDE_TOP)/stx/libbasic/AbstractTime.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)UserConfirmation.$(O) UserConfirmation.$(H): UserConfirmation.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)UserInformation.$(O) UserInformation.$(H): UserInformation.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)UserInterrupt.$(O) UserInterrupt.$(H): UserInterrupt.st $(INCLUDE_TOP)/stx/libbasic/ControlInterrupt.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)Warning.$(O) Warning.$(H): Warning.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)XDGDesktop.$(O) XDGDesktop.$(H): XDGDesktop.st $(INCLUDE_TOP)/stx/libbasic/UnixDesktop.$(H) $(INCLUDE_TOP)/stx/libbasic/AbstractDesktop.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)UserNotification.$(O) UserNotification.$(H): UserNotification.st $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)YesToAllConfirmation.$(O) YesToAllConfirmation.$(H): YesToAllConfirmation.st $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)stx_libbasic.$(O) stx_libbasic.$(H): stx_libbasic.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)AbortAllOperationRequest.$(O) AbortAllOperationRequest.$(H): AbortAllOperationRequest.st $(INCLUDE_TOP)/stx/libbasic/ControlRequest.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)AbstractSourceFileWriter.$(O) AbstractSourceFileWriter.$(H): AbstractSourceFileWriter.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Query.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(STCHDR)
+$(OUTDIR)ActivityNotification.$(O) ActivityNotification.$(H): ActivityNotification.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Array.$(O) Array.$(H): Array.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)BreakPointInterrupt.$(O) BreakPointInterrupt.$(H): BreakPointInterrupt.st $(INCLUDE_TOP)/stx/libbasic/HaltInterrupt.$(H) $(INCLUDE_TOP)/stx/libbasic/ControlInterrupt.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)CheapBlock.$(O) CheapBlock.$(H): CheapBlock.st $(INCLUDE_TOP)/stx/libbasic/Block.$(H) $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Class.$(O) Class.$(H): Class.st $(INCLUDE_TOP)/stx/libbasic/ClassDescription.$(H) $(INCLUDE_TOP)/stx/libbasic/Behavior.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Association.$(H) $(INCLUDE_TOP)/stx/libbasic/LookupKey.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(STCHDR)
-$(OUTDIR)CmdLineOptionError.$(O) CmdLineOptionError.$(H): CmdLineOptionError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)ClassBuildError.$(O) ClassBuildError.$(H): ClassBuildError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)DoubleArray.$(O) DoubleArray.$(H): DoubleArray.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)ElementBoundsError.$(O) ElementBoundsError.$(H): ElementBoundsError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)FloatArray.$(O) FloatArray.$(H): FloatArray.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Fraction.$(O) Fraction.$(H): Fraction.st $(INCLUDE_TOP)/stx/libbasic/Number.$(H) $(INCLUDE_TOP)/stx/libbasic/ArithmeticValue.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GNOMEDesktop.$(O) GNOMEDesktop.$(H): GNOMEDesktop.st $(INCLUDE_TOP)/stx/libbasic/XDGDesktop.$(H) $(INCLUDE_TOP)/stx/libbasic/UnixDesktop.$(H) $(INCLUDE_TOP)/stx/libbasic/AbstractDesktop.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)IdentityDictionary.$(O) IdentityDictionary.$(H): IdentityDictionary.st $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)InlineObjectClassDescription.$(O) InlineObjectClassDescription.$(H): InlineObjectClassDescription.st $(INCLUDE_TOP)/stx/libbasic/ClassDescription.$(H) $(INCLUDE_TOP)/stx/libbasic/Behavior.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Integer.$(O) Integer.$(H): Integer.st $(INCLUDE_TOP)/stx/libbasic/Number.$(H) $(INCLUDE_TOP)/stx/libbasic/ArithmeticValue.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -256,7 +244,6 @@
$(OUTDIR)MeasurementValue.$(O) MeasurementValue.$(H): MeasurementValue.st $(INCLUDE_TOP)/stx/libbasic/Number.$(H) $(INCLUDE_TOP)/stx/libbasic/ArithmeticValue.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)Metaclass.$(O) Metaclass.$(H): Metaclass.st $(INCLUDE_TOP)/stx/libbasic/ClassDescription.$(H) $(INCLUDE_TOP)/stx/libbasic/Behavior.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)OsError.$(O) OsError.$(H): OsError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)ProceedError.$(O) ProceedError.$(H): ProceedError.st $(INCLUDE_TOP)/stx/libbasic/Warning.$(H) $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)ProceedableError.$(O) ProceedableError.$(H): ProceedableError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)QueryWithoutDefault.$(O) QueryWithoutDefault.$(H): QueryWithoutDefault.st $(INCLUDE_TOP)/stx/libbasic/Query.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)ReadStream.$(O) ReadStream.$(H): ReadStream.st $(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)
@@ -270,8 +257,11 @@
$(OUTDIR)StringCollection.$(O) StringCollection.$(H): StringCollection.st $(INCLUDE_TOP)/stx/libbasic/OrderedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TerminateProcessRequest.$(O) TerminateProcessRequest.$(H): TerminateProcessRequest.st $(INCLUDE_TOP)/stx/libbasic/ControlRequest.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)UninterpretedBytes.$(O) UninterpretedBytes.$(H): UninterpretedBytes.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)UserConfirmation.$(O) UserConfirmation.$(H): UserConfirmation.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)UserInformation.$(O) UserInformation.$(H): UserInformation.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)VMInternalError.$(O) VMInternalError.$(H): VMInternalError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)VarArgBlock.$(O) VarArgBlock.$(H): VarArgBlock.st $(INCLUDE_TOP)/stx/libbasic/Block.$(H) $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Warning.$(O) Warning.$(H): Warning.st $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)WeakArray.$(O) WeakArray.$(H): WeakArray.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)WeakIdentitySet.$(O) WeakIdentitySet.$(H): WeakIdentitySet.st $(INCLUDE_TOP)/stx/libbasic/IdentitySet.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)WeakValueDictionary.$(O) WeakValueDictionary.$(H): WeakValueDictionary.st $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -305,6 +295,7 @@
$(OUTDIR)OsNotification.$(O) OsNotification.$(H): OsNotification.st $(INCLUDE_TOP)/stx/libbasic/OsError.$(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)OsTransferFaultError.$(O) OsTransferFaultError.$(H): OsTransferFaultError.st $(INCLUDE_TOP)/stx/libbasic/OsError.$(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)PrivateMetaclass.$(O) PrivateMetaclass.$(H): PrivateMetaclass.st $(INCLUDE_TOP)/stx/libbasic/Metaclass.$(H) $(INCLUDE_TOP)/stx/libbasic/ClassDescription.$(H) $(INCLUDE_TOP)/stx/libbasic/Behavior.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)ProceedError.$(O) ProceedError.$(H): ProceedError.st $(INCLUDE_TOP)/stx/libbasic/Warning.$(H) $(INCLUDE_TOP)/stx/libbasic/UserNotification.$(H) $(INCLUDE_TOP)/stx/libbasic/Notification.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)ReadWriteStream.$(O) ReadWriteStream.$(H): ReadWriteStream.st $(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)ShortFloat.$(O) ShortFloat.$(H): ShortFloat.st $(INCLUDE_TOP)/stx/libbasic/LimitedPrecisionReal.$(H) $(INCLUDE_TOP)/stx/libbasic/Number.$(H) $(INCLUDE_TOP)/stx/libbasic/ArithmeticValue.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)SignalError.$(O) SignalError.$(H): SignalError.st $(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)
--- a/Make.spec Mon Oct 26 21:51:17 2009 +0000
+++ b/Make.spec Thu Nov 05 14:41:30 2009 +0000
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic/Make.spec,v 1.97 2009/10/12 19:32:47 cg Exp $
+# $Header: /cvs/stx/stx/libbasic/Make.spec,v 1.99 2009/10/30 14:39:44 cg Exp $
#
# DO NOT EDIT
# automagically generated from the projectDefinition: stx_libbasic.
@@ -50,12 +50,14 @@
STCWARNINGS=-warnNonStandard
WIN32_OBJS= \
+ $(OUTDIR)Win32Process.$(O) \
$(OUTDIR)PCFilename.$(O) \
$(OUTDIR)CharacterEncoderImplementations__MS_Baltic.$(O) \
$(OUTDIR)CharacterEncoderImplementations__MS_Cyrillic.$(O) \
$(OUTDIR)CharacterEncoderImplementations__MS_Greek.$(O) \
$(OUTDIR)Win32Handle.$(O) \
$(OUTDIR)Win32FILEHandle.$(O) \
+ $(OUTDIR)Win32Constants.$(O) \
$(OUTDIR)Win32OperatingSystem.$(O) \
@@ -346,3 +348,4 @@
+
--- a/Metaclass.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Metaclass.st Thu Nov 05 14:41:30 2009 +0000
@@ -888,12 +888,13 @@
!Metaclass class methodsFor:'documentation'!
version
- ^ '$Id: Metaclass.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Metaclass.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Metaclass.st,v 1.207 2009/10/13 11:11:15 stefan Exp §'
+ ^ '$Id: Metaclass.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Metaclass initialize!
+
--- a/Method.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Method.st Thu Nov 05 14:41:30 2009 +0000
@@ -428,9 +428,9 @@
mclass == aClass ifTrue:[ ^ self ].
- (mclass notNil and:[aClass notNil]) ifTrue:[
- "/ 'Method [warning]: mclass already set' errorPrintCR.
- ].
+"/ (mclass notNil and:[aClass notNil]) ifTrue:[
+"/ 'Method [warning]: mclass already set' errorPrintCR.
+"/ ].
mclass := aClass.
"Modified: / 28-11-2006 / 12:12:27 / cg"
@@ -2242,7 +2242,9 @@
methodDefinitionTemplate
"return the string that defines the method and the arguments"
- ^ Method methodDefinitionTemplateForSelector:self selector andArgumentNames:self methodArgNames
+ ^ Method
+ methodDefinitionTemplateForSelector:self selector
+ andArgumentNames:self methodArgNames
"
(self compiledMethodAt:#printOn:) methodDefinitionTemplate
@@ -2536,6 +2538,19 @@
^ false
!
+sends:selectorSymbol1 or:selectorSymbol2
+ "return true, if this method contains a message-send
+ to either selectorSymbol1 or selectorSymbol2."
+
+ |msgs|
+
+ ((self referencesLiteral:selectorSymbol1) or:[self referencesLiteral:selectorSymbol2]) ifTrue:[
+ msgs := self messagesSent.
+ ^ (msgs includesIdentical:selectorSymbol1) or:[msgs includesIdentical:selectorSymbol2]
+ ].
+ ^ false
+!
+
shouldBeSkippedInDebuggersWalkBack
"return true, if this method thinks, it should be skipped in a walkback.
This is done by looking for a #skipInDebuggersWalkBack flag in the methods resources."
@@ -2919,12 +2934,13 @@
!Method class methodsFor:'documentation'!
version
- ^ '$Id: Method.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Method.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Method.st,v 1.333 2009/10/14 18:15:20 cg Exp §'
+ ^ '$Id: Method.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Method initialize!
+
--- a/NonPositionableExternalStream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/NonPositionableExternalStream.st Thu Nov 05 14:41:30 2009 +0000
@@ -154,18 +154,18 @@
pipe := OperatingSystem makePipe.
pipe isNil ifTrue:[
- "/ ok, someone has forgotten to close a stream; enforce finalization and try again
- 'MakePipe: enforce finalization to close any open streams' infoPrintCR.
- ObjectMemory garbageCollect.
- pipe := OperatingSystem makePipe.
+ "/ ok, someone has forgotten to close a stream; enforce finalization and try again
+ 'MakePipe: enforce finalization to close any open streams' infoPrintCR.
+ ObjectMemory garbageCollect.
+ pipe := OperatingSystem makePipe.
].
-
+
pipe notNil ifTrue:[
- rs := self forReadingFromFileDescriptor:(pipe at:1).
- rs buffered:false.
- ws := self forWritingToFileDescriptor:(pipe at:2).
- ws buffered:false.
- ^ Array with:rs with:ws
+ rs := self forReadingFromFileDescriptor:(pipe at:1).
+ rs buffered:false.
+ ws := self forWritingToFileDescriptor:(pipe at:2).
+ ws buffered:false.
+ ^ Array with:rs with:ws
].
^ nil
@@ -178,18 +178,18 @@
'read ...'.
[
- 1 to:10 do:[:i |
- Transcript showCR:rs nextLine
- ].
- rs close.
+ 1 to:10 do:[:i |
+ Transcript showCR:rs nextLine
+ ].
+ rs close.
] forkAt:7.
'write ...'.
[
- 1 to:10 do:[:i |
- ws nextPutAll:'hello world '; nextPutAll:i printString; cr
- ].
- ws close.
+ 1 to:10 do:[:i |
+ ws nextPutAll:'hello world '; nextPutAll:i printString; cr
+ ].
+ ws close.
] fork.
"
@@ -421,7 +421,7 @@
mode := #readwrite.
buffered := false.
- filePointer := self handleForStderr.
+ handle := self handleForStderr.
OperatingSystem isMSWINDOWSlike ifTrue:[
eolMode := #crlf
]
@@ -435,7 +435,7 @@
mode := #readonly.
"/ buffered := true.
buffered := false.
- filePointer := self handleForStdin.
+ handle := self handleForStdin.
!
initializeForStdout
@@ -445,7 +445,7 @@
mode := #readwrite.
buffered := false.
- filePointer := self handleForStdout.
+ handle := self handleForStdout.
OperatingSystem isMSWINDOWSlike ifTrue:[
eolMode := #crlf
]
@@ -503,7 +503,7 @@
^ false
!
-size
+size
"we do not know our size"
^ self positionError
@@ -559,6 +559,7 @@
!NonPositionableExternalStream class methodsFor:'documentation'!
version
- ^ '$Id: NonPositionableExternalStream.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: NonPositionableExternalStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Notification.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Notification.st Thu Nov 05 14:41:30 2009 +0000
@@ -338,12 +338,13 @@
!Notification class methodsFor:'documentation'!
version
- ^ '$Id: Notification.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Notification.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Notification.st,v 1.25 2009/10/14 17:34:24 cg Exp §'
+ ^ '$Id: Notification.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Notification initialize!
+
--- a/Number.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Number.st Thu Nov 05 14:41:30 2009 +0000
@@ -2256,10 +2256,11 @@
!Number class methodsFor:'documentation'!
version
- ^ '$Id: Number.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Number.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Number.st,v 1.127 2009/10/03 11:54:45 cg Exp §'
+ ^ '$Id: Number.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/OSErrorHolder.st Mon Oct 26 21:51:17 2009 +0000
+++ b/OSErrorHolder.st Thu Nov 05 14:41:30 2009 +0000
@@ -406,12 +406,13 @@
!OSErrorHolder class methodsFor:'documentation'!
version
- ^ '$Id: OSErrorHolder.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: OSErrorHolder.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/OSErrorHolder.st,v 1.17 2009/10/06 08:31:33 cg Exp §'
+ ^ '$Id: OSErrorHolder.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
OSErrorHolder initialize!
+
--- a/Object.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Object.st Thu Nov 05 14:41:30 2009 +0000
@@ -678,7 +678,6 @@
"
! !
-
!Object methodsFor:'accessing'!
at:index
@@ -2789,17 +2788,18 @@
<resource: #skipInDebuggersWalkBack>
(self isBreakPointEnabled:someKey) ifTrue:[
- aBlock value
+ aBlock value
].
"
Smalltalk disableBreakPoint:#cg.
- nil debuggingCodeFor:#cg is:[ self halt ]
+ nil debuggingCodeFor:#cg is:[ Transcript showCR:'here is some debug message for cg' ].
+ nil debuggingCodeFor:#stefan is:[ Transcript showCR:'here is some debug message for sv' ].
Smalltalk enableBreakPoint:#cg.
- nil debuggingCodeFor:#cg is:[ self halt ]
+ nil debuggingCodeFor:#cg is:[ Transcript showCR:'here is some debug message for cg' ].
+ nil debuggingCodeFor:#stefan is:[ Transcript showCR:'here is some debug message for sv' ].
Smalltalk disableBreakPoint:#cg.
- nil debuggingCodeFor:#stefan is:[ self halt ]
"
!
@@ -3075,20 +3075,39 @@
"Modified: / 10-08-2006 / 13:13:11 / cg"
!
+todo
+ "used to mark code pieces that have to be implemented"
+
+ <resource: #skipInDebuggersWalkBack>
+
+ self halt:'more work needed here'.
+"/ aBlock value.
+
+ "
+ example:
+
+ ...
+ self todo.
+ ...
+ "
+!
+
todo:aBlock
"used to mark code pieces that have to be implemented"
+ <resource: #skipInDebuggersWalkBack>
+
"/ self halt.
"/ aBlock value.
"
example:
- ...
- self todo:[
- code which needs more work ...
- ].
- ...
+ ...
+ self todo:[
+ code which needs more work ...
+ ].
+ ...
"
"Created: / 25-05-2007 / 21:34:39 / cg"
@@ -4061,7 +4080,7 @@
<resource: #skipInDebuggersWalkBack>
- ^ self subclassResponsibility:'method must be reimplemented in ST/V subclass'
+ ^ SubclassResponsibilityError raiseRequestErrorString:'method must be reimplemented in ST/V subclass'
!
indexNotInteger
@@ -4109,18 +4128,19 @@
integerCheckError
"{ Pragma: +optSpace }"
- "generated when a variable declared with an integer type gets a bad
- value assigned"
+ "generated when a variable declared with an integer type gets a bad value assigned"
<resource: #skipInDebuggersWalkBack>
^ self error:'bad assign of ' , self printString ,
- ' (' , self class name , ') to integer-typed variable'
+ ' (' , self class name , ') to integer-typed variable'
!
invalidCodeObject
"{ Pragma: +optSpace }"
+ "this is sent by VM if it encounters some non-method for execution"
+
<resource: #skipInDebuggersWalkBack>
self error:'not an executable code object'
@@ -4176,7 +4196,8 @@
notYetImplemented
"{ Pragma: +optSpace }"
- "report an error that some functionality is not yet implemented"
+ "report an error that some functionality is not yet implemented.
+ This is here only for compatibility - it has the same meaning as shouldImplement."
<resource: #skipInDebuggersWalkBack>
@@ -4349,8 +4370,9 @@
shouldImplement
"{ Pragma: +optSpace }"
- "report an error that this message should be implemented.
- This is send by automatically generated method bodies"
+ "report an error that this message/functionality should be implemented.
+ This is send by automatically generated method bodies or inside as-yet-uncoded
+ branches of existing methods."
<resource: #skipInDebuggersWalkBack>
@@ -4358,16 +4380,38 @@
sender := thisContext sender.
- ^ UnimplementedFunctionalityError raiseRequestWith:(Message selector:sender selector arguments:sender args)
-
+ ^ UnimplementedFunctionalityError
+ raiseRequestWith:(Message selector:sender selector arguments:sender args)
"
- self shouldImplement
+ self shouldImplement
+ "
+!
+
+shouldImplement:what
+ "{ Pragma: +optSpace }"
+
+ "report an error that this message/functionality should be implemented.
+ This is send by automatically generated method bodies or inside as-yet-uncoded
+ branches of existing methods."
+
+ <resource: #skipInDebuggersWalkBack>
+
+ |sender|
+
+ sender := thisContext sender.
+
+ ^ UnimplementedFunctionalityError
+ raiseRequestWith:(Message selector:sender selector arguments:sender args)
+ errorString:what
+
+ "
+ self shouldImplement:'foobar'
"
!
shouldNeverBeReached
- " report error - this point may never be reached. "
+ "report an error that this point may never be reached."
^ self
error:'Oops, this may never reached. Something somewhere was terribly wrong.'.
@@ -4376,7 +4420,7 @@
!
shouldNeverBeSent
- " report error - this message may never be sent to the reciever"
+ "report an error that this message may never be sent to the reciever"
^ self error:'This message never may be sent to me!!'.
@@ -4386,7 +4430,8 @@
shouldNotImplement
"{ Pragma: +optSpace }"
- "report an error that this message should not be implemented"
+ "report an error that this message should not be implemented - i.e. that a method
+ is invoked which is not appropriate for the receiver."
<resource: #skipInDebuggersWalkBack>
@@ -4398,8 +4443,7 @@
subclassResponsibility
"{ Pragma: +optSpace }"
- "report an error that this message should have been reimplemented in a
- subclass"
+ "report an error that this message should have been reimplemented in a subclass"
<resource: #skipInDebuggersWalkBack>
@@ -6410,7 +6454,7 @@
These messages can be turned on/off by 'Object infoPrinting:true/false'"
InfoPrinting == true ifTrue:[
- self errorPrint
+ self errorPrint
]
!
@@ -6423,7 +6467,7 @@
These messages can be turned on/off by 'Object infoPrinting:true/false'"
InfoPrinting == true ifTrue:[
- self errorPrintCR
+ self errorPrintCR
]
"Created: 20.5.1996 / 10:21:28 / cg"
@@ -7116,7 +7160,6 @@
^ self
! !
-
!Object methodsFor:'secure message sending'!
askFor:aSelector
@@ -9243,12 +9286,13 @@
!Object class methodsFor:'documentation'!
version
- ^ '$Id: Object.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Object.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Object.st,v 1.638 2009/10/19 09:04:09 cg Exp §'
+ ^ '$Id: Object.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Object initialize!
+
--- a/ObjectMemory.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ObjectMemory.st Thu Nov 05 14:41:30 2009 +0000
@@ -5245,12 +5245,13 @@
!ObjectMemory class methodsFor:'documentation'!
version
- ^ '$Id: ObjectMemory.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: ObjectMemory.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/ObjectMemory.st,v 1.242 2009/10/14 06:13:29 cg Exp §'
+ ^ '$Id: ObjectMemory.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
ObjectMemory initialize!
+
--- a/PCFilename.st Mon Oct 26 21:51:17 2009 +0000
+++ b/PCFilename.st Thu Nov 05 14:41:30 2009 +0000
@@ -546,8 +546,14 @@
!
isHidden
- "return true, if such a file is hidden."
+ "return true, if such a file is hidden.
+ On MSDOS, a name starting with a period is considered hidden
+ AND a file with a hidden attribute is so."
+ |baseName|
+
+ baseName := self baseName.
+ ((baseName startsWith:'.') and:[baseName ~= '..']) ifTrue:[^ true].
^ OperatingSystem isHidden:(self osNameForFile)
!
@@ -873,5 +879,10 @@
!PCFilename class methodsFor:'documentation'!
version
- ^ '$Id: PCFilename.st 10467 2009-08-19 16:14:36Z vranyj1 $'
+ ^ '$Id: PCFilename.st 10477 2009-11-05 14:41:30Z vranyj1 $'
+!
+
+version_CVS
+ ^ '$Id: PCFilename.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/PackageId.st Mon Oct 26 21:51:17 2009 +0000
+++ b/PackageId.st Thu Nov 05 14:41:30 2009 +0000
@@ -177,6 +177,15 @@
"Modified: / 28-11-2006 / 11:39:14 / cg"
!
+isModuleId
+ "true if this is a module-id only (i.e. no directory component present).
+ These are not allowed to be used as real projects, but only for organization.
+ The reason is that this is used as selector to select the sourceCodeManager and
+ also the managers repository"
+
+ ^ self directory isEmptyOrNil
+!
+
libraryName
"return the name of the library, when compiled to a binary (i.e. dll/so).
To avoid conflicts with the projectDefinition class
@@ -270,10 +279,11 @@
!PackageId class methodsFor:'documentation'!
version
- ^ '$Id: PackageId.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: PackageId.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/PackageId.st,v 1.15 2009/10/12 17:17:14 cg Exp §'
+ ^ '$Id: PackageId.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/PipeStream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/PipeStream.st Thu Nov 05 14:41:30 2009 +0000
@@ -487,13 +487,13 @@
This waits for the command to finish.
Use shutDown for a fast (nonBlocking) close."
- filePointer notNil ifTrue:[
+ handle notNil ifTrue:[
super closeFile.
OperatingSystem isMSDOSlike ifTrue:[
self terminatePipeCommand.
].
- filePointer := nil.
+ handle := nil.
pid notNil ifTrue:[
"/ wait for the pipe-command to terminate.
self waitForPipeCommandWithTimeout:nil.
@@ -518,8 +518,8 @@
extern close();
int retVal;
- if ((fp = __INST(filePointer)) != nil) {
- __INST(filePointer) = nil;
+ if ((fp = __INST(handle)) != nil) {
+ __INST(handle) = nil;
f = __FILEVal(fp);
if (@global(FileOpenTrace) == true) {
console_fprintf(stderr, "close [PipeStream] %x fd=%d\n", f, fileno(f));
@@ -568,18 +568,18 @@
shellPath shellArgs mbx mbxName
realCmd execDirectory tmpComFile nullOutput resultPid|
- filePointer notNil ifTrue:[
- "the pipe was already open ...
- this should (can) not happen."
- ^ self errorAlreadyOpen
+ handle notNil ifTrue:[
+ "the pipe was already open ...
+ this should (can) not happen."
+ ^ self errorAlreadyOpen
].
rwMode = #r ifTrue:[
- mode := #readonly. didWrite := false.
+ mode := #readonly. didWrite := false.
] ifFalse:[rwMode = #'r+' ifTrue:[
- mode := #readwrite. didWrite := true.
+ mode := #readwrite. didWrite := true.
] ifFalse:[
- mode := #writeonly. didWrite := true.
+ mode := #writeonly. didWrite := true.
]].
lastErrorNumber := nil.
@@ -591,79 +591,79 @@
execFdArray := #(0 1 2) copy.
OperatingSystem isVMSlike ifTrue:[
- "/
- "/ the generated COM-file includes a 'set default'
- "/
- tmpComFile := OperatingSystem createCOMFileForVMSCommand:aCommandString in:aDirectory.
- realCmd := '@' , tmpComFile osName.
- execDirectory := nil.
+ "/
+ "/ the generated COM-file includes a 'set default'
+ "/
+ tmpComFile := OperatingSystem createCOMFileForVMSCommand:aCommandString in:aDirectory.
+ realCmd := '@' , tmpComFile osName.
+ execDirectory := nil.
- mbx := OperatingSystem createMailBox.
- mbx isNil ifTrue:[
- lastErrorNumber := OperatingSystem currentErrorNumber.
- tmpComFile delete.
- ^ self openError
- ].
- mbxName := OperatingSystem mailBoxNameOf:mbx.
+ mbx := OperatingSystem createMailBox.
+ mbx isNil ifTrue:[
+ lastErrorNumber := OperatingSystem currentErrorNumber.
+ tmpComFile delete.
+ ^ self openError
+ ].
+ mbxName := OperatingSystem mailBoxNameOf:mbx.
- "/ 'mailBox is ' print. mbx print. ' name is ' print. mbxName printCR.
- shellPath := ''.
- shellArgs := realCmd.
+ "/ 'mailBox is ' print. mbx print. ' name is ' print. mbxName printCR.
+ shellPath := ''.
+ shellArgs := realCmd.
- rwMode = #r ifTrue:[
- "redirect stdout of subprocess to write to mailbox"
- execFdArray at:2 put:mbx.
- ] ifFalse:[
- "redirect stdin of subprocess to read from mailbox"
- execFdArray at:1 put:mbx.
- ].
+ rwMode = #r ifTrue:[
+ "redirect stdout of subprocess to write to mailbox"
+ execFdArray at:2 put:mbx.
+ ] ifFalse:[
+ "redirect stdin of subprocess to read from mailbox"
+ execFdArray at:1 put:mbx.
+ ].
] ifFalse:[
- shellAndArgs := OperatingSystem commandAndArgsForOSCommand:realCmd.
- shellPath := shellAndArgs at:1.
- shellArgs := shellAndArgs at:2.
+ shellAndArgs := OperatingSystem commandAndArgsForOSCommand:realCmd.
+ shellPath := shellAndArgs at:1.
+ shellArgs := shellAndArgs at:2.
- mode == #readwrite ifTrue:[
- pipeFdArray := OperatingSystem makeBidirectionalPipe.
- pipeFdArray isNil ifTrue:[
- lastErrorNumber := OperatingSystem currentErrorNumber.
- ^ self openError
- ].
- myFd := pipeFdArray at:1.
- execFd := pipeFdArray at:2.
- execFdArray at:1 put:execFd.
- execFdArray at:2 put:execFd.
- ] ifFalse:[
- pipeFdArray := OperatingSystem makePipe.
- pipeFdArray isNil ifTrue:[
- lastErrorNumber := OperatingSystem currentErrorNumber.
- ^ self openError
- ].
+ mode == #readwrite ifTrue:[
+ pipeFdArray := OperatingSystem makeBidirectionalPipe.
+ pipeFdArray isNil ifTrue:[
+ lastErrorNumber := OperatingSystem currentErrorNumber.
+ ^ self openError
+ ].
+ myFd := pipeFdArray at:1.
+ execFd := pipeFdArray at:2.
+ execFdArray at:1 put:execFd.
+ execFdArray at:2 put:execFd.
+ ] ifFalse:[
+ pipeFdArray := OperatingSystem makePipe.
+ pipeFdArray isNil ifTrue:[
+ lastErrorNumber := OperatingSystem currentErrorNumber.
+ ^ self openError
+ ].
- mode == #readonly ifTrue:[
- "redirect stdout of subprocess to write to pipe"
- myFd := pipeFdArray at:1.
- execFd := pipeFdArray at:2.
- execFdArray at:2 put:execFd.
- ] ifFalse:[
- "redirect stdin of subprocess to read from pipe"
- myFd := pipeFdArray at:2.
- execFd := pipeFdArray at:1.
- execFdArray at:1 put:execFd.
- ].
- ].
+ mode == #readonly ifTrue:[
+ "redirect stdout of subprocess to write to pipe"
+ myFd := pipeFdArray at:1.
+ execFd := pipeFdArray at:2.
+ execFdArray at:2 put:execFd.
+ ] ifFalse:[
+ "redirect stdin of subprocess to read from pipe"
+ myFd := pipeFdArray at:2.
+ execFd := pipeFdArray at:1.
+ execFdArray at:1 put:execFd.
+ ].
+ ].
].
errorDisposition == #discard ifTrue:[
- nullOutput := Filename nullDevice writeStream.
- execFdArray at:3 put:nullOutput fileDescriptor
+ nullOutput := Filename nullDevice writeStream.
+ execFdArray at:3 put:nullOutput fileDescriptor
] ifFalse:[
- (errorDisposition == #inline or:[errorDisposition == #stdout]) ifTrue:[
- execFdArray at:3 put:1
- ] ifFalse:[
+ (errorDisposition == #inline or:[errorDisposition == #stdout]) ifTrue:[
+ execFdArray at:3 put:1
+ ] ifFalse:[
"/ errorDisposition isStream ifTrue:[
"/self halt.
"/ ].
- ].
+ ].
].
"/ must block here, to avoid races due to early finishing
@@ -673,83 +673,83 @@
"beware: pid may change if subprocess is fast"
pid := resultPid := Processor
- monitor:[
- OperatingSystem
- exec:shellPath
- withArguments:shellArgs
- environment:nil
- fileDescriptors:execFdArray
- fork:true
- newPgrp:true
- inDirectory:execDirectory.
- ]
- action:[:status |
- status stillAlive ifFalse:[
- exitStatus := status.
+ monitor:[
+ OperatingSystem
+ exec:shellPath
+ withArguments:shellArgs
+ environment:nil
+ fileDescriptors:execFdArray
+ fork:true
+ newPgrp:true
+ inDirectory:execDirectory.
+ ]
+ action:[:status |
+ status stillAlive ifFalse:[
+ exitStatus := status.
- "writing doesn't make sense - there is no reader any longer"
- mode == #readwrite ifTrue:[
- "... but allow to read the rest of the command's output"
- self shutDownOutput.
- ] ifFalse:[mode == #writeonly ifTrue:[
- self closeFileDescriptor.
- ]].
+ "writing doesn't make sense - there is no reader any longer"
+ mode == #readwrite ifTrue:[
+ "... but allow to read the rest of the command's output"
+ self shutDownOutput.
+ ] ifFalse:[mode == #writeonly ifTrue:[
+ self closeFileDescriptor.
+ ]].
- OperatingSystem closePid:pid.
- pid := nil.
- exitSema signal.
- ].
- ].
+ OperatingSystem closePid:pid.
+ pid := nil.
+ exitSema signal.
+ ].
+ ].
"subprocess has been created.
close unused filedescriptors"
execFd notNil ifTrue:[
- OperatingSystem closeFd:execFd.
+ OperatingSystem closeFd:execFd.
].
nullOutput notNil ifTrue:[
- nullOutput close
+ nullOutput close
].
resultPid notNil ifTrue:[
- "successfull creation of subprocesss"
- OperatingSystem isVMSlike ifTrue:[
- "/
- "/ reopen the mailbox as a file ...
- "/
- mbxName := OperatingSystem mailBoxNameOf:mbx.
- mbxName notNil ifTrue:[
- super open:mbxName withMode:rwMode.
- exitAction := [tmpComFile delete].
- ].
- ] ifFalse:[
- self setFileDescriptor:myFd mode:rwMode.
- ]
+ "successfull creation of subprocesss"
+ OperatingSystem isVMSlike ifTrue:[
+ "/
+ "/ reopen the mailbox as a file ...
+ "/
+ mbxName := OperatingSystem mailBoxNameOf:mbx.
+ mbxName notNil ifTrue:[
+ super open:mbxName withMode:rwMode.
+ exitAction := [tmpComFile delete].
+ ].
+ ] ifFalse:[
+ self setFileDescriptor:myFd mode:rwMode.
+ ]
] ifFalse:[
- "creation of subprocesss failed"
- lastErrorNumber := OperatingSystem currentErrorNumber.
- OperatingSystem isVMSlike ifTrue:[
- OperatingSystem destroyMailBox:mbx.
- tmpComFile delete.
- ] ifFalse:[
- OperatingSystem closeFd:myFd.
- ].
+ "creation of subprocesss failed"
+ lastErrorNumber := OperatingSystem currentErrorNumber.
+ OperatingSystem isVMSlike ifTrue:[
+ OperatingSystem destroyMailBox:mbx.
+ tmpComFile delete.
+ ] ifFalse:[
+ OperatingSystem closeFd:myFd.
+ ].
].
blocked ifFalse:[
- OperatingSystem unblockInterrupts
+ OperatingSystem unblockInterrupts
].
(resultPid isNil or:[lastErrorNumber notNil]) ifTrue:[
- "
- the pipe open failed for some reason ...
- ... this may be either due to an invalid command string,
- or due to the system running out of memory (when forking
- the unix process)
- "
- exitAction value.
- ^ self openError
+ "
+ the pipe open failed for some reason ...
+ ... this may be either due to an invalid command string,
+ or due to the system running out of memory (when forking
+ the unix process)
+ "
+ exitAction value.
+ ^ self openError
].
commandString := realCmd.
@@ -795,7 +795,8 @@
!PipeStream class methodsFor:'documentation'!
version
- ^ '$Id: PipeStream.st 10447 2009-06-14 13:09:55Z vranyj1 $'
+ ^ '$Id: PipeStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
PipeStream initialize!
+
--- a/ProgrammingLanguage.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ProgrammingLanguage.st Thu Nov 05 14:41:30 2009 +0000
@@ -351,16 +351,17 @@
!ProgrammingLanguage class methodsFor:'documentation'!
version
- ^ '$Id: ProgrammingLanguage.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: ProgrammingLanguage.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/ProgrammingLanguage.st,v 1.9 2009/10/08 12:00:30 fm Exp §'
+ ^ '$Id: ProgrammingLanguage.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_SVN
- ^ '$Id: ProgrammingLanguage.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^'§Id: ProgrammingLanguage.st 10468 2009-08-22 08:34:50Z vranyj1 §'
! !
ProgrammingLanguage initialize!
+
--- a/Project.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Project.st Thu Nov 05 14:41:30 2009 +0000
@@ -52,11 +52,14 @@
documentation
"
- this class is going to be obsoleted, before ever being finished.
- All references to this class are being removed, and we are only
+ WARNING:
+ This class is almost completely obsolete (before even being finished)
+
+ Most references to this class are being removed, and we are only
looking at PackageId and ProjectDefinition in the future.
-
- Please ignore everything below.
+ Please ignore everything regarding to packaging and building below.
+ Project instance(s) are still used to keep a reference to the current changeSet,
+ but even that may move to a projectDefinition in the future.
This class is still under construction (especially the build features are unfinished).
Currently, all it does is keep track of per-project views
@@ -1614,12 +1617,13 @@
!Project class methodsFor:'documentation'!
version
- ^ '$Id: Project.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Project.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Project.st,v 1.206 2009/10/12 21:41:05 cg Exp §'
+ ^ '$Id: Project.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Project initialize!
+
--- a/ProjectDefinition.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ProjectDefinition.st Thu Nov 05 14:41:30 2009 +0000
@@ -84,6 +84,103 @@
!ProjectDefinition class methodsFor:'instance creation'!
+definitionClassForMonticelloPackage:aMonicelloPackagename
+ ^ self definitionClassForMonticelloPackage:aMonicelloPackagename createIfAbsent:false
+
+ "
+ self definitionClassForMonticelloPackage:'foobar'
+ "
+!
+
+definitionClassForMonticelloPackage:aMonicelloPackagename createIfAbsent:createIfAbsent
+ ^ self allSubclasses
+ detect:[:eachProjectDefinition |
+ eachProjectDefinition monticelloPackageName = aMonicelloPackagename ]
+ ifNone:[
+ |dfn squeakPackageInfo|
+
+ createIfAbsent ifTrue:[
+ dfn := ApplicationDefinition
+ definitionClassForPackage:'mc:',aMonicelloPackagename createIfAbsent:true projectType:GUIApplicationType.
+
+ "/ if the squeak-stuff is loaded, use it.
+ squeakPackageInfo := PackageInfo allSubclasses
+ detect:[:pi | pi new packageName = aMonicelloPackagename] ifNone:nil.
+
+ squeakPackageInfo notNil ifTrue:[
+ dfn classNames:(squeakPackageInfo new classes collect:[:each | each name]).
+ ].
+ ] ifFalse:[
+ nil
+ ]
+ ]
+
+ "
+ self definitionClassForMonticelloPackage:'foobar'
+ self definitionClassForMonticelloPackage:'foobar' createIfAbsent:true
+ "
+!
+
+definitionClassForPackage:aPackageID
+ ^ self definitionClassForPackage:aPackageID createIfAbsent:false
+
+ "Modified: / 17-08-2006 / 14:33:35 / cg"
+!
+
+definitionClassForPackage:aPackageID createIfAbsent:doCreateIfAbsent
+ ^ self definitionClassForPackage:aPackageID createIfAbsent:doCreateIfAbsent projectType:nil
+
+ "Modified: / 23-08-2006 / 14:29:15 / cg"
+!
+
+definitionClassForPackage: aPackageID createIfAbsent: doCreateIfAbsent projectType:typeOrNil
+ |packageDefinitionClassName class|
+
+ packageDefinitionClassName := ProjectDefinition initialClassNameForDefinitionOf:aPackageID.
+ class := Smalltalk classNamed:packageDefinitionClassName.
+ class isNil ifTrue:[
+ doCreateIfAbsent ifTrue:[
+ class := self newForPackage:aPackageID.
+ "setup before prerequisites are defined"
+ class setupForType:typeOrNil.
+ "/ look what is there and include it; is this ok ?
+ class compileDescriptionMethods
+ ].
+ ] ifFalse:[
+ typeOrNil notNil ifTrue:[
+ class projectType == typeOrNil ifFalse: [
+ class setupForType:typeOrNil.
+ ].
+ ].
+ ].
+ ^ class
+
+ "Created: / 23-08-2006 / 14:29:21 / cg"
+ "Modified: / 23-08-2006 / 15:35:26 / cg"
+!
+
+definitionClassForPackage:newProjectID projectType:typeOrNil createIfAbsent:createIfAbsent
+ ^ (self definitionClassForType:typeOrNil)
+ definitionClassForPackage:newProjectID
+ createIfAbsent:createIfAbsent
+ projectType:typeOrNil
+
+ "Created: / 23-08-2006 / 14:28:53 / cg"
+!
+
+definitionClassForType: type
+ "answer the class that describes a give project type"
+
+ (type = LibraryType) ifTrue:[ ^ LibraryDefinition ].
+ (type = GUIApplicationType) ifTrue:[ ^ ApplicationDefinition ].
+ (type = NonGUIApplicationType) ifTrue:[ ^ ApplicationDefinition ].
+ (type = 'Application') ifTrue:[ ^ ApplicationDefinition ]. "/ temporary - for backward compat.
+ self error:'unknown project type'.
+
+ "Created: / 17-08-2006 / 14:46:28 / cg"
+ "Modified: / 23-08-2006 / 13:49:27 / cg"
+!
+
newForPackage:packageID
^ self
newNamed:(self initialClassNameForDefinitionOf:packageID)
@@ -116,32 +213,6 @@
!ProjectDefinition class methodsFor:'accessing'!
-allDependentProjects
-
- | allDependentProjects pendingProjects |
- allDependentProjects := Set new.
- pendingProjects := OrderedCollection withAll: self dependentProjects.
- [ pendingProjects isEmpty ] whileFalse: [
- | currentProject |
- currentProject := pendingProjects removeFirst.
- (allDependentProjects includes: currentProject) ifFalse:
- [|prjDef|
- allDependentProjects add: currentProject.
- prjDef := Smalltalk at:(ProjectDefinition initialClassNameForDefinitionOf:self package) asSymbol.
- pendingProjects addAll:
- (prjDef dependentProjects)]
-
-
- ].
- ^allDependentProjects
- "
- stx_goodies_libtool3 allDependentProjects
- stx_goodies_xmlsuite_core allDependentProjects
- "
-
- "Created: / 06-06-2008 / 12:50:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
allPreRequisites
"answer all (recursive) prerequisite project ids of myself - in random order.
If we exclude a project, but one of our prerequisite projects depends on it, "
@@ -238,20 +309,9 @@
"
!
-dependentProjects
-
- ^(ProjectDefinition allSubclasses
- select:[:prjDef|prjDef preRequisites includes: self package])
- collect:[:prjDef|prjDef package]
-
- "
- stx_goodies_libtool3 dependentProjects
- "
-
- "Created: / 06-06-2008 / 12:39:13 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
initialClassNameForDefinitionOf:aPackageId
+ "given a package-ID, return an appropriate class name for this package"
+
|s|
s := aPackageId asString copy replaceAny:':/' with:$_.
@@ -381,6 +441,12 @@
"Modified: / 17-08-2006 / 14:13:51 / cg"
!
+monticelloPackageName
+ "hook for packages which have been loaded from monticello"
+
+ ^ nil
+!
+
msdosPathToPackage:toPackageID from:fromPackageID
"Returns the path to the package defined by aPackageID relative to my path"
@@ -441,7 +507,7 @@
packageDirectory
- ^Smalltalk packageDirectoryForPackageId: self package
+ ^ Smalltalk packageDirectoryForPackageId: self package
"Created: / 15-06-2009 / 12:01:18 / Jan Vrany <vranyj1@fel.cvut.cz>"
!
@@ -768,6 +834,129 @@
"Created: / 14-09-2006 / 14:59:53 / cg"
! !
+!ProjectDefinition class methodsFor:'accessing - packaging'!
+
+classNames:aCollectionOfClassNames
+ "set the set of classes"
+
+ self classNamesAndAttributes:aCollectionOfClassNames usingCompiler:nil
+!
+
+classNamesAndAttributes:newSpec usingCompiler:compilerOrNil
+ "set the set of classes. and attributes
+ Because this requires compilation of my classList-method, a compiler can be passed in,
+ which has to do the job.
+ (this is used by the systembrowser to pass in a CodeGeneratorTool with undo support)"
+
+ |oldSpec newCode|
+
+ oldSpec := self classNamesAndAttributes.
+ newSpec = oldSpec ifTrue: [^ self].
+
+ newCode := self classNamesAndAttributes_codeFor:newSpec.
+
+ (compilerOrNil ? self compilerClass)
+ compile:newCode
+ forClass:self theMetaclass
+ inCategory:'description - contents'.
+!
+
+excludeClasses:toExclude usingCompiler:compilerOrNil
+ "exclude (remove from classList) a number of classes.
+ Because this requires compilation of my classList-method, a compiler can be passed in,
+ which has to do the job.
+ (this is used by the systembrowser to pass in a CodeGeneratorTool with undo support)"
+
+ |newSpec|
+
+ newSpec := self classNamesAndAttributes copy.
+
+ toExclude do:[:eachClassToExclude |
+ |className|
+ className := eachClassToExclude theNonMetaclass name.
+ (self allClassNames includes:className) ifTrue:[
+ |idx|
+
+ idx := newSpec findFirst:[:entry | entry = className or:[entry first = className]].
+ idx ~~ 0 ifTrue:[
+ newSpec := newSpec copyWithoutIndex:idx.
+ ].
+ ].
+ ].
+ self classNamesAndAttributes:newSpec usingCompiler:compilerOrNil
+
+ "Created: / 30-08-2007 / 18:28:28 / cg"
+!
+
+includeClasses:toInclude usingCompiler:compilerOrNil
+ "include (add to classList) a number of classes.
+ Because this requires compilation of my classList-method, a compiler can be passed in,
+ which has to do the job.
+ (this is used by the systembrowser to pass in a CodeGeneratorTool with undo support)"
+
+ |oldSpec newSpec|
+
+ oldSpec := self classNamesAndAttributes.
+ newSpec := oldSpec copy.
+
+ toInclude do:[:eachClassToInclude |
+ |className|
+
+ className := eachClassToInclude theNonMetaclass name.
+ (self compiled_classNames includes:className) ifFalse:[
+ | idx entry|
+
+ idx := oldSpec findFirst:[:entry | entry = className or:[entry first = className]].
+ idx == 0 ifTrue:[
+ newSpec := newSpec copyWith:(Array with:className)
+ ] ifFalse:[
+ entry := newSpec at:idx.
+ entry isArray ifTrue:[
+ entry := entry copyWithout:#autoload
+ ].
+ newSpec at:idx put:entry
+ ].
+ ].
+ ].
+
+ self classNamesAndAttributes:newSpec usingCompiler:compilerOrNil
+!
+
+makeClassesAutoloaded:toMakeAutoloaded usingCompiler:compilerOrNil
+ "include as autoloaded (add to classList) a number of classes.
+ Because this requires compilation of my classList-method, a compiler can be passed in,
+ which has to do the job.
+ (this is used by the systembrowser to pass in a CodeGeneratorTool with undo support)"
+
+ |newSpec|
+
+ newSpec := self classNamesAndAttributes copy.
+
+ toMakeAutoloaded do:[:eachClassToMakeAutoloaded |
+ |className|
+
+ className := eachClassToMakeAutoloaded theNonMetaclass name.
+ (self autoloaded_classNames includes:className) ifFalse:[
+ |idx entry|
+
+ idx := newSpec findFirst:[:entry | entry = className or:[entry first = className]].
+ idx == 0 ifTrue:[
+ newSpec := newSpec copyWith:(Array with:className with:#autoload)
+ ] ifFalse:[
+ entry := newSpec at:idx.
+ entry isArray ifTrue:[
+ entry := (entry copyWithout:#autoload) copyWith:#autoload.
+ ] ifFalse:[
+ entry := Array with:entry with:#autoload
+ ].
+ newSpec at:idx put:entry.
+ ].
+ ].
+ ].
+
+ self classNamesAndAttributes:newSpec usingCompiler:compilerOrNil
+! !
+
!ProjectDefinition class methodsFor:'accessing - svn'!
svnRevision
@@ -855,6 +1044,8 @@
!
installAutoloadedClasses
+ "install all of my autoloaded classes (if any)"
+
(self classNamesForWhich:[:nm :attr | (attr includes:#autoload)])
do:[:className |
"/ 'install as autoloaded: ' errorPrint. className errorPrintCR.
@@ -994,14 +1185,13 @@
attributes := eachClass isLoaded ifTrue:[ #() ] ifFalse:[ #(autoload) ].
].
].
-
"JV @ 2009-10-26
- Give a project definition to specify additional attributes
- for given class."
- (self additionalClassAttributesFor: eachClass) do:
- [:attr|
- (attributes includes: attr)
- ifFalse:[attributes := attributes copyWith: attr]].
+ Give a project definition to specify additional attributes for given class."
+ (self additionalClassAttributesFor: eachClass) do:[:attr|
+ (attributes includes: attr) ifFalse:[
+ attributes := attributes copyWith: attr
+ ]
+ ].
newEntry := Array with:className.
attributes notEmptyOrNil ifTrue:[
newEntry := newEntry , attributes.
@@ -1196,27 +1386,27 @@
forEachContentsMethodsCodeToCompileDo:aTwoArgBlock
ignoreOldDefinition:ignoreOldDefinition.
- (self class implements:#description) ifFalse:[
+ (self class includesSelector:#description) ifFalse:[
aTwoArgBlock
value: self description_code
value: 'description - project information'.
].
- (self class implements:#productName) ifFalse:[
+ (self class includesSelector:#productName) ifFalse:[
aTwoArgBlock
value: self productName_code
value: 'description - project information'.
].
- (self class implements:#companyName) ifFalse:[
+ (self class includesSelector:#companyName) ifFalse:[
aTwoArgBlock
value: self companyName_code
value: 'description - project information'.
].
- (self class implements:#legalCopyright) ifFalse:[
+ (self class includesSelector:#legalCopyright) ifFalse:[
aTwoArgBlock
value: self legalCopyright_code
value: 'description - project information'.
].
- (self class implements:#applicationIconFileName) ifFalse:[
+ (self class includesSelector:#applicationIconFileName) ifFalse:[
aTwoArgBlock
value: self applicationIconFileName_code
value: 'description - project information'.
@@ -1388,9 +1578,29 @@
^ NonGUIApplicationType
!
+projectTypeSelectors
+ "a list of possible project type selectors"
+
+ ^ #( libraryType guiApplicationType nonGuiApplicationType )
+
+ "
+ self libraryType
+ self guiApplicationType
+ self nonGuiApplicationType
+ "
+
+ "Created: / 23-08-2006 / 14:27:32 / cg"
+!
+
projectTypes
+ "a list of possible project types"
+
^ self libraryTypes , self applicationTypes
+ "
+ self projectTypes
+ "
+
"Created: / 23-08-2006 / 14:27:32 / cg"
! !
@@ -1415,20 +1625,6 @@
"Modified: / 17-08-2006 / 19:49:40 / cg"
!
-postLoadAction
- "invoked after loading a project"
-
- "/ intentionally left blank, to be redefined by subclasses (i.e. real projects)
-
- "Modified: / 17-08-2006 / 19:59:17 / cg"
-!
-
-preLoadAction
- "invoked before loading a project"
-
- "/ intentionally left blank, to be redefined by subclasses (i.e. real projects)
-!
-
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.
@@ -1454,14 +1650,6 @@
^ self preRequisites
!
-preUnloadAction
- "invoked before unloading a project"
-
- "/ intentionally left blank, to be redefined by subclasses (i.e. real projects)
-
- "Modified: / 17-08-2006 / 19:59:26 / cg"
-!
-
siblingsAreSubProjects
^ false
!
@@ -1484,68 +1672,40 @@
"Modified: / 17-08-2006 / 19:57:46 / cg"
! !
+!ProjectDefinition class methodsFor:'description - actions'!
+
+postLoadAction
+ "invoked after loading a project"
+
+ "/ intentionally left blank, to be redefined by subclasses (i.e. real projects)
+
+ "Modified: / 17-08-2006 / 19:59:17 / cg"
+!
+
+preLoadAction
+ "invoked before loading a project"
+
+ "/ intentionally left blank, to be redefined by subclasses (i.e. real projects)
+!
+
+preUnloadAction
+ "invoked before unloading a project"
+
+ "/ intentionally left blank, to be redefined by subclasses (i.e. real projects)
+
+ "Modified: / 17-08-2006 / 19:59:26 / cg"
+! !
+
!ProjectDefinition class methodsFor:'description - classes'!
-additionalClassAttributesFor: aClass
- "Answers additional set of class attributes for given class
- Individual project definitions may override this method, but
- overriding method should always merge its attributes with result
- of 'super additionalClassAttributesFor: aClass'.
-
- Here, we add #autoload attributes to all test cases and
- test resources, as they are not neccessary for the package
- and should not be compiled (because of unwanted dependency
- on stx:goodies/sunit package)
- "
-
- (aClass inheritsFrom: TestCase) ifTrue:[^#(autoload)].
- (aClass inheritsFrom: TestResource) ifTrue:[^#(autoload)].
-
- ^#()"No additional attributes"
-
- "
- stx_libbasic additionalClassAttributesFor: Object
- stx_libtool additionalClassAttributesFor: Tools::NavigationHistoryTests
- stx_goodies_sunit additionalClassAttributesFor: TestCase
-
-
- stx_libtool classNamesAndAttributes_code_ignoreOldEntries:true ignoreOldDefinition: true
-
- "
-
- "Created: / 26-10-2009 / 12:54:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
additionalClassNamesAndAttributes
^ #()
"Created: / 21-08-2006 / 19:53:04 / cg"
!
-allClassNames
- ^ self classNamesForWhich:[:nm :attr | true ].
-!
-
-autoloaded_classNames
- ^ self classNamesForWhich:[:nm :attr | attr notEmptyOrNil and:[attr includes:#autoload]].
-
- "Modified: / 07-08-2006 / 21:25:25 / fm"
- "Created: / 30-08-2007 / 18:48:09 / cg"
-!
-
-classNames
- "answer an array containing all the class names of the project's classes"
-
- ^ self classNamesAndAttributesAsSpecArray collect:[:entry | entry first].
-
- "
- stx_libhtml classNames
- stx_libhtml classNamesAndAttributesAsSpecArray
- "
-!
-
classNamesAndAttributes
- "a correponding method with real names is generated in my subclasses"
+ "a correponding method with real names must be present in my concrete subclasses"
"/ should this be a subclassResponsibility here ?
^ #()
@@ -1555,119 +1715,11 @@
"Modified: / 17-08-2006 / 20:47:20 / cg"
!
-classNamesAndAttributesAsSpecArray
- "given a classNamesAndAttributes array, make this a spec array (array of arrays).
- This decompresses class-name entries into a one-element array for easier processing"
-
- ^ self classNamesAndAttributes
- collect:[:entry |
- entry isArray ifTrue:[
- entry first isSymbol ifTrue:[
- entry
- ] ifFalse:[
- (Array with:entry first asSymbol) , (entry copyFrom:2)
- ].
- ] ifFalse:[
- Array with:entry asSymbol.
- ]].
-
- "Created: / 19-02-2007 / 16:11:53 / cg"
-!
-
-classNamesAndAttributesFromSpecArray:aSpecArray
- "given a spec array (array of arrays), make this a classNamesAndAttributes array
- as stored literally in the method.
- This compresses single element array-elements into plain names
- (to save code in the compiled binaries)"
-
- ^ aSpecArray
- collect:[:entry |
- (entry isArray and:[entry size == 1]) ifTrue:[
- entry first
- ] ifFalse:[
- entry
- ]].
-
- "Created: / 19-02-2007 / 16:12:32 / cg"
-!
-
-classNamesForWhich:aBlock
- "a correponding method with real names is generated in my subclasses"
-
- |coll|
-
- coll := OrderedCollection new.
- self classNamesAndAttributesDo:[:nm :attributes |
- (aBlock value:nm value:attributes) ifTrue:[
- coll add:nm.
- ].
- ].
- ^ coll
-
- "Created: / 07-08-2006 / 19:02:57 / fm"
- "Modified: / 07-08-2006 / 21:25:25 / fm"
- "Modified: / 17-08-2006 / 20:47:20 / cg"
-!
-
-compiled_classNames
- ^ self classNamesForWhich:[:nm :attr | attr isEmptyOrNil or:[(attr includes:#autoload) not]].
-
- "Created: / 07-08-2006 / 19:02:57 / fm"
- "Modified: / 07-08-2006 / 21:25:25 / fm"
- "Modified: / 21-08-2006 / 18:48:31 / cg"
-!
-
-compiled_classNamesForPlatform
- "answer the classes to be compiled only for the current platformName"
-
- ^ self compiled_classNamesForPlatform:OperatingSystem platformName
-!
-
-compiled_classNamesForPlatform:platformName
- "answer the classes to be compiled only for platformName
- platformName is one of #unix, #win32 (OperatingSystem platformName)"
-
- ^ self
- classNamesForWhich:[:nm :attr |
- (attr includes:#autoload) not and:[attr includes:platformName]
- ].
-
- "Created: / 07-08-2006 / 19:02:57 / fm"
- "Modified: / 07-08-2006 / 21:25:25 / fm"
- "Modified: / 09-10-2006 / 13:30:08 / cg"
-!
-
-compiled_classNames_common
- "classes to be compiled for any platform"
-
- ^ self
- classNamesForWhich:[:nm :attr |
- attr isEmptyOrNil
- ].
-
- "Created: / 18-08-2006 / 13:37:51 / cg"
-!
-
-compiled_classNames_unix
- "class, only to be compiled under unix"
-
- ^ self compiled_classNamesForPlatform:#unix.
-
- "Created: / 18-08-2006 / 13:37:51 / cg"
-!
-
-compiled_classNames_windows
- "class, only to be compiled under windows"
-
- ^ self compiled_classNamesForPlatform:#win32.
-
- "Created: / 18-08-2006 / 13:37:56 / cg"
-!
-
extensionMethodNames
"list class/selector pairs of extensions.
- A correponding method with real names is generated in my subclasses"
-
+ A correponding method with real names must be present in my concrete subclasses"
+
+ "/ should this be a subclassResponsibility here ?
^ #()
"Modified: / 17-08-2006 / 20:49:51 / cg"
@@ -2668,304 +2720,7 @@
"Created: / 07-09-2006 / 17:07:00 / cg"
! !
-!ProjectDefinition class methodsFor:'file templates'!
-
-bc_dot_mak
- "answer a template for the bc.mak makefile.
- Any variable definition %(Variable) will be later replaced by the mapping.
- $% characters have to be duplicated.
- Only needed for WIN"
-
- ^ self subclassResponsibility
-!
-
-bmake_dot_mak
- "the template code for the bmake.bat file"
-
- ^
-'@REM -------
-@REM make using borland bcc
-@REM type bmake, and wait...
-@REM do not edit - automatically generated from ProjectDefinition
-@REM -------
-make.exe -N -f bc.mak %%1 %%2
-
-%(SUBPROJECT_BMAKE_CALLS)
-'
-
- "Created: / 17-08-2006 / 20:04:14 / cg"
- "Modified: / 14-09-2006 / 19:46:40 / cg"
-!
-
-classLine_libInit_dot_cc
-
-^'_%(CLASS)_Init(pass,__pRT__,snd);'
-
- "Created: / 08-08-2006 / 12:51:44 / fm"
- "Modified: / 08-08-2006 / 15:46:05 / fm"
-!
-
-lcmake_dot_mak
- "the template code for the lcmake.bat file"
-
- ^
-'@REM -------
-@REM make using lcc compiler
-@REM type lcmake, and wait...
-@REM do not edit - automatically generated from ProjectDefinition
-@REM -------
-make.exe -N -f bc.mak USELCC=1 %%1 %%2
-
-%(SUBPROJECT_LCCMAKE_CALLS)
-'
-!
-
-make_dot_proto
- "the template code for the make.proto file"
-
- ^ self subclassResponsibility
-!
-
-make_dot_spec
-
-^
-'# $','Header','$
-#
-# DO NOT EDIT
-# automagically generated from the projectDefinition: ',self name,'.
-#
-# Warning: once you modify this file, do not rerun
-# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
-#
-# This file contains specifications which are common to all platforms.
-#
-
-# Do NOT CHANGE THESE DEFINITIONS
-# (otherwise, ST/X will have a hard time to find out the packages location from its packageID,
-# to find the source code of a class and to find the library for a package)
-MODULE=%(MODULE)
-MODULE_DIR=%(MODULE_DIRECTORY)
-PACKAGE=$(MODULE):$(MODULE_DIR)
-
-
-# Argument(s) to the stc compiler (stc --usage).
-# -H. : create header files locally
-# (if removed, they will be created as common
-# -Pxxx : defines the package
-# -Zxxx : a prefix for variables within the classLib
-# -Dxxx : defines passed to to CC for inline C-code
-# -Ixxx : include path passed to CC for inline C-code
-# +optspace : optimized for space
-# +optspace2 : optimized more for space
-# +optspace3 : optimized even more for space
-# +optinline : generate inline code for some ST constructs
-# +inlineNew : additionally inline new
-# +inlineMath : additionally inline some floatPnt math stuff
-#
-# ********** OPTIONAL: MODIFY the next line(s) ***
-# STCLOCALOPTIMIZATIONS=+optinline +inlineNew
-# STCLOCALOPTIMIZATIONS=+optspace3
-STCLOCALOPTIMIZATIONS=%(STCOPTIMIZATIONOPTIONS)
-
-
-# Argument(s) to the stc compiler (stc --usage).
-# -warn : no warnings
-# -warnNonStandard : no warnings about ST/X extensions
-# -warnEOLComments : no warnings about EOL comment extension
-# -warnPrivacy : no warnings about privateClass extension
-#
-# ********** OPTIONAL: MODIFY the next line(s) ***
-# STCWARNINGS=-warn
-# STCWARNINGS=-warnNonStandard
-# STCWARNINGS=-warnEOLComments
-STCWARNINGS=%(STCWARNINGOPTIONS)
-
-%(OBJECTS)
-'
-
- "Created: / 08-08-2006 / 19:31:29 / fm"
- "Modified: / 09-08-2006 / 15:10:57 / fm"
- "Modified: / 30-08-2006 / 19:07:26 / cg"
-!
-
-objectLine_make_dot_spec
-
- ^' $(OUTDIR)%(CLASSFILE).$(O) \'
-
- "Created: / 08-08-2006 / 20:16:46 / fm"
- "Modified: / 23-08-2006 / 11:11:38 / cg"
-!
-
-packageName_dot_rc
- "the template code for the <libName>.rc file.
- Only used for WIN"
-
-^
-'//
-// DO NOT EDIT
-// automagically generated from the projectDefinition: ',self name,'.
-//
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION %(FILE_VERSION_COMMASEPARATED)
- PRODUCTVERSION %(PRODUCT_VERSION_COMMASEPARATED)
- FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE
- FILEFLAGS VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
- FILEOS VOS_NT_WINDOWS32
- FILETYPE %(FILETYPE)
- FILESUBTYPE VS_USER_DEFINED
-
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904E4"
- BEGIN
- VALUE "CompanyName", "%(COMPANY_NAME)\0"
- VALUE "FileDescription", "%(FILE_DESCRIPTION)\0"
- VALUE "FileVersion", "%(FILE_VERSION)\0"
- VALUE "InternalName", "%(INTERNAL_NAME)\0"
-%(LEGAL_COPYRIGHT_LINE)
- VALUE "ProductName", "%(PRODUCT_NAME)\0"
- VALUE "ProductVersion", "%(PRODUCT_VERSION)\0"
- VALUE "ProductDate", "%(PRODUCT_DATE)\0"
- END
-
- END
-
- BLOCK "VarFileInfo"
- BEGIN // Language | Translation
- VALUE "Translation", 0x409, 0x4E4 // U.S. English, Windows Multilingual
- END
-END
-'
- "
- stx_libbasic3 packageName_dot_rc
- stx_libbasic3 generate_packageName_dot_rc
- "
-
- "Created: / 08-08-2006 / 19:31:29 / fm"
- "Modified: / 09-08-2006 / 15:10:57 / fm"
- "Modified: / 23-08-2006 / 01:32:23 / cg"
-!
-
-vcmake_dot_mak
- "the template code for the vcmake.bat file"
-
- ^
-'@REM -------
-@REM make using microsoft visual c
-@REM type vcmake, and wait...
-@REM do not edit - automatically generated from ProjectDefinition
-@REM -------
-make.exe -N -f bc.mak USEVC=1 %%1 %%2
-
-%(SUBPROJECT_VCMAKE_CALLS)
-'
-! !
-
-!ProjectDefinition class methodsFor:'loading'!
-
-load
- "load the project
- Answer true, if new classes have been installed for this package,
- false if the package's classes have been already present."
-
- ^ self loadAsAutoloaded:false.
-!
-
-loadAsAutoloaded:asAutoloaded
- "load the project.
- If asAutoloaded == true, install all new classes as autoloaded.
- Answer true, if new classes have been installed for this package,
- false if the package's classes have been already present."
-
- |newStuffHasBeenLoaded meOrMySecondIncarnation|
-
- self projectIsLoaded ifTrue:[^ false].
- thisContext isRecursive ifTrue:[^ false]. "/ avoid endless loops
-
- self checkPrerequisitesForLoading.
-
- newStuffHasBeenLoaded := false.
-
- (self infoPrinting and:[Smalltalk silentLoading not]) ifTrue:[
- "/ thisContext fullPrintAll.
- Transcript show:'loading '.
- asAutoloaded ifTrue:[
- Transcript show:'as autoloaded '.
- ].
- Transcript showCR:self name.
- ].
-
- self rememberOverwrittenExtensionMethods.
-
- self activityNotification:'Executing pre-load action'.
- self preLoadAction.
-
- meOrMySecondIncarnation := self.
-
- Class withoutUpdatingChangesDo:[
- self activityNotification:'Loading prerequisities'.
- self loadPreRequisitesAsAutoloaded:asAutoloaded.
- asAutoloaded ifFalse:[
- self loadClassLibrary.
- "/ could have overloaded my first incarnation
- meOrMySecondIncarnation := (Smalltalk at:(self name)) ? self.
- meOrMySecondIncarnation ~~ self ifTrue:[
- meOrMySecondIncarnation fetchSlotsFrom:self.
- ].
- ].
-
- self activityNotification:'Loading extensions'.
- newStuffHasBeenLoaded := newStuffHasBeenLoaded | meOrMySecondIncarnation loadExtensions.
- self activityNotification:'Loading classes'.
- newStuffHasBeenLoaded := newStuffHasBeenLoaded | (meOrMySecondIncarnation loadAllClassesAsAutoloaded:asAutoloaded).
- self activityNotification:'Loading sub projects'.
- meOrMySecondIncarnation loadSubProjectsAsAutoloaded:asAutoloaded.
- ].
- self activityNotification:'Executing post-load action'.
- meOrMySecondIncarnation postLoadAction.
-
- meOrMySecondIncarnation projectIsLoaded:true.
-
- ^ newStuffHasBeenLoaded
-
- "Created: / 17-08-2006 / 01:01:41 / cg"
- "Modified: / 21-11-2006 / 15:07:09 / cg"
- "Modified: / 30-10-2008 / 08:16:21 / Jan Vrany <vranyj1@fel.cvut.cz>"
- "Modified: / 22-08-2009 / 12:02:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-unloadPackage
- "unload the project.
- Fails if there are still instances of any of my classes in the system"
-
- self projectIsLoaded ifFalse:[^ false].
- thisContext isRecursive ifTrue:[^ false].
-
- (self infoPrinting and:[Smalltalk silentLoading not]) ifTrue:[
- "/ thisContext fullPrintAll.
- Transcript show:'unloading '; showCR:self name.
- ].
-
- self activityNotification:'Executing pre-unload action'.
- self preUnloadAction.
-
- self activityNotification:'Restoring original methods'.
- self restoreOverwrittenExtensionMethods.
-
- Class withoutUpdatingChangesDo:[
- self activityNotification:'Unloading sunprojects'.
- self unloadSubProjects.
-
- self activityNotification:'Unloading classes'.
- self unloadClassLibrary.
- self unloadAllClasses.
- ].
- self projectIsLoaded:false.
- ^ true
-! !
-
-!ProjectDefinition class methodsFor:'mappings'!
+!ProjectDefinition class methodsFor:'file mappings'!
bc_dot_mak_mappings
|d|
@@ -3130,7 +2885,7 @@
replaceAny:':' with:$_
! !
-!ProjectDefinition class methodsFor:'mappings support'!
+!ProjectDefinition class methodsFor:'file mappings support'!
commonSymbolsFlag
"only for libraries"
@@ -3678,6 +3433,327 @@
]
! !
+!ProjectDefinition class methodsFor:'file templates'!
+
+bc_dot_mak
+ "answer a template for the bc.mak makefile.
+ Any variable definition %(Variable) will be later replaced by the mapping.
+ $% characters have to be duplicated.
+ Only needed for WIN"
+
+ ^ self subclassResponsibility
+!
+
+bmake_dot_mak
+ "the template code for the bmake.bat file"
+
+ ^
+'@REM -------
+@REM make using borland bcc
+@REM type bmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+make.exe -N -f bc.mak %%1 %%2
+
+%(SUBPROJECT_BMAKE_CALLS)
+'
+
+ "Created: / 17-08-2006 / 20:04:14 / cg"
+ "Modified: / 14-09-2006 / 19:46:40 / cg"
+!
+
+classLine_libInit_dot_cc
+
+^'_%(CLASS)_Init(pass,__pRT__,snd);'
+
+ "Created: / 08-08-2006 / 12:51:44 / fm"
+ "Modified: / 08-08-2006 / 15:46:05 / fm"
+!
+
+lcmake_dot_mak
+ "the template code for the lcmake.bat file"
+
+ ^
+'@REM -------
+@REM make using lcc compiler
+@REM type lcmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+make.exe -N -f bc.mak USELCC=1 %%1 %%2
+
+%(SUBPROJECT_LCCMAKE_CALLS)
+'
+!
+
+make_dot_proto
+ "the template code for the make.proto file"
+
+ ^ self subclassResponsibility
+!
+
+make_dot_spec
+
+^
+'# $','Header','$
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: ',self name,'.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# This file contains specifications which are common to all platforms.
+#
+
+# Do NOT CHANGE THESE DEFINITIONS
+# (otherwise, ST/X will have a hard time to find out the packages location from its packageID,
+# to find the source code of a class and to find the library for a package)
+MODULE=%(MODULE)
+MODULE_DIR=%(MODULE_DIRECTORY)
+PACKAGE=$(MODULE):$(MODULE_DIR)
+
+
+# Argument(s) to the stc compiler (stc --usage).
+# -H. : create header files locally
+# (if removed, they will be created as common
+# -Pxxx : defines the package
+# -Zxxx : a prefix for variables within the classLib
+# -Dxxx : defines passed to to CC for inline C-code
+# -Ixxx : include path passed to CC for inline C-code
+# +optspace : optimized for space
+# +optspace2 : optimized more for space
+# +optspace3 : optimized even more for space
+# +optinline : generate inline code for some ST constructs
+# +inlineNew : additionally inline new
+# +inlineMath : additionally inline some floatPnt math stuff
+#
+# ********** OPTIONAL: MODIFY the next line(s) ***
+# STCLOCALOPTIMIZATIONS=+optinline +inlineNew
+# STCLOCALOPTIMIZATIONS=+optspace3
+STCLOCALOPTIMIZATIONS=%(STCOPTIMIZATIONOPTIONS)
+
+
+# Argument(s) to the stc compiler (stc --usage).
+# -warn : no warnings
+# -warnNonStandard : no warnings about ST/X extensions
+# -warnEOLComments : no warnings about EOL comment extension
+# -warnPrivacy : no warnings about privateClass extension
+#
+# ********** OPTIONAL: MODIFY the next line(s) ***
+# STCWARNINGS=-warn
+# STCWARNINGS=-warnNonStandard
+# STCWARNINGS=-warnEOLComments
+STCWARNINGS=%(STCWARNINGOPTIONS)
+
+%(OBJECTS)
+'
+
+ "Created: / 08-08-2006 / 19:31:29 / fm"
+ "Modified: / 09-08-2006 / 15:10:57 / fm"
+ "Modified: / 30-08-2006 / 19:07:26 / cg"
+!
+
+objectLine_make_dot_spec
+
+ ^' $(OUTDIR)%(CLASSFILE).$(O) \'
+
+ "Created: / 08-08-2006 / 20:16:46 / fm"
+ "Modified: / 23-08-2006 / 11:11:38 / cg"
+!
+
+packageName_dot_rc
+ "the template code for the <libName>.rc file.
+ Only used for WIN"
+
+^
+'//
+// DO NOT EDIT
+// automagically generated from the projectDefinition: ',self name,'.
+//
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION %(FILE_VERSION_COMMASEPARATED)
+ PRODUCTVERSION %(PRODUCT_VERSION_COMMASEPARATED)
+ FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE
+ FILEFLAGS VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
+ FILEOS VOS_NT_WINDOWS32
+ FILETYPE %(FILETYPE)
+ FILESUBTYPE VS_USER_DEFINED
+
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ BEGIN
+ VALUE "CompanyName", "%(COMPANY_NAME)\0"
+ VALUE "FileDescription", "%(FILE_DESCRIPTION)\0"
+ VALUE "FileVersion", "%(FILE_VERSION)\0"
+ VALUE "InternalName", "%(INTERNAL_NAME)\0"
+%(LEGAL_COPYRIGHT_LINE)
+ VALUE "ProductName", "%(PRODUCT_NAME)\0"
+ VALUE "ProductVersion", "%(PRODUCT_VERSION)\0"
+ VALUE "ProductDate", "%(PRODUCT_DATE)\0"
+ END
+
+ END
+
+ BLOCK "VarFileInfo"
+ BEGIN // Language | Translation
+ VALUE "Translation", 0x409, 0x4E4 // U.S. English, Windows Multilingual
+ END
+END
+'
+ "
+ stx_libbasic3 packageName_dot_rc
+ stx_libbasic3 generate_packageName_dot_rc
+ "
+
+ "Created: / 08-08-2006 / 19:31:29 / fm"
+ "Modified: / 09-08-2006 / 15:10:57 / fm"
+ "Modified: / 23-08-2006 / 01:32:23 / cg"
+!
+
+vcmake_dot_mak
+ "the template code for the vcmake.bat file"
+
+ ^
+'@REM -------
+@REM make using microsoft visual c
+@REM type vcmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+make.exe -N -f bc.mak USEVC=1 %%1 %%2
+
+%(SUBPROJECT_VCMAKE_CALLS)
+'
+! !
+
+!ProjectDefinition class methodsFor:'loading'!
+
+ensureFullyLoaded
+ "ensure that all classes and extensions are loaded properly.
+ This is normally no problem for compiled classLibs - however, if a package
+ has only be installedAsAutoloaded, some classes might want to ensure that
+ when being loaded themself."
+
+ self hasAllExtensionsLoaded ifFalse:[
+ self halt.
+ ].
+ self hasAllClassesFullyLoaded ifFalse:[
+ self hasAllClassesLoaded ifFalse:[
+ self halt
+ ].
+ self classes do:[:cls | cls load ].
+ ].
+
+ "
+ stx_libbasic ensureFullyLoaded
+ "
+!
+
+load
+ "load the project
+ Answer true, if new classes have been installed for this package,
+ false if the package's classes have been already present."
+
+ ^ self loadAsAutoloaded:false.
+!
+
+loadAsAutoloaded:asAutoloaded
+ "load the project.
+ If asAutoloaded == true, install all new classes as autoloaded.
+ Answer true, if new classes have been installed for this package,
+ false if the package's classes have been already present."
+
+ |newStuffHasBeenLoaded meOrMySecondIncarnation|
+
+ self projectIsLoaded ifTrue:[^ false].
+ thisContext isRecursive ifTrue:[^ false]. "/ avoid endless loops
+
+ self checkPrerequisitesForLoading.
+
+ newStuffHasBeenLoaded := false.
+
+ (self infoPrinting and:[Smalltalk silentLoading not]) ifTrue:[
+ "/ thisContext fullPrintAll.
+ Transcript show:'loading '.
+ asAutoloaded ifTrue:[
+ Transcript show:'as autoloaded '.
+ ].
+ Transcript showCR:self name.
+ ].
+
+ self rememberOverwrittenExtensionMethods.
+
+ self activityNotification:'Executing pre-load action'.
+ self preLoadAction.
+
+ meOrMySecondIncarnation := self.
+
+ Class withoutUpdatingChangesDo:[
+ self activityNotification:'Loading prerequisities'.
+ self loadPreRequisitesAsAutoloaded:asAutoloaded.
+ asAutoloaded ifFalse:[
+ self loadClassLibrary.
+ "/ could have overloaded my first incarnation
+ meOrMySecondIncarnation := (Smalltalk at:(self name)) ? self.
+ meOrMySecondIncarnation ~~ self ifTrue:[
+ meOrMySecondIncarnation fetchSlotsFrom:self.
+ ].
+ ].
+
+ self activityNotification:'Loading extensions'.
+ newStuffHasBeenLoaded := newStuffHasBeenLoaded | meOrMySecondIncarnation loadExtensions.
+ self activityNotification:'Loading classes'.
+ newStuffHasBeenLoaded := newStuffHasBeenLoaded | (meOrMySecondIncarnation loadAllClassesAsAutoloaded:asAutoloaded).
+ self activityNotification:'Loading sub projects'.
+ meOrMySecondIncarnation loadSubProjectsAsAutoloaded:asAutoloaded.
+ ].
+ self activityNotification:'Executing post-load action'.
+
+ "/ mhmh - already done for dll-loaded packages
+ "/ meOrMySecondIncarnation initializeAllClasses.
+ meOrMySecondIncarnation postLoadAction.
+
+ meOrMySecondIncarnation projectIsLoaded:true.
+
+ ^ newStuffHasBeenLoaded
+
+ "Created: / 17-08-2006 / 01:01:41 / cg"
+ "Modified: / 21-11-2006 / 15:07:09 / cg"
+ "Modified: / 30-10-2008 / 08:16:21 / Jan Vrany <vranyj1@fel.cvut.cz>"
+ "Modified: / 22-08-2009 / 12:02:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+unloadPackage
+ "unload the project.
+ Fails if there are still instances of any of my classes in the system"
+
+ self projectIsLoaded ifFalse:[^ false].
+ thisContext isRecursive ifTrue:[^ false].
+
+ (self infoPrinting and:[Smalltalk silentLoading not]) ifTrue:[
+ "/ thisContext fullPrintAll.
+ Transcript show:'unloading '; showCR:self name.
+ ].
+
+ self activityNotification:'Executing pre-unload action'.
+ self preUnloadAction.
+
+ self activityNotification:'Restoring original methods'.
+ self restoreOverwrittenExtensionMethods.
+
+ Class withoutUpdatingChangesDo:[
+ self activityNotification:'Unloading sunprojects'.
+ self unloadSubProjects.
+
+ self activityNotification:'Unloading classes'.
+ self unloadClassLibrary.
+ self unloadAllClasses.
+ ].
+ self projectIsLoaded:false.
+ ^ true
+! !
+
!ProjectDefinition class methodsFor:'misc ui support'!
iconInBrowserSymbol
@@ -3694,6 +3770,37 @@
!ProjectDefinition class methodsFor:'private'!
+additionalClassAttributesFor: aClass
+ "Answers additional set of class attributes for given class
+ Individual project definitions may override this method, but
+ overriding method should always merge its attributes with result
+ of 'super additionalClassAttributesFor: aClass'.
+
+ Here, we add #autoload attributes to all test cases and
+ test resources, as they are not neccessary for the package
+ and should not be compiled (because of unwanted dependency
+ on stx:goodies/sunit package)
+ "
+
+ (aClass inheritsFrom: TestCase) ifTrue:[^#(autoload)].
+ (aClass inheritsFrom: TestResource) ifTrue:[^#(autoload)].
+
+ "No additional attributes"
+ ^#()
+
+ "
+ stx_libbasic additionalClassAttributesFor: Object
+ stx_libtool additionalClassAttributesFor: Tools::NavigationHistoryTests
+ stx_goodies_sunit additionalClassAttributesFor: TestCase
+
+
+ stx_libtool classNamesAndAttributes_code_ignoreOldEntries:true ignoreOldDefinition: true
+
+ "
+
+ "Created: / 26-10-2009 / 12:54:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
checkIfClassesArePresent
"check if all classes defined by this project are present and
offer a dialog to abort the current operation if not"
@@ -3733,12 +3840,48 @@
^ true
!
+classNamesAndAttributesAsSpecArray
+ "given a classNamesAndAttributes array, make this a spec array (array of arrays).
+ This decompresses class-name entries into a one-element array for easier processing"
+
+ ^ self classNamesAndAttributes
+ collect:[:entry |
+ entry isArray ifTrue:[
+ entry first isSymbol ifTrue:[
+ entry
+ ] ifFalse:[
+ (Array with:entry first asSymbol) , (entry copyFrom:2)
+ ].
+ ] ifFalse:[
+ Array with:entry asSymbol.
+ ]].
+
+ "Created: / 19-02-2007 / 16:11:53 / cg"
+!
+
classNamesAndAttributesDo: aBlock
self namesAndAttributesIn:(self classNamesAndAttributes) do: aBlock
"Modified: / 22-08-2006 / 18:20:21 / cg"
!
+classNamesAndAttributesFromSpecArray:aSpecArray
+ "given a spec array (array of arrays), make this a classNamesAndAttributes array
+ as stored literally in the method.
+ This compresses single element array-elements into plain names
+ (to save code in the compiled binaries)"
+
+ ^ aSpecArray
+ collect:[:entry |
+ (entry isArray and:[entry size == 1]) ifTrue:[
+ entry first
+ ] ifFalse:[
+ entry
+ ]].
+
+ "Created: / 19-02-2007 / 16:12:32 / cg"
+!
+
compile:someCode categorized:category
Class packageQuerySignal
answer:self package
@@ -4091,13 +4234,17 @@
typeOrNil = GUIApplicationType ifTrue:[
self compile:'isGUIApplication\ ^ true' withCRs
categorized:'description'.
+ self superclass: ApplicationDefinition.
^ self
].
typeOrNil = NonGUIApplicationType ifTrue:[
self compile:'isGUIApplication\ ^ false' withCRs
categorized:'description'.
+ self superclass: ApplicationDefinition.
^ self
- ].
+ ].
+ self theMetaclass removeSelector: #isGUIApplication.
+ self superclass: LibraryDefinition.
^ self.
"Created: / 23-08-2006 / 14:26:10 / cg"
@@ -4245,6 +4392,7 @@
classNamesToLoad := OrderedCollection new.
classNamesToAutoload := OrderedCollection new.
+ hasClassesToLoad := false.
self classNamesAndAttributesDo:[:eachClassname :eachAttributes | |eachClassnameSym isAutoload cls|
eachClassnameSym := eachClassname asSymbol.
isAutoload := asAutoloaded or:[eachAttributes includes:#autoload].
@@ -4334,7 +4482,7 @@
loadedClasses do:[:eachLoadedClass |
"do not initialize, if initialize method is inherited"
- (eachLoadedClass theMetaclass implements:#initialize) ifTrue:[
+ (eachLoadedClass theMetaclass includesSelector:#initialize) ifTrue:[
eachLoadedClass initialize
].
].
@@ -4423,6 +4571,8 @@
!ProjectDefinition class methodsFor:'private-prerequisites'!
addReferencesToClassesFromGlobalsIn:aSetOfClasses to:usedClassReasons
+ "helper for searchForPreRequisites"
+
aSetOfClasses
do:[:aClass |
self
@@ -4442,6 +4592,8 @@
!
addReferencesToClassesFromGlobalsInMethods:someMethods to:usedClassReasons
+ "helper for searchForPreRequisites"
+
someMethods do:[:method |
|resources|
@@ -4536,60 +4688,128 @@
!ProjectDefinition class methodsFor:'queries'!
-definitionClassForPackage:aPackageID
- ^ self definitionClassForPackage:aPackageID createIfAbsent:false
-
- "Modified: / 17-08-2006 / 14:33:35 / cg"
-!
-
-definitionClassForPackage:aPackageID createIfAbsent:doCreateIfAbsent
- ^ self definitionClassForPackage:aPackageID createIfAbsent:doCreateIfAbsent projectType:nil
-
- "Modified: / 23-08-2006 / 14:29:15 / cg"
-!
-
-definitionClassForPackage: aPackageID createIfAbsent: doCreateIfAbsent projectType:typeOrNil
- |packageDefinitionClassName class|
-
- packageDefinitionClassName := ProjectDefinition initialClassNameForDefinitionOf:aPackageID.
- class := Smalltalk classNamed:packageDefinitionClassName.
- class isNil ifTrue:[
- doCreateIfAbsent ifTrue:[
- class := self newForPackage:aPackageID.
- "setup before prerequisites are defined"
- class setupForType:typeOrNil.
- ].
- ] ifFalse:[
- typeOrNil notNil ifTrue:[
- class setupForType:typeOrNil.
+allClassNames
+ ^ self classNamesForWhich:[:nm :attr | true ].
+!
+
+autoloaded_classNames
+ ^ self classNamesForWhich:[:nm :attr | attr notEmptyOrNil and:[attr includes:#autoload]].
+
+ "Modified: / 07-08-2006 / 21:25:25 / fm"
+ "Created: / 30-08-2007 / 18:48:09 / cg"
+!
+
+classNames
+ "answer an array containing all the class names of the project's classes"
+
+ ^ self classNamesAndAttributesAsSpecArray collect:[:entry | entry first].
+
+ "
+ stx_libhtml classNames
+ stx_libhtml classNamesAndAttributesAsSpecArray
+ "
+!
+
+classNamesForWhich:aBlock
+ "a correponding method with real names is generated in my subclasses"
+
+ |coll|
+
+ coll := OrderedCollection new.
+ self classNamesAndAttributesDo:[:nm :attributes |
+ (aBlock value:nm value:attributes) ifTrue:[
+ coll add:nm.
].
].
- ^ class
-
- "Created: / 23-08-2006 / 14:29:21 / cg"
- "Modified: / 23-08-2006 / 15:35:26 / cg"
-!
-
-definitionClassForPackage:newProjectID projectType:typeOrNil createIfAbsent:createIfAbsent
- ^ (self definitionClassForType:typeOrNil)
- definitionClassForPackage:newProjectID
- createIfAbsent:createIfAbsent
- projectType:typeOrNil
-
- "Created: / 23-08-2006 / 14:28:53 / cg"
-!
-
-definitionClassForType: type
- "answer the class that describes a give project type"
-
- (type = LibraryType) ifTrue:[ ^ LibraryDefinition ].
- (type = GUIApplicationType) ifTrue:[ ^ ApplicationDefinition ].
- (type = NonGUIApplicationType) ifTrue:[ ^ ApplicationDefinition ].
- (type = 'Application') ifTrue:[ ^ ApplicationDefinition ].
- self error:'unknown project type'.
-
- "Created: / 17-08-2006 / 14:46:28 / cg"
- "Modified: / 23-08-2006 / 13:49:27 / cg"
+ ^ coll
+
+ "Created: / 07-08-2006 / 19:02:57 / fm"
+ "Modified: / 07-08-2006 / 21:25:25 / fm"
+ "Modified: / 17-08-2006 / 20:47:20 / cg"
+!
+
+classes
+ "list my classes.
+ Project must be loaded - otherwise an error is reported here.
+ Use #classNames if you are only interested in the names"
+
+ ^ self classNames collect:[:nm | Smalltalk at:nm ifAbsent:[self error:'Missing class']]
+
+ "
+ stx_libbasic3 classNames
+ stx_libbasic3 classes
+ "
+!
+
+compiled_classNames
+ ^ self classNamesForWhich:[:nm :attr | attr isEmptyOrNil or:[(attr includes:#autoload) not]].
+
+ "Created: / 07-08-2006 / 19:02:57 / fm"
+ "Modified: / 07-08-2006 / 21:25:25 / fm"
+ "Modified: / 21-08-2006 / 18:48:31 / cg"
+!
+
+compiled_classNamesForPlatform
+ "answer the classes to be compiled only for the current platformName"
+
+ ^ self compiled_classNamesForPlatform:OperatingSystem platformName
+!
+
+compiled_classNamesForPlatform:platformName
+ "answer the classes to be compiled only for platformName
+ platformName is one of #unix, #win32 (OperatingSystem platformName)"
+
+ ^ self
+ classNamesForWhich:[:nm :attr |
+ (attr includes:#autoload) not and:[attr includes:platformName]
+ ].
+
+ "Created: / 07-08-2006 / 19:02:57 / fm"
+ "Modified: / 07-08-2006 / 21:25:25 / fm"
+ "Modified: / 09-10-2006 / 13:30:08 / cg"
+!
+
+compiled_classNames_common
+ "classes to be compiled for any platform"
+
+ ^ self
+ classNamesForWhich:[:nm :attr |
+ attr isEmptyOrNil
+ ].
+
+ "Created: / 18-08-2006 / 13:37:51 / cg"
+!
+
+compiled_classNames_unix
+ "class, only to be compiled under unix"
+
+ ^ self compiled_classNamesForPlatform:#unix.
+
+ "Created: / 18-08-2006 / 13:37:51 / cg"
+!
+
+compiled_classNames_windows
+ "class, only to be compiled under windows"
+
+ ^ self compiled_classNamesForPlatform:#win32.
+
+ "Created: / 18-08-2006 / 13:37:56 / cg"
+!
+
+extensionMethods
+ "list my extension methods.
+ Project must be loaded - otherwise an error is reported here.
+ Use #extensionMethodsNames if you are only interested in the names"
+
+ ^ self extensionMethodNames
+ pairWiseCollect:[:className :selector |
+ (Smalltalk classNamed:className) compiledMethodAt:selector.
+ ].
+
+ "
+ stx_libbasic2 extensionMethodNames
+ stx_libbasic2 extensionMethods
+ "
!
hasAllClassesFullyLoaded
@@ -4697,10 +4917,34 @@
"Created: / 14-09-2006 / 14:19:35 / cg"
!
+hasPostLoadAction
+ "/ true if postLoadAction has been redefined
+ ^ (self class whichClassIncludesSelector:#postLoadAction) theNonMetaclass isAbstract not
+!
+
+hasPostUnloadAction
+ "/ true if postUnloadAction has been redefined
+ ^ (self class whichClassIncludesSelector:#postUnloadAction) theNonMetaclass isAbstract not
+!
+
+hasPreLoadAction
+ "/ true if preLoadAction has been redefined
+ ^ (self class whichClassIncludesSelector:#preLoadAction) theNonMetaclass isAbstract not
+!
+
+hasPreUnloadAction
+ "/ true if preUnloadAction has been redefined
+ ^ (self class whichClassIncludesSelector:#preUnloadAction) theNonMetaclass isAbstract not
+!
+
isFullyLoaded
^ self hasAllCompiledClassesFullyLoaded and:[self hasAllClassesLoaded and:[self hasAllExtensionsLoaded]]
"Created: / 24-10-2006 / 23:52:23 / cg"
+!
+
+projectType
+ ^ self subclassResponsibility
! !
!ProjectDefinition class methodsFor:'queries-privacy'!
@@ -4751,6 +4995,10 @@
!ProjectDefinition class methodsFor:'testing'!
+isAbstract
+ ^ self == ProjectDefinition
+!
+
isApplicationDefinition
^ false
@@ -4758,6 +5006,12 @@
"Modified: / 20-09-2006 / 14:59:56 / cg"
!
+isConsoleApplication
+ ^ false
+
+ "Created: / 20-09-2006 / 14:59:49 / cg"
+!
+
isGUIApplication
^ false
@@ -4783,15 +5037,12 @@
!ProjectDefinition class methodsFor:'documentation'!
version
- ^ '$Id: ProjectDefinition.st 10474 2009-10-26 21:51:17Z vranyj1 $'
+ ^ '$Id: ProjectDefinition.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.258 2009/10/19 20:12:52 cg Exp §'
-!
-
-version_SVN
- ^ '$Id: ProjectDefinition.st 10474 2009-10-26 21:51:17Z vranyj1 $'
+ ^ '$Id: ProjectDefinition.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
ProjectDefinition initialize!
+
--- a/Query.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Query.st Thu Nov 05 14:41:30 2009 +0000
@@ -272,12 +272,13 @@
!Query class methodsFor:'documentation'!
version
- ^ '$Id: Query.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Query.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Query.st,v 1.13 2009/10/01 13:44:05 cg Exp §'
+ ^ '$Id: Query.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Query initialize!
+
--- a/QuerySignal.st Mon Oct 26 21:51:17 2009 +0000
+++ b/QuerySignal.st Thu Nov 05 14:41:30 2009 +0000
@@ -504,10 +504,11 @@
!QuerySignal class methodsFor:'documentation'!
version
- ^ '$Id: QuerySignal.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: QuerySignal.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/QuerySignal.st,v 1.44 2009/10/01 07:27:33 cg Exp §'
+ ^ '$Id: QuerySignal.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/ReadStream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/ReadStream.st Thu Nov 05 14:41:30 2009 +0000
@@ -828,10 +828,11 @@
!ReadStream class methodsFor:'documentation'!
version
- ^ '$Id: ReadStream.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: ReadStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/ReadStream.st,v 1.63 2009/10/08 08:43:59 cg Exp §'
+ ^ '$Id: ReadStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/SHA1Stream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/SHA1Stream.st Thu Nov 05 14:41:30 2009 +0000
@@ -682,12 +682,13 @@
!SHA1Stream class methodsFor:'documentation'!
version
- ^ '$Id: SHA1Stream.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: SHA1Stream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/SHA1Stream.st,v 1.16 2009/10/14 05:17:40 cg Exp §'
+ ^ '$Id: SHA1Stream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
SHA1Stream initialize!
+
--- a/SequenceableCollection.st Mon Oct 26 21:51:17 2009 +0000
+++ b/SequenceableCollection.st Thu Nov 05 14:41:30 2009 +0000
@@ -638,7 +638,6 @@
^ self replaceFrom:start to:stop with:anArray startingAt:repStart
! !
-
!SequenceableCollection methodsFor:'accessing'!
after:anObject
@@ -3783,7 +3782,7 @@
startIndex := 1.
endIndex := sz.
- [(startIndex < endIndex) and:[aCheckBlock value:(self at:startIndex)]] whileTrue:[
+ [(startIndex <= endIndex) and:[aCheckBlock value:(self at:startIndex)]] whileTrue:[
startIndex := startIndex + 1
].
[(endIndex > 1) and:[aCheckBlock value:(self at:endIndex)]] whileTrue:[
@@ -3798,7 +3797,8 @@
^ self copyFrom:startIndex to:endIndex
"
- ' foo ' trimForWhich:[:ch | ch isSeparator]
+ ' foo ' trimForWhich:[:ch | ch isSeparator]
+ ' ' trimForWhich:[:ch | ch isSeparator]
#(0 0 0 1 2 3 0 0 0) trimForWhich:[:e | e = 0]
"
!
@@ -3974,33 +3974,6 @@
"
!
-collect:aBlock as:aClass
- "like collect, but use an instance of aClass to collect the results.
- Also avoids the need for an extra intermediate collection which is created with
- the standard coding: 'self asXXXX collect:[...]"
-
- |newCollection
- sz "{ Class:SmallInteger }"|
-
- sz := self size.
- newCollection := (aClass new:sz) grow:sz.
- newCollection isSequenceable ifTrue:[
- 1 to:sz do:[:index |
- newCollection at:index put:(aBlock value:(self at:index)).
- ].
- ] ifFalse:[
- 1 to:sz do:[:index |
- newCollection add:(aBlock value:(self at:index)).
- ].
- ].
- ^ newCollection
-
- "
- #(one two three four five six) collect:[:element | element asUppercase] as:OrderedCollection
- 'abcdef' collect:[:char | char digitValue] as:ByteArray
- "
-!
-
do:aBlock
"evaluate the argument, aBlock for every element in the collection."
@@ -4462,7 +4435,11 @@
pairWiseDo:aTwoArgBlock
"evaluate the argument, aTwoArgBlock for every group of 2 elements in the collection.
An error will be reported, if the number of elements in the receiver
- is not a multiple of 2."
+ is not a multiple of 2.
+ CONFUSION ATTACK:
+ this is different from pairWiseDo:.
+ but the Squeak-pairsDo: does the same as our pairWiseDo:
+ (sigh: but we were first, so they should have adapted...)"
^ self inGroupsOf:2 do:aTwoArgBlock
@@ -5875,7 +5852,6 @@
"Created: 14.2.1997 / 16:13:03 / cg"
! !
-
!SequenceableCollection methodsFor:'searching'!
detect:aBlock startingAt:startIndex
@@ -7756,12 +7732,13 @@
!SequenceableCollection class methodsFor:'documentation'!
version
- ^ '$Id: SequenceableCollection.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: SequenceableCollection.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/SequenceableCollection.st,v 1.286 2009/10/19 10:20:21 cg Exp §'
+ ^ '$Id: SequenceableCollection.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
SequenceableCollection initialize!
+
--- a/Set.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Set.st Thu Nov 05 14:41:30 2009 +0000
@@ -227,6 +227,19 @@
"
#(1 2 3 4 5 6 7) asSet copyWithoutAll:#(3 5 7 9)
"
+!
+
+like:anObject
+ "Answer an object in the receiver that is equal to anObject,
+ nil if no such object is found.
+ Relies heavily on hash properties (i.e. that two object's hashes are equal
+ if the two object compare equal)"
+
+ ^ self elementAt:anObject ifAbsent:[ nil ]
+
+ "
+ (Set withAll:#(10.0 20.0 30.0 40.0)) like:20
+ "
! !
!Set methodsFor:'accessing'!
@@ -249,8 +262,7 @@
This may seem confusing at first - however, it is useful with
non-identitysets, to find an existing element, for a
given equal (but not identical) object.
- This is the same functionality as provided by the goodies/KeyedSet
- goody."
+ This is the same functionality as provided by the goodies/KeyedSet goody."
^ self elementAt:anObject ifAbsent:[^ self errorNotFound].
@@ -1121,7 +1133,12 @@
!Set class methodsFor:'documentation'!
version
- ^ '$Id: Set.st 10447 2009-06-14 13:09:55Z vranyj1 $'
+ ^ '$Id: Set.st 10477 2009-11-05 14:41:30Z vranyj1 $'
+!
+
+version_CVS
+ ^ '$Id: Set.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Set initialize!
+
--- a/SharedPool.st Mon Oct 26 21:51:17 2009 +0000
+++ b/SharedPool.st Thu Nov 05 14:41:30 2009 +0000
@@ -147,10 +147,11 @@
!SharedPool class methodsFor:'documentation'!
version
- ^ '$Id: SharedPool.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: SharedPool.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/SharedPool.st,v 1.8 2009/10/12 19:09:14 cg Exp §'
+ ^ '$Id: SharedPool.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Signal.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Signal.st Thu Nov 05 14:41:30 2009 +0000
@@ -982,10 +982,11 @@
!Signal class methodsFor:'documentation'!
version
- ^ '$Id: Signal.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Signal.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Signal.st,v 1.108 2009/10/01 07:38:26 cg Exp §'
+ ^ '$Id: Signal.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/SignalSet.st Mon Oct 26 21:51:17 2009 +0000
+++ b/SignalSet.st Thu Nov 05 14:41:30 2009 +0000
@@ -332,10 +332,11 @@
!SignalSet class methodsFor:'documentation'!
version
- ^ '$Id: SignalSet.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: SignalSet.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/SignalSet.st,v 1.45 2009/10/01 07:38:40 cg Exp §'
+ ^ '$Id: SignalSet.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Smalltalk.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Smalltalk.st Thu Nov 05 14:41:30 2009 +0000
@@ -1,6 +1,6 @@
"
COPYRIGHT (c) 1988 by Claus Gittinger
- All Rights Reserved
+ All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
@@ -37,7 +37,7 @@
copyright
"
COPYRIGHT (c) 1988 by Claus Gittinger
- All Rights Reserved
+ All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
@@ -67,150 +67,150 @@
[Instance variables:]
- none - all handling is done in the VM
+ none - all handling is done in the VM
[Class variables:]
- StartBlocks <Collection> blocks to be executed in a separate process after
- everything has been initialized. These blocks will
- be deleted after execution and therefore not be
- executed after an image restart. Initial processes
- (such as the Launcher) are usually started here.
- These blocks are added by smalltalk.rc/private.rc etc.
- via #addStartBlock during early initialization.
-
- ImageStartBlocks
- <Collection> blocks to be executed in a separate process after
- everything has been initialized. These blocks will be
- executed after an image restart.
- These blocks are usually added by smalltalk_r.rc etc.
-
- ExitBlocks <Collection> blocks to evaluate before system is
- left. Not currently used (GNU-ST compatibility).
-
- SystemPath <Collection> path to search for system files (sources, bitmaps etc)
- Set to a default here, but typically changed from some
- startup.rc file
-
- PackagePath <Collection> path to search for package.
- This is going to replace the above systemPath, and a classes
- resources will eventually searched in its package directory.
- This list defines the path, where packages are searched for,
- initially this is something like /opt/smalltalk/packages.
- Set to a default here, but typically changed from some
- startup.rc file
-
- StartupClass <Class> class and selector, where the system starts up
- StartupSelector <Symbol> (right after VM initialization)
- StartupArguments <Array> If an image is saved while those being nonNil,
- the image will come up there.
- Allows for customized images to be generated from a standard ST/X.
- StandAlone programs also set those during initialization.
-
- CommandLine <String> Unix (OS-) command line
-
- CommandName <String> the command (i.e. argv[0])
-
- CommandLineArguments <Array> Unix (OS-) command line arguments broken into words
- CommandName has been stripped off.
- (initially set by the VM)
-
- SilentLoading <Boolean> suppresses messages during fileIn and in compiler
- (can be set to true from a customized main.c)
-
- Initializing <Boolean> true while (re-)initializing
- Controls the behavior of certain error
- reporters (for example: suppress dialogBoxes)
- while the system is not yet fit for full operation.
-
- StandAlone <Boolean> true, if this is a standalone app;
- if true the process scheduler watches for
- which processes are still running, and
- exits ST/X, when the last non-background
- and non-system process exits.
- Can be set in an application-specific startup script,
- or, for standAlone programs, by C-code during initialization.
-
- HeadlessOperation if true, a non-existing Display connection
- <Boolean> will NOT lead to an error-exit during startup.
- Default is false.
- Can be set in an application-specific startup script,
- or, for standAlone programs, by C-code during initialization.
-
- LogDoits <Boolean> if true, doits are also logged in the changes
- file. Default is false, since the changes file
- may become huge if every tiny doIt is saved there ...
-
- LoadBinaries <Boolean> if true, we attempt to load classes rom a binary
- file, if present. If false, this is always suppressed.
-
- SaveEmergencyImage <Boolean> if true (the default), an emergency image
- is saved, if the main Display looses its
- connection. This is useful if you have a
- flaky display connection (serial line)
- and want to have your stuff saved automatically
- in case of a broken connection.
+ StartBlocks <Collection> blocks to be executed in a separate process after
+ everything has been initialized. These blocks will
+ be deleted after execution and therefore not be
+ executed after an image restart. Initial processes
+ (such as the Launcher) are usually started here.
+ These blocks are added by smalltalk.rc/private.rc etc.
+ via #addStartBlock during early initialization.
+
+ ImageStartBlocks
+ <Collection> blocks to be executed in a separate process after
+ everything has been initialized. These blocks will be
+ executed after an image restart.
+ These blocks are usually added by smalltalk_r.rc etc.
+
+ ExitBlocks <Collection> blocks to evaluate before system is
+ left. Not currently used (GNU-ST compatibility).
+
+ SystemPath <Collection> path to search for system files (sources, bitmaps etc)
+ Set to a default here, but typically changed from some
+ startup.rc file
+
+ PackagePath <Collection> path to search for package.
+ This is going to replace the above systemPath, and a classes
+ resources will eventually searched in its package directory.
+ This list defines the path, where packages are searched for,
+ initially this is something like /opt/smalltalk/packages.
+ Set to a default here, but typically changed from some
+ startup.rc file
+
+ StartupClass <Class> class and selector, where the system starts up
+ StartupSelector <Symbol> (right after VM initialization)
+ StartupArguments <Array> If an image is saved while those being nonNil,
+ the image will come up there.
+ Allows for customized images to be generated from a standard ST/X.
+ StandAlone programs also set those during initialization.
+
+ CommandLine <String> Unix (OS-) command line
+
+ CommandName <String> the command (i.e. argv[0])
+
+ CommandLineArguments <Array> Unix (OS-) command line arguments broken into words
+ CommandName has been stripped off.
+ (initially set by the VM)
+
+ SilentLoading <Boolean> suppresses messages during fileIn and in compiler
+ (can be set to true from a customized main.c)
+
+ Initializing <Boolean> true while (re-)initializing
+ Controls the behavior of certain error
+ reporters (for example: suppress dialogBoxes)
+ while the system is not yet fit for full operation.
+
+ StandAlone <Boolean> true, if this is a standalone app;
+ if true the process scheduler watches for
+ which processes are still running, and
+ exits ST/X, when the last non-background
+ and non-system process exits.
+ Can be set in an application-specific startup script,
+ or, for standAlone programs, by C-code during initialization.
+
+ HeadlessOperation if true, a non-existing Display connection
+ <Boolean> will NOT lead to an error-exit during startup.
+ Default is false.
+ Can be set in an application-specific startup script,
+ or, for standAlone programs, by C-code during initialization.
+
+ LogDoits <Boolean> if true, doits are also logged in the changes
+ file. Default is false, since the changes file
+ may become huge if every tiny doIt is saved there ...
+
+ LoadBinaries <Boolean> if true, we attempt to load classes rom a binary
+ file, if present. If false, this is always suppressed.
+
+ SaveEmergencyImage <Boolean> if true (the default), an emergency image
+ is saved, if the main Display looses its
+ connection. This is useful if you have a
+ flaky display connection (serial line)
+ and want to have your stuff saved automatically
+ in case of a broken connection.
strictly private classVariables (helpers):
- CachedClasses <Collection> known classes (cached for faster class enumeration)
-
- CachedAbbreviations
- <Dictionary> className to filename mappings
-
- RealSystemPath <Collection> cached collection of directories along the path
- which really exist. Caching avoids long checks
- for existing directories on broken NFS volumes.
-
- SourcePath <Collection> cached names of really existing directories
- These are remembered, as in NFS systems,
- ResourcePath the time to lookup files may become long
- BinaryPath (especially, if some directories are on machines
- FileInPath which are not up ...).
- Therefore, the set of really
- existing directories is cached when the SystemPath
- is walked the first time.
- A consequence is that you have to invoke
- flushSystemPath, when you create any of those
- directories while running
- (and want the running ST/X to look there)
+ CachedClasses <Collection> known classes (cached for faster class enumeration)
+
+ CachedAbbreviations
+ <Dictionary> className to filename mappings
+
+ RealSystemPath <Collection> cached collection of directories along the path
+ which really exist. Caching avoids long checks
+ for existing directories on broken NFS volumes.
+
+ SourcePath <Collection> cached names of really existing directories
+ These are remembered, as in NFS systems,
+ ResourcePath the time to lookup files may become long
+ BinaryPath (especially, if some directories are on machines
+ FileInPath which are not up ...).
+ Therefore, the set of really
+ existing directories is cached when the SystemPath
+ is walked the first time.
+ A consequence is that you have to invoke
+ flushSystemPath, when you create any of those
+ directories while running
+ (and want the running ST/X to look there)
[author:]
- Claus Gittinger
+ Claus Gittinger
[see also:]
- ObjectMemory
- StandaloneStartup
- GetOpt
- ReadEvalPrintLoop
+ ObjectMemory
+ StandaloneStartup
+ GetOpt
+ ReadEvalPrintLoop
"
!
readme_resources
"
What is a resource file:
- resource files contain language transformation and sometimes
- UI-look specifics such as icons etc.
+ resource files contain language transformation and sometimes
+ UI-look specifics such as icons etc.
Where are resources stored in the image:
- Resource files are only read on demand (i.e. when needed) and only read once
- i.e. they are cached in the image).
- The cached data is held in a per-class class-instVar named 'ClassResources'.
- With only a few exceptions, the only classes which need resources are the GUI
- classes under the SimpleView hierarchy.
+ Resource files are only read on demand (i.e. when needed) and only read once
+ i.e. they are cached in the image).
+ The cached data is held in a per-class class-instVar named 'ClassResources'.
+ With only a few exceptions, the only classes which need resources are the GUI
+ classes under the SimpleView hierarchy.
How does the system find resources:
- The idea is that the system-provided resource files can be overwritten
- by the user or an application configuration.
- This works via a hierarchy of directories where resources are searched for,
- with the systems standard resource-files being at the end of that chain.
-
- When searching for a resource file for class X, the following files are searched
- in order:
- {ResourcePath} / resources / X.rs
- {SystemPath} / (CLASSES-PACKAGE-PATH) / X.rs
- {ResourcePath} / (CLASSES-PACKAGE-PATH) / X.rs
+ The idea is that the system-provided resource files can be overwritten
+ by the user or an application configuration.
+ This works via a hierarchy of directories where resources are searched for,
+ with the systems standard resource-files being at the end of that chain.
+
+ When searching for a resource file for class X, the following files are searched
+ in order:
+ {ResourcePath} / resources / X.rs
+ {SystemPath} / (CLASSES-PACKAGE-PATH) / X.rs
+ {ResourcePath} / (CLASSES-PACKAGE-PATH) / X.rs
"
! !
@@ -222,8 +222,8 @@
right after startup, ususally immediately followed by Smalltalk>>start.
[with error handling, via the initializeSystem]
Notice:
- this is not called when an image is restarted; in this
- case the show starts in Smalltalk>>restart."
+ this is not called when an image is restarted; in this
+ case the show starts in Smalltalk>>restart."
"/
"/ start catching SIGSEGV and SIGBUS
@@ -254,12 +254,12 @@
Compiler := ByteCodeCompiler.
Compiler isNil ifTrue:[
- "
- ByteCodeCompiler is not in the system (i.e. has not been linked in)
- this allows at least immediate evaluations for runtime systems without compiler
- NOTICE: a parser is always needed, otherwise we cannot read resource files etc.
- "
- Compiler := Parser
+ "
+ ByteCodeCompiler is not in the system (i.e. has not been linked in)
+ this allows at least immediate evaluations for runtime systems without compiler
+ NOTICE: a parser is always needed, otherwise we cannot read resource files etc.
+ "
+ Compiler := Parser
].
"/
@@ -294,20 +294,20 @@
|envString i langString terrString|
StandAlone isNil ifTrue:[
- StandAlone := false.
+ StandAlone := false.
].
HeadlessOperation isNil ifTrue:[
- HeadlessOperation := false.
+ HeadlessOperation := false.
].
"
extract Language and LanguageTerritory from LANG variable.
valid are for example:
- en_en / en
- en_us
- en_gb
- de_de / de
- de_at (for Austria)
+ en_en / en
+ en_us
+ en_gb
+ de_de / de
+ de_at (for Austria)
"
Language := #en.
@@ -315,35 +315,41 @@
"Format of LANG is: language[_territory][.codeset][@modifier]
- language ISO-639 Language code
- territory ISO-3166 Contry code"
+ language ISO-639 Language code
+ territory ISO-3166 Contry code"
envString := OperatingSystem getLanguage.
envString size > 0 ifTrue:[
- i := envString indexOf:$@.
- (i ~~ 0) ifTrue:[
- envString := envString copyTo:(i - 1).
- LanguageModifier := (envString copyFrom:(i + 1)) asLowercase asSymbol.
- ] ifFalse:[
- LanguageModifier := nil.
- ].
- i := envString indexOf:$..
- (i ~~ 0) ifTrue:[
- envString := envString copyTo:(i - 1).
- LanguageCodeset := (envString copyFrom:(i + 1)) asLowercase asSymbol
- ] ifFalse:[
- LanguageCodeset := #'iso8859-1'.
- ].
- i := envString indexOf:$_.
- (i == 0) ifTrue:[
- langString := envString.
- terrString := envString
- ] ifFalse:[
- langString := envString copyTo:(i - 1).
- terrString := envString copyFrom:(i + 1)
- ].
- Language := langString asLowercase asSymbol.
- LanguageTerritory := terrString asLowercase asSymbol
+ i := envString indexOf:$@.
+ (i ~~ 0) ifTrue:[
+ envString := envString copyTo:(i - 1).
+ LanguageModifier := (envString copyFrom:(i + 1)) asLowercase asSymbol.
+ ] ifFalse:[
+ LanguageModifier := nil.
+ ].
+ i := envString indexOf:$..
+ (i ~~ 0) ifTrue:[
+ envString := envString copyTo:(i - 1).
+ LanguageCodeset := (envString copyFrom:(i + 1)) asLowercase asSymbol
+ ] ifFalse:[
+ LanguageCodeset := #'iso8859-1'.
+ ].
+ i := envString indexOf:$_.
+ (i == 0) ifTrue:[
+ langString := envString.
+ terrString := envString
+ ] ifFalse:[
+ langString := envString copyTo:(i - 1).
+ terrString := envString copyFrom:(i + 1)
+ ].
+ langString := langString asLowercase.
+ terrString := terrString asLowercase.
+ (langString = 'c' or:[terrString = 'c']) ifTrue:[
+ ('Smalltalk [info]: ignoring wrong LANG setting (',langString,'_',terrString,') - using english') infoPrintCR.
+ ] ifFalse:[
+ Language := langString asSymbol.
+ LanguageTerritory := terrString asSymbol
+ ]
].
"
@@ -378,7 +384,7 @@
Stderr := NonPositionableExternalStream forStderr.
Stdin := NonPositionableExternalStream forStdin.
PrinterStream notNil ifTrue:[
- Printer := PrinterStream defaultPrinter.
+ Printer := PrinterStream defaultPrinter.
].
Transcript := Stderr
@@ -395,13 +401,13 @@
they will redefine Inspector and Debugger for graphical interfaces"
Display notNil ifTrue:[
- InspectorView notNil ifTrue:[
- Inspector := InspectorView
- ].
- DebugView notNil ifTrue:[
- Debugger := DebugView
- ].
- "/ Display initialize
+ InspectorView notNil ifTrue:[
+ Inspector := InspectorView
+ ].
+ DebugView notNil ifTrue:[
+ Debugger := DebugView
+ ].
+ "/ Display initialize
]
"
@@ -412,66 +418,66 @@
initSystemPath
"setup path where system files are searched for.
the default path is set to:
- .
- <directory of exe> (WIN32 only)
- $HOME (if defined)
- $HOME/.smalltalk (if defined & existing)
- $SMALLTALK_LIBDIR (if defined & existing)
- $STX_LIBDIR (if defined & existing)
- $STX_TOPDIR (if defined & existing)
- REGISTRY('HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X\<CurrentVersion>\LibDir') (WIN32 only)
- REGISTRY('HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X\LibDir') (WIN32 only)
- <standard places>
+ .
+ <directory of exe> (WIN32 only)
+ $HOME (if defined)
+ $HOME/.smalltalk (if defined & existing)
+ $SMALLTALK_LIBDIR (if defined & existing)
+ $STX_LIBDIR (if defined & existing)
+ $STX_TOPDIR (if defined & existing)
+ REGISTRY('HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X\<CurrentVersion>\LibDir') (WIN32 only)
+ REGISTRY('HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X\LibDir') (WIN32 only)
+ <standard places>
standard places (unix):
- /opt/smalltalk/<release> (if existing)
- /opt/smalltalk (if existing)
- /usr/local/lib/smalltalk (if existing)
- /usr/lib/smalltalk (if existing)
- /lib/smalltalk (if existing)
+ /opt/smalltalk/<release> (if existing)
+ /opt/smalltalk (if existing)
+ /usr/local/lib/smalltalk (if existing)
+ /usr/lib/smalltalk (if existing)
+ /lib/smalltalk (if existing)
win32:
- \programs\exept\smalltalk (if existing)
- \programs\smalltalk (if existing)
- \smalltalk (if existing)
+ \programs\exept\smalltalk (if existing)
+ \programs\smalltalk (if existing)
+ \smalltalk (if existing)
vms:
- $stx:lib (if existing)
- $stx:root (if existing)
+ $stx:lib (if existing)
+ $stx:root (if existing)
of course, it is possible to add entries from the 'smalltalk.rc'
startup file; add expressions such as:
- Smalltalk systemPath addFirst:'/foo/bar/baz'.
- or:
- Smalltalk systemPath addLast:'/fee/foe/foo'.
+ Smalltalk systemPath addFirst:'/foo/bar/baz'.
+ or:
+ Smalltalk systemPath addLast:'/fee/foe/foo'.
However, smalltalk.rc itself must be found along the above path.
"
ChangeFileName := 'changes'.
OperatingSystem isVMSlike ifTrue:[
- BitmapDirName := 'bitmaps.dir'.
- BinaryDirName := 'binary.dir'.
- SourceDirName := 'source.dir'.
- ResourceDirName := 'resources.dir'.
- FileInDirName := 'filein.dir'.
- PackageDirName := 'packages.dir'.
+ BitmapDirName := 'bitmaps.dir'.
+ BinaryDirName := 'binary.dir'.
+ SourceDirName := 'source.dir'.
+ ResourceDirName := 'resources.dir'.
+ FileInDirName := 'filein.dir'.
+ PackageDirName := 'packages.dir'.
] ifFalse:[
- BitmapDirName := 'bitmaps'.
- BinaryDirName := 'binary'.
- SourceDirName := 'source'.
- ResourceDirName := 'resources'.
- FileInDirName := 'fileIn'.
- PackageDirName := 'packages'.
+ BitmapDirName := 'bitmaps'.
+ BinaryDirName := 'binary'.
+ SourceDirName := 'source'.
+ ResourceDirName := 'resources'.
+ FileInDirName := 'fileIn'.
+ PackageDirName := 'packages'.
].
SystemPath isNil ifTrue:[
- SystemPath := OperatingSystem defaultSystemPath.
- self flushPathCaches
+ SystemPath := OperatingSystem defaultSystemPath.
+ self flushPathCaches
].
PackagePath isNil ifTrue:[
- PackagePath := OperatingSystem defaultPackagePath.
+ PackagePath := OperatingSystem defaultPackagePath.
].
"
@@ -499,17 +505,17 @@
"sent from VM via #initializeModules"
Error handle:[:ex |
- ClassesFailedToInitialize isNil ifTrue:[
- ClassesFailedToInitialize := IdentitySet new.
- ].
- ClassesFailedToInitialize add:aClass.
- ('Smalltalk [warning]: error during initialize of ' , aClass name,': ', ex description printString) errorPrintCR.
- ex suspendedContext fullPrintAll.
- (Smalltalk commandLineArguments includes:'--debug') ifTrue:[
- ex reject
- ].
+ ClassesFailedToInitialize isNil ifTrue:[
+ ClassesFailedToInitialize := IdentitySet new.
+ ].
+ ClassesFailedToInitialize add:aClass.
+ ('Smalltalk [warning]: error during initialize of ' , aClass name,': ', ex description printString) errorPrintCR.
+ ex suspendedContext fullPrintAll.
+ (Smalltalk commandLineArguments includes:'--debug') ifTrue:[
+ ex reject
+ ].
] do:[
- aClass initialize
+ aClass initialize
].
"Modified: / 23-10-2006 / 16:29:19 / cg"
@@ -522,12 +528,12 @@
self initializeModulesOnce.
ClassesFailedToInitialize size > 0 ifTrue:[
- ('Smalltalk [info]: retry initialization of failed class(es)...') infoPrintCR.
- ClassesFailedToInitialize := nil.
- self initializeModulesOnce.
- ClassesFailedToInitialize size > 0 ifTrue:[
- ('Smalltalk [error]: class(es) persist to fail during initialize') errorPrintCR.
- ]
+ ('Smalltalk [info]: retry initialization of failed class(es)...') infoPrintCR.
+ ClassesFailedToInitialize := nil.
+ self initializeModulesOnce.
+ ClassesFailedToInitialize size > 0 ifTrue:[
+ ('Smalltalk [error]: class(es) persist to fail during initialize') errorPrintCR.
+ ]
].
ProjectDefinition initializeAllProjectDefinitions.
@@ -554,8 +560,8 @@
This one is the very first entry into the smalltalk world,
right after startup, ususally immediately followed by Smalltalk>>start.
Notice:
- this is not called when an image is restarted; in this
- case the show starts in Smalltalk>>restart."
+ this is not called when an image is restarted; in this
+ case the show starts in Smalltalk>>restart."
|idx|
@@ -566,7 +572,7 @@
AbstractOperatingSystem initializeConcreteClass.
CommandLineArguments isNil ifTrue:[
- CommandLineArguments := #('stx').
+ CommandLineArguments := #('stx').
].
CommandLine := CommandLineArguments copy.
CommandLineArguments := CommandLineArguments asOrderedCollection.
@@ -577,39 +583,39 @@
DebuggingStandAlone := false.
StandAlone ifTrue:[
- InfoPrinting := false.
- ObjectMemory infoPrinting:false.
-
- idx := CommandLineArguments indexOf:'--debug'.
- idx ~~ 0 ifTrue:[
- DebuggingStandAlone := true.
- ].
- DebuggingStandAlone ifTrue:[
- Inspector := MiniInspector.
- Debugger := MiniDebugger.
- ].
+ InfoPrinting := false.
+ ObjectMemory infoPrinting:false.
+
+ idx := CommandLineArguments indexOf:'--debug'.
+ idx ~~ 0 ifTrue:[
+ DebuggingStandAlone := true.
+ ].
+ DebuggingStandAlone ifTrue:[
+ Inspector := MiniInspector.
+ Debugger := MiniDebugger.
+ ].
] ifFalse:[
- "/
- "/ define low-level debugging tools - graphical classes are not prepared yet
- "/ to handle things.
- "/ This will bring us into the MiniDebugger when an error occurs during startup.
- "/
- Inspector := MiniInspector.
- Debugger := MiniDebugger.
+ "/
+ "/ define low-level debugging tools - graphical classes are not prepared yet
+ "/ to handle things.
+ "/ This will bring us into the MiniDebugger when an error occurs during startup.
+ "/
+ Inspector := MiniInspector.
+ Debugger := MiniDebugger.
].
Error handle:[:ex |
- StandAlone ifTrue:[
- DebuggingStandAlone ifFalse:[
- 'Startup Error - use --debug command line argument for more info' errorPrintCR.
- Smalltalk exit:1.
- ].
- 'Startup Error' errorPrintCR.
- thisContext fullPrintAll.
- ].
- ex reject.
+ StandAlone ifTrue:[
+ DebuggingStandAlone ifFalse:[
+ 'Startup Error - use --debug command line argument for more info' errorPrintCR.
+ Smalltalk exit:1.
+ ].
+ 'Startup Error' errorPrintCR.
+ thisContext fullPrintAll.
+ ].
+ ex reject.
] do:[
- self basicInitializeSystem
+ self basicInitializeSystem
].
!
@@ -661,6 +667,10 @@
!
+hasClassNamed:aNameStringOrSymbol
+ ^ (self classNamed:aNameStringOrSymbol) notNil
+!
+
isMorphic
^ false
!
@@ -685,27 +695,27 @@
objects := SpecialObjectArray.
objects isNil ifTrue:[
- objects := Array new:5.
+ objects := Array new:5.
].
"find the first empty slot and look if already registered"
firstEmptyIndex := 0.
1 to: objects size do: [:i |
- obj := objects at: i.
- obj == anObject ifTrue: [^ i]. "object already there, just return its index"
- (obj == nil and: [firstEmptyIndex = 0]) ifTrue: [
- firstEmptyIndex := i
- ]
+ obj := objects at: i.
+ obj == anObject ifTrue: [^ i]. "object already there, just return its index"
+ (obj == nil and: [firstEmptyIndex = 0]) ifTrue: [
+ firstEmptyIndex := i
+ ]
].
"if no empty slots, expand the array"
firstEmptyIndex = 0 ifTrue: [
- sz := objects size.
- newObjects := objects species new: sz + 20. "grow linearly"
- newObjects replaceFrom: 1 to: sz with: objects startingAt: 1.
- firstEmptyIndex := sz + 1.
- SpecialObjectArray := newObjects.
- objects := newObjects
+ sz := objects size.
+ newObjects := objects species new: sz + 20. "grow linearly"
+ newObjects replaceFrom: 1 to: sz with: objects startingAt: 1.
+ firstEmptyIndex := sz + 1.
+ SpecialObjectArray := newObjects.
+ objects := newObjects
].
objects at: firstEmptyIndex put: anObject.
@@ -713,6 +723,19 @@
!
+removeClassNamed: aName
+ "Invoked from fileouts: if there is currently a class in the system named aName, then remove it.
+ If anything untoward happens, report it in the Transcript. "
+
+ | oldClass |
+
+ (oldClass := self at: aName asSymbol ifAbsent: [nil]) isNil ifTrue:[
+ Transcript showCR: 'Removal of class named ', aName, ' ignored because it does not exist.'.
+ ^ self
+ ].
+ oldClass removeFromSystem
+!
+
renameClassNamed:oldName as:newName
self renameClass:(self at:oldName) to:newName
!
@@ -726,9 +749,9 @@
anObject isNil ifTrue:[^ self].
objects := SpecialObjectArray.
1 to: objects size do: [:i |
- (objects at: i) == anObject ifTrue: [
- objects at: i put: nil
- ]
+ (objects at: i) == anObject ifTrue: [
+ objects at: i put: nil
+ ]
].
!
@@ -739,20 +762,20 @@
platformName := Screen current platformName.
platformName = #WIN32 ifTrue:[
- ^ #Win32.
+ ^ #Win32.
].
^ platformName.
"
Smalltalk windowSystemName
- -> 'Win32'
+ -> 'Win32'
"
! !
!Smalltalk class methodsFor:'Compatibility-V''Age'!
allClassesImplementing:aSelector
- ^ self allClassesForWhich:[:cls | cls implements:aSelector].
+ ^ self allClassesForWhich:[:cls | cls includesSelector:aSelector].
"Modified: / 10-08-2006 / 12:12:17 / cg"
!
@@ -766,10 +789,10 @@
declarePoolDictionary:poolDictionaryName
SharedPool subclass:(poolDictionaryName asSymbol)
- instanceVariableNames:''
- classVariableNames:''
- poolDictionaries:''
- category:nil
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:nil
! !
!Smalltalk class methodsFor:'Compatibility-VW5.4'!
@@ -791,17 +814,17 @@
|newClass|
indexed == #none ifTrue:[
- newClass := superclass
- subclass:nameSymbol
- instanceVariableNames:instVars
- classVariableNames:''
- poolDictionaries:''
- category:category
- inEnvironment:self.
- classInstVars size > 0 ifTrue:[
- newClass class instanceVariableNames:classInstVars.
- ].
- ^ newClass
+ newClass := superclass
+ subclass:nameSymbol
+ instanceVariableNames:instVars
+ classVariableNames:''
+ poolDictionaries:''
+ category:category
+ inEnvironment:self.
+ classInstVars size > 0 ifTrue:[
+ newClass class instanceVariableNames:classInstVars.
+ ].
+ ^ newClass
].
self shouldImplement.
!
@@ -866,7 +889,7 @@
the evaluation of aBlock."
(self includesKey:aKey) ifTrue:[
- ^ self at:aKey
+ ^ self at:aKey
].
^ aBlock value
@@ -882,7 +905,7 @@
Otherwise, evaluate aBlock, passing the retrieved value as argument."
(self includesKey:aKey) ifTrue:[
- ^ aBlock value:(self at:aKey)
+ ^ aBlock value:(self at:aKey)
].
^ nil
@@ -903,23 +926,23 @@
oldValue = __GLOBAL_SET(aKey, aValue, (OBJ *)0);
%}.
CachedClasses notNil ifTrue:[
- oldValue isBehavior ifTrue:[
- oldValue name == aKey ifTrue:[
- CachedClasses remove:oldValue ifAbsent:[]
- ]
- ].
- aValue isBehavior ifTrue:[
+ oldValue isBehavior ifTrue:[
+ oldValue name == aKey ifTrue:[
+ CachedClasses remove:oldValue ifAbsent:[]
+ ]
+ ].
+ aValue isBehavior ifTrue:[
"/ aValue isMeta ifTrue:[
"/ "/ this should not happen
"/ ('SMALLTALK: store a Metaclass: ' , aValue name , ' as ' , aKey) infoPrintCR.
"/ ].
- aValue name == aKey ifTrue:[
- CachedClasses add:aValue
- ] ifFalse:[
- CachedClasses := nil
- ]
- ].
+ aValue name == aKey ifTrue:[
+ CachedClasses add:aValue
+ ] ifFalse:[
+ CachedClasses := nil
+ ]
+ ].
].
^ aValue.
"/
@@ -951,7 +974,7 @@
"return the symbol under which anObject is stored - or nil"
self keysDo:[:aKey |
- (self at:aKey) == anObject ifTrue:[^ aKey]
+ (self at:aKey) == anObject ifTrue:[^ aKey]
].
^ nil
@@ -971,16 +994,16 @@
removeKey:aKey
"remove the association stored under the key-argument from the globals dictionary.
WARNING:
- this is somewhat dangerous: conceptionally, the association is removed,
- to which machine & byte compiled code refers if it accesses a global.
- If there are still global accesses in some literalArray or from machine-compiled code,
- it continues to reference the globals value via that obsolete association and gets a nil
- value. (which is correct)
- However, if that global is later reintroduced, a new association will be created and
- the new global now referenced via the new association.
- The old accesses will still see nil, although the globals value is actually non-nil
- (this is questionable).
- To avoid this problem, the #removeClass: method never removed the key."
+ this is somewhat dangerous: conceptionally, the association is removed,
+ to which machine & byte compiled code refers if it accesses a global.
+ If there are still global accesses in some literalArray or from machine-compiled code,
+ it continues to reference the globals value via that obsolete association and gets a nil
+ value. (which is correct)
+ However, if that global is later reintroduced, a new association will be created and
+ the new global now referenced via the new association.
+ The old accesses will still see nil, although the globals value is actually non-nil
+ (this is questionable).
+ To avoid this problem, the #removeClass: method never removed the key."
CachedClasses := nil.
@@ -1040,9 +1063,9 @@
"startup a changes browser"
ChangesBrowser notNil ifTrue:[
- ChangesBrowser open
+ ChangesBrowser open
] ifFalse:[
- self warn:'no ChangesBrowser built in'
+ self warn:'no ChangesBrowser built in'
]
"
@@ -1127,14 +1150,14 @@
oldCategory := aClass category.
oldCategory ~= newCategory ifTrue:[
- aClass category:(newCategory withoutSeparators asSymbol).
-
- "notify change of category"
- ns := aClass environment ? self.
- ns changed:#organization with:(aClass -> oldCategory).
- ns ~~ self ifTrue:[
- self changed:#organization with:(aClass -> oldCategory).
- ]
+ aClass category:(newCategory withoutSeparators asSymbol).
+
+ "notify change of category"
+ ns := aClass environment ? self.
+ ns changed:#organization with:(aClass -> oldCategory).
+ ns ~~ self ifTrue:[
+ self changed:#organization with:(aClass -> oldCategory).
+ ]
].
"
@@ -1151,7 +1174,7 @@
flushCachedClass:aClass
CachedClasses notNil ifTrue:[
- CachedClasses remove:aClass ifAbsent:[]
+ CachedClasses remove:aClass ifAbsent:[]
]
!
@@ -1176,31 +1199,31 @@
oldName := aClass name.
sym := oldNameSym := oldName asSymbol.
((self at:oldNameSym) == aClass) ifFalse:[
- "check other name ..."
- (self includes:aClass) ifFalse:[
- 'Smalltalk [warning]: no such class: ' errorPrint. oldName errorPrintCR.
- ^ self
- ].
- "
- the class has changed its name - without telling me ...
- what should be done in this case ?
- "
- 'Smalltalk [warning]: class ' errorPrint. oldName errorPrint.
- ' has changed its name' errorPrintCR.
-
- "/
- "/ might be an alias (i.e. removing a compatibility name)
- "/
- actualName := self keyAtValue:aClass.
- ('Smalltalk [info]: ' , oldName , ' is actually stored as ' , actualName , '.') infoPrintCR.
- sym := actualName asSymbol.
- oldName := actualName asString.
- wrongName := true.
+ "check other name ..."
+ (self includes:aClass) ifFalse:[
+ 'Smalltalk [warning]: no such class: ' errorPrint. oldName errorPrintCR.
+ ^ self
+ ].
+ "
+ the class has changed its name - without telling me ...
+ what should be done in this case ?
+ "
+ 'Smalltalk [warning]: class ' errorPrint. oldName errorPrint.
+ ' has changed its name' errorPrintCR.
+
+ "/
+ "/ might be an alias (i.e. removing a compatibility name)
+ "/
+ actualName := self keyAtValue:aClass.
+ ('Smalltalk [info]: ' , oldName , ' is actually stored as ' , actualName , '.') infoPrintCR.
+ sym := actualName asSymbol.
+ oldName := actualName asString.
+ wrongName := true.
].
ns := aClass nameSpace.
aClass topOwningClass notNil ifTrue:[
- ons := aClass topOwningClass nameSpace
+ ons := aClass topOwningClass nameSpace
].
self at:sym put:nil. "nil it out for compiled accesses"
@@ -1209,25 +1232,25 @@
"/ see comment in removeKey: on why we dont remove it here
"/
"/ self removeKey:sym. "/ remove key - this actually fails, if there are
- "/ still compiled code references."
+ "/ still compiled code references."
"remove private classes"
aClass privateClassesSorted do:[:somePrivateClass |
- aClass privateClassesAt:(somePrivateClass nameWithoutPrefix) asSymbol put:nil.
+ aClass privateClassesAt:(somePrivateClass nameWithoutPrefix) asSymbol put:nil.
].
"remove class variables"
names := aClass classVariableString asCollectionOfWords.
names do:[:name |
- cSym := aClass globalKeyForClassVar:name.
- self at:cSym asSymbol put:nil.
-
- "/
- "/ see comment in removeKey: on why we dont remove it here
- "/
- "/ self removeKey:cSym
+ cSym := aClass globalKeyForClassVar:name.
+ self at:cSym asSymbol put:nil.
+
+ "/
+ "/ see comment in removeKey: on why we dont remove it here
+ "/
+ "/ self removeKey:cSym
].
@@ -1256,31 +1279,31 @@
Class flushSubclassInfo.
wrongName == true ifTrue:[
- "/
- "/ an alias (i.e. removing a compatibility name)
- "/
- "/ check if there are more refs to it ...
- [self includes:aClass] whileTrue:[
- actualName := self keyAtValue:aClass.
- ('Smalltalk [info]: ' , aClass name , ' is also registered under the name ' , actualName
- , ' - remove that binding too.') infoPrintCR.
- self at:actualName put:nil.
- ].
+ "/
+ "/ an alias (i.e. removing a compatibility name)
+ "/
+ "/ check if there are more refs to it ...
+ [self includes:aClass] whileTrue:[
+ actualName := self keyAtValue:aClass.
+ ('Smalltalk [info]: ' , aClass name , ' is also registered under the name ' , actualName
+ , ' - remove that binding too.') infoPrintCR.
+ self at:actualName put:nil.
+ ].
].
ns ~~ Smalltalk ifTrue:[
- ons notNil ifTrue:[
- ClassBuilder
- recompileGlobalAccessorsTo:oldNameSym
- in:ons
- except:nil
- ].
- (ns notNil and:[ns ~~ ons]) ifTrue:[
- ClassBuilder
- recompileGlobalAccessorsTo:oldNameSym
- in:ns
- except:nil
- ].
+ ons notNil ifTrue:[
+ ClassBuilder
+ recompileGlobalAccessorsTo:oldNameSym
+ in:ons
+ except:nil
+ ].
+ (ns notNil and:[ns ~~ ons]) ifTrue:[
+ ClassBuilder
+ recompileGlobalAccessorsTo:oldNameSym
+ in:ns
+ except:nil
+ ].
].
"Modified: / 18-11-2006 / 17:16:31 / cg"
@@ -1301,24 +1324,24 @@
i2 := 1.
ns := self.
[i2 ~~ 0] whileTrue:[
- i2 := newName indexOfSubCollection:'::' startingAt:i1.
- i2 ~~ 0 ifTrue:[
- nm := newName copyFrom:i1 to:i2-1.
- ns isNameSpace ifTrue:[
- subns := ns at:nm asSymbol ifAbsent:nil.
- subns isNil ifTrue:[
- self error:'Nonexisting namespace: ',nm.
- ^ nil.
- ].
- ] ifFalse:[
- subns := ns privateClassesAt:nm asSymbol.
- subns isNil ifTrue:[
- self error:'Cannot create a namespace below a class'
- ]
- ].
- ns := subns.
- i1 := i2 + 2.
- ].
+ i2 := newName indexOfSubCollection:'::' startingAt:i1.
+ i2 ~~ 0 ifTrue:[
+ nm := newName copyFrom:i1 to:i2-1.
+ ns isNameSpace ifTrue:[
+ subns := ns at:nm asSymbol ifAbsent:nil.
+ subns isNil ifTrue:[
+ self error:'Nonexisting namespace: ',nm.
+ ^ nil.
+ ].
+ ] ifFalse:[
+ subns := ns privateClassesAt:nm asSymbol.
+ subns isNil ifTrue:[
+ self error:'Cannot create a namespace below a class'
+ ]
+ ].
+ ns := subns.
+ i1 := i2 + 2.
+ ].
].
oldName := aClass name.
@@ -1329,8 +1352,8 @@
privateClasses := aClass privateClassesSorted.
((self at:oldSym) ~~ aClass) ifTrue:[
- 'Smalltalk [warning]: rename failed - name is different from key' errorPrintCR.
- ^ self
+ 'Smalltalk [warning]: rename failed - name is different from key' errorPrintCR.
+ ^ self
].
"/ rename the class
@@ -1339,42 +1362,42 @@
"/ change the owning class
ns isNameSpace ifFalse:[
- aClass isPrivate ifTrue:[
- aClass class setOwningClass:ns.
- ] ifFalse:[
- "/ sigh - must make a PrivateMetaclass from Metaclass
- oldMetaclass := aClass class.
- newMetaclass := PrivateMetaclass new.
- newMetaclass flags:(oldMetaclass flags).
- newMetaclass setSuperclass:(oldMetaclass superclass).
- newMetaclass instSize:(oldMetaclass instSize).
- newMetaclass setInstanceVariableString:(oldMetaclass instanceVariableString).
- newMetaclass setMethodDictionary:(oldMetaclass methodDictionary).
- newMetaclass setSoleInstance:aClass.
- newMetaclass setOwningClass:ns.
-
- aClass changeClassTo:newMetaclass.
- ObjectMemory flushCaches.
- ]
+ aClass isPrivate ifTrue:[
+ aClass class setOwningClass:ns.
+ ] ifFalse:[
+ "/ sigh - must make a PrivateMetaclass from Metaclass
+ oldMetaclass := aClass class.
+ newMetaclass := PrivateMetaclass new.
+ newMetaclass flags:(oldMetaclass flags).
+ newMetaclass setSuperclass:(oldMetaclass superclass).
+ newMetaclass instSize:(oldMetaclass instSize).
+ newMetaclass setInstanceVariableString:(oldMetaclass instanceVariableString).
+ newMetaclass setMethodDictionary:(oldMetaclass methodDictionary).
+ newMetaclass setSoleInstance:aClass.
+ newMetaclass setOwningClass:ns.
+
+ aClass changeClassTo:newMetaclass.
+ ObjectMemory flushCaches.
+ ]
] ifTrue:[
- aClass isPrivate ifTrue:[
- newCategory := aClass topOwningClass category.
-
- "/ sigh - must make a Metaclass from PrivateMetaclass
- oldMetaclass := aClass class.
-
- newMetaclass := Metaclass new.
- newMetaclass flags:(oldMetaclass flags).
- newMetaclass setSuperclass:(oldMetaclass superclass).
- newMetaclass instSize:(oldMetaclass instSize).
- newMetaclass setInstanceVariableString:(oldMetaclass instanceVariableString).
- newMetaclass setMethodDictionary:(oldMetaclass methodDictionary).
- newMetaclass setSoleInstance:aClass.
-
- aClass category:newCategory.
- aClass changeClassTo:newMetaclass.
- ObjectMemory flushCaches.
- ]
+ aClass isPrivate ifTrue:[
+ newCategory := aClass topOwningClass category.
+
+ "/ sigh - must make a Metaclass from PrivateMetaclass
+ oldMetaclass := aClass class.
+
+ newMetaclass := Metaclass new.
+ newMetaclass flags:(oldMetaclass flags).
+ newMetaclass setSuperclass:(oldMetaclass superclass).
+ newMetaclass instSize:(oldMetaclass instSize).
+ newMetaclass setInstanceVariableString:(oldMetaclass instanceVariableString).
+ newMetaclass setMethodDictionary:(oldMetaclass methodDictionary).
+ newMetaclass setSoleInstance:aClass.
+
+ aClass category:newCategory.
+ aClass changeClassTo:newMetaclass.
+ ObjectMemory flushCaches.
+ ]
].
aClass setName:newSym.
@@ -1394,32 +1417,32 @@
names := aClass classVariableString asCollectionOfWords.
names do:[:name |
- oldCVSym := (oldSym , ':' , name) asSymbol.
- value := self at:oldCVSym.
- self at:oldCVSym put:nil.
-
- "/
- "/ see comment in #removeKey: on why we dont remove it it here
- "/
- "/ self removeKey:cSym.
-
- newCVSym := (newSym , ':' , name) asSymbol.
- self at:newCVSym put:value.
-
- oldNameToNewName at:oldCVSym put:newCVSym.
+ oldCVSym := (oldSym , ':' , name) asSymbol.
+ value := self at:oldCVSym.
+ self at:oldCVSym put:nil.
+
+ "/
+ "/ see comment in #removeKey: on why we dont remove it it here
+ "/
+ "/ self removeKey:cSym.
+
+ newCVSym := (newSym , ':' , name) asSymbol.
+ self at:newCVSym put:value.
+
+ oldNameToNewName at:oldCVSym put:newCVSym.
].
"/ patch methods literal arrays from oldCVname to newCVname
oldNameToNewName keysAndValuesDo:[:oldNameSym :newNameSym |
- aClass withAllSubclasses do:[:aSubClass |
- Transcript showCR:'changing global accesses from ''' , oldNameSym , ''' into ''' , newNameSym , ''' in class: ''' , aSubClass name , ''' ...'.
- aSubClass instAndClassSelectorsAndMethodsDo:[:sel :aMethod |
- aMethod changeLiteral:oldNameSym to:newNameSym
- ].
- ].
-
- "/ and also in privateClasses ? ...
+ aClass withAllSubclasses do:[:aSubClass |
+ Transcript showCR:'changing global accesses from ''' , oldNameSym , ''' into ''' , newNameSym , ''' in class: ''' , aSubClass name , ''' ...'.
+ aSubClass instAndClassSelectorsAndMethodsDo:[:sel :aMethod |
+ aMethod changeLiteral:oldNameSym to:newNameSym
+ ].
+ ].
+
+ "/ and also in privateClasses ? ...
"/ privateClasses size > 0 ifTrue:[
"/ privateClasses do:[:aPrivateClass |
@@ -1442,85 +1465,85 @@
newNameSpace := aClass topNameSpace.
privateClasses size > 0 ifTrue:[
- "/ must rename privateClasses as well
- Class withoutUpdatingChangesDo:[
- privateClasses do:[:aPrivateClass |
- self renameClass:aPrivateClass
- to:(newSym , '::' , aPrivateClass nameWithoutPrefix).
-
- Transcript showCR:'recompiling methods in ''' , newNameSpace name , ''' accessing ''' , oldName , '::' , aPrivateClass nameWithoutPrefix , ''' ...'.
- aClass theNonMetaclass recompileMethodsAccessingGlobal:(oldName , '::' , aPrivateClass nameWithoutPrefix) asSymbol.
- aClass theMetaclass recompileMethodsAccessingGlobal:(oldName , '::' , aPrivateClass nameWithoutPrefix) asSymbol.
- aClass theNonMetaclass recompileMethodsAccessingGlobal:(aPrivateClass nameWithoutPrefix) asSymbol.
- aClass theMetaclass recompileMethodsAccessingGlobal:(aPrivateClass nameWithoutPrefix) asSymbol.
+ "/ must rename privateClasses as well
+ Class withoutUpdatingChangesDo:[
+ privateClasses do:[:aPrivateClass |
+ self renameClass:aPrivateClass
+ to:(newSym , '::' , aPrivateClass nameWithoutPrefix).
+
+ Transcript showCR:'recompiling methods in ''' , newNameSpace name , ''' accessing ''' , oldName , '::' , aPrivateClass nameWithoutPrefix , ''' ...'.
+ aClass theNonMetaclass recompileMethodsAccessingGlobal:(oldName , '::' , aPrivateClass nameWithoutPrefix) asSymbol.
+ aClass theMetaclass recompileMethodsAccessingGlobal:(oldName , '::' , aPrivateClass nameWithoutPrefix) asSymbol.
+ aClass theNonMetaclass recompileMethodsAccessingGlobal:(aPrivateClass nameWithoutPrefix) asSymbol.
+ aClass theMetaclass recompileMethodsAccessingGlobal:(aPrivateClass nameWithoutPrefix) asSymbol.
"/ ClassBuilder
"/ recompileGlobalAccessorsTo:(oldName , '::' , aPrivateClass nameWithoutPrefix) asSymbol
"/ in:newNameSpace
"/ except:nil.
- ]
- ]
+ ]
+ ]
].
oldNameSpace ~~ newNameSpace ifTrue:[
- "/ all those referencing the class from the old nameSpace
- "/ must be recompiled ...
- "/ (to now access the global from smalltalk)
-
- oldNameSpace ~~ Smalltalk ifTrue:[
- Transcript showCR:'recompiling methods in ''' , oldNameSpace name , ''' accessing ''' , oldName , ''' ...'.
-
- ClassBuilder
- recompileGlobalAccessorsTo:oldName asSymbol
- in:oldNameSpace
- except:nil.
- ].
-
- "/ all referencing the class in the new namespace
- "/ as well; to now access the new class.
-
- (newNameSpace notNil and:[newNameSpace ~~ Smalltalk]) ifTrue:[
- Transcript showCR:'recompiling methods in ''' , newNameSpace name , ''' accessing ''' , oldBaseName , ''' ...'.
-
- ClassBuilder
- recompileGlobalAccessorsTo:oldBaseName asSymbol
- in:newNameSpace
- except:nil.
- ].
+ "/ all those referencing the class from the old nameSpace
+ "/ must be recompiled ...
+ "/ (to now access the global from smalltalk)
+
+ oldNameSpace ~~ Smalltalk ifTrue:[
+ Transcript showCR:'recompiling methods in ''' , oldNameSpace name , ''' accessing ''' , oldName , ''' ...'.
+
+ ClassBuilder
+ recompileGlobalAccessorsTo:oldName asSymbol
+ in:oldNameSpace
+ except:nil.
+ ].
+
+ "/ all referencing the class in the new namespace
+ "/ as well; to now access the new class.
+
+ (newNameSpace notNil and:[newNameSpace ~~ Smalltalk]) ifTrue:[
+ Transcript showCR:'recompiling methods in ''' , newNameSpace name , ''' accessing ''' , oldBaseName , ''' ...'.
+
+ ClassBuilder
+ recompileGlobalAccessorsTo:oldBaseName asSymbol
+ in:newNameSpace
+ except:nil.
+ ].
] ifFalse:[
- "/ all references to a global with my new name in my owning class
- "/ must now be redirected to myself.
-
- aClass isPrivate ifTrue:[
- newBaseName := aClass nameWithoutNameSpacePrefix.
- newBaseNameWithoutPrefix := aClass nameWithoutPrefix.
-
- Transcript showCR:'recompiling methods accessing ''' , oldBaseNameWithoutPrefix , ''' in: ''' , aClass owningClass name , ''' ...'.
- aClass owningClass recompileMethodsAccessingGlobal:oldBaseNameWithoutPrefix.
- aClass owningClass class recompileMethodsAccessingGlobal:oldBaseNameWithoutPrefix.
-
- Transcript showCR:'recompiling methods accessing ''' , oldBaseName , ''' in: ''' , aClass owningClass name , ''' ...'.
- aClass owningClass recompileMethodsAccessingGlobal:oldBaseName.
- aClass owningClass class recompileMethodsAccessingGlobal:oldBaseName.
-
- Transcript showCR:'recompiling methods accessing ''' , newBaseNameWithoutPrefix , ''' in: ''' , aClass owningClass name , ''' ...'.
- aClass owningClass recompileMethodsAccessingGlobal:newBaseNameWithoutPrefix.
- aClass owningClass class recompileMethodsAccessingGlobal:newBaseNameWithoutPrefix.
-
- Transcript showCR:'recompiling methods accessing ''' , newBaseName , ''' in: ''' , aClass owningClass name , ''' ...'.
- aClass owningClass recompileMethodsAccessingGlobal:newBaseName.
- aClass owningClass class recompileMethodsAccessingGlobal:newBaseName.
- ]
+ "/ all references to a global with my new name in my owning class
+ "/ must now be redirected to myself.
+
+ aClass isPrivate ifTrue:[
+ newBaseName := aClass nameWithoutNameSpacePrefix.
+ newBaseNameWithoutPrefix := aClass nameWithoutPrefix.
+
+ Transcript showCR:'recompiling methods accessing ''' , oldBaseNameWithoutPrefix , ''' in: ''' , aClass owningClass name , ''' ...'.
+ aClass owningClass recompileMethodsAccessingGlobal:oldBaseNameWithoutPrefix.
+ aClass owningClass class recompileMethodsAccessingGlobal:oldBaseNameWithoutPrefix.
+
+ Transcript showCR:'recompiling methods accessing ''' , oldBaseName , ''' in: ''' , aClass owningClass name , ''' ...'.
+ aClass owningClass recompileMethodsAccessingGlobal:oldBaseName.
+ aClass owningClass class recompileMethodsAccessingGlobal:oldBaseName.
+
+ Transcript showCR:'recompiling methods accessing ''' , newBaseNameWithoutPrefix , ''' in: ''' , aClass owningClass name , ''' ...'.
+ aClass owningClass recompileMethodsAccessingGlobal:newBaseNameWithoutPrefix.
+ aClass owningClass class recompileMethodsAccessingGlobal:newBaseNameWithoutPrefix.
+
+ Transcript showCR:'recompiling methods accessing ''' , newBaseName , ''' in: ''' , aClass owningClass name , ''' ...'.
+ aClass owningClass recompileMethodsAccessingGlobal:newBaseName.
+ aClass owningClass class recompileMethodsAccessingGlobal:newBaseName.
+ ]
].
aClass changed:#definition.
"/ because of the change of my superclasses name ...
aClass allSubclassesDo:[:subClass |
- subClass changed:#definition.
+ subClass changed:#definition.
].
"/ because of the change of my superclasses name ...
aClass subclassesDo:[:subClass |
- subClass addChangeRecordForClass:subClass.
+ subClass addChangeRecordForClass:subClass.
].
self changed:#definition.
Smalltalk changed:#classRename with:(Array with:aClass with:oldName).
@@ -1586,7 +1609,7 @@
"call the dummy debug function, on which a breakpoint
can be put in adb, sdb, dbx or gdb.
WARNING: this method is for debugging only
- it will be removed without notice."
+ it will be removed without notice."
%{
__PATCHUPCONTEXTS(__context);
__debugBreakPoint__();
@@ -1631,9 +1654,9 @@
char *msg;
if (__isString(aMessage))
- msg = (char *) __stringVal(aMessage);
+ msg = (char *) __stringVal(aMessage);
else
- msg = "fatalAbort";
+ msg = "fatalAbort";
__fatal0(__context, msg);
/* NEVER RETURNS */
@@ -1665,11 +1688,13 @@
|allCategories|
allCategories := Set new.
- Smalltalk allClassesDo:[:cls | |category|
- category := cls category.
- category notNil ifTrue:[
- allCategories add:category.
- ].
+ Smalltalk allClassesDo:[:cls |
+ |category|
+
+ category := cls category.
+ category notNil ifTrue:[
+ allCategories add:category.
+ ].
].
^ allCategories.
@@ -1687,17 +1712,19 @@
|already|
already := IdentitySet new:NumberOfClassesHint*3.
- self allClassesDo:[:eachClass | |cls|
- cls := eachClass theNonMetaclass.
- (already includes:cls) ifFalse:[
- aBlock value:cls.
- already add:cls.
- ].
- cls := cls class.
- (already includes:cls) ifFalse:[
- aBlock value:cls.
- already add:cls.
- ].
+ self allClassesDo:[:eachClass |
+ |cls|
+
+ cls := eachClass theNonMetaclass.
+ (already includes:cls) ifFalse:[
+ aBlock value:cls.
+ already add:cls.
+ ].
+ cls := cls class.
+ (already includes:cls) ifFalse:[
+ aBlock value:cls.
+ already add:cls.
+ ].
].
!
@@ -1719,13 +1746,13 @@
collectedClasses := OrderedCollection new.
self allClassesForWhich:filter do:[:cls |
- collectedClasses add:cls
+ collectedClasses add:cls
].
^ collectedClasses
"
Smalltalk
- allClassesForWhich:[:cls | cls name startsWith:'Po']
+ allClassesForWhich:[:cls | cls name startsWith:'Po']
"
"Created: / 10-08-2006 / 12:11:31 / cg"
@@ -1735,13 +1762,13 @@
"evaluate the argument, aBlock for all classes in the system, for which filter evaluates to true."
self allClassesDo:[:cls |
- (filter value:cls) ifTrue:[ aBlock value:cls ].
+ (filter value:cls) ifTrue:[ aBlock value:cls ].
].
"
Smalltalk
- allClassesForWhich:[:cls | cls name startsWith:'Po']
- do:[:aClass | Transcript showCR:aClass name]
+ allClassesForWhich:[:cls | cls name startsWith:'Po']
+ do:[:aClass | Transcript showCR:aClass name]
"
!
@@ -1763,7 +1790,7 @@
The order of the classes is not defined."
aCategory notNil ifTrue:[
- self allClassesForWhich:[:cls | cls category = aCategory] do:aBlock
+ self allClassesForWhich:[:cls | cls category = aCategory] do:aBlock
]
"
@@ -1780,12 +1807,12 @@
|classes|
aCategory notNil ifTrue:[
- classes := OrderedCollection new.
- self allClassesInCategory:aCategory do:[:aClass |
- classes add:aClass
- ].
- classes topologicalSort:[:a :b | b isSubclassOf:a].
- classes do:aBlock
+ classes := OrderedCollection new.
+ self allClassesInCategory:aCategory do:[:aClass |
+ classes add:aClass
+ ].
+ classes topologicalSort:[:a :b | b isSubclassOf:a].
+ classes do:aBlock
]
"
@@ -1803,16 +1830,16 @@
already := IdentitySet new:NumberOfClassesHint.
self allClassesDo:[:eachClass |
- (already includes:eachClass) ifFalse:[
- eachClass allSuperclasses reverseDo:[:eachSuperClass |
- (already includes:eachSuperClass) ifFalse:[
- already add:eachSuperClass.
- aBlock value:eachSuperClass.
- ].
- ].
- already add:eachClass.
- aBlock value:eachClass.
- ]
+ (already includes:eachClass) ifFalse:[
+ eachClass allSuperclasses reverseDo:[:eachSuperClass |
+ (already includes:eachSuperClass) ifFalse:[
+ already add:eachSuperClass.
+ aBlock value:eachSuperClass.
+ ].
+ ].
+ already add:eachClass.
+ aBlock value:eachClass.
+ ]
].
"
@@ -1855,13 +1882,13 @@
!
allMethodCategories
- "return a set of all method categories in the system"
+ "return a set of all method-categories (protocols) in the system"
|allCategories|
allCategories := Set new.
Smalltalk allClassesDo:[:cls |
- allCategories addAll:cls categories.
+ allCategories addAll:cls categories.
].
^ allCategories.
@@ -1872,22 +1899,23 @@
!
allMethodsDo:aBlock
- "enumerate all methods in the Smalltalk namespace's classes"
+ "enumerate all methods in all classes"
Smalltalk allClassesDo:[:eachClass |
- eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
- aBlock value:mthd
- ]
- ].
-!
-
-allMethodsWithSelectorDo:aBlock
- "enumerate all methods in the Smalltalk namespace's classes"
+ eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+ aBlock value:mthd
+ ]
+ ].
+!
+
+allMethodsWithSelectorDo:aTwoArgBlock
+ "enumerate all methods in all classes and evaluate aBlock
+ with method and selector as arguments."
Smalltalk allClassesDo:[:eachClass |
- eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
- aBlock value:mthd value:sel
- ]
+ eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+ aTwoArgBlock value:mthd value:sel
+ ]
].
!
@@ -1896,7 +1924,7 @@
in the Smalltalk dictionary"
self keysDo:[:aKey |
- aBlock value:(aKey -> (self at:aKey))
+ aBlock value:(aKey -> (self at:aKey))
]
"Smalltalk associationsDo:[:assoc | assoc printCR]"
@@ -1924,7 +1952,7 @@
RETURN (self);
%}.
self keysDo:[:aKey |
- aBlock value:(self at:aKey)
+ aBlock value:(self at:aKey)
]
!
@@ -1932,7 +1960,7 @@
"evaluate the two-arg block, aBlock for all keys and values"
self keysDo:[:aKey |
- aBlock value:aKey value:(self at:aKey)
+ aBlock value:aKey value:(self at:aKey)
]
!
@@ -1941,16 +1969,16 @@
collected := OrderedCollection new.
self keysAndValuesDo:[:eachKey :eachValue |
- (selectBlockWith2Args value:eachKey value:eachValue) ifTrue:[
- collected add:(collectBlockWith2Args value:eachKey value:eachValue)
- ].
+ (selectBlockWith2Args value:eachKey value:eachValue) ifTrue:[
+ collected add:(collectBlockWith2Args value:eachKey value:eachValue)
+ ].
].
^ collected
"
Smalltalk
- keysAndValuesSelect:[:nm :val | (nm startsWith:'Ab') and:[val notNil]]
- thenCollect:[:nm :val | nm]
+ keysAndValuesSelect:[:nm :val | (nm startsWith:'Ab') and:[val notNil]]
+ thenCollect:[:nm :val | nm]
"
!
@@ -1963,7 +1991,7 @@
RETURN (self);
%}.
self basicKeys do:[:aKey |
- aBlock value:aKey
+ aBlock value:aKey
]
! !
@@ -1971,7 +1999,8 @@
!Smalltalk class methodsFor:'message control'!
silentLoading
- "returns the Silentloading class variable."
+ "returns the Silentloading class variable, which globally controls if compilation
+ messages are shown on the transcript during a fileIn."
^ SilentLoading ? false
!
@@ -1980,7 +2009,7 @@
"{ Pragma: +optSpace }"
"allows access to the Silentloading class variable, which controls
- messages from all kinds of system onto the transcript.
+ messages (especially during fileIn) onto the transcript.
You can save a snapshot with this flag set to true, which makes
the image come up silent. Can also be set, to read in files unlogged."
@@ -1989,6 +2018,17 @@
prev := SilentLoading.
SilentLoading := aBoolean.
^ prev
+!
+
+silentlyLoadingDo:aBlock
+ "evaluates aBlock with silent loading on - no compilation messages (except errors)
+ are shown on the transcript"
+
+ |sav|
+
+ sav := SilentLoading.
+ SilentLoading := true.
+ aBlock ensure:[ SilentLoading := sav ].
! !
!Smalltalk class methodsFor:'misc accessing'!
@@ -2026,9 +2066,9 @@
#aboutToQuit."
ExitBlocks isNil ifTrue:[
- ExitBlocks := OrderedCollection with:aBlock
+ ExitBlocks := OrderedCollection with:aBlock
] ifFalse:[
- ExitBlocks add:aBlock
+ ExitBlocks add:aBlock
]
!
@@ -2040,9 +2080,9 @@
These blocks will be executed after an image restart."
ImageStartBlocks isNil ifTrue:[
- ImageStartBlocks := OrderedCollection with:aBlock
+ ImageStartBlocks := OrderedCollection with:aBlock
] ifFalse:[
- ImageStartBlocks add:aBlock
+ ImageStartBlocks add:aBlock
]
"Created: 9.9.1996 / 16:48:20 / stefan"
@@ -2058,9 +2098,9 @@
Initial processes are usually started here (see smalltalk.rc / private.rc)."
StartBlocks isNil ifTrue:[
- StartBlocks := OrderedCollection with:aBlock
+ StartBlocks := OrderedCollection with:aBlock
] ifFalse:[
- StartBlocks add:aBlock
+ StartBlocks add:aBlock
]
"Created: 9.9.1996 / 16:46:53 / stefan"
@@ -2087,9 +2127,9 @@
ObjectMemory changed:#aboutToExit. "/ for ST/X backward compatibility
ObjectMemory changed:#aboutToQuit. "/ for ST-80 compatibility
ExitBlocks notNil ifTrue:[
- ExitBlocks do:[:aBlock |
- aBlock value
- ]
+ ExitBlocks do:[:aBlock |
+ aBlock value
+ ]
].
OperatingSystem exit:statusInteger
"not reached"
@@ -2114,10 +2154,10 @@
packageDirName := self getPackageFileName:packageDirName.
(packageDirName notNil and:[Class tryLocalSourceFirst]) ifTrue:[
- (self loadExtensionsFromDirectory:packageDirName) ifTrue:[
- ^ true.
- ].
- packageDirName := nil. "do not try again"
+ (self loadExtensionsFromDirectory:packageDirName) ifTrue:[
+ ^ true.
+ ].
+ packageDirName := nil. "do not try again"
].
"
@@ -2125,24 +2165,24 @@
"
mgr := Smalltalk at:#SourceCodeManager.
mgr notNil ifTrue:[
- SourceCodeManagerError handle:[:ex |
- ] do:[
- inStream := mgr getMostRecentSourceStreamForFile:'extensions.st' inPackage:aPackageId.
- ].
- inStream notNil ifTrue:[
- Class withoutUpdatingChangeSetDo:[
- inStream fileIn.
- ].
- inStream close.
- SilentLoading ifFalse:[
- Transcript showCR:('loaded extensions for ',aPackageId,' from repository').
- ].
- ^ true
- ]
+ SourceCodeManagerError handle:[:ex |
+ ] do:[
+ inStream := mgr getMostRecentSourceStreamForFile:'extensions.st' inPackage:aPackageId.
+ ].
+ inStream notNil ifTrue:[
+ Class withoutUpdatingChangeSetDo:[
+ inStream fileIn.
+ ].
+ inStream close.
+ SilentLoading ifFalse:[
+ Transcript showCR:('loaded extensions for ',aPackageId,' from repository').
+ ].
+ ^ true
+ ]
].
packageDirName notNil ifTrue:[
- ^ self loadExtensionsFromDirectory:packageDirName
+ ^ self loadExtensionsFromDirectory:packageDirName
].
^ false
@@ -2154,15 +2194,15 @@
packageDir := packageDirOrString asFilename.
- f := packageDir construct:'extensions.st'.
+ f := packageDir / 'extensions.st'.
f exists ifTrue:[
- Class withoutUpdatingChangeSetDo:[
- f fileIn.
- ].
- SilentLoading ifFalse:[
- Transcript showCR:('loaded extensions: ' , f pathName).
- ].
- ^ true
+ Class withoutUpdatingChangeSetDo:[
+ f fileIn.
+ ].
+ SilentLoading ifFalse:[
+ Transcript showCR:('loaded extensions: ' , f pathName).
+ ].
+ ^ true
].
^ false
!
@@ -2178,37 +2218,37 @@
"/ solution: repeat twice, so that superclasses are present the second time
Class packageQuerySignal answer:packageId asSymbol do:[
- |any|
-
- repeatCount := 0.
- [
- repeatCount := repeatCount + 1.
- anyFail := false.
- aDirectory directoryContents do:[:file |
- |fn|
-
- fn := aDirectory construct:file.
- (fn hasSuffix:'st') ifTrue:[
- Metaclass confirmationQuerySignal answer:false
- do:[
- Error
- handle:[:ex |
- anyFail := true
- ]
- do:[
- (self fileIn:fn) ifFalse:[
- anyFail := true
- ] ifTrue:[
- any := true.
- ]
- ]
- ]
- ]
- ].
- any ifFalse:[
- ^ false "/ no file found
- ]
- ] doWhile:[anyFail and:[repeatCount<2]].
+ |any|
+
+ repeatCount := 0.
+ [
+ repeatCount := repeatCount + 1.
+ anyFail := false.
+ aDirectory directoryContents do:[:file |
+ |fn|
+
+ fn := aDirectory / file.
+ (fn hasSuffix:'st') ifTrue:[
+ Metaclass confirmationQuerySignal answer:false
+ do:[
+ Error
+ handle:[:ex |
+ anyFail := true
+ ]
+ do:[
+ (self fileIn:fn) ifFalse:[
+ anyFail := true
+ ] ifTrue:[
+ any := true.
+ ]
+ ]
+ ]
+ ]
+ ].
+ any ifFalse:[
+ ^ false "/ no file found
+ ]
+ ] doWhile:[anyFail and:[repeatCount<2]].
].
new := (p := Project projectWithId:packageId) isNil.
@@ -2233,10 +2273,10 @@
|p t new|
(self fileIn:aFilename) ifFalse:[
- (self fileInClassLibrary:aFilename) ifFalse:[
- self warn:'Failed to load the package ', packageId printString.
- ^ false.
- ]
+ (self fileInClassLibrary:aFilename) ifFalse:[
+ self warn:'Failed to load the package ', packageId printString.
+ ^ false.
+ ]
].
new := (p := Project projectWithId:packageId) isNil.
@@ -2262,10 +2302,10 @@
Metaclass confirmationQuerySignal answer:false
do:[
- (self fileIn:aFilename) ifFalse:[
- self warn:'Failed to load the package ', packageId printString.
- ^ false.
- ]
+ (self fileIn:aFilename) ifFalse:[
+ self warn:'Failed to load the package ', packageId printString.
+ ^ false.
+ ]
].
new := (p := Project projectWithId:packageId) isNil.
@@ -2298,19 +2338,19 @@
packageDir isNil ifTrue:[^ false].
"/ abbrev.stc ?
- abbrevFile := packageDir construct:'abbrev.stc'.
+ abbrevFile := packageDir / 'abbrev.stc'.
abbrevFile exists ifFalse:[^ false].
Smalltalk installAutoloadedClassesFrom:abbrevFile pathName.
doLoadAsAutoloaded ifFalse:[
- "/ force autoloading...
- Smalltalk allClassesInPackage:aPackageId do:[:eachClass | eachClass autoload].
+ "/ force autoloading...
+ Smalltalk allClassesInPackage:aPackageId do:[:eachClass | eachClass autoload].
].
self loadExtensionsFromDirectory:packageDir.
SilentLoading ifFalse:[
- Transcript showCR:('loaded package: ' , aPackageId , ' from abbrev file: ' , abbrevFile pathName).
+ Transcript showCR:('loaded package: ' , aPackageId , ' from abbrev file: ' , abbrevFile pathName).
].
^ true
@@ -2336,7 +2376,7 @@
"make certain, that some particular package is loaded into the system.
Return true if loaded, false otherwise."
- |packageDir def|
+ |packageDir def sourceCodeManager|
"/ if there is a projectDefinition, let it load itself...
def := aPackageId asPackageId projectDefinitionClass.
@@ -2352,10 +2392,19 @@
].
].
- ^ self
+ (self
loadPackageWithId:aPackageId
fromDirectory:packageDir
- asAutoloaded:doLoadAsAutoloaded.
+ asAutoloaded:doLoadAsAutoloaded) ifTrue: [^ true].
+
+ AbstractSourceCodeManager notNil ifTrue:[
+ sourceCodeManager := AbstractSourceCodeManager sourceCodeManagerForPackage: aPackageId.
+ sourceCodeManager notNil ifTrue:[
+ ^ sourceCodeManager loadPackageWithId: aPackageId fromRepositoryAsAutoloaded: doLoadAsAutoloaded
+ ].
+ ].
+
+ ^ false
"
Smalltalk loadPackageWithId:'stx:libbasic'
@@ -2374,7 +2423,7 @@
projectDefinitionClass projectDefinitionClassName silent somethingHasBeenLoaded|
packageDirOrStringOrNil notNil ifTrue:[
- packageDir := packageDirOrStringOrNil asFilename.
+ packageDir := packageDirOrStringOrNil asFilename.
].
silent := SilentLoading or:[ StandAlone ].
@@ -2389,80 +2438,86 @@
"if not, file it in ..."
(projectDefinitionClass isNil and:[packageDir notNil]) ifTrue:[
- projectDefinitionClassName := ProjectDefinition initialClassNameForDefinitionOf:aPackageId.
- "/ try to load the project definition class
- filename := (packageDir construct:projectDefinitionClassName) withSuffix:'st'.
- filename exists ifFalse:[
- filename := ((packageDir construct:'source') construct:projectDefinitionClassName) withSuffix:'st'.
- ].
- filename exists ifTrue:[
- Class withoutUpdatingChangesDo:[
- filename fileIn.
- ].
- projectDefinitionClass := ProjectDefinition definitionClassForPackage:aPackageId.
- ].
+ projectDefinitionClassName := ProjectDefinition initialClassNameForDefinitionOf:aPackageId.
+ "/ try to load the project definition class
+ filename := (packageDir / projectDefinitionClassName) withSuffix:'st'.
+ filename exists ifFalse:[
+ filename := (packageDir / 'source' / projectDefinitionClassName) withSuffix:'st'.
+ ].
+ filename exists ifTrue:[
+ Class withoutUpdatingChangesDo:[
+ Smalltalk silentlyLoadingDo:[
+ filename fileIn.
+ ].
+ ].
+ projectDefinitionClass := ProjectDefinition definitionClassForPackage:aPackageId.
+ ].
].
projectDefinitionClass notNil ifTrue:[
- projectDefinitionClass autoload.
- somethingHasBeenLoaded := projectDefinitionClass loadAsAutoloaded:doLoadAsAutoloaded.
- (silent not and:[somethingHasBeenLoaded]) ifTrue:[
- Transcript showCR:('Smalltalk [info]: loaded package: ' , aPackageId , ' from project definition').
- ].
- ^ true.
+ projectDefinitionClass autoload.
+ somethingHasBeenLoaded := projectDefinitionClass loadAsAutoloaded:doLoadAsAutoloaded.
+ (silent not and:[somethingHasBeenLoaded]) ifTrue:[
+ Transcript showCR:('Smalltalk [info]: loaded package: ' , aPackageId , ' from project definition').
+ ].
+ ^ true.
].
"Is there a shared library (.dll or .so) ?"
shLibName := aPackageId asPackageId libraryName , ObjectFileLoader sharedLibraryExtension.
- filename := Filename currentDirectory construct:shLibName.
+ filename := Filename currentDirectory / shLibName.
filename exists ifFalse:[
- packageDir notNil ifTrue:[
- filename := packageDir construct:shLibName.
- filename exists ifFalse:[
- filename := (packageDir construct:'objbc') construct:shLibName.
- ]
- ]
+ packageDir notNil ifTrue:[
+ filename := packageDir / shLibName.
+ filename exists ifFalse:[
+ "/ mhmh - is this a good idea ? (temporary kludge)
+ filename := packageDir / 'objbc' / shLibName.
+ filename exists ifFalse:[
+ filename := packageDir / 'objvc' / shLibName.
+ ]
+ ]
+ ]
].
filename exists ifTrue:[
- (self loadPackage:aPackageId fromClassLibrary:filename) ifTrue:[
- silent ifFalse:[
- Transcript showCR:('loaded package: ' , aPackageId , ' from binary classLib file: ' , filename pathName).
- ].
- doLoadAsAutoloaded ifFalse:[
- "/ force autoloading...
- Smalltalk allClassesDo:[:eachClass |
- eachClass package == aPackageId ifTrue:[eachClass autoload].
- ].
- ].
- ^ true
- ]
+ (self loadPackage:aPackageId fromClassLibrary:filename) ifTrue:[
+ silent ifFalse:[
+ Transcript showCR:('loaded package: ' , aPackageId , ' from binary classLib file: ' , filename pathName).
+ ].
+ doLoadAsAutoloaded ifFalse:[
+ "/ force autoloading...
+ Smalltalk allClassesDo:[:eachClass |
+ eachClass package == aPackageId ifTrue:[eachClass autoload].
+ ].
+ ].
+ ^ true
+ ]
].
packageDir isNil ifTrue:[
- ^ false.
+ ^ false.
].
"/ loadAll ? - will be soon obsolete
- filename := packageDir construct:'loadAll'.
+ filename := packageDir / 'loadAll'.
filename exists ifFalse:[
- filename := packageDir construct:'loadall'.
+ filename := packageDir / 'loadall'.
].
filename exists ifTrue:[
- (self loadPackage:aPackageId fromLoadAllFile:filename) ifTrue:[
- silent ifFalse:[
- Transcript showCR:('loaded package: ' , aPackageId , ' from loadAll file: ' , filename pathName).
- ].
- ^ true
- ]
+ (self loadPackage:aPackageId fromLoadAllFile:filename) ifTrue:[
+ silent ifFalse:[
+ Transcript showCR:('loaded package: ' , aPackageId , ' from loadAll file: ' , filename pathName).
+ ].
+ ^ true
+ ]
].
packageName := packageDir baseName.
"/ zip-file loading no longer supported
"/ "/ .zip ?
-"/ f := (packageDir construct:packageName) withSuffix:'zip'.
+"/ f := (packageDir / packageName) withSuffix:'zip'.
"/ f exists ifTrue:[
"/ (self loadPackage:aPackageId fromZIPArchive:f asAutoloaded:doLoadAsAutoloaded) ifTrue:[
"/ silent ifFalse:[
@@ -2497,15 +2552,18 @@
"/ ]
"/ ].
-"/ source files-file loading no longer supported
-"/ self
-"/ recursiveInstallAutoloadedClassesFrom:packageDir
-"/ rememberIn:(Set new)
-"/ maxLevels:2
-"/ noAutoload:false
-"/ packageTop:packageDir
-"/ showSplashInLevels:0.
-"/
+"/ "/ source files-file loading no longer supported
+"/ "/ however, allow for autoload-stub loaded
+"/ doLoadAsAutoloaded ifTrue:[
+"/ self
+"/ recursiveInstallAutoloadedClassesFrom:packageDir
+"/ rememberIn:(Set new)
+"/ maxLevels:2
+"/ noAutoload:false
+"/ packageTop:packageDir
+"/ showSplashInLevels:0.
+"/ ].
+
"/ doLoadAsAutoloaded ifFalse:[
"/ "/ source files
"/ (self loadPackage:aPackageId fromAllSourceFilesInDirectory:packageDir) ifTrue:[
@@ -2545,27 +2603,27 @@
"/ If that happens, we restart the set-building here
"/
[(classes := CachedClasses) isNil] whileTrue:[
- CachedClasses := classes := IdentitySet new:NumberOfClassesHint.
- self keysAndValuesDo:[:eachName :eachGlobal |
- (eachGlobal notNil and:[eachGlobal isBehavior]) ifTrue:[
- "/ sigh - would like to skip over aliases
- "/ but this cannot be done simply by comparing
- "/ the classes name against the store-key
- "/ i.e. cannot do:
- "/ anObject name == sym ifTrue:[
- "/ classes add:anObject
- "/ ]
- "/ because that would lead to ignore all java
- "/ classes, which are stored under a different
- "/ key.
-
- (eachGlobal name == eachName
- or:[eachGlobal isJavaClass]) ifTrue:[
- classes add:eachGlobal
- ].
- ]
- ].
- NumberOfClassesHint := classes size.
+ CachedClasses := classes := IdentitySet new:NumberOfClassesHint.
+ self keysAndValuesDo:[:eachName :eachGlobal |
+ (eachGlobal notNil and:[eachGlobal isBehavior]) ifTrue:[
+ "/ sigh - would like to skip over aliases
+ "/ but this cannot be done simply by comparing
+ "/ the classes name against the store-key
+ "/ i.e. cannot do:
+ "/ anObject name == sym ifTrue:[
+ "/ classes add:anObject
+ "/ ]
+ "/ because that would lead to ignore all java
+ "/ classes, which are stored under a different
+ "/ key.
+
+ (eachGlobal name == eachName
+ or:[eachGlobal isJavaClass]) ifTrue:[
+ classes add:eachGlobal
+ ].
+ ]
+ ].
+ NumberOfClassesHint := classes size.
].
^ classes
@@ -2588,8 +2646,8 @@
classes := IdentitySet new:NumberOfClassesHint*2.
self allClassesDo:[:eachClass |
- classes add:(eachClass theNonMetaclass).
- classes add:(eachClass theMetaclass).
+ classes add:(eachClass theNonMetaclass).
+ classes add:(eachClass theMetaclass).
].
^ classes
!
@@ -2600,13 +2658,13 @@
(i.e. anonymous ones have to be aquired by Behavior allSubInstances)"
^ self allClasses select:[:aClass |
- |owner|
-
- (aClass isRealNameSpace not)
- and:[
- owner := aClass topOwningClass.
- (owner ? aClass) nameSpace == Smalltalk
- ]
+ |owner|
+
+ (aClass isRealNameSpace not)
+ and:[
+ owner := aClass topOwningClass.
+ (owner ? aClass) nameSpace == Smalltalk
+ ]
]
"
@@ -2621,7 +2679,7 @@
methods := OrderedCollection new.
self allClassesDo:[:eachClass |
- methods addAll:(eachClass extensionsFrom:aProjectID).
+ methods addAll:(eachClass extensionsFrom:aProjectID).
].
^ methods
!
@@ -2631,12 +2689,12 @@
implementors := OrderedCollection new.
self allClassesDo:[:cls |
- (cls includesSelector:aSelector) ifTrue:[
- implementors add:cls.
- ].
- (cls class includesSelector:aSelector) ifTrue:[
- implementors add:cls class.
- ].
+ (cls includesSelector:aSelector) ifTrue:[
+ implementors add:cls.
+ ].
+ (cls class includesSelector:aSelector) ifTrue:[
+ implementors add:cls class.
+ ].
].
^ implementors
@@ -2646,35 +2704,66 @@
"
!
+allLoadedProjectIDs
+
+ ^ self allProjectsIdsIncludingUnloadedClasses: false
+
+
+ "
+ Smalltalk allLoadedProjectIDs
+ "
+!
+
allProjectIDs
+
+ ^ self allProjectsIdsIncludingUnloadedClasses: true
+
+
+ "
+ Smalltalk allProjectIDs
+ "
+!
+
+allProjectsIdsIncludingUnloadedClasses: includeUnloadedClasses
+ "Returns all projects ids.
+ Excludes projects coming from unloaded classes if includeUnloadedClasses is false.
+ "
+
|allProjects|
allProjects := Set new.
self allClassesDo:[:eachClass |
- |cls pkg|
-
- cls := eachClass theNonMetaclass.
-
- pkg := cls package.
- pkg "withoutSeparators" size > 0 ifTrue:[
- allProjects add:pkg.
- ] ifFalse:[
- "/ for now, nameSpaces are not in any package;
- "/ this might change. Then, 0-sized packages are
- "/ illegal, and the following should be enabled.
- "/ self halt
- ].
- cls isJavaClass ifFalse:[
- cls instAndClassSelectorsAndMethodsDo:[:sel :mthd |
- allProjects add:mthd package asSymbol.
- ].
- ].
+ |cls pkg|
+
+ (eachClass isRealNameSpace not) ifTrue:[
+ (includeUnloadedClasses or:[eachClass isLoaded]) ifTrue:[
+ cls := eachClass theNonMetaclass.
+ cls isPrivate ifTrue:[
+ cls := cls topOwningClass
+ ].
+ pkg := cls package.
+ pkg size > 0 ifTrue:[
+ allProjects add:pkg.
+ ] ifFalse:[
+ "/ for now, nameSpaces are not in any package;
+ "/ this might change. Then, 0-sized packages are
+ "/ illegal, and the following should be enabled.
+ "/ self halt
+ ].
+ cls isJavaClass ifFalse:[
+ cls instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+ allProjects add:mthd package asSymbol.
+ ].
+ ].
+ ].
+ ].
].
allProjects := allProjects asOrderedCollection sort.
^ allProjects
"
- Smalltalk allProjectIDs
+ Smalltalk allProjectsIdsIncludingUnloadedClasses: true
+ Smalltalk allProjectsIdsIncludingUnloadedClasses: false
"
!
@@ -2694,7 +2783,7 @@
classCategoryCompletion:aPartialCategory
"given a partial class category name, return an array consisting of
2 entries: 1st: the best (longest) match
- 2nd: collection consisting of matching categories"
+ 2nd: collection consisting of matching categories"
^ DoWhatIMeanSupport classCategoryCompletion:aPartialCategory inEnvironment:self
@@ -2720,45 +2809,45 @@
But be careful, to not invent new symbols ..."
sym := aString asSymbolIfInterned.
sym notNil ifTrue:[
- cls := self at:sym ifAbsent:nil.
- cls isBehavior ifTrue:[^ cls].
+ cls := self at:sym ifAbsent:nil.
+ cls isBehavior ifTrue:[^ cls].
].
(aString endsWith:' class') ifTrue:[
- nonMeta := self classNamed:(aString copyWithoutLast:6).
- nonMeta notNil ifTrue:[
- ^ nonMeta theMetaclass
- ].
+ nonMeta := self classNamed:(aString copyWithoutLast:6).
+ nonMeta notNil ifTrue:[
+ ^ nonMeta theMetaclass
+ ].
].
"no success yet. Try if this is a private classes of an autoloaded class"
cls isNil ifTrue:[
- idx := aString indexOfSubCollection:'::'.
- idx ~~ 0 ifTrue:[
- prefix := aString copyTo:idx-1.
- nsNameSymbol := prefix asSymbolIfInterned.
- nsNameSymbol notNil ifTrue:[
- rest := aString copyFrom:idx+2.
- namespace := self at:prefix asSymbolIfInterned ifAbsent:nil.
- "namespace may be the owner of a private class.
- NameSpaces and Behaviors have the same protocol"
- [namespace isBehavior] whileTrue:[
- idx := rest indexOfSubCollection:'::'.
- idx ~~ 0 ifTrue:[
- prefix := rest copyTo:idx-1.
- rest := rest copyFrom:idx+2.
- "this does an implicit autoload if required"
- namespace := namespace privateClassesAt:prefix.
- ] ifFalse:[
- namespace isLoaded ifTrue:[
- cls := namespace privateClassesAt:rest.
- cls isBehavior ifTrue:[^ cls].
- ].
- namespace := nil. "force exit of loop"
- ].
- ].
- ].
- ].
+ idx := aString indexOfSubCollection:'::'.
+ idx ~~ 0 ifTrue:[
+ prefix := aString copyTo:idx-1.
+ nsNameSymbol := prefix asSymbolIfInterned.
+ nsNameSymbol notNil ifTrue:[
+ rest := aString copyFrom:idx+2.
+ namespace := self at:prefix asSymbolIfInterned ifAbsent:nil.
+ "namespace may be the owner of a private class.
+ NameSpaces and Behaviors have the same protocol"
+ [namespace isBehavior] whileTrue:[
+ idx := rest indexOfSubCollection:'::'.
+ idx ~~ 0 ifTrue:[
+ prefix := rest copyTo:idx-1.
+ rest := rest copyFrom:idx+2.
+ "this does an implicit autoload if required"
+ namespace := namespace privateClassesAt:prefix.
+ ] ifFalse:[
+ namespace isLoaded ifTrue:[
+ cls := namespace privateClassesAt:rest.
+ cls isBehavior ifTrue:[^ cls].
+ ].
+ namespace := nil. "force exit of loop"
+ ].
+ ].
+ ].
+ ].
].
^ nil
@@ -2794,7 +2883,7 @@
classnameCompletion:aPartialClassName
"given a partial classname, return an array consisting of
2 entries: 1st: the best (longest) match
- 2nd: collection consisting of matching names"
+ 2nd: collection consisting of matching names"
^ DoWhatIMeanSupport classnameCompletion:aPartialClassName inEnvironment:self
!
@@ -2802,7 +2891,7 @@
classnameCompletion:aPartialClassName inEnvironment:anEnvironment
"given a partial classname, return an array consisting of
2 entries: 1st: the best (longest) match
- 2nd: collection consisting of matching names"
+ 2nd: collection consisting of matching names"
^ DoWhatIMeanSupport classnameCompletion:aPartialClassName inEnvironment:anEnvironment
@@ -2833,7 +2922,7 @@
globalNameCompletion:aPartialGlobalName
"given a partial globalName, return an array consisting of
2 entries: 1st: the best (longest) match
- 2nd: collection consisting of matching names"
+ 2nd: collection consisting of matching names"
^ DoWhatIMeanSupport globalNameCompletion:aPartialGlobalName inEnvironment:self
@@ -2851,7 +2940,7 @@
globalnameCompletion:aPartialGlobalName
"given a partial globalName, return an array consisting of
2 entries: 1st: the best (longest) match
- 2nd: collection consisting of matching names"
+ 2nd: collection consisting of matching names"
<resource:#obsolete>
self obsoleteMethodWarning:'use #globalNameCompletion:'.
@@ -2944,11 +3033,11 @@
i := aKey lastIndexOf:$:.
i ~~ 0 ifTrue:[
- i > 1 ifTrue:[
- (aKey at:(i-1)) == $: ifFalse:[
- ^ true.
- ].
- ].
+ i > 1 ifTrue:[
+ (aKey at:(i-1)) == $: ifFalse:[
+ ^ true.
+ ].
+ ].
].
^ false.
@@ -2970,15 +3059,15 @@
But be careful, to not invent new symbols ..."
sym := aString asSymbolIfInterned.
sym notNil ifTrue:[
- cls := self at:sym ifAbsent:nil.
- cls isBehavior ifTrue:[^ cls].
+ cls := self at:sym ifAbsent:nil.
+ cls isBehavior ifTrue:[^ cls].
].
(aString endsWith:' class') ifTrue:[
- nonMeta := self loadedClassNamed:(aString copyWithoutLast:6).
- nonMeta notNil ifTrue:[
- ^ nonMeta theMetaclass
- ].
+ nonMeta := self loadedClassNamed:(aString copyWithoutLast:6).
+ nonMeta notNil ifTrue:[
+ ^ nonMeta theMetaclass
+ ].
].
^ nil
@@ -2999,7 +3088,7 @@
methodProtocolCompletion:aPartialProtocolName
"given a partial method protocol name, return an array consisting of
2 entries: 1st: the best (longest) match
- 2nd: collection consisting of matching protocols"
+ 2nd: collection consisting of matching protocols"
^ DoWhatIMeanSupport methodProtocolCompletion:aPartialProtocolName inEnvironment:self
@@ -3028,10 +3117,10 @@
"redefined, since the references are only kept in the VM's symbol table"
self keysAndValuesDo:[:key :val |
- aCollection do:[:anObject |
- (key == anObject) ifTrue:[^ true].
- (val == anObject ) ifTrue:[^ true].
- ]
+ aCollection do:[:anObject |
+ (key == anObject) ifTrue:[^ true].
+ (val == anObject ) ifTrue:[^ true].
+ ]
].
^ super referencesAny:aCollection
@@ -3042,8 +3131,8 @@
"redefined, since the references are only kept in the VM's symbol table"
self keysAndValuesDo:[:key :val |
- (key isKindOf:aClass) ifTrue:[^ true].
- (val isKindOf:aClass) ifTrue:[^ true].
+ (key isKindOf:aClass) ifTrue:[^ true].
+ (val isKindOf:aClass) ifTrue:[^ true].
].
^ super referencesDerivedInstanceOf:aClass
!
@@ -3052,8 +3141,8 @@
"redefined, since the references are only kept in the VM's symbol table"
self keysAndValuesDo:[:key :val |
- (key isMemberOf:aClass) ifTrue:[^ true].
- (val isMemberOf:aClass) ifTrue:[^ true].
+ (key isMemberOf:aClass) ifTrue:[^ true].
+ (val isMemberOf:aClass) ifTrue:[^ true].
].
^ super referencesInstanceOf:aClass
!
@@ -3062,8 +3151,8 @@
"redefined, since the references are only kept in the VM's symbol table"
self keysAndValuesDo:[:key :val |
- (key == anObject) ifTrue:[^ true].
- (val == anObject ) ifTrue:[^ true].
+ (key == anObject) ifTrue:[^ true].
+ (val == anObject ) ifTrue:[^ true].
].
^ super referencesObject:anObject
@@ -3085,8 +3174,8 @@
aName := nameIn.
(aName startsWith:'Smalltalk::') ifTrue:[
- aName := aName copyFrom:12.
- ^ self at:(aName asSymbol) ifAbsent:nil.
+ aName := aName copyFrom:12.
+ ^ self at:(aName asSymbol) ifAbsent:nil.
].
sym := aName asSymbol.
@@ -3096,12 +3185,12 @@
ns := aClass nameSpace.
(ns notNil and:[ns ~~ Smalltalk]) ifTrue:[
- ns isNameSpace ifTrue:[
- cls := ns at:sym ifAbsent:nil.
- ] ifFalse:[
- cls := ns privateClassesAt:sym
- ].
- cls notNil ifTrue:[^ cls].
+ ns isNameSpace ifTrue:[
+ cls := ns at:sym ifAbsent:nil.
+ ] ifFalse:[
+ cls := ns privateClassesAt:sym
+ ].
+ cls notNil ifTrue:[^ cls].
].
^ self at:sym ifAbsent:nil.
@@ -3111,7 +3200,7 @@
selectorCompletion:aPartialSymbolName
"given a partial selector, return an array consisting of
2 entries: 1st: the longest match
- 2nd: collection consisting of matching implemented selectors"
+ 2nd: collection consisting of matching implemented selectors"
^ DoWhatIMeanSupport selectorCompletion:aPartialSymbolName inEnvironment:self
!
@@ -3119,7 +3208,7 @@
selectorCompletion:aPartialSymbolName inEnvironment:anEnvironment
"given a partial selector, return an array consisting of
2 entries: 1st: the longest match
- 2nd: collection consisting of matching implemented selectors"
+ 2nd: collection consisting of matching implemented selectors"
^ DoWhatIMeanSupport selectorCompletion:aPartialSymbolName inEnvironment:anEnvironment
@@ -3219,10 +3308,10 @@
idx := CommandLineArguments indexOf:'--browserParameters:'.
idx ~~ 0 ifTrue:[
- params := Dictionary new.
- (CommandLineArguments copyFrom:idx+1) pairWiseDo:[:key :value |
- params at:key put:value.
- ].
+ params := Dictionary new.
+ (CommandLineArguments copyFrom:idx+1) pairWiseDo:[:key :value |
+ params at:key put:value.
+ ].
].
'browserWindow is: ' errorPrint. windowID errorPrintCR.
@@ -3230,9 +3319,9 @@
'Display is: ' errorPrint. Display errorPrintCR.
process := [
- PluginSupport
- startInBrowserWithWindowID:windowID
- parameters:params.
+ PluginSupport
+ startInBrowserWithWindowID:windowID
+ parameters:params.
] newProcess.
process priority:(Processor userSchedulingPriority).
process name:'browser start handler'.
@@ -3270,42 +3359,42 @@
thisIsARestart := imageName notNil.
graphicalMode ifTrue:[
- Display isNil ifTrue:[
- (StartupClass notNil
- and:[ (StartupClass perform:#isHeadless ifNotUnderstood:false) ]) ifFalse:[
- self openDisplay.
- ].
- ].
+ Display isNil ifTrue:[
+ (StartupClass notNil
+ and:[ (StartupClass perform:#isHeadless ifNotUnderstood:false) ]) ifFalse:[
+ self openDisplay.
+ ].
+ ].
].
StandAlone ifFalse:[
- "
- enable the graphical debugger/inspector
- (they could have been (re)defined as autoloaded in the patches file)
- "
- self initStandardTools.
+ "
+ enable the graphical debugger/inspector
+ (they could have been (re)defined as autoloaded in the patches file)
+ "
+ self initStandardTools.
].
"
if there is a display, start its event dispatcher
"
Display notNil ifTrue:[
- Display deviceIOTimeoutErrorSignal handlerBlock:[:ex |
- SaveEmergencyImage == true ifTrue:[
- 'Display [warning]: broken display connection - emergency save in ''crash.img''.' infoPrintCR.
- ObjectMemory primSnapShotOn:'crash.img'.
- ].
- 'Display [warning]: broken display connection - exit.' infoPrintCR.
- self exit.
- ].
- Display startDispatch.
+ Display deviceIOTimeoutErrorSignal handlerBlock:[:ex |
+ SaveEmergencyImage == true ifTrue:[
+ 'Display [warning]: broken display connection - emergency save in ''crash.img''.' infoPrintCR.
+ ObjectMemory primSnapShotOn:'crash.img'.
+ ].
+ 'Display [warning]: broken display connection - exit.' infoPrintCR.
+ self exit.
+ ].
+ Display startDispatch.
].
idx := CommandLineArguments indexOf:'--browserWindow:'.
IsPlugin := (idx ~~ 0).
IsPlugin ifTrue:[
- self browserWindowStartup.
- "/ not reached
+ self browserWindowStartup.
+ "/ not reached
].
Initializing := false.
@@ -3316,49 +3405,49 @@
"/ Therefore, it is now done by an extra user-process.
process := [
- StartBlocks notNil ifTrue:[
- StartBlocks do:[:aBlock|
- aBlock value
- ].
- StartBlocks := nil.
- ].
- ImageStartBlocks notNil ifTrue:[
- ImageStartBlocks do:[:aBlock|
- aBlock value
- ].
- ].
- StandAlone ifFalse:[
- (SilentLoading == true) ifFalse:[ "i.e. undefined counts as false"
- thisIsARestart ifTrue:[
- Transcript cr.
- Transcript showCR:('Smalltalk restarted from:'
- , imageName
- , ' (saved '
- , ObjectMemory imageSaveTime printString
- , ')' ).
- ] ifFalse:[
- Transcript showCR:(self hello).
- Transcript showCR:(self copyrightString).
- ].
- Transcript cr.
- ].
-
- DemoMode==true ifTrue:[
- Transcript showCR:'*** Restricted use: ***'.
- Transcript showCR:'*** This program may be used for education only. ***'.
- Transcript showCR:'*** Please read the files COPYRIGHT and LICENSE ***'.
- Transcript showCR:'*** for more details. ***'.
- Transcript cr.
- ].
- ].
-
- thisIsARestart ifTrue:[
- "/
- "/ the final late notification - users can now assume that
- "/ views, forms etc. have been recreated.
-
- ObjectMemory changed:#returnFromSnapshot.
- ]
+ StartBlocks notNil ifTrue:[
+ StartBlocks do:[:aBlock|
+ aBlock value
+ ].
+ StartBlocks := nil.
+ ].
+ ImageStartBlocks notNil ifTrue:[
+ ImageStartBlocks do:[:aBlock|
+ aBlock value
+ ].
+ ].
+ StandAlone ifFalse:[
+ (SilentLoading == true) ifFalse:[ "i.e. undefined counts as false"
+ thisIsARestart ifTrue:[
+ Transcript cr.
+ Transcript showCR:('Smalltalk restarted from:'
+ , imageName
+ , ' (saved '
+ , ObjectMemory imageSaveTime printString
+ , ')' ).
+ ] ifFalse:[
+ Transcript showCR:(self hello).
+ Transcript showCR:(self copyrightString).
+ ].
+ Transcript cr.
+ ].
+
+ DemoMode==true ifTrue:[
+ Transcript showCR:'*** Restricted use: ***'.
+ Transcript showCR:'*** This program may be used for education only. ***'.
+ Transcript showCR:'*** Please read the files COPYRIGHT and LICENSE ***'.
+ Transcript showCR:'*** for more details. ***'.
+ Transcript cr.
+ ].
+ ].
+
+ thisIsARestart ifTrue:[
+ "/
+ "/ the final late notification - users can now assume that
+ "/ views, forms etc. have been recreated.
+
+ ObjectMemory changed:#returnFromSnapshot.
+ ]
] newProcess.
@@ -3375,60 +3464,60 @@
"/ message.
(StartupClass notNil and:[StartupSelector notNil]) ifTrue:[
- "
- allow more customization by reading an image specific rc-file
- "
- thisIsARestart ifTrue:[
- (imageName asFilename hasSuffix:'img') ifTrue:[
- imageName := imageName copyWithoutLast:4
- ].
- self fileIn:(imageName , '.rc')
- ].
+ "
+ allow more customization by reading an image specific rc-file
+ "
+ thisIsARestart ifTrue:[
+ (imageName asFilename hasSuffix:'img') ifTrue:[
+ imageName := imageName copyWithoutLast:4
+ ].
+ self fileIn:(imageName , '.rc')
+ ].
"/ Display notNil ifTrue:[
"/ Display exitOnLastClose:true.
"/ ].
"/ Processor exitWhenNoMoreUserProcesses:true.
- process := [
- StandAlone ifTrue:[
- AbortOperationRequest handle:[:ex |
- 'Smalltalk [info]: aborted - exit.' infoPrintCR.
- OperatingSystem exit:1
- ] do:[
- StartupClass perform:StartupSelector withArguments:StartupArguments.
- ]
- ] ifFalse:[
- StartupClass perform:StartupSelector withArguments:StartupArguments.
- ].
-
- "/
- "/ non-GUI apps exit after the startup;
- "/ assume that GUI apps have created & opened some view ...
- "/
- Display isNil ifTrue:[
- 'Smalltalk [info]: no Display - exit.' infoPrintCR.
- Smalltalk exit.
- ].
- "/
- "/ GUI apps exit after the last user process has finished
- "/
- Display exitOnLastClose:true.
- Processor exitWhenNoMoreUserProcesses:true.
- ] newProcess.
- process priority:(Processor userSchedulingPriority).
- process name:'main'.
- process beGroupLeader.
- process resume.
- process := true. "do not refer to process"
+ process := [
+ StandAlone ifTrue:[
+ AbortOperationRequest handle:[:ex |
+ 'Smalltalk [info]: aborted - exit.' infoPrintCR.
+ OperatingSystem exit:1
+ ] do:[
+ StartupClass perform:StartupSelector withArguments:StartupArguments.
+ ]
+ ] ifFalse:[
+ StartupClass perform:StartupSelector withArguments:StartupArguments.
+ ].
+
+ "/
+ "/ non-GUI apps exit after the startup;
+ "/ assume that GUI apps have created & opened some view ...
+ "/
+ Display isNil ifTrue:[
+ 'Smalltalk [info]: no Display - exit.' infoPrintCR.
+ Smalltalk exit.
+ ].
+ "/
+ "/ GUI apps exit after the last user process has finished
+ "/
+ Display exitOnLastClose:true.
+ Processor exitWhenNoMoreUserProcesses:true.
+ ] newProcess.
+ process priority:(Processor userSchedulingPriority).
+ process name:'main'.
+ process beGroupLeader.
+ process resume.
+ process := true. "do not refer to process"
].
StandAlone ifTrue:[
- Display notNil ifTrue:[
- FlyByHelp notNil ifTrue:[
- FlyByHelp start
- ].
- ].
+ Display notNil ifTrue:[
+ FlyByHelp notNil ifTrue:[
+ FlyByHelp start
+ ].
+ ].
].
self hideSplashWindow. "/ if there is one, its now time to hide it
@@ -3440,13 +3529,13 @@
((Display notNil and:[graphicalMode])
or:[process notNil
or:[HeadlessOperation]]) ifTrue:[
- Processor dispatchLoop.
- "done - the last process finished"
- 'Smalltalk [info]: last process finished - exit.' infoPrintCR.
+ Processor dispatchLoop.
+ "done - the last process finished"
+ 'Smalltalk [info]: last process finished - exit.' infoPrintCR.
] ifFalse:[
- StandAlone ifFalse:[
- self readEvalPrint
- ]
+ StandAlone ifFalse:[
+ self readEvalPrint
+ ]
].
self exit
@@ -3463,27 +3552,27 @@
'Smalltalk [info]: opening display...' infoPrintCR.
Display isNil ifTrue:[
- Screen notNil ifTrue:[
- [
- Screen openDefaultDisplay:nil.
- ] on:Screen deviceOpenErrorSignal do:[:ex|
- ('Smalltalk [error]: No Display connection to: ', ex parameter printString) errorPrintCR.
- 'Smalltalk [info]: Either set the DISPLAY environment variable,' infoPrintCR.
- 'Smalltalk [info]: or start smalltalk with a -display argument.' infoPrintCR.
- HeadlessOperation == true ifFalse:[
- OperatingSystem exit:1.
- ].
- ].
-
- Display notNil ifTrue:[
- (self secureFileIn:'display.rc') ifFalse:[
- "/ 'Smalltalk [warning]: no display.rc found; screen setting might be wrong.' errorPrintCR.
- (self secureFileIn:'keyboard.rc') ifFalse:[
- "/ 'Smalltalk [warning]: no keyboard.rc found; shortkey setting might be wrong.' errorPrintCR.
- ]
- ]
- ].
- ]
+ Screen notNil ifTrue:[
+ [
+ Screen openDefaultDisplay:nil.
+ ] on:Screen deviceOpenErrorSignal do:[:ex|
+ ('Smalltalk [error]: No Display connection to: ', ex parameter printString) errorPrintCR.
+ 'Smalltalk [info]: Either set the DISPLAY environment variable,' infoPrintCR.
+ 'Smalltalk [info]: or start smalltalk with a -display argument.' infoPrintCR.
+ HeadlessOperation == true ifFalse:[
+ OperatingSystem exit:1.
+ ].
+ ].
+
+ Display notNil ifTrue:[
+ (self secureFileIn:'display.rc') ifFalse:[
+ "/ 'Smalltalk [warning]: no display.rc found; screen setting might be wrong.' errorPrintCR.
+ (self secureFileIn:'keyboard.rc') ifFalse:[
+ "/ 'Smalltalk [warning]: no keyboard.rc found; shortkey setting might be wrong.' errorPrintCR.
+ ]
+ ]
+ ].
+ ]
]
"Created: / 06-12-2006 / 15:38:17 / cg"
@@ -3505,15 +3594,15 @@
#earlySystemInstallation is sent for ST80 compatibility
#earlyRestart is send first, nothing has been setup yet.
- (should be used to flush all device dependent entries)
+ (should be used to flush all device dependent entries)
#restarted is send right after.
- (should be used to recreate external resources (fds, bitmaps etc)
+ (should be used to recreate external resources (fds, bitmaps etc)
#returnFromSnapshot is sent last
- (should be used to restart processes, reOpen Streams which cannot
- be automatically be reopened (i.e. Sockets, Pipes) and so on.
- (Notice that positionable fileStreams are already reopened and repositioned)
+ (should be used to restart processes, reOpen Streams which cannot
+ be automatically be reopened (i.e. Sockets, Pipes) and so on.
+ (Notice that positionable fileStreams are already reopened and repositioned)
"
|deb insp transcript idx|
@@ -3537,12 +3626,12 @@
idx := CommandLineArguments indexOf:'-q'.
idx == 0 ifTrue:[
- idx := CommandLineArguments indexOf:'--silent'.
+ idx := CommandLineArguments indexOf:'--silent'.
].
idx ~~ 0 ifTrue:[
- Object infoPrinting:false.
- ObjectMemory infoPrinting:false.
- CommandLineArguments removeAtIndex:idx.
+ Object infoPrinting:false.
+ ObjectMemory infoPrinting:false.
+ CommandLineArguments removeAtIndex:idx.
].
"/
@@ -3577,7 +3666,7 @@
insp := Inspector.
deb := Debugger.
deb notNil ifTrue:[
- deb reinitialize
+ deb reinitialize
].
Inspector := MiniInspector.
Debugger := MiniDebugger.
@@ -3590,7 +3679,7 @@
"/ ObjectFileLoader; therefore, must reload before doing any notifications.
ObjectFileLoader notNil ifTrue:[
- ObjectFileLoader reloadAllRememberedObjectFiles.
+ ObjectFileLoader reloadAllRememberedObjectFiles.
].
"/
@@ -3599,9 +3688,9 @@
"/ a display during early startup.
Screen notNil ifTrue:[
- Screen allScreens do:[:aDisplay |
- aDisplay invalidateConnection
- ].
+ Screen allScreens do:[:aDisplay |
+ aDisplay invalidateConnection
+ ].
].
ObjectMemory changed:#earlySystemInstallation.
@@ -3617,7 +3706,7 @@
"/ (mostly view/GC/color & font stuff)
ObjectMemory
- changed:#earlyRestart; changed:#restarted.
+ changed:#earlyRestart; changed:#restarted.
"/
"/ start catching SIGINT and SIGQUIT
@@ -3630,75 +3719,75 @@
idx := CommandLineArguments indexOf:'--faststart'.
idx == 0 ifTrue:[
- idx := CommandLineArguments indexOf:'--fastStart'.
+ idx := CommandLineArguments indexOf:'--fastStart'.
].
idx ~~ 0 ifTrue:[
- CommandLineArguments removeAtIndex:idx.
+ CommandLineArguments removeAtIndex:idx.
] ifFalse:[
- CallbackSignal := QuerySignal new.
- [
- Class withoutUpdatingChangesDo:[
- (self fileIn:(self commandName , '_r.rc')) ifFalse:[
- "no _r.rc file where executable is; try default smalltalk_r.rc"
- self fileIn:'smalltalk_r.rc'
- ].
- ]
- ] on:CallbackSignal do:[:ex|
- "/ now, display and view-stuff works;
- "/ back to the previous debugging interface
-
- Inspector := insp.
- Debugger := deb.
-
- "/ reinstall Transcript, if not changed during restart.
- "/ if there was no Transcript, go to stderr
-
- (transcript notNil and:[Transcript == Stderr]) ifTrue:[
- Transcript := transcript.
- ].
- Initializing := false.
- ex proceed.
- ].
- CallbackSignal := nil.
+ CallbackSignal := QuerySignal new.
+ [
+ Class withoutUpdatingChangesDo:[
+ (self fileIn:(self commandName , '_r.rc')) ifFalse:[
+ "no _r.rc file where executable is; try default smalltalk_r.rc"
+ self fileIn:'smalltalk_r.rc'
+ ].
+ ]
+ ] on:CallbackSignal do:[:ex|
+ "/ now, display and view-stuff works;
+ "/ back to the previous debugging interface
+
+ Inspector := insp.
+ Debugger := deb.
+
+ "/ reinstall Transcript, if not changed during restart.
+ "/ if there was no Transcript, go to stderr
+
+ (transcript notNil and:[Transcript == Stderr]) ifTrue:[
+ Transcript := transcript.
+ ].
+ Initializing := false.
+ ex proceed.
+ ].
+ CallbackSignal := nil.
].
"/ reinitialization (restart) of Display is normally performed
"/ in the restart script. If this has not been run for some reason,
"/ do in now.
Initializing ifTrue:[
- Display notNil ifTrue:[
- [
- Display reinitializeFor:Screen defaultDisplayName.
- ] on:Screen deviceOpenErrorSignal do:[
- 'Smalltalk [error]: Cannot restart connection to: ' errorPrint.
- Screen defaultDisplayName errorPrintCR.
- OperatingSystem exit:1.
- ].
- ].
- "/ now, display and view-stuff works;
- "/ back to the previous debugging interface
-
- Inspector := insp.
- Debugger := deb.
-
- "/ reinstall Transcript, if not changed during restart.
- "/ if there was no Transcript, go to stderr
-
- (transcript notNil and:[Transcript == Stderr]) ifTrue:[
- Transcript := transcript.
- ].
- Initializing := false.
+ Display notNil ifTrue:[
+ [
+ Display reinitializeFor:Screen defaultDisplayName.
+ ] on:Screen deviceOpenErrorSignal do:[
+ 'Smalltalk [error]: Cannot restart connection to: ' errorPrint.
+ Screen defaultDisplayName errorPrintCR.
+ OperatingSystem exit:1.
+ ].
+ ].
+ "/ now, display and view-stuff works;
+ "/ back to the previous debugging interface
+
+ Inspector := insp.
+ Debugger := deb.
+
+ "/ reinstall Transcript, if not changed during restart.
+ "/ if there was no Transcript, go to stderr
+
+ (transcript notNil and:[Transcript == Stderr]) ifTrue:[
+ Transcript := transcript.
+ ].
+ Initializing := false.
].
Screen notNil ifTrue:[
- "clean up leftover screens (and views) that haven't been reopened.
- Operate on a copy, since brokenConnection removes us from AllScreens"
- Screen allScreens copy do:[:eachDisplay |
- eachDisplay isOpen ifFalse:[
- 'Smalltalk [info]: cannot reopen secondary display: ' errorPrint.
- eachDisplay errorPrintCR.
- eachDisplay cleanupAfterDispatch; brokenConnection.
- ]
- ].
+ "clean up leftover screens (and views) that haven't been reopened.
+ Operate on a copy, since brokenConnection removes us from AllScreens"
+ Screen allScreens copy do:[:eachDisplay |
+ eachDisplay isOpen ifFalse:[
+ 'Smalltalk [info]: cannot reopen secondary display: ' errorPrint.
+ eachDisplay errorPrintCR.
+ eachDisplay cleanupAfterDispatch; brokenConnection.
+ ]
+ ].
].
deb := insp := transcript := nil. "avoid dangling refs"
@@ -3725,11 +3814,11 @@
int clr = 0;
if (__isString(aMessageStringOrNil)) {
- msg = __stringVal(aMessageStringOrNil);
+ msg = __stringVal(aMessageStringOrNil);
}
if (__isSmallInteger(rgbValueOrNil)) {
- clr = __intVal(rgbValueOrNil);
- __win32_splashMessageColor(clr);
+ clr = __intVal(rgbValueOrNil);
+ __win32_splashMessageColor(clr);
}
__win32_splashMessage(msg);
#endif
@@ -3758,145 +3847,145 @@
while reading patches- and rc-file, do not add things into change-file
"
Class withoutUpdatingChangesDo:[
- |commandFile defaultRC prevCatchSetting|
-
- didReadRCFile := false.
-
- StandAlone ifFalse:[
- "/
- "/ look for any '-q', '-e' or '-f' command line arguments
- "/ and handle them;
- "/ read startup and patches file
- "/
- idx := CommandLineArguments indexOf:'-q'.
- idx == 0 ifTrue:[
- idx := CommandLineArguments indexOf:'--silent'.
- ].
- idx ~~ 0 ifTrue:[
- Object infoPrinting:false.
- ObjectMemory infoPrinting:false.
- CommandLineArguments removeAtIndex:idx.
- ].
-
- "/ look for a '-e filename' or '--execute filename' argument
- "/ this will force fileIn of filename only, no standard startup.
-
- idx := CommandLineArguments indexOf:'-e'.
- idx == 0 ifTrue:[
- idx := CommandLineArguments indexOf:'--execute'.
- ].
- idx ~~ 0 ifTrue:[
- arg := CommandLineArguments at:idx + 1.
-
- CommandLineArguments
- removeAtIndex:idx+1; removeAtIndex:idx.
-
- arg = '-' ifTrue:[
- self fileInStream:Stdin
- lazy:nil
- silent:nil
- logged:false
- addPath:nil
- ] ifFalse:[
- self fileIn:arg.
- ].
- self exit
- ].
-
- "/ look for a '-E expr' or '--eval expr' argument
- "/ this will force evaluation of expr only, no standard startup
- idx := CommandLineArguments indexOf:'-E'.
- idx == 0 ifTrue:[
- idx := CommandLineArguments indexOf:'--eval'.
- ].
- idx ~~ 0 ifTrue:[
- arg := CommandLineArguments at:idx + 1.
-
- CommandLineArguments
- removeAtIndex:idx+1; removeAtIndex:idx.
-
- self
- fileInStream:arg readStream
- lazy:nil
- silent:nil
- logged:false
- addPath:nil.
-
- self exit
- ].
-
- "look for a '-f filename' or '--file filename' argument
- this will force evaluation of filename instead of smalltalk.rc"
-
- idx := CommandLineArguments indexOf:'-f'.
- idx == 0 ifTrue:[
- idx := CommandLineArguments indexOf:'--file'.
- ].
- idx ~~ 0 ifTrue:[
- commandFile := CommandLineArguments at:idx+1.
- CommandLineArguments removeAtIndex:idx+1; removeAtIndex:idx.
- ].
- ].
-
- commandFile notNil ifTrue:[
- (self secureFileIn:commandFile) ifFalse:[
- ('Smalltalk [error]: startup file "', commandFile, '" not found.') errorPrintCR.
- OperatingSystem exit:1.
- ].
- ] ifFalse:[
- "/ look for <command>.rc
- "/ if not found, read smalltalk.rc (or stxapp.rc for standAlone operation)
-
- commandFile := self commandName asFilename withSuffix:'rc'.
- (didReadRCFile := self secureFileIn:commandFile) ifFalse:[
- StandAlone ifFalse:[
- defaultRC := 'smalltalk.rc'
- ] ifTrue:[
- defaultRC := 'stxapp.rc'
- ].
-
- didReadRCFile := self secureFileIn:defaultRC.
- didReadRCFile ifFalse:[
- StandAlone ifFalse:[
- 'Smalltalk [warning]: no startup rc-file found. Going into line-by-line interpreter.' infoPrintCR.
- graphicalMode := false.
- ]
- ]
- ].
-
- "/ ('StandAlone is %1' bindWith:StandAlone) printCR.
- "/ ('Headless is %1' bindWith:HeadlessOperation) printCR.
- "/ ('Display is %1' bindWith:Display) printCR.
- "/ ('Screen is %1' bindWith:Screen) printCR.
-
- didReadRCFile ifFalse:[
- self secureFileIn:'private.rc'.
-
- "/
- "/ No RC file found;
- "/ Setup more default stuff
- "/
- StandAlone ifFalse:[
- "/ its a smalltalk - proceed in interpreter.
- 'Smalltalk [warning]: no startup rc-file found. Going into line-by-line interpreter.' infoPrintCR.
- graphicalMode := false.
- ].
-
- "/ setup more defaults...
- ObjectMemory startBackgroundCollectorAt:5.
- ObjectMemory startBackgroundFinalizationAt:5.
- self addStartBlock:[
- Processor startTimeSlicing.
- Processor supportDynamicPriorities:true.
- ObjectMemory backgroundCollectProcess priorityRange:(4 to:9).
- ObjectMemory backgroundFinalizationProcess priorityRange:(4 to:9).
- ].
- ].
- ].
+ |commandFile defaultRC prevCatchSetting|
+
+ didReadRCFile := false.
+
+ StandAlone ifFalse:[
+ "/
+ "/ look for any '-q', '-e' or '-f' command line arguments
+ "/ and handle them;
+ "/ read startup and patches file
+ "/
+ idx := CommandLineArguments indexOf:'-q'.
+ idx == 0 ifTrue:[
+ idx := CommandLineArguments indexOf:'--silent'.
+ ].
+ idx ~~ 0 ifTrue:[
+ Object infoPrinting:false.
+ ObjectMemory infoPrinting:false.
+ CommandLineArguments removeAtIndex:idx.
+ ].
+
+ "/ look for a '-e filename' or '--execute filename' argument
+ "/ this will force fileIn of filename only, no standard startup.
+
+ idx := CommandLineArguments indexOf:'-e'.
+ idx == 0 ifTrue:[
+ idx := CommandLineArguments indexOf:'--execute'.
+ ].
+ idx ~~ 0 ifTrue:[
+ arg := CommandLineArguments at:idx + 1.
+
+ CommandLineArguments
+ removeAtIndex:idx+1; removeAtIndex:idx.
+
+ arg = '-' ifTrue:[
+ self fileInStream:Stdin
+ lazy:nil
+ silent:nil
+ logged:false
+ addPath:nil
+ ] ifFalse:[
+ self fileIn:arg.
+ ].
+ self exit
+ ].
+
+ "/ look for a '-E expr' or '--eval expr' argument
+ "/ this will force evaluation of expr only, no standard startup
+ idx := CommandLineArguments indexOf:'-E'.
+ idx == 0 ifTrue:[
+ idx := CommandLineArguments indexOf:'--eval'.
+ ].
+ idx ~~ 0 ifTrue:[
+ arg := CommandLineArguments at:idx + 1.
+
+ CommandLineArguments
+ removeAtIndex:idx+1; removeAtIndex:idx.
+
+ self
+ fileInStream:arg readStream
+ lazy:nil
+ silent:nil
+ logged:false
+ addPath:nil.
+
+ self exit
+ ].
+
+ "look for a '-f filename' or '--file filename' argument
+ this will force evaluation of filename instead of smalltalk.rc"
+
+ idx := CommandLineArguments indexOf:'-f'.
+ idx == 0 ifTrue:[
+ idx := CommandLineArguments indexOf:'--file'.
+ ].
+ idx ~~ 0 ifTrue:[
+ commandFile := CommandLineArguments at:idx+1.
+ CommandLineArguments removeAtIndex:idx+1; removeAtIndex:idx.
+ ].
+ ].
+
+ commandFile notNil ifTrue:[
+ (self secureFileIn:commandFile) ifFalse:[
+ ('Smalltalk [error]: startup file "', commandFile, '" not found.') errorPrintCR.
+ OperatingSystem exit:1.
+ ].
+ ] ifFalse:[
+ "/ look for <command>.rc
+ "/ if not found, read smalltalk.rc (or stxapp.rc for standAlone operation)
+
+ commandFile := self commandName asFilename withSuffix:'rc'.
+ (didReadRCFile := self secureFileIn:commandFile) ifFalse:[
+ StandAlone ifFalse:[
+ defaultRC := 'smalltalk.rc'
+ ] ifTrue:[
+ defaultRC := 'stxapp.rc'
+ ].
+
+ didReadRCFile := self secureFileIn:defaultRC.
+ didReadRCFile ifFalse:[
+ StandAlone ifFalse:[
+ 'Smalltalk [warning]: no startup rc-file found. Going into line-by-line interpreter.' infoPrintCR.
+ graphicalMode := false.
+ ]
+ ]
+ ].
+
+ "/ ('StandAlone is %1' bindWith:StandAlone) printCR.
+ "/ ('Headless is %1' bindWith:HeadlessOperation) printCR.
+ "/ ('Display is %1' bindWith:Display) printCR.
+ "/ ('Screen is %1' bindWith:Screen) printCR.
+
+ didReadRCFile ifFalse:[
+ self secureFileIn:'private.rc'.
+
+ "/
+ "/ No RC file found;
+ "/ Setup more default stuff
+ "/
+ StandAlone ifFalse:[
+ "/ its a smalltalk - proceed in interpreter.
+ 'Smalltalk [warning]: no startup rc-file found. Going into line-by-line interpreter.' infoPrintCR.
+ graphicalMode := false.
+ ].
+
+ "/ setup more defaults...
+ ObjectMemory startBackgroundCollectorAt:5.
+ ObjectMemory startBackgroundFinalizationAt:5.
+ self addStartBlock:[
+ Processor startTimeSlicing.
+ Processor supportDynamicPriorities:true.
+ ObjectMemory backgroundCollectProcess priorityRange:(4 to:9).
+ ObjectMemory backgroundFinalizationProcess priorityRange:(4 to:9).
+ ].
+ ].
+ ].
].
HeadlessOperation ifTrue:[
- graphicalMode := false.
+ graphicalMode := false.
].
self mainStartup:graphicalMode
@@ -3911,23 +4000,23 @@
|p|
p :=
- [
- |startBlocks|
-
- startBlocks := self startBlocks.
- startBlocks notNil ifTrue:[
- startBlocks do:[:aBlock|
- aBlock value
- ].
- startBlocks removeAll.
- ].
- ] newProcess.
+ [
+ |startBlocks|
+
+ startBlocks := self startBlocks.
+ startBlocks notNil ifTrue:[
+ startBlocks do:[:aBlock|
+ aBlock value
+ ].
+ startBlocks removeAll.
+ ].
+ ] newProcess.
p
- priority:(Processor userSchedulingPriority);
- name:'start block handler';
- beGroupLeader;
- resume.
+ priority:(Processor userSchedulingPriority);
+ name:'start block handler';
+ beGroupLeader;
+ resume.
! !
!Smalltalk class methodsFor:'startup queries'!
@@ -3952,7 +4041,7 @@
args := self commandLineArguments.
index := args indexOf:aString.
(index between:1 and:(args size - 1)) ifTrue:[
- ^ args at:index+1
+ ^ args at:index+1
].
^ nil.
@@ -4245,26 +4334,26 @@
table := IdentityDictionary new:100.
Method allSubInstancesDo:[:aMethod |
- source := nil.
- aMethod sourcePosition notNil ifTrue:[
- aMethod sourceFilename = 'st.src' ifTrue:[
- source := aMethod source.
- ]
- ] ifFalse:[
- source := aMethod source
- ].
-
- source notNil ifTrue:[
- pos := newStream position1Based.
- newStream nextChunkPut:source.
-
- "
- dont change the methods info - maybe some write error
- occurs later, in that case we abort and leave everything
- untouched.
- "
- table at:aMethod put:pos
- ]
+ source := nil.
+ aMethod sourcePosition notNil ifTrue:[
+ aMethod sourceFilename = 'st.src' ifTrue:[
+ source := aMethod source.
+ ]
+ ] ifFalse:[
+ source := aMethod source
+ ].
+
+ source notNil ifTrue:[
+ pos := newStream position1Based.
+ newStream nextChunkPut:source.
+
+ "
+ dont change the methods info - maybe some write error
+ occurs later, in that case we abort and leave everything
+ untouched.
+ "
+ table at:aMethod put:pos
+ ]
].
newStream syncData; close.
@@ -4279,7 +4368,7 @@
source reference"
table keysAndValuesDo:[:aMethod :pos |
- aMethod localSourceFilename:fileName position:pos.
+ aMethod localSourceFilename:fileName position:pos.
"/ aMethod printCR.
].
@@ -4307,18 +4396,18 @@
table := IdentityDictionary new:100.
Method allSubInstancesDo:[:aMethod |
- source := aMethod source.
- source notNil ifTrue:[
- pos := newStream position1Based.
- newStream nextChunkPut:source.
-
- "
- dont change the methods info - maybe some write error
- occurs later, in that case we abort and leave everything
- untouched.
- "
- table at:aMethod put:pos
- ]
+ source := aMethod source.
+ source notNil ifTrue:[
+ pos := newStream position1Based.
+ newStream nextChunkPut:source.
+
+ "
+ dont change the methods info - maybe some write error
+ occurs later, in that case we abort and leave everything
+ untouched.
+ "
+ table at:aMethod put:pos
+ ]
].
newStream syncData; close.
@@ -4333,7 +4422,7 @@
source reference"
table keysAndValuesDo:[:aMethod :pos |
- aMethod localSourceFilename:fileName position:pos.
+ aMethod localSourceFilename:fileName position:pos.
"/ aMethod printCR.
].
@@ -4352,11 +4441,11 @@
(otherwise, the newest revision will be loaded"
^ self
- installAutoloadedClassNamed:clsName
- category:cat
- package:package
- revision:revisionOrNil
- numClassInstVars:nil.
+ installAutoloadedClassNamed:clsName
+ category:cat
+ package:package
+ revision:revisionOrNil
+ numClassInstVars:nil.
!
installAutoloadedClassNamed:clsName category:cat package:package revision:revisionOrNil numClassInstVars:numClassInstVarsOrNil
@@ -4371,36 +4460,36 @@
"/ install if not already compiled-in
(cls := self at:clsSym) isNil ifTrue:[
- Autoload subclass:clsSym
- instanceVariableNames:''
- classVariableNames:''
- poolDictionaries:''
- category:cat
- inEnvironment:Smalltalk.
-
- cls := self at:clsSym.
- cls isNil ifTrue:[
- ('Smalltalk [warning]: failed to install ' , clsName , ' as autoloaded.') infoPrintCR.
- ] ifFalse:[
- cls package:package asSymbol.
- revisionOrNil notNil ifTrue:[
- cls setBinaryRevision:revisionOrNil
- ]
- ]
+ Autoload subclass:clsSym
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:cat
+ inEnvironment:Smalltalk.
+
+ cls := self at:clsSym.
+ cls isNil ifTrue:[
+ ('Smalltalk [warning]: failed to install ' , clsName , ' as autoloaded.') infoPrintCR.
+ ] ifFalse:[
+ cls package:package asSymbol.
+ revisionOrNil notNil ifTrue:[
+ cls setBinaryRevision:revisionOrNil
+ ]
+ ]
] ifFalse:[
- "/ class already present - however, if unloaded, check for category/package change
- cls isLoaded ifFalse:[
- package ~= cls package ifTrue:[
- cls withoutUpdatingChangesDo:[
- cls package:package asSymbol.
- ].
- ].
- cat ~= cls category ifTrue:[
- cls withoutUpdatingChangesDo:[
- cls category:cat.
- ].
- ].
- ].
+ "/ class already present - however, if unloaded, check for category/package change
+ cls isLoaded ifFalse:[
+ package ~= cls package ifTrue:[
+ cls withoutUpdatingChangesDo:[
+ cls package:package asSymbol.
+ ].
+ ].
+ cat ~= cls category ifTrue:[
+ cls withoutUpdatingChangesDo:[
+ cls category:cat.
+ ].
+ ].
+ ].
].
^ cls.
@@ -4419,15 +4508,15 @@
"/ along the package-path
self packagePath do:[:eachPathComponent |
- (dirsConsulted includes:eachPathComponent) ifFalse:[
- self
- recursiveInstallAutoloadedClassesFrom:eachPathComponent
- rememberIn:dirsConsulted
- maxLevels:15
- noAutoload:false
- packageTop:eachPathComponent
- showSplashInLevels:2.
- ]
+ (dirsConsulted includes:eachPathComponent) ifFalse:[
+ self
+ recursiveInstallAutoloadedClassesFrom:eachPathComponent
+ rememberIn:dirsConsulted
+ maxLevels:15
+ noAutoload:false
+ packageTop:eachPathComponent
+ showSplashInLevels:2.
+ ]
].
self splashInfo:nil.
@@ -4449,15 +4538,15 @@
f isNil ifTrue:[f := self getPackageFileName:anAbbrevFilePath].
f notNil ifTrue:[
- f := f asFilename.
- f isDirectory ifTrue:[
- f := f construct:'abbrev.stc'
- ].
- [
- s := f readStream.
- self installAutoloadedClassesFromStream:s.
- s close.
- ] on:FileStream openErrorSignal do:[:ex| "do nothing"].
+ f := f asFilename.
+ f isDirectory ifTrue:[
+ f := f construct:'abbrev.stc'
+ ].
+ [
+ s := f readStream.
+ self installAutoloadedClassesFromStream:s.
+ s close.
+ ] on:FileStream openErrorSignal do:[:ex| "do nothing"].
]
"
@@ -4476,76 +4565,76 @@
|s2 l abbrevFileName info clsName cls abbrev package cat numClassInstVars words w|
anAbbrevFileStream isFileStream ifTrue:[
- abbrevFileName := anAbbrevFileStream pathName.
- info := 'declared from: ', abbrevFileName.
+ abbrevFileName := anAbbrevFileStream pathName.
+ info := 'declared from: ', abbrevFileName.
].
KnownPackages isNil ifTrue:[
- KnownPackages := Set new.
+ KnownPackages := Set new.
].
"/ yes, create any required nameSpace, without asking user.
Class createNameSpaceQuerySignal answer:true do:[
- [anAbbrevFileStream atEnd] whileFalse:[
- l := anAbbrevFileStream nextLine withoutSeparators.
- l notEmpty ifTrue:[
- "/ must do it manually, caring for quoted strings.
+ [anAbbrevFileStream atEnd] whileFalse:[
+ l := anAbbrevFileStream nextLine withoutSeparators.
+ l notEmpty ifTrue:[
+ "/ must do it manually, caring for quoted strings.
"/ words := line asCollectionOfWords.
- words := OrderedCollection new.
- s2 := l readStream.
- [s2 atEnd] whileFalse:[
- s2 skipSeparators.
- s2 peek == $' ifTrue:[
- s2 next.
- w := s2 upTo:$'.
- s2 skipSeparators.
- ] ifFalse:[
- w := s2 upToSeparator
- ].
- words add:w
- ].
- words size < 3 ifTrue:[
- 'Smalltalk [warning]: bad abbrev entry' errorPrint.
- anAbbrevFileStream isFileStream ifTrue:[
- ' (in ''' errorPrint.
- anAbbrevFileStream pathName errorPrint.
- ''')' errorPrint
- ].
- ': ' errorPrint. l errorPrintCR
- ] ifFalse:[
- clsName := (words at:1) asSymbol.
- abbrev := (words at:2).
- package := (words at:3) asSymbol.
- cat := words at:4 ifAbsent:nil.
- numClassInstVars := words at:5 ifAbsent:'0'.
- numClassInstVars := Integer readFrom:numClassInstVars onError:[0].
+ words := OrderedCollection new.
+ s2 := l readStream.
+ [s2 atEnd] whileFalse:[
+ s2 skipSeparators.
+ s2 peek == $' ifTrue:[
+ s2 next.
+ w := s2 upTo:$'.
+ s2 skipSeparators.
+ ] ifFalse:[
+ w := s2 upToSeparator
+ ].
+ words add:w
+ ].
+ words size < 3 ifTrue:[
+ 'Smalltalk [warning]: bad abbrev entry' errorPrint.
+ anAbbrevFileStream isFileStream ifTrue:[
+ ' (in ''' errorPrint.
+ anAbbrevFileStream pathName errorPrint.
+ ''')' errorPrint
+ ].
+ ': ' errorPrint. l errorPrintCR
+ ] ifFalse:[
+ clsName := (words at:1) asSymbol.
+ abbrev := (words at:2).
+ package := (words at:3) asSymbol.
+ cat := words at:4 ifAbsent:nil.
+ numClassInstVars := words at:5 ifAbsent:'0'.
+ numClassInstVars := Integer readFrom:numClassInstVars onError:[0].
"/ KnownPackages add:package.
- (cat size == 0) ifTrue:[
- cat := 'autoloaded'
- ].
-
- "/ on the fly, update the abbreviations
- self setFilename:abbrev forClass:clsName package:package.
-
- "/ ' autoloaded: ' print. clsName print. ' in ' print. cat printCR.
-
- cls := self
- installAutoloadedClassNamed:clsName
- category:cat
- package:package
- revision:nil
- numClassInstVars:numClassInstVars.
+ (cat size == 0) ifTrue:[
+ cat := 'autoloaded'
+ ].
+
+ "/ on the fly, update the abbreviations
+ self setFilename:abbrev forClass:clsName package:package.
+
+ "/ ' autoloaded: ' print. clsName print. ' in ' print. cat printCR.
+
+ cls := self
+ installAutoloadedClassNamed:clsName
+ category:cat
+ package:package
+ revision:nil
+ numClassInstVars:numClassInstVars.
"/ info notNil ifTrue:[
"/ cls setComment:info.
"/ ].
- ]
- ]
- ]
+ ]
+ ]
+ ]
]
!
@@ -4562,11 +4651,11 @@
"turn on/off loading of binary objects"
aBoolean ifTrue:[
- (ObjectFileLoader notNil and:[ObjectFileLoader canLoadObjectFiles]) ifTrue:[
- LoadBinaries := true.
- ^ self
- ].
- 'Smalltalk [info]: this system does not support binary loading' infoPrintCR.
+ (ObjectFileLoader notNil and:[ObjectFileLoader canLoadObjectFiles]) ifTrue:[
+ LoadBinaries := true.
+ ^ self
+ ].
+ 'Smalltalk [info]: this system does not support binary loading' infoPrintCR.
].
LoadBinaries := false
@@ -4607,14 +4696,14 @@
Experimental and not yet used."
Method allSubInstancesDo:[:aMethod |
- |newMethod|
-
- aMethod hasPrimitiveCode ifFalse:[
- newMethod := aMethod asByteCodeMethod.
- newMethod ~~ aMethod ifTrue:[
- aMethod becomeSameAs:newMethod
- ]
- ].
+ |newMethod|
+
+ aMethod hasPrimitiveCode ifFalse:[
+ newMethod := aMethod asByteCodeMethod.
+ newMethod ~~ aMethod ifTrue:[
+ aMethod becomeSameAs:newMethod
+ ]
+ ].
].
"
@@ -4633,9 +4722,9 @@
If a file called NOPACKAGES is found, no further searching is done in that directory or below."
self
- recursiveInstallAutoloadedClassesFrom:aDirectory rememberIn:dirsConsulted
- maxLevels:maxLevels noAutoload:noAutoloadIn packageTop:packageTopPath
- showSplashInLevels:0.
+ recursiveInstallAutoloadedClassesFrom:aDirectory rememberIn:dirsConsulted
+ maxLevels:maxLevels noAutoload:noAutoloadIn packageTop:packageTopPath
+ showSplashInLevels:0.
"
Smalltalk installAutoloadedClasses
@@ -4657,48 +4746,48 @@
maxLevels == 0 ifTrue:[
"/ 'Smalltalk [warning]: max directory nesting reached.' infoPrintCR.
- ^ self
+ ^ self
].
dir := aDirectory asFilename.
dirName := dir pathName.
(dirsConsulted includes:dirName) ifTrue:[
- ^ self
+ ^ self
].
dirsConsulted add:dirName.
- (dir construct:'NOPACKAGES') exists ifTrue:[
- ^ self.
- ].
- (dir construct:'NOSUBAUTOLOAD') exists ifTrue:[
- ^ self.
+ (dir / 'NOPACKAGES') exists ifTrue:[
+ ^ self.
+ ].
+ (dir / 'NOSUBAUTOLOAD') exists ifTrue:[
+ ^ self.
].
noAutoloadHere := noAutoloadIn.
noAutoloadHere ifFalse:[
- (dir construct:'NOAUTOLOAD') exists ifTrue:[
- noAutoloadHere := true.
- ].
+ (dir / 'NOAUTOLOAD') exists ifTrue:[
+ noAutoloadHere := true.
+ ].
] ifTrue:[
- (dir construct:'AUTOLOAD') exists ifTrue:[
- noAutoloadHere := false.
- ].
- ].
-
- ((dir construct:'loadAll') exists
- or:[(dir construct:'abbrev.stc') exists
- or:[(dir construct:(dir baseName , '.prj')) exists]]) ifTrue:[
- KnownPackages isNil ifTrue:[
- KnownPackages := Set new.
- ].
- pkgName := dirName copyFrom:(packageTopPath asFilename pathName) size + 1 + 1.
- KnownPackages add:pkgName
+ (dir / 'AUTOLOAD') exists ifTrue:[
+ noAutoloadHere := false.
+ ].
+ ].
+
+ ((dir / 'loadAll') exists
+ or:[(dir / 'abbrev.stc') exists
+ ]) ifTrue:[
+ KnownPackages isNil ifTrue:[
+ KnownPackages := Set new.
+ ].
+ pkgName := dirName copyFrom:(packageTopPath asFilename pathName) size + 1 + 1.
+ KnownPackages add:pkgName
].
showSplashInLevels >= 0 ifTrue:[
- self showSplashMessage:('Smalltalk [info]: installing autoloaded classes found under "%1"...'
- bindWith:(dirName contractAtBeginningTo:35)).
+ self showSplashMessage:('Smalltalk [info]: installing autoloaded classes found under "%1"...'
+ bindWith:(dirName contractAtBeginningTo:35)).
].
"/
@@ -4706,60 +4795,60 @@
"/ below; however, still traverse the directories to find packages ...
"/
noAutoloadHere ifFalse:[
- [
- abbrevStream := (dir construct:'abbrev.stc') asFilename readStream.
- self installAutoloadedClassesFromStream:abbrevStream.
- abbrevStream close.
- ] on:FileStream openErrorSignal do:[:ex| "ignore this file"].
+ [
+ abbrevStream := (dir / 'abbrev.stc') asFilename readStream.
+ self installAutoloadedClassesFromStream:abbrevStream.
+ abbrevStream close.
+ ] on:FileStream openErrorSignal do:[:ex| "ignore this file"].
].
[
- directoryContents := dir directoryContents.
+ directoryContents := dir directoryContents.
] on:FileStream openErrorSignal do:[:ex|
- "non-accessable directory: we are done"
- ^ self
+ "non-accessable directory: we are done"
+ ^ self
].
directoryContents do:[:aFilename |
- |f|
-
- (#(
- 'objbc'
- 'doc'
- 'CVS'
- 'bitmaps'
- 'resources'
- 'source'
- 'not_delivered'
- 'not_ported'
- ) includes:aFilename) ifFalse:[
- ((dir baseName ~= 'stx')
- or:[
- (#(
- 'configurations'
- 'include'
- 'rules'
- 'stc'
- 'support'
- ) includes:aFilename) not])
- ifTrue:[
- f := dir construct:aFilename.
- f isDirectory ifTrue:[
- self
- recursiveInstallAutoloadedClassesFrom:f
- rememberIn:dirsConsulted
- maxLevels:maxLevels-1
- noAutoload:noAutoloadHere
- packageTop:packageTopPath
- showSplashInLevels:showSplashInLevels - 1.
- ]
- ]
- ].
+ |f|
+
+ (#(
+ 'objbc'
+ 'doc'
+ 'CVS'
+ 'bitmaps'
+ 'resources'
+ 'source'
+ 'not_delivered'
+ 'not_ported'
+ ) includes:aFilename) ifFalse:[
+ ((dir baseName ~= 'stx')
+ or:[
+ (#(
+ 'configurations'
+ 'include'
+ 'rules'
+ 'stc'
+ 'support'
+ ) includes:aFilename) not])
+ ifTrue:[
+ f := dir / aFilename.
+ f isDirectory ifTrue:[
+ self
+ recursiveInstallAutoloadedClassesFrom:f
+ rememberIn:dirsConsulted
+ maxLevels:maxLevels-1
+ noAutoload:noAutoloadHere
+ packageTop:packageTopPath
+ showSplashInLevels:showSplashInLevels - 1.
+ ]
+ ]
+ ].
].
showSplashInLevels >= 0 ifTrue:[
- self showSplashMessage:('Smalltalk [info]: installing autoloaded classes from "%1"...'
- bindWith:(dirName contractAtBeginningTo:35)).
+ self showSplashMessage:('Smalltalk [info]: installing autoloaded classes from "%1"...'
+ bindWith:(dirName contractAtBeginningTo:35)).
].
"
@@ -4828,10 +4917,10 @@
"read in the named file - look for it in some standard places;
return true if ok, false if failed.
This method can load almost anything which makes sense:
- .st - source files
- .cls - binary smalltalk bytecode files
- .so - binary compiled machine code class libraries
- [.class - java bytecode -- soon to come]"
+ .st - source files
+ .cls - binary smalltalk bytecode files
+ .so - binary compiled machine code class libraries
+ [.class - java bytecode -- soon to come]"
^ self fileIn:aFileName lazy:nil silent:nil logged:false
@@ -4902,10 +4991,10 @@
If silent is true, no compiler messages are output to the transcript.
Giving nil for silent/lazy will use the current settings.
This method can load almost anything which makes sense:
- .st - source files
- .cls - binary smalltalk bytecode files
- .so - binary compiled machine code class libraries
- [.class - java bytecode -- soon to come]"
+ .st - source files
+ .cls - binary smalltalk bytecode files
+ .so - binary compiled machine code class libraries
+ [.class - java bytecode -- soon to come]"
|fileNameString aStream path morePath bos|
@@ -4916,42 +5005,42 @@
"
(ObjectFileLoader notNil
and:[ObjectFileLoader hasValidBinaryExtension:fileNameString]) ifTrue:[
- "/ LoadBinaries ifFalse:[^ false].
- path := self getBinaryFileName:fileNameString.
- path isNil ifTrue:[
- path := self getSystemFileName:fileNameString.
- ].
- path isNil ifTrue:[^ false].
- ^ (ObjectFileLoader loadObjectFile:path) notNil
+ "/ LoadBinaries ifFalse:[^ false].
+ path := self getBinaryFileName:fileNameString.
+ path isNil ifTrue:[
+ path := self getSystemFileName:fileNameString.
+ ].
+ path isNil ifTrue:[^ false].
+ ^ (ObjectFileLoader loadObjectFile:path) notNil
].
(fileNameString asFilename hasSuffix:'cls') ifTrue:[
- BinaryObjectStorage notNil ifTrue:[
- aStream := self systemFileStreamFor:fileNameString.
+ BinaryObjectStorage notNil ifTrue:[
+ aStream := self systemFileStreamFor:fileNameString.
"/ path := self getBinaryFileName:fileNameString.
"/ path isNil ifTrue:[^ false].
"/ aStream := path asFilename readStream.
- aStream notNil ifTrue:[
- aStream binary.
- bos := BinaryObjectStorage onOld:aStream.
- bos next.
- bos close.
- ^ true
- ].
- ^ false
- ]
+ aStream notNil ifTrue:[
+ aStream binary.
+ bos := BinaryObjectStorage onOld:aStream.
+ bos next.
+ bos close.
+ ^ true
+ ].
+ ^ false
+ ]
].
aStream := self systemFileStreamFor:fileNameString.
aStream isNil ifTrue:[^ false].
(fileNameString includes:$/) ifTrue:[
- "/ temporarily prepend the files directory
- "/ to the searchPath.
- "/ This allows fileIn-driver files to refer to local
- "/ files via a relative path, and drivers to fileIn other
- "/ drivers ...
- morePath := aStream pathName asFilename directoryName.
+ "/ temporarily prepend the files directory
+ "/ to the searchPath.
+ "/ This allows fileIn-driver files to refer to local
+ "/ files via a relative path, and drivers to fileIn other
+ "/ drivers ...
+ morePath := aStream pathName asFilename directoryName.
].
^ self fileInStream:aStream lazy:lazy silent:silent logged:logged addPath:morePath
@@ -4992,8 +5081,8 @@
"read in the last changes file - bringing the system to the state it
had when left the last time.
WARNING: this method is rubbish: it should only read things after the
- last '**snapshot**' - entry
- (instead of the complete changes file)."
+ last '**snapshot**' - entry
+ (instead of the complete changes file)."
"
do NOT update the changes file now ...
@@ -5012,11 +5101,11 @@
The file is first searched for using the class name, then the abbreviated name."
^ self
- fileInClass:aClassName
- package:nil
- initialize:true
- lazy:false
- silent:nil
+ fileInClass:aClassName
+ package:nil
+ initialize:true
+ lazy:false
+ silent:nil
"Modified: / 9.1.1998 / 14:41:46 / cg"
!
@@ -5037,9 +5126,9 @@
(path := self getBinaryFileName:aFileName) isNil ifTrue:[^ false].
ok := (ObjectFileLoader loadClass:aClassName fromObjectFile:path) notNil.
ok ifTrue:[
- SilentLoading ifFalse:[
- Transcript show:' loaded ' , aClassName , ' from ' ; showCR:aFileName.
- ]
+ SilentLoading ifFalse:[
+ Transcript show:' loaded ' , aClassName , ' from ' ; showCR:aFileName.
+ ]
].
^ ok
@@ -5058,11 +5147,11 @@
The file is first searched for using the class name, then the abbreviated name."
^ self
- fileInClass:aClassName
- package:nil
- initialize:doInit
- lazy:false
- silent:nil
+ fileInClass:aClassName
+ package:nil
+ initialize:doInit
+ lazy:false
+ silent:nil
"Modified: / 9.1.1998 / 14:42:02 / cg"
!
@@ -5074,11 +5163,11 @@
The file is first searched for using the class name, then the abbreviated name."
^ self
- fileInClass:aClassName
- package:nil
- initialize:doInit
- lazy:loadLazy
- silent:nil
+ fileInClass:aClassName
+ package:nil
+ initialize:doInit
+ lazy:loadLazy
+ silent:nil
"Modified: / 9.1.1998 / 14:42:19 / cg"
!
@@ -5094,11 +5183,11 @@
nil uses the value from SilentLoading."
^ self
- fileInClass:aClassName
- package:nil
- initialize:doInit
- lazy:loadLazy
- silent:beSilent
+ fileInClass:aClassName
+ package:nil
+ initialize:doInit
+ lazy:loadLazy
+ silent:beSilent
"Modified: / 9.1.1998 / 14:42:28 / cg"
!
@@ -5110,11 +5199,11 @@
The file is first searched for using the class name, then the abbreviated name."
^ self
- fileInClass:aClassName
- package:package
- initialize:true
- lazy:false
- silent:nil
+ fileInClass:aClassName
+ package:package
+ initialize:true
+ lazy:false
+ silent:nil
"Created: / 08-01-2007 / 10:06:09 / cg"
!
@@ -5135,305 +5224,305 @@
wasLazy := Compiler compileLazy:loadLazy.
beSilent notNil ifTrue:[
- wasSilent := self silentLoading:beSilent.
+ wasSilent := self silentLoading:beSilent.
].
classFileName := Smalltalk fileNameForClass:aClassName.
(classFileName = aClassName) ifTrue:[
- "/ no abbrev.stc translation for className
- (aClassName includes:$:) ifTrue:[
- "/ a nameSpace name
- alternativeClassFileName := classFileName copyFrom:(classFileName lastIndexOf:$:)+1
- ].
+ "/ no abbrev.stc translation for className
+ (aClassName includes:$:) ifTrue:[
+ "/ a nameSpace name
+ alternativeClassFileName := classFileName copyFrom:(classFileName lastIndexOf:$:)+1
+ ].
].
classFileName asFilename isAbsolute ifTrue:[
- classFileName asFilename suffix notEmptyOrNil ifTrue:[
- ok := self fileIn:classFileName lazy:loadLazy silent:beSilent.
- ] ifFalse:[
+ classFileName asFilename suffix notEmptyOrNil ifTrue:[
+ ok := self fileIn:classFileName lazy:loadLazy silent:beSilent.
+ ] ifFalse:[
ok := self fileInSourceFile:classFileName lazy:loadLazy silent:beSilent.
- ]
+ ]
] ifFalse:[
- classFileName := classFileName copyReplaceAll:$: with:$_.
- [
- Class withoutUpdatingChangesDo:[
- |zarFn zar entry|
-
- ok := false.
-
- package notNil ifTrue:[
- packageDir := package asString.
- packageDir := packageDir copyReplaceAll:$: with:$/.
- ].
-
- Class packageQuerySignal answer:package do:[
- "
- then, if dynamic linking is available,
- "
- (LoadBinaries and:[ObjectFileLoader notNil]) ifTrue:[
- sharedLibExtension := ObjectFileLoader sharedLibraryExtension.
- "
- first look for a class packages shared binary in binary/xxx.o
- "
- libName := self libraryFileNameOfClass:aClassName.
- libName notNil ifTrue:[
- (ok := self fileInClass:aClassName fromObject:(libName, sharedLibExtension))
- ifFalse:[
- sharedLibExtension ~= '.o' ifTrue:[
- ok := self fileInClass:aClassName fromObject:(libName, '.o')
- ]
- ].
- ].
- "
- then, look for a shared binary in binary/xxx.o
- "
- ok ifFalse:[
- (ok := self fileInClass:aClassName fromObject:(classFileName, sharedLibExtension))
- ifFalse:[
- sharedLibExtension ~= '.o' ifTrue:[
- ok := self fileInClass:aClassName fromObject:(classFileName, '.o')
- ].
- ok ifFalse:[
- alternativeClassFileName notNil ifTrue:[
- (ok := self fileInClass:aClassName fromObject:(alternativeClassFileName, sharedLibExtension))
- ifFalse:[
- sharedLibExtension ~= '.o' ifTrue:[
- ok := self fileInClass:aClassName fromObject:(alternativeClassFileName, '.o')
- ]
- ]
- ].
- ].
- ].
- ].
- ].
-
- "
- if that did not work, look for a compiled-bytecode file ...
- "
- ok ifFalse:[
- (ok := self fileIn:(classFileName , '.cls') lazy:loadLazy silent:beSilent)
- ifFalse:[
- alternativeClassFileName notNil ifTrue:[
- ok := self fileIn:(alternativeClassFileName , '.cls') lazy:loadLazy silent:beSilent
- ]
- ]
- ].
- "
- if that did not work, and the classes package is known,
- look for an st-cls file
- in a package subdir of the source-directory ...
- "
- ok ifFalse:[
- (packageDir notNil and:[BinaryObjectStorage notNil]) ifTrue:[
- packageFile := self getPackageFileName:(packageDir , '/classes/' , classFileName , '.cls').
- packageFile isNil ifTrue:[
- packageFile := (packageDir , '/classes/' , classFileName , '.cls').
- ].
- (ok := self fileIn:packageFile lazy:loadLazy silent:beSilent)
- ifFalse:[
- alternativeClassFileName notNil ifTrue:[
- packageFile := self getPackageFileName:(packageDir , '/classes/' , alternativeClassFileName , '.cls').
- packageFile isNil ifTrue:[
- packageFile := (packageDir , '/classes/' , alternativeClassFileName , '.cls').
- ].
- ok := self fileIn:packageFile lazy:loadLazy silent:beSilent
- ]
- ].
-
- zarFn := self getPackageFileName:(packageDir , '/classes.zip').
- zarFn notNil ifTrue:[
- zar := ZipArchive oldFileNamed:zarFn.
- zar notNil ifTrue:[
- entry := zar extract:(classFileName , '.cls').
- (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
- entry := zar extract:(alternativeClassFileName , '.cls').
- ].
- entry notNil ifTrue:[
- bos := BinaryObjectStorage onOld:(entry asByteArray readStream).
- bos next.
- bos close.
- ok := true
- ].
- ]
- ]
- ]
- ].
-
- "
- if that did not work, look for an st-source file ...
- "
- ok ifFalse:[
+ classFileName := classFileName copyReplaceAll:$: with:$_.
+ [
+ Class withoutUpdatingChangesDo:[
+ |zarFn zar entry|
+
+ ok := false.
+
+ package notNil ifTrue:[
+ packageDir := package asString.
+ packageDir := packageDir copyReplaceAll:$: with:$/.
+ ].
+
+ Class packageQuerySignal answer:package do:[
+ "
+ then, if dynamic linking is available,
+ "
+ (LoadBinaries and:[ObjectFileLoader notNil]) ifTrue:[
+ sharedLibExtension := ObjectFileLoader sharedLibraryExtension.
+ "
+ first look for a class packages shared binary in binary/xxx.o
+ "
+ libName := self libraryFileNameOfClass:aClassName.
+ libName notNil ifTrue:[
+ (ok := self fileInClass:aClassName fromObject:(libName, sharedLibExtension))
+ ifFalse:[
+ sharedLibExtension ~= '.o' ifTrue:[
+ ok := self fileInClass:aClassName fromObject:(libName, '.o')
+ ]
+ ].
+ ].
+ "
+ then, look for a shared binary in binary/xxx.o
+ "
+ ok ifFalse:[
+ (ok := self fileInClass:aClassName fromObject:(classFileName, sharedLibExtension))
+ ifFalse:[
+ sharedLibExtension ~= '.o' ifTrue:[
+ ok := self fileInClass:aClassName fromObject:(classFileName, '.o')
+ ].
+ ok ifFalse:[
+ alternativeClassFileName notNil ifTrue:[
+ (ok := self fileInClass:aClassName fromObject:(alternativeClassFileName, sharedLibExtension))
+ ifFalse:[
+ sharedLibExtension ~= '.o' ifTrue:[
+ ok := self fileInClass:aClassName fromObject:(alternativeClassFileName, '.o')
+ ]
+ ]
+ ].
+ ].
+ ].
+ ].
+ ].
+
+ "
+ if that did not work, look for a compiled-bytecode file ...
+ "
+ ok ifFalse:[
+ (ok := self fileIn:(classFileName , '.cls') lazy:loadLazy silent:beSilent)
+ ifFalse:[
+ alternativeClassFileName notNil ifTrue:[
+ ok := self fileIn:(alternativeClassFileName , '.cls') lazy:loadLazy silent:beSilent
+ ]
+ ]
+ ].
+ "
+ if that did not work, and the classes package is known,
+ look for an st-cls file
+ in a package subdir of the source-directory ...
+ "
+ ok ifFalse:[
+ (packageDir notNil and:[BinaryObjectStorage notNil]) ifTrue:[
+ packageFile := self getPackageFileName:(packageDir , '/classes/' , classFileName , '.cls').
+ packageFile isNil ifTrue:[
+ packageFile := (packageDir , '/classes/' , classFileName , '.cls').
+ ].
+ (ok := self fileIn:packageFile lazy:loadLazy silent:beSilent)
+ ifFalse:[
+ alternativeClassFileName notNil ifTrue:[
+ packageFile := self getPackageFileName:(packageDir , '/classes/' , alternativeClassFileName , '.cls').
+ packageFile isNil ifTrue:[
+ packageFile := (packageDir , '/classes/' , alternativeClassFileName , '.cls').
+ ].
+ ok := self fileIn:packageFile lazy:loadLazy silent:beSilent
+ ]
+ ].
+
+ zarFn := self getPackageFileName:(packageDir , '/classes.zip').
+ zarFn notNil ifTrue:[
+ zar := ZipArchive oldFileNamed:zarFn.
+ zar notNil ifTrue:[
+ entry := zar extract:(classFileName , '.cls').
+ (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
+ entry := zar extract:(alternativeClassFileName , '.cls').
+ ].
+ entry notNil ifTrue:[
+ bos := BinaryObjectStorage onOld:(entry asByteArray readStream).
+ bos next.
+ bos close.
+ ok := true
+ ].
+ ]
+ ]
+ ]
+ ].
+
+ "
+ if that did not work, look for an st-source file ...
+ "
+ ok ifFalse:[
filenameToSet := classFileName.
(ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent)
- ifFalse:[
- alternativeClassFileName notNil ifTrue:[
+ ifFalse:[
+ alternativeClassFileName notNil ifTrue:[
filenameToSet := alternativeClassFileName.
ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent
- ].
- ok ifFalse:[
- "
- ... and in the standard source-directory
- "
+ ].
+ ok ifFalse:[
+ "
+ ... and in the standard source-directory
+ "
filenameToSet := 'source/' , classFileName.
(ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent)
- ifFalse:[
- alternativeClassFileName notNil ifTrue:[
+ ifFalse:[
+ alternativeClassFileName notNil ifTrue:[
filenameToSet := 'source/' , alternativeClassFileName.
ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent
- ]
- ]
- ]
- ].
- "
- if that did not work, and the classes package is known,
- look for an st-source file
- in a package subdir of the source-directory ...
- "
- ok ifFalse:[
- packageDir notNil ifTrue:[
+ ]
+ ]
+ ]
+ ].
+ "
+ if that did not work, and the classes package is known,
+ look for an st-source file
+ in a package subdir of the source-directory ...
+ "
+ ok ifFalse:[
+ packageDir notNil ifTrue:[
packageFile := self getPackageSourceFileName:(packageDir , '/source/' , classFileName).
- packageFile isNil ifTrue:[
+ packageFile isNil ifTrue:[
packageFile := (packageDir , '/source/' , classFileName).
- ].
- filenameToSet := packageFile.
+ ].
+ filenameToSet := packageFile.
(ok := self fileInSourceFile:packageFile lazy:loadLazy silent:beSilent)
- ifFalse:[
- alternativeClassFileName notNil ifTrue:[
+ ifFalse:[
+ alternativeClassFileName notNil ifTrue:[
packageFile := self getPackageSourceFileName:(packageDir , '/source/' , alternativeClassFileName).
- packageFile isNil ifTrue:[
+ packageFile isNil ifTrue:[
packageFile := (packageDir , '/source/' , alternativeClassFileName).
- ].
- filenameToSet := packageFile.
+ ].
+ filenameToSet := packageFile.
ok := self fileInSourceFile:packageFile lazy:loadLazy silent:beSilent
- ].
- ok ifFalse:[
+ ].
+ ok ifFalse:[
packageFile := self getPackageSourceFileName:(packageDir , '/' , classFileName).
- packageFile isNil ifTrue:[
+ packageFile isNil ifTrue:[
packageFile := (packageDir , '/' , classFileName).
- ].
- filenameToSet := packageFile.
+ ].
+ filenameToSet := packageFile.
(ok := self fileInSourceFile:packageFile lazy:loadLazy silent:beSilent)
- ifFalse:[
- alternativeClassFileName notNil ifTrue:[
+ ifFalse:[
+ alternativeClassFileName notNil ifTrue:[
packageFile := self getPackageFileName:(packageDir , '/' , alternativeClassFileName).
- packageFile isNil ifTrue:[
+ packageFile isNil ifTrue:[
packageFile := (packageDir , '/' , alternativeClassFileName).
- ].
- filenameToSet := packageFile.
+ ].
+ filenameToSet := packageFile.
ok := self fileInSourceFile:packageFile lazy:loadLazy silent:beSilent
- ].
- ok ifFalse:[
- "
- ... and in the standard source-directory
- "
+ ].
+ ok ifFalse:[
+ "
+ ... and in the standard source-directory
+ "
filenameToSet := 'source/' , packageDir , '/' , classFileName.
(ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent)
- ifFalse:[
- alternativeClassFileName notNil ifTrue:[
+ ifFalse:[
+ alternativeClassFileName notNil ifTrue:[
filenameToSet := 'source/' , packageDir , '/' , alternativeClassFileName.
ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent
- ]
- ]
- ]
- ].
- ].
- ].
- ]
- ].
- "
- if that did not work, and the classes package is known,
- look for a zipArchive containing a class entry.
- "
- ok ifFalse:[
- packageDir notNil ifTrue:[
- zarFn := self getPackageFileName:(packageDir , '/source.zip').
- zarFn isNil ifTrue:[
- zarFn := packageDir asFilename withSuffix:'zip'.
- zarFn := self getSourceFileName:zarFn.
- ].
- zarFn notNil ifTrue:[
- zar := ZipArchive oldFileNamed:zarFn.
- zar notNil ifTrue:[
- entry := zar extract:(classFileName , '.st').
- (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
- entry := zar extract:(alternativeClassFileName , '.st').
- ].
- entry notNil ifTrue:[
- filenameToSet := zarFn.
- ok := self
- fileInStream:(entry asString readStream)
- lazy:loadLazy
- silent:beSilent
- logged:false
- addPath:nil
- ].
- ]
- ]
- ]
- ].
-
- "
- if that did not work,
- look for a zipArchive containing a class entry.
- "
- ok ifFalse:[
- zarFn := self getSourceFileName:'source.zip'.
- zarFn notNil ifTrue:[
- zar := ZipArchive oldFileNamed:zarFn.
- zar notNil ifTrue:[
- entry := zar extract:(zarFn := classFileName , '.st').
- (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
- entry := zar extract:(zarFn := alternativeClassFileName , '.st').
- ].
- entry notNil ifTrue:[
- filenameToSet := zarFn.
- ok := self
- fileInStream:(entry asString readStream)
- lazy:loadLazy
- silent:beSilent
- logged:false
- addPath:nil
- ].
- ]
- ]
- ].
- ok ifFalse:[
- "
- if there is a sourceCodeManager, ask it for the classes sourceCode
- "
- (mgr := Smalltalk at:#SourceCodeManager) notNil ifTrue:[
- inStream := mgr getMostRecentSourceStreamForClassNamed:aClassName.
- inStream notNil ifTrue:[
- filenameToSet := nil.
- ok := self fileInStream:inStream lazy:loadLazy silent:beSilent logged:false addPath:nil.
- ]
- ].
- ].
- ].
- ]
- ].
- ] ensure:[
- Compiler compileLazy:wasLazy.
- wasSilent notNil ifTrue:[
- self silentLoading:wasSilent
- ]
- ].
+ ]
+ ]
+ ]
+ ].
+ ].
+ ].
+ ]
+ ].
+ "
+ if that did not work, and the classes package is known,
+ look for a zipArchive containing a class entry.
+ "
+ ok ifFalse:[
+ packageDir notNil ifTrue:[
+ zarFn := self getPackageFileName:(packageDir , '/source.zip').
+ zarFn isNil ifTrue:[
+ zarFn := packageDir asFilename withSuffix:'zip'.
+ zarFn := self getSourceFileName:zarFn.
+ ].
+ zarFn notNil ifTrue:[
+ zar := ZipArchive oldFileNamed:zarFn.
+ zar notNil ifTrue:[
+ entry := zar extract:(classFileName , '.st').
+ (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
+ entry := zar extract:(alternativeClassFileName , '.st').
+ ].
+ entry notNil ifTrue:[
+ filenameToSet := zarFn.
+ ok := self
+ fileInStream:(entry asString readStream)
+ lazy:loadLazy
+ silent:beSilent
+ logged:false
+ addPath:nil
+ ].
+ ]
+ ]
+ ]
+ ].
+
+ "
+ if that did not work,
+ look for a zipArchive containing a class entry.
+ "
+ ok ifFalse:[
+ zarFn := self getSourceFileName:'source.zip'.
+ zarFn notNil ifTrue:[
+ zar := ZipArchive oldFileNamed:zarFn.
+ zar notNil ifTrue:[
+ entry := zar extract:(zarFn := classFileName , '.st').
+ (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
+ entry := zar extract:(zarFn := alternativeClassFileName , '.st').
+ ].
+ entry notNil ifTrue:[
+ filenameToSet := zarFn.
+ ok := self
+ fileInStream:(entry asString readStream)
+ lazy:loadLazy
+ silent:beSilent
+ logged:false
+ addPath:nil
+ ].
+ ]
+ ]
+ ].
+ ok ifFalse:[
+ "
+ if there is a sourceCodeManager, ask it for the classes sourceCode
+ "
+ (mgr := Smalltalk at:#SourceCodeManager) notNil ifTrue:[
+ inStream := mgr getMostRecentSourceStreamForClassNamed:aClassName.
+ inStream notNil ifTrue:[
+ filenameToSet := nil.
+ ok := self fileInStream:inStream lazy:loadLazy silent:beSilent logged:false addPath:nil.
+ ]
+ ].
+ ].
+ ].
+ ]
+ ].
+ ] ensure:[
+ Compiler compileLazy:wasLazy.
+ wasSilent notNil ifTrue:[
+ self silentLoading:wasSilent
+ ]
+ ].
].
ok ifTrue:[
- newClass := self at:(aClassName asSymbol).
- newClass notNil ifTrue:[
- "set the classes name - but do not change if already set"
- filenameToSet notNil ifTrue:[
- newClass getClassFilename isNil ifTrue:[
- newClass setClassFilename:(filenameToSet asFilename baseName)
- ].
- ].
-
- doInit ifTrue:[
- newClass initialize
- ]
- ]
+ newClass := self at:(aClassName asSymbol).
+ newClass notNil ifTrue:[
+ "set the classes name - but do not change if already set"
+ filenameToSet notNil ifTrue:[
+ newClass getClassFilename isNil ifTrue:[
+ newClass setClassFilename:(filenameToSet asFilename baseName)
+ ].
+ ].
+
+ doInit ifTrue:[
+ newClass initialize
+ ]
+ ]
].
^ newClass
@@ -5448,8 +5537,8 @@
and load it. This install all of its contained classes.
Return true if ok, false if not.
Notice: the argument may not have an extension (by purpose);
- the sharedLib extension (.dll / .so / .sl) is added here, to
- make the caller independent of the underlying operatingSystem."
+ the sharedLib extension (.dll / .so / .sl) is added here, to
+ make the caller independent of the underlying operatingSystem."
|path fn|
@@ -5460,7 +5549,7 @@
path := self getBinaryFileName:fn.
path isNil ifTrue:[
- path := self getSystemFileName:fn.
+ path := self getSystemFileName:fn.
].
path isNil ifTrue:[^ false].
@@ -5479,8 +5568,8 @@
and load it. This installs all of its contained classes.
Return true if ok, false if not.
Notice: the argument may not have an extension (by purpose);
- the sharedLib extension (.dll / .so / .sl) is added here, to
- make the caller independent of the underlying operatingSystem."
+ the sharedLib extension (.dll / .so / .sl) is added here, to
+ make the caller independent of the underlying operatingSystem."
|baseName handle libraryFilename packagePath|
@@ -5488,9 +5577,9 @@
baseName := aClassLibraryName asFilename withSuffix:(ObjectFileLoader sharedLibrarySuffix).
baseName exists ifTrue:[
- "/ load local file first...
- handle := (ObjectFileLoader loadObjectFile:baseName).
- handle notNil ifTrue:[^ true].
+ "/ load local file first...
+ handle := (ObjectFileLoader loadObjectFile:baseName).
+ handle notNil ifTrue:[^ true].
].
packagePath := self getPackageDirectoryForPackage:packageID.
@@ -5498,8 +5587,8 @@
packagePath := packagePath asFilename.
libraryFilename := packagePath / baseName.
libraryFilename exists ifFalse:[
- "in windows (with Borland compiler, DLLs in development environment are under objbc"
- libraryFilename := packagePath / 'objbc' / baseName.
+ "in windows (with Borland compiler, DLLs in development environment are under objbc"
+ libraryFilename := packagePath / 'objbc' / baseName.
].
libraryFilename exists ifFalse:[^ false].
@@ -5553,40 +5642,40 @@
inStream := streamArg.
inStream isNil ifTrue:[^ false].
inStream := ChangeSet isNil
- ifTrue:[ inStream ]
- ifFalse:[ ChangeSet decodedStreamFor:inStream ].
+ ifTrue:[ inStream ]
+ ifFalse:[ ChangeSet decodedStreamFor:inStream ].
lazy notNil ifTrue:[wasLazy := Compiler compileLazy:lazy].
silent notNil ifTrue:[wasSilent := self silentLoading:silent].
morePath notNil ifTrue:[
- oldSystemPath := SystemPath copy.
- SystemPath addFirst:morePath.
- oldRealPath := RealSystemPath.
- RealSystemPath := nil.
+ oldSystemPath := SystemPath copy.
+ SystemPath addFirst:morePath.
+ oldRealPath := RealSystemPath.
+ RealSystemPath := nil.
].
[
- (Class updateChangeFileQuerySignal , Class updateChangeListQuerySignal) answer:logged do:[
+ (Class updateChangeFileQuerySignal , Class updateChangeListQuerySignal) answer:logged do:[
"JV: Changed to give ProgrammingLanguage to choose
proper reader"
(ProgrammingLanguage forStream: inStream)
fileInStream: inStream
- ]
+ ]
] ensure:[
- morePath notNil ifTrue:[
- "take care, someone could have changed SystemPath during fileIn!!"
- (SystemPath copyFrom:2) = oldSystemPath ifTrue:[
- SystemPath := oldSystemPath.
- RealSystemPath := oldRealPath.
- ] ifFalse:[
- (oldSystemPath includes:morePath) ifFalse:[
- SystemPath remove:morePath ifAbsent:[].
- ].
- RealSystemPath := nil.
- ].
- ].
- lazy notNil ifTrue:[Compiler compileLazy:wasLazy].
- silent notNil ifTrue:[self silentLoading:wasSilent].
- inStream close
+ morePath notNil ifTrue:[
+ "take care, someone could have changed SystemPath during fileIn!!"
+ (SystemPath copyFrom:2) = oldSystemPath ifTrue:[
+ SystemPath := oldSystemPath.
+ RealSystemPath := oldRealPath.
+ ] ifFalse:[
+ (oldSystemPath includes:morePath) ifFalse:[
+ SystemPath remove:morePath ifAbsent:[].
+ ].
+ RealSystemPath := nil.
+ ].
+ ].
+ lazy notNil ifTrue:[Compiler compileLazy:wasLazy].
+ silent notNil ifTrue:[self silentLoading:wasSilent].
+ inStream close
].
^ true
@@ -5602,14 +5691,14 @@
"return true, if a particular class library is already loaded"
ObjectMemory
- binaryModuleInfo
- do:[:entry |
- entry type == #classLibrary ifTrue:[
- entry libraryName = name ifTrue:[
- ^ true "/ already loaded
- ]
- ].
- ].
+ binaryModuleInfo
+ do:[:entry |
+ entry type == #classLibrary ifTrue:[
+ entry libraryName = name ifTrue:[
+ ^ true "/ already loaded
+ ]
+ ].
+ ].
^ false
@@ -5650,8 +5739,8 @@
retVal := false.
(SignalSet with:AbortOperationRequest with:TerminateProcessRequest)
- handle:[:ex | ex return ]
- do:[ retVal := self fileIn:aFileName ].
+ handle:[:ex | ex return ]
+ do:[ retVal := self fileIn:aFileName ].
^ retVal
!
@@ -5663,9 +5752,9 @@
wasSilent := self silentLoading:true.
[
- self fileIn:aFilename
+ self fileIn:aFilename
] ensure:[
- self silentLoading:wasSilent
+ self silentLoading:wasSilent
]
! !
@@ -5681,7 +5770,7 @@
aString := self getBitmapFileName:aFileName.
aString notNil ifTrue:[
- ^ aString asFilename readStreamOrNil
+ ^ aString asFilename readStreamOrNil
].
^ nil
!
@@ -5723,9 +5812,9 @@
|fn|
(aFileName asFilename hasSuffix:'st') ifTrue:[
- fn := aFileName copyWithoutLast:3
+ fn := aFileName copyWithoutLast:3
] ifFalse:[
- fn := aFileName
+ fn := aFileName
].
^ self filenameAbbreviations keyAtEqualValue:fn ifAbsent:[fn].
@@ -5744,11 +5833,11 @@
return a collection of pathes which include that directory."
^ self realSystemPath select:[:dirName |
- |fullPath|
-
- fullPath := dirName asFilename construct:aDirectoryName.
- "/ fullPath exists and:[fullPath isDirectory and:[fullPath isReadable]]
- fullPath isDirectory and:[fullPath isReadable]
+ |fullPath|
+
+ fullPath := dirName asFilename construct:aDirectoryName.
+ "/ fullPath exists and:[fullPath isDirectory and:[fullPath isReadable]]
+ fullPath isDirectory and:[fullPath isReadable]
].
!
@@ -5762,7 +5851,7 @@
aString := self getFileInFileName:aFileName.
aString notNil ifTrue:[
- ^ aString asFilename readStreamOrNil
+ ^ aString asFilename readStreamOrNil
].
^ nil
!
@@ -5773,6 +5862,18 @@
|cls nonMetaclass nm nameWithPrefix nameWithoutPrefix|
+"/ This was added as an extension of libsvn - should be no longer needed
+"/ compatQuery := Smalltalk classNamed: 'SVN::CompatModeQuery'.
+"/ (compatQuery notNil
+"/ and:[compatQuery isLoaded
+"/ and:[compatQuery query not]]) ifTrue:[
+"/ nm := aClassOrClassName isBehavior
+"/ ifTrue:[aClassOrClassName name]
+"/ ifFalse:[aClassOrClassName].
+"/ nm := nm copyReplaceAll:$: with:$_.
+"/ ^nm
+"/ ].
+
aClassOrClassName isBehavior ifTrue:[
cls := aClassOrClassName.
] ifFalse:[
@@ -5834,7 +5935,7 @@
to 14 chars)"
CachedAbbreviations isNil ifTrue:[
- self readAbbreviations
+ self readAbbreviations
].
^ CachedAbbreviations
@@ -5871,7 +5972,7 @@
return the absolute filename or nil if none is found."
BinaryPath isNil ifTrue:[
- BinaryPath := self constructPathFor:BinaryDirName
+ BinaryPath := self constructPathFor:BinaryDirName
].
^ self searchPath:BinaryPath for:aFileName in:BinaryDirName
@@ -5901,56 +6002,56 @@
then in the package directory if existing.
Return a path or nil.
Search order is:
- bitmaps/<pkg>/file
- resources/<pkg>/bitmaps/file
- <pkg>/bitmaps/file
+ bitmaps/<pkg>/file
+ resources/<pkg>/bitmaps/file
+ <pkg>/bitmaps/file
"
|f dir packageDir pF|
((f := aFileName asString) startsWith:'bitmaps/') ifTrue:[
- f := f copyFrom:('bitmaps/' size + 1).
+ f := f copyFrom:('bitmaps/' size + 1).
].
aPackageIDOrNil isNil ifTrue:[
- "/ this will be an error in the future
+ "/ this will be an error in the future
"/ 'Smalltalk [warning]: bitmap file access without package: ' infoPrint. aFileName infoPrintCR.
"/ self halt.
- pF := self searchPath:(self realSystemPath) for:aFileName in:('bitmaps').
- pF notNil ifTrue:[
- ^ pF.
- ].
- f ~= aFileName ifTrue:[
- pF := self searchPath:(self realSystemPath) for:f in:('bitmaps').
- pF notNil ifTrue:[
- ^ pF.
- ].
- ].
- ^ nil
+ pF := self searchPath:(self realSystemPath) for:aFileName in:('bitmaps').
+ pF notNil ifTrue:[
+ ^ pF.
+ ].
+ f ~= aFileName ifTrue:[
+ pF := self searchPath:(self realSystemPath) for:f in:('bitmaps').
+ pF notNil ifTrue:[
+ ^ pF.
+ ].
+ ].
+ ^ nil
].
dir := self projectDirectoryForPackage:aPackageIDOrNil.
dir notNil ifTrue:[
- pF := dir asFilename construct:f.
- pF exists ifTrue:[
- ^ pF.
- ].
- pF := (dir asFilename construct:'bitmaps') construct:f.
- pF exists ifTrue:[
- ^ pF.
- ].
+ pF := dir asFilename / f.
+ pF exists ifTrue:[
+ ^ pF.
+ ].
+ pF := dir asFilename / 'bitmaps' /f.
+ pF exists ifTrue:[
+ ^ pF.
+ ].
].
packageDir := aPackageIDOrNil copyReplaceAll:$: with:$/.
pF := self searchPath:(self realSystemPath) for:aFileName in:('bitmaps/',packageDir).
pF notNil ifTrue:[
- ^ pF.
+ ^ pF.
].
pF := self searchPath:(self realSystemPath) for:aFileName in:('resources/',packageDir,'/bitmaps').
pF notNil ifTrue:[
- ^ pF.
+ ^ pF.
].
^ nil
@@ -5972,7 +6073,7 @@
return the absolute filename or nil if none is found."
FileInPath isNil ifTrue:[
- FileInPath := self constructPathFor:FileInDirName
+ FileInPath := self constructPathFor:FileInDirName
].
^ self searchPath:FileInPath for:aFileName in:FileInDirName
@@ -5990,22 +6091,22 @@
packageSubDirectory := aPackageID asPackageId directory.
checkForPackageDirectory :=
- [:moduleDir |
- |packageDir|
-
- moduleDir isDirectory ifTrue:[
- packageDir := moduleDir construct:packageSubDirectory.
- packageDir isDirectory ifTrue:[
- ^ packageDir
- ]
- ].
- ].
+ [:moduleDir |
+ |packageDir|
+
+ moduleDir isDirectory ifTrue:[
+ packageDir := moduleDir / packageSubDirectory.
+ packageDir isDirectory ifTrue:[
+ ^ packageDir
+ ]
+ ].
+ ].
self packagePath do:[:aPath |
- |moduleDir|
-
- moduleDir := aPath asFilename construct:module.
- checkForPackageDirectory value:moduleDir.
+ |moduleDir|
+
+ moduleDir := aPath asFilename / module.
+ checkForPackageDirectory value:moduleDir.
].
^ nil
@@ -6029,20 +6130,20 @@
"/ search along packagePath ...
f := self searchPath:self packagePath for:aFileName in:nil.
f isNil ifTrue:[
- "/ search under packages-directory along systemPath ...
- f := self searchPath:self realSystemPath for:aFileName in:PackageDirName.
- "/ kludge - allow for stx-directory to be named differently
- f isNil ifTrue:[
- ((aFileName startsWith:'stx') and:[(aFileName startsWith:'stx' , Filename separator)]) ifTrue:[
- f := '../..' asFilename construct:(aFileName copyFrom:5).
- f exists ifTrue:[
- ^ f pathName
- ].
- ]
- ].
+ "/ search under packages-directory along systemPath ...
+ f := self searchPath:self realSystemPath for:aFileName in:PackageDirName.
+ "/ kludge - allow for stx-directory to be named differently
+ f isNil ifTrue:[
+ (aFileName startsWith:('stx' , Filename separator)) ifTrue:[
+ f := '../..' asFilename / (aFileName copyFrom:5).
+ f exists ifTrue:[
+ ^ f pathName
+ ].
+ ]
+ ].
].
(f notNil and:[(f := f asFilename) exists]) ifTrue:[
- ^ f pathName
+ ^ f pathName
].
^ nil
@@ -6087,7 +6188,7 @@
|pkgOrNil|
aClassOrNil notNil ifTrue:[
- pkgOrNil := aClassOrNil package.
+ pkgOrNil := aClassOrNil package.
].
^ self getResourceFileName:aFileName forPackage:pkgOrNil.
@@ -6102,57 +6203,52 @@
and in a packages directory.
Return the absolute filename or nil if none is found.
Search order is:
- resources/<pkg>/file
- <pkg>/resources/file
+ resources/<pkg>/file
+ <pkg>/resources/file
"
|pF f dir packageDir|
((f := aFileName asString) startsWith:'resources/') ifTrue:[
- f := aFileName copyFrom:('resources/' size + 1).
+ f := aFileName copyFrom:('resources/' size + 1).
].
aPackageIDOrNil isNil ifTrue:[
- "/ this will be an error in the future
+ "/ this will be an error in the future
"/ 'Smalltalk [warning]: resource file access without package: ' infoPrint. aFileName infoPrintCR.
"/ self halt.
- pF := self searchPath:(self realSystemPath) for:aFileName in:('resources').
- pF notNil ifTrue:[
- ^ pF.
- ].
- f ~= aFileName ifTrue:[
- pF := self searchPath:(self realSystemPath) for:f in:('resources').
- pF notNil ifTrue:[
- ^ pF.
- ].
- ].
- ^ nil
+ pF := self searchPath:(self realSystemPath) for:aFileName in:('resources').
+ pF notNil ifTrue:[
+ ^ pF.
+ ].
+ f ~= aFileName ifTrue:[
+ pF := self searchPath:(self realSystemPath) for:f in:('resources').
+ pF notNil ifTrue:[
+ ^ pF.
+ ].
+ ].
+ ^ nil
].
packageDir := aPackageIDOrNil copyReplaceAll:$: with:$/.
pF := self searchPath:(self realSystemPath) for:aFileName in:('resources/',packageDir).
pF notNil ifTrue:[
- ^ pF.
+ ^ pF.
].
dir := self projectDirectoryForPackage:aPackageIDOrNil.
dir notNil ifTrue:[
- pF := (dir asFilename construct:'resources') constructString:f.
- pF asFilename exists ifTrue:[
- ^ pF.
- ].
- pF := (dir asFilename construct:'styles') constructString:f.
- pF asFilename exists ifTrue:[
- ^ pF.
- ].
- "resolve something like: 'ASN/definition.asn1'"
- pF := dir asFilename constructString:f.
- pF asFilename exists ifTrue:[
- ^ pF.
- ].
- ].
+ dir := dir asFilename.
+
+ (pF := dir / 'resources' / f) exists ifTrue:[ ^ pF name ].
+ (pF := dir / 'styles' / f) exists ifTrue:[ ^ pF name ].
+
+ "resolve something like: 'ASN/definition.asn1'"
+ (pF := dir / f) exists ifTrue:[ ^ pF name ].
+ ].
+
^ nil
"
@@ -6175,16 +6271,16 @@
|f|
SourcePath isNil ifTrue:[
- SourcePath := self constructPathFor:SourceDirName
+ SourcePath := self constructPathFor:SourceDirName
].
"/ first, try a source subdir along the path.
SourcePath notNil ifTrue:[
- f := self searchPath:SourcePath for:aFileName in:SourceDirName.
+ f := self searchPath:SourcePath for:aFileName in:SourceDirName.
].
f isNil ifTrue:[
- "/ then, try it itself along the path.
- f := self searchPath:self realSystemPath for:aFileName in:nil
+ "/ then, try it itself along the path.
+ f := self searchPath:self realSystemPath for:aFileName in:nil
].
^ f
@@ -6211,23 +6307,23 @@
fn := aFileNameOrString asFilename.
nameString := fn name.
fn isAbsolute ifTrue:[
- "dont use path for absolute file names"
-
- ^ nameString
+ "dont use path for absolute file names"
+
+ ^ nameString
].
self realSystemPath do:[:dirName |
- |realName|
-
- realName := dirName asFilename construct:nameString.
- "/
- "/ here, we also return true if its a directory
- "/ (Even if unreadable).
- "/ It could be that the file itself is still readable.
- "/
- (realName isDirectory or:[realName isReadable]) ifTrue: [
- ^ realName name
- ]
+ |realName|
+
+ realName := dirName asFilename / nameString.
+ "/
+ "/ here, we also return true if its a directory
+ "/ (Even if unreadable).
+ "/ It could be that the file itself is still readable.
+ "/
+ (realName isDirectory or:[realName isReadable]) ifTrue: [
+ ^ realName name
+ ]
].
^ nil
@@ -6253,10 +6349,10 @@
classPackage := aClass package.
img := self imageFromFileNamed:aFileName inPackage:classPackage.
img isNil ifTrue:[
- "/ try under the goodies package ...
- classPackage ~= 'stx:goodies' ifTrue:[
- img := self imageFromFileNamed:aFileName inPackage:'stx:goodies'.
- ]
+ "/ try under the goodies package ...
+ classPackage ~= 'stx:goodies' ifTrue:[
+ img := self imageFromFileNamed:aFileName inPackage:'stx:goodies'.
+ ]
].
^ img
@@ -6271,16 +6367,16 @@
then in the package directory if existing.
Return an image or nil.
Search order is:
- bitmaps/<pkg>/file
- resources/<pkg>/bitmaps/file
- <pkg>/bitmaps/file
+ bitmaps/<pkg>/file
+ resources/<pkg>/bitmaps/file
+ <pkg>/bitmaps/file
"
|path|
path := self getBitmapFileName:aFileName forPackage:aPackage.
path notNil ifTrue:[
- ^ Image fromFile:path.
+ ^ Image fromFile:path.
].
^ nil
@@ -6312,9 +6408,9 @@
|aStream line words n aClassName|
aClassOrClassName isBehavior ifTrue:[
- aClassName := aClassOrClassName name
+ aClassName := aClassOrClassName name
] ifFalse:[
- aClassName := aClassOrClassName
+ aClassName := aClassOrClassName
].
aClassName := aClassName asString.
@@ -6322,26 +6418,26 @@
with:#(2) "/ column
do:[:fileName :col |
- aStream := self systemFileStreamFor:fileName.
- aStream notNil ifTrue:[
- [aStream atEnd] whileFalse:[
- line := aStream nextLine.
- line notNil ifTrue:[
- (line startsWith:'#') ifFalse:[
- words := line asCollectionOfWords.
- (n := words size) > 1 ifTrue:[
- (words at:1) = aClassName ifTrue:[
- n >= col ifTrue:[
- aStream close.
- ^ (words at:col) withoutSeparators
- ]
- ]
- ]
- ]
- ]
- ].
- aStream close
- ].
+ aStream := self systemFileStreamFor:fileName.
+ aStream notNil ifTrue:[
+ [aStream atEnd] whileFalse:[
+ line := aStream nextLine.
+ line notNil ifTrue:[
+ (line startsWith:'#') ifFalse:[
+ words := line asCollectionOfWords.
+ (n := words size) > 1 ifTrue:[
+ (words at:1) = aClassName ifTrue:[
+ n >= col ifTrue:[
+ aStream close.
+ ^ (words at:col) withoutSeparators
+ ]
+ ]
+ ]
+ ]
+ ]
+ ].
+ aStream close
+ ].
].
^ nil
@@ -6410,10 +6506,10 @@
"/ in the directory, from which the project was loaded
prj := Project projectWithId:aPackage.
prj notNil ifTrue:[
- prjDir := prj directory.
+ prjDir := prj directory.
].
(prjDir notNil and:[prjDir asFilename exists]) ifFalse:[
- prjDir := Smalltalk getPackageFileName:(aPackage copyReplaceAll:$: with:$/).
+ prjDir := Smalltalk getPackageFileName:(aPackage copyReplaceAll:$: with:$/).
].
^ prjDir
@@ -6449,10 +6545,10 @@
sigh - all for those poor sys5.3 or MSDOS people with short filenames ..."
self
- withAbbreviationsFromStream:aStream
- do:[:className :abbrev :pkg |
- self setFilename:abbrev forClass:className package:pkg.
- ].
+ withAbbreviationsFromStream:aStream
+ do:[:className :abbrev :pkg |
+ self setFilename:abbrev forClass:className package:pkg.
+ ].
"Modified: / 13.12.1999 / 11:54:17 / cg"
!
@@ -6464,32 +6560,32 @@
|nP|
RealSystemPath isNil ifTrue:[
- OperatingSystem isVMSlike ifTrue:[
- "/ temporary kludge: since we cannot currently
- "/ check for existance of a name like 'volume:',
- "/ leave those in the Path without a check.
- RealSystemPath := SystemPath select:[:dirName | |f|
- f := dirName asFilename.
- f isVolumeOnly or:[(f isDirectory) and:[f isReadable]]
- ]
- ] ifFalse:[
- RealSystemPath := SystemPath
- select:[:eachDirectoryName | |f|
- f := eachDirectoryName asFilename.
- (f isDirectory) and:[f isReadable]
- ] thenCollect:[:eachDirectoryName|
- eachDirectoryName asFilename pathName.
- ].
-
- "/ remove duplicates (but keep order)
- nP := OrderedCollection new.
- RealSystemPath do:[:p |
- (nP includes:p) ifFalse:[
- nP add:p
- ]
- ].
- RealSystemPath := nP.
- ].
+ OperatingSystem isVMSlike ifTrue:[
+ "/ temporary kludge: since we cannot currently
+ "/ check for existance of a name like 'volume:',
+ "/ leave those in the Path without a check.
+ RealSystemPath := SystemPath select:[:dirName | |f|
+ f := dirName asFilename.
+ f isVolumeOnly or:[(f isDirectory) and:[f isReadable]]
+ ]
+ ] ifFalse:[
+ RealSystemPath := SystemPath
+ select:[:eachDirectoryName | |f|
+ f := eachDirectoryName asFilename.
+ (f isDirectory) and:[f isReadable]
+ ] thenCollect:[:eachDirectoryName|
+ eachDirectoryName asFilename pathName.
+ ].
+
+ "/ remove duplicates (but keep order)
+ nP := OrderedCollection new.
+ RealSystemPath do:[:p |
+ (nP includes:p) ifFalse:[
+ nP add:p
+ ]
+ ].
+ RealSystemPath := nP.
+ ].
].
^ RealSystemPath
!
@@ -6505,40 +6601,40 @@
maxLevels == 0 ifTrue:[
"/ 'Smalltalk [warning]: max directory nesting reached.' infoPrintCR.
- ^ self
+ ^ self
].
dir := aDirectory asFilename.
dir exists ifFalse:[^ self].
[
- abbrevStream := (dir construct:'abbrev.stc') asFilename readStream.
- self readAbbreviationsFromStream:abbrevStream.
- abbrevStream close.
+ abbrevStream := (dir / 'abbrev.stc') asFilename readStream.
+ self readAbbreviationsFromStream:abbrevStream.
+ abbrevStream close.
] on:FileStream openErrorSignal do:[:ex| "ignore this file"].
[
- directoryContents := dir directoryContents.
+ directoryContents := dir directoryContents.
] on:FileStream openErrorSignal do:[:ex|
- "non-accessable directory: we are done"
- ^ self
+ "non-accessable directory: we are done"
+ ^ self
].
directoryContents do:[:aFilename |
- |f|
-
- (#(
- 'doc'
- 'CVS'
- 'bitmaps'
- 'resources'
- 'source'
- ) includes:aFilename) ifFalse:[
- f := dir construct:aFilename.
- f isDirectory ifTrue:[
- self recursiveReadAllAbbreviationsFrom:f maxLevels:maxLevels-1
- ]
- ].
+ |f|
+
+ (#(
+ 'doc'
+ 'CVS'
+ 'bitmaps'
+ 'resources'
+ 'source'
+ ) includes:aFilename) ifFalse:[
+ f := dir / aFilename.
+ f isDirectory ifTrue:[
+ self recursiveReadAllAbbreviationsFrom:f maxLevels:maxLevels-1
+ ]
+ ].
].
!
@@ -6549,17 +6645,17 @@
|prjDir rsrcDir|
aPackage notNil ifTrue:[
- prjDir := self projectDirectoryForPackage:aPackage.
-
- (prjDir notNil
- and:[(prjDir := prjDir asFilename) exists
- and:[(rsrcDir := prjDir construct:'resources') exists]]) ifTrue:[
- ^ rsrcDir
- ].
- rsrcDir := self getSystemFileName:('resources/' , (aPackage copyReplaceAll:$: with:$/)).
- rsrcDir notNil ifTrue:[
- ^ rsrcDir asFilename
- ].
+ prjDir := self projectDirectoryForPackage:aPackage.
+
+ (prjDir notNil
+ and:[(prjDir := prjDir asFilename) exists
+ and:[(rsrcDir := prjDir / 'resources') exists]]) ifTrue:[
+ ^ rsrcDir
+ ].
+ rsrcDir := self getSystemFileName:('resources/' , (aPackage copyReplaceAll:$: with:$/)).
+ rsrcDir notNil ifTrue:[
+ ^ rsrcDir asFilename
+ ].
].
^ nil
@@ -6588,7 +6684,7 @@
aString := self getResourceFileName:aFileName forClass:aClassOrNil.
aString notNil ifTrue:[
- ^ aString asFilename readStreamOrNil
+ ^ aString asFilename readStreamOrNil
].
^ nil
!
@@ -6601,30 +6697,30 @@
((f := aFileName asFilename) isAbsolute
or:[f isExplicitRelative]) ifTrue:[
- "/
- "/ dont use path for absolute or explicit .-relative file names
- "/
- ^ aFileName
+ "/
+ "/ dont use path for absolute or explicit .-relative file names
+ "/
+ ^ aFileName
].
aPath notNil ifTrue:[
- aPath do:[:dirName |
- |realName dir|
-
- dir := dirName asFilename.
- aDirName notNil ifTrue:[
- realName := (dir construct:aDirName) construct:aFileName.
- ] ifFalse:[
- realName := dir construct:aFileName.
- ].
- (realName isReadable) ifTrue:[
- ^ realName name
- ]
- ].
+ aPath do:[:dirName |
+ |realName dir|
+
+ dir := dirName asFilename.
+ aDirName notNil ifTrue:[
+ realName := dir / aDirName / aFileName.
+ ] ifFalse:[
+ realName := dir / aFileName.
+ ].
+ (realName isReadable) ifTrue:[
+ ^ realName name
+ ]
+ ].
].
"/ not needed - executing dir is always in SearchPath
-"/ realName := Filename currentDirectory construct:aFileName.
+"/ realName := Filename currentDirectory / aFileName.
"/ (realName isReadable) ifTrue:[
"/ ^ realName name
"/ ].
@@ -6637,55 +6733,55 @@
|classNameSymbol oldAbbrev oldPath newPath cls abbrevs|
CachedAbbreviations isNil ifTrue:[
- CachedAbbreviations := IdentityDictionary new.
+ CachedAbbreviations := IdentityDictionary new.
].
abbrevs := CachedAbbreviations.
aClassNameString ~= aFileNameString ifTrue:[
- classNameSymbol := aClassNameString asSymbol.
- oldAbbrev := abbrevs at:classNameSymbol ifAbsent:nil.
- oldAbbrev notNil ifTrue:[
- oldAbbrev ~= aFileNameString ifTrue:[
- oldAbbrev asFilename isAbsolute
- ifTrue:[ oldPath := oldAbbrev ]
- ifFalse:[ oldPath := (self projectDirectoryForPackage:aPackageNameString) asFilename constructString: oldAbbrev ].
- aFileNameString asFilename isAbsolute
- ifTrue:[ newPath := aFileNameString ]
- ifFalse:[ newPath := (self projectDirectoryForPackage:aPackageNameString) asFilename constructString: aFileNameString ].
-
- oldPath ~= newPath ifTrue:[
- StandAlone ifFalse:[
- ('Smalltalk [warning]: autoload path change for: ',aClassNameString,' in package ',aPackageNameString) infoPrintCR.
- ('Smalltalk [info]: old: ',oldPath) infoPrintCR.
- ('Smalltalk [info]: new: ',newPath) infoPrintCR.
- ]
- ]
- ].
- "overwrite old abbreviation with new one,
- to allow fixing of bad abbrev files"
- ].
-
- cls := self classNamed:aFileNameString.
- cls notNil ifTrue:[
- cls name ~= aClassNameString ifTrue:[
- "/ ok, there is a class named after this abbrev ...
- "/ this is only a conflict, if the other class has no
- "/ abbreviation (or the same).
- (abbrevs at:(cls name asSymbol) ifAbsent:cls name) = aFileNameString ifTrue:[
- cls isNameSpace ifFalse:[
- aPackageNameString = cls package ifTrue:[
- StandAlone ifFalse:[
- ('Smalltalk [warning]: conflict for: ' , cls name ,
- ' in package ' , aPackageNameString) infoPrintCR.
- ('Smalltalk [warning]: (' , aClassNameString , ' -> ' , aFileNameString
- , ')') infoPrintCR
- ]
- ]
- ]
- ]
- ]
- ].
- abbrevs at:classNameSymbol put:aFileNameString.
+ classNameSymbol := aClassNameString asSymbol.
+ oldAbbrev := abbrevs at:classNameSymbol ifAbsent:nil.
+ oldAbbrev notNil ifTrue:[
+ oldAbbrev ~= aFileNameString ifTrue:[
+ oldAbbrev asFilename isAbsolute
+ ifTrue:[ oldPath := oldAbbrev ]
+ ifFalse:[ oldPath := (self projectDirectoryForPackage:aPackageNameString) asFilename constructString: oldAbbrev ].
+ aFileNameString asFilename isAbsolute
+ ifTrue:[ newPath := aFileNameString ]
+ ifFalse:[ newPath := (self projectDirectoryForPackage:aPackageNameString) asFilename constructString: aFileNameString ].
+
+ oldPath ~= newPath ifTrue:[
+ StandAlone ifFalse:[
+ ('Smalltalk [warning]: autoload path change for: ',aClassNameString,' in package ',aPackageNameString) infoPrintCR.
+ ('Smalltalk [info]: old: ',oldPath) infoPrintCR.
+ ('Smalltalk [info]: new: ',newPath) infoPrintCR.
+ ]
+ ]
+ ].
+ "overwrite old abbreviation with new one,
+ to allow fixing of bad abbrev files"
+ ].
+
+ cls := self classNamed:aFileNameString.
+ cls notNil ifTrue:[
+ cls name ~= aClassNameString ifTrue:[
+ "/ ok, there is a class named after this abbrev ...
+ "/ this is only a conflict, if the other class has no
+ "/ abbreviation (or the same).
+ (abbrevs at:(cls name asSymbol) ifAbsent:cls name) = aFileNameString ifTrue:[
+ cls isNameSpace ifFalse:[
+ aPackageNameString = cls package ifTrue:[
+ StandAlone ifFalse:[
+ ('Smalltalk [warning]: conflict for: ' , cls name ,
+ ' in package ' , aPackageNameString) infoPrintCR.
+ ('Smalltalk [warning]: (' , aClassNameString , ' -> ' , aFileNameString
+ , ')') infoPrintCR
+ ]
+ ]
+ ]
+ ]
+ ]
+ ].
+ abbrevs at:classNameSymbol put:aFileNameString.
]
!
@@ -6700,9 +6796,9 @@
|aStream line words n aClassName|
aClassOrClassName isBehavior ifTrue:[
- aClassName := aClassOrClassName name
+ aClassName := aClassOrClassName name
] ifFalse:[
- aClassName := aClassOrClassName
+ aClassName := aClassOrClassName
].
aClassName := aClassName asString.
@@ -6710,26 +6806,26 @@
with:#(3 2) "/ column
do:[:fileName :col |
- aStream := self systemFileStreamFor:fileName.
- aStream notNil ifTrue:[
- [aStream atEnd] whileFalse:[
- line := aStream nextLine.
- line notNil ifTrue:[
- (line startsWith:'#') ifFalse:[
- words := line asCollectionOfWords.
- (n := words size) > 1 ifTrue:[
- (words at:1) = aClassName ifTrue:[
- n >= col ifTrue:[
- aStream close.
- ^ (words at:col) withoutSeparators
- ]
- ]
- ]
- ]
- ]
- ].
- aStream close
- ].
+ aStream := self systemFileStreamFor:fileName.
+ aStream notNil ifTrue:[
+ [aStream atEnd] whileFalse:[
+ line := aStream nextLine.
+ line notNil ifTrue:[
+ (line startsWith:'#') ifFalse:[
+ words := line asCollectionOfWords.
+ (n := words size) > 1 ifTrue:[
+ (words at:1) = aClassName ifTrue:[
+ n >= col ifTrue:[
+ aStream close.
+ ^ (words at:col) withoutSeparators
+ ]
+ ]
+ ]
+ ]
+ ]
+ ].
+ aStream close
+ ].
].
^ nil
@@ -6755,7 +6851,7 @@
aString := self getSourceFileName:aFileName.
aString notNil ifTrue:[
- ^ aString asFilename readStreamOrNil
+ ^ aString asFilename readStreamOrNil
].
^ nil
!
@@ -6769,7 +6865,7 @@
aString := self getSystemFileName:aFileName.
aString notNil ifTrue:[
- ^ aString asFilename readStreamOrNil
+ ^ aString asFilename readStreamOrNil
].
^ nil
!
@@ -6806,42 +6902,42 @@
withAbbreviationsFromStream:aStream do:aBlock
"read classname to filename mappings from aStream.
Evaluate aBlock for each tuple:
- class-name , abbrev-name, package
+ class-name , abbrev-name, package
Sigh - all for those poor sys5.3 or MSDOS people with short filenames..."
|line words nm abbrev pkg s w|
[aStream atEnd] whileFalse:[
- line := aStream nextLine.
- line notNil ifTrue:[
- (line startsWith:'#') ifFalse:[
-
- "/ must do it manually, caring for quoted strings.
+ line := aStream nextLine.
+ line notNil ifTrue:[
+ (line startsWith:'#') ifFalse:[
+
+ "/ must do it manually, caring for quoted strings.
"/ words := line asCollectionOfWords.
- words := OrderedCollection new.
- s := line readStream.
- [s atEnd] whileFalse:[
- s skipSeparators.
- s peek == $' ifTrue:[
- s next.
- w := s upTo:$'.
- s skipSeparators.
- ] ifFalse:[
- w := s upToSeparator
- ].
- words add:w
- ].
- words size >= 3 ifTrue:[
- nm := (words at:1) withoutSeparators.
- abbrev := (words at:2) withoutSeparators.
- pkg := (words at:3) withoutSeparators.
- aBlock value:nm value:abbrev value:pkg.
- ] ifFalse:[
- ('Smalltalk [warning]: malformed line in ' , (aStream pathName)) infoPrintCR.
- ]
- ]
- ]
+ words := OrderedCollection new.
+ s := line readStream.
+ [s atEnd] whileFalse:[
+ s skipSeparators.
+ s peek == $' ifTrue:[
+ s next.
+ w := s upTo:$'.
+ s skipSeparators.
+ ] ifFalse:[
+ w := s upToSeparator
+ ].
+ words add:w
+ ].
+ words size >= 3 ifTrue:[
+ nm := (words at:1) withoutSeparators.
+ abbrev := (words at:2) withoutSeparators.
+ pkg := (words at:3) withoutSeparators.
+ aBlock value:nm value:abbrev value:pkg.
+ ] ifFalse:[
+ ('Smalltalk [warning]: malformed line in ' , (aStream pathName)) infoPrintCR.
+ ]
+ ]
+ ]
].
"Modified: / 13.12.1999 / 11:54:17 / cg"
@@ -6926,7 +7022,7 @@
"remove all undeclared variables"
(Smalltalk at:#Undeclared) do:[:eachKey |
- Smalltalk removeKey:(self undeclaredPrefix , eachKey) asSymbol.
+ Smalltalk removeKey:(self undeclaredPrefix , eachKey) asSymbol.
].
(Smalltalk at:#Undeclared) removeAll.
Smalltalk removeKey:#Undeclared.
@@ -7013,7 +7109,7 @@
exp = __MKUINT(__getExpirationTime());
%}.
exp == 0 ifTrue:[
- ^ nil
+ ^ nil
].
^ Timestamp new fromOSTime:(exp * 1000). "OSTime is ms since 1970"
@@ -7050,28 +7146,28 @@
lang := Language.
(lang == #de) ifTrue:[
- proto := 'Willkommen bei %1 (Version %2 von %3)'
+ proto := 'Willkommen bei %1 (Version %2 von %3)'
] ifFalse:[ (lang == #fr) ifTrue:[
- proto := 'Salut, Bienvenue à %1 (version %2 de %3)'
+ proto := 'Salut, Bienvenue à %1 (version %2 de %3)'
] ifFalse:[ (lang == #it) ifTrue:[
- proto := 'Ciao, benvenuto al %1 (versione %2 di %3)'
+ proto := 'Ciao, benvenuto al %1 (versione %2 di %3)'
] ifFalse:[ (lang == #es) ifTrue:[
"/ proto := 'Hola, bienvenida a %1 (versión %2 de %3)'
] ifFalse:[ (lang == #es) ifTrue:[
"/ proto := 'Oi, benvindo a %1 (versão %2 de %3)'
] ifFalse:[ (lang == #no) ifTrue:[
- proto := 'Hei, verdenmottakelse til %1 (versjon %2 av %3)'
+ proto := 'Hei, verdenmottakelse til %1 (versjon %2 av %3)'
]]]]]].
"/ ... more needed here ...
proto isNil ifTrue:[
- proto := 'Hello World - here is %1 version %2 of %3'.
+ proto := 'Hello World - here is %1 version %2 of %3'.
].
^ proto bindWith:('SmallTalk/X' allBold)
- with:(self versionString)
- with:(self versionDate)
+ with:(self versionString)
+ with:(self versionDate)
"
Smalltalk language:#us.
@@ -7140,7 +7236,7 @@
classes changes).
ST/X revision Naming is:
- <major>.<minor>.<revision>.<release>"
+ <major>.<minor>.<revision>.<release>"
^ 5
@@ -7160,7 +7256,7 @@
classes need rework.
ST/X revision Naming is:
- <major>.<minor>.<revision>.<release>"
+ <major>.<minor>.<revision>.<release>"
^ 4
@@ -7197,7 +7293,7 @@
their way to the outside world.
ST/X revision Naming is:
- <major>.<minor>.<revision>.<release>"
+ <major>.<minor>.<revision>.<release>"
^ 1
@@ -7218,7 +7314,7 @@
to the outside world.
ST/X revision Naming is:
- <major>.<minor>.<revision>.<release>"
+ <major>.<minor>.<revision>.<release>"
^ 6
@@ -7311,10 +7407,9 @@
!Smalltalk class methodsFor:'documentation'!
version
- ^ '$Id: Smalltalk.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Smalltalk.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.893 2009/10/15 15:22:44 cg Exp §'
+ ^ '$Id: Smalltalk.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
-
--- a/SmalltalkChunkFileSourceReader.st Mon Oct 26 21:51:17 2009 +0000
+++ b/SmalltalkChunkFileSourceReader.st Thu Nov 05 14:41:30 2009 +0000
@@ -47,14 +47,15 @@
!SmalltalkChunkFileSourceReader class methodsFor:'documentation'!
version
- ^ '$Id: SmalltalkChunkFileSourceReader.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: SmalltalkChunkFileSourceReader.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/SmalltalkChunkFileSourceReader.st,v 1.5 2009/10/08 11:56:01 fm Exp §'
+ ^ '$Id: SmalltalkChunkFileSourceReader.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_SVN
- ^ '$Id: SmalltalkChunkFileSourceReader.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^'§Id: SmalltalkChunkFileSourceReader.st 10465 2009-08-16 17:14:23Z vranyj1 §'
! !
+
--- a/SmalltalkChunkFileSourceWriter.st Mon Oct 26 21:51:17 2009 +0000
+++ b/SmalltalkChunkFileSourceWriter.st Thu Nov 05 14:41:30 2009 +0000
@@ -462,10 +462,11 @@
!SmalltalkChunkFileSourceWriter class methodsFor:'documentation'!
version
- ^ '$Id: SmalltalkChunkFileSourceWriter.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: SmalltalkChunkFileSourceWriter.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/SmalltalkChunkFileSourceWriter.st,v 1.12 2009/10/02 14:30:07 cg Exp §'
+ ^ '$Id: SmalltalkChunkFileSourceWriter.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/SmalltalkLanguage.st Mon Oct 26 21:51:17 2009 +0000
+++ b/SmalltalkLanguage.st Thu Nov 05 14:41:30 2009 +0000
@@ -130,8 +130,9 @@
!SmalltalkLanguage methodsFor:'testing'!
isSmalltalk
+ "true iff I represent the smalltalk language"
- ^true
+ ^ true
"Created: / 16-08-2009 / 09:01:38 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !
@@ -183,14 +184,15 @@
!SmalltalkLanguage class methodsFor:'documentation'!
version
- ^ '$Id: SmalltalkLanguage.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: SmalltalkLanguage.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/SmalltalkLanguage.st,v 1.9 2009/10/08 11:59:18 fm Exp §'
+ ^ '$Id: SmalltalkLanguage.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_SVN
- ^ '$Id: SmalltalkLanguage.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^'§Id: SmalltalkLanguage.st 10468 2009-08-22 08:34:50Z vranyj1 §'
! !
+
--- a/StandaloneStartup.st Mon Oct 26 21:51:17 2009 +0000
+++ b/StandaloneStartup.st Thu Nov 05 14:41:30 2009 +0000
@@ -45,7 +45,7 @@
"
a subclassable template class for a standalone GUI-application's startup;
For your own stand alone programs, define a subclass of this,
- and redefine the #main method there.
+ and redefine the #main: method there.
(of course, the other methods can also be redefined.)
[author:]
@@ -670,7 +670,12 @@
!StandaloneStartup class methodsFor:'documentation'!
version
- ^ '$Id: StandaloneStartup.st 10467 2009-08-19 16:14:36Z vranyj1 $'
+ ^ '$Id: StandaloneStartup.st 10477 2009-11-05 14:41:30Z vranyj1 $'
+!
+
+version_CVS
+ ^ '$Id: StandaloneStartup.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
StandaloneStartup initialize!
+
--- a/Stream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Stream.st Thu Nov 05 14:41:30 2009 +0000
@@ -560,16 +560,6 @@
with externalStreams."
!
-readWait
- ^ self "/ never have to wait
-!
-
-readWaitWithTimeoutMs:millis
- "Return true if a timeout occured (i.e. false, if data is available)."
-
- ^ false "/ never have to wait
-!
-
text
"switch to text mode.
Ignored here, but added to make internalStreams protocol compatible
@@ -577,14 +567,6 @@
"Modified: 15.5.1996 / 17:38:36 / cg"
"Created: 13.9.1996 / 18:33:26 / cg"
-!
-
-writeWait
- ^ self
-!
-
-writeWaitWithTimeoutMs:millis
- ^ false "/ never have to wait
! !
!Stream methodsFor:'misc functions'!
@@ -794,7 +776,7 @@
streams."
|n "{Class: SmallInteger }"
- dstIndex binary|
+ dstIndex binary b|
dstIndex := initialIndex.
n := 0.
@@ -805,10 +787,14 @@
^ n
].
binary ifTrue:[
- aCollection byteAt:dstIndex put:self nextByte.
+ b := self nextByte.
] ifFalse:[
- aCollection at:dstIndex put:self next.
+ b := self next.
+ b isInteger ifFalse:[
+ b := b asInteger
+ ].
].
+ aCollection byteAt:dstIndex put:b.
dstIndex := dstIndex + 1.
n := n + 1.
].
@@ -2535,6 +2521,95 @@
^ aVisitor visitStream:self with:aParameter
! !
+!Stream methodsFor:'waiting for I/O'!
+
+readWait
+ "suspend the current process, until the receiver
+ becomes ready for reading. If data is already available,
+ return immediate.
+ The other threads are not affected by the wait."
+
+ ^ self readWaitWithTimeoutMs:nil
+!
+
+readWaitTimeoutMs:timeout
+ "ST-80 compatibility"
+ ^ self readWaitWithTimeoutMs:timeout
+!
+
+readWaitWithTimeout:seconds
+ "suspend the current process, until the receiver
+ becomes ready for reading or a timeout (in seconds) expired.
+ If data is already available, return immediate.
+ With nil seconds, wait forever.
+ Return true if a timeout occured (i.e. false, if data is available).
+ The other threads are not affected by the wait."
+
+ |ms|
+
+ seconds notNil ifTrue:[
+ ms := seconds * 1000
+ ].
+ ^ self readWaitWithTimeoutMs:ms
+!
+
+readWaitWithTimeoutMs:millis
+ "suspend the current process, until the receiver
+ becomes ready for reading or a timeout (in milliseconds) expired.
+ If data is already available, return immediate.
+ With nil millis, wait forever.
+ Return true if a timeout occured (i.e. false, if data is available).
+ The other threads are not affected by the wait."
+
+ ^ false "/ never have to wait
+!
+
+readWriteWait
+ "suspend the current process, until the receiver
+ becomes ready for writing or reading.
+ Return immediate if the receiver is already ready.
+ The other threads are not affected by the wait."
+
+ self readWriteWaitWithTimeoutMs:nil
+!
+
+readWriteWaitWithTimeoutMs:millis
+ ^ false "/ never have to wait
+!
+
+writeWait
+ "suspend the current process, until the receiver
+ becomes ready for writing.
+ Return immediate if the receiver is already ready.
+ The other threads are not affected by the wait."
+
+ self writeWaitWithTimeoutMs:nil
+!
+
+writeWaitTimeoutMs:timeout
+ "ST-80 compatibility"
+ ^ self writeWaitWithTimeoutMs:timeout
+!
+
+writeWaitWithTimeout:timeout
+ "suspend the current process, until the receiver
+ becomes ready for writing or a timeout (in seconds) expired.
+ Return true if a timeout occured (i.e. false, if data is available).
+ Return immediate if the receiver is already ready.
+ The other threads are not affected by the wait."
+
+ |ms|
+
+ timeout notNil ifTrue:[
+ ms := timeout * 1000
+ ].
+ ^ self writeWaitWithTimeoutMs:ms
+!
+
+writeWaitWithTimeoutMs:millis
+ ^ false "/ never have to wait
+! !
+
!Stream methodsFor:'writing'!
commit
@@ -3008,12 +3083,13 @@
!Stream class methodsFor:'documentation'!
version
- ^ '$Id: Stream.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Stream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Stream.st,v 1.175 2009/10/05 09:21:03 cg Exp §'
+ ^ '$Id: Stream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Stream initialize!
+
--- a/String.st Mon Oct 26 21:51:17 2009 +0000
+++ b/String.st Thu Nov 05 14:41:30 2009 +0000
@@ -466,6 +466,22 @@
^ LF
!
+stringHash:aString initialHash:speciesHash
+ "for squeak compatibility only; this is NOT the same hash as my instances use"
+
+ | stringSize hash low |
+
+ stringSize := aString size.
+ hash := speciesHash bitAnd: 16rFFFFFFF.
+ 1 to: stringSize do: [:pos |
+ hash := hash + (aString at: pos) asInteger.
+ "Begin hashMultiply"
+ low := hash bitAnd: 16383.
+ hash := (16r260D * low + ((16r260D * (hash bitShift: -14) + (16r0065 * low) bitAnd: 16383) * 16384)) bitAnd: 16r0FFFFFFF.
+ ].
+ ^ hash.
+!
+
tab
"return a string consisting of the tab-Character"
@@ -504,7 +520,6 @@
"
! !
-
!String methodsFor:'accessing'!
at:index
@@ -3658,10 +3673,11 @@
!String class methodsFor:'documentation'!
version
- ^ '$Id: String.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: String.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/String.st,v 1.265 2009/10/09 09:46:21 cg Exp §'
+ ^ '$Id: String.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/SystemChangeNotifier.st Mon Oct 26 21:51:17 2009 +0000
+++ b/SystemChangeNotifier.st Thu Nov 05 14:41:30 2009 +0000
@@ -75,10 +75,19 @@
isBroadcasting
^ silenceLevel = 0
+!
+
+noMoreNotificationsFor: aStakeHolder
+ "dummy for now "
+!
+
+notify:aStakeHolder ofSystemChangesOfItem:anItemSymbol change: changeTypeSymbol using: changeMessage
+ "dummy for now "
! !
!SystemChangeNotifier class methodsFor:'documentation'!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/SystemChangeNotifier.st,v 1.2 2009/10/12 21:45:23 cg Exp §'
+ ^ '$Id: SystemChangeNotifier.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/Timestamp.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Timestamp.st Thu Nov 05 14:41:30 2009 +0000
@@ -2423,12 +2423,13 @@
!Timestamp class methodsFor:'documentation'!
version
- ^ '$Id: Timestamp.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Timestamp.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Timestamp.st,v 1.126 2009/10/09 07:03:39 stefan Exp §'
+ ^ '$Id: Timestamp.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Timestamp initialize!
+
--- a/UninterpretedBytes.st Mon Oct 26 21:51:17 2009 +0000
+++ b/UninterpretedBytes.st Thu Nov 05 14:41:30 2009 +0000
@@ -2494,10 +2494,11 @@
!UninterpretedBytes class methodsFor:'documentation'!
version
- ^ '$Id: UninterpretedBytes.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: UninterpretedBytes.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/UninterpretedBytes.st,v 1.73 2009/10/13 10:04:18 cg Exp §'
+ ^ '$Id: UninterpretedBytes.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/UnixFilename.st Mon Oct 26 21:51:17 2009 +0000
+++ b/UnixFilename.st Thu Nov 05 14:41:30 2009 +0000
@@ -166,7 +166,10 @@
"return true, if the receiver represents a hidden file.
On UNIX, a name starting with a period is considered hidden."
- ^ self baseName startsWith:'.'
+ |baseName|
+
+ baseName := self baseName.
+ ^ ((baseName startsWith:'.') and:[baseName ~= '..'])
!
isImplicit
@@ -204,5 +207,10 @@
!UnixFilename class methodsFor:'documentation'!
version
- ^ '$Id: UnixFilename.st 10447 2009-06-14 13:09:55Z vranyj1 $'
+ ^ '$Id: UnixFilename.st 10477 2009-11-05 14:41:30Z vranyj1 $'
+!
+
+version_CVS
+ ^ '$Id: UnixFilename.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/UserMessage.st Mon Oct 26 21:51:17 2009 +0000
+++ b/UserMessage.st Thu Nov 05 14:41:30 2009 +0000
@@ -170,10 +170,11 @@
!UserMessage class methodsFor:'documentation'!
version
- ^ '$Id: UserMessage.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: UserMessage.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/UserMessage.st,v 1.6 2009/10/02 00:08:10 cg Exp §'
+ ^ '$Id: UserMessage.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/UserNotification.st Mon Oct 26 21:51:17 2009 +0000
+++ b/UserNotification.st Thu Nov 05 14:41:30 2009 +0000
@@ -142,12 +142,13 @@
!UserNotification class methodsFor:'documentation'!
version
- ^ '$Id: UserNotification.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: UserNotification.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/UserNotification.st,v 1.15 2009/10/14 17:34:46 cg Exp §'
+ ^ '$Id: UserNotification.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
UserNotification initialize!
+
--- a/UserPreferences.st Mon Oct 26 21:51:17 2009 +0000
+++ b/UserPreferences.st Thu Nov 05 14:41:30 2009 +0000
@@ -623,23 +623,6 @@
^ super at:key put:value
! !
-!UserPreferences methodsFor:'accessing - desktop'!
-
-editorCommand
-
- ^self at:#'desktop.editor-command' ifAbsent:[ nil ]
-
- "Created: / 11-08-2009 / 17:05:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-editorCommand: aString
-
- self at:#'desktop.editor-command' put: aString
-
- "Created: / 11-08-2009 / 17:06:23 / Jan Vrany <vranyj1@fel.cvut.cz>"
-! !
-
-
!UserPreferences methodsFor:'accessing-misc-communication'!
dotNetBridgeRunsInIDE
@@ -2524,6 +2507,10 @@
buildDirectory
^ self at:#buildDirectory ifAbsent:nil
+
+ "
+ UserPreferences current buildDirectory
+ "
!
buildDirectory:aFilenameStringOrNil
@@ -2746,7 +2733,71 @@
^ self at:#verboseBacktraceInDebugger put:aBoolean
! !
-
+!UserPreferences methodsFor:'accessing-subversion'!
+
+svnConfigurations
+ "subversion source control configurations"
+
+ ^(self at:#'libsvn.configurations' ifAbsent:#())
+ collect:[:cfg|cfg decodeAsLiteralArray]
+
+ "Created: / 03-10-2008 / 11:14:14 / Jan Vrany <vranyj1@fel.cvut.cz>"
+ "Modified: / 19-08-2009 / 12:08:44 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+svnConfigurations: aCollection
+ "subversion source control configurations"
+
+ (SVN::RepositoryManager notNil
+ and:[ SVN::RepositoryManager isLoaded ]) ifTrue:[
+ SVN::RepositoryManager allInstances do:[:e|
+ e configurations: aCollection
+ ]
+ ].
+
+ ^ self
+ at: #'libsvn.configurations'
+ put: (aCollection asArray collect:[:cfg|cfg literalArrayEncoding])
+
+ "
+ UserPreferences current svnConfigurations: #()
+ "
+
+ "Created: / 03-10-2008 / 11:14:01 / Jan Vrany <vranyj1@fel.cvut.cz>"
+ "Modified: / 19-08-2009 / 12:09:22 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+svnEnabled
+ "subversion source control is enabled"
+
+ ^self at:#svnEnabled ifAbsent:[true]
+
+ "Created: / 03-10-2008 / 11:11:39 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+svnEnabled: aBoolean
+ "subversion source control is enabled"
+
+ ^self at:#svnEnabled put: aBoolean
+
+ "Created: / 03-10-2008 / 11:13:14 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+svnVerbose
+ "verbose messages from subversion source control (if enabled)"
+
+ ^self at:#svnVerbose ifAbsent: false
+
+ "Created: / 19-03-2009 / 14:00:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
+svnVerbose: aBoolean
+ "verbose messages from subversion source control (if enabled)"
+
+ ^self at:#svnVerbose put: aBoolean
+
+ "Created: / 19-03-2009 / 13:59:46 / Jan Vrany <vranyj1@fel.cvut.cz>"
+! !
!UserPreferences methodsFor:'default settings'!
listOfPredefinedSyntaxColoringSchemes
@@ -2875,6 +2926,7 @@
self at:#commentEmphasis put:#italic.
self at:#selectorColor put:(Color blue:80).
self at:#selectorEmphasis put:#normal.
+ self at:#controlFlowSelectorEmphasis put:#bold.
self at:#methodSelectorColor put:(Color black).
self at:#methodSelectorEmphasis put:#bold.
self at:#globalIdentifierEmphasis put:#bold.
@@ -2966,13 +3018,9 @@
!UserPreferences class methodsFor:'documentation'!
version
- ^ '$Id: UserPreferences.st 10474 2009-10-26 21:51:17Z vranyj1 $'
+ ^ '$Id: UserPreferences.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/UserPreferences.st,v 1.233 2009/10/14 18:15:05 cg Exp §'
-!
-
-version_SVN
- ^ '$Id: UserPreferences.st 10474 2009-10-26 21:51:17Z vranyj1 $'
! !
+
--- a/Warning.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Warning.st Thu Nov 05 14:41:30 2009 +0000
@@ -155,12 +155,13 @@
!Warning class methodsFor:'documentation'!
version
- ^ '$Id: Warning.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Warning.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Warning.st,v 1.14 2009/10/14 17:34:52 cg Exp §'
+ ^ '$Id: Warning.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Warning initialize!
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Win32Constants.st Thu Nov 05 14:41:30 2009 +0000
@@ -0,0 +1,38 @@
+"{ Package: 'stx:libbasic' }"
+
+SharedPool subclass:#Win32Constants
+ instanceVariableNames:''
+ classVariableNames:'FILE_ATTRIBUTE_HIDDEN FILE_ATTRIBUTE_NORMAL
+ FILE_ATTRIBUTE_TEMPORARY FILE_ATTRIBUTE_DIRECTORY
+ FILE_ATTRIBUTE_READONLY'
+ poolDictionaries:''
+ category:'OS-Windows'
+!
+
+!Win32Constants class methodsFor:'documentation'!
+
+documentation
+"
+ contains (will, eventually) win32 OS constants.
+"
+! !
+
+!Win32Constants class methodsFor:'initialization'!
+
+initialize
+ "Invoked at system start or when the class is dynamically loaded."
+
+ FILE_ATTRIBUTE_READONLY := 1.
+ FILE_ATTRIBUTE_HIDDEN := 2.
+ FILE_ATTRIBUTE_DIRECTORY := 16.
+ FILE_ATTRIBUTE_NORMAL := 128.
+ FILE_ATTRIBUTE_TEMPORARY := 256.
+! !
+
+!Win32Constants class methodsFor:'documentation'!
+
+version_CVS
+ ^ '$Id: Win32Constants.st 10477 2009-11-05 14:41:30Z vranyj1 $'
+! !
+
+Win32Constants initialize!
--- a/Win32OperatingSystem.st Mon Oct 26 21:51:17 2009 +0000
+++ b/Win32OperatingSystem.st Thu Nov 05 14:41:30 2009 +0000
@@ -15,7 +15,7 @@
AbstractOperatingSystem subclass:#Win32OperatingSystem
instanceVariableNames:''
classVariableNames:'Initialized HostName DomainName CurrentDirectory'
- poolDictionaries:''
+ poolDictionaries:'Win32Constants'
category:'OS-Windows'
!
@@ -5095,63 +5095,14 @@
isHidden:aPathName
"return true, if the given file is hidden"
-%{
- int ret;
-
- if (__isString(aPathName)) {
-#ifdef DO_WRAP_CALLS
- char _aPathName[MAXPATHLEN];
-
- strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
- do {
- __threadErrno = 0;
- ret = STX_API_CALL1( "GetFileAttributes", GetFileAttributes, _aPathName);
- } while ((ret < 0) && (__threadErrno == EINTR));
-#else
- ret = GetFileAttributes((char *) __stringVal(aPathName));
- if (ret < 0) {
- __threadErrno = __WIN32_ERR(GetLastError());
- }
-#endif
- if (ret < 0) {
- @global(LastErrorNumber) = __mkSmallInteger(__threadErrno);
- RETURN ( false );
- }
- RETURN ( (ret & FILE_ATTRIBUTE_HIDDEN) ? true : false);
- }
-
- if (__isUnicode16String(aPathName)) {
- wchar_t _wPathName[MAXPATHLEN+1];
- int i, l;
-
- l = __unicode16StringSize(aPathName);
- if (l > MAXPATHLEN) l = MAXPATHLEN;
- for (i=0; i<l; i++) {
- _wPathName[i] = __unicode16StringVal(aPathName)[i];
- }
- _wPathName[i] = 0;
-#ifdef DO_WRAP_CALLS
- do {
- __threadErrno = 0;
- ret = STX_API_CALL1( "GetFileAttributesW", GetFileAttributesW, _wPathName);
- } while ((ret < 0) && (__threadErrno == EINTR));
-#else
- ret = GetFileAttributesW(_wPathName);
- if (ret < 0) {
- __threadErrno = __WIN32_ERR(GetLastError());
- }
-#endif
- if (ret < 0) {
- @global(LastErrorNumber) = __mkSmallInteger(__threadErrno);
- RETURN ( false );
- }
- RETURN ( (ret & FILE_ATTRIBUTE_HIDDEN) ? true : false);
- }
-%}.
- ^ self primitiveFailed
-
- "
- self isHidden:'.'
+ |attr|
+
+ attr := self primGetFileAttributes:aPathName.
+ attr notNil ifTrue:[^ attr bitTest: FILE_ATTRIBUTE_HIDDEN ].
+ ^ false
+
+ "
+ self isHidden:'.'
self isHidden:'.' asUnicode16String
"
!
@@ -5231,6 +5182,21 @@
"
!
+isTemporary:aPathName
+ "return true, if the given file is a temporary file"
+
+ |attr|
+
+ attr := self primGetFileAttributes:aPathName.
+ attr notNil ifTrue:[^ attr bitTest: FILE_ATTRIBUTE_TEMPORARY ].
+ ^ false
+
+ "
+ self isTemporary:'.'
+ self isTemporary:'.' asUnicode16String
+ "
+!
+
isValidPath:aPathName
"return true, if 'aPathName' is a valid path name
(i.e. the file or directory exists)"
@@ -5297,73 +5263,24 @@
"return true, if the given file is writable.
For symbolic links, the pointed-to-file is checked.
- In Windows, files can possibly be created in and deleted from directories marked as
- read only. See http://support.microsoft.com/kb/326549. So we always return true
- for directories."
-
-%{
- int ret;
-
- if (__isString(aPathName)) {
-#ifdef DO_WRAP_CALLS
- char _aPathName[MAXPATHLEN];
-
- strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
- do {
- __threadErrno = 0;
- ret = STX_API_CALL1( "GetFileAttributes", GetFileAttributes, _aPathName);
- } while ((ret < 0) && (__threadErrno == EINTR));
-#else
- ret = GetFileAttributes((char *) __stringVal(aPathName));
- if (ret < 0) {
- __threadErrno = __WIN32_ERR(GetLastError());
- }
-#endif
- } else if (__isUnicode16String(aPathName)) {
- /*
- * under windows, all files are readable ...
- * so, only check for the files existence here.
- */
- wchar_t _wPathName[MAXPATHLEN+1];
- int i, l;
-
- l = __unicode16StringSize(aPathName);
- if (l > MAXPATHLEN) l = MAXPATHLEN;
- for (i=0; i<l; i++) {
- _wPathName[i] = __unicode16StringVal(aPathName)[i];
- }
- _wPathName[i] = 0;
-#ifdef DO_WRAP_CALLS
- do {
- __threadErrno = 0;
- ret = STX_API_CALL1( "GetFileAttributesW", GetFileAttributesW, _wPathName);
- } while ((ret < 0) && (__threadErrno == EINTR));
-#else
- ret = GetFileAttributesW(_wPathName);
- if (ret < 0) {
- __threadErrno = __WIN32_ERR(GetLastError());
- }
-#endif
- } else {
- goto fail;
- }
-
- if (ret < 0) {
- @global(LastErrorNumber) = __mkSmallInteger(__threadErrno);
- RETURN (false);
- }
- RETURN ( (ret & (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY) ? false : true);
-
-fail:;
-%}.
- ^ self primitiveFailed
-
- "
- self isWritable:'c:\windows'
- self isWritable:'c:\Dokumente und Einstellungen\stefan\Eigene Dateien'
- self isWritable:'.'
- self isWritable:'.' asUnicode16String
- "
+ In Windows, files can possibly be created in and deleted from directories marked as read only.
+ See http://support.microsoft.com/kb/326549.
+ So we always return true for directories."
+
+ |attr|
+
+ attr := self primGetFileAttributes:aPathName.
+ attr notNil ifTrue:[
+ ^ (attr bitAnd: (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY ))
+ ~~ FILE_ATTRIBUTE_READONLY
+ ].
+ ^ false
+
+ "
+ self isWritable:'.'
+ self isWritable:'.' asUnicode16String
+ self isWritable:'' asUnicode16String
+ "
!
linkInfoOf:aPathName
@@ -5682,6 +5599,75 @@
"
!
+primGetFileAttributes:aPathName
+ "get the file-attributes"
+
+ |errorNumber|
+
+%{
+ int ret;
+
+ if (__isString(aPathName)) {
+#ifdef DO_WRAP_CALLS
+ char _aPathName[MAXPATHLEN];
+
+ strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
+ do {
+ __threadErrno = 0;
+ ret = STX_API_CALL1( "GetFileAttributes", GetFileAttributes, _aPathName);
+ } while ((ret < 0) && (__threadErrno == EINTR));
+#else
+ ret = GetFileAttributes((char *) __stringVal(aPathName));
+ if (ret < 0) {
+ __threadErrno = __WIN32_ERR(GetLastError());
+ }
+#endif
+ if (ret >= 0) {
+ RETURN ( __mkSmallInteger(ret) );
+ }
+ __threadErrno = __WIN32_ERR(GetLastError());
+ RETURN (nil);
+ }
+
+ if (__isUnicode16String(aPathName)) {
+ wchar_t _wPathName[MAXPATHLEN+1];
+ int i, l;
+
+ l = __unicode16StringSize(aPathName);
+ if (l > MAXPATHLEN) l = MAXPATHLEN;
+ for (i=0; i<l; i++) {
+ _wPathName[i] = __unicode16StringVal(aPathName)[i];
+ }
+ _wPathName[i] = 0;
+#ifdef DO_WRAP_CALLS
+ do {
+ __threadErrno = 0;
+ ret = STX_API_CALL1( "GetFileAttributesW", GetFileAttributesW, _wPathName);
+ } while ((ret < 0) && (__threadErrno == EINTR));
+#else
+ ret = GetFileAttributesW(_wPathName);
+ if (ret < 0) {
+ __threadErrno = __WIN32_ERR(GetLastError());
+ }
+#endif
+ if (ret >= 0) {
+ RETURN ( __mkSmallInteger(ret) );
+ }
+ __threadErrno = __WIN32_ERR(GetLastError());
+ RETURN (nil);
+ }
+%}.
+ ^ self primitiveFailed
+
+ "
+ self primGetFileAttributes:'.'
+ self primGetFileAttributes:'bc.mak'
+
+ self primGetFileAttributes:'.' asUnicodeString
+ self primGetFileAttributes:'bc.mak' asUnicodeString
+ "
+!
+
primIdOf:aPathName
"the actual code to return the fileNumber (i.e. inode number) of a file."
@@ -5815,52 +5801,103 @@
"Created: / 27-07-2006 / 14:47:12 / fm"
!
-setHidden:aPathName
- "return true, if the hidden attribute could be setted to true"
+primSetFileAttributes:aPathName to:anInteger
+ "set the file-attributes; return true if the set did happen"
+
+ |errorNumber|
%{
int ret;
- if (__isString(aPathName)) {
- char _aPathName[MAXPATHLEN];
-
- strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
- ret = STX_API_CALL2( "SetFileAttributes", SetFileAttributes, _aPathName, FILE_ATTRIBUTE_HIDDEN );
-
- if (ret != 0) {
- __threadErrno = __WIN32_ERR(GetLastError());
- }
-
- RETURN (true);
+ if (__isString(aPathName)
+ && __isSmallInteger(anInteger)) {
+#ifdef DO_WRAP_CALLS
+ char _aPathName[MAXPATHLEN];
+
+ strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
+ do {
+ __threadErrno = 0;
+ ret = STX_API_CALL2( "SetFileAttributesA", SetFileAttributesA, _aPathName, __intVal(anInteger) );
+ } while ((ret < 0) && (__threadErrno == EINTR));
+#else
+ ret = SetFileAttributesA((char *) __stringVal(aPathName), __intVal(anInteger));
+ if (ret < 0) {
+ __threadErrno = __WIN32_ERR(GetLastError());
+ }
+#endif
+ if (ret >= 0) {
+ RETURN ( true );
+ }
+ __threadErrno = __WIN32_ERR(GetLastError());
+ RETURN (false);
+ }
+
+ if (__isUnicode16String(aPathName)) {
+ wchar_t _wPathName[MAXPATHLEN+1];
+ int i, l;
+
+ l = __unicode16StringSize(aPathName);
+ if (l > MAXPATHLEN) l = MAXPATHLEN;
+ for (i=0; i<l; i++) {
+ _wPathName[i] = __unicode16StringVal(aPathName)[i];
+ }
+ _wPathName[i] = 0;
+#ifdef DO_WRAP_CALLS
+ do {
+ __threadErrno = 0;
+ ret = STX_API_CALL2( "SetFileAttributesW", SetFileAttributesW, _wPathName, __intVal(anInteger) );
+ } while ((ret < 0) && (__threadErrno == EINTR));
+#else
+ ret = SetFileAttributesW(_wPathName, __intVal(anInteger));
+ if (ret < 0) {
+ __threadErrno = __WIN32_ERR(GetLastError());
+ }
+#endif
+ if (ret >= 0) {
+ RETURN ( true );
+ }
+ __threadErrno = __WIN32_ERR(GetLastError());
+ RETURN (false);
}
%}.
^ self primitiveFailed
!
+setHidden:aPathName
+ "set the hidden attribute. Return true if it is set"
+
+ |attr|
+
+ attr := self primGetFileAttributes:aPathName.
+ (attr bitTest:FILE_ATTRIBUTE_HIDDEN ) ifFalse:[
+ ^ self primSetFileAttributes:aPathName to:(attr bitOr:2).
+ ].
+ ^ true "/ aready set
+!
+
setNormal:aPathName
- "
- sets all file attributes to the normal state
-
- e.g. set the hidden attribute to false (unhidden)
- "
-
-%{
- int ret;
-
- if (__isString(aPathName)) {
- char _aPathName[MAXPATHLEN];
-
- strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
- ret = STX_API_CALL2( "SetFileAttributes", SetFileAttributes, _aPathName, FILE_ATTRIBUTE_NORMAL );
-
- if (ret != 0) {
- __threadErrno = __WIN32_ERR(GetLastError());
- }
-
- RETURN (true);
- }
-%}.
- ^ self primitiveFailed
+ " sets all file attributes to the normal state
+ e.g. set the hidden attribute to false (unhidden)"
+
+ |attr|
+
+ attr := self primGetFileAttributes:aPathName.
+ (attr bitTest:FILE_ATTRIBUTE_NORMAL ) ifFalse:[
+ ^ self primSetFileAttributes:aPathName to:(attr bitOr:2).
+ ].
+ ^ true "/ aready set
+!
+
+setTemporary:aPathName
+ " set the temporary attribute of aPathName"
+
+ |attr|
+
+ attr := self primGetFileAttributes:aPathName.
+ (attr bitTest:FILE_ATTRIBUTE_TEMPORARY ) ifFalse:[
+ ^ self primSetFileAttributes:aPathName to:(attr bitOr:2).
+ ].
+ ^ true "/ aready set
!
timeOfLastAccess:aPathName
@@ -16262,14 +16299,15 @@
!Win32OperatingSystem class methodsFor:'documentation'!
version
- ^ '$Id: Win32OperatingSystem.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: Win32OperatingSystem.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.378 2009/10/06 08:31:04 cg Exp §'
+ ^ '$Id: Win32OperatingSystem.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
Win32OperatingSystem initialize!
Win32OperatingSystem::PerformanceData initialize!
Win32OperatingSystem::RegistryEntry initialize!
+
--- a/WriteStream.st Mon Oct 26 21:51:17 2009 +0000
+++ b/WriteStream.st Thu Nov 05 14:41:30 2009 +0000
@@ -622,10 +622,11 @@
!WriteStream class methodsFor:'documentation'!
version
- ^ '$Id: WriteStream.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: WriteStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/WriteStream.st,v 1.71 2009/10/05 09:19:55 cg Exp §'
+ ^ '$Id: WriteStream.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+
--- a/abbrev.stc Mon Oct 26 21:51:17 2009 +0000
+++ b/abbrev.stc Thu Nov 05 14:41:30 2009 +0000
@@ -1,8 +1,6 @@
Autoload Autoload stx:libbasic 'Kernel-Classes' 0
-CmdLineParserTest CmdLineParserTest stx:libbasic 'System-Support-Command line' 2
Object Object stx:libbasic 'Kernel-Objects' 0
ProtoObject ProtoObject stx:libbasic 'Kernel-Objects' 0
-AbstractDesktop AbstractDesktop stx:libbasic 'System-Desktop' 0
AbstractOperatingSystem AbstractOperatingSystem stx:libbasic 'System-Support' 0
AbstractSourceFileReader AbstractSourceFileReader stx:libbasic 'Kernel-Classes' 0
BadRomanNumberFormatError BadRomanNumberFormatError stx:libbasic 'Magnitude-Numbers' 1
@@ -62,8 +60,6 @@
CharacterEncoderImplementations::NEXT CharacterEncoderImplementations__NEXT stx:libbasic '* as yet unknown category *' 0
ClassBuilder ClassBuilder stx:libbasic 'Kernel-Support' 0
ClassCategoryReader ClassCategoryReader stx:libbasic 'Kernel-Support' 0
-CmdLineOption CmdLineOption stx:libbasic 'System-Support-Command line' 0
-CmdLineParser CmdLineParser stx:libbasic 'System-Support-Command line' 0
Collection Collection stx:libbasic 'Collections-Abstract' 0
Context Context stx:libbasic 'Kernel-Methods' 0
Continuation Continuation stx:libbasic 'Kernel-Processes' 0
@@ -72,7 +68,7 @@
ExternalAddress ExternalAddress stx:libbasic 'System-Support' 0
FileDirectory FileDirectory stx:libbasic 'Obsolete' 0
Filename Filename stx:libbasic 'System-Support' 0
-GenericException GenericException stx:libbasic 'Kernel-Exceptions' 0
+GenericException GenericException stx:libbasic 'Kernel-Exceptions' 1
Geometric Geometric stx:libbasic 'Graphics-Geometry-Objects' 0
ImaginaryResultError ImaginaryResultError stx:libbasic 'Kernel-Exceptions-Errors' 1
Infinity Infinity stx:libbasic 'Magnitude-Numbers' 0
@@ -84,15 +80,14 @@
Magnitude Magnitude stx:libbasic 'Magnitude-General' 0
MappedExternalBytes MappedExternalBytes stx:libbasic 'System-Support' 0
Message Message stx:libbasic 'Kernel-Methods' 0
-MethodOverridesTest MethodOverridesTest stx:libbasic 'Kernel-Tests' 2
MetaNumber MetaNumber stx:libbasic 'Magnitude-Numbers' 0
MiniDebugger MiniDebugger stx:libbasic 'System-Debugging-Support' 0
MiniInspector MiniInspector stx:libbasic 'System-Debugging-Support' 0
NaiveRomanNumberFormatNotification NaiveRomanNumberFormatNotification stx:libbasic 'Magnitude-Numbers' 1
NameSpace NameSpace stx:libbasic 'Kernel-Classes' 0
NotANumber NotANumber stx:libbasic 'Magnitude-Numbers' 0
-NumberConversionError NumberConversionError stx:libbasic 'Magnitude-Numbers' 0
-NumberFormatError NumberFormatError stx:libbasic 'Magnitude-Numbers' 0
+NumberConversionError NumberConversionError stx:libbasic 'Magnitude-Numbers' 1
+NumberFormatError NumberFormatError stx:libbasic 'Magnitude-Numbers' 1
OSErrorHolder OSErrorHolder stx:libbasic 'OS-Support' 0
ObjectMemory ObjectMemory stx:libbasic 'System-Support' 0
OpenVMSFileHandle OpenVMSFileHandle stx:libbasic 'OS-OpenVMS' 0
@@ -101,34 +96,34 @@
PackageId PackageId stx:libbasic 'System-Support-Projects' 0
PluginSupport PluginSupport stx:libbasic 'System-Support' 0
ProcessorScheduler ProcessorScheduler stx:libbasic 'Kernel-Processes' 0
-ProgrammingLanguage ProgrammingLanguage stx:libbasic 'Kernel-Languages' 0
+ProgrammingLanguage ProgrammingLanguage stx:libbasic 'Kernel-Languages' 1
Project Project stx:libbasic 'System-Support' 0
-ProjectDefinition ProjectDefinition stx:libbasic 'System-Support-Projects' 0
+ProjectDefinition ProjectDefinition stx:libbasic 'System-Support-Projects' 3
QualifiedName QualifiedName stx:libbasic 'Kernel-Support' 0
ReadEvalPrintLoop ReadEvalPrintLoop stx:libbasic 'System-Support' 0
RecursionLock RecursionLock stx:libbasic 'Kernel-Processes' 0
Registry Registry stx:libbasic 'System-Support' 0
-RomanNumberFormatError RomanNumberFormatError stx:libbasic 'Magnitude-Numbers' 0
+RomanNumberFormatError RomanNumberFormatError stx:libbasic 'Magnitude-Numbers' 1
Semaphore Semaphore stx:libbasic 'Kernel-Processes' 0
SharedPool SharedPool stx:libbasic 'Kernel-Classes' 0
Signal Signal stx:libbasic 'Kernel-Exceptions' 0
Smalltalk Smalltalk stx:libbasic 'System-Support' 0
SomeNumber SomeNumber stx:libbasic 'Magnitude-Numbers' 0
-StandaloneStartup StandaloneStartup stx:libbasic 'System-Support' 0
+StandaloneStartup StandaloneStartup stx:libbasic 'System-Support' 1
Stream Stream stx:libbasic 'Streams' 0
SystemNotification SystemNotification stx:libbasic 'Kernel-Exceptions-Notifications' 1
TextCollectorStream TextCollectorStream stx:libbasic 'Streams-Misc' 0
UnboundedExternalStream UnboundedExternalStream stx:libbasic 'Streams-External' 0
UndefinedObject UndefinedObject stx:libbasic 'Kernel-Objects' 0
-UnixFileDescriptorHandle UnixFileDescriptorHandle stx:libbasic 'unknownCategory' 0
-UnixFileHandle UnixFileHandle stx:libbasic 'unknownCategory' 0
-UnixOperatingSystem UnixOperatingSystem stx:libbasic 'unknownCategory' 0
+UnixFileDescriptorHandle UnixFileDescriptorHandle stx:libbasic 'OS-Unix' 0
+UnixFileHandle UnixFileHandle stx:libbasic 'OS-Unix' 0
+UnixOperatingSystem UnixOperatingSystem stx:libbasic 'OS-Unix' 0
UserMessage UserMessage stx:libbasic 'Interface-Internationalization' 0
Visitor Visitor stx:libbasic 'System-Visiting' 0
WeakValueIdentityDictionary WeakValueIdentityDictionary stx:libbasic 'Collections-Weak' 0
Win32Process Win32Process stx:libbasic 'OS-Windows' 0
AbstractTime AbstractTime stx:libbasic 'Magnitude-Time' 0
-ApplicationDefinition ApplicationDefinition stx:libbasic 'System-Support-Projects' 0
+ApplicationDefinition ApplicationDefinition stx:libbasic 'System-Support-Projects' 3
ArithmeticValue ArithmeticValue stx:libbasic 'Magnitude-Numbers' 0
AspectVisitor AspectVisitor stx:libbasic 'System-Visiting' 0
AutoDeletedFilename AutoDeletedFilename stx:libbasic 'System-Support' 0
@@ -140,20 +135,20 @@
CharacterEncoderImplementations::SingleByteEncoder CharacterEncoderImplementations__SingleByteEncoder stx:libbasic 'Collections-Text-Encodings' 0
CharacterEncoderImplementations::TwoByteEncoder CharacterEncoderImplementations__TwoByteEncoder stx:libbasic 'Collections-Text-Encodings' 0
CompiledCode CompiledCode stx:libbasic 'Kernel-Methods' 0
-ControlInterrupt ControlInterrupt stx:libbasic 'Kernel-Exceptions-Control' 0
+ControlInterrupt ControlInterrupt stx:libbasic 'Kernel-Exceptions-Control' 1
Date Date stx:libbasic 'Magnitude-Time' 0
-Exception Exception stx:libbasic 'Kernel-Exceptions' 0
+Exception Exception stx:libbasic 'Kernel-Exceptions' 1
ExternalFunction ExternalFunction stx:libbasic 'System-Support' 0
False False stx:libbasic 'Kernel-Objects' 0
HandleRegistry HandleRegistry stx:libbasic 'System-Support' 0
HashStream HashStream stx:libbasic 'System-Crypt-Streams' 0
InlineObjectPrototype InlineObjectPrototype stx:libbasic 'Programming-Support' 0
KeyedCollection KeyedCollection stx:libbasic 'Collections-Abstract' 0
-LibraryDefinition LibraryDefinition stx:libbasic 'System-Support-Projects' 0
+LibraryDefinition LibraryDefinition stx:libbasic 'System-Support-Projects' 3
LookupKey LookupKey stx:libbasic 'Collections-Support' 0
MessageSend MessageSend stx:libbasic 'Kernel-Methods' 0
-NoHandlerError NoHandlerError stx:libbasic 'Kernel-Exceptions-Errors' 0
-Notification Notification stx:libbasic 'Kernel-Exceptions' 0
+NoHandlerError NoHandlerError stx:libbasic 'Kernel-Exceptions-Errors' 1
+Notification Notification stx:libbasic 'Kernel-Exceptions' 1
OSHandle OSHandle stx:libbasic 'Compatibility-ST80' 0
PCFilename PCFilename stx:libbasic 'OS-Windows' 0
PeekableStream PeekableStream stx:libbasic 'Streams' 0
@@ -163,15 +158,12 @@
SequenceableCollection SequenceableCollection stx:libbasic 'Collections-Abstract' 0
Set Set stx:libbasic 'Collections-Unordered' 0
SmalltalkChunkFileSourceReader SmalltalkChunkFileSourceReader stx:libbasic 'Kernel-Classes' 0
-SmalltalkLanguage SmalltalkLanguage stx:libbasic 'Kernel-Languages' 0
-SmalltalkDesktop SmalltalkDesktop stx:libbasic 'System-Desktop' 0
+SmalltalkLanguage SmalltalkLanguage stx:libbasic 'Kernel-Languages' 1
True True stx:libbasic 'Kernel-Objects' 0
-UnixDesktop UnixDesktop stx:libbasic 'System-Desktop' 0
UnixFilename UnixFilename stx:libbasic 'OS-Unix' 0
-UserNotification UserNotification stx:libbasic 'Kernel-Exceptions-Notifications' 0
+UserNotification UserNotification stx:libbasic 'Kernel-Exceptions-Notifications' 1
WeakInterestConverter WeakInterestConverter stx:libbasic 'Interface-Support-Models' 0
-ActivityNotification ActivityNotification stx:libbasic 'Kernel-Exceptions-Notifications' 0
-WindowsDesktop WindowsDesktop stx:libbasic 'System-Desktop' 0
+ActivityNotification ActivityNotification stx:libbasic 'Kernel-Exceptions-Notifications' 1
ArrayedCollection ArrayedCollection stx:libbasic 'Collections-Abstract' 0
Association Association stx:libbasic 'Collections-Support' 0
Block Block stx:libbasic 'Kernel-Methods' 0
@@ -188,14 +180,14 @@
CharacterEncoderImplementations::MS_Cyrillic CharacterEncoderImplementations__MS_Cyrillic stx:libbasic 'Collections-Text-Encodings' 0
CharacterEncoderImplementations::MS_Greek CharacterEncoderImplementations__MS_Greek stx:libbasic 'Collections-Text-Encodings' 0
ClassDescription ClassDescription stx:libbasic 'Kernel-Classes' 0
-ControlRequest ControlRequest stx:libbasic 'Kernel-Exceptions-Control' 0
+ControlRequest ControlRequest stx:libbasic 'Kernel-Exceptions-Control' 1
Dictionary Dictionary stx:libbasic 'Collections-Unordered' 0
EncodedStream EncodedStream stx:libbasic 'Collections-Text-Encodings' 0
-EndOfStreamNotification EndOfStreamNotification stx:libbasic 'Kernel-Exceptions-Errors' 0
-Error Error stx:libbasic 'Kernel-Exceptions-Errors' 0
+EndOfStreamNotification EndOfStreamNotification stx:libbasic 'Kernel-Exceptions-Errors' 1
+Error Error stx:libbasic 'Kernel-Exceptions-Errors' 1
ExternalFunctionCallback ExternalFunctionCallback stx:libbasic 'System-Support' 0
ExternalLibraryFunction ExternalLibraryFunction stx:libbasic 'System-Support' 0
-HaltInterrupt HaltInterrupt stx:libbasic 'Kernel-Exceptions-Control' 0
+HaltInterrupt HaltInterrupt stx:libbasic 'Kernel-Exceptions-Control' 1
IdentitySet IdentitySet stx:libbasic 'Collections-Unordered' 0
LinkedList LinkedList stx:libbasic 'Collections-Linked' 0
MD5Stream MD5Stream stx:libbasic 'System-Crypt-Streams' 0
@@ -207,33 +199,32 @@
OrderedCollection OrderedCollection stx:libbasic 'Collections-Sequenceable' 0
Point Point stx:libbasic 'Graphics-Geometry' 0
PositionableStream PositionableStream stx:libbasic 'Streams' 0
-Query Query stx:libbasic 'Kernel-Exceptions' 0
+Query Query stx:libbasic 'Kernel-Exceptions' 1
ReadOnlySequenceableCollection ReadOnlySequenceableCollection stx:libbasic 'Collections-Abstract' 0
-RecursiveStoreError RecursiveStoreError stx:libbasic 'Kernel-Exceptions' 0
+RecursiveStoreError RecursiveStoreError stx:libbasic 'Kernel-Exceptions' 1
SHA1Stream SHA1Stream stx:libbasic 'System-Crypt-Streams' 0
Time Time stx:libbasic 'Magnitude-Time' 0
Timestamp Timestamp stx:libbasic 'Magnitude-Time' 0
-UserConfirmation UserConfirmation stx:libbasic 'Kernel-Exceptions-Notifications' 0
-UserInformation UserInformation stx:libbasic 'Kernel-Exceptions-Notifications' 0
-UserInterrupt UserInterrupt stx:libbasic 'Kernel-Exceptions-Control' 0
-Warning Warning stx:libbasic 'Kernel-Exceptions' 0
+UserConfirmation UserConfirmation stx:libbasic 'Kernel-Exceptions-Notifications' 1
+UserInformation UserInformation stx:libbasic 'Kernel-Exceptions-Notifications' 1
+UserInterrupt UserInterrupt stx:libbasic 'Kernel-Exceptions-Control' 1
+Warning Warning stx:libbasic 'Kernel-Exceptions' 1
Win32Handle Win32Handle stx:libbasic 'OS-Windows' 0
XDGDesktop XDGDesktop stx:libbasic 'System-Desktop' 0
-YesToAllConfirmation YesToAllConfirmation stx:libbasic 'Kernel-Exceptions-Notifications' 0
-stx_libbasic stx_libbasic stx:libbasic '* Projects & Packages *' 0
-AbortAllOperationRequest AbortAllOperationRequest stx:libbasic 'Kernel-Exceptions-Control' 0
+YesToAllConfirmation YesToAllConfirmation stx:libbasic 'Kernel-Exceptions-Notifications' 1
+stx_libbasic stx_libbasic stx:libbasic '* Projects & Packages *' 3
+AbortAllOperationRequest AbortAllOperationRequest stx:libbasic 'Kernel-Exceptions-Control' 1
AbstractSourceFileWriter AbstractSourceFileWriter stx:libbasic 'Kernel-Classes' 0
Array Array stx:libbasic 'Collections-Arrayed' 0
-BreakPointInterrupt BreakPointInterrupt stx:libbasic 'Kernel-Exceptions-Control' 0
+BreakPointInterrupt BreakPointInterrupt stx:libbasic 'Kernel-Exceptions-Control' 1
CheapBlock CheapBlock stx:libbasic 'Kernel-Methods' 0
Class Class stx:libbasic 'Kernel-Classes' 0
CmdLineOptionError CmdLineOptionError stx:libbasic 'System-Support-Command line' 1
-ClassBuildError ClassBuildError stx:libbasic 'Kernel-Support' 0
+ClassBuildError ClassBuildError stx:libbasic 'Kernel-Support' 1
DoubleArray DoubleArray stx:libbasic 'Collections-Arrayed' 0
-ElementBoundsError ElementBoundsError stx:libbasic 'Kernel-Exceptions-Errors' 0
+ElementBoundsError ElementBoundsError stx:libbasic 'Kernel-Exceptions-Errors' 1
FloatArray FloatArray stx:libbasic 'Collections-Arrayed' 0
Fraction Fraction stx:libbasic 'Magnitude-Numbers' 0
-GNOMEDesktop GNOMEDesktop stx:libbasic 'System-Desktop' 0
IdentityDictionary IdentityDictionary stx:libbasic 'Collections-Unordered' 0
InlineObjectClassDescription InlineObjectClassDescription stx:libbasic 'Programming-Support' 0
Integer Integer stx:libbasic 'Magnitude-Numbers' 0
@@ -241,125 +232,126 @@
LimitedPrecisionReal LimitedPrecisionReal stx:libbasic 'Magnitude-Numbers' 0
MeasurementValue MeasurementValue stx:libbasic 'Magnitude-Numbers' 0
Metaclass Metaclass stx:libbasic 'Kernel-Classes' 0
-OsError OsError stx:libbasic 'OS-Support' 0
-ProceedError ProceedError stx:libbasic 'Kernel-Exceptions-Errors' 0
-ProceedableError ProceedableError stx:libbasic 'Kernel-Exceptions-Errors' 0
-QueryWithoutDefault QueryWithoutDefault stx:libbasic 'Kernel-Exceptions' 0
+OsError OsError stx:libbasic 'OS-Support' 1
+ProceedError ProceedError stx:libbasic 'Kernel-Exceptions-Errors' 1
+ProceedableError ProceedableError stx:libbasic 'Kernel-Exceptions-Errors' 1
+QueryWithoutDefault QueryWithoutDefault stx:libbasic 'Kernel-Exceptions' 1
ReadStream ReadStream stx:libbasic 'Streams' 0
-RecursionError RecursionError stx:libbasic 'Kernel-Exceptions-Errors' 0
-RecursiveExceptionError RecursiveExceptionError stx:libbasic 'Kernel-Exceptions-Errors' 0
-RestartProcessRequest RestartProcessRequest stx:libbasic 'Kernel-Exceptions-Control' 0
+RecursionError RecursionError stx:libbasic 'Kernel-Exceptions-Errors' 1
+RecursiveExceptionError RecursiveExceptionError stx:libbasic 'Kernel-Exceptions-Errors' 1
+RestartProcessRequest RestartProcessRequest stx:libbasic 'Kernel-Exceptions-Control' 1
SemaphoreSet SemaphoreSet stx:libbasic 'Kernel-Processes' 0
SignalSet SignalSet stx:libbasic 'Kernel-Exceptions' 0
-SnapshotError SnapshotError stx:libbasic 'System-Support' 0
+SnapshotError SnapshotError stx:libbasic 'System-Support' 1
SortedCollection SortedCollection stx:libbasic 'Collections-Sequenceable' 0
StringCollection StringCollection stx:libbasic 'Collections-Text' 0
-TerminateProcessRequest TerminateProcessRequest stx:libbasic 'Kernel-Exceptions-Control' 0
+TerminateProcessRequest TerminateProcessRequest stx:libbasic 'Kernel-Exceptions-Control' 1
UninterpretedBytes UninterpretedBytes stx:libbasic 'Collections-Abstract' 0
-VMInternalError VMInternalError stx:libbasic 'Kernel-Exceptions-Errors' 0
+VMInternalError VMInternalError stx:libbasic 'Kernel-Exceptions-Errors' 1
VarArgBlock VarArgBlock stx:libbasic 'Kernel-Methods' 0
WeakArray WeakArray stx:libbasic 'Collections-Weak' 0
WeakIdentitySet WeakIdentitySet stx:libbasic 'Collections-Weak' 0
WeakValueDictionary WeakValueDictionary stx:libbasic 'Collections-Weak' 0
Win32FILEHandle Win32FILEHandle stx:libbasic 'OS-Windows' 0
WriteStream WriteStream stx:libbasic 'Streams' 0
-AbortOperationRequest AbortOperationRequest stx:libbasic 'Kernel-Exceptions-Control' 0
-AllocationFailure AllocationFailure stx:libbasic 'System-Support' 0
-ArithmeticError ArithmeticError stx:libbasic 'Kernel-Exceptions-Errors' 0
-AssertionFailedError AssertionFailedError stx:libbasic 'Kernel-Exceptions-Errors' 0
+AbortOperationRequest AbortOperationRequest stx:libbasic 'Kernel-Exceptions-Control' 1
+AllocationFailure AllocationFailure stx:libbasic 'System-Support' 1
+ArithmeticError ArithmeticError stx:libbasic 'Kernel-Exceptions-Errors' 1
+AssertionFailedError AssertionFailedError stx:libbasic 'Kernel-Exceptions-Errors' 1
AutoloadMetaclass AutoloadMetaclass stx:libbasic 'Kernel-Classes' 0
ByteArray ByteArray stx:libbasic 'Collections-Arrayed' 0
CharacterWriteStream CharacterWriteStream stx:libbasic 'Streams' 0
-ContextError ContextError stx:libbasic 'Kernel-Methods' 0
-ConversionError ConversionError stx:libbasic 'Kernel-Exceptions-Errors' 0
-DeepCopyError DeepCopyError stx:libbasic 'Kernel-Methods' 0
+ContextError ContextError stx:libbasic 'Kernel-Methods' 1
+ConversionError ConversionError stx:libbasic 'Kernel-Exceptions-Errors' 1
+DeepCopyError DeepCopyError stx:libbasic 'Kernel-Methods' 1
ExceptionHandlerSet ExceptionHandlerSet stx:libbasic 'Kernel-Exceptions' 0
-ExecutionError ExecutionError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
+ExecutionError ExecutionError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
ExternalBytes ExternalBytes stx:libbasic 'System-Support' 0
FixedPoint FixedPoint stx:libbasic 'Magnitude-Numbers' 0
Float Float stx:libbasic 'Magnitude-Numbers' 0
GetOpt GetOpt stx:libbasic 'System-Support' 0
LargeInteger LargeInteger stx:libbasic 'Magnitude-Numbers' 0
LongFloat LongFloat stx:libbasic 'Magnitude-Numbers' 0
-MessageNotUnderstood MessageNotUnderstood stx:libbasic 'Kernel-Exceptions-Errors' 0
-NotFoundError NotFoundError stx:libbasic 'Kernel-Exceptions-Errors' 0
-OSSignalInterrupt OSSignalInterrupt stx:libbasic 'Kernel-Exceptions-Control' 0
-OsIllegalOperation OsIllegalOperation stx:libbasic 'OS-Support' 0
-OsInaccessibleError OsInaccessibleError stx:libbasic 'OS-Support' 0
-OsInvalidArgumentsError OsInvalidArgumentsError stx:libbasic 'OS-Support' 0
-OsNeedRetryError OsNeedRetryError stx:libbasic 'OS-Support' 0
-OsNoResourcesError OsNoResourcesError stx:libbasic 'OS-Support' 0
-OsNotification OsNotification stx:libbasic 'OS-Support' 0
-OsTransferFaultError OsTransferFaultError stx:libbasic 'OS-Support' 0
+MessageNotUnderstood MessageNotUnderstood stx:libbasic 'Kernel-Exceptions-Errors' 1
+NotFoundError NotFoundError stx:libbasic 'Kernel-Exceptions-Errors' 1
+OSSignalInterrupt OSSignalInterrupt stx:libbasic 'Kernel-Exceptions-Control' 1
+OsIllegalOperation OsIllegalOperation stx:libbasic 'OS-Support' 1
+OsInaccessibleError OsInaccessibleError stx:libbasic 'OS-Support' 1
+OsInvalidArgumentsError OsInvalidArgumentsError stx:libbasic 'OS-Support' 1
+OsNeedRetryError OsNeedRetryError stx:libbasic 'OS-Support' 1
+OsNoResourcesError OsNoResourcesError stx:libbasic 'OS-Support' 1
+OsNotification OsNotification stx:libbasic 'OS-Support' 1
+OsTransferFaultError OsTransferFaultError stx:libbasic 'OS-Support' 1
PrivateMetaclass PrivateMetaclass stx:libbasic 'Kernel-Classes' 0
ReadWriteStream ReadWriteStream stx:libbasic 'Streams' 0
ShortFloat ShortFloat stx:libbasic 'Magnitude-Numbers' 0
-SignalError SignalError stx:libbasic 'Kernel-Exceptions-Errors' 0
+SignalError SignalError stx:libbasic 'Kernel-Exceptions-Errors' 1
SmallInteger SmallInteger stx:libbasic 'Magnitude-Numbers' 0
SmalltalkChunkFileSourceWriter SmalltalkChunkFileSourceWriter stx:libbasic 'Kernel-Classes' 0
-StreamError StreamError stx:libbasic 'Kernel-Exceptions-Errors' 0
-SubclassResponsibilityError SubclassResponsibilityError stx:libbasic 'Kernel-Exceptions-Errors' 0
-TimeoutError TimeoutError stx:libbasic 'Kernel-Exceptions-Errors' 0
-UnimplementedFunctionalityError UnimplementedFunctionalityError stx:libbasic 'Kernel-Exceptions-Errors' 0
+StreamError StreamError stx:libbasic 'Kernel-Exceptions-Errors' 1
+SubclassResponsibilityError SubclassResponsibilityError stx:libbasic 'Kernel-Exceptions-Errors' 1
+TimeoutError TimeoutError stx:libbasic 'Kernel-Exceptions-Errors' 1
+UnimplementedFunctionalityError UnimplementedFunctionalityError stx:libbasic 'Kernel-Exceptions-Errors' 1
UserPreferences UserPreferences stx:libbasic 'System-Support' 0
VarArgCheapBlock VarArgCheapBlock stx:libbasic 'Kernel-Methods' 0
WeakIdentityDictionary WeakIdentityDictionary stx:libbasic 'Collections-Weak' 0
-ArgumentError ArgumentError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
-CannotResumeError CannotResumeError stx:libbasic 'Kernel-Methods' 0
-CannotReturnError CannotReturnError stx:libbasic 'Kernel-Methods' 0
+ArgumentError ArgumentError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+CannotResumeError CannotResumeError stx:libbasic 'Kernel-Methods' 1
+CannotReturnError CannotReturnError stx:libbasic 'Kernel-Methods' 1
CharacterArray CharacterArray stx:libbasic 'Collections-Text' 0
-CharacterEncoderError CharacterEncoderError stx:libbasic 'Collections-Text-Encodings' 0
-DateConversionError DateConversionError stx:libbasic 'Magnitude-Time' 0
-DomainError DomainError stx:libbasic 'Kernel-Exceptions-Errors' 0
-EndOfStreamError EndOfStreamError stx:libbasic 'Kernel-Exceptions-Errors' 0
+CharacterEncoderError CharacterEncoderError stx:libbasic 'Collections-Text-Encodings' 1
+DateConversionError DateConversionError stx:libbasic 'Magnitude-Time' 1
+DomainError DomainError stx:libbasic 'Kernel-Exceptions-Errors' 1
+EndOfStreamError EndOfStreamError stx:libbasic 'Kernel-Exceptions-Errors' 1
ExternalStream ExternalStream stx:libbasic 'Streams-External' 0
-ExternalStructure ExternalStructure stx:libbasic 'System-Support' 0
-IncompleteNextCountError IncompleteNextCountError stx:libbasic 'Kernel-Exceptions-Errors' 0
-IndexNotFoundError IndexNotFoundError stx:libbasic 'Kernel-Exceptions-Errors' 0
-InvalidCodeError InvalidCodeError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
-InvalidModeError InvalidModeError stx:libbasic 'Kernel-Exceptions-Errors' 0
-InvalidOperationError InvalidOperationError stx:libbasic 'Kernel-Exceptions-Errors' 0
-KeyNotFoundError KeyNotFoundError stx:libbasic 'Kernel-Exceptions-Errors' 0
-MallocFailure MallocFailure stx:libbasic 'System-Support' 0
-NonBooleanReceiverError NonBooleanReceiverError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
-OpenError OpenError stx:libbasic 'Kernel-Exceptions-Errors' 0
-PositionError PositionError stx:libbasic 'Kernel-Exceptions-Errors' 0
-PositionOutOfBoundsError PositionOutOfBoundsError stx:libbasic 'Kernel-Exceptions-Errors' 0
-PrimitiveFailure PrimitiveFailure stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
-RangeError RangeError stx:libbasic 'Kernel-Exceptions-Errors' 0
-ReadError ReadError stx:libbasic 'Kernel-Exceptions-Errors' 0
-StreamIOError StreamIOError stx:libbasic 'Kernel-Exceptions-Errors' 0
-StreamNotOpenError StreamNotOpenError stx:libbasic 'Kernel-Exceptions-Errors' 0
-TimeConversionError TimeConversionError stx:libbasic 'Magnitude-Time' 0
-UnorderedNumbersError UnorderedNumbersError stx:libbasic 'Kernel-Exceptions-Errors' 0
+ExternalStructure ExternalStructure stx:libbasic 'System-Support' 1
+IncompleteNextCountError IncompleteNextCountError stx:libbasic 'Kernel-Exceptions-Errors' 1
+IndexNotFoundError IndexNotFoundError stx:libbasic 'Kernel-Exceptions-Errors' 1
+InvalidCodeError InvalidCodeError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+InvalidModeError InvalidModeError stx:libbasic 'Kernel-Exceptions-Errors' 1
+InvalidOperationError InvalidOperationError stx:libbasic 'Kernel-Exceptions-Errors' 1
+KeyNotFoundError KeyNotFoundError stx:libbasic 'Kernel-Exceptions-Errors' 1
+MallocFailure MallocFailure stx:libbasic 'System-Support' 1
+NonBooleanReceiverError NonBooleanReceiverError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+OpenError OpenError stx:libbasic 'Kernel-Exceptions-Errors' 1
+PositionError PositionError stx:libbasic 'Kernel-Exceptions-Errors' 1
+PositionOutOfBoundsError PositionOutOfBoundsError stx:libbasic 'Kernel-Exceptions-Errors' 1
+PrimitiveFailure PrimitiveFailure stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+RangeError RangeError stx:libbasic 'Kernel-Exceptions-Errors' 1
+ReadError ReadError stx:libbasic 'Kernel-Exceptions-Errors' 1
+StreamIOError StreamIOError stx:libbasic 'Kernel-Exceptions-Errors' 1
+StreamNotOpenError StreamNotOpenError stx:libbasic 'Kernel-Exceptions-Errors' 1
+TimeConversionError TimeConversionError stx:libbasic 'Magnitude-Time' 1
+UnorderedNumbersError UnorderedNumbersError stx:libbasic 'Kernel-Exceptions-Errors' 1
UnprotectedExternalBytes UnprotectedExternalBytes stx:libbasic 'System-Support' 0
WeakDependencyDictionary WeakDependencyDictionary stx:libbasic 'Collections-Weak' 0
Win32OperatingSystem Win32OperatingSystem stx:libbasic 'OS-Windows' 0
-WriteError WriteError stx:libbasic 'Kernel-Exceptions-Errors' 0
-WrongProceedabilityError WrongProceedabilityError stx:libbasic 'Kernel-Exceptions-Errors' 0
-BadLiteralsError BadLiteralsError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
-DecodingError DecodingError stx:libbasic 'Collections-Text-Encodings' 0
-EncodingError EncodingError stx:libbasic 'Collections-Text-Encodings' 0
+WriteError WriteError stx:libbasic 'Kernel-Exceptions-Errors' 1
+WrongProceedabilityError WrongProceedabilityError stx:libbasic 'Kernel-Exceptions-Errors' 1
+BadLiteralsError BadLiteralsError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+DecodingError DecodingError stx:libbasic 'Collections-Text-Encodings' 1
+EncodingError EncodingError stx:libbasic 'Collections-Text-Encodings' 1
FileStream FileStream stx:libbasic 'Streams-External' 0
-InvalidByteCodeError InvalidByteCodeError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
-InvalidInstructionError InvalidInstructionError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
-InvalidReadError InvalidReadError stx:libbasic 'Kernel-Exceptions-Errors' 0
-InvalidWriteError InvalidWriteError stx:libbasic 'Kernel-Exceptions-Errors' 0
-NoByteCodeError NoByteCodeError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
-NonIntegerIndexError NonIntegerIndexError stx:libbasic 'Kernel-Exceptions-Errors' 0
+InvalidByteCodeError InvalidByteCodeError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+InvalidInstructionError InvalidInstructionError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+InvalidReadError InvalidReadError stx:libbasic 'Kernel-Exceptions-Errors' 1
+InvalidWriteError InvalidWriteError stx:libbasic 'Kernel-Exceptions-Errors' 1
+NoByteCodeError NoByteCodeError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+NonIntegerIndexError NonIntegerIndexError stx:libbasic 'Kernel-Exceptions-Errors' 1
NonPositionableExternalStream NonPositionableExternalStream stx:libbasic 'Streams-External' 0
-OverflowError OverflowError stx:libbasic 'Kernel-Exceptions-Errors' 0
+OverflowError OverflowError stx:libbasic 'Kernel-Exceptions-Errors' 1
String String stx:libbasic 'Collections-Text' 0
-SubscriptOutOfBoundsError SubscriptOutOfBoundsError stx:libbasic 'Kernel-Exceptions-Errors' 0
+SubscriptOutOfBoundsError SubscriptOutOfBoundsError stx:libbasic 'Kernel-Exceptions-Errors' 1
TwoByteString TwoByteString stx:libbasic 'Collections-Text' 0
-UnderflowError UnderflowError stx:libbasic 'Kernel-Exceptions-Errors' 0
-WrongNumberOfArgumentsError WrongNumberOfArgumentsError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 0
-ZeroDivide ZeroDivide stx:libbasic 'Kernel-Exceptions-Errors' 0
-CharacterRangeError CharacterRangeError stx:libbasic 'Collections-Text-Encodings' 0
+UnderflowError UnderflowError stx:libbasic 'Kernel-Exceptions-Errors' 1
+WrongNumberOfArgumentsError WrongNumberOfArgumentsError stx:libbasic 'Kernel-Exceptions-ExecutionErrors' 1
+ZeroDivide ZeroDivide stx:libbasic 'Kernel-Exceptions-Errors' 1
+CharacterRangeError CharacterRangeError stx:libbasic 'Collections-Text-Encodings' 1
DirectoryStream DirectoryStream stx:libbasic 'Streams-External' 0
-InvalidEncodingError InvalidEncodingError stx:libbasic 'Collections-Text-Encodings' 0
+InvalidEncodingError InvalidEncodingError stx:libbasic 'Collections-Text-Encodings' 1
PipeStream PipeStream stx:libbasic 'Streams-External' 0
Symbol Symbol stx:libbasic 'Collections-Text' 0
Unicode16String Unicode16String stx:libbasic 'Collections-Text' 0
SystemChangeNotifier SystemChangeNotifier stx:libbasic 'Kernel-Classes' 0
+Win32Constants Win32Constants stx:libbasic 'OS-Windows' 0
--- a/bc.mak Mon Oct 26 21:51:17 2009 +0000
+++ b/bc.mak Thu Nov 05 14:41:30 2009 +0000
@@ -1,4 +1,4 @@
-# $Header: /cvs/stx/stx/libbasic/bc.mak,v 1.156 2009/10/12 19:32:45 cg Exp $
+# $Header: /cvs/stx/stx/libbasic/bc.mak,v 1.158 2009/10/30 14:39:42 cg Exp $
#
# DO NOT EDIT
# automagically generated from the projectDefinition: stx_libbasic.
@@ -138,9 +138,7 @@
$(OUTDIR)SmalltalkLanguage.$(O) SmalltalkLanguage.$(H): SmalltalkLanguage.st $(INCLUDE_TOP)\stx\libbasic\ProgrammingLanguage.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)True.$(O) True.$(H): True.st $(INCLUDE_TOP)\stx\libbasic\Boolean.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)UnixFilename.$(O) UnixFilename.$(H): UnixFilename.st $(INCLUDE_TOP)\stx\libbasic\Filename.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)UserNotification.$(O) UserNotification.$(H): UserNotification.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)WeakInterestConverter.$(O) WeakInterestConverter.$(H): WeakInterestConverter.st $(INCLUDE_TOP)\stx\libbasic\InterestConverter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ActivityNotification.$(O) ActivityNotification.$(H): ActivityNotification.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)ArrayedCollection.$(O) ArrayedCollection.$(H): ArrayedCollection.st $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)Association.$(O) Association.$(H): Association.st $(INCLUDE_TOP)\stx\libbasic\LookupKey.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)Block.$(O) Block.$(H): Block.st $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -179,14 +177,13 @@
$(OUTDIR)SHA1Stream.$(O) SHA1Stream.$(H): SHA1Stream.st $(INCLUDE_TOP)\stx\libbasic\HashStream.$(H) $(INCLUDE_TOP)\stx\libbasic\Stream.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)Time.$(O) Time.$(H): Time.st $(INCLUDE_TOP)\stx\libbasic\AbstractTime.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)Timestamp.$(O) Timestamp.$(H): Timestamp.st $(INCLUDE_TOP)\stx\libbasic\AbstractTime.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)UserConfirmation.$(O) UserConfirmation.$(H): UserConfirmation.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)UserInformation.$(O) UserInformation.$(H): UserInformation.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)UserInterrupt.$(O) UserInterrupt.$(H): UserInterrupt.st $(INCLUDE_TOP)\stx\libbasic\ControlInterrupt.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)Warning.$(O) Warning.$(H): Warning.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)UserNotification.$(O) UserNotification.$(H): UserNotification.st $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)YesToAllConfirmation.$(O) YesToAllConfirmation.$(H): YesToAllConfirmation.st $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)stx_libbasic.$(O) stx_libbasic.$(H): stx_libbasic.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)AbortAllOperationRequest.$(O) AbortAllOperationRequest.$(H): AbortAllOperationRequest.st $(INCLUDE_TOP)\stx\libbasic\ControlRequest.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)AbstractSourceFileWriter.$(O) AbstractSourceFileWriter.$(H): AbstractSourceFileWriter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(STCHDR)
+$(OUTDIR)ActivityNotification.$(O) ActivityNotification.$(H): ActivityNotification.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)Array.$(O) Array.$(H): Array.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)BreakPointInterrupt.$(O) BreakPointInterrupt.$(H): BreakPointInterrupt.st $(INCLUDE_TOP)\stx\libbasic\HaltInterrupt.$(H) $(INCLUDE_TOP)\stx\libbasic\ControlInterrupt.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CheapBlock.$(O) CheapBlock.$(H): CheapBlock.st $(INCLUDE_TOP)\stx\libbasic\Block.$(H) $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -204,7 +201,6 @@
$(OUTDIR)MeasurementValue.$(O) MeasurementValue.$(H): MeasurementValue.st $(INCLUDE_TOP)\stx\libbasic\Number.$(H) $(INCLUDE_TOP)\stx\libbasic\ArithmeticValue.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)Metaclass.$(O) Metaclass.$(H): Metaclass.st $(INCLUDE_TOP)\stx\libbasic\ClassDescription.$(H) $(INCLUDE_TOP)\stx\libbasic\Behavior.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)OsError.$(O) OsError.$(H): OsError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ProceedError.$(O) ProceedError.$(H): ProceedError.st $(INCLUDE_TOP)\stx\libbasic\Warning.$(H) $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)ProceedableError.$(O) ProceedableError.$(H): ProceedableError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)QueryWithoutDefault.$(O) QueryWithoutDefault.$(H): QueryWithoutDefault.st $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)ReadStream.$(O) ReadStream.$(H): ReadStream.st $(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)
@@ -218,8 +214,11 @@
$(OUTDIR)StringCollection.$(O) StringCollection.$(H): StringCollection.st $(INCLUDE_TOP)\stx\libbasic\OrderedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TerminateProcessRequest.$(O) TerminateProcessRequest.$(H): TerminateProcessRequest.st $(INCLUDE_TOP)\stx\libbasic\ControlRequest.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)UninterpretedBytes.$(O) UninterpretedBytes.$(H): UninterpretedBytes.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)UserConfirmation.$(O) UserConfirmation.$(H): UserConfirmation.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)UserInformation.$(O) UserInformation.$(H): UserInformation.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)VMInternalError.$(O) VMInternalError.$(H): VMInternalError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)VarArgBlock.$(O) VarArgBlock.$(H): VarArgBlock.st $(INCLUDE_TOP)\stx\libbasic\Block.$(H) $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Warning.$(O) Warning.$(H): Warning.st $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)WeakArray.$(O) WeakArray.$(H): WeakArray.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)WeakIdentitySet.$(O) WeakIdentitySet.$(H): WeakIdentitySet.st $(INCLUDE_TOP)\stx\libbasic\IdentitySet.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)WeakValueDictionary.$(O) WeakValueDictionary.$(H): WeakValueDictionary.st $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -253,6 +252,7 @@
$(OUTDIR)OsNotification.$(O) OsNotification.$(H): OsNotification.st $(INCLUDE_TOP)\stx\libbasic\OsError.$(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)OsTransferFaultError.$(O) OsTransferFaultError.$(H): OsTransferFaultError.st $(INCLUDE_TOP)\stx\libbasic\OsError.$(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)PrivateMetaclass.$(O) PrivateMetaclass.$(H): PrivateMetaclass.st $(INCLUDE_TOP)\stx\libbasic\Metaclass.$(H) $(INCLUDE_TOP)\stx\libbasic\ClassDescription.$(H) $(INCLUDE_TOP)\stx\libbasic\Behavior.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ProceedError.$(O) ProceedError.$(H): ProceedError.st $(INCLUDE_TOP)\stx\libbasic\Warning.$(H) $(INCLUDE_TOP)\stx\libbasic\UserNotification.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)ReadWriteStream.$(O) ReadWriteStream.$(H): ReadWriteStream.st $(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)ShortFloat.$(O) ShortFloat.$(H): ShortFloat.st $(INCLUDE_TOP)\stx\libbasic\LimitedPrecisionReal.$(H) $(INCLUDE_TOP)\stx\libbasic\Number.$(H) $(INCLUDE_TOP)\stx\libbasic\ArithmeticValue.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)SignalError.$(O) SignalError.$(H): SignalError.st $(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)
@@ -325,9 +325,12 @@
$(OUTDIR)CharacterEncoderImplementations__MS_Cyrillic.$(O) CharacterEncoderImplementations__MS_Cyrillic.$(H): CharacterEncoderImplementations__MS_Cyrillic.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoderImplementations__SingleByteEncoder.$(H) $(INCLUDE_TOP)\stx\libbasic\CharacterEncoder.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)CharacterEncoderImplementations__MS_Greek.$(O) CharacterEncoderImplementations__MS_Greek.$(H): CharacterEncoderImplementations__MS_Greek.st $(INCLUDE_TOP)\stx\libbasic\CharacterEncoderImplementations__SingleByteEncoder.$(H) $(INCLUDE_TOP)\stx\libbasic\CharacterEncoder.$(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)Win32OperatingSystem.$(O) Win32OperatingSystem.$(H): Win32OperatingSystem.st $(INCLUDE_TOP)\stx\libbasic\AbstractOperatingSystem.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Win32Handle.$(H) $(INCLUDE_TOP)\stx\libbasic\OSHandle.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(STCHDR)
+$(OUTDIR)Win32Process.$(O) Win32Process.$(H): Win32Process.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Win32OperatingSystem.$(O) Win32OperatingSystem.$(H): Win32OperatingSystem.st $(INCLUDE_TOP)\stx\libbasic\AbstractOperatingSystem.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\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\Win32Handle.$(H) $(INCLUDE_TOP)\stx\libbasic\OSHandle.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
+
--- a/libInit.cc Mon Oct 26 21:51:17 2009 +0000
+++ b/libInit.cc Thu Nov 05 14:41:30 2009 +0000
@@ -1,5 +1,5 @@
/*
- * $Header: /cvs/stx/stx/libbasic/libInit.cc,v 1.148 2009/10/12 19:32:49 cg Exp $
+ * $Header: /cvs/stx/stx/libbasic/libInit.cc,v 1.150 2009/10/30 14:39:46 cg Exp $
*
* DO NOT EDIT
* automagically generated from the projectDefinition: stx_libbasic.
@@ -21,7 +21,6 @@
_Autoload_Init(pass,__pRT__,snd);
_Object_Init(pass,__pRT__,snd);
_ProtoObject_Init(pass,__pRT__,snd);
-_AbstractDesktop_Init(pass,__pRT__,snd);
_AbstractOperatingSystem_Init(pass,__pRT__,snd);
_AbstractSourceFileReader_Init(pass,__pRT__,snd);
_Behavior_Init(pass,__pRT__,snd);
@@ -29,8 +28,6 @@
_CharacterEncoder_Init(pass,__pRT__,snd);
_ClassBuilder_Init(pass,__pRT__,snd);
_ClassCategoryReader_Init(pass,__pRT__,snd);
-_CmdLineOption_Init(pass,__pRT__,snd);
-_CmdLineParser_Init(pass,__pRT__,snd);
_Collection_Init(pass,__pRT__,snd);
_Context_Init(pass,__pRT__,snd);
_Continuation_Init(pass,__pRT__,snd);
@@ -103,15 +100,10 @@
_SequenceableCollection_Init(pass,__pRT__,snd);
_Set_Init(pass,__pRT__,snd);
_SmalltalkChunkFileSourceReader_Init(pass,__pRT__,snd);
-_SmalltalkDesktop_Init(pass,__pRT__,snd);
_SmalltalkLanguage_Init(pass,__pRT__,snd);
_True_Init(pass,__pRT__,snd);
-_UnixDesktop_Init(pass,__pRT__,snd);
_UnixFilename_Init(pass,__pRT__,snd);
-_UserNotification_Init(pass,__pRT__,snd);
_WeakInterestConverter_Init(pass,__pRT__,snd);
-_WindowsDesktop_Init(pass,__pRT__,snd);
-_ActivityNotification_Init(pass,__pRT__,snd);
_ArrayedCollection_Init(pass,__pRT__,snd);
_Association_Init(pass,__pRT__,snd);
_Block_Init(pass,__pRT__,snd);
@@ -150,15 +142,13 @@
_SHA1Stream_Init(pass,__pRT__,snd);
_Time_Init(pass,__pRT__,snd);
_Timestamp_Init(pass,__pRT__,snd);
-_UserConfirmation_Init(pass,__pRT__,snd);
-_UserInformation_Init(pass,__pRT__,snd);
_UserInterrupt_Init(pass,__pRT__,snd);
-_Warning_Init(pass,__pRT__,snd);
-_XDGDesktop_Init(pass,__pRT__,snd);
+_UserNotification_Init(pass,__pRT__,snd);
_YesToAllConfirmation_Init(pass,__pRT__,snd);
_stx_137libbasic_Init(pass,__pRT__,snd);
_AbortAllOperationRequest_Init(pass,__pRT__,snd);
_AbstractSourceFileWriter_Init(pass,__pRT__,snd);
+_ActivityNotification_Init(pass,__pRT__,snd);
_Array_Init(pass,__pRT__,snd);
_BreakPointInterrupt_Init(pass,__pRT__,snd);
_CheapBlock_Init(pass,__pRT__,snd);
@@ -168,7 +158,6 @@
_ElementBoundsError_Init(pass,__pRT__,snd);
_FloatArray_Init(pass,__pRT__,snd);
_Fraction_Init(pass,__pRT__,snd);
-_GNOMEDesktop_Init(pass,__pRT__,snd);
_IdentityDictionary_Init(pass,__pRT__,snd);
_InlineObjectClassDescription_Init(pass,__pRT__,snd);
_Integer_Init(pass,__pRT__,snd);
@@ -177,7 +166,6 @@
_MeasurementValue_Init(pass,__pRT__,snd);
_Metaclass_Init(pass,__pRT__,snd);
_OsError_Init(pass,__pRT__,snd);
-_ProceedError_Init(pass,__pRT__,snd);
_ProceedableError_Init(pass,__pRT__,snd);
_QueryWithoutDefault_Init(pass,__pRT__,snd);
_ReadStream_Init(pass,__pRT__,snd);
@@ -191,8 +179,11 @@
_StringCollection_Init(pass,__pRT__,snd);
_TerminateProcessRequest_Init(pass,__pRT__,snd);
_UninterpretedBytes_Init(pass,__pRT__,snd);
+_UserConfirmation_Init(pass,__pRT__,snd);
+_UserInformation_Init(pass,__pRT__,snd);
_VMInternalError_Init(pass,__pRT__,snd);
_VarArgBlock_Init(pass,__pRT__,snd);
+_Warning_Init(pass,__pRT__,snd);
_WeakArray_Init(pass,__pRT__,snd);
_WeakIdentitySet_Init(pass,__pRT__,snd);
_WeakValueDictionary_Init(pass,__pRT__,snd);
@@ -226,6 +217,7 @@
_OsNotification_Init(pass,__pRT__,snd);
_OsTransferFaultError_Init(pass,__pRT__,snd);
_PrivateMetaclass_Init(pass,__pRT__,snd);
+_ProceedError_Init(pass,__pRT__,snd);
_ReadWriteStream_Init(pass,__pRT__,snd);
_ShortFloat_Init(pass,__pRT__,snd);
_SignalError_Init(pass,__pRT__,snd);
@@ -300,6 +292,7 @@
_UnixOperatingSystem_Init(pass,__pRT__,snd);
#endif /* UNIX */
#ifdef WIN32
+_Win32Process_Init(pass,__pRT__,snd);
_PCFilename_Init(pass,__pRT__,snd);
_CharacterEncoderImplementations__MS_137Baltic_Init(pass,__pRT__,snd);
_CharacterEncoderImplementations__MS_137Cyrillic_Init(pass,__pRT__,snd);
@@ -307,6 +300,7 @@
_Win32Handle_Init(pass,__pRT__,snd);
_Win32FILEHandle_Init(pass,__pRT__,snd);
_Win32OperatingSystem_Init(pass,__pRT__,snd);
+_Win32Constants_Init(pass,__pRT__,snd);
#endif /* WIN32 */
--- a/libbasic.rc Mon Oct 26 21:51:17 2009 +0000
+++ b/libbasic.rc Thu Nov 05 14:41:30 2009 +0000
@@ -3,7 +3,7 @@
// automagically generated from the projectDefinition: stx_libbasic.
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 5,4,1,63
+ FILEVERSION 5,4,1,65
PRODUCTVERSION 5,4,6,1
FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE
FILEFLAGS VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
@@ -18,12 +18,12 @@
BEGIN
VALUE "CompanyName", "eXept Software AG\0"
VALUE "FileDescription", "Smalltalk/X Basic Classes (LIB)\0"
- VALUE "FileVersion", "5.4.1.63\0"
+ VALUE "FileVersion", "5.4.1.65\0"
VALUE "InternalName", "stx:libbasic\0"
VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2009\nCopyright eXept Software AG 1998-2009\0"
VALUE "ProductName", "Smalltalk/X\0"
VALUE "ProductVersion", "5.4.6.1\0"
- VALUE "ProductDate", "Mon, 12 Oct 2009 19:31:01 GMT\0"
+ VALUE "ProductDate", "Fri, 30 Oct 2009 14:38:16 GMT\0"
END
END
@@ -34,3 +34,4 @@
END
END
+
--- a/stx_libbasic.st Mon Oct 26 21:51:17 2009 +0000
+++ b/stx_libbasic.st Thu Nov 05 14:41:30 2009 +0000
@@ -226,7 +226,7 @@
(UserMessage autoload)
Visitor
(WeakValueIdentityDictionary autoload)
- (Win32Process autoload)
+ (Win32Process win32)
AbstractTime
ApplicationDefinition
ArithmeticValue
@@ -462,6 +462,7 @@
Symbol
Unicode16String
SystemChangeNotifier
+ (Win32Constants win32)
)
!
@@ -504,10 +505,11 @@
!stx_libbasic class methodsFor:'documentation'!
version
- ^ '$Id: stx_libbasic.st 10473 2009-10-24 15:48:19Z vranyj1 $'
+ ^ '$Id: stx_libbasic.st 10477 2009-11-05 14:41:30Z vranyj1 $'
!
version_CVS
- ^ '§Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.64 2009/10/12 19:32:55 cg Exp §'
+ ^ '$Id: stx_libbasic.st 10477 2009-11-05 14:41:30Z vranyj1 $'
! !
+