]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/types/types.factor
Merge branch 'master' of git://factorcode.org/git/factor into constraints
[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: long                LONG_PTR
40 TYPEDEF: long*               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         LONG_PTR
59 TYPEDEF: ulong       ULONG_PTR
60
61 TYPEDEF: int         INT32
62 TYPEDEF: uint        UINT32
63 TYPEDEF: uint        DWORD32
64 TYPEDEF: ulong       ULONG32
65 TYPEDEF: ulonglong   ULONG64
66 TYPEDEF: long*       POINTER_32
67 TYPEDEF: longlong*   POINTER_64
68 TYPEDEF: longlong    INT64
69 TYPEDEF: ulonglong   UINT64
70 TYPEDEF: longlong    LONGLONG
71 TYPEDEF: ulonglong   ULONGLONG
72 TYPEDEF: longlong    LONG64
73 TYPEDEF: ulonglong   DWORD64
74 TYPEDEF: longlong    LARGE_INTEGER
75 TYPEDEF: ulonglong   ULARGE_INTEGER
76 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
77 TYPEDEF: ULARGE_INTEGER* PULARGE_INTEGER
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: RECT* LPRECT
205 TYPEDEF: void* PWNDCLASS
206 TYPEDEF: void* PWNDCLASSEX
207 TYPEDEF: void* LPWNDCLASS
208 TYPEDEF: void* LPWNDCLASSEX
209 TYPEDEF: void* MSGBOXPARAMSA
210 TYPEDEF: void* MSGBOXPARAMSW
211 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
212
213 TYPEDEF: size_t socklen_t
214
215 TYPEDEF: void* WNDPROC
216
217 CONSTANT: FALSE 0
218 CONSTANT: TRUE 1
219
220 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
221
222 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
223
224 STRUCT: WNDCLASS
225     { style UINT }
226     { lpfnWndProc WNDPROC }
227     { cbClsExtra int }
228     { cbWndExtra int }
229     { hInstance HINSTANCE }
230     { hIcon HICON }
231     { hCursor HCURSOR }
232     { hbrBackground HBRUSH }
233     { lpszMenuName LPCTSTR }
234     { lpszClassName LPCTSTR } ;
235
236 STRUCT: WNDCLASSEX
237     { cbSize UINT }
238     { style UINT }
239     { lpfnWndProc WNDPROC }
240     { cbClsExtra int }
241     { cbWndExtra int }
242     { hInstance HINSTANCE }
243     { hIcon HICON }
244     { hCursor HCURSOR }
245     { hbrBackground HBRUSH }
246     { lpszMenuName LPCTSTR }
247     { lpszClassName LPCTSTR }
248     { hIconSm HICON } ;
249
250 STRUCT: RECT
251     { left LONG }
252     { top LONG }
253     { right LONG }
254     { bottom LONG } ;
255
256 STRUCT: PAINTSTRUCT
257     { hdc HDC }
258     { fErase BOOL }
259     { rcPaint RECT }
260     { fRestore BOOL }
261     { fIncUpdate BOOL }
262     { rgbReserved BYTE[32] } ;
263
264 STRUCT: BITMAPINFOHEADER
265     { biSize DWORD }
266     { biWidth LONG }
267     { biHeight LONG }
268     { biPlanes WORD }
269     { biBitCount WORD }
270     { biCompression DWORD }
271     { biSizeImage DWORD }
272     { biXPelsPerMeter LONG }
273     { biYPelsPerMeter LONG }
274     { biClrUsed DWORD }
275     { biClrImportant DWORD } ;
276
277 STRUCT: RGBQUAD
278     { rgbBlue BYTE }
279     { rgbGreen BYTE }
280     { rgbRed BYTE }
281     { rgbReserved BYTE } ;
282
283 STRUCT: BITMAPINFO
284     { bmiHeader BITMAPINFOHEADER }
285     { bimColors RGBQUAD[1] } ;
286
287 TYPEDEF: void* LPPAINTSTRUCT
288 TYPEDEF: void* PAINTSTRUCT
289
290 STRUCT: POINT
291     { x LONG }
292     { y LONG } ; 
293
294 STRUCT: SIZE
295     { cx LONG }
296     { cy LONG } ;
297
298 STRUCT: MSG
299     { hWnd HWND }
300     { message UINT }
301     { wParam WPARAM }
302     { lParam LPARAM }
303     { time DWORD }
304     { pt POINT } ;
305
306 TYPEDEF: MSG*                LPMSG
307
308 STRUCT: PIXELFORMATDESCRIPTOR
309     { nSize WORD }
310     { nVersion WORD }
311     { dwFlags DWORD }
312     { iPixelType BYTE }
313     { cColorBits BYTE }
314     { cRedBits BYTE }
315     { cRedShift BYTE }
316     { cGreenBits BYTE }
317     { cGreenShift BYTE }
318     { cBlueBits BYTE }
319     { cBlueShift BYTE }
320     { cAlphaBits BYTE }
321     { cAlphaShift BYTE }
322     { cAccumBits BYTE }
323     { cAccumRedBits BYTE }
324     { cAccumGreenBits BYTE }
325     { cAccumBlueBits BYTE }
326     { cAccumAlphaBits BYTE }
327     { cDepthBits BYTE }
328     { cStencilBits BYTE }
329     { cAuxBuffers BYTE }
330     { iLayerType BYTE }
331     { bReserved BYTE }
332     { dwLayerMask DWORD }
333     { dwVisibleMask DWORD }
334     { dwDamageMask DWORD } ;
335
336 : <RECT> ( loc dim -- RECT )
337     dupd v+ [ first2 ] bi@ RECT <struct-boa> ;
338
339 TYPEDEF: RECT* PRECT
340 TYPEDEF: RECT* LPRECT
341 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
342 TYPEDEF: PFD* LPPFD
343 TYPEDEF: HANDLE HGLRC
344 TYPEDEF: HANDLE HRGN
345
346 STRUCT: LVITEM
347     { mask uint }
348     { iItem int }
349     { iSubItem int }
350     { state uint }
351     { stateMask uint }
352     { pszText void* }
353     { cchTextMax int }
354     { iImage int }
355     { lParam long }
356     { iIndent int }
357     { iGroupId int }
358     { cColumns uint }
359     { puColumns uint* }
360     { piColFmt int* }
361     { iGroup int } ;
362
363 STRUCT: LVFINDINFO
364     { flags uint }
365     { psz char* }
366     { lParam long }
367     { pt POINT }
368     { vkDirection uint } ;
369
370 STRUCT: ACCEL
371     { fVirt BYTE }
372     { key WORD }
373     { cmd WORD } ;
374 TYPEDEF: ACCEL* LPACCEL
375
376 TYPEDEF: DWORD COLORREF
377 TYPEDEF: DWORD* LPCOLORREF
378
379 : RGB ( r g b -- COLORREF )
380     { 16 8 0 } bitfield ; inline
381
382 : color>RGB ( color -- COLORREF )
383     >rgba-components drop [ 255 * >integer ] tri@ RGB ;
384
385 STRUCT: TEXTMETRICW
386     { tmHeight LONG }
387     { tmAscent LONG }
388     { tmDescent LONG }
389     { tmInternalLeading LONG }
390     { tmExternalLeading LONG }
391     { tmAveCharWidth LONG }
392     { tmMaxCharWidth LONG }
393     { tmWeight LONG }
394     { tmOverhang LONG }
395     { tmDigitizedAspectX LONG }
396     { tmDigitizedAspectY LONG }
397     { tmFirstChar WCHAR }
398     { tmLastChar WCHAR }
399     { tmDefaultChar WCHAR }
400     { tmBreakChar WCHAR }
401     { tmItalic BYTE }
402     { tmUnderlined BYTE }
403     { tmStruckOut BYTE }
404     { tmPitchAndFamily BYTE }
405     { tmCharSet BYTE } ;
406
407 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC