PROCEDURE initialize; VAR j : integer; (* 2----------------2 *) PROCEDURE inistdmacs; TYPE alfa66 = PACKED ARRAY [ 1 .. 66] OF char; VAR emptymacrotext : alfa66; ix : 1..66; (* 3----------------3 *) PROCEDURE initmac(macroname: alfa; mactext: alfa66); VAR themacroptr : pmac; length, i : integer; BEGIN (* initmac *) new(themacroptr); WITH themacroptr^ DO BEGIN on := false; nm := macroname; mt := header; np := 0; ma := maclstp; macrobegin := freestgindx; IF mactext = emptymacrotext THEN BEGIN length := linlen; (* allocate, but don''t use the space *) macroend := macrobegin - 1; stgtable[macrobegin] := ' '; END ELSE BEGIN length := 66; WHILE ((length > 1) AND (mactext[length] = ' ')) DO length := length - 1; IF mactext[length] <> ' ' THEN length := length + 1; macroend := macrobegin + length - 1; FOR i := 1 TO length DO stgtable[macrobegin + i - 1] := mactext[i]; END; freestgindx := macrobegin + length; END; maclstp := themacroptr; END; (* initmac *) (* 3----------------3 *) BEGIN (* inistdmacs *) FOR ix := 1 TO 66 DO emptymacrotext[ix] := ' '; maclstp := NIL; initmac('FRCPAGE ', '.TOP .SAV .RESPAG .B 3 ..TTL ..NMP .BR ..STL .B 2 .RES .MID '); frcpgmacp := maclstp; initmac(' d-frcpage', '.FRCPAGE '); defrfrcpgmacp := maclstp; initmac('.NMP ', '$$PAGE=$$PAGE+1; .IF $$NMP .TAB $$RM .RT $$PAGE '); initmac('.TTL ', emptymacrotext); ttlmacp := maclstp; initmac('.STL ', emptymacrotext); stlmacp := maclstp; initmac('.CH ', '.PAGE .FIG 12 .C ^CHAPTER $$CH=$$CH+1 $$HL=0; .B 2 .C ..CHT .B 3 '); chaptermacp := maclstp; initmac('.CHT ', emptymacrotext); chtmacp := maclstp; initmac(' defer pp ', '.PP '); paragmacp := maclstp; initmac(' defer cr ', '.CR '); carrtnmacp := maclstp; initmac(' defer mid', '.MID '); midmacp := maclstp; END (* inistdmacs *); (* 2----------------2 *) PROCEDURE inirels; BEGIN (* inirels *) arelopr[eq] := 'EQ '; arelopr[gt] := 'GT '; arelopr[lt] := 'LT '; arelopr[ne] := 'NE '; arelopr[ge] := 'GE '; arelopr[le] := 'LE '; END (* inirels *); (* 2----------------2 *) PROCEDURE inivars; VAR i : integer; BEGIN (* inivars *) vid[vpage] := '$PAGE '; vty[vpage] := vitem; vid[vch] := '$CH '; vty[vch] := vitem; vid[vhl] := '$HL '; vty[vhl] := varray; vup[vhl] := 5; vid[vlist] := '$LIST '; vty[vlist] := varray; vup[vlist] := 5; vid[vlm] := '$LM '; vty[vlm] := vitem; vid[vrm] := '$RM '; vty[vrm] := vitem; vid[vsp] := '$SP '; vty[vsp] := vitem; vid[vnmp] := '$NMP '; vty[vnmp] := vitem; vid[volno] := '$OLNO '; vty[volno] := vitem; vid[vcr] := '$CR '; vty[vcr] := vitem; tv := nextvariable; FOR i := 1 TO varmax DO val[i] := 0; END (* inivars *); (* 2----------------2 *) PROCEDURE inicmds; (* 3----------------3 *) PROCEDURE init1; BEGIN (* init1 *) cmds[cinclude] := 'INCLUDE '; cmds[cbold] := 'BOLD '; cmds[ccaseflag] := 'CASEFLAG '; cmds[cblank] := 'B '; cmds[cflag] := 'FLAG '; cmds[cflagcaps] := 'FLAGCAPS '; cmds[cflagover] := 'FLAGOVER '; cmds[cflagsig] := 'FLAGSIG '; cmds[clower] := 'LOWER '; cmds[cupper] := 'UPPER '; cmds[cperiod] := 'PERIOD '; cmds[cbreak] := 'BR '; cmds[ccr] := 'CR '; cmds[cescchr] := 'ESC '; cmds[ccenter] := 'C '; cmds[cjust] := 'J '; cmds[cul] := 'UL '; cmds[clmar] := 'LM '; cmds[crmar] := 'RM '; cmds[csup] := 'SUP '; cmds[cstd] := 'STD '; cmds[cps] := 'PAGESIZE '; cmds[csav] := 'SAV '; cmds[cp] := 'P '; cmds[cres] := 'RES '; cmds[cpp] := 'PP '; cmds[csp] := 'SP '; cmds[cs] := 'S '; cmds[ctp] := 'TP '; cmds[cnmp] := 'NMP '; cmds[cpno] := 'PNO '; cmds[ctitle] := 'TITLE '; cmds[cst] := 'ST '; cmds[catitle] := 'ATITLE '; cmds[clist] := 'LIST '; cmds[cle] := 'LE '; cmds[celist] := 'ENDLIST '; END; (* init1 *) (* 3----------------3 *) PROCEDURE init2; BEGIN (* init2 *) cmds[cfig] := 'FIG '; cmds[cbar] := 'BAR '; cmds[cbb] := 'BB '; cmds[ceb] := 'EB '; cmds[cu] := 'U '; cmds[ct] := 'T '; cmds[ctab] := 'TAB '; cmds[ctabs] := 'TABS '; cmds[crt] := 'RT '; cmds[cch] := 'CH '; cmds[cap] := 'AP '; cmds[ci] := 'I '; cmds[cfill] := 'F '; cmds[csig] := 'SIG '; cmds[cpage] := 'PAGE '; cmds[cfrcpage] := 'FRCPAGE '; cmds[ctop] := 'TOP '; cmds[cmid] := 'MID '; cmds[cbot] := 'BOTTOM '; cmds[carray] := 'ARRAY '; cmds[cfmt] := 'FMT '; cmds[cif] := 'IF '; cmds[casis] := 'ASIS '; cmds[cdot] := 'DOT '; cmds[crem] := 'REM '; cmds[cupp] := 'UP '; cmds[cusb] := 'USB '; cmds[chl] := 'HL '; cmds[cright] := 'RIGHT '; cmds[clines] := 'LINES '; cmds[cmacro] := 'MACRO '; cmds[cx] := 'X '; cmds[cvar] := 'VAR '; cmds[cinc] := 'INC '; cmds[cdec] := 'DEC '; cmds[csavpag] := 'SAVPAG '; cmds[crespag] := 'RESPAG '; cmds[notcmd] := '----------'; breakset := [ccenter, ctitle, cst, ci, cch, cle, clist, celist, chl, ccr, cpp, cpage, cfig, cs, ctp, cblank, casis, cbreak, cres, crespag]; crset := breakset - [cbreak, cblank, cres, crespag]; END (* init2 *); (* 3----------------3 *) PROCEDURE iniperfect; BEGIN (* iniperfect *) perfect[ 0] := notcmd; perfect[ 1] := cp; perfect[ 2] := cpp; perfect[ 3] := cnmp; perfect[ 4] := cpage; perfect[ 5] := cjust; perfect[ 6] := notcmd; perfect[ 7] := cperiod; perfect[ 8] := cps (* pagesize *); perfect[ 9] := ctp; perfect[10] := ctop; perfect[11] := cdot; perfect[12] := ctitle; perfect[13] := ceb; perfect[14] := celist; { endlist } perfect[15] := ct; perfect[16] := cbold; perfect[17] := cx; perfect[18] := csp; perfect[19] := csup; perfect[20] := cstd; perfect[21] := ctab; perfect[22] := cinclude; perfect[23] := cblank; perfect[24] := cbb; perfect[25] := cst; perfect[26] := cupp; perfect[27] := ctabs; perfect[28] := cpno; perfect[29] := notcmd; perfect[30] := notcmd; perfect[31] := ci; perfect[32] := crt; perfect[33] := cs; perfect[34] := cle; perfect[35] := cright; perfect[36] := cbreak; perfect[37] := cbar; perfect[38] := cusb; perfect[39] := cescchr; perfect[40] := cdec; perfect[41] := notcmd; perfect[42] := cres; perfect[43] := clist; perfect[44] := notcmd; perfect[45] := cfrcpage; perfect[46] := notcmd; perfect[47] := cap; perfect[48] := cfmt; perfect[49] := cu; perfect[50] := cmid; perfect[51] := catitle; perfect[52] := cupper; perfect[53] := clines; perfect[54] := cinc; perfect[55] := cif; perfect[56] := csig; perfect[57] := csav; perfect[58] := cul; perfect[59] := csavpag; perfect[60] := clower; perfect[61] := ccr; perfect[62] := cflagcaps; perfect[63] := cbot; perfect[64] := cvar; perfect[65] := casis; perfect[66] := crespag; perfect[67] := carray; perfect[68] := notcmd; perfect[69] := cflagover; perfect[70] := chl; perfect[71] := crmar; perfect[72] := crem; perfect[73] := ccenter; perfect[74] := cch; perfect[75] := notcmd; perfect[76] := cmacro; perfect[77] := cfill; perfect[78] := cfig; perfect[79] := cflag; perfect[80] := clmar; perfect[81] := ccaseflag; perfect[82] := cflagsig; END; (* iniperfect *) (* 3----------------3 *) PROCEDURE iniletperfect; BEGIN (* iniletperfect *) letperfect['A'] := 45; letperfect['B'] := 11; letperfect['C'] := 36; letperfect['D'] := 1; letperfect['E'] := 0; letperfect['F'] := 38; letperfect['G'] := 37; letperfect['H'] := 36; letperfect['I'] := 15; letperfect['J'] := 2; letperfect['K'] := 0; letperfect['L'] := 32; letperfect['M'] := 46; letperfect['N'] := 0; letperfect['O'] := 25; letperfect['P'] := 0; letperfect['Q'] := 0; letperfect['R'] := 23; letperfect['S'] := 16; letperfect['T'] := 7; letperfect['U'] := 24; letperfect['V'] := 38; letperfect['W'] := 0; letperfect['X'] := 8; letperfect['Y'] := 17; letperfect['Z'] := 0; END; (* iniletperfect *) (* 3----------------3 *) PROCEDURE initchars; VAR achar: char; BEGIN (* initchars *) FOR achar := chr(0) TO chr(127) DO BEGIN charcategory[achar] := otherchar; (* default -- no CASE conversion *) makeupper[achar] := achar; makelower[achar] := achar; IF (achar >= 'a') AND (achar <= 'z') THEN charcategory[achar] := lcletter ELSE IF (achar >= 'A') AND (achar <= 'Z') THEN charcategory[achar] := ucletter; END; charcategory['^'] := uparrow; charcategory['<'] := leftangle; charcategory['.'] := endsentence; charcategory['?'] := endsentence; charcategory['!'] := endsentence; charcategory['_'] := underscore; charcategory['#'] := numbersign; (* ascii dependent *) {} charcategory[chr(92)] := backslash; charcategory['{'] := miscchar; charcategory['}'] := miscchar; {} charcategory[chr(126)] := miscchar (* tilda *); {} charcategory[chr(96)] := miscchar (* grave *); {} charcategory[chr(124)] := miscchar (* vertical bar *); {} FOR achar := ' ' TO ']' DO IF charcategory[achar] = otherchar THEN charcategory[achar] := arithchar; romanchars := 'M CMD CDC XCL XLX IXV IVI '; romanvalues[ 1] := 1000; romanvalues[ 2] := 900; romanvalues[ 3] := 500; romanvalues[ 4] := 400; romanvalues[ 5] := 100; romanvalues[ 6] := 90; romanvalues[ 7] := 50; romanvalues[ 8] := 40; romanvalues[ 9] := 10; romanvalues[10] := 9; romanvalues[11] := 5; romanvalues[12] := 4; romanvalues[13] := 1; END; (* initchars *) (* 3----------------3 *) BEGIN (* inicmds *) init1; init2; iniperfect; iniletperfect; initchars; END (*inicmds*); (* 2----------------2 *) PROCEDURE inifiles; VAR outname : string; badname : boolean; (* 3----------------3 *) PROCEDURE getfname(VAR s : string); VAR i : integer; BEGIN (* getfname *) i := 0; s := blankstring; WHILE NOT eoln DO IF i < stringlen THEN BEGIN i := i+1; read(s[i]); END ELSE get(input); IF i < stringlen THEN i := i+1; s[i] := ' '; readln; END; (* getfname *) (* 3----------------3 *) BEGIN (* inifiles *) inclf := NIL; freefptr := NIL; inputname := blankstring; outname := blankstring; IF exists(infile) THEN BEGIN filename(infile, inputname); rewrite(lst); filename(lst, outname); END ELSE BEGIN REPEAT prompt(' Input File? '); getfname(inputname); (*$s-*) UNTIL exists(infile, inputname); prompt(' Listing File? '); getfname(outname); rewrite(lst, outname); END; (*$s+*) END (* inifiles *); (* 2----------------2 *) BEGIN (* initialize *) varname := alfablanks; dangerpoint := maxint DIV 10; inifiles; inirels; usb := true; doinclfl := false; undl := false; bold := false; asis := false; xtend := false; errorcount := 0; ilno := 0; eofinput := false; freemacp := NIL; flagover := true; flagsig := true; t := false; rt := false; dot := false; pushed := false; pmar := 0; ap := false; para := false; right := true; rt := false; ovetxt := 58; oetxt := 58; oepag := 66; enp := 0; sup := false; yes := true; enp := 0; parspace := 1; partest := 3; defrb := 0; prel := true; firstch := true; force := false; atitle := false; figp := 0; bar := false; bb := false; clrtab; itemset := ['$', '0' .. '9', '+', '-', '#', '.']; termset := itemset + ['(']; stgmarker := stgtblsize; topofstack := 0; WITH stgstack[0] DO BEGIN activemacro := NIL; stgbegin := 1; stgend := linlen; freestgindx := stgend + 1; stgposition := 1; END; FOR j := 1 TO freestgindx DO stgtable[j] := ' '; stgtable[1] := ' '; (* FOR j := 1 TO stgtblsize DO stgtable[j] := ' '; *) inistdmacs; inicmds; setstd; inivars; val[vnmp] := 1; val[vrm] := 72; val[vsp] := 1; val[vlm] := 1; {} val[vcr] := 128 + 13; FOR j := 0 TO linlen DO emptyflags[j] := false; clear; syl := otl; tmpl := otl; pagsav := otl; addsyl := otl; pqend := false; ovbtxt := 0; WITH just DO FOR j := 1 TO linlen DO pos[j] := 0; just.ndx := 0; rightspace := 0; FOR j := 1 TO figmax DO fign[j] := 0; holdbb := false; lastcup := 0; lastlen := 0; lastslen := 0; pagotl := false; exprerr := false; showexpr := true; xtrabl := pqend; val[volno] := 10000; (* force initial paging *) savenv(pagenv); pushtext(midmacp); END (* initialize *); (* 1----------------1 *)