7
=============================================================================
11
=============================================================================
17
char *buffer,*script_p,*end_p;
21
#define MAX_INCLUDES 8
22
script_t scriptstack[MAX_INCLUDES];
28
qboolean tokenready; // only true if UnGetToken was just called
30
char brush_info[2000] = "No brushes processed yet. Look near beginning of map";
31
static int brush_begin = 1;
45
sprintf(brush_info, "Line %d, file %s", script->line, script->filename);
53
void AddScriptToStack (char *filename)
58
if (script == &scriptstack[MAX_INCLUDES])
59
Error ("script file exceeded MAX_INCLUDES");
60
strcpy (script->filename, ExpandPath (filename) );
62
size = LoadFile (script->filename, (void **)&script->buffer);
64
printf ("entering %s\n", script->filename);
68
script->script_p = script->buffer;
69
script->end_p = script->buffer + size;
78
void LoadScriptFile (char *filename)
81
AddScriptToStack (filename);
93
void ParseFromMemory (char *buffer, int size)
97
if (script == &scriptstack[MAX_INCLUDES])
98
Error ("script file exceeded MAX_INCLUDES");
99
strcpy (script->filename, "memory buffer" );
101
script->buffer = buffer;
103
script->script_p = script->buffer;
104
script->end_p = script->buffer + size;
115
Signals that the current token was not used, and should be reported
116
for the next GetToken. Note that
122
could cross a line boundary.
125
void UnGetToken (void)
131
qboolean EndOfScript (qboolean crossline)
134
Error ("Line %i is incomplete\n",scriptline);
136
if (!strcmp (script->filename, "memory buffer"))
142
free (script->buffer);
143
if (script == scriptstack+1)
149
scriptline = script->line;
150
printf ("returning to %s\n", script->filename);
151
return GetToken (crossline);
159
qboolean GetToken (qboolean crossline)
163
if (tokenready) // is a token allready waiting?
169
if (script->script_p >= script->end_p)
170
return EndOfScript (crossline);
177
while (*script->script_p <= 32)
179
if (script->script_p >= script->end_p)
180
return EndOfScript (crossline);
181
if (*script->script_p++ == '\n')
184
Error ("Line %i is incomplete\n",scriptline);
185
scriptline = script->line++;
189
if (script->script_p >= script->end_p)
190
return EndOfScript (crossline);
193
if (*script->script_p == ';' || *script->script_p == '#'
194
|| ( script->script_p[0] == '/' && script->script_p[1] == '/') )
197
Error ("Line %i is incomplete\n",scriptline);
198
while (*script->script_p++ != '\n')
199
if (script->script_p >= script->end_p)
200
return EndOfScript (crossline);
201
scriptline = script->line++;
206
if (script->script_p[0] == '/' && script->script_p[1] == '*')
209
Error ("Line %i is incomplete\n",scriptline);
211
while (script->script_p[0] != '*' && script->script_p[1] != '/')
213
if(script->script_p[0] == '\n')
214
scriptline = script->line++;
217
if (script->script_p >= script->end_p)
218
return EndOfScript (crossline);
220
script->script_p += 2;
229
if (*script->script_p == '"')
233
while (*script->script_p != '"')
235
*token_p++ = *script->script_p++;
236
if (script->script_p == script->end_p)
238
if (token_p == &token[MAXTOKEN])
239
Error ("Token too large on line %i\n",scriptline);
243
else // regular token
244
while ( *script->script_p > 32 && *script->script_p != ';')
246
*token_p++ = *script->script_p++;
247
if (script->script_p == script->end_p)
249
if (token_p == &token[MAXTOKEN])
250
Error ("Token too large on line %i\n",scriptline);
255
if (!strcmp (token, "$include"))
258
AddScriptToStack (token);
259
return GetToken (crossline);
270
Returns true if there is another token on the line
273
qboolean TokenAvailable (void)
277
search_p = script->script_p;
279
if (search_p >= script->end_p)
282
while ( *search_p <= 32)
284
if (*search_p == '\n')
287
if (search_p == script->end_p)
292
if (*search_p == ';')