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
64 TYPEDEF: ulong ULONG32
65 TYPEDEF: ulonglong ULONG64
66 TYPEDEF: long* POINTER_32
67 TYPEDEF: longlong* POINTER_64
68 TYPEDEF: longlong INT64
69 TYPEDEF: ulonglong UINT64
70 TYPEDEF: longlong LONGLONG
71 TYPEDEF: ulonglong ULONGLONG
72 TYPEDEF: longlong LONG64
73 TYPEDEF: ulonglong DWORD64
74 TYPEDEF: longlong LARGE_INTEGER
75 TYPEDEF: ulonglong ULARGE_INTEGER
76 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
77 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
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: RECT* LPRECT
205 TYPEDEF: void* PWNDCLASS
206 TYPEDEF: void* PWNDCLASSEX
207 TYPEDEF: void* LPWNDCLASS
208 TYPEDEF: void* LPWNDCLASSEX
209 TYPEDEF: void* MSGBOXPARAMSA
210 TYPEDEF: void* MSGBOXPARAMSW
211 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
213 TYPEDEF: size_t socklen_t
215 TYPEDEF: void* WNDPROC
220 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
222 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
226 { lpfnWndProc WNDPROC }
229 { hInstance HINSTANCE }
232 { hbrBackground HBRUSH }
233 { lpszMenuName LPCTSTR }
234 { lpszClassName LPCTSTR } ;
239 { lpfnWndProc WNDPROC }
242 { hInstance HINSTANCE }
245 { hbrBackground HBRUSH }
246 { lpszMenuName LPCTSTR }
247 { lpszClassName LPCTSTR }
262 { rgbReserved BYTE[32] } ;
264 STRUCT: BITMAPINFOHEADER
270 { biCompression DWORD }
271 { biSizeImage DWORD }
272 { biXPelsPerMeter LONG }
273 { biYPelsPerMeter LONG }
275 { biClrImportant DWORD } ;
281 { rgbReserved BYTE } ;
284 { bmiHeader BITMAPINFOHEADER }
285 { bimColors RGBQUAD[1] } ;
287 TYPEDEF: void* LPPAINTSTRUCT
288 TYPEDEF: void* PAINTSTRUCT
308 STRUCT: PIXELFORMATDESCRIPTOR
323 { cAccumRedBits BYTE }
324 { cAccumGreenBits BYTE }
325 { cAccumBlueBits BYTE }
326 { cAccumAlphaBits BYTE }
328 { cStencilBits BYTE }
332 { dwLayerMask DWORD }
333 { dwVisibleMask DWORD }
334 { dwDamageMask DWORD } ;
336 : <RECT> ( loc dim -- RECT )
337 dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
340 TYPEDEF: RECT* LPRECT
341 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
343 TYPEDEF: HANDLE HGLRC
368 { vkDirection uint } ;
374 TYPEDEF: ACCEL* LPACCEL
376 TYPEDEF: DWORD COLORREF
377 TYPEDEF: DWORD* LPCOLORREF
379 : RGB ( r g b -- COLORREF )
380 { 16 8 0 } bitfield ; inline
382 : color>RGB ( color -- COLORREF )
383 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
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