]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - common.c
R_SetSkyBox now takes a const char *
[xonotic/darkplaces.git] / common.c
index 1f38d06ca54ac2c341d9fa3af9683a1ea82bb460..3dfcf6d51577d324702fcf62083d03de5cf9edee 100644 (file)
--- a/common.c
+++ b/common.c
@@ -29,14 +29,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 #include "quakedef.h"
 
-#define NUM_SAFE_ARGVS  7
-
-static char *largv[MAX_NUM_ARGVS + NUM_SAFE_ARGVS + 1];
-static char *argvdummy = " ";
-
-static char *safeargvs[NUM_SAFE_ARGVS] =
-       {"-stdvid", "-nolan", "-nosound", "-nocdaudio", "-nojoy", "-nomouse", "-window"};
-
 cvar_t registered = {0, "registered","0"};
 cvar_t cmdline = {0, "cmdline","0"};
 
@@ -49,6 +41,7 @@ qboolean msg_suppress_1 = 0;
 void COM_InitFilesystem (void);
 
 char com_token[1024];
+char com_basedir[MAX_OSPATH];
 int com_argc;
 char **com_argv;
 
@@ -58,6 +51,7 @@ char com_cmdline[CMDLINE_LENGTH];
 
 int gamemode;
 char *gamename;
+char *gamedirname;
 
 /*
 
@@ -440,13 +434,13 @@ void *SZ_GetSpace (sizebuf_t *buf, int length)
        if (buf->cursize + length > buf->maxsize)
        {
                if (!buf->allowoverflow)
-                       Host_Error ("SZ_GetSpace: overflow without allowoverflow set");
+                       Host_Error ("SZ_GetSpace: overflow without allowoverflow set\n");
 
                if (length > buf->maxsize)
-                       Host_Error ("SZ_GetSpace: %i is > full buffer size", length);
+                       Host_Error ("SZ_GetSpace: %i is > full buffer size\n", length);
 
                buf->overflowed = true;
-               Con_Printf ("SZ_GetSpace: overflow");
+               Con_Printf ("SZ_GetSpace: overflow\n");
                SZ_Clear (buf);
        }
 
@@ -464,7 +458,7 @@ void SZ_Write (sizebuf_t *buf, void *data, int length)
 void SZ_Print (sizebuf_t *buf, char *data)
 {
        int             len;
-       
+
        len = strlen(data)+1;
 
 // byte * cast to keep VC++ happy
@@ -474,6 +468,55 @@ void SZ_Print (sizebuf_t *buf, char *data)
                memcpy ((qbyte *)SZ_GetSpace(buf, len-1)-1,data,len); // write over trailing 0
 }
 
+static char *hexchar = "0123456789ABCDEF";
+void SZ_HexDumpToConsole(sizebuf_t *buf)
+{
+       int i;
+       char text[1024];
+       char *cur, *flushpointer;
+       cur = text;
+       flushpointer = text + 512;
+       for (i = 0;i < buf->cursize;i++)
+       {
+               if ((i & 15) == 0)
+               {
+                       *cur++ = hexchar[(i >> 12) & 15];
+                       *cur++ = hexchar[(i >>  8) & 15];
+                       *cur++ = hexchar[(i >>  4) & 15];
+                       *cur++ = hexchar[(i >>  0) & 15];
+                       *cur++ = ':';
+                       *cur++ = ' ';
+               }
+               else if ((i & 15) == 15)
+                       *cur++ = '\n';
+               else
+                       *cur++ = ' ';
+               if (i & 1)
+               {
+                       *cur++ = hexchar[(buf->data[i] >> 4) & 15] | 0x80;
+                       *cur++ = hexchar[(buf->data[i] >> 0) & 15] | 0x80;
+               }
+               else
+               {
+                       *cur++ = hexchar[(buf->data[i] >> 4) & 15];
+                       *cur++ = hexchar[(buf->data[i] >> 0) & 15];
+               }
+               if (cur >= flushpointer)
+               {
+                       *cur++ = 0;
+                       Con_Printf("%s", text);
+                       cur = text;
+               }
+       }
+       if ((i & 15) != 0)
+               *cur++ = '\n';
+       if (cur > text)
+       {
+               *cur++ = 0;
+               Con_Printf("%s", text);
+       }
+}
+
 
 //============================================================================
 
@@ -516,6 +559,8 @@ void COM_StripExtension (char *in, char *out)
        }
        if (last)
                *last = 0;
+       else
+               *out = 0;
 }
 
 /*
@@ -624,7 +669,7 @@ skipwhite:
                        return NULL;                    // end of file;
                data++;
        }
-       
+
 // skip // comments
        if (c=='/' && data[1] == '/')
        {
@@ -735,102 +780,76 @@ void COM_Path_f (void);
 COM_InitArgv
 ================
 */
-void COM_InitArgv (int argc, char **argv)
+void COM_InitArgv (void)
 {
-       qboolean        safe;
-       int             i, j, n;
-
-// reconstitute the command line for the cmdline externally visible cvar
+       int i, j, n;
+       // reconstitute the command line for the cmdline externally visible cvar
        n = 0;
-
-       for (j=0 ; (j<MAX_NUM_ARGVS) && (j< argc) ; j++)
+       for (j = 0;(j < MAX_NUM_ARGVS) && (j < com_argc);j++)
        {
                i = 0;
-
-               while ((n < (CMDLINE_LENGTH - 1)) && argv[j][i])
-               {
-                       com_cmdline[n++] = argv[j][i++];
-               }
-
+               while ((n < (CMDLINE_LENGTH - 1)) && com_argv[j][i])
+                       com_cmdline[n++] = com_argv[j][i++];
                if (n < (CMDLINE_LENGTH - 1))
                        com_cmdline[n++] = ' ';
                else
                        break;
        }
-
        com_cmdline[n] = 0;
+}
 
-       safe = false;
-
-       for (com_argc=0 ; (com_argc<MAX_NUM_ARGVS) && (com_argc < argc) ;
-                com_argc++)
-       {
-               largv[com_argc] = argv[com_argc];
-               if (!strcmp ("-safe", argv[com_argc]))
-                       safe = true;
-       }
+void COM_InitGameType (void)
+{
+       char name[MAX_OSPATH];
+       COM_StripExtension(com_argv[0], name);
+       COM_ToLowerString(name, name);
 
-       if (safe)
-       {
-       // force all the safe-mode switches. Note that we reserved extra space in
-       // case we need to add these, so we don't need an overflow check
-               for (i=0 ; i<NUM_SAFE_ARGVS ; i++)
-               {
-                       largv[com_argc] = safeargvs[i];
-                       com_argc++;
-               }
-       }
+       if (strstr(name, "transfusion"))
+               gamemode = GAME_TRANSFUSION;
+       else if (strstr(name, "nehahra"))
+               gamemode = GAME_NEHAHRA;
+       else if (strstr(name, "hipnotic"))
+               gamemode = GAME_HIPNOTIC;
+       else if (strstr(name, "rogue"))
+               gamemode = GAME_ROGUE;
+       else
+               gamemode = GAME_NORMAL;
 
-       largv[com_argc] = argvdummy;
-       com_argv = largv;
-
-#if TRANSFUSION
-       gamemode = GAME_TRANSFUSION;
-#elif ZYMOTIC
-       gamemode = GAME_ZYMOTIC;
-#elif FIENDARENA
-       gamemode = GAME_FIENDARENA;
-#elif NEHAHRA
-       gamemode = GAME_NEHAHRA;
-#else
        if (COM_CheckParm ("-transfusion"))
                gamemode = GAME_TRANSFUSION;
-       else if (COM_CheckParm ("-zymotic"))
-               gamemode = GAME_ZYMOTIC;
-       else if (COM_CheckParm ("-fiendarena"))
-               gamemode = GAME_FIENDARENA;
        else if (COM_CheckParm ("-nehahra"))
                gamemode = GAME_NEHAHRA;
        else if (COM_CheckParm ("-hipnotic"))
                gamemode = GAME_HIPNOTIC;
        else if (COM_CheckParm ("-rogue"))
                gamemode = GAME_ROGUE;
-#endif
+       else if (COM_CheckParm ("-quake"))
+               gamemode = GAME_NORMAL;
+
        switch(gamemode)
        {
        case GAME_NORMAL:
-               gamename = "DarkPlaces";
+               gamename = "DarkPlaces-Quake";
+               gamedirname = "";
                break;
        case GAME_HIPNOTIC:
                gamename = "Darkplaces-Hipnotic";
+               gamedirname = "hipnotic";
                break;
        case GAME_ROGUE:
                gamename = "Darkplaces-Rogue";
+               gamedirname = "rogue";
                break;
        case GAME_NEHAHRA:
                gamename = "DarkPlaces-Nehahra";
-               break;
-       case GAME_FIENDARENA:
-               gamename = "FiendArena";
-               break;
-       case GAME_ZYMOTIC:
-               gamename = "Zymotic";
+               gamedirname = "nehahra";
                break;
        case GAME_TRANSFUSION:
                gamename = "Transfusion";
+               gamedirname = "transfusion";
                break;
        default:
-               Sys_Error("COM_InitArgv: unknown gamemode %i\n", gamemode);
+               Sys_Error("COM_InitGameType: unknown gamemode %i\n", gamemode);
                break;
        }
 }
@@ -1207,7 +1226,7 @@ int COM_FindFile (char *filename, QFile **file, qboolean quiet, qboolean zip)
 #endif
 
                                cachetime = Sys_FileTime (cachepath);
-                       
+
                                if (cachetime < findtime)
                                        COM_CopyFile (netpath, cachepath);
                                strcpy (netpath, cachepath);
@@ -1406,93 +1425,40 @@ COM_InitFilesystem
 */
 void COM_InitFilesystem (void)
 {
-       int             i, j;
-       char    basedir[MAX_OSPATH];
-       searchpath_t    *search;
+       int i;
+       searchpath_t *search;
 
-//
-// -basedir <path>
-// Overrides the system supplied base directory (under GAMENAME)
-//
+       strcpy(com_basedir, ".");
+
+       // -basedir <path>
+       // Overrides the system supplied base directory (under GAMENAME)
        i = COM_CheckParm ("-basedir");
        if (i && i < com_argc-1)
-               strcpy (basedir, com_argv[i+1]);
-       else
-               strcpy (basedir, host_parms.basedir);
-
-       j = strlen (basedir);
-
-       if (j > 0)
-       {
-               if ((basedir[j-1] == '\\') || (basedir[j-1] == '/'))
-                       basedir[j-1] = 0;
-       }
+               strcpy (com_basedir, com_argv[i+1]);
 
-#if CACHEENABLE
-//
-// -cachedir <path>
-// Overrides the system supplied cache directory (NULL or /qcache)
-// -cachedir - will disable caching.
-//
-       i = COM_CheckParm ("-cachedir");
-       if (i && i < com_argc-1)
-       {
-               if (com_argv[i+1][0] == '-')
-                       com_cachedir[0] = 0;
-               else
-                       strcpy (com_cachedir, com_argv[i+1]);
-       }
-       else if (host_parms.cachedir)
-               strcpy (com_cachedir, host_parms.cachedir);
-       else
-               com_cachedir[0] = 0;
-#endif
+       i = strlen (com_basedir);
+       if (i > 0 && (com_basedir[i-1] == '\\' || com_basedir[i-1] == '/'))
+               com_basedir[i-1] = 0;
 
 // start up with GAMENAME by default (id1)
-       COM_AddGameDirectory (va("%s/"GAMENAME, basedir) );
-
-       switch(gamemode)
+       COM_AddGameDirectory (va("%s/"GAMENAME, com_basedir));
+       if (gamedirname[0])
        {
-       case GAME_NORMAL:
-               break;
-       case GAME_HIPNOTIC:
-               COM_AddGameDirectory (va("%s/hipnotic", basedir) );
-               break;
-       case GAME_ROGUE:
-               COM_AddGameDirectory (va("%s/rogue", basedir) );
-               break;
-       case GAME_NEHAHRA:
-               COM_AddGameDirectory (va("%s/nehahra", basedir) );
-               break;
-       case GAME_FIENDARENA:
-               COM_AddGameDirectory (va("%s/fiendarena", basedir) );
-               break;
-       case GAME_ZYMOTIC:
-               COM_AddGameDirectory (va("%s/zymotic", basedir) );
-               break;
-       case GAME_TRANSFUSION:
-               COM_AddGameDirectory (va("%s/transfusion", basedir) );
-               break;
-       default:
-               Sys_Error("COM_InitFilesystem: unknown gamemode %i\n", gamemode);
-               break;
+               com_modified = true;
+               COM_AddGameDirectory (va("%s/%s", com_basedir, gamedirname));
        }
 
-//
-// -game <gamedir>
-// Adds basedir/gamedir as an override game
-//
+       // -game <gamedir>
+       // Adds basedir/gamedir as an override game
        i = COM_CheckParm ("-game");
        if (i && i < com_argc-1)
        {
                com_modified = true;
-               COM_AddGameDirectory (va("%s/%s", basedir, com_argv[i+1]));
+               COM_AddGameDirectory (va("%s/%s", com_basedir, com_argv[i+1]));
        }
 
-//
-// -path <dir or packfile> [<dir or packfile>] ...
-// Fully specifies the exact search path, overriding the generated one
-//
+       // -path <dir or packfile> [<dir or packfile>] ...
+       // Fully specifies the exact search path, overriding the generated one
        i = COM_CheckParm ("-path");
        if (i)
        {
@@ -1573,3 +1539,11 @@ void COM_ToUpperString(char *in, char *out)
        }
 }
 
+int COM_StringBeginsWith(const char *s, const char *match)
+{
+       for (;*s && *match;s++, match++)
+               if (*s != *match)
+                       return false;
+       return true;
+}
+