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
20 TYPEDEF: ushort UINT16
36 TYPEDEF: intptr_t LONG_PTR
39 TYPEDEF: uintptr_t ULONG_PTR
44 TYPEDEF: void* LPCVOID
48 TYPEDEF: intptr_t HALF_PTR
49 TYPEDEF: intptr_t UHALF_PTR
50 TYPEDEF: intptr_t INT_PTR
51 TYPEDEF: intptr_t UINT_PTR
57 TYPEDEF: ulong ULONG32
58 TYPEDEF: ulonglong ULONG64
59 TYPEDEF: long* POINTER_32
60 TYPEDEF: longlong* POINTER_64
61 TYPEDEF: longlong INT64
62 TYPEDEF: ulonglong UINT64
63 TYPEDEF: longlong LONGLONG
64 TYPEDEF: ulonglong ULONGLONG
65 TYPEDEF: longlong LONG64
66 TYPEDEF: ulonglong DWORD64
67 TYPEDEF: longlong LARGE_INTEGER
68 TYPEDEF: ulonglong ULARGE_INTEGER
69 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
70 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
71 TYPEDEF: size_t SIZE_T
72 TYPEDEF: ptrdiff_t SSIZE_T
74 TYPEDEF: { c-string utf16n } LPCSTR
75 TYPEDEF: { c-string utf16n } LPWSTR
83 TYPEDEF: ULONGLONG DWORDLONG
84 TYPEDEF: ULONG_PTR DWORD_PTR
86 TYPEDEF: HANDLE HACCEL
87 TYPEDEF: HANDLE HBITMAP
88 TYPEDEF: HANDLE HBRUSH
89 TYPEDEF: HANDLE HCOLORSPACE
91 TYPEDEF: HANDLE HCONVLIST
93 TYPEDEF: HICON HCURSOR
95 TYPEDEF: HANDLE HDDEDATA
99 TYPEDEF: HANDLE HENHMETAFILE
100 TYPEDEF: HANDLE HFONT
101 TYPEDEF: HANDLE HGDIOBJ
102 TYPEDEF: HANDLE HGLOBAL
103 TYPEDEF: HANDLE HHOOK
104 TYPEDEF: HANDLE HINSTANCE
107 TYPEDEF: HANDLE HLOCAL
108 TYPEDEF: HANDLE HMENU
109 TYPEDEF: HANDLE HMETAFILE
110 TYPEDEF: HINSTANCE HMODULE
111 TYPEDEF: HANDLE HMONITOR
112 TYPEDEF: HANDLE HPALETTE
114 TYPEDEF: LONG HRESULT
116 TYPEDEF: HANDLE HRSRC
118 TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
119 TYPEDEF: HANDLE HWINSTA ! typo??
121 TYPEDEF: HANDLE HCRYPTPROV
124 TYPEDEF: DWORD LCTYPE
125 TYPEDEF: DWORD LGRPID
126 TYPEDEF: LONG_PTR LPARAM
127 TYPEDEF: BOOL* LPBOOL
128 TYPEDEF: BYTE* LPBYTE
129 TYPEDEF: { c-string utf16n } LPCWSTR
130 ! TYPEDEF: WCHAR* LPWSTR
132 TYPEDEF: { c-string utf16n } LPSTR
133 TYPEDEF: { c-string utf16n } LPCTSTR
134 TYPEDEF: { c-string utf16n } LPWTSTR
136 TYPEDEF: { c-string utf16n } LPTSTR
137 TYPEDEF: LPCSTR PCTSTR
140 TYPEDEF: DWORD* LPDWORD
141 TYPEDEF: HANDLE* LPHANDLE
142 TYPEDEF: WORD* LPWORD
143 TYPEDEF: LONG_PTR LRESULT
145 TYPEDEF: BOOLEAN* PBOOLEAN
149 TYPEDEF: { c-string utf16n } PCWSTR
150 TYPEDEF: DWORD* PDWORD
151 TYPEDEF: DWORDLONG* PDWORDLONG
152 TYPEDEF: DWORD_PTR* PDWORD_PTR
153 TYPEDEF: DWORD32* PDWORD32
154 TYPEDEF: DWORD64* PDWORD64
155 TYPEDEF: FLOAT* PFLOAT
156 TYPEDEF: HALF_PTR* PHALF_PTR
157 TYPEDEF: HANDLE* PHANDLE
159 TYPEDEF: INT_PTR* PINT_PTR
160 TYPEDEF: INT32* PINT32
161 TYPEDEF: INT64* PINT64
162 TYPEDEF: PDWORD PLCID
164 TYPEDEF: LONGLONG* PLONGLONG
165 TYPEDEF: LONG_PTR* PLONG_PTR
166 TYPEDEF: LONG32* PLONG32
167 TYPEDEF: LONG64* PLONG64
168 TYPEDEF: SHORT* PSHORT
169 TYPEDEF: SIZE_T* PSIZE_T
170 TYPEDEF: SSIZE_T* PSSIZE_T
172 TYPEDEF: TBYTE* PTBYTE
173 TYPEDEF: TCHAR* PTCHAR
174 TYPEDEF: UCHAR* PUCHAR
175 TYPEDEF: UHALF_PTR* PUHALF_PTR
177 TYPEDEF: UINT_PTR* PUINT_PTR
178 TYPEDEF: UINT32* PUINT32
179 TYPEDEF: UINT64* PUINT64
180 TYPEDEF: ULONG* PULONG
181 TYPEDEF: ULONGLONG* PULONGLONG
182 TYPEDEF: ULONG_PTR* PULONG_PTR
183 TYPEDEF: ULONG32* PULONG32
184 TYPEDEF: ULONG64* PULONG64
185 TYPEDEF: USHORT* PUSHORT
186 TYPEDEF: { c-string utf16n } PWCHAR
188 TYPEDEF: { c-string utf16n } PWSTR
189 TYPEDEF: HANDLE SC_HANDLE
190 TYPEDEF: LPVOID SC_LOCK
191 TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
192 TYPEDEF: LONGLONG USN
193 TYPEDEF: UINT_PTR WPARAM
195 TYPEDEF: size_t socklen_t
197 TYPEDEF: void* WNDPROC
202 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
204 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
208 { lpfnWndProc WNDPROC }
211 { hInstance HINSTANCE }
214 { hbrBackground HBRUSH }
215 { lpszMenuName LPCTSTR }
216 { lpszClassName LPCTSTR } ;
221 { lpfnWndProc WNDPROC }
224 { hInstance HINSTANCE }
227 { hbrBackground HBRUSH }
228 { lpszMenuName LPCTSTR }
229 { lpszClassName LPCTSTR }
244 { rgbReserved BYTE[32] } ;
246 STRUCT: BITMAPINFOHEADER
252 { biCompression DWORD }
253 { biSizeImage DWORD }
254 { biXPelsPerMeter LONG }
255 { biYPelsPerMeter LONG }
257 { biClrImportant DWORD } ;
263 { rgbReserved BYTE } ;
266 { bmiHeader BITMAPINFOHEADER }
267 { bimColors RGBQUAD[1] } ;
269 TYPEDEF: void* LPPAINTSTRUCT
270 TYPEDEF: void* PAINTSTRUCT
290 STRUCT: PIXELFORMATDESCRIPTOR
305 { cAccumRedBits BYTE }
306 { cAccumGreenBits BYTE }
307 { cAccumBlueBits BYTE }
308 { cAccumAlphaBits BYTE }
310 { cStencilBits BYTE }
314 { dwLayerMask DWORD }
315 { dwVisibleMask DWORD }
316 { dwDamageMask DWORD } ;
318 : <RECT> ( loc dim -- RECT )
319 dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
322 TYPEDEF: RECT* LPRECT
323 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
325 TYPEDEF: HANDLE HGLRC
327 TYPEDEF: void* PWNDCLASS
328 TYPEDEF: void* PWNDCLASSEX
329 TYPEDEF: void* LPWNDCLASS
330 TYPEDEF: void* LPWNDCLASSEX
331 TYPEDEF: void* MSGBOXPARAMSA
332 TYPEDEF: void* MSGBOXPARAMSW
333 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
357 { vkDirection uint } ;
363 TYPEDEF: ACCEL* LPACCEL
365 TYPEDEF: DWORD COLORREF
366 TYPEDEF: DWORD* LPCOLORREF
368 : RGB ( r g b -- COLORREF )
369 { 16 8 0 } bitfield ; inline
370 : >RGB< ( COLORREF -- r g b )
372 [ -8 shift 0xff bitand ]
373 [ -16 shift 0xff bitand ] tri ;
375 : color>RGB ( color -- COLORREF )
376 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
377 : RGB>color ( COLORREF -- color )
378 >RGB< [ 1/255. * >float ] tri@ 1.0 <rgba> ;
384 { tmInternalLeading LONG }
385 { tmExternalLeading LONG }
386 { tmAveCharWidth LONG }
387 { tmMaxCharWidth LONG }
390 { tmDigitizedAspectX LONG }
391 { tmDigitizedAspectY LONG }
392 { tmFirstChar WCHAR }
394 { tmDefaultChar WCHAR }
395 { tmBreakChar WCHAR }
397 { tmUnderlined BYTE }
399 { tmPitchAndFamily BYTE }
402 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC
404 TYPEDEF: ULONG PROPID