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