#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %BEGIN; !HAL-7502
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 ! INPUT/OUTPUT STREAMS
// 3 %OWNINTEGER MAIN=1, PRE=2; !INPUT
static int MAIN = 1;
static int PRE = 2;
// 4 %OWNINTEGER BIN=1, LIS=2; !OUTPUT
static int BIN = 1;
static int LIS = 2;
// 5 ! OPERAND TYPES
// 6 %OWNINTEGER OPMASK=16_F000; !MACHINE INSTRUCTION OR MACRO
static int OPMASK = 61440;
// 7 %OWNINTEGER MACRO=16_A000
static int MACRO = 40960;
// 8 %OWNINTEGER FMASK=16_0800; !FORWARD REF
static int FMASK = 2048;
// 9 %OWNINTEGER UMASK=16_0200; !UNDEF (FORWARD REF)
static int UMASK = 512;
// 10 %OWNINTEGER REG=16_0080; !REGISTER
static int REG = 128;
// 11 %OWNINTEGER MEMMASK=16_0040; !MEM REF
static int MEMMASK = 64;
// 12 %OWNINTEGER RELMASK=16_0020; !RELOCATABLE
static int RELMASK = 32;
// 13 %OWNINTEGER XMASK=16_0010; !INDEXED
static int XMASK = 16;
// 14 %OWNINTEGER REGXMASK=16_0090; !=REG+XMASK
static int REGXMASK = 144;
// 15 %OWNINTEGER RELUXMASK=16_0230; !=RELMASK+UMASK+XMASK
static int RELUXMASK = 560;
// 16 ! TEXT POINTERS (BYTE ADDRESSES)
// 17 %OWNINTEGER CODEPOS; !(NOT ACTUALLY BYTE)
static int CODEPOS;
// 18 %OWNINTEGER STARTPOS; !START OF CURRENT LINE
static int STARTPOS;
// 19 %OWNINTEGER GETPOS; !INPUT POINTER (NEXT)
static int GETPOS;
// 20 %OWNINTEGER PUTPOS
static int PUTPOS;
// 21 %OWNINTEGER PSEUDOLIM
static int PSEUDOLIM;
// 22 %OWNINTEGER PRINTPOS; !START OF PRINT LINE
static int PRINTPOS;
// 23 %OWNINTEGER FAULTPOS
static int FAULTPOS;
// 24 %OWNINTEGER MACLIM; !MACRO DEF LIMIT
static int MACLIM;
// 25 ! OTHER POINTERS (WORD ADDRESSES)
// 26 %OWNINTEGER MP; !MACRO-CALL PARAMETERS
static int MP;
// 27 %OWNINTEGER QBASE,QSTART,QLIM,TRANSF; !OPERAND QUEUE
static int QBASE;
static int QSTART;
static int QLIM;
static int TRANSF;
// 28 %OWNINTEGER DEFMIN; !TAG MIN (DOWN - RESET)
static int DEFMIN;
// 29 %OWNINTEGER DEFLIM; !TAG LIM (FIXED)
static int DEFLIM;
// 30 %OWNINTEGER ALMAX; !ASSEMBLER LAB MAX (UP - RESET)
static int ALMAX;
// 31 %OWNINTEGER LABMIN; !USER LAB MIN (DOWN - RESET)
static int LABMIN;
// 32 %OWNINTEGER LABLIM; !USER LAB LIM (FIXED)
static int LABLIM;
// 33 %OWNINTEGER BP; !BLOCK POINTER (UP - DOWN)
static int BP;
// 34 %OWNINTEGER NP; !NEST POINTER (DOWN - UP)
static int NP;
// 35 %OWNINTEGER STORELIM; !(FIXED)
static int STORELIM;
// 36
// 37 %INTEGER SYM; !CURRENT SYMBOL
int SYM;
// 38 %INTEGER TERM; !TAG TERMINATOR
int TERM;
// 39 %INTEGER FSYM; !FAULT FLAG SYMBOL
int FSYM;
// 40 %OWNINTEGER CHARS=0; !PRINT CHAR COUNT
static int CHARS = 0;
// 41 %OWNINTEGER LINES=0; !PRINT LINE COUNT
static int LINES = 0;
// 42 %OWNINTEGER PASS=-1; !CURRENT PASS (-1,0,1)
static int PASS = -1;
// 43 %OWNINTEGER LIST=-1; !LISTING CONTROL
static int LIST = -1;
// 44 %INTEGER ASSCOND,SKIP; !ASSEMBLY CONDITIONS (BIT NEST)
int ASSCOND;
int SKIP;
// 45 %OWNINTEGER SAVE=1; !REG SAVE DISPLACEMENT
static int SAVE = 1;
// 46 %OWNINTEGER TEMPS=12; !TEMPORARY REGISTER SET
static int TEMPS = 12;
// 47 %OWNINTEGER CONTROL=16_40; !OBJECT CODE CONTROL FIELD
static int CONTROL = 64;
// 48 %OWNINTEGER CHECK=0; !BINARY CHECKSUM
static int CHECK = 0;
// 49 %INTEGER LOCTYPE,LOC; !LOCATION COUNTER
int LOCTYPE;
int LOC;
// 50 %INTEGER ACC,ATYPE,AVAL; !MAIN TEMP REGISTER
int ACC;
int ATYPE;
int AVAL;
// 51 %INTEGER CREG; !CONDITION CODE
int CREG;
// 52 %INTEGER COND; !CONDITION CODE MASK
int COND;
// 53 %INTEGER DREG,DUSE; !DESTINATION REGISTER
int DREG;
int DUSE;
// 54 %INTEGER TYPE,VAL; !CURRENT TYPE,VALUE
int TYPE;
int VAL;
// 55 %INTEGER TAG1,TAG2; !TAG (CHARS 1:3, 4:6)
int TAG1;
int TAG2;
// 56 %INTEGER MODE; !ASSEMBLY MODE
int MODE;
// 57 %INTEGER PEND; !TAG ALREADY RECOGNISED
int PEND;
// 58 %INTEGER FLAG; !JUMPS
int FLAG;
// 59
// 60
// 61 %INTEGER SBOUND
int SBOUND;
// 62 SBOUND = FREESTORE-260; !ALLOW FOR INPUT BUFFER
SBOUND = _imp_FREESTORE() - 260;
// 63 SBOUND = SBOUND-256 %IF OUTDEV = 2
if (_imp_OUTDEV() != 2) goto L_0001;
SBOUND = SBOUND - 256;
L_0001:;
// 64 SELECT OUTPUT(LIS)
_imp_SELECTOUTPUT(LIS);
// 65 SBOUND = SBOUND-256 %IF OUTDEV = 2
if (_imp_OUTDEV() != 2) goto L_0002;
SBOUND = SBOUND - 256;
L_0002:;
// 66 %INTEGERARRAY STORE(1:SBOUND)
int STORE[SBOUND - 1 + 1];
struct _imp_dv STORE_dv = {STORE, sizeof(int) /*, dims, <bounds> */};
// 67
// 68 %INTEGERFN CHAR(%INTEGER P)
int CHAR(int P) {
// 69 !BYTE FETCH
// 70 %result = byteinteger(P)
return *_imp_BYTEINTEGER(P);
// 71 %END
} /* end of CHAR */
// 72
// 73 %ROUTINE PUT CHAR(%INTEGER K)
void PUTCHAR(int K) {
// 74 !AT PUTPOS WITH POST-INCREMENT
// 75 byteinteger(putpos) = k
*_imp_BYTEINTEGER(PUTPOS) = K;
// 76 putpos = putpos + 1
PUTPOS = PUTPOS + 1;
// 77 %END
return;
} /* end of PUTCHAR */
// 78
// 79 %ROUTINE FAULT(%INTEGER K)
void FAULT(int K) {
// 80 !RECORD (FIRST) FAULT
// 81 !NOT NECESSARILY CULPABLE IN PASS 0
// 82 FSYM = K %IF FSYM = ' '
if (FSYM != 32) goto L_0003;
FSYM = K;
L_0003:;
// 83 %END
return;
} /* end of FAULT */
// 84
// 85 %ROUTINE PRINT(%INTEGER K)
void PRINT(int K) {
// 86 INTEGER(CODEPOS+CHARS) = K
*_imp_INTEGER(CODEPOS + CHARS) = K;
// 87 CHARS = CHARS+1
CHARS = CHARS + 1;
// 88 %END
return;
} /* end of PRINT */
// 89
// 90 %ROUTINE PRINT WORD(%INTEGER V)
void PRINTWORD(int V) {
// 91 %ROUTINE PRINT HIT(%INTEGER V)
void PRINTHIT(int V) {
// 92 V = V&15+'0'; V = V+7 %IF V > '9'
V = (V & 15) + 48;
if (V <= 57) goto L_0004;
V = V + 7;
L_0004:;
// 93 PRINT(V)
PRINT(V);
// 94 %END
return;
} /* end of PRINTHIT */
// 95 %ROUTINE PRINT1(%INTEGER V)
void PRINT1(int V) {
// 96 PRINT HIT(V>>4); PRINT HIT(V)
PRINTHIT((unsigned int)V >> 4);
PRINTHIT(V);
// 97 %END
return;
} /* end of PRINT1 */
// 98 PRINT1(V>>8); PRINT1(V)
PRINT1((unsigned int)V >> 8);
PRINT1(V);
// 99 %END
return;
} /* end of PRINTWORD */
// 100
// 101 %ROUTINE PRINT LOC
void PRINTLOC(void) {
// 102 PRINT WORD(LOC)
PRINTWORD(LOC);
// 103 %IF LOCTYPE&RELMASK # 0 %THEN PRINT('''') %ELSE PRINT(' ')
if (LOCTYPE & RELMASK == 0) goto L_0005;
PRINT(39);
goto L_0006;
L_0005:;
PRINT(32);
L_0006:;
// 104 PRINT(' ')
PRINT(32);
// 105 %END
return;
} /* end of PRINTLOC */
// 106
// 107 %ROUTINE DO NEWLINE
void DONEWLINE(void) {
// 108 NEWLINE; LINES = LINES+1
_imp_NEWLINE();
LINES = LINES + 1;
// 109 NEWLINES(2) %AND LINES = 0 %IF LINES = 61
if (LINES != 61) goto L_0007;
_imp_NEWLINES(2);
LINES = 0;
L_0007:;
// 110 %END
return;
} /* end of DONEWLINE */
// 111
// 112 %ROUTINE PRINT LINE
void PRINTLINE(void) {
// 113 %ROUTINE PRINTIT(%INTEGER SUB)
void PRINTIT(int SUB) {
// 114 %OWNINTEGER MARKER=124; !VERTICAL BAR
static int MARKER = 124;
// 115 %INTEGER P,Q,K
int P;
int Q;
int K;
// 116 %RETURN %IF CHARS = 0 %AND CHAR(PRINTPOS) = NL
if (CHARS != 0) goto L_0008;
if (CHAR(PRINTPOS) != 10) goto L_0008;
return;
L_0008:;
// 117 PRINT SYMBOL(FSYM); SPACE
_imp_PRINTSYMBOL(FSYM);
_imp_SPACE();
// 118 P = CODEPOS; Q = P+CHARS
P = CODEPOS;
Q = P + CHARS;
// 119 PRINT SYMBOL(INTEGER(P)) %AND P=P+1 %WHILE P # Q
L_0009:;
if (P == Q) goto L_000A;
_imp_PRINTSYMBOL(*_imp_INTEGER(P));
P = P + 1;
goto L_0009;
L_000A:;
// 120 %RETURN %IF PRINTPOS = 0
if (PRINTPOS != 0) goto L_000B;
return;
L_000B:;
// 121 SPACES(17-CHARS)
_imp_SPACES(17 - CHARS);
// 122 P = PRINTPOS; Q = 0
P = PRINTPOS;
Q = 0;
// 123 %CYCLE
L_000C:;
// 124 PRINT SYMBOL(MARKER) %IF P = FAULTPOS
if (P != FAULTPOS) goto L_000D;
_imp_PRINTSYMBOL(MARKER);
L_000D:;
// 125 K = CHAR(P); K = SUB %IF P = PSEUDOLIM
K = CHAR(P);
if (P != PSEUDOLIM) goto L_000E;
K = SUB;
L_000E:;
// 126 PRINT SYMBOL('''') %IF (K!!Q)&128 # 0
if ((K ^ Q) & 128 == 0) goto L_000F;
_imp_PRINTSYMBOL(39);
L_000F:;
// 127 %RETURN %IF K = NL
if (K != 10) goto L_0010;
return;
L_0010:;
// 128 PRINT SYMBOL(K&127)
_imp_PRINTSYMBOL(K & 127);
// 129 P = P+1; Q = K
P = P + 1;
Q = K;
// 130 %REPEAT
goto L_000C;
// 131 %END
} /* end of PRINTIT */
// 132 %RETURN %IF PASS = 0
if (PASS != 0) goto L_0011;
return;
L_0011:;
// 133
// 134 %UNLESS LIST < 0 %OR (PRINTPOS=0 %AND FSYM=' ' %AND LIST&1=0) %START
if (LIST < 0) goto L_0012;
if (PRINTPOS != 0) goto L_0013;
if (FSYM != 32) goto L_0013;
if (LIST & 1 == 0) goto L_0012;
L_0013:;
// 135 NEWLINES(3) %IF LINES = 0
if (LINES != 0) goto L_0014;
_imp_NEWLINES(3);
L_0014:;
// 136 PRINTIT(' ')
PRINTIT(32);
// 137 DO NEWLINE
DONEWLINE();
// 138 %FINISH
L_0012:;
// 139 %IF FSYM # ' ' %AND OUTDEV # 1 %START
if (FSYM == 32) goto L_0015;
if (_imp_OUTDEV() == 1) goto L_0015;
// 140 SELECT OUTPUT(0)
_imp_SELECTOUTPUT(0);
// 141 PRINTPOS = STARTPOS %IF PRINTPOS = 0
if (PRINTPOS != 0) goto L_0016;
PRINTPOS = STARTPOS;
L_0016:;
// 142 PRINT LOC %IF CHARS = 0
if (CHARS != 0) goto L_0017;
PRINTLOC();
L_0017:;
// 143 PRINTIT(NL)
PRINTIT(10);
// 144 NEWLINE
_imp_NEWLINE();
// 145 SELECT OUTPUT(LIS)
_imp_SELECTOUTPUT(LIS);
// 146 %FINISH
L_0015:;
// 147 FSYM = ' '; PRINTPOS = 0; CHARS = 0
FSYM = 32;
PRINTPOS = 0;
CHARS = 0;
// 148 %END
return;
} /* end of PRINTLINE */
// 149
// 150 %ROUTINE PUT WORD(%INTEGER V)
void PUTWORD(int V) {
// 151 CHECK = CHECK!!V
CHECK = CHECK ^ V;
// 152 SELECT OUTPUT(BIN)
_imp_SELECTOUTPUT(BIN);
// 153 PRINT CH(V>>12&15+CONTROL)
_imp_PRINTCH(((unsigned int)V >> 12 & 15) + CONTROL);
// 154 PRINT CH(V>>8&15+16_40)
_imp_PRINTCH(((unsigned int)V >> 8 & 15) + 64);
// 155 PRINT CH(V>>4&15+16_40)
_imp_PRINTCH(((unsigned int)V >> 4 & 15) + 64);
// 156 PRINT CH(V&15+16_40)
_imp_PRINTCH((V & 15) + 64);
// 157 CONTROL = 16_50
CONTROL = 80;
// 158 SELECT OUTPUT(LIS)
_imp_SELECTOUTPUT(LIS);
// 159 %END
return;
} /* end of PUTWORD */
// 160
// 161 %ROUTINE PLANT VAL
void PLANTVAL(void) {
// 162 %IF PASS > 0 %START
if (PASS <= 0) goto L_0018;
// 163 %IF CHARS = 0 %START
if (CHARS != 0) goto L_0019;
// 164 %IF PRINTPOS#0 %THEN PRINT LOC %ELSE %START
if (PRINTPOS == 0) goto L_001A;
PRINTLOC();
goto L_001B;
L_001A:;
// 165 PRINT(' '); PRINT(' '); PRINT(' ')
PRINT(32);
PRINT(32);
PRINT(32);
// 166 PRINT(' '); PRINT(' '); PRINT(' ')
PRINT(32);
PRINT(32);
PRINT(32);
// 167 %FINISH
L_001B:;
// 168 %FINISH
L_0019:;
// 169 PRINT(' ') %IF CHARS = 10
if (CHARS != 10) goto L_001C;
PRINT(32);
L_001C:;
// 170 PRINT WORD(VAL); PUT WORD(VAL)
PRINTWORD(VAL);
PUTWORD(VAL);
// 171 PRINT('''') %IF TYPE&RELMASK # 0
if (TYPE & RELMASK == 0) goto L_001D;
PRINT(39);
L_001D:;
// 172 PRINT LINE %IF CHARS >= 15
if (CHARS < 15) goto L_001E;
PRINTLINE();
L_001E:;
// 173 %FINISH
L_0018:;
// 174 LOC = LOC+1
LOC = LOC + 1;
// 175 %END
return;
} /* end of PLANTVAL */
// 176
// 177 %ROUTINE PLANT(%INTEGER V)
void PLANT(int V) {
// 178 %INTEGER THOLD,VHOLD
int THOLD;
int VHOLD;
// 179 THOLD = TYPE; VHOLD = VAL
THOLD = TYPE;
VHOLD = VAL;
// 180 TYPE = 0; VAL = V
TYPE = 0;
VAL = V;
// 181 PLANT VAL
PLANTVAL();
// 182 TYPE = THOLD; VAL = THOLD
TYPE = THOLD;
VAL = THOLD;
// 183 %END
return;
} /* end of PLANT */
// 184
// 185 %ROUTINE NEST(%INTEGER K)
void NEST(int K) {
// 186 NP = NP-1; !!%MONITOR 23 %IF NP = BP
NP = NP - 1;
// 187 INTEGER(NP) = K
*_imp_INTEGER(NP) = K;
// 188 %END
return;
} /* end of NEST */
// 189
// 190 %ROUTINE SET LAB(%INTEGER DEST)
void SETLAB(int DEST) {
// 191 %INTEGER P,Q
int P;
int Q;
// 192 Q = 0
Q = 0;
// 193 %CYCLE
L_001F:;
// 194 TYPE = INTEGER(NP); P = TYPE&16_3FF+DEFLIM; !DEST SLOT
TYPE = *_imp_INTEGER(NP);
P = (TYPE & 1023) + DEFLIM;
// 195 NP = NP+1
NP = NP + 1;
// 196 VAL = INTEGER(NP); !LOC OF JUMP
VAL = *_imp_INTEGER(NP);
// 197 NP = NP+1
NP = NP + 1;
// 198 ATYPE = -1; CREG = -1
ATYPE = -1;
CREG = -1;
// 199 FLAG = 0;
FLAG = 0;
// 200 %IF TYPE&16_800 = 0 %START
if (TYPE & 2048 != 0) goto L_0020;
// 201 FLAG = 1 %IF DEST-VAL+PASS <= 128
if (DEST - VAL + PASS > 128) goto L_0021;
FLAG = 1;
L_0021:;
// 202 %finish %ELSE %IF TYPE&16_400 # 0 %START
goto L_0022;
L_0020:;
if (TYPE & 1024 == 0) goto L_0023;
// 203 FLAG = 2 %IF DEST-VAL+PASS+PASS = 1
if (DEST - VAL + PASS + PASS != 1) goto L_0024;
FLAG = 2;
L_0024:;
// 204 %FINISH
L_0023:;
L_0022:;
// 205 %IF PASS = 0 %START
if (PASS != 0) goto L_0025;
// 206 DEST = DEST-FLAG; INTEGER(P) = DEST
DEST = DEST - FLAG;
*_imp_INTEGER(P) = DEST;
// 207 %IF FLAG # 0 %START
if (FLAG == 0) goto L_0026;
// 208 LOC = LOC-FLAG
LOC = LOC - FLAG;
// 209 %WHILE P # ALMAX %CYCLE
L_0027:;
if (P == ALMAX) goto L_0028;
// 210 P = P+1; INTEGER(P) = INTEGER(P)-FLAG
P = P + 1;
*_imp_INTEGER(P) = *_imp_INTEGER(P) - FLAG;
// 211 %REPEAT
goto L_0027;
L_0028:;
// 212 %FINISH
L_0026:;
// 213 %finish %ELSE %START
goto L_0029;
L_0025:;
// 214 FAULT('P') %IF INTEGER(P) # DEST
if (*_imp_INTEGER(P) == DEST) goto L_002A;
FAULT(80);
L_002A:;
// 215 %FINISH
L_0029:;
// 216 %RETURN %IF INTEGER(NP)&16_1000 = 0
if (*_imp_INTEGER(NP) & 4096 != 0) goto L_002B;
return;
L_002B:;
// 217 %IF INTEGER(NP)&16_2000 # 0 %AND Q = 0 %START; !OR
if (*_imp_INTEGER(NP) & 8192 == 0) goto L_002C;
if (Q != 0) goto L_002C;
// 218 DEST = VAL+1
DEST = VAL + 1;
// 219 DEST = VAL+2-FLAG %UNLESS TYPE&16_C00 = 16_C00
if (TYPE & 3072 == 3072) goto L_002D;
DEST = VAL + 2 - FLAG;
L_002D:;
// 220 Q = 1
Q = 1;
// 221 %FINISH
L_002C:;
// 222 %REPEAT
goto L_001F;
// 223 %END
} /* end of SETLAB */
// 224
// 225 %ROUTINE ASSEMBLE
void ASSEMBLE(void) {
// 226 ! 7502 OP-CODES
// 227 %OWNINTEGER ADD=16_F400, SUB=16_F500, AND=16_F100
static int ADD = 62464;
static int SUB = 62720;
static int AND = 61696;
// 228 %OWNINTEGER OR=16_F000, XOR=16_F700, COMP=16_F200
static int OR = 61440;
static int XOR = 63232;
static int COMP = 61952;
// 229 %OWNINTEGER COPY=16_F300
static int COPY = 62208;
// 230 %OWNINTEGER LOADI=16_6000, SKIDI=16_7000, ADDI=16_8000
static int LOADI = 24576;
static int SKIDI = 28672;
static int ADDI = 32768;
// 231 %OWNINTEGER ANDI=16_9000
static int ANDI = 36864;
// 232 %OWNINTEGER BOC=16_5800, BOCR=16_5000, JUM=16_4000
static int BOC = 22528;
static int BOCR = 20480;
static int JUM = 16384;
// 233 %OWNINTEGER SKIP=16_4002, LOADC=16_20F2, ROT=16_3000
static int SKIP = 16386;
static int LOADC = 8434;
static int ROT = 12288;
// 234 %OWNINTEGER LOAD=16_2000, STORE=16_2008
static int LOAD = 8192;
static int STORE = 8200;
// 235
// 236 %INTEGER Q,NQ,OP,K,LITVAL,TYPE1,VAL1,FREE
int Q;
int NQ;
int OP;
int K;
int LITVAL;
int TYPE1;
int VAL1;
int FREE;
// 237 %SWITCH ASS(-30:-1)
int ASS_index;
int ASS_line;
char *ASS_file;
static const void *ASS[30] = {
&&case_ASS_missing, &&case_ASS_missing, &&case_ASS_missing, &&case_ASS_missing, &&case_ASS_M26,
&&case_ASS_M25, &&case_ASS_M24, &&case_ASS_M23, &&case_ASS_M22, &&case_ASS_M21,
&&case_ASS_M20, &&case_ASS_missing, &&case_ASS_M18, &&case_ASS_M17, &&case_ASS_M16,
&&case_ASS_M15, &&case_ASS_M14, &&case_ASS_M13, &&case_ASS_M12, &&case_ASS_M11,
&&case_ASS_missing, &&case_ASS_missing, &&case_ASS_M8, &&case_ASS_M7, &&case_ASS_M6,
&&case_ASS_M5, &&case_ASS_M4, &&case_ASS_M3, &&case_ASS_M2, &&case_ASS_M1};
// 238
// 239 %ROUTINE COMBINE
void COMBINE(void) {
// 240 %INTEGER I,J,K
int I;
int J;
int K;
// 241 I = 11; K = 2048
I = 11;
K = 2048;
// 242 I=I-1 %AND K=K>>1 %WHILE K&TYPE1 = 0 %AND I # 0
L_002E:;
if (K & TYPE1 != 0) goto L_002F;
if (I == 0) goto L_002F;
I = I - 1;
K = (unsigned int)K >> 1;
goto L_002E;
L_002F:;
// 243 J = K
J = K;
// 244 I =I-1 %AND J=J>>1 %WHILE J&VAL1 = 0 %AND I # 0
L_0030:;
if (J & VAL1 != 0) goto L_0031;
if (I == 0) goto L_0031;
I = I - 1;
J = (unsigned int)J >> 1;
goto L_0030;
L_0031:;
// 245 VAL = VAL<<I & (K<<1-1)
VAL = VAL << I & (K << 1) - 1;
// 246 TYPE = TYPE1-K
TYPE = TYPE1 - K;
// 247 VAL = VAL1-J+VAL
VAL = VAL1 - J + VAL;
// 248 %END
return;
} /* end of COMBINE */
// 249
// 250 %ROUTINE PLANT JUMP
void PLANTJUMP(void) {
// 251 %INTEGER I,V
int I;
int V;
// 252 I = VAL-LOC
I = VAL - LOC;
// 253 %IF COND&6 = 0 %START
if (COND & 6 != 0) goto L_0032;
// 254 %IF COND = 8 %START
if (COND != 8) goto L_0033;
// 255 %RETURN %IF I=1
if (I != 1) goto L_0034;
return;
L_0034:;
// 256 PLANT(SKIP)
PLANT(SKIP);
// 257 %FINISH
L_0033:;
// 258 %finish %ELSE %START
goto L_0035;
L_0032:;
// 259 FAULT('J') %AND I=0 %IF FLAG # 0 %AND |I| > 127
if (FLAG == 0) goto L_0036;
if (_imp_IMOD(I) <= 127) goto L_0036;
FAULT(74);
I = 0;
L_0036:;
// 260 %IF |I| <= 127 %START
if (_imp_IMOD(I) > 127) goto L_0037;
// 261 %IF TYPE&UMASK = 0 %OR FLAG # 0 %START
if (TYPE & UMASK == 0) goto L_0038;
if (FLAG == 0) goto L_0039;
L_0038:;
// 262 PLANT(BOC+(COND!!1)<<8+I&255)
PLANT(BOC + ((COND ^ 1) << 8) + (I & 255));
// 263 %RETURN
return;
// 264 %FINISH
L_0039:;
// 265 FAULT('S') %IF LIST >= 0 %AND LIST&8 # 0
if (LIST < 0) goto L_003A;
if (LIST & 8 == 0) goto L_003A;
FAULT(83);
L_003A:;
// 266 %FINISH
L_0037:;
// 267 PLANT(BOC+COND<<8+2)
PLANT(BOC + (COND << 8) + 2);
// 268 %FINISH
L_0035:;
// 269 PLANT(JUM+(VAL-LOC)&4095)
PLANT(JUM + (VAL - LOC & 4095));
// 270 %END
return;
} /* end of PLANTJUMP */
// ?V unused
// 271
// 272 %ROUTINE SET JUMP(%INTEGER CASE)
void SETJUMP(int CASE) {
// 273 %INTEGER THOLD,VHOLD,FHOLD
int THOLD;
int VHOLD;
int FHOLD;
// 274 CASE = CASE+16_0800 %IF COND&6 = 0
if (COND & 6 != 0) goto L_003B;
CASE = CASE + 2048;
L_003B:;
// 275 CASE = CASE+16_0400 %IF COND&1 # 0
if (COND & 1 == 0) goto L_003C;
CASE = CASE + 1024;
L_003C:;
// 276 ALMAX = ALMAX+1; !!%MONITOR 22 %IF ALMAX = LABMIN
ALMAX = ALMAX + 1;
// 277 NEST(LOC); NEST(ALMAX-DEFLIM+CASE)
NEST(LOC);
NEST(ALMAX - DEFLIM + CASE);
// 278 THOLD = TYPE; VHOLD = VAL; FHOLD = FLAG
THOLD = TYPE;
VHOLD = VAL;
FHOLD = FLAG;
// 279 TYPE = LOCTYPE; VAL = INTEGER(ALMAX); FLAG = 0
TYPE = LOCTYPE;
VAL = *_imp_INTEGER(ALMAX);
FLAG = 0;
// 280 TYPE = TYPE+UMASK %IF PASS = 0
if (PASS != 0) goto L_003D;
TYPE = TYPE + UMASK;
L_003D:;
// 281 COND = COND!!1
COND = COND ^ 1;
// 282 PLANT JUMP; COND = 0
PLANTJUMP();
COND = 0;
// 283 TYPE = THOLD; VAL = VHOLD; FLAG = FHOLD
TYPE = THOLD;
VAL = VHOLD;
FLAG = FHOLD;
// 284 %END
return;
} /* end of SETJUMP */
// 285
// 286 %ROUTINE PLANT INST(%INTEGER CODE)
void PLANTINST(int CODE) {
// 287 SET JUMP(16_1000) %IF COND # 0
if (COND == 0) goto L_003E;
SETJUMP(4096);
L_003E:;
// 288 PLANT(CODE)
PLANT(CODE);
// 289 %END
return;
} /* end of PLANTINST */
// 290
// 291 %ROUTINE RELEASE
void RELEASE(void) {
// 292 %INTEGER I
int I;
// 293 %RETURN %IF TYPE®XMASK = 0
if (TYPE & REGXMASK != 0) goto L_003F;
return;
L_003F:;
// 294 I = TYPE&15; I = VAL %IF TYPE = REG
I = TYPE & 15;
if (TYPE != REG) goto L_0040;
I = VAL;
L_0040:;
// 295 %IF I = DREG %START
if (I != DREG) goto L_0041;
// 296 DUSE = DUSE-1
DUSE = DUSE - 1;
// 297 %finish %ELSE %START
goto L_0042;
L_0041:;
// 298 I = 1<<I
I = 1 << I;
// 299 FREE = FREE!I %IF TEMPS&I # 0
if (TEMPS & I == 0) goto L_0043;
FREE = FREE | I;
L_0043:;
// 300 %FINISH
L_0042:;
// 301 %END
return;
} /* end of RELEASE */
// 302
// 303 %INTEGERFN TREG
int TREG(void) {
// 304 %INTEGER I,J
int I;
int J;
// 305 %IF DREG >= 0 %AND DUSE = 0 %START
if (DREG < 0) goto L_0044;
if (DUSE != 0) goto L_0044;
// 306 DUSE = 1
DUSE = 1;
// 307 %RESULT = DREG
return DREG;
// 308 %FINISH
L_0044:;
// 309 J = 1
J = 1;
// 310 %CYCLE I = 0,1,15
// %for I = 0, 1, 15 %cycle
{
I = -1;
L_0045:
if (I == 15) goto L_0046;
I += 1;
// 311 ->OK %IF FREE&J # 0 %AND I # DREG
if (FREE & J == 0) goto L_0048;
if (I == DREG) goto L_0048;
goto U_1000;
L_0048:;
// 312 J = J<<1
J = J << 1;
// 313 %REPEAT
goto L_0045;
}
L_0046:;
// 314 FAULT('R')
FAULT(82);
// 315 OK: FREE = FREE-J
U_1000:;
FREE = FREE - J;
// 316 %RESULT = I
return I;
// 317 %END
} /* end of TREG */
// 318
// 319 %ROUTINE LOAD CONST(%INTEGER R)
void LOADCONST(int R) {
// 320 %INTEGER I,J
int I;
int J;
// 321 I = LOADI+R<<8
I = LOADI + (R << 8);
// 322 %IF VAL&(\255) = 0 %AND TYPE&UMASK = 0 %START
if (VAL & (~255) != 0) goto L_0049;
if (TYPE & UMASK != 0) goto L_0049;
// 323 PLANT INST(I+VAL)
PLANTINST(I + VAL);
// 324 %finish %ELSE %IF \VAL&(\255) = 0 %AND TYPE&UMASK = 0 %START
goto L_004A;
L_0049:;
if ((~VAL) & (~255) != 0) goto L_004B;
if (TYPE & UMASK != 0) goto L_004B;
// 325 PLANT INST(I+(\VAL))
PLANTINST(I + (~VAL));
// 326 PLANT INST(COMP+R<<4+R)
PLANTINST(COMP + (R << 4) + R);
// 327 CREG = R
CREG = R;
// 328 %finish %ELSE %START
goto L_004A;
L_004B:;
// 329 ! PLANT INST(LOADC+R<<8)
// 330 ! PLANT INST(SKIP)
// 331 ! PLANT VAL
// 332 J = VAL>>8&255
J = (unsigned int)VAL >> 8 & 255;
// 333 J = J+1 %IF VAL&128 # 0
if (VAL & 128 == 0) goto L_004C;
J = J + 1;
L_004C:;
// 334 PLANT INST(I+J)
PLANTINST(I + J);
// 335 PLANT INST(ROT+R<<8+7<<4+R)
PLANTINST(ROT + (R << 8) + (7 << 4) + R);
// 336 PLANT INST(ADDI+R<<8+VAL&255) %IF VAL&255 # 0
if (VAL & 255 == 0) goto L_004D;
PLANTINST(ADDI + (R << 8) + (VAL & 255));
L_004D:;
// 337 %FINISH
L_004A:;
// 338 %END
return;
} /* end of LOADCONST */
// 339
// 340 %ROUTINE LOAD REG(%INTEGER R)
void LOADREG(int R) {
// 341 %INTEGER OP
int OP;
// 342 %IF ATYPE = TYPE %AND AVAL = VAL %START
if (ATYPE != TYPE) goto L_004E;
if (AVAL != VAL) goto L_004E;
// 343 TYPE = REG; VAL = ACC
TYPE = REG;
VAL = ACC;
// 344 %RETURN %IF R = ACC
if (R != ACC) goto L_004F;
return;
L_004F:;
// 345 %FINISH
L_004E:;
// 346 ATYPE = TYPE %AND AVAL = VAL %IF R = ACC
if (R != ACC) goto L_0050;
ATYPE = TYPE;
AVAL = VAL;
L_0050:;
// 347 ATYPE = -1 %IF (ATYPE=REG %AND AVAL=R)
if (ATYPE != REG) goto L_0051;
if (AVAL != R) goto L_0051;
ATYPE = -1;
L_0051:;
// 348 ATYPE = -1 %IF ATYPE&XMASK # 0 %AND ATYPE&15 = R
if (ATYPE & XMASK == 0) goto L_0052;
if (ATYPE & 15 != R) goto L_0052;
ATYPE = -1;
L_0052:;
// 349 %IF TYPE = REG %START
if (TYPE != REG) goto L_0053;
// 350 PLANT INST(COPY+R<<4+VAL)
PLANTINST(COPY + (R << 4) + VAL);
// 351 CREG = R
CREG = R;
// 352 %finish %ELSE %IF TYPE&XMASK = 0 %START
goto L_0054;
L_0053:;
if (TYPE & XMASK != 0) goto L_0055;
// 353 LOAD CONST(R)
LOADCONST(R);
// 354 PLANT INST(LOAD+R<<8+R<<4) %IF TYPE&MEMMASK # 0
if (TYPE & MEMMASK == 0) goto L_0056;
PLANTINST(LOAD + (R << 8) + (R << 4));
L_0056:;
// 355 %finish %ELSE %START
goto L_0054;
L_0055:;
// 356 %IF VAL&(\3) # 0 %OR TYPE&MEMMASK = 0 %START
if (VAL & (~3) != 0) goto L_0057;
if (TYPE & MEMMASK != 0) goto L_0058;
L_0057:;
// 357 %IF TYPE&15 # R %START
if (TYPE & 15 == R) goto L_0059;
// 358 %IF |VAL| <= 127 %START
if (_imp_IMOD(VAL) > 127) goto L_005A;
// 359 PLANT INST(COPY+R<<4+TYPE&15)
PLANTINST(COPY + (R << 4) + (TYPE & 15));
// 360 PLANT INST(ADDI+R<<8+VAL&255) %IF VAL # 0
if (VAL == 0) goto L_005B;
PLANTINST(ADDI + (R << 8) + (VAL & 255));
L_005B:;
// 361 %finish %ELSE %START
goto L_005C;
L_005A:;
// 362 LOAD CONST(R)
LOADCONST(R);
// 363 PLANT INST(ADD+R<<4+TYPE&15)
PLANTINST(ADD + (R << 4) + (TYPE & 15));
// 364 %FINISH
L_005C:;
// 365 CREG = R
CREG = R;
// 366 %finish %ELSE %START
goto L_005D;
L_0059:;
// 367 %IF |VAL| <= 127 %START
if (_imp_IMOD(VAL) > 127) goto L_005E;
// 368 %IF VAL # 0 %START
if (VAL == 0) goto L_005F;
// 369 PLANT INST(ADDI+R<<8+VAL&255)
PLANTINST(ADDI + (R << 8) + (VAL & 255));
// 370 CREG = R
CREG = R;
// 371 %FINISH
L_005F:;
// 372 %finish %ELSE %START
goto L_0060;
L_005E:;
// 373 OP = TREG
OP = TREG();
// 374 LOAD CONST(OP)
LOADCONST(OP);
// 375 TYPE = REG; VAL = OP
TYPE = REG;
VAL = OP;
// 376 RELEASE
RELEASE();
// 377 PLANT INST(ADD+R<<4+OP)
PLANTINST(ADD + (R << 4) + OP);
// 378 CREG = R
CREG = R;
// 379 %FINISH
L_0060:;
// 380 %FINISH
L_005D:;
// 381 TYPE = TYPE&MEMMASK+XMASK+R; VAL = 0
TYPE = (TYPE & MEMMASK) + XMASK + R;
VAL = 0;
// 382 %FINISH
L_0058:;
// 383 %IF TYPE&MEMMASK # 0 %START
if (TYPE & MEMMASK == 0) goto L_0061;
// 384 PLANT INST(LOAD+R<<8+(TYPE&15)<<4+VAL)
PLANTINST(LOAD + (R << 8) + ((TYPE & 15) << 4) + VAL);
// 385 CREG = -1
CREG = -1;
// 386 ! %FINISH -- commenting out this line allows the program to compile
// 387 %finish %ELSE %START
goto L_0062;
L_0061:;
// 388 LOAD CONST(R)
LOADCONST(R);
// 389 PLANT INST(LOAD+R<<8+R<<4)
PLANTINST(LOAD + (R << 8) + (R << 4));
// 390 %FINISH
L_0062:;
// 391 %FINISH
L_0054:;
// 392 TYPE = REG; VAL = R
TYPE = REG;
VAL = R;
// 393 %END
return;
} /* end of LOADREG */
// 394
// 395 %ROUTINE LOAD TEMP
void LOADTEMP(void) {
// 396 RELEASE
RELEASE();
// 397 LOAD REG(TREG)
LOADREG(TREG());
// 398 %END
return;
} /* end of LOADTEMP */
// 399
// 400 %ROUTINE SWOP
void SWOP(void) {
// 401 %INTEGER K
int K;
// 402 K = TYPE1; TYPE1 = TYPE; TYPE = K
K = TYPE1;
TYPE1 = TYPE;
TYPE = K;
// 403 K = VAL1; VAL1 = VAL; VAL = K
K = VAL1;
VAL1 = VAL;
VAL = K;
// 404 %END
return;
} /* end of SWOP */
// 405
// 406 Q = QSTART
Q = QSTART;
// 407 NEW:NQ = QSTART; FREE = TEMPS
U_1001:;
NQ = QSTART;
FREE = TEMPS;
// 408 TYPE = INTEGER(Q); Q = Q+1
TYPE = *_imp_INTEGER(Q);
Q = Q + 1;
// 409 VAL = INTEGER(Q); Q = Q+1
VAL = *_imp_INTEGER(Q);
Q = Q + 1;
// 410
// 411 GET:%CYCLE
U_1002:;
L_0063:;
// 412 %RETURN %IF Q = QLIM
if (Q != QLIM) goto L_0064;
return;
L_0064:;
// 413 K = INTEGER(Q); Q = Q+1
K = *_imp_INTEGER(Q);
Q = Q + 1;
// 414 ->ASS(K) %IF K < 0
if (K >= 0) goto L_0065;
ASS_line = __LINE__;
ASS_file = __FILE__;
ASS_index = K;
goto case_ASS_dispatch;
L_0065:;
// 415 INTEGER(NQ) = TYPE1; INTEGER(NQ+1) = VAL1
*_imp_INTEGER(NQ) = TYPE1;
*_imp_INTEGER(NQ + 1) = VAL1;
// 416 NQ = NQ+2
NQ = NQ + 2;
// 417 TYPE1 = TYPE; VAL1 = VAL
TYPE1 = TYPE;
VAL1 = VAL;
// 418 TYPE = K; VAL = INTEGER(Q); Q = Q+1
TYPE = K;
VAL = *_imp_INTEGER(Q);
Q = Q + 1;
// 419 %REPEAT
goto L_0063;
// 420
// 421 %PREDICATE TEMP
int TEMP(void) {
// 422 %FALSE %IF TYPE1 # REG
if (TYPE1 == REG) goto L_0067;
return 0 /*FALSE*/;
L_0067:;
// 423 %IF VAL1 = DREG %START
if (VAL1 != DREG) goto L_0068;
// 424 %FALSE %IF DUSE # 1
if (DUSE == 1) goto L_0069;
return 0 /*FALSE*/;
L_0069:;
// 425 %finish %ELSE %START
goto L_006A;
L_0068:;
// 426 %FALSE %IF 1<<VAL1&TEMPS = 0
if (1 << VAL1 & TEMPS != 0) goto L_006B;
return 0 /*FALSE*/;
L_006B:;
// 427 %FINISH
L_006A:;
// 428 %TRUE
return 1 /*TRUE*/;
// 429 %END
} /* end of TEMP */
// 430
// 431 NOP: K = 0; !NOT SYMMETRIC
U_1003:;
K = 0;
// 432 BOP:%IF MODE <= 0 %OR (TYPE = 0 %AND TYPE1 = 0) %START
U_1004:;
if (MODE <= 0) goto L_0047;
if (TYPE != 0) goto L_006C;
if (TYPE1 != 0) goto L_006C;
L_0047:;
// 433 FAULT('A') %IF TYPE # 0
if (TYPE == 0) goto L_006D;
FAULT(65);
L_006D:;
// 434 TYPE = TYPE1; VAL = LITVAL
TYPE = TYPE1;
VAL = LITVAL;
// 435 %finish %ELSE %START
goto L_006E;
L_006C:;
// 436 %IF %NOT TEMP %OR (TYPE=REG %AND VAL=DREG %AND DUSE=1 %AND K#0) %START
if (!(TEMP())) goto L_006F;
if (TYPE != REG) goto L_0070;
if (VAL != DREG) goto L_0070;
if (DUSE != 1) goto L_0070;
if (K == 0) goto L_0070;
L_006F:;
// 437 SWOP
SWOP();
// 438 %IF K = 0 %OR %NOT TEMP %START
if (K == 0) goto L_0071;
if (TEMP()) goto L_0072;
L_0071:;
// 439 LOAD TEMP; SWOP
LOADTEMP();
SWOP();
// 440 %FINISH
L_0072:;
// 441 %FINISH
L_0070:;
// 442 %IF OP = AND %AND TYPE = 0 %AND VAL&(\255) = 0 %START
if (OP != AND) goto L_0073;
if (TYPE != 0) goto L_0073;
if (VAL & (~255) != 0) goto L_0073;
// 443 PLANT INST(ANDI+VAL1<<8+VAL)
PLANTINST(ANDI + (VAL1 << 8) + VAL);
// 444 %finish %ELSE %START
goto L_0074;
L_0073:;
// 445 LOAD TEMP %IF TYPE # REG
if (TYPE == REG) goto L_0075;
LOADTEMP();
L_0075:;
// 446 RELEASE
RELEASE();
// 447 PLANT INST(OP+VAL1<<4+VAL)
PLANTINST(OP + (VAL1 << 4) + VAL);
// 448 %FINISH
L_0074:;
// 449 TYPE = REG; VAL = VAL1
TYPE = REG;
VAL = VAL1;
// 450 CREG = VAL
CREG = VAL;
// 451 ATYPE = -1 %IF ACC = VAL
if (ACC != VAL) goto L_0076;
ATYPE = -1;
L_0076:;
// 452 ATYPE = -1 %IF ATYPE&XMASK # 0 %AND ATYPE&15 = VAL
if (ATYPE & XMASK == 0) goto L_0077;
if (ATYPE & 15 != VAL) goto L_0077;
ATYPE = -1;
L_0077:;
// 453 ATYPE = -1 %IF ATYPE = REG %AND AVAL = VAL
if (ATYPE != REG) goto L_0078;
if (AVAL != VAL) goto L_0078;
ATYPE = -1;
L_0078:;
// 454 %FINISH
L_006E:;
// 455
// 456 POP:NQ = NQ-2
U_1005:;
NQ = NQ - 2;
// 457 TYPE1 = INTEGER(NQ); VAL1 = INTEGER(NQ+1)
TYPE1 = *_imp_INTEGER(NQ);
VAL1 = *_imp_INTEGER(NQ + 1);
// 458 ->GET
goto U_1002;
// 459
// 460 ASS(-2):
case_ASS_M2:;
// 461 OP = SUB
OP = SUB;
// 462 ->NOP %IF MODE > 0 %AND TYPE # 0
if (MODE <= 0) goto L_0079;
if (TYPE == 0) goto L_0079;
goto U_1003;
L_0079:;
// 463 TYPE1 = 0 %AND TYPE = 0 %IF MODE <= 0 %AND TYPE1 = TYPE
if (MODE > 0) goto L_007A;
if (TYPE1 != TYPE) goto L_007A;
TYPE1 = 0;
TYPE = 0;
L_007A:;
// 464 VAL = -VAL
VAL = -VAL;
// 465 ASS(-1):
case_ASS_M1:;
// 466 OP = ADD; LITVAL = VAL1+VAL
OP = ADD;
LITVAL = VAL1 + VAL;
// 467 ->BOP %UNLESS TYPE = 0
if (TYPE == 0) goto L_007B;
goto U_1004;
L_007B:;
// 468 %IF TYPE1&MEMMASK # 0 %AND MODE > 0 %START
if (TYPE1 & MEMMASK == 0) goto L_007C;
if (MODE <= 0) goto L_007C;
// 469 SWOP; LOAD TEMP; SWOP
SWOP();
LOADTEMP();
SWOP();
// 470 %FINISH
L_007C:;
// 471 %IF TYPE1 = REG %AND %NOT TYPE=VAL=0 %START
if (TYPE1 != REG) goto L_007D;
{
// Double-sided test on VAL (Part I)
int tmp;
if (TYPE != (tmp = VAL)) goto L_007E;
// Double-sided test on VAL (Part II)
if (tmp == 0) goto L_007D;
}
L_007E:;
// 472 TYPE1 = XMASK+VAL1; LITVAL = VAL
TYPE1 = XMASK + VAL1;
LITVAL = VAL;
// 473 %FINISH
L_007D:;
// 474 TYPE = TYPE1; VAL = LITVAL
TYPE = TYPE1;
VAL = LITVAL;
// 475 ->POP
goto U_1005;
// 476 ASS(-6):
case_ASS_M6:;
// 477 LITVAL = VAL1<<VAL; K = (-1)<<VAL
LITVAL = VAL1 << VAL;
K = (-1) << VAL;
// 478 VAL = 16-VAL
VAL = 16 - VAL;
// 479 ->AS7
goto U_1006;
// 480 ASS(-7):
case_ASS_M7:;
// 481 LITVAL = VAL1>>VAL; K = (16_FFFF)>>VAL
LITVAL = (unsigned int)VAL1 >> VAL;
K = (unsigned int)65535 >> VAL;
// 482 AS7:K=0 %AND ->BOP %IF MODE <= 0
U_1006:;
if (MODE > 0) goto L_007F;
K = 0;
goto U_1004;
L_007F:;
// 483 FAULT('I') %IF TYPE # 0 %OR VAL&(\15) # 0
if (TYPE != 0) goto L_0080;
if (VAL & (~15) == 0) goto L_0081;
L_0080:;
FAULT(73);
L_0081:;
// 484 %IF %NOT TEMP %START
if (TEMP()) goto L_0082;
// 485 SWOP; LOAD TEMP; SWOP
SWOP();
LOADTEMP();
SWOP();
// 486 %FINISH
L_0082:;
// 487 OP = ROT+VAL1<<8+VAL1
OP = ROT + (VAL1 << 8) + VAL1;
// 488 PLANT INST(OP+16_0070) %IF VAL > 8
if (VAL <= 8) goto L_0083;
PLANTINST(OP + 112);
L_0083:;
// 489 PLANT INST(OP+(VAL-1)<<4) %IF VAL # 0
if (VAL == 0) goto L_0084;
PLANTINST(OP + (VAL - 1 << 4));
L_0084:;
// 490 TYPE = 0; VAL = K; K = -3
TYPE = 0;
VAL = K;
K = -3;
// 491 ASS(-3):
case_ASS_M3:;
// 492 OP = AND; LITVAL = VAL1&VAL
OP = AND;
LITVAL = VAL1 & VAL;
// 493 ->BOP
goto U_1004;
// 494 ASS(-4):
case_ASS_M4:;
// 495 OP = OR; LITVAL = VAL1!VAL
OP = OR;
LITVAL = VAL1 | VAL;
// 496 ->BOP
goto U_1004;
// 497 ASS(-5):
case_ASS_M5:;
// 498 OP = XOR; LITVAL = VAL1!!VAL
OP = XOR;
LITVAL = VAL1 ^ VAL;
// 499 ->BOP
goto U_1004;
// 500
// 501 ASS(-8): !TYPE_VAL
case_ASS_M8:;
// 502 TYPE = VAL1
TYPE = VAL1;
// 503 TYPE = 0 %IF TYPE&OPMASK = MACRO; !SAFETY
if (TYPE & OPMASK != MACRO) goto L_0085;
TYPE = 0;
L_0085:;
// 504 TYPE = 0 %IF TYPE&(OPMASK+FMASK) = FMASK
if (TYPE & OPMASK + FMASK != FMASK) goto L_0086;
TYPE = 0;
L_0086:;
// 505 ->POP
goto U_1005;
// 506
// 507 ASS(-11): !COMPARE
case_ASS_M11:;
// 508 K = INTEGER(Q); Q = Q+1
K = *_imp_INTEGER(Q);
Q = Q + 1;
// 509 %IF MODE <= 0 %START
if (MODE > 0) goto L_0087;
// 510 LITVAL = 2_01011000
LITVAL = 88;
// 511 LITVAL = 2_01100100 %IF VAL < 0
if (VAL >= 0) goto L_0088;
LITVAL = 100;
L_0088:;
// 512 LITVAL = 2_10101000 %IF VAL1 > VAL
if (VAL1 <= VAL) goto L_0089;
LITVAL = 168;
L_0089:;
// 513 K = LITVAL>>K&1;
K = (unsigned int)LITVAL >> K & 1;
// 514 %finish %ELSE %START
goto L_008A;
L_0087:;
// 515 %UNLESS K&6=4 %AND -256<VAL<0 %AND TYPE&XMASK#0 %START
if (K & 6 != 4) goto L_008B;
{
// Double-sided test on VAL (Part I)
int tmp;
if (-256 >= (tmp = VAL)) goto L_008B;
// Double-sided test on VAL (Part II)
if (tmp >= 0) goto L_008B;
}
if (TYPE & XMASK != 0) goto L_008C;
L_008B:;
// 516 LOAD TEMP %IF TYPE # REG
if (TYPE == REG) goto L_008D;
LOADTEMP();
L_008D:;
// 517 PLANT INST(COPY+VAL<<4+VAL) %IF CREG # VAL
if (CREG == VAL) goto L_008E;
PLANTINST(COPY + (VAL << 4) + VAL);
L_008E:;
// 518 CREG = VAL
CREG = VAL;
// 519 %finish %ELSE %START
goto L_008F;
L_008C:;
// 520 PLANT INST(SKIDI+(TYPE&15)<<8-VAL)
PLANTINST(SKIDI + ((TYPE & 15) << 8) - VAL);
// 521 K = K+4; !8,9
K = K + 4;
// 522 %FINISH
L_008F:;
// 523 %FINISH
L_008A:;
// 524 COND = K
COND = K;
// 525 ->GET
goto U_1002;
// 526
// 527 ASS(-12): !TEST CC
case_ASS_M12:;
// 528 COND = VAL!!1
COND = VAL ^ 1;
// 529 ->GET
goto U_1002;
// 530
// 531 ASS(-13): !AND
case_ASS_M13:;
// 532 %IF MODE > 0 %START
if (MODE <= 0) goto L_0090;
// 533 SET JUMP(16_1000)
SETJUMP(4096);
// 534 %finish %ELSE %START
goto L_0091;
L_0090:;
// 535 %RETURN %IF COND = 0
if (COND != 0) goto L_0092;
return;
L_0092:;
// 536 %FINISH
L_0091:;
// 537 %RETURN %IF Q = QLIM
if (Q != QLIM) goto L_0093;
return;
L_0093:;
// 538 ->NEW
goto U_1001;
// 539
// 540 ASS(-14): !OR
case_ASS_M14:;
// 541 %IF MODE > 0 %START
if (MODE <= 0) goto L_0094;
// 542 COND = COND!!1
COND = COND ^ 1;
// 543 SET JUMP(16_3000)
SETJUMP(12288);
// 544 %finish %ELSE %START
goto L_0095;
L_0094:;
// 545 %RETURN %IF COND # 0
if (COND == 0) goto L_0096;
return;
L_0096:;
// 546 %FINISH
L_0095:;
// 547 ->NEW
goto U_1001;
// 548
// 549 ASS(-15): !IF
case_ASS_M15:;
// 550 SET JUMP(16_2000)
SETJUMP(8192);
// 551 %RETURN
return;
// 552
// 553 ASS(-16): !ELSE
case_ASS_M16:;
// 554 COND = 1
COND = 1;
// 555 SET JUMP(16_4000)
SETJUMP(16384);
// 556 %RETURN
return;
// 557
// 558 ASS(-17): !IF AFTER ELSE
case_ASS_M17:;
// 559 SET JUMP(16_6000)
SETJUMP(24576);
// 560 %RETURN
return;
// 561
// 562 ASS(-18): !MACCALL IF
case_ASS_M18:;
// 563 SET JUMP(16_8000)
SETJUMP(32768);
// 564 %RETURN
return;
// 565
// 566 ASS(-20): !HASH
case_ASS_M20:;
// 567 TYPE = TYPE&(UMASK+63)
TYPE = TYPE & UMASK + 63;
// 568 ->GET
goto U_1002;
// 569
// 570 ASS(-21): !INDEX
case_ASS_M21:;
// 571 FAULT('I') %IF TYPE1®XMASK # 0
if (TYPE1 & REGXMASK == 0) goto L_0097;
FAULT(73);
L_0097:;
// 572 %IF TYPE&MEMMASK # 0 %START
if (TYPE & MEMMASK == 0) goto L_0098;
// 573 %IF MODE > 0 %THEN LOAD TEMP %ELSE FAULT('A')
if (MODE <= 0) goto L_0099;
LOADTEMP();
goto L_009A;
L_0099:;
FAULT(65);
L_009A:;
// 574 %FINISH
L_0098:;
// 575 %IF TYPE = REG %START
if (TYPE != REG) goto L_009B;
// 576 TYPE = XMASK+VAL; VAL = 0
TYPE = XMASK + VAL;
VAL = 0;
// 577 %FINISH
L_009B:;
// 578 FAULT('I') %IF TYPE1&TYPE&RELMASK # 0
if (TYPE1 & TYPE & RELMASK == 0) goto L_009C;
FAULT(73);
L_009C:;
// 579 TYPE = TYPE1!TYPE!MEMMASK; VAL = VAL1+VAL
TYPE = TYPE1 | TYPE | MEMMASK;
VAL = VAL1 + VAL;
// 580 ->POP
goto U_1005;
// 581
// 582 ASS(-22): !MINST SEPARATOR
case_ASS_M22:;
// 583 COMBINE
COMBINE();
// 584 ->POP
goto U_1005;
// 585
// 586 ASS(-23): !PLANT INST
case_ASS_M23:;
// 587 MODE = 1
MODE = 1;
// 588 PLANT INST(VAL)
PLANTINST(VAL);
// 589 CREG = -1; ATYPE = -1
CREG = -1;
ATYPE = -1;
// 590 %RETURN
return;
// 591
// 592 ASS(-24): !LOAD
case_ASS_M24:;
// 593 LOAD TEMP %IF TYPE # REG
if (TYPE == REG) goto L_009D;
LOADTEMP();
L_009D:;
// 594 Q = QBASE
Q = QBASE;
// 595 ->GET
goto U_1002;
// 596
// 597 ASS(-25): !STORE (TYPE1,VAL1 -> TYPE,VAL)
case_ASS_M25:;
// 598 %IF TYPE = REG %START
if (TYPE != REG) goto L_009E;
// 599 SWOP %AND LOAD REG(VAL1) %IF VAL1 # VAL
if (VAL1 == VAL) goto L_009F;
SWOP();
LOADREG(VAL1);
L_009F:;
// 600 %finish %ELSE %START
goto L_00A0;
L_009E:;
// 601 ATYPE = -1 %IF ATYPE&MEMMASK # 0
if (ATYPE & MEMMASK == 0) goto L_00A1;
ATYPE = -1;
L_00A1:;
// 602 %IF VAL1 = ACC %AND ATYPE < 0 %START
if (VAL1 != ACC) goto L_00A2;
if (ATYPE >= 0) goto L_00A2;
// 603 K = TYPE&15
K = TYPE & 15;
// 604 ATYPE = TYPE %AND AVAL = VAL %IF TYPE&XMASK = 0 %OR 1<<K&TEMPS = 0
if (TYPE & XMASK == 0) goto L_00A3;
if (1 << K & TEMPS != 0) goto L_00A4;
L_00A3:;
ATYPE = TYPE;
AVAL = VAL;
L_00A4:;
// 605 %FINISH
L_00A2:;
// 606 %IF TYPE&XMASK = 0 %OR VAL&(\3) # 0 %START
if (TYPE & XMASK == 0) goto L_00A5;
if (VAL & (~3) == 0) goto L_00A6;
L_00A5:;
// 607 TYPE = TYPE&(\MEMMASK)
TYPE = TYPE & (~MEMMASK);
// 608 LOAD TEMP
LOADTEMP();
// 609 TYPE = MEMMASK+XMASK+VAL; VAL = 0
TYPE = MEMMASK + XMASK + VAL;
VAL = 0;
// 610 %FINISH
L_00A6:;
// 611 PLANT INST(STORE+VAL1<<8+(TYPE&15)<<4+VAL)
PLANTINST(STORE + (VAL1 << 8) + ((TYPE & 15) << 4) + VAL);
// 612 %FINISH
L_00A0:;
// 613 %RETURN
return;
// 614
// 615 ASS(-26): !JUMP
case_ASS_M26:;
// 616 SET JUMP(16_1000) %IF INTEGER(NP)&16_F000 = 16_3000; !OR
if (*_imp_INTEGER(NP) & 61440 != 12288) goto L_00A7;
SETJUMP(4096);
L_00A7:;
// 617 TYPE = TYPE!MEMMASK %IF TYPE # REG
if (TYPE == REG) goto L_00A8;
TYPE = TYPE | MEMMASK;
L_00A8:;
// 618 %IF TYPE&(\UMASK) = LOCTYPE %START
if (TYPE & (~UMASK) != LOCTYPE) goto L_00A9;
// 619 PLANT JUMP
PLANTJUMP();
// 620 %finish %ELSE %START
goto L_00AA;
L_00A9:;
// 621 TYPE = XMASK+VAL %AND VAL=0 %IF TYPE = REG
if (TYPE != REG) goto L_00AB;
TYPE = XMASK + VAL;
VAL = 0;
L_00AB:;
// 622 FAULT('I') %IF TYPE&XMASK = 0 %OR VAL&(\15) # 0
if (TYPE & XMASK == 0) goto L_00AC;
if (VAL & (~15) == 0) goto L_00AD;
L_00AC:;
FAULT(73);
L_00AD:;
// 623 %IF COND&8 # 0 %START
if (COND & 8 == 0) goto L_00AE;
// 624 PLANT(SKIP) %IF COND = 8
if (COND != 8) goto L_00AF;
PLANT(SKIP);
L_00AF:;
// 625 COND = 1
COND = 1;
// 626 %FINISH
L_00AE:;
// 627 PLANT(BOCR+COND<<8+(TYPE&15)<<4+VAL)
PLANT(BOCR + (COND << 8) + ((TYPE & 15) << 4) + VAL);
// 628 %FINISH
L_00AA:;
// 629 COND = 0
COND = 0;
// 630 %RETURN
return;
// 631 %END
case_ASS_dispatch:
if (ASS_index < -30 || ASS_index > -1)
_imp_signalf(6, 3, ASS_index, "->ASS(%d) out of bounds at %s line %d", ASS_index, ASS_file, ASS_line);
goto *ASS[ASS_index - -30];
case_ASS_missing:
_imp_signalf(8, 2, ASS_index, "switch jump to undefined label ASS(%d): at %s line %d", ASS_index, ASS_file,
ASS_line);
} /* end of ASSEMBLE */
// ?LOADC unused
// 632
// 633 %ROUTINE GET SYM
void GETSYM(void) {
// 634 %CYCLE
L_00B0:;
// 635 SYM = CHAR(GETPOS); GETPOS = GETPOS+1
SYM = CHAR(GETPOS);
GETPOS = GETPOS + 1;
// 636 %RETURN %IF SYM # ' '
if (SYM == 32) goto L_00B1;
return;
L_00B1:;
// 637 %REPEAT
goto L_00B0;
// 638 %END
} /* end of GETSYM */
// 639
// 640 %PREDICATE S(%INTEGER K)
int S(int K) {
// 641 %FALSE %UNLESS K = SYM
if (K == SYM) goto L_00B2;
return 0 /*FALSE*/;
L_00B2:;
// 642 GET SYM
GETSYM();
// 643 %TRUE
return 1 /*TRUE*/;
// 644 %END
} /* end of S */
// 645
// 646 %PREDICATE SS(%INTEGER K)
int SS(int K) {
// 647 %FALSE %UNLESS K = SYM = CHAR(GETPOS)
{
// Double-sided test on SYM (Part I)
int tmp;
if (K != (tmp = SYM)) goto L_00B3;
// Double-sided test on SYM (Part II)
if (tmp == CHAR(GETPOS)) goto L_00B4;
}
L_00B3:;
return 0 /*FALSE*/;
L_00B4:;
// 648 GETPOS = GETPOS+1
GETPOS = GETPOS + 1;
// 649 GET SYM
GETSYM();
// 650 %TRUE
return 1 /*TRUE*/;
// 651 %END
} /* end of SS */
// 652
// 653 %PREDICATE TAG
int TAG(void) {
// 654 %INTEGER J,K
int J;
int K;
// 655 %ROUTINE CODE SYM
void CODESYM(void) {
// 656 SYM = CHAR(GETPOS); GETPOS = GETPOS+1
SYM = CHAR(GETPOS);
GETPOS = GETPOS + 1;
// 657 K = SYM-'0'
K = SYM - 48;
// 658 %IF K >= 0 %START
if (K < 0) goto L_00B5;
// 659 TERM = -1 %AND %RETURN %IF K < 10
if (K >= 10) goto L_00B6;
TERM = -1;
return;
L_00B6:;
// 660 K = SYM-'A'
K = SYM - 65;
// 661 %RETURN %IF K >= 0 %AND K < 26 %AND TERM = 0
if (K < 0) goto L_00B7;
if (K >= 26) goto L_00B7;
if (TERM != 0) goto L_00B7;
return;
L_00B7:;
// 662 %FINISH
L_00B5:;
// 663 TERM = SYM
TERM = SYM;
// 664 %END
return;
} /* end of CODESYM */
// 665 %ROUTINE PACK TRIPLE
void PACKTRIPLE(void) {
// 666 ->T1 %IF TERM < 0
if (TERM >= 0) goto L_00B8;
goto U_1007;
L_00B8:;
// 667 J = ((K<<5+K)<<1+K)<<4+K+1111; !K*1073+1111
J = (((K << 5) + K << 1) + K << 4) + K + 1111;
// 668 CODE SYM
CODESYM();
// 669 ->T2 %IF TERM # 0
if (TERM == 0) goto L_00B9;
goto U_1008;
L_00B9:;
// 670 J = (K<<3+K)<<2+K+111+J; !J+K*37+111
J = ((K << 3) + K << 2) + K + 111 + J;
// 671 CODE SYM
CODESYM();
// 672 ->T3 %IF TERM # 0
if (TERM == 0) goto L_00BA;
goto U_1009;
L_00BA:;
// 673 J = J+K+11
J = J + K + 11;
// 674 CODE SYM
CODESYM();
// 675 %RETURN
return;
// 676 T1: J = ((K<<1+K)<<1+K)<<4-K+1; !K*111+1
U_1007:;
J = (((K << 1) + K << 1) + K << 4) - K + 1;
// 677 CODE SYM
CODESYM();
// 678 T2: %RETURN %IF TERM > 0
U_1008:;
if (TERM <= 0) goto L_00BB;
return;
L_00BB:;
// 679 J = (K<<2+K)<<1+K+1+J; !J+K*11+1
J = ((K << 2) + K << 1) + K + 1 + J;
// 680 CODE SYM
CODESYM();
// 681 T3: %RETURN %IF TERM > 0
U_1009:;
if (TERM <= 0) goto L_00BC;
return;
L_00BC:;
// 682 J = J+K+1
J = J + K + 1;
// 683 CODE SYM
CODESYM();
// 684 %END
return;
} /* end of PACKTRIPLE */
// 685 K = SYM-'A'
K = SYM - 65;
// 686 %FALSE %UNLESS K >= 0 %AND K < 26
if (K < 0) goto L_00BD;
if (K < 26) goto L_00BE;
L_00BD:;
return 0 /*FALSE*/;
L_00BE:;
// 687 %FALSE %IF SYM = 'X' %AND CHAR(GETPOS)&128 # 0
if (SYM != 88) goto L_00BF;
if (CHAR(GETPOS) & 128 == 0) goto L_00BF;
return 0 /*FALSE*/;
L_00BF:;
// 688 TERM = 0
TERM = 0;
// 689 PACK TRIPLE
PACKTRIPLE();
// 690 TAG1 = J; J = 0
TAG1 = J;
J = 0;
// 691 PACK TRIPLE %IF TERM <= 0
if (TERM > 0) goto L_00C0;
PACKTRIPLE();
L_00C0:;
// 692 TAG2 = J
TAG2 = J;
// 693 CODE SYM %WHILE TERM <= 0
L_00C1:;
if (TERM > 0) goto L_00C2;
CODESYM();
goto L_00C1;
L_00C2:;
// 694 GET SYM %IF TERM = ' '
if (TERM != 32) goto L_00C3;
GETSYM();
L_00C3:;
// 695 %TRUE
return 1 /*TRUE*/;
// 696 %END
} /* end of TAG */
// 697
// 698 %PREDICATE TAGIF
int TAGIF(void) {
// 699 %FALSE %UNLESS SYM='I' %AND CHAR(GETPOS)='F' %AND CHAR(GETPOS+1)=' '
if (SYM != 73) goto L_00C4;
if (CHAR(GETPOS) != 70) goto L_00C4;
if (CHAR(GETPOS + 1) == 32) goto L_00C5;
L_00C4:;
return 0 /*FALSE*/;
L_00C5:;
// 700 GETPOS = GETPOS+2
GETPOS = GETPOS + 2;
// 701 GET SYM
GETSYM();
// 702 %TRUE
return 1 /*TRUE*/;
// 703 %END
} /* end of TAGIF */
// 704
// 705 %ROUTINE LOOKUP(%INTEGER CONTROL)
void LOOKUP(int CONTROL) {
// 706 !ALL DICT OPERATIONS LOCALISED HERE
// 707 !CONTROL = 0 (LOOKUP ONLY), 1 (FORWARD OK),
// 708 ! 2 (REDEF), 3 (DEF),
// 709 ! 4 (MACPARM), 7 (LABEL)
// 710 %INTEGER DP
int DP;
// 711 DP = DEFMIN; DP = MP+5 %IF CONTROL = 4
DP = DEFMIN;
if (CONTROL != 4) goto L_00C6;
DP = MP + 5;
L_00C6:;
// 712 %WHILE INTEGER(DP) # 0 %CYCLE
L_00C7:;
if (*_imp_INTEGER(DP) == 0) goto L_00C8;
// 713 ->YES %IF INTEGER(DP) = TAG1 %AND INTEGER(DP+1) = TAG2
if (*_imp_INTEGER(DP) != TAG1) goto L_00C9;
if (*_imp_INTEGER(DP + 1) != TAG2) goto L_00C9;
goto U_1007;
L_00C9:;
// 714 DP = DP+4
DP = DP + 4;
// 715 %REPEAT
goto L_00C7;
L_00C8:;
// 716 !!%OWNINTEGER P
// 717 !! DP = DP-4
// 718 !!REP:DP = DP+4
// 719 !! %LAC* DP; %OPR 640;!SNA; %JMP NO
// 720 !! %SAD TAG1; %OPR 512; %JMP REP
// 721 !! %LAC DP; %TAD #1; %DAC P
// 722 !! %LAC* P; %SAD TAG2; %JMP YES
// 723 !! ->REP
// 724 NO:
U_1008:;
// 725 %RETURN %IF CONTROL&1 = 0; !NO CREATION
if (CONTROL & 1 != 0) goto L_00CA;
return;
L_00CA:;
// 726 NEW:DEFMIN = DEFMIN-4; DP = DEFMIN
U_1009:;
DEFMIN = DEFMIN - 4;
DP = DEFMIN;
// 727 !!%MONITOR 21 %IF DP-QLIM <= 0
// 728 INTEGER(DP) = TAG1; INTEGER(DP+1) = TAG2
*_imp_INTEGER(DP) = TAG1;
*_imp_INTEGER(DP + 1) = TAG2;
// 729 SET:INTEGER(DP+2) = TYPE; INTEGER(DP+3) = VAL
U_100A:;
*_imp_INTEGER(DP + 2) = TYPE;
*_imp_INTEGER(DP + 3) = VAL;
// 730 %RETURN
return;
// 731 YES:->NEW %IF CONTROL = 3 %AND DP-INTEGER(BP) >= 0
U_1007:;
if (CONTROL != 3) goto L_00CB;
if (DP - *_imp_INTEGER(BP) < 0) goto L_00CB;
goto U_1009;
L_00CB:;
// 732 %IF CONTROL&2 = 0 %START; !NOT DEF CLASS
if (CONTROL & 2 != 0) goto L_00CC;
// 733 TYPE = INTEGER(DP+2); VAL = INTEGER(DP+3)
TYPE = *_imp_INTEGER(DP + 2);
VAL = *_imp_INTEGER(DP + 3);
// 734 %RETURN %UNLESS TYPE&OPMASK = MACRO %AND CONTROL = 0
if (TYPE & OPMASK != MACRO) goto L_00CD;
if (CONTROL == 0) goto L_00CE;
L_00CD:;
return;
L_00CE:;
// 735 %IF TYPE&31#25 %THEN INTEGER(DP+2)=TYPE+1 %ELSE INTEGER(DP+2) = TYPE+7
if (TYPE & 31 == 25) goto L_00CF;
*_imp_INTEGER(DP + 2) = TYPE + 1;
goto L_00D0;
L_00CF:;
*_imp_INTEGER(DP + 2) = TYPE + 7;
L_00D0:;
// 736 %RETURN
return;
// 737 %FINISH
L_00CC:;
// 738 FAULT('D') %IF CONTROL = 3
if (CONTROL != 3) goto L_00D1;
FAULT(68);
L_00D1:;
// 739 ->SET %IF CONTROL # 7
if (CONTROL == 7) goto L_00D2;
goto U_100A;
L_00D2:;
// 740 %IF INTEGER(DP+2)&(OPMASK+FMASK) = FMASK %START
if (*_imp_INTEGER(DP + 2) & OPMASK + FMASK != FMASK) goto L_00D3;
// 741 VAL = INTEGER(DP+3)
VAL = *_imp_INTEGER(DP + 3);
// 742 %IF PASS = 0 %START
if (PASS != 0) goto L_00D4;
// 743 INTEGER(VAL) = LOC
*_imp_INTEGER(VAL) = LOC;
// 744 %finish %ELSE %START
goto L_00D5;
L_00D4:;
// 745 FAULT('P') %AND LOC=INTEGER(VAL) %IF INTEGER(VAL) # LOC
if (*_imp_INTEGER(VAL) == LOC) goto L_00D6;
FAULT(80);
LOC = *_imp_INTEGER(VAL);
L_00D6:;
// 746 %FINISH
L_00D5:;
// 747 VAL = LOC
VAL = LOC;
// 748 %finish %ELSE %START
goto L_00D7;
L_00D3:;
// 749 ->NEW %IF DP-INTEGER(BP) >= 0
if (DP - *_imp_INTEGER(BP) < 0) goto L_00D8;
goto U_1009;
L_00D8:;
// 750 FAULT('D')
FAULT(68);
// 751 %FINISH
L_00D7:;
// 752 ->SET
goto U_100A;
// 753 %END
} /* end of LOOKUP */
// ?NO unused
// 754
// 755 %ROUTINE QUEUE(%INTEGER K)
void QUEUE(int K) {
// 756 INTEGER(QLIM) = K
*_imp_INTEGER(QLIM) = K;
// 757 QLIM = QLIM+1; !!%MONITOR 21 %IF QLIM = DEFMIN
QLIM = QLIM + 1;
// 758 %END
return;
} /* end of QUEUE */
// 759
// 760 %ROUTINE GET EXP
void GETEXP(void) {
// 761 %OWNINTEGER W=24717
static int W = 24717;
// 762 %INTEGER I,NBASE
int I;
int NBASE;
// 763
// 764 NBASE = NP
NBASE = NP;
// 765 ->E3 %IF PEND # 0
if (PEND == 0) goto L_00D9;
goto U_100A;
L_00D9:;
// 766 E1: NEST(0) %WHILE S('(')
U_100B:;
L_00DA:;
if (!(S(40))) goto L_00DB;
NEST(0);
goto L_00DA;
L_00DB:;
// 767 NEST(-20) %IF S('#')
if (!(S(35))) goto L_00DC;
NEST(-20);
L_00DC:;
// 768 %IF TAG %START
if (!(TAG())) goto L_00DD;
// 769 E3: %IF TAG1 = W %START; !W
U_100A:;
if (TAG1 != W) goto L_00DE;
// 770 TYPE = 0; VAL = 0
TYPE = 0;
VAL = 0;
// 771 %finish %ELSE %START
goto L_00DF;
L_00DE:;
// 772 %IF PEND >= 0 %START
if (PEND < 0) goto L_00E0;
// 773 TYPE = LOCTYPE+FMASK+UMASK; VAL = LABMIN-1
TYPE = LOCTYPE + FMASK + UMASK;
VAL = LABMIN - 1;
// 774 LOOKUP(1)
LOOKUP(1);
// 775 %IF TYPE&(OPMASK+FMASK) = FMASK %START
if (TYPE & OPMASK + FMASK != FMASK) goto L_00E1;
// 776 %IF VAL = LABMIN-1 %START
if (VAL != LABMIN - 1) goto L_00E2;
// 777 LABMIN = VAL; !!%MONITOR 22 %IF LABMIN = ALMAX
LABMIN = VAL;
// 778 %FINISH
L_00E2:;
// 779 VAL = INTEGER(VAL)
VAL = *_imp_INTEGER(VAL);
// 780 FAULT('U') %IF VAL = 0
if (VAL != 0) goto L_00E3;
FAULT(85);
L_00E3:;
// 781 TYPE = TYPE-FMASK
TYPE = TYPE - FMASK;
// 782 %FINISH
L_00E1:;
// 783 %FINISH
L_00E0:;
// 784 %FINISH
L_00DF:;
// 785 PEND = 0
PEND = 0;
// 786 %IF TYPE = REG %AND TERM = '(' %START
if (TYPE != REG) goto L_00E4;
if (TERM != 40) goto L_00E4;
// 787 TYPE = 0 %IF SAVE&1 = 0; VAL = VAL+SAVE; !?
if (SAVE & 1 != 0) goto L_00E5;
TYPE = 0;
L_00E5:;
VAL = VAL + SAVE;
// 788 %FINISH
L_00E4:;
// 789 %IF MODE # 0 %START
if (MODE == 0) goto L_00E6;
// 790 FAULT('I') %AND TYPE=0 %IF TYPE&OPMASK # 0
if (TYPE & OPMASK == 0) goto L_00E7;
FAULT(73);
TYPE = 0;
L_00E7:;
// 791 %IF TYPE®XMASK # 0 %START
if (TYPE & REGXMASK == 0) goto L_00E8;
// 792 I = TYPE&15; I = VAL %IF I = 0
I = TYPE & 15;
if (I != 0) goto L_00E9;
I = VAL;
L_00E9:;
// 793 DUSE = DUSE+1 %IF I = DREG
if (I != DREG) goto L_00EA;
DUSE = DUSE + 1;
L_00EA:;
// 794 %FINISH
L_00E8:;
// 795 %FINISH
L_00E6:;
// 796 %IF TERM = '(' %START
if (TERM != 40) goto L_00EB;
// 797 GET SYM
GETSYM();
// 798 I = TYPE&31
I = TYPE & 31;
// 799 QUEUE(TYPE-I); QUEUE(VAL)
QUEUE(TYPE - I);
QUEUE(VAL);
// 800 NEST(-21); NEST(0)
NEST(-21);
NEST(0);
// 801 %IF I # 0 %START
if (I == 0) goto L_00EC;
// 802 QUEUE(REG); QUEUE(I&15)
QUEUE(REG);
QUEUE(I & 15);
// 803 NEST(-1)
NEST(-1);
// 804 %FINISH
L_00EC:;
// 805 ->E1
goto U_100B;
// 806 %FINISH
L_00EB:;
// 807 %finish %ELSE %IF '0' <= SYM <= '9' %START
goto L_00ED;
L_00DD:;
{
// Double-sided test on SYM (Part I)
int tmp;
if (48 > (tmp = SYM)) goto L_00EE;
// Double-sided test on SYM (Part II)
if (tmp > 57) goto L_00EE;
}
// 808 TYPE = 0; VAL = SYM-'0'
TYPE = 0;
VAL = SYM - 48;
// 809 %CYCLE
L_00EF:;
// 810 SYM = CHAR(GETPOS)-'0'
SYM = CHAR(GETPOS) - 48;
// 811 %EXIT %UNLESS 0 <= SYM <= 9
{
// Double-sided test on SYM (Part I)
int tmp;
if (0 > (tmp = SYM)) goto L_00F0;
// Double-sided test on SYM (Part II)
if (tmp <= 9) goto L_00F1;
}
L_00F0:;
goto L_00F2;
L_00F1:;
// 812 VAL = (VAL<<2+VAL)<<1+SYM
VAL = ((VAL << 2) + VAL << 1) + SYM;
// 813 GETPOS = GETPOS+1
GETPOS = GETPOS + 1;
// 814 %REPEAT
goto L_00EF;
L_00F2:;
// 815 GET SYM
GETSYM();
// 816 %finish %ELSE %IF SYM = 'X' %START
goto L_00ED;
L_00EE:;
if (SYM != 88) goto L_00F3;
// 817 TYPE = 0; VAL = 0
TYPE = 0;
VAL = 0;
// 818 %CYCLE
L_00F4:;
// 819 SYM = CHAR(GETPOS)-128
SYM = CHAR(GETPOS) - 128;
// 820 %EXIT %IF SYM < 0
if (SYM >= 0) goto L_00F5;
goto L_00F6;
L_00F5:;
// 821 SYM = SYM-32 %IF SYM >= 96; !ENSURE UPPER-CASE
if (SYM < 96) goto L_00F7;
SYM = SYM - 32;
L_00F7:;
// 822 %IF '0' <= SYM <= '9' %OR 'A' <= SYM <= 'F' %START
{
// Double-sided test on SYM (Part I)
int tmp;
if (48 > (tmp = SYM)) goto L_00F8;
// Double-sided test on SYM (Part II)
if (tmp <= 57) goto L_00F9;
}
L_00F8:;
{
// Double-sided test on SYM (Part I)
int tmp;
if (65 > (tmp = SYM)) goto L_00FA;
// Double-sided test on SYM (Part II)
if (tmp > 70) goto L_00FA;
}
L_00F9:;
// 823 VAL = VAL<<4+SYM-'0'
VAL = (VAL << 4) + SYM - 48;
// 824 VAL = VAL-7 %IF SYM >= 'A'
if (SYM < 65) goto L_00FB;
VAL = VAL - 7;
L_00FB:;
// 825 %finish %ELSE FAULT('H')
goto L_00FC;
L_00FA:;
FAULT(72);
L_00FC:;
// 826 GETPOS = GETPOS+1
GETPOS = GETPOS + 1;
// 827 %REPEAT
goto L_00F4;
L_00F6:;
// 828 GET SYM
GETSYM();
// 829 %finish %ELSE %IF SYM&128 # 0 %START
goto L_00ED;
L_00F3:;
if (SYM & 128 == 0) goto L_00FD;
// 830 TYPE = 0; VAL = SYM-128
TYPE = 0;
VAL = SYM - 128;
// 831 GET SYM
GETSYM();
// 832 %IF MODE >= 0 %AND SYM&128 # 0 %START
if (MODE < 0) goto L_00FE;
if (SYM & 128 == 0) goto L_00FE;
// 833 VAL = VAL<<8+SYM-128; GET SYM
VAL = (VAL << 8) + SYM - 128;
GETSYM();
// 834 %FINISH
L_00FE:;
// 835 %finish %ELSE %IF S('.') %START
goto L_00ED;
L_00FD:;
if (!(S(46))) goto L_00FF;
// 836 ->ERR %IF %NOT TAG
if (TAG()) goto L_0100;
goto U_100C;
L_0100:;
// 837 TYPE = 0; VAL = TAG1
TYPE = 0;
VAL = TAG1;
// 838 %finish %ELSE %IF S('*') %START
goto L_00ED;
L_00FF:;
if (!(S(42))) goto L_0101;
// 839 TYPE = LOCTYPE&63; VAL = LOC
TYPE = LOCTYPE & 63;
VAL = LOC;
// 840 %IF SYM = 'L' %START; !FOR NOW
if (SYM != 76) goto L_0102;
// 841 TYPE = 0; VAL = LIST %IF TAG
TYPE = 0;
if (!(TAG())) goto L_0103;
VAL = LIST;
L_0103:;
// 842 %FINISH
L_0102:;
// 843 %finish %ELSE %IF SYM = '-' %START
goto L_00ED;
L_0101:;
if (SYM != 45) goto L_0104;
// 844 TYPE = 0; VAL = 0
TYPE = 0;
VAL = 0;
// 845 %finish %ELSE %IF SYM = '\' %START
goto L_00ED;
L_0104:;
if (SYM != 92) goto L_0105;
// 846 TYPE = 0; VAL = \0
TYPE = 0;
VAL = (~0);
// 847 %finish %ELSE ->ERR
goto L_00ED;
L_0105:;
goto U_100C;
L_00ED:;
// 848 QUEUE(TYPE); QUEUE(VAL)
QUEUE(TYPE);
QUEUE(VAL);
// 849
// 850 %WHILE NP # NBASE %CYCLE
L_0106:;
if (NP == NBASE) goto L_0107;
// 851 %IF INTEGER(NP) < 0 %START
if (*_imp_INTEGER(NP) >= 0) goto L_0108;
// 852 QUEUE(INTEGER(NP))
QUEUE(*_imp_INTEGER(NP));
// 853 %finish %ELSE %START
goto L_0109;
L_0108:;
// 854 %EXIT %IF %NOT S(')')
if (S(41)) goto L_010A;
goto L_0107;
L_010A:;
// 855 %FINISH
L_0109:;
// 856 NP = NP+1
NP = NP + 1;
// 857 %REPEAT
goto L_0106;
L_0107:;
// 858
// 859 NEST(-1) %AND ->E1 %IF S('+')
if (!(S(43))) goto L_010B;
NEST(-1);
goto U_100B;
L_010B:;
// 860 NEST(-2) %AND ->E1 %IF S('-')
if (!(S(45))) goto L_010C;
NEST(-2);
goto U_100B;
L_010C:;
// 861 NEST(-3) %AND ->E1 %IF S('&')
if (!(S(38))) goto L_010D;
NEST(-3);
goto U_100B;
L_010D:;
// 862 NEST(-4) %AND ->E1 %IF S('!')
if (!(S(33))) goto L_010E;
NEST(-4);
goto U_100B;
L_010E:;
// 863 NEST(-5) %AND ->E1 %IF S('\')
if (!(S(92))) goto L_010F;
NEST(-5);
goto U_100B;
L_010F:;
// 864 NEST(-6) %AND ->E1 %IF SS('<')
if (!(SS(60))) goto L_0110;
NEST(-6);
goto U_100B;
L_0110:;
// 865 NEST(-7) %AND ->E1 %IF SS('>')
if (!(SS(62))) goto L_0111;
NEST(-7);
goto U_100B;
L_0111:;
// 866 NEST(-8) %AND ->E1 %IF S('_')
if (!(S(95))) goto L_0112;
NEST(-8);
goto U_100B;
L_0112:;
// 867 %RETURN %IF NP = NBASE
if (NP != NBASE) goto L_0113;
return;
L_0113:;
// 868 ERR:NP = NBASE
U_100C:;
NP = NBASE;
// 869 !!%MONITOR 19
// 870 %END
return;
} /* end of GETEXP */
// 871
// 872 %ROUTINE GET COND
void GETCOND(void) {
// 873 %OWNINTEGER AND=1717, OR=16873
static int AND = 1717;
static int OR = 16873;
// 874 %INTEGER J,K
int J;
int K;
// 875 TRANSF = QSTART; QSTART = QLIM
TRANSF = QSTART;
QSTART = QLIM;
// 876 J = 0
J = 0;
// 877 %CYCLE
L_0114:;
// 878 GET EXP
GETEXP();
// 879 %IF S('=') %START
if (!(S(61))) goto L_0115;
// 880 K = 5
K = 5;
// 881 %finish %ELSE %IF S('#') %START
goto L_0116;
L_0115:;
if (!(S(35))) goto L_0117;
// 882 K = 4
K = 4;
// 883 %finish %ELSE %IF S('<') %START
goto L_0116;
L_0117:;
if (!(S(60))) goto L_0118;
// 884 K = 3; K = 7 %IF S('=')
K = 3;
if (!(S(61))) goto L_0119;
K = 7;
L_0119:;
// 885 %finish %ELSE %IF S('>') %START
goto L_0116;
L_0118:;
if (!(S(62))) goto L_011A;
// 886 K = 6; K = 2 %IF S('=')
K = 6;
if (!(S(61))) goto L_011B;
K = 2;
L_011B:;
// 887 %finish %ELSE %START
goto L_0116;
L_011A:;
// 888 QUEUE(-12)
QUEUE(-12);
// 889 %RETURN
return;
// 890 %FINISH
L_0116:;
// 891 GET EXP
GETEXP();
// 892 QUEUE(-2); !SUBTRACT
QUEUE(-2);
// 893 QUEUE(-11); QUEUE(K)
QUEUE(-11);
QUEUE(K);
// 894 %RETURN %IF %NOT TAG
if (TAG()) goto L_011C;
return;
L_011C:;
// 895 %IF TAG1 = AND %AND TAG2 = 0 %START
if (TAG1 != AND) goto L_011D;
if (TAG2 != 0) goto L_011D;
// 896 !!%MONITOR 19 %IF J < 0
// 897 J = 1; QUEUE(-13)
J = 1;
QUEUE(-13);
// 898 %finish %ELSE %START
goto L_011E;
L_011D:;
// 899 !!%MONITOR 19 %IF TAG1 # OR %OR J > 0
// 900 J = -1; QUEUE(-14)
J = -1;
QUEUE(-14);
// 901 %FINISH
L_011E:;
// 902 %REPEAT
goto L_0114;
// 903 %END
} /* end of GETCOND */
// ?OR unused
// 904
// 905 %ROUTINE GET INST
void GETINST(void) {
// 906 %INTEGER I
int I;
// 907 QUEUE(TYPE); QUEUE(VAL)
QUEUE(TYPE);
QUEUE(VAL);
// 908 %RETURN %IF TERM # ' '; !NO OPERAND FOLLOWING =>
if (TERM == 32) goto L_011F;
return;
L_011F:;
// 909 %CYCLE
L_0120:;
// 910 GET EXP
GETEXP();
// 911 QUEUE(-22)
QUEUE(-22);
// 912 %RETURN %IF %NOT S(',')
if (S(44)) goto L_0121;
return;
L_0121:;
// 913 %REPEAT
goto L_0120;
// 914 %END
} /* end of GETINST */
// ?I unused
// 915
// 916 %ROUTINE READ LINE
void READLINE(void) {
// 917 %INTEGER Q
int Q;
// 918 PUTPOS = STARTPOS
PUTPOS = STARTPOS;
// 919 %IF MP = 0 %START
if (MP != 0) goto L_0122;
// 920 Q = 0; PSEUDOLIM = 0
Q = 0;
PSEUDOLIM = 0;
// 921 %CYCLE
L_0123:;
// 922 READ SYMBOL(SYM)
_imp_READSYMBOL(/*?*/ &SYM);
// 923 READ SYMBOL(SYM) %AND Q=Q!!128 %IF SYM = ''''
if (SYM != 39) goto L_0124;
_imp_READSYMBOL(/*?*/ &SYM);
Q = Q ^ 128;
L_0124:;
// 924 %EXIT %IF SYM = NL
if (SYM != 10) goto L_0125;
goto L_0126;
L_0125:;
// 925 SYM = SYM-32 %IF SYM-Q >= 96; !LOWER-CASE -> UPPER-CASE
if (SYM - Q < 96) goto L_0127;
SYM = SYM - 32;
L_0127:;
// 926 SYM = SYM+Q
SYM = SYM + Q;
// 927 %EXIT %IF SYM = '/' %AND PSEUDOLIM # 0
if (SYM != 47) goto L_0128;
if (PSEUDOLIM == 0) goto L_0128;
goto L_0126;
L_0128:;
// 928 %IF SYM = ' ' %START
if (SYM != 32) goto L_0129;
// 929 PSEUDOLIM = PUTPOS %IF PSEUDOLIM = 0
if (PSEUDOLIM != 0) goto L_012A;
PSEUDOLIM = PUTPOS;
L_012A:;
// 930 %finish %ELSE PSEUDOLIM = 0
goto L_012B;
L_0129:;
PSEUDOLIM = 0;
L_012B:;
// 931 PUT CHAR(SYM)
PUTCHAR(SYM);
// 932 %REPEAT
goto L_0123;
L_0126:;
// 933 %IF PSEUDOLIM # 0 %START
if (PSEUDOLIM == 0) goto L_012C;
// 934 Q = PUTPOS; PUTPOS = PSEUDOLIM
Q = PUTPOS;
PUTPOS = PSEUDOLIM;
// 935 PUT CHAR(NL)
PUTCHAR(10);
// 936 PUTPOS = Q
PUTPOS = Q;
// 937 %FINISH
L_012C:;
// 938 %CYCLE
L_012D:;
// 939 PUT CHAR(SYM)
PUTCHAR(SYM);
// 940 %EXIT %IF SYM = NL
if (SYM != 10) goto L_012E;
goto L_012F;
L_012E:;
// 941 READ SYMBOL(SYM)
_imp_READSYMBOL(/*?*/ &SYM);
// 942 %REPEAT
goto L_012D;
L_012F:;
// 943 PRINTPOS = STARTPOS
PRINTPOS = STARTPOS;
// 944 %finish %ELSE %START
goto L_0130;
L_0122:;
// 945 GETPOS = INTEGER(MP)
GETPOS = *_imp_INTEGER(MP);
// 946 %IF CHAR(GETPOS) = 0 %START
if (CHAR(GETPOS) != 0) goto L_0131;
// 947 QBASE = MP
QBASE = MP;
// 948 %IF INTEGER(MP+1)&16_8000 # 0 %START
if (*_imp_INTEGER(MP + 1) & 32768 == 0) goto L_0132;
// 949 %WHILE INTEGER(NP)&16_8000 = 0 %CYCLE
L_0133:;
if (*_imp_INTEGER(NP) & 32768 != 0) goto L_0134;
// 950 FAULT('C'); NP = NP+2
FAULT(67);
NP = NP + 2;
// 951 %REPEAT
goto L_0133;
L_0134:;
// 952 SET LAB(LOC)
SETLAB(LOC);
// 953 %FINISH
L_0132:;
// 954 GETPOS = INTEGER(MP+2)
GETPOS = *_imp_INTEGER(MP + 2);
// 955 STARTPOS = INTEGER(MP+3)
STARTPOS = *_imp_INTEGER(MP + 3);
// 956 MP = INTEGER(MP+4)
MP = *_imp_INTEGER(MP + 4);
// 957 PRINTPOS = 0 %IF LIST&2 # 0
if (LIST & 2 == 0) goto L_0135;
PRINTPOS = 0;
L_0135:;
// 958 GET SYM; !TERMINATOR
GETSYM();
// 959 GET SYM %IF SYM = ';'
if (SYM != 59) goto L_0136;
GETSYM();
L_0136:;
// 960 %RETURN
return;
// 961 %FINISH
L_0131:;
// 962 PRINTPOS = STARTPOS %IF LIST&2 # 0
if (LIST & 2 == 0) goto L_0137;
PRINTPOS = STARTPOS;
L_0137:;
// 963 %CYCLE
L_0138:;
// 964 SYM = CHAR(GETPOS); GETPOS = GETPOS+1
SYM = CHAR(GETPOS);
GETPOS = GETPOS + 1;
// 965 %IF TAG %START
if (!(TAG())) goto L_0139;
// 966 SYM=TERM %AND GETPOS=GETPOS-1 %IF TERM = ' '
if (TERM != 32) goto L_013A;
SYM = TERM;
GETPOS = GETPOS - 1;
L_013A:;
// 967 TYPE = INTEGER(MP); VAL = GETPOS-1
TYPE = *_imp_INTEGER(MP);
VAL = GETPOS - 1;
// 968 LOOKUP(4)
LOOKUP(4);
// 969 %WHILE TYPE # VAL %CYCLE
L_013B:;
if (TYPE == VAL) goto L_013C;
// 970 PUT CHAR(CHAR(TYPE))
PUTCHAR(CHAR(TYPE));
// 971 TYPE = TYPE+1
TYPE = TYPE + 1;
// 972 %REPEAT
goto L_013B;
L_013C:;
// 973 %FINISH
L_0139:;
// 974 %IF SYM = '?' %START
if (SYM != 63) goto L_013D;
// 975 PUT CHAR(INTEGER(MP+1)>>5&31+'A')
PUTCHAR(((unsigned int)*_imp_INTEGER(MP + 1) >> 5 & 31) + 65);
// 976 SYM = INTEGER(MP+1)&31+'A'
SYM = (*_imp_INTEGER(MP + 1) & 31) + 65;
// 977 %FINISH
L_013D:;
// 978 PUT CHAR(SYM)
PUTCHAR(SYM);
// 979 INTEGER(MP) = GETPOS
*_imp_INTEGER(MP) = GETPOS;
// 980 %EXIT %IF SYM = NL
if (SYM != 10) goto L_013E;
goto L_013F;
L_013E:;
// 981 %REPEAT
goto L_0138;
L_013F:;
// 982 %FINISH
L_0130:;
// 983 QBASE = (PUTPOS+1)>>1
QBASE = (unsigned int)PUTPOS + 1 >> 1;
// 984 GETPOS = STARTPOS; GET SYM
GETPOS = STARTPOS;
GETSYM();
// 985 %END
return;
} /* end of READLINE */
// 986
// 987 %ROUTINE SCAN ARG
void SCANARG(void) {
// 988 ! SET TYPE,VAL TO START,LIM OF ARG IF NOT NULL
// 989 %INTEGER I,J
int I;
int J;
// 990 %RETURN %IF SYM='I' %AND CHAR(GETPOS)='F' %AND CHAR(GETPOS+1)=' '
if (SYM != 73) goto L_0140;
if (CHAR(GETPOS) != 70) goto L_0140;
if (CHAR(GETPOS + 1) != 32) goto L_0140;
return;
L_0140:;
// 991 I = GETPOS-1; I = GETPOS %IF SYM = '['
I = GETPOS - 1;
if (SYM != 91) goto L_0141;
I = GETPOS;
L_0141:;
// 992 J = 0
J = 0;
// 993 %CYCLE
L_0142:;
// 994 %EXIT %IF SYM = NL
if (SYM != 10) goto L_0143;
goto L_0144;
L_0143:;
// 995 %EXIT %IF (SYM=' ' %OR SYM=',' %OR SYM=';') %AND J<=0
if (SYM == 32) goto L_0145;
if (SYM == 44) goto L_0145;
if (SYM != 59) goto L_0146;
L_0145:;
if (J > 0) goto L_0146;
goto L_0144;
L_0146:;
// 996 J = J+1 %IF SYM = '['
if (SYM != 91) goto L_0147;
J = J + 1;
L_0147:;
// 997 %IF SYM = ']' %START
if (SYM != 93) goto L_0148;
// 998 J = J-1; %EXIT %IF J = 0
J = J - 1;
if (J != 0) goto L_0149;
goto L_0144;
L_0149:;
// 999 %FINISH
L_0148:;
// 1000 SYM = CHAR(GETPOS); GETPOS = GETPOS+1
SYM = CHAR(GETPOS);
GETPOS = GETPOS + 1;
// 1001 %REPEAT
goto L_0142;
L_0144:;
// 1002 %IF GETPOS-1 # I %START
if (GETPOS - 1 == I) goto L_014A;
// 1003 TYPE = I; VAL = GETPOS-1
TYPE = I;
VAL = GETPOS - 1;
// 1004 %FINISH
L_014A:;
// 1005 GET SYM %IF SYM = ']'
if (SYM != 93) goto L_014B;
GETSYM();
L_014B:;
// 1006 %END
return;
} /* end of SCANARG */
// 1007
// 1008 %ROUTINE SET ACC
void SETACC(void) {
// 1009 %INTEGER I
int I;
// 1010 ACC = -1; ATYPE = -1; CREG = -1
ACC = -1;
ATYPE = -1;
CREG = -1;
// 1011 I = TEMPS
I = TEMPS;
// 1012 %RETURN %IF I = 0
if (I != 0) goto L_014C;
return;
L_014C:;
// 1013 %CYCLE
L_014D:;
// 1014 ACC = ACC+1
ACC = ACC + 1;
// 1015 %RETURN %IF I&1 # 0
if (I & 1 == 0) goto L_014E;
return;
L_014E:;
// 1016 I = I>>1
I = (unsigned int)I >> 1;
// 1017 %REPEAT
goto L_014D;
// 1018 %END
} /* end of SETACC */
// 1019
// 1020 !MAIN PROGRAM
// 1021
// 1022 !RADIX 36 CONSTANTS
// 1023 %OWNINTEGER B=2184, IF=9991, ELS=5950, E=5403, FIN=6907, ISH=10490
static int B = 2184;
static int IF = 9991;
static int ELS = 5950;
static int E = 5403;
static int FIN = 6907;
static int ISH = 10490;
// 1024 %OWNINTEGER JUM=11642, P=17206, PS=17983, DEF=4605, END=6009
static int JUM = 11642;
static int P = 17206;
static int PS = 17983;
static int DEF = 4605;
static int END = 6009;
// 1025
// 1026 %INTEGER I,J,K
int I;
int J;
int K;
// 1027 !!%FAULT 19 ->ERR; !RECOGNITION ERROR
// 1028 !!%FAULT 9 ->BEND; !INPUT ENDED
// 1029
// 1030 %CYCLE I = 1,1,SBOUND
// %for I = 1, 1, SBOUND %cycle
{
int _final = SBOUND;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, SBOUND");
I = 0;
L_014F:
if (I == _final) goto L_0150;
I += 1;
// 1031 STORE(I) = 0
STORE[I - 1] = 0;
// 1032 %REPEAT
goto L_014F;
}
L_0150:;
// 1033 CODEPOS = ADDR(STORE(1))
CODEPOS = _imp_ADDR(/*?*/ &STORE[0]);
// 1034 MACLIM = (CODEPOS+20)<<1
MACLIM = CODEPOS + 20 << 1;
// 1035 STORELIM = ADDR(STORE(SBOUND))
STORELIM = _imp_ADDR(/*?*/ &STORE[SBOUND - 1]);
// 1036 NP = STORELIM
NP = STORELIM;
// 1037 LABLIM = NP-60
LABLIM = NP - 60;
// 1038 BP = LABLIM
BP = LABLIM;
// 1039 DEFLIM = STORELIM-(SBOUND>>2)
DEFLIM = STORELIM - ((unsigned int)SBOUND >> 2);
// 1040 DEFMIN = DEFLIM
DEFMIN = DEFLIM;
// 1041 INTEGER(BP) = DEFLIM
*_imp_INTEGER(BP) = DEFLIM;
// 1042 SELECT INPUT(PRE)
_imp_SELECTINPUT(PRE);
// 1043 DO PASS:
U_100D:;
// 1044 PUT WORD(0) %AND CONTROL=16_20 %IF PASS > 0
if (PASS <= 0) goto L_0152;
PUTWORD(0);
CONTROL = 32;
L_0152:;
// 1045 STARTPOS = MACLIM
STARTPOS = MACLIM;
// 1046 MP = 0
MP = 0;
// 1047 ALMAX = DEFLIM
ALMAX = DEFLIM;
// 1048 LABMIN = LABLIM
LABMIN = LABLIM;
// 1049 ASSCOND = 1; SKIP = 0
ASSCOND = 1;
SKIP = 0;
// 1050 LOCTYPE = MEMMASK+RELMASK; LOC = 0
LOCTYPE = MEMMASK + RELMASK;
LOC = 0;
// 1051 SET ACC
SETACC();
// 1052 READ: FSYM = ' '; FAULTPOS = 0
U_100E:;
FSYM = 32;
FAULTPOS = 0;
// 1053 READ LINE
READLINE();
// 1054 NEXT:
U_100F:;
// 1055 DREG = -1
DREG = -1;
// 1056 MODE = 0
MODE = 0;
// 1057 PEND = 0; COND = 0
PEND = 0;
COND = 0;
// 1058 QSTART = QBASE; QLIM = QSTART
QSTART = QBASE;
QLIM = QSTART;
// 1059 FLAG = 0
FLAG = 0;
// 1060 %IF S('$') %START
if (!(S(36))) goto L_0153;
// 1061 ->NEWPAGE %IF SYM = '/'
if (SYM != 47) goto L_0154;
goto U_1010;
L_0154:;
// 1062 ->ERR %IF %NOT TAG
if (TAG()) goto L_0155;
goto U_1011;
L_0155:;
// 1063 ->ASSIF %IF TAG1 = IF
if (TAG1 != IF) goto L_0156;
goto U_1012;
L_0156:;
// 1064 ->ASSELSE %IF TAG1 = ELS
if (TAG1 != ELS) goto L_0157;
goto U_1013;
L_0157:;
// 1065 ->ASSFIN %IF TAG1 = FIN
if (TAG1 != FIN) goto L_0158;
goto U_1014;
L_0158:;
// 1066 ->LEND %IF SKIP # 0
if (SKIP == 0) goto L_0159;
goto U_1015;
L_0159:;
// 1067 ->DEFINE %IF TAG1 = DEF
if (TAG1 != DEF) goto L_015A;
goto U_1000;
L_015A:;
// 1068 ->DEFINE %IF TAG1 = 19625; !RED
if (TAG1 != 19625) goto L_015B;
goto U_1000;
L_015B:;
// 1069 ->LISTC %IF TAG1 = 13350; !LIS
if (TAG1 != 13350) goto L_015C;
goto U_1016;
L_015C:;
// 1070 ->TEMP %IF TAG1 = 21780; !TEM
if (TAG1 != 21780) goto L_015D;
goto U_1001;
L_015D:;
// 1071 ->LOCC %IF TAG1 = 13556; !LOC
if (TAG1 != 13556) goto L_015E;
goto U_1002;
L_015E:;
// 1072 ->LOCC %IF TAG1 = 1917; !ASS
if (TAG1 != 1917) goto L_015F;
goto U_1002;
L_015F:;
// 1073 ->SAVC %IF TAG1 = 20568; !SAV
if (TAG1 != 20568) goto L_0160;
goto U_1017;
L_0160:;
// 1074 ->MACDEF %IF TAG1 = 14111; !MAC
if (TAG1 != 14111) goto L_0161;
goto U_1003;
L_0161:;
// 1075 ->BEGIN %IF TAG1 = 2460; !BEG
if (TAG1 != 2460) goto L_0162;
goto U_1004;
L_0162:;
// 1076 ->BEND %IF TAG1 = END
if (TAG1 != END) goto L_0163;
goto U_1005;
L_0163:;
// 1077 FAULT('U')
FAULT(85);
// 1078 ->LEND
goto U_1015;
// 1079 %FINISH
L_0153:;
// 1080 ->LEND %IF SKIP # 0 %OR SYM = '/'
if (SKIP != 0) goto L_0151;
if (SYM != 47) goto L_0164;
L_0151:;
goto U_1015;
L_0164:;
// 1081 %IF SYM = NL %START
if (SYM != 10) goto L_0165;
// 1082 ->LEND %IF LINES < 54
if (LINES >= 54) goto L_0166;
goto U_1015;
L_0166:;
// 1083 DO NEWLINE %WHILE LINES # 0
L_0167:;
if (LINES == 0) goto L_0168;
DONEWLINE();
goto L_0167;
L_0168:;
// 1084 ->READ
goto U_100E;
// 1085 %FINISH
L_0165:;
// 1086 %IF TAG %START
if (!(TAG())) goto L_0169;
// 1087 ->LABDEF %IF TERM = ':'
if (TERM != 58) goto L_016A;
goto U_1006;
L_016A:;
// 1088 MODE = 1
MODE = 1;
// 1089 ->ASSIGN %IF TERM = '(' %OR SYM = '='
if (TERM == 40) goto L_016B;
if (SYM != 61) goto L_016C;
L_016B:;
goto U_1018;
L_016C:;
// 1090 ->JUMP %IF TAG1 = JUM %AND (TAG2=P %OR TAG2=PS)
if (TAG1 != JUM) goto L_016D;
if (TAG2 == P) goto L_016E;
if (TAG2 != PS) goto L_016D;
L_016E:;
goto U_1019;
L_016D:;
// 1091 ->IFC %IF TAG1 = IF
if (TAG1 != IF) goto L_016F;
goto U_101A;
L_016F:;
// 1092 ->ELSE %IF TAG1 = ELS %AND TAG2 = E
if (TAG1 != ELS) goto L_0170;
if (TAG2 != E) goto L_0170;
goto U_101B;
L_0170:;
// 1093 ->FINISH %IF TAG1 = FIN %AND TAG2 = ISH
if (TAG1 != FIN) goto L_0171;
if (TAG2 != ISH) goto L_0171;
goto U_101C;
L_0171:;
// 1094 ->WHILE %IF TAG1 = 25106 %AND TAG2 = 13173
if (TAG1 != 25106) goto L_0172;
if (TAG2 != 13173) goto L_0172;
goto U_101D;
L_0172:;
// 1095 ->CYCLE %IF TAG1 = 4269 %AND TAG2 = 13173
if (TAG1 != 4269) goto L_0173;
if (TAG2 != 13173) goto L_0173;
goto U_101E;
L_0173:;
// 1096 ->REPEAT %IF TAG1 = 19637 %AND TAG2 = 5544
if (TAG1 != 19637) goto L_0174;
if (TAG2 != 5544) goto L_0174;
goto U_101F;
L_0174:;
// 1097 MODE=-2 %AND ->DATA %IF TAG1 = B
if (TAG1 != B) goto L_0175;
MODE = -2;
goto U_1020;
L_0175:;
// 1098 TYPE = UMASK; LOOKUP(0)
TYPE = UMASK;
LOOKUP(0);
// 1099 ->MACCALL %IF TYPE&OPMASK = MACRO
if (TYPE & OPMASK != MACRO) goto L_0176;
goto U_1021;
L_0176:;
// 1100 ->MINST %IF TYPE&OPMASK # 0
if (TYPE & OPMASK == 0) goto L_0177;
goto U_1022;
L_0177:;
// 1101 FAULT('U') %AND ->LEND %IF TYPE&UMASK # 0
if (TYPE & UMASK == 0) goto L_0178;
FAULT(85);
goto U_1015;
L_0178:;
// 1102 PEND = -1
PEND = -1;
// 1103 %FINISH
L_0169:;
// 1104 MODE = -1
MODE = -1;
// 1105 DATA:
U_1020:;
// 1106 %CYCLE
L_0179:;
// 1107 GET EXP; ASSEMBLE
GETEXP();
ASSEMBLE();
// 1108 FAULT('I') %IF TYPE®XMASK # 0
if (TYPE & REGXMASK == 0) goto L_017A;
FAULT(73);
L_017A:;
// 1109 I = 1
I = 1;
// 1110 %IF S('$') %START
if (!(S(36))) goto L_017B;
// 1111 I = VAL %IF VAL < 1000
if (VAL >= 1000) goto L_017C;
I = VAL;
L_017C:;
// 1112 QLIM = QSTART
QLIM = QSTART;
// 1113 GET EXP; ASSEMBLE
GETEXP();
ASSEMBLE();
// 1114 %FINISH
L_017B:;
// 1115 %WHILE I > 0 %CYCLE
L_017D:;
if (I <= 0) goto L_017E;
// 1116 %IF MODE # -1 %START
if (MODE == -1) goto L_017F;
// 1117 FAULT('T') %IF VAL&16_FF00 # 0
if (VAL & 65280 == 0) goto L_0180;
FAULT(84);
L_0180:;
// 1118 %IF MODE = -2 %START
if (MODE != -2) goto L_0181;
// 1119 J = VAL<<8; MODE = -3
J = VAL << 8;
MODE = -3;
// 1120 %finish %ELSE %START
goto L_0182;
L_0181:;
// 1121 VAL = VAL+J; MODE = -2
VAL = VAL + J;
MODE = -2;
// 1122 PLANT VAL
PLANTVAL();
// 1123 %FINISH
L_0182:;
// 1124 %finish %ELSE %START
goto L_0183;
L_017F:;
// 1125 PLANT VAL; VAL = VAL&255
PLANTVAL();
VAL = VAL & 255;
// 1126 %FINISH
L_0183:;
// 1127 I = I-1
I = I - 1;
// 1128 %REPEAT
goto L_017D;
L_017E:;
// 1129 %EXIT %UNLESS S(',') %OR SYM&128 # 0
if (S(44)) goto L_0184;
if (SYM & 128 != 0) goto L_0184;
goto L_0185;
L_0184:;
// 1130 %IF SYM = NL %START
if (SYM != 10) goto L_0186;
// 1131 PRINT LINE %IF PRINTPOS # 0; READ LINE
if (PRINTPOS == 0) goto L_0187;
PRINTLINE();
L_0187:;
READLINE();
// 1132 QSTART = QBASE
QSTART = QBASE;
// 1133 %FINISH
L_0186:;
// 1134 QLIM = QSTART
QLIM = QSTART;
// 1135 %REPEAT
goto L_0179;
L_0185:;
// 1136 VAL=J %AND PLANT VAL %IF MODE = -3
if (MODE != -3) goto L_0188;
VAL = J;
PLANTVAL();
L_0188:;
// 1137 ->SEND
goto U_1023;
// 1138
// 1139 LABDEF:
U_1006:;
// 1140 CREG = -1; ATYPE = -1
CREG = -1;
ATYPE = -1;
// 1141 GET SYM
GETSYM();
// 1142 FAULT('C') %AND NP=STORELIM %IF NP # STORELIM
if (NP == STORELIM) goto L_0189;
FAULT(67);
NP = STORELIM;
L_0189:;
// 1143 TYPE = LOCTYPE; VAL = LOC
TYPE = LOCTYPE;
VAL = LOC;
// 1144 LOOKUP(7)
LOOKUP(7);
// 1145 ->NEXT
goto U_100F;
// 1146
// 1147 ASSIGN:
U_1018:;
// 1148 PEND = 1
PEND = 1;
// 1149 GET EXP
GETEXP();
// 1150 ->ERR %IF %NOT S('=')
if (S(61)) goto L_018A;
goto U_1011;
L_018A:;
// 1151 QUEUE(-25); !'STORE'
QUEUE(-25);
// 1152 %IF INTEGER(QBASE) = REG %START
if (*_imp_INTEGER(QBASE) != REG) goto L_018B;
// 1153 DREG = INTEGER(QBASE+1)
DREG = *_imp_INTEGER(QBASE + 1);
// 1154 DUSE = 0
DUSE = 0;
// 1155 %FINISH
L_018B:;
// 1156 QSTART = QLIM; MODE = 2
QSTART = QLIM;
MODE = 2;
// 1157 GET EXP
GETEXP();
// 1158 QUEUE(-24); !'LOAD'
QUEUE(-24);
// 1159
// 1160 CONDQ:
U_1024:;
// 1161 %IF TAGIF %START
if (!(TAGIF())) goto L_018C;
// 1162 MODE = MODE+4; DREG = DREG-16; !SCARIFY
MODE = MODE + 4;
DREG = DREG - 16;
// 1163 GET COND; ASSEMBLE
GETCOND();
ASSEMBLE();
// 1164 MODE = MODE-4; DREG = DREG+16; !RESTORE
MODE = MODE - 4;
DREG = DREG + 16;
// 1165 QLIM = QSTART; QSTART = TRANSF
QLIM = QSTART;
QSTART = TRANSF;
// 1166 %FINISH
L_018C:;
// 1167 ASSEMBLE
ASSEMBLE();
// 1168 ->SEND
goto U_1023;
// 1169
// 1170 JUMP:
U_1019:;
// 1171 FLAG = TAG2-P; !POSITIVE IF SHORT
FLAG = TAG2 - P;
// 1172 GET EXP
GETEXP();
// 1173 QUEUE(-26); !'JUMP'
QUEUE(-26);
// 1174 ->CONDQ
goto U_1024;
// 1175
// 1176 MINST:
U_1022:;
// 1177 MODE = -1
MODE = -1;
// 1178 GET INST
GETINST();
// 1179 QUEUE(-23); !'PLANT'
QUEUE(-23);
// 1180 ->CONDQ
goto U_1024;
// 1181
// 1182 MACCALL:
U_1021:;
// 1183 QUEUE(VAL); !DEFPOS
QUEUE(VAL);
// 1184 QUEUE(TYPE&1023); !JOKER
QUEUE(TYPE & 1023);
// 1185 QUEUE(0); !(CALLPOS)
QUEUE(0);
// 1186 QUEUE(STARTPOS)
QUEUE(STARTPOS);
// 1187 QUEUE(MP)
QUEUE(MP);
// 1188 %CYCLE
L_018D:;
// 1189 %EXIT %IF CHAR(INTEGER(QBASE)) = NL; !END OF MAC DEF
if (CHAR(*_imp_INTEGER(QBASE)) != 10) goto L_018E;
goto L_018F;
L_018E:;
// 1190 I = GETPOS-1; !SAVE CALLPOS
I = GETPOS - 1;
// 1191 GETPOS = INTEGER(QBASE); GET SYM
GETPOS = *_imp_INTEGER(QBASE);
GETSYM();
// 1192 !!%MONITOR 24 %IF %NOT TAG
// 1193 TYPE = 0; VAL = 0
TYPE = 0;
VAL = 0;
// 1194 SCAN ARG
SCANARG();
// 1195 GET SYM %IF SYM = ','
if (SYM != 44) goto L_0190;
GETSYM();
L_0190:;
// 1196 INTEGER(QBASE) = GETPOS-1; !UPDATE DEFPOS
*_imp_INTEGER(QBASE) = GETPOS - 1;
// 1197 GETPOS = I; GET SYM; !RESTORE CALLPOS
GETPOS = I;
GETSYM();
// 1198 SCAN ARG
SCANARG();
// 1199 GET SYM %IF SYM = ','
if (SYM != 44) goto L_0191;
GETSYM();
L_0191:;
// 1200 QUEUE(TAG1); QUEUE(TAG2)
QUEUE(TAG1);
QUEUE(TAG2);
// 1201 QUEUE(TYPE); QUEUE(VAL)
QUEUE(TYPE);
QUEUE(VAL);
// 1202 %REPEAT
goto L_018D;
L_018F:;
// 1203 GET SYM %IF SYM = ' '
if (SYM != 32) goto L_0192;
GETSYM();
L_0192:;
// 1204 %IF TAGIF %START
if (!(TAGIF())) goto L_0193;
// 1205 GET COND; QUEUE(-18); ASSEMBLE
GETCOND();
QUEUE(-18);
ASSEMBLE();
// 1206 QLIM = QSTART
QLIM = QSTART;
// 1207 INTEGER(QBASE+1) = INTEGER(QBASE+1)+16_8000
*_imp_INTEGER(QBASE + 1) = *_imp_INTEGER(QBASE + 1) + 32768;
// 1208 %FINISH
L_0193:;
// 1209 QUEUE(0)
QUEUE(0);
// 1210 MP = QBASE; STARTPOS = QLIM<<1
MP = QBASE;
STARTPOS = QLIM << 1;
// 1211 INTEGER(MP) = INTEGER(MP)+1
*_imp_INTEGER(MP) = *_imp_INTEGER(MP) + 1;
// 1212 INTEGER(MP+2) = GETPOS-1
*_imp_INTEGER(MP + 2) = GETPOS - 1;
// 1213 PRINT LINE %IF PRINTPOS # 0 %AND LIST&2 # 0
if (PRINTPOS == 0) goto L_0194;
if (LIST & 2 == 0) goto L_0194;
PRINTLINE();
L_0194:;
// 1214 ->READ
goto U_100E;
// 1215
// 1216 !CODING OF JUMPS: 1000 (SINGLE INST), 2000 (MAIN IF)
// 1217 ! 4000 (ELSE), 6000 (IF AFTER ELSE)
// 1218
// 1219 IFC:
U_101A:;
// 1220 GET COND; QUEUE(-15); ASSEMBLE
GETCOND();
QUEUE(-15);
ASSEMBLE();
// 1221 ->SEND
goto U_1023;
// 1222
// 1223 ELSE:
U_101B:;
// 1224 ->CERR %IF INTEGER(NP)&16_2000 = 0
if (*_imp_INTEGER(NP) & 8192 != 0) goto L_0195;
goto U_1025;
L_0195:;
// 1225 QUEUE(0); QUEUE(0)
QUEUE(0);
QUEUE(0);
// 1226 QUEUE(-16); ASSEMBLE
QUEUE(-16);
ASSEMBLE();
// 1227 ATYPE = -1; CREG = -1
ATYPE = -1;
CREG = -1;
// 1228 %IF TAGIF %START
if (!(TAGIF())) goto L_0196;
// 1229 GET COND; QUEUE(-17); ASSEMBLE
GETCOND();
QUEUE(-17);
ASSEMBLE();
// 1230 %FINISH
L_0196:;
// 1231 ->SEND
goto U_1023;
// 1232
// 1233 FINISH:
U_101C:;
// 1234 ->CERR %IF INTEGER(NP)&16_6000 = 0
if (*_imp_INTEGER(NP) & 24576 != 0) goto L_0197;
goto U_1025;
L_0197:;
// 1235 I = LOC
I = LOC;
// 1236 %WHILE INTEGER(NP)&16_4000 # 0 %CYCLE
L_0198:;
if (*_imp_INTEGER(NP) & 16384 == 0) goto L_0199;
// 1237 %IF INTEGER(NP)&16_2000 # 0 %START; !IF AFTER ELSE
if (*_imp_INTEGER(NP) & 8192 == 0) goto L_019A;
// 1238 SET LAB(I)
SETLAB(I);
// 1239 %finish %ELSE %START
goto L_019B;
L_019A:;
// 1240 SET LAB(LOC)
SETLAB(LOC);
// 1241 I = VAL+1
I = VAL + 1;
// 1242 %FINISH
L_019B:;
// 1243 %REPEAT
goto L_0198;
L_0199:;
// 1244 SET LAB(I)
SETLAB(I);
// 1245 ->SEND
goto U_1023;
// 1246
// 1247 WHILE:
U_101D:;
// 1248 I = LOC; ATYPE = -1; CREG = -1
I = LOC;
ATYPE = -1;
CREG = -1;
// 1249 GET COND; QUEUE(-13); ASSEMBLE
GETCOND();
QUEUE(-13);
ASSEMBLE();
// 1250 NEST(I); NEST(1)
NEST(I);
NEST(1);
// 1251 ->SEND
goto U_1023;
// 1252
// 1253 CYCLE:
U_101E:;
// 1254 NEST(LOC); NEST(1)
NEST(LOC);
NEST(1);
// 1255 ->SEND
goto U_1023;
// 1256
// 1257 REPEAT:
U_101F:;
// 1258 ->CERR %IF INTEGER(NP) # 1
if (*_imp_INTEGER(NP) == 1) goto L_019C;
goto U_1025;
L_019C:;
// 1259 QUEUE(LOCTYPE); QUEUE(INTEGER(NP+1))
QUEUE(LOCTYPE);
QUEUE(*_imp_INTEGER(NP + 1));
// 1260 NP = NP+2
NP = NP + 2;
// 1261 QUEUE(-26); !'JUMP'
QUEUE(-26);
// 1262 FLAG = -1
FLAG = -1;
// 1263 ->CONDQ
goto U_1024;
// 1264
// 1265 CERR:
U_1025:;
// 1266 FAULT('C')
FAULT(67);
// 1267 ->LEND
goto U_1015;
// 1268
// 1269 SEND:
U_1023:;
// 1270 SET LAB(LOC) %IF INTEGER(NP)&16_1000 # 0
if (*_imp_INTEGER(NP) & 4096 == 0) goto L_019D;
SETLAB(LOC);
L_019D:;
// 1271 ->LEND %IF SYM = NL
if (SYM != 10) goto L_019E;
goto U_1015;
L_019E:;
// 1272 ->NEXT %IF S(';')
if (!(S(59))) goto L_019F;
goto U_100F;
L_019F:;
// 1273
// 1274 ERR:FSYM = 'F'; FAULTPOS = GETPOS-1
U_1011:;
FSYM = 70;
FAULTPOS = GETPOS - 1;
// 1275 PRINTPOS = STARTPOS
PRINTPOS = STARTPOS;
// 1276
// 1277 LEND:
U_1015:;
// 1278 ->READ %IF SKIP # 0 %AND LIST&4 = 0
if (SKIP == 0) goto L_01A0;
if (LIST & 4 != 0) goto L_01A0;
goto U_100E;
L_01A0:;
// 1279 ->READ %IF FSYM = ' ' %AND CHARS = 0 %AND %C
if (FSYM != 32) goto L_01A1;
if (CHARS != 0) goto L_01A1;
if (PRINTPOS == 0) goto L_01A2;
if (MP == 0) goto L_01A1;
if (LIST & 2 != 0) goto L_01A1;
L_01A2:;
goto U_100E;
L_01A1:;
// 1280+ (PRINTPOS = 0 %OR (MP#0 %AND LIST&2=0))
// 1281 PRINT LINE
PRINTLINE();
// 1282 ->READ
goto U_100E;
// 1283
// 1284 ASSIF:
U_1012:;
// 1285 ASSCOND = ASSCOND<<1
ASSCOND = ASSCOND << 1;
// 1286 ->LEND %IF SKIP # 0
if (SKIP == 0) goto L_01A3;
goto U_1015;
L_01A3:;
// 1287 A1: GET COND; ASSEMBLE
U_1026:;
GETCOND();
ASSEMBLE();
// 1288 SKIP = ASSCOND %IF COND # 0
if (COND == 0) goto L_01A4;
SKIP = ASSCOND;
L_01A4:;
// 1289 PRINT LINE %IF PRINTPOS # 0
if (PRINTPOS == 0) goto L_01A5;
PRINTLINE();
L_01A5:;
// 1290 ->LEND
goto U_1015;
// 1291
// 1292 ASSELSE:
U_1013:;
// 1293 %IF SKIP = 0 %START
if (SKIP != 0) goto L_01A6;
// 1294 ->CERR %IF ASSCOND&1 # 0
if (ASSCOND & 1 == 0) goto L_01A7;
goto U_1025;
L_01A7:;
// 1295 SKIP = ASSCOND
SKIP = ASSCOND;
// 1296 %finish %ELSE %START
goto L_01A8;
L_01A6:;
// 1297 ->LEND %IF SKIP # ASSCOND
if (SKIP == ASSCOND) goto L_01A9;
goto U_1015;
L_01A9:;
// 1298 SKIP = 0
SKIP = 0;
// 1299 ->A1 %IF TAGIF
if (!(TAGIF())) goto L_01AA;
goto U_1026;
L_01AA:;
// 1300 %FINISH
L_01A8:;
// 1301 ASSCOND = ASSCOND+1
ASSCOND = ASSCOND + 1;
// 1302 ->LEND
goto U_1015;
// 1303
// 1304 ASSFIN:
U_1014:;
// 1305 ->CERR %IF ASSCOND = 1
if (ASSCOND != 1) goto L_01AB;
goto U_1025;
L_01AB:;
// 1306 ASSCOND = ASSCOND>>1
ASSCOND = (unsigned int)ASSCOND >> 1;
// 1307 SKIP = 0 %IF SKIP>>1 = ASSCOND
if ((unsigned int)SKIP >> 1 != ASSCOND) goto L_01AC;
SKIP = 0;
L_01AC:;
// 1308 ->LEND
goto U_1015;
// 1309
// 1310 DEFINE:
U_1000:;
// 1311 FAULT('C') %IF NP # STORELIM
if (NP == STORELIM) goto L_01AD;
FAULT(67);
L_01AD:;
// 1312 I = TAG1
I = TAG1;
// 1313 %CYCLE
L_01AE:;
// 1314 ->ERR %IF %NOT (TAG %AND S('='))
if (!(TAG())) goto L_01AF;
if (S(61)) goto L_01B0;
L_01AF:;
goto U_1011;
L_01B0:;
// 1315 J = TAG1; K = TAG2
J = TAG1;
K = TAG2;
// 1316 %IF TAG %START
if (!(TAG())) goto L_01B1;
// 1317 TYPE = UMASK; LOOKUP(0)
TYPE = UMASK;
LOOKUP(0);
// 1318 %IF TYPE&OPMASK # 0 %START
if (TYPE & OPMASK == 0) goto L_01B2;
// 1319 GET INST
GETINST();
// 1320 %finish %ELSE %START
goto L_01B3;
L_01B2:;
// 1321 PEND = -1; GET EXP
PEND = -1;
GETEXP();
// 1322 %FINISH
L_01B3:;
// 1323 %finish %ELSE GET EXP
goto L_01B4;
L_01B1:;
GETEXP();
L_01B4:;
// 1324 ASSEMBLE
ASSEMBLE();
// 1325 TAG1 = J; TAG2 = K
TAG1 = J;
TAG2 = K;
// 1326 %IF I=DEF %THEN LOOKUP(3) %ELSE LOOKUP(2)
if (I != DEF) goto L_01B5;
LOOKUP(3);
goto L_01B6;
L_01B5:;
LOOKUP(2);
L_01B6:;
// 1327 %EXIT %UNLESS S(',')
if (S(44)) goto L_01B7;
goto L_01B8;
L_01B7:;
// 1328 QLIM = QSTART
QLIM = QSTART;
// 1329 %REPEAT
goto L_01AE;
L_01B8:;
// 1330 ->SEND
goto U_1023;
// 1331
// 1332 NEWPAGE:
U_1010:;
// 1333 DO NEWLINE %WHILE LINES # 0
L_01B9:;
if (LINES == 0) goto L_01BA;
DONEWLINE();
goto L_01B9;
L_01BA:;
// 1334 ->LEND
goto U_1015;
// 1335
// 1336 LISTC:
U_1016:;
// 1337 GET EXP; ASSEMBLE
GETEXP();
ASSEMBLE();
// 1338 LIST = VAL
LIST = VAL;
// 1339 ->SEND
goto U_1023;
// 1340
// 1341 TEMP:
U_1001:;
// 1342 I = 0
I = 0;
// 1343 %IF SYM # NL %START
if (SYM == 10) goto L_01BB;
// 1344 %CYCLE
L_01BC:;
// 1345 GET EXP
GETEXP();
// 1346 FAULT('I') %IF TYPE # REG
if (TYPE == REG) goto L_01BD;
FAULT(73);
L_01BD:;
// 1347 I = I!1<<VAL
I = I | 1 << VAL;
// 1348 %EXIT %UNLESS S(',')
if (S(44)) goto L_01BE;
goto L_01BF;
L_01BE:;
// 1349 %REPEAT
goto L_01BC;
L_01BF:;
// 1350 %FINISH
L_01BB:;
// 1351 TEMPS = I
TEMPS = I;
// 1352 SET ACC
SETACC();
// 1353 ->SEND
goto U_1023;
// 1354
// 1355 LOCC:
U_1002:;
// 1356 I = TAG1
I = TAG1;
// 1357 GET EXP; ASSEMBLE
GETEXP();
ASSEMBLE();
// 1358 %IF TYPE&16_FF9F = 0 %START
if (TYPE & 65439 != 0) goto L_01C0;
// 1359 LOCTYPE = TYPE&RELMASK+MEMMASK; LOC = VAL
LOCTYPE = (TYPE & RELMASK) + MEMMASK;
LOC = VAL;
// 1360 PUT WORD(VAL-1) %AND CONTROL=16_30 %IF PASS > 0
if (PASS <= 0) goto L_01C1;
PUTWORD(VAL - 1);
CONTROL = 48;
L_01C1:;
// 1361 %finish %ELSE FAULT('I')
goto L_01C2;
L_01C0:;
FAULT(73);
L_01C2:;
// 1362 ->SEND
goto U_1023;
// 1363
// 1364 SAVC:
U_1017:;
// 1365 GET EXP; ASSEMBLE
GETEXP();
ASSEMBLE();
// 1366 SAVE = VAL
SAVE = VAL;
// 1367 ->SEND
goto U_1023;
// 1368
// 1369 MACDEF:
U_1003:;
// 1370 ->CERR %IF MP # 0
if (MP == 0) goto L_01C3;
goto U_1025;
L_01C3:;
// 1371 ->ERR %IF %NOT TAG
if (TAG()) goto L_01C4;
goto U_1011;
L_01C4:;
// 1372 J = TAG1; K = TAG2
J = TAG1;
K = TAG2;
// 1373 I = GETPOS-1
I = GETPOS - 1;
// 1374 %IF SYM # NL %START
if (SYM == 10) goto L_01C5;
// 1375 %CYCLE
L_01C6:;
// 1376 ->ERR %IF %NOT TAG
if (TAG()) goto L_01C7;
goto U_1011;
L_01C7:;
// 1377 SCAN ARG
SCANARG();
// 1378 %EXIT %IF %NOT S(',')
if (S(44)) goto L_01C8;
goto L_01C9;
L_01C8:;
// 1379 %REPEAT
goto L_01C6;
L_01C9:;
// 1380 %FINISH
L_01C5:;
// 1381 ->ERR %IF SYM # NL
if (SYM == 10) goto L_01CA;
goto U_1011;
L_01CA:;
// 1382 TAG1 = J; TAG2 = K
TAG1 = J;
TAG2 = K;
// 1383 TYPE = MACRO; VAL = I
TYPE = MACRO;
VAL = I;
// 1384 LOOKUP(3)
LOOKUP(3);
// 1385 %CYCLE
L_01CB:;
// 1386 PRINT LINE
PRINTLINE();
// 1387 %EXIT %IF S('$') %AND TAG %AND TAG1 = END
if (!(S(36))) goto L_01CC;
if (!(TAG())) goto L_01CC;
if (TAG1 != END) goto L_01CC;
goto L_01CD;
L_01CC:;
// 1388 STARTPOS = PUTPOS
STARTPOS = PUTPOS;
// 1389 STARTPOS = PSEUDOLIM+1 %IF PSEUDOLIM # 0
if (PSEUDOLIM == 0) goto L_01CE;
STARTPOS = PSEUDOLIM + 1;
L_01CE:;
// 1390 READ LINE
READLINE();
// 1391 %REPEAT
goto L_01CB;
L_01CD:;
// 1392 PUTPOS = STARTPOS; PUT CHAR(0)
PUTPOS = STARTPOS;
PUTCHAR(0);
// 1393 STARTPOS = PUTPOS
STARTPOS = PUTPOS;
// 1394 MACLIM = STARTPOS
MACLIM = STARTPOS;
// 1395 ->LEND
goto U_1015;
// 1396
// 1397 %ROUTINE BNEST
void BNEST(void) {
// 1398 BP = BP+4; !!%MONITOR 23 %IF BP-NP >= 0
BP = BP + 4;
// 1399 INTEGER(BP-3) = SAVE; INTEGER(BP-2) = TEMPS
*_imp_INTEGER(BP - 3) = SAVE;
*_imp_INTEGER(BP - 2) = TEMPS;
// 1400 INTEGER(BP-1) = MACLIM; INTEGER(BP) = DEFMIN
*_imp_INTEGER(BP - 1) = MACLIM;
*_imp_INTEGER(BP) = DEFMIN;
// 1401 %END
return;
} /* end of BNEST */
// 1402
// 1403 BEGIN:
U_1004:;
// 1404 BNEST
BNEST();
// 1405 ->NEWPAGE %IF SYM # NL
if (SYM == 10) goto L_01CF;
goto U_1010;
L_01CF:;
// 1406 ->LEND
goto U_1015;
// 1407
// 1408 BEND:
U_1005:;
// 1409 FAULT('C') %IF NP # STORELIM %OR MP # 0
if (NP != STORELIM) goto L_01D0;
if (MP == 0) goto L_01D1;
L_01D0:;
FAULT(67);
L_01D1:;
// 1410 MP = 0; NP = STORELIM
MP = 0;
NP = STORELIM;
// 1411 %IF BP # LABLIM %START
if (BP == LABLIM) goto L_01D2;
// 1412 SAVE = INTEGER(BP-3); TEMPS = INTEGER(BP-2)
SAVE = *_imp_INTEGER(BP - 3);
TEMPS = *_imp_INTEGER(BP - 2);
// 1413 MACLIM = INTEGER(BP-1); STARTPOS = MACLIM
MACLIM = *_imp_INTEGER(BP - 1);
STARTPOS = MACLIM;
// 1414 DEFMIN = INTEGER(BP)
DEFMIN = *_imp_INTEGER(BP);
// 1415 SET ACC
SETACC();
// 1416 BP = BP-4
BP = BP - 4;
// 1417 ->LEND %IF BP # LABLIM
if (BP == LABLIM) goto L_01D3;
goto U_1015;
L_01D3:;
// 1418 %FINISH
L_01D2:;
// 1419 CLOSE INPUT; SELECT INPUT(MAIN)
_imp_CLOSEINPUT();
_imp_SELECTINPUT(MAIN);
// 1420 BNEST
BNEST();
// 1421 LIST = 5
LIST = 5;
// 1422 PASS = PASS+1
PASS = PASS + 1;
// 1423 ->DO PASS %IF PASS # 2
if (PASS == 2) goto L_01D4;
goto U_100D;
L_01D4:;
// 1424
// 1425 PUT WORD(CHECK!!16_0100); CONTROL = 16_30
PUTWORD(CHECK ^ 256);
CONTROL = 48;
// 1426 PUT WORD(16_0100)
PUTWORD(256);
// 1427 SELECT OUTPUT(BIN); PRINT CH(16_60); SELECT OUTPUT(LIS)
_imp_SELECTOUTPUT(BIN);
_imp_PRINTCH(96);
_imp_SELECTOUTPUT(LIS);
// 1428 FAULT('$')
FAULT(36);
// 1429 PRINT LOC; PRINT LINE
PRINTLOC();
PRINTLINE();
// 1430 LINES = 60 %IF OUTDEV = 1
if (_imp_OUTDEV() != 1) goto L_01D5;
LINES = 60;
L_01D5:;
// 1431 DO NEWLINE %WHILE LINES # 0
L_01D6:;
if (LINES == 0) goto L_01D7;
DONEWLINE();
goto L_01D6;
L_01D7:;
// 1432
// 1433 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}