1 ! Copyright (C) 2005, 2006 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.syntax namespaces kernel words
4 sequences math math.bitwise math.vectors colors
5 io.encodings.utf16n classes.struct accessors ;
12 TYPEDEF: ushort wchar_t
13 TYPEDEF: wchar_t WCHAR
16 TYPEDEF: ushort USHORT
32 TYPEDEF: long LONG_PTR
33 TYPEDEF: long* PLONG_PTR
36 TYPEDEF: void* ULONG_PTR
37 TYPEDEF: void* PULONG_PTR
42 TYPEDEF: void* LPCVOID
46 TYPEDEF: intptr_t HALF_PTR
47 TYPEDEF: intptr_t UHALF_PTR
48 TYPEDEF: intptr_t INT_PTR
49 TYPEDEF: intptr_t UINT_PTR
52 TYPEDEF: ulong ULONG_PTR
57 TYPEDEF: ulong ULONG32
58 TYPEDEF: ulonglong ULONG64
59 TYPEDEF: long* POINTER_32
60 TYPEDEF: longlong* POINTER_64
61 TYPEDEF: longlong INT64
62 TYPEDEF: ulonglong UINT64
63 TYPEDEF: longlong LONGLONG
64 TYPEDEF: ulonglong ULONGLONG
65 TYPEDEF: longlong LONG64
66 TYPEDEF: ulonglong DWORD64
67 TYPEDEF: longlong LARGE_INTEGER
68 TYPEDEF: ulonglong ULARGE_INTEGER
69 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
70 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
72 << { "char*" utf16n } "wchar_t*" typedef >>
74 TYPEDEF: wchar_t* LPCSTR
75 TYPEDEF: wchar_t* LPWSTR
83 TYPEDEF: DWORD COLORREF
84 TYPEDEF: ULONGLONG DWORDLONG
85 TYPEDEF: ULONG_PTR DWORD_PTR
87 TYPEDEF: HANDLE HACCEL
88 TYPEDEF: HANDLE HBITMAP
89 TYPEDEF: HANDLE HBRUSH
90 TYPEDEF: HANDLE HCOLORSPACE
92 TYPEDEF: HANDLE HCONVLIST
94 TYPEDEF: HICON HCURSOR
96 TYPEDEF: HANDLE HDDEDATA
100 TYPEDEF: HANDLE HENMETAFILE
101 TYPEDEF: HANDLE HFONT
102 TYPEDEF: HANDLE HGDIOBJ
103 TYPEDEF: HANDLE HGLOBAL
104 TYPEDEF: HANDLE HHOOK
105 TYPEDEF: HANDLE HINSTANCE
108 TYPEDEF: HANDLE HLOCAL
109 TYPEDEF: HANDLE HMENU
110 TYPEDEF: HANDLE HMETAFILE
111 TYPEDEF: HINSTANCE HMODULE
112 TYPEDEF: HANDLE HMONITOR
113 TYPEDEF: HANDLE HPALETTE
115 TYPEDEF: LONG HRESULT
117 TYPEDEF: HANDLE HRSRC
119 TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
120 TYPEDEF: HANDLE HWINSTA ! typo??
122 TYPEDEF: HANDLE HCRYPTPROV
125 TYPEDEF: DWORD LCTYPE
126 TYPEDEF: DWORD LGRPID
127 TYPEDEF: LONG_PTR LPARAM
128 TYPEDEF: BOOL* LPBOOL
129 TYPEDEF: BYTE* LPBYTE
130 TYPEDEF: DWORD* LPCOLORREF
131 TYPEDEF: WCHAR* LPCWSTR
132 ! TYPEDEF: WCHAR* LPWSTR
134 TYPEDEF: WCHAR* LPSTR
135 TYPEDEF: wchar_t* LPCTSTR
136 TYPEDEF: wchar_t* LPWTSTR
138 TYPEDEF: wchar_t* LPTSTR
139 TYPEDEF: LPCSTR PCTSTR
142 TYPEDEF: DWORD* LPDWORD
143 TYPEDEF: HANDLE* LPHANDLE
144 TYPEDEF: WORD* LPWORD
145 TYPEDEF: LONG_PTR LRESULT
147 TYPEDEF: BOOLEAN* PBOOLEAN
151 TYPEDEF: WCHAR* PCWSTR
152 TYPEDEF: DWORD* PDWORD
153 TYPEDEF: DWORDLONG* PDWORDLONG
154 TYPEDEF: DWORD_PTR* PDWORD_PTR
155 TYPEDEF: DWORD32* PDWORD32
156 TYPEDEF: DWORD64* PDWORD64
157 TYPEDEF: FLOAT* PFLOAT
158 TYPEDEF: HALF_PTR* PHALF_PTR
159 TYPEDEF: HANDLE* PHANDLE
161 TYPEDEF: INT_PTR* PINT_PTR
162 TYPEDEF: INT32* PINT32
163 TYPEDEF: INT64* PINT64
164 TYPEDEF: PDWORD PLCID
166 TYPEDEF: LONGLONG* PLONGLONG
167 TYPEDEF: LONG_PTR* PLONG_PTR
168 TYPEDEF: LONG32* PLONG32
169 TYPEDEF: LONG64* PLONG64
170 TYPEDEF: SHORT* PSHORT
171 TYPEDEF: SIZE_T* PSIZE_T
172 TYPEDEF: SSIZE_T* PSSIZE_T
174 TYPEDEF: TBYTE* PTBYTE
175 TYPEDEF: TCHAR* PTCHAR
176 TYPEDEF: UCHAR* PUCHAR
177 TYPEDEF: UHALF_PTR* PUHALF_PTR
179 TYPEDEF: UINT_PTR* PUINT_PTR
180 TYPEDEF: UINT32* PUINT32
181 TYPEDEF: UINT64* PUINT64
182 TYPEDEF: ULONG* PULONG
183 TYPEDEF: ULONGLONG* PULONGLONG
184 TYPEDEF: ULONG_PTR* PULONG_PTR
185 TYPEDEF: ULONG32* PULONG32
186 TYPEDEF: ULONG64* PULONG64
187 TYPEDEF: USHORT* PUSHORT
188 TYPEDEF: WCHAR* PWCHAR
190 TYPEDEF: WCHAR* PWSTR
191 TYPEDEF: HANDLE SC_HANDLE
192 TYPEDEF: LPVOID SC_LOCK
193 TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
194 TYPEDEF: ULONG_PTR SIZE_T
195 TYPEDEF: LONG_PTR SSIZE_T
196 TYPEDEF: LONGLONG USN
197 TYPEDEF: UINT_PTR WPARAM
199 TYPEDEF: RECT* LPRECT
200 TYPEDEF: void* PWNDCLASS
201 TYPEDEF: void* PWNDCLASSEX
202 TYPEDEF: void* LPWNDCLASS
203 TYPEDEF: void* LPWNDCLASSEX
204 TYPEDEF: void* MSGBOXPARAMSA
205 TYPEDEF: void* MSGBOXPARAMSW
206 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
208 TYPEDEF: size_t socklen_t
210 TYPEDEF: void* WNDPROC
215 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
217 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
221 { lpfnWndProc WNDPROC }
224 { hInstance HINSTANCE }
227 { hbrBackground HBRUSH }
228 { lpszMenuName LPCTSTR }
229 { lpszClassName LPCTSTR } ;
234 { lpfnWndProc WNDPROC }
237 { hInstance HINSTANCE }
240 { hbrBackground HBRUSH }
241 { lpszMenuName LPCTSTR }
242 { lpszClassName LPCTSTR }
251 C-STRUCT: PAINTSTRUCT
255 { "BOOL" "fRestore" }
256 { "BOOL" "fIncUpdate" }
257 { "BYTE[32]" "rgbReserved" }
260 C-STRUCT: BITMAPINFOHEADER
263 { "LONG" "biHeight" }
264 { "WORD" "biPlanes" }
265 { "WORD" "biBitCount" }
266 { "DWORD" "biCompression" }
267 { "DWORD" "biSizeImage" }
268 { "LONG" "biXPelsPerMeter" }
269 { "LONG" "biYPelsPerMeter" }
270 { "DWORD" "biClrUsed" }
271 { "DWORD" "biClrImportant" } ;
275 { "BYTE" "rgbGreen" }
277 { "BYTE" "rgbReserved" } ;
280 { "BITMAPINFOHEADER" "bmiHeader" }
281 { "RGBQUAD[1]" "bmiColors" } ;
283 TYPEDEF: void* LPPAINTSTRUCT
284 TYPEDEF: void* PAINTSTRUCT
297 { "WPARAM" "wParam" }
298 { "LPARAM" "lParam" }
304 STRUCT: PIXELFORMATDESCRIPTOR
319 { cAccumRedBits BYTE }
320 { cAccumGreenBits BYTE }
321 { cAccumBlueBits BYTE }
322 { cAccumAlphaBits BYTE }
324 { cStencilBits BYTE }
328 { dwLayerMask DWORD }
329 { dwVisibleMask DWORD }
330 { dwDamageMask DWORD } ;
332 : <RECT> ( loc dim -- RECT )
333 [ RECT <struct> ] 2dip
334 [ drop [ first >>left ] [ second >>top ] bi ]
335 [ v+ [ first >>right ] [ second >>bottom ] bi ] 2bi ;
338 TYPEDEF: RECT* LPRECT
339 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
341 TYPEDEF: HANDLE HGLRC
349 { "uint" "stateMask" }
350 { "void*" "pszText" }
351 { "int" "cchTextMax" }
356 { "uint" "cColumns" }
357 { "uint*" "puColumns" }
358 { "int*" "piColFmt" }
366 { "uint" "vkDirection" } ;
372 TYPEDEF: ACCEL* LPACCEL
374 TYPEDEF: DWORD COLORREF
375 TYPEDEF: DWORD* LPCOLORREF
377 : RGB ( r g b -- COLORREF )
378 { 16 8 0 } bitfield ; inline
380 : color>RGB ( color -- COLORREF )
381 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
387 { tmInternalLeading LONG }
388 { tmExternalLeading LONG }
389 { tmAveCharWidth LONG }
390 { tmMaxCharWidth LONG }
393 { tmDigitizedAspectX LONG }
394 { tmDigitizedAspectY LONG }
395 { tmFirstChar WCHAR }
397 { tmDefaultChar WCHAR }
398 { tmBreakChar WCHAR }
400 { tmUnderlined BYTE }
402 { tmPitchAndFamily BYTE }
405 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC