diff --git a/.gitignore b/.gitignore
index 6c5efe8..1b6ce0e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
*.o
-down
+mamelink/down
+mamelink/griddle/fred
+mamelink/griddle/griddle
+y.output
console_history
diff --git a/mamelink/griddle/Makefile b/mamelink/griddle/Makefile
index 9265159..fab6ce8 100644
--- a/mamelink/griddle/Makefile
+++ b/mamelink/griddle/Makefile
@@ -1,7 +1,7 @@
.SUFFIXES: .o .c .h .run .y .l
GOBJ = griddle.o gmain.o glexer.o build.o cv.o gexpr.o gexec.o debug.o indir.o
-FOBJ = griddle.o fmain.o flexer.o build.o cv.o fexpr.o fexec.o debug.o fred.o fred2.o fscreen.o sun.o map.o
+FOBJ = ../mamelink.o griddle.o fmain.o flexer.o build.o cv.o fexpr.o fexec.o debug.o fred.o fred2.o fscreen.o # sun.o map.o
.c.o:
cc -c -g -DYYDEBUG $*.c
@@ -21,7 +21,7 @@ griddle: $(GOBJ)
cc -g $(GOBJ) -o griddle
fred: $(FOBJ)
- cc -g $(FOBJ) -o fred -lcurses -ltermlib
+ cc -g $(FOBJ) -o fred -lcurses
all: griddle fred
@@ -82,3 +82,6 @@ fred.o: fred.c griddleDefs.h prot.h
fred2.o: fred2.c griddleDefs.h
fscreen.o: fscreen.c griddleDefs.h
+
+clean:
+ rm -f *.o griddle fred
diff --git a/mamelink/griddle/build.c b/mamelink/griddle/build.c
index 176640d..2ed55af 100644
--- a/mamelink/griddle/build.c
+++ b/mamelink/griddle/build.c
@@ -1,6 +1,6 @@
#include "griddleDefs.h"
-value *evaluate();
+value *evaluate(expression *expr);
genericListHead *
buildGenericList(list, new)
@@ -75,11 +75,11 @@ buildStringList(list, new)
}
expression *
-buildExpr(type, arg1, arg2, arg3)
- exprType type;
- int arg1;
- int arg2;
- int arg3;
+buildExpr(
+ exprType type,
+ intptr_t arg1,
+ intptr_t arg2,
+ intptr_t arg3)
{
expression *result;
@@ -91,6 +91,26 @@ buildExpr(type, arg1, arg2, arg3)
return(result);
}
+expression *
+buildExprI(exprType type, intptr_t arg1) {
+ return buildExpr(type, arg1, 0, 0);
+}
+
+expression *
+buildExprP(exprType type, void *arg1) {
+ return buildExpr(type, (intptr_t)arg1, 0, 0);
+}
+
+expression *
+buildExprIP(exprType type, intptr_t arg1, void *arg2) {
+ return buildExpr(type, arg1, (intptr_t)arg2, 0);
+}
+
+expression *
+buildExprPIP(exprType type, void *arg1, intptr_t arg2, void *arg3) {
+ return buildExpr(type, (intptr_t)arg1, arg2, (intptr_t)arg3);
+}
+
property *
buildProperty(fieldName, data)
symbol *fieldName;
@@ -166,8 +186,8 @@ buildField(name, dimension, type, initList)
}
field *
-invisifyField(aField)
- field *aField;
+invisifyField(
+ field *aField)
{
aField->invisible = TRUE;
return(aField);
diff --git a/mamelink/griddle/class.dat b/mamelink/griddle/class.dat
new file mode 100644
index 0000000..71415ed
Binary files /dev/null and b/mamelink/griddle/class.dat differ
diff --git a/mamelink/griddle/defines.ghu b/mamelink/griddle/defines.ghu
new file mode 100644
index 0000000..91cd5f9
--- /dev/null
+++ b/mamelink/griddle/defines.ghu
@@ -0,0 +1,430 @@
+define -1 'object'
+# ident: objid
+# class: bin31
+ container: entity
+ x: bin15
+ y: bin15
+ style: bin15
+ gr_state: bin15
+ orient: bin15
+ gr_width: bin15
+ restricted: bit
+ nitty_bits(31): bit
+# fillers(5): bin15
+# prop_length: bin15
+# property_data: bin15
+enddefine
+define 0 'region'
+ ident: regid
+ owner: avaid = -1
+ light_level: bin15 = 1
+ depth: bin15 = 32
+ east_neighbor: regid
+ west_neighbor: regid
+ north_neighbor: regid
+ south_neighbor: regid
+ class_group: bin15
+ orient: bin15
+ entry_proc: bin15
+ exit_proc: bin15
+ east_exit: bin15
+ west_exit: bin15
+ north_exit: bin15
+ south_exit: bin15
+ east_restriction: bit
+ west_restriction: bit
+ north_restriction: bit
+ south_restriction: bit
+ weapons_free: bit
+ theft_free: bit
+ nitty_bits(26): bit
+ name(20): character = ""
+ avatars: byte
+ town_dir: character
+ port_dir: character
+# filler(33): character
+enddefine
+define 1 'avatar'
+# ident: avaid
+ region: regid
+ container: objid
+ x: bin15
+ y: bin15
+# not_really_turf: regid
+ gr_state: bin15
+ gr_width: bin15
+ genl_flags(32): bit
+ orient: bin15
+# prof_length: bin15
+ style: byte
+# filler(27): character
+ name(10): character = ""
+ screen_name(10): character = ""
+ activity: bin15
+ action: bin15
+ health: bin15
+ restrainer: bin15
+ custom(3): bin15
+ bank_balance: bin31
+ turf: regid
+ stun_count: bin15
+ nitty_bits(31): bit
+ curse_immune: bit
+ true_orient: bin15
+ true_head_style: bin15
+ true_custom(3): bin15
+ curse_type: bin15
+ curse_counter: bin15
+ last_on: bin31
+enddefine
+define 2 'amulet'
+ magic_type: bin15
+ magic_data: bin31
+enddefine
+define 129 'aquarium'
+ state: bin15
+enddefine
+define 4 'atm'
+enddefine
+define 6 'bag'
+ open_flags: bin15 = 0
+ key: fatword = 0
+enddefine
+define 7 'ball'
+enddefine
+define 130 'bed'
+ open_flags: bin15 = 3
+enddefine
+define 10 'book'
+ current_page: bin15 = 1
+ text_id: bin31 = 1
+ last_page: bin15 = 1
+enddefine
+define 12 'bottle'
+ filled: bin15
+enddefine
+define 13 'box'
+ open_flags: bin15 = 0
+ key: fatword = 0
+enddefine
+define 131 'bridge'
+ width: bin15
+ length: bin15
+enddefine
+define 132 'building'
+# filler(3): bin15
+ connection: regid = -1
+enddefine
+define 158 'bureaucrat'
+ open_flags: bin15 = 3
+enddefine
+define 133 'bush'
+enddefine
+define 134 'chair'
+ open_flags: bin15 = 3
+enddefine
+define 84 'changomatic'
+enddefine
+define 135 'chest'
+ open_flags: bin15 = 0
+ key: fatword = 0
+enddefine
+define 16 'club'
+enddefine
+define 136 'coke machine'
+ take: bin31 = 0
+enddefine
+define 17 'compass'
+enddefine
+define 137 'couch'
+ open_flags: bin15 = 3
+enddefine
+define 18 'countertop'
+ open_flags: bin15 = 3
+ key: fatword = 0
+ whoput(5): avaid = 0, 0, 0, 0, 0
+enddefine
+define 20 'crystal ball'
+ live: bit
+# filler(15): bit
+enddefine
+define 21 'die'
+ state: bin15 = 1
+enddefine
+define 22 'display case'
+ open_flags: bin15 = 3
+ key: fatword = 0
+ owner: avaid = 0
+ locked(5): bit = 0, 0, 0, 0, 0
+# filler(11): bit
+enddefine
+define 23 'door'
+ open_flags: bin15 = 2
+ key: fatword = 0
+ connection: regid = -1
+enddefine
+define 24 'dropbox'
+enddefine
+define 25 'drugs'
+ count: bin15 = 5
+ effect: bin15 = 1
+enddefine
+define 28 'elevator'
+ state: bin15 = 0
+ take: bin31 = 0
+ address(20): character = ""
+enddefine
+define 26 'escape dev'
+ charge: bin15 = 10
+enddefine
+define 27 'fake gun'
+ state: bin15
+enddefine
+define 138 'fence'
+enddefine
+define 29 'flag'
+ mass: bin15 = 1
+enddefine
+define 30 'flashlight'
+ on: bin15 = 0
+enddefine
+define 93 'flat'
+ flat_type: bin15 = 0
+enddefine
+define 139 'floor lamp'
+ on: bin15 = 0
+enddefine
+define 140 'fortune machine'
+ take: bin31 = 0
+enddefine
+define 141 'fountain'
+ live: bit = 0
+# filler(15): bit
+enddefine
+define 31 'frisbee'
+enddefine
+define 5 'game piece'
+ state: bin15
+enddefine
+define 32 'garbage can'
+ open_flags: bin15 = 3
+ key: fatword = 0
+enddefine
+define 33 'gemstone'
+ magic_type: bin15
+ magic_data: bin31
+enddefine
+define 3 'ghost'
+enddefine
+define 98 'glue'
+ open_flags: bin15 = 3
+ key: fatword = 0
+ x_offset_1: bin15
+ y_offset_1: bin15
+ x_offset_2: bin15
+ y_offset_2: bin15
+ x_offset_3: bin15
+ y_offset_3: bin15
+ x_offset_4: bin15
+ y_offset_4: bin15
+ x_offset_5: bin15
+ y_offset_5: bin15
+ x_offset_6: bin15
+ y_offset_6: bin15
+enddefine
+define 35 'grenade'
+ pinpulled: bin15
+enddefine
+define 36 'ground'
+enddefine
+define 37 'gun'
+enddefine
+define 38 'hand of god'
+ state: bin15
+enddefine
+define 39 'hat'
+enddefine
+define 127 'head'
+enddefine
+define 88 'hole'
+ open_flags: bin15 = 2
+ key: fatword = 0
+enddefine
+define 144 'hot tub'
+enddefine
+define 143 'house cat'
+enddefine
+define 40 'instant object'
+ instant_what: bin15
+enddefine
+define 145 'jukebox'
+enddefine
+define 42 'key'
+ key_number: fatword = 1
+enddefine
+define 43 'knick knack'
+ is_magic: bin15
+enddefine
+define 44 'knife'
+enddefine
+define 45 'magic lamp'
+ lamp_state: bin15
+ wisher: bin15
+# filler: bin31
+ live: bit
+# fillerx(15): bit
+enddefine
+define 46 'magic staff'
+ magic_type: bin15
+ magic_data: bin31
+enddefine
+define 47 'magic wand'
+ magic_type: bin15
+ magic_data: bin31
+enddefine
+define 48 'mailbox'
+ mail_arrived: bin15
+ owner: avaid
+enddefine
+define 49 'matchbook'
+ mtext(84): varstring
+enddefine
+define 52 'movie camera'
+ on: bin15
+enddefine
+define 54 'paper'
+ text_id: bin31 = 0
+enddefine
+define 96 'pawn machine'
+ open_flags: bin15 = 3
+ key: fatword = 0
+enddefine
+define 152 'picture'
+ mass: bin15 = 1
+ picture: bin15
+enddefine
+define 58 'plant'
+ mass: bin15 = 1
+enddefine
+define 55 'plaque'
+ current_page: bin15 = 1
+ text_id: bin31 = 1
+ last_page: bin15 = 1
+enddefine
+define 147 'pond'
+enddefine
+define 60 'ring'
+ magic_type: bin15
+ magic_data: bin31
+enddefine
+define 148 'river'
+enddefine
+define 61 'rock'
+ mass: bin15 = 1
+enddefine
+define 149 'roof'
+ base: bin15
+ pattern: bin15
+enddefine
+define 150 'safe'
+ open_flags: bin15 = 0
+ key: fatword = 0
+enddefine
+define 63 'security dev'
+ on: bin15
+enddefine
+define 64 'sensor'
+ scan_type: bin15 = 0
+enddefine
+define 90 'sex changer'
+enddefine
+define 56 'short sign'
+ text(10): words = ""
+enddefine
+define 89 'shovel'
+enddefine
+define 57 'sign'
+ text(40): words = ""
+enddefine
+define 69 'sky'
+enddefine
+define 95 'spray can'
+ charge: bin15
+enddefine
+define 70 'stereo'
+ on: bin15
+ tape: bin15
+enddefine
+define 153 'street'
+ width: bin15
+ height: bin15
+enddefine
+define 154 'streetlamp'
+enddefine
+define 91 'stun gun'
+enddefine
+define 92 'super trapezoid'
+ trapezoid_type: bin15
+ upper_left_x: bin15
+ upper_right_x: bin15
+ lower_left_x: bin15
+ lower_right_x: bin15
+ height: bin15
+ pattern_x_size: bin15
+ pattern_y_size: bin15
+ pattern(32): bin15
+enddefine
+define 97 'switch'
+ magic_type: bin15
+ magic_data: bin31
+enddefine
+define 155 'table'
+ open_flags: bin15 = 3
+ key: fatword = 0
+enddefine
+define 71 'tape'
+enddefine
+define 74 'teleport'
+ state: bin15 = 0
+ take: bin31 = 0
+ address(20): character = ""
+enddefine
+define 94 'test'
+enddefine
+define 75 'ticket'
+ event: bin15 = 0
+enddefine
+define 76 'tokens'
+ denom: fatword = 1
+enddefine
+define 87 'trapezoid'
+ trapezoid_type: bin15
+ upper_left_x: bin15
+ upper_right_x: bin15
+ lower_left_x: bin15
+ lower_right_x: bin15
+ height: bin15
+enddefine
+define 156 'tree'
+enddefine
+define 85 'vendo front'
+ open_flags: bin15 = 3
+ key: fatword = 0
+ item_price: bin15
+ display_item: bin15
+ prices(10): bin15
+enddefine
+define 86 'vendo inside'
+ open_flags: bin15 = 3
+ key: fatword = 0
+enddefine
+define 80 'wall'
+ length: bin15
+ height: bin15
+ pattern: bin15
+enddefine
+define 157 'window'
+enddefine
+define 82 'windup toy'
+ wind_level: bin15
+enddefine
diff --git a/mamelink/griddle/exec.c b/mamelink/griddle/exec.c
index c10f9f0..4bd8d5a 100644
--- a/mamelink/griddle/exec.c
+++ b/mamelink/griddle/exec.c
@@ -1,8 +1,8 @@
#include "griddleDefs.h"
void
-executeInclude(filename)
- char *filename;
+executeInclude(
+ char *filename)
{
fileList *newFile;
@@ -25,13 +25,13 @@ executeInclude(filename)
free(filename);
}
- void
-executeAssignment(name, expr)
- symbol *name;
- expression *expr;
-{
- value *evaluate();
+value *evaluate(expression *expr);
+ void
+executeAssignment(
+ symbol *name,
+ expression *expr)
+{
if (name->type != NON_SYM && name->type != VARIABLE_SYM) {
error("illegal assignment to '%s'\n", name->name);
} else {
@@ -43,29 +43,29 @@ executeAssignment(name, expr)
}
void
-fillByte(buf, offset, value)
- byte *buf;
- int offset;
- int value;
+fillByte(
+ byte *buf,
+ int offset,
+ int value)
{
buf[offset] = value & 0xFF;
}
void
-fillWord(buf, offset, value)
- byte *buf;
- int offset;
- int value;
+fillWord(
+ byte *buf,
+ int offset,
+ int value)
{
buf[offset ] = (value >> 8) & 0xFF;
buf[offset + 1] = value & 0xFF;
}
void
-fillLong(buf, offset, value)
- byte *buf;
- int offset;
- long value;
+fillLong(
+ byte *buf,
+ int offset,
+ long value)
{
buf[offset ] = (value >> 24) & 0xFF;
buf[offset + 1] = (value >> 16) & 0xFF;
@@ -73,13 +73,14 @@ fillLong(buf, offset, value)
buf[offset + 3] = value & 0xFF;
}
+value *buildNumber(int val);
+
value *
-nextValue(dataptr)
- exprList **dataptr;
+nextValue(
+ exprList **dataptr)
{
exprList *data;
value *val;
- value *buildNumber();
if (dataptr == NULL || *dataptr == NULL)
return(buildNumber(0));
@@ -90,8 +91,8 @@ nextValue(dataptr)
}
value *
-nextIntValue(dataptr)
- exprList **dataptr;
+nextIntValue(
+ exprList **dataptr)
{
value *val;
@@ -102,8 +103,8 @@ nextIntValue(dataptr)
}
char *
-nextStringValue(dataptr)
- exprList **dataptr;
+nextStringValue(
+ exprList **dataptr)
{
value *val;
char *result;
@@ -120,8 +121,8 @@ nextStringValue(dataptr)
}
int
-contNum(vtype)
- valueType vtype;
+contNum(
+ valueType vtype)
{
if (vtype == VAL_AVATAR) return (1);
else if (vtype == VAL_OBJECT) return (2);
@@ -129,21 +130,21 @@ contNum(vtype)
}
void
-adjustValue(val)
- value *val;
+adjustValue(
+ value *val)
{
if (indirFile != NULL && val->value < -1000)
val->value -= globalIdAdjustment;
}
void
-fillField(buf, data, aField, nextInt, nextString, nextBit)
- byte *buf;
- exprList *data;
- field *aField;
- value *(*nextInt)();
- char *(*nextString)();
- value *(*nextBit)();
+fillField(
+ byte *buf,
+ exprList *data,
+ field *aField,
+ value *(*nextInt)(),
+ char *(*nextString)(),
+ value *(*nextBit)())
{
int i, j;
int offset, bitOffset;
@@ -287,10 +288,10 @@ fillField(buf, data, aField, nextInt, nextString, nextBit)
}
void
-fillPrototype(buf, fields, class)
- byte *buf;
- fieldList *fields;
- int class;
+fillPrototype(
+ byte *buf,
+ fieldList *fields,
+ int class)
{
while (fields != NULL) {
fillField(buf, fields->field->initValues, fields->field,
@@ -300,11 +301,11 @@ fillPrototype(buf, fields, class)
}
void
-fillProperty(buf, prop, fields, class)
- byte *buf;
- property *prop;
- fieldList *fields;
- int class;
+fillProperty(
+ byte *buf,
+ property *prop,
+ fieldList *fields,
+ int class)
{
while (fields != NULL) {
if (fields->field->name == prop->fieldName) {
@@ -517,8 +518,8 @@ generateScratchId(class, id, relativeId)
}
void
-executeRawline(obj)
- object *obj;
+executeRawline(
+ object *obj)
{
if (assignRelativeIds)
generateScratchId(obj->class, getLong(obj->stateVector, 0),
diff --git a/mamelink/griddle/expr.c b/mamelink/griddle/expr.c
index 2d7a537..47f0955 100644
--- a/mamelink/griddle/expr.c
+++ b/mamelink/griddle/expr.c
@@ -1,13 +1,14 @@
#include "y.tab.h"
#include "griddleDefs.h"
+value *buildNumber(int val);
+
value *
integerize(val)
value *val;
{
char *string;
int i;
- value *buildNumber();
if (val == NULL) {
val = buildNumber(0);
diff --git a/mamelink/griddle/fred.c b/mamelink/griddle/fred.c
index 662f73f..20895de 100644
--- a/mamelink/griddle/fred.c
+++ b/mamelink/griddle/fred.c
@@ -150,7 +150,7 @@ readFredStats()
FILE *statFyle;
int i;
- if ((statFyle = fopen("/u0/habitat/fredStats", "r")) != NULL) {
+ if ((statFyle = fopen("fredStats", "r")) != NULL) {
for (i=0; i<128; ++i)
fredStats[i] = getw(statFyle);
fclose(statFyle);
@@ -167,7 +167,7 @@ writeFredStats()
FILE *statFyle;
int i;
- if ((statFyle = fopen("/u0/habitat/fredStats", "w")) != NULL) {
+ if ((statFyle = fopen("fredStats", "w")) != NULL) {
for (i=0; i<128; ++i)
putw(fredStats[i], statFyle);
fclose(statFyle);
@@ -270,7 +270,7 @@ revalueField(firstc, buf)
char firstc;
byte *buf;
{
- ungetch(firstc);
+ ungetchar(firstc);
fredModeLexingOn();
fillFieldPrompt(editY, editX, editField, buf, TRUE);
fredModeLexingOff();
@@ -512,11 +512,12 @@ generateFredObject(class, twinFlag)
editOneObject(noid);
}
+void displayRegion();
+
boolean
createObject()
{
int class;
- void displayRegion();
class = promptInt("-- class", previousClass);
if (class == -1)
@@ -651,7 +652,7 @@ revaluePath(firstc)
{
char temp[80];
- ungetch(firstc);
+ ungetchar(firstc);
mvaddstr(selectedPath + 1, 0, " ");
clrtoeol();
refresh();
@@ -724,27 +725,7 @@ quit()
void
setupFastlinkPort()
{
- char *portstr;
-
- portstr = getenv("FASTPORT");
- if (portstr != NULL) {
- if (strlen(portstr) < 3) {
- error("FASTPORT env variable must be of form: c;p\n");
- exit(1);
- } else {
- card = portstr[0] - '0';
- port = portstr[2] - '0';
- }
- }
- if (card < 0 || NCARDS <= card) {
- error("card number out of range\n");
- exit(1);
- }
- if (port < 0 || 2 < port) {
- error("port number out of range\n");
- exit(1);
- }
- if (!testMode && !Init(card, port)) {
+ if (!testMode && !Init(NULL)) {
error("unable to access device\n");
Finish();
exit(1);
@@ -770,7 +751,7 @@ doFredStuff()
undeleteBuffer = NULL;
previousClass = 2;
- strcpy(regionName, "/u0/habitat/empty.raw");
+ strcpy(regionName, "empty.raw");
echoLine("Fred version 1.0 (%s) -- type 'h' for help", DATE);
while (processCommand())
;
@@ -782,7 +763,7 @@ doFredStuff()
initC64editor()
{
/* system("down -S < /u0/aric/mic/Gr/all.out");*/
- system("down -S < /u0/habitat/reno.out");
+ system("../down -S < reno.out");
/* system("down -S < /u0/chip/reno.out");*/
return(TRUE);
}
diff --git a/mamelink/griddle/fscreen.c b/mamelink/griddle/fscreen.c
index 8948d32..398f16a 100644
--- a/mamelink/griddle/fscreen.c
+++ b/mamelink/griddle/fscreen.c
@@ -8,27 +8,35 @@ static char unsavedChar;
extern int yylval;
void
-echoLine(fmt, arg1, arg2, arg3)
- char *fmt;
- int arg1;
- int arg2;
- int arg3;
+echoLine(char *fmt, ...)
{
+ va_list ap;
+
move(0, 0);
refresh();
clrtoeol();
- printw(fmt, arg1, arg2, arg3);
+
+ va_start(ap, fmt);
+ vw_printw(NULL, fmt, ap);
+ va_end(ap);
+
refresh();
}
void
-lineError(fmt, arg1, arg2, arg3)
- char *fmt;
- int arg1;
- int arg2;
- int arg3;
+lineError(char *fmt, ...)
{
- echoLine(fmt, arg1, arg2, arg3);
+ va_list ap;
+
+ move(0, 0);
+ refresh();
+ clrtoeol();
+
+ va_start(ap, fmt);
+ vw_printw(NULL, fmt, ap);
+ va_end(ap);
+
+ refresh();
putchar('\7');
}
@@ -43,7 +51,7 @@ mygetch()
}
void
-ungetch(c)
+ungetchar(c)
char c;
{
unsavedChar = c;
diff --git a/mamelink/griddle/griddle.c b/mamelink/griddle/griddle.c
index eeca577..3d936ac 100644
--- a/mamelink/griddle/griddle.c
+++ b/mamelink/griddle/griddle.c
@@ -1,535 +1,1896 @@
+/* A Bison parser, made by GNU Bison 3.8.2. */
-# line 2 "griddle.y"
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 this program. If not, see . */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+ especially those whose name start with YY_ or yy_. They are
+ private implementation details that can be changed or removed. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output, and Bison version. */
+#define YYBISON 30802
+
+/* Bison version string. */
+#define YYBISON_VERSION "3.8.2"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+
+
+
+/* First part of user prologue. */
+#line 1 "griddle.y"
+
+#define DEFINE_EXTERNS
#include "griddleDefs.h"
-# define Name 257
-# define Number 258
-# define String 259
-# define BitString 260
-# define Rawline 261
-# define INCLUDE 262
-# define DEFINE 263
-# define ENDDEFINE 264
-# define USE 265
-# define AVAID 266
-# define BIN15 267
-# define BIN31 268
-# define BIT 269
-# define BYTE 270
-# define CHARACTER 271
-# define ENTITY 272
-# define FATWORD 273
-# define OBJID 274
-# define REGID 275
-# define VARSTRING 276
-# define WORDS 277
-# define A 278
-# define O 279
-# define R 280
-# define OR 281
-# define XOR 282
-# define AND 283
-# define ADD 284
-# define SUB 285
-# define MUL 286
-# define DIV 287
-# define MOD 288
-# define UMINUS 289
-# define NOT 290
-#define yyclearin yychar = -1
-#define yyerrok yyerrflag = 0
-extern int yychar;
-extern short yyerrflag;
+#define YYSTYPE intptr_t
+
+#line 77 "y.tab.c"
+
+# ifndef YY_CAST
+# ifdef __cplusplus
+# define YY_CAST(Type, Val) static_cast (Val)
+# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val)
+# else
+# define YY_CAST(Type, Val) ((Type) (Val))
+# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+# endif
+# endif
+# ifndef YY_NULLPTR
+# if defined __cplusplus
+# if 201103L <= __cplusplus
+# define YY_NULLPTR nullptr
+# else
+# define YY_NULLPTR 0
+# endif
+# else
+# define YY_NULLPTR ((void*)0)
+# endif
+# endif
+
+/* Use api.header.include to #include this header
+ instead of duplicating it here. */
+#ifndef YY_YY_Y_TAB_H_INCLUDED
+# define YY_YY_Y_TAB_H_INCLUDED
+/* Debug traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token kinds. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ enum yytokentype
+ {
+ YYEMPTY = -2,
+ YYEOF = 0, /* "end of file" */
+ YYerror = 256, /* error */
+ YYUNDEF = 257, /* "invalid token" */
+ Name = 258, /* Name */
+ Number = 259, /* Number */
+ String = 260, /* String */
+ BitString = 261, /* BitString */
+ Rawline = 262, /* Rawline */
+ INCLUDE = 263, /* INCLUDE */
+ DEFINE = 264, /* DEFINE */
+ ENDDEFINE = 265, /* ENDDEFINE */
+ USE = 266, /* USE */
+ AVAID = 267, /* AVAID */
+ BIN15 = 268, /* BIN15 */
+ BIN31 = 269, /* BIN31 */
+ BIT = 270, /* BIT */
+ BYTE = 271, /* BYTE */
+ CHARACTER = 272, /* CHARACTER */
+ ENTITY = 273, /* ENTITY */
+ FATWORD = 274, /* FATWORD */
+ OBJID = 275, /* OBJID */
+ REGID = 276, /* REGID */
+ VARSTRING = 277, /* VARSTRING */
+ WORDS = 278, /* WORDS */
+ A = 279, /* A */
+ O = 280, /* O */
+ R = 281, /* R */
+ OR = 282, /* OR */
+ XOR = 283, /* XOR */
+ AND = 284, /* AND */
+ ADD = 285, /* ADD */
+ SUB = 286, /* SUB */
+ MUL = 287, /* MUL */
+ DIV = 288, /* DIV */
+ MOD = 289, /* MOD */
+ UMINUS = 290, /* UMINUS */
+ NOT = 291 /* NOT */
+ };
+ typedef enum yytokentype yytoken_kind_t;
+#endif
+/* Token kinds. */
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
+#define Name 258
+#define Number 259
+#define String 260
+#define BitString 261
+#define Rawline 262
+#define INCLUDE 263
+#define DEFINE 264
+#define ENDDEFINE 265
+#define USE 266
+#define AVAID 267
+#define BIN15 268
+#define BIN31 269
+#define BIT 270
+#define BYTE 271
+#define CHARACTER 272
+#define ENTITY 273
+#define FATWORD 274
+#define OBJID 275
+#define REGID 276
+#define VARSTRING 277
+#define WORDS 278
+#define A 279
+#define O 280
+#define R 281
+#define OR 282
+#define XOR 283
+#define AND 284
+#define ADD 285
+#define SUB 286
+#define MUL 287
+#define DIV 288
+#define MOD 289
+#define UMINUS 290
+#define NOT 291
+
+/* Value type. */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+
+int yyparse (void);
+
+
+#endif /* !YY_YY_Y_TAB_H_INCLUDED */
+/* Symbol kind. */
+enum yysymbol_kind_t
+{
+ YYSYMBOL_YYEMPTY = -2,
+ YYSYMBOL_YYEOF = 0, /* "end of file" */
+ YYSYMBOL_YYerror = 1, /* error */
+ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
+ YYSYMBOL_Name = 3, /* Name */
+ YYSYMBOL_Number = 4, /* Number */
+ YYSYMBOL_String = 5, /* String */
+ YYSYMBOL_BitString = 6, /* BitString */
+ YYSYMBOL_Rawline = 7, /* Rawline */
+ YYSYMBOL_INCLUDE = 8, /* INCLUDE */
+ YYSYMBOL_DEFINE = 9, /* DEFINE */
+ YYSYMBOL_ENDDEFINE = 10, /* ENDDEFINE */
+ YYSYMBOL_USE = 11, /* USE */
+ YYSYMBOL_AVAID = 12, /* AVAID */
+ YYSYMBOL_BIN15 = 13, /* BIN15 */
+ YYSYMBOL_BIN31 = 14, /* BIN31 */
+ YYSYMBOL_BIT = 15, /* BIT */
+ YYSYMBOL_BYTE = 16, /* BYTE */
+ YYSYMBOL_CHARACTER = 17, /* CHARACTER */
+ YYSYMBOL_ENTITY = 18, /* ENTITY */
+ YYSYMBOL_FATWORD = 19, /* FATWORD */
+ YYSYMBOL_OBJID = 20, /* OBJID */
+ YYSYMBOL_REGID = 21, /* REGID */
+ YYSYMBOL_VARSTRING = 22, /* VARSTRING */
+ YYSYMBOL_WORDS = 23, /* WORDS */
+ YYSYMBOL_A = 24, /* A */
+ YYSYMBOL_O = 25, /* O */
+ YYSYMBOL_R = 26, /* R */
+ YYSYMBOL_OR = 27, /* OR */
+ YYSYMBOL_XOR = 28, /* XOR */
+ YYSYMBOL_AND = 29, /* AND */
+ YYSYMBOL_ADD = 30, /* ADD */
+ YYSYMBOL_SUB = 31, /* SUB */
+ YYSYMBOL_MUL = 32, /* MUL */
+ YYSYMBOL_DIV = 33, /* DIV */
+ YYSYMBOL_MOD = 34, /* MOD */
+ YYSYMBOL_UMINUS = 35, /* UMINUS */
+ YYSYMBOL_NOT = 36, /* NOT */
+ YYSYMBOL_37_ = 37, /* '=' */
+ YYSYMBOL_38_ = 38, /* '#' */
+ YYSYMBOL_39_ = 39, /* ':' */
+ YYSYMBOL_40_ = 40, /* '(' */
+ YYSYMBOL_41_ = 41, /* ')' */
+ YYSYMBOL_42_ = 42, /* '{' */
+ YYSYMBOL_43_ = 43, /* '}' */
+ YYSYMBOL_44_ = 44, /* ',' */
+ YYSYMBOL_YYACCEPT = 45, /* $accept */
+ YYSYMBOL_statementList = 46, /* statementList */
+ YYSYMBOL_statement = 47, /* statement */
+ YYSYMBOL_rawStatement = 48, /* rawStatement */
+ YYSYMBOL_assignmentStatement = 49, /* assignmentStatement */
+ YYSYMBOL_includeStatement = 50, /* includeStatement */
+ YYSYMBOL_defineStatement = 51, /* defineStatement */
+ YYSYMBOL_fieldList = 52, /* fieldList */
+ YYSYMBOL_field = 53, /* field */
+ YYSYMBOL_basicField = 54, /* basicField */
+ YYSYMBOL_fieldType = 55, /* fieldType */
+ YYSYMBOL_objectUseStatement = 56, /* objectUseStatement */
+ YYSYMBOL_objectTail = 57, /* objectTail */
+ YYSYMBOL_properties = 58, /* properties */
+ YYSYMBOL_property = 59, /* property */
+ YYSYMBOL_exprList = 60, /* exprList */
+ YYSYMBOL_expr = 61 /* expr */
+};
+typedef enum yysymbol_kind_t yysymbol_kind_t;
+
+
+
+
+#ifdef short
+# undef short
+#endif
+
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+ and (if available) are included
+ so that the code can choose integer types of a good width. */
+
+#ifndef __PTRDIFF_MAX__
+# include /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+# include /* INFRINGES ON USER NAME SPACE */
+# define YY_STDINT_H
+# endif
+#endif
+
+/* Narrow types that promote to a signed type and that can represent a
+ signed or unsigned integer of at least N bits. In tables they can
+ save space and decrease cache pressure. Promoting to a signed type
+ helps avoid bugs in integer arithmetic. */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
+#else
+typedef signed char yytype_int8;
+#endif
+
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
+#else
+typedef short yytype_int16;
+#endif
+
+/* Work around bug in HP-UX 11.23, which defines these macros
+ incorrectly for preprocessor constants. This workaround can likely
+ be removed in 2023, as HPE has promised support for HP-UX 11.23
+ (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+ . */
+#ifdef __hpux
+# undef UINT_LEAST8_MAX
+# undef UINT_LEAST16_MAX
+# define UINT_LEAST8_MAX 255
+# define UINT_LEAST16_MAX 65535
+#endif
+
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
+#else
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+# define YYPTRDIFF_T __PTRDIFF_TYPE__
+# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+# ifndef ptrdiff_t
+# include /* INFRINGES ON USER NAME SPACE */
+# endif
+# define YYPTRDIFF_T ptrdiff_t
+# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+# define YYPTRDIFF_T long
+# define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+# include /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM \
+ YY_CAST (YYPTRDIFF_T, \
+ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
+ ? YYPTRDIFF_MAXIMUM \
+ : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_int8 yy_state_t;
+
+/* State numbers in computations. */
+typedef int yy_state_fast_t;
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include /* INFRINGES ON USER NAME SPACE */
+# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(Msgid) Msgid
+# endif
+#endif
+
+
+#ifndef YY_ATTRIBUTE_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define YY_ATTRIBUTE_PURE
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+# define YY_ATTRIBUTE_UNUSED
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YY_USE(E) ((void) (E))
+#else
+# define YY_USE(E) /* empty */
+#endif
+
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
+#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
+# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
+# else
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# endif
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
+#else
+# define YY_INITIAL_VALUE(Value) Value
+#endif
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END \
+ _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
+#if !defined yyoverflow
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
+# include /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's 'empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* !defined yyoverflow */
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yy_state_t yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYPTRDIFF_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / YYSIZEOF (*yyptr); \
+ } \
+ while (0)
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
+# else
+# define YYCOPY(Dst, Src, Count) \
+ do \
+ { \
+ YYPTRDIFF_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (Dst)[yyi] = (Src)[yyi]; \
+ } \
+ while (0)
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 27
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 156
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 45
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 17
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 60
+/* YYNSTATES -- Number of states. */
+#define YYNSTATES 105
+
+/* YYMAXUTOK -- Last valid token kind. */
+#define YYMAXUTOK 291
+
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, with out-of-bounds checking. */
+#define YYTRANSLATE(YYX) \
+ (0 <= (YYX) && (YYX) <= YYMAXUTOK \
+ ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
+ : YYSYMBOL_YYUNDEF)
+
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex. */
+static const yytype_int8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 38, 2, 2, 2, 2,
+ 40, 41, 2, 2, 44, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 39, 2,
+ 2, 37, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 42, 2, 43, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36
+};
+
+#if YYDEBUG
+/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+static const yytype_uint8 yyrline[] =
+{
+ 0, 23, 23, 24, 28, 29, 30, 31, 32, 36,
+ 43, 50, 57, 61, 68, 72, 79, 83, 90, 94,
+ 98, 102, 109, 110, 111, 112, 113, 114, 115, 116,
+ 117, 118, 119, 120, 124, 128, 135, 139, 146, 150,
+ 157, 164, 168, 175, 179, 183, 187, 191, 195, 199,
+ 203, 207, 211, 215, 219, 223, 227, 231, 235, 239,
+ 243
+};
+#endif
+
+/** Accessing symbol of state STATE. */
+#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
+
+#if YYDEBUG || 0
+/* The user-facing name of the symbol whose (internal) number is
+ YYSYMBOL. No bounds checking. */
+static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
+
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "\"end of file\"", "error", "\"invalid token\"", "Name", "Number",
+ "String", "BitString", "Rawline", "INCLUDE", "DEFINE", "ENDDEFINE",
+ "USE", "AVAID", "BIN15", "BIN31", "BIT", "BYTE", "CHARACTER", "ENTITY",
+ "FATWORD", "OBJID", "REGID", "VARSTRING", "WORDS", "A", "O", "R", "OR",
+ "XOR", "AND", "ADD", "SUB", "MUL", "DIV", "MOD", "UMINUS", "NOT", "'='",
+ "'#'", "':'", "'('", "')'", "'{'", "'}'", "','", "$accept",
+ "statementList", "statement", "rawStatement", "assignmentStatement",
+ "includeStatement", "defineStatement", "fieldList", "field",
+ "basicField", "fieldType", "objectUseStatement", "objectTail",
+ "properties", "property", "exprList", "expr", YY_NULLPTR
+};
+
+static const char *
+yysymbol_name (yysymbol_kind_t yysymbol)
+{
+ return yytname[yysymbol];
+}
+#endif
+
+#define YYPACT_NINF (-91)
+
+#define yypact_value_is_default(Yyn) \
+ ((Yyn) == YYPACT_NINF)
+
+#define YYTABLE_NINF (-1)
+
+#define yytable_value_is_error(Yyn) \
+ 0
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+static const yytype_int16 yypact[] =
+{
+ 56, -31, -91, 3, 21, 11, 137, -91, -91, -91,
+ -91, -91, -91, 21, -91, -91, -91, -91, -91, 21,
+ 21, 21, 21, 21, 21, 43, 7, -91, -91, 122,
+ 122, 122, 122, -91, -91, 68, 18, 21, 21, 21,
+ 21, 21, 21, 21, 21, -35, 21, 19, -91, -91,
+ -28, -91, 28, 20, -91, -91, 58, 74, 88, 109,
+ 109, -91, -91, -91, -91, 51, -7, -2, -91, 113,
+ 21, -91, -91, -91, 19, 21, -91, -91, -91, -91,
+ -91, -91, -91, -91, -91, -91, -91, -91, -91, -91,
+ 13, 83, 0, 9, 122, 21, 12, -91, 21, 9,
+ 113, 122, 17, 21, 9
+};
+
+/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE does not specify something else to do. Zero
+ means the default is an error. */
+static const yytype_int8 yydefact[] =
+{
+ 0, 0, 9, 0, 0, 0, 0, 2, 8, 4,
+ 5, 6, 7, 0, 11, 43, 44, 45, 46, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 3, 10,
+ 50, 51, 52, 48, 49, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 35, 47,
+ 0, 13, 0, 0, 14, 16, 59, 60, 58, 53,
+ 54, 55, 56, 57, 34, 0, 0, 0, 38, 0,
+ 0, 17, 12, 15, 0, 0, 37, 39, 29, 23,
+ 24, 25, 32, 22, 31, 30, 28, 27, 33, 26,
+ 18, 0, 0, 40, 41, 0, 0, 36, 0, 20,
+ 0, 42, 19, 0, 21
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -91, -91, 49, -91, -91, -91, -91, -91, 15, 8,
+ -38, -91, 24, 64, -63, -90, -4
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ 0, 6, 7, 8, 9, 10, 11, 53, 54, 55,
+ 90, 12, 48, 67, 68, 93, 94
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule whose
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+static const yytype_int8 yytable[] =
+{
+ 25, 66, 46, 66, 77, 99, 13, 47, 14, 29,
+ 45, 69, 70, 104, 26, 30, 31, 32, 33, 34,
+ 35, 50, 66, 50, 15, 16, 17, 18, 51, 77,
+ 72, 50, 75, 56, 57, 58, 59, 60, 61, 62,
+ 63, 76, 65, 97, 46, 19, 20, 21, 36, 47,
+ 95, 100, 22, 98, 103, 28, 52, 23, 52, 1,
+ 71, 24, 102, 2, 3, 4, 91, 5, 73, 64,
+ 37, 38, 39, 40, 41, 42, 43, 44, 37, 38,
+ 39, 40, 41, 42, 43, 44, 38, 39, 40, 41,
+ 42, 43, 44, 74, 101, 37, 38, 39, 40, 41,
+ 42, 43, 44, 39, 40, 41, 42, 43, 44, 49,
+ 37, 38, 39, 40, 41, 42, 43, 44, 40, 41,
+ 42, 43, 44, 0, 96, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 27, 92, 0,
+ 1, 42, 43, 44, 2, 3, 4, 0, 5, 37,
+ 38, 39, 40, 41, 42, 43, 44
+};
+
+static const yytype_int8 yycheck[] =
+{
+ 4, 3, 37, 3, 67, 95, 37, 42, 5, 13,
+ 3, 39, 40, 103, 3, 19, 20, 21, 22, 23,
+ 24, 3, 3, 3, 3, 4, 5, 6, 10, 92,
+ 10, 3, 39, 37, 38, 39, 40, 41, 42, 43,
+ 44, 43, 46, 43, 37, 24, 25, 26, 5, 42,
+ 37, 39, 31, 44, 37, 6, 38, 36, 38, 3,
+ 52, 40, 100, 7, 8, 9, 70, 11, 53, 45,
+ 27, 28, 29, 30, 31, 32, 33, 34, 27, 28,
+ 29, 30, 31, 32, 33, 34, 28, 29, 30, 31,
+ 32, 33, 34, 42, 98, 27, 28, 29, 30, 31,
+ 32, 33, 34, 29, 30, 31, 32, 33, 34, 41,
+ 27, 28, 29, 30, 31, 32, 33, 34, 30, 31,
+ 32, 33, 34, -1, 41, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 0, 74, -1,
+ 3, 32, 33, 34, 7, 8, 9, -1, 11, 27,
+ 28, 29, 30, 31, 32, 33, 34
+};
+
+/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
+ state STATE-NUM. */
+static const yytype_int8 yystos[] =
+{
+ 0, 3, 7, 8, 9, 11, 46, 47, 48, 49,
+ 50, 51, 56, 37, 5, 3, 4, 5, 6, 24,
+ 25, 26, 31, 36, 40, 61, 3, 0, 47, 61,
+ 61, 61, 61, 61, 61, 61, 5, 27, 28, 29,
+ 30, 31, 32, 33, 34, 3, 37, 42, 57, 41,
+ 3, 10, 38, 52, 53, 54, 61, 61, 61, 61,
+ 61, 61, 61, 61, 57, 61, 3, 58, 59, 39,
+ 40, 54, 10, 53, 42, 39, 43, 59, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 55, 61, 58, 60, 61, 37, 41, 43, 44, 60,
+ 39, 61, 55, 37, 60
+};
+
+/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
+static const yytype_int8 yyr1[] =
+{
+ 0, 45, 46, 46, 47, 47, 47, 47, 47, 48,
+ 49, 50, 51, 51, 52, 52, 53, 53, 54, 54,
+ 54, 54, 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 56, 56, 57, 57, 58, 58,
+ 59, 60, 60, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
+ 61
+};
+
+/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
+static const yytype_int8 yyr2[] =
+{
+ 0, 2, 1, 2, 1, 1, 1, 1, 1, 1,
+ 3, 2, 5, 4, 1, 2, 1, 2, 3, 6,
+ 5, 8, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 4, 3, 5, 3, 1, 2,
+ 3, 1, 3, 1, 1, 1, 1, 3, 2, 2,
+ 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+ 3
+};
+
+
+enum { YYENOMEM = -2 };
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+#define YYNOMEM goto yyexhaustedlab
+
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+ do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+ while (0)
+
+/* Backward compatibility with an undocumented macro.
+ Use YYerror or YYUNDEF. */
+#define YYERRCODE YYUNDEF
+
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
+
+
+
+
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Kind, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (0)
+
+
+/*-----------------------------------.
+| Print this symbol's value on YYO. |
+`-----------------------------------*/
+
+static void
+yy_symbol_value_print (FILE *yyo,
+ yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
+{
+ FILE *yyoutput = yyo;
+ YY_USE (yyoutput);
+ if (!yyvaluep)
+ return;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YY_USE (yykind);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
+
+
+/*---------------------------.
+| Print this symbol on YYO. |
+`---------------------------*/
+
+static void
+yy_symbol_print (FILE *yyo,
+ yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
+{
+ YYFPRINTF (yyo, "%s %s (",
+ yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
+
+ yy_symbol_value_print (yyo, yykind, yyvaluep);
+ YYFPRINTF (yyo, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+static void
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+static void
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
+ int yyrule)
+{
+ int yylno = yyrline[yyrule];
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr,
+ YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
+ &yyvsp[(yyi + 1) - (yynrhs)]);
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args) ((void) 0)
+# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 150
-#endif
-#ifndef YYSTYPE
-#define YYSTYPE int
-#endif
-YYSTYPE yylval, yyval;
-# define YYERRCODE 256
-short yyexca[] ={
--1, 1,
- 0, -1,
- -2, 0,
- };
-# define YYNPROD 60
-# define YYLAST 287
-short yyact[]={
-
- 21, 73, 29, 36, 37, 35, 30, 31, 32, 33,
- 34, 95, 37, 35, 30, 31, 32, 33, 34, 62,
- 32, 33, 34, 15, 36, 37, 35, 30, 31, 32,
- 33, 34, 35, 30, 31, 32, 33, 34, 30, 31,
- 32, 33, 34, 85, 79, 80, 81, 88, 78, 87,
- 86, 84, 83, 89, 82, 8, 52, 52, 96, 12,
- 9, 10, 74, 11, 67, 53, 27, 46, 102, 93,
- 77, 46, 65, 92, 94, 14, 99, 66, 76, 72,
- 16, 51, 50, 45, 28, 97, 2, 48, 13, 7,
- 6, 38, 39, 40, 41, 42, 43, 71, 5, 4,
- 54, 55, 56, 57, 58, 59, 60, 61, 3, 1,
- 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 63, 47,
- 0, 69, 0, 47, 70, 0, 0, 0, 0, 0,
- 0, 0, 90, 75, 0, 0, 91, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,
- 37, 35, 30, 31, 32, 33, 34, 100, 98, 75,
- 101, 0, 0, 0, 0, 0, 103, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 67, 0, 0, 0, 67, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 17, 18, 19,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 24, 25,
- 26, 0, 0, 0, 0, 22, 0, 0, 0, 0,
- 23, 36, 37, 35, 30, 31, 32, 33, 34, 36,
- 37, 35, 30, 31, 32, 33, 34, 44, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 53, 53,
- 0, 0, 0, 0, 0, 68, 49 };
-short yypact[]={
-
--202,-202,-1000,-1000,-1000,-1000,-1000,-1000, 14,-236,
- -40,-191,-1000,-1000, -40,-1000,-257,-1000,-1000,-1000,
--1000, -40, -40, -40, -40, -40, -40, 10,-278, 22,
- -40, -40, -40, -40, -40, -40, -40, -40, -22,-1000,
--1000,-278,-278,-278, 6,-1000, -40,-193, 21,-1000,
--1000,-1000,-192, 39,-266,-266,-1000,-1000,-1000,-246,
--270,-251,-1000,-1000,-122, -63,-1000, 20,-1000,-1000,
--1000,-223, -40,-193,-1000,-1000, -40, 13,-1000,-1000,
--1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
- -30, -67, 41,-278, -40, 18,-1000, -40, 41,-223,
--278, 7, -40, 41 };
-short yypgo[]={
-
- 0, 109, 86, 108, 99, 98, 90, 89, 69, 87,
- 82, 81, 70, 73, 83, 72, 77 };
-short yyr1[]={
-
- 0, 1, 1, 2, 2, 2, 2, 2, 7, 3,
- 4, 5, 5, 9, 9, 10, 10, 11, 11, 11,
- 11, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 6, 6, 14, 14, 15, 15, 16,
- 13, 13, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 };
-short yyr2[]={
-
- 0, 1, 2, 1, 1, 1, 1, 1, 1, 3,
- 2, 5, 4, 1, 2, 1, 2, 3, 6, 5,
- 8, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 4, 3, 5, 3, 1, 2, 3,
- 1, 3, 1, 1, 1, 1, 3, 2, 2, 2,
- 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 };
-short yychk[]={
-
--1000, -1, -2, -3, -4, -5, -6, -7, 257, 262,
- 263, 265, 261, -2, 61, 259, -8, 257, 258, 259,
- 260, 40, 285, 290, 278, 279, 280, 257, -8, 259,
- 284, 285, 286, 287, 288, 283, 281, 282, -8, -8,
- -8, -8, -8, -8, 257, -14, 61, 123, -9, 264,
- -10, -11, 35, 257, -8, -8, -8, -8, -8, -8,
- -8, -8, 41, -14, -8, -15, -16, 257, 264, -10,
- -11, 58, 40, 123, 125, -16, 58, -12, 271, 267,
- 268, 269, 277, 275, 274, 266, 273, 272, 270, 276,
- -8, -15, -13, -8, 61, 41, 125, 44, -13, 58,
- -8, -12, 61, -13 };
-short yydef[]={
-
- 0, -2, 1, 3, 4, 5, 6, 7, 0, 0,
- 0, 0, 8, 2, 0, 10, 0, 42, 43, 44,
- 45, 0, 0, 0, 0, 0, 0, 0, 9, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 47,
- 48, 49, 50, 51, 0, 34, 0, 0, 0, 12,
- 13, 15, 0, 0, 52, 53, 54, 55, 56, 57,
- 58, 59, 46, 33, 0, 0, 37, 0, 11, 14,
- 16, 0, 0, 0, 36, 38, 0, 17, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 0, 0, 39, 40, 0, 0, 35, 0, 19, 0,
- 41, 18, 0, 20 };
-#ifndef lint
-static char yaccpar_sccsid[] = "@(#)yaccpar 1.1 83/07/20 SMI"; /* from UCB 4.1 83/02/11 */
+# define YYMAXDEPTH 10000
#endif
-#
-# define YYFLAG -1000
-# define YYERROR goto yyerrlab
-# define YYACCEPT return(0)
-# define YYABORT return(1)
-
-/* parser for yacc output */
-
-#ifdef YYDEBUG
-int yydebug = 0; /* 1 for debugging */
-#endif
-YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
-int yychar = -1; /* current input token number */
-int yynerrs = 0; /* number of errors */
-short yyerrflag = 0; /* error recovery flag */
-
-yyparse() {
-
- short yys[YYMAXDEPTH];
- short yyj, yym;
- register YYSTYPE *yypvt;
- register short yystate, *yyps, yyn;
- register YYSTYPE *yypv;
- register short *yyxi;
-
- yystate = 0;
- yychar = -1;
- yynerrs = 0;
- yyerrflag = 0;
- yyps= &yys[-1];
- yypv= &yyv[-1];
-
- yystack: /* put a state and value onto the stack */
-
-#ifdef YYDEBUG
- if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar );
-#endif
- if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
- *yyps = yystate;
- ++yypv;
- *yypv = yyval;
-
- yynewstate:
-
- yyn = yypact[yystate];
-
- if( yyn<= YYFLAG ) goto yydefault; /* simple state */
-
- if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
- if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
-
- if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
- yychar = -1;
- yyval = yylval;
- yystate = yyn;
- if( yyerrflag > 0 ) --yyerrflag;
- goto yystack;
- }
-
- yydefault:
- /* default state action */
-
- if( (yyn=yydef[yystate]) == -2 ) {
- if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
- /* look through exception table */
-
- for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
-
- while( *(yyxi+=2) >= 0 ){
- if( *yyxi == yychar ) break;
- }
- if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */
- }
-
- if( yyn == 0 ){ /* error */
- /* error ... attempt to resume parsing */
-
- switch( yyerrflag ){
-
- case 0: /* brand new error */
-
- yyerror( "syntax error" );
- yyerrlab:
- ++yynerrs;
-
- case 1:
- case 2: /* incompletely recovered error ... try again */
-
- yyerrflag = 3;
-
- /* find a state where "error" is a legal shift action */
-
- while ( yyps >= yys ) {
- yyn = yypact[*yyps] + YYERRCODE;
- if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
- yystate = yyact[yyn]; /* simulate a shift of "error" */
- goto yystack;
- }
- yyn = yypact[*yyps];
-
- /* the current yyps has no shift onn "error", pop stack */
-
-#ifdef YYDEBUG
- if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
-#endif
- --yyps;
- --yypv;
- }
-
- /* there is no state on the stack with an error shift ... abort */
-
- yyabort:
- return(1);
- case 3: /* no shift yet; clobber input char */
-#ifdef YYDEBUG
- if( yydebug ) printf( "error recovery discards char %d\n", yychar );
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+static void
+yydestruct (const char *yymsg,
+ yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
+{
+ YY_USE (yyvaluep);
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ YY_USE (yykind);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+}
+
+
+/* Lookahead token kind. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+int
+yyparse (void)
+{
+ yy_state_fast_t yystate = 0;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus = 0;
+
+ /* Refer to the stacks through separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* Their size. */
+ YYPTRDIFF_T yystacksize = YYINITDEPTH;
+
+ /* The state stack: array, bottom, top. */
+ yy_state_t yyssa[YYINITDEPTH];
+ yy_state_t *yyss = yyssa;
+ yy_state_t *yyssp = yyss;
+
+ /* The semantic value stack: array, bottom, top. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp = yyvs;
+
+ int yyn;
+ /* The return value of yyparse. */
+ int yyresult;
+ /* Lookahead symbol kind. */
+ yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ goto yysetstate;
+
+
+/*------------------------------------------------------------.
+| yynewstate -- push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate. |
+`--------------------------------------------------------------------*/
+yysetstate:
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+ YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+ YY_IGNORE_USELESS_CAST_BEGIN
+ *yyssp = YY_CAST (yy_state_t, yystate);
+ YY_IGNORE_USELESS_CAST_END
+ YY_STACK_PRINT (yyss, yyssp);
+
+ if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+ YYNOMEM;
+#else
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYPTRDIFF_T yysize = yyssp - yyss + 1;
+
+# if defined yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ yy_state_t *yyss1 = yyss;
+ YYSTYPE *yyvs1 = yyvs;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * YYSIZEOF (*yyssp),
+ &yyvs1, yysize * YYSIZEOF (*yyvsp),
+ &yystacksize);
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+# else /* defined YYSTACK_RELOCATE */
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ YYNOMEM;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yy_state_t *yyss1 = yyss;
+ union yyalloc *yyptr =
+ YY_CAST (union yyalloc *,
+ YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
+ if (! yyptr)
+ YYNOMEM;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YY_IGNORE_USELESS_CAST_BEGIN
+ YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+ YY_CAST (long, yystacksize)));
+ YY_IGNORE_USELESS_CAST_END
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
+
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token\n"));
+ yychar = yylex ();
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = YYEOF;
+ yytoken = YYSYMBOL_YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else if (yychar == YYerror)
+ {
+ /* The scanner already issued an error message, process directly
+ to error recovery. But do not keep the error token as
+ lookahead, it is too special and may lead us to an endless
+ loop in error recovery. */
+ yychar = YYUNDEF;
+ yytoken = YYSYMBOL_YYerror;
+ goto yyerrlab1;
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+ yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ '$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 9: /* rawStatement: Rawline */
+#line 37 "griddle.y"
+{
+ executeRawline(yyvsp[0]);
+}
+#line 1317 "y.tab.c"
+ break;
+
+ case 10: /* assignmentStatement: Name '=' expr */
+#line 44 "griddle.y"
+{
+ executeAssignment(yyvsp[-2], yyvsp[0]);
+}
+#line 1325 "y.tab.c"
+ break;
+
+ case 11: /* includeStatement: INCLUDE String */
+#line 51 "griddle.y"
+{
+ executeInclude(yyvsp[0]);
+}
+#line 1333 "y.tab.c"
+ break;
+
+ case 12: /* defineStatement: DEFINE expr String fieldList ENDDEFINE */
+#line 58 "griddle.y"
+{
+ executeDefine(yyvsp[-3], yyvsp[-2], yyvsp[-1]);
+}
+#line 1341 "y.tab.c"
+ break;
+
+ case 13: /* defineStatement: DEFINE expr String ENDDEFINE */
+#line 62 "griddle.y"
+{
+ executeDefine(yyvsp[-2], yyvsp[-1], NULL);
+}
+#line 1349 "y.tab.c"
+ break;
+
+ case 14: /* fieldList: field */
+#line 69 "griddle.y"
+{
+ yyval = buildFieldList(NULL, yyvsp[0]);
+}
+#line 1357 "y.tab.c"
+ break;
+
+ case 15: /* fieldList: fieldList field */
+#line 73 "griddle.y"
+{
+ yyval = buildFieldList(yyvsp[-1], yyvsp[0]);
+}
+#line 1365 "y.tab.c"
+ break;
+
+ case 16: /* field: basicField */
+#line 80 "griddle.y"
+{
+ yyval = yyvsp[0];
+}
+#line 1373 "y.tab.c"
+ break;
+
+ case 17: /* field: '#' basicField */
+#line 84 "griddle.y"
+{
+ yyval = invisifyField(yyvsp[0]);
+}
+#line 1381 "y.tab.c"
+ break;
+
+ case 18: /* basicField: Name ':' fieldType */
+#line 91 "griddle.y"
+{
+ yyval = buildField(yyvsp[-2], buildExprI(NUM_EXPR, 1), yyvsp[0], NULL);
+}
+#line 1389 "y.tab.c"
+ break;
+
+ case 19: /* basicField: Name '(' expr ')' ':' fieldType */
+#line 95 "griddle.y"
+{
+ yyval = buildField(yyvsp[-5], yyvsp[-3], yyvsp[0], NULL);
+}
+#line 1397 "y.tab.c"
+ break;
+
+ case 20: /* basicField: Name ':' fieldType '=' exprList */
+#line 99 "griddle.y"
+{
+ yyval = buildField(yyvsp[-4], buildExprI(NUM_EXPR, 1), yyvsp[-2], yyvsp[0]);
+}
+#line 1405 "y.tab.c"
+ break;
+
+ case 21: /* basicField: Name '(' expr ')' ':' fieldType '=' exprList */
+#line 103 "griddle.y"
+{
+ yyval = buildField(yyvsp[-7], yyvsp[-5], yyvsp[-2], yyvsp[0]);
+}
+#line 1413 "y.tab.c"
+ break;
+
+ case 22: /* fieldType: CHARACTER */
+#line 109 "griddle.y"
+ { yyval = (int) FIELD_CHARACTER; }
+#line 1419 "y.tab.c"
+ break;
+
+ case 23: /* fieldType: BIN15 */
+#line 110 "griddle.y"
+ { yyval = (int) FIELD_BIN15; }
+#line 1425 "y.tab.c"
+ break;
+
+ case 24: /* fieldType: BIN31 */
+#line 111 "griddle.y"
+ { yyval = (int) FIELD_BIN31; }
+#line 1431 "y.tab.c"
+ break;
+
+ case 25: /* fieldType: BIT */
+#line 112 "griddle.y"
+ { yyval = (int) FIELD_BIT; }
+#line 1437 "y.tab.c"
+ break;
+
+ case 26: /* fieldType: WORDS */
+#line 113 "griddle.y"
+ { yyval = (int) FIELD_WORDS; }
+#line 1443 "y.tab.c"
+ break;
+
+ case 27: /* fieldType: REGID */
+#line 114 "griddle.y"
+ { yyval = (int) FIELD_REGID; }
+#line 1449 "y.tab.c"
+ break;
+
+ case 28: /* fieldType: OBJID */
+#line 115 "griddle.y"
+ { yyval = (int) FIELD_OBJID; }
+#line 1455 "y.tab.c"
+ break;
+
+ case 29: /* fieldType: AVAID */
+#line 116 "griddle.y"
+ { yyval = (int) FIELD_AVAID; }
+#line 1461 "y.tab.c"
+ break;
+
+ case 30: /* fieldType: FATWORD */
+#line 117 "griddle.y"
+ { yyval = (int) FIELD_FATWORD; }
+#line 1467 "y.tab.c"
+ break;
+
+ case 31: /* fieldType: ENTITY */
+#line 118 "griddle.y"
+ { yyval = (int) FIELD_ENTITY; }
+#line 1473 "y.tab.c"
+ break;
+
+ case 32: /* fieldType: BYTE */
+#line 119 "griddle.y"
+ { yyval = (int) FIELD_BYTE; }
+#line 1479 "y.tab.c"
+ break;
+
+ case 33: /* fieldType: VARSTRING */
+#line 120 "griddle.y"
+ { yyval = (int) FIELD_VARSTRING; }
+#line 1485 "y.tab.c"
+ break;
+
+ case 34: /* objectUseStatement: USE Name Name objectTail */
+#line 125 "griddle.y"
+{
+ executeUse(yyvsp[-2], yyvsp[-1], yyvsp[0]);
+}
+#line 1493 "y.tab.c"
+ break;
+
+ case 35: /* objectUseStatement: USE Name objectTail */
+#line 129 "griddle.y"
+{
+ executeUse(yyvsp[-1], NULL, yyvsp[0]);
+}
+#line 1501 "y.tab.c"
+ break;
+
+ case 36: /* objectTail: '=' expr '{' properties '}' */
+#line 136 "griddle.y"
+{
+ yyval = buildObjectTail(yyvsp[-3], yyvsp[-1]);
+}
+#line 1509 "y.tab.c"
+ break;
+
+ case 37: /* objectTail: '{' properties '}' */
+#line 140 "griddle.y"
+{
+ yyval = buildObjectTail(NULL, yyvsp[-1]);
+}
+#line 1517 "y.tab.c"
+ break;
+
+ case 38: /* properties: property */
+#line 147 "griddle.y"
+{
+ yyval = buildPropertyList(NULL, yyvsp[0]);
+}
+#line 1525 "y.tab.c"
+ break;
+
+ case 39: /* properties: properties property */
+#line 151 "griddle.y"
+{
+ yyval = buildPropertyList(yyvsp[-1], yyvsp[0]);
+}
+#line 1533 "y.tab.c"
+ break;
+
+ case 40: /* property: Name ':' exprList */
+#line 158 "griddle.y"
+{
+ yyval = buildProperty(yyvsp[-2], yyvsp[0]);
+}
+#line 1541 "y.tab.c"
+ break;
+
+ case 41: /* exprList: expr */
+#line 165 "griddle.y"
+{
+ yyval = buildExprList(NULL, yyvsp[0]);
+}
+#line 1549 "y.tab.c"
+ break;
+
+ case 42: /* exprList: exprList ',' expr */
+#line 169 "griddle.y"
+{
+ yyval = buildExprList(yyvsp[-2], yyvsp[0]);
+}
+#line 1557 "y.tab.c"
+ break;
+
+ case 43: /* expr: Name */
+#line 176 "griddle.y"
+{
+ yyval = buildExprP(ID_EXPR, yyvsp[0]);
+}
+#line 1565 "y.tab.c"
+ break;
+
+ case 44: /* expr: Number */
+#line 180 "griddle.y"
+{
+ yyval = buildExprI(NUM_EXPR, yyvsp[0]);
+}
+#line 1573 "y.tab.c"
+ break;
+
+ case 45: /* expr: String */
+#line 184 "griddle.y"
+{
+ yyval = buildExprP(STRING_EXPR, yyvsp[0]);
+}
+#line 1581 "y.tab.c"
+ break;
+
+ case 46: /* expr: BitString */
+#line 188 "griddle.y"
+{
+ yyval = buildExprP(BITSTRING_EXPR, yyvsp[0]);
+}
+#line 1589 "y.tab.c"
+ break;
+
+ case 47: /* expr: '(' expr ')' */
+#line 192 "griddle.y"
+{
+ yyval = buildExprP(EXPR_EXPR, yyvsp[-1]);
+}
+#line 1597 "y.tab.c"
+ break;
+
+ case 48: /* expr: SUB expr */
+#line 196 "griddle.y"
+{
+ yyval = buildExprIP(UNOP_EXPR, UMINUS, yyvsp[0]);
+}
+#line 1605 "y.tab.c"
+ break;
+
+ case 49: /* expr: NOT expr */
+#line 200 "griddle.y"
+{
+ yyval = buildExprIP(UNOP_EXPR, NOT, yyvsp[0]);
+}
+#line 1613 "y.tab.c"
+ break;
+
+ case 50: /* expr: A expr */
+#line 204 "griddle.y"
+{
+ yyval = buildExprIP(UNOP_EXPR, A, yyvsp[0]);
+}
+#line 1621 "y.tab.c"
+ break;
+
+ case 51: /* expr: O expr */
+#line 208 "griddle.y"
+{
+ yyval = buildExprIP(UNOP_EXPR, O, yyvsp[0]);
+}
+#line 1629 "y.tab.c"
+ break;
+
+ case 52: /* expr: R expr */
+#line 212 "griddle.y"
+{
+ yyval = buildExprIP(UNOP_EXPR, R, yyvsp[0]);
+}
+#line 1637 "y.tab.c"
+ break;
+
+ case 53: /* expr: expr ADD expr */
+#line 216 "griddle.y"
+{
+ yyval = buildExprPIP(BIN_EXPR, yyvsp[-2], ADD, yyvsp[0]);
+}
+#line 1645 "y.tab.c"
+ break;
+
+ case 54: /* expr: expr SUB expr */
+#line 220 "griddle.y"
+{
+ yyval = buildExprPIP(BIN_EXPR, yyvsp[-2], SUB, yyvsp[0]);
+}
+#line 1653 "y.tab.c"
+ break;
+
+ case 55: /* expr: expr MUL expr */
+#line 224 "griddle.y"
+{
+ yyval = buildExprPIP(BIN_EXPR, yyvsp[-2], MUL, yyvsp[0]);
+}
+#line 1661 "y.tab.c"
+ break;
+
+ case 56: /* expr: expr DIV expr */
+#line 228 "griddle.y"
+{
+ yyval = buildExprPIP(BIN_EXPR, yyvsp[-2], DIV, yyvsp[0]);
+}
+#line 1669 "y.tab.c"
+ break;
+
+ case 57: /* expr: expr MOD expr */
+#line 232 "griddle.y"
+{
+ yyval = buildExprPIP(BIN_EXPR, yyvsp[-2], MOD, yyvsp[0]);
+}
+#line 1677 "y.tab.c"
+ break;
+
+ case 58: /* expr: expr AND expr */
+#line 236 "griddle.y"
+{
+ yyval = buildExprPIP(BIN_EXPR, yyvsp[-2], AND, yyvsp[0]);
+}
+#line 1685 "y.tab.c"
+ break;
+
+ case 59: /* expr: expr OR expr */
+#line 240 "griddle.y"
+{
+ yyval = buildExprPIP(BIN_EXPR, yyvsp[-2], OR, yyvsp[0]);
+}
+#line 1693 "y.tab.c"
+ break;
+
+ case 60: /* expr: expr XOR expr */
+#line 244 "griddle.y"
+{
+ yyval = buildExprPIP(BIN_EXPR, yyvsp[-2], XOR, yyvsp[0]);
+}
+#line 1701 "y.tab.c"
+ break;
+
+
+#line 1705 "y.tab.c"
+
+ default: break;
+ }
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+
+ *++yyvsp = yyval;
+
+ /* Now 'shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+ {
+ const int yylhs = yyr1[yyn] - YYNTOKENS;
+ const int yyi = yypgoto[yylhs] + *yyssp;
+ yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+ ? yytable[yyi]
+ : yydefgoto[yylhs]);
+ }
+
+ goto yynewstate;
+
+
+/*--------------------------------------.
+| yyerrlab -- here on detecting error. |
+`--------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+ yyerror (YY_("syntax error"));
+ }
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+ /* Pacify compilers when the user code never invokes YYERROR and the
+ label yyerrorlab therefore never appears in user code. */
+ if (0)
+ YYERROR;
+ ++yynerrs;
+
+ /* Do not reclaim the symbols of the rule whose action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ /* Pop stack until we find a state that shifts the error token. */
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYSYMBOL_YYerror;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ YY_ACCESSING_SYMBOL (yystate), yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturnlab;
+
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturnlab;
+
+
+/*-----------------------------------------------------------.
+| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
+`-----------------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ goto yyreturnlab;
+
+
+/*----------------------------------------------------------.
+| yyreturnlab -- parsing is finished, clean up and return. |
+`----------------------------------------------------------*/
+yyreturnlab:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule whose action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
#endif
- if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
- yychar = -1;
- goto yynewstate; /* try again in the same state */
+ return yyresult;
+}
- }
-
- }
-
- /* reduction by production yyn */
-
-#ifdef YYDEBUG
- if( yydebug ) printf("reduce %d\n",yyn);
-#endif
- yyps -= yyr2[yyn];
- yypvt = yypv;
- yypv -= yyr2[yyn];
- yyval = yypv[1];
- yym=yyn;
- /* consult goto table to find next state */
- yyn = yyr1[yyn];
- yyj = yypgo[yyn] + *yyps + 1;
- if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
- switch(yym){
-
-case 8:
-# line 35 "griddle.y"
-{
- executeRawline(yypvt[-0]);
-} break;
-case 9:
-# line 42 "griddle.y"
-{
- executeAssignment(yypvt[-2], yypvt[-0]);
-} break;
-case 10:
-# line 49 "griddle.y"
-{
- executeInclude(yypvt[-0]);
-} break;
-case 11:
-# line 56 "griddle.y"
-{
- yyval = executeDefine(yypvt[-3], yypvt[-2], yypvt[-1]);
-} break;
-case 12:
-# line 60 "griddle.y"
-{
- yyval = executeDefine(yypvt[-2], yypvt[-1], NULL);
-} break;
-case 13:
-# line 67 "griddle.y"
-{
- yyval = buildFieldList(NULL, yypvt[-0]);
-} break;
-case 14:
-# line 71 "griddle.y"
-{
- yyval = buildFieldList(yypvt[-1], yypvt[-0]);
-} break;
-case 15:
-# line 78 "griddle.y"
-{
- yyval = yypvt[-0];
-} break;
-case 16:
-# line 82 "griddle.y"
-{
- yyval = invisifyField(yypvt[-0]);
-} break;
-case 17:
-# line 89 "griddle.y"
-{
- yyval = buildField(yypvt[-2], buildExpr(NUM_EXPR, 1), yypvt[-0], NULL);
-} break;
-case 18:
-# line 93 "griddle.y"
-{
- yyval = buildField(yypvt[-5], yypvt[-3], yypvt[-0], NULL);
-} break;
-case 19:
-# line 97 "griddle.y"
-{
- yyval = buildField(yypvt[-4], buildExpr(NUM_EXPR, 1), yypvt[-2], yypvt[-0]);
-} break;
-case 20:
-# line 101 "griddle.y"
-{
- yyval = buildField(yypvt[-7], yypvt[-5], yypvt[-2], yypvt[-0]);
-} break;
-case 21:
-# line 107 "griddle.y"
-{ yyval = (int) FIELD_CHARACTER; } break;
-case 22:
-# line 108 "griddle.y"
-{ yyval = (int) FIELD_BIN15; } break;
-case 23:
-# line 109 "griddle.y"
-{ yyval = (int) FIELD_BIN31; } break;
-case 24:
-# line 110 "griddle.y"
-{ yyval = (int) FIELD_BIT; } break;
-case 25:
-# line 111 "griddle.y"
-{ yyval = (int) FIELD_WORDS; } break;
-case 26:
-# line 112 "griddle.y"
-{ yyval = (int) FIELD_REGID; } break;
-case 27:
-# line 113 "griddle.y"
-{ yyval = (int) FIELD_OBJID; } break;
-case 28:
-# line 114 "griddle.y"
-{ yyval = (int) FIELD_AVAID; } break;
-case 29:
-# line 115 "griddle.y"
-{ yyval = (int) FIELD_FATWORD; } break;
-case 30:
-# line 116 "griddle.y"
-{ yyval = (int) FIELD_ENTITY; } break;
-case 31:
-# line 117 "griddle.y"
-{ yyval = (int) FIELD_BYTE; } break;
-case 32:
-# line 118 "griddle.y"
-{ yyval = (int) FIELD_VARSTRING; } break;
-case 33:
-# line 123 "griddle.y"
-{
- executeUse(yypvt[-2], yypvt[-1], yypvt[-0]);
-} break;
-case 34:
-# line 127 "griddle.y"
-{
- executeUse(yypvt[-1], NULL, yypvt[-0]);
-} break;
-case 35:
-# line 134 "griddle.y"
-{
- yyval = buildObjectTail(yypvt[-3], yypvt[-1]);
-} break;
-case 36:
-# line 138 "griddle.y"
-{
- yyval = buildObjectTail(NULL, yypvt[-1]);
-} break;
-case 37:
-# line 145 "griddle.y"
-{
- yyval = buildPropertyList(NULL, yypvt[-0]);
-} break;
-case 38:
-# line 149 "griddle.y"
-{
- yyval = buildPropertyList(yypvt[-1], yypvt[-0]);
-} break;
-case 39:
-# line 156 "griddle.y"
-{
- yyval = buildProperty(yypvt[-2], yypvt[-0]);
-} break;
-case 40:
-# line 163 "griddle.y"
-{
- yyval = buildExprList(NULL, yypvt[-0]);
-} break;
-case 41:
-# line 167 "griddle.y"
-{
- yyval = buildExprList(yypvt[-2], yypvt[-0]);
-} break;
-case 42:
-# line 174 "griddle.y"
-{
- yyval = buildExpr(ID_EXPR, yypvt[-0]);
-} break;
-case 43:
-# line 178 "griddle.y"
-{
- yyval = buildExpr(NUM_EXPR, yypvt[-0]);
-} break;
-case 44:
-# line 182 "griddle.y"
-{
- yyval = buildExpr(STRING_EXPR, yypvt[-0]);
-} break;
-case 45:
-# line 186 "griddle.y"
-{
- yyval = buildExpr(BITSTRING_EXPR, yypvt[-0]);
-} break;
-case 46:
-# line 190 "griddle.y"
-{
- yyval = buildExpr(EXPR_EXPR, yypvt[-1]);
-} break;
-case 47:
-# line 194 "griddle.y"
-{
- yyval = buildExpr(UNOP_EXPR, UMINUS, yypvt[-0]);
-} break;
-case 48:
-# line 198 "griddle.y"
-{
- yyval = buildExpr(UNOP_EXPR, NOT, yypvt[-0]);
-} break;
-case 49:
-# line 202 "griddle.y"
-{
- yyval = buildExpr(UNOP_EXPR, A, yypvt[-0]);
-} break;
-case 50:
-# line 206 "griddle.y"
-{
- yyval = buildExpr(UNOP_EXPR, O, yypvt[-0]);
-} break;
-case 51:
-# line 210 "griddle.y"
-{
- yyval = buildExpr(UNOP_EXPR, R, yypvt[-0]);
-} break;
-case 52:
-# line 214 "griddle.y"
-{
- yyval = buildExpr(BIN_EXPR, yypvt[-2], ADD, yypvt[-0]);
-} break;
-case 53:
-# line 218 "griddle.y"
-{
- yyval = buildExpr(BIN_EXPR, yypvt[-2], SUB, yypvt[-0]);
-} break;
-case 54:
-# line 222 "griddle.y"
-{
- yyval = buildExpr(BIN_EXPR, yypvt[-2], MUL, yypvt[-0]);
-} break;
-case 55:
-# line 226 "griddle.y"
-{
- yyval = buildExpr(BIN_EXPR, yypvt[-2], DIV, yypvt[-0]);
-} break;
-case 56:
-# line 230 "griddle.y"
-{
- yyval = buildExpr(BIN_EXPR, yypvt[-2], MOD, yypvt[-0]);
-} break;
-case 57:
-# line 234 "griddle.y"
-{
- yyval = buildExpr(BIN_EXPR, yypvt[-2], AND, yypvt[-0]);
-} break;
-case 58:
-# line 238 "griddle.y"
-{
- yyval = buildExpr(BIN_EXPR, yypvt[-2], OR, yypvt[-0]);
-} break;
-case 59:
-# line 242 "griddle.y"
-{
- yyval = buildExpr(BIN_EXPR, yypvt[-2], XOR, yypvt[-0]);
-} break;
- }
- goto yystack; /* stack new state and value */
-
- }
diff --git a/mamelink/griddle/griddle.y b/mamelink/griddle/griddle.y
index 4100211..a7f44a9 100644
--- a/mamelink/griddle/griddle.y
+++ b/mamelink/griddle/griddle.y
@@ -1,5 +1,7 @@
%{
+#define DEFINE_EXTERNS
#include "griddleDefs.h"
+#define YYSTYPE intptr_t
%}
%token Name Number String BitString Rawline
@@ -54,11 +56,11 @@ includeStatement:
defineStatement:
DEFINE expr String fieldList ENDDEFINE
{
- $$ = executeDefine($2, $3, $4);
+ executeDefine($2, $3, $4);
}
| DEFINE expr String ENDDEFINE
{
- $$ = executeDefine($2, $3, NULL);
+ executeDefine($2, $3, NULL);
}
;
@@ -87,7 +89,7 @@ field:
basicField:
Name ':' fieldType
{
- $$ = buildField($1, buildExpr(NUM_EXPR, 1), $3, NULL);
+ $$ = buildField($1, buildExprI(NUM_EXPR, 1), $3, NULL);
}
| Name '(' expr ')' ':' fieldType
{
@@ -95,7 +97,7 @@ basicField:
}
| Name ':' fieldType '=' exprList
{
- $$ = buildField($1, buildExpr(NUM_EXPR, 1), $3, $5);
+ $$ = buildField($1, buildExprI(NUM_EXPR, 1), $3, $5);
}
| Name '(' expr ')' ':' fieldType '=' exprList
{
@@ -172,74 +174,74 @@ exprList:
expr:
Name
{
- $$ = buildExpr(ID_EXPR, $1);
+ $$ = buildExprP(ID_EXPR, $1);
}
| Number
{
- $$ = buildExpr(NUM_EXPR, $1);
+ $$ = buildExprI(NUM_EXPR, $1);
}
| String
{
- $$ = buildExpr(STRING_EXPR, $1);
+ $$ = buildExprP(STRING_EXPR, $1);
}
| BitString
{
- $$ = buildExpr(BITSTRING_EXPR, $1);
+ $$ = buildExprP(BITSTRING_EXPR, $1);
}
| '(' expr ')'
{
- $$ = buildExpr(EXPR_EXPR, $2);
+ $$ = buildExprP(EXPR_EXPR, $2);
}
| SUB expr %prec UMINUS
{
- $$ = buildExpr(UNOP_EXPR, UMINUS, $2);
+ $$ = buildExprIP(UNOP_EXPR, UMINUS, $2);
}
| NOT expr
{
- $$ = buildExpr(UNOP_EXPR, NOT, $2);
+ $$ = buildExprIP(UNOP_EXPR, NOT, $2);
}
| A expr
{
- $$ = buildExpr(UNOP_EXPR, A, $2);
+ $$ = buildExprIP(UNOP_EXPR, A, $2);
}
| O expr
{
- $$ = buildExpr(UNOP_EXPR, O, $2);
+ $$ = buildExprIP(UNOP_EXPR, O, $2);
}
| R expr
{
- $$ = buildExpr(UNOP_EXPR, R, $2);
+ $$ = buildExprIP(UNOP_EXPR, R, $2);
}
| expr ADD expr
{
- $$ = buildExpr(BIN_EXPR, $1, ADD, $3);
+ $$ = buildExprPIP(BIN_EXPR, $1, ADD, $3);
}
| expr SUB expr
{
- $$ = buildExpr(BIN_EXPR, $1, SUB, $3);
+ $$ = buildExprPIP(BIN_EXPR, $1, SUB, $3);
}
| expr MUL expr
{
- $$ = buildExpr(BIN_EXPR, $1, MUL, $3);
+ $$ = buildExprPIP(BIN_EXPR, $1, MUL, $3);
}
| expr DIV expr
{
- $$ = buildExpr(BIN_EXPR, $1, DIV, $3);
+ $$ = buildExprPIP(BIN_EXPR, $1, DIV, $3);
}
| expr MOD expr
{
- $$ = buildExpr(BIN_EXPR, $1, MOD, $3);
+ $$ = buildExprPIP(BIN_EXPR, $1, MOD, $3);
}
| expr AND expr
{
- $$ = buildExpr(BIN_EXPR, $1, AND, $3);
+ $$ = buildExprPIP(BIN_EXPR, $1, AND, $3);
}
| expr OR expr
{
- $$ = buildExpr(BIN_EXPR, $1, OR, $3);
+ $$ = buildExprPIP(BIN_EXPR, $1, OR, $3);
}
| expr XOR expr
{
- $$ = buildExpr(BIN_EXPR, $1, XOR, $3);
+ $$ = buildExprPIP(BIN_EXPR, $1, XOR, $3);
}
;
diff --git a/mamelink/griddle/griddleDefs.h b/mamelink/griddle/griddleDefs.h
index 924f905..97ff7e6 100644
--- a/mamelink/griddle/griddleDefs.h
+++ b/mamelink/griddle/griddleDefs.h
@@ -1,4 +1,8 @@
#include
+#include
+#include
+#include
+#include
#define Case break; case
#define Default break; default
@@ -74,11 +78,12 @@ typedef enum {
VAL_REGION, VAL_BITSTRING
} valueType;
+// TODO: Nope, this absolutely does not work
typedef struct {
exprType type;
- int part1;
- int part2;
- int part3;
+ intptr_t part1;
+ intptr_t part2;
+ intptr_t part3;
} expression;
typedef struct exprListStruct {
@@ -176,10 +181,14 @@ typedef struct {
byte *prototype;
} classDescriptor;
-#define HASH_MAX 512
-symbol *symbolTable[HASH_MAX];
+#ifdef DEFINE_EXTERNS
+#define EXTERN
+#else
+#define EXTERN extern
+#endif
-char *malloc();
+#define HASH_MAX 512
+EXTERN symbol *symbolTable[HASH_MAX];
#define typeAlloc(t) ((t *)malloc(sizeof(t)))
#define typeAllocMulti(t,n) ((t *)malloc((n)*sizeof(t)))
@@ -192,50 +201,49 @@ typedef struct fileListStruct {
char *saveName;
} fileList;
-fileList *inputStack;
-fileList *bottomOfInputStack;
-FILE *currentInput;
-int currentLineNumber;
-char *currentFileName;
-int globalIdCounter;
-int globalIdAdjustment;
-int objectBase;
+EXTERN fileList *inputStack;
+EXTERN fileList *bottomOfInputStack;
+EXTERN FILE *currentInput;
+EXTERN int currentLineNumber;
+EXTERN char *currentFileName;
+EXTERN int globalIdCounter;
+EXTERN int globalIdAdjustment;
+EXTERN int objectBase;
-FILE *griFile;
-FILE *rawFile;
-FILE *cvFile;
-FILE *indirFile;
-int indirectPass;
-stringList *cvInput;
-char *classFileName;
-boolean debug;
-boolean testMode;
-boolean assignRelativeIds;
-int useStartCount;
-boolean insideDefinition;
-boolean announceIncludes;
+EXTERN FILE *griFile;
+EXTERN FILE *rawFile;
+EXTERN FILE *cvFile;
+EXTERN FILE *indirFile;
+EXTERN int indirectPass;
+EXTERN stringList *cvInput;
+EXTERN char *classFileName;
+EXTERN boolean debug;
+EXTERN boolean testMode;
+EXTERN boolean assignRelativeIds;
+EXTERN int useStartCount;
+EXTERN boolean insideDefinition;
+EXTERN boolean announceIncludes;
#define MAXCLASS 256
-classDescriptor *classDefs[MAXCLASS+1];
+EXTERN classDescriptor *classDefs[MAXCLASS+1];
#define MAXNOID 256
-int objectCount;
-int rawCount;
-object *noidArray[MAXNOID];
-object *altNoidArray[MAXNOID];
-boolean noidAlive[MAXNOID];
-boolean fredModeLexing;
-char *fredLexString;
-
-boolean promptDefault;
-char pathname[80];
-char regionName[80];
-byte cv[512];
-int cvLength;
-int displayNoid;
-object *undeleteBuffer;
-int previousClass;
+EXTERN int objectCount;
+EXTERN int rawCount;
+EXTERN object *noidArray[MAXNOID];
+EXTERN object *altNoidArray[MAXNOID];
+EXTERN boolean noidAlive[MAXNOID];
+EXTERN boolean fredModeLexing;
+EXTERN char *fredLexString;
+EXTERN boolean promptDefault;
+EXTERN char pathname[80];
+EXTERN char regionName[80];
+extern byte cv[512];
+extern int cvLength;
+EXTERN int displayNoid;
+EXTERN object *undeleteBuffer;
+EXTERN int previousClass;
/* C64 locations */
#define KEYBOARD_OVERRIDE (word)0x0010
@@ -289,10 +297,23 @@ typedef struct {
int region;
} indirectEntry;
-indirectEntry *indirTable;
-int indirCount;
-char indirName[80];
-int indirArgc;
-char *indirArgv[50];
-int indirRegion;
-boolean sortObjects;
+EXTERN indirectEntry *indirTable;
+EXTERN int indirCount;
+EXTERN char indirName[80];
+EXTERN int indirArgc;
+EXTERN char *indirArgv[50];
+EXTERN int indirRegion;
+EXTERN boolean sortObjects;
+
+void executeRawline(object *obj);
+void executeAssignment(symbol *name, expression *expr);
+void executeInclude(char *filename);
+void executeDefine(expression *classExpr, char *name, fieldList *fields);
+fieldList *buildFieldList(fieldList *list, field *new);
+field *invisifyField(field *aField);
+field *buildField(symbol *name, expression *dimension, fieldType type, exprList *initList);
+expression *buildExpr(exprType type, intptr_t arg1, intptr_t arg2, intptr_t arg3);
+expression *buildExprI(exprType type, intptr_t arg1);
+expression *buildExprP(exprType type, void *arg1);
+expression *buildExprIP(exprType type, intptr_t arg1, void *arg2);
+expression *buildExprPIP(exprType type, void *arg1, intptr_t arg2, void *arg3);
diff --git a/mamelink/griddle/lexer.c b/mamelink/griddle/lexer.c
index 5045542..4e1f8cb 100644
--- a/mamelink/griddle/lexer.c
+++ b/mamelink/griddle/lexer.c
@@ -2,7 +2,7 @@
#include "y.tab.h"
extern int yylval;
-int yydebug;
+extern int yydebug;
typedef enum {
C_SKIP, C_ZERO, C_DIG, C_ALPH, C_QUOTE, C_APOSTROPHE, C_LIT, C_SLASH,
@@ -563,6 +563,7 @@ setKeywordMinlengths()
int i;
for (i = 0; keywords[i].string != NULL; ++i) {
+ keywords[i].string = strdup(keywords[i].string);
trailer = index(keywords[i].string, '/');
if (trailer == NULL) {
keywords[i].minlength = strlen(keywords[i].string);
diff --git a/mamelink/griddle/main.c b/mamelink/griddle/main.c
index e77d3fd..7d3d926 100644
--- a/mamelink/griddle/main.c
+++ b/mamelink/griddle/main.c
@@ -3,7 +3,7 @@
*/
#include "griddleDefs.h"
-int yydebug;
+extern int yydebug;
#define argcheck(i,m) if (++i >= argc) { error(m); exit(1); }
#define argfile(fd,m,t) { \
@@ -108,11 +108,11 @@ initialize(argc, argv)
args = argv + 1;
if ((defineFileName = getenv("GHUDEFINES")) == NULL)
- queueInputFile("/u0/habitat/defines.ghu");
+ queueInputFile("defines.ghu");
else
queueInputFile(defineFileName);
if ((classFileName = getenv("CLASSINFO")) == NULL)
- classFileName = "/u0/habitat/class.dat";
+ classFileName = "class.dat";
for (i=1; i 1)
- sprintf(temp, "%s/u0/habitat/fredStats", argv[1]);
+ sprintf(temp, "%sfredStats", argv[1]);
else
- strcpy(temp, "/u0/habitat/fredStats");
+ strcpy(temp, "fredStats");
if ((statFyle = fopen(temp, "r")) != NULL) {
for (i=0; i<128; ++i)
fredStats[i] = getw(statFyle);
diff --git a/mamelink/griddle/util/flushfstats.c b/mamelink/griddle/util/flushfstats.c
index 23b3584..eec633f 100644
--- a/mamelink/griddle/util/flushfstats.c
+++ b/mamelink/griddle/util/flushfstats.c
@@ -5,7 +5,7 @@ main()
FILE *statFyle;
int i;
- if ((statFyle = fopen("/u0/habitat/fredStats", "w")) != NULL) {
+ if ((statFyle = fopen("fredStats", "w")) != NULL) {
for (i=0; i<128; ++i)
putw(0, statFyle);
fclose(statFyle);
diff --git a/mamelink/griddle/y.tab.h b/mamelink/griddle/y.tab.h
new file mode 100644
index 0000000..e0f8595
--- /dev/null
+++ b/mamelink/griddle/y.tab.h
@@ -0,0 +1,148 @@
+/* A Bison parser, made by GNU Bison 3.8.2. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
+ Inc.
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 this program. If not, see . */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+ especially those whose name start with YY_ or yy_. They are
+ private implementation details that can be changed or removed. */
+
+#ifndef YY_YY_Y_TAB_H_INCLUDED
+# define YY_YY_Y_TAB_H_INCLUDED
+/* Debug traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token kinds. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ enum yytokentype
+ {
+ YYEMPTY = -2,
+ YYEOF = 0, /* "end of file" */
+ YYerror = 256, /* error */
+ YYUNDEF = 257, /* "invalid token" */
+ Name = 258, /* Name */
+ Number = 259, /* Number */
+ String = 260, /* String */
+ BitString = 261, /* BitString */
+ Rawline = 262, /* Rawline */
+ INCLUDE = 263, /* INCLUDE */
+ DEFINE = 264, /* DEFINE */
+ ENDDEFINE = 265, /* ENDDEFINE */
+ USE = 266, /* USE */
+ AVAID = 267, /* AVAID */
+ BIN15 = 268, /* BIN15 */
+ BIN31 = 269, /* BIN31 */
+ BIT = 270, /* BIT */
+ BYTE = 271, /* BYTE */
+ CHARACTER = 272, /* CHARACTER */
+ ENTITY = 273, /* ENTITY */
+ FATWORD = 274, /* FATWORD */
+ OBJID = 275, /* OBJID */
+ REGID = 276, /* REGID */
+ VARSTRING = 277, /* VARSTRING */
+ WORDS = 278, /* WORDS */
+ A = 279, /* A */
+ O = 280, /* O */
+ R = 281, /* R */
+ OR = 282, /* OR */
+ XOR = 283, /* XOR */
+ AND = 284, /* AND */
+ ADD = 285, /* ADD */
+ SUB = 286, /* SUB */
+ MUL = 287, /* MUL */
+ DIV = 288, /* DIV */
+ MOD = 289, /* MOD */
+ UMINUS = 290, /* UMINUS */
+ NOT = 291 /* NOT */
+ };
+ typedef enum yytokentype yytoken_kind_t;
+#endif
+/* Token kinds. */
+#define YYEMPTY -2
+#define YYEOF 0
+#define YYerror 256
+#define YYUNDEF 257
+#define Name 258
+#define Number 259
+#define String 260
+#define BitString 261
+#define Rawline 262
+#define INCLUDE 263
+#define DEFINE 264
+#define ENDDEFINE 265
+#define USE 266
+#define AVAID 267
+#define BIN15 268
+#define BIN31 269
+#define BIT 270
+#define BYTE 271
+#define CHARACTER 272
+#define ENTITY 273
+#define FATWORD 274
+#define OBJID 275
+#define REGID 276
+#define VARSTRING 277
+#define WORDS 278
+#define A 279
+#define O 280
+#define R 281
+#define OR 282
+#define XOR 283
+#define AND 284
+#define ADD 285
+#define SUB 286
+#define MUL 287
+#define DIV 288
+#define MOD 289
+#define UMINUS 290
+#define NOT 291
+
+/* Value type. */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+
+int yyparse (void);
+
+
+#endif /* !YY_YY_Y_TAB_H_INCLUDED */