ccReturn ccSysinfoInitialize(void) { SYSTEM_INFO sysinfo; MEMORYSTATUSEX memstat; memstat.dwLength = sizeof(MEMORYSTATUSEX); GlobalMemoryStatusEx(&memstat); ccAssert(_ccSysinfo == NULL); ccMalloc(_ccSysinfo, sizeof(ccSysinfo)); if(GetPhysicallyInstalledSystemMemory(&_ccSysinfo->ramTotal) == FALSE) goto fail; _ccSysinfo->ramTotal <<= 10; GetSystemInfo(&sysinfo); _ccSysinfo->processorCount = sysinfo.dwNumberOfProcessors; _ccSysinfo->fileMaxOpen = _getmaxstdio(); return CC_SUCCESS; fail: free(_ccSysinfo); return CC_FAIL; }
ccReturn ccSysinfoInitialize(void) { long value; ccAssert(_ccSysinfo == NULL); ccMalloc(_ccSysinfo, sizeof(ccSysinfo)); value = getKBValueFromProc("/proc/meminfo", "MemTotal"); if(value == -1){ return CC_FAIL; } _ccSysinfo->ramTotal = ((uint_fast64_t)value) * 1000; _ccSysinfo->processorCount = sysconf(_SC_NPROCESSORS_CONF); _ccSysinfo->fileMaxOpen = sysconf(_SC_OPEN_MAX); return CC_SUCCESS; }
ccReturn ccDisplayInitialize(void) { DISPLAY_DEVICE device; DISPLAY_DEVICE display; DEVMODE dm; ccDisplay *currentDisplay; ccDisplayData buffer; ccDisplayData initialBuffer; int deviceCount = 0; int displayCount; int i; ccAssert(_ccDisplays == NULL); ccMalloc(_ccDisplays, sizeof(ccDisplays)); _ccDisplays->display = NULL; dm.dmSize = sizeof(dm); device.cb = sizeof(DISPLAY_DEVICE); display.cb = sizeof(DISPLAY_DEVICE); _ccDisplays->amount = 0; while(EnumDisplayDevices(NULL, deviceCount, &device, 0)) { displayCount = 0; while(EnumDisplayDevices(device.DeviceName, displayCount, &display, 0)) { _ccDisplays->amount++; ccRealloc(_ccDisplays->display, sizeof(ccDisplay)*_ccDisplays->amount); if(EnumDisplaySettings(device.DeviceName, ENUM_CURRENT_SETTINGS, &dm) == 0) { ccErrorPush(CC_ERROR_DISPLAY_NONE); return CC_FAIL; } currentDisplay = &_ccDisplays->display[_ccDisplays->amount - 1]; ccMalloc(currentDisplay->gpuName, CC_MAXDEVICESTRINGSIZE); ccMalloc(currentDisplay->monitorName, CC_MAXDEVICESTRINGSIZE); ccMalloc(currentDisplay->deviceName, CC_MAXDEVICENAMESIZE); memcpy(currentDisplay->gpuName, device.DeviceString, CC_MAXDEVICESTRINGSIZE); memcpy(currentDisplay->monitorName, display.DeviceString, CC_MAXDEVICESTRINGSIZE); memcpy(currentDisplay->deviceName, display.DeviceName, CC_MAXDEVICENAMESIZE); ccStringTrimToChar(currentDisplay->deviceName, '\\', false); currentDisplay->x = dm.dmPosition.x; currentDisplay->y = dm.dmPosition.y; currentDisplay->amount = 0; currentDisplay->resolution = NULL; initialBuffer.bitDepth = dm.dmBitsPerPel; initialBuffer.refreshRate = dm.dmDisplayFrequency; initialBuffer.width = dm.dmPelsWidth; initialBuffer.height = dm.dmPelsHeight; i = 0; while(EnumDisplaySettings(device.DeviceName, i, &dm)) { i++; buffer.bitDepth = dm.dmBitsPerPel; buffer.refreshRate = dm.dmDisplayFrequency; buffer.width = dm.dmPelsWidth; buffer.height = dm.dmPelsHeight; if(ccDisplayResolutionExists(currentDisplay, &buffer)) continue; ccRealloc(currentDisplay->resolution, sizeof(ccDisplayData)*(currentDisplay->amount + 1)); if(ccDisplayResolutionEqual(&buffer, &initialBuffer)) { currentDisplay->current = currentDisplay->amount; currentDisplay->initial = currentDisplay->current; } currentDisplay->resolution[currentDisplay->amount].width = buffer.width; currentDisplay->resolution[currentDisplay->amount].height = buffer.height; currentDisplay->resolution[currentDisplay->amount].refreshRate = buffer.refreshRate; currentDisplay->resolution[currentDisplay->amount].bitDepth = buffer.bitDepth; currentDisplay->amount++; } if(currentDisplay->x == 0 && currentDisplay->y == 0) _ccDisplays->primary = _ccDisplays->amount - 1; displayCount++; } deviceCount++; } return CC_SUCCESS; }