diff -r cc55df8d23dc -r cfb6a76de348 Win32OperatingSystem.st --- a/Win32OperatingSystem.st Thu Sep 29 10:38:47 2011 +0200 +++ b/Win32OperatingSystem.st Thu Sep 29 13:18:57 2011 +0200 @@ -1,7 +1,7 @@ " COPYRIGHT (c) 1988 by Claus Gittinger COPYRIGHT (c) 1998-2004 by eXept Software AG - 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 @@ -13,161 +13,161 @@ "{ Package: 'stx:libbasic' }" AbstractOperatingSystem subclass:#Win32OperatingSystem - instanceVariableNames:'' - classVariableNames:'Initialized HostName DomainName CurrentDirectory' - poolDictionaries:'Win32Constants' - category:'OS-Windows' + instanceVariableNames:'' + classVariableNames:'Initialized HostName DomainName CurrentDirectory' + poolDictionaries:'Win32Constants' + category:'OS-Windows' ! ByteArray variableByteSubclass:#DevModeStructure - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! ByteArray variableByteSubclass:#DocInfoStructure - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! Object subclass:#FileStatusInfo - instanceVariableNames:'type mode uid gid size id accessed modified created statusChanged - sourcePath linkTargetPath fullPathName alternativePathName' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'type mode uid gid size id accessed modified created statusChanged + sourcePath linkTargetPath fullPathName alternativePathName' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! Object subclass:#OSProcessStatus - instanceVariableNames:'pid status code core' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'pid status code core' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! Object subclass:#PerformanceData - instanceVariableNames:'objectArray perfTime perfFreq perfTime100nSec' - classVariableNames:'PerformanceText CounterIndexTextDictionary - HelpIndexTextDictionary' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'objectArray perfTime perfFreq perfTime100nSec' + classVariableNames:'PerformanceText CounterIndexTextDictionary + HelpIndexTextDictionary' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! Object subclass:#Abstract - instanceVariableNames:'lastData lastTimestamp cachedResults' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem::PerformanceData + instanceVariableNames:'lastData lastTimestamp cachedResults' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem::PerformanceData ! Win32OperatingSystem::PerformanceData::Abstract subclass:#DiskIO - instanceVariableNames:'' - classVariableNames:'TheOneAndOnlyInstance' - poolDictionaries:'' - privateIn:Win32OperatingSystem::PerformanceData + instanceVariableNames:'' + classVariableNames:'TheOneAndOnlyInstance' + poolDictionaries:'' + privateIn:Win32OperatingSystem::PerformanceData ! Win32OperatingSystem::PerformanceData::Abstract subclass:#Global - instanceVariableNames:'' - classVariableNames:'TheOneAndOnlyInstance' - poolDictionaries:'' - privateIn:Win32OperatingSystem::PerformanceData + instanceVariableNames:'' + classVariableNames:'TheOneAndOnlyInstance' + poolDictionaries:'' + privateIn:Win32OperatingSystem::PerformanceData ! Win32OperatingSystem::PerformanceData::Abstract subclass:#Memory - instanceVariableNames:'' - classVariableNames:'TheOneAndOnlyInstance' - poolDictionaries:'' - privateIn:Win32OperatingSystem::PerformanceData + instanceVariableNames:'' + classVariableNames:'TheOneAndOnlyInstance' + poolDictionaries:'' + privateIn:Win32OperatingSystem::PerformanceData ! Win32OperatingSystem::PerformanceData::Abstract subclass:#Network - instanceVariableNames:'' - classVariableNames:'TheOneAndOnlyInstance' - poolDictionaries:'' - privateIn:Win32OperatingSystem::PerformanceData + instanceVariableNames:'' + classVariableNames:'TheOneAndOnlyInstance' + poolDictionaries:'' + privateIn:Win32OperatingSystem::PerformanceData ! Win32OperatingSystem::PerformanceData::Abstract subclass:#Process - instanceVariableNames:'' - classVariableNames:'TheOneAndOnlyInstance' - poolDictionaries:'' - privateIn:Win32OperatingSystem::PerformanceData + instanceVariableNames:'' + classVariableNames:'TheOneAndOnlyInstance' + poolDictionaries:'' + privateIn:Win32OperatingSystem::PerformanceData ! Win32OperatingSystem::PerformanceData::Abstract subclass:#Processor - instanceVariableNames:'' - classVariableNames:'TheOneAndOnlyInstance' - poolDictionaries:'' - privateIn:Win32OperatingSystem::PerformanceData + instanceVariableNames:'' + classVariableNames:'TheOneAndOnlyInstance' + poolDictionaries:'' + privateIn:Win32OperatingSystem::PerformanceData ! ByteArray variableByteSubclass:#PrinterInfo2Structure - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! Object subclass:#RegistryEntry - instanceVariableNames:'path handle' - classVariableNames:'Lobby HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE - HKEY_USERS HKEY_PERFORMANCE_DATA HKEY_CURRENT_CONFIG - HKEY_DYN_DATA HKEY_PERFORMANCE_TEXT HKEY_PERFORMANCE_NLSTEXT' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'path handle' + classVariableNames:'Lobby HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE + HKEY_USERS HKEY_PERFORMANCE_DATA HKEY_CURRENT_CONFIG + HKEY_DYN_DATA HKEY_PERFORMANCE_TEXT HKEY_PERFORMANCE_NLSTEXT' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! ByteArray variableByteSubclass:#TextMetricsStructure - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! OSHandle subclass:#Win32IOHandle - instanceVariableNames:'' - classVariableNames:'Lobby' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'' + classVariableNames:'Lobby' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! Win32Handle subclass:#Win32PrinterHandle - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! Win32Handle subclass:#Win32ProcessHandle - instanceVariableNames:'pid' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'pid' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! Win32OperatingSystem::Win32IOHandle subclass:#Win32SerialPortHandle - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! Win32OperatingSystem::Win32IOHandle subclass:#Win32SocketHandle - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! ByteArray variableByteSubclass:#WinPointStructure - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:Win32OperatingSystem + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + privateIn:Win32OperatingSystem ! !Win32OperatingSystem primitiveDefinitions! @@ -485,48 +485,48 @@ tv.tv_usec = 0; if (readMode) { - n = select (sock + 1, & fds, NULL, NULL, & tv); + n = select (sock + 1, & fds, NULL, NULL, & tv); } else { - n = select (sock + 1, NULL, & fds, NULL, & tv); + n = select (sock + 1, NULL, & fds, NULL, & tv); } if (n == 0) { - return (0); + return (0); } if (n > 0) { - return ((FD_ISSET (sock, & fds)) ? 1 : 0); + return ((FD_ISSET (sock, & fds)) ? 1 : 0); } winErrNo = WSAGetLastError(); switch (winErrNo) { - case WSAENOTSOCK: - if (readMode) { - - DWORD w = 0; - HANDLE h = (HANDLE) _get_osfhandle (aFD); - - if (PeekNamedPipe (h, 0, 0, 0, & w, 0)) { - if( !__isWinNT || w > 0 ) - return (1); - - return (0); - } + case WSAENOTSOCK: + if (readMode) { + + DWORD w = 0; + HANDLE h = (HANDLE) _get_osfhandle (aFD); + + if (PeekNamedPipe (h, 0, 0, 0, & w, 0)) { + if( !__isWinNT || w > 0 ) + return (1); + + return (0); + } #if 0 - console_fprintf(stderr, "_canAccessIOWithoutBlocking non Socket\n"); -#endif - return (-1); - } - /* in writeMode we return allways true for none-sockets */ - return (1); - - case WSAEINPROGRESS: - case WSAEWOULDBLOCK: - return (0); - - default: - console_fprintf(stderr, "_canAccessIOWithoutBlocking -> %d (0x%x)\n", winErrNo, winErrNo); - return (-1); + console_fprintf(stderr, "_canAccessIOWithoutBlocking non Socket\n"); +#endif + return (-1); + } + /* in writeMode we return allways true for none-sockets */ + return (1); + + case WSAEINPROGRESS: + case WSAEWOULDBLOCK: + return (0); + + default: + console_fprintf(stderr, "_canAccessIOWithoutBlocking -> %d (0x%x)\n", winErrNo, winErrNo); + return (-1); } /* not reached */ @@ -548,7 +548,7 @@ FARPROC entry; if (*pLibHandle == NULL) { - *pLibHandle = LoadLibrary(libraryName); + *pLibHandle = LoadLibrary(libraryName); } entry = GetProcAddress(*pLibHandle, functionName); return entry; @@ -611,7 +611,7 @@ " COPYRIGHT (c) 1988 by Claus Gittinger COPYRIGHT (c) 1998-2004 by eXept Software AG - 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 @@ -641,90 +641,90 @@ [Class variables:] - HostName remembered hostname - - DomainName remembered domainname - - CurrentDirectory remembered currentDirectories path + HostName remembered hostname + + DomainName remembered domainname + + CurrentDirectory remembered currentDirectories path [author:] - Claus Gittinger (initial version & cleanup) - Manfred Dierolf (many features) + Claus Gittinger (initial version & cleanup) + Manfred Dierolf (many features) [see also:] - OSProcessStatus - Filename Date Time - ExternalStream FileStream PipeStream Socket + OSProcessStatus + Filename Date Time + ExternalStream FileStream PipeStream Socket " ! examples " various queries - [exBegin] + [exBegin] Transcript - showCR:'hello ' , (OperatingSystem getLoginName) - [exEnd] - - [exBegin] + showCR:'hello ' , (OperatingSystem getLoginName) + [exEnd] + + [exBegin] OperatingSystem isUNIXlike ifTrue:[ - Transcript showCR:'this is some UNIX-like OS' + Transcript showCR:'this is some UNIX-like OS' ] ifFalse:[ - Transcript showCR:'this OS is not UNIX-like' + Transcript showCR:'this OS is not UNIX-like' ] - [exEnd] - - [exBegin] + [exEnd] + + [exBegin] Transcript - showCR:'this machine is called ' , OperatingSystem getHostName - [exEnd] - - [exBegin] + showCR:'this machine is called ' , OperatingSystem getHostName + [exEnd] + + [exBegin] Transcript - showCR:('this machine is in the ' - , OperatingSystem getDomainName - , ' domain') - [exEnd] - - [exBegin] + showCR:('this machine is in the ' + , OperatingSystem getDomainName + , ' domain') + [exEnd] + + [exBegin] Transcript - showCR:('this machine''s CPU is a ' - , OperatingSystem getCPUType - ) - [exEnd] - - [exBegin] + showCR:('this machine''s CPU is a ' + , OperatingSystem getCPUType + ) + [exEnd] + + [exBegin] Transcript showCR:'executing ls command ...'. OperatingSystem executeCommand:'ls'. Transcript showCR:'... done.'. - [exEnd] + [exEnd] locking a file (should be executed on two running smalltalks - not in two threads): - [exBegin] + [exBegin] |f| f := 'testFile' asFilename readWriteStream. 10 timesRepeat:[ - 'about to lock ...' printCR. - [ - OperatingSystem - lockFD:(f fileDescriptor) - shared:false - blocking:false - ] whileFalse:[ - 'process ' print. OperatingSystem getProcessId print. ' is waiting' printCR. - Delay waitForSeconds:1 - ]. - 'LOCKED ...' printCR. - Delay waitForSeconds:10. - 'unlock ...' printCR. - (OperatingSystem - unlockFD:(f fileDescriptor)) printCR. - Delay waitForSeconds:3. + 'about to lock ...' printCR. + [ + OperatingSystem + lockFD:(f fileDescriptor) + shared:false + blocking:false + ] whileFalse:[ + 'process ' print. OperatingSystem getProcessId print. ' is waiting' printCR. + Delay waitForSeconds:1 + ]. + 'LOCKED ...' printCR. + Delay waitForSeconds:10. + 'unlock ...' printCR. + (OperatingSystem + unlockFD:(f fileDescriptor)) printCR. + Delay waitForSeconds:3. ] - [exBegin] + [exBegin] " ! ! @@ -736,18 +736,18 @@ if( ! coInitialized ) { #ifdef NO_NT4_0_COMPATIBILITY - FARPROC CoInitializeEx_entry = (FARPROC) CoInitializeEx; -#else - FARPROC CoInitializeEx_entry = __get_ole32_functionAddress("CoInitializeEx"); + FARPROC CoInitializeEx_entry = (FARPROC) CoInitializeEx; +#else + FARPROC CoInitializeEx_entry = __get_ole32_functionAddress("CoInitializeEx"); #endif /* NO_NT4_0_COMPATIBILITY */ - hres = (*CoInitializeEx_entry)(NULL, COINIT_MULTITHREADED); - if (! SUCCEEDED(hres)) { - console_fprintf(stderr, "OperatingSystem [info]: Could not open the COM library hres = %08x\n", hres ); - goto error; - } - coInitialized = 1; + hres = (*CoInitializeEx_entry)(NULL, COINIT_MULTITHREADED); + if (! SUCCEEDED(hres)) { + console_fprintf(stderr, "OperatingSystem [info]: Could not open the COM library hres = %08x\n", hres ); + goto error; + } + coInitialized = 1; #ifdef COM_DEBUG - console_fprintf(stderr, "OperatingSystem [info]: COM initialized\n" ); + console_fprintf(stderr, "OperatingSystem [info]: COM initialized\n" ); #endif } RETURN (self ); @@ -769,9 +769,9 @@ GetVersionEx (&osvi); if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) { - __isWinNT = 1; + __isWinNT = 1; } else { - __isWinNT = 0; + __isWinNT = 0; } %}. ! @@ -781,14 +781,14 @@ "/ attention: must be ok to be called twice during startup. Initialized == nil ifTrue:[ - Initialized := true. - ObjectMemory addDependent:self. - HostName := nil. - DomainName := nil. - LastErrorNumber := nil. - PipeFailed := false. - self initOSType. - self coInitialize. + Initialized := true. + ObjectMemory addDependent:self. + HostName := nil. + DomainName := nil. + LastErrorNumber := nil. + PipeFailed := false. + self initOSType. + self coInitialize. ]. "Modified: 13.9.1997 / 10:47:32 / cg" @@ -798,15 +798,15 @@ "catch image restart and flush some cached data" something == #earlyRestart ifTrue:[ - " - flush cached data - " - HostName := nil. - DomainName := nil. - LastErrorNumber := nil. - PipeFailed := false. - self initOSType. - self coInitialize. + " + flush cached data + " + HostName := nil. + DomainName := nil. + LastErrorNumber := nil. + PipeFailed := false. + self initOSType. + self coInitialize. ] "Modified: 22.4.1996 / 13:10:43 / cg" @@ -1400,7 +1400,7 @@ lp = __win32_getLogFilename(); if (lp) { - ret = __MKSTRING(lp); + ret = __MKSTRING(lp); } %}. ^ ret @@ -1418,16 +1418,16 @@ |logFilePath| aFilenameOrNil notNil ifTrue:[ - logFilePath := aFilenameOrNil asFilename pathName + logFilePath := aFilenameOrNil asFilename pathName ]. %{ extern void __win32_setLogFile(); if (__isStringLike(logFilePath)) { - __win32_setLogFile(__stringVal(logFilePath)); + __win32_setLogFile(__stringVal(logFilePath)); } else { - __win32_setLogFile( NULL ); + __win32_setLogFile( NULL ); } %} @@ -1446,14 +1446,14 @@ !Win32OperatingSystem class methodsFor:'clipboard'! clipboardContainsBitmap - "Answer whether the clipboard contains a bitmap." + "Answer whether the clipboard contains a bitmap." ^self clipboardContainsFormat: 2 "CfBitmap" ! clipboardContainsFormat: aCfConstant - "Answer true if the clipboard contains data in - the format described by aCfConstant. " + "Answer true if the clipboard contains data in + the format described by aCfConstant. " ^self primIsClipboardFormatAvailable: aCfConstant ! @@ -1466,7 +1466,7 @@ ! emptyClipboard - "Private - empty the clipboard. Note: it must be opened first." + "Private - empty the clipboard. Note: it must be opened first." | result | result := self primEmptyClipboard. result ifFalse: [ ^self error]. @@ -1527,7 +1527,7 @@ ! setBitmapToClipboard: aBitmap - "Copy aBitmap to the clipboard." + "Copy aBitmap to the clipboard." | handle | aBitmap isNil ifTrue:[ ^nil ]. aBitmap id isNil ifTrue:[aBitmap onDevice: Screen current]. @@ -1539,7 +1539,7 @@ self closeClipboard " - self setBitmapToClipboard: Image fromUser + self setBitmapToClipboard: Image fromUser " ! @@ -1586,818 +1586,833 @@ int __eno = __unsignedLongIntVal(errNr); if (__isWIN32Error(__eno)) { - switch (__eno & 0xFFFF) { - /* - * WIN32 GetLastError returns - */ - case ERROR_INVALID_FUNCTION: - sym = @symbol(ERROR_INVALID_FUNCTION); - typ = @symbol(illegalOperationSignal); - break; - - case ERROR_BAD_FORMAT: - sym = @symbol(ERROR_BAD_FORMAT); - typ = @symbol(invalidArgumentsSignal); - break; - - case ERROR_FILE_NOT_FOUND: - sym = @symbol(ERROR_FILE_NOT_FOUND); - typ = @symbol(nonexistentSignal); - break; - - case ERROR_PATH_NOT_FOUND: - sym = @symbol(ERROR_PATH_NOT_FOUND); - typ = @symbol(nonexistentSignal); - break; - - case ERROR_TOO_MANY_OPEN_FILES: - sym = @symbol(ERROR_TOO_MANY_OPEN_FILES); - typ = @symbol(noResourcesSignal); - break; - - /* - * what a nice errorCode - thats the most "useful" one I ever - * encountered ... (... those stupid micro-softies ...) - */ - case ERROR_OPEN_FAILED: - sym = @symbol(ERROR_OPEN_FAILED); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_ACCESS_DENIED: - sym = @symbol(ERROR_ACCESS_DENIED); - typ = @symbol(noPermissionsSignal); - break; - - case ERROR_INVALID_HANDLE: - sym = @symbol(ERROR_INVALID_HANDLE); - typ = @symbol(invalidArgumentsSignal); - break; - - case ERROR_NOT_ENOUGH_MEMORY: - sym = @symbol(ERROR_NOT_ENOUGH_MEMORY); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_INVALID_ACCESS: - sym = @symbol(ERROR_INVALID_ACCESS); - typ = @symbol(inappropriateOperationSignal); - break; - - case ERROR_INVALID_DATA: - sym = @symbol(ERROR_INVALID_DATA); - typ = @symbol(invalidArgumentsSignal); - break; - - case ERROR_INVALID_NAME: - sym = @symbol(ERROR_INVALID_NAME); - typ = @symbol(invalidArgumentsSignal); - break; - - case ERROR_ARENA_TRASHED: - sym = @symbol(ERROR_ARENA_TRASHED); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_OUTOFMEMORY: - sym = @symbol(ERROR_OUTOFMEMORY); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_BROKEN_PIPE: - sym = @symbol(ERROR_BROKEN_PIPE); - typ = @symbol(peerFaultSignal); - break; - - case ERROR_GEN_FAILURE: - sym = @symbol(ERROR_GEN_FAILURE); - break; - - case ERROR_WRITE_PROTECT: - sym = @symbol(ERROR_WRITE_PROTECT); - typ = @symbol(inappropriateOperationSignal); - break; - - case ERROR_WRITE_FAULT: - sym = @symbol(ERROR_WRITE_FAULT); - typ = @symbol(transferFaultSignal); - break; - - case ERROR_READ_FAULT: - sym = @symbol(ERROR_READ_FAULT); - typ = @symbol(transferFaultSignal); - break; - - case ERROR_HANDLE_DISK_FULL: - sym = @symbol(ERROR_HANDLE_DISK_FULL); - typ = @symbol(volumeFullSignal); - break; - - case ERROR_DISK_FULL: - sym = @symbol(ERROR_DISK_FULL); - typ = @symbol(volumeFullSignal); - break; - - case ERROR_SHARING_VIOLATION: - sym = @symbol(ERROR_SHARING_VIOLATION); - typ = @symbol(noPermissionsSignal); - break; - - case ERROR_LOCK_VIOLATION: - sym = @symbol(ERROR_LOCK_VIOLATION); - typ = @symbol(noPermissionsSignal); - break; - - case ERROR_INVALID_PARAMETER: - sym = @symbol(ERROR_INVALID_PARAMETER); - typ = @symbol(invalidArgumentsSignal); - break; - - case ERROR_NET_WRITE_FAULT: - sym = @symbol(ERROR_NET_WRITE_FAULT); - typ = @symbol(transferFaultSignal); - break; - - case ERROR_NOT_SUPPORTED: - sym = @symbol(ERROR_NOT_SUPPORTED); - typ = @symbol(inappropriateOperationSignal); - break; - - case ERROR_REM_NOT_LIST: - sym = @symbol(ERROR_REM_NOT_LIST); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_NETWORK_ACCESS_DENIED: - sym = @symbol(ERROR_NETWORK_ACCESS_DENIED); - typ = @symbol(noPermissionsSignal); - break; - - case ERROR_DUP_NAME: - sym = @symbol(ERROR_DUP_NAME); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_BAD_NETPATH: - sym = @symbol(ERROR_BAD_NETPATH); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_NETWORK_BUSY: - sym = @symbol(ERROR_NETWORK_BUSY); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_DRIVE_LOCKED: - sym = @symbol(ERROR_DRIVE_LOCKED); - typ = @symbol(inappropriateOperationSignal); - break; - - case ERROR_INVALID_DRIVE: - sym = @symbol(ERROR_INVALID_DRIVE); - typ = @symbol(invalidArgumentsSignal); - break; - - case ERROR_WRONG_DISK: - sym = @symbol(ERROR_WRONG_DISK); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_CURRENT_DIRECTORY: - sym = @symbol(ERROR_CURRENT_DIRECTORY); - typ = @symbol(invalidArgumentsSignal); - break; - - /* - * what a nice errorCode - thats the most "useful" one I ever - * encountered ... (... those stupid micro-softies ...) - */ - case ERROR_CANNOT_MAKE: - sym = @symbol(ERROR_CANNOT_MAKE); - typ = @symbol(inappropriateOperationSignal); - break; - - case ERROR_NO_MORE_FILES: - sym = @symbol(ERROR_NO_MORE_FILES); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_NOT_READY: - sym = @symbol(ERROR_NOT_READY); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_NOT_DOS_DISK: - sym = @symbol(ERROR_NOT_DOS_DISK); - typ = @symbol(invalidArgumentsSignal); - break; - - case ERROR_OUT_OF_PAPER: - sym = @symbol(ERROR_OUT_OF_PAPER); - typ = @symbol(noResourcesSignal); - break; - - case ERROR_PRINTQ_FULL: - sym = @symbol(ERROR_PRINTQ_FULL); - typ = @symbol(noResourcesSignal); - break; - - default: - sym = nil; - break; - } + switch (__eno & 0xFFFF) { + /* + * WIN32 GetLastError returns + */ + case ERROR_INVALID_FUNCTION: + sym = @symbol(ERROR_INVALID_FUNCTION); + typ = @symbol(illegalOperationSignal); + break; + + case ERROR_BAD_FORMAT: + sym = @symbol(ERROR_BAD_FORMAT); + typ = @symbol(invalidArgumentsSignal); + break; + + case ERROR_FILE_NOT_FOUND: + sym = @symbol(ERROR_FILE_NOT_FOUND); + typ = @symbol(nonexistentSignal); + break; + + case ERROR_PATH_NOT_FOUND: + sym = @symbol(ERROR_PATH_NOT_FOUND); + typ = @symbol(nonexistentSignal); + break; + + case ERROR_TOO_MANY_OPEN_FILES: + sym = @symbol(ERROR_TOO_MANY_OPEN_FILES); + typ = @symbol(noResourcesSignal); + break; + + /* + * what a nice errorCode - thats the most "useful" one I ever + * encountered ... (... those stupid micro-softies ...) + */ + case ERROR_OPEN_FAILED: + sym = @symbol(ERROR_OPEN_FAILED); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_ACCESS_DENIED: + sym = @symbol(ERROR_ACCESS_DENIED); + typ = @symbol(noPermissionsSignal); + break; + + case ERROR_INVALID_HANDLE: + sym = @symbol(ERROR_INVALID_HANDLE); + typ = @symbol(invalidArgumentsSignal); + break; + + case ERROR_NOT_ENOUGH_MEMORY: + sym = @symbol(ERROR_NOT_ENOUGH_MEMORY); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_NO_SYSTEM_RESOURCES: + sym = @symbol(ERROR_NO_SYSTEM_RESOURCES); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_NONPAGED_SYSTEM_RESOURCES: + sym = @symbol(ERROR_NONPAGED_SYSTEM_RESOURCES); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_PAGED_SYSTEM_RESOURCES: + sym = @symbol(ERROR_PAGED_SYSTEM_RESOURCES); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_INVALID_ACCESS: + sym = @symbol(ERROR_INVALID_ACCESS); + typ = @symbol(inappropriateOperationSignal); + break; + + case ERROR_INVALID_DATA: + sym = @symbol(ERROR_INVALID_DATA); + typ = @symbol(invalidArgumentsSignal); + break; + + case ERROR_INVALID_NAME: + sym = @symbol(ERROR_INVALID_NAME); + typ = @symbol(invalidArgumentsSignal); + break; + + case ERROR_ARENA_TRASHED: + sym = @symbol(ERROR_ARENA_TRASHED); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_OUTOFMEMORY: + sym = @symbol(ERROR_OUTOFMEMORY); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_BROKEN_PIPE: + sym = @symbol(ERROR_BROKEN_PIPE); + typ = @symbol(peerFaultSignal); + break; + + case ERROR_GEN_FAILURE: + sym = @symbol(ERROR_GEN_FAILURE); + break; + + case ERROR_WRITE_PROTECT: + sym = @symbol(ERROR_WRITE_PROTECT); + typ = @symbol(inappropriateOperationSignal); + break; + + case ERROR_WRITE_FAULT: + sym = @symbol(ERROR_WRITE_FAULT); + typ = @symbol(transferFaultSignal); + break; + + case ERROR_READ_FAULT: + sym = @symbol(ERROR_READ_FAULT); + typ = @symbol(transferFaultSignal); + break; + + case ERROR_HANDLE_DISK_FULL: + sym = @symbol(ERROR_HANDLE_DISK_FULL); + typ = @symbol(volumeFullSignal); + break; + + case ERROR_DISK_FULL: + sym = @symbol(ERROR_DISK_FULL); + typ = @symbol(volumeFullSignal); + break; + + case ERROR_SHARING_VIOLATION: + sym = @symbol(ERROR_SHARING_VIOLATION); + typ = @symbol(noPermissionsSignal); + break; + + case ERROR_LOCK_VIOLATION: + sym = @symbol(ERROR_LOCK_VIOLATION); + typ = @symbol(noPermissionsSignal); + break; + + case ERROR_INVALID_PARAMETER: + sym = @symbol(ERROR_INVALID_PARAMETER); + typ = @symbol(invalidArgumentsSignal); + break; + + case ERROR_NET_WRITE_FAULT: + sym = @symbol(ERROR_NET_WRITE_FAULT); + typ = @symbol(transferFaultSignal); + break; + + case ERROR_NOT_SUPPORTED: + sym = @symbol(ERROR_NOT_SUPPORTED); + typ = @symbol(inappropriateOperationSignal); + break; + + case ERROR_REM_NOT_LIST: + sym = @symbol(ERROR_REM_NOT_LIST); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_NETWORK_ACCESS_DENIED: + sym = @symbol(ERROR_NETWORK_ACCESS_DENIED); + typ = @symbol(noPermissionsSignal); + break; + + case ERROR_DUP_NAME: + sym = @symbol(ERROR_DUP_NAME); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_BAD_NETPATH: + sym = @symbol(ERROR_BAD_NETPATH); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_NETWORK_BUSY: + sym = @symbol(ERROR_NETWORK_BUSY); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_DRIVE_LOCKED: + sym = @symbol(ERROR_DRIVE_LOCKED); + typ = @symbol(inappropriateOperationSignal); + break; + + case ERROR_INVALID_DRIVE: + sym = @symbol(ERROR_INVALID_DRIVE); + typ = @symbol(invalidArgumentsSignal); + break; + + case ERROR_WRONG_DISK: + sym = @symbol(ERROR_WRONG_DISK); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_CURRENT_DIRECTORY: + sym = @symbol(ERROR_CURRENT_DIRECTORY); + typ = @symbol(invalidArgumentsSignal); + break; + + /* + * what a nice errorCode - thats the most "useful" one I ever + * encountered ... (... those stupid micro-softies ...) + */ + case ERROR_CANNOT_MAKE: + sym = @symbol(ERROR_CANNOT_MAKE); + typ = @symbol(inappropriateOperationSignal); + break; + + case ERROR_NO_MORE_FILES: + sym = @symbol(ERROR_NO_MORE_FILES); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_NOT_READY: + sym = @symbol(ERROR_NOT_READY); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_NOT_DOS_DISK: + sym = @symbol(ERROR_NOT_DOS_DISK); + typ = @symbol(invalidArgumentsSignal); + break; + + case ERROR_OUT_OF_PAPER: + sym = @symbol(ERROR_OUT_OF_PAPER); + typ = @symbol(noResourcesSignal); + break; + + case ERROR_PRINTQ_FULL: + sym = @symbol(ERROR_PRINTQ_FULL); + typ = @symbol(noResourcesSignal); + break; + + default: + sym = nil; + break; + } } else { - switch (__eno) { - /* - * POSIX errnos - these should be defined - */ + switch (__eno) { + /* + * POSIX errnos - these should be defined + */ #ifdef EPERM - case EPERM: - sym = @symbol(EPERM); - typ = @symbol(noPermissionsSignal); - break; + case EPERM: + sym = @symbol(EPERM); + typ = @symbol(noPermissionsSignal); + break; #endif #ifdef ENOENT - case ENOENT: - sym = @symbol(ENOENT); - typ = @symbol(nonexistentSignal); - break; + case ENOENT: + sym = @symbol(ENOENT); + typ = @symbol(nonexistentSignal); + break; #endif #ifdef ESRCH - case ESRCH: - sym = @symbol(ESRCH); - typ = @symbol(unavailableReferentSignal); - break; + case ESRCH: + sym = @symbol(ESRCH); + typ = @symbol(unavailableReferentSignal); + break; #endif #ifdef EINTR - case EINTR: - sym = @symbol(EINTR); - typ = @symbol(transientErrorSignal); - break; + case EINTR: + sym = @symbol(EINTR); + typ = @symbol(transientErrorSignal); + break; #endif #ifdef EIO - case EIO: - sym = @symbol(EIO); - typ = @symbol(transferFaultSignal); - break; + case EIO: + sym = @symbol(EIO); + typ = @symbol(transferFaultSignal); + break; #endif #ifdef ENXIO - case ENXIO: - sym = @symbol(ENXIO); - typ = @symbol(unavailableReferentSignal); - break; + case ENXIO: + sym = @symbol(ENXIO); + typ = @symbol(unavailableReferentSignal); + break; #endif #ifdef E2BIG - case E2BIG: - sym = @symbol(E2BIG); - typ = @symbol(invalidArgumentsSignal); - break; + case E2BIG: + sym = @symbol(E2BIG); + typ = @symbol(invalidArgumentsSignal); + break; #endif #ifdef ENOEXEC - case ENOEXEC: - sym = @symbol(ENOEXEC); - typ = @symbol(inappropriateOperationSignal); - break; + case ENOEXEC: + sym = @symbol(ENOEXEC); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef EBADF - case EBADF: - sym = @symbol(EBADF); - typ = @symbol(badAccessorSignal); - break; + case EBADF: + sym = @symbol(EBADF); + typ = @symbol(badAccessorSignal); + break; #endif #ifdef ECHILD - case ECHILD: - sym = @symbol(ECHILD); - typ = @symbol(informationSignal); - break; + case ECHILD: + sym = @symbol(ECHILD); + typ = @symbol(informationSignal); + break; #endif #if !defined(EWOULDBLOCK) && defined(EAGAIN) && (EWOULDBLOCK != EAGAIN) - case EAGAIN: - sym = @symbol(EAGAIN); - typ = @symbol(notReadySignal); - break; + case EAGAIN: + sym = @symbol(EAGAIN); + typ = @symbol(notReadySignal); + break; #endif #ifdef ENOMEM - case ENOMEM: - sym = @symbol(ENOMEM); - typ = @symbol(noMemorySignal); - break; + case ENOMEM: + sym = @symbol(ENOMEM); + typ = @symbol(noMemorySignal); + break; #endif #ifdef EACCES - case EACCES: - sym = @symbol(EACCES); - typ = @symbol(noPermissionsSignal); - break; + case EACCES: + sym = @symbol(EACCES); + typ = @symbol(noPermissionsSignal); + break; #endif #ifdef EFAULT - case EFAULT: - sym = @symbol(EFAULT); - typ = @symbol(invalidArgumentsSignal); - break; + case EFAULT: + sym = @symbol(EFAULT); + typ = @symbol(invalidArgumentsSignal); + break; #endif #ifdef EBUSY - case EBUSY: - sym = @symbol(EBUSY); - typ = @symbol(unavailableReferentSignal); - break; + case EBUSY: + sym = @symbol(EBUSY); + typ = @symbol(unavailableReferentSignal); + break; #endif #ifdef EEXIST - case EEXIST: - sym = @symbol(EEXIST); - typ = @symbol(existingReferentSignal); - break; + case EEXIST: + sym = @symbol(EEXIST); + typ = @symbol(existingReferentSignal); + break; #endif #ifdef EXDEV - case EXDEV: - sym = @symbol(EXDEV); - typ = @symbol(inappropriateReferentSignal); - break; + case EXDEV: + sym = @symbol(EXDEV); + typ = @symbol(inappropriateReferentSignal); + break; #endif #ifdef ENODEV - case ENODEV: - sym = @symbol(ENODEV); - typ = @symbol(inaccessibleSignal); - break; + case ENODEV: + sym = @symbol(ENODEV); + typ = @symbol(inaccessibleSignal); + break; #endif #ifdef ENOTDIR - case ENOTDIR: - sym = @symbol(ENOTDIR); - typ = @symbol(inappropriateOperationSignal); - break; + case ENOTDIR: + sym = @symbol(ENOTDIR); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef EISDIR - case EISDIR: - sym = @symbol(EISDIR); - typ = @symbol(inappropriateOperationSignal); - break; + case EISDIR: + sym = @symbol(EISDIR); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef EINVAL - case EINVAL: - sym = @symbol(EINVAL); - typ = @symbol(invalidArgumentsSignal); - break; + case EINVAL: + sym = @symbol(EINVAL); + typ = @symbol(invalidArgumentsSignal); + break; #endif #ifdef ENFILE - case ENFILE: - sym = @symbol(ENFILE); - typ = @symbol(noResourcesSignal); - break; + case ENFILE: + sym = @symbol(ENFILE); + typ = @symbol(noResourcesSignal); + break; #endif #ifdef EMFILE - case EMFILE: - sym = @symbol(EMFILE); - typ = @symbol(noResourcesSignal); - break; + case EMFILE: + sym = @symbol(EMFILE); + typ = @symbol(noResourcesSignal); + break; #endif #ifdef ENOTTY - case ENOTTY: - sym = @symbol(ENOTTY); - typ = @symbol(inappropriateOperationSignal); - break; + case ENOTTY: + sym = @symbol(ENOTTY); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef EFBIG - case EFBIG: - sym = @symbol(EFBIG); - typ = @symbol(noResourcesSignal); - break; + case EFBIG: + sym = @symbol(EFBIG); + typ = @symbol(noResourcesSignal); + break; #endif #ifdef ENOSPC - case ENOSPC: - sym = @symbol(ENOSPC); - typ = @symbol(noResourcesSignal); - break; + case ENOSPC: + sym = @symbol(ENOSPC); + typ = @symbol(noResourcesSignal); + break; #endif #ifdef ESPIPE - case ESPIPE: - sym = @symbol(ESPIPE); - typ = @symbol(inappropriateOperationSignal); - break; + case ESPIPE: + sym = @symbol(ESPIPE); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef EROFS - case EROFS: - sym = @symbol(EROFS); - typ = @symbol(inappropriateOperationSignal); - break; + case EROFS: + sym = @symbol(EROFS); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef EMLINK - case EMLINK: - sym = @symbol(EMLINK); - typ = @symbol(rangeErrorSignal); - break; + case EMLINK: + sym = @symbol(EMLINK); + typ = @symbol(rangeErrorSignal); + break; #endif #ifdef EPIPE - case EPIPE: - sym = @symbol(EPIPE); - typ = @symbol(peerFaultSignal); - break; + case EPIPE: + sym = @symbol(EPIPE); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef EDOM - case EDOM: - sym = @symbol(EDOM); - typ = @symbol(rangeErrorSignal); - break; + case EDOM: + sym = @symbol(EDOM); + typ = @symbol(rangeErrorSignal); + break; #endif #ifdef ERANGE - case ERANGE: - sym = @symbol(ERANGE); - typ = @symbol(rangeErrorSignal); - break; + case ERANGE: + sym = @symbol(ERANGE); + typ = @symbol(rangeErrorSignal); + break; #endif #ifdef EDEADLK # if EDEADLK != EWOULDBLOCK - case EDEADLK: - sym = @symbol(EDEADLK); - typ = @symbol(noResourcesSignal); - break; + case EDEADLK: + sym = @symbol(EDEADLK); + typ = @symbol(noResourcesSignal); + break; # endif #endif #ifdef ENAMETOOLONG - case ENAMETOOLONG: - sym = @symbol(ENAMETOOLONG); - typ = @symbol(rangeErrorSignal); - break; + case ENAMETOOLONG: + sym = @symbol(ENAMETOOLONG); + typ = @symbol(rangeErrorSignal); + break; #endif #ifdef ENOLCK - case ENOLCK: - sym = @symbol(ENOLCK); - typ = @symbol(inappropriateOperationSignal); - break; + case ENOLCK: + sym = @symbol(ENOLCK); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef ENOSYS - case ENOSYS: - sym = @symbol(ENOSYS); - typ = @symbol(inappropriateOperationSignal); - break; + case ENOSYS: + sym = @symbol(ENOSYS); + typ = @symbol(inappropriateOperationSignal); + break; #endif #if defined(ENOTEMPTY) && (ENOTEMPTY != EEXIST) - case ENOTEMPTY: - sym = @symbol(ENOTEMPTY); - typ = @symbol(inappropriateReferentSignal); - break; + case ENOTEMPTY: + sym = @symbol(ENOTEMPTY); + typ = @symbol(inappropriateReferentSignal); + break; #endif #ifdef EILSEQ - case EILSEQ: - sym = @symbol(EILSEQ); - typ = @symbol(transferFaultSignal); - break; -#endif - /* - * XPG3 errnos - defined on most systems - */ + case EILSEQ: + sym = @symbol(EILSEQ); + typ = @symbol(transferFaultSignal); + break; +#endif + /* + * XPG3 errnos - defined on most systems + */ #ifdef ENOTBLK - case ENOTBLK: - sym = @symbol(ENOTBLK); - typ = @symbol(inappropriateReferentSignal); - break; + case ENOTBLK: + sym = @symbol(ENOTBLK); + typ = @symbol(inappropriateReferentSignal); + break; #endif #ifdef ETXTBSY - case ETXTBSY: - sym = @symbol(ETXTBSY); - typ = @symbol(inaccessibleSignal); - break; -#endif - /* - * some others - */ + case ETXTBSY: + sym = @symbol(ETXTBSY); + typ = @symbol(inaccessibleSignal); + break; +#endif + /* + * some others + */ #ifdef EWOULDBLOCK - case EWOULDBLOCK: - sym = @symbol(EWOULDBLOCK); - typ = @symbol(notReadySignal); - break; + case EWOULDBLOCK: + sym = @symbol(EWOULDBLOCK); + typ = @symbol(notReadySignal); + break; #endif #ifdef ENOMSG - case ENOMSG: - sym = @symbol(ENOMSG); - typ = @symbol(noDataSignal); - break; + case ENOMSG: + sym = @symbol(ENOMSG); + typ = @symbol(noDataSignal); + break; #endif #ifdef ELOOP - case ELOOP: - sym = @symbol(ELOOP); - typ = @symbol(rangeErrorSignal); - break; -#endif - - /* - * some stream errors - */ + case ELOOP: + sym = @symbol(ELOOP); + typ = @symbol(rangeErrorSignal); + break; +#endif + + /* + * some stream errors + */ #ifdef ETIME - case ETIME: - sym = @symbol(ETIME); - typ = @symbol(peerFaultSignal); - break; + case ETIME: + sym = @symbol(ETIME); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef ENOSR - case ENOSR: - sym = @symbol(ENOSR); - typ = @symbol(noResourcesSignal); - break; + case ENOSR: + sym = @symbol(ENOSR); + typ = @symbol(noResourcesSignal); + break; #endif #ifdef ENOSTR - case ENOSTR: - sym = @symbol(ENOSTR); - typ = @symbol(inappropriateReferentSignal); - break; + case ENOSTR: + sym = @symbol(ENOSTR); + typ = @symbol(inappropriateReferentSignal); + break; #endif #ifdef ECOMM - case ECOMM: - sym = @symbol(ECOMM); - typ = @symbol(transferFaultSignal); - break; + case ECOMM: + sym = @symbol(ECOMM); + typ = @symbol(transferFaultSignal); + break; #endif #ifdef EPROTO - case EPROTO: - sym = @symbol(EPROTO); - typ = @symbol(inappropriateOperationSignal); - break; -#endif - /* - * nfs errors - */ + case EPROTO: + sym = @symbol(EPROTO); + typ = @symbol(inappropriateOperationSignal); + break; +#endif + /* + * nfs errors + */ #ifdef ESTALE - case ESTALE: - sym = @symbol(ESTALE); - typ = @symbol(unavailableReferentSignal); - break; + case ESTALE: + sym = @symbol(ESTALE); + typ = @symbol(unavailableReferentSignal); + break; #endif #ifdef EREMOTE - case EREMOTE: - sym = @symbol(EREMOTE); - typ = @symbol(rangeErrorSignal); - break; -#endif - /* - * some networking errors - */ + case EREMOTE: + sym = @symbol(EREMOTE); + typ = @symbol(rangeErrorSignal); + break; +#endif + /* + * some networking errors + */ #ifdef EINPROGRESS - case EINPROGRESS: - sym = @symbol(EINPROGRESS); - typ = @symbol(operationStartedSignal); - break; + case EINPROGRESS: + sym = @symbol(EINPROGRESS); + typ = @symbol(operationStartedSignal); + break; #endif #ifdef EALREADY - case EALREADY: - sym = @symbol(EALREADY); - typ = @symbol(operationStartedSignal); - break; + case EALREADY: + sym = @symbol(EALREADY); + typ = @symbol(operationStartedSignal); + break; #endif #ifdef ENOTSOCK - case ENOTSOCK: - sym = @symbol(ENOTSOCK); - typ = @symbol(inappropriateOperationSignal); - break; + case ENOTSOCK: + sym = @symbol(ENOTSOCK); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef EDESTADDRREQ - case EDESTADDRREQ: - sym = @symbol(EDESTADDRREQ); - typ = @symbol(underspecifiedSignal); - break; + case EDESTADDRREQ: + sym = @symbol(EDESTADDRREQ); + typ = @symbol(underspecifiedSignal); + break; #endif #ifdef EMSGSIZE - case EMSGSIZE: - sym = @symbol(EMSGSIZE); - typ = @symbol(rangeErrorSignal); - break; + case EMSGSIZE: + sym = @symbol(EMSGSIZE); + typ = @symbol(rangeErrorSignal); + break; #endif #ifdef EPROTOTYPE - case EPROTOTYPE: - sym = @symbol(EPROTOTYPE); - typ = @symbol(wrongSubtypeForOperationSignal); - break; + case EPROTOTYPE: + sym = @symbol(EPROTOTYPE); + typ = @symbol(wrongSubtypeForOperationSignal); + break; #endif #ifdef ENOPROTOOPT - case ENOPROTOOPT: - sym = @symbol(ENOPROTOOPT); - typ = @symbol(unsupportedOperationSignal); - break; + case ENOPROTOOPT: + sym = @symbol(ENOPROTOOPT); + typ = @symbol(unsupportedOperationSignal); + break; #endif #ifdef EPROTONOSUPPORT - case EPROTONOSUPPORT: - sym = @symbol(EPROTONOSUPPORT); - typ = @symbol(unsupportedOperationSignal); - break; + case EPROTONOSUPPORT: + sym = @symbol(EPROTONOSUPPORT); + typ = @symbol(unsupportedOperationSignal); + break; #endif #ifdef ESOCKTNOSUPPORT - case ESOCKTNOSUPPORT: - sym = @symbol(ESOCKTNOSUPPORT); - typ = @symbol(unsupportedOperationSignal); - break; + case ESOCKTNOSUPPORT: + sym = @symbol(ESOCKTNOSUPPORT); + typ = @symbol(unsupportedOperationSignal); + break; #endif #ifdef EOPNOTSUPP - case EOPNOTSUPP: - sym = @symbol(EOPNOTSUPP); - typ = @symbol(inappropriateOperationSignal); - break; + case EOPNOTSUPP: + sym = @symbol(EOPNOTSUPP); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef EPFNOSUPPORT - case EPFNOSUPPORT: - sym = @symbol(EPFNOSUPPORT); - typ = @symbol(unsupportedOperationSignal); - break; + case EPFNOSUPPORT: + sym = @symbol(EPFNOSUPPORT); + typ = @symbol(unsupportedOperationSignal); + break; #endif #ifdef EAFNOSUPPORT - case EAFNOSUPPORT: - sym = @symbol(EAFNOSUPPORT); - typ = @symbol(unsupportedOperationSignal); - break; + case EAFNOSUPPORT: + sym = @symbol(EAFNOSUPPORT); + typ = @symbol(unsupportedOperationSignal); + break; #endif #ifdef EADDRINUSE - case EADDRINUSE: - sym = @symbol(EADDRINUSE); - typ = @symbol(existingReferentSignal); - break; + case EADDRINUSE: + sym = @symbol(EADDRINUSE); + typ = @symbol(existingReferentSignal); + break; #endif #ifdef EADDRNOTAVAIL - case EADDRNOTAVAIL: - sym = @symbol(EADDRNOTAVAIL); - typ = @symbol(noPermissionsSignal); - break; + case EADDRNOTAVAIL: + sym = @symbol(EADDRNOTAVAIL); + typ = @symbol(noPermissionsSignal); + break; #endif #ifdef ETIMEDOUT - case ETIMEDOUT: - sym = @symbol(ETIMEDOUT); - typ = @symbol(peerFaultSignal); - break; + case ETIMEDOUT: + sym = @symbol(ETIMEDOUT); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef ECONNREFUSED - case ECONNREFUSED: - sym = @symbol(ECONNREFUSED); - typ = @symbol(peerFaultSignal); - break; + case ECONNREFUSED: + sym = @symbol(ECONNREFUSED); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef ENETDOWN - case ENETDOWN: - sym = @symbol(ENETDOWN); - typ = @symbol(peerFaultSignal); - break; + case ENETDOWN: + sym = @symbol(ENETDOWN); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef ENETUNREACH - case ENETUNREACH: - sym = @symbol(ENETUNREACH); - typ = @symbol(peerFaultSignal); - break; + case ENETUNREACH: + sym = @symbol(ENETUNREACH); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef ENETRESET - case ENETRESET: - sym = @symbol(ENETRESET); - typ = @symbol(peerFaultSignal); - break; + case ENETRESET: + sym = @symbol(ENETRESET); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef ECONNABORTED - case ECONNABORTED: - sym = @symbol(ECONNABORTED); - typ = @symbol(peerFaultSignal); - break; + case ECONNABORTED: + sym = @symbol(ECONNABORTED); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef ECONNRESET - case ECONNRESET: - sym = @symbol(ECONNRESET); - typ = @symbol(peerFaultSignal); - break; + case ECONNRESET: + sym = @symbol(ECONNRESET); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef EISCONN - case EISCONN: - sym = @symbol(EISCONN); - typ = @symbol(unpreparedOperationSignal); - break; + case EISCONN: + sym = @symbol(EISCONN); + typ = @symbol(unpreparedOperationSignal); + break; #endif #ifdef ENOTCONN - case ENOTCONN: - sym = @symbol(ENOTCONN); - typ = @symbol(unpreparedOperationSignal); - break; + case ENOTCONN: + sym = @symbol(ENOTCONN); + typ = @symbol(unpreparedOperationSignal); + break; #endif #ifdef ESHUTDOWN - case ESHUTDOWN: - sym = @symbol(ESHUTDOWN); - typ = @symbol(unpreparedOperationSignal); - break; + case ESHUTDOWN: + sym = @symbol(ESHUTDOWN); + typ = @symbol(unpreparedOperationSignal); + break; #endif #ifdef EHOSTDOWN - case EHOSTDOWN: - sym = @symbol(EHOSTDOWN); - typ = @symbol(peerFaultSignal); - break; + case EHOSTDOWN: + sym = @symbol(EHOSTDOWN); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef EHOSTUNREACH - case EHOSTUNREACH: - sym = @symbol(EHOSTUNREACH); - typ = @symbol(peerFaultSignal); - break; + case EHOSTUNREACH: + sym = @symbol(EHOSTUNREACH); + typ = @symbol(peerFaultSignal); + break; #endif #ifdef WSAEFAULT - case WSAEFAULT: - sym = @symbol(WSAEFAULT); - typ = @symbol(invalidArgumentsSignal); - break; + case WSAEFAULT: + sym = @symbol(WSAEFAULT); + typ = @symbol(invalidArgumentsSignal); + break; #endif #ifdef WSAEINTR - case WSAEINTR: - sym = @symbol(WSAEINTR); - typ = @symbol(transientErrorSignal); - break; + case WSAEINTR: + sym = @symbol(WSAEINTR); + typ = @symbol(transientErrorSignal); + break; #endif #ifdef WSAEBADF - case WSAEBADF: - sym = @symbol(WSAEBADF); - typ = @symbol(badAccessorSignal); - break; + case WSAEBADF: + sym = @symbol(WSAEBADF); + typ = @symbol(badAccessorSignal); + break; #endif #ifdef WSAEACCESS - case WSAEACCESS: - sym = @symbol(WSAEACCESS); - typ = @symbol(badAccessorSignal); - break; + case WSAEACCESS: + sym = @symbol(WSAEACCESS); + typ = @symbol(badAccessorSignal); + break; #endif #ifdef WSAEINVAL - case WSAEINVAL: - sym = @symbol(WSAEINVAL); - typ = @symbol(invalidArgumentsSignal); - break; + case WSAEINVAL: + sym = @symbol(WSAEINVAL); + typ = @symbol(invalidArgumentsSignal); + break; #endif #ifdef WSAEMFILE - case WSAEMFILE: - sym = @symbol(WSAEMFILE); - typ = @symbol(noResourcesSignal); - break; + case WSAEMFILE: + sym = @symbol(WSAEMFILE); + typ = @symbol(noResourcesSignal); + break; #endif #ifdef WSAEWOULDBLOCK - case WSAEWOULDBLOCK: - sym = @symbol(WSAEWOULDBLOCK); - typ = @symbol(notReadySignal); - break; + case WSAEWOULDBLOCK: + sym = @symbol(WSAEWOULDBLOCK); + typ = @symbol(notReadySignal); + break; #endif #ifdef WSAEINPROGRESS - case WSAEINPROGRESS: - sym = @symbol(WSAEINPROGRESS); - typ = @symbol(operationStartedSignal); - break; + case WSAEINPROGRESS: + sym = @symbol(WSAEINPROGRESS); + typ = @symbol(operationStartedSignal); + break; #endif #ifdef WSAEALREADY - case WSAEALREADY: - sym = @symbol(WSAEALREADY); - typ = @symbol(operationStartedSignal); - break; + case WSAEALREADY: + sym = @symbol(WSAEALREADY); + typ = @symbol(operationStartedSignal); + break; #endif #ifdef WSAENOTSOCK - case WSAENOTSOCK: - sym = @symbol(WSAENOTSOCK); - typ = @symbol(inappropriateOperationSignal); - break; + case WSAENOTSOCK: + sym = @symbol(WSAENOTSOCK); + typ = @symbol(inappropriateOperationSignal); + break; #endif #ifdef WSAEPROTONOSUPPORT - case WSAEPROTONOSUPPORT: - sym = @symbol(WSAEPROTONOSUPPORT); - typ = @symbol(unsupportedOperationSignal); - break; + case WSAEPROTONOSUPPORT: + sym = @symbol(WSAEPROTONOSUPPORT); + typ = @symbol(unsupportedOperationSignal); + break; #endif #ifdef WSAESOCKTNOSUPPORT - case WSAESOCKTNOSUPPORT: - sym = @symbol(WSAESOCKTNOSUPPORT); - typ = @symbol(unsupportedOperationSignal); - break; + case WSAESOCKTNOSUPPORT: + sym = @symbol(WSAESOCKTNOSUPPORT); + typ = @symbol(unsupportedOperationSignal); + break; #endif #ifdef E_NOINTERFACE - case E_NOINTERFACE: - sym = @symbol(E_NOINTERFACE); - typ = @symbol(noInterfaceSignal); - break; + case E_NOINTERFACE: + sym = @symbol(E_NOINTERFACE); + typ = @symbol(noInterfaceSignal); + break; #endif #ifdef CO_E_NOTINITIALIZED - case CO_E_NOTINITIALIZED: - sym = @symbol(CO_E_NOTINITIALIZED); - typ = @symbol(coNotInitializedSignal); - break; + case CO_E_NOTINITIALIZED: + sym = @symbol(CO_E_NOTINITIALIZED); + typ = @symbol(coNotInitializedSignal); + break; #endif #ifdef REGDB_E_CLASSNOTREG - case REGDB_E_CLASSNOTREG: - sym = @symbol(REGDB_E_CLASSNOTREG); - typ = @symbol(classNotRegisteredSignal); - break; + case REGDB_E_CLASSNOTREG: + sym = @symbol(REGDB_E_CLASSNOTREG); + typ = @symbol(classNotRegisteredSignal); + break; #endif #ifdef CLASS_E_NOAGGREGATION - case CLASS_E_NOAGGREGATION: - sym = @symbol(CLASS_E_NOAGGREGATION); - typ = @symbol(noAggregationSignal); - break; + case CLASS_E_NOAGGREGATION: + sym = @symbol(CLASS_E_NOAGGREGATION); + typ = @symbol(noAggregationSignal); + break; #endif #ifdef DISP_E_UNKNOWNNAME - case DISP_E_UNKNOWNNAME: - sym = @symbol(DISP_E_UNKNOWNNAME); - typ = @symbol(unknownNameSignal); - break; + case DISP_E_UNKNOWNNAME: + sym = @symbol(DISP_E_UNKNOWNNAME); + typ = @symbol(unknownNameSignal); + break; #endif #ifdef OLEOBJ_E_NOVERBS - case OLEOBJ_E_NOVERBS: - sym = @symbol(OLEOBJ_E_NOVERBS); - typ = @symbol(noVerbsSignal); - break; -#endif - - default: - break; - } + case OLEOBJ_E_NOVERBS: + sym = @symbol(OLEOBJ_E_NOVERBS); + typ = @symbol(noVerbsSignal); + break; +#endif + + default: + break; + } } } %}. @@ -2427,207 +2442,212 @@ */ #ifdef ERROR_INVALID_FUNCTION if (sym == @symbol(ERROR_INVALID_FUNCTION)) { - RETURN ( __mkSmallInteger(ERROR_INVALID_FUNCTION) ); + RETURN ( __mkSmallInteger(ERROR_INVALID_FUNCTION) ); } #endif #ifdef ERROR_BAD_FORMAT if (sym == @symbol(ERROR_BAD_FORMAT)) { - RETURN ( __mkSmallInteger(ERROR_BAD_FORMAT) ); + RETURN ( __mkSmallInteger(ERROR_BAD_FORMAT) ); } #endif #ifdef ERROR_FILE_NOT_FOUND if (sym == @symbol(ERROR_FILE_NOT_FOUND)) { - RETURN ( __mkSmallInteger(ERROR_FILE_NOT_FOUND) ); + RETURN ( __mkSmallInteger(ERROR_FILE_NOT_FOUND) ); } #endif #ifdef ERROR_PATH_NOT_FOUND if (sym == @symbol(ERROR_PATH_NOT_FOUND)) { - RETURN ( __mkSmallInteger(ERROR_PATH_NOT_FOUND) ); + RETURN ( __mkSmallInteger(ERROR_PATH_NOT_FOUND) ); } #endif #ifdef ERROR_TOO_MANY_OPEN_FILES if (sym == @symbol(ERROR_TOO_MANY_OPEN_FILES)) { - RETURN ( __mkSmallInteger(ERROR_TOO_MANY_OPEN_FILES) ); + RETURN ( __mkSmallInteger(ERROR_TOO_MANY_OPEN_FILES) ); } #endif #ifdef ERROR_OPEN_FAILED if (sym == @symbol(ERROR_OPEN_FAILED)) { - RETURN ( __mkSmallInteger(ERROR_OPEN_FAILED) ); + RETURN ( __mkSmallInteger(ERROR_OPEN_FAILED) ); } #endif #ifdef ERROR_ACCESS_DENIED if (sym == @symbol(ERROR_ACCESS_DENIED)) { - RETURN ( __mkSmallInteger(ERROR_ACCESS_DENIED) ); + RETURN ( __mkSmallInteger(ERROR_ACCESS_DENIED) ); } #endif #ifdef ERROR_INVALID_HANDLE if (sym == @symbol(ERROR_INVALID_HANDLE)) { - RETURN ( __mkSmallInteger(ERROR_INVALID_HANDLE) ); + RETURN ( __mkSmallInteger(ERROR_INVALID_HANDLE) ); } #endif #ifdef ERROR_NOT_ENOUGH_MEMORY if (sym == @symbol(ERROR_NOT_ENOUGH_MEMORY)) { - RETURN ( __mkSmallInteger(ERROR_NOT_ENOUGH_MEMORY) ); + RETURN ( __mkSmallInteger(ERROR_NOT_ENOUGH_MEMORY) ); + } +#endif +#ifdef ERROR_NO_SYSTEM_RESOURCES + if (sym == @symbol(ERROR_NO_SYSTEM_RESOURCES)) { + RETURN ( __mkSmallInteger(ERROR_NO_SYSTEM_RESOURCES) ); } #endif #ifdef ERROR_INVALID_ACCESS if (sym == @symbol(ERROR_INVALID_ACCESS)) { - RETURN ( __mkSmallInteger(ERROR_INVALID_ACCESS) ); + RETURN ( __mkSmallInteger(ERROR_INVALID_ACCESS) ); } #endif #ifdef ERROR_INVALID_DATA if (sym == @symbol(ERROR_INVALID_DATA)) { - RETURN ( __mkSmallInteger(ERROR_INVALID_DATA) ); + RETURN ( __mkSmallInteger(ERROR_INVALID_DATA) ); } #endif #ifdef ERROR_INVALID_NAME if (sym == @symbol(ERROR_INVALID_NAME)) { - RETURN ( __mkSmallInteger(ERROR_INVALID_NAME) ); + RETURN ( __mkSmallInteger(ERROR_INVALID_NAME) ); } #endif #ifdef ERROR_ARENA_TRASHED if (sym == @symbol(ERROR_ARENA_TRASHED)) { - RETURN ( __mkSmallInteger(ERROR_ARENA_TRASHED) ); + RETURN ( __mkSmallInteger(ERROR_ARENA_TRASHED) ); } #endif #ifdef ERROR_OUTOFMEMORY if (sym == @symbol(ERROR_OUTOFMEMORY)) { - RETURN ( __mkSmallInteger(ERROR_OUTOFMEMORY) ); + RETURN ( __mkSmallInteger(ERROR_OUTOFMEMORY) ); } #endif #ifdef ERROR_BROKEN_PIPE if (sym == @symbol(ERROR_BROKEN_PIPE)) { - RETURN ( __mkSmallInteger(ERROR_BROKEN_PIPE) ); + RETURN ( __mkSmallInteger(ERROR_BROKEN_PIPE) ); } #endif #ifdef ERROR_GEN_FAILURE if (sym == @symbol(ERROR_GEN_FAILURE)) { - RETURN ( __mkSmallInteger(ERROR_GEN_FAILURE) ); + RETURN ( __mkSmallInteger(ERROR_GEN_FAILURE) ); } #endif #ifdef ERROR_WRITE_PROTECT if (sym == @symbol(ERROR_WRITE_PROTECT)) { - RETURN ( __mkSmallInteger(ERROR_WRITE_PROTECT) ); + RETURN ( __mkSmallInteger(ERROR_WRITE_PROTECT) ); } #endif #ifdef ERROR_WRITE_FAULT if (sym == @symbol(ERROR_WRITE_FAULT)) { - RETURN ( __mkSmallInteger(ERROR_WRITE_FAULT) ); + RETURN ( __mkSmallInteger(ERROR_WRITE_FAULT) ); } #endif #ifdef ERROR_READ_FAULT if (sym == @symbol(ERROR_READ_FAULT)) { - RETURN ( __mkSmallInteger(ERROR_READ_FAULT) ); + RETURN ( __mkSmallInteger(ERROR_READ_FAULT) ); } #endif #ifdef ERROR_HANDLE_DISK_FULL if (sym == @symbol(ERROR_HANDLE_DISK_FULL)) { - RETURN ( __mkSmallInteger(ERROR_HANDLE_DISK_FULL) ); + RETURN ( __mkSmallInteger(ERROR_HANDLE_DISK_FULL) ); } #endif #ifdef ERROR_DISK_FULL if (sym == @symbol(ERROR_DISK_FULL)) { - RETURN ( __mkSmallInteger(ERROR_DISK_FULL) ); + RETURN ( __mkSmallInteger(ERROR_DISK_FULL) ); } #endif #ifdef ERROR_ERROR_SHARING_VIOLATION if (sym == @symbol(ERROR_ERROR_SHARING_VIOLATION)) { - RETURN ( __mkSmallInteger(ERROR_ERROR_SHARING_VIOLATION) ); + RETURN ( __mkSmallInteger(ERROR_ERROR_SHARING_VIOLATION) ); } #endif #ifdef ERROR_LOCK_VIOLATION if (sym == @symbol(ERROR_LOCK_VIOLATION)) { - RETURN ( __mkSmallInteger(ERROR_LOCK_VIOLATION) ); + RETURN ( __mkSmallInteger(ERROR_LOCK_VIOLATION) ); } #endif #ifdef ERROR_INVALID_PARAMETER if (sym == @symbol(ERROR_INVALID_PARAMETER)) { - RETURN ( __mkSmallInteger(ERROR_INVALID_PARAMETER) ); + RETURN ( __mkSmallInteger(ERROR_INVALID_PARAMETER) ); } #endif #ifdef ERROR_NET_WRITE_FAULT if (sym == @symbol(ERROR_NET_WRITE_FAULT)) { - RETURN ( __mkSmallInteger(ERROR_NET_WRITE_FAULT) ); + RETURN ( __mkSmallInteger(ERROR_NET_WRITE_FAULT) ); } #endif #ifdef ERROR_NOT_SUPPORTED if (sym == @symbol(ERROR_NOT_SUPPORTED)) { - RETURN ( __mkSmallInteger(ERROR_NOT_SUPPORTED) ); + RETURN ( __mkSmallInteger(ERROR_NOT_SUPPORTED) ); } #endif #ifdef ERROR_REM_NOT_LIST if (sym == @symbol(ERROR_REM_NOT_LIST)) { - RETURN ( __mkSmallInteger(ERROR_REM_NOT_LIST) ); + RETURN ( __mkSmallInteger(ERROR_REM_NOT_LIST) ); } #endif #ifdef ERROR_NETWORK_ACCESS_DENIED if (sym == @symbol(ERROR_NETWORK_ACCESS_DENIED)) { - RETURN ( __mkSmallInteger(ERROR_NETWORK_ACCESS_DENIED) ); + RETURN ( __mkSmallInteger(ERROR_NETWORK_ACCESS_DENIED) ); } #endif #ifdef ERROR_DUP_NAME if (sym == @symbol(ERROR_DUP_NAME)) { - RETURN ( __mkSmallInteger(ERROR_DUP_NAME) ); + RETURN ( __mkSmallInteger(ERROR_DUP_NAME) ); } #endif #ifdef ERROR_BAD_NETPATH if (sym == @symbol(ERROR_BAD_NETPATH)) { - RETURN ( __mkSmallInteger(ERROR_BAD_NETPATH) ); + RETURN ( __mkSmallInteger(ERROR_BAD_NETPATH) ); } #endif #ifdef ERROR_NETWORK_BUSY if (sym == @symbol(ERROR_NETWORK_BUSY)) { - RETURN ( __mkSmallInteger(ERROR_NETWORK_BUSY) ); + RETURN ( __mkSmallInteger(ERROR_NETWORK_BUSY) ); } #endif #ifdef ERROR_DRIVE_LOCKED if (sym == @symbol(ERROR_DRIVE_LOCKED)) { - RETURN ( __mkSmallInteger(ERROR_DRIVE_LOCKED) ); + RETURN ( __mkSmallInteger(ERROR_DRIVE_LOCKED) ); } #endif #ifdef ERROR_INVALID_DRIVE if (sym == @symbol(ERROR_INVALID_DRIVE)) { - RETURN ( __mkSmallInteger(ERROR_INVALID_DRIVE) ); + RETURN ( __mkSmallInteger(ERROR_INVALID_DRIVE) ); } #endif #ifdef ERROR_WRONG_DISK if (sym == @symbol(ERROR_WRONG_DISK)) { - RETURN ( __mkSmallInteger(ERROR_WRONG_DISK) ); + RETURN ( __mkSmallInteger(ERROR_WRONG_DISK) ); } #endif #ifdef ERROR_CURRENT_DIRECTORY if (sym == @symbol(ERROR_CURRENT_DIRECTORY)) { - RETURN ( __mkSmallInteger(ERROR_CURRENT_DIRECTORY) ); + RETURN ( __mkSmallInteger(ERROR_CURRENT_DIRECTORY) ); } #endif #ifdef ERROR_CANNOT_MAKE if (sym == @symbol(ERROR_CANNOT_MAKE)) { - RETURN ( __mkSmallInteger(ERROR_CANNOT_MAKE) ); + RETURN ( __mkSmallInteger(ERROR_CANNOT_MAKE) ); } #endif #ifdef ERROR_NO_MORE_FILES if (sym == @symbol(ERROR_NO_MORE_FILES)) { - RETURN ( __mkSmallInteger(ERROR_NO_MORE_FILES) ); + RETURN ( __mkSmallInteger(ERROR_NO_MORE_FILES) ); } #endif #ifdef ERROR_NOT_READY if (sym == @symbol(ERROR_NOT_READY)) { - RETURN ( __mkSmallInteger(ERROR_NOT_READY) ); + RETURN ( __mkSmallInteger(ERROR_NOT_READY) ); } #endif #ifdef ERROR_NOT_DOS_DISK if (sym == @symbol(ERROR_NOT_DOS_DISK)) { - RETURN ( __mkSmallInteger(ERROR_NOT_DOS_DISK) ); + RETURN ( __mkSmallInteger(ERROR_NOT_DOS_DISK) ); } #endif #ifdef ERROR_OUT_OF_PAPER if (sym == @symbol(ERROR_OUT_OF_PAPER)) { - RETURN ( __mkSmallInteger(ERROR_OUT_OF_PAPER) ); + RETURN ( __mkSmallInteger(ERROR_OUT_OF_PAPER) ); } #endif #ifdef ERROR_PRINTQ_FULL if (sym == @symbol(ERROR_PRINTQ_FULL)) { - RETURN ( __mkSmallInteger(ERROR_PRINTQ_FULL) ); + RETURN ( __mkSmallInteger(ERROR_PRINTQ_FULL) ); } #endif @@ -2636,229 +2656,229 @@ */ #ifdef EPERM if (sym == @symbol(EPERM)) { - RETURN ( __mkSmallInteger(EPERM) ); + RETURN ( __mkSmallInteger(EPERM) ); } #endif #ifdef ENOENT if (sym == @symbol(ENOENT)) { - RETURN ( __mkSmallInteger(ENOENT) ); + RETURN ( __mkSmallInteger(ENOENT) ); } #endif #ifdef ESRCH if (sym == @symbol(ESRCH)) { - RETURN ( __mkSmallInteger(ESRCH) ); + RETURN ( __mkSmallInteger(ESRCH) ); } #endif #ifdef EINTR if (sym == @symbol(EINTR)) { - RETURN ( __mkSmallInteger(EINTR) ); + RETURN ( __mkSmallInteger(EINTR) ); } #endif #ifdef EIO if (sym == @symbol(EIO)) { - RETURN ( __mkSmallInteger(EIO) ); + RETURN ( __mkSmallInteger(EIO) ); } #endif #ifdef ENXIO if (sym == @symbol(ENXIO)) { - RETURN ( __mkSmallInteger(ENXIO) ); + RETURN ( __mkSmallInteger(ENXIO) ); } #endif #ifdef E2BIG if (sym == @symbol(E2BIG)) { - RETURN ( __mkSmallInteger(E2BIG) ); + RETURN ( __mkSmallInteger(E2BIG) ); } #endif #ifdef ENOEXEC if (sym == @symbol(ENOEXEC)) { - RETURN ( __mkSmallInteger(ENOEXEC) ); + RETURN ( __mkSmallInteger(ENOEXEC) ); } #endif #ifdef EBADF if (sym == @symbol(EBADF)) { - RETURN ( __mkSmallInteger(EBADF) ); + RETURN ( __mkSmallInteger(EBADF) ); } #endif #ifdef ECHILD if (sym == @symbol(ECHILD)) { - RETURN ( __mkSmallInteger(ECHILD) ); + RETURN ( __mkSmallInteger(ECHILD) ); } #endif #if defined(EAGAIN) if (sym == @symbol(EAGAIN)) { - RETURN ( __mkSmallInteger(EAGAIN) ); + RETURN ( __mkSmallInteger(EAGAIN) ); } #endif #ifdef ENOMEM if (sym == @symbol(ENOMEM)) { - RETURN ( __mkSmallInteger(ENOMEM) ); + RETURN ( __mkSmallInteger(ENOMEM) ); } #endif #ifdef EACCES if (sym == @symbol(EACCES)) { - RETURN ( __mkSmallInteger(EACCES) ); + RETURN ( __mkSmallInteger(EACCES) ); } #endif #ifdef EFAULT if (sym == @symbol(EFAULT)) { - RETURN ( __mkSmallInteger(EFAULT) ); + RETURN ( __mkSmallInteger(EFAULT) ); } #endif #ifdef EBUSY if (sym == @symbol(EBUSY)) { - RETURN ( __mkSmallInteger(EBUSY) ); + RETURN ( __mkSmallInteger(EBUSY) ); } #endif #ifdef EXDEV if (sym == @symbol(EXDEV)) { - RETURN ( __mkSmallInteger(EXDEV) ); + RETURN ( __mkSmallInteger(EXDEV) ); } #endif #ifdef ENODEV if (sym == @symbol(ENODEV)) { - RETURN ( __mkSmallInteger(ENODEV) ); + RETURN ( __mkSmallInteger(ENODEV) ); } #endif #ifdef ENOTDIR if (sym == @symbol(ENOTDIR)) { - RETURN ( __mkSmallInteger(ENOTDIR) ); + RETURN ( __mkSmallInteger(ENOTDIR) ); } #endif #ifdef EISDIR if (sym == @symbol(EISDIR)) { - RETURN ( __mkSmallInteger(EISDIR) ); + RETURN ( __mkSmallInteger(EISDIR) ); } #endif #ifdef EINVAL if (sym == @symbol(EINVAL)) { - RETURN ( __mkSmallInteger(EINVAL) ); + RETURN ( __mkSmallInteger(EINVAL) ); } #endif #ifdef ENFILE if (sym == @symbol(ENFILE)) { - RETURN ( __mkSmallInteger(ENFILE) ); + RETURN ( __mkSmallInteger(ENFILE) ); } #endif #ifdef EMFILE if (sym == @symbol(EMFILE)) { - RETURN ( __mkSmallInteger(EMFILE) ); + RETURN ( __mkSmallInteger(EMFILE) ); } #endif #ifdef ENOTTY if (sym == @symbol(ENOTTY)) { - RETURN ( __mkSmallInteger(ENOTTY) ); + RETURN ( __mkSmallInteger(ENOTTY) ); } #endif #ifdef EFBIG if (sym == @symbol(EFBIG)) { - RETURN ( __mkSmallInteger(EFBIG) ); + RETURN ( __mkSmallInteger(EFBIG) ); } #endif #ifdef ENOSPC if (sym == @symbol(ENOSPC)) { - RETURN ( __mkSmallInteger(ENOSPC) ); + RETURN ( __mkSmallInteger(ENOSPC) ); } #endif #ifdef ESPIPE if (sym == @symbol(ESPIPE)) { - RETURN ( __mkSmallInteger(ESPIPE) ); + RETURN ( __mkSmallInteger(ESPIPE) ); } #endif #ifdef EROFS if (sym == @symbol(EROFS)) { - RETURN ( __mkSmallInteger(EROFS) ); + RETURN ( __mkSmallInteger(EROFS) ); } #endif #ifdef EMLINK if (sym == @symbol(EMLINK)) { - RETURN ( __mkSmallInteger(EMLINK) ); + RETURN ( __mkSmallInteger(EMLINK) ); } #endif #ifdef EPIPE if (sym == @symbol(EPIPE)) { - RETURN ( __mkSmallInteger(EPIPE) ); + RETURN ( __mkSmallInteger(EPIPE) ); } #endif #ifdef EDOM if (sym == @symbol(EDOM)) { - RETURN ( __mkSmallInteger(EDOM) ); + RETURN ( __mkSmallInteger(EDOM) ); } #endif #ifdef ERANGE if (sym == @symbol(ERANGE)) { - RETURN ( __mkSmallInteger(ERANGE) ); + RETURN ( __mkSmallInteger(ERANGE) ); } #endif #ifdef EDEADLK if (sym == @symbol(EDEADLK)) { - RETURN ( __mkSmallInteger(EDEADLK) ); + RETURN ( __mkSmallInteger(EDEADLK) ); } #endif #ifdef ENAMETOOLONG if (sym == @symbol(ENAMETOOLONG)) { - RETURN ( __mkSmallInteger(ENAMETOOLONG) ); + RETURN ( __mkSmallInteger(ENAMETOOLONG) ); } #endif #ifdef ENOLCK if (sym == @symbol(ENOLCK)) { - RETURN ( __mkSmallInteger(ENOLCK) ); + RETURN ( __mkSmallInteger(ENOLCK) ); } #endif #ifdef ENOSYS if (sym == @symbol(ENOSYS)) { - RETURN ( __mkSmallInteger(ENOSYS) ); + RETURN ( __mkSmallInteger(ENOSYS) ); } #endif #ifdef ENOTEMPTY if (sym == @symbol(ENOTEMPTY)) { - RETURN ( __mkSmallInteger(ENOTEMPTY) ); + RETURN ( __mkSmallInteger(ENOTEMPTY) ); } #endif #ifdef EEXIST if (sym == @symbol(EEXIST)) { - RETURN ( __mkSmallInteger(EEXIST) ); + RETURN ( __mkSmallInteger(EEXIST) ); } #endif #ifdef EILSEQ if (sym == @symbol(EILSEQ)) { - RETURN ( __mkSmallInteger(EILSEQ) ); + RETURN ( __mkSmallInteger(EILSEQ) ); } #endif @@ -2867,13 +2887,13 @@ */ #ifdef ENOTBLK if (sym == @symbol(ENOTBLK)) { - RETURN ( __mkSmallInteger(ENOTBLK) ); + RETURN ( __mkSmallInteger(ENOTBLK) ); } #endif #ifdef ETXTBSY if (sym == @symbol(ETXTBSY)) { - RETURN ( __mkSmallInteger(ETXTBSY) ); + RETURN ( __mkSmallInteger(ETXTBSY) ); } #endif @@ -2882,19 +2902,19 @@ */ #ifdef EWOULDBLOCK if (sym == @symbol(EWOULDBLOCK)) { - RETURN ( __mkSmallInteger(EWOULDBLOCK) ); + RETURN ( __mkSmallInteger(EWOULDBLOCK) ); } #endif #ifdef ENOMSG if (sym == @symbol(ENOMSG)) { - RETURN ( __mkSmallInteger(ENOMSG) ); + RETURN ( __mkSmallInteger(ENOMSG) ); } #endif #ifdef ELOOP if (sym == @symbol(ELOOP)) { - RETURN ( __mkSmallInteger(ELOOP) ); + RETURN ( __mkSmallInteger(ELOOP) ); } #endif @@ -2903,31 +2923,31 @@ */ #ifdef ETIME if (sym == @symbol(ETIME)) { - RETURN ( __mkSmallInteger(ETIME) ); + RETURN ( __mkSmallInteger(ETIME) ); } #endif #ifdef ENOSR if (sym == @symbol(ENOSR)) { - RETURN ( __mkSmallInteger(ENOSR) ); + RETURN ( __mkSmallInteger(ENOSR) ); } #endif #ifdef ENOSTR if (sym == @symbol(ENOSTR)) { - RETURN ( __mkSmallInteger(ENOSTR) ); + RETURN ( __mkSmallInteger(ENOSTR) ); } #endif #ifdef ECOMM if (sym == @symbol(ECOMM)) { - RETURN ( __mkSmallInteger(ECOMM) ); + RETURN ( __mkSmallInteger(ECOMM) ); } #endif #ifdef EPROTO if (sym == @symbol(EPROTO)) { - RETURN ( __mkSmallInteger(EPROTO) ); + RETURN ( __mkSmallInteger(EPROTO) ); } #endif @@ -2936,13 +2956,13 @@ */ #ifdef ESTALE if (sym == @symbol(ESTALE)) { - RETURN ( __mkSmallInteger(ESTALE) ); + RETURN ( __mkSmallInteger(ESTALE) ); } #endif #ifdef EREMOTE if (sym == @symbol(EREMOTE)) { - RETURN ( __mkSmallInteger(EREMOTE) ); + RETURN ( __mkSmallInteger(EREMOTE) ); } #endif @@ -2951,157 +2971,157 @@ */ #ifdef EINPROGRESS if (sym == @symbol(EINPROGRESS)) { - RETURN ( __mkSmallInteger(EINPROGRESS) ); + RETURN ( __mkSmallInteger(EINPROGRESS) ); } #endif #ifdef EALREADY if (sym == @symbol(EALREADY)) { - RETURN ( __mkSmallInteger(EALREADY) ); + RETURN ( __mkSmallInteger(EALREADY) ); } #endif #ifdef ENOTSOCK if (sym == @symbol(ENOTSOCK)) { - RETURN ( __mkSmallInteger(ENOTSOCK) ); + RETURN ( __mkSmallInteger(ENOTSOCK) ); } #endif #ifdef EDESTADDRREQ if (sym == @symbol(EDESTADDRREQ)) { - RETURN ( __mkSmallInteger(EDESTADDRREQ) ); + RETURN ( __mkSmallInteger(EDESTADDRREQ) ); } #endif #ifdef EMSGSIZE if (sym == @symbol(EMSGSIZE)) { - RETURN ( __mkSmallInteger(EMSGSIZE) ); + RETURN ( __mkSmallInteger(EMSGSIZE) ); } #endif #ifdef EPROTOTYPE if (sym == @symbol(EPROTOTYPE)) { - RETURN ( __mkSmallInteger(EPROTOTYPE) ); + RETURN ( __mkSmallInteger(EPROTOTYPE) ); } #endif #ifdef ENOPROTOOPT if (sym == @symbol(ENOPROTOOPT)) { - RETURN ( __mkSmallInteger(ENOPROTOOPT) ); + RETURN ( __mkSmallInteger(ENOPROTOOPT) ); } #endif #ifdef EPROTONOSUPPORT if (sym == @symbol(EPROTONOSUPPORT)) { - RETURN ( __mkSmallInteger(EPROTONOSUPPORT) ); + RETURN ( __mkSmallInteger(EPROTONOSUPPORT) ); } #endif #ifdef ESOCKTNOSUPPORT if (sym == @symbol(ESOCKTNOSUPPORT)) { - RETURN ( __mkSmallInteger(ESOCKTNOSUPPORT) ); + RETURN ( __mkSmallInteger(ESOCKTNOSUPPORT) ); } #endif #ifdef EOPNOTSUPP if (sym == @symbol(EOPNOTSUPP)) { - RETURN ( __mkSmallInteger(EOPNOTSUPP) ); + RETURN ( __mkSmallInteger(EOPNOTSUPP) ); } #endif #ifdef EPFNOSUPPORT if (sym == @symbol(EPFNOSUPPORT)) { - RETURN ( __mkSmallInteger(EPFNOSUPPORT) ); + RETURN ( __mkSmallInteger(EPFNOSUPPORT) ); } #endif #ifdef EAFNOSUPPORT if (sym == @symbol(EAFNOSUPPORT)) { - RETURN ( __mkSmallInteger(EAFNOSUPPORT) ); + RETURN ( __mkSmallInteger(EAFNOSUPPORT) ); } #endif #ifdef EADDRINUSE if (sym == @symbol(EADDRINUSE)) { - RETURN ( __mkSmallInteger(EADDRINUSE) ); + RETURN ( __mkSmallInteger(EADDRINUSE) ); } #endif #ifdef EADDRNOTAVAIL if (sym == @symbol(EADDRNOTAVAIL)) { - RETURN ( __mkSmallInteger(EADDRNOTAVAIL) ); + RETURN ( __mkSmallInteger(EADDRNOTAVAIL) ); } #endif #ifdef ETIMEDOUT if (sym == @symbol(ETIMEDOUT)) { - RETURN ( __mkSmallInteger(ETIMEDOUT) ); + RETURN ( __mkSmallInteger(ETIMEDOUT) ); } #endif #ifdef ECONNREFUSED if (sym == @symbol(ECONNREFUSED)) { - RETURN ( __mkSmallInteger(ECONNREFUSED) ); + RETURN ( __mkSmallInteger(ECONNREFUSED) ); } #endif #ifdef ENETDOWN if (sym == @symbol(ENETDOWN)) { - RETURN ( __mkSmallInteger(ENETDOWN) ); + RETURN ( __mkSmallInteger(ENETDOWN) ); } #endif #ifdef ENETUNREACH if (sym == @symbol(ENETUNREACH)) { - RETURN ( __mkSmallInteger(ENETUNREACH) ); + RETURN ( __mkSmallInteger(ENETUNREACH) ); } #endif #ifdef ENETRESET if (sym == @symbol(ENETRESET)) { - RETURN ( __mkSmallInteger(ENETRESET) ); + RETURN ( __mkSmallInteger(ENETRESET) ); } #endif #ifdef ECONNABORTED if (sym == @symbol(ECONNABORTED)) { - RETURN ( __mkSmallInteger(ECONNABORTED) ); + RETURN ( __mkSmallInteger(ECONNABORTED) ); } #endif #ifdef ECONNRESET if (sym == @symbol(ECONNRESET)) { - RETURN ( __mkSmallInteger(ECONNRESET) ); + RETURN ( __mkSmallInteger(ECONNRESET) ); } #endif #ifdef EISCONN if (sym == @symbol(EISCONN)) { - RETURN ( __mkSmallInteger(EISCONN) ); + RETURN ( __mkSmallInteger(EISCONN) ); } #endif #ifdef ENOTCONN if (sym == @symbol(ENOTCONN)) { - RETURN ( __mkSmallInteger(ENOTCONN) ); + RETURN ( __mkSmallInteger(ENOTCONN) ); } #endif #ifdef ESHUTDOWN if (sym == @symbol(ESHUTDOWN)) { - RETURN ( __mkSmallInteger(ESHUTDOWN) ); + RETURN ( __mkSmallInteger(ESHUTDOWN) ); } #endif #ifdef EHOSTDOWN if (sym == @symbol(EHOSTDOWN)) { - RETURN ( __mkSmallInteger(EHOSTDOWN) ); + RETURN ( __mkSmallInteger(EHOSTDOWN) ); } #endif #ifdef EHOSTUNREACH if (sym == @symbol(EHOSTUNREACH)) { - RETURN ( __mkSmallInteger(EHOSTUNREACH) ); + RETURN ( __mkSmallInteger(EHOSTUNREACH) ); } #endif /* @@ -3109,92 +3129,92 @@ */ #ifdef WSAEINTR if (sym == @symbol(WSAEINTR)) { - RETURN ( __mkSmallInteger(WSAEINTR) ); + RETURN ( __mkSmallInteger(WSAEINTR) ); } #endif #ifdef WSAEBADF if (sym == @symbol(WSAEBADF)) { - RETURN ( __mkSmallInteger(WSAEBADF) ); + RETURN ( __mkSmallInteger(WSAEBADF) ); } #endif #ifdef WSAEACCESS if (sym == @symbol(WSAEACCESS)) { - RETURN ( __mkSmallInteger(WSAEACCESS) ); + RETURN ( __mkSmallInteger(WSAEACCESS) ); } #endif #ifdef WSAEFAULT if (sym == @symbol(WSAEFAULT)) { - RETURN ( __mkSmallInteger(WSAEFAULT) ); + RETURN ( __mkSmallInteger(WSAEFAULT) ); } #endif #ifdef WSAEINVAL if (sym == @symbol(WSAEINVAL)) { - RETURN ( __mkSmallInteger(WSAEINVAL) ); + RETURN ( __mkSmallInteger(WSAEINVAL) ); } #endif #ifdef WSAEMFILE if (sym == @symbol(WSAEMFILE)) { - RETURN ( __mkSmallInteger(WSAEMFILE) ); + RETURN ( __mkSmallInteger(WSAEMFILE) ); } #endif #ifdef WSAEWOULDBLOCK if (sym == @symbol(WSAEWOULDBLOCK)) { - RETURN ( __mkSmallInteger(WSAEWOULDBLOCK) ); + RETURN ( __mkSmallInteger(WSAEWOULDBLOCK) ); } #endif #ifdef WSAEINPROGRESS if (sym == @symbol(WSAEINPROGRESS)) { - RETURN ( __mkSmallInteger(WSAEINPROGRESS) ); + RETURN ( __mkSmallInteger(WSAEINPROGRESS) ); } #endif #ifdef WSAEALREADY if (sym == @symbol(WSAEALREADY)) { - RETURN ( __mkSmallInteger(WSAEALREADY) ); + RETURN ( __mkSmallInteger(WSAEALREADY) ); } #endif #ifdef WSAENOTSOCK if (sym == @symbol(WSAENOTSOCK)) { - RETURN ( __mkSmallInteger(WSAENOTSOCK) ); + RETURN ( __mkSmallInteger(WSAENOTSOCK) ); } #endif #ifdef WSAEPROTONOSUPPORT if (sym == @symbol(WSAEPROTONOSUPPORT)) { - RETURN ( __mkSmallInteger(WSAEPROTONOSUPPORT) ); + RETURN ( __mkSmallInteger(WSAEPROTONOSUPPORT) ); } #endif #ifdef WSAESOCKTNOSUPPORT if (sym == @symbol(WSAESOCKTNOSUPPORT)) { - RETURN ( __mkSmallInteger(WSAESOCKTNOSUPPORT) ); + RETURN ( __mkSmallInteger(WSAESOCKTNOSUPPORT) ); } #endif #ifdef E_NOINTERFACE if (sym == @symbol(E_NOINTERFACE)) { - RETURN ( __MKUINT(E_NOINTERFACE) ); + RETURN ( __MKUINT(E_NOINTERFACE) ); } #endif #ifdef CO_E_NOTINITIALIZED if (sym == @symbol(CO_E_NOTINITIALIZED)) { - RETURN ( __MKUINT(CO_E_NOTINITIALIZED) ); + RETURN ( __MKUINT(CO_E_NOTINITIALIZED) ); } #endif #ifdef REGDB_E_CLASSNOTREG if (sym == @symbol(REGDB_E_CLASSNOTREG)) { - RETURN ( __MKUINT(REGDB_E_CLASSNOTREG) ); + RETURN ( __MKUINT(REGDB_E_CLASSNOTREG) ); } #endif #ifdef CLASS_E_NOAGGREGATION if (sym == @symbol(CLASS_E_NOAGGREGATION)) { - RETURN ( __MKUINT(CLASS_E_NOAGGREGATION) ); + RETURN ( __MKUINT(CLASS_E_NOAGGREGATION) ); } #endif #ifdef DISP_E_UNKNOWNNAME if (sym == @symbol(DISP_E_UNKNOWNNAME)) { - RETURN ( __MKUINT(DISP_E_UNKNOWNNAME) ); + RETURN ( __MKUINT(DISP_E_UNKNOWNNAME) ); } #endif #ifdef OLEOBJ_E_NOVERBS if (sym == @symbol(OLEOBJ_E_NOVERBS)) { - RETURN ( __MKUINT(OLEOBJ_E_NOVERBS) ); + RETURN ( __MKUINT(OLEOBJ_E_NOVERBS) ); } #endif @@ -3256,56 +3276,56 @@ hasRedirection := (aCommandString isNil or:[aCommandString includesAny:'<>|']). hasRedirection ifFalse:[ - "/ test whether the commandString is an executable; - "/ then, no shell is required - cmdName := aCommandString withoutSeparators. - (cmdName notEmpty and:[(cmdName startsWith:$") not]) ifTrue:[ - |index file suffix| - - index := cmdName indexOfSeparatorStartingAt:1. - index ~~ 0 ifTrue:[ - args := cmdName copyFrom:(index+1). - cmdName := cmdName copyFrom:1 to:(index-1). - ] ifFalse:[ - args := ''. - ]. - - file := cmdName asFilename. - suffix := file suffix. - - suffix isEmptyOrNil ifTrue:[ - suffix := 'exe'. - file := file withSuffix:suffix. - ]. - - (file exists and:[suffix = 'exe' or:[suffix = 'com']]) ifTrue:[ - "/ is an executable, no shell required - path := file fullAlternativePathName. - ^ Array with:path with:aCommandString. + "/ test whether the commandString is an executable; + "/ then, no shell is required + cmdName := aCommandString withoutSeparators. + (cmdName notEmpty and:[(cmdName startsWith:$") not]) ifTrue:[ + |index file suffix| + + index := cmdName indexOfSeparatorStartingAt:1. + index ~~ 0 ifTrue:[ + args := cmdName copyFrom:(index+1). + cmdName := cmdName copyFrom:1 to:(index-1). + ] ifFalse:[ + args := ''. + ]. + + file := cmdName asFilename. + suffix := file suffix. + + suffix isEmptyOrNil ifTrue:[ + suffix := 'exe'. + file := file withSuffix:suffix. + ]. + + (file exists and:[suffix = 'exe' or:[suffix = 'com']]) ifTrue:[ + "/ is an executable, no shell required + path := file fullAlternativePathName. + ^ Array with:path with:aCommandString. "/ ^ Array with:path with:(path, ' ', args). - ]. - path := self pathOfCommand:cmdName. - path notNil ifTrue:[ - "/ is an executable, no shell required - ^ Array with:path with:aCommandString. + ]. + path := self pathOfCommand:cmdName. + path notNil ifTrue:[ + "/ is an executable, no shell required + ^ Array with:path with:aCommandString. "/ ^ Array with:path with:(path, ' ', args). - ]. - ]. + ]. + ]. ]. shell := self getEnvironment:'COMSPEC'. shell isNil ifTrue:[ - wDir := self getWindowsSystemDirectory asFilename. - shell := #('cmd.exe' 'command.com') detect:[:eachCommand| - (wDir / eachCommand) isExecutable - ] ifNone:[ - self error:'no cmd.exe available'. - ]. - shell := (wDir / shell) pathName. + wDir := self getWindowsSystemDirectory asFilename. + shell := #('cmd.exe' 'command.com') detect:[:eachCommand| + (wDir / eachCommand) isExecutable + ] ifNone:[ + self error:'no cmd.exe available'. + ]. + shell := (wDir / shell) pathName. ]. aCommandString isEmptyOrNil ifTrue:[ - ^ Array with:shell with:nil + ^ Array with:shell with:nil ]. ^ Array with:shell with:(' /c "' , aCommandString, '"') @@ -3324,48 +3344,48 @@ "Internal lowLevel entry for combined fork & exec for WIN32 If fork is false (chain a command): - execute the OS command specified by the argument, aCommandPath, with - arguments in argArray (no arguments, if nil). - If successful, this method does not return and smalltalk is gone. - If not successful, it does return. - Normal use is with forkForCommand. + execute the OS command specified by the argument, aCommandPath, with + arguments in argArray (no arguments, if nil). + If successful, this method does not return and smalltalk is gone. + If not successful, it does return. + Normal use is with forkForCommand. If fork is true (subprocess command execution): - fork a child to do the above. - The Win32ProcessHandle of the child process is returned; nil if the fork failed. + fork a child to do the above. + The Win32ProcessHandle of the child process is returned; nil if the fork failed. fdArray contains the filedescriptors, to be used for the child (if fork is true). - fdArray[1] = 15 -> use fd 15 as stdin. - If an element of the array is set to nil, the corresponding filedescriptor - will be closed for the child. - fdArray[0] == StdIn for child - fdArray[1] == StdOut for child - fdArray[2] == StdErr for child - on VMS, these must be channels as returned by createMailBox. + fdArray[1] = 15 -> use fd 15 as stdin. + If an element of the array is set to nil, the corresponding filedescriptor + will be closed for the child. + fdArray[0] == StdIn for child + fdArray[1] == StdOut for child + fdArray[2] == StdErr for child + on VMS, these must be channels as returned by createMailBox. NOTE that in WIN32 the fds are HANDLES. If newPgrp is true, the subprocess will be established in a new process group. - The processgroup will be equal to id. - newPgrp is not used on WIN32 and VMS systems." + The processgroup will be equal to id. + newPgrp is not used on WIN32 and VMS systems." |dirPath rslt| aDirectory notNil ifTrue:[ - dirPath := aDirectory asFilename asAbsoluteFilename osNameForDirectory. - (dirPath endsWith:':') ifTrue:[ - dirPath := dirPath , '\'. - ]. + dirPath := aDirectory asFilename asAbsoluteFilename osNameForDirectory. + (dirPath endsWith:':') ifTrue:[ + dirPath := dirPath , '\'. + ]. ]. rslt := self - primExec:aCommandPath - commandLine:argString - fileDescriptors:fdArray - fork:doFork - newPgrp:newPgrp - inPath:dirPath - createFlags:nil. + primExec:aCommandPath + commandLine:argString + fileDescriptors:fdArray + fork:doFork + newPgrp:newPgrp + inPath:dirPath + createFlags:nil. "/ 'created ' print. cmdLine print. ' -> ' print. rslt printCR. ^ rslt @@ -3394,34 +3414,34 @@ |nullStream in out err rslt auxFd| (in := anExternalInStream) isNil ifTrue:[ - nullStream := Filename nullDevice readWriteStream. - in := nullStream. + nullStream := Filename nullDevice readWriteStream. + in := nullStream. ]. (out := anExternalOutStream) isNil ifTrue:[ - nullStream isNil ifTrue:[nullStream := Filename nullDevice writeStream]. - out := nullStream. + nullStream isNil ifTrue:[nullStream := Filename nullDevice writeStream]. + out := nullStream. ]. (err := anExternalErrStream) isNil ifTrue:[ - err := out + err := out ]. anAuxiliaryStream notNil ifTrue:[ - auxFd := anAuxiliaryStream fileDescriptor + auxFd := anAuxiliaryStream fileDescriptor ]. rslt := self - exec:commandString - withArguments:argString - environment:anEvironmentDictionary - fileDescriptors:(Array with:in fileDescriptor - with:out fileDescriptor - with:err fileDescriptor - with:auxFd) - fork:true - newPgrp:true "/ false - inDirectory:dir. + exec:commandString + withArguments:argString + environment:anEvironmentDictionary + fileDescriptors:(Array with:in fileDescriptor + with:out fileDescriptor + with:err fileDescriptor + with:auxFd) + fork:true + newPgrp:true "/ false + inDirectory:dir. nullStream notNil ifTrue:[ - nullStream close. + nullStream close. ]. ^ rslt @@ -3444,7 +3464,7 @@ The following will no longer work. monitorPid has disappeared pid notNil ifTrue:[ - Processor monitorPid:pid action:[:OSstatus | sema signal ]. + Processor monitorPid:pid action:[:OSstatus | sema signal ]. ]. in close. out close. @@ -3468,28 +3488,28 @@ int status = -1; if (__isExternalAddressLike(aProcessId)) { - HANDLE handle = _HANDLEVal(aProcessId); - if (handle) { + HANDLE handle = _HANDLEVal(aProcessId); + if (handle) { #ifdef DO_WRAP_CALLS - do { - __threadErrno = 0; - endStatus = STX_API_CALL2( "WaitForSingleObject", WaitForSingleObject, handle, INFINITE); - } while ((endStatus < 0) && (__threadErrno == EINTR)); -#else - endStatus = WaitForSingleObject(handle , INFINITE); -#endif - if (endStatus != WAIT_FAILED) { - if (GetExitCodeProcess(handle,&endStatus)) { - status = endStatus; + do { + __threadErrno = 0; + endStatus = STX_API_CALL2( "WaitForSingleObject", WaitForSingleObject, handle, INFINITE); + } while ((endStatus < 0) && (__threadErrno == EINTR)); +#else + endStatus = WaitForSingleObject(handle , INFINITE); +#endif + if (endStatus != WAIT_FAILED) { + if (GetExitCodeProcess(handle,&endStatus)) { + status = endStatus; #ifdef PROCESSDEBUGWIN32 - console_fprintf(stderr, "getexitcode status = %d\n",status); - } else { - console_fprintf(stderr, "getexitcode failed.\n"); -#endif - } - } - } - RETURN ( __mkSmallInteger(status)); + console_fprintf(stderr, "getexitcode status = %d\n",status); + } else { + console_fprintf(stderr, "getexitcode failed.\n"); +#endif + } + } + } + RETURN ( __mkSmallInteger(status)); } %}. self primitiveFailed @@ -3503,52 +3523,52 @@ |path rentry rpath f fExt| aCommand asFilename isAbsolute ifTrue:[ - aCommand asFilename exists ifTrue:[ - ^ aCommand - ]. - ^ nil + aCommand asFilename exists ifTrue:[ + ^ aCommand + ]. + ^ nil ]. (aCommand includes:Filename separator) ifTrue:[ - path := Filename currentDirectory construct:aCommand. - (path exists - or:[(path withSuffix:'exe') exists]) ifTrue:[ - ^ path pathName - ]. + path := Filename currentDirectory construct:aCommand. + (path exists + or:[(path withSuffix:'exe') exists]) ifTrue:[ + ^ path pathName + ]. ]. path := self getEnvironment:'PATH'. (rentry := self registryEntry key: 'HKEY_CURRENT_USER\Environment') notNil ifTrue:[ - rpath := rentry valueNamed: 'PATH'. - rpath notNil ifTrue:[ - path := path , ';' , rpath - ]. + rpath := rentry valueNamed: 'PATH'. + rpath notNil ifTrue:[ + path := path , ';' , rpath + ]. ]. path notNil ifTrue:[ - (path asCollectionOfSubstringsSeparatedBy:(self pathSeparator)) do:[:path | - path isEmpty ifTrue:[ - f := aCommand asFilename - ] ifFalse:[ - f := path asFilename construct:aCommand. - ]. - f suffix isEmpty ifTrue:[ - self executableFileExtensions do:[:ext | - ext notEmpty ifTrue:[ - fExt := (f pathName , '.' , ext) asFilename. - ] ifFalse:[ - fExt := f. - ]. - fExt isExecutable ifTrue:[ - ^ fExt pathName - ]. - ]. - ] ifFalse:[ - f isExecutable ifTrue:[ - ^ f pathName - ]. - ]. - ]. + (path asCollectionOfSubstringsSeparatedBy:(self pathSeparator)) do:[:path | + path isEmpty ifTrue:[ + f := aCommand asFilename + ] ifFalse:[ + f := path asFilename construct:aCommand. + ]. + f suffix isEmpty ifTrue:[ + self executableFileExtensions do:[:ext | + ext notEmpty ifTrue:[ + fExt := (f pathName , '.' , ext) asFilename. + ] ifFalse:[ + fExt := f. + ]. + fExt isExecutable ifTrue:[ + ^ fExt pathName + ]. + ]. + ] ifFalse:[ + f isExecutable ifTrue:[ + ^ f pathName + ]. + ]. + ]. ]. ^ nil @@ -3587,149 +3607,149 @@ SECURITY_DESCRIPTOR securityDescriptor; if ((__isStringLike(commandPath) || (commandPath == nil)) && __isStringLike(commandLine)) { - if (commandPath != nil) { - cmdPath = __stringVal(commandPath); - } - cmdLine = __stringVal(commandLine); - - if (__isStringLike(dirName)) { - dir = __stringVal(dirName); - } - - /* - * create descriptors as req'd - */ - memset(&securityAttributes, 0, sizeof(securityAttributes)); - securityAttributes.nLength = sizeof(securityAttributes); - securityAttributes.bInheritHandle = TRUE; - - InitializeSecurityDescriptor(&securityDescriptor, SECURITY_DESCRIPTOR_REVISION); - SetSecurityDescriptorDacl(&securityDescriptor, -1, 0, 0); - - securityAttributes.lpSecurityDescriptor = &securityDescriptor; - memset(&lppiProcInfo, 0, sizeof (lppiProcInfo)); - - memset(&lpsiStartInfo, 0, sizeof(lpsiStartInfo)); - lpsiStartInfo.cb = sizeof(lpsiStartInfo); - lpsiStartInfo.lpReserved = NULL; - lpsiStartInfo.lpDesktop = NULL; - lpsiStartInfo.lpTitle = NULL; - lpsiStartInfo.dwX = 0; - lpsiStartInfo.dwY = 0; - lpsiStartInfo.dwXSize = 100; - lpsiStartInfo.dwYSize = 100; - lpsiStartInfo.dwXCountChars = 0; - lpsiStartInfo.dwYCountChars = 0; - lpsiStartInfo.dwFillAttribute = 0; - if (0 /*__isWinNT*/) { - lpsiStartInfo.dwFlags = STARTF_USESTDHANDLES; - lpsiStartInfo.wShowWindow = SW_SHOWDEFAULT; - } else { - lpsiStartInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES /*| STARTF_USEPOSITION*/; - lpsiStartInfo.wShowWindow = SW_HIDE /*SW_SHOWDEFAULT*/; - } - lpsiStartInfo.cbReserved2 = 0; - lpsiStartInfo.lpReserved2 = NULL; - lpsiStartInfo.hStdInput = NULL; - lpsiStartInfo.hStdOutput = NULL; - lpsiStartInfo.hStdError = NULL; - - /* - * set create process flags - * if the flags arg is nil, use common defaults; - * if non-nil, it must be a positive integer containing the fdwCreate bits. - */ - if (flagsOrNil != nil) { - fdwCreate = __longIntVal(flagsOrNil); - } else { - if (0 /* __isWinNT */) - fdwCreate = 0; //IDLE_PRIORITY_CLASS; - else - fdwCreate = CREATE_NEW_CONSOLE; //|IDLE_PRIORITY_CLASS; // DETACHED_PROCESS; // NORMAL_PRIORITY_CLASS ; - - if (newPgrp == true) { - fdwCreate |= CREATE_NEW_PROCESS_GROUP; - } - fdwCreate |= CREATE_DEFAULT_ERROR_MODE; - } - - if (fdArray == nil) { - lpsiStartInfo.hStdInput = (HANDLE) _get_osfhandle (0); - lpsiStartInfo.hStdOutput = (HANDLE) _get_osfhandle (1); - lpsiStartInfo.hStdError = (HANDLE) _get_osfhandle (2); - } else if (__isArrayLike(fdArray) && (__arraySize(fdArray) >= 3)) { - if (__ArrayInstPtr(fdArray)->a_element[0] != nil) { - if (__isExternalAddressLike(__ArrayInstPtr(fdArray)->a_element[0])) { - lpsiStartInfo.hStdInput = _HANDLEVal(__ArrayInstPtr(fdArray)->a_element[0]); - } else { - lpsiStartInfo.hStdInput = (HANDLE) _get_osfhandle (__intVal(__ArrayInstPtr(fdArray)->a_element[0])); - } - } - if (__ArrayInstPtr(fdArray)->a_element[1] != nil) { - if (__isExternalAddressLike(__ArrayInstPtr(fdArray)->a_element[1])) { - lpsiStartInfo.hStdOutput = _HANDLEVal(__ArrayInstPtr(fdArray)->a_element[1]); - } else { - lpsiStartInfo.hStdOutput = (HANDLE) _get_osfhandle (__intVal(__ArrayInstPtr(fdArray)->a_element[1])); - } - } - if (__ArrayInstPtr(fdArray)->a_element[2] != nil) { - if (__isExternalAddressLike(__ArrayInstPtr(fdArray)->a_element[2])) { - lpsiStartInfo.hStdError = _HANDLEVal(__ArrayInstPtr(fdArray)->a_element[2]); - } else { - lpsiStartInfo.hStdError = (HANDLE) _get_osfhandle (__intVal(__ArrayInstPtr(fdArray)->a_element[2])); - } - } + if (commandPath != nil) { + cmdPath = __stringVal(commandPath); + } + cmdLine = __stringVal(commandLine); + + if (__isStringLike(dirName)) { + dir = __stringVal(dirName); + } + + /* + * create descriptors as req'd + */ + memset(&securityAttributes, 0, sizeof(securityAttributes)); + securityAttributes.nLength = sizeof(securityAttributes); + securityAttributes.bInheritHandle = TRUE; + + InitializeSecurityDescriptor(&securityDescriptor, SECURITY_DESCRIPTOR_REVISION); + SetSecurityDescriptorDacl(&securityDescriptor, -1, 0, 0); + + securityAttributes.lpSecurityDescriptor = &securityDescriptor; + memset(&lppiProcInfo, 0, sizeof (lppiProcInfo)); + + memset(&lpsiStartInfo, 0, sizeof(lpsiStartInfo)); + lpsiStartInfo.cb = sizeof(lpsiStartInfo); + lpsiStartInfo.lpReserved = NULL; + lpsiStartInfo.lpDesktop = NULL; + lpsiStartInfo.lpTitle = NULL; + lpsiStartInfo.dwX = 0; + lpsiStartInfo.dwY = 0; + lpsiStartInfo.dwXSize = 100; + lpsiStartInfo.dwYSize = 100; + lpsiStartInfo.dwXCountChars = 0; + lpsiStartInfo.dwYCountChars = 0; + lpsiStartInfo.dwFillAttribute = 0; + if (0 /*__isWinNT*/) { + lpsiStartInfo.dwFlags = STARTF_USESTDHANDLES; + lpsiStartInfo.wShowWindow = SW_SHOWDEFAULT; + } else { + lpsiStartInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES /*| STARTF_USEPOSITION*/; + lpsiStartInfo.wShowWindow = SW_HIDE /*SW_SHOWDEFAULT*/; + } + lpsiStartInfo.cbReserved2 = 0; + lpsiStartInfo.lpReserved2 = NULL; + lpsiStartInfo.hStdInput = NULL; + lpsiStartInfo.hStdOutput = NULL; + lpsiStartInfo.hStdError = NULL; + + /* + * set create process flags + * if the flags arg is nil, use common defaults; + * if non-nil, it must be a positive integer containing the fdwCreate bits. + */ + if (flagsOrNil != nil) { + fdwCreate = __longIntVal(flagsOrNil); + } else { + if (0 /* __isWinNT */) + fdwCreate = 0; //IDLE_PRIORITY_CLASS; + else + fdwCreate = CREATE_NEW_CONSOLE; //|IDLE_PRIORITY_CLASS; // DETACHED_PROCESS; // NORMAL_PRIORITY_CLASS ; + + if (newPgrp == true) { + fdwCreate |= CREATE_NEW_PROCESS_GROUP; + } + fdwCreate |= CREATE_DEFAULT_ERROR_MODE; + } + + if (fdArray == nil) { + lpsiStartInfo.hStdInput = (HANDLE) _get_osfhandle (0); + lpsiStartInfo.hStdOutput = (HANDLE) _get_osfhandle (1); + lpsiStartInfo.hStdError = (HANDLE) _get_osfhandle (2); + } else if (__isArrayLike(fdArray) && (__arraySize(fdArray) >= 3)) { + if (__ArrayInstPtr(fdArray)->a_element[0] != nil) { + if (__isExternalAddressLike(__ArrayInstPtr(fdArray)->a_element[0])) { + lpsiStartInfo.hStdInput = _HANDLEVal(__ArrayInstPtr(fdArray)->a_element[0]); + } else { + lpsiStartInfo.hStdInput = (HANDLE) _get_osfhandle (__intVal(__ArrayInstPtr(fdArray)->a_element[0])); + } + } + if (__ArrayInstPtr(fdArray)->a_element[1] != nil) { + if (__isExternalAddressLike(__ArrayInstPtr(fdArray)->a_element[1])) { + lpsiStartInfo.hStdOutput = _HANDLEVal(__ArrayInstPtr(fdArray)->a_element[1]); + } else { + lpsiStartInfo.hStdOutput = (HANDLE) _get_osfhandle (__intVal(__ArrayInstPtr(fdArray)->a_element[1])); + } + } + if (__ArrayInstPtr(fdArray)->a_element[2] != nil) { + if (__isExternalAddressLike(__ArrayInstPtr(fdArray)->a_element[2])) { + lpsiStartInfo.hStdError = _HANDLEVal(__ArrayInstPtr(fdArray)->a_element[2]); + } else { + lpsiStartInfo.hStdError = (HANDLE) _get_osfhandle (__intVal(__ArrayInstPtr(fdArray)->a_element[2])); + } + } #if defined(PROCESSDEBUGWIN32) - console_fprintf(stderr, "stdin %x\n", lpsiStartInfo.hStdInput); - console_fprintf(stderr, "stdout %x\n",lpsiStartInfo.hStdOutput); - console_fprintf(stderr, "stderr %x\n",lpsiStartInfo.hStdError); -#endif - } else { - console_fprintf(stderr, "Win32OS [warning]: bad fd arg in createProcess\n"); - } - - if (doFork == true) { + console_fprintf(stderr, "stdin %x\n", lpsiStartInfo.hStdInput); + console_fprintf(stderr, "stdout %x\n",lpsiStartInfo.hStdOutput); + console_fprintf(stderr, "stderr %x\n",lpsiStartInfo.hStdError); +#endif + } else { + console_fprintf(stderr, "Win32OS [warning]: bad fd arg in createProcess\n"); + } + + if (doFork == true) { #ifdef PROCESSDEBUGWIN32 - console_fprintf(stderr, "create process cmdPath:<%s> cmdLine:<%s> in <%s>\n", cmdPath, cmdLine, dir); -#endif - if (CreateProcess( cmdPath, - cmdLine, - &securityAttributes, NULL /* &securityAttributes */, - securityAttributes.bInheritHandle, /* inherit handles */ - fdwCreate | CREATE_SUSPENDED, /* resume after setting affinity */ - NULL, /* env */ - dir, - &lpsiStartInfo, - &lppiProcInfo )) - { - DWORD processAffinityMask, systemAffinityMask; - - /* - * Process was created suspended, now set the affinity mask - * to any processor, and resume the processes main thread. - * (librun/process.s limited the affinity to a single processor). - */ - GetProcessAffinityMask(lppiProcInfo.hProcess, &processAffinityMask, &systemAffinityMask); - SetProcessAffinityMask(lppiProcInfo.hProcess, systemAffinityMask); - if ((fdwCreate & CREATE_SUSPENDED) == 0) { - ResumeThread(lppiProcInfo.hThread); - } - CloseHandle(lppiProcInfo.hThread); + console_fprintf(stderr, "create process cmdPath:<%s> cmdLine:<%s> in <%s>\n", cmdPath, cmdLine, dir); +#endif + if (CreateProcess( cmdPath, + cmdLine, + &securityAttributes, NULL /* &securityAttributes */, + securityAttributes.bInheritHandle, /* inherit handles */ + fdwCreate | CREATE_SUSPENDED, /* resume after setting affinity */ + NULL, /* env */ + dir, + &lpsiStartInfo, + &lppiProcInfo )) + { + DWORD processAffinityMask, systemAffinityMask; + + /* + * Process was created suspended, now set the affinity mask + * to any processor, and resume the processes main thread. + * (librun/process.s limited the affinity to a single processor). + */ + GetProcessAffinityMask(lppiProcInfo.hProcess, &processAffinityMask, &systemAffinityMask); + SetProcessAffinityMask(lppiProcInfo.hProcess, systemAffinityMask); + if ((fdwCreate & CREATE_SUSPENDED) == 0) { + ResumeThread(lppiProcInfo.hThread); + } + CloseHandle(lppiProcInfo.hThread); #ifdef PROCESSDEBUGWIN32 - console_fprintf(stderr, "created process hProcess=%x\n", lppiProcInfo.hProcess); -#endif - - __externalAddressVal(handle) = lppiProcInfo.hProcess; - ((struct __Win32OperatingSystem__Win32ProcessHandle_struct *)(handle))->pid = __mkSmallInteger(lppiProcInfo.dwProcessId); - RETURN (handle); - } + console_fprintf(stderr, "created process hProcess=%x\n", lppiProcInfo.hProcess); +#endif + + __externalAddressVal(handle) = lppiProcInfo.hProcess; + ((struct __Win32OperatingSystem__Win32ProcessHandle_struct *)(handle))->pid = __mkSmallInteger(lppiProcInfo.dwProcessId); + RETURN (handle); + } #ifdef PROCESSDEBUGWIN32 - console_fprintf(stderr, "created process error %d\n", GetLastError()); -#endif - RETURN (nil); - } else { - ; /* should never be called that way */ - } + console_fprintf(stderr, "created process error %d\n", GetLastError()); +#endif + RETURN (nil); + } else { + ; /* should never be called that way */ + } } %}. " @@ -3755,102 +3775,102 @@ shExecInfo.cbSize = sizeof(shExecInfo); if (__isSmallInteger(nShowCmd)) { - shExecInfo.nShow = __intVal(nShowCmd); + shExecInfo.nShow = __intVal(nShowCmd); } else { - if (nShowCmd == @symbol(SW_SHOW)) { - shExecInfo.nShow = SW_SHOW; - } else if (nShowCmd == @symbol(SW_SHOWNORMAL)) { - shExecInfo.nShow = SW_SHOWNORMAL; - } else if (nShowCmd == @symbol(SW_SHOWDEFAULT)) { - shExecInfo.nShow = SW_SHOWDEFAULT; - } else if (nShowCmd == @symbol(SW_SHOWMAXIMIZED)) { - shExecInfo.nShow = SW_SHOWMAXIMIZED; - } else if (nShowCmd == @symbol(SW_SHOWMINIMIZED)) { - shExecInfo.nShow = SW_SHOWMINIMIZED; - } else if (nShowCmd == @symbol(SW_SHOWMINNOACTIVE)) { - shExecInfo.nShow = SW_SHOWMINNOACTIVE; - } else if (nShowCmd == @symbol(SW_SHOWNA)) { - shExecInfo.nShow = SW_SHOWNA; - } else if (nShowCmd == @symbol(SW_SHOWNOACTIVATE)) { - shExecInfo.nShow = SW_SHOWNOACTIVATE; - } else if (nShowCmd == @symbol(SW_MAXIMIZE)) { - shExecInfo.nShow = SW_MAXIMIZE; - } else if (nShowCmd == @symbol(SW_RESTORE)) { - shExecInfo.nShow = SW_RESTORE; - } else { - goto badArgument; - } + if (nShowCmd == @symbol(SW_SHOW)) { + shExecInfo.nShow = SW_SHOW; + } else if (nShowCmd == @symbol(SW_SHOWNORMAL)) { + shExecInfo.nShow = SW_SHOWNORMAL; + } else if (nShowCmd == @symbol(SW_SHOWDEFAULT)) { + shExecInfo.nShow = SW_SHOWDEFAULT; + } else if (nShowCmd == @symbol(SW_SHOWMAXIMIZED)) { + shExecInfo.nShow = SW_SHOWMAXIMIZED; + } else if (nShowCmd == @symbol(SW_SHOWMINIMIZED)) { + shExecInfo.nShow = SW_SHOWMINIMIZED; + } else if (nShowCmd == @symbol(SW_SHOWMINNOACTIVE)) { + shExecInfo.nShow = SW_SHOWMINNOACTIVE; + } else if (nShowCmd == @symbol(SW_SHOWNA)) { + shExecInfo.nShow = SW_SHOWNA; + } else if (nShowCmd == @symbol(SW_SHOWNOACTIVATE)) { + shExecInfo.nShow = SW_SHOWNOACTIVATE; + } else if (nShowCmd == @symbol(SW_MAXIMIZE)) { + shExecInfo.nShow = SW_MAXIMIZE; + } else if (nShowCmd == @symbol(SW_RESTORE)) { + shExecInfo.nShow = SW_RESTORE; + } else { + goto badArgument; + } } if (((lpOperation == nil) || __isStringLike(lpOperation)) && ((lpFile == nil) || __isStringLike(lpFile)) && ((lpParameters == nil) || __isStringLike(lpParameters)) && ((lpDirectory == nil) || __isStringLike(lpDirectory)) ) { - // hProcess member receives the process handle - shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; - - shExecInfo.hwnd = 0; - shExecInfo.lpVerb = (lpOperation != nil) ? __stringVal(lpOperation) : NULL; - shExecInfo.lpFile = (lpFile != nil) ? __stringVal(lpFile) : NULL; - shExecInfo.lpParameters = (lpParameters != nil) ? __stringVal(lpParameters) : NULL; - shExecInfo.lpDirectory = (lpDirectory != nil) ? __stringVal(lpDirectory) : NULL; - if (hwnd != nil) { - if (__isExternalAddressLike(hwnd)) { - shExecInfo.hwnd = (HANDLE)(__externalAddressVal(hwnd)); - } else - goto badArgument; - } - if (ShellExecuteEx(&shExecInfo)) { - if (shExecInfo.hProcess) { - DWORD processAffinityMask, systemAffinityMask; - /* - * Set the affinity mask - * to any processor, and resume the processes main thread. - * (librun/process.s limited the affinity to a single processor). - */ - GetProcessAffinityMask(shExecInfo.hProcess, &processAffinityMask, &systemAffinityMask); - SetProcessAffinityMask(shExecInfo.hProcess, systemAffinityMask); - - // new (does not work, yet): - // __externalAddressVal(handle) = shExecInfo.hProcess; - // RETURN (handle); - - // old: - CloseHandle(shExecInfo.hProcess); - RETURN (self); /* OK */ - } else { - RETURN (self); /* OK */ - } - } else { - /* error */ - errorNumber = __mkSmallInteger(__WIN32_ERR(GetLastError())); - } + // hProcess member receives the process handle + shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; + + shExecInfo.hwnd = 0; + shExecInfo.lpVerb = (lpOperation != nil) ? __stringVal(lpOperation) : NULL; + shExecInfo.lpFile = (lpFile != nil) ? __stringVal(lpFile) : NULL; + shExecInfo.lpParameters = (lpParameters != nil) ? __stringVal(lpParameters) : NULL; + shExecInfo.lpDirectory = (lpDirectory != nil) ? __stringVal(lpDirectory) : NULL; + if (hwnd != nil) { + if (__isExternalAddressLike(hwnd)) { + shExecInfo.hwnd = (HANDLE)(__externalAddressVal(hwnd)); + } else + goto badArgument; + } + if (ShellExecuteEx(&shExecInfo)) { + if (shExecInfo.hProcess) { + DWORD processAffinityMask, systemAffinityMask; + /* + * Set the affinity mask + * to any processor, and resume the processes main thread. + * (librun/process.s limited the affinity to a single processor). + */ + GetProcessAffinityMask(shExecInfo.hProcess, &processAffinityMask, &systemAffinityMask); + SetProcessAffinityMask(shExecInfo.hProcess, systemAffinityMask); + + // new (does not work, yet): + // __externalAddressVal(handle) = shExecInfo.hProcess; + // RETURN (handle); + + // old: + CloseHandle(shExecInfo.hProcess); + RETURN (self); /* OK */ + } else { + RETURN (self); /* OK */ + } + } else { + /* error */ + errorNumber = __mkSmallInteger(__WIN32_ERR(GetLastError())); + } } badArgument: ; %}. errorNumber isNil ifTrue:[ - self primitiveFailed:'invalid argument(s)'. + self primitiveFailed:'invalid argument(s)'. ] ifFalse:[ - (OperatingSystem errorHolderForNumber:errorNumber) - parameter:lpFile; - reportError + (OperatingSystem errorHolderForNumber:errorNumber) + parameter:lpFile; + reportError ]. " self - shellExecute:nil - lpOperation:'open' - lpFile:(Filename currentDirectory pathName) - lpParameters:nil - lpDirectory:(Filename currentDirectory pathName) - nShowCmd:#SW_SHOWNORMAL + shellExecute:nil + lpOperation:'open' + lpFile:(Filename currentDirectory pathName) + lpParameters:nil + lpDirectory:(Filename currentDirectory pathName) + nShowCmd:#SW_SHOWNORMAL self - shellExecute:nil - lpOperation:'explore' - lpFile:(Filename currentDirectory pathName) - lpParameters:nil - lpDirectory:(Filename currentDirectory pathName) - nShowCmd:#SW_SHOWNORMAL + shellExecute:nil + lpOperation:'explore' + lpFile:(Filename currentDirectory pathName) + lpParameters:nil + lpDirectory:(Filename currentDirectory pathName) + nShowCmd:#SW_SHOWNORMAL " ! @@ -3877,10 +3897,10 @@ shellAndArgs := self commandAndArgsForOSCommand:aCommandString. ^ self - exec:(shellAndArgs at:1) withArguments:(shellAndArgs at:2) - inputFrom:anExternalInStream outputTo:anExternalOutStream - errorTo:anExternalErrStream auxFrom:anAuxiliaryStream - environment:anEvironmentDictionary inDirectory:dir + exec:(shellAndArgs at:1) withArguments:(shellAndArgs at:2) + inputFrom:anExternalInStream outputTo:anExternalOutStream + errorTo:anExternalErrStream auxFrom:anAuxiliaryStream + environment:anEvironmentDictionary inDirectory:dir "blocking at current prio (i.e. only higher prio threads execute): @@ -3901,7 +3921,7 @@ The following will no longer work. monitorPid has disappeared pid notNil ifTrue:[ - Processor monitorPid:pid action:[:OSstatus | sema signal ]. + Processor monitorPid:pid action:[:OSstatus | sema signal ]. ]. in close. out close. @@ -3923,12 +3943,12 @@ %{ if (__isSmallInteger(anIntegerOrHandle)) { - close(__intVal(anIntegerOrHandle)); - RETURN(self); + close(__intVal(anIntegerOrHandle)); + RETURN(self); } if (__isExternalAddressLike(anIntegerOrHandle)) { if (!CloseHandle( __externalAddressVal(anIntegerOrHandle))) { - console_fprintf( stderr, "Win32OS [warning]: Could not close handle : %x\n", __externalAddressVal(anIntegerOrHandle)); + console_fprintf( stderr, "Win32OS [warning]: Could not close handle : %x\n", __externalAddressVal(anIntegerOrHandle)); } RETURN(self); } @@ -3956,45 +3976,45 @@ %{ if (__isStringLike(aPathName)) { - int ret; - SECURITY_ATTRIBUTES sa; - - sa.nLength = sizeof( sa ); - sa.lpSecurityDescriptor = NULL; - sa.bInheritHandle = TRUE; - - ret = CreateDirectoryA(__stringVal(aPathName), &sa); - if (ret != TRUE) { - __threadErrno = __WIN32_ERR(GetLastError()); - @global(LastErrorNumber) = __mkSmallInteger(__threadErrno); - RETURN (false); - } - RETURN (true); + int ret; + SECURITY_ATTRIBUTES sa; + + sa.nLength = sizeof( sa ); + sa.lpSecurityDescriptor = NULL; + sa.bInheritHandle = TRUE; + + ret = CreateDirectoryA(__stringVal(aPathName), &sa); + if (ret != TRUE) { + __threadErrno = __WIN32_ERR(GetLastError()); + @global(LastErrorNumber) = __mkSmallInteger(__threadErrno); + RETURN (false); + } + RETURN (true); } if (__isUnicode16String(aPathName)) { - int ret; - SECURITY_ATTRIBUTES sa; - wchar_t _wPathName[MAXPATHLEN+1]; - int i, l; - - l = __unicode16StringSize(aPathName); - if (l > MAXPATHLEN) l = MAXPATHLEN; - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + for (i=0; ilpVtbl->QueryInterface( ipShellLink, &IID_IPersistFile, & ipPersistFile ); - if (! SUCCEEDED(hres)) { - console_fprintf(stderr, "OperatingSystem [info]: QueryInterface Error - hres = %08x\n", hres); - ipShellLink->lpVtbl->Release(ipShellLink); - ipShellLink = NULL; - ipPersistFile = NULL; - goto error; - } + hres = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, + &IID_IShellLink, (LPVOID *)&ipShellLink); + if (! SUCCEEDED(hres)) { + console_fprintf(stderr, "OperatingSystem [info]: CoCreateInstance Error - hres = %08x\n", hres); + ipShellLink = NULL; + goto error; + } + + hres = ipShellLink->lpVtbl->QueryInterface( ipShellLink, &IID_IPersistFile, & ipPersistFile ); + if (! SUCCEEDED(hres)) { + console_fprintf(stderr, "OperatingSystem [info]: QueryInterface Error - hres = %08x\n", hres); + ipShellLink->lpVtbl->Release(ipShellLink); + ipShellLink = NULL; + ipPersistFile = NULL; + goto error; + } } MultiByteToWideChar(CP_ACP, 0, __stringVal(aPathName), -1, wsz, MAX_PATH); @@ -4092,18 +4112,18 @@ hres = ipPersistFile->lpVtbl->Load(ipPersistFile, wsz, STGM_READ); if (SUCCEEDED(hres)) { - hres = ipShellLink->lpVtbl->GetPath(ipShellLink, szGotPath, MAX_PATH, - (WIN32_FIND_DATA *)&wfd, 0 /* SLGP_SHORTPATH */ ); - if (SUCCEEDED(hres)) { - resolvedPath = __MKSTRING(szGotPath); - } else { + hres = ipShellLink->lpVtbl->GetPath(ipShellLink, szGotPath, MAX_PATH, + (WIN32_FIND_DATA *)&wfd, 0 /* SLGP_SHORTPATH */ ); + if (SUCCEEDED(hres)) { + resolvedPath = __MKSTRING(szGotPath); + } else { #ifdef COM_DEBUG - console_fprintf(stderr, "OperatingSystem [info]: GetPath failed - hres = %08x\n", hres ); -#endif - } + console_fprintf(stderr, "OperatingSystem [info]: GetPath failed - hres = %08x\n", hres ); +#endif + } } else { #ifdef COM_DEBUG - console_fprintf(stderr, "OperatingSystem [info]: Load failed - hres = %08x\n", hres ); + console_fprintf(stderr, "OperatingSystem [info]: Load failed - hres = %08x\n", hres ); #endif } /* ipPersistFile->lpVtbl->Release(ipPersistFile); */ @@ -4129,10 +4149,10 @@ Return true if successful, false if not." (oldPath isString not or:[newPath isString not]) ifTrue:[ - "/ - "/ bad argument(s) given - "/ - ^ self primitiveFailed + "/ + "/ bad argument(s) given + "/ + ^ self primitiveFailed ]. ^ self createHardLinkFrom:oldPath to:newPath @@ -4164,24 +4184,24 @@ DWORD access, share, create, attr; if (__isStringLike(pathName)) { - name = __stringVal(pathName); + name = __stringVal(pathName); } else if (__isUnicode16String(pathName)) { - l = __unicode16StringSize(pathName); - if (l > MAXPATHLEN) l = MAXPATHLEN; - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + for (i=0; ia_element; numAttrib = __arraySize(attributeSpec); @@ -4192,77 +4212,77 @@ attr = 0; for (i=0; i access:%x share:%x create:%x attr:%x\n", - name, access, share, create, attr); + name, access, share, create, attr); #endif if (__isStringLike(pathName)) { - h = CreateFileA(name, access, share, 0 /* sa */, create, attr, 0 /* hTempl */); + h = CreateFileA(name, access, share, 0 /* sa */, create, attr, 0 /* hTempl */); } else { - h = CreateFileW(_wPathName, access, share, 0 /* sa */, create, attr, 0 /* hTempl */); + h = CreateFileW(_wPathName, access, share, 0 /* sa */, create, attr, 0 /* hTempl */); } if (h != INVALID_HANDLE_VALUE) { - __externalAddressVal(fileHandle) = (void *)h; + __externalAddressVal(fileHandle) = (void *)h; } else { - fileHandle = nil; - errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); + fileHandle = nil; + errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); } badArgument: ; %}. fileHandle notNil ifTrue:[ - fileHandle registerForFinalization. - ^ fileHandle. + fileHandle registerForFinalization. + ^ fileHandle. ]. errorNumber isNil ifTrue:[ - self error:'invalid argument(s): ', argumentError. + self error:'invalid argument(s): ', argumentError. ] ifFalse:[ - (self errorHolderForNumber:errorNumber) reportError + (self errorHolderForNumber:errorNumber) reportError ]. ! @@ -4310,51 +4330,51 @@ if (__isStringLike(fullPathName)) { #ifdef DO_WRAP_CALLS - { - char _aPathName[MAXPATHLEN]; - - strncpy(_aPathName, __stringVal(fullPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0'; - do { - __threadErrno = 0; - ret = STX_API_NOINT_CALL1( "RemoveDirectoryA", RemoveDirectoryA, _aPathName); - } while ((ret < 0) && (__threadErrno == EINTR)); - } -#else - ret = RemoveDirectoryA((char *)__stringVal(fullPathName)); - __threadErrno = __WIN32_ERR(GetLastError()); -#endif - if (ret != TRUE) { - @global(LastErrorNumber) = __mkSmallInteger(__threadErrno); - RETURN (false); - } - RETURN (true); + { + char _aPathName[MAXPATHLEN]; + + strncpy(_aPathName, __stringVal(fullPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0'; + do { + __threadErrno = 0; + ret = STX_API_NOINT_CALL1( "RemoveDirectoryA", RemoveDirectoryA, _aPathName); + } while ((ret < 0) && (__threadErrno == EINTR)); + } +#else + ret = RemoveDirectoryA((char *)__stringVal(fullPathName)); + __threadErrno = __WIN32_ERR(GetLastError()); +#endif + if (ret != TRUE) { + @global(LastErrorNumber) = __mkSmallInteger(__threadErrno); + RETURN (false); + } + RETURN (true); } if (__isUnicode16String(fullPathName)) { #ifdef DO_WRAP_CALLS - { - wchar_t _wPathName[MAXPATHLEN+1]; - int i, l; - - l = __unicode16StringSize(fullPathName); - if (l > MAXPATHLEN) l = MAXPATHLEN; - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + for (i=0; i MAXPATHLEN) l = MAXPATHLEN; - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + for (i=0; i= 2) and:[names startsWith:#('.')]] whileTrue:[ - names removeFirst. - n := n - 1. + names removeFirst. + n := n - 1. ]. " @@ -4789,14 +4809,14 @@ [(n > 2) and:[(names endsWith:#('..')) and:[((names at:(n - 1)) startsWith:'.') not ]]] whileTrue:[ - names removeLast; removeLast. - n := n - 2. + names removeLast; removeLast. + n := n - 2. ]. ^ names asStringWith:self fileSeparator - from:1 - to:n - compressTabs:false final:nil + from:1 + to:n + compressTabs:false final:nil " OperatingSystem compressPath:'.\..' @@ -4834,8 +4854,8 @@ getDiskInfoOf:volumeNameArg "returns a dictionary filled with any of: - freeBytes - totalBytes + freeBytes + totalBytes and possibly additional (OS-specific) information" |volumeName info ok sectorsPerCluster bytesPerSector freeClusters totalClusters @@ -4843,11 +4863,11 @@ volumeName := volumeNameArg. (volumeName endsWith:$\) ifFalse:[ - volumeName := volumeName , '\' + volumeName := volumeName , '\' ]. %{ typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER, - PULARGE_INTEGER, PULARGE_INTEGER); + PULARGE_INTEGER, PULARGE_INTEGER); P_GDFSE pGetDiskFreeSpaceEx = NULL; DWORD __sectorsPerCluster, __bytesPerSector, __freeClusters, __totalClusters; @@ -4855,62 +4875,62 @@ unsigned __int64 i64FreeBytesForUsersQuota, i64TotalBytes, i64FreeBytes; if (__isStringLike(volumeName) || __isSymbol(volumeName)) { - /* - * Use GetDiskFreeSpaceEx if available; otherwise, use GetDiskFreeSpace. - * Notice that GetDiskFreeSpace does not work correctly under win2k, - * and GetDiskFreeSpaceEx is not avail. for all win versions (can microsoft ever do something right ?). - */ - pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress ( - GetModuleHandle ("kernel32.dll"), - "GetDiskFreeSpaceExA"); - if (pGetDiskFreeSpaceEx) { - fResult = pGetDiskFreeSpaceEx (__stringVal(volumeName), - (PULARGE_INTEGER)&i64FreeBytesForUsersQuota, - (PULARGE_INTEGER)&i64TotalBytes, - (PULARGE_INTEGER)&i64FreeBytes); - if (fResult) { - freeBytesForUsersQuota = __MKUINT64(&i64FreeBytesForUsersQuota); - totalBytes = __MKUINT64(&i64TotalBytes); - freeBytes = __MKUINT64(&i64FreeBytes); - } - } - fResult = GetDiskFreeSpace(__stringVal(volumeName), - &__sectorsPerCluster, - &__bytesPerSector, - &__freeClusters, - &__totalClusters); - if (fResult) { - sectorsPerCluster = __MKUINT(__sectorsPerCluster); - bytesPerSector = __MKUINT(__bytesPerSector); - freeClusters = __MKUINT(__freeClusters); - totalClusters = __MKUINT(__totalClusters); - } - switch (GetDriveType(__stringVal(volumeName))) { - case DRIVE_REMOVABLE: - type = @symbol(removable); break; - case DRIVE_FIXED: - type = @symbol(fixed); break; - case DRIVE_REMOTE: - type = @symbol(network); break; - case DRIVE_CDROM: - type = @symbol(cdrom); break; - case DRIVE_RAMDISK: - type = @symbol(ramdisk); break; - case DRIVE_UNKNOWN: - default: - break; - } - if (fResult) { - ok = true; - } else { - __threadErrno = __WIN32_ERR(GetLastError()); - @global(LastErrorNumber) = __mkSmallInteger(__threadErrno); - } + /* + * Use GetDiskFreeSpaceEx if available; otherwise, use GetDiskFreeSpace. + * Notice that GetDiskFreeSpace does not work correctly under win2k, + * and GetDiskFreeSpaceEx is not avail. for all win versions (can microsoft ever do something right ?). + */ + pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress ( + GetModuleHandle ("kernel32.dll"), + "GetDiskFreeSpaceExA"); + if (pGetDiskFreeSpaceEx) { + fResult = pGetDiskFreeSpaceEx (__stringVal(volumeName), + (PULARGE_INTEGER)&i64FreeBytesForUsersQuota, + (PULARGE_INTEGER)&i64TotalBytes, + (PULARGE_INTEGER)&i64FreeBytes); + if (fResult) { + freeBytesForUsersQuota = __MKUINT64(&i64FreeBytesForUsersQuota); + totalBytes = __MKUINT64(&i64TotalBytes); + freeBytes = __MKUINT64(&i64FreeBytes); + } + } + fResult = GetDiskFreeSpace(__stringVal(volumeName), + &__sectorsPerCluster, + &__bytesPerSector, + &__freeClusters, + &__totalClusters); + if (fResult) { + sectorsPerCluster = __MKUINT(__sectorsPerCluster); + bytesPerSector = __MKUINT(__bytesPerSector); + freeClusters = __MKUINT(__freeClusters); + totalClusters = __MKUINT(__totalClusters); + } + switch (GetDriveType(__stringVal(volumeName))) { + case DRIVE_REMOVABLE: + type = @symbol(removable); break; + case DRIVE_FIXED: + type = @symbol(fixed); break; + case DRIVE_REMOTE: + type = @symbol(network); break; + case DRIVE_CDROM: + type = @symbol(cdrom); break; + case DRIVE_RAMDISK: + type = @symbol(ramdisk); break; + case DRIVE_UNKNOWN: + default: + break; + } + if (fResult) { + ok = true; + } else { + __threadErrno = __WIN32_ERR(GetLastError()); + @global(LastErrorNumber) = __mkSmallInteger(__threadErrno); + } } %}. ok == true ifFalse:[ - self primitiveFailed. - ^ self + self primitiveFailed. + ^ self ]. info := IdentityDictionary new. @@ -4920,14 +4940,14 @@ info at:#totalClusters put:totalClusters. info at:#freeBytes put:(freeBytes notNil - ifTrue:[freeBytes] - ifFalse:[freeClusters * sectorsPerCluster * bytesPerSector]). + ifTrue:[freeBytes] + ifFalse:[freeClusters * sectorsPerCluster * bytesPerSector]). info at:#totalBytes put:(totalBytes notNil - ifTrue:[totalBytes] - ifFalse:[totalClusters * sectorsPerCluster * bytesPerSector]). + ifTrue:[totalBytes] + ifFalse:[totalClusters * sectorsPerCluster * bytesPerSector]). info at:#freeBytesForUsersQuota put:freeBytesForUsersQuota. type notNil ifTrue:[ - info at:#type put:type + info at:#type put:type ]. ^ info @@ -4969,13 +4989,13 @@ getDriveType:aPathName "returns: - 0 -> Unknown - 1 -> Invalid - 2 -> removable - 3 -> fixed - 4 -> remote - 5 -> cdrom - 6 -> ramdisk. + 0 -> Unknown + 1 -> Invalid + 2 -> removable + 3 -> fixed + 4 -> remote + 5 -> cdrom + 6 -> ramdisk. This is a stupid interface - do not use." %{ @@ -4983,20 +5003,20 @@ if (__isStringLike(aPathName)) { #ifdef DO_WRAP_CALLS - char _aPathName[MAXPATHLEN]; - - strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0'; - do { - __threadErrno = 0; - ret = STX_API_NOINT_CALL1( "GetDriveType", GetDriveType, _aPathName); - } while ((ret < 0) && (__threadErrno == EINTR)); -#else - ret = GetDriveType((char *) __stringVal(aPathName)); - if (ret < 0) { - __threadErrno = __WIN32_ERR(GetLastError()); - } -#endif - RETURN (__MKSMALLINT(ret)); + char _aPathName[MAXPATHLEN]; + + strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0'; + do { + __threadErrno = 0; + ret = STX_API_NOINT_CALL1( "GetDriveType", GetDriveType, _aPathName); + } while ((ret < 0) && (__threadErrno == EINTR)); +#else + ret = GetDriveType((char *) __stringVal(aPathName)); + if (ret < 0) { + __threadErrno = __WIN32_ERR(GetLastError()); + } +#endif + RETURN (__MKSMALLINT(ret)); } %}. ^ self primitiveFailed @@ -5019,24 +5039,24 @@ DWORD dummy; if (__isStringLike(aPathName)) { - sz = GetFileVersionInfoSizeA(__stringVal(aPathName), &dummy); + sz = GetFileVersionInfoSizeA(__stringVal(aPathName), &dummy); } else if (__isUnicode16String(aPathName)) { - sz = GetFileVersionInfoSizeW(__unicode16StringVal(aPathName), &dummy); + sz = GetFileVersionInfoSizeW(__unicode16StringVal(aPathName), &dummy); } else { - goto badArgument; + goto badArgument; } if (sz > 0) { - OBJ versionData; - - versionData = __BYTEARRAY_UNINITIALIZED_NEW_INT(sz); - if (versionData == nil) { - RETURN (nil); - } - if (GetFileVersionInfo(__stringVal(aPathName), 0, sz, __ByteArrayInstPtr(versionData)->ba_element) == FALSE) { - RETURN (nil); - } - RETURN (versionData); + OBJ versionData; + + versionData = __BYTEARRAY_UNINITIALIZED_NEW_INT(sz); + if (versionData == nil) { + RETURN (nil); + } + if (GetFileVersionInfo(__stringVal(aPathName), 0, sz, __ByteArrayInstPtr(versionData)->ba_element) == FALSE) { + RETURN (nil); + } + RETURN (versionData); } RETURN (nil); badArgument: ; @@ -5054,35 +5074,35 @@ wchar_t _aPathName[MAX_PATH+1]; if (__isStringLike(aPathName)) { - int i; - int l = __stringSize(aPathName); - if (l > MAX_PATH) l = MAX_PATH; - - for (i=0; i MAX_PATH) l = MAX_PATH; + + for (i=0; i MAX_PATH) l = MAX_PATH; - - for (i=0; i MAX_PATH) l = MAX_PATH; + + for (i=0; i MAX_PATH) l = MAX_PATH; - - for (i=0; i MAX_PATH) l = MAX_PATH; + + for (i=0; i MAX_PATH) l = MAX_PATH; - - for (i=0; i MAX_PATH) l = MAX_PATH; + + for (i=0; i MAXPATHLEN) l = MAXPATHLEN; - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + for (i=0; i MAXPATHLEN) l = MAXPATHLEN; - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + for (i=0; i MAXPATHLEN) l = MAXPATHLEN; - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + for (i=0; i MAX_PATH) l = MAX_PATH; - - for (i=0; i MAX_PATH) l = MAX_PATH; + + for (i=0; i MAX_PATH) l = MAX_PATH; - - for (i=0; i MAX_PATH) l = MAX_PATH; + + for (i=0; i 1) - and:[p endsWith:(self fileSeparator)] - ] whileTrue:[ - p := p copyWithoutLast:1. - ]. - ^ p - ]. - - "/ - "/ return the original - there is nothing else can we do - "/ - path := self compressPath:pathName + (self isValidPath:pathName) ifFalse:[ + p := pathName. + [(p size > 1) + and:[p endsWith:(self fileSeparator)] + ] whileTrue:[ + p := p copyWithoutLast:1. + ]. + ^ p + ]. + + "/ + "/ return the original - there is nothing else can we do + "/ + path := self compressPath:pathName ]. ^ path. @@ -5772,52 +5792,52 @@ if (__isStringLike(aPathName)) { #ifdef DO_WRAP_CALLS - char _aPathName[MAXPATHLEN]; - - strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0'; - do { - __threadErrno = 0; - ret = STX_API_NOINT_CALL1( "GetFileAttributesA", GetFileAttributesA, _aPathName); - } while ((ret < 0) && (__threadErrno == EINTR)); -#else - ret = GetFileAttributesA((char *) __stringVal(aPathName)); - if (ret < 0) { - __threadErrno = __WIN32_ERR(GetLastError()); - } -#endif - if (ret >= 0) { - RETURN ( __mkSmallInteger(ret) ); - } - __threadErrno = __WIN32_ERR(GetLastError()); - RETURN (nil); + char _aPathName[MAXPATHLEN]; + + strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0'; + do { + __threadErrno = 0; + ret = STX_API_NOINT_CALL1( "GetFileAttributesA", GetFileAttributesA, _aPathName); + } while ((ret < 0) && (__threadErrno == EINTR)); +#else + ret = GetFileAttributesA((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 MAXPATHLEN) l = MAXPATHLEN; + for (i=0; i= 0) { - RETURN ( __mkSmallInteger(ret) ); - } - __threadErrno = __WIN32_ERR(GetLastError()); - RETURN (nil); + do { + __threadErrno = 0; + ret = STX_API_NOINT_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 @@ -5847,102 +5867,102 @@ %{ /* xxSTACK: 16000 */ if (__isStringLike(aPathName)) { - char nameBuffer[MAXPATHLEN + 1 + MAXPATHLEN + 1]; - char *pFinal; - int rslt; + char nameBuffer[MAXPATHLEN + 1 + MAXPATHLEN + 1]; + char *pFinal; + int rslt; #ifdef DO_WRAP_CALLS - char _aPathName[MAXPATHLEN]; - - strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0'; - do { - __threadErrno = 0; - rslt = STX_API_NOINT_CALL4( "GetFullPathName", GetFullPathName, _aPathName, sizeof(nameBuffer), nameBuffer, &pFinal); - } while ((rslt < 0) && (__threadErrno == EINTR)); -#else - rslt = GetFullPathName(__stringVal(aPathName), sizeof(nameBuffer), nameBuffer, &pFinal); -#endif - - if (rslt > 0) { - /* - * Attention: GetLongPathName is not available on old NT4.0/W95/W98 - */ - static FARPROC GetLongPathName_entry = NULL; + char _aPathName[MAXPATHLEN]; + + strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0'; + do { + __threadErrno = 0; + rslt = STX_API_NOINT_CALL4( "GetFullPathName", GetFullPathName, _aPathName, sizeof(nameBuffer), nameBuffer, &pFinal); + } while ((rslt < 0) && (__threadErrno == EINTR)); +#else + rslt = GetFullPathName(__stringVal(aPathName), sizeof(nameBuffer), nameBuffer, &pFinal); +#endif + + if (rslt > 0) { + /* + * Attention: GetLongPathName is not available on old NT4.0/W95/W98 + */ + static FARPROC GetLongPathName_entry = NULL; #ifdef NO_NT4_0_COMPATIBILITY - GetLongPathName_entry = (FARPROC) GetLongPathName; -#else - if (GetLongPathName_entry == NULL) { - GetLongPathName_entry = __get_kernel32_functionAddress("GetLongPathNameA"); - } + GetLongPathName_entry = (FARPROC) GetLongPathName; +#else + if (GetLongPathName_entry == NULL) { + GetLongPathName_entry = __get_kernel32_functionAddress("GetLongPathNameA"); + } #endif /* NO_NT4_0_COMPATIBILITY */ - if (GetLongPathName_entry) { + if (GetLongPathName_entry) { #ifdef DO_WRAP_CALLS - do { - __threadErrno = 0; - rslt = STX_API_NOINT_CALL3( "GetLongPathName", GetLongPathName_entry, nameBuffer, nameBuffer, sizeof(nameBuffer)); - } while ((rslt < 0) && (__threadErrno == EINTR)); -#else - rslt = (*GetLongPathName_entry)(nameBuffer, nameBuffer, sizeof(nameBuffer)); -#endif - } - } - if (rslt > 0) { - RETURN ( __MKSTRING(nameBuffer) ); - } - __threadErrno = __WIN32_ERR(GetLastError()); - RETURN (nil); + do { + __threadErrno = 0; + rslt = STX_API_NOINT_CALL3( "GetLongPathName", GetLongPathName_entry, nameBuffer, nameBuffer, sizeof(nameBuffer)); + } while ((rslt < 0) && (__threadErrno == EINTR)); +#else + rslt = (*GetLongPathName_entry)(nameBuffer, nameBuffer, sizeof(nameBuffer)); +#endif + } + } + if (rslt > 0) { + RETURN ( __MKSTRING(nameBuffer) ); + } + __threadErrno = __WIN32_ERR(GetLastError()); + RETURN (nil); } if (__isUnicode16String(aPathName)) { - wchar_t nameBuffer[MAXPATHLEN + 1 + MAXPATHLEN + 1]; - char *pFinal; - int rslt; - wchar_t _aPathName[MAXPATHLEN+1]; - int i, l; - - l = __unicode16StringSize(aPathName); - if (l > MAXPATHLEN) l = MAXPATHLEN; - for (i=0; i MAXPATHLEN) l = MAXPATHLEN; + for (i=0; i 0) { - /* - * Attention: GetLongPathName is not available on old NT4.0/W95/W98 - */ - static FARPROC GetLongPathNameW_entry = NULL; + do { + __threadErrno = 0; + rslt = STX_API_NOINT_CALL4( "GetFullPathNameW", GetFullPathNameW, _aPathName, MAXPATHLEN, nameBuffer, &pFinal); + } while ((rslt < 0) && (__threadErrno == EINTR)); +#else + rslt = GetFullPathName(_aPathName, MAXPATHLEN, nameBuffer, &pFinal); +#endif + if (rslt > 0) { + /* + * Attention: GetLongPathName is not available on old NT4.0/W95/W98 + */ + static FARPROC GetLongPathNameW_entry = NULL; #ifdef NO_NT4_0_COMPATIBILITY - GetLongPathNameW_entry = (FARPROC) GetLongPathNameW; -#else - if (GetLongPathNameW_entry == NULL) { - GetLongPathNameW_entry = __get_kernel32_functionAddress("GetLongPathNameW"); - } + GetLongPathNameW_entry = (FARPROC) GetLongPathNameW; +#else + if (GetLongPathNameW_entry == NULL) { + GetLongPathNameW_entry = __get_kernel32_functionAddress("GetLongPathNameW"); + } #endif /* NO_NT4_0_COMPATIBILITY */ - if (GetLongPathNameW_entry) { + if (GetLongPathNameW_entry) { #ifdef DO_WRAP_CALLS - do { - __threadErrno = 0; - rslt = STX_API_NOINT_CALL3( "GetLongPathNameW", GetLongPathNameW_entry, nameBuffer, nameBuffer, MAXPATHLEN); - } while ((rslt < 0) && (__threadErrno == EINTR)); -#else - rslt = (*GetLongPathNameW_entry)(nameBuffer, nameBuffer, MAXPATHLEN); -#endif - } - } - if (rslt > 0) { - RETURN ( __MKU16STRING(nameBuffer) ); - } - __threadErrno = __WIN32_ERR(GetLastError()); + do { + __threadErrno = 0; + rslt = STX_API_NOINT_CALL3( "GetLongPathNameW", GetLongPathNameW_entry, nameBuffer, nameBuffer, MAXPATHLEN); + } while ((rslt < 0) && (__threadErrno == EINTR)); +#else + rslt = (*GetLongPathNameW_entry)(nameBuffer, nameBuffer, MAXPATHLEN); +#endif + } + } + if (rslt > 0) { + RETURN ( __MKU16STRING(nameBuffer) ); + } + __threadErrno = __WIN32_ERR(GetLastError()); } %}. ^ nil @@ -5980,55 +6000,55 @@ int ret; if (__isSmallInteger(anInteger)) { - if (__isStringLike(aPathName)) { + if (__isStringLike(aPathName)) { #ifdef DO_WRAP_CALLS - char _aPathName[MAXPATHLEN]; - - strncpy(_aPathName, __stringVal(aPathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0'; - do { - __threadErrno = 0; - ret = STX_API_NOINT_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= 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= 0) { - RETURN ( true ); - } - __threadErrno = __WIN32_ERR(GetLastError()); - RETURN (false); - } + do { + __threadErrno = 0; + ret = STX_API_NOINT_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 @@ -6036,9 +6056,9 @@ setCurrentDirectory:pathName pathName bitsPerCharacter == 16 ifTrue:[ - self primSetCurrentDirectoryW:(pathName copyWith:(Character value:0)) + self primSetCurrentDirectoryW:(pathName copyWith:(Character value:0)) ] ifFalse:[ - self primSetCurrentDirectoryA:pathName + self primSetCurrentDirectoryA:pathName ]. " @@ -6056,7 +6076,7 @@ attr := self primGetFileAttributes:aPathName. (attr bitTest:FILE_ATTRIBUTE_HIDDEN ) ifFalse:[ - ^ self primSetFileAttributes:aPathName to:(attr bitOr:2). + ^ self primSetFileAttributes:aPathName to:(attr bitOr:2). ]. ^ true "/ aready set @@ -6071,7 +6091,7 @@ attr := self primGetFileAttributes:aPathName. (attr bitTest:FILE_ATTRIBUTE_NORMAL ) ifFalse:[ - ^ self primSetFileAttributes:aPathName to:(attr bitOr:2). + ^ self primSetFileAttributes:aPathName to:(attr bitOr:2). ]. ^ true "/ aready set ! @@ -6083,7 +6103,7 @@ attr := self primGetFileAttributes:aPathName. (attr bitTest:FILE_ATTRIBUTE_TEMPORARY ) ifFalse:[ - ^ self primSetFileAttributes:aPathName to:(attr bitOr:2). + ^ self primSetFileAttributes:aPathName to:(attr bitOr:2). ]. ^ true "/ aready set ! @@ -6093,7 +6113,7 @@ For nonexistent files, nil is returned." "could be implemented as: - (self infoOf:aPathName) accessed + (self infoOf:aPathName) accessed " | i| @@ -6111,7 +6131,7 @@ For nonexistent files, nil is returned." "could be implemented as: - (self infoOf:aPathName) modified + (self infoOf:aPathName) modified " | i| @@ -6134,7 +6154,7 @@ " this could have been implemented as: - (self infoOf:aPathName) type + (self infoOf:aPathName) type " i := self infoOf:aPathName. @@ -6151,31 +6171,31 @@ volumeLabelOf: aFilenameOrString - "Answer the volume label of the disk containing aFilenameOrString." + "Answer the volume label of the disk containing aFilenameOrString." | volName | volName := String new: 255. ( self - getVolumeInformation: aFilenameOrString asFilename volume, '\' - name: volName - nameSize: volName size - serialNumber: nil - maximumComponentLength: nil - fileSystemFlags: nil - fileSystemName: nil - fileSystemNameSize: 0 ) - ifFalse: [ - Transcript showCR:'GetVolumeInformation error'. - ^ '' - ]. + getVolumeInformation: aFilenameOrString asFilename volume, '\' + name: volName + nameSize: volName size + serialNumber: nil + maximumComponentLength: nil + fileSystemFlags: nil + fileSystemName: nil + fileSystemNameSize: 0 ) + ifFalse: [ + Transcript showCR:'GetVolumeInformation error'. + ^ '' + ]. ^ volName copyUpTo: Character null " - self volumeLabelOf: 'C:\pepe.pep' - self volumeLabelOf: 'C:' - self volumeLabelOf: 'C:\\' - self volumeLabelOf: 'C:\' + self volumeLabelOf: 'C:\pepe.pep' + self volumeLabelOf: 'C:' + self volumeLabelOf: 'C:\\' + self volumeLabelOf: 'C:\' " ! @@ -6188,7 +6208,7 @@ aPathString size < 2 ifTrue:[^ '']. (aPathString at:2) == $: ifTrue:[ - ^ (aPathString at:1) asString. + ^ (aPathString at:1) asString. ]. ^ '' ! ! @@ -6205,11 +6225,11 @@ html documents, pdf documents etc." Error - handle:[:ex | - Dialog warn:'Shell execution failed' - ] do:[ - self openApplicationForDocument:aFilenameOrString operation:#open - ] + handle:[:ex | + Dialog warn:'Shell execution failed' + ] do:[ + self openApplicationForDocument:aFilenameOrString operation:#open + ] " self openDocumentationFilename: 'C:\WINDOWS\Help\clipbrd.chm' asFilename @@ -6266,8 +6286,8 @@ %{ while(1) { - console_printf("blocking..."); - Sleep(50); + console_printf("blocking..."); + Sleep(50); } %}. " @@ -6281,8 +6301,8 @@ %{ while(1) { - console_printf("blocking..."); - STX_API_CALL1("Sleep", Sleep, 50); + console_printf("blocking..."); + STX_API_CALL1("Sleep", Sleep, 50); } %}. " @@ -6299,7 +6319,7 @@ int ret; do { - ret = STX_API_NOINT_CALL1("Sleep", Sleep, 60000); + ret = STX_API_NOINT_CALL1("Sleep", Sleep, 60000); } while (ret < 0 && __threadErrno == EINTR); %}. " @@ -6316,7 +6336,7 @@ int ret; do { - ret = STX_API_CALL1("Sleep", Sleep, 60000); + ret = STX_API_CALL1("Sleep", Sleep, 60000); } while (ret < 0 && __threadErrno == EINTR); %}. " @@ -6338,8 +6358,8 @@ if (__isSmallInteger(signalNumber)) { #ifdef SIG_DFL - signal(__intVal(signalNumber), SIG_DFL); - RETURN (self); + signal(__intVal(signalNumber), SIG_DFL); + RETURN (self); #endif } %}. @@ -6382,14 +6402,14 @@ %{ /* NOCONTEXT */ if (__isSmallInteger(signalNumber)) { - int sigNo = __intVal(signalNumber); - - if (sigNo == 0) { - RETURN (self); - } + int sigNo = __intVal(signalNumber); + + if (sigNo == 0) { + RETURN (self); + } #ifdef SIG_IGN - signal(sigNo, SIG_IGN); - RETURN (self); + signal(sigNo, SIG_IGN); + RETURN (self); #endif } %}. @@ -6410,8 +6430,8 @@ disableTimer "disable timer interrupts. WARNING: - the system will not operate correctly with timer interrupts - disabled, because no scheduling or timeouts are possible." + the system will not operate correctly with timer interrupts + disabled, because no scheduling or timeouts are possible." %{ /* NOCONTEXT */ @@ -6537,121 +6557,121 @@ && (sigNr <= SIG_LIMIT) #endif ) { - /* - * standard signals are forced into standard handlers - * - all others go into general signalInterrupt - */ + /* + * standard signals are forced into standard handlers + * - all others go into general signalInterrupt + */ #if defined(SIGPOLL) && defined(SIGIO) - if (sigNr == SIGPOLL) - sigNr = SIGIO; -#endif - switch (sigNr) { - case 0: - /* enabling a non-supported signal */ - RETURN (self); + if (sigNr == SIGPOLL) + sigNr = SIGIO; +#endif + switch (sigNr) { + case 0: + /* enabling a non-supported signal */ + RETURN (self); #ifdef SIGBREAK - case SIGBREAK: + case SIGBREAK: #endif #ifdef SIGINT - case SIGINT: + case SIGINT: #endif #ifdef SIGQUIT - case SIGQUIT: + case SIGQUIT: #endif #ifdef SIGNALDEBUGWIN32 - console_printf("ConsoleSignal %d\n",sigNr); -#endif - SetConsoleCtrlHandler((PHANDLER_ROUTINE)__signalUserInterruptWIN32,TRUE); - RETURN (self); + console_printf("ConsoleSignal %d\n",sigNr); +#endif + SetConsoleCtrlHandler((PHANDLER_ROUTINE)__signalUserInterruptWIN32,TRUE); + RETURN (self); #ifdef SIGFPE - case SIGFPE: - handler = __signalFpExceptionInterrupt; - break; + case SIGFPE: + handler = __signalFpExceptionInterrupt; + break; #endif #ifdef SIGPIPE - case SIGPIPE: - handler = __signalPIPEInterrupt; - break; + case SIGPIPE: + handler = __signalPIPEInterrupt; + break; #endif #ifdef SIGBUS - case SIGBUS: - handler = __signalBUSInterrupt; - break; + case SIGBUS: + handler = __signalBUSInterrupt; + break; #endif #ifdef SIGSEGV - case SIGSEGV: - handler = __signalSEGVInterrupt; - break; + case SIGSEGV: + handler = __signalSEGVInterrupt; + break; #endif #ifdef SIGILL - case SIGILL: - handler = __signalTrapInterrupt; - break; + case SIGILL: + handler = __signalTrapInterrupt; + break; #endif #ifdef SIGEMT - case SIGEMT: - handler = __signalTrapInterrupt; - break; + case SIGEMT: + handler = __signalTrapInterrupt; + break; #endif #ifdef SIGIO - case SIGIO: - handler = __signalIoInterrupt; - break; + case SIGIO: + handler = __signalIoInterrupt; + break; #endif #ifdef CHILD_SIGNAL - case CHILD_SIGNAL: - handler = __signalChildInterrupt; - break; -#endif - - default: - handler = __signalInterrupt; - break; - } - - { + case CHILD_SIGNAL: + handler = __signalChildInterrupt; + break; +#endif + + default: + handler = __signalInterrupt; + break; + } + + { #ifdef HAS_SIGACTION - struct sigaction act; - - /* - * Do not add SA_RESTART here. A signal can cause a - * thread switch, another thread can do a garbage collect - * and restarted system calls may write into old - * (collected) addresses. - */ - - act.sa_flags = SA_SIGINFO; /* <- if you add more, remember dummys at the top */ - sigemptyset(&act.sa_mask); - act.sa_handler = handler; - sigaction(sigNr, &act, 0); + struct sigaction act; + + /* + * Do not add SA_RESTART here. A signal can cause a + * thread switch, another thread can do a garbage collect + * and restarted system calls may write into old + * (collected) addresses. + */ + + act.sa_flags = SA_SIGINFO; /* <- if you add more, remember dummys at the top */ + sigemptyset(&act.sa_mask); + act.sa_handler = handler; + sigaction(sigNr, &act, 0); #else # ifdef HAS_SIGVEC - struct sigvec vec; - - vec.sv_flags = SV_INTERRUPT; - sigemptyset(&vec.sv_mask); - vec.sv_handler = handler; - sigvec(sigNr, &vec, NULL); + struct sigvec vec; + + vec.sv_flags = SV_INTERRUPT; + sigemptyset(&vec.sv_mask); + vec.sv_handler = handler; + sigvec(sigNr, &vec, NULL); # else # ifdef WIN32 # ifdef SIGNALDEBUGWIN32 - console_printf("signal %d can't change handler\n",sigNr); + console_printf("signal %d can't change handler\n",sigNr); # endif # else - (void) signal(sigNr, handler); + (void) signal(sigNr, handler); # endif # endif #endif - } - - /* - * maybe, we should Return the old enable-status - * as boolean here ... - */ - RETURN (self); + } + + /* + * maybe, we should Return the old enable-status + * as boolean here ... + */ + RETURN (self); } %}. @@ -6669,8 +6689,8 @@ extern void __win32SetTimer(); if (__isSmallInteger(milliSeconds)) { - __win32SetTimer( __intVal(milliSeconds) ); - RETURN (true); + __win32SetTimer( __intVal(milliSeconds) ); + RETURN (true); } %}. ^ false @@ -6690,8 +6710,8 @@ The process terminates immediately and has no chance to perform any cleanup actions. WARNING: in order to avoid zombie processes (on unix), - you have to fetch the processes exitstatus with - OperatingSystem>>getStatusOfProcess:aProcessId." + you have to fetch the processes exitstatus with + OperatingSystem>>getStatusOfProcess:aProcessId." self terminateProcess:processId ! @@ -6703,9 +6723,9 @@ Do not confuse UNIX signals with Smalltalk-Signals. WARNING: in order to avoid zombie processes (on unix), - you may have to fetch the processes exitstatus with - OperatingSystem>>getStatusOfProcess:aProcessId - if the signal terminates that process." + you may have to fetch the processes exitstatus with + OperatingSystem>>getStatusOfProcess:aProcessId + if the signal terminates that process." "/ "/ either invalid argument (non-integers) @@ -6718,15 +6738,15 @@ "terminate a process. The process has a chance to do some cleanup. WIN32: - Under unix, we have terminateProcess, which does a soft - terminate (giving the process a chance to cleanup) and - killProcess, which does a hard terminate. - Under WIN32, both (currently) use the TerminateProcess - function, which unconditionally causes a process to exit. - I.e. under WIN32, the process has no chance to perform cleanup. - Use it only in extreme circumstances. The state of - global data maintained by dynamic-link libraries (DLLs) - may be compromised if TerminateProcess is used. + Under unix, we have terminateProcess, which does a soft + terminate (giving the process a chance to cleanup) and + killProcess, which does a hard terminate. + Under WIN32, both (currently) use the TerminateProcess + function, which unconditionally causes a process to exit. + I.e. under WIN32, the process has no chance to perform cleanup. + Use it only in extreme circumstances. The state of + global data maintained by dynamic-link libraries (DLLs) + may be compromised if TerminateProcess is used. TODO: send it a WM_QUIT instead, to allow for proper shutdown." self terminateProcess:processHandleOrPid exitCode:0 @@ -6736,33 +6756,33 @@ "terminate a process. The process should have a chance to do some cleanup. WIN32: - Under unix, we have terminateProcess, which does a soft - terminate (giving the process a chance to cleanup) and - killProcess, which does a hard terminate. - Under WIN32, both (currently) use the TerminateProcess - function, which unconditionally causes a process to exit. - I.e. under WIN32, the process has no chance to perform cleanup. - Use it only in extreme circumstances. The state of - global data maintained by dynamic-link libraries (DLLs) - may be compromised if TerminateProcess is used. + Under unix, we have terminateProcess, which does a soft + terminate (giving the process a chance to cleanup) and + killProcess, which does a hard terminate. + Under WIN32, both (currently) use the TerminateProcess + function, which unconditionally causes a process to exit. + I.e. under WIN32, the process has no chance to perform cleanup. + Use it only in extreme circumstances. The state of + global data maintained by dynamic-link libraries (DLLs) + may be compromised if TerminateProcess is used. TODO: send it a WM_QUIT instead, to allow for proper shutdown." %{ if (__isExternalAddressLike(processHandleOrPid) ) { - HANDLE hProcess = _HANDLEVal(processHandleOrPid); - - if (hProcess != 0) { - TerminateProcess( hProcess, __intVal(exitCode) ); - } - RETURN( true ); + HANDLE hProcess = _HANDLEVal(processHandleOrPid); + + if (hProcess != 0) { + TerminateProcess( hProcess, __intVal(exitCode) ); + } + RETURN( true ); } else if( __isSmallInteger(processHandleOrPid) ) { - HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0, __smallIntegerVal(processHandleOrPid)); - - if( hProcess != 0 ) { - TerminateProcess( hProcess, __intVal(exitCode) ); - CloseHandle(hProcess); - } - RETURN( true ); + HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0, __smallIntegerVal(processHandleOrPid)); + + if( hProcess != 0 ) { + TerminateProcess( hProcess, __intVal(exitCode) ); + CloseHandle(hProcess); + } + RETURN( true ); } %}. self primitiveFailed:#invalidParameter. @@ -6776,8 +6796,8 @@ "terminate a process group. The processes should have a chance to do some cleanup. WIN32: - The processGroup is terminated by sending it a CTRL-C - using GenerateConsoleCtrlEvent." + The processGroup is terminated by sending it a CTRL-C + using GenerateConsoleCtrlEvent." | pid list | @@ -6785,14 +6805,14 @@ list size == 0 ifTrue:[^ self ]. processGroupHandleOrPid isInteger ifTrue:[ - pid := processGroupHandleOrPid + pid := processGroupHandleOrPid ] ifFalse:[ - pid := processGroupHandleOrPid pid. + pid := processGroupHandleOrPid pid. ]. list do:[:anOSProcess | - ( anOSProcess parentPid == pid ) ifTrue:[ - self terminateProcess:( anOSProcess pid ). - ]. + ( anOSProcess parentPid == pid ) ifTrue:[ + self terminateProcess:( anOSProcess pid ). + ]. ]. ! ! @@ -6819,8 +6839,8 @@ sa.bInheritHandle = TRUE; if( ! CreatePipe( &pipeRead, &pipeWrite, &sa, 0 ) ) { - @global(LastErrorNumber) = error = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); - goto out; + @global(LastErrorNumber) = error = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); + goto out; } #if 1 @@ -6840,9 +6860,9 @@ out:; %}. (fd1 notNil and:[fd2 notNil]) ifTrue:[ - (fd1 ~~ -1 and:[fd2 ~~ -1]) ifTrue:[ - ^ Array with:fd1 with:fd2. - ]. + (fd1 ~~ -1 and:[fd2 ~~ -1]) ifTrue:[ + ^ Array with:fd1 with:fd2. + ]. ]. ^ nil @@ -6854,15 +6874,15 @@ "free pid resource" %{ if (__isExternalAddressLike(pid) ) { - HANDLE __pid = _HANDLEVal(pid); - - if (__pid != 0) { + HANDLE __pid = _HANDLEVal(pid); + + if (__pid != 0) { #ifdef PROCESSDEBUGWIN32 - console_printf("Close ProcessHandle %x\n", __pid); -#endif - CloseHandle(__pid); - _HANDLEVal(pid) = 0; - } + console_printf("Close ProcessHandle %x\n", __pid); +#endif + CloseHandle(__pid); + _HANDLEVal(pid) = 0; + } } %}. ^ true. @@ -6877,17 +6897,17 @@ spaceForTargetHandle := ExternalLong new. hMe := self getCurrentProcess. rslt := self - primDuplicateHandle_hSourcProcessHandle:hMe - hSourceHandle:aHandle - hTargetProcesshandle:targetProcessHandle - lpTargetHandle:spaceForTargetHandle - dwDesiredAccess:0 - bInheritHandle:false - dwOptions:2 "DUPLICATE_SAME_ACCESS". + primDuplicateHandle_hSourcProcessHandle:hMe + hSourceHandle:aHandle + hTargetProcesshandle:targetProcessHandle + lpTargetHandle:spaceForTargetHandle + dwDesiredAccess:0 + bInheritHandle:false + dwOptions:2 "DUPLICATE_SAME_ACCESS". rslt ifFalse:[ - self primitiveFailed. - ^ nil + self primitiveFailed. + ^ nil ]. ^ ExternalAddress newAddress:(spaceForTargetHandle value). @@ -6909,20 +6929,20 @@ hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if( hProcessSnap != INVALID_HANDLE_VALUE ) { - pe32.dwSize = sizeof(PROCESSENTRY32); - Process32First( hProcessSnap, & pe32 ); - - do { - st_perProc = __SSEND0(@global(OSProcess), @symbol(new), 0); - - __SSEND1(st_perProc, @symbol(commandLine:), 0, __MKSTRING(pe32.szExeFile) ); - __SSEND1(st_perProc, @symbol(pid:), 0, __mkSmallInteger(pe32.th32ProcessID) ); - __SSEND1(st_perProc, @symbol(parentPid:), 0, __mkSmallInteger(pe32.th32ParentProcessID) ); - - __SSEND1(list, @symbol(add:), 0, st_perProc ); - } - while(Process32Next(hProcessSnap,&pe32)); - CloseHandle( hProcessSnap ); + pe32.dwSize = sizeof(PROCESSENTRY32); + Process32First( hProcessSnap, & pe32 ); + + do { + st_perProc = __SSEND0(@global(OSProcess), @symbol(new), 0); + + __SSEND1(st_perProc, @symbol(commandLine:), 0, __MKSTRING(pe32.szExeFile) ); + __SSEND1(st_perProc, @symbol(pid:), 0, __mkSmallInteger(pe32.th32ProcessID) ); + __SSEND1(st_perProc, @symbol(parentPid:), 0, __mkSmallInteger(pe32.th32ParentProcessID) ); + + __SSEND1(list, @symbol(add:), 0, st_perProc ); + } + while(Process32Next(hProcessSnap,&pe32)); + CloseHandle( hProcessSnap ); } #endif /* TLHELP32_H_INCLUDE */ @@ -6943,8 +6963,8 @@ getPrivateProfileString:appNameString key:keyNameString default:defaultString fileName:fileName ^ self - getProfileString:appNameString key:keyNameString default:defaultString - fileName:fileName private:true + getProfileString:appNameString key:keyNameString default:defaultString + fileName:fileName private:true "Modified: / 27-07-2006 / 11:57:03 / fm" ! @@ -6962,40 +6982,40 @@ OBJ retVal; if (__isStringLike(appNameString)) { - __appNameString = __stringVal(appNameString); + __appNameString = __stringVal(appNameString); } else if (appNameString != nil) - goto primitiveFail; + goto primitiveFail; if (__isStringLike(keyNameString)) { - __keyNameString = __stringVal(keyNameString); + __keyNameString = __stringVal(keyNameString); } else if (keyNameString != nil) - goto primitiveFail; + goto primitiveFail; if (__isStringLike(defaultString)) { - __defaultString = __stringVal(defaultString); + __defaultString = __stringVal(defaultString); } else if (defaultString != nil) - goto primitiveFail; + goto primitiveFail; do { - nChars = GetProfileString(__appNameString, __keyNameString, __defaultString, usedBuffer, bufferSize); - if (nChars >= 0) { - if (nChars != bufferSize-1) { - retVal = __MKSTRING_L(usedBuffer, nChars); - if (usedBuffer != quickBuffer) free(usedBuffer); - RETURN (retVal); - } - - { - /* use a bigger buffer */ - char *newBuffer; - int newBufferSize = bufferSize * 2; - - newBuffer = (char *)malloc( newBufferSize ); - if (usedBuffer != quickBuffer) free(usedBuffer); - usedBuffer = newBuffer; - bufferSize = newBufferSize; - } - } + nChars = GetProfileString(__appNameString, __keyNameString, __defaultString, usedBuffer, bufferSize); + if (nChars >= 0) { + if (nChars != bufferSize-1) { + retVal = __MKSTRING_L(usedBuffer, nChars); + if (usedBuffer != quickBuffer) free(usedBuffer); + RETURN (retVal); + } + + { + /* use a bigger buffer */ + char *newBuffer; + int newBufferSize = bufferSize * 2; + + newBuffer = (char *)malloc( newBufferSize ); + if (usedBuffer != quickBuffer) free(usedBuffer); + usedBuffer = newBuffer; + bufferSize = newBufferSize; + } + } } while (nChars > 0); RETURN (nil); @@ -7020,49 +7040,49 @@ OBJ retVal; if (__isStringLike(appNameString)) { - __appNameString = __stringVal(appNameString); + __appNameString = __stringVal(appNameString); } else if (appNameString != nil) - goto primitiveFail; + goto primitiveFail; if (__isStringLike(keyNameString)) { - __keyNameString = __stringVal(keyNameString); + __keyNameString = __stringVal(keyNameString); } else if (keyNameString != nil) - goto primitiveFail; + goto primitiveFail; if (__isStringLike(defaultString)) { - __defaultString = __stringVal(defaultString); + __defaultString = __stringVal(defaultString); } else if (defaultString != nil) - goto primitiveFail; + goto primitiveFail; if (private == true) { - if (! __isStringLike(fileName)) goto primitiveFail; - __fileName = __stringVal(fileName); + if (! __isStringLike(fileName)) goto primitiveFail; + __fileName = __stringVal(fileName); } do { - if (private == true) { - nChars = GetPrivateProfileString(__appNameString, __keyNameString, __defaultString, usedBuffer, bufferSize, __fileName); - } else { - nChars = GetProfileString(__appNameString, __keyNameString, __defaultString, usedBuffer, bufferSize); - } - if (nChars >= 0) { - if (nChars != bufferSize-1) { - retVal = __MKSTRING_L(usedBuffer, nChars); - if (usedBuffer != quickBuffer) free(usedBuffer); - RETURN (retVal); - } - - { - /* use a bigger buffer */ - char *newBuffer; - int newBufferSize = bufferSize * 2; - - newBuffer = (char *)malloc( newBufferSize ); - if (usedBuffer != quickBuffer) free(usedBuffer); - usedBuffer = newBuffer; - bufferSize = newBufferSize; - } - } + if (private == true) { + nChars = GetPrivateProfileString(__appNameString, __keyNameString, __defaultString, usedBuffer, bufferSize, __fileName); + } else { + nChars = GetProfileString(__appNameString, __keyNameString, __defaultString, usedBuffer, bufferSize); + } + if (nChars >= 0) { + if (nChars != bufferSize-1) { + retVal = __MKSTRING_L(usedBuffer, nChars); + if (usedBuffer != quickBuffer) free(usedBuffer); + RETURN (retVal); + } + + { + /* use a bigger buffer */ + char *newBuffer; + int newBufferSize = bufferSize * 2; + + newBuffer = (char *)malloc( newBufferSize ); + if (usedBuffer != quickBuffer) free(usedBuffer); + usedBuffer = newBuffer; + bufferSize = newBufferSize; + } + } } while (nChars > 0); RETURN (nil); @@ -7091,13 +7111,13 @@ "Convert the multi-byte string encoding in to a Unicode encoding in ." " int MultiByteToWideChar( - UINT CodePage, // code page - DWORD dwFlags, // character-type options - LPCSTR lpMultiByteStr, // address of string to map - int cchMultiByte, // number of characters in string - LPWSTR lpWideCharStr, // address of wide-character buffer - int cchWideChar // size of buffer - );" + UINT CodePage, // code page + DWORD dwFlags, // character-type options + LPCSTR lpMultiByteStr, // address of string to map + int cchMultiByte, // number of characters in string + LPWSTR lpWideCharStr, // address of wide-character buffer + int cchWideChar // size of buffer + );" ^self primitiveFailed @@ -7116,7 +7136,7 @@ " self - playSound:'C:\Dokumente und Einstellungen\cg\work\exept\expecco\resources\sounds\start.wav' + playSound:'C:\Dokumente und Einstellungen\cg\work\exept\expecco\resources\sounds\start.wav' " "Created: / 06-11-2007 / 00:46:57 / cg" @@ -7134,8 +7154,8 @@ " self - playSound:'C:\Dokumente und Einstellungen\cg\work\exept\expecco\resources\sounds\start.wav' - mode:1 + playSound:'C:\Dokumente und Einstellungen\cg\work\exept\expecco\resources\sounds\start.wav' + mode:1 " "Modified: / 06-11-2007 / 00:46:27 / cg" @@ -7165,7 +7185,7 @@ " - self primGetLastError + self primGetLastError " ! @@ -7174,7 +7194,7 @@ " - self primSetLastError: 0 + self primSetLastError: 0 " ! @@ -7198,15 +7218,15 @@ "Convert the Unicode encoding in to a multi-byte string encoding in ." "int WideCharToMultiByte( - UINT CodePage, // code page - DWORD dwFlags, // performance and mapping flags - LPCWSTR lpWideCharStr, // address of wide-character string - int cchWideChar, // number of characters in string - LPSTR lpMultiByteStr, // address of buffer for new string - int cchMultiByte, // size of buffer - LPCSTR lpDefaultChar, // address of default for unmappable characters - LPBOOL lpUsedDefaultChar // address of flag set when default char. used - );" + UINT CodePage, // code page + DWORD dwFlags, // performance and mapping flags + LPCWSTR lpWideCharStr, // address of wide-character string + int cchWideChar, // number of characters in string + LPSTR lpMultiByteStr, // address of buffer for new string + int cchMultiByte, // size of buffer + LPCSTR lpDefaultChar, // address of default for unmappable characters + LPBOOL lpUsedDefaultChar // address of flag set when default char. used + );" ^self primitiveFailed @@ -7248,8 +7268,8 @@ "/ lastErrorCode == 5 "ERROR_ACCESS_DENIED" ifTrue:[Transcript showCR: 'Mutex not accesible (GetLastError = ERROR_ACCESS_DENIED)'.]. "/ lastErrorCode == 183 "ERROR_ALREADY_EXISTS" ifTrue:[Transcript showCR: 'Mutex already exists (GetLastError = ERROR_ALREADY_EXISTS)'.]. (handle isNil or:[handle address ~~ 0]) ifFalse:[ - Transcript showCR: 'CreateMutexNamed: "', name printString, '" failed'. - handle := nil. + Transcript showCR: 'CreateMutexNamed: "', name printString, '" failed'. + handle := nil. ]. ^ Array with: handle with: lastErrorCode @@ -7269,8 +7289,8 @@ lastErrorCode := handleAndLastErrorCode second. "/ self assert: lastErrorCode == 0. ^ handle isNil - or:[lastErrorCode == 183 "ERROR_ALREADY_EXISTS" - or:[ lastErrorCode == 5 "ERROR_ACCESS_DENIED"]] + or:[lastErrorCode == 183 "ERROR_ALREADY_EXISTS" + or:[ lastErrorCode == 5 "ERROR_ACCESS_DENIED"]] "Modified: / 03-08-2010 / 16:59:41 / cg" ! @@ -7287,8 +7307,8 @@ "/ lastErrorCode = 2 ifTrue:[Transcript showCR: 'Mutex does not exist (GetLastError = ERROR_FILE_NOT_FOUND)'.]. "/ lastErrorCode = 5 ifTrue:[Transcript showCR: 'Mutex not accesible (GetLastError = ERROR_ACCESS_DENIED)'.]. (handle isNil or:[handle address ~~ 0]) ifFalse:[ - Transcript showCR: 'OpenMutexNamed: "', name printString, '" failed'. - ^ nil. + Transcript showCR: 'OpenMutexNamed: "', name printString, '" failed'. + ^ nil. ]. ^ handle @@ -7345,8 +7365,8 @@ | released| hMutex isNil ifTrue:[ - Transcript showCR: 'hMutex is nil - cannot release'. - ^ false + Transcript showCR: 'hMutex is nil - cannot release'. + ^ false ]. released := self primReleaseMutex: hMutex. released ifFalse:[Transcript showCR: 'Release Mutex failed'.]. @@ -7362,8 +7382,8 @@ hMutex := self openMutexNamed: name. hMutex isNil ifTrue:[ - Transcript showCR: 'Cannot release Mutex named: "', name printString,'"'. - ^ false + Transcript showCR: 'Cannot release Mutex named: "', name printString,'"'. + ^ false ]. ^ self releaseMutex: hMutex. @@ -7394,53 +7414,53 @@ getDomainName "return the DNS domain this host is in. Notice: - not all systems support this; on some, 'unknown' is returned." + not all systems support this; on some, 'unknown' is returned." |domainName idx hostName k| DomainName notNil ifTrue:[ - ^ DomainName + ^ DomainName ]. "/ sometimes, we can extract the domainName from the hostName ... hostName := self getHostName. hostName notEmptyOrNil ifTrue:[ - idx := hostName indexOf:$.. - idx ~~ 0 ifTrue:[ - domainName := hostName copyFrom:idx+1. - ] + idx := hostName indexOf:$.. + idx ~~ 0 ifTrue:[ + domainName := hostName copyFrom:idx+1. + ] ]. domainName isNil ifTrue:[ - domainName := self getEnvironment:'DOMAIN'. - domainName isNil ifTrue:[ - domainName := self getEnvironment:'DOMAINNAME'. - ]. - - domainName isNil ifTrue:[ - "/ ok, search the registry ... - "/ under NT and later, it is found there ... - k := RegistryEntry key:'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters'. - k notNil ifTrue:[ - domainName := k valueNamed:'Domain'. - k close. - ]. - ]. - - domainName isNil ifTrue:[ - "/ under Win95/Win98, it is found there ... - k := RegistryEntry key:'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP'. - k notNil ifTrue:[ - domainName := k valueNamed:'Domain'. - k close. - ] - ]. - - domainName isNil ifTrue:[ - 'Win32OperatingSystem [warning]: cannot find out domainName' errorPrintCR. - domainName := 'unknown'. - ]. - DomainName := domainName. "cache only, if it is fixed" + domainName := self getEnvironment:'DOMAIN'. + domainName isNil ifTrue:[ + domainName := self getEnvironment:'DOMAINNAME'. + ]. + + domainName isNil ifTrue:[ + "/ ok, search the registry ... + "/ under NT and later, it is found there ... + k := RegistryEntry key:'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters'. + k notNil ifTrue:[ + domainName := k valueNamed:'Domain'. + k close. + ]. + ]. + + domainName isNil ifTrue:[ + "/ under Win95/Win98, it is found there ... + k := RegistryEntry key:'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP'. + k notNil ifTrue:[ + domainName := k valueNamed:'Domain'. + k close. + ] + ]. + + domainName isNil ifTrue:[ + 'Win32OperatingSystem [warning]: cannot find out domainName' errorPrintCR. + domainName := 'unknown'. + ]. + DomainName := domainName. "cache only, if it is fixed" ]. ^ domainName @@ -7460,28 +7480,28 @@ char *env; if (__isStringLike(aStringOrSymbol)) { - char buff[1024]; - int nNeeded; - OBJ ret = nil; - - nNeeded = GetEnvironmentVariable(__stringVal(aStringOrSymbol), - buff, - sizeof(buff)); - if (nNeeded > sizeof(buff)) { - char *buff2; - - buff2 = (char *)malloc(nNeeded); - GetEnvironmentVariable(__stringVal(aStringOrSymbol), - buff2, - nNeeded); - ret = __MKSTRING(buff2); - free(buff2); - } else { - if (nNeeded > 0) { - ret = __MKSTRING(buff); - } - } - RETURN (ret); + char buff[1024]; + int nNeeded; + OBJ ret = nil; + + nNeeded = GetEnvironmentVariable(__stringVal(aStringOrSymbol), + buff, + sizeof(buff)); + if (nNeeded > sizeof(buff)) { + char *buff2; + + buff2 = (char *)malloc(nNeeded); + GetEnvironmentVariable(__stringVal(aStringOrSymbol), + buff2, + nNeeded); + ret = __MKSTRING(buff2); + free(buff2); + } else { + if (nNeeded > 0) { + ret = __MKSTRING(buff); + } + } + RETURN (ret); } %} . @@ -7510,7 +7530,7 @@ DWORD buffSize = sizeof(buffer); if (GetComputerNameEx(ComputerNameDnsFullyQualified, buffer, &buffSize) == TRUE) { - hostName = __MKSTRING(buffer); + hostName = __MKSTRING(buffer); } %}. ^ hostName @@ -7528,14 +7548,14 @@ lang := self getEnvironment:'LANG'. (lang isNil or:[lang = 'default']) ifTrue:[ - "/ ok, search the registry ... - "/ under XP, it is found there ... - lang := RegistryEntry - stringValueFor:'sLanguage' - atKey:'HKEY_CURRENT_USER\Control Panel\International'. - lang notNil ifTrue:[ - lang := self mapLanguage:lang. - ]. + "/ ok, search the registry ... + "/ under XP, it is found there ... + lang := RegistryEntry + stringValueFor:'sLanguage' + atKey:'HKEY_CURRENT_USER\Control Panel\International'. + lang notNil ifTrue:[ + lang := self mapLanguage:lang. + ]. ]. ^ lang @@ -7549,42 +7569,42 @@ "return a dictionary filled with values from the locale information; Not all fields may be present, depending on the OS's setup and capabilities. Possible fields are: - decimalPoint - - thousandsSep - - internationalCurrencySymbol - - currencySymbol - - monetaryDecimalPoint - - monetaryThousandsSeparator - - positiveSign - - negativeSign - - internationalFractionalDigits - - fractionalDigits - - positiveSignPrecedesCurrencySymbol - - negativeSignPrecedesCurrencySymbol - - positiveSignSeparatedBySpaceFromCurrencySymbol - - negativeSignSeparatedBySpaceFromCurrencySymbol - - positiveSignPosition - one of: #parenthesesAround, - #signPrecedes, - #signSuceeds, - #signPrecedesCurrencySymbol, - #signSuceedsCurrencySymbol - - negativeSignPosition + decimalPoint + + thousandsSep + + internationalCurrencySymbol + + currencySymbol + + monetaryDecimalPoint + + monetaryThousandsSeparator + + positiveSign + + negativeSign + + internationalFractionalDigits + + fractionalDigits + + positiveSignPrecedesCurrencySymbol + + negativeSignPrecedesCurrencySymbol + + positiveSignSeparatedBySpaceFromCurrencySymbol + + negativeSignSeparatedBySpaceFromCurrencySymbol + + positiveSignPosition + one of: #parenthesesAround, + #signPrecedes, + #signSuceeds, + #signPrecedesCurrencySymbol, + #signSuceedsCurrencySymbol + + negativeSignPosition it is up to the application to deal with undefined values. @@ -7595,9 +7615,9 @@ |info val| LocaleInfo notNil ifTrue:[ - "/ return the internal info; useful on systems which do not - "/ support this. - ^ LocaleInfo + "/ return the internal info; useful on systems which do not + "/ support this. + ^ LocaleInfo ]. info := IdentityDictionary new. @@ -7618,31 +7638,31 @@ int csNegSepBySpace; /* money: 1 if currency symbol should be separated by a space from a negative value; 0 if no space */ int csPosSignPosition; /* money: 0: ()'s around the value & currency symbol */ int csNegSignPosition; /* 1: sign precedes the value & currency symbol */ - /* 2: sign succeeds the value & currency symbol */ - /* 3: sign immediately precedes the currency symbol */ - /* 4: sign immediately suceeds the currency symbol */ + /* 2: sign succeeds the value & currency symbol */ + /* 3: sign immediately precedes the currency symbol */ + /* 4: sign immediately suceeds the currency symbol */ #if defined(HAS_LOCALECONV) struct lconv *conf; conf = localeconv(); if (conf) { - decimalPoint = conf->decimal_point; - thousandsSep = conf->thousands_sep; - intCurrencySymbol = conf->int_curr_symbol; - currencySymbol = conf->currency_symbol; - monDecimalPoint = conf->mon_decimal_point; - monThousandsSep = conf->mon_thousands_sep; - positiveSign = conf->positive_sign; - negativeSign = conf->negative_sign; - intFractDigits = conf->int_frac_digits; - fractDigits = conf->frac_digits; - csPosPrecedes = conf->p_cs_precedes; - csNegPrecedes = conf->n_cs_precedes; - csPosSepBySpace = conf->p_sep_by_space; - csNegSepBySpace = conf->n_sep_by_space; - csPosSignPosition = conf->p_sign_posn; - csNegSignPosition = conf->n_sign_posn; + decimalPoint = conf->decimal_point; + thousandsSep = conf->thousands_sep; + intCurrencySymbol = conf->int_curr_symbol; + currencySymbol = conf->currency_symbol; + monDecimalPoint = conf->mon_decimal_point; + monThousandsSep = conf->mon_thousands_sep; + positiveSign = conf->positive_sign; + negativeSign = conf->negative_sign; + intFractDigits = conf->int_frac_digits; + fractDigits = conf->frac_digits; + csPosPrecedes = conf->p_cs_precedes; + csNegPrecedes = conf->n_cs_precedes; + csPosSepBySpace = conf->p_sep_by_space; + csNegSepBySpace = conf->n_sep_by_space; + csPosSignPosition = conf->p_sign_posn; + csNegSignPosition = conf->n_sign_posn; } #else decimalPoint = (char *)0; @@ -7663,129 +7683,129 @@ csNegSignPosition = -1; #endif if (decimalPoint) { - val = __MKSTRING(decimalPoint); - __AT_PUT_(info, @symbol(decimalPoint), val); + val = __MKSTRING(decimalPoint); + __AT_PUT_(info, @symbol(decimalPoint), val); } if (thousandsSep) { - val = __MKSTRING(thousandsSep); - __AT_PUT_(info, @symbol(thousandsSeparator), val); + val = __MKSTRING(thousandsSep); + __AT_PUT_(info, @symbol(thousandsSeparator), val); } if (intCurrencySymbol) { - val = __MKSTRING(intCurrencySymbol); - __AT_PUT_(info, @symbol(internationCurrencySymbol), val); + val = __MKSTRING(intCurrencySymbol); + __AT_PUT_(info, @symbol(internationCurrencySymbol), val); } if (currencySymbol) { - val = __MKSTRING(currencySymbol); - __AT_PUT_(info, @symbol(currencySymbol), val); + val = __MKSTRING(currencySymbol); + __AT_PUT_(info, @symbol(currencySymbol), val); } if (monDecimalPoint) { - val = __MKSTRING(monDecimalPoint); - __AT_PUT_(info, @symbol(monetaryDecimalPoint), val); + val = __MKSTRING(monDecimalPoint); + __AT_PUT_(info, @symbol(monetaryDecimalPoint), val); } if (monThousandsSep) { - val = __MKSTRING(monThousandsSep); - __AT_PUT_(info, @symbol(monetaryThousandsSeparator), val); + val = __MKSTRING(monThousandsSep); + __AT_PUT_(info, @symbol(monetaryThousandsSeparator), val); } if (positiveSign) { - val = __MKSTRING(positiveSign); - __AT_PUT_(info, @symbol(positiveSign), val); + val = __MKSTRING(positiveSign); + __AT_PUT_(info, @symbol(positiveSign), val); } if (negativeSign) { - val = __MKSTRING(negativeSign); - __AT_PUT_(info, @symbol(negativeSign), val); + val = __MKSTRING(negativeSign); + __AT_PUT_(info, @symbol(negativeSign), val); } if (intFractDigits >= 0) { - __AT_PUT_(info, @symbol(internationalFractionalDigits), __mkSmallInteger(intFractDigits)); + __AT_PUT_(info, @symbol(internationalFractionalDigits), __mkSmallInteger(intFractDigits)); } if (fractDigits >= 0) { - __AT_PUT_(info, @symbol(fractionalDigits), __mkSmallInteger(fractDigits)); + __AT_PUT_(info, @symbol(fractionalDigits), __mkSmallInteger(fractDigits)); } if (csPosPrecedes >= 0) { - if (csPosPrecedes == 0) { - val = false; - } else { - val = true; - } - __AT_PUT_(info, @symbol(positiveSignPrecedesCurrencySymbol), val ); + if (csPosPrecedes == 0) { + val = false; + } else { + val = true; + } + __AT_PUT_(info, @symbol(positiveSignPrecedesCurrencySymbol), val ); } if (csNegPrecedes >= 0) { - if (csNegPrecedes == 0) { - val = false; - } else { - val = true; - } - __AT_PUT_(info, @symbol(negativeSignPrecedesCurrencySymbol), val ); + if (csNegPrecedes == 0) { + val = false; + } else { + val = true; + } + __AT_PUT_(info, @symbol(negativeSignPrecedesCurrencySymbol), val ); } if (csPosSepBySpace >= 0) { - if (csPosSepBySpace == 0) { - val = false; - } else { - val = true; - } - __AT_PUT_(info, @symbol(positiveSignSeparatedBySpaceFromCurrencySymbol), val); + if (csPosSepBySpace == 0) { + val = false; + } else { + val = true; + } + __AT_PUT_(info, @symbol(positiveSignSeparatedBySpaceFromCurrencySymbol), val); } if (csNegSepBySpace >= 0) { - if (csNegSepBySpace == 0) { - val = false; - } else { - val = true; - } - __AT_PUT_(info, @symbol(negativeSignSeparatedBySpaceFromCurrencySymbol), val); + if (csNegSepBySpace == 0) { + val = false; + } else { + val = true; + } + __AT_PUT_(info, @symbol(negativeSignSeparatedBySpaceFromCurrencySymbol), val); } switch (csPosSignPosition) { - case 0: - val = @symbol(parenthesesAround); - break; - - case 1: - val = @symbol(signPrecedes); - break; - - case 2: - val = @symbol(signSuceeds); - break; - - case 3: - val = @symbol(signPrecedesCurrencySymbol); - break; - - case 4: - val = @symbol(signSuceedsCurrencySymbol); - break; - - default: - val = nil; + case 0: + val = @symbol(parenthesesAround); + break; + + case 1: + val = @symbol(signPrecedes); + break; + + case 2: + val = @symbol(signSuceeds); + break; + + case 3: + val = @symbol(signPrecedesCurrencySymbol); + break; + + case 4: + val = @symbol(signSuceedsCurrencySymbol); + break; + + default: + val = nil; } if (val != nil) { - __AT_PUT_(info, @symbol(positiveSignPosition), val); + __AT_PUT_(info, @symbol(positiveSignPosition), val); } switch (csNegSignPosition) { - case 0: - val = @symbol(parenthesesAround); - break; - - case 1: - val = @symbol(signPrecedes); - break; - - case 2: - val = @symbol(signSuceeds); - break; - - case 3: - val = @symbol(signPrecedesCurrencySymbol); - break; - - case 4: - val = @symbol(signSuceedsCurrencySymbol); - break; - - default: - val = nil; + case 0: + val = @symbol(parenthesesAround); + break; + + case 1: + val = @symbol(signPrecedes); + break; + + case 2: + val = @symbol(signSuceeds); + break; + + case 3: + val = @symbol(signPrecedesCurrencySymbol); + break; + + case 4: + val = @symbol(signSuceedsCurrencySymbol); + break; + + default: + val = nil; } if (val != nil) { - __AT_PUT_(info, @symbol(negativeSignPosition), val); + __AT_PUT_(info, @symbol(negativeSignPosition), val); } %}. ^ info @@ -7799,8 +7819,8 @@ getNetworkMACAddresses "return a dictionary filled with - key -> name of interface - value -> the MAC adress (as ByteArray) + key -> name of interface + value -> the MAC adress (as ByteArray) for each interface " @@ -7829,27 +7849,27 @@ GetAdaptersInfo_entry = (FARPROC) GetAdaptersInfo; #else if (GetAdaptersInfo_entry == NULL) { - GetAdaptersInfo_entry = __get_iphlpapi_functionAddress("GetAdaptersInfo"); + GetAdaptersInfo_entry = __get_iphlpapi_functionAddress("GetAdaptersInfo"); } #endif /* NO_NT4_0_COMPATIBILITY */ if (GetAdaptersInfo_entry) { - dwStatus = (*GetAdaptersInfo_entry)( - AdapterInfo, // [out] buffer to receive data - &dwBufLen); // [in] size of receive data buffer - if (dwStatus == ERROR_SUCCESS) { - PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; - unsigned char *bP; - int nA = 0; - - bP = __byteArrayVal(rawData); - do { - name = __MKSTRING(pAdapterInfo->AdapterName); - description = __MKSTRING(pAdapterInfo->Description); - macAddress = __MKBYTEARRAY(pAdapterInfo->Address, 6); - ipAddress = __MKSTRING(pAdapterInfo->IpAddressList.IpAddress.String); - ipAddressMask = __MKSTRING(pAdapterInfo->IpAddressList.IpMask.String); - entry = __ARRAY_NEW_INT(5); + dwStatus = (*GetAdaptersInfo_entry)( + AdapterInfo, // [out] buffer to receive data + &dwBufLen); // [in] size of receive data buffer + if (dwStatus == ERROR_SUCCESS) { + PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; + unsigned char *bP; + int nA = 0; + + bP = __byteArrayVal(rawData); + do { + name = __MKSTRING(pAdapterInfo->AdapterName); + description = __MKSTRING(pAdapterInfo->Description); + macAddress = __MKBYTEARRAY(pAdapterInfo->Address, 6); + ipAddress = __MKSTRING(pAdapterInfo->IpAddressList.IpAddress.String); + ipAddressMask = __MKSTRING(pAdapterInfo->IpAddressList.IpMask.String); + entry = __ARRAY_NEW_INT(5); /* * back to ST/X's String definition */ @@ -7859,33 +7879,33 @@ # ifdef __DEF_String # define Context __DEF_Context # endif - __ArrayInstPtr(entry)->a_element[0] = name; __STORE(entry, name); - __ArrayInstPtr(entry)->a_element[1] = description; __STORE(entry, description); - __ArrayInstPtr(entry)->a_element[2] = macAddress; __STORE(entry, macAddress); - __ArrayInstPtr(entry)->a_element[3] = ipAddress; __STORE(entry, ipAddress); - __ArrayInstPtr(entry)->a_element[4] = ipAddressMask; __STORE(entry, ipAddressMask); - - __ArrayInstPtr(rawData)->a_element[nA] = entry; __STORE(rawData, entry); - nA++; - pAdapterInfo = pAdapterInfo->Next; - } while(pAdapterInfo); - nAdapters = __mkSmallInteger(nA); - } + __ArrayInstPtr(entry)->a_element[0] = name; __STORE(entry, name); + __ArrayInstPtr(entry)->a_element[1] = description; __STORE(entry, description); + __ArrayInstPtr(entry)->a_element[2] = macAddress; __STORE(entry, macAddress); + __ArrayInstPtr(entry)->a_element[3] = ipAddress; __STORE(entry, ipAddress); + __ArrayInstPtr(entry)->a_element[4] = ipAddressMask; __STORE(entry, ipAddressMask); + + __ArrayInstPtr(rawData)->a_element[nA] = entry; __STORE(rawData, entry); + nA++; + pAdapterInfo = pAdapterInfo->Next; + } while(pAdapterInfo); + nAdapters = __mkSmallInteger(nA); + } } #endif /* NO_GETADAPTERSINFO */ %}. info := Dictionary new. nAdapters notNil ifTrue:[ - 1 to:nAdapters do:[:i | - |entry name description macAddr ipAddr| - - entry := rawData at:i. - name := entry at:1. - "/ description := entry at:2. - macAddr := entry at:3. - "/ ipAddr := entry at:4. - info at:name put:macAddr. - ]. + 1 to:nAdapters do:[:i | + |entry name description macAddr ipAddr| + + entry := rawData at:i. + name := entry at:1. + "/ description := entry at:2. + macAddr := entry at:3. + "/ ipAddr := entry at:4. + info at:name put:macAddr. + ]. ]. ^ info @@ -7898,14 +7918,14 @@ "answer the number of physical processors in the system" %{ - SYSTEM_INFO sInfo; - GetSystemInfo(&sInfo); - - return __mkSmallInteger(sInfo.dwNumberOfProcessors); + SYSTEM_INFO sInfo; + GetSystemInfo(&sInfo); + + return __mkSmallInteger(sInfo.dwNumberOfProcessors); %}. " - self getNumberOfProcessors + self getNumberOfProcessors " ! @@ -7928,7 +7948,7 @@ "if supported by the OS, return the systemID; a unique per machine identification. WARNING: - not all systems support this; on some, 'unknown' is returned." + not all systems support this; on some, 'unknown' is returned." %{ /* NO_CONTEXT */ #if defined(HAS_GETHOSTID) @@ -7942,15 +7962,15 @@ #endif #if defined(HAS_SYSINFO) && defined(SI_HW_SERIAL) { - char buffer[128]; - - buffer[0] = 0; - if (sysinfo(SI_HW_SERIAL, buffer, sizeof(buffer))) { - buffer[127] = 0; - if (strlen(buffer) > 0) { - RETURN(__MKSTRING(buffer)); - } - } + char buffer[128]; + + buffer[0] = 0; + if (sysinfo(SI_HW_SERIAL, buffer, sizeof(buffer))) { + buffer[127] = 0; + if (strlen(buffer) > 0) { + RETURN(__MKSTRING(buffer)); + } + } } #endif %}. @@ -7974,25 +7994,25 @@ This method is mainly provided to augment error reports with some system information. (in case of system/version specific OS errors, conditional workarounds and patches - may be based upon this info). + may be based upon this info). Your application should NOT depend upon this in any way. The returned info may (or may not) contain: - #system -> some operating system identification (irix, Linux, nt, win32s ...) - #version -> OS version (some os version identification) - #release -> OS release (3.5, 1.2.1 ...) - #node -> some host identification (hostname) - #domain -> domain name (hosts domain) - #machine -> type of machine (i586, mips ...) + #system -> some operating system identification (irix, Linux, nt, win32s ...) + #version -> OS version (some os version identification) + #release -> OS release (3.5, 1.2.1 ...) + #node -> some host identification (hostname) + #domain -> domain name (hosts domain) + #machine -> type of machine (i586, mips ...) win32: - #physicalRam -> total amount of physical memory - #freeRam -> amount of free memory - #swapSize -> size of swapSpace (page file) - #freeSwap -> free bytes in swapSpace - #virtualRam -> total amount of virtual memory - #freeVirtual -> amount of free virtual memory - #memoryLoad -> percentage of memory usage (useless) + #physicalRam -> total amount of physical memory + #freeRam -> amount of free memory + #swapSize -> size of swapSpace (page file) + #freeSwap -> free bytes in swapSpace + #virtualRam -> total amount of virtual memory + #freeVirtual -> amount of free virtual memory + #memoryLoad -> percentage of memory usage (useless) " |sys node rel ver minorVer majorVer mach dom info arch @@ -8018,20 +8038,20 @@ majorVer = __mkSmallInteger(verMajor); if (HIWORD(vsn) & 0x8000) { - sys = @symbol(win95); + sys = @symbol(win95); } else { - if ((verMajor > 5) - || ((verMajor == 5) && (verMinor >= 1))) { - sys = @symbol(xp); - if (verMajor >= 6) { - sys = @symbol(vista); - if (verMinor >= 1) { - sys = @symbol(win7); - } - } - } else { - sys = @symbol(nt); - } + if ((verMajor > 5) + || ((verMajor == 5) && (verMinor >= 1))) { + sys = @symbol(xp); + if (verMajor >= 6) { + sys = @symbol(vista); + if (verMinor >= 1) { + sys = @symbol(win7); + } + } + } else { + sys = @symbol(nt); + } } len = snprintf(vsnBuffer, sizeof(vsnBuffer), "%d.%d", verMajor, verMinor); rel = __MKSTRING_L(vsnBuffer, len); @@ -8057,160 +8077,160 @@ #endif { #ifdef PROCESSOR_ARCHITECTURE_INTEL - case PROCESSOR_ARCHITECTURE_INTEL: - arch = @symbol(intel); - break; + case PROCESSOR_ARCHITECTURE_INTEL: + arch = @symbol(intel); + break; #endif #ifdef PROCESSOR_ARCHITECTURE_AMD64 - case PROCESSOR_ARCHITECTURE_AMD64: - arch = @symbol(x64); - break; + case PROCESSOR_ARCHITECTURE_AMD64: + arch = @symbol(x64); + break; #endif #ifdef PROCESSOR_ARCHITECTURE_MIPS - case PROCESSOR_ARCHITECTURE_MIPS: - arch = @symbol(mips); - break; + case PROCESSOR_ARCHITECTURE_MIPS: + arch = @symbol(mips); + break; #endif #ifdef PROCESSOR_ARCHITECTURE_ALPHA - case PROCESSOR_ARCHITECTURE_ALPHA: - arch = @symbol(alpha); - break; + case PROCESSOR_ARCHITECTURE_ALPHA: + arch = @symbol(alpha); + break; #endif #ifdef PROCESSOR_ARCHITECTURE_ALPHA64 - case PROCESSOR_ARCHITECTURE_ALPHA64: - arch = @symbol(alpha64); - break; + case PROCESSOR_ARCHITECTURE_ALPHA64: + arch = @symbol(alpha64); + break; #endif #ifdef PROCESSOR_ARCHITECTURE_PPC - case PROCESSOR_ARCHITECTURE_PPC: - arch = @symbol(ppc); - break; + case PROCESSOR_ARCHITECTURE_PPC: + arch = @symbol(ppc); + break; #endif #ifdef PROCESSOR_ARCHITECTURE_ARM - case PROCESSOR_ARCHITECTURE_ARM: - arch = @symbol(arm); - break; + case PROCESSOR_ARCHITECTURE_ARM: + arch = @symbol(arm); + break; #endif #ifdef PROCESSOR_ARCHITECTURE_SHX - case PROCESSOR_ARCHITECTURE_SHX: - arch = @symbol(shx); - break; + case PROCESSOR_ARCHITECTURE_SHX: + arch = @symbol(shx); + break; #endif #ifdef PROCESSOR_ARCHITECTURE_IA64 - case PROCESSOR_ARCHITECTURE_IA64: - arch = @symbol(ia64); - break; + case PROCESSOR_ARCHITECTURE_IA64: + arch = @symbol(ia64); + break; #endif #ifdef PROCESSOR_ARCHITECTURE_MSIL - case PROCESSOR_ARCHITECTURE_MSIL: - arch = @symbol(msil); - break; -#endif - default: - arch = @symbol(unknown); - break; + case PROCESSOR_ARCHITECTURE_MSIL: + arch = @symbol(msil); + break; +#endif + default: + arch = @symbol(unknown); + break; } switch (sysInfo.dwProcessorType) { #ifdef PROCESSOR_INTEL_386 - case PROCESSOR_INTEL_386: - mach = @symbol(i386); - break; + case PROCESSOR_INTEL_386: + mach = @symbol(i386); + break; #endif #ifdef PROCESSOR_INTEL_486 - case PROCESSOR_INTEL_486: - mach = @symbol(i486); - break; + case PROCESSOR_INTEL_486: + mach = @symbol(i486); + break; #endif #ifdef PROCESSOR_INTEL_PENTIUM - case PROCESSOR_INTEL_PENTIUM: - mach = @symbol(i586); - break; + case PROCESSOR_INTEL_PENTIUM: + mach = @symbol(i586); + break; #endif #ifdef PROCESSOR_INTEL_860 - case PROCESSOR_INTEL_860: - mach = @symbol(i860); - break; + case PROCESSOR_INTEL_860: + mach = @symbol(i860); + break; #endif #ifdef PROCESSOR_INTEL_IA64 - case PROCESSOR_INTEL_IA64: - mach = @symbol(ia64); - break; + case PROCESSOR_INTEL_IA64: + mach = @symbol(ia64); + break; #endif #ifdef PROCESSOR_MIPS_R2000 - case PROCESSOR_MIPS_R2000: - mach = @symbol(r2000); - break; + case PROCESSOR_MIPS_R2000: + mach = @symbol(r2000); + break; #endif #ifdef PROCESSOR_MIPS_R3000 - case PROCESSOR_MIPS_R3000: - mach = @symbol(r3000); - break; + case PROCESSOR_MIPS_R3000: + mach = @symbol(r3000); + break; #endif #ifdef PROCESSOR_MIPS_R4000 - case PROCESSOR_MIPS_R4000: - mach = @symbol(r4000); - break; + case PROCESSOR_MIPS_R4000: + mach = @symbol(r4000); + break; #endif #ifdef PROCESSOR_ALPHA_21064 - case PROCESSOR_ALPHA_21064: - mach = @symbol(alpha21064); - break; + case PROCESSOR_ALPHA_21064: + mach = @symbol(alpha21064); + break; #endif #ifdef PROCESSOR_ARM720 - case PROCESSOR_ARM720: - mach = @symbol(arm720); - break; + case PROCESSOR_ARM720: + mach = @symbol(arm720); + break; #endif #ifdef PROCESSOR_ARM820 - case PROCESSOR_ARM820: - mach = @symbol(arm820); - break; + case PROCESSOR_ARM820: + mach = @symbol(arm820); + break; #endif #ifdef PROCESSOR_ARM920 - case PROCESSOR_ARM920: - mach = @symbol(arm920); - break; + case PROCESSOR_ARM920: + mach = @symbol(arm920); + break; #endif #ifdef PROCESSOR_ARM_7TDMI - case PROCESSOR_ARM_7TDMI: - mach = @symbol(arm70001); - break; + case PROCESSOR_ARM_7TDMI: + mach = @symbol(arm70001); + break; #endif #ifdef PROCESSOR_PPC_601 - case PROCESSOR_PPC_601: - mach = @symbol(ppc601); - break; + case PROCESSOR_PPC_601: + mach = @symbol(ppc601); + break; #endif #ifdef PROCESSOR_PPC_603 - case PROCESSOR_PPC_603: - mach = @symbol(ppc603); - break; + case PROCESSOR_PPC_603: + mach = @symbol(ppc603); + break; #endif #ifdef PROCESSOR_PPC_604 - case PROCESSOR_PPC_604: - mach = @symbol(ppc604); - break; + case PROCESSOR_PPC_604: + mach = @symbol(ppc604); + break; #endif #ifdef PROCESSOR_PPC_620 - case PROCESSOR_PPC_620: - mach = @symbol(ppc620); - break; -#endif - - default: - sprintf(vsnBuffer, "%d", sysInfo.dwProcessorType); - mach = __MKSTRING(vsnBuffer); - break; + case PROCESSOR_PPC_620: + mach = @symbol(ppc620); + break; +#endif + + default: + sprintf(vsnBuffer, "%d", sysInfo.dwProcessorType); + mach = __MKSTRING(vsnBuffer); + break; } numberOfCPUs = __MKUINT(sysInfo.dwNumberOfProcessors); %}. node isNil ifTrue:[ - node := self getHostName. + node := self getHostName. ]. dom isNil ifTrue:[ - dom := self getDomainName. + dom := self getDomainName. ]. info := IdentityDictionary new. @@ -8281,7 +8301,7 @@ char buffer[MAXPATHLEN]; if (GetWindowsDirectory(buffer, MAXPATHLEN)) { - RETURN (__MKSTRING(buffer)); + RETURN (__MKSTRING(buffer)); } %}. ^ nil @@ -8302,7 +8322,7 @@ char buffer[MAXPATHLEN]; if (GetSystemDirectory(buffer, MAXPATHLEN)) { - RETURN (__MKSTRING(buffer)); + RETURN (__MKSTRING(buffer)); } %}. ^ nil @@ -8340,7 +8360,7 @@ %{ /* NOCONTEXT */ if (__isWinNT) - RETURN(true); + RETURN(true); %}. ^ false. ! @@ -8363,48 +8383,48 @@ int err; if (__isExternalAddressLike(processHandleOrPid) ) { - DWORD exitCode; - - processHandle = _HANDLEVal(processHandleOrPid); - - if (processHandle == 0) { - error = @symbol(invalidParameter); - } else { - /* check if the handle still refers to a running process */ - if (GetExitCodeProcess(processHandle, &exitCode) != 0) { - if (exitCode == STILL_ACTIVE) { - RETURN(true); - } else { - RETURN(false); - } - } else { - goto checkError; - } + DWORD exitCode; + + processHandle = _HANDLEVal(processHandleOrPid); + + if (processHandle == 0) { + error = @symbol(invalidParameter); + } else { + /* check if the handle still refers to a running process */ + if (GetExitCodeProcess(processHandle, &exitCode) != 0) { + if (exitCode == STILL_ACTIVE) { + RETURN(true); + } else { + RETURN(false); + } + } else { + goto checkError; + } } } else if( __isSmallInteger(processHandleOrPid) ) { - // assume, that synchronize needs less privilege... - processHandle = OpenProcess(SYNCHRONIZE, FALSE, __smallIntegerVal(processHandleOrPid)); - if (processHandle) { - CloseHandle(processHandle); - RETURN(true); - } + // assume, that synchronize needs less privilege... + processHandle = OpenProcess(SYNCHRONIZE, FALSE, __smallIntegerVal(processHandleOrPid)); + if (processHandle) { + CloseHandle(processHandle); + RETURN(true); + } checkError: - err = GetLastError(); - // we do not have access to the process (so pid does exist ;-)) - if (err == ERROR_ACCESS_DENIED) { - RETURN(true); - } - // pid does not exist - if (err == ERROR_INVALID_PARAMETER) { - RETURN(false); - } - - // any other error - raise signal - __threadErrno = __WIN32_ERR(err); - error = __mkSmallInteger(__threadErrno); + err = GetLastError(); + // we do not have access to the process (so pid does exist ;-)) + if (err == ERROR_ACCESS_DENIED) { + RETURN(true); + } + // pid does not exist + if (err == ERROR_INVALID_PARAMETER) { + RETURN(false); + } + + // any other error - raise signal + __threadErrno = __WIN32_ERR(err); + error = __mkSmallInteger(__threadErrno); } else { - error = @symbol(invalidParameter); + error = @symbol(invalidParameter); } %}. @@ -8447,11 +8467,11 @@ maxFileNameLength "return the max number of characters in a filename. CAVEAT: - Actually, the following is somewhat wrong - some systems - support different sizes, depending on the volume. - We return a somewhat conservative number here. - Another entry, to query for volume specific max - will be added in the future." + Actually, the following is somewhat wrong - some systems + support different sizes, depending on the volume. + We return a somewhat conservative number here. + Another entry, to query for volume specific max + will be added in the future." %{ /* NOCONTEXT */ @@ -8484,12 +8504,12 @@ osVersion := OperatingSystem osVersion. ^ 'Windows ', - (#('NT' '2000' 'XP' 'VISTA' '7') - at: (#('4.1' '5.0' '5.1' '6.0' '6.1') indexOf:osVersion) - ifAbsent:osVersion). - - " - self osName + (#('NT' '2000' 'XP' 'VISTA' '7') + at: (#('4.1' '5.0' '5.1' '6.0' '6.1') indexOf:osVersion) + ifAbsent:osVersion). + + " + self osName " "Modified (comment): / 30-07-2011 / 17:00:50 / cg" @@ -8527,11 +8547,11 @@ randomBytesInto:bufferOrInteger "If bufferOrInteger is a String or a ByteArray, - fill a given buffer with random bytes from the RtlGenRandom function - and nswer the buffer. + fill a given buffer with random bytes from the RtlGenRandom function + and nswer the buffer. If bufferOrInteger is a SmallInteger, - return this many bytes (max 4) as a SmallInteger. + return this many bytes (max 4) as a SmallInteger. Return nil on error (and raise PrimitiveFailure). @@ -8549,38 +8569,38 @@ unsigned int __localBuffer = 0; if (__isSmallInteger(bufferOrInteger)) { - __useLocalBuffer = 1; - __buffer = (unsigned char *)&__localBuffer; - __bufferSize = __smallIntegerVal(bufferOrInteger); - if (__bufferSize > sizeof(INT)) - __bufferSize = sizeof(INT); + __useLocalBuffer = 1; + __buffer = (unsigned char *)&__localBuffer; + __bufferSize = __smallIntegerVal(bufferOrInteger); + if (__bufferSize > sizeof(INT)) + __bufferSize = sizeof(INT); } else if (__isString(bufferOrInteger)) { - __buffer = __stringVal(bufferOrInteger); - __bufferSize = __stringSize(bufferOrInteger); + __buffer = __stringVal(bufferOrInteger); + __bufferSize = __stringSize(bufferOrInteger); } else if (__isByteArray(bufferOrInteger)) { - __buffer = __byteArrayVal(bufferOrInteger); - __bufferSize = __byteArraySize(bufferOrInteger); + __buffer = __byteArrayVal(bufferOrInteger); + __bufferSize = __byteArraySize(bufferOrInteger); } else { - goto error; + goto error; } if (P_RtlGenRandom == 0) { - HINSTANCE hAdvapi32 = LoadLibrary("advapi32.dll"); - // console_printf("hAdvapi32: %x\n", hAdvapi32); - if (hAdvapi32) { - P_RtlGenRandom = (BOOL (__stdcall *)(PVOID , ULONG)) - GetProcAddress(hAdvapi32, "SystemFunction036"); - // console_printf("P_RtlGenRandom: %x\n", P_RtlGenRandom); - if (P_RtlGenRandom == 0) { - goto error; - } - } + HINSTANCE hAdvapi32 = LoadLibrary("advapi32.dll"); + // console_printf("hAdvapi32: %x\n", hAdvapi32); + if (hAdvapi32) { + P_RtlGenRandom = (BOOL (__stdcall *)(PVOID , ULONG)) + GetProcAddress(hAdvapi32, "SystemFunction036"); + // console_printf("P_RtlGenRandom: %x\n", P_RtlGenRandom); + if (P_RtlGenRandom == 0) { + goto error; + } + } } if ((*P_RtlGenRandom)(__buffer, __bufferSize)) { - if (__useLocalBuffer) { - RETURN(__mkSmallInteger(__localBuffer & _MAX_INT)); - } - RETURN (bufferOrInteger); + if (__useLocalBuffer) { + RETURN(__mkSmallInteger(__localBuffer & _MAX_INT)); + } + RETURN (bufferOrInteger); } error: ; %}. @@ -8602,9 +8622,9 @@ if (__isStringLike(aStringOrSymbol) && __isStringLike(newValueString) ) { - if (SetEnvironmentVariable(__stringVal(aStringOrSymbol), __stringVal(newValueString)) != 0) { - RETURN(self); - } + if (SetEnvironmentVariable(__stringVal(aStringOrSymbol), __stringVal(newValueString)) != 0) { + RETURN(self); + } } %}. self primitiveFailed @@ -8768,13 +8788,13 @@ pPath := super defaultPackagePath. pkgDirPath := self stxPackageDirPath. pkgDirPath notNil ifTrue:[ - "/ and also add the packageDirPath from the registry ... - dirs := pkgDirPath asCollectionOfSubstringsSeparatedBy:$;. - dirs do:[:aDir | - (pPath includes:aDir) ifFalse:[ - pPath add:aDir. - ] - ] + "/ and also add the packageDirPath from the registry ... + dirs := pkgDirPath asCollectionOfSubstringsSeparatedBy:$;. + dirs do:[:aDir | + (pPath includes:aDir) ifFalse:[ + pPath add:aDir. + ] + ] ] ifFalse:[ "/ #( "/ '\smalltalk' @@ -8797,10 +8817,10 @@ "/ under windows, the commandName includes the path - good. p := Smalltalk commandName. p notNil ifTrue:[ - p := p asFilename directory constructString:'packages'. - (pPath includes:p) ifFalse:[ - pPath add:p. - ] + p := p asFilename directory constructString:'packages'. + (pPath includes:p) ifFalse:[ + pPath add:p. + ] ]. pPath := pPath select:[:p | p asFilename exists]. ^ pPath @@ -8820,10 +8840,10 @@ libDirPath := self stxLibDirPath. libDirPath notNil ifTrue:[ - "/ and also add the libDirPath from the registry ... - (sysPath includes:libDirPath) ifFalse:[ - sysPath add:libDirPath - ]. + "/ and also add the libDirPath from the registry ... + (sysPath includes:libDirPath) ifFalse:[ + sysPath add:libDirPath + ]. ]. "/ #( "/ '\programs\eXept\smalltalk' @@ -8859,7 +8879,7 @@ k := RegistryEntry key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X\' , Smalltalk versionString. k notNil ifTrue:[ - p := k valueNamed:'BinDir'. + p := k valueNamed:'BinDir'. ]. ^ p @@ -8872,17 +8892,17 @@ "ask the registry for the lib directory" (Array - with:('HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X\' , Smalltalk versionString) - with:('HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X')) + with:('HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X\' , Smalltalk versionString) + with:('HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X')) do:[:eachKeyToTry | - |k p| - - k := RegistryEntry key:eachKeyToTry. - k notNil ifTrue:[ - p := k valueNamed:'LibDir'. - k closeKey. - ^ p - ]. + |k p| + + k := RegistryEntry key:eachKeyToTry. + k notNil ifTrue:[ + p := k valueNamed:'LibDir'. + k closeKey. + ^ p + ]. ]. ^ nil @@ -8898,7 +8918,7 @@ k := RegistryEntry key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X\' , Smalltalk versionString. k notNil ifTrue:[ - p := k valueNamed:'PackageDirPath'. + p := k valueNamed:'PackageDirPath'. ]. ^ p @@ -8976,22 +8996,22 @@ #define DM_OUT_DEFAULT DM_UPDATE " nBytesNeeded := self - primDocumentProperties:nil - hPrinter:hPrinter - pDeviceName: deviceName - pDevModeOutput:nil - pDevModeInput:nil - fMode:0. + primDocumentProperties:nil + hPrinter:hPrinter + pDeviceName: deviceName + pDevModeOutput:nil + pDevModeInput:nil + fMode:0. devModeOutput := DevModeStructure new:(nBytesNeeded * 2 "never trust MS !!"). rslt := self - primDocumentProperties:nil - hPrinter:hPrinter - pDeviceName: deviceName - pDevModeOutput:devModeOutput - pDevModeInput:pDevModeInputOrNil - fMode:4+2. + primDocumentProperties:nil + hPrinter:hPrinter + pDeviceName: deviceName + pDevModeOutput:devModeOutput + pDevModeInput:pDevModeInputOrNil + fMode:4+2. ^ devModeOutput @@ -9056,23 +9076,23 @@ #define DM_OUT_DEFAULT DM_UPDATE " nBytesNeeded := self - primDocumentProperties:nil - hPrinter:hPrinter - pDeviceName: deviceName - pDevModeOutput:nil - pDevModeInput:nil - fMode:0. + primDocumentProperties:nil + hPrinter:hPrinter + pDeviceName: deviceName + pDevModeOutput:nil + pDevModeInput:nil + fMode:0. nBytesNeeded < 0 ifTrue:[^nil]. devModeOutput := DevModeStructure new:(nBytesNeeded * 2 "never trust MS !!"). rslt := self - primDocumentProperties:nil - hPrinter:hPrinter - pDeviceName: deviceName - pDevModeOutput:devModeOutput - pDevModeInput:nil - fMode:2. + primDocumentProperties:nil + hPrinter:hPrinter + pDeviceName: deviceName + pDevModeOutput:devModeOutput + pDevModeInput:nil + fMode:2. ^ devModeOutput @@ -9095,19 +9115,19 @@ sizeBytesArray := ByteArray new:4. bytesNeeded := self - primGetPrinter:hPrinter - level:2 - informationBuffer: nil - bufferSize: 0 - bufferNeededSize:sizeBytesArray. + primGetPrinter:hPrinter + level:2 + informationBuffer: nil + bufferSize: 0 + bufferNeededSize:sizeBytesArray. bytesNeeded := sizeBytesArray longAt:1. informationBuffer := PrinterInfo2Structure new: bytesNeeded. rslt := self - primGetPrinter:hPrinter - level:2 - informationBuffer:informationBuffer - bufferSize: bytesNeeded - bufferNeededSize:sizeBytesArray. + primGetPrinter:hPrinter + level:2 + informationBuffer:informationBuffer + bufferSize: bytesNeeded + bufferNeededSize:sizeBytesArray. self closePrinter: printerName. ^informationBuffer @@ -9127,47 +9147,47 @@ printerNames := self getPrintersNames. collectedInfo := OrderedCollection new. printerNames do:[:eachName | - |fn vol attributes nm deviceInfo infoFields driverName| - - attributes := Dictionary new. - - fn := eachName asFilename. - vol := fn volume. - vol notEmptyOrNil ifTrue:[ - (vol startsWith:'\\') ifTrue:[ - "/ a remote printer - attributes at:#isRemotePrinter put:true. - attributes at:#remotePrinterName put:(fn baseName). - attributes at:#remotePrinterHost put:(fn directoryName copyFrom:3). - ] ifFalse:[ - "/ some other printer - ]. - ] ifFalse:[ - "/ some other printer - ]. - - deviceInfo := self getProfileString:'PrinterPorts' key:eachName default:''. - "gives us smething like 'winspool,Ne00:,15,45', - which is: driverName, deviceName, ? , ?" - - infoFields := deviceInfo asCollectionOfSubstringsSeparatedBy:$,. - driverName := infoFields at:1. - 2 to: infoFields size by:3 do:[:i | - |medium longName| - - medium := infoFields at:i. - longName := eachName ,',' , driverName , ',' , medium. - attributes at:#driverName put:driverName. - attributes at:#longName put:longName. - attributes at:#medium put:medium. - - collectedInfo add: - (AbstractOperatingSystem::PrinterInfo new - printerName:eachName - attributes:attributes; - setDocumentProperties; - yourself) - ]. + |fn vol attributes nm deviceInfo infoFields driverName| + + attributes := Dictionary new. + + fn := eachName asFilename. + vol := fn volume. + vol notEmptyOrNil ifTrue:[ + (vol startsWith:'\\') ifTrue:[ + "/ a remote printer + attributes at:#isRemotePrinter put:true. + attributes at:#remotePrinterName put:(fn baseName). + attributes at:#remotePrinterHost put:(fn directoryName copyFrom:3). + ] ifFalse:[ + "/ some other printer + ]. + ] ifFalse:[ + "/ some other printer + ]. + + deviceInfo := self getProfileString:'PrinterPorts' key:eachName default:''. + "gives us smething like 'winspool,Ne00:,15,45', + which is: driverName, deviceName, ? , ?" + + infoFields := deviceInfo asCollectionOfSubstringsSeparatedBy:$,. + driverName := infoFields at:1. + 2 to: infoFields size by:3 do:[:i | + |medium longName| + + medium := infoFields at:i. + longName := eachName ,',' , driverName , ',' , medium. + attributes at:#driverName put:driverName. + attributes at:#longName put:longName. + attributes at:#medium put:medium. + + collectedInfo add: + (AbstractOperatingSystem::PrinterInfo new + printerName:eachName + attributes:attributes; + setDocumentProperties; + yourself) + ]. ]. ^ collectedInfo @@ -9185,7 +9205,7 @@ |printerNames| printerNames := (self getProfileString:'PrinterPorts' key:nil default:'') - asCollectionOfSubstringsSeparatedBy:(Character value:0). + asCollectionOfSubstringsSeparatedBy:(Character value:0). printerNames := printerNames reject:[:nm | nm isEmpty]. ^printerNames @@ -9274,12 +9294,12 @@ hPrinter := self openPrinter:'\\http://exept.exept.de:631\lj4' . rslt := self - primDocumentProperties:nil - hPrinter:hPrinter - pDeviceName: '\\http://exept.exept.de:631\lj4' - pDevModeOutput:nil - pDevModeInput:nil - fMode:0. + primDocumentProperties:nil + hPrinter:hPrinter + pDeviceName: '\\http://exept.exept.de:631\lj4' + pDevModeOutput:nil + pDevModeInput:nil + fMode:0. self halt. " @@ -9296,12 +9316,12 @@ hPrinter := self openPrinter:'\\http://exept.exept.de:631\lj4' . rslt := self - primDocumentProperties:nil - hPrinter:hPrinter - pDeviceName: '\\http://exept.exept.de:631\lj4' - pDevModeOutput:nil - pDevModeInput:nil - fMode:0. + primDocumentProperties:nil + hPrinter:hPrinter + pDeviceName: '\\http://exept.exept.de:631\lj4' + pDevModeOutput:nil + pDevModeInput:nil + fMode:0. self halt. " @@ -9318,12 +9338,12 @@ hPrinter := self openPrinter:'\\http://exept.exept.de:631\lj4' . rslt := self - primDocumentProperties:nil - hPrinter:hPrinter - pDeviceName: '\\http://exept.exept.de:631\lj4' - pDevModeOutput:nil - pDevModeInput:nil - fMode:0. + primDocumentProperties:nil + hPrinter:hPrinter + pDeviceName: '\\http://exept.exept.de:631\lj4' + pDevModeOutput:nil + pDevModeInput:nil + fMode:0. self halt. " @@ -9352,20 +9372,20 @@ sizeBytesArray := ByteArray new:4. ok := self - primGetPrinter:hPrinter - level:2 - informationBuffer: nil - bufferSize: 0 - bufferNeededSize:sizeBytesArray. + primGetPrinter:hPrinter + level:2 + informationBuffer: nil + bufferSize: 0 + bufferNeededSize:sizeBytesArray. bytesNeeded := sizeBytesArray longAt:1. informationBuffer := PrinterInfo2Structure new: bytesNeeded. rslt := self - primGetPrinter:hPrinter - level:2 - informationBuffer:informationBuffer - bufferSize: bytesNeeded - bufferNeededSize:sizeBytesArray. + primGetPrinter:hPrinter + level:2 + informationBuffer:informationBuffer + bufferSize: bytesNeeded + bufferNeededSize:sizeBytesArray. self assert: rslt. informationBuffer inspect. self closePrinter: printerName. @@ -9495,9 +9515,9 @@ 'NON' 'no_NO' 'NOR' 'no_NO' ) pairWiseDo:[:key :mappedValue| - key = windowsLanguageString ifTrue:[ - ^ mappedValue - ] + key = windowsLanguageString ifTrue:[ + ^ mappedValue + ] ]. "no mapping" @@ -9517,24 +9537,24 @@ !Win32OperatingSystem class methodsFor:'regional settings'! country - "Answer the current system value for country." + "Answer the current system value for country." ^self queryNationalProfileString: 'iCountry' default: 0 " - self country + self country " "Modified: / 22-12-2006 / 16:45:32 / User" ! countryName - "Answer the current system value for country name." + "Answer the current system value for country name." ^self queryNationalProfileString: 'sCountry' default: 'Deutschland' " - self countryName + self countryName " "Modified: / 22-12-2006 / 16:45:32 / User" @@ -9543,8 +9563,8 @@ dateFormat "Answer the current system value for date format. Answer DfMDY = Month-Day-Year - DfDMY = Day-Month-Year - DfYMD = Year-Month-Day." + DfDMY = Day-Month-Year + DfYMD = Year-Month-Day." |separatorString code| @@ -9566,49 +9586,49 @@ ! dateFormatCode - "Answer the current system value for date format. - Answer DfMDY = Month-Day-Year = 0 - DfDMY = Day-Month-Year = 1 - DfYMD = Year-Month-Day = 2" + "Answer the current system value for date format. + Answer DfMDY = Month-Day-Year = 0 + DfDMY = Day-Month-Year = 1 + DfYMD = Year-Month-Day = 2" ^self queryNationalProfileInt: 'iDate' default: 0 " - self dateFormatCode + self dateFormatCode " "Modified: / 22-12-2006 / 16:45:53 / User" ! dateSeparator - "Answer the current system value for date separator." + "Answer the current system value for date separator." ^self queryNationalProfileString: 'sDate' default: '/' " - self dateSeparator + self dateSeparator " "Modified: / 22-12-2006 / 16:45:32 / User" ! decimalSeparator - "Answer the current system value for decimal separator." + "Answer the current system value for decimal separator." ^self queryNationalProfileString: 'sDecimal' default: '.' " - self decimalSeparator + self decimalSeparator " "Created: / 22-12-2006 / 16:45:11 / User" ! isDateFormatDMY - "Answer the current system value for date format. - Answer DfMDY = Month-Day-Year - DfDMY = Day-Month-Year - DfYMD = Year-Month-Day." + "Answer the current system value for date format. + Answer DfMDY = Month-Day-Year + DfDMY = Day-Month-Year + DfYMD = Year-Month-Day." ^self dateFormatCode = 1 @@ -9616,10 +9636,10 @@ ! isDateFormatMDY - "Answer the current system value for date format. - Answer DfMDY = Month-Day-Year - DfDMY = Day-Month-Year - DfYMD = Year-Month-Day." + "Answer the current system value for date format. + Answer DfMDY = Month-Day-Year + DfDMY = Day-Month-Year + DfYMD = Year-Month-Day." ^self dateFormatCode = 0 @@ -9627,10 +9647,10 @@ ! isDateFormatYMD - "Answer the current system value for date format. - Answer DfMDY = Month-Day-Year - DfDMY = Day-Month-Year - DfYMD = Year-Month-Day." + "Answer the current system value for date format. + Answer DfMDY = Month-Day-Year + DfDMY = Day-Month-Year + DfYMD = Year-Month-Day." ^self dateFormatCode = 2 @@ -9638,7 +9658,7 @@ ! isTimeFormat12Hour - "Answer whether the current system time format is 12-hour." + "Answer whether the current system time format is 12-hour." ^self timeFormat = 0 @@ -9665,11 +9685,11 @@ | answer | answer := self primGetProfileInt: 'Intl' - keyName: aKeyName - default: -1 asUnsigned32. + keyName: aKeyName + default: -1 asUnsigned32. ^answer = -1 asUnsigned32 - ifTrue: [ defaultValue ] - ifFalse: [ answer ] + ifTrue: [ defaultValue ] + ifFalse: [ answer ] " self queryNationalProfileInt: 'iDate' default: 0 @@ -9679,43 +9699,43 @@ ! queryNationalProfileString: aKeyName default: defaultValue - "Answer the string value of key aKeyName in - the [Intl] application section of the WIN.INI profile file. - Answer defaultValue if aKeyName cannot be found." + "Answer the string value of key aKeyName in + the [Intl] application section of the WIN.INI profile file. + Answer defaultValue if aKeyName cannot be found." | extString result | extString := String new: 80. result := self primGetProfileString: 'Intl' - keyName: aKeyName - default: '' - returnedString: extString - size: extString size. + keyName: aKeyName + default: '' + returnedString: extString + size: extString size. ^result > 0 - ifTrue: [extString copyFrom: 1 to: result] - ifFalse: [ defaultValue ] + ifTrue: [extString copyFrom: 1 to: result] + ifFalse: [ defaultValue ] "Created: / 22-12-2006 / 16:13:01 / User" ! thousandsSeparator - "Answer the current system value - for the thousands separator." + "Answer the current system value + for the thousands separator." ^self queryNationalProfileString: 'sThousand' default: ',' " - self thousandsSeparator + self thousandsSeparator " "Created: / 22-12-2006 / 16:46:50 / User" ! timeFormat - "Answer the current system value for time format." + "Answer the current system value for time format." ^self queryNationalProfileInt: 'iTime' default: 0 " - self timeFormat + self timeFormat " "Created: / 22-12-2006 / 16:48:27 / User" @@ -9744,22 +9764,22 @@ This looks for the files extension, and is typically used to present help-files, html documents, pdf documents etc. operationSymbol is one of: - open - edit - explore - print + open + edit + explore + print " |result filename| filename := aFilenameOrString asFilename. result := self - shellExecute:nil - lpOperation:operationSymbol - lpFile:filename pathName - lpParameters:nil - lpDirectory:filename directory pathName - nShowCmd:#SW_SHOWNORMAL. + shellExecute:nil + lpOperation:operationSymbol + lpFile:filename pathName + lpParameters:nil + lpDirectory:filename directory pathName + nShowCmd:#SW_SHOWNORMAL. ^ self. " @@ -9796,27 +9816,27 @@ I added this in order to be able to shutdown w95 cleanly" confirmationMessageOrNil notNil ifTrue:[ - (Dialog confirm:confirmationMessageOrNil) ifFalse:[ - ^ false - ]. + (Dialog confirm:confirmationMessageOrNil) ifFalse:[ + ^ false + ]. ]. %{ int flag; if (how == @symbol(shutdown)) { - flag = EWX_SHUTDOWN; + flag = EWX_SHUTDOWN; } else if (how == @symbol(reboot)) { - flag = EWX_REBOOT; + flag = EWX_REBOOT; } else if (how == @symbol(logoff)) { - flag = EWX_LOGOFF; + flag = EWX_LOGOFF; } else if (how == @symbol(forceShutdown)) { - flag = EWX_SHUTDOWN | EWX_FORCE; + flag = EWX_SHUTDOWN | EWX_FORCE; } else if (how == @symbol(forceReboot)) { - flag = EWX_REBOOT | EWX_FORCE; + flag = EWX_REBOOT | EWX_FORCE; } else if (how == @symbol(forceLogoff)) { - flag = EWX_LOGOFF | EWX_FORCE; + flag = EWX_LOGOFF | EWX_FORCE; } else { - RETURN (false); + RETURN (false); } RETURN ((ExitWindowsEx(flag, 0) == TRUE) ? true : false); %} @@ -9833,22 +9853,22 @@ && __bothSmallInteger(d, h) && __bothSmallInteger(min, s) && __isSmallInteger(millis)) { - SYSTEMTIME sysTime; - FILETIME fileTime; - - sysTime.wHour = __intVal(h); - sysTime.wMinute = __intVal(min); - sysTime.wSecond = __intVal(s); - sysTime.wMilliseconds = __intVal(millis); - - sysTime.wYear = __intVal(y); - sysTime.wMonth = __intVal(m); - sysTime.wDay = __intVal(d); - - if (SystemTimeToFileTime(&sysTime, &fileTime) == 0) - goto error; - - RETURN(FileTimeToOsTime(&fileTime)); + SYSTEMTIME sysTime; + FILETIME fileTime; + + sysTime.wHour = __intVal(h); + sysTime.wMinute = __intVal(min); + sysTime.wSecond = __intVal(s); + sysTime.wMilliseconds = __intVal(millis); + + sysTime.wYear = __intVal(y); + sysTime.wMonth = __intVal(m); + sysTime.wDay = __intVal(d); + + if (SystemTimeToFileTime(&sysTime, &fileTime) == 0) + goto error; + + RETURN(FileTimeToOsTime(&fileTime)); } error:; %}. @@ -9874,30 +9894,30 @@ && __bothSmallInteger(d, h) && __bothSmallInteger(min, s) && __isSmallInteger(millis)) { - SYSTEMTIME sysTime; - FILETIME fileTime; - - sysTime.wHour = __intVal(h); - sysTime.wMinute = __intVal(min); - sysTime.wSecond = __intVal(s); - sysTime.wMilliseconds = __intVal(millis); - - sysTime.wYear = __intVal(y); - sysTime.wMonth = __intVal(m); - sysTime.wDay = __intVal(d); + SYSTEMTIME sysTime; + FILETIME fileTime; + + sysTime.wHour = __intVal(h); + sysTime.wMinute = __intVal(min); + sysTime.wSecond = __intVal(s); + sysTime.wMilliseconds = __intVal(millis); + + sysTime.wYear = __intVal(y); + sysTime.wMonth = __intVal(m); + sysTime.wDay = __intVal(d); #if 0 - /* Sorry, but this function is not supported in Win2000 - - we use LocalFileTimeToFileTime */ - if (TzSpecificLocalTimeToSystemTime(0, &sysTime, &sysTime) == 0) - goto error; -#endif - if (SystemTimeToFileTime(&sysTime, &fileTime) == 0) - goto error; - if (LocalFileTimeToFileTime(&fileTime, &fileTime) == 0) - goto error; - - RETURN(FileTimeToOsTime(&fileTime)); + /* Sorry, but this function is not supported in Win2000 + - we use LocalFileTimeToFileTime */ + if (TzSpecificLocalTimeToSystemTime(0, &sysTime, &sysTime) == 0) + goto error; +#endif + if (SystemTimeToFileTime(&sysTime, &fileTime) == 0) + goto error; + if (LocalFileTimeToFileTime(&fileTime, &fileTime) == 0) + goto error; + + RETURN(FileTimeToOsTime(&fileTime)); } error:; %}. @@ -9927,10 +9947,10 @@ LONGLONG micros; if (! frequencyKnown) { - // get the high resolution counter's accuracy - QueryPerformanceFrequency(&ticksPerSecond); - frequencyKnown = 1; - divisor = ticksPerSecond / (LONGLONG)1000000; + // get the high resolution counter's accuracy + QueryPerformanceFrequency(&ticksPerSecond); + frequencyKnown = 1; + divisor = ticksPerSecond / (LONGLONG)1000000; } // what time is it? @@ -9966,8 +9986,8 @@ Use the millisecondTimeXXX:-methods to compare and add time deltas - these know about the wrap. BAD DESIGN: - This should be changed to return some instance of RelativeTime, - and these computations moved there. + This should be changed to return some instance of RelativeTime, + and these computations moved there. Don't use this method in application code since it is an internal (private) interface. For compatibility with ST-80, use Time millisecondClockValue. @@ -10025,57 +10045,57 @@ retVal = GetTimeZoneInformation(&tzInfo); switch (retVal) { - case TIME_ZONE_ID_INVALID: - error = __mkSmallInteger(__WIN32_ERR(GetLastError())); - break; - - case TIME_ZONE_ID_UNKNOWN: - case TIME_ZONE_ID_STANDARD: - case TIME_ZONE_ID_DAYLIGHT: - default: - bias = __mkSmallInteger(tzInfo.Bias); - memmove(nm, tzInfo.StandardName, 32*sizeof(WCHAR)); - nm[32] = 0; - standardName = __MKU16STRING(nm); - standardDate_y = __mkSmallInteger(tzInfo.StandardDate.wYear); - standardDate_m = __mkSmallInteger(tzInfo.StandardDate.wMonth); - standardDate_d = __mkSmallInteger(tzInfo.StandardDate.wDay); - standardDate_wd = __mkSmallInteger(tzInfo.StandardDate.wDayOfWeek); - standardDate_h = __mkSmallInteger(tzInfo.StandardDate.wHour); - standardDate_min = __mkSmallInteger(tzInfo.StandardDate.wMinute); - standardDate_s = __mkSmallInteger(tzInfo.StandardDate.wSecond); - standardBias = __mkSmallInteger(tzInfo.StandardBias); - memmove(nm, tzInfo.DaylightName, 32*sizeof(WCHAR)); - nm[32] = 0; - daylightName = __MKU16STRING(nm); - daylightDate_y = __mkSmallInteger(tzInfo.DaylightDate.wYear); - daylightDate_m = __mkSmallInteger(tzInfo.DaylightDate.wMonth); - daylightDate_d = __mkSmallInteger(tzInfo.DaylightDate.wDay); - daylightDate_wd = __mkSmallInteger(tzInfo.DaylightDate.wDayOfWeek); - daylightDate_h = __mkSmallInteger(tzInfo.DaylightDate.wHour); - daylightDate_min = __mkSmallInteger(tzInfo.DaylightDate.wMinute); - daylightDate_s = __mkSmallInteger(tzInfo.DaylightDate.wSecond); - daylightBias = __mkSmallInteger(tzInfo.DaylightBias); - break; + case TIME_ZONE_ID_INVALID: + error = __mkSmallInteger(__WIN32_ERR(GetLastError())); + break; + + case TIME_ZONE_ID_UNKNOWN: + case TIME_ZONE_ID_STANDARD: + case TIME_ZONE_ID_DAYLIGHT: + default: + bias = __mkSmallInteger(tzInfo.Bias); + memmove(nm, tzInfo.StandardName, 32*sizeof(WCHAR)); + nm[32] = 0; + standardName = __MKU16STRING(nm); + standardDate_y = __mkSmallInteger(tzInfo.StandardDate.wYear); + standardDate_m = __mkSmallInteger(tzInfo.StandardDate.wMonth); + standardDate_d = __mkSmallInteger(tzInfo.StandardDate.wDay); + standardDate_wd = __mkSmallInteger(tzInfo.StandardDate.wDayOfWeek); + standardDate_h = __mkSmallInteger(tzInfo.StandardDate.wHour); + standardDate_min = __mkSmallInteger(tzInfo.StandardDate.wMinute); + standardDate_s = __mkSmallInteger(tzInfo.StandardDate.wSecond); + standardBias = __mkSmallInteger(tzInfo.StandardBias); + memmove(nm, tzInfo.DaylightName, 32*sizeof(WCHAR)); + nm[32] = 0; + daylightName = __MKU16STRING(nm); + daylightDate_y = __mkSmallInteger(tzInfo.DaylightDate.wYear); + daylightDate_m = __mkSmallInteger(tzInfo.DaylightDate.wMonth); + daylightDate_d = __mkSmallInteger(tzInfo.DaylightDate.wDay); + daylightDate_wd = __mkSmallInteger(tzInfo.DaylightDate.wDayOfWeek); + daylightDate_h = __mkSmallInteger(tzInfo.DaylightDate.wHour); + daylightDate_min = __mkSmallInteger(tzInfo.DaylightDate.wMinute); + daylightDate_s = __mkSmallInteger(tzInfo.DaylightDate.wSecond); + daylightBias = __mkSmallInteger(tzInfo.DaylightBias); + break; } %}. error notNil ifTrue:[ - self primitiveFailed. + self primitiveFailed. ]. info := AbstractOperatingSystem::TimeZoneInfo new. info - bias:bias - name:standardName standardBias:standardBias - daylightName:daylightName daylightBias:daylightBias. + bias:bias + name:standardName standardBias:standardBias + daylightName:daylightName daylightBias:daylightBias. standardDate_m ~~ 0 ifTrue:[ - info standardYear:standardDate_y standardMonth:standardDate_m standardDay:standardDate_d - standardWeekDay:standardDate_wd standardHour:standardDate_h standardMinute:standardDate_min. + info standardYear:standardDate_y standardMonth:standardDate_m standardDay:standardDate_d + standardWeekDay:standardDate_wd standardHour:standardDate_h standardMinute:standardDate_min. ]. daylightDate_m ~~ 0 ifTrue:[ - info daylightYear:daylightDate_y daylightMonth:daylightDate_m daylightDay:daylightDate_d - daylightWeekDay:daylightDate_wd daylightHour:daylightDate_h daylightMinute:daylightDate_min. + info daylightYear:daylightDate_y daylightMonth:daylightDate_m daylightDay:daylightDate_d + daylightWeekDay:daylightDate_wd daylightHour:daylightDate_h daylightMinute:daylightDate_min. ]. ^ info @@ -10099,8 +10119,8 @@ %{ /* NOCONTEXT */ if (__isSmallInteger(numberOfSeconds)) { - sleep(__intVal(numberOfSeconds)); - RETURN ( self ); + sleep(__intVal(numberOfSeconds)); + RETURN ( self ); } %}. " @@ -10130,43 +10150,43 @@ /* try cache */ { - OBJ lastSeconds, lastTimeInfo; - - lastSeconds = @global(LastTimeInfoSeconds); - if (lastSeconds - && (__longIntVal(lastSeconds) == t) - && (@global(LastTimeInfoMilliseconds) == osMilliseconds) - && (@global(LastTimeInfoIsLocal) == isLocalTime) - ) { - lastTimeInfo = @global(LastTimeInfo); - if (lastTimeInfo != nil) { - RETURN (lastTimeInfo); - } - } + OBJ lastSeconds, lastTimeInfo; + + lastSeconds = @global(LastTimeInfoSeconds); + if (lastSeconds + && (__longIntVal(lastSeconds) == t) + && (@global(LastTimeInfoMilliseconds) == osMilliseconds) + && (@global(LastTimeInfoIsLocal) == isLocalTime) + ) { + lastTimeInfo = @global(LastTimeInfo); + if (lastTimeInfo != nil) { + RETURN (lastTimeInfo); + } + } } TimetToFileTime((time_t)t, &fileTime); if (isLocalTime == true) { - TIME_ZONE_INFORMATION tzInfo; - int tzState; - LONGLONG longTime; - - FileTimeToLocalFileTime(&fileTime, &localFileTime); - FileTimeToSystemTime(&localFileTime, &sysTime); - - longTime = ((LONGLONG)fileTime.dwHighDateTime << 32) + fileTime.dwLowDateTime; - longTime -= ((LONGLONG)localFileTime.dwHighDateTime << 32) + localFileTime.dwLowDateTime; - utcOffset = __mkSmallInteger((INT)(longTime / 10000000)); - - if ((tzState = GetTimeZoneInformation(&tzInfo)) < 0) { - reason = @symbol(getTimeZoneFailed); - goto error; - } - dstOffset = __mkSmallInteger((tzInfo.Bias + tzInfo.DaylightBias) * 60); + TIME_ZONE_INFORMATION tzInfo; + int tzState; + LONGLONG longTime; + + FileTimeToLocalFileTime(&fileTime, &localFileTime); + FileTimeToSystemTime(&localFileTime, &sysTime); + + longTime = ((LONGLONG)fileTime.dwHighDateTime << 32) + fileTime.dwLowDateTime; + longTime -= ((LONGLONG)localFileTime.dwHighDateTime << 32) + localFileTime.dwLowDateTime; + utcOffset = __mkSmallInteger((INT)(longTime / 10000000)); + + if ((tzState = GetTimeZoneInformation(&tzInfo)) < 0) { + reason = @symbol(getTimeZoneFailed); + goto error; + } + dstOffset = __mkSmallInteger((tzInfo.Bias + tzInfo.DaylightBias) * 60); } else { - FileTimeToSystemTime(&fileTime, &sysTime); - utcOffset = __mkSmallInteger(0); + FileTimeToSystemTime(&fileTime, &sysTime); + utcOffset = __mkSmallInteger(0); } hours = __mkSmallInteger(sysTime.wHour); @@ -10181,22 +10201,22 @@ error:; %}. year isNil ifTrue:[ - ^ self primitiveFailed + ^ self primitiveFailed ]. info := self timeInfoClass new. info - year:year - month:month - day:day - hours:hours - minutes:minutes - seconds:seconds - milliseconds:osMilliseconds - utcOffset:utcOffset - dst:(utcOffset = dstOffset) - dayInYear:yDay - dayInWeek:weekDay. + year:year + month:month + day:day + hours:hours + minutes:minutes + seconds:seconds + milliseconds:osMilliseconds + utcOffset:utcOffset + dst:(utcOffset = dstOffset) + dayInYear:yDay + dayInWeek:weekDay. LastTimeInfo := info. LastTimeInfoSeconds := osSeconds. @@ -10248,13 +10268,13 @@ appDataDirFromEnv := self getEnvironment:'APPDATA'. appDataDirFromEnv notNil ifTrue:[ - ^ appDataDirFromEnv , '\' , appName + ^ appDataDirFromEnv , '\' , appName ]. appDataDirFromRegistry := - (self registryEntry key:'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders') - valueNamed:'AppData'. + (self registryEntry key:'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders') + valueNamed:'AppData'. appDataDirFromRegistry notNil ifTrue:[ - ^ appDataDirFromRegistry , '\' , appName + ^ appDataDirFromRegistry , '\' , appName ]. ^ super getApplicationDataDirectoryFor:appName @@ -10273,15 +10293,15 @@ |dir path| path := (self registryEntry - key:'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders') - valueNamed:'Desktop'. + key:'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders') + valueNamed:'Desktop'. path isNil ifTrue:[ - "Fallback" - dir := self getHomeDirectory. - dir isNil ifTrue:[ ^ nil ]. - - path := dir , '\Desktop'. + "Fallback" + dir := self getHomeDirectory. + dir isNil ifTrue:[ ^ nil ]. + + path := dir , '\Desktop'. ]. (self isValidPath:path) ifFalse:[ ^ nil ]. @@ -10302,11 +10322,11 @@ |dir| dir := (self registryEntry - key:'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders') - valueNamed:'Personal'. + key:'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders') + valueNamed:'Personal'. dir isNil ifTrue:[ - dir := self getHomeDirectory. + dir := self getHomeDirectory. ]. ^ dir. @@ -10355,11 +10375,11 @@ info := self userInfoOf:userID. (info notNil and:[info includesKey:#gecos]) ifTrue:[ - gecos := info at:#gecos. - (gecos includes:$,) ifTrue:[ - ^ gecos copyTo:(gecos indexOf:$,) - 1 - ]. - ^ gecos + gecos := info at:#gecos. + (gecos includes:$,) ifTrue:[ + ^ gecos copyTo:(gecos indexOf:$,) - 1 + ]. + ^ gecos ]. ^ self getUserNameFromID:userID @@ -10407,7 +10427,7 @@ dir := self getEnvironment:'USERPROFILE'. dir isNil ifTrue:[ - dir := '.'. + dir := '.'. ]. ^ dir. @@ -10432,33 +10452,33 @@ char *name = (char *)0; if (firstCall) { - DWORD nameSize = sizeof(cachedName); - - if (GetUserName(cachedName, &nameSize) == TRUE) { - name = cachedName; - firstCall = 0; - } + DWORD nameSize = sizeof(cachedName); + + if (GetUserName(cachedName, &nameSize) == TRUE) { + name = cachedName; + firstCall = 0; + } } else { - name = cachedName; + name = cachedName; } /* * try a few common environment variables ... */ if (! name || (name[0] == 0) ) { - name = getenv("LOGIN"); - if (! name || (name[0] == 0) ) { - name = getenv("LOGNAME"); - if (! name || (name[0] == 0) ) { - name = getenv("USER"); - } - } + name = getenv("LOGIN"); + if (! name || (name[0] == 0) ) { + name = getenv("LOGNAME"); + if (! name || (name[0] == 0) ) { + name = getenv("USER"); + } + } } /* * nope - I really font know who you are. */ if (! name || (name[0] == 0) ) { - name = "you"; + name = "you"; } RETURN ( __MKSTRING(name) ); @@ -10487,7 +10507,7 @@ This is the login name, not the fullName." aNumber == self getUserID ifTrue:[ - ^ self getLoginName + ^ self getLoginName ]. ^ '? (' , aNumber printString , ')' @@ -10512,19 +10532,19 @@ info := IdentityDictionary new. name isNil ifTrue:[ - aNameOrID == self getUserID ifTrue:[ - name := self getLoginName - ]. + aNameOrID == self getUserID ifTrue:[ + name := self getLoginName + ]. ]. name notNil ifTrue:[ - info at:#name put:name. + info at:#name put:name. ] ifFalse:[ - info at:#name put:'unknown' + info at:#name put:'unknown' ]. dir isNil ifTrue:[ - aNameOrID == self getUserID ifTrue:[ - dir := self getHomeDirectory - ] + aNameOrID == self getUserID ifTrue:[ + dir := self getHomeDirectory + ] ]. dir notNil ifTrue:[info at:#dir put:dir]. "/ uid notNil ifTrue:[info at:#uid put:uid]. @@ -10565,79 +10585,79 @@ DWORD endStatus; if (__isExternalAddressLike(pidToWait) ) { - HANDLE __pidToWait = _HANDLEVal(pidToWait); - int t; + HANDLE __pidToWait = _HANDLEVal(pidToWait); + int t; #ifdef PROCESSDEBUG_CHILDPROCESSWAIT - console_printf("childProcessWait %x b %d\n",__pidToWait,blocking==true); -#endif - t = (blocking==true) ? INFINITE : 0; + console_printf("childProcessWait %x b %d\n",__pidToWait,blocking==true); +#endif + t = (blocking==true) ? INFINITE : 0; #ifdef DO_WRAP_CALLS - if (t == 0) { - /* no need for WRAP-call; does not block */ - endStatus = WaitForSingleObject(__pidToWait, t); - if (endStatus < 0) { - __threadErrno = __WIN32_ERR(GetLastError()); - } - } else { - do { - __threadErrno = 0; - endStatus = STX_API_CALL2( "WaitForSingleObject", WaitForSingleObject, __pidToWait, t); - } while ((endStatus < 0) && (__threadErrno == EINTR)); - } -#else - endStatus = WaitForSingleObject(__pidToWait, t); - if (endStatus < 0) { - __threadErrno = __WIN32_ERR(GetLastError()); - } -#endif - if ( endStatus == WAIT_TIMEOUT ) { - if (blocking==true) - status = @symbol(timeout); - else { - status = @symbol(continue); + if (t == 0) { + /* no need for WRAP-call; does not block */ + endStatus = WaitForSingleObject(__pidToWait, t); + if (endStatus < 0) { + __threadErrno = __WIN32_ERR(GetLastError()); + } + } else { + do { + __threadErrno = 0; + endStatus = STX_API_CALL2( "WaitForSingleObject", WaitForSingleObject, __pidToWait, t); + } while ((endStatus < 0) && (__threadErrno == EINTR)); + } +#else + endStatus = WaitForSingleObject(__pidToWait, t); + if (endStatus < 0) { + __threadErrno = __WIN32_ERR(GetLastError()); + } +#endif + if ( endStatus == WAIT_TIMEOUT ) { + if (blocking==true) + status = @symbol(timeout); + else { + status = @symbol(continue); #ifdef PROCESSDEBUG_CHILDPROCESSWAIT - console_printf("ret nil\n"); -#endif - RETURN(nil); - } - } else { - status = @symbol(exit); + console_printf("ret nil\n"); +#endif + RETURN(nil); + } + } else { + status = @symbol(exit); #ifdef PROCESSDEBUG_CHILDPROCESSWAIT - console_printf("exit\n"); -#endif - if (endStatus == WAIT_OBJECT_0) { - DWORD exitCode; - - if (GetExitCodeProcess(__pidToWait, &exitCode)) { + console_printf("exit\n"); +#endif + if (endStatus == WAIT_OBJECT_0) { + DWORD exitCode; + + if (GetExitCodeProcess(__pidToWait, &exitCode)) { #ifdef PROCESSDEBUG_CHILDPROCESSWAIT - console_printf("exitCode: %d\n", exitCode); -#endif - if (exitCode == STILL_ACTIVE) { - RETURN(nil); - } + console_printf("exitCode: %d\n", exitCode); +#endif + if (exitCode == STILL_ACTIVE) { + RETURN(nil); + } #ifdef PROCESSDEBUG_CHILDPROCESSWAIT - console_printf("exit %d\n", exitCode); -#endif - code = __mkSmallInteger(exitCode); - } else { + console_printf("exit %d\n", exitCode); +#endif + code = __mkSmallInteger(exitCode); + } else { #ifdef PROCESSDEBUG_CHILDPROCESSWAIT - console_printf("GetExitCodeProcess failed\n"); -#endif - code = __mkSmallInteger(GetLastError()); - } - } else { - code = __mkSmallInteger(-1); - } - } - core = false; - pid = pidToWait; + console_printf("GetExitCodeProcess failed\n"); +#endif + code = __mkSmallInteger(GetLastError()); + } + } else { + code = __mkSmallInteger(-1); + } + } + core = false; + pid = pidToWait; } %}. (status isNil or:[pid isNil]) ifTrue:[ - ^ self primitiveFailed + ^ self primitiveFailed ]. "/ Transcript show:'pid: '; show:pid; show:' status: '; show:status; @@ -10683,92 +10703,92 @@ int exceptCount; if (__isNonNilObject(readFdArray)) { - if (! __isArrayLike(readFdArray)) goto fail; - readCount = __arraySize(readFdArray); + if (! __isArrayLike(readFdArray)) goto fail; + readCount = __arraySize(readFdArray); } else { - readCount = 0; + readCount = 0; } if (__isNonNilObject(writeFdArray)) { - if (! __isArrayLike(writeFdArray)) goto fail; - writeCount = __arraySize(writeFdArray); + if (! __isArrayLike(writeFdArray)) goto fail; + writeCount = __arraySize(writeFdArray); } else { - writeCount = 0; + writeCount = 0; } if (__isNonNilObject(exceptFdArray)) { - if (! __isArrayLike(exceptFdArray)) goto fail; - exceptCount = __arraySize(exceptFdArray); + if (! __isArrayLike(exceptFdArray)) goto fail; + exceptCount = __arraySize(exceptFdArray); } else { - exceptCount = 0; + exceptCount = 0; } for (i = 0; (i < readCount) && (numHandles < MAXHANDLE);i++) { - fd = __ArrayInstPtr(readFdArray)->a_element[i]; - - if (fd != nil) { - if (__isExternalAddressLike(fd)) { - hArray [numHandles] = _HANDLEVal(fd); - retArray[numHandles] = i; - ++numHandles; - } else { - int canRead = _canReadWithoutBlocking (__intVal(fd) ); - - if (canRead > 0 ) { - RETURN (fd); - } else { - if (canRead < 0 ) { - @global(LastErrorNumber) = __mkSmallInteger(EBADF); - RETURN ( @symbol(error) ); - } - } - } - } + fd = __ArrayInstPtr(readFdArray)->a_element[i]; + + if (fd != nil) { + if (__isExternalAddressLike(fd)) { + hArray [numHandles] = _HANDLEVal(fd); + retArray[numHandles] = i; + ++numHandles; + } else { + int canRead = _canReadWithoutBlocking (__intVal(fd) ); + + if (canRead > 0 ) { + RETURN (fd); + } else { + if (canRead < 0 ) { + @global(LastErrorNumber) = __mkSmallInteger(EBADF); + RETURN ( @symbol(error) ); + } + } + } + } } for (i = 0; (i < writeCount) && (numHandles < MAXHANDLE);i++) { - fd = __ArrayInstPtr(writeFdArray)->a_element[i]; - - if (fd != nil) { - if (__isExternalAddressLike(fd)) { - hArray [numHandles] = _HANDLEVal(fd); - retArray[numHandles] = i + 10000; - ++numHandles; - } else { - int canWrite = _canWriteWithoutBlocking (__intVal(fd) ); - - if (canWrite > 0 ) { - RETURN (fd); - } else { - if (canWrite < 0 ) { - @global(LastErrorNumber) = __mkSmallInteger(EBADF); - RETURN ( @symbol(error) ); - } - } - } - } + fd = __ArrayInstPtr(writeFdArray)->a_element[i]; + + if (fd != nil) { + if (__isExternalAddressLike(fd)) { + hArray [numHandles] = _HANDLEVal(fd); + retArray[numHandles] = i + 10000; + ++numHandles; + } else { + int canWrite = _canWriteWithoutBlocking (__intVal(fd) ); + + if (canWrite > 0 ) { + RETURN (fd); + } else { + if (canWrite < 0 ) { + @global(LastErrorNumber) = __mkSmallInteger(EBADF); + RETURN ( @symbol(error) ); + } + } + } + } } for (i = 0; (i < exceptCount) && (numHandles < MAXHANDLE);i++) { - fd = __ArrayInstPtr(exceptFdArray)->a_element[i]; - - if (fd != nil) { - if (__isExternalAddressLike(fd)) { - hArray [numHandles] = _HANDLEVal(fd); - retArray[numHandles] = i + 20000; - ++numHandles; - } - } + fd = __ArrayInstPtr(exceptFdArray)->a_element[i]; + + if (fd != nil) { + if (__isExternalAddressLike(fd)) { + hArray [numHandles] = _HANDLEVal(fd); + retArray[numHandles] = i + 20000; + ++numHandles; + } + } } if (__isSmallInteger(millis)) { - t = __intVal(millis); - - if (t <= 0 && numHandles == 0) { - RETURN (nil); - } + t = __intVal(millis); + + if (t <= 0 && numHandles == 0) { + RETURN (nil); + } } else { - t = INFINITE; + t = INFINITE; } #ifdef SELECT3DEBUGWIN32 @@ -10778,112 +10798,112 @@ res = __vmWait (numHandles, hArray, MAXHANDLE, t); if (numHandles) { - if (res == WAIT_FAILED) { + if (res == WAIT_FAILED) { #ifdef SELECT2DEBUGWIN32 - console_printf("- error %d; ret nil\n",GetLastError()); -#endif - if (__threadErrno == EINTR) { - __threadErrno = 0; - @global(LastErrorNumber) = nil; - } else { - __threadErrno = EBADF; - if (@global(InfoPrinting) == true) { - console_fprintf(stderr, "Win32OS [info]: select errno = %d\n", __threadErrno); - } - @global(LastErrorNumber) = __mkSmallInteger(__threadErrno); - RETURN ( @symbol(error) ); - } - RETURN ( nil ); - } - - if (res == WAIT_TIMEOUT) { + console_printf("- error %d; ret nil\n",GetLastError()); +#endif + if (__threadErrno == EINTR) { + __threadErrno = 0; + @global(LastErrorNumber) = nil; + } else { + __threadErrno = EBADF; + if (@global(InfoPrinting) == true) { + console_fprintf(stderr, "Win32OS [info]: select errno = %d\n", __threadErrno); + } + @global(LastErrorNumber) = __mkSmallInteger(__threadErrno); + RETURN ( @symbol(error) ); + } + RETURN ( nil ); + } + + if (res == WAIT_TIMEOUT) { #ifdef SELECT3DEBUGWIN32 - console_printf("- timeOut; ret nil\n" ); -#endif - goto polling; - } - - if (res == numHandles) { - if (1 /* @global(InfoPrinting) == true */) { - console_fprintf(stderr, "Win32OS [info]: plugIn event has been handled\n"); - } - __threadErrno = 0; - @global(LastErrorNumber) = nil; - RETURN ( nil ); - } - if ((res < 0) || (res > numHandles)) { + console_printf("- timeOut; ret nil\n" ); +#endif + goto polling; + } + + if (res == numHandles) { + if (1 /* @global(InfoPrinting) == true */) { + console_fprintf(stderr, "Win32OS [info]: plugIn event has been handled\n"); + } + __threadErrno = 0; + @global(LastErrorNumber) = nil; + RETURN ( nil ); + } + if ((res < 0) || (res > numHandles)) { #ifdef SELECTDEBUGWIN32 - console_printf("- res=%d error1 %d\n", res, GetLastError()); -#endif - __threadErrno = 0; - @global(LastErrorNumber) = nil; - RETURN ( nil ); - } - - ret = res; - - if (ret < numHandles) { - int fd = retArray[ret]; - - @global(LastErrorNumber) = nil; + console_printf("- res=%d error1 %d\n", res, GetLastError()); +#endif + __threadErrno = 0; + @global(LastErrorNumber) = nil; + RETURN ( nil ); + } + + ret = res; + + if (ret < numHandles) { + int fd = retArray[ret]; + + @global(LastErrorNumber) = nil; #ifdef SELECTDEBUGWIN32 - if (ret) console_printf("wait Handles %d %d ret\n", ret, fd); -#endif - if (fd < 10000) { - RETURN ( __ArrayInstPtr(readFdArray)->a_element[fd] ); - } - if (fd < 20000) { - RETURN ( __ArrayInstPtr(writeFdArray)->a_element[fd-10000] ); - } - RETURN ( __ArrayInstPtr(exceptFdArray)->a_element[fd-20000] ); - } - console_fprintf(stderr, "Win32OS [info]: wait Handles ret = %d error2 %d\n", ret, GetLastError()); - goto fail; + if (ret) console_printf("wait Handles %d %d ret\n", ret, fd); +#endif + if (fd < 10000) { + RETURN ( __ArrayInstPtr(readFdArray)->a_element[fd] ); + } + if (fd < 20000) { + RETURN ( __ArrayInstPtr(writeFdArray)->a_element[fd-10000] ); + } + RETURN ( __ArrayInstPtr(exceptFdArray)->a_element[fd-20000] ); + } + console_fprintf(stderr, "Win32OS [info]: wait Handles ret = %d error2 %d\n", ret, GetLastError()); + goto fail; } else { polling: - for (i=0; i < readCount;i++) { - fd = __ArrayInstPtr(readFdArray)->a_element[i]; - - if (fd != nil) { - if (! __isExternalAddressLike(fd)) { - int canRead = _canReadWithoutBlocking (__intVal(fd)); - - if (canRead > 0 ) { - RETURN (fd); - } else { - if (canRead < 0 ) { - @global(LastErrorNumber) = __mkSmallInteger(EBADF); - RETURN ( @symbol(error) ); - } - } - } - } - } - - for (i=0; i < writeCount;i++) { - fd = __ArrayInstPtr(writeFdArray)->a_element[i]; - - if (fd != nil) { - if (! __isExternalAddressLike(fd)) { - int canWrite = _canWriteWithoutBlocking (__intVal(fd)); - - if (canWrite > 0 ) { - RETURN (fd); - } else { - if (canWrite < 0 ) { - @global(LastErrorNumber) = __mkSmallInteger(EBADF); - RETURN ( @symbol(error) ); - } - } - } - } - } - - @global(LastErrorNumber) = nil; - RETURN ( nil ); + for (i=0; i < readCount;i++) { + fd = __ArrayInstPtr(readFdArray)->a_element[i]; + + if (fd != nil) { + if (! __isExternalAddressLike(fd)) { + int canRead = _canReadWithoutBlocking (__intVal(fd)); + + if (canRead > 0 ) { + RETURN (fd); + } else { + if (canRead < 0 ) { + @global(LastErrorNumber) = __mkSmallInteger(EBADF); + RETURN ( @symbol(error) ); + } + } + } + } + } + + for (i=0; i < writeCount;i++) { + fd = __ArrayInstPtr(writeFdArray)->a_element[i]; + + if (fd != nil) { + if (! __isExternalAddressLike(fd)) { + int canWrite = _canWriteWithoutBlocking (__intVal(fd)); + + if (canWrite > 0 ) { + RETURN (fd); + } else { + if (canWrite < 0 ) { + @global(LastErrorNumber) = __mkSmallInteger(EBADF); + RETURN ( @symbol(error) ); + } + } + } + } + } + + @global(LastErrorNumber) = nil; + RETURN ( nil ); } fail: ; @@ -10924,51 +10944,51 @@ INT i, count; if (! __isArrayLike(fdOrHandleArray)) { - goto fail; + goto fail; } count = __arraySize(fdOrHandleArray); for (i=0; ia_element[i]; - HANDLE h; - - if (__isExternalAddressLike(fdOrHandle)) { - h = _HANDLEVal(fdOrHandle); - } else { - if (__isSmallInteger(fdOrHandle)) { - h = (HANDLE) _get_osfhandle (__intVal(fdOrHandle)); - } else { - goto fail; - } - } - hArray[i] = h; + OBJ fdOrHandle = __ArrayInstPtr(fdOrHandleArray)->a_element[i]; + HANDLE h; + + if (__isExternalAddressLike(fdOrHandle)) { + h = _HANDLEVal(fdOrHandle); + } else { + if (__isSmallInteger(fdOrHandle)) { + h = (HANDLE) _get_osfhandle (__intVal(fdOrHandle)); + } else { + goto fail; + } + } + hArray[i] = h; } if (__isSmallInteger(millis)) { - t = __intVal(millis); + t = __intVal(millis); } else { - t = INFINITE; + t = INFINITE; } #ifdef DO_WRAP_CALLS do { - __threadErrno = 0; - res = STX_API_CALL4( "WaitForMultipleObjects", WaitForMultipleObjects, count, hArray, FALSE, t); + __threadErrno = 0; + res = STX_API_CALL4( "WaitForMultipleObjects", WaitForMultipleObjects, count, hArray, FALSE, t); } while ((res < 0) && (__threadErrno == EINTR)); #else res = WaitForMultipleObjects(count, hArray, FALSE, t); if (res < 0) { - __threadErrno = __WIN32_ERR(GetLastError()); + __threadErrno = __WIN32_ERR(GetLastError()); } #endif if (res == WAIT_FAILED) { - RETURN (nil); + RETURN (nil); } if (res == WAIT_TIMEOUT) { - RETURN (nil); + RETURN (nil); } if ((res >= WAIT_OBJECT_0) && (res < (WAIT_OBJECT_0+count))) { - RETURN (__ArrayInstPtr(fdOrHandleArray)->a_element[res-WAIT_OBJECT_0]); + RETURN (__ArrayInstPtr(fdOrHandleArray)->a_element[res-WAIT_OBJECT_0]); } RETURN (nil); @@ -10993,37 +11013,37 @@ HANDLE h = NULL; if (__isExternalAddressLike(fdOrHandle)) { - h = _HANDLEVal(fdOrHandle); + h = _HANDLEVal(fdOrHandle); } else { - if (__isSmallInteger(fdOrHandle)) { - h = (HANDLE) _get_osfhandle (__intVal(fdOrHandle)); - } else { - goto fail; - } + if (__isSmallInteger(fdOrHandle)) { + h = (HANDLE) _get_osfhandle (__intVal(fdOrHandle)); + } else { + goto fail; + } } if (__isSmallInteger(millis)) { - t = __intVal(millis); + t = __intVal(millis); } else { - t = INFINITE; + t = INFINITE; } #ifdef DO_WRAP_CALLS do { - __threadErrno = 0; - res = STX_API_CALL2( "WaitForSingleObject", WaitForSingleObject, h, t); + __threadErrno = 0; + res = STX_API_CALL2( "WaitForSingleObject", WaitForSingleObject, h, t); } while ((res < 0) && (__threadErrno == EINTR)); #else res = WaitForSingleObject(h, t); if (res < 0) { - __threadErrno = __WIN32_ERR(GetLastError()); + __threadErrno = __WIN32_ERR(GetLastError()); } #endif if (res == WAIT_FAILED) { - RETURN (nil); + RETURN (nil); } if (res == WAIT_TIMEOUT) { - RETURN (nil); + RETURN (nil); } RETURN (fdOrHandle); @@ -11218,11 +11238,11 @@ type:t mode:m uid:u gid:g size:s id:i accessed:aT modified:mT created:cT sourcePath:lP fullName:fullName alternativeName:name2 ^ self basicNew - type:t mode:m uid:u gid:g size:s - id:i accessed:aT modified:mT created:cT - sourcePath:lP - fullName:fullName - alternativeName:name2 + type:t mode:m uid:u gid:g size:s + id:i accessed:aT modified:mT created:cT + sourcePath:lP + fullName:fullName + alternativeName:name2 ! ! !Win32OperatingSystem::FileStatusInfo methodsFor:'accessing'! @@ -11243,18 +11263,18 @@ path := self alternativePathName. path notNil ifTrue:[ - idx := path lastIndexOf:$\ startingAt:path size-1. - idx ~~ 0 ifTrue:[ - path := path copyFrom:(idx+1). - ]. + idx := path lastIndexOf:$\ startingAt:path size-1. + idx ~~ 0 ifTrue:[ + path := path copyFrom:(idx+1). + ]. ]. ^ path " - 'C:\' asFilename info alternativeName - 'C:\Dokumente und Einstellungen\' asFilename info alternativeName - 'C:\Dokumente und Einstellungen' asFilename info alternativeName + 'C:\' asFilename info alternativeName + 'C:\Dokumente und Einstellungen\' asFilename info alternativeName + 'C:\Dokumente und Einstellungen' asFilename info alternativeName " ! @@ -11264,14 +11284,14 @@ "/ access lazily... alternativePathName isNil ifTrue:[ - alternativePathName := (OperatingSystem getShortPathName:sourcePath) asSingleByteString. + alternativePathName := (OperatingSystem getShortPathName:sourcePath) asSingleByteString. ]. ^ alternativePathName " - 'C:\' asFilename info alternativePathName - 'C:\Dokumente und Einstellungen' asFilename info alternativePathName + 'C:\' asFilename info alternativePathName + 'C:\Dokumente und Einstellungen' asFilename info alternativePathName " ! @@ -11295,18 +11315,18 @@ path := self fullPathName. path notNil ifTrue:[ - idx := path lastIndexOf:$\ startingAt:path size-1. - idx ~~ 0 ifTrue:[ - path := path copyFrom:(idx+1). - ]. + idx := path lastIndexOf:$\ startingAt:path size-1. + idx ~~ 0 ifTrue:[ + path := path copyFrom:(idx+1). + ]. ]. ^ path " - '\' asFilename info fullName - 'C:\' asFilename info fullName - 'C:\Dokumente und Einstellungen' asFilename info fullName + '\' asFilename info fullName + 'C:\' asFilename info fullName + 'C:\Dokumente und Einstellungen' asFilename info fullName " ! @@ -11316,14 +11336,14 @@ "/ access lazily... fullPathName isNil ifTrue:[ - fullPathName := (OperatingSystem getLongPathName:sourcePath) asSingleByteStringIfPossible. + fullPathName := (OperatingSystem getLongPathName:sourcePath) asSingleByteStringIfPossible. ]. ^ fullPathName " - 'C:\' asFilename info fullPathName - 'C:\Dokumente und Einstellungen' asFilename info fullPathName + 'C:\' asFilename info fullPathName + 'C:\Dokumente und Einstellungen' asFilename info fullPathName " ! @@ -11344,9 +11364,9 @@ "/ access lazily... linkTargetPath isNil ifTrue:[ - type == #symbolicLink ifTrue:[ - linkTargetPath := OperatingSystem getLinkTarget:sourcePath. - ] + type == #symbolicLink ifTrue:[ + linkTargetPath := OperatingSystem getLinkTarget:sourcePath. + ] ]. ^ linkTargetPath @@ -11608,20 +11628,20 @@ [Instance variables:] - pid OS-Process identifier - - status either #exit #signal #stop #continue - - code either exitcode or signalnumber - - core true if core has been dumped + pid OS-Process identifier + + status either #exit #signal #stop #continue + + code either exitcode or signalnumber + + core true if core has been dumped [author:] - Stefan Vogel + Stefan Vogel [see also:] - OperatingSystem + OperatingSystem " ! ! @@ -11762,24 +11782,24 @@ counterIndexTextDictionary " - self counterIndexTextDictionary + self counterIndexTextDictionary " CounterIndexTextDictionary isNil ifTrue:[ - self synchronized:[ - CounterIndexTextDictionary isNil ifTrue:[ - |performanceText counterIndexTextDictionary| - - performanceText := self getPerformanceText valueNamed:'Counter'. - counterIndexTextDictionary := IdentityDictionary new. - - 1 to:performanceText size by:2 do:[:index| - counterIndexTextDictionary at:(performanceText at:index) asInteger put:(performanceText at:index + 1). - ]. - - CounterIndexTextDictionary := counterIndexTextDictionary. - ]. - ]. + self synchronized:[ + CounterIndexTextDictionary isNil ifTrue:[ + |performanceText counterIndexTextDictionary| + + performanceText := self getPerformanceText valueNamed:'Counter'. + counterIndexTextDictionary := IdentityDictionary new. + + 1 to:performanceText size by:2 do:[:index| + counterIndexTextDictionary at:(performanceText at:index) asInteger put:(performanceText at:index + 1). + ]. + + CounterIndexTextDictionary := counterIndexTextDictionary. + ]. + ]. ]. ^ CounterIndexTextDictionary @@ -11788,24 +11808,24 @@ helpIndexTextDictionary " - self helpIndexTextDictionary + self helpIndexTextDictionary " HelpIndexTextDictionary isNil ifTrue:[ - self synchronized:[ - HelpIndexTextDictionary isNil ifTrue:[ - |performanceText helpIndexTextDictionary| - - performanceText := self getPerformanceText valueNamed:'Help'. - helpIndexTextDictionary := IdentityDictionary new. - - 1 to:performanceText size by:2 do:[:index| - helpIndexTextDictionary at:(performanceText at:index) asInteger put:(performanceText at:index + 1). - ]. - - HelpIndexTextDictionary := helpIndexTextDictionary. - ]. - ]. + self synchronized:[ + HelpIndexTextDictionary isNil ifTrue:[ + |performanceText helpIndexTextDictionary| + + performanceText := self getPerformanceText valueNamed:'Help'. + helpIndexTextDictionary := IdentityDictionary new. + + 1 to:performanceText size by:2 do:[:index| + helpIndexTextDictionary at:(performanceText at:index) asInteger put:(performanceText at:index + 1). + ]. + + HelpIndexTextDictionary := helpIndexTextDictionary. + ]. + ]. ]. ^ HelpIndexTextDictionary @@ -11842,86 +11862,86 @@ documentation " - VISTA: - - Wer versucht unter Vista die Registy HKEY_PERFORMANCE_DATA abzufragen wird zunächst enttäuscht. - Die UAC UserAccessControl verhindern dies nämlich (selbs für den admin). - - Um dies zu umgehen: - - To turn off UAC - - 1. Click Start, and then click Control Panel. - 2. In Control Panel, click User Accounts. - 3. In the User Accounts window, click User Accounts. - 4. In the User Accounts tasks window, click Turn User Account Control on or off. - 5. If UAC is currently configured in Admin Approval Mode, the User Account Control message appears. Click Continue. - 6. Clear the Use User Account Control (UAC) to help protect your computer check box, and then click OK. - 7. Click Restart Now to apply the change right away, or click Restart Later and close the User Accounts tasks window. + VISTA: + + Wer versucht unter Vista die Registy HKEY_PERFORMANCE_DATA abzufragen wird zunächst enttäuscht. + Die UAC UserAccessControl verhindern dies nämlich (selbs für den admin). + + Um dies zu umgehen: + + To turn off UAC + + 1. Click Start, and then click Control Panel. + 2. In Control Panel, click User Accounts. + 3. In the User Accounts window, click User Accounts. + 4. In the User Accounts tasks window, click Turn User Account Control on or off. + 5. If UAC is currently configured in Admin Approval Mode, the User Account Control message appears. Click Continue. + 6. Clear the Use User Account Control (UAC) to help protect your computer check box, and then click OK. + 7. Click Restart Now to apply the change right away, or click Restart Later and close the User Accounts tasks window. " ! examples " - ######################################### PRIMITIVE - self getUsedMemoryInPercentage. - - self getPhysicalMemoryInKB. - self getPhysicalMemoryInMB. - - self getFreePhysicalMemoryInKB. - self getFreePhysicalMemoryInMB. - - self getPageFileSizeInKB. - self getPageFileSizeInMB. - - self getFreePageFileSizeInKB. - self getFreePageFileSizeInMB. - - self getVirtualMemoryInKB. - self getVirtualMemoryInMB. - - ######################################### REGISTRY - self helpIndexTextDictionary - self counterIndexTextDictionary - - self global getCounterNameIndexArray. - self global getObjectNameIndexArray. - - self processor getCounterNameIndexArray. - self processor processorUsage. - self processor processorUsageFromLast. - self processor interruptsPerSecond. - self processor interruptsPerSecondFromLast. - - self process getCounterNameIndexArray. - self process processUsage. - self process processUsageFromLast. - self process runningProcesses. - self process runningProcessNameList. - - self network getCounterNameIndexArray. - self network kBytesReceivedPerSecond. - self network kBytesReceivedPerSecondFromLast. - self network kBytesSentPerSecond. - self network kBytesSentPerSecondFromLast. - - self memory getCounterNameIndexArray. - self memory availableMBytes. - self memory availableKBytes. - - self diskIO getCounterNameIndexArray. - self diskIO diskSpaceFreeInMegaByte. - self diskIO diskQueueLength. - self diskIO diskTransfersPerSecond. - self diskIO diskTransfersPerSecondFromlast. - self diskIO diskReadsPerSecond. - self diskIO diskReadsPerSecondFromLast. - self diskIO diskWritesPerSecond. - self diskIO diskWritesPerSecondFromLast. - self diskIO diskBytesPerSecond. - self diskIO diskBytesPerSecondFromLast. + ######################################### PRIMITIVE + self getUsedMemoryInPercentage. + + self getPhysicalMemoryInKB. + self getPhysicalMemoryInMB. + + self getFreePhysicalMemoryInKB. + self getFreePhysicalMemoryInMB. + + self getPageFileSizeInKB. + self getPageFileSizeInMB. + + self getFreePageFileSizeInKB. + self getFreePageFileSizeInMB. + + self getVirtualMemoryInKB. + self getVirtualMemoryInMB. + + ######################################### REGISTRY + self helpIndexTextDictionary + self counterIndexTextDictionary + + self global getCounterNameIndexArray. + self global getObjectNameIndexArray. + + self processor getCounterNameIndexArray. + self processor processorUsage. + self processor processorUsageFromLast. + self processor interruptsPerSecond. + self processor interruptsPerSecondFromLast. + + self process getCounterNameIndexArray. + self process processUsage. + self process processUsageFromLast. + self process runningProcesses. + self process runningProcessNameList. + + self network getCounterNameIndexArray. + self network kBytesReceivedPerSecond. + self network kBytesReceivedPerSecondFromLast. + self network kBytesSentPerSecond. + self network kBytesSentPerSecondFromLast. + + self memory getCounterNameIndexArray. + self memory availableMBytes. + self memory availableKBytes. + + self diskIO getCounterNameIndexArray. + self diskIO diskSpaceFreeInMegaByte. + self diskIO diskQueueLength. + self diskIO diskTransfersPerSecond. + self diskIO diskTransfersPerSecondFromlast. + self diskIO diskReadsPerSecond. + self diskIO diskReadsPerSecondFromLast. + self diskIO diskWritesPerSecond. + self diskIO diskWritesPerSecondFromLast. + self diskIO diskBytesPerSecond. + self diskIO diskBytesPerSecondFromLast. " ! ! @@ -11930,7 +11950,7 @@ initialize " - self initialize + self initialize " PerformanceText := CounterIndexTextDictionary := HelpIndexTextDictionary := nil. @@ -11941,7 +11961,7 @@ getPerformanceText PerformanceText isNil ifTrue:[ - PerformanceText := Win32OperatingSystem registryEntry key:'HKEY_PERFORMANCE_TEXT'. + PerformanceText := Win32OperatingSystem registryEntry key:'HKEY_PERFORMANCE_TEXT'. ]. ^ PerformanceText @@ -11953,16 +11973,16 @@ |ret| %{ - MEMORYSTATUS mState; - GlobalMemoryStatus (&mState); - - ret = __mkSmallInteger(mState.dwAvailPageFile / 1024); + MEMORYSTATUS mState; + GlobalMemoryStatus (&mState); + + ret = __mkSmallInteger(mState.dwAvailPageFile / 1024); %}. ^ ret " - self getFreePageFileSizeInKB + self getFreePageFileSizeInKB " ! @@ -11970,7 +11990,7 @@ ^ (self getFreePageFileSizeInKB / 1024) asInteger " - self getFreePageFileSizeInMB + self getFreePageFileSizeInMB " ! @@ -11978,16 +11998,16 @@ |ret| %{ - MEMORYSTATUS mState; - GlobalMemoryStatus (&mState); - - ret = __mkSmallInteger(mState.dwAvailPhys / 1024); + MEMORYSTATUS mState; + GlobalMemoryStatus (&mState); + + ret = __mkSmallInteger(mState.dwAvailPhys / 1024); %}. ^ ret " - self getFreePhysicalMemoryInKB + self getFreePhysicalMemoryInKB " ! @@ -11995,7 +12015,7 @@ ^ (self getFreePhysicalMemoryInKB / 1024) asInteger " - self getFreePhysicalMemoryInMB + self getFreePhysicalMemoryInMB " ! @@ -12003,7 +12023,7 @@ ^ self getPageFileSizeInMB * 1024 " - self getPageFileSizeInKB + self getPageFileSizeInKB " ! @@ -12011,16 +12031,16 @@ |ret| %{ - SYSTEM_INFO sInfo; - GetSystemInfo(&sInfo); - - ret = __mkSmallInteger(sInfo.dwPageSize); + SYSTEM_INFO sInfo; + GetSystemInfo(&sInfo); + + ret = __mkSmallInteger(sInfo.dwPageSize); %}. ^ ret " - self getPageFileSizeInMB + self getPageFileSizeInMB " ! @@ -12028,16 +12048,16 @@ |ret| %{ - MEMORYSTATUS mState; - GlobalMemoryStatus (&mState); - - ret = __mkSmallInteger(mState.dwTotalPhys / 1024); + MEMORYSTATUS mState; + GlobalMemoryStatus (&mState); + + ret = __mkSmallInteger(mState.dwTotalPhys / 1024); %}. ^ ret " - self getPhysicalMemoryInKB + self getPhysicalMemoryInKB " ! @@ -12045,7 +12065,7 @@ ^ (self getPhysicalMemoryInKB / 1024) asInteger " - self getPhysicalMemoryInMB + self getPhysicalMemoryInMB " ! @@ -12053,16 +12073,16 @@ |ret| %{ - MEMORYSTATUS mState; - GlobalMemoryStatus (&mState); - - ret = __mkSmallInteger(mState.dwMemoryLoad); + MEMORYSTATUS mState; + GlobalMemoryStatus (&mState); + + ret = __mkSmallInteger(mState.dwMemoryLoad); %}. ^ ret " - self getUsedMemoryInPercentage + self getUsedMemoryInPercentage " ! @@ -12070,16 +12090,16 @@ |ret| %{ - MEMORYSTATUS mState; - GlobalMemoryStatus (&mState); - - ret = __mkSmallInteger(mState.dwTotalVirtual / 1024); + MEMORYSTATUS mState; + GlobalMemoryStatus (&mState); + + ret = __mkSmallInteger(mState.dwTotalVirtual / 1024); %}. ^ ret " - self getVirtualMemoryInKB + self getVirtualMemoryInKB " ! @@ -12087,7 +12107,7 @@ ^ (self getVirtualMemoryInKB / 1024) asInteger " - self getVirtualMemoryInMB + self getVirtualMemoryInMB " ! ! @@ -12153,155 +12173,155 @@ //iterate all following objetcs for (objectIterator=0; objectIteratorObjectNameTitleIndex)); - __AT_PUT_(st_perObject, @symbol(DetailLevel), __mkSmallInteger(perfObjectPtr->DetailLevel)); - __AT_PUT_(st_perObject, @symbol(NumCounters), __mkSmallInteger(perfObjectPtr->NumCounters)); - __AT_PUT_(st_perObject, @symbol(NumInstances), __mkSmallInteger(perfObjectPtr->NumInstances)); - - //setup counter array and initialize its pointer - st_counterArray = __ARRAY_NEW_INT(perfObjectPtr->NumCounters); - perfCounterPtr = (PERF_COUNTER_DEFINITION *)((char *)perfObjectPtr + perfObjectPtr->HeaderLength); - - //add the st_counterArray to st_perObject dictionary - __AT_PUT_(st_perObject, @symbol(Counters), st_counterArray); - - //iterate all following counter definition - for (counterIterator=0; counterIteratorNumCounters; counterIterator++) { - //add the st_perCounter dictionary to st_counterArray - st_perCounter = __SSEND0(@global(Dictionary), @symbol(new), 0); - __AT_PUT_(st_counterArray, __mkSmallInteger(counterIterator+1), st_perCounter); - - //get the counter data - __AT_PUT_(st_perCounter, @symbol(CounterNameTitleIndex), __mkSmallInteger(perfCounterPtr->CounterNameTitleIndex)); - __AT_PUT_(st_perCounter, @symbol(CounterTypeBits), __mkSmallInteger(perfCounterPtr->CounterType)); - __AT_PUT_(st_perCounter, @symbol(CounterSize), __mkSmallInteger(perfCounterPtr->CounterSize)); - __AT_PUT_(st_perCounter, @symbol(CounterOffset), __mkSmallInteger(perfCounterPtr->CounterOffset)); - - //put the counter type size - switch (perfCounterPtr->CounterType & PERF_SIZE_MASK) { - case PERF_SIZE_DWORD: - __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(DWORD)); - break; - case PERF_SIZE_LARGE: - __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(LARGE)); - break; - case PERF_SIZE_ZERO: - __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(ZERO)); - break; - case PERF_SIZE_VARIABLE_LEN: - __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(VARIABLE_LEN)); - break; - } - switch (perfCounterPtr->CounterType & PERF_TYPE_MASK) { - case PERF_TYPE_NUMBER: - __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(NUMBER)); - switch (perfCounterPtr->CounterType & PERF_NUMBERTYPE_MASK) { - case PERF_NUMBER_HEX: - __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(HEX)); - break; - case PERF_NUMBER_DECIMAL: - __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(DECIMAL)); - break; - case PERF_NUMBER_DEC_1000: - __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(DEC_1000)); - break; - } - break; - case PERF_TYPE_COUNTER: - __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(COUNTER)); - switch (perfCounterPtr->CounterType & PERF_COUNTERTYPE_MASK) { - case PERF_COUNTER_VALUE: - __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(VALUE)); - break; - case PERF_COUNTER_RATE: - __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(RATE)); - break; - case PERF_COUNTER_FRACTION: - __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(FRACTION)); - break; - case PERF_COUNTER_BASE: - __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(BASE)); - break; - case PERF_COUNTER_ELAPSED: - __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(ELAPSED)); - break; - case PERF_COUNTER_QUEUELEN: - __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(QUEUELEN)); - break; - case PERF_COUNTER_HISTOGRAM: - __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(HISTOGRAM)); - break; - case PERF_COUNTER_PRECISION: - __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(PRECISION)); - break; - } - break; - case PERF_TYPE_TEXT: - __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(TEXT)); - switch (perfCounterPtr->CounterType & PERF_TEXTTYPE_MASK) { - case PERF_TEXT_UNICODE: - __AT_PUT_(st_perCounter, @symbol(TEXT),@symbol(UNICODE)); - break; - case PERF_TEXT_ASCII: - __AT_PUT_(st_perCounter, @symbol(TEXT),@symbol(ASCII)); - break; - } - break; - case PERF_TYPE_ZERO: - __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(ZERO)); - break; - } - - //setup the counter pointer to the next counter definition - perfCounterPtr = (PERF_COUNTER_DEFINITION *)((char *)perfCounterPtr + perfCounterPtr->ByteLength); - } - - //goon dependent on the count of instances - if (perfObjectPtr->NumInstances < 1) { - perfCounterBlockPtr = (PERF_COUNTER_BLOCK *)(perfCounterPtr); - __AT_PUT_(st_perObject, @symbol(RawData), __MKBYTEARRAY(perfCounterBlockPtr, perfCounterBlockPtr->ByteLength)); - } else { - //setup the instance pointer to the end of all counters - perfInstancePtr = (PERF_INSTANCE_DEFINITION *)(perfCounterPtr); - - //setup st_instanceArray and add it to st_perObject - st_instanceArray = __ARRAY_NEW_INT(perfObjectPtr->NumInstances); - __AT_PUT_(st_perObject, @symbol(Instances), st_instanceArray); - - //iterate the instances - for (instanceIterator=0; instanceIteratorNumInstances; instanceIterator++) { - //setup st_perInstance and add it to st_instanceArray - st_perInstance = __SSEND0(@global(Dictionary), @symbol(new), 0); - __AT_PUT_(st_instanceArray, __mkSmallInteger(instanceIterator+1), st_perInstance); - - //get the instance data - __AT_PUT_(st_perInstance, @symbol(Name), __MKBYTEARRAY((wchar_t *)((BYTE *)perfInstancePtr + perfInstancePtr->NameOffset),perfInstancePtr->NameLength)); - __AT_PUT_(st_perInstance, @symbol(ParentObjectTitleIndex), __mkSmallInteger(perfInstancePtr->ParentObjectTitleIndex)); - __AT_PUT_(st_perInstance, @symbol(ParentObjectInstance), __mkSmallInteger(perfInstancePtr->ParentObjectInstance)); - __AT_PUT_(st_perInstance, @symbol(NameOffset), __mkSmallInteger(perfInstancePtr->NameOffset)); - __AT_PUT_(st_perInstance, @symbol(NameLength), __mkSmallInteger(perfInstancePtr->NameLength)); - - //setup the instance pointer to the its end - perfInstancePtr = (PERF_INSTANCE_DEFINITION *)((char *)perfInstancePtr + perfInstancePtr->ByteLength); - - //setup the counter block pointer - perfCounterBlockPtr = (PERF_COUNTER_BLOCK *)(perfInstancePtr); - - //get the instance raw data - __AT_PUT_(st_perInstance, @symbol(RawData), __MKBYTEARRAY(perfCounterBlockPtr, perfCounterBlockPtr->ByteLength)); - - //setup the instance pointer to the next instance - perfInstancePtr = (PERF_INSTANCE_DEFINITION *)((char *)perfCounterBlockPtr + perfCounterBlockPtr->ByteLength); - } - } - - //setup the object pointer to the next object - perfObjectPtr = (PERF_OBJECT_TYPE *)((char *)perfObjectPtr + perfObjectPtr->TotalByteLength); + //add the st_perObject dictionary to st_objectArray + st_perObject = __SSEND0(@global(Dictionary), @symbol(new), 0); + __AT_PUT_(st_objectArray, __mkSmallInteger(objectIterator+1), st_perObject); + + //get the object data + __AT_PUT_(st_perObject, @symbol(ObjectNameTitleIndex), __mkSmallInteger(perfObjectPtr->ObjectNameTitleIndex)); + __AT_PUT_(st_perObject, @symbol(DetailLevel), __mkSmallInteger(perfObjectPtr->DetailLevel)); + __AT_PUT_(st_perObject, @symbol(NumCounters), __mkSmallInteger(perfObjectPtr->NumCounters)); + __AT_PUT_(st_perObject, @symbol(NumInstances), __mkSmallInteger(perfObjectPtr->NumInstances)); + + //setup counter array and initialize its pointer + st_counterArray = __ARRAY_NEW_INT(perfObjectPtr->NumCounters); + perfCounterPtr = (PERF_COUNTER_DEFINITION *)((char *)perfObjectPtr + perfObjectPtr->HeaderLength); + + //add the st_counterArray to st_perObject dictionary + __AT_PUT_(st_perObject, @symbol(Counters), st_counterArray); + + //iterate all following counter definition + for (counterIterator=0; counterIteratorNumCounters; counterIterator++) { + //add the st_perCounter dictionary to st_counterArray + st_perCounter = __SSEND0(@global(Dictionary), @symbol(new), 0); + __AT_PUT_(st_counterArray, __mkSmallInteger(counterIterator+1), st_perCounter); + + //get the counter data + __AT_PUT_(st_perCounter, @symbol(CounterNameTitleIndex), __mkSmallInteger(perfCounterPtr->CounterNameTitleIndex)); + __AT_PUT_(st_perCounter, @symbol(CounterTypeBits), __mkSmallInteger(perfCounterPtr->CounterType)); + __AT_PUT_(st_perCounter, @symbol(CounterSize), __mkSmallInteger(perfCounterPtr->CounterSize)); + __AT_PUT_(st_perCounter, @symbol(CounterOffset), __mkSmallInteger(perfCounterPtr->CounterOffset)); + + //put the counter type size + switch (perfCounterPtr->CounterType & PERF_SIZE_MASK) { + case PERF_SIZE_DWORD: + __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(DWORD)); + break; + case PERF_SIZE_LARGE: + __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(LARGE)); + break; + case PERF_SIZE_ZERO: + __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(ZERO)); + break; + case PERF_SIZE_VARIABLE_LEN: + __AT_PUT_(st_perCounter, @symbol(SIZE),@symbol(VARIABLE_LEN)); + break; + } + switch (perfCounterPtr->CounterType & PERF_TYPE_MASK) { + case PERF_TYPE_NUMBER: + __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(NUMBER)); + switch (perfCounterPtr->CounterType & PERF_NUMBERTYPE_MASK) { + case PERF_NUMBER_HEX: + __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(HEX)); + break; + case PERF_NUMBER_DECIMAL: + __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(DECIMAL)); + break; + case PERF_NUMBER_DEC_1000: + __AT_PUT_(st_perCounter, @symbol(NUMBER),@symbol(DEC_1000)); + break; + } + break; + case PERF_TYPE_COUNTER: + __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(COUNTER)); + switch (perfCounterPtr->CounterType & PERF_COUNTERTYPE_MASK) { + case PERF_COUNTER_VALUE: + __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(VALUE)); + break; + case PERF_COUNTER_RATE: + __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(RATE)); + break; + case PERF_COUNTER_FRACTION: + __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(FRACTION)); + break; + case PERF_COUNTER_BASE: + __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(BASE)); + break; + case PERF_COUNTER_ELAPSED: + __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(ELAPSED)); + break; + case PERF_COUNTER_QUEUELEN: + __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(QUEUELEN)); + break; + case PERF_COUNTER_HISTOGRAM: + __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(HISTOGRAM)); + break; + case PERF_COUNTER_PRECISION: + __AT_PUT_(st_perCounter, @symbol(COUNTER),@symbol(PRECISION)); + break; + } + break; + case PERF_TYPE_TEXT: + __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(TEXT)); + switch (perfCounterPtr->CounterType & PERF_TEXTTYPE_MASK) { + case PERF_TEXT_UNICODE: + __AT_PUT_(st_perCounter, @symbol(TEXT),@symbol(UNICODE)); + break; + case PERF_TEXT_ASCII: + __AT_PUT_(st_perCounter, @symbol(TEXT),@symbol(ASCII)); + break; + } + break; + case PERF_TYPE_ZERO: + __AT_PUT_(st_perCounter, @symbol(TYPE),@symbol(ZERO)); + break; + } + + //setup the counter pointer to the next counter definition + perfCounterPtr = (PERF_COUNTER_DEFINITION *)((char *)perfCounterPtr + perfCounterPtr->ByteLength); + } + + //goon dependent on the count of instances + if (perfObjectPtr->NumInstances < 1) { + perfCounterBlockPtr = (PERF_COUNTER_BLOCK *)(perfCounterPtr); + __AT_PUT_(st_perObject, @symbol(RawData), __MKBYTEARRAY(perfCounterBlockPtr, perfCounterBlockPtr->ByteLength)); + } else { + //setup the instance pointer to the end of all counters + perfInstancePtr = (PERF_INSTANCE_DEFINITION *)(perfCounterPtr); + + //setup st_instanceArray and add it to st_perObject + st_instanceArray = __ARRAY_NEW_INT(perfObjectPtr->NumInstances); + __AT_PUT_(st_perObject, @symbol(Instances), st_instanceArray); + + //iterate the instances + for (instanceIterator=0; instanceIteratorNumInstances; instanceIterator++) { + //setup st_perInstance and add it to st_instanceArray + st_perInstance = __SSEND0(@global(Dictionary), @symbol(new), 0); + __AT_PUT_(st_instanceArray, __mkSmallInteger(instanceIterator+1), st_perInstance); + + //get the instance data + __AT_PUT_(st_perInstance, @symbol(Name), __MKBYTEARRAY((wchar_t *)((BYTE *)perfInstancePtr + perfInstancePtr->NameOffset),perfInstancePtr->NameLength)); + __AT_PUT_(st_perInstance, @symbol(ParentObjectTitleIndex), __mkSmallInteger(perfInstancePtr->ParentObjectTitleIndex)); + __AT_PUT_(st_perInstance, @symbol(ParentObjectInstance), __mkSmallInteger(perfInstancePtr->ParentObjectInstance)); + __AT_PUT_(st_perInstance, @symbol(NameOffset), __mkSmallInteger(perfInstancePtr->NameOffset)); + __AT_PUT_(st_perInstance, @symbol(NameLength), __mkSmallInteger(perfInstancePtr->NameLength)); + + //setup the instance pointer to the its end + perfInstancePtr = (PERF_INSTANCE_DEFINITION *)((char *)perfInstancePtr + perfInstancePtr->ByteLength); + + //setup the counter block pointer + perfCounterBlockPtr = (PERF_COUNTER_BLOCK *)(perfInstancePtr); + + //get the instance raw data + __AT_PUT_(st_perInstance, @symbol(RawData), __MKBYTEARRAY(perfCounterBlockPtr, perfCounterBlockPtr->ByteLength)); + + //setup the instance pointer to the next instance + perfInstancePtr = (PERF_INSTANCE_DEFINITION *)((char *)perfCounterBlockPtr + perfCounterBlockPtr->ByteLength); + } + } + + //setup the object pointer to the next object + perfObjectPtr = (PERF_OBJECT_TYPE *)((char *)perfObjectPtr + perfObjectPtr->TotalByteLength); } %}. objectArray := st_objectArray. @@ -12310,61 +12330,61 @@ perfTime100nSec := st_perfTime100nSec. getNameBlock := [:i| - self class counterIndexTextDictionary at:i ifAbsent:['<>']. + self class counterIndexTextDictionary at:i ifAbsent:['<>']. ]. getCounterValueBlock := [:counter :rawData| - |offset counterValue| - - offset := counter at:#CounterOffset. - offset >= rawData size ifTrue:[ - counterValue := nil. - ] ifFalse:[ - (counter at:#SIZE) == #LARGE ifTrue:[ - counterValue := rawData unsignedLongLongAt:offset + 1 bigEndian:false. - ] ifFalse:[ - (counter at:#SIZE) == #DWORD ifTrue:[ - counterValue := rawData unsignedLongAt:offset + 1 bigEndian:false. - ] ifFalse:[ - self halt. - ]. - ]. - ]. - - counterValue + |offset counterValue| + + offset := counter at:#CounterOffset. + offset >= rawData size ifTrue:[ + counterValue := nil. + ] ifFalse:[ + (counter at:#SIZE) == #LARGE ifTrue:[ + counterValue := rawData unsignedLongLongAt:offset + 1 bigEndian:false. + ] ifFalse:[ + (counter at:#SIZE) == #DWORD ifTrue:[ + counterValue := rawData unsignedLongAt:offset + 1 bigEndian:false. + ] ifFalse:[ + self halt. + ]. + ]. + ]. + + counterValue ]. objectArray do:[:anObject| - "setup the object name" - anObject at:#ObjectNameTitle put:(getNameBlock value:(anObject at:#ObjectNameTitleIndex)). - - "setup the name and a counter value array to each counter" - (anObject at:#Counters) do:[:aCounter| - aCounter at:#CounterNameTitle put:(getNameBlock value:(aCounter at:#CounterNameTitleIndex)). - aCounter at:#CounterValueArray put:OrderedCollection new. - ]. - - (anObject at:#NumInstances) < 1 ifTrue:[ - |rawData| - - rawData := anObject at:#RawData. - - (anObject at:#Counters) do:[:aCounter| - (aCounter at:#CounterValueArray) add:(getCounterValueBlock value:aCounter value:rawData). - ]. - ] ifFalse:[ - (anObject at:#Instances) do:[:anInstance| - |rawData| - - rawData := anInstance at:#RawData. - - anInstance at:#Name put:((Unicode16String fromBytes:(anInstance at:#Name) copy swapBytes) copyWithoutLast:1). - - (anObject at:#Counters) do:[:aCounter| - (aCounter at:#CounterValueArray) add:(getCounterValueBlock value:aCounter value:rawData). - ]. - ]. - ]. + "setup the object name" + anObject at:#ObjectNameTitle put:(getNameBlock value:(anObject at:#ObjectNameTitleIndex)). + + "setup the name and a counter value array to each counter" + (anObject at:#Counters) do:[:aCounter| + aCounter at:#CounterNameTitle put:(getNameBlock value:(aCounter at:#CounterNameTitleIndex)). + aCounter at:#CounterValueArray put:OrderedCollection new. + ]. + + (anObject at:#NumInstances) < 1 ifTrue:[ + |rawData| + + rawData := anObject at:#RawData. + + (anObject at:#Counters) do:[:aCounter| + (aCounter at:#CounterValueArray) add:(getCounterValueBlock value:aCounter value:rawData). + ]. + ] ifFalse:[ + (anObject at:#Instances) do:[:anInstance| + |rawData| + + rawData := anInstance at:#RawData. + + anInstance at:#Name put:((Unicode16String fromBytes:(anInstance at:#Name) copy swapBytes) copyWithoutLast:1). + + (anObject at:#Counters) do:[:aCounter| + (aCounter at:#CounterValueArray) add:(getCounterValueBlock value:aCounter value:rawData). + ]. + ]. + ]. ]. ^ self @@ -12375,7 +12395,7 @@ cachedResults cachedResults isNil ifTrue:[ - cachedResults := IdentityDictionary new. + cachedResults := IdentityDictionary new. ]. ^ cachedResults @@ -12402,8 +12422,8 @@ aliveTime " - returns the time a data stays alive, in milliseconds - before we push a new call and overwrite the data + returns the time a data stays alive, in milliseconds + before we push a new call and overwrite the data " ^ self subclassResponsibility @@ -12426,18 +12446,18 @@ data self synchronized:[ - |lastTS| - - lastTS := self lastTimestamp. - lastTS isNil ifTrue:[ - ^ self dataBasic - ] ifFalse:[ - Timestamp now asMilliseconds - lastTS >= self aliveTime ifTrue:[ - ^ self dataBasic - ] ifFalse:[ - ^ self lastData - ]. - ]. + |lastTS| + + lastTS := self lastTimestamp. + lastTS isNil ifTrue:[ + ^ self dataBasic + ] ifFalse:[ + Timestamp now asMilliseconds - lastTS >= self aliveTime ifTrue:[ + ^ self dataBasic + ] ifFalse:[ + ^ self lastData + ]. + ]. ]. ! @@ -12461,9 +12481,9 @@ data := self data. self indexedNameNumbered == 0 ifTrue:[ - object := data objectArray at:1 ifAbsent:[debugBlock value:(object at:#ObjectNameTitle)]. + object := data objectArray at:1 ifAbsent:[debugBlock value:(object at:#ObjectNameTitle)]. ] ifFalse:[ - object := data objectArray detect:[:el|(el at:#ObjectNameTitleIndex) == self indexedNameNumbered] ifNone:[self error:'counter not found']. + object := data objectArray detect:[:el|(el at:#ObjectNameTitleIndex) == self indexedNameNumbered] ifNone:[self error:'counter not found']. ]. ^ (object at:#Counters) collect:[:el|Array with:(el at:#CounterNameTitle) with:(el at:#CounterNameTitleIndex)]. @@ -12476,14 +12496,14 @@ cachedResult := self cachedResults at:aSelector ifAbsent:nil. cachedResult notNil ifTrue:[ - |currentResult| - - currentResult := self perform:aSelector. - return := self getPerSecondViaResult1:cachedResult result2:currentResult. - - self cachedResults at:aSelector put:currentResult. + |currentResult| + + currentResult := self perform:aSelector. + return := self getPerSecondViaResult1:cachedResult result2:currentResult. + + self cachedResults at:aSelector put:currentResult. ] ifFalse:[ - self cachedResults at:aSelector put:(self perform:aSelector). + self cachedResults at:aSelector put:(self perform:aSelector). ]. ^ return @@ -12507,15 +12527,15 @@ globalResult := Dictionary new. values2 keysDo:[:key| - |difference| - - difference := (values2 at:key) - (values1 at:key). - - runTimeInS = 0 ifTrue:[ - globalResult at:key put:0. - ] ifFalse:[ - globalResult at:key put:(difference / runTimeInS) asFloat. - ]. + |difference| + + difference := (values2 at:key) - (values1 at:key). + + runTimeInS = 0 ifTrue:[ + globalResult at:key put:0. + ] ifFalse:[ + globalResult at:key put:(difference / runTimeInS) asFloat. + ]. ]. ^ globalResult @@ -12533,15 +12553,15 @@ globalResult := Dictionary new. values2 keysDo:[:key| - |difference| - - difference := (values2 at:key) - (values1 at:key). - - runTimeInS = 0 ifTrue:[ - globalResult at:key put:0. - ] ifFalse:[ - globalResult at:key put:(difference / runTimeInS) asFloat. - ]. + |difference| + + difference := (values2 at:key) - (values1 at:key). + + runTimeInS = 0 ifTrue:[ + globalResult at:key put:0. + ] ifFalse:[ + globalResult at:key put:(difference / runTimeInS) asFloat. + ]. ]. ^ globalResult @@ -12552,14 +12572,14 @@ cachedResult := self cachedResults at:aSelector ifAbsent:nil. cachedResult notNil ifTrue:[ - |currentResult| - - currentResult := self perform:aSelector. - return := self getUsageViaResult1:cachedResult result2:currentResult. - - self cachedResults at:aSelector put:currentResult. + |currentResult| + + currentResult := self perform:aSelector. + return := self getUsageViaResult1:cachedResult result2:currentResult. + + self cachedResults at:aSelector put:currentResult. ] ifFalse:[ - self cachedResults at:aSelector put:(self perform:aSelector). + self cachedResults at:aSelector put:(self perform:aSelector). ]. ^ return @@ -12582,22 +12602,22 @@ value2 := result2 at:#values. value1 keysDo:[:key| - |diff dPerSecond load1024 res| - - diff := (value2 at:key) - (value1 at:key). - diff := diff bitShift:10. - - deltaTIn100Ns = 0 ifTrue:[ - dPerSecond := 0. - ] ifFalse:[ - dPerSecond := (diff / deltaTIn100Ns) asFloat. - ]. - load1024 := 1024 - dPerSecond. - - res := (load1024 / 1024 * 100) asFloat. - res < 0 ifTrue:[res := 0]. - - globalResult at:key put:res. + |diff dPerSecond load1024 res| + + diff := (value2 at:key) - (value1 at:key). + diff := diff bitShift:10. + + deltaTIn100Ns = 0 ifTrue:[ + dPerSecond := 0. + ] ifFalse:[ + dPerSecond := (diff / deltaTIn100Ns) asFloat. + ]. + load1024 := 1024 - dPerSecond. + + res := (load1024 / 1024 * 100) asFloat. + res < 0 ifTrue:[res := 0]. + + globalResult at:key put:res. ]. ^ globalResult @@ -12613,22 +12633,22 @@ value2 := result2 at:#values. value1 keysDo:[:key| - |diff dPerSecond load1024 res| - - diff := (value2 at:key) - (value1 at:key). - diff := diff bitShift:10. - - deltaTIn100Ns = 0 ifTrue:[ - dPerSecond := 0. - ] ifFalse:[ - dPerSecond := (diff / deltaTIn100Ns) asFloat. - ]. - load1024 := 1024 - dPerSecond. - - res := (load1024 / 1024 * 100) asFloat. - res < 0 ifTrue:[res := 0]. - - globalResult at:key put:res. + |diff dPerSecond load1024 res| + + diff := (value2 at:key) - (value1 at:key). + diff := diff bitShift:10. + + deltaTIn100Ns = 0 ifTrue:[ + dPerSecond := 0. + ] ifFalse:[ + dPerSecond := (diff / deltaTIn100Ns) asFloat. + ]. + load1024 := 1024 - dPerSecond. + + res := (load1024 / 1024 * 100) asFloat. + res < 0 ifTrue:[res := 0]. + + globalResult at:key put:res. ]. ^ globalResult @@ -12652,15 +12672,15 @@ |data object counter values debugBlock numInstances| debugBlock := [:obj| - ^ 'obj:', obj , ' this:', self printString , ' idx:', self indexedName + ^ 'obj:', obj , ' this:', self printString , ' idx:', self indexedName ]. data := self dataBasic. objectIndex == 0 ifTrue:[ - object := data objectArray at:1 ifAbsent:[debugBlock value:(object at:#ObjectNameTitle)]. + object := data objectArray at:1 ifAbsent:[debugBlock value:(object at:#ObjectNameTitle)]. ] ifFalse:[ - object := data objectArray detect:[:el|(el at:#ObjectNameTitleIndex) == objectIndex] ifNone:[debugBlock value:(object at:#ObjectNameTitle)]. + object := data objectArray detect:[:el|(el at:#ObjectNameTitleIndex) == objectIndex] ifNone:[debugBlock value:(object at:#ObjectNameTitle)]. ]. counter := (object at:#Counters) detect:[:aCounter|(aCounter at:#CounterNameTitleIndex) == counterIndex] ifNone:[debugBlock value:(object at:#ObjectNameTitle)]. @@ -12669,28 +12689,28 @@ numInstances := object at:#NumInstances. numInstances > 0 ifTrue:[ - 1 to:numInstances do:[:idx| - |value instanceName| - - value := (counter at:#CounterValueArray) at:idx. - instanceName := ((object at:#Instances) at:idx) at:#Name. - - values at:instanceName put:value. - ]. + 1 to:numInstances do:[:idx| + |value instanceName| + + value := (counter at:#CounterValueArray) at:idx. + instanceName := ((object at:#Instances) at:idx) at:#Name. + + values at:instanceName put:value. + ]. ] ifFalse:[ - values at:'<>' put:(counter at:#CounterValueArray) first. + values at:'<>' put:(counter at:#CounterValueArray) first. ]. boolean ifTrue:[ - |return| - - return := IdentityDictionary new. - return at:#time put:data perfTime. - return at:#frequence put:data perfFreq. - return at:#time100nSec put:data perfTime100nSec. - return at:#values put:values. - - ^ return + |return| + + return := IdentityDictionary new. + return at:#time put:data perfTime. + return at:#frequence put:data perfFreq. + return at:#time100nSec put:data perfTime100nSec. + return at:#values put:values. + + ^ return ]. ^ values @@ -12712,15 +12732,15 @@ |data object counter values debugBlock numInstances| debugBlock := [:obj| - ^ 'obj:', obj , ' this:', self printString , ' idx:', self indexedName + ^ 'obj:', obj , ' this:', self printString , ' idx:', self indexedName ]. data := self data. objectIndex == 0 ifTrue:[ - object := data objectArray at:1 ifAbsent:[debugBlock value:(object at:#ObjectNameTitle)]. + object := data objectArray at:1 ifAbsent:[debugBlock value:(object at:#ObjectNameTitle)]. ] ifFalse:[ - object := data objectArray detect:[:el|(el at:#ObjectNameTitleIndex) == objectIndex] ifNone:[debugBlock value:(object at:#ObjectNameTitle)]. + object := data objectArray detect:[:el|(el at:#ObjectNameTitleIndex) == objectIndex] ifNone:[debugBlock value:(object at:#ObjectNameTitle)]. ]. counter := (object at:#Counters) detect:[:aCounter|(aCounter at:#CounterNameTitleIndex) == counterIndex] ifNone:[debugBlock value:(object at:#ObjectNameTitle)]. @@ -12729,28 +12749,28 @@ numInstances := object at:#NumInstances. numInstances > 0 ifTrue:[ - 1 to:numInstances do:[:idx| - |value instanceName| - - value := (counter at:#CounterValueArray) at:idx. - instanceName := ((object at:#Instances) at:idx) at:#Name. - - values at:instanceName put:value. - ]. + 1 to:numInstances do:[:idx| + |value instanceName| + + value := (counter at:#CounterValueArray) at:idx. + instanceName := ((object at:#Instances) at:idx) at:#Name. + + values at:instanceName put:value. + ]. ] ifFalse:[ - values at:'<>' put:(counter at:#CounterValueArray) first. + values at:'<>' put:(counter at:#CounterValueArray) first. ]. boolean ifTrue:[ - |return| - - return := IdentityDictionary new. - return at:#time put:data perfTime. - return at:#frequence put:data perfFreq. - return at:#time100nSec put:data perfTime100nSec. - return at:#values put:values. - - ^ return + |return| + + return := IdentityDictionary new. + return at:#time put:data perfTime. + return at:#frequence put:data perfFreq. + return at:#time100nSec put:data perfTime100nSec. + return at:#values put:values. + + ^ return ]. ^ values @@ -12761,7 +12781,7 @@ current TheOneAndOnlyInstance isNil ifTrue:[ - TheOneAndOnlyInstance := self new. + TheOneAndOnlyInstance := self new. ]. ^ TheOneAndOnlyInstance @@ -12783,7 +12803,7 @@ ^ self getValuesByCounter:218 timed:true " - self current diskBytes + self current diskBytes " ! @@ -12791,7 +12811,7 @@ ^ self getBasicValuesByCounter:218 timed:true " - self current diskBytesBasic + self current diskBytesBasic " ! @@ -12799,7 +12819,7 @@ ^ self getPerSecondViaPerformBlock:[self diskBytes] " - self current diskBytesPerSecond + self current diskBytesPerSecond " ! @@ -12807,7 +12827,7 @@ ^ self getPerSecondFromLast:#diskBytesBasic " - self current diskBytesPerSecondFromLast + self current diskBytesPerSecondFromLast " ! @@ -12815,7 +12835,7 @@ ^ self getValuesByCounter:198 " - self current diskQueueLength + self current diskQueueLength " ! @@ -12823,7 +12843,7 @@ ^ self getValuesByCounter:214 timed:true " - self current diskRead + self current diskRead " ! @@ -12831,7 +12851,7 @@ ^ self getBasicValuesByCounter:214 timed:true " - self current diskReadBasic + self current diskReadBasic " ! @@ -12839,7 +12859,7 @@ ^ self getPerSecondViaPerformBlock:[self diskRead] " - self current diskReadsPerSecond + self current diskReadsPerSecond " ! @@ -12847,7 +12867,7 @@ ^ self getPerSecondFromLast:#diskReadBasic " - self current diskReadsPerSecondFromLast + self current diskReadsPerSecondFromLast " ! @@ -12855,7 +12875,7 @@ ^ self getValuesByCounter:408 " - self current diskSpaceFreeInMegaByte + self current diskSpaceFreeInMegaByte " ! @@ -12863,7 +12883,7 @@ ^ self getValuesByCounter:212 timed:true " - self current diskTransfers + self current diskTransfers " ! @@ -12871,7 +12891,7 @@ ^ self getBasicValuesByCounter:212 timed:true " - self current diskTransfersBasic + self current diskTransfersBasic " ! @@ -12879,7 +12899,7 @@ ^ self getPerSecondViaPerformBlock:[self diskTransfers] " - self current diskTransfersPerSecond + self current diskTransfersPerSecond " ! @@ -12887,7 +12907,7 @@ ^ self getPerSecondFromLast:#diskTransfersBasic " - self current diskTransfersPerSecondFromlast + self current diskTransfersPerSecondFromlast " ! @@ -12895,7 +12915,7 @@ ^ self getValuesByCounter:216 timed:true " - self current diskWrite + self current diskWrite " ! @@ -12903,7 +12923,7 @@ ^ self getBasicValuesByCounter:216 timed:true " - self current diskWriteBasic + self current diskWriteBasic " ! @@ -12911,7 +12931,7 @@ ^ self getPerSecondViaPerformBlock:[self diskWrite] " - self current diskWritesPerSecond + self current diskWritesPerSecond " ! @@ -12919,7 +12939,7 @@ ^ self getPerSecondFromLast:#diskWriteBasic " - self current diskWritesPerSecondFromLast + self current diskWritesPerSecondFromLast " ! ! @@ -12928,7 +12948,7 @@ current TheOneAndOnlyInstance isNil ifTrue:[ - TheOneAndOnlyInstance := self new. + TheOneAndOnlyInstance := self new. ]. ^ TheOneAndOnlyInstance @@ -12957,12 +12977,12 @@ indexNameArray := OrderedCollection new. data objectArray do:[:anObject| - |index name| - - index := anObject at:#ObjectNameTitleIndex. - name := Win32OperatingSystem::PerformanceData counterIndexTextDictionary at:index. - - indexNameArray add:(Array with:name with:index). + |index name| + + index := anObject at:#ObjectNameTitleIndex. + name := Win32OperatingSystem::PerformanceData counterIndexTextDictionary at:index. + + indexNameArray add:(Array with:name with:index). ]. ^ indexNameArray @@ -12973,7 +12993,7 @@ current TheOneAndOnlyInstance isNil ifTrue:[ - TheOneAndOnlyInstance := self new. + TheOneAndOnlyInstance := self new. ]. ^ TheOneAndOnlyInstance @@ -12995,7 +13015,7 @@ ^ self getValuesByCounter:1380 " - self current availableKBytes + self current availableKBytes " ! @@ -13003,7 +13023,7 @@ ^ self getValuesByCounter:1382 " - self current availableMBytes + self current availableMBytes " ! ! @@ -13012,7 +13032,7 @@ current TheOneAndOnlyInstance isNil ifTrue:[ - TheOneAndOnlyInstance := self new. + TheOneAndOnlyInstance := self new. ]. ^ TheOneAndOnlyInstance @@ -13038,7 +13058,7 @@ ^ self getValuesByCounter:264 timed:true " - self current bytesReceived + self current bytesReceived " ! @@ -13046,7 +13066,7 @@ ^ self getBasicValuesByCounter:264 timed:true " - self current bytesReceivedBasic + self current bytesReceivedBasic " ! @@ -13054,7 +13074,7 @@ ^ self getPerSecondViaPerformBlock:[self bytesReceived] " - self current bytesReceivedPerSecond + self current bytesReceivedPerSecond " ! @@ -13062,7 +13082,7 @@ ^ self getPerSecondFromLast:#bytesReceivedBasic " - self current bytesReceivedPerSecondFromlast + self current bytesReceivedPerSecondFromlast " ! @@ -13070,7 +13090,7 @@ ^ self getValuesByCounter:506 timed:true " - self current bytesSent + self current bytesSent " ! @@ -13078,7 +13098,7 @@ ^ self getBasicValuesByCounter:506 timed:true " - self current bytesSentBasic + self current bytesSentBasic " ! @@ -13086,7 +13106,7 @@ ^ self getPerSecondViaPerformBlock:[self bytesSent] " - self current bytesSentPerSecond + self current bytesSentPerSecond " ! @@ -13094,7 +13114,7 @@ ^ self getPerSecondFromLast:#bytesSentBasic " - self current bytesSentPerSecondFromlast + self current bytesSentPerSecondFromlast " ! @@ -13104,13 +13124,13 @@ modifiedDictionary := Dictionary new. (self getPerSecondViaPerformBlock:[self bytesReceived]) keysAndValuesDo:[:key :value| - modifiedDictionary at:key put:(value / 1024). + modifiedDictionary at:key put:(value / 1024). ]. ^ modifiedDictionary " - self current kBytesReceivedPerSecond + self current kBytesReceivedPerSecond " ! @@ -13123,13 +13143,13 @@ modifiedDictionary := Dictionary new. return keysAndValuesDo:[:key :value| - modifiedDictionary at:key put:(value / 1024). + modifiedDictionary at:key put:(value / 1024). ]. ^ modifiedDictionary " - self current kBytesReceivedPerSecondFromLast + self current kBytesReceivedPerSecondFromLast " ! @@ -13139,13 +13159,13 @@ modifiedDictionary := Dictionary new. (self getPerSecondViaPerformBlock:[self bytesSent]) keysAndValuesDo:[:key :value| - modifiedDictionary at:key put:(value / 1024). + modifiedDictionary at:key put:(value / 1024). ]. ^ modifiedDictionary " - self current kBytesSentPerSecond + self current kBytesSentPerSecond " ! @@ -13158,13 +13178,13 @@ modifiedDictionary := Dictionary new. return keysAndValuesDo:[:key :value| - modifiedDictionary at:key put:(value / 1024). + modifiedDictionary at:key put:(value / 1024). ]. ^ modifiedDictionary " - self current kBytesSentPerSecondFromLast + self current kBytesSentPerSecondFromLast " ! ! @@ -13173,7 +13193,7 @@ current TheOneAndOnlyInstance isNil ifTrue:[ - TheOneAndOnlyInstance := self new. + TheOneAndOnlyInstance := self new. ]. ^ TheOneAndOnlyInstance @@ -13195,7 +13215,7 @@ ^ self getValuesByCounter:6 timed:true " - self current processTime + self current processTime " ! @@ -13203,7 +13223,7 @@ ^ self getBasicValuesByCounter:6 timed:true " - self current processTimeBasic + self current processTimeBasic " ! @@ -13213,13 +13233,13 @@ modifiedDictionary := Dictionary new. (self getUsageViaPerformBlock:[self processTime]) keysAndValuesDo:[:key :value| - modifiedDictionary at:key put:(100 - value). + modifiedDictionary at:key put:(100 - value). ]. ^ modifiedDictionary " - self current processUsage + self current processUsage " ! @@ -13232,13 +13252,13 @@ modifiedDictionary := Dictionary new. return keysAndValuesDo:[:key :value| - modifiedDictionary at:key put:(100 - value). + modifiedDictionary at:key put:(100 - value). ]. ^ modifiedDictionary " - self current processUsageFromLast + self current processUsageFromLast " ! @@ -13247,7 +13267,7 @@ ^ (self data objectArray first at:#Instances) collect:[:el|el at:#Name] " - self current runningProcessNameList + self current runningProcessNameList " ! @@ -13256,7 +13276,7 @@ ^ (self data objectArray first at:#NumInstances) " - self current runningProcesses + self current runningProcesses " ! ! @@ -13265,7 +13285,7 @@ current TheOneAndOnlyInstance isNil ifTrue:[ - TheOneAndOnlyInstance := self new. + TheOneAndOnlyInstance := self new. ]. ^ TheOneAndOnlyInstance @@ -13287,7 +13307,7 @@ ^ self getValuesByCounter:148 timed:true " - self current interrupts + self current interrupts " ! @@ -13295,7 +13315,7 @@ ^ self getBasicValuesByCounter:148 timed:true " - self current interruptsBasic + self current interruptsBasic " ! @@ -13303,7 +13323,7 @@ ^ self getPerSecondViaPerformBlock:[self interrupts] " - self current interruptsPerSecond + self current interruptsPerSecond " ! @@ -13311,7 +13331,7 @@ ^ self getPerSecondFromLast:#interruptsBasic " - self current interruptsPerSecondFromLast + self current interruptsPerSecondFromLast " ! @@ -13319,7 +13339,7 @@ ^ self getValuesByCounter:6 timed:true " - self current processorTime + self current processorTime " ! @@ -13327,7 +13347,7 @@ ^ self getBasicValuesByCounter:6 timed:true " - self current processorTimeBasic + self current processorTimeBasic " ! @@ -13335,7 +13355,7 @@ ^ self getUsageViaPerformBlock:[self processorTime] " - self current processorUsage + self current processorUsage " ! @@ -13343,7 +13363,7 @@ ^ self getUsageFromLast:#processorTimeBasic " - self current processorUsageFromLast + self current processorUsageFromLast " ! ! @@ -13354,10 +13374,10 @@ |defaultPriority| Error handle:[:ex | - Transcript showCR: 'PrinterInfo2 error getting defaultPriority - ', ex description. - defaultPriority := 0. + Transcript showCR: 'PrinterInfo2 error getting defaultPriority - ', ex description. + defaultPriority := 0. ] do:[ - defaultPriority := self unsignedLongAt:(60 + 1) + defaultPriority := self unsignedLongAt:(60 + 1) ]. ^ defaultPriority @@ -13369,15 +13389,15 @@ |pComment| Error handle:[:ex | - Transcript showCR: 'PrinterInfo2 error getting pComment - ', ex description. - pComment := 0. + Transcript showCR: 'PrinterInfo2 error getting pComment - ', ex description. + pComment := 0. ] do:[ - pComment := self unsignedLongAt:(20 + 1). + pComment := self unsignedLongAt:(20 + 1). ]. ^ pComment == 0 - ifTrue:'' - ifFalse:[ (ExternalBytes address:pComment) stringAt:1 ] + ifTrue:'' + ifFalse:[ (ExternalBytes address:pComment) stringAt:1 ] "Created: / 01-08-2006 / 14:02:55 / fm" "Modified: / 16-04-2007 / 13:08:39 / cg" @@ -13387,10 +13407,10 @@ |pName| Error handle:[:ex | - Transcript showCR: 'PrinterInfo2 error getting pDriverName - ', ex description. - pName := 0. + Transcript showCR: 'PrinterInfo2 error getting pDriverName - ', ex description. + pName := 0. ] do:[ - pName := self unsignedLongAt:(16 + 1). + pName := self unsignedLongAt:(16 + 1). ]. pName == 0 ifTrue:[^ '']. ^ (ExternalBytes address:pName) stringAt:1 @@ -13403,18 +13423,18 @@ |pLocation externalBytes| Error handle:[:ex | - Transcript showCR: 'PrinterInfo2 error getting pLocation - ', ex description. - pLocation := 0. + Transcript showCR: 'PrinterInfo2 error getting pLocation - ', ex description. + pLocation := 0. ] do:[ - pLocation := self unsignedLongAt:(24 + 1). + pLocation := self unsignedLongAt:(24 + 1). ]. pLocation == 0 ifTrue:[^ nil]. externalBytes := ExternalBytes address:pLocation. ^ externalBytes isEmpty - ifTrue:[ nil ] - ifFalse:[ externalBytes stringAt:1 ] + ifTrue:[ nil ] + ifFalse:[ externalBytes stringAt:1 ] "Created: / 01-08-2006 / 14:03:21 / fm" "Modified: / 18-10-2006 / 12:06:45 / User" @@ -13426,10 +13446,10 @@ |priority| Error handle:[:ex | - Transcript showCR: 'PrinterInfo2 error getting priority - ', ex description. - priority := 0. + Transcript showCR: 'PrinterInfo2 error getting priority - ', ex description. + priority := 0. ] do:[ - priority := self unsignedLongAt: 56 + 1 + priority := self unsignedLongAt: 56 + 1 ]. ^ priority @@ -13442,10 +13462,10 @@ |status| Error handle:[:ex | - Transcript showCR: 'PrinterInfo2 error getting status - ', ex description. - status := -1. + Transcript showCR: 'PrinterInfo2 error getting status - ', ex description. + status := -1. ] do:[ - status := self unsignedLongAt: 72 + 1 + status := self unsignedLongAt: 72 + 1 ]. ^ status @@ -13459,13 +13479,13 @@ "returns a collection of root keyNames" ^ #( - 'HKEY_CLASSES_ROOT' - 'HKEY_CURRENT_USER' - 'HKEY_LOCAL_MACHINE' - 'HKEY_USERS' - 'HKEY_PERFORMANCE_DATA' - 'HKEY_CURRENT_CONFIG' - 'HKEY_DYN_DATA' + 'HKEY_CLASSES_ROOT' + 'HKEY_CURRENT_USER' + 'HKEY_LOCAL_MACHINE' + 'HKEY_USERS' + 'HKEY_PERFORMANCE_DATA' + 'HKEY_CURRENT_CONFIG' + 'HKEY_DYN_DATA' ) ! @@ -13482,149 +13502,149 @@ Interface to a WIN32 registry. As this is a private class, access it via - Win32OperatingSystem registryEntry + Win32OperatingSystem registryEntry [author:] - Claus Gittinger (initial version & cleanup) + Claus Gittinger (initial version & cleanup) " ! examples " retrieve an existing entry by key: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X' - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X' + [exEnd] retrieve a non-existing entry by key: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\xxx' - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\xxx' + [exEnd] ask a keys value: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion'. - Transcript show:'Windows serial NR:'; showCR:(k valueNamed:'ProductId'). - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X'. - Transcript showCR:(k valueNamed:'CurrentVersion'). - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion'. + Transcript show:'Windows serial NR:'; showCR:(k valueNamed:'ProductId'). + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X'. + Transcript showCR:(k valueNamed:'CurrentVersion'). + [exEnd] create a sub-key (if not already present): - [exBegin] - |k subKey| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X'. - subKey := k createSubKeyNamed:'RegistryDemo' - [exEnd] + [exBegin] + |k subKey| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X'. + subKey := k createSubKeyNamed:'RegistryDemo' + [exEnd] change a keys value: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X\RegistryDemo'. - k valueNamed:'FooBarBaz' put:'a foo bar baz string'. - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X\RegistryDemo'. + k valueNamed:'FooBarBaz' put:'a foo bar baz string'. + [exEnd] delete a value: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X\RegistryDemo'. - k deleteValueNamed:'FooBarBaz'. - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X\RegistryDemo'. + k deleteValueNamed:'FooBarBaz'. + [exEnd] delete a key: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X'. - k deleteSubKeyNamed:'RegistryDemo'. - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software\eXept\Smalltalk/X'. + k deleteSubKeyNamed:'RegistryDemo'. + [exEnd] enumerate keys: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software'. - k subKeysDo:[:subKey | - Transcript showCR:subKey path - ] - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software'. + k subKeysDo:[:subKey | + Transcript showCR:subKey path + ] + [exEnd] enumerate all keys (recursive): - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software'. - k allSubKeysDo:[:subKey | - Transcript showCR:subKey path - ] - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\Software'. + k allSubKeysDo:[:subKey | + Transcript showCR:subKey path + ] + [exEnd] fetch value by index: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X'. - Transcript showCR:(k valueNameAtIndex:0) - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X'. + Transcript showCR:(k valueNameAtIndex:0) + [exEnd] enumerate value names: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X'. - k valueNamesDo:[:nm | - Transcript showCR:nm. - ] - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X'. + k valueNamesDo:[:nm | + Transcript showCR:nm. + ] + [exEnd] enumerate values: - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X'. - k valueNamesAndValuesDo:[:nm :val | - Transcript showCR:(nm , ' -> ' , val storeString). - ] - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X'. + k valueNamesAndValuesDo:[:nm :val | + Transcript showCR:(nm , ' -> ' , val storeString). + ] + [exEnd] search for a value (where does NT store the domain ?): - [exBegin] - |k| - - k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\System'. - k subKeysDo:[:subKey | - subKey subKeysDo:[:subSubKey | - |tcp params| - - (subSubKey path asLowercase endsWith:'services') ifTrue:[ - tcp := subSubKey subKeyNamed:'tcpip'. - tcp notNil ifTrue:[ - params := tcp subKeyNamed:'parameters'. - params notNil ifTrue:[ - Transcript showCR:'Domain is found in ' , params path , - ' value: ' , (params valueNamed:'Domain'). - params close. - ]. - tcp close. - ] - ] - ] - ] - [exEnd] + [exBegin] + |k| + + k := Win32OperatingSystem registryEntry key:'HKEY_LOCAL_MACHINE\System'. + k subKeysDo:[:subKey | + subKey subKeysDo:[:subSubKey | + |tcp params| + + (subSubKey path asLowercase endsWith:'services') ifTrue:[ + tcp := subSubKey subKeyNamed:'tcpip'. + tcp notNil ifTrue:[ + params := tcp subKeyNamed:'parameters'. + params notNil ifTrue:[ + Transcript showCR:'Domain is found in ' , params path , + ' value: ' , (params valueNamed:'Domain'). + params close. + ]. + tcp close. + ] + ] + ] + ] + [exEnd] " @@ -13672,31 +13692,31 @@ HKEY_CLASSES_ROOT isNil ifTrue:[self initialize]. specialKeyStringOrSymbol = #'HKEY_CLASSES_ROOT' ifTrue:[ - ^ HKEY_CLASSES_ROOT. + ^ HKEY_CLASSES_ROOT. ]. specialKeyStringOrSymbol = #'HKEY_CURRENT_USER' ifTrue:[ - ^ HKEY_CURRENT_USER. + ^ HKEY_CURRENT_USER. ]. specialKeyStringOrSymbol = #'HKEY_LOCAL_MACHINE' ifTrue:[ - ^ HKEY_LOCAL_MACHINE. + ^ HKEY_LOCAL_MACHINE. ]. specialKeyStringOrSymbol = #'HKEY_USERS' ifTrue:[ - ^ HKEY_USERS. + ^ HKEY_USERS. ]. specialKeyStringOrSymbol = #'HKEY_PERFORMANCE_DATA' ifTrue:[ - ^ HKEY_PERFORMANCE_DATA. + ^ HKEY_PERFORMANCE_DATA. ]. specialKeyStringOrSymbol = #'HKEY_CURRENT_CONFIG' ifTrue:[ - ^ HKEY_CURRENT_CONFIG. + ^ HKEY_CURRENT_CONFIG. ]. specialKeyStringOrSymbol = #'HKEY_DYN_DATA' ifTrue:[ - ^ HKEY_DYN_DATA. + ^ HKEY_DYN_DATA. ]. specialKeyStringOrSymbol = #'HKEY_PERFORMANCE_TEXT' ifTrue:[ - ^ HKEY_PERFORMANCE_TEXT. + ^ HKEY_PERFORMANCE_TEXT. ]. specialKeyStringOrSymbol = #'HKEY_PERFORMANCE_NLSTEXT' ifTrue:[ - ^ HKEY_PERFORMANCE_NLSTEXT. + ^ HKEY_PERFORMANCE_NLSTEXT. ]. ^ nil @@ -13709,7 +13729,7 @@ "handle image restarts and refetch registry handles" (something == #returnFromSnapshot) ifTrue:[ - self initialize + self initialize ] "Created: 15.6.1996 / 15:14:03 / cg" @@ -13722,9 +13742,9 @@ |h newEntry| aHandleValue isInteger ifTrue:[ - h := ExternalAddress newAddress:aHandleValue + h := ExternalAddress newAddress:aHandleValue ] ifFalse:[ - h := aHandleValue + h := aHandleValue ]. "/ rootKeys are not registered for RegClose ... @@ -13762,11 +13782,11 @@ idx := aKeyNamePath indexOf:(self separator). idx == 0 ifTrue:[ - first := aKeyNamePath. - rest := nil. + first := aKeyNamePath. + rest := nil. ] ifFalse:[ - first := aKeyNamePath copyTo:idx-1. - rest := aKeyNamePath copyFrom:idx+1 + first := aKeyNamePath copyTo:idx-1. + rest := aKeyNamePath copyFrom:idx+1 ]. first := first asUppercase. @@ -13774,17 +13794,17 @@ "/ the first is a pseudo name root := self rootKey:first. root isNil ifTrue:[ - ^ nil + ^ nil ]. rest size == 0 ifTrue:[ - ^ root + ^ root ]. Error handle:[:ex | - ^ nil + ^ nil ] do:[ - ^ root subKeyNamed:rest createIfAbsent:createIfAbsent. + ^ root subKeyNamed:rest createIfAbsent:createIfAbsent. ]. " @@ -13921,7 +13941,7 @@ k := self key:'HKEY_CLASSES_ROOT\MIME\Database\Content Type\',mimeType. k notNil ifTrue:[ - suffix := k valueNamed:'extension'. + suffix := k valueNamed:'extension'. ]. ^ suffix ! @@ -13935,35 +13955,35 @@ suffix isNil ifTrue:[^ nil]. (suffix startsWith:'.') ifTrue:[ - suffix := suffix copyFrom:2 + suffix := suffix copyFrom:2 ]. k := self key:'HKEY_CLASSES_ROOT\.',suffix. k notNil ifTrue:[ - fkey := (k valueNamed:''). + fkey := (k valueNamed:''). ]. fkey isNil ifTrue:[ - fkey := suffix,'_auto_file' + fkey := suffix,'_auto_file' ]. fkey notEmptyOrNil ifTrue:[ - redirect := nil. - - k := Win32OperatingSystem::RegistryEntry key:('HKEY_CLASSES_ROOT\' , fkey , '\CurVer'). - k notNil ifTrue:[ - redirect := k defaultValue - ]. - - redirect isNil ifTrue:[ - k := Win32OperatingSystem::RegistryEntry key:('HKEY_CLASSES_ROOT\' , (fkey) , '\shell\',operation,'\command'). - ] ifFalse:[ - k := Win32OperatingSystem::RegistryEntry key:('HKEY_CLASSES_ROOT\' , (redirect) , '\shell\',operation,'\command'). - ]. - - k notNil ifTrue:[ - cmd := k defaultValue - ]. + redirect := nil. + + k := Win32OperatingSystem::RegistryEntry key:('HKEY_CLASSES_ROOT\' , fkey , '\CurVer'). + k notNil ifTrue:[ + redirect := k defaultValue + ]. + + redirect isNil ifTrue:[ + k := Win32OperatingSystem::RegistryEntry key:('HKEY_CLASSES_ROOT\' , (fkey) , '\shell\',operation,'\command'). + ] ifFalse:[ + k := Win32OperatingSystem::RegistryEntry key:('HKEY_CLASSES_ROOT\' , (redirect) , '\shell\',operation,'\command'). + ]. + + k notNil ifTrue:[ + cmd := k defaultValue + ]. ]. @@ -13988,8 +14008,8 @@ " self - stringValueFor:'Content Type' - atKey:'HKEY_CLASSES_ROOT\.au' + stringValueFor:'Content Type' + atKey:'HKEY_CLASSES_ROOT\.au' " ! ! @@ -14031,26 +14051,26 @@ if (__isExternalAddressLike(__INST(handle)) && __isStringLike(subKeyString)) { - myKey = (HKEY)__externalAddressVal(__INST(handle)); - if ((_retVal = RegCreateKey(myKey, __stringVal(subKeyString), &subKey)) == ERROR_SUCCESS) { - subHandle = __MKEXTERNALADDRESS(subKey); - } else { - if ((_retVal != ERROR_PATH_NOT_FOUND) - && (_retVal != ERROR_FILE_NOT_FOUND)) { - errorNumber = __MKSMALLINT(_retVal); - } - } + myKey = (HKEY)__externalAddressVal(__INST(handle)); + if ((_retVal = RegCreateKey(myKey, __stringVal(subKeyString), &subKey)) == ERROR_SUCCESS) { + subHandle = __MKEXTERNALADDRESS(subKey); + } else { + if ((_retVal != ERROR_PATH_NOT_FOUND) + && (_retVal != ERROR_FILE_NOT_FOUND)) { + errorNumber = __MKSMALLINT(_retVal); + } + } } %}. subHandle notNil ifTrue:[ - newEntry := self class basicNew - setHandle:subHandle - path:(path , self class separator asString , subKeyString). - newEntry registerForFinalization. - ^ newEntry. + newEntry := self class basicNew + setHandle:subHandle + path:(path , self class separator asString , subKeyString). + newEntry registerForFinalization. + ^ newEntry. ]. errorNumber notNil ifTrue:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError. + (OperatingSystem errorHolderForNumber:errorNumber) reportError. ]. ^ nil @@ -14074,18 +14094,18 @@ if (__isExternalAddressLike(__INST(handle)) && __isStringLike(subKeyString)) { - myKey = (HKEY)__externalAddressVal(__INST(handle)); - if ((_retVal = RegDeleteKey(myKey, __stringVal(subKeyString))) == ERROR_SUCCESS) { - RETURN (true); - } - if ((_retVal != ERROR_PATH_NOT_FOUND) - && (_retVal != ERROR_FILE_NOT_FOUND)) { - errorNumber = __MKSMALLINT(_retVal); - } + myKey = (HKEY)__externalAddressVal(__INST(handle)); + if ((_retVal = RegDeleteKey(myKey, __stringVal(subKeyString))) == ERROR_SUCCESS) { + RETURN (true); + } + if ((_retVal != ERROR_PATH_NOT_FOUND) + && (_retVal != ERROR_FILE_NOT_FOUND)) { + errorNumber = __MKSMALLINT(_retVal); + } } %}. errorNumber notNil ifTrue:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError. + (OperatingSystem errorHolderForNumber:errorNumber) reportError. ]. ^ false @@ -14109,24 +14129,24 @@ int _retVal; if (__isExternalAddressLike(__INST(handle)) && __isStringLike(hostName)) { - myKey = (HKEY)__externalAddressVal(__INST(handle)); - if ((_retVal = RegConnectRegistryA(__stringVal(hostName), myKey, &remoteKey)) == ERROR_SUCCESS) { - remoteHandle = __MKEXTERNALADDRESS(remoteKey); - } else { - if ((_retVal != ERROR_PATH_NOT_FOUND) - && (_retVal != ERROR_FILE_NOT_FOUND)) { - errorNumber = __MKSMALLINT(_retVal); - } - } + myKey = (HKEY)__externalAddressVal(__INST(handle)); + if ((_retVal = RegConnectRegistryA(__stringVal(hostName), myKey, &remoteKey)) == ERROR_SUCCESS) { + remoteHandle = __MKEXTERNALADDRESS(remoteKey); + } else { + if ((_retVal != ERROR_PATH_NOT_FOUND) + && (_retVal != ERROR_FILE_NOT_FOUND)) { + errorNumber = __MKSMALLINT(_retVal); + } + } } %}. remoteHandle notNil ifTrue:[ - newEntry := self class basicNew setHandle:remoteHandle path:path. - newEntry registerForFinalization. - ^ newEntry. + newEntry := self class basicNew setHandle:remoteHandle path:path. + newEntry registerForFinalization. + ^ newEntry. ]. errorNumber notNil ifTrue:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError. + (OperatingSystem errorHolderForNumber:errorNumber) reportError. ]. ^ nil @@ -14173,30 +14193,30 @@ if (__isExternalAddressLike(__INST(handle)) && __isSmallInteger(subKeyIndex)) { - myKey = (HKEY)__externalAddressVal(__INST(handle)); - if ((_retVal = RegEnumKeyExA(myKey, __intVal(subKeyIndex), - nameBuffer, &nameSize, - NULL, - classNameBuffer, &classNameSize, - &modificationTime)) == ERROR_SUCCESS) { - nameBuffer[nameSize] = '\0'; - classNameBuffer[classNameSize] = '\0'; - subKeyName = __MKSTRING(nameBuffer); - subKeyClassName = __MKSTRING(classNameBuffer); - } else { - if ((_retVal != ERROR_PATH_NOT_FOUND) - && (_retVal != ERROR_FILE_NOT_FOUND) - && (_retVal != ERROR_NO_MORE_ITEMS)) { - errorNumber = __MKSMALLINT(_retVal); - } - } + myKey = (HKEY)__externalAddressVal(__INST(handle)); + if ((_retVal = RegEnumKeyExA(myKey, __intVal(subKeyIndex), + nameBuffer, &nameSize, + NULL, + classNameBuffer, &classNameSize, + &modificationTime)) == ERROR_SUCCESS) { + nameBuffer[nameSize] = '\0'; + classNameBuffer[classNameSize] = '\0'; + subKeyName = __MKSTRING(nameBuffer); + subKeyClassName = __MKSTRING(classNameBuffer); + } else { + if ((_retVal != ERROR_PATH_NOT_FOUND) + && (_retVal != ERROR_FILE_NOT_FOUND) + && (_retVal != ERROR_NO_MORE_ITEMS)) { + errorNumber = __MKSMALLINT(_retVal); + } + } } %}. subKeyName notNil ifTrue:[ - ^ self subKeyNamed:subKeyName. + ^ self subKeyNamed:subKeyName. ]. errorNumber notNil ifTrue:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError. + (OperatingSystem errorHolderForNumber:errorNumber) reportError. ]. ^ nil @@ -14220,28 +14240,28 @@ if (__isExternalAddressLike(__INST(handle)) && __isStringLike(subKeyString)) { - myKey = (HKEY)__externalAddressVal(__INST(handle)); - _retVal = RegOpenKey(myKey, __stringVal(subKeyString), &subKey); - if (_retVal == ERROR_SUCCESS) { - subHandle = __MKEXTERNALADDRESS(subKey); - } else { - if ((_retVal != ERROR_PATH_NOT_FOUND) - && (_retVal != ERROR_FILE_NOT_FOUND)) { - errorNumber = __MKSMALLINT(_retVal); - } - } + myKey = (HKEY)__externalAddressVal(__INST(handle)); + _retVal = RegOpenKey(myKey, __stringVal(subKeyString), &subKey); + if (_retVal == ERROR_SUCCESS) { + subHandle = __MKEXTERNALADDRESS(subKey); + } else { + if ((_retVal != ERROR_PATH_NOT_FOUND) + && (_retVal != ERROR_FILE_NOT_FOUND)) { + errorNumber = __MKSMALLINT(_retVal); + } + } } %}. subHandle notNil ifTrue:[ - newEntry := self class basicNew - setHandle:subHandle - path:((path ? '?') , self class separator asString , subKeyString). - - newEntry registerForFinalization. - ^ newEntry. + newEntry := self class basicNew + setHandle:subHandle + path:((path ? '?') , self class separator asString , subKeyString). + + newEntry registerForFinalization. + ^ newEntry. ]. errorNumber notNil ifTrue:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError. + (OperatingSystem errorHolderForNumber:errorNumber) reportError. ]. ^ nil @@ -14261,9 +14281,9 @@ |k| (k := self subKeyNamed:subKeyString) isNil ifTrue:[ - createIfAbsent ifTrue:[ - ^ self createSubKeyNamed:subKeyString - ]. + createIfAbsent ifTrue:[ + ^ self createSubKeyNamed:subKeyString + ]. ]. ^ k @@ -14282,11 +14302,11 @@ defaultValue:datum "store a value; the value type depends upon the stored value: - ByteArray -> REG_BINARY - String -> REG_SZ - Array of string -> REG_MULTI_SZ - Integer -> REG_DWORD - nil -> REG_NONE + ByteArray -> REG_BINARY + String -> REG_SZ + Array of string -> REG_MULTI_SZ + Integer -> REG_DWORD + nil -> REG_NONE " ^ self valueNamed:'' put:datum @@ -14308,18 +14328,18 @@ if (__isExternalAddressLike(__INST(handle)) && __isStringLike(aValueName)) { - myKey = (HKEY)__externalAddressVal(__INST(handle)); - if ((_retVal = RegDeleteValue(myKey, __stringVal(aValueName))) == ERROR_SUCCESS) { - RETURN (true); - } - if ((_retVal != ERROR_PATH_NOT_FOUND) - && (_retVal != ERROR_FILE_NOT_FOUND)) { - errorNumber = __MKSMALLINT(_retVal); - } + myKey = (HKEY)__externalAddressVal(__INST(handle)); + if ((_retVal = RegDeleteValue(myKey, __stringVal(aValueName))) == ERROR_SUCCESS) { + RETURN (true); + } + if ((_retVal != ERROR_PATH_NOT_FOUND) + && (_retVal != ERROR_FILE_NOT_FOUND)) { + errorNumber = __MKSMALLINT(_retVal); + } } %}. errorNumber notNil ifTrue:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError. + (OperatingSystem errorHolderForNumber:errorNumber) reportError. ]. ^ false ! @@ -14339,24 +14359,24 @@ if (__isExternalAddressLike(__INST(handle)) && __isSmallInteger(valueIndex)) { - myKey = (HKEY)__externalAddressVal(__INST(handle)); - if ((_retVal = RegEnumValueA(myKey, __intVal(valueIndex), - nameBuffer, &nameSize, - NULL, - &valueType, - NULL, NULL)) == ERROR_SUCCESS) { - nameBuffer[nameSize] = '\0'; - valueName = __MKSTRING(nameBuffer); - } else { - if ((_retVal != ERROR_PATH_NOT_FOUND) - && (_retVal != ERROR_FILE_NOT_FOUND)) { - errorNumber = __MKSMALLINT(_retVal); - } - } + myKey = (HKEY)__externalAddressVal(__INST(handle)); + if ((_retVal = RegEnumValueA(myKey, __intVal(valueIndex), + nameBuffer, &nameSize, + NULL, + &valueType, + NULL, NULL)) == ERROR_SUCCESS) { + nameBuffer[nameSize] = '\0'; + valueName = __MKSTRING(nameBuffer); + } else { + if ((_retVal != ERROR_PATH_NOT_FOUND) + && (_retVal != ERROR_FILE_NOT_FOUND)) { + errorNumber = __MKSMALLINT(_retVal); + } + } } %}. errorNumber notNil ifTrue:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError. + (OperatingSystem errorHolderForNumber:errorNumber) reportError. ]. ^ valueName @@ -14370,11 +14390,11 @@ valueNamed:aValueName "retrieve a value; the returned object depends upon the type: - REG_BINARY -> ByteArray - REG_SZ -> String - REG_MULTI_SZ -> Array of strings - REG_DWORD -> Integer - REG_NONE -> nil + REG_BINARY -> ByteArray + REG_SZ -> String + REG_MULTI_SZ -> Array of strings + REG_DWORD -> Integer + REG_NONE -> nil " |stringArray retVal errorNumber| @@ -14383,9 +14403,9 @@ HKEY myKey; DWORD valueType; union { - DWORD dWord; - unsigned char dWordBytes[4]; - unsigned char smallDataBuffer[1024*128]; + DWORD dWord; + unsigned char dWordBytes[4]; + unsigned char smallDataBuffer[1024*128]; } quickData; int val; DWORD dataSize = sizeof(quickData); @@ -14401,166 +14421,166 @@ if (__isExternalAddressLike(__INST(handle)) && __isStringLike(aValueName)) { - int ret; - - myKey = (HKEY)__externalAddressVal(__INST(handle)); - - /* - * try to get it with one call ... - */ - ret = RegQueryValueEx(myKey, __stringVal(aValueName), - NULL, - &valueType, - (char *)&quickData, - &dataSize); + int ret; + + myKey = (HKEY)__externalAddressVal(__INST(handle)); + + /* + * try to get it with one call ... + */ + ret = RegQueryValueEx(myKey, __stringVal(aValueName), + NULL, + &valueType, + (char *)&quickData, + &dataSize); #if 0 - console_printf("dataSize=%d\n", dataSize); -#endif - while (ret == ERROR_MORE_DATA) { + console_printf("dataSize=%d\n", dataSize); +#endif + while (ret == ERROR_MORE_DATA) { #if 0 - console_printf("ERROR_MORE_DATA dataSize=%d\n", dataSize); - console_printf("valueType=%d\n", valueType); -#endif - /* - * nope - need another one ... - */ - if (myKey = HKEY_PERFORMANCE_DATA) { - dataSize = dataSize * 2; - } - switch (valueType) { - case REG_BINARY: - case REG_MULTI_SZ: - dataBuffer = malloc(dataSize);; - break; - case REG_SZ: - dataBuffer = malloc(dataSize); - break; - default: - console_printf("RegistryEntry [warning]: unhandled valueType: %d\n", valueType); - break; - } - if (dataBuffer) { - ret = RegQueryValueEx(myKey, __stringVal(aValueName), - NULL, - &valueType, - dataBuffer, - &dataSize); - } else { - break; - } - if (myKey != HKEY_PERFORMANCE_DATA) { - if (ret != ERROR_SUCCESS) break; - } - } - - if (ret == ERROR_SUCCESS) { + console_printf("ERROR_MORE_DATA dataSize=%d\n", dataSize); + console_printf("valueType=%d\n", valueType); +#endif + /* + * nope - need another one ... + */ + if (myKey = HKEY_PERFORMANCE_DATA) { + dataSize = dataSize * 2; + } + switch (valueType) { + case REG_BINARY: + case REG_MULTI_SZ: + dataBuffer = malloc(dataSize);; + break; + case REG_SZ: + dataBuffer = malloc(dataSize); + break; + default: + console_printf("RegistryEntry [warning]: unhandled valueType: %d\n", valueType); + break; + } + if (dataBuffer) { + ret = RegQueryValueEx(myKey, __stringVal(aValueName), + NULL, + &valueType, + dataBuffer, + &dataSize); + } else { + break; + } + if (myKey != HKEY_PERFORMANCE_DATA) { + if (ret != ERROR_SUCCESS) break; + } + } + + if (ret == ERROR_SUCCESS) { #if 0 - console_printf("ERROR_SUCCESS dataSize=%d\n", dataSize); - console_printf("valueType=%d\n", valueType); -#endif - switch (valueType) { - case REG_NONE: - /* RETURN (@symbol(none)); */ - retVal = nil; - break; - - case REG_BINARY: - retVal = __MKBYTEARRAY(dataBuffer ? dataBuffer : quickData.smallDataBuffer, dataSize); - break; - - case REG_SZ: - case REG_EXPAND_SZ: + console_printf("ERROR_SUCCESS dataSize=%d\n", dataSize); + console_printf("valueType=%d\n", valueType); +#endif + switch (valueType) { + case REG_NONE: + /* RETURN (@symbol(none)); */ + retVal = nil; + break; + + case REG_BINARY: + retVal = __MKBYTEARRAY(dataBuffer ? dataBuffer : quickData.smallDataBuffer, dataSize); + break; + + case REG_SZ: + case REG_EXPAND_SZ: #ifdef USE_UNICODE - retVal = __MKU16STRING(dataBuffer ? dataBuffer : quickData.smallDataBuffer); -#else - retVal = __MKSTRING(dataBuffer ? dataBuffer : quickData.smallDataBuffer); -#endif - break; + retVal = __MKU16STRING(dataBuffer ? dataBuffer : quickData.smallDataBuffer); +#else + retVal = __MKSTRING(dataBuffer ? dataBuffer : quickData.smallDataBuffer); +#endif + break; #if 0 - case REG_DWORD: - /* int in native format */ - retVal = __MKUINT(quickData.dWord); - break; -#endif - case REG_DWORD_LITTLE_ENDIAN: - val = quickData.dWordBytes[3]; - val = (val << 8) | quickData.dWordBytes[2]; - val = (val << 8) | quickData.dWordBytes[1]; - val = (val << 8) | quickData.dWordBytes[0]; - retVal = __MKUINT(val); - break; - - case REG_DWORD_BIG_ENDIAN: - val = quickData.dWordBytes[0]; - val = (val << 8) | quickData.dWordBytes[1]; - val = (val << 8) | quickData.dWordBytes[2]; - val = (val << 8) | quickData.dWordBytes[3]; - retVal = __MKUINT(val); - break; - - case REG_MULTI_SZ: - { - CHAR *cp, *cp0; - int ns, i; - - cp0 = dataBuffer ? dataBuffer : quickData.smallDataBuffer; + case REG_DWORD: + /* int in native format */ + retVal = __MKUINT(quickData.dWord); + break; +#endif + case REG_DWORD_LITTLE_ENDIAN: + val = quickData.dWordBytes[3]; + val = (val << 8) | quickData.dWordBytes[2]; + val = (val << 8) | quickData.dWordBytes[1]; + val = (val << 8) | quickData.dWordBytes[0]; + retVal = __MKUINT(val); + break; + + case REG_DWORD_BIG_ENDIAN: + val = quickData.dWordBytes[0]; + val = (val << 8) | quickData.dWordBytes[1]; + val = (val << 8) | quickData.dWordBytes[2]; + val = (val << 8) | quickData.dWordBytes[3]; + retVal = __MKUINT(val); + break; + + case REG_MULTI_SZ: + { + CHAR *cp, *cp0; + int ns, i; + + cp0 = dataBuffer ? dataBuffer : quickData.smallDataBuffer; #if 0 - console_printf("**************\n"); - for (i=0;i<50;i++) { - console_printf("%x ", cp0[i]); - } - console_printf("\n"); - for (i=0;i<50;i++) { - if (cp0[i] == 0) - console_printf("\n"); - else - console_printf("%c", cp0[i]); - } - console_printf("\n"); - console_printf("**************\n"); -#endif - cp = cp0; - ns = 0; - while (*cp) { - while (*cp++) ;; - ns++; - } - stringArray = __ARRAY_NEW_INT(ns); - - i = 0; - while (*cp0) { - OBJ s; - CHAR *cp; - - cp = cp0; - while (*cp++) ;; + console_printf("**************\n"); + for (i=0;i<50;i++) { + console_printf("%x ", cp0[i]); + } + console_printf("\n"); + for (i=0;i<50;i++) { + if (cp0[i] == 0) + console_printf("\n"); + else + console_printf("%c", cp0[i]); + } + console_printf("\n"); + console_printf("**************\n"); +#endif + cp = cp0; + ns = 0; + while (*cp) { + while (*cp++) ;; + ns++; + } + stringArray = __ARRAY_NEW_INT(ns); + + i = 0; + while (*cp0) { + OBJ s; + CHAR *cp; + + cp = cp0; + while (*cp++) ;; #ifdef USE_UNICODE - s = __MKU16STRING(cp0); __ArrayInstPtr(stringArray)->a_element[i] = s; __STORE(stringArray, s); -#else - s = __MKSTRING(cp0); __ArrayInstPtr(stringArray)->a_element[i] = s; __STORE(stringArray, s); -#endif - cp0 = cp; - i++; - } - retVal = stringArray; - break; - } - default: - console_printf("RegistryEntry [warning]: unhandled valueType: %d\n", valueType); - break; - } - } else { - if ((ret != ERROR_PATH_NOT_FOUND) - && (ret != ERROR_FILE_NOT_FOUND)) { - errorNumber = __MKSMALLINT(ret); - } - } + s = __MKU16STRING(cp0); __ArrayInstPtr(stringArray)->a_element[i] = s; __STORE(stringArray, s); +#else + s = __MKSTRING(cp0); __ArrayInstPtr(stringArray)->a_element[i] = s; __STORE(stringArray, s); +#endif + cp0 = cp; + i++; + } + retVal = stringArray; + break; + } + default: + console_printf("RegistryEntry [warning]: unhandled valueType: %d\n", valueType); + break; + } + } else { + if ((ret != ERROR_PATH_NOT_FOUND) + && (ret != ERROR_FILE_NOT_FOUND)) { + errorNumber = __MKSMALLINT(ret); + } + } } if (dataBuffer) free(dataBuffer); %}. errorNumber notNil ifTrue:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError. + (OperatingSystem errorHolderForNumber:errorNumber) reportError. ]. ^ retVal @@ -14575,11 +14595,11 @@ valueNamed:aValueName put:datum "store a value; the value type depends upon the stored value: - ByteArray -> REG_BINARY - String -> REG_SZ - Array of string -> REG_MULTI_SZ - Integer -> REG_DWORD - nil -> REG_NONE + ByteArray -> REG_BINARY + String -> REG_SZ + Array of string -> REG_MULTI_SZ + Integer -> REG_DWORD + nil -> REG_NONE " |data stringArray errorNumber| @@ -14593,99 +14613,99 @@ if (__isExternalAddressLike(__INST(handle)) && __isStringLike(aValueName)) { - int ret; - OBJ cls; - - myKey = (HKEY)__externalAddressVal(__INST(handle)); - - if (datum == nil) { - valueType = REG_NONE; - dataSize = 0; - } else if (__isSmallInteger(datum)) { - valueType = REG_DWORD; - val = __intVal(datum); - dataPointer = (unsigned char *)(&val); - dataSize = sizeof(val); - } else if (__isStringLike(datum)) { - valueType = REG_SZ; - dataPointer = __stringVal(datum); - dataSize = __stringSize(datum) + 1; - } else if (__Class(datum) == ByteArray) { - valueType = REG_BINARY; - dataPointer = __ByteArrayInstPtr(datum)->ba_element; - dataSize = __byteArraySize(datum); - } else if (__Class(datum) == LargeInteger) { - valueType = REG_DWORD; - val = __longIntVal(datum); - if (val) { - dataPointer = (unsigned char *)(&val); - dataSize = sizeof(val); - } else { - datumOk = 0; - } - } else if (__Class(datum) == Array) { - int i = 0, ns = 0, totalSize = 0; - - valueType = REG_MULTI_SZ; - - /* - * must allocate a local buffer - * find size ... - */ - for (i=0; i<__arraySize(datum); i++) { - OBJ s = __ArrayInstPtr(datum)->a_element[i]; - - if (__isStringLike(s)) { - totalSize += __stringSize(s) + 1; - } else { - datumOk = 0; - break; - } - ns++; - } - if (datumOk) { - char *cp; - - /* - * allocate and fill... - */ - totalSize ++; - dataPointer = (char *)(malloc(totalSize)); - mustFreeData = 1; - cp = dataPointer; - for (i=0; i<__arraySize(datum); i++) { - OBJ s = __ArrayInstPtr(datum)->a_element[i]; - - strcpy(cp, __stringVal(s)); - cp += __stringSize(s); - *cp++ = '\0'; - } - *cp++ = '\0'; - dataSize = totalSize; - } - } else { - datumOk = 0; - } - - if (datumOk) { - ret = RegSetValueExA(myKey, __stringVal(aValueName), - 0, valueType, - dataPointer, dataSize); - if (mustFreeData) { - free(dataPointer); - } - if (ret == ERROR_SUCCESS) { - RETURN (true); - } - if ((ret != ERROR_PATH_NOT_FOUND) - && (ret != ERROR_FILE_NOT_FOUND)) { - errorNumber = __MKSMALLINT(ret); - } - } + int ret; + OBJ cls; + + myKey = (HKEY)__externalAddressVal(__INST(handle)); + + if (datum == nil) { + valueType = REG_NONE; + dataSize = 0; + } else if (__isSmallInteger(datum)) { + valueType = REG_DWORD; + val = __intVal(datum); + dataPointer = (unsigned char *)(&val); + dataSize = sizeof(val); + } else if (__isStringLike(datum)) { + valueType = REG_SZ; + dataPointer = __stringVal(datum); + dataSize = __stringSize(datum) + 1; + } else if (__Class(datum) == ByteArray) { + valueType = REG_BINARY; + dataPointer = __ByteArrayInstPtr(datum)->ba_element; + dataSize = __byteArraySize(datum); + } else if (__Class(datum) == LargeInteger) { + valueType = REG_DWORD; + val = __longIntVal(datum); + if (val) { + dataPointer = (unsigned char *)(&val); + dataSize = sizeof(val); + } else { + datumOk = 0; + } + } else if (__Class(datum) == Array) { + int i = 0, ns = 0, totalSize = 0; + + valueType = REG_MULTI_SZ; + + /* + * must allocate a local buffer + * find size ... + */ + for (i=0; i<__arraySize(datum); i++) { + OBJ s = __ArrayInstPtr(datum)->a_element[i]; + + if (__isStringLike(s)) { + totalSize += __stringSize(s) + 1; + } else { + datumOk = 0; + break; + } + ns++; + } + if (datumOk) { + char *cp; + + /* + * allocate and fill... + */ + totalSize ++; + dataPointer = (char *)(malloc(totalSize)); + mustFreeData = 1; + cp = dataPointer; + for (i=0; i<__arraySize(datum); i++) { + OBJ s = __ArrayInstPtr(datum)->a_element[i]; + + strcpy(cp, __stringVal(s)); + cp += __stringSize(s); + *cp++ = '\0'; + } + *cp++ = '\0'; + dataSize = totalSize; + } + } else { + datumOk = 0; + } + + if (datumOk) { + ret = RegSetValueExA(myKey, __stringVal(aValueName), + 0, valueType, + dataPointer, dataSize); + if (mustFreeData) { + free(dataPointer); + } + if (ret == ERROR_SUCCESS) { + RETURN (true); + } + if ((ret != ERROR_PATH_NOT_FOUND) + && (ret != ERROR_FILE_NOT_FOUND)) { + errorNumber = __MKSMALLINT(ret); + } + } } %}. errorNumber notNil ifTrue:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError. + (OperatingSystem errorHolderForNumber:errorNumber) reportError. ]. ^ false @@ -14706,14 +14726,14 @@ idx := 0. [true] whileTrue:[ - subEntry := self subKeyAtIndex:idx. - subEntry isNil ifTrue:[ - ^self - ]. - aBlock value:subEntry. - subEntry allSubKeysDo:aBlock. - subEntry close. - idx := idx + 1. + subEntry := self subKeyAtIndex:idx. + subEntry isNil ifTrue:[ + ^self + ]. + aBlock value:subEntry. + subEntry allSubKeysDo:aBlock. + subEntry close. + idx := idx + 1. ] " @@ -14721,7 +14741,7 @@ top := self key:'HKEY_LOCAL_MACHINE'. top allSubKeysDo:[:subEntry | - Transcript showCR:subEntry path + Transcript showCR:subEntry path ] " ! @@ -14753,13 +14773,13 @@ idx := 0. [true] whileTrue:[ - subEntry := self subKeyAtIndex:idx. - subEntry isNil ifTrue:[ - ^self - ]. - aBlock value:subEntry. - subEntry close. - idx := idx + 1. + subEntry := self subKeyAtIndex:idx. + subEntry isNil ifTrue:[ + ^self + ]. + aBlock value:subEntry. + subEntry close. + idx := idx + 1. ] " @@ -14767,7 +14787,7 @@ top := self key:'HKEY_LOCAL_MACHINE'. top subKeysDo:[:subEntry | - Transcript showCR:subEntry path + Transcript showCR:subEntry path ] " ! @@ -14776,7 +14796,7 @@ "evaluate aBlock for all value names" ^ Array streamContents:[:s | - self valueNamesDo:[:nm | s nextPut:nm] + self valueNamesDo:[:nm | s nextPut:nm] ]. "Created: / 18-01-2011 / 20:24:52 / cg" @@ -14786,7 +14806,7 @@ "evaluate aBlock for all value names" self valueNamesDo:[:nm | - aBlock value:nm value:(self valueNamed:nm) + aBlock value:nm value:(self valueNamed:nm) ] " @@ -14794,7 +14814,7 @@ key := self key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X'. key valueNamesAndValuesDo:[:nm :val | - Transcript showCR:(nm , ' -> ' , val storeString). + Transcript showCR:(nm , ' -> ' , val storeString). ] " ! @@ -14806,12 +14826,12 @@ idx := 0. [true] whileTrue:[ - valueName := self valueNameAtIndex:idx. - valueName isNil ifTrue:[ - ^self - ]. - aBlock value:valueName. - idx := idx + 1. + valueName := self valueNameAtIndex:idx. + valueName isNil ifTrue:[ + ^self + ]. + aBlock value:valueName. + idx := idx + 1. ] ! ! @@ -14831,9 +14851,9 @@ HKEY myKey; if (__isExternalAddressLike(__INST(handle))) { - myKey = (HKEY)(__externalAddressVal(__INST(handle))); - __INST(handle) = nil; - RegCloseKey(myKey); + myKey = (HKEY)(__externalAddressVal(__INST(handle))); + __INST(handle) = nil; + RegCloseKey(myKey); } %} ! @@ -14846,7 +14866,7 @@ "some entry has been collected - close it" handle notNil ifTrue:[ - self closeKey. + self closeKey. ] "Created: / 19.5.1999 / 22:39:52 / cg" @@ -14857,10 +14877,10 @@ printOn:aStream aStream - nextPutAll:self className; - nextPut:$(; - nextPutAll:path; - nextPut:$). + nextPutAll:self className; + nextPut:$(; + nextPutAll:path; + nextPut:$). ! ! !Win32OperatingSystem::RegistryEntry methodsFor:'private'! @@ -14883,7 +14903,7 @@ key = __longIntVal(integerHandleValue); if (! key) { - RETURN (nil); + RETURN (nil); } t = __MKEXTERNALADDRESS(key); __INST(handle) = t; __STORE(self, t); @@ -14965,88 +14985,88 @@ BOOL ok; if ((hFile == 0) || (hFile == INVALID_HANDLE_VALUE)) { - errSym = @symbol(errorNotOpen); - goto bad; + errSym = @symbol(errorNotOpen); + goto bad; } if (! __bothSmallInteger(count, firstIndex)) { - errSym = @symbol(badArgument); - goto bad; + errSym = @symbol(badArgument); + goto bad; } cntWanted = __smallIntegerVal(count); if (cntWanted <= 0) { - errSym = @symbol(badCount); - goto bad; + errSym = @symbol(badCount); + goto bad; } offs = __smallIntegerVal(firstIndex) - 1; if (offs < 0) { - errSym = @symbol(badOffset); - goto bad; + errSym = @symbol(badOffset); + goto bad; } bufferIsExternalBytes = __isExternalBytesLike(aByteBuffer); if (! bufferIsExternalBytes) { - if (__isByteArray(aByteBuffer)) { - bufferSize = __byteArraySize(aByteBuffer); - } else if (__isString(aByteBuffer)) { // not isStringLike here ! - bufferSize = __stringSize(aByteBuffer); - } else { - errSym = @symbol(badBuffer); - goto bad; - } - if (bufferSize < (cntWanted + offs)) { - errSym = @symbol(badBufferSize); - goto bad; - } - if (cntWanted <= sizeof(miniBuffer)) { - extPtr = miniBuffer; - } else { - extPtr = malloc(cntWanted); - mustFreeBuffer = 1; - } + if (__isByteArray(aByteBuffer)) { + bufferSize = __byteArraySize(aByteBuffer); + } else if (__isString(aByteBuffer)) { // not isStringLike here ! + bufferSize = __stringSize(aByteBuffer); + } else { + errSym = @symbol(badBuffer); + goto bad; + } + if (bufferSize < (cntWanted + offs)) { + errSym = @symbol(badBufferSize); + goto bad; + } + if (cntWanted <= sizeof(miniBuffer)) { + extPtr = miniBuffer; + } else { + extPtr = malloc(cntWanted); + mustFreeBuffer = 1; + } } else { - OBJ sz; - - extPtr = (char *)(__externalBytesAddress(aByteBuffer)); - sz = __externalBytesSize(aByteBuffer); - if (! __isSmallInteger(sz)) { - errSym = @symbol(badBufferSize); - goto bad; - } - bufferSize = __smallIntegerVal(sz); - if (bufferSize < (cntWanted + offs)) { - errSym = @symbol(badBufferSize); - goto bad; - } - extPtr = extPtr + offs; + OBJ sz; + + extPtr = (char *)(__externalBytesAddress(aByteBuffer)); + sz = __externalBytesSize(aByteBuffer); + if (! __isSmallInteger(sz)) { + errSym = @symbol(badBufferSize); + goto bad; + } + bufferSize = __smallIntegerVal(sz); + if (bufferSize < (cntWanted + offs)) { + errSym = @symbol(badBufferSize); + goto bad; + } + extPtr = extPtr + offs; } do { - __threadErrno = 0; - ok = STX_API_NOINT_CALL5( "ReadFile", ReadFile, hFile, extPtr, cntWanted, &cntRead, 0 /* lpOverlapped */); + __threadErrno = 0; + ok = STX_API_NOINT_CALL5( "ReadFile", ReadFile, hFile, extPtr, cntWanted, &cntRead, 0 /* lpOverlapped */); } while(__threadErrno == EINTR); if (ok == TRUE) { - if (! bufferIsExternalBytes) { - /* copy over */ - memcpy(__byteArrayVal(aByteBuffer)+offs, extPtr, cntRead); - if (mustFreeBuffer) { - free(extPtr); - } - } - RETURN (__mkSmallInteger(cntRead)); + if (! bufferIsExternalBytes) { + /* copy over */ + memcpy(__byteArrayVal(aByteBuffer)+offs, extPtr, cntRead); + if (mustFreeBuffer) { + free(extPtr); + } + } + RETURN (__mkSmallInteger(cntRead)); } errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); bad: ; if (mustFreeBuffer) { - free(extPtr); + free(extPtr); } %}. errorNumber isNil ifTrue:[ - self error:'invalid argument(s): ', errSym. + self error:'invalid argument(s): ', errSym. ] ifFalse:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError + (OperatingSystem errorHolderForNumber:errorNumber) reportError ]. " @@ -15070,48 +15090,48 @@ INT t; if ((hFile == 0) || (hFile == INVALID_HANDLE_VALUE)) { - errSym = @symbol(errorNotOpen); - goto bad; + errSym = @symbol(errorNotOpen); + goto bad; } #if 0 if (ioctlsocket((SOCKET)hFile, FIONREAD, &res)==0) { - /* its a socket */ - if (res > 0) { - RETURN ( false ); - } + /* its a socket */ + if (res > 0) { + RETURN ( false ); + } } if (PeekNamedPipe(hFile, 0, 0, 0, &res, 0)) { - /* its a namedPipe */ - if (res > 0) { - RETURN ( false ); - } + /* its a namedPipe */ + if (res > 0) { + RETURN ( false ); + } } #endif if (__isSmallInteger(millis)) { - t = __intVal(millis); + t = __intVal(millis); } else { - t = INFINITE; + t = INFINITE; } do { - __threadErrno = 0; - res = WaitForSingleObject(hFile, t); + __threadErrno = 0; + res = WaitForSingleObject(hFile, t); } while (__threadErrno == EINTR); switch (res) { - case WAIT_OBJECT_0: - /* signalled */ - RETURN ( false ); - - case WAIT_TIMEOUT: - /* signalled */ - RETURN ( true ); - - default: - case WAIT_ABANDONED: - errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); - goto bad; + case WAIT_OBJECT_0: + /* signalled */ + RETURN ( false ); + + case WAIT_TIMEOUT: + /* signalled */ + RETURN ( true ); + + default: + case WAIT_ABANDONED: + errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); + goto bad; } bad: ; @@ -15126,9 +15146,9 @@ seekTo:newPosition from:whence "whence is one of: - #begin - #current - #end + #begin + #current + #end " |errSym errorNumber| @@ -15140,42 +15160,42 @@ __uint64__ pos64, newPos64; if ((hFile == 0) || (hFile == INVALID_HANDLE_VALUE)) { - errSym = @symbol(errorNotOpen); - goto bad; + errSym = @symbol(errorNotOpen); + goto bad; } if (whence == @symbol(begin)) { - moveHow = FILE_BEGIN; + moveHow = FILE_BEGIN; } else if (whence == @symbol(current)) { - moveHow = FILE_CURRENT; + moveHow = FILE_CURRENT; } else if (whence == @symbol(end)) { - moveHow = FILE_END; + moveHow = FILE_END; } else { - errSym = @symbol(badArgument2); - goto bad; + errSym = @symbol(badArgument2); + goto bad; } if (__signedLong64IntVal(newPosition, &pos64) == 0) { - errSym = @symbol(badArgument); - goto bad; + errSym = @symbol(badArgument); + goto bad; } posLo = pos64.lo; posHi = pos64.hi; posLo = SetFilePointer(hFile, posLo, &posHi, moveHow); if (posLo == 0xFFFFFFFF) { - int lastError; - - /* can be either an error, or a valid low-word */ - lastError = GetLastError(); - if (lastError != NO_ERROR) { - errorNumber = __mkSmallInteger( __WIN32_ERR(lastError) ); - goto bad; - } + int lastError; + + /* can be either an error, or a valid low-word */ + lastError = GetLastError(); + if (lastError != NO_ERROR) { + errorNumber = __mkSmallInteger( __WIN32_ERR(lastError) ); + goto bad; + } } if (posHi == 0) { - RETURN (__MKUINT( posLo )); + RETURN (__MKUINT( posLo )); } newPos64.lo = posLo; newPos64.hi = posHi; @@ -15186,9 +15206,9 @@ %}. errorNumber isNil ifTrue:[ - self error:'invalid argument(s): ', errSym. + self error:'invalid argument(s): ', errSym. ] ifFalse:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError + (OperatingSystem errorHolderForNumber:errorNumber) reportError ]. ! @@ -15209,82 +15229,82 @@ BOOL ok; if ((hFile == 0) || (hFile == INVALID_HANDLE_VALUE)) { - errSym = @symbol(errorNotOpen); - goto bad; + errSym = @symbol(errorNotOpen); + goto bad; } if (! __bothSmallInteger(count, firstIndex)) { - errSym = @symbol(badArgument); - goto bad; + errSym = @symbol(badArgument); + goto bad; } cntWanted = __smallIntegerVal(count); if (cntWanted <= 0) { - errSym = @symbol(badCount); - goto bad; + errSym = @symbol(badCount); + goto bad; } offs = __smallIntegerVal(firstIndex) - 1; if (offs < 0) { - errSym = @symbol(badOffset); - goto bad; + errSym = @symbol(badOffset); + goto bad; } bufferIsExternalBytes = __isExternalBytesLike(aByteBuffer); if (! bufferIsExternalBytes) { - if (__isByteArray(aByteBuffer)) { - bufferSize = __byteArraySize(aByteBuffer); - } else if (__isStringLike(aByteBuffer)) { - bufferSize = __stringSize(aByteBuffer); - } else { - errSym = @symbol(badBuffer); - goto bad; - } - if (bufferSize < (cntWanted + offs)) { - errSym = @symbol(badBufferSize); - goto bad; - } - if (cntWanted <= sizeof(miniBuffer)) { - extPtr = miniBuffer; - } else { - extPtr = malloc(cntWanted); - mustFreeBuffer = 1; - } - memcpy(extPtr, __byteArrayVal(aByteBuffer)+offs, cntWanted); + if (__isByteArray(aByteBuffer)) { + bufferSize = __byteArraySize(aByteBuffer); + } else if (__isStringLike(aByteBuffer)) { + bufferSize = __stringSize(aByteBuffer); + } else { + errSym = @symbol(badBuffer); + goto bad; + } + if (bufferSize < (cntWanted + offs)) { + errSym = @symbol(badBufferSize); + goto bad; + } + if (cntWanted <= sizeof(miniBuffer)) { + extPtr = miniBuffer; + } else { + extPtr = malloc(cntWanted); + mustFreeBuffer = 1; + } + memcpy(extPtr, __byteArrayVal(aByteBuffer)+offs, cntWanted); } else { - extPtr = (char *)(__externalBytesAddress(aByteBuffer)); - bufferSize = __externalBytesSize(aByteBuffer); - if (! __isSmallInteger(bufferSize)) { - errSym = @symbol(badBufferSize); - goto bad; - } - bufferSize = __smallIntegerVal(bufferSize); - if (bufferSize < (cntWanted + offs)) { - errSym = @symbol(badBufferSize); - goto bad; - } - extPtr = extPtr + offs; + extPtr = (char *)(__externalBytesAddress(aByteBuffer)); + bufferSize = __externalBytesSize(aByteBuffer); + if (! __isSmallInteger(bufferSize)) { + errSym = @symbol(badBufferSize); + goto bad; + } + bufferSize = __smallIntegerVal(bufferSize); + if (bufferSize < (cntWanted + offs)) { + errSym = @symbol(badBufferSize); + goto bad; + } + extPtr = extPtr + offs; } do { - __threadErrno = 0; - ok = STX_API_NOINT_CALL5( "WriteFile", WriteFile, hFile, extPtr, cntWanted, &cntWritten, 0 /* lpOverlapped */); + __threadErrno = 0; + ok = STX_API_NOINT_CALL5( "WriteFile", WriteFile, hFile, extPtr, cntWanted, &cntWritten, 0 /* lpOverlapped */); } while(__threadErrno == EINTR); if (ok == TRUE) { - if (mustFreeBuffer) { - free(extPtr); - } - RETURN (__mkSmallInteger(cntWritten)); + if (mustFreeBuffer) { + free(extPtr); + } + RETURN (__mkSmallInteger(cntWritten)); } errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); bad: ; if (mustFreeBuffer) { - free(extPtr); + free(extPtr); } %}. errorNumber isNil ifTrue:[ - self error:'invalid argument(s): ', errSym. + self error:'invalid argument(s): ', errSym. ] ifFalse:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError + (OperatingSystem errorHolderForNumber:errorNumber) reportError ]. " @@ -15313,8 +15333,8 @@ HANDLE h = (HANDLE)(__externalAddressVal(self)); if (h) { - __externalAddressVal(self) = (HANDLE)0; - CloseHandle(h); + __externalAddressVal(self) = (HANDLE)0; + CloseHandle(h); } %}. ! ! @@ -15323,7 +15343,7 @@ closeHandle self address ~~ 0 ifTrue:[ - OperatingSystem primClosePrinter:self. + OperatingSystem primClosePrinter:self. ] "Created: / 27-07-2006 / 14:48:37 / fm" @@ -15348,9 +15368,9 @@ !Win32OperatingSystem::Win32SerialPortHandle methodsFor:'opening'! open:portName baudRate:baudRate stopBitsType:stopBitsType - parityType:parityType dataBits:dataBits - inFlowCtrl:inFlowCtrlType outFlowCtrl:outFlowCtrlType - xOnChar:xOnChar xOffChar:xOffChar + parityType:parityType dataBits:dataBits + inFlowCtrl:inFlowCtrlType outFlowCtrl:outFlowCtrlType + xOnChar:xOnChar xOffChar:xOffChar "portName: COM%d baudRate: Integer stopBitsType: #stop1, #stop2 or #stop1_5 @@ -15369,13 +15389,13 @@ DCB dcb; char *__portName; int __setBaudRate = 1, - __setDataBits = 1, - __setXOnChar = 1, - __setXOffChar = 1, - __setInFlowCtrl = 1, - __setOutFlowCtrl = 1, - __setStopBits = 1, - __setParityType = 1; + __setDataBits = 1, + __setXOnChar = 1, + __setXOffChar = 1, + __setInFlowCtrl = 1, + __setOutFlowCtrl = 1, + __setStopBits = 1, + __setParityType = 1; int __baudRate, __dataBits; int __xOnChar, __xOffChar; int __inFlowCtrl, __outFlowCtrl; @@ -15390,90 +15410,90 @@ # define NONE 3 if (__isStringLike(portName)) { - __portName = __stringVal(portName); + __portName = __stringVal(portName); } else { - goto failure; + goto failure; } if (__isSmallInteger(baudRate)) { - __baudRate = __intVal(baudRate); + __baudRate = __intVal(baudRate); } else if (baudRate == nil) { - __setBaudRate = 0; + __setBaudRate = 0; } else { - goto failure; + goto failure; } if (__isSmallInteger(dataBits)) { - __dataBits = __intVal(dataBits); + __dataBits = __intVal(dataBits); } else if (dataBits == nil) { - __setDataBits = 0; + __setDataBits = 0; } else { - goto failure; + goto failure; } if (__isSmallInteger(xOnChar)) { - __xOnChar = __intVal(xOnChar); + __xOnChar = __intVal(xOnChar); } else if (__isCharacter(xOnChar)) { - __xOnChar = __intVal(_characterVal(xOnChar)); + __xOnChar = __intVal(_characterVal(xOnChar)); } else if (xOnChar == nil) { - __setXOnChar = 0; + __setXOnChar = 0; } else { - goto failure; + goto failure; } if (__isSmallInteger(xOffChar)) { - __xOffChar = __intVal(xOffChar); + __xOffChar = __intVal(xOffChar); } else if (__isCharacter(xOffChar)) { - __xOffChar = __intVal(_characterVal(xOffChar)); + __xOffChar = __intVal(_characterVal(xOffChar)); } else if (xOffChar == nil) { - __setXOffChar = 0; + __setXOffChar = 0; } else { - goto failure; + goto failure; } if (inFlowCtrlType == @symbol(xOnOff)) { - __inFlowCtrl = XONOFF; + __inFlowCtrl = XONOFF; } else if (inFlowCtrlType == @symbol(hardware)) { - __inFlowCtrl = HARDWARE; + __inFlowCtrl = HARDWARE; } else if (inFlowCtrlType == nil) { - __setInFlowCtrl = 0; + __setInFlowCtrl = 0; } else { - goto failure; + goto failure; } if (outFlowCtrlType == @symbol(xOnOff)) { - __outFlowCtrl = XONOFF; + __outFlowCtrl = XONOFF; } else if (outFlowCtrlType == @symbol(hardware)) { - __outFlowCtrl = HARDWARE; + __outFlowCtrl = HARDWARE; } else if (outFlowCtrlType == nil) { - __setOutFlowCtrl = 0; + __setOutFlowCtrl = 0; } else { - goto failure; + goto failure; } if (stopBitsType == @symbol(stop1)) { - __stopBits = STOP1; + __stopBits = STOP1; } else if (stopBitsType == @symbol(stop2)) { - __stopBits = STOP2; + __stopBits = STOP2; } else if (stopBitsType == @symbol(stop1_5)) { - __stopBits = STOP1_5; + __stopBits = STOP1_5; } else if (stopBitsType == nil) { - __setStopBits = 0; + __setStopBits = 0; } else { - goto failure; + goto failure; } port = CreateFile(__portName, - GENERIC_READ | GENERIC_WRITE, - 0, /* comm devices must be opened with exclusive access */ - NULL, /* no security attrs */ - OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */ - 0, /* no overlapped I/O */ - NULL /* hTemplate must be NULL for comm devices */ - ); + GENERIC_READ | GENERIC_WRITE, + 0, /* comm devices must be opened with exclusive access */ + NULL, /* no security attrs */ + OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */ + 0, /* no overlapped I/O */ + NULL /* hTemplate must be NULL for comm devices */ + ); if (port == INVALID_HANDLE_VALUE) { - console_fprintf(stderr, "Win32OS [info]: serial port open failed\n"); - errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); - goto failure; + console_fprintf(stderr, "Win32OS [info]: serial port open failed\n"); + errorNumber = __mkSmallInteger( __WIN32_ERR(GetLastError()) ); + goto failure; } /* Flush the driver */ PurgeComm( port, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ); @@ -15500,42 +15520,42 @@ if (__setXOffChar) dcb.XoffChar = __xOffChar; if (__setStopBits) { - /* set stop bits */ - switch(__stopBits) { - case STOP1_5: dcb.StopBits = 1; break; /* 1.5 stop bits */ - case STOP1: dcb.StopBits = 0; break; /* 1 stop bit */ - case STOP2: dcb.StopBits = 2; break; /* 2 stop bits */ - default: goto errExit; - } + /* set stop bits */ + switch(__stopBits) { + case STOP1_5: dcb.StopBits = 1; break; /* 1.5 stop bits */ + case STOP1: dcb.StopBits = 0; break; /* 1 stop bit */ + case STOP2: dcb.StopBits = 2; break; /* 2 stop bits */ + default: goto errExit; + } } if (__setParityType) { - /* set parity */ - switch(__parityType) { - case NONE: dcb.Parity = NOPARITY; break; - case ODD: dcb.Parity = ODDPARITY; break; - case EVEN: dcb.Parity = EVENPARITY; break; - default: goto errExit; - } + /* set parity */ + switch(__parityType) { + case NONE: dcb.Parity = NOPARITY; break; + case ODD: dcb.Parity = ODDPARITY; break; + case EVEN: dcb.Parity = EVENPARITY; break; + default: goto errExit; + } } if (__setInFlowCtrl) { - /* set control flow */ - dcb.fInX = FALSE; - dcb.fDtrControl = FALSE; - if (__inFlowCtrl == XONOFF) dcb.fInX = TRUE; /* XOn/XOff handshaking */ - if (__inFlowCtrl == HARDWARE) dcb.fDtrControl = TRUE; /* hardware handshaking */ + /* set control flow */ + dcb.fInX = FALSE; + dcb.fDtrControl = FALSE; + if (__inFlowCtrl == XONOFF) dcb.fInX = TRUE; /* XOn/XOff handshaking */ + if (__inFlowCtrl == HARDWARE) dcb.fDtrControl = TRUE; /* hardware handshaking */ } if (__setOutFlowCtrl) { - dcb.fOutX = FALSE; - dcb.fOutxCtsFlow = FALSE; - - if (__outFlowCtrl == XONOFF) dcb.fOutX = TRUE; /* XOn/XOff handshaking */ - if (__outFlowCtrl == HARDWARE) dcb.fOutxCtsFlow = TRUE; /* hardware handshaking */ + dcb.fOutX = FALSE; + dcb.fOutxCtsFlow = FALSE; + + if (__outFlowCtrl == XONOFF) dcb.fOutX = TRUE; /* XOn/XOff handshaking */ + if (__outFlowCtrl == HARDWARE) dcb.fOutxCtsFlow = TRUE; /* hardware handshaking */ } if (SetCommState(port, &dcb)) { - RETURN( true ); + RETURN( true ); } console_fprintf(stderr, "Win32OS [info]: serial port comm-setup failed\n"); @@ -15555,9 +15575,9 @@ # undef NONE %}. errorNumber isNil ifTrue:[ - self error:'invalid argument(s)'. + self error:'invalid argument(s)'. ] ifFalse:[ - (OperatingSystem errorHolderForNumber:errorNumber) reportError + (OperatingSystem errorHolderForNumber:errorNumber) reportError ]. ! ! @@ -15570,9 +15590,9 @@ HANDLE port = (HANDLE)(__externalAddressVal(self)); if (port) { - __externalAddressVal(self) = (HANDLE)0; - PurgeComm( port, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ); - CloseHandle(port); + __externalAddressVal(self) = (HANDLE)0; + PurgeComm( port, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ); + CloseHandle(port); } %}. ! ! @@ -15585,18 +15605,18 @@ if (port && __isSmallInteger(newRate)) { - DCB dcb; - - ZeroMemory(&dcb, sizeof(dcb)); - dcb.DCBlength = sizeof(dcb); - GetCommState(port, &dcb); - - dcb.BaudRate = __intVal(newRate); - - if (! SetCommState(port, &dcb)) { - RETURN(false); - } - RETURN(true); + DCB dcb; + + ZeroMemory(&dcb, sizeof(dcb)); + dcb.DCBlength = sizeof(dcb); + GetCommState(port, &dcb); + + dcb.BaudRate = __intVal(newRate); + + if (! SetCommState(port, &dcb)) { + RETURN(false); + } + RETURN(true); } %}. self primitiveFailed. @@ -15608,18 +15628,18 @@ if (port && __isSmallInteger(newNumberOfBits)) { - DCB dcb; - - ZeroMemory(&dcb, sizeof(dcb)); - dcb.DCBlength = sizeof(dcb); - GetCommState(port, &dcb); - - dcb.ByteSize = __intVal(newNumberOfBits); - - if (! SetCommState(port, &dcb)) { - RETURN(false); - } - RETURN(true); + DCB dcb; + + ZeroMemory(&dcb, sizeof(dcb)); + dcb.DCBlength = sizeof(dcb); + GetCommState(port, &dcb); + + dcb.ByteSize = __intVal(newNumberOfBits); + + if (! SetCommState(port, &dcb)) { + RETURN(false); + } + RETURN(true); } %}. self primitiveFailed. @@ -15632,27 +15652,27 @@ HANDLE port = (HANDLE)(__externalAddressVal(self)); if (port) { - DCB dcb; - - ZeroMemory(&dcb, sizeof(dcb)); - dcb.DCBlength = sizeof(dcb); - GetCommState(port, &dcb); - - - if ((newParityTypeSymbol == nil) || (newParityTypeSymbol == @symbol(none))) { - dcb.Parity = NOPARITY; - } else if (newParityTypeSymbol == @symbol(odd)) { - dcb.Parity = ODDPARITY; - } else if (newParityTypeSymbol == @symbol(even)) { - dcb.Parity = EVENPARITY; - } else { - goto failure; - } - - if (! SetCommState(port, &dcb)) { - RETURN(false); - } - RETURN(true); + DCB dcb; + + ZeroMemory(&dcb, sizeof(dcb)); + dcb.DCBlength = sizeof(dcb); + GetCommState(port, &dcb); + + + if ((newParityTypeSymbol == nil) || (newParityTypeSymbol == @symbol(none))) { + dcb.Parity = NOPARITY; + } else if (newParityTypeSymbol == @symbol(odd)) { + dcb.Parity = ODDPARITY; + } else if (newParityTypeSymbol == @symbol(even)) { + dcb.Parity = EVENPARITY; + } else { + goto failure; + } + + if (! SetCommState(port, &dcb)) { + RETURN(false); + } + RETURN(true); } failure: ; %}. @@ -15665,26 +15685,26 @@ HANDLE port = (HANDLE)(__externalAddressVal(self)); if (port) { - DCB dcb; - - ZeroMemory(&dcb, sizeof(dcb)); - dcb.DCBlength = sizeof(dcb); - GetCommState(port, &dcb); - - if (newStopBitsSymbol == @symbol(stop1)) { - dcb.Parity = 0 /* STOP1 */; - } else if (newStopBitsSymbol == @symbol(stop2)) { - dcb.Parity = 2 /* STOP2 */; - } else if (newStopBitsSymbol == @symbol(stop1_5)) { - dcb.Parity = 1 /* STOP1_5 */; - } else { - goto failure; - } - - if (! SetCommState(port, &dcb)) { - RETURN(false); - } - RETURN(true); + DCB dcb; + + ZeroMemory(&dcb, sizeof(dcb)); + dcb.DCBlength = sizeof(dcb); + GetCommState(port, &dcb); + + if (newStopBitsSymbol == @symbol(stop1)) { + dcb.Parity = 0 /* STOP1 */; + } else if (newStopBitsSymbol == @symbol(stop2)) { + dcb.Parity = 2 /* STOP2 */; + } else if (newStopBitsSymbol == @symbol(stop1_5)) { + dcb.Parity = 1 /* STOP1_5 */; + } else { + goto failure; + } + + if (! SetCommState(port, &dcb)) { + RETURN(false); + } + RETURN(true); } failure: ; %}. @@ -15742,10 +15762,10 @@ type := OperatingSystem socketTypeCodeOf:typeArg. proto := self protocolCodeOf:protoArg. serviceNameArg notNil ifTrue:[ - serviceName := serviceNameArg printString. "convert integer port numbers" - serviceNameArg isInteger ifTrue:[ - port := serviceNameArg. - ]. + serviceName := serviceNameArg printString. "convert integer port numbers" + serviceNameArg isInteger ifTrue:[ + port := serviceNameArg. + ]. ]. "ifFalse:[serviceName := nil]" %{ /* STACK:32000 */ @@ -15754,24 +15774,24 @@ int ret, cnt = 0; if (hostName == nil) { - __hostName = 0; + __hostName = 0; } else if (__isStringLike(hostName)) { - __hostName = __stringVal(hostName); + __hostName = __stringVal(hostName); } else { - error = @symbol(badArgument1); - goto exitPrim; + error = @symbol(badArgument1); + goto exitPrim; } if (serviceName == nil) { - __serviceName = 0; + __serviceName = 0; } else if (__isStringLike(serviceName)) { - __serviceName = __stringVal(serviceName); + __serviceName = __stringVal(serviceName); } else { - error = @symbol(badArgument2); - goto exitPrim; + error = @symbol(badArgument2); + goto exitPrim; } if (__hostName == 0 && __serviceName == 0) { - error = @symbol(badArgument); - goto exitPrim; + error = @symbol(badArgument); + goto exitPrim; } { @@ -15784,121 +15804,121 @@ memset(&hints, 0, sizeof(hints)); if (__isSmallInteger(domain)) - hints.ai_family = __intVal(domain); + hints.ai_family = __intVal(domain); if (__isSmallInteger(type)) - hints.ai_socktype = __intVal(type); + hints.ai_socktype = __intVal(type); if (__isSmallInteger(proto)) - hints.ai_protocol = __intVal(proto); + hints.ai_protocol = __intVal(proto); do { - /* must refetch in loop */ - if (hostName == nil) { - __hostName = 0; - } else if (__isStringLike(hostName)) { - __hostName = __stringVal(hostName); - } - if (serviceName == nil) { - __serviceName = 0; - } else if (__isStringLike(serviceName)) { - __serviceName = __stringVal(serviceName); - } + /* must refetch in loop */ + if (hostName == nil) { + __hostName = 0; + } else if (__isStringLike(hostName)) { + __hostName = __stringVal(hostName); + } + if (serviceName == nil) { + __serviceName = 0; + } else if (__isStringLike(serviceName)) { + __serviceName = __stringVal(serviceName); + } # ifdef DO_WRAP_CALLS - do { - __threadErrno = 0; - res = STX_WSA_NOINT_CALL4( "getaddrinfo", getaddrinfo, __hostName, __serviceName, &hints, &info); - } while ((res < 0) && (__threadErrno == EINTR)); + do { + __threadErrno = 0; + res = STX_WSA_NOINT_CALL4( "getaddrinfo", getaddrinfo, __hostName, __serviceName, &hints, &info); + } while ((res < 0) && (__threadErrno == EINTR)); # else - __BEGIN_INTERRUPTABLE__ - ret = getaddrinfo(__hostName, __serviceName, &hints, &info); - __END_INTERRUPTABLE__ + __BEGIN_INTERRUPTABLE__ + ret = getaddrinfo(__hostName, __serviceName, &hints, &info); + __END_INTERRUPTABLE__ # endif } while (ret == EAI_SYSTEM && errno == EINTR); if (ret != 0) { - switch (ret) { - case EAI_FAMILY: - error = @symbol(badProtocol); - break; - case EAI_SOCKTYPE: - error = @symbol(badSocketType); - break; - case EAI_BADFLAGS: - error = @symbol(badFlags); - break; - case EAI_NONAME: - error = @symbol(unknownHost); - break; - case EAI_SERVICE: - error = @symbol(unknownService); - break; - case EAI_ADDRFAMILY : - error = @symbol(unknownHostForProtocol); - break; - case EAI_NODATA: - error = @symbol(noAddress); - break; - case EAI_MEMORY: - error = @symbol(allocationFailure); - break; - case EAI_FAIL: - error = @symbol(permanentFailure); - break; - case EAI_AGAIN: - error = @symbol(tryAgain); - break; - case EAI_SYSTEM: - error = @symbol(systemError); - break; - default: - error = @symbol(unknownError); - } - errorString = __MKSTRING(gai_strerror(ret)); - goto err; + switch (ret) { + case EAI_FAMILY: + error = @symbol(badProtocol); + break; + case EAI_SOCKTYPE: + error = @symbol(badSocketType); + break; + case EAI_BADFLAGS: + error = @symbol(badFlags); + break; + case EAI_NONAME: + error = @symbol(unknownHost); + break; + case EAI_SERVICE: + error = @symbol(unknownService); + break; + case EAI_ADDRFAMILY : + error = @symbol(unknownHostForProtocol); + break; + case EAI_NODATA: + error = @symbol(noAddress); + break; + case EAI_MEMORY: + error = @symbol(allocationFailure); + break; + case EAI_FAIL: + error = @symbol(permanentFailure); + break; + case EAI_AGAIN: + error = @symbol(tryAgain); + break; + case EAI_SYSTEM: + error = @symbol(systemError); + break; + default: + error = @symbol(unknownError); + } + errorString = __MKSTRING(gai_strerror(ret)); + goto err; } for (cnt=0, infop=info; infop; infop=infop->ai_next) - cnt++; + cnt++; result = __ARRAY_NEW_INT(cnt); if (result == nil) { - error = @symbol(allocationFailure); - goto err; + error = @symbol(allocationFailure); + goto err; } for (infop=info, cnt=0; infop; infop=infop->ai_next, cnt++) { - OBJ o, resp; - - resp = __ARRAY_NEW_INT(6); - if (resp == nil) { - error = @symbol(allocationFailure); - goto err; - } - - __ArrayInstPtr(result)->a_element[cnt] = resp; __STORE(result, resp); - - __ArrayInstPtr(resp)->a_element[0] = __mkSmallInteger(infop->ai_flags); - __ArrayInstPtr(resp)->a_element[1] = __mkSmallInteger(infop->ai_family); - __ArrayInstPtr(resp)->a_element[2] = __mkSmallInteger(infop->ai_socktype); - __ArrayInstPtr(resp)->a_element[3] = __mkSmallInteger(infop->ai_protocol); - - __PROTECT__(resp); - o = __BYTEARRAY_NEW_INT(infop->ai_addrlen); - __UNPROTECT__(resp); - if (o == nil) { - error = @symbol(allocationFailure); - goto err; - } - memcpy(__byteArrayVal(o), infop->ai_addr, infop->ai_addrlen); + OBJ o, resp; + + resp = __ARRAY_NEW_INT(6); + if (resp == nil) { + error = @symbol(allocationFailure); + goto err; + } + + __ArrayInstPtr(result)->a_element[cnt] = resp; __STORE(result, resp); + + __ArrayInstPtr(resp)->a_element[0] = __mkSmallInteger(infop->ai_flags); + __ArrayInstPtr(resp)->a_element[1] = __mkSmallInteger(infop->ai_family); + __ArrayInstPtr(resp)->a_element[2] = __mkSmallInteger(infop->ai_socktype); + __ArrayInstPtr(resp)->a_element[3] = __mkSmallInteger(infop->ai_protocol); + + __PROTECT__(resp); + o = __BYTEARRAY_NEW_INT(infop->ai_addrlen); + __UNPROTECT__(resp); + if (o == nil) { + error = @symbol(allocationFailure); + goto err; + } + memcpy(__byteArrayVal(o), infop->ai_addr, infop->ai_addrlen); __ArrayInstPtr(resp)->a_element[4] = o; __STORE(resp, o); - if (infop->ai_canonname) { - __PROTECT__(resp); - o = __MKSTRING(infop->ai_canonname); - __UNPROTECT__(resp); - if (o == nil) { - error = @symbol(allocationFailure); - goto err; - } - __ArrayInstPtr(resp)->a_element[5] = o; __STORE(resp, o); - } + if (infop->ai_canonname) { + __PROTECT__(resp); + o = __MKSTRING(infop->ai_canonname); + __UNPROTECT__(resp); + if (o == nil) { + error = @symbol(allocationFailure); + goto err; + } + __ArrayInstPtr(resp)->a_element[5] = o; __STORE(resp, o); + } } err: @@ -15915,148 +15935,148 @@ int i; if (__isSmallInteger(port)) { - __port = htons(__smallIntegerVal(port)); + __port = htons(__smallIntegerVal(port)); } else if (__serviceName) { - struct servent *sp; - char *__proto = 0; - - if (__isStringLike(protoArg)) - __proto = __stringVal(protoArg); - - sp = getservbyname(__serviceName, __proto); - if (sp == NULL) { - __port = atoi(__serviceName); - if (__port <= 0) { - errorString = @symbol(unknownService); - error = __mkSmallInteger(-3); - goto err; - } - __port = htons(__port); - } else - __port = sp->s_port; + struct servent *sp; + char *__proto = 0; + + if (__isStringLike(protoArg)) + __proto = __stringVal(protoArg); + + sp = getservbyname(__serviceName, __proto); + if (sp == NULL) { + __port = atoi(__serviceName); + if (__port <= 0) { + errorString = @symbol(unknownService); + error = __mkSmallInteger(-3); + goto err; + } + __port = htons(__port); + } else + __port = sp->s_port; } if (__hostName) { # ifdef USE_H_ERRNO - do { - /* must refetch in loop */ - if (hostName == nil) { - __hostName = 0; - } else if (__isStringLike(hostName)) { - __hostName = __stringVal(hostName); - } + do { + /* must refetch in loop */ + if (hostName == nil) { + __hostName = 0; + } else if (__isStringLike(hostName)) { + __hostName = __stringVal(hostName); + } # ifdef DO_WRAP_CALLS - hp = STX_WSA_NOINT_CALL1("gethostbyname", gethostbyname, __hostName); - if ((INT)hp < 0) hp = NULL; + hp = STX_WSA_NOINT_CALL1("gethostbyname", gethostbyname, __hostName); + if ((INT)hp < 0) hp = NULL; # else - /* __BEGIN_INTERRUPTABLE__ is dangerous, because gethostbyname - * uses a static data area - */ - __BEGIN_INTERRUPTABLE__ - hp = gethostbyname(__hostName); - __END_INTERRUPTABLE__ -#endif - } while ((hp == NULL) - && ( - (h_errno == TRY_AGAIN) - || errno == EINTR + /* __BEGIN_INTERRUPTABLE__ is dangerous, because gethostbyname + * uses a static data area + */ + __BEGIN_INTERRUPTABLE__ + hp = gethostbyname(__hostName); + __END_INTERRUPTABLE__ +#endif + } while ((hp == NULL) + && ( + (h_errno == TRY_AGAIN) + || errno == EINTR # ifdef IRIX5_3 - || (errno == ECONNREFUSED) + || (errno == ECONNREFUSED) # endif - ) - ); - if (hp == 0) { - switch (h_errno) { - case HOST_NOT_FOUND: - errorString = @symbol(unknownHost); - break; - case NO_ADDRESS: - errorString = @symbol(noAddress); - break; - case NO_RECOVERY: - errorString = @symbol(permanentFailure); - break; - case TRY_AGAIN: - errorString = @symbol(tryAgain); - break; - default: - errorString = @symbol(unknownError); - break; - } - error = __mkSmallInteger(h_errno); - goto err; - } + ) + ); + if (hp == 0) { + switch (h_errno) { + case HOST_NOT_FOUND: + errorString = @symbol(unknownHost); + break; + case NO_ADDRESS: + errorString = @symbol(noAddress); + break; + case NO_RECOVERY: + errorString = @symbol(permanentFailure); + break; + case TRY_AGAIN: + errorString = @symbol(tryAgain); + break; + default: + errorString = @symbol(unknownError); + break; + } + error = __mkSmallInteger(h_errno); + goto err; + } # else /* !USE_H_ERRNO */ - hp = gethostbyname(__hostName); - if (hp == 0) { - errorString = @symbol(unknownHost); - error = __mkSmallInteger(-1); - goto err; - } + hp = gethostbyname(__hostName); + if (hp == 0) { + errorString = @symbol(unknownHost); + error = __mkSmallInteger(-1); + goto err; + } # endif /* !USE_H_ERRNO*/ - if (__isSmallInteger(domain) && hp->h_addrtype != __smallIntegerVal(domain)) { - errorString = @symbol(unknownHost); - error = __mkSmallInteger(-2); - goto err; - } - - for (cnt = 0, addrpp = hp->h_addr_list; *addrpp; addrpp++) - cnt++; - addrpp = hp->h_addr_list; + if (__isSmallInteger(domain) && hp->h_addrtype != __smallIntegerVal(domain)) { + errorString = @symbol(unknownHost); + error = __mkSmallInteger(-2); + goto err; + } + + for (cnt = 0, addrpp = hp->h_addr_list; *addrpp; addrpp++) + cnt++; + addrpp = hp->h_addr_list; } else { - cnt = 1; + cnt = 1; } result = __ARRAY_NEW_INT(cnt); if (result == nil) { - error = @symbol(allocationFailure); - goto err; + error = @symbol(allocationFailure); + goto err; } for (i = 0; i < cnt; i++) { - OBJ o, resp; - struct sockaddr_in *sa; - - resp = __ARRAY_NEW_INT(6); - if (resp == nil) { - error = @symbol(allocationFailure); - goto err; - } - - __ArrayInstPtr(result)->a_element[i] = resp; __STORE(result, resp); - __ArrayInstPtr(resp)->a_element[0] = __mkSmallInteger(0); - __ArrayInstPtr(resp)->a_element[2] = type; __STORE(result, type); - __ArrayInstPtr(resp)->a_element[3] = proto; __STORE(result, proto); - __PROTECT__(resp); - o = __BYTEARRAY_NEW_INT(sizeof(*sa)); - __UNPROTECT__(resp); - if (o == nil) { - error = @symbol(allocationFailure); - goto err; - } - __ArrayInstPtr(resp)->a_element[4] = o; __STORE(resp, o); - sa = (struct sockaddr_in *)__byteArrayVal(o); - sa->sin_port = __port; - - if (__hostName) { - sa->sin_family = hp->h_addrtype; - memcpy(&sa->sin_addr, *addrpp, hp->h_length); - __ArrayInstPtr(resp)->a_element[1] = __mkSmallInteger(hp->h_addrtype); - if (hp->h_name) { - __PROTECT__(resp); - o = __MKSTRING(hp->h_name); - __UNPROTECT__(resp); - if (o == nil) { - error = @symbol(allocationFailure); - goto err; - } - __ArrayInstPtr(resp)->a_element[5] = o; __STORE(resp, o); - } - addrpp++; - } else{ - __ArrayInstPtr(resp)->a_element[1] = domain; __STORE(resp, domain); - } + OBJ o, resp; + struct sockaddr_in *sa; + + resp = __ARRAY_NEW_INT(6); + if (resp == nil) { + error = @symbol(allocationFailure); + goto err; + } + + __ArrayInstPtr(result)->a_element[i] = resp; __STORE(result, resp); + __ArrayInstPtr(resp)->a_element[0] = __mkSmallInteger(0); + __ArrayInstPtr(resp)->a_element[2] = type; __STORE(result, type); + __ArrayInstPtr(resp)->a_element[3] = proto; __STORE(result, proto); + __PROTECT__(resp); + o = __BYTEARRAY_NEW_INT(sizeof(*sa)); + __UNPROTECT__(resp); + if (o == nil) { + error = @symbol(allocationFailure); + goto err; + } + __ArrayInstPtr(resp)->a_element[4] = o; __STORE(resp, o); + sa = (struct sockaddr_in *)__byteArrayVal(o); + sa->sin_port = __port; + + if (__hostName) { + sa->sin_family = hp->h_addrtype; + memcpy(&sa->sin_addr, *addrpp, hp->h_length); + __ArrayInstPtr(resp)->a_element[1] = __mkSmallInteger(hp->h_addrtype); + if (hp->h_name) { + __PROTECT__(resp); + o = __MKSTRING(hp->h_name); + __UNPROTECT__(resp); + if (o == nil) { + error = @symbol(allocationFailure); + goto err; + } + __ArrayInstPtr(resp)->a_element[5] = o; __STORE(resp, o); + } + addrpp++; + } else{ + __ArrayInstPtr(resp)->a_element[1] = domain; __STORE(resp, domain); + } } err:; @@ -16068,58 +16088,58 @@ exitPrim:; %}. error notNil ifTrue:[ - |request| - request := SocketAddressInfo new - domain:domainArg; - type:typeArg; - protocol:protoArg; - canonicalName:hostName; - serviceName:serviceName. - ^ (HostNameLookupError new - parameter:error; - messageText:' - ', (errorString ? error printString); - request:request) raiseRequest. + |request| + request := SocketAddressInfo new + domain:domainArg; + type:typeArg; + protocol:protoArg; + canonicalName:hostName; + serviceName:serviceName. + ^ (HostNameLookupError new + parameter:error; + messageText:' - ', (errorString ? error printString); + request:request) raiseRequest. ]. 1 to:result size do:[:i | - |entry dom info| - - info := SocketAddressInfo new. - entry := result at:i. - info flags:(entry at:1). - info domain:(dom := OperatingSystem domainSymbolOf:(entry at:2)). - info type:(OperatingSystem socketTypeSymbolOf:(entry at:3)). - info protocol:(self protocolSymbolOf:(entry at:4)). - info socketAddress:((SocketAddress newDomain:dom) fromBytes:(entry at:5)). - info canonicalName:(entry at:6). - result at:i put:info + |entry dom info| + + info := SocketAddressInfo new. + entry := result at:i. + info flags:(entry at:1). + info domain:(dom := OperatingSystem domainSymbolOf:(entry at:2)). + info type:(OperatingSystem socketTypeSymbolOf:(entry at:3)). + info protocol:(self protocolSymbolOf:(entry at:4)). + info socketAddress:((SocketAddress newDomain:dom) fromBytes:(entry at:5)). + info canonicalName:(entry at:6). + result at:i put:info ]. ^ result " self getAddressInfo:'localhost' serviceName:nil - domain:nil type:nil protocol:nil flags:nil + domain:nil type:nil protocol:nil flags:nil self getAddressInfo:'localhost' serviceName:nil - domain:#inet type:#stream protocol:nil flags:nil + domain:#inet type:#stream protocol:nil flags:nil self getAddressInfo:'localhost' serviceName:nil - domain:#inet type:#stream protocol:#tcp flags:nil + domain:#inet type:#stream protocol:#tcp flags:nil self getAddressInfo:'localhost' serviceName:10 - domain:#inet type:#stream protocol:#tcp flags:nil + domain:#inet type:#stream protocol:#tcp flags:nil self getAddressInfo:'localhost' serviceName:'10' - domain:#inet type:#stream protocol:#tcp flags:nil + domain:#inet type:#stream protocol:#tcp flags:nil self getAddressInfo:'blurb.exept.de' serviceName:nil - domain:#inet type:nil protocol:nil flags:nil + domain:#inet type:nil protocol:nil flags:nil self getAddressInfo:'1.2.3.4' serviceName:'bla' - domain:#inet type:nil protocol:nil flags:nil + domain:#inet type:nil protocol:nil flags:nil self getAddressInfo:'localhost' serviceName:'echo' - domain:#inet type:nil protocol:nil flags:nil + domain:#inet type:nil protocol:nil flags:nil self getAddressInfo:nil serviceName:'echo' - domain:#inet type:nil protocol:nil flags:nil + domain:#inet type:nil protocol:nil flags:nil self getAddressInfo:nil serviceName:nil - domain:#inet type:nil protocol:nil flags:nil + domain:#inet type:nil protocol:nil flags:nil self getAddressInfo:'www.google.de' serviceName:nil - domain:nil type:nil protocol:nil flags:nil + domain:nil type:nil protocol:nil flags:nil self getAddressInfo:'smc1' serviceName:nil - domain:nil type:nil protocol:nil flags:nil + domain:nil type:nil protocol:nil flags:nil " ! @@ -16149,20 +16169,20 @@ int nInstBytes, sockAddrSize; if (wantHostName == true) { - hp = host; - hsz = sizeof(host); + hp = host; + hsz = sizeof(host); } if (wantServiceName == true) { - sp = service; - ssz = sizeof(service); + sp = service; + ssz = sizeof(service); } if (hp == 0 && sp == 0) { - error = @symbol(badArgument); - goto err; + error = @symbol(badArgument); + goto err; } if (!__isBytes(socketAddress)) { - error = @symbol(badArgument1); - goto err; + error = @symbol(badArgument1); + goto err; } nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(__qClass(socketAddress))->c_ninstvars)); @@ -16170,176 +16190,176 @@ sockAddrSize -= nInstBytes; if (!__isSmallInteger(flags)) { - error = @symbol(badArgument5); - goto err; + error = @symbol(badArgument5); + goto err; } __flags = __intVal(flags); #if defined(NI_NUMERICHOST) if (useDatagram == true) { - __flags |= NI_DGRAM; + __flags |= NI_DGRAM; } { - bp = (char *)(__byteArrayVal(socketAddress)); - bp += nInstBytes; - __BEGIN_INTERRUPTABLE__ - ret = getnameinfo((struct sockaddr *)bp, sockAddrSize, - hp, hsz, sp, ssz, __flags); - __END_INTERRUPTABLE__ + bp = (char *)(__byteArrayVal(socketAddress)); + bp += nInstBytes; + __BEGIN_INTERRUPTABLE__ + ret = getnameinfo((struct sockaddr *)bp, sockAddrSize, + hp, hsz, sp, ssz, __flags); + __END_INTERRUPTABLE__ } while (ret == EAI_SYSTEM && errno == EINTR); if (ret != 0) { - switch (ret) { - case EAI_FAMILY: - error = @symbol(badProtocol); - break; - case EAI_SOCKTYPE: - error = @symbol(badSocketType); - break; - case EAI_BADFLAGS: - error = @symbol(badFlags); - break; - case EAI_NONAME: - error = @symbol(unknownHost); - break; - case EAI_SERVICE: - error = @symbol(unknownService); - break; - case EAI_ADDRFAMILY : - error = @symbol(unknownHostForProtocol); - break; - case EAI_NODATA: - error = @symbol(noAddress); - break; - case EAI_MEMORY: - error = @symbol(allocationFailure); - break; - case EAI_FAIL: - error = @symbol(permanentFailure); - break; - case EAI_AGAIN: - error = @symbol(tryAgain); - break; - case EAI_SYSTEM: - error = @symbol(systemError); - break; - default: - error = @symbol(unknownError); - } - errorString = __MKSTRING(gai_strerror(ret)); - goto err; + switch (ret) { + case EAI_FAMILY: + error = @symbol(badProtocol); + break; + case EAI_SOCKTYPE: + error = @symbol(badSocketType); + break; + case EAI_BADFLAGS: + error = @symbol(badFlags); + break; + case EAI_NONAME: + error = @symbol(unknownHost); + break; + case EAI_SERVICE: + error = @symbol(unknownService); + break; + case EAI_ADDRFAMILY : + error = @symbol(unknownHostForProtocol); + break; + case EAI_NODATA: + error = @symbol(noAddress); + break; + case EAI_MEMORY: + error = @symbol(allocationFailure); + break; + case EAI_FAIL: + error = @symbol(permanentFailure); + break; + case EAI_AGAIN: + error = @symbol(tryAgain); + break; + case EAI_SYSTEM: + error = @symbol(systemError); + break; + default: + error = @symbol(unknownError); + } + errorString = __MKSTRING(gai_strerror(ret)); + goto err; } # else /* ! NI_NUMERICHOST */ { - /* - * Do it using gethostbyaddr() - */ - struct sockaddr_in *sa; - - if (sockAddrSize < sizeof(*sa)) { - error = @symbol(badArgument1); - goto err; - } - bp = (char *)(__byteArrayVal(socketAddress)); - bp += nInstBytes; - sa = (struct sockaddr_in *)bp; - - if (sp) { - struct servent *servp; - char *__proto = 0; - - __proto = (useDatagram == true ? "udp" : "tcp"); - - servp = getservbyport(sa->sin_port, __proto); - if (servp) { - sp = servp->s_name; - } - } - if (hp) { - struct hostent *hostp; + /* + * Do it using gethostbyaddr() + */ + struct sockaddr_in *sa; + + if (sockAddrSize < sizeof(*sa)) { + error = @symbol(badArgument1); + goto err; + } + bp = (char *)(__byteArrayVal(socketAddress)); + bp += nInstBytes; + sa = (struct sockaddr_in *)bp; + + if (sp) { + struct servent *servp; + char *__proto = 0; + + __proto = (useDatagram == true ? "udp" : "tcp"); + + servp = getservbyport(sa->sin_port, __proto); + if (servp) { + sp = servp->s_name; + } + } + if (hp) { + struct hostent *hostp; # ifdef USE_H_ERRNO - do { - /* must refetch in loop */ - bp = (char *)(__byteArrayVal(socketAddress)); - bp += nInstBytes; - sa = (struct sockaddr_in *)bp; - /* __BEGIN_INTERRUPTABLE__ is dangerous, because gethostbyname uses a static data area - */ - hostp = gethostbyaddr((char *)&sa->sin_addr, sockAddrSize, sa->sin_family); - /* __END_INTERRUPTABLE__ */ - } while ((hostp == NULL) - && ((h_errno == TRY_AGAIN) - || errno == EINTR + do { + /* must refetch in loop */ + bp = (char *)(__byteArrayVal(socketAddress)); + bp += nInstBytes; + sa = (struct sockaddr_in *)bp; + /* __BEGIN_INTERRUPTABLE__ is dangerous, because gethostbyname uses a static data area + */ + hostp = gethostbyaddr((char *)&sa->sin_addr, sockAddrSize, sa->sin_family); + /* __END_INTERRUPTABLE__ */ + } while ((hostp == NULL) + && ((h_errno == TRY_AGAIN) + || errno == EINTR # ifdef IRIX5_3 - || (errno == ECONNREFUSED) + || (errno == ECONNREFUSED) # endif - ) - ); - if (hostp == 0) { - switch (h_errno) { - case HOST_NOT_FOUND: - errorString = @symbol(unknownHost); - break; - case NO_ADDRESS: - errorString = @symbol(noAddress); - break; - case NO_RECOVERY: - errorString = @symbol(permanentFailure); - break; - case TRY_AGAIN: - errorString = @symbol(tryAgain); - break; - default: - errorString = @symbol(unknownError); - break; - } - error = __mkSmallInteger(h_errno); - goto err; - } + ) + ); + if (hostp == 0) { + switch (h_errno) { + case HOST_NOT_FOUND: + errorString = @symbol(unknownHost); + break; + case NO_ADDRESS: + errorString = @symbol(noAddress); + break; + case NO_RECOVERY: + errorString = @symbol(permanentFailure); + break; + case TRY_AGAIN: + errorString = @symbol(tryAgain); + break; + default: + errorString = @symbol(unknownError); + break; + } + error = __mkSmallInteger(h_errno); + goto err; + } # else /* !USE_H_ERRNO */ - hostp = gethostbyaddr((char *)&sa->sin_addr, sockAddrSize, sa->sin_family); - if (hostp == 0) { - errorString = @symbol(unknownHost); - error = __mkSmallInteger(-1); - goto err; - } + hostp = gethostbyaddr((char *)&sa->sin_addr, sockAddrSize, sa->sin_family); + if (hostp == 0) { + errorString = @symbol(unknownHost); + error = __mkSmallInteger(-1); + goto err; + } # endif /* !USE_H_ERRNO*/ - hp = hostp->h_name; - } + hp = hostp->h_name; + } } # endif /* ! NI_NUMERICHOST */ if (hp) - hostName = __MKSTRING(hp); + hostName = __MKSTRING(hp); if (sp) - serviceName = __MKSTRING(sp); + serviceName = __MKSTRING(sp); err:; #else error = @symbol(notImplemented); #endif %}. error notNil ifTrue:[ - ^ (HostAddressLookupError new - parameter:error; - messageText:' - ', errorString; - request:thisContext message) raiseRequest. + ^ (HostAddressLookupError new + parameter:error; + messageText:' - ', errorString; + request:thisContext message) raiseRequest. ]. ^ Array with:hostName with:serviceName " self getNameInfo: - (self getAddressInfo:'localhost' serviceName:'echo' - domain:#inet type:#stream protocol:nil flags:nil) first socketAddress - wantHostName:true wantServiceName:true datagram:false flags:0 + (self getAddressInfo:'localhost' serviceName:'echo' + domain:#inet type:#stream protocol:nil flags:nil) first socketAddress + wantHostName:true wantServiceName:true datagram:false flags:0 self getNameInfo: - (self getAddressInfo:'exept.exept.de' serviceName:'echo' - domain:#inet type:#stream protocol:nil flags:nil) first socketAddress - wantHostName:true wantServiceName:true datagram:false flags:0 + (self getAddressInfo:'exept.exept.de' serviceName:'echo' + domain:#inet type:#stream protocol:nil flags:nil) first socketAddress + wantHostName:true wantServiceName:true datagram:false flags:0 self getNameInfo:#[1 2 3 4] - wantHostName:true wantServiceName:true datagram:false flags:0 + wantHostName:true wantServiceName:true datagram:false flags:0 " ! ! @@ -16362,35 +16382,35 @@ !Win32OperatingSystem::WinPointStructure methodsFor:'accessing'! asPoint - "Private - Answer the receiver as a Point." + "Private - Answer the receiver as a Point." ^self x @ self y "Created: / 03-08-2006 / 10:45:55 / fm" ! x - "Private - Answer the x coordinate of the point." + "Private - Answer the x coordinate of the point." ^self longAt: 0 + 1 "Created: / 03-08-2006 / 10:46:11 / fm" ! x: anInteger - "Private - Set the x coordinate of the point." + "Private - Set the x coordinate of the point." self longAt: 0 + 1 put: anInteger "Created: / 03-08-2006 / 10:46:41 / fm" ! y - "Private - Answer the y coordinate of the point." + "Private - Answer the y coordinate of the point." ^self longAt: 4 + 1 "Created: / 03-08-2006 / 10:46:26 / fm" ! y: anInteger - "Private - Set the y coordinate of the point." + "Private - Set the y coordinate of the point." self longAt: 4 + 1 put: anInteger "Created: / 03-08-2006 / 10:46:56 / fm" @@ -16399,7 +16419,7 @@ !Win32OperatingSystem::WinPointStructure methodsFor:'printing'! printOn: aStream - "Append a textual representation of the receiver to aStream." + "Append a textual representation of the receiver to aStream." aStream nextPutAll: self class name, ' { ', self asPoint printString, ' } ' "Created: / 03-08-2006 / 10:45:40 / fm" @@ -16408,12 +16428,12 @@ !Win32OperatingSystem class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.426 2011-08-24 13:44:54 vrany Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.427 2011-09-29 11:18:57 cg Exp $' ! version_CVS - ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.426 2011-08-24 13:44:54 vrany Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.427 2011-09-29 11:18:57 cg Exp $' ! version_SVN