Initial checkin
parent
ac86dbef35
commit
f0555504a8
|
@ -0,0 +1,16 @@
|
||||||
|
USING: kernel win32 math namespaces io prettyprint ;
|
||||||
|
|
||||||
|
: (enum-clipboard) ( n -- )
|
||||||
|
EnumClipboardFormats win32-error dup 0 > [ dup , (enum-clipboard) ] when ;
|
||||||
|
|
||||||
|
: enum-clipboard ( -- seq )
|
||||||
|
[ 0 (enum-clipboard) ] { } make nip ;
|
||||||
|
|
||||||
|
0 OpenClipboard win32-error
|
||||||
|
GetClipboardOwner drop win32-error
|
||||||
|
GetClipboardSequenceNumber drop win32-error
|
||||||
|
enum-clipboard
|
||||||
|
|
||||||
|
|
||||||
|
! EmptyClipboard
|
||||||
|
CloseClipboard drop win32-error
|
|
@ -0,0 +1,39 @@
|
||||||
|
IN: win32
|
||||||
|
USING: alien namespaces math io prettyprint kernel ;
|
||||||
|
|
||||||
|
SYMBOL: hInst
|
||||||
|
SYMBOL: wc
|
||||||
|
SYMBOL: className "SimpleWindowClass" className set
|
||||||
|
|
||||||
|
: hello-world
|
||||||
|
f "Hello, world!" "First Application" MB_OK MessageBox ;
|
||||||
|
|
||||||
|
|
||||||
|
! : message-loop ( -- )
|
||||||
|
! message-loop ;
|
||||||
|
|
||||||
|
: app2
|
||||||
|
f GetModuleHandle hInst set
|
||||||
|
<WNDCLASSEX>
|
||||||
|
"WNDCLASSEX" c-size over set-WNDCLASSEX-cbSize
|
||||||
|
CS_HREDRAW CS_VREDRAW bitor over set-WNDCLASSEX-style
|
||||||
|
! [ event-loop ] over set-WNDCLASSEX-lpfnWndProc
|
||||||
|
0 over set-WNDCLASSEX-cbClsExtra
|
||||||
|
0 over set-WNDCLASSEX-cbWndExtra
|
||||||
|
hInst get over set-WNDCLASSEX-hInstance
|
||||||
|
COLOR_WINDOW 1 + over set-WNDCLASSEX-hbrBackground
|
||||||
|
f over set-WNDCLASSEX-lpszMenuName
|
||||||
|
className get over set-WNDCLASSEX-lpszClassName
|
||||||
|
! ! f IDI_APPLICATION LoadIcon over [ set-WNDCLASSEX-hIcon ] keep set-WNDCLASSEX-hIconSm
|
||||||
|
! f IDC_ARROW LoadCursor over set-WNDCLASSEX-hCursor
|
||||||
|
! RegisterClassEx
|
||||||
|
|
||||||
|
! 0 className get "Second Application" WS_OVERLAPPEDWINDOW CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT f f hInst get f ! CreateWindowEx
|
||||||
|
|
||||||
|
! dup SW_SHOWDEFAULT ShowWindow
|
||||||
|
! dup UpdateWindow
|
||||||
|
! message-loop
|
||||||
|
|
||||||
|
|
||||||
|
! f GetModuleHandle
|
||||||
|
;
|
|
@ -0,0 +1,38 @@
|
||||||
|
IN: win32
|
||||||
|
USING: alien kernel errors ;
|
||||||
|
|
||||||
|
LIBRARY: kernel
|
||||||
|
|
||||||
|
! 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: 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 ;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
IN: win32
|
||||||
|
USING: alien compiler kernel parser sequences words ;
|
||||||
|
|
||||||
|
win32? [
|
||||||
|
"user" "user32.dll" "stdcall" add-library
|
||||||
|
"kernel" "kernel32.dll" "stdcall" add-library
|
||||||
|
] [
|
||||||
|
! something with wine here?
|
||||||
|
] if
|
||||||
|
|
||||||
|
[ "utils.factor" "types.factor" "kernel32.factor" "user32.factor" ]
|
||||||
|
|
||||||
|
[ "contrib/win32/" swap append run-file ] each
|
||||||
|
|
||||||
|
"win32" words [ try-compile ] each
|
|
@ -0,0 +1,122 @@
|
||||||
|
IN: win32
|
||||||
|
USE: alien
|
||||||
|
|
||||||
|
TYPEDEF: uchar BYTE
|
||||||
|
TYPEDEF: BYTE* PBYTE
|
||||||
|
TYPEDEF: BYTE* LPBYTE
|
||||||
|
TYPEDEF: int BOOL
|
||||||
|
TYPEDEF: BOOL* PBOOL
|
||||||
|
TYPEDEF: BOOL* LPBOOL
|
||||||
|
TYPEDEF: int INT
|
||||||
|
TYPEDEF: int* PINT
|
||||||
|
TYPEDEF: int* LPINT
|
||||||
|
TYPEDEF: uint UINT
|
||||||
|
TYPEDEF: uint* PUINT
|
||||||
|
TYPEDEF: long LONG
|
||||||
|
TYPEDEF: long* LPLONG
|
||||||
|
TYPEDEF: float FLOAT
|
||||||
|
TYPEDEF: FLOAT* PFLOAT
|
||||||
|
TYPEDEF: ushort WORD
|
||||||
|
TYPEDEF: WORD* PWORD
|
||||||
|
TYPEDEF: WORD* LPWORD
|
||||||
|
TYPEDEF: ulong DWORD
|
||||||
|
TYPEDEF: long LONG_PTR
|
||||||
|
TYPEDEF: ulong ULONG_PTR
|
||||||
|
TYPEDEF: long* PLONG_PTR
|
||||||
|
TYPEDEF: ulong* PULONG_PTR
|
||||||
|
TYPEDEF: DWORD* PDWORD
|
||||||
|
TYPEDEF: DWORD* LPDWORD
|
||||||
|
TYPEDEF: void* LPVOID
|
||||||
|
TYPEDEF: void* LPCVOID
|
||||||
|
TYPEDEF: char* LPCSTR
|
||||||
|
TYPEDEF: char* LPCTSTR
|
||||||
|
TYPEDEF: WORD ATOM
|
||||||
|
|
||||||
|
|
||||||
|
! TYPEDEF: ushort wchar_t
|
||||||
|
! TYPEDEF: ushort* wchar_t*
|
||||||
|
! TYPEDEF: wchar_t ushort
|
||||||
|
TYPEDEF: ushort LPCWSTR
|
||||||
|
|
||||||
|
TYPEDEF: int HANDLE
|
||||||
|
|
||||||
|
TYPEDEF: HANDLE HGDIOBJ
|
||||||
|
TYPEDEF: HANDLE HKEY
|
||||||
|
TYPEDEF: HANDLE* PHKEY
|
||||||
|
TYPEDEF: HANDLE HACCEL
|
||||||
|
TYPEDEF: HANDLE HBITMAP
|
||||||
|
TYPEDEF: HANDLE HBRUSH
|
||||||
|
TYPEDEF: HANDLE HCOLORSPACE
|
||||||
|
TYPEDEF: HANDLE HDC
|
||||||
|
TYPEDEF: HANDLE HGLRC ! OpenGL
|
||||||
|
TYPEDEF: HANDLE HDESK
|
||||||
|
TYPEDEF: HANDLE HENHMETAFILE
|
||||||
|
TYPEDEF: HANDLE HFONT
|
||||||
|
TYPEDEF: HANDLE HICON
|
||||||
|
TYPEDEF: HANDLE HMENU
|
||||||
|
TYPEDEF: HANDLE HMETAFILE
|
||||||
|
TYPEDEF: HANDLE HINSTANCE
|
||||||
|
TYPEDEF: HINSTANCE HMODULE
|
||||||
|
TYPEDEF: HANDLE HPALETTE
|
||||||
|
TYPEDEF: HANDLE HPEN
|
||||||
|
TYPEDEF: HANDLE HRGN
|
||||||
|
TYPEDEF: HANDLE HRSRC
|
||||||
|
TYPEDEF: HANDLE HSTR
|
||||||
|
TYPEDEF: HANDLE HTASK
|
||||||
|
TYPEDEF: HANDLE HWINSTA
|
||||||
|
TYPEDEF: HANDLE HWND
|
||||||
|
TYPEDEF: HANDLE HKL
|
||||||
|
TYPEDEF: HANDLE HCURSOR
|
||||||
|
|
||||||
|
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
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,13 @@
|
||||||
|
IN: win32
|
||||||
|
USING: alien parser namespaces kernel syntax words math io prettyprint ;
|
||||||
|
|
||||||
|
SYMBOL: unicode
|
||||||
|
f unicode set
|
||||||
|
|
||||||
|
: unicode-exec ( unicode-func ascii-func -- func )
|
||||||
|
unicode get [
|
||||||
|
drop execute
|
||||||
|
] [
|
||||||
|
nip execute
|
||||||
|
] if ; inline
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue