+/* See if we were launched from a console window. */\r
+static void check_console() {\r
+ /* If we're running in a service context there will be no console window. */\r
+ HWND console = GetConsoleWindow();\r
+ if (! console) return;\r
+\r
+ unsigned long pid;\r
+ if (! GetWindowThreadProcessId(console, &pid)) return;\r
+\r
+ /*\r
+ If the process associated with the console window handle is the same as\r
+ this process, we were not launched from an existing console. The user\r
+ probably double-clicked our executable.\r
+ */\r
+ if (GetCurrentProcessId() != pid) return;\r
+\r
+ /* We close our new console so that subsequent messages appear in a popup. */\r
+ FreeConsole();\r
+}\r
+\r
+int num_cpus() {\r
+ DWORD_PTR i, affinity, system_affinity;\r
+ if (! GetProcessAffinityMask(GetCurrentProcess(), &affinity, &system_affinity)) return 64;\r
+ for (i = 0; system_affinity & (1LL << i); i++);\r
+ return (int) i;\r
+}\r
+\r
+int _tmain(int argc, TCHAR **argv) {\r
+ check_console();\r
+\r
+#ifdef UNICODE\r
+ /*\r
+ Ensure we write in UTF-16 mode, so that non-ASCII characters don't get\r
+ mangled. If we were compiled in ANSI mode it won't work.\r
+ */\r
+ _setmode(_fileno(stdout), _O_U16TEXT);\r
+ _setmode(_fileno(stderr), _O_U16TEXT);\r
+#endif\r
+\r