]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sys_shared.c
Rename qboolean to qbool
[xonotic/darkplaces.git] / sys_shared.c
index 0db4c03479474e7fd81432ecb3f708d9e546111c..0ba8862fc234a9f98c7901f282d825aea0390225 100644 (file)
@@ -45,20 +45,19 @@ char *Sys_TimeString(const char *timeformat)
 }
 
 
-extern qboolean host_shuttingdown;
 void Sys_Quit (int returnvalue)
 {
        // Unlock mutexes because the quit command may jump directly here, causing a deadlock
-       if (cmd_client.text_lock)
-               Cbuf_Unlock(&cmd_client);
-       if (cmd_server.text_lock)
-               Cbuf_Unlock(&cmd_server);
+       if ((&cmd_client)->cbuf->lock)
+               Cbuf_Unlock((&cmd_client)->cbuf);
+       if ((&cmd_server)->cbuf->lock)
+               Cbuf_Unlock((&cmd_server)->cbuf);
        SV_UnlockThreadMutex();
        TaskQueue_Frame(true);
 
-       if (COM_CheckParm("-profilegameonly"))
+       if (Sys_CheckParm("-profilegameonly"))
                Sys_AllowProfiling(false);
-       host_shuttingdown = true;
+       host.state = host_shutdown;
        Host_Shutdown();
        exit(returnvalue);
 }
@@ -66,7 +65,7 @@ void Sys_Quit (int returnvalue)
 #ifdef __cplusplus
 extern "C"
 #endif
