--- /dev/null
+#include "muscle.h"\r
+\r
+#if WIN32\r
+#include <windows.h>\r
+#include <crtdbg.h>\r
+#include <psapi.h>\r
+#include <float.h>\r
+#include <stdio.h>\r
+\r
+void DebugPrintf(const char *szFormat, ...)\r
+ {\r
+ va_list ArgList;\r
+ char szStr[4096];\r
+\r
+ va_start(ArgList, szFormat);\r
+ vsprintf(szStr, szFormat, ArgList);\r
+\r
+ OutputDebugString(szStr);\r
+ }\r
+\r
+double GetNAN()\r
+ {\r
+ static unsigned long nan[2]={0xffffffff, 0x7fffffff};\r
+ double dNAN = *( double* )nan;\r
+ assert(_isnan(dNAN));\r
+ return dNAN;\r
+ }\r
+\r
+double g_dNAN = GetNAN();\r
+\r
+void chkmem(const char szMsg[])\r
+ {\r
+ if (!_CrtCheckMemory())\r
+ Quit("chkmem(%s)", szMsg);\r
+ }\r
+\r
+void Break()\r
+ {\r
+ if (IsDebuggerPresent())\r
+ DebugBreak();\r
+ }\r
+\r
+const char *GetCmdLine()\r
+ {\r
+ return GetCommandLine();\r
+ }\r
+\r
+static unsigned uPeakMemUseBytes;\r
+\r
+double GetRAMSizeMB()\r
+ {\r
+ MEMORYSTATUS MS;\r
+ GlobalMemoryStatus(&MS);\r
+ return MS.dwAvailPhys/1e6;\r
+ }\r
+\r
+double GetMemUseMB()\r
+ {\r
+ HANDLE hProc = GetCurrentProcess();\r
+ PROCESS_MEMORY_COUNTERS PMC;\r
+ BOOL bOk = GetProcessMemoryInfo(hProc, &PMC, sizeof(PMC));\r
+ assert(bOk);\r
+ //printf("GetMemUseMB()\n");\r
+ //printf("%12u PageFaultCount\n", (unsigned) PMC.PageFaultCount);\r
+ //printf("%12u PagefileUsage\n", (unsigned) PMC.PagefileUsage);\r
+ //printf("%12u PeakPagefileUsage\n", (unsigned) PMC.PeakPagefileUsage);\r
+ //printf("%12u WorkingSetSize\n", (unsigned) PMC.WorkingSetSize);\r
+ //printf("%12u PeakWorkingSetSize\n", (unsigned) PMC.PeakWorkingSetSize);\r
+ //printf("%12u QuotaPagedPoolUsage\n", (unsigned) PMC.QuotaPagedPoolUsage);\r
+ //printf("%12u QuotaPeakPagedPoolUsage\n", (unsigned) PMC.QuotaPeakPagedPoolUsage);\r
+ //printf("%12u QuotaNonPagedPoolUsage\n", (unsigned) PMC.QuotaNonPagedPoolUsage);\r
+ //printf("%12u QuotaPeakNonPagedPoolUsage\n", (unsigned) PMC.QuotaPeakNonPagedPoolUsage);\r
+ unsigned uBytes = (unsigned) PMC.WorkingSetSize;\r
+ if (uBytes > uPeakMemUseBytes)\r
+ uPeakMemUseBytes = uBytes;\r
+ return (uBytes + 500000.0)/1000000.0;\r
+ }\r
+\r
+double GetPeakMemUseMB()\r
+ {\r
+ return (uPeakMemUseBytes + 500000.0)/1000000.0;\r
+ }\r
+\r
+void CheckMemUse()\r
+ {\r
+// Side-effect: sets peak usage in uPeakMemUseBytes\r
+ GetMemUseMB();\r
+ }\r
+\r
+double GetCPUGHz()\r
+ {\r
+ double dGHz = 2.5;\r
+ const char *e = getenv("CPUGHZ");\r
+ if (0 != e)\r
+ dGHz = atof(e);\r
+ if (dGHz < 0.1 || dGHz > 1000.0)\r
+ Quit("Invalid value '%s' for environment variable CPUGHZ", e);\r
+ return dGHz;\r
+ }\r
+#endif // WIN32\r