#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 {----------------------------------------}
// 3 { }
// 4 { MOS Technology M6500 Series Assembler. }
// 5 { }
// 6 { Copyright M.R.King, 27/3/1984. }
// 7 { All rights reserved. }
// 8 { }
// 9 {----------------------------------------}
// 10
// 11 %own %string(255) copyright = %c
static _imp_string255 COPYRIGHT =
_imp_str_init("M6500 Series Assembler. Copyright M.R.King, 27/3/1984. All rights reserved.");
// 12+ "M6500 Series Assembler. Copyright M.R.King, 27/3/1984. All rights reserved."
// 13
// 14 %constant %integer names = 255,
// 15+ line width = 78,
// 16+ lines on page = 66,
// 17+ max line = 512,
// 18+ insert limit = 10,
// 19+ xentries = 1024
// 20 %constinteger ihash=59
// 21 %constant %byte %integer %array hilink(0:58) = %c
const unsigned char HILINK[59] = {13, 28, 0, 0, 36, 0, 29, 50, 0, 25, 26, 59, 1, 16, 27, 14, 64, 23, 4, 6,
42, 11, 41, 15, 35, 0, 0, 34, 0, 30, 32, 0, 0, 31, 8, 3, 5, 0, 43, 0,
51, 60, 48, 12, 68, 0, 49, 19, 20, 0, 9, 67, 7, 45, 2, 22, 0, 0, 47};
// 22+ 13, 28, 0, 0, 36, 0, 29, 50, 0, 25, 26, 59,
// 23+ 1, 16, 27, 14, 64, 23, 4, 6, 42, 11, 41, 15,
// 24+ 35, 0, 0, 34, 0, 30, 32, 0, 0, 31, 8, 3,
// 25+ 5, 0, 43, 0, 51, 60, 48, 12, 68, 0, 49, 19,
// 26+ 20, 0, 9, 67, 7, 45, 2, 22, 0, 0, 47
// 27 %constant %byte %integer %array ilink(1:69) = %c
const unsigned char ILINK[69] = {0, 58, 10, 24, 40, 0, 17, 0, 18, 69, 52, 33, 0, 0, 0, 0, 53, 0,
21, 0, 65, 63, 0, 0, 0, 0, 0, 0, 0, 38, 0, 37, 46, 54, 0, 0,
39, 0, 0, 0, 56, 0, 44, 0, 57, 0, 55, 0, 0, 61, 0, 66, 0, 0,
0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0};
// 28+ 0, 58, 10, 24, 40, 0, 17, 0, 18, 69, 52, 33,
// 29+ 0, 0, 0, 0, 53, 0, 21, 0, 65, 63, 0, 0,
// 30+ 0, 0, 0, 0, 0, 38, 0, 37, 46, 54, 0, 0,
// 31+ 39, 0, 0, 0, 56, 0, 44, 0, 57, 0, 55, 0,
// 32+ 0, 61, 0, 66, 0, 0, 0, 0, 0, 0, 0, 62,
// 33+ 0, 0, 0, 0, 0, 0, 0, 0, 0
// 34 %constant %string(4) %array instr(1:69) = %c
const _imp_string4 INSTR[69] = {
_imp_str_init("LDA"), _imp_str_init("STA"), _imp_str_init("LDX"), _imp_str_init("STX"), _imp_str_init("LDY"),
_imp_str_init("STY"), _imp_str_init("JSR"), _imp_str_init("BCC"), _imp_str_init("BCS"), _imp_str_init("BNE"),
_imp_str_init("BEQ"), _imp_str_init("BVC"), _imp_str_init("BVS"), _imp_str_init("BPL"), _imp_str_init("BMI"),
_imp_str_init("JMP"), _imp_str_init("RTS"), _imp_str_init("CMP"), _imp_str_init("CPX"), _imp_str_init("CPY"),
_imp_str_init("DEC"), _imp_str_init("INC"), _imp_str_init("INX"), _imp_str_init("INY"), _imp_str_init("DEX"),
_imp_str_init("DEY"), _imp_str_init("AND"), _imp_str_init("ORA"), _imp_str_init("EOR"), _imp_str_init("BIT"),
_imp_str_init("LSR"), _imp_str_init("ROR"), _imp_str_init("ASL"), _imp_str_init("LSL"), _imp_str_init("ROL"),
_imp_str_init("SBC"), _imp_str_init("ADC"), _imp_str_init("TAX"), _imp_str_init("TAY"), _imp_str_init("TYA"),
_imp_str_init("TSX"), _imp_str_init("TXA"), _imp_str_init("TXS"), _imp_str_init("PHA"), _imp_str_init("PHP"),
_imp_str_init("PLA"), _imp_str_init("PLP"), _imp_str_init("RTI"), _imp_str_init("BRK"), _imp_str_init("NOP"),
_imp_str_init("CLV"), _imp_str_init("CLC"), _imp_str_init("SEC"), _imp_str_init("CLI"), _imp_str_init("SEI"),
_imp_str_init("CLD"), _imp_str_init("SED"), _imp_str_init("FCB"), _imp_str_init("FDB"), _imp_str_init("EQU"),
_imp_str_init("ORG"), _imp_str_init("RMB"), _imp_str_init("FCC"), _imp_str_init("NAM"), _imp_str_init("OPT"),
_imp_str_init("PAGE"), _imp_str_init("SPC"), _imp_str_init("MON"), _imp_str_init("END")};
// 35+ "LDA","STA","LDX","STX","LDY","STY","JSR","BCC","BCS",
// 36+ "BNE","BEQ","BVC","BVS","BPL","BMI","JMP","RTS","CMP",
// 37+ "CPX","CPY","DEC","INC","INX","INY","DEX","DEY","AND",
// 38+ "ORA","EOR","BIT","LSR","ROR","ASL","LSL","ROL","SBC",
// 39+ "ADC","TAX","TAY","TYA","TSX","TXA","TXS","PHA","PHP",
// 40+ "PLA","PLP","RTI","BRK","NOP","CLV","CLC","SEC","CLI",
// 41+ "SEI","CLD","SED","FCB","FDB","EQU","ORG","RMB","FCC",
// 42+ "NAM","OPT","PAGE","SPC","MON","END"
// 43 %constant %byte %integer %array icode(1:69) = %c
const unsigned char ICODE[69] = {
161, 129, 162, 134, 160, 132, 32, 144, 176, 208, 240, 80, 112, 16, 48, 76, 96, 193, 224, 192, 198, 230, 232,
200, 202, 136, 33, 1, 65, 32, 70, 102, 6, 6, 38, 225, 97, 170, 168, 152, 186, 138, 154, 72, 8, 104,
40, 64, 0, 234, 184, 24, 56, 88, 120, 216, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
// 44+ 16_A1,16_81,16_A2,16_86,16_A0,16_84,16_20,16_90,16_B0,
// 45+ 16_D0,16_F0,16_50,16_70,16_10,16_30,16_4C,16_60,16_C1,
// 46+ 16_E0,16_C0,16_C6,16_E6,16_E8,16_C8,16_CA,16_88,16_21,
// 47+ 16_01,16_41,16_20,16_46,16_66,16_06,16_06,16_26,16_E1,
// 48+ 16_61,16_AA,16_A8,16_98,16_BA,16_8A,16_9A,16_48,16_08,
// 49+ 16_68,16_28,16_40,16_00,16_EA,16_B8,16_18,16_38,16_58,
// 50+ 16_78,16_D8,16_F8,16_00,16_00,16_00,16_00,16_00,16_00,
// 51+ 16_00,16_00,16_00,16_00,16_00,16_00
// 52 %constant %byte %integer %array itype(1:69) = %c
const unsigned char ITYPE[69] = {5, 6, 11, 13, 12, 14, 4, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1, 5,
9, 9, 8, 8, 1, 1, 1, 1, 5, 5, 5, 10, 7, 7, 7, 7, 7, 5,
5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 25};
// 53+ 5, 6, 11, 13, 12, 14, 4, 2, 2, 2, 2, 2, 2, 2, 2,
// 54+ 3, 1, 5, 9, 9, 8, 8, 1, 1, 1, 1, 5, 5, 5, 10,
// 55+ 7, 7, 7, 7, 7, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1,
// 56+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 16, 17,
// 57+ 18, 19, 20, 21, 22, 23, 24, 25, 25
// 58 %constant %integer %array icycles(1:69) = %c
const int ICYCLES[69] = {2, 2, 2, 3, 2, 3, 6, 4, 4, 4, 4, 4, 4, 4, 4, 3, 6, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4,
4, 6, 7, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
// 59+ 2, 2, 2, 3, 2, 3, 6, 4, 4, 4, 4, 4, 4, 4, 4,
// 60+ 3, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
// 61+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
// 62+ 4, 4, 6, 7, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
// 63+ 0, 0, 0, 0, 0, 0, 0, 0, 0
// 64 %constant %integer no options = 51
// 65 %constant %string(10) %array option text(1:no options) = %c
const _imp_string10 OPTIONTEXT[51] = {
_imp_str_init("BLANK"), _imp_str_init("B"), _imp_str_init("NOBLANK"), _imp_str_init("NOB"),
_imp_str_init("CYCLE"), _imp_str_init("C"), _imp_str_init("NOCYCLE"), _imp_str_init("NOC"),
_imp_str_init("DB8"), _imp_str_init("DB10"), _imp_str_init("DB16"), _imp_str_init("ERROR"),
_imp_str_init("E"), _imp_str_init("SERROR"), _imp_str_init("SER"), _imp_str_init("NOERROR"),
_imp_str_init("NOE"), _imp_str_init("FULL"), _imp_str_init("F"), _imp_str_init("NOFULL"),
_imp_str_init("NOF"), _imp_str_init("GENERATE"), _imp_str_init("G"), _imp_str_init("NOGENERATE"),
_imp_str_init("NOG"), _imp_str_init("LIST"), _imp_str_init("L"), _imp_str_init("SLIST"),
_imp_str_init("SLIS"), _imp_str_init("NOLIST"), _imp_str_init("NOL"), _imp_str_init("PAGE"),
_imp_str_init("P"), _imp_str_init("NOPAGE"), _imp_str_init("NOP"), _imp_str_init("SYMBOL"),
_imp_str_init("S"), _imp_str_init("NOSYMBOL"), _imp_str_init("NOS"), _imp_str_init("TAB"),
_imp_str_init("T"), _imp_str_init("NOTAB"), _imp_str_init("NOT"), _imp_str_init("WRAP"),
_imp_str_init("W"), _imp_str_init("NOWRAP"), _imp_str_init("NOW"), _imp_str_init("XREF"),
_imp_str_init("X"), _imp_str_init("NOXREF"), _imp_str_init("NOX")};
auto _imp_string255 LC(_imp_string255 SOURCE);
auto int MATCHES(_imp_string255 SOURCE, _imp_string255 PATTERN, int MIN, int *I);
auto int ISTYPED(_imp_string255 SOURCE, _imp_string255 * FILE);
auto void READLINE(void);
auto void NEXTCHAR(void);
auto int MOREITEMS(void);
auto int GETNAME(int *NID);
auto int GETOPTION(int *OPT);
auto int GETINSTR(int *IID);
auto int GETOPD(int *OPD);
auto int GETTERM(int *OPD);
auto int GETEXPRESSION(int *OPD);
auto void EVALUATE(int *A, int B, unsigned char OP);
auto int GETCONST(int *CVAL);
auto void OUTSYMBOL(unsigned char CHAR);
auto void OUTTAG(int *I, int *J, int COL);
auto void INSTROUT(int OP, int OPD, int B, int CYC);
auto void CLOSE(void);
auto void FAULT(_imp_string63 S);
auto void NLINE(int N);
auto void BACKNUMBER(int N);
auto void PRINTNUMBER(int N, int D);
auto int INDEXED(unsigned char REG);
auto int ACC(unsigned char ACCID);
auto void SQS(int L, int R);
auto void IMMEDIATE(unsigned char ORDER, unsigned char MCYCLES);
auto void OPERAND(unsigned char REG, unsigned char NREG, unsigned char ORDER, unsigned char MCYCLES);
auto void STORE(unsigned char REG, unsigned char NREG, unsigned char ORDER, unsigned char MCYCLES);
// 66+ "BLANK", "B", "NOBLANK", "NOB", "CYCLE", "C", "NOCYCLE", "NOC",
// 67+ "DB8", "DB10", "DB16", "ERROR", "E", "SERROR", "SER", "NOERROR",
// 68+ "NOE", "FULL", "F", "NOFULL", "NOF", "GENERATE", "G", "NOGENERATE",
// 69+ "NOG", "LIST", "L", "SLIST", "SLIS", "NOLIST", "NOL", "PAGE", "P",
// 70+ "NOPAGE", "NOP", "SYMBOL", "S", "NOSYMBOL", "NOS", "TAB", "T",
// 71+ "NOTAB", "NOT", "WRAP", "W", "NOWRAP", "NOW", "XREF", "X", "NOXREF",
// 72+ "NOX"
// 73 %string(255) %function %spec lc(%string(255) source)
// 74 %predicate %spec matches(%string(255) source, pattern,
// 75+ %integer min, %integer %name i)
// 76 %predicate %spec is typed(%string(255) source, %string(255) %name file)
// 77 %routine %spec read line
// 78 %routine %spec next char
// 79 %predicate %spec more items
// 80 %integerfn %spec get name(%integername nid)
// 81 %predicate %spec get option(%integer %name opt)
// 82 %predicate %spec get instr(%integername id)
// 83 %integerfn %spec get opd(%integername opd)
// 84 %integer %function %spec get term(%integer %name opd)
// 85 %integer %function %spec get expression(%integer %name opd)
// 86 %routine %spec evaluate(%integer %name a, %integer b, %byte %integer op)
// 87 %integerfn %spec get const(%integername cval)
// 88 %routine %spec out symbol(%byte %integer char)
// 89 %routine %spec out tag(%integer %name i, j, %integer col)
// 90 %routine %spec instr out(%integer op,opd,b, cyc)
// 91 %routine %spec close
// 92 %routine %spec fault(%string(63) s)
// 93 %routine %spec nline(%integer n)
// 94 %routine %spec back number(%integer n)
// 95 %routine %spec print number(%integer n,d)
// 96 %predicate %spec indexed(%byte %integer reg)
// 97 %predicate %spec acc(%byte %integer acc id)
// 98 %routine %spec sqs(%integer l, r)
// 99 %routine %spec immediate(%byte %integer order, mcycles)
// 100 %routine %spec operand(%byte %integer reg, nreg, order, mcycles)
// 101 %routine %spec store(%byte %integer reg, nreg, order, mcycles)
// 102 %byte %integer %array buffer(1:16)
unsigned char BUFFER[16];
// 103 {%byte}%integer %array line(1:max line+1)
int LINE[512 + 1 - 1 + 1];
// 104 %integer ca, pass, faults, lp, opd, iid, lid, ln, nnames, i, j, k, opt,
int CA;
int PASS;
int FAULTS;
int LP;
int OPD;
int IID;
int LID;
int LN;
int NNAMES;
int I;
int J;
int K;
int OPT;
int ORDER;
int CONSISTENT;
int LASTCONSISTENT;
int HEADSET;
int PRESCHAR;
int DELIM;
int DRAD;
int BCHAR;
int PFLAG;
int SFLAG;
int GFLAG;
int EFLAG;
int LFLAG;
int CFLAG;
int WFLAG;
int TFLAG;
int XFLAG;
int CONT;
int SP1;
int SP2;
int SP3;
int OLDCA;
int MCYCLES;
int NONDENSE;
int REGFAULT;
int L;
int XXENTRIES;
int FFLAG;
int OSTARTED;
int BUFFERCA;
int BP;
int LOOKAHEAD;
// 105+ order, consistent, last consistent, headset, pres char, delim, drad,
// 106+ bchar, pflag, sflag, gflag, eflag, lflag, cflag, wflag, tflag, xflag,
// 107+ cont, sp1, sp2, sp3, old ca, mcycles, non dense, reg fault,
// 108+ l, xxentries, fflag, ostarted, buffer ca, bp, look ahead
// 109 %constant %integer nhash=67
// 110 %byteinteger %array hnlink(0:nhash-1)
unsigned char HNLINK[67 - 1 + 1];
// 111 %string(6)%array name(1:names)
_imp_string6 NAME[255];
// 112 %integer%array nval(1:names)
int NVAL[255];
// 113 %byteinteger%array nass(1:names)
unsigned char NASS[255];
// 114 %byteinteger%array nlink(1:names)
unsigned char NLINK[255];
// 115 %integer %array xhead(1:names)
int XHEAD[255];
// 116 %integer %array xentry, xlink(1:xentries)
int XENTRY[1024];
int XLINK[1024];
// 117 %switch option action(-1:no options)
int OPTIONACTION_index;
int OPTIONACTION_line;
char *OPTIONACTION_file;
static const void *OPTIONACTION[53] = {
&&case_OPTIONACTION_M1, &&case_OPTIONACTION_0, &&case_OPTIONACTION_1, &&case_OPTIONACTION_2,
&&case_OPTIONACTION_3, &&case_OPTIONACTION_4, &&case_OPTIONACTION_5, &&case_OPTIONACTION_6,
&&case_OPTIONACTION_7, &&case_OPTIONACTION_8, &&case_OPTIONACTION_9, &&case_OPTIONACTION_10,
&&case_OPTIONACTION_11, &&case_OPTIONACTION_12, &&case_OPTIONACTION_13, &&case_OPTIONACTION_14,
&&case_OPTIONACTION_15, &&case_OPTIONACTION_16, &&case_OPTIONACTION_17, &&case_OPTIONACTION_18,
&&case_OPTIONACTION_19, &&case_OPTIONACTION_20, &&case_OPTIONACTION_21, &&case_OPTIONACTION_22,
&&case_OPTIONACTION_23, &&case_OPTIONACTION_24, &&case_OPTIONACTION_25, &&case_OPTIONACTION_26,
&&case_OPTIONACTION_27, &&case_OPTIONACTION_28, &&case_OPTIONACTION_29, &&case_OPTIONACTION_30,
&&case_OPTIONACTION_31, &&case_OPTIONACTION_32, &&case_OPTIONACTION_33, &&case_OPTIONACTION_34,
&&case_OPTIONACTION_35, &&case_OPTIONACTION_36, &&case_OPTIONACTION_37, &&case_OPTIONACTION_38,
&&case_OPTIONACTION_39, &&case_OPTIONACTION_40, &&case_OPTIONACTION_41, &&case_OPTIONACTION_42,
&&case_OPTIONACTION_43, &&case_OPTIONACTION_44, &&case_OPTIONACTION_45, &&case_OPTIONACTION_46,
&&case_OPTIONACTION_47, &&case_OPTIONACTION_48, &&case_OPTIONACTION_49, &&case_OPTIONACTION_50,
&&case_OPTIONACTION_51};
// 118 %switch itype1,itype2(1:25)
int ITYPE1_index;
int ITYPE1_line;
char *ITYPE1_file;
static const void *ITYPE1[25] = {
&&case_ITYPE1_1, &&case_ITYPE1_2, &&case_ITYPE1_3, &&case_ITYPE1_4, &&case_ITYPE1_5,
&&case_ITYPE1_6, &&case_ITYPE1_7, &&case_ITYPE1_8, &&case_ITYPE1_9, &&case_ITYPE1_10,
&&case_ITYPE1_11, &&case_ITYPE1_12, &&case_ITYPE1_13, &&case_ITYPE1_14, &&case_ITYPE1_15,
&&case_ITYPE1_16, &&case_ITYPE1_17, &&case_ITYPE1_18, &&case_ITYPE1_19, &&case_ITYPE1_20,
&&case_ITYPE1_21, &&case_ITYPE1_22, &&case_ITYPE1_23, &&case_ITYPE1_24, &&case_ITYPE1_25};
int ITYPE2_index;
int ITYPE2_line;
char *ITYPE2_file;
static const void *ITYPE2[25] = {
&&case_ITYPE2_1, &&case_ITYPE2_2, &&case_ITYPE2_3, &&case_ITYPE2_4, &&case_ITYPE2_5,
&&case_ITYPE2_6, &&case_ITYPE2_7, &&case_ITYPE2_8, &&case_ITYPE2_9, &&case_ITYPE2_10,
&&case_ITYPE2_11, &&case_ITYPE2_12, &&case_ITYPE2_13, &&case_ITYPE2_14, &&case_ITYPE2_15,
&&case_ITYPE2_16, &&case_ITYPE2_17, &&case_ITYPE2_18, &&case_ITYPE2_19, &&case_ITYPE2_20,
&&case_ITYPE2_21, &&case_ITYPE2_22, &&case_ITYPE2_23, &&case_ITYPE2_24, &&case_ITYPE2_25};
// 119 %string(line width-45) header
_imp_string33 HEADER;
// 120 %string(*) %name file
_imp_string *FILE;
// 121 %string(255) params, source, list, object, dummy
_imp_string255 PARAMS;
_imp_string255 SOURCE;
_imp_string255 LIST;
_imp_string255 OBJECT;
_imp_string255 DUMMY;
// 122
// 123 %on %event 9 %start
if (!_imp_on_event(9)) goto L_0001;
// 124 select output(0)
_imp_SELECTOUTPUT(0);
// 125 print string(event_message{source." does not exist."})
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = _imp_EVENT().MESSAGE /*q*/;
(_imp_string255 *)&tmp;
})
);
// 126 new line
_imp_NEWLINE();
// 127 %stop
_imp_stop(0);
// 128 %finish
L_0001:;
// 129
// 130 ! params = ""
// 131 ! select input(0)
// 132 ! read symbol(i)
// 133 ! params = params.to string(i) %and read symbol(i) %while i#nl
// 134 ! params = lc(params)
// 135 params = lc(cliparam)
_imp_strncpy(/*?*/ &PARAMS, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = LC(*({
__typeof__(_imp_string255) tmp = _imp_CLIPARAM() /*q*/;
(_imp_string255 *)&tmp;
}));
(void *)&tmp;
}),
/*max:*/ 255);
// 136 source = ""
_imp_strncpy(/*?*/ &SOURCE, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 137 list = ".n"
_imp_strncpy(/*?*/ &LIST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal(".n");
(void *)&tmp;
}),
/*max:*/ 255);
// 138 object = ""
_imp_strncpy(/*?*/ &OBJECT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 139 dummy = ""
_imp_strncpy(/*?*/ &DUMMY, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 140 %cycle
L_0002:;
// 141 i = 1
I = 1;
// 142 i = i+1 %while i<=length(params) %and charno(params, i)=' '
L_0003:;
if (I > *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_0004;
if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I) != 32) goto L_0004;
I = I + 1;
goto L_0003;
L_0004:;
// 143 %exit %if i>length(params)
if (I <= *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_0005;
goto L_0006;
L_0005:;
// 144 params = substring(params, i, length(params))
_imp_strncpy(/*?*/ &PARAMS, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I,
*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
(void *)&tmp;
}),
/*max:*/ 255);
// 145 %if charno(params, 1)='/' %start
if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 1) != 47) goto L_0007;
// 146 params = substring(params, 2, length(params))
_imp_strncpy(/*?*/ &PARAMS, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 2,
*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
(void *)&tmp;
}),
/*max:*/ 255);
// 147 %if matches(params, "list", 1, i) %start
if (!(MATCHES(
*({
__typeof__(_imp_string255) tmp = PARAMS /*q*/;
(_imp_string255 *)&tmp;
})
,
_imp_str_literal("list"), 1, /*?*/ &I)))
goto L_0008;
// 148 list = ""
_imp_strncpy(/*?*/ &LIST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 149 file == list
FILE = (_imp_string *)/*?*/ &LIST;
// 150 %finish %else %if matches(params, "object", 1, i) %start
goto L_0009;
L_0008:;
if (!(MATCHES(
*({
__typeof__(_imp_string255) tmp = PARAMS /*q*/;
(_imp_string255 *)&tmp;
})
,
_imp_str_literal("object"), 1, /*?*/ &I)))
goto L_000A;
// 151 object = ""
_imp_strncpy(/*?*/ &OBJECT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 152 file == object
FILE = (_imp_string *)/*?*/ &OBJECT;
// 153 %finish %else %if matches(params, "nolist", 3, i) %start
goto L_0009;
L_000A:;
if (!(MATCHES(
*({
__typeof__(_imp_string255) tmp = PARAMS /*q*/;
(_imp_string255 *)&tmp;
})
,
_imp_str_literal("nolist"), 3, /*?*/ &I)))
goto L_000B;
// 154 list = ".n"
_imp_strncpy(/*?*/ &LIST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal(".n");
(void *)&tmp;
}),
/*max:*/ 255);
// 155 file == dummy
FILE = (_imp_string *)/*?*/ &DUMMY;
// 156 %finish %else %if matches(params, "noobject", 3, i) %start
goto L_0009;
L_000B:;
if (!(MATCHES(
*({
__typeof__(_imp_string255) tmp = PARAMS /*q*/;
(_imp_string255 *)&tmp;
})
,
_imp_str_literal("noobject"), 3, /*?*/ &I)))
goto L_000C;
// 157 object = ".n"
_imp_strncpy(/*?*/ &OBJECT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal(".n");
(void *)&tmp;
}),
/*max:*/ 255);
// 158 file == dummy
FILE = (_imp_string *)/*?*/ &DUMMY;
// 159 %else
goto L_0009;
L_000C:;
// 160 i = 1
I = 1;
// 161 file == dummy
FILE = (_imp_string *)/*?*/ &DUMMY;
// 162 %finish
L_0009:;
// 163 %exit %if i>length(params)
if (I <= *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_000D;
goto L_0006;
L_000D:;
// 164 params = substring(params, i, length(params))
_imp_strncpy(/*?*/ &PARAMS, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I,
*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
(void *)&tmp;
}),
/*max:*/ 255);
// 165 %continue %unless charno(params, 1)='='
if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 1) == 61) goto L_000E;
goto L_000F;
L_000E:;
// 166 %if length(params)>1 %start
if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS) <= 1) goto L_0010;
// 167 params = substring(params, 2, length(params))
_imp_strncpy(/*?*/ &PARAMS, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 2,
*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
(void *)&tmp;
}),
/*max:*/ 255);
// 168 %else
goto L_0011;
L_0010:;
// 169 params = ""
_imp_strncpy(/*?*/ &PARAMS, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 170 %finish
L_0011:;
// 171 %else
goto L_0012;
L_0007:;
// 172 file == source
FILE = (_imp_string *)/*?*/ &SOURCE;
// 173 %finish
L_0012:;
// 174 i = 1
I = 1;
// 175 i = i+1 %while i<=length(params) %and charno(params, i)#' ' %and %c
L_0013:;
if (I > *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_0014;
if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I) == 32) goto L_0014;
if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I) == 47) goto L_0014;
I = I + 1;
goto L_0013;
L_0014:;
// 176+ charno(params, i)#'/'
// 177 file = substring(params, 1, i-1) %if i>1
if (I <= 1) goto L_0015;
*FILE = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, 1, I - 1);
L_0015:;
// 178 %exit %if i>length(params)
if (I <= *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS)) goto L_0016;
goto L_0006;
L_0016:;
// 179 params = substring(params, i, length(params))
_imp_strncpy(/*?*/ &PARAMS, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &PARAMS, I,
*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PARAMS));
(void *)&tmp;
}),
/*max:*/ 255);
// 180 %repeat
L_000F:;
goto L_0002;
L_0006:;
// 181
// 182 %if source="" %start
if (_imp_strcmp((_imp_string *)/*?*/ &SOURCE, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_0017;
// 183 select output(0)
_imp_SELECTOUTPUT(0);
// 184 print string("No source file specified.")
_imp_PRINTSTRING(_imp_str_literal("No source file specified."));
// 185 new line
_imp_NEWLINE();
// 186 %stop
_imp_stop(0);
// 187 %finish
L_0017:;
// 188
// 189 source = source.".asm" %unless is typed(source, params)
if (ISTYPED(
*({
__typeof__(_imp_string255) tmp = SOURCE /*q*/;
(_imp_string255 *)&tmp;
})
,
(_imp_string255 *)/*p*/ /*?*/ &PARAMS))
goto L_0018;
_imp_strncpy(/*?*/ &SOURCE, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &SOURCE, (_imp_string *)/*?*/ _imp_str_literal_ptr(".asm"));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
L_0018:;
// 190
// 191 list = params %if list=""
if (_imp_strcmp((_imp_string *)/*?*/ &LIST, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_0019;
_imp_strncpy(/*?*/ &LIST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = PARAMS;
(void *)&tmp;
}),
/*max:*/ 255);
L_0019:;
// 192 object = params %if object=""
if (_imp_strcmp((_imp_string *)/*?*/ &OBJECT, (_imp_string *)/*?*/ _imp_str_literal_ptr("")) != 0) goto L_001A;
_imp_strncpy(/*?*/ &OBJECT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = PARAMS;
(void *)&tmp;
}),
/*max:*/ 255);
L_001A:;
// 193 list = list.".lis" %unless is typed(list, dummy)
if (ISTYPED(
*({
__typeof__(_imp_string255) tmp = LIST /*q*/;
(_imp_string255 *)&tmp;
})
,
(_imp_string255 *)/*p*/ /*?*/ &DUMMY))
goto L_001B;
_imp_strncpy(/*?*/ &LIST, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &LIST, (_imp_string *)/*?*/ _imp_str_literal_ptr(".lis"));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
L_001B:;
// 194 object = object.".obj" %unless is typed(object, dummy)
if (ISTYPED(
*({
__typeof__(_imp_string255) tmp = OBJECT /*q*/;
(_imp_string255 *)&tmp;
})
,
(_imp_string255 *)/*p*/ /*?*/ &DUMMY))
goto L_001C;
_imp_strncpy(/*?*/ &OBJECT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &OBJECT, (_imp_string *)/*?*/ _imp_str_literal_ptr(".obj"));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
L_001C:;
// 195
// 196 open input(1, source)
_imp_OPENINPUT(1,
*({
__typeof__(_imp_string255) tmp = SOURCE /*q*/;
(_imp_string255 *)&tmp;
})
);
// 197 open output(1, object)
_imp_OPENOUTPUT(1,
*({
__typeof__(_imp_string255) tmp = OBJECT /*q*/;
(_imp_string255 *)&tmp;
})
);
// 198 open output(2, list)
_imp_OPENOUTPUT(2,
*({
__typeof__(_imp_string255) tmp = LIST /*q*/;
(_imp_string255 *)&tmp;
})
);
// 199 select output(2)
_imp_SELECTOUTPUT(2);
// 200 headset = 0
HEADSET = 0;
// 201 header = ""
_imp_strncpy(/*?*/ &HEADER, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 33);
// 202 drad = 8
DRAD = 8;
// 203 sp1 = 2
SP1 = 2;
// 204 sp2 = 4
SP2 = 4;
// 205 pflag = 3
PFLAG = 3;
// 206 sflag = 0
SFLAG = 0;
// 207 eflag = 1
EFLAG = 1;
// 208 gflag = 1
GFLAG = 1;
// 209 lflag = 2
LFLAG = 2;
// 210 cflag = 0
CFLAG = 0;
// 211 wflag = 0
WFLAG = 0;
// 212 tflag = 1
TFLAG = 1;
// 213 xflag = 0
XFLAG = 0;
// 214 sp3 = line width-sp1-sp2*2-cflag*2-wflag-10
SP3 = 78 - SP1 - SP2 * 2 - CFLAG * 2 - WFLAG - 10;
// 215 cont = 0
CONT = 0;
// 216 faults=0
FAULTS = 0;
// 217 nnames=0
NNAMES = 0;
// 218 xxentries = 0
XXENTRIES = 0;
// 219 consistent = 0
CONSISTENT = 0;
// 220 hnlink(i)=0 %for i = 0, 1, nhash-1
// %for I = 0, 1, 67 - 1 %cycle
{
int _final = 67 - 1;
if (invalid_for_loop(0, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 0, 1, 67 - 1");
I = -1;
L_001D:
if (I == _final) goto L_001E;
I += 1;
HNLINK[I] = 0;
goto L_001D;
}
L_001E:;
// 221 bp = 0
BP = 0;
// 222 ostarted = 0
OSTARTED = 0;
// 223 look ahead = 0
LOOKAHEAD = 0;
// 224 !-----------------------------------------------------------------------
// 225 select input(1)
_imp_SELECTINPUT(1);
// 226 pass = 1
PASS = 1;
// 227 %cycle
L_0020:;
// 228 ln = 0
LN = 0;
// 229 ca = 0
CA = 0;
// 230 bchar = -1
BCHAR = -1;
// 231 fflag = 0
FFLAG = 0;
// 232 %cycle
L_0021:;
// 233 read line
READLINE();
// 234 %continue %if pres char='*'
if (PRESCHAR != 42) goto L_0022;
goto L_0023;
L_0022:;
// 235 %if get name(lid)=0 %start
if (GETNAME(/*?*/ &LID) != 0) goto L_0024;
// 236 %if pass=1 %start
if (PASS != 1) goto L_0025;
// 237 %if nass(lid)=0 %start
if (NASS[LID - 1] != 0) goto L_0026;
// 238 nval(lid) = ca
NVAL[LID - 1] = CA;
// 239 nass(lid) = 1
NASS[LID - 1] = 1;
// 240 %else
goto L_0027;
L_0026:;
// 241 nval(lid) = 0
NVAL[LID - 1] = 0;
// 242 nass(lid) = 2
NASS[LID - 1] = 2;
// 243 %finish
L_0027:;
// 244 %finish %else %if nass(lid)=1 %and ca#nval(lid) %start
goto L_0028;
L_0025:;
if (NASS[LID - 1] != 1) goto L_0029;
if (CA == NVAL[LID - 1]) goto L_0029;
// 245 nval(lid) = ca
NVAL[LID - 1] = CA;
// 246 consistent = consistent+1
CONSISTENT = CONSISTENT + 1;
// 247 %finish
L_0029:;
L_0028:;
// 248 %else
goto L_002A;
L_0024:;
// 249 lid = 0
LID = 0;
// 250 %finish
L_002A:;
// 251 next char %while pres char=' '
L_002B:;
if (PRESCHAR != 32) goto L_002C;
NEXTCHAR();
goto L_002B;
L_002C:;
// 252 %continue %unless get instr(iid)
if (GETINSTR(/*?*/ &IID)) goto L_002D;
goto L_0023;
L_002D:;
// 253 next char %while pres char=' '
L_002E:;
if (PRESCHAR != 32) goto L_002F;
NEXTCHAR();
goto L_002E;
L_002F:;
// 254 ->itype1(itype(iid))
ITYPE1_line = __LINE__;
ITYPE1_file = __FILE__;
ITYPE1_index = ITYPE[IID - 1];
goto case_ITYPE1_dispatch;
// 255 !-----------------------------------------------------------------------
// 256 itype1(1):! implied
case_ITYPE1_1:;
// 257 ca=ca+1
CA = CA + 1;
// 258 %continue
goto L_0023;
// 259 !-----------------------------------------------------------------------
// 260 itype1(2):! relative
case_ITYPE1_2:;
// 261 ca=ca+2
CA = CA + 2;
// 262 %continue
goto L_0023;
// 263 !-----------------------------------------------------------------------
// 264 itype1(3): ! JMP
case_ITYPE1_3:;
// 265 itype1(4): ! JSR
case_ITYPE1_4:;
// 266 ca = ca+3
CA = CA + 3;
// 267 %continue
goto L_0023;
// 268 !----------------------------------------------------------------------------
// 269 itype1(5): ! immediate, direct, index, indir
case_ITYPE1_5:;
// 270 ca = ca+2 %and %continue %if pres char='#'
if (PRESCHAR != 35) goto L_0031;
CA = CA + 2;
goto L_0023;
L_0031:;
// 271 !-------------------------------------------------------------------------
// 272 itype1(6): ! direct, index, indir
case_ITYPE1_6:;
// 273 %if pres char='(' %start
if (PRESCHAR != 40) goto L_0032;
// 274 ca = ca+2
CA = CA + 2;
// 275 %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start
goto L_0033;
L_0032:;
if (GETOPD(/*?*/ &OPD) != 0) goto L_0034;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_0035;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_0035;
}
L_0034:;
// 276 %if indexed('Y') %start
if (!(INDEXED(89))) goto L_0036;
// 277 ca = ca+3
CA = CA + 3;
// 278 %else
goto L_0037;
L_0036:;
// 279 ca = ca+2
CA = CA + 2;
// 280 %finish
L_0037:;
// 281 %else
goto L_0033;
L_0035:;
// 282 ca = ca+3
CA = CA + 3;
// 283 %finish
L_0033:;
// 284 %continue
goto L_0023;
// 285 !-------------------------------------------------------------------------
// 286 itype1(7): ! rotate, shift
case_ITYPE1_7:;
// 287 ca = ca+1 %and %continue %if acc('A')
if (!(ACC(65))) goto L_0038;
CA = CA + 1;
goto L_0023;
L_0038:;
// 288 itype1(8): ! inc, dec
case_ITYPE1_8:;
// 289 %if acc('X') %or indexed('X') %start
if (ACC(88)) goto L_0039;
if (!(INDEXED(88))) goto L_003A;
L_0039:;
// 290 ca = ca+2
CA = CA + 2;
// 291 %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start
goto L_003B;
L_003A:;
if (GETOPD(/*?*/ &OPD) != 0) goto L_003C;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_003D;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_003D;
}
L_003C:;
// 292 ca = ca+2
CA = CA + 2;
// 293 %else
goto L_003B;
L_003D:;
// 294 ca = ca+3
CA = CA + 3;
// 295 %finish
L_003B:;
// 296 %continue
goto L_0023;
// 297 !-----------------------------------------------------------------------
// 298 itype1(9): ! cpy, cpx
case_ITYPE1_9:;
// 299 ca = ca+2 %and %continue %if pres char='#'
if (PRESCHAR != 35) goto L_003E;
CA = CA + 2;
goto L_0023;
L_003E:;
// 300 !----------------------------------------------------------------------
// 301 itype1(10): ! bit
case_ITYPE1_10:;
// 302 %if get opd(opd)#0 %or 0<=opd<=255 %start
if (GETOPD(/*?*/ &OPD) != 0) goto L_003F;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_0040;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_0040;
}
L_003F:;
// 303 ca = ca+2
CA = CA + 2;
// 304 %else
goto L_0041;
L_0040:;
// 305 ca = ca+3
CA = CA + 3;
// 306 %finish
L_0041:;
// 307 %continue
goto L_0023;
// 308 !-----------------------------------------------------------------------
// 309 itype1(11): ! ldx
case_ITYPE1_11:;
// 310 %if pres char = '#' %or acc('Y') %or indexed('Y') %start
if (PRESCHAR == 35) goto L_0042;
if (ACC(89)) goto L_0042;
if (!(INDEXED(89))) goto L_0043;
L_0042:;
// 311 ca = ca+2
CA = CA + 2;
// 312 %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start
goto L_0044;
L_0043:;
if (GETOPD(/*?*/ &OPD) != 0) goto L_0045;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_0046;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_0046;
}
L_0045:;
// 313 ca = ca+2
CA = CA + 2;
// 314 %else
goto L_0044;
L_0046:;
// 315 ca = ca+3
CA = CA + 3;
// 316 %finish
L_0044:;
// 317 %continue
goto L_0023;
// 318 !----------------------------------------------------------------------
// 319 itype1(12): ! ldy
case_ITYPE1_12:;
// 320 %if pres char='#' %or acc('X') %or indexed('X') %start
if (PRESCHAR == 35) goto L_0047;
if (ACC(88)) goto L_0047;
if (!(INDEXED(88))) goto L_0048;
L_0047:;
// 321 ca = ca+2
CA = CA + 2;
// 322 %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start
goto L_0049;
L_0048:;
if (GETOPD(/*?*/ &OPD) != 0) goto L_004A;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_004B;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_004B;
}
L_004A:;
// 323 ca = ca+2
CA = CA + 2;
// 324 %else
goto L_0049;
L_004B:;
// 325 ca = ca+3
CA = CA + 3;
// 326 %finish
L_0049:;
// 327 %continue
goto L_0023;
// 328 !----------------------------------------------------------------------
// 329 itype1(13): ! stx
case_ITYPE1_13:;
// 330 %if acc('Y') %or indexed('Y') %start
if (ACC(89)) goto L_004C;
if (!(INDEXED(89))) goto L_004D;
L_004C:;
// 331 ca = ca+2
CA = CA + 2;
// 332 %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start
goto L_004E;
L_004D:;
if (GETOPD(/*?*/ &OPD) != 0) goto L_004F;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_0050;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_0050;
}
L_004F:;
// 333 ca = ca+2
CA = CA + 2;
// 334 %finish %else %if indexed('Y') %start
goto L_004E;
L_0050:;
if (!(INDEXED(89))) goto L_0051;
// 335 ca = ca+2
CA = CA + 2;
// 336 %else
goto L_004E;
L_0051:;
// 337 ca = ca+3
CA = CA + 3;
// 338 %finish
L_004E:;
// 339 %continue
goto L_0023;
// 340 !----------------------------------------------------------------------
// 341 itype1(14): ! sty
case_ITYPE1_14:;
// 342 %if acc('X') %or indexed('X') %start
if (ACC(88)) goto L_0052;
if (!(INDEXED(88))) goto L_0053;
L_0052:;
// 343 ca = ca+2
CA = CA + 2;
// 344 %finish %else %if get opd(opd)#0 %or 0<=opd<=255 %start
goto L_0054;
L_0053:;
if (GETOPD(/*?*/ &OPD) != 0) goto L_0055;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_0056;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_0056;
}
L_0055:;
// 345 ca = ca+2
CA = CA + 2;
// 346 %finish %else %if indexed('X') %start
goto L_0054;
L_0056:;
if (!(INDEXED(88))) goto L_0057;
// 347 ca = ca+2
CA = CA + 2;
// 348 %else
goto L_0054;
L_0057:;
// 349 ca = ca+3
CA = CA + 3;
// 350 %finish
L_0054:;
// 351 %continue
goto L_0023;
// 352 !-----------------------------------------------------------------------
// 353 itype1(15): ! fcb
case_ITYPE1_15:;
// 354 %cycle
L_0058:;
// 355 ca = ca+1
CA = CA + 1;
// 356 i = get opd(opd) %unless pres char=','
if (PRESCHAR == 44) goto L_0059;
I = GETOPD(/*?*/ &OPD);
L_0059:;
// 357 %repeat %until %not more items
if (!(MOREITEMS())) goto L_005A;
goto L_0058;
L_005A:;
// 358 %continue
goto L_0023;
// 359 !-----------------------------------------------------------------------
// 360 itype1(16): ! fdb
case_ITYPE1_16:;
// 361 %cycle
L_005B:;
// 362 ca = ca+2
CA = CA + 2;
// 363 i = get opd(opd) %unless pres char=','
if (PRESCHAR == 44) goto L_005C;
I = GETOPD(/*?*/ &OPD);
L_005C:;
// 364 %repeat %until %not more items
if (!(MOREITEMS())) goto L_005D;
goto L_005B;
L_005D:;
// 365 %continue
goto L_0023;
// 366 !-----------------------------------------------------------------------
// 367 itype1(17):! equ
case_ITYPE1_17:;
// 368 %unless lid=0 %start
if (LID == 0) goto L_005E;
// 369 %if get opd(opd)=0 %start
if (GETOPD(/*?*/ &OPD) != 0) goto L_005F;
// 370 %if pass=1 %start
if (PASS != 1) goto L_0060;
// 371 %if nass(lid)=1 %start
if (NASS[LID - 1] != 1) goto L_0061;
// 372 nval(lid) = opd
NVAL[LID - 1] = OPD;
// 373 nass(lid) = 3
NASS[LID - 1] = 3;
// 374 %finish
L_0061:;
// 375 %finish %else %if nass(lid)=3 %and opd#nval(lid) %start
goto L_0062;
L_0060:;
if (NASS[LID - 1] != 3) goto L_0063;
if (OPD == NVAL[LID - 1]) goto L_0063;
// 376 nval(lid) = opd
NVAL[LID - 1] = OPD;
// 377 consistent = consistent+1
CONSISTENT = CONSISTENT + 1;
// 378 %finish
L_0063:;
L_0062:;
// 379 %else
goto L_0064;
L_005F:;
// 380 %unless nass(lid)=2 %start
if (NASS[LID - 1] == 2) goto L_0065;
// 381 nval(lid) = 0
NVAL[LID - 1] = 0;
// 382 nass(lid) = 4
NASS[LID - 1] = 4;
// 383 %finish
L_0065:;
// 384 %finish
L_0064:;
// 385 %finish
L_005E:;
// 386 %continue
goto L_0023;
// 387 !-----------------------------------------------------------------------
// 388 itype1(18):! org
case_ITYPE1_18:;
// 389 %unless lid=0 %start
if (LID == 0) goto L_0066;
// 390 nval(lid) = 0
NVAL[LID - 1] = 0;
// 391 nass(lid) = 4
NASS[LID - 1] = 4;
// 392 %finish
L_0066:;
// 393 ca = opd %if get opd(opd)=0
if (GETOPD(/*?*/ &OPD) != 0) goto L_0067;
CA = OPD;
L_0067:;
// 394 %continue
goto L_0023;
// 395 !-----------------------------------------------------------------------
// 396 itype1(19): ! rmb
case_ITYPE1_19:;
// 397 ca = ca+opd %if get opd(opd)=0
if (GETOPD(/*?*/ &OPD) != 0) goto L_0068;
CA = CA + OPD;
L_0068:;
// 398 %continue
goto L_0023;
// 399 !-----------------------------------------------------------------------
// 400 itype1(20):! fcc
case_ITYPE1_20:;
// 401 %if '0'<=pres char<='9' %start
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_0069;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 57) goto L_0069;
}
// 402 i = lp
I = LP;
// 403 j = 0
J = 0;
// 404 %cycle
L_006A:;
// 405 j = j*10+pres char-'0'
J = J * 10 + PRESCHAR - 48;
// 406 next char
NEXTCHAR();
// 407 %repeat %until %not '0'<=pres char<='9'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_006B;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 57) goto L_006B;
}
goto L_006A;
L_006B:;
// 408 %if pres char=',' %start
if (PRESCHAR != 44) goto L_006C;
// 409 ca = ca+j
CA = CA + J;
// 410 %continue
goto L_0023;
// 411 %finish
L_006C:;
// 412 lp = i-1
LP = I - 1;
// 413 next char
NEXTCHAR();
// 414 %finish
L_0069:;
// 415 %continue %if pres char<' '
if (PRESCHAR >= 32) goto L_006D;
goto L_0023;
L_006D:;
// 416 delim = pres char
DELIM = PRESCHAR;
// 417 next char
NEXTCHAR();
// 418 %cycle
L_006E:;
// 419 %exit %if pres char=nl
if (PRESCHAR != 10) goto L_006F;
goto L_0070;
L_006F:;
// 420 %if pres char=delim %start
if (PRESCHAR != DELIM) goto L_0071;
// 421 next char
NEXTCHAR();
// 422 %exit %unless pres char=delim
if (PRESCHAR == DELIM) goto L_0072;
goto L_0070;
L_0072:;
// 423 %finish
L_0071:;
// 424 next char
NEXTCHAR();
// 425 ca=ca+1
CA = CA + 1;
// 426 %repeat
goto L_006E;
L_0070:;
// 427 %continue
goto L_0023;
// 428 !-----------------------------------------------------------------------
// 429 itype1(21): ! nam
case_ITYPE1_21:;
// 430 %unless lid=0 %start
if (LID == 0) goto L_0073;
// 431 nval(lid) = 0
NVAL[LID - 1] = 0;
// 432 nass(lid) = 4
NASS[LID - 1] = 4;
// 433 %finish
L_0073:;
// 434 %continue %unless headset=0
if (HEADSET == 0) goto L_0074;
goto L_0023;
L_0074:;
// 435 headset = 1
HEADSET = 1;
// 436 header = ""
_imp_strncpy(/*?*/ &HEADER, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 33);
// 437 %while pres char#nl %cycle
L_0075:;
if (PRESCHAR == 10) goto L_0076;
// 438 header <- header.to string(line(lp))
_imp_strncpy(/*?*/ &HEADER, ({
__typeof__(_imp_string255) tmp; /*C*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &HEADER, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(LINE[LP - 1]);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 33);
/* truncated copy of no more than 33 chars */
if (*_imp_LENGTH((_imp_string *)/*?*/ &HEADER) > 33) *_imp_LENGTH((_imp_string *)/*?*/ &HEADER) = 33;
// 439 next char
NEXTCHAR();
// 440 %repeat
goto L_0075;
L_0076:;
// 441 %continue
goto L_0023;
// 442 !-----------------------------------------------------------------------
// 443 itype1(22): ! opt
case_ITYPE1_22:;
// 444 %cycle
L_0077:;
// 445 %if get option(opt) %start
if (!(GETOPTION(/*?*/ &OPT))) goto L_0078;
// 446 %if 1<=opt<=2 %start
{
// Double-sided test on OPT (Part I)
int tmp;
if (1 > (tmp = OPT)) goto L_0079;
// Double-sided test on OPT (Part II)
if (tmp > 2) goto L_0079;
}
// 447 bchar = ' '
BCHAR = 32;
// 448 %finish %else %if 3<=opt<=4 %start
goto L_007A;
L_0079:;
{
// Double-sided test on OPT (Part I)
int tmp;
if (3 > (tmp = OPT)) goto L_007B;
// Double-sided test on OPT (Part II)
if (tmp > 4) goto L_007B;
}
// 449 bchar = -1
BCHAR = -1;
// 450 %finish %else %if 18<=opt<=19 %start
goto L_007A;
L_007B:;
{
// Double-sided test on OPT (Part I)
int tmp;
if (18 > (tmp = OPT)) goto L_007C;
// Double-sided test on OPT (Part II)
if (tmp > 19) goto L_007C;
}
// 451 fflag = 1
FFLAG = 1;
// 452 %finish %else %if 20<=opt<=21 %start
goto L_007A;
L_007C:;
{
// Double-sided test on OPT (Part I)
int tmp;
if (20 > (tmp = OPT)) goto L_007D;
// Double-sided test on OPT (Part II)
if (tmp > 21) goto L_007D;
}
// 453 fflag = 0
FFLAG = 0;
// 454 %finish
L_007D:;
L_007A:;
// 455 %finish
L_0078:;
// 456 %repeat %until %not more items
if (!(MOREITEMS())) goto L_007E;
goto L_0077;
L_007E:;
// 457 !-----------------------------------------------------------------------
// 458 itype1(23): ! page
case_ITYPE1_23:;
// 459 !-----------------------------------------------------------------------
// 460 itype1(24): ! spc
case_ITYPE1_24:;
// 461 %unless lid=0 %start
if (LID == 0) goto L_007F;
// 462 nval(lid) = 0
NVAL[LID - 1] = 0;
// 463 nass(lid) = 4
NASS[LID - 1] = 4;
// 464 %finish
L_007F:;
// 465 !-----------------------------------------------------------------------
// 466 %repeat
L_0023:;
goto L_0021;
// 467 !-----------------------------------------------------------------------
// 468 itype1(25): ! end
case_ITYPE1_25:;
// 469 %unless lid=0 %start
if (LID == 0) goto L_0080;
// 470 nval(lid) = 0
NVAL[LID - 1] = 0;
// 471 nass(lid) = 2
NASS[LID - 1] = 2;
// 472 %finish
L_0080:;
// 473 %if pass=1 %start
if (PASS != 1) goto L_0081;
// 474 pass = 2
PASS = 2;
// 475 %else
goto L_0082;
L_0081:;
// 476 %exit %if consistent=0 %or %c
if (CONSISTENT == 0) goto L_0083;
if (LASTCONSISTENT == 0) goto L_0084;
if (CONSISTENT < LASTCONSISTENT) goto L_0084;
L_0083:;
goto L_0085;
L_0084:;
// 477+ (last consistent#0 %and consistent>=last consistent)
// 478 %finish
L_0082:;
// 479 last consistent = consistent
LASTCONSISTENT = CONSISTENT;
// 480 consistent = 0
CONSISTENT = 0;
// 481 reset input
_imp_RESETINPUT();
// 482 %repeat
goto L_0020;
L_0085:;
// 483 !-----------------------------------------------------------------------
// 484 nline(0)
NLINE(0);
// 485 reset input
_imp_RESETINPUT();
// 486 pass = 3
PASS = 3;
// 487 ln=0
LN = 0;
// 488 ca=0
CA = 0;
// 489 old ca = 0
OLDCA = 0;
// 490 lid = 0
LID = 0;
// 491 bchar = -1
BCHAR = -1;
// 492 fflag = 0
FFLAG = 0;
// 493 %cycle
L_0086:;
// 494 %unless lid=0 %start
if (LID == 0) goto L_0087;
// 495 fault("Multiply defined label") %if nass(lid)=2
if (NASS[LID - 1] != 2) goto L_0088;
FAULT(_imp_str_literal_size(63, "Multiply defined label"));
L_0088:;
// 496 %if nass(lid)=1 %and nval(lid)#old ca %start
if (NASS[LID - 1] != 1) goto L_0089;
if (NVAL[LID - 1] == OLDCA) goto L_0089;
// 497 fault("Inconsistent label")
FAULT(_imp_str_literal_size(63, "Inconsistent label"));
// 498 nval(lid) = old ca
NVAL[LID - 1] = OLDCA;
// 499 %finish
L_0089:;
// 500 %finish
L_0087:;
// 501 old ca = ca
OLDCA = CA;
// 502 lid = 0
LID = 0;
// 503 read line
READLINE();
// 504 non dense = 0
NONDENSE = 0;
// 505 instr out(0, 0, -4, 0) %and %continue %if pres char='*'
if (PRESCHAR != 42) goto L_008A;
INSTROUT(0, 0, -4, 0);
goto L_001F;
L_008A:;
// 506 lid = 0 %unless get name(lid)=0
if (GETNAME(/*?*/ &LID) == 0) goto L_008B;
LID = 0;
L_008B:;
// 507 next char %while pres char=' '
L_008C:;
if (PRESCHAR != 32) goto L_008D;
NEXTCHAR();
goto L_008C;
L_008D:;
// 508 %if pres char=nl %start
if (PRESCHAR != 10) goto L_008E;
// 509 instr out(0, 0, -4, 0)
INSTROUT(0, 0, -4, 0);
// 510 %finish %else %if get instr(iid) %start
goto L_008F;
L_008E:;
if (!(GETINSTR(/*?*/ &IID))) goto L_0090;
// 511 order = icode(iid)
ORDER = ICODE[IID - 1];
// 512 mcycles = icycles(iid)
MCYCLES = ICYCLES[IID - 1];
// 513 next char %while pres char=' '
L_0091:;
if (PRESCHAR != 32) goto L_0092;
NEXTCHAR();
goto L_0091;
L_0092:;
// 514 ->itype2(itype(iid))
ITYPE2_line = __LINE__;
ITYPE2_file = __FILE__;
ITYPE2_index = ITYPE[IID - 1];
goto case_ITYPE2_dispatch;
// 515 %else
L_0090:;
// 516 instr out(0, 0, -4, 0)
INSTROUT(0, 0, -4, 0);
// 517 fault("Unknown operation")
FAULT(_imp_str_literal_size(63, "Unknown operation"));
// 518 %finish
L_008F:;
// 519 %continue
goto L_001F;
// 520 !-----------------------------------------------------------------------
// 521 itype2(1):! implied
case_ITYPE2_1:;
// 522 instr out(order,0,1, mcycles)
INSTROUT(ORDER, 0, 1, MCYCLES);
// 523 %continue
goto L_001F;
// 524 !-----------------------------------------------------------------------
// 525 itype2(2):! relative
case_ITYPE2_2:;
// 526 i=get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 527 j=opd-ca-2
J = OPD - CA - 2;
// 528 instr out(order,j,2, mcycles)
INSTROUT(ORDER, J, 2, MCYCLES);
// 529 %unless i=0 %start
if (I == 0) goto L_0094;
// 530 fault("Cannot evaluate operand")
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
// 531 %finish %else %unless -127<=j<=127 %start
goto L_0095;
L_0094:;
{
// Double-sided test on J (Part I)
int tmp;
if (-127 > (tmp = J)) goto L_0096;
// Double-sided test on J (Part II)
if (tmp <= 127) goto L_0097;
}
L_0096:;
// 532 fault("Branch out of range")
FAULT(_imp_str_literal_size(63, "Branch out of range"));
// 533 %finish
L_0097:;
L_0095:;
// 534 %continue
goto L_001F;
// 535 !-----------------------------------------------------------------------
// 536 itype2(3):! JMP
case_ITYPE2_3:;
// 537 %if pres char='(' %start
if (PRESCHAR != 40) goto L_0098;
// 538 next char %until pres char#bchar
L_0099:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_009A;
goto L_0099;
L_009A:;
// 539 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 540 next char %while pres char=bchar
L_009B:;
if (PRESCHAR != BCHAR) goto L_009C;
NEXTCHAR();
goto L_009B;
L_009C:;
// 541 %if pres char=')' %start
if (PRESCHAR != 41) goto L_009D;
// 542 next char
NEXTCHAR();
// 543 instr out(order+16_20, opd, 3, mcycles+2)
INSTROUT(ORDER + 32, OPD, 3, MCYCLES + 2);
// 544 %else
goto L_009E;
L_009D:;
// 545 instr out(order+16_20, opd, 3, mcycles+2)
INSTROUT(ORDER + 32, OPD, 3, MCYCLES + 2);
// 546 fault("Missing right parenthesis")
FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));
// 547 %finish
L_009E:;
// 548 fault("Cannot evaluate operand") %unless i=0
if (I == 0) goto L_009F;
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_009F:;
// 549 %continue
goto L_001F;
// 550 %finish
L_0098:;
// 551 !---------------------------------------------------------------------------
// 552 itype2(4): ! JSR
case_ITYPE2_4:;
// 553 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 554 instr out(order, opd, 3, mcycles)
INSTROUT(ORDER, OPD, 3, MCYCLES);
// 555 fault("Cannot evaluate operand") %unless i=0
if (I == 0) goto L_00A0;
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00A0:;
// 556 %continue
goto L_001F;
// 557 !--------------------------------------------------------------------------
// 558 itype2(5): ! immediate, direct, index, indir
case_ITYPE2_5:;
// 559 immediate(order+8, mcycles) %and %continue %if pres char='#'
if (PRESCHAR != 35) goto L_00A1;
IMMEDIATE(ORDER + 8, MCYCLES);
goto L_001F;
L_00A1:;
// 560 !--------------------------------------------------------------------------
// 561 itype2(6): ! direct, index, indir
case_ITYPE2_6:;
// 562 %if pres char='(' %start
if (PRESCHAR != 40) goto L_00A2;
// 563 next char %until pres char#bchar
L_00A3:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_00A4;
goto L_00A3;
L_00A4:;
// 564 %if acc('X') %or indexed('X') %start
if (ACC(88)) goto L_00A5;
if (!(INDEXED(88))) goto L_00A6;
L_00A5:;
// 565 next char %while pres char=bchar
L_00A7:;
if (PRESCHAR != BCHAR) goto L_00A8;
NEXTCHAR();
goto L_00A7;
L_00A8:;
// 566 %if pres char=')' %start
if (PRESCHAR != 41) goto L_00A9;
// 567 next char
NEXTCHAR();
// 568 instr out(order, 0, 2, mcycles+4)
INSTROUT(ORDER, 0, 2, MCYCLES + 4);
// 569 %else
goto L_00AA;
L_00A9:;
// 570 instr out(order, 0, 2, mcycles+4)
INSTROUT(ORDER, 0, 2, MCYCLES + 4);
// 571 fault("Missing right parenthesis")
FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));
// 572 %finish
L_00AA:;
// 573 %finish %else %if acc('Y') %or indexed('Y') %start
goto L_00AB;
L_00A6:;
if (ACC(89)) goto L_00AC;
if (!(INDEXED(89))) goto L_00AD;
L_00AC:;
// 574 next char %while pres char=bchar
L_00AE:;
if (PRESCHAR != BCHAR) goto L_00AF;
NEXTCHAR();
goto L_00AE;
L_00AF:;
// 575 %if pres char=')' %start
if (PRESCHAR != 41) goto L_00B0;
// 576 next char
NEXTCHAR();
// 577 instr out(order, 0, 2, mcycles+4)
INSTROUT(ORDER, 0, 2, MCYCLES + 4);
// 578 %else
goto L_00B1;
L_00B0:;
// 579 instr out(order, 0, 2, mcycles+4)
INSTROUT(ORDER, 0, 2, MCYCLES + 4);
// 580 fault("Missing right parenthesis")
FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));
// 581 %finish
L_00B1:;
// 582 fault("Invalid index register")
FAULT(_imp_str_literal_size(63, "Invalid index register"));
// 583 %else
goto L_00AB;
L_00AD:;
// 584 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 585 %if indexed('X') %start
if (!(INDEXED(88))) goto L_00B2;
// 586 next char %while pres char=bchar
L_00B3:;
if (PRESCHAR != BCHAR) goto L_00B4;
NEXTCHAR();
goto L_00B3;
L_00B4:;
// 587 %if pres char=')' %start
if (PRESCHAR != 41) goto L_00B5;
// 588 next char
NEXTCHAR();
// 589 instr out(order, opd, 2, mcycles+4)
INSTROUT(ORDER, OPD, 2, MCYCLES + 4);
// 590 %else
goto L_00B6;
L_00B5:;
// 591 instr out(order, opd, 2, mcycles+4)
INSTROUT(ORDER, OPD, 2, MCYCLES + 4);
// 592 fault("Missing right parenthesis")
FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));
// 593 %finish
L_00B6:;
// 594 %else
goto L_00B7;
L_00B2:;
// 595 %if indexed('Y') %start
if (!(INDEXED(89))) goto L_00B8;
// 596 reg fault = 1
REGFAULT = 1;
// 597 %else
goto L_00B9;
L_00B8:;
// 598 reg fault = 0
REGFAULT = 0;
// 599 %finish
L_00B9:;
// 600 next char %while pres char=bchar
L_00BA:;
if (PRESCHAR != BCHAR) goto L_00BB;
NEXTCHAR();
goto L_00BA;
L_00BB:;
// 601 %if pres char=')' %start
if (PRESCHAR != 41) goto L_00BC;
// 602 next char %until pres char#bchar
L_00BD:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_00BE;
goto L_00BD;
L_00BE:;
// 603 %if indexed('Y') %start
if (!(INDEXED(89))) goto L_00BF;
// 604 instr out(order+16_10, opd, 2, mcycles+4)
INSTROUT(ORDER + 16, OPD, 2, MCYCLES + 4);
// 605 %finish %else %if indexed('X') %start
goto L_00C0;
L_00BF:;
if (!(INDEXED(88))) goto L_00C1;
// 606 instr out(order+16_10, opd, 2, mcycles+4)
INSTROUT(ORDER + 16, OPD, 2, MCYCLES + 4);
// 607 fault("Invalid index register")
FAULT(_imp_str_literal_size(63, "Invalid index register"));
// 608 %else
goto L_00C0;
L_00C1:;
// 609 instr out(order, opd, 2, mcycles+4)
INSTROUT(ORDER, OPD, 2, MCYCLES + 4);
// 610 fault("Index register not specified") %if reg fault=0
if (REGFAULT != 0) goto L_00C2;
FAULT(_imp_str_literal_size(63, "Index register not specified"));
L_00C2:;
// 611 %finish
L_00C0:;
// 612 %else
goto L_00C3;
L_00BC:;
// 613 instr out(order, opd, 2, mcycles+4)
INSTROUT(ORDER, OPD, 2, MCYCLES + 4);
// 614 fault("Missing right parenthesis")
FAULT(_imp_str_literal_size(63, "Missing right parenthesis"));
// 615 fault("Index register not specified") %if reg fault=0
if (REGFAULT != 0) goto L_00C4;
FAULT(_imp_str_literal_size(63, "Index register not specified"));
L_00C4:;
// 616 %finish
L_00C3:;
// 617 fault("Invalid index register") %unless reg fault=0
if (REGFAULT == 0) goto L_00C5;
FAULT(_imp_str_literal_size(63, "Invalid index register"));
L_00C5:;
// 618 %finish
L_00B7:;
// 619 %unless i=0 %start
if (I == 0) goto L_00C6;
// 620 fault("Cannot evaluate operand")
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
// 621 %finish %else %unless 0<=opd<=255 %start
goto L_00C7;
L_00C6:;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_00C8;
// Double-sided test on OPD (Part II)
if (tmp <= 255) goto L_00C9;
}
L_00C8:;
// 622 fault("Invalid page zero address")
FAULT(_imp_str_literal_size(63, "Invalid page zero address"));
// 623 %finish
L_00C9:;
L_00C7:;
// 624 %finish
L_00AB:;
// 625 %finish %else %if acc('X') %or indexed('X') %start
goto L_00CA;
L_00A2:;
if (ACC(88)) goto L_00CB;
if (!(INDEXED(88))) goto L_00CC;
L_00CB:;
// 626 instr out(order+16_14, 0, 2, mcycles+2)
INSTROUT(ORDER + 20, 0, 2, MCYCLES + 2);
// 627 %finish %else %if acc('Y') %or indexed('Y') %start
goto L_00CA;
L_00CC:;
if (ACC(89)) goto L_00CD;
if (!(INDEXED(89))) goto L_00CE;
L_00CD:;
// 628 instr out(order+16_18, 0, 3, mcycles+3)
INSTROUT(ORDER + 24, 0, 3, MCYCLES + 3);
// 629 %else
goto L_00CA;
L_00CE:;
// 630 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 631 %if indexed('X') %start
if (!(INDEXED(88))) goto L_00CF;
// 632 %if i#0 %or 0<=opd<=255 %start
if (I != 0) goto L_00D0;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_00D1;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_00D1;
}
L_00D0:;
// 633 instr out(order+16_14, opd, 2, mcycles+2)
INSTROUT(ORDER + 20, OPD, 2, MCYCLES + 2);
// 634 %else
goto L_00D2;
L_00D1:;
// 635 instr out(order+16_1C, opd, 3, mcycles+3)
INSTROUT(ORDER + 28, OPD, 3, MCYCLES + 3);
// 636 %finish
L_00D2:;
// 637 %finish %else %if indexed('Y') %start
goto L_00D3;
L_00CF:;
if (!(INDEXED(89))) goto L_00D4;
// 638 instr out(order+16_18, opd, 3, mcycles+3)
INSTROUT(ORDER + 24, OPD, 3, MCYCLES + 3);
// 639 %finish %else %if i#0 %or 0<=opd<=255 %start
goto L_00D3;
L_00D4:;
if (I != 0) goto L_00D5;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_00D6;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_00D6;
}
L_00D5:;
// 640 instr out(order+4, opd, 2, mcycles+1)
INSTROUT(ORDER + 4, OPD, 2, MCYCLES + 1);
// 641 %else
goto L_00D3;
L_00D6:;
// 642 instr out(order+12, opd, 3, mcycles+2)
INSTROUT(ORDER + 12, OPD, 3, MCYCLES + 2);
// 643 %finish
L_00D3:;
// 644 fault("Cannot evaluate operand") %unless i=0
if (I == 0) goto L_00D7;
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00D7:;
// 645 %finish
L_00CA:;
// 646 %continue
goto L_001F;
// 647 !-----------------------------------------------------------------------
// 648 itype2(7): ! rotate, shift
case_ITYPE2_7:;
// 649 %if acc('A') %start
if (!(ACC(65))) goto L_00D8;
// 650 instr out(order+4, 0, 1, mcycles)
INSTROUT(ORDER + 4, 0, 1, MCYCLES);
// 651 %continue
goto L_001F;
// 652 %finish
L_00D8:;
// 653 !-----------------------------------------------------------------------
// 654 itype2(8): ! inc, dec
case_ITYPE2_8:;
// 655 operand('X', 'Y', order, mcycles+2)
OPERAND(88, 89, ORDER, MCYCLES + 2);
// 656 %continue
goto L_001F;
// 657 !-----------------------------------------------------------------------
// 658 itype2(9): ! cpx,cpy
case_ITYPE2_9:;
// 659 immediate(order, mcycles) %and %continue %if pres char='#'
if (PRESCHAR != 35) goto L_00D9;
IMMEDIATE(ORDER, MCYCLES);
goto L_001F;
L_00D9:;
// 660 !-----------------------------------------------------------------------
// 661 itype2(10):! BIT
case_ITYPE2_10:;
// 662 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 663 %if i#0 %or 0<=opd<=255 %start
if (I != 0) goto L_00DA;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_00DB;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_00DB;
}
L_00DA:;
// 664 instr out(order+4, opd, 2, mcycles+1)
INSTROUT(ORDER + 4, OPD, 2, MCYCLES + 1);
// 665 fault("Cannot evaluate operand") %unless i=0
if (I == 0) goto L_00DC;
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00DC:;
// 666 %else
goto L_00DD;
L_00DB:;
// 667 instr out(order+12, opd, 3, mcycles+2)
INSTROUT(ORDER + 12, OPD, 3, MCYCLES + 2);
// 668 %finish
L_00DD:;
// 669 %continue
goto L_001F;
// 670 !-----------------------------------------------------------------------
// 671 itype2(11): ! ldx
case_ITYPE2_11:;
// 672 %if pres char='#' %start
if (PRESCHAR != 35) goto L_00DE;
// 673 immediate(order, mcycles)
IMMEDIATE(ORDER, MCYCLES);
// 674 %else
goto L_00DF;
L_00DE:;
// 675 operand('Y', 'X', order+4, mcycles)
OPERAND(89, 88, ORDER + 4, MCYCLES);
// 676 %finish
L_00DF:;
// 677 %continue
goto L_001F;
// 678 !---------------------------------------------------------------------
// 679 itype2(12): ! LDY
case_ITYPE2_12:;
// 680 %if pres char='#' %start
if (PRESCHAR != 35) goto L_00E0;
// 681 immediate(order, mcycles)
IMMEDIATE(ORDER, MCYCLES);
// 682 %else
goto L_00E1;
L_00E0:;
// 683 operand('X', 'Y', order+4, mcycles)
OPERAND(88, 89, ORDER + 4, MCYCLES);
// 684 %finish
L_00E1:;
// 685 %continue
goto L_001F;
// 686 !-----------------------------------------------------------------------
// 687 itype2(13):! STX
case_ITYPE2_13:;
// 688 store('Y', 'X', order, mcycles)
STORE(89, 88, ORDER, MCYCLES);
// 689 %continue
goto L_001F;
// 690 !-----------------------------------------------------------------------
// 691 itype2(14): ! STY
case_ITYPE2_14:;
// 692 store('X', 'Y', order, mcycles)
STORE(88, 89, ORDER, MCYCLES);
// 693 %continue
goto L_001F;
// 694 !-----------------------------------------------------------------------
// 695 itype2(15): ! fcb
case_ITYPE2_15:;
// 696 %cycle
L_00E2:;
// 697 %if pres char=',' %start
if (PRESCHAR != 44) goto L_00E3;
// 698 opd = 0
OPD = 0;
// 699 i = 0
I = 0;
// 700 %else
goto L_00E4;
L_00E3:;
// 701 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 702 %finish
L_00E4:;
// 703 %if cont=0 %start
if (CONT != 0) goto L_00E5;
// 704 j = lp
J = LP;
// 705 look ahead = 1
LOOKAHEAD = 1;
// 706 %while more items %cycle
L_00E6:;
if (!(MOREITEMS())) goto L_00E7;
// 707 k = get opd(k) %unless pres char=','
if (PRESCHAR == 44) goto L_00E8;
K = GETOPD(/*?*/ &K);
L_00E8:;
// 708 %repeat
goto L_00E6;
L_00E7:;
// 709 look ahead = 0
LOOKAHEAD = 0;
// 710 instr out(opd, 0, 1, 0)
INSTROUT(OPD, 0, 1, 0);
// 711 lp = j-1
LP = J - 1;
// 712 next char
NEXTCHAR();
// 713 cont = 1
CONT = 1;
// 714 %else
goto L_00E9;
L_00E5:;
// 715 instr out(opd, 0, 1, 0)
INSTROUT(OPD, 0, 1, 0);
// 716 %finish
L_00E9:;
// 717 fault("Invalid constant") %unless i=0 %and 0<=opd<=255
if (I != 0) goto L_00EA;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_00EA;
// Double-sided test on OPD (Part II)
if (tmp <= 255) goto L_00EB;
}
L_00EA:;
FAULT(_imp_str_literal_size(63, "Invalid constant"));
L_00EB:;
// 718 %repeat %until %not more items
if (!(MOREITEMS())) goto L_00EC;
goto L_00E2;
L_00EC:;
// 719 cont = 0
CONT = 0;
// 720 %continue
goto L_001F;
// 721 !------------------------------------------------------------------------
// 722 itype2(16): ! fdb
case_ITYPE2_16:;
// 723 %cycle
L_00ED:;
// 724 %if pres char=',' %start
if (PRESCHAR != 44) goto L_00EE;
// 725 opd = 0
OPD = 0;
// 726 i = 0
I = 0;
// 727 %else
goto L_00EF;
L_00EE:;
// 728 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 729 %finish
L_00EF:;
// 730 %if cont=0 %start
if (CONT != 0) goto L_00F0;
// 731 j = lp
J = LP;
// 732 look ahead = 1
LOOKAHEAD = 1;
// 733 %while more items %cycle
L_00F1:;
if (!(MOREITEMS())) goto L_00F2;
// 734 k = get opd(k) %unless pres char=','
if (PRESCHAR == 44) goto L_00F3;
K = GETOPD(/*?*/ &K);
L_00F3:;
// 735 %repeat
goto L_00F1;
L_00F2:;
// 736 look ahead = 0
LOOKAHEAD = 0;
// 737 instr out(0, opd, -2, 0)
INSTROUT(0, OPD, -2, 0);
// 738 lp = j-1
LP = J - 1;
// 739 next char
NEXTCHAR();
// 740 cont = 1
CONT = 1;
// 741 %else
goto L_00F4;
L_00F0:;
// 742 instr out(0, opd, -2, 0)
INSTROUT(0, OPD, -2, 0);
// 743 %finish
L_00F4:;
// 744 fault("Invalid constant") %unless i=0
if (I == 0) goto L_00F5;
FAULT(_imp_str_literal_size(63, "Invalid constant"));
L_00F5:;
// 745 %repeat %until %not more items
if (!(MOREITEMS())) goto L_00F6;
goto L_00ED;
L_00F6:;
// 746 cont = 0
CONT = 0;
// 747 %continue
goto L_001F;
// 748 !-----------------------------------------------------------------------
// 749 itype2(17):! equ
case_ITYPE2_17:;
// 750 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 751 instr out(0, opd, -3, 0)
INSTROUT(0, OPD, -3, 0);
// 752 fault("No name to equate") %if lid=0
if (LID != 0) goto L_00F7;
FAULT(_imp_str_literal_size(63, "No name to equate"));
L_00F7:;
// 753 fault("Cannot evaluate operand") %unless i=0
if (I == 0) goto L_00F8;
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00F8:;
// 754 %if lid#0 %and i=0 %and nass(lid)=3 %and nval(lid)#opd %start
if (LID == 0) goto L_00F9;
if (I != 0) goto L_00F9;
if (NASS[LID - 1] != 3) goto L_00F9;
if (NVAL[LID - 1] == OPD) goto L_00F9;
// 755 fault("Inconsistent label")
FAULT(_imp_str_literal_size(63, "Inconsistent label"));
// 756 nval(lid) = opd
NVAL[LID - 1] = OPD;
// 757 %finish
L_00F9:;
// 758 %continue
goto L_001F;
// 759 !-----------------------------------------------------------------------
// 760 itype2(18):! org
case_ITYPE2_18:;
// 761 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 762 ca = opd %if i=0
if (I != 0) goto L_00FA;
CA = OPD;
L_00FA:;
// 763 instr out(0, 0, 0, 0)
INSTROUT(0, 0, 0, 0);
// 764 fault("Illegal label") %unless lid=0
if (LID == 0) goto L_00FB;
FAULT(_imp_str_literal_size(63, "Illegal label"));
L_00FB:;
// 765 fault("Cannot evaluate operand") %unless i=0
if (I == 0) goto L_00FC;
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_00FC:;
// 766 %continue
goto L_001F;
// 767 !-----------------------------------------------------------------------
// 768 itype2(19): ! rmb
case_ITYPE2_19:;
// 769 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 770 instr out(0, opd, -1, 0)
INSTROUT(0, OPD, -1, 0);
// 771 %if i=0 %start
if (I != 0) goto L_00FD;
// 772 ca = ca+opd
CA = CA + OPD;
// 773 %else
goto L_00FE;
L_00FD:;
// 774 fault("Cannot evaluate operand")
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
// 775 %finish
L_00FE:;
// 776 %continue
goto L_001F;
// 777 !-----------------------------------------------------------------------
// 778 itype2(20):! fcc
case_ITYPE2_20:;
// 779 non dense = 1
NONDENSE = 1;
// 780 %if '0'<=pres char<='9' %start
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_00FF;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 57) goto L_00FF;
}
// 781 i = 0
I = 0;
// 782 j = lp
J = LP;
// 783 %cycle
L_0100:;
// 784 i = i*10+pres char-'0'
I = I * 10 + PRESCHAR - 48;
// 785 next char
NEXTCHAR();
// 786 %repeat %until %not '0'<=pres char<='9'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_0101;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 57) goto L_0101;
}
goto L_0100;
L_0101:;
// 787 %if pres char=',' %start
if (PRESCHAR != 44) goto L_0102;
// 788 next char
NEXTCHAR();
// 789 %if i=0 %start
if (I != 0) goto L_0103;
// 790 instr out(0, 0, 0, 0)
INSTROUT(0, 0, 0, 0);
// 791 fault("Invalid string")
FAULT(_imp_str_literal_size(63, "Invalid string"));
// 792 %else
goto L_0104;
L_0103:;
// 793 %while i>0 %cycle
L_0105:;
if (I <= 0) goto L_0106;
// 794 %if pres char=nl %start
if (PRESCHAR != 10) goto L_0107;
// 795 opd = ' '
OPD = 32;
// 796 %else
goto L_0108;
L_0107:;
// 797 opd = line(lp)
OPD = LINE[LP - 1];
// 798 next char
NEXTCHAR();
// 799 %finish
L_0108:;
// 800 i = i-1
I = I - 1;
// 801 %if cont=0 %start
if (CONT != 0) goto L_0109;
// 802 j = lp
J = LP;
// 803 %for k = 1, 1, i %cycle
// %for K = 1, 1, I %cycle
{
int _final = I;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle K = 1, 1, I");
K = 0;
L_010A:
if (K == _final) goto L_010B;
K += 1;
// 804 %exit %if pres char=nl
if (PRESCHAR != 10) goto L_010D;
goto L_010B;
L_010D:;
// 805 next char
NEXTCHAR();
// 806 %repeat
goto L_010A;
}
L_010B:;
// 807 instr out(opd, 0, 1, 0)
INSTROUT(OPD, 0, 1, 0);
// 808 lp = j-1
LP = J - 1;
// 809 next char
NEXTCHAR();
// 810 cont = 1
CONT = 1;
// 811 %else
goto L_010E;
L_0109:;
// 812 instr out(opd, 0, 1, 0)
INSTROUT(OPD, 0, 1, 0);
// 813 %finish
L_010E:;
// 814 %repeat
goto L_0105;
L_0106:;
// 815 cont = 0
CONT = 0;
// 816 %finish
L_0104:;
// 817 %continue
goto L_001F;
// 818 %else
L_0102:;
// 819 lp = j-1
LP = J - 1;
// 820 next char
NEXTCHAR();
// 821 %finish
// 822 %finish
L_00FF:;
// 823 %if pres char<' ' %start
if (PRESCHAR >= 32) goto L_010F;
// 824 next char %while pres char#nl
L_0110:;
if (PRESCHAR == 10) goto L_0111;
NEXTCHAR();
goto L_0110;
L_0111:;
// 825 instr out(0, 0, 0, 0)
INSTROUT(0, 0, 0, 0);
// 826 fault("Invalid string delimiter")
FAULT(_imp_str_literal_size(63, "Invalid string delimiter"));
// 827 %else
goto L_0112;
L_010F:;
// 828 delim = pres char
DELIM = PRESCHAR;
// 829 next char
NEXTCHAR();
// 830 %cycle
L_0113:;
// 831 %if pres char=nl %start
if (PRESCHAR != 10) goto L_0114;
// 832 %if cont=0 %start
if (CONT != 0) goto L_0115;
// 833 instr out(0, 0, 0, 0)
INSTROUT(0, 0, 0, 0);
// 834 fault("Illegal string")
FAULT(_imp_str_literal_size(63, "Illegal string"));
// 835 %finish
L_0115:;
// 836 %exit
goto L_0116;
// 837 %finish
L_0114:;
// 838 %if pres char=delim %start
if (PRESCHAR != DELIM) goto L_0117;
// 839 next char
NEXTCHAR();
// 840 %unless pres char=delim %start
if (PRESCHAR == DELIM) goto L_0118;
// 841 %if cont=0 %start
if (CONT != 0) goto L_0119;
// 842 instr out(0, 0, 0, 0)
INSTROUT(0, 0, 0, 0);
// 843 fault("Invalid string")
FAULT(_imp_str_literal_size(63, "Invalid string"));
// 844 %finish
L_0119:;
// 845 %exit
goto L_0116;
// 846 %finish
L_0118:;
// 847 %finish
L_0117:;
// 848 %if cont=0 %start
if (CONT != 0) goto L_011A;
// 849 i = lp
I = LP;
// 850 %cycle
L_011B:;
// 851 next char %while pres char#delim %and pres char#nl
L_011C:;
if (PRESCHAR == DELIM) goto L_011D;
if (PRESCHAR == 10) goto L_011D;
NEXTCHAR();
goto L_011C;
L_011D:;
// 852 %if pres char=delim %start
if (PRESCHAR != DELIM) goto L_011E;
// 853 next char
NEXTCHAR();
// 854 %finish
L_011E:;
// 855 %exit %unless pres char=delim
if (PRESCHAR == DELIM) goto L_011F;
goto L_0120;
L_011F:;
// 856 next char
NEXTCHAR();
// 857 %repeat
goto L_011B;
L_0120:;
// 858 instr out(line(i), 0, 1, 0)
INSTROUT(LINE[I - 1], 0, 1, 0);
// 859 lp = i-1
LP = I - 1;
// 860 next char
NEXTCHAR();
// 861 cont = 1
CONT = 1;
// 862 %else
goto L_0121;
L_011A:;
// 863 instr out(line(lp), 0, 1, 0)
INSTROUT(LINE[LP - 1], 0, 1, 0);
// 864 %finish
L_0121:;
// 865 next char
NEXTCHAR();
// 866 %repeat
goto L_0113;
L_0116:;
// 867 cont = 0
CONT = 0;
// 868 %finish
L_0112:;
// 869 %continue
goto L_001F;
// 870 !-----------------------------------------------------------------------
// 871 itype2(21): ! nam
case_ITYPE2_21:;
// 872 non dense = 1
NONDENSE = 1;
// 873 header = ""
_imp_strncpy(/*?*/ &HEADER, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 33);
// 874 %while pres char#nl %cycle
L_0122:;
if (PRESCHAR == 10) goto L_0123;
// 875 header <- header.to string(line(lp))
_imp_strncpy(/*?*/ &HEADER, ({
__typeof__(_imp_string255) tmp; /*C*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &HEADER, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(LINE[LP - 1]);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 33);
/* truncated copy of no more than 33 chars */
if (*_imp_LENGTH((_imp_string *)/*?*/ &HEADER) > 33) *_imp_LENGTH((_imp_string *)/*?*/ &HEADER) = 33;
// 876 next char
NEXTCHAR();
// 877 %repeat
goto L_0122;
L_0123:;
// 878 instr out(0, 0, -4, 0)
INSTROUT(0, 0, -4, 0);
// 879 fault("Illegal label") %unless lid=0
if (LID == 0) goto L_0124;
FAULT(_imp_str_literal_size(63, "Illegal label"));
L_0124:;
// 880 %continue
goto L_001F;
// 881 !-----------------------------------------------------------------------
// 882 itype2(22): ! opt
case_ITYPE2_22:;
// 883 i = lp
I = LP;
// 884 j = bchar
J = BCHAR;
// 885 %cycle
L_0125:;
// 886 %if get option(opt) %start
if (!(GETOPTION(/*?*/ &OPT))) goto L_0126;
// 887 ->option action(opt)
OPTIONACTION_line = __LINE__;
OPTIONACTION_file = __FILE__;
OPTIONACTION_index = OPT;
goto case_OPTIONACTION_dispatch;
// 888 option action(1):
case_OPTIONACTION_1:;
// 889 option action(2):
case_OPTIONACTION_2:;
// 890 bchar = ' '
BCHAR = 32;
// 891 -> next option
goto U_1000;
// 892 option action(3):
case_OPTIONACTION_3:;
// 893 option action(4):
case_OPTIONACTION_4:;
// 894 bchar = -1
BCHAR = -1;
// 895 -> next option
goto U_1000;
// 896 option action(5):
case_OPTIONACTION_5:;
// 897 option action(6):
case_OPTIONACTION_6:;
// 898 cflag = 1
CFLAG = 1;
// 899 -> next option
goto U_1000;
// 900 option action(7):
case_OPTIONACTION_7:;
// 901 option action(8):
case_OPTIONACTION_8:;
// 902 cflag = 0
CFLAG = 0;
// 903 -> next option
goto U_1000;
// 904 option action(9):
case_OPTIONACTION_9:;
// 905 drad = 4
DRAD = 4;
// 906 sp1 = 3
SP1 = 3;
// 907 sp2 = 6
SP2 = 6;
// 908 -> next option
goto U_1000;
// 909 option action(10):
case_OPTIONACTION_10:;
// 910 drad = 5
DRAD = 5;
// 911 sp1 = 3
SP1 = 3;
// 912 sp2 = 5
SP2 = 5;
// 913 -> next option
goto U_1000;
// 914 option action(11):
case_OPTIONACTION_11:;
// 915 drad = 8
DRAD = 8;
// 916 sp1 = 2
SP1 = 2;
// 917 sp2 = 4
SP2 = 4;
// 918 -> next option
goto U_1000;
// 919 option action(12):
case_OPTIONACTION_12:;
// 920 option action(13):
case_OPTIONACTION_13:;
// 921 option action(14):
case_OPTIONACTION_14:;
// 922 option action(15):
case_OPTIONACTION_15:;
// 923 eflag = 1
EFLAG = 1;
// 924 -> next option
goto U_1000;
// 925 option action(16):
case_OPTIONACTION_16:;
// 926 option action(17):
case_OPTIONACTION_17:;
// 927 eflag = 0
EFLAG = 0;
// 928 -> next option
goto U_1000;
// 929 option action(18):
case_OPTIONACTION_18:;
// 930 option action(19):
case_OPTIONACTION_19:;
// 931 fflag = 1
FFLAG = 1;
// 932 -> next option
goto U_1000;
// 933 option action(20):
case_OPTIONACTION_20:;
// 934 option action(21):
case_OPTIONACTION_21:;
// 935 fflag = 0
FFLAG = 0;
// 936 -> next option
goto U_1000;
// 937 option action(22):
case_OPTIONACTION_22:;
// 938 option action(23):
case_OPTIONACTION_23:;
// 939 gflag = 1
GFLAG = 1;
// 940 -> next option
goto U_1000;
// 941 option action(24):
case_OPTIONACTION_24:;
// 942 option action(25):
case_OPTIONACTION_25:;
// 943 gflag = 0
GFLAG = 0;
// 944 -> next option
goto U_1000;
// 945 option action(26):
case_OPTIONACTION_26:;
// 946 option action(27):
case_OPTIONACTION_27:;
// 947 lflag = 2
LFLAG = 2;
// 948 -> next option
goto U_1000;
// 949 option action(28):
case_OPTIONACTION_28:;
// 950 option action(29):
case_OPTIONACTION_29:;
// 951 lflag = 1
LFLAG = 1;
// 952 -> next option
goto U_1000;
// 953 option action(30):
case_OPTIONACTION_30:;
// 954 option action(31):
case_OPTIONACTION_31:;
// 955 lflag = 0
LFLAG = 0;
// 956 -> next option
goto U_1000;
// 957 option action(32):
case_OPTIONACTION_32:;
// 958 option action(33):
case_OPTIONACTION_33:;
// 959 pflag = 3
PFLAG = 3;
// 960 -> next option
goto U_1000;
// 961 option action(34):
case_OPTIONACTION_34:;
// 962 option action(35):
case_OPTIONACTION_35:;
// 963 pflag = 0
PFLAG = 0;
// 964 -> next option
goto U_1000;
// 965 option action(36):
case_OPTIONACTION_36:;
// 966 option action(37):
case_OPTIONACTION_37:;
// 967 sflag = 1
SFLAG = 1;
// 968 -> next option
goto U_1000;
// 969 option action(38):
case_OPTIONACTION_38:;
// 970 option action(39):
case_OPTIONACTION_39:;
// 971 sflag = 0
SFLAG = 0;
// 972 -> next option
goto U_1000;
// 973 option action(40):
case_OPTIONACTION_40:;
// 974 option action(41):
case_OPTIONACTION_41:;
// 975 tflag = 1
TFLAG = 1;
// 976 -> next option
goto U_1000;
// 977 option action(42):
case_OPTIONACTION_42:;
// 978 option action(43):
case_OPTIONACTION_43:;
// 979 tflag = 0
TFLAG = 0;
// 980 -> next option
goto U_1000;
// 981 option action(44):
case_OPTIONACTION_44:;
// 982 option action(45):
case_OPTIONACTION_45:;
// 983 wflag = 1
WFLAG = 1;
// 984 -> next option
goto U_1000;
// 985 option action(46):
case_OPTIONACTION_46:;
// 986 option action(47):
case_OPTIONACTION_47:;
// 987 wflag = 0
WFLAG = 0;
// 988 -> next option
goto U_1000;
// 989 option action(48):
case_OPTIONACTION_48:;
// 990 option action(49):
case_OPTIONACTION_49:;
// 991 xflag = 1
XFLAG = 1;
// 992 -> next option
goto U_1000;
// 993 option action(50):
case_OPTIONACTION_50:;
// 994 option action(51):
case_OPTIONACTION_51:;
// 995 xflag = 0
XFLAG = 0;
// 996 option action(-1):
case_OPTIONACTION_M1:;
// 997 option action(0):
case_OPTIONACTION_0:;
// 998 next option:
U_1000:;
// 999 %finish
L_0126:;
// 1000 %repeat %until %not more items
if (!(MOREITEMS())) goto L_0128;
goto L_0125;
L_0128:;
// 1001 %if lflag=2 %start
if (LFLAG != 2) goto L_0129;
// 1002 sp3 = line width-sp1-sp2*2-cflag*2-wflag-10
SP3 = 78 - SP1 - SP2 * 2 - CFLAG * 2 - WFLAG - 10;
// 1003 %else
goto L_012A;
L_0129:;
// 1004 sp3 = line width-wflag-7
SP3 = 78 - WFLAG - 7;
// 1005 %finish
L_012A:;
// 1006 instr out(0, 0, -4, 0)
INSTROUT(0, 0, -4, 0);
// 1007 fault("Illegal label") %unless lid=0
if (LID == 0) goto L_012B;
FAULT(_imp_str_literal_size(63, "Illegal label"));
L_012B:;
// 1008 lp = i-1
LP = I - 1;
// 1009 next char
NEXTCHAR();
// 1010 bchar = j
BCHAR = J;
// 1011 %cycle
L_012C:;
// 1012 %if get option(opt) %start
if (!(GETOPTION(/*?*/ &OPT))) goto L_012D;
// 1013 %if opt=1 %or opt=2 %start
if (OPT == 1) goto L_012E;
if (OPT != 2) goto L_012F;
L_012E:;
// 1014 bchar = ' '
BCHAR = 32;
// 1015 %finish %else %if opt=3 %or opt=4 %start
goto L_0130;
L_012F:;
if (OPT == 3) goto L_0131;
if (OPT != 4) goto L_0132;
L_0131:;
// 1016 bchar = -1
BCHAR = -1;
// 1017 %finish %else %if opt<0 %start
goto L_0130;
L_0132:;
if (OPT >= 0) goto L_0133;
// 1018 fault("Unknown option")
FAULT(_imp_str_literal_size(63, "Unknown option"));
// 1019 %finish
L_0133:;
L_0130:;
// 1020 %else
goto L_0134;
L_012D:;
// 1021 fault("Cannot evaluate operand")
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
// 1022 %finish
L_0134:;
// 1023 %repeat %until %not more items
if (!(MOREITEMS())) goto L_0135;
goto L_012C;
L_0135:;
// 1024 %continue
goto L_001F;
// 1025 !-----------------------------------------------------------------------
// 1026 itype2(23): ! page
case_ITYPE2_23:;
// 1027 %unless lid=0 %start
if (LID == 0) goto L_0136;
// 1028 instr out(0, 0, -4, 0)
INSTROUT(0, 0, -4, 0);
// 1029 fault("Illegal label")
FAULT(_imp_str_literal_size(63, "Illegal label"));
// 1030 %finish
L_0136:;
// 1031 nline(lines on page) %unless lflag=0
if (LFLAG == 0) goto L_0137;
NLINE(66);
L_0137:;
// 1032 %continue
goto L_001F;
// 1033 !-----------------------------------------------------------------------
// 1034 itype2(24): ! spc
case_ITYPE2_24:;
// 1035 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 1036 %unless lid=0 %start
if (LID == 0) goto L_0138;
// 1037 instr out(0, 0, -4, 0)
INSTROUT(0, 0, -4, 0);
// 1038 fault("Illegal label")
FAULT(_imp_str_literal_size(63, "Illegal label"));
// 1039 %finish
L_0138:;
// 1040 %unless lflag=0 %start
if (LFLAG == 0) goto L_0139;
// 1041 %if i=0 %start
if (I != 0) goto L_013A;
// 1042 nline(opd)
NLINE(OPD);
// 1043 %else
goto L_013B;
L_013A:;
// 1044 nline(1)
NLINE(1);
// 1045 %finish
L_013B:;
// 1046 %finish
L_0139:;
// 1047 !-----------------------------------------------------------------------
// 1048 %repeat
L_001F:;
goto L_0086;
// 1049 !-----------------------------------------------------------------------
// 1050 itype2(25):! end
case_ITYPE2_25:;
// 1051 instr out(0, 0, -4, 0)
INSTROUT(0, 0, -4, 0);
// 1052 fault("Illegal label") %unless lid=0
if (LID == 0) goto L_013C;
FAULT(_imp_str_literal_size(63, "Illegal label"));
L_013C:;
// 1053 %for i = 1, 1, nnames %cycle
// %for I = 1, 1, NNAMES %cycle
{
int _final = NNAMES;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, NNAMES");
I = 0;
L_013D:
if (I == _final) goto L_013E;
I += 1;
// 1054 fault("Symbol ".name(i)." has no value") %if nass(i)=0
if (NASS[I - 1] != 0) goto L_0140;
FAULT(
*({
__typeof__(_imp_string255) tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("Symbol "),
(_imp_string *)/*?*/ &NAME[I - 1]);
(_imp_string255 *)&tmp;
}),
(_imp_string *)/*?*/ _imp_str_literal_ptr(" has no value"));
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string63 *)&tmp;
})
);
L_0140:;
// 1055 %repeat
goto L_013D;
}
L_013E:;
// 1056 !-----------------------------------------------------------------------
// 1057 %unless xflag=0 %start
if (XFLAG == 0) goto L_0141;
// 1058 sqs(1, nnames)
SQS(1, NNAMES);
// 1059 nline(lines on page)
NLINE(66);
// 1060 print string(" Symbol Cross Reference Table")
_imp_PRINTSTRING(_imp_str_literal(" Symbol Cross Reference Table"));
// 1061 nline(2)
NLINE(2);
// 1062 sp3 = (linewidth-6-sp2)//6
SP3 = ((long)(78 - 6 - SP2) / (long)6);
// 1063 %for i = 1, 1, nnames %cycle
// %for I = 1, 1, NNAMES %cycle
{
int _final = NNAMES;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, NNAMES");
I = 0;
L_0142:
if (I == _final) goto L_0143;
I += 1;
// 1064 print string(name(i))
_imp_PRINTSTRING(
*({
__typeof__(_imp_string6) tmp = NAME[I - 1] /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1065 spaces(7-length(name(i)))
_imp_SPACES(7 - *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &NAME[I - 1]));
// 1066 %if nass(i)=0 %or nass(i)=2 %or nass(i)=4 %start
if (NASS[I - 1] == 0) goto L_0145;
if (NASS[I - 1] == 2) goto L_0145;
if (NASS[I - 1] != 4) goto L_0146;
L_0145:;
// 1067 print symbol('*') %for j = 1, 1, sp2
// %for J = 1, 1, SP2 %cycle
{
int _final = SP2;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, SP2");
J = 0;
L_0147:
if (J == _final) goto L_0148;
J += 1;
_imp_PRINTSYMBOL(42);
goto L_0147;
}
L_0148:;
// 1068 %else
goto L_014A;
L_0146:;
// 1069 print number(nval(i), 2)
PRINTNUMBER(NVAL[I - 1], 2);
// 1070 %finish
L_014A:;
// 1071 j = xhead(i)
J = XHEAD[I - 1];
// 1072 k = 0
K = 0;
// 1073 %cycle
L_014B:;
// 1074 l = xlink(j)
L = XLINK[J - 1];
// 1075 xlink(j) = k
XLINK[J - 1] = K;
// 1076 k = j
K = J;
// 1077 j = l
J = L;
// 1078 %repeat %until j=0
if (J == 0) goto L_014C;
goto L_014B;
L_014C:;
// 1079 j = 0
J = 0;
// 1080 %cycle
L_014D:;
// 1081 %if j=sp3 %start
if (J != SP3) goto L_014E;
// 1082 nline(1)
NLINE(1);
// 1083 spaces(7+sp2)
_imp_SPACES(7 + SP2);
// 1084 j = 0
J = 0;
// 1085 %finish
L_014E:;
// 1086 write(xentry(k), 5)
_imp_WRITE(XENTRY[K - 1], 5);
// 1087 j = j+1
J = J + 1;
// 1088 k = xlink(k)
K = XLINK[K - 1];
// 1089 %repeat %until k=0
if (K == 0) goto L_014F;
goto L_014D;
L_014F:;
// 1090 nline(1)
NLINE(1);
// 1091 %repeat
goto L_0142;
}
L_0143:;
// 1092 %finish %else %unless sflag=0 %start
goto L_0150;
L_0141:;
if (SFLAG == 0) goto L_0151;
// 1093 sqs(1, nnames)
SQS(1, NNAMES);
// 1094 nline(lines on page)
NLINE(66);
// 1095 print string(" Symbol Table")
_imp_PRINTSTRING(_imp_str_literal(" Symbol Table"));
// 1096 nline(2)
NLINE(2);
// 1097 sp3 = (line width+8-sp2)//15
SP3 = ((long)(78 + 8 - SP2) / (long)15);
// 1098 sp1 = (linewidth-sp3*15+9-sp2)>>1
SP1 = (unsigned int)78 - SP3 * 15 + 9 - SP2 >> 1;
// 1099 %for j = 1, 1, nnames %cycle
// %for J = 1, 1, NNAMES %cycle
{
int _final = NNAMES;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = 1, 1, NNAMES");
J = 0;
L_0152:
if (J == _final) goto L_0153;
J += 1;
// 1100 %if (j-1)=(j-1)//sp3*sp3 %start
if (J - 1 != ((long)(J - 1) / (long)SP3) * SP3) goto L_0154;
// 1101 nline(1)
NLINE(1);
// 1102 spaces(sp2)
_imp_SPACES(SP2);
// 1103 %else
goto L_0155;
L_0154:;
// 1104 spaces(8-sp2)
_imp_SPACES(8 - SP2);
// 1105 %finish
L_0155:;
// 1106 print string(name(j))
_imp_PRINTSTRING(
*({
__typeof__(_imp_string6) tmp = NAME[J - 1] /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1107 spaces(7-length(name(j)))
_imp_SPACES(7 - *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &NAME[J - 1]));
// 1108 %if nass(j)=0 %or nass(j)=2 %or nass(j)=4 %start
if (NASS[J - 1] == 0) goto L_0156;
if (NASS[J - 1] == 2) goto L_0156;
if (NASS[J - 1] != 4) goto L_0157;
L_0156:;
// 1109 print symbol('*') %for i = 1, 1, sp2
// %for I = 1, 1, SP2 %cycle
{
int _final = SP2;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, SP2");
I = 0;
L_0158:
if (I == _final) goto L_0159;
I += 1;
_imp_PRINTSYMBOL(42);
goto L_0158;
}
L_0159:;
// 1110 %else
goto L_015A;
L_0157:;
// 1111 print number(nval(j),2)
PRINTNUMBER(NVAL[J - 1], 2);
// 1112 %finish
L_015A:;
// 1113 %repeat
goto L_0152;
}
L_0153:;
// 1114 nline(1)
NLINE(1);
// 1115 %finish
L_0151:;
L_0150:;
// 1116 nline(2)
NLINE(2);
// 1117 spaces(2)
_imp_SPACES(2);
// 1118 %if faults=0 %start
if (FAULTS != 0) goto L_015B;
// 1119 print string("No")
_imp_PRINTSTRING(_imp_str_literal("No"));
// 1120 %else
goto L_015C;
L_015B:;
// 1121 write(faults, 0)
_imp_WRITE(FAULTS, 0);
// 1122 %finish
L_015C:;
// 1123 print string(" fault")
_imp_PRINTSTRING(_imp_str_literal(" fault"));
// 1124 print symbol('s') %unless faults=1
if (FAULTS == 1) goto L_015D;
_imp_PRINTSYMBOL(115);
L_015D:;
// 1125 print string(" in this assembly.")
_imp_PRINTSTRING(_imp_str_literal(" in this assembly."));
// 1126 newline
_imp_NEWLINE();
// 1127 select output(0)
_imp_SELECTOUTPUT(0);
// 1128 spaces(2)
_imp_SPACES(2);
// 1129 %if faults=0 %start
if (FAULTS != 0) goto L_015E;
// 1130 write(ln, 0)
_imp_WRITE(LN, 0);
// 1131 print string(" line")
_imp_PRINTSTRING(_imp_str_literal(" line"));
// 1132 print symbol('s') %unless ln=1
if (LN == 1) goto L_015F;
_imp_PRINTSYMBOL(115);
L_015F:;
// 1133 print string(" assembled.")
_imp_PRINTSTRING(_imp_str_literal(" assembled."));
// 1134 %else
goto L_0160;
L_015E:;
// 1135 write(faults, 0)
_imp_WRITE(FAULTS, 0);
// 1136 print string(" fault")
_imp_PRINTSTRING(_imp_str_literal(" fault"));
// 1137 print symbol('s') %unless faults=1
if (FAULTS == 1) goto L_0161;
_imp_PRINTSYMBOL(115);
L_0161:;
// 1138 print string(" in this assembly.")
_imp_PRINTSTRING(_imp_str_literal(" in this assembly."));
// 1139 %finish
L_0160:;
// 1140 new line
_imp_NEWLINE();
// 1141 close
CLOSE();
// 1142 %stop
_imp_stop(0);
// 1143 !---------------------------------------------------------------------
// 1144 %predicate is typed(%string(255) source, %string(255)%name file)
int ISTYPED(_imp_string255 SOURCE, _imp_string255 * FILE) {
// 1145 %integer i
int I;
// 1146
// 1147 %for i = 1, 1, length(source) %cycle
// %for I = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&SOURCE) %cycle
{
int _final = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &SOURCE);
if (invalid_for_loop(1, 1, _final))
_imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&SOURCE)");
I = 0;
L_0162:
if (I == _final) goto L_0163;
I += 1;
// 1148 file = substring(source, 1, i-1) %and %true %if charno(source, i)='.'
if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, I) != 46) goto L_0164;
*FILE = _imp_SUBSTRING((_imp_string255 *)/*p*/ /*?*/ &SOURCE, 1, I - 1);
return 1 /*TRUE*/;
L_0164:;
// 1149 %repeat
goto L_0162;
}
L_0163:;
// 1150 file = source
*FILE = SOURCE;
// 1151 %false
return 0 /*FALSE*/;
// 1152 %end
} /* end of ISTYPED */
// 1153 !-------------------------------------------------------
// 1154 %predicate matches(%string(255) source, pattern,
int MATCHES(_imp_string255 SOURCE, _imp_string255 PATTERN, int MIN, int *I) {
// 1155+ %integer min, %integer %name i)
// 1156 %integer l
int L;
// 1157 l = length(pattern)
L = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PATTERN);
// 1158 %if length(pattern)>=length(source) %start
if (*_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PATTERN) < *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &SOURCE))
goto L_0165;
// 1159 l = length(source)
L = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &SOURCE);
// 1160 %else
goto L_0166;
L_0165:;
// 1161 l = length(pattern)
L = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &PATTERN);
// 1162 %finish
L_0166:;
// 1163 %for i = 1, 1, l %cycle
// %for *I = 1, 1, L %cycle
{
int _final = L;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle *I = 1, 1, L");
*I = 0;
L_0167:
if (*I == _final) goto L_0168;
*I += 1;
// 1164 %unless charno(source, i)=charno(pattern, i) %start
if (*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, *I) ==
*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &PATTERN, *I))
goto L_0169;
// 1165 %if 'A'<=charno(source, i)<='Z' %start
{
// Double-sided test on _imp_CHARNO((_imp_string255 *)/*p*//*?*/&SOURCE, *I) (Part I)
unsigned char tmp;
if (65 > (tmp = *_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, *I))) goto L_016A;
// Double-sided test on _imp_CHARNO((_imp_string255 *)/*p*//*?*/&SOURCE, *I) (Part II)
if (tmp > 90) goto L_016A;
}
// 1166 %false
return 0 /*FALSE*/;
// 1167 %finish %else %if i<=min %start
L_016A:;
if (*I > MIN) goto L_016B;
// 1168 %false
return 0 /*FALSE*/;
// 1169 %else
L_016B:;
// 1170 %true
return 1 /*TRUE*/;
// 1171 %finish
// 1172 %finish
L_0169:;
// 1173 %repeat
goto L_0167;
}
L_0168:;
// 1174 i = i+1
*I = *I + 1;
// 1175 %false %if i<=min
if (*I > MIN) goto L_016C;
return 0 /*FALSE*/;
L_016C:;
// 1176 %true
return 1 /*TRUE*/;
// 1177 %end
} /* end of MATCHES */
// 1178 !---------------------------------------------------------------------
// 1179 %string(255) %function lc(%string(255) source)
_imp_string255 LC(_imp_string255 SOURCE) {
// 1180 %string(255) result
_imp_string255 RESULT;
// 1181 %integer i
int I;
// 1182
// 1183 result = ""
_imp_strncpy(/*?*/ &RESULT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 255);
// 1184 %for i = 1, 1, length(source) %cycle
// %for I = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&SOURCE) %cycle
{
int _final = *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &SOURCE);
if (invalid_for_loop(1, 1, _final))
_imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, *_imp_LENGTH((_imp_string255 *)/*p*//*?*/&SOURCE)");
I = 0;
L_016D:
if (I == _final) goto L_016E;
I += 1;
// 1185 %if 'A'<=charno(source, i)&127<='Z' %start
{
// Double-sided test on *_imp_CHARNO((_imp_string255 *)/*p*//*?*/&SOURCE, I) & 127 (Part I)
unsigned char tmp;
if (65 > (tmp = *_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, I) & 127)) goto L_016F;
// Double-sided test on *_imp_CHARNO((_imp_string255 *)/*p*//*?*/&SOURCE, I) & 127 (Part II)
if (tmp > 90) goto L_016F;
}
// 1186 result = result.tostring((charno(source, i)&127)+'a'-'A')
_imp_strncpy(/*?*/ &RESULT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &RESULT, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(
(*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, I) & 127) + 97 - 65);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 1187 %else
goto L_0170;
L_016F:;
// 1188 result = result.tostring(charno(source, i)&127)
_imp_strncpy(/*?*/ &RESULT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join(
(_imp_string *)/*?*/ &RESULT, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &SOURCE, I) & 127);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 1189 %finish
L_0170:;
// 1190 %repeat
goto L_016D;
}
L_016E:;
// 1191 %result = result
return *(_imp_string255 *)/*?*/ &RESULT;
// 1192 %end
} /* end of LC */
// 1193 !-----------------------------------------------------------------------
// 1194 %routine read line
void READLINE(void) {
// 1195 %integer i
int I;
// 1196 %on %event 9 %start
if (!_imp_on_event(9)) goto L_0171;
// 1197 %if i=1 %start
if (I != 1) goto L_0172;
// 1198 line(1) = ' '
LINE[0] = 32;
// 1199 line(2) = 'E'
LINE[1] = 69;
// 1200 line(3) = 'N'
LINE[2] = 78;
// 1201 line(4) = 'D'
LINE[3] = 68;
// 1202 line(5) = nl
LINE[4] = 10;
// 1203 %else
goto L_0173;
L_0172:;
// 1204 line(i) = nl
LINE[I - 1] = 10;
// 1205 %finish
L_0173:;
// 1206 -> eof exit
goto U_1001;
// 1207 %finish
L_0171:;
// 1208
// 1209 ln=ln+1
LN = LN + 1;
// 1210 %for i = 1, 1, max line+1 %cycle
// %for I = 1, 1, 512 + 1 %cycle
{
int _final = 512 + 1;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, 512 + 1");
I = 0;
L_0174:
if (I == _final) goto L_0175;
I += 1;
// 1211 read symbol(line(i))
_imp_READSYMBOL(/*?*/ &LINE[I - 1]);
// 1212 %exit %if line(i)&127=nl %or line(i)&127=12
if (LINE[I - 1] & 127 == 10) goto L_0144;
if (LINE[I - 1] & 127 != 12) goto L_0176;
L_0144:;
goto L_0175;
L_0176:;
// 1213 %repeat
goto L_0174;
}
L_0175:;
// 1214 read symbol(line(i)) %while line(i)&127#nl %and line(i)&255#12
L_0177:;
if (LINE[I - 1] & 127 == 10) goto L_0178;
if (LINE[I - 1] & 255 == 12) goto L_0178;
_imp_READSYMBOL(/*?*/ &LINE[I - 1]);
goto L_0177;
L_0178:;
// 1215 eof exit:
U_1001:;
// 1216 lp = 0
LP = 0;
// 1217 next char
NEXTCHAR();
// 1218 %end
return;
} /* end of READLINE */
// 1219 !-----------------------------------------------------------------------
// 1220 %routine next char
void NEXTCHAR(void) {
// 1221
// 1222 lp = lp+1
LP = LP + 1;
// 1223 pres char = line(lp)&127
PRESCHAR = LINE[LP - 1] & 127;
// 1224 %if 'a'<=pres char<='z' %start
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (97 > (tmp = PRESCHAR)) goto L_0179;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 122) goto L_0179;
}
// 1225 pres char = pres char+'A'-'a'
PRESCHAR = PRESCHAR + 65 - 97;
// 1226 %finish %else %if pres char=12 %start
goto L_017A;
L_0179:;
if (PRESCHAR != 12) goto L_017B;
// 1227 pres char = nl
PRESCHAR = 10;
// 1228 %finish %else %if pres char=9 %start
goto L_017A;
L_017B:;
if (PRESCHAR != 9) goto L_017C;
// 1229 pres char = ' '
PRESCHAR = 32;
// 1230 %finish
L_017C:;
L_017A:;
// 1231 %end
return;
} /* end of NEXTCHAR */
// 1232 !-----------------------------------------------------------------------
// 1233 %predicate more items
int MOREITEMS(void) {
// 1234
// 1235 next char %while pres char=bchar
L_017D:;
if (PRESCHAR != BCHAR) goto L_017E;
NEXTCHAR();
goto L_017D;
L_017E:;
// 1236 %false %unless pres char=','
if (PRESCHAR == 44) goto L_017F;
return 0 /*FALSE*/;
L_017F:;
// 1237 next char %until pres char#bchar
L_0180:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_0181;
goto L_0180;
L_0181:;
// 1238 %true
return 1 /*TRUE*/;
// 1239 %end
} /* end of MOREITEMS */
// 1240 !-----------------------------------------------------------------------
// 1241 %predicate get option(%integer %name opt)
int GETOPTION(int *OPT) {
// 1242 %string(11) option
_imp_string11 OPTION;
// 1243
// 1244 %if 'A'<=pres char<='Z' %start
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_0182;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 90) goto L_0182;
}
// 1245 option = to string(pres char)
_imp_strncpy(/*?*/ &OPTION, ({
__typeof__(_imp_string1) tmp; /*B*/
tmp = _imp_TOSTRING(PRESCHAR);
(void *)&tmp;
}),
/*max:*/ 11);
// 1246 %cycle
L_0183:;
// 1247 next char
NEXTCHAR();
// 1248 %exit %unless 'A'<=pres char<='Z' %or '0'<=pres char<='9'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_0184;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 90) goto L_0185;
}
L_0184:;
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_0186;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 57) goto L_0185;
}
L_0186:;
goto L_0187;
L_0185:;
// 1249 option <- option.to string(pres char)
_imp_strncpy(/*?*/ &OPTION, ({
__typeof__(_imp_string255) tmp; /*C*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &OPTION, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(PRESCHAR);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 11);
/* truncated copy of no more than 11 chars */
if (*_imp_LENGTH((_imp_string *)/*?*/ &OPTION) > 11) *_imp_LENGTH((_imp_string *)/*?*/ &OPTION) = 11;
// 1250 %repeat
goto L_0183;
L_0187:;
// 1251 %for opt = 1, 1, no options %cycle
// %for *OPT = 1, 1, 51 %cycle
{
*OPT = 0;
L_0188:
if (*OPT == 51) goto L_0189;
*OPT += 1;
// 1252 %true %if option text(opt)=option
if (_imp_strcmp((_imp_string *)/*?*/ &OPTIONTEXT[*OPT - 1], (_imp_string *)/*?*/ &OPTION) != 0) goto L_018B;
return 1 /*TRUE*/;
L_018B:;
// 1253 %repeat
goto L_0188;
}
L_0189:;
// 1254 opt = -1
*OPT = -1;
// 1255 %true
return 1 /*TRUE*/;
// 1256 %else
L_0182:;
// 1257 opt = 0
*OPT = 0;
// 1258 %false %unless pres char=','
if (PRESCHAR == 44) goto L_018C;
return 0 /*FALSE*/;
L_018C:;
// 1259 next char
NEXTCHAR();
// 1260 %true
return 1 /*TRUE*/;
// 1261 %finish
// 1262 %end
} /* end of GETOPTION */
// 1263 !-----------------------------------------------------------------------
// 1264 %integerfn get name(%integername nid)
int GETNAME(int *NID) {
// 1265 %string(6) n
_imp_string6 N;
// 1266 %integer h,l
int H;
int L;
// 1267
// 1268 nid = 0 %and %result = 1 %unless 'A'<=pres char<='Z'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_013F;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 90) goto L_018D;
}
L_013F:;
*NID = 0;
return 1;
L_018D:;
// 1269 h=pres char-'0'
H = PRESCHAR - 48;
// 1270 n=tostring(pres char)
_imp_strncpy(/*?*/ &N, ({
__typeof__(_imp_string1) tmp; /*B*/
tmp = _imp_TOSTRING(PRESCHAR);
(void *)&tmp;
}),
/*max:*/ 6);
// 1271 l = 1
L = 1;
// 1272 %cycle
L_018E:;
// 1273 next char
NEXTCHAR();
// 1274 %exit %unless 'A'<=pres char<='Z' %or '0'<=pres char<='9'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_018A;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 90) goto L_018F;
}
L_018A:;
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_0190;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 57) goto L_018F;
}
L_0190:;
goto L_0191;
L_018F:;
// 1275 l = l+1
L = L + 1;
// 1276 h=h<<4+pres char-'0' %and n=n.tostring(pres char) %unless l>6
if (L > 6) goto L_0192;
H = (H << 4) + PRESCHAR - 48;
_imp_strncpy(/*?*/ &N, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &N, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(PRESCHAR);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 6);
L_0192:;
// 1277 %repeat
goto L_018E;
L_0191:;
// 1278 h=h&32767
H = H & 32767;
// 1279 h=h-h//nhash*nhash
H = H - ((long)H / (long)67) * 67;
// 1280 l=hnlink(h)
L = HNLINK[H];
// 1281 %while l#0 %cycle
L_0193:;
if (L == 0) goto L_0194;
// 1282 %if name(l)=n %start
if (_imp_strcmp((_imp_string *)/*?*/ &NAME[L - 1], (_imp_string *)/*?*/ &N) != 0) goto L_0195;
// 1283 nid = l
*NID = L;
// 1284 %if pass=3 %and xxentries<=xentries %and look ahead=0 %start
if (PASS != 3) goto L_0196;
if (XXENTRIES > 1024) goto L_0196;
if (LOOKAHEAD != 0) goto L_0196;
// 1285 xxentries = xxentries+1
XXENTRIES = XXENTRIES + 1;
// 1286 %if xxentries>xentries %start
if (XXENTRIES <= 1024) goto L_0197;
// 1287 fault("Too many references")
FAULT(_imp_str_literal_size(63, "Too many references"));
// 1288 %else
goto L_0198;
L_0197:;
// 1289 xlink(xxentries) = xhead(l)
XLINK[XXENTRIES - 1] = XHEAD[L - 1];
// 1290 xentry(xxentries) = ln
XENTRY[XXENTRIES - 1] = LN;
// 1291 xhead(l) = xxentries
XHEAD[L - 1] = XXENTRIES;
// 1292 %finish
L_0198:;
// 1293 %finish
L_0196:;
// 1294 %result = 0
return 0;
// 1295 %finish
L_0195:;
// 1296 l=nlink(l)
L = NLINK[L - 1];
// 1297 %repeat
goto L_0193;
L_0194:;
// 1298 fault("Too many names") %and %stop %if nnames=names
if (NNAMES != 255) goto L_0199;
FAULT(_imp_str_literal_size(63, "Too many names"));
_imp_stop(0);
L_0199:;
// 1299 nnames = nnames+1
NNAMES = NNAMES + 1;
// 1300 name(nnames) = n
_imp_strncpy(/*?*/ &NAME[NNAMES - 1], ({
__typeof__(_imp_string6) tmp; /*B*/
tmp = N;
(void *)&tmp;
}),
/*max:*/ 6);
// 1301 nlink(nnames) = hnlink(h)
NLINK[NNAMES - 1] = HNLINK[H];
// 1302 %if n="A" %or n="X" %or n="Y" %start
if (_imp_strcmp((_imp_string *)/*?*/ &N, (_imp_string *)/*?*/ _imp_str_literal_ptr("A")) == 0) goto L_019A;
if (_imp_strcmp((_imp_string *)/*?*/ &N, (_imp_string *)/*?*/ _imp_str_literal_ptr("X")) == 0) goto L_019A;
if (_imp_strcmp((_imp_string *)/*?*/ &N, (_imp_string *)/*?*/ _imp_str_literal_ptr("Y")) != 0) goto L_019B;
L_019A:;
// 1303 nass(nnames) = 2
NASS[NNAMES - 1] = 2;
// 1304 %else
goto L_019C;
L_019B:;
// 1305 nass(nnames) = 0
NASS[NNAMES - 1] = 0;
// 1306 %finish
L_019C:;
// 1307 nval(nnames) = 0
NVAL[NNAMES - 1] = 0;
// 1308 %if pass=3 %and xxentries<=xentries %start
if (PASS != 3) goto L_019D;
if (XXENTRIES > 1024) goto L_019D;
// 1309 xxentries = xxentries+1
XXENTRIES = XXENTRIES + 1;
// 1310 %if xxentries>xentries %start
if (XXENTRIES <= 1024) goto L_019E;
// 1311 fault("Too many references")
FAULT(_imp_str_literal_size(63, "Too many references"));
// 1312 %else
goto L_019F;
L_019E:;
// 1313 xlink(xxentries) = 0
XLINK[XXENTRIES - 1] = 0;
// 1314 xentry(xxentries) = ln
XENTRY[XXENTRIES - 1] = LN;
// 1315 xhead(nnames) = xxentries
XHEAD[NNAMES - 1] = XXENTRIES;
// 1316 %finish
L_019F:;
// 1317 %else
goto L_01A0;
L_019D:;
// 1318 xhead(nnames) = 0
XHEAD[NNAMES - 1] = 0;
// 1319 %finish
L_01A0:;
// 1320 hnlink(h) = nnames
HNLINK[H] = NNAMES;
// 1321 nid = nnames
*NID = NNAMES;
// 1322 %result = 0
return 0;
// 1323 %end
} /* end of GETNAME */
// 1324 !-----------------------------------------------------------------------
// 1325 %predicate get instr(%integername iid)
int GETINSTR(int *IID) {
// 1326 %string(4) i
_imp_string4 I;
// 1327 %integer h,l
int H;
int L;
// 1328
// 1329 iid=0
*IID = 0;
// 1330 %false %unless 'A'<=pres char<='Z'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_01A1;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 90) goto L_01A2;
}
L_01A1:;
return 0 /*FALSE*/;
L_01A2:;
// 1331 h=pres char-'0'
H = PRESCHAR - 48;
// 1332 i=tostring(pres char)
_imp_strncpy(/*?*/ &I, ({
__typeof__(_imp_string1) tmp; /*B*/
tmp = _imp_TOSTRING(PRESCHAR);
(void *)&tmp;
}),
/*max:*/ 4);
// 1333 %for l = 2, 1, 4 %cycle
// %for L = 2, 1, 4 %cycle
{
L = 1;
L_01A3:
if (L == 4) goto L_01A4;
L += 1;
// 1334 next char
NEXTCHAR();
// 1335 -> goti %unless 'A'<=pres char<='Z'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_01A6;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 90) goto L_01A7;
}
L_01A6:;
goto U_1002;
L_01A7:;
// 1336 h=h<<4+pres char-'0'
H = (H << 4) + PRESCHAR - 48;
// 1337 i=i.tostring(pres char)
_imp_strncpy(/*?*/ &I, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &I, ({
__typeof__(_imp_string1) tmp; /*E*/
tmp = _imp_TOSTRING(PRESCHAR);
(void *)&tmp;
}));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 4);
// 1338 %repeat
goto L_01A3;
}
L_01A4:;
// 1339 next char
NEXTCHAR();
// 1340 %false %if 'A'<=pres char<='Z'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_01A8;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 90) goto L_01A8;
}
return 0 /*FALSE*/;
L_01A8:;
// 1341 goti: h=h&32767
U_1002:;
H = H & 32767;
// 1342 h=h-h//ihash*ihash
H = H - ((long)H / (long)59) * 59;
// 1343 l=hilink(h)
L = HILINK[H];
// 1344 %while l#0 %cycle
L_01A9:;
if (L == 0) goto L_01AA;
// 1345 iid=l %and %true %if instr(l)=i
if (_imp_strcmp((_imp_string *)/*?*/ &INSTR[L - 1], (_imp_string *)/*?*/ &I) != 0) goto L_01AB;
*IID = L;
return 1 /*TRUE*/;
L_01AB:;
// 1346 l=ilink(l)
L = ILINK[L - 1];
// 1347 %repeat
goto L_01A9;
L_01AA:;
// 1348 %false
return 0 /*FALSE*/;
// 1349 %end
} /* end of GETINSTR */
// 1350 !-----------------------------------------------------------------------
// 1351 %routine evaluate(%integer %name a, %integer b, %byte %integer op)
void EVALUATE(int *A, int B, unsigned char OP) {
// 1352
// 1353 %if op='+' %start
if (OP != 43) goto L_01AC;
// 1354 a = a+b
*A = *A + B;
// 1355 %finish %else %if op='-' %start
goto L_01AD;
L_01AC:;
if (OP != 45) goto L_01AE;
// 1356 a = a-b
*A = *A - B;
// 1357 %finish %else %if op='*' %start
goto L_01AD;
L_01AE:;
if (OP != 42) goto L_01AF;
// 1358 a = a*b
*A = *A * B;
// 1359 %finish %else %if op='/' %start
goto L_01AD;
L_01AF:;
if (OP != 47) goto L_01B0;
// 1360 a = a//b
*A = ((long)*A / (long)B);
// 1361 %finish %else %if op='|' %start
goto L_01AD;
L_01B0:;
if (OP != 124) goto L_01B1;
// 1362 a = a-a//b*b
*A = *A - ((long)*A / (long)B) * B;
// 1363 %finish %else %if op='!' %start
goto L_01AD;
L_01B1:;
if (OP != 33) goto L_01B2;
// 1364 a = a!b
*A = *A | B;
// 1365 %finish %else %if op='&' %start
goto L_01AD;
L_01B2:;
if (OP != 38) goto L_01B3;
// 1366 a = a&b
*A = *A & B;
// 1367 %finish %else %if op='\' %start
goto L_01AD;
L_01B3:;
if (OP != 92) goto L_01B4;
// 1368 a = a!!b
*A = *A ^ B;
// 1369 %finish %else %if op='<' %start
goto L_01AD;
L_01B4:;
if (OP != 60) goto L_01B5;
// 1370 a = a<<b
*A = *A << B;
// 1371 %finish %else %if op='>' %start
goto L_01AD;
L_01B5:;
if (OP != 62) goto L_01B6;
// 1372 a = a>>b
*A = (unsigned int)*A >> B;
// 1373 %finish
L_01B6:;
L_01AD:;
// 1374 %end
return;
} /* end of EVALUATE */
// 1375 !-----------------------------------------------------------------------
// 1376 %integer %function get term(%integer %name opd)
int GETTERM(int *OPD) {
// 1377 %integer i
int I;
// 1378
// 1379 %while pres char='+' %cycle
L_01B7:;
if (PRESCHAR != 43) goto L_01B8;
// 1380 next char %until pres char#bchar
L_01B9:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_01BA;
goto L_01B9;
L_01BA:;
// 1381 %repeat
goto L_01B7;
L_01B8:;
// 1382 %if pres char='-' %start
if (PRESCHAR != 45) goto L_01BB;
// 1383 next char %until pres char#bchar
L_01BC:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_01BD;
goto L_01BC;
L_01BD:;
// 1384 i = get term(opd)
I = GETTERM(OPD);
// 1385 opd = -opd
*OPD = -*OPD;
// 1386 %finish %else %if pres char='\' %start
goto L_01BE;
L_01BB:;
if (PRESCHAR != 92) goto L_01BF;
// 1387 next char %until pres char#bchar
L_01C0:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_01C1;
goto L_01C0;
L_01C1:;
// 1388 i = get term(opd)
I = GETTERM(OPD);
// 1389 opd = \opd
*OPD = (~*OPD);
// 1390 %finish %else %if pres char='(' %start
goto L_01BE;
L_01BF:;
if (PRESCHAR != 40) goto L_01C2;
// 1391 next char %until pres char#bchar
L_01C3:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_01C4;
goto L_01C3;
L_01C4:;
// 1392 i = get expression(opd)
I = GETEXPRESSION(OPD);
// 1393 %if i=0 %start
if (I != 0) goto L_01C5;
// 1394 next char %while pres char=bchar
L_01C6:;
if (PRESCHAR != BCHAR) goto L_01C7;
NEXTCHAR();
goto L_01C6;
L_01C7:;
// 1395 %if pres char=')' %start
if (PRESCHAR != 41) goto L_01C8;
// 1396 next char
NEXTCHAR();
// 1397 %else
goto L_01C9;
L_01C8:;
// 1398 i = 0
I = 0;
// 1399 %finish
L_01C9:;
// 1400 %finish
L_01C5:;
// 1401 %finish %else %if get name(i)=0 %start
goto L_01BE;
L_01C2:;
if (GETNAME(/*?*/ &I) != 0) goto L_01CA;
// 1402 %if pass=1 %or nass(i)=1 %or nass(i)=3 %start
if (PASS == 1) goto L_01CB;
if (NASS[I - 1] == 1) goto L_01CB;
if (NASS[I - 1] != 3) goto L_01CC;
L_01CB:;
// 1403 opd = nval(i)
*OPD = NVAL[I - 1];
// 1404 i = 0
I = 0;
// 1405 %else
goto L_01CD;
L_01CC:;
// 1406 i = 1
I = 1;
// 1407 %finish
L_01CD:;
// 1408 %else
goto L_01BE;
L_01CA:;
// 1409 i = get const(opd)
I = GETCONST(OPD);
// 1410 %finish
L_01BE:;
// 1411 %result = i
return I;
// 1412 %end
} /* end of GETTERM */
// 1413 !-----------------------------------------------------------------------
// 1414 %integer %function get expression(%integer %name opd)
int GETEXPRESSION(int *OPD) {
// 1415 %integer sp, prio, i
int SP;
int PRIO;
int I;
// 1416 %byte %integer %array op stk, prio stk(1:5)
unsigned char OPSTK[5];
unsigned char PRIOSTK[5];
// 1417 %integer %array opd stk(0:5)
int OPDSTK[6];
// 1418
// 1419 %result = 1 %unless get term(opd stk(0))=0
if (GETTERM(/*?*/ &OPDSTK[0]) == 0) goto L_01CE;
return 1;
L_01CE:;
// 1420 sp = 0
SP = 0;
// 1421 i = 0
I = 0;
// 1422 %cycle
L_01CF:;
// 1423 next char %while pres char=bchar
L_01D0:;
if (PRESCHAR != BCHAR) goto L_01D1;
NEXTCHAR();
goto L_01D0;
L_01D1:;
// 1424 %if pres char='!' %or pres char='\' %start
if (PRESCHAR == 33) goto L_01D2;
if (PRESCHAR != 92) goto L_01D3;
L_01D2:;
// 1425 prio = 0
PRIO = 0;
// 1426 %finish %else %if pres char='&' %start
goto L_01D4;
L_01D3:;
if (PRESCHAR != 38) goto L_01D5;
// 1427 prio = 1
PRIO = 1;
// 1428 %finish %else %if pres char='+' %or pres char='-' %start
goto L_01D4;
L_01D5:;
if (PRESCHAR == 43) goto L_01D6;
if (PRESCHAR != 45) goto L_01D7;
L_01D6:;
// 1429 prio = 2
PRIO = 2;
// 1430 %finish %else %if pres char='*' %or pres char='/' %or %c
goto L_01D4;
L_01D7:;
if (PRESCHAR == 42) goto L_01D8;
if (PRESCHAR == 47) goto L_01D8;
if (PRESCHAR != 124) goto L_01D9;
L_01D8:;
// 1431+ pres char='|' %start
// 1432 prio = 3
PRIO = 3;
// 1433 %finish %else %if pres char='<' %or pres char='>' %start
goto L_01D4;
L_01D9:;
if (PRESCHAR == 60) goto L_01DA;
if (PRESCHAR != 62) goto L_01DB;
L_01DA:;
// 1434 prio = 4
PRIO = 4;
// 1435 %else
goto L_01D4;
L_01DB:;
// 1436 %exit
goto L_01DC;
// 1437 %finish
L_01D4:;
// 1438 %while sp>0 %and prio stk(sp)>=prio %cycle
L_01DD:;
if (SP <= 0) goto L_01DE;
if (PRIOSTK[SP - 1] < PRIO) goto L_01DE;
// 1439 evaluate(opd stk(sp-1), opd stk(sp), op stk(sp))
EVALUATE(/*?*/ &OPDSTK[SP - 1], OPDSTK[SP], OPSTK[SP - 1]);
// 1440 sp = sp-1
SP = SP - 1;
// 1441 %repeat
goto L_01DD;
L_01DE:;
// 1442 sp = sp+1
SP = SP + 1;
// 1443 op stk(sp) = pres char
OPSTK[SP - 1] = PRESCHAR;
// 1444 prio stk(sp) = prio
PRIOSTK[SP - 1] = PRIO;
// 1445 next char %until pres char#bchar
L_01DF:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_01E0;
goto L_01DF;
L_01E0:;
// 1446 %unless get term(opd stk(sp))=0 %start
if (GETTERM(/*?*/ &OPDSTK[SP]) == 0) goto L_01E1;
// 1447 sp = sp-1
SP = SP - 1;
// 1448 i = 1
I = 1;
// 1449 %exit
goto L_01DC;
// 1450 %finish
L_01E1:;
// 1451 %repeat
goto L_01CF;
L_01DC:;
// 1452 evaluate(opd stk(sp-1), opd stk(sp), op stk(sp)) %for sp = sp, -1, 1
// %for SP = SP, -1, 1 %cycle
{
int _initial = SP;
if (invalid_for_loop(_initial, -1, 1)) _imp_signal(5, 1, 0, "Illegal cycle SP = SP, -1, 1");
SP = _initial - (-1);
L_01E2:
if (SP == 1) goto L_01E3;
SP -= 1;
EVALUATE(/*?*/ &OPDSTK[SP - 1], OPDSTK[SP], OPSTK[SP - 1]);
goto L_01E2;
}
L_01E3:;
// 1453 opd = opd stk(0) %if i=0
if (I != 0) goto L_01E4;
*OPD = OPDSTK[0];
L_01E4:;
// 1454 %result = i
return I;
// 1455 %end
} /* end of GETEXPRESSION */
// 1456 !-----------------------------------------------------------------------
// 1457 %integer %function get opd(%integername opd)
int GETOPD(int *OPD) {
// 1458 %integer nid,op,cval
int NID;
int OP;
int CVAL;
// 1459
// 1460 %result = get expression(opd) %unless fflag=0
if (FFLAG == 0) goto L_01E5;
return GETEXPRESSION(OPD);
L_01E5:;
// 1461 opd=0
*OPD = 0;
// 1462 %if pres char='+' %or pres char='-' %start
if (PRESCHAR == 43) goto L_01A5;
if (PRESCHAR != 45) goto L_01E6;
L_01A5:;
// 1463 op = pres char
OP = PRESCHAR;
// 1464 next char %until pres char#bchar
L_01E7:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_01E8;
goto L_01E7;
L_01E8:;
// 1465 %else
goto L_01E9;
L_01E6:;
// 1466 op = '+'
OP = 43;
// 1467 %finish
L_01E9:;
// 1468 %cycle
L_01EA:;
// 1469 %if get name(nid)=0 %start
if (GETNAME(/*?*/ &NID) != 0) goto L_01EB;
// 1470 %result=1 %unless pass=1 %or nass(nid)=1 %or nass(nid)=3
if (PASS == 1) goto L_01EC;
if (NASS[NID - 1] == 1) goto L_01EC;
if (NASS[NID - 1] == 3) goto L_01EC;
return 1;
L_01EC:;
// 1471 cval=nval(nid)
CVAL = NVAL[NID - 1];
// 1472 %else
goto L_01ED;
L_01EB:;
// 1473 %result=1 %if get const(cval)#0
if (GETCONST(/*?*/ &CVAL) == 0) goto L_01EE;
return 1;
L_01EE:;
// 1474 %finish
L_01ED:;
// 1475 evaluate(opd, cval, op)
EVALUATE(OPD, CVAL, OP);
// 1476 next char %while pres char=bchar
L_01EF:;
if (PRESCHAR != BCHAR) goto L_01F0;
NEXTCHAR();
goto L_01EF;
L_01F0:;
// 1477 op = pres char
OP = PRESCHAR;
// 1478 %result=0 %unless op='+' %or op='-' %or op='*' %or op='/'
if (OP == 43) goto L_01F1;
if (OP == 45) goto L_01F1;
if (OP == 42) goto L_01F1;
if (OP == 47) goto L_01F1;
return 0;
L_01F1:;
// 1479 next char %until pres char#bchar
L_01F2:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_01F3;
goto L_01F2;
L_01F3:;
// 1480 %repeat
goto L_01EA;
// 1481 %end
} /* end of GETOPD */
// 1482 !-----------------------------------------------------------------------
// 1483 %integerfn get const(%integername cval)
int GETCONST(int *CVAL) {
// 1484 %integer started, dig val, bin val, oct val, hex val,
int STARTED;
int DIGVAL;
int BINVAL;
int OCTVAL;
int HEXVAL;
int BINPOS;
int OCTPOS;
int DECPOS;
// 1485+ bin pos, oct pos, dec pos
// 1486
// 1487 started=1
STARTED = 1;
// 1488 %if pres char='*' %start
if (PRESCHAR != 42) goto L_01F4;
// 1489 next char
NEXTCHAR();
// 1490 cval = ca
*CVAL = CA;
// 1491 %result = 0
return 0;
// 1492 %finish
L_01F4:;
// 1493 cval=0
*CVAL = 0;
// 1494 %if '0'<=pres char<='9' %start ;! decimal
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_01F5;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 57) goto L_01F5;
}
// 1495 bin pos = 0
BINPOS = 0;
// 1496 oct pos = 0
OCTPOS = 0;
// 1497 dec pos = 0
DECPOS = 0;
// 1498 bin val = 0
BINVAL = 0;
// 1499 oct val = 0
OCTVAL = 0;
// 1500 hex val = 0
HEXVAL = 0;
// 1501 %cycle
L_01F6:;
// 1502 %if bin pos=0 %and pres char='B' %start
if (BINPOS != 0) goto L_01F7;
if (PRESCHAR != 66) goto L_01F7;
// 1503 next char
NEXTCHAR();
// 1504 %if '0'<=pres char<='9' %or 'A'<=pres char<='F' %or %c
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_01F8;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 57) goto L_0149;
}
L_01F8:;
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_01F9;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 70) goto L_0149;
}
L_01F9:;
if (PRESCHAR != 72) goto L_01FA;
L_0149:;
// 1505+ pres char='H' %start
// 1506 bin pos = 1
BINPOS = 1;
// 1507 oct pos = 1
OCTPOS = 1;
// 1508 dec pos = 1
DECPOS = 1;
// 1509 hex val = (hex val<<4)+11
HEXVAL = (HEXVAL << 4) + 11;
// 1510 %else
goto L_01FB;
L_01FA:;
// 1511 cval = bin val
*CVAL = BINVAL;
// 1512 %result = 0
return 0;
// 1513 %finish
L_01FB:;
// 1514 %finish
L_01F7:;
// 1515 %if oct pos=0 %and (pres char='O' %or pres char='Q') %start
if (OCTPOS != 0) goto L_01FC;
if (PRESCHAR == 79) goto L_01FD;
if (PRESCHAR != 81) goto L_01FC;
L_01FD:;
// 1516 cval = oct val
*CVAL = OCTVAL;
// 1517 next char
NEXTCHAR();
// 1518 %result = 0
return 0;
// 1519 %finish %else %if pres char='H' %start
L_01FC:;
if (PRESCHAR != 72) goto L_01FE;
// 1520 cval = hex val
*CVAL = HEXVAL;
// 1521 next char
NEXTCHAR();
// 1522 %result = 0
return 0;
// 1523 %finish %else %if 'A'<=pres char<='F' %start
L_01FE:;
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_01FF;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 70) goto L_01FF;
}
// 1524 dig val = pres char-'A'+10
DIGVAL = PRESCHAR - 65 + 10;
// 1525 %finish %else %if '0'<=pres char<='9' %start
goto L_0200;
L_01FF:;
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_0201;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 57) goto L_0201;
}
// 1526 dig val = pres char-'0'
DIGVAL = PRESCHAR - 48;
// 1527 %else
goto L_0200;
L_0201:;
// 1528 %result = dec pos
return DECPOS;
// 1529 %finish
L_0200:;
// 1530 bin pos = 1 %if dig val>1
if (DIGVAL <= 1) goto L_0202;
BINPOS = 1;
L_0202:;
// 1531 oct pos = 1 %if dig val>7
if (DIGVAL <= 7) goto L_0203;
OCTPOS = 1;
L_0203:;
// 1532 dec pos = 1 %if dig val>9
if (DIGVAL <= 9) goto L_0204;
DECPOS = 1;
L_0204:;
// 1533 bin val = (bin val<<1)+dig val
BINVAL = (BINVAL << 1) + DIGVAL;
// 1534 oct val = (oct val<<3)+dig val
OCTVAL = (OCTVAL << 3) + DIGVAL;
// 1535 cval = cval*10+dig val
*CVAL = *CVAL * 10 + DIGVAL;
// 1536 hex val = (hex val<<4)+dig val
HEXVAL = (HEXVAL << 4) + DIGVAL;
// 1537 next char
NEXTCHAR();
// 1538 %repeat
goto L_01F6;
// 1539 %finish
L_01F5:;
// 1540 %if pres char='$' %start ;! hex
if (PRESCHAR != 36) goto L_0205;
// 1541 %cycle
L_0206:;
// 1542 next char
NEXTCHAR();
// 1543 %if '0'<=pres char<='9' %start
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_0207;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 57) goto L_0207;
}
// 1544 cval = cval<<4!(pres char-'0')
*CVAL = *CVAL << 4 | PRESCHAR - 48;
// 1545 %finish %else %if 'A'<=pres char<='F' %start
goto L_0208;
L_0207:;
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_0209;
// Double-sided test on PRESCHAR (Part II)
if (tmp > 70) goto L_0209;
}
// 1546 cval = cval<<4!(pres char-'A'+10)
*CVAL = *CVAL << 4 | PRESCHAR - 65 + 10;
// 1547 %else
goto L_0208;
L_0209:;
// 1548 %result = started
return STARTED;
// 1549 %finish
L_0208:;
// 1550 started = 0
STARTED = 0;
// 1551 %repeat
goto L_0206;
// 1552 %finish
L_0205:;
// 1553 %if pres char='@' %start ;! octal
if (PRESCHAR != 64) goto L_020A;
// 1554 %cycle
L_020B:;
// 1555 next char
NEXTCHAR();
// 1556 %result = started %unless '0'<=pres char<='7'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_020C;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 55) goto L_020D;
}
L_020C:;
return STARTED;
L_020D:;
// 1557 cval = (cval<<3)!(pres char-'0')
*CVAL = *CVAL << 3 | PRESCHAR - 48;
// 1558 started = 0
STARTED = 0;
// 1559 %repeat
goto L_020B;
// 1560 %finish
L_020A:;
// 1561 %if pres char='%' %start
if (PRESCHAR != 37) goto L_020E;
// 1562 %cycle
L_020F:;
// 1563 next char
NEXTCHAR();
// 1564 %result = started %unless '0'<=pres char<='1'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_0210;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 49) goto L_0211;
}
L_0210:;
return STARTED;
L_0211:;
// 1565 cval = (cval<<1)!(pres char-'0')
*CVAL = *CVAL << 1 | PRESCHAR - 48;
// 1566 started = 0
STARTED = 0;
// 1567 %repeat
goto L_020F;
// 1568 %finish
L_020E:;
// 1569 %if pres char='''' %start
if (PRESCHAR != 39) goto L_0212;
// 1570 next char
NEXTCHAR();
// 1571 %result=1 %if lp=max line+1
if (LP != 512 + 1) goto L_0213;
return 1;
L_0213:;
// 1572 cval=line(lp)
*CVAL = LINE[LP - 1];
// 1573 next char
NEXTCHAR();
// 1574 %result=0
return 0;
// 1575 %finish
L_0212:;
// 1576 %result=1
return 1;
// 1577 %end
} /* end of GETCONST */
// 1578 !-----------------------------------------------------------------------
// 1579 %predicate indexed(%byte %integer reg)
int INDEXED(unsigned char REG) {
// 1580 %integer i
int I;
// 1581
// 1582 i = lp
I = LP;
// 1583 %true %if more items %and acc(reg)
if (!(MOREITEMS())) goto L_0214;
if (!(ACC(REG))) goto L_0214;
return 1 /*TRUE*/;
L_0214:;
// 1584 lp = i-1
LP = I - 1;
// 1585 next char
NEXTCHAR();
// 1586 %false
return 0 /*FALSE*/;
// 1587 %end
} /* end of INDEXED */
// 1588 !-----------------------------------------------------------------------
// 1589 %predicate acc(%byte %integer acc id)
int ACC(unsigned char ACCID) {
// 1590
// 1591 %false %unless pres char=acc id
if (PRESCHAR == ACCID) goto L_0215;
return 0 /*FALSE*/;
L_0215:;
// 1592 next char
NEXTCHAR();
// 1593 %true %unless 'A'<=pres char<='Z' %or '0'<=pres char<='9'
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (65 > (tmp = PRESCHAR)) goto L_0216;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 90) goto L_0217;
}
L_0216:;
{
// Double-sided test on PRESCHAR (Part I)
int tmp;
if (48 > (tmp = PRESCHAR)) goto L_0218;
// Double-sided test on PRESCHAR (Part II)
if (tmp <= 57) goto L_0217;
}
L_0218:;
return 1 /*TRUE*/;
L_0217:;
// 1594 lp = lp-2
LP = LP - 2;
// 1595 next char
NEXTCHAR();
// 1596 %false
return 0 /*FALSE*/;
// 1597 %end
} /* end of ACC */
// 1598 !-----------------------------------------------------------------------
// 1599 %routine immediate(%byte %integer order, mcycles)
void IMMEDIATE(unsigned char ORDER, unsigned char MCYCLES) {
// 1600 %integer i, opd
int I;
int OPD;
// 1601
// 1602 next char %until pres char#bchar
L_0219:;
NEXTCHAR();
if (PRESCHAR != BCHAR) goto L_021A;
goto L_0219;
L_021A:;
// 1603 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 1604 instr out(order, opd, 2, mcycles)
INSTROUT(ORDER, OPD, 2, MCYCLES);
// 1605 %unless i= 0 %start
if (I == 0) goto L_021B;
// 1606 fault("Cannot evaluate operand")
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
// 1607 %finish %else %unless 0<=opd<=255 %start
goto L_021C;
L_021B:;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_021D;
// Double-sided test on OPD (Part II)
if (tmp <= 255) goto L_021E;
}
L_021D:;
// 1608 fault("Invalid constant")
FAULT(_imp_str_literal_size(63, "Invalid constant"));
// 1609 %finish
L_021E:;
L_021C:;
// 1610 %end
return;
} /* end of IMMEDIATE */
// 1611 !-----------------------------------------------------------------------
// 1612 %routine operand(%byte %integer reg, nreg, order, mcycles)
void OPERAND(unsigned char REG, unsigned char NREG, unsigned char ORDER, unsigned char MCYCLES) {
// 1613 %integer i, opd, reg fault
int I;
int OPD;
int REGFAULT;
// 1614
// 1615 %if acc(reg) %or indexed(reg) %start
if (ACC(REG)) goto L_021F;
if (!(INDEXED(REG))) goto L_0220;
L_021F:;
// 1616 instr out(order+16_10, 0, 2, mcycles+2)
INSTROUT(ORDER + 16, 0, 2, MCYCLES + 2);
// 1617 %finish %else %if acc(nreg) %or indexed(nreg) %start
goto L_0221;
L_0220:;
if (ACC(NREG)) goto L_0222;
if (!(INDEXED(NREG))) goto L_0223;
L_0222:;
// 1618 instr out(order+16_10, 0, 2, mcycles+2)
INSTROUT(ORDER + 16, 0, 2, MCYCLES + 2);
// 1619 fault("Invalid index register")
FAULT(_imp_str_literal_size(63, "Invalid index register"));
// 1620 %else
goto L_0221;
L_0223:;
// 1621 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 1622 %if indexed(reg) %start
if (!(INDEXED(REG))) goto L_0224;
// 1623 %if i#0 %or 0<=opd<=255 %start
if (I != 0) goto L_0225;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_0226;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_0226;
}
L_0225:;
// 1624 instr out(order+16_10, opd, 2, mcycles+2)
INSTROUT(ORDER + 16, OPD, 2, MCYCLES + 2);
// 1625 %else
goto L_0227;
L_0226:;
// 1626 instr out(order+16_18, opd, 3, mcycles+3)
INSTROUT(ORDER + 24, OPD, 3, MCYCLES + 3);
// 1627 %finish
L_0227:;
// 1628 %else
goto L_0228;
L_0224:;
// 1629 %if indexed(nreg) %start
if (!(INDEXED(NREG))) goto L_0229;
// 1630 reg fault = 1
REGFAULT = 1;
// 1631 %else
goto L_022A;
L_0229:;
// 1632 reg fault = 0
REGFAULT = 0;
// 1633 %finish
L_022A:;
// 1634 %if i#0 %or 0<=opd<=255 %start
if (I != 0) goto L_022B;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_022C;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_022C;
}
L_022B:;
// 1635 instr out(order, opd, 2, mcycles+1)
INSTROUT(ORDER, OPD, 2, MCYCLES + 1);
// 1636 %else
goto L_022D;
L_022C:;
// 1637 instr out(order+8, opd, 3, mcycles+2)
INSTROUT(ORDER + 8, OPD, 3, MCYCLES + 2);
// 1638 %finish
L_022D:;
// 1639 fault("Invalid index register") %unless reg fault=0
if (REGFAULT == 0) goto L_022E;
FAULT(_imp_str_literal_size(63, "Invalid index register"));
L_022E:;
// 1640 %finish
L_0228:;
// 1641 fault("Cannot evaluate operand") %unless i=0
if (I == 0) goto L_022F;
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_022F:;
// 1642 %finish
L_0221:;
// 1643 %end
return;
} /* end of OPERAND */
// 1644 !-----------------------------------------------------------------------
// 1645 %routine store(%byte %integer reg, nreg, order, mcycles)
void STORE(unsigned char REG, unsigned char NREG, unsigned char ORDER, unsigned char MCYCLES) {
// 1646 %integer i, opd, reg fault
int I;
int OPD;
int REGFAULT;
// 1647
// 1648 %if acc(reg) %or indexed(reg) %start
if (ACC(REG)) goto L_0230;
if (!(INDEXED(REG))) goto L_0231;
L_0230:;
// 1649 instr out(order+16_10, 0, 2, mcycles+1)
INSTROUT(ORDER + 16, 0, 2, MCYCLES + 1);
// 1650 %finish %else %if acc(nreg) %or indexed(nreg) %start
goto L_0232;
L_0231:;
if (ACC(NREG)) goto L_0233;
if (!(INDEXED(NREG))) goto L_0234;
L_0233:;
// 1651 instr out(order+16_10, 0, 2, mcycles+1)
INSTROUT(ORDER + 16, 0, 2, MCYCLES + 1);
// 1652 fault("Invalid index register")
FAULT(_imp_str_literal_size(63, "Invalid index register"));
// 1653 %else
goto L_0232;
L_0234:;
// 1654 i = get opd(opd)
I = GETOPD(/*?*/ &OPD);
// 1655 %if indexed(reg) %start
if (!(INDEXED(REG))) goto L_0235;
// 1656 instr out(order+16_10, opd, 2, mcycles+1)
INSTROUT(ORDER + 16, OPD, 2, MCYCLES + 1);
// 1657 %unless i#0 %or 0<=opd<=255 %start
if (I != 0) goto L_0236;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_0237;
// Double-sided test on OPD (Part II)
if (tmp <= 255) goto L_0236;
}
L_0237:;
// 1658 fault("Invalid page zero address")
FAULT(_imp_str_literal_size(63, "Invalid page zero address"));
// 1659 %finish
L_0236:;
// 1660 %else
goto L_0238;
L_0235:;
// 1661 %if indexed(nreg) %start
if (!(INDEXED(NREG))) goto L_0239;
// 1662 reg fault = 1
REGFAULT = 1;
// 1663 %else
goto L_023A;
L_0239:;
// 1664 reg fault = 0
REGFAULT = 0;
// 1665 %finish
L_023A:;
// 1666 %if i#0 %or 0<=opd<=255 %start
if (I != 0) goto L_023B;
{
// Double-sided test on OPD (Part I)
int tmp;
if (0 > (tmp = OPD)) goto L_023C;
// Double-sided test on OPD (Part II)
if (tmp > 255) goto L_023C;
}
L_023B:;
// 1667 instr out(order, opd, 2, mcycles)
INSTROUT(ORDER, OPD, 2, MCYCLES);
// 1668 %else
goto L_023D;
L_023C:;
// 1669 instr out(order+8, opd, 3, mcycles+1)
INSTROUT(ORDER + 8, OPD, 3, MCYCLES + 1);
// 1670 %finish
L_023D:;
// 1671 fault("Invalid index register") %unless reg fault=0
if (REGFAULT == 0) goto L_023E;
FAULT(_imp_str_literal_size(63, "Invalid index register"));
L_023E:;
// 1672 %finish
L_0238:;
// 1673 fault("Cannot evaluate operand") %unless i=0
if (I == 0) goto L_023F;
FAULT(_imp_str_literal_size(63, "Cannot evaluate operand"));
L_023F:;
// 1674 %finish
L_0232:;
// 1675 %end
return;
} /* end of STORE */
// 1676 !-----------------------------------------------------------------------
// 1677 %routine dump block
void DUMPBLOCK(void) {
// 1678 %integer checksum, old rad, i
int CHECKSUM;
int OLDRAD;
int I;
// 1679
// 1680 select output(1)
_imp_SELECTOUTPUT(1);
// 1681 old rad = drad
OLDRAD = DRAD;
// 1682 drad = 8
DRAD = 8;
// 1683 print string("S1")
_imp_PRINTSTRING(_imp_str_literal("S1"));
// 1684 print number(bp+3, 1)
PRINTNUMBER(BP + 3, 1);
// 1685 print number(buffer ca, 2)
PRINTNUMBER(BUFFERCA, 2);
// 1686 checksum = ((buffer ca>>8)&255)+(buffer ca&255)+bp+3
CHECKSUM = ((unsigned int)BUFFERCA >> 8 & 255) + (BUFFERCA & 255) + BP + 3;
// 1687 %for i = 1, 1, bp %cycle
// %for I = 1, 1, BP %cycle
{
int _final = BP;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, BP");
I = 0;
L_0240:
if (I == _final) goto L_0241;
I += 1;
// 1688 checksum = check sum+buffer(i)
CHECKSUM = CHECKSUM + BUFFER[I - 1];
// 1689 print number(buffer(i), 1)
PRINTNUMBER(BUFFER[I - 1], 1);
// 1690 %repeat
goto L_0240;
}
L_0241:;
// 1691 print number(\(checksum&255), 1)
PRINTNUMBER(~(CHECKSUM & 255), 1);
// 1692 print symbol(13)
_imp_PRINTSYMBOL(13);
// 1693 new line
_imp_NEWLINE();
// 1694 drad = old rad
DRAD = OLDRAD;
// 1695 select output(2)
_imp_SELECTOUTPUT(2);
// 1696 bp = 0
BP = 0;
// 1697 %end
return;
} /* end of DUMPBLOCK */
// 1698 !--------------------------------------------------------------------------
// 1699 %routine dump(%byte %integer byte)
void DUMP(unsigned char BYTE) {
// 1700 %if ostarted=0 %start
if (OSTARTED != 0) goto L_0243;
// 1701 select output(1)
_imp_SELECTOUTPUT(1);
// 1702 print symbol(13)
_imp_PRINTSYMBOL(13);
// 1703 new line
_imp_NEWLINE();
// 1704 print string("S00600004844521B")
_imp_PRINTSTRING(_imp_str_literal("S00600004844521B"));
// 1705 print symbol(13)
_imp_PRINTSYMBOL(13);
// 1706 new line
_imp_NEWLINE();
// 1707 select output(2)
_imp_SELECTOUTPUT(2);
// 1708 ostarted = 1
OSTARTED = 1;
// 1709 %finish
L_0243:;
// 1710 buffer ca = ca %if bp=0
if (BP != 0) goto L_0244;
BUFFERCA = CA;
L_0244:;
// 1711 dump block %and buffer ca = ca %unless buffer ca+bp=ca
if (BUFFERCA + BP == CA) goto L_0245;
DUMPBLOCK();
BUFFERCA = CA;
L_0245:;
// 1712 bp = bp+1
BP = BP + 1;
// 1713 buffer(bp) = byte
BUFFER[BP - 1] = BYTE;
// 1714 ca = ca+1
CA = CA + 1;
// 1715 dump block %if bp=16
if (BP != 16) goto L_0246;
DUMPBLOCK();
L_0246:;
// 1716 %end
return;
} /* end of DUMP */
// 1717 !---------------------------------------------------------------------------
// 1718 %routine close
void CLOSE(void) {
// 1719 %unless ostarted=0 %start
if (OSTARTED == 0) goto L_0247;
// 1720 dump block %unless bp=0
if (BP == 0) goto L_0248;
DUMPBLOCK();
L_0248:;
// 1721 select output(1)
_imp_SELECTOUTPUT(1);
// 1722 print string("S9030000FC")
_imp_PRINTSTRING(_imp_str_literal("S9030000FC"));
// 1723 print symbol(13)
_imp_PRINTSYMBOL(13);
// 1724 new line
_imp_NEWLINE();
// 1725 select output(2)
_imp_SELECTOUTPUT(2);
// 1726 %finish
L_0247:;
// 1727 %end
return;
} /* end of CLOSE */
// 1728 !-----------------------------------------------------------------------
// 1729 %routine instr out(%integer op, opd, b, cyc)
void INSTROUT(int OP, int OPD, int B, int CYC) {
// 1730 %integer i, j, k, lit
int I;
int J;
int K;
int LIT;
// 1731
// 1732 i = 1
I = 1;
// 1733 %unless lflag=0 %or ((gflag=0 %or lflag=1) %and cont=1) %start
if (LFLAG == 0) goto L_0249;
if (GFLAG == 0) goto L_024A;
if (LFLAG != 1) goto L_0242;
L_024A:;
if (CONT == 1) goto L_0249;
L_0242:;
// 1734 write(ln, 5)
_imp_WRITE(LN, 5);
// 1735 space %unless wflag=0
if (WFLAG == 0) goto L_024B;
_imp_SPACE();
L_024B:;
// 1736 %if lflag=2 %start
if (LFLAG != 2) goto L_024C;
// 1737 space
_imp_SPACE();
// 1738 %if b<=-3 %start
if (B > -3) goto L_024D;
// 1739 spaces(sp2)
_imp_SPACES(SP2);
// 1740 %else
goto L_024E;
L_024D:;
// 1741 print number(ca, 2)
PRINTNUMBER(CA, 2);
// 1742 %finish
L_024E:;
// 1743 space
_imp_SPACE();
// 1744 %if b=-3 %start
if (B != -3) goto L_024F;
// 1745 print number(opd, 2)
PRINTNUMBER(OPD, 2);
// 1746 spaces(sp1+1)
_imp_SPACES(SP1 + 1);
// 1747 %finish %else %if -2<=b<=-1 %start
goto L_0250;
L_024F:;
{
// Double-sided test on B (Part I)
int tmp;
if (-2 > (tmp = B)) goto L_0251;
// Double-sided test on B (Part II)
if (tmp > -1) goto L_0251;
}
// 1748 back number(opd)
BACKNUMBER(OPD);
// 1749 spaces(sp1+1)
_imp_SPACES(SP1 + 1);
// 1750 %else
goto L_0250;
L_0251:;
// 1751 %if b<=0 %start
if (B > 0) goto L_0252;
// 1752 spaces(sp1)
_imp_SPACES(SP1);
// 1753 %else
goto L_0253;
L_0252:;
// 1754 print number(op, 1)
PRINTNUMBER(OP, 1);
// 1755 %finish
L_0253:;
// 1756 space
_imp_SPACE();
// 1757 %if b<=1 %start
if (B > 1) goto L_0254;
// 1758 spaces(sp2)
_imp_SPACES(SP2);
// 1759 %finish %else %if b=2 %start
goto L_0255;
L_0254:;
if (B != 2) goto L_0256;
// 1760 print number(opd, 1)
PRINTNUMBER(OPD, 1);
// 1761 spaces(sp2-sp1)
_imp_SPACES(SP2 - SP1);
// 1762 %else
goto L_0255;
L_0256:;
// 1763 back number(opd)
BACKNUMBER(OPD);
// 1764 %finish
L_0255:;
// 1765 %finish
L_0250:;
// 1766 %unless cflag=0 %start
if (CFLAG == 0) goto L_0257;
// 1767 %if cyc=0 %start
if (CYC != 0) goto L_0258;
// 1768 spaces(2)
_imp_SPACES(2);
// 1769 %else
goto L_0259;
L_0258:;
// 1770 write(cyc, 1)
_imp_WRITE(CYC, 1);
// 1771 %finish
L_0259:;
// 1772 %finish
L_0257:;
// 1773 %finish
L_024C:;
// 1774 %if cont=0 %start
if (CONT != 0) goto L_025A;
// 1775 space
_imp_SPACE();
// 1776 %if tflag=0 %start
if (TFLAG != 0) goto L_025B;
// 1777 %cycle
L_025C:;
// 1778 out symbol(line(i))
OUTSYMBOL(LINE[I - 1]);
// 1779 %exit %if line(i)&127=nl %or line(i)&127=12
if (LINE[I - 1] & 127 == 10) goto L_025D;
if (LINE[I - 1] & 127 != 12) goto L_025E;
L_025D:;
goto L_025F;
L_025E:;
// 1780 i = i+1
I = I + 1;
// 1781 %repeat
goto L_025C;
L_025F:;
// 1782 %else
goto L_0260;
L_025B:;
// 1783 j = 1
J = 1;
// 1784 out tag(i, j, 8)
OUTTAG(/*?*/ &I, /*?*/ &J, 8);
// 1785 out tag(i, j, 12)
OUTTAG(/*?*/ &I, /*?*/ &J, 12);
// 1786 lit = 0
LIT = 0;
// 1787 k = 0
K = 0;
// 1788 %while i#lp %cycle
L_0261:;
if (I == LP) goto L_0262;
// 1789 %if line(i)&127=' ' %start
if (LINE[I - 1] & 127 != 32) goto L_0263;
// 1790 k = k+1 %if non dense=1 %and lit=0
if (NONDENSE != 1) goto L_0264;
if (LIT != 0) goto L_0264;
K = K + 1;
L_0264:;
// 1791 %else
goto L_0265;
L_0263:;
// 1792 j = j+k+1
J = J + K + 1;
// 1793 out symbol(' ') %and k = k-1 %while k>0
L_0266:;
if (K <= 0) goto L_0267;
OUTSYMBOL(32);
K = K - 1;
goto L_0266;
L_0267:;
// 1794 out symbol(line(i))
OUTSYMBOL(LINE[I - 1]);
// 1795 %finish
L_0265:;
// 1796 %if line(i)&127='''' %start
if (LINE[I - 1] & 127 != 39) goto L_0268;
// 1797 lit = 1
LIT = 1;
// 1798 %else
goto L_0269;
L_0268:;
// 1799 lit = 0
LIT = 0;
// 1800 %finish
L_0269:;
// 1801 i = i+1
I = I + 1;
// 1802 %repeat
goto L_0261;
L_0262:;
// 1803 i = i+1 %while line(i)&127=' '
L_026A:;
if (LINE[I - 1] & 127 != 32) goto L_026B;
I = I + 1;
goto L_026A;
L_026B:;
// 1804 %unless lp=1 %or line(i)&127=nl %or line(i)&127=12 %start
if (LP == 1) goto L_026C;
if (LINE[I - 1] & 127 == 10) goto L_026C;
if (LINE[I - 1] & 127 == 12) goto L_026C;
// 1805 out symbol(' ') %and j = j+1 %until j>=24
L_026D:;
OUTSYMBOL(32);
J = J + 1;
if (J >= 24) goto L_026E;
goto L_026D;
L_026E:;
// 1806 %finish
L_026C:;
// 1807 %cycle
L_026F:;
// 1808 out symbol(line(i))
OUTSYMBOL(LINE[I - 1]);
// 1809 %exit %if line(i)&127=nl %or line(i)&127=12
if (LINE[I - 1] & 127 == 10) goto L_0270;
if (LINE[I - 1] & 127 != 12) goto L_0271;
L_0270:;
goto L_0272;
L_0271:;
// 1810 i = i+1
I = I + 1;
// 1811 %repeat
goto L_026F;
L_0272:;
// 1812 %finish
L_0260:;
// 1813 %else
goto L_0273;
L_025A:;
// 1814 nline(1)
NLINE(1);
// 1815 %finish
L_0273:;
// 1816 %else
goto L_0274;
L_0249:;
// 1817 i = i+1 %while line(i)&127#nl %and line(i)&127#12
L_0275:;
if (LINE[I - 1] & 127 == 10) goto L_0276;
if (LINE[I - 1] & 127 == 12) goto L_0276;
I = I + 1;
goto L_0275;
L_0276:;
// 1818 %finish
L_0274:;
// 1819 fault("Truncated line") %if i=max line+1
if (I != 512 + 1) goto L_0277;
FAULT(_imp_str_literal_size(63, "Truncated line"));
L_0277:;
// 1820
// 1821 %if b>=1 %start
if (B < 1) goto L_0278;
// 1822 dump(op&255)
DUMP(OP & 255);
// 1823 %unless b=1 %start
if (B == 1) goto L_0279;
// 1824 dump(opd&255)
DUMP(OPD & 255);
// 1825 dump((opd>>8)&255) %if b=3
if (B != 3) goto L_027A;
DUMP((unsigned int)OPD >> 8 & 255);
L_027A:;
// 1826 %finish
L_0279:;
// 1827 %finish %else %if b=-2 %start
goto L_027B;
L_0278:;
if (B != -2) goto L_027C;
// 1828 dump(opd&255)
DUMP(OPD & 255);
// 1829 dump((opd>>8)&255)
DUMP((unsigned int)OPD >> 8 & 255);
// 1830 %finish
L_027C:;
L_027B:;
// 1831 %end
return;
} /* end of INSTROUT */
// 1832 !-----------------------------------------------------------------------
// 1833 %routine out tag(%integer %name i, j, %integer col)
void OUTTAG(int *I, int *J, int COL) {
// 1834
// 1835 %while line(i)&127#' ' %and i#lp %cycle
L_027D:;
if (LINE[*I - 1] & 127 == 32) goto L_027E;
if (*I == LP) goto L_027E;
// 1836 out symbol(line(i))
OUTSYMBOL(LINE[*I - 1]);
// 1837 i = i+1
*I = *I + 1;
// 1838 j = j+1
*J = *J + 1;
// 1839 %repeat
goto L_027D;
L_027E:;
// 1840 i = i+1 %while line(i)&127=' ' %and i#lp
L_027F:;
if (LINE[*I - 1] & 127 != 32) goto L_0280;
if (*I == LP) goto L_0280;
*I = *I + 1;
goto L_027F;
L_0280:;
// 1841 %unless i=lp %start
if (*I == LP) goto L_0281;
// 1842 out symbol(' ') %and j = j+1 %until j>=col
L_0282:;
OUTSYMBOL(32);
*J = *J + 1;
if (*J >= COL) goto L_0283;
goto L_0282;
L_0283:;
// 1843 %finish
L_0281:;
// 1844 %end
return;
} /* end of OUTTAG */
// 1845 !------------------------------------------------------------------------
// 1846 %routine out symbol(%byte %integer char)
void OUTSYMBOL(unsigned char CHAR) {
// 1847 %own %integer optr = 0
static int OPTR = 0;
// 1848
// 1849 %if char&127=nl %start
if (CHAR & 127 != 10) goto L_0284;
// 1850 optr = 0
OPTR = 0;
// 1851 nline(1)
NLINE(1);
// 1852 %finish %else %if char&127=12 %start
goto L_0285;
L_0284:;
if (CHAR & 127 != 12) goto L_0286;
// 1853 optr = 0
OPTR = 0;
// 1854 nline(lines on page)
NLINE(66);
// 1855 %else
goto L_0285;
L_0286:;
// 1856 %if optr=sp3 %start
if (OPTR != SP3) goto L_0287;
// 1857 %return %if wflag=0
if (WFLAG != 0) goto L_0288;
return;
L_0288:;
// 1858 nline(1)
NLINE(1);
// 1859 write(ln, 5)
_imp_WRITE(LN, 5);
// 1860 print symbol('+')
_imp_PRINTSYMBOL(43);
// 1861 spaces(line width-sp3-7)
_imp_SPACES(78 - SP3 - 7);
// 1862 optr = 0
OPTR = 0;
// 1863 %finish
L_0287:;
// 1864 print symbol(char)
_imp_PRINTSYMBOL(CHAR);
// 1865 optr = optr+1
OPTR = OPTR + 1;
// 1866 %finish
L_0285:;
// 1867 %end
return;
} /* end of OUTSYMBOL */
// 1868 !-----------------------------------------------------------------------
// 1869 %routine fault(%string(63) s)
void FAULT(_imp_string63 S) {
// 1870
// 1871 faults=faults+1
FAULTS = FAULTS + 1;
// 1872 %unless eflag=0 %start
if (EFLAG == 0) goto L_0289;
// 1873 print string("**** ".s.". ****")
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &*({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("**** "), (_imp_string *)/*?*/ &S);
(_imp_string255 *)&tmp;
}),
(_imp_string *)/*?*/ _imp_str_literal_ptr(". ****"));
(_imp_string255 *)&tmp;
}) /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1874 nline(1)
NLINE(1);
// 1875 %finish
L_0289:;
// 1876 %end
return;
} /* end of FAULT */
// 1877 !-----------------------------------------------------------------------
// 1878 %routine nline(%integer n)
void NLINE(int N) {
// 1879 %own %integer line on page = lines on page+1, page no = 0
static int LINEONPAGE = 67;
static int PAGENO = 0;
// 1880
// 1881 %unless n<0 %start
if (N < 0) goto L_028A;
// 1882 %if line on page+pflag+n>lines on page %start
if (LINEONPAGE + PFLAG + N <= 66) goto L_028B;
// 1883 page no = page no+1
PAGENO = PAGENO + 1;
// 1884 %unless n=0 %start
if (N == 0) goto L_028C;
// 1885 %if line on page=lines on page %start
if (LINEONPAGE != 66) goto L_028D;
// 1886 new line
_imp_NEWLINE();
// 1887 %else
goto L_028E;
L_028D:;
// 1888 print symbol(12)
_imp_PRINTSYMBOL(12);
// 1889 %finish
L_028E:;
// 1890 %finish
L_028C:;
// 1891 %if pflag=0 %start
if (PFLAG != 0) goto L_028F;
// 1892 line on page = 1
LINEONPAGE = 1;
// 1893 %else
goto L_0290;
L_028F:;
// 1894 new line
_imp_NEWLINE();
// 1895 print string(" MOS Technology MCS650X Assembler ")
_imp_PRINTSTRING(_imp_str_literal(" MOS Technology MCS650X Assembler "));
// 1896 spaces((line width-45-length(header))//2)
_imp_SPACES(((long)(78 - 45 - *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &HEADER)) / (long)2));
// 1897 print string(header)
_imp_PRINTSTRING(
*({
__typeof__(_imp_string33) tmp = HEADER /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1898 spaces((line width-44-length(header))//2)
_imp_SPACES(((long)(78 - 44 - *_imp_LENGTH((_imp_string255 *)/*p*/ /*?*/ &HEADER)) / (long)2));
// 1899 print string(" Page")
_imp_PRINTSTRING(_imp_str_literal(" Page"));
// 1900 write(page no, 2)
_imp_WRITE(PAGENO, 2);
// 1901 new lines(2)
_imp_NEWLINES(2);
// 1902 line on page = 4
LINEONPAGE = 4;
// 1903 %finish
L_0290:;
// 1904 %else
goto L_0291;
L_028B:;
// 1905 new lines(n)
_imp_NEWLINES(N);
// 1906 line on page = line on page+n
LINEONPAGE = LINEONPAGE + N;
// 1907 %finish
L_0291:;
// 1908 %finish
L_028A:;
// 1909 %end
return;
} /* end of NLINE */
// 1910 !-----------------------------------------------------------------------
// 1911 %routine back number(%integer n)
void BACKNUMBER(int N) {
// 1912
// 1913 print number(((n&255)<<8)!((n>>8)&255), 2)
PRINTNUMBER((N & 255) << 8 | (unsigned int)N >> 8 & 255, 2);
// 1914 %end
return;
} /* end of BACKNUMBER */
// 1915 !-----------------------------------------------------------------------
// 1916 %routine print number(%integer n,d)
void PRINTNUMBER(int N, int D) {
// 1917 %conststring(1)%array h(0:15)="0","1","2","3","4","5","6","7","8","9",
const _imp_string1 H[16] = {_imp_str_init("0"), _imp_str_init("1"), _imp_str_init("2"), _imp_str_init("3"),
_imp_str_init("4"), _imp_str_init("5"), _imp_str_init("6"), _imp_str_init("7"),
_imp_str_init("8"), _imp_str_init("9"), _imp_str_init("A"), _imp_str_init("B"),
_imp_str_init("C"), _imp_str_init("D"), _imp_str_init("E"), _imp_str_init("F")};
// 1918+ "A","B","C","D","E","F"
// 1919 %integer model, nn
int MODEL;
int NN;
// 1920 %string(6) s
_imp_string6 S;
// 1921
// 1922 model = 1<<(d*8-1)
MODEL = 1 << D * 8 - 1;
// 1923 s=""
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("");
(void *)&tmp;
}),
/*max:*/ 6);
// 1924 %cycle
L_0292:;
// 1925 model =(model>>1)//drad
MODEL = ((long)((unsigned int)MODEL >> 1) / (long)DRAD);
// 1926 nn = (n>>1)//drad
NN = ((long)((unsigned int)N >> 1) / (long)DRAD);
// 1927 s=h(n-((nn*drad)<<1)).s
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &H[N - (NN * DRAD << 1)], (_imp_string *)/*?*/ &S);
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 6);
// 1928 n = nn
N = NN;
// 1929 %repeat %until model=0
if (MODEL == 0) goto L_0293;
goto L_0292;
L_0293:;
// 1930 print string(s)
_imp_PRINTSTRING(
*({
__typeof__(_imp_string6) tmp = S /*q*/;
(_imp_string255 *)&tmp;
})
);
// 1931 %end
return;
} /* end of PRINTNUMBER */
// 1932 !-----------------------------------------------------------------------
// 1933 %routine sqs(%integer l, r)
void SQS(int L, int R) {
// 1934 %integer nass key, nval key, xhead key, lp, rp, i
int NASSKEY;
int NVALKEY;
int XHEADKEY;
int LP;
int RP;
int I;
// 1935 %string(6) name key
_imp_string6 NAMEKEY;
// 1936
// 1937 %return %unless l<r
if (L < R) goto L_0294;
return;
L_0294:;
// 1938 %while r-l>insert limit %cycle
L_0295:;
if (R - L <= 10) goto L_0296;
// 1939 lp = l
LP = L;
// 1940 rp = r+1
RP = R + 1;
// 1941 name key = name(l)
_imp_strncpy(/*?*/ &NAMEKEY, ({
__typeof__(_imp_string6) tmp; /*B*/
tmp = NAME[L - 1];
(void *)&tmp;
}),
/*max:*/ 6);
// 1942 nass key = nass(l)
NASSKEY = NASS[L - 1];
// 1943 nval key = nval(l)
NVALKEY = NVAL[L - 1];
// 1944 xhead key = xhead(l)
XHEADKEY = XHEAD[L - 1];
// 1945 %cycle
L_0297:;
// 1946 rp = rp-1 %until rp=lp %or name key>name(rp)
L_0298:;
RP = RP - 1;
if (RP == LP) goto L_0299;
if (_imp_strcmp((_imp_string *)/*?*/ &NAMEKEY, (_imp_string *)/*?*/ &NAME[RP - 1]) > 0) goto L_0299;
goto L_0298;
L_0299:;
// 1947 %exit %if lp=rp
if (LP != RP) goto L_029A;
goto L_029B;
L_029A:;
// 1948 name(lp) = name(rp)
_imp_strncpy(/*?*/ &NAME[LP - 1], ({
__typeof__(_imp_string6) tmp; /*B*/
tmp = NAME[RP - 1];
(void *)&tmp;
}),
/*max:*/ 6);
// 1949 nass(lp) = nass(rp)
NASS[LP - 1] = NASS[RP - 1];
// 1950 nval(lp) = nval(rp)
NVAL[LP - 1] = NVAL[RP - 1];
// 1951 xhead(lp) = xhead(rp)
XHEAD[LP - 1] = XHEAD[RP - 1];
// 1952 lp = lp+1 %until rp=lp %or name key<=name(lp)
L_029C:;
LP = LP + 1;
if (RP == LP) goto L_029D;
if (_imp_strcmp((_imp_string *)/*?*/ &NAMEKEY, (_imp_string *)/*?*/ &NAME[LP - 1]) <= 0) goto L_029D;
goto L_029C;
L_029D:;
// 1953 %exit %if lp=rp
if (LP != RP) goto L_029E;
goto L_029B;
L_029E:;
// 1954 name(rp) = name(lp)
_imp_strncpy(/*?*/ &NAME[RP - 1], ({
__typeof__(_imp_string6) tmp; /*B*/
tmp = NAME[LP - 1];
(void *)&tmp;
}),
/*max:*/ 6);
// 1955 nass(rp) = nass(lp)
NASS[RP - 1] = NASS[LP - 1];
// 1956 nval(rp) = nval(lp)
NVAL[RP - 1] = NVAL[LP - 1];
// 1957 xhead(rp) = xhead(lp)
XHEAD[RP - 1] = XHEAD[LP - 1];
// 1958 %repeat
goto L_0297;
L_029B:;
// 1959 name(lp) = name key
_imp_strncpy(/*?*/ &NAME[LP - 1], ({
__typeof__(_imp_string6) tmp; /*B*/
tmp = NAMEKEY;
(void *)&tmp;
}),
/*max:*/ 6);
// 1960 nass(lp) = nass key
NASS[LP - 1] = NASSKEY;
// 1961 nval(lp) = nval key
NVAL[LP - 1] = NVALKEY;
// 1962 xhead(lp) = xhead key
XHEAD[LP - 1] = XHEADKEY;
// 1963 %if lp-l>r-rp %start
if (LP - L <= R - RP) goto L_029F;
// 1964 sqs(rp+1, r)
SQS(RP + 1, R);
// 1965 r = lp-1
R = LP - 1;
// 1966 %else
goto L_02A0;
L_029F:;
// 1967 sqs(l, lp-1)
SQS(L, LP - 1);
// 1968 l = rp+1
L = RP + 1;
// 1969 %finish
L_02A0:;
// 1970 %repeat
goto L_0295;
L_0296:;
// 1971 %for rp = l+1, 1, r %cycle
// %for RP = L + 1, 1, R %cycle
{
int _initial = L + 1, _final = R;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle RP = L + 1, 1, R");
RP = _initial - (1);
L_02A1:
if (RP == _final) goto L_02A2;
RP += 1;
// 1972 name key = name(rp)
_imp_strncpy(/*?*/ &NAMEKEY, ({
__typeof__(_imp_string6) tmp; /*B*/
tmp = NAME[RP - 1];
(void *)&tmp;
}),
/*max:*/ 6);
// 1973 nass key = nass(rp)
NASSKEY = NASS[RP - 1];
// 1974 nval key = nval(rp)
NVALKEY = NVAL[RP - 1];
// 1975 xhead key = xhead(rp)
XHEADKEY = XHEAD[RP - 1];
// 1976 lp = l
LP = L;
// 1977 lp = lp+1 %while lp#rp %and name key>name(lp)
L_02A4:;
if (LP == RP) goto L_02A5;
if (_imp_strcmp((_imp_string *)/*?*/ &NAMEKEY, (_imp_string *)/*?*/ &NAME[LP - 1]) <= 0) goto L_02A5;
LP = LP + 1;
goto L_02A4;
L_02A5:;
// 1978 %for i = rp-1, -1, lp %cycle
// %for I = RP - 1, -1, LP %cycle
{
int _initial = RP - 1, _final = LP;
if (invalid_for_loop(_initial, -1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = RP - 1, -1, LP");
I = _initial - (-1);
L_02A6:
if (I == _final) goto L_02A7;
I -= 1;
// 1979 name(i+1) = name(i)
_imp_strncpy(/*?*/ &NAME[I + 1 - 1], ({
__typeof__(_imp_string6) tmp; /*B*/
tmp = NAME[I - 1];
(void *)&tmp;
}),
/*max:*/ 6);
// 1980 nass(i+1) = nass(i)
NASS[I + 1 - 1] = NASS[I - 1];
// 1981 nval(i+1) = nval(i)
NVAL[I + 1 - 1] = NVAL[I - 1];
// 1982 xhead(i+1) = xhead(i)
XHEAD[I + 1 - 1] = XHEAD[I - 1];
// 1983 %repeat
goto L_02A6;
}
L_02A7:;
// 1984 name(lp) = name key
_imp_strncpy(/*?*/ &NAME[LP - 1], ({
__typeof__(_imp_string6) tmp; /*B*/
tmp = NAMEKEY;
(void *)&tmp;
}),
/*max:*/ 6);
// 1985 nass(lp) = nass key
NASS[LP - 1] = NASSKEY;
// 1986 nval(lp) = nval key
NVAL[LP - 1] = NVALKEY;
// 1987 xhead(lp) = xhead key
XHEAD[LP - 1] = XHEADKEY;
// 1988 %repeat
goto L_02A1;
}
L_02A2:;
// 1989 %end
return;
} /* end of SQS */
// 1990 !-----------------------------------------------------------------------
// 1991 %end %of %program
_imp_stop(0);
return 0;
case_OPTIONACTION_dispatch:
if (OPTIONACTION_index < -1 || OPTIONACTION_index > 51)
_imp_signalf(6, 3, OPTIONACTION_index, "->OPTIONACTION(%d) out of bounds at %s line %d", OPTIONACTION_index,
OPTIONACTION_file, OPTIONACTION_line);
goto *OPTIONACTION[OPTIONACTION_index - -1];
case_ITYPE1_dispatch:
if (ITYPE1_index < 1 || ITYPE1_index > 25)
_imp_signalf(6, 3, ITYPE1_index, "->ITYPE1(%d) out of bounds at %s line %d", ITYPE1_index, ITYPE1_file,
ITYPE1_line);
goto *ITYPE1[ITYPE1_index - 1];
case_ITYPE2_dispatch:
if (ITYPE2_index < 1 || ITYPE2_index > 25)
_imp_signalf(6, 3, ITYPE2_index, "->ITYPE2(%d) out of bounds at %s line %d", ITYPE2_index, ITYPE2_file,
ITYPE2_line);
goto *ITYPE2[ITYPE2_index - 1];
end_0:;
}