X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=sys_linux.c;h=b37576eeb156ddc3e99b35b09a26156374d441cc;hb=d672c66ae0de71fc4497f49b0b3effd539294a98;hp=af4beb86c68318cd0fef05a09b9642329492e268;hpb=0129aa345c3724a4211a306a2acae35a2f5bcc6c;p=xonotic%2Fdarkplaces.git diff --git a/sys_linux.c b/sys_linux.c index af4beb86..b37576ee 100644 --- a/sys_linux.c +++ b/sys_linux.c @@ -1,6 +1,8 @@ #include "quakedef.h" #ifdef WIN32 +#include +#include #include #include "conio.h" #else @@ -13,6 +15,9 @@ #include +cvar_t sys_usenoclockbutbenchmark = {CVAR_SAVE, "sys_usenoclockbutbenchmark", "0", "don't use ANY real timing, and simulate a clock (for benchmarking); the game then runs as fast as possible. Run a QC mod with bots that does some stuff, then does a quit at the end, to benchmark a server. NEVER do this on a public server."}; +static unsigned long benchmark_time; + #ifdef WIN32 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)"}; #else @@ -60,10 +65,12 @@ void Sys_PrintToTerminal(const char *text) // BUG: for some reason, NDELAY also affects stdout (1) when used on stdin (0). int origflags = fcntl (1, F_GETFL, 0); fcntl (1, F_SETFL, origflags & ~FNDELAY); +#else +#define write _write #endif while(*text) { - int written = (int)write(1, text, (int)strlen(text)); + ssize_t written = write(1, text, strlen(text)); if(written <= 0) break; // sorry, I cannot do anything about this error - without an output text += written; @@ -79,8 +86,12 @@ double Sys_DoubleTime (void) static int first = true; static double oldtime = 0.0, curtime = 0.0; double newtime; + if(sys_usenoclockbutbenchmark.integer) + { + benchmark_time += 1; + return ((double) benchmark_time) / 1e6; + } #ifdef WIN32 -#include // LordHavoc: note to people modifying this code, DWORD is specifically defined as an unsigned 32bit number, therefore the 65536.0 * 65536.0 is fine. if (sys_usetimegettime.integer) { @@ -179,7 +190,7 @@ double Sys_DoubleTime (void) char *Sys_ConsoleInput(void) { - if (cls.state == ca_dedicated) + //if (cls.state == ca_dedicated) { static char text[MAX_INPUTLINE]; static unsigned int len = 0; @@ -193,7 +204,7 @@ char *Sys_ConsoleInput(void) if (c == '\r') { text[len] = '\0'; - putch ('\n'); + _putch ('\n'); len = 0; return text; } @@ -201,16 +212,16 @@ char *Sys_ConsoleInput(void) { if (len) { - putch (c); - putch (' '); - putch (c); + _putch (c); + _putch (' '); + _putch (c); len--; } continue; } if (len < sizeof (text) - 1) { - putch (c); + _putch (c); text[len] = c; len++; } @@ -224,11 +235,14 @@ char *Sys_ConsoleInput(void) timeout.tv_usec = 0; if (select (1, &fdset, NULL, NULL, &timeout) != -1 && FD_ISSET(0, &fdset)) { - len = read (0, text, sizeof(text)); + len = read (0, text, sizeof(text) - 1); if (len >= 1) { // rip off the \n and terminate - text[len-1] = 0; + // div0: WHY? console code can deal with \n just fine + // this caused problems with pasting stuff into a terminal window + // so, not ripping off the \n, but STILL keeping a NUL terminator + text[len] = 0; return text; } } @@ -239,6 +253,11 @@ char *Sys_ConsoleInput(void) void Sys_Sleep(int microseconds) { + if(sys_usenoclockbutbenchmark.integer) + { + benchmark_time += microseconds; + return; + } #ifdef WIN32 Sleep(microseconds / 1000); #else @@ -257,6 +276,7 @@ void Sys_InitConsole (void) void Sys_Init_Commands (void) { + Cvar_RegisterVariable(&sys_usenoclockbutbenchmark); #ifdef WIN32 Cvar_RegisterVariable(&sys_usetimegettime); #else