xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/windows/windef.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC core/sys/windows/_windef.d)
9  */
10 module core.sys.windows.windef;
11 version (Windows):
12 @system:
13 
14 public import core.sys.windows.winnt;
15 import core.sys.windows.w32api;
16 
17 enum size_t MAX_PATH = 260;
18 
19 pure nothrow @nogc {
MAKEWORD(ubyte a,ubyte b)20     ushort MAKEWORD(ubyte a, ubyte b) {
21         return cast(ushort) ((b << 8) | a);
22     }
23 
MAKEWORD(ushort a,ushort b)24     ushort MAKEWORD(ushort a, ushort b) {
25         assert((a & 0xFF00) == 0);
26         assert((b & 0xFF00) == 0);
27         return MAKEWORD(cast(ubyte)a, cast(ubyte)b);
28     }
29 
MAKELONG(ushort a,ushort b)30     uint MAKELONG(ushort a, ushort b) {
31         return cast(uint) ((b << 16) | a);
32     }
33 
MAKELONG(uint a,uint b)34     uint MAKELONG(uint a, uint b) {
35         assert((a & 0xFFFF0000) == 0);
36         assert((b & 0xFFFF0000) == 0);
37         return MAKELONG(cast(ushort)a, cast(ushort)b);
38     }
39 
LOWORD(ulong l)40     ushort LOWORD(ulong l) {
41         return cast(ushort) l;
42     }
43 
HIWORD(ulong l)44     ushort HIWORD(ulong l) {
45         return cast(ushort) (l >>> 16);
46     }
47 
LOBYTE(ushort w)48     ubyte LOBYTE(ushort w) {
49         return cast(ubyte) w;
50     }
51 
HIBYTE(ushort w)52     ubyte HIBYTE(ushort w) {
53         return cast(ubyte) (w >>> 8);
54     }
55 }
56 
57 enum NULL = null;
58 static assert (is(typeof({
59     void test(int* p) {}
60     test(NULL);
61 })));
62 
63 alias ubyte        BYTE;
64 alias ubyte*       PBYTE, LPBYTE;
65 alias ushort       USHORT, WORD, ATOM;
66 alias ushort*      PUSHORT, PWORD, LPWORD;
67 alias uint         ULONG, DWORD, UINT, COLORREF;
68 alias uint*        PULONG, PDWORD, LPDWORD, PUINT, LPUINT, LPCOLORREF;
69 alias int          WINBOOL, BOOL, INT, LONG, HFILE, HRESULT;
70 alias int*         PWINBOOL, LPWINBOOL, PBOOL, LPBOOL, PINT, LPINT, LPLONG;
71 alias float        FLOAT;
72 alias float*       PFLOAT;
73 alias const(void)* PCVOID, LPCVOID;
74 
75 alias UINT_PTR WPARAM;
76 alias LONG_PTR LPARAM, LRESULT;
77 
78 mixin DECLARE_HANDLE!("HHOOK");
79 mixin DECLARE_HANDLE!("HGLOBAL");
80 mixin DECLARE_HANDLE!("HLOCAL");
81 mixin DECLARE_HANDLE!("GLOBALHANDLE");
82 mixin DECLARE_HANDLE!("LOCALHANDLE");
83 mixin DECLARE_HANDLE!("HGDIOBJ");
84 mixin DECLARE_HANDLE!("HACCEL");
85 mixin DECLARE_HANDLE!("HBITMAP", HGDIOBJ);
86 mixin DECLARE_HANDLE!("HBRUSH", HGDIOBJ);
87 mixin DECLARE_HANDLE!("HCOLORSPACE");
88 mixin DECLARE_HANDLE!("HDC");
89 mixin DECLARE_HANDLE!("HGLRC");
90 mixin DECLARE_HANDLE!("HDESK");
91 mixin DECLARE_HANDLE!("HENHMETAFILE");
92 mixin DECLARE_HANDLE!("HFONT", HGDIOBJ);
93 mixin DECLARE_HANDLE!("HICON");
94 mixin DECLARE_HANDLE!("HINSTANCE");
95 mixin DECLARE_HANDLE!("HKEY");
96 mixin DECLARE_HANDLE!("HMENU");
97 mixin DECLARE_HANDLE!("HMETAFILE");
98 mixin DECLARE_HANDLE!("HMODULE");
99 mixin DECLARE_HANDLE!("HMONITOR");
100 mixin DECLARE_HANDLE!("HPALETTE");
101 mixin DECLARE_HANDLE!("HPEN", HGDIOBJ);
102 mixin DECLARE_HANDLE!("HRGN", HGDIOBJ);
103 mixin DECLARE_HANDLE!("HRSRC");
104 mixin DECLARE_HANDLE!("HSTR");
105 mixin DECLARE_HANDLE!("HTASK");
106 mixin DECLARE_HANDLE!("HWND");
107 mixin DECLARE_HANDLE!("HWINSTA");
108 mixin DECLARE_HANDLE!("HKL");
109 mixin DECLARE_HANDLE!("HCURSOR");
110 alias HKEY* PHKEY;
111 
112 static if (_WIN32_WINNT >= 0x500) {
113     mixin DECLARE_HANDLE!("HTERMINAL");
114     mixin DECLARE_HANDLE!("HWINEVENTHOOK");
115 }
116 
117 alias extern (Windows) INT_PTR function() nothrow FARPROC, NEARPROC, PROC;
118 
119 struct RECT {
120     LONG left;
121     LONG top;
122     LONG right;
123     LONG bottom;
124 }
125 alias RECT RECTL;
126 alias RECT*        PRECT, NPRECT, LPRECT, PRECTL, LPRECTL;
127 alias const(RECT)* LPCRECT, LPCRECTL;
128 
129 struct POINT {
130     LONG x;
131     LONG y;
132 }
133 alias POINT POINTL;
134 alias POINT* PPOINT, NPPOINT, LPPOINT, PPOINTL, LPPOINTL;
135 
136 struct SIZE {
137     LONG cx;
138     LONG cy;
139 }
140 alias SIZE SIZEL;
141 alias SIZE* PSIZE, LPSIZE, PSIZEL, LPSIZEL;
142 
143 struct POINTS {
144     SHORT x;
145     SHORT y;
146 }
147 alias POINTS* PPOINTS, LPPOINTS;
148 
149 enum : BOOL {
150     FALSE = 0,
151     TRUE  = 1
152 }
153