#FEATURE by cg
authorClaus Gittinger <cg@exept.de>
Wed, 26 Jul 2017 18:09:05 +0200
changeset 22122 59d2b8361ed0
parent 22121 60c9ff1ec454
child 22123 c128e86f09df
#FEATURE by cg registry keys and values may now be all unicode16strings class: Win32OperatingSystem::RegistryEntry comment/format in: #deleteSubKeyNamed:flags: #subKeyAtIndex: #subKeyNameAndClassAtIndex: #subKeyNamed: #subKeyNamed:createIfAbsent: #subKeyNamed:flags: #subKeyNamed:flags:createIfAbsent: #valueNameAtIndex: #valueNamed: #valueNamed:put: changed: #deleteValueNamed: #remoteKeyOnHost:
Win32OperatingSystem.st
--- a/Win32OperatingSystem.st	Wed Jul 26 17:22:50 2017 +0200
+++ b/Win32OperatingSystem.st	Wed Jul 26 18:09:05 2017 +0200
@@ -1871,879 +1871,892 @@
       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_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;
-
-	    case ERROR_FILE_EXISTS:
-		sym = @symbol(ERROR_FILE_EXISTS);
-		typ = @symbol(existingReferentSignal);
-		break;
-
-	    case ERROR_ALREADY_EXISTS:
-		sym = @symbol(ERROR_ALREADY_EXISTS);
-		typ = @symbol(existingReferentSignal);
-		break;
-
-	    default:
-		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 - that's 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: // 53
+                sym = @symbol(ERROR_BAD_NETPATH);
+                typ = @symbol(peerFaultSignal);
+                break;
+
+            case ERROR_NETWORK_BUSY: // 54
+                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;
+
+            case ERROR_FILE_EXISTS:
+                sym = @symbol(ERROR_FILE_EXISTS);
+                typ = @symbol(existingReferentSignal);
+                break;
+
+            case ERROR_ALREADY_EXISTS:
+                sym = @symbol(ERROR_ALREADY_EXISTS);
+                typ = @symbol(existingReferentSignal);
+                break;
+
+            default:
+                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 WSAEADDRINUSE
-	    case WSAEADDRINUSE:
-		sym = @symbol(WSAEADDRINUSE);
-		typ = @symbol(existingReferentSignal);
-		break;
+            case WSAEADDRINUSE:
+                sym = @symbol(WSAEADDRINUSE);
+                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 WSAETIMEDOUT
-	    case WSAETIMEDOUT:
-		sym = @symbol(ETIMEDOUT);
-		typ = @symbol(peerFaultSignal);
-		break;
+            case WSAETIMEDOUT:
+                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 WSAECONNREFUSED
-	    case WSAECONNREFUSED:
-		sym = @symbol(ECONNREFUSED);
-		typ = @symbol(peerFaultSignal);
-		break;
+            case WSAECONNREFUSED:
+                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 WSAHOSTUNREACH
-	    case WSAHOSTUNREACH:
-		sym = @symbol(EHOSTUNREACH);
-		typ = @symbol(peerFaultSignal);
-		break;
+            case WSAHOSTUNREACH:
+                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 WSAEACCES
-	    case WSAEACCES:
-		sym = @symbol(WSAEACCES);
-		typ = @symbol(badAccessorSignal);
-		break;
+            case WSAEACCES:
+                sym = @symbol(WSAEACCES);
+                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
+#ifdef RPC_S_INVALID_NET_ADDR
+            case RPC_S_INVALID_NET_ADDR:
+                sym = @symbol(RPC_S_INVALID_NET_ADDR);
+                typ = @symbol(peerFaultSignal);
+                break;
+#endif
+#ifdef ERROR_BAD_NETPATH
+            case ERROR_BAD_NETPATH: // 53
+                sym = @symbol(ERROR_BAD_NETPATH);
+                typ = @symbol(peerFaultSignal);
+                break;
+#endif
+
+
+            default:
+                break;
+        }
       }
     }
 %}.
     holder := OSErrorHolder new.
     sym isNil ifTrue:[
-	sym := #ERROR_OTHER.
-	errNr notNil ifTrue:[
-	    "keep symbols as symbols"
-	    holder parameter:(errNr isString ifTrue:[errNr] ifFalse:[errNr asString]).
-	].
-    ].
-    holder errorSymbol:sym errorCategory:typ.
+        sym := #ERROR_OTHER.
+        errNr notNil ifTrue:[
+            "keep symbols as symbols"
+            holder parameter:(errNr isString ifTrue:[errNr] ifFalse:[errNr asString]).
+        ].
+    ].
+    holder errorNumber:errNr errorSymbol:sym errorCategory:typ.
     ^ holder
 
 
@@ -2755,6 +2768,7 @@
      self errorHolderForNumber:(self errorNumberFor:#EIO)
      self errorHolderForNumber:(self errorNumberFor:#ENXIO)
      self errorHolderForNumber:(self errorNumberFor:#E_NOINTERFACE)
+     self errorHolderForNumber:1707
     "
 !
 
@@ -15884,13 +15898,14 @@
 deleteSubKeyNamed:subKeyString flags:flags
     "delete a key below mySelf.
      Return true on success.
+     subKeyString may be a string or unicode16string;
      flags may be one of:
-	#KEY_WOW64_64KEY to force access to the 64Bit Windows key,
-	#KEY_WOW64_32KEY to force access to the 32Bit Windows key,
-	or nil, to access the key (32/64) for the current application.
+        #KEY_WOW64_64KEY to force access to the 64Bit Windows key,
+        #KEY_WOW64_32KEY to force access to the 32Bit Windows key,
+        or nil, to access the key (32/64) for the current application.
 
      CAVEAT: due to a missing library entry in the BCC system,
-	     the flags are currently ignored"
+             the flags are currently ignored"
 
     |subKeyStringZ errorNumber|
 
@@ -15908,40 +15923,40 @@
     int _flags = 0;
 
     if (flags != nil) {
-	if (flags == @symbol(KEY_WOW64_64KEY)) {
-	    _flags = KEY_WOW64_64KEY;
-	} else if (flags == @symbol(KEY_WOW64_32KEY)) {
-	    _flags = KEY_WOW64_32KEY;
-	} else {
-	    errorNumber = @symbol(badArgument2);
-	    goto out;
-	}
+        if (flags == @symbol(KEY_WOW64_64KEY)) {
+            _flags = KEY_WOW64_64KEY;
+        } else if (flags == @symbol(KEY_WOW64_32KEY)) {
+            _flags = KEY_WOW64_32KEY;
+        } else {
+            errorNumber = @symbol(badArgument2);
+            goto out;
+        }
     }
 
     if (__isExternalAddressLike(__INST(handle))
      && __isUnicode16String(subKeyStringZ)) {
-	myKey = (HKEY)__externalAddressVal(__INST(handle));
+        myKey = (HKEY)__externalAddressVal(__INST(handle));
 #ifdef __BORLANDC__
-	_retVal = RegDeleteKeyW(myKey, __unicode16StringVal(subKeyStringZ));
-#else
-	_retVal = RegDeleteKeyExW(myKey,
-		    __unicode16StringVal(subKeyStringZ),
-		    _flags,
-		    0); // reserved
-#endif
-	if (_retVal == ERROR_SUCCESS) {
-	    RETURN (true);
-	}
-	if ((_retVal != ERROR_PATH_NOT_FOUND)
-	 && (_retVal != ERROR_FILE_NOT_FOUND)) {
-	    errorNumber = __MKSMALLINT(_retVal);
-	}
+        _retVal = RegDeleteKeyW(myKey, __unicode16StringVal(subKeyStringZ));
+#else
+        _retVal = RegDeleteKeyExW(myKey,
+                    __unicode16StringVal(subKeyStringZ),
+                    _flags,
+                    0); // reserved
+#endif
+        if (_retVal == ERROR_SUCCESS) {
+            RETURN (true);
+        }
+        if ((_retVal != ERROR_PATH_NOT_FOUND)
+         && (_retVal != ERROR_FILE_NOT_FOUND)) {
+            errorNumber = __MKSMALLINT(_retVal);
+        }
     }
 out:;
 %}.
 
     errorNumber notNil ifTrue:[
-	(OperatingSystem errorHolderForNumber:errorNumber) reportError.
+        (OperatingSystem errorHolderForNumber:errorNumber) reportError.
     ].
     ^ false
 
@@ -15952,46 +15967,88 @@
      sub := top createSubKeyNamed:'FooBarBaz'.
      top deleteSubKeyNamed:'FooBarBaz' flags:nil.
     "
+
+    "
+     |top sub|
+
+     top := self key:'HKEY_CURRENT_USER\Software\ExeptTest'.
+     top deleteSubKeyNamed:'Fooαβγ' flags:nil.
+    "
 !
 
 remoteKeyOnHost:hostName
     "return the corresponding registry entry from
-     a remote computers registry."
-
-    |newEntry remoteHandle errorNumber|
-
+     a remote computer's registry."
+
+    |hostNameZ newEntry remoteHandle errorNumber|
+
+    hostName isSingleByteString ifFalse:[
+        hostNameZ := hostName asUnicode16StringZ.
+    ].
 %{
     HKEY myKey, remoteKey = 0;
     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);
-	    }
-	}
-    }
+    if (__isExternalAddressLike(__INST(handle))) {
+        myKey = (HKEY)__externalAddressVal(__INST(handle));
+
+        if ((hostNameZ != nil) && __isUnicode16String(hostNameZ)) {
+            _retVal = RegConnectRegistryW(__unicode16StringVal(hostNameZ), myKey, &remoteKey);
+        } else if (__isStringLike(hostName)) {
+            _retVal = RegConnectRegistryA(__stringVal(hostName), myKey, &remoteKey);
+        } else
+            goto badArg;
+
+        switch (_retVal) {
+            case ERROR_SUCCESS:
+                remoteHandle = __MKEXTERNALADDRESS(remoteKey);
+                break;
+
+            case ERROR_PATH_NOT_FOUND:
+            case ERROR_FILE_NOT_FOUND:
+                break;
+
+            default:
+                errorNumber = __MKSMALLINT(_retVal);
+                break;
+        }
+    }
+  badArg: ;;
 %}.
     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.
+    ].
+    self primitiveFailed:'bad argument'.
     ^ nil
 
-    "
+    "will report a missing peer:
+
      |top remote|
 
      top := self key:'HKEY_LOCAL_MACHINE'.
-     remote := top remoteKeyOnHost:'BETTI'
-    "
+     remote := top remoteKeyOnHost:'fooBarBaz'
+    "
+
+    "will either report a missing peer or endpoint:
+
+     |top remote|
+
+     top := self key:'HKEY_LOCAL_MACHINE'.
+     remote := top remoteKeyOnHost:'www.exept.de'
+    "
+
+    "if the host exists, you'll likely get a permission error:
+     |top remote|
+
+     top := self key:'HKEY_LOCAL_MACHINE'.
+     remote := top remoteKeyOnHost:'sr-laptop'
+    "
+
     "
      |top remote|
 
@@ -16013,111 +16070,154 @@
 !
 
 subKeyAtIndex:subKeyIndex
-    "return a new registry entry below mySelf for the given subKey index.
-     Return nil if no such key exists"
-
-    |subKeyName subKeyClassName errorNumber|
-
-%{
+    "return a new registry entry, below mySelf for the given subKey index.
+     Return nil if no such key exists.
+     To get the subkeys, call with increasing index, until a nil is returned."
+
+    |subKeyName errorNumber|
+
+%{
+#ifndef MAX_NUMCHARS
+# define MAX_NUMCHARS    256
+#endif
     HKEY myKey, subKey = 0;
-    char nameBuffer[256];
-    DWORD nameSize = sizeof(nameBuffer) - 1;
-    char classNameBuffer[256];
-    DWORD classNameSize = sizeof(classNameBuffer) - 1;
+    WCHAR nameBuffer[MAX_NUMCHARS];
+    DWORD nameSize = MAX_NUMCHARS - 1;
+    WCHAR classNameBuffer[MAX_NUMCHARS];
+    DWORD classNameSize = MAX_NUMCHARS - 1;
     FILETIME modificationTime;
     int _retVal;
 
     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 = RegEnumKeyExW(myKey, __intVal(subKeyIndex),
+                         nameBuffer, &nameSize,
+                         NULL,
+                         classNameBuffer, &classNameSize,
+                         &modificationTime)) == ERROR_SUCCESS) {
+            nameBuffer[nameSize] = 0;
+            subKeyName = __MKU16STRING(nameBuffer);
+        } 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.
+        subKeyName := subKeyName asSingleByteStringIfPossible.
+        ^ self subKeyNamed:subKeyName.
     ].
     errorNumber notNil ifTrue:[
-	(OperatingSystem errorHolderForNumber:errorNumber) reportError.
-    ].
+        (OperatingSystem errorHolderForNumber:errorNumber) reportError.
+    ].
+    ^ nil
+
+    "
+     |top sub|
+
+     top := self key:'HKEY_CURRENT_USER'.
+     sub := top subKeyAtIndex:0.  
+     sub := top subKeyAtIndex:1.  
+     sub := top subKeyAtIndex:2.  
+    "
+
+    "
+     |top sub|
+
+     top := self key:'HKEY_CURRENT_USER\Software\ExeptTest'.
+     sub := top subKeyAtIndex:0.  
+     sub := top subKeyAtIndex:1.  
+    "
+!
+
+subKeyNameAndClassAtIndex:subKeyIndex
+    "return the name and className of the given subKey at index as a pair.
+     Each of the pair may be a string or unicode16string.
+     Return nil if no such key exists."
+
+    |subKeyName subKeyClassName errorNumber|
+
+%{
+#ifndef MAX_NUMCHARS
+# define MAX_NUMCHARS    256
+#endif
+
+    HKEY myKey, subKey = 0;
+    WCHAR nameBuffer[MAX_NUMCHARS];
+    WCHAR classNameBuffer[MAX_NUMCHARS];
+    DWORD nameSize = MAX_NUMCHARS - 1;
+    DWORD classNameSize = MAX_NUMCHARS - 1;
+    FILETIME modificationTime;
+    int _retVal;
+
+    if (__isExternalAddressLike(__INST(handle))
+     && __isSmallInteger(subKeyIndex)) {
+        myKey = (HKEY)__externalAddressVal(__INST(handle));
+        _retVal = RegEnumKeyExW(myKey, __intVal(subKeyIndex),
+                                       nameBuffer, &nameSize,
+                                       NULL,
+                                       classNameBuffer, &classNameSize,
+                                       &modificationTime);
+
+        if (_retVal == ERROR_SUCCESS) {     
+            nameBuffer[nameSize] = 0;
+            classNameBuffer[classNameSize] = 0;
+            subKeyName = __mkStringOrU16String_maxlen(nameBuffer, nameSize);
+            subKeyClassName = __mkStringOrU16String_maxlen(classNameBuffer, classNameSize);
+        } else {
+            if ((_retVal != ERROR_PATH_NOT_FOUND)
+             && (_retVal != ERROR_FILE_NOT_FOUND)
+             && (_retVal != ERROR_NO_MORE_ITEMS)) {
+                errorNumber = __MKSMALLINT(_retVal);
+            }
+        }
+    }
+%}.
+    subKeyName notNil ifTrue:[
+        ^ {subKeyName . subKeyClassName}.
+    ].
+    errorNumber notNil ifTrue:[
+        (OperatingSystem errorHolderForNumber:errorNumber) reportError.
+    ].
+    "/ no more items
     ^ nil
 
     "
      |top sub|
 
      top := self key:'HKEY_LOCAL_MACHINE'.
