Merge branch 'master' of git://factorcode.org/git/factor

db4
Slava Pestov 2009-04-30 21:13:36 -05:00
commit d93514d47d
41 changed files with 1262 additions and 199 deletions

View File

@ -1,5 +1,5 @@
USING: calendar namespaces alien.c-types system windows
windows.kernel32 kernel math combinators ;
USING: calendar namespaces alien.c-types system
windows.kernel32 kernel math combinators windows.errors ;
IN: calendar.windows
M: windows gmt-offset ( -- hours minutes seconds )

View File

@ -46,7 +46,7 @@ M: winnt add-completion ( win32-handle -- )
{ [ dup integer? ] [ ] }
{ [ dup array? ] [
first dup eof?
[ drop 0 ] [ (win32-error-string) throw ] if
[ drop 0 ] [ n>win32-error-string throw ] if
] }
} cond
] with-timeout ;
@ -105,7 +105,7 @@ M: winnt seek-handle ( n seek-type handle -- )
GetLastError {
{ [ dup expected-io-error? ] [ drop f ] }
{ [ dup eof? ] [ drop t ] }
[ (win32-error-string) throw ]
[ n>win32-error-string throw ]
} cond
] [ f ] if ;

View File

@ -2,7 +2,7 @@ USING: alien alien.c-types alien.syntax arrays continuations
destructors generic io.mmap io.ports io.backend.windows io.files.windows
kernel libc math math.bitwise namespaces quotations sequences windows
windows.advapi32 windows.kernel32 io.backend system accessors
io.backend.windows.privileges ;
io.backend.windows.privileges windows.errors ;
IN: io.backend.windows.nt.privileges
TYPEDEF: TOKEN_PRIVILEGES* PTOKEN_PRIVILEGES

View File

@ -1,10 +1,10 @@
! Copyright (C) 2004, 2008 Mackenzie Straight, Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types arrays destructors io io.backend
io.buffers io.files io.ports io.binary io.timeouts
windows.errors strings kernel math namespaces sequences windows
windows.kernel32 windows.shell32 windows.types windows.winsock
splitting continuations math.bitwise system accessors ;
io.buffers io.files io.ports io.binary io.timeouts system
windows.errors strings kernel math namespaces sequences
windows.errors windows.kernel32 windows.shell32 windows.types
windows.winsock splitting continuations math.bitwise accessors ;
IN: io.backend.windows
: set-inherit ( handle ? -- )

View File

@ -5,6 +5,10 @@ HELP: make-link
{ $values { "target" "a path to the symbolic link's target" } { "symlink" "a path to new symbolic link" } }
{ $description "Creates a symbolic link." } ;
HELP: make-hard-link
{ $values { "target" "a path to the hard link's target" } { "link" "a path to new symbolic link" } }
{ $description "Creates a hard link." } ;
HELP: read-link
{ $values { "symlink" "a path to an existing symbolic link" } { "path" "the path pointed to by the symbolic link" } }
{ $description "Reads the symbolic link and returns its target path." } ;

View File

@ -6,6 +6,8 @@ IN: io.files.links
HOOK: make-link os ( target symlink -- )
HOOK: make-hard-link os ( target link -- )
HOOK: read-link os ( symlink -- path )
: copy-link ( target symlink -- )

View File

@ -7,6 +7,9 @@ IN: io.files.links.unix
M: unix make-link ( path1 path2 -- )
normalize-path symlink io-error ;
M: unix make-hard-link ( path1 path2 -- )
normalize-path link io-error ;
M: unix read-link ( path -- path' )
normalize-path read-symbolic-link ;

View File

@ -4,7 +4,8 @@ io.backend.windows io.files.windows io.encodings.utf16n windows
windows.kernel32 kernel libc math threads system environment
alien.c-types alien.arrays alien.strings sequences combinators
combinators.short-circuit ascii splitting alien strings assocs
namespaces make accessors tr windows.time windows.shell32 ;
namespaces make accessors tr windows.time windows.shell32
windows.errors ;
IN: io.files.windows.nt
M: winnt cwd

View File

@ -2,7 +2,7 @@ USING: alien alien.c-types arrays destructors generic io.mmap
io.ports io.backend.windows io.files.windows io.backend.windows.privileges
kernel libc math math.bitwise namespaces quotations sequences
windows windows.advapi32 windows.kernel32 io.backend system
accessors locals ;
accessors locals windows.errors ;
IN: io.mmap.windows
: create-file-mapping ( hFile lpAttributes flProtect dwMaximumSizeHigh dwMaximumSizeLow lpName -- HANDLE )
@ -12,8 +12,8 @@ IN: io.mmap.windows
MapViewOfFile [ win32-error=0/f ] keep ;
:: mmap-open ( path length access-mode create-mode protect access -- handle handle address )
[let | lo [ length HEX: ffffffff bitand ]
hi [ length -32 shift HEX: ffffffff bitand ] |
[let | lo [ length 32 bits ]
hi [ length -32 shift 32 bits ] |
{ "SeCreateGlobalPrivilege" "SeLockMemoryPrivilege" } [
path access-mode create-mode 0 open-file |dispose
dup handle>> f protect hi lo f create-file-mapping |dispose

View File

@ -6,7 +6,7 @@ hashtables sorting arrays combinators math.bitwise strings
system accessors threads splitting io.backend io.backend.windows
io.backend.windows.nt io.files.windows.nt io.monitors io.ports
io.buffers io.files io.timeouts io.encodings.string
io.encodings.utf16n io windows windows.kernel32 windows.types
io.encodings.utf16n io windows.errors windows.kernel32 windows.types
io.pathnames ;
IN: io.monitors.windows.nt

View File

@ -1,6 +1,6 @@
USING: accessors alien.c-types byte-arrays continuations
kernel windows windows.advapi32 init namespaces random
destructors locals ;
kernel windows.advapi32 init namespaces random destructors
locals windows.errors ;
IN: random.windows
TUPLE: windows-rng provider type ;

View File

@ -6,7 +6,7 @@ vocabs.loader io combinators calendar accessors math.parser
io.streams.string ui.tools.operations quotations strings arrays
prettyprint words vocabs sorting sets classes math alien urls
splitting ascii combinators.short-circuit alarms words.symbol
system ;
system summary ;
IN: tools.scaffold
SYMBOL: developer-name
@ -16,6 +16,10 @@ ERROR: not-a-vocab-root string ;
ERROR: vocab-name-contains-separator path ;
ERROR: vocab-name-contains-dot path ;
ERROR: no-vocab vocab ;
ERROR: bad-developer-name name ;
M: bad-developer-name summary
drop "Developer name must be a string." ;
<PRIVATE
@ -101,10 +105,14 @@ ERROR: no-vocab vocab ;
] if ;
: scaffold-authors ( vocab-root vocab -- )
"authors.txt" vocab-root/vocab/file>path scaffolding? [
[ developer-name get ] dip utf8 set-file-contents
developer-name get [
"authors.txt" vocab-root/vocab/file>path scaffolding? [
developer-name get swap utf8 set-file-contents
] [
drop
] if
] [
drop
2drop
] if ;
: lookup-type ( string -- object/string ? )
@ -298,9 +306,12 @@ SYMBOL: examples-flag
"}" print
] with-variable ;
: touch. ( path -- )
[ touch-file ]
[ "Click to edit: " write <pathname> . ] bi ;
: scaffold-rc ( path -- )
[ home ] dip append-path
[ touch-file ] [ "Click to edit: " write <pathname> . ] bi ;
[ home ] dip append-path touch. ;
: scaffold-factor-boot-rc ( -- )
os windows? "factor-boot-rc" ".factor-boot-rc" ? scaffold-rc ;
@ -308,4 +319,7 @@ SYMBOL: examples-flag
: scaffold-factor-rc ( -- )
os windows? "factor-rc" ".factor-rc" ? scaffold-rc ;
: scaffold-emacs ( -- ) ".emacs" scaffold-rc ;
HOOK: scaffold-emacs os ( -- )
M: unix scaffold-emacs ( -- ) ".emacs" scaffold-rc ;

View File

@ -0,0 +1 @@
Doug Coleman

View File

@ -0,0 +1 @@
unportable

View File

@ -0,0 +1,7 @@
! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: io.pathnames system tools.scaffold windows.shell32 ;
IN: tools.scaffold.windows
M: windows scaffold-emacs ( -- )
application-data ".emacs" append-path touch. ;

View File

@ -6,15 +6,19 @@ ui.gadgets ui.gadgets.private ui.backend ui.clipboards
ui.gadgets.worlds ui.gestures ui.event-loop io kernel math
math.vectors namespaces make sequences strings vectors words
windows.kernel32 windows.gdi32 windows.user32 windows.opengl32
windows.messages windows.types windows.offscreen windows.nt windows
windows.messages windows.types windows.offscreen windows.nt
threads libc combinators fry combinators.short-circuit continuations
command-line shuffle opengl ui.render ascii math.bitwise locals
accessors math.rectangles math.order ascii calendar
io.encodings.utf16n ;
io.encodings.utf16n windows.errors ;
IN: ui.backend.windows
SINGLETON: windows-ui-backend
: lo-word ( wparam -- lo ) <short> *short ; inline
: hi-word ( wparam -- hi ) -16 shift lo-word ; inline
: >lo-hi ( WORD -- array ) [ lo-word ] [ hi-word ] bi 2array ;
: crlf>lf ( str -- str' )
CHAR: \r swap remove ;
@ -286,8 +290,6 @@ SYMBOL: nc-buttons
message>button nc-buttons get
swap [ push ] [ delete ] if ;
: >lo-hi ( WORD -- array ) [ lo-word ] [ hi-word ] bi 2array ;
: mouse-wheel ( wParam -- array ) >lo-hi [ sgn neg ] map ;
: mouse-event>gesture ( uMsg -- button )
@ -553,6 +555,54 @@ M: windows-ui-backend (with-ui)
M: windows-ui-backend beep ( -- )
0 MessageBeep drop ;
: fullscreen-RECT ( hwnd -- RECT )
MONITOR_DEFAULTTONEAREST MonitorFromWindow
"MONITORINFOEX" <c-object> dup length over set-MONITORINFOEX-cbSize
[ GetMonitorInfo win32-error=0/f ] keep MONITORINFOEX-rcMonitor ;
: hwnd>RECT ( hwnd -- RECT )
"RECT" <c-object> [ GetWindowRect win32-error=0/f ] keep ;
: fullscreen-flags ( -- n )
{ WS_CAPTION WS_BORDER WS_THICKFRAME } flags ; inline
: enter-fullscreen ( world -- )
handle>> hWnd>>
{
[
GWL_STYLE GetWindowLong
fullscreen-flags unmask
]
[ GWL_STYLE rot SetWindowLong win32-error=0/f ]
[
HWND_TOP
over hwnd>RECT get-RECT-dimensions
SWP_FRAMECHANGED
SetWindowPos win32-error=0/f
]
[ SW_MAXIMIZE ShowWindow win32-error=0/f ]
} cleave ;
: exit-fullscreen ( world -- )
handle>> hWnd>>
{
[
GWL_STYLE GetWindowLong
fullscreen-flags bitor
]
[ GWL_STYLE rot SetWindowLong win32-error=0/f ]
[
f
over hwnd>RECT get-RECT-dimensions
{ SWP_NOMOVE SWP_NOSIZE SWP_NOZORDER SWP_FRAMECHANGED } flags
SetWindowPos win32-error=0/f
]
[ SW_RESTORE ShowWindow win32-error=0/f ]
} cleave ;
M: windows-ui-backend set-fullscreen* ( ? world -- )
swap [ enter-fullscreen ] [ exit-fullscreen ] if ;
windows-ui-backend ui-backend set-global
[ "ui.tools" ] main-vocab-hook set-global

View File

@ -194,6 +194,7 @@ FUNCTION: int setsockopt ( int s, int level, int optname, void* optval, socklen_
FUNCTION: int setuid ( uid_t uid ) ;
FUNCTION: int socket ( int domain, int type, int protocol ) ;
FUNCTION: int symlink ( char* path1, char* path2 ) ;
FUNCTION: int link ( char* path1, char* path2 ) ;
FUNCTION: int system ( char* command ) ;
FUNCTION: int unlink ( char* path ) ;

View File

@ -350,35 +350,46 @@ CONSTANT: TOKEN_ADJUST_DEFAULT HEX: 0080
TOKEN_ADJUST_DEFAULT
} flags ; foldable
CONSTANT: HKEY_CLASSES_ROOT 1
CONSTANT: HKEY_CURRENT_CONFIG 2
CONSTANT: HKEY_CURRENT_USER 3
CONSTANT: HKEY_LOCAL_MACHINE 4
CONSTANT: HKEY_USERS 5
CONSTANT: HKEY_CLASSES_ROOT HEX: 80000000
CONSTANT: HKEY_CURRENT_USER HEX: 80000001
CONSTANT: HKEY_LOCAL_MACHINE HEX: 80000002
CONSTANT: HKEY_USERS HEX: 80000003
CONSTANT: HKEY_PERFORMANCE_DATA HEX: 80000004
CONSTANT: HKEY_CURRENT_CONFIG HEX: 80000005
CONSTANT: HKEY_DYN_DATA HEX: 80000006
CONSTANT: HKEY_PERFORMANCE_TEXT HEX: 80000050
CONSTANT: HKEY_PERFORMANCE_NLSTEXT HEX: 80000060
CONSTANT: KEY_ALL_ACCESS HEX: 0001
CONSTANT: KEY_CREATE_LINK HEX: 0002
CONSTANT: KEY_QUERY_VALUE HEX: 0001
CONSTANT: KEY_SET_VALUE HEX: 0002
CONSTANT: KEY_CREATE_SUB_KEY HEX: 0004
CONSTANT: KEY_ENUMERATE_SUB_KEYS HEX: 0008
CONSTANT: KEY_EXECUTE HEX: 0010
CONSTANT: KEY_NOTIFY HEX: 0020
CONSTANT: KEY_QUERY_VALUE HEX: 0040
CONSTANT: KEY_READ HEX: 0080
CONSTANT: KEY_SET_VALUE HEX: 0100
CONSTANT: KEY_WOW64_64KEY HEX: 0200
CONSTANT: KEY_WOW64_32KEY HEX: 0400
CONSTANT: KEY_WRITE HEX: 0800
CONSTANT: KEY_NOTIFY HEX: 0010
CONSTANT: KEY_CREATE_LINK HEX: 0020
CONSTANT: KEY_READ HEX: 20019
CONSTANT: KEY_WOW64_32KEY HEX: 0200
CONSTANT: KEY_WOW64_64KEY HEX: 0100
CONSTANT: KEY_WRITE HEX: 20006
CONSTANT: KEY_EXECUTE KEY_READ
CONSTANT: KEY_ALL_ACCESS HEX: F003F
CONSTANT: REG_BINARY 1
CONSTANT: REG_DWORD 2
CONSTANT: REG_EXPAND_SZ 3
CONSTANT: REG_MULTI_SZ 4
CONSTANT: REG_QWORD 5
CONSTANT: REG_SZ 6
CONSTANT: REG_NONE 0
CONSTANT: REG_SZ 1
CONSTANT: REG_EXPAND_SZ 2
CONSTANT: REG_BINARY 3
CONSTANT: REG_DWORD 4
CONSTANT: REG_DWORD_LITTLE_ENDIAN 4
CONSTANT: REG_DWORD_BIG_ENDIAN 5
CONSTANT: REG_LINK 6
CONSTANT: REG_MULTI_SZ 7
CONSTANT: REG_RESOURCE_LIST 8
CONSTANT: REG_FULL_RESOURCE_DESCRIPTOR 9
CONSTANT: REG_RESOURCE_REQUIREMENTS_LIST 10
CONSTANT: REG_QWORD 11
CONSTANT: REG_QWORD_LITTLE_ENDIAN 11
TYPEDEF: DWORD REGSAM
! : I_ScGetCurrentGroupStateW ;
! : A_SHAFinal ;
! : A_SHAInit ;
@ -874,7 +885,7 @@ FUNCTION: BOOL OpenThreadToken ( HANDLE ThreadHandle, DWORD DesiredAccess, BOOL
! : ReadEncryptedFileRaw ;
! : ReadEventLogA ;
! : ReadEventLogW ;
! : RegCloseKey ;
FUNCTION: LONG RegCloseKey ( HKEY hKey ) ;
! : RegConnectRegistryA ;
! : RegConnectRegistryW ;
! : RegCreateKeyA ;
@ -883,15 +894,52 @@ FUNCTION: LONG RegCreateKeyExW ( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LP
! : RegCreateKeyW
! : RegDeleteKeyA ;
! : RegDeleteKeyW ;
FUNCTION: LONG RegDeleteKeyExW (
HKEY hKey,
LPCTSTR lpSubKey,
DWORD Reserved,
LPTSTR lpClass,
DWORD dwOptions,
REGSAM samDesired,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
PHKEY phkResult,
LPDWORD lpdwDisposition
) ;
ALIAS: RegDeleteKeyEx RegDeleteKeyExW
! : RegDeleteValueA ;
! : RegDeleteValueW ;
! : RegDisablePredefinedCache ;
! : RegEnumKeyA ;
! : RegEnumKeyExA ;
! : RegEnumKeyExW ;
FUNCTION: LONG RegEnumKeyExW (
HKEY hKey,
DWORD dwIndex,
LPTSTR lpName,
LPDWORD lpcName,
LPDWORD lpReserved,
LPTSTR lpClass,
LPDWORD lpcClass,
PFILETIME lpftLastWriteTime
) ;
! : RegEnumKeyW ;
! : RegEnumValueA ;
! : RegEnumValueW ;
FUNCTION: LONG RegEnumValueW (
HKEY hKey,
DWORD dwIndex,
LPTSTR lpValueName,
LPDWORD lpcchValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
) ;
ALIAS: RegEnumValue RegEnumValueW
! : RegFlushKey ;
! : RegGetKeySecurity ;
! : RegLoadKeyA ;
@ -900,17 +948,33 @@ FUNCTION: LONG RegCreateKeyExW ( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LP
FUNCTION: LONG RegOpenCurrentUser ( REGSAM samDesired, PHKEY phkResult ) ;
! : RegOpenKeyA ;
! : RegOpenKeyExA ;
! : RegOpenKeyExW ;
FUNCTION: LONG RegOpenKeyExW ( HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult ) ;
ALIAS: RegOpenKeyEx RegOpenKeyExW
! : RegOpenKeyW ;
! : RegOpenUserClassesRoot ;
! : RegOverridePredefKey ;
! : RegQueryInfoKeyA ;
! : RegQueryInfoKeyW ;
FUNCTION: LONG RegQueryInfoKeyW (
HKEY hKey,
LPTSTR lpClass,
LPDWORD lpcClass,
LPDWORD lpReserved,
LPDWORD lpcSubKeys,
LPDWORD lpcMaxSubKeyLen,
LPDWORD lpcMaxClassLen,
LPDWORD lpcValues,
LPDWORD lpcMaxValueNameLen,
LPDWORD lpcMaxValueLen,
LPDWORD lpcbSecurityDescriptor,
PFILETIME lpftLastWriteTime
) ;
ALIAS: RegQueryInfoKey RegQueryInfoKeyW
! : RegQueryMultipleValuesA ;
! : RegQueryMultipleValuesW ;
! : RegQueryValueA ;
! : RegQueryValueExA ;
FUNCTION: LONG RegQueryValueExW ( HKEY hKey, LPCTSTR lpValueName, LPWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ) ;
FUNCTION: LONG RegQueryValueExW ( HKEY hKey, LPCTSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ) ;
ALIAS: RegQueryValueEx RegQueryValueExW
! : RegQueryValueW ;
! : RegReplaceKeyA ;
! : RegReplaceKeyW ;

View File

@ -0,0 +1,6 @@
! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: tools.test windows.errors strings ;
IN: windows.errors.tests
[ t ] [ 0 n>win32-error-string string? ] unit-test

View File

@ -1,9 +1,752 @@
USING: alien.c-types kernel locals math math.bitwise
windows.kernel32 sequences byte-arrays unicode.categories
io.encodings.string io.encodings.utf16n alien.strings
arrays ;
IN: windows.errors
CONSTANT: ERROR_SUCCESS 0
CONSTANT: ERROR_NO_MORE_FILES 18
CONSTANT: ERROR_HANDLE_EOF 38
CONSTANT: ERROR_BROKEN_PIPE 109
CONSTANT: ERROR_ENVVAR_NOT_FOUND 203
CONSTANT: ERROR_IO_INCOMPLETE 996
CONSTANT: ERROR_IO_PENDING 997
CONSTANT: ERROR_SUCCESS 0
CONSTANT: ERROR_INVALID_FUNCTION 1
CONSTANT: ERROR_FILE_NOT_FOUND 2
CONSTANT: ERROR_PATH_NOT_FOUND 3
CONSTANT: ERROR_TOO_MANY_OPEN_FILES 4
CONSTANT: ERROR_ACCESS_DENIED 5
CONSTANT: ERROR_INVALID_HANDLE 6
CONSTANT: ERROR_ARENA_TRASHED 7
CONSTANT: ERROR_NOT_ENOUGH_MEMORY 8
CONSTANT: ERROR_INVALID_BLOCK 9
CONSTANT: ERROR_BAD_ENVIRONMENT 10
CONSTANT: ERROR_BAD_FORMAT 11
CONSTANT: ERROR_INVALID_ACCESS 12
CONSTANT: ERROR_INVALID_DATA 13
CONSTANT: ERROR_OUTOFMEMORY 14
CONSTANT: ERROR_INVALID_DRIVE 15
CONSTANT: ERROR_CURRENT_DIRECTORY 16
CONSTANT: ERROR_NOT_SAME_DEVICE 17
CONSTANT: ERROR_NO_MORE_FILES 18
CONSTANT: ERROR_WRITE_PROTECT 19
CONSTANT: ERROR_BAD_UNIT 20
CONSTANT: ERROR_NOT_READY 21
CONSTANT: ERROR_BAD_COMMAND 22
CONSTANT: ERROR_CRC 23
CONSTANT: ERROR_BAD_LENGTH 24
CONSTANT: ERROR_SEEK 25
CONSTANT: ERROR_NOT_DOS_DISK 26
CONSTANT: ERROR_SECTOR_NOT_FOUND 27
CONSTANT: ERROR_OUT_OF_PAPER 28
CONSTANT: ERROR_WRITE_FAULT 29
CONSTANT: ERROR_READ_FAULT 30
CONSTANT: ERROR_GEN_FAILURE 31
CONSTANT: ERROR_SHARING_VIOLATION 32
CONSTANT: ERROR_LOCK_VIOLATION 33
CONSTANT: ERROR_WRONG_DISK 34
CONSTANT: ERROR_SHARING_BUFFER_EXCEEDED 36
CONSTANT: ERROR_HANDLE_EOF 38
CONSTANT: ERROR_HANDLE_DISK_FULL 39
CONSTANT: ERROR_NOT_SUPPORTED 50
CONSTANT: ERROR_REM_NOT_LIST 51
CONSTANT: ERROR_DUP_NAME 52
CONSTANT: ERROR_BAD_NETPATH 53
CONSTANT: ERROR_NETWORK_BUSY 54
CONSTANT: ERROR_DEV_NOT_EXIST 55
CONSTANT: ERROR_TOO_MANY_CMDS 56
CONSTANT: ERROR_ADAP_HDW_ERR 57
CONSTANT: ERROR_BAD_NET_RESP 58
CONSTANT: ERROR_UNEXP_NET_ERR 59
CONSTANT: ERROR_BAD_REM_ADAP 60
CONSTANT: ERROR_PRINTQ_FULL 61
CONSTANT: ERROR_NO_SPOOL_SPACE 62
CONSTANT: ERROR_PRINT_CANCELLED 63
CONSTANT: ERROR_NETNAME_DELETED 64
CONSTANT: ERROR_NETWORK_ACCESS_DENIED 65
CONSTANT: ERROR_BAD_DEV_TYPE 66
CONSTANT: ERROR_BAD_NET_NAME 67
CONSTANT: ERROR_TOO_MANY_NAMES 68
CONSTANT: ERROR_TOO_MANY_SESS 69
CONSTANT: ERROR_SHARING_PAUSED 70
CONSTANT: ERROR_REQ_NOT_ACCEP 71
CONSTANT: ERROR_REDIR_PAUSED 72
CONSTANT: ERROR_FILE_EXISTS 80
CONSTANT: ERROR_CANNOT_MAKE 82
CONSTANT: ERROR_FAIL_I24 83
CONSTANT: ERROR_OUT_OF_STRUCTURES 84
CONSTANT: ERROR_ALREADY_ASSIGNED 85
CONSTANT: ERROR_INVALID_PASSWORD 86
CONSTANT: ERROR_INVALID_PARAMETER 87
CONSTANT: ERROR_NET_WRITE_FAULT 88
CONSTANT: ERROR_NO_PROC_SLOTS 89
CONSTANT: ERROR_TOO_MANY_SEMAPHORES 100
CONSTANT: ERROR_EXCL_SEM_ALREADY_OWNED 101
CONSTANT: ERROR_SEM_IS_SET 102
CONSTANT: ERROR_TOO_MANY_SEM_REQUESTS 103
CONSTANT: ERROR_INVALID_AT_INTERRUPT_TIME 104
CONSTANT: ERROR_SEM_OWNER_DIED 105
CONSTANT: ERROR_SEM_USER_LIMIT 106
CONSTANT: ERROR_DISK_CHANGE 107
CONSTANT: ERROR_DRIVE_LOCKED 108
CONSTANT: ERROR_BROKEN_PIPE 109
CONSTANT: ERROR_OPEN_FAILED 110
CONSTANT: ERROR_BUFFER_OVERFLOW 111
CONSTANT: ERROR_DISK_FULL 112
CONSTANT: ERROR_NO_MORE_SEARCH_HANDLES 113
CONSTANT: ERROR_INVALID_TARGET_HANDLE 114
CONSTANT: ERROR_INVALID_CATEGORY 117
CONSTANT: ERROR_INVALID_VERIFY_SWITCH 118
CONSTANT: ERROR_BAD_DRIVER_LEVEL 119
CONSTANT: ERROR_CALL_NOT_IMPLEMENTED 120
CONSTANT: ERROR_SEM_TIMEOUT 121
CONSTANT: ERROR_INSUFFICIENT_BUFFER 122
CONSTANT: ERROR_INVALID_NAME 123
CONSTANT: ERROR_INVALID_LEVEL 124
CONSTANT: ERROR_NO_VOLUME_LABEL 125
CONSTANT: ERROR_MOD_NOT_FOUND 126
CONSTANT: ERROR_PROC_NOT_FOUND 127
CONSTANT: ERROR_WAIT_NO_CHILDREN 128
CONSTANT: ERROR_CHILD_NOT_COMPLETE 129
CONSTANT: ERROR_DIRECT_ACCESS_HANDLE 130
CONSTANT: ERROR_NEGATIVE_SEEK 131
CONSTANT: ERROR_SEEK_ON_DEVICE 132
CONSTANT: ERROR_IS_JOIN_TARGET 133
CONSTANT: ERROR_IS_JOINED 134
CONSTANT: ERROR_IS_SUBSTED 135
CONSTANT: ERROR_NOT_JOINED 136
CONSTANT: ERROR_NOT_SUBSTED 137
CONSTANT: ERROR_JOIN_TO_JOIN 138
CONSTANT: ERROR_SUBST_TO_SUBST 139
CONSTANT: ERROR_JOIN_TO_SUBST 140
CONSTANT: ERROR_SUBST_TO_JOIN 141
CONSTANT: ERROR_BUSY_DRIVE 142
CONSTANT: ERROR_SAME_DRIVE 143
CONSTANT: ERROR_DIR_NOT_ROOT 144
CONSTANT: ERROR_DIR_NOT_EMPTY 145
CONSTANT: ERROR_IS_SUBST_PATH 146
CONSTANT: ERROR_IS_JOIN_PATH 147
CONSTANT: ERROR_PATH_BUSY 148
CONSTANT: ERROR_IS_SUBST_TARGET 149
CONSTANT: ERROR_SYSTEM_TRACE 150
CONSTANT: ERROR_INVALID_EVENT_COUNT 151
CONSTANT: ERROR_TOO_MANY_MUXWAITERS 152
CONSTANT: ERROR_INVALID_LIST_FORMAT 153
CONSTANT: ERROR_LABEL_TOO_LONG 154
CONSTANT: ERROR_TOO_MANY_TCBS 155
CONSTANT: ERROR_SIGNAL_REFUSED 156
CONSTANT: ERROR_DISCARDED 157
CONSTANT: ERROR_NOT_LOCKED 158
CONSTANT: ERROR_BAD_THREADID_ADDR 159
CONSTANT: ERROR_BAD_ARGUMENTS 160
CONSTANT: ERROR_BAD_PATHNAME 161
CONSTANT: ERROR_SIGNAL_PENDING 162
CONSTANT: ERROR_MAX_THRDS_REACHED 164
CONSTANT: ERROR_LOCK_FAILED 167
CONSTANT: ERROR_BUSY 170
CONSTANT: ERROR_CANCEL_VIOLATION 173
CONSTANT: ERROR_ATOMIC_LOCKS_NOT_SUPPORTED 174
CONSTANT: ERROR_INVALID_SEGMENT_NUMBER 180
CONSTANT: ERROR_INVALID_ORDINAL 182
CONSTANT: ERROR_ALREADY_EXISTS 183
CONSTANT: ERROR_INVALID_FLAG_NUMBER 186
CONSTANT: ERROR_SEM_NOT_FOUND 187
CONSTANT: ERROR_INVALID_STARTING_CODESEG 188
CONSTANT: ERROR_INVALID_STACKSEG 189
CONSTANT: ERROR_INVALID_MODULETYPE 190
CONSTANT: ERROR_INVALID_EXE_SIGNATURE 191
CONSTANT: ERROR_EXE_MARKED_INVALID 192
CONSTANT: ERROR_BAD_EXE_FORMAT 193
CONSTANT: ERROR_ITERATED_DATA_EXCEEDS_64k 194
CONSTANT: ERROR_INVALID_MINALLOCSIZE 195
CONSTANT: ERROR_DYNLINK_FROM_INVALID_RING 196
CONSTANT: ERROR_IOPL_NOT_ENABLED 197
CONSTANT: ERROR_INVALID_SEGDPL 198
CONSTANT: ERROR_AUTODATASEG_EXCEEDS_64k 199
CONSTANT: ERROR_RING2SEG_MUST_BE_MOVABLE 200
CONSTANT: ERROR_RELOC_CHAIN_XEEDS_SEGLIM 201
CONSTANT: ERROR_INFLOOP_IN_RELOC_CHAIN 202
CONSTANT: ERROR_ENVVAR_NOT_FOUND 203
CONSTANT: ERROR_NO_SIGNAL_SENT 205
CONSTANT: ERROR_FILENAME_EXCED_RANGE 206
CONSTANT: ERROR_RING2_STACK_IN_USE 207
CONSTANT: ERROR_META_EXPANSION_TOO_LONG 208
CONSTANT: ERROR_INVALID_SIGNAL_NUMBER 209
CONSTANT: ERROR_THREAD_1_INACTIVE 210
CONSTANT: ERROR_LOCKED 212
CONSTANT: ERROR_TOO_MANY_MODULES 214
CONSTANT: ERROR_NESTING_NOT_ALLOWED 215
CONSTANT: ERROR_EXE_MACHINE_TYPE_MISMATCH 216
CONSTANT: ERROR_BAD_PIPE 230
CONSTANT: ERROR_PIPE_BUSY 231
CONSTANT: ERROR_NO_DATA 232
CONSTANT: ERROR_PIPE_NOT_CONNECTED 233
CONSTANT: ERROR_MORE_DATA 234
CONSTANT: ERROR_VC_DISCONNECTED 240
CONSTANT: ERROR_INVALID_EA_NAME 254
CONSTANT: ERROR_EA_LIST_INCONSISTENT 255
CONSTANT: ERROR_NO_MORE_ITEMS 259
CONSTANT: ERROR_CANNOT_COPY 266
CONSTANT: ERROR_DIRECTORY 267
CONSTANT: ERROR_EAS_DIDNT_FIT 275
CONSTANT: ERROR_EA_FILE_CORRUPT 276
CONSTANT: ERROR_EA_TABLE_FULL 277
CONSTANT: ERROR_INVALID_EA_HANDLE 278
CONSTANT: ERROR_EAS_NOT_SUPPORTED 282
CONSTANT: ERROR_NOT_OWNER 288
CONSTANT: ERROR_TOO_MANY_POSTS 298
CONSTANT: ERROR_PARTIAL_COPY 299
CONSTANT: ERROR_MR_MID_NOT_FOUND 317
CONSTANT: ERROR_INVALID_ADDRESS 487
CONSTANT: ERROR_ARITHMETIC_OVERFLOW 534
CONSTANT: ERROR_PIPE_CONNECTED 535
CONSTANT: ERROR_PIPE_LISTENING 536
CONSTANT: ERROR_EA_ACCESS_DENIED 994
CONSTANT: ERROR_OPERATION_ABORTED 995
CONSTANT: ERROR_IO_INCOMPLETE 996
CONSTANT: ERROR_IO_PENDING 997
CONSTANT: ERROR_NOACCESS 998
CONSTANT: ERROR_SWAPERROR 999
CONSTANT: ERROR_STACK_OVERFLOW 1001
CONSTANT: ERROR_INVALID_MESSAGE 1002
CONSTANT: ERROR_CAN_NOT_COMPLETE 1003
CONSTANT: ERROR_INVALID_FLAGS 1004
CONSTANT: ERROR_UNRECOGNIZED_VOLUME 1005
CONSTANT: ERROR_FILE_INVALID 1006
CONSTANT: ERROR_FULLSCREEN_MODE 1007
CONSTANT: ERROR_NO_TOKEN 1008
CONSTANT: ERROR_BADDB 1009
CONSTANT: ERROR_BADKEY 1010
CONSTANT: ERROR_CANTOPEN 1011
CONSTANT: ERROR_CANTREAD 1012
CONSTANT: ERROR_CANTWRITE 1013
CONSTANT: ERROR_REGISTRY_RECOVERED 1014
CONSTANT: ERROR_REGISTRY_CORRUPT 1015
CONSTANT: ERROR_REGISTRY_IO_FAILED 1016
CONSTANT: ERROR_NOT_REGISTRY_FILE 1017
CONSTANT: ERROR_KEY_DELETED 1018
CONSTANT: ERROR_NO_LOG_SPACE 1019
CONSTANT: ERROR_KEY_HAS_CHILDREN 1020
CONSTANT: ERROR_CHILD_MUST_BE_VOLATILE 1021
CONSTANT: ERROR_NOTIFY_ENUM_DIR 1022
CONSTANT: ERROR_DEPENDENT_SERVICES_RUNNING 1051
CONSTANT: ERROR_INVALID_SERVICE_CONTROL 1052
CONSTANT: ERROR_SERVICE_REQUEST_TIMEOUT 1053
CONSTANT: ERROR_SERVICE_NO_THREAD 1054
CONSTANT: ERROR_SERVICE_DATABASE_LOCKED 1055
CONSTANT: ERROR_SERVICE_ALREADY_RUNNING 1056
CONSTANT: ERROR_INVALID_SERVICE_ACCOUNT 1057
CONSTANT: ERROR_SERVICE_DISABLED 1058
CONSTANT: ERROR_CIRCULAR_DEPENDENCY 1059
CONSTANT: ERROR_SERVICE_DOES_NOT_EXIST 1060
CONSTANT: ERROR_SERVICE_CANNOT_ACCEPT_CTRL 1061
CONSTANT: ERROR_SERVICE_NOT_ACTIVE 1062
CONSTANT: ERROR_FAILED_SERVICE_CONTROLLER_CONNECT 1063
CONSTANT: ERROR_EXCEPTION_IN_SERVICE 1064
CONSTANT: ERROR_DATABASE_DOES_NOT_EXIST 1065
CONSTANT: ERROR_SERVICE_SPECIFIC_ERROR 1066
CONSTANT: ERROR_PROCESS_ABORTED 1067
CONSTANT: ERROR_SERVICE_DEPENDENCY_FAIL 1068
CONSTANT: ERROR_SERVICE_LOGON_FAILED 1069
CONSTANT: ERROR_SERVICE_START_HANG 1070
CONSTANT: ERROR_INVALID_SERVICE_LOCK 1071
CONSTANT: ERROR_SERVICE_MARKED_FOR_DELETE 1072
CONSTANT: ERROR_SERVICE_EXISTS 1073
CONSTANT: ERROR_ALREADY_RUNNING_LKG 1074
CONSTANT: ERROR_SERVICE_DEPENDENCY_DELETED 1075
CONSTANT: ERROR_BOOT_ALREADY_ACCEPTED 1076
CONSTANT: ERROR_SERVICE_NEVER_STARTED 1077
CONSTANT: ERROR_DUPLICATE_SERVICE_NAME 1078
CONSTANT: ERROR_DIFFERENT_SERVICE_ACCOUNT 1079
CONSTANT: ERROR_END_OF_MEDIA 1100
CONSTANT: ERROR_FILEMARK_DETECTED 1101
CONSTANT: ERROR_BEGINNING_OF_MEDIA 1102
CONSTANT: ERROR_SETMARK_DETECTED 1103
CONSTANT: ERROR_NO_DATA_DETECTED 1104
CONSTANT: ERROR_PARTITION_FAILURE 1105
CONSTANT: ERROR_INVALID_BLOCK_LENGTH 1106
CONSTANT: ERROR_DEVICE_NOT_PARTITIONED 1107
CONSTANT: ERROR_UNABLE_TO_LOCK_MEDIA 1108
CONSTANT: ERROR_UNABLE_TO_UNLOAD_MEDIA 1109
CONSTANT: ERROR_MEDIA_CHANGED 1110
CONSTANT: ERROR_BUS_RESET 1111
CONSTANT: ERROR_NO_MEDIA_IN_DRIVE 1112
CONSTANT: ERROR_NO_UNICODE_TRANSLATION 1113
CONSTANT: ERROR_DLL_INIT_FAILED 1114
CONSTANT: ERROR_SHUTDOWN_IN_PROGRESS 1115
CONSTANT: ERROR_NO_SHUTDOWN_IN_PROGRESS 1116
CONSTANT: ERROR_IO_DEVICE 1117
CONSTANT: ERROR_SERIAL_NO_DEVICE 1118
CONSTANT: ERROR_IRQ_BUSY 1119
CONSTANT: ERROR_MORE_WRITES 1120
CONSTANT: ERROR_COUNTER_TIMEOUT 1121
CONSTANT: ERROR_FLOPPY_ID_MARK_NOT_FOUND 1122
CONSTANT: ERROR_FLOPPY_WRONG_CYLINDER 1123
CONSTANT: ERROR_FLOPPY_UNKNOWN_ERROR 1124
CONSTANT: ERROR_FLOPPY_BAD_REGISTERS 1125
CONSTANT: ERROR_DISK_RECALIBRATE_FAILED 1126
CONSTANT: ERROR_DISK_OPERATION_FAILED 1127
CONSTANT: ERROR_DISK_RESET_FAILED 1128
CONSTANT: ERROR_EOM_OVERFLOW 1129
CONSTANT: ERROR_NOT_ENOUGH_SERVER_MEMORY 1130
CONSTANT: ERROR_POSSIBLE_DEADLOCK 1131
CONSTANT: ERROR_MAPPED_ALIGNMENT 1132
CONSTANT: ERROR_SET_POWER_STATE_VETOED 1140
CONSTANT: ERROR_SET_POWER_STATE_FAILED 1141
CONSTANT: ERROR_TOO_MANY_LINKS 1142
CONSTANT: ERROR_OLD_WIN_VERSION 1150
CONSTANT: ERROR_APP_WRONG_OS 1151
CONSTANT: ERROR_SINGLE_INSTANCE_APP 1152
CONSTANT: ERROR_RMODE_APP 1153
CONSTANT: ERROR_INVALID_DLL 1154
CONSTANT: ERROR_NO_ASSOCIATION 1155
CONSTANT: ERROR_DDE_FAIL 1156
CONSTANT: ERROR_DLL_NOT_FOUND 1157
CONSTANT: ERROR_BAD_DEVICE 1200
CONSTANT: ERROR_CONNECTION_UNAVAIL 1201
CONSTANT: ERROR_DEVICE_ALREADY_REMEMBERED 1202
CONSTANT: ERROR_NO_NET_OR_BAD_PATH 1203
CONSTANT: ERROR_BAD_PROVIDER 1204
CONSTANT: ERROR_CANNOT_OPEN_PROFILE 1205
CONSTANT: ERROR_BAD_PROFILE 1206
CONSTANT: ERROR_NOT_CONTAINER 1207
CONSTANT: ERROR_EXTENDED_ERROR 1208
CONSTANT: ERROR_INVALID_GROUPNAME 1209
CONSTANT: ERROR_INVALID_COMPUTERNAME 1210
CONSTANT: ERROR_INVALID_EVENTNAME 1211
CONSTANT: ERROR_INVALID_DOMAINNAME 1212
CONSTANT: ERROR_INVALID_SERVICENAME 1213
CONSTANT: ERROR_INVALID_NETNAME 1214
CONSTANT: ERROR_INVALID_SHARENAME 1215
CONSTANT: ERROR_INVALID_PASSWORDNAME 1216
CONSTANT: ERROR_INVALID_MESSAGENAME 1217
CONSTANT: ERROR_INVALID_MESSAGEDEST 1218
CONSTANT: ERROR_SESSION_CREDENTIAL_CONFLICT 1219
CONSTANT: ERROR_REMOTE_SESSION_LIMIT_EXCEEDED 1220
CONSTANT: ERROR_DUP_DOMAINNAME 1221
CONSTANT: ERROR_NO_NETWORK 1222
CONSTANT: ERROR_CANCELLED 1223
CONSTANT: ERROR_USER_MAPPED_FILE 1224
CONSTANT: ERROR_CONNECTION_REFUSED 1225
CONSTANT: ERROR_GRACEFUL_DISCONNECT 1226
CONSTANT: ERROR_ADDRESS_ALREADY_ASSOCIATED 1227
CONSTANT: ERROR_ADDRESS_NOT_ASSOCIATED 1228
CONSTANT: ERROR_CONNECTION_INVALID 1229
CONSTANT: ERROR_CONNECTION_ACTIVE 1230
CONSTANT: ERROR_NETWORK_UNREACHABLE 1231
CONSTANT: ERROR_HOST_UNREACHABLE 1232
CONSTANT: ERROR_PROTOCOL_UNREACHABLE 1233
CONSTANT: ERROR_PORT_UNREACHABLE 1234
CONSTANT: ERROR_REQUEST_ABORTED 1235
CONSTANT: ERROR_CONNECTION_ABORTED 1236
CONSTANT: ERROR_RETRY 1237
CONSTANT: ERROR_CONNECTION_COUNT_LIMIT 1238
CONSTANT: ERROR_LOGIN_TIME_RESTRICTION 1239
CONSTANT: ERROR_LOGIN_WKSTA_RESTRICTION 1240
CONSTANT: ERROR_INCORRECT_ADDRESS 1241
CONSTANT: ERROR_ALREADY_REGISTERED 1242
CONSTANT: ERROR_SERVICE_NOT_FOUND 1243
CONSTANT: ERROR_NOT_AUTHENTICATED 1244
CONSTANT: ERROR_NOT_LOGGED_ON 1245
CONSTANT: ERROR_CONTINUE 1246
CONSTANT: ERROR_ALREADY_INITIALIZED 1247
CONSTANT: ERROR_NO_MORE_DEVICES 1248
CONSTANT: ERROR_NOT_ALL_ASSIGNED 1300
CONSTANT: ERROR_SOME_NOT_MAPPED 1301
CONSTANT: ERROR_NO_QUOTAS_FOR_ACCOUNT 1302
CONSTANT: ERROR_LOCAL_USER_SESSION_KEY 1303
CONSTANT: ERROR_NULL_LM_PASSWORD 1304
CONSTANT: ERROR_UNKNOWN_REVISION 1305
CONSTANT: ERROR_REVISION_MISMATCH 1306
CONSTANT: ERROR_INVALID_OWNER 1307
CONSTANT: ERROR_INVALID_PRIMARY_GROUP 1308
CONSTANT: ERROR_NO_IMPERSONATION_TOKEN 1309
CONSTANT: ERROR_CANT_DISABLE_MANDATORY 1310
CONSTANT: ERROR_NO_LOGON_SERVERS 1311
CONSTANT: ERROR_NO_SUCH_LOGON_SESSION 1312
CONSTANT: ERROR_NO_SUCH_PRIVILEGE 1313
CONSTANT: ERROR_PRIVILEGE_NOT_HELD 1314
CONSTANT: ERROR_INVALID_ACCOUNT_NAME 1315
CONSTANT: ERROR_USER_EXISTS 1316
CONSTANT: ERROR_NO_SUCH_USER 1317
CONSTANT: ERROR_GROUP_EXISTS 1318
CONSTANT: ERROR_NO_SUCH_GROUP 1319
CONSTANT: ERROR_MEMBER_IN_GROUP 1320
CONSTANT: ERROR_MEMBER_NOT_IN_GROUP 1321
CONSTANT: ERROR_LAST_ADMIN 1322
CONSTANT: ERROR_WRONG_PASSWORD 1323
CONSTANT: ERROR_ILL_FORMED_PASSWORD 1324
CONSTANT: ERROR_PASSWORD_RESTRICTION 1325
CONSTANT: ERROR_LOGON_FAILURE 1326
CONSTANT: ERROR_ACCOUNT_RESTRICTION 1327
CONSTANT: ERROR_INVALID_LOGON_HOURS 1328
CONSTANT: ERROR_INVALID_WORKSTATION 1329
CONSTANT: ERROR_PASSWORD_EXPIRED 1330
CONSTANT: ERROR_ACCOUNT_DISABLED 1331
CONSTANT: ERROR_NONE_MAPPED 1332
CONSTANT: ERROR_TOO_MANY_LUIDS_REQUESTED 1333
CONSTANT: ERROR_LUIDS_EXHAUSTED 1334
CONSTANT: ERROR_INVALID_SUB_AUTHORITY 1335
CONSTANT: ERROR_INVALID_ACL 1336
CONSTANT: ERROR_INVALID_SID 1337
CONSTANT: ERROR_INVALID_SECURITY_DESCR 1338
CONSTANT: ERROR_BAD_INHERITANCE_ACL 1340
CONSTANT: ERROR_SERVER_DISABLED 1341
CONSTANT: ERROR_SERVER_NOT_DISABLED 1342
CONSTANT: ERROR_INVALID_ID_AUTHORITY 1343
CONSTANT: ERROR_ALLOTTED_SPACE_EXCEEDED 1344
CONSTANT: ERROR_INVALID_GROUP_ATTRIBUTES 1345
CONSTANT: ERROR_BAD_IMPERSONATION_LEVEL 1346
CONSTANT: ERROR_CANT_OPEN_ANONYMOUS 1347
CONSTANT: ERROR_BAD_VALIDATION_CLASS 1348
CONSTANT: ERROR_BAD_TOKEN_TYPE 1349
CONSTANT: ERROR_NO_SECURITY_ON_OBJECT 1350
CONSTANT: ERROR_CANT_ACCESS_DOMAIN_INFO 1351
CONSTANT: ERROR_INVALID_SERVER_STATE 1352
CONSTANT: ERROR_INVALID_DOMAIN_STATE 1353
CONSTANT: ERROR_INVALID_DOMAIN_ROLE 1354
CONSTANT: ERROR_NO_SUCH_DOMAIN 1355
CONSTANT: ERROR_DOMAIN_EXISTS 1356
CONSTANT: ERROR_DOMAIN_LIMIT_EXCEEDED 1357
CONSTANT: ERROR_INTERNAL_DB_CORRUPTION 1358
CONSTANT: ERROR_INTERNAL_ERROR 1359
CONSTANT: ERROR_GENERIC_NOT_MAPPED 1360
CONSTANT: ERROR_BAD_DESCRIPTOR_FORMAT 1361
CONSTANT: ERROR_NOT_LOGON_PROCESS 1362
CONSTANT: ERROR_LOGON_SESSION_EXISTS 1363
CONSTANT: ERROR_NO_SUCH_PACKAGE 1364
CONSTANT: ERROR_BAD_LOGON_SESSION_STATE 1365
CONSTANT: ERROR_LOGON_SESSION_COLLISION 1366
CONSTANT: ERROR_INVALID_LOGON_TYPE 1367
CONSTANT: ERROR_CANNOT_IMPERSONATE 1368
CONSTANT: ERROR_RXACT_INVALID_STATE 1369
CONSTANT: ERROR_RXACT_COMMIT_FAILURE 1370
CONSTANT: ERROR_SPECIAL_ACCOUNT 1371
CONSTANT: ERROR_SPECIAL_GROUP 1372
CONSTANT: ERROR_SPECIAL_USER 1373
CONSTANT: ERROR_MEMBERS_PRIMARY_GROUP 1374
CONSTANT: ERROR_TOKEN_ALREADY_IN_USE 1375
CONSTANT: ERROR_NO_SUCH_ALIAS 1376
CONSTANT: ERROR_MEMBER_NOT_IN_ALIAS 1377
CONSTANT: ERROR_MEMBER_IN_ALIAS 1378
CONSTANT: ERROR_ALIAS_EXISTS 1379
CONSTANT: ERROR_LOGON_NOT_GRANTED 1380
CONSTANT: ERROR_TOO_MANY_SECRETS 1381
CONSTANT: ERROR_SECRET_TOO_LONG 1382
CONSTANT: ERROR_INTERNAL_DB_ERROR 1383
CONSTANT: ERROR_TOO_MANY_CONTEXT_IDS 1384
CONSTANT: ERROR_LOGON_TYPE_NOT_GRANTED 1385
CONSTANT: ERROR_NT_CROSS_ENCRYPTION_REQUIRED 1386
CONSTANT: ERROR_NO_SUCH_MEMBER 1387
CONSTANT: ERROR_INVALID_MEMBER 1388
CONSTANT: ERROR_TOO_MANY_SIDS 1389
CONSTANT: ERROR_LM_CROSS_ENCRYPTION_REQUIRED 1390
CONSTANT: ERROR_NO_INHERITANCE 1391
CONSTANT: ERROR_FILE_CORRUPT 1392
CONSTANT: ERROR_DISK_CORRUPT 1393
CONSTANT: ERROR_NO_USER_SESSION_KEY 1394
CONSTANT: ERROR_LICENSE_QUOTA_EXCEEDED 1395
CONSTANT: ERROR_INVALID_WINDOW_HANDLE 1400
CONSTANT: ERROR_INVALID_MENU_HANDLE 1401
CONSTANT: ERROR_INVALID_CURSOR_HANDLE 1402
CONSTANT: ERROR_INVALID_ACCEL_HANDLE 1403
CONSTANT: ERROR_INVALID_HOOK_HANDLE 1404
CONSTANT: ERROR_INVALID_DWP_HANDLE 1405
CONSTANT: ERROR_TLW_WITH_WSCHILD 1406
CONSTANT: ERROR_CANNOT_FIND_WND_CLASS 1407
CONSTANT: ERROR_WINDOW_OF_OTHER_THREAD 1408
CONSTANT: ERROR_HOTKEY_ALREADY_REGISTERED 1409
CONSTANT: ERROR_CLASS_ALREADY_EXISTS 1410
CONSTANT: ERROR_CLASS_DOES_NOT_EXIST 1411
CONSTANT: ERROR_CLASS_HAS_WINDOWS 1412
CONSTANT: ERROR_INVALID_INDEX 1413
CONSTANT: ERROR_INVALID_ICON_HANDLE 1414
CONSTANT: ERROR_PRIVATE_DIALOG_INDEX 1415
CONSTANT: ERROR_LISTBOX_ID_NOT_FOUND 1416
CONSTANT: ERROR_NO_WILDCARD_CHARACTERS 1417
CONSTANT: ERROR_CLIPBOARD_NOT_OPEN 1418
CONSTANT: ERROR_HOTKEY_NOT_REGISTERED 1419
CONSTANT: ERROR_WINDOW_NOT_DIALOG 1420
CONSTANT: ERROR_CONTROL_ID_NOT_FOUND 1421
CONSTANT: ERROR_INVALID_COMBOBOX_MESSAGE 1422
CONSTANT: ERROR_WINDOW_NOT_COMBOBOX 1423
CONSTANT: ERROR_INVALID_EDIT_HEIGHT 1424
CONSTANT: ERROR_DC_NOT_FOUND 1425
CONSTANT: ERROR_INVALID_HOOK_FILTER 1426
CONSTANT: ERROR_INVALID_FILTER_PROC 1427
CONSTANT: ERROR_HOOK_NEEDS_HMOD 1428
CONSTANT: ERROR_GLOBAL_ONLY_HOOK 1429
CONSTANT: ERROR_JOURNAL_HOOK_SET 1430
CONSTANT: ERROR_HOOK_NOT_INSTALLED 1431
CONSTANT: ERROR_INVALID_LB_MESSAGE 1432
CONSTANT: ERROR_LB_WITHOUT_TABSTOPS 1434
CONSTANT: ERROR_DESTROY_OBJECT_OF_OTHER_THREAD 1435
CONSTANT: ERROR_CHILD_WINDOW_MENU 1436
CONSTANT: ERROR_NO_SYSTEM_MENU 1437
CONSTANT: ERROR_INVALID_MSGBOX_STYLE 1438
CONSTANT: ERROR_INVALID_SPI_VALUE 1439
CONSTANT: ERROR_SCREEN_ALREADY_LOCKED 1440
CONSTANT: ERROR_HWNDS_HAVE_DIFF_PARENT 1441
CONSTANT: ERROR_NOT_CHILD_WINDOW 1442
CONSTANT: ERROR_INVALID_GW_COMMAND 1443
CONSTANT: ERROR_INVALID_THREAD_ID 1444
CONSTANT: ERROR_NON_MDICHILD_WINDOW 1445
CONSTANT: ERROR_POPUP_ALREADY_ACTIVE 1446
CONSTANT: ERROR_NO_SCROLLBARS 1447
CONSTANT: ERROR_INVALID_SCROLLBAR_RANGE 1448
CONSTANT: ERROR_INVALID_SHOWWIN_COMMAND 1449
CONSTANT: ERROR_NO_SYSTEM_RESOURCES 1450
CONSTANT: ERROR_NONPAGED_SYSTEM_RESOURCES 1451
CONSTANT: ERROR_PAGED_SYSTEM_RESOURCES 1452
CONSTANT: ERROR_WORKING_SET_QUOTA 1453
CONSTANT: ERROR_PAGEFILE_QUOTA 1454
CONSTANT: ERROR_COMMITMENT_LIMIT 1455
CONSTANT: ERROR_MENU_ITEM_NOT_FOUND 1456
CONSTANT: ERROR_INVALID_KEYBOARD_HANDLE 1457
CONSTANT: ERROR_HOOK_TYPE_NOT_ALLOWED 1458
CONSTANT: ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION 1459
CONSTANT: ERROR_TIMEOUT 1460
CONSTANT: ERROR_EVENTLOG_FILE_CORRUPT 1500
CONSTANT: ERROR_EVENTLOG_CANT_START 1501
CONSTANT: ERROR_LOG_FILE_FULL 1502
CONSTANT: ERROR_EVENTLOG_FILE_CHANGED 1503
CONSTANT: RPC_S_INVALID_STRING_BINDING 1700
CONSTANT: RPC_S_WRONG_KIND_OF_BINDING 1701
CONSTANT: RPC_S_INVALID_BINDING 1702
CONSTANT: RPC_S_PROTSEQ_NOT_SUPPORTED 1703
CONSTANT: RPC_S_INVALID_RPC_PROTSEQ 1704
CONSTANT: RPC_S_INVALID_STRING_UUID 1705
CONSTANT: RPC_S_INVALID_ENDPOINT_FORMAT 1706
CONSTANT: RPC_S_INVALID_NET_ADDR 1707
CONSTANT: RPC_S_NO_ENDPOINT_FOUND 1708
CONSTANT: RPC_S_INVALID_TIMEOUT 1709
CONSTANT: RPC_S_OBJECT_NOT_FOUND 1710
CONSTANT: RPC_S_ALREADY_REGISTERED 1711
CONSTANT: RPC_S_TYPE_ALREADY_REGISTERED 1712
CONSTANT: RPC_S_ALREADY_LISTENING 1713
CONSTANT: RPC_S_NO_PROTSEQS_REGISTERED 1714
CONSTANT: RPC_S_NOT_LISTENING 1715
CONSTANT: RPC_S_UNKNOWN_MGR_TYPE 1716
CONSTANT: RPC_S_UNKNOWN_IF 1717
CONSTANT: RPC_S_NO_BINDINGS 1718
CONSTANT: RPC_S_NO_PROTSEQS 1719
CONSTANT: RPC_S_CANT_CREATE_ENDPOINT 1720
CONSTANT: RPC_S_OUT_OF_RESOURCES 1721
CONSTANT: RPC_S_SERVER_UNAVAILABLE 1722
CONSTANT: RPC_S_SERVER_TOO_BUSY 1723
CONSTANT: RPC_S_INVALID_NETWORK_OPTIONS 1724
CONSTANT: RPC_S_NO_CALL_ACTIVE 1725
CONSTANT: RPC_S_CALL_FAILED 1726
CONSTANT: RPC_S_CALL_FAILED_DNE 1727
CONSTANT: RPC_S_PROTOCOL_ERROR 1728
CONSTANT: RPC_S_UNSUPPORTED_TRANS_SYN 1730
CONSTANT: RPC_S_UNSUPPORTED_TYPE 1732
CONSTANT: RPC_S_INVALID_TAG 1733
CONSTANT: RPC_S_INVALID_BOUND 1734
CONSTANT: RPC_S_NO_ENTRY_NAME 1735
CONSTANT: RPC_S_INVALID_NAME_SYNTAX 1736
CONSTANT: RPC_S_UNSUPPORTED_NAME_SYNTAX 1737
CONSTANT: RPC_S_UUID_NO_ADDRESS 1739
CONSTANT: RPC_S_DUPLICATE_ENDPOINT 1740
CONSTANT: RPC_S_UNKNOWN_AUTHN_TYPE 1741
CONSTANT: RPC_S_MAX_CALLS_TOO_SMALL 1742
CONSTANT: RPC_S_STRING_TOO_LONG 1743
CONSTANT: RPC_S_PROTSEQ_NOT_FOUND 1744
CONSTANT: RPC_S_PROCNUM_OUT_OF_RANGE 1745
CONSTANT: RPC_S_BINDING_HAS_NO_AUTH 1746
CONSTANT: RPC_S_UNKNOWN_AUTHN_SERVICE 1747
CONSTANT: RPC_S_UNKNOWN_AUTHN_LEVEL 1748
CONSTANT: RPC_S_INVALID_AUTH_IDENTITY 1749
CONSTANT: RPC_S_UNKNOWN_AUTHZ_SERVICE 1750
CONSTANT: EPT_S_INVALID_ENTRY 1751
CONSTANT: EPT_S_CANT_PERFORM_OP 1752
CONSTANT: EPT_S_NOT_REGISTERED 1753
CONSTANT: RPC_S_NOTHING_TO_EXPORT 1754
CONSTANT: RPC_S_INCOMPLETE_NAME 1755
CONSTANT: RPC_S_INVALID_VERS_OPTION 1756
CONSTANT: RPC_S_NO_MORE_MEMBERS 1757
CONSTANT: RPC_S_NOT_ALL_OBJS_UNEXPORTED 1758
CONSTANT: RPC_S_INTERFACE_NOT_FOUND 1759
CONSTANT: RPC_S_ENTRY_ALREADY_EXISTS 1760
CONSTANT: RPC_S_ENTRY_NOT_FOUND 1761
CONSTANT: RPC_S_NAME_SERVICE_UNAVAILABLE 1762
CONSTANT: RPC_S_INVALID_NAF_ID 1763
CONSTANT: RPC_S_CANNOT_SUPPORT 1764
CONSTANT: RPC_S_NO_CONTEXT_AVAILABLE 1765
CONSTANT: RPC_S_INTERNAL_ERROR 1766
CONSTANT: RPC_S_ZERO_DIVIDE 1767
CONSTANT: RPC_S_ADDRESS_ERROR 1768
CONSTANT: RPC_S_FP_DIV_ZERO 1769
CONSTANT: RPC_S_FP_UNDERFLOW 1770
CONSTANT: RPC_S_FP_OVERFLOW 1771
CONSTANT: RPC_X_NO_MORE_ENTRIES 1772
CONSTANT: RPC_X_SS_CHAR_TRANS_OPEN_FAIL 1773
CONSTANT: RPC_X_SS_CHAR_TRANS_SHORT_FILE 1774
CONSTANT: RPC_X_SS_IN_NULL_CONTEXT 1775
CONSTANT: RPC_X_SS_CONTEXT_DAMAGED 1777
CONSTANT: RPC_X_SS_HANDLES_MISMATCH 1778
CONSTANT: RPC_X_SS_CANNOT_GET_CALL_HANDLE 1779
CONSTANT: RPC_X_NULL_REF_POINTER 1780
CONSTANT: RPC_X_ENUM_VALUE_OUT_OF_RANGE 1781
CONSTANT: RPC_X_BYTE_COUNT_TOO_SMALL 1782
CONSTANT: RPC_X_BAD_STUB_DATA 1783
CONSTANT: ERROR_INVALID_USER_BUFFER 1784
CONSTANT: ERROR_UNRECOGNIZED_MEDIA 1785
CONSTANT: ERROR_NO_TRUST_LSA_SECRET 1786
CONSTANT: ERROR_NO_TRUST_SAM_ACCOUNT 1787
CONSTANT: ERROR_TRUSTED_DOMAIN_FAILURE 1788
CONSTANT: ERROR_TRUSTED_RELATIONSHIP_FAILURE 1789
CONSTANT: ERROR_TRUST_FAILURE 1790
CONSTANT: RPC_S_CALL_IN_PROGRESS 1791
CONSTANT: ERROR_NETLOGON_NOT_STARTED 1792
CONSTANT: ERROR_ACCOUNT_EXPIRED 1793
CONSTANT: ERROR_REDIRECTOR_HAS_OPEN_HANDLES 1794
CONSTANT: ERROR_PRINTER_DRIVER_ALREADY_INSTALLED 1795
CONSTANT: ERROR_UNKNOWN_PORT 1796
CONSTANT: ERROR_UNKNOWN_PRINTER_DRIVER 1797
CONSTANT: ERROR_UNKNOWN_PRINTPROCESSOR 1798
CONSTANT: ERROR_INVALID_SEPARATOR_FILE 1799
CONSTANT: ERROR_INVALID_PRIORITY 1800
CONSTANT: ERROR_INVALID_PRINTER_NAME 1801
CONSTANT: ERROR_PRINTER_ALREADY_EXISTS 1802
CONSTANT: ERROR_INVALID_PRINTER_COMMAND 1803
CONSTANT: ERROR_INVALID_DATATYPE 1804
CONSTANT: ERROR_INVALID_ENVIRONMENT 1805
CONSTANT: RPC_S_NO_MORE_BINDINGS 1806
CONSTANT: ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT 1807
CONSTANT: ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT 1808
CONSTANT: ERROR_NOLOGON_SERVER_TRUST_ACCOUNT 1809
CONSTANT: ERROR_DOMAIN_TRUST_INCONSISTENT 1810
CONSTANT: ERROR_SERVER_HAS_OPEN_HANDLES 1811
CONSTANT: ERROR_RESOURCE_DATA_NOT_FOUND 1812
CONSTANT: ERROR_RESOURCE_TYPE_NOT_FOUND 1813
CONSTANT: ERROR_RESOURCE_NAME_NOT_FOUND 1814
CONSTANT: ERROR_RESOURCE_LANG_NOT_FOUND 1815
CONSTANT: ERROR_NOT_ENOUGH_QUOTA 1816
CONSTANT: RPC_S_NO_INTERFACES 1817
CONSTANT: RPC_S_CALL_CANCELLED 1818
CONSTANT: RPC_S_BINDING_INCOMPLETE 1819
CONSTANT: RPC_S_COMM_FAILURE 1820
CONSTANT: RPC_S_UNSUPPORTED_AUTHN_LEVEL 1821
CONSTANT: RPC_S_NO_PRINC_NAME 1822
CONSTANT: RPC_S_NOT_RPC_ERROR 1823
CONSTANT: RPC_S_UUID_LOCAL_ONLY 1824
CONSTANT: RPC_S_SEC_PKG_ERROR 1825
CONSTANT: RPC_S_NOT_CANCELLED 1826
CONSTANT: RPC_X_INVALID_ES_ACTION 1827
CONSTANT: RPC_X_WRONG_ES_VERSION 1828
CONSTANT: RPC_X_WRONG_STUB_VERSION 1829
CONSTANT: RPC_X_INVALID_PIPE_OBJECT 1830
CONSTANT: RPC_X_INVALID_PIPE_OPERATION 1831
CONSTANT: RPC_X_WRONG_PIPE_VERSION 1832
CONSTANT: RPC_S_GROUP_MEMBER_NOT_FOUND 1898
CONSTANT: EPT_S_CANT_CREATE 1899
CONSTANT: RPC_S_INVALID_OBJECT 1900
CONSTANT: ERROR_INVALID_TIME 1901
CONSTANT: ERROR_INVALID_FORM_NAME 1902
CONSTANT: ERROR_INVALID_FORM_SIZE 1903
CONSTANT: ERROR_ALREADY_WAITING 1904
CONSTANT: ERROR_PRINTER_DELETED 1905
CONSTANT: ERROR_INVALID_PRINTER_STATE 1906
CONSTANT: ERROR_PASSWORD_MUST_CHANGE 1907
CONSTANT: ERROR_DOMAIN_CONTROLLER_NOT_FOUND 1908
CONSTANT: ERROR_ACCOUNT_LOCKED_OUT 1909
CONSTANT: OR_INVALID_OXID 1910
CONSTANT: OR_INVALID_OID 1911
CONSTANT: OR_INVALID_SET 1912
CONSTANT: RPC_S_SEND_INCOMPLETE 1913
CONSTANT: ERROR_INVALID_PIXEL_FORMAT 2000
CONSTANT: ERROR_BAD_DRIVER 2001
CONSTANT: ERROR_INVALID_WINDOW_STYLE 2002
CONSTANT: ERROR_METAFILE_NOT_SUPPORTED 2003
CONSTANT: ERROR_TRANSFORM_NOT_SUPPORTED 2004
CONSTANT: ERROR_CLIPPING_NOT_SUPPORTED 2005
CONSTANT: ERROR_BAD_USERNAME 2202
CONSTANT: ERROR_NOT_CONNECTED 2250
CONSTANT: ERROR_OPEN_FILES 2401
CONSTANT: ERROR_ACTIVE_CONNECTIONS 2402
CONSTANT: ERROR_DEVICE_IN_USE 2404
CONSTANT: ERROR_UNKNOWN_PRINT_MONITOR 3000
CONSTANT: ERROR_PRINTER_DRIVER_IN_USE 3001
CONSTANT: ERROR_SPOOL_FILE_NOT_FOUND 3002
CONSTANT: ERROR_SPL_NO_STARTDOC 3003
CONSTANT: ERROR_SPL_NO_ADDJOB 3004
CONSTANT: ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED 3005
CONSTANT: ERROR_PRINT_MONITOR_ALREADY_INSTALLED 3006
CONSTANT: ERROR_INVALID_PRINT_MONITOR 3007
CONSTANT: ERROR_PRINT_MONITOR_IN_USE 3008
CONSTANT: ERROR_PRINTER_HAS_JOBS_QUEUED 3009
CONSTANT: ERROR_SUCCESS_REBOOT_REQUIRED 3010
CONSTANT: ERROR_SUCCESS_RESTART_REQUIRED 3011
CONSTANT: ERROR_WINS_INTERNAL 4000
CONSTANT: ERROR_CAN_NOT_DEL_LOCAL_WINS 4001
CONSTANT: ERROR_STATIC_INIT 4002
CONSTANT: ERROR_INC_BACKUP 4003
CONSTANT: ERROR_FULL_BACKUP 4004
CONSTANT: ERROR_REC_NON_EXISTENT 4005
CONSTANT: ERROR_RPL_NOT_ALLOWED 4006
CONSTANT: ERROR_NO_BROWSER_SERVERS_FOUND 6118
CONSTANT: SUBLANG_NEUTRAL 0
CONSTANT: LANG_NEUTRAL 0
CONSTANT: SUBLANG_DEFAULT 1
CONSTANT: FORMAT_MESSAGE_ALLOCATE_BUFFER HEX: 00000100
CONSTANT: FORMAT_MESSAGE_IGNORE_INSERTS HEX: 00000200
CONSTANT: FORMAT_MESSAGE_FROM_STRING HEX: 00000400
CONSTANT: FORMAT_MESSAGE_FROM_HMODULE HEX: 00000800
CONSTANT: FORMAT_MESSAGE_FROM_SYSTEM HEX: 00001000
CONSTANT: FORMAT_MESSAGE_ARGUMENT_ARRAY HEX: 00002000
CONSTANT: FORMAT_MESSAGE_MAX_WIDTH_MASK HEX: 000000FF
: make-lang-id ( lang1 lang2 -- n )
10 shift bitor ; inline
ERROR: error-message-failed id ;
:: n>win32-error-string ( id -- string )
{
FORMAT_MESSAGE_FROM_SYSTEM
FORMAT_MESSAGE_ARGUMENT_ARRAY
} flags
f
id
LANG_NEUTRAL SUBLANG_DEFAULT make-lang-id
32768 [ "TCHAR" <c-array> ] keep
f pick [ FormatMessage 0 = [ id error-message-failed ] when ] dip
utf16n alien>string [ blank? ] trim ;
: win32-error-string ( -- str )
GetLastError n>win32-error-string ;
: (win32-error) ( n -- )
dup zero? [
drop
] [
win32-error-string throw
] if ;
: win32-error ( -- )
GetLastError (win32-error) ;
: win32-error=0/f ( n -- ) { 0 f } member? [ win32-error ] when ;
: win32-error>0 ( n -- ) 0 > [ win32-error ] when ;
: win32-error<0 ( n -- ) 0 < [ win32-error ] when ;
: win32-error<>0 ( n -- ) zero? [ win32-error ] unless ;
: invalid-handle? ( handle -- )
INVALID_HANDLE_VALUE = [
win32-error-string throw
] when ;
: expected-io-errors ( -- seq )
ERROR_SUCCESS
ERROR_IO_INCOMPLETE
ERROR_IO_PENDING
WAIT_TIMEOUT 4array ; foldable
: expected-io-error? ( error-code -- ? )
expected-io-errors member? ;
: expected-io-error ( error-code -- )
dup expected-io-error? [
drop
] [
win32-error-string throw
] if ;
: io-error ( return-value -- )
{ 0 f } member? [ GetLastError expected-io-error ] when ;

View File

@ -1,5 +1,5 @@
USING: assocs memoize locals kernel accessors init fonts math
combinators windows windows.types windows.gdi32 ;
combinators windows.errors windows.types windows.gdi32 ;
IN: windows.fonts
: windows-font-name ( string -- string' )

View File

@ -0,0 +1 @@
unportable

View File

@ -1110,7 +1110,19 @@ FUNCTION: BOOL FindVolumeMountPointClose ( HANDLE hFindVolumeMountPoint ) ;
! FUNCTION: FoldStringA
! FUNCTION: FoldStringW
! FUNCTION: FormatMessageA
! FUNCTION: FormatMessageW
FUNCTION: DWORD FormatMessageW (
DWORD dwFlags,
LPCVOID lpSource,
DWORD dwMessageId,
DWORD dwLanguageId,
LPTSTR lpBuffer,
DWORD nSize,
void* Arguments
) ;
ALIAS: FormatMessage FormatMessageW
FUNCTION: BOOL FreeConsole ( ) ;
! FUNCTION: FreeEnvironmentStringsA
FUNCTION: BOOL FreeEnvironmentStringsW ( LPTCH lpszEnvironmentBlock ) ;

View File

@ -1,6 +1,6 @@
USING: alien alien.syntax alien.c-types alien.strings math
kernel sequences windows windows.types debugger io accessors
math.order namespaces make math.parser windows.kernel32
kernel sequences windows.errors windows.types debugger io
accessors math.order namespaces make math.parser windows.kernel32
combinators locals specialized-arrays.direct.uchar ;
IN: windows.ole32
@ -120,7 +120,7 @@ TUPLE: ole32-error error-code ;
C: <ole32-error> ole32-error
M: ole32-error error.
"COM method failed: " print error-code>> (win32-error-string) print ;
"COM method failed: " print error-code>> n>win32-error-string print ;
: ole32-error ( hresult -- )
dup succeeded? [ drop ] [ <ole32-error> throw ] if ;

View File

@ -2,8 +2,8 @@
! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types alien.strings alien.syntax
combinators io.encodings.utf16n io.files io.pathnames kernel
windows windows.com windows.com.syntax windows.user32
windows.ole32 ;
windows.errors windows.com windows.com.syntax windows.user32
windows.ole32 windows ;
IN: windows.shell32
CONSTANT: CSIDL_DESKTOP HEX: 00

View File

@ -1,11 +1,11 @@
! Copyright (C) 2007 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types kernel math windows windows.kernel32
namespaces calendar math.bitwise ;
USING: alien alien.c-types kernel math windows.errors
windows.kernel32 namespaces calendar math.bitwise ;
IN: windows.time
: >64bit ( lo hi -- n )
32 shift bitor ;
32 shift bitor ; inline
: windows-1601 ( -- timestamp )
1601 1 1 0 0 0 instant <timestamp> ;

View File

@ -100,7 +100,7 @@ TYPEDEF: HANDLE HGDIOBJ
TYPEDEF: HANDLE HGLOBAL
TYPEDEF: HANDLE HHOOK
TYPEDEF: HANDLE HINSTANCE
TYPEDEF: HANDLE HKEY
TYPEDEF: DWORD HKEY
TYPEDEF: HANDLE HKL
TYPEDEF: HANDLE HLOCAL
TYPEDEF: HANDLE HMENU

View File

@ -2,9 +2,9 @@
! See http://factorcode.org/license.txt for BSD license.
USING: kernel assocs math sequences fry io.encodings.string
io.encodings.utf16n accessors arrays combinators destructors
cache namespaces init fonts alien.c-types windows windows.usp10
cache namespaces init fonts alien.c-types windows.usp10
windows.offscreen windows.gdi32 windows.ole32 windows.types
windows.fonts opengl.textures locals ;
windows.fonts opengl.textures locals windows.errors ;
IN: windows.uniscribe
TUPLE: script-string font string metrics ssa size image disposed ;

View File

@ -542,12 +542,46 @@ C-STRUCT: DEV_BROADCAST_HDR
{ "DWORD" "dbch_size" }
{ "DWORD" "dbch_devicetype" }
{ "DWORD" "dbch_reserved" } ;
C-STRUCT: DEV_BROADCAST_DEVICEW
{ "DWORD" "dbcc_size" }
{ "DWORD" "dbcc_devicetype" }
{ "DWORD" "dbcc_reserved" }
{ "GUID" "dbcc_classguid" }
{ "WCHAR[1]" "dbcc_name" } ;
{ { "WCHAR" 1 } "dbcc_name" } ;
CONSTANT: CCHDEVICENAME 32
C-STRUCT: MONITORINFOEX
{ "DWORD" "cbSize" }
{ "RECT" "rcMonitor" }
{ "RECT" "rcWork" }
{ "DWORD" "dwFlags" }
{ { "TCHAR" CCHDEVICENAME } "szDevice" } ;
TYPEDEF: MONITORINFOEX* LPMONITORINFOEX
TYPEDEF: MONITORINFOEX* LPMONITORINFO
CONSTANT: MONITOR_DEFAULTTONULL 0
CONSTANT: MONITOR_DEFAULTTOPRIMARY 1
CONSTANT: MONITOR_DEFAULTTONEAREST 2
CONSTANT: MONITORINFOF_PRIMARY 1
CONSTANT: SWP_NOSIZE 1
CONSTANT: SWP_NOMOVE 2
CONSTANT: SWP_NOZORDER 4
CONSTANT: SWP_NOREDRAW 8
CONSTANT: SWP_NOACTIVATE 16
CONSTANT: SWP_FRAMECHANGED 32
CONSTANT: SWP_SHOWWINDOW 64
CONSTANT: SWP_HIDEWINDOW 128
CONSTANT: SWP_NOCOPYBITS 256
CONSTANT: SWP_NOOWNERZORDER 512
CONSTANT: SWP_NOSENDCHANGING 1024
CONSTANT: SWP_DRAWFRAME SWP_FRAMECHANGED
CONSTANT: SWP_NOREPOSITION SWP_NOOWNERZORDER
CONSTANT: SWP_DEFERERASE 8192
CONSTANT: SWP_ASYNCWINDOWPOS 16384
LIBRARY: user32
@ -910,7 +944,10 @@ ALIAS: GetMessage GetMessageW
! FUNCTION: GetMessagePos
! FUNCTION: GetMessageTime
! FUNCTION: GetMonitorInfoA
! FUNCTION: GetMonitorInfoW
FUNCTION: BOOL GetMonitorInfoW ( HMONITOR hMonitor, LPMONITORINFO lpmi ) ;
ALIAS: GetMonitorInfo GetMonitorInfoW
! FUNCTION: GetMouseMovePointsEx
! FUNCTION: GetNextDlgGroupItem
! FUNCTION: GetNextDlgTabItem
@ -961,6 +998,8 @@ FUNCTION: HWND GetWindow ( HWND hWnd, UINT uCmd ) ;
! FUNCTION: GetWindowInfo
! FUNCTION: GetWindowLongA
! FUNCTION: GetWindowLongW
FUNCTION: LONG_PTR GetWindowLongW ( HANDLE hWnd, int index ) ;
ALIAS: GetWindowLong GetWindowLongW
! FUNCTION: GetWindowModuleFileName
! FUNCTION: GetWindowModuleFileNameA
! FUNCTION: GetWindowModuleFileNameW
@ -1127,7 +1166,7 @@ ALIAS: MessageBoxEx MessageBoxExW
! FUNCTION: ModifyMenuW
! FUNCTION: MonitorFromPoint
! FUNCTION: MonitorFromRect
! FUNCTION: MonitorFromWindow
FUNCTION: HMONITOR MonitorFromWindow ( HWND hWnd, DWORD dwFlags ) ;
! FUNCTION: mouse_event
@ -1303,12 +1342,14 @@ FUNCTION: void SetLastErrorEx ( DWORD dwErrCode, DWORD dwType ) ;
! FUNCTION: SetWindowContextHelpId
! FUNCTION: SetWindowLongA
! FUNCTION: SetWindowLongW
FUNCTION: LONG_PTR SetWindowLongW ( HANDLE hWnd, int index, LONG_PTR dwNewLong ) ;
ALIAS: SetWindowLong SetWindowLongW
! FUNCTION: SetWindowPlacement
FUNCTION: BOOL SetWindowPos ( HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags ) ;
: HWND_BOTTOM ( -- alien ) 1 <alien> ;
: HWND_NOTOPMOST ( -- alien ) -2 <alien> ;
: HWND_TOP ( -- alien ) 0 <alien> ;
CONSTANT: HWND_TOP f
: HWND_TOPMOST ( -- alien ) -1 <alien> ;
! FUNCTION: SetWindowRgn

View File

@ -1,61 +1,5 @@
! Copyright (C) 2005, 2006 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.syntax alien.c-types alien.strings arrays
combinators kernel math namespaces parser sequences
windows.errors windows.types windows.kernel32 words
io.encodings.utf16n ;
IN: windows
: lo-word ( wparam -- lo ) <short> *short ; inline
: hi-word ( wparam -- hi ) -16 shift lo-word ; inline
CONSTANT: MAX_UNICODE_PATH 32768
! You must LocalFree the return value!
FUNCTION: void* error_message ( DWORD id ) ;
: (win32-error-string) ( n -- string )
error_message
dup utf16n alien>string
swap LocalFree drop ;
: win32-error-string ( -- str )
GetLastError (win32-error-string) ;
: (win32-error) ( n -- )
dup zero? [
drop
] [
win32-error-string throw
] if ;
: win32-error ( -- )
GetLastError (win32-error) ;
: win32-error=0/f ( n -- ) { 0 f } member? [ win32-error ] when ;
: win32-error>0 ( n -- ) 0 > [ win32-error ] when ;
: win32-error<0 ( n -- ) 0 < [ win32-error ] when ;
: win32-error<>0 ( n -- ) zero? [ win32-error ] unless ;
: invalid-handle? ( handle -- )
INVALID_HANDLE_VALUE = [
win32-error-string throw
] when ;
: expected-io-errors ( -- seq )
ERROR_SUCCESS
ERROR_IO_INCOMPLETE
ERROR_IO_PENDING
WAIT_TIMEOUT 4array ; foldable
: expected-io-error? ( error-code -- ? )
expected-io-errors member? ;
: expected-io-error ( error-code -- )
dup expected-io-error? [
drop
] [
(win32-error-string) throw
] if ;
: io-error ( return-value -- )
{ 0 f } member? [ GetLastError expected-io-error ] when ;

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types alien.strings alien.syntax arrays
byte-arrays kernel math sequences windows.types windows.kernel32
windows.errors windows math.bitwise io.encodings.utf16n ;
windows.errors math.bitwise io.encodings.utf16n ;
IN: windows.winsock
USE: libc
@ -403,7 +403,7 @@ CONSTANT: SIO_GET_EXTENSION_FUNCTION_POINTER -939524090
: (winsock-error-string) ( n -- str )
! #! WSAStartup returns the error code 'n' directly
dup winsock-expected-error?
[ drop f ] [ error_message utf16n alien>string ] if ;
[ drop f ] [ n>win32-error-string ] if ;
: winsock-error-string ( -- string/f )
WSAGetLastError (winsock-error-string) ;

23
extra/audio/audio.factor Normal file
View File

@ -0,0 +1,23 @@
USING: accessors alien arrays combinators kernel math openal ;
IN: audio
TUPLE: audio
{ channels integer }
{ sample-bits integer }
{ sample-rate integer }
{ size integer }
{ data c-ptr } ;
C: <audio> audio
ERROR: format-unsupported-by-openal audio ;
: openal-format ( audio -- format )
dup [ channels>> ] [ sample-bits>> ] bi 2array {
{ { 1 8 } [ drop AL_FORMAT_MONO8 ] }
{ { 1 16 } [ drop AL_FORMAT_MONO16 ] }
{ { 2 8 } [ drop AL_FORMAT_STEREO8 ] }
{ { 2 16 } [ drop AL_FORMAT_STEREO16 ] }
[ drop format-unsupported-by-openal ]
} case ;

View File

@ -0,0 +1,85 @@
USING: alien.c-types alien.syntax audio combinators
combinators.short-circuit io io.binary io.encodings.binary
io.files io.streams.byte-array kernel locals math
sequences ;
IN: audio.wav
CONSTANT: RIFF-MAGIC "RIFF"
CONSTANT: WAVE-MAGIC "WAVE"
CONSTANT: FMT-MAGIC "fmt "
CONSTANT: DATA-MAGIC "data"
C-STRUCT: riff-chunk-header
{ "char[4]" "id" }
{ "uchar[4]" "size" }
;
C-STRUCT: riff-chunk
{ "riff-chunk-header" "header" }
{ "char[4]" "format" }
;
C-STRUCT: wav-fmt-chunk
{ "riff-chunk-header" "header" }
{ "uchar[2]" "audio-format" }
{ "uchar[2]" "num-channels" }
{ "uchar[4]" "sample-rate" }
{ "uchar[4]" "byte-rate" }
{ "uchar[2]" "block-align" }
{ "uchar[2]" "bits-per-sample" }
;
C-STRUCT: wav-data-chunk
{ "riff-chunk-header" "header" }
{ "uchar[0]" "body" }
;
ERROR: invalid-wav-file ;
: ensured-read ( count -- output/f )
[ read ] keep over length = [ drop f ] unless ;
: ensured-read* ( count -- output )
ensured-read [ invalid-wav-file ] unless* ;
: read-chunk ( -- byte-array/f )
4 ensured-read [ 4 ensured-read* dup le> ensured-read* 3append ] [ f ] if* ;
: read-riff-chunk ( -- byte-array/f )
"riff-chunk" heap-size ensured-read* ;
: id= ( chunk id -- ? )
[ 4 head ] dip sequence= ;
: check-chunk ( chunk id min-size -- ? )
[ id= ] [ [ length ] dip >= ] bi-curry* bi and ;
:: read-wav-chunks ( -- fmt data )
f :> fmt! f :> data!
[ { [ fmt data and not ] [ read-chunk ] } 0&& dup ]
[ {
{ [ dup FMT-MAGIC "wav-fmt-chunk" heap-size check-chunk ] [ fmt! ] }
{ [ dup DATA-MAGIC "wav-data-chunk" heap-size check-chunk ] [ data! ] }
} cond ] while drop
fmt data 2dup and [ invalid-wav-file ] unless ;
: verify-wav ( chunk -- )
{
[ RIFF-MAGIC id= ]
[ riff-chunk-format 4 memory>byte-array WAVE-MAGIC id= ]
} 1&&
[ invalid-wav-file ] unless ;
: (read-wav) ( -- audio )
read-wav-chunks
[
[ wav-fmt-chunk-num-channels 2 memory>byte-array le> ]
[ wav-fmt-chunk-bits-per-sample 2 memory>byte-array le> ]
[ wav-fmt-chunk-sample-rate 4 memory>byte-array le> ] tri
] [
[ riff-chunk-header-size 4 memory>byte-array le> dup ]
[ wav-data-chunk-body ] bi swap memory>byte-array
] bi* <audio> ;
: read-wav ( filename -- audio )
binary [
read-riff-chunk verify-wav (read-wav)
] with-file-reader ;

View File

@ -2,10 +2,10 @@ USING: windows.dinput windows.dinput.constants parser
alien.c-types windows.ole32 namespaces assocs kernel arrays
vectors windows.kernel32 windows.com windows.dinput shuffle
windows.user32 windows.messages sequences combinators locals
math.rectangles accessors math windows alien
alien.strings io.encodings.utf16 io.encodings.utf16n
continuations byte-arrays game-input.dinput.keys-array
game-input ui.backend.windows ;
math.rectangles accessors math alien alien.strings
io.encodings.utf16 io.encodings.utf16n continuations
byte-arrays game-input.dinput.keys-array game-input
ui.backend.windows windows.errors ;
IN: game-input.dinput
SINGLETON: dinput-game-input-backend

View File

@ -0,0 +1,93 @@
USING: accessors destructors kernel math math.order namespaces
system threads ;
IN: game-loop
TUPLE: game-loop
{ tick-length integer read-only }
delegate
{ last-tick integer }
thread
{ running? boolean }
{ tick-number integer }
{ frame-number integer }
{ benchmark-time integer }
{ benchmark-tick-number integer }
{ benchmark-frame-number integer } ;
GENERIC: tick* ( delegate -- )
GENERIC: draw* ( tick-slice delegate -- )
SYMBOL: game-loop
: since-last-tick ( loop -- milliseconds )
last-tick>> millis swap - ;
: tick-slice ( loop -- slice )
[ since-last-tick ] [ tick-length>> ] bi /f 1.0 min ;
CONSTANT: MAX-FRAMES-TO-SKIP 5
<PRIVATE
: redraw ( loop -- )
[ 1+ ] change-frame-number
[ tick-slice ] [ delegate>> ] bi draw* ;
: tick ( loop -- )
delegate>> tick* ;
: increment-tick ( loop -- )
[ 1+ ] change-tick-number
dup tick-length>> [ + ] curry change-last-tick
drop ;
: ?tick ( loop count -- )
dup zero? [ drop millis >>last-tick drop ] [
over [ since-last-tick ] [ tick-length>> ] bi >=
[ [ drop increment-tick ] [ drop tick ] [ 1- ?tick ] 2tri ]
[ 2drop ] if
] if ;
: (run-loop) ( loop -- )
dup running?>>
[ [ MAX-FRAMES-TO-SKIP ?tick ] [ redraw ] [ yield (run-loop) ] tri ]
[ drop ] if ;
: run-loop ( loop -- )
dup game-loop [ (run-loop) ] with-variable ;
: benchmark-millis ( loop -- millis )
millis swap benchmark-time>> - ;
PRIVATE>
: reset-loop-benchmark ( loop -- )
millis >>benchmark-time
dup tick-number>> >>benchmark-tick-number
dup frame-number>> >>benchmark-frame-number
drop ;
: benchmark-ticks-per-second ( loop -- n )
[ tick-number>> ] [ benchmark-tick-number>> - ] [ benchmark-millis ] tri /f ;
: benchmark-frames-per-second ( loop -- n )
[ frame-number>> ] [ benchmark-frame-number>> - ] [ benchmark-millis ] tri /f ;
: start-loop ( loop -- )
millis >>last-tick
t >>running?
[ reset-loop-benchmark ]
[ [ run-loop ] curry "game loop" spawn ]
[ (>>thread) ] tri ;
: stop-loop ( loop -- )
f >>running?
f >>thread
drop ;
: <game-loop> ( tick-length delegate -- loop )
millis f f 0 0 millis 0 0
game-loop boa ;
M: game-loop dispose
stop-loop ;

View File

@ -3,7 +3,7 @@
USING: accessors ascii assocs biassocs combinators hashtables kernel lists literals math namespaces make multiline openal parser sequences splitting strings synth synth.buffers ;
IN: morse
ERROR: no-morse-code ch ;
ERROR: no-morse-ch ch ;
<PRIVATE
@ -11,7 +11,7 @@ CONSTANT: dot-char CHAR: .
CONSTANT: dash-char CHAR: -
CONSTANT: char-gap-char CHAR: \s
CONSTANT: word-gap-char CHAR: /
CONSTANT: unknown-char "?"
CONSTANT: unknown-char CHAR: ?
PRIVATE>
@ -76,7 +76,7 @@ CONSTANT: morse-code-table $[
]
: ch>morse ( ch -- morse )
ch>lower morse-code-table at unknown-char or ;
ch>lower morse-code-table at unknown-char 1string or ;
: morse>ch ( str -- ch )
morse-code-table value-at char-gap-char or ;
@ -156,7 +156,8 @@ CONSTANT: beep-freq 880
{ dot-char [ dot ] }
{ dash-char [ dash ] }
{ word-gap-char [ intra-char-gap ] }
[ drop intra-char-gap ]
{ unknown-char [ intra-char-gap ] }
[ no-morse-ch ]
} case
] interleave ;

View File

@ -3,7 +3,7 @@
USING: alien alien.c-types alien.strings
kernel libc math namespaces system-info.backend
system-info.windows windows windows.advapi32
windows.kernel32 system byte-arrays ;
windows.kernel32 system byte-arrays windows.errors ;
IN: system-info.windows.nt
M: winnt cpus ( -- n )
@ -41,6 +41,6 @@ M: winnt available-virtual-mem ( -- n )
GetComputerName win32-error=0/f alien>native-string ;
: username ( -- string )
UNLEN 1+
UNLEN 1 +
[ <byte-array> dup ] keep <uint>
GetUserName win32-error=0/f alien>native-string ;

View File

@ -3,7 +3,7 @@
USING: alien alien.c-types kernel libc math namespaces
windows windows.kernel32 windows.advapi32
words combinators vocabs.loader system-info.backend
system alien.strings ;
system alien.strings windows.errors ;
IN: system-info.windows
: system-info ( -- SYSTEM_INFO )

View File

@ -13,7 +13,7 @@ CONSTANT: block-size 512
TUPLE: tar-header name mode uid gid size mtime checksum typeflag
linkname magic version uname gname devmajor devminor prefix ;
ERROR: checksum-error ;
ERROR: checksum-error header ;
: trim-string ( seq -- newseq ) [ "\0 " member? ] trim ;
@ -60,14 +60,16 @@ ERROR: checksum-error ;
] if ;
: parse-tar-header ( seq -- obj )
[ checksum-header ] keep over zero-checksum = [
dup checksum-header dup zero-checksum = [
2drop
\ tar-header new
0 >>size
0 >>checksum
] [
binary [ read-tar-header ] with-byte-reader
[ checksum>> = [ checksum-error ] unless ] keep
[
binary [ read-tar-header ] with-byte-reader
dup checksum>>
] dip = [ checksum-error ] unless
] if ;
ERROR: unknown-typeflag ch ;
@ -90,7 +92,8 @@ M: unknown-typeflag summary ( obj -- str )
] if ;
! Hard link
: typeflag-1 ( header -- ) unknown-typeflag ;
: typeflag-1 ( header -- )
[ name>> ] [ linkname>> ] bi make-hard-link ;
! Symlink
: typeflag-2 ( header -- )
@ -141,7 +144,8 @@ M: unknown-typeflag summary ( obj -- str )
! Long file name
: typeflag-L ( header -- )
drop ;
drop
;
! <string-writer> [ read-data-blocks ] keep
! >string [ zero? ] trim-tail filename set
! filename get prepend-current-directory make-directories ;
@ -161,7 +165,7 @@ M: unknown-typeflag summary ( obj -- str )
! Vendor extended header type
: typeflag-X ( header -- ) unknown-typeflag ;
: (parse-tar) ( -- )
: parse-tar ( -- )
block-size read dup length block-size = [
parse-tar-header
dup typeflag>>
@ -182,19 +186,19 @@ M: unknown-typeflag summary ( obj -- str )
! { CHAR: E [ typeflag-E ] }
! { CHAR: I [ typeflag-I ] }
! { CHAR: K [ typeflag-K ] }
! { CHAR: L [ typeflag-L ] }
{ CHAR: L [ typeflag-L ] }
! { CHAR: M [ typeflag-M ] }
! { CHAR: N [ typeflag-N ] }
! { CHAR: S [ typeflag-S ] }
! { CHAR: V [ typeflag-V ] }
! { CHAR: X [ typeflag-X ] }
{ f [ drop ] }
} case (parse-tar)
} case parse-tar
] [
drop
] if ;
: untar ( path -- )
normalize-path [ ] [ parent-directory ] bi [
binary [ (parse-tar) ] with-file-reader
normalize-path dup parent-directory [
binary [ parse-tar ] with-file-reader
] with-directory ;

View File

@ -1,39 +1,5 @@
#include "master.h"
F_STRING *get_error_message(void)
{
DWORD id = GetLastError();
F_CHAR *msg = error_message(id);
F_STRING *string = from_u16_string(msg);
LocalFree(msg);
return string;
}
/* You must LocalFree() the return value! */
F_CHAR *error_message(DWORD id)
{
F_CHAR *buffer;
int index;
DWORD ret = FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
id,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)(void *) &buffer,
0, NULL);
if(ret == 0)
return error_message(GetLastError());
/* strip whitespace from end */
index = wcslen(buffer) - 1;
while(index >= 0 && isspace(buffer[index]))
buffer[index--] = 0;
return buffer;
}
HMODULE hFactorDll;
void init_ffi(void)

View File

@ -42,10 +42,6 @@ typedef wchar_t F_CHAR;
/* Difference between Jan 1 00:00:00 1601 and Jan 1 00:00:00 1970 */
#define EPOCH_OFFSET 0x019db1ded53e8000LL
F_STRING *get_error_message(void);
DLLEXPORT F_CHAR *error_message(DWORD id);
void windows_error(void);
void init_ffi(void);
void ffi_dlopen(F_DLL *dll);
void *ffi_dlsym(F_DLL *dll, F_SYMBOL *symbol);