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