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: intptr_t LONG_PTR
40 TYPEDEF: intptr_t* 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
62 TYPEDEF: ulong ULONG32
63 TYPEDEF: ulonglong ULONG64
64 TYPEDEF: long* POINTER_32
65 TYPEDEF: longlong* POINTER_64
66 TYPEDEF: longlong INT64
67 TYPEDEF: ulonglong UINT64
68 TYPEDEF: longlong LONGLONG
69 TYPEDEF: ulonglong ULONGLONG
70 TYPEDEF: longlong LONG64
71 TYPEDEF: ulonglong DWORD64
72 TYPEDEF: longlong LARGE_INTEGER
73 TYPEDEF: ulonglong ULARGE_INTEGER
74 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
75 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
76 TYPEDEF: size_t SIZE_T
77 TYPEDEF: ptrdiff_t SSIZE_T
79 TYPEDEF: wchar_t* LPCSTR
80 TYPEDEF: wchar_t* LPWSTR
88 TYPEDEF: DWORD COLORREF
89 TYPEDEF: ULONGLONG DWORDLONG
90 TYPEDEF: ULONG_PTR DWORD_PTR
92 TYPEDEF: HANDLE HACCEL
93 TYPEDEF: HANDLE HBITMAP
94 TYPEDEF: HANDLE HBRUSH
95 TYPEDEF: HANDLE HCOLORSPACE
97 TYPEDEF: HANDLE HCONVLIST
99 TYPEDEF: HICON HCURSOR
101 TYPEDEF: HANDLE HDDEDATA
102 TYPEDEF: HANDLE HDESK
103 TYPEDEF: HANDLE HDROP
105 TYPEDEF: HANDLE HENMETAFILE
106 TYPEDEF: HANDLE HFONT
107 TYPEDEF: HANDLE HGDIOBJ
108 TYPEDEF: HANDLE HGLOBAL
109 TYPEDEF: HANDLE HHOOK
110 TYPEDEF: HANDLE HINSTANCE
113 TYPEDEF: HANDLE HLOCAL
114 TYPEDEF: HANDLE HMENU
115 TYPEDEF: HANDLE HMETAFILE
116 TYPEDEF: HINSTANCE HMODULE
117 TYPEDEF: HANDLE HMONITOR
118 TYPEDEF: HANDLE HPALETTE
120 TYPEDEF: LONG HRESULT
122 TYPEDEF: HANDLE HRSRC
124 TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
125 TYPEDEF: HANDLE HWINSTA ! typo??
127 TYPEDEF: HANDLE HCRYPTPROV
130 TYPEDEF: DWORD LCTYPE
131 TYPEDEF: DWORD LGRPID
132 TYPEDEF: LONG_PTR LPARAM
133 TYPEDEF: BOOL* LPBOOL
134 TYPEDEF: BYTE* LPBYTE
135 TYPEDEF: DWORD* LPCOLORREF
136 TYPEDEF: WCHAR* LPCWSTR
137 ! TYPEDEF: WCHAR* LPWSTR
139 TYPEDEF: WCHAR* LPSTR
140 TYPEDEF: wchar_t* LPCTSTR
141 TYPEDEF: wchar_t* LPWTSTR
143 TYPEDEF: wchar_t* LPTSTR
144 TYPEDEF: LPCSTR PCTSTR
147 TYPEDEF: DWORD* LPDWORD
148 TYPEDEF: HANDLE* LPHANDLE
149 TYPEDEF: WORD* LPWORD
150 TYPEDEF: LONG_PTR LRESULT
152 TYPEDEF: BOOLEAN* PBOOLEAN
156 TYPEDEF: WCHAR* PCWSTR
157 TYPEDEF: DWORD* PDWORD
158 TYPEDEF: DWORDLONG* PDWORDLONG
159 TYPEDEF: DWORD_PTR* PDWORD_PTR
160 TYPEDEF: DWORD32* PDWORD32
161 TYPEDEF: DWORD64* PDWORD64
162 TYPEDEF: FLOAT* PFLOAT
163 TYPEDEF: HALF_PTR* PHALF_PTR
164 TYPEDEF: HANDLE* PHANDLE
166 TYPEDEF: INT_PTR* PINT_PTR
167 TYPEDEF: INT32* PINT32
168 TYPEDEF: INT64* PINT64
169 TYPEDEF: PDWORD PLCID
171 TYPEDEF: LONGLONG* PLONGLONG
172 TYPEDEF: LONG_PTR* PLONG_PTR
173 TYPEDEF: LONG32* PLONG32
174 TYPEDEF: LONG64* PLONG64
175 TYPEDEF: SHORT* PSHORT
176 TYPEDEF: SIZE_T* PSIZE_T
177 TYPEDEF: SSIZE_T* PSSIZE_T
179 TYPEDEF: TBYTE* PTBYTE
180 TYPEDEF: TCHAR* PTCHAR
181 TYPEDEF: UCHAR* PUCHAR
182 TYPEDEF: UHALF_PTR* PUHALF_PTR
184 TYPEDEF: UINT_PTR* PUINT_PTR
185 TYPEDEF: UINT32* PUINT32
186 TYPEDEF: UINT64* PUINT64
187 TYPEDEF: ULONG* PULONG
188 TYPEDEF: ULONGLONG* PULONGLONG
189 TYPEDEF: ULONG_PTR* PULONG_PTR
190 TYPEDEF: ULONG32* PULONG32
191 TYPEDEF: ULONG64* PULONG64
192 TYPEDEF: USHORT* PUSHORT
193 TYPEDEF: WCHAR* PWCHAR
195 TYPEDEF: WCHAR* PWSTR
196 TYPEDEF: HANDLE SC_HANDLE
197 TYPEDEF: LPVOID SC_LOCK
198 TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
199 TYPEDEF: ULONG_PTR SIZE_T
200 TYPEDEF: LONG_PTR SSIZE_T
201 TYPEDEF: LONGLONG USN
202 TYPEDEF: UINT_PTR WPARAM
204 TYPEDEF: size_t socklen_t
206 TYPEDEF: void* WNDPROC
211 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
213 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
217 { lpfnWndProc WNDPROC }
220 { hInstance HINSTANCE }
223 { hbrBackground HBRUSH }
224 { lpszMenuName LPCTSTR }
225 { lpszClassName LPCTSTR } ;
230 { lpfnWndProc WNDPROC }
233 { hInstance HINSTANCE }
236 { hbrBackground HBRUSH }
237 { lpszMenuName LPCTSTR }
238 { lpszClassName LPCTSTR }
253 { rgbReserved BYTE[32] } ;
255 STRUCT: BITMAPINFOHEADER
261 { biCompression DWORD }
262 { biSizeImage DWORD }
263 { biXPelsPerMeter LONG }
264 { biYPelsPerMeter LONG }
266 { biClrImportant DWORD } ;
272 { rgbReserved BYTE } ;
275 { bmiHeader BITMAPINFOHEADER }
276 { bimColors RGBQUAD[1] } ;
278 TYPEDEF: void* LPPAINTSTRUCT
279 TYPEDEF: void* PAINTSTRUCT
299 STRUCT: PIXELFORMATDESCRIPTOR
314 { cAccumRedBits BYTE }
315 { cAccumGreenBits BYTE }
316 { cAccumBlueBits BYTE }
317 { cAccumAlphaBits BYTE }
319 { cStencilBits BYTE }
323 { dwLayerMask DWORD }
324 { dwVisibleMask DWORD }
325 { dwDamageMask DWORD } ;
327 : <RECT> ( loc dim -- RECT )
328 dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
331 TYPEDEF: RECT* LPRECT
332 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
334 TYPEDEF: HANDLE HGLRC
337 TYPEDEF: void* PWNDCLASS
338 TYPEDEF: void* PWNDCLASSEX
339 TYPEDEF: void* LPWNDCLASS
340 TYPEDEF: void* LPWNDCLASSEX
341 TYPEDEF: void* MSGBOXPARAMSA
342 TYPEDEF: void* MSGBOXPARAMSW
343 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
367 { vkDirection uint } ;
373 TYPEDEF: ACCEL* LPACCEL
375 TYPEDEF: DWORD COLORREF
376 TYPEDEF: DWORD* LPCOLORREF
378 : RGB ( r g b -- COLORREF )
379 { 16 8 0 } bitfield ; inline
380 : >RGB< ( COLORREF -- r g b )
382 [ -8 shift HEX: ff bitand ]
383 [ -16 shift HEX: ff bitand ] tri ;
385 : color>RGB ( color -- COLORREF )
386 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
387 : RGB>color ( COLORREF -- color )
388 >RGB< [ 1/255. * >float ] tri@ 1.0 <rgba> ;
394 { tmInternalLeading LONG }
395 { tmExternalLeading LONG }
396 { tmAveCharWidth LONG }
397 { tmMaxCharWidth LONG }
400 { tmDigitizedAspectX LONG }
401 { tmDigitizedAspectY LONG }
402 { tmFirstChar WCHAR }
404 { tmDefaultChar WCHAR }
405 { tmBreakChar WCHAR }
407 { tmUnderlined BYTE }
409 { tmPitchAndFamily BYTE }
412 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC