1 /*
2  * Copyright © 2009-2020 Inria.  All rights reserved.
3  * Copyright © 2009-2012 Université Bordeaux
4  * See COPYING in top-level directory.
5  */
6 
7 #ifndef HWLOC_PORT_WINDOWS_WINDOWS_H
8 #define HWLOC_PORT_WINDOWS_WINDOWS_H
9 
10 #include <inttypes.h>
11 
12 #define CALLBACK
13 #define FALSE 0
14 
15 #define DECLARE_HANDLE(n) typedef struct n##__ {int i;} *n
16 DECLARE_HANDLE(HINSTANCE);
17 typedef HINSTANCE HMODULE;
18 typedef int WINBOOL, BOOL;
19 typedef int64_t LONGLONG;
20 typedef uint64_t DWORDLONG;
21 typedef DWORDLONG ULONGLONG, *PULONGLONG;
22 typedef unsigned char BYTE, UCHAR;
23 typedef unsigned short WORD, USHORT;
24 typedef unsigned int UINT, UINT_PTR, DWORD, *PDWORD, *LPDWORD;
25 typedef unsigned long ULONG_PTR, DWORD_PTR, *PDWORD_PTR;
26 typedef long LONG, LONG_PTR;
27 typedef const char *LPCSTR;
28 typedef int (*FARPROC)(void);
29 typedef void *PVOID,*LPVOID;
30 typedef LONG NTSTATUS;
31 typedef char CHAR;
32 typedef CHAR *LPSTR;
33 typedef LPSTR LPTSTR;
34 typedef const void *LPCVOID;
35 typedef ULONG_PTR SIZE_T;
36 typedef LONG_PTR LRESULT;
37 typedef UINT_PTR WPARAM;
38 typedef LONG_PTR LPARAM;
39 typedef void *HGDIOBJ;
40 typedef void *HWND;
41 typedef struct tagMSG {
42   void *dummy;
43 } MSG;
44 typedef struct tagMSG *LPMSG;
45 typedef void VOID;
46 typedef WORD ATOM;
47 typedef char TCHAR;
48 typedef const TCHAR *LPCTSTR;
49 typedef void *HBRUSH;
50 typedef void *HICON;
51 typedef void *HMENU;
52 typedef void *HFONT;
53 typedef void *HPEN;
54 typedef HICON HCURSOR;
55 typedef DWORD COLORREF;
56 typedef LRESULT CALLBACK (*WNDPROC)(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
57 typedef struct tagWNDCLASS {
58   UINT      style;
59   WNDPROC   lpfnWndProc;
60   int       cbClsExtra;
61   int       cbWndExtra;
62   HINSTANCE hInstance;
63   HICON     hIcon;
64   HCURSOR   hCursor;
65   HBRUSH    hbrBackground;
66   LPCTSTR   lpszMenuName;
67   LPCTSTR   lpszClassName;
68 } WNDCLASS;
69 typedef void *HDC;
70 typedef struct tagPAINTSTRUCT {
71   HDC hdc;
72 } PAINTSTRUCT, *LPPAINTSTRUCT;
73 typedef struct _RECT {
74   LONG left;
75   LONG top;
76   LONG right;
77   LONG bottom;
78 } RECT, *LPRECT;
79 typedef void *HRGN;
80 typedef struct tagPOINT {
81   void *dummy;
82 } *LPPOINT;
83 typedef struct _SIZE {
84   unsigned cx;
85   unsigned cy;
86 } SIZE, *LPSIZE;
87 
88 /* This is to cope with linux using integers for hwloc_pid_t and hwloc_thread_t
89 typedef PVOID HANDLE; */
90 typedef int HANDLE;
91 
92 #ifdef __GNUC__
93 #define _ANONYMOUS_UNION __extension__
94 #define _ANONYMOUS_STRUCT __extension__
95 #else
96 #define _ANONYMOUS_UNION
97 #define _ANONYMOUS_STRUCT
98 #endif /* __GNUC__ */
99 #define DUMMYUNIONNAME
100 #define DUMMYSTRUCTNAME
101 #define WINAPI
102 
103 #define ANYSIZE_ARRAY 1
104 
105 #define ERROR_INSUFFICIENT_BUFFER 122L
106 
107 #define MEM_COMMIT	0x1000
108 #define MEM_RESERVE	0x2000
109 #define MEM_RELEASE	0x8000
110 
111 #define PAGE_EXECUTE_READWRITE	0x0040
112 
113 WINAPI HINSTANCE LoadLibrary(LPCSTR);
114 WINAPI HMODULE GetModuleHandle(LPCSTR);
115 WINAPI FARPROC GetProcAddress(HINSTANCE, LPCSTR);
116 WINAPI DWORD GetLastError(void);
117 
118 DWORD_PTR WINAPI SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);
119 BOOL WINAPI SetProcessAffinityMask(HANDLE hProcess, DWORD_PTR dwProcessAffinityMask);
120 BOOL WINAPI GetProcessAffinityMask(HANDLE hProcess, PDWORD_PTR lpProcessAffinityMask, PDWORD_PTR lpSystemAffinityMask);
121 
122 HANDLE WINAPI GetCurrentThread(void);
123 HANDLE WINAPI GetCurrentProcess(void);
124 
125 PVOID WINAPI VirtualAlloc(PVOID,DWORD,DWORD,DWORD);
126 
127 BOOL GetNumaAvailableMemoryNode(UCHAR Node, PULONGLONG AvailableBytes);
128 
129 typedef struct _SYSTEM_INFO {
130   _ANONYMOUS_UNION
131   union {
132     DWORD dwOemId;
133     _ANONYMOUS_STRUCT
134     struct {
135       WORD wProcessorArchitecture;
136       WORD wReserved;
137     } DUMMYSTRUCTNAME;
138   } DUMMYUNIONNAME;
139   DWORD     dwPageSize;
140   LPVOID    lpMinimumApplicationAddress;
141   LPVOID    lpMaximumApplicationAddress;
142   DWORD_PTR dwActiveProcessorMask;
143   DWORD     dwNumberOfProcessors;
144   DWORD     dwProcessorType;
145   DWORD     dwAllocationGranularity;
146   WORD      wProcessorLevel;
147   WORD      wProcessorRevision;
148 } SYSTEM_INFO, *LPSYSTEM_INFO;
149 
150 void WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);
151 
152 HANDLE WINAPI OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);
153 #define PROCESS_SET_INFORMATION 0x0200
154 #define PROCESS_QUERY_INFORMATION 0x0400
155 
156 DWORD WINAPI FormatMessage(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list *Arguments);
157 #define FORMAT_MESSAGE_ALLOCATE_BUFFER 0x00000100
158 #define FORMAT_MESSAGE_FROM_SYSTEM 0x00001000
159 
160 WORD MAKELANGID(USHORT usPrimaryLanguage, USHORT usSubLanguage);
161 #define LANG_NEUTRAL 0x00
162 #define SUBLANG_DEFAULT 0x01
163 
164 HGDIOBJ GetStockObject(int fnObject);
165 BOOL DeleteObject(HGDIOBJ hObject);
166 HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);
167 
168 HWND WINAPI CreateWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
169 BOOL WINAPI ShowWindow(HWND hWnd, int nCmdShow);
170 BOOL InvalidateRect(HWND hWnd, const RECT *lpRect, BOOL bErase);
171 BOOL UpdateWindow(HWND hWnd);
172 BOOL RedrawWindow(HWND hWnd, const RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags);
173 BOOL DestroyWindow(HWND hWnd);
174 COLORREF RGB(BYTE byRed, BYTE byGreen, BYTE byBlue);
175 HBRUSH CreateSolidBrush(COLORREF crColor);
176 COLORREF SetBkColor(HDC hdc, COLORREF crColor);
177 COLORREF SetTextColor(HDC hdc, COLORREF crColor);
178 BOOL Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
179 BOOL MoveToEx(HDC hdc, int X, int Y, LPPOINT lpPoint);
180 BOOL LineTo(HDC hdc, int nXEnd, int nYEnd);
181 HFONT CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwItalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace);
182 #define FW_NORMAL 400
183 #define FW_BOLD 700
184 #define PS_SOLID 0
185 #define PS_DASH 1
186 #define PS_DOT 2
187 #define PS_DASHDOT 3
188 #define PS_DASHDOTDOT 4
189 HPEN CreatePen(int iStyle, int cWidth, COLORREF color);
190 BOOL TextOut(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cchString);
191 BOOL GetTextExtentPoint32(HDC hdc, LPCTSTR lpString, int c, LPSIZE lpSize);
192 #define TRANSPARENT 0
193 int SetBkMode(HDC hdc, int mode);
194 
195 LRESULT DispatchMessage(const MSG *lpmsg);
196 BOOL TranslateMessage(const MSG *lpMsg);
197 BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax);
198 VOID WINAPI PostQuitMessage(int nExitCode);
199 
200 typedef struct _OSVERSIONINFOEX {
201   DWORD dwOSVersionInfoSize;
202   DWORD dwMajorVersion;
203   DWORD dwMinorVersion;
204   DWORD dwBuildNumber;
205   DWORD dwPlatformId;
206   CHAR  szCSDVersion[128];
207   WORD  wServicePackMajor;
208   WORD  wServicePackMinor;
209   WORD  wSuiteMask;
210   BYTE  wProductType;
211   BYTE  wReserved;
212 } OSVERSIONINFOEX;
213 typedef OSVERSIONINFOEX* LPOSVERSIONINFO;
214 BOOL GetVersionEx(LPOSVERSIONINFO lpVersionInformation);
215 void ZeroMemory(PVOID  Destination, SIZE_T Length);
216 
217 BOOL GetComputerName(LPSTR lpBuffer, LPDWORD nSize);
218 
219 #define WM_DESTROY 2
220 #define WM_SIZE 5
221 #define WM_PAINT 15
222 #define WM_KEYDOWN 256
223 #define WM_KEYUP 257
224 #define WM_CHAR 258
225 #define WM_MOUSEMOVE 512
226 #define WM_LBUTTONDOWN 513
227 #define WM_LBUTTONUP 514
228 
229 #define MK_LBUTTON 1
230 
231 #define VK_ESCAPE 0x1B
232 #define VK_CONTROL 17
233 #define VK_PRIOR 33
234 #define VK_NEXT 34
235 #define VK_END 35
236 #define VK_HOME 36
237 #define VK_LEFT	37
238 #define VK_UP 38
239 #define VK_RIGHT 39
240 #define VK_DOWN 40
241 #define VK_F5 0x74
242 
243 #define RDW_INVALIDATE 1
244 
245 #define SM_CYCAPTION 4
246 #define SM_CXFULLSCREEN 16
247 #define SM_CYFULLSCREEN 17
248 #define SM_CXSIZEFRAME 32
249 #define SM_CYSIZEFRAME 33
250 
251 #define CW_USEDEFAULT	0x80000000
252 
253 #define SW_SHOWDEFAULT 10
254 
255 #define WS_OVERLAPPEDWINDOW	0xcf0000
256 
257 #define MAKEINTRESOURCE(x) (LPCTSTR)(x)
258 #define IDC_SIZEALL MAKEINTRESOURCE(32646)
259 #define IDI_APPLICATION MAKEINTRESOURCE(32512)
260 
261 #define DEFAULT_CHARSET 43
262 #define DEFAULT_QUALITY 43
263 #define DEFAULT_PITCH 43
264 #define OUT_DEFAULT_PRECIS 43
265 #define CLIP_DEFAULT_PRECIS 43
266 
267 HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint);
268 BOOL EndPaint(HWND hWnd, const PAINTSTRUCT *lpPaint);
269 
270 int GET_X_LPARAM(LPARAM lParam);
271 int GET_Y_LPARAM(LPARAM lParam);
272 
273 WORD LOWORD(DWORD dwValue);
274 WORD HIWORD(DWORD dwValue);
275 
276 LRESULT WINAPI DefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
277 
278 BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags);
279 #define SWP_NOMOVE 0x0002
280 #define SWP_NOZORDER 0x0004
281 #define SWP_NOCOPYBITS 0x0100
282 #define SWP_NOOWNERZORDER 0x0200
283 #define SWP_DEFERERASE 0x2000
284 
285 #define HWND_TOP (HWND)0
286 
287 BOOL AdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu);
288 
289 #define WHITE_BRUSH 26
290 
291 HCURSOR WINAPI LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName);
292 HICON WINAPI LoadIcon(HINSTANCE hInstance, LPCTSTR lpIconName);
293 
294 int WINAPI GetSystemMetrics(int nIndex);
295 
296 ATOM WINAPI RegisterClass(const WNDCLASS *lpWndClass);
297 
298 /* hide Linux' host disabling _SC_LARGE_PAGESIZE */
299 #undef HAVE_DECL__SC_LARGE_PAGESIZE
300 #define HAVE_DECL__SC_LARGE_PAGESIZE 1
301 #undef _SC_LARGE_PAGESIZE
302 #define _SC_LARGE_PAGESIZE 33
303 
304 #endif /* HWLOC_PORT_WINDOWS_WINDOWS_H */
305