Win32OperatingSystem.st
changeset 14632 6fe0dc1d5377
parent 14520 cc5f9141dded
child 14636 26765f6a6b11
--- a/Win32OperatingSystem.st	Fri Jan 04 17:19:30 2013 +0100
+++ b/Win32OperatingSystem.st	Tue Jan 08 18:55:11 2013 +0100
@@ -256,6 +256,8 @@
 /* # define SIGNALDEBUGWIN32     /* */
 
 # undef INT
+# undef UINT
+
 # undef Array
 # undef Number
 # undef Method
@@ -276,6 +278,8 @@
 # undef Process
 # undef NameSpace
 # undef Processor
+# undef String
+# undef Character
 
 # include <stdarg.h> /* */
 
@@ -369,8 +373,15 @@
 # ifdef __DEF_NameSpace
 #  define NameSpace __DEF_NameSpace
 # endif
-
-# define INT int
+# ifdef __DEF_String
+#  define String __DEF_String
+# endif
+# ifdef __DEF_Character
+#  define Character __DEF_Character
+# endif
+
+# define INT STX_INT
+# define UINT STX_UINT
 
 typedef int (*intf)(int);
 BOOL __signalUserInterruptWIN32(DWORD sig);
@@ -3768,7 +3779,7 @@
     ^ self primitiveFailed
 !
 
-shellExecute:hwnd lpOperation:lpOperation lpFile:lpFile lpParameters:lpParameters lpDirectory:lpDirectory nShowCmd:nShowCmd
+shellExecute:hwndArg lpOperation:lpOperationArg lpFile:lpFileArg lpParameters:lpParametersArg lpDirectory:lpDirectoryArg nShowCmd:nShowCmd
     "Opens or prints the specified file, which can be an executable, document file, or directory.
      If its a directory, an explorer window is opened (see example below).
      Can be used to open a browser or viewer on html-files, pdf-files etc"
@@ -3808,22 +3819,22 @@
 	    goto badArgument;
 	}
     }
-    if (((lpOperation == nil) || __isStringLike(lpOperation))
-     && ((lpFile == nil) || __isStringLike(lpFile))
-     && ((lpParameters == nil) || __isStringLike(lpParameters))
-     && ((lpDirectory == nil) || __isStringLike(lpDirectory))
+    if (((lpOperationArg == nil) || __isStringLike(lpOperationArg))
+     && ((lpFileArg == nil) || __isStringLike(lpFileArg))
+     && ((lpParametersArg == nil) || __isStringLike(lpParametersArg))
+     && ((lpDirectoryArg == nil) || __isStringLike(lpDirectoryArg))
     ) {
 	// 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));
+	shExecInfo.lpVerb        = (lpOperationArg != nil) ? __stringVal(lpOperationArg) : NULL;
+	shExecInfo.lpFile        = (lpFileArg != nil) ? __stringVal(lpFileArg) : NULL;
+	shExecInfo.lpParameters  = (lpParametersArg != nil) ? __stringVal(lpParametersArg) : NULL;
+	shExecInfo.lpDirectory   = (lpDirectoryArg != nil) ? __stringVal(lpDirectoryArg) : NULL;
+	if (hwndArg != nil) {
+	    if (__isExternalAddressLike(hwndArg)) {
+		shExecInfo.hwnd = (HANDLE)(__externalAddressVal(hwndArg));
 	    } else
 		goto badArgument;
 	}
@@ -3859,7 +3870,7 @@
 	self primitiveFailed:'invalid argument(s)'.
     ] ifFalse:[
 	(OperatingSystem errorHolderForNumber:errorNumber)
-	    parameter:lpFile;
+	    parameter:lpFileArg;
 	    reportError
     ].
 
@@ -5489,8 +5500,8 @@
 
     attr := self primGetFileAttributes:aPathName.
     attr notNil ifTrue:[
-        ^ (attr bitAnd: (FILE_ATTRIBUTE_DIRECTORY bitOr: FILE_ATTRIBUTE_READONLY ))
-            ~~ FILE_ATTRIBUTE_READONLY
+	^ (attr bitAnd: (FILE_ATTRIBUTE_DIRECTORY bitOr: FILE_ATTRIBUTE_READONLY ))
+	    ~~ FILE_ATTRIBUTE_READONLY
     ].
     ^ false
 
@@ -6903,18 +6914,18 @@
     spaceForTargetHandle := ExternalLong unprotectedNew.
     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:[
-        spaceForTargetHandle free.
-        self primitiveFailed.
-        ^ nil
+	spaceForTargetHandle free.
+	self primitiveFailed.
+	^ nil
     ].
 
     addr := spaceForTargetHandle value.
@@ -7949,25 +7960,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
@@ -7993,23 +8004,23 @@
     majorVer = __mkSmallInteger(verMajor);
 
     if (HIWORD(vsn) & 0x8000) {
-        sys = @symbol(win95);
+	sys = @symbol(win95);
     } else {
-        if ((verMajor > 5)
-         || ((verMajor == 5) && (verMinor >= 1))) {
-            sys = @symbol(xp);
-            if (verMajor >= 6) {
-                sys = @symbol(vista);
-                if (verMinor >= 1) {
-                    sys = @symbol(win7);
-                    if (verMinor >= 2) {
-                        sys = @symbol(win8);
-                    }
-                }
-            }
-        } else {
-            sys = @symbol(nt);
-        }
+	if ((verMajor > 5)
+	 || ((verMajor == 5) && (verMinor >= 1))) {
+	    sys = @symbol(xp);
+	    if (verMajor >= 6) {
+		sys = @symbol(vista);
+		if (verMinor >= 1) {
+		    sys = @symbol(win7);
+		    if (verMinor >= 2) {
+			sys = @symbol(win8);
+		    }
+		}
+	    }
+	} else {
+	    sys = @symbol(nt);
+	}
     }
     len = snprintf(vsnBuffer, sizeof(vsnBuffer), "%d.%d", verMajor, verMinor);
     rel = __MKSTRING_L(vsnBuffer, len);
@@ -8035,160 +8046,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.
@@ -8959,9 +8970,9 @@
     "Modified: / 16-04-2007 / 13:09:16 / cg"
 !
 
-deletePrinterDC: hwnd
+deletePrinterDC: hwndArg
     |return|
-    return := self primDeletePrinterDC:hwnd .
+    return := self primDeletePrinterDC:hwndArg .
     ^return
 
     "Created: / 27-07-2006 / 16:22:34 / fm"
@@ -9040,8 +9051,8 @@
     "Modified: / 04-10-2006 / 11:35:18 / cg"
 !
 
-getDeviceCaps:hwnd index: index
-    ^ self primGetDeviceCaps:hwnd index: index
+getDeviceCaps:hwndArg index: index
+    ^ self primGetDeviceCaps:hwndArg index: index
 
     "Created: / 28-07-2006 / 17:45:27 / fm"
     "Modified: / 04-10-2006 / 11:35:29 / cg"
@@ -9236,7 +9247,7 @@
     "Created: / 27-07-2006 / 14:40:41 / fm"
 !
 
-primAbortDoc:hwnd
+primAbortDoc:hwndArg
     <apicall: int32 "AbortDoc" (handle) module: "gdi32.dll" >
     self primitiveFailed.
 
@@ -9266,7 +9277,7 @@
     "Modified: / 27-07-2006 / 16:26:25 / fm"
 !
 
-primDeletePrinterDC: hwnd
+primDeletePrinterDC: hwndArg
     <apicall: bool "DeleteDC" ( handle ) module: "gdi32.dll" >
     self primitiveFailed.
 !
@@ -9293,7 +9304,7 @@
     "Created: / 27-07-2006 / 15:02:14 / fm"
 !
 
-primEndDoc:hwnd
+primEndDoc:hwndArg
     <apicall: int32 "EndDoc" (handle) module: "gdi32.dll" >
     self primitiveFailed.
 
@@ -9315,7 +9326,7 @@
     "Created: / 27-07-2006 / 19:31:31 / fm"
 !
 
-primEndPage:hwnd
+primEndPage:hwndArg
     <apicall: int32 "EndPage" (handle) module: "gdi32.dll" >
     self primitiveFailed.
 
@@ -9337,7 +9348,7 @@
     "Created: / 27-07-2006 / 19:30:50 / fm"
 !
 
-primGetDeviceCaps:hwnd index: index
+primGetDeviceCaps:hwndArg index: index
     "Returns driver specific information about the device"
 
     <apicall: int32 "GetDeviceCaps" (handle int32) module: "gdi32.dll" >
@@ -9347,7 +9358,7 @@
     "Modified: / 04-10-2006 / 11:38:06 / cg"
 !
 
-primGetPrinter:hwnd level:index informationBuffer:informationBuffer bufferSize:bufferSize bufferNeededSize:bufferNeededSize
+primGetPrinter:hwndArg level:index informationBuffer:informationBuffer bufferSize:bufferSize bufferNeededSize:bufferNeededSize
     <apicall: bool "GetPrinterA" (handle dword pointer dword pointer) module: "winspool.drv" >
     self primitiveFailed.
 
@@ -9425,7 +9436,7 @@
     self primitiveFailed.
 !
 
-primStartDoc:hwnd docInfo: aDocInfo
+primStartDoc:hwndArg docInfo: aDocInfo
     "Returns a jobId"
     <apicall: int32 "StartDocA" (handle pointer) module: "gdi32.dll" >
     self primitiveFailed.
@@ -9433,7 +9444,7 @@
     "Modified: / 31-07-2006 / 11:47:10 / fm"
 !
 
-primStartPage:hwnd
+primStartPage:hwndArg
     <apicall: int32 "StartPage" (handle) module: "gdi32.dll" >
     self primitiveFailed.
 
@@ -13498,174 +13509,174 @@
 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]
     register an exe for shell-open:
-                                                                        [exBegin]
-        |k stx shell open cmd st_af edit st owl list id|
-
-        k := Win32OperatingSystem registryEntry key:'HKEY_CURRENT_USER\Software\Classes\Applications'.
-        stx := k createSubKeyNamed:'SmalltalkX.exe'.
-        shell := stx createSubKeyNamed:'shell'.
-        open := shell createSubKeyNamed:'open'.
-        cmd := open createSubKeyNamed:'command'.
-        cmd defaultValue:(Character doubleQuote asString,OperatingSystem nameOfSTXExecutable,Character doubleQuote,
-                         ' ',Character doubleQuote,'%1',Character doubleQuote).
-
-        k := Win32OperatingSystem registryEntry key:'HKEY_CURRENT_USER\Software\Classes'.
-        st_af := k createSubKeyNamed:'st_auto_file'.
-        shell := st_af createSubKeyNamed:'shell'.
-        open := shell createSubKeyNamed:'open'.
-        cmd := open createSubKeyNamed:'command'.
-        cmd defaultValue:(Character doubleQuote asString,OperatingSystem nameOfSTXExecutable,Character doubleQuote,
-                         ' --open ',Character doubleQuote,'%1',Character doubleQuote).
-        edit := shell createSubKeyNamed:'edit'.
-        cmd := edit createSubKeyNamed:'command'.
-        cmd defaultValue:(Character doubleQuote asString,OperatingSystem nameOfSTXExecutable,Character doubleQuote,
-                         ' --edit ',Character doubleQuote,'%1',Character doubleQuote).
-
-        k := Win32OperatingSystem registryEntry key:'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts'.
-        st := k createSubKeyNamed:'.st'.
-        owl := st createSubKeyNamed:'OpenWithList'.
-        list := owl valueNames.
-        (list contains:[:k | (owl valueNamed:k) = 'SmalltalkX.exe']) ifTrue:[
-            Transcript showCR:'already registered.'.
-        ] ifFalse:[
-            id := ($a to:$z) detect:[:k | (list includes:(k asString)) not] ifNone:nil.
-            owl valueNamed:id asString put:'SmalltalkX.exe'.
-        ]
-                                                                        [exEnd]
+									[exBegin]
+	|k stx shell open cmd st_af edit st owl list id|
+
+	k := Win32OperatingSystem registryEntry key:'HKEY_CURRENT_USER\Software\Classes\Applications'.
+	stx := k createSubKeyNamed:'SmalltalkX.exe'.
+	shell := stx createSubKeyNamed:'shell'.
+	open := shell createSubKeyNamed:'open'.
+	cmd := open createSubKeyNamed:'command'.
+	cmd defaultValue:(Character doubleQuote asString,OperatingSystem nameOfSTXExecutable,Character doubleQuote,
+			 ' ',Character doubleQuote,'%1',Character doubleQuote).
+
+	k := Win32OperatingSystem registryEntry key:'HKEY_CURRENT_USER\Software\Classes'.
+	st_af := k createSubKeyNamed:'st_auto_file'.
+	shell := st_af createSubKeyNamed:'shell'.
+	open := shell createSubKeyNamed:'open'.
+	cmd := open createSubKeyNamed:'command'.
+	cmd defaultValue:(Character doubleQuote asString,OperatingSystem nameOfSTXExecutable,Character doubleQuote,
+			 ' --open ',Character doubleQuote,'%1',Character doubleQuote).
+	edit := shell createSubKeyNamed:'edit'.
+	cmd := edit createSubKeyNamed:'command'.
+	cmd defaultValue:(Character doubleQuote asString,OperatingSystem nameOfSTXExecutable,Character doubleQuote,
+			 ' --edit ',Character doubleQuote,'%1',Character doubleQuote).
+
+	k := Win32OperatingSystem registryEntry key:'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts'.
+	st := k createSubKeyNamed:'.st'.
+	owl := st createSubKeyNamed:'OpenWithList'.
+	list := owl valueNames.
+	(list contains:[:k | (owl valueNamed:k) = 'SmalltalkX.exe']) ifTrue:[
+	    Transcript showCR:'already registered.'.
+	] ifFalse:[
+	    id := ($a to:$z) detect:[:k | (list includes:(k asString)) not] ifNone:nil.
+	    owl valueNamed:id asString put:'SmalltalkX.exe'.
+	]
+									[exEnd]
 
 
 
@@ -14382,25 +14393,25 @@
 
     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)
-             && (_retVal != ERROR_NO_MORE_ITEMS)) {
-                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)
+	     && (_retVal != ERROR_NO_MORE_ITEMS)) {
+		errorNumber = __MKSMALLINT(_retVal);
+	    }
+	}
     }
 %}.
     errorNumber notNil ifTrue:[
-        (OperatingSystem errorHolderForNumber:errorNumber) reportError.
+	(OperatingSystem errorHolderForNumber:errorNumber) reportError.
     ].
     ^ valueName
 
@@ -14850,12 +14861,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.
     ]
 ! !
 
@@ -14925,7 +14936,7 @@
     HKEY key;
     OBJ t;
 
-    key = __longIntVal(integerHandleValue);
+    key = (HKEY)__longIntVal(integerHandleValue);
     if (! key) {
 	RETURN (nil);
     }
@@ -15203,9 +15214,13 @@
 	errSym = @symbol(badArgument);
 	goto bad;
     }
+#if __POINTER_SIZE__ == 8
+    posLo = pos64 & 0xFFFFFFFF;
+    posHi = (pos64 >> 32) & 0xFFFFFFFF;
+#else
     posLo = pos64.lo;
     posHi = pos64.hi;
-
+#endif
     posLo = SetFilePointer(hFile, posLo, &posHi, moveHow);
     if (posLo == 0xFFFFFFFF) {
 	int lastError;
@@ -15221,10 +15236,14 @@
     if (posHi == 0) {
 	RETURN (__MKUINT( posLo ));
     }
+#if __POINTER_SIZE__ == 8
+    newPos64 = posLo | (posHi << 32);
+    RETURN ( __MKUINT(newPos64) );
+#else
     newPos64.lo = posLo;
     newPos64.hi = posHi;
-
     RETURN ( __MKUINT64(&newPos64) );
+#endif
 
 bad: ;
 %}.
@@ -16452,11 +16471,11 @@
 !Win32OperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.442 2012-11-21 16:34:54 anwild Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.443 2013-01-08 17:55:11 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.442 2012-11-21 16:34:54 anwild Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.443 2013-01-08 17:55:11 cg Exp $'
 !
 
 version_SVN