#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 !!!!! 12/1/77
// 2 ! HAMISH DEWAR'S LAYOUT PROGRAM MODIFIED FOR 7/32 IMP COMPILER
// 3 ! AND TO IMPLEMENT SECTION NOS.
// 4
// 5 !%EXTERNALROUTINESPEC SET STREAMS {move to perms}
// 6 %BEGIN; !LAYOUT: DOCUMENT LAYOUT PROGRAM
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 7 !SYMBOLIC CONSTANTS
// 8 %CONSTINTEGER SIN=1, REQUEST=0; !SOURCE INPUT STREAMS
// 9 %CONSTINTEGER ERR=0, DOC=1, SOUT=2; !OUTPUT STREAMS
// 10 %CONSTINTEGER LBOUND=200; !LINE BUFF BOUND
// 11 %CONSTINTEGER ABOUND=200; !ATOM BUFF BOUND
// 12 %CONSTINTEGER SBOUND=200; !SOURCE LINE BUFF BOUND
// 13 %CONSTINTEGER VBOUND=25; !VECTOR (EG TAB) BOUND
// 14 %CONSTINTEGER ESCBIT=256, UNDBIT=128, CASEBIT=32
// 15 %CONSTINTEGER CHARMASK=255, BASICMASK=127, LETMASK=95
// 16 %CONSTINTEGER SENTSP=544; !512+' '
// 17 !LAYOUT PARAMETERS
// 18 %OWNINTEGER CHOOSE = -1;! NO USER REQUEST
static int CHOOSE = -1;
// 19 %OWNINTEGER NEW PAGE=0, NEW SECT = 0
static int NEWPAGE = 0;
static int NEWSECT = 0;
// 20 %OWNINTEGER TOP=2, BOTTOM=4, LEFT=0, PAGE=60, LINE=72
static int TOP = 2;
static int BOTTOM = 4;
static int LEFT = 0;
static int PAGE = 60;
static int LINE = 72;
// 21 %OWNINTEGER SLINE=80, NLS=1, SGAP=2, PGAP=3
static int SLINE = 80;
static int NLS = 1;
static int SGAP = 2;
static int PGAP = 3;
// 22 %OWNINTEGER INDENT=0, SECTNO=0, PAGENO=0, START=0, FINISH=9999
static int INDENT = 0;
static int SECTNO = 0;
static int PAGENO = 0;
static int START = 0;
static int FINISH = 9999;
// 23 %OWNINTEGER CAP='@', UND='_', CAPSH='.', UNDSH='%', INVERT=32
static int CAP = 64;
static int UND = 95;
static int CAPSH = 46;
static int UNDSH = 37;
static int INVERT = 32;
// 24 %OWNINTEGER CAPO='@', UNDO='_', CAPSHO='.', UNDSHO='%', INVERTO=32
static int CAPO = 64;
static int UNDO = 95;
static int CAPSHO = 46;
static int UNDSHO = 37;
static int INVERTO = 32;
// 25 %OWNINTEGER ASCII=1, JUST=0, MARK=0, ESCAPE='$'
static int ASCII = 1;
static int JUST = 0;
static int MARK = 0;
static int ESCAPE = 36;
// 26 %OWNINTEGERARRAY TAB(0:77) = 1,9,17,25,33,41,49,57,65,73,81,
static int TAB[78] = {1, 9, 17, 25, 33, 41, 49, 57, 65,
73, 81, 89, 97, 105, 113, 121, 129, 137,
145, 153, 161, 169, 177, 185, 193, 201, [26 ... 77] = 0};
// 27+ 89,97,105,113,121,129,137,145,153,161,169,177,185,193,201,0(52)
// 28
// 29 %OWNINTEGER XLINES=0, LINECAPIND=0, LINEUNDIND=0, LINEMIDIND=0
static int XLINES = 0;
static int LINECAPIND = 0;
static int LINEUNDIND = 0;
static int LINEMIDIND = 0;
// 30 %OWNINTEGER INDENTIND=1, ERRIND=0, XPAGE=1
static int INDENTIND = 1;
static int ERRIND = 0;
static int XPAGE = 1;
// 31 %OWNINTEGER COLS=0; !COLUMNS USED ON CURRENT LINE
static int COLS = 0;
// 32 %OWNINTEGER TEXTCOLS; !LAST COL OCCUPIED
static int TEXTCOLS;
// 33 %OWNINTEGER LINES=0; !LINES PRINTED ON CURRENT PAGE
static int LINES = 0;
// 34 %OWNINTEGER PAGES=0; !TOTAL PAGES PRINTED
static int PAGES = 0;
// 35 %OWNINTEGER FIXED=0; !FIXED COLUMNS
static int FIXED = 0;
// 36 %OWNINTEGER GAPS=0, SGAPS=0; !TOTAL GAPS, SENTENCE GAPS
static int GAPS = 0;
static int SGAPS = 0;
// 37 %OWNINTEGER SIZE=0; !SIZE OF CURRENT ATOM
static int SIZE = 0;
// 38 %OWNINTEGER SMAX=0; !UPDATED SOURCE POINTER
static int SMAX = 0;
// 39 %OWNINTEGER INDENTCOL=1
static int INDENTCOL = 1;
// 40 %OWNINTEGER NEXT=0
static int NEXT = 0;
// 41 %INTEGER DIRECTIVE,RELIND,FREELIST,NUM
int DIRECTIVE;
int RELIND;
int FREELIST;
int NUM;
// 42 %INTEGERARRAY BUFF(1:LBOUND); !LINE BUFFER
int BUFF[200];
// 43 %INTEGERARRAY ABUFF(1:ABOUND); !ATOM BUFFER
int ABUFF[200];
// 44 %INTEGERARRAY SBUFF(1:SBOUND); !SOURCE LINE (UPDATED)
int SBUFF[200];
// 45 %INTEGERARRAY LINK(1:108), HEAD,TAIL(1:500)
int LINK[108];
int HEAD[500];
int TAIL[500];
// 46
// 47 %ROUTINE FAULT(%INTEGER N)
void FAULT(int N) {
// 48 %SWITCH S(1:9)
int S_index;
int S_line;
char *S_file;
static const void *S[9] = {&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing,
&&case_S_missing, &&case_S_missing, &&case_S_missing, &&case_S_missing};
// 49 SELECT OUTPUT(ERR)
_imp_SELECTOUTPUT(0);
// 50 PRINT SYMBOL('*')
_imp_PRINTSYMBOL(42);
// 51 ->S(N)
S_line = __LINE__;
S_file = __FILE__;
S_index = N;
goto case_S_dispatch;
// 52 S(1): PRINT STRING("FAULTY FORMAT AT ")
case_S_1:;
_imp_PRINTSTRING(_imp_str_literal("FAULTY FORMAT AT "));
// 53 PRINT SYMBOL(NEXT)
_imp_PRINTSYMBOL(NEXT);
// 54 ->L9
goto U_1000;
// 55 S(3): PRINT STRING("UNKNOWN NAME"); ->L9
case_S_3:;
_imp_PRINTSTRING(_imp_str_literal("UNKNOWN NAME"));
goto U_1000;
// 56 S(4): PRINT STRING("SCALAR/VECTOR MISMATCH"); ->L9
case_S_4:;
_imp_PRINTSTRING(_imp_str_literal("SCALAR/VECTOR MISMATCH"));
goto U_1000;
// 57 S(5): PRINT STRING("UNKNOWN DIRECTIVE "); ->L8
case_S_5:;
_imp_PRINTSTRING(_imp_str_literal("UNKNOWN DIRECTIVE "));
goto U_1001;
// 58 S(6): PRINT STRING("SPURIOUS DIRECTIVE "); ->L8
case_S_6:;
_imp_PRINTSTRING(_imp_str_literal("SPURIOUS DIRECTIVE "));
goto U_1001;
// 59 S(7): PRINT STRING("OUT OF BOUNDS "); ->L8
case_S_7:;
_imp_PRINTSTRING(_imp_str_literal("OUT OF BOUNDS "));
goto U_1001;
// 60 S(8): PRINT STRING("OFF PAGE "); ->L8
case_S_8:;
_imp_PRINTSTRING(_imp_str_literal("OFF PAGE "));
goto U_1001;
// 61 S(9): PRINT STRING("OVER TEXT ")
case_S_9:;
_imp_PRINTSTRING(_imp_str_literal("OVER TEXT "));
// 62 L8: PRINT SYMBOL(DIRECTIVE)
U_1001:;
_imp_PRINTSYMBOL(DIRECTIVE);
// 63 PRINT SYMBOL(RELIND) %IF RELIND # 0
if (RELIND == 0) goto L_0002;
_imp_PRINTSYMBOL(RELIND);
L_0002:;
// 64 L9: ERRIND = 1
U_1000:;
ERRIND = 1;
// 65 NEWLINE
_imp_NEWLINE();
// 66 %END
return;
case_S_dispatch:
if (S_index < 1 || S_index > 9)
_imp_signalf(6, 3, S_index, "->S(%d) out of bounds at %s line %d", S_index, S_file, S_line);
goto *S[S_index - 1];
case_S_missing:
_imp_signalf(8, 2, S_index, "switch jump to undefined label S(%d): at %s line %d", S_index, S_file, S_line);
} /* end of FAULT */
// 67
// 68 %ROUTINE READ ATOM OR DIRECTIVE
void READATOMORDIRECTIVE(void) {
// 69 %INTEGER K,C,U,ATOMCAPIND,ATOMUNDIND
int K;
int C;
int U;
int ATOMCAPIND;
int ATOMUNDIND;
// 70 %IF NEXT = 0 %THEN READ SYMBOL(K) %ELSE K = NEXT %AND NEXT = 0
if (NEXT != 0) goto L_0003;
_imp_READSYMBOL(/*?*/ &K);
goto L_0004;
L_0003:;
K = NEXT;
NEXT = 0;
L_0004:;
// 71 DIRECTIVE = 0; SIZE = 0
DIRECTIVE = 0;
SIZE = 0;
// 72 ATOMCAPIND = 0; ATOMUNDIND = 0
ATOMCAPIND = 0;
ATOMUNDIND = 0;
// 73 ATOMCAPIND = CASEBIT %AND READ SYMBOL(K) %IF K = CAPSH
if (K != CAPSH) goto L_0005;
ATOMCAPIND = 32;
_imp_READSYMBOL(/*?*/ &K);
L_0005:;
// 74 %CYCLE
L_0006:;
// 75 READ SYMBOL(K) %AND K = K+ESCBIT %IF K = ESCAPE
if (K != ESCAPE) goto L_0007;
_imp_READSYMBOL(/*?*/ &K);
K = K + 256;
L_0007:;
// 76 ATOMUNDIND = UNDBIT %AND READ SYMBOL(K) %IF K = UNDSH
if (K != UNDSH) goto L_0008;
ATOMUNDIND = 128;
_imp_READSYMBOL(/*?*/ &K);
L_0008:;
// 77 C = LINECAPIND!ATOMCAPIND
C = LINECAPIND | ATOMCAPIND;
// 78 U = LINEUNDIND
U = LINEUNDIND;
// 79 U = U!ATOMUNDIND %UNLESS K = ' '
if (K == 32) goto L_0009;
U = U | ATOMUNDIND;
L_0009:;
// 80 U = UNDBIT %AND READ SYMBOL(K) %IF K = UND
if (K != UND) goto L_000A;
U = 128;
_imp_READSYMBOL(/*?*/ &K);
L_000A:;
// 81 C = CASEBIT %AND READ SYMBOL(K) %IF K = CAP
if (K != CAP) goto L_000B;
C = 32;
_imp_READSYMBOL(/*?*/ &K);
L_000B:;
// 82 TWIT: K = K!!INVERT %IF 'A' <= K&LETMASK <= 'Z'; !LET
U_1002:;
{
// Double-sided test on K & 95 (Part I)
int tmp;
if (65 > (tmp = K & 95)) goto L_000C;
// Double-sided test on K & 95 (Part II)
if (tmp > 90) goto L_000C;
}
K = K ^ INVERT;
L_000C:;
// 83 K = K-C %IF 'A' <= K&BASICMASK-CASEBIT <= 'Z'; !LC LET
{
// Double-sided test on (K & 127) - 32 (Part I)
int tmp;
if (65 > (tmp = (K & 127) - 32)) goto L_000D;
// Double-sided test on (K & 127) - 32 (Part II)
if (tmp > 90) goto L_000D;
}
K = K - C;
L_000D:;
// 84 %EXIT %IF K = NL
if (K != 10) goto L_000E;
goto L_000F;
L_000E:;
// 85 K = K!U
K = K | U;
// 86 %EXIT %IF K = ' '
if (K != 32) goto L_0010;
goto L_000F;
L_0010:;
// 87 %IF K&ESCBIT # 0 %AND ('A' <= K&LETMASK <= 'Z' %C
if (K & 256 == 0) goto L_0011;
{
// Double-sided test on K & 95 (Part I)
int tmp;
if (65 > (tmp = K & 95)) goto L_0012;
// Double-sided test on K & 95 (Part II)
if (tmp <= 90) goto L_0013;
}
L_0012:;
if (K & 95 != 10) goto L_0011;
L_0013:;
// 88+ %OR K&LETMASK = NL) %START
// 89 %EXIT %IF SIZE # 0
if (SIZE == 0) goto L_0014;
goto L_000F;
L_0014:;
// 90 DIRECTIVE = K&LETMASK; READ SYMBOL(NEXT)
DIRECTIVE = K & 95;
_imp_READSYMBOL(/*?*/ &NEXT);
// 91 %RETURN
return;
// 92 %FINISH
L_0011:;
// 93 SIZE = SIZE+1; ABUFF(SIZE) = K
SIZE = SIZE + 1;
ABUFF[SIZE - 1] = K;
// 94 READ SYMBOL(K)
_imp_READSYMBOL(/*?*/ &K);
// 95 %REPEAT
goto L_0006;
L_000F:;
// 96 NEXT = K
NEXT = K;
// 97 %RETURN %IF ATOMUNDIND = 0 %OR SIZE = 0
if (ATOMUNDIND == 0) goto L_0015;
if (SIZE != 0) goto L_0016;
L_0015:;
return;
L_0016:;
// 98 K = ABUFF(SIZE)!!UNDBIT
K = ABUFF[SIZE - 1] ^ 128;
// 99 ABUFF(SIZE) = K %IF K = '.' %OR K = ',' %OR K = ':' %OR K = ';' %OR K = ')'
if (K == 46) goto L_0017;
if (K == 44) goto L_0017;
if (K == 58) goto L_0017;
if (K == 59) goto L_0017;
if (K != 41) goto L_0018;
L_0017:;
ABUFF[SIZE - 1] = K;
L_0018:;
// 100 %END
return;
} /* end of READATOMORDIRECTIVE */
// ?TWIT unused
// 101
// 102 %ROUTINE PRINT SOURCE LINE
void PRINTSOURCELINE(void) {
// 103 %INTEGER I
int I;
// 104 %IF ERRIND # 0 %START
if (ERRIND == 0) goto L_0019;
// 105 SELECT OUTPUT(ERR)
_imp_SELECTOUTPUT(0);
// 106 I = 0
I = 0;
// 107 I = I+1 %AND PRINT SYMBOL(SBUFF(I)) %WHILE I # SMAX
L_001A:;
if (I == SMAX) goto L_001B;
I = I + 1;
_imp_PRINTSYMBOL(SBUFF[I - 1]);
goto L_001A;
L_001B:;
// 108 NEWLINE
_imp_NEWLINE();
// 109 ERRIND = 0
ERRIND = 0;
// 110 %FINISH
L_0019:;
// 111 SELECT OUTPUT(SOUT)
_imp_SELECTOUTPUT(2);
// 112 I = 0
I = 0;
// 113 I = I+1 %AND PRINT SYMBOL(SBUFF(I)) %WHILE I # SMAX
L_001C:;
if (I == SMAX) goto L_001D;
I = I + 1;
_imp_PRINTSYMBOL(SBUFF[I - 1]);
goto L_001C;
L_001D:;
// 114 NEWLINE; SMAX = 0
_imp_NEWLINE();
SMAX = 0;
// 115 %END
return;
} /* end of PRINTSOURCELINE */
// 116
// 117 %ROUTINE STORE(%INTEGER K)
void STORE(int K) {
// 118 SMAX = SMAX+1; SBUFF(SMAX) = K
SMAX = SMAX + 1;
SBUFF[SMAX - 1] = K;
// 119 %END
return;
} /* end of STORE */
// 120
// 121 %ROUTINE STORE SOURCE ATOM
void STORESOURCEATOM(void) {
// 122 %INTEGER I,J,K,ATOMCAPIND,ATOMUNDIND
int I;
int J;
int K;
int ATOMCAPIND;
int ATOMUNDIND;
// 123
// 124 %ROUTINE TRANSLATE UNDERLINE
void TRANSLATEUNDERLINE(void) {
// 125 %INTEGER P,Q
int P;
int Q;
// 126 K = K-UNDBIT %AND %RETURN %IF LINEUNDIND # 0
if (LINEUNDIND == 0) goto L_001E;
K = K - 128;
return;
L_001E:;
// 127 ->ONE %IF K&BASICMASK = ' '
if (K & 127 != 32) goto L_001F;
goto U_1003;
L_001F:;
// 128 K = K-UNDBIT %AND %RETURN %IF ATOMUNDIND # 0
if (ATOMUNDIND == 0) goto L_0020;
K = K - 128;
return;
L_0020:;
// 129 ->ONE %IF UNDSHO = 0
if (UNDSHO != 0) goto L_0021;
goto U_1003;
L_0021:;
// 130 P = I
P = I;
// 131 %WHILE P # SIZE %CYCLE
L_0022:;
if (P == SIZE) goto L_0023;
// 132 P = P+1; Q = ABUFF(P)
P = P + 1;
Q = ABUFF[P - 1];
// 133 ->ONE %IF Q&UNDBIT = 0 %AND (P # SIZE %OR %C
if (Q & 128 != 0) goto L_0024;
if (P != SIZE) goto L_0025;
if (Q == 46) goto L_0024;
if (Q == 44) goto L_0024;
if (Q == 58) goto L_0024;
if (Q == 59) goto L_0024;
if (Q == 41) goto L_0024;
L_0025:;
goto U_1003;
L_0024:;
// 134+ (Q # '.' %AND Q # ',' %AND Q # ':' %AND Q # ';' %AND Q # ')'))
// 135 %REPEAT
goto L_0022;
L_0023:;
// 136 STORE(UNDSHO); K = K-UNDBIT; ATOMUNDIND = 1
STORE(UNDSHO);
K = K - 128;
ATOMUNDIND = 1;
// 137 %RETURN
return;
// 138 ONE:%RETURN %IF UNDO = 0
U_1003:;
if (UNDO != 0) goto L_0026;
return;
L_0026:;
// 139 STORE(UNDO); K = K-UNDBIT
STORE(UNDO);
K = K - 128;
// 140 %END
return;
} /* end of TRANSLATEUNDERLINE */
// 141
// 142 ATOMCAPIND = 0; ATOMUNDIND = 0
ATOMCAPIND = 0;
ATOMUNDIND = 0;
// 143 %IF LINECAPIND = 0 %AND CAPSHO # 0 %AND SIZE >= 2 %START
if (LINECAPIND != 0) goto L_0027;
if (CAPSHO == 0) goto L_0027;
if (SIZE < 2) goto L_0027;
// 144 %CYCLE I = 1,1,SIZE
// %for I = 1, 1, SIZE %cycle
{
int _final = SIZE;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, SIZE");
I = 0;
L_0028:
if (I == _final) goto L_0029;
I += 1;
// 145 K = ABUFF(I)&BASICMASK
K = ABUFF[I - 1] & 127;
// 146 ATOMCAPIND = 0 %AND %EXIT %IF 'A' <= K-CASEBIT <= 'Z'; !LC
{
// Double-sided test on K - 32 (Part I)
int tmp;
if (65 > (tmp = K - 32)) goto L_002B;
// Double-sided test on K - 32 (Part II)
if (tmp > 90) goto L_002B;
}
ATOMCAPIND = 0;
goto L_0029;
L_002B:;
// 147 ATOMCAPIND = ATOMCAPIND+1 %IF 'A' <= K <= 'Z'; !UC
{
// Double-sided test on K (Part I)
int tmp;
if (65 > (tmp = K)) goto L_002C;
// Double-sided test on K (Part II)
if (tmp > 90) goto L_002C;
}
ATOMCAPIND = ATOMCAPIND + 1;
L_002C:;
// 148 %REPEAT
goto L_0028;
}
L_0029:;
// 149 %FINISH
L_0027:;
// 150 %IF SMAX # 0 %AND XLINES = 0 %START
if (SMAX == 0) goto L_002D;
if (XLINES != 0) goto L_002D;
// 151 %IF SMAX+SIZE+1 <= SLINE %THEN STORE(' ') %C
if (SMAX + SIZE + 1 > SLINE) goto L_002E;
STORE(32);
goto L_002F;
L_002E:;
PRINTSOURCELINE();
L_002F:;
// 152+ %ELSE PRINT SOURCE LINE
// 153 %FINISH
L_002D:;
// 154 STORE(CAPSHO) %IF ATOMCAPIND # 0
if (ATOMCAPIND == 0) goto L_0030;
STORE(CAPSHO);
L_0030:;
// 155 %CYCLE I = 1,1,SIZE
// %for I = 1, 1, SIZE %cycle
{
int _final = SIZE;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, SIZE");
I = 0;
L_0031:
if (I == _final) goto L_0032;
I += 1;
// 156 K = ABUFF(I)
K = ABUFF[I - 1];
// 157 TRANSLATE UNDERLINE %IF K&UNDBIT # 0
if (K & 128 == 0) goto L_0034;
TRANSLATEUNDERLINE();
L_0034:;
// 158 K = K+CASEBIT %IF 'A' <= K <= 'Z' %AND (LINECAPIND # 0 %C
{
// Double-sided test on K (Part I)
int tmp;
if (65 > (tmp = K)) goto L_0035;
// Double-sided test on K (Part II)
if (tmp > 90) goto L_0035;
}
if (LINECAPIND != 0) goto L_002A;
if (ATOMCAPIND == 0) goto L_0035;
L_002A:;
K = K + 32;
L_0035:;
// 159+ %OR ATOMCAPIND # 0)
// 160 STORE(CAPO) %AND K = K+CASEBIT %IF 'A' <= K <= 'Z' %AND CAPO # 0
{
// Double-sided test on K (Part I)
int tmp;
if (65 > (tmp = K)) goto L_0036;
// Double-sided test on K (Part II)
if (tmp > 90) goto L_0036;
}
if (CAPO == 0) goto L_0036;
STORE(CAPO);
K = K + 32;
L_0036:;
// 161 K = K!!INVERTO %IF 'A' <= K&LETMASK <= 'Z'
{
// Double-sided test on K & 95 (Part I)
int tmp;
if (65 > (tmp = K & 95)) goto L_0037;
// Double-sided test on K & 95 (Part II)
if (tmp > 90) goto L_0037;
}
K = K ^ INVERTO;
L_0037:;
// 162 STORE(ESCAPE) %IF K&ESCBIT # 0
if (K & 256 == 0) goto L_0038;
STORE(ESCAPE);
L_0038:;
// 163 STORE(K&CHARMASK)
STORE(K & 255);
// 164 %REPEAT
goto L_0031;
}
L_0032:;
// 165 %END
return;
} /* end of STORESOURCEATOM */
// ?J unused
// 166
// 167 %ROUTINE SET COLUMN(%INTEGER M)
void SETCOLUMN(int M) {
// 168 %IF 1 <= M <= LINE %START
{
// Double-sided test on M (Part I)
int tmp;
if (1 > (tmp = M)) goto L_0039;
// Double-sided test on M (Part II)
if (tmp > LINE) goto L_0039;
}
// 169 M = M-1
M = M - 1;
// 170 %IF M > COLS %START
if (M <= COLS) goto L_003A;
// 171 COLS = COLS+1 %AND BUFF(COLS) = ' ' %UNTIL COLS = M
L_003B:;
COLS = COLS + 1;
BUFF[COLS - 1] = 32;
if (COLS == M) goto L_003C;
goto L_003B;
L_003C:;
// 172 %FINISH %ELSE %START
goto L_003D;
L_003A:;
// 173 %WHILE COLS # M %CYCLE
L_003E:;
if (COLS == M) goto L_003F;
// 174 FAULT(9) %AND %EXIT %IF BUFF(COLS) # ' '
if (BUFF[COLS - 1] == 32) goto L_0040;
FAULT(9);
goto L_003F;
L_0040:;
// 175 COLS = COLS-1
COLS = COLS - 1;
// 176 %REPEAT
goto L_003E;
L_003F:;
// 177 %FINISH
L_003D:;
// 178 %FINISH %ELSE %START
goto L_0041;
L_0039:;
// 179 FAULT(8); INDENTCOL = 1 %IF INDENTCOL = M
FAULT(8);
if (INDENTCOL != M) goto L_0042;
INDENTCOL = 1;
L_0042:;
// 180 %FINISH
L_0041:;
// 181 FIXED = COLS; GAPS = 0; SGAPS = 0
FIXED = COLS;
GAPS = 0;
SGAPS = 0;
// 182 %END
return;
} /* end of SETCOLUMN */
// 183
// 184 %ROUTINE MARK DOC
void MARKDOC(void) {
// 185 %IF MARK = 1 %START
if (MARK != 1) goto L_0043;
// 186 PRINT SYMBOL('='); SPACES(LINE-2); PRINT SYMBOL('=')
_imp_PRINTSYMBOL(61);
_imp_SPACES(LINE - 2);
_imp_PRINTSYMBOL(61);
// 187 NEWLINE
_imp_NEWLINE();
// 188 %FINISH %ELSE %START
goto L_0044;
L_0043:;
// 189 PRINT SYMBOL(12); !FORM FEED
_imp_PRINTSYMBOL(12);
// 190 %FINISH
L_0044:;
// 191 %END
return;
} /* end of MARKDOC */
// 192
// 193 %ROUTINE RESET DOC LINE
void RESETDOCLINE(void) {
// 194 %IF XLINES # 0 %START
if (XLINES == 0) goto L_0045;
// 195 XLINES = XLINES-1
XLINES = XLINES - 1;
// 196 %IF XLINES = 0 %START
if (XLINES != 0) goto L_0046;
// 197 LINECAPIND = 0; LINEUNDIND = 0
LINECAPIND = 0;
LINEUNDIND = 0;
// 198 LINEMIDIND = 0; INDENTIND = 1
LINEMIDIND = 0;
INDENTIND = 1;
// 199 %FINISH
L_0046:;
// 200 %FINISH
L_0045:;
// 201 TEXTCOLS = 0; COLS = 0; FIXED = 0; XPAGE = 0
TEXTCOLS = 0;
COLS = 0;
FIXED = 0;
XPAGE = 0;
// 202 SET COLUMN(INDENTCOL) %IF INDENTIND # 0
if (INDENTIND == 0) goto L_0047;
SETCOLUMN(INDENTCOL);
L_0047:;
// 203 %END
return;
} /* end of RESETDOCLINE */
// 204
// 205 %ROUTINE TURN PAGE
void TURNPAGE(void) {
// 206 %ROUTINE GET
void GET(void) {
// 207 SELECTOUTPUT(0)
_imp_SELECTOUTPUT(0);
// 208 PRINTSTRING("SECTION:"); PRINTSYMBOL(4)
_imp_PRINTSTRING(_imp_str_literal("SECTION:"));
_imp_PRINTSYMBOL(4);
// 209 SELECTOUTPUT(DOC)
_imp_SELECTOUTPUT(1);
// 210 %CYCLE
L_0048:;
// 211 %EXIT %IF '0' <= NEXTSYMBOL <= '9'
{
// Double-sided test on _imp_NEXTSYMBOL() (Part I)
int tmp;
if (48 > (tmp = _imp_NEXTSYMBOL())) goto L_0049;
// Double-sided test on _imp_NEXTSYMBOL() (Part II)
if (tmp > 57) goto L_0049;
}
goto L_004A;
L_0049:;
// 212 SKIPSYMBOL
_imp_SKIPSYMBOL();
// 213 %REPEAT
goto L_0048;
L_004A:;
// 214 READ(NEW SECT)
_imp_READ(/*?*/ &NEWSECT);
// 215 NEW PAGE = 0
NEWPAGE = 0;
// 216 %RETURN %UNLESS NEXTSYMBOL = '-'
if (_imp_NEXTSYMBOL() == 45) goto L_004B;
return;
L_004B:;
// 217 SKIPSYMBOL
_imp_SKIPSYMBOL();
// 218 %RETURN %UNLESS '0' <= NEXTSYMBOL <= '9'
{
// Double-sided test on _imp_NEXTSYMBOL() (Part I)
int tmp;
if (48 > (tmp = _imp_NEXTSYMBOL())) goto L_0033;
// Double-sided test on _imp_NEXTSYMBOL() (Part II)
if (tmp <= 57) goto L_004C;
}
L_0033:;
return;
L_004C:;
// 219 READ(NEW PAGE)
_imp_READ(/*?*/ &NEWPAGE);
// 220 %END
return;
} /* end of GET */
// 221 %RETURN %IF CHOOSE < 0
if (CHOOSE >= 0) goto L_004D;
return;
L_004D:;
// 222 %IF START = 0 %START
if (START != 0) goto L_004E;
// 223 START = 9999
START = 9999;
// 224 %ELSE
goto L_004F;
L_004E:;
// 225 %IF START = 9999 %START
if (START != 9999) goto L_0050;
// 226 START = START-1
START = START - 1;
// 227 SELECTINPUT(REQUEST)
_imp_SELECTINPUT(0);
// 228 %CYCLE
L_0051:;
// 229 GET
GET();
// 230 %EXIT %IF NEWSECT > SECTNO
if (NEWSECT <= SECTNO) goto L_0052;
goto L_0053;
L_0052:;
// 231 %EXIT %IF NEWSECT=SECTNO %AND (NEW PAGE=0 %OR NEWPAGE>=PAGENO)
if (NEWSECT != SECTNO) goto L_0054;
if (NEWPAGE == 0) goto L_0055;
if (NEWPAGE < PAGENO) goto L_0054;
L_0055:;
goto L_0053;
L_0054:;
// 232 %REPEAT
goto L_0051;
L_0053:;
// 233 SELECTINPUT(SIN)
_imp_SELECTINPUT(1);
// 234 %FINISH
L_0050:;
// 235 %FINISH
L_004F:;
// 236 START=0 %IF NEWSECT=SECTNO %AND %C
if (NEWSECT != SECTNO) goto L_0056;
if (NEWPAGE == 0) goto L_0057;
if (NEWPAGE != PAGENO) goto L_0056;
L_0057:;
START = 0;
L_0056:;
// 237+ (NEWPAGE=0 %OR NEWPAGE=PAGENO)
// 238 %END
return;
} /* end of TURNPAGE */
// 239 %ROUTINE PRINT DOC LINE
void PRINTDOCLINE(void) {
// 240 %OWNINTEGER CR = 13
static int CR = 13;
// 241 %INTEGER I,J,K,L,M,U
int I;
int J;
int K;
int L;
int M;
int U;
// 242 LINES = LINES+NLS
LINES = LINES + NLS;
// 243 %IF PAGES+1 >= START %START
if (PAGES + 1 < START) goto L_0058;
// 244 SELECT OUTPUT(DOC)
_imp_SELECTOUTPUT(1);
// 245 %IF LINES = NLS %START
if (LINES != NLS) goto L_0059;
// 246 MARK DOC %IF MARK # 0
if (MARK == 0) goto L_005A;
MARKDOC();
L_005A:;
// 247 NEWLINES(TOP)
_imp_NEWLINES(TOP);
// 248 %FINISH
L_0059:;
// 249 %IF TEXTCOLS # 0 %START
if (TEXTCOLS == 0) goto L_005B;
// 250 L = LEFT
L = LEFT;
// 251 L = L+(LINE-COLS)//2 %IF LINEMIDIND # 0
if (LINEMIDIND == 0) goto L_005C;
L = L + ((long)(LINE - COLS) / (long)2);
L_005C:;
// 252 SPACES(L); U = UNDBIT
_imp_SPACES(L);
U = 128;
// 253 %CYCLE I = 1,1,COLS
// %for I = 1, 1, COLS %cycle
{
int _final = COLS;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = 1, 1, COLS");
I = 0;
L_005D:
if (I == _final) goto L_005E;
I += 1;
// 254 K = BUFF(I)
K = BUFF[I - 1];
// 255 %IF K&U # 0 %START
if (K & U == 0) goto L_0060;
// 256 M = I
M = I;
// 257 %CYCLE J = I,1,COLS
// %for J = I, 1, COLS %cycle
{
int _initial = I, _final = COLS;
if (invalid_for_loop(_initial, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle J = I, 1, COLS");
J = _initial - (1);
L_0061:
if (J == _final) goto L_0062;
J += 1;
// 258 %IF BUFF(J)&UNDBIT # 0 %START
if (BUFF[J - 1] & 128 == 0) goto L_0064;
// 259 SPACES(J-M)
_imp_SPACES(J - M);
// 260 PRINT SYMBOL('_')
_imp_PRINTSYMBOL(95);
// 261 M = J+1
M = J + 1;
// 262 %FINISH
L_0064:;
// 263 %REPEAT
goto L_0061;
}
L_0062:;
// 264 PRINT SYMBOL(CR); PRINT SYMBOL(CR)
_imp_PRINTSYMBOL(CR);
_imp_PRINTSYMBOL(CR);
// 265 SPACES(L+I-1); U = 0
_imp_SPACES(L + I - 1);
U = 0;
// 266 %FINISH
L_0060:;
// 267 PRINT SYMBOL(K&BASICMASK)
_imp_PRINTSYMBOL(K & 127);
// 268 %REPEAT
goto L_005D;
}
L_005E:;
// 269 %FINISH
L_005B:;
// 270 NEWLINES(NLS)
_imp_NEWLINES(NLS);
// 271 %IF LINES >= PAGE %AND BOTTOM # 0 %START
if (LINES < PAGE) goto L_0065;
if (BOTTOM == 0) goto L_0065;
// 272 %IF PAGENO = 0 %START
if (PAGENO != 0) goto L_0066;
// 273 %FINISH %ELSE %START
goto L_0067;
L_0066:;
// 274 I = BOTTOM//2
I = ((long)BOTTOM / (long)2);
// 275 NEWLINES(I)
_imp_NEWLINES(I);
// 276 SPACES(LEFT+LINE//2-7)
_imp_SPACES(LEFT + ((long)LINE / (long)2) - 7);
// 277 %IF SECTNO = 0 %START
if (SECTNO != 0) goto L_0068;
// 278 SPACES(2); WRITE(PAGENO,1)
_imp_SPACES(2);
_imp_WRITE(PAGENO, 1);
// 279 %ELSE
goto L_0069;
L_0068:;
// 280 WRITE(SECTNO,2); WRITE(-PAGENO,1)
_imp_WRITE(SECTNO, 2);
_imp_WRITE(-PAGENO, 1);
// 281 %FINISH
L_0069:;
// 282 %FINISH
L_0067:;
// 283 %FINISH
L_0065:;
// 284 %FINISH
L_0058:;
// 285 %IF LINES >= PAGE %START
if (LINES < PAGE) goto L_006A;
// 286 LINES = 0; PAGES = PAGES+1
LINES = 0;
PAGES = PAGES + 1;
// 287 PAGENO = PAGENO+1 %IF PAGENO # 0
if (PAGENO == 0) goto L_006B;
PAGENO = PAGENO + 1;
L_006B:;
// 288 TURN PAGE
TURNPAGE();
// 289 %FINISH
L_006A:;
// 290 RESET DOC LINE
RESETDOCLINE();
// 291 %END
return;
} /* end of PRINTDOCLINE */
// 292
// 293 %ROUTINE JUSTIFY
void JUSTIFY(void) {
// 294 %OWNINTEGER FLIP = 0
static int FLIP = 0;
// 295 %INTEGER I,J,K,L,MIN,COUNT,SCOUNT,WAIT,SWAIT
int I;
int J;
int K;
int L;
int MIN;
int COUNT;
int SCOUNT;
int WAIT;
int SWAIT;
// 296 COUNT = LINE-COLS
COUNT = LINE - COLS;
// 297 %RETURN %IF COUNT <= 0 %OR GAPS = 0
if (COUNT <= 0) goto L_006C;
if (GAPS != 0) goto L_006D;
L_006C:;
return;
L_006D:;
// 298 MIN = COUNT//GAPS
MIN = ((long)COUNT / (long)GAPS);
// 299 COUNT = COUNT-MIN*GAPS
COUNT = COUNT - MIN * GAPS;
// 300 SCOUNT = SGAPS; SCOUNT = COUNT %IF COUNT < SGAPS
SCOUNT = SGAPS;
if (COUNT >= SGAPS) goto L_006E;
SCOUNT = COUNT;
L_006E:;
// 301 COUNT = COUNT-SCOUNT
COUNT = COUNT - SCOUNT;
// 302 FLIP = 1-FLIP
FLIP = 1 - FLIP;
// 303 %IF FLIP # 0 %START
if (FLIP == 0) goto L_006F;
// 304 WAIT = 0; SWAIT = 0
WAIT = 0;
SWAIT = 0;
// 305 %FINISH %ELSE %START
goto L_0070;
L_006F:;
// 306 WAIT = GAPS-COUNT; SWAIT = SGAPS-SCOUNT
WAIT = GAPS - COUNT;
SWAIT = SGAPS - SCOUNT;
// 307 %FINISH
L_0070:;
// 308 J = LINE
J = LINE;
// 309 %CYCLE I = COLS,-1,1
// %for I = COLS, -1, 1 %cycle
{
int _initial = COLS;
if (invalid_for_loop(_initial, -1, 1)) _imp_signal(5, 1, 0, "Illegal cycle I = COLS, -1, 1");
I = _initial - (-1);
L_0071:
if (I == 1) goto L_0072;
I -= 1;
// 310 K = BUFF(I)
K = BUFF[I - 1];
// 311 %IF (K = SENTSP %OR K = ' ') %AND BUFF(I-1) # K %START
if (K == 544) goto L_0074;
if (K != 32) goto L_0075;
L_0074:;
if (BUFF[I - 1 - 1] == K) goto L_0075;
// 312 L = J-MIN
L = J - MIN;
// 313 %IF WAIT = 0 %START
if (WAIT != 0) goto L_0076;
// 314 L = L-1 %AND COUNT = COUNT-1 %IF COUNT # 0
if (COUNT == 0) goto L_0077;
L = L - 1;
COUNT = COUNT - 1;
L_0077:;
// 315 %FINISH %ELSE WAIT = WAIT-1
goto L_0078;
L_0076:;
WAIT = WAIT - 1;
L_0078:;
// 316 %IF K = SENTSP %START
if (K != 544) goto L_0079;
// 317 %IF SWAIT = 0 %START
if (SWAIT != 0) goto L_007A;
// 318 L = L-1 %AND SCOUNT = SCOUNT-1 %IF SCOUNT # 0
if (SCOUNT == 0) goto L_007B;
L = L - 1;
SCOUNT = SCOUNT - 1;
L_007B:;
// 319 %FINISH %ELSE SWAIT = SWAIT-1
goto L_007C;
L_007A:;
SWAIT = SWAIT - 1;
L_007C:;
// 320 %FINISH
L_0079:;
// 321 BUFF(J) = ' ' %AND J = J-1 %WHILE J # L
L_007D:;
if (J == L) goto L_007E;
BUFF[J - 1] = 32;
J = J - 1;
goto L_007D;
L_007E:;
// 322 COLS = LINE %AND %RETURN %IF J = I
if (J != I) goto L_007F;
COLS = LINE;
return;
L_007F:;
// 323 %FINISH
L_0075:;
// 324 BUFF(J) = K; J = J-1
BUFF[J - 1] = K;
J = J - 1;
// 325 %REPEAT
goto L_0071;
}
L_0072:;
// 326 %STOP
_imp_stop(0);
// 327 %END
} /* end of JUSTIFY */
// 328
// 329 %ROUTINE PLACE ATOM
void PLACEATOM(void) {
// 330 %INTEGER I,L,S
int I;
int L;
int S;
// 331 %IF COLS # FIXED %AND XLINES = 0 %START
if (COLS == FIXED) goto L_0080;
if (XLINES != 0) goto L_0080;
// 332 L = COLS+1; S = ' '
L = COLS + 1;
S = 32;
// 333 %IF (BUFF(COLS) = '.' %OR BUFF(COLS) = '?') %C
if (BUFF[COLS - 1] == 46) goto L_0081;
if (BUFF[COLS - 1] != 63) goto L_0082;
L_0081:;
{
// Double-sided test on ABUFF[0] (Part I)
int tmp;
if (65 > (tmp = ABUFF[0])) goto L_0082;
// Double-sided test on ABUFF[0] (Part II)
if (tmp > 90) goto L_0082;
}
// 334+ %AND 'A' <= ABUFF(1) <= 'Z' %START
// 335 L = COLS+SGAP; S = SENTSP
L = COLS + SGAP;
S = 544;
// 336 %FINISH
L_0082:;
// 337 %IF L+SIZE <= LINE %START
if (L + SIZE > LINE) goto L_0083;
// 338 COLS = COLS+1 %AND BUFF(COLS) = S %WHILE COLS # L
L_0084:;
if (COLS == L) goto L_0085;
COLS = COLS + 1;
BUFF[COLS - 1] = S;
goto L_0084;
L_0085:;
// 339 GAPS = GAPS+1; SGAPS = SGAPS+1 %IF S = SENTSP
GAPS = GAPS + 1;
if (S != 544) goto L_0086;
SGAPS = SGAPS + 1;
L_0086:;
// 340 %FINISH %ELSE %START
goto L_0087;
L_0083:;
// 341 JUSTIFY %IF JUST # 0
if (JUST == 0) goto L_0088;
JUSTIFY();
L_0088:;
// 342 PRINT DOC LINE
PRINTDOCLINE();
// 343 PRINT SOURCE LINE %IF SMAX # 0
if (SMAX == 0) goto L_0089;
PRINTSOURCELINE();
L_0089:;
// 344 %FINISH
L_0087:;
// 345 %FINISH
L_0080:;
// 346 I = 0
I = 0;
// 347 %WHILE I # SIZE %CYCLE
L_008A:;
if (I == SIZE) goto L_008B;
// 348 COLS = COLS+1; I = I+1
COLS = COLS + 1;
I = I + 1;
// 349 BUFF(COLS) = ABUFF(I)
BUFF[COLS - 1] = ABUFF[I - 1];
// 350 %REPEAT
goto L_008A;
L_008B:;
// 351 TEXTCOLS = COLS
TEXTCOLS = COLS;
// 352 %END
return;
} /* end of PLACEATOM */
// 353
// 354 %ROUTINE PROCESS DIRECTIVE
void PROCESSDIRECTIVE(void) {
// 355 %INTEGER D,C,T
int D;
int C;
int T;
// 356 %SWITCH S('A':'Z')
int S_index;
int S_line;
char *S_file;
static const void *S[26] = {&&case_S_65, &&case_S_66, &&case_S_67, &&case_S_68, &&case_S_69, &&case_S_70,
&&case_S_71, &&case_S_72, &&case_S_73, &&case_S_74, &&case_S_75, &&case_S_76,
&&case_S_77, &&case_S_78, &&case_S_79, &&case_S_80, &&case_S_81, &&case_S_82,
&&case_S_83, &&case_S_84, &&case_S_85, &&case_S_86, &&case_S_87, &&case_S_88,
&&case_S_89, &&case_S_90};
auto void ASSIGN(void);
// 357 %ROUTINESPEC ASSIGN
// 358
// 359 %ROUTINE SKIP
void SKIP(void) {
// 360 SMAX = SMAX+1; SBUFF(SMAX) = NEXT
SMAX = SMAX + 1;
SBUFF[SMAX - 1] = NEXT;
// 361 READ SYMBOL(NEXT)
_imp_READSYMBOL(/*?*/ &NEXT);
// 362 %END
return;
} /* end of SKIP */
// 363
// 364 %ROUTINE READ NUM
void READNUM(void) {
// 365 RELIND = 0; NUM = 1
RELIND = 0;
NUM = 1;
// 366 RELIND = NEXT %AND SKIP %IF NEXT = '+' %OR NEXT = '-'
if (NEXT == 43) goto L_0073;
if (NEXT != 45) goto L_008C;
L_0073:;
RELIND = NEXT;
SKIP();
L_008C:;
// 367 %IF '0' <= NEXT <= '9' %START
{
// Double-sided test on NEXT (Part I)
int tmp;
if (48 > (tmp = NEXT)) goto L_008D;
// Double-sided test on NEXT (Part II)
if (tmp > 57) goto L_008D;
}
// 368 NUM = NEXT-'0'; SKIP
NUM = NEXT - 48;
SKIP();
// 369 NUM = 10*NUM-'0'+NEXT %AND SKIP %WHILE '0' <= NEXT <= '9'
L_008E:;
{
// Double-sided test on NEXT (Part I)
int tmp;
if (48 > (tmp = NEXT)) goto L_008F;
// Double-sided test on NEXT (Part II)
if (tmp > 57) goto L_008F;
}
NUM = 10 * NUM - 48 + NEXT;
SKIP();
goto L_008E;
L_008F:;
// 370 %FINISH
L_008D:;
// 371 NUM = -NUM %IF RELIND = '-'
if (RELIND != 45) goto L_0090;
NUM = -NUM;
L_0090:;
// 372 %END
return;
} /* end of READNUM */
// 373
// 374 D = DIRECTIVE&LETMASK
D = DIRECTIVE & 95;
// 375 %IF XLINES # 0 %START
if (XLINES == 0) goto L_0091;
// 376 FAULT(6) %IF XLINES > 0 %OR TEXTCOLS # 0
if (XLINES > 0) goto L_0092;
if (TEXTCOLS == 0) goto L_0093;
L_0092:;
FAULT(6);
L_0093:;
// 377 XLINES = 1; RESET DOC LINE
XLINES = 1;
RESETDOCLINE();
// 378 %FINISH
L_0091:;
// 379 %IF TEXTCOLS # 0 %AND 'C' # D # 'T' %START
if (TEXTCOLS == 0) goto L_0094;
{
// Double-sided test on D (Part I)
int tmp;
if (67 == (tmp = D)) goto L_0094;
// Double-sided test on D (Part II)
if (tmp == 84) goto L_0094;
}
// 380 %IF D = NL %START
if (D != 10) goto L_0095;
// 381 STORE(' ') %IF SMAX # 0; STORE(ESCAPE)
if (SMAX == 0) goto L_0096;
STORE(32);
L_0096:;
STORE(ESCAPE);
// 382 %FINISH
L_0095:;
// 383 JUSTIFY %IF JUST # 0 %AND D = 'J'
if (JUST == 0) goto L_0097;
if (D != 74) goto L_0097;
JUSTIFY();
L_0097:;
// 384 PRINT DOC LINE
PRINTDOCLINE();
// 385 PRINT SOURCE LINE %IF SMAX # 0
if (SMAX == 0) goto L_0098;
PRINTSOURCELINE();
L_0098:;
// 386 %FINISH
L_0094:;
// 387 PRINT SOURCE LINE %IF SMAX+5 > SLINE
if (SMAX + 5 <= SLINE) goto L_0099;
PRINTSOURCELINE();
L_0099:;
// 388 %RETURN %IF D = NL
if (D != 10) goto L_009A;
return;
L_009A:;
// 389 STORE(' ') %IF SMAX # 0
if (SMAX == 0) goto L_009B;
STORE(32);
L_009B:;
// 390 STORE(ESCAPE); STORE(DIRECTIVE)
STORE(ESCAPE);
STORE(DIRECTIVE);
// 391 READ NUM
READNUM();
// 392 ->S(D)
S_line = __LINE__;
S_file = __FILE__;
S_index = D;
goto case_S_dispatch;
// 393
// 394 S('A'): !ASSIGN
case_S_65:;
// 395 %CYCLE
L_009D:;
// 396 ASSIGN
ASSIGN();
// 397 SKIP %WHILE NEXT # ';' %AND NEXT # NL
L_009E:;
if (NEXT == 59) goto L_009F;
if (NEXT == 10) goto L_009F;
SKIP();
goto L_009E;
L_009F:;
// 398 %EXIT %IF NEXT = NL
if (NEXT != 10) goto L_00A0;
goto L_00A1;
L_00A0:;
// 399 SKIP
SKIP();
// 400 %REPEAT
goto L_009D;
L_00A1:;
// 401 PAGE = 999 %IF PAGE <= 0
if (PAGE > 0) goto L_00A2;
PAGE = 999;
L_00A2:;
// 402 INVERT = 32 %IF INVERT # 0; INVERTO = 32 %IF INVERTO # 0
if (INVERT == 0) goto L_00A3;
INVERT = 32;
L_00A3:;
if (INVERTO == 0) goto L_00A4;
INVERTO = 32;
L_00A4:;
// 403 FAULT(7) %AND INDENT = 0 %UNLESS 0 <= INDENT <= VBOUND
{
// Double-sided test on INDENT (Part I)
int tmp;
if (0 > (tmp = INDENT)) goto L_00A5;
// Double-sided test on INDENT (Part II)
if (tmp <= 25) goto L_00A6;
}
L_00A5:;
FAULT(7);
INDENT = 0;
L_00A6:;
// 404 INDENTCOL = TAB(INDENT)
INDENTCOL = TAB[INDENT];
// 405 SET COLUMN(INDENTCOL)
SETCOLUMN(INDENTCOL);
// 406 %RETURN
return;
// 407 S('B'): !BLANKS
case_S_66:;
// 408 %IF LINES # 0 %OR XPAGE # 0 %START
if (LINES != 0) goto L_00A7;
if (XPAGE == 0) goto L_00A8;
L_00A7:;
// 409 NUM = NUM*NLS
NUM = NUM * NLS;
// 410 NUM = PAGE-LINES %IF PAGE-LINES < NUM
if (PAGE - LINES >= NUM) goto L_00A9;
NUM = PAGE - LINES;
L_00A9:;
// 411 PRINT DOC LINE %AND NUM = NUM-NLS %WHILE NUM > 0
L_00AA:;
if (NUM <= 0) goto L_00AB;
PRINTDOCLINE();
NUM = NUM - NLS;
goto L_00AA;
L_00AB:;
// 412 %FINISH
L_00A8:;
// 413 %RETURN
return;
// 414 S('C'): !COL
case_S_67:;
// 415 NUM = COLS+1+NUM %IF RELIND # 0
if (RELIND == 0) goto L_00AC;
NUM = COLS + 1 + NUM;
L_00AC:;
// 416 SET COLUMN(NUM)
SETCOLUMN(NUM);
// 417 %RETURN
return;
// 418 S('E'): !END
case_S_69:;
// 419 PRINT DOC LINE %WHILE LINES # 0 %AND PAGE < 999
L_00AD:;
if (LINES == 0) goto L_00AE;
if (PAGE >= 999) goto L_00AE;
PRINTDOCLINE();
goto L_00AD;
L_00AE:;
// 420 FINISH = PAGES; NEXT = NL
FINISH = PAGES;
NEXT = 10;
// 421 %RETURN
return;
// 422 S('I'): !INDENT
case_S_73:;
// 423 NUM = INDENT+NUM %IF RELIND # 0
if (RELIND == 0) goto L_00AF;
NUM = INDENT + NUM;
L_00AF:;
// 424 FAULT(7) %AND NUM = 0 %UNLESS 0 <= NUM <= VBOUND
{
// Double-sided test on NUM (Part I)
int tmp;
if (0 > (tmp = NUM)) goto L_00B0;
// Double-sided test on NUM (Part II)
if (tmp <= 25) goto L_00B1;
}
L_00B0:;
FAULT(7);
NUM = 0;
L_00B1:;
// 425 NUM = TAB(NUM)
NUM = TAB[NUM];
// 426 SET COLUMN(NUM)
SETCOLUMN(NUM);
// 427 %RETURN
return;
// 428 S('J'): !JUSTIFY (DONE)
case_S_74:;
// 429 %RETURN
return;
// 430 S('L'): !LINES
case_S_76:;
// 431 XLINES = NUM; XLINES = -1 %IF XLINES = 0
XLINES = NUM;
if (XLINES != 0) goto L_00B2;
XLINES = -1;
L_00B2:;
// 432 INDENTIND = 0
INDENTIND = 0;
// 433 %WHILE NEXT # NL %CYCLE
L_00B3:;
if (NEXT == 10) goto L_00B4;
// 434 LINECAPIND = CASEBIT %IF NEXT&LETMASK = 'C'
if (NEXT & 95 != 67) goto L_00B5;
LINECAPIND = 32;
L_00B5:;
// 435 LINEUNDIND = UNDBIT %IF NEXT&LETMASK = 'U'
if (NEXT & 95 != 85) goto L_00B6;
LINEUNDIND = 128;
L_00B6:;
// 436 LINEMIDIND = 1 %IF NEXT&LETMASK = 'M'
if (NEXT & 95 != 77) goto L_00B7;
LINEMIDIND = 1;
L_00B7:;
// 437 INDENTIND = 1 %IF NEXT&LETMASK = 'I'
if (NEXT & 95 != 73) goto L_00B8;
INDENTIND = 1;
L_00B8:;
// 438 SKIP
SKIP();
// 439 %REPEAT
goto L_00B3;
L_00B4:;
// 440 COLS = 0 %AND FIXED = 0 %IF INDENTIND = 0
if (INDENTIND != 0) goto L_00B9;
COLS = 0;
FIXED = 0;
L_00B9:;
// 441 %RETURN
return;
// 442 S('S'): !NEW SECTION
case_S_83:;
// 443 S('N'): !NEWPAGE
case_S_78:;
// 444 %RETURN %IF PAGE >= 999
if (PAGE < 999) goto L_00BA;
return;
L_00BA:;
// 445 PRINT DOC LINE %WHILE LINES # 0
L_00BB:;
if (LINES == 0) goto L_00BC;
PRINTDOCLINE();
goto L_00BB;
L_00BC:;
// 446 XPAGE = 1
XPAGE = 1;
// 447 %IF D = 'S' %AND SECTNO # 0 %START
if (D != 83) goto L_00BD;
if (SECTNO == 0) goto L_00BD;
// 448 SECTNO = SECTNO + 1; PAGENO = 1
SECTNO = SECTNO + 1;
PAGENO = 1;
// 449 TURN PAGE
TURNPAGE();
// 450 %FINISH
L_00BD:;
// 451 %RETURN
return;
// 452 S('P'): !PARAGRAPH
case_S_80:;
// 453 %IF LINES # 0 %START
if (LINES == 0) goto L_00BE;
// 454 NUM = NUM*NLS
NUM = NUM * NLS;
// 455 NUM = PAGE-LINES %IF PAGE-LINES < NUM+2
if (PAGE - LINES >= NUM + 2) goto L_00BF;
NUM = PAGE - LINES;
L_00BF:;
// 456 PRINT DOC LINE %AND NUM = NUM-NLS %WHILE NUM > 0
L_00C0:;
if (NUM <= 0) goto L_00C1;
PRINTDOCLINE();
NUM = NUM - NLS;
goto L_00C0;
L_00C1:;
// 457 %FINISH
L_00BE:;
// 458 SET COLUMN(COLS+1+PGAP)
SETCOLUMN(COLS + 1 + PGAP);
// 459 %RETURN
return;
// 460 S('T'): !TAB
case_S_84:;
// 461 %IF RELIND # 0 %START
if (RELIND == 0) goto L_00C2;
// 462 T = 0; C = COLS+1
T = 0;
C = COLS + 1;
// 463 %IF RELIND = '+' %START
if (RELIND != 43) goto L_00C3;
// 464 %WHILE NUM > 0 %CYCLE
L_00C4:;
if (NUM <= 0) goto L_00C5;
// 465 T = T+1 %UNTIL T > VBOUND %OR TAB(T) > C
L_00C6:;
T = T + 1;
if (T > 25) goto L_00C7;
if (TAB[T] > C) goto L_00C7;
goto L_00C6;
L_00C7:;
// 466 FAULT(7) %AND %RETURN %IF T > VBOUND
if (T <= 25) goto L_00C8;
FAULT(7);
return;
L_00C8:;
// 467 C = TAB(T)
C = TAB[T];
// 468 NUM = NUM-1
NUM = NUM - 1;
// 469 %REPEAT
goto L_00C4;
L_00C5:;
// 470 %FINISH %ELSE %START
goto L_00C9;
L_00C3:;
// 471 T = T+1 %UNTIL T > VBOUND %OR TAB(T) >= C
L_00CA:;
T = T + 1;
if (T > 25) goto L_00CB;
if (TAB[T] >= C) goto L_00CB;
goto L_00CA;
L_00CB:;
// 472 %WHILE NUM < 0 %CYCLE
L_00CC:;
if (NUM >= 0) goto L_00CD;
// 473 T = T-1 %UNTIL T < 0 %OR TAB(T) < C
L_00CE:;
T = T - 1;
if (T < 0) goto L_00CF;
if (TAB[T] < C) goto L_00CF;
goto L_00CE;
L_00CF:;
// 474 FAULT(7) %AND %RETURN %IF T < 0
if (T >= 0) goto L_00D0;
FAULT(7);
return;
L_00D0:;
// 475 C = TAB(T)
C = TAB[T];
// 476 NUM = NUM+1
NUM = NUM + 1;
// 477 %REPEAT
goto L_00CC;
L_00CD:;
// 478 %FINISH
L_00C9:;
// 479 %FINISH %ELSE %START
goto L_00D1;
L_00C2:;
// 480 FAULT(7) %AND %RETURN %UNLESS 0 <= NUM <= VBOUND
{
// Double-sided test on NUM (Part I)
int tmp;
if (0 > (tmp = NUM)) goto L_00D2;
// Double-sided test on NUM (Part II)
if (tmp <= 25) goto L_00D3;
}
L_00D2:;
FAULT(7);
return;
L_00D3:;
// 481 C = TAB(NUM)
C = TAB[NUM];
// 482 %FINISH
L_00D1:;
// 483 SET COLUMN(C)
SETCOLUMN(C);
// 484 %RETURN
return;
// 485 S('V'): !VERIFY
case_S_86:;
// 486 %IF PAGE-LINES < NUM*NLS %START
if (PAGE - LINES >= NUM * NLS) goto L_00D4;
// 487 PRINT DOC LINE %WHILE LINES # 0
L_00D5:;
if (LINES == 0) goto L_00D6;
PRINTDOCLINE();
goto L_00D5;
L_00D6:;
// 488 %FINISH
L_00D4:;
// 489 %RETURN
return;
// 490 S('D'): S('F'): S('G'): S('H'):
case_S_68:;
case_S_70:;
case_S_71:;
case_S_72:;
// 491 S('K'): S('M'): S('O'): S('Q'): S('R'):
case_S_75:;
case_S_77:;
case_S_79:;
case_S_81:;
case_S_82:;
// 492 S('U'): S('W'): S('X'): S('Y'): S('Z'):
case_S_85:;
case_S_87:;
case_S_88:;
case_S_89:;
case_S_90:;
// 493 FAULT(5)
FAULT(5);
// 494 %RETURN
return;
// 495
// 496
// 497 %INTEGERFN NEWCELL(%INTEGER H,T)
int NEWCELL(int H, int T) {
// 498 %INTEGER P
int P;
// 499 %STOP %IF FREELIST = 0
if (FREELIST != 0) goto L_00D7;
_imp_stop(0);
L_00D7:;
// 500 P = FREELIST; FREELIST = HEAD(FREELIST)
P = FREELIST;
FREELIST = HEAD[FREELIST - 1];
// 501 HEAD(P) = H; TAIL(P) = T
HEAD[P - 1] = H;
TAIL[P - 1] = T;
// 502 %RESULT = P
return P;
// 503 %END
} /* end of NEWCELL */
// 504
// 505 %ROUTINE POP(%INTEGERNAME L)
void POP(int *L) {
// 506 HEAD(L) = FREELIST; FREELIST = L
HEAD[*L - 1] = FREELIST;
FREELIST = *L;
// 507 L = TAIL(L)
*L = TAIL[*L - 1];
// 508 %END
return;
} /* end of POP */
// 509
// 510 %ROUTINE ASSIGN
void ASSIGN(void) {
// 511 %OWNINTEGER NAMEMAX = 32
static int NAMEMAX = 32;
// 512 %INTEGER I,J,K
int I;
int J;
int K;
auto void READNAME(int *ORDINAL);
auto int *MAP(int I)
;
// 513 %ROUTINESPEC READ NAME(%INTEGERNAME ORDINAL)
// 514 %INTEGERMAPSPEC MAP(%INTEGER I)
// 515
// 516 READ NAME(I); %RETURN %IF I = 0
READNAME(/*?*/ &I);
if (I != 0) goto L_00D8;
return;
L_00D8:;
// 517 SKIP %WHILE NEXT = ' '
L_00D9:;
if (NEXT != 32) goto L_00DA;
SKIP();
goto L_00D9;
L_00DA:;
// 518 %IF NEXT = '<' %OR NEXT = '>' %START
if (NEXT == 60) goto L_00DB;
if (NEXT != 62) goto L_00DC;
L_00DB:;
// 519 J = I
J = I;
// 520 %CYCLE
L_00DD:;
// 521 %IF NEXT = '<' %THEN LINK(J) = NEWCELL(MAP(J),LINK(J)) %C
if (NEXT != 60) goto L_00DE;
LINK[J - 1] = NEWCELL(*MAP(J), LINK[J - 1]);
goto L_00DF;
L_00DE:;
// 522+ %ELSE %START
// 523 MAP(J) = HEAD(LINK(J)); POP(LINK(J))
*MAP(J) = HEAD[LINK[J - 1] - 1];
POP(/*?*/ &LINK[J - 1]);
// 524 %FINISH
L_00DF:;
// 525 J = J+1
J = J + 1;
// 526 %EXIT %IF J < NAMEMAX %OR J = 57
if (J < NAMEMAX) goto L_005F;
if (J != 57) goto L_00E0;
L_005F:;
goto L_00E1;
L_00E0:;
// 527 %REPEAT
goto L_00DD;
L_00E1:;
// 528 SKIP %UNTIL NEXT # ' '
L_00E2:;
SKIP();
if (NEXT != 32) goto L_00E3;
goto L_00E2;
L_00E3:;
// 529 %RETURN %IF NEXT = ';' %OR NEXT = NL
if (NEXT == 59) goto L_00E4;
if (NEXT != 10) goto L_00E5;
L_00E4:;
return;
L_00E5:;
// 530 %FINISH
L_00DC:;
// 531 FAULT(1) %AND %RETURN %IF NEXT # '='
if (NEXT == 61) goto L_00E6;
FAULT(1);
return;
L_00E6:;
// 532 %CYCLE
L_00E7:;
// 533 SKIP %UNTIL NEXT # ' '
L_00E8:;
SKIP();
if (NEXT != 32) goto L_00E9;
goto L_00E8;
L_00E9:;
// 534 %IF 'A' <= NEXT&LETMASK <= 'Z' %START
{
// Double-sided test on NEXT & 95 (Part I)
int tmp;
if (65 > (tmp = NEXT & 95)) goto L_00EA;
// Double-sided test on NEXT & 95 (Part II)
if (tmp > 90) goto L_00EA;
}
// 535 READ NAME(J); %RETURN %IF J = 0
READNAME(/*?*/ &J);
if (J != 0) goto L_00EB;
return;
L_00EB:;
// 536 %FINISH %ELSE %START
goto L_00EC;
L_00EA:;
// 537 J = 0
J = 0;
// 538 %IF NEXT = '''' %START
if (NEXT != 39) goto L_00ED;
// 539 SKIP; !QUOTEMARK
SKIP();
// 540 NUM = NEXT; SKIP; !QUOTED SYMBOL
NUM = NEXT;
SKIP();
// 541 SKIP; !QUOTEMARK (PRESUMABLY)
SKIP();
// 542 %FINISH %ELSE %START
goto L_00EE;
L_00ED:;
// 543 READ NUM
READNUM();
// 544 NUM = MAP(I)+NUM %IF RELIND # 0
if (RELIND == 0) goto L_00EF;
NUM = *MAP(I) + NUM;
L_00EF:;
// 545 %FINISH
L_00EE:;
// 546 %FINISH
L_00EC:;
// 547 %CYCLE
L_00F0:;
// 548 MAP(I) = MAP(J)
*MAP(I) = *MAP(J);
// 549 I = I+1; J = J+1
I = I + 1;
J = J + 1;
// 550 %EXIT %IF J < NAMEMAX %OR I < NAMEMAX %OR I = 57 %OR I = 83 %OR I = 109
if (J < NAMEMAX) goto L_00F1;
if (I < NAMEMAX) goto L_00F1;
if (I == 57) goto L_00F1;
if (I == 83) goto L_00F1;
if (I != 109) goto L_00F2;
L_00F1:;
goto L_00F3;
L_00F2:;
// 551 %REPEAT
goto L_00F0;
L_00F3:;
// 552 %EXIT %UNLESS NEXT = ',' %AND I > NAMEMAX
if (NEXT != 44) goto L_00F4;
if (I > NAMEMAX) goto L_00F5;
L_00F4:;
goto L_00F6;
L_00F5:;
// 553 %REPEAT
goto L_00E7;
L_00F6:;
// 554 FAULT(1) %UNLESS NEXT = ';' %OR NEXT = NL
if (NEXT == 59) goto L_00F7;
if (NEXT == 10) goto L_00F7;
FAULT(1);
L_00F7:;
// 555
// 556 %ROUTINE READ NAME(%INTEGERNAME ORDINAL)
void READNAME(int *ORDINAL) {
// 557 %INTEGER N1,N2
int N1;
int N2;
// 558 %CONSTSHORTINTEGERARRAY NAME1(1:32) = 20976, 2548, 12454, 16423, 12590,
const short int NAME1[32] = {20976, 2548, 12454, 16423, 12590, 19849, 14739, 19681, 16609, 9668, 19619,
16423, 3120, 21956, 3120, 21956, 9686, 3120, 21956, 3120, 21956, 9686,
1635, 10931, 13362, 20097, 6446, 5731, 0, 0, -1, 20514};
// 559+ 19849, 14739, 19681, 16609, 9668, 19619, 16423, 3120,
// 560+ 21956, 3120, 21956, 9686, 3120, 21956, 3120, 21956, 9686,
// 561+ 1635, 10931, 13362, 20097, 6446, 5731, 0, 0,
// 562+ -1, 20514
// 563 %CONSTSHORTINTEGERARRAY NAME2(1:32) = 0, 20973, 20480, 5120, 5120,
const short int NAME2[32] = {0, 20973, 20480, 5120, 5120, 14496, 0, 16384, 16384, 5588, 20943,
5583, 0, 0, 19712, 19712, 5716, 15360, 15360, 19727, 19727, 15360,
9504, 20480, 11264, 19072, 9832, 1541, 0, 0, -1, 0};
// 564+ 14496, 0, 16384, 16384, 5588, 20943, 5583, 0,
// 565+ 0, 19712, 19712, 5716, 15360, 15360, 19727, 19727, 15360,
// 566+ 9504, 20480, 11264, 19072, 9832, 1541, 0, 0,
// 567+ -1, 0
// 568
// 569 %ROUTINE GET(%INTEGERNAME K); ! ...USED BY 'GET TRIO'
void GET(int *K) {
// 570 K = 0 %AND %RETURN %UNLESS 'A' <= NEXT&LETMASK <= 'Z'
{
// Double-sided test on NEXT & 95 (Part I)
int tmp;
if (65 > (tmp = NEXT & 95)) goto L_00F8;
// Double-sided test on NEXT & 95 (Part II)
if (tmp <= 90) goto L_00F9;
}
L_00F8:;
*K = 0;
return;
L_00F9:;
// 571 K = NEXT&31; SKIP
*K = NEXT & 31;
SKIP();
// 572 %END; ! ...GET
return;
} /* end of GET */
// 573
// 574 %ROUTINE GET TRIO(%INTEGERNAME T)
void GETTRIO(int *T) {
// 575 %INTEGER A,B,C
int A;
int B;
int C;
// 576 GET(A); GET(B); GET(C)
GET(/*?*/ &A);
GET(/*?*/ &B);
GET(/*?*/ &C);
// 577 T = (A<<5+B)<<5+C
*T = ((A << 5) + B << 5) + C;
// 578 %END; !GET TRIO
return;
} /* end of GETTRIO */
// 579 SKIP %WHILE NEXT = ' '
L_00FA:;
if (NEXT != 32) goto L_00FB;
SKIP();
goto L_00FA;
L_00FB:;
// 580 GET TRIO(N1); GET TRIO(N2)
GETTRIO(/*?*/ &N1);
GETTRIO(/*?*/ &N2);
// 581 FAULT(1) %AND ORDINAL = 0 %AND %RETURN %IF N1 = 0
if (N1 != 0) goto L_00FC;
FAULT(1);
*ORDINAL = 0;
return;
L_00FC:;
// 582 %IF N1 = 20653 %START; !'TEM' (TEMP)
if (N1 != 20653) goto L_00FD;
// 583 ORDINAL = 58
*ORDINAL = 58;
// 584 ORDINAL = 84 %IF N2 = 16448; !'PB'
if (N2 != 16448) goto L_00FE;
*ORDINAL = 84;
L_00FE:;
// 585 %RETURN
return;
// 586 %FINISH
L_00FD:;
// 587 %CYCLE ORDINAL = 1,1,NAMEMAX
// %for *ORDINAL = 1, 1, NAMEMAX %cycle
{
int _final = NAMEMAX;
if (invalid_for_loop(1, 1, _final)) _imp_signal(5, 1, 0, "Illegal cycle *ORDINAL = 1, 1, NAMEMAX");
*ORDINAL = 0;
L_00FF:
if (*ORDINAL == _final) goto L_0100;
*ORDINAL += 1;
// 588 %RETURN %IF NAME1(ORDINAL) = N1 %AND NAME2(ORDINAL) = N2
if (NAME1[*ORDINAL - 1] != N1) goto L_0102;
if (NAME2[*ORDINAL - 1] != N2) goto L_0102;
return;
L_0102:;
// 589 %REPEAT
goto L_00FF;
}
L_0100:;
// 590 FAULT(3); ORDINAL = 0
FAULT(3);
*ORDINAL = 0;
// 591 %END; !READ NAME
return;
} /* end of READNAME */
// 592
// 593 %INTEGERMAP MAP(%INTEGER I)
int *MAP(int I)
{
// 594 %SWITCH S(0:30)
int S_index;
int S_line;
char *S_file;
static const void *S[31] = {
&&case_S_0, &&case_S_1, &&case_S_2, &&case_S_3, &&case_S_4, &&case_S_5, &&case_S_6,
&&case_S_7, &&case_S_8, &&case_S_9, &&case_S_10, &&case_S_11, &&case_S_12, &&case_S_13,
&&case_S_14, &&case_S_15, &&case_S_16, &&case_S_17, &&case_S_18, &&case_S_19, &&case_S_20,
&&case_S_21, &&case_S_22, &&case_S_23, &&case_S_24, &&case_S_25, &&case_S_26, &&case_S_27,
&&case_S_28, &&case_S_missing, &&case_S_missing};
// 595 %RESULT = = TAB(I-31) %IF I >= 32
if (I < 32) goto L_0103;
return /*?*/ &TAB[I - 31];
L_0103:;
// 596 ->S(I)
S_line = __LINE__;
S_file = __FILE__;
S_index = I;
goto case_S_dispatch;
// 597 S(0): %RESULT = = NUM
case_S_0:;
return /*?*/ &NUM;
// 598 S(1): %RESULT = = TOP
case_S_1:;
return /*?*/ &TOP;
// 599 S(2): %RESULT = = BOTTOM
case_S_2:;
return /*?*/ &BOTTOM;
// 600 S(3): %RESULT = = LEFT
case_S_3:;
return /*?*/ &LEFT;
// 601 S(4): %RESULT = = PAGE
case_S_4:;
return /*?*/ &PAGE;
// 602 S(5): %RESULT = = LINE
case_S_5:;
return /*?*/ &LINE;
// 603 S(6): %RESULT = = SLINE
case_S_6:;
return /*?*/ &SLINE;
// 604 S(7): %RESULT = = NLS
case_S_7:;
return /*?*/ &NLS;
// 605 S(8): %RESULT = = SGAP
case_S_8:;
return /*?*/ &SGAP;
// 606 S(9): %RESULT = = PGAP
case_S_9:;
return /*?*/ &PGAP;
// 607 S(10): %RESULT = = INDENT
case_S_10:;
return /*?*/ &INDENT;
// 608 S(11): %RESULT = = SECTNO
case_S_11:;
return /*?*/ &SECTNO;
// 609 S(12): %RESULT = = PAGENO
case_S_12:;
return /*?*/ &PAGENO;
// 610 S(13): %RESULT = = CAP
case_S_13:;
return /*?*/ &CAP;
// 611 S(14): %RESULT = = UND
case_S_14:;
return /*?*/ &UND;
// 612 S(15): %RESULT = = CAPSH
case_S_15:;
return /*?*/ &CAPSH;
// 613 S(16): %RESULT = = UNDSH
case_S_16:;
return /*?*/ &UNDSH;
// 614 S(17): %RESULT = = INVERT
case_S_17:;
return /*?*/ &INVERT;
// 615 S(18): %RESULT = = CAPO
case_S_18:;
return /*?*/ &CAPO;
// 616 S(19): %RESULT = = UNDO
case_S_19:;
return /*?*/ &UNDO;
// 617 S(20): %RESULT = = CAPSHO
case_S_20:;
return /*?*/ &CAPSHO;
// 618 S(21): %RESULT = = UNDSHO
case_S_21:;
return /*?*/ &UNDSHO;
// 619 S(22): %RESULT = = INVERTO
case_S_22:;
return /*?*/ &INVERTO;
// 620 S(23): %RESULT = = ASCII
case_S_23:;
return /*?*/ &ASCII;
// 621 S(24): %RESULT = = JUST
case_S_24:;
return /*?*/ &JUST;
// 622 S(25): %RESULT = = MARK
case_S_25:;
return /*?*/ &MARK;
// 623 S(26): %RESULT = = START
case_S_26:;
return /*?*/ &START;
// 624 S(27): %RESULT = = FINISH
case_S_27:;
return /*?*/ &FINISH;
// 625 S(28): %RESULT = = ESCAPE
case_S_28:;
return /*?*/ &ESCAPE;
// 626 %END; !MAP
case_S_dispatch:
if (S_index < 0 || S_index > 30)
_imp_signalf(6, 3, S_index, "->S(%d) out of bounds at %s line %d", S_index, S_file, S_line);
goto *S[S_index - 0];
case_S_missing:
_imp_signalf(8, 2, S_index, "switch jump to undefined label S(%d): at %s line %d", S_index, S_file, S_line);
} /* end of MAP */
// 627
// 628 %END;
return;
} /* end of ASSIGN */
// ?K unused
// 629 ; !ASSIGN
// 629
// 630 %END; !PROCESS DIRECTIVE
return;
case_S_dispatch:
if (S_index < 65 || S_index > 90)
_imp_signalf(6, 3, S_index, "->S(%d) out of bounds at %s line %d", S_index, S_file, S_line);
goto *S[S_index - 65];
} /* end of PROCESSDIRECTIVE */
// 631
// 632 SET STREAMS; !OPEN FILES
_imp_SETSTREAMS();
// 633 SELECTINPUT(REQUEST)
_imp_SELECTINPUT(0);
// 634 PRINTSTRING("Sections? (Y or CR) ")
_imp_PRINTSTRING(_imp_str_literal("Sections? (Y or CR) "));
// 635 %IF NEXTSYMBOL='Y' %OR NEXTSYMBOL='y' %THEN CHOOSE=0 %ELSE CHOOSE=-1
if (_imp_NEXTSYMBOL() == 89) goto L_0101;
if (_imp_NEXTSYMBOL() != 121) goto L_0105;
L_0101:;
CHOOSE = 0;
goto L_0106;
L_0105:;
CHOOSE = -1;
L_0106:;
// 636 SKIPSYMBOL
_imp_SKIPSYMBOL();
// 637 TURN PAGE
TURNPAGE();
// 638 SELECT INPUT(SIN)
_imp_SELECTINPUT(1);
// 639 SELECT OUTPUT(SOUT)
_imp_SELECTOUTPUT(2);
// 640 %CYCLE FREELIST = 1,1,108
// %for FREELIST = 1, 1, 108 %cycle
{
FREELIST = 0;
L_0107:
if (FREELIST == 108) goto L_0108;
FREELIST += 1;
// 641 LINK(FREELIST) = 0
LINK[FREELIST - 1] = 0;
// 642 %REPEAT
goto L_0107;
}
L_0108:;
// 643 %CYCLE FREELIST = 1,1,500
// %for FREELIST = 1, 1, 500 %cycle
{
FREELIST = 0;
L_010A:
if (FREELIST == 500) goto L_010B;
FREELIST += 1;
// 644 HEAD(FREELIST) = FREELIST-1
HEAD[FREELIST - 1] = FREELIST - 1;
// 645 %REPEAT
goto L_010A;
}
L_010B:;
// 646 %WHILE PAGES < FINISH %CYCLE
L_010C:;
if (PAGES >= FINISH) goto L_010D;
// 647 READ ATOM OR DIRECTIVE
READATOMORDIRECTIVE();
// 648 %IF DIRECTIVE # 0 %START
if (DIRECTIVE == 0) goto L_010E;
// 649 PROCESS DIRECTIVE
PROCESSDIRECTIVE();
// 650 %FINISH %ELSE %START
goto L_010F;
L_010E:;
// 651 %IF SIZE # 0 %START
if (SIZE == 0) goto L_0110;
// 652 PLACE ATOM
PLACEATOM();
// 653 STORE SOURCE ATOM
STORESOURCEATOM();
// 654 %FINISH
L_0110:;
// 655 %IF XLINES # 0 %START
if (XLINES == 0) goto L_0111;
// 656 %IF NEXT = ' ' %START
if (NEXT != 32) goto L_0112;
// 657 STORE(NEXT)
STORE(NEXT);
// 658 COLS = COLS+1; BUFF(COLS) = ' '
COLS = COLS + 1;
BUFF[COLS - 1] = 32;
// 659 %FINISH
L_0112:;
// 660 PRINT DOC LINE %IF NEXT = NL
if (NEXT != 10) goto L_0113;
PRINTDOCLINE();
L_0113:;
// 661 %FINISH
L_0111:;
// 662 %FINISH
L_010F:;
// 663 PRINT SOURCE LINE %IF NEXT = NL
if (NEXT != 10) goto L_0114;
PRINTSOURCELINE();
L_0114:;
// 664 NEXT = 0 %IF NEXT = ' ' %OR NEXT = NL
if (NEXT == 32) goto L_0115;
if (NEXT != 10) goto L_0116;
L_0115:;
NEXT = 0;
L_0116:;
// 665 %REPEAT
goto L_010C;
L_010D:;
// 666 MARK DOC %IF MARK # 0
if (MARK == 0) goto L_0117;
MARKDOC();
L_0117:;
// 667 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}