1 ! Copyright (C) 2005, 2006 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.c-types alien.syntax classes.struct colors
4 io.encodings.utf16n io.encodings.utf8 kernel math math.bitwise
5 math.vectors sequences ;
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 } LPTCSTR
77 TYPEDEF: { c-string utf16n } LPWSTR
85 TYPEDEF: ULONGLONG DWORDLONG
86 TYPEDEF: ULONG_PTR DWORD_PTR
88 TYPEDEF: HANDLE HACCEL
89 TYPEDEF: HANDLE HBITMAP
90 TYPEDEF: HANDLE HBRUSH
91 TYPEDEF: HANDLE HCOLORSPACE
93 TYPEDEF: HANDLE HCONVLIST
95 TYPEDEF: HICON HCURSOR
97 TYPEDEF: HANDLE HDDEDATA
101 TYPEDEF: HANDLE HENHMETAFILE
102 TYPEDEF: HANDLE HFONT
103 TYPEDEF: HANDLE HGDIOBJ
104 TYPEDEF: HANDLE HGLOBAL
105 TYPEDEF: HANDLE HHOOK
106 TYPEDEF: HANDLE HINSTANCE
109 TYPEDEF: HANDLE HLOCAL
110 TYPEDEF: HANDLE HMENU
111 TYPEDEF: HANDLE HMETAFILE
112 TYPEDEF: HINSTANCE HMODULE
113 TYPEDEF: HANDLE HMONITOR
114 TYPEDEF: HANDLE HPALETTE
116 TYPEDEF: LONG HRESULT
118 TYPEDEF: HANDLE HRSRC
120 TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
121 TYPEDEF: HANDLE HWINSTA ! typo??
123 TYPEDEF: HANDLE HCRYPTPROV
126 TYPEDEF: DWORD LCTYPE
127 TYPEDEF: DWORD LGRPID
128 TYPEDEF: LONG_PTR LPARAM
129 TYPEDEF: BOOL* LPBOOL
130 TYPEDEF: BYTE* LPBYTE
132 TYPEDEF: { c-string utf16n } LPCWSTR
133 ! TYPEDEF: WCHAR* LPWSTR
135 TYPEDEF: { c-string utf8 } LPSTR
136 TYPEDEF: { c-string utf16n } LPCTSTR
137 TYPEDEF: { c-string utf16n } LPWTSTR
138 TYPEDEF: { c-string utf16n } LPTSTR
139 TYPEDEF: LPCSTR PCTSTR
142 TYPEDEF: DWORD* LPDWORD
143 TYPEDEF: HANDLE* LPHANDLE
144 TYPEDEF: WORD* LPWORD
145 TYPEDEF: LONG_PTR LRESULT
147 TYPEDEF: BOOLEAN* PBOOLEAN
151 TYPEDEF: { c-string utf16n } PCWSTR
152 TYPEDEF: DWORD* PDWORD
153 TYPEDEF: DWORDLONG* PDWORDLONG
154 TYPEDEF: DWORD_PTR* PDWORD_PTR
155 TYPEDEF: DWORD32* PDWORD32
156 TYPEDEF: DWORD64* PDWORD64
157 TYPEDEF: FLOAT* PFLOAT
158 TYPEDEF: HALF_PTR* PHALF_PTR
159 TYPEDEF: HANDLE* PHANDLE
161 TYPEDEF: INT_PTR* PINT_PTR
162 TYPEDEF: INT32* PINT32
163 TYPEDEF: INT64* PINT64
164 TYPEDEF: PDWORD PLCID
166 TYPEDEF: LONGLONG* PLONGLONG
167 TYPEDEF: LONG_PTR* PLONG_PTR
168 TYPEDEF: LONG32* PLONG32
169 TYPEDEF: LONG64* PLONG64
170 TYPEDEF: SHORT* PSHORT
171 TYPEDEF: SIZE_T* PSIZE_T
172 TYPEDEF: SSIZE_T* PSSIZE_T
174 TYPEDEF: TBYTE* PTBYTE
175 TYPEDEF: TCHAR* PTCHAR
176 TYPEDEF: UCHAR* PUCHAR
177 TYPEDEF: UHALF_PTR* PUHALF_PTR
179 TYPEDEF: UINT_PTR* PUINT_PTR
180 TYPEDEF: UINT32* PUINT32
181 TYPEDEF: UINT64* PUINT64
182 TYPEDEF: ULONG* PULONG
183 TYPEDEF: ULONGLONG* PULONGLONG
184 TYPEDEF: ULONG_PTR* PULONG_PTR
185 TYPEDEF: ULONG32* PULONG32
186 TYPEDEF: ULONG64* PULONG64
187 TYPEDEF: USHORT* PUSHORT
188 TYPEDEF: { c-string utf16n } PWCHAR
190 TYPEDEF: { c-string utf16n } PWSTR
191 TYPEDEF: HANDLE SC_HANDLE
192 TYPEDEF: LPVOID SC_LOCK
193 TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
194 TYPEDEF: LONGLONG USN
195 TYPEDEF: UINT_PTR WPARAM
196 TYPEDEF: DWORD ACCESS_MASK
197 TYPEDEF: ACCESS_MASK* PACCESS_MASK
199 TYPEDEF: size_t socklen_t
201 TYPEDEF: void* WNDPROC
206 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
208 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
212 { lpfnWndProc WNDPROC }
215 { hInstance HINSTANCE }
218 { hbrBackground HBRUSH }
219 { lpszMenuName LPCTSTR }
220 { lpszClassName LPCTSTR } ;
225 { lpfnWndProc WNDPROC }
228 { hInstance HINSTANCE }
231 { hbrBackground HBRUSH }
232 { lpszMenuName LPCTSTR }
233 { lpszClassName LPCTSTR }
248 { rgbReserved BYTE[32] } ;
250 STRUCT: BITMAPINFOHEADER
256 { biCompression DWORD }
257 { biSizeImage DWORD }
258 { biXPelsPerMeter LONG }
259 { biYPelsPerMeter LONG }
261 { biClrImportant DWORD } ;
267 { rgbReserved BYTE } ;
270 { bmiHeader BITMAPINFOHEADER }
271 { bimColors RGBQUAD[1] } ;
273 TYPEDEF: void* LPPAINTSTRUCT
274 TYPEDEF: void* PAINTSTRUCT
279 TYPEDEF: POINT* LPPOINT
295 STRUCT: PIXELFORMATDESCRIPTOR
310 { cAccumRedBits BYTE }
311 { cAccumGreenBits BYTE }
312 { cAccumBlueBits BYTE }
313 { cAccumAlphaBits BYTE }
315 { cStencilBits BYTE }
319 { dwLayerMask DWORD }
320 { dwVisibleMask DWORD }
321 { dwDamageMask DWORD } ;
323 : <RECT> ( loc dim -- RECT )
324 dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
327 TYPEDEF: RECT* LPRECT
328 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
330 TYPEDEF: HANDLE HGLRC
332 TYPEDEF: void* PWNDCLASS
333 TYPEDEF: void* PWNDCLASSEX
334 TYPEDEF: void* LPWNDCLASS
335 TYPEDEF: void* LPWNDCLASSEX
336 TYPEDEF: void* MSGBOXPARAMSA
337 TYPEDEF: void* MSGBOXPARAMSW
338 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
362 { vkDirection uint } ;
368 TYPEDEF: ACCEL* LPACCEL
370 TYPEDEF: DWORD COLORREF
371 TYPEDEF: DWORD* LPCOLORREF
373 : RGB ( r g b -- COLORREF )
374 { 16 8 0 } bitfield ; inline
375 : >RGB< ( COLORREF -- r g b )
377 [ -8 shift 0xff bitand ]
378 [ -16 shift 0xff bitand ] tri ;
380 : color>RGB ( color -- COLORREF )
381 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
382 : RGB>color ( COLORREF -- color )
383 >RGB< [ 1/255. * >float ] tri@ 1.0 <rgba> ;
389 { tmInternalLeading LONG }
390 { tmExternalLeading LONG }
391 { tmAveCharWidth LONG }
392 { tmMaxCharWidth LONG }
395 { tmDigitizedAspectX LONG }
396 { tmDigitizedAspectY LONG }
397 { tmFirstChar WCHAR }
399 { tmDefaultChar WCHAR }
400 { tmBreakChar WCHAR }
402 { tmUnderlined BYTE }
404 { tmPitchAndFamily BYTE }
407 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC
409 TYPEDEF: ULONG PROPID
411 CALLBACK: BOOL WNDENUMPROC ( HWND hWnd, LPARAM lParam )
412 CALLBACK: LRESULT HOOKPROC ( int nCode, WPARAM wParam, LPARAM lParam )