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
14 TYPEDEF: { char* utf16n } wchar_t*
16 TYPEDEF: wchar_t WCHAR
19 TYPEDEF: ushort USHORT
35 TYPEDEF: intptr_t LONG_PTR
38 TYPEDEF: uintptr_t ULONG_PTR
43 TYPEDEF: void* LPCVOID
47 TYPEDEF: intptr_t HALF_PTR
48 TYPEDEF: intptr_t UHALF_PTR
49 TYPEDEF: intptr_t INT_PTR
50 TYPEDEF: intptr_t UINT_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
70 TYPEDEF: size_t SIZE_T
71 TYPEDEF: ptrdiff_t SSIZE_T
73 TYPEDEF: wchar_t* LPCSTR
74 TYPEDEF: wchar_t* LPWSTR
82 TYPEDEF: ULONGLONG DWORDLONG
83 TYPEDEF: ULONG_PTR DWORD_PTR
85 TYPEDEF: HANDLE HACCEL
86 TYPEDEF: HANDLE HBITMAP
87 TYPEDEF: HANDLE HBRUSH
88 TYPEDEF: HANDLE HCOLORSPACE
90 TYPEDEF: HANDLE HCONVLIST
92 TYPEDEF: HICON HCURSOR
94 TYPEDEF: HANDLE HDDEDATA
98 TYPEDEF: HANDLE HENMETAFILE
100 TYPEDEF: HANDLE HGDIOBJ
101 TYPEDEF: HANDLE HGLOBAL
102 TYPEDEF: HANDLE HHOOK
103 TYPEDEF: HANDLE HINSTANCE
106 TYPEDEF: HANDLE HLOCAL
107 TYPEDEF: HANDLE HMENU
108 TYPEDEF: HANDLE HMETAFILE
109 TYPEDEF: HINSTANCE HMODULE
110 TYPEDEF: HANDLE HMONITOR
111 TYPEDEF: HANDLE HPALETTE
113 TYPEDEF: LONG HRESULT
115 TYPEDEF: HANDLE HRSRC
117 TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
118 TYPEDEF: HANDLE HWINSTA ! typo??
120 TYPEDEF: HANDLE HCRYPTPROV
123 TYPEDEF: DWORD LCTYPE
124 TYPEDEF: DWORD LGRPID
125 TYPEDEF: LONG_PTR LPARAM
126 TYPEDEF: BOOL* LPBOOL
127 TYPEDEF: BYTE* LPBYTE
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: LONGLONG USN
192 TYPEDEF: UINT_PTR WPARAM
194 TYPEDEF: size_t socklen_t
196 TYPEDEF: void* WNDPROC
201 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
203 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
207 { lpfnWndProc WNDPROC }
210 { hInstance HINSTANCE }
213 { hbrBackground HBRUSH }
214 { lpszMenuName LPCTSTR }
215 { lpszClassName LPCTSTR } ;
220 { lpfnWndProc WNDPROC }
223 { hInstance HINSTANCE }
226 { hbrBackground HBRUSH }
227 { lpszMenuName LPCTSTR }
228 { lpszClassName LPCTSTR }
243 { rgbReserved BYTE[32] } ;
245 STRUCT: BITMAPINFOHEADER
251 { biCompression DWORD }
252 { biSizeImage DWORD }
253 { biXPelsPerMeter LONG }
254 { biYPelsPerMeter LONG }
256 { biClrImportant DWORD } ;
262 { rgbReserved BYTE } ;
265 { bmiHeader BITMAPINFOHEADER }
266 { bimColors RGBQUAD[1] } ;
268 TYPEDEF: void* LPPAINTSTRUCT
269 TYPEDEF: void* PAINTSTRUCT
289 STRUCT: PIXELFORMATDESCRIPTOR
304 { cAccumRedBits BYTE }
305 { cAccumGreenBits BYTE }
306 { cAccumBlueBits BYTE }
307 { cAccumAlphaBits BYTE }
309 { cStencilBits BYTE }
313 { dwLayerMask DWORD }
314 { dwVisibleMask DWORD }
315 { dwDamageMask DWORD } ;
317 : <RECT> ( loc dim -- RECT )
318 dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
321 TYPEDEF: RECT* LPRECT
322 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
324 TYPEDEF: HANDLE HGLRC
326 TYPEDEF: void* PWNDCLASS
327 TYPEDEF: void* PWNDCLASSEX
328 TYPEDEF: void* LPWNDCLASS
329 TYPEDEF: void* LPWNDCLASSEX
330 TYPEDEF: void* MSGBOXPARAMSA
331 TYPEDEF: void* MSGBOXPARAMSW
332 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
356 { vkDirection uint } ;
362 TYPEDEF: ACCEL* LPACCEL
364 TYPEDEF: DWORD COLORREF
365 TYPEDEF: DWORD* LPCOLORREF
367 : RGB ( r g b -- COLORREF )
368 { 16 8 0 } bitfield ; inline
369 : >RGB< ( COLORREF -- r g b )
371 [ -8 shift HEX: ff bitand ]
372 [ -16 shift HEX: ff bitand ] tri ;
374 : color>RGB ( color -- COLORREF )
375 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
376 : RGB>color ( COLORREF -- color )
377 >RGB< [ 1/255. * >float ] tri@ 1.0 <rgba> ;
383 { tmInternalLeading LONG }
384 { tmExternalLeading LONG }
385 { tmAveCharWidth LONG }
386 { tmMaxCharWidth LONG }
389 { tmDigitizedAspectX LONG }
390 { tmDigitizedAspectY LONG }
391 { tmFirstChar WCHAR }
393 { tmDefaultChar WCHAR }
394 { tmBreakChar WCHAR }
396 { tmUnderlined BYTE }
398 { tmPitchAndFamily BYTE }
401 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC