void V_GLOBAL
NtPrintSystemInfo(void)
{
	MEMORYSTATUS	mi;
	SYSTEM_INFO		si;
	SYSTEMTIME		st;
	OSVERSIONINFO	vi;
	char			buf[_MAX_PATH],oem[_MAX_PATH];
	int				len;
	/* Print executable name and current time */
	GetSystemTime(&st);
	con_printf("NtPrintSystemInfo(): %02d-%02d-%0004d, %02d:%02d:%02d.\n",
		st.wDay+1,st.wMonth,st.wYear,st.wHour,st.wMinute,st.wSecond);
	GetModuleFileName(NULL,buf,_MAX_PATH);
	con_printf("Executable image: '%s'.\n",buf);
	/* Print host OS version */
	memset(&vi,0,sizeof(OSVERSIONINFO));
	vi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
	GetVersionEx(&vi);
	con_printf("Host OS: ");
	switch(vi.dwPlatformId)
	{
		case VER_PLATFORM_WIN32s:
			con_printf("Windows 3.x\n");
			break;
		case VER_PLATFORM_WIN32_WINDOWS:
			con_printf("Windows 9x (0x%0004X-'%s')\n",
				LOWORD(vi.dwBuildNumber),
				LOWORD(vi.dwBuildNumber)<=1000 ? "Chicago" : 
				LOWORD(vi.dwBuildNumber)<=0x7CE ? "Nashville":"Memphis"));
			break;
		case VER_PLATFORM_WIN32_NT:
			con_printf("NT %d.%d (build %d, %s)\n",
				vi.dwMajorVersion,vi.dwMinorVersion,vi.dwBuildNumber,
				vi.szCSDVersion[0] ? vi.szCSDVersion : "Service Pack 1");
			len=_MAX_PATH;
			GetUserName(buf,&len);
			CharToOemBuff(buf,oem,_MAX_PATH);
			con_printf("Current user: '%s'\n",oem);
			break;
	}
	/* Print memory status */
	memset(&mi,0,sizeof(MEMORYSTATUS));
	mi.dwLength=sizeof(MEMORYSTATUS);
	GlobalMemoryStatus(&mi);
	con_printf("Physical memory: %d total, %d available;"
		" limit %d bytes.\n",mi.dwTotalPhys,mi.dwAvailPhys,
		mi.dwTotalPageFile);
	/* Print CPU info */
	GetSystemInfo(&si);
	if(vi.dwPlatformId==VER_PLATFORM_WIN32_NT)
	{
		con_printf("Number of CPUs: %d.\n",si.dwNumberOfProcessors);
		con_printf("Type of CPUs: ");
		switch(si.wProcessorArchitecture)
		{
			case PROCESSOR_ARCHITECTURE_INTEL:
				/*
				 * FIXME: exec cpuid
				 */
				switch(si.wProcessorLevel)
				{
					case 3:
						con_printf("i386 - class");
						break;
					case 4:
						con_printf("i486 - class");
						break;
					case 5:
						con_printf("Penium - class");
						break;
					case 6:
						con_printf("Penium Pro - class");
						break;
					default:
						con_printf("unknown x86 (level %d)",
							si.wProcessorLevel);
						break;
				}
				if(si.wProcessorLevel>4)
					con_printf(", model %d, stepping %d.\n",
						(si.wProcessorRevision >> 8) & 0xFF,
						si.wProcessorLevel & 0xFF);
				else
				{
					if(((si.wProcessorRevision >> 8) & 0xFF)==0xFF)
						con_printf(", model %d, stepping %d.\n",
							((si.wProcessorRevision >> 4) & 0xF) - 0x0A,
							si.wProcessorRevision & 0xF);
					else
						con_printf(", stepping %c, minor %d.\n",
							((si.wProcessorRevision >> 8) & 0xFF) + 'A',
							si.wProcessorRevision & 0xFF);
				}
				break;
			case PROCESSOR_ARCHITECTURE_ALPHA:
				con_printf("DEC Alpha-");
				switch(si.wProcessorLevel)
				{
					case 21064:
						con_printf("21064");
						break;
					case 21066:
						con_printf("21066");
						break;
					case 21164:
						con_printf("21164");
						break;
					default:
						con_printf("21264 (or higher)");
						break;
				}
				con_printf(", model %c, pass %d.\n",
					((si.wProcessorRevision >> 8) & 0xFF) + 'A',
					si.wProcessorRevision & 0xFF);
				break;
			case PROCESSOR_ARCHITECTURE_MIPS:
				con_printf("MIPS, implementation %d, revision %d.\n",
					si.wProcessorLevel,si.wProcessorRevision & 0xFF);
				break;
			case PROCESSOR_ARCHITECTURE_PPC:
				con_printf("PowerPC ");
				switch(si.wProcessorLevel)
				{
					case 1:
						con_printf("601");
						break;
					case 3:
						con_printf("603");
						break;
					case 4:
						con_printf("604");
						break;
					case 6:
						con_printf("603+");
						break;
					case 9:
						con_printf("604+");
						break;
					case 20:
						con_printf("620");
						break;
					default:
						con_printf("(model higher than 620)");
						break;
				}
				con_printf(", version %d.%d.\n",
					(si.wProcessorLevel>>8) & 0xFF,
					si.wProcessorLevel & 0xFF);
				break;
			case PROCESSOR_ARCHITECTURE_UNKNOWN:
				con_printf("unknown; level is %d.\n",si.wProcessorLevel);
				break;
		}
	}
	else if(vi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
	{
		con_printf("One ");
		switch(si.dwProcessorType)
		{
			case PROCESSOR_INTEL_PENTIUM:
				con_printf("Pentium (or higher)");
				break;
			case PROCESSOR_INTEL_486:
				con_printf("i486");
				break;
			case PROCESSOR_INTEL_386:
				con_printf("i386");
				break;
		}
		con_printf(" processor.\n");
	}
}

#if 0

void linuxPrintSystemInfo()
{
	exec cpuid
	parse /proc/meminfo
}

#endif
