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: wchar_t WCHAR
17 TYPEDEF: ushort USHORT
33 TYPEDEF: long LONG_PTR
34 TYPEDEF: long* PLONG_PTR
37 TYPEDEF: void* ULONG_PTR
38 TYPEDEF: void* PULONG_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
53 TYPEDEF: ulong ULONG_PTR
58 TYPEDEF: ulong ULONG32
59 TYPEDEF: ulonglong ULONG64
60 TYPEDEF: long* POINTER_32
61 TYPEDEF: longlong* POINTER_64
62 TYPEDEF: longlong INT64
63 TYPEDEF: ulonglong UINT64
64 TYPEDEF: longlong LONGLONG
65 TYPEDEF: ulonglong ULONGLONG
66 TYPEDEF: longlong LONG64
67 TYPEDEF: ulonglong DWORD64
68 TYPEDEF: longlong LARGE_INTEGER
69 TYPEDEF: ulonglong ULARGE_INTEGER
70 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
71 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
74 << { char* utf16n } \ wchar_t* typedef >>
76 TYPEDEF: wchar_t* LPCSTR
77 TYPEDEF: wchar_t* LPWSTR
85 TYPEDEF: DWORD COLORREF
86 TYPEDEF: ULONGLONG DWORDLONG
87 TYPEDEF: ULONG_PTR DWORD_PTR
89 TYPEDEF: HANDLE HACCEL
90 TYPEDEF: HANDLE HBITMAP
91 TYPEDEF: HANDLE HBRUSH
92 TYPEDEF: HANDLE HCOLORSPACE
94 TYPEDEF: HANDLE HCONVLIST
96 TYPEDEF: HICON HCURSOR
98 TYPEDEF: HANDLE HDDEDATA
100 TYPEDEF: HANDLE HDROP
102 TYPEDEF: HANDLE HENMETAFILE
103 TYPEDEF: HANDLE HFONT
104 TYPEDEF: HANDLE HGDIOBJ
105 TYPEDEF: HANDLE HGLOBAL
106 TYPEDEF: HANDLE HHOOK
107 TYPEDEF: HANDLE HINSTANCE
110 TYPEDEF: HANDLE HLOCAL
111 TYPEDEF: HANDLE HMENU
112 TYPEDEF: HANDLE HMETAFILE
113 TYPEDEF: HINSTANCE HMODULE
114 TYPEDEF: HANDLE HMONITOR
115 TYPEDEF: HANDLE HPALETTE
117 TYPEDEF: LONG HRESULT
119 TYPEDEF: HANDLE HRSRC
121 TYPEDEF: HANDLE WINSTA ! MS docs say typedef HANDLE WINSTA ;
122 TYPEDEF: HANDLE HWINSTA ! typo??
124 TYPEDEF: HANDLE HCRYPTPROV
127 TYPEDEF: DWORD LCTYPE
128 TYPEDEF: DWORD LGRPID
129 TYPEDEF: LONG_PTR LPARAM
130 TYPEDEF: BOOL* LPBOOL
131 TYPEDEF: BYTE* LPBYTE
132 TYPEDEF: DWORD* LPCOLORREF
133 TYPEDEF: WCHAR* LPCWSTR
134 ! TYPEDEF: WCHAR* LPWSTR
136 TYPEDEF: WCHAR* LPSTR
137 TYPEDEF: wchar_t* LPCTSTR
138 TYPEDEF: wchar_t* LPWTSTR
140 TYPEDEF: wchar_t* LPTSTR
141 TYPEDEF: LPCSTR PCTSTR
144 TYPEDEF: DWORD* LPDWORD
145 TYPEDEF: HANDLE* LPHANDLE
146 TYPEDEF: WORD* LPWORD
147 TYPEDEF: LONG_PTR LRESULT
149 TYPEDEF: BOOLEAN* PBOOLEAN
153 TYPEDEF: WCHAR* PCWSTR
154 TYPEDEF: DWORD* PDWORD
155 TYPEDEF: DWORDLONG* PDWORDLONG
156 TYPEDEF: DWORD_PTR* PDWORD_PTR
157 TYPEDEF: DWORD32* PDWORD32
158 TYPEDEF: DWORD64* PDWORD64
159 TYPEDEF: FLOAT* PFLOAT
160 TYPEDEF: HALF_PTR* PHALF_PTR
161 TYPEDEF: HANDLE* PHANDLE
163 TYPEDEF: INT_PTR* PINT_PTR
164 TYPEDEF: INT32* PINT32
165 TYPEDEF: INT64* PINT64
166 TYPEDEF: PDWORD PLCID
168 TYPEDEF: LONGLONG* PLONGLONG
169 TYPEDEF: LONG_PTR* PLONG_PTR
170 TYPEDEF: LONG32* PLONG32
171 TYPEDEF: LONG64* PLONG64
172 TYPEDEF: SHORT* PSHORT
173 TYPEDEF: SIZE_T* PSIZE_T
174 TYPEDEF: SSIZE_T* PSSIZE_T
176 TYPEDEF: TBYTE* PTBYTE
177 TYPEDEF: TCHAR* PTCHAR
178 TYPEDEF: UCHAR* PUCHAR
179 TYPEDEF: UHALF_PTR* PUHALF_PTR
181 TYPEDEF: UINT_PTR* PUINT_PTR
182 TYPEDEF: UINT32* PUINT32
183 TYPEDEF: UINT64* PUINT64
184 TYPEDEF: ULONG* PULONG
185 TYPEDEF: ULONGLONG* PULONGLONG
186 TYPEDEF: ULONG_PTR* PULONG_PTR
187 TYPEDEF: ULONG32* PULONG32
188 TYPEDEF: ULONG64* PULONG64
189 TYPEDEF: USHORT* PUSHORT
190 TYPEDEF: WCHAR* PWCHAR
192 TYPEDEF: WCHAR* PWSTR
193 TYPEDEF: HANDLE SC_HANDLE
194 TYPEDEF: LPVOID SC_LOCK
195 TYPEDEF: HANDLE SERVICE_STATUS_HANDLE
196 TYPEDEF: ULONG_PTR SIZE_T
197 TYPEDEF: LONG_PTR SSIZE_T
198 TYPEDEF: LONGLONG USN
199 TYPEDEF: UINT_PTR WPARAM
201 TYPEDEF: RECT* LPRECT
202 TYPEDEF: void* PWNDCLASS
203 TYPEDEF: void* PWNDCLASSEX
204 TYPEDEF: void* LPWNDCLASS
205 TYPEDEF: void* LPWNDCLASSEX
206 TYPEDEF: void* MSGBOXPARAMSA
207 TYPEDEF: void* MSGBOXPARAMSW
208 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
210 TYPEDEF: size_t socklen_t
212 TYPEDEF: void* WNDPROC
217 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
219 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
223 { lpfnWndProc WNDPROC }
226 { hInstance HINSTANCE }
229 { hbrBackground HBRUSH }
230 { lpszMenuName LPCTSTR }
231 { lpszClassName LPCTSTR } ;
236 { lpfnWndProc WNDPROC }
239 { hInstance HINSTANCE }
242 { hbrBackground HBRUSH }
243 { lpszMenuName LPCTSTR }
244 { lpszClassName LPCTSTR }
253 C-STRUCT: PAINTSTRUCT
257 { "BOOL" "fRestore" }
258 { "BOOL" "fIncUpdate" }
259 { "BYTE[32]" "rgbReserved" }
262 STRUCT: BITMAPINFOHEADER
268 { biCompression DWORD }
269 { biSizeImage DWORD }
270 { biXPelsPerMeter LONG }
271 { biYPelsPerMeter LONG }
273 { biClrImportant DWORD } ;
279 { rgbReserved BYTE } ;
282 { bmiHeader BITMAPINFOHEADER }
283 { bimColors RGBQUAD[1] } ;
285 TYPEDEF: void* LPPAINTSTRUCT
286 TYPEDEF: void* PAINTSTRUCT
299 { "WPARAM" "wParam" }
300 { "LPARAM" "lParam" }
306 STRUCT: PIXELFORMATDESCRIPTOR
321 { cAccumRedBits BYTE }
322 { cAccumGreenBits BYTE }
323 { cAccumBlueBits BYTE }
324 { cAccumAlphaBits BYTE }
326 { cStencilBits BYTE }
330 { dwLayerMask DWORD }
331 { dwVisibleMask DWORD }
332 { dwDamageMask DWORD } ;
334 : <RECT> ( loc dim -- RECT )
335 dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
338 TYPEDEF: RECT* LPRECT
339 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
341 TYPEDEF: HANDLE HGLRC
349 { "uint" "stateMask" }
350 { "void*" "pszText" }
351 { "int" "cchTextMax" }
356 { "uint" "cColumns" }
357 { "uint*" "puColumns" }
358 { "int*" "piColFmt" }
366 { "uint" "vkDirection" } ;
372 TYPEDEF: ACCEL* LPACCEL
374 TYPEDEF: DWORD COLORREF
375 TYPEDEF: DWORD* LPCOLORREF
377 : RGB ( r g b -- COLORREF )
378 { 16 8 0 } bitfield ; inline
380 : color>RGB ( color -- COLORREF )
381 >rgba-components drop [ 255 * >integer ] tri@ RGB ;
387 { tmInternalLeading LONG }
388 { tmExternalLeading LONG }
389 { tmAveCharWidth LONG }
390 { tmMaxCharWidth LONG }
393 { tmDigitizedAspectX LONG }
394 { tmDigitizedAspectY LONG }
395 { tmFirstChar WCHAR }
397 { tmDefaultChar WCHAR }
398 { tmBreakChar WCHAR }
400 { tmUnderlined BYTE }
402 { tmPitchAndFamily BYTE }
405 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC