mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-16 09:21:43 +00:00
c54f2f66fc
while and killing centaurs with the flechette. - Fixed: Moving to an old level in a hub caused the old player's inventory to spawn owned by the current player (but still hanging off the old player), so the game would hang when trying to delete it. - Modified re2c so that it doesn't add a date to the file it generates. Thus, if it regenerates a file during a full rebuild, SVN won't see it as a change. Also updated it to 0.10.5. - Fixed: SC_GetString() did not properly terminate sc_String when the last token in the file had no white space after it. Since I could not actually find the problem (it works fine in debug mode and I saw no logic errors), I decided to take this opportunity to reimplement it using an re2c-generated scanner. Now it's 1.6x faster than before and correctness is easier to verify. - Fixed: FMODSoundRenderer::Shutdown() also needs to reset NumChannels. - Added back the Manifest to zdoom.rc for non-VC8 Windows compilers. - Fixed MinGW compilation again. Now it uses the same method as Makefile.linux to find all the source files so that it doesn't need to be manually updated each time source files are added or removed. - Added the SVN revision number to the version string. A new tool is used to obtain this information from the svnversion command and write it into a header file. If you don't have the svn command line tools installed or didn't check it out from the repository, you can still build. I added some rules for this to Makefile.linux, and I assume they work because they do for Makefile.mingw. - Fixed: MIDISong2 did not delete MusHeader in its destructor. SVN r200 (trunk)
1085 lines
21 KiB
C
1085 lines
21 KiB
C
/* Generated by re2c 0.10.5 */
|
|
#line 1 "scanner.re"
|
|
#include <string.h>
|
|
#include <malloc.h>
|
|
#include <stdlib.h>
|
|
#include "dehsupp.h"
|
|
|
|
#define BSIZE 8192
|
|
|
|
#define YYCTYPE uchar
|
|
#define YYCURSOR cursor
|
|
#define YYLIMIT s->lim
|
|
#define YYMARKER s->ptr
|
|
#define YYFILL(n) {cursor = fill(s, cursor);}
|
|
|
|
#define RET(i) {s->cur = cursor; return i;}
|
|
|
|
uchar *fill(Scanner *s, uchar *cursor)
|
|
{
|
|
if(!s->eof)
|
|
{
|
|
ptrdiff_t cnt = s->tok - s->bot;
|
|
if(cnt)
|
|
{
|
|
memcpy(s->bot, s->tok, s->lim - s->tok);
|
|
s->tok = s->bot;
|
|
s->ptr -= cnt;
|
|
cursor -= cnt;
|
|
s->pos -= cnt;
|
|
s->lim -= cnt;
|
|
}
|
|
if((s->top - s->lim) < BSIZE)
|
|
{
|
|
uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar));
|
|
memcpy(buf, s->tok, s->lim - s->tok);
|
|
s->tok = buf;
|
|
s->ptr = &buf[s->ptr - s->bot];
|
|
cursor = &buf[cursor - s->bot];
|
|
s->pos = &buf[s->pos - s->bot];
|
|
s->lim = &buf[s->lim - s->bot];
|
|
s->top = &s->lim[BSIZE];
|
|
free(s->bot);
|
|
s->bot = buf;
|
|
}
|
|
if((cnt = fread((char*) s->lim, 1, BSIZE, s->fd)) != BSIZE)
|
|
{
|
|
s->eof = &s->lim[cnt]; *(s->eof)++ = '\n';
|
|
}
|
|
s->lim += cnt;
|
|
}
|
|
return cursor;
|
|
}
|
|
|
|
int scan(Scanner *s)
|
|
{
|
|
uchar *cursor = s->cur;
|
|
std:
|
|
s->tok = cursor;
|
|
#line 64 "scanner.re"
|
|
|
|
|
|
|
|
#line 64 "scanner.c"
|
|
{
|
|
YYCTYPE yych;
|
|
unsigned int yyaccept = 0;
|
|
|
|
if((YYLIMIT - YYCURSOR) < 13) YYFILL(13);
|
|
yych = *YYCURSOR;
|
|
switch(yych){
|
|
case 0x09:
|
|
case 0x0B:
|
|
case 0x0C:
|
|
case ' ': goto yy22;
|
|
case 0x0A: goto yy46;
|
|
case '"': goto yy20;
|
|
case '&': goto yy28;
|
|
case '(': goto yy36;
|
|
case '*': goto yy34;
|
|
case '+': goto yy32;
|
|
case ',': goto yy40;
|
|
case '-': goto yy30;
|
|
case '/': goto yy2;
|
|
case '0': goto yy17;
|
|
case '1':
|
|
case '2':
|
|
case '3':
|
|
case '4':
|
|
case '5':
|
|
case '6':
|
|
case '7':
|
|
case '8':
|
|
case '9': goto yy19;
|
|
case ';': goto yy44;
|
|
case 'A': goto yy7;
|
|
case 'B':
|
|
case 'E':
|
|
case 'G':
|
|
case 'H':
|
|
case 'J':
|
|
case 'K':
|
|
case 'L':
|
|
case 'M':
|
|
case 'N':
|
|
case 'P':
|
|
case 'Q':
|
|
case 'U':
|
|
case 'V':
|
|
case 'W':
|
|
case 'X':
|
|
case 'Y':
|
|
case 'Z':
|
|
case '_':
|
|
case 'a':
|
|
case 'b':
|
|
case 'c':
|
|
case 'd':
|
|
case 'f':
|
|
case 'g':
|
|
case 'h':
|
|
case 'i':
|
|
case 'j':
|
|
case 'k':
|
|
case 'l':
|
|
case 'm':
|
|
case 'n':
|
|
case 'o':
|
|
case 'q':
|
|
case 'r':
|
|
case 's':
|
|
case 't':
|
|
case 'u':
|
|
case 'v':
|
|
case 'w':
|
|
case 'x':
|
|
case 'y':
|
|
case 'z': goto yy16;
|
|
case 'C': goto yy9;
|
|
case 'D': goto yy13;
|
|
case 'F': goto yy14;
|
|
case 'I': goto yy11;
|
|
case 'O': goto yy8;
|
|
case 'R': goto yy15;
|
|
case 'S': goto yy10;
|
|
case 'T': goto yy12;
|
|
case '^': goto yy26;
|
|
case 'e': goto yy4;
|
|
case 'p': goto yy6;
|
|
case '{': goto yy42;
|
|
case '|': goto yy24;
|
|
case '}': goto yy38;
|
|
default: goto yy48;
|
|
}
|
|
yy2:
|
|
yyaccept = 0;
|
|
yych = *(YYMARKER = ++YYCURSOR);
|
|
if(yych == '*') goto yy198;
|
|
if(yych == '/') goto yy196;
|
|
yy3:
|
|
#line 107 "scanner.re"
|
|
{ RET(DIVIDE); }
|
|
#line 163 "scanner.c"
|
|
yy4:
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) == 'n') goto yy192;
|
|
goto yy70;
|
|
yy5:
|
|
#line 91 "scanner.re"
|
|
{ RET(SYM); }
|
|
#line 171 "scanner.c"
|
|
yy6:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'r') goto yy187;
|
|
goto yy70;
|
|
yy7:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'c') goto yy175;
|
|
goto yy70;
|
|
yy8:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'r') goto yy156;
|
|
goto yy70;
|
|
yy9:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'o') goto yy147;
|
|
goto yy70;
|
|
yy10:
|
|
yych = *++YYCURSOR;
|
|
if(yych <= 'p') {
|
|
if(yych <= 'n') goto yy70;
|
|
if(yych <= 'o') goto yy121;
|
|
goto yy122;
|
|
} else {
|
|
if(yych == 't') goto yy123;
|
|
goto yy70;
|
|
}
|
|
yy11:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'n') goto yy112;
|
|
goto yy70;
|
|
yy12:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'h') goto yy103;
|
|
goto yy70;
|
|
yy13:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'e') goto yy93;
|
|
goto yy70;
|
|
yy14:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'i') goto yy83;
|
|
goto yy70;
|
|
yy15:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'e') goto yy71;
|
|
goto yy70;
|
|
yy16:
|
|
yych = *++YYCURSOR;
|
|
goto yy70;
|
|
yy17:
|
|
yyaccept = 1;
|
|
yych = *(YYMARKER = ++YYCURSOR);
|
|
if(yych == 'X') goto yy66;
|
|
if(yych == 'x') goto yy66;
|
|
goto yy65;
|
|
yy18:
|
|
#line 94 "scanner.re"
|
|
{ RET(NUM); }
|
|
#line 230 "scanner.c"
|
|
yy19:
|
|
yych = *++YYCURSOR;
|
|
goto yy63;
|
|
yy20:
|
|
yyaccept = 2;
|
|
yych = *(YYMARKER = ++YYCURSOR);
|
|
if(yych != 0x0A) goto yy52;
|
|
yy21:
|
|
#line 124 "scanner.re"
|
|
{
|
|
printf("unexpected character: %c\n", *s->tok);
|
|
goto std;
|
|
}
|
|
#line 244 "scanner.c"
|
|
yy22:
|
|
++YYCURSOR;
|
|
yych = *YYCURSOR;
|
|
goto yy50;
|
|
yy23:
|
|
#line 99 "scanner.re"
|
|
{ goto std; }
|
|
#line 252 "scanner.c"
|
|
yy24:
|
|
++YYCURSOR;
|
|
#line 101 "scanner.re"
|
|
{ RET(OR); }
|
|
#line 257 "scanner.c"
|
|
yy26:
|
|
++YYCURSOR;
|
|
#line 102 "scanner.re"
|
|
{ RET(XOR); }
|
|
#line 262 "scanner.c"
|
|
yy28:
|
|
++YYCURSOR;
|
|
#line 103 "scanner.re"
|
|
{ RET(AND); }
|
|
#line 267 "scanner.c"
|
|
yy30:
|
|
++YYCURSOR;
|
|
#line 104 "scanner.re"
|
|
{ RET(MINUS); }
|
|
#line 272 "scanner.c"
|
|
yy32:
|
|
++YYCURSOR;
|
|
#line 105 "scanner.re"
|
|
{ RET(PLUS); }
|
|
#line 277 "scanner.c"
|
|
yy34:
|
|
++YYCURSOR;
|
|
#line 106 "scanner.re"
|
|
{ RET(MULTIPLY); }
|
|
#line 282 "scanner.c"
|
|
yy36:
|
|
++YYCURSOR;
|
|
#line 108 "scanner.re"
|
|
{ RET(LPAREN); }
|
|
#line 287 "scanner.c"
|
|
yy38:
|
|
++YYCURSOR;
|
|
#line 109 "scanner.re"
|
|
{ RET(RPAREN); }
|
|
#line 292 "scanner.c"
|
|
yy40:
|
|
++YYCURSOR;
|
|
#line 110 "scanner.re"
|
|
{ RET(COMMA); }
|
|
#line 297 "scanner.c"
|
|
yy42:
|
|
++YYCURSOR;
|
|
#line 111 "scanner.re"
|
|
{ RET(LBRACE); }
|
|
#line 302 "scanner.c"
|
|
yy44:
|
|
++YYCURSOR;
|
|
#line 113 "scanner.re"
|
|
{ RET(SEMICOLON); }
|
|
#line 307 "scanner.c"
|
|
yy46:
|
|
++YYCURSOR;
|
|
#line 117 "scanner.re"
|
|
{
|
|
if(cursor == s->eof) RET(EOI);
|
|
s->pos = cursor; s->line++;
|
|
goto std;
|
|
}
|
|
#line 316 "scanner.c"
|
|
yy48:
|
|
yych = *++YYCURSOR;
|
|
goto yy21;
|
|
yy49:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
yy50:
|
|
if(yych <= 0x0A) {
|
|
if(yych == 0x09) goto yy49;
|
|
goto yy23;
|
|
} else {
|
|
if(yych <= 0x0C) goto yy49;
|
|
if(yych == ' ') goto yy49;
|
|
goto yy23;
|
|
}
|
|
yy51:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
yy52:
|
|
if(yych <= '!') {
|
|
if(yych != 0x0A) goto yy51;
|
|
} else {
|
|
if(yych <= '"') goto yy55;
|
|
if(yych == '\\') goto yy54;
|
|
goto yy51;
|
|
}
|
|
yy53:
|
|
YYCURSOR = YYMARKER;
|
|
if(yyaccept <= 1) {
|
|
if(yyaccept <= 0) {
|
|
goto yy3;
|
|
} else {
|
|
goto yy18;
|
|
}
|
|
} else {
|
|
goto yy21;
|
|
}
|
|
yy54:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
if(yych <= 'b') {
|
|
if(yych <= '7') {
|
|
if(yych <= '&') {
|
|
if(yych == '"') goto yy51;
|
|
goto yy53;
|
|
} else {
|
|
if(yych <= '\'') goto yy51;
|
|
if(yych <= '/') goto yy53;
|
|
goto yy58;
|
|
}
|
|
} else {
|
|
if(yych <= '[') {
|
|
if(yych == '?') goto yy51;
|
|
goto yy53;
|
|
} else {
|
|
if(yych <= '\\') goto yy51;
|
|
if(yych <= '`') goto yy53;
|
|
goto yy51;
|
|
}
|
|
}
|
|
} else {
|
|
if(yych <= 'r') {
|
|
if(yych <= 'm') {
|
|
if(yych == 'f') goto yy51;
|
|
goto yy53;
|
|
} else {
|
|
if(yych <= 'n') goto yy51;
|
|
if(yych <= 'q') goto yy53;
|
|
goto yy51;
|
|
}
|
|
} else {
|
|
if(yych <= 'u') {
|
|
if(yych == 't') goto yy51;
|
|
goto yy53;
|
|
} else {
|
|
if(yych <= 'v') goto yy51;
|
|
if(yych == 'x') goto yy57;
|
|
goto yy53;
|
|
}
|
|
}
|
|
}
|
|
yy55:
|
|
++YYCURSOR;
|
|
#line 97 "scanner.re"
|
|
{ RET(STRING); }
|
|
#line 405 "scanner.c"
|
|
yy57:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
if(yych <= '@') {
|
|
if(yych <= '/') goto yy53;
|
|
if(yych <= '9') goto yy60;
|
|
goto yy53;
|
|
} else {
|
|
if(yych <= 'F') goto yy60;
|
|
if(yych <= '`') goto yy53;
|
|
if(yych <= 'f') goto yy60;
|
|
goto yy53;
|
|
}
|
|
yy58:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
if(yych <= '"') {
|
|
if(yych == 0x0A) goto yy53;
|
|
if(yych <= '!') goto yy51;
|
|
goto yy55;
|
|
} else {
|
|
if(yych <= '7') {
|
|
if(yych <= '/') goto yy51;
|
|
goto yy58;
|
|
} else {
|
|
if(yych == '\\') goto yy54;
|
|
goto yy51;
|
|
}
|
|
}
|
|
yy60:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
if(yych <= '9') {
|
|
if(yych <= '!') {
|
|
if(yych == 0x0A) goto yy53;
|
|
goto yy51;
|
|
} else {
|
|
if(yych <= '"') goto yy55;
|
|
if(yych <= '/') goto yy51;
|
|
goto yy60;
|
|
}
|
|
} else {
|
|
if(yych <= '[') {
|
|
if(yych <= '@') goto yy51;
|
|
if(yych <= 'F') goto yy60;
|
|
goto yy51;
|
|
} else {
|
|
if(yych <= '\\') goto yy54;
|
|
if(yych <= '`') goto yy51;
|
|
if(yych <= 'f') goto yy60;
|
|
goto yy51;
|
|
}
|
|
}
|
|
yy62:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
yy63:
|
|
if(yych <= '/') goto yy18;
|
|
if(yych <= '9') goto yy62;
|
|
goto yy18;
|
|
yy64:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
yy65:
|
|
if(yych <= '/') goto yy18;
|
|
if(yych <= '9') goto yy64;
|
|
goto yy18;
|
|
yy66:
|
|
yych = *++YYCURSOR;
|
|
if(yych <= '@') {
|
|
if(yych <= '/') goto yy53;
|
|
if(yych >= ':') goto yy53;
|
|
} else {
|
|
if(yych <= 'F') goto yy67;
|
|
if(yych <= '`') goto yy53;
|
|
if(yych >= 'g') goto yy53;
|
|
}
|
|
yy67:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
if(yych <= '@') {
|
|
if(yych <= '/') goto yy18;
|
|
if(yych <= '9') goto yy67;
|
|
goto yy18;
|
|
} else {
|
|
if(yych <= 'F') goto yy67;
|
|
if(yych <= '`') goto yy18;
|
|
if(yych <= 'f') goto yy67;
|
|
goto yy18;
|
|
}
|
|
yy69:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
yy70:
|
|
if(yych <= 'Z') {
|
|
if(yych <= '/') goto yy5;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych <= '@') goto yy5;
|
|
goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych <= '^') goto yy5;
|
|
goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy5;
|
|
if(yych <= 'z') goto yy69;
|
|
goto yy5;
|
|
}
|
|
}
|
|
yy71:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'n') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'd') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'e') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'r') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'S') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'y') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'l') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'e') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 's') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy82;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy82;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy82:
|
|
#line 89 "scanner.re"
|
|
{ RET(RenderStyles); }
|
|
#line 559 "scanner.c"
|
|
yy83:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'r') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 's') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'S') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'a') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'e') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy92;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy92;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy92:
|
|
#line 88 "scanner.re"
|
|
{ RET(FirstState); }
|
|
#line 593 "scanner.c"
|
|
yy93:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'a') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'h') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'S') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'a') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'e') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy102;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy102;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy102:
|
|
#line 86 "scanner.re"
|
|
{ RET(DeathState); }
|
|
#line 627 "scanner.c"
|
|
yy103:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'i') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'n') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'g') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'B') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'i') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 's') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy111;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy111;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy111:
|
|
#line 85 "scanner.re"
|
|
{ RET(ThingBits); }
|
|
#line 659 "scanner.c"
|
|
yy112:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'f') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'o') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'N') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'a') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'm') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'e') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 's') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy120;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy120;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy120:
|
|
#line 84 "scanner.re"
|
|
{ RET(InfoNames); }
|
|
#line 691 "scanner.c"
|
|
yy121:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'u') goto yy140;
|
|
goto yy70;
|
|
yy122:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'a') goto yy131;
|
|
goto yy70;
|
|
yy123:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'a') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'e') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'M') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'a') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'p') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy130;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy130;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy130:
|
|
#line 82 "scanner.re"
|
|
{ RET(StateMap); }
|
|
#line 729 "scanner.c"
|
|
yy131:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'w') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'n') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'S') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'a') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'e') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy139;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy139;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy139:
|
|
#line 87 "scanner.re"
|
|
{ RET(SpawnState); }
|
|
#line 761 "scanner.c"
|
|
yy140:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'n') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'd') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'M') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'a') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'p') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy146;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy146;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy146:
|
|
#line 83 "scanner.re"
|
|
{ RET(SoundMap); }
|
|
#line 789 "scanner.c"
|
|
yy147:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'd') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'e') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'P') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'C') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'o') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'n') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'v') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy155;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy155;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy155:
|
|
#line 80 "scanner.re"
|
|
{ RET(CodePConv); }
|
|
#line 821 "scanner.c"
|
|
yy156:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'g') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'H') goto yy158;
|
|
if(yych == 'S') goto yy159;
|
|
goto yy70;
|
|
yy158:
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'e') goto yy168;
|
|
goto yy70;
|
|
yy159:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'p') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'r') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'N') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'a') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'm') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'e') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 's') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy167;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy167;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy167:
|
|
#line 81 "scanner.re"
|
|
{ RET(OrgSprNames); }
|
|
#line 864 "scanner.c"
|
|
yy168:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'i') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'g') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'h') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 's') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy174;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy174;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy174:
|
|
#line 78 "scanner.re"
|
|
{ RET(OrgHeights); }
|
|
#line 892 "scanner.c"
|
|
yy175:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'i') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'o') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'n') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych == 'L') goto yy182;
|
|
if(yych != 's') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy181;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy181;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy181:
|
|
#line 77 "scanner.re"
|
|
{ RET(Actions); }
|
|
#line 921 "scanner.c"
|
|
yy182:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'i') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 's') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy186;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy186;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy186:
|
|
#line 79 "scanner.re"
|
|
{ RET(ActionList); }
|
|
#line 945 "scanner.c"
|
|
yy187:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'i') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'n') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 't') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy191;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy191;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy191:
|
|
#line 76 "scanner.re"
|
|
{ RET(PRINT); }
|
|
#line 969 "scanner.c"
|
|
yy192:
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'd') goto yy70;
|
|
yych = *++YYCURSOR;
|
|
if(yych != 'l') goto yy70;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) <= 'Z') {
|
|
if(yych <= '/') goto yy195;
|
|
if(yych <= '9') goto yy69;
|
|
if(yych >= 'A') goto yy69;
|
|
} else {
|
|
if(yych <= '_') {
|
|
if(yych >= '_') goto yy69;
|
|
} else {
|
|
if(yych <= '`') goto yy195;
|
|
if(yych <= 'z') goto yy69;
|
|
}
|
|
}
|
|
yy195:
|
|
#line 75 "scanner.re"
|
|
{ RET(ENDL); }
|
|
#line 991 "scanner.c"
|
|
yy196:
|
|
++YYCURSOR;
|
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
yych = *YYCURSOR;
|
|
if(yych == 0x0A) goto yy200;
|
|
goto yy196;
|
|
yy198:
|
|
++YYCURSOR;
|
|
#line 67 "scanner.re"
|
|
{ goto comment; }
|
|
#line 1002 "scanner.c"
|
|
yy200:
|
|
++YYCURSOR;
|
|
#line 69 "scanner.re"
|
|
{
|
|
if(cursor == s->eof) RET(EOI);
|
|
s->tok = s->pos = cursor; s->line++;
|
|
goto std;
|
|
}
|
|
#line 1011 "scanner.c"
|
|
}
|
|
#line 128 "scanner.re"
|
|
|
|
|
|
comment:
|
|
|
|
#line 1018 "scanner.c"
|
|
{
|
|
YYCTYPE yych;
|
|
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
|
|
yych = *YYCURSOR;
|
|
if(yych == 0x0A) goto yy206;
|
|
if(yych != '*') goto yy208;
|
|
++YYCURSOR;
|
|
if((yych = *YYCURSOR) == '/') goto yy209;
|
|
yy205:
|
|
#line 139 "scanner.re"
|
|
{ goto comment; }
|
|
#line 1030 "scanner.c"
|
|
yy206:
|
|
++YYCURSOR;
|
|
#line 134 "scanner.re"
|
|
{
|
|
if(cursor == s->eof) RET(EOI);
|
|
s->tok = s->pos = cursor; s->line++;
|
|
goto comment;
|
|
}
|
|
#line 1039 "scanner.c"
|
|
yy208:
|
|
yych = *++YYCURSOR;
|
|
goto yy205;
|
|
yy209:
|
|
++YYCURSOR;
|
|
#line 132 "scanner.re"
|
|
{ goto std; }
|
|
#line 1047 "scanner.c"
|
|
}
|
|
#line 140 "scanner.re"
|
|
|
|
}
|
|
|
|
int lex(Scanner *s, struct Token *tok)
|
|
{
|
|
int tokentype = scan(s);
|
|
char *p, *q;
|
|
|
|
tok->val = 0;
|
|
tok->string = NULL;
|
|
|
|
switch (tokentype)
|
|
{
|
|
case NUM:
|
|
tok->val = strtol((char *)s->tok, NULL, 0);
|
|
break;
|
|
|
|
case STRING:
|
|
tok->string = (char *)malloc(s->cur - s->tok - 1);
|
|
strncpy(tok->string, (char *)s->tok + 1, s->cur - s->tok - 2);
|
|
tok->string[s->cur - s->tok - 2] = '\0';
|
|
for (p = q = tok->string; *p; ++p, ++q)
|
|
{
|
|
if (p[0] == '\\' && p[1] == '\\')
|
|
++p;
|
|
*q = *p;
|
|
}
|
|
break;
|
|
|
|
case SYM:
|
|
tok->string = (char *)malloc(s->cur - s->tok + 1);
|
|
strncpy(tok->string, (char *)s->tok, s->cur - s->tok);
|
|
tok->string[s->cur - s->tok] = '\0';
|
|
break;
|
|
}
|
|
return tokentype;
|
|
}
|