diff options
author | zakk <zakk@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-08-26 04:48:05 +0000 |
---|---|---|
committer | zakk <zakk@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-08-26 04:48:05 +0000 |
commit | 952c5c128f9efaea89d41d882c4ea3ade7df4591 (patch) | |
tree | 91b84d9be7afad7e99ac64a640a65b6cb5081900 /q3radiant/PARSE.CPP | |
parent | c2c2e0d25d6cdb7d42d7dc981a863f65f94f281d (diff) | |
download | ioquake3-aero-952c5c128f9efaea89d41d882c4ea3ade7df4591.tar.gz ioquake3-aero-952c5c128f9efaea89d41d882c4ea3ade7df4591.zip |
Itsa me, quake3io!
git-svn-id: svn://svn.icculus.org/quake3/trunk@2 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'q3radiant/PARSE.CPP')
-rwxr-xr-x | q3radiant/PARSE.CPP | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/q3radiant/PARSE.CPP b/q3radiant/PARSE.CPP new file mode 100755 index 0000000..6a2b340 --- /dev/null +++ b/q3radiant/PARSE.CPP @@ -0,0 +1,148 @@ +/* +=========================================================================== +Copyright (C) 1999-2005 Id Software, Inc. + +This file is part of Quake III Arena source code. + +Quake III Arena source code is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +Quake III Arena source code is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Foobar; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ +#include "stdafx.h"
+#include "qe3.h"
+
+char token[MAXTOKEN];
+qboolean unget;
+char *script_p;
+int scriptline;
+
+void StartTokenParsing (char *data)
+{
+ scriptline = 1;
+ script_p = data;
+ unget = false;
+}
+
+qboolean WINAPI GetToken (qboolean crossline)
+{
+ char *token_p;
+
+ if (unget) // is a token allready waiting?
+ {
+ unget = false;
+ return true;
+ }
+
+//
+// skip space
+//
+skipspace:
+ while (*script_p <= 32)
+ {
+ if (!*script_p)
+ {
+ if (!crossline)
+ Sys_Printf("Warning: Line %i is incomplete [01]\n",scriptline);
+ return false;
+ }
+ if (*script_p++ == '\n')
+ {
+ if (!crossline)
+ Sys_Printf("Warning: Line %i is incomplete [02]\n",scriptline);
+ scriptline++;
+ }
+ }
+
+ if (script_p[0] == '/' && script_p[1] == '/') // comment field
+ {
+ if (!crossline)
+ Sys_Printf("Warning: Line %i is incomplete [03]\n",scriptline);
+ while (*script_p++ != '\n')
+ if (!*script_p)
+ {
+ if (!crossline)
+ Sys_Printf("Warning: Line %i is incomplete [04]\n",scriptline);
+ return false;
+ }
+ goto skipspace;
+ }
+
+//
+// copy token
+//
+ token_p = token;
+
+ if (*script_p == '"')
+ {
+ script_p++;
+ //if (*script_p == '"') // handle double quotes i suspect they are put in by other editors cccasionally
+ // script_p++;
+ while ( *script_p != '"' )
+ {
+ if (!*script_p)
+ Error ("EOF inside quoted token");
+ *token_p++ = *script_p++;
+ if (token_p == &token[MAXTOKEN])
+ Error ("Token too large on line %i",scriptline);
+ }
+ script_p++;
+ //if (*script_p == '"') // handle double quotes i suspect they are put in by other editors cccasionally
+ // script_p++;
+ }
+ else while ( *script_p > 32 )
+ {
+ *token_p++ = *script_p++;
+ if (token_p == &token[MAXTOKEN])
+ Error ("Token too large on line %i",scriptline);
+ }
+
+ *token_p = 0;
+
+ return true;
+}
+
+void WINAPI UngetToken (void)
+{
+ unget = true;
+}
+
+
+/*
+==============
+TokenAvailable
+
+Returns true if there is another token on the line
+==============
+*/
+qboolean TokenAvailable (void)
+{
+ char *search_p;
+
+ search_p = script_p;
+
+ while ( *search_p <= 32)
+ {
+ if (*search_p == '\n')
+ return false;
+ if (*search_p == 0)
+ return false;
+ search_p++;
+ }
+
+ if (*search_p == ';')
+ return false;
+
+ return true;
+}
+
|