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