]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/types/types.factor
scryfall: parse mtga deck format
[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.c-types alien.syntax classes.struct colors
4 io.encodings.utf16 io.encodings.utf8 kernel math math.bitwise
5 math.functions math.vectors sequences ;
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
15 TYPEDEF: wchar_t             WCHAR
16
17 TYPEDEF: short               SHORT
18 TYPEDEF: ushort              USHORT
19 TYPEDEF: short               INT16
20 TYPEDEF: ushort              UINT16
21
22 TYPEDEF: ushort              WORD
23 TYPEDEF: ulong               DWORD
24
25 TYPEDEF: int                 INT
26 TYPEDEF: uint                UINT
27
28 TYPEDEF: int                 BOOL
29
30 TYPEDEF: int*                PINT
31 TYPEDEF: int*                LPINT
32 TYPEDEF: int                 HFILE
33
34 TYPEDEF: long                LONG
35 TYPEDEF: long*               LPLONG
36 TYPEDEF: intptr_t            LONG_PTR
37
38 TYPEDEF: uint                ULONG
39 TYPEDEF: uintptr_t           ULONG_PTR
40
41 TYPEDEF: void                VOID
42 TYPEDEF: void*               PVOID
43 TYPEDEF: void*               LPVOID
44 TYPEDEF: void*               LPCVOID
45
46 TYPEDEF: float               FLOAT
47
48 TYPEDEF: intptr_t    HALF_PTR
49 TYPEDEF: intptr_t    UHALF_PTR
50 TYPEDEF: intptr_t    INT_PTR
51 TYPEDEF: intptr_t    UINT_PTR
52
53 TYPEDEF: int         INT32
54 TYPEDEF: uint        UINT32
55 TYPEDEF: uint        DWORD32
56 TYPEDEF: long        LONG32
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 TYPEDEF: size_t SIZE_T
72 TYPEDEF: ptrdiff_t SSIZE_T
73
74 TYPEDEF: { c-string utf16n } LPCSTR
75 TYPEDEF: { c-string utf16n } LPTCSTR
76
77 TYPEDEF: { c-string utf16n } 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: ULONGLONG           DWORDLONG
86 TYPEDEF: ULONG_PTR           DWORD_PTR
87 TYPEDEF: PVOID               HANDLE
88 TYPEDEF: HANDLE              HACCEL
89 TYPEDEF: HANDLE              HBITMAP
90 TYPEDEF: HANDLE              HBRUSH
91 TYPEDEF: HANDLE              HCOLORSPACE
92 TYPEDEF: HANDLE              HCONV
93 TYPEDEF: HANDLE              HCONVLIST
94 TYPEDEF: HANDLE              HICON
95 TYPEDEF: HICON               HCURSOR
96 TYPEDEF: HANDLE              HDC
97 TYPEDEF: HANDLE              HDDEDATA
98 TYPEDEF: HANDLE              HDESK
99 TYPEDEF: HANDLE              HDROP
100 TYPEDEF: HANDLE              HDWP
101 TYPEDEF: HANDLE              HENHMETAFILE
102 TYPEDEF: HANDLE              HFONT
103 TYPEDEF: HANDLE              HGDIOBJ
104 TYPEDEF: HANDLE              HGLOBAL
105 TYPEDEF: HANDLE              HHOOK
106 TYPEDEF: HANDLE              HINSTANCE
107 TYPEDEF: DWORD               HKEY
108 TYPEDEF: HANDLE              HKL
109 TYPEDEF: HANDLE              HLOCAL
110 TYPEDEF: HANDLE              HMENU
111 TYPEDEF: HANDLE              HMETAFILE
112 TYPEDEF: HANDLE              HMETAFILEPICT
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
133 TYPEDEF: { c-string utf16n } LPCWSTR
134 ! TYPEDEF: WCHAR*              LPWSTR
135
136 TYPEDEF: { c-string utf8 } LPSTR
137 TYPEDEF: { c-string utf16n } LPCTSTR
138 TYPEDEF: { c-string utf16n } LPWTSTR
139 TYPEDEF: { c-string utf16n } 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: { c-string utf16n } 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: { c-string utf16n } PWCHAR
190 TYPEDEF: WORD*               PWORD
191 TYPEDEF: { c-string utf16n } 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 TYPEDEF: DWORD               ACCESS_MASK
198 TYPEDEF: ACCESS_MASK*        PACCESS_MASK
199
200 TYPEDEF: size_t socklen_t
201
202 TYPEDEF: void* WNDPROC
203
204 CONSTANT: FALSE 0
205 CONSTANT: TRUE 1
206
207 : >BOOLEAN ( ? -- 1/0 ) TRUE FALSE ? ; inline
208
209 ! typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
210
211 STRUCT: WNDCLASS
212     { style UINT }
213     { lpfnWndProc WNDPROC }
214     { cbClsExtra int }
215     { cbWndExtra int }
216     { hInstance HINSTANCE }
217     { hIcon HICON }
218     { hCursor HCURSOR }
219     { hbrBackground HBRUSH }
220     { lpszMenuName LPCTSTR }
221     { lpszClassName LPCTSTR } ;
222
223 STRUCT: WNDCLASSEX
224     { cbSize UINT }
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     { hIconSm HICON } ;
236
237 STRUCT: RECT
238     { left LONG }
239     { top LONG }
240     { right LONG }
241     { bottom LONG } ;
242
243 STRUCT: PAINTSTRUCT
244     { hdc HDC }
245     { fErase BOOL }
246     { rcPaint RECT }
247     { fRestore BOOL }
248     { fIncUpdate BOOL }
249     { rgbReserved BYTE[32] } ;
250
251 STRUCT: BITMAPINFOHEADER
252     { biSize DWORD }
253     { biWidth LONG }
254     { biHeight LONG }
255     { biPlanes WORD }
256     { biBitCount WORD }
257     { biCompression DWORD }
258     { biSizeImage DWORD }
259     { biXPelsPerMeter LONG }
260     { biYPelsPerMeter LONG }
261     { biClrUsed DWORD }
262     { biClrImportant DWORD } ;
263
264 STRUCT: RGBQUAD
265     { rgbBlue BYTE }
266     { rgbGreen BYTE }
267     { rgbRed BYTE }
268     { rgbReserved BYTE } ;
269
270 STRUCT: BITMAPINFO
271     { bmiHeader BITMAPINFOHEADER }
272     { bimColors RGBQUAD[1] } ;
273
274 TYPEDEF: void* LPPAINTSTRUCT
275 TYPEDEF: void* PAINTSTRUCT
276
277 STRUCT: POINT
278     { x LONG }
279     { y LONG } ;
280 TYPEDEF: POINT* LPPOINT
281
282 STRUCT: SIZE
283     { cx LONG }
284     { cy LONG } ;
285
286 STRUCT: MSG
287     { hWnd HWND }
288     { message UINT }
289     { wParam WPARAM }
290     { lParam LPARAM }
291     { time DWORD }
292     { pt POINT } ;
293
294 TYPEDEF: MSG*                LPMSG
295
296 STRUCT: PIXELFORMATDESCRIPTOR
297     { nSize WORD }
298     { nVersion WORD }
299     { dwFlags DWORD }
300     { iPixelType BYTE }
301     { cColorBits BYTE }
302     { cRedBits BYTE }
303     { cRedShift BYTE }
304     { cGreenBits BYTE }
305     { cGreenShift BYTE }
306     { cBlueBits BYTE }
307     { cBlueShift BYTE }
308     { cAlphaBits BYTE }
309     { cAlphaShift BYTE }
310     { cAccumBits BYTE }
311     { cAccumRedBits BYTE }
312     { cAccumGreenBits BYTE }
313     { cAccumBlueBits BYTE }
314     { cAccumAlphaBits BYTE }
315     { cDepthBits BYTE }
316     { cStencilBits BYTE }
317     { cAuxBuffers BYTE }
318     { iLayerType BYTE }
319     { bReserved BYTE }
320     { dwLayerMask DWORD }
321     { dwVisibleMask DWORD }
322     { dwDamageMask DWORD } ;
323
324 : <RECT> ( loc dim -- RECT )
325     dupd v+ [ first2 ] bi@ RECT boa ;
326
327 TYPEDEF: RECT* PRECT
328 TYPEDEF: RECT* LPRECT
329 TYPEDEF: PIXELFORMATDESCRIPTOR PFD
330 TYPEDEF: PFD* LPPFD
331 TYPEDEF: HANDLE HGLRC
332
333 TYPEDEF: void* PWNDCLASS
334 TYPEDEF: void* PWNDCLASSEX
335 TYPEDEF: void* LPWNDCLASS
336 TYPEDEF: void* LPWNDCLASSEX
337 TYPEDEF: void* MSGBOXPARAMSA
338 TYPEDEF: void* MSGBOXPARAMSW
339 TYPEDEF: void* LPOVERLAPPED_COMPLETION_ROUTINE
340
341 STRUCT: LVITEM
342     { mask uint }
343     { iItem int }
344     { iSubItem int }
345     { state uint }
346     { stateMask uint }
347     { pszText void* }
348     { cchTextMax int }
349     { iImage int }
350     { lParam long }
351     { iIndent int }
352     { iGroupId int }
353     { cColumns uint }
354     { puColumns uint* }
355     { piColFmt int* }
356     { iGroup int } ;
357
358 STRUCT: LVFINDINFO
359     { flags uint }
360     { psz c-string }
361     { lParam long }
362     { pt POINT }
363     { vkDirection uint } ;
364
365 STRUCT: ACCEL
366     { fVirt BYTE }
367     { key WORD }
368     { cmd WORD } ;
369 TYPEDEF: ACCEL* LPACCEL
370
371 TYPEDEF: DWORD COLORREF
372 TYPEDEF: DWORD* LPCOLORREF
373
374 : RGB ( r g b -- COLORREF )
375     { 16 8 0 } bitfield ; inline
376 : >RGB< ( COLORREF -- r g b )
377     [           0xff bitand ]
378     [  -8 shift 0xff bitand ]
379     [ -16 shift 0xff bitand ] tri ;
380
381 : color>RGB ( color -- COLORREF )
382     >rgba-components drop [ 255 round * >integer ] tri@ RGB ;
383 : RGB>color ( COLORREF -- color )
384     >RGB< [ 255 /f ] tri@ 1.0 <rgba> ;
385
386 STRUCT: TEXTMETRICW
387     { tmHeight LONG }
388     { tmAscent LONG }
389     { tmDescent LONG }
390     { tmInternalLeading LONG }
391     { tmExternalLeading LONG }
392     { tmAveCharWidth LONG }
393     { tmMaxCharWidth LONG }
394     { tmWeight LONG }
395     { tmOverhang LONG }
396     { tmDigitizedAspectX LONG }
397     { tmDigitizedAspectY LONG }
398     { tmFirstChar WCHAR }
399     { tmLastChar WCHAR }
400     { tmDefaultChar WCHAR }
401     { tmBreakChar WCHAR }
402     { tmItalic BYTE }
403     { tmUnderlined BYTE }
404     { tmStruckOut BYTE }
405     { tmPitchAndFamily BYTE }
406     { tmCharSet BYTE } ;
407
408 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC
409
410 TYPEDEF: ULONG PROPID
411
412 CALLBACK: BOOL WNDENUMPROC ( HWND hWnd, LPARAM lParam )
413 CALLBACK: LRESULT HOOKPROC ( int nCode, WPARAM wParam, LPARAM lParam )