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