]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/types/types.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / basis / windows / types / types.factor
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 ;
7 IN: windows.types
8
9 TYPEDEF: char                CHAR
10 TYPEDEF: uchar               UCHAR
11 TYPEDEF: uchar               BYTE
12
13 TYPEDEF: ushort              wchar_t
14
15 TYPEDEF: wchar_t             WCHAR
16
17 TYPEDEF: short               SHORT
18 TYPEDEF: ushort              USHORT
19
20 TYPEDEF: ushort              WORD
21 TYPEDEF: ulong               DWORD
22
23 TYPEDEF: int                 INT
24 TYPEDEF: uint                UINT
25
26 TYPEDEF: int                 BOOL
27
28 TYPEDEF: int*                PINT
29 TYPEDEF: int*                LPINT
30 TYPEDEF: int                 HFILE
31
32 TYPEDEF: long                LONG
33 TYPEDEF: long*               LPLONG
34 TYPEDEF: intptr_t            LONG_PTR
35
36 TYPEDEF: uint                ULONG
37 TYPEDEF: uintptr_t           ULONG_PTR
38
39 TYPEDEF: void                VOID
40 TYPEDEF: void*               PVOID
41 TYPEDEF: void*               LPVOID
42 TYPEDEF: void*               LPCVOID
43
44 TYPEDEF: float               FLOAT
45
46 TYPEDEF: intptr_t    HALF_PTR
47 TYPEDEF: intptr_t    UHALF_PTR
48 TYPEDEF: intptr_t    INT_PTR
49 TYPEDEF: intptr_t    UINT_PTR
50
51 TYPEDEF: int         INT32
52 TYPEDEF: uint        UINT32
53 TYPEDEF: uint        DWORD32
54 TYPEDEF: long        LONG32
55 TYPEDEF: ulong       ULONG32
56 TYPEDEF: ulonglong   ULONG64
57 TYPEDEF: long*       POINTER_32
58 TYPEDEF: longlong*   POINTER_64
59 TYPEDEF: longlong    INT64
60 TYPEDEF: ulonglong   UINT64
61 TYPEDEF: longlong    LONGLONG
62 TYPEDEF: ulonglong   ULONGLONG
63 TYPEDEF: longlong    LONG64
64 TYPEDEF: ulonglong   DWORD64
65 TYPEDEF: longlong    LARGE_INTEGER
66 TYPEDEF: ulonglong   ULARGE_INTEGER
67 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
68 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
69 TYPEDEF: size_t SIZE_T
70 TYPEDEF: ptrdiff_t SSIZE_T
71
72 TYPEDEF: { c-string utf16n } LPCSTR
73 TYPEDEF: { c-string utf16n } LPWSTR
74 TYPEDEF: WCHAR       TCHAR
75 TYPEDEF: LPWSTR      LPTCH
76 TYPEDEF: LPWSTR      PTCH
77 TYPEDEF: TCHAR       TBYTE
78
79 TYPEDEF: WORD                ATOM
80 TYPEDEF: BYTE                BOOLEAN
81 TYPEDEF: ULONGLONG           DWORDLONG
82 TYPEDEF: ULONG_PTR           DWORD_PTR
83 TYPEDEF: PVOID               HANDLE
84 TYPEDEF: HANDLE              HACCEL
85 TYPEDEF: HANDLE              HBITMAP
86 TYPEDEF: HANDLE              HBRUSH
87 TYPEDEF: HANDLE              HCOLORSPACE
88 TYPEDEF: HANDLE              HCONV
89 TYPEDEF: HANDLE              HCONVLIST
90 TYPEDEF: HANDLE              HICON
91 TYPEDEF: HICON               HCURSOR
92 TYPEDEF: HANDLE              HDC
93 TYPEDEF: HANDLE              HDDEDATA
94 TYPEDEF: HANDLE              HDESK
95 TYPEDEF: HANDLE              HDROP
96 TYPEDEF: HANDLE              HDWP
97 TYPEDEF: HANDLE              HENMETAFILE
98 TYPEDEF: HANDLE              HFONT
99 TYPEDEF: HANDLE              HGDIOBJ
100 TYPEDEF: HANDLE              HGLOBAL
101 TYPEDEF: HANDLE              HHOOK
102 TYPEDEF: HANDLE              HINSTANCE
103 TYPEDEF: DWORD               HKEY
104 TYPEDEF: HANDLE              HKL
105 TYPEDEF: HANDLE              HLOCAL
106 TYPEDEF: HANDLE              HMENU
107 TYPEDEF: HANDLE              HMETAFILE
108 TYPEDEF: HINSTANCE           HMODULE
109 TYPEDEF: HANDLE              HMONITOR
110 TYPEDEF: HANDLE              HPALETTE
111 TYPEDEF: HANDLE              HPEN
112 TYPEDEF: LONG                HRESULT
113 TYPEDEF: HANDLE              HRGN
114 TYPEDEF: HANDLE              HRSRC
115 TYPEDEF: HANDLE              HSZ
116 TYPEDEF: HANDLE              WINSTA   ! MS docs say  typedef HANDLE WINSTA ;
117 TYPEDEF: HANDLE              HWINSTA  ! typo??
118 TYPEDEF: HANDLE              HWND
119 TYPEDEF: HANDLE              HCRYPTPROV
120 TYPEDEF: WORD                LANGID
121 TYPEDEF: DWORD               LCID
122 TYPEDEF: DWORD               LCTYPE
123 TYPEDEF: DWORD               LGRPID
124 TYPEDEF: LONG_PTR            LPARAM
125 TYPEDEF: BOOL*               LPBOOL
126 TYPEDEF: BYTE*               LPBYTE
127 TYPEDEF: { c-string utf16n } LPCWSTR
128 ! TYPEDEF: WCHAR*              LPWSTR
129
130 TYPEDEF: { c-string utf16n } LPSTR
131 TYPEDEF: { c-string utf16n } LPCTSTR
132 TYPEDEF: { c-string utf16n } LPWTSTR
133
134 TYPEDEF: { c-string utf16n } LPTSTR
135 TYPEDEF: LPCSTR      PCTSTR
136 TYPEDEF: LPSTR       PTSTR
137
138 TYPEDEF: DWORD*              LPDWORD
139 TYPEDEF: HANDLE*             LPHANDLE
140 TYPEDEF: WORD*               LPWORD
141 TYPEDEF: LONG_PTR            LRESULT
142 TYPEDEF: BOOL*               PBOOL
143 TYPEDEF: BOOLEAN*            PBOOLEAN
144 TYPEDEF: BYTE*               PBYTE
145 TYPEDEF: CHAR*               PCHAR
146 TYPEDEF: CHAR*               PCSTR
147 TYPEDEF: { c-string utf16n } PCWSTR
148 TYPEDEF: DWORD*              PDWORD
149 TYPEDEF: DWORDLONG*          PDWORDLONG
150 TYPEDEF: DWORD_PTR*          PDWORD_PTR
151 TYPEDEF: DWORD32*            PDWORD32
152 TYPEDEF: DWORD64*            PDWORD64
153 TYPEDEF: FLOAT*              PFLOAT
154 TYPEDEF: HALF_PTR*           PHALF_PTR
155 TYPEDEF: HANDLE*             PHANDLE
156 TYPEDEF: HKEY*               PHKEY
157 TYPEDEF: INT_PTR*            PINT_PTR
158 TYPEDEF: INT32*              PINT32
159 TYPEDEF: INT64*              PINT64
160 TYPEDEF: PDWORD              PLCID
161 TYPEDEF: LONG*               PLONG
162 TYPEDEF: LONGLONG*           PLONGLONG
163 TYPEDEF: LONG_PTR*           PLONG_PTR
164 TYPEDEF: LONG32*             PLONG32
165 TYPEDEF: LONG64*             PLONG64
166 TYPEDEF: SHORT*              PSHORT
167 TYPEDEF: SIZE_T*             PSIZE_T
168 TYPEDEF: SSIZE_T*            PSSIZE_T
169 TYPEDEF: CHAR*               PSTR
170 TYPEDEF: TBYTE*              PTBYTE
171 TYPEDEF: TCHAR*              PTCHAR
172 TYPEDEF: UCHAR*              PUCHAR
173 TYPEDEF: UHALF_PTR*          PUHALF_PTR
174 TYPEDEF: UINT*               PUINT
175 TYPEDEF: UINT_PTR*           PUINT_PTR
176 TYPEDEF: UINT32*             PUINT32
177 TYPEDEF: UINT64*             PUINT64
178 TYPEDEF: ULONG*              PULONG
179 TYPEDEF: ULONGLONG*          PULONGLONG
180 TYPEDEF: ULONG_PTR*          PULONG_PTR
181 TYPEDEF: ULONG32*            PULONG32
182 TYPEDEF: ULONG64*            PULONG64
183 TYPEDEF: USHORT*             PUSHORT
184 TYPEDEF: { c-string utf16n } PWCHAR
185 TYPEDEF: WORD*               PWORD
186 TYPEDEF: { c-string utf16n } PWSTR
187 TYPEDEF: HANDLE              SC_HANDLE
188 TYPEDEF: LPVOID              SC_LOCK
189 TYPEDEF: HANDLE              SERVICE_STATUS_HANDLE
190 TYPEDEF: LONGLONG            USN
191 TYPEDEF: UINT_PTR            WPARAM
192
193 TYPEDEF: size_t socklen_t
194
195 TYPEDEF: void* WNDPROC
196
197 CONSTANT: FALSE 0
198 CONSTANT: TRUE 1
199
200 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
201
202 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
203
204 STRUCT: WNDCLASS
205     { style UINT }
206     { lpfnWndProc WNDPROC }
207     { cbClsExtra int }
208     { cbWndExtra int }
209     { hInstance HINSTANCE }
210     { hIcon HICON }
211     { hCursor HCURSOR }
212     { hbrBackground HBRUSH }
213     { lpszMenuName LPCTSTR }
214     { lpszClassName LPCTSTR } ;
215
216 STRUCT: WNDCLASSEX
217     { cbSize UINT }
218     { style UINT }
219     { lpfnWndProc WNDPROC }
220     { cbClsExtra int }
221     { cbWndExtra int }
222     { hInstance HINSTANCE }
223     { hIcon HICON }
224     { hCursor HCURSOR }
225     { hbrBackground HBRUSH }
226     { lpszMenuName LPCTSTR }
227     { lpszClassName LPCTSTR }
228     { hIconSm HICON } ;
229
230 STRUCT: RECT
231     { left LONG }
232     { top LONG }
233     { right LONG }
234     { bottom LONG } ;
235
236 STRUCT: PAINTSTRUCT
237     { hdc HDC }
238     { fErase BOOL }
239     { rcPaint RECT }
240     { fRestore BOOL }
241     { fIncUpdate BOOL }
242     { rgbReserved BYTE[32] } ;
243
244 STRUCT: BITMAPINFOHEADER
245     { biSize DWORD }
246     { biWidth LONG }
247     { biHeight LONG }
248     { biPlanes WORD }
249     { biBitCount WORD }
250     { biCompression DWORD }
251     { biSizeImage DWORD }
252     { biXPelsPerMeter LONG }
253     { biYPelsPerMeter LONG }
254     { biClrUsed DWORD }
255     { biClrImportant DWORD } ;
256
257 STRUCT: RGBQUAD
258     { rgbBlue BYTE }
259     { rgbGreen BYTE }
260     { rgbRed BYTE }
261     { rgbReserved BYTE } ;
262
263 STRUCT: BITMAPINFO
264     { bmiHeader BITMAPINFOHEADER }
265     { bimColors RGBQUAD[1] } ;
266
267 TYPEDEF: void* LPPAINTSTRUCT
268 TYPEDEF: void* PAINTSTRUCT
269
270 STRUCT: POINT
271     { x LONG }
272     { y LONG } ; 
273
274 STRUCT: SIZE
275     { cx LONG }
276     { cy LONG } ;
277
278 STRUCT: MSG
279     { hWnd HWND }
280     { message UINT }
281     { wParam WPARAM }
282     { lParam LPARAM }
283     { time DWORD }
284     { pt POINT } ;
285
286 TYPEDEF: MSG*                LPMSG
287
288 STRUCT: PIXELFORMATDESCRIPTOR
289     { nSize WORD }
290     { nVersion WORD }
291     { dwFlags DWORD }
292     { iPixelType BYTE }
293     { cColorBits BYTE }
294     { cRedBits BYTE }
295     { cRedShift BYTE }
296     { cGreenBits BYTE }
297     { cGreenShift BYTE }
298     { cBlueBits BYTE }
299     { cBlueShift BYTE }
300     { cAlphaBits BYTE }
301     { cAlphaShift BYTE }
302     { cAccumBits BYTE }
303     { cAccumRedBits BYTE }
304     { cAccumGreenBits BYTE }
305     { cAccumBlueBits BYTE }
306     { cAccumAlphaBits BYTE }
307     { cDepthBits BYTE }
308     { cStencilBits BYTE }
309     { cAuxBuffers BYTE }
310     { iLayerType BYTE }
311     { bReserved BYTE }
312     { dwLayerMask DWORD }
313     { dwVisibleMask DWORD }
314     { dwDamageMask DWORD } ;
315
316 : <RECT> ( loc dim -- RECT )
317     dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
318
319 TYPEDEF: RECT* PRECT
320 TYPEDEF: RECT* LPRECT
321 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
322 TYPEDEF: PFD* LPPFD
323 TYPEDEF: HANDLE HGLRC
324
325 TYPEDEF: void* PWNDCLASS
326 TYPEDEF: void* PWNDCLASSEX
327 TYPEDEF: void* LPWNDCLASS
328 TYPEDEF: void* LPWNDCLASSEX
329 TYPEDEF: void* MSGBOXPARAMSA
330 TYPEDEF: void* MSGBOXPARAMSW
331 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
332
333 STRUCT: LVITEM
334     { mask uint }
335     { iItem int }
336     { iSubItem int }
337     { state uint }
338     { stateMask uint }
339     { pszText void* }
340     { cchTextMax int }
341     { iImage int }
342     { lParam long }
343     { iIndent int }
344     { iGroupId int }
345     { cColumns uint }
346     { puColumns uint* }
347     { piColFmt int* }
348     { iGroup int } ;
349
350 STRUCT: LVFINDINFO
351     { flags uint }
352     { psz c-string }
353     { lParam long }
354     { pt POINT }
355     { vkDirection uint } ;
356
357 STRUCT: ACCEL
358     { fVirt BYTE }
359     { key WORD }
360     { cmd WORD } ;
361 TYPEDEF: ACCEL* LPACCEL
362
363 TYPEDEF: DWORD COLORREF
364 TYPEDEF: DWORD* LPCOLORREF
365
366 : RGB ( r g b -- COLORREF )
367     { 16 8 0 } bitfield ; inline
368 : >RGB< ( COLORREF -- r g b )
369     [           HEX: ff bitand ]
370     [  -8 shift HEX: ff bitand ]
371     [ -16 shift HEX: ff bitand ] tri ;
372
373 : color>RGB ( color -- COLORREF )
374     >rgba-components drop [ 255 * >integer ] tri@ RGB ;
375 : RGB>color ( COLORREF -- color )
376     >RGB< [ 1/255. * >float ] tri@ 1.0 <rgba> ;
377
378 STRUCT: TEXTMETRICW
379     { tmHeight LONG }
380     { tmAscent LONG }
381     { tmDescent LONG }
382     { tmInternalLeading LONG }
383     { tmExternalLeading LONG }
384     { tmAveCharWidth LONG }
385     { tmMaxCharWidth LONG }
386     { tmWeight LONG }
387     { tmOverhang LONG }
388     { tmDigitizedAspectX LONG }
389     { tmDigitizedAspectY LONG }
390     { tmFirstChar WCHAR }
391     { tmLastChar WCHAR }
392     { tmDefaultChar WCHAR }
393     { tmBreakChar WCHAR }
394     { tmItalic BYTE }
395     { tmUnderlined BYTE }
396     { tmStruckOut BYTE }
397     { tmPitchAndFamily BYTE }
398     { tmCharSet BYTE } ;
399
400 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC