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 ;
6 FROM: alien.c-types => float short ;
13 TYPEDEF: ushort wchar_t
15 TYPEDEF: wchar_t WCHAR
18 TYPEDEF: ushort USHORT
34 TYPEDEF: intptr_t LONG_PTR
37 TYPEDEF: uintptr_t ULONG_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
55 TYPEDEF: ulong ULONG32
56 TYPEDEF: ulonglong ULONG64
57 TYPEDEF: long* POINTER_32
58 TYPEDEF: longlong* POINTER_64
59 TYPEDEF: longlong INT64
60 TYPEDEF: ulonglong UINT64
61 TYPEDEF: longlong LONGLONG
62 TYPEDEF: ulonglong ULONGLONG
63 TYPEDEF: longlong LONG64
64 TYPEDEF: ulonglong DWORD64
65 TYPEDEF: longlong LARGE_INTEGER
66 TYPEDEF: ulonglong ULARGE_INTEGER
67 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
68 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
69 TYPEDEF: size_t SIZE_T
70 TYPEDEF: ptrdiff_t SSIZE_T
72 TYPEDEF: { c-string utf16n } LPCSTR
73 TYPEDEF: { c-string utf16n } LPWSTR
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: { c-string utf16n } LPCWSTR
128 ! TYPEDEF: WCHAR* LPWSTR
130 TYPEDEF: { c-string utf16n } LPSTR
131 TYPEDEF: { c-string utf16n } LPCTSTR
132 TYPEDEF: { c-string utf16n } LPWTSTR
134 TYPEDEF: { c-string utf16n } LPTSTR
135 TYPEDEF: LPCSTR PCTSTR
138 TYPEDEF: DWORD* LPDWORD
139 TYPEDEF: HANDLE* LPHANDLE
140 TYPEDEF: WORD* LPWORD
141 TYPEDEF: LONG_PTR LRESULT
143 TYPEDEF: BOOLEAN* PBOOLEAN
147 TYPEDEF: { c-string utf16n } PCWSTR
148 TYPEDEF: DWORD* PDWORD
149 TYPEDEF: DWORDLONG* PDWORDLONG
150 TYPEDEF: DWORD_PTR* PDWORD_PTR
151 TYPEDEF: DWORD32* PDWORD32
152 TYPEDEF: DWORD64* PDWORD64
153 TYPEDEF: FLOAT* PFLOAT
154 TYPEDEF: HALF_PTR* PHALF_PTR
155 TYPEDEF: HANDLE* PHANDLE
157 TYPEDEF: INT_PTR* PINT_PTR
158 TYPEDEF: INT32* PINT32
159 TYPEDEF: INT64* PINT64
160 TYPEDEF: PDWORD PLCID
162 TYPEDEF: LONGLONG* PLONGLONG
163 TYPEDEF: LONG_PTR* PLONG_PTR
164 TYPEDEF: LONG32* PLONG32
165 TYPEDEF: LONG64* PLONG64
166 TYPEDEF: SHORT* PSHORT
167 TYPEDEF: SIZE_T* PSIZE_T
168 TYPEDEF: SSIZE_T* PSSIZE_T
170 TYPEDEF: TBYTE* PTBYTE
171 TYPEDEF: TCHAR* PTCHAR
172 TYPEDEF: UCHAR* PUCHAR
173 TYPEDEF: UHALF_PTR* PUHALF_PTR
175 TYPEDEF: UINT_PTR* PUINT_PTR
176 TYPEDEF: UINT32* PUINT32
177 TYPEDEF: UINT64* PUINT64
178 TYPEDEF: ULONG* PULONG
179 TYPEDEF: ULONGLONG* PULONGLONG
180 TYPEDEF: ULONG_PTR* PULONG_PTR
181 TYPEDEF: ULONG32* PULONG32
182 TYPEDEF: ULONG64* PULONG64
183 TYPEDEF: USHORT* PUSHORT
184 TYPEDEF: { c-string utf16n } PWCHAR
186 TYPEDEF: { c-string utf16n } PWSTR
187 TYPEDEF: HANDLE SC_HANDLE
188 TYPEDEF: LPVOID SC_LOCK
189 TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
190 TYPEDEF: LONGLONG USN
191 TYPEDEF: UINT_PTR WPARAM
193 TYPEDEF: size_t socklen_t
195 TYPEDEF: void* WNDPROC
200 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
202 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
206 { lpfnWndProc WNDPROC }
209 { hInstance HINSTANCE }
212 { hbrBackground HBRUSH }
213 { lpszMenuName LPCTSTR }
214 { lpszClassName LPCTSTR } ;
219 { lpfnWndProc WNDPROC }
222 { hInstance HINSTANCE }
225 { hbrBackground HBRUSH }
226 { lpszMenuName LPCTSTR }
227 { lpszClassName LPCTSTR }
242 { rgbReserved BYTE[32] } ;
244 STRUCT: BITMAPINFOHEADER
250 { biCompression DWORD }
251 { biSizeImage DWORD }
252 { biXPelsPerMeter LONG }
253 { biYPelsPerMeter LONG }
255 { biClrImportant DWORD } ;
261 { rgbReserved BYTE } ;
264 { bmiHeader BITMAPINFOHEADER }
265 { bimColors RGBQUAD[1] } ;
267 TYPEDEF: void* LPPAINTSTRUCT
268 TYPEDEF: void* PAINTSTRUCT
288 STRUCT: PIXELFORMATDESCRIPTOR
303 { cAccumRedBits BYTE }
304 { cAccumGreenBits BYTE }
305 { cAccumBlueBits BYTE }
306 { cAccumAlphaBits BYTE }
308 { cStencilBits BYTE }
312 { dwLayerMask DWORD }
313 { dwVisibleMask DWORD }
314 { dwDamageMask DWORD } ;
316 : <RECT> ( loc dim -- RECT )
317 dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
320 TYPEDEF: RECT* LPRECT
321 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
323 TYPEDEF: HANDLE HGLRC
325 TYPEDEF: void* PWNDCLASS
326 TYPEDEF: void* PWNDCLASSEX
327 TYPEDEF: void* LPWNDCLASS
328 TYPEDEF: void* LPWNDCLASSEX
329 TYPEDEF: void* MSGBOXPARAMSA
330 TYPEDEF: void* MSGBOXPARAMSW
331 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
355 { vkDirection uint } ;
361 TYPEDEF: ACCEL* LPACCEL
363 TYPEDEF: DWORD COLORREF
364 TYPEDEF: DWORD* LPCOLORREF
366 : RGB ( r g b -- COLORREF )
367 { 16 8 0 } bitfield ; inline
368 : >RGB< ( COLORREF -- r g b )
370 [ -8 shift HEX: ff bitand ]
371 [ -16 shift HEX: ff bitand ] tri ;
373 : color>RGB ( color -- COLORREF )
374 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
375 : RGB>color ( COLORREF -- color )
376 >RGB< [ 1/255. * >float ] tri@ 1.0 <rgba> ;
382 { tmInternalLeading LONG }
383 { tmExternalLeading LONG }
384 { tmAveCharWidth LONG }
385 { tmMaxCharWidth LONG }
388 { tmDigitizedAspectX LONG }
389 { tmDigitizedAspectY LONG }
390 { tmFirstChar WCHAR }
392 { tmDefaultChar WCHAR }
393 { tmBreakChar WCHAR }
395 { tmUnderlined BYTE }
397 { tmPitchAndFamily BYTE }
400 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC