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
16 { char* utf16n } \ wchar_t* typedef
17 \ wchar_t \ wchar_t* "pointer-c-type" set-word-prop
20 TYPEDEF: wchar_t WCHAR
23 TYPEDEF: ushort USHORT
39 TYPEDEF: long LONG_PTR
40 TYPEDEF: long* PLONG_PTR
43 TYPEDEF: void* ULONG_PTR
44 TYPEDEF: void* PULONG_PTR
49 TYPEDEF: void* LPCVOID
53 TYPEDEF: intptr_t HALF_PTR
54 TYPEDEF: intptr_t UHALF_PTR
55 TYPEDEF: intptr_t INT_PTR
56 TYPEDEF: intptr_t UINT_PTR
59 TYPEDEF: ulong ULONG_PTR
65 TYPEDEF: ulong ULONG32
66 TYPEDEF: ulonglong ULONG64
67 TYPEDEF: long* POINTER_32
68 TYPEDEF: longlong* POINTER_64
69 TYPEDEF: longlong INT64
70 TYPEDEF: ulonglong UINT64
71 TYPEDEF: longlong LONGLONG
72 TYPEDEF: ulonglong ULONGLONG
73 TYPEDEF: longlong LONG64
74 TYPEDEF: ulonglong DWORD64
75 TYPEDEF: longlong LARGE_INTEGER
76 TYPEDEF: ulonglong ULARGE_INTEGER
77 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
78 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
79 TYPEDEF: size_t SIZE_T
80 TYPEDEF: ptrdiff_t SSIZE_T
82 TYPEDEF: wchar_t* LPCSTR
83 TYPEDEF: wchar_t* LPWSTR
91 TYPEDEF: DWORD COLORREF
92 TYPEDEF: ULONGLONG DWORDLONG
93 TYPEDEF: ULONG_PTR DWORD_PTR
95 TYPEDEF: HANDLE HACCEL
96 TYPEDEF: HANDLE HBITMAP
97 TYPEDEF: HANDLE HBRUSH
98 TYPEDEF: HANDLE HCOLORSPACE
100 TYPEDEF: HANDLE HCONVLIST
101 TYPEDEF: HANDLE HICON
102 TYPEDEF: HICON HCURSOR
104 TYPEDEF: HANDLE HDDEDATA
105 TYPEDEF: HANDLE HDESK
106 TYPEDEF: HANDLE HDROP
108 TYPEDEF: HANDLE HENMETAFILE
109 TYPEDEF: HANDLE HFONT
110 TYPEDEF: HANDLE HGDIOBJ
111 TYPEDEF: HANDLE HGLOBAL
112 TYPEDEF: HANDLE HHOOK
113 TYPEDEF: HANDLE HINSTANCE
116 TYPEDEF: HANDLE HLOCAL
117 TYPEDEF: HANDLE HMENU
118 TYPEDEF: HANDLE HMETAFILE
119 TYPEDEF: HINSTANCE HMODULE
120 TYPEDEF: HANDLE HMONITOR
121 TYPEDEF: HANDLE HPALETTE
123 TYPEDEF: LONG HRESULT
125 TYPEDEF: HANDLE HRSRC
127 TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
128 TYPEDEF: HANDLE HWINSTA ! typo??
130 TYPEDEF: HANDLE HCRYPTPROV
133 TYPEDEF: DWORD LCTYPE
134 TYPEDEF: DWORD LGRPID
135 TYPEDEF: LONG_PTR LPARAM
136 TYPEDEF: BOOL* LPBOOL
137 TYPEDEF: BYTE* LPBYTE
138 TYPEDEF: DWORD* LPCOLORREF
139 TYPEDEF: WCHAR* LPCWSTR
140 ! TYPEDEF: WCHAR* LPWSTR
142 TYPEDEF: WCHAR* LPSTR
143 TYPEDEF: wchar_t* LPCTSTR
144 TYPEDEF: wchar_t* LPWTSTR
146 TYPEDEF: wchar_t* LPTSTR
147 TYPEDEF: LPCSTR PCTSTR
150 TYPEDEF: DWORD* LPDWORD
151 TYPEDEF: HANDLE* LPHANDLE
152 TYPEDEF: WORD* LPWORD
153 TYPEDEF: LONG_PTR LRESULT
155 TYPEDEF: BOOLEAN* PBOOLEAN
159 TYPEDEF: WCHAR* PCWSTR
160 TYPEDEF: DWORD* PDWORD
161 TYPEDEF: DWORDLONG* PDWORDLONG
162 TYPEDEF: DWORD_PTR* PDWORD_PTR
163 TYPEDEF: DWORD32* PDWORD32
164 TYPEDEF: DWORD64* PDWORD64
165 TYPEDEF: FLOAT* PFLOAT
166 TYPEDEF: HALF_PTR* PHALF_PTR
167 TYPEDEF: HANDLE* PHANDLE
169 TYPEDEF: INT_PTR* PINT_PTR
170 TYPEDEF: INT32* PINT32
171 TYPEDEF: INT64* PINT64
172 TYPEDEF: PDWORD PLCID
174 TYPEDEF: LONGLONG* PLONGLONG
175 TYPEDEF: LONG_PTR* PLONG_PTR
176 TYPEDEF: LONG32* PLONG32
177 TYPEDEF: LONG64* PLONG64
178 TYPEDEF: SHORT* PSHORT
179 TYPEDEF: SIZE_T* PSIZE_T
180 TYPEDEF: SSIZE_T* PSSIZE_T
182 TYPEDEF: TBYTE* PTBYTE
183 TYPEDEF: TCHAR* PTCHAR
184 TYPEDEF: UCHAR* PUCHAR
185 TYPEDEF: UHALF_PTR* PUHALF_PTR
187 TYPEDEF: UINT_PTR* PUINT_PTR
188 TYPEDEF: UINT32* PUINT32
189 TYPEDEF: UINT64* PUINT64
190 TYPEDEF: ULONG* PULONG
191 TYPEDEF: ULONGLONG* PULONGLONG
192 TYPEDEF: ULONG_PTR* PULONG_PTR
193 TYPEDEF: ULONG32* PULONG32
194 TYPEDEF: ULONG64* PULONG64
195 TYPEDEF: USHORT* PUSHORT
196 TYPEDEF: WCHAR* PWCHAR
198 TYPEDEF: WCHAR* PWSTR
199 TYPEDEF: HANDLE SC_HANDLE
200 TYPEDEF: LPVOID SC_LOCK
201 TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
202 TYPEDEF: ULONG_PTR SIZE_T
203 TYPEDEF: LONG_PTR SSIZE_T
204 TYPEDEF: LONGLONG USN
205 TYPEDEF: UINT_PTR WPARAM
207 TYPEDEF: size_t socklen_t
209 TYPEDEF: void* WNDPROC
214 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
216 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
220 { lpfnWndProc WNDPROC }
223 { hInstance HINSTANCE }
226 { hbrBackground HBRUSH }
227 { lpszMenuName LPCTSTR }
228 { lpszClassName LPCTSTR } ;
233 { lpfnWndProc WNDPROC }
236 { hInstance HINSTANCE }
239 { hbrBackground HBRUSH }
240 { lpszMenuName LPCTSTR }
241 { lpszClassName LPCTSTR }
256 { rgbReserved BYTE[32] } ;
258 STRUCT: BITMAPINFOHEADER
264 { biCompression DWORD }
265 { biSizeImage DWORD }
266 { biXPelsPerMeter LONG }
267 { biYPelsPerMeter LONG }
269 { biClrImportant DWORD } ;
275 { rgbReserved BYTE } ;
278 { bmiHeader BITMAPINFOHEADER }
279 { bimColors RGBQUAD[1] } ;
281 TYPEDEF: void* LPPAINTSTRUCT
282 TYPEDEF: void* PAINTSTRUCT
302 STRUCT: PIXELFORMATDESCRIPTOR
317 { cAccumRedBits BYTE }
318 { cAccumGreenBits BYTE }
319 { cAccumBlueBits BYTE }
320 { cAccumAlphaBits BYTE }
322 { cStencilBits BYTE }
326 { dwLayerMask DWORD }
327 { dwVisibleMask DWORD }
328 { dwDamageMask DWORD } ;
330 : <RECT> ( loc dim -- RECT )
331 dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
334 TYPEDEF: RECT* LPRECT
335 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
337 TYPEDEF: HANDLE HGLRC
340 TYPEDEF: void* PWNDCLASS
341 TYPEDEF: void* PWNDCLASSEX
342 TYPEDEF: void* LPWNDCLASS
343 TYPEDEF: void* LPWNDCLASSEX
344 TYPEDEF: void* MSGBOXPARAMSA
345 TYPEDEF: void* MSGBOXPARAMSW
346 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
370 { vkDirection uint } ;
376 TYPEDEF: ACCEL* LPACCEL
378 TYPEDEF: DWORD COLORREF
379 TYPEDEF: DWORD* LPCOLORREF
381 : RGB ( r g b -- COLORREF )
382 { 16 8 0 } bitfield ; inline
383 : >RGB< ( COLORREF -- r g b )
385 [ -8 shift HEX: ff bitand ]
386 [ -16 shift HEX: ff bitand ] tri ;
388 : color>RGB ( color -- COLORREF )
389 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
390 : RGB>color ( COLORREF -- color )
391 >RGB< [ 1/255. * >float ] tri@ 1.0 <rgba> ;
397 { tmInternalLeading LONG }
398 { tmExternalLeading LONG }
399 { tmAveCharWidth LONG }
400 { tmMaxCharWidth LONG }
403 { tmDigitizedAspectX LONG }
404 { tmDigitizedAspectY LONG }
405 { tmFirstChar WCHAR }
407 { tmDefaultChar WCHAR }
408 { tmBreakChar WCHAR }
410 { tmUnderlined BYTE }
412 { tmPitchAndFamily BYTE }
415 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC