]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - common.c
added support for single-quoted strings in COM_ParseTokenConsole
[xonotic/darkplaces.git] / common.c
index 21c0eb6df47436251b95bc8ed284943462293cb4..ab5fc3195cda1864e69ccb49143cf26b2e8f1b5e 100644 (file)
--- a/common.c
+++ b/common.c
@@ -27,11 +27,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 #include "quakedef.h"
 
-cvar_t registered = {0, "registered","0", "indicates if this is running registered quake (whether gfx/qpop.lmp was found)"};
+cvar_t registered = {0, "registered","0", "indicates if this is running registered quake (whether gfx/pop.lmp was found)"};
 cvar_t cmdline = {0, "cmdline","0", "contains commandline the engine was launched with"};
 
-extern qboolean fs_modified;   // set true if using non-id files
-
 char com_token[MAX_INPUTLINE];
 int com_argc;
 const char **com_argv;
@@ -675,6 +673,7 @@ Parse a token out of a string
 int COM_ParseToken(const char **datapointer, int returnnewline)
 {
        int len;
+       int c;
        const char *data = *datapointer;
 
        len = 0;
@@ -727,15 +726,34 @@ skipwhite:
                // quoted string
                for (data++;*data != '\"';data++)
                {
-                       if (*data == '\\' && data[1] == '"' )
-                               data++;
                        if (!*data || len >= (int)sizeof(com_token) - 1)
                        {
                                com_token[0] = 0;
                                *datapointer = NULL;
                                return false;
                        }
-                       com_token[len++] = *data;
+                       c = *data;
+                       if (*data == '\\')
+                       {
+                               if (data[1] == '"')
+                               {
+                                       data++;
+                                       c = *data;
+                               }
+                               else if (data[1] == '\'')
+                               {
+                                       data++;
+                                       c = *data;
+                               }
+                               else if (data[1] == 'n')
+                               {
+                                       data++;
+                                       c = '\n';
+                               }
+                               else if (data[1] == '\\')
+                                       data++;
+                       }
+                       com_token[len++] = c;
                }
                com_token[len] = 0;
                *datapointer = data+1;
@@ -746,15 +764,34 @@ skipwhite:
                // quoted string
                for (data++;*data != '\'';data++)
                {
-                       if (*data == '\\' && data[1] == '\'' )
-                               data++;
                        if (!*data || len >= (int)sizeof(com_token) - 1)
                        {
                                com_token[0] = 0;
                                *datapointer = NULL;
                                return false;
                        }
-                       com_token[len++] = *data;
+                       c = *data;
+                       if (*data == '\\')
+                       {
+                               if (data[1] == '"')
+                               {
+                                       data++;
+                                       c = *data;
+                               }
+                               else if (data[1] == '\'')
+                               {
+                                       data++;
+                                       c = *data;
+                               }
+                               else if (data[1] == 'n')
+                               {
+                                       data++;
+                                       c = '\n';
+                               }
+                               else if (data[1] == '\\')
+                                       data++;
+                       }
+                       com_token[len++] = c;
                }
                com_token[len] = 0;
                *datapointer = data+1;
@@ -787,7 +824,28 @@ skipwhite:
                                *datapointer = NULL;
                                return false;
                        }
-                       com_token[len++] = *data;
+                       c = *data;
+                       if (*data == '\\')
+                       {
+                               if (data[1] == '"')
+                               {
+                                       data++;
+                                       c = *data;
+                               }
+                               else if (data[1] == '\'')
+                               {
+                                       data++;
+                                       c = *data;
+                               }
+                               else if (data[1] == 'n')
+                               {
+                                       data++;
+                                       c = '\n';
+                               }
+                               else if (data[1] == '\\')
+                                       data++;
+                       }
+                       com_token[len++] = c;
                }
                com_token[len] = 0;
                *datapointer = data;
@@ -851,6 +909,22 @@ skipwhite:
                com_token[len] = 0;
                *datapointer = data+1;
        }
+       else if (*data == '\'')
+       {
+               // quoted string
+               for (data++;*data != '\'';data++)
+               {
+                       if (!*data || len >= (int)sizeof(com_token) - 1)
+                       {
+                               com_token[0] = 0;
+                               *datapointer = NULL;
+                               return false;
+                       }
+                       com_token[len++] = *data;
+               }
+               com_token[len] = 0;
+               *datapointer = data+1;
+       }
        else
        {
                // regular word
@@ -970,6 +1044,12 @@ static const gamemode_info_t gamemode_info [] =
 // GAME_DEFEATINDETAIL2
 // COMMANDLINEOPTION: Game: -did2 runs the game Defeat In Detail 2
 { "did2",                      "-did2",                "Defeat In Detail 2",   "data",         NULL,                   "did2_",                "did2" },
+// GAME_DARSANA
+// COMMANDLINEOPTION: Game: -darsana runs the game Darsana
+{ "darsana",           "-darsana",     "Darsana",                      "ddata",        NULL,                   "darsana",                      "darsana" },
+// GAME_CONTAGIONTHEORY
+// COMMANDLINEOPTION: Game: -contagiontheory runs the game Contagion Theory
+{ "contagiontheory",           "-contagiontheory",     "Contagion Theory",                     "ctdata",       NULL,                   "ct",                   "contagiontheory" },
 };
 
 void COM_InitGameType (void)