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