static int Win32_GetSystemTime(Jim_Interp *interp, int objc, Jim_Obj * const *objv) { Jim_Obj *a[16]; size_t n = 0; SYSTEMTIME t; GetSystemTime(&t); #define JIMADD(name) \ a[n++] = Jim_NewStringObj(interp, #name, -1); \ a[n++] = Jim_NewIntObj(interp, t.w ## name ) JIMADD(Year); JIMADD(Month); JIMADD(DayOfWeek); JIMADD(Day); JIMADD(Hour); JIMADD(Minute); JIMADD(Second); JIMADD(Milliseconds); #undef JIMADD Jim_SetResult(interp, Jim_NewListObj(interp, a, n)); return JIM_OK; }
static int Win32_GetSystemInfo(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { Jim_Obj *a[20]; SYSTEM_INFO si; int n = 0; struct pa_map { int arch; const char *name; }; struct pa_map *p, map[] = { { PROCESSOR_ARCHITECTURE_INTEL, "intel" }, { PROCESSOR_ARCHITECTURE_MIPS, "mips" }, { PROCESSOR_ARCHITECTURE_ALPHA, "alpha" }, { PROCESSOR_ARCHITECTURE_PPC, "ppc" }, { PROCESSOR_ARCHITECTURE_SHX, "shx" }, { PROCESSOR_ARCHITECTURE_ARM, "arm" }, { PROCESSOR_ARCHITECTURE_IA64, "ia64" }, { PROCESSOR_ARCHITECTURE_ALPHA64,"alpha64" }, { PROCESSOR_ARCHITECTURE_MSIL, "msil" }, { PROCESSOR_ARCHITECTURE_AMD64, "amd64"}, { PROCESSOR_ARCHITECTURE_IA32_ON_WIN64, "ia32onwin64" }, { PROCESSOR_ARCHITECTURE_UNKNOWN,"unknown" } }; JIM_NOTUSED(objc); JIM_NOTUSED(objv); GetSystemInfo(&si); a[n++] = Jim_NewStringObj(interp, "ProcessorArchitecture", -1); for (p = map; p->arch != PROCESSOR_ARCHITECTURE_UNKNOWN; ++p) { if (p->arch == si.wProcessorArchitecture) { break; } } a[n++] = Jim_NewStringObj(interp, p->name, -1); #define JIMADD(name,element) \ a[n++] = Jim_NewStringObj(interp, #name, -1); \ a[n++] = Jim_NewIntObj(interp, (jim_wide)si. ## element ) JIMADD(PageSize, dwPageSize); JIMADD(MinimumApplicationAddress, lpMinimumApplicationAddress); JIMADD(MaximumApplicationAddress, lpMaximumApplicationAddress); JIMADD(ActiveProcessorMask, dwActiveProcessorMask); JIMADD(NumberOfProcessors, dwNumberOfProcessors); JIMADD(ProcessorType, dwProcessorType); JIMADD(AllocationGranularity, dwAllocationGranularity); JIMADD(ProcessorLevel, wProcessorLevel); JIMADD(ProcessorRevision, wProcessorRevision); #undef JIMADD Jim_SetResult(interp, Jim_NewListObj(interp, a, n)); return JIM_OK; }
// FIX ME: win2k+ so should do version checks really. static int Win32_GetPerformanceInfo(Jim_Interp *interp, int objc, Jim_Obj * const *objv) { Jim_Obj *a[26]; size_t n = 0; PERFORMANCE_INFORMATION pi; if (!GetPerformanceInfo(&pi, sizeof(pi))) { Jim_SetResult(interp, Win32ErrorObj(interp, "GetPerformanceInfo", GetLastError())); return JIM_ERR; } #define JIMADD(name) \ a[n++] = Jim_NewStringObj(interp, #name, -1); \ a[n++] = Jim_NewIntObj(interp, pi. name ) JIMADD(CommitTotal); JIMADD(CommitLimit); JIMADD(CommitPeak); JIMADD(PhysicalTotal); JIMADD(PhysicalAvailable); JIMADD(SystemCache); JIMADD(KernelTotal); JIMADD(KernelPaged); JIMADD(KernelNonpaged); JIMADD(PageSize); JIMADD(HandleCount); JIMADD(ProcessCount); JIMADD(ThreadCount); #undef JIMADD Jim_SetResult(interp, Jim_NewListObj(interp, a, n)); return JIM_OK; }
static int Win32_GetPerformanceInfo(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { Jim_Obj *a[26]; size_t n = 0; PERFORMANCE_INFORMATION pi; LPFNGETPERFORMANCEINFO lpfnGetPerformanceInfo = NULL; HMODULE hLib = (HMODULE)Jim_CmdPrivData(interp); JIM_NOTUSED(objc); JIM_NOTUSED(objv); if (hLib != NULL) lpfnGetPerformanceInfo = (LPFNGETPERFORMANCEINFO)GetProcAddress(hLib, "GetPerformanceInfo"); if (lpfnGetPerformanceInfo == NULL) { /* should never happen */ Jim_SetResultString(interp, "argh!", -1); return JIM_ERR; } pi.cb = sizeof(pi); if (!lpfnGetPerformanceInfo(&pi, sizeof(pi))) { Jim_SetResult(interp, Win32ErrorObj(interp, "GetPerformanceInfo", GetLastError())); return JIM_ERR; } #define JIMADD(name) \ a[n++] = Jim_NewStringObj(interp, #name, -1); \ a[n++] = Jim_NewIntObj(interp, pi.name ) JIMADD(CommitTotal); JIMADD(CommitLimit); JIMADD(CommitPeak); JIMADD(PhysicalTotal); JIMADD(PhysicalAvailable); JIMADD(SystemCache); JIMADD(KernelTotal); JIMADD(KernelPaged); JIMADD(KernelNonpaged); JIMADD(PageSize); JIMADD(HandleCount); JIMADD(ProcessCount); JIMADD(ThreadCount); #undef JIMADD Jim_SetResult(interp, Jim_NewListObj(interp, a, n)); return JIM_OK; }