X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=sys_win.c;h=6a33662590836c7ac6dacc6d72577874f4631541;hb=eb529936e63194bad80c9a4896a85a7a2e3610c6;hp=151565564a33cbcccd3ddc51cf212ee742a2199e;hpb=c9a530f5a0834ceafd6282aecab0c25d331e979a;p=xonotic%2Fdarkplaces.git diff --git a/sys_win.c b/sys_win.c index 15156556..6a336625 100644 --- a/sys_win.c +++ b/sys_win.c @@ -20,24 +20,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // sys_win.c -- Win32 system interface code #include "quakedef.h" -#include "winquake.h" +#include +#include +#include #include "errno.h" #include "resource.h" #include "conproc.h" #include "direct.h" -cvar_t sys_usetimegettime = {CVAR_SAVE, "sys_usetimegettime", "1"}; +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)"}; -// # 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; - -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++; - - 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(); - - Cvar_RegisterVariable(&sys_usetimegettime); +void Sys_InitConsole (void) +{ + int t; + // initialize the windows dedicated server console if needed tevent = CreateEvent(NULL, false, false, NULL); if (!tevent) @@ -551,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) { @@ -575,34 +344,87 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin // because sound is off until we become active S_BlockSound (); +} - Host_Init (); +void Sys_Init_Commands (void) +{ + Cvar_RegisterVariable(&sys_usetimegettime); +} - Sys_Shared_LateInit(); +/* +============================================================================== - frameoldtime = Sys_DoubleTime (); +WINDOWS CRAP - /* main window message loop */ - while (1) +============================================================================== +*/ + + +/* +================== +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; + + /* previous instances do not exist in Win32 */ + if (hPrevInstance) + return 0; + + global_hInstance = hInstance; + + lpBuffer.dwLength = sizeof(MEMORYSTATUS); + GlobalMemoryStatus (&lpBuffer); + + program_name[sizeof(program_name)-1] = 0; + GetModuleFileNameA(NULL, program_name, sizeof(program_name) - 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; } -