X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=sys_win.c;h=6a33662590836c7ac6dacc6d72577874f4631541;hp=dee6bc51c618064dde845be98bc64287948415c3;hb=fc5fe8b95af8c3e314abe62dc0727e5bd2efa04a;hpb=2e83f8e2e245189d6f1bf28a45dc42b8f480b12d diff --git a/sys_win.c b/sys_win.c index dee6bc51..6a336625 100644 --- a/sys_win.c +++ b/sys_win.c @@ -19,25 +19,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // sys_win.c -- Win32 system interface code -#define WIN32_USETIMEGETTIME 0 - #include "quakedef.h" -#include "winquake.h" +#include +#include +#include #include "errno.h" #include "resource.h" #include "conproc.h" #include "direct.h" -// # of seconds to wait on Sys_Error running dedicated before exiting -#define CONSOLE_ERROR_TIMEOUT 60.0 -// sleep time on pause or minimization -#define PAUSE_SLEEP 50 -// sleep time when not focus -#define NOT_FOCUS_SLEEP 20 - -int starttime; +cvar_t sys_usetimegettime = {CVAR_SAVE, "sys_usetimegettime", "1", "use windows timeGetTime function (which has issues on some motherboards) for timing rather than QueryPerformanceCounter timer (which has issues on multicore/multiprocessor machines and processors which are designed to conserve power)"}; -static qboolean sc_return_on_enter = false; HANDLE hinput, houtput; static HANDLE tevent; @@ -45,129 +37,6 @@ static HANDLE hFile; static HANDLE heventParent; static HANDLE heventChild; -/* -=============================================================================== - -QFile IO - -=============================================================================== -*/ - -// LordHavoc: 256 pak files (was 10) -#define MAX_HANDLES 256 -QFile *sys_handles[MAX_HANDLES]; - -int findhandle (void) -{ - int i; - - for (i=1 ; i 126))) - lpCmdLine++; + HANDLE hClipboardData; - if (*lpCmdLine) + if ((hClipboardData = GetClipboardData (CF_TEXT)) != 0) { - argv[host_parms.argc] = lpCmdLine; - host_parms.argc++; - - while (*lpCmdLine && ((*lpCmdLine > 32) && (*lpCmdLine <= 126))) - lpCmdLine++; - - if (*lpCmdLine) + if ((cliptext = GlobalLock (hClipboardData)) != 0) { - *lpCmdLine = 0; - lpCmdLine++; + size_t allocsize; + allocsize = GlobalSize (hClipboardData) + 1; + data = Z_Malloc (allocsize); + strlcpy (data, cliptext, allocsize); + GlobalUnlock (hClipboardData); } - } + CloseClipboard (); } + return data; +} - host_parms.argv = argv; - - COM_InitArgv (host_parms.argc, host_parms.argv); - - host_parms.argc = com_argc; - host_parms.argv = com_argv; - - Sys_Shared_EarlyInit(); +void Sys_InitConsole (void) +{ + int t; + // initialize the windows dedicated server console if needed tevent = CreateEvent(NULL, false, false, NULL); if (!tevent) @@ -538,6 +317,9 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin hinput = GetStdHandle (STD_INPUT_HANDLE); houtput = GetStdHandle (STD_OUTPUT_HANDLE); +#ifdef _WIN64 +#define atoi _atoi64 +#endif // give QHOST a chance to hook into the console if ((t = COM_CheckParm ("-HFILE")) > 0) { @@ -562,34 +344,87 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin // because sound is off until we become active S_BlockSound (); +} + +void Sys_Init_Commands (void) +{ + Cvar_RegisterVariable(&sys_usetimegettime); +} + +/* +============================================================================== + +WINDOWS CRAP + +============================================================================== +*/ + + +/* +================== +WinMain +================== +*/ +HINSTANCE global_hInstance; +const char *argv[MAX_NUM_ARGVS]; +char program_name[MAX_OSPATH]; + +int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +{ + MEMORYSTATUS lpBuffer; - Host_Init (); + /* previous instances do not exist in Win32 */ + if (hPrevInstance) + return 0; - Sys_Shared_LateInit(); + global_hInstance = hInstance; + + lpBuffer.dwLength = sizeof(MEMORYSTATUS); + GlobalMemoryStatus (&lpBuffer); - frameoldtime = Sys_DoubleTime (); + program_name[sizeof(program_name)-1] = 0; + GetModuleFileNameA(NULL, program_name, sizeof(program_name) - 1); - /* main window message loop */ - while (1) + com_argc = 1; + com_argv = argv; + argv[0] = program_name; + + // FIXME: this tokenizer is rather redundent, call a more general one + while (*lpCmdLine && (com_argc < MAX_NUM_ARGVS)) { - if (cls.state != ca_dedicated) + while (*lpCmdLine && *lpCmdLine <= ' ') + lpCmdLine++; + + if (!*lpCmdLine) + break; + + if (*lpCmdLine == '\"') { - // yield the CPU for a little while when paused, minimized, or not the focus - if ((cl.paused && !vid_activewindow) || vid_hidden) - { - SleepUntilInput (PAUSE_SLEEP); - scr_skipupdate = 1; // no point in bothering to draw - } - else if (!vid_activewindow) - SleepUntilInput (NOT_FOCUS_SLEEP); + // quoted string + lpCmdLine++; + argv[com_argc] = lpCmdLine; + com_argc++; + while (*lpCmdLine && (*lpCmdLine != '\"')) + lpCmdLine++; + } + else + { + // unquoted word + argv[com_argc] = lpCmdLine; + com_argc++; + while (*lpCmdLine && *lpCmdLine > ' ') + lpCmdLine++; } - framenewtime = Sys_DoubleTime (); - Host_Frame (framenewtime - frameoldtime); - frameoldtime = framenewtime; + if (*lpCmdLine) + { + *lpCmdLine = 0; + lpCmdLine++; + } } + Host_Main(); + /* return success of application */ return true; } -