ran dos2unix on win32 files
parent
11a005b866
commit
66c4e51bcf
|
@ -1,24 +1,24 @@
|
||||||
IN: scratchpad
|
IN: scratchpad
|
||||||
USING: alien compiler kernel namespaces parser sequences words ;
|
USING: alien compiler kernel namespaces parser sequences words ;
|
||||||
|
|
||||||
{
|
{
|
||||||
{ "gdi32" "gdi32" }
|
{ "gdi32" "gdi32" }
|
||||||
{ "user32" "user32" }
|
{ "user32" "user32" }
|
||||||
{ "kernel32" "kernel32" }
|
{ "kernel32" "kernel32" }
|
||||||
{ "winsock" "ws2_32" }
|
{ "winsock" "ws2_32" }
|
||||||
{ "mswsock" "mswsock" }
|
{ "mswsock" "mswsock" }
|
||||||
} [ first2 add-simple-library ] each
|
} [ first2 add-simple-library ] each
|
||||||
"libc" "msvcrt.dll" "cdecl" add-library
|
"libc" "msvcrt.dll" "cdecl" add-library
|
||||||
|
|
||||||
{
|
{
|
||||||
"io"
|
"io"
|
||||||
"errors"
|
"errors"
|
||||||
"winsock"
|
"winsock"
|
||||||
"io-internals"
|
"io-internals"
|
||||||
"stream"
|
"stream"
|
||||||
"server"
|
"server"
|
||||||
"io-last"
|
"io-last"
|
||||||
} [ "/library/io/windows/" swap ".factor" append3 run-resource ] each
|
} [ "/library/io/windows/" swap ".factor" append3 run-resource ] each
|
||||||
|
|
||||||
IN: kernel
|
IN: kernel
|
||||||
: default-shell "ui" ;
|
: default-shell "ui" ;
|
||||||
|
|
|
@ -1,47 +1,47 @@
|
||||||
! Copyright (C) 2006 Doug Coleman.
|
! Copyright (C) 2006 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel win32-api math namespaces io prettyprint errors sequences alien
|
USING: kernel win32-api math namespaces io prettyprint errors sequences alien
|
||||||
libc gadgets ;
|
libc gadgets ;
|
||||||
IN: win32
|
IN: win32
|
||||||
|
|
||||||
: (enum-clipboard) ( n -- )
|
: (enum-clipboard) ( n -- )
|
||||||
EnumClipboardFormats win32-error dup 0 > [ dup , (enum-clipboard) ] when ;
|
EnumClipboardFormats win32-error dup 0 > [ dup , (enum-clipboard) ] when ;
|
||||||
|
|
||||||
: enum-clipboard ( -- seq )
|
: enum-clipboard ( -- seq )
|
||||||
[ 0 (enum-clipboard) ] { } make nip ;
|
[ 0 (enum-clipboard) ] { } make nip ;
|
||||||
|
|
||||||
: paste ( -- str )
|
: paste ( -- str )
|
||||||
f OpenClipboard drop
|
f OpenClipboard drop
|
||||||
CF_TEXT IsClipboardFormatAvailable 0 = [
|
CF_TEXT IsClipboardFormatAvailable 0 = [
|
||||||
"no text in clipboard" print
|
"no text in clipboard" print
|
||||||
] [
|
] [
|
||||||
! "text found" print
|
! "text found" print
|
||||||
CF_TEXT GetClipboardData
|
CF_TEXT GetClipboardData
|
||||||
dup GlobalLock swap
|
dup GlobalLock swap
|
||||||
GlobalUnlock drop
|
GlobalUnlock drop
|
||||||
] if
|
] if
|
||||||
CloseClipboard drop alien>char-string ;
|
CloseClipboard drop alien>char-string ;
|
||||||
|
|
||||||
: copy ( str -- )
|
: copy ( str -- )
|
||||||
f OpenClipboard drop
|
f OpenClipboard drop
|
||||||
EmptyClipboard drop
|
EmptyClipboard drop
|
||||||
GMEM_MOVEABLE over length 1+ GlobalAlloc dup 0 = [
|
GMEM_MOVEABLE over length 1+ GlobalAlloc dup 0 = [
|
||||||
"unable to allocate memory" throw
|
"unable to allocate memory" throw
|
||||||
] when
|
] when
|
||||||
|
|
||||||
dup GlobalLock
|
dup GlobalLock
|
||||||
rot dup length memcpy
|
rot dup length memcpy
|
||||||
dup GlobalUnlock drop
|
dup GlobalUnlock drop
|
||||||
CF_TEXT swap SetClipboardData 0 = [
|
CF_TEXT swap SetClipboardData 0 = [
|
||||||
win32-error
|
win32-error
|
||||||
"SetClipboardData failed" throw
|
"SetClipboardData failed" throw
|
||||||
] when
|
] when
|
||||||
|
|
||||||
CloseClipboard drop ;
|
CloseClipboard drop ;
|
||||||
|
|
||||||
TUPLE: pasteboard ;
|
TUPLE: pasteboard ;
|
||||||
M: pasteboard clipboard-contents ( pb -- str ) drop paste ;
|
M: pasteboard clipboard-contents ( pb -- str ) drop paste ;
|
||||||
M: pasteboard set-clipboard-contents ( str pb -- ) drop copy ;
|
M: pasteboard set-clipboard-contents ( str pb -- ) drop copy ;
|
||||||
|
|
||||||
: init-clipboard ( -- )
|
: init-clipboard ( -- )
|
||||||
<pasteboard> clipboard set-global ;
|
<pasteboard> clipboard set-global ;
|
||||||
|
|
|
@ -1,36 +1,36 @@
|
||||||
! Copyright (C) 2005, 2006 Doug Coleman.
|
! Copyright (C) 2005, 2006 Doug Coleman.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
USING: alien kernel errors ;
|
USING: alien kernel errors ;
|
||||||
IN: win32-api
|
IN: win32-api
|
||||||
|
|
||||||
LIBRARY: gdi32
|
LIBRARY: gdi32
|
||||||
|
|
||||||
! Stock Logical Objects
|
! Stock Logical Objects
|
||||||
: WHITE_BRUSH 0 ; inline
|
: WHITE_BRUSH 0 ; inline
|
||||||
: LTGRAY_BRUSH 1 ; inline
|
: LTGRAY_BRUSH 1 ; inline
|
||||||
: GRAY_BRUSH 2 ; inline
|
: GRAY_BRUSH 2 ; inline
|
||||||
: DKGRAY_BRUSH 3 ; inline
|
: DKGRAY_BRUSH 3 ; inline
|
||||||
: BLACK_BRUSH 4 ; inline
|
: BLACK_BRUSH 4 ; inline
|
||||||
: NULL_BRUSH 5 ; inline
|
: NULL_BRUSH 5 ; inline
|
||||||
: HOLLOW_BRUSH NULL_BRUSH ; inline
|
: HOLLOW_BRUSH NULL_BRUSH ; inline
|
||||||
: WHITE_PEN 6 ; inline
|
: WHITE_PEN 6 ; inline
|
||||||
: BLACK_PEN 7 ; inline
|
: BLACK_PEN 7 ; inline
|
||||||
: NULL_PEN 8 ; inline
|
: NULL_PEN 8 ; inline
|
||||||
: OEM_FIXED_FONT 10 ; inline
|
: OEM_FIXED_FONT 10 ; inline
|
||||||
: ANSI_FIXED_FONT 11 ; inline
|
: ANSI_FIXED_FONT 11 ; inline
|
||||||
: ANSI_VAR_FONT 12 ; inline
|
: ANSI_VAR_FONT 12 ; inline
|
||||||
: SYSTEM_FONT 13 ; inline
|
: SYSTEM_FONT 13 ; inline
|
||||||
: DEVICE_DEFAULT_FONT 14 ; inline
|
: DEVICE_DEFAULT_FONT 14 ; inline
|
||||||
: DEFAULT_PALETTE 15 ; inline
|
: DEFAULT_PALETTE 15 ; inline
|
||||||
: SYSTEM_FIXED_FONT 16 ; inline
|
: SYSTEM_FIXED_FONT 16 ; inline
|
||||||
: DEFAULT_GUI_FONT 17 ; inline
|
: DEFAULT_GUI_FONT 17 ; inline
|
||||||
: DC_BRUSH 18 ; inline
|
: DC_BRUSH 18 ; inline
|
||||||
: DC_PEN 19 ; inline
|
: DC_PEN 19 ; inline
|
||||||
|
|
||||||
FUNCTION: HGDIOBJ GetStockObject ( int fnObject ) ;
|
FUNCTION: HGDIOBJ GetStockObject ( int fnObject ) ;
|
||||||
FUNCTION: int ChoosePixelFormat ( HDC hDC, PFD* ppfd ) ;
|
FUNCTION: int ChoosePixelFormat ( HDC hDC, PFD* ppfd ) ;
|
||||||
FUNCTION: BOOL SetPixelFormat ( HDC hDC, int iPixelFormat, PFD* ppfd ) ;
|
FUNCTION: BOOL SetPixelFormat ( HDC hDC, int iPixelFormat, PFD* ppfd ) ;
|
||||||
|
|
||||||
FUNCTION: BOOL SwapBuffers ( HDC hDC ) ;
|
FUNCTION: BOOL SwapBuffers ( HDC hDC ) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,61 +1,61 @@
|
||||||
! Copyright (C) 2005, 2006 Doug Coleman.
|
! Copyright (C) 2005, 2006 Doug Coleman.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
USING: alien kernel errors ;
|
USING: alien kernel errors ;
|
||||||
IN: win32-api
|
IN: win32-api
|
||||||
|
|
||||||
LIBRARY: kernel32
|
LIBRARY: kernel32
|
||||||
|
|
||||||
! FUNCTION: MAKEINTRESOURCEA
|
! FUNCTION: MAKEINTRESOURCEA
|
||||||
! FUNCTION: MAKEINTRESOURCEW
|
! FUNCTION: MAKEINTRESOURCEW
|
||||||
|
|
||||||
! : MAKEINTRESOURCE \ MAKEINTRESOURCEW \ MAKEINTRESOURCEA unicode-exec ;
|
! : MAKEINTRESOURCE \ MAKEINTRESOURCEW \ MAKEINTRESOURCEA unicode-exec ;
|
||||||
! #define IS_INTRESOURCE(_r) (((ULONG_PTR)(_r) >> 16) == 0)
|
! #define IS_INTRESOURCE(_r) (((ULONG_PTR)(_r) >> 16) == 0)
|
||||||
! #define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
|
! #define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
|
||||||
! #define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
|
! #define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
|
||||||
|
|
||||||
|
|
||||||
! FUNCTION: DWORD FormatMessage(
|
! FUNCTION: DWORD FormatMessage(
|
||||||
! DWORD dwFlags,
|
! DWORD dwFlags,
|
||||||
! LPCVOID lpSource,
|
! LPCVOID lpSource,
|
||||||
! DWORD dwMessageId,
|
! DWORD dwMessageId,
|
||||||
! DWORD dwLanguageId,
|
! DWORD dwLanguageId,
|
||||||
! LPTSTR lpBuffer,
|
! LPTSTR lpBuffer,
|
||||||
! DWORD nSize,
|
! DWORD nSize,
|
||||||
! va_list* Arguments
|
! va_list* Arguments
|
||||||
! ) ;
|
! ) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FUNCTION: HMODULE GetModuleHandleA ( char* lpModulename ) ;
|
FUNCTION: HMODULE GetModuleHandleA ( char* lpModulename ) ;
|
||||||
FUNCTION: HMODULE GetModuleHandleW ( char* lpModulename ) ;
|
FUNCTION: HMODULE GetModuleHandleW ( char* lpModulename ) ;
|
||||||
|
|
||||||
: GetModuleHandle \ GetModuleHandleW \ GetModuleHandleA unicode-exec ;
|
: GetModuleHandle \ GetModuleHandleW \ GetModuleHandleA unicode-exec ;
|
||||||
|
|
||||||
|
|
||||||
! FUNCTION: HMODULE GetModuleHandleEx (
|
! FUNCTION: HMODULE GetModuleHandleEx (
|
||||||
! DWORD dwFlags,
|
! DWORD dwFlags,
|
||||||
! LPCTSTR lpModulename,
|
! LPCTSTR lpModulename,
|
||||||
! HMODULE* phModule ) ;
|
! HMODULE* phModule ) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FUNCTION: DWORD GetLastError ( ) ;
|
FUNCTION: DWORD GetLastError ( ) ;
|
||||||
|
|
||||||
: (win32-error) ( id -- string )
|
: (win32-error) ( id -- string )
|
||||||
"char*" f "error_message" [ "int" ] alien-invoke ;
|
"char*" f "error_message" [ "int" ] alien-invoke ;
|
||||||
|
|
||||||
: win32-error ( -- )
|
: win32-error ( -- )
|
||||||
GetLastError dup 0 = [ (win32-error) throw ] unless drop ;
|
GetLastError dup 0 = [ (win32-error) throw ] unless drop ;
|
||||||
|
|
||||||
: GHND HEX: 40 ; inline
|
: GHND HEX: 40 ; inline
|
||||||
: GMEM_FIXED 0 ; inline
|
: GMEM_FIXED 0 ; inline
|
||||||
: GMEM_MOVEABLE 2 ; inline
|
: GMEM_MOVEABLE 2 ; inline
|
||||||
: GMEM_ZEROINIT HEX: 40 ; inline
|
: GMEM_ZEROINIT HEX: 40 ; inline
|
||||||
: GPTR HEX: 40 ; inline
|
: GPTR HEX: 40 ; inline
|
||||||
|
|
||||||
FUNCTION: HGLOBAL GlobalAlloc ( UINT uFlags, SIZE_T dwBytes ) ;
|
FUNCTION: HGLOBAL GlobalAlloc ( UINT uFlags, SIZE_T dwBytes ) ;
|
||||||
FUNCTION: LPVOID GlobalLock ( HGLOBAL hMem ) ;
|
FUNCTION: LPVOID GlobalLock ( HGLOBAL hMem ) ;
|
||||||
! FUNCTION: char* GlobalLock ( HGLOBAL hMem ) ;
|
! FUNCTION: char* GlobalLock ( HGLOBAL hMem ) ;
|
||||||
FUNCTION: BOOL GlobalUnlock ( HGLOBAL hMem ) ;
|
FUNCTION: BOOL GlobalUnlock ( HGLOBAL hMem ) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
IN: scratchpad
|
IN: scratchpad
|
||||||
USING: alien compiler kernel namespaces parser sequences words ;
|
USING: alien compiler kernel namespaces parser sequences words ;
|
||||||
|
|
||||||
{
|
{
|
||||||
{ "gdi32" "gdi32" }
|
{ "gdi32" "gdi32" }
|
||||||
{ "user32" "user32" }
|
{ "user32" "user32" }
|
||||||
{ "kernel32" "kernel32" }
|
{ "kernel32" "kernel32" }
|
||||||
{ "winsock" "ws2_32" }
|
{ "winsock" "ws2_32" }
|
||||||
{ "mswsock" "mswsock" }
|
{ "mswsock" "mswsock" }
|
||||||
} [ first2 add-simple-library ] each
|
} [ first2 add-simple-library ] each
|
||||||
"libc" "msvcrt.dll" "cdecl" add-library
|
"libc" "msvcrt.dll" "cdecl" add-library
|
||||||
|
|
||||||
{
|
{
|
||||||
"windows-messages"
|
"windows-messages"
|
||||||
"types"
|
"types"
|
||||||
"gdi32"
|
"gdi32"
|
||||||
"kernel32"
|
"kernel32"
|
||||||
"user32"
|
"user32"
|
||||||
"opengl32"
|
"opengl32"
|
||||||
"utils"
|
"utils"
|
||||||
"ui"
|
"ui"
|
||||||
"clipboard"
|
"clipboard"
|
||||||
|
|
||||||
} [ "/library/ui/windows/" swap ".factor" append3 run-resource ] each
|
} [ "/library/ui/windows/" swap ".factor" append3 run-resource ] each
|
||||||
|
|
||||||
IN: kernel
|
IN: kernel
|
||||||
: default-shell "tty" ;
|
: default-shell "tty" ;
|
||||||
|
|
|
@ -1,102 +1,102 @@
|
||||||
! Copyright (C) 2005, 2006 Doug Coleman.
|
! Copyright (C) 2005, 2006 Doug Coleman.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
USING: alien parser namespaces kernel syntax words math io prettyprint ;
|
USING: alien parser namespaces kernel syntax words math io prettyprint ;
|
||||||
IN: win32-api
|
IN: win32-api
|
||||||
|
|
||||||
! PIXELFORMATDESCRIPTOR flags
|
! PIXELFORMATDESCRIPTOR flags
|
||||||
: PFD_DOUBLEBUFFER HEX: 00000001 ; inline
|
: PFD_DOUBLEBUFFER HEX: 00000001 ; inline
|
||||||
: PFD_STEREO HEX: 00000002 ; inline
|
: PFD_STEREO HEX: 00000002 ; inline
|
||||||
: PFD_DRAW_TO_WINDOW HEX: 00000004 ; inline
|
: PFD_DRAW_TO_WINDOW HEX: 00000004 ; inline
|
||||||
: PFD_DRAW_TO_BITMAP HEX: 00000008 ; inline
|
: PFD_DRAW_TO_BITMAP HEX: 00000008 ; inline
|
||||||
: PFD_SUPPORT_GDI HEX: 00000010 ; inline
|
: PFD_SUPPORT_GDI HEX: 00000010 ; inline
|
||||||
: PFD_SUPPORT_OPENGL HEX: 00000020 ; inline
|
: PFD_SUPPORT_OPENGL HEX: 00000020 ; inline
|
||||||
: PFD_GENERIC_FORMAT HEX: 00000040 ; inline
|
: PFD_GENERIC_FORMAT HEX: 00000040 ; inline
|
||||||
: PFD_NEED_PALETTE HEX: 00000080 ; inline
|
: PFD_NEED_PALETTE HEX: 00000080 ; inline
|
||||||
: PFD_NEED_SYSTEM_PALETTE HEX: 00000100 ; inline
|
: PFD_NEED_SYSTEM_PALETTE HEX: 00000100 ; inline
|
||||||
: PFD_SWAP_EXCHANGE HEX: 00000200 ; inline
|
: PFD_SWAP_EXCHANGE HEX: 00000200 ; inline
|
||||||
: PFD_SWAP_COPY HEX: 00000400 ; inline
|
: PFD_SWAP_COPY HEX: 00000400 ; inline
|
||||||
: PFD_SWAP_LAYER_BUFFERS HEX: 00000800 ; inline
|
: PFD_SWAP_LAYER_BUFFERS HEX: 00000800 ; inline
|
||||||
: PFD_GENERIC_ACCELERATED HEX: 00001000 ; inline
|
: PFD_GENERIC_ACCELERATED HEX: 00001000 ; inline
|
||||||
: PFD_SUPPORT_DIRECTDRAW HEX: 00002000 ; inline
|
: PFD_SUPPORT_DIRECTDRAW HEX: 00002000 ; inline
|
||||||
|
|
||||||
! PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only
|
! PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only
|
||||||
: PFD_DEPTH_DONTCARE HEX: 20000000 ; inline
|
: PFD_DEPTH_DONTCARE HEX: 20000000 ; inline
|
||||||
: PFD_DOUBLEBUFFER_DONTCARE HEX: 40000000 ; inline
|
: PFD_DOUBLEBUFFER_DONTCARE HEX: 40000000 ; inline
|
||||||
: PFD_STEREO_DONTCARE HEX: 80000000 ; inline
|
: PFD_STEREO_DONTCARE HEX: 80000000 ; inline
|
||||||
|
|
||||||
! pixel types
|
! pixel types
|
||||||
: PFD_TYPE_RGBA 0 ; inline
|
: PFD_TYPE_RGBA 0 ; inline
|
||||||
: PFD_TYPE_COLORINDEX 1 ; inline
|
: PFD_TYPE_COLORINDEX 1 ; inline
|
||||||
|
|
||||||
! layer types
|
! layer types
|
||||||
: PFD_MAIN_PLANE 0 ; inline
|
: PFD_MAIN_PLANE 0 ; inline
|
||||||
: PFD_OVERLAY_PLANE 1 ; inline
|
: PFD_OVERLAY_PLANE 1 ; inline
|
||||||
: PFD_UNDERLAY_PLANE -1 ; inline
|
: PFD_UNDERLAY_PLANE -1 ; inline
|
||||||
|
|
||||||
: LPD_TYPE_RGBA 0 ; inline
|
: LPD_TYPE_RGBA 0 ; inline
|
||||||
: LPD_TYPE_COLORINDEX 1 ; inline
|
: LPD_TYPE_COLORINDEX 1 ; inline
|
||||||
|
|
||||||
! wglSwapLayerBuffers flags
|
! wglSwapLayerBuffers flags
|
||||||
: WGL_SWAP_MAIN_PLANE HEX: 00000001 ; inline
|
: WGL_SWAP_MAIN_PLANE HEX: 00000001 ; inline
|
||||||
: WGL_SWAP_OVERLAY1 HEX: 00000002 ; inline
|
: WGL_SWAP_OVERLAY1 HEX: 00000002 ; inline
|
||||||
: WGL_SWAP_OVERLAY2 HEX: 00000004 ; inline
|
: WGL_SWAP_OVERLAY2 HEX: 00000004 ; inline
|
||||||
: WGL_SWAP_OVERLAY3 HEX: 00000008 ; inline
|
: WGL_SWAP_OVERLAY3 HEX: 00000008 ; inline
|
||||||
: WGL_SWAP_OVERLAY4 HEX: 00000010 ; inline
|
: WGL_SWAP_OVERLAY4 HEX: 00000010 ; inline
|
||||||
: WGL_SWAP_OVERLAY5 HEX: 00000020 ; inline
|
: WGL_SWAP_OVERLAY5 HEX: 00000020 ; inline
|
||||||
: WGL_SWAP_OVERLAY6 HEX: 00000040 ; inline
|
: WGL_SWAP_OVERLAY6 HEX: 00000040 ; inline
|
||||||
: WGL_SWAP_OVERLAY7 HEX: 00000080 ; inline
|
: WGL_SWAP_OVERLAY7 HEX: 00000080 ; inline
|
||||||
: WGL_SWAP_OVERLAY8 HEX: 00000100 ; inline
|
: WGL_SWAP_OVERLAY8 HEX: 00000100 ; inline
|
||||||
: WGL_SWAP_OVERLAY9 HEX: 00000200 ; inline
|
: WGL_SWAP_OVERLAY9 HEX: 00000200 ; inline
|
||||||
: WGL_SWAP_OVERLAY10 HEX: 00000400 ; inline
|
: WGL_SWAP_OVERLAY10 HEX: 00000400 ; inline
|
||||||
: WGL_SWAP_OVERLAY11 HEX: 00000800 ; inline
|
: WGL_SWAP_OVERLAY11 HEX: 00000800 ; inline
|
||||||
: WGL_SWAP_OVERLAY12 HEX: 00001000 ; inline
|
: WGL_SWAP_OVERLAY12 HEX: 00001000 ; inline
|
||||||
: WGL_SWAP_OVERLAY13 HEX: 00002000 ; inline
|
: WGL_SWAP_OVERLAY13 HEX: 00002000 ; inline
|
||||||
: WGL_SWAP_OVERLAY14 HEX: 00004000 ; inline
|
: WGL_SWAP_OVERLAY14 HEX: 00004000 ; inline
|
||||||
: WGL_SWAP_OVERLAY15 HEX: 00008000 ; inline
|
: WGL_SWAP_OVERLAY15 HEX: 00008000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY1 HEX: 00010000 ; inline
|
: WGL_SWAP_UNDERLAY1 HEX: 00010000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY2 HEX: 00020000 ; inline
|
: WGL_SWAP_UNDERLAY2 HEX: 00020000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY3 HEX: 00040000 ; inline
|
: WGL_SWAP_UNDERLAY3 HEX: 00040000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY4 HEX: 00080000 ; inline
|
: WGL_SWAP_UNDERLAY4 HEX: 00080000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY5 HEX: 00100000 ; inline
|
: WGL_SWAP_UNDERLAY5 HEX: 00100000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY6 HEX: 00200000 ; inline
|
: WGL_SWAP_UNDERLAY6 HEX: 00200000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY7 HEX: 00400000 ; inline
|
: WGL_SWAP_UNDERLAY7 HEX: 00400000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY8 HEX: 00800000 ; inline
|
: WGL_SWAP_UNDERLAY8 HEX: 00800000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY9 HEX: 01000000 ; inline
|
: WGL_SWAP_UNDERLAY9 HEX: 01000000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY10 HEX: 02000000 ; inline
|
: WGL_SWAP_UNDERLAY10 HEX: 02000000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY11 HEX: 04000000 ; inline
|
: WGL_SWAP_UNDERLAY11 HEX: 04000000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY12 HEX: 08000000 ; inline
|
: WGL_SWAP_UNDERLAY12 HEX: 08000000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY13 HEX: 10000000 ; inline
|
: WGL_SWAP_UNDERLAY13 HEX: 10000000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY14 HEX: 20000000 ; inline
|
: WGL_SWAP_UNDERLAY14 HEX: 20000000 ; inline
|
||||||
: WGL_SWAP_UNDERLAY15 HEX: 40000000 ; inline
|
: WGL_SWAP_UNDERLAY15 HEX: 40000000 ; inline
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
: pfd-dwFlags
|
: pfd-dwFlags
|
||||||
PFD_DRAW_TO_WINDOW PFD_SUPPORT_OPENGL bitor PFD_DOUBLEBUFFER bitor ;
|
PFD_DRAW_TO_WINDOW PFD_SUPPORT_OPENGL bitor PFD_DOUBLEBUFFER bitor ;
|
||||||
|
|
||||||
! TODO: compare to http://www.nullterminator.net/opengl32.html
|
! TODO: compare to http://www.nullterminator.net/opengl32.html
|
||||||
: make-pfd ( bits -- pfd )
|
: make-pfd ( bits -- pfd )
|
||||||
"PIXELFORMATDESCRIPTOR" <c-object>
|
"PIXELFORMATDESCRIPTOR" <c-object>
|
||||||
"PIXELFORMATDESCRIPTOR" c-size over set-PIXELFORMATDESCRIPTOR-nSize
|
"PIXELFORMATDESCRIPTOR" c-size over set-PIXELFORMATDESCRIPTOR-nSize
|
||||||
1 over set-PIXELFORMATDESCRIPTOR-nVersion
|
1 over set-PIXELFORMATDESCRIPTOR-nVersion
|
||||||
pfd-dwFlags over set-PIXELFORMATDESCRIPTOR-dwFlags
|
pfd-dwFlags over set-PIXELFORMATDESCRIPTOR-dwFlags
|
||||||
PFD_TYPE_RGBA over set-PIXELFORMATDESCRIPTOR-iPixelType
|
PFD_TYPE_RGBA over set-PIXELFORMATDESCRIPTOR-iPixelType
|
||||||
[ set-PIXELFORMATDESCRIPTOR-cColorBits ] keep
|
[ set-PIXELFORMATDESCRIPTOR-cColorBits ] keep
|
||||||
16 over set-PIXELFORMATDESCRIPTOR-cDepthBits
|
16 over set-PIXELFORMATDESCRIPTOR-cDepthBits
|
||||||
PFD_MAIN_PLANE over set-PIXELFORMATDESCRIPTOR-dwLayerMask ;
|
PFD_MAIN_PLANE over set-PIXELFORMATDESCRIPTOR-dwLayerMask ;
|
||||||
|
|
||||||
|
|
||||||
LIBRARY: gl
|
LIBRARY: gl
|
||||||
|
|
||||||
|
|
||||||
! FUNCTION: int ReleaseDC ( HWND hWnd, HDC hDC ) ;
|
! FUNCTION: int ReleaseDC ( HWND hWnd, HDC hDC ) ;
|
||||||
! FUNCTION: HDC ResetDC ( HDC hdc, DEVMODE* lpInitData ) ;
|
! FUNCTION: HDC ResetDC ( HDC hdc, DEVMODE* lpInitData ) ;
|
||||||
! FUNCTION: BOOL RestoreDC ( HDC hdc, int nSavedDC ) ;
|
! FUNCTION: BOOL RestoreDC ( HDC hdc, int nSavedDC ) ;
|
||||||
! FUNCTION: int SaveDC( HDC hDC ) ;
|
! FUNCTION: int SaveDC( HDC hDC ) ;
|
||||||
! FUNCTION: HGDIOBJ SelectObject ( HDC hDC, HGDIOBJ hgdiobj ) ;
|
! FUNCTION: HGDIOBJ SelectObject ( HDC hDC, HGDIOBJ hgdiobj ) ;
|
||||||
|
|
||||||
FUNCTION: HGLRC wglCreateContext ( HDC hDC ) ;
|
FUNCTION: HGLRC wglCreateContext ( HDC hDC ) ;
|
||||||
FUNCTION: BOOL wglDeleteContext ( HGLRC hRC ) ;
|
FUNCTION: BOOL wglDeleteContext ( HGLRC hRC ) ;
|
||||||
FUNCTION: BOOL wglMakeCurrent ( HDC hDC, HGLRC hglrc ) ;
|
FUNCTION: BOOL wglMakeCurrent ( HDC hDC, HGLRC hglrc ) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,367 +1,367 @@
|
||||||
! Copyright (C) 2005, 2006 Doug Coleman.
|
! Copyright (C) 2005, 2006 Doug Coleman.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
USING: alien namespaces kernel words ;
|
USING: alien namespaces kernel words ;
|
||||||
IN: win32-api
|
IN: win32-api
|
||||||
|
|
||||||
! http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_data_types.asp
|
! http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_data_types.asp
|
||||||
|
|
||||||
SYMBOL: unicode f unicode set
|
SYMBOL: unicode f unicode set
|
||||||
: unicode-exec ( unicode-func ascii-func -- func )
|
: unicode-exec ( unicode-func ascii-func -- func )
|
||||||
unicode get [
|
unicode get [
|
||||||
drop execute
|
drop execute
|
||||||
] [
|
] [
|
||||||
nip execute
|
nip execute
|
||||||
] if ; inline
|
] if ; inline
|
||||||
|
|
||||||
: unicode? unicode get ; inline
|
: unicode? unicode get ; inline
|
||||||
|
|
||||||
: win64? f ;
|
: win64? f ;
|
||||||
|
|
||||||
! win64
|
! win64
|
||||||
! char uchar short ushort int uint long ulong longlong ulonglong
|
! char uchar short ushort int uint long ulong longlong ulonglong
|
||||||
! 1 1 2 2 * * ?
|
! 1 1 2 2 * * ?
|
||||||
! win32
|
! win32
|
||||||
! char uchar short ushort int uint long ulong longlong ulonglong
|
! char uchar short ushort int uint long ulong longlong ulonglong
|
||||||
! 1 1 2 2 * * 4 4 8 8
|
! 1 1 2 2 * * 4 4 8 8
|
||||||
|
|
||||||
|
|
||||||
TYPEDEF: char CHAR
|
TYPEDEF: char CHAR
|
||||||
TYPEDEF: uchar UCHAR
|
TYPEDEF: uchar UCHAR
|
||||||
TYPEDEF: uchar BYTE
|
TYPEDEF: uchar BYTE
|
||||||
|
|
||||||
TYPEDEF: short wchar_t
|
TYPEDEF: short wchar_t
|
||||||
TYPEDEF: wchar_t WCHAR
|
TYPEDEF: wchar_t WCHAR
|
||||||
|
|
||||||
TYPEDEF: short SHORT
|
TYPEDEF: short SHORT
|
||||||
TYPEDEF: ushort USHORT
|
TYPEDEF: ushort USHORT
|
||||||
|
|
||||||
TYPEDEF: ushort WORD
|
TYPEDEF: ushort WORD
|
||||||
TYPEDEF: ulong DWORD
|
TYPEDEF: ulong DWORD
|
||||||
|
|
||||||
TYPEDEF: int INT
|
TYPEDEF: int INT
|
||||||
TYPEDEF: uint UINT
|
TYPEDEF: uint UINT
|
||||||
|
|
||||||
TYPEDEF: int BOOL
|
TYPEDEF: int BOOL
|
||||||
|
|
||||||
TYPEDEF: int* PINT
|
TYPEDEF: int* PINT
|
||||||
TYPEDEF: int* LPINT
|
TYPEDEF: int* LPINT
|
||||||
TYPEDEF: int HFILE
|
TYPEDEF: int HFILE
|
||||||
|
|
||||||
TYPEDEF: long LONG
|
TYPEDEF: long LONG
|
||||||
TYPEDEF: long* LPLONG
|
TYPEDEF: long* LPLONG
|
||||||
TYPEDEF: long LONG_PTR
|
TYPEDEF: long LONG_PTR
|
||||||
TYPEDEF: long* PLONG_PTR
|
TYPEDEF: long* PLONG_PTR
|
||||||
|
|
||||||
TYPEDEF: uint ULONG
|
TYPEDEF: uint ULONG
|
||||||
TYPEDEF: ulong ULONG_PTR
|
TYPEDEF: ulong ULONG_PTR
|
||||||
TYPEDEF: ulong* PULONG_PTR
|
TYPEDEF: ulong* PULONG_PTR
|
||||||
|
|
||||||
TYPEDEF: void VOID
|
TYPEDEF: void VOID
|
||||||
TYPEDEF: void* PVOID
|
TYPEDEF: void* PVOID
|
||||||
TYPEDEF: void* LPVOID
|
TYPEDEF: void* LPVOID
|
||||||
TYPEDEF: void* LPCVOID
|
TYPEDEF: void* LPCVOID
|
||||||
|
|
||||||
TYPEDEF: float FLOAT
|
TYPEDEF: float FLOAT
|
||||||
! The following is commented out for two reasons.
|
! The following is commented out for two reasons.
|
||||||
! 1) all of the code in both branches will be run because TYPEDEF: is a
|
! 1) all of the code in both branches will be run because TYPEDEF: is a
|
||||||
! parsing word
|
! parsing word
|
||||||
! 2) we are waiting on gcc to be ported to win64/msys
|
! 2) we are waiting on gcc to be ported to win64/msys
|
||||||
! 3) the TYPEDEF:s are probably wrong.
|
! 3) the TYPEDEF:s are probably wrong.
|
||||||
|
|
||||||
! win64? [
|
! win64? [
|
||||||
! ! TODO: check these!
|
! ! TODO: check these!
|
||||||
! TYPEDEF: INT32 HALF_PTR
|
! TYPEDEF: INT32 HALF_PTR
|
||||||
! TYPEDEF: UINT32 UHALF_PTR
|
! TYPEDEF: UINT32 UHALF_PTR
|
||||||
! TYPEDEF: long INT_PTR
|
! TYPEDEF: long INT_PTR
|
||||||
! TYPEDEF: ulong UINT_PTR
|
! TYPEDEF: ulong UINT_PTR
|
||||||
|
|
||||||
! TYPEDEF: longlong LONG_PTR ! 64bit
|
! TYPEDEF: longlong LONG_PTR ! 64bit
|
||||||
! TYPEDEF: ulonglong ULONG_PTR ! 64bit
|
! TYPEDEF: ulonglong ULONG_PTR ! 64bit
|
||||||
|
|
||||||
! TYPEDEF: int INT32
|
! TYPEDEF: int INT32
|
||||||
! TYPEDEF: uint UINT32
|
! TYPEDEF: uint UINT32
|
||||||
! TYPEDEF: uint DWORD32
|
! TYPEDEF: uint DWORD32
|
||||||
! TYPEDEF: uint ULONG32
|
! TYPEDEF: uint ULONG32
|
||||||
! TYPEDEF: ulong ULONG64
|
! TYPEDEF: ulong ULONG64
|
||||||
! TYPEDEF: int* POINTER_32
|
! TYPEDEF: int* POINTER_32
|
||||||
! TYPEDEF: long* POINTER_64
|
! TYPEDEF: long* POINTER_64
|
||||||
! TYPEDEF: longlong INT64
|
! TYPEDEF: longlong INT64
|
||||||
! TYPEDEF: ulonglong UINT64
|
! TYPEDEF: ulonglong UINT64
|
||||||
! TYPEDEF: longlong LONGLONG ! 64bit
|
! TYPEDEF: longlong LONGLONG ! 64bit
|
||||||
! TYPEDEF: ulonglong ULONGLONG
|
! TYPEDEF: ulonglong ULONGLONG
|
||||||
! TYPEDEF: longlong LONG64
|
! TYPEDEF: longlong LONG64
|
||||||
! TYPEDEF: ulonglong DWORD64
|
! TYPEDEF: ulonglong DWORD64
|
||||||
! ] [
|
! ] [
|
||||||
! Correct for win32
|
! Correct for win32
|
||||||
TYPEDEF: short HALF_PTR
|
TYPEDEF: short HALF_PTR
|
||||||
TYPEDEF: ushort UHALF_PTR
|
TYPEDEF: ushort UHALF_PTR
|
||||||
TYPEDEF: int INT_PTR
|
TYPEDEF: int INT_PTR
|
||||||
TYPEDEF: uint UINT_PTR
|
TYPEDEF: uint UINT_PTR
|
||||||
|
|
||||||
TYPEDEF: int LONG_PTR
|
TYPEDEF: int LONG_PTR
|
||||||
TYPEDEF: ulong ULONG_PTR
|
TYPEDEF: ulong ULONG_PTR
|
||||||
|
|
||||||
TYPEDEF: int INT32
|
TYPEDEF: int INT32
|
||||||
TYPEDEF: uint UINT32
|
TYPEDEF: uint UINT32
|
||||||
TYPEDEF: uint DWORD32
|
TYPEDEF: uint DWORD32
|
||||||
TYPEDEF: ulong ULONG32
|
TYPEDEF: ulong ULONG32
|
||||||
TYPEDEF: ulonglong ULONG64
|
TYPEDEF: ulonglong ULONG64
|
||||||
TYPEDEF: long* POINTER_32
|
TYPEDEF: long* POINTER_32
|
||||||
TYPEDEF: longlong* POINTER_64
|
TYPEDEF: longlong* POINTER_64
|
||||||
TYPEDEF: longlong INT64
|
TYPEDEF: longlong INT64
|
||||||
TYPEDEF: ulonglong UINT64
|
TYPEDEF: ulonglong UINT64
|
||||||
TYPEDEF: longlong LONGLONG
|
TYPEDEF: longlong LONGLONG
|
||||||
TYPEDEF: ulonglong ULONGLONG
|
TYPEDEF: ulonglong ULONGLONG
|
||||||
TYPEDEF: longlong LONG64
|
TYPEDEF: longlong LONG64
|
||||||
TYPEDEF: ulonglong DWORD64
|
TYPEDEF: ulonglong DWORD64
|
||||||
! ] if
|
! ] if
|
||||||
|
|
||||||
! unicode? [
|
! unicode? [
|
||||||
! TYPEDEF: WCHAR TBYTE
|
! TYPEDEF: WCHAR TBYTE
|
||||||
! TYPEDEF: WCHAR TCHAR
|
! TYPEDEF: WCHAR TCHAR
|
||||||
! ] [
|
! ] [
|
||||||
TYPEDEF: uchar TBYTE
|
TYPEDEF: uchar TBYTE
|
||||||
TYPEDEF: char TCHAR
|
TYPEDEF: char TCHAR
|
||||||
! ] if
|
! ] if
|
||||||
|
|
||||||
! Below down is based on the above definitions
|
! Below down is based on the above definitions
|
||||||
! There should be no 32/64bit issues
|
! There should be no 32/64bit issues
|
||||||
|
|
||||||
TYPEDEF: WORD ATOM
|
TYPEDEF: WORD ATOM
|
||||||
TYPEDEF: BYTE BOOLEAN
|
TYPEDEF: BYTE BOOLEAN
|
||||||
! TYPEDEF: __stdcall CALLBACK
|
! TYPEDEF: __stdcall CALLBACK
|
||||||
TYPEDEF: DWORD COLORREF
|
TYPEDEF: DWORD COLORREF
|
||||||
TYPEDEF: ULONGLONG DWORDLONG
|
TYPEDEF: ULONGLONG DWORDLONG
|
||||||
TYPEDEF: ULONG_PTR DWORD_PTR
|
TYPEDEF: ULONG_PTR DWORD_PTR
|
||||||
TYPEDEF: PVOID HANDLE
|
TYPEDEF: PVOID HANDLE
|
||||||
TYPEDEF: HANDLE HACCEL
|
TYPEDEF: HANDLE HACCEL
|
||||||
TYPEDEF: HANDLE HBITMAP
|
TYPEDEF: HANDLE HBITMAP
|
||||||
TYPEDEF: HANDLE HBRUSH
|
TYPEDEF: HANDLE HBRUSH
|
||||||
TYPEDEF: HANDLE HCOLORSPACE
|
TYPEDEF: HANDLE HCOLORSPACE
|
||||||
TYPEDEF: HANDLE HCONV
|
TYPEDEF: HANDLE HCONV
|
||||||
TYPEDEF: HANDLE HCONVLIST
|
TYPEDEF: HANDLE HCONVLIST
|
||||||
TYPEDEF: HANDLE HICON
|
TYPEDEF: HANDLE HICON
|
||||||
TYPEDEF: HICON HCURSOR
|
TYPEDEF: HICON HCURSOR
|
||||||
TYPEDEF: HANDLE HDC
|
TYPEDEF: HANDLE HDC
|
||||||
TYPEDEF: HANDLE HDDEDATA
|
TYPEDEF: HANDLE HDDEDATA
|
||||||
TYPEDEF: HANDLE HDESK
|
TYPEDEF: HANDLE HDESK
|
||||||
TYPEDEF: HANDLE HDROP
|
TYPEDEF: HANDLE HDROP
|
||||||
TYPEDEF: HANDLE HDWP
|
TYPEDEF: HANDLE HDWP
|
||||||
TYPEDEF: HANDLE HENMETAFILE
|
TYPEDEF: HANDLE HENMETAFILE
|
||||||
TYPEDEF: HANDLE HFONT
|
TYPEDEF: HANDLE HFONT
|
||||||
TYPEDEF: HANDLE HGDIOBJ
|
TYPEDEF: HANDLE HGDIOBJ
|
||||||
TYPEDEF: HANDLE HGLOBAL
|
TYPEDEF: HANDLE HGLOBAL
|
||||||
TYPEDEF: HANDLE HHOOK
|
TYPEDEF: HANDLE HHOOK
|
||||||
TYPEDEF: HANDLE HINSTANCE
|
TYPEDEF: HANDLE HINSTANCE
|
||||||
TYPEDEF: HANDLE HKEY
|
TYPEDEF: HANDLE HKEY
|
||||||
TYPEDEF: HANDLE HKL
|
TYPEDEF: HANDLE HKL
|
||||||
TYPEDEF: HANDLE HLOCAL
|
TYPEDEF: HANDLE HLOCAL
|
||||||
TYPEDEF: HANDLE HMENU
|
TYPEDEF: HANDLE HMENU
|
||||||
TYPEDEF: HANDLE HMETAFILE
|
TYPEDEF: HANDLE HMETAFILE
|
||||||
TYPEDEF: HINSTANCE HMODULE
|
TYPEDEF: HINSTANCE HMODULE
|
||||||
TYPEDEF: HANDLE HMONITOR
|
TYPEDEF: HANDLE HMONITOR
|
||||||
TYPEDEF: HANDLE HPALETTE
|
TYPEDEF: HANDLE HPALETTE
|
||||||
TYPEDEF: HANDLE HPEN
|
TYPEDEF: HANDLE HPEN
|
||||||
TYPEDEF: LONG HRESULT
|
TYPEDEF: LONG HRESULT
|
||||||
TYPEDEF: HANDLE HRGN
|
TYPEDEF: HANDLE HRGN
|
||||||
TYPEDEF: HANDLE HRSRC
|
TYPEDEF: HANDLE HRSRC
|
||||||
TYPEDEF: HANDLE HSZ
|
TYPEDEF: HANDLE HSZ
|
||||||
TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
|
TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
|
||||||
TYPEDEF: HANDLE HWINSTA ! typo??
|
TYPEDEF: HANDLE HWINSTA ! typo??
|
||||||
TYPEDEF: HANDLE HWND
|
TYPEDEF: HANDLE HWND
|
||||||
TYPEDEF: WORD LANGID
|
TYPEDEF: WORD LANGID
|
||||||
TYPEDEF: DWORD LCID
|
TYPEDEF: DWORD LCID
|
||||||
TYPEDEF: DWORD LCTYPE
|
TYPEDEF: DWORD LCTYPE
|
||||||
TYPEDEF: DWORD LGRPID
|
TYPEDEF: DWORD LGRPID
|
||||||
TYPEDEF: LONG_PTR LPARAM
|
TYPEDEF: LONG_PTR LPARAM
|
||||||
TYPEDEF: BOOL* LPBOOL
|
TYPEDEF: BOOL* LPBOOL
|
||||||
TYPEDEF: BYTE* LPBYTE
|
TYPEDEF: BYTE* LPBYTE
|
||||||
TYPEDEF: DWORD* LPCOLORREF
|
TYPEDEF: DWORD* LPCOLORREF
|
||||||
TYPEDEF: CHAR* LPCSTR
|
TYPEDEF: CHAR* LPCSTR
|
||||||
TYPEDEF: WCHAR* LPCWSTR
|
TYPEDEF: WCHAR* LPCWSTR
|
||||||
TYPEDEF: WCHAR* LPWSTR
|
TYPEDEF: WCHAR* LPWSTR
|
||||||
unicode? [
|
unicode? [
|
||||||
TYPEDEF: LPCWSTR LPCTSTR
|
TYPEDEF: LPCWSTR LPCTSTR
|
||||||
TYPEDEF: LPWSTR LPTSTR
|
TYPEDEF: LPWSTR LPTSTR
|
||||||
TYPEDEF: LPCWSTR PCTSTR
|
TYPEDEF: LPCWSTR PCTSTR
|
||||||
TYPEDEF: LPWSTR PTSTR
|
TYPEDEF: LPWSTR PTSTR
|
||||||
] [
|
] [
|
||||||
TYPEDEF: LPCSTR LPCTSTR
|
TYPEDEF: LPCSTR LPCTSTR
|
||||||
TYPEDEF: LPSTR LPTSTR
|
TYPEDEF: LPSTR LPTSTR
|
||||||
TYPEDEF: LPCSTR PCTSTR
|
TYPEDEF: LPCSTR PCTSTR
|
||||||
TYPEDEF: LPSTR PTSTR
|
TYPEDEF: LPSTR PTSTR
|
||||||
] if
|
] if
|
||||||
TYPEDEF: DWORD* LPDWORD
|
TYPEDEF: DWORD* LPDWORD
|
||||||
TYPEDEF: HANDLE* LPHANDLE
|
TYPEDEF: HANDLE* LPHANDLE
|
||||||
TYPEDEF: CHAR* LPSTR
|
TYPEDEF: CHAR* LPSTR
|
||||||
TYPEDEF: WORD* LPWORD
|
TYPEDEF: WORD* LPWORD
|
||||||
TYPEDEF: WCHAR* LPWSTR
|
TYPEDEF: WCHAR* LPWSTR
|
||||||
TYPEDEF: LONG_PTR LRESULT
|
TYPEDEF: LONG_PTR LRESULT
|
||||||
TYPEDEF: BOOL* PBOOL
|
TYPEDEF: BOOL* PBOOL
|
||||||
TYPEDEF: BOOLEAN* PBOOLEAN
|
TYPEDEF: BOOLEAN* PBOOLEAN
|
||||||
TYPEDEF: BYTE* PBYTE
|
TYPEDEF: BYTE* PBYTE
|
||||||
TYPEDEF: CHAR* PCHAR
|
TYPEDEF: CHAR* PCHAR
|
||||||
TYPEDEF: CHAR* PCSTR
|
TYPEDEF: CHAR* PCSTR
|
||||||
TYPEDEF: WCHAR* PCWSTR
|
TYPEDEF: WCHAR* PCWSTR
|
||||||
TYPEDEF: DWORD* PDWORD
|
TYPEDEF: DWORD* PDWORD
|
||||||
TYPEDEF: DWORDLONG* PDWORDLONG
|
TYPEDEF: DWORDLONG* PDWORDLONG
|
||||||
TYPEDEF: DWORD_PTR* PDWORD_PTR
|
TYPEDEF: DWORD_PTR* PDWORD_PTR
|
||||||
TYPEDEF: DWORD32* PDWORD32
|
TYPEDEF: DWORD32* PDWORD32
|
||||||
TYPEDEF: DWORD64* PDWORD64
|
TYPEDEF: DWORD64* PDWORD64
|
||||||
TYPEDEF: FLOAT* PFLOAT
|
TYPEDEF: FLOAT* PFLOAT
|
||||||
TYPEDEF: HALF_PTR* PHALF_PTR
|
TYPEDEF: HALF_PTR* PHALF_PTR
|
||||||
TYPEDEF: HANDLE* PHANDLE
|
TYPEDEF: HANDLE* PHANDLE
|
||||||
TYPEDEF: HKEY* PHKEY
|
TYPEDEF: HKEY* PHKEY
|
||||||
TYPEDEF: INT_PTR* PINT_PTR
|
TYPEDEF: INT_PTR* PINT_PTR
|
||||||
TYPEDEF: INT32* PINT32
|
TYPEDEF: INT32* PINT32
|
||||||
TYPEDEF: INT64* PINT64
|
TYPEDEF: INT64* PINT64
|
||||||
TYPEDEF: PDWORD PLCID
|
TYPEDEF: PDWORD PLCID
|
||||||
TYPEDEF: LONG* PLONG
|
TYPEDEF: LONG* PLONG
|
||||||
TYPEDEF: LONGLONG* PLONGLONG
|
TYPEDEF: LONGLONG* PLONGLONG
|
||||||
TYPEDEF: LONG_PTR* PLONG_PTR
|
TYPEDEF: LONG_PTR* PLONG_PTR
|
||||||
TYPEDEF: LONG32* PLONG32
|
TYPEDEF: LONG32* PLONG32
|
||||||
TYPEDEF: LONG64* PLONG64
|
TYPEDEF: LONG64* PLONG64
|
||||||
TYPEDEF: SHORT* PSHORT
|
TYPEDEF: SHORT* PSHORT
|
||||||
TYPEDEF: SIZE_T* PSIZE_T
|
TYPEDEF: SIZE_T* PSIZE_T
|
||||||
TYPEDEF: SSIZE_T* PSSIZE_T
|
TYPEDEF: SSIZE_T* PSSIZE_T
|
||||||
TYPEDEF: CHAR* PSTR
|
TYPEDEF: CHAR* PSTR
|
||||||
TYPEDEF: TBYTE* PTBYTE
|
TYPEDEF: TBYTE* PTBYTE
|
||||||
TYPEDEF: TCHAR* PTCHAR
|
TYPEDEF: TCHAR* PTCHAR
|
||||||
TYPEDEF: UCHAR* PUCHAR
|
TYPEDEF: UCHAR* PUCHAR
|
||||||
TYPEDEF: UHALF_PTR* PUHALF_PTR
|
TYPEDEF: UHALF_PTR* PUHALF_PTR
|
||||||
TYPEDEF: UINT* PUINT
|
TYPEDEF: UINT* PUINT
|
||||||
TYPEDEF: UINT_PTR* PUINT_PTR
|
TYPEDEF: UINT_PTR* PUINT_PTR
|
||||||
TYPEDEF: UINT32* PUINT32
|
TYPEDEF: UINT32* PUINT32
|
||||||
TYPEDEF: UINT64* PUINT64
|
TYPEDEF: UINT64* PUINT64
|
||||||
TYPEDEF: ULONG* PULONG
|
TYPEDEF: ULONG* PULONG
|
||||||
TYPEDEF: ULONGLONG* PULONGLONG
|
TYPEDEF: ULONGLONG* PULONGLONG
|
||||||
TYPEDEF: ULONG_PTR* PULONG_PTR
|
TYPEDEF: ULONG_PTR* PULONG_PTR
|
||||||
TYPEDEF: ULONG32* PULONG32
|
TYPEDEF: ULONG32* PULONG32
|
||||||
TYPEDEF: ULONG64* PULONG64
|
TYPEDEF: ULONG64* PULONG64
|
||||||
TYPEDEF: USHORT* PUSHORT
|
TYPEDEF: USHORT* PUSHORT
|
||||||
TYPEDEF: WCHAR* PWCHAR
|
TYPEDEF: WCHAR* PWCHAR
|
||||||
TYPEDEF: WORD* PWORD
|
TYPEDEF: WORD* PWORD
|
||||||
TYPEDEF: WCHAR* PWSTR
|
TYPEDEF: WCHAR* PWSTR
|
||||||
TYPEDEF: HANDLE SC_HANDLE
|
TYPEDEF: HANDLE SC_HANDLE
|
||||||
TYPEDEF: LPVOID SC_LOCK
|
TYPEDEF: LPVOID SC_LOCK
|
||||||
TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
|
TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
|
||||||
TYPEDEF: ULONG_PTR SIZE_T
|
TYPEDEF: ULONG_PTR SIZE_T
|
||||||
TYPEDEF: LONG_PTR SSIZE_T
|
TYPEDEF: LONG_PTR SSIZE_T
|
||||||
TYPEDEF: LONGLONG USN
|
TYPEDEF: LONGLONG USN
|
||||||
! TYPEDEF: __stdcall WINAPI
|
! TYPEDEF: __stdcall WINAPI
|
||||||
TYPEDEF: UINT_PTR WPARAM
|
TYPEDEF: UINT_PTR WPARAM
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TYPEDEF: RECT* LPRECT
|
TYPEDEF: RECT* LPRECT
|
||||||
TYPEDEF: void* PWNDCLASS
|
TYPEDEF: void* PWNDCLASS
|
||||||
TYPEDEF: void* PWNDCLASSEX
|
TYPEDEF: void* PWNDCLASSEX
|
||||||
|
|
||||||
TYPEDEF: void* WNDPROC
|
TYPEDEF: void* WNDPROC
|
||||||
|
|
||||||
! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
|
! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
BEGIN-STRUCT: WNDCLASS
|
BEGIN-STRUCT: WNDCLASS
|
||||||
FIELD: UINT style
|
FIELD: UINT style
|
||||||
FIELD: WNDPROC lpfnWndProc
|
FIELD: WNDPROC lpfnWndProc
|
||||||
FIELD: int cbClsExtra
|
FIELD: int cbClsExtra
|
||||||
FIELD: int cbWndExtra
|
FIELD: int cbWndExtra
|
||||||
FIELD: HINSTANCE hInstance
|
FIELD: HINSTANCE hInstance
|
||||||
FIELD: HICON hIcon
|
FIELD: HICON hIcon
|
||||||
FIELD: HCURSOR hCursor
|
FIELD: HCURSOR hCursor
|
||||||
FIELD: HBRUSH hbrBackground
|
FIELD: HBRUSH hbrBackground
|
||||||
FIELD: LPCTSTR lpszMenuName
|
FIELD: LPCTSTR lpszMenuName
|
||||||
FIELD: LPCTSTR lpszClassName
|
FIELD: LPCTSTR lpszClassName
|
||||||
END-STRUCT
|
END-STRUCT
|
||||||
|
|
||||||
BEGIN-STRUCT: WNDCLASSEX
|
BEGIN-STRUCT: WNDCLASSEX
|
||||||
FIELD: UINT cbSize
|
FIELD: UINT cbSize
|
||||||
FIELD: UINT style
|
FIELD: UINT style
|
||||||
FIELD: WNDPROC lpfnWndProc
|
FIELD: WNDPROC lpfnWndProc
|
||||||
FIELD: int cbClsExtra
|
FIELD: int cbClsExtra
|
||||||
FIELD: int cbWndExtra
|
FIELD: int cbWndExtra
|
||||||
FIELD: HINSTANCE hInstance
|
FIELD: HINSTANCE hInstance
|
||||||
FIELD: HICON hIcon
|
FIELD: HICON hIcon
|
||||||
FIELD: HCURSOR hCursor
|
FIELD: HCURSOR hCursor
|
||||||
FIELD: HBRUSH hbrBackground
|
FIELD: HBRUSH hbrBackground
|
||||||
FIELD: LPCTSTR lpszMenuName
|
FIELD: LPCTSTR lpszMenuName
|
||||||
FIELD: LPCTSTR lpszClassName
|
FIELD: LPCTSTR lpszClassName
|
||||||
FIELD: HICON hIconSm
|
FIELD: HICON hIconSm
|
||||||
END-STRUCT
|
END-STRUCT
|
||||||
|
|
||||||
BEGIN-STRUCT: RECT
|
BEGIN-STRUCT: RECT
|
||||||
FIELD: LONG left
|
FIELD: LONG left
|
||||||
FIELD: LONG top
|
FIELD: LONG top
|
||||||
FIELD: LONG right
|
FIELD: LONG right
|
||||||
FIELD: LONG bottom
|
FIELD: LONG bottom
|
||||||
END-STRUCT
|
END-STRUCT
|
||||||
|
|
||||||
BEGIN-STRUCT: PAINTSTRUCT
|
BEGIN-STRUCT: PAINTSTRUCT
|
||||||
FIELD: HDC hdc
|
FIELD: HDC hdc
|
||||||
FIELD: BOOL fErase
|
FIELD: BOOL fErase
|
||||||
FIELD: RECT rcPaint
|
FIELD: RECT rcPaint
|
||||||
FIELD: BOOL fRestore
|
FIELD: BOOL fRestore
|
||||||
FIELD: BOOL fIncUpdate
|
FIELD: BOOL fIncUpdate
|
||||||
FIELD: BYTE rgbReserved[32]
|
FIELD: BYTE rgbReserved[32]
|
||||||
END-STRUCT
|
END-STRUCT
|
||||||
|
|
||||||
TYPEDEF: PAINTSTRUCT* LPPAINTSTRUCT
|
TYPEDEF: PAINTSTRUCT* LPPAINTSTRUCT
|
||||||
|
|
||||||
BEGIN-STRUCT: POINT
|
BEGIN-STRUCT: POINT
|
||||||
FIELD: LONG x
|
FIELD: LONG x
|
||||||
FIELD: LONG y
|
FIELD: LONG y
|
||||||
END-STRUCT
|
END-STRUCT
|
||||||
|
|
||||||
BEGIN-STRUCT: MSG
|
BEGIN-STRUCT: MSG
|
||||||
FIELD: HWND hWnd
|
FIELD: HWND hWnd
|
||||||
FIELD: UINT message
|
FIELD: UINT message
|
||||||
FIELD: WPARAM wParam
|
FIELD: WPARAM wParam
|
||||||
FIELD: LPARAM lParam
|
FIELD: LPARAM lParam
|
||||||
FIELD: DWORD time
|
FIELD: DWORD time
|
||||||
FIELD: POINT pt
|
FIELD: POINT pt
|
||||||
END-STRUCT
|
END-STRUCT
|
||||||
TYPEDEF: MSG* LPMSG
|
TYPEDEF: MSG* LPMSG
|
||||||
|
|
||||||
BEGIN-STRUCT: PIXELFORMATDESCRIPTOR
|
BEGIN-STRUCT: PIXELFORMATDESCRIPTOR
|
||||||
FIELD: WORD nSize
|
FIELD: WORD nSize
|
||||||
FIELD: WORD nVersion
|
FIELD: WORD nVersion
|
||||||
FIELD: DWORD dwFlags
|
FIELD: DWORD dwFlags
|
||||||
FIELD: BYTE iPixelType
|
FIELD: BYTE iPixelType
|
||||||
FIELD: BYTE cColorBits
|
FIELD: BYTE cColorBits
|
||||||
FIELD: BYTE cRedBits
|
FIELD: BYTE cRedBits
|
||||||
FIELD: BYTE cRedShift
|
FIELD: BYTE cRedShift
|
||||||
FIELD: BYTE cGreenBits
|
FIELD: BYTE cGreenBits
|
||||||
FIELD: BYTE cGreenShift
|
FIELD: BYTE cGreenShift
|
||||||
FIELD: BYTE cBlueBits
|
FIELD: BYTE cBlueBits
|
||||||
FIELD: BYTE cBlueShift
|
FIELD: BYTE cBlueShift
|
||||||
FIELD: BYTE cAlphaBits
|
FIELD: BYTE cAlphaBits
|
||||||
FIELD: BYTE cAlphaShift
|
FIELD: BYTE cAlphaShift
|
||||||
FIELD: BYTE cAccumBits
|
FIELD: BYTE cAccumBits
|
||||||
FIELD: BYTE cAccumRedBits
|
FIELD: BYTE cAccumRedBits
|
||||||
FIELD: BYTE cAccumGreenBits
|
FIELD: BYTE cAccumGreenBits
|
||||||
FIELD: BYTE cAccumBlueBits
|
FIELD: BYTE cAccumBlueBits
|
||||||
FIELD: BYTE cAccumAlphaBits
|
FIELD: BYTE cAccumAlphaBits
|
||||||
FIELD: BYTE cDepthBits
|
FIELD: BYTE cDepthBits
|
||||||
FIELD: BYTE cStencilBits
|
FIELD: BYTE cStencilBits
|
||||||
FIELD: BYTE cAuxBuffers
|
FIELD: BYTE cAuxBuffers
|
||||||
FIELD: BYTE iLayerType
|
FIELD: BYTE iLayerType
|
||||||
FIELD: BYTE bReserved
|
FIELD: BYTE bReserved
|
||||||
FIELD: DWORD dwLayerMask
|
FIELD: DWORD dwLayerMask
|
||||||
FIELD: DWORD dwVisibleMask
|
FIELD: DWORD dwVisibleMask
|
||||||
FIELD: DWORD dwDamageMask
|
FIELD: DWORD dwDamageMask
|
||||||
END-STRUCT
|
END-STRUCT
|
||||||
|
|
||||||
BEGIN-STRUCT: RECT
|
BEGIN-STRUCT: RECT
|
||||||
FIELD: LONG left
|
FIELD: LONG left
|
||||||
FIELD: LONG top
|
FIELD: LONG top
|
||||||
FIELD: LONG right
|
FIELD: LONG right
|
||||||
FIELD: LONG bottom
|
FIELD: LONG bottom
|
||||||
END-STRUCT
|
END-STRUCT
|
||||||
|
|
||||||
TYPEDEF: RECT* PRECT
|
TYPEDEF: RECT* PRECT
|
||||||
TYPEDEF: RECT* LPRECT
|
TYPEDEF: RECT* LPRECT
|
||||||
TYPEDEF: PIXELFORMATDESCRIPTOR PFD
|
TYPEDEF: PIXELFORMATDESCRIPTOR PFD
|
||||||
TYPEDEF: PFD* LPPFD
|
TYPEDEF: PFD* LPPFD
|
||||||
TYPEDEF: HANDLE HGLRC
|
TYPEDEF: HANDLE HGLRC
|
||||||
TYPEDEF: HANDLE HRGN
|
TYPEDEF: HANDLE HRGN
|
||||||
|
|
|
@ -1,325 +1,325 @@
|
||||||
! Copyright (C) 2005, 2006 Doug Coleman.
|
! Copyright (C) 2005, 2006 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien arrays errors freetype gadgets gadgets-launchpad
|
USING: alien arrays errors freetype gadgets gadgets-launchpad
|
||||||
gadgets-listener hashtables io kernel math namespaces prettyprint
|
gadgets-listener hashtables io kernel math namespaces prettyprint
|
||||||
sequences strings vectors words win32-api win32-api-messages ;
|
sequences strings vectors words win32-api win32-api-messages ;
|
||||||
USING: inspector threads memory ;
|
USING: inspector threads memory ;
|
||||||
IN: win32
|
IN: win32
|
||||||
|
|
||||||
! world-handle is a <win>
|
! world-handle is a <win>
|
||||||
TUPLE: win hWnd hDC hRC world ;
|
TUPLE: win hWnd hDC hRC world ;
|
||||||
|
|
||||||
SYMBOL: msg-obj
|
SYMBOL: msg-obj
|
||||||
SYMBOL: class-name
|
SYMBOL: class-name
|
||||||
|
|
||||||
: random-class-name "Factor" 100000000 random-int unparse append ;
|
: random-class-name "Factor" 100000000 random-int unparse append ;
|
||||||
|
|
||||||
: style ( -- n ) WS_OVERLAPPEDWINDOW ; inline
|
: style ( -- n ) WS_OVERLAPPEDWINDOW ; inline
|
||||||
: ex-style ( -- n ) WS_EX_APPWINDOW WS_EX_WINDOWEDGE bitor ; inline
|
: ex-style ( -- n ) WS_EX_APPWINDOW WS_EX_WINDOWEDGE bitor ; inline
|
||||||
|
|
||||||
: adjust-RECT ( RECT -- )
|
: adjust-RECT ( RECT -- )
|
||||||
style 0 ex-style AdjustWindowRectEx win32-error=0 ;
|
style 0 ex-style AdjustWindowRectEx win32-error=0 ;
|
||||||
|
|
||||||
: make-RECT ( width height -- RECT )
|
: make-RECT ( width height -- RECT )
|
||||||
"RECT" <c-object> [ set-RECT-bottom ] keep [ set-RECT-right ] keep ;
|
"RECT" <c-object> [ set-RECT-bottom ] keep [ set-RECT-right ] keep ;
|
||||||
|
|
||||||
: make-adjusted-RECT ( width height -- RECT )
|
: make-adjusted-RECT ( width height -- RECT )
|
||||||
make-RECT dup adjust-RECT ;
|
make-RECT dup adjust-RECT ;
|
||||||
|
|
||||||
|
|
||||||
: get-RECT-dimensions ( RECT -- width height )
|
: get-RECT-dimensions ( RECT -- width height )
|
||||||
[ RECT-right ] keep [ RECT-left - ] keep
|
[ RECT-right ] keep [ RECT-left - ] keep
|
||||||
[ RECT-bottom ] keep RECT-top - ;
|
[ RECT-bottom ] keep RECT-top - ;
|
||||||
|
|
||||||
: handle-wm-paint ( hWnd uMsg wParam lParam -- )
|
: handle-wm-paint ( hWnd uMsg wParam lParam -- )
|
||||||
#! wParam and lParam are unused
|
#! wParam and lParam are unused
|
||||||
#! only paint if width/height both > 0
|
#! only paint if width/height both > 0
|
||||||
3drop window dup rect-dim first2 [ 0 > ] 2apply and [ draw-world ] when ;
|
3drop window dup rect-dim first2 [ 0 > ] 2apply and [ draw-world ] when ;
|
||||||
|
|
||||||
: handle-wm-size ( hWnd uMsg wParam lParam -- )
|
: handle-wm-size ( hWnd uMsg wParam lParam -- )
|
||||||
[ lo-word ] keep hi-word make-RECT get-RECT-dimensions 2array
|
[ lo-word ] keep hi-word make-RECT get-RECT-dimensions 2array
|
||||||
2nip
|
2nip
|
||||||
dup { 0 0 } = [ 2drop ] [ swap window set-gadget-dim ] if ;
|
dup { 0 0 } = [ 2drop ] [ swap window set-gadget-dim ] if ;
|
||||||
|
|
||||||
: wm-keydown-codes ( n -- key )
|
: wm-keydown-codes ( n -- key )
|
||||||
H{
|
H{
|
||||||
{ 8 "BACKSPACE" }
|
{ 8 "BACKSPACE" }
|
||||||
{ 9 "TAB" }
|
{ 9 "TAB" }
|
||||||
{ 13 "RETURN" }
|
{ 13 "RETURN" }
|
||||||
{ 27 "ESCAPE" }
|
{ 27 "ESCAPE" }
|
||||||
{ 33 "PAGE_UP" }
|
{ 33 "PAGE_UP" }
|
||||||
{ 34 "PAGE_DOWN" }
|
{ 34 "PAGE_DOWN" }
|
||||||
{ 35 "END" }
|
{ 35 "END" }
|
||||||
{ 36 "HOME" }
|
{ 36 "HOME" }
|
||||||
{ 37 "LEFT" }
|
{ 37 "LEFT" }
|
||||||
{ 38 "UP" }
|
{ 38 "UP" }
|
||||||
{ 39 "RIGHT" }
|
{ 39 "RIGHT" }
|
||||||
{ 40 "DOWN" }
|
{ 40 "DOWN" }
|
||||||
{ 45 "INSERT" }
|
{ 45 "INSERT" }
|
||||||
{ 46 "DELETE" }
|
{ 46 "DELETE" }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
: key-state-down?
|
: key-state-down?
|
||||||
GetKeyState 1 16 shift bitand 0 > ;
|
GetKeyState 1 16 shift bitand 0 > ;
|
||||||
|
|
||||||
: left-shift? ( -- ? ) VK_LSHIFT key-state-down? ;
|
: left-shift? ( -- ? ) VK_LSHIFT key-state-down? ;
|
||||||
: left-ctrl? ( -- ? ) VK_LCONTROL key-state-down? ;
|
: left-ctrl? ( -- ? ) VK_LCONTROL key-state-down? ;
|
||||||
: left-alt? ( -- ? ) VK_LMENU key-state-down? ;
|
: left-alt? ( -- ? ) VK_LMENU key-state-down? ;
|
||||||
: right-shift? ( -- ? ) VK_RSHIFT key-state-down? ;
|
: right-shift? ( -- ? ) VK_RSHIFT key-state-down? ;
|
||||||
: right-ctrl? ( -- ? ) VK_RCONTROL key-state-down? ;
|
: right-ctrl? ( -- ? ) VK_RCONTROL key-state-down? ;
|
||||||
: right-alt? ( -- ? ) VK_RMENU key-state-down? ;
|
: right-alt? ( -- ? ) VK_RMENU key-state-down? ;
|
||||||
: shift? ( -- ? ) left-shift? right-shift? or ;
|
: shift? ( -- ? ) left-shift? right-shift? or ;
|
||||||
: ctrl? ( -- ? ) left-ctrl? right-ctrl? or ;
|
: ctrl? ( -- ? ) left-ctrl? right-ctrl? or ;
|
||||||
: alt? ( -- ? ) left-alt? right-alt? or ;
|
: alt? ( -- ? ) left-alt? right-alt? or ;
|
||||||
: caps-lock? ( -- ? ) VK_CAPITAL GetKeyState zero? not ;
|
: caps-lock? ( -- ? ) VK_CAPITAL GetKeyState zero? not ;
|
||||||
: lower-case? ( -- ? ) shift? caps-lock? and caps-lock? not shift? not and or ;
|
: lower-case? ( -- ? ) shift? caps-lock? and caps-lock? not shift? not and or ;
|
||||||
|
|
||||||
: key-modifiers ( -- list )
|
: key-modifiers ( -- list )
|
||||||
[
|
[
|
||||||
shift? [ S+ , ] when
|
shift? [ S+ , ] when
|
||||||
ctrl? [ C+ , ] when
|
ctrl? [ C+ , ] when
|
||||||
alt? [ A+ , ] when
|
alt? [ A+ , ] when
|
||||||
] { } make [ empty? not ] keep f ? ;
|
] { } make [ empty? not ] keep f ? ;
|
||||||
|
|
||||||
: exclude-keys
|
: exclude-keys
|
||||||
H{
|
H{
|
||||||
! { 8 "BACKSPACE" }
|
! { 8 "BACKSPACE" }
|
||||||
! { 9 "TAB" }
|
! { 9 "TAB" }
|
||||||
{ 16 "SHIFT" }
|
{ 16 "SHIFT" }
|
||||||
{ 17 "CTRL" }
|
{ 17 "CTRL" }
|
||||||
{ 18 "ALT" }
|
{ 18 "ALT" }
|
||||||
{ 20 "CAPS-LOCK" }
|
{ 20 "CAPS-LOCK" }
|
||||||
{ 27 "ESCAPE" }
|
{ 27 "ESCAPE" }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
: exclude-key? ( n -- bool ) exclude-keys hash* nip ;
|
: exclude-key? ( n -- bool ) exclude-keys hash* nip ;
|
||||||
: handle-key? ( n -- bool ) wm-keydown-codes hash* nip ;
|
: handle-key? ( n -- bool ) wm-keydown-codes hash* nip ;
|
||||||
|
|
||||||
: keystroke>gesture ( n -- <key-down> )
|
: keystroke>gesture ( n -- <key-down> )
|
||||||
dup wm-keydown-codes hash* [ nip ] [ drop ch>string lower-case? [ >lower ] when ] if
|
dup wm-keydown-codes hash* [ nip ] [ drop ch>string lower-case? [ >lower ] when ] if
|
||||||
key-modifiers swap ;
|
key-modifiers swap ;
|
||||||
|
|
||||||
SYMBOL: lParam
|
SYMBOL: lParam
|
||||||
SYMBOL: wParam
|
SYMBOL: wParam
|
||||||
SYMBOL: uMsg
|
SYMBOL: uMsg
|
||||||
SYMBOL: hWnd
|
SYMBOL: hWnd
|
||||||
|
|
||||||
: get-focus ( hWnd -- gadget )
|
: get-focus ( hWnd -- gadget )
|
||||||
window world-focus ;
|
window world-focus ;
|
||||||
|
|
||||||
: handle-wm-keydown ( hWnd uMsg wParam lParam -- )
|
: handle-wm-keydown ( hWnd uMsg wParam lParam -- )
|
||||||
lParam set wParam set uMsg set hWnd set
|
lParam set wParam set uMsg set hWnd set
|
||||||
wParam get exclude-key? [
|
wParam get exclude-key? [
|
||||||
wParam get keystroke>gesture <key-down>
|
wParam get keystroke>gesture <key-down>
|
||||||
hWnd get get-focus handle-gesture [
|
hWnd get get-focus handle-gesture [
|
||||||
wParam get ch>string lower-case? [ >lower ] when
|
wParam get ch>string lower-case? [ >lower ] when
|
||||||
hWnd get get-focus user-input
|
hWnd get get-focus user-input
|
||||||
] when
|
] when
|
||||||
] unless ;
|
] unless ;
|
||||||
|
|
||||||
: handle-wm-keyup ( hWnd uMsg wParam lParam -- )
|
: handle-wm-keyup ( hWnd uMsg wParam lParam -- )
|
||||||
lParam set wParam set uMsg set hWnd set
|
lParam set wParam set uMsg set hWnd set
|
||||||
wParam get keystroke>gesture <key-up> hWnd get get-focus handle-gesture
|
wParam get keystroke>gesture <key-up> hWnd get get-focus handle-gesture
|
||||||
drop ;
|
drop ;
|
||||||
|
|
||||||
: cleanup-window ( handle -- )
|
: cleanup-window ( handle -- )
|
||||||
[ win-hRC wglDeleteContext win32-error=0 ] keep
|
[ win-hRC wglDeleteContext win32-error=0 ] keep
|
||||||
[ win-hWnd ] keep win-hDC ReleaseDC win32-error=0 ;
|
[ win-hWnd ] keep win-hDC ReleaseDC win32-error=0 ;
|
||||||
|
|
||||||
: handle-wm-destroy ( hWnd uMsg wParam lParam -- )
|
: handle-wm-destroy ( hWnd uMsg wParam lParam -- )
|
||||||
3drop
|
3drop
|
||||||
window [ world-handle ] keep
|
window [ world-handle ] keep
|
||||||
[ close-world ] keep
|
[ close-world ] keep
|
||||||
[ drop win-hWnd unregister-window ] 2keep
|
[ drop win-hWnd unregister-window ] 2keep
|
||||||
drop cleanup-window
|
drop cleanup-window
|
||||||
0 PostQuitMessage ;
|
0 PostQuitMessage ;
|
||||||
|
|
||||||
: handle-wm-set-focus ( hWnd uMsg wParam lParam -- )
|
: handle-wm-set-focus ( hWnd uMsg wParam lParam -- )
|
||||||
3drop window focus-world ;
|
3drop window focus-world ;
|
||||||
|
|
||||||
: handle-wm-kill-focus ( hWnd uMsg wParam lParam -- )
|
: handle-wm-kill-focus ( hWnd uMsg wParam lParam -- )
|
||||||
3drop window unfocus-world ;
|
3drop window unfocus-world ;
|
||||||
|
|
||||||
: mouse-button ( uMsg -- n )
|
: mouse-button ( uMsg -- n )
|
||||||
{
|
{
|
||||||
{ [ dup WM_LBUTTONDOWN = ] [ drop 1 ] }
|
{ [ dup WM_LBUTTONDOWN = ] [ drop 1 ] }
|
||||||
{ [ dup WM_LBUTTONUP = ] [ drop 1 ] }
|
{ [ dup WM_LBUTTONUP = ] [ drop 1 ] }
|
||||||
{ [ dup WM_MBUTTONDOWN = ] [ drop 2 ] }
|
{ [ dup WM_MBUTTONDOWN = ] [ drop 2 ] }
|
||||||
{ [ dup WM_MBUTTONUP = ] [ drop 2 ] }
|
{ [ dup WM_MBUTTONUP = ] [ drop 2 ] }
|
||||||
{ [ dup WM_RBUTTONDOWN = ] [ drop 3 ] }
|
{ [ dup WM_RBUTTONDOWN = ] [ drop 3 ] }
|
||||||
{ [ dup WM_RBUTTONUP = ] [ drop 3 ] }
|
{ [ dup WM_RBUTTONUP = ] [ drop 3 ] }
|
||||||
{ [ t ] [ "bad button" throw ] }
|
{ [ t ] [ "bad button" throw ] }
|
||||||
} cond ;
|
} cond ;
|
||||||
|
|
||||||
: mouse-coordinate ( lParam -- seq ) [ lo-word ] keep hi-word 2array ;
|
: mouse-coordinate ( lParam -- seq ) [ lo-word ] keep hi-word 2array ;
|
||||||
: mouse-wheel ( lParam -- n ) hi-word 0 > 1 -1 ? ;
|
: mouse-wheel ( lParam -- n ) hi-word 0 > 1 -1 ? ;
|
||||||
|
|
||||||
: prepare-mouse ( hWnd uMsg wParam lParam -- world )
|
: prepare-mouse ( hWnd uMsg wParam lParam -- world )
|
||||||
nip >r mouse-button r> mouse-coordinate rot window ;
|
nip >r mouse-button r> mouse-coordinate rot window ;
|
||||||
|
|
||||||
: handle-wm-buttondown ( hWnd uMsg wParam lParam -- )
|
: handle-wm-buttondown ( hWnd uMsg wParam lParam -- )
|
||||||
>r pick SetCapture drop r>
|
>r pick SetCapture drop r>
|
||||||
prepare-mouse send-button-down ;
|
prepare-mouse send-button-down ;
|
||||||
|
|
||||||
: handle-wm-buttonup ( hWnd uMsg wParam lParam -- )
|
: handle-wm-buttonup ( hWnd uMsg wParam lParam -- )
|
||||||
ReleaseCapture drop
|
ReleaseCapture drop
|
||||||
prepare-mouse send-button-up ;
|
prepare-mouse send-button-up ;
|
||||||
|
|
||||||
: handle-wm-mousemove ( hWnd uMsg wParam lParam -- )
|
: handle-wm-mousemove ( hWnd uMsg wParam lParam -- )
|
||||||
2nip mouse-coordinate swap window move-hand fire-motion ;
|
2nip mouse-coordinate swap window move-hand fire-motion ;
|
||||||
|
|
||||||
: handle-wm-mousewheel ( hWnd uMsg wParam lParam -- )
|
: handle-wm-mousewheel ( hWnd uMsg wParam lParam -- )
|
||||||
mouse-coordinate >r mouse-wheel nip r> rot window send-wheel ;
|
mouse-coordinate >r mouse-wheel nip r> rot window send-wheel ;
|
||||||
|
|
||||||
: handle-wm-cancelmode ( hWnd uMsg wParam lParam -- )
|
: handle-wm-cancelmode ( hWnd uMsg wParam lParam -- )
|
||||||
#! message sent if windows needs application to stop dragging
|
#! message sent if windows needs application to stop dragging
|
||||||
3drop drop ReleaseCapture drop ;
|
3drop drop ReleaseCapture drop ;
|
||||||
|
|
||||||
: 4dup ( a b c d -- a b c d a b c d )
|
: 4dup ( a b c d -- a b c d a b c d )
|
||||||
>r >r 2dup r> r> 2swap >r >r 2dup r> r> 2swap ;
|
>r >r 2dup r> r> 2swap >r >r 2dup r> r> 2swap ;
|
||||||
|
|
||||||
! return 0 if you handle the message, else just let DefWindowProc return its val
|
! return 0 if you handle the message, else just let DefWindowProc return its val
|
||||||
: ui-wndproc ( hWnd uMsg wParam lParam -- lresult )
|
: ui-wndproc ( hWnd uMsg wParam lParam -- lresult )
|
||||||
"uint" { "void*" "uint" "long" "long" } [
|
"uint" { "void*" "uint" "long" "long" } [
|
||||||
[
|
[
|
||||||
pick
|
pick
|
||||||
! "Message: " write dup get-windows-message-name write
|
! "Message: " write dup get-windows-message-name write
|
||||||
! " " write dup unparse print flush
|
! " " write dup unparse print flush
|
||||||
{
|
{
|
||||||
{ [ dup WM_DESTROY = ] [ drop handle-wm-destroy 0 ] }
|
{ [ dup WM_DESTROY = ] [ drop handle-wm-destroy 0 ] }
|
||||||
{ [ dup WM_PAINT = ]
|
{ [ dup WM_PAINT = ]
|
||||||
[ drop 4dup handle-wm-paint DefWindowProc ] }
|
[ drop 4dup handle-wm-paint DefWindowProc ] }
|
||||||
{ [ dup WM_SIZE = ] [ drop handle-wm-size 0 ] }
|
{ [ dup WM_SIZE = ] [ drop handle-wm-size 0 ] }
|
||||||
|
|
||||||
! Keyboard events
|
! Keyboard events
|
||||||
{ [ dup WM_KEYDOWN = over WM_SYSKEYDOWN = or ]
|
{ [ dup WM_KEYDOWN = over WM_SYSKEYDOWN = or ]
|
||||||
[ drop handle-wm-keydown 0 ] }
|
[ drop handle-wm-keydown 0 ] }
|
||||||
{ [ dup WM_KEYUP = over WM_SYSKEYUP = or ]
|
{ [ dup WM_KEYUP = over WM_SYSKEYUP = or ]
|
||||||
[ drop handle-wm-keyup 0 ] }
|
[ drop handle-wm-keyup 0 ] }
|
||||||
|
|
||||||
{ [ dup WM_SETFOCUS = ] [ drop handle-wm-set-focus 0 ] }
|
{ [ dup WM_SETFOCUS = ] [ drop handle-wm-set-focus 0 ] }
|
||||||
{ [ dup WM_KILLFOCUS = ] [ drop handle-wm-kill-focus 0 ] }
|
{ [ dup WM_KILLFOCUS = ] [ drop handle-wm-kill-focus 0 ] }
|
||||||
|
|
||||||
! Mouse events
|
! Mouse events
|
||||||
{ [ dup WM_LBUTTONDOWN = ] [ drop handle-wm-buttondown 0 ] }
|
{ [ dup WM_LBUTTONDOWN = ] [ drop handle-wm-buttondown 0 ] }
|
||||||
{ [ dup WM_MBUTTONDOWN = ] [ drop handle-wm-buttondown 0 ] }
|
{ [ dup WM_MBUTTONDOWN = ] [ drop handle-wm-buttondown 0 ] }
|
||||||
{ [ dup WM_RBUTTONDOWN = ] [ drop handle-wm-buttondown 0 ] }
|
{ [ dup WM_RBUTTONDOWN = ] [ drop handle-wm-buttondown 0 ] }
|
||||||
{ [ dup WM_LBUTTONUP = ] [ drop handle-wm-buttonup 0 ] }
|
{ [ dup WM_LBUTTONUP = ] [ drop handle-wm-buttonup 0 ] }
|
||||||
{ [ dup WM_MBUTTONUP = ] [ drop handle-wm-buttonup 0 ] }
|
{ [ dup WM_MBUTTONUP = ] [ drop handle-wm-buttonup 0 ] }
|
||||||
{ [ dup WM_RBUTTONUP = ] [ drop handle-wm-buttonup 0 ] }
|
{ [ dup WM_RBUTTONUP = ] [ drop handle-wm-buttonup 0 ] }
|
||||||
{ [ dup WM_MOUSEMOVE = ] [ drop handle-wm-mousemove 0 ] }
|
{ [ dup WM_MOUSEMOVE = ] [ drop handle-wm-mousemove 0 ] }
|
||||||
{ [ dup WM_MOUSEWHEEL = ] [ drop handle-wm-mousewheel 0 ] }
|
{ [ dup WM_MOUSEWHEEL = ] [ drop handle-wm-mousewheel 0 ] }
|
||||||
{ [ dup WM_CANCELMODE = ] [ drop handle-wm-cancelmode 0 ] }
|
{ [ dup WM_CANCELMODE = ] [ drop handle-wm-cancelmode 0 ] }
|
||||||
|
|
||||||
{ [ t ] [ drop DefWindowProc ] }
|
{ [ t ] [ drop DefWindowProc ] }
|
||||||
} cond
|
} cond
|
||||||
] [ error. 0 ] recover
|
] [ error. 0 ] recover
|
||||||
! "finished handling message" print .s flush
|
! "finished handling message" print .s flush
|
||||||
] alien-callback ;
|
] alien-callback ;
|
||||||
|
|
||||||
: do-events ( -- )
|
: do-events ( -- )
|
||||||
msg-obj get f 0 0 PM_REMOVE PeekMessage
|
msg-obj get f 0 0 PM_REMOVE PeekMessage
|
||||||
zero? not [
|
zero? not [
|
||||||
msg-obj get MSG-message WM_QUIT = [
|
msg-obj get MSG-message WM_QUIT = [
|
||||||
msg-obj get [ TranslateMessage drop ] keep DispatchMessage drop
|
msg-obj get [ TranslateMessage drop ] keep DispatchMessage drop
|
||||||
] unless
|
] unless
|
||||||
] when ;
|
] when ;
|
||||||
|
|
||||||
: event-loop ( -- )
|
: event-loop ( -- )
|
||||||
! "MSG'D" print flush
|
! "MSG'D" print flush
|
||||||
windows get empty? [
|
windows get empty? [
|
||||||
[ do-events ui-step ] ui-try event-loop
|
[ do-events ui-step ] ui-try event-loop
|
||||||
] unless ;
|
] unless ;
|
||||||
|
|
||||||
: register-wndclassex ( classname wndproc -- )
|
: register-wndclassex ( classname wndproc -- )
|
||||||
"WNDCLASSEX" <c-object>
|
"WNDCLASSEX" <c-object>
|
||||||
"WNDCLASSEX" c-size over set-WNDCLASSEX-cbSize
|
"WNDCLASSEX" c-size over set-WNDCLASSEX-cbSize
|
||||||
CS_HREDRAW CS_VREDRAW bitor CS_OWNDC bitor over set-WNDCLASSEX-style
|
CS_HREDRAW CS_VREDRAW bitor CS_OWNDC bitor over set-WNDCLASSEX-style
|
||||||
[ set-WNDCLASSEX-lpfnWndProc ] keep
|
[ set-WNDCLASSEX-lpfnWndProc ] keep
|
||||||
0 over set-WNDCLASSEX-cbClsExtra
|
0 over set-WNDCLASSEX-cbClsExtra
|
||||||
0 over set-WNDCLASSEX-cbWndExtra
|
0 over set-WNDCLASSEX-cbWndExtra
|
||||||
f GetModuleHandle over set-WNDCLASSEX-hInstance
|
f GetModuleHandle over set-WNDCLASSEX-hInstance
|
||||||
f IDI_APPLICATION LoadIcon over set-WNDCLASSEX-hIcon
|
f IDI_APPLICATION LoadIcon over set-WNDCLASSEX-hIcon
|
||||||
f IDC_ARROW LoadCursor over set-WNDCLASSEX-hCursor
|
f IDC_ARROW LoadCursor over set-WNDCLASSEX-hCursor
|
||||||
[ set-WNDCLASSEX-lpszClassName ] keep
|
[ set-WNDCLASSEX-lpszClassName ] keep
|
||||||
RegisterClassEx dup win32-error=0 ;
|
RegisterClassEx dup win32-error=0 ;
|
||||||
|
|
||||||
: create-window ( width height -- hwnd )
|
: create-window ( width height -- hwnd )
|
||||||
make-adjusted-RECT
|
make-adjusted-RECT
|
||||||
>r class-name get <malloc-string> f r>
|
>r class-name get <malloc-string> f r>
|
||||||
>r >r >r ex-style r> r>
|
>r >r >r ex-style r> r>
|
||||||
WS_CLIPSIBLINGS WS_CLIPCHILDREN bitor style bitor
|
WS_CLIPSIBLINGS WS_CLIPCHILDREN bitor style bitor
|
||||||
0 0 r>
|
0 0 r>
|
||||||
get-RECT-dimensions
|
get-RECT-dimensions
|
||||||
f f f GetModuleHandle f CreateWindowEx dup win32-error=0 ;
|
f f f GetModuleHandle f CreateWindowEx dup win32-error=0 ;
|
||||||
|
|
||||||
: show-window ( hWnd -- )
|
: show-window ( hWnd -- )
|
||||||
dup SW_SHOW ShowWindow drop ! always succeeds
|
dup SW_SHOW ShowWindow drop ! always succeeds
|
||||||
dup SetForegroundWindow drop
|
dup SetForegroundWindow drop
|
||||||
SetFocus drop ;
|
SetFocus drop ;
|
||||||
|
|
||||||
: init-win32-ui
|
: init-win32-ui
|
||||||
"MSG" <c-object> msg-obj set
|
"MSG" <c-object> msg-obj set
|
||||||
random-class-name class-name set
|
random-class-name class-name set
|
||||||
class-name get <malloc-string> ui-wndproc
|
class-name get <malloc-string> ui-wndproc
|
||||||
register-wndclassex win32-error=0 ;
|
register-wndclassex win32-error=0 ;
|
||||||
|
|
||||||
: cleanup-win32-ui ( -- )
|
: cleanup-win32-ui ( -- )
|
||||||
class-name get <malloc-string> f UnregisterClass drop ;
|
class-name get <malloc-string> f UnregisterClass drop ;
|
||||||
|
|
||||||
: setup-pixel-format ( hdc -- )
|
: setup-pixel-format ( hdc -- )
|
||||||
16 make-pfd [ ChoosePixelFormat dup win32-error=0 ] 2keep
|
16 make-pfd [ ChoosePixelFormat dup win32-error=0 ] 2keep
|
||||||
swapd SetPixelFormat win32-error=0 ;
|
swapd SetPixelFormat win32-error=0 ;
|
||||||
|
|
||||||
: get-dc ( hWnd -- hDC ) GetDC dup win32-error=0 ;
|
: get-dc ( hWnd -- hDC ) GetDC dup win32-error=0 ;
|
||||||
|
|
||||||
: get-rc ( hDC -- hRC )
|
: get-rc ( hDC -- hRC )
|
||||||
dup wglCreateContext dup win32-error=0
|
dup wglCreateContext dup win32-error=0
|
||||||
[ wglMakeCurrent win32-error=0 ] keep ;
|
[ wglMakeCurrent win32-error=0 ] keep ;
|
||||||
|
|
||||||
: setup-gl ( hwnd -- hDC hRC )
|
: setup-gl ( hwnd -- hDC hRC )
|
||||||
get-dc
|
get-dc
|
||||||
dup setup-pixel-format
|
dup setup-pixel-format
|
||||||
dup get-rc ;
|
dup get-rc ;
|
||||||
|
|
||||||
IN: gadgets
|
IN: gadgets
|
||||||
|
|
||||||
: open-window* ( world -- ) ! new
|
: open-window* ( world -- ) ! new
|
||||||
[ rect-dim first2 create-window dup setup-gl ] keep
|
[ rect-dim first2 create-window dup setup-gl ] keep
|
||||||
[ <win> ] keep
|
[ <win> ] keep
|
||||||
[ swap win-hWnd register-window ] 2keep
|
[ swap win-hWnd register-window ] 2keep
|
||||||
[ set-world-handle ] 2keep
|
[ set-world-handle ] 2keep
|
||||||
start-world win-hWnd show-window ;
|
start-world win-hWnd show-window ;
|
||||||
|
|
||||||
: select-gl-context ( handle -- )
|
: select-gl-context ( handle -- )
|
||||||
[ win-hDC ] keep win-hRC wglMakeCurrent win32-error=0 ;
|
[ win-hDC ] keep win-hRC wglMakeCurrent win32-error=0 ;
|
||||||
|
|
||||||
: flush-gl-context ( handle -- )
|
: flush-gl-context ( handle -- )
|
||||||
win-hDC SwapBuffers win32-error=0 ;
|
win-hDC SwapBuffers win32-error=0 ;
|
||||||
|
|
||||||
! Move window to front
|
! Move window to front
|
||||||
: raise-window ( world -- )
|
: raise-window ( world -- )
|
||||||
world-handle win-hWnd SetFocus drop ReleaseCapture drop ;
|
world-handle win-hWnd SetFocus drop ReleaseCapture drop ;
|
||||||
|
|
||||||
: set-title ( string world -- )
|
: set-title ( string world -- )
|
||||||
world-handle win-hWnd
|
world-handle win-hWnd
|
||||||
swap <malloc-string> alien-address >r WM_SETTEXT 0 r> SendMessage drop ;
|
swap <malloc-string> alien-address >r WM_SETTEXT 0 r> SendMessage drop ;
|
||||||
|
|
||||||
IN: shells
|
IN: shells
|
||||||
: ui
|
: ui
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
init-timers
|
init-timers
|
||||||
! init-clipboard
|
! init-clipboard
|
||||||
init-win32-ui
|
init-win32-ui
|
||||||
restore-windows? [
|
restore-windows? [
|
||||||
restore-windows
|
restore-windows
|
||||||
] [
|
] [
|
||||||
init-ui
|
init-ui
|
||||||
launchpad-window
|
launchpad-window
|
||||||
listener-window
|
listener-window
|
||||||
] if
|
] if
|
||||||
event-loop
|
event-loop
|
||||||
] with-freetype
|
] with-freetype
|
||||||
] [ cleanup-win32-ui ] cleanup ;
|
] [ cleanup-win32-ui ] cleanup ;
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,16 +1,16 @@
|
||||||
! Copyright (C) 2005, 2006 Doug Coleman.
|
! Copyright (C) 2005, 2006 Doug Coleman.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
USING: alien parser namespaces kernel syntax words math io prettyprint ;
|
USING: alien parser namespaces kernel syntax words math io prettyprint ;
|
||||||
IN: win32-api
|
IN: win32-api
|
||||||
|
|
||||||
: win32-error=0 zero? [ win32-error ] when ;
|
: win32-error=0 zero? [ win32-error ] when ;
|
||||||
: win32-error>0 0 > [ win32-error ] when ;
|
: win32-error>0 0 > [ win32-error ] when ;
|
||||||
: win32-error<0 0 < [ win32-error ] when ;
|
: win32-error<0 0 < [ win32-error ] when ;
|
||||||
: win32-error<>0 zero? [ win32-error ] unless ;
|
: win32-error<>0 zero? [ win32-error ] unless ;
|
||||||
|
|
||||||
: lo-word ( wparam -- lo ) HEX: ffff bitand ;
|
: lo-word ( wparam -- lo ) HEX: ffff bitand ;
|
||||||
: hi-word ( wparam -- hi ) -16 shift ;
|
: hi-word ( wparam -- hi ) -16 shift ;
|
||||||
|
|
||||||
: msgbox ( str -- )
|
: msgbox ( str -- )
|
||||||
f swap "DebugMsg" MB_OK MessageBox drop ;
|
f swap "DebugMsg" MB_OK MessageBox drop ;
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue