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