]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/types/types.factor
use radix literals
[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 TYPEDEF: short               INT16
20 TYPEDEF: ushort              UINT16
21
22 TYPEDEF: ushort              WORD
23 TYPEDEF: ulong               DWORD
24
25 TYPEDEF: int                 INT
26 TYPEDEF: uint                UINT
27
28 TYPEDEF: int                 BOOL
29
30 TYPEDEF: int*                PINT
31 TYPEDEF: int*                LPINT
32 TYPEDEF: int                 HFILE
33
34 TYPEDEF: long                LONG
35 TYPEDEF: long*               LPLONG
36 TYPEDEF: intptr_t            LONG_PTR
37
38 TYPEDEF: uint                ULONG
39 TYPEDEF: uintptr_t           ULONG_PTR
40
41 TYPEDEF: void                VOID
42 TYPEDEF: void*               PVOID
43 TYPEDEF: void*               LPVOID
44 TYPEDEF: void*               LPCVOID
45
46 TYPEDEF: float               FLOAT
47
48 TYPEDEF: intptr_t    HALF_PTR
49 TYPEDEF: intptr_t    UHALF_PTR
50 TYPEDEF: intptr_t    INT_PTR
51 TYPEDEF: intptr_t    UINT_PTR
52
53 TYPEDEF: int         INT32
54 TYPEDEF: uint        UINT32
55 TYPEDEF: uint        DWORD32
56 TYPEDEF: long        LONG32
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
73
74 TYPEDEF: { c-string utf16n } LPCSTR
75 TYPEDEF: { c-string utf16n } LPWSTR
76 TYPEDEF: WCHAR       TCHAR
77 TYPEDEF: LPWSTR      LPTCH
78 TYPEDEF: LPWSTR      PTCH
79 TYPEDEF: TCHAR       TBYTE
80
81 TYPEDEF: WORD                ATOM
82 TYPEDEF: BYTE                BOOLEAN
83 TYPEDEF: ULONGLONG           DWORDLONG
84 TYPEDEF: ULONG_PTR           DWORD_PTR
85 TYPEDEF: PVOID               HANDLE
86 TYPEDEF: HANDLE              HACCEL
87 TYPEDEF: HANDLE              HBITMAP
88 TYPEDEF: HANDLE              HBRUSH
89 TYPEDEF: HANDLE              HCOLORSPACE
90 TYPEDEF: HANDLE              HCONV
91 TYPEDEF: HANDLE              HCONVLIST
92 TYPEDEF: HANDLE              HICON
93 TYPEDEF: HICON               HCURSOR
94 TYPEDEF: HANDLE              HDC
95 TYPEDEF: HANDLE              HDDEDATA
96 TYPEDEF: HANDLE              HDESK
97 TYPEDEF: HANDLE              HDROP
98 TYPEDEF: HANDLE              HDWP
99 TYPEDEF: HANDLE              HENHMETAFILE
100 TYPEDEF: HANDLE              HFONT
101 TYPEDEF: HANDLE              HGDIOBJ
102 TYPEDEF: HANDLE              HGLOBAL
103 TYPEDEF: HANDLE              HHOOK
104 TYPEDEF: HANDLE              HINSTANCE
105 TYPEDEF: DWORD               HKEY
106 TYPEDEF: HANDLE              HKL
107 TYPEDEF: HANDLE              HLOCAL
108 TYPEDEF: HANDLE              HMENU
109 TYPEDEF: HANDLE              HMETAFILE
110 TYPEDEF: HINSTANCE           HMODULE
111 TYPEDEF: HANDLE              HMONITOR
112 TYPEDEF: HANDLE              HPALETTE
113 TYPEDEF: HANDLE              HPEN
114 TYPEDEF: LONG                HRESULT
115 TYPEDEF: HANDLE              HRGN
116 TYPEDEF: HANDLE              HRSRC
117 TYPEDEF: HANDLE              HSZ
118 TYPEDEF: HANDLE              WINSTA   ! MS docs say  typedef HANDLE WINSTA ;
119 TYPEDEF: HANDLE              HWINSTA  ! typo??
120 TYPEDEF: HANDLE              HWND
121 TYPEDEF: HANDLE              HCRYPTPROV
122 TYPEDEF: WORD                LANGID
123 TYPEDEF: DWORD               LCID
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
131
132 TYPEDEF: { c-string utf16n } LPSTR
133 TYPEDEF: { c-string utf16n } LPCTSTR
134 TYPEDEF: { c-string utf16n } LPWTSTR
135
136 TYPEDEF: { c-string utf16n } LPTSTR
137 TYPEDEF: LPCSTR      PCTSTR
138 TYPEDEF: LPSTR       PTSTR
139
140 TYPEDEF: DWORD*              LPDWORD
141 TYPEDEF: HANDLE*             LPHANDLE
142 TYPEDEF: WORD*               LPWORD
143 TYPEDEF: LONG_PTR            LRESULT
144 TYPEDEF: BOOL*               PBOOL
145 TYPEDEF: BOOLEAN*            PBOOLEAN
146 TYPEDEF: BYTE*               PBYTE
147 TYPEDEF: CHAR*               PCHAR
148 TYPEDEF: CHAR*               PCSTR
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
158 TYPEDEF: HKEY*               PHKEY
159 TYPEDEF: INT_PTR*            PINT_PTR
160 TYPEDEF: INT32*              PINT32
161 TYPEDEF: INT64*              PINT64
162 TYPEDEF: PDWORD              PLCID
163 TYPEDEF: LONG*               PLONG
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
171 TYPEDEF: CHAR*               PSTR
172 TYPEDEF: TBYTE*              PTBYTE
173 TYPEDEF: TCHAR*              PTCHAR
174 TYPEDEF: UCHAR*              PUCHAR
175 TYPEDEF: UHALF_PTR*          PUHALF_PTR
176 TYPEDEF: UINT*               PUINT
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
187 TYPEDEF: WORD*               PWORD
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
194
195 TYPEDEF: size_t socklen_t
196
197 TYPEDEF: void* WNDPROC
198
199 CONSTANT: FALSE 0
200 CONSTANT: TRUE 1
201
202 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
203
204 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
205
206 STRUCT: WNDCLASS
207     { style UINT }
208     { lpfnWndProc WNDPROC }
209     { cbClsExtra int }
210     { cbWndExtra int }
211     { hInstance HINSTANCE }
212     { hIcon HICON }
213     { hCursor HCURSOR }
214     { hbrBackground HBRUSH }
215     { lpszMenuName LPCTSTR }
216     { lpszClassName LPCTSTR } ;
217
218 STRUCT: WNDCLASSEX
219     { cbSize UINT }
220     { style UINT }
221     { lpfnWndProc WNDPROC }
222     { cbClsExtra int }
223     { cbWndExtra int }
224     { hInstance HINSTANCE }
225     { hIcon HICON }
226     { hCursor HCURSOR }
227     { hbrBackground HBRUSH }
228     { lpszMenuName LPCTSTR }
229     { lpszClassName LPCTSTR }
230     { hIconSm HICON } ;
231
232 STRUCT: RECT
233     { left LONG }
234     { top LONG }
235     { right LONG }
236     { bottom LONG } ;
237
238 STRUCT: PAINTSTRUCT
239     { hdc HDC }
240     { fErase BOOL }
241     { rcPaint RECT }
242     { fRestore BOOL }
243     { fIncUpdate BOOL }
244     { rgbReserved BYTE[32] } ;
245
246 STRUCT: BITMAPINFOHEADER
247     { biSize DWORD }
248     { biWidth LONG }
249     { biHeight LONG }
250     { biPlanes WORD }
251     { biBitCount WORD }
252     { biCompression DWORD }
253     { biSizeImage DWORD }
254     { biXPelsPerMeter LONG }
255     { biYPelsPerMeter LONG }
256     { biClrUsed DWORD }
257     { biClrImportant DWORD } ;
258
259 STRUCT: RGBQUAD
260     { rgbBlue BYTE }
261     { rgbGreen BYTE }
262     { rgbRed BYTE }
263     { rgbReserved BYTE } ;
264
265 STRUCT: BITMAPINFO
266     { bmiHeader BITMAPINFOHEADER }
267     { bimColors RGBQUAD[1] } ;
268
269 TYPEDEF: void* LPPAINTSTRUCT
270 TYPEDEF: void* PAINTSTRUCT
271
272 STRUCT: POINT
273     { x LONG }
274     { y LONG } ; 
275
276 STRUCT: SIZE
277     { cx LONG }
278     { cy LONG } ;
279
280 STRUCT: MSG
281     { hWnd HWND }
282     { message UINT }
283     { wParam WPARAM }
284     { lParam LPARAM }
285     { time DWORD }
286     { pt POINT } ;
287
288 TYPEDEF: MSG*                LPMSG
289
290 STRUCT: PIXELFORMATDESCRIPTOR
291     { nSize WORD }
292     { nVersion WORD }
293     { dwFlags DWORD }
294     { iPixelType BYTE }
295     { cColorBits BYTE }
296     { cRedBits BYTE }
297     { cRedShift BYTE }
298     { cGreenBits BYTE }
299     { cGreenShift BYTE }
300     { cBlueBits BYTE }
301     { cBlueShift BYTE }
302     { cAlphaBits BYTE }
303     { cAlphaShift BYTE }
304     { cAccumBits BYTE }
305     { cAccumRedBits BYTE }
306     { cAccumGreenBits BYTE }
307     { cAccumBlueBits BYTE }
308     { cAccumAlphaBits BYTE }
309     { cDepthBits BYTE }
310     { cStencilBits BYTE }
311     { cAuxBuffers BYTE }
312     { iLayerType BYTE }
313     { bReserved BYTE }
314     { dwLayerMask DWORD }
315     { dwVisibleMask DWORD }
316     { dwDamageMask DWORD } ;
317
318 : <RECT> ( loc dim -- RECT )
319     dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
320
321 TYPEDEF: RECT* PRECT
322 TYPEDEF: RECT* LPRECT
323 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
324 TYPEDEF: PFD* LPPFD
325 TYPEDEF: HANDLE HGLRC
326
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
334
335 STRUCT: LVITEM
336     { mask uint }
337     { iItem int }
338     { iSubItem int }
339     { state uint }
340     { stateMask uint }
341     { pszText void* }
342     { cchTextMax int }
343     { iImage int }
344     { lParam long }
345     { iIndent int }
346     { iGroupId int }
347     { cColumns uint }
348     { puColumns uint* }
349     { piColFmt int* }
350     { iGroup int } ;
351
352 STRUCT: LVFINDINFO
353     { flags uint }
354     { psz c-string }
355     { lParam long }
356     { pt POINT }
357     { vkDirection uint } ;
358
359 STRUCT: ACCEL
360     { fVirt BYTE }
361     { key WORD }
362     { cmd WORD } ;
363 TYPEDEF: ACCEL* LPACCEL
364
365 TYPEDEF: DWORD COLORREF
366 TYPEDEF: DWORD* LPCOLORREF
367
368 : RGB ( r g b -- COLORREF )
369     { 16 8 0 } bitfield ; inline
370 : >RGB< ( COLORREF -- r g b )
371     [           0xff bitand ]
372     [  -8 shift 0xff bitand ]
373     [ -16 shift 0xff bitand ] tri ;
374
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> ;
379
380 STRUCT: TEXTMETRICW
381     { tmHeight LONG }
382     { tmAscent LONG }
383     { tmDescent LONG }
384     { tmInternalLeading LONG }
385     { tmExternalLeading LONG }
386     { tmAveCharWidth LONG }
387     { tmMaxCharWidth LONG }
388     { tmWeight LONG }
389     { tmOverhang LONG }
390     { tmDigitizedAspectX LONG }
391     { tmDigitizedAspectY LONG }
392     { tmFirstChar WCHAR }
393     { tmLastChar WCHAR }
394     { tmDefaultChar WCHAR }
395     { tmBreakChar WCHAR }
396     { tmItalic BYTE }
397     { tmUnderlined BYTE }
398     { tmStruckOut BYTE }
399     { tmPitchAndFamily BYTE }
400     { tmCharSet BYTE } ;
401
402 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC
403
404 TYPEDEF: ULONG PROPID