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 ;
11 TYPEDEF: ushort wchar_t
12 TYPEDEF: wchar_t WCHAR
15 TYPEDEF: ushort USHORT
31 TYPEDEF: long LONG_PTR
32 TYPEDEF: long* PLONG_PTR
35 TYPEDEF: void* ULONG_PTR
36 TYPEDEF: void* PULONG_PTR
41 TYPEDEF: void* LPCVOID
45 TYPEDEF: intptr_t HALF_PTR
46 TYPEDEF: intptr_t UHALF_PTR
47 TYPEDEF: intptr_t INT_PTR
48 TYPEDEF: intptr_t UINT_PTR
51 TYPEDEF: ulong ULONG_PTR
56 TYPEDEF: ulong ULONG32
57 TYPEDEF: ulonglong ULONG64
58 TYPEDEF: long* POINTER_32
59 TYPEDEF: longlong* POINTER_64
60 TYPEDEF: longlong INT64
61 TYPEDEF: ulonglong UINT64
62 TYPEDEF: longlong LONGLONG
63 TYPEDEF: ulonglong ULONGLONG
64 TYPEDEF: longlong LONG64
65 TYPEDEF: ulonglong DWORD64
66 TYPEDEF: longlong LARGE_INTEGER
67 TYPEDEF: ulonglong ULARGE_INTEGER
68 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
69 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
71 TYPEDEF: wchar_t* LPCSTR
72 TYPEDEF: wchar_t* LPWSTR
80 TYPEDEF: DWORD COLORREF
81 TYPEDEF: ULONGLONG DWORDLONG
82 TYPEDEF: ULONG_PTR DWORD_PTR
84 TYPEDEF: HANDLE HACCEL
85 TYPEDEF: HANDLE HBITMAP
86 TYPEDEF: HANDLE HBRUSH
87 TYPEDEF: HANDLE HCOLORSPACE
89 TYPEDEF: HANDLE HCONVLIST
91 TYPEDEF: HICON HCURSOR
93 TYPEDEF: HANDLE HDDEDATA
97 TYPEDEF: HANDLE HENMETAFILE
99 TYPEDEF: HANDLE HGDIOBJ
100 TYPEDEF: HANDLE HGLOBAL
101 TYPEDEF: HANDLE HHOOK
102 TYPEDEF: HANDLE HINSTANCE
105 TYPEDEF: HANDLE HLOCAL
106 TYPEDEF: HANDLE HMENU
107 TYPEDEF: HANDLE HMETAFILE
108 TYPEDEF: HINSTANCE HMODULE
109 TYPEDEF: HANDLE HMONITOR
110 TYPEDEF: HANDLE HPALETTE
112 TYPEDEF: LONG HRESULT
114 TYPEDEF: HANDLE HRSRC
116 TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
117 TYPEDEF: HANDLE HWINSTA ! typo??
119 TYPEDEF: HANDLE HCRYPTPROV
122 TYPEDEF: DWORD LCTYPE
123 TYPEDEF: DWORD LGRPID
124 TYPEDEF: LONG_PTR LPARAM
125 TYPEDEF: BOOL* LPBOOL
126 TYPEDEF: BYTE* LPBYTE
127 TYPEDEF: DWORD* LPCOLORREF
128 TYPEDEF: WCHAR* LPCWSTR
129 ! TYPEDEF: WCHAR* LPWSTR
131 TYPEDEF: WCHAR* LPSTR
132 TYPEDEF: wchar_t* LPCTSTR
133 TYPEDEF: wchar_t* LPWTSTR
135 TYPEDEF: wchar_t* LPTSTR
136 TYPEDEF: LPCSTR PCTSTR
139 TYPEDEF: DWORD* LPDWORD
140 TYPEDEF: HANDLE* LPHANDLE
141 TYPEDEF: WORD* LPWORD
142 TYPEDEF: LONG_PTR LRESULT
144 TYPEDEF: BOOLEAN* PBOOLEAN
148 TYPEDEF: WCHAR* PCWSTR
149 TYPEDEF: DWORD* PDWORD
150 TYPEDEF: DWORDLONG* PDWORDLONG
151 TYPEDEF: DWORD_PTR* PDWORD_PTR
152 TYPEDEF: DWORD32* PDWORD32
153 TYPEDEF: DWORD64* PDWORD64
154 TYPEDEF: FLOAT* PFLOAT
155 TYPEDEF: HALF_PTR* PHALF_PTR
156 TYPEDEF: HANDLE* PHANDLE
158 TYPEDEF: INT_PTR* PINT_PTR
159 TYPEDEF: INT32* PINT32
160 TYPEDEF: INT64* PINT64
161 TYPEDEF: PDWORD PLCID
163 TYPEDEF: LONGLONG* PLONGLONG
164 TYPEDEF: LONG_PTR* PLONG_PTR
165 TYPEDEF: LONG32* PLONG32
166 TYPEDEF: LONG64* PLONG64
167 TYPEDEF: SHORT* PSHORT
168 TYPEDEF: SIZE_T* PSIZE_T
169 TYPEDEF: SSIZE_T* PSSIZE_T
171 TYPEDEF: TBYTE* PTBYTE
172 TYPEDEF: TCHAR* PTCHAR
173 TYPEDEF: UCHAR* PUCHAR
174 TYPEDEF: UHALF_PTR* PUHALF_PTR
176 TYPEDEF: UINT_PTR* PUINT_PTR
177 TYPEDEF: UINT32* PUINT32
178 TYPEDEF: UINT64* PUINT64
179 TYPEDEF: ULONG* PULONG
180 TYPEDEF: ULONGLONG* PULONGLONG
181 TYPEDEF: ULONG_PTR* PULONG_PTR
182 TYPEDEF: ULONG32* PULONG32
183 TYPEDEF: ULONG64* PULONG64
184 TYPEDEF: USHORT* PUSHORT
185 TYPEDEF: WCHAR* PWCHAR
187 TYPEDEF: WCHAR* PWSTR
188 TYPEDEF: HANDLE SC_HANDLE
189 TYPEDEF: LPVOID SC_LOCK
190 TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
191 TYPEDEF: ULONG_PTR SIZE_T
192 TYPEDEF: LONG_PTR SSIZE_T
193 TYPEDEF: LONGLONG USN
194 TYPEDEF: UINT_PTR WPARAM
196 TYPEDEF: RECT* LPRECT
197 TYPEDEF: void* PWNDCLASS
198 TYPEDEF: void* PWNDCLASSEX
199 TYPEDEF: void* LPWNDCLASS
200 TYPEDEF: void* LPWNDCLASSEX
201 TYPEDEF: void* MSGBOXPARAMSA
202 TYPEDEF: void* MSGBOXPARAMSW
203 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
205 TYPEDEF: size_t socklen_t
207 TYPEDEF: void* WNDPROC
212 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
214 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
218 { "WNDPROC" "lpfnWndProc" }
219 { "int" "cbClsExtra" }
220 { "int" "cbWndExtra" }
221 { "HINSTANCE" "hInstance" }
223 { "HCURSOR" "hCursor" }
224 { "HBRUSH" "hbrBackground" }
225 { "LPCTSTR" "lpszMenuName" }
226 { "LPCTSTR" "lpszClassName" } ;
231 { "WNDPROC" "lpfnWndProc" }
232 { "int" "cbClsExtra" }
233 { "int" "cbWndExtra" }
234 { "HINSTANCE" "hInstance" }
236 { "HCURSOR" "hCursor" }
237 { "HBRUSH" "hbrBackground" }
238 { "LPCTSTR" "lpszMenuName" }
239 { "LPCTSTR" "lpszClassName" }
240 { "HICON" "hIconSm" } ;
246 { "LONG" "bottom" } ;
248 C-STRUCT: PAINTSTRUCT
252 { "BOOL" "fRestore" }
253 { "BOOL" "fIncUpdate" }
254 { "BYTE[32]" "rgbReserved" }
257 C-STRUCT: BITMAPINFOHEADER
260 { "LONG" "biHeight" }
261 { "WORD" "biPlanes" }
262 { "WORD" "biBitCount" }
263 { "DWORD" "biCompression" }
264 { "DWORD" "biSizeImage" }
265 { "LONG" "biXPelsPerMeter" }
266 { "LONG" "biYPelsPerMeter" }
267 { "DWORD" "biClrUsed" }
268 { "DWORD" "biClrImportant" } ;
272 { "BYTE" "rgbGreen" }
274 { "BYTE" "rgbReserved" } ;
277 { "BITMAPINFOHEADER" "bmiHeader" }
278 { "RGBQUAD[1]" "bmiColors" } ;
280 TYPEDEF: void* LPPAINTSTRUCT
281 TYPEDEF: void* PAINTSTRUCT
294 { "WPARAM" "wParam" }
295 { "LPARAM" "lParam" }
301 C-STRUCT: PIXELFORMATDESCRIPTOR
303 { "WORD" "nVersion" }
304 { "DWORD" "dwFlags" }
305 { "BYTE" "iPixelType" }
306 { "BYTE" "cColorBits" }
307 { "BYTE" "cRedBits" }
308 { "BYTE" "cRedShift" }
309 { "BYTE" "cGreenBits" }
310 { "BYTE" "cGreenShift" }
311 { "BYTE" "cBlueBits" }
312 { "BYTE" "cBlueShift" }
313 { "BYTE" "cAlphaBits" }
314 { "BYTE" "cAlphaShift" }
315 { "BYTE" "cAccumBits" }
316 { "BYTE" "cAccumRedBits" }
317 { "BYTE" "cAccumGreenBits" }
318 { "BYTE" "cAccumBlueBits" }
319 { "BYTE" "cAccumAlphaBits" }
320 { "BYTE" "cDepthBits" }
321 { "BYTE" "cStencilBits" }
322 { "BYTE" "cAuxBuffers" }
323 { "BYTE" "iLayerType" }
324 { "BYTE" "bReserved" }
325 { "DWORD" "dwLayerMask" }
326 { "DWORD" "dwVisibleMask" }
327 { "DWORD" "dwDamageMask" } ;
333 { "LONG" "bottom" } ;
335 : <RECT> ( loc dim -- RECT )
338 over first over set-RECT-right
339 swap second over set-RECT-bottom
340 over first over set-RECT-left
341 swap second over set-RECT-top ;
344 TYPEDEF: RECT* LPRECT
345 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
347 TYPEDEF: HANDLE HGLRC
355 { "uint" "stateMask" }
356 { "void*" "pszText" }
357 { "int" "cchTextMax" }
362 { "uint" "cColumns" }
363 { "uint*" "puColumns" }
364 { "int*" "piColFmt" }
372 { "uint" "vkDirection" } ;
378 TYPEDEF: ACCEL* LPACCEL
380 TYPEDEF: DWORD COLORREF
381 TYPEDEF: DWORD* LPCOLORREF
383 : RGB ( r g b -- COLORREF )
384 { 16 8 0 } bitfield ; inline
386 : color>RGB ( color -- COLORREF )
387 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
389 C-STRUCT: TEXTMETRICW
390 { "LONG" "tmHeight" }
391 { "LONG" "tmAscent" }
392 { "LONG" "tmDescent" }
393 { "LONG" "tmInternalLeading" }
394 { "LONG" "tmExternalLeading" }
395 { "LONG" "tmAveCharWidth" }
396 { "LONG" "tmMaxCharWidth" }
397 { "LONG" "tmWeight" }
398 { "LONG" "tmOverhang" }
399 { "LONG" "tmDigitizedAspectX" }
400 { "LONG" "tmDigitizedAspectY" }
401 { "WCHAR" "tmFirstChar" }
402 { "WCHAR" "tmLastChar" }
403 { "WCHAR" "tmDefaultChar" }
404 { "WCHAR" "tmBreakChar" }
405 { "BYTE" "tmItalic" }
406 { "BYTE" "tmUnderlined" }
407 { "BYTE" "tmStruckOut" }
408 { "BYTE" "tmPitchAndFamily" }
409 { "BYTE" "tmCharSet" } ;
411 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC