Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}