-     sub := top subKeyAtIndex:0
-    "
-!
-
-subKeyNameAndClassAtIndex:subKeyIndex
-    "return the name and className of the given subKey at index as a pair.
-     Return nil if no such key exists"
-
-    |subKeyName subKeyClassName errorNumber|
-
-%{
-    HKEY myKey, subKey = 0;
-    char nameBuffer[256];
-    DWORD nameSize = sizeof(nameBuffer) - 1;
-    char classNameBuffer[256];
-    DWORD classNameSize = sizeof(classNameBuffer) - 1;
-    FILETIME modificationTime;
-    int _retVal;
-
-    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);
-	    }
-	}
-    }
-%}.
-    subKeyName notNil ifTrue:[
-	^ {subKeyName . subKeyClassName}.
-    ].
-    errorNumber notNil ifTrue:[
-	(OperatingSystem errorHolderForNumber:errorNumber) reportError.
-    ].
-    ^ nil
+     sub := top subKeyNameAndClassAtIndex:0.
+     sub := top subKeyNameAndClassAtIndex:1.
+    "
+
 
     "
      |top sub|
 
-     top := self key:'HKEY_LOCAL_MACHINE'.
-     sub := top subKeyNameAndClassAtIndex:0
+     top := self key:'HKEY_CURRENT_USER\Software\'.
+     sub := top subKeyNameAndClassAtIndex:0.     
+     sub := top subKeyNameAndClassAtIndex:1.      
+     sub := top subKeyNameAndClassAtIndex:2.     
+     sub := top subKeyNameAndClassAtIndex:3.     
+     sub := top subKeyNameAndClassAtIndex:4.     
+    "
+
+    "
+     |top sub|
+
+     top := self key:'HKEY_CURRENT_USER\Software\ExeptTest'.
+     sub := top subKeyNameAndClassAtIndex:0.      
+     sub := top subKeyNameAndClassAtIndex:1.     
     "
 !
 
 subKeyNamed:subKeyString
     "return a new registry entry below mySelf with the given subKey.
+     subKeyString may be a string or unicode16string.
      Return nil if no such key exists"
 
     ^ self subKeyNamed:subKeyString flags:nil createIfAbsent:false
@@ -16132,6 +16232,7 @@
 
 subKeyNamed:subKeyString createIfAbsent:createIfAbsent
     "return a new registry entry below mySelf with the given subKey.
+     subKeyString may be a string or unicode16string.
      If no such key exists and createIfAbsent is true, the key is created.
      Otherwise, nil is returned"
 
@@ -16141,10 +16242,11 @@
 subKeyNamed:subKeyString flags:flags
     "return a new registry entry below mySelf with the given subKey.
      Return nil if no such key exists.
+     subKeyString may be a string or unicode16string.
      flags may be one of:
-	#KEY_WOW64_64KEY to force access to the 64Bit Windows key,
-	#KEY_WOW64_32KEY to force access to the 32Bit Windows key,
-	or nil, to access the key (32/64) for the current application"
+        #KEY_WOW64_64KEY to force access to the 64Bit Windows key,
+        #KEY_WOW64_32KEY to force access to the 32Bit Windows key,
+        or nil, to access the key (32/64) for the current application"
 
 
     ^ self subKeyNamed:subKeyString flags:flags createIfAbsent:false
@@ -16154,10 +16256,11 @@
     "return a new registry entry below mySelf with the given subKey.
      If no such key exists and createIfAbsent is true, the key is created.
      Otherwise, nil is returned.
+     subKeyString may be a string or unicode16string.
      flags may be one of:
-	#KEY_WOW64_64KEY to force access to the 64Bit Windows key,
-	#KEY_WOW64_32KEY to force access to the 32Bit Windows key,
-	or nil, to access the key (32/64) for the current application"
+        #KEY_WOW64_64KEY to force access to the 64Bit Windows key,
+        #KEY_WOW64_32KEY to force access to the 32Bit Windows key,
+        or nil, to access the key (32/64) for the current application"
 
     |subKeyStringZ newEntry subHandle errorNumber disposition|
 
@@ -16176,72 +16279,72 @@
     int _disposition = 0;
 
     if (flags != nil) {
-	if (flags == @symbol(KEY_WOW64_64KEY)) {
-	    _flags = KEY_WOW64_64KEY;
-	} else if (flags == @symbol(KEY_WOW64_32KEY)) {
-	    _flags = KEY_WOW64_32KEY;
-	} else {
-	    errorNumber = @symbol(badArgument2);
-	    goto out;
-	}
+        if (flags == @symbol(KEY_WOW64_64KEY)) {
+            _flags = KEY_WOW64_64KEY;
+        } else if (flags == @symbol(KEY_WOW64_32KEY)) {
+            _flags = KEY_WOW64_32KEY;
+        } else {
+            errorNumber = @symbol(badArgument2);
+            goto out;
+        }
     }
 
     if (__isExternalAddressLike(__INST(handle))
-	&& __isUnicode16String(subKeyStringZ)) {
-	myKey = (HKEY)__externalAddressVal(__INST(handle));
-	if (createIfAbsent == true) {
-	    _retVal = RegCreateKeyExW(myKey,
-			__unicode16StringVal(subKeyStringZ),
-			0,      // reserved
-			NULL,   // class
-			0,      // options
-			KEY_ALL_ACCESS|_flags,   // rights
-			NULL,   // securityAttributes - handle cannot be inherited
-			&subKey,
-			&_disposition);  // disposition (created vs. opened)
-	    disposition = _disposition == REG_CREATED_NEW_KEY ? true : false;
-	} else {
-	    _retVal = RegOpenKeyExW(
-		myKey,
-		__unicode16StringVal(subKeyStringZ),
-		0,
-		KEY_ALL_ACCESS|_flags,
-		&subKey);
-
-	    if (!(_retVal == 0)) {
-		// try again with less permission
-		_retVal = RegOpenKeyExW(
-		    myKey,
-		    __unicode16StringVal(subKeyStringZ),
-		    0,
-		    KEY_READ |_flags,
-		    &subKey);
-	    }
-
-	    disposition = false;
-	}
-	if (_retVal == ERROR_SUCCESS) {
-	    subHandle = __MKEXTERNALADDRESS(subKey);
-	} else {
-	    if ((_retVal != ERROR_PATH_NOT_FOUND)
-	     && (_retVal != ERROR_FILE_NOT_FOUND)) {
-		errorNumber = __MKSMALLINT(_retVal);
-	    }
-	}
+        && __isUnicode16String(subKeyStringZ)) {
+        myKey = (HKEY)__externalAddressVal(__INST(handle));
+        if (createIfAbsent == true) {
+            _retVal = RegCreateKeyExW(myKey,
+                        __unicode16StringVal(subKeyStringZ),
+                        0,      // reserved
+                        NULL,   // class
+                        0,      // options
+                        KEY_ALL_ACCESS|_flags,   // rights
+                        NULL,   // securityAttributes - handle cannot be inherited
+                        &subKey,
+                        &_disposition);  // disposition (created vs. opened)
+            disposition = _disposition == REG_CREATED_NEW_KEY ? true : false;
+        } else {
+            _retVal = RegOpenKeyExW(
+                myKey,
+                __unicode16StringVal(subKeyStringZ),
+                0,
+                KEY_ALL_ACCESS|_flags,
+                &subKey);
+
+            if (!(_retVal == 0)) {
+                // try again with less permission
+                _retVal = RegOpenKeyExW(
+                    myKey,
+                    __unicode16StringVal(subKeyStringZ),
+                    0,
+                    KEY_READ |_flags,
+                    &subKey);
+            }
+
+            disposition = false;
+        }
+        if (_retVal == ERROR_SUCCESS) {
+            subHandle = __MKEXTERNALADDRESS(subKey);
+        } else {
+            if ((_retVal != ERROR_PATH_NOT_FOUND)
+             && (_retVal != ERROR_FILE_NOT_FOUND)) {
+                errorNumber = __MKSMALLINT(_retVal);
+            }
+        }
     }
 out:;
 %}.
     subHandle notNil ifTrue:[
-	newEntry := self class basicNew
-			setHandle:subHandle
-			path:((path ? '?') , self class separator asString , subKeyString)
-			isNew:disposition.
-
-	newEntry registerForFinalization.
-	^ newEntry.
+        newEntry := self class basicNew
+                        setHandle:subHandle
+                        path:((path ? '?') , self class separator asString , subKeyString)
+                        isNew:disposition.
+
+        newEntry registerForFinalization.
+        ^ newEntry.
     ].
     errorNumber notNil ifTrue:[
-	(OperatingSystem errorHolderForNumber:errorNumber) reportProceedableError.
+        (OperatingSystem errorHolderForNumber:errorNumber) reportProceedableError.
     ].
     ^ nil
 
@@ -16250,13 +16353,22 @@
 
      top := self key:'HKEY_LOCAL_MACHINE'.
      sub := top subKeyNamed:'Software' flags:nil createIfAbsent:false
-
+    "
+
+    " regular (iso8859) key:
      |top sub|
 
      top := self key:'HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit'.
      top valueNamed:'CurrentVersion'.
      sub := top subKeyNamed:'1.8' flags:#KEY_WOW64_64KEY createIfAbsent:false.
     "
+
+    "unicode key:
+     |top sub|
+
+     top := self key:'HKEY_CURRENT_USER\Software\ExeptTest'.
+     sub := top subKeyNamed:'Fooαβγ' flags:#KEY_WOW64_64KEY createIfAbsent:true.
+    "
 ! !
 
 !Win32OperatingSystem::RegistryEntry methodsFor:'accessing values'!
@@ -16287,55 +16399,70 @@
 
 deleteValueNamed:aValueName
     "delete a value.
+     aValueName may be a string or unicode16string;
      Return true on success."
 
-    |errorNumber|
+    |errorNumber valueNameZ|
+
+    valueNameZ := aValueName asUnicode16StringZ.
 
 %{
     HKEY myKey;
     int _retVal;
 
     if (__isExternalAddressLike(__INST(handle))
-     && __isStringLike(aValueName)) {
-	myKey = (HKEY)__externalAddressVal(__INST(handle));
-	if ((_retVal = RegDeleteValueA(myKey, __stringVal(aValueName))) == ERROR_SUCCESS) {
-	    RETURN (true);
-	}
-	if ((_retVal != ERROR_PATH_NOT_FOUND)
-	 && (_retVal != ERROR_FILE_NOT_FOUND)) {
-	    errorNumber = __MKSMALLINT(_retVal);
-	}
+     && __isUnicode16String(valueNameZ)) {
+        myKey = (HKEY)__externalAddressVal(__INST(handle));
+        if ((_retVal = RegDeleteValueW(myKey, __unicode16StringVal(valueNameZ))) == 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
+
+    "
+     |top sub|
+
+     top := self key:'HKEY_CURRENT_USER'.
+     sub := top valueNamed:'BLA' put:'FooBarBaz'.
+     top deleteValueNamed:'BLA'.
+    "
 !
 
 valueNameAtIndex:valueIndex
     "return a value's name for the given value index.
-     Return nil if no such value exists"
+     The returned name may be a string or unicode16string.
+     Return nil if no such value exists.
+     To get the value names,
+     call with increasing index, until a nil is returned."
 
     |valueName errorNumber|
 
 %{
+#define NUM_CHARS 256
     HKEY myKey;
-    char nameBuffer[256];
-    DWORD nameSize = sizeof(nameBuffer) - 1;
+    WCHAR nameBuffer[NUM_CHARS];
+    DWORD nameSize = NUM_CHARS - 1;
     DWORD valueType;
     int _retVal;
 
     if (__isExternalAddressLike(__INST(handle))
      && __isSmallInteger(valueIndex)) {
         myKey = (HKEY)__externalAddressVal(__INST(handle));
-        if ((_retVal = RegEnumValueA(myKey, __intVal(valueIndex),
+        if ((_retVal = RegEnumValueW(myKey, __intVal(valueIndex),
                          nameBuffer, &nameSize,
                          NULL,
                          &valueType,
                          NULL, NULL)) == ERROR_SUCCESS) {
-            nameBuffer[nameSize] = '\0';
-            valueName = __MKSTRING(nameBuffer);
+            nameBuffer[nameSize] = 0;
+            valueName = __MKU16STRING(nameBuffer);
         } else {
             if ((_retVal != ERROR_PATH_NOT_FOUND)
              && (_retVal != ERROR_FILE_NOT_FOUND)
@@ -16348,13 +16475,25 @@
     errorNumber notNil ifTrue:[
         (OperatingSystem errorHolderForNumber:errorNumber) reportError.
     ].
+    valueName notNil ifTrue:[
+        valueName := valueName asSingleByteStringIfPossible
+    ].
     ^ valueName
 
     "
      |top sub|
 
      top := self key:'HKEY_LOCAL_MACHINE'.
-     sub := top subKeyAtIndex:0
+     sub := top valueNameAtIndex:0
+    "
+    "
+     |top sub|
+
+     top := self key:'HKEY_CURRENT_USER\Software\ExeptTest\Foo'.
+     sub := top valueNameAtIndex:0.     
+     sub := top valueNameAtIndex:1.     
+     sub := top valueNameAtIndex:2.     
+     sub := top valueNameAtIndex:3.     
     "
 !
 
@@ -16366,9 +16505,12 @@
         REG_DWORD       -> Integer
         REG_QWORD       -> Integer
         REG_NONE        -> nil
-    "
-
-    |stringArray retVal errorNumber|
+     aValueName name may be a string or unicode16string.
+    "
+
+    |nameW stringArray retVal errorNumber|
+
+    nameW := aValueName asUnicode16StringZ.
 
 %{  /* STACK: 20000 */
     HKEY myKey;
@@ -16382,18 +16524,9 @@
     int val;
     DWORD dataSize = sizeof(quickData);
     unsigned char *dataBuffer = NULL;
-#define xxUSE_UNICODE
-#ifdef USE_UNICODE
-# error -- currently unsupported ---
-# define RegQueryValueEx  RegQueryValueExW
-# define CHAR             short
-#else
-# define RegQueryValueEx  RegQueryValueExA
-# define CHAR             char
-#endif
 
     if (__isExternalAddressLike(__INST(handle))
-     && __isStringLike(aValueName)) {
+     && __isUnicode16String(nameW)) {
         int ret;
 
         myKey = (HKEY)__externalAddressVal(__INST(handle));
@@ -16401,7 +16534,7 @@
         /*
          * try to get it with one call ...
          */
-        ret = RegQueryValueExA(myKey, __stringVal(aValueName),
+        ret = RegQueryValueExW(myKey, __unicode16StringVal(nameW),
                          NULL,
                          &valueType,
                          (char *)&quickData,
@@ -16432,7 +16565,7 @@
                     break;
             }
             if (dataBuffer) {
-                ret = RegQueryValueEx(myKey, __stringVal(aValueName),
+                ret = RegQueryValueExW(myKey, __unicode16StringVal(nameW),
                                  NULL,
                                  &valueType,
                                  dataBuffer,
@@ -16461,11 +16594,7 @@
 
                 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;
 
 #if 0
@@ -16515,7 +16644,7 @@
 
                 case REG_MULTI_SZ:
                     {
-                        CHAR *cp, *cp0;
+                        WCHAR *cp, *cp0;
                         int ns, i;
 
                         cp0 = dataBuffer ? dataBuffer : quickData.smallDataBuffer;
@@ -16545,15 +16674,11 @@
                         i = 0;
                         while (*cp0) {
                             OBJ s;
-                            CHAR *cp;
+                            WCHAR *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++;
                         }
@@ -16579,6 +16704,11 @@
     (retVal isString and:[retVal isUnicodeString]) ifTrue:[
         ^ retVal asSingleByteStringIfPossible
     ].
+    retVal isArray ifTrue:[
+        retVal := retVal collect:[:s |
+                        (s isString and:[s isUnicodeString]) ifTrue:[ s asSingleByteStringIfPossible ] ifFalse:[s]
+                  ]
+    ].
     ^ retVal
 
     "
@@ -16587,6 +16717,24 @@
      key valueNamed:'CurrentVersion'
     "
 
+    "ascii name:
+     |key|
+     key := self key:'HKEY_CURRENT_USER\Software\ExeptTest\Foo'.
+     key valueNamed:'BLA10'
+    "
+
+    "unicode name:
+     |key|
+     key := self key:'HKEY_CURRENT_USER\Software\ExeptTest\Foo'.
+     key valueNamed:'BLA10αβ'
+    "
+
+    "unicode name:
+     |key|
+     key := self key:'HKEY_CURRENT_USER\Software\ExeptTest\Foo'.
+     key valueNamed:'BLA10αβγ'
+    "
+
     "
      |key|
      key := self key:'HKEY_CURRENT_USER\Software\ExeptTest'.
@@ -16598,14 +16746,42 @@
 
 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
-    "
-
-    |data stringArray errorNumber|
+        ByteArray       -> REG_BINARY
+        String          -> REG_SZ
+        Array of string -> REG_MULTI_SZ
+        Integer         -> REG_DWORD
+        nil             -> REG_NONE
+     aValueName name may be a string or unicode16string.
+    "
+
+    |nameA nameW dataA dataW stringArray errorNumber badArg |
+
+    nameA := aValueName asSingleByteStringIfPossible.
+    nameA isSingleByteString ifFalse:[ 
+        nameW := aValueName asUnicode16StringZ.
+        nameA := nil 
+    ].
+
+    "/ when value is a unicode string, we'll need a unicode name as well.
+    "/ when name is a unicode name, we'll need a unicode string as well
+    dataA := datum.
+    dataA isString ifTrue:[
+        dataA := datum asSingleByteStringIfPossible.
+        dataA isSingleByteString ifFalse:[ 
+            nameW isNil ifTrue:[
+                nameW := aValueName asUnicode16StringZ.
+                nameA := nil.
+            ].
+            dataW := datum asUnicode16StringZ.
+            dataA := nil.
+        ] ifTrue:[
+            nameA isNil ifTrue:[
+                dataW := datum asUnicode16StringZ.
+                dataA := nil.
+            ].
+        ].
+    ].
+
 %{
     HKEY myKey;
     DWORD valueType = -1;
@@ -16613,110 +16789,160 @@
     DWORD dataSize = -1;
     unsigned char *dataPointer = NULL;
     int datumOk = 1, mustFreeData = 0;
-
-    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;
+    WCHAR *_nameW = NULL;
+    char *_nameA = NULL;
+
+    badArg = true;
+
+    if (__isExternalAddressLike(__INST(handle))) {
+        myKey = (HKEY)__externalAddressVal(__INST(handle));
+
+        if (__isStringLike(nameA)) {    
+            _nameA = __unicode16StringVal(aValueName);
+        }
+        if (__isUnicode16String(nameW)) {    
+            _nameW = __unicode16StringVal(nameW);
+        }
+        if ((_nameA == NULL) && (_nameW == NULL)) { 
+            errorNumber = __MKSMALLINT(-1);
+            goto getOutOfHere;
+        }
+
+        badArg = false;
+
+        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(dataA)) {
+            valueType = REG_SZ;
+            dataPointer = __stringVal(dataA);
+            dataSize = __stringSize(dataA) + 1;
+        } else if (__isUnicode16String(dataW)) {
+            valueType = REG_SZ;
+            dataPointer = __unicode16StringVal(dataW);
+            dataSize = (__unicode16StringSize(dataW) + 1)*2;
+            nameA = NULL; // must use WideChar-interface
+        } 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;
+
+            nameW = NULL; // must use Ascii-interface (for now)
+
+            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;
+            badArg = true;
+        }
+
+        if (datumOk) {
+            if (_nameA != NULL) {
+                ret = RegSetValueExA(myKey, _nameA,
+                                    0, valueType,
+                                    dataPointer, dataSize);
+            } else {
+                ret = RegSetValueExW(myKey, _nameW,
+                                    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);
+            }
+        }
+    }
+  getOutOfHere:
 %}.
     errorNumber notNil ifTrue:[
-	(OperatingSystem errorHolderForNumber:errorNumber) reportError.
+        badArg ifTrue:[ 
+            self primitiveFailed:'bad argument'
+        ] ifFalse:[
+            (OperatingSystem errorHolderForNumber:errorNumber) reportError.
+        ]
     ].
     ^ false
 
-    "
+    "unicode name:
+
+     |key|
+
+     key := self key:'HKEY_CURRENT_USER\Software\ExeptTest\Foo'.
+     key valueNamed:'BLA10αβγ' put:'1234567890'.
+    "
+
+    "unicode value; ascii name:
      |key|
 
-     key := self key:'HKEY_LOCAL_MACHINE\SOFTWARE\eXept\Smalltalk/X'.
-     key valueNamed:'CurrentVersion' put:'3.5.2'
+     key := self key:'HKEY_CURRENT_USER\Software\ExeptTest\Foo'.
+     key valueNamed:'BLA10' put:'αβγ'
+    "
+
+    "both unicode:
+     |key|
+
+     key := self key:'HKEY_CURRENT_USER\Software\ExeptTest\Foo'.
+     key valueNamed:'BLA10αβ' put:'αβγ123αβγ'
     "
 ! !