-void Sys_AllowProfiling(qboolean enable)
+void Sys_AllowProfiling(qbool enable)
 {
 #ifdef __ANDROID__
 #ifdef USE_PROFILER
@@ -77,7 +76,7 @@ void Sys_AllowProfiling(qboolean enable)
        else
                moncleanup();
 #endif
-#elif defined(__linux__) || defined(__FreeBSD__)
+#elif (defined(__linux__) && (defined(__GLIBC__) || defined(__GNU_LIBRARY__))) || defined(__FreeBSD__)
        extern int moncontrol(int);
        moncontrol(enable);
 #endif
@@ -92,7 +91,7 @@ DLL MANAGEMENT
 ===============================================================================
 */
 
-static qboolean Sys_LoadLibraryFunctions(dllhandle_t dllhandle, const dllfunction_t *fcts, qboolean complain, qboolean has_next)
+static qbool Sys_LoadLibraryFunctions(dllhandle_t dllhandle, const dllfunction_t *fcts, qbool complain, qbool has_next)
 {
        const dllfunction_t *func;
        if(dllhandle)
@@ -117,7 +116,7 @@ static qboolean Sys_LoadLibraryFunctions(dllhandle_t dllhandle, const dllfunctio
        return false;
 }
 
-qboolean Sys_LoadLibrary (const char** dllnames, dllhandle_t* handle, const dllfunction_t *fcts)
+qbool Sys_LoadLibrary (const char** dllnames, dllhandle_t* handle, const dllfunction_t *fcts)
 {
 #ifdef SUPPORTDLL
        const dllfunction_t *func;
@@ -164,7 +163,7 @@ notfound:
 #else
                dllhandle = dlopen (dllnames[i], RTLD_LAZY | RTLD_GLOBAL);
 #endif
-               if (Sys_LoadLibraryFunctions(dllhandle, fcts, true, (dllnames[i+1] != NULL) || (strrchr(com_argv[0], '/'))))
+               if (Sys_LoadLibraryFunctions(dllhandle, fcts, true, (dllnames[i+1] != NULL) || (strrchr(sys.argv[0], '/'))))
                        break;
                else
                        Sys_UnloadLibrary (&dllhandle);
@@ -172,10 +171,10 @@ notfound:
 
        // see if the names can be loaded relative to the executable path
        // (this is for Mac OSX which does not check next to the executable)
-       if (!dllhandle && strrchr(com_argv[0], '/'))
+       if (!dllhandle && strrchr(sys.argv[0], '/'))
        {
                char path[MAX_OSPATH];
-               strlcpy(path, com_argv[0], sizeof(path));
+               strlcpy(path, sys.argv[0], sizeof(path));
                strrchr(path, '/')[1] = 0;
                for (i = 0; dllnames[i] != NULL; i++)
                {
@@ -203,6 +202,7 @@ notfound:
        }
 
        Con_DPrintf(" - loaded.\n");
+       Con_Printf("Loaded library \"%s\"\n", dllnames[i]);
 
        *handle = dllhandle;
        return true;
@@ -283,6 +283,29 @@ static cvar_t sys_useclockgettime = {CVAR_CLIENT | CVAR_SERVER | CVAR_SAVE, "sys
 
 static double benchmark_time; // actually always contains an integer amount of milliseconds, will eventually "overflow"
 
+/*
+================
+Sys_CheckParm
+
+Returns the position (1 to argc-1) in the program's argument list
+where the given parameter apears, or 0 if not present
+================
+*/
+int Sys_CheckParm (const char *parm)
+{
+       int i;
+
+       for (i=1 ; i<sys.argc ; i++)
+       {
+               if (!sys.argv[i])
+                       continue;               // NEXTSTEP sometimes clears appkit vars.
+               if (!strcmp (parm,sys.argv[i]))
+                       return i;
+       }
+
+       return 0;
+}
+
 void Sys_Init_Commands (void)
 {
        Cvar_RegisterVariable(&sys_debugsleep);
@@ -335,13 +358,8 @@ double Sys_DirtyTime(void)
                {
                        QueryPerformanceCounter (&PerformanceCount);
        
-                       #ifdef __BORLANDC__
-                       timescale = 1.0 / ((double) PerformanceFreq.u.LowPart + (double) PerformanceFreq.u.HighPart * 65536.0 * 65536.0);
-                       return ((double) PerformanceCount.u.LowPart + (double) PerformanceCount.u.HighPart * 65536.0 * 65536.0) * timescale;
-                       #else
                        timescale = 1.0 / ((double) PerformanceFreq.LowPart + (double) PerformanceFreq.HighPart * 65536.0 * 65536.0);
                        return ((double) PerformanceCount.LowPart + (double) PerformanceCount.HighPart * 65536.0 * 65536.0) * timescale;
-                       #endif
                }
                else
                {
@@ -496,7 +514,7 @@ static const char *Sys_FindInPATH(const char *name, char namesep, const char *PA
 static const char *Sys_FindExecutableName(void)
 {
 #if defined(WIN32)
-       return com_argv[0];
+       return sys.argv[0];
 #else
        static char exenamebuf[MAX_OSPATH+1];
        ssize_t n = -1;
@@ -515,18 +533,18 @@ static const char *Sys_FindExecutableName(void)
                exenamebuf[n] = 0;
                return exenamebuf;
        }
-       if(strchr(com_argv[0], '/'))
-               return com_argv[0]; // possibly a relative path
+       if(strchr(sys.argv[0], '/'))
+               return sys.argv[0]; // possibly a relative path
        else
-               return Sys_FindInPATH(com_argv[0], '/', getenv("PATH"), ':', exenamebuf, sizeof(exenamebuf));
+               return Sys_FindInPATH(sys.argv[0], '/', getenv("PATH"), ':', exenamebuf, sizeof(exenamebuf));
 #endif
 }
 
 void Sys_ProvideSelfFD(void)
 {
-       if(com_selffd != -1)
+       if(sys.selffd != -1)
                return;
-       com_selffd = FS_SysOpenFD(Sys_FindExecutableName(), "rb", false);
+       sys.selffd = FS_SysOpenFD(Sys_FindExecutableName(), "rb", false);
 }
 
 // for x86 cpus only...  (x64 has SSE2_PRESENT)
@@ -535,7 +553,7 @@ void Sys_ProvideSelfFD(void)
 static int CPUID_Features(void)
 {
        int features = 0;
-# if defined(__GNUC__) && defined(__i386__)
+# if defined((__GNUC__) || (__clang__) || (__TINYC__)) && defined(__i386__)
         __asm__ (
 "        movl    %%ebx,%%edi\n"
 "        xorl    %%eax,%%eax                                           \n"
@@ -562,16 +580,16 @@ static int CPUID_Features(void)
 #endif
 
 #ifdef SSE_POSSIBLE
-qboolean Sys_HaveSSE(void)
+qbool Sys_HaveSSE(void)
 {
        // COMMANDLINEOPTION: SSE: -nosse disables SSE support and detection
-       if(COM_CheckParm("-nosse"))
+       if(Sys_CheckParm("-nosse"))
                return false;
 #ifdef SSE_PRESENT
        return true;
 #else
        // COMMANDLINEOPTION: SSE: -forcesse enables SSE support and disables detection
-       if(COM_CheckParm("-forcesse") || COM_CheckParm("-forcesse2"))
+       if(Sys_CheckParm("-forcesse") || Sys_CheckParm("-forcesse2"))
                return true;
        if(CPUID_Features() & (1 << 25))
                return true;
@@ -579,16 +597,16 @@ qboolean Sys_HaveSSE(void)
 #endif
 }
 
-qboolean Sys_HaveSSE2(void)
+qbool Sys_HaveSSE2(void)
 {
        // COMMANDLINEOPTION: SSE2: -nosse2 disables SSE2 support and detection
-       if(COM_CheckParm("-nosse") || COM_CheckParm("-nosse2"))
+       if(Sys_CheckParm("-nosse") || Sys_CheckParm("-nosse2"))
                return false;
 #ifdef SSE2_PRESENT
        return true;
 #else
        // COMMANDLINEOPTION: SSE2: -forcesse2 enables SSE2 support and disables detection
-       if(COM_CheckParm("-forcesse2"))
+       if(Sys_CheckParm("-forcesse2"))
                return true;
        if((CPUID_Features() & (3 << 25)) == (3 << 25)) // SSE is 1<<25, SSE2 is 1<<26
                return true;
@@ -601,17 +619,15 @@ qboolean Sys_HaveSSE2(void)
 #if defined(__linux__)
 #include <sys/resource.h>
 #include <errno.h>
-static int nicelevel;
-static qboolean nicepossible;
-static qboolean isnice;
+
 void Sys_InitProcessNice (void)
 {
        struct rlimit lim;
-       nicepossible = false;
-       if(COM_CheckParm("-nonice"))
+       sys.nicepossible = false;
+       if(Sys_CheckParm("-nonice"))
                return;
        errno = 0;
-       nicelevel = getpriority(PRIO_PROCESS, 0);
+       sys.nicelevel = getpriority(PRIO_PROCESS, 0);
        if(errno)
        {
                Con_Printf("Kernel does not support reading process priority - cannot use niceness\n");
@@ -622,35 +638,35 @@ void Sys_InitProcessNice (void)
                Con_Printf("Kernel does not support lowering nice level again - cannot use niceness\n");
                return;
        }
-       if(lim.rlim_cur != RLIM_INFINITY && nicelevel < (int) (20 - lim.rlim_cur))
+       if(lim.rlim_cur != RLIM_INFINITY && sys.nicelevel < (int) (20 - lim.rlim_cur))
        {
                Con_Printf("Current nice level is below the soft limit - cannot use niceness\n");
                return;
        }
-       nicepossible = true;
-       isnice = false;
+       sys.nicepossible = true;
+       sys.isnice = false;
 }
 void Sys_MakeProcessNice (void)
 {
-       if(!nicepossible)
+       if(!sys.nicepossible)
                return;
-       if(isnice)
+       if(sys.isnice)
                return;
        Con_DPrintf("Process is becoming 'nice'...\n");
        if(setpriority(PRIO_PROCESS, 0, 19))
-               Con_Errorf("Failed to raise nice level to %d\n", 19);
-       isnice = true;
+               Con_Printf(CON_ERROR "Failed to raise nice level to %d\n", 19);
+       sys.isnice = true;
 }
 void Sys_MakeProcessMean (void)
 {
-       if(!nicepossible)
+       if(!sys.nicepossible)
                return;
-       if(!isnice)
+       if(!sys.isnice)
                return;
        Con_DPrintf("Process is becoming 'mean'...\n");
-       if(setpriority(PRIO_PROCESS, 0, nicelevel))
-               Con_Errorf("Failed to lower nice level to %d\n", nicelevel);
-       isnice = false;
+       if(setpriority(PRIO_PROCESS, 0, sys.nicelevel))
+               Con_Printf(CON_ERROR "Failed to lower nice level to %d\n", sys.nicelevel);
+       sys.isnice = false;
 }
 #else
 void Sys_InitProcessNice (void)