const char *snl;
extern int rem(int p, int q);
extern void readsymbol(int typeof_P, void *p);
extern real float(int n);
extern char * tostring(int p);
extern char * substring(char *s, int f, int t);
extern int freespace();
extern void svc(int n, struct (null) *r);
extern int addr(int typeof_P, void *p);
extern int *integer(int n);
extern short *shortinteger(int n);
extern char *byteinteger(int n);
extern char * *string(int n);
extern struct (null) record ;
(/*should not get here any more*/ int n;
/*or here*/)
extern real *real(int n);
extern long real *longreal(int n);
extern char *length(char *s);
extern char *charno(char *s, int n);
extern int int(real x);
extern int intpt(real x);
extern void iocp(int n);
extern int typeof(int typeof_N, void *n);
extern int sizeof(int typeof_N, void *n);
extern real fracpt(real x);
extern void prompt(char *s);
extern int nextsymbol();
extern void skipsymbol();
extern void printsymbol(int sym);
extern void printstring(char *s);
extern void write(int v, int p);
extern void selectinput(int n);
extern void selectoutput(int n);
extern void openinput(int n, char *fd);
extern void openoutput(int n, char *fd);
extern void closeinput();
extern void closeoutput();
extern void resetinput();
extern void resetoutput();
extern char * time();
extern char * date();
extern int cputime();
extern int *comreg(int n);
extern void read(int typeof_X, void *x);
extern void print(real val, int before, int after);
extern void printfl(real val, int places);
extern void space();
extern void spaces(int n);
extern void newline();
extern void newlines(int n);
typedef struct FILEFM{int unit; int owner; int n1; int n2;} filefm;
typedef struct EVENTFM{int event; int sub; int extra; char *message; int pc; int x;} eventfm;
extern struct EVENTFM event;
extern void closeoutput();
extern void closeinput();
extern void openoutput(int i, char *s);
extern void openinput(int i, char *s);
typedef struct IMPCOMFM{int statements; int flags; int code; int gla; int diags; int perm; char *file; char *option;} impcomfm;
extern struct IMPCOMFM impcom;
int main(int argc, char **argv) {
const char *version;
static int sparenames;
typedef struct ARFM{short class; short sub; short link; short ptype; short papp; short pformat; short x; short pos;} arfm;
typedef struct TAGFM{int app; int format; short flags; short index; short text; short link;} tagfm;
// bounds [0 : 15]
// do it now: const char {*,2}amap {NO INIT}
// bounds [0 : 15]
// do it now: const char {*,2}atoms {NO INIT}
// ON DIM DO: struct ARFM {*,0}ar
// bounds [1 : 520]
DIM 0x0001 0x0001
static int class;
static int x;
static int atom1;
static int atom2;
static int subatom;
static int type;
static int app;
static int format;
int hashvalue;
static int faulty;
static int faultrate;
static int lines;
static int textline;
static int margin;
static int errormargin;
static int errorsym;
static int column;
static int stats;
static int monpos;
static int sym;
static int symtype;
static int quote;
static int endmark;
static int cont;
static int csym;
static int decl;
static int dim;
static int specgiven;
static int escapeclass;
static int protection;
static int atomflags;
static int otype;
static int realsln;
static int last1;
static int gentype;
static int ptype;
static int papp;
static int pformat;
static int force;
static int g;
static int gg;
static int mapgg;
static int fdef;
static int this;
static int nmin;
static int nmax;
static int rbase;
static int stbase;
static int gmin;
static int dmax;
static int tmin;
static int ss;
char *includefile;
static int includelist;
static int includelevel;
static int include;
static int perm;
static int progmode;
static int sstype;
static int specmode;
static int ocount;
static int limit;
static int copy;
static int order;
static int forwarn;
static int dubious;
static int dp;
static int pos1;
static int pos2;
static int pos;
static int dimension;
static int local;
static int fmbase;
static int searchbase;
static int formatlist;
int recid;
// bounds [0 : 133]
// do it now: static char {*,1}char {NO INIT}
// ON DIM DO: int {*,0}litpool
// bounds [0 : 50]
DIM 0x0001 0x0001
static int lit;
static int lp;
static int blockx;
static int list;
static int control;
static int diag;
// ON DIM DO: short {*,0}hash
// bounds [0 : 2047]
DIM 0x0001 0x0001
// ON DIM DO: struct TAGFM {*,0}tag
// bounds [0 : 800]
DIM 0x0001 0x0001
// ON DIM DO: short {*,0}dict
// bounds [1 : 6000]
DIM 0x0001 0x0001
// ON DIM DO: char {*,0}buff
// bounds [1 : 512]
DIM 0x0001 0x0001
static int bp;
// bounds [0 : 255]
// do it now: const char * {*,2}text {NO INIT}
static int gmax;
// bounds [200 : 255]
// do it now: static short {*,1}phrase {NO INIT}
// bounds [130 : 179]
// do it now: const char {*,2}atomic {NO INIT}
// bounds [0 : 119]
// do it now: const short {*,2}initial {NO INIT}
// bounds [0 : 1720]
// do it now: static short {*,1}gram {NO INIT}
// bounds [0 : 1720]
// do it now: static short {*,1}glink {NO INIT}
// bounds [32 : 607]
// do it now: const short {*,2}kdict {NO INIT}
goto L_0001;
void flushbuffer()
{
int j;
if (faulty != 0) goto L_0002;
selectoutput(1);
for (j = 1; j += 1; j != bp) {
printsymbol(buff[j]);
}
L_0006:
selectoutput(2);
L_0002:
bp = 0;
return(0);
}
L_0001:
goto L_0007;
void printident(int p, int mode)
{
int j;
int ad;
p = tag[p].text;
if (p != 0) goto L_0008;
if (mode == 0) goto L_0009;
bp = (bp + 1);
buff[bp] = 63;
L_0009:
return;
L_0008:
ad = addr(dict[(p + 1)]);
if (mode != 0) goto L_000a;
printstring(string(ad));
goto L_000b;
L_000a:
for (j = (ad + 1); j += 1; j != (ad + *byteinteger(ad))) {
bp = (bp + 1);
buff[bp] = *byteinteger(j);
}
L_000f:
L_000b:
L_0007:
goto L_0010;
void abandon(int n)
{
// bounds [0 : 9]
/*todo: gcc jump table extension*/ void **reason;
int stream;
stream = 2;
for (;;) {
L_0011:
if (sym == 10) goto L_0012;
newline();
L_0012:
printsymbol(42);
write(lines, 4);
space();
goto *reason[n];
reason_0:
printstring("compiler error!");
goto U_00a9;
reason_1:
printstring("switch vector too large");
goto U_00a9;
reason_2:
printstring("too many names");
goto U_00a9;
reason_3:
printstring("program too complex");
goto U_00a9;
reason_4:
printstring("feature not implemented");
goto U_00a9;
reason_5:
printstring("input ended: ");
if (quote == 0) goto L_0013;
if (quote >= 0) goto L_0014;
printsymbol(39);
goto L_0015;
L_0014:
printsymbol(34);
L_0015:
goto L_0016;
L_0013:
printstring("%endof");
if (progmode < 0) goto L_0017;
printstring("program");
goto L_0018;
L_0017:
printstring("file");
L_0018:
L_0016:
printstring(" missing?");
goto U_00a9;
reason_6:
printstring("too many faults!");
goto U_00a9;
reason_7:
printstring("string constant too long");
goto U_00a9;
reason_8:
printstring("dictionary full");
goto U_00a9;
reason_9:
printstring("Included file ");
U_00a9:
newline();
printstring("*** compilation abandoned ***");
newline();
if (stream != 0) goto L_0019;
goto L_001a;
L_0019:
closeoutput();
stream = 0;
selectoutput(0);
}
L_001a:
exit(0);
L_0010:
goto L_001b;
void op(int code, int param)
{
buff[(bp + 1)] = code;
buff[(bp + 2)] = (param >> 8);
buff[(bp + 3)] = param;
bp = (bp + 3);
L_001b:
goto L_001c;
void setconst(int m)
{
buff[(bp + 1)] = 78;
buff[(bp + 5)] = m;
m = (m >> 8);
buff[(bp + 4)] = m;
m = (m >> 8);
buff[(bp + 3)] = m;
m = (m >> 8);
buff[(bp + 2)] = m;
bp = (bp + 5);
L_001c:
goto L_001d;
void compileblock(int level, int blocktag, int dmin, int tmax, int id)
{
int gapp();
void deletenames(int quiet);
void analyse();
void compile();
int open;
open = 16384;
int dbase;
dbase = dmax;
int tbase;
tbase = tmax;
int tstart;
tstart = tmax;
int label;
label = 4;
int access;
access = 1;
int inhibit;
inhibit = 0;
short *bflags;
bflags = &tag[blocktag].flags;
int blocktype;
blocktype = ((*bflags >> 4) & 7);
int blockform;
blockform = (*bflags & 15);
int blockfm;
blockfm = tag[blocktag].format;
int blockotype;
blockotype = otype;
int *blockapp;
blockapp = &tag[blocktag].app;
int l;
int newapp;
goto L_001d;
void fault(int n)
{
// bounds [-5 : 22]
/*todo: gcc jump table extension*/ void **fm;
int st;
goto L_001d;
void printss()
{
int s;
int p;
if (pos != 0) goto L_001e;
return;
L_001e:
space();
p = 1;
for (;;) {
L_001f:
if (p != pos1) goto L_0020;
printsymbol(94);
L_0020:
if (p != pos) goto L_0021;
goto L_0022;
L_0021:
s = char[p];
p = (p + 1);
if (s == 10) goto L_0023;
if (s != 37) goto L_0024;
if (p != pos) goto L_0024;
L_0023:
goto L_0022;
L_0024:
if (s >= 32) goto L_0025;
if (s != 12) goto L_0026;
s = 10;
goto L_0027;
L_0026:
s = 32;
L_0027:
L_0025:
printsymbol(s);
}
L_0022:
if (list > 0) goto L_0028;
pos = 0;
L_0028:
L_001d:
if (pos2 <= pos1) goto L_0029;
pos1 = pos2;
L_0029:
if (sym == 10) goto L_002a;
newline();
L_002a:
st = 0;
if (n != (-3)) goto L_002b;
st = 2;
L_002b:
for (;;) {
L_002c:
selectoutput(st);
if (n >= 0) goto L_002d;
printsymbol(63);
pos1 = 0;
goto L_002e;
L_002d:
printsymbol(42);
L_002e:
if (st == 0) goto L_002f;
if (list > 0) goto L_0030;
if (pos1 == 0) goto L_0030;
spaces((pos1 + margin));
printstring(" ! ");
L_0030:
goto L_0031;
L_002f:
if (include == 0) goto L_0032;
printstring(includefile);
L_0032:
write(lines, 4);
printsymbol(csym);
space();
L_0031:
if ((-5) > n) goto L_0033;
if (n > 22) goto L_0033;
goto *fm[n];
L_0033:
printstring("fault");
write(n, 2);
goto U_00c6;
fm_-5:
printstring("Dubious statement");
dubious = 0;
goto U_00c7;
fm_-4:
printstring("Non-local");
pos1 = forwarn;
forwarn = 0;
goto U_00c6;
fm_-3:
printident(x, 0);
printstring(" unused");
goto U_00c8;
fm_-2:
printstring("\"}\"");
goto U_00c9;
fm_-1:
printstring("access");
goto U_00c7;
fm_0:
printstring("form");
goto U_00c6;
fm_1:
printstring("atom");
goto U_00c6;
fm_2:
printstring("not declared");
goto U_00c6;
fm_3:
printstring("too complex");
goto U_00c6;
fm_4:
printstring("duplicate ");
printident(x, 0);
goto U_00c6;
fm_5:
printstring("type");
goto U_00c6;
fm_6:
printstring("match");
goto U_00c7;
fm_7:
printstring("context");
goto U_00c7;
fm_21:
printstring("context ");
printident(this, 0);
goto U_00c6;
fm_8:
printstring("%cycle");
goto U_00c9;
fm_9:
printstring("%start");
goto U_00c9;
fm_10:
printstring("size");
if (pos1 != 0) goto L_0034;
write(lit, 1);
L_0034:
goto U_00c6;
fm_11:
printstring("bounds");
if (ocount < 0) goto L_0035;
write(ocount, 1);
L_0035:
goto U_00c6;
fm_12:
printstring("index");
goto U_00c6;
fm_13:
printstring("order");
goto U_00c7;
fm_14:
printstring("not a location");
goto U_00c6;
fm_15:
printstring("%begin");
goto U_00c9;
fm_16:
printstring("%end");
goto U_00c9;
fm_17:
printstring("%repeat");
goto U_00c9;
fm_18:
printstring("%finish");
goto U_00c9;
fm_19:
printstring("result");
goto U_00c9;
fm_22:
printstring("format");
goto U_00c6;
fm_20:
printsymbol(34);
printident(x, 0);
printsymbol(34);
U_00c9:
printstring(" missing");
goto U_00c8;
U_00c7:
pos1 = 0;
U_00c6:
printss();
U_00c8:
newline();
if (st != 2) goto L_0036;
goto L_0037;
L_0036:
st = 2;
}
L_0037:
if (n < 0) goto L_0038;
if ((diag & 4096) == 0) goto L_0039;
exit(0);
L_0039:
if (n == 13) goto L_003a;
ocount = (-1);
gg = 0;
copy = 0;
quote = 0;
searchbase = 0;
escapeclass = 0;
gg = 0;
L_003a:
faulty = (faulty + 1);
faultrate = (faultrate + 3);
if (faultrate <= 30) goto L_003b;
abandon(6);
L_003b:
if (faultrate > 0) goto L_003c;
faultrate = 3;
L_003c:
L_0038:
tbase = tstart;
if (list > 0) goto L_003d;
if (sym == 10) goto L_003d;
errormargin = column;
errorsym = sym;
sym = 10;
L_003d:
for (;;) {
L_003e:
dmin = (dmin - 1);
dict[dmin] = (-1);
if (dmax != dmin) goto L_003f;
abandon(2);
L_003f:
if (list <= 0) goto L_0040;
if (level <= 0) goto L_0040;
write(lines, 5);
spaces(((level * 3) - 1));
if (blocktag != 0) goto L_0041;
printstring("Begin");
goto L_0042;
L_0041:
printstring("Procedure ");
printident(blocktag, 0);
L_0042:
newline();
L_0040:
if (blocktag == 0) goto L_0043;
analyse();
if (ss == 0) goto L_0044;
compile();
L_0044:
if (blockotype == 0) goto L_0045;
if ((*bflags & 128) != 0) goto L_0046;
if (progmode > 0) goto L_0047;
if (level != 1) goto L_0047;
progmode = (-1);
goto L_0048;
L_0047:
fault(7);
L_0048:
L_0046:
L_0045:
newapp = gapp();
if (specgiven == 0) goto L_0049;
if (newapp == *blockapp) goto L_004a;
fault(6);
L_004a:
L_0049:
*blockapp = newapp;
if (level >= 0) goto L_004b;
deletenames(0);
return;
L_004b:
goto L_004c;
L_0043:
open = 0;
L_004c:
for (;;) {
L_004d:
analyse();
if (ss != 0) goto L_004e;
goto L_004f;
L_004e:
compile();
if (dubious == 0) goto L_0050;
fault((-5));
L_0050:
if (bp < 128) goto L_0051;
flushbuffer();
L_0051:
if (sstype <= 0) goto L_0052;
if (sstype != 2) goto L_0053;
goto L_0054;
L_0053:
compileblock(specmode, blockx, dmin, tmax, id);
if (ss >= 0) goto L_0055;
goto L_0054;
L_0055:
L_0052:
L_004f:
}
L_0054:
if (list <= 0) goto L_0056;
if (level <= 0) goto L_0056;
write(lines, 5);
spaces(((level * 3) - 1));
printstring("End");
newline();
L_0056:
deletenames(0);
return;
goto L_003e;
int gapp()
{
void setcell(int g, int tt);
void class(struct TAGFM *v);
struct TAGFM *v;
int p;
int link;
int tp;
int c;
int ap;
int t;
if (tmax != local) goto L_0057;
return(0);
L_0057:
p = 719;
link = 0;
t = tmax;
for (;;) {
L_0058:
v = &tag[t];
t = (t - 1);
class(*v);
if (c >= 0) goto L_0059;
c = (-c);
setcell(196, tp);
tp = (-1);
L_0059:
setcell(c, tp);
if (t != local) goto L_005a;
goto L_005b;
L_005a:
setcell(140, (-1));
}
L_005b:
if (gmax <= gmin) goto L_005c;
abandon(3);
L_005c:
return(link);
goto L_003e;
void setcell(int g, int tt)
{
for (;;) {
L_005d:
if (p == gmax) goto L_005e;
p = (p + 1);
if (glink[p] != link) goto L_005f;
if (gram[p] != g) goto L_005f;
if (tt < 0) goto L_0060;
if (gram[(p + 1)] != tt) goto L_0061;
if (glink[(p + 1)] != ap) goto L_0061;
L_0060:
link = p;
return;
L_0061:
L_005f:
}
L_005e:
gmax = (gmax + 1);
gram[gmax] = g;
glink[gmax] = link;
link = gmax;
if (tt < 0) goto L_0062;
gmax = (gmax + 1);
gram[gmax] = tt;
glink[gmax] = ap;
L_0062:
p = gmax;
L_003e:
goto L_0063;
void class(struct TAGFM *v)
{
// bounds [0 : 15]
// do it now: const int {*,2}classmap {NO INIT}
int tags;
int type;
int form;
ap = 0;
tags = v->flags;
type = ((tags >> 4) & 7);
form = (tags & 15);
tp = ((v->format << 3) | type);
c = classmap[form];
if (type != 0) goto L_0064;
if (form != 2) goto L_0064;
c = 208;
tp = 0;
L_0064:
if ((tags & 4096) == 0) goto L_0065;
ap = v->app;
L_0065:
L_0063:
for (;;) {
L_0066:
goto L_0066;
void deletenames(int quiet)
{
int flags;
struct TAGFM *tx;
for (;;) {
L_0067:
if (tmax <= tbase) goto L_0068;
x = tmax;
tmax = (tmax - 1);
tx = &tag[x];
flags = tx->flags;
if ((flags & 128) == 0) goto L_0069;
if ((flags & 512) != 0) goto L_0069;
fault(20);
L_0069:
if ((flags & 32768) != 0) goto L_006a;
if (level < 0) goto L_006a;
if (list > 0) goto L_006a;
if (quiet != 0) goto L_006b;
fault((-3));
L_006b:
L_006a:
dict[tx->text] = tx->link;
}
L_0068:
L_0066:
goto L_006c;
void analyse()
{
int strp;
int mark;
int flags;
int proterr;
int k;
int s;
int c;
static int key;
short node;
short *z;
struct ARFM *arp;
// bounds [180 : 200]
/*todo: gcc jump table extension*/ void **act;
// bounds [0 : 15]
/*todo: gcc jump table extension*/ void **paction;
goto L_006c;
void traceanalysis()
{
int a;
goto L_006c;
void show(int a)
{
if (0 >= a) goto L_006d;
if (a >= 130) goto L_006d;
space();
printstring(text[a]);
goto L_006e;
L_006d:
write(a, 3);
L_006e:
L_006c:
static int la1;
static int la2;
static int lsa;
static int lt;
if (monpos == pos) goto L_006f;
if (sym == 10) goto L_006f;
newline();
L_006f:
monpos = pos;
write(g, 3);
space();
printstring(text[class]);
if ((gg & 16384) == 0) goto L_0070;
printsymbol(34);
L_0070:
a = ((gg >> 8) & 15);
if (a == 0) goto L_0071;
printsymbol(123);
write(a, 0);
printsymbol(125);
L_0071:
if (atom1 != la1) goto L_0072;
if (atom2 != la2) goto L_0072;
if (lsa != subatom) goto L_0072;
if (lt == type) goto L_0073;
L_0072:
printstring(" [");
la1 = atom1;
show(la1);
la2 = atom2;
show(la2);
lsa = subatom;
write(lsa, 3);
lt = type;
write(lt, 5);
printsymbol(93);
L_0073:
newline();
for (;;) {
L_0074:
goto L_0074;
void getsym()
{
readsymbol(sym);
if (pos == 133) goto L_0075;
pos = (pos + 1);
L_0075:
char[pos] = sym;
if (list > 0) goto L_0076;
printsymbol(sym);
L_0076:
column = (column + 1);
L_0074:
goto L_0077;
void readsym()
{
static int last;
// bounds [0 : 127]
// do it now: const char {*,2}mapped {NO INIT}
if (sym != 10) goto L_0078;
U_00d4:
lines = (lines + 1);
if (endmark == 0) goto L_0079;
printsymbol(endmark);
L_0079:
U_00d5:
pos = 0;
pos1 = 0;
pos2 = 0;
margin = 0;
column = 0;
last = 0;
endmark = 0;
if (list > 0) goto L_007a;
if (include == 0) goto L_007b;
printstring(" &");
write(lines, (-4));
goto L_007c;
L_007b:
write(lines, 5);
L_007c:
csym = cont;
printsymbol(csym);
space();
if (errormargin == 0) goto L_007d;
lines = (lines - 1);
spaces(errormargin);
errormargin = 0;
if (errorsym == 0) goto L_007e;
printsymbol(errorsym);
pos = 1;
*byteinteger((addr(char[0]) + 1)) = errorsym;
sym = errorsym;
errorsym = 0;
goto U_00d6;
L_007e:
L_007d:
L_007a:
U_00d7:
symtype = 1;
L_0078:
U_00d8:
readsymbol(sym);
if (pos == 133) goto L_007f;
pos = (pos + 1);
L_007f:
char[pos] = sym;
if (list > 0) goto L_0080;
printsymbol(sym);
L_0080:
column = (column + 1);
U_00d6:
if (sym == 10) goto L_0081;
last = sym;
if (quote == 0) goto L_0082;
return;
L_0082:
sym = mapped[(sym & 127)];
if (sym > 3) goto L_0083;
if (sym != 0) goto L_0084;
goto U_00d7;
L_0084:
if (sym != 1) goto L_0085;
symtype = 2;
goto U_00d8;
L_0085:
if (sym != 3) goto L_0086;
cont = 43;
goto U_00d5;
L_0086:
for (;;) {
L_0087:
getsym();
if (sym != 125) goto L_0088;
goto U_00d8;
L_0088:
if (sym != 10) goto L_0089;
goto U_00d9;
L_0089:
}
L_0083:
key = kdict[sym];
if ((key & 3) != 0) goto L_008a;
if (symtype != 2) goto L_008a;
if (sym != 67) goto L_008b;
if (nextsymbol() != 10) goto L_008b;
getsym();
cont = 43;
goto U_00d4;
L_008b:
goto L_008c;
L_008a:
symtype = ((key & 3) - 2);
L_008c:
return;
L_0081:
U_00d9:
symtype = quote;
if (last != 0) goto L_008d;
if (quote != 0) goto L_008d;
goto U_00d4;
L_008d:
cont = 43;
L_0077:
goto L_008e;
int formatselected()
{
formatlist = tag[format].app;
if (formatlist >= 0) goto L_008f;
atom1 = (32768 + 22);
return(0);
L_008f:
if (sym != 95) goto L_0090;
escapeclass = 255;
searchbase = tag[format].format;
L_0090:
return(1);
L_008e:
goto L_0091;
void codeatom(int target)
{
int dbase;
int da;
int base;
int n;
int mul;
int pendquote;
int j;
int k;
int l;
int pt;
goto L_0091;
void lookup(int d)
{
int newname;
int vid;
int k1;
int k2;
int form;
struct TAGFM *t;
int new;
new = addr(dict[(dmax + 1)]);
k2 = (hashvalue * 6700421);
k2 = ((k2 >> (32 - (2 * 11))) | 1);
k1 = (k2 >> 11);
for (;;) {
L_0092:
newname = hash[k1];
if (newname != 0) goto L_0093;
goto L_0094;
L_0093:
if (string(addr(dict[(newname + 1)])) != string(new)) goto L_0095;
goto U_00e8;
L_0095:
k1 = ((k1 + k2) & 2047);
}
L_0094:
sparenames = (sparenames - 1);
if (sparenames > 0) goto L_0096;
abandon(2);
L_0096:
hash[k1] = dmax;
dict[dmax] = (-1);
newname = dmax;
dmax = dp;
goto U_00e9;
U_00e8:
if (this < 0) goto L_0097;
if (d == 0) goto L_0097;
searchbase = rbase;
L_0097:
if (searchbase == 0) goto L_0098;
new = (-1);
x = searchbase;
for (;;) {
L_0099:
if (x >= formatlist) goto L_009a;
goto U_00e9;
L_009a:
if (tag[x].text != newname) goto L_009b;
goto L_009c;
L_009b:
x = (x - 1);
}
L_009c:
goto L_009d;
L_0098:
x = dict[newname];
if (x > limit) goto L_009e;
goto U_00e9;
L_009e:
L_009d:
subatom = x;
t = &tag[x];
atomflags = t->flags;
format = t->format;
app = t->app;
protection = (atomflags & 256);
type = ((atomflags >> 4) & 7);
atom1 = amap[(atomflags & 15)];
if ((diag & 8) == 0) goto L_009f;
printstring("lookup:");
write(atom1, 3);
write(type, 1);
write(app, 3);
write(format, 5);
write(atomflags, 3);
newline();
L_009f:
if (d != 0) goto L_00a0;
t->flags = (t->flags | 32768);
searchbase = 0;
if ((atomflags & 2048) == 0) goto L_00a1;
if (format == 0) goto L_00a1;
if (formatselected() != 0) goto L_00a2;
return;
L_00a2:
L_00a1:
if ((atomflags & 4096) == 0) goto L_00a3;
if (app != 0) goto L_00a4;
atom2 = atom1;
atom1 = (atom1 - 4);
if (97 > atom1) goto L_00a5;
if (atom1 > 98) goto L_00a5;
mapgg = atom1;
atom1 = 91;
L_00a5:
goto L_00a6;
L_00a4:
if (sym != 40) goto L_00a7;
searchbase = 0;
if (atom1 < 106) goto L_00a8;
app = phrase[(app + 200)];
escapeclass = 254;
atom1 = (((atom1 - 106) >> 1) + 91);
goto L_00a9;
L_00a8:
escapeclass = 253;
atom1 = (atom1 - 4);
L_00a9:
phrase[200] = app;
L_00a7:
L_00a6:
pos2 = pos;
return;
L_00a3:
if ((atomflags & 8192) == 0) goto L_00aa;
if (atom1 != 91) goto L_00aa;
mapgg = 93;
atom2 = 93;
if (type != 1) goto L_00ab;
subatom = (-subatom);
L_00ab:
L_00aa:
return;
L_00a0:
if (tbase == tstart) goto L_00ac;
goto U_00e9;
L_00ac:
if (d != ((3 + 128) + 32768)) goto L_00ad;
t->flags = (t->flags | 32768);
return;
L_00ad:
if ((atomflags & 128) == 0) goto L_00ae;
if (d != 3) goto L_00af;
t->flags = (t->flags - 128);
return;
L_00af:
if (7 > (decl & 15)) goto L_00b0;
if ((decl & 15) > 10) goto L_00b0;
if ((decl & 128) != 0) goto L_00b0;
if (((decl ^ atomflags) & 127) != 0) goto L_00b1;
t->flags = (t->flags - 128);
specgiven = 1;
return;
L_00b1:
L_00b0:
if ((decl & 15) != 4) goto L_00b2;
t->flags = ((4 << 4) + 4);
t->format = fdef;
return;
L_00b2:
L_00ae:
if (last1 != 54) goto L_00b3;
if (atom1 != 105) goto L_00b3;
return;
L_00b3:
if (copy != 0) goto L_00b4;
copy = x;
L_00b4:
U_00e9:
app = 0;
vid = 0;
atom1 = (32768 + 2);
if (d != 0) goto L_00b5;
return;
L_00b5:
type = ((d >> 4) & 7);
form = (d & 15);
atom1 = amap[form];
if (this >= 0) goto L_00b6;
new = newname;
tmax = (tmax + 1);
x = tmax;
goto L_00b7;
L_00b6:
new = (-1);
recid = (recid - 1);
vid = recid;
tmin = (tmin - 1);
x = tmin;
formatlist = tmin;
L_00b7:
if (11 > form) goto L_00b8;
if (form > 14) goto L_00b8;
if (dim != 0) goto L_00b9;
dim = 1;
L_00b9:
app = dim;
L_00b8:
if (otype <= 2) goto L_00ba;
if ((d & 128) == 0) goto L_00bb;
L_00ba:
if (perm != 0) goto L_00bb;
if (level != includelevel) goto L_00bc;
L_00bb:
d = (d | 32768);
L_00bc:
t = &tag[x];
if (form != 3) goto L_00bd;
id = (id + 1);
vid = id;
L_00bd:
t->index = vid;
t->text = newname;
t->flags = d;
t->app = app;
t->format = fdef;
format = fdef;
subatom = x;
if (new < 0) goto L_00be;
t->link = dict[new];
dict[new] = x;
if (gmin != 1720) goto L_00bf;
tmin = (tmin - 1);
subatom = tmin;
tag[tmin] = *t;
L_00bf:
L_00be:
if (tmax < tmin) goto L_00c0;
abandon(3);
L_00c0:
L_0091:
U_00e0:
pos1 = pos;
subatom = 0;
pendquote = 0;
atomflags = 0;
if (symtype != (-2)) goto L_00c1;
goto U_00e1;
L_00c1:
if (symtype >= 0) goto L_00c2;
goto U_00e2;
L_00c2:
if (symtype != 0) goto L_00c3;
atom1 = 20;
atom2 = 0;
return;
L_00c3:
if (symtype == 2) goto L_00c4;
if (quote == 0) goto L_00c5;
goto U_00e3;
L_00c5:
if (sym != 34) goto L_00c6;
goto U_00e4;
L_00c6:
if (sym != 39) goto L_00c7;
goto U_00e5;
L_00c7:
if (sym != 46) goto L_00c8;
if (48 > nextsymbol()) goto L_00c8;
if (nextsymbol() > 57) goto L_00c8;
goto U_00e2;
L_00c8:
L_00c4:
k = (key >> 2);
readsym();
for (;;) {
L_00c9:
j = kdict[k];
if ((j & 16384) == 0) goto L_00ca;
goto L_00cb;
L_00ca:
if ((j & 127) != sym) goto L_00cc;
if (symtype >= 0) goto L_00cd;
L_00cc:
if (j < 0) goto L_00ce;
goto U_00e6;
L_00ce:
k = (k + 1);
goto L_00cf;
L_00cd:
l = ((j >> 7) & 127);
readsym();
if (j <= 0) goto L_00d0;
if (l == 0) goto L_00d1;
if (l != sym) goto L_00d2;
if (symtype >= 0) goto L_00d3;
L_00d2:
goto U_00e6;
L_00d3:
readsym();
L_00d1:
l = 1;
L_00d0:
k = (k + l);
L_00cf:
}
L_00cb:
atom1 = (j & 127);
if (atom1 != 0) goto L_00d4;
atom1 = 19;
subatom = 19;
atom2 = 0;
if (sym != 10) goto L_00d5;
if (ocount < 0) goto L_00d6;
return;
L_00d6:
readsym();
L_00d5:
return;
L_00d4:
atom2 = ((j >> 7) & 127);
subatom = (kdict[(k + 1)] & 16383);
return;
U_00e6:
atom1 = (32768 + 1);
atom2 = 0;
if ((pos - pos1) <= 2) goto L_00d7;
pos1 = pos;
L_00d7:
return;
U_00e5:
atom1 = 91;
atom2 = 93;
type = 1;
mapgg = 93;
protection = 256;
subatom = lp;
if (lp < 50) goto L_00d8;
abandon(3);
L_00d8:
quote = (\pendquote);
return;
U_00e7:
n = 0;
cont = 39;
for (;;) {
L_00d9:
readsym();
if (sym != 39) goto L_00da;
if (nextsymbol() == 39) goto L_00db;
goto L_00dc;
L_00db:
readsym();
L_00da:
if ((n & (\((-1) >> 8))) == 0) goto L_00dd;
pos1 = pos;
atom1 = (32768 + 10);
return;
L_00dd:
if (quote != 0) goto L_00de;
goto U_00e6;
L_00de:
n = ((n << 8) + sym);
quote = (quote + 1);
}
L_00dc:
quote = 0;
cont = 32;
if (sym == 10) goto L_00df;
readsym();
L_00df:
litpool[lp] = n;
lp = (lp + 1);
goto U_00e0;
U_00e4:
atom1 = 91;
atom2 = 93;
type = 3;
subatom = ((strp - stbase) | 16384);
mapgg = 93;
protection = 256;
quote = subatom;
textline = lines;
return;
U_00e3:
if (quote >= 0) goto L_00e0;
goto U_00e7;
L_00e0:
l = strp;
n = strp;
j = addr(glink[(gmin - 1)]);
k = (l + 256);
if (j >= k) goto L_00e1;
k = j;
L_00e1:
for (;;) {
L_00e2:
cont = 34;
quote = 1;
for (;;) {
L_00e3:
readsym();
if (sym != 34) goto L_00e4;
if (nextsymbol() == 34) goto L_00e5;
goto L_00e6;
L_00e5:
readsym();
L_00e4:
l = (l + 1);
*byteinteger(l) = sym;
if (l < k) goto L_00e7;
lines = textline;
abandon(7);
L_00e7:
}
L_00e6:
*byteinteger(n) = (l - n);
strp = (l + 1);
quote = 0;
cont = 32;
readsym();
codeatom(target);
if (atom1 != 48) goto L_00e8;
if (sym == 34) goto L_00e9;
L_00e8:
return;
L_00e9:
}
goto L_00ea;
void get(int limit)
{
int s;
int shift;
shift = 0;
if (base == 10) goto L_00eb;
if (base != 16) goto L_00ec;
shift = 4;
goto L_00ed;
L_00ec:
if (base != 8) goto L_00ee;
shift = 3;
goto L_00ef;
L_00ee:
if (base != 2) goto L_00f0;
shift = 1;
L_00f0:
L_00ef:
L_00ed:
L_00eb:
n = 0;
for (;;) {
L_00f1:
if (symtype != (-1)) goto L_00f2;
s = (sym - 48);
goto L_00f3;
L_00f2:
if (symtype >= 0) goto L_00f4;
s = ((sym - 65) + 10);
goto L_00f5;
L_00f4:
return;
L_00f5:
L_00f3:
if (s < limit) goto L_00f6;
return;
L_00f6:
pt = (pt + 1);
*byteinteger(pt) = sym;
if (base != 10) goto L_00f7;
if (n < 214748364) goto L_00f8;
if (s > 7) goto L_00f9;
if (n <= 214748364) goto L_00f8;
L_00f9:
base = 0;
type = 2;
n = 0;
L_00f8:
L_00f7:
if (shift != 0) goto L_00fa;
n = ((n * base) + s);
goto L_00fb;
L_00fa:
n = ((n << shift) + s);
L_00fb:
readsym();
}
L_00ea:
U_00e2:
base = 10;
U_00e9:
atom1 = 91;
atom2 = 93;
type = 1;
subatom = lp;
mapgg = 93;
protection = 256;
if (lp < 50) goto L_00fc;
abandon(3);
L_00fc:
pt = strp;
mul = 0;
for (;;) {
L_00fd:
get(base);
if (sym != 95) goto L_00fe;
if (base == 0) goto L_00fe;
if (pendquote == 0) goto L_00ff;
L_00fe:
goto L_0100;
L_00ff:
pt = (pt + 1);
*byteinteger(pt) = 95;
readsym();
base = n;
}
L_0100:
if (pendquote == 0) goto L_0101;
if (sym == 39) goto L_0102;
goto U_00e6;
L_0102:
readsym();
L_0101:
if (sym != 46) goto L_0103;
pt = (pt + 1);
*byteinteger(pt) = 46;
readsym();
type = 2;
n = base;
base = 0;
get(n);
L_0103:
if (sym != 64) goto L_0104;
pt = (pt + 1);
*byteinteger(pt) = 64;
k = pt;
readsym();
type = 1;
base = 10;
if (sym != 45) goto L_0105;
readsym();
get(10);
n = (-n);
goto L_0106;
L_0105:
get(10);
L_0106:
pt = (k + 1);
*byteinteger(pt) = lp;
litpool[lp] = n;
lp = (lp + 1);
if (base != 0) goto L_0107;
atom1 = (32768 + 10);
L_0107:
type = 2;
L_0104:
if (type != 2) goto L_0108;
*byteinteger(strp) = (pt - strp);
subatom = ((strp - stbase) | 8192);
strp = (pt + 1);
goto L_0109;
L_0108:
litpool[lp] = n;
lp = (lp + 1);
L_0109:
return;
U_00e1:
if (27 > target) goto L_010a;
if (target > 41) goto L_010a;
atom1 = 0;
return;
L_010a:
hashvalue = 0;
dp = (dmax + 1);
da = addr(dict[dp]);
dbase = da;
for (;;) {
L_010b:
hashvalue = (hashvalue + (hashvalue + sym));
da = (da + 1);
*byteinteger(da) = sym;
readsym();
if (symtype < 0) goto L_010c;
goto L_010d;
L_010c:
}
L_010d:
if (sym != 39) goto L_010e;
pendquote = 100;
if (hashvalue != 77) goto L_010f;
goto U_00e5;
L_010f:
readsym();
if (hashvalue != 88) goto L_0110;
base = 16;
goto U_00e9;
L_0110:
if (hashvalue == 75) goto L_0111;
if (hashvalue != 79) goto L_0112;
L_0111:
base = 8;
goto U_00e9;
L_0112:
if (hashvalue != 66) goto L_0113;
base = 2;
goto U_00e9;
L_0113:
goto U_00e6;
L_010e:
n = (da - dbase);
*byteinteger(dbase) = n;
dp = (dp + ((n + 2) >> 1));
if (dp < dmin) goto L_0114;
abandon(8);
L_0114:
atom2 = 90;
if (last1 != 0) goto L_0115;
if (sym != 58) goto L_0115;
limit = local;
lookup(3);
return;
L_0115:
if (last1 != 54) goto L_0116;
limit = local;
lookup(((3 + 128) + 32768));
return;
L_0116:
if (decl == 0) goto L_0117;
if (target != 90) goto L_0117;
searchbase = fmbase;
limit = local;
lookup(decl);
searchbase = 0;
goto L_0118;
L_0117:
limit = 0;
lookup(0);
L_0118:
for (;;) {
L_0119:
goto L_0119;
int parsedmachinecode()
{
goto L_0119;
void octal(int n)
{
int m;
m = (n >> 3);
if (m == 0) goto L_011a;
octal(m);
L_011a:
bp = (bp + 1);
buff[bp] = ((n & 7) + 48);
L_0119:
if (symtype == (-2)) goto L_011b;
atom1 = 32768;
return(0);
L_011b:
if (bp < 128) goto L_011c;
flushbuffer();
L_011c:
bp = (bp + 1);
buff[bp] = 119;
for (;;) {
L_011d:
bp = (bp + 1);
buff[bp] = sym;
readsym();
if (symtype < 0) goto L_011e;
goto L_011f;
L_011e:
}
L_011f:
bp = (bp + 1);
buff[bp] = 95;
if (symtype == 0) goto L_0120;
if (sym == 95) goto L_0121;
atom1 = 32768;
return(0);
L_0121:
readsym();
for (;;) {
L_0122:
if (symtype == 0) goto L_0123;
if (symtype >= 0) goto L_0124;
codeatom(0);
if ((atom1 & 32768) == 0) goto L_0125;
return(0);
L_0125:
if (atom2 != 93) goto L_0126;
if (type != 1) goto L_0126;
if (subatom >= 0) goto L_0127;
octal(tag[(-subatom)].format);
goto L_0128;
L_0127:
octal(litpool[subatom]);
L_0128:
goto L_0129;
L_0126:
if (91 > atom1) goto L_012a;
if (atom1 > 109) goto L_012a;
if (atom1 != 104) goto L_012b;
if ((tag[subatom].flags & 16384) != 0) goto L_012b;
this = subatom;
atom1 = (32768 + 21);
return(0);
L_012b:
op(32, tag[subatom].index);
goto L_012c;
L_012a:
atom1 = 32768;
return(0);
L_012c:
L_0129:
goto L_012d;
L_0124:
bp = (bp + 1);
buff[bp] = sym;
readsym();
L_012d:
}
L_0123:
L_0120:
bp = (bp + 1);
buff[bp] = 59;
return(1);
for (;;) {
L_012e:
if (gg != 0) goto L_012f;
cont = 32;
L_012f:
last1 = 0;
mapgg = 0;
s = 0;
ss = 0;
sstype = (-1);
fdef = 0;
fmbase = 0;
app = 0;
margin = column;
pos = 0;
stbase = addr(glink[(gmax + 1)]);
strp = stbase;
lp = 0;
tbase = tstart;
local = tbase;
if (gg == 0) goto L_0130;
if (ocount < 0) goto L_0131;
L_0130:
U_00d5:
for (;;) {
L_0132:
if (symtype != 0) goto L_0133;
c = cont;
cont = 32;
if (ocount < 0) goto L_0134;
cont = 43;
L_0134:
readsym();
cont = c;
}
L_0133:
if (sym != 33) goto L_0135;
goto U_00d6;
L_0135:
this = (-1);
codeatom(0);
if (atom1 != 22) goto L_0136;
U_00d6:
quote = 1;
c = cont;
for (;;) {
L_0137:
if (sym == 10) goto L_0138;
readsym();
cont = c;
}
L_0138:
quote = 0;
symtype = 0;
goto U_00d5;
L_0136:
L_0131:
decl = 0;
mark = 0;
gentype = 0;
force = 0;
dim = 0;
proterr = 0;
node = 0;
nmax = 0;
nmin = (520 + 1);
order = 1;
gmin = (1720 + 1);
if (gg == 0) goto L_0139;
sstype = 0;
goto U_00d7;
L_0139:
ptype = 0;
specgiven = 0;
stats = (stats + 1);
if (perm != 0) goto L_013a;
op(79, lines);
L_013a:
if ((atom1 & 32768) == 0) goto L_013b;
goto U_00d8;
L_013b:
if (escapeclass == 0) goto L_013c;
g = 25;
sstype = (-1);
goto U_00d9;
L_013c:
g = initial[atom1];
if (g != 0) goto L_013d;
g = initial[0];
sstype = 0;
goto U_00d9;
L_013d:
if (g >= 0) goto L_013e;
g = (g & 255);
nmax = 1;
ar[1].class = 0;
ar[1].link = 0;
ar[1].sub = 25;
L_013e:
gg = gram[g];
class = (gg & 255);
sstype = (((gg >> 12) & 3) - 1);
goto U_00da;
act_194:
ptype = type;
papp = app;
pformat = format;
goto U_00d7;
act_196:
k = (g + 1);
goto U_00db;
act_188:
k = (ar[nmax].sub + 1);
U_00db:
papp = glink[k];
k = gram[k];
if (k != 0) goto L_013f;
goto U_00d7;
L_013f:
ptype = (k & 7);
pformat = (k >> 3);
act_183:
k = type;
if (gentype == 0) goto L_0140;
if (k != 2) goto L_0141;
L_0140:
gentype = k;
L_0141:
if (pformat >= 0) goto L_0142;
app = papp;
format = pformat;
if (ptype != 2) goto L_0143;
if (type != 1) goto L_0143;
k = 2;
L_0143:
if (force == 0) goto L_0144;
k = force;
force = 0;
L_0144:
L_0142:
if (papp != app) goto L_0145;
if (ptype == k) goto L_0146;
if (ptype == 0) goto L_0146;
L_0145:
goto U_00dc;
L_0146:
if (pformat == format) goto L_0147;
if (pformat == 0) goto L_0147;
if (format != 0) goto L_0148;
L_0147:
goto U_00d7;
L_0148:
goto U_00dc;
act_197:
arp = &ar[nmin];
k = arp->sub;
if (blockform == (k & 15)) goto L_0149;
goto U_00dd;
L_0149:
arp->sub = (k >> 4);
type = blocktype;
ptype = blocktype;
pformat = blockfm;
papp = app;
if (ptype == 4) goto L_014a;
pformat = (-1);
L_014a:
goto U_00d7;
act_195:
if (type == 0) goto L_014b;
if (type == 1) goto L_014b;
if (type == 2) goto L_014b;
goto U_00dc;
L_014b:
arp = &ar[nmin];
k = arp->sub;
arp->sub = (k >> 2);
k = (k & 3);
if (k != 0) goto L_014c;
goto U_00d7;
L_014c:
if (k != 1) goto L_014d;
force = 1;
if (type == 1) goto L_014e;
if (type != 0) goto L_014f;
L_014e:
goto U_00d7;
L_014f:
goto U_00dc;
L_014d:
if (ptype == 2) goto L_0150;
if (ptype == 0) goto L_0150;
goto U_00dc;
L_0150:
if (k != 3) goto L_0151;
force = 1;
L_0151:
goto U_00d7;
act_198:
k = ((gg >> 8) & 15);
if (k != 0) goto L_0152;
atom1 = last1;
goto U_00d7;
L_0152:
if (k != 1) goto L_0153;
if (type == 3) goto L_0154;
goto U_00dc;
L_0154:
goto U_00d7;
L_0153:
if (k != 2) goto L_0155;
if (type != 4) goto L_0156;
goto U_00dc;
L_0156:
goto U_00d7;
L_0155:
if (k != 3) goto L_0157;
codeatom(0);
if ((atomflags & 512) != 0) goto L_0158;
goto U_00de;
L_0158:
goto U_00d7;
L_0157:
if (x > local) goto L_0159;
forwarn = pos1;
L_0159:
goto U_00d7;
paction_1:
if (type != 4) goto L_015a;
g = phrase[242];
goto L_015b;
L_015a:
pformat = (-1);
L_015b:
goto U_00d9;
paction_2:
ptype = 2;
pformat = (-1);
goto U_00d9;
paction_3:
ptype = 3;
pformat = (-1);
goto U_00d9;
paction_4:
ptype = 1;
pformat = (-1);
goto U_00d9;
paction_5:
if (ptype != 1) goto L_015c;
goto U_00d9;
L_015c:
if (ptype != 2) goto L_015d;
g = phrase[212];
pformat = (-1);
L_015d:
if (ptype != 3) goto L_015e;
g = phrase[213];
L_015e:
goto U_00d9;
paction_6:
ptype = (gram[(ar[nmax].sub + 1)] & 7);
pformat = (-1);
goto U_00d9;
paction_7:
if (ptype != 1) goto L_015f;
ptype = 2;
L_015f:
pformat = (-1);
goto U_00d9;
U_00da:
last1 = class;
atom1 = 0;
s = subatom;
U_00df:
if ((gg & 16384) != 0) goto L_0160;
z = &node;
for (;;) {
L_0161:
k = *z;
if ((gg & 12288) == 0) goto L_0162;
if (k != 0) goto L_0163;
L_0162:
goto L_0164;
L_0163:
gg = (gg - 4096);
z = &ar[k].link;
}
L_0164:
if (mapgg == 0) goto L_0165;
if ((gg & 255) != 91) goto L_0165;
gg = mapgg;
L_0165:
nmin = (nmin - 1);
if (nmin != nmax) goto L_0166;
goto U_00e0;
L_0166:
*z = nmin;
arp = &ar[nmin];
arp->sub = s;
arp->class = ((gg & 255) | mark);
arp->link = k;
L_0160:
mark = 0;
mapgg = 0;
U_00d7:
g = glink[g];
paction_0:
U_00d9:
gg = gram[g];
class = (gg & 255);
if ((diag & 1) == 0) goto L_0167;
traceanalysis();
L_0167:
if (class != 0) goto L_0168;
goto U_00e1;
L_0168:
if (class >= 180) goto L_0169;
if (class < 130) goto L_016a;
class = atomic[class];
L_016a:
if (class < 120) goto L_016b;
goto U_00df;
L_016b:
if (atom1 != 0) goto L_016c;
codeatom(class);
L_016c:
if (escapeclass == 0) goto L_016d;
class = escapeclass;
escapeclass = 0;
g = (g + 4096);
U_00e2:
gg = 0;
arp = &ar[(nmax + 1)];
arp->papp = papp;
arp->x = x;
goto U_00e3;
L_016d:
if (class == atom1) goto L_016e;
if (class != atom2) goto L_016f;
L_016e:
goto U_00da;
L_016f:
U_00de:
if (gg < 0) goto L_0170;
goto U_00d8;
L_0170:
g = (g + 1);
goto U_00d9;
L_0169:
if (class < 200) goto L_0171;
U_00e3:
nmax = (nmax + 1);
if (nmax != nmin) goto L_0172;
goto U_00e0;
L_0172:
arp = &ar[nmax];
arp->ptype = ptype;
arp->pos = pos1;
arp->pformat = pformat;
arp->link = gentype;
arp->class = node;
arp->sub = g;
node = 0;
g = phrase[class];
if (force == 0) goto L_0173;
ptype = force;
force = 0;
L_0173:
gentype = 0;
goto *paction[((gg >> 8) & 15)];
L_0171:
goto *act[class];
U_00e1:
s = 0;
for (;;) {
L_0174:
if (node == 0) goto L_0175;
z = &ar[node].link;
k = *z;
*z = s;
s = node;
node = k;
}
L_0175:
ss = s;
U_00e4:
if (nmax == 0) goto L_0176;
k = gentype;
arp = &ar[nmax];
nmax = (nmax - 1);
node = arp->class;
gentype = arp->link;
ptype = arp->ptype;
pformat = arp->pformat;
g = arp->sub;
if ((g & 4096) == 0) goto L_0177;
g = (g - 4096);
papp = arp->papp;
mark = 255;
subatom = s;
goto U_00d9;
L_0177:
if (gentype == 0) goto L_0178;
if (k != 2) goto L_0179;
L_0178:
gentype = k;
L_0179:
type = gentype;
k = gg;
for (;;) {
L_017a:
gg = gram[g];
if (k != 0) goto L_017b;
goto U_00df;
L_017b:
if (gg < 0) goto L_017c;
goto U_00d8;
L_017c:
k = (k - 4096);
g = (g + 1);
}
L_0176:
if (copy == 0) goto L_017d;
fault(4);
L_017d:
if (order != 0) goto L_017e;
fault(13);
L_017e:
if (forwarn == 0) goto L_017f;
fault((-4));
L_017f:
pos1 = 0;
faultrate = (faultrate - 1);
return;
act_193:
if (sym == 61) goto L_0180;
if (sym == 60) goto L_0180;
gg = 0;
goto U_00e1;
L_0180:
act_181:
atom1 = amap[(decl & 15)];
goto U_00d7;
act_182:
class = 252;
g = (glink[g] | 4096);
decl = 0;
otype = 0;
goto U_00e2;
act_199:
s = 0;
for (;;) {
L_0181:
if (node == 0) goto L_0182;
z = &ar[node].link;
k = *z;
*z = s;
s = node;
node = k;
}
L_0182:
ss = s;
if (quote == 0) goto L_0183;
codeatom(28);
L_0183:
compile();
if ((atom1 & 32768) != 0) goto L_0184;
goto U_00d7;
L_0184:
goto U_00d8;
act_184:
if (type == 1) goto L_0185;
goto U_00e5;
L_0185:
if (subatom >= 0) goto L_0186;
lit = tag[(-subatom)].format;
goto L_0187;
L_0186:
lit = litpool[subatom];
L_0187:
if (lit == 0) goto L_0188;
goto U_00e5;
L_0188:
goto U_00d7;
act_185:
s = 0;
for (;;) {
L_0189:
if (node == 0) goto L_018a;
z = &ar[node].link;
k = *z;
*z = s;
s = node;
node = k;
}
L_018a:
ss = s;
atom1 = ar[s].class;
atom2 = 0;
if (atom1 == 97) goto L_018b;
if (atom1 != 98) goto L_018c;
L_018b:
atom1 = 91;
L_018c:
arp = &ar[nmax];
x = arp->x;
pos1 = arp->pos;
pos2 = 0;
app = 0;
format = tag[x].format;
flags = tag[x].flags;
type = ((flags >> 4) & 7);
protection = (flags & 256);
if ((flags & 1024) == 0) goto L_018d;
protection = 0;
L_018d:
if ((flags & 2048) == 0) goto L_018e;
if (format == 0) goto L_018e;
if (formatselected() != 0) goto L_018f;
goto U_00d8;
L_018f:
L_018e:
goto U_00e4;
act_187:
protection = 256;
goto U_00d7;
act_186:
if ((protection & 256) != 0) goto L_0190;
goto U_00d7;
L_0190:
proterr = nmin;
goto U_00de;
act_191:
k = protection;
codeatom(0);
if ((atomflags & 1024) != 0) goto L_0191;
protection = k;
L_0191:
goto U_00d7;
act_192:
if (parsedmachinecode() != 0) goto L_0192;
goto U_00d8;
L_0192:
goto U_00d7;
act_189:
k = gapp();
deletenames(1);
tmax = tbase;
tbase = gram[gmin];
local = tbase;
gmin = (gmin + 1);
x = ar[ar[nmax].class].sub;
tag[x].app = k;
goto U_00d7;
act_190:
gmin = (gmin - 1);
if (gmin > gmax) goto L_0193;
abandon(2);
L_0193:
gram[gmin] = tbase;
tbase = tmax;
local = tbase;
goto U_00d7;
U_00e5:
k = (32768 + 10);
goto U_00e6;
U_00dd:
k = (32768 + 7);
goto U_00e6;
U_00dc:
k = (32768 + 5);
pos2 = 0;
goto U_00e6;
U_00e0:
k = (32768 + 3);
goto U_00e6;
U_00d8:
k = atom1;
pos2 = 0;
U_00e6:
if ((diag & 32) == 0) goto L_0194;
printstring("Atom1 =");
write(atom1, 3);
printstring(" Atom2 =");
write(atom2, 3);
printstring(" subatom =");
write(subatom, 3);
newline();
printstring("Type =");
write(type, 1);
printstring(" Ptype =");
write(ptype, 1);
newline();
printstring("App =");
write(app, 1);
printstring(" Papp =");
write(papp, 1);
newline();
printstring("Format =");
write(format, 1);
printstring(" Pformat =");
write(pformat, 1);
newline();
exit(0);
L_0194:
for (;;) {
L_0195:
if (sym == 10) goto L_0196;
if (sym == 59) goto L_0196;
quote = 0;
readsym();
}
L_0196:
if ((k & 32768) == 0) goto L_0197;
fault((k & 255));
goto L_0198;
L_0197:
if (proterr != nmin) goto L_0199;
fault(14);
goto L_019a;
L_0199:
fault(0);
L_019a:
L_0198:
gg = 0;
ss = 0;
symtype = 0;
L_012e:
goto L_019b;
void compile()
{
// bounds [0 : 180]
/*todo: gcc jump table extension*/ void **c;
// bounds [1 : 12]
/*todo: gcc jump table extension*/ void **litop;
// bounds [1 : 14]
// do it now: const char {*,2}operator {NO INIT}
// bounds [0 : 7]
// do it now: const char {*,2}cc {NO INIT}
// bounds [0 : 15]
// do it now: const char {*,2}anyform {NO INIT}
// bounds [0 : 15]
// do it now: const short {*,2}decmap {NO INIT}
// bounds [0 : 15]
// do it now: static char {*,1}cnest; /* uninitialised */
int lmode;
int clab;
int dupid;
int resln;
static int lastdef;
static int lb;
static int ub;
int cp;
int ord;
int next;
int link;
int j;
int k;
int n;
int done;
int class;
int lit2;
int defs;
int decs;
int cident;
int pending;
// bounds [1 : 40]
// do it now: static int {*,1}pstack; /* uninitialised */
static char *name;
static int count;
goto L_019b;
void deflab(int l)
{
op(58, l);
access = 1;
L_019b:
goto L_019c;
void getnext()
{
struct ARFM *p;
U_00e4:
if (next != 0) goto L_019d;
if (link != 0) goto L_019e;
class = 0;
return;
L_019e:
p = &ar[link];
next = p->link;
link = p->sub;
L_019d:
for (;;) {
L_019f:
p = &ar[next];
x = p->sub;
class = p->class;
if (class >= 180) goto L_01a0;
goto L_01a1;
L_01a0:
if (x != 0) goto L_01a2;
next = p->link;
goto U_00e4;
L_01a2:
if (p->link == 0) goto L_01a3;
p->sub = link;
link = next;
L_01a3:
next = x;
}
L_01a1:
next = p->link;
if ((diag & 2) == 0) goto L_01a4;
if (name == "") goto L_01a5;
spaces((8 - *length(name)));
L_01a5:
strncpy(name,text[class],8+1);
write(x, 2);
space();
printstring(name);
space();
count = (count - 1);
if (count > 0) goto L_01a6;
count = 5;
strncpy(name,"",8+1);
newline();
L_01a6:
L_01a4:
L_019c:
goto L_01a7;
void setsubs(int n)
{
int p;
p = tmax;
for (;;) {
L_01a8:
if (n <= 0) goto L_01a9;
if (p >= tbase) goto L_01aa;
exit(0);
L_01aa:
tag[p].app = dimension;
p = (p - 1);
n = (n - 1);
}
L_01a9:
L_01a7:
goto L_01ab;
void setbp()
{
pending = (pending - 2);
lb = pstack[(pending + 1)];
ub = pstack[(pending + 2)];
if (((ub - lb) + 1) >= 0) goto L_01ac;
pos1 = 0;
next = link;
fault(11);
ub = lb;
L_01ac:
setconst(lb);
setconst(ub);
if (class == 146) goto L_01ad;
bp = (bp + 1);
buff[bp] = 98;
L_01ad:
L_01ab:
goto L_01ae;
void compileend(int type)
{
if (access == 0) goto L_01af;
open = 0;
if (blockform <= 7) goto L_01b0;
fault(19);
L_01b0:
L_01af:
for (;;) {
L_01b1:
if (dict[dmin] < 0) goto L_01b2;
fault((17 + (dict[dmin] & 1)));
dmin = (dmin + 1);
}
L_01b2:
bp = (bp + 1);
buff[bp] = 59;
if (type != 1) goto L_01b3;
bp = (bp + 1);
buff[bp] = 59;
L_01b3:
*bflags = (*bflags | open);
if (blocktag == 0) goto L_01b4;
if (level == 1) goto L_01b4;
deflab(0);
L_01b4:
if (type == 2) goto L_01b5;
if (level == type) goto L_01b6;
fault(16);
L_01b6:
goto L_01b7;
L_01b5:
if (level != 0) goto L_01b8;
fault(15);
L_01b8:
L_01b7:
endmark = 11;
L_01ae:
goto L_01b9;
void def(int p)
{
int t;
int f;
int type;
struct TAGFM *v;
if (bp == 0) goto L_01ba;
flushbuffer();
L_01ba:
defs = (defs + 1);
v = &tag[p];
t = 0;
if (v->index < 0) goto L_01bb;
if (v->index != 0) goto L_01bc;
id = (id + 1);
v->index = id;
L_01bc:
lastdef = v->index;
t = lastdef;
L_01bb:
op(36, t);
printident(p, 1);
t = v->flags;
type = t;
if ((type & (7 << 4)) < (6 << 4)) goto L_01bd;
type = (type & (\(7 << 4)));
L_01bd:
op(44, (type & 127));
f = v->format;
if ((t & 112) != (4 << 4)) goto L_01be;
f = tag[f].index;
L_01be:
if (f >= 0) goto L_01bf;
f = v->index;
L_01bf:
op(44, f);
f = (otype + ((t >> 4) & 120));
if (class != 125) goto L_01c0;
f = (f | 8);
L_01c0:
dim = v->app;
if (0 >= dim) goto L_01c1;
if (dim <= 6) goto L_01c2;
L_01c1:
dim = 0;
L_01c2:
op(44, (f + (dim << 8)));
if ((t & 4096) != 0) goto L_01c3;
defs = 0;
L_01c3:
f = (t & 15);
if ((v->flags & 128) == 0) goto L_01c4;
if (3 > f) goto L_01c5;
if (f <= 10) goto L_01c6;
L_01c5:
v->flags = (v->flags & (\128));
L_01c6:
ocount = (-1);
L_01c4:
dimension = 0;
if (otype != 2) goto L_01c7;
if (f == 2) goto L_01c8;
if (f == 12) goto L_01c8;
if (f != 14) goto L_01c7;
L_01c8:
v->flags = (v->flags - 1);
L_01c7:
L_01b9:
goto L_01c9;
void defslab(int n)
{
int p;
int l;
int b;
int w;
int bit;
p = tag[x].format;
l = dict[p];
if (l > n) goto L_01ca;
if (n > dict[(p + 1)]) goto L_01ca;
b = (n - l);
w = ((b >> 4) + p);
bit = (1 << (b & 15));
if ((dict[(w + 2)] & bit) == 0) goto L_01cb;
if (pending == 0) goto L_01cc;
fault(4);
L_01cc:
return;
L_01cb:
if (pending == 0) goto L_01cd;
dict[(w + 2)] = (dict[(w + 2)] | bit);
L_01cd:
setconst(n);
op(95, tag[x].index);
goto L_01ce;
L_01ca:
fault(12);
L_01ce:
access = 1;
L_01c9:
goto L_01cf;
void call()
{
struct TAGFM *t;
t = &tag[x];
op(64, t->index);
if ((t->flags & 16384) == 0) goto L_01d0;
access = 0;
L_01d0:
if (t->app != 0) goto L_01d1;
bp = (bp + 1);
buff[bp] = 69;
L_01d1:
L_01cf:
goto L_01d2;
void popdef()
{
setconst(pstack[pending]);
pending = (pending - 1);
L_01d2:
goto L_01d3;
void poplit()
{
if (pending != 0) goto L_01d4;
lit = 0;
goto L_01d5;
L_01d4:
lit = pstack[pending];
pending = (pending - 1);
L_01d5:
L_01d3:
if (sstype >= 0) goto L_01d6;
if (level != 0) goto L_01d7;
fault(13);
goto L_01d8;
L_01d7:
if (access != 0) goto L_01d9;
access = 1;
fault((-1));
L_01d9:
L_01d8:
L_01d6:
if ((diag & 2) == 0) goto L_01da;
if (sym == 10) goto L_01db;
newline();
L_01db:
printstring("ss =");
write(ss, 1);
newline();
count = 5;
strncpy(name,"",8+1);
L_01da:
next = ss;
pending = 0;
lmode = 0;
link = 0;
decs = 0;
defs = 0;
resln = 0;
done = 0;
ord = level;
if (this < 0) goto L_01dc;
ord = 1;
L_01dc:
c_0:
U_00eb:
if (next == link) goto L_01dd;
getnext();
goto *c[class];
L_01dd:
if ((diag & 2) == 0) goto L_01de;
if (count == 5) goto L_01de;
newline();
L_01de:
if ((lmode & ((16 | 4) | 8)) == 0) goto L_01df;
if ((lmode & 16) == 0) goto L_01e0;
op(66, (label - 1));
L_01e0:
if ((lmode & 4) == 0) goto L_01e1;
deflab(label);
L_01e1:
if ((lmode & 8) == 0) goto L_01e2;
deflab((label - 1));
L_01e2:
L_01df:
if (decs != 0) goto L_01e3;
return;
L_01e3:
if (atom1 == 0) goto L_01e4;
atom1 = 32768;
return;
L_01e4:
order = ord;
decl = ((decl & (\15)) + decmap[(decl & 15)]);
atom1 = atoms[(decl & 15)];
if (otype == 0) goto L_01e5;
if (atom1 == 7) goto L_01e6;
atom1 = (atom1 + 1);
L_01e6:
if (otype != 2) goto L_01e7;
n = (decl & 15);
if ((n & 1) == 0) goto L_01e8;
decl = (decl | 256);
if ((decl & 127) != 17) goto L_01e9;
decl = (decl | 8192);
L_01e9:
L_01e8:
goto L_01ea;
L_01e7:
decl = (decl | 512);
L_01ea:
L_01e5:
if (sstype != 0) goto L_01eb;
if (atom1 != 7) goto L_01eb;
sstype = 1;
L_01eb:
if ((decl & 128) == 0) goto L_01ec;
atom1 = (atom1 + 1);
L_01ec:
if (atom1 != 5) goto L_01ed;
ocount = 0;
cont = 43;
L_01ed:
if (anyform[(decl & 15)] != 0) goto L_01ee;
if (((decl >> 4) & 7) != 4) goto L_01ef;
if ((tag[fdef].flags & 128) == 0) goto L_01f0;
this = fdef;
L_01f0:
if (fdef != this) goto L_01f1;
atom1 = (32768 + 21);
L_01f1:
L_01ef:
if (fdef != 0) goto L_01f2;
atom1 = (32768 + 10);
L_01f2:
L_01ee:
return;
U_00ec:
access = 0;
goto U_00eb;
c_88:
c_28:
decl = (x & (\7));
fdef = (x & 7);
if ((x & 113) != ((2 << 4) + 1)) goto L_01f3;
fdef = realsln;
L_01f3:
decs = 1;
goto U_00eb;
c_34:
c_35:
otype = x;
ord = 1;
goto U_00eb;
c_152:
decl = (decl + (x << 1));
goto U_00eb;
c_31:
c_32:
specmode = (level + 1);
if (x != 9) goto L_01f4;
decl = (decl | 256);
L_01f4:
c_29:
ord = 1;
dim = 0;
c_30:
decl = (decl + x);
decs = 1;
goto U_00eb;
c_27:
lit = 0;
if (pending == 0) goto L_01f5;
poplit();
if (0 >= lit) goto L_01f6;
if (lit <= 6) goto L_01f7;
L_01f6:
atom1 = (32768 + 11);
return;
L_01f7:
L_01f5:
dim = lit;
decl = (decl + x);
decs = 1;
goto U_00eb;
c_37:
x = (x | 2048);
c_36:
lit = 0;
if (pending == 0) goto L_01f8;
poplit();
if (0 >= lit) goto L_01f9;
if (lit <= 255) goto L_01fa;
L_01f9:
atom1 = (32768 + 10);
return;
L_01fa:
L_01f8:
fdef = lit;
c_33:
decl = x;
decs = 1;
goto U_00eb;
c_39:
decl = (decl | 128);
ocount = (-1);
specmode = (-1);
goto U_00eb;
c_38:
decl = (64 + 4);
order = 1;
atom1 = x;
if (atom1 != 12) goto L_01fb;
decl = (decl | 128);
L_01fb:
fdef = (tmax + 1);
return;
c_175:
id = (id + 1);
tag[x].index = id;
return;
c_41:
decs = 1;
decl = ((x | 128) | 16384);
goto U_00eb;
c_133:
recid = 0;
rbase = (tmin - 1);
this = x;
fmbase = fdef;
formatlist = tmin;
def(this);
goto U_00eb;
c_148:
if (next != 0) goto L_01fc;
fdef = 0;
goto U_00eb;
L_01fc:
getnext();
fdef = x;
goto U_00eb;
c_127:
bp = (bp + 1);
buff[bp] = 125;
goto U_00eb;
c_126:
bp = (bp + 1);
buff[bp] = 123;
goto U_00eb;
c_174:
setbp();
c_171:
c_172:
c_173:
bp = (bp + 1);
buff[bp] = 126;
bp = (bp + 1);
buff[bp] = ((class - 171) + 65);
goto U_00eb;
c_168:
rbase = (-rbase);
sstype = 0;
specmode = 0;
c_147:
searchbase = 0;
tag[this].app = tmin;
tag[this].format = rbase;
goto U_00eb;
c_45:
if (x != 36) goto L_01fd;
bp = (bp + 1);
buff[bp] = 85;
L_01fd:
goto U_00eb;
c_46:
bp = (bp + 1);
buff[bp] = 92;
goto U_00eb;
c_47:
c_48:
c_42:
c_43:
c_44:
bp = (bp + 1);
buff[bp] = operator[x];
goto U_00eb;
goto L_01fe;
void push(int x)
{
if ((cnest[cp] & 2) == x) goto L_01ff;
cnest[cp] = (cnest[cp] | 1);
x = (x + 4);
L_01ff:
if ((cnest[cp] & 1) == 0) goto L_0200;
clab = (clab + 1);
L_0200:
cnest[(cp + 1)] = x;
cp = (cp + 1);
L_01fe:
goto L_0201;
void poplabel(int mode)
{
lmode = dict[dmin];
if (lmode < 0) goto L_0202;
if ((lmode & 1) == mode) goto L_0203;
L_0202:
fault((mode + 8));
goto L_0204;
L_0203:
dmin = (dmin + 1);
label = (label - 3);
L_0204:
L_0201:
c_56:
c_57:
push(x);
goto U_00eb;
c_58:
cnest[cp] = (cnest[cp] ^ 2);
goto U_00eb;
c_138:
x = (((128 + 32) + 16) + 4);
c_59:
c_60:
if (class != 138) goto L_0205;
op(102, (label - 1));
goto L_0206;
L_0205:
deflab((label - 1));
L_0206:
c_166:
c_62:
lmode = ((lmode & (8 | 16)) | (x >> 3));
clab = label;
cp = 1;
cnest[1] = (x & 7);
goto U_00eb;
c_72:
poplabel(0);
if ((lmode & 32) == 0) goto L_0207;
deflab((label + 1));
L_0207:
goto U_00ec;
c_69:
poplabel(1);
goto U_00eb;
c_163:
c_70:
poplabel(1);
if ((lmode & 3) != 3) goto L_0208;
fault(7);
L_0208:
c_68:
lmode = ((lmode & 8) | 3);
if (access == 0) goto L_0209;
op(70, (label - 1));
lmode = (8 | 3);
L_0209:
deflab(label);
if (next == 0) goto L_020a;
goto U_00eb;
L_020a:
c_120:
c_67:
c_71:
U_00ef:
if (lmode != 0) goto L_020b;
deflab((label - 1));
lmode = 16;
L_020b:
dmin = (dmin - 1);
if (dmin > dmax) goto L_020c;
abandon(3);
L_020c:
dict[dmin] = lmode;
label = (label + 3);
return;
c_64:
if (dict[dmin] >= 0) goto L_020d;
if (inhibit == 0) goto L_020e;
L_020d:
fault(13);
L_020e:
inhibit = 1;
n = 0;
if (pending != 0) goto L_020f;
n = 65535;
L_020f:
for (;;) {
L_0210:
if (pending <= 0) goto L_0211;
poplit();
if ((lit & (\15)) == 0) goto L_0212;
fault(10);
L_0212:
j = (1 << lit);
if ((n & j) == 0) goto L_0213;
dubious = 1;
L_0213:
n = (n | j);
}
L_0211:
op(111, n);
op(44, label);
lmode = (4 | 1);
goto U_00ef;
c_104:
op(74, tag[x].index);
inhibit = 1;
goto U_00ec;
c_149:
stats = (stats - 1);
access = 1;
inhibit = 1;
op(76, tag[x].index);
goto U_00eb;
c_63:
j = dmin;
l = (label - 3);
for (;;) {
L_0214:
if (dict[j] >= 0) goto L_0215;
fault(7);
goto U_00eb;
L_0215:
if ((dict[j] & 1) != 0) goto L_0216;
goto L_0217;
L_0216:
j = (j + 1);
l = (l - 3);
}
L_0217:
if (x != 32) goto L_0218;
l = (l + 1);
L_0218:
op(70, l);
dict[j] = (dict[j] | x);
goto U_00ec;
c_50:
bp = (bp + 1);
buff[bp] = 67;
goto U_00f0;
c_49:
bp = (bp + 1);
if (next == 0) goto L_0219;
buff[bp] = 34;
push(0);
goto L_021a;
L_0219:
buff[bp] = 63;
L_021a:
U_00f0:
if ((cnest[cp] & 2) == 0) goto L_021b;
x = (x ^ 1);
L_021b:
j = cp;
l = clab;
for (;;) {
L_021c:
if ((cnest[j] & 4) != 0) goto L_021d;
j = (j - 1);
l = (l - (cnest[j] & 1));
}
L_021d:
op(cc[x], l);
if ((cnest[cp] & 1) == 0) goto L_021e;
deflab((clab + 1));
L_021e:
cp = (cp - 1);
clab = (clab - (cnest[cp] & 1));
goto U_00eb;
c_78:
c_79:
c_80:
open = 0;
c_82:
access = 0;
c_89:
c_81:
bp = (bp + 1);
buff[bp] = x;
goto U_00eb;
c_65:
poplit();
op(101, lit);
goto U_00ec;
c_51:
bp = (bp + 1);
buff[bp] = 83;
goto U_00eb;
c_53:
bp = (bp + 1);
buff[bp] = 106;
goto U_00eb;
c_52:
bp = (bp + 1);
buff[bp] = 90;
goto U_00eb;
c_74:
if (level != 0) goto L_021f;
if (progmode > 0) goto L_0220;
progmode = 1;
goto L_0221;
L_0220:
fault(7);
L_0221:
L_021f:
specmode = (level + 1);
blockx = 0;
bp = (bp + 1);
buff[bp] = 72;
return;
c_77:
perm = 0;
lines = 0;
stats = 0;
closeinput();
selectinput(1);
list = (list - 1);
tbase = tmax;
tstart = tmax;
return;
c_76:
if (include == 0) goto L_0222;
if (x != 0) goto L_0222;
lines = include;
sstype = 0;
closeinput();
list = includelist;
includelevel = 0;
include = 0;
selectinput(1);
return;
L_0222:
ss = (-1);
c_75:
compileend(x);
return;
c_85:
if (x != 0) goto L_0223;
control = lit;
goto L_0224;
L_0223:
if (((lit >> 14) & 3) != 1) goto L_0225;
diag = (lit & 16383);
L_0225:
L_0224:
op((122 - x), lit);
goto U_00eb;
c_83:
list = ((list + x) - 2);
goto U_00eb;
c_84:
realsln = x;
goto U_00eb;
c_86:
if (include == 0) goto L_0226;
fault(7);
return;
L_0226:
getnext();
strncpy(includefile,string(((x - 16384) + stbase)),63+1);
int main(int argc, char **argv) {
if (imp_onevent(0x0200)) goto L_0227 /* returns FALSE during longjump setup */
abandon(9);
L_0227:
openinput(3, includefile);
include = lines;
lines = 0;
includelist = list;
includelevel = level;
selectinput(3);
goto U_00eb;
c_154:
dimension = (dimension + 1);
if (dimension != (6 + 1)) goto L_0228;
fault(11);
L_0228:
goto U_00eb;
c_145:
setbp();
goto U_00eb;
c_146:
setbp();
c_142:
if (dimension != 0) goto L_0229;
dimension = 1;
L_0229:
op(100, dimension);
op(44, defs);
if (class == 146) goto L_022a;
setsubs(defs);
if (dict[dmin] >= 0) goto L_022b;
if (inhibit != 0) goto L_022b;
if (level != 0) goto L_022c;
L_022b:
fault(13);
L_022c:
L_022a:
dimension = 0;
defs = 0;
goto U_00eb;
c_128:
id = dupid;
goto U_00eb;
c_130:
blockx = x;
if ((decl & 128) != 0) goto L_022d;
if (level == 0) goto L_022d;
op(70, 0);
L_022d:
c_125:
dupid = id;
if (level >= 0) goto L_022e;
return;
L_022e:
c_90:
def(x);
goto U_00eb;
c_131:
if ((tag[x].flags & (127 + 8192)) != (17 + 8192)) goto L_022f;
tag[x].format = lit;
goto L_0230;
L_022f:
if (pending == 0) goto L_0231;
setconst(lit);
L_0231:
def(x);
op(65, 1);
L_0230:
cident = x;
goto U_00eb;
c_124:
if ((tag[cident].flags & 256) == 0) goto L_0232;
dubious = 1;
L_0232:
goto U_00eb;
c_97:
c_98:
c_99:
c_96:
call();
goto U_00eb;
c_165:
c_100:
c_101:
c_102:
c_103:
c_91:
c_92:
c_106:
c_107:
c_108:
c_109:
k = tag[x].index;
if (k >= 0) goto L_0233;
op(110, (-k));
goto L_0234;
L_0233:
op(64, k);
L_0234:
goto U_00eb;
c_121:
setconst(0);
goto U_00eb;
c_167:
bp = (bp + 1);
buff[bp] = 71;
goto U_00f1;
c_93:
if (x >= 0) goto L_0235;
setconst(tag[(-x)].format);
goto U_00eb;
L_0235:
if ((x & 16384) == 0) goto L_0236;
bp = (bp + 1);
buff[bp] = 39;
U_00f1:
x = ((x - 16384) + stbase);
k = *byteinteger(x);
bp = (bp + 1);
buff[bp] = k;
k = (k + x);
for (;;) {
L_0237:
if (x != k) goto L_0238;
goto U_00eb;
L_0238:
x = (x + 1);
bp = (bp + 1);
buff[bp] = *byteinteger(x);
}
L_0236:
if ((x & 8192) == 0) goto L_0239;
x = ((x - 8192) + stbase);
k = *byteinteger(x);
op(68, k);
bp = (bp + 1);
buff[bp] = 44;
k = (k + x);
for (;;) {
L_023a:
if (x != k) goto L_023b;
goto U_00eb;
L_023b:
x = (x + 1);
j = *byteinteger(x);
if (j != 64) goto L_023c;
op(64, litpool[*byteinteger((x + 1))]);
goto U_00eb;
L_023c:
bp = (bp + 1);
buff[bp] = j;
}
L_0239:
setconst(litpool[x]);
goto U_00eb;
c_137:
bp = (bp + 1);
buff[bp] = 105;
goto U_00eb;
c_141:
bp = (bp + 1);
buff[bp] = 97;
goto U_00eb;
c_132:
ocount = ((ub - lb) + 1);
def(x);
dimension = 1;
setsubs(1);
if (next != 0) goto L_023d;
if (ocount <= 0) goto L_023e;
op(65, ocount);
L_023e:
ocount = (-1);
goto L_023f;
L_023d:
getnext();
L_023f:
goto U_00eb;
c_162:
lit = ocount;
goto U_00f2;
c_143:
poplit();
U_00f2:
if (lit >= 0) goto L_0240;
fault(10);
lit = 0;
L_0240:
getnext();
goto U_00f3;
c_139:
c_153:
lit = 1;
U_00f3:
if (pending == 0) goto L_0241;
popdef();
L_0241:
op(65, lit);
ocount = (ocount - lit);
if (ocount < 0) goto L_0242;
if (x == 0) goto L_0243;
goto U_00eb;
L_0243:
if (ocount != 0) goto L_0244;
ocount = (-1);
return;
L_0244:
L_0242:
fault(11);
return;
c_105:
op(87, tag[x].index);
inhibit = 1;
goto U_00ec;
c_134:
def(x);
n = ((ub - lb) + 1);
n = ((n + 15) >> 4);
j = dmax;
dmax = ((dmax + n) + 2);
if (dmax < dmin) goto L_0245;
abandon(1);
L_0245:
tag[x].format = j;
dict[j] = lb;
dict[(j + 1)] = ub;
for (;;) {
L_0246:
n = (n - 1);
if (n >= 0) goto L_0247;
goto U_00eb;
L_0247:
j = (j + 1);
dict[(j + 1)] = 0;
}
c_151:
stats = (stats - 1);
if (x >= tbase) goto L_0248;
fault(7);
return;
L_0248:
if (pending == 0) goto L_0249;
defslab(pstack[1]);
goto L_024a;
L_0249:
if (tag[x].app == 0) goto L_024b;
fault(4);
return;
L_024b:
tag[x].app = 1;
n = tag[x].format;
for (j = dict[n]; j += 1; j != dict[(n + 1)]) {
defslab(j);
if (bp < 128) goto L_0250;
flushbuffer();
L_0250:
}
L_024f:
L_024a:
inhibit = 1;
return;
c_140:
bp = (bp + 1);
buff[bp] = 112;
goto U_00eb;
c_144:
buff[(bp + 1)] = 112;
buff[(bp + 2)] = 69;
bp = (bp + 2);
goto U_00eb;
c_155:
if (x >= 0) goto L_0251;
lit = tag[(-x)].format;
goto L_0252;
L_0251:
lit = litpool[x];
L_0252:
pending = (pending + 1);
pstack[pending] = lit;
goto U_00eb;
c_156:
lit = pstack[pending];
if (lit >= 0) goto L_0253;
lit = (-lit);
L_0253:
pstack[pending] = lit;
goto U_00eb;
c_157:
lit = (-pstack[pending]);
pstack[pending] = lit;
goto U_00eb;
c_158:
lit = (\pstack[pending]);
pstack[pending] = lit;
goto U_00eb;
c_159:
c_160:
c_161:
pending = (pending - 1);
lit2 = pstack[(pending + 1)];
lit = pstack[pending];
goto *litop[(x >> 2)];
litop_10:
lit = (lit * lit2);
goto U_00f4;
litop_12:
litop_3:
n = 1;
if (lit2 >= 0) goto L_0254;
fault(10);
L_0254:
for (;;) {
L_0255:
if (lit2 <= 0) goto L_0256;
lit2 = (lit2 - 1);
n = (n * lit);
}
L_0256:
lit = n;
goto U_00f4;
litop_1:
lit = (lit << lit2);
goto U_00f4;
litop_2:
lit = (lit >> lit2);
goto U_00f4;
litop_5:
lit = (lit & lit2);
goto U_00f4;
litop_11:
litop_4:
if (lit2 != 0) goto L_0257;
fault(10);
goto L_0258;
L_0257:
lit = (lit / lit2);
L_0258:
goto U_00f4;
litop_8:
lit = (lit + lit2);
goto U_00f4;
litop_9:
lit = (lit - lit2);
goto U_00f4;
litop_6:
lit = (lit | lit2);
goto U_00f4;
litop_7:
lit = (lit ^ lit2);
U_00f4:
pstack[pending] = lit;
goto U_00eb;
c_170:
if (impcom.option == "") goto L_0259;
fault(4);
L_0259:
impcom.option = string(((x - 16384) + stbase));
goto U_00eb;
c_135:
resln = 2;
goto U_00eb;
c_136:
resln = (resln + 1);
goto U_00eb;
c_55:
op(114, resln);
resln = 0;
goto U_00eb;
c_164:
op(114, (resln + 4));
resln = 0;
c_122:
x = 6;
goto U_00f0;
c_87:
setconst(pstack[1]);
bp = (bp + 1);
buff[bp] = 80;
goto U_00eb;
for (;;) {
L_025a:
L_025a:
if (imp_onevent(0x0200)) goto L_025b /* returns FALSE during longjump setup */
abandon(5);
L_025b:
impcom.flags = 0;
impcom.option = "";
if ((impcom.flags & 4096) == 0) goto L_025c;
list = 15;
L_025c:
openoutput(2, "LISTING");
openinput(2, "prims.inc");
selectinput(2);
selectoutput(2);
tag[800] = 0;
tag[0] = 0;
tag[0].flags = 7;
for (x = 0; x += 1; x != 2047) {
hash[x] = 0;
}
L_0260:
printstring(" Edinburgh IMP77 Compiler - Version ");
printstring(version);
newlines(2);
op(108, 0);
compileblock(0, 0, 6000, 0, 0);
bp = (bp + 1);
buff[bp] = 10;
flushbuffer();
impcom.statements = stats;
if (faulty == 0) goto L_0261;
impcom.statements = (-faulty);
L_0261: