] when
windows? [
- "/library/windows/load.factor" run-resource
+ "/library/io/windows/load.factor" run-resource
] when
parse-command-line
terpri flush
"Initializing native I/O..." print flush
- "native-io" get [ init-io ] when
+ "native-io" get windows? not and [ init-io ] when
"cocoa" get [
"/library/compiler/alien/objc/load.factor" run-resource
"/library/ui/x11/load.factor" run-resource
] when
- windows? "native-io" get and [
- "/library/windows/ui.factor" run-resource
- "/library/windows/clipboard.factor" run-resource
+ windows? [
+ "/library/ui/windows/ui.factor" run-resource
+ "/library/ui/windows/clipboard.factor" run-resource
compile-all
] when
] when
+++ /dev/null
-USING: kernel win32-api math namespaces io prettyprint errors sequences alien ;
-IN: win32
-
-: (enum-clipboard) ( n -- )
- EnumClipboardFormats win32-error dup 0 > [ dup , (enum-clipboard) ] when ;
-
-: enum-clipboard ( -- seq )
- [ 0 (enum-clipboard) ] { } make nip ;
-
-: paste ( -- str )
- f OpenClipboard drop
- CF_TEXT IsClipboardFormatAvailable 0 = [
- "no text in clipboard" print
- ] [
- ! "text found" print
- CF_TEXT GetClipboardData
- dup GlobalLock swap
- GlobalUnlock drop
- ] if
- CloseClipboard drop alien>char-string ;
-
-LIBRARY: libc
-FUNCTION: void memcpy ( char* dst, char* src, ulong size ) ;
-
-: copy ( str -- )
- f OpenClipboard drop
- EmptyClipboard drop
- GMEM_MOVEABLE over length 1+ GlobalAlloc dup 0 = [
- "unable to allocate memory" throw
- ] when
-
- dup GlobalLock
- rot dup length memcpy
- dup GlobalUnlock drop
- CF_TEXT swap SetClipboardData 0 = [
- win32-error
- "SetClipboardData failed" throw
- ] when
-
- CloseClipboard drop ;
-
-
- ! hglbCopy = GlobalAlloc(GMEM_MOVEABLE,
- ! (cch + 1) * sizeof(TCHAR));
-
-
- ! // Lock the handle and copy the text to the buffer.
-
- ! lptstrCopy = GlobalLock(hglbCopy);
- ! memcpy(lptstrCopy, &pbox->atchLabel[ich1],
- ! cch * sizeof(TCHAR));
- ! lptstrCopy[cch] = (TCHAR) 0; // null character
- ! GlobalUnlock(hglbCopy);
-
- ! // Place the handle on the clipboard.
- ! SetClipboardData(CF_TEXT, hglbCopy);
-
-
-
+++ /dev/null
-USING: alien kernel errors ;
-IN: win32-api
-
-LIBRARY: gdi32
-
-! Stock Logical Objects
-: WHITE_BRUSH 0 ; inline
-: LTGRAY_BRUSH 1 ; inline
-: GRAY_BRUSH 2 ; inline
-: DKGRAY_BRUSH 3 ; inline
-: BLACK_BRUSH 4 ; inline
-: NULL_BRUSH 5 ; inline
-: HOLLOW_BRUSH NULL_BRUSH ; inline
-: WHITE_PEN 6 ; inline
-: BLACK_PEN 7 ; inline
-: NULL_PEN 8 ; inline
-: OEM_FIXED_FONT 10 ; inline
-: ANSI_FIXED_FONT 11 ; inline
-: ANSI_VAR_FONT 12 ; inline
-: SYSTEM_FONT 13 ; inline
-: DEVICE_DEFAULT_FONT 14 ; inline
-: DEFAULT_PALETTE 15 ; inline
-: SYSTEM_FIXED_FONT 16 ; inline
-: DEFAULT_GUI_FONT 17 ; inline
-: DC_BRUSH 18 ; inline
-: DC_PEN 19 ; inline
-
-FUNCTION: HGDIOBJ GetStockObject ( int fnObject ) ;
-FUNCTION: int ChoosePixelFormat ( HDC hDC, PFD* ppfd ) ;
-FUNCTION: BOOL SetPixelFormat ( HDC hDC, int iPixelFormat, PFD* ppfd ) ;
-
-FUNCTION: BOOL SwapBuffers ( HDC hDC ) ;
-
-
+++ /dev/null
-USING: alien kernel errors ;
-IN: win32-api
-
-LIBRARY: kernel32
-
-! FUNCTION: MAKEINTRESOURCEA
-! FUNCTION: MAKEINTRESOURCEW
-
-! : MAKEINTRESOURCE \ MAKEINTRESOURCEW \ MAKEINTRESOURCEA unicode-exec ;
-! #define IS_INTRESOURCE(_r) (((ULONG_PTR)(_r) >> 16) == 0)
-! #define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
-! #define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
-
-
-! FUNCTION: DWORD FormatMessage(
- ! DWORD dwFlags,
- ! LPCVOID lpSource,
- ! DWORD dwMessageId,
- ! DWORD dwLanguageId,
- ! LPTSTR lpBuffer,
- ! DWORD nSize,
- ! va_list* Arguments
-! ) ;
-
-
-
-FUNCTION: HMODULE GetModuleHandleA ( char* lpModulename ) ;
-FUNCTION: HMODULE GetModuleHandleW ( char* lpModulename ) ;
-
-: GetModuleHandle \ GetModuleHandleW \ GetModuleHandleA unicode-exec ;
-
-
-! FUNCTION: HMODULE GetModuleHandleEx (
-! DWORD dwFlags,
-! LPCTSTR lpModulename,
-! HMODULE* phModule ) ;
-
-
-
-FUNCTION: DWORD GetLastError ( ) ;
-
-: (win32-error) ( id -- string )
- "char*" f "error_message" [ "int" ] alien-invoke ;
-
-: win32-error ( -- )
- GetLastError dup 0 = [ (win32-error) throw ] unless drop ;
-
-: GHND HEX: 40 ; inline
-: GMEM_FIXED 0 ; inline
-: GMEM_MOVEABLE 2 ; inline
-: GMEM_ZEROINIT HEX: 40 ; inline
-: GPTR HEX: 40 ; inline
-
-FUNCTION: HGLOBAL GlobalAlloc ( UINT uFlags, SIZE_T dwBytes ) ;
-FUNCTION: LPVOID GlobalLock ( HGLOBAL hMem ) ;
-! FUNCTION: char* GlobalLock ( HGLOBAL hMem ) ;
-FUNCTION: BOOL GlobalUnlock ( HGLOBAL hMem ) ;
-
-
+++ /dev/null
-IN: scratchpad
-USING: alien compiler kernel namespaces parser sequences words ;
-
-{
- { "gdi32" "gdi32" }
- { "user32" "user32" }
- { "kernel32" "kernel32" }
- { "winsock" "ws2_32" }
- { "mswsock" "mswsock" }
-} [ first2 add-simple-library ] each
-"libc" "msvcrt.dll" "cdecl" add-library
-
-{
- "windows-messages"
- "types"
- "gdi32"
- "kernel32"
- "user32"
- "opengl32"
- "utils"
-
- "win32-io"
- "win32-errors"
- "winsock"
- "win32-io-internals"
- "win32-stream"
- "win32-server"
-} [ "/library/windows/" swap ".factor" append3 run-resource ] each
-
-"native-io" get [
- "/library/bootstrap/win32-io.factor" run-resource
-] when
-
-IN: kernel
-: default-shell "ui" ;
+++ /dev/null
-USING: alien parser namespaces kernel syntax words math io prettyprint ;
-IN: win32-api
-
-! PIXELFORMATDESCRIPTOR flags
-: PFD_DOUBLEBUFFER HEX: 00000001 ; inline
-: PFD_STEREO HEX: 00000002 ; inline
-: PFD_DRAW_TO_WINDOW HEX: 00000004 ; inline
-: PFD_DRAW_TO_BITMAP HEX: 00000008 ; inline
-: PFD_SUPPORT_GDI HEX: 00000010 ; inline
-: PFD_SUPPORT_OPENGL HEX: 00000020 ; inline
-: PFD_GENERIC_FORMAT HEX: 00000040 ; inline
-: PFD_NEED_PALETTE HEX: 00000080 ; inline
-: PFD_NEED_SYSTEM_PALETTE HEX: 00000100 ; inline
-: PFD_SWAP_EXCHANGE HEX: 00000200 ; inline
-: PFD_SWAP_COPY HEX: 00000400 ; inline
-: PFD_SWAP_LAYER_BUFFERS HEX: 00000800 ; inline
-: PFD_GENERIC_ACCELERATED HEX: 00001000 ; inline
-: PFD_SUPPORT_DIRECTDRAW HEX: 00002000 ; inline
-
-! PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only
-: PFD_DEPTH_DONTCARE HEX: 20000000 ; inline
-: PFD_DOUBLEBUFFER_DONTCARE HEX: 40000000 ; inline
-: PFD_STEREO_DONTCARE HEX: 80000000 ; inline
-
-! pixel types
-: PFD_TYPE_RGBA 0 ; inline
-: PFD_TYPE_COLORINDEX 1 ; inline
-
-! layer types
-: PFD_MAIN_PLANE 0 ; inline
-: PFD_OVERLAY_PLANE 1 ; inline
-: PFD_UNDERLAY_PLANE -1 ; inline
-
-: LPD_TYPE_RGBA 0 ; inline
-: LPD_TYPE_COLORINDEX 1 ; inline
-
-! wglSwapLayerBuffers flags
-: WGL_SWAP_MAIN_PLANE HEX: 00000001 ; inline
-: WGL_SWAP_OVERLAY1 HEX: 00000002 ; inline
-: WGL_SWAP_OVERLAY2 HEX: 00000004 ; inline
-: WGL_SWAP_OVERLAY3 HEX: 00000008 ; inline
-: WGL_SWAP_OVERLAY4 HEX: 00000010 ; inline
-: WGL_SWAP_OVERLAY5 HEX: 00000020 ; inline
-: WGL_SWAP_OVERLAY6 HEX: 00000040 ; inline
-: WGL_SWAP_OVERLAY7 HEX: 00000080 ; inline
-: WGL_SWAP_OVERLAY8 HEX: 00000100 ; inline
-: WGL_SWAP_OVERLAY9 HEX: 00000200 ; inline
-: WGL_SWAP_OVERLAY10 HEX: 00000400 ; inline
-: WGL_SWAP_OVERLAY11 HEX: 00000800 ; inline
-: WGL_SWAP_OVERLAY12 HEX: 00001000 ; inline
-: WGL_SWAP_OVERLAY13 HEX: 00002000 ; inline
-: WGL_SWAP_OVERLAY14 HEX: 00004000 ; inline
-: WGL_SWAP_OVERLAY15 HEX: 00008000 ; inline
-: WGL_SWAP_UNDERLAY1 HEX: 00010000 ; inline
-: WGL_SWAP_UNDERLAY2 HEX: 00020000 ; inline
-: WGL_SWAP_UNDERLAY3 HEX: 00040000 ; inline
-: WGL_SWAP_UNDERLAY4 HEX: 00080000 ; inline
-: WGL_SWAP_UNDERLAY5 HEX: 00100000 ; inline
-: WGL_SWAP_UNDERLAY6 HEX: 00200000 ; inline
-: WGL_SWAP_UNDERLAY7 HEX: 00400000 ; inline
-: WGL_SWAP_UNDERLAY8 HEX: 00800000 ; inline
-: WGL_SWAP_UNDERLAY9 HEX: 01000000 ; inline
-: WGL_SWAP_UNDERLAY10 HEX: 02000000 ; inline
-: WGL_SWAP_UNDERLAY11 HEX: 04000000 ; inline
-: WGL_SWAP_UNDERLAY12 HEX: 08000000 ; inline
-: WGL_SWAP_UNDERLAY13 HEX: 10000000 ; inline
-: WGL_SWAP_UNDERLAY14 HEX: 20000000 ; inline
-: WGL_SWAP_UNDERLAY15 HEX: 40000000 ; inline
-
-
-
-: pfd-dwFlags
- PFD_DRAW_TO_WINDOW PFD_SUPPORT_OPENGL bitor PFD_DOUBLEBUFFER bitor ;
-
-! TODO: compare to http://www.nullterminator.net/opengl32.html
-: make-pfd ( bits -- pfd )
- "PIXELFORMATDESCRIPTOR" <c-object>
- "PIXELFORMATDESCRIPTOR" c-size over set-PIXELFORMATDESCRIPTOR-nSize
- 1 over set-PIXELFORMATDESCRIPTOR-nVersion
- pfd-dwFlags over set-PIXELFORMATDESCRIPTOR-dwFlags
- PFD_TYPE_RGBA over set-PIXELFORMATDESCRIPTOR-iPixelType
- [ set-PIXELFORMATDESCRIPTOR-cColorBits ] keep
- 16 over set-PIXELFORMATDESCRIPTOR-cDepthBits
- PFD_MAIN_PLANE over set-PIXELFORMATDESCRIPTOR-dwLayerMask ;
-
-
-LIBRARY: gl
-
-
-! FUNCTION: int ReleaseDC ( HWND hWnd, HDC hDC ) ;
-! FUNCTION: HDC ResetDC ( HDC hdc, DEVMODE* lpInitData ) ;
-! FUNCTION: BOOL RestoreDC ( HDC hdc, int nSavedDC ) ;
-! FUNCTION: int SaveDC( HDC hDC ) ;
-! FUNCTION: HGDIOBJ SelectObject ( HDC hDC, HGDIOBJ hgdiobj ) ;
-
-FUNCTION: HGLRC wglCreateContext ( HDC hDC ) ;
-FUNCTION: BOOL wglDeleteContext ( HGLRC hRC ) ;
-FUNCTION: BOOL wglMakeCurrent ( HDC hDC, HGLRC hglrc ) ;
-
-
+++ /dev/null
-USING: alien namespaces kernel words ;
-IN: win32-api
-
-! http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_data_types.asp
-
-SYMBOL: unicode f unicode set
-: unicode-exec ( unicode-func ascii-func -- func )
- unicode get [
- drop execute
- ] [
- nip execute
- ] if ; inline
-
-: unicode? unicode get ; inline
-
-: win64? f ;
-
-! win64
-! char uchar short ushort int uint long ulong longlong ulonglong
-! 1 1 2 2 * * ?
-! win32
-! char uchar short ushort int uint long ulong longlong ulonglong
-! 1 1 2 2 * * 4 4 8 8
-
-
-TYPEDEF: char CHAR
-TYPEDEF: uchar UCHAR
-TYPEDEF: uchar BYTE
-
-TYPEDEF: short wchar_t
-TYPEDEF: wchar_t WCHAR
-
-TYPEDEF: short SHORT
-TYPEDEF: ushort USHORT
-
-TYPEDEF: ushort WORD
-TYPEDEF: ulong DWORD
-
-TYPEDEF: int INT
-TYPEDEF: uint UINT
-
-TYPEDEF: int BOOL
-
-TYPEDEF: int* PINT
-TYPEDEF: int* LPINT
-TYPEDEF: int HFILE
-
-TYPEDEF: long LONG
-TYPEDEF: long* LPLONG
-TYPEDEF: long LONG_PTR
-TYPEDEF: long* PLONG_PTR
-
-TYPEDEF: uint ULONG
-TYPEDEF: ulong ULONG_PTR
-TYPEDEF: ulong* PULONG_PTR
-
-TYPEDEF: void VOID
-TYPEDEF: void* PVOID
-TYPEDEF: void* LPVOID
-TYPEDEF: void* LPCVOID
-
-TYPEDEF: float FLOAT
-! The following is commented out for two reasons.
-! 1) all of the code in both branches will be run because TYPEDEF: is a
-! parsing word
-! 2) we are waiting on gcc to be ported to win64/msys
-! 3) the TYPEDEF:s are probably wrong.
-
-! win64? [
- ! ! TODO: check these!
- ! TYPEDEF: INT32 HALF_PTR
- ! TYPEDEF: UINT32 UHALF_PTR
- ! TYPEDEF: long INT_PTR
- ! TYPEDEF: ulong UINT_PTR
-
- ! TYPEDEF: longlong LONG_PTR ! 64bit
- ! TYPEDEF: ulonglong ULONG_PTR ! 64bit
-
- ! TYPEDEF: int INT32
- ! TYPEDEF: uint UINT32
- ! TYPEDEF: uint DWORD32
- ! TYPEDEF: uint ULONG32
- ! TYPEDEF: ulong ULONG64
- ! TYPEDEF: int* POINTER_32
- ! TYPEDEF: long* POINTER_64
- ! TYPEDEF: longlong INT64
- ! TYPEDEF: ulonglong UINT64
- ! TYPEDEF: longlong LONGLONG ! 64bit
- ! TYPEDEF: ulonglong ULONGLONG
- ! TYPEDEF: longlong LONG64
- ! TYPEDEF: ulonglong DWORD64
- ! ] [
-! Correct for win32
- TYPEDEF: short HALF_PTR
- TYPEDEF: ushort UHALF_PTR
- TYPEDEF: int INT_PTR
- TYPEDEF: uint UINT_PTR
-
- TYPEDEF: int LONG_PTR
- TYPEDEF: ulong ULONG_PTR
-
- TYPEDEF: int INT32
- TYPEDEF: uint UINT32
- TYPEDEF: uint DWORD32
- TYPEDEF: ulong ULONG32
- TYPEDEF: ulonglong ULONG64
- TYPEDEF: long* POINTER_32
- TYPEDEF: longlong* POINTER_64
- TYPEDEF: longlong INT64
- TYPEDEF: ulonglong UINT64
- TYPEDEF: longlong LONGLONG
- TYPEDEF: ulonglong ULONGLONG
- TYPEDEF: longlong LONG64
- TYPEDEF: ulonglong DWORD64
-! ] if
-
-! unicode? [
- ! TYPEDEF: WCHAR TBYTE
- ! TYPEDEF: WCHAR TCHAR
- ! ] [
- TYPEDEF: uchar TBYTE
- TYPEDEF: char TCHAR
-! ] if
-
-! Below down is based on the above definitions
-! There should be no 32/64bit issues
-
-TYPEDEF: WORD ATOM
-TYPEDEF: BYTE BOOLEAN
-! TYPEDEF: __stdcall CALLBACK
-TYPEDEF: DWORD COLORREF
-TYPEDEF: ULONGLONG DWORDLONG
-TYPEDEF: ULONG_PTR DWORD_PTR
-TYPEDEF: PVOID HANDLE
-TYPEDEF: HANDLE HACCEL
-TYPEDEF: HANDLE HBITMAP
-TYPEDEF: HANDLE HBRUSH
-TYPEDEF: HANDLE HCOLORSPACE
-TYPEDEF: HANDLE HCONV
-TYPEDEF: HANDLE HCONVLIST
-TYPEDEF: HANDLE HICON
-TYPEDEF: HICON HCURSOR
-TYPEDEF: HANDLE HDC
-TYPEDEF: HANDLE HDDEDATA
-TYPEDEF: HANDLE HDESK
-TYPEDEF: HANDLE HDROP
-TYPEDEF: HANDLE HDWP
-TYPEDEF: HANDLE HENMETAFILE
-TYPEDEF: HANDLE HFONT
-TYPEDEF: HANDLE HGDIOBJ
-TYPEDEF: HANDLE HGLOBAL
-TYPEDEF: HANDLE HHOOK
-TYPEDEF: HANDLE HINSTANCE
-TYPEDEF: HANDLE HKEY
-TYPEDEF: HANDLE HKL
-TYPEDEF: HANDLE HLOCAL
-TYPEDEF: HANDLE HMENU
-TYPEDEF: HANDLE HMETAFILE
-TYPEDEF: HINSTANCE HMODULE
-TYPEDEF: HANDLE HMONITOR
-TYPEDEF: HANDLE HPALETTE
-TYPEDEF: HANDLE HPEN
-TYPEDEF: LONG HRESULT
-TYPEDEF: HANDLE HRGN
-TYPEDEF: HANDLE HRSRC
-TYPEDEF: HANDLE HSZ
-TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
-TYPEDEF: HANDLE HWINSTA ! typo??
-TYPEDEF: HANDLE HWND
-TYPEDEF: WORD LANGID
-TYPEDEF: DWORD LCID
-TYPEDEF: DWORD LCTYPE
-TYPEDEF: DWORD LGRPID
-TYPEDEF: LONG_PTR LPARAM
-TYPEDEF: BOOL* LPBOOL
-TYPEDEF: BYTE* LPBYTE
-TYPEDEF: DWORD* LPCOLORREF
-TYPEDEF: CHAR* LPCSTR
-TYPEDEF: WCHAR* LPCWSTR
-TYPEDEF: WCHAR* LPWSTR
-unicode? [
- TYPEDEF: LPCWSTR LPCTSTR
- TYPEDEF: LPWSTR LPTSTR
- TYPEDEF: LPCWSTR PCTSTR
- TYPEDEF: LPWSTR PTSTR
- ] [
- TYPEDEF: LPCSTR LPCTSTR
- TYPEDEF: LPSTR LPTSTR
- TYPEDEF: LPCSTR PCTSTR
- TYPEDEF: LPSTR PTSTR
-] if
-TYPEDEF: DWORD* LPDWORD
-TYPEDEF: HANDLE* LPHANDLE
-TYPEDEF: CHAR* LPSTR
-TYPEDEF: WORD* LPWORD
-TYPEDEF: WCHAR* LPWSTR
-TYPEDEF: LONG_PTR LRESULT
-TYPEDEF: BOOL* PBOOL
-TYPEDEF: BOOLEAN* PBOOLEAN
-TYPEDEF: BYTE* PBYTE
-TYPEDEF: CHAR* PCHAR
-TYPEDEF: CHAR* PCSTR
-TYPEDEF: WCHAR* PCWSTR
-TYPEDEF: DWORD* PDWORD
-TYPEDEF: DWORDLONG* PDWORDLONG
-TYPEDEF: DWORD_PTR* PDWORD_PTR
-TYPEDEF: DWORD32* PDWORD32
-TYPEDEF: DWORD64* PDWORD64
-TYPEDEF: FLOAT* PFLOAT
-TYPEDEF: HALF_PTR* PHALF_PTR
-TYPEDEF: HANDLE* PHANDLE
-TYPEDEF: HKEY* PHKEY
-TYPEDEF: INT_PTR* PINT_PTR
-TYPEDEF: INT32* PINT32
-TYPEDEF: INT64* PINT64
-TYPEDEF: PDWORD PLCID
-TYPEDEF: LONG* PLONG
-TYPEDEF: LONGLONG* PLONGLONG
-TYPEDEF: LONG_PTR* PLONG_PTR
-TYPEDEF: LONG32* PLONG32
-TYPEDEF: LONG64* PLONG64
-TYPEDEF: SHORT* PSHORT
-TYPEDEF: SIZE_T* PSIZE_T
-TYPEDEF: SSIZE_T* PSSIZE_T
-TYPEDEF: CHAR* PSTR
-TYPEDEF: TBYTE* PTBYTE
-TYPEDEF: TCHAR* PTCHAR
-TYPEDEF: UCHAR* PUCHAR
-TYPEDEF: UHALF_PTR* PUHALF_PTR
-TYPEDEF: UINT* PUINT
-TYPEDEF: UINT_PTR* PUINT_PTR
-TYPEDEF: UINT32* PUINT32
-TYPEDEF: UINT64* PUINT64
-TYPEDEF: ULONG* PULONG
-TYPEDEF: ULONGLONG* PULONGLONG
-TYPEDEF: ULONG_PTR* PULONG_PTR
-TYPEDEF: ULONG32* PULONG32
-TYPEDEF: ULONG64* PULONG64
-TYPEDEF: USHORT* PUSHORT
-TYPEDEF: WCHAR* PWCHAR
-TYPEDEF: WORD* PWORD
-TYPEDEF: WCHAR* PWSTR
-TYPEDEF: HANDLE SC_HANDLE
-TYPEDEF: LPVOID SC_LOCK
-TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
-TYPEDEF: ULONG_PTR SIZE_T
-TYPEDEF: LONG_PTR SSIZE_T
-TYPEDEF: LONGLONG USN
-! TYPEDEF: __stdcall WINAPI
-TYPEDEF: UINT_PTR WPARAM
-
-
-
-
-TYPEDEF: RECT* LPRECT
-TYPEDEF: void* PWNDCLASS
-TYPEDEF: void* PWNDCLASSEX
-
-TYPEDEF: void* WNDPROC
-
-! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
-
-BEGIN-STRUCT: WNDCLASS
- FIELD: UINT style
- FIELD: WNDPROC lpfnWndProc
- FIELD: int cbClsExtra
- FIELD: int cbWndExtra
- FIELD: HINSTANCE hInstance
- FIELD: HICON hIcon
- FIELD: HCURSOR hCursor
- FIELD: HBRUSH hbrBackground
- FIELD: LPCTSTR lpszMenuName
- FIELD: LPCTSTR lpszClassName
-END-STRUCT
-
-BEGIN-STRUCT: WNDCLASSEX
- FIELD: UINT cbSize
- FIELD: UINT style
- FIELD: WNDPROC lpfnWndProc
- FIELD: int cbClsExtra
- FIELD: int cbWndExtra
- FIELD: HINSTANCE hInstance
- FIELD: HICON hIcon
- FIELD: HCURSOR hCursor
- FIELD: HBRUSH hbrBackground
- FIELD: LPCTSTR lpszMenuName
- FIELD: LPCTSTR lpszClassName
- FIELD: HICON hIconSm
-END-STRUCT
-
-BEGIN-STRUCT: RECT
- FIELD: LONG left
- FIELD: LONG top
- FIELD: LONG right
- FIELD: LONG bottom
-END-STRUCT
-
-BEGIN-STRUCT: PAINTSTRUCT
- FIELD: HDC hdc
- FIELD: BOOL fErase
- FIELD: RECT rcPaint
- FIELD: BOOL fRestore
- FIELD: BOOL fIncUpdate
- FIELD: BYTE rgbReserved[32]
-END-STRUCT
-
-TYPEDEF: PAINTSTRUCT* LPPAINTSTRUCT
-
-BEGIN-STRUCT: POINT
- FIELD: LONG x
- FIELD: LONG y
-END-STRUCT
-
-BEGIN-STRUCT: MSG
- FIELD: HWND hWnd
- FIELD: UINT message
- FIELD: WPARAM wParam
- FIELD: LPARAM lParam
- FIELD: DWORD time
- FIELD: POINT pt
-END-STRUCT
-TYPEDEF: MSG* LPMSG
-
-BEGIN-STRUCT: PIXELFORMATDESCRIPTOR
- FIELD: WORD nSize
- FIELD: WORD nVersion
- FIELD: DWORD dwFlags
- FIELD: BYTE iPixelType
- FIELD: BYTE cColorBits
- FIELD: BYTE cRedBits
- FIELD: BYTE cRedShift
- FIELD: BYTE cGreenBits
- FIELD: BYTE cGreenShift
- FIELD: BYTE cBlueBits
- FIELD: BYTE cBlueShift
- FIELD: BYTE cAlphaBits
- FIELD: BYTE cAlphaShift
- FIELD: BYTE cAccumBits
- FIELD: BYTE cAccumRedBits
- FIELD: BYTE cAccumGreenBits
- FIELD: BYTE cAccumBlueBits
- FIELD: BYTE cAccumAlphaBits
- FIELD: BYTE cDepthBits
- FIELD: BYTE cStencilBits
- FIELD: BYTE cAuxBuffers
- FIELD: BYTE iLayerType
- FIELD: BYTE bReserved
- FIELD: DWORD dwLayerMask
- FIELD: DWORD dwVisibleMask
- FIELD: DWORD dwDamageMask
-END-STRUCT
-
-BEGIN-STRUCT: RECT
- FIELD: LONG left
- FIELD: LONG top
- FIELD: LONG right
- FIELD: LONG bottom
-END-STRUCT
-
-TYPEDEF: RECT* PRECT
-TYPEDEF: RECT* LPRECT
-TYPEDEF: PIXELFORMATDESCRIPTOR PFD
-TYPEDEF: PFD* LPPFD
-TYPEDEF: HANDLE HGLRC
-TYPEDEF: HANDLE HRGN
+++ /dev/null
-USING: alien arrays errors freetype gadgets gadgets-launchpad gadgets-layouts
- gadgets-listener hashtables io kernel \ math namespaces prettyprint
- sequences strings vectors words win32-api-messages win32-api ;
-USING: inspector threads memory ;
-IN: win32
-
-SYMBOL: windows
-SYMBOL: msg-obj
-
-! 'SYMBOL: windows' is a hashtable of 'gadget-window' objects indexed by hWnd.
-! hDC = handle to device context, hRC = handle to render context
-TUPLE: gadget-window world hWnd hDC hRC ;
-
-: class-name "Factor" ;
-
-: get-world ( hWnd -- world ) windows get hash gadget-window-world ;
-: get-gadget-window ( hWnd -- gadget-window )
- windows get hash ;
-
-: style ( -- n ) WS_OVERLAPPEDWINDOW ; inline
-: ex-style ( -- n ) WS_EX_APPWINDOW WS_EX_WINDOWEDGE bitor ; inline
-
-: adjust-RECT ( RECT -- )
- style 0 ex-style AdjustWindowRectEx win32-error=0 ;
-
-: make-RECT ( width height -- RECT )
- "RECT" <c-object> [ set-RECT-bottom ] keep [ set-RECT-right ] keep ;
-
-: make-adjusted-RECT ( width height -- RECT )
- make-RECT dup adjust-RECT ;
-
-: cleanup-gadget-window ( gadget-window -- )
- dup gadget-window-hRC wglDeleteContext win32-error=0
- [ gadget-window-hWnd ] keep gadget-window-hDC ReleaseDC win32-error=0 ;
-
-: get-RECT-dimensions ( RECT -- width height )
- [ RECT-right ] keep [ RECT-left - ] keep
- [ RECT-bottom ] keep RECT-top - ;
-
-: handle-wm-paint ( hWnd uMsg wParam lParam -- )
- #! wParam and lParam are unused
- 3drop get-world redraw-world ;
-
-: handle-wm-size ( hWnd uMsg wParam lParam -- )
- [ lo-word ] keep hi-word make-RECT get-RECT-dimensions 0 3array
- 2nip
- dup { 0 0 0 } = [ 2drop ] [ swap get-world set-gadget-dim ] if ;
-
-: wm-keydown-codes ( n -- key )
- H{
- { 8 "BACKSPACE" }
- { 9 "TAB" }
- { 13 "RETURN" }
- { 27 "ESCAPE" }
- { 33 "PAGE_UP" }
- { 34 "PAGE_DOWN" }
- { 35 "END" }
- { 36 "HOME" }
- { 37 "LEFT" }
- { 38 "UP" }
- { 39 "RIGHT" }
- { 40 "DOWN" }
- { 45 "INSERT" }
- { 46 "DELETE" }
- } ;
-
-
-: key-state-down?
- GetKeyState 1 16 shift bitand 0 > ;
-
-: left-shift? ( -- ? ) VK_LSHIFT key-state-down? ;
-: left-ctrl? ( -- ? ) VK_LCONTROL key-state-down? ;
-: left-alt? ( -- ? ) VK_LMENU key-state-down? ;
-: right-shift? ( -- ? ) VK_RSHIFT key-state-down? ;
-: right-ctrl? ( -- ? ) VK_RCONTROL key-state-down? ;
-: right-alt? ( -- ? ) VK_RMENU key-state-down? ;
-: shift? ( -- ? ) left-shift? right-shift? or ;
-: ctrl? ( -- ? ) left-ctrl? right-ctrl? or ;
-: alt? ( -- ? ) left-alt? right-alt? or ;
-: caps-lock? ( -- ? ) VK_CAPITAL GetKeyState zero? not ;
-
-: key-modifiers ( -- list )
- [
- shift? [ "SHIFT" , ] when
- ctrl? [ "CTRL" , ] when
- alt? [ "ALT" , ] when
- ] V{ } make ;
-
-: wm-char-exclude-keys
- H{
- { 8 "BACKSPACE" }
- { 9 "TAB" }
- { 13 "RETURN" }
- } ;
-
-: exclude-key? ( n -- bool ) wm-char-exclude-keys hash* nip ;
-: handle-key? ( n -- bool ) wm-keydown-codes hash* nip ;
-
-: keystroke>gesture ( n -- list )
- dup wm-keydown-codes hash* [ nip ] [ drop ch>string ] if
- key-modifiers [ push ] keep ;
-
-SYMBOL: lParam
-SYMBOL: wParam
-SYMBOL: uMsg
-SYMBOL: hWnd
-
-: handle-wm-keydown ( hWnd uMsg wParam lParam -- )
- lParam set wParam set uMsg set hWnd set
- wParam get handle-key? [
- wParam get hWnd get get-world world-focus
- 2dup >r keystroke>gesture r> handle-gesture [
- >r ch>string r> user-input
- ] [
- 2drop
- ] if
- ] when 0 ;
-
-: handle-wm-char ( hWnd uMsg wParam lParam -- )
- lParam set wParam set uMsg set hWnd set
- wParam get exclude-key? [
- wParam get ch>string hWnd get get-world world-focus
- 2dup >r unit r> handle-gesture [
- user-input
- ] [
- 2drop
- ] if
- ] unless 0 ;
-
-: handle-wm-destroy ( hWnd uMsg wParam lParam -- )
- 3drop
- [
- get-gadget-window
- dup gadget-window-world close-world
- cleanup-gadget-window
- ] keep
- windows get remove-hash
- 0 PostQuitMessage ;
-
-: mouse-button ( uMsg -- n )
- {
- { [ dup WM_LBUTTONDOWN = ] [ drop 1 ] }
- { [ dup WM_LBUTTONUP = ] [ drop 1 ] }
- { [ dup WM_MBUTTONDOWN = ] [ drop 2 ] }
- { [ dup WM_MBUTTONUP = ] [ drop 2 ] }
- { [ dup WM_RBUTTONDOWN = ] [ drop 3 ] }
- { [ dup WM_RBUTTONUP = ] [ drop 3 ] }
- { [ t ] [ "bad button" throw ] }
- } cond ;
-
-: mouse-coordinate ( lParam -- seq ) [ lo-word ] keep hi-word 0 3array ;
-: mouse-wheel ( lParam -- n ) hi-word 0 > 1 -1 ? ;
-
-: prepare-mouse ( hWnd uMsg wParam lParam -- )
- nip >r mouse-button r> mouse-coordinate rot get-world ;
-
-: handle-wm-buttondown ( hWnd uMsg wParam lParam -- )
- prepare-mouse send-button-down ;
-
-: handle-wm-buttonup ( hWnd uMsg wParam lParam -- )
- prepare-mouse send-button-up ;
-
-: handle-wm-mousemove ( hWnd uMsg wParam lParam -- )
- 2nip mouse-coordinate swap get-world move-hand ;
-
-: handle-wm-mousewheel ( hWnd uMsg wParam lParam -- )
- mouse-coordinate >r mouse-wheel nip r> rot get-world send-wheel ;
-
-! return 0 if you handle the message, else just let DefWindowProc return its val
-: ui-wndproc ( hWnd uMsg wParam lParam -- lresult )
- "uint" { "void*" "uint" "long" "long" } [
- [
- pick
- ! "Message: " write dup get-windows-message-name write
- ! " " write dup unparse print
- {
- { [ dup WM_DESTROY = ] [ drop handle-wm-destroy 0 ] }
- { [ dup WM_PAINT = ] [ drop handle-wm-paint 0 ] }
- { [ dup WM_SIZE = ] [ drop handle-wm-size 0 ] }
-
- ! Keyboard events
- { [ dup WM_KEYDOWN = over WM_SYSKEYDOWN = or ]
- [ drop handle-wm-keydown ] }
- { [ dup WM_CHAR = over WM_SYSCHAR = or ]
- [ drop handle-wm-char ] }
-
- ! Mouse events
- { [ dup WM_LBUTTONDOWN = ] [ drop handle-wm-buttondown 0 ] }
- { [ dup WM_MBUTTONDOWN = ] [ drop handle-wm-buttondown 0 ] }
- { [ dup WM_RBUTTONDOWN = ] [ drop handle-wm-buttondown 0 ] }
- { [ dup WM_LBUTTONUP = ] [ drop handle-wm-buttonup 0 ] }
- { [ dup WM_MBUTTONUP = ] [ drop handle-wm-buttonup 0 ] }
- { [ dup WM_RBUTTONUP = ] [ drop handle-wm-buttonup 0 ] }
- { [ dup WM_MOUSEMOVE = ] [ drop handle-wm-mousemove 0 ] }
- { [ dup WM_MOUSEWHEEL = ] [ drop handle-wm-mousewheel 0 ] }
-
- { [ t ] [ drop DefWindowProc ] }
- } cond
- ] [ error. 0 ] recover
- ] alien-callback ;
-
-: event-loop ( -- )
- msg-obj get f 0 0 PM_REMOVE PeekMessage
- zero? not [
- msg-obj get MSG-message WM_QUIT = [
- msg-obj get [ TranslateMessage drop ] keep DispatchMessage drop
- ] unless
- ] when
- ui-step windows get hash-empty? [ event-loop ] unless ;
-
-: register-wndclassex ( classname wndproc -- )
- "WNDCLASSEX" <c-object>
- "WNDCLASSEX" c-size over set-WNDCLASSEX-cbSize
- CS_HREDRAW CS_VREDRAW bitor CS_OWNDC bitor over set-WNDCLASSEX-style
- [ set-WNDCLASSEX-lpfnWndProc ] keep
- 0 over set-WNDCLASSEX-cbClsExtra
- 0 over set-WNDCLASSEX-cbWndExtra
- f GetModuleHandle over set-WNDCLASSEX-hInstance
- f IDI_APPLICATION LoadIcon over set-WNDCLASSEX-hIcon
- f IDC_ARROW LoadCursor over set-WNDCLASSEX-hCursor
- [ set-WNDCLASSEX-lpszClassName ] keep
- RegisterClassEx dup win32-error=0 ;
-
-
-: create-window ( className title width height -- hwnd )
- make-adjusted-RECT
- >r >r >r ex-style r> r>
- WS_CLIPSIBLINGS WS_CLIPCHILDREN bitor style bitor
- 0 0 r>
- get-RECT-dimensions
- f f f GetModuleHandle f CreateWindowEx dup win32-error=0 ;
-
-: show-window ( hWnd -- )
- dup SW_SHOW ShowWindow drop ! always succeeds
- dup SetForegroundWindow drop
- SetFocus drop ;
-
-: init-win32-ui
- "MSG" <c-object> msg-obj set
- class-name ui-wndproc register-wndclassex win32-error=0
- H{ } clone windows set
- init-timers
- init-ui ;
-
-: cleanup-win32-ui ( -- ) class-name f UnregisterClass drop ;
-
-: setup-pixel-format ( hdc -- )
- 16 make-pfd [ ChoosePixelFormat dup win32-error=0 ] 2keep
- swapd SetPixelFormat win32-error=0 ;
-
-: get-dc ( hWnd -- hDC ) GetDC dup win32-error=0 ;
-
-: get-rc ( hDC -- hRC )
- dup wglCreateContext dup win32-error=0
- [ wglMakeCurrent win32-error=0 ] keep ;
-
-: setup-gl ( hwnd -- hDC hRC )
- get-dc
- dup setup-pixel-format
- dup get-rc ;
-
-: make-gadget-window ( world title -- <gadget-window> )
- class-name swap pick rect-dim first2 create-window
- dup setup-gl <gadget-window> ;
-
-IN: gadgets
-
-: open-window* ( world title -- )
- make-gadget-window
- [ [ gadget-window-hWnd ] keep gadget-window-world set-world-handle ] keep
- dup gadget-window-hWnd [ windows get set-hash ] keep show-window ;
-
-: select-gl-context ( handle -- )
- get-gadget-window
- [
- [ gadget-window-hDC ] keep gadget-window-hRC
- wglMakeCurrent win32-error=0
- ] when* ;
-
-: flush-gl-context ( handle -- )
- get-gadget-window [ gadget-window-hDC SwapBuffers win32-error=0 ] when* ;
-
-IN: shells
-: ui
- [
- [
- init-win32-ui
- launchpad-window
- listener-window
- event-loop
- ] with-freetype
- ] [ cleanup-win32-ui ] cleanup ;
-
-IN: kernel
-: default-shell "ui" ;
+++ /dev/null
-USING: alien parser namespaces kernel syntax words math io prettyprint ;
-IN: win32-api
-
-
-TYPEDEF: void* MSGBOXPARAMSA
-TYPEDEF: void* MSGBOXPARAMSW
-
-
-! HKL for ActivateKeyboardLayout
-: HKL_PREV 0 ;
-: HKL_NEXT 1 ;
-
-: CW_USEDEFAULT HEX: 80000000 ;
-
-: WS_OVERLAPPED HEX: 00000000 ;
-: WS_POPUP HEX: 80000000 ;
-: WS_CHILD HEX: 40000000 ;
-: WS_MINIMIZE HEX: 20000000 ;
-: WS_VISIBLE HEX: 10000000 ;
-: WS_DISABLED HEX: 08000000 ;
-: WS_CLIPSIBLINGS HEX: 04000000 ;
-: WS_CLIPCHILDREN HEX: 02000000 ;
-: WS_MAXIMIZE HEX: 01000000 ;
-: WS_CAPTION HEX: 00C00000 ; ! /* WS_BORDER | WS_DLGFRAME */
-: WS_BORDER HEX: 00800000 ;
-: WS_DLGFRAME HEX: 00400000 ;
-: WS_VSCROLL HEX: 00200000 ;
-: WS_HSCROLL HEX: 00100000 ;
-: WS_SYSMENU HEX: 00080000 ;
-: WS_THICKFRAME HEX: 00040000 ;
-: WS_GROUP HEX: 00020000 ;
-: WS_TABSTOP HEX: 00010000 ;
-: WS_MINIMIZEBOX HEX: 00020000 ;
-: WS_MAXIMIZEBOX HEX: 00010000 ;
-
-! Common window styles
-: WS_OVERLAPPEDWINDOW WS_OVERLAPPED WS_CAPTION WS_SYSMENU WS_THICKFRAME WS_MINIMIZEBOX WS_MAXIMIZEBOX bitor bitor bitor bitor bitor ;
-
-: WS_POPUPWINDOW WS_POPUP WS_BORDER WS_SYSMENU bitor bitor ;
-
-: WS_CHILDWINDOW WS_CHILD ;
-
-: WS_TILED WS_OVERLAPPED ;
-: WS_ICONIC WS_MINIMIZE ;
-: WS_SIZEBOX WS_THICKFRAME ;
-: WS_TILEDWINDOW WS_OVERLAPPEDWINDOW ;
-
-
-
-! Extended window styles
-
-: WS_EX_DLGMODALFRAME HEX: 00000001 ; inline
-: WS_EX_NOPARENTNOTIFY HEX: 00000004 ; inline
-: WS_EX_TOPMOST HEX: 00000008 ; inline
-: WS_EX_ACCEPTFILES HEX: 00000010 ; inline
-: WS_EX_TRANSPARENT HEX: 00000020 ; inline
-: WS_EX_MDICHILD HEX: 00000040 ; inline
-: WS_EX_TOOLWINDOW HEX: 00000080 ; inline
-: WS_EX_WINDOWEDGE HEX: 00000100 ; inline
-: WS_EX_CLIENTEDGE HEX: 00000200 ; inline
-: WS_EX_CONTEXTHELP HEX: 00000400 ; inline
-
-: WS_EX_RIGHT HEX: 00001000 ; inline
-: WS_EX_LEFT HEX: 00000000 ; inline
-: WS_EX_RTLREADING HEX: 00002000 ; inline
-: WS_EX_LTRREADING HEX: 00000000 ; inline
-: WS_EX_LEFTSCROLLBAR HEX: 00004000 ; inline
-: WS_EX_RIGHTSCROLLBAR HEX: 00000000 ; inline
-: WS_EX_CONTROLPARENT HEX: 00010000 ; inline
-: WS_EX_STATICEDGE HEX: 00020000 ; inline
-: WS_EX_APPWINDOW HEX: 00040000 ; inline
-: WS_EX_OVERLAPPEDWINDOW WS_EX_WINDOWEDGE WS_EX_CLIENTEDGE bitor ; inline
-: WS_EX_PALETTEWINDOW
- WS_EX_WINDOWEDGE WS_EX_TOOLWINDOW bitor WS_EX_TOPMOST bitor ; inline
-
-
-: CS_VREDRAW HEX: 0001 ;
-: CS_HREDRAW HEX: 0002 ;
-: CS_DBLCLKS HEX: 0008 ;
-: CS_OWNDC HEX: 0020 ;
-: CS_CLASSDC HEX: 0040 ;
-: CS_PARENTDC HEX: 0080 ;
-: CS_NOCLOSE HEX: 0200 ;
-: CS_SAVEBITS HEX: 0800 ;
-: CS_BYTEALIGNCLIENT HEX: 1000 ;
-: CS_BYTEALIGNWINDOW HEX: 2000 ;
-: CS_GLOBALCLASS HEX: 4000 ;
-
-: COLOR_SCROLLBAR 0 ;
-: COLOR_BACKGROUND 1 ;
-: COLOR_ACTIVECAPTION 2 ;
-: COLOR_INACTIVECAPTION 3 ;
-: COLOR_MENU 4 ;
-: COLOR_WINDOW 5 ;
-: COLOR_WINDOWFRAME 6 ;
-: COLOR_MENUTEXT 7 ;
-: COLOR_WINDOWTEXT 8 ;
-: COLOR_CAPTIONTEXT 9 ;
-: COLOR_ACTIVEBORDER 10 ;
-: COLOR_INACTIVEBORDER 11 ;
-: COLOR_APPWORKSPACE 12 ;
-: COLOR_HIGHLIGHT 13 ;
-: COLOR_HIGHLIGHTTEXT 14 ;
-: COLOR_BTNFACE 15 ;
-: COLOR_BTNSHADOW 16 ;
-: COLOR_GRAYTEXT 17 ;
-: COLOR_BTNTEXT 18 ;
-: COLOR_INACTIVECAPTIONTEXT 19 ;
-: COLOR_BTNHIGHLIGHT 20 ;
-
-: IDI_APPLICATION 32512 ;
-: IDI_HAND 32513 ;
-: IDI_QUESTION 32514 ;
-: IDI_EXCLAMATION 32515 ;
-: IDI_ASTERISK 32516 ;
-: IDI_WINLOGO 32517 ;
-
-! ShowWindow() Commands
-: SW_HIDE 0 ;
-: SW_SHOWNORMAL 1 ;
-: SW_NORMAL 1 ;
-: SW_SHOWMINIMIZED 2 ;
-: SW_SHOWMAXIMIZED 3 ;
-: SW_MAXIMIZE 3 ;
-: SW_SHOWNOACTIVATE 4 ;
-: SW_SHOW 5 ;
-: SW_MINIMIZE 6 ;
-: SW_SHOWMINNOACTIVE 7 ;
-: SW_SHOWNA 8 ;
-: SW_RESTORE 9 ;
-: SW_SHOWDEFAULT 10 ;
-: SW_FORCEMINIMIZE 11 ;
-: SW_MAX 11 ;
-
-! PeekMessage
-: PM_NOREMOVE 0 ;
-: PM_REMOVE 1 ;
-: PM_NOYIELD 2 ;
-! : PM_QS_INPUT (QS_INPUT << 16) ;
-! : PM_QS_POSTMESSAGE ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16) ;
-! : PM_QS_PAINT (QS_PAINT << 16) ;
-! : PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16) ;
-
-
-!
-! Standard Cursor IDs
-!
-: IDC_ARROW 32512 ;
-: IDC_IBEAM 32513 ;
-: IDC_WAIT 32514 ;
-: IDC_CROSS 32515 ;
-: IDC_UPARROW 32516 ;
-: IDC_SIZE 32640 ; ! OBSOLETE: use IDC_SIZEALL
-: IDC_ICON 32641 ; ! OBSOLETE: use IDC_ARROW
-: IDC_SIZENWSE 32642 ;
-: IDC_SIZENESW 32643 ;
-: IDC_SIZEWE 32644 ;
-: IDC_SIZENS 32645 ;
-: IDC_SIZEALL 32646 ;
-: IDC_NO 32648 ; ! not in win3.1
-: IDC_HAND 32649 ;
-: IDC_APPSTARTING 32650 ; ! not in win3.1
-: IDC_HELP 32651 ;
-
-
-
-
-
-! Predefined Clipboard Formats
-: CF_TEXT 1 ; inline
-: CF_BITMAP 2 ; inline
-: CF_METAFILEPICT 3 ; inline
-: CF_SYLK 4 ; inline
-: CF_DIF 5 ; inline
-: CF_TIFF 6 ; inline
-: CF_OEMTEXT 7 ; inline
-: CF_DIB 8 ; inline
-: CF_PALETTE 9 ; inline
-: CF_PENDATA 10 ; inline
-: CF_RIFF 11 ; inline
-: CF_WAVE 12 ; inline
-: CF_UNICODETEXT 13 ; inline
-: CF_ENHMETAFILE 14 ; inline
-: CF_HDROP 15 ; inline
-: CF_LOCALE 16 ; inline
-: CF_DIBV5 17 ; inline
-: CF_MAX 18 ; inline
-
-: CF_OWNERDISPLAY HEX: 0080 ; inline
-: CF_DSPTEXT HEX: 0081 ; inline
-: CF_DSPBITMAP HEX: 0082 ; inline
-: CF_DSPMETAFILEPICT HEX: 0083 ; inline
-: CF_DSPENHMETAFILE HEX: 008E ; inline
-
-! "Private" formats don't get GlobalFree()'d
-: CF_PRIVATEFIRST HEX: 200 ; inline
-: CF_PRIVATELAST HEX: 2FF ; inline
-
-
-
-
-
-! "GDIOBJ" formats do get DeleteObject()'d
-: CF_GDIOBJFIRST HEX: 300 ; inline
-: CF_GDIOBJLAST HEX: 3FF ; inline
-
-
-: WM_NULL 0 ; inline
-: WM_CREATE 1 ; inline
-: WM_DESTROY 2 ; inline
-: WM_MOVE 3 ; inline
-: WM_SIZE 5 ; inline
-: WM_ACTIVATE 6 ; inline
-
-
-! Virtual Keys, Standard Set
-: VK_LBUTTON HEX: 01 ; inline
-: VK_RBUTTON HEX: 02 ; inline
-: VK_CANCEL HEX: 03 ; inline
-: VK_MBUTTON HEX: 04 ; inline ! NOT contiguous with L & RBUTTON
-: VK_XBUTTON1 HEX: 05 ; inline ! NOT contiguous with L & RBUTTON
-: VK_XBUTTON2 HEX: 06 ; inline ! NOT contiguous with L & RBUTTON
-! 0x07 : unassigned
-: VK_BACK HEX: 08 ; inline
-: VK_TAB HEX: 09 ; inline
-! 0x0A - 0x0B : reserved
-
-: VK_CLEAR HEX: 0C ; inline
-: VK_RETURN HEX: 0D ; inline
-
-: VK_SHIFT HEX: 10 ; inline
-: VK_CONTROL HEX: 11 ; inline
-: VK_MENU HEX: 12 ; inline
-: VK_PAUSE HEX: 13 ; inline
-: VK_CAPITAL HEX: 14 ; inline
-
-: VK_KANA HEX: 15 ; inline
-: VK_HANGEUL HEX: 15 ; inline ! old name - here for compatibility
-: VK_HANGUL HEX: 15 ; inline
-: VK_JUNJA HEX: 17 ; inline
-: VK_FINAL HEX: 18 ; inline
-: VK_HANJA HEX: 19 ; inline
-: VK_KANJI HEX: 19 ; inline
-
-: VK_ESCAPE HEX: 1B ; inline
-
-: VK_CONVERT HEX: 1C ; inline
-: VK_NONCONVERT HEX: 1D ; inline
-: VK_ACCEPT HEX: 1E ; inline
-: VK_MODECHANGE HEX: 1F ; inline
-
-: VK_SPACE HEX: 20 ; inline
-: VK_PRIOR HEX: 21 ; inline
-: VK_NEXT HEX: 22 ; inline
-: VK_END HEX: 23 ; inline
-: VK_HOME HEX: 24 ; inline
-: VK_LEFT HEX: 25 ; inline
-: VK_UP HEX: 26 ; inline
-: VK_RIGHT HEX: 27 ; inline
-: VK_DOWN HEX: 28 ; inline
-: VK_SELECT HEX: 29 ; inline
-: VK_PRINT HEX: 2A ; inline
-: VK_EXECUTE HEX: 2B ; inline
-: VK_SNAPSHOT HEX: 2C ; inline
-: VK_INSERT HEX: 2D ; inline
-: VK_DELETE HEX: 2E ; inline
-: VK_HELP HEX: 2F ; inline
-
-! VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
-! 0x40 : unassigned
-! VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
-
-: VK_LWIN HEX: 5B ; inline
-: VK_RWIN HEX: 5C ; inline
-: VK_APPS HEX: 5D ; inline
-
-! 0x5E : reserved
-
-: VK_SLEEP HEX: 5F ; inline
-
-: VK_NUMPAD0 HEX: 60 ; inline
-: VK_NUMPAD1 HEX: 61 ; inline
-: VK_NUMPAD2 HEX: 62 ; inline
-: VK_NUMPAD3 HEX: 63 ; inline
-: VK_NUMPAD4 HEX: 64 ; inline
-: VK_NUMPAD5 HEX: 65 ; inline
-: VK_NUMPAD6 HEX: 66 ; inline
-: VK_NUMPAD7 HEX: 67 ; inline
-: VK_NUMPAD8 HEX: 68 ; inline
-: VK_NUMPAD9 HEX: 69 ; inline
-: VK_MULTIPLY HEX: 6A ; inline
-: VK_ADD HEX: 6B ; inline
-: VK_SEPARATOR HEX: 6C ; inline
-: VK_SUBTRACT HEX: 6D ; inline
-: VK_DECIMAL HEX: 6E ; inline
-: VK_DIVIDE HEX: 6F ; inline
-: VK_F1 HEX: 70 ; inline
-: VK_F2 HEX: 71 ; inline
-: VK_F3 HEX: 72 ; inline
-: VK_F4 HEX: 73 ; inline
-: VK_F5 HEX: 74 ; inline
-: VK_F6 HEX: 75 ; inline
-: VK_F7 HEX: 76 ; inline
-: VK_F8 HEX: 77 ; inline
-: VK_F9 HEX: 78 ; inline
-: VK_F10 HEX: 79 ; inline
-: VK_F11 HEX: 7A ; inline
-: VK_F12 HEX: 7B ; inline
-: VK_F13 HEX: 7C ; inline
-: VK_F14 HEX: 7D ; inline
-: VK_F15 HEX: 7E ; inline
-: VK_F16 HEX: 7F ; inline
-: VK_F17 HEX: 80 ; inline
-: VK_F18 HEX: 81 ; inline
-: VK_F19 HEX: 82 ; inline
-: VK_F20 HEX: 83 ; inline
-: VK_F21 HEX: 84 ; inline
-: VK_F22 HEX: 85 ; inline
-: VK_F23 HEX: 86 ; inline
-: VK_F24 HEX: 87 ; inline
-
-! 0x88 - 0x8F : unassigned
-
-: VK_NUMLOCK HEX: 90 ; inline
-: VK_SCROLL HEX: 91 ; inline
-
-! NEC PC-9800 kbd definitions
-: VK_OEM_NEC_EQUAL HEX: 92 ; inline ! '=' key on numpad
-
-! Fujitsu/OASYS kbd definitions
-: VK_OEM_FJ_JISHO HEX: 92 ; inline ! 'Dictionary' key
-: VK_OEM_FJ_MASSHOU HEX: 93 ; inline ! 'Unregister word' key
-: VK_OEM_FJ_TOUROKU HEX: 94 ; inline ! 'Register word' key
-: VK_OEM_FJ_LOYA HEX: 95 ; inline ! 'Left OYAYUBI' key
-: VK_OEM_FJ_ROYA HEX: 96 ; inline ! 'Right OYAYUBI' key
-
-! 0x97 - 0x9F : unassigned
-
-! VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.
-! Used only as parameters to GetAsyncKeyState() and GetKeyState().
-! No other API or message will distinguish left and right keys in this way.
-: VK_LSHIFT HEX: A0 ; inline
-: VK_RSHIFT HEX: A1 ; inline
-: VK_LCONTROL HEX: A2 ; inline
-: VK_RCONTROL HEX: A3 ; inline
-: VK_LMENU HEX: A4 ; inline
-: VK_RMENU HEX: A5 ; inline
-
-: VK_BROWSER_BACK HEX: A6 ; inline
-: VK_BROWSER_FORWARD HEX: A7 ; inline
-: VK_BROWSER_REFRESH HEX: A8 ; inline
-: VK_BROWSER_STOP HEX: A9 ; inline
-: VK_BROWSER_SEARCH HEX: AA ; inline
-: VK_BROWSER_FAVORITES HEX: AB ; inline
-: VK_BROWSER_HOME HEX: AC ; inline
-
-: VK_VOLUME_MUTE HEX: AD ; inline
-: VK_VOLUME_DOWN HEX: AE ; inline
-: VK_VOLUME_UP HEX: AF ; inline
-: VK_MEDIA_NEXT_TRACK HEX: B0 ; inline
-: VK_MEDIA_PREV_TRACK HEX: B1 ; inline
-: VK_MEDIA_STOP HEX: B2 ; inline
-: VK_MEDIA_PLAY_PAUSE HEX: B3 ; inline
-: VK_LAUNCH_MAIL HEX: B4 ; inline
-: VK_LAUNCH_MEDIA_SELECT HEX: B5 ; inline
-: VK_LAUNCH_APP1 HEX: B6 ; inline
-: VK_LAUNCH_APP2 HEX: B7 ; inline
-
-! 0xB8 - 0xB9 : reserved
-
-: VK_OEM_1 HEX: BA ; inline ! ';:' for US
-: VK_OEM_PLUS HEX: BB ; inline ! '+' any country
-: VK_OEM_COMMA HEX: BC ; inline ! ',' any country
-: VK_OEM_MINUS HEX: BD ; inline ! '-' any country
-: VK_OEM_PERIOD HEX: BE ; inline ! '.' any country
-: VK_OEM_2 HEX: BF ; inline ! '/?' for US
-: VK_OEM_3 HEX: C0 ; inline ! '`~' for US
-
-! 0xC1 - 0xD7 : reserved
-
-! 0xD8 - 0xDA : unassigned
-
-: VK_OEM_4 HEX: DB ; inline ! '[{' for US
-: VK_OEM_5 HEX: DC ; inline ! '\|' for US
-: VK_OEM_6 HEX: DD ; inline ! ']}' for US
-: VK_OEM_7 HEX: DE ; inline ! ''"' for US
-: VK_OEM_8 HEX: DF ; inline
-
-! 0xE0 : reserved
-
-! Various extended or enhanced keyboards
-: VK_OEM_AX HEX: E1 ; inline ! 'AX' key on Japanese AX kbd
-: VK_OEM_102 HEX: E2 ; inline ! "<>" or "\|" on RT 102-key kbd.
-: VK_ICO_HELP HEX: E3 ; inline ! Help key on ICO
-: VK_ICO_00 HEX: E4 ; inline ! 00 key on ICO
-
-: VK_PROCESSKEY HEX: E5 ; inline
-
-: VK_ICO_CLEAR HEX: E6 ; inline
-
-: VK_PACKET HEX: E7 ; inline
-
-! 0xE8 : unassigned
-
-! Nokia/Ericsson definitions
-: VK_OEM_RESET HEX: E9 ; inline
-: VK_OEM_JUMP HEX: EA ; inline
-: VK_OEM_PA1 HEX: EB ; inline
-: VK_OEM_PA2 HEX: EC ; inline
-: VK_OEM_PA3 HEX: ED ; inline
-: VK_OEM_WSCTRL HEX: EE ; inline
-: VK_OEM_CUSEL HEX: EF ; inline
-: VK_OEM_ATTN HEX: F0 ; inline
-: VK_OEM_FINISH HEX: F1 ; inline
-: VK_OEM_COPY HEX: F2 ; inline
-: VK_OEM_AUTO HEX: F3 ; inline
-: VK_OEM_ENLW HEX: F4 ; inline
-: VK_OEM_BACKTAB HEX: F5 ; inline
-
-: VK_ATTN HEX: F6 ; inline
-: VK_CRSEL HEX: F7 ; inline
-: VK_EXSEL HEX: F8 ; inline
-: VK_EREOF HEX: F9 ; inline
-: VK_PLAY HEX: FA ; inline
-: VK_ZOOM HEX: FB ; inline
-: VK_NONAME HEX: FC ; inline
-: VK_PA1 HEX: FD ; inline
-: VK_OEM_CLEAR HEX: FE ; inline
-! 0xFF : reserved
-
-! Key State Masks for Mouse Messages
-: MK_LBUTTON HEX: 0001 ; inline
-: MK_RBUTTON HEX: 0002 ; inline
-: MK_SHIFT HEX: 0004 ; inline
-: MK_CONTROL HEX: 0008 ; inline
-: MK_MBUTTON HEX: 0010 ; inline
-: MK_XBUTTON1 HEX: 0020 ; inline
-: MK_XBUTTON2 HEX: 0040 ; inline
-
-
-! Some fields are not defined for win64
-! Window field offsets for GetWindowLong()
-! TODO: win32 only!!
-windows? [
- : GWL_WNDPROC -4 ;
- : GWL_HINSTANCE -6 ;
- : GWL_HWNDPARENT -8 ;
- : GWL_USERDATA -21 ;
- : GWL_ID -12 ;
-] when
-
-: GWL_STYLE -16 ;
-: GWL_EXSTYLE -20 ;
-
-: GWLP_WNDPROC -4 ;
-: GWLP_HINSTANCE -6 ;
-: GWLP_HWNDPARENT -8 ;
-: GWLP_USERDATA -21 ;
-: GWLP_ID -12 ;
-
-! Class field offsets for GetClassLong()
-! TODO: win32 only!
-windows? [
- : GCL_MENUNAME -8 ;
- : GCL_HBRBACKGROUND -10 ;
- : GCL_HCURSOR -12 ;
- : GCL_HICON -14 ;
- : GCL_HMODULE -16 ;
- : GCL_WNDPROC -24 ;
- : GCL_HICONSM -34 ;
-] when
-: GCL_CBWNDEXTRA -18 ;
-: GCL_CBCLSEXTRA -20 ;
-: GCL_STYLE -26 ;
-: GCW_ATOM -32 ;
-
-: GCLP_MENUNAME -8 ;
-: GCLP_HBRBACKGROUND -10 ;
-: GCLP_HCURSOR -12 ;
-: GCLP_HICON -14 ;
-: GCLP_HMODULE -16 ;
-: GCLP_WNDPROC -24 ;
-: GCLP_HICONSM -34 ;
-
-
-
-LIBRARY: user32
-FUNCTION: HKL ActivateKeyboardLayout ( HKL hkl, UINT Flags ) ;
-
-FUNCTION: BOOL AdjustWindowRect ( LPRECT lpRect, DWORD dwStyle, BOOL bMenu ) ;
-FUNCTION: BOOL AdjustWindowRectEx ( LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle ) ;
-! FUNCTION: AlignRects
-! FUNCTION: AllowForegroundActivation
-! FUNCTION: AllowSetForegroundWindow
-! FUNCTION: AnimateWindow
-
-
-
-FUNCTION: BOOL AnyPopup ( ) ;
-
-! FUNCTION: AppendMenuA
-! FUNCTION: AppendMenuW
-! FUNCTION: ArrangeIconicWindows
-! FUNCTION: AttachThreadInput
-! FUNCTION: BeginDeferWindowPos
-
-
-FUNCTION: HDC BeginPaint ( HWND hwnd, LPPAINTSTRUCT lpPaint ) ;
-
-! FUNCTION: BlockInput
-! FUNCTION: BringWindowToTop
-! FUNCTION: BroadcastSystemMessage
-! FUNCTION: BroadcastSystemMessageA
-! FUNCTION: BroadcastSystemMessageExA
-! FUNCTION: BroadcastSystemMessageExW
-! FUNCTION: BroadcastSystemMessageW
-! FUNCTION: BuildReasonArray
-! FUNCTION: CalcMenuBar
-! FUNCTION: CallMsgFilter
-! FUNCTION: CallMsgFilterA
-! FUNCTION: CallMsgFilterW
-! FUNCTION: CallNextHookEx
-! FUNCTION: CallWindowProcA
-! FUNCTION: CallWindowProcW
-! FUNCTION: CascadeChildWindows
-! FUNCTION: CascadeWindows
-! FUNCTION: ChangeClipboardChain
-! FUNCTION: ChangeDisplaySettingsA
-! FUNCTION: ChangeDisplaySettingsExA
-! FUNCTION: ChangeDisplaySettingsExW
-! FUNCTION: ChangeDisplaySettingsW
-! FUNCTION: ChangeMenuA
-! FUNCTION: ChangeMenuW
-! FUNCTION: CharLowerA
-! FUNCTION: CharLowerBuffA
-! FUNCTION: CharLowerBuffW
-! FUNCTION: CharLowerW
-! FUNCTION: CharNextA
-! FUNCTION: CharNextExA
-! FUNCTION: CharNextW
-! FUNCTION: CharPrevA
-! FUNCTION: CharPrevExA
-! FUNCTION: CharPrevW
-! FUNCTION: CharToOemA
-! FUNCTION: CharToOemBuffA
-! FUNCTION: CharToOemBuffW
-! FUNCTION: CharToOemW
-! FUNCTION: CharUpperA
-! FUNCTION: CharUpperBuffA
-! FUNCTION: CharUpperBuffW
-! FUNCTION: CharUpperW
-! FUNCTION: CheckDlgButton
-! FUNCTION: CheckMenuItem
-! FUNCTION: CheckMenuRadioItem
-! FUNCTION: CheckRadioButton
-! FUNCTION: ChildWindowFromPoint
-! FUNCTION: ChildWindowFromPointEx
-! FUNCTION: ClientThreadSetup
-! FUNCTION: ClientToScreen
-! FUNCTION: CliImmSetHotKey
-! FUNCTION: ClipCursor
-FUNCTION: BOOL CloseClipboard ( ) ;
-! FUNCTION: CloseDesktop
-! FUNCTION: CloseWindow
-! FUNCTION: CloseWindowStation
-! FUNCTION: CopyAcceleratorTableA
-! FUNCTION: CopyAcceleratorTableW
-! FUNCTION: CopyIcon
-! FUNCTION: CopyImage
-! FUNCTION: CopyRect
-! FUNCTION: CountClipboardFormats
-! FUNCTION: CreateAcceleratorTableA
-! FUNCTION: CreateAcceleratorTableW
-! FUNCTION: CreateCaret
-! FUNCTION: CreateCursor
-! FUNCTION: CreateDesktopA
-! FUNCTION: CreateDesktopW
-! FUNCTION: CreateDialogIndirectParamA
-! FUNCTION: CreateDialogIndirectParamAorW
-! FUNCTION: CreateDialogIndirectParamW
-! FUNCTION: CreateDialogParamA
-! FUNCTION: CreateDialogParamW
-! FUNCTION: CreateIcon
-! FUNCTION: CreateIconFromResource
-! FUNCTION: CreateIconFromResourceEx
-! FUNCTION: CreateIconIndirect
-! FUNCTION: CreateMDIWindowA
-! FUNCTION: CreateMDIWindowW
-! FUNCTION: CreateMenu
-! FUNCTION: CreatePopupMenu
-! FUNCTION: CreateSystemThreads
-
-FUNCTION: HWND CreateWindowExA (
- DWORD dwExStyle,
- LPCSTR lpClassName,
- LPCSTR lpWindowName,
- DWORD dwStyle,
- uint X,
- uint Y,
- uint nWidth,
- uint nHeight,
- HWND hWndParent,
- HMENU hMenu,
- HINSTANCE hInstance,
- LPVOID lpParam ) ;
-
-FUNCTION: HWND CreateWindowExW (
- DWORD dwExStyle,
- LPCWSTR lpClassName,
- LPCWSTR lpWindowName,
- DWORD dwStyle,
- uint X,
- uint Y,
- uint nWidth,
- uint nHeight,
- HWND hWndParent,
- HMENU hMenu,
- HINSTANCE hInstance,
- LPVOID lpParam ) ;
-
-: CreateWindowEx \ CreateWindowExW \ CreateWindowExA unicode-exec ;
-
-! 11 >r <r
-: CreateWindow >r >r >r >r >r >r >r >r >r >r >r 0 r> r> r> r> r> r> r> r> r> r> r> CreateWindowEx ;
-
-
-! FUNCTION: CreateWindowStationA
-! FUNCTION: CreateWindowStationW
-! FUNCTION: CsrBroadcastSystemMessageExW
-! FUNCTION: CtxInitUser32
-! FUNCTION: DdeAbandonTransaction
-! FUNCTION: DdeAccessData
-! FUNCTION: DdeAddData
-! FUNCTION: DdeClientTransaction
-! FUNCTION: DdeCmpStringHandles
-! FUNCTION: DdeConnect
-! FUNCTION: DdeConnectList
-! FUNCTION: DdeCreateDataHandle
-! FUNCTION: DdeCreateStringHandleA
-! FUNCTION: DdeCreateStringHandleW
-! FUNCTION: DdeDisconnect
-! FUNCTION: DdeDisconnectList
-! FUNCTION: DdeEnableCallback
-! FUNCTION: DdeFreeDataHandle
-! FUNCTION: DdeFreeStringHandle
-! FUNCTION: DdeGetData
-! FUNCTION: DdeGetLastError
-! FUNCTION: DdeGetQualityOfService
-! FUNCTION: DdeImpersonateClient
-! FUNCTION: DdeInitializeA
-! FUNCTION: DdeInitializeW
-! FUNCTION: DdeKeepStringHandle
-! FUNCTION: DdeNameService
-! FUNCTION: DdePostAdvise
-! FUNCTION: DdeQueryConvInfo
-! FUNCTION: DdeQueryNextServer
-! FUNCTION: DdeQueryStringA
-! FUNCTION: DdeQueryStringW
-! FUNCTION: DdeReconnect
-! FUNCTION: DdeSetQualityOfService
-! FUNCTION: DdeSetUserHandle
-! FUNCTION: DdeUnaccessData
-! FUNCTION: DdeUninitialize
-! FUNCTION: DefDlgProcA
-! FUNCTION: DefDlgProcW
-! FUNCTION: DeferWindowPos
-! FUNCTION: DefFrameProcA
-! FUNCTION: DefFrameProcW
-! FUNCTION: DefMDIChildProcA
-! FUNCTION: DefMDIChildProcW
-! FUNCTION: DefRawInputProc
-FUNCTION: LRESULT DefWindowProcA ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) ;
-FUNCTION: LRESULT DefWindowProcW ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) ;
-: DefWindowProc \ DefWindowProcW \ DefWindowProcA unicode-exec ;
-! FUNCTION: DeleteMenu
-! FUNCTION: DeregisterShellHookWindow
-! FUNCTION: DestroyAcceleratorTable
-! FUNCTION: DestroyCaret
-! FUNCTION: DestroyCursor
-! FUNCTION: DestroyIcon
-! FUNCTION: DestroyMenu
-! FUNCTION: DestroyReasons
-FUNCTION: BOOL DestroyWindow ( HWND hWnd ) ;
-! FUNCTION: DeviceEventWorker
-! FUNCTION: DialogBoxIndirectParamA
-! FUNCTION: DialogBoxIndirectParamAorW
-! FUNCTION: DialogBoxIndirectParamW
-! FUNCTION: DialogBoxParamA
-! FUNCTION: DialogBoxParamW
-! FUNCTION: DisableProcessWindowsGhosting
-
-FUNCTION: LONG DispatchMessageA ( MSG* lpMsg ) ;
-FUNCTION: LONG DispatchMessageW ( MSG* lpMsg ) ;
-: DispatchMessage \ DispatchMessageW \ DispatchMessageA unicode-exec ;
-
-! FUNCTION: DisplayExitWindowsWarnings
-! FUNCTION: DlgDirListA
-! FUNCTION: DlgDirListComboBoxA
-! FUNCTION: DlgDirListComboBoxW
-! FUNCTION: DlgDirListW
-! FUNCTION: DlgDirSelectComboBoxExA
-! FUNCTION: DlgDirSelectComboBoxExW
-! FUNCTION: DlgDirSelectExA
-! FUNCTION: DlgDirSelectExW
-! FUNCTION: DragDetect
-! FUNCTION: DragObject
-
-
-FUNCTION: BOOL DrawAnimatedRects ( HWND hWnd, int idAni, RECT* lprcFrom, RECT* lprcTo ) ;
-! FUNCTION: BOOL DrawCaption ( HWND hWnd, HDC hdc, LPRECT lprc, UINT uFlags ) ;
-
-! FUNCTION: DrawEdge
-! FUNCTION: DrawFocusRect
-! FUNCTION: DrawFrame
-! FUNCTION: DrawFrameControl
-! FUNCTION: DrawIcon
-! FUNCTION: DrawIconEx
-! FUNCTION: DrawMenuBar
-! FUNCTION: DrawMenuBarTemp
-! FUNCTION: DrawStateA
-! FUNCTION: DrawStateW
-! FUNCTION: DrawTextA
-! FUNCTION: DrawTextExA
-! FUNCTION: DrawTextExW
-! FUNCTION: DrawTextW
-! FUNCTION: EditWndProc
-FUNCTION: BOOL EmptyClipboard ( ) ;
-! FUNCTION: EnableMenuItem
-! FUNCTION: EnableScrollBar
-! FUNCTION: EnableWindow
-! FUNCTION: EndDeferWindowPos
-! FUNCTION: EndDialog
-! FUNCTION: EndMenu
-
-FUNCTION: BOOL EndPaint ( HWND hWnd, PAINTSTRUCT* lpPaint) ;
-
-! FUNCTION: EndTask
-! FUNCTION: EnterReaderModeHelper
-! FUNCTION: EnumChildWindows
-FUNCTION: UINT EnumClipboardFormats ( UINT format ) ;
-! FUNCTION: EnumDesktopsA
-! FUNCTION: EnumDesktopsW
-! FUNCTION: EnumDesktopWindows
-! FUNCTION: EnumDisplayDevicesA
-! FUNCTION: EnumDisplayDevicesW
-! FUNCTION: EnumDisplayMonitors
-! FUNCTION: EnumDisplaySettingsA
-! FUNCTION: EnumDisplaySettingsExA
-! FUNCTION: EnumDisplaySettingsExW
-! FUNCTION: EnumDisplaySettingsW
-! FUNCTION: EnumPropsA
-! FUNCTION: EnumPropsExA
-! FUNCTION: EnumPropsExW
-! FUNCTION: EnumPropsW
-! FUNCTION: EnumThreadWindows
-! FUNCTION: EnumWindows
-! FUNCTION: EnumWindowStationsA
-! FUNCTION: EnumWindowStationsW
-! FUNCTION: EqualRect
-! FUNCTION: ExcludeUpdateRgn
-! FUNCTION: ExitWindowsEx
-! FUNCTION: FillRect
-! FUNCTION: FindWindowA
-! FUNCTION: FindWindowExA
-! FUNCTION: FindWindowExW
-! FUNCTION: FindWindowW
-! FUNCTION: FlashWindow
-! FUNCTION: FlashWindowEx
-! FUNCTION: FrameRect
-! FUNCTION: FreeDDElParam
-! FUNCTION: GetActiveWindow
-! FUNCTION: GetAltTabInfo
-! FUNCTION: GetAltTabInfoA
-! FUNCTION: GetAltTabInfoW
-! FUNCTION: GetAncestor
-! FUNCTION: GetAppCompatFlags
-! FUNCTION: GetAppCompatFlags2
-! FUNCTION: GetAsyncKeyState
-! FUNCTION: GetCapture
-! FUNCTION: GetCaretBlinkTime
-! FUNCTION: GetCaretPos
-FUNCTION: BOOL GetClassInfoA ( HINSTANCE hInst, LPCTSTR lpszClass, LPWNDCLASS lpwcx ) ;
-FUNCTION: BOOL GetClassInfoW ( HINSTANCE hInst, LPCWSTR lpszClass, LPWNDCLASS lpwcx ) ;
-: GetClassInfo \ GetClassInfoW \ GetClassInfoA unicode-exec ;
-
-FUNCTION: BOOL GetClassInfoExA ( HINSTANCE hInst, LPCTSTR lpszClass, LPWNDCLASSEX lpwcx ) ;
-FUNCTION: BOOL GetClassInfoExW ( HINSTANCE hInst, LPCWSTR lpszClass, LPWNDCLASSEX lpwcx ) ;
-: GetClassInfoEx \ GetClassInfoExW \ GetClassInfoExA unicode-exec ;
-
-FUNCTION: ULONG_PTR GetClassLongA ( HWND hWnd, int nIndex ) ;
-FUNCTION: ULONG_PTR GetClassLongW ( HWND hWnd, int nIndex ) ;
-: GetClassLong \ GetClassLongW \ GetClassLongA unicode-exec ;
-: GetClassLongPtr \ GetClassLongW \ GetClassLongA unicode-exec ;
-
-
-! FUNCTION: GetClassNameA
-! FUNCTION: GetClassNameW
-! FUNCTION: GetClassWord
-! FUNCTION: BOOL GetClientRect ( HWND hWnd, LPRECT lpRect ) ;
-
-FUNCTION: HANDLE GetClipboardData ( UINT uFormat ) ;
-
-! FUNCTION: GetClipboardFormatNameA
-! FUNCTION: GetClipboardFormatNameW
-FUNCTION: HWND GetClipboardOwner ( ) ;
-FUNCTION: DWORD GetClipboardSequenceNumber ( ) ;
-! FUNCTION: GetClipboardViewer
-! FUNCTION: GetClipCursor
-! FUNCTION: GetComboBoxInfo
-! FUNCTION: GetCursor
-! FUNCTION: GetCursorFrameInfo
-! FUNCTION: GetCursorInfo
-! FUNCTION: GetCursorPos
-FUNCTION: HDC GetDC ( HWND hWnd ) ;
-FUNCTION: HDC GetDCEx ( HWND hWnd, HRGN hrgnClip, DWORD flags ) ;
-! FUNCTION: GetDesktopWindow
-! FUNCTION: GetDialogBaseUnits
-! FUNCTION: GetDlgCtrlID
-! FUNCTION: GetDlgItem
-! FUNCTION: GetDlgItemInt
-! FUNCTION: GetDlgItemTextA
-! FUNCTION: GetDlgItemTextW
-! FUNCTION: GetDoubleClickTime
-FUNCTION: HWND GetFocus ( ) ;
-! FUNCTION: GetForegroundWindow
-! FUNCTION: GetGuiResources
-! FUNCTION: GetGUIThreadInfo
-! FUNCTION: GetIconInfo
-! FUNCTION: GetInputDesktop
-! FUNCTION: GetInputState
-! FUNCTION: GetInternalWindowPos
-! FUNCTION: GetKBCodePage
-! FUNCTION: GetKeyboardLayout
-! FUNCTION: GetKeyboardLayoutList
-! FUNCTION: GetKeyboardLayoutNameA
-! FUNCTION: GetKeyboardLayoutNameW
-! FUNCTION: GetKeyboardState
-! FUNCTION: GetKeyboardType
-! FUNCTION: GetKeyNameTextA
-! FUNCTION: GetKeyNameTextW
-FUNCTION: SHORT GetKeyState ( int nVirtKey ) ;
-! FUNCTION: GetLastActivePopup
-! FUNCTION: GetLastInputInfo
-! FUNCTION: GetLayeredWindowAttributes
-! FUNCTION: GetListBoxInfo
-! FUNCTION: GetMenu
-! FUNCTION: GetMenuBarInfo
-! FUNCTION: GetMenuCheckMarkDimensions
-! FUNCTION: GetMenuContextHelpId
-! FUNCTION: GetMenuDefaultItem
-! FUNCTION: GetMenuInfo
-! FUNCTION: GetMenuItemCount
-! FUNCTION: GetMenuItemID
-! FUNCTION: GetMenuItemInfoA
-! FUNCTION: GetMenuItemInfoW
-! FUNCTION: GetMenuItemRect
-! FUNCTION: GetMenuState
-! FUNCTION: GetMenuStringA
-! FUNCTION: GetMenuStringW
-
-FUNCTION: BOOL GetMessageA ( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax ) ;
-FUNCTION: BOOL GetMessageW ( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax ) ;
-: GetMessage \ GetMessageW \ GetMessageA unicode-exec ;
-
-! FUNCTION: GetMessageExtraInfo
-! FUNCTION: GetMessagePos
-! FUNCTION: GetMessageTime
-! FUNCTION: GetMonitorInfoA
-! FUNCTION: GetMonitorInfoW
-! FUNCTION: GetMouseMovePointsEx
-! FUNCTION: GetNextDlgGroupItem
-! FUNCTION: GetNextDlgTabItem
-! FUNCTION: GetOpenClipboardWindow
-FUNCTION: HWND GetParent ( HWND hWnd ) ;
-FUNCTION: int GetPriorityClipboardFormat ( UINT* paFormatPriorityList, int cFormats ) ;
-! FUNCTION: GetProcessDefaultLayout
-! FUNCTION: GetProcessWindowStation
-! FUNCTION: GetProgmanWindow
-! FUNCTION: GetPropA
-! FUNCTION: GetPropW
-! FUNCTION: GetQueueStatus
-! FUNCTION: GetRawInputBuffer
-! FUNCTION: GetRawInputData
-! FUNCTION: GetRawInputDeviceInfoA
-! FUNCTION: GetRawInputDeviceInfoW
-! FUNCTION: GetRawInputDeviceList
-! FUNCTION: GetReasonTitleFromReasonCode
-! FUNCTION: GetRegisteredRawInputDevices
-! FUNCTION: GetScrollBarInfo
-! FUNCTION: GetScrollInfo
-! FUNCTION: GetScrollPos
-! FUNCTION: GetScrollRange
-! FUNCTION: GetShellWindow
-! FUNCTION: GetSubMenu
-! FUNCTION: GetSysColor
-FUNCTION: HBRUSH GetSysColorBrush ( int nIndex ) ;
-! FUNCTION: GetSystemMenu
-! FUNCTION: GetSystemMetrics
-! FUNCTION: GetTabbedTextExtentA
-! FUNCTION: GetTabbedTextExtentW
-! FUNCTION: GetTaskmanWindow
-! FUNCTION: GetThreadDesktop
-! FUNCTION: GetTitleBarInfo
-
-
-FUNCTION: HWND GetTopWindow ( HWND hWnd ) ;
-! FUNCTION: BOOL GetUpdateRect ( HWND hWnd, LPRECT lpRect, BOOL bErase ) ;
-FUNCTION: int GetUpdateRgn ( HWND hWnd, HRGN hRgn, BOOL bErase ) ;
-
-
-! FUNCTION: GetUserObjectInformationA
-! FUNCTION: GetUserObjectInformationW
-! FUNCTION: GetUserObjectSecurity
-FUNCTION: HWND GetWindow ( HWND hWnd, UINT uCmd ) ;
-! FUNCTION: GetWindowContextHelpId
-! FUNCTION: GetWindowDC
-! FUNCTION: GetWindowInfo
-! FUNCTION: GetWindowLongA
-! FUNCTION: GetWindowLongW
-! FUNCTION: GetWindowModuleFileName
-! FUNCTION: GetWindowModuleFileNameA
-! FUNCTION: GetWindowModuleFileNameW
-! FUNCTION: GetWindowPlacement
-! FUNCTION: BOOL GetWindowRect ( HWND hWnd, LPRECT lpRect ) ;
-! FUNCTION: GetWindowRgn
-! FUNCTION: GetWindowRgnBox
-! FUNCTION: GetWindowTextA
-! FUNCTION: GetWindowTextLengthA
-! FUNCTION: GetWindowTextLengthW
-! FUNCTION: GetWindowTextW
-! FUNCTION: GetWindowThreadProcessId
-! FUNCTION: GetWindowWord
-! FUNCTION: GetWinStationInfo
-! FUNCTION: GrayStringA
-! FUNCTION: GrayStringW
-! FUNCTION: HideCaret
-! FUNCTION: HiliteMenuItem
-! FUNCTION: ImpersonateDdeClientWindow
-! FUNCTION: IMPGetIMEA
-! FUNCTION: IMPGetIMEW
-! FUNCTION: IMPQueryIMEA
-! FUNCTION: IMPQueryIMEW
-! FUNCTION: IMPSetIMEA
-! FUNCTION: IMPSetIMEW
-! FUNCTION: InflateRect
-! FUNCTION: InitializeLpkHooks
-! FUNCTION: InitializeWin32EntryTable
-! FUNCTION: InSendMessage
-! FUNCTION: InSendMessageEx
-! FUNCTION: InsertMenuA
-! FUNCTION: InsertMenuItemA
-! FUNCTION: InsertMenuItemW
-! FUNCTION: InsertMenuW
-! FUNCTION: InternalGetWindowText
-! FUNCTION: IntersectRect
-! FUNCTION: InvalidateRect
-! FUNCTION: InvalidateRgn
-! FUNCTION: InvertRect
-! FUNCTION: IsCharAlphaA
-! FUNCTION: IsCharAlphaNumericA
-! FUNCTION: IsCharAlphaNumericW
-! FUNCTION: IsCharAlphaW
-! FUNCTION: IsCharLowerA
-! FUNCTION: IsCharLowerW
-! FUNCTION: IsCharUpperA
-! FUNCTION: IsCharUpperW
-FUNCTION: BOOL IsChild ( HWND hWndParent, HWND hWnd ) ;
-FUNCTION: BOOL IsClipboardFormatAvailable ( UINT format ) ;
-! FUNCTION: IsDialogMessage
-! FUNCTION: IsDialogMessageA
-! FUNCTION: IsDialogMessageW
-! FUNCTION: IsDlgButtonChecked
-FUNCTION: BOOL IsGUIThread ( BOOL bConvert ) ;
-FUNCTION: BOOL IsHungAppWindow ( HWND hWnd ) ;
-FUNCTION: BOOL IsIconic ( HWND hWnd ) ;
-FUNCTION: BOOL IsMenu ( HMENU hMenu ) ;
-! FUNCTION: BOOL IsRectEmpty
-! FUNCTION: BOOL IsServerSideWindow
-FUNCTION: BOOL IsWindow ( HWND hWnd ) ;
-! FUNCTION: BOOL IsWindowEnabled
-! FUNCTION: BOOL IsWindowInDestroy
-FUNCTION: BOOL IsWindowUnicode ( HWND hWnd ) ;
-FUNCTION: BOOL IsWindowVisible ( HWND hWnd ) ;
-! FUNCTION: BOOL IsWinEventHookInstalled
-FUNCTION: BOOL IsZoomed ( HWND hWnd ) ;
-! FUNCTION: keybd_event
-! FUNCTION: KillSystemTimer
-! FUNCTION: KillTimer
-! FUNCTION: LoadAcceleratorsA
-! FUNCTION: LoadAcceleratorsW
-! FUNCTION: LoadBitmapA
-! FUNCTION: LoadBitmapW
-! FUNCTION: LoadCursorFromFileA
-! FUNCTION: LoadCursorFromFileW
-
-
-! FUNCTION: HCURSOR LoadCursorA ( HINSTANCE hInstance, LPCTSTR lpCursorName ) ;
-! FUNCTION: HCURSOR LoadCursorW ( HINSTANCE hInstance, LPCWSTR lpCursorName ) ;
-FUNCTION: HCURSOR LoadCursorA ( HINSTANCE hInstance, ushort lpCursorName ) ;
-FUNCTION: HCURSOR LoadCursorW ( HINSTANCE hInstance, ushort lpCursorName ) ;
-: LoadCursor \ LoadCursorW \ LoadCursorA unicode-exec ;
-
-! FUNCTION: HICON LoadIconA ( HINSTANCE hInstance, LPCTSTR lpIconName ) ;
-! FUNCTION: HICON LoadIconW ( HINSTANCE hInstance, LPCWSTR lpIconName ) ;
-FUNCTION: HICON LoadIconA ( HINSTANCE hInstance, ushort lpIconName ) ;
-FUNCTION: HICON LoadIconW ( HINSTANCE hInstance, ushort lpIconName ) ;
-: LoadIcon \ LoadIconW \ LoadIconA unicode-exec ;
-
-! FUNCTION: LoadImageA
-! FUNCTION: LoadImageW
-! FUNCTION: LoadKeyboardLayoutA
-! FUNCTION: LoadKeyboardLayoutEx
-! FUNCTION: LoadKeyboardLayoutW
-! FUNCTION: LoadLocalFonts
-! FUNCTION: LoadMenuA
-! FUNCTION: LoadMenuIndirectA
-! FUNCTION: LoadMenuIndirectW
-! FUNCTION: LoadMenuW
-! FUNCTION: LoadRemoteFonts
-! FUNCTION: LoadStringA
-! FUNCTION: LoadStringW
-! FUNCTION: LockSetForegroundWindow
-! FUNCTION: LockWindowStation
-! FUNCTION: LockWindowUpdate
-! FUNCTION: LockWorkStation
-! FUNCTION: LookupIconIdFromDirectory
-! FUNCTION: LookupIconIdFromDirectoryEx
-! FUNCTION: MapDialogRect
-! FUNCTION: MapVirtualKeyA
-! FUNCTION: MapVirtualKeyExA
-! FUNCTION: MapVirtualKeyExW
-! FUNCTION: MapVirtualKeyW
-! FUNCTION: MapWindowPoints
-! FUNCTION: MB_GetString
-! FUNCTION: MBToWCSEx
-! FUNCTION: MenuItemFromPoint
-! FUNCTION: MenuWindowProcA
-! FUNCTION: MenuWindowProcW
-
-
-: MB_ICONASTERISK HEX: 00000040 ;
-: MB_ICONEXCLAMATION HEX: 00000030 ;
-: MB_ICONHAND HEX: 00000010 ;
-: MB_ICONQUESTION HEX: 00000020 ;
-: MB_OK HEX: 00000000 ;
-! -1 is Simple beep
-FUNCTION: BOOL MessageBeep ( UINT uType ) ;
-
-FUNCTION: int MessageBoxA (
- HWND hWnd,
- LPCSTR lpText,
- LPCSTR lpCaption,
- UINT uType ) ;
-
-FUNCTION: int MessageBoxW (
- HWND hWnd,
- LPCWSTR lpText,
- LPCWSTR lpCaption,
- UINT uType) ;
-
-FUNCTION: int MessageBoxExA ( HWND hWnd,
- LPCSTR lpText,
- LPCSTR lpCaption,
- UINT uType,
- WORD wLanguageId
- ) ;
-
-FUNCTION: int MessageBoxExW (
- HWND hWnd,
- LPCWSTR lpText,
- LPCWSTR lpCaption,
- UINT uType,
- WORD wLanguageId ) ;
-
-FUNCTION: int MessageBoxIndirectA (
- MSGBOXPARAMSA* params ) ;
-
-FUNCTION: int MessageBoxIndirectW (
- MSGBOXPARAMSW* params ) ;
-
-
-: MessageBox ( -- )
- \ MessageBoxW \ MessageBoxA unicode-exec ;
-
-: MessageBoxEx ( -- )
- \ MessageBoxExW \ MessageBoxExA unicode-exec ;
-
-: MessageBoxIndirect ( -- )
- \ MessageBoxIndirectW \ MessageBoxIndirectA unicode-exec ;
-
-! FUNCTION: MessageBoxTimeoutA ! dllexported, not in header
-! FUNCTION: MessageBoxTimeoutW ! dllexported, not in header
-
-! FUNCTION: ModifyMenuA
-! FUNCTION: ModifyMenuW
-! FUNCTION: MonitorFromPoint
-! FUNCTION: MonitorFromRect
-! FUNCTION: MonitorFromWindow
-! FUNCTION: mouse_event
-
-
-
-FUNCTION: BOOL MoveWindow (
- HWND hWnd,
- int X,
- int Y,
- int nWidth,
- int nHeight,
- BOOL bRepaint ) ;
-
-
-! FUNCTION: MsgWaitForMultipleObjects
-! FUNCTION: MsgWaitForMultipleObjectsEx
-! FUNCTION: NotifyWinEvent
-! FUNCTION: OemKeyScan
-! FUNCTION: OemToCharA
-! FUNCTION: OemToCharBuffA
-! FUNCTION: OemToCharBuffW
-! FUNCTION: OemToCharW
-! FUNCTION: OffsetRect
-FUNCTION: BOOL OpenClipboard ( HWND hWndNewOwner ) ;
-! FUNCTION: OpenDesktopA
-! FUNCTION: OpenDesktopW
-! FUNCTION: OpenIcon
-! FUNCTION: OpenInputDesktop
-! FUNCTION: OpenWindowStationA
-! FUNCTION: OpenWindowStationW
-! FUNCTION: PackDDElParam
-! FUNCTION: PaintDesktop
-! FUNCTION: PaintMenuBar
-FUNCTION: BOOL PeekMessageA ( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg ) ;
-FUNCTION: BOOL PeekMessageW ( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg ) ;
-: PeekMessage \ PeekMessageW \ PeekMessageA unicode-exec ;
-
-! FUNCTION: PostMessageA
-! FUNCTION: PostMessageW
-FUNCTION: void PostQuitMessage ( int nExitCode ) ;
-! FUNCTION: PostThreadMessageA
-! FUNCTION: PostThreadMessageW
-! FUNCTION: PrintWindow
-! FUNCTION: PrivateExtractIconExA
-! FUNCTION: PrivateExtractIconExW
-! FUNCTION: PrivateExtractIconsA
-! FUNCTION: PrivateExtractIconsW
-! FUNCTION: PrivateSetDbgTag
-! FUNCTION: PrivateSetRipFlags
-! FUNCTION: PtInRect
-! FUNCTION: QuerySendMessage
-! FUNCTION: QueryUserCounters
-! FUNCTION: RealChildWindowFromPoint
-! FUNCTION: RealGetWindowClass
-! FUNCTION: RealGetWindowClassA
-! FUNCTION: RealGetWindowClassW
-! FUNCTION: ReasonCodeNeedsBugID
-! FUNCTION: ReasonCodeNeedsComment
-! FUNCTION: RecordShutdownReason
-! FUNCTION: RedrawWindow
-
-FUNCTION: ATOM RegisterClassA ( WNDCLASS* lpWndClass) ;
-FUNCTION: ATOM RegisterClassW ( WNDCLASS* lpWndClass ) ;
-FUNCTION: ATOM RegisterClassExA ( WNDCLASSEX* lpwcx ) ;
-FUNCTION: ATOM RegisterClassExW ( WNDCLASSEX* lpwcx ) ;
-
-: RegisterClass \ RegisterClassW \ RegisterClassA unicode-exec ;
-: RegisterClassEx \ RegisterClassExW \ RegisterClassExA unicode-exec ;
-
-! FUNCTION: RegisterClipboardFormatA
-! FUNCTION: RegisterClipboardFormatW
-! FUNCTION: RegisterDeviceNotificationA
-! FUNCTION: RegisterDeviceNotificationW
-! FUNCTION: RegisterHotKey
-! FUNCTION: RegisterLogonProcess
-! FUNCTION: RegisterMessagePumpHook
-! FUNCTION: RegisterRawInputDevices
-! FUNCTION: RegisterServicesProcess
-! FUNCTION: RegisterShellHookWindow
-! FUNCTION: RegisterSystemThread
-! FUNCTION: RegisterTasklist
-! FUNCTION: RegisterUserApiHook
-! FUNCTION: RegisterWindowMessageA
-! FUNCTION: RegisterWindowMessageW
-! FUNCTION: ReleaseCapture
-FUNCTION: int ReleaseDC ( HWND hWnd, HDC hDC ) ;
-! FUNCTION: RemoveMenu
-! FUNCTION: RemovePropA
-! FUNCTION: RemovePropW
-! FUNCTION: ReplyMessage
-! FUNCTION: ResolveDesktopForWOW
-! FUNCTION: ReuseDDElParam
-! FUNCTION: ScreenToClient
-! FUNCTION: ScrollChildren
-! FUNCTION: ScrollDC
-! FUNCTION: ScrollWindow
-! FUNCTION: ScrollWindowEx
-! FUNCTION: SendDlgItemMessageA
-! FUNCTION: SendDlgItemMessageW
-! FUNCTION: SendIMEMessageExA
-! FUNCTION: SendIMEMessageExW
-! FUNCTION: UINT SendInput ( UINT nInputs, LPINPUT pInputs, int cbSize ) ;
-! FUNCTION: SendMessageA
-! FUNCTION: SendMessageCallbackA
-! FUNCTION: SendMessageCallbackW
-! FUNCTION: SendMessageTimeoutA
-! FUNCTION: SendMessageTimeoutW
-! FUNCTION: SendMessageW
-! FUNCTION: SendNotifyMessageA
-! FUNCTION: SendNotifyMessageW
-! FUNCTION: SetActiveWindow
-! FUNCTION: SetCapture
-! FUNCTION: SetCaretBlinkTime
-! FUNCTION: SetCaretPos
-
-FUNCTION: ULONG_PTR SetClassLongW ( HWND hWnd, int nIndex, LONG_PTR dwNewLong ) ;
-FUNCTION: ULONG_PTR SetClassLongA ( HWND hWnd, int nIndex, LONG_PTR dwNewLong ) ;
-: SetClassLongPtr \ SetClassLongW \ SetClassLongA unicode-exec ;
-: SetClassLong \ SetClassLongW \ SetClassLongA unicode-exec ;
-
-! FUNCTION: SetClassWord
-FUNCTION: HANDLE SetClipboardData ( UINT uFormat, HANDLE hMem ) ;
-! FUNCTION: SetClipboardViewer
-! FUNCTION: SetConsoleReserveKeys
-! FUNCTION: SetCursor
-! FUNCTION: SetCursorContents
-! FUNCTION: SetCursorPos
-! FUNCTION: SetDebugErrorLevel
-! FUNCTION: SetDeskWallpaper
-! FUNCTION: SetDlgItemInt
-! FUNCTION: SetDlgItemTextA
-! FUNCTION: SetDlgItemTextW
-! FUNCTION: SetDoubleClickTime
-FUNCTION: HWND SetFocus ( HWND hWnd ) ;
-FUNCTION: BOOL SetForegroundWindow ( HWND hWnd ) ;
-! FUNCTION: SetInternalWindowPos
-! FUNCTION: SetKeyboardState
-! type is ignored
-FUNCTION: void SetLastErrorEx ( DWORD dwErrCode, DWORD dwType ) ;
-: SetLastError 0 SetLastErrorEx ;
-! FUNCTION: SetLayeredWindowAttributes
-! FUNCTION: SetLogonNotifyWindow
-! FUNCTION: SetMenu
-! FUNCTION: SetMenuContextHelpId
-! FUNCTION: SetMenuDefaultItem
-! FUNCTION: SetMenuInfo
-! FUNCTION: SetMenuItemBitmaps
-! FUNCTION: SetMenuItemInfoA
-! FUNCTION: SetMenuItemInfoW
-! FUNCTION: SetMessageExtraInfo
-! FUNCTION: SetMessageQueue
-! FUNCTION: SetParent
-! FUNCTION: SetProcessDefaultLayout
-! FUNCTION: SetProcessWindowStation
-! FUNCTION: SetProgmanWindow
-! FUNCTION: SetPropA
-! FUNCTION: SetPropW
-! FUNCTION: SetRect
-! FUNCTION: SetRectEmpty
-! FUNCTION: SetScrollInfo
-! FUNCTION: SetScrollPos
-! FUNCTION: SetScrollRange
-! FUNCTION: SetShellWindow
-! FUNCTION: SetShellWindowEx
-! FUNCTION: SetSysColors
-! FUNCTION: SetSysColorsTemp
-! FUNCTION: SetSystemCursor
-! FUNCTION: SetSystemMenu
-! FUNCTION: SetSystemTimer
-! FUNCTION: SetTaskmanWindow
-! FUNCTION: SetThreadDesktop
-! FUNCTION: SetTimer
-! FUNCTION: SetUserObjectInformationA
-! FUNCTION: SetUserObjectInformationW
-! FUNCTION: SetUserObjectSecurity
-! FUNCTION: SetWindowContextHelpId
-! FUNCTION: SetWindowLongA
-! FUNCTION: SetWindowLongW
-! FUNCTION: SetWindowPlacement
-! FUNCTION: SetWindowPos
-! FUNCTION: SetWindowRgn
-! FUNCTION: SetWindowsHookA
-! FUNCTION: SetWindowsHookExA
-! FUNCTION: SetWindowsHookExW
-! FUNCTION: SetWindowsHookW
-! FUNCTION: SetWindowStationUser
-! FUNCTION: SetWindowTextA
-! FUNCTION: SetWindowTextW
-! FUNCTION: SetWindowWord
-! FUNCTION: SetWinEventHook
-! FUNCTION: ShowCaret
-! FUNCTION: ShowCursor
-! FUNCTION: ShowOwnedPopups
-! FUNCTION: ShowScrollBar
-! FUNCTION: ShowStartGlass
-
-FUNCTION: BOOL ShowWindow ( HWND hWnd, int nCmdShow ) ;
-
-! FUNCTION: ShowWindowAsync
-! FUNCTION: SoftModalMessageBox
-! FUNCTION: SubtractRect
-! FUNCTION: SwapMouseButton
-! FUNCTION: SwitchDesktop
-! FUNCTION: SwitchToThisWindow
-! FUNCTION: SystemParametersInfoA
-! FUNCTION: SystemParametersInfoW
-! FUNCTION: TabbedTextOutA
-! FUNCTION: TabbedTextOutW
-! FUNCTION: TileChildWindows
-! FUNCTION: TileWindows
-! FUNCTION: ToAscii
-! FUNCTION: ToAsciiEx
-! FUNCTION: ToUnicode
-! FUNCTION: ToUnicodeEx
-! FUNCTION: TrackMouseEvent
-! FUNCTION: TrackPopupMenu
-! FUNCTION: TrackPopupMenuEx
-! FUNCTION: TranslateAccelerator
-! FUNCTION: TranslateAcceleratorA
-! FUNCTION: TranslateAcceleratorW
-! FUNCTION: TranslateMDISysAccel
-FUNCTION: BOOL TranslateMessage ( MSG* lpMsg ) ;
-
-! FUNCTION: UnhookWindowsHook
-! FUNCTION: UnhookWindowsHookEx
-! FUNCTION: UnhookWinEvent
-! FUNCTION: UnionRect
-! FUNCTION: UnloadKeyboardLayout
-! FUNCTION: UnlockWindowStation
-! FUNCTION: UnpackDDElParam
-FUNCTION: BOOL UnregisterClassA ( LPCTSTR lpClassName, HINSTANCE hInstance ) ;
-FUNCTION: BOOL UnregisterClassW ( LPCWSTR lpClassName, HINSTANCE hInstance ) ;
-: UnregisterClass \ UnregisterClassW \ UnregisterClassA unicode-exec ;
-! FUNCTION: UnregisterDeviceNotification
-! FUNCTION: UnregisterHotKey
-! FUNCTION: UnregisterMessagePumpHook
-! FUNCTION: UnregisterUserApiHook
-! FUNCTION: UpdateLayeredWindow
-! FUNCTION: UpdatePerUserSystemParameters
-
-
-FUNCTION: BOOL UpdateWindow ( HWND hWnd ) ;
-
-! FUNCTION: User32InitializeImmEntryTable
-! FUNCTION: UserClientDllInitialize
-! FUNCTION: UserHandleGrantAccess
-! FUNCTION: UserLpkPSMTextOut
-! FUNCTION: UserLpkTabbedTextOut
-! FUNCTION: UserRealizePalette
-! FUNCTION: UserRegisterWowHandlers
-! FUNCTION: ValidateRect
-! FUNCTION: ValidateRgn
-! FUNCTION: VkKeyScanA
-! FUNCTION: VkKeyScanExA
-! FUNCTION: VkKeyScanExW
-! FUNCTION: VkKeyScanW
-! FUNCTION: VRipOutput
-! FUNCTION: VTagOutput
-! FUNCTION: WaitForInputIdle
-! FUNCTION: WaitMessage
-! FUNCTION: WCSToMBEx
-! FUNCTION: Win32PoolAllocationStats
-! FUNCTION: WindowFromDC
-! FUNCTION: WindowFromPoint
-! FUNCTION: WinHelpA
-! FUNCTION: WinHelpW
-! FUNCTION: WINNLSEnableIME
-! FUNCTION: WINNLSGetEnableStatus
-! FUNCTION: WINNLSGetIMEHotkey
-! FUNCTION: wsprintfA
-! FUNCTION: wsprintfW
-! FUNCTION: wvsprintfA
-! FUNCTION: wvsprintfW
-
+++ /dev/null
-USING: alien parser namespaces kernel syntax words math io prettyprint ;
-IN: win32-api
-
-: win32-error=0 zero? [ win32-error ] when ;
-: win32-error>0 0 > [ win32-error ] when ;
-: win32-error<0 0 < [ win32-error ] when ;
-: win32-error<>0 zero? [ win32-error ] unless ;
-
-: lo-word ( wparam -- lo ) HEX: ffff bitand ;
-: hi-word ( wparam -- hi ) -16 shift ;
-
-: msgbox ( str -- )
- f swap "DebugMsg" MB_OK MessageBox drop ;
-
+++ /dev/null
-! :folding=indent:collapseFolds=1:
-
-! $Id: win32-errors.factor,v 1.11 2005/12/22 02:30:00 erg Exp $
-!
-! Copyright (C) 2004 Mackenzie Straight.
-!
-! Redistribution and use in source and binary forms, with or without
-! modification, are permitted provided that the following conditions are met:
-!
-! 1. Redistributions of source code must retain the above copyright notice,
-! this list of conditions and the following disclaimer.
-!
-! 2. Redistributions in binary form must reproduce the above copyright notice,
-! this list of conditions and the following disclaimer in the documentation
-! and/or other materials provided with the distribution.
-!
-! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-IN: win32-api
-USE: errors
-USE: kernel
-USE: io-internals
-USE: lists
-USE: math
-USE: parser
-USE: alien
-USE: words
-USE: sequences
-
-: CONSTANT: CREATE
- [ [ [ parsed ] each ] cons define-compound POSTPONE: parsing ]
- [ ] ; parsing
-
-CONSTANT: ERROR_SUCCESS 0 ;
-CONSTANT: ERROR_HANDLE_EOF 38 ;
-CONSTANT: ERROR_IO_PENDING 997 ;
-CONSTANT: WAIT_TIMEOUT 258 ;
-
-: FORMAT_MESSAGE_ALLOCATE_BUFFER HEX: 00000100 ;
-: FORMAT_MESSAGE_IGNORE_INSERTS HEX: 00000200 ;
-: FORMAT_MESSAGE_FROM_STRING HEX: 00000400 ;
-: FORMAT_MESSAGE_FROM_HMODULE HEX: 00000800 ;
-: FORMAT_MESSAGE_FROM_SYSTEM HEX: 00001000 ;
-: FORMAT_MESSAGE_ARGUMENT_ARRAY HEX: 00002000 ;
-: FORMAT_MESSAGE_MAX_WIDTH_MASK HEX: 000000FF ;
-
-: MAKELANGID ( primary sub -- lang )
- 10 shift bitor ;
-
-: LANG_NEUTRAL 0 ;
-: SUBLANG_DEFAULT 1 ;
-
-: GetLastError ( -- int )
- "int" "kernel32" "GetLastError" [ ] alien-invoke ;
-
-: win32-error-message ( id -- string )
- "char*" f "error_message" [ "int" ] alien-invoke ;
-
-: win32-throw-error ( -- )
- GetLastError win32-error-message throw ;
-
+++ /dev/null
-! $Id: win32-io-internals.factor,v 1.15 2006/01/28 20:49:31 spestov Exp $
-!
-! Copyright (C) 2004, 2005 Mackenzie Straight.
-!
-! Redistribution and use in source and binary forms, with or without
-! modification, are permitted provided that the following conditions are met:
-!
-! 1. Redistributions of source code must retain the above copyright notice,
-! this list of conditions and the following disclaimer.
-!
-! 2. Redistributions in binary form must reproduce the above copyright notice,
-! this list of conditions and the following disclaimer in the documentation
-! and/or other materials provided with the distribution.
-!
-! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-IN: win32-io-internals
-USING: alien errors kernel kernel-internals lists math namespaces threads
- vectors win32-api io generic io-internals sequences ;
-
-SYMBOL: completion-port
-SYMBOL: io-queue
-
-TUPLE: io-queue free-list callbacks ;
-TUPLE: io-callback overlapped quotation stream ;
-
-GENERIC: expire
-
-: expected-error? ( -- bool )
- [
- ERROR_IO_PENDING ERROR_HANDLE_EOF ERROR_SUCCESS WAIT_TIMEOUT
- ] member? ;
-
-: handle-io-error ( -- )
- GetLastError expected-error? [ win32-throw-error ] unless ;
-
-: queue-error ( len/status -- len/status )
- GetLastError expected-error? [ drop f ] unless ;
-
-: add-completion ( handle -- )
- completion-port get f 1 CreateIoCompletionPort drop ;
-
-: get-access ( -- file-mode )
- "file-mode" get uncons
- GENERIC_WRITE 0 ? >r
- GENERIC_READ 0 ? r> bitor ;
-
-: get-sharemode ( -- share-mode )
- FILE_SHARE_READ FILE_SHARE_WRITE bitor ;
-
-: get-create ( -- creation-disposition )
- "file-mode" get uncons [
- [ OPEN_ALWAYS ] [ CREATE_ALWAYS ] if
- ] [
- [ OPEN_EXISTING ] [ 0 ] if
- ] if ;
-
-: win32-open-file ( file r w -- handle )
- [
- cons "file-mode" set
- get-access get-sharemode f get-create FILE_FLAG_OVERLAPPED f
- CreateFile dup INVALID_HANDLE_VALUE = [ win32-throw-error ] when
- dup add-completion
- ] with-scope ;
-
-: <overlapped> ( -- overlapped )
- "overlapped-ext" <malloc-object> ;
-
-C: io-queue ( -- queue )
- V{ } clone over set-io-queue-callbacks ;
-
-C: io-callback ( -- callback )
- io-queue get io-queue-callbacks [ push ] 2keep
- length 1 - <overlapped> [ set-overlapped-ext-user-data ] keep
- swap [ set-io-callback-overlapped ] keep ;
-
-: alloc-io-callback ( quot stream -- overlapped )
- io-queue get io-queue-free-list [
- uncons io-queue get [ set-io-queue-free-list ] keep
- io-queue-callbacks nth
- ] [ <io-callback> ] if*
- [ set-io-callback-stream ] keep
- [ set-io-callback-quotation ] keep
- io-callback-overlapped ;
-
-: get-io-callback ( index -- callback )
- dup io-queue get io-queue-callbacks nth swap
- io-queue get [ io-queue-free-list cons ] keep set-io-queue-free-list
- [ f swap set-io-callback-stream ] keep
- io-callback-quotation ;
-
-: (wait-for-io) ( timeout -- error overlapped len )
- >r completion-port get 0 <int> 0 <int> 0 <int>
- pick over r> -rot >r >r GetQueuedCompletionStatus r> r> ;
-
-: overlapped>callback ( overlapped -- callback )
- *int dup zero? [
- drop f
- ] [
- <alien> overlapped-ext-user-data get-io-callback
- ] if ;
-
-: cancel-timedout ( -- )
- io-queue get
- io-queue-callbacks [ io-callback-stream [ expire ] when* ] each ;
-
-: wait-for-io ( timeout -- callback len )
- (wait-for-io) overlapped>callback swap *int
- rot [ queue-error ] unless ;
-
-: win32-init-io ( -- )
- stdio off
- INVALID_HANDLE_VALUE f f 1 CreateIoCompletionPort
- completion-port set
- <io-queue> io-queue set ;
-
+++ /dev/null
-! :folding=indent:collapseFolds=1:
-
-! $Id: win32-io.factor,v 1.4 2005/07/23 06:11:07 eiz Exp $
-!
-! Copyright (C) 2004 Mackenzie Straight.
-!
-! Redistribution and use in source and binary forms, with or without
-! modification, are permitted provided that the following conditions are met:
-!
-! 1. Redistributions of source code must retain the above copyright notice,
-! this list of conditions and the following disclaimer.
-!
-! 2. Redistributions in binary form must reproduce the above copyright notice,
-! this list of conditions and the following disclaimer in the documentation
-! and/or other materials provided with the distribution.
-!
-! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-IN: win32-api
-USE: kernel
-USE: alien
-
-BEGIN-STRUCT: overlapped-ext
- FIELD: int internal
- FIELD: int internal-high
- FIELD: int offset
- FIELD: int offset-high
- FIELD: void* event
- FIELD: int user-data
-END-STRUCT
-
-: GENERIC_READ HEX: 80000000 ;
-: GENERIC_WRITE HEX: 40000000 ;
-: GENERIC_EXECUTE HEX: 20000000 ;
-: GENERIC_ALL HEX: 10000000 ;
-
-: CREATE_NEW 1 ;
-: CREATE_ALWAYS 2 ;
-: OPEN_EXISTING 3 ;
-: OPEN_ALWAYS 4 ;
-: TRUNCATE_EXISTING 5 ;
-
-: FILE_SHARE_READ 1 ;
-: FILE_SHARE_WRITE 2 ;
-: FILE_SHARE_DELETE 4 ;
-
-: FILE_FLAG_WRITE_THROUGH HEX: 80000000 ;
-: FILE_FLAG_OVERLAPPED HEX: 40000000 ;
-: FILE_FLAG_NO_BUFFERING HEX: 20000000 ;
-: FILE_FLAG_RANDOM_ACCESS HEX: 10000000 ;
-: FILE_FLAG_SEQUENTIAL_SCAN HEX: 08000000 ;
-: FILE_FLAG_DELETE_ON_CLOSE HEX: 04000000 ;
-: FILE_FLAG_BACKUP_SEMANTICS HEX: 02000000 ;
-: FILE_FLAG_POSIX_SEMANTICS HEX: 01000000 ;
-: FILE_FLAG_OPEN_REPARSE_POINT HEX: 00200000 ;
-: FILE_FLAG_OPEN_NO_RECALL HEX: 00100000 ;
-: FILE_FLAG_FIRST_PIPE_INSTANCE HEX: 00080000 ;
-
-: STD_INPUT_HANDLE -10 ;
-: STD_OUTPUT_HANDLE -11 ;
-: STD_ERROR_HANDLE -12 ;
-
-: INVALID_HANDLE_VALUE -1 <alien> ;
-: INVALID_FILE_SIZE HEX: FFFFFFFF ;
-
-: INFINITE HEX: FFFFFFFF ;
-
-: GetStdHandle ( id -- handle )
- "void*" "kernel32" "GetStdHandle" [ "int" ] alien-invoke ;
-
-: GetFileSize ( handle out -- int )
- "int" "kernel32" "GetFileSize" [ "void*" "void*" ] alien-invoke ;
-
-: SetConsoleTextAttribute ( handle attrs -- ? )
- "bool" "kernel32" "SetConsoleTextAttribute" [ "void*" "int" ]
- alien-invoke ;
-
-: GetConsoleTitle ( buf size -- len )
- "int" "kernel32" "GetConsoleTitleA" [ "int" "int" ] alien-invoke ;
-
-: SetConsoleTitle ( str -- ? )
- "bool" "kernel32" "SetConsoleTitleA" [ "char*" ] alien-invoke ;
-
-: ReadFile ( handle buffer len out-len overlapped -- ? )
- "bool" "kernel32" "ReadFile"
- [ "void*" "int" "int" "void*" "overlapped-ext*" ]
- alien-invoke ;
-
-: WriteFile ( handle buffer len out-len overlapped -- ? )
- "bool" "kernel32" "WriteFile"
- [ "void*" "int" "int" "void*" "overlapped-ext*" ]
- alien-invoke ;
-
-: CreateIoCompletionPort ( handle existing-port key numthreads -- )
- "void*" "kernel32" "CreateIoCompletionPort"
- [ "void*" "void*" "void*" "int" ]
- alien-invoke ;
-
-: GetQueuedCompletionStatus
- ( port out-len out-key out-overlapped timeout -- ? )
- "bool" "kernel32" "GetQueuedCompletionStatus"
- [ "void*" "void*" "void*" "void*" "int" ]
- alien-invoke ;
-
-: CreateFile ( name access sharemode security create flags template -- handle )
- "void*" "kernel32" "CreateFileA"
- [ "char*" "int" "int" "void*" "int" "int" "void*" ]
- alien-invoke ;
-
-: CloseHandle ( handle -- ? )
- "bool" "kernel32" "CloseHandle" [ "void*" ] alien-invoke ;
-
-: CancelIo ( handle -- )
- "bool" "kernel32" "CancelIo" [ "void*" ] alien-invoke drop ;
-
+++ /dev/null
-! $Id: win32-server.factor,v 1.13 2006/01/28 20:49:31 spestov Exp $
-!
-! Copyright (C) 2004, 2005 Mackenzie Straight.
-!
-! Redistribution and use in source and binary forms, with or without
-! modification, are permitted provided that the following conditions are met:
-!
-! 1. Redistributions of source code must retain the above copyright notice,
-! this list of conditions and the following disclaimer.
-!
-! 2. Redistributions in binary form must reproduce the above copyright notice,
-! this list of conditions and the following disclaimer in the documentation
-! and/or other materials provided with the distribution.
-!
-! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-IN: win32-stream
-USING: alien errors generic kernel kernel-internals lists math namespaces
- prettyprint sequences io strings threads win32-api
- win32-io-internals io-internals ;
-
-TUPLE: win32-server this ;
-TUPLE: win32-client-stream host port ;
-SYMBOL: winsock
-SYMBOL: socket
-
-: maybe-init-winsock ( -- )
- winsock get [
- HEX: 0202 <wsadata> WSAStartup drop winsock on
- ] unless ;
-
-: handle-socket-error ( -- )
- WSAGetLastError [
- ERROR_IO_PENDING ERROR_SUCCESS
- ] member? [
- WSAGetLastError win32-error-message throw
- ] unless ;
-
-: new-socket ( -- socket )
- AF_INET SOCK_STREAM 0 f f WSA_FLAG_OVERLAPPED WSASocket ;
-
-: setup-sockaddr ( port -- sockaddr )
- "sockaddr-in" <c-object> swap
- htons over set-sockaddr-in-port
- INADDR_ANY over set-sockaddr-in-addr
- AF_INET over set-sockaddr-in-family ;
-
-: bind-socket ( port socket -- )
- swap setup-sockaddr "sockaddr-in" c-size wsa-bind zero? [
- handle-socket-error
- ] unless ;
-
-: listen-socket ( socket -- )
- 20 wsa-listen zero? [ handle-socket-error ] unless ;
-
-: sockaddr> ( sockaddr -- port host )
- dup sockaddr-in-port ntohs swap sockaddr-in-addr inet-ntoa ;
-
-: extract-remote-host ( buffer -- port host )
- buffer-ptr <alien> 0 32 32 0 <int>
- 0 <int>
- 0 <int>
- dup >r 0 <int>
- GetAcceptExSockaddrs r> *int <alien> sockaddr> ;
-
-C: win32-client-stream ( buf stream -- stream )
- [ set-delegate extract-remote-host ] keep
- [ set-win32-client-stream-host ] keep
- [ set-win32-client-stream-port ] keep ;
-
-M: win32-client-stream client-stream-host win32-client-stream-host ;
-M: win32-client-stream client-stream-port win32-client-stream-port ;
-
-C: win32-server ( port -- server )
- swap [
- maybe-init-winsock new-socket swap over bind-socket dup listen-socket
- dup add-completion
- socket set
- dup stream set
- ] make-hash over set-win32-server-this ;
-
-M: win32-server stream-close ( server -- )
- win32-server-this [ socket get CloseHandle drop ] bind ;
-
-M: win32-server set-timeout ( timeout server -- )
- win32-server-this [ timeout set ] bind ;
-
-M: win32-server expire ( -- )
- win32-server-this [
- timeout get [ millis cutoff get > [ socket get CancelIo ] when ] when
- ] bind ;
-
-: client-sockaddr ( host port -- sockaddr )
- setup-sockaddr [
- >r gethostbyname handle-socket-error hostent-addr
- r> set-sockaddr-in-addr
- ] keep ;
-
-IN: io
-: accept ( server -- client )
- win32-server-this [
- update-timeout new-socket 64 <buffer>
- [
- stream get alloc-io-callback init-overlapped
- >r >r >r socket get r> r>
- buffer-ptr <alien> 0 32 32 f r> AcceptEx
- [ handle-socket-error ] unless stop
- ] callcc1 pending-error drop
- swap dup add-completion <win32-stream> <line-reader>
- dupd <win32-client-stream> swap buffer-free
- ] bind ;
-
-: <client> ( host port -- stream )
- maybe-init-winsock client-sockaddr new-socket
- [ swap "sockaddr-in" c-size connect drop handle-socket-error ] keep
- dup add-completion <win32-stream> <line-reader> ;
-
+++ /dev/null
-! $Id: win32-stream.factor,v 1.16 2006/01/28 20:49:31 spestov Exp $
-!
-! Copyright (C) 2004, 2005 Mackenzie Straight.
-!
-! Redistribution and use in source and binary forms, with or without
-! modification, are permitted provided that the following conditions are met:
-!
-! 1. Redistributions of source code must retain the above copyright notice,
-! this list of conditions and the following disclaimer.
-!
-! 2. Redistributions in binary form must reproduce the above copyright notice,
-! this list of conditions and the following disclaimer in the documentation
-! and/or other materials provided with the distribution.
-!
-! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-IN: win32-stream
-USING: alien generic io-internals kernel
-kernel-internals lists math namespaces prettyprint sequences
-io strings threads win32-api win32-io-internals ;
-
-TUPLE: win32-stream this ; ! FIXME: rewrite using tuples
-GENERIC: win32-stream-handle
-GENERIC: do-write
-
-SYMBOL: handle
-SYMBOL: in-buffer
-SYMBOL: out-buffer
-SYMBOL: fileptr
-SYMBOL: file-size
-SYMBOL: stream
-SYMBOL: timeout
-SYMBOL: cutoff
-
-: pending-error ( len/status -- len/status )
- dup [ win32-throw-error ] unless ;
-
-: init-overlapped ( overlapped -- overlapped )
- 0 over set-overlapped-ext-internal
- 0 over set-overlapped-ext-internal-high
- fileptr get dup 0 ? over set-overlapped-ext-offset
- 0 over set-overlapped-ext-offset-high
- f over set-overlapped-ext-event ;
-
-: update-file-pointer ( whence -- )
- file-size get [ fileptr [ + ] change ] [ drop ] if ;
-
-: update-timeout ( -- )
- timeout get [ millis + cutoff set ] when* ;
-
-: flush-output ( -- )
- update-timeout [
- stream get alloc-io-callback init-overlapped >r
- handle get out-buffer get [ buffer@ ] keep buffer-length
- f r> WriteFile [ handle-io-error ] unless stop
- ] callcc1 pending-error
-
- dup update-file-pointer
- out-buffer get [ buffer-consume ] keep
- buffer-length 0 > [ flush-output ] when ;
-
-: maybe-flush-output ( -- )
- out-buffer get buffer-length 0 > [ flush-output ] when ;
-
-M: integer do-write ( int -- )
- out-buffer get [ buffer-capacity zero? [ flush-output ] when ] keep
- >r ch>string r> >buffer ;
-
-M: string do-write ( str -- )
- dup length out-buffer get buffer-capacity <= [
- out-buffer get >buffer
- ] [
- dup length out-buffer get buffer-size > [
- dup length out-buffer get extend-buffer do-write
- ] [ flush-output do-write ] if
- ] if ;
-
-: fill-input ( -- )
- update-timeout [
- stream get alloc-io-callback init-overlapped >r
- handle get in-buffer get [ buffer@ ] keep
- buffer-capacity file-size get [ fileptr get - min ] when*
- f r>
- ReadFile [ handle-io-error ] unless stop
- ] callcc1 pending-error
-
- dup in-buffer get n>buffer update-file-pointer ;
-
-: consume-input ( count -- str )
- in-buffer get buffer-length zero? [ fill-input ] when
- in-buffer get buffer-size min
- dup in-buffer get buffer-first-n
- swap in-buffer get buffer-consume ;
-
-: >string-or-f ( sbuf -- str-or-? )
- dup length 0 > [ >string ] [ drop f ] if ;
-
-: do-read-count ( sbuf count -- str )
- dup zero? [
- drop >string
- ] [
- dup consume-input
- dup length dup zero? [
- 3drop >string-or-f
- ] [
- >r swap r> - >r swap [ swap nappend ] keep r> do-read-count
- ] if
- ] if ;
-
-: peek-input ( -- str )
- 1 in-buffer get buffer-first-n ;
-
-M: win32-stream stream-write ( str stream -- )
- win32-stream-this [ do-write ] bind ;
-
-M: win32-stream stream-write1 ( char stream -- )
- win32-stream-this [ >fixnum do-write ] bind ;
-
-M: win32-stream stream-read ( count stream -- str )
- win32-stream-this [ dup <sbuf> swap do-read-count ] bind ;
-
-M: win32-stream stream-read1 ( stream -- str )
- win32-stream-this [
- 1 consume-input dup length zero? [ drop f ] when first
- ] bind ;
-
-M: win32-stream stream-readln ( stream -- str )
- win32-stream-this [ readln ] bind ;
-
-M: win32-stream stream-terpri
- win32-stream-this [ CHAR: \n do-write ] bind ;
-
-M: win32-stream stream-flush ( stream -- )
- win32-stream-this [ maybe-flush-output ] bind ;
-
-M: win32-stream stream-close ( stream -- )
- win32-stream-this [
- maybe-flush-output
- handle get CloseHandle drop
- in-buffer get buffer-free
- out-buffer get buffer-free
- ] bind ;
-
-M: win32-stream stream-format ( string style stream -- )
- win32-stream-this [ drop do-write ] bind ;
-
-M: win32-stream win32-stream-handle ( stream -- handle )
- win32-stream-this [ handle get ] bind ;
-
-M: win32-stream set-timeout ( timeout stream -- )
- win32-stream-this [ timeout set ] bind ;
-
-M: win32-stream expire ( stream -- )
- win32-stream-this [
- timeout get [ millis cutoff get > [ handle get CancelIo ] when ] when
- ] bind ;
-
-M: win32-stream with-nested-stream ( quot style stream -- )
- win32-stream-this [ drop stream get swap with-stream* ] bind ;
-
-C: win32-stream ( handle -- stream )
- swap [
- dup f GetFileSize dup -1 = not [
- file-size set
- ] [ drop f file-size set ] if
- handle set
- 4096 <buffer> in-buffer set
- 4096 <buffer> out-buffer set
- 0 fileptr set
- dup stream set
- ] make-hash over set-win32-stream-this ;
-
-: <win32-file-reader> ( path -- stream )
- t f win32-open-file <win32-stream> <line-reader> ;
-
-: <win32-file-writer> ( path -- stream )
- f t win32-open-file <win32-stream> ;
-
+++ /dev/null
-USING: hashtables kernel math namespaces parser prettyprint words ;
-IN: win32-api-messages
-
-SYMBOL: windows-messages
-
-USE: inspector
-
-: maybe-create-windows-messages
- windows-messages get hashtable?
- [ H{ } clone global [ windows-messages set ] bind ] unless ;
-
-: add-windows-message ( -- )
- word [ unparse ] keep execute maybe-create-windows-messages
- windows-messages get set-hash ; parsing
-
-: get-windows-message-name ( n -- name )
- windows-messages get hash* [ drop "unknown message" ] unless ;
-
-: WM_NULL HEX: 0000 ; inline add-windows-message
-: WM_CREATE HEX: 0001 ; inline add-windows-message
-: WM_DESTROY HEX: 0002 ; inline add-windows-message
-: WM_MOVE HEX: 0003 ; inline add-windows-message
-: WM_SIZE HEX: 0005 ; inline add-windows-message
-: WM_ACTIVATE HEX: 0006 ; inline add-windows-message
-: WM_SETFOCUS HEX: 0007 ; inline add-windows-message
-: WM_KILLFOCUS HEX: 0008 ; inline add-windows-message
-: WM_ENABLE HEX: 000A ; inline add-windows-message
-: WM_SETREDRAW HEX: 000B ; inline add-windows-message
-: WM_SETTEXT HEX: 000C ; inline add-windows-message
-: WM_GETTEXT HEX: 000D ; inline add-windows-message
-: WM_GETTEXTLENGTH HEX: 000E ; inline add-windows-message
-: WM_PAINT HEX: 000F ; inline add-windows-message
-: WM_CLOSE HEX: 0010 ; inline add-windows-message
-: WM_QUERYENDSESSION HEX: 0011 ; inline add-windows-message
-: WM_QUERYOPEN HEX: 0013 ; inline add-windows-message
-: WM_ENDSESSION HEX: 0016 ; inline add-windows-message
-: WM_QUIT HEX: 0012 ; inline add-windows-message
-: WM_ERASEBKGND HEX: 0014 ; inline add-windows-message
-: WM_SYSCOLORCHANGE HEX: 0015 ; inline add-windows-message
-: WM_SHOWWINDOW HEX: 0018 ; inline add-windows-message
-: WM_WININICHANGE HEX: 001A ; inline add-windows-message
-: WM_SETTINGCHANGE HEX: 001A ; inline add-windows-message
-: WM_DEVMODECHANGE HEX: 001B ; inline add-windows-message
-: WM_ACTIVATEAPP HEX: 001C ; inline add-windows-message
-: WM_FONTCHANGE HEX: 001D ; inline add-windows-message
-: WM_TIMECHANGE HEX: 001E ; inline add-windows-message
-: WM_CANCELMODE HEX: 001F ; inline add-windows-message
-: WM_SETCURSOR HEX: 0020 ; inline add-windows-message
-: WM_MOUSEACTIVATE HEX: 0021 ; inline add-windows-message
-: WM_CHILDACTIVATE HEX: 0022 ; inline add-windows-message
-: WM_QUEUESYNC HEX: 0023 ; inline add-windows-message
-: WM_GETMINMAXINFO HEX: 0024 ; inline add-windows-message
-: WM_PAINTICON HEX: 0026 ; inline add-windows-message
-: WM_ICONERASEBKGND HEX: 0027 ; inline add-windows-message
-: WM_NEXTDLGCTL HEX: 0028 ; inline add-windows-message
-: WM_SPOOLERSTATUS HEX: 002A ; inline add-windows-message
-: WM_DRAWITEM HEX: 002B ; inline add-windows-message
-: WM_MEASUREITEM HEX: 002C ; inline add-windows-message
-: WM_DELETEITEM HEX: 002D ; inline add-windows-message
-: WM_VKEYTOITEM HEX: 002E ; inline add-windows-message
-: WM_CHARTOITEM HEX: 002F ; inline add-windows-message
-: WM_SETFONT HEX: 0030 ; inline add-windows-message
-: WM_GETFONT HEX: 0031 ; inline add-windows-message
-: WM_SETHOTKEY HEX: 0032 ; inline add-windows-message
-: WM_GETHOTKEY HEX: 0033 ; inline add-windows-message
-: WM_QUERYDRAGICON HEX: 0037 ; inline add-windows-message
-: WM_COMPAREITEM HEX: 0039 ; inline add-windows-message
-: WM_GETOBJECT HEX: 003D ; inline add-windows-message
-: WM_COMPACTING HEX: 0041 ; inline add-windows-message
-: WM_COMMNOTIFY HEX: 0044 ; inline add-windows-message
-: WM_WINDOWPOSCHANGING HEX: 0046 ; inline add-windows-message
-: WM_WINDOWPOSCHANGED HEX: 0047 ; inline add-windows-message
-: WM_POWER HEX: 0048 ; inline add-windows-message
-: WM_COPYDATA HEX: 004A ; inline add-windows-message
-: WM_CANCELJOURNAL HEX: 004B ; inline add-windows-message
-: WM_NOTIFY HEX: 004E ; inline add-windows-message
-: WM_INPUTLANGCHANGEREQUEST HEX: 0050 ; inline add-windows-message
-: WM_INPUTLANGCHANGE HEX: 0051 ; inline add-windows-message
-: WM_TCARD HEX: 0052 ; inline add-windows-message
-: WM_HELP HEX: 0053 ; inline add-windows-message
-: WM_USERCHANGED HEX: 0054 ; inline add-windows-message
-: WM_NOTIFYFORMAT HEX: 0055 ; inline add-windows-message
-: WM_CONTEXTMENU HEX: 007B ; inline add-windows-message
-: WM_STYLECHANGING HEX: 007C ; inline add-windows-message
-: WM_STYLECHANGED HEX: 007D ; inline add-windows-message
-: WM_DISPLAYCHANGE HEX: 007E ; inline add-windows-message
-: WM_GETICON HEX: 007F ; inline add-windows-message
-: WM_SETICON HEX: 0080 ; inline add-windows-message
-: WM_NCCREATE HEX: 0081 ; inline add-windows-message
-: WM_NCDESTROY HEX: 0082 ; inline add-windows-message
-: WM_NCCALCSIZE HEX: 0083 ; inline add-windows-message
-: WM_NCHITTEST HEX: 0084 ; inline add-windows-message
-: WM_NCPAINT HEX: 0085 ; inline add-windows-message
-: WM_NCACTIVATE HEX: 0086 ; inline add-windows-message
-: WM_GETDLGCODE HEX: 0087 ; inline add-windows-message
-: WM_SYNCPAINT HEX: 0088 ; inline add-windows-message
-: WM_NCMOUSEMOVE HEX: 00A0 ; inline add-windows-message
-: WM_NCLBUTTONDOWN HEX: 00A1 ; inline add-windows-message
-: WM_NCLBUTTONUP HEX: 00A2 ; inline add-windows-message
-: WM_NCLBUTTONDBLCLK HEX: 00A3 ; inline add-windows-message
-: WM_NCRBUTTONDOWN HEX: 00A4 ; inline add-windows-message
-: WM_NCRBUTTONUP HEX: 00A5 ; inline add-windows-message
-: WM_NCRBUTTONDBLCLK HEX: 00A6 ; inline add-windows-message
-: WM_NCMBUTTONDOWN HEX: 00A7 ; inline add-windows-message
-: WM_NCMBUTTONUP HEX: 00A8 ; inline add-windows-message
-: WM_NCMBUTTONDBLCLK HEX: 00A9 ; inline add-windows-message
-: WM_NCXBUTTONDOWN HEX: 00AB ; inline add-windows-message
-: WM_NCXBUTTONUP HEX: 00AC ; inline add-windows-message
-: WM_NCXBUTTONDBLCLK HEX: 00AD ; inline add-windows-message
-: WM_INPUT HEX: 00FF ; inline add-windows-message
-: WM_KEYFIRST HEX: 0100 ; inline add-windows-message
-: WM_KEYDOWN HEX: 0100 ; inline add-windows-message
-: WM_KEYUP HEX: 0101 ; inline add-windows-message
-: WM_CHAR HEX: 0102 ; inline add-windows-message
-: WM_DEADCHAR HEX: 0103 ; inline add-windows-message
-: WM_SYSKEYDOWN HEX: 0104 ; inline add-windows-message
-: WM_SYSKEYUP HEX: 0105 ; inline add-windows-message
-: WM_SYSCHAR HEX: 0106 ; inline add-windows-message
-: WM_SYSDEADCHAR HEX: 0107 ; inline add-windows-message
-: WM_UNICHAR HEX: 0109 ; inline add-windows-message
-: WM_KEYLAST_NT501 HEX: 0109 ; inline add-windows-message
-: UNICODE_NOCHAR HEX: FFFF ; inline add-windows-message
-: WM_KEYLAST_PRE501 HEX: 0108 ; inline add-windows-message
-: WM_IME_STARTCOMPOSITION HEX: 010D ; inline add-windows-message
-: WM_IME_ENDCOMPOSITION HEX: 010E ; inline add-windows-message
-: WM_IME_COMPOSITION HEX: 010F ; inline add-windows-message
-: WM_IME_KEYLAST HEX: 010F ; inline add-windows-message
-: WM_INITDIALOG HEX: 0110 ; inline add-windows-message
-: WM_COMMAND HEX: 0111 ; inline add-windows-message
-: WM_SYSCOMMAND HEX: 0112 ; inline add-windows-message
-: WM_TIMER HEX: 0113 ; inline add-windows-message
-: WM_HSCROLL HEX: 0114 ; inline add-windows-message
-: WM_VSCROLL HEX: 0115 ; inline add-windows-message
-: WM_INITMENU HEX: 0116 ; inline add-windows-message
-: WM_INITMENUPOPUP HEX: 0117 ; inline add-windows-message
-: WM_MENUSELECT HEX: 011F ; inline add-windows-message
-: WM_MENUCHAR HEX: 0120 ; inline add-windows-message
-: WM_ENTERIDLE HEX: 0121 ; inline add-windows-message
-: WM_MENURBUTTONUP HEX: 0122 ; inline add-windows-message
-: WM_MENUDRAG HEX: 0123 ; inline add-windows-message
-: WM_MENUGETOBJECT HEX: 0124 ; inline add-windows-message
-: WM_UNINITMENUPOPUP HEX: 0125 ; inline add-windows-message
-: WM_MENUCOMMAND HEX: 0126 ; inline add-windows-message
-: WM_CHANGEUISTATE HEX: 0127 ; inline add-windows-message
-: WM_UPDATEUISTATE HEX: 0128 ; inline add-windows-message
-: WM_QUERYUISTATE HEX: 0129 ; inline add-windows-message
-: WM_CTLCOLORMSGBOX HEX: 0132 ; inline add-windows-message
-: WM_CTLCOLOREDIT HEX: 0133 ; inline add-windows-message
-: WM_CTLCOLORLISTBOX HEX: 0134 ; inline add-windows-message
-: WM_CTLCOLORBTN HEX: 0135 ; inline add-windows-message
-: WM_CTLCOLORDLG HEX: 0136 ; inline add-windows-message
-: WM_CTLCOLORSCROLLBAR HEX: 0137 ; inline add-windows-message
-: WM_CTLCOLORSTATIC HEX: 0138 ; inline add-windows-message
-: WM_MOUSEFIRST HEX: 0200 ; inline add-windows-message
-: WM_MOUSEMOVE HEX: 0200 ; inline add-windows-message
-: WM_LBUTTONDOWN HEX: 0201 ; inline add-windows-message
-: WM_LBUTTONUP HEX: 0202 ; inline add-windows-message
-: WM_LBUTTONDBLCLK HEX: 0203 ; inline add-windows-message
-: WM_RBUTTONDOWN HEX: 0204 ; inline add-windows-message
-: WM_RBUTTONUP HEX: 0205 ; inline add-windows-message
-: WM_RBUTTONDBLCLK HEX: 0206 ; inline add-windows-message
-: WM_MBUTTONDOWN HEX: 0207 ; inline add-windows-message
-: WM_MBUTTONUP HEX: 0208 ; inline add-windows-message
-: WM_MBUTTONDBLCLK HEX: 0209 ; inline add-windows-message
-: WM_MOUSEWHEEL HEX: 020A ; inline add-windows-message
-: WM_XBUTTONDOWN HEX: 020B ; inline add-windows-message
-: WM_XBUTTONUP HEX: 020C ; inline add-windows-message
-: WM_XBUTTONDBLCLK HEX: 020D ; inline add-windows-message
-: WM_MOUSELAST_5 HEX: 020D ; inline add-windows-message
-: WM_MOUSELAST_4 HEX: 020A ; inline add-windows-message
-: WM_MOUSELAST_PRE_4 HEX: 0209 ; inline add-windows-message
-: WM_PARENTNOTIFY HEX: 0210 ; inline add-windows-message
-: WM_ENTERMENULOOP HEX: 0211 ; inline add-windows-message
-: WM_EXITMENULOOP HEX: 0212 ; inline add-windows-message
-: WM_NEXTMENU HEX: 0213 ; inline add-windows-message
-: WM_SIZING HEX: 0214 ; inline add-windows-message
-: WM_CAPTURECHANGED HEX: 0215 ; inline add-windows-message
-: WM_MOVING HEX: 0216 ; inline add-windows-message
-: WM_POWERBROADCAST HEX: 0218 ; inline add-windows-message
-: WM_DEVICECHANGE HEX: 0219 ; inline add-windows-message
-: WM_MDICREATE HEX: 0220 ; inline add-windows-message
-: WM_MDIDESTROY HEX: 0221 ; inline add-windows-message
-: WM_MDIACTIVATE HEX: 0222 ; inline add-windows-message
-: WM_MDIRESTORE HEX: 0223 ; inline add-windows-message
-: WM_MDINEXT HEX: 0224 ; inline add-windows-message
-: WM_MDIMAXIMIZE HEX: 0225 ; inline add-windows-message
-: WM_MDITILE HEX: 0226 ; inline add-windows-message
-: WM_MDICASCADE HEX: 0227 ; inline add-windows-message
-: WM_MDIICONARRANGE HEX: 0228 ; inline add-windows-message
-: WM_MDIGETACTIVE HEX: 0229 ; inline add-windows-message
-: WM_MDISETMENU HEX: 0230 ; inline add-windows-message
-: WM_ENTERSIZEMOVE HEX: 0231 ; inline add-windows-message
-: WM_EXITSIZEMOVE HEX: 0232 ; inline add-windows-message
-: WM_DROPFILES HEX: 0233 ; inline add-windows-message
-: WM_MDIREFRESHMENU HEX: 0234 ; inline add-windows-message
-: WM_IME_SETCONTEXT HEX: 0281 ; inline add-windows-message
-: WM_IME_NOTIFY HEX: 0282 ; inline add-windows-message
-: WM_IME_CONTROL HEX: 0283 ; inline add-windows-message
-: WM_IME_COMPOSITIONFULL HEX: 0284 ; inline add-windows-message
-: WM_IME_SELECT HEX: 0285 ; inline add-windows-message
-: WM_IME_CHAR HEX: 0286 ; inline add-windows-message
-: WM_IME_REQUEST HEX: 0288 ; inline add-windows-message
-: WM_IME_KEYDOWN HEX: 0290 ; inline add-windows-message
-: WM_IME_KEYUP HEX: 0291 ; inline add-windows-message
-: WM_MOUSEHOVER HEX: 02A1 ; inline add-windows-message
-: WM_MOUSELEAVE HEX: 02A3 ; inline add-windows-message
-: WM_NCMOUSEHOVER HEX: 02A0 ; inline add-windows-message
-: WM_NCMOUSELEAVE HEX: 02A2 ; inline add-windows-message
-: WM_WTSSESSION_CHANGE HEX: 02B1 ; inline add-windows-message
-: WM_TABLET_FIRST HEX: 02c0 ; inline add-windows-message
-: WM_TABLET_LAST HEX: 02df ; inline add-windows-message
-: WM_CUT HEX: 0300 ; inline add-windows-message
-: WM_COPY HEX: 0301 ; inline add-windows-message
-: WM_PASTE HEX: 0302 ; inline add-windows-message
-: WM_CLEAR HEX: 0303 ; inline add-windows-message
-: WM_UNDO HEX: 0304 ; inline add-windows-message
-: WM_RENDERFORMAT HEX: 0305 ; inline add-windows-message
-: WM_RENDERALLFORMATS HEX: 0306 ; inline add-windows-message
-: WM_DESTROYCLIPBOARD HEX: 0307 ; inline add-windows-message
-: WM_DRAWCLIPBOARD HEX: 0308 ; inline add-windows-message
-: WM_PAINTCLIPBOARD HEX: 0309 ; inline add-windows-message
-: WM_VSCROLLCLIPBOARD HEX: 030A ; inline add-windows-message
-: WM_SIZECLIPBOARD HEX: 030B ; inline add-windows-message
-: WM_ASKCBFORMATNAME HEX: 030C ; inline add-windows-message
-: WM_CHANGECBCHAIN HEX: 030D ; inline add-windows-message
-: WM_HSCROLLCLIPBOARD HEX: 030E ; inline add-windows-message
-: WM_QUERYNEWPALETTE HEX: 030F ; inline add-windows-message
-: WM_PALETTEISCHANGING HEX: 0310 ; inline add-windows-message
-: WM_PALETTECHANGED HEX: 0311 ; inline add-windows-message
-: WM_HOTKEY HEX: 0312 ; inline add-windows-message
-: WM_PRINT HEX: 0317 ; inline add-windows-message
-: WM_PRINTCLIENT HEX: 0318 ; inline add-windows-message
-: WM_APPCOMMAND HEX: 0319 ; inline add-windows-message
-: WM_THEMECHANGED HEX: 031A ; inline add-windows-message
-: WM_HANDHELDFIRST HEX: 0358 ; inline add-windows-message
-: WM_HANDHELDLAST HEX: 035F ; inline add-windows-message
-: WM_AFXFIRST HEX: 0360 ; inline add-windows-message
-: WM_AFXLAST HEX: 037F ; inline add-windows-message
-: WM_PENWINFIRST HEX: 0380 ; inline add-windows-message
-: WM_PENWINLAST HEX: 038F ; inline add-windows-message
-: WM_APP HEX: 8000 ; inline add-windows-message
-: WM_USER HEX: 0400 ; inline add-windows-message
-: EM_GETSEL HEX: 00B0 ; inline add-windows-message
-: EM_SETSEL HEX: 00B1 ; inline add-windows-message
-: EM_GETRECT HEX: 00B2 ; inline add-windows-message
-: EM_SETRECT HEX: 00B3 ; inline add-windows-message
-: EM_SETRECTNP HEX: 00B4 ; inline add-windows-message
-: EM_SCROLL HEX: 00B5 ; inline add-windows-message
-: EM_LINESCROLL HEX: 00B6 ; inline add-windows-message
-: EM_SCROLLCARET HEX: 00B7 ; inline add-windows-message
-: EM_GETMODIFY HEX: 00B8 ; inline add-windows-message
-: EM_SETMODIFY HEX: 00B9 ; inline add-windows-message
-: EM_GETLINECOUNT HEX: 00BA ; inline add-windows-message
-: EM_LINEINDEX HEX: 00BB ; inline add-windows-message
-: EM_SETHANDLE HEX: 00BC ; inline add-windows-message
-: EM_GETHANDLE HEX: 00BD ; inline add-windows-message
-: EM_GETTHUMB HEX: 00BE ; inline add-windows-message
-: EM_LINELENGTH HEX: 00C1 ; inline add-windows-message
-: EM_REPLACESEL HEX: 00C2 ; inline add-windows-message
-: EM_GETLINE HEX: 00C4 ; inline add-windows-message
-: EM_LIMITTEXT HEX: 00C5 ; inline add-windows-message
-: EM_CANUNDO HEX: 00C6 ; inline add-windows-message
-: EM_UNDO HEX: 00C7 ; inline add-windows-message
-: EM_FMTLINES HEX: 00C8 ; inline add-windows-message
-: EM_LINEFROMCHAR HEX: 00C9 ; inline add-windows-message
-: EM_SETTABSTOPS HEX: 00CB ; inline add-windows-message
-: EM_SETPASSWORDCHAR HEX: 00CC ; inline add-windows-message
-: EM_EMPTYUNDOBUFFER HEX: 00CD ; inline add-windows-message
-: EM_GETFIRSTVISIBLELINE HEX: 00CE ; inline add-windows-message
-: EM_SETREADONLY HEX: 00CF ; inline add-windows-message
-: EM_SETWORDBREAKPROC HEX: 00D0 ; inline add-windows-message
-: EM_GETWORDBREAKPROC HEX: 00D1 ; inline add-windows-message
-: EM_GETPASSWORDCHAR HEX: 00D2 ; inline add-windows-message
-: EM_SETMARGINS HEX: 00D3 ; inline add-windows-message
-: EM_GETMARGINS HEX: 00D4 ; inline add-windows-message
-: EM_SETLIMITTEXT EM_LIMITTEXT ; inline add-windows-message
-: EM_GETLIMITTEXT HEX: 00D5 ; inline add-windows-message
-: EM_POSFROMCHAR HEX: 00D6 ; inline add-windows-message
-: EM_CHARFROMPOS HEX: 00D7 ; inline add-windows-message
-: EM_SETIMESTATUS HEX: 00D8 ; inline add-windows-message
-: EM_GETIMESTATUS HEX: 00D9 ; inline add-windows-message
-: BM_GETCHECK HEX: 00F0 ; inline add-windows-message
-: BM_SETCHECK HEX: 00F1 ; inline add-windows-message
-: BM_GETSTATE HEX: 00F2 ; inline add-windows-message
-: BM_SETSTATE HEX: 00F3 ; inline add-windows-message
-: BM_SETSTYLE HEX: 00F4 ; inline add-windows-message
-: BM_CLICK HEX: 00F5 ; inline add-windows-message
-: BM_GETIMAGE HEX: 00F6 ; inline add-windows-message
-: BM_SETIMAGE HEX: 00F7 ; inline add-windows-message
-: STM_SETICON HEX: 0170 ; inline add-windows-message
-: STM_GETICON HEX: 0171 ; inline add-windows-message
-: STM_SETIMAGE HEX: 0172 ; inline add-windows-message
-: STM_GETIMAGE HEX: 0173 ; inline add-windows-message
-: STM_MSGMAX HEX: 0174 ; inline add-windows-message
-: DM_GETDEFID WM_USER ; inline add-windows-message
-: DM_SETDEFID WM_USER 1 + ; inline add-windows-message
-: DM_REPOSITION WM_USER 2 + ; inline add-windows-message
-: LB_ADDSTRING HEX: 0180 ; inline add-windows-message
-: LB_INSERTSTRING HEX: 0181 ; inline add-windows-message
-: LB_DELETESTRING HEX: 0182 ; inline add-windows-message
-: LB_SELITEMRANGEEX HEX: 0183 ; inline add-windows-message
-: LB_RESETCONTENT HEX: 0184 ; inline add-windows-message
-: LB_SETSEL HEX: 0185 ; inline add-windows-message
-: LB_SETCURSEL HEX: 0186 ; inline add-windows-message
-: LB_GETSEL HEX: 0187 ; inline add-windows-message
-: LB_GETCURSEL HEX: 0188 ; inline add-windows-message
-: LB_GETTEXT HEX: 0189 ; inline add-windows-message
-: LB_GETTEXTLEN HEX: 018A ; inline add-windows-message
-: LB_GETCOUNT HEX: 018B ; inline add-windows-message
-: LB_SELECTSTRING HEX: 018C ; inline add-windows-message
-: LB_DIR HEX: 018D ; inline add-windows-message
-: LB_GETTOPINDEX HEX: 018E ; inline add-windows-message
-: LB_FINDSTRING HEX: 018F ; inline add-windows-message
-: LB_GETSELCOUNT HEX: 0190 ; inline add-windows-message
-: LB_GETSELITEMS HEX: 0191 ; inline add-windows-message
-: LB_SETTABSTOPS HEX: 0192 ; inline add-windows-message
-: LB_GETHORIZONTALEXTENT HEX: 0193 ; inline add-windows-message
-: LB_SETHORIZONTALEXTENT HEX: 0194 ; inline add-windows-message
-: LB_SETCOLUMNWIDTH HEX: 0195 ; inline add-windows-message
-: LB_ADDFILE HEX: 0196 ; inline add-windows-message
-: LB_SETTOPINDEX HEX: 0197 ; inline add-windows-message
-: LB_GETITEMRECT HEX: 0198 ; inline add-windows-message
-: LB_GETITEMDATA HEX: 0199 ; inline add-windows-message
-: LB_SETITEMDATA HEX: 019A ; inline add-windows-message
-: LB_SELITEMRANGE HEX: 019B ; inline add-windows-message
-: LB_SETANCHORINDEX HEX: 019C ; inline add-windows-message
-: LB_GETANCHORINDEX HEX: 019D ; inline add-windows-message
-: LB_SETCARETINDEX HEX: 019E ; inline add-windows-message
-: LB_GETCARETINDEX HEX: 019F ; inline add-windows-message
-: LB_SETITEMHEIGHT HEX: 01A0 ; inline add-windows-message
-: LB_GETITEMHEIGHT HEX: 01A1 ; inline add-windows-message
-: LB_FINDSTRINGEXACT HEX: 01A2 ; inline add-windows-message
-: LB_SETLOCALE HEX: 01A5 ; inline add-windows-message
-: LB_GETLOCALE HEX: 01A6 ; inline add-windows-message
-: LB_SETCOUNT HEX: 01A7 ; inline add-windows-message
-: LB_INITSTORAGE HEX: 01A8 ; inline add-windows-message
-: LB_ITEMFROMPOINT HEX: 01A9 ; inline add-windows-message
-: LB_MULTIPLEADDSTRING HEX: 01B1 ; inline add-windows-message
-: LB_GETLISTBOXINFO HEX: 01B2 ; inline add-windows-message
-: LB_MSGMAX_501 HEX: 01B3 ; inline add-windows-message
-: LB_MSGMAX_WCE4 HEX: 01B1 ; inline add-windows-message
-: LB_MSGMAX_4 HEX: 01B0 ; inline add-windows-message
-: LB_MSGMAX_PRE4 HEX: 01A8 ; inline add-windows-message
-: CB_GETEDITSEL HEX: 0140 ; inline add-windows-message
-: CB_LIMITTEXT HEX: 0141 ; inline add-windows-message
-: CB_SETEDITSEL HEX: 0142 ; inline add-windows-message
-: CB_ADDSTRING HEX: 0143 ; inline add-windows-message
-: CB_DELETESTRING HEX: 0144 ; inline add-windows-message
-: CB_DIR HEX: 0145 ; inline add-windows-message
-: CB_GETCOUNT HEX: 0146 ; inline add-windows-message
-: CB_GETCURSEL HEX: 0147 ; inline add-windows-message
-: CB_GETLBTEXT HEX: 0148 ; inline add-windows-message
-: CB_GETLBTEXTLEN HEX: 0149 ; inline add-windows-message
-: CB_INSERTSTRING HEX: 014A ; inline add-windows-message
-: CB_RESETCONTENT HEX: 014B ; inline add-windows-message
-: CB_FINDSTRING HEX: 014C ; inline add-windows-message
-: CB_SELECTSTRING HEX: 014D ; inline add-windows-message
-: CB_SETCURSEL HEX: 014E ; inline add-windows-message
-: CB_SHOWDROPDOWN HEX: 014F ; inline add-windows-message
-: CB_GETITEMDATA HEX: 0150 ; inline add-windows-message
-: CB_SETITEMDATA HEX: 0151 ; inline add-windows-message
-: CB_GETDROPPEDCONTROLRECT HEX: 0152 ; inline add-windows-message
-: CB_SETITEMHEIGHT HEX: 0153 ; inline add-windows-message
-: CB_GETITEMHEIGHT HEX: 0154 ; inline add-windows-message
-: CB_SETEXTENDEDUI HEX: 0155 ; inline add-windows-message
-: CB_GETEXTENDEDUI HEX: 0156 ; inline add-windows-message
-: CB_GETDROPPEDSTATE HEX: 0157 ; inline add-windows-message
-: CB_FINDSTRINGEXACT HEX: 0158 ; inline add-windows-message
-: CB_SETLOCALE HEX: 0159 ; inline add-windows-message
-: CB_GETLOCALE HEX: 015A ; inline add-windows-message
-: CB_GETTOPINDEX HEX: 015B ; inline add-windows-message
-: CB_SETTOPINDEX HEX: 015C ; inline add-windows-message
-: CB_GETHORIZONTALEXTENT HEX: 015d ; inline add-windows-message
-: CB_SETHORIZONTALEXTENT HEX: 015e ; inline add-windows-message
-: CB_GETDROPPEDWIDTH HEX: 015f ; inline add-windows-message
-: CB_SETDROPPEDWIDTH HEX: 0160 ; inline add-windows-message
-: CB_INITSTORAGE HEX: 0161 ; inline add-windows-message
-: CB_MULTIPLEADDSTRING HEX: 0163 ; inline add-windows-message
-: CB_GETCOMBOBOXINFO HEX: 0164 ; inline add-windows-message
-: CB_MSGMAX_501 HEX: 0165 ; inline add-windows-message
-: CB_MSGMAX_WCE400 HEX: 0163 ; inline add-windows-message
-: CB_MSGMAX_400 HEX: 0162 ; inline add-windows-message
-: CB_MSGMAX_PRE400 HEX: 015B ; inline add-windows-message
-: SBM_SETPOS HEX: 00E0 ; inline add-windows-message
-: SBM_GETPOS HEX: 00E1 ; inline add-windows-message
-: SBM_SETRANGE HEX: 00E2 ; inline add-windows-message
-: SBM_SETRANGEREDRAW HEX: 00E6 ; inline add-windows-message
-: SBM_GETRANGE HEX: 00E3 ; inline add-windows-message
-: SBM_ENABLE_ARROWS HEX: 00E4 ; inline add-windows-message
-: SBM_SETSCROLLINFO HEX: 00E9 ; inline add-windows-message
-: SBM_GETSCROLLINFO HEX: 00EA ; inline add-windows-message
-: SBM_GETSCROLLBARINFO HEX: 00EB ; inline add-windows-message
-: LVM_FIRST HEX: 1000 ; inline add-windows-message ! ListView messages
-: TV_FIRST HEX: 1100 ; inline add-windows-message ! TreeView messages
-: HDM_FIRST HEX: 1200 ; inline add-windows-message ! Header messages
-: TCM_FIRST HEX: 1300 ; inline add-windows-message ! Tab control messages
-: PGM_FIRST HEX: 1400 ; inline add-windows-message ! Pager control messages
-: ECM_FIRST HEX: 1500 ; inline add-windows-message ! Edit control messages
-: BCM_FIRST HEX: 1600 ; inline add-windows-message ! Button control messages
-: CBM_FIRST HEX: 1700 ; inline add-windows-message ! Combobox control messages
-: CCM_FIRST HEX: 2000 ; inline add-windows-message ! Common control shared messages
-: CCM_LAST CCM_FIRST HEX: 0200 + ; inline add-windows-message
-: CCM_SETBKCOLOR CCM_FIRST 1 + ; inline add-windows-message
-: CCM_SETCOLORSCHEME CCM_FIRST 2 + ; inline add-windows-message
-: CCM_GETCOLORSCHEME CCM_FIRST 3 + ; inline add-windows-message
-: CCM_GETDROPTARGET CCM_FIRST 4 + ; inline add-windows-message
-: CCM_SETUNICODEFORMAT CCM_FIRST 5 + ; inline add-windows-message
-: CCM_GETUNICODEFORMAT CCM_FIRST 6 + ; inline add-windows-message
-: CCM_SETVERSION CCM_FIRST 7 + ; inline add-windows-message
-: CCM_GETVERSION CCM_FIRST 8 + ; inline add-windows-message
-: CCM_SETNOTIFYWINDOW CCM_FIRST 9 + ; inline add-windows-message
-: CCM_SETWINDOWTHEME CCM_FIRST HEX: b + ; inline add-windows-message
-: CCM_DPISCALE CCM_FIRST HEX: c + ; inline add-windows-message
-: HDM_GETITEMCOUNT HDM_FIRST 0 + ; inline add-windows-message
-: HDM_INSERTITEMA HDM_FIRST 1 + ; inline add-windows-message
-: HDM_INSERTITEMW HDM_FIRST 10 + ; inline add-windows-message
-: HDM_DELETEITEM HDM_FIRST 2 + ; inline add-windows-message
-: HDM_GETITEMA HDM_FIRST 3 + ; inline add-windows-message
-: HDM_GETITEMW HDM_FIRST 11 + ; inline add-windows-message
-: HDM_SETITEMA HDM_FIRST 4 + ; inline add-windows-message
-: HDM_SETITEMW HDM_FIRST 12 + ; inline add-windows-message
-: HDM_LAYOUT HDM_FIRST 5 + ; inline add-windows-message
-: HDM_HITTEST HDM_FIRST 6 + ; inline add-windows-message
-: HDM_GETITEMRECT HDM_FIRST 7 + ; inline add-windows-message
-: HDM_SETIMAGELIST HDM_FIRST 8 + ; inline add-windows-message
-: HDM_GETIMAGELIST HDM_FIRST 9 + ; inline add-windows-message
-: HDM_ORDERTOINDEX HDM_FIRST 15 + ; inline add-windows-message
-: HDM_CREATEDRAGIMAGE HDM_FIRST 16 + ; inline add-windows-message
-: HDM_GETORDERARRAY HDM_FIRST 17 + ; inline add-windows-message
-: HDM_SETORDERARRAY HDM_FIRST 18 + ; inline add-windows-message
-: HDM_SETHOTDIVIDER HDM_FIRST 19 + ; inline add-windows-message
-: HDM_SETBITMAPMARGIN HDM_FIRST 20 + ; inline add-windows-message
-: HDM_GETBITMAPMARGIN HDM_FIRST 21 + ; inline add-windows-message
-: HDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: HDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: HDM_SETFILTERCHANGETIMEOUT HDM_FIRST 22 + ; inline add-windows-message
-: HDM_EDITFILTER HDM_FIRST 23 + ; inline add-windows-message
-: HDM_CLEARFILTER HDM_FIRST 24 + ; inline add-windows-message
-: TB_ENABLEBUTTON WM_USER 1 + ; inline add-windows-message
-: TB_CHECKBUTTON WM_USER 2 + ; inline add-windows-message
-: TB_PRESSBUTTON WM_USER 3 + ; inline add-windows-message
-: TB_HIDEBUTTON WM_USER 4 + ; inline add-windows-message
-: TB_INDETERMINATE WM_USER 5 + ; inline add-windows-message
-: TB_MARKBUTTON WM_USER 6 + ; inline add-windows-message
-: TB_ISBUTTONENABLED WM_USER 9 + ; inline add-windows-message
-: TB_ISBUTTONCHECKED WM_USER 10 + ; inline add-windows-message
-: TB_ISBUTTONPRESSED WM_USER 11 + ; inline add-windows-message
-: TB_ISBUTTONHIDDEN WM_USER 12 + ; inline add-windows-message
-: TB_ISBUTTONINDETERMINATE WM_USER 13 + ; inline add-windows-message
-: TB_ISBUTTONHIGHLIGHTED WM_USER 14 + ; inline add-windows-message
-: TB_SETSTATE WM_USER 17 + ; inline add-windows-message
-: TB_GETSTATE WM_USER 18 + ; inline add-windows-message
-: TB_ADDBITMAP WM_USER 19 + ; inline add-windows-message
-: TB_ADDBUTTONSA WM_USER 20 + ; inline add-windows-message
-: TB_INSERTBUTTONA WM_USER 21 + ; inline add-windows-message
-: TB_ADDBUTTONS WM_USER 20 + ; inline add-windows-message
-: TB_INSERTBUTTON WM_USER 21 + ; inline add-windows-message
-: TB_DELETEBUTTON WM_USER 22 + ; inline add-windows-message
-: TB_GETBUTTON WM_USER 23 + ; inline add-windows-message
-: TB_BUTTONCOUNT WM_USER 24 + ; inline add-windows-message
-: TB_COMMANDTOINDEX WM_USER 25 + ; inline add-windows-message
-: TB_SAVERESTOREA WM_USER 26 + ; inline add-windows-message
-: TB_SAVERESTOREW WM_USER 76 + ; inline add-windows-message
-: TB_CUSTOMIZE WM_USER 27 + ; inline add-windows-message
-: TB_ADDSTRINGA WM_USER 28 + ; inline add-windows-message
-: TB_ADDSTRINGW WM_USER 77 + ; inline add-windows-message
-: TB_GETITEMRECT WM_USER 29 + ; inline add-windows-message
-: TB_BUTTONSTRUCTSIZE WM_USER 30 + ; inline add-windows-message
-: TB_SETBUTTONSIZE WM_USER 31 + ; inline add-windows-message
-: TB_SETBITMAPSIZE WM_USER 32 + ; inline add-windows-message
-: TB_AUTOSIZE WM_USER 33 + ; inline add-windows-message
-: TB_GETTOOLTIPS WM_USER 35 + ; inline add-windows-message
-: TB_SETTOOLTIPS WM_USER 36 + ; inline add-windows-message
-: TB_SETPARENT WM_USER 37 + ; inline add-windows-message
-: TB_SETROWS WM_USER 39 + ; inline add-windows-message
-: TB_GETROWS WM_USER 40 + ; inline add-windows-message
-: TB_SETCMDID WM_USER 42 + ; inline add-windows-message
-: TB_CHANGEBITMAP WM_USER 43 + ; inline add-windows-message
-: TB_GETBITMAP WM_USER 44 + ; inline add-windows-message
-: TB_GETBUTTONTEXTA WM_USER 45 + ; inline add-windows-message
-: TB_GETBUTTONTEXTW WM_USER 75 + ; inline add-windows-message
-: TB_REPLACEBITMAP WM_USER 46 + ; inline add-windows-message
-: TB_SETINDENT WM_USER 47 + ; inline add-windows-message
-: TB_SETIMAGELIST WM_USER 48 + ; inline add-windows-message
-: TB_GETIMAGELIST WM_USER 49 + ; inline add-windows-message
-: TB_LOADIMAGES WM_USER 50 + ; inline add-windows-message
-: TB_GETRECT WM_USER 51 + ; inline add-windows-message
-: TB_SETHOTIMAGELIST WM_USER 52 + ; inline add-windows-message
-: TB_GETHOTIMAGELIST WM_USER 53 + ; inline add-windows-message
-: TB_SETDISABLEDIMAGELIST WM_USER 54 + ; inline add-windows-message
-: TB_GETDISABLEDIMAGELIST WM_USER 55 + ; inline add-windows-message
-: TB_SETSTYLE WM_USER 56 + ; inline add-windows-message
-: TB_GETSTYLE WM_USER 57 + ; inline add-windows-message
-: TB_GETBUTTONSIZE WM_USER 58 + ; inline add-windows-message
-: TB_SETBUTTONWIDTH WM_USER 59 + ; inline add-windows-message
-: TB_SETMAXTEXTROWS WM_USER 60 + ; inline add-windows-message
-: TB_GETTEXTROWS WM_USER 61 + ; inline add-windows-message
-: TB_GETOBJECT WM_USER 62 + ; inline add-windows-message
-: TB_GETHOTITEM WM_USER 71 + ; inline add-windows-message
-: TB_SETHOTITEM WM_USER 72 + ; inline add-windows-message
-: TB_SETANCHORHIGHLIGHT WM_USER 73 + ; inline add-windows-message
-: TB_GETANCHORHIGHLIGHT WM_USER 74 + ; inline add-windows-message
-: TB_MAPACCELERATORA WM_USER 78 + ; inline add-windows-message
-: TB_GETINSERTMARK WM_USER 79 + ; inline add-windows-message
-: TB_SETINSERTMARK WM_USER 80 + ; inline add-windows-message
-: TB_INSERTMARKHITTEST WM_USER 81 + ; inline add-windows-message
-: TB_MOVEBUTTON WM_USER 82 + ; inline add-windows-message
-: TB_GETMAXSIZE WM_USER 83 + ; inline add-windows-message
-: TB_SETEXTENDEDSTYLE WM_USER 84 + ; inline add-windows-message
-: TB_GETEXTENDEDSTYLE WM_USER 85 + ; inline add-windows-message
-: TB_GETPADDING WM_USER 86 + ; inline add-windows-message
-: TB_SETPADDING WM_USER 87 + ; inline add-windows-message
-: TB_SETINSERTMARKCOLOR WM_USER 88 + ; inline add-windows-message
-: TB_GETINSERTMARKCOLOR WM_USER 89 + ; inline add-windows-message
-: TB_SETCOLORSCHEME CCM_SETCOLORSCHEME ; inline add-windows-message
-: TB_GETCOLORSCHEME CCM_GETCOLORSCHEME ; inline add-windows-message
-: TB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: TB_MAPACCELERATORW WM_USER 90 + ; inline add-windows-message
-: TB_GETBITMAPFLAGS WM_USER 41 + ; inline add-windows-message
-: TB_GETBUTTONINFOW WM_USER 63 + ; inline add-windows-message
-: TB_SETBUTTONINFOW WM_USER 64 + ; inline add-windows-message
-: TB_GETBUTTONINFOA WM_USER 65 + ; inline add-windows-message
-: TB_SETBUTTONINFOA WM_USER 66 + ; inline add-windows-message
-: TB_INSERTBUTTONW WM_USER 67 + ; inline add-windows-message
-: TB_ADDBUTTONSW WM_USER 68 + ; inline add-windows-message
-: TB_HITTEST WM_USER 69 + ; inline add-windows-message
-: TB_SETDRAWTEXTFLAGS WM_USER 70 + ; inline add-windows-message
-: TB_GETSTRINGW WM_USER 91 + ; inline add-windows-message
-: TB_GETSTRINGA WM_USER 92 + ; inline add-windows-message
-: TB_GETMETRICS WM_USER 101 + ; inline add-windows-message
-: TB_SETMETRICS WM_USER 102 + ; inline add-windows-message
-: TB_SETWINDOWTHEME CCM_SETWINDOWTHEME ; inline add-windows-message
-: RB_INSERTBANDA WM_USER 1 + ; inline add-windows-message
-: RB_DELETEBAND WM_USER 2 + ; inline add-windows-message
-: RB_GETBARINFO WM_USER 3 + ; inline add-windows-message
-: RB_SETBARINFO WM_USER 4 + ; inline add-windows-message
-: RB_GETBANDINFO WM_USER 5 + ; inline add-windows-message
-: RB_SETBANDINFOA WM_USER 6 + ; inline add-windows-message
-: RB_SETPARENT WM_USER 7 + ; inline add-windows-message
-: RB_HITTEST WM_USER 8 + ; inline add-windows-message
-: RB_GETRECT WM_USER 9 + ; inline add-windows-message
-: RB_INSERTBANDW WM_USER 10 + ; inline add-windows-message
-: RB_SETBANDINFOW WM_USER 11 + ; inline add-windows-message
-: RB_GETBANDCOUNT WM_USER 12 + ; inline add-windows-message
-: RB_GETROWCOUNT WM_USER 13 + ; inline add-windows-message
-: RB_GETROWHEIGHT WM_USER 14 + ; inline add-windows-message
-: RB_IDTOINDEX WM_USER 16 + ; inline add-windows-message
-: RB_GETTOOLTIPS WM_USER 17 + ; inline add-windows-message
-: RB_SETTOOLTIPS WM_USER 18 + ; inline add-windows-message
-: RB_SETBKCOLOR WM_USER 19 + ; inline add-windows-message
-: RB_GETBKCOLOR WM_USER 20 + ; inline add-windows-message
-: RB_SETTEXTCOLOR WM_USER 21 + ; inline add-windows-message
-: RB_GETTEXTCOLOR WM_USER 22 + ; inline add-windows-message
-: RB_SIZETORECT WM_USER 23 + ; inline add-windows-message
-: RB_SETCOLORSCHEME CCM_SETCOLORSCHEME ; inline add-windows-message
-: RB_GETCOLORSCHEME CCM_GETCOLORSCHEME ; inline add-windows-message
-: RB_BEGINDRAG WM_USER 24 + ; inline add-windows-message
-: RB_ENDDRAG WM_USER 25 + ; inline add-windows-message
-: RB_DRAGMOVE WM_USER 26 + ; inline add-windows-message
-: RB_GETBARHEIGHT WM_USER 27 + ; inline add-windows-message
-: RB_GETBANDINFOW WM_USER 28 + ; inline add-windows-message
-: RB_GETBANDINFOA WM_USER 29 + ; inline add-windows-message
-: RB_MINIMIZEBAND WM_USER 30 + ; inline add-windows-message
-: RB_MAXIMIZEBAND WM_USER 31 + ; inline add-windows-message
-: RB_GETDROPTARGET CCM_GETDROPTARGET ; inline add-windows-message
-: RB_GETBANDBORDERS WM_USER 34 + ; inline add-windows-message
-: RB_SHOWBAND WM_USER 35 + ; inline add-windows-message
-: RB_SETPALETTE WM_USER 37 + ; inline add-windows-message
-: RB_GETPALETTE WM_USER 38 + ; inline add-windows-message
-: RB_MOVEBAND WM_USER 39 + ; inline add-windows-message
-: RB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: RB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: RB_GETBANDMARGINS WM_USER 40 + ; inline add-windows-message
-: RB_SETWINDOWTHEME CCM_SETWINDOWTHEME ; inline add-windows-message
-: RB_PUSHCHEVRON WM_USER 43 + ; inline add-windows-message
-: TTM_ACTIVATE WM_USER 1 + ; inline add-windows-message
-: TTM_SETDELAYTIME WM_USER 3 + ; inline add-windows-message
-: TTM_ADDTOOLA WM_USER 4 + ; inline add-windows-message
-: TTM_ADDTOOLW WM_USER 50 + ; inline add-windows-message
-: TTM_DELTOOLA WM_USER 5 + ; inline add-windows-message
-: TTM_DELTOOLW WM_USER 51 + ; inline add-windows-message
-: TTM_NEWTOOLRECTA WM_USER 6 + ; inline add-windows-message
-: TTM_NEWTOOLRECTW WM_USER 52 + ; inline add-windows-message
-: TTM_RELAYEVENT WM_USER 7 + ; inline add-windows-message
-: TTM_GETTOOLINFOA WM_USER 8 + ; inline add-windows-message
-: TTM_GETTOOLINFOW WM_USER 53 + ; inline add-windows-message
-: TTM_SETTOOLINFOA WM_USER 9 + ; inline add-windows-message
-: TTM_SETTOOLINFOW WM_USER 54 + ; inline add-windows-message
-: TTM_HITTESTA WM_USER 10 + ; inline add-windows-message
-: TTM_HITTESTW WM_USER 55 + ; inline add-windows-message
-: TTM_GETTEXTA WM_USER 11 + ; inline add-windows-message
-: TTM_GETTEXTW WM_USER 56 + ; inline add-windows-message
-: TTM_UPDATETIPTEXTA WM_USER 12 + ; inline add-windows-message
-: TTM_UPDATETIPTEXTW WM_USER 57 + ; inline add-windows-message
-: TTM_GETTOOLCOUNT WM_USER 13 + ; inline add-windows-message
-: TTM_ENUMTOOLSA WM_USER 14 + ; inline add-windows-message
-: TTM_ENUMTOOLSW WM_USER 58 + ; inline add-windows-message
-: TTM_GETCURRENTTOOLA WM_USER 15 + ; inline add-windows-message
-: TTM_GETCURRENTTOOLW WM_USER 59 + ; inline add-windows-message
-: TTM_WINDOWFROMPOINT WM_USER 16 + ; inline add-windows-message
-: TTM_TRACKACTIVATE WM_USER 17 + ; inline add-windows-message
-: TTM_TRACKPOSITION WM_USER 18 + ; inline add-windows-message
-: TTM_SETTIPBKCOLOR WM_USER 19 + ; inline add-windows-message
-: TTM_SETTIPTEXTCOLOR WM_USER 20 + ; inline add-windows-message
-: TTM_GETDELAYTIME WM_USER 21 + ; inline add-windows-message
-: TTM_GETTIPBKCOLOR WM_USER 22 + ; inline add-windows-message
-: TTM_GETTIPTEXTCOLOR WM_USER 23 + ; inline add-windows-message
-: TTM_SETMAXTIPWIDTH WM_USER 24 + ; inline add-windows-message
-: TTM_GETMAXTIPWIDTH WM_USER 25 + ; inline add-windows-message
-: TTM_SETMARGIN WM_USER 26 + ; inline add-windows-message
-: TTM_GETMARGIN WM_USER 27 + ; inline add-windows-message
-: TTM_POP WM_USER 28 + ; inline add-windows-message
-: TTM_UPDATE WM_USER 29 + ; inline add-windows-message
-: TTM_GETBUBBLESIZE WM_USER 30 + ; inline add-windows-message
-: TTM_ADJUSTRECT WM_USER 31 + ; inline add-windows-message
-: TTM_SETTITLEA WM_USER 32 + ; inline add-windows-message
-: TTM_SETTITLEW WM_USER 33 + ; inline add-windows-message
-: TTM_POPUP WM_USER 34 + ; inline add-windows-message
-: TTM_GETTITLE WM_USER 35 + ; inline add-windows-message
-: TTM_SETWINDOWTHEME CCM_SETWINDOWTHEME ; inline add-windows-message
-: SB_SETTEXTA WM_USER 1+ ; inline add-windows-message
-: SB_SETTEXTW WM_USER 11 + ; inline add-windows-message
-: SB_GETTEXTA WM_USER 2 + ; inline add-windows-message
-: SB_GETTEXTW WM_USER 13 + ; inline add-windows-message
-: SB_GETTEXTLENGTHA WM_USER 3 + ; inline add-windows-message
-: SB_GETTEXTLENGTHW WM_USER 12 + ; inline add-windows-message
-: SB_SETPARTS WM_USER 4 + ; inline add-windows-message
-: SB_GETPARTS WM_USER 6 + ; inline add-windows-message
-: SB_GETBORDERS WM_USER 7 + ; inline add-windows-message
-: SB_SETMINHEIGHT WM_USER 8 + ; inline add-windows-message
-: SB_SIMPLE WM_USER 9 + ; inline add-windows-message
-: SB_GETRECT WM_USER 10 + ; inline add-windows-message
-: SB_ISSIMPLE WM_USER 14 + ; inline add-windows-message
-: SB_SETICON WM_USER 15 + ; inline add-windows-message
-: SB_SETTIPTEXTA WM_USER 16 + ; inline add-windows-message
-: SB_SETTIPTEXTW WM_USER 17 + ; inline add-windows-message
-: SB_GETTIPTEXTA WM_USER 18 + ; inline add-windows-message
-: SB_GETTIPTEXTW WM_USER 19 + ; inline add-windows-message
-: SB_GETICON WM_USER 20 + ; inline add-windows-message
-: SB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: SB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: SB_SETBKCOLOR CCM_SETBKCOLOR ; inline add-windows-message
-: SB_SIMPLEID HEX: 00ff ; inline add-windows-message
-: TBM_GETPOS WM_USER ; inline add-windows-message
-: TBM_GETRANGEMIN WM_USER 1 + ; inline add-windows-message
-: TBM_GETRANGEMAX WM_USER 2 + ; inline add-windows-message
-: TBM_GETTIC WM_USER 3 + ; inline add-windows-message
-: TBM_SETTIC WM_USER 4 + ; inline add-windows-message
-: TBM_SETPOS WM_USER 5 + ; inline add-windows-message
-: TBM_SETRANGE WM_USER 6 + ; inline add-windows-message
-: TBM_SETRANGEMIN WM_USER 7 + ; inline add-windows-message
-: TBM_SETRANGEMAX WM_USER 8 + ; inline add-windows-message
-: TBM_CLEARTICS WM_USER 9 + ; inline add-windows-message
-: TBM_SETSEL WM_USER 10 + ; inline add-windows-message
-: TBM_SETSELSTART WM_USER 11 + ; inline add-windows-message
-: TBM_SETSELEND WM_USER 12 + ; inline add-windows-message
-: TBM_GETPTICS WM_USER 14 + ; inline add-windows-message
-: TBM_GETTICPOS WM_USER 15 + ; inline add-windows-message
-: TBM_GETNUMTICS WM_USER 16 + ; inline add-windows-message
-: TBM_GETSELSTART WM_USER 17 + ; inline add-windows-message
-: TBM_GETSELEND WM_USER 18 + ; inline add-windows-message
-: TBM_CLEARSEL WM_USER 19 + ; inline add-windows-message
-: TBM_SETTICFREQ WM_USER 20 + ; inline add-windows-message
-: TBM_SETPAGESIZE WM_USER 21 + ; inline add-windows-message
-: TBM_GETPAGESIZE WM_USER 22 + ; inline add-windows-message
-: TBM_SETLINESIZE WM_USER 23 + ; inline add-windows-message
-: TBM_GETLINESIZE WM_USER 24 + ; inline add-windows-message
-: TBM_GETTHUMBRECT WM_USER 25 + ; inline add-windows-message
-: TBM_GETCHANNELRECT WM_USER 26 + ; inline add-windows-message
-: TBM_SETTHUMBLENGTH WM_USER 27 + ; inline add-windows-message
-: TBM_GETTHUMBLENGTH WM_USER 28 + ; inline add-windows-message
-: TBM_SETTOOLTIPS WM_USER 29 + ; inline add-windows-message
-: TBM_GETTOOLTIPS WM_USER 30 + ; inline add-windows-message
-: TBM_SETTIPSIDE WM_USER 31 + ; inline add-windows-message
-: TBM_SETBUDDY WM_USER 32 + ; inline add-windows-message
-: TBM_GETBUDDY WM_USER 33 + ; inline add-windows-message
-: TBM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: TBM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: DL_BEGINDRAG WM_USER 133 + ; inline add-windows-message
-: DL_DRAGGING WM_USER 134 + ; inline add-windows-message
-: DL_DROPPED WM_USER 135 + ; inline add-windows-message
-: DL_CANCELDRAG WM_USER 136 + ; inline add-windows-message
-: UDM_SETRANGE WM_USER 101 + ; inline add-windows-message
-: UDM_GETRANGE WM_USER 102 + ; inline add-windows-message
-: UDM_SETPOS WM_USER 103 + ; inline add-windows-message
-: UDM_GETPOS WM_USER 104 + ; inline add-windows-message
-: UDM_SETBUDDY WM_USER 105 + ; inline add-windows-message
-: UDM_GETBUDDY WM_USER 106 + ; inline add-windows-message
-: UDM_SETACCEL WM_USER 107 + ; inline add-windows-message
-: UDM_GETACCEL WM_USER 108 + ; inline add-windows-message
-: UDM_SETBASE WM_USER 109 + ; inline add-windows-message
-: UDM_GETBASE WM_USER 110 + ; inline add-windows-message
-: UDM_SETRANGE32 WM_USER 111 + ; inline add-windows-message
-: UDM_GETRANGE32 WM_USER 112 + ; inline add-windows-message
-: UDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: UDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: UDM_SETPOS32 WM_USER 113 + ; inline add-windows-message
-: UDM_GETPOS32 WM_USER 114 + ; inline add-windows-message
-: PBM_SETRANGE WM_USER 1 + ; inline add-windows-message
-: PBM_SETPOS WM_USER 2 + ; inline add-windows-message
-: PBM_DELTAPOS WM_USER 3 + ; inline add-windows-message
-: PBM_SETSTEP WM_USER 4 + ; inline add-windows-message
-: PBM_STEPIT WM_USER 5 + ; inline add-windows-message
-: PBM_SETRANGE32 WM_USER 6 + ; inline add-windows-message
-: PBM_GETRANGE WM_USER 7 + ; inline add-windows-message
-: PBM_GETPOS WM_USER 8 + ; inline add-windows-message
-: PBM_SETBARCOLOR WM_USER 9 + ; inline add-windows-message
-: PBM_SETBKCOLOR CCM_SETBKCOLOR ; inline add-windows-message
-: HKM_SETHOTKEY WM_USER 1 + ; inline add-windows-message
-: HKM_GETHOTKEY WM_USER 2 + ; inline add-windows-message
-: HKM_SETRULES WM_USER 3 + ; inline add-windows-message
-: LVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: LVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: LVM_GETBKCOLOR LVM_FIRST 0 + ; inline add-windows-message
-: LVM_SETBKCOLOR LVM_FIRST 1 + ; inline add-windows-message
-: LVM_GETIMAGELIST LVM_FIRST 2 + ; inline add-windows-message
-: LVM_SETIMAGELIST LVM_FIRST 3 + ; inline add-windows-message
-: LVM_GETITEMCOUNT LVM_FIRST 4 + ; inline add-windows-message
-: LVM_GETITEMA LVM_FIRST 5 + ; inline add-windows-message
-: LVM_GETITEMW LVM_FIRST 75 + ; inline add-windows-message
-: LVM_SETITEMA LVM_FIRST 6 + ; inline add-windows-message
-: LVM_SETITEMW LVM_FIRST 76 + ; inline add-windows-message
-: LVM_INSERTITEMA LVM_FIRST 7 + ; inline add-windows-message
-: LVM_INSERTITEMW LVM_FIRST 77 + ; inline add-windows-message
-: LVM_DELETEITEM LVM_FIRST 8 + ; inline add-windows-message
-: LVM_DELETEALLITEMS LVM_FIRST 9 + ; inline add-windows-message
-: LVM_GETCALLBACKMASK LVM_FIRST 10 + ; inline add-windows-message
-: LVM_SETCALLBACKMASK LVM_FIRST 11 + ; inline add-windows-message
-: LVM_FINDITEMA LVM_FIRST 13 + ; inline add-windows-message
-: LVM_FINDITEMW LVM_FIRST 83 + ; inline add-windows-message
-: LVM_GETITEMRECT LVM_FIRST 14 + ; inline add-windows-message
-: LVM_SETITEMPOSITION LVM_FIRST 15 + ; inline add-windows-message
-: LVM_GETITEMPOSITION LVM_FIRST 16 + ; inline add-windows-message
-: LVM_GETSTRINGWIDTHA LVM_FIRST 17 + ; inline add-windows-message
-: LVM_GETSTRINGWIDTHW LVM_FIRST 87 + ; inline add-windows-message
-: LVM_HITTEST LVM_FIRST 18 + ; inline add-windows-message
-: LVM_ENSUREVISIBLE LVM_FIRST 19 + ; inline add-windows-message
-: LVM_SCROLL LVM_FIRST 20 + ; inline add-windows-message
-: LVM_REDRAWITEMS LVM_FIRST 21 + ; inline add-windows-message
-: LVM_ARRANGE LVM_FIRST 22 + ; inline add-windows-message
-: LVM_EDITLABELA LVM_FIRST 23 + ; inline add-windows-message
-: LVM_EDITLABELW LVM_FIRST 118 + ; inline add-windows-message
-: LVM_GETEDITCONTROL LVM_FIRST 24 + ; inline add-windows-message
-: LVM_GETCOLUMNA LVM_FIRST 25 + ; inline add-windows-message
-: LVM_GETCOLUMNW LVM_FIRST 95 + ; inline add-windows-message
-: LVM_SETCOLUMNA LVM_FIRST 26 + ; inline add-windows-message
-: LVM_SETCOLUMNW LVM_FIRST 96 + ; inline add-windows-message
-: LVM_INSERTCOLUMNA LVM_FIRST 27 + ; inline add-windows-message
-: LVM_INSERTCOLUMNW LVM_FIRST 97 + ; inline add-windows-message
-: LVM_DELETECOLUMN LVM_FIRST 28 + ; inline add-windows-message
-: LVM_GETCOLUMNWIDTH LVM_FIRST 29 + ; inline add-windows-message
-: LVM_SETCOLUMNWIDTH LVM_FIRST 30 + ; inline add-windows-message
-: LVM_CREATEDRAGIMAGE LVM_FIRST 33 + ; inline add-windows-message
-: LVM_GETVIEWRECT LVM_FIRST 34 + ; inline add-windows-message
-: LVM_GETTEXTCOLOR LVM_FIRST 35 + ; inline add-windows-message
-: LVM_SETTEXTCOLOR LVM_FIRST 36 + ; inline add-windows-message
-: LVM_GETTEXTBKCOLOR LVM_FIRST 37 + ; inline add-windows-message
-: LVM_SETTEXTBKCOLOR LVM_FIRST 38 + ; inline add-windows-message
-: LVM_GETTOPINDEX LVM_FIRST 39 + ; inline add-windows-message
-: LVM_GETCOUNTPERPAGE LVM_FIRST 40 + ; inline add-windows-message
-: LVM_GETORIGIN LVM_FIRST 41 + ; inline add-windows-message
-: LVM_UPDATE LVM_FIRST 42 + ; inline add-windows-message
-: LVM_SETITEMSTATE LVM_FIRST 43 + ; inline add-windows-message
-: LVM_GETITEMSTATE LVM_FIRST 44 + ; inline add-windows-message
-: LVM_GETITEMTEXTA LVM_FIRST 45 + ; inline add-windows-message
-: LVM_GETITEMTEXTW LVM_FIRST 115 + ; inline add-windows-message
-: LVM_SETITEMTEXTA LVM_FIRST 46 + ; inline add-windows-message
-: LVM_SETITEMTEXTW LVM_FIRST 116 + ; inline add-windows-message
-: LVM_SETITEMCOUNT LVM_FIRST 47 + ; inline add-windows-message
-: LVM_SORTITEMS LVM_FIRST 48 + ; inline add-windows-message
-: LVM_SETITEMPOSITION32 LVM_FIRST 49 + ; inline add-windows-message
-: LVM_GETSELECTEDCOUNT LVM_FIRST 50 + ; inline add-windows-message
-: LVM_GETITEMSPACING LVM_FIRST 51 + ; inline add-windows-message
-: LVM_GETISEARCHSTRINGA LVM_FIRST 52 + ; inline add-windows-message
-: LVM_GETISEARCHSTRINGW LVM_FIRST 117 + ; inline add-windows-message
-: LVM_SETICONSPACING LVM_FIRST 53 + ; inline add-windows-message
-: LVM_SETEXTENDEDLISTVIEWSTYLE LVM_FIRST 54 + ; inline add-windows-message
-: LVM_GETEXTENDEDLISTVIEWSTYLE LVM_FIRST 55 + ; inline add-windows-message
-: LVM_GETSUBITEMRECT LVM_FIRST 56 + ; inline add-windows-message
-: LVM_SUBITEMHITTEST LVM_FIRST 57 + ; inline add-windows-message
-: LVM_SETCOLUMNORDERARRAY LVM_FIRST 58 + ; inline add-windows-message
-: LVM_GETCOLUMNORDERARRAY LVM_FIRST 59 + ; inline add-windows-message
-: LVM_SETHOTITEM LVM_FIRST 60 + ; inline add-windows-message
-: LVM_GETHOTITEM LVM_FIRST 61 + ; inline add-windows-message
-: LVM_SETHOTCURSOR LVM_FIRST 62 + ; inline add-windows-message
-: LVM_GETHOTCURSOR LVM_FIRST 63 + ; inline add-windows-message
-: LVM_APPROXIMATEVIEWRECT LVM_FIRST 64 + ; inline add-windows-message
-: LVM_SETWORKAREAS LVM_FIRST 65 + ; inline add-windows-message
-: LVM_GETWORKAREAS LVM_FIRST 70 + ; inline add-windows-message
-: LVM_GETNUMBEROFWORKAREAS LVM_FIRST 73 + ; inline add-windows-message
-: LVM_GETSELECTIONMARK LVM_FIRST 66 + ; inline add-windows-message
-: LVM_SETSELECTIONMARK LVM_FIRST 67 + ; inline add-windows-message
-: LVM_SETHOVERTIME LVM_FIRST 71 + ; inline add-windows-message
-: LVM_GETHOVERTIME LVM_FIRST 72 + ; inline add-windows-message
-: LVM_SETTOOLTIPS LVM_FIRST 74 + ; inline add-windows-message
-: LVM_GETTOOLTIPS LVM_FIRST 78 + ; inline add-windows-message
-: LVM_SORTITEMSEX LVM_FIRST 81 + ; inline add-windows-message
-: LVM_SETBKIMAGEA LVM_FIRST 68 + ; inline add-windows-message
-: LVM_SETBKIMAGEW LVM_FIRST 138 + ; inline add-windows-message
-: LVM_GETBKIMAGEA LVM_FIRST 69 + ; inline add-windows-message
-: LVM_GETBKIMAGEW LVM_FIRST 139 + ; inline add-windows-message
-: LVM_SETSELECTEDCOLUMN LVM_FIRST 140 + ; inline add-windows-message
-: LVM_SETTILEWIDTH LVM_FIRST 141 + ; inline add-windows-message
-: LVM_SETVIEW LVM_FIRST 142 + ; inline add-windows-message
-: LVM_GETVIEW LVM_FIRST 143 + ; inline add-windows-message
-: LVM_INSERTGROUP LVM_FIRST 145 + ; inline add-windows-message
-: LVM_SETGROUPINFO LVM_FIRST 147 + ; inline add-windows-message
-: LVM_GETGROUPINFO LVM_FIRST 149 + ; inline add-windows-message
-: LVM_REMOVEGROUP LVM_FIRST 150 + ; inline add-windows-message
-: LVM_MOVEGROUP LVM_FIRST 151 + ; inline add-windows-message
-: LVM_MOVEITEMTOGROUP LVM_FIRST 154 + ; inline add-windows-message
-: LVM_SETGROUPMETRICS LVM_FIRST 155 + ; inline add-windows-message
-: LVM_GETGROUPMETRICS LVM_FIRST 156 + ; inline add-windows-message
-: LVM_ENABLEGROUPVIEW LVM_FIRST 157 + ; inline add-windows-message
-: LVM_SORTGROUPS LVM_FIRST 158 + ; inline add-windows-message
-: LVM_INSERTGROUPSORTED LVM_FIRST 159 + ; inline add-windows-message
-: LVM_REMOVEALLGROUPS LVM_FIRST 160 + ; inline add-windows-message
-: LVM_HASGROUP LVM_FIRST 161 + ; inline add-windows-message
-: LVM_SETTILEVIEWINFO LVM_FIRST 162 + ; inline add-windows-message
-: LVM_GETTILEVIEWINFO LVM_FIRST 163 + ; inline add-windows-message
-: LVM_SETTILEINFO LVM_FIRST 164 + ; inline add-windows-message
-: LVM_GETTILEINFO LVM_FIRST 165 + ; inline add-windows-message
-: LVM_SETINSERTMARK LVM_FIRST 166 + ; inline add-windows-message
-: LVM_GETINSERTMARK LVM_FIRST 167 + ; inline add-windows-message
-: LVM_INSERTMARKHITTEST LVM_FIRST 168 + ; inline add-windows-message
-: LVM_GETINSERTMARKRECT LVM_FIRST 169 + ; inline add-windows-message
-: LVM_SETINSERTMARKCOLOR LVM_FIRST 170 + ; inline add-windows-message
-: LVM_GETINSERTMARKCOLOR LVM_FIRST 171 + ; inline add-windows-message
-: LVM_SETINFOTIP LVM_FIRST 173 + ; inline add-windows-message
-: LVM_GETSELECTEDCOLUMN LVM_FIRST 174 + ; inline add-windows-message
-: LVM_ISGROUPVIEWENABLED LVM_FIRST 175 + ; inline add-windows-message
-: LVM_GETOUTLINECOLOR LVM_FIRST 176 + ; inline add-windows-message
-: LVM_SETOUTLINECOLOR LVM_FIRST 177 + ; inline add-windows-message
-: LVM_CANCELEDITLABEL LVM_FIRST 179 + ; inline add-windows-message
-: LVM_MAPINDEXTOID LVM_FIRST 180 + ; inline add-windows-message
-: LVM_MAPIDTOINDEX LVM_FIRST 181 + ; inline add-windows-message
-: TVM_INSERTITEMA TV_FIRST 0 + ; inline add-windows-message
-: TVM_INSERTITEMW TV_FIRST 50 + ; inline add-windows-message
-: TVM_DELETEITEM TV_FIRST 1 + ; inline add-windows-message
-: TVM_EXPAND TV_FIRST 2 + ; inline add-windows-message
-: TVM_GETITEMRECT TV_FIRST 4 + ; inline add-windows-message
-: TVM_GETCOUNT TV_FIRST 5 + ; inline add-windows-message
-: TVM_GETINDENT TV_FIRST 6 + ; inline add-windows-message
-: TVM_SETINDENT TV_FIRST 7 + ; inline add-windows-message
-: TVM_GETIMAGELIST TV_FIRST 8 + ; inline add-windows-message
-: TVM_SETIMAGELIST TV_FIRST 9 + ; inline add-windows-message
-: TVM_GETNEXTITEM TV_FIRST 10 + ; inline add-windows-message
-: TVM_SELECTITEM TV_FIRST 11 + ; inline add-windows-message
-: TVM_GETITEMA TV_FIRST 12 + ; inline add-windows-message
-: TVM_GETITEMW TV_FIRST 62 + ; inline add-windows-message
-: TVM_SETITEMA TV_FIRST 13 + ; inline add-windows-message
-: TVM_SETITEMW TV_FIRST 63 + ; inline add-windows-message
-: TVM_EDITLABELA TV_FIRST 14 + ; inline add-windows-message
-: TVM_EDITLABELW TV_FIRST 65 + ; inline add-windows-message
-: TVM_GETEDITCONTROL TV_FIRST 15 + ; inline add-windows-message
-: TVM_GETVISIBLECOUNT TV_FIRST 16 + ; inline add-windows-message
-: TVM_HITTEST TV_FIRST 17 + ; inline add-windows-message
-: TVM_CREATEDRAGIMAGE TV_FIRST 18 + ; inline add-windows-message
-: TVM_SORTCHILDREN TV_FIRST 19 + ; inline add-windows-message
-: TVM_ENSUREVISIBLE TV_FIRST 20 + ; inline add-windows-message
-: TVM_SORTCHILDRENCB TV_FIRST 21 + ; inline add-windows-message
-: TVM_ENDEDITLABELNOW TV_FIRST 22 + ; inline add-windows-message
-: TVM_GETISEARCHSTRINGA TV_FIRST 23 + ; inline add-windows-message
-: TVM_GETISEARCHSTRINGW TV_FIRST 64 + ; inline add-windows-message
-: TVM_SETTOOLTIPS TV_FIRST 24 + ; inline add-windows-message
-: TVM_GETTOOLTIPS TV_FIRST 25 + ; inline add-windows-message
-: TVM_SETINSERTMARK TV_FIRST 26 + ; inline add-windows-message
-: TVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: TVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: TVM_SETITEMHEIGHT TV_FIRST 27 + ; inline add-windows-message
-: TVM_GETITEMHEIGHT TV_FIRST 28 + ; inline add-windows-message
-: TVM_SETBKCOLOR TV_FIRST 29 + ; inline add-windows-message
-: TVM_SETTEXTCOLOR TV_FIRST 30 + ; inline add-windows-message
-: TVM_GETBKCOLOR TV_FIRST 31 + ; inline add-windows-message
-: TVM_GETTEXTCOLOR TV_FIRST 32 + ; inline add-windows-message
-: TVM_SETSCROLLTIME TV_FIRST 33 + ; inline add-windows-message
-: TVM_GETSCROLLTIME TV_FIRST 34 + ; inline add-windows-message
-: TVM_SETINSERTMARKCOLOR TV_FIRST 37 + ; inline add-windows-message
-: TVM_GETINSERTMARKCOLOR TV_FIRST 38 + ; inline add-windows-message
-: TVM_GETITEMSTATE TV_FIRST 39 + ; inline add-windows-message
-: TVM_SETLINECOLOR TV_FIRST 40 + ; inline add-windows-message
-: TVM_GETLINECOLOR TV_FIRST 41 + ; inline add-windows-message
-: TVM_MAPACCIDTOHTREEITEM TV_FIRST 42 + ; inline add-windows-message
-: TVM_MAPHTREEITEMTOACCID TV_FIRST 43 + ; inline add-windows-message
-: CBEM_INSERTITEMA WM_USER 1 + ; inline add-windows-message
-: CBEM_SETIMAGELIST WM_USER 2 + ; inline add-windows-message
-: CBEM_GETIMAGELIST WM_USER 3 + ; inline add-windows-message
-: CBEM_GETITEMA WM_USER 4 + ; inline add-windows-message
-: CBEM_SETITEMA WM_USER 5 + ; inline add-windows-message
-: CBEM_DELETEITEM CB_DELETESTRING ; inline add-windows-message
-: CBEM_GETCOMBOCONTROL WM_USER 6 + ; inline add-windows-message
-: CBEM_GETEDITCONTROL WM_USER 7 + ; inline add-windows-message
-: CBEM_SETEXTENDEDSTYLE WM_USER 14 + ; inline add-windows-message
-: CBEM_GETEXTENDEDSTYLE WM_USER 9 + ; inline add-windows-message
-: CBEM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: CBEM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: CBEM_SETEXSTYLE WM_USER 8 + ; inline add-windows-message
-: CBEM_GETEXSTYLE WM_USER 9 + ; inline add-windows-message
-: CBEM_HASEDITCHANGED WM_USER 10 + ; inline add-windows-message
-: CBEM_INSERTITEMW WM_USER 11 + ; inline add-windows-message
-: CBEM_SETITEMW WM_USER 12 + ; inline add-windows-message
-: CBEM_GETITEMW WM_USER 13 + ; inline add-windows-message
-: TCM_GETIMAGELIST TCM_FIRST 2 + ; inline add-windows-message
-: TCM_SETIMAGELIST TCM_FIRST 3 + ; inline add-windows-message
-: TCM_GETITEMCOUNT TCM_FIRST 4 + ; inline add-windows-message
-: TCM_GETITEMA TCM_FIRST 5 + ; inline add-windows-message
-: TCM_GETITEMW TCM_FIRST 60 + ; inline add-windows-message
-: TCM_SETITEMA TCM_FIRST 6 + ; inline add-windows-message
-: TCM_SETITEMW TCM_FIRST 61 + ; inline add-windows-message
-: TCM_INSERTITEMA TCM_FIRST 7 + ; inline add-windows-message
-: TCM_INSERTITEMW TCM_FIRST 62 + ; inline add-windows-message
-: TCM_DELETEITEM TCM_FIRST 8 + ; inline add-windows-message
-: TCM_DELETEALLITEMS TCM_FIRST 9 + ; inline add-windows-message
-: TCM_GETITEMRECT TCM_FIRST 10 + ; inline add-windows-message
-: TCM_GETCURSEL TCM_FIRST 11 + ; inline add-windows-message
-: TCM_SETCURSEL TCM_FIRST 12 + ; inline add-windows-message
-: TCM_HITTEST TCM_FIRST 13 + ; inline add-windows-message
-: TCM_SETITEMEXTRA TCM_FIRST 14 + ; inline add-windows-message
-: TCM_ADJUSTRECT TCM_FIRST 40 + ; inline add-windows-message
-: TCM_SETITEMSIZE TCM_FIRST 41 + ; inline add-windows-message
-: TCM_REMOVEIMAGE TCM_FIRST 42 + ; inline add-windows-message
-: TCM_SETPADDING TCM_FIRST 43 + ; inline add-windows-message
-: TCM_GETROWCOUNT TCM_FIRST 44 + ; inline add-windows-message
-: TCM_GETTOOLTIPS TCM_FIRST 45 + ; inline add-windows-message
-: TCM_SETTOOLTIPS TCM_FIRST 46 + ; inline add-windows-message
-: TCM_GETCURFOCUS TCM_FIRST 47 + ; inline add-windows-message
-: TCM_SETCURFOCUS TCM_FIRST 48 + ; inline add-windows-message
-: TCM_SETMINTABWIDTH TCM_FIRST 49 + ; inline add-windows-message
-: TCM_DESELECTALL TCM_FIRST 50 + ; inline add-windows-message
-: TCM_HIGHLIGHTITEM TCM_FIRST 51 + ; inline add-windows-message
-: TCM_SETEXTENDEDSTYLE TCM_FIRST 52 + ; inline add-windows-message
-: TCM_GETEXTENDEDSTYLE TCM_FIRST 53 + ; inline add-windows-message
-: TCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: TCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: ACM_OPENA WM_USER 100 + ; inline add-windows-message
-: ACM_OPENW WM_USER 103 + ; inline add-windows-message
-: ACM_PLAY WM_USER 101 + ; inline add-windows-message
-: ACM_STOP WM_USER 102 + ; inline add-windows-message
-: MCM_FIRST HEX: 1000 ; inline add-windows-message
-: MCM_GETCURSEL MCM_FIRST 1 + ; inline add-windows-message
-: MCM_SETCURSEL MCM_FIRST 2 + ; inline add-windows-message
-: MCM_GETMAXSELCOUNT MCM_FIRST 3 + ; inline add-windows-message
-: MCM_SETMAXSELCOUNT MCM_FIRST 4 + ; inline add-windows-message
-: MCM_GETSELRANGE MCM_FIRST 5 + ; inline add-windows-message
-: MCM_SETSELRANGE MCM_FIRST 6 + ; inline add-windows-message
-: MCM_GETMONTHRANGE MCM_FIRST 7 + ; inline add-windows-message
-: MCM_SETDAYSTATE MCM_FIRST 8 + ; inline add-windows-message
-: MCM_GETMINREQRECT MCM_FIRST 9 + ; inline add-windows-message
-: MCM_SETCOLOR MCM_FIRST 10 + ; inline add-windows-message
-: MCM_GETCOLOR MCM_FIRST 11 + ; inline add-windows-message
-: MCM_SETTODAY MCM_FIRST 12 + ; inline add-windows-message
-: MCM_GETTODAY MCM_FIRST 13 + ; inline add-windows-message
-: MCM_HITTEST MCM_FIRST 14 + ; inline add-windows-message
-: MCM_SETFIRSTDAYOFWEEK MCM_FIRST 15 + ; inline add-windows-message
-: MCM_GETFIRSTDAYOFWEEK MCM_FIRST 16 + ; inline add-windows-message
-: MCM_GETRANGE MCM_FIRST 17 + ; inline add-windows-message
-: MCM_SETRANGE MCM_FIRST 18 + ; inline add-windows-message
-: MCM_GETMONTHDELTA MCM_FIRST 19 + ; inline add-windows-message
-: MCM_SETMONTHDELTA MCM_FIRST 20 + ; inline add-windows-message
-: MCM_GETMAXTODAYWIDTH MCM_FIRST 21 + ; inline add-windows-message
-: MCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT ; inline add-windows-message
-: MCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT ; inline add-windows-message
-: DTM_FIRST HEX: 1000 ; inline add-windows-message
-: DTM_GETSYSTEMTIME DTM_FIRST 1 + ; inline add-windows-message
-: DTM_SETSYSTEMTIME DTM_FIRST 2 + ; inline add-windows-message
-: DTM_GETRANGE DTM_FIRST 3 + ; inline add-windows-message
-: DTM_SETRANGE DTM_FIRST 4 + ; inline add-windows-message
-: DTM_SETFORMATA DTM_FIRST 5 + ; inline add-windows-message
-: DTM_SETFORMATW DTM_FIRST 50 + ; inline add-windows-message
-: DTM_SETMCCOLOR DTM_FIRST 6 + ; inline add-windows-message
-: DTM_GETMCCOLOR DTM_FIRST 7 + ; inline add-windows-message
-: DTM_GETMONTHCAL DTM_FIRST 8 + ; inline add-windows-message
-: DTM_SETMCFONT DTM_FIRST 9 + ; inline add-windows-message
-: DTM_GETMCFONT DTM_FIRST 10 + ; inline add-windows-message
-: PGM_SETCHILD PGM_FIRST 1 + ; inline add-windows-message
-: PGM_RECALCSIZE PGM_FIRST 2 + ; inline add-windows-message
-: PGM_FORWARDMOUSE PGM_FIRST 3 + ; inline add-windows-message
-: PGM_SETBKCOLOR PGM_FIRST 4 + ; inline add-windows-message
-: PGM_GETBKCOLOR PGM_FIRST 5 + ; inline add-windows-message
-: PGM_SETBORDER PGM_FIRST 6 + ; inline add-windows-message
-: PGM_GETBORDER PGM_FIRST 7 + ; inline add-windows-message
-: PGM_SETPOS PGM_FIRST 8 + ; inline add-windows-message
-: PGM_GETPOS PGM_FIRST 9 + ; inline add-windows-message
-: PGM_SETBUTTONSIZE PGM_FIRST 10 + ; inline add-windows-message
-: PGM_GETBUTTONSIZE PGM_FIRST 11 + ; inline add-windows-message
-: PGM_GETBUTTONSTATE PGM_FIRST 12 + ; inline add-windows-message
-: PGM_GETDROPTARGET CCM_GETDROPTARGET ; inline add-windows-message
-: BCM_GETIDEALSIZE BCM_FIRST 1 + ; inline add-windows-message
-: BCM_SETIMAGELIST BCM_FIRST 2 + ; inline add-windows-message
-: BCM_GETIMAGELIST BCM_FIRST 3 + ; inline add-windows-message
-: BCM_SETTEXTMARGIN BCM_FIRST 4 + ; inline add-windows-message
-: BCM_GETTEXTMARGIN BCM_FIRST 5 + ; inline add-windows-message
-: EM_SETCUEBANNER ECM_FIRST 1 + ; inline add-windows-message
-: EM_GETCUEBANNER ECM_FIRST 2 + ; inline add-windows-message
-: EM_SHOWBALLOONTIP ECM_FIRST 3 + ; inline add-windows-message
-: EM_HIDEBALLOONTIP ECM_FIRST 4 + ; inline add-windows-message
-: CB_SETMINVISIBLE CBM_FIRST 1 + ; inline add-windows-message
-: CB_GETMINVISIBLE CBM_FIRST 2 + ; inline add-windows-message
-: LM_HITTEST WM_USER HEX: 0300 + ; inline add-windows-message
-: LM_GETIDEALHEIGHT WM_USER HEX: 0301 + ; inline add-windows-message
-: LM_SETITEM WM_USER HEX: 0302 + ; inline add-windows-message
-: LM_GETITEM WM_USER HEX: 0303 + ; inline add-windows-message
+++ /dev/null
-! :folding=indent:collapseFolds=1:
-
-! $Id: winsock.factor,v 1.8 2005/09/12 15:10:33 erg Exp $
-!
-! Copyright (C) 2004 Mackenzie Straight.
-!
-! Redistribution and use in source and binary forms, with or without
-! modification, are permitted provided that the following conditions are met:
-!
-! 1. Redistributions of source code must retain the above copyright notice,
-! this list of conditions and the following disclaimer.
-!
-! 2. Redistributions in binary form must reproduce the above copyright notice,
-! this list of conditions and the following disclaimer in the documentation
-! and/or other materials provided with the distribution.
-!
-! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-IN: win32-api
-USE: alien
-USE: kernel
-USE: kernel-internals
-USE: sequences-internals
-USE: arrays
-
-: <wsadata> HEX: 190 <byte-array> ;
-
-: AF_INET 2 ;
-: SOCK_STREAM 1 ;
-: WSA_FLAG_OVERLAPPED 1 ;
-: INADDR_ANY 0 ;
-
-BEGIN-STRUCT: sockaddr-in
- FIELD: short family
- FIELD: short port
- FIELD: int addr
- FIELD: char pad
- FIELD: char pad
- FIELD: char pad
- FIELD: char pad
- FIELD: char pad
- FIELD: char pad
- FIELD: char pad
- FIELD: char pad
-END-STRUCT
-
-: WSAStartup ( version out-data -- int )
- "int" "winsock" "WSAStartup" [ "short" "void*" ] alien-invoke ;
-
-: WSASocket ( af type protocol protocol-info g flags -- socket )
- "void*" "winsock" "WSASocketA" [ "int" "int" "int" "void*" "void*" "int" ]
- alien-invoke ;
-
-: htons ( short -- short )
- "ushort" "winsock" "htons" [ "ushort" ] alien-invoke ;
-
-: ntohs ( short -- short )
- "ushort" "winsock" "ntohs" [ "ushort" ] alien-invoke ;
-
-: wsa-bind ( socket sockaddr len -- status )
- "int" "winsock" "bind" [ "void*" "sockaddr-in*" "int" ] alien-invoke ;
-
-: wsa-listen ( socket backlog -- status )
- "int" "winsock" "listen" [ "void*" "int" ] alien-invoke ;
-
-: WSAGetLastError ( -- error )
- "int" "winsock" "WSAGetLastError" [ ] alien-invoke ;
-
-: inet-ntoa ( in-addr -- str )
- "char*" "winsock" "inet_ntoa" [ "int" ] alien-invoke ;
-
-: AcceptEx
-( listen accept out-buf recv-len addr-len remote-len out-len overlapped -- ? )
- "bool" "mswsock" "AcceptEx"
- [ "void*" "void*" "void*" "int" "int" "int" "void*" "void*" ]
- alien-invoke ;
-
-: GetAcceptExSockaddrs ( stack effect is too long to put here -- )
- "void" "mswsock" "GetAcceptExSockaddrs"
- [ "void*" "int" "int" "int" "void*" "void*" "void*" "void*" ] alien-invoke ;
-
-BEGIN-STRUCT: hostent
- FIELD: char* name
- FIELD: void* aliases
- FIELD: short addrtype
- FIELD: short length
- FIELD: void* addr-list
-END-STRUCT
-
-: hostent-addr hostent-addr-list *void* *uint ;
-
-: gethostbyname ( name -- hostent )
- "hostent*" "winsock" "gethostbyname" [ "char*" ] alien-invoke ;
-
-: connect ( socket sockaddr addrlen -- int )
- "int" "winsock" "connect" [ "void*" "sockaddr-in*" "int" ]
- alien-invoke ;
-
CFLAGS += -DWINDOWS
LIBS = -lm
PLAF_SUFFIX = .exe
+PLAF_OBJS = vm/os-windows.o
-#include "factor.h"
-
-/* test if alien is no longer valid (it survived an image save/load) */
-void primitive_expired(void)
-{
- CELL object = dpeek();
-
- if(type_of(object) == ALIEN_TYPE)
- {
- ALIEN *alien = untag_alien_fast(object);
- drepl(tag_boolean(alien->expired));
- }
- else if(object == F)
- drepl(T);
- else
- drepl(F);
-}
-
-/* gets the address of an object representing a C pointer */
-void *alien_offset(CELL object)
-{
- ALIEN *alien;
- F_ARRAY *array;
-
- switch(type_of(object))
- {
- case BYTE_ARRAY_TYPE:
- array = untag_byte_array_fast(object);
- return array + 1;
- case ALIEN_TYPE:
- alien = untag_alien_fast(object);
- if(alien->expired)
- general_error(ERROR_EXPIRED,object,F,true);
- return alien_offset(alien->alien) + alien->displacement;
- case F_TYPE:
- return NULL;
- default:
- type_error(ALIEN_TYPE,object);
- return (void*)-1; /* can't happen */
- }
-}
-
-/* pop an object representing a C pointer */
-void *unbox_alien(void)
-{
- return alien_offset(dpop());
-}
-
-/* pop ( alien n ) from datastack, return alien's address plus n */
-INLINE void *alien_pointer(void)
-{
- F_FIXNUM offset = unbox_signed_cell();
- return unbox_alien() + offset;
-}
-
-/* make an alien */
-ALIEN *make_alien(CELL delegate, CELL displacement)
-{
- ALIEN *alien = allot_object(ALIEN_TYPE,sizeof(ALIEN));
- alien->alien = delegate;
- alien->displacement = displacement;
- alien->expired = false;
- return alien;
-}
-
-/* make an alien and push */
-void box_alien(CELL ptr)
-{
- if(ptr == 0)
- dpush(F);
- else
- dpush(tag_object(make_alien(F,ptr)));
-}
-
-/* make an alien pointing at an offset of another alien */
-void primitive_displaced_alien(void)
-{
- CELL alien;
- CELL displacement;
- maybe_gc(sizeof(ALIEN));
- alien = dpop();
- displacement = unbox_unsigned_cell();
- if(alien == F && displacement == 0)
- dpush(F);
- else
- dpush(tag_object(make_alien(alien,displacement)));
-}
-
-/* address of an object representing a C pointer */
-void primitive_alien_address(void)
-{
- box_unsigned_cell((CELL)alien_offset(dpop()));
-}
-
-/* image loading */
-void fixup_alien(ALIEN *d)
-{
- data_fixup(&d->alien);
- d->expired = true;
-}
-
-/* GC */
-void collect_alien(ALIEN *d)
-{
- copy_handle(&d->alien);
-}
-
-/* define words to read/write numericals values at an alien address */
-#define DEF_ALIEN_SLOT(name,type,boxer) \
-void primitive_alien_##name (void) \
-{ \
- box_##boxer (*(type*)alien_pointer()); \
-} \
-void primitive_set_alien_##name (void) \
-{ \
- type* ptr = alien_pointer(); \
- type value = unbox_##boxer(); \
- *ptr = value; \
-}
-
-DEF_ALIEN_SLOT(signed_cell,F_FIXNUM,signed_cell)
-DEF_ALIEN_SLOT(unsigned_cell,CELL,unsigned_cell)
-DEF_ALIEN_SLOT(signed_8,s64,signed_8)
-DEF_ALIEN_SLOT(unsigned_8,u64,unsigned_8)
-DEF_ALIEN_SLOT(signed_4,s32,signed_4)
-DEF_ALIEN_SLOT(unsigned_4,u32,unsigned_4)
-DEF_ALIEN_SLOT(signed_2,s16,signed_2)
-DEF_ALIEN_SLOT(unsigned_2,u16,unsigned_2)
-DEF_ALIEN_SLOT(signed_1,u8,signed_1)
-DEF_ALIEN_SLOT(unsigned_1,u8,unsigned_1)
-DEF_ALIEN_SLOT(float,float,float)
-DEF_ALIEN_SLOT(double,double,double)
-
-/* for FFI calls passing structs by value */
-void unbox_value_struct(void *dest, CELL size)
-{
- memcpy(dest,unbox_alien(),size);
-}
-
-/* for FFI callbacks receiving structs by value */
-void box_value_struct(void *src, CELL size)
-{
- F_ARRAY *array = byte_array(size);
- memcpy(array + 1,src,size);
- dpush(tag_object(array));
-}
-
-/* for FFI calls returning an 8-byte struct. This only
-happends on Intel Mac OS X */
-void box_value_pair(CELL x, CELL y)
-{
- F_ARRAY *array = byte_array(8);
- put(AREF(array,0),x);
- put(AREF(array,1),y);
- dpush(tag_object(array));
-}
-
-void primitive_dlopen(void)
-{
- DLL* dll;
- F_STRING* path;
-
- maybe_gc(sizeof(DLL));
-
- path = untag_string(dpop());
- dll = allot_object(DLL_TYPE,sizeof(DLL));
- dll->path = tag_object(path);
- ffi_dlopen(dll,true);
-
- dpush(tag_object(dll));
-}
-
-void primitive_dlsym(void)
-{
- CELL dll;
- F_STRING *sym;
- DLL *d;
-
- maybe_gc(0);
-
- dll = dpop();
- sym = untag_string(dpop());
-
- if(dll == F)
- d = NULL;
- else
- {
- d = untag_dll(dll);
- if(d->dll == NULL)
- general_error(ERROR_EXPIRED,dll,F,true);
- }
-
- dpush(tag_cell((CELL)ffi_dlsym(d,sym,true)));
-}
-
-void primitive_dlclose(void)
-{
- ffi_dlclose(untag_dll(dpop()));
-}
-
-void fixup_dll(DLL* dll)
-{
- data_fixup(&dll->path);
- ffi_dlopen(dll,false);
-}
-
-void collect_dll(DLL* dll)
-{
- copy_handle(&dll->path);
-}
+#include "factor.h"\r
+\r
+/* test if alien is no longer valid (it survived an image save/load) */\r
+void primitive_expired(void)\r
+{\r
+ CELL object = dpeek();\r
+\r
+ if(type_of(object) == ALIEN_TYPE)\r
+ {\r
+ ALIEN *alien = untag_alien_fast(object);\r
+ drepl(tag_boolean(alien->expired));\r
+ }\r
+ else if(object == F)\r
+ drepl(T);\r
+ else\r
+ drepl(F);\r
+}\r
+\r
+/* gets the address of an object representing a C pointer */\r
+void *alien_offset(CELL object)\r
+{\r
+ ALIEN *alien;\r
+ F_ARRAY *array;\r
+\r
+ switch(type_of(object))\r
+ {\r
+ case BYTE_ARRAY_TYPE:\r
+ array = untag_byte_array_fast(object);\r
+ return array + 1;\r
+ case ALIEN_TYPE:\r
+ alien = untag_alien_fast(object);\r
+ if(alien->expired)\r
+ general_error(ERROR_EXPIRED,object,F,true);\r
+ return alien_offset(alien->alien) + alien->displacement;\r
+ case F_TYPE:\r
+ return NULL;\r
+ default:\r
+ type_error(ALIEN_TYPE,object);\r
+ return (void*)-1; /* can't happen */\r
+ }\r
+}\r
+\r
+/* pop an object representing a C pointer */\r
+void *unbox_alien(void)\r
+{\r
+ return alien_offset(dpop());\r
+}\r
+\r
+/* pop ( alien n ) from datastack, return alien's address plus n */\r
+INLINE void *alien_pointer(void)\r
+{\r
+ F_FIXNUM offset = unbox_signed_cell();\r
+ return unbox_alien() + offset;\r
+}\r
+\r
+/* make an alien */\r
+ALIEN *make_alien(CELL delegate, CELL displacement)\r
+{\r
+ ALIEN *alien = allot_object(ALIEN_TYPE,sizeof(ALIEN));\r
+ alien->alien = delegate;\r
+ alien->displacement = displacement;\r
+ alien->expired = false;\r
+ return alien;\r
+}\r
+\r
+/* make an alien and push */\r
+void box_alien(CELL ptr)\r
+{\r
+ if(ptr == 0)\r
+ dpush(F);\r
+ else\r
+ dpush(tag_object(make_alien(F,ptr)));\r
+}\r
+\r
+/* make an alien pointing at an offset of another alien */\r
+void primitive_displaced_alien(void)\r
+{\r
+ CELL alien;\r
+ CELL displacement;\r
+ maybe_gc(sizeof(ALIEN));\r
+ alien = dpop();\r
+ displacement = unbox_unsigned_cell();\r
+ if(alien == F && displacement == 0)\r
+ dpush(F);\r
+ else\r
+ dpush(tag_object(make_alien(alien,displacement)));\r
+}\r
+\r
+/* address of an object representing a C pointer */\r
+void primitive_alien_address(void)\r
+{\r
+ box_unsigned_cell((CELL)alien_offset(dpop()));\r
+}\r
+\r
+/* image loading */\r
+void fixup_alien(ALIEN *d)\r
+{\r
+ data_fixup(&d->alien);\r
+ d->expired = true;\r
+}\r
+\r
+/* GC */\r
+void collect_alien(ALIEN *d)\r
+{\r
+ copy_handle(&d->alien);\r
+}\r
+\r
+/* define words to read/write numericals values at an alien address */\r
+#define DEF_ALIEN_SLOT(name,type,boxer) \\r
+void primitive_alien_##name (void) \\r
+{ \\r
+ box_##boxer (*(type*)alien_pointer()); \\r
+} \\r
+void primitive_set_alien_##name (void) \\r
+{ \\r
+ type* ptr = alien_pointer(); \\r
+ type value = unbox_##boxer(); \\r
+ *ptr = value; \\r
+}\r
+\r
+DEF_ALIEN_SLOT(signed_cell,F_FIXNUM,signed_cell)\r
+DEF_ALIEN_SLOT(unsigned_cell,CELL,unsigned_cell)\r
+DEF_ALIEN_SLOT(signed_8,s64,signed_8)\r
+DEF_ALIEN_SLOT(unsigned_8,u64,unsigned_8)\r
+DEF_ALIEN_SLOT(signed_4,s32,signed_4)\r
+DEF_ALIEN_SLOT(unsigned_4,u32,unsigned_4)\r
+DEF_ALIEN_SLOT(signed_2,s16,signed_2)\r
+DEF_ALIEN_SLOT(unsigned_2,u16,unsigned_2)\r
+DEF_ALIEN_SLOT(signed_1,u8,signed_1)\r
+DEF_ALIEN_SLOT(unsigned_1,u8,unsigned_1)\r
+DEF_ALIEN_SLOT(float,float,float)\r
+DEF_ALIEN_SLOT(double,double,double)\r
+\r
+/* for FFI calls passing structs by value */\r
+void unbox_value_struct(void *dest, CELL size)\r
+{\r
+ memcpy(dest,unbox_alien(),size);\r
+}\r
+\r
+/* for FFI callbacks receiving structs by value */\r
+void box_value_struct(void *src, CELL size)\r
+{\r
+ F_ARRAY *array = byte_array(size);\r
+ memcpy(array + 1,src,size);\r
+ dpush(tag_object(array));\r
+}\r
+\r
+/* for FFI calls returning an 8-byte struct. This only\r
+happends on Intel Mac OS X */\r
+void box_value_pair(CELL x, CELL y)\r
+{\r
+ F_ARRAY *array = byte_array(8);\r
+ put(AREF(array,0),x);\r
+ put(AREF(array,1),y);\r
+ dpush(tag_object(array));\r
+}\r
+\r
+void primitive_dlopen(void)\r
+{\r
+ DLL* dll;\r
+ F_STRING* path;\r
+\r
+ maybe_gc(sizeof(DLL));\r
+\r
+ path = untag_string(dpop());\r
+ dll = allot_object(DLL_TYPE,sizeof(DLL));\r
+ dll->path = tag_object(path);\r
+ ffi_dlopen(dll,true);\r
+\r
+ dpush(tag_object(dll));\r
+}\r
+\r
+void primitive_dlsym(void)\r
+{\r
+ CELL dll;\r
+ F_STRING *sym;\r
+ DLL *d;\r
+\r
+ maybe_gc(0);\r
+\r
+ dll = dpop();\r
+ sym = untag_string(dpop());\r
+ \r
+ if(dll == F)\r
+ d = NULL;\r
+ else\r
+ {\r
+ d = untag_dll(dll);\r
+ if(d->dll == NULL)\r
+ general_error(ERROR_EXPIRED,dll,F,true);\r
+ }\r
+\r
+ dpush(tag_cell((CELL)ffi_dlsym(d,sym,true)));\r
+}\r
+\r
+void primitive_dlclose(void)\r
+{\r
+ ffi_dlclose(untag_dll(dpop()));\r
+}\r
+\r
+void fixup_dll(DLL* dll)\r
+{\r
+ data_fixup(&dll->path);\r
+ ffi_dlopen(dll,false);\r
+}\r
+\r
+void collect_dll(DLL* dll)\r
+{\r
+ copy_handle(&dll->path);\r
+}\r
-#include "factor.h"
-
-/* frees memory allocated by win32 api calls */
-char *buffer_to_c_string(char *buffer)
-{
- int capacity = strlen(buffer);
- F_STRING *_c_str = allot_string(capacity / CHARS + 1);
- u8 *c_str = (u8*)(_c_str + 1);
- strcpy(c_str, buffer);
- LocalFree(buffer);
- return (char*)c_str;
-}
-
-F_STRING *get_error_message()
-{
- DWORD id = GetLastError();
- return from_c_string(error_message(id));
-}
-
-char *error_message(DWORD id)
-{
- char *buffer;
- int index;
-
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- id,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR) &buffer,
- 0, NULL);
-
- /* strip whitespace from end */
- index = strlen(buffer) - 1;
- while(index >= 0 && isspace(buffer[index]))
- buffer[index--] = 0;
-
- return buffer_to_c_string(buffer);
-}
-
-s64 current_millis(void)
-{
- FILETIME t;
- GetSystemTimeAsFileTime(&t);
- return (((s64)t.dwLowDateTime | (s64)t.dwHighDateTime<<32) - EPOCH_OFFSET)
- / 10000;
-}
-
-void ffi_dlopen (DLL *dll, bool error)
-{
- HMODULE module;
- char *path = to_c_string(untag_string(dll->path),true);
-
- module = LoadLibrary(path);
-
- if (!module)
- {
- dll->dll = NULL;
- if(error)
- general_error(ERROR_FFI, tag_object(get_error_message()),true);
- else
- return;
- }
-
- dll->dll = module;
-}
-
-void *ffi_dlsym (DLL *dll, F_STRING *symbol, bool error)
-{
- void *sym = GetProcAddress(dll ? (HMODULE)dll->dll : GetModuleHandle(NULL),
- to_c_string(symbol,true));
-
- if (!sym)
- {
- if(error)
- general_error(ERROR_FFI, tag_object(get_error_message()),true);
- else
- return NULL;
- }
-
- return sym;
-}
-
-void ffi_dlclose (DLL *dll)
-{
- FreeLibrary((HMODULE)dll->dll);
- dll->dll = NULL;
-}
-
-void primitive_stat(void)
-{
- F_STRING *path;
- WIN32_FILE_ATTRIBUTE_DATA st;
-
- maybe_gc(0);
- path = untag_string(dpop());
-
- if(!GetFileAttributesEx(to_c_string(path,true), GetFileExInfoStandard, &st))
- {
- dpush(F);
- }
- else
- {
- CELL dirp = tag_boolean(st.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
- CELL size = tag_bignum(s48_long_long_to_bignum(
- (s64)st.nFileSizeLow | (s64)st.nFileSizeHigh << 32));
- CELL mtime = tag_integer((int)
- ((*(s64*)&st.ftLastWriteTime - EPOCH_OFFSET) / 10000000));
- dpush(make_array_4(dirp,tag_fixnum(0),size,mtime));
- }
-}
-
-void primitive_read_dir(void)
-{
- F_STRING *path;
- HANDLE dir;
- WIN32_FIND_DATA find_data;
- F_ARRAY *result;
- CELL result_count = 0;
-
- maybe_gc(0);
-
- result = array(ARRAY_TYPE,100,F);
-
- path = untag_string(dpop());
- if (INVALID_HANDLE_VALUE != (dir = FindFirstFile(".\\*", &find_data)))
- {
- do
- {
- CELL name = tag_object(from_c_string(
- find_data.cFileName));
-
- if(result_count == array_capacity(result))
- {
- result = resize_array(result,
- result_count * 2,F);
- }
-
- put(AREF(result,result_count),name);
- result_count++;
- }
- while (FindNextFile(dir, &find_data));
- CloseHandle(dir);
- }
-
- result = resize_array(result,result_count,F);
-
- dpush(tag_object(result));
-}
-
-void primitive_cwd(void)
-{
- char buf[MAX_PATH];
-
- maybe_gc(0);
- if(!GetCurrentDirectory(MAX_PATH, buf))
- io_error();
-
- box_c_string(buf);
-}
-
-void primitive_cd(void)
-{
- maybe_gc(0);
- SetCurrentDirectory(pop_c_string());
-}
-
-BOUNDED_BLOCK *alloc_bounded_block(CELL size)
-{
- SYSTEM_INFO si;
- char *mem;
- DWORD ignore;
-
- GetSystemInfo(&si);
- if((mem = (char *)VirtualAlloc(NULL, si.dwPageSize*2 + size, MEM_COMMIT, PAGE_EXECUTE_READWRITE)) == 0)
- fatal_error("VirtualAlloc() failed in alloc_bounded_block()",0);
-
- if (!VirtualProtect(mem, si.dwPageSize, PAGE_NOACCESS, &ignore))
- fatal_error("Cannot allocate low guard page", (CELL)mem);
-
- if (!VirtualProtect(mem+size+si.dwPageSize, si.dwPageSize, PAGE_NOACCESS, &ignore))
- fatal_error("Cannot allocate high guard page", (CELL)mem);
-
- BOUNDED_BLOCK *block = safe_malloc(sizeof(BOUNDED_BLOCK));
-
- block->start = (int)mem + si.dwPageSize;
- block->size = size;
-
- return block;
-}
-
-void dealloc_bounded_block(BOUNDED_BLOCK *block)
-{
- SYSTEM_INFO si;
- GetSystemInfo(&si);
- if(!VirtualFree((void*)(block->start - si.dwPageSize), 0, MEM_RELEASE))
- fatal_error("VirtualFree() failed",0);
- free(block);
-}
-
-/* SEH support. Proceed with caution. */
-typedef long exception_handler_t(
- void *rec, void *frame, void *context, void *dispatch);
-
-typedef struct exception_record {
- struct exception_record *next_handler;
- void *handler_func;
-} exception_record_t;
-
-void seh_call(void (*func)(), exception_handler_t *handler)
-{
- exception_record_t record;
- asm("mov %%fs:0, %0" : "=r" (record.next_handler));
- asm("mov %0, %%fs:0" : : "r" (&record));
- record.handler_func = handler;
- func();
- asm("mov %0, %%fs:0" : "=r" (record.next_handler));
-}
-
-static long exception_handler(void *rec, void *frame, void *ctx, void *dispatch)
-{
- signal_error(SIGSEGV);
-}
-
-void platform_run(void)
-{
- seh_call(run_toplevel, exception_handler);
-}
-
-const char *default_image_path(void)
-{
- return "factor.image";
-}
+#include "factor.h"\r
+\r
+/* frees memory allocated by win32 api calls */\r
+char *buffer_to_char_string(char *buffer)\r
+{\r
+ int capacity = strlen(buffer);\r
+ F_STRING *_c_str = allot_string(capacity / CHARS + 1);\r
+ u8 *c_str = (u8*)(_c_str + 1);\r
+ strcpy(c_str, buffer);\r
+ LocalFree(buffer);\r
+ return (char*)c_str;\r
+}\r
+\r
+F_STRING *get_error_message()\r
+{\r
+ DWORD id = GetLastError();\r
+ return from_char_string(error_message(id));\r
+}\r
+\r
+char *error_message(DWORD id)\r
+{\r
+ char *buffer;\r
+ int index;\r
+ \r
+ FormatMessage(\r
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |\r
+ FORMAT_MESSAGE_FROM_SYSTEM,\r
+ NULL,\r
+ id,\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),\r
+ (LPTSTR) &buffer,\r
+ 0, NULL);\r
+\r
+ /* strip whitespace from end */\r
+ index = strlen(buffer) - 1;\r
+ while(index >= 0 && isspace(buffer[index]))\r
+ buffer[index--] = 0;\r
+ \r
+ return buffer_to_char_string(buffer);\r
+}\r
+\r
+s64 current_millis(void)\r
+{\r
+ FILETIME t;\r
+ GetSystemTimeAsFileTime(&t);\r
+ return (((s64)t.dwLowDateTime | (s64)t.dwHighDateTime<<32) - EPOCH_OFFSET) \r
+ / 10000;\r
+}\r
+\r
+void ffi_dlopen (DLL *dll, bool error)\r
+{\r
+ HMODULE module;\r
+ char *path = to_char_string(untag_string(dll->path),true);\r
+\r
+ module = LoadLibrary(path);\r
+\r
+ if (!module)\r
+ {\r
+ dll->dll = NULL;\r
+ if(error)\r
+ general_error(ERROR_FFI, tag_object(get_error_message()),F,true);\r
+ else\r
+ return;\r
+ }\r
+\r
+ dll->dll = module;\r
+}\r
+\r
+void *ffi_dlsym (DLL *dll, F_STRING *symbol, bool error)\r
+{\r
+ void *sym = GetProcAddress(dll ? (HMODULE)dll->dll : GetModuleHandle(NULL),\r
+ to_char_string(symbol,true));\r
+\r
+ if (!sym)\r
+ {\r
+ if(error)\r
+ general_error(ERROR_FFI, tag_object(get_error_message()),F,true);\r
+ else\r
+ return NULL;\r
+ }\r
+\r
+ return sym;\r
+}\r
+\r
+void ffi_dlclose (DLL *dll)\r
+{\r
+ FreeLibrary((HMODULE)dll->dll);\r
+ dll->dll = NULL;\r
+}\r
+\r
+void primitive_stat(void)\r
+{\r
+ F_STRING *path;\r
+ WIN32_FILE_ATTRIBUTE_DATA st;\r
+\r
+ maybe_gc(0);\r
+ path = untag_string(dpop());\r
+\r
+ if(!GetFileAttributesEx(to_char_string(path,true), GetFileExInfoStandard, &st)) \r
+ {\r
+ dpush(F);\r
+ } \r
+ else \r
+ {\r
+ CELL dirp = tag_boolean(st.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);\r
+ CELL size = tag_bignum(s48_long_long_to_bignum(\r
+ (s64)st.nFileSizeLow | (s64)st.nFileSizeHigh << 32));\r
+ CELL mtime = tag_integer((int)\r
+ ((*(s64*)&st.ftLastWriteTime - EPOCH_OFFSET) / 10000000));\r
+ dpush(make_array_4(dirp,tag_fixnum(0),size,mtime));\r
+ }\r
+}\r
+\r
+void primitive_read_dir(void)\r
+{\r
+ F_STRING *path;\r
+ HANDLE dir;\r
+ WIN32_FIND_DATA find_data;\r
+ F_ARRAY *result;\r
+ CELL result_count = 0;\r
+\r
+ maybe_gc(0);\r
+\r
+ result = array(ARRAY_TYPE,100,F);\r
+\r
+ path = untag_string(dpop());\r
+ if (INVALID_HANDLE_VALUE != (dir = FindFirstFile(".\\*", &find_data)))\r
+ {\r
+ do\r
+ {\r
+ CELL name = tag_object(from_char_string(\r
+ find_data.cFileName));\r
+\r
+ if(result_count == array_capacity(result))\r
+ {\r
+ result = resize_array(result,\r
+ result_count * 2,F);\r
+ }\r
+ \r
+ put(AREF(result,result_count),name);\r
+ result_count++;\r
+ } \r
+ while (FindNextFile(dir, &find_data));\r
+ CloseHandle(dir);\r
+ }\r
+\r
+ result = resize_array(result,result_count,F);\r
+\r
+ dpush(tag_object(result));\r
+}\r
+\r
+void primitive_cwd(void)\r
+{\r
+ char buf[MAX_PATH];\r
+\r
+ maybe_gc(0);\r
+ if(!GetCurrentDirectory(MAX_PATH, buf))\r
+ io_error();\r
+\r
+ box_char_string(buf);\r
+}\r
+\r
+void primitive_cd(void)\r
+{\r
+ maybe_gc(0);\r
+ SetCurrentDirectory(pop_char_string());\r
+}\r
+\r
+BOUNDED_BLOCK *alloc_bounded_block(CELL size)\r
+{\r
+ SYSTEM_INFO si;\r
+ char *mem;\r
+ DWORD ignore;\r
+\r
+ GetSystemInfo(&si);\r
+ if((mem = (char *)VirtualAlloc(NULL, si.dwPageSize*2 + size, MEM_COMMIT, PAGE_EXECUTE_READWRITE)) == 0)\r
+ fatal_error("VirtualAlloc() failed in alloc_bounded_block()",0);\r
+\r
+ if (!VirtualProtect(mem, si.dwPageSize, PAGE_NOACCESS, &ignore))\r
+ fatal_error("Cannot allocate low guard page", (CELL)mem);\r
+\r
+ if (!VirtualProtect(mem+size+si.dwPageSize, si.dwPageSize, PAGE_NOACCESS, &ignore))\r
+ fatal_error("Cannot allocate high guard page", (CELL)mem);\r
+\r
+ BOUNDED_BLOCK *block = safe_malloc(sizeof(BOUNDED_BLOCK));\r
+\r
+ block->start = (int)mem + si.dwPageSize;\r
+ block->size = size;\r
+\r
+ return block;\r
+}\r
+\r
+void dealloc_bounded_block(BOUNDED_BLOCK *block)\r
+{\r
+ SYSTEM_INFO si;\r
+ GetSystemInfo(&si);\r
+ if(!VirtualFree((void*)(block->start - si.dwPageSize), 0, MEM_RELEASE))\r
+ fatal_error("VirtualFree() failed",0);\r
+ free(block);\r
+}\r
+\r
+/* SEH support. Proceed with caution. */\r
+typedef long exception_handler_t(\r
+ void *rec, void *frame, void *context, void *dispatch);\r
+\r
+typedef struct exception_record {\r
+ struct exception_record *next_handler;\r
+ void *handler_func;\r
+} exception_record_t;\r
+\r
+void seh_call(void (*func)(), exception_handler_t *handler)\r
+{\r
+ exception_record_t record;\r
+ asm("mov %%fs:0, %0" : "=r" (record.next_handler));\r
+ asm("mov %0, %%fs:0" : : "r" (&record));\r
+ record.handler_func = handler;\r
+ func();\r
+ asm("mov %0, %%fs:0" : "=r" (record.next_handler));\r
+}\r
+\r
+static long exception_handler(void *rec, void *frame, void *ctx, void *dispatch)\r
+{\r
+ signal_error(SIGSEGV);\r
+}\r
+\r
+void platform_run(void)\r
+{\r
+ seh_call(run_toplevel, exception_handler);\r
+}\r
+\r
+const char *default_image_path(void)\r
+{\r
+ return "factor.image";\r
+}\r