void Sys_Init (void) { OSVERSIONINFO vinfo; Sys_SetTimerResolution (); Sys_SetDPIAware (); memset (cwd, 0, sizeof(cwd)); Sys_GetBasedir(NULL, cwd, sizeof(cwd)); host_parms->basedir = cwd; /* userdirs not really necessary for windows guys. * can be done if necessary, though... */ host_parms->userdir = host_parms->basedir; /* code elsewhere relies on this ! */ vinfo.dwOSVersionInfoSize = sizeof(vinfo); if (!GetVersionEx (&vinfo)) Sys_Error ("Couldn't get OS info"); if ((vinfo.dwMajorVersion < 4) || (vinfo.dwPlatformId == VER_PLATFORM_WIN32s)) { Sys_Error ("QuakeSpasm requires at least Win95 or NT 4.0"); } if (vinfo.dwPlatformId == VER_PLATFORM_WIN32_NT) { SYSTEM_INFO info; WinNT = true; if (vinfo.dwMajorVersion >= 6) WinVista = true; GetSystemInfo(&info); host_parms->numcpus = info.dwNumberOfProcessors; if (host_parms->numcpus < 1) host_parms->numcpus = 1; } else { WinNT = false; /* Win9x or WinME */ host_parms->numcpus = 1; if ((vinfo.dwMajorVersion == 4) && (vinfo.dwMinorVersion == 0)) { Win95 = true; /* Win95-gold or Win95A can't switch bpp automatically */ if (vinfo.szCSDVersion[1] != 'C' && vinfo.szCSDVersion[1] != 'B') Win95old = true; } } Sys_Printf("Detected %d CPUs.\n", host_parms->numcpus); if (isDedicated) { if (!AllocConsole ()) { isDedicated = false; /* so that we have a graphical error dialog */ Sys_Error ("Couldn't create dedicated server console"); } hinput = GetStdHandle (STD_INPUT_HANDLE); houtput = GetStdHandle (STD_OUTPUT_HANDLE); } }
int main (int argc, char **argv) { double time, oldtime, newtime; PrintVersion(); // make sure there's an FPU signal(SIGNOFP, Sys_NoFPUExceptionHandler); signal(SIGABRT, Sys_DefaultExceptionHandler); signal(SIGALRM, Sys_DefaultExceptionHandler); signal(SIGKILL, Sys_DefaultExceptionHandler); signal(SIGQUIT, Sys_DefaultExceptionHandler); signal(SIGINT, Sys_DefaultExceptionHandler); if (fptest_temp >= 0.0) fptest_temp += 0.1; dos_error_func = Sys_Error; memset (cwd, 0, sizeof(cwd)); if (Sys_GetBasedir(argv[0], cwd, sizeof(cwd)) != 0) Sys_Error ("Couldn't determine current directory"); /* initialize the host params */ memset (&quakeparms, 0, sizeof(quakeparms)); quakeparms.basedir = cwd; quakeparms.userdir = cwd; quakeparms.argc = argc; quakeparms.argv = argv; host_parms = &quakeparms; LOG_Init (&quakeparms); COM_ValidateByteorder (); Sys_DetectWin95 (); Sys_PageInProgram (); Sys_GetMemory (); atexit (Sys_AtExit); // in case we crash isDedicated = (COM_CheckParm ("-dedicated") != 0); Sys_Init (); if (!isDedicated) dos_registerintr(9, TrapKey); // Sys_InitStackCheck (); Host_Init(); // Sys_StackCheck (); // Con_Printf ("Top of stack: 0x%x\n", &time); oldtime = Sys_DoubleTime (); while (1) { newtime = Sys_DoubleTime (); time = newtime - oldtime; if (isDedicated && (time < sys_ticrate.value)) continue; Host_Frame (time); // Sys_StackCheck (); oldtime = newtime; } }
int main (int argc, char **argv) { int i; double time, oldtime; PrintVersion(); if (argc > 1) { for (i = 1; i < argc; i++) { if ( !(strcmp(argv[i], "-v")) || !(strcmp(argv[i], "-version" )) || !(strcmp(argv[i], "--version")) ) { exit(0); } else if ( !(strcmp(argv[i], "-h")) || !(strcmp(argv[i], "-help" )) || !(strcmp(argv[i], "--help")) || !(strcmp(argv[i], "-?")) ) { PrintHelp(argv[0]); exit (0); } } } memset (cwd, 0, sizeof(cwd)); if (Sys_GetBasedir(argv[0], cwd, sizeof(cwd)) != 0) Sys_Error ("Couldn't determine current directory"); /* initialize the host params */ memset (&parms, 0, sizeof(parms)); parms.basedir = cwd; parms.userdir = cwd; /* no userdir on win32 */ parms.argc = argc; parms.argv = argv; host_parms = &parms; LOG_Init (&parms); Sys_Printf("basedir is: %s\n", parms.basedir); Sys_Printf("userdir is: %s\n", parms.userdir); COM_ValidateByteorder (); parms.memsize = STD_MEM_ALLOC; i = COM_CheckParm ("-heapsize"); if (i && i < com_argc-1) { parms.memsize = atoi (com_argv[i+1]) * 1024; if ((parms.memsize > MAX_MEM_ALLOC) && !(COM_CheckParm ("-forcemem"))) { Sys_Printf ("Requested memory (%d Mb) too large, using the default maximum.\n", parms.memsize/(1024*1024)); Sys_Printf ("If you are sure, use the -forcemem switch.\n"); parms.memsize = MAX_MEM_ALLOC; } else if ((parms.memsize < MIN_MEM_ALLOC) && !(COM_CheckParm ("-forcemem"))) { Sys_Printf ("Requested memory (%d Mb) too little, using the default minimum.\n", parms.memsize/(1024*1024)); Sys_Printf ("If you are sure, use the -forcemem switch.\n"); parms.memsize = MIN_MEM_ALLOC; } } parms.membase = malloc (parms.memsize); if (!parms.membase) Sys_Error ("Insufficient memory.\n"); timeBeginPeriod (1); /* 1 ms timer precision */ starttime = timeGetTime (); Host_Init(); oldtime = Sys_DoubleTime (); /* main window message loop */ while (1) { time = Sys_DoubleTime (); if (time - oldtime < sys_ticrate.value ) { Sleep (1); continue; } Host_Frame (time - oldtime); oldtime = time; } return 0; }