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