modernc.org/knuth@v0.0.4/tangle/testdata/tex.p (about) 1 {4:}{9:}{$C-,A+,D-}{[$C+,D+]}{:9}PROGRAM TEX;LABEL{6:}1; 2 {:6}CONST{11:}MEMMAX=30000;MEMMIN=0;BUFSIZE=500;ERRORLINE=72; 3 HALFERRORLINE=42;MAXPRINTLINE=79;STACKSIZE=200;MAXINOPEN=6;FONTMAX=75; 4 FONTMEMSIZE=20000;PARAMSIZE=60;NESTSIZE=40;MAXSTRINGS=3000; 5 STRINGVACANCIES=8000;POOLSIZE=32000;SAVESIZE=600;TRIESIZE=8000; 6 TRIEOPSIZE=500;DVIBUFSIZE=800;FILENAMESIZE=40; 7 POOLNAME='TeXformats:TEX.POOL '; 8 {:11}TYPE{18:}ASCIICODE=0..255;{:18}{25:}EIGHTBITS=0..255; 9 ALPHAFILE=PACKED FILE OF CHAR;BYTEFILE=PACKED FILE OF EIGHTBITS; 10 {:25}{38:}POOLPOINTER=0..POOLSIZE;STRNUMBER=0..MAXSTRINGS; 11 PACKEDASCIICODE=0..255;{:38}{101:}SCALED=INTEGER; 12 NONNEGATIVEINTEGER=0..2147483647;SMALLNUMBER=0..63; 13 {:101}{109:}GLUERATIO=REAL;{:109}{113:}QUARTERWORD=0..255; 14 HALFWORD=0..65535;TWOCHOICES=1..2;FOURCHOICES=1..4; 15 TWOHALVES=PACKED RECORD RH:HALFWORD;CASE TWOCHOICES OF 1:(LH:HALFWORD); 16 2:(B0:QUARTERWORD;B1:QUARTERWORD);END; 17 FOURQUARTERS=PACKED RECORD B0:QUARTERWORD;B1:QUARTERWORD;B2:QUARTERWORD; 18 B3:QUARTERWORD;END; 19 MEMORYWORD=RECORD CASE FOURCHOICES OF 1:(INT:INTEGER);2:(GR:GLUERATIO); 20 3:(HH:TWOHALVES);4:(QQQQ:FOURQUARTERS);END;WORDFILE=FILE OF MEMORYWORD; 21 {:113}{150:}GLUEORD=0..3; 22 {:150}{212:}LISTSTATERECORD=RECORD MODEFIELD:-203..203; 23 HEADFIELD,TAILFIELD:HALFWORD;PGFIELD,MLFIELD:INTEGER; 24 AUXFIELD:MEMORYWORD;END;{:212}{269:}GROUPCODE=0..16; 25 {:269}{300:}INSTATERECORD=RECORD STATEFIELD,INDEXFIELD:QUARTERWORD; 26 STARTFIELD,LOCFIELD,LIMITFIELD,NAMEFIELD:HALFWORD;END; 27 {:300}{548:}INTERNALFONTNUMBER=0..FONTMAX;FONTINDEX=0..FONTMEMSIZE; 28 {:548}{594:}DVIINDEX=0..DVIBUFSIZE;{:594}{920:}TRIEPOINTER=0..TRIESIZE; 29 {:920}{925:}HYPHPOINTER=0..307;{:925}VAR{13:}BAD:INTEGER; 30 {:13}{20:}XORD:ARRAY[CHAR]OF ASCIICODE;XCHR:ARRAY[ASCIICODE]OF CHAR; 31 {:20}{26:}NAMEOFFILE:PACKED ARRAY[1..FILENAMESIZE]OF CHAR; 32 NAMELENGTH:0..FILENAMESIZE; 33 {:26}{30:}BUFFER:ARRAY[0..BUFSIZE]OF ASCIICODE;FIRST:0..BUFSIZE; 34 LAST:0..BUFSIZE;MAXBUFSTACK:0..BUFSIZE;{:30}{32:}TERMIN:ALPHAFILE; 35 TERMOUT:ALPHAFILE; 36 {:32}{39:}STRPOOL:PACKED ARRAY[POOLPOINTER]OF PACKEDASCIICODE; 37 STRSTART:ARRAY[STRNUMBER]OF POOLPOINTER;POOLPTR:POOLPOINTER; 38 STRPTR:STRNUMBER;INITPOOLPTR:POOLPOINTER;INITSTRPTR:STRNUMBER; 39 {:39}{50:}POOLFILE:ALPHAFILE;{:50}{54:}LOGFILE:ALPHAFILE;SELECTOR:0..21; 40 DIG:ARRAY[0..22]OF 0..15;TALLY:INTEGER;TERMOFFSET:0..MAXPRINTLINE; 41 FILEOFFSET:0..MAXPRINTLINE;TRICKBUF:ARRAY[0..ERRORLINE]OF ASCIICODE; 42 TRICKCOUNT:INTEGER;FIRSTCOUNT:INTEGER;{:54}{73:}INTERACTION:0..3; 43 {:73}{76:}DELETIONSALLOWED:BOOLEAN;SETBOXALLOWED:BOOLEAN;HISTORY:0..3; 44 ERRORCOUNT:-1..100;{:76}{79:}HELPLINE:ARRAY[0..5]OF STRNUMBER; 45 HELPPTR:0..6;USEERRHELP:BOOLEAN;{:79}{96:}INTERRUPT:INTEGER; 46 OKTOINTERRUPT:BOOLEAN;{:96}{104:}ARITHERROR:BOOLEAN;REMAINDER:SCALED; 47 {:104}{115:}TEMPPTR:HALFWORD; 48 {:115}{116:}MEM:ARRAY[MEMMIN..MEMMAX]OF MEMORYWORD;LOMEMMAX:HALFWORD; 49 HIMEMMIN:HALFWORD;{:116}{117:}VARUSED,DYNUSED:INTEGER; 50 {:117}{118:}AVAIL:HALFWORD;MEMEND:HALFWORD;{:118}{124:}ROVER:HALFWORD; 51 {:124}{165:}{FREE:PACKED ARRAY[MEMMIN..MEMMAX]OF BOOLEAN; 52 WASFREE:PACKED ARRAY[MEMMIN..MEMMAX]OF BOOLEAN; 53 WASMEMEND,WASLOMAX,WASHIMIN:HALFWORD;PANICKING:BOOLEAN;} 54 {:165}{173:}FONTINSHORTDISPLAY:INTEGER; 55 {:173}{181:}DEPTHTHRESHOLD:INTEGER;BREADTHMAX:INTEGER; 56 {:181}{213:}NEST:ARRAY[0..NESTSIZE]OF LISTSTATERECORD; 57 NESTPTR:0..NESTSIZE;MAXNESTSTACK:0..NESTSIZE;CURLIST:LISTSTATERECORD; 58 SHOWNMODE:-203..203;{:213}{246:}OLDSETTING:0..21; 59 SYSTIME,SYSDAY,SYSMONTH,SYSYEAR:INTEGER; 60 {:246}{253:}EQTB:ARRAY[1..6106]OF MEMORYWORD; 61 XEQLEVEL:ARRAY[5263..6106]OF QUARTERWORD; 62 {:253}{256:}HASH:ARRAY[514..2880]OF TWOHALVES;HASHUSED:HALFWORD; 63 NONEWCONTROLSEQUENCE:BOOLEAN;CSCOUNT:INTEGER; 64 {:256}{271:}SAVESTACK:ARRAY[0..SAVESIZE]OF MEMORYWORD; 65 SAVEPTR:0..SAVESIZE;MAXSAVESTACK:0..SAVESIZE;CURLEVEL:QUARTERWORD; 66 CURGROUP:GROUPCODE;CURBOUNDARY:0..SAVESIZE;{:271}{286:}MAGSET:INTEGER; 67 {:286}{297:}CURCMD:EIGHTBITS;CURCHR:HALFWORD;CURCS:HALFWORD; 68 CURTOK:HALFWORD; 69 {:297}{301:}INPUTSTACK:ARRAY[0..STACKSIZE]OF INSTATERECORD; 70 INPUTPTR:0..STACKSIZE;MAXINSTACK:0..STACKSIZE;CURINPUT:INSTATERECORD; 71 {:301}{304:}INOPEN:0..MAXINOPEN;OPENPARENS:0..MAXINOPEN; 72 INPUTFILE:ARRAY[1..MAXINOPEN]OF ALPHAFILE;LINE:INTEGER; 73 LINESTACK:ARRAY[1..MAXINOPEN]OF INTEGER;{:304}{305:}SCANNERSTATUS:0..5; 74 WARNINGINDEX:HALFWORD;DEFREF:HALFWORD; 75 {:305}{308:}PARAMSTACK:ARRAY[0..PARAMSIZE]OF HALFWORD; 76 PARAMPTR:0..PARAMSIZE;MAXPARAMSTACK:INTEGER; 77 {:308}{309:}ALIGNSTATE:INTEGER;{:309}{310:}BASEPTR:0..STACKSIZE; 78 {:310}{333:}PARLOC:HALFWORD;PARTOKEN:HALFWORD; 79 {:333}{361:}FORCEEOF:BOOLEAN;{:361}{382:}CURMARK:ARRAY[0..4]OF HALFWORD; 80 {:382}{387:}LONGSTATE:111..114; 81 {:387}{388:}PSTACK:ARRAY[0..8]OF HALFWORD;{:388}{410:}CURVAL:INTEGER; 82 CURVALLEVEL:0..5;{:410}{438:}RADIX:SMALLNUMBER; 83 {:438}{447:}CURORDER:GLUEORD; 84 {:447}{480:}READFILE:ARRAY[0..15]OF ALPHAFILE; 85 READOPEN:ARRAY[0..16]OF 0..2;{:480}{489:}CONDPTR:HALFWORD;IFLIMIT:0..4; 86 CURIF:SMALLNUMBER;IFLINE:INTEGER;{:489}{493:}SKIPLINE:INTEGER; 87 {:493}{512:}CURNAME:STRNUMBER;CURAREA:STRNUMBER;CUREXT:STRNUMBER; 88 {:512}{513:}AREADELIMITER:POOLPOINTER;EXTDELIMITER:POOLPOINTER; 89 {:513}{520:}TEXFORMATDEFAULT:PACKED ARRAY[1..20]OF CHAR; 90 {:520}{527:}NAMEINPROGRESS:BOOLEAN;JOBNAME:STRNUMBER;LOGOPENED:BOOLEAN; 91 {:527}{532:}DVIFILE:BYTEFILE;OUTPUTFILENAME:STRNUMBER;LOGNAME:STRNUMBER; 92 {:532}{539:}TFMFILE:BYTEFILE;BUF:EIGHTBITS; 93 {:539}{549:}FONTINFO:ARRAY[FONTINDEX]OF MEMORYWORD;FMEMPTR:FONTINDEX; 94 FONTPTR:INTERNALFONTNUMBER; 95 FONTCHECK:ARRAY[INTERNALFONTNUMBER]OF FOURQUARTERS; 96 FONTSIZE:ARRAY[INTERNALFONTNUMBER]OF SCALED; 97 FONTDSIZE:ARRAY[INTERNALFONTNUMBER]OF SCALED; 98 FONTPARAMS:ARRAY[INTERNALFONTNUMBER]OF FONTINDEX; 99 FONTNAME:ARRAY[INTERNALFONTNUMBER]OF STRNUMBER; 100 FONTAREA:ARRAY[INTERNALFONTNUMBER]OF STRNUMBER; 101 FONTBC:ARRAY[INTERNALFONTNUMBER]OF EIGHTBITS; 102 FONTEC:ARRAY[INTERNALFONTNUMBER]OF EIGHTBITS; 103 FONTGLUE:ARRAY[INTERNALFONTNUMBER]OF HALFWORD; 104 FONTUSED:ARRAY[INTERNALFONTNUMBER]OF BOOLEAN; 105 HYPHENCHAR:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 106 SKEWCHAR:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 107 BCHARLABEL:ARRAY[INTERNALFONTNUMBER]OF FONTINDEX; 108 FONTBCHAR:ARRAY[INTERNALFONTNUMBER]OF 0..256; 109 FONTFALSEBCHAR:ARRAY[INTERNALFONTNUMBER]OF 0..256; 110 {:549}{550:}CHARBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 111 WIDTHBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 112 HEIGHTBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 113 DEPTHBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 114 ITALICBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 115 LIGKERNBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 116 KERNBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 117 EXTENBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 118 PARAMBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; 119 {:550}{555:}NULLCHARACTER:FOURQUARTERS;{:555}{592:}TOTALPAGES:INTEGER; 120 MAXV:SCALED;MAXH:SCALED;MAXPUSH:INTEGER;LASTBOP:INTEGER; 121 DEADCYCLES:INTEGER;DOINGLEADERS:BOOLEAN;C,F:QUARTERWORD; 122 RULEHT,RULEDP,RULEWD:SCALED;G:HALFWORD;LQ,LR:INTEGER; 123 {:592}{595:}DVIBUF:ARRAY[DVIINDEX]OF EIGHTBITS;HALFBUF:DVIINDEX; 124 DVILIMIT:DVIINDEX;DVIPTR:DVIINDEX;DVIOFFSET:INTEGER;DVIGONE:INTEGER; 125 {:595}{605:}DOWNPTR,RIGHTPTR:HALFWORD;{:605}{616:}DVIH,DVIV:SCALED; 126 CURH,CURV:SCALED;DVIF:INTERNALFONTNUMBER;CURS:INTEGER; 127 {:616}{646:}TOTALSTRETCH,TOTALSHRINK:ARRAY[GLUEORD]OF SCALED; 128 LASTBADNESS:INTEGER;{:646}{647:}ADJUSTTAIL:HALFWORD; 129 {:647}{661:}PACKBEGINLINE:INTEGER;{:661}{684:}EMPTYFIELD:TWOHALVES; 130 NULLDELIMITER:FOURQUARTERS;{:684}{719:}CURMLIST:HALFWORD; 131 CURSTYLE:SMALLNUMBER;CURSIZE:SMALLNUMBER;CURMU:SCALED; 132 MLISTPENALTIES:BOOLEAN;{:719}{724:}CURF:INTERNALFONTNUMBER; 133 CURC:QUARTERWORD;CURI:FOURQUARTERS;{:724}{764:}MAGICOFFSET:INTEGER; 134 {:764}{770:}CURALIGN:HALFWORD;CURSPAN:HALFWORD;CURLOOP:HALFWORD; 135 ALIGNPTR:HALFWORD;CURHEAD,CURTAIL:HALFWORD;{:770}{814:}JUSTBOX:HALFWORD; 136 {:814}{821:}PASSIVE:HALFWORD;PRINTEDNODE:HALFWORD;PASSNUMBER:HALFWORD; 137 {:821}{823:}ACTIVEWIDTH:ARRAY[1..6]OF SCALED; 138 CURACTIVEWIDTH:ARRAY[1..6]OF SCALED;BACKGROUND:ARRAY[1..6]OF SCALED; 139 BREAKWIDTH:ARRAY[1..6]OF SCALED;{:823}{825:}NOSHRINKERRORYET:BOOLEAN; 140 {:825}{828:}CURP:HALFWORD;SECONDPASS:BOOLEAN;FINALPASS:BOOLEAN; 141 THRESHOLD:INTEGER;{:828}{833:}MINIMALDEMERITS:ARRAY[0..3]OF INTEGER; 142 MINIMUMDEMERITS:INTEGER;BESTPLACE:ARRAY[0..3]OF HALFWORD; 143 BESTPLLINE:ARRAY[0..3]OF HALFWORD;{:833}{839:}DISCWIDTH:SCALED; 144 {:839}{847:}EASYLINE:HALFWORD;LASTSPECIALLINE:HALFWORD; 145 FIRSTWIDTH:SCALED;SECONDWIDTH:SCALED;FIRSTINDENT:SCALED; 146 SECONDINDENT:SCALED;{:847}{872:}BESTBET:HALFWORD;FEWESTDEMERITS:INTEGER; 147 BESTLINE:HALFWORD;ACTUALLOOSENESS:INTEGER;LINEDIFF:INTEGER; 148 {:872}{892:}HC:ARRAY[0..65]OF 0..256;HN:0..64;HA,HB:HALFWORD; 149 HF:INTERNALFONTNUMBER;HU:ARRAY[0..63]OF 0..256;HYFCHAR:INTEGER; 150 CURLANG,INITCURLANG:ASCIICODE;LHYF,RHYF,INITLHYF,INITRHYF:INTEGER; 151 HYFBCHAR:HALFWORD;{:892}{900:}HYF:ARRAY[0..64]OF 0..9;INITLIST:HALFWORD; 152 INITLIG:BOOLEAN;INITLFT:BOOLEAN;{:900}{905:}HYPHENPASSED:SMALLNUMBER; 153 {:905}{907:}CURL,CURR:HALFWORD;CURQ:HALFWORD;LIGSTACK:HALFWORD; 154 LIGATUREPRESENT:BOOLEAN;LFTHIT,RTHIT:BOOLEAN; 155 {:907}{921:}TRIE:ARRAY[TRIEPOINTER]OF TWOHALVES; 156 HYFDISTANCE:ARRAY[1..TRIEOPSIZE]OF SMALLNUMBER; 157 HYFNUM:ARRAY[1..TRIEOPSIZE]OF SMALLNUMBER; 158 HYFNEXT:ARRAY[1..TRIEOPSIZE]OF QUARTERWORD; 159 OPSTART:ARRAY[ASCIICODE]OF 0..TRIEOPSIZE; 160 {:921}{926:}HYPHWORD:ARRAY[HYPHPOINTER]OF STRNUMBER; 161 HYPHLIST:ARRAY[HYPHPOINTER]OF HALFWORD;HYPHCOUNT:HYPHPOINTER; 162 {:926}{943:}TRIEOPHASH:ARRAY[-TRIEOPSIZE..TRIEOPSIZE]OF 0..TRIEOPSIZE; 163 TRIEUSED:ARRAY[ASCIICODE]OF QUARTERWORD; 164 TRIEOPLANG:ARRAY[1..TRIEOPSIZE]OF ASCIICODE; 165 TRIEOPVAL:ARRAY[1..TRIEOPSIZE]OF QUARTERWORD;TRIEOPPTR:0..TRIEOPSIZE; 166 {:943}{947:}TRIEC:PACKED ARRAY[TRIEPOINTER]OF PACKEDASCIICODE; 167 TRIEO:PACKED ARRAY[TRIEPOINTER]OF QUARTERWORD; 168 TRIEL:PACKED ARRAY[TRIEPOINTER]OF TRIEPOINTER; 169 TRIER:PACKED ARRAY[TRIEPOINTER]OF TRIEPOINTER;TRIEPTR:TRIEPOINTER; 170 TRIEHASH:PACKED ARRAY[TRIEPOINTER]OF TRIEPOINTER; 171 {:947}{950:}TRIETAKEN:PACKED ARRAY[1..TRIESIZE]OF BOOLEAN; 172 TRIEMIN:ARRAY[ASCIICODE]OF TRIEPOINTER;TRIEMAX:TRIEPOINTER; 173 TRIENOTREADY:BOOLEAN;{:950}{971:}BESTHEIGHTPLUSDEPTH:SCALED; 174 {:971}{980:}PAGETAIL:HALFWORD;PAGECONTENTS:0..2;PAGEMAXDEPTH:SCALED; 175 BESTPAGEBREAK:HALFWORD;LEASTPAGECOST:INTEGER;BESTSIZE:SCALED; 176 {:980}{982:}PAGESOFAR:ARRAY[0..7]OF SCALED;LASTGLUE:HALFWORD; 177 LASTPENALTY:INTEGER;LASTKERN:SCALED;INSERTPENALTIES:INTEGER; 178 {:982}{989:}OUTPUTACTIVE:BOOLEAN;{:989}{1032:}MAINF:INTERNALFONTNUMBER; 179 MAINI:FOURQUARTERS;MAINJ:FOURQUARTERS;MAINK:FONTINDEX;MAINP:HALFWORD; 180 MAINS:INTEGER;BCHAR:HALFWORD;FALSEBCHAR:HALFWORD;CANCELBOUNDARY:BOOLEAN; 181 INSDISC:BOOLEAN;{:1032}{1074:}CURBOX:HALFWORD; 182 {:1074}{1266:}AFTERTOKEN:HALFWORD;{:1266}{1281:}LONGHELPSEEN:BOOLEAN; 183 {:1281}{1299:}FORMATIDENT:STRNUMBER;{:1299}{1305:}FMTFILE:WORDFILE; 184 {:1305}{1331:}READYALREADY:INTEGER; 185 {:1331}{1342:}WRITEFILE:ARRAY[0..15]OF ALPHAFILE; 186 WRITEOPEN:ARRAY[0..17]OF BOOLEAN;{:1342}{1345:}WRITELOC:HALFWORD; 187 {:1345}PROCEDURE INITIALIZE;VAR{19:}I:INTEGER;{:19}{163:}K:INTEGER; 188 {:163}{927:}Z:HYPHPOINTER;{:927}BEGIN{8:}{21:}XCHR[32]:=' '; 189 XCHR[33]:='!';XCHR[34]:='"';XCHR[35]:='#';XCHR[36]:='$';XCHR[37]:='%'; 190 XCHR[38]:='&';XCHR[39]:='''';XCHR[40]:='(';XCHR[41]:=')';XCHR[42]:='*'; 191 XCHR[43]:='+';XCHR[44]:=',';XCHR[45]:='-';XCHR[46]:='.';XCHR[47]:='/'; 192 XCHR[48]:='0';XCHR[49]:='1';XCHR[50]:='2';XCHR[51]:='3';XCHR[52]:='4'; 193 XCHR[53]:='5';XCHR[54]:='6';XCHR[55]:='7';XCHR[56]:='8';XCHR[57]:='9'; 194 XCHR[58]:=':';XCHR[59]:=';';XCHR[60]:='<';XCHR[61]:='=';XCHR[62]:='>'; 195 XCHR[63]:='?';XCHR[64]:='@';XCHR[65]:='A';XCHR[66]:='B';XCHR[67]:='C'; 196 XCHR[68]:='D';XCHR[69]:='E';XCHR[70]:='F';XCHR[71]:='G';XCHR[72]:='H'; 197 XCHR[73]:='I';XCHR[74]:='J';XCHR[75]:='K';XCHR[76]:='L';XCHR[77]:='M'; 198 XCHR[78]:='N';XCHR[79]:='O';XCHR[80]:='P';XCHR[81]:='Q';XCHR[82]:='R'; 199 XCHR[83]:='S';XCHR[84]:='T';XCHR[85]:='U';XCHR[86]:='V';XCHR[87]:='W'; 200 XCHR[88]:='X';XCHR[89]:='Y';XCHR[90]:='Z';XCHR[91]:='[';XCHR[92]:='\'; 201 XCHR[93]:=']';XCHR[94]:='^';XCHR[95]:='_';XCHR[96]:='`';XCHR[97]:='a'; 202 XCHR[98]:='b';XCHR[99]:='c';XCHR[100]:='d';XCHR[101]:='e'; 203 XCHR[102]:='f';XCHR[103]:='g';XCHR[104]:='h';XCHR[105]:='i'; 204 XCHR[106]:='j';XCHR[107]:='k';XCHR[108]:='l';XCHR[109]:='m'; 205 XCHR[110]:='n';XCHR[111]:='o';XCHR[112]:='p';XCHR[113]:='q'; 206 XCHR[114]:='r';XCHR[115]:='s';XCHR[116]:='t';XCHR[117]:='u'; 207 XCHR[118]:='v';XCHR[119]:='w';XCHR[120]:='x';XCHR[121]:='y'; 208 XCHR[122]:='z';XCHR[123]:='{';XCHR[124]:='|';XCHR[125]:='}'; 209 XCHR[126]:='~';{:21}{23:}FOR I:=0 TO 31 DO XCHR[I]:=' '; 210 FOR I:=127 TO 255 DO XCHR[I]:=' '; 211 {:23}{24:}FOR I:=0 TO 255 DO XORD[CHR(I)]:=127; 212 FOR I:=128 TO 255 DO XORD[XCHR[I]]:=I; 213 FOR I:=0 TO 126 DO XORD[XCHR[I]]:=I;{:24}{74:}INTERACTION:=3; 214 {:74}{77:}DELETIONSALLOWED:=TRUE;SETBOXALLOWED:=TRUE;ERRORCOUNT:=0; 215 {:77}{80:}HELPPTR:=0;USEERRHELP:=FALSE;{:80}{97:}INTERRUPT:=0; 216 OKTOINTERRUPT:=TRUE;{:97}{166:}{WASMEMEND:=MEMMIN;WASLOMAX:=MEMMIN; 217 WASHIMIN:=MEMMAX;PANICKING:=FALSE;}{:166}{215:}NESTPTR:=0; 218 MAXNESTSTACK:=0;CURLIST.MODEFIELD:=1;CURLIST.HEADFIELD:=29999; 219 CURLIST.TAILFIELD:=29999;CURLIST.AUXFIELD.INT:=-65536000; 220 CURLIST.MLFIELD:=0;CURLIST.PGFIELD:=0;SHOWNMODE:=0; 221 {991:}PAGECONTENTS:=0;PAGETAIL:=29998;MEM[29998].HH.RH:=0; 222 LASTGLUE:=65535;LASTPENALTY:=0;LASTKERN:=0;PAGESOFAR[7]:=0; 223 PAGEMAXDEPTH:=0{:991};{:215}{254:}FOR K:=5263 TO 6106 DO XEQLEVEL[K]:=1; 224 {:254}{257:}NONEWCONTROLSEQUENCE:=TRUE;HASH[514].LH:=0;HASH[514].RH:=0; 225 FOR K:=515 TO 2880 DO HASH[K]:=HASH[514];{:257}{272:}SAVEPTR:=0; 226 CURLEVEL:=1;CURGROUP:=0;CURBOUNDARY:=0;MAXSAVESTACK:=0; 227 {:272}{287:}MAGSET:=0;{:287}{383:}CURMARK[0]:=0;CURMARK[1]:=0; 228 CURMARK[2]:=0;CURMARK[3]:=0;CURMARK[4]:=0;{:383}{439:}CURVAL:=0; 229 CURVALLEVEL:=0;RADIX:=0;CURORDER:=0; 230 {:439}{481:}FOR K:=0 TO 16 DO READOPEN[K]:=2;{:481}{490:}CONDPTR:=0; 231 IFLIMIT:=0;CURIF:=0;IFLINE:=0; 232 {:490}{521:}TEXFORMATDEFAULT:='TeXformats:plain.fmt'; 233 {:521}{551:}FOR K:=0 TO FONTMAX DO FONTUSED[K]:=FALSE; 234 {:551}{556:}NULLCHARACTER.B0:=0;NULLCHARACTER.B1:=0;NULLCHARACTER.B2:=0; 235 NULLCHARACTER.B3:=0;{:556}{593:}TOTALPAGES:=0;MAXV:=0;MAXH:=0; 236 MAXPUSH:=0;LASTBOP:=-1;DOINGLEADERS:=FALSE;DEADCYCLES:=0;CURS:=-1; 237 {:593}{596:}HALFBUF:=DVIBUFSIZE DIV 2;DVILIMIT:=DVIBUFSIZE;DVIPTR:=0; 238 DVIOFFSET:=0;DVIGONE:=0;{:596}{606:}DOWNPTR:=0;RIGHTPTR:=0; 239 {:606}{648:}ADJUSTTAIL:=0;LASTBADNESS:=0;{:648}{662:}PACKBEGINLINE:=0; 240 {:662}{685:}EMPTYFIELD.RH:=0;EMPTYFIELD.LH:=0;NULLDELIMITER.B0:=0; 241 NULLDELIMITER.B1:=0;NULLDELIMITER.B2:=0;NULLDELIMITER.B3:=0; 242 {:685}{771:}ALIGNPTR:=0;CURALIGN:=0;CURSPAN:=0;CURLOOP:=0;CURHEAD:=0; 243 CURTAIL:=0;{:771}{928:}FOR Z:=0 TO 307 DO BEGIN HYPHWORD[Z]:=0; 244 HYPHLIST[Z]:=0;END;HYPHCOUNT:=0;{:928}{990:}OUTPUTACTIVE:=FALSE; 245 INSERTPENALTIES:=0;{:990}{1033:}LIGATUREPRESENT:=FALSE; 246 CANCELBOUNDARY:=FALSE;LFTHIT:=FALSE;RTHIT:=FALSE;INSDISC:=FALSE; 247 {:1033}{1267:}AFTERTOKEN:=0;{:1267}{1282:}LONGHELPSEEN:=FALSE; 248 {:1282}{1300:}FORMATIDENT:=0; 249 {:1300}{1343:}FOR K:=0 TO 17 DO WRITEOPEN[K]:=FALSE; 250 {:1343}{164:}FOR K:=1 TO 19 DO MEM[K].INT:=0;K:=0; 251 WHILE K<=19 DO BEGIN MEM[K].HH.RH:=1;MEM[K].HH.B0:=0;MEM[K].HH.B1:=0; 252 K:=K+4;END;MEM[6].INT:=65536;MEM[4].HH.B0:=1;MEM[10].INT:=65536; 253 MEM[8].HH.B0:=2;MEM[14].INT:=65536;MEM[12].HH.B0:=1;MEM[15].INT:=65536; 254 MEM[12].HH.B1:=1;MEM[18].INT:=-65536;MEM[16].HH.B0:=1;ROVER:=20; 255 MEM[ROVER].HH.RH:=65535;MEM[ROVER].HH.LH:=1000; 256 MEM[ROVER+1].HH.LH:=ROVER;MEM[ROVER+1].HH.RH:=ROVER; 257 LOMEMMAX:=ROVER+1000;MEM[LOMEMMAX].HH.RH:=0;MEM[LOMEMMAX].HH.LH:=0; 258 FOR K:=29987 TO 30000 DO MEM[K]:=MEM[LOMEMMAX]; 259 {790:}MEM[29990].HH.LH:=6714;{:790}{797:}MEM[29991].HH.RH:=256; 260 MEM[29991].HH.LH:=0;{:797}{820:}MEM[29993].HH.B0:=1; 261 MEM[29994].HH.LH:=65535;MEM[29993].HH.B1:=0; 262 {:820}{981:}MEM[30000].HH.B1:=255;MEM[30000].HH.B0:=1; 263 MEM[30000].HH.RH:=30000;{:981}{988:}MEM[29998].HH.B0:=10; 264 MEM[29998].HH.B1:=0;{:988};AVAIL:=0;MEMEND:=30000;HIMEMMIN:=29987; 265 VARUSED:=20;DYNUSED:=14;{:164}{222:}EQTB[2881].HH.B0:=101; 266 EQTB[2881].HH.RH:=0;EQTB[2881].HH.B1:=0; 267 FOR K:=1 TO 2880 DO EQTB[K]:=EQTB[2881];{:222}{228:}EQTB[2882].HH.RH:=0; 268 EQTB[2882].HH.B1:=1;EQTB[2882].HH.B0:=117; 269 FOR K:=2883 TO 3411 DO EQTB[K]:=EQTB[2882]; 270 MEM[0].HH.RH:=MEM[0].HH.RH+530;{:228}{232:}EQTB[3412].HH.RH:=0; 271 EQTB[3412].HH.B0:=118;EQTB[3412].HH.B1:=1; 272 FOR K:=3413 TO 3677 DO EQTB[K]:=EQTB[2881];EQTB[3678].HH.RH:=0; 273 EQTB[3678].HH.B0:=119;EQTB[3678].HH.B1:=1; 274 FOR K:=3679 TO 3933 DO EQTB[K]:=EQTB[3678];EQTB[3934].HH.RH:=0; 275 EQTB[3934].HH.B0:=120;EQTB[3934].HH.B1:=1; 276 FOR K:=3935 TO 3982 DO EQTB[K]:=EQTB[3934];EQTB[3983].HH.RH:=0; 277 EQTB[3983].HH.B0:=120;EQTB[3983].HH.B1:=1; 278 FOR K:=3984 TO 5262 DO EQTB[K]:=EQTB[3983]; 279 FOR K:=0 TO 255 DO BEGIN EQTB[3983+K].HH.RH:=12;EQTB[5007+K].HH.RH:=K+0; 280 EQTB[4751+K].HH.RH:=1000;END;EQTB[3996].HH.RH:=5;EQTB[4015].HH.RH:=10; 281 EQTB[4075].HH.RH:=0;EQTB[4020].HH.RH:=14;EQTB[4110].HH.RH:=15; 282 EQTB[3983].HH.RH:=9;FOR K:=48 TO 57 DO EQTB[5007+K].HH.RH:=K+28672; 283 FOR K:=65 TO 90 DO BEGIN EQTB[3983+K].HH.RH:=11; 284 EQTB[3983+K+32].HH.RH:=11;EQTB[5007+K].HH.RH:=K+28928; 285 EQTB[5007+K+32].HH.RH:=K+28960;EQTB[4239+K].HH.RH:=K+32; 286 EQTB[4239+K+32].HH.RH:=K+32;EQTB[4495+K].HH.RH:=K; 287 EQTB[4495+K+32].HH.RH:=K;EQTB[4751+K].HH.RH:=999;END; 288 {:232}{240:}FOR K:=5263 TO 5573 DO EQTB[K].INT:=0;EQTB[5280].INT:=1000; 289 EQTB[5264].INT:=10000;EQTB[5304].INT:=1;EQTB[5303].INT:=25; 290 EQTB[5308].INT:=92;EQTB[5311].INT:=13; 291 FOR K:=0 TO 255 DO EQTB[5574+K].INT:=-1;EQTB[5620].INT:=0; 292 {:240}{250:}FOR K:=5830 TO 6106 DO EQTB[K].INT:=0; 293 {:250}{258:}HASHUSED:=2614;CSCOUNT:=0;EQTB[2623].HH.B0:=116; 294 HASH[2623].RH:=502;{:258}{552:}FONTPTR:=0;FMEMPTR:=7;FONTNAME[0]:=801; 295 FONTAREA[0]:=338;HYPHENCHAR[0]:=45;SKEWCHAR[0]:=-1;BCHARLABEL[0]:=0; 296 FONTBCHAR[0]:=256;FONTFALSEBCHAR[0]:=256;FONTBC[0]:=1;FONTEC[0]:=0; 297 FONTSIZE[0]:=0;FONTDSIZE[0]:=0;CHARBASE[0]:=0;WIDTHBASE[0]:=0; 298 HEIGHTBASE[0]:=0;DEPTHBASE[0]:=0;ITALICBASE[0]:=0;LIGKERNBASE[0]:=0; 299 KERNBASE[0]:=0;EXTENBASE[0]:=0;FONTGLUE[0]:=0;FONTPARAMS[0]:=7; 300 PARAMBASE[0]:=-1;FOR K:=0 TO 6 DO FONTINFO[K].INT:=0; 301 {:552}{946:}FOR K:=-TRIEOPSIZE TO TRIEOPSIZE DO TRIEOPHASH[K]:=0; 302 FOR K:=0 TO 255 DO TRIEUSED[K]:=0;TRIEOPPTR:=0; 303 {:946}{951:}TRIENOTREADY:=TRUE;TRIEL[0]:=0;TRIEC[0]:=0;TRIEPTR:=0; 304 {:951}{1216:}HASH[2614].RH:=1190;{:1216}{1301:}FORMATIDENT:=1257; 305 {:1301}{1369:}HASH[2622].RH:=1296;EQTB[2622].HH.B1:=1; 306 EQTB[2622].HH.B0:=113;EQTB[2622].HH.RH:=0;{:1369}{:8}END; 307 {57:}PROCEDURE PRINTLN;BEGIN CASE SELECTOR OF 19:BEGIN WRITELN(TERMOUT); 308 WRITELN(LOGFILE);TERMOFFSET:=0;FILEOFFSET:=0;END; 309 18:BEGIN WRITELN(LOGFILE);FILEOFFSET:=0;END;17:BEGIN WRITELN(TERMOUT); 310 TERMOFFSET:=0;END;16,20,21:;ELSE WRITELN(WRITEFILE[SELECTOR])END;END; 311 {:57}{58:}PROCEDURE PRINTCHAR(S:ASCIICODE);LABEL 10; 312 BEGIN IF{244:}S=EQTB[5312].INT{:244}THEN IF SELECTOR<20 THEN BEGIN 313 PRINTLN;GOTO 10;END;CASE SELECTOR OF 19:BEGIN WRITE(TERMOUT,XCHR[S]); 314 WRITE(LOGFILE,XCHR[S]);TERMOFFSET:=TERMOFFSET+1; 315 FILEOFFSET:=FILEOFFSET+1; 316 IF TERMOFFSET=MAXPRINTLINE THEN BEGIN WRITELN(TERMOUT);TERMOFFSET:=0; 317 END;IF FILEOFFSET=MAXPRINTLINE THEN BEGIN WRITELN(LOGFILE); 318 FILEOFFSET:=0;END;END;18:BEGIN WRITE(LOGFILE,XCHR[S]); 319 FILEOFFSET:=FILEOFFSET+1;IF FILEOFFSET=MAXPRINTLINE THEN PRINTLN;END; 320 17:BEGIN WRITE(TERMOUT,XCHR[S]);TERMOFFSET:=TERMOFFSET+1; 321 IF TERMOFFSET=MAXPRINTLINE THEN PRINTLN;END;16:; 322 20:IF TALLY<TRICKCOUNT THEN TRICKBUF[TALLY MOD ERRORLINE]:=S; 323 21:BEGIN IF POOLPTR<POOLSIZE THEN BEGIN STRPOOL[POOLPTR]:=S; 324 POOLPTR:=POOLPTR+1;END;END;ELSE WRITE(WRITEFILE[SELECTOR],XCHR[S])END; 325 TALLY:=TALLY+1;10:END;{:58}{59:}PROCEDURE PRINT(S:INTEGER);LABEL 10; 326 VAR J:POOLPOINTER;NL:INTEGER; 327 BEGIN IF S>=STRPTR THEN S:=259 ELSE IF S<256 THEN IF S<0 THEN S:=259 328 ELSE BEGIN IF SELECTOR>20 THEN BEGIN PRINTCHAR(S);GOTO 10;END; 329 IF({244:}S=EQTB[5312].INT{:244})THEN IF SELECTOR<20 THEN BEGIN PRINTLN; 330 GOTO 10;END;NL:=EQTB[5312].INT;EQTB[5312].INT:=-1;J:=STRSTART[S]; 331 WHILE J<STRSTART[S+1]DO BEGIN PRINTCHAR(STRPOOL[J]);J:=J+1;END; 332 EQTB[5312].INT:=NL;GOTO 10;END;J:=STRSTART[S]; 333 WHILE J<STRSTART[S+1]DO BEGIN PRINTCHAR(STRPOOL[J]);J:=J+1;END;10:END; 334 {:59}{60:}PROCEDURE SLOWPRINT(S:INTEGER);VAR J:POOLPOINTER; 335 BEGIN IF(S>=STRPTR)OR(S<256)THEN PRINT(S)ELSE BEGIN J:=STRSTART[S]; 336 WHILE J<STRSTART[S+1]DO BEGIN PRINT(STRPOOL[J]);J:=J+1;END;END;END; 337 {:60}{62:}PROCEDURE PRINTNL(S:STRNUMBER); 338 BEGIN IF((TERMOFFSET>0)AND(ODD(SELECTOR)))OR((FILEOFFSET>0)AND(SELECTOR 339 >=18))THEN PRINTLN;PRINT(S);END; 340 {:62}{63:}PROCEDURE PRINTESC(S:STRNUMBER);VAR C:INTEGER; 341 BEGIN{243:}C:=EQTB[5308].INT{:243};IF C>=0 THEN IF C<256 THEN PRINT(C); 342 SLOWPRINT(S);END;{:63}{64:}PROCEDURE PRINTTHEDIGS(K:EIGHTBITS); 343 BEGIN WHILE K>0 DO BEGIN K:=K-1; 344 IF DIG[K]<10 THEN PRINTCHAR(48+DIG[K])ELSE PRINTCHAR(55+DIG[K]);END;END; 345 {:64}{65:}PROCEDURE PRINTINT(N:INTEGER);VAR K:0..23;M:INTEGER; 346 BEGIN K:=0;IF N<0 THEN BEGIN PRINTCHAR(45); 347 IF N>-100000000 THEN N:=-N ELSE BEGIN M:=-1-N;N:=M DIV 10; 348 M:=(M MOD 10)+1;K:=1;IF M<10 THEN DIG[0]:=M ELSE BEGIN DIG[0]:=0;N:=N+1; 349 END;END;END;REPEAT DIG[K]:=N MOD 10;N:=N DIV 10;K:=K+1;UNTIL N=0; 350 PRINTTHEDIGS(K);END;{:65}{262:}PROCEDURE PRINTCS(P:INTEGER); 351 BEGIN IF P<514 THEN IF P>=257 THEN IF P=513 THEN BEGIN PRINTESC(504); 352 PRINTESC(505);PRINTCHAR(32);END ELSE BEGIN PRINTESC(P-257); 353 IF EQTB[3983+P-257].HH.RH=11 THEN PRINTCHAR(32); 354 END ELSE IF P<1 THEN PRINTESC(506)ELSE PRINT(P-1)ELSE IF P>=2881 THEN 355 PRINTESC(506)ELSE IF(HASH[P].RH<0)OR(HASH[P].RH>=STRPTR)THEN PRINTESC( 356 507)ELSE BEGIN PRINTESC(HASH[P].RH);PRINTCHAR(32);END;END; 357 {:262}{263:}PROCEDURE SPRINTCS(P:HALFWORD); 358 BEGIN IF P<514 THEN IF P<257 THEN PRINT(P-1)ELSE IF P<513 THEN PRINTESC( 359 P-257)ELSE BEGIN PRINTESC(504);PRINTESC(505); 360 END ELSE PRINTESC(HASH[P].RH);END; 361 {:263}{518:}PROCEDURE PRINTFILENAME(N,A,E:INTEGER);BEGIN SLOWPRINT(A); 362 SLOWPRINT(N);SLOWPRINT(E);END; 363 {:518}{699:}PROCEDURE PRINTSIZE(S:INTEGER); 364 BEGIN IF S=0 THEN PRINTESC(412)ELSE IF S=16 THEN PRINTESC(413)ELSE 365 PRINTESC(414);END;{:699}{1355:}PROCEDURE PRINTWRITEWHATSIT(S:STRNUMBER; 366 P:HALFWORD);BEGIN PRINTESC(S); 367 IF MEM[P+1].HH.LH<16 THEN PRINTINT(MEM[P+1].HH.LH)ELSE IF MEM[P+1].HH.LH 368 =16 THEN PRINTCHAR(42)ELSE PRINTCHAR(45);END; 369 {:1355}{78:}PROCEDURE NORMALIZESELECTOR;FORWARD;PROCEDURE GETTOKEN; 370 FORWARD;PROCEDURE TERMINPUT;FORWARD;PROCEDURE SHOWCONTEXT;FORWARD; 371 PROCEDURE BEGINFILEREADING;FORWARD;PROCEDURE OPENLOGFILE;FORWARD; 372 PROCEDURE CLOSEFILESANDTERMINATE;FORWARD;PROCEDURE CLEARFORERRORPROMPT; 373 FORWARD;PROCEDURE GIVEERRHELP;FORWARD;{PROCEDURE DEBUGHELP;FORWARD;} 374 {:78}{81:}PROCEDURE JUMPOUT;BEGIN PANIC(9998);END; 375 {:81}{82:}PROCEDURE ERROR;LABEL 22,10;VAR C:ASCIICODE; 376 S1,S2,S3,S4:INTEGER;BEGIN IF HISTORY<2 THEN HISTORY:=2;PRINTCHAR(46); 377 SHOWCONTEXT; 378 IF INTERACTION=3 THEN{83:}WHILE TRUE DO BEGIN 22:IF INTERACTION<>3 THEN 379 GOTO 10;CLEARFORERRORPROMPT;BEGIN;PRINT(264);TERMINPUT;END; 380 IF LAST=FIRST THEN GOTO 10;C:=BUFFER[FIRST];IF C>=97 THEN C:=C-32; 381 {84:}CASE C OF 48,49,50,51,52,53,54,55,56,57:IF DELETIONSALLOWED THEN 382 {88:}BEGIN S1:=CURTOK;S2:=CURCMD;S3:=CURCHR;S4:=ALIGNSTATE; 383 ALIGNSTATE:=1000000;OKTOINTERRUPT:=FALSE; 384 IF(LAST>FIRST+1)AND(BUFFER[FIRST+1]>=48)AND(BUFFER[FIRST+1]<=57)THEN C:= 385 C*10+BUFFER[FIRST+1]-48*11 ELSE C:=C-48;WHILE C>0 DO BEGIN GETTOKEN; 386 C:=C-1;END;CURTOK:=S1;CURCMD:=S2;CURCHR:=S3;ALIGNSTATE:=S4; 387 OKTOINTERRUPT:=TRUE;BEGIN HELPPTR:=2;HELPLINE[1]:=279;HELPLINE[0]:=280; 388 END;SHOWCONTEXT;GOTO 22;END{:88};{68:BEGIN DEBUGHELP;GOTO 22;END;} 389 69:IF BASEPTR>0 THEN IF INPUTSTACK[BASEPTR].NAMEFIELD>=256 THEN BEGIN 390 PRINTNL(265);SLOWPRINT(INPUTSTACK[BASEPTR].NAMEFIELD);PRINT(266); 391 PRINTINT(LINE);INTERACTION:=2;JUMPOUT;END; 392 72:{89:}BEGIN IF USEERRHELP THEN BEGIN GIVEERRHELP;USEERRHELP:=FALSE; 393 END ELSE BEGIN IF HELPPTR=0 THEN BEGIN HELPPTR:=2;HELPLINE[1]:=281; 394 HELPLINE[0]:=282;END;REPEAT HELPPTR:=HELPPTR-1;PRINT(HELPLINE[HELPPTR]); 395 PRINTLN;UNTIL HELPPTR=0;END;BEGIN HELPPTR:=4;HELPLINE[3]:=283; 396 HELPLINE[2]:=282;HELPLINE[1]:=284;HELPLINE[0]:=285;END;GOTO 22;END{:89}; 397 73:{87:}BEGIN BEGINFILEREADING; 398 IF LAST>FIRST+1 THEN BEGIN CURINPUT.LOCFIELD:=FIRST+1;BUFFER[FIRST]:=32; 399 END ELSE BEGIN BEGIN;PRINT(278);TERMINPUT;END;CURINPUT.LOCFIELD:=FIRST; 400 END;FIRST:=LAST;CURINPUT.LIMITFIELD:=LAST-1;GOTO 10;END{:87}; 401 81,82,83:{86:}BEGIN ERRORCOUNT:=0;INTERACTION:=0+C-81;PRINT(273); 402 CASE C OF 81:BEGIN PRINTESC(274);SELECTOR:=SELECTOR-1;END; 403 82:PRINTESC(275);83:PRINTESC(276);END;PRINT(277);PRINTLN;;GOTO 10; 404 END{:86};88:BEGIN INTERACTION:=2;JUMPOUT;END;ELSE END; 405 {85:}BEGIN PRINT(267);PRINTNL(268);PRINTNL(269); 406 IF BASEPTR>0 THEN IF INPUTSTACK[BASEPTR].NAMEFIELD>=256 THEN PRINT(270); 407 IF DELETIONSALLOWED THEN PRINTNL(271);PRINTNL(272);END{:85}{:84}; 408 END{:83};ERRORCOUNT:=ERRORCOUNT+1; 409 IF ERRORCOUNT=100 THEN BEGIN PRINTNL(263);HISTORY:=3;JUMPOUT;END; 410 {90:}IF INTERACTION>0 THEN SELECTOR:=SELECTOR-1; 411 IF USEERRHELP THEN BEGIN PRINTLN;GIVEERRHELP; 412 END ELSE WHILE HELPPTR>0 DO BEGIN HELPPTR:=HELPPTR-1; 413 PRINTNL(HELPLINE[HELPPTR]);END;PRINTLN; 414 IF INTERACTION>0 THEN SELECTOR:=SELECTOR+1;PRINTLN{:90};10:END; 415 {:82}{93:}PROCEDURE FATALERROR(S:STRNUMBER);BEGIN NORMALIZESELECTOR; 416 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(287);END; 417 BEGIN HELPPTR:=1;HELPLINE[0]:=S;END; 418 BEGIN IF INTERACTION=3 THEN INTERACTION:=2;IF LOGOPENED THEN ERROR; 419 {IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END; 420 {:93}{94:}PROCEDURE OVERFLOW(S:STRNUMBER;N:INTEGER); 421 BEGIN NORMALIZESELECTOR;BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 422 PRINT(288);END;PRINT(S);PRINTCHAR(61);PRINTINT(N);PRINTCHAR(93); 423 BEGIN HELPPTR:=2;HELPLINE[1]:=289;HELPLINE[0]:=290;END; 424 BEGIN IF INTERACTION=3 THEN INTERACTION:=2;IF LOGOPENED THEN ERROR; 425 {IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END; 426 {:94}{95:}PROCEDURE CONFUSION(S:STRNUMBER);BEGIN NORMALIZESELECTOR; 427 IF HISTORY<2 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 428 PRINT(291);END;PRINT(S);PRINTCHAR(41);BEGIN HELPPTR:=1;HELPLINE[0]:=292; 429 END;END ELSE BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(293); 430 END;BEGIN HELPPTR:=2;HELPLINE[1]:=294;HELPLINE[0]:=295;END;END; 431 BEGIN IF INTERACTION=3 THEN INTERACTION:=2;IF LOGOPENED THEN ERROR; 432 {IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END; 433 {:95}{:4}{27:}FUNCTION AOPENIN(VAR F:ALPHAFILE):BOOLEAN; 434 BEGIN RESET(F,NAMEOFFILE,'/O');AOPENIN:=ERSTAT(F)=0;END; 435 FUNCTION AOPENOUT(VAR F:ALPHAFILE):BOOLEAN; 436 BEGIN REWRITE(F,NAMEOFFILE,'/O');AOPENOUT:=ERSTAT(F)=0;END; 437 FUNCTION BOPENIN(VAR F:BYTEFILE):BOOLEAN;BEGIN RESET(F,NAMEOFFILE,'/O'); 438 BOPENIN:=ERSTAT(F)=0;END;FUNCTION BOPENOUT(VAR F:BYTEFILE):BOOLEAN; 439 BEGIN REWRITE(F,NAMEOFFILE,'/O');BOPENOUT:=ERSTAT(F)=0;END; 440 FUNCTION WOPENIN(VAR F:WORDFILE):BOOLEAN;BEGIN RESET(F,NAMEOFFILE,'/O'); 441 WOPENIN:=ERSTAT(F)=0;END;FUNCTION WOPENOUT(VAR F:WORDFILE):BOOLEAN; 442 BEGIN REWRITE(F,NAMEOFFILE,'/O');WOPENOUT:=ERSTAT(F)=0;END; 443 {:27}{28:}PROCEDURE ACLOSE(VAR F:ALPHAFILE);BEGIN CLOSE(F);END; 444 PROCEDURE BCLOSE(VAR F:BYTEFILE);BEGIN CLOSE(F);END; 445 PROCEDURE WCLOSE(VAR F:WORDFILE);BEGIN CLOSE(F);END; 446 {:28}{31:}FUNCTION INPUTLN(VAR F:ALPHAFILE;BYPASSEOLN:BOOLEAN):BOOLEAN; 447 VAR LASTNONBLANK:0..BUFSIZE; 448 BEGIN IF BYPASSEOLN THEN IF NOT EOF(F)THEN GET(F);LAST:=FIRST; 449 IF EOF(F)THEN INPUTLN:=FALSE ELSE BEGIN LASTNONBLANK:=FIRST; 450 WHILE NOT EOLN(F)DO BEGIN IF LAST>=MAXBUFSTACK THEN BEGIN MAXBUFSTACK:= 451 LAST+1; 452 IF MAXBUFSTACK=BUFSIZE THEN{35:}IF FORMATIDENT=0 THEN BEGIN WRITELN( 453 TERMOUT,'Buffer size exceeded!');PANIC(9999); 454 END ELSE BEGIN CURINPUT.LOCFIELD:=FIRST;CURINPUT.LIMITFIELD:=LAST-1; 455 OVERFLOW(256,BUFSIZE);END{:35};END;BUFFER[LAST]:=XORD[F^];GET(F); 456 LAST:=LAST+1;IF BUFFER[LAST-1]<>32 THEN LASTNONBLANK:=LAST;END; 457 LAST:=LASTNONBLANK;INPUTLN:=TRUE;END;END; 458 {:31}{37:}FUNCTION INITTERMINAL:BOOLEAN;LABEL 10; 459 BEGIN RESET(TERMIN,'TTY:','/O/I');WHILE TRUE DO BEGIN; 460 WRITE(TERMOUT,'**');; 461 IF NOT INPUTLN(TERMIN,TRUE)THEN BEGIN WRITELN(TERMOUT); 462 WRITE(TERMOUT,'! End of file on the terminal... why?'); 463 INITTERMINAL:=FALSE;GOTO 10;END;CURINPUT.LOCFIELD:=FIRST; 464 WHILE(CURINPUT.LOCFIELD<LAST)AND(BUFFER[CURINPUT.LOCFIELD]=32)DO 465 CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1; 466 IF CURINPUT.LOCFIELD<LAST THEN BEGIN INITTERMINAL:=TRUE;GOTO 10;END; 467 WRITELN(TERMOUT,'Please type the name of your input file.');END;10:END; 468 {:37}{43:}FUNCTION MAKESTRING:STRNUMBER; 469 BEGIN IF STRPTR=MAXSTRINGS THEN OVERFLOW(258,MAXSTRINGS-INITSTRPTR); 470 STRPTR:=STRPTR+1;STRSTART[STRPTR]:=POOLPTR;MAKESTRING:=STRPTR-1;END; 471 {:43}{45:}FUNCTION STREQBUF(S:STRNUMBER;K:INTEGER):BOOLEAN;LABEL 45; 472 VAR J:POOLPOINTER;RESULT:BOOLEAN;BEGIN J:=STRSTART[S]; 473 WHILE J<STRSTART[S+1]DO BEGIN IF STRPOOL[J]<>BUFFER[K]THEN BEGIN RESULT 474 :=FALSE;GOTO 45;END;J:=J+1;K:=K+1;END;RESULT:=TRUE;45:STREQBUF:=RESULT; 475 END;{:45}{46:}FUNCTION STREQSTR(S,T:STRNUMBER):BOOLEAN;LABEL 45; 476 VAR J,K:POOLPOINTER;RESULT:BOOLEAN;BEGIN RESULT:=FALSE; 477 IF(STRSTART[S+1]-STRSTART[S])<>(STRSTART[T+1]-STRSTART[T])THEN GOTO 45; 478 J:=STRSTART[S];K:=STRSTART[T]; 479 WHILE J<STRSTART[S+1]DO BEGIN IF STRPOOL[J]<>STRPOOL[K]THEN GOTO 45; 480 J:=J+1;K:=K+1;END;RESULT:=TRUE;45:STREQSTR:=RESULT;END; 481 {:46}{47:}FUNCTION GETSTRINGSSTARTED:BOOLEAN;LABEL 30,10;VAR K,L:0..255; 482 M,N:CHAR;G:STRNUMBER;A:INTEGER;C:BOOLEAN;BEGIN IF G=0 THEN;POOLPTR:=0; 483 STRPTR:=0;STRSTART[0]:=0; 484 {48:}FOR K:=0 TO 255 DO BEGIN IF({49:}(K<32)OR(K>126){:49})THEN BEGIN 485 BEGIN STRPOOL[POOLPTR]:=94;POOLPTR:=POOLPTR+1;END; 486 BEGIN STRPOOL[POOLPTR]:=94;POOLPTR:=POOLPTR+1;END; 487 IF K<64 THEN BEGIN STRPOOL[POOLPTR]:=K+64;POOLPTR:=POOLPTR+1; 488 END ELSE IF K<128 THEN BEGIN STRPOOL[POOLPTR]:=K-64;POOLPTR:=POOLPTR+1; 489 END ELSE BEGIN L:=K DIV 16;IF L<10 THEN BEGIN STRPOOL[POOLPTR]:=L+48; 490 POOLPTR:=POOLPTR+1;END ELSE BEGIN STRPOOL[POOLPTR]:=L+87; 491 POOLPTR:=POOLPTR+1;END;L:=K MOD 16; 492 IF L<10 THEN BEGIN STRPOOL[POOLPTR]:=L+48;POOLPTR:=POOLPTR+1; 493 END ELSE BEGIN STRPOOL[POOLPTR]:=L+87;POOLPTR:=POOLPTR+1;END;END; 494 END ELSE BEGIN STRPOOL[POOLPTR]:=K;POOLPTR:=POOLPTR+1;END;G:=MAKESTRING; 495 END{:48};{51:}NAMEOFFILE:=POOLNAME; 496 IF AOPENIN(POOLFILE)THEN BEGIN C:=FALSE; 497 REPEAT{52:}BEGIN IF EOF(POOLFILE)THEN BEGIN; 498 WRITELN(TERMOUT,'! TEX.POOL has no check sum.');ACLOSE(POOLFILE); 499 GETSTRINGSSTARTED:=FALSE;GOTO 10;END;READ(POOLFILE,M,N); 500 IF M='*'THEN{53:}BEGIN A:=0;K:=1; 501 WHILE TRUE DO BEGIN IF(XORD[N]<48)OR(XORD[N]>57)THEN BEGIN; 502 WRITELN(TERMOUT,'! TEX.POOL check sum doesn''t have nine digits.'); 503 ACLOSE(POOLFILE);GETSTRINGSSTARTED:=FALSE;GOTO 10;END; 504 A:=10*A+XORD[N]-48;IF K=9 THEN GOTO 30;K:=K+1;READ(POOLFILE,N);END; 505 30:IF A<>504454778 THEN BEGIN; 506 WRITELN(TERMOUT,'! TEX.POOL doesn''t match; TANGLE me again.'); 507 ACLOSE(POOLFILE);GETSTRINGSSTARTED:=FALSE;GOTO 10;END;C:=TRUE; 508 END{:53}ELSE BEGIN IF(XORD[M]<48)OR(XORD[M]>57)OR(XORD[N]<48)OR(XORD[N]> 509 57)THEN BEGIN; 510 WRITELN(TERMOUT,'! TEX.POOL line doesn''t begin with two digits.'); 511 ACLOSE(POOLFILE);GETSTRINGSSTARTED:=FALSE;GOTO 10;END; 512 L:=XORD[M]*10+XORD[N]-48*11; 513 IF POOLPTR+L+STRINGVACANCIES>POOLSIZE THEN BEGIN; 514 WRITELN(TERMOUT,'! You have to increase POOLSIZE.');ACLOSE(POOLFILE); 515 GETSTRINGSSTARTED:=FALSE;GOTO 10;END; 516 FOR K:=1 TO L DO BEGIN IF EOLN(POOLFILE)THEN M:=' 'ELSE READ(POOLFILE,M) 517 ;BEGIN STRPOOL[POOLPTR]:=XORD[M];POOLPTR:=POOLPTR+1;END;END; 518 READLN(POOLFILE);G:=MAKESTRING;END;END{:52};UNTIL C;ACLOSE(POOLFILE); 519 GETSTRINGSSTARTED:=TRUE;END ELSE BEGIN; 520 WRITELN(TERMOUT,'! I can''t read TEX.POOL.');ACLOSE(POOLFILE); 521 GETSTRINGSSTARTED:=FALSE;GOTO 10;END{:51};10:END; 522 {:47}{66:}PROCEDURE PRINTTWO(N:INTEGER);BEGIN N:=ABS(N)MOD 100; 523 PRINTCHAR(48+(N DIV 10));PRINTCHAR(48+(N MOD 10));END; 524 {:66}{67:}PROCEDURE PRINTHEX(N:INTEGER);VAR K:0..22;BEGIN K:=0; 525 PRINTCHAR(34);REPEAT DIG[K]:=N MOD 16;N:=N DIV 16;K:=K+1;UNTIL N=0; 526 PRINTTHEDIGS(K);END;{:67}{69:}PROCEDURE PRINTROMANINT(N:INTEGER); 527 LABEL 10;VAR J,K:POOLPOINTER;U,V:NONNEGATIVEINTEGER; 528 BEGIN J:=STRSTART[260];V:=1000; 529 WHILE TRUE DO BEGIN WHILE N>=V DO BEGIN PRINTCHAR(STRPOOL[J]);N:=N-V; 530 END;IF N<=0 THEN GOTO 10;K:=J+2;U:=V DIV(STRPOOL[K-1]-48); 531 IF STRPOOL[K-1]=50 THEN BEGIN K:=K+2;U:=U DIV(STRPOOL[K-1]-48);END; 532 IF N+U>=V THEN BEGIN PRINTCHAR(STRPOOL[K]);N:=N+U;END ELSE BEGIN J:=J+2; 533 V:=V DIV(STRPOOL[J-1]-48);END;END;10:END; 534 {:69}{70:}PROCEDURE PRINTCURRENTSTRING;VAR J:POOLPOINTER; 535 BEGIN J:=STRSTART[STRPTR]; 536 WHILE J<POOLPTR DO BEGIN PRINTCHAR(STRPOOL[J]);J:=J+1;END;END; 537 {:70}{71:}PROCEDURE TERMINPUT;VAR K:0..BUFSIZE;BEGIN; 538 IF NOT INPUTLN(TERMIN,TRUE)THEN FATALERROR(261);TERMOFFSET:=0; 539 SELECTOR:=SELECTOR-1; 540 IF LAST<>FIRST THEN FOR K:=FIRST TO LAST-1 DO PRINT(BUFFER[K]);PRINTLN; 541 SELECTOR:=SELECTOR+1;END;{:71}{91:}PROCEDURE INTERROR(N:INTEGER); 542 BEGIN PRINT(286);PRINTINT(N);PRINTCHAR(41);ERROR;END; 543 {:91}{92:}PROCEDURE NORMALIZESELECTOR; 544 BEGIN IF LOGOPENED THEN SELECTOR:=19 ELSE SELECTOR:=17; 545 IF JOBNAME=0 THEN OPENLOGFILE; 546 IF INTERACTION=0 THEN SELECTOR:=SELECTOR-1;END; 547 {:92}{98:}PROCEDURE PAUSEFORINSTRUCTIONS; 548 BEGIN IF OKTOINTERRUPT THEN BEGIN INTERACTION:=3; 549 IF(SELECTOR=18)OR(SELECTOR=16)THEN SELECTOR:=SELECTOR+1; 550 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(296);END; 551 BEGIN HELPPTR:=3;HELPLINE[2]:=297;HELPLINE[1]:=298;HELPLINE[0]:=299;END; 552 DELETIONSALLOWED:=FALSE;ERROR;DELETIONSALLOWED:=TRUE;INTERRUPT:=0;END; 553 END;{:98}{100:}FUNCTION HALF(X:INTEGER):INTEGER; 554 BEGIN IF ODD(X)THEN HALF:=(X+1)DIV 2 ELSE HALF:=X DIV 2;END; 555 {:100}{102:}FUNCTION ROUNDDECIMALS(K:SMALLNUMBER):SCALED;VAR A:INTEGER; 556 BEGIN A:=0;WHILE K>0 DO BEGIN K:=K-1;A:=(A+DIG[K]*131072)DIV 10;END; 557 ROUNDDECIMALS:=(A+1)DIV 2;END; 558 {:102}{103:}PROCEDURE PRINTSCALED(S:SCALED);VAR DELTA:SCALED; 559 BEGIN IF S<0 THEN BEGIN PRINTCHAR(45);S:=-S;END;PRINTINT(S DIV 65536); 560 PRINTCHAR(46);S:=10*(S MOD 65536)+5;DELTA:=10; 561 REPEAT IF DELTA>65536 THEN S:=S-17232;PRINTCHAR(48+(S DIV 65536)); 562 S:=10*(S MOD 65536);DELTA:=DELTA*10;UNTIL S<=DELTA;END; 563 {:103}{105:}FUNCTION MULTANDADD(N:INTEGER;X,Y,MAXANSWER:SCALED):SCALED; 564 BEGIN IF N<0 THEN BEGIN X:=-X;N:=-N;END; 565 IF N=0 THEN MULTANDADD:=Y ELSE IF((X<=(MAXANSWER-Y)DIV N)AND(-X<=( 566 MAXANSWER+Y)DIV N))THEN MULTANDADD:=N*X+Y ELSE BEGIN ARITHERROR:=TRUE; 567 MULTANDADD:=0;END;END;{:105}{106:}FUNCTION XOVERN(X:SCALED; 568 N:INTEGER):SCALED;VAR NEGATIVE:BOOLEAN;BEGIN NEGATIVE:=FALSE; 569 IF N=0 THEN BEGIN ARITHERROR:=TRUE;XOVERN:=0;REMAINDER:=X; 570 END ELSE BEGIN IF N<0 THEN BEGIN X:=-X;N:=-N;NEGATIVE:=TRUE;END; 571 IF X>=0 THEN BEGIN XOVERN:=X DIV N;REMAINDER:=X MOD N; 572 END ELSE BEGIN XOVERN:=-((-X)DIV N);REMAINDER:=-((-X)MOD N);END;END; 573 IF NEGATIVE THEN REMAINDER:=-REMAINDER;END; 574 {:106}{107:}FUNCTION XNOVERD(X:SCALED;N,D:INTEGER):SCALED; 575 VAR POSITIVE:BOOLEAN;T,U,V:NONNEGATIVEINTEGER; 576 BEGIN IF X>=0 THEN POSITIVE:=TRUE ELSE BEGIN X:=-X;POSITIVE:=FALSE;END; 577 T:=(X MOD 32768)*N;U:=(X DIV 32768)*N+(T DIV 32768); 578 V:=(U MOD D)*32768+(T MOD 32768); 579 IF U DIV D>=32768 THEN ARITHERROR:=TRUE ELSE U:=32768*(U DIV D)+(V DIV D 580 );IF POSITIVE THEN BEGIN XNOVERD:=U;REMAINDER:=V MOD D; 581 END ELSE BEGIN XNOVERD:=-U;REMAINDER:=-(V MOD D);END;END; 582 {:107}{108:}FUNCTION BADNESS(T,S:SCALED):HALFWORD;VAR R:INTEGER; 583 BEGIN IF T=0 THEN BADNESS:=0 ELSE IF S<=0 THEN BADNESS:=10000 ELSE BEGIN 584 IF T<=7230584 THEN R:=(T*297)DIV S ELSE IF S>=1663497 THEN R:=T DIV(S 585 DIV 297)ELSE R:=T; 586 IF R>1290 THEN BADNESS:=10000 ELSE BADNESS:=(R*R*R+131072)DIV 262144; 587 END;END;{:108}{114:}{PROCEDURE PRINTWORD(W:MEMORYWORD); 588 BEGIN PRINTINT(W.INT);PRINTCHAR(32);PRINTSCALED(W.INT);PRINTCHAR(32); 589 PRINTSCALED(ROUND(65536*W.GR));PRINTLN;PRINTINT(W.HH.LH);PRINTCHAR(61); 590 PRINTINT(W.HH.B0);PRINTCHAR(58);PRINTINT(W.HH.B1);PRINTCHAR(59); 591 PRINTINT(W.HH.RH);PRINTCHAR(32);PRINTINT(W.QQQQ.B0);PRINTCHAR(58); 592 PRINTINT(W.QQQQ.B1);PRINTCHAR(58);PRINTINT(W.QQQQ.B2);PRINTCHAR(58); 593 PRINTINT(W.QQQQ.B3);END;} 594 {:114}{119:}{292:}PROCEDURE SHOWTOKENLIST(P,Q:INTEGER;L:INTEGER); 595 LABEL 10;VAR M,C:INTEGER;MATCHCHR:ASCIICODE;N:ASCIICODE; 596 BEGIN MATCHCHR:=35;N:=48;TALLY:=0; 597 WHILE(P<>0)AND(TALLY<L)DO BEGIN IF P=Q THEN{320:}BEGIN FIRSTCOUNT:=TALLY 598 ;TRICKCOUNT:=TALLY+1+ERRORLINE-HALFERRORLINE; 599 IF TRICKCOUNT<ERRORLINE THEN TRICKCOUNT:=ERRORLINE;END{:320}; 600 {293:}IF(P<HIMEMMIN)OR(P>MEMEND)THEN BEGIN PRINTESC(309);GOTO 10;END; 601 IF MEM[P].HH.LH>=4095 THEN PRINTCS(MEM[P].HH.LH-4095)ELSE BEGIN M:=MEM[P 602 ].HH.LH DIV 256;C:=MEM[P].HH.LH MOD 256; 603 IF MEM[P].HH.LH<0 THEN PRINTESC(555)ELSE{294:}CASE M OF 1,2,3,4,7,8,10, 604 11,12:PRINT(C);6:BEGIN PRINT(C);PRINT(C);END;5:BEGIN PRINT(MATCHCHR); 605 IF C<=9 THEN PRINTCHAR(C+48)ELSE BEGIN PRINTCHAR(33);GOTO 10;END;END; 606 13:BEGIN MATCHCHR:=C;PRINT(C);N:=N+1;PRINTCHAR(N);IF N>57 THEN GOTO 10; 607 END;14:PRINT(556);ELSE PRINTESC(555)END{:294};END{:293};P:=MEM[P].HH.RH; 608 END;IF P<>0 THEN PRINTESC(554);10:END;{:292}{306:}PROCEDURE RUNAWAY; 609 VAR P:HALFWORD;BEGIN IF SCANNERSTATUS>1 THEN BEGIN PRINTNL(569); 610 CASE SCANNERSTATUS OF 2:BEGIN PRINT(570);P:=DEFREF;END; 611 3:BEGIN PRINT(571);P:=29997;END;4:BEGIN PRINT(572);P:=29996;END; 612 5:BEGIN PRINT(573);P:=DEFREF;END;END;PRINTCHAR(63);PRINTLN; 613 SHOWTOKENLIST(MEM[P].HH.RH,0,ERRORLINE-10);END;END; 614 {:306}{:119}{120:}FUNCTION GETAVAIL:HALFWORD;VAR P:HALFWORD; 615 BEGIN P:=AVAIL; 616 IF P<>0 THEN AVAIL:=MEM[AVAIL].HH.RH ELSE IF MEMEND<MEMMAX THEN BEGIN 617 MEMEND:=MEMEND+1;P:=MEMEND;END ELSE BEGIN HIMEMMIN:=HIMEMMIN-1; 618 P:=HIMEMMIN;IF HIMEMMIN<=LOMEMMAX THEN BEGIN RUNAWAY; 619 OVERFLOW(300,MEMMAX+1-MEMMIN);END;END;MEM[P].HH.RH:=0; 620 {DYNUSED:=DYNUSED+1;}GETAVAIL:=P;END; 621 {:120}{123:}PROCEDURE FLUSHLIST(P:HALFWORD);VAR Q,R:HALFWORD; 622 BEGIN IF P<>0 THEN BEGIN R:=P;REPEAT Q:=R;R:=MEM[R].HH.RH; 623 {DYNUSED:=DYNUSED-1;}UNTIL R=0;MEM[Q].HH.RH:=AVAIL;AVAIL:=P;END;END; 624 {:123}{125:}FUNCTION GETNODE(S:INTEGER):HALFWORD;LABEL 40,10,20; 625 VAR P:HALFWORD;Q:HALFWORD;R:INTEGER;T:INTEGER;BEGIN 20:P:=ROVER; 626 REPEAT{127:}Q:=P+MEM[P].HH.LH; 627 WHILE(MEM[Q].HH.RH=65535)DO BEGIN T:=MEM[Q+1].HH.RH; 628 IF Q=ROVER THEN ROVER:=T;MEM[T+1].HH.LH:=MEM[Q+1].HH.LH; 629 MEM[MEM[Q+1].HH.LH+1].HH.RH:=T;Q:=Q+MEM[Q].HH.LH;END;R:=Q-S; 630 IF R>P+1 THEN{128:}BEGIN MEM[P].HH.LH:=R-P;ROVER:=P;GOTO 40;END{:128}; 631 IF R=P THEN IF MEM[P+1].HH.RH<>P THEN{129:}BEGIN ROVER:=MEM[P+1].HH.RH; 632 T:=MEM[P+1].HH.LH;MEM[ROVER+1].HH.LH:=T;MEM[T+1].HH.RH:=ROVER;GOTO 40; 633 END{:129};MEM[P].HH.LH:=Q-P{:127};P:=MEM[P+1].HH.RH;UNTIL P=ROVER; 634 IF S=1073741824 THEN BEGIN GETNODE:=65535;GOTO 10;END; 635 IF LOMEMMAX+2<HIMEMMIN THEN IF LOMEMMAX+2<=65535 THEN{126:}BEGIN IF 636 HIMEMMIN-LOMEMMAX>=1998 THEN T:=LOMEMMAX+1000 ELSE T:=LOMEMMAX+1+( 637 HIMEMMIN-LOMEMMAX)DIV 2;P:=MEM[ROVER+1].HH.LH;Q:=LOMEMMAX; 638 MEM[P+1].HH.RH:=Q;MEM[ROVER+1].HH.LH:=Q;IF T>65535 THEN T:=65535; 639 MEM[Q+1].HH.RH:=ROVER;MEM[Q+1].HH.LH:=P;MEM[Q].HH.RH:=65535; 640 MEM[Q].HH.LH:=T-LOMEMMAX;LOMEMMAX:=T;MEM[LOMEMMAX].HH.RH:=0; 641 MEM[LOMEMMAX].HH.LH:=0;ROVER:=Q;GOTO 20;END{:126}; 642 OVERFLOW(300,MEMMAX+1-MEMMIN);40:MEM[R].HH.RH:=0;{VARUSED:=VARUSED+S;} 643 GETNODE:=R;10:END;{:125}{130:}PROCEDURE FREENODE(P:HALFWORD;S:HALFWORD); 644 VAR Q:HALFWORD;BEGIN MEM[P].HH.LH:=S;MEM[P].HH.RH:=65535; 645 Q:=MEM[ROVER+1].HH.LH;MEM[P+1].HH.LH:=Q;MEM[P+1].HH.RH:=ROVER; 646 MEM[ROVER+1].HH.LH:=P;MEM[Q+1].HH.RH:=P;{VARUSED:=VARUSED-S;}END; 647 {:130}{131:}PROCEDURE SORTAVAIL;VAR P,Q,R:HALFWORD;OLDROVER:HALFWORD; 648 BEGIN P:=GETNODE(1073741824);P:=MEM[ROVER+1].HH.RH; 649 MEM[ROVER+1].HH.RH:=65535;OLDROVER:=ROVER; 650 WHILE P<>OLDROVER DO{132:}IF P<ROVER THEN BEGIN Q:=P;P:=MEM[Q+1].HH.RH; 651 MEM[Q+1].HH.RH:=ROVER;ROVER:=Q;END ELSE BEGIN Q:=ROVER; 652 WHILE MEM[Q+1].HH.RH<P DO Q:=MEM[Q+1].HH.RH;R:=MEM[P+1].HH.RH; 653 MEM[P+1].HH.RH:=MEM[Q+1].HH.RH;MEM[Q+1].HH.RH:=P;P:=R;END{:132}; 654 P:=ROVER; 655 WHILE MEM[P+1].HH.RH<>65535 DO BEGIN MEM[MEM[P+1].HH.RH+1].HH.LH:=P; 656 P:=MEM[P+1].HH.RH;END;MEM[P+1].HH.RH:=ROVER;MEM[ROVER+1].HH.LH:=P;END; 657 {:131}{136:}FUNCTION NEWNULLBOX:HALFWORD;VAR P:HALFWORD; 658 BEGIN P:=GETNODE(7);MEM[P].HH.B0:=0;MEM[P].HH.B1:=0;MEM[P+1].INT:=0; 659 MEM[P+2].INT:=0;MEM[P+3].INT:=0;MEM[P+4].INT:=0;MEM[P+5].HH.RH:=0; 660 MEM[P+5].HH.B0:=0;MEM[P+5].HH.B1:=0;MEM[P+6].GR:=0.0;NEWNULLBOX:=P;END; 661 {:136}{139:}FUNCTION NEWRULE:HALFWORD;VAR P:HALFWORD; 662 BEGIN P:=GETNODE(4);MEM[P].HH.B0:=2;MEM[P].HH.B1:=0; 663 MEM[P+1].INT:=-1073741824;MEM[P+2].INT:=-1073741824; 664 MEM[P+3].INT:=-1073741824;NEWRULE:=P;END; 665 {:139}{144:}FUNCTION NEWLIGATURE(F,C:QUARTERWORD;Q:HALFWORD):HALFWORD; 666 VAR P:HALFWORD;BEGIN P:=GETNODE(2);MEM[P].HH.B0:=6;MEM[P+1].HH.B0:=F; 667 MEM[P+1].HH.B1:=C;MEM[P+1].HH.RH:=Q;MEM[P].HH.B1:=0;NEWLIGATURE:=P;END; 668 FUNCTION NEWLIGITEM(C:QUARTERWORD):HALFWORD;VAR P:HALFWORD; 669 BEGIN P:=GETNODE(2);MEM[P].HH.B1:=C;MEM[P+1].HH.RH:=0;NEWLIGITEM:=P;END; 670 {:144}{145:}FUNCTION NEWDISC:HALFWORD;VAR P:HALFWORD; 671 BEGIN P:=GETNODE(2);MEM[P].HH.B0:=7;MEM[P].HH.B1:=0;MEM[P+1].HH.LH:=0; 672 MEM[P+1].HH.RH:=0;NEWDISC:=P;END;{:145}{147:}FUNCTION NEWMATH(W:SCALED; 673 S:SMALLNUMBER):HALFWORD;VAR P:HALFWORD;BEGIN P:=GETNODE(2); 674 MEM[P].HH.B0:=9;MEM[P].HH.B1:=S;MEM[P+1].INT:=W;NEWMATH:=P;END; 675 {:147}{151:}FUNCTION NEWSPEC(P:HALFWORD):HALFWORD;VAR Q:HALFWORD; 676 BEGIN Q:=GETNODE(4);MEM[Q]:=MEM[P];MEM[Q].HH.RH:=0; 677 MEM[Q+1].INT:=MEM[P+1].INT;MEM[Q+2].INT:=MEM[P+2].INT; 678 MEM[Q+3].INT:=MEM[P+3].INT;NEWSPEC:=Q;END; 679 {:151}{152:}FUNCTION NEWPARAMGLUE(N:SMALLNUMBER):HALFWORD; 680 VAR P:HALFWORD;Q:HALFWORD;BEGIN P:=GETNODE(2);MEM[P].HH.B0:=10; 681 MEM[P].HH.B1:=N+1;MEM[P+1].HH.RH:=0;Q:={224:}EQTB[2882+N].HH.RH{:224}; 682 MEM[P+1].HH.LH:=Q;MEM[Q].HH.RH:=MEM[Q].HH.RH+1;NEWPARAMGLUE:=P;END; 683 {:152}{153:}FUNCTION NEWGLUE(Q:HALFWORD):HALFWORD;VAR P:HALFWORD; 684 BEGIN P:=GETNODE(2);MEM[P].HH.B0:=10;MEM[P].HH.B1:=0;MEM[P+1].HH.RH:=0; 685 MEM[P+1].HH.LH:=Q;MEM[Q].HH.RH:=MEM[Q].HH.RH+1;NEWGLUE:=P;END; 686 {:153}{154:}FUNCTION NEWSKIPPARAM(N:SMALLNUMBER):HALFWORD; 687 VAR P:HALFWORD;BEGIN TEMPPTR:=NEWSPEC({224:}EQTB[2882+N].HH.RH{:224}); 688 P:=NEWGLUE(TEMPPTR);MEM[TEMPPTR].HH.RH:=0;MEM[P].HH.B1:=N+1; 689 NEWSKIPPARAM:=P;END;{:154}{156:}FUNCTION NEWKERN(W:SCALED):HALFWORD; 690 VAR P:HALFWORD;BEGIN P:=GETNODE(2);MEM[P].HH.B0:=11;MEM[P].HH.B1:=0; 691 MEM[P+1].INT:=W;NEWKERN:=P;END; 692 {:156}{158:}FUNCTION NEWPENALTY(M:INTEGER):HALFWORD;VAR P:HALFWORD; 693 BEGIN P:=GETNODE(2);MEM[P].HH.B0:=12;MEM[P].HH.B1:=0;MEM[P+1].INT:=M; 694 NEWPENALTY:=P;END;{:158}{167:}{PROCEDURE CHECKMEM(PRINTLOCS:BOOLEAN); 695 LABEL 31,32;VAR P,Q:HALFWORD;CLOBBERED:BOOLEAN; 696 BEGIN FOR P:=MEMMIN TO LOMEMMAX DO FREE[P]:=FALSE; 697 FOR P:=HIMEMMIN TO MEMEND DO FREE[P]:=FALSE;[168:]P:=AVAIL;Q:=0; 698 CLOBBERED:=FALSE; 699 WHILE P<>0 DO BEGIN IF(P>MEMEND)OR(P<HIMEMMIN)THEN CLOBBERED:=TRUE ELSE 700 IF FREE[P]THEN CLOBBERED:=TRUE;IF CLOBBERED THEN BEGIN PRINTNL(301); 701 PRINTINT(Q);GOTO 31;END;FREE[P]:=TRUE;Q:=P;P:=MEM[Q].HH.RH;END; 702 31:[:168];[169:]P:=ROVER;Q:=0;CLOBBERED:=FALSE; 703 REPEAT IF(P>=LOMEMMAX)OR(P<MEMMIN)THEN CLOBBERED:=TRUE ELSE IF(MEM[P+1]. 704 HH.RH>=LOMEMMAX)OR(MEM[P+1].HH.RH<MEMMIN)THEN CLOBBERED:=TRUE ELSE IF 705 NOT((MEM[P].HH.RH=65535))OR(MEM[P].HH.LH<2)OR(P+MEM[P].HH.LH>LOMEMMAX)OR 706 (MEM[MEM[P+1].HH.RH+1].HH.LH<>P)THEN CLOBBERED:=TRUE; 707 IF CLOBBERED THEN BEGIN PRINTNL(302);PRINTINT(Q);GOTO 32;END; 708 FOR Q:=P TO P+MEM[P].HH.LH-1 DO BEGIN IF FREE[Q]THEN BEGIN PRINTNL(303); 709 PRINTINT(Q);GOTO 32;END;FREE[Q]:=TRUE;END;Q:=P;P:=MEM[P+1].HH.RH; 710 UNTIL P=ROVER;32:[:169];[170:]P:=MEMMIN; 711 WHILE P<=LOMEMMAX DO BEGIN IF(MEM[P].HH.RH=65535)THEN BEGIN PRINTNL(304) 712 ;PRINTINT(P);END;WHILE(P<=LOMEMMAX)AND NOT FREE[P]DO P:=P+1; 713 WHILE(P<=LOMEMMAX)AND FREE[P]DO P:=P+1;END[:170]; 714 IF PRINTLOCS THEN[171:]BEGIN PRINTNL(305); 715 FOR P:=MEMMIN TO LOMEMMAX DO IF NOT FREE[P]AND((P>WASLOMAX)OR WASFREE[P] 716 )THEN BEGIN PRINTCHAR(32);PRINTINT(P);END; 717 FOR P:=HIMEMMIN TO MEMEND DO IF NOT FREE[P]AND((P<WASHIMIN)OR(P> 718 WASMEMEND)OR WASFREE[P])THEN BEGIN PRINTCHAR(32);PRINTINT(P);END; 719 END[:171];FOR P:=MEMMIN TO LOMEMMAX DO WASFREE[P]:=FREE[P]; 720 FOR P:=HIMEMMIN TO MEMEND DO WASFREE[P]:=FREE[P];WASMEMEND:=MEMEND; 721 WASLOMAX:=LOMEMMAX;WASHIMIN:=HIMEMMIN;END;} 722 {:167}{172:}{PROCEDURE SEARCHMEM(P:HALFWORD);VAR Q:INTEGER; 723 BEGIN FOR Q:=MEMMIN TO LOMEMMAX DO BEGIN IF MEM[Q].HH.RH=P THEN BEGIN 724 PRINTNL(306);PRINTINT(Q);PRINTCHAR(41);END; 725 IF MEM[Q].HH.LH=P THEN BEGIN PRINTNL(307);PRINTINT(Q);PRINTCHAR(41);END; 726 END; 727 FOR Q:=HIMEMMIN TO MEMEND DO BEGIN IF MEM[Q].HH.RH=P THEN BEGIN PRINTNL( 728 306);PRINTINT(Q);PRINTCHAR(41);END; 729 IF MEM[Q].HH.LH=P THEN BEGIN PRINTNL(307);PRINTINT(Q);PRINTCHAR(41);END; 730 END; 731 [255:]FOR Q:=1 TO 3933 DO BEGIN IF EQTB[Q].HH.RH=P THEN BEGIN PRINTNL( 732 501);PRINTINT(Q);PRINTCHAR(41);END;END[:255]; 733 [285:]IF SAVEPTR>0 THEN FOR Q:=0 TO SAVEPTR-1 DO BEGIN IF SAVESTACK[Q]. 734 HH.RH=P THEN BEGIN PRINTNL(546);PRINTINT(Q);PRINTCHAR(41);END;END[:285]; 735 [933:]FOR Q:=0 TO 307 DO BEGIN IF HYPHLIST[Q]=P THEN BEGIN PRINTNL(940); 736 PRINTINT(Q);PRINTCHAR(41);END;END[:933];END;} 737 {:172}{174:}PROCEDURE SHORTDISPLAY(P:INTEGER);VAR N:INTEGER; 738 BEGIN WHILE P>MEMMIN DO BEGIN IF(P>=HIMEMMIN)THEN BEGIN IF P<=MEMEND 739 THEN BEGIN IF MEM[P].HH.B0<>FONTINSHORTDISPLAY THEN BEGIN IF(MEM[P].HH. 740 B0<0)OR(MEM[P].HH.B0>FONTMAX)THEN PRINTCHAR(42)ELSE{267:}PRINTESC(HASH[ 741 2624+MEM[P].HH.B0].RH){:267};PRINTCHAR(32); 742 FONTINSHORTDISPLAY:=MEM[P].HH.B0;END;PRINT(MEM[P].HH.B1-0);END; 743 END ELSE{175:}CASE MEM[P].HH.B0 OF 0,1,3,8,4,5,13:PRINT(308); 744 2:PRINTCHAR(124);10:IF MEM[P+1].HH.LH<>0 THEN PRINTCHAR(32); 745 9:PRINTCHAR(36);6:SHORTDISPLAY(MEM[P+1].HH.RH); 746 7:BEGIN SHORTDISPLAY(MEM[P+1].HH.LH);SHORTDISPLAY(MEM[P+1].HH.RH); 747 N:=MEM[P].HH.B1; 748 WHILE N>0 DO BEGIN IF MEM[P].HH.RH<>0 THEN P:=MEM[P].HH.RH;N:=N-1;END; 749 END;ELSE END{:175};P:=MEM[P].HH.RH;END;END; 750 {:174}{176:}PROCEDURE PRINTFONTANDCHAR(P:INTEGER); 751 BEGIN IF P>MEMEND THEN PRINTESC(309)ELSE BEGIN IF(MEM[P].HH.B0<0)OR(MEM[ 752 P].HH.B0>FONTMAX)THEN PRINTCHAR(42)ELSE{267:}PRINTESC(HASH[2624+MEM[P]. 753 HH.B0].RH){:267};PRINTCHAR(32);PRINT(MEM[P].HH.B1-0);END;END; 754 PROCEDURE PRINTMARK(P:INTEGER);BEGIN PRINTCHAR(123); 755 IF(P<HIMEMMIN)OR(P>MEMEND)THEN PRINTESC(309)ELSE SHOWTOKENLIST(MEM[P].HH 756 .RH,0,MAXPRINTLINE-10);PRINTCHAR(125);END; 757 PROCEDURE PRINTRULEDIMEN(D:SCALED); 758 BEGIN IF(D=-1073741824)THEN PRINTCHAR(42)ELSE PRINTSCALED(D);END; 759 {:176}{177:}PROCEDURE PRINTGLUE(D:SCALED;ORDER:INTEGER;S:STRNUMBER); 760 BEGIN PRINTSCALED(D); 761 IF(ORDER<0)OR(ORDER>3)THEN PRINT(310)ELSE IF ORDER>0 THEN BEGIN PRINT( 762 311);WHILE ORDER>1 DO BEGIN PRINTCHAR(108);ORDER:=ORDER-1;END; 763 END ELSE IF S<>0 THEN PRINT(S);END; 764 {:177}{178:}PROCEDURE PRINTSPEC(P:INTEGER;S:STRNUMBER); 765 BEGIN IF(P<MEMMIN)OR(P>=LOMEMMAX)THEN PRINTCHAR(42)ELSE BEGIN 766 PRINTSCALED(MEM[P+1].INT);IF S<>0 THEN PRINT(S); 767 IF MEM[P+2].INT<>0 THEN BEGIN PRINT(312); 768 PRINTGLUE(MEM[P+2].INT,MEM[P].HH.B0,S);END; 769 IF MEM[P+3].INT<>0 THEN BEGIN PRINT(313); 770 PRINTGLUE(MEM[P+3].INT,MEM[P].HH.B1,S);END;END;END; 771 {:178}{179:}{691:}PROCEDURE PRINTFAMANDCHAR(P:HALFWORD); 772 BEGIN PRINTESC(464);PRINTINT(MEM[P].HH.B0);PRINTCHAR(32); 773 PRINT(MEM[P].HH.B1-0);END;PROCEDURE PRINTDELIMITER(P:HALFWORD); 774 VAR A:INTEGER;BEGIN A:=MEM[P].QQQQ.B0*256+MEM[P].QQQQ.B1-0; 775 A:=A*4096+MEM[P].QQQQ.B2*256+MEM[P].QQQQ.B3-0; 776 IF A<0 THEN PRINTINT(A)ELSE PRINTHEX(A);END; 777 {:691}{692:}PROCEDURE SHOWINFO;FORWARD; 778 PROCEDURE PRINTSUBSIDIARYDATA(P:HALFWORD;C:ASCIICODE); 779 BEGIN IF(POOLPTR-STRSTART[STRPTR])>=DEPTHTHRESHOLD THEN BEGIN IF MEM[P]. 780 HH.RH<>0 THEN PRINT(314);END ELSE BEGIN BEGIN STRPOOL[POOLPTR]:=C; 781 POOLPTR:=POOLPTR+1;END;TEMPPTR:=P;CASE MEM[P].HH.RH OF 1:BEGIN PRINTLN; 782 PRINTCURRENTSTRING;PRINTFAMANDCHAR(P);END;2:SHOWINFO; 783 3:IF MEM[P].HH.LH=0 THEN BEGIN PRINTLN;PRINTCURRENTSTRING;PRINT(860); 784 END ELSE SHOWINFO;ELSE END;POOLPTR:=POOLPTR-1;END;END; 785 {:692}{694:}PROCEDURE PRINTSTYLE(C:INTEGER); 786 BEGIN CASE C DIV 2 OF 0:PRINTESC(861);1:PRINTESC(862);2:PRINTESC(863); 787 3:PRINTESC(864);ELSE PRINT(865)END;END; 788 {:694}{225:}PROCEDURE PRINTSKIPPARAM(N:INTEGER); 789 BEGIN CASE N OF 0:PRINTESC(376);1:PRINTESC(377);2:PRINTESC(378); 790 3:PRINTESC(379);4:PRINTESC(380);5:PRINTESC(381);6:PRINTESC(382); 791 7:PRINTESC(383);8:PRINTESC(384);9:PRINTESC(385);10:PRINTESC(386); 792 11:PRINTESC(387);12:PRINTESC(388);13:PRINTESC(389);14:PRINTESC(390); 793 15:PRINTESC(391);16:PRINTESC(392);17:PRINTESC(393);ELSE PRINT(394)END; 794 END;{:225}{:179}{182:}PROCEDURE SHOWNODELIST(P:INTEGER);LABEL 10; 795 VAR N:INTEGER;G:REAL; 796 BEGIN IF(POOLPTR-STRSTART[STRPTR])>DEPTHTHRESHOLD THEN BEGIN IF P>0 THEN 797 PRINT(314);GOTO 10;END;N:=0;WHILE P>MEMMIN DO BEGIN PRINTLN; 798 PRINTCURRENTSTRING;IF P>MEMEND THEN BEGIN PRINT(315);GOTO 10;END;N:=N+1; 799 IF N>BREADTHMAX THEN BEGIN PRINT(316);GOTO 10;END; 800 {183:}IF(P>=HIMEMMIN)THEN PRINTFONTANDCHAR(P)ELSE CASE MEM[P].HH.B0 OF 0 801 ,1,13:{184:}BEGIN IF MEM[P].HH.B0=0 THEN PRINTESC(104)ELSE IF MEM[P].HH. 802 B0=1 THEN PRINTESC(118)ELSE PRINTESC(318);PRINT(319); 803 PRINTSCALED(MEM[P+3].INT);PRINTCHAR(43);PRINTSCALED(MEM[P+2].INT); 804 PRINT(320);PRINTSCALED(MEM[P+1].INT); 805 IF MEM[P].HH.B0=13 THEN{185:}BEGIN IF MEM[P].HH.B1<>0 THEN BEGIN PRINT( 806 286);PRINTINT(MEM[P].HH.B1+1);PRINT(322);END; 807 IF MEM[P+6].INT<>0 THEN BEGIN PRINT(323); 808 PRINTGLUE(MEM[P+6].INT,MEM[P+5].HH.B1,0);END; 809 IF MEM[P+4].INT<>0 THEN BEGIN PRINT(324); 810 PRINTGLUE(MEM[P+4].INT,MEM[P+5].HH.B0,0);END; 811 END{:185}ELSE BEGIN{186:}G:=MEM[P+6].GR; 812 IF(G<>0.0)AND(MEM[P+5].HH.B0<>0)THEN BEGIN PRINT(325); 813 IF MEM[P+5].HH.B0=2 THEN PRINT(326); 814 IF ABS(MEM[P+6].INT)<1048576 THEN PRINT(327)ELSE IF ABS(G)>20000.0 THEN 815 BEGIN IF G>0.0 THEN PRINTCHAR(62)ELSE PRINT(328); 816 PRINTGLUE(20000*65536,MEM[P+5].HH.B1,0); 817 END ELSE PRINTGLUE(ROUND(65536*G),MEM[P+5].HH.B1,0);END{:186}; 818 IF MEM[P+4].INT<>0 THEN BEGIN PRINT(321);PRINTSCALED(MEM[P+4].INT);END; 819 END;BEGIN BEGIN STRPOOL[POOLPTR]:=46;POOLPTR:=POOLPTR+1;END; 820 SHOWNODELIST(MEM[P+5].HH.RH);POOLPTR:=POOLPTR-1;END;END{:184}; 821 2:{187:}BEGIN PRINTESC(329);PRINTRULEDIMEN(MEM[P+3].INT);PRINTCHAR(43); 822 PRINTRULEDIMEN(MEM[P+2].INT);PRINT(320);PRINTRULEDIMEN(MEM[P+1].INT); 823 END{:187};3:{188:}BEGIN PRINTESC(330);PRINTINT(MEM[P].HH.B1-0); 824 PRINT(331);PRINTSCALED(MEM[P+3].INT);PRINT(332); 825 PRINTSPEC(MEM[P+4].HH.RH,0);PRINTCHAR(44);PRINTSCALED(MEM[P+2].INT); 826 PRINT(333);PRINTINT(MEM[P+1].INT);BEGIN BEGIN STRPOOL[POOLPTR]:=46; 827 POOLPTR:=POOLPTR+1;END;SHOWNODELIST(MEM[P+4].HH.LH);POOLPTR:=POOLPTR-1; 828 END;END{:188}; 829 8:{1356:}CASE MEM[P].HH.B1 OF 0:BEGIN PRINTWRITEWHATSIT(1285,P); 830 PRINTCHAR(61); 831 PRINTFILENAME(MEM[P+1].HH.RH,MEM[P+2].HH.LH,MEM[P+2].HH.RH);END; 832 1:BEGIN PRINTWRITEWHATSIT(594,P);PRINTMARK(MEM[P+1].HH.RH);END; 833 2:PRINTWRITEWHATSIT(1286,P);3:BEGIN PRINTESC(1287); 834 PRINTMARK(MEM[P+1].HH.RH);END;4:BEGIN PRINTESC(1289); 835 PRINTINT(MEM[P+1].HH.RH);PRINT(1292);PRINTINT(MEM[P+1].HH.B0); 836 PRINTCHAR(44);PRINTINT(MEM[P+1].HH.B1);PRINTCHAR(41);END; 837 ELSE PRINT(1293)END{:1356}; 838 10:{189:}IF MEM[P].HH.B1>=100 THEN{190:}BEGIN PRINTESC(338); 839 IF MEM[P].HH.B1=101 THEN PRINTCHAR(99)ELSE IF MEM[P].HH.B1=102 THEN 840 PRINTCHAR(120);PRINT(339);PRINTSPEC(MEM[P+1].HH.LH,0); 841 BEGIN BEGIN STRPOOL[POOLPTR]:=46;POOLPTR:=POOLPTR+1;END; 842 SHOWNODELIST(MEM[P+1].HH.RH);POOLPTR:=POOLPTR-1;END; 843 END{:190}ELSE BEGIN PRINTESC(334); 844 IF MEM[P].HH.B1<>0 THEN BEGIN PRINTCHAR(40); 845 IF MEM[P].HH.B1<98 THEN PRINTSKIPPARAM(MEM[P].HH.B1-1)ELSE IF MEM[P].HH. 846 B1=98 THEN PRINTESC(335)ELSE PRINTESC(336);PRINTCHAR(41);END; 847 IF MEM[P].HH.B1<>98 THEN BEGIN PRINTCHAR(32); 848 IF MEM[P].HH.B1<98 THEN PRINTSPEC(MEM[P+1].HH.LH,0)ELSE PRINTSPEC(MEM[P 849 +1].HH.LH,337);END;END{:189}; 850 11:{191:}IF MEM[P].HH.B1<>99 THEN BEGIN PRINTESC(340); 851 IF MEM[P].HH.B1<>0 THEN PRINTCHAR(32);PRINTSCALED(MEM[P+1].INT); 852 IF MEM[P].HH.B1=2 THEN PRINT(341);END ELSE BEGIN PRINTESC(342); 853 PRINTSCALED(MEM[P+1].INT);PRINT(337);END{:191}; 854 9:{192:}BEGIN PRINTESC(343); 855 IF MEM[P].HH.B1=0 THEN PRINT(344)ELSE PRINT(345); 856 IF MEM[P+1].INT<>0 THEN BEGIN PRINT(346);PRINTSCALED(MEM[P+1].INT);END; 857 END{:192};6:{193:}BEGIN PRINTFONTANDCHAR(P+1);PRINT(347); 858 IF MEM[P].HH.B1>1 THEN PRINTCHAR(124); 859 FONTINSHORTDISPLAY:=MEM[P+1].HH.B0;SHORTDISPLAY(MEM[P+1].HH.RH); 860 IF ODD(MEM[P].HH.B1)THEN PRINTCHAR(124);PRINTCHAR(41);END{:193}; 861 12:{194:}BEGIN PRINTESC(348);PRINTINT(MEM[P+1].INT);END{:194}; 862 7:{195:}BEGIN PRINTESC(349);IF MEM[P].HH.B1>0 THEN BEGIN PRINT(350); 863 PRINTINT(MEM[P].HH.B1);END;BEGIN BEGIN STRPOOL[POOLPTR]:=46; 864 POOLPTR:=POOLPTR+1;END;SHOWNODELIST(MEM[P+1].HH.LH);POOLPTR:=POOLPTR-1; 865 END;BEGIN STRPOOL[POOLPTR]:=124;POOLPTR:=POOLPTR+1;END; 866 SHOWNODELIST(MEM[P+1].HH.RH);POOLPTR:=POOLPTR-1;END{:195}; 867 4:{196:}BEGIN PRINTESC(351);PRINTMARK(MEM[P+1].INT);END{:196}; 868 5:{197:}BEGIN PRINTESC(352);BEGIN BEGIN STRPOOL[POOLPTR]:=46; 869 POOLPTR:=POOLPTR+1;END;SHOWNODELIST(MEM[P+1].INT);POOLPTR:=POOLPTR-1; 870 END;END{:197};{690:}14:PRINTSTYLE(MEM[P].HH.B1); 871 15:{695:}BEGIN PRINTESC(525);BEGIN STRPOOL[POOLPTR]:=68; 872 POOLPTR:=POOLPTR+1;END;SHOWNODELIST(MEM[P+1].HH.LH);POOLPTR:=POOLPTR-1; 873 BEGIN STRPOOL[POOLPTR]:=84;POOLPTR:=POOLPTR+1;END; 874 SHOWNODELIST(MEM[P+1].HH.RH);POOLPTR:=POOLPTR-1; 875 BEGIN STRPOOL[POOLPTR]:=83;POOLPTR:=POOLPTR+1;END; 876 SHOWNODELIST(MEM[P+2].HH.LH);POOLPTR:=POOLPTR-1; 877 BEGIN STRPOOL[POOLPTR]:=115;POOLPTR:=POOLPTR+1;END; 878 SHOWNODELIST(MEM[P+2].HH.RH);POOLPTR:=POOLPTR-1;END{:695}; 879 16,17,18,19,20,21,22,23,24,27,26,29,28,30,31:{696:}BEGIN CASE MEM[P].HH. 880 B0 OF 16:PRINTESC(866);17:PRINTESC(867);18:PRINTESC(868); 881 19:PRINTESC(869);20:PRINTESC(870);21:PRINTESC(871);22:PRINTESC(872); 882 23:PRINTESC(873);27:PRINTESC(874);26:PRINTESC(875);29:PRINTESC(539); 883 24:BEGIN PRINTESC(533);PRINTDELIMITER(P+4);END;28:BEGIN PRINTESC(508); 884 PRINTFAMANDCHAR(P+4);END;30:BEGIN PRINTESC(876);PRINTDELIMITER(P+1);END; 885 31:BEGIN PRINTESC(877);PRINTDELIMITER(P+1);END;END; 886 IF MEM[P].HH.B1<>0 THEN IF MEM[P].HH.B1=1 THEN PRINTESC(878)ELSE 887 PRINTESC(879);IF MEM[P].HH.B0<30 THEN PRINTSUBSIDIARYDATA(P+1,46); 888 PRINTSUBSIDIARYDATA(P+2,94);PRINTSUBSIDIARYDATA(P+3,95);END{:696}; 889 25:{697:}BEGIN PRINTESC(880); 890 IF MEM[P+1].INT=1073741824 THEN PRINT(881)ELSE PRINTSCALED(MEM[P+1].INT) 891 ; 892 IF(MEM[P+4].QQQQ.B0<>0)OR(MEM[P+4].QQQQ.B1<>0)OR(MEM[P+4].QQQQ.B2<>0)OR( 893 MEM[P+4].QQQQ.B3<>0)THEN BEGIN PRINT(882);PRINTDELIMITER(P+4);END; 894 IF(MEM[P+5].QQQQ.B0<>0)OR(MEM[P+5].QQQQ.B1<>0)OR(MEM[P+5].QQQQ.B2<>0)OR( 895 MEM[P+5].QQQQ.B3<>0)THEN BEGIN PRINT(883);PRINTDELIMITER(P+5);END; 896 PRINTSUBSIDIARYDATA(P+2,92);PRINTSUBSIDIARYDATA(P+3,47);END{:697}; 897 {:690}ELSE PRINT(317)END{:183};P:=MEM[P].HH.RH;END;10:END; 898 {:182}{198:}PROCEDURE SHOWBOX(P:HALFWORD); 899 BEGIN{236:}DEPTHTHRESHOLD:=EQTB[5288].INT; 900 BREADTHMAX:=EQTB[5287].INT{:236};IF BREADTHMAX<=0 THEN BREADTHMAX:=5; 901 IF POOLPTR+DEPTHTHRESHOLD>=POOLSIZE THEN DEPTHTHRESHOLD:=POOLSIZE- 902 POOLPTR-1;SHOWNODELIST(P);PRINTLN;END; 903 {:198}{200:}PROCEDURE DELETETOKENREF(P:HALFWORD); 904 BEGIN IF MEM[P].HH.LH=0 THEN FLUSHLIST(P)ELSE MEM[P].HH.LH:=MEM[P].HH.LH 905 -1;END;{:200}{201:}PROCEDURE DELETEGLUEREF(P:HALFWORD); 906 BEGIN IF MEM[P].HH.RH=0 THEN FREENODE(P,4)ELSE MEM[P].HH.RH:=MEM[P].HH. 907 RH-1;END;{:201}{202:}PROCEDURE FLUSHNODELIST(P:HALFWORD);LABEL 30; 908 VAR Q:HALFWORD;BEGIN WHILE P<>0 DO BEGIN Q:=MEM[P].HH.RH; 909 IF(P>=HIMEMMIN)THEN BEGIN MEM[P].HH.RH:=AVAIL;AVAIL:=P; 910 {DYNUSED:=DYNUSED-1;} 911 END ELSE BEGIN CASE MEM[P].HH.B0 OF 0,1,13:BEGIN FLUSHNODELIST(MEM[P+5]. 912 HH.RH);FREENODE(P,7);GOTO 30;END;2:BEGIN FREENODE(P,4);GOTO 30;END; 913 3:BEGIN FLUSHNODELIST(MEM[P+4].HH.LH);DELETEGLUEREF(MEM[P+4].HH.RH); 914 FREENODE(P,5);GOTO 30;END; 915 8:{1358:}BEGIN CASE MEM[P].HH.B1 OF 0:FREENODE(P,3); 916 1,3:BEGIN DELETETOKENREF(MEM[P+1].HH.RH);FREENODE(P,2);GOTO 30;END; 917 2,4:FREENODE(P,2);ELSE CONFUSION(1295)END;GOTO 30;END{:1358}; 918 10:BEGIN BEGIN IF MEM[MEM[P+1].HH.LH].HH.RH=0 THEN FREENODE(MEM[P+1].HH. 919 LH,4)ELSE MEM[MEM[P+1].HH.LH].HH.RH:=MEM[MEM[P+1].HH.LH].HH.RH-1;END; 920 IF MEM[P+1].HH.RH<>0 THEN FLUSHNODELIST(MEM[P+1].HH.RH);END;11,9,12:; 921 6:FLUSHNODELIST(MEM[P+1].HH.RH);4:DELETETOKENREF(MEM[P+1].INT); 922 7:BEGIN FLUSHNODELIST(MEM[P+1].HH.LH);FLUSHNODELIST(MEM[P+1].HH.RH);END; 923 5:FLUSHNODELIST(MEM[P+1].INT);{698:}14:BEGIN FREENODE(P,3);GOTO 30;END; 924 15:BEGIN FLUSHNODELIST(MEM[P+1].HH.LH);FLUSHNODELIST(MEM[P+1].HH.RH); 925 FLUSHNODELIST(MEM[P+2].HH.LH);FLUSHNODELIST(MEM[P+2].HH.RH); 926 FREENODE(P,3);GOTO 30;END; 927 16,17,18,19,20,21,22,23,24,27,26,29,28:BEGIN IF MEM[P+1].HH.RH>=2 THEN 928 FLUSHNODELIST(MEM[P+1].HH.LH); 929 IF MEM[P+2].HH.RH>=2 THEN FLUSHNODELIST(MEM[P+2].HH.LH); 930 IF MEM[P+3].HH.RH>=2 THEN FLUSHNODELIST(MEM[P+3].HH.LH); 931 IF MEM[P].HH.B0=24 THEN FREENODE(P,5)ELSE IF MEM[P].HH.B0=28 THEN 932 FREENODE(P,5)ELSE FREENODE(P,4);GOTO 30;END;30,31:BEGIN FREENODE(P,4); 933 GOTO 30;END;25:BEGIN FLUSHNODELIST(MEM[P+2].HH.LH); 934 FLUSHNODELIST(MEM[P+3].HH.LH);FREENODE(P,6);GOTO 30;END; 935 {:698}ELSE CONFUSION(353)END;FREENODE(P,2);30:END;P:=Q;END;END; 936 {:202}{204:}FUNCTION COPYNODELIST(P:HALFWORD):HALFWORD;VAR H:HALFWORD; 937 Q:HALFWORD;R:HALFWORD;WORDS:0..5;BEGIN H:=GETAVAIL;Q:=H; 938 WHILE P<>0 DO BEGIN{205:}WORDS:=1; 939 IF(P>=HIMEMMIN)THEN R:=GETAVAIL ELSE{206:}CASE MEM[P].HH.B0 OF 0,1,13: 940 BEGIN R:=GETNODE(7);MEM[R+6]:=MEM[P+6];MEM[R+5]:=MEM[P+5]; 941 MEM[R+5].HH.RH:=COPYNODELIST(MEM[P+5].HH.RH);WORDS:=5;END; 942 2:BEGIN R:=GETNODE(4);WORDS:=4;END;3:BEGIN R:=GETNODE(5); 943 MEM[R+4]:=MEM[P+4]; 944 MEM[MEM[P+4].HH.RH].HH.RH:=MEM[MEM[P+4].HH.RH].HH.RH+1; 945 MEM[R+4].HH.LH:=COPYNODELIST(MEM[P+4].HH.LH);WORDS:=4;END; 946 8:{1357:}CASE MEM[P].HH.B1 OF 0:BEGIN R:=GETNODE(3);WORDS:=3;END; 947 1,3:BEGIN R:=GETNODE(2); 948 MEM[MEM[P+1].HH.RH].HH.LH:=MEM[MEM[P+1].HH.RH].HH.LH+1;WORDS:=2;END; 949 2,4:BEGIN R:=GETNODE(2);WORDS:=2;END;ELSE CONFUSION(1294)END{:1357}; 950 10:BEGIN R:=GETNODE(2); 951 MEM[MEM[P+1].HH.LH].HH.RH:=MEM[MEM[P+1].HH.LH].HH.RH+1; 952 MEM[R+1].HH.LH:=MEM[P+1].HH.LH; 953 MEM[R+1].HH.RH:=COPYNODELIST(MEM[P+1].HH.RH);END; 954 11,9,12:BEGIN R:=GETNODE(2);WORDS:=2;END;6:BEGIN R:=GETNODE(2); 955 MEM[R+1]:=MEM[P+1];MEM[R+1].HH.RH:=COPYNODELIST(MEM[P+1].HH.RH);END; 956 7:BEGIN R:=GETNODE(2);MEM[R+1].HH.LH:=COPYNODELIST(MEM[P+1].HH.LH); 957 MEM[R+1].HH.RH:=COPYNODELIST(MEM[P+1].HH.RH);END;4:BEGIN R:=GETNODE(2); 958 MEM[MEM[P+1].INT].HH.LH:=MEM[MEM[P+1].INT].HH.LH+1;WORDS:=2;END; 959 5:BEGIN R:=GETNODE(2);MEM[R+1].INT:=COPYNODELIST(MEM[P+1].INT);END; 960 ELSE CONFUSION(354)END{:206};WHILE WORDS>0 DO BEGIN WORDS:=WORDS-1; 961 MEM[R+WORDS]:=MEM[P+WORDS];END{:205};MEM[Q].HH.RH:=R;Q:=R; 962 P:=MEM[P].HH.RH;END;MEM[Q].HH.RH:=0;Q:=MEM[H].HH.RH; 963 BEGIN MEM[H].HH.RH:=AVAIL;AVAIL:=H;{DYNUSED:=DYNUSED-1;}END; 964 COPYNODELIST:=Q;END;{:204}{211:}PROCEDURE PRINTMODE(M:INTEGER); 965 BEGIN IF M>0 THEN CASE M DIV(101)OF 0:PRINT(355);1:PRINT(356); 966 2:PRINT(357); 967 END ELSE IF M=0 THEN PRINT(358)ELSE CASE(-M)DIV(101)OF 0:PRINT(359); 968 1:PRINT(360);2:PRINT(343);END;PRINT(361);END; 969 {:211}{216:}PROCEDURE PUSHNEST; 970 BEGIN IF NESTPTR>MAXNESTSTACK THEN BEGIN MAXNESTSTACK:=NESTPTR; 971 IF NESTPTR=NESTSIZE THEN OVERFLOW(362,NESTSIZE);END; 972 NEST[NESTPTR]:=CURLIST;NESTPTR:=NESTPTR+1;CURLIST.HEADFIELD:=GETAVAIL; 973 CURLIST.TAILFIELD:=CURLIST.HEADFIELD;CURLIST.PGFIELD:=0; 974 CURLIST.MLFIELD:=LINE;END;{:216}{217:}PROCEDURE POPNEST; 975 BEGIN BEGIN MEM[CURLIST.HEADFIELD].HH.RH:=AVAIL; 976 AVAIL:=CURLIST.HEADFIELD;{DYNUSED:=DYNUSED-1;}END;NESTPTR:=NESTPTR-1; 977 CURLIST:=NEST[NESTPTR];END;{:217}{218:}PROCEDURE PRINTTOTALS;FORWARD; 978 PROCEDURE SHOWACTIVITIES;VAR P:0..NESTSIZE;M:-203..203;A:MEMORYWORD; 979 Q,R:HALFWORD;T:INTEGER;BEGIN NEST[NESTPTR]:=CURLIST;PRINTNL(338); 980 PRINTLN;FOR P:=NESTPTR DOWNTO 0 DO BEGIN M:=NEST[P].MODEFIELD; 981 A:=NEST[P].AUXFIELD;PRINTNL(363);PRINTMODE(M);PRINT(364); 982 PRINTINT(ABS(NEST[P].MLFIELD)); 983 IF M=102 THEN IF NEST[P].PGFIELD<>8585216 THEN BEGIN PRINT(365); 984 PRINTINT(NEST[P].PGFIELD MOD 65536);PRINT(366); 985 PRINTINT(NEST[P].PGFIELD DIV 4194304);PRINTCHAR(44); 986 PRINTINT((NEST[P].PGFIELD DIV 65536)MOD 64);PRINTCHAR(41);END; 987 IF NEST[P].MLFIELD<0 THEN PRINT(367); 988 IF P=0 THEN BEGIN{986:}IF 29998<>PAGETAIL THEN BEGIN PRINTNL(980); 989 IF OUTPUTACTIVE THEN PRINT(981);SHOWBOX(MEM[29998].HH.RH); 990 IF PAGECONTENTS>0 THEN BEGIN PRINTNL(982);PRINTTOTALS;PRINTNL(983); 991 PRINTSCALED(PAGESOFAR[0]);R:=MEM[30000].HH.RH; 992 WHILE R<>30000 DO BEGIN PRINTLN;PRINTESC(330);T:=MEM[R].HH.B1-0; 993 PRINTINT(T);PRINT(984); 994 IF EQTB[5318+T].INT=1000 THEN T:=MEM[R+3].INT ELSE T:=XOVERN(MEM[R+3]. 995 INT,1000)*EQTB[5318+T].INT;PRINTSCALED(T); 996 IF MEM[R].HH.B0=1 THEN BEGIN Q:=29998;T:=0;REPEAT Q:=MEM[Q].HH.RH; 997 IF(MEM[Q].HH.B0=3)AND(MEM[Q].HH.B1=MEM[R].HH.B1)THEN T:=T+1; 998 UNTIL Q=MEM[R+1].HH.LH;PRINT(985);PRINTINT(T);PRINT(986);END; 999 R:=MEM[R].HH.RH;END;END;END{:986}; 1000 IF MEM[29999].HH.RH<>0 THEN PRINTNL(368);END; 1001 SHOWBOX(MEM[NEST[P].HEADFIELD].HH.RH); 1002 {219:}CASE ABS(M)DIV(101)OF 0:BEGIN PRINTNL(369); 1003 IF A.INT<=-65536000 THEN PRINT(370)ELSE PRINTSCALED(A.INT); 1004 IF NEST[P].PGFIELD<>0 THEN BEGIN PRINT(371);PRINTINT(NEST[P].PGFIELD); 1005 PRINT(372);IF NEST[P].PGFIELD<>1 THEN PRINTCHAR(115);END;END; 1006 1:BEGIN PRINTNL(373);PRINTINT(A.HH.LH); 1007 IF M>0 THEN IF A.HH.RH>0 THEN BEGIN PRINT(374);PRINTINT(A.HH.RH);END; 1008 END;2:IF A.INT<>0 THEN BEGIN PRINT(375);SHOWBOX(A.INT);END;END{:219}; 1009 END;END;{:218}{237:}PROCEDURE PRINTPARAM(N:INTEGER); 1010 BEGIN CASE N OF 0:PRINTESC(420);1:PRINTESC(421);2:PRINTESC(422); 1011 3:PRINTESC(423);4:PRINTESC(424);5:PRINTESC(425);6:PRINTESC(426); 1012 7:PRINTESC(427);8:PRINTESC(428);9:PRINTESC(429);10:PRINTESC(430); 1013 11:PRINTESC(431);12:PRINTESC(432);13:PRINTESC(433);14:PRINTESC(434); 1014 15:PRINTESC(435);16:PRINTESC(436);17:PRINTESC(437);18:PRINTESC(438); 1015 19:PRINTESC(439);20:PRINTESC(440);21:PRINTESC(441);22:PRINTESC(442); 1016 23:PRINTESC(443);24:PRINTESC(444);25:PRINTESC(445);26:PRINTESC(446); 1017 27:PRINTESC(447);28:PRINTESC(448);29:PRINTESC(449);30:PRINTESC(450); 1018 31:PRINTESC(451);32:PRINTESC(452);33:PRINTESC(453);34:PRINTESC(454); 1019 35:PRINTESC(455);36:PRINTESC(456);37:PRINTESC(457);38:PRINTESC(458); 1020 39:PRINTESC(459);40:PRINTESC(460);41:PRINTESC(461);42:PRINTESC(462); 1021 43:PRINTESC(463);44:PRINTESC(464);45:PRINTESC(465);46:PRINTESC(466); 1022 47:PRINTESC(467);48:PRINTESC(468);49:PRINTESC(469);50:PRINTESC(470); 1023 51:PRINTESC(471);52:PRINTESC(472);53:PRINTESC(473);54:PRINTESC(474); 1024 ELSE PRINT(475)END;END;{:237}{241:}PROCEDURE FIXDATEANDTIME; 1025 BEGIN SYSTIME:=12*60;SYSDAY:=4;SYSMONTH:=7;SYSYEAR:=1776; 1026 EQTB[5283].INT:=SYSTIME;EQTB[5284].INT:=SYSDAY;EQTB[5285].INT:=SYSMONTH; 1027 EQTB[5286].INT:=SYSYEAR;END;{:241}{245:}PROCEDURE BEGINDIAGNOSTIC; 1028 BEGIN OLDSETTING:=SELECTOR; 1029 IF(EQTB[5292].INT<=0)AND(SELECTOR=19)THEN BEGIN SELECTOR:=SELECTOR-1; 1030 IF HISTORY=0 THEN HISTORY:=1;END;END; 1031 PROCEDURE ENDDIAGNOSTIC(BLANKLINE:BOOLEAN);BEGIN PRINTNL(338); 1032 IF BLANKLINE THEN PRINTLN;SELECTOR:=OLDSETTING;END; 1033 {:245}{247:}PROCEDURE PRINTLENGTHPARAM(N:INTEGER); 1034 BEGIN CASE N OF 0:PRINTESC(478);1:PRINTESC(479);2:PRINTESC(480); 1035 3:PRINTESC(481);4:PRINTESC(482);5:PRINTESC(483);6:PRINTESC(484); 1036 7:PRINTESC(485);8:PRINTESC(486);9:PRINTESC(487);10:PRINTESC(488); 1037 11:PRINTESC(489);12:PRINTESC(490);13:PRINTESC(491);14:PRINTESC(492); 1038 15:PRINTESC(493);16:PRINTESC(494);17:PRINTESC(495);18:PRINTESC(496); 1039 19:PRINTESC(497);20:PRINTESC(498);ELSE PRINT(499)END;END; 1040 {:247}{252:}{298:}PROCEDURE PRINTCMDCHR(CMD:QUARTERWORD; 1041 CHRCODE:HALFWORD);BEGIN CASE CMD OF 1:BEGIN PRINT(557);PRINT(CHRCODE); 1042 END;2:BEGIN PRINT(558);PRINT(CHRCODE);END;3:BEGIN PRINT(559); 1043 PRINT(CHRCODE);END;6:BEGIN PRINT(560);PRINT(CHRCODE);END; 1044 7:BEGIN PRINT(561);PRINT(CHRCODE);END;8:BEGIN PRINT(562);PRINT(CHRCODE); 1045 END;9:PRINT(563);10:BEGIN PRINT(564);PRINT(CHRCODE);END; 1046 11:BEGIN PRINT(565);PRINT(CHRCODE);END;12:BEGIN PRINT(566); 1047 PRINT(CHRCODE);END; 1048 {227:}75,76:IF CHRCODE<2900 THEN PRINTSKIPPARAM(CHRCODE-2882)ELSE IF 1049 CHRCODE<3156 THEN BEGIN PRINTESC(395);PRINTINT(CHRCODE-2900); 1050 END ELSE BEGIN PRINTESC(396);PRINTINT(CHRCODE-3156);END; 1051 {:227}{231:}72:IF CHRCODE>=3422 THEN BEGIN PRINTESC(407); 1052 PRINTINT(CHRCODE-3422);END ELSE CASE CHRCODE OF 3413:PRINTESC(398); 1053 3414:PRINTESC(399);3415:PRINTESC(400);3416:PRINTESC(401); 1054 3417:PRINTESC(402);3418:PRINTESC(403);3419:PRINTESC(404); 1055 3420:PRINTESC(405);ELSE PRINTESC(406)END; 1056 {:231}{239:}73:IF CHRCODE<5318 THEN PRINTPARAM(CHRCODE-5263)ELSE BEGIN 1057 PRINTESC(476);PRINTINT(CHRCODE-5318);END; 1058 {:239}{249:}74:IF CHRCODE<5851 THEN PRINTLENGTHPARAM(CHRCODE-5830)ELSE 1059 BEGIN PRINTESC(500);PRINTINT(CHRCODE-5851);END; 1060 {:249}{266:}45:PRINTESC(508);90:PRINTESC(509);40:PRINTESC(510); 1061 41:PRINTESC(511);77:PRINTESC(519);61:PRINTESC(512);42:PRINTESC(531); 1062 16:PRINTESC(513);107:PRINTESC(504);88:PRINTESC(518);15:PRINTESC(514); 1063 92:PRINTESC(515);67:PRINTESC(505);62:PRINTESC(516);64:PRINTESC(32); 1064 102:PRINTESC(517);32:PRINTESC(520);36:PRINTESC(521);39:PRINTESC(522); 1065 37:PRINTESC(330);44:PRINTESC(47);18:PRINTESC(351);46:PRINTESC(523); 1066 17:PRINTESC(524);54:PRINTESC(525);91:PRINTESC(526);34:PRINTESC(527); 1067 65:PRINTESC(528);103:PRINTESC(529);55:PRINTESC(335);63:PRINTESC(530); 1068 66:PRINTESC(533);96:PRINTESC(534);0:PRINTESC(535);98:PRINTESC(536); 1069 80:PRINTESC(532);84:PRINTESC(408);109:PRINTESC(537);71:PRINTESC(407); 1070 38:PRINTESC(352);33:PRINTESC(538);56:PRINTESC(539);35:PRINTESC(540); 1071 {:266}{335:}13:PRINTESC(597); 1072 {:335}{377:}104:IF CHRCODE=0 THEN PRINTESC(629)ELSE PRINTESC(630); 1073 {:377}{385:}110:CASE CHRCODE OF 1:PRINTESC(632);2:PRINTESC(633); 1074 3:PRINTESC(634);4:PRINTESC(635);ELSE PRINTESC(631)END; 1075 {:385}{412:}89:IF CHRCODE=0 THEN PRINTESC(476)ELSE IF CHRCODE=1 THEN 1076 PRINTESC(500)ELSE IF CHRCODE=2 THEN PRINTESC(395)ELSE PRINTESC(396); 1077 {:412}{417:}79:IF CHRCODE=1 THEN PRINTESC(669)ELSE PRINTESC(668); 1078 82:IF CHRCODE=0 THEN PRINTESC(670)ELSE PRINTESC(671); 1079 83:IF CHRCODE=1 THEN PRINTESC(672)ELSE IF CHRCODE=3 THEN PRINTESC(673) 1080 ELSE PRINTESC(674);70:CASE CHRCODE OF 0:PRINTESC(675);1:PRINTESC(676); 1081 2:PRINTESC(677);3:PRINTESC(678);ELSE PRINTESC(679)END; 1082 {:417}{469:}108:CASE CHRCODE OF 0:PRINTESC(735);1:PRINTESC(736); 1083 2:PRINTESC(737);3:PRINTESC(738);4:PRINTESC(739);ELSE PRINTESC(740)END; 1084 {:469}{488:}105:CASE CHRCODE OF 1:PRINTESC(758);2:PRINTESC(759); 1085 3:PRINTESC(760);4:PRINTESC(761);5:PRINTESC(762);6:PRINTESC(763); 1086 7:PRINTESC(764);8:PRINTESC(765);9:PRINTESC(766);10:PRINTESC(767); 1087 11:PRINTESC(768);12:PRINTESC(769);13:PRINTESC(770);14:PRINTESC(771); 1088 15:PRINTESC(772);16:PRINTESC(773);ELSE PRINTESC(757)END; 1089 {:488}{492:}106:IF CHRCODE=2 THEN PRINTESC(774)ELSE IF CHRCODE=4 THEN 1090 PRINTESC(775)ELSE PRINTESC(776); 1091 {:492}{781:}4:IF CHRCODE=256 THEN PRINTESC(898)ELSE BEGIN PRINT(902); 1092 PRINT(CHRCODE);END; 1093 5:IF CHRCODE=257 THEN PRINTESC(899)ELSE PRINTESC(900); 1094 {:781}{984:}81:CASE CHRCODE OF 0:PRINTESC(970);1:PRINTESC(971); 1095 2:PRINTESC(972);3:PRINTESC(973);4:PRINTESC(974);5:PRINTESC(975); 1096 6:PRINTESC(976);ELSE PRINTESC(977)END; 1097 {:984}{1053:}14:IF CHRCODE=1 THEN PRINTESC(1026)ELSE PRINTESC(1025); 1098 {:1053}{1059:}26:CASE CHRCODE OF 4:PRINTESC(1027);0:PRINTESC(1028); 1099 1:PRINTESC(1029);2:PRINTESC(1030);ELSE PRINTESC(1031)END; 1100 27:CASE CHRCODE OF 4:PRINTESC(1032);0:PRINTESC(1033);1:PRINTESC(1034); 1101 2:PRINTESC(1035);ELSE PRINTESC(1036)END;28:PRINTESC(336); 1102 29:PRINTESC(340);30:PRINTESC(342); 1103 {:1059}{1072:}21:IF CHRCODE=1 THEN PRINTESC(1054)ELSE PRINTESC(1055); 1104 22:IF CHRCODE=1 THEN PRINTESC(1056)ELSE PRINTESC(1057); 1105 20:CASE CHRCODE OF 0:PRINTESC(409);1:PRINTESC(1058);2:PRINTESC(1059); 1106 3:PRINTESC(965);4:PRINTESC(1060);5:PRINTESC(967);ELSE PRINTESC(1061)END; 1107 31:IF CHRCODE=100 THEN PRINTESC(1063)ELSE IF CHRCODE=101 THEN PRINTESC( 1108 1064)ELSE IF CHRCODE=102 THEN PRINTESC(1065)ELSE PRINTESC(1062); 1109 {:1072}{1089:}43:IF CHRCODE=0 THEN PRINTESC(1081)ELSE PRINTESC(1080); 1110 {:1089}{1108:}25:IF CHRCODE=10 THEN PRINTESC(1092)ELSE IF CHRCODE=11 1111 THEN PRINTESC(1091)ELSE PRINTESC(1090); 1112 23:IF CHRCODE=1 THEN PRINTESC(1094)ELSE PRINTESC(1093); 1113 24:IF CHRCODE=1 THEN PRINTESC(1096)ELSE PRINTESC(1095); 1114 {:1108}{1115:}47:IF CHRCODE=1 THEN PRINTESC(45)ELSE PRINTESC(349); 1115 {:1115}{1143:}48:IF CHRCODE=1 THEN PRINTESC(1128)ELSE PRINTESC(1127); 1116 {:1143}{1157:}50:CASE CHRCODE OF 16:PRINTESC(866);17:PRINTESC(867); 1117 18:PRINTESC(868);19:PRINTESC(869);20:PRINTESC(870);21:PRINTESC(871); 1118 22:PRINTESC(872);23:PRINTESC(873);26:PRINTESC(875); 1119 ELSE PRINTESC(874)END; 1120 51:IF CHRCODE=1 THEN PRINTESC(878)ELSE IF CHRCODE=2 THEN PRINTESC(879) 1121 ELSE PRINTESC(1129);{:1157}{1170:}53:PRINTSTYLE(CHRCODE); 1122 {:1170}{1179:}52:CASE CHRCODE OF 1:PRINTESC(1148);2:PRINTESC(1149); 1123 3:PRINTESC(1150);4:PRINTESC(1151);5:PRINTESC(1152); 1124 ELSE PRINTESC(1147)END; 1125 {:1179}{1189:}49:IF CHRCODE=30 THEN PRINTESC(876)ELSE PRINTESC(877); 1126 {:1189}{1209:}93:IF CHRCODE=1 THEN PRINTESC(1171)ELSE IF CHRCODE=2 THEN 1127 PRINTESC(1172)ELSE PRINTESC(1173); 1128 97:IF CHRCODE=0 THEN PRINTESC(1174)ELSE IF CHRCODE=1 THEN PRINTESC(1175) 1129 ELSE IF CHRCODE=2 THEN PRINTESC(1176)ELSE PRINTESC(1177); 1130 {:1209}{1220:}94:IF CHRCODE<>0 THEN PRINTESC(1192)ELSE PRINTESC(1191); 1131 {:1220}{1223:}95:CASE CHRCODE OF 0:PRINTESC(1193);1:PRINTESC(1194); 1132 2:PRINTESC(1195);3:PRINTESC(1196);4:PRINTESC(1197);5:PRINTESC(1198); 1133 ELSE PRINTESC(1199)END;68:BEGIN PRINTESC(513);PRINTHEX(CHRCODE);END; 1134 69:BEGIN PRINTESC(524);PRINTHEX(CHRCODE);END; 1135 {:1223}{1231:}85:IF CHRCODE=3983 THEN PRINTESC(415)ELSE IF CHRCODE=5007 1136 THEN PRINTESC(419)ELSE IF CHRCODE=4239 THEN PRINTESC(416)ELSE IF CHRCODE 1137 =4495 THEN PRINTESC(417)ELSE IF CHRCODE=4751 THEN PRINTESC(418)ELSE 1138 PRINTESC(477);86:PRINTSIZE(CHRCODE-3935); 1139 {:1231}{1251:}99:IF CHRCODE=1 THEN PRINTESC(953)ELSE PRINTESC(941); 1140 {:1251}{1255:}78:IF CHRCODE=0 THEN PRINTESC(1217)ELSE PRINTESC(1218); 1141 {:1255}{1261:}87:BEGIN PRINT(1226);SLOWPRINT(FONTNAME[CHRCODE]); 1142 IF FONTSIZE[CHRCODE]<>FONTDSIZE[CHRCODE]THEN BEGIN PRINT(741); 1143 PRINTSCALED(FONTSIZE[CHRCODE]);PRINT(397);END;END; 1144 {:1261}{1263:}100:CASE CHRCODE OF 0:PRINTESC(274);1:PRINTESC(275); 1145 2:PRINTESC(276);ELSE PRINTESC(1227)END; 1146 {:1263}{1273:}60:IF CHRCODE=0 THEN PRINTESC(1229)ELSE PRINTESC(1228); 1147 {:1273}{1278:}58:IF CHRCODE=0 THEN PRINTESC(1230)ELSE PRINTESC(1231); 1148 {:1278}{1287:}57:IF CHRCODE=4239 THEN PRINTESC(1237)ELSE PRINTESC(1238); 1149 {:1287}{1292:}19:CASE CHRCODE OF 1:PRINTESC(1240);2:PRINTESC(1241); 1150 3:PRINTESC(1242);ELSE PRINTESC(1239)END;{:1292}{1295:}101:PRINT(1249); 1151 111:PRINT(1250);112:PRINTESC(1251);113:PRINTESC(1252); 1152 114:BEGIN PRINTESC(1171);PRINTESC(1252);END;115:PRINTESC(1253); 1153 {:1295}{1346:}59:CASE CHRCODE OF 0:PRINTESC(1285);1:PRINTESC(594); 1154 2:PRINTESC(1286);3:PRINTESC(1287);4:PRINTESC(1288);5:PRINTESC(1289); 1155 ELSE PRINT(1290)END;{:1346}ELSE PRINT(567)END;END; 1156 {:298}{PROCEDURE SHOWEQTB(N:HALFWORD); 1157 BEGIN IF N<1 THEN PRINTCHAR(63)ELSE IF N<2882 THEN[223:]BEGIN SPRINTCS(N 1158 );PRINTCHAR(61);PRINTCMDCHR(EQTB[N].HH.B0,EQTB[N].HH.RH); 1159 IF EQTB[N].HH.B0>=111 THEN BEGIN PRINTCHAR(58); 1160 SHOWTOKENLIST(MEM[EQTB[N].HH.RH].HH.RH,0,32);END; 1161 END[:223]ELSE IF N<3412 THEN[229:]IF N<2900 THEN BEGIN PRINTSKIPPARAM(N 1162 -2882);PRINTCHAR(61); 1163 IF N<2897 THEN PRINTSPEC(EQTB[N].HH.RH,397)ELSE PRINTSPEC(EQTB[N].HH.RH, 1164 337);END ELSE IF N<3156 THEN BEGIN PRINTESC(395);PRINTINT(N-2900); 1165 PRINTCHAR(61);PRINTSPEC(EQTB[N].HH.RH,397);END ELSE BEGIN PRINTESC(396); 1166 PRINTINT(N-3156);PRINTCHAR(61);PRINTSPEC(EQTB[N].HH.RH,337); 1167 END[:229]ELSE IF N<5263 THEN[233:]IF N=3412 THEN BEGIN PRINTESC(408); 1168 PRINTCHAR(61); 1169 IF EQTB[3412].HH.RH=0 THEN PRINTCHAR(48)ELSE PRINTINT(MEM[EQTB[3412].HH. 1170 RH].HH.LH);END ELSE IF N<3422 THEN BEGIN PRINTCMDCHR(72,N); 1171 PRINTCHAR(61); 1172 IF EQTB[N].HH.RH<>0 THEN SHOWTOKENLIST(MEM[EQTB[N].HH.RH].HH.RH,0,32); 1173 END ELSE IF N<3678 THEN BEGIN PRINTESC(407);PRINTINT(N-3422); 1174 PRINTCHAR(61); 1175 IF EQTB[N].HH.RH<>0 THEN SHOWTOKENLIST(MEM[EQTB[N].HH.RH].HH.RH,0,32); 1176 END ELSE IF N<3934 THEN BEGIN PRINTESC(409);PRINTINT(N-3678); 1177 PRINTCHAR(61); 1178 IF EQTB[N].HH.RH=0 THEN PRINT(410)ELSE BEGIN DEPTHTHRESHOLD:=0; 1179 BREADTHMAX:=1;SHOWNODELIST(EQTB[N].HH.RH);END; 1180 END ELSE IF N<3983 THEN[234:]BEGIN IF N=3934 THEN PRINT(411)ELSE IF N< 1181 3951 THEN BEGIN PRINTESC(412);PRINTINT(N-3935); 1182 END ELSE IF N<3967 THEN BEGIN PRINTESC(413);PRINTINT(N-3951); 1183 END ELSE BEGIN PRINTESC(414);PRINTINT(N-3967);END;PRINTCHAR(61); 1184 PRINTESC(HASH[2624+EQTB[N].HH.RH].RH); 1185 END[:234]ELSE[235:]IF N<5007 THEN BEGIN IF N<4239 THEN BEGIN PRINTESC( 1186 415);PRINTINT(N-3983);END ELSE IF N<4495 THEN BEGIN PRINTESC(416); 1187 PRINTINT(N-4239);END ELSE IF N<4751 THEN BEGIN PRINTESC(417); 1188 PRINTINT(N-4495);END ELSE BEGIN PRINTESC(418);PRINTINT(N-4751);END; 1189 PRINTCHAR(61);PRINTINT(EQTB[N].HH.RH);END ELSE BEGIN PRINTESC(419); 1190 PRINTINT(N-5007);PRINTCHAR(61);PRINTINT(EQTB[N].HH.RH-0); 1191 END[:235][:233]ELSE IF N<5830 THEN[242:]BEGIN IF N<5318 THEN PRINTPARAM( 1192 N-5263)ELSE IF N<5574 THEN BEGIN PRINTESC(476);PRINTINT(N-5318); 1193 END ELSE BEGIN PRINTESC(477);PRINTINT(N-5574);END;PRINTCHAR(61); 1194 PRINTINT(EQTB[N].INT); 1195 END[:242]ELSE IF N<=6106 THEN[251:]BEGIN IF N<5851 THEN PRINTLENGTHPARAM 1196 (N-5830)ELSE BEGIN PRINTESC(500);PRINTINT(N-5851);END;PRINTCHAR(61); 1197 PRINTSCALED(EQTB[N].INT);PRINT(397);END[:251]ELSE PRINTCHAR(63);END;} 1198 {:252}{259:}FUNCTION IDLOOKUP(J,L:INTEGER):HALFWORD;LABEL 40; 1199 VAR H:INTEGER;D:INTEGER;P:HALFWORD;K:HALFWORD;BEGIN{261:}H:=BUFFER[J]; 1200 FOR K:=J+1 TO J+L-1 DO BEGIN H:=H+H+BUFFER[K]; 1201 WHILE H>=1777 DO H:=H-1777;END{:261};P:=H+514; 1202 WHILE TRUE DO BEGIN IF HASH[P].RH>0 THEN IF(STRSTART[HASH[P].RH+1]- 1203 STRSTART[HASH[P].RH])=L THEN IF STREQBUF(HASH[P].RH,J)THEN GOTO 40; 1204 IF HASH[P].LH=0 THEN BEGIN IF NONEWCONTROLSEQUENCE THEN P:=2881 ELSE 1205 {260:}BEGIN IF HASH[P].RH>0 THEN BEGIN REPEAT IF(HASHUSED=514)THEN 1206 OVERFLOW(503,2100);HASHUSED:=HASHUSED-1;UNTIL HASH[HASHUSED].RH=0; 1207 HASH[P].LH:=HASHUSED;P:=HASHUSED;END; 1208 BEGIN IF POOLPTR+L>POOLSIZE THEN OVERFLOW(257,POOLSIZE-INITPOOLPTR);END; 1209 D:=(POOLPTR-STRSTART[STRPTR]); 1210 WHILE POOLPTR>STRSTART[STRPTR]DO BEGIN POOLPTR:=POOLPTR-1; 1211 STRPOOL[POOLPTR+L]:=STRPOOL[POOLPTR];END; 1212 FOR K:=J TO J+L-1 DO BEGIN STRPOOL[POOLPTR]:=BUFFER[K]; 1213 POOLPTR:=POOLPTR+1;END;HASH[P].RH:=MAKESTRING;POOLPTR:=POOLPTR+D; 1214 {CSCOUNT:=CSCOUNT+1;}END{:260};GOTO 40;END;P:=HASH[P].LH;END; 1215 40:IDLOOKUP:=P;END;{:259}{264:}PROCEDURE PRIMITIVE(S:STRNUMBER; 1216 C:QUARTERWORD;O:HALFWORD);VAR K:POOLPOINTER;J:SMALLNUMBER;L:SMALLNUMBER; 1217 BEGIN IF S<256 THEN CURVAL:=S+257 ELSE BEGIN K:=STRSTART[S]; 1218 L:=STRSTART[S+1]-K;FOR J:=0 TO L-1 DO BUFFER[J]:=STRPOOL[K+J]; 1219 CURVAL:=IDLOOKUP(0,L);BEGIN STRPTR:=STRPTR-1;POOLPTR:=STRSTART[STRPTR]; 1220 END;HASH[CURVAL].RH:=S;END;EQTB[CURVAL].HH.B1:=1;EQTB[CURVAL].HH.B0:=C; 1221 EQTB[CURVAL].HH.RH:=O;END; 1222 {:264}{274:}PROCEDURE NEWSAVELEVEL(C:GROUPCODE); 1223 BEGIN IF SAVEPTR>MAXSAVESTACK THEN BEGIN MAXSAVESTACK:=SAVEPTR; 1224 IF MAXSAVESTACK>SAVESIZE-6 THEN OVERFLOW(541,SAVESIZE);END; 1225 SAVESTACK[SAVEPTR].HH.B0:=3;SAVESTACK[SAVEPTR].HH.B1:=CURGROUP; 1226 SAVESTACK[SAVEPTR].HH.RH:=CURBOUNDARY; 1227 IF CURLEVEL=255 THEN OVERFLOW(542,255);CURBOUNDARY:=SAVEPTR; 1228 CURLEVEL:=CURLEVEL+1;SAVEPTR:=SAVEPTR+1;CURGROUP:=C;END; 1229 {:274}{275:}PROCEDURE EQDESTROY(W:MEMORYWORD);VAR Q:HALFWORD; 1230 BEGIN CASE W.HH.B0 OF 111,112,113,114:DELETETOKENREF(W.HH.RH); 1231 117:DELETEGLUEREF(W.HH.RH);118:BEGIN Q:=W.HH.RH; 1232 IF Q<>0 THEN FREENODE(Q,MEM[Q].HH.LH+MEM[Q].HH.LH+1);END; 1233 119:FLUSHNODELIST(W.HH.RH);ELSE END;END; 1234 {:275}{276:}PROCEDURE EQSAVE(P:HALFWORD;L:QUARTERWORD); 1235 BEGIN IF SAVEPTR>MAXSAVESTACK THEN BEGIN MAXSAVESTACK:=SAVEPTR; 1236 IF MAXSAVESTACK>SAVESIZE-6 THEN OVERFLOW(541,SAVESIZE);END; 1237 IF L=0 THEN SAVESTACK[SAVEPTR].HH.B0:=1 ELSE BEGIN SAVESTACK[SAVEPTR]:= 1238 EQTB[P];SAVEPTR:=SAVEPTR+1;SAVESTACK[SAVEPTR].HH.B0:=0;END; 1239 SAVESTACK[SAVEPTR].HH.B1:=L;SAVESTACK[SAVEPTR].HH.RH:=P; 1240 SAVEPTR:=SAVEPTR+1;END;{:276}{277:}PROCEDURE EQDEFINE(P:HALFWORD; 1241 T:QUARTERWORD;E:HALFWORD); 1242 BEGIN IF EQTB[P].HH.B1=CURLEVEL THEN EQDESTROY(EQTB[P])ELSE IF CURLEVEL> 1243 1 THEN EQSAVE(P,EQTB[P].HH.B1);EQTB[P].HH.B1:=CURLEVEL;EQTB[P].HH.B0:=T; 1244 EQTB[P].HH.RH:=E;END;{:277}{278:}PROCEDURE EQWORDDEFINE(P:HALFWORD; 1245 W:INTEGER); 1246 BEGIN IF XEQLEVEL[P]<>CURLEVEL THEN BEGIN EQSAVE(P,XEQLEVEL[P]); 1247 XEQLEVEL[P]:=CURLEVEL;END;EQTB[P].INT:=W;END; 1248 {:278}{279:}PROCEDURE GEQDEFINE(P:HALFWORD;T:QUARTERWORD;E:HALFWORD); 1249 BEGIN EQDESTROY(EQTB[P]);EQTB[P].HH.B1:=1;EQTB[P].HH.B0:=T; 1250 EQTB[P].HH.RH:=E;END;PROCEDURE GEQWORDDEFINE(P:HALFWORD;W:INTEGER); 1251 BEGIN EQTB[P].INT:=W;XEQLEVEL[P]:=1;END; 1252 {:279}{280:}PROCEDURE SAVEFORAFTER(T:HALFWORD); 1253 BEGIN IF CURLEVEL>1 THEN BEGIN IF SAVEPTR>MAXSAVESTACK THEN BEGIN 1254 MAXSAVESTACK:=SAVEPTR; 1255 IF MAXSAVESTACK>SAVESIZE-6 THEN OVERFLOW(541,SAVESIZE);END; 1256 SAVESTACK[SAVEPTR].HH.B0:=2;SAVESTACK[SAVEPTR].HH.B1:=0; 1257 SAVESTACK[SAVEPTR].HH.RH:=T;SAVEPTR:=SAVEPTR+1;END;END; 1258 {:280}{281:}{284:}{PROCEDURE RESTORETRACE(P:HALFWORD;S:STRNUMBER); 1259 BEGIN BEGINDIAGNOSTIC;PRINTCHAR(123);PRINT(S);PRINTCHAR(32);SHOWEQTB(P); 1260 PRINTCHAR(125);ENDDIAGNOSTIC(FALSE);END;}{:284}PROCEDURE BACKINPUT; 1261 FORWARD;PROCEDURE UNSAVE;LABEL 30;VAR P:HALFWORD;L:QUARTERWORD; 1262 T:HALFWORD;BEGIN IF CURLEVEL>1 THEN BEGIN CURLEVEL:=CURLEVEL-1; 1263 {282:}WHILE TRUE DO BEGIN SAVEPTR:=SAVEPTR-1; 1264 IF SAVESTACK[SAVEPTR].HH.B0=3 THEN GOTO 30;P:=SAVESTACK[SAVEPTR].HH.RH; 1265 IF SAVESTACK[SAVEPTR].HH.B0=2 THEN{326:}BEGIN T:=CURTOK;CURTOK:=P; 1266 BACKINPUT;CURTOK:=T; 1267 END{:326}ELSE BEGIN IF SAVESTACK[SAVEPTR].HH.B0=0 THEN BEGIN L:= 1268 SAVESTACK[SAVEPTR].HH.B1;SAVEPTR:=SAVEPTR-1; 1269 END ELSE SAVESTACK[SAVEPTR]:=EQTB[2881]; 1270 {283:}IF P<5263 THEN IF EQTB[P].HH.B1=1 THEN BEGIN EQDESTROY(SAVESTACK[ 1271 SAVEPTR]);{IF EQTB[5300].INT>0 THEN RESTORETRACE(P,544);} 1272 END ELSE BEGIN EQDESTROY(EQTB[P]);EQTB[P]:=SAVESTACK[SAVEPTR]; 1273 {IF EQTB[5300].INT>0 THEN RESTORETRACE(P,545);} 1274 END ELSE IF XEQLEVEL[P]<>1 THEN BEGIN EQTB[P]:=SAVESTACK[SAVEPTR]; 1275 XEQLEVEL[P]:=L;{IF EQTB[5300].INT>0 THEN RESTORETRACE(P,545);} 1276 END ELSE BEGIN{IF EQTB[5300].INT>0 THEN RESTORETRACE(P,544);}END{:283}; 1277 END;END;30:CURGROUP:=SAVESTACK[SAVEPTR].HH.B1; 1278 CURBOUNDARY:=SAVESTACK[SAVEPTR].HH.RH{:282};END ELSE CONFUSION(543);END; 1279 {:281}{288:}PROCEDURE PREPAREMAG; 1280 BEGIN IF(MAGSET>0)AND(EQTB[5280].INT<>MAGSET)THEN BEGIN BEGIN IF 1281 INTERACTION=3 THEN;PRINTNL(262);PRINT(547);END;PRINTINT(EQTB[5280].INT); 1282 PRINT(548);PRINTNL(549);BEGIN HELPPTR:=2;HELPLINE[1]:=550; 1283 HELPLINE[0]:=551;END;INTERROR(MAGSET);GEQWORDDEFINE(5280,MAGSET);END; 1284 IF(EQTB[5280].INT<=0)OR(EQTB[5280].INT>32768)THEN BEGIN BEGIN IF 1285 INTERACTION=3 THEN;PRINTNL(262);PRINT(552);END;BEGIN HELPPTR:=1; 1286 HELPLINE[0]:=553;END;INTERROR(EQTB[5280].INT);GEQWORDDEFINE(5280,1000); 1287 END;MAGSET:=EQTB[5280].INT;END; 1288 {:288}{295:}PROCEDURE TOKENSHOW(P:HALFWORD); 1289 BEGIN IF P<>0 THEN SHOWTOKENLIST(MEM[P].HH.RH,0,10000000);END; 1290 {:295}{296:}PROCEDURE PRINTMEANING;BEGIN PRINTCMDCHR(CURCMD,CURCHR); 1291 IF CURCMD>=111 THEN BEGIN PRINTCHAR(58);PRINTLN;TOKENSHOW(CURCHR); 1292 END ELSE IF CURCMD=110 THEN BEGIN PRINTCHAR(58);PRINTLN; 1293 TOKENSHOW(CURMARK[CURCHR]);END;END;{:296}{299:}PROCEDURE SHOWCURCMDCHR; 1294 BEGIN BEGINDIAGNOSTIC;PRINTNL(123); 1295 IF CURLIST.MODEFIELD<>SHOWNMODE THEN BEGIN PRINTMODE(CURLIST.MODEFIELD); 1296 PRINT(568);SHOWNMODE:=CURLIST.MODEFIELD;END;PRINTCMDCHR(CURCMD,CURCHR); 1297 PRINTCHAR(125);ENDDIAGNOSTIC(FALSE);END; 1298 {:299}{311:}PROCEDURE SHOWCONTEXT;LABEL 30;VAR OLDSETTING:0..21; 1299 NN:INTEGER;BOTTOMLINE:BOOLEAN;{315:}I:0..BUFSIZE;J:0..BUFSIZE; 1300 L:0..HALFERRORLINE;M:INTEGER;N:0..ERRORLINE;P:INTEGER;Q:INTEGER; 1301 {:315}BEGIN BASEPTR:=INPUTPTR;INPUTSTACK[BASEPTR]:=CURINPUT;NN:=-1; 1302 BOTTOMLINE:=FALSE;WHILE TRUE DO BEGIN CURINPUT:=INPUTSTACK[BASEPTR]; 1303 IF(CURINPUT.STATEFIELD<>0)THEN IF(CURINPUT.NAMEFIELD>17)OR(BASEPTR=0) 1304 THEN BOTTOMLINE:=TRUE; 1305 IF(BASEPTR=INPUTPTR)OR BOTTOMLINE OR(NN<EQTB[5317].INT)THEN{312:}BEGIN 1306 IF(BASEPTR=INPUTPTR)OR(CURINPUT.STATEFIELD<>0)OR(CURINPUT.INDEXFIELD<>3) 1307 OR(CURINPUT.LOCFIELD<>0)THEN BEGIN TALLY:=0;OLDSETTING:=SELECTOR; 1308 IF CURINPUT.STATEFIELD<>0 THEN BEGIN{313:}IF CURINPUT.NAMEFIELD<=17 THEN 1309 IF(CURINPUT.NAMEFIELD=0)THEN IF BASEPTR=0 THEN PRINTNL(574)ELSE PRINTNL( 1310 575)ELSE BEGIN PRINTNL(576); 1311 IF CURINPUT.NAMEFIELD=17 THEN PRINTCHAR(42)ELSE PRINTINT(CURINPUT. 1312 NAMEFIELD-1);PRINTCHAR(62);END ELSE BEGIN PRINTNL(577);PRINTINT(LINE); 1313 END;PRINTCHAR(32){:313};{318:}BEGIN L:=TALLY;TALLY:=0;SELECTOR:=20; 1314 TRICKCOUNT:=1000000;END; 1315 IF BUFFER[CURINPUT.LIMITFIELD]=EQTB[5311].INT THEN J:=CURINPUT. 1316 LIMITFIELD ELSE J:=CURINPUT.LIMITFIELD+1; 1317 IF J>0 THEN FOR I:=CURINPUT.STARTFIELD TO J-1 DO BEGIN IF I=CURINPUT. 1318 LOCFIELD THEN BEGIN FIRSTCOUNT:=TALLY; 1319 TRICKCOUNT:=TALLY+1+ERRORLINE-HALFERRORLINE; 1320 IF TRICKCOUNT<ERRORLINE THEN TRICKCOUNT:=ERRORLINE;END;PRINT(BUFFER[I]); 1321 END{:318}; 1322 END ELSE BEGIN{314:}CASE CURINPUT.INDEXFIELD OF 0:PRINTNL(578); 1323 1,2:PRINTNL(579); 1324 3:IF CURINPUT.LOCFIELD=0 THEN PRINTNL(580)ELSE PRINTNL(581); 1325 4:PRINTNL(582);5:BEGIN PRINTLN;PRINTCS(CURINPUT.NAMEFIELD);END; 1326 6:PRINTNL(583);7:PRINTNL(584);8:PRINTNL(585);9:PRINTNL(586); 1327 10:PRINTNL(587);11:PRINTNL(588);12:PRINTNL(589);13:PRINTNL(590); 1328 14:PRINTNL(591);15:PRINTNL(592);ELSE PRINTNL(63)END{:314}; 1329 {319:}BEGIN L:=TALLY;TALLY:=0;SELECTOR:=20;TRICKCOUNT:=1000000;END; 1330 IF CURINPUT.INDEXFIELD<5 THEN SHOWTOKENLIST(CURINPUT.STARTFIELD,CURINPUT 1331 .LOCFIELD,100000)ELSE SHOWTOKENLIST(MEM[CURINPUT.STARTFIELD].HH.RH, 1332 CURINPUT.LOCFIELD,100000){:319};END;SELECTOR:=OLDSETTING; 1333 {317:}IF TRICKCOUNT=1000000 THEN BEGIN FIRSTCOUNT:=TALLY; 1334 TRICKCOUNT:=TALLY+1+ERRORLINE-HALFERRORLINE; 1335 IF TRICKCOUNT<ERRORLINE THEN TRICKCOUNT:=ERRORLINE;END; 1336 IF TALLY<TRICKCOUNT THEN M:=TALLY-FIRSTCOUNT ELSE M:=TRICKCOUNT- 1337 FIRSTCOUNT;IF L+FIRSTCOUNT<=HALFERRORLINE THEN BEGIN P:=0; 1338 N:=L+FIRSTCOUNT;END ELSE BEGIN PRINT(277); 1339 P:=L+FIRSTCOUNT-HALFERRORLINE+3;N:=HALFERRORLINE;END; 1340 FOR Q:=P TO FIRSTCOUNT-1 DO PRINTCHAR(TRICKBUF[Q MOD ERRORLINE]); 1341 PRINTLN;FOR Q:=1 TO N DO PRINTCHAR(32); 1342 IF M+N<=ERRORLINE THEN P:=FIRSTCOUNT+M ELSE P:=FIRSTCOUNT+(ERRORLINE-N-3 1343 );FOR Q:=FIRSTCOUNT TO P-1 DO PRINTCHAR(TRICKBUF[Q MOD ERRORLINE]); 1344 IF M+N>ERRORLINE THEN PRINT(277){:317};NN:=NN+1;END; 1345 END{:312}ELSE IF NN=EQTB[5317].INT THEN BEGIN PRINTNL(277);NN:=NN+1;END; 1346 IF BOTTOMLINE THEN GOTO 30;BASEPTR:=BASEPTR-1;END; 1347 30:CURINPUT:=INPUTSTACK[INPUTPTR];END; 1348 {:311}{323:}PROCEDURE BEGINTOKENLIST(P:HALFWORD;T:QUARTERWORD); 1349 BEGIN BEGIN IF INPUTPTR>MAXINSTACK THEN BEGIN MAXINSTACK:=INPUTPTR; 1350 IF INPUTPTR=STACKSIZE THEN OVERFLOW(593,STACKSIZE);END; 1351 INPUTSTACK[INPUTPTR]:=CURINPUT;INPUTPTR:=INPUTPTR+1;END; 1352 CURINPUT.STATEFIELD:=0;CURINPUT.STARTFIELD:=P;CURINPUT.INDEXFIELD:=T; 1353 IF T>=5 THEN BEGIN MEM[P].HH.LH:=MEM[P].HH.LH+1; 1354 IF T=5 THEN CURINPUT.LIMITFIELD:=PARAMPTR ELSE BEGIN CURINPUT.LOCFIELD:= 1355 MEM[P].HH.RH;IF EQTB[5293].INT>1 THEN BEGIN BEGINDIAGNOSTIC; 1356 PRINTNL(338);CASE T OF 14:PRINTESC(351);15:PRINTESC(594); 1357 ELSE PRINTCMDCHR(72,T+3407)END;PRINT(556);TOKENSHOW(P); 1358 ENDDIAGNOSTIC(FALSE);END;END;END ELSE CURINPUT.LOCFIELD:=P;END; 1359 {:323}{324:}PROCEDURE ENDTOKENLIST; 1360 BEGIN IF CURINPUT.INDEXFIELD>=3 THEN BEGIN IF CURINPUT.INDEXFIELD<=4 1361 THEN FLUSHLIST(CURINPUT.STARTFIELD)ELSE BEGIN DELETETOKENREF(CURINPUT. 1362 STARTFIELD); 1363 IF CURINPUT.INDEXFIELD=5 THEN WHILE PARAMPTR>CURINPUT.LIMITFIELD DO 1364 BEGIN PARAMPTR:=PARAMPTR-1;FLUSHLIST(PARAMSTACK[PARAMPTR]);END;END; 1365 END ELSE IF CURINPUT.INDEXFIELD=1 THEN IF ALIGNSTATE>500000 THEN 1366 ALIGNSTATE:=0 ELSE FATALERROR(595);BEGIN INPUTPTR:=INPUTPTR-1; 1367 CURINPUT:=INPUTSTACK[INPUTPTR];END; 1368 BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END;END; 1369 {:324}{325:}PROCEDURE BACKINPUT;VAR P:HALFWORD; 1370 BEGIN WHILE(CURINPUT.STATEFIELD=0)AND(CURINPUT.LOCFIELD=0)AND(CURINPUT. 1371 INDEXFIELD<>2)DO ENDTOKENLIST;P:=GETAVAIL;MEM[P].HH.LH:=CURTOK; 1372 IF CURTOK<768 THEN IF CURTOK<512 THEN ALIGNSTATE:=ALIGNSTATE-1 ELSE 1373 ALIGNSTATE:=ALIGNSTATE+1; 1374 BEGIN IF INPUTPTR>MAXINSTACK THEN BEGIN MAXINSTACK:=INPUTPTR; 1375 IF INPUTPTR=STACKSIZE THEN OVERFLOW(593,STACKSIZE);END; 1376 INPUTSTACK[INPUTPTR]:=CURINPUT;INPUTPTR:=INPUTPTR+1;END; 1377 CURINPUT.STATEFIELD:=0;CURINPUT.STARTFIELD:=P;CURINPUT.INDEXFIELD:=3; 1378 CURINPUT.LOCFIELD:=P;END;{:325}{327:}PROCEDURE BACKERROR; 1379 BEGIN OKTOINTERRUPT:=FALSE;BACKINPUT;OKTOINTERRUPT:=TRUE;ERROR;END; 1380 PROCEDURE INSERROR;BEGIN OKTOINTERRUPT:=FALSE;BACKINPUT; 1381 CURINPUT.INDEXFIELD:=4;OKTOINTERRUPT:=TRUE;ERROR;END; 1382 {:327}{328:}PROCEDURE BEGINFILEREADING; 1383 BEGIN IF INOPEN=MAXINOPEN THEN OVERFLOW(596,MAXINOPEN); 1384 IF FIRST=BUFSIZE THEN OVERFLOW(256,BUFSIZE);INOPEN:=INOPEN+1; 1385 BEGIN IF INPUTPTR>MAXINSTACK THEN BEGIN MAXINSTACK:=INPUTPTR; 1386 IF INPUTPTR=STACKSIZE THEN OVERFLOW(593,STACKSIZE);END; 1387 INPUTSTACK[INPUTPTR]:=CURINPUT;INPUTPTR:=INPUTPTR+1;END; 1388 CURINPUT.INDEXFIELD:=INOPEN;LINESTACK[CURINPUT.INDEXFIELD]:=LINE; 1389 CURINPUT.STARTFIELD:=FIRST;CURINPUT.STATEFIELD:=1;CURINPUT.NAMEFIELD:=0; 1390 END;{:328}{329:}PROCEDURE ENDFILEREADING; 1391 BEGIN FIRST:=CURINPUT.STARTFIELD;LINE:=LINESTACK[CURINPUT.INDEXFIELD]; 1392 IF CURINPUT.NAMEFIELD>17 THEN ACLOSE(INPUTFILE[CURINPUT.INDEXFIELD]); 1393 BEGIN INPUTPTR:=INPUTPTR-1;CURINPUT:=INPUTSTACK[INPUTPTR];END; 1394 INOPEN:=INOPEN-1;END;{:329}{330:}PROCEDURE CLEARFORERRORPROMPT; 1395 BEGIN WHILE(CURINPUT.STATEFIELD<>0)AND(CURINPUT.NAMEFIELD=0)AND(INPUTPTR 1396 >0)AND(CURINPUT.LOCFIELD>CURINPUT.LIMITFIELD)DO ENDFILEREADING;PRINTLN;; 1397 END;{:330}{336:}PROCEDURE CHECKOUTERVALIDITY;VAR P:HALFWORD;Q:HALFWORD; 1398 BEGIN IF SCANNERSTATUS<>0 THEN BEGIN DELETIONSALLOWED:=FALSE; 1399 {337:}IF CURCS<>0 THEN BEGIN IF(CURINPUT.STATEFIELD=0)OR(CURINPUT. 1400 NAMEFIELD<1)OR(CURINPUT.NAMEFIELD>17)THEN BEGIN P:=GETAVAIL; 1401 MEM[P].HH.LH:=4095+CURCS;BEGINTOKENLIST(P,3);END;CURCMD:=10;CURCHR:=32; 1402 END{:337};IF SCANNERSTATUS>1 THEN{338:}BEGIN RUNAWAY; 1403 IF CURCS=0 THEN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(604); 1404 END ELSE BEGIN CURCS:=0;BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 1405 PRINT(605);END;END;PRINT(606);{339:}P:=GETAVAIL; 1406 CASE SCANNERSTATUS OF 2:BEGIN PRINT(570);MEM[P].HH.LH:=637;END; 1407 3:BEGIN PRINT(612);MEM[P].HH.LH:=PARTOKEN;LONGSTATE:=113;END; 1408 4:BEGIN PRINT(572);MEM[P].HH.LH:=637;Q:=P;P:=GETAVAIL;MEM[P].HH.RH:=Q; 1409 MEM[P].HH.LH:=6710;ALIGNSTATE:=-1000000;END;5:BEGIN PRINT(573); 1410 MEM[P].HH.LH:=637;END;END;BEGINTOKENLIST(P,4){:339};PRINT(607); 1411 SPRINTCS(WARNINGINDEX);BEGIN HELPPTR:=4;HELPLINE[3]:=608; 1412 HELPLINE[2]:=609;HELPLINE[1]:=610;HELPLINE[0]:=611;END;ERROR; 1413 END{:338}ELSE BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(598); 1414 END;PRINTCMDCHR(105,CURIF);PRINT(599);PRINTINT(SKIPLINE); 1415 BEGIN HELPPTR:=3;HELPLINE[2]:=600;HELPLINE[1]:=601;HELPLINE[0]:=602;END; 1416 IF CURCS<>0 THEN CURCS:=0 ELSE HELPLINE[2]:=603;CURTOK:=6713;INSERROR; 1417 END;DELETIONSALLOWED:=TRUE;END;END;{:336}{340:}PROCEDURE FIRMUPTHELINE; 1418 FORWARD;{:340}{341:}PROCEDURE GETNEXT;LABEL 20,25,21,26,40,10; 1419 VAR K:0..BUFSIZE;T:HALFWORD;CAT:0..15;C,CC:ASCIICODE;D:2..3; 1420 BEGIN 20:CURCS:=0; 1421 IF CURINPUT.STATEFIELD<>0 THEN{343:}BEGIN 25:IF CURINPUT.LOCFIELD<= 1422 CURINPUT.LIMITFIELD THEN BEGIN CURCHR:=BUFFER[CURINPUT.LOCFIELD]; 1423 CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1; 1424 21:CURCMD:=EQTB[3983+CURCHR].HH.RH; 1425 {344:}CASE CURINPUT.STATEFIELD+CURCMD OF{345:}10,26,42,27,43{:345}:GOTO 1426 25; 1427 1,17,33:{354:}BEGIN IF CURINPUT.LOCFIELD>CURINPUT.LIMITFIELD THEN CURCS 1428 :=513 ELSE BEGIN 26:K:=CURINPUT.LOCFIELD;CURCHR:=BUFFER[K]; 1429 CAT:=EQTB[3983+CURCHR].HH.RH;K:=K+1; 1430 IF CAT=11 THEN CURINPUT.STATEFIELD:=17 ELSE IF CAT=10 THEN CURINPUT. 1431 STATEFIELD:=17 ELSE CURINPUT.STATEFIELD:=1; 1432 IF(CAT=11)AND(K<=CURINPUT.LIMITFIELD)THEN{356:}BEGIN REPEAT CURCHR:= 1433 BUFFER[K];CAT:=EQTB[3983+CURCHR].HH.RH;K:=K+1; 1434 UNTIL(CAT<>11)OR(K>CURINPUT.LIMITFIELD); 1435 {355:}BEGIN IF BUFFER[K]=CURCHR THEN IF CAT=7 THEN IF K<CURINPUT. 1436 LIMITFIELD THEN BEGIN C:=BUFFER[K+1];IF C<128 THEN BEGIN D:=2; 1437 IF(((C>=48)AND(C<=57))OR((C>=97)AND(C<=102)))THEN IF K+2<=CURINPUT. 1438 LIMITFIELD THEN BEGIN CC:=BUFFER[K+2]; 1439 IF(((CC>=48)AND(CC<=57))OR((CC>=97)AND(CC<=102)))THEN D:=D+1;END; 1440 IF D>2 THEN BEGIN IF C<=57 THEN CURCHR:=C-48 ELSE CURCHR:=C-87; 1441 IF CC<=57 THEN CURCHR:=16*CURCHR+CC-48 ELSE CURCHR:=16*CURCHR+CC-87; 1442 BUFFER[K-1]:=CURCHR; 1443 END ELSE IF C<64 THEN BUFFER[K-1]:=C+64 ELSE BUFFER[K-1]:=C-64; 1444 CURINPUT.LIMITFIELD:=CURINPUT.LIMITFIELD-D;FIRST:=FIRST-D; 1445 WHILE K<=CURINPUT.LIMITFIELD DO BEGIN BUFFER[K]:=BUFFER[K+D];K:=K+1;END; 1446 GOTO 26;END;END;END{:355};IF CAT<>11 THEN K:=K-1; 1447 IF K>CURINPUT.LOCFIELD+1 THEN BEGIN CURCS:=IDLOOKUP(CURINPUT.LOCFIELD,K- 1448 CURINPUT.LOCFIELD);CURINPUT.LOCFIELD:=K;GOTO 40;END; 1449 END{:356}ELSE{355:}BEGIN IF BUFFER[K]=CURCHR THEN IF CAT=7 THEN IF K< 1450 CURINPUT.LIMITFIELD THEN BEGIN C:=BUFFER[K+1];IF C<128 THEN BEGIN D:=2; 1451 IF(((C>=48)AND(C<=57))OR((C>=97)AND(C<=102)))THEN IF K+2<=CURINPUT. 1452 LIMITFIELD THEN BEGIN CC:=BUFFER[K+2]; 1453 IF(((CC>=48)AND(CC<=57))OR((CC>=97)AND(CC<=102)))THEN D:=D+1;END; 1454 IF D>2 THEN BEGIN IF C<=57 THEN CURCHR:=C-48 ELSE CURCHR:=C-87; 1455 IF CC<=57 THEN CURCHR:=16*CURCHR+CC-48 ELSE CURCHR:=16*CURCHR+CC-87; 1456 BUFFER[K-1]:=CURCHR; 1457 END ELSE IF C<64 THEN BUFFER[K-1]:=C+64 ELSE BUFFER[K-1]:=C-64; 1458 CURINPUT.LIMITFIELD:=CURINPUT.LIMITFIELD-D;FIRST:=FIRST-D; 1459 WHILE K<=CURINPUT.LIMITFIELD DO BEGIN BUFFER[K]:=BUFFER[K+D];K:=K+1;END; 1460 GOTO 26;END;END;END{:355};CURCS:=257+BUFFER[CURINPUT.LOCFIELD]; 1461 CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;END;40:CURCMD:=EQTB[CURCS].HH.B0; 1462 CURCHR:=EQTB[CURCS].HH.RH;IF CURCMD>=113 THEN CHECKOUTERVALIDITY; 1463 END{:354};14,30,46:{353:}BEGIN CURCS:=CURCHR+1; 1464 CURCMD:=EQTB[CURCS].HH.B0;CURCHR:=EQTB[CURCS].HH.RH; 1465 CURINPUT.STATEFIELD:=1;IF CURCMD>=113 THEN CHECKOUTERVALIDITY;END{:353}; 1466 8,24,40:{352:}BEGIN IF CURCHR=BUFFER[CURINPUT.LOCFIELD]THEN IF CURINPUT. 1467 LOCFIELD<CURINPUT.LIMITFIELD THEN BEGIN C:=BUFFER[CURINPUT.LOCFIELD+1]; 1468 IF C<128 THEN BEGIN CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+2; 1469 IF(((C>=48)AND(C<=57))OR((C>=97)AND(C<=102)))THEN IF CURINPUT.LOCFIELD<= 1470 CURINPUT.LIMITFIELD THEN BEGIN CC:=BUFFER[CURINPUT.LOCFIELD]; 1471 IF(((CC>=48)AND(CC<=57))OR((CC>=97)AND(CC<=102)))THEN BEGIN CURINPUT. 1472 LOCFIELD:=CURINPUT.LOCFIELD+1; 1473 IF C<=57 THEN CURCHR:=C-48 ELSE CURCHR:=C-87; 1474 IF CC<=57 THEN CURCHR:=16*CURCHR+CC-48 ELSE CURCHR:=16*CURCHR+CC-87; 1475 GOTO 21;END;END;IF C<64 THEN CURCHR:=C+64 ELSE CURCHR:=C-64;GOTO 21;END; 1476 END;CURINPUT.STATEFIELD:=1;END{:352}; 1477 16,32,48:{346:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 1478 PRINT(613);END;BEGIN HELPPTR:=2;HELPLINE[1]:=614;HELPLINE[0]:=615;END; 1479 DELETIONSALLOWED:=FALSE;ERROR;DELETIONSALLOWED:=TRUE;GOTO 20;END{:346}; 1480 {347:}11:{349:}BEGIN CURINPUT.STATEFIELD:=17;CURCHR:=32;END{:349}; 1481 6:{348:}BEGIN CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1;CURCMD:=10; 1482 CURCHR:=32;END{:348}; 1483 22,15,31,47:{350:}BEGIN CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1; 1484 GOTO 25;END{:350}; 1485 38:{351:}BEGIN CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1;CURCS:=PARLOC; 1486 CURCMD:=EQTB[CURCS].HH.B0;CURCHR:=EQTB[CURCS].HH.RH; 1487 IF CURCMD>=113 THEN CHECKOUTERVALIDITY;END{:351}; 1488 2:ALIGNSTATE:=ALIGNSTATE+1;18,34:BEGIN CURINPUT.STATEFIELD:=1; 1489 ALIGNSTATE:=ALIGNSTATE+1;END;3:ALIGNSTATE:=ALIGNSTATE-1; 1490 19,35:BEGIN CURINPUT.STATEFIELD:=1;ALIGNSTATE:=ALIGNSTATE-1;END; 1491 20,21,23,25,28,29,36,37,39,41,44,45:CURINPUT.STATEFIELD:=1; 1492 {:347}ELSE END{:344};END ELSE BEGIN CURINPUT.STATEFIELD:=33; 1493 {360:}IF CURINPUT.NAMEFIELD>17 THEN{362:}BEGIN LINE:=LINE+1; 1494 FIRST:=CURINPUT.STARTFIELD; 1495 IF NOT FORCEEOF THEN BEGIN IF INPUTLN(INPUTFILE[CURINPUT.INDEXFIELD], 1496 TRUE)THEN FIRMUPTHELINE ELSE FORCEEOF:=TRUE;END; 1497 IF FORCEEOF THEN BEGIN PRINTCHAR(41);OPENPARENS:=OPENPARENS-1;; 1498 FORCEEOF:=FALSE;ENDFILEREADING;CHECKOUTERVALIDITY;GOTO 20;END; 1499 IF(EQTB[5311].INT<0)OR(EQTB[5311].INT>255)THEN CURINPUT.LIMITFIELD:= 1500 CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[5311].INT; 1501 FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD; 1502 END{:362}ELSE BEGIN IF NOT(CURINPUT.NAMEFIELD=0)THEN BEGIN CURCMD:=0; 1503 CURCHR:=0;GOTO 10;END;IF INPUTPTR>0 THEN BEGIN ENDFILEREADING;GOTO 20; 1504 END;IF SELECTOR<18 THEN OPENLOGFILE; 1505 IF INTERACTION>1 THEN BEGIN IF(EQTB[5311].INT<0)OR(EQTB[5311].INT>255) 1506 THEN CURINPUT.LIMITFIELD:=CURINPUT.LIMITFIELD+1; 1507 IF CURINPUT.LIMITFIELD=CURINPUT.STARTFIELD THEN PRINTNL(616);PRINTLN; 1508 FIRST:=CURINPUT.STARTFIELD;BEGIN;PRINT(42);TERMINPUT;END; 1509 CURINPUT.LIMITFIELD:=LAST; 1510 IF(EQTB[5311].INT<0)OR(EQTB[5311].INT>255)THEN CURINPUT.LIMITFIELD:= 1511 CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[5311].INT; 1512 FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD; 1513 END ELSE FATALERROR(617);END{:360}; 1514 BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END;GOTO 25;END; 1515 END{:343}ELSE{357:}IF CURINPUT.LOCFIELD<>0 THEN BEGIN T:=MEM[CURINPUT. 1516 LOCFIELD].HH.LH;CURINPUT.LOCFIELD:=MEM[CURINPUT.LOCFIELD].HH.RH; 1517 IF T>=4095 THEN BEGIN CURCS:=T-4095;CURCMD:=EQTB[CURCS].HH.B0; 1518 CURCHR:=EQTB[CURCS].HH.RH; 1519 IF CURCMD>=113 THEN IF CURCMD=116 THEN{358:}BEGIN CURCS:=MEM[CURINPUT. 1520 LOCFIELD].HH.LH-4095;CURINPUT.LOCFIELD:=0;CURCMD:=EQTB[CURCS].HH.B0; 1521 CURCHR:=EQTB[CURCS].HH.RH;IF CURCMD>100 THEN BEGIN CURCMD:=0; 1522 CURCHR:=257;END;END{:358}ELSE CHECKOUTERVALIDITY; 1523 END ELSE BEGIN CURCMD:=T DIV 256;CURCHR:=T MOD 256; 1524 CASE CURCMD OF 1:ALIGNSTATE:=ALIGNSTATE+1;2:ALIGNSTATE:=ALIGNSTATE-1; 1525 5:{359:}BEGIN BEGINTOKENLIST(PARAMSTACK[CURINPUT.LIMITFIELD+CURCHR-1],0) 1526 ;GOTO 20;END{:359};ELSE END;END;END ELSE BEGIN ENDTOKENLIST;GOTO 20; 1527 END{:357}; 1528 {342:}IF CURCMD<=5 THEN IF CURCMD>=4 THEN IF ALIGNSTATE=0 THEN{789:} 1529 BEGIN IF(SCANNERSTATUS=4)OR(CURALIGN=0)THEN FATALERROR(595); 1530 CURCMD:=MEM[CURALIGN+5].HH.LH;MEM[CURALIGN+5].HH.LH:=CURCHR; 1531 IF CURCMD=63 THEN BEGINTOKENLIST(29990,2)ELSE BEGINTOKENLIST(MEM[ 1532 CURALIGN+2].INT,2);ALIGNSTATE:=1000000;GOTO 20;END{:789}{:342};10:END; 1533 {:341}{363:}PROCEDURE FIRMUPTHELINE;VAR K:0..BUFSIZE; 1534 BEGIN CURINPUT.LIMITFIELD:=LAST; 1535 IF EQTB[5291].INT>0 THEN IF INTERACTION>1 THEN BEGIN;PRINTLN; 1536 IF CURINPUT.STARTFIELD<CURINPUT.LIMITFIELD THEN FOR K:=CURINPUT. 1537 STARTFIELD TO CURINPUT.LIMITFIELD-1 DO PRINT(BUFFER[K]); 1538 FIRST:=CURINPUT.LIMITFIELD;BEGIN;PRINT(618);TERMINPUT;END; 1539 IF LAST>FIRST THEN BEGIN FOR K:=FIRST TO LAST-1 DO BUFFER[K+CURINPUT. 1540 STARTFIELD-FIRST]:=BUFFER[K]; 1541 CURINPUT.LIMITFIELD:=CURINPUT.STARTFIELD+LAST-FIRST;END;END;END; 1542 {:363}{365:}PROCEDURE GETTOKEN;BEGIN NONEWCONTROLSEQUENCE:=FALSE; 1543 GETNEXT;NONEWCONTROLSEQUENCE:=TRUE; 1544 IF CURCS=0 THEN CURTOK:=(CURCMD*256)+CURCHR ELSE CURTOK:=4095+CURCS;END; 1545 {:365}{366:}{389:}PROCEDURE MACROCALL;LABEL 10,22,30,31,40; 1546 VAR R:HALFWORD;P:HALFWORD;Q:HALFWORD;S:HALFWORD;T:HALFWORD;U,V:HALFWORD; 1547 RBRACEPTR:HALFWORD;N:SMALLNUMBER;UNBALANCE:HALFWORD;M:HALFWORD; 1548 REFCOUNT:HALFWORD;SAVESCANNERSTATUS:SMALLNUMBER; 1549 SAVEWARNINGINDEX:HALFWORD;MATCHCHR:ASCIICODE; 1550 BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS;SAVEWARNINGINDEX:=WARNINGINDEX; 1551 WARNINGINDEX:=CURCS;REFCOUNT:=CURCHR;R:=MEM[REFCOUNT].HH.RH;N:=0; 1552 IF EQTB[5293].INT>0 THEN{401:}BEGIN BEGINDIAGNOSTIC;PRINTLN; 1553 PRINTCS(WARNINGINDEX);TOKENSHOW(REFCOUNT);ENDDIAGNOSTIC(FALSE); 1554 END{:401};IF MEM[R].HH.LH<>3584 THEN{391:}BEGIN SCANNERSTATUS:=3; 1555 UNBALANCE:=0;LONGSTATE:=EQTB[CURCS].HH.B0; 1556 IF LONGSTATE>=113 THEN LONGSTATE:=LONGSTATE-2; 1557 REPEAT MEM[29997].HH.RH:=0; 1558 IF(MEM[R].HH.LH>3583)OR(MEM[R].HH.LH<3328)THEN S:=0 ELSE BEGIN MATCHCHR 1559 :=MEM[R].HH.LH-3328;S:=MEM[R].HH.RH;R:=S;P:=29997;M:=0;END; 1560 {392:}22:GETTOKEN; 1561 IF CURTOK=MEM[R].HH.LH THEN{394:}BEGIN R:=MEM[R].HH.RH; 1562 IF(MEM[R].HH.LH>=3328)AND(MEM[R].HH.LH<=3584)THEN BEGIN IF CURTOK<512 1563 THEN ALIGNSTATE:=ALIGNSTATE-1;GOTO 40;END ELSE GOTO 22;END{:394}; 1564 {397:}IF S<>R THEN IF S=0 THEN{398:}BEGIN BEGIN IF INTERACTION=3 THEN; 1565 PRINTNL(262);PRINT(650);END;SPRINTCS(WARNINGINDEX);PRINT(651); 1566 BEGIN HELPPTR:=4;HELPLINE[3]:=652;HELPLINE[2]:=653;HELPLINE[1]:=654; 1567 HELPLINE[0]:=655;END;ERROR;GOTO 10;END{:398}ELSE BEGIN T:=S; 1568 REPEAT BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=MEM[T].HH.LH; 1569 P:=Q;END;M:=M+1;U:=MEM[T].HH.RH;V:=S; 1570 WHILE TRUE DO BEGIN IF U=R THEN IF CURTOK<>MEM[V].HH.LH THEN GOTO 30 1571 ELSE BEGIN R:=MEM[V].HH.RH;GOTO 22;END; 1572 IF MEM[U].HH.LH<>MEM[V].HH.LH THEN GOTO 30;U:=MEM[U].HH.RH; 1573 V:=MEM[V].HH.RH;END;30:T:=MEM[T].HH.RH;UNTIL T=R;R:=S;END{:397}; 1574 IF CURTOK=PARTOKEN THEN IF LONGSTATE<>112 THEN{396:}BEGIN IF LONGSTATE= 1575 111 THEN BEGIN RUNAWAY;BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 1576 PRINT(645);END;SPRINTCS(WARNINGINDEX);PRINT(646);BEGIN HELPPTR:=3; 1577 HELPLINE[2]:=647;HELPLINE[1]:=648;HELPLINE[0]:=649;END;BACKERROR;END; 1578 PSTACK[N]:=MEM[29997].HH.RH;ALIGNSTATE:=ALIGNSTATE-UNBALANCE; 1579 FOR M:=0 TO N DO FLUSHLIST(PSTACK[M]);GOTO 10;END{:396}; 1580 IF CURTOK<768 THEN IF CURTOK<512 THEN{399:}BEGIN UNBALANCE:=1; 1581 WHILE TRUE DO BEGIN BEGIN BEGIN Q:=AVAIL; 1582 IF Q=0 THEN Q:=GETAVAIL ELSE BEGIN AVAIL:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0; 1583 {DYNUSED:=DYNUSED+1;}END;END;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q; 1584 END;GETTOKEN; 1585 IF CURTOK=PARTOKEN THEN IF LONGSTATE<>112 THEN{396:}BEGIN IF LONGSTATE= 1586 111 THEN BEGIN RUNAWAY;BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 1587 PRINT(645);END;SPRINTCS(WARNINGINDEX);PRINT(646);BEGIN HELPPTR:=3; 1588 HELPLINE[2]:=647;HELPLINE[1]:=648;HELPLINE[0]:=649;END;BACKERROR;END; 1589 PSTACK[N]:=MEM[29997].HH.RH;ALIGNSTATE:=ALIGNSTATE-UNBALANCE; 1590 FOR M:=0 TO N DO FLUSHLIST(PSTACK[M]);GOTO 10;END{:396}; 1591 IF CURTOK<768 THEN IF CURTOK<512 THEN UNBALANCE:=UNBALANCE+1 ELSE BEGIN 1592 UNBALANCE:=UNBALANCE-1;IF UNBALANCE=0 THEN GOTO 31;END;END; 1593 31:RBRACEPTR:=P;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK; 1594 P:=Q;END;END{:399}ELSE{395:}BEGIN BACKINPUT;BEGIN IF INTERACTION=3 THEN; 1595 PRINTNL(262);PRINT(637);END;SPRINTCS(WARNINGINDEX);PRINT(638); 1596 BEGIN HELPPTR:=6;HELPLINE[5]:=639;HELPLINE[4]:=640;HELPLINE[3]:=641; 1597 HELPLINE[2]:=642;HELPLINE[1]:=643;HELPLINE[0]:=644;END; 1598 ALIGNSTATE:=ALIGNSTATE+1;LONGSTATE:=111;CURTOK:=PARTOKEN;INSERROR; 1599 GOTO 22; 1600 END{:395}ELSE{393:}BEGIN IF CURTOK=2592 THEN IF MEM[R].HH.LH<=3584 THEN 1601 IF MEM[R].HH.LH>=3328 THEN GOTO 22;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; 1602 MEM[Q].HH.LH:=CURTOK;P:=Q;END;END{:393};M:=M+1; 1603 IF MEM[R].HH.LH>3584 THEN GOTO 22;IF MEM[R].HH.LH<3328 THEN GOTO 22; 1604 40:IF S<>0 THEN{400:}BEGIN IF(M=1)AND(MEM[P].HH.LH<768)THEN BEGIN MEM[ 1605 RBRACEPTR].HH.RH:=0;BEGIN MEM[P].HH.RH:=AVAIL;AVAIL:=P; 1606 {DYNUSED:=DYNUSED-1;}END;P:=MEM[29997].HH.RH;PSTACK[N]:=MEM[P].HH.RH; 1607 BEGIN MEM[P].HH.RH:=AVAIL;AVAIL:=P;{DYNUSED:=DYNUSED-1;}END; 1608 END ELSE PSTACK[N]:=MEM[29997].HH.RH;N:=N+1; 1609 IF EQTB[5293].INT>0 THEN BEGIN BEGINDIAGNOSTIC;PRINTNL(MATCHCHR); 1610 PRINTINT(N);PRINT(656);SHOWTOKENLIST(PSTACK[N-1],0,1000); 1611 ENDDIAGNOSTIC(FALSE);END;END{:400}{:392};UNTIL MEM[R].HH.LH=3584; 1612 END{:391}; 1613 {390:}WHILE(CURINPUT.STATEFIELD=0)AND(CURINPUT.LOCFIELD=0)AND(CURINPUT. 1614 INDEXFIELD<>2)DO ENDTOKENLIST;BEGINTOKENLIST(REFCOUNT,5); 1615 CURINPUT.NAMEFIELD:=WARNINGINDEX;CURINPUT.LOCFIELD:=MEM[R].HH.RH; 1616 IF N>0 THEN BEGIN IF PARAMPTR+N>MAXPARAMSTACK THEN BEGIN MAXPARAMSTACK:= 1617 PARAMPTR+N;IF MAXPARAMSTACK>PARAMSIZE THEN OVERFLOW(636,PARAMSIZE);END; 1618 FOR M:=0 TO N-1 DO PARAMSTACK[PARAMPTR+M]:=PSTACK[M]; 1619 PARAMPTR:=PARAMPTR+N;END{:390};10:SCANNERSTATUS:=SAVESCANNERSTATUS; 1620 WARNINGINDEX:=SAVEWARNINGINDEX;END;{:389}{379:}PROCEDURE INSERTRELAX; 1621 BEGIN CURTOK:=4095+CURCS;BACKINPUT;CURTOK:=6716;BACKINPUT; 1622 CURINPUT.INDEXFIELD:=4;END;{:379}PROCEDURE PASSTEXT;FORWARD; 1623 PROCEDURE STARTINPUT;FORWARD;PROCEDURE CONDITIONAL;FORWARD; 1624 PROCEDURE GETXTOKEN;FORWARD;PROCEDURE CONVTOKS;FORWARD; 1625 PROCEDURE INSTHETOKS;FORWARD;PROCEDURE EXPAND;VAR T:HALFWORD; 1626 P,Q,R:HALFWORD;J:0..BUFSIZE;CVBACKUP:INTEGER; 1627 CVLBACKUP,RADIXBACKUP,COBACKUP:SMALLNUMBER;BACKUPBACKUP:HALFWORD; 1628 SAVESCANNERSTATUS:SMALLNUMBER;BEGIN CVBACKUP:=CURVAL; 1629 CVLBACKUP:=CURVALLEVEL;RADIXBACKUP:=RADIX;COBACKUP:=CURORDER; 1630 BACKUPBACKUP:=MEM[29987].HH.RH; 1631 IF CURCMD<111 THEN{367:}BEGIN IF EQTB[5299].INT>1 THEN SHOWCURCMDCHR; 1632 CASE CURCMD OF 110:{386:}BEGIN IF CURMARK[CURCHR]<>0 THEN BEGINTOKENLIST 1633 (CURMARK[CURCHR],14);END{:386};102:{368:}BEGIN GETTOKEN;T:=CURTOK; 1634 GETTOKEN;IF CURCMD>100 THEN EXPAND ELSE BACKINPUT;CURTOK:=T;BACKINPUT; 1635 END{:368};103:{369:}BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS; 1636 SCANNERSTATUS:=0;GETTOKEN;SCANNERSTATUS:=SAVESCANNERSTATUS;T:=CURTOK; 1637 BACKINPUT;IF T>=4095 THEN BEGIN P:=GETAVAIL;MEM[P].HH.LH:=6718; 1638 MEM[P].HH.RH:=CURINPUT.LOCFIELD;CURINPUT.STARTFIELD:=P; 1639 CURINPUT.LOCFIELD:=P;END;END{:369};107:{372:}BEGIN R:=GETAVAIL;P:=R; 1640 REPEAT GETXTOKEN;IF CURCS=0 THEN BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; 1641 MEM[Q].HH.LH:=CURTOK;P:=Q;END;UNTIL CURCS<>0; 1642 IF CURCMD<>67 THEN{373:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 1643 PRINT(625);END;PRINTESC(505);PRINT(626);BEGIN HELPPTR:=2; 1644 HELPLINE[1]:=627;HELPLINE[0]:=628;END;BACKERROR;END{:373}; 1645 {374:}J:=FIRST;P:=MEM[R].HH.RH; 1646 WHILE P<>0 DO BEGIN IF J>=MAXBUFSTACK THEN BEGIN MAXBUFSTACK:=J+1; 1647 IF MAXBUFSTACK=BUFSIZE THEN OVERFLOW(256,BUFSIZE);END; 1648 BUFFER[J]:=MEM[P].HH.LH MOD 256;J:=J+1;P:=MEM[P].HH.RH;END; 1649 IF J>FIRST+1 THEN BEGIN NONEWCONTROLSEQUENCE:=FALSE; 1650 CURCS:=IDLOOKUP(FIRST,J-FIRST);NONEWCONTROLSEQUENCE:=TRUE; 1651 END ELSE IF J=FIRST THEN CURCS:=513 ELSE CURCS:=257+BUFFER[FIRST]{:374}; 1652 FLUSHLIST(R);IF EQTB[CURCS].HH.B0=101 THEN BEGIN EQDEFINE(CURCS,0,256); 1653 END;CURTOK:=CURCS+4095;BACKINPUT;END{:372};108:CONVTOKS;109:INSTHETOKS; 1654 105:CONDITIONAL; 1655 106:{510:}IF CURCHR>IFLIMIT THEN IF IFLIMIT=1 THEN INSERTRELAX ELSE 1656 BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(777);END; 1657 PRINTCMDCHR(106,CURCHR);BEGIN HELPPTR:=1;HELPLINE[0]:=778;END;ERROR; 1658 END ELSE BEGIN WHILE CURCHR<>2 DO PASSTEXT;{496:}BEGIN P:=CONDPTR; 1659 IFLINE:=MEM[P+1].INT;CURIF:=MEM[P].HH.B1;IFLIMIT:=MEM[P].HH.B0; 1660 CONDPTR:=MEM[P].HH.RH;FREENODE(P,2);END{:496};END{:510}; 1661 104:{378:}IF CURCHR>0 THEN FORCEEOF:=TRUE ELSE IF NAMEINPROGRESS THEN 1662 INSERTRELAX ELSE STARTINPUT{:378}; 1663 ELSE{370:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(619);END; 1664 BEGIN HELPPTR:=5;HELPLINE[4]:=620;HELPLINE[3]:=621;HELPLINE[2]:=622; 1665 HELPLINE[1]:=623;HELPLINE[0]:=624;END;ERROR;END{:370}END; 1666 END{:367}ELSE IF CURCMD<115 THEN MACROCALL ELSE{375:}BEGIN CURTOK:=6715; 1667 BACKINPUT;END{:375};CURVAL:=CVBACKUP;CURVALLEVEL:=CVLBACKUP; 1668 RADIX:=RADIXBACKUP;CURORDER:=COBACKUP;MEM[29987].HH.RH:=BACKUPBACKUP; 1669 END;{:366}{380:}PROCEDURE GETXTOKEN;LABEL 20,30;BEGIN 20:GETNEXT; 1670 IF CURCMD<=100 THEN GOTO 30; 1671 IF CURCMD>=111 THEN IF CURCMD<115 THEN MACROCALL ELSE BEGIN CURCS:=2620; 1672 CURCMD:=9;GOTO 30;END ELSE EXPAND;GOTO 20; 1673 30:IF CURCS=0 THEN CURTOK:=(CURCMD*256)+CURCHR ELSE CURTOK:=4095+CURCS; 1674 END;{:380}{381:}PROCEDURE XTOKEN;BEGIN WHILE CURCMD>100 DO BEGIN EXPAND; 1675 GETNEXT;END; 1676 IF CURCS=0 THEN CURTOK:=(CURCMD*256)+CURCHR ELSE CURTOK:=4095+CURCS;END; 1677 {:381}{403:}PROCEDURE SCANLEFTBRACE;BEGIN{404:}REPEAT GETXTOKEN; 1678 UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; 1679 IF CURCMD<>1 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 1680 PRINT(657);END;BEGIN HELPPTR:=4;HELPLINE[3]:=658;HELPLINE[2]:=659; 1681 HELPLINE[1]:=660;HELPLINE[0]:=661;END;BACKERROR;CURTOK:=379;CURCMD:=1; 1682 CURCHR:=123;ALIGNSTATE:=ALIGNSTATE+1;END;END; 1683 {:403}{405:}PROCEDURE SCANOPTIONALEQUALS;BEGIN{406:}REPEAT GETXTOKEN; 1684 UNTIL CURCMD<>10{:406};IF CURTOK<>3133 THEN BACKINPUT;END; 1685 {:405}{407:}FUNCTION SCANKEYWORD(S:STRNUMBER):BOOLEAN;LABEL 10; 1686 VAR P:HALFWORD;Q:HALFWORD;K:POOLPOINTER;BEGIN P:=29987;MEM[P].HH.RH:=0; 1687 K:=STRSTART[S];WHILE K<STRSTART[S+1]DO BEGIN GETXTOKEN; 1688 IF(CURCS=0)AND((CURCHR=STRPOOL[K])OR(CURCHR=STRPOOL[K]-32))THEN BEGIN 1689 BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END;K:=K+1; 1690 END ELSE IF(CURCMD<>10)OR(P<>29987)THEN BEGIN BACKINPUT; 1691 IF P<>29987 THEN BEGINTOKENLIST(MEM[29987].HH.RH,3);SCANKEYWORD:=FALSE; 1692 GOTO 10;END;END;FLUSHLIST(MEM[29987].HH.RH);SCANKEYWORD:=TRUE;10:END; 1693 {:407}{408:}PROCEDURE MUERROR;BEGIN BEGIN IF INTERACTION=3 THEN; 1694 PRINTNL(262);PRINT(662);END;BEGIN HELPPTR:=1;HELPLINE[0]:=663;END;ERROR; 1695 END;{:408}{409:}PROCEDURE SCANINT;FORWARD; 1696 {433:}PROCEDURE SCANEIGHTBITINT;BEGIN SCANINT; 1697 IF(CURVAL<0)OR(CURVAL>255)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 1698 PRINTNL(262);PRINT(687);END;BEGIN HELPPTR:=2;HELPLINE[1]:=688; 1699 HELPLINE[0]:=689;END;INTERROR(CURVAL);CURVAL:=0;END;END; 1700 {:433}{434:}PROCEDURE SCANCHARNUM;BEGIN SCANINT; 1701 IF(CURVAL<0)OR(CURVAL>255)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 1702 PRINTNL(262);PRINT(690);END;BEGIN HELPPTR:=2;HELPLINE[1]:=691; 1703 HELPLINE[0]:=689;END;INTERROR(CURVAL);CURVAL:=0;END;END; 1704 {:434}{435:}PROCEDURE SCANFOURBITINT;BEGIN SCANINT; 1705 IF(CURVAL<0)OR(CURVAL>15)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 1706 PRINTNL(262);PRINT(692);END;BEGIN HELPPTR:=2;HELPLINE[1]:=693; 1707 HELPLINE[0]:=689;END;INTERROR(CURVAL);CURVAL:=0;END;END; 1708 {:435}{436:}PROCEDURE SCANFIFTEENBITINT;BEGIN SCANINT; 1709 IF(CURVAL<0)OR(CURVAL>32767)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 1710 PRINTNL(262);PRINT(694);END;BEGIN HELPPTR:=2;HELPLINE[1]:=695; 1711 HELPLINE[0]:=689;END;INTERROR(CURVAL);CURVAL:=0;END;END; 1712 {:436}{437:}PROCEDURE SCANTWENTYSEVENBITINT;BEGIN SCANINT; 1713 IF(CURVAL<0)OR(CURVAL>134217727)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 1714 PRINTNL(262);PRINT(696);END;BEGIN HELPPTR:=2;HELPLINE[1]:=697; 1715 HELPLINE[0]:=689;END;INTERROR(CURVAL);CURVAL:=0;END;END; 1716 {:437}{577:}PROCEDURE SCANFONTIDENT;VAR F:INTERNALFONTNUMBER;M:HALFWORD; 1717 BEGIN{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; 1718 IF CURCMD=88 THEN F:=EQTB[3934].HH.RH ELSE IF CURCMD=87 THEN F:=CURCHR 1719 ELSE IF CURCMD=86 THEN BEGIN M:=CURCHR;SCANFOURBITINT; 1720 F:=EQTB[M+CURVAL].HH.RH;END ELSE BEGIN BEGIN IF INTERACTION=3 THEN; 1721 PRINTNL(262);PRINT(817);END;BEGIN HELPPTR:=2;HELPLINE[1]:=818; 1722 HELPLINE[0]:=819;END;BACKERROR;F:=0;END;CURVAL:=F;END; 1723 {:577}{578:}PROCEDURE FINDFONTDIMEN(WRITING:BOOLEAN); 1724 VAR F:INTERNALFONTNUMBER;N:INTEGER;BEGIN SCANINT;N:=CURVAL; 1725 SCANFONTIDENT;F:=CURVAL; 1726 IF N<=0 THEN CURVAL:=FMEMPTR ELSE BEGIN IF WRITING AND(N<=4)AND(N>=2)AND 1727 (FONTGLUE[F]<>0)THEN BEGIN DELETEGLUEREF(FONTGLUE[F]);FONTGLUE[F]:=0; 1728 END; 1729 IF N>FONTPARAMS[F]THEN IF F<FONTPTR THEN CURVAL:=FMEMPTR ELSE{580:}BEGIN 1730 REPEAT IF FMEMPTR=FONTMEMSIZE THEN OVERFLOW(824,FONTMEMSIZE); 1731 FONTINFO[FMEMPTR].INT:=0;FMEMPTR:=FMEMPTR+1; 1732 FONTPARAMS[F]:=FONTPARAMS[F]+1;UNTIL N=FONTPARAMS[F];CURVAL:=FMEMPTR-1; 1733 END{:580}ELSE CURVAL:=N+PARAMBASE[F];END; 1734 {579:}IF CURVAL=FMEMPTR THEN BEGIN BEGIN IF INTERACTION=3 THEN; 1735 PRINTNL(262);PRINT(802);END;PRINTESC(HASH[2624+F].RH);PRINT(820); 1736 PRINTINT(FONTPARAMS[F]);PRINT(821);BEGIN HELPPTR:=2;HELPLINE[1]:=822; 1737 HELPLINE[0]:=823;END;ERROR;END{:579};END; 1738 {:578}{:409}{413:}PROCEDURE SCANSOMETHINGINTERNAL(LEVEL:SMALLNUMBER; 1739 NEGATIVE:BOOLEAN);VAR M:HALFWORD;P:0..NESTSIZE;BEGIN M:=CURCHR; 1740 CASE CURCMD OF 85:{414:}BEGIN SCANCHARNUM; 1741 IF M=5007 THEN BEGIN CURVAL:=EQTB[5007+CURVAL].HH.RH-0;CURVALLEVEL:=0; 1742 END ELSE IF M<5007 THEN BEGIN CURVAL:=EQTB[M+CURVAL].HH.RH; 1743 CURVALLEVEL:=0;END ELSE BEGIN CURVAL:=EQTB[M+CURVAL].INT;CURVALLEVEL:=0; 1744 END;END{:414}; 1745 71,72,86,87,88:{415:}IF LEVEL<>5 THEN BEGIN BEGIN IF INTERACTION=3 THEN; 1746 PRINTNL(262);PRINT(664);END;BEGIN HELPPTR:=3;HELPLINE[2]:=665; 1747 HELPLINE[1]:=666;HELPLINE[0]:=667;END;BACKERROR;BEGIN CURVAL:=0; 1748 CURVALLEVEL:=1;END; 1749 END ELSE IF CURCMD<=72 THEN BEGIN IF CURCMD<72 THEN BEGIN 1750 SCANEIGHTBITINT;M:=3422+CURVAL;END;BEGIN CURVAL:=EQTB[M].HH.RH; 1751 CURVALLEVEL:=5;END;END ELSE BEGIN BACKINPUT;SCANFONTIDENT; 1752 BEGIN CURVAL:=2624+CURVAL;CURVALLEVEL:=4;END;END{:415}; 1753 73:BEGIN CURVAL:=EQTB[M].INT;CURVALLEVEL:=0;END; 1754 74:BEGIN CURVAL:=EQTB[M].INT;CURVALLEVEL:=1;END; 1755 75:BEGIN CURVAL:=EQTB[M].HH.RH;CURVALLEVEL:=2;END; 1756 76:BEGIN CURVAL:=EQTB[M].HH.RH;CURVALLEVEL:=3;END; 1757 79:{418:}IF ABS(CURLIST.MODEFIELD)<>M THEN BEGIN BEGIN IF INTERACTION=3 1758 THEN;PRINTNL(262);PRINT(680);END;PRINTCMDCHR(79,M);BEGIN HELPPTR:=4; 1759 HELPLINE[3]:=681;HELPLINE[2]:=682;HELPLINE[1]:=683;HELPLINE[0]:=684;END; 1760 ERROR;IF LEVEL<>5 THEN BEGIN CURVAL:=0;CURVALLEVEL:=1; 1761 END ELSE BEGIN CURVAL:=0;CURVALLEVEL:=0;END; 1762 END ELSE IF M=1 THEN BEGIN CURVAL:=CURLIST.AUXFIELD.INT;CURVALLEVEL:=1; 1763 END ELSE BEGIN CURVAL:=CURLIST.AUXFIELD.HH.LH;CURVALLEVEL:=0;END{:418}; 1764 80:{422:}IF CURLIST.MODEFIELD=0 THEN BEGIN CURVAL:=0;CURVALLEVEL:=0; 1765 END ELSE BEGIN NEST[NESTPTR]:=CURLIST;P:=NESTPTR; 1766 WHILE ABS(NEST[P].MODEFIELD)<>1 DO P:=P-1;BEGIN CURVAL:=NEST[P].PGFIELD; 1767 CURVALLEVEL:=0;END;END{:422}; 1768 82:{419:}BEGIN IF M=0 THEN CURVAL:=DEADCYCLES ELSE CURVAL:= 1769 INSERTPENALTIES;CURVALLEVEL:=0;END{:419}; 1770 81:{421:}BEGIN IF(PAGECONTENTS=0)AND(NOT OUTPUTACTIVE)THEN IF M=0 THEN 1771 CURVAL:=1073741823 ELSE CURVAL:=0 ELSE CURVAL:=PAGESOFAR[M]; 1772 CURVALLEVEL:=1;END{:421}; 1773 84:{423:}BEGIN IF EQTB[3412].HH.RH=0 THEN CURVAL:=0 ELSE CURVAL:=MEM[ 1774 EQTB[3412].HH.RH].HH.LH;CURVALLEVEL:=0;END{:423}; 1775 83:{420:}BEGIN SCANEIGHTBITINT; 1776 IF EQTB[3678+CURVAL].HH.RH=0 THEN CURVAL:=0 ELSE CURVAL:=MEM[EQTB[3678+ 1777 CURVAL].HH.RH+M].INT;CURVALLEVEL:=1;END{:420}; 1778 68,69:BEGIN CURVAL:=CURCHR;CURVALLEVEL:=0;END; 1779 77:{425:}BEGIN FINDFONTDIMEN(FALSE);FONTINFO[FMEMPTR].INT:=0; 1780 BEGIN CURVAL:=FONTINFO[CURVAL].INT;CURVALLEVEL:=1;END;END{:425}; 1781 78:{426:}BEGIN SCANFONTIDENT; 1782 IF M=0 THEN BEGIN CURVAL:=HYPHENCHAR[CURVAL];CURVALLEVEL:=0; 1783 END ELSE BEGIN CURVAL:=SKEWCHAR[CURVAL];CURVALLEVEL:=0;END;END{:426}; 1784 89:{427:}BEGIN SCANEIGHTBITINT; 1785 CASE M OF 0:CURVAL:=EQTB[5318+CURVAL].INT; 1786 1:CURVAL:=EQTB[5851+CURVAL].INT;2:CURVAL:=EQTB[2900+CURVAL].HH.RH; 1787 3:CURVAL:=EQTB[3156+CURVAL].HH.RH;END;CURVALLEVEL:=M;END{:427}; 1788 70:{424:}IF CURCHR>2 THEN BEGIN IF CURCHR=3 THEN CURVAL:=LINE ELSE 1789 CURVAL:=LASTBADNESS;CURVALLEVEL:=0; 1790 END ELSE BEGIN IF CURCHR=2 THEN CURVAL:=0 ELSE CURVAL:=0; 1791 CURVALLEVEL:=CURCHR; 1792 IF NOT(CURLIST.TAILFIELD>=HIMEMMIN)AND(CURLIST.MODEFIELD<>0)THEN CASE 1793 CURCHR OF 0:IF MEM[CURLIST.TAILFIELD].HH.B0=12 THEN CURVAL:=MEM[CURLIST. 1794 TAILFIELD+1].INT; 1795 1:IF MEM[CURLIST.TAILFIELD].HH.B0=11 THEN CURVAL:=MEM[CURLIST.TAILFIELD 1796 +1].INT; 1797 2:IF MEM[CURLIST.TAILFIELD].HH.B0=10 THEN BEGIN CURVAL:=MEM[CURLIST. 1798 TAILFIELD+1].HH.LH; 1799 IF MEM[CURLIST.TAILFIELD].HH.B1=99 THEN CURVALLEVEL:=3;END; 1800 END ELSE IF(CURLIST.MODEFIELD=1)AND(CURLIST.TAILFIELD=CURLIST.HEADFIELD) 1801 THEN CASE CURCHR OF 0:CURVAL:=LASTPENALTY;1:CURVAL:=LASTKERN; 1802 2:IF LASTGLUE<>65535 THEN CURVAL:=LASTGLUE;END;END{:424}; 1803 ELSE{428:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(685);END; 1804 PRINTCMDCHR(CURCMD,CURCHR);PRINT(686);PRINTESC(537);BEGIN HELPPTR:=1; 1805 HELPLINE[0]:=684;END;ERROR;IF LEVEL<>5 THEN BEGIN CURVAL:=0; 1806 CURVALLEVEL:=1;END ELSE BEGIN CURVAL:=0;CURVALLEVEL:=0;END;END{:428}END; 1807 WHILE CURVALLEVEL>LEVEL DO{429:}BEGIN IF CURVALLEVEL=2 THEN CURVAL:=MEM[ 1808 CURVAL+1].INT ELSE IF CURVALLEVEL=3 THEN MUERROR; 1809 CURVALLEVEL:=CURVALLEVEL-1;END{:429}; 1810 {430:}IF NEGATIVE THEN IF CURVALLEVEL>=2 THEN BEGIN CURVAL:=NEWSPEC( 1811 CURVAL);{431:}BEGIN MEM[CURVAL+1].INT:=-MEM[CURVAL+1].INT; 1812 MEM[CURVAL+2].INT:=-MEM[CURVAL+2].INT; 1813 MEM[CURVAL+3].INT:=-MEM[CURVAL+3].INT;END{:431}; 1814 END ELSE CURVAL:=-CURVAL ELSE IF(CURVALLEVEL>=2)AND(CURVALLEVEL<=3)THEN 1815 MEM[CURVAL].HH.RH:=MEM[CURVAL].HH.RH+1{:430};END; 1816 {:413}{440:}PROCEDURE SCANINT;LABEL 30;VAR NEGATIVE:BOOLEAN;M:INTEGER; 1817 D:SMALLNUMBER;VACUOUS:BOOLEAN;OKSOFAR:BOOLEAN;BEGIN RADIX:=0; 1818 OKSOFAR:=TRUE;{441:}NEGATIVE:=FALSE;REPEAT{406:}REPEAT GETXTOKEN; 1819 UNTIL CURCMD<>10{:406};IF CURTOK=3117 THEN BEGIN NEGATIVE:=NOT NEGATIVE; 1820 CURTOK:=3115;END;UNTIL CURTOK<>3115{:441}; 1821 IF CURTOK=3168 THEN{442:}BEGIN GETTOKEN; 1822 IF CURTOK<4095 THEN BEGIN CURVAL:=CURCHR; 1823 IF CURCMD<=2 THEN IF CURCMD=2 THEN ALIGNSTATE:=ALIGNSTATE+1 ELSE 1824 ALIGNSTATE:=ALIGNSTATE-1; 1825 END ELSE IF CURTOK<4352 THEN CURVAL:=CURTOK-4096 ELSE CURVAL:=CURTOK 1826 -4352;IF CURVAL>255 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 1827 PRINT(698);END;BEGIN HELPPTR:=2;HELPLINE[1]:=699;HELPLINE[0]:=700;END; 1828 CURVAL:=48;BACKERROR;END ELSE{443:}BEGIN GETXTOKEN; 1829 IF CURCMD<>10 THEN BACKINPUT;END{:443}; 1830 END{:442}ELSE IF(CURCMD>=68)AND(CURCMD<=89)THEN SCANSOMETHINGINTERNAL(0, 1831 FALSE)ELSE{444:}BEGIN RADIX:=10;M:=214748364; 1832 IF CURTOK=3111 THEN BEGIN RADIX:=8;M:=268435456;GETXTOKEN; 1833 END ELSE IF CURTOK=3106 THEN BEGIN RADIX:=16;M:=134217728;GETXTOKEN;END; 1834 VACUOUS:=TRUE;CURVAL:=0; 1835 {445:}WHILE TRUE DO BEGIN IF(CURTOK<3120+RADIX)AND(CURTOK>=3120)AND( 1836 CURTOK<=3129)THEN D:=CURTOK-3120 ELSE IF RADIX=16 THEN IF(CURTOK<=2886) 1837 AND(CURTOK>=2881)THEN D:=CURTOK-2871 ELSE IF(CURTOK<=3142)AND(CURTOK>= 1838 3137)THEN D:=CURTOK-3127 ELSE GOTO 30 ELSE GOTO 30;VACUOUS:=FALSE; 1839 IF(CURVAL>=M)AND((CURVAL>M)OR(D>7)OR(RADIX<>10))THEN BEGIN IF OKSOFAR 1840 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(701);END; 1841 BEGIN HELPPTR:=2;HELPLINE[1]:=702;HELPLINE[0]:=703;END;ERROR; 1842 CURVAL:=2147483647;OKSOFAR:=FALSE;END;END ELSE CURVAL:=CURVAL*RADIX+D; 1843 GETXTOKEN;END;30:{:445}; 1844 IF VACUOUS THEN{446:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 1845 PRINT(664);END;BEGIN HELPPTR:=3;HELPLINE[2]:=665;HELPLINE[1]:=666; 1846 HELPLINE[0]:=667;END;BACKERROR; 1847 END{:446}ELSE IF CURCMD<>10 THEN BACKINPUT;END{:444}; 1848 IF NEGATIVE THEN CURVAL:=-CURVAL;END; 1849 {:440}{448:}PROCEDURE SCANDIMEN(MU,INF,SHORTCUT:BOOLEAN); 1850 LABEL 30,31,32,40,45,88,89;VAR NEGATIVE:BOOLEAN;F:INTEGER; 1851 {450:}NUM,DENOM:1..65536;K,KK:SMALLNUMBER;P,Q:HALFWORD;V:SCALED; 1852 SAVECURVAL:INTEGER;{:450}BEGIN F:=0;ARITHERROR:=FALSE;CURORDER:=0; 1853 NEGATIVE:=FALSE;IF NOT SHORTCUT THEN BEGIN{441:}NEGATIVE:=FALSE; 1854 REPEAT{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; 1855 IF CURTOK=3117 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURTOK:=3115;END; 1856 UNTIL CURTOK<>3115{:441}; 1857 IF(CURCMD>=68)AND(CURCMD<=89)THEN{449:}IF MU THEN BEGIN 1858 SCANSOMETHINGINTERNAL(3,FALSE); 1859 {451:}IF CURVALLEVEL>=2 THEN BEGIN V:=MEM[CURVAL+1].INT; 1860 DELETEGLUEREF(CURVAL);CURVAL:=V;END{:451};IF CURVALLEVEL=3 THEN GOTO 89; 1861 IF CURVALLEVEL<>0 THEN MUERROR; 1862 END ELSE BEGIN SCANSOMETHINGINTERNAL(1,FALSE); 1863 IF CURVALLEVEL=1 THEN GOTO 89;END{:449}ELSE BEGIN BACKINPUT; 1864 IF CURTOK=3116 THEN CURTOK:=3118; 1865 IF CURTOK<>3118 THEN SCANINT ELSE BEGIN RADIX:=10;CURVAL:=0;END; 1866 IF CURTOK=3116 THEN CURTOK:=3118; 1867 IF(RADIX=10)AND(CURTOK=3118)THEN{452:}BEGIN K:=0;P:=0;GETTOKEN; 1868 WHILE TRUE DO BEGIN GETXTOKEN; 1869 IF(CURTOK>3129)OR(CURTOK<3120)THEN GOTO 31; 1870 IF K<17 THEN BEGIN Q:=GETAVAIL;MEM[Q].HH.RH:=P; 1871 MEM[Q].HH.LH:=CURTOK-3120;P:=Q;K:=K+1;END;END; 1872 31:FOR KK:=K DOWNTO 1 DO BEGIN DIG[KK-1]:=MEM[P].HH.LH;Q:=P; 1873 P:=MEM[P].HH.RH;BEGIN MEM[Q].HH.RH:=AVAIL;AVAIL:=Q;{DYNUSED:=DYNUSED-1;} 1874 END;END;F:=ROUNDDECIMALS(K);IF CURCMD<>10 THEN BACKINPUT;END{:452};END; 1875 END;IF CURVAL<0 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURVAL:=-CURVAL;END; 1876 {453:}IF INF THEN{454:}IF SCANKEYWORD(311)THEN BEGIN CURORDER:=1; 1877 WHILE SCANKEYWORD(108)DO BEGIN IF CURORDER=3 THEN BEGIN BEGIN IF 1878 INTERACTION=3 THEN;PRINTNL(262);PRINT(705);END;PRINT(706); 1879 BEGIN HELPPTR:=1;HELPLINE[0]:=707;END;ERROR; 1880 END ELSE CURORDER:=CURORDER+1;END;GOTO 88;END{:454}; 1881 {455:}SAVECURVAL:=CURVAL;{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; 1882 IF(CURCMD<68)OR(CURCMD>89)THEN BACKINPUT ELSE BEGIN IF MU THEN BEGIN 1883 SCANSOMETHINGINTERNAL(3,FALSE); 1884 {451:}IF CURVALLEVEL>=2 THEN BEGIN V:=MEM[CURVAL+1].INT; 1885 DELETEGLUEREF(CURVAL);CURVAL:=V;END{:451}; 1886 IF CURVALLEVEL<>3 THEN MUERROR;END ELSE SCANSOMETHINGINTERNAL(1,FALSE); 1887 V:=CURVAL;GOTO 40;END;IF MU THEN GOTO 45; 1888 IF SCANKEYWORD(708)THEN V:=({558:}FONTINFO[6+PARAMBASE[EQTB[3934].HH.RH] 1889 ].INT{:558})ELSE IF SCANKEYWORD(709)THEN V:=({559:}FONTINFO[5+PARAMBASE[ 1890 EQTB[3934].HH.RH]].INT{:559})ELSE GOTO 45;{443:}BEGIN GETXTOKEN; 1891 IF CURCMD<>10 THEN BACKINPUT;END{:443}; 1892 40:CURVAL:=MULTANDADD(SAVECURVAL,V,XNOVERD(V,F,65536),1073741823); 1893 GOTO 89;45:{:455}; 1894 IF MU THEN{456:}IF SCANKEYWORD(337)THEN GOTO 88 ELSE BEGIN BEGIN IF 1895 INTERACTION=3 THEN;PRINTNL(262);PRINT(705);END;PRINT(710); 1896 BEGIN HELPPTR:=4;HELPLINE[3]:=711;HELPLINE[2]:=712;HELPLINE[1]:=713; 1897 HELPLINE[0]:=714;END;ERROR;GOTO 88;END{:456}; 1898 IF SCANKEYWORD(704)THEN{457:}BEGIN PREPAREMAG; 1899 IF EQTB[5280].INT<>1000 THEN BEGIN CURVAL:=XNOVERD(CURVAL,1000,EQTB[5280 1900 ].INT);F:=(1000*F+65536*REMAINDER)DIV EQTB[5280].INT; 1901 CURVAL:=CURVAL+(F DIV 65536);F:=F MOD 65536;END;END{:457}; 1902 IF SCANKEYWORD(397)THEN GOTO 88; 1903 {458:}IF SCANKEYWORD(715)THEN BEGIN NUM:=7227;DENOM:=100; 1904 END ELSE IF SCANKEYWORD(716)THEN BEGIN NUM:=12;DENOM:=1; 1905 END ELSE IF SCANKEYWORD(717)THEN BEGIN NUM:=7227;DENOM:=254; 1906 END ELSE IF SCANKEYWORD(718)THEN BEGIN NUM:=7227;DENOM:=2540; 1907 END ELSE IF SCANKEYWORD(719)THEN BEGIN NUM:=7227;DENOM:=7200; 1908 END ELSE IF SCANKEYWORD(720)THEN BEGIN NUM:=1238;DENOM:=1157; 1909 END ELSE IF SCANKEYWORD(721)THEN BEGIN NUM:=14856;DENOM:=1157; 1910 END ELSE IF SCANKEYWORD(722)THEN GOTO 30 ELSE{459:}BEGIN BEGIN IF 1911 INTERACTION=3 THEN;PRINTNL(262);PRINT(705);END;PRINT(723); 1912 BEGIN HELPPTR:=6;HELPLINE[5]:=724;HELPLINE[4]:=725;HELPLINE[3]:=726; 1913 HELPLINE[2]:=712;HELPLINE[1]:=713;HELPLINE[0]:=714;END;ERROR;GOTO 32; 1914 END{:459};CURVAL:=XNOVERD(CURVAL,NUM,DENOM); 1915 F:=(NUM*F+65536*REMAINDER)DIV DENOM;CURVAL:=CURVAL+(F DIV 65536); 1916 F:=F MOD 65536;32:{:458}; 1917 88:IF CURVAL>=16384 THEN ARITHERROR:=TRUE ELSE CURVAL:=CURVAL*65536+F; 1918 30:{:453};{443:}BEGIN GETXTOKEN;IF CURCMD<>10 THEN BACKINPUT;END{:443}; 1919 89:IF ARITHERROR OR(ABS(CURVAL)>=1073741824)THEN{460:}BEGIN BEGIN IF 1920 INTERACTION=3 THEN;PRINTNL(262);PRINT(727);END;BEGIN HELPPTR:=2; 1921 HELPLINE[1]:=728;HELPLINE[0]:=729;END;ERROR;CURVAL:=1073741823; 1922 ARITHERROR:=FALSE;END{:460};IF NEGATIVE THEN CURVAL:=-CURVAL;END; 1923 {:448}{461:}PROCEDURE SCANGLUE(LEVEL:SMALLNUMBER);LABEL 10; 1924 VAR NEGATIVE:BOOLEAN;Q:HALFWORD;MU:BOOLEAN;BEGIN MU:=(LEVEL=3); 1925 {441:}NEGATIVE:=FALSE;REPEAT{406:}REPEAT GETXTOKEN; 1926 UNTIL CURCMD<>10{:406};IF CURTOK=3117 THEN BEGIN NEGATIVE:=NOT NEGATIVE; 1927 CURTOK:=3115;END;UNTIL CURTOK<>3115{:441}; 1928 IF(CURCMD>=68)AND(CURCMD<=89)THEN BEGIN SCANSOMETHINGINTERNAL(LEVEL, 1929 NEGATIVE); 1930 IF CURVALLEVEL>=2 THEN BEGIN IF CURVALLEVEL<>LEVEL THEN MUERROR;GOTO 10; 1931 END;IF CURVALLEVEL=0 THEN SCANDIMEN(MU,FALSE,TRUE)ELSE IF LEVEL=3 THEN 1932 MUERROR;END ELSE BEGIN BACKINPUT;SCANDIMEN(MU,FALSE,FALSE); 1933 IF NEGATIVE THEN CURVAL:=-CURVAL;END;{462:}Q:=NEWSPEC(0); 1934 MEM[Q+1].INT:=CURVAL; 1935 IF SCANKEYWORD(730)THEN BEGIN SCANDIMEN(MU,TRUE,FALSE); 1936 MEM[Q+2].INT:=CURVAL;MEM[Q].HH.B0:=CURORDER;END; 1937 IF SCANKEYWORD(731)THEN BEGIN SCANDIMEN(MU,TRUE,FALSE); 1938 MEM[Q+3].INT:=CURVAL;MEM[Q].HH.B1:=CURORDER;END;CURVAL:=Q{:462};10:END; 1939 {:461}{463:}FUNCTION SCANRULESPEC:HALFWORD;LABEL 21;VAR Q:HALFWORD; 1940 BEGIN Q:=NEWRULE; 1941 IF CURCMD=35 THEN MEM[Q+1].INT:=26214 ELSE BEGIN MEM[Q+3].INT:=26214; 1942 MEM[Q+2].INT:=0;END; 1943 21:IF SCANKEYWORD(732)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE); 1944 MEM[Q+1].INT:=CURVAL;GOTO 21;END; 1945 IF SCANKEYWORD(733)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE); 1946 MEM[Q+3].INT:=CURVAL;GOTO 21;END; 1947 IF SCANKEYWORD(734)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE); 1948 MEM[Q+2].INT:=CURVAL;GOTO 21;END;SCANRULESPEC:=Q;END; 1949 {:463}{464:}FUNCTION STRTOKS(B:POOLPOINTER):HALFWORD;VAR P:HALFWORD; 1950 Q:HALFWORD;T:HALFWORD;K:POOLPOINTER; 1951 BEGIN BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(257,POOLSIZE-INITPOOLPTR 1952 );END;P:=29997;MEM[P].HH.RH:=0;K:=B; 1953 WHILE K<POOLPTR DO BEGIN T:=STRPOOL[K]; 1954 IF T=32 THEN T:=2592 ELSE T:=3072+T;BEGIN BEGIN Q:=AVAIL; 1955 IF Q=0 THEN Q:=GETAVAIL ELSE BEGIN AVAIL:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0; 1956 {DYNUSED:=DYNUSED+1;}END;END;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=T;P:=Q;END; 1957 K:=K+1;END;POOLPTR:=B;STRTOKS:=P;END; 1958 {:464}{465:}FUNCTION THETOKS:HALFWORD;VAR OLDSETTING:0..21; 1959 P,Q,R:HALFWORD;B:POOLPOINTER;BEGIN GETXTOKEN; 1960 SCANSOMETHINGINTERNAL(5,FALSE); 1961 IF CURVALLEVEL>=4 THEN{466:}BEGIN P:=29997;MEM[P].HH.RH:=0; 1962 IF CURVALLEVEL=4 THEN BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; 1963 MEM[Q].HH.LH:=4095+CURVAL;P:=Q; 1964 END ELSE IF CURVAL<>0 THEN BEGIN R:=MEM[CURVAL].HH.RH; 1965 WHILE R<>0 DO BEGIN BEGIN BEGIN Q:=AVAIL; 1966 IF Q=0 THEN Q:=GETAVAIL ELSE BEGIN AVAIL:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0; 1967 {DYNUSED:=DYNUSED+1;}END;END;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=MEM[R].HH.LH; 1968 P:=Q;END;R:=MEM[R].HH.RH;END;END;THETOKS:=P; 1969 END{:466}ELSE BEGIN OLDSETTING:=SELECTOR;SELECTOR:=21;B:=POOLPTR; 1970 CASE CURVALLEVEL OF 0:PRINTINT(CURVAL);1:BEGIN PRINTSCALED(CURVAL); 1971 PRINT(397);END;2:BEGIN PRINTSPEC(CURVAL,397);DELETEGLUEREF(CURVAL);END; 1972 3:BEGIN PRINTSPEC(CURVAL,337);DELETEGLUEREF(CURVAL);END;END; 1973 SELECTOR:=OLDSETTING;THETOKS:=STRTOKS(B);END;END; 1974 {:465}{467:}PROCEDURE INSTHETOKS;BEGIN MEM[29988].HH.RH:=THETOKS; 1975 BEGINTOKENLIST(MEM[29997].HH.RH,4);END;{:467}{470:}PROCEDURE CONVTOKS; 1976 VAR OLDSETTING:0..21;C:0..5;SAVESCANNERSTATUS:SMALLNUMBER;B:POOLPOINTER; 1977 BEGIN C:=CURCHR;{471:}CASE C OF 0,1:SCANINT; 1978 2,3:BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS;SCANNERSTATUS:=0;GETTOKEN; 1979 SCANNERSTATUS:=SAVESCANNERSTATUS;END;4:SCANFONTIDENT; 1980 5:IF JOBNAME=0 THEN OPENLOGFILE;END{:471};OLDSETTING:=SELECTOR; 1981 SELECTOR:=21;B:=POOLPTR;{472:}CASE C OF 0:PRINTINT(CURVAL); 1982 1:PRINTROMANINT(CURVAL); 1983 2:IF CURCS<>0 THEN SPRINTCS(CURCS)ELSE PRINTCHAR(CURCHR);3:PRINTMEANING; 1984 4:BEGIN PRINT(FONTNAME[CURVAL]); 1985 IF FONTSIZE[CURVAL]<>FONTDSIZE[CURVAL]THEN BEGIN PRINT(741); 1986 PRINTSCALED(FONTSIZE[CURVAL]);PRINT(397);END;END;5:PRINT(JOBNAME); 1987 END{:472};SELECTOR:=OLDSETTING;MEM[29988].HH.RH:=STRTOKS(B); 1988 BEGINTOKENLIST(MEM[29997].HH.RH,4);END; 1989 {:470}{473:}FUNCTION SCANTOKS(MACRODEF,XPAND:BOOLEAN):HALFWORD; 1990 LABEL 40,22,30,31,32;VAR T:HALFWORD;S:HALFWORD;P:HALFWORD;Q:HALFWORD; 1991 UNBALANCE:HALFWORD;HASHBRACE:HALFWORD; 1992 BEGIN IF MACRODEF THEN SCANNERSTATUS:=2 ELSE SCANNERSTATUS:=5; 1993 WARNINGINDEX:=CURCS;DEFREF:=GETAVAIL;MEM[DEFREF].HH.LH:=0;P:=DEFREF; 1994 HASHBRACE:=0;T:=3120; 1995 IF MACRODEF THEN{474:}BEGIN WHILE TRUE DO BEGIN 22:GETTOKEN; 1996 IF CURTOK<768 THEN GOTO 31;IF CURCMD=6 THEN{476:}BEGIN S:=3328+CURCHR; 1997 GETTOKEN;IF CURTOK<512 THEN BEGIN HASHBRACE:=CURTOK;BEGIN Q:=GETAVAIL; 1998 MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END;BEGIN Q:=GETAVAIL; 1999 MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=3584;P:=Q;END;GOTO 30;END; 2000 IF T=3129 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 2001 PRINT(744);END;BEGIN HELPPTR:=2;HELPLINE[1]:=745;HELPLINE[0]:=746;END; 2002 ERROR;GOTO 22;END ELSE BEGIN T:=T+1; 2003 IF CURTOK<>T THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 2004 PRINT(747);END;BEGIN HELPPTR:=2;HELPLINE[1]:=748;HELPLINE[0]:=749;END; 2005 BACKERROR;END;CURTOK:=S;END;END{:476};BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; 2006 MEM[Q].HH.LH:=CURTOK;P:=Q;END;END;31:BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; 2007 MEM[Q].HH.LH:=3584;P:=Q;END; 2008 IF CURCMD=2 THEN{475:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 2009 PRINT(657);END;ALIGNSTATE:=ALIGNSTATE+1;BEGIN HELPPTR:=2; 2010 HELPLINE[1]:=742;HELPLINE[0]:=743;END;ERROR;GOTO 40;END{:475}; 2011 30:END{:474}ELSE SCANLEFTBRACE;{477:}UNBALANCE:=1; 2012 WHILE TRUE DO BEGIN IF XPAND THEN{478:}BEGIN WHILE TRUE DO BEGIN GETNEXT 2013 ;IF CURCMD<=100 THEN GOTO 32; 2014 IF CURCMD<>109 THEN EXPAND ELSE BEGIN Q:=THETOKS; 2015 IF MEM[29997].HH.RH<>0 THEN BEGIN MEM[P].HH.RH:=MEM[29997].HH.RH;P:=Q; 2016 END;END;END;32:XTOKEN END{:478}ELSE GETTOKEN; 2017 IF CURTOK<768 THEN IF CURCMD<2 THEN UNBALANCE:=UNBALANCE+1 ELSE BEGIN 2018 UNBALANCE:=UNBALANCE-1;IF UNBALANCE=0 THEN GOTO 40; 2019 END ELSE IF CURCMD=6 THEN IF MACRODEF THEN{479:}BEGIN S:=CURTOK; 2020 IF XPAND THEN GETXTOKEN ELSE GETTOKEN; 2021 IF CURCMD<>6 THEN IF(CURTOK<=3120)OR(CURTOK>T)THEN BEGIN BEGIN IF 2022 INTERACTION=3 THEN;PRINTNL(262);PRINT(750);END;SPRINTCS(WARNINGINDEX); 2023 BEGIN HELPPTR:=3;HELPLINE[2]:=751;HELPLINE[1]:=752;HELPLINE[0]:=753;END; 2024 BACKERROR;CURTOK:=S;END ELSE CURTOK:=1232+CURCHR;END{:479}; 2025 BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END; 2026 END{:477};40:SCANNERSTATUS:=0;IF HASHBRACE<>0 THEN BEGIN Q:=GETAVAIL; 2027 MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=HASHBRACE;P:=Q;END;SCANTOKS:=P;END; 2028 {:473}{482:}PROCEDURE READTOKS(N:INTEGER;R:HALFWORD);LABEL 30; 2029 VAR P:HALFWORD;Q:HALFWORD;S:INTEGER;M:SMALLNUMBER; 2030 BEGIN SCANNERSTATUS:=2;WARNINGINDEX:=R;DEFREF:=GETAVAIL; 2031 MEM[DEFREF].HH.LH:=0;P:=DEFREF;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; 2032 MEM[Q].HH.LH:=3584;P:=Q;END;IF(N<0)OR(N>15)THEN M:=16 ELSE M:=N; 2033 S:=ALIGNSTATE;ALIGNSTATE:=1000000;REPEAT{483:}BEGINFILEREADING; 2034 CURINPUT.NAMEFIELD:=M+1; 2035 IF READOPEN[M]=2 THEN{484:}IF INTERACTION>1 THEN IF N<0 THEN BEGIN; 2036 PRINT(338);TERMINPUT;END ELSE BEGIN;PRINTLN;SPRINTCS(R);BEGIN;PRINT(61); 2037 TERMINPUT;END;N:=-1; 2038 END ELSE FATALERROR(754){:484}ELSE IF READOPEN[M]=1 THEN{485:}IF INPUTLN 2039 (READFILE[M],FALSE)THEN READOPEN[M]:=0 ELSE BEGIN ACLOSE(READFILE[M]); 2040 READOPEN[M]:=2; 2041 END{:485}ELSE{486:}BEGIN IF NOT INPUTLN(READFILE[M],TRUE)THEN BEGIN 2042 ACLOSE(READFILE[M]);READOPEN[M]:=2; 2043 IF ALIGNSTATE<>1000000 THEN BEGIN RUNAWAY;BEGIN IF INTERACTION=3 THEN; 2044 PRINTNL(262);PRINT(755);END;PRINTESC(534);BEGIN HELPPTR:=1; 2045 HELPLINE[0]:=756;END;ALIGNSTATE:=1000000;CURINPUT.LIMITFIELD:=0;ERROR; 2046 END;END;END{:486};CURINPUT.LIMITFIELD:=LAST; 2047 IF(EQTB[5311].INT<0)OR(EQTB[5311].INT>255)THEN CURINPUT.LIMITFIELD:= 2048 CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[5311].INT; 2049 FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD; 2050 CURINPUT.STATEFIELD:=33;WHILE TRUE DO BEGIN GETTOKEN; 2051 IF CURTOK=0 THEN GOTO 30; 2052 IF ALIGNSTATE<1000000 THEN BEGIN REPEAT GETTOKEN;UNTIL CURTOK=0; 2053 ALIGNSTATE:=1000000;GOTO 30;END;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; 2054 MEM[Q].HH.LH:=CURTOK;P:=Q;END;END;30:ENDFILEREADING{:483}; 2055 UNTIL ALIGNSTATE=1000000;CURVAL:=DEFREF;SCANNERSTATUS:=0;ALIGNSTATE:=S; 2056 END;{:482}{494:}PROCEDURE PASSTEXT;LABEL 30;VAR L:INTEGER; 2057 SAVESCANNERSTATUS:SMALLNUMBER;BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS; 2058 SCANNERSTATUS:=1;L:=0;SKIPLINE:=LINE;WHILE TRUE DO BEGIN GETNEXT; 2059 IF CURCMD=106 THEN BEGIN IF L=0 THEN GOTO 30;IF CURCHR=2 THEN L:=L-1; 2060 END ELSE IF CURCMD=105 THEN L:=L+1;END; 2061 30:SCANNERSTATUS:=SAVESCANNERSTATUS;END; 2062 {:494}{497:}PROCEDURE CHANGEIFLIMIT(L:SMALLNUMBER;P:HALFWORD);LABEL 10; 2063 VAR Q:HALFWORD;BEGIN IF P=CONDPTR THEN IFLIMIT:=L ELSE BEGIN Q:=CONDPTR; 2064 WHILE TRUE DO BEGIN IF Q=0 THEN CONFUSION(757); 2065 IF MEM[Q].HH.RH=P THEN BEGIN MEM[Q].HH.B0:=L;GOTO 10;END; 2066 Q:=MEM[Q].HH.RH;END;END;10:END;{:497}{498:}PROCEDURE CONDITIONAL; 2067 LABEL 10,50;VAR B:BOOLEAN;R:60..62;M,N:INTEGER;P,Q:HALFWORD; 2068 SAVESCANNERSTATUS:SMALLNUMBER;SAVECONDPTR:HALFWORD;THISIF:SMALLNUMBER; 2069 BEGIN{495:}BEGIN P:=GETNODE(2);MEM[P].HH.RH:=CONDPTR; 2070 MEM[P].HH.B0:=IFLIMIT;MEM[P].HH.B1:=CURIF;MEM[P+1].INT:=IFLINE; 2071 CONDPTR:=P;CURIF:=CURCHR;IFLIMIT:=1;IFLINE:=LINE;END{:495}; 2072 SAVECONDPTR:=CONDPTR;THISIF:=CURCHR; 2073 {501:}CASE THISIF OF 0,1:{506:}BEGIN BEGIN GETXTOKEN; 2074 IF CURCMD=0 THEN IF CURCHR=257 THEN BEGIN CURCMD:=13; 2075 CURCHR:=CURTOK-4096;END;END;IF(CURCMD>13)OR(CURCHR>255)THEN BEGIN M:=0; 2076 N:=256;END ELSE BEGIN M:=CURCMD;N:=CURCHR;END;BEGIN GETXTOKEN; 2077 IF CURCMD=0 THEN IF CURCHR=257 THEN BEGIN CURCMD:=13; 2078 CURCHR:=CURTOK-4096;END;END; 2079 IF(CURCMD>13)OR(CURCHR>255)THEN BEGIN CURCMD:=0;CURCHR:=256;END; 2080 IF THISIF=0 THEN B:=(N=CURCHR)ELSE B:=(M=CURCMD);END{:506}; 2081 2,3:{503:}BEGIN IF THISIF=2 THEN SCANINT ELSE SCANDIMEN(FALSE,FALSE, 2082 FALSE);N:=CURVAL;{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; 2083 IF(CURTOK>=3132)AND(CURTOK<=3134)THEN R:=CURTOK-3072 ELSE BEGIN BEGIN IF 2084 INTERACTION=3 THEN;PRINTNL(262);PRINT(781);END;PRINTCMDCHR(105,THISIF); 2085 BEGIN HELPPTR:=1;HELPLINE[0]:=782;END;BACKERROR;R:=61;END; 2086 IF THISIF=2 THEN SCANINT ELSE SCANDIMEN(FALSE,FALSE,FALSE); 2087 CASE R OF 60:B:=(N<CURVAL);61:B:=(N=CURVAL);62:B:=(N>CURVAL);END; 2088 END{:503};4:{504:}BEGIN SCANINT;B:=ODD(CURVAL);END{:504}; 2089 5:B:=(ABS(CURLIST.MODEFIELD)=1);6:B:=(ABS(CURLIST.MODEFIELD)=102); 2090 7:B:=(ABS(CURLIST.MODEFIELD)=203);8:B:=(CURLIST.MODEFIELD<0); 2091 9,10,11:{505:}BEGIN SCANEIGHTBITINT;P:=EQTB[3678+CURVAL].HH.RH; 2092 IF THISIF=9 THEN B:=(P=0)ELSE IF P=0 THEN B:=FALSE ELSE IF THISIF=10 2093 THEN B:=(MEM[P].HH.B0=0)ELSE B:=(MEM[P].HH.B0=1);END{:505}; 2094 12:{507:}BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS;SCANNERSTATUS:=0; 2095 GETNEXT;N:=CURCS;P:=CURCMD;Q:=CURCHR;GETNEXT; 2096 IF CURCMD<>P THEN B:=FALSE ELSE IF CURCMD<111 THEN B:=(CURCHR=Q)ELSE 2097 {508:}BEGIN P:=MEM[CURCHR].HH.RH;Q:=MEM[EQTB[N].HH.RH].HH.RH; 2098 IF P=Q THEN B:=TRUE ELSE BEGIN WHILE(P<>0)AND(Q<>0)DO IF MEM[P].HH.LH<> 2099 MEM[Q].HH.LH THEN P:=0 ELSE BEGIN P:=MEM[P].HH.RH;Q:=MEM[Q].HH.RH;END; 2100 B:=((P=0)AND(Q=0));END;END{:508};SCANNERSTATUS:=SAVESCANNERSTATUS; 2101 END{:507};13:BEGIN SCANFOURBITINT;B:=(READOPEN[CURVAL]=2);END; 2102 14:B:=TRUE;15:B:=FALSE;16:{509:}BEGIN SCANINT;N:=CURVAL; 2103 IF EQTB[5299].INT>1 THEN BEGIN BEGINDIAGNOSTIC;PRINT(783);PRINTINT(N); 2104 PRINTCHAR(125);ENDDIAGNOSTIC(FALSE);END;WHILE N<>0 DO BEGIN PASSTEXT; 2105 IF CONDPTR=SAVECONDPTR THEN IF CURCHR=4 THEN N:=N-1 ELSE GOTO 50 ELSE IF 2106 CURCHR=2 THEN{496:}BEGIN P:=CONDPTR;IFLINE:=MEM[P+1].INT; 2107 CURIF:=MEM[P].HH.B1;IFLIMIT:=MEM[P].HH.B0;CONDPTR:=MEM[P].HH.RH; 2108 FREENODE(P,2);END{:496};END;CHANGEIFLIMIT(4,SAVECONDPTR);GOTO 10; 2109 END{:509};END{:501};IF EQTB[5299].INT>1 THEN{502:}BEGIN BEGINDIAGNOSTIC; 2110 IF B THEN PRINT(779)ELSE PRINT(780);ENDDIAGNOSTIC(FALSE);END{:502}; 2111 IF B THEN BEGIN CHANGEIFLIMIT(3,SAVECONDPTR);GOTO 10;END; 2112 {500:}WHILE TRUE DO BEGIN PASSTEXT; 2113 IF CONDPTR=SAVECONDPTR THEN BEGIN IF CURCHR<>4 THEN GOTO 50; 2114 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(777);END;PRINTESC(775); 2115 BEGIN HELPPTR:=1;HELPLINE[0]:=778;END;ERROR; 2116 END ELSE IF CURCHR=2 THEN{496:}BEGIN P:=CONDPTR;IFLINE:=MEM[P+1].INT; 2117 CURIF:=MEM[P].HH.B1;IFLIMIT:=MEM[P].HH.B0;CONDPTR:=MEM[P].HH.RH; 2118 FREENODE(P,2);END{:496};END{:500}; 2119 50:IF CURCHR=2 THEN{496:}BEGIN P:=CONDPTR;IFLINE:=MEM[P+1].INT; 2120 CURIF:=MEM[P].HH.B1;IFLIMIT:=MEM[P].HH.B0;CONDPTR:=MEM[P].HH.RH; 2121 FREENODE(P,2);END{:496}ELSE IFLIMIT:=2;10:END; 2122 {:498}{515:}PROCEDURE BEGINNAME;BEGIN AREADELIMITER:=0;EXTDELIMITER:=0; 2123 END;{:515}{516:}FUNCTION MORENAME(C:ASCIICODE):BOOLEAN; 2124 BEGIN IF C=32 THEN MORENAME:=FALSE ELSE BEGIN BEGIN IF POOLPTR+1> 2125 POOLSIZE THEN OVERFLOW(257,POOLSIZE-INITPOOLPTR);END; 2126 BEGIN STRPOOL[POOLPTR]:=C;POOLPTR:=POOLPTR+1;END; 2127 IF(C=62)OR(C=58)THEN BEGIN AREADELIMITER:=(POOLPTR-STRSTART[STRPTR]); 2128 EXTDELIMITER:=0; 2129 END ELSE IF(C=46)AND(EXTDELIMITER=0)THEN EXTDELIMITER:=(POOLPTR-STRSTART 2130 [STRPTR]);MORENAME:=TRUE;END;END;{:516}{517:}PROCEDURE ENDNAME; 2131 BEGIN IF STRPTR+3>MAXSTRINGS THEN OVERFLOW(258,MAXSTRINGS-INITSTRPTR); 2132 IF AREADELIMITER=0 THEN CURAREA:=338 ELSE BEGIN CURAREA:=STRPTR; 2133 STRSTART[STRPTR+1]:=STRSTART[STRPTR]+AREADELIMITER;STRPTR:=STRPTR+1;END; 2134 IF EXTDELIMITER=0 THEN BEGIN CUREXT:=338;CURNAME:=MAKESTRING; 2135 END ELSE BEGIN CURNAME:=STRPTR; 2136 STRSTART[STRPTR+1]:=STRSTART[STRPTR]+EXTDELIMITER-AREADELIMITER-1; 2137 STRPTR:=STRPTR+1;CUREXT:=MAKESTRING;END;END; 2138 {:517}{519:}PROCEDURE PACKFILENAME(N,A,E:STRNUMBER);VAR K:INTEGER; 2139 C:ASCIICODE;J:POOLPOINTER;BEGIN K:=0; 2140 FOR J:=STRSTART[A]TO STRSTART[A+1]-1 DO BEGIN C:=STRPOOL[J];K:=K+1; 2141 IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; 2142 FOR J:=STRSTART[N]TO STRSTART[N+1]-1 DO BEGIN C:=STRPOOL[J];K:=K+1; 2143 IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; 2144 FOR J:=STRSTART[E]TO STRSTART[E+1]-1 DO BEGIN C:=STRPOOL[J];K:=K+1; 2145 IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; 2146 IF K<=FILENAMESIZE THEN NAMELENGTH:=K ELSE NAMELENGTH:=FILENAMESIZE; 2147 FOR K:=NAMELENGTH+1 TO FILENAMESIZE DO NAMEOFFILE[K]:=' ';END; 2148 {:519}{523:}PROCEDURE PACKBUFFEREDNAME(N:SMALLNUMBER;A,B:INTEGER); 2149 VAR K:INTEGER;C:ASCIICODE;J:INTEGER; 2150 BEGIN IF N+B-A+5>FILENAMESIZE THEN B:=A+FILENAMESIZE-N-5;K:=0; 2151 FOR J:=1 TO N DO BEGIN C:=XORD[TEXFORMATDEFAULT[J]];K:=K+1; 2152 IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; 2153 FOR J:=A TO B DO BEGIN C:=BUFFER[J];K:=K+1; 2154 IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; 2155 FOR J:=17 TO 20 DO BEGIN C:=XORD[TEXFORMATDEFAULT[J]];K:=K+1; 2156 IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; 2157 IF K<=FILENAMESIZE THEN NAMELENGTH:=K ELSE NAMELENGTH:=FILENAMESIZE; 2158 FOR K:=NAMELENGTH+1 TO FILENAMESIZE DO NAMEOFFILE[K]:=' ';END; 2159 {:523}{525:}FUNCTION MAKENAMESTRING:STRNUMBER;VAR K:1..FILENAMESIZE; 2160 BEGIN IF(POOLPTR+NAMELENGTH>POOLSIZE)OR(STRPTR=MAXSTRINGS)OR((POOLPTR- 2161 STRSTART[STRPTR])>0)THEN MAKENAMESTRING:=63 ELSE BEGIN FOR K:=1 TO 2162 NAMELENGTH DO BEGIN STRPOOL[POOLPTR]:=XORD[NAMEOFFILE[K]]; 2163 POOLPTR:=POOLPTR+1;END;MAKENAMESTRING:=MAKESTRING;END;END; 2164 FUNCTION AMAKENAMESTRING(VAR F:ALPHAFILE):STRNUMBER; 2165 BEGIN AMAKENAMESTRING:=MAKENAMESTRING;END; 2166 FUNCTION BMAKENAMESTRING(VAR F:BYTEFILE):STRNUMBER; 2167 BEGIN BMAKENAMESTRING:=MAKENAMESTRING;END; 2168 FUNCTION WMAKENAMESTRING(VAR F:WORDFILE):STRNUMBER; 2169 BEGIN WMAKENAMESTRING:=MAKENAMESTRING;END; 2170 {:525}{526:}PROCEDURE SCANFILENAME;LABEL 30;BEGIN NAMEINPROGRESS:=TRUE; 2171 BEGINNAME;{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; 2172 WHILE TRUE DO BEGIN IF(CURCMD>12)OR(CURCHR>255)THEN BEGIN BACKINPUT; 2173 GOTO 30;END;IF NOT MORENAME(CURCHR)THEN GOTO 30;GETXTOKEN;END; 2174 30:ENDNAME;NAMEINPROGRESS:=FALSE;END; 2175 {:526}{529:}PROCEDURE PACKJOBNAME(S:STRNUMBER);BEGIN CURAREA:=338; 2176 CUREXT:=S;CURNAME:=JOBNAME;PACKFILENAME(CURNAME,CURAREA,CUREXT);END; 2177 {:529}{530:}PROCEDURE PROMPTFILENAME(S,E:STRNUMBER);LABEL 30; 2178 VAR K:0..BUFSIZE;BEGIN IF INTERACTION=2 THEN; 2179 IF S=787 THEN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(788); 2180 END ELSE BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(789);END; 2181 PRINTFILENAME(CURNAME,CURAREA,CUREXT);PRINT(790); 2182 IF E=791 THEN SHOWCONTEXT;PRINTNL(792);PRINT(S); 2183 IF INTERACTION<2 THEN FATALERROR(793);;BEGIN;PRINT(568);TERMINPUT;END; 2184 {531:}BEGIN BEGINNAME;K:=FIRST;WHILE(BUFFER[K]=32)AND(K<LAST)DO K:=K+1; 2185 WHILE TRUE DO BEGIN IF K=LAST THEN GOTO 30; 2186 IF NOT MORENAME(BUFFER[K])THEN GOTO 30;K:=K+1;END;30:ENDNAME;END{:531}; 2187 IF CUREXT=338 THEN CUREXT:=E;PACKFILENAME(CURNAME,CURAREA,CUREXT);END; 2188 {:530}{534:}PROCEDURE OPENLOGFILE;VAR OLDSETTING:0..21;K:0..BUFSIZE; 2189 L:0..BUFSIZE;MONTHS:PACKED ARRAY[1..36]OF CHAR; 2190 BEGIN OLDSETTING:=SELECTOR;IF JOBNAME=0 THEN JOBNAME:=796; 2191 PACKJOBNAME(797);WHILE NOT AOPENOUT(LOGFILE)DO{535:}BEGIN SELECTOR:=17; 2192 PROMPTFILENAME(799,797);END{:535};LOGNAME:=AMAKENAMESTRING(LOGFILE); 2193 SELECTOR:=18;LOGOPENED:=TRUE; 2194 {536:}BEGIN WRITE(LOGFILE,'This is TeX, Version 3.141592653'); 2195 SLOWPRINT(FORMATIDENT);PRINT(800);PRINTINT(SYSDAY);PRINTCHAR(32); 2196 MONTHS:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'; 2197 FOR K:=3*SYSMONTH-2 TO 3*SYSMONTH DO WRITE(LOGFILE,MONTHS[K]); 2198 PRINTCHAR(32);PRINTINT(SYSYEAR);PRINTCHAR(32);PRINTTWO(SYSTIME DIV 60); 2199 PRINTCHAR(58);PRINTTWO(SYSTIME MOD 60);END{:536}; 2200 INPUTSTACK[INPUTPTR]:=CURINPUT;PRINTNL(798);L:=INPUTSTACK[0].LIMITFIELD; 2201 IF BUFFER[L]=EQTB[5311].INT THEN L:=L-1; 2202 FOR K:=1 TO L DO PRINT(BUFFER[K]);PRINTLN;SELECTOR:=OLDSETTING+2;END; 2203 {:534}{537:}PROCEDURE STARTINPUT;LABEL 30;BEGIN SCANFILENAME; 2204 IF CUREXT=338 THEN CUREXT:=791;PACKFILENAME(CURNAME,CURAREA,CUREXT); 2205 WHILE TRUE DO BEGIN BEGINFILEREADING; 2206 IF AOPENIN(INPUTFILE[CURINPUT.INDEXFIELD])THEN GOTO 30; 2207 IF CURAREA=338 THEN BEGIN PACKFILENAME(CURNAME,784,CUREXT); 2208 IF AOPENIN(INPUTFILE[CURINPUT.INDEXFIELD])THEN GOTO 30;END; 2209 ENDFILEREADING;PROMPTFILENAME(787,791);END; 2210 30:CURINPUT.NAMEFIELD:=AMAKENAMESTRING(INPUTFILE[CURINPUT.INDEXFIELD]); 2211 IF JOBNAME=0 THEN BEGIN JOBNAME:=CURNAME;OPENLOGFILE;END; 2212 IF TERMOFFSET+(STRSTART[CURINPUT.NAMEFIELD+1]-STRSTART[CURINPUT. 2213 NAMEFIELD])>MAXPRINTLINE-2 THEN PRINTLN ELSE IF(TERMOFFSET>0)OR( 2214 FILEOFFSET>0)THEN PRINTCHAR(32);PRINTCHAR(40);OPENPARENS:=OPENPARENS+1; 2215 SLOWPRINT(CURINPUT.NAMEFIELD);;CURINPUT.STATEFIELD:=33; 2216 IF CURINPUT.NAMEFIELD=STRPTR-1 THEN BEGIN BEGIN STRPTR:=STRPTR-1; 2217 POOLPTR:=STRSTART[STRPTR];END;CURINPUT.NAMEFIELD:=CURNAME;END; 2218 {538:}BEGIN LINE:=1; 2219 IF INPUTLN(INPUTFILE[CURINPUT.INDEXFIELD],FALSE)THEN;FIRMUPTHELINE; 2220 IF(EQTB[5311].INT<0)OR(EQTB[5311].INT>255)THEN CURINPUT.LIMITFIELD:= 2221 CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[5311].INT; 2222 FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD; 2223 END{:538};END;{:537}{560:}FUNCTION READFONTINFO(U:HALFWORD; 2224 NOM,AIRE:STRNUMBER;S:SCALED):INTERNALFONTNUMBER;LABEL 30,11,45; 2225 VAR K:FONTINDEX;FILEOPENED:BOOLEAN; 2226 LF,LH,BC,EC,NW,NH,ND,NI,NL,NK,NE,NP:HALFWORD;F:INTERNALFONTNUMBER; 2227 G:INTERNALFONTNUMBER;A,B,C,D:EIGHTBITS;QW:FOURQUARTERS;SW:SCALED; 2228 BCHLABEL:INTEGER;BCHAR:0..256;Z:SCALED;ALPHA:INTEGER;BETA:1..16; 2229 BEGIN G:=0;{562:}{563:}FILEOPENED:=FALSE; 2230 IF AIRE=338 THEN PACKFILENAME(NOM,785,811)ELSE PACKFILENAME(NOM,AIRE,811 2231 );IF NOT BOPENIN(TFMFILE)THEN GOTO 11;FILEOPENED:=TRUE{:563}; 2232 {565:}BEGIN BEGIN LF:=TFMFILE^;IF LF>127 THEN GOTO 11;GET(TFMFILE); 2233 LF:=LF*256+TFMFILE^;END;GET(TFMFILE);BEGIN LH:=TFMFILE^; 2234 IF LH>127 THEN GOTO 11;GET(TFMFILE);LH:=LH*256+TFMFILE^;END; 2235 GET(TFMFILE);BEGIN BC:=TFMFILE^;IF BC>127 THEN GOTO 11;GET(TFMFILE); 2236 BC:=BC*256+TFMFILE^;END;GET(TFMFILE);BEGIN EC:=TFMFILE^; 2237 IF EC>127 THEN GOTO 11;GET(TFMFILE);EC:=EC*256+TFMFILE^;END; 2238 IF(BC>EC+1)OR(EC>255)THEN GOTO 11;IF BC>255 THEN BEGIN BC:=1;EC:=0;END; 2239 GET(TFMFILE);BEGIN NW:=TFMFILE^;IF NW>127 THEN GOTO 11;GET(TFMFILE); 2240 NW:=NW*256+TFMFILE^;END;GET(TFMFILE);BEGIN NH:=TFMFILE^; 2241 IF NH>127 THEN GOTO 11;GET(TFMFILE);NH:=NH*256+TFMFILE^;END; 2242 GET(TFMFILE);BEGIN ND:=TFMFILE^;IF ND>127 THEN GOTO 11;GET(TFMFILE); 2243 ND:=ND*256+TFMFILE^;END;GET(TFMFILE);BEGIN NI:=TFMFILE^; 2244 IF NI>127 THEN GOTO 11;GET(TFMFILE);NI:=NI*256+TFMFILE^;END; 2245 GET(TFMFILE);BEGIN NL:=TFMFILE^;IF NL>127 THEN GOTO 11;GET(TFMFILE); 2246 NL:=NL*256+TFMFILE^;END;GET(TFMFILE);BEGIN NK:=TFMFILE^; 2247 IF NK>127 THEN GOTO 11;GET(TFMFILE);NK:=NK*256+TFMFILE^;END; 2248 GET(TFMFILE);BEGIN NE:=TFMFILE^;IF NE>127 THEN GOTO 11;GET(TFMFILE); 2249 NE:=NE*256+TFMFILE^;END;GET(TFMFILE);BEGIN NP:=TFMFILE^; 2250 IF NP>127 THEN GOTO 11;GET(TFMFILE);NP:=NP*256+TFMFILE^;END; 2251 IF LF<>6+LH+(EC-BC+1)+NW+NH+ND+NI+NL+NK+NE+NP THEN GOTO 11; 2252 IF(NW=0)OR(NH=0)OR(ND=0)OR(NI=0)THEN GOTO 11;END{:565}; 2253 {566:}LF:=LF-6-LH;IF NP<7 THEN LF:=LF+7-NP; 2254 IF(FONTPTR=FONTMAX)OR(FMEMPTR+LF>FONTMEMSIZE)THEN{567:}BEGIN BEGIN IF 2255 INTERACTION=3 THEN;PRINTNL(262);PRINT(802);END;SPRINTCS(U); 2256 PRINTCHAR(61);PRINTFILENAME(NOM,AIRE,338);IF S>=0 THEN BEGIN PRINT(741); 2257 PRINTSCALED(S);PRINT(397);END ELSE IF S<>-1000 THEN BEGIN PRINT(803); 2258 PRINTINT(-S);END;PRINT(812);BEGIN HELPPTR:=4;HELPLINE[3]:=813; 2259 HELPLINE[2]:=814;HELPLINE[1]:=815;HELPLINE[0]:=816;END;ERROR;GOTO 30; 2260 END{:567};F:=FONTPTR+1;CHARBASE[F]:=FMEMPTR-BC; 2261 WIDTHBASE[F]:=CHARBASE[F]+EC+1;HEIGHTBASE[F]:=WIDTHBASE[F]+NW; 2262 DEPTHBASE[F]:=HEIGHTBASE[F]+NH;ITALICBASE[F]:=DEPTHBASE[F]+ND; 2263 LIGKERNBASE[F]:=ITALICBASE[F]+NI; 2264 KERNBASE[F]:=LIGKERNBASE[F]+NL-256*(128); 2265 EXTENBASE[F]:=KERNBASE[F]+256*(128)+NK; 2266 PARAMBASE[F]:=EXTENBASE[F]+NE{:566};{568:}BEGIN IF LH<2 THEN GOTO 11; 2267 BEGIN GET(TFMFILE);A:=TFMFILE^;QW.B0:=A+0;GET(TFMFILE);B:=TFMFILE^; 2268 QW.B1:=B+0;GET(TFMFILE);C:=TFMFILE^;QW.B2:=C+0;GET(TFMFILE);D:=TFMFILE^; 2269 QW.B3:=D+0;FONTCHECK[F]:=QW;END;GET(TFMFILE);BEGIN Z:=TFMFILE^; 2270 IF Z>127 THEN GOTO 11;GET(TFMFILE);Z:=Z*256+TFMFILE^;END;GET(TFMFILE); 2271 Z:=Z*256+TFMFILE^;GET(TFMFILE);Z:=(Z*16)+(TFMFILE^DIV 16); 2272 IF Z<65536 THEN GOTO 11;WHILE LH>2 DO BEGIN GET(TFMFILE);GET(TFMFILE); 2273 GET(TFMFILE);GET(TFMFILE);LH:=LH-1;END;FONTDSIZE[F]:=Z; 2274 IF S<>-1000 THEN IF S>=0 THEN Z:=S ELSE Z:=XNOVERD(Z,-S,1000); 2275 FONTSIZE[F]:=Z;END{:568}; 2276 {569:}FOR K:=FMEMPTR TO WIDTHBASE[F]-1 DO BEGIN BEGIN GET(TFMFILE); 2277 A:=TFMFILE^;QW.B0:=A+0;GET(TFMFILE);B:=TFMFILE^;QW.B1:=B+0;GET(TFMFILE); 2278 C:=TFMFILE^;QW.B2:=C+0;GET(TFMFILE);D:=TFMFILE^;QW.B3:=D+0; 2279 FONTINFO[K].QQQQ:=QW;END; 2280 IF(A>=NW)OR(B DIV 16>=NH)OR(B MOD 16>=ND)OR(C DIV 4>=NI)THEN GOTO 11; 2281 CASE C MOD 4 OF 1:IF D>=NL THEN GOTO 11;3:IF D>=NE THEN GOTO 11; 2282 2:{570:}BEGIN BEGIN IF(D<BC)OR(D>EC)THEN GOTO 11 END; 2283 WHILE D<K+BC-FMEMPTR DO BEGIN QW:=FONTINFO[CHARBASE[F]+D].QQQQ; 2284 IF((QW.B2-0)MOD 4)<>2 THEN GOTO 45;D:=QW.B3-0;END; 2285 IF D=K+BC-FMEMPTR THEN GOTO 11;45:END{:570};ELSE END;END{:569}; 2286 {571:}BEGIN{572:}BEGIN ALPHA:=16;WHILE Z>=8388608 DO BEGIN Z:=Z DIV 2; 2287 ALPHA:=ALPHA+ALPHA;END;BETA:=256 DIV ALPHA;ALPHA:=ALPHA*Z;END{:572}; 2288 FOR K:=WIDTHBASE[F]TO LIGKERNBASE[F]-1 DO BEGIN GET(TFMFILE); 2289 A:=TFMFILE^;GET(TFMFILE);B:=TFMFILE^;GET(TFMFILE);C:=TFMFILE^; 2290 GET(TFMFILE);D:=TFMFILE^; 2291 SW:=(((((D*Z)DIV 256)+(C*Z))DIV 256)+(B*Z))DIV BETA; 2292 IF A=0 THEN FONTINFO[K].INT:=SW ELSE IF A=255 THEN FONTINFO[K].INT:=SW- 2293 ALPHA ELSE GOTO 11;END;IF FONTINFO[WIDTHBASE[F]].INT<>0 THEN GOTO 11; 2294 IF FONTINFO[HEIGHTBASE[F]].INT<>0 THEN GOTO 11; 2295 IF FONTINFO[DEPTHBASE[F]].INT<>0 THEN GOTO 11; 2296 IF FONTINFO[ITALICBASE[F]].INT<>0 THEN GOTO 11;END{:571}; 2297 {573:}BCHLABEL:=32767;BCHAR:=256; 2298 IF NL>0 THEN BEGIN FOR K:=LIGKERNBASE[F]TO KERNBASE[F]+256*(128)-1 DO 2299 BEGIN BEGIN GET(TFMFILE);A:=TFMFILE^;QW.B0:=A+0;GET(TFMFILE); 2300 B:=TFMFILE^;QW.B1:=B+0;GET(TFMFILE);C:=TFMFILE^;QW.B2:=C+0;GET(TFMFILE); 2301 D:=TFMFILE^;QW.B3:=D+0;FONTINFO[K].QQQQ:=QW;END; 2302 IF A>128 THEN BEGIN IF 256*C+D>=NL THEN GOTO 11; 2303 IF A=255 THEN IF K=LIGKERNBASE[F]THEN BCHAR:=B; 2304 END ELSE BEGIN IF B<>BCHAR THEN BEGIN BEGIN IF(B<BC)OR(B>EC)THEN GOTO 11 2305 END;QW:=FONTINFO[CHARBASE[F]+B].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; 2306 IF C<128 THEN BEGIN BEGIN IF(D<BC)OR(D>EC)THEN GOTO 11 END; 2307 QW:=FONTINFO[CHARBASE[F]+D].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11; 2308 END ELSE IF 256*(C-128)+D>=NK THEN GOTO 11; 2309 IF A<128 THEN IF K-LIGKERNBASE[F]+A+1>=NL THEN GOTO 11;END;END; 2310 IF A=255 THEN BCHLABEL:=256*C+D;END; 2311 FOR K:=KERNBASE[F]+256*(128)TO EXTENBASE[F]-1 DO BEGIN GET(TFMFILE); 2312 A:=TFMFILE^;GET(TFMFILE);B:=TFMFILE^;GET(TFMFILE);C:=TFMFILE^; 2313 GET(TFMFILE);D:=TFMFILE^; 2314 SW:=(((((D*Z)DIV 256)+(C*Z))DIV 256)+(B*Z))DIV BETA; 2315 IF A=0 THEN FONTINFO[K].INT:=SW ELSE IF A=255 THEN FONTINFO[K].INT:=SW- 2316 ALPHA ELSE GOTO 11;END;{:573}; 2317 {574:}FOR K:=EXTENBASE[F]TO PARAMBASE[F]-1 DO BEGIN BEGIN GET(TFMFILE); 2318 A:=TFMFILE^;QW.B0:=A+0;GET(TFMFILE);B:=TFMFILE^;QW.B1:=B+0;GET(TFMFILE); 2319 C:=TFMFILE^;QW.B2:=C+0;GET(TFMFILE);D:=TFMFILE^;QW.B3:=D+0; 2320 FONTINFO[K].QQQQ:=QW;END; 2321 IF A<>0 THEN BEGIN BEGIN IF(A<BC)OR(A>EC)THEN GOTO 11 END; 2322 QW:=FONTINFO[CHARBASE[F]+A].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; 2323 IF B<>0 THEN BEGIN BEGIN IF(B<BC)OR(B>EC)THEN GOTO 11 END; 2324 QW:=FONTINFO[CHARBASE[F]+B].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; 2325 IF C<>0 THEN BEGIN BEGIN IF(C<BC)OR(C>EC)THEN GOTO 11 END; 2326 QW:=FONTINFO[CHARBASE[F]+C].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; 2327 BEGIN BEGIN IF(D<BC)OR(D>EC)THEN GOTO 11 END; 2328 QW:=FONTINFO[CHARBASE[F]+D].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; 2329 END{:574};{575:}BEGIN FOR K:=1 TO NP DO IF K=1 THEN BEGIN GET(TFMFILE); 2330 SW:=TFMFILE^;IF SW>127 THEN SW:=SW-256;GET(TFMFILE);SW:=SW*256+TFMFILE^; 2331 GET(TFMFILE);SW:=SW*256+TFMFILE^;GET(TFMFILE); 2332 FONTINFO[PARAMBASE[F]].INT:=(SW*16)+(TFMFILE^DIV 16); 2333 END ELSE BEGIN GET(TFMFILE);A:=TFMFILE^;GET(TFMFILE);B:=TFMFILE^; 2334 GET(TFMFILE);C:=TFMFILE^;GET(TFMFILE);D:=TFMFILE^; 2335 SW:=(((((D*Z)DIV 256)+(C*Z))DIV 256)+(B*Z))DIV BETA; 2336 IF A=0 THEN FONTINFO[PARAMBASE[F]+K-1].INT:=SW ELSE IF A=255 THEN 2337 FONTINFO[PARAMBASE[F]+K-1].INT:=SW-ALPHA ELSE GOTO 11;END; 2338 IF EOF(TFMFILE)THEN GOTO 11; 2339 FOR K:=NP+1 TO 7 DO FONTINFO[PARAMBASE[F]+K-1].INT:=0;END{:575}; 2340 {576:}IF NP>=7 THEN FONTPARAMS[F]:=NP ELSE FONTPARAMS[F]:=7; 2341 HYPHENCHAR[F]:=EQTB[5309].INT;SKEWCHAR[F]:=EQTB[5310].INT; 2342 IF BCHLABEL<NL THEN BCHARLABEL[F]:=BCHLABEL+LIGKERNBASE[F]ELSE 2343 BCHARLABEL[F]:=0;FONTBCHAR[F]:=BCHAR+0;FONTFALSEBCHAR[F]:=BCHAR+0; 2344 IF BCHAR<=EC THEN IF BCHAR>=BC THEN BEGIN QW:=FONTINFO[CHARBASE[F]+BCHAR 2345 ].QQQQ;IF(QW.B0>0)THEN FONTFALSEBCHAR[F]:=256;END;FONTNAME[F]:=NOM; 2346 FONTAREA[F]:=AIRE;FONTBC[F]:=BC;FONTEC[F]:=EC;FONTGLUE[F]:=0; 2347 CHARBASE[F]:=CHARBASE[F]-0;WIDTHBASE[F]:=WIDTHBASE[F]-0; 2348 LIGKERNBASE[F]:=LIGKERNBASE[F]-0;KERNBASE[F]:=KERNBASE[F]-0; 2349 EXTENBASE[F]:=EXTENBASE[F]-0;PARAMBASE[F]:=PARAMBASE[F]-1; 2350 FMEMPTR:=FMEMPTR+LF;FONTPTR:=F;G:=F;GOTO 30{:576}{:562}; 2351 11:{561:}BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(802);END; 2352 SPRINTCS(U);PRINTCHAR(61);PRINTFILENAME(NOM,AIRE,338); 2353 IF S>=0 THEN BEGIN PRINT(741);PRINTSCALED(S);PRINT(397); 2354 END ELSE IF S<>-1000 THEN BEGIN PRINT(803);PRINTINT(-S);END; 2355 IF FILEOPENED THEN PRINT(804)ELSE PRINT(805);BEGIN HELPPTR:=5; 2356 HELPLINE[4]:=806;HELPLINE[3]:=807;HELPLINE[2]:=808;HELPLINE[1]:=809; 2357 HELPLINE[0]:=810;END;ERROR{:561};30:IF FILEOPENED THEN BCLOSE(TFMFILE); 2358 READFONTINFO:=G;END; 2359 {:560}{581:}PROCEDURE CHARWARNING(F:INTERNALFONTNUMBER;C:EIGHTBITS); 2360 BEGIN IF EQTB[5298].INT>0 THEN BEGIN BEGINDIAGNOSTIC;PRINTNL(825); 2361 PRINT(C);PRINT(826);SLOWPRINT(FONTNAME[F]);PRINTCHAR(33); 2362 ENDDIAGNOSTIC(FALSE);END;END; 2363 {:581}{582:}FUNCTION NEWCHARACTER(F:INTERNALFONTNUMBER; 2364 C:EIGHTBITS):HALFWORD;LABEL 10;VAR P:HALFWORD; 2365 BEGIN IF FONTBC[F]<=C THEN IF FONTEC[F]>=C THEN IF(FONTINFO[CHARBASE[F]+ 2366 C+0].QQQQ.B0>0)THEN BEGIN P:=GETAVAIL;MEM[P].HH.B0:=F;MEM[P].HH.B1:=C+0; 2367 NEWCHARACTER:=P;GOTO 10;END;CHARWARNING(F,C);NEWCHARACTER:=0;10:END; 2368 {:582}{597:}PROCEDURE WRITEDVI(A,B:DVIINDEX);VAR K:DVIINDEX; 2369 BEGIN FOR K:=A TO B DO WRITE(DVIFILE,DVIBUF[K]);END; 2370 {:597}{598:}PROCEDURE DVISWAP; 2371 BEGIN IF DVILIMIT=DVIBUFSIZE THEN BEGIN WRITEDVI(0,HALFBUF-1); 2372 DVILIMIT:=HALFBUF;DVIOFFSET:=DVIOFFSET+DVIBUFSIZE;DVIPTR:=0; 2373 END ELSE BEGIN WRITEDVI(HALFBUF,DVIBUFSIZE-1);DVILIMIT:=DVIBUFSIZE;END; 2374 DVIGONE:=DVIGONE+HALFBUF;END;{:598}{600:}PROCEDURE DVIFOUR(X:INTEGER); 2375 BEGIN IF X>=0 THEN BEGIN DVIBUF[DVIPTR]:=X DIV 16777216; 2376 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP; 2377 END ELSE BEGIN X:=X+1073741824;X:=X+1073741824; 2378 BEGIN DVIBUF[DVIPTR]:=(X DIV 16777216)+128;DVIPTR:=DVIPTR+1; 2379 IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;X:=X MOD 16777216; 2380 BEGIN DVIBUF[DVIPTR]:=X DIV 65536;DVIPTR:=DVIPTR+1; 2381 IF DVIPTR=DVILIMIT THEN DVISWAP;END;X:=X MOD 65536; 2382 BEGIN DVIBUF[DVIPTR]:=X DIV 256;DVIPTR:=DVIPTR+1; 2383 IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=X MOD 256; 2384 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;END; 2385 {:600}{601:}PROCEDURE DVIPOP(L:INTEGER); 2386 BEGIN IF(L=DVIOFFSET+DVIPTR)AND(DVIPTR>0)THEN DVIPTR:=DVIPTR-1 ELSE 2387 BEGIN DVIBUF[DVIPTR]:=142;DVIPTR:=DVIPTR+1; 2388 IF DVIPTR=DVILIMIT THEN DVISWAP;END;END; 2389 {:601}{602:}PROCEDURE DVIFONTDEF(F:INTERNALFONTNUMBER); 2390 VAR K:POOLPOINTER;BEGIN BEGIN DVIBUF[DVIPTR]:=243;DVIPTR:=DVIPTR+1; 2391 IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=F-1; 2392 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2393 BEGIN DVIBUF[DVIPTR]:=FONTCHECK[F].B0-0;DVIPTR:=DVIPTR+1; 2394 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2395 BEGIN DVIBUF[DVIPTR]:=FONTCHECK[F].B1-0;DVIPTR:=DVIPTR+1; 2396 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2397 BEGIN DVIBUF[DVIPTR]:=FONTCHECK[F].B2-0;DVIPTR:=DVIPTR+1; 2398 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2399 BEGIN DVIBUF[DVIPTR]:=FONTCHECK[F].B3-0;DVIPTR:=DVIPTR+1; 2400 IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(FONTSIZE[F]); 2401 DVIFOUR(FONTDSIZE[F]); 2402 BEGIN DVIBUF[DVIPTR]:=(STRSTART[FONTAREA[F]+1]-STRSTART[FONTAREA[F]]); 2403 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2404 BEGIN DVIBUF[DVIPTR]:=(STRSTART[FONTNAME[F]+1]-STRSTART[FONTNAME[F]]); 2405 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2406 {603:}FOR K:=STRSTART[FONTAREA[F]]TO STRSTART[FONTAREA[F]+1]-1 DO BEGIN 2407 DVIBUF[DVIPTR]:=STRPOOL[K];DVIPTR:=DVIPTR+1; 2408 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2409 FOR K:=STRSTART[FONTNAME[F]]TO STRSTART[FONTNAME[F]+1]-1 DO BEGIN DVIBUF 2410 [DVIPTR]:=STRPOOL[K];DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP; 2411 END{:603};END;{:602}{607:}PROCEDURE MOVEMENT(W:SCALED;O:EIGHTBITS); 2412 LABEL 10,40,45,2,1;VAR MSTATE:SMALLNUMBER;P,Q:HALFWORD;K:INTEGER; 2413 BEGIN Q:=GETNODE(3);MEM[Q+1].INT:=W;MEM[Q+2].INT:=DVIOFFSET+DVIPTR; 2414 IF O=157 THEN BEGIN MEM[Q].HH.RH:=DOWNPTR;DOWNPTR:=Q; 2415 END ELSE BEGIN MEM[Q].HH.RH:=RIGHTPTR;RIGHTPTR:=Q;END; 2416 {611:}P:=MEM[Q].HH.RH;MSTATE:=0; 2417 WHILE P<>0 DO BEGIN IF MEM[P+1].INT=W THEN{612:}CASE MSTATE+MEM[P].HH.LH 2418 OF 3,4,15,16:IF MEM[P+2].INT<DVIGONE THEN GOTO 45 ELSE{613:}BEGIN K:=MEM 2419 [P+2].INT-DVIOFFSET;IF K<0 THEN K:=K+DVIBUFSIZE;DVIBUF[K]:=DVIBUF[K]+5; 2420 MEM[P].HH.LH:=1;GOTO 40;END{:613}; 2421 5,9,11:IF MEM[P+2].INT<DVIGONE THEN GOTO 45 ELSE{614:}BEGIN K:=MEM[P+2]. 2422 INT-DVIOFFSET;IF K<0 THEN K:=K+DVIBUFSIZE;DVIBUF[K]:=DVIBUF[K]+10; 2423 MEM[P].HH.LH:=2;GOTO 40;END{:614};1,2,8,13:GOTO 40; 2424 ELSE END{:612}ELSE CASE MSTATE+MEM[P].HH.LH OF 1:MSTATE:=6;2:MSTATE:=12; 2425 8,13:GOTO 45;ELSE END;P:=MEM[P].HH.RH;END;45:{:611}; 2426 {610:}MEM[Q].HH.LH:=3; 2427 IF ABS(W)>=8388608 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=O+3; 2428 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(W);GOTO 10; 2429 END;IF ABS(W)>=32768 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=O+2; 2430 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2431 IF W<0 THEN W:=W+16777216;BEGIN DVIBUF[DVIPTR]:=W DIV 65536; 2432 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;W:=W MOD 65536; 2433 GOTO 2;END;IF ABS(W)>=128 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=O+1; 2434 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2435 IF W<0 THEN W:=W+65536;GOTO 2;END;BEGIN DVIBUF[DVIPTR]:=O; 2436 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2437 IF W<0 THEN W:=W+256;GOTO 1;2:BEGIN DVIBUF[DVIPTR]:=W DIV 256; 2438 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2439 1:BEGIN DVIBUF[DVIPTR]:=W MOD 256;DVIPTR:=DVIPTR+1; 2440 IF DVIPTR=DVILIMIT THEN DVISWAP;END;GOTO 10{:610}; 2441 40:{609:}MEM[Q].HH.LH:=MEM[P].HH.LH; 2442 IF MEM[Q].HH.LH=1 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=O+4;DVIPTR:=DVIPTR+1; 2443 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2444 WHILE MEM[Q].HH.RH<>P DO BEGIN Q:=MEM[Q].HH.RH; 2445 CASE MEM[Q].HH.LH OF 3:MEM[Q].HH.LH:=5;4:MEM[Q].HH.LH:=6;ELSE END;END; 2446 END ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=O+9;DVIPTR:=DVIPTR+1; 2447 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2448 WHILE MEM[Q].HH.RH<>P DO BEGIN Q:=MEM[Q].HH.RH; 2449 CASE MEM[Q].HH.LH OF 3:MEM[Q].HH.LH:=4;5:MEM[Q].HH.LH:=6;ELSE END;END; 2450 END{:609};10:END;{:607}{615:}PROCEDURE PRUNEMOVEMENTS(L:INTEGER); 2451 LABEL 30,10;VAR P:HALFWORD; 2452 BEGIN WHILE DOWNPTR<>0 DO BEGIN IF MEM[DOWNPTR+2].INT<L THEN GOTO 30; 2453 P:=DOWNPTR;DOWNPTR:=MEM[P].HH.RH;FREENODE(P,3);END; 2454 30:WHILE RIGHTPTR<>0 DO BEGIN IF MEM[RIGHTPTR+2].INT<L THEN GOTO 10; 2455 P:=RIGHTPTR;RIGHTPTR:=MEM[P].HH.RH;FREENODE(P,3);END;10:END; 2456 {:615}{618:}PROCEDURE VLISTOUT;FORWARD; 2457 {:618}{619:}{1368:}PROCEDURE SPECIALOUT(P:HALFWORD); 2458 VAR OLDSETTING:0..21;K:POOLPOINTER; 2459 BEGIN IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH;END; 2460 IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; 2461 OLDSETTING:=SELECTOR;SELECTOR:=21; 2462 SHOWTOKENLIST(MEM[MEM[P+1].HH.RH].HH.RH,0,POOLSIZE-POOLPTR); 2463 SELECTOR:=OLDSETTING; 2464 BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(257,POOLSIZE-INITPOOLPTR);END; 2465 IF(POOLPTR-STRSTART[STRPTR])<256 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=239; 2466 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2467 BEGIN DVIBUF[DVIPTR]:=(POOLPTR-STRSTART[STRPTR]);DVIPTR:=DVIPTR+1; 2468 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2469 END ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=242;DVIPTR:=DVIPTR+1; 2470 IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR((POOLPTR-STRSTART[STRPTR])); 2471 END; 2472 FOR K:=STRSTART[STRPTR]TO POOLPTR-1 DO BEGIN DVIBUF[DVIPTR]:=STRPOOL[K]; 2473 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2474 POOLPTR:=STRSTART[STRPTR];END; 2475 {:1368}{1370:}PROCEDURE WRITEOUT(P:HALFWORD);VAR OLDSETTING:0..21; 2476 OLDMODE:INTEGER;J:SMALLNUMBER;Q,R:HALFWORD;BEGIN{1371:}Q:=GETAVAIL; 2477 MEM[Q].HH.LH:=637;R:=GETAVAIL;MEM[Q].HH.RH:=R;MEM[R].HH.LH:=6717; 2478 BEGINTOKENLIST(Q,4);BEGINTOKENLIST(MEM[P+1].HH.RH,15);Q:=GETAVAIL; 2479 MEM[Q].HH.LH:=379;BEGINTOKENLIST(Q,4);OLDMODE:=CURLIST.MODEFIELD; 2480 CURLIST.MODEFIELD:=0;CURCS:=WRITELOC;Q:=SCANTOKS(FALSE,TRUE);GETTOKEN; 2481 IF CURTOK<>6717 THEN{1372:}BEGIN BEGIN IF INTERACTION=3 THEN; 2482 PRINTNL(262);PRINT(1297);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1298; 2483 HELPLINE[0]:=1012;END;ERROR;REPEAT GETTOKEN;UNTIL CURTOK=6717; 2484 END{:1372};CURLIST.MODEFIELD:=OLDMODE;ENDTOKENLIST{:1371}; 2485 OLDSETTING:=SELECTOR;J:=MEM[P+1].HH.LH; 2486 IF WRITEOPEN[J]THEN SELECTOR:=J ELSE BEGIN IF(J=17)AND(SELECTOR=19)THEN 2487 SELECTOR:=18;PRINTNL(338);END;TOKENSHOW(DEFREF);PRINTLN; 2488 FLUSHLIST(DEFREF);SELECTOR:=OLDSETTING;END; 2489 {:1370}{1373:}PROCEDURE OUTWHAT(P:HALFWORD);VAR J:SMALLNUMBER; 2490 BEGIN CASE MEM[P].HH.B1 OF 0,1,2:{1374:}IF NOT DOINGLEADERS THEN BEGIN J 2491 :=MEM[P+1].HH.LH; 2492 IF MEM[P].HH.B1=1 THEN WRITEOUT(P)ELSE BEGIN IF WRITEOPEN[J]THEN ACLOSE( 2493 WRITEFILE[J]); 2494 IF MEM[P].HH.B1=2 THEN WRITEOPEN[J]:=FALSE ELSE IF J<16 THEN BEGIN 2495 CURNAME:=MEM[P+1].HH.RH;CURAREA:=MEM[P+2].HH.LH;CUREXT:=MEM[P+2].HH.RH; 2496 IF CUREXT=338 THEN CUREXT:=791;PACKFILENAME(CURNAME,CURAREA,CUREXT); 2497 WHILE NOT AOPENOUT(WRITEFILE[J])DO PROMPTFILENAME(1300,791); 2498 WRITEOPEN[J]:=TRUE;END;END;END{:1374};3:SPECIALOUT(P);4:; 2499 ELSE CONFUSION(1299)END;END;{:1373}PROCEDURE HLISTOUT;LABEL 21,13,14,15; 2500 VAR BASELINE:SCALED;LEFTEDGE:SCALED;SAVEH,SAVEV:SCALED;THISBOX:HALFWORD; 2501 GORDER:GLUEORD;GSIGN:0..2;P:HALFWORD;SAVELOC:INTEGER;LEADERBOX:HALFWORD; 2502 LEADERWD:SCALED;LX:SCALED;OUTERDOINGLEADERS:BOOLEAN;EDGE:SCALED; 2503 GLUETEMP:REAL;CURGLUE:REAL;CURG:SCALED;BEGIN CURG:=0;CURGLUE:=0.0; 2504 THISBOX:=TEMPPTR;GORDER:=MEM[THISBOX+5].HH.B1; 2505 GSIGN:=MEM[THISBOX+5].HH.B0;P:=MEM[THISBOX+5].HH.RH;CURS:=CURS+1; 2506 IF CURS>0 THEN BEGIN DVIBUF[DVIPTR]:=141;DVIPTR:=DVIPTR+1; 2507 IF DVIPTR=DVILIMIT THEN DVISWAP;END;IF CURS>MAXPUSH THEN MAXPUSH:=CURS; 2508 SAVELOC:=DVIOFFSET+DVIPTR;BASELINE:=CURV;LEFTEDGE:=CURH; 2509 WHILE P<>0 DO{620:}21:IF(P>=HIMEMMIN)THEN BEGIN IF CURH<>DVIH THEN BEGIN 2510 MOVEMENT(CURH-DVIH,143);DVIH:=CURH;END; 2511 IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; 2512 REPEAT F:=MEM[P].HH.B0;C:=MEM[P].HH.B1; 2513 IF F<>DVIF THEN{621:}BEGIN IF NOT FONTUSED[F]THEN BEGIN DVIFONTDEF(F); 2514 FONTUSED[F]:=TRUE;END;IF F<=64 THEN BEGIN DVIBUF[DVIPTR]:=F+170; 2515 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP; 2516 END ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=235;DVIPTR:=DVIPTR+1; 2517 IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=F-1; 2518 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;DVIF:=F; 2519 END{:621};IF C>=128 THEN BEGIN DVIBUF[DVIPTR]:=128;DVIPTR:=DVIPTR+1; 2520 IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=C-0; 2521 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2522 CURH:=CURH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+C].QQQQ.B0].INT; 2523 P:=MEM[P].HH.RH;UNTIL NOT(P>=HIMEMMIN);DVIH:=CURH; 2524 END ELSE{622:}BEGIN CASE MEM[P].HH.B0 OF 0,1:{623:}IF MEM[P+5].HH.RH=0 2525 THEN CURH:=CURH+MEM[P+1].INT ELSE BEGIN SAVEH:=DVIH;SAVEV:=DVIV; 2526 CURV:=BASELINE+MEM[P+4].INT;TEMPPTR:=P;EDGE:=CURH; 2527 IF MEM[P].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT;DVIH:=SAVEH;DVIV:=SAVEV; 2528 CURH:=EDGE+MEM[P+1].INT;CURV:=BASELINE;END{:623}; 2529 2:BEGIN RULEHT:=MEM[P+3].INT;RULEDP:=MEM[P+2].INT;RULEWD:=MEM[P+1].INT; 2530 GOTO 14;END;8:{1367:}OUTWHAT(P){:1367};10:{625:}BEGIN G:=MEM[P+1].HH.LH; 2531 RULEWD:=MEM[G+1].INT-CURG; 2532 IF GSIGN<>0 THEN BEGIN IF GSIGN=1 THEN BEGIN IF MEM[G].HH.B0=GORDER THEN 2533 BEGIN CURGLUE:=CURGLUE+MEM[G+2].INT;GLUETEMP:=MEM[THISBOX+6].GR*CURGLUE; 2534 IF GLUETEMP>1000000000.0 THEN GLUETEMP:=1000000000.0 ELSE IF GLUETEMP< 2535 -1000000000.0 THEN GLUETEMP:=-1000000000.0;CURG:=ROUND(GLUETEMP);END; 2536 END ELSE IF MEM[G].HH.B1=GORDER THEN BEGIN CURGLUE:=CURGLUE-MEM[G+3].INT 2537 ;GLUETEMP:=MEM[THISBOX+6].GR*CURGLUE; 2538 IF GLUETEMP>1000000000.0 THEN GLUETEMP:=1000000000.0 ELSE IF GLUETEMP< 2539 -1000000000.0 THEN GLUETEMP:=-1000000000.0;CURG:=ROUND(GLUETEMP);END; 2540 END;RULEWD:=RULEWD+CURG; 2541 IF MEM[P].HH.B1>=100 THEN{626:}BEGIN LEADERBOX:=MEM[P+1].HH.RH; 2542 IF MEM[LEADERBOX].HH.B0=2 THEN BEGIN RULEHT:=MEM[LEADERBOX+3].INT; 2543 RULEDP:=MEM[LEADERBOX+2].INT;GOTO 14;END;LEADERWD:=MEM[LEADERBOX+1].INT; 2544 IF(LEADERWD>0)AND(RULEWD>0)THEN BEGIN RULEWD:=RULEWD+10; 2545 EDGE:=CURH+RULEWD;LX:=0; 2546 {627:}IF MEM[P].HH.B1=100 THEN BEGIN SAVEH:=CURH; 2547 CURH:=LEFTEDGE+LEADERWD*((CURH-LEFTEDGE)DIV LEADERWD); 2548 IF CURH<SAVEH THEN CURH:=CURH+LEADERWD; 2549 END ELSE BEGIN LQ:=RULEWD DIV LEADERWD;LR:=RULEWD MOD LEADERWD; 2550 IF MEM[P].HH.B1=101 THEN CURH:=CURH+(LR DIV 2)ELSE BEGIN LX:=LR DIV(LQ+1 2551 );CURH:=CURH+((LR-(LQ-1)*LX)DIV 2);END;END{:627}; 2552 WHILE CURH+LEADERWD<=EDGE DO{628:}BEGIN CURV:=BASELINE+MEM[LEADERBOX+4]. 2553 INT;IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; 2554 SAVEV:=DVIV;IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH; 2555 END;SAVEH:=DVIH;TEMPPTR:=LEADERBOX;OUTERDOINGLEADERS:=DOINGLEADERS; 2556 DOINGLEADERS:=TRUE; 2557 IF MEM[LEADERBOX].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT; 2558 DOINGLEADERS:=OUTERDOINGLEADERS;DVIV:=SAVEV;DVIH:=SAVEH;CURV:=BASELINE; 2559 CURH:=SAVEH+LEADERWD+LX;END{:628};CURH:=EDGE-10;GOTO 15;END;END{:626}; 2560 GOTO 13;END{:625};11,9:CURH:=CURH+MEM[P+1].INT; 2561 6:{652:}BEGIN MEM[29988]:=MEM[P+1];MEM[29988].HH.RH:=MEM[P].HH.RH; 2562 P:=29988;GOTO 21;END{:652};ELSE END;GOTO 15; 2563 14:{624:}IF(RULEHT=-1073741824)THEN RULEHT:=MEM[THISBOX+3].INT; 2564 IF(RULEDP=-1073741824)THEN RULEDP:=MEM[THISBOX+2].INT; 2565 RULEHT:=RULEHT+RULEDP; 2566 IF(RULEHT>0)AND(RULEWD>0)THEN BEGIN IF CURH<>DVIH THEN BEGIN MOVEMENT( 2567 CURH-DVIH,143);DVIH:=CURH;END;CURV:=BASELINE+RULEDP; 2568 IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; 2569 BEGIN DVIBUF[DVIPTR]:=132;DVIPTR:=DVIPTR+1; 2570 IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(RULEHT);DVIFOUR(RULEWD); 2571 CURV:=BASELINE;DVIH:=DVIH+RULEWD;END{:624};13:CURH:=CURH+RULEWD; 2572 15:P:=MEM[P].HH.RH;END{:622}{:620};PRUNEMOVEMENTS(SAVELOC); 2573 IF CURS>0 THEN DVIPOP(SAVELOC);CURS:=CURS-1;END; 2574 {:619}{629:}PROCEDURE VLISTOUT;LABEL 13,14,15;VAR LEFTEDGE:SCALED; 2575 TOPEDGE:SCALED;SAVEH,SAVEV:SCALED;THISBOX:HALFWORD;GORDER:GLUEORD; 2576 GSIGN:0..2;P:HALFWORD;SAVELOC:INTEGER;LEADERBOX:HALFWORD; 2577 LEADERHT:SCALED;LX:SCALED;OUTERDOINGLEADERS:BOOLEAN;EDGE:SCALED; 2578 GLUETEMP:REAL;CURGLUE:REAL;CURG:SCALED;BEGIN CURG:=0;CURGLUE:=0.0; 2579 THISBOX:=TEMPPTR;GORDER:=MEM[THISBOX+5].HH.B1; 2580 GSIGN:=MEM[THISBOX+5].HH.B0;P:=MEM[THISBOX+5].HH.RH;CURS:=CURS+1; 2581 IF CURS>0 THEN BEGIN DVIBUF[DVIPTR]:=141;DVIPTR:=DVIPTR+1; 2582 IF DVIPTR=DVILIMIT THEN DVISWAP;END;IF CURS>MAXPUSH THEN MAXPUSH:=CURS; 2583 SAVELOC:=DVIOFFSET+DVIPTR;LEFTEDGE:=CURH;CURV:=CURV-MEM[THISBOX+3].INT; 2584 TOPEDGE:=CURV; 2585 WHILE P<>0 DO{630:}BEGIN IF(P>=HIMEMMIN)THEN CONFUSION(828)ELSE{631:} 2586 BEGIN CASE MEM[P].HH.B0 OF 0,1:{632:}IF MEM[P+5].HH.RH=0 THEN CURV:=CURV 2587 +MEM[P+3].INT+MEM[P+2].INT ELSE BEGIN CURV:=CURV+MEM[P+3].INT; 2588 IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; 2589 SAVEH:=DVIH;SAVEV:=DVIV;CURH:=LEFTEDGE+MEM[P+4].INT;TEMPPTR:=P; 2590 IF MEM[P].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT;DVIH:=SAVEH;DVIV:=SAVEV; 2591 CURV:=SAVEV+MEM[P+2].INT;CURH:=LEFTEDGE;END{:632}; 2592 2:BEGIN RULEHT:=MEM[P+3].INT;RULEDP:=MEM[P+2].INT;RULEWD:=MEM[P+1].INT; 2593 GOTO 14;END;8:{1366:}OUTWHAT(P){:1366};10:{634:}BEGIN G:=MEM[P+1].HH.LH; 2594 RULEHT:=MEM[G+1].INT-CURG; 2595 IF GSIGN<>0 THEN BEGIN IF GSIGN=1 THEN BEGIN IF MEM[G].HH.B0=GORDER THEN 2596 BEGIN CURGLUE:=CURGLUE+MEM[G+2].INT;GLUETEMP:=MEM[THISBOX+6].GR*CURGLUE; 2597 IF GLUETEMP>1000000000.0 THEN GLUETEMP:=1000000000.0 ELSE IF GLUETEMP< 2598 -1000000000.0 THEN GLUETEMP:=-1000000000.0;CURG:=ROUND(GLUETEMP);END; 2599 END ELSE IF MEM[G].HH.B1=GORDER THEN BEGIN CURGLUE:=CURGLUE-MEM[G+3].INT 2600 ;GLUETEMP:=MEM[THISBOX+6].GR*CURGLUE; 2601 IF GLUETEMP>1000000000.0 THEN GLUETEMP:=1000000000.0 ELSE IF GLUETEMP< 2602 -1000000000.0 THEN GLUETEMP:=-1000000000.0;CURG:=ROUND(GLUETEMP);END; 2603 END;RULEHT:=RULEHT+CURG; 2604 IF MEM[P].HH.B1>=100 THEN{635:}BEGIN LEADERBOX:=MEM[P+1].HH.RH; 2605 IF MEM[LEADERBOX].HH.B0=2 THEN BEGIN RULEWD:=MEM[LEADERBOX+1].INT; 2606 RULEDP:=0;GOTO 14;END; 2607 LEADERHT:=MEM[LEADERBOX+3].INT+MEM[LEADERBOX+2].INT; 2608 IF(LEADERHT>0)AND(RULEHT>0)THEN BEGIN RULEHT:=RULEHT+10; 2609 EDGE:=CURV+RULEHT;LX:=0; 2610 {636:}IF MEM[P].HH.B1=100 THEN BEGIN SAVEV:=CURV; 2611 CURV:=TOPEDGE+LEADERHT*((CURV-TOPEDGE)DIV LEADERHT); 2612 IF CURV<SAVEV THEN CURV:=CURV+LEADERHT; 2613 END ELSE BEGIN LQ:=RULEHT DIV LEADERHT;LR:=RULEHT MOD LEADERHT; 2614 IF MEM[P].HH.B1=101 THEN CURV:=CURV+(LR DIV 2)ELSE BEGIN LX:=LR DIV(LQ+1 2615 );CURV:=CURV+((LR-(LQ-1)*LX)DIV 2);END;END{:636}; 2616 WHILE CURV+LEADERHT<=EDGE DO{637:}BEGIN CURH:=LEFTEDGE+MEM[LEADERBOX+4]. 2617 INT;IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH;END; 2618 SAVEH:=DVIH;CURV:=CURV+MEM[LEADERBOX+3].INT; 2619 IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; 2620 SAVEV:=DVIV;TEMPPTR:=LEADERBOX;OUTERDOINGLEADERS:=DOINGLEADERS; 2621 DOINGLEADERS:=TRUE; 2622 IF MEM[LEADERBOX].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT; 2623 DOINGLEADERS:=OUTERDOINGLEADERS;DVIV:=SAVEV;DVIH:=SAVEH;CURH:=LEFTEDGE; 2624 CURV:=SAVEV-MEM[LEADERBOX+3].INT+LEADERHT+LX;END{:637};CURV:=EDGE-10; 2625 GOTO 15;END;END{:635};GOTO 13;END{:634};11:CURV:=CURV+MEM[P+1].INT; 2626 ELSE END;GOTO 15; 2627 14:{633:}IF(RULEWD=-1073741824)THEN RULEWD:=MEM[THISBOX+1].INT; 2628 RULEHT:=RULEHT+RULEDP;CURV:=CURV+RULEHT; 2629 IF(RULEHT>0)AND(RULEWD>0)THEN BEGIN IF CURH<>DVIH THEN BEGIN MOVEMENT( 2630 CURH-DVIH,143);DVIH:=CURH;END; 2631 IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; 2632 BEGIN DVIBUF[DVIPTR]:=137;DVIPTR:=DVIPTR+1; 2633 IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(RULEHT);DVIFOUR(RULEWD);END; 2634 GOTO 15{:633};13:CURV:=CURV+RULEHT;END{:631};15:P:=MEM[P].HH.RH; 2635 END{:630};PRUNEMOVEMENTS(SAVELOC);IF CURS>0 THEN DVIPOP(SAVELOC); 2636 CURS:=CURS-1;END;{:629}{638:}PROCEDURE SHIPOUT(P:HALFWORD);LABEL 30; 2637 VAR PAGELOC:INTEGER;J,K:0..9;S:POOLPOINTER;OLDSETTING:0..21; 2638 BEGIN IF EQTB[5297].INT>0 THEN BEGIN PRINTNL(338);PRINTLN;PRINT(829); 2639 END;IF TERMOFFSET>MAXPRINTLINE-9 THEN PRINTLN ELSE IF(TERMOFFSET>0)OR( 2640 FILEOFFSET>0)THEN PRINTCHAR(32);PRINTCHAR(91);J:=9; 2641 WHILE(EQTB[5318+J].INT=0)AND(J>0)DO J:=J-1; 2642 FOR K:=0 TO J DO BEGIN PRINTINT(EQTB[5318+K].INT); 2643 IF K<J THEN PRINTCHAR(46);END;; 2644 IF EQTB[5297].INT>0 THEN BEGIN PRINTCHAR(93);BEGINDIAGNOSTIC;SHOWBOX(P); 2645 ENDDIAGNOSTIC(TRUE);END; 2646 {640:}{641:}IF(MEM[P+3].INT>1073741823)OR(MEM[P+2].INT>1073741823)OR(MEM 2647 [P+3].INT+MEM[P+2].INT+EQTB[5849].INT>1073741823)OR(MEM[P+1].INT+EQTB[ 2648 5848].INT>1073741823)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 2649 PRINTNL(262);PRINT(833);END;BEGIN HELPPTR:=2;HELPLINE[1]:=834; 2650 HELPLINE[0]:=835;END;ERROR; 2651 IF EQTB[5297].INT<=0 THEN BEGIN BEGINDIAGNOSTIC;PRINTNL(836);SHOWBOX(P); 2652 ENDDIAGNOSTIC(TRUE);END;GOTO 30;END; 2653 IF MEM[P+3].INT+MEM[P+2].INT+EQTB[5849].INT>MAXV THEN MAXV:=MEM[P+3].INT 2654 +MEM[P+2].INT+EQTB[5849].INT; 2655 IF MEM[P+1].INT+EQTB[5848].INT>MAXH THEN MAXH:=MEM[P+1].INT+EQTB[5848]. 2656 INT{:641};{617:}DVIH:=0;DVIV:=0;CURH:=EQTB[5848].INT;DVIF:=0; 2657 IF OUTPUTFILENAME=0 THEN BEGIN IF JOBNAME=0 THEN OPENLOGFILE; 2658 PACKJOBNAME(794);WHILE NOT BOPENOUT(DVIFILE)DO PROMPTFILENAME(795,794); 2659 OUTPUTFILENAME:=BMAKENAMESTRING(DVIFILE);END; 2660 IF TOTALPAGES=0 THEN BEGIN BEGIN DVIBUF[DVIPTR]:=247;DVIPTR:=DVIPTR+1; 2661 IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DVIBUF[DVIPTR]:=2; 2662 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(25400000); 2663 DVIFOUR(473628672);PREPAREMAG;DVIFOUR(EQTB[5280].INT); 2664 OLDSETTING:=SELECTOR;SELECTOR:=21;PRINT(827);PRINTINT(EQTB[5286].INT); 2665 PRINTCHAR(46);PRINTTWO(EQTB[5285].INT);PRINTCHAR(46); 2666 PRINTTWO(EQTB[5284].INT);PRINTCHAR(58);PRINTTWO(EQTB[5283].INT DIV 60); 2667 PRINTTWO(EQTB[5283].INT MOD 60);SELECTOR:=OLDSETTING; 2668 BEGIN DVIBUF[DVIPTR]:=(POOLPTR-STRSTART[STRPTR]);DVIPTR:=DVIPTR+1; 2669 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2670 FOR S:=STRSTART[STRPTR]TO POOLPTR-1 DO BEGIN DVIBUF[DVIPTR]:=STRPOOL[S]; 2671 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2672 POOLPTR:=STRSTART[STRPTR];END{:617};PAGELOC:=DVIOFFSET+DVIPTR; 2673 BEGIN DVIBUF[DVIPTR]:=139;DVIPTR:=DVIPTR+1; 2674 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2675 FOR K:=0 TO 9 DO DVIFOUR(EQTB[5318+K].INT);DVIFOUR(LASTBOP); 2676 LASTBOP:=PAGELOC;CURV:=MEM[P+3].INT+EQTB[5849].INT;TEMPPTR:=P; 2677 IF MEM[P].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT;BEGIN DVIBUF[DVIPTR]:=140; 2678 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 2679 TOTALPAGES:=TOTALPAGES+1;CURS:=-1;30:{:640}; 2680 IF EQTB[5297].INT<=0 THEN PRINTCHAR(93);DEADCYCLES:=0;; 2681 {639:}{IF EQTB[5294].INT>1 THEN BEGIN PRINTNL(830);PRINTINT(VARUSED); 2682 PRINTCHAR(38);PRINTINT(DYNUSED);PRINTCHAR(59);END;}FLUSHNODELIST(P); 2683 {IF EQTB[5294].INT>1 THEN BEGIN PRINT(831);PRINTINT(VARUSED); 2684 PRINTCHAR(38);PRINTINT(DYNUSED);PRINT(832); 2685 PRINTINT(HIMEMMIN-LOMEMMAX-1);PRINTLN;END;}{:639};END; 2686 {:638}{645:}PROCEDURE SCANSPEC(C:GROUPCODE;THREECODES:BOOLEAN);LABEL 40; 2687 VAR S:INTEGER;SPECCODE:0..1; 2688 BEGIN IF THREECODES THEN S:=SAVESTACK[SAVEPTR+0].INT; 2689 IF SCANKEYWORD(842)THEN SPECCODE:=0 ELSE IF SCANKEYWORD(843)THEN 2690 SPECCODE:=1 ELSE BEGIN SPECCODE:=1;CURVAL:=0;GOTO 40;END; 2691 SCANDIMEN(FALSE,FALSE,FALSE); 2692 40:IF THREECODES THEN BEGIN SAVESTACK[SAVEPTR+0].INT:=S; 2693 SAVEPTR:=SAVEPTR+1;END;SAVESTACK[SAVEPTR+0].INT:=SPECCODE; 2694 SAVESTACK[SAVEPTR+1].INT:=CURVAL;SAVEPTR:=SAVEPTR+2;NEWSAVELEVEL(C); 2695 SCANLEFTBRACE;END;{:645}{649:}FUNCTION HPACK(P:HALFWORD;W:SCALED; 2696 M:SMALLNUMBER):HALFWORD;LABEL 21,50,10;VAR R:HALFWORD;Q:HALFWORD; 2697 H,D,X:SCALED;S:SCALED;G:HALFWORD;O:GLUEORD;F:INTERNALFONTNUMBER; 2698 I:FOURQUARTERS;HD:EIGHTBITS;BEGIN LASTBADNESS:=0;R:=GETNODE(7); 2699 MEM[R].HH.B0:=0;MEM[R].HH.B1:=0;MEM[R+4].INT:=0;Q:=R+5;MEM[Q].HH.RH:=P; 2700 H:=0;{650:}D:=0;X:=0;TOTALSTRETCH[0]:=0;TOTALSHRINK[0]:=0; 2701 TOTALSTRETCH[1]:=0;TOTALSHRINK[1]:=0;TOTALSTRETCH[2]:=0; 2702 TOTALSHRINK[2]:=0;TOTALSTRETCH[3]:=0;TOTALSHRINK[3]:=0{:650}; 2703 WHILE P<>0 DO{651:}BEGIN 21:WHILE(P>=HIMEMMIN)DO{654:}BEGIN F:=MEM[P].HH 2704 .B0;I:=FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ;HD:=I.B1-0; 2705 X:=X+FONTINFO[WIDTHBASE[F]+I.B0].INT; 2706 S:=FONTINFO[HEIGHTBASE[F]+(HD)DIV 16].INT;IF S>H THEN H:=S; 2707 S:=FONTINFO[DEPTHBASE[F]+(HD)MOD 16].INT;IF S>D THEN D:=S; 2708 P:=MEM[P].HH.RH;END{:654}; 2709 IF P<>0 THEN BEGIN CASE MEM[P].HH.B0 OF 0,1,2,13:{653:}BEGIN X:=X+MEM[P 2710 +1].INT;IF MEM[P].HH.B0>=2 THEN S:=0 ELSE S:=MEM[P+4].INT; 2711 IF MEM[P+3].INT-S>H THEN H:=MEM[P+3].INT-S; 2712 IF MEM[P+2].INT+S>D THEN D:=MEM[P+2].INT+S;END{:653}; 2713 3,4,5:IF ADJUSTTAIL<>0 THEN{655:}BEGIN WHILE MEM[Q].HH.RH<>P DO Q:=MEM[Q 2714 ].HH.RH; 2715 IF MEM[P].HH.B0=5 THEN BEGIN MEM[ADJUSTTAIL].HH.RH:=MEM[P+1].INT; 2716 WHILE MEM[ADJUSTTAIL].HH.RH<>0 DO ADJUSTTAIL:=MEM[ADJUSTTAIL].HH.RH; 2717 P:=MEM[P].HH.RH;FREENODE(MEM[Q].HH.RH,2); 2718 END ELSE BEGIN MEM[ADJUSTTAIL].HH.RH:=P;ADJUSTTAIL:=P;P:=MEM[P].HH.RH; 2719 END;MEM[Q].HH.RH:=P;P:=Q;END{:655};8:{1360:}{:1360}; 2720 10:{656:}BEGIN G:=MEM[P+1].HH.LH;X:=X+MEM[G+1].INT;O:=MEM[G].HH.B0; 2721 TOTALSTRETCH[O]:=TOTALSTRETCH[O]+MEM[G+2].INT;O:=MEM[G].HH.B1; 2722 TOTALSHRINK[O]:=TOTALSHRINK[O]+MEM[G+3].INT; 2723 IF MEM[P].HH.B1>=100 THEN BEGIN G:=MEM[P+1].HH.RH; 2724 IF MEM[G+3].INT>H THEN H:=MEM[G+3].INT; 2725 IF MEM[G+2].INT>D THEN D:=MEM[G+2].INT;END;END{:656}; 2726 11,9:X:=X+MEM[P+1].INT;6:{652:}BEGIN MEM[29988]:=MEM[P+1]; 2727 MEM[29988].HH.RH:=MEM[P].HH.RH;P:=29988;GOTO 21;END{:652};ELSE END; 2728 P:=MEM[P].HH.RH;END;END{:651}; 2729 IF ADJUSTTAIL<>0 THEN MEM[ADJUSTTAIL].HH.RH:=0;MEM[R+3].INT:=H; 2730 MEM[R+2].INT:=D;{657:}IF M=1 THEN W:=X+W;MEM[R+1].INT:=W;X:=W-X; 2731 IF X=0 THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0;MEM[R+6].GR:=0.0; 2732 GOTO 10; 2733 END ELSE IF X>0 THEN{658:}BEGIN{659:}IF TOTALSTRETCH[3]<>0 THEN O:=3 2734 ELSE IF TOTALSTRETCH[2]<>0 THEN O:=2 ELSE IF TOTALSTRETCH[1]<>0 THEN O:= 2735 1 ELSE O:=0{:659};MEM[R+5].HH.B1:=O;MEM[R+5].HH.B0:=1; 2736 IF TOTALSTRETCH[O]<>0 THEN MEM[R+6].GR:=X/TOTALSTRETCH[O]ELSE BEGIN MEM[ 2737 R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END; 2738 IF O=0 THEN IF MEM[R+5].HH.RH<>0 THEN{660:}BEGIN LASTBADNESS:=BADNESS(X, 2739 TOTALSTRETCH[0]);IF LASTBADNESS>EQTB[5289].INT THEN BEGIN PRINTLN; 2740 IF LASTBADNESS>100 THEN PRINTNL(844)ELSE PRINTNL(845);PRINT(846); 2741 PRINTINT(LASTBADNESS);GOTO 50;END;END{:660};GOTO 10; 2742 END{:658}ELSE{664:}BEGIN{665:}IF TOTALSHRINK[3]<>0 THEN O:=3 ELSE IF 2743 TOTALSHRINK[2]<>0 THEN O:=2 ELSE IF TOTALSHRINK[1]<>0 THEN O:=1 ELSE O:= 2744 0{:665};MEM[R+5].HH.B1:=O;MEM[R+5].HH.B0:=2; 2745 IF TOTALSHRINK[O]<>0 THEN MEM[R+6].GR:=(-X)/TOTALSHRINK[O]ELSE BEGIN MEM 2746 [R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END; 2747 IF(TOTALSHRINK[O]<-X)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN BEGIN 2748 LASTBADNESS:=1000000;MEM[R+6].GR:=1.0; 2749 {666:}IF(-X-TOTALSHRINK[0]>EQTB[5838].INT)OR(EQTB[5289].INT<100)THEN 2750 BEGIN IF(EQTB[5846].INT>0)AND(-X-TOTALSHRINK[0]>EQTB[5838].INT)THEN 2751 BEGIN WHILE MEM[Q].HH.RH<>0 DO Q:=MEM[Q].HH.RH;MEM[Q].HH.RH:=NEWRULE; 2752 MEM[MEM[Q].HH.RH+1].INT:=EQTB[5846].INT;END;PRINTLN;PRINTNL(852); 2753 PRINTSCALED(-X-TOTALSHRINK[0]);PRINT(853);GOTO 50;END{:666}; 2754 END ELSE IF O=0 THEN IF MEM[R+5].HH.RH<>0 THEN{667:}BEGIN LASTBADNESS:= 2755 BADNESS(-X,TOTALSHRINK[0]); 2756 IF LASTBADNESS>EQTB[5289].INT THEN BEGIN PRINTLN;PRINTNL(854); 2757 PRINTINT(LASTBADNESS);GOTO 50;END;END{:667};GOTO 10;END{:664}{:657}; 2758 50:{663:}IF OUTPUTACTIVE THEN PRINT(847)ELSE BEGIN IF PACKBEGINLINE<>0 2759 THEN BEGIN IF PACKBEGINLINE>0 THEN PRINT(848)ELSE PRINT(849); 2760 PRINTINT(ABS(PACKBEGINLINE));PRINT(850);END ELSE PRINT(851); 2761 PRINTINT(LINE);END;PRINTLN;FONTINSHORTDISPLAY:=0; 2762 SHORTDISPLAY(MEM[R+5].HH.RH);PRINTLN;BEGINDIAGNOSTIC;SHOWBOX(R); 2763 ENDDIAGNOSTIC(TRUE){:663};10:HPACK:=R;END; 2764 {:649}{668:}FUNCTION VPACKAGE(P:HALFWORD;H:SCALED;M:SMALLNUMBER; 2765 L:SCALED):HALFWORD;LABEL 50,10;VAR R:HALFWORD;W,D,X:SCALED;S:SCALED; 2766 G:HALFWORD;O:GLUEORD;BEGIN LASTBADNESS:=0;R:=GETNODE(7);MEM[R].HH.B0:=1; 2767 MEM[R].HH.B1:=0;MEM[R+4].INT:=0;MEM[R+5].HH.RH:=P;W:=0;{650:}D:=0;X:=0; 2768 TOTALSTRETCH[0]:=0;TOTALSHRINK[0]:=0;TOTALSTRETCH[1]:=0; 2769 TOTALSHRINK[1]:=0;TOTALSTRETCH[2]:=0;TOTALSHRINK[2]:=0; 2770 TOTALSTRETCH[3]:=0;TOTALSHRINK[3]:=0{:650}; 2771 WHILE P<>0 DO{669:}BEGIN IF(P>=HIMEMMIN)THEN CONFUSION(855)ELSE CASE MEM 2772 [P].HH.B0 OF 0,1,2,13:{670:}BEGIN X:=X+D+MEM[P+3].INT;D:=MEM[P+2].INT; 2773 IF MEM[P].HH.B0>=2 THEN S:=0 ELSE S:=MEM[P+4].INT; 2774 IF MEM[P+1].INT+S>W THEN W:=MEM[P+1].INT+S;END{:670};8:{1359:}{:1359}; 2775 10:{671:}BEGIN X:=X+D;D:=0;G:=MEM[P+1].HH.LH;X:=X+MEM[G+1].INT; 2776 O:=MEM[G].HH.B0;TOTALSTRETCH[O]:=TOTALSTRETCH[O]+MEM[G+2].INT; 2777 O:=MEM[G].HH.B1;TOTALSHRINK[O]:=TOTALSHRINK[O]+MEM[G+3].INT; 2778 IF MEM[P].HH.B1>=100 THEN BEGIN G:=MEM[P+1].HH.RH; 2779 IF MEM[G+1].INT>W THEN W:=MEM[G+1].INT;END;END{:671}; 2780 11:BEGIN X:=X+D+MEM[P+1].INT;D:=0;END;ELSE END;P:=MEM[P].HH.RH; 2781 END{:669};MEM[R+1].INT:=W;IF D>L THEN BEGIN X:=X+D-L;MEM[R+2].INT:=L; 2782 END ELSE MEM[R+2].INT:=D;{672:}IF M=1 THEN H:=X+H;MEM[R+3].INT:=H; 2783 X:=H-X;IF X=0 THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0; 2784 MEM[R+6].GR:=0.0;GOTO 10; 2785 END ELSE IF X>0 THEN{673:}BEGIN{659:}IF TOTALSTRETCH[3]<>0 THEN O:=3 2786 ELSE IF TOTALSTRETCH[2]<>0 THEN O:=2 ELSE IF TOTALSTRETCH[1]<>0 THEN O:= 2787 1 ELSE O:=0{:659};MEM[R+5].HH.B1:=O;MEM[R+5].HH.B0:=1; 2788 IF TOTALSTRETCH[O]<>0 THEN MEM[R+6].GR:=X/TOTALSTRETCH[O]ELSE BEGIN MEM[ 2789 R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END; 2790 IF O=0 THEN IF MEM[R+5].HH.RH<>0 THEN{674:}BEGIN LASTBADNESS:=BADNESS(X, 2791 TOTALSTRETCH[0]);IF LASTBADNESS>EQTB[5290].INT THEN BEGIN PRINTLN; 2792 IF LASTBADNESS>100 THEN PRINTNL(844)ELSE PRINTNL(845);PRINT(856); 2793 PRINTINT(LASTBADNESS);GOTO 50;END;END{:674};GOTO 10; 2794 END{:673}ELSE{676:}BEGIN{665:}IF TOTALSHRINK[3]<>0 THEN O:=3 ELSE IF 2795 TOTALSHRINK[2]<>0 THEN O:=2 ELSE IF TOTALSHRINK[1]<>0 THEN O:=1 ELSE O:= 2796 0{:665};MEM[R+5].HH.B1:=O;MEM[R+5].HH.B0:=2; 2797 IF TOTALSHRINK[O]<>0 THEN MEM[R+6].GR:=(-X)/TOTALSHRINK[O]ELSE BEGIN MEM 2798 [R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END; 2799 IF(TOTALSHRINK[O]<-X)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN BEGIN 2800 LASTBADNESS:=1000000;MEM[R+6].GR:=1.0; 2801 {677:}IF(-X-TOTALSHRINK[0]>EQTB[5839].INT)OR(EQTB[5290].INT<100)THEN 2802 BEGIN PRINTLN;PRINTNL(857);PRINTSCALED(-X-TOTALSHRINK[0]);PRINT(858); 2803 GOTO 50;END{:677}; 2804 END ELSE IF O=0 THEN IF MEM[R+5].HH.RH<>0 THEN{678:}BEGIN LASTBADNESS:= 2805 BADNESS(-X,TOTALSHRINK[0]); 2806 IF LASTBADNESS>EQTB[5290].INT THEN BEGIN PRINTLN;PRINTNL(859); 2807 PRINTINT(LASTBADNESS);GOTO 50;END;END{:678};GOTO 10;END{:676}{:672}; 2808 50:{675:}IF OUTPUTACTIVE THEN PRINT(847)ELSE BEGIN IF PACKBEGINLINE<>0 2809 THEN BEGIN PRINT(849);PRINTINT(ABS(PACKBEGINLINE));PRINT(850); 2810 END ELSE PRINT(851);PRINTINT(LINE);PRINTLN;END;BEGINDIAGNOSTIC; 2811 SHOWBOX(R);ENDDIAGNOSTIC(TRUE){:675};10:VPACKAGE:=R;END; 2812 {:668}{679:}PROCEDURE APPENDTOVLIST(B:HALFWORD);VAR D:SCALED;P:HALFWORD; 2813 BEGIN IF CURLIST.AUXFIELD.INT>-65536000 THEN BEGIN D:=MEM[EQTB[2883].HH. 2814 RH+1].INT-CURLIST.AUXFIELD.INT-MEM[B+3].INT; 2815 IF D<EQTB[5832].INT THEN P:=NEWPARAMGLUE(0)ELSE BEGIN P:=NEWSKIPPARAM(1) 2816 ;MEM[TEMPPTR+1].INT:=D;END;MEM[CURLIST.TAILFIELD].HH.RH:=P; 2817 CURLIST.TAILFIELD:=P;END;MEM[CURLIST.TAILFIELD].HH.RH:=B; 2818 CURLIST.TAILFIELD:=B;CURLIST.AUXFIELD.INT:=MEM[B+2].INT;END; 2819 {:679}{686:}FUNCTION NEWNOAD:HALFWORD;VAR P:HALFWORD; 2820 BEGIN P:=GETNODE(4);MEM[P].HH.B0:=16;MEM[P].HH.B1:=0; 2821 MEM[P+1].HH:=EMPTYFIELD;MEM[P+3].HH:=EMPTYFIELD;MEM[P+2].HH:=EMPTYFIELD; 2822 NEWNOAD:=P;END;{:686}{688:}FUNCTION NEWSTYLE(S:SMALLNUMBER):HALFWORD; 2823 VAR P:HALFWORD;BEGIN P:=GETNODE(3);MEM[P].HH.B0:=14;MEM[P].HH.B1:=S; 2824 MEM[P+1].INT:=0;MEM[P+2].INT:=0;NEWSTYLE:=P;END; 2825 {:688}{689:}FUNCTION NEWCHOICE:HALFWORD;VAR P:HALFWORD; 2826 BEGIN P:=GETNODE(3);MEM[P].HH.B0:=15;MEM[P].HH.B1:=0;MEM[P+1].HH.LH:=0; 2827 MEM[P+1].HH.RH:=0;MEM[P+2].HH.LH:=0;MEM[P+2].HH.RH:=0;NEWCHOICE:=P;END; 2828 {:689}{693:}PROCEDURE SHOWINFO;BEGIN SHOWNODELIST(MEM[TEMPPTR].HH.LH); 2829 END;{:693}{704:}FUNCTION FRACTIONRULE(T:SCALED):HALFWORD;VAR P:HALFWORD; 2830 BEGIN P:=NEWRULE;MEM[P+3].INT:=T;MEM[P+2].INT:=0;FRACTIONRULE:=P;END; 2831 {:704}{705:}FUNCTION OVERBAR(B:HALFWORD;K,T:SCALED):HALFWORD; 2832 VAR P,Q:HALFWORD;BEGIN P:=NEWKERN(K);MEM[P].HH.RH:=B;Q:=FRACTIONRULE(T); 2833 MEM[Q].HH.RH:=P;P:=NEWKERN(T);MEM[P].HH.RH:=Q; 2834 OVERBAR:=VPACKAGE(P,0,1,1073741823);END; 2835 {:705}{706:}{709:}FUNCTION CHARBOX(F:INTERNALFONTNUMBER; 2836 C:QUARTERWORD):HALFWORD;VAR Q:FOURQUARTERS;HD:EIGHTBITS;B,P:HALFWORD; 2837 BEGIN Q:=FONTINFO[CHARBASE[F]+C].QQQQ;HD:=Q.B1-0;B:=NEWNULLBOX; 2838 MEM[B+1].INT:=FONTINFO[WIDTHBASE[F]+Q.B0].INT+FONTINFO[ITALICBASE[F]+(Q. 2839 B2-0)DIV 4].INT;MEM[B+3].INT:=FONTINFO[HEIGHTBASE[F]+(HD)DIV 16].INT; 2840 MEM[B+2].INT:=FONTINFO[DEPTHBASE[F]+(HD)MOD 16].INT;P:=GETAVAIL; 2841 MEM[P].HH.B1:=C;MEM[P].HH.B0:=F;MEM[B+5].HH.RH:=P;CHARBOX:=B;END; 2842 {:709}{711:}PROCEDURE STACKINTOBOX(B:HALFWORD;F:INTERNALFONTNUMBER; 2843 C:QUARTERWORD);VAR P:HALFWORD;BEGIN P:=CHARBOX(F,C); 2844 MEM[P].HH.RH:=MEM[B+5].HH.RH;MEM[B+5].HH.RH:=P; 2845 MEM[B+3].INT:=MEM[P+3].INT;END; 2846 {:711}{712:}FUNCTION HEIGHTPLUSDEPTH(F:INTERNALFONTNUMBER; 2847 C:QUARTERWORD):SCALED;VAR Q:FOURQUARTERS;HD:EIGHTBITS; 2848 BEGIN Q:=FONTINFO[CHARBASE[F]+C].QQQQ;HD:=Q.B1-0; 2849 HEIGHTPLUSDEPTH:=FONTINFO[HEIGHTBASE[F]+(HD)DIV 16].INT+FONTINFO[ 2850 DEPTHBASE[F]+(HD)MOD 16].INT;END;{:712}FUNCTION VARDELIMITER(D:HALFWORD; 2851 S:SMALLNUMBER;V:SCALED):HALFWORD;LABEL 40,22;VAR B:HALFWORD; 2852 F,G:INTERNALFONTNUMBER;C,X,Y:QUARTERWORD;M,N:INTEGER;U:SCALED;W:SCALED; 2853 Q:FOURQUARTERS;HD:EIGHTBITS;R:FOURQUARTERS;Z:SMALLNUMBER; 2854 LARGEATTEMPT:BOOLEAN;BEGIN F:=0;W:=0;LARGEATTEMPT:=FALSE; 2855 Z:=MEM[D].QQQQ.B0;X:=MEM[D].QQQQ.B1; 2856 WHILE TRUE DO BEGIN{707:}IF(Z<>0)OR(X<>0)THEN BEGIN Z:=Z+S+16; 2857 REPEAT Z:=Z-16;G:=EQTB[3935+Z].HH.RH;IF G<>0 THEN{708:}BEGIN Y:=X; 2858 IF(Y-0>=FONTBC[G])AND(Y-0<=FONTEC[G])THEN BEGIN 22:Q:=FONTINFO[CHARBASE[ 2859 G]+Y].QQQQ;IF(Q.B0>0)THEN BEGIN IF((Q.B2-0)MOD 4)=3 THEN BEGIN F:=G; 2860 C:=Y;GOTO 40;END;HD:=Q.B1-0; 2861 U:=FONTINFO[HEIGHTBASE[G]+(HD)DIV 16].INT+FONTINFO[DEPTHBASE[G]+(HD)MOD 2862 16].INT;IF U>W THEN BEGIN F:=G;C:=Y;W:=U;IF U>=V THEN GOTO 40;END; 2863 IF((Q.B2-0)MOD 4)=2 THEN BEGIN Y:=Q.B3;GOTO 22;END;END;END;END{:708}; 2864 UNTIL Z<16;END{:707};IF LARGEATTEMPT THEN GOTO 40;LARGEATTEMPT:=TRUE; 2865 Z:=MEM[D].QQQQ.B2;X:=MEM[D].QQQQ.B3;END; 2866 40:IF F<>0 THEN{710:}IF((Q.B2-0)MOD 4)=3 THEN{713:}BEGIN B:=NEWNULLBOX; 2867 MEM[B].HH.B0:=1;R:=FONTINFO[EXTENBASE[F]+Q.B3].QQQQ;{714:}C:=R.B3; 2868 U:=HEIGHTPLUSDEPTH(F,C);W:=0;Q:=FONTINFO[CHARBASE[F]+C].QQQQ; 2869 MEM[B+1].INT:=FONTINFO[WIDTHBASE[F]+Q.B0].INT+FONTINFO[ITALICBASE[F]+(Q. 2870 B2-0)DIV 4].INT;C:=R.B2;IF C<>0 THEN W:=W+HEIGHTPLUSDEPTH(F,C);C:=R.B1; 2871 IF C<>0 THEN W:=W+HEIGHTPLUSDEPTH(F,C);C:=R.B0; 2872 IF C<>0 THEN W:=W+HEIGHTPLUSDEPTH(F,C);N:=0; 2873 IF U>0 THEN WHILE W<V DO BEGIN W:=W+U;N:=N+1;IF R.B1<>0 THEN W:=W+U; 2874 END{:714};C:=R.B2;IF C<>0 THEN STACKINTOBOX(B,F,C);C:=R.B3; 2875 FOR M:=1 TO N DO STACKINTOBOX(B,F,C);C:=R.B1; 2876 IF C<>0 THEN BEGIN STACKINTOBOX(B,F,C);C:=R.B3; 2877 FOR M:=1 TO N DO STACKINTOBOX(B,F,C);END;C:=R.B0; 2878 IF C<>0 THEN STACKINTOBOX(B,F,C);MEM[B+2].INT:=W-MEM[B+3].INT; 2879 END{:713}ELSE B:=CHARBOX(F,C){:710}ELSE BEGIN B:=NEWNULLBOX; 2880 MEM[B+1].INT:=EQTB[5841].INT;END; 2881 MEM[B+4].INT:=HALF(MEM[B+3].INT-MEM[B+2].INT)-FONTINFO[22+PARAMBASE[EQTB 2882 [3937+S].HH.RH]].INT;VARDELIMITER:=B;END; 2883 {:706}{715:}FUNCTION REBOX(B:HALFWORD;W:SCALED):HALFWORD;VAR P:HALFWORD; 2884 F:INTERNALFONTNUMBER;V:SCALED; 2885 BEGIN IF(MEM[B+1].INT<>W)AND(MEM[B+5].HH.RH<>0)THEN BEGIN IF MEM[B].HH. 2886 B0=1 THEN B:=HPACK(B,0,1);P:=MEM[B+5].HH.RH; 2887 IF((P>=HIMEMMIN))AND(MEM[P].HH.RH=0)THEN BEGIN F:=MEM[P].HH.B0; 2888 V:=FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B0].INT 2889 ;IF V<>MEM[B+1].INT THEN MEM[P].HH.RH:=NEWKERN(MEM[B+1].INT-V);END; 2890 FREENODE(B,7);B:=NEWGLUE(12);MEM[B].HH.RH:=P; 2891 WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;MEM[P].HH.RH:=NEWGLUE(12); 2892 REBOX:=HPACK(B,W,0);END ELSE BEGIN MEM[B+1].INT:=W;REBOX:=B;END;END; 2893 {:715}{716:}FUNCTION MATHGLUE(G:HALFWORD;M:SCALED):HALFWORD; 2894 VAR P:HALFWORD;N:INTEGER;F:SCALED;BEGIN N:=XOVERN(M,65536);F:=REMAINDER; 2895 IF F<0 THEN BEGIN N:=N-1;F:=F+65536;END;P:=GETNODE(4); 2896 MEM[P+1].INT:=MULTANDADD(N,MEM[G+1].INT,XNOVERD(MEM[G+1].INT,F,65536), 2897 1073741823);MEM[P].HH.B0:=MEM[G].HH.B0; 2898 IF MEM[P].HH.B0=0 THEN MEM[P+2].INT:=MULTANDADD(N,MEM[G+2].INT,XNOVERD( 2899 MEM[G+2].INT,F,65536),1073741823)ELSE MEM[P+2].INT:=MEM[G+2].INT; 2900 MEM[P].HH.B1:=MEM[G].HH.B1; 2901 IF MEM[P].HH.B1=0 THEN MEM[P+3].INT:=MULTANDADD(N,MEM[G+3].INT,XNOVERD( 2902 MEM[G+3].INT,F,65536),1073741823)ELSE MEM[P+3].INT:=MEM[G+3].INT; 2903 MATHGLUE:=P;END;{:716}{717:}PROCEDURE MATHKERN(P:HALFWORD;M:SCALED); 2904 VAR N:INTEGER;F:SCALED; 2905 BEGIN IF MEM[P].HH.B1=99 THEN BEGIN N:=XOVERN(M,65536);F:=REMAINDER; 2906 IF F<0 THEN BEGIN N:=N-1;F:=F+65536;END; 2907 MEM[P+1].INT:=MULTANDADD(N,MEM[P+1].INT,XNOVERD(MEM[P+1].INT,F,65536), 2908 1073741823);MEM[P].HH.B1:=1;END;END;{:717}{718:}PROCEDURE FLUSHMATH; 2909 BEGIN FLUSHNODELIST(MEM[CURLIST.HEADFIELD].HH.RH); 2910 FLUSHNODELIST(CURLIST.AUXFIELD.INT);MEM[CURLIST.HEADFIELD].HH.RH:=0; 2911 CURLIST.TAILFIELD:=CURLIST.HEADFIELD;CURLIST.AUXFIELD.INT:=0;END; 2912 {:718}{720:}PROCEDURE MLISTTOHLIST;FORWARD;FUNCTION CLEANBOX(P:HALFWORD; 2913 S:SMALLNUMBER):HALFWORD;LABEL 40;VAR Q:HALFWORD;SAVESTYLE:SMALLNUMBER; 2914 X:HALFWORD;R:HALFWORD; 2915 BEGIN CASE MEM[P].HH.RH OF 1:BEGIN CURMLIST:=NEWNOAD; 2916 MEM[CURMLIST+1]:=MEM[P];END;2:BEGIN Q:=MEM[P].HH.LH;GOTO 40;END; 2917 3:CURMLIST:=MEM[P].HH.LH;ELSE BEGIN Q:=NEWNULLBOX;GOTO 40;END END; 2918 SAVESTYLE:=CURSTYLE;CURSTYLE:=S;MLISTPENALTIES:=FALSE;MLISTTOHLIST; 2919 Q:=MEM[29997].HH.RH;CURSTYLE:=SAVESTYLE; 2920 {703:}BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2) 2921 DIV 2); 2922 CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT,18); 2923 END{:703}; 2924 40:IF(Q>=HIMEMMIN)OR(Q=0)THEN X:=HPACK(Q,0,1)ELSE IF(MEM[Q].HH.RH=0)AND( 2925 MEM[Q].HH.B0<=1)AND(MEM[Q+4].INT=0)THEN X:=Q ELSE X:=HPACK(Q,0,1); 2926 {721:}Q:=MEM[X+5].HH.RH;IF(Q>=HIMEMMIN)THEN BEGIN R:=MEM[Q].HH.RH; 2927 IF R<>0 THEN IF MEM[R].HH.RH=0 THEN IF NOT(R>=HIMEMMIN)THEN IF MEM[R].HH 2928 .B0=11 THEN BEGIN FREENODE(R,2);MEM[Q].HH.RH:=0;END;END{:721}; 2929 CLEANBOX:=X;END;{:720}{722:}PROCEDURE FETCH(A:HALFWORD); 2930 BEGIN CURC:=MEM[A].HH.B1;CURF:=EQTB[3935+MEM[A].HH.B0+CURSIZE].HH.RH; 2931 IF CURF=0 THEN{723:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 2932 PRINT(338);END;PRINTSIZE(CURSIZE);PRINTCHAR(32);PRINTINT(MEM[A].HH.B0); 2933 PRINT(884);PRINT(CURC-0);PRINTCHAR(41);BEGIN HELPPTR:=4; 2934 HELPLINE[3]:=885;HELPLINE[2]:=886;HELPLINE[1]:=887;HELPLINE[0]:=888;END; 2935 ERROR;CURI:=NULLCHARACTER;MEM[A].HH.RH:=0; 2936 END{:723}ELSE BEGIN IF(CURC-0>=FONTBC[CURF])AND(CURC-0<=FONTEC[CURF]) 2937 THEN CURI:=FONTINFO[CHARBASE[CURF]+CURC].QQQQ ELSE CURI:=NULLCHARACTER; 2938 IF NOT((CURI.B0>0))THEN BEGIN CHARWARNING(CURF,CURC-0);MEM[A].HH.RH:=0; 2939 CURI:=NULLCHARACTER;END;END;END; 2940 {:722}{726:}{734:}PROCEDURE MAKEOVER(Q:HALFWORD); 2941 BEGIN MEM[Q+1].HH.LH:=OVERBAR(CLEANBOX(Q+1,2*(CURSTYLE DIV 2)+1),3* 2942 FONTINFO[8+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT,FONTINFO[8+PARAMBASE 2943 [EQTB[3938+CURSIZE].HH.RH]].INT);MEM[Q+1].HH.RH:=2;END; 2944 {:734}{735:}PROCEDURE MAKEUNDER(Q:HALFWORD);VAR P,X,Y:HALFWORD; 2945 DELTA:SCALED;BEGIN X:=CLEANBOX(Q+1,CURSTYLE); 2946 P:=NEWKERN(3*FONTINFO[8+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT); 2947 MEM[X].HH.RH:=P; 2948 MEM[P].HH.RH:=FRACTIONRULE(FONTINFO[8+PARAMBASE[EQTB[3938+CURSIZE].HH.RH 2949 ]].INT);Y:=VPACKAGE(X,0,1,1073741823); 2950 DELTA:=MEM[Y+3].INT+MEM[Y+2].INT+FONTINFO[8+PARAMBASE[EQTB[3938+CURSIZE] 2951 .HH.RH]].INT;MEM[Y+3].INT:=MEM[X+3].INT; 2952 MEM[Y+2].INT:=DELTA-MEM[Y+3].INT;MEM[Q+1].HH.LH:=Y;MEM[Q+1].HH.RH:=2; 2953 END;{:735}{736:}PROCEDURE MAKEVCENTER(Q:HALFWORD);VAR V:HALFWORD; 2954 DELTA:SCALED;BEGIN V:=MEM[Q+1].HH.LH; 2955 IF MEM[V].HH.B0<>1 THEN CONFUSION(539);DELTA:=MEM[V+3].INT+MEM[V+2].INT; 2956 MEM[V+3].INT:=FONTINFO[22+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT+HALF( 2957 DELTA);MEM[V+2].INT:=DELTA-MEM[V+3].INT;END; 2958 {:736}{737:}PROCEDURE MAKERADICAL(Q:HALFWORD);VAR X,Y:HALFWORD; 2959 DELTA,CLR:SCALED;BEGIN X:=CLEANBOX(Q+1,2*(CURSTYLE DIV 2)+1); 2960 IF CURSTYLE<2 THEN CLR:=FONTINFO[8+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]]. 2961 INT+(ABS(FONTINFO[5+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT)DIV 4)ELSE 2962 BEGIN CLR:=FONTINFO[8+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT; 2963 CLR:=CLR+(ABS(CLR)DIV 4);END; 2964 Y:=VARDELIMITER(Q+4,CURSIZE,MEM[X+3].INT+MEM[X+2].INT+CLR+FONTINFO[8+ 2965 PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT); 2966 DELTA:=MEM[Y+2].INT-(MEM[X+3].INT+MEM[X+2].INT+CLR); 2967 IF DELTA>0 THEN CLR:=CLR+HALF(DELTA);MEM[Y+4].INT:=-(MEM[X+3].INT+CLR); 2968 MEM[Y].HH.RH:=OVERBAR(X,CLR,MEM[Y+3].INT);MEM[Q+1].HH.LH:=HPACK(Y,0,1); 2969 MEM[Q+1].HH.RH:=2;END;{:737}{738:}PROCEDURE MAKEMATHACCENT(Q:HALFWORD); 2970 LABEL 30,31;VAR P,X,Y:HALFWORD;A:INTEGER;C:QUARTERWORD; 2971 F:INTERNALFONTNUMBER;I:FOURQUARTERS;S:SCALED;H:SCALED;DELTA:SCALED; 2972 W:SCALED;BEGIN FETCH(Q+4);IF(CURI.B0>0)THEN BEGIN I:=CURI;C:=CURC; 2973 F:=CURF;{741:}S:=0;IF MEM[Q+1].HH.RH=1 THEN BEGIN FETCH(Q+1); 2974 IF((CURI.B2-0)MOD 4)=1 THEN BEGIN A:=LIGKERNBASE[CURF]+CURI.B3; 2975 CURI:=FONTINFO[A].QQQQ; 2976 IF CURI.B0>128 THEN BEGIN A:=LIGKERNBASE[CURF]+256*CURI.B2+CURI.B3 2977 +32768-256*(128);CURI:=FONTINFO[A].QQQQ;END; 2978 WHILE TRUE DO BEGIN IF CURI.B1-0=SKEWCHAR[CURF]THEN BEGIN IF CURI.B2>= 2979 128 THEN IF CURI.B0<=128 THEN S:=FONTINFO[KERNBASE[CURF]+256*CURI.B2+ 2980 CURI.B3].INT;GOTO 31;END;IF CURI.B0>=128 THEN GOTO 31;A:=A+CURI.B0+1; 2981 CURI:=FONTINFO[A].QQQQ;END;END;END;31:{:741}; 2982 X:=CLEANBOX(Q+1,2*(CURSTYLE DIV 2)+1);W:=MEM[X+1].INT;H:=MEM[X+3].INT; 2983 {740:}WHILE TRUE DO BEGIN IF((I.B2-0)MOD 4)<>2 THEN GOTO 30;Y:=I.B3; 2984 I:=FONTINFO[CHARBASE[F]+Y].QQQQ;IF NOT(I.B0>0)THEN GOTO 30; 2985 IF FONTINFO[WIDTHBASE[F]+I.B0].INT>W THEN GOTO 30;C:=Y;END;30:{:740}; 2986 IF H<FONTINFO[5+PARAMBASE[F]].INT THEN DELTA:=H ELSE DELTA:=FONTINFO[5+ 2987 PARAMBASE[F]].INT; 2988 IF(MEM[Q+2].HH.RH<>0)OR(MEM[Q+3].HH.RH<>0)THEN IF MEM[Q+1].HH.RH=1 THEN 2989 {742:}BEGIN FLUSHNODELIST(X);X:=NEWNOAD;MEM[X+1]:=MEM[Q+1]; 2990 MEM[X+2]:=MEM[Q+2];MEM[X+3]:=MEM[Q+3];MEM[Q+2].HH:=EMPTYFIELD; 2991 MEM[Q+3].HH:=EMPTYFIELD;MEM[Q+1].HH.RH:=3;MEM[Q+1].HH.LH:=X; 2992 X:=CLEANBOX(Q+1,CURSTYLE);DELTA:=DELTA+MEM[X+3].INT-H;H:=MEM[X+3].INT; 2993 END{:742};Y:=CHARBOX(F,C);MEM[Y+4].INT:=S+HALF(W-MEM[Y+1].INT); 2994 MEM[Y+1].INT:=0;P:=NEWKERN(-DELTA);MEM[P].HH.RH:=X;MEM[Y].HH.RH:=P; 2995 Y:=VPACKAGE(Y,0,1,1073741823);MEM[Y+1].INT:=MEM[X+1].INT; 2996 IF MEM[Y+3].INT<H THEN{739:}BEGIN P:=NEWKERN(H-MEM[Y+3].INT); 2997 MEM[P].HH.RH:=MEM[Y+5].HH.RH;MEM[Y+5].HH.RH:=P;MEM[Y+3].INT:=H; 2998 END{:739};MEM[Q+1].HH.LH:=Y;MEM[Q+1].HH.RH:=2;END;END; 2999 {:738}{743:}PROCEDURE MAKEFRACTION(Q:HALFWORD);VAR P,V,X,Y,Z:HALFWORD; 3000 DELTA,DELTA1,DELTA2,SHIFTUP,SHIFTDOWN,CLR:SCALED; 3001 BEGIN IF MEM[Q+1].INT=1073741824 THEN MEM[Q+1].INT:=FONTINFO[8+PARAMBASE 3002 [EQTB[3938+CURSIZE].HH.RH]].INT; 3003 {744:}X:=CLEANBOX(Q+2,CURSTYLE+2-2*(CURSTYLE DIV 6)); 3004 Z:=CLEANBOX(Q+3,2*(CURSTYLE DIV 2)+3-2*(CURSTYLE DIV 6)); 3005 IF MEM[X+1].INT<MEM[Z+1].INT THEN X:=REBOX(X,MEM[Z+1].INT)ELSE Z:=REBOX( 3006 Z,MEM[X+1].INT); 3007 IF CURSTYLE<2 THEN BEGIN SHIFTUP:=FONTINFO[8+PARAMBASE[EQTB[3937+CURSIZE 3008 ].HH.RH]].INT; 3009 SHIFTDOWN:=FONTINFO[11+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT; 3010 END ELSE BEGIN SHIFTDOWN:=FONTINFO[12+PARAMBASE[EQTB[3937+CURSIZE].HH.RH 3011 ]].INT; 3012 IF MEM[Q+1].INT<>0 THEN SHIFTUP:=FONTINFO[9+PARAMBASE[EQTB[3937+CURSIZE] 3013 .HH.RH]].INT ELSE SHIFTUP:=FONTINFO[10+PARAMBASE[EQTB[3937+CURSIZE].HH. 3014 RH]].INT;END{:744}; 3015 IF MEM[Q+1].INT=0 THEN{745:}BEGIN IF CURSTYLE<2 THEN CLR:=7*FONTINFO[8+ 3016 PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT ELSE CLR:=3*FONTINFO[8+ 3017 PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT; 3018 DELTA:=HALF(CLR-((SHIFTUP-MEM[X+2].INT)-(MEM[Z+3].INT-SHIFTDOWN))); 3019 IF DELTA>0 THEN BEGIN SHIFTUP:=SHIFTUP+DELTA;SHIFTDOWN:=SHIFTDOWN+DELTA; 3020 END; 3021 END{:745}ELSE{746:}BEGIN IF CURSTYLE<2 THEN CLR:=3*MEM[Q+1].INT ELSE CLR 3022 :=MEM[Q+1].INT;DELTA:=HALF(MEM[Q+1].INT); 3023 DELTA1:=CLR-((SHIFTUP-MEM[X+2].INT)-(FONTINFO[22+PARAMBASE[EQTB[3937+ 3024 CURSIZE].HH.RH]].INT+DELTA)); 3025 DELTA2:=CLR-((FONTINFO[22+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT-DELTA 3026 )-(MEM[Z+3].INT-SHIFTDOWN));IF DELTA1>0 THEN SHIFTUP:=SHIFTUP+DELTA1; 3027 IF DELTA2>0 THEN SHIFTDOWN:=SHIFTDOWN+DELTA2;END{:746}; 3028 {747:}V:=NEWNULLBOX;MEM[V].HH.B0:=1;MEM[V+3].INT:=SHIFTUP+MEM[X+3].INT; 3029 MEM[V+2].INT:=MEM[Z+2].INT+SHIFTDOWN;MEM[V+1].INT:=MEM[X+1].INT; 3030 IF MEM[Q+1].INT=0 THEN BEGIN P:=NEWKERN((SHIFTUP-MEM[X+2].INT)-(MEM[Z+3] 3031 .INT-SHIFTDOWN));MEM[P].HH.RH:=Z; 3032 END ELSE BEGIN Y:=FRACTIONRULE(MEM[Q+1].INT); 3033 P:=NEWKERN((FONTINFO[22+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT-DELTA)- 3034 (MEM[Z+3].INT-SHIFTDOWN));MEM[Y].HH.RH:=P;MEM[P].HH.RH:=Z; 3035 P:=NEWKERN((SHIFTUP-MEM[X+2].INT)-(FONTINFO[22+PARAMBASE[EQTB[3937+ 3036 CURSIZE].HH.RH]].INT+DELTA));MEM[P].HH.RH:=Y;END;MEM[X].HH.RH:=P; 3037 MEM[V+5].HH.RH:=X{:747}; 3038 {748:}IF CURSTYLE<2 THEN DELTA:=FONTINFO[20+PARAMBASE[EQTB[3937+CURSIZE] 3039 .HH.RH]].INT ELSE DELTA:=FONTINFO[21+PARAMBASE[EQTB[3937+CURSIZE].HH.RH] 3040 ].INT;X:=VARDELIMITER(Q+4,CURSIZE,DELTA);MEM[X].HH.RH:=V; 3041 Z:=VARDELIMITER(Q+5,CURSIZE,DELTA);MEM[V].HH.RH:=Z; 3042 MEM[Q+1].INT:=HPACK(X,0,1){:748};END; 3043 {:743}{749:}FUNCTION MAKEOP(Q:HALFWORD):SCALED;VAR DELTA:SCALED; 3044 P,V,X,Y,Z:HALFWORD;C:QUARTERWORD;I:FOURQUARTERS; 3045 SHIFTUP,SHIFTDOWN:SCALED; 3046 BEGIN IF(MEM[Q].HH.B1=0)AND(CURSTYLE<2)THEN MEM[Q].HH.B1:=1; 3047 IF MEM[Q+1].HH.RH=1 THEN BEGIN FETCH(Q+1); 3048 IF(CURSTYLE<2)AND(((CURI.B2-0)MOD 4)=2)THEN BEGIN C:=CURI.B3; 3049 I:=FONTINFO[CHARBASE[CURF]+C].QQQQ;IF(I.B0>0)THEN BEGIN CURC:=C;CURI:=I; 3050 MEM[Q+1].HH.B1:=C;END;END; 3051 DELTA:=FONTINFO[ITALICBASE[CURF]+(CURI.B2-0)DIV 4].INT; 3052 X:=CLEANBOX(Q+1,CURSTYLE); 3053 IF(MEM[Q+3].HH.RH<>0)AND(MEM[Q].HH.B1<>1)THEN MEM[X+1].INT:=MEM[X+1].INT 3054 -DELTA; 3055 MEM[X+4].INT:=HALF(MEM[X+3].INT-MEM[X+2].INT)-FONTINFO[22+PARAMBASE[EQTB 3056 [3937+CURSIZE].HH.RH]].INT;MEM[Q+1].HH.RH:=2;MEM[Q+1].HH.LH:=X; 3057 END ELSE DELTA:=0; 3058 IF MEM[Q].HH.B1=1 THEN{750:}BEGIN X:=CLEANBOX(Q+2,2*(CURSTYLE DIV 4)+4+( 3059 CURSTYLE MOD 2));Y:=CLEANBOX(Q+1,CURSTYLE); 3060 Z:=CLEANBOX(Q+3,2*(CURSTYLE DIV 4)+5);V:=NEWNULLBOX;MEM[V].HH.B0:=1; 3061 MEM[V+1].INT:=MEM[Y+1].INT; 3062 IF MEM[X+1].INT>MEM[V+1].INT THEN MEM[V+1].INT:=MEM[X+1].INT; 3063 IF MEM[Z+1].INT>MEM[V+1].INT THEN MEM[V+1].INT:=MEM[Z+1].INT; 3064 X:=REBOX(X,MEM[V+1].INT);Y:=REBOX(Y,MEM[V+1].INT); 3065 Z:=REBOX(Z,MEM[V+1].INT);MEM[X+4].INT:=HALF(DELTA); 3066 MEM[Z+4].INT:=-MEM[X+4].INT;MEM[V+3].INT:=MEM[Y+3].INT; 3067 MEM[V+2].INT:=MEM[Y+2].INT; 3068 {751:}IF MEM[Q+2].HH.RH=0 THEN BEGIN FREENODE(X,7);MEM[V+5].HH.RH:=Y; 3069 END ELSE BEGIN SHIFTUP:=FONTINFO[11+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]] 3070 .INT-MEM[X+2].INT; 3071 IF SHIFTUP<FONTINFO[9+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT THEN 3072 SHIFTUP:=FONTINFO[9+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT; 3073 P:=NEWKERN(SHIFTUP);MEM[P].HH.RH:=Y;MEM[X].HH.RH:=P; 3074 P:=NEWKERN(FONTINFO[13+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT); 3075 MEM[P].HH.RH:=X;MEM[V+5].HH.RH:=P; 3076 MEM[V+3].INT:=MEM[V+3].INT+FONTINFO[13+PARAMBASE[EQTB[3938+CURSIZE].HH. 3077 RH]].INT+MEM[X+3].INT+MEM[X+2].INT+SHIFTUP;END; 3078 IF MEM[Q+3].HH.RH=0 THEN FREENODE(Z,7)ELSE BEGIN SHIFTDOWN:=FONTINFO[12+ 3079 PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT-MEM[Z+3].INT; 3080 IF SHIFTDOWN<FONTINFO[10+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT THEN 3081 SHIFTDOWN:=FONTINFO[10+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT; 3082 P:=NEWKERN(SHIFTDOWN);MEM[Y].HH.RH:=P;MEM[P].HH.RH:=Z; 3083 P:=NEWKERN(FONTINFO[13+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT); 3084 MEM[Z].HH.RH:=P; 3085 MEM[V+2].INT:=MEM[V+2].INT+FONTINFO[13+PARAMBASE[EQTB[3938+CURSIZE].HH. 3086 RH]].INT+MEM[Z+3].INT+MEM[Z+2].INT+SHIFTDOWN;END{:751};MEM[Q+1].INT:=V; 3087 END{:750};MAKEOP:=DELTA;END;{:749}{752:}PROCEDURE MAKEORD(Q:HALFWORD); 3088 LABEL 20,10;VAR A:INTEGER;P,R:HALFWORD; 3089 BEGIN 20:IF MEM[Q+3].HH.RH=0 THEN IF MEM[Q+2].HH.RH=0 THEN IF MEM[Q+1]. 3090 HH.RH=1 THEN BEGIN P:=MEM[Q].HH.RH; 3091 IF P<>0 THEN IF(MEM[P].HH.B0>=16)AND(MEM[P].HH.B0<=22)THEN IF MEM[P+1]. 3092 HH.RH=1 THEN IF MEM[P+1].HH.B0=MEM[Q+1].HH.B0 THEN BEGIN MEM[Q+1].HH.RH 3093 :=4;FETCH(Q+1); 3094 IF((CURI.B2-0)MOD 4)=1 THEN BEGIN A:=LIGKERNBASE[CURF]+CURI.B3; 3095 CURC:=MEM[P+1].HH.B1;CURI:=FONTINFO[A].QQQQ; 3096 IF CURI.B0>128 THEN BEGIN A:=LIGKERNBASE[CURF]+256*CURI.B2+CURI.B3 3097 +32768-256*(128);CURI:=FONTINFO[A].QQQQ;END; 3098 WHILE TRUE DO BEGIN{753:}IF CURI.B1=CURC THEN IF CURI.B0<=128 THEN IF 3099 CURI.B2>=128 THEN BEGIN P:=NEWKERN(FONTINFO[KERNBASE[CURF]+256*CURI.B2+ 3100 CURI.B3].INT);MEM[P].HH.RH:=MEM[Q].HH.RH;MEM[Q].HH.RH:=P;GOTO 10; 3101 END ELSE BEGIN BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END; 3102 CASE CURI.B2 OF 1,5:MEM[Q+1].HH.B1:=CURI.B3;2,6:MEM[P+1].HH.B1:=CURI.B3; 3103 3,7,11:BEGIN R:=NEWNOAD;MEM[R+1].HH.B1:=CURI.B3; 3104 MEM[R+1].HH.B0:=MEM[Q+1].HH.B0;MEM[Q].HH.RH:=R;MEM[R].HH.RH:=P; 3105 IF CURI.B2<11 THEN MEM[R+1].HH.RH:=1 ELSE MEM[R+1].HH.RH:=4;END; 3106 ELSE BEGIN MEM[Q].HH.RH:=MEM[P].HH.RH;MEM[Q+1].HH.B1:=CURI.B3; 3107 MEM[Q+3]:=MEM[P+3];MEM[Q+2]:=MEM[P+2];FREENODE(P,4);END END; 3108 IF CURI.B2>3 THEN GOTO 10;MEM[Q+1].HH.RH:=1;GOTO 20;END{:753}; 3109 IF CURI.B0>=128 THEN GOTO 10;A:=A+CURI.B0+1;CURI:=FONTINFO[A].QQQQ;END; 3110 END;END;END;10:END;{:752}{756:}PROCEDURE MAKESCRIPTS(Q:HALFWORD; 3111 DELTA:SCALED);VAR P,X,Y,Z:HALFWORD;SHIFTUP,SHIFTDOWN,CLR:SCALED; 3112 T:SMALLNUMBER;BEGIN P:=MEM[Q+1].INT; 3113 IF(P>=HIMEMMIN)THEN BEGIN SHIFTUP:=0;SHIFTDOWN:=0; 3114 END ELSE BEGIN Z:=HPACK(P,0,1);IF CURSTYLE<4 THEN T:=16 ELSE T:=32; 3115 SHIFTUP:=MEM[Z+3].INT-FONTINFO[18+PARAMBASE[EQTB[3937+T].HH.RH]].INT; 3116 SHIFTDOWN:=MEM[Z+2].INT+FONTINFO[19+PARAMBASE[EQTB[3937+T].HH.RH]].INT; 3117 FREENODE(Z,7);END; 3118 IF MEM[Q+2].HH.RH=0 THEN{757:}BEGIN X:=CLEANBOX(Q+3,2*(CURSTYLE DIV 4)+5 3119 );MEM[X+1].INT:=MEM[X+1].INT+EQTB[5842].INT; 3120 IF SHIFTDOWN<FONTINFO[16+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT THEN 3121 SHIFTDOWN:=FONTINFO[16+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT; 3122 CLR:=MEM[X+3].INT-(ABS(FONTINFO[5+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]]. 3123 INT*4)DIV 5);IF SHIFTDOWN<CLR THEN SHIFTDOWN:=CLR; 3124 MEM[X+4].INT:=SHIFTDOWN; 3125 END{:757}ELSE BEGIN{758:}BEGIN X:=CLEANBOX(Q+2,2*(CURSTYLE DIV 4)+4+( 3126 CURSTYLE MOD 2));MEM[X+1].INT:=MEM[X+1].INT+EQTB[5842].INT; 3127 IF ODD(CURSTYLE)THEN CLR:=FONTINFO[15+PARAMBASE[EQTB[3937+CURSIZE].HH.RH 3128 ]].INT ELSE IF CURSTYLE<2 THEN CLR:=FONTINFO[13+PARAMBASE[EQTB[3937+ 3129 CURSIZE].HH.RH]].INT ELSE CLR:=FONTINFO[14+PARAMBASE[EQTB[3937+CURSIZE]. 3130 HH.RH]].INT;IF SHIFTUP<CLR THEN SHIFTUP:=CLR; 3131 CLR:=MEM[X+2].INT+(ABS(FONTINFO[5+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]]. 3132 INT)DIV 4);IF SHIFTUP<CLR THEN SHIFTUP:=CLR;END{:758}; 3133 IF MEM[Q+3].HH.RH=0 THEN MEM[X+4].INT:=-SHIFTUP ELSE{759:}BEGIN Y:= 3134 CLEANBOX(Q+3,2*(CURSTYLE DIV 4)+5); 3135 MEM[Y+1].INT:=MEM[Y+1].INT+EQTB[5842].INT; 3136 IF SHIFTDOWN<FONTINFO[17+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT THEN 3137 SHIFTDOWN:=FONTINFO[17+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT; 3138 CLR:=4*FONTINFO[8+PARAMBASE[EQTB[3938+CURSIZE].HH.RH]].INT-((SHIFTUP-MEM 3139 [X+2].INT)-(MEM[Y+3].INT-SHIFTDOWN)); 3140 IF CLR>0 THEN BEGIN SHIFTDOWN:=SHIFTDOWN+CLR; 3141 CLR:=(ABS(FONTINFO[5+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT*4)DIV 5)-( 3142 SHIFTUP-MEM[X+2].INT);IF CLR>0 THEN BEGIN SHIFTUP:=SHIFTUP+CLR; 3143 SHIFTDOWN:=SHIFTDOWN-CLR;END;END;MEM[X+4].INT:=DELTA; 3144 P:=NEWKERN((SHIFTUP-MEM[X+2].INT)-(MEM[Y+3].INT-SHIFTDOWN)); 3145 MEM[X].HH.RH:=P;MEM[P].HH.RH:=Y;X:=VPACKAGE(X,0,1,1073741823); 3146 MEM[X+4].INT:=SHIFTDOWN;END{:759};END; 3147 IF MEM[Q+1].INT=0 THEN MEM[Q+1].INT:=X ELSE BEGIN P:=MEM[Q+1].INT; 3148 WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;MEM[P].HH.RH:=X;END;END; 3149 {:756}{762:}FUNCTION MAKELEFTRIGHT(Q:HALFWORD;STYLE:SMALLNUMBER; 3150 MAXD,MAXH:SCALED):SMALLNUMBER;VAR DELTA,DELTA1,DELTA2:SCALED; 3151 BEGIN IF STYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((STYLE-2)DIV 2); 3152 DELTA2:=MAXD+FONTINFO[22+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT; 3153 DELTA1:=MAXH+MAXD-DELTA2;IF DELTA2>DELTA1 THEN DELTA1:=DELTA2; 3154 DELTA:=(DELTA1 DIV 500)*EQTB[5281].INT; 3155 DELTA2:=DELTA1+DELTA1-EQTB[5840].INT;IF DELTA<DELTA2 THEN DELTA:=DELTA2; 3156 MEM[Q+1].INT:=VARDELIMITER(Q+1,CURSIZE,DELTA); 3157 MAKELEFTRIGHT:=MEM[Q].HH.B0-(10);END;{:762}PROCEDURE MLISTTOHLIST; 3158 LABEL 21,82,80,81,83,30;VAR MLIST:HALFWORD;PENALTIES:BOOLEAN; 3159 STYLE:SMALLNUMBER;SAVESTYLE:SMALLNUMBER;Q:HALFWORD;R:HALFWORD; 3160 RTYPE:SMALLNUMBER;T:SMALLNUMBER;P,X,Y,Z:HALFWORD;PEN:INTEGER; 3161 S:SMALLNUMBER;MAXH,MAXD:SCALED;DELTA:SCALED;BEGIN MLIST:=CURMLIST; 3162 PENALTIES:=MLISTPENALTIES;STYLE:=CURSTYLE;Q:=MLIST;R:=0;RTYPE:=17; 3163 MAXH:=0;MAXD:=0; 3164 {703:}BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2) 3165 DIV 2); 3166 CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT,18); 3167 END{:703};WHILE Q<>0 DO{727:}BEGIN{728:}21:DELTA:=0; 3168 CASE MEM[Q].HH.B0 OF 18:CASE RTYPE OF 18,17,19,20,22,30:BEGIN MEM[Q].HH. 3169 B0:=16;GOTO 21;END;ELSE END; 3170 19,21,22,31:BEGIN{729:}IF RTYPE=18 THEN MEM[R].HH.B0:=16{:729}; 3171 IF MEM[Q].HH.B0=31 THEN GOTO 80;END;{733:}30:GOTO 80; 3172 25:BEGIN MAKEFRACTION(Q);GOTO 82;END;17:BEGIN DELTA:=MAKEOP(Q); 3173 IF MEM[Q].HH.B1=1 THEN GOTO 82;END;16:MAKEORD(Q);20,23:; 3174 24:MAKERADICAL(Q);27:MAKEOVER(Q);26:MAKEUNDER(Q);28:MAKEMATHACCENT(Q); 3175 29:MAKEVCENTER(Q);{:733}{730:}14:BEGIN CURSTYLE:=MEM[Q].HH.B1; 3176 {703:}BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2) 3177 DIV 2); 3178 CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT,18); 3179 END{:703};GOTO 81;END; 3180 15:{731:}BEGIN CASE CURSTYLE DIV 2 OF 0:BEGIN P:=MEM[Q+1].HH.LH; 3181 MEM[Q+1].HH.LH:=0;END;1:BEGIN P:=MEM[Q+1].HH.RH;MEM[Q+1].HH.RH:=0;END; 3182 2:BEGIN P:=MEM[Q+2].HH.LH;MEM[Q+2].HH.LH:=0;END; 3183 3:BEGIN P:=MEM[Q+2].HH.RH;MEM[Q+2].HH.RH:=0;END;END; 3184 FLUSHNODELIST(MEM[Q+1].HH.LH);FLUSHNODELIST(MEM[Q+1].HH.RH); 3185 FLUSHNODELIST(MEM[Q+2].HH.LH);FLUSHNODELIST(MEM[Q+2].HH.RH); 3186 MEM[Q].HH.B0:=14;MEM[Q].HH.B1:=CURSTYLE;MEM[Q+1].INT:=0;MEM[Q+2].INT:=0; 3187 IF P<>0 THEN BEGIN Z:=MEM[Q].HH.RH;MEM[Q].HH.RH:=P; 3188 WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;MEM[P].HH.RH:=Z;END;GOTO 81; 3189 END{:731};3,4,5,8,12,7:GOTO 81; 3190 2:BEGIN IF MEM[Q+3].INT>MAXH THEN MAXH:=MEM[Q+3].INT; 3191 IF MEM[Q+2].INT>MAXD THEN MAXD:=MEM[Q+2].INT;GOTO 81;END; 3192 10:BEGIN{732:}IF MEM[Q].HH.B1=99 THEN BEGIN X:=MEM[Q+1].HH.LH; 3193 Y:=MATHGLUE(X,CURMU);DELETEGLUEREF(X);MEM[Q+1].HH.LH:=Y;MEM[Q].HH.B1:=0; 3194 END ELSE IF(CURSIZE<>0)AND(MEM[Q].HH.B1=98)THEN BEGIN P:=MEM[Q].HH.RH; 3195 IF P<>0 THEN IF(MEM[P].HH.B0=10)OR(MEM[P].HH.B0=11)THEN BEGIN MEM[Q].HH. 3196 RH:=MEM[P].HH.RH;MEM[P].HH.RH:=0;FLUSHNODELIST(P);END;END{:732};GOTO 81; 3197 END;11:BEGIN MATHKERN(Q,CURMU);GOTO 81;END;{:730}ELSE CONFUSION(889)END; 3198 {754:}CASE MEM[Q+1].HH.RH OF 1,4:{755:}BEGIN FETCH(Q+1); 3199 IF(CURI.B0>0)THEN BEGIN DELTA:=FONTINFO[ITALICBASE[CURF]+(CURI.B2-0)DIV 3200 4].INT;P:=NEWCHARACTER(CURF,CURC-0); 3201 IF(MEM[Q+1].HH.RH=4)AND(FONTINFO[2+PARAMBASE[CURF]].INT<>0)THEN DELTA:=0 3202 ; 3203 IF(MEM[Q+3].HH.RH=0)AND(DELTA<>0)THEN BEGIN MEM[P].HH.RH:=NEWKERN(DELTA) 3204 ;DELTA:=0;END;END ELSE P:=0;END{:755};0:P:=0;2:P:=MEM[Q+1].HH.LH; 3205 3:BEGIN CURMLIST:=MEM[Q+1].HH.LH;SAVESTYLE:=CURSTYLE; 3206 MLISTPENALTIES:=FALSE;MLISTTOHLIST;CURSTYLE:=SAVESTYLE; 3207 {703:}BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2) 3208 DIV 2); 3209 CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT,18); 3210 END{:703};P:=HPACK(MEM[29997].HH.RH,0,1);END;ELSE CONFUSION(890)END; 3211 MEM[Q+1].INT:=P;IF(MEM[Q+3].HH.RH=0)AND(MEM[Q+2].HH.RH=0)THEN GOTO 82; 3212 MAKESCRIPTS(Q,DELTA){:754}{:728};82:Z:=HPACK(MEM[Q+1].INT,0,1); 3213 IF MEM[Z+3].INT>MAXH THEN MAXH:=MEM[Z+3].INT; 3214 IF MEM[Z+2].INT>MAXD THEN MAXD:=MEM[Z+2].INT;FREENODE(Z,7);80:R:=Q; 3215 RTYPE:=MEM[R].HH.B0;81:Q:=MEM[Q].HH.RH;END{:727}; 3216 {729:}IF RTYPE=18 THEN MEM[R].HH.B0:=16{:729};{760:}P:=29997; 3217 MEM[P].HH.RH:=0;Q:=MLIST;RTYPE:=0;CURSTYLE:=STYLE; 3218 {703:}BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2) 3219 DIV 2); 3220 CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT,18); 3221 END{:703};WHILE Q<>0 DO BEGIN{761:}T:=16;S:=4;PEN:=10000; 3222 CASE MEM[Q].HH.B0 OF 17,20,21,22,23:T:=MEM[Q].HH.B0;18:BEGIN T:=18; 3223 PEN:=EQTB[5272].INT;END;19:BEGIN T:=19;PEN:=EQTB[5273].INT;END; 3224 16,29,27,26:;24:S:=5;28:S:=5;25:S:=6; 3225 30,31:T:=MAKELEFTRIGHT(Q,STYLE,MAXD,MAXH); 3226 14:{763:}BEGIN CURSTYLE:=MEM[Q].HH.B1;S:=3; 3227 {703:}BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2) 3228 DIV 2); 3229 CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[3937+CURSIZE].HH.RH]].INT,18); 3230 END{:703};GOTO 83;END{:763};8,12,2,7,5,3,4,10,11:BEGIN MEM[P].HH.RH:=Q; 3231 P:=Q;Q:=MEM[Q].HH.RH;MEM[P].HH.RH:=0;GOTO 30;END; 3232 ELSE CONFUSION(891)END{:761}; 3233 {766:}IF RTYPE>0 THEN BEGIN CASE STRPOOL[RTYPE*8+T+MAGICOFFSET]OF 48:X:= 3234 0;49:IF CURSTYLE<4 THEN X:=15 ELSE X:=0;50:X:=15; 3235 51:IF CURSTYLE<4 THEN X:=16 ELSE X:=0; 3236 52:IF CURSTYLE<4 THEN X:=17 ELSE X:=0;ELSE CONFUSION(893)END; 3237 IF X<>0 THEN BEGIN Y:=MATHGLUE(EQTB[2882+X].HH.RH,CURMU);Z:=NEWGLUE(Y); 3238 MEM[Y].HH.RH:=0;MEM[P].HH.RH:=Z;P:=Z;MEM[Z].HH.B1:=X+1;END;END{:766}; 3239 {767:}IF MEM[Q+1].INT<>0 THEN BEGIN MEM[P].HH.RH:=MEM[Q+1].INT; 3240 REPEAT P:=MEM[P].HH.RH;UNTIL MEM[P].HH.RH=0;END; 3241 IF PENALTIES THEN IF MEM[Q].HH.RH<>0 THEN IF PEN<10000 THEN BEGIN RTYPE 3242 :=MEM[MEM[Q].HH.RH].HH.B0; 3243 IF RTYPE<>12 THEN IF RTYPE<>19 THEN BEGIN Z:=NEWPENALTY(PEN); 3244 MEM[P].HH.RH:=Z;P:=Z;END;END{:767};RTYPE:=T;83:R:=Q;Q:=MEM[Q].HH.RH; 3245 FREENODE(R,S);30:END{:760};END;{:726}{772:}PROCEDURE PUSHALIGNMENT; 3246 VAR P:HALFWORD;BEGIN P:=GETNODE(5);MEM[P].HH.RH:=ALIGNPTR; 3247 MEM[P].HH.LH:=CURALIGN;MEM[P+1].HH.LH:=MEM[29992].HH.RH; 3248 MEM[P+1].HH.RH:=CURSPAN;MEM[P+2].INT:=CURLOOP;MEM[P+3].INT:=ALIGNSTATE; 3249 MEM[P+4].HH.LH:=CURHEAD;MEM[P+4].HH.RH:=CURTAIL;ALIGNPTR:=P; 3250 CURHEAD:=GETAVAIL;END;PROCEDURE POPALIGNMENT;VAR P:HALFWORD; 3251 BEGIN BEGIN MEM[CURHEAD].HH.RH:=AVAIL;AVAIL:=CURHEAD; 3252 {DYNUSED:=DYNUSED-1;}END;P:=ALIGNPTR;CURTAIL:=MEM[P+4].HH.RH; 3253 CURHEAD:=MEM[P+4].HH.LH;ALIGNSTATE:=MEM[P+3].INT;CURLOOP:=MEM[P+2].INT; 3254 CURSPAN:=MEM[P+1].HH.RH;MEM[29992].HH.RH:=MEM[P+1].HH.LH; 3255 CURALIGN:=MEM[P].HH.LH;ALIGNPTR:=MEM[P].HH.RH;FREENODE(P,5);END; 3256 {:772}{774:}{782:}PROCEDURE GETPREAMBLETOKEN;LABEL 20;BEGIN 20:GETTOKEN; 3257 WHILE(CURCHR=256)AND(CURCMD=4)DO BEGIN GETTOKEN; 3258 IF CURCMD>100 THEN BEGIN EXPAND;GETTOKEN;END;END; 3259 IF CURCMD=9 THEN FATALERROR(595); 3260 IF(CURCMD=75)AND(CURCHR=2893)THEN BEGIN SCANOPTIONALEQUALS;SCANGLUE(2); 3261 IF EQTB[5306].INT>0 THEN GEQDEFINE(2893,117,CURVAL)ELSE EQDEFINE(2893, 3262 117,CURVAL);GOTO 20;END;END;{:782}PROCEDURE ALIGNPEEK;FORWARD; 3263 PROCEDURE NORMALPARAGRAPH;FORWARD;PROCEDURE INITALIGN;LABEL 30,31,32,22; 3264 VAR SAVECSPTR:HALFWORD;P:HALFWORD;BEGIN SAVECSPTR:=CURCS;PUSHALIGNMENT; 3265 ALIGNSTATE:=-1000000; 3266 {776:}IF(CURLIST.MODEFIELD=203)AND((CURLIST.TAILFIELD<>CURLIST.HEADFIELD 3267 )OR(CURLIST.AUXFIELD.INT<>0))THEN BEGIN BEGIN IF INTERACTION=3 THEN; 3268 PRINTNL(262);PRINT(680);END;PRINTESC(520);PRINT(894);BEGIN HELPPTR:=3; 3269 HELPLINE[2]:=895;HELPLINE[1]:=896;HELPLINE[0]:=897;END;ERROR;FLUSHMATH; 3270 END{:776};PUSHNEST; 3271 {775:}IF CURLIST.MODEFIELD=203 THEN BEGIN CURLIST.MODEFIELD:=-1; 3272 CURLIST.AUXFIELD.INT:=NEST[NESTPTR-2].AUXFIELD.INT; 3273 END ELSE IF CURLIST.MODEFIELD>0 THEN CURLIST.MODEFIELD:=-CURLIST. 3274 MODEFIELD{:775};SCANSPEC(6,FALSE);{777:}MEM[29992].HH.RH:=0; 3275 CURALIGN:=29992;CURLOOP:=0;SCANNERSTATUS:=4;WARNINGINDEX:=SAVECSPTR; 3276 ALIGNSTATE:=-1000000; 3277 WHILE TRUE DO BEGIN{778:}MEM[CURALIGN].HH.RH:=NEWPARAMGLUE(11); 3278 CURALIGN:=MEM[CURALIGN].HH.RH{:778};IF CURCMD=5 THEN GOTO 30; 3279 {779:}{783:}P:=29996;MEM[P].HH.RH:=0; 3280 WHILE TRUE DO BEGIN GETPREAMBLETOKEN;IF CURCMD=6 THEN GOTO 31; 3281 IF(CURCMD<=5)AND(CURCMD>=4)AND(ALIGNSTATE=-1000000)THEN IF(P=29996)AND( 3282 CURLOOP=0)AND(CURCMD=4)THEN CURLOOP:=CURALIGN ELSE BEGIN BEGIN IF 3283 INTERACTION=3 THEN;PRINTNL(262);PRINT(903);END;BEGIN HELPPTR:=3; 3284 HELPLINE[2]:=904;HELPLINE[1]:=905;HELPLINE[0]:=906;END;BACKERROR; 3285 GOTO 31; 3286 END ELSE IF(CURCMD<>10)OR(P<>29996)THEN BEGIN MEM[P].HH.RH:=GETAVAIL; 3287 P:=MEM[P].HH.RH;MEM[P].HH.LH:=CURTOK;END;END;31:{:783}; 3288 MEM[CURALIGN].HH.RH:=NEWNULLBOX;CURALIGN:=MEM[CURALIGN].HH.RH; 3289 MEM[CURALIGN].HH.LH:=29991;MEM[CURALIGN+1].INT:=-1073741824; 3290 MEM[CURALIGN+3].INT:=MEM[29996].HH.RH;{784:}P:=29996;MEM[P].HH.RH:=0; 3291 WHILE TRUE DO BEGIN 22:GETPREAMBLETOKEN; 3292 IF(CURCMD<=5)AND(CURCMD>=4)AND(ALIGNSTATE=-1000000)THEN GOTO 32; 3293 IF CURCMD=6 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 3294 PRINT(907);END;BEGIN HELPPTR:=3;HELPLINE[2]:=904;HELPLINE[1]:=905; 3295 HELPLINE[0]:=908;END;ERROR;GOTO 22;END;MEM[P].HH.RH:=GETAVAIL; 3296 P:=MEM[P].HH.RH;MEM[P].HH.LH:=CURTOK;END;32:MEM[P].HH.RH:=GETAVAIL; 3297 P:=MEM[P].HH.RH;MEM[P].HH.LH:=6714{:784}; 3298 MEM[CURALIGN+2].INT:=MEM[29996].HH.RH{:779};END; 3299 30:SCANNERSTATUS:=0{:777};NEWSAVELEVEL(6); 3300 IF EQTB[3420].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3420].HH.RH,13); 3301 ALIGNPEEK;END;{:774}{786:}{787:}PROCEDURE INITSPAN(P:HALFWORD); 3302 BEGIN PUSHNEST; 3303 IF CURLIST.MODEFIELD=-102 THEN CURLIST.AUXFIELD.HH.LH:=1000 ELSE BEGIN 3304 CURLIST.AUXFIELD.INT:=-65536000;NORMALPARAGRAPH;END;CURSPAN:=P;END; 3305 {:787}PROCEDURE INITROW;BEGIN PUSHNEST; 3306 CURLIST.MODEFIELD:=(-103)-CURLIST.MODEFIELD; 3307 IF CURLIST.MODEFIELD=-102 THEN CURLIST.AUXFIELD.HH.LH:=0 ELSE CURLIST. 3308 AUXFIELD.INT:=0; 3309 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(MEM[MEM[29992].HH.RH+1].HH. 3310 LH);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 3311 MEM[CURLIST.TAILFIELD].HH.B1:=12;CURALIGN:=MEM[MEM[29992].HH.RH].HH.RH; 3312 CURTAIL:=CURHEAD;INITSPAN(CURALIGN);END;{:786}{788:}PROCEDURE INITCOL; 3313 BEGIN MEM[CURALIGN+5].HH.LH:=CURCMD; 3314 IF CURCMD=63 THEN ALIGNSTATE:=0 ELSE BEGIN BACKINPUT; 3315 BEGINTOKENLIST(MEM[CURALIGN+3].INT,1);END;END; 3316 {:788}{791:}FUNCTION FINCOL:BOOLEAN;LABEL 10;VAR P:HALFWORD; 3317 Q,R:HALFWORD;S:HALFWORD;U:HALFWORD;W:SCALED;O:GLUEORD;N:HALFWORD; 3318 BEGIN IF CURALIGN=0 THEN CONFUSION(909);Q:=MEM[CURALIGN].HH.RH; 3319 IF Q=0 THEN CONFUSION(909);IF ALIGNSTATE<500000 THEN FATALERROR(595); 3320 P:=MEM[Q].HH.RH; 3321 {792:}IF(P=0)AND(MEM[CURALIGN+5].HH.LH<257)THEN IF CURLOOP<>0 THEN{793:} 3322 BEGIN MEM[Q].HH.RH:=NEWNULLBOX;P:=MEM[Q].HH.RH;MEM[P].HH.LH:=29991; 3323 MEM[P+1].INT:=-1073741824;CURLOOP:=MEM[CURLOOP].HH.RH;{794:}Q:=29996; 3324 R:=MEM[CURLOOP+3].INT;WHILE R<>0 DO BEGIN MEM[Q].HH.RH:=GETAVAIL; 3325 Q:=MEM[Q].HH.RH;MEM[Q].HH.LH:=MEM[R].HH.LH;R:=MEM[R].HH.RH;END; 3326 MEM[Q].HH.RH:=0;MEM[P+3].INT:=MEM[29996].HH.RH;Q:=29996; 3327 R:=MEM[CURLOOP+2].INT;WHILE R<>0 DO BEGIN MEM[Q].HH.RH:=GETAVAIL; 3328 Q:=MEM[Q].HH.RH;MEM[Q].HH.LH:=MEM[R].HH.LH;R:=MEM[R].HH.RH;END; 3329 MEM[Q].HH.RH:=0;MEM[P+2].INT:=MEM[29996].HH.RH{:794}; 3330 CURLOOP:=MEM[CURLOOP].HH.RH;MEM[P].HH.RH:=NEWGLUE(MEM[CURLOOP+1].HH.LH); 3331 MEM[MEM[P].HH.RH].HH.B1:=12; 3332 END{:793}ELSE BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(910); 3333 END;PRINTESC(899);BEGIN HELPPTR:=3;HELPLINE[2]:=911;HELPLINE[1]:=912; 3334 HELPLINE[0]:=913;END;MEM[CURALIGN+5].HH.LH:=257;ERROR;END{:792}; 3335 IF MEM[CURALIGN+5].HH.LH<>256 THEN BEGIN UNSAVE;NEWSAVELEVEL(6); 3336 {796:}BEGIN IF CURLIST.MODEFIELD=-102 THEN BEGIN ADJUSTTAIL:=CURTAIL; 3337 U:=HPACK(MEM[CURLIST.HEADFIELD].HH.RH,0,1);W:=MEM[U+1].INT; 3338 CURTAIL:=ADJUSTTAIL;ADJUSTTAIL:=0; 3339 END ELSE BEGIN U:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,0,1,0); 3340 W:=MEM[U+3].INT;END;N:=0; 3341 IF CURSPAN<>CURALIGN THEN{798:}BEGIN Q:=CURSPAN;REPEAT N:=N+1; 3342 Q:=MEM[MEM[Q].HH.RH].HH.RH;UNTIL Q=CURALIGN; 3343 IF N>255 THEN CONFUSION(914);Q:=CURSPAN; 3344 WHILE MEM[MEM[Q].HH.LH].HH.RH<N DO Q:=MEM[Q].HH.LH; 3345 IF MEM[MEM[Q].HH.LH].HH.RH>N THEN BEGIN S:=GETNODE(2); 3346 MEM[S].HH.LH:=MEM[Q].HH.LH;MEM[S].HH.RH:=N;MEM[Q].HH.LH:=S; 3347 MEM[S+1].INT:=W; 3348 END ELSE IF MEM[MEM[Q].HH.LH+1].INT<W THEN MEM[MEM[Q].HH.LH+1].INT:=W; 3349 END{:798}ELSE IF W>MEM[CURALIGN+1].INT THEN MEM[CURALIGN+1].INT:=W; 3350 MEM[U].HH.B0:=13;MEM[U].HH.B1:=N; 3351 {659:}IF TOTALSTRETCH[3]<>0 THEN O:=3 ELSE IF TOTALSTRETCH[2]<>0 THEN O 3352 :=2 ELSE IF TOTALSTRETCH[1]<>0 THEN O:=1 ELSE O:=0{:659}; 3353 MEM[U+5].HH.B1:=O;MEM[U+6].INT:=TOTALSTRETCH[O]; 3354 {665:}IF TOTALSHRINK[3]<>0 THEN O:=3 ELSE IF TOTALSHRINK[2]<>0 THEN O:=2 3355 ELSE IF TOTALSHRINK[1]<>0 THEN O:=1 ELSE O:=0{:665};MEM[U+5].HH.B0:=O; 3356 MEM[U+4].INT:=TOTALSHRINK[O];POPNEST;MEM[CURLIST.TAILFIELD].HH.RH:=U; 3357 CURLIST.TAILFIELD:=U;END{:796}; 3358 {795:}BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(MEM[MEM[CURALIGN].HH. 3359 RH+1].HH.LH);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 3360 MEM[CURLIST.TAILFIELD].HH.B1:=12{:795}; 3361 IF MEM[CURALIGN+5].HH.LH>=257 THEN BEGIN FINCOL:=TRUE;GOTO 10;END; 3362 INITSPAN(P);END;ALIGNSTATE:=1000000;{406:}REPEAT GETXTOKEN; 3363 UNTIL CURCMD<>10{:406};CURALIGN:=P;INITCOL;FINCOL:=FALSE;10:END; 3364 {:791}{799:}PROCEDURE FINROW;VAR P:HALFWORD; 3365 BEGIN IF CURLIST.MODEFIELD=-102 THEN BEGIN P:=HPACK(MEM[CURLIST. 3366 HEADFIELD].HH.RH,0,1);POPNEST;APPENDTOVLIST(P); 3367 IF CURHEAD<>CURTAIL THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[CURHEAD 3368 ].HH.RH;CURLIST.TAILFIELD:=CURTAIL;END; 3369 END ELSE BEGIN P:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,0,1,1073741823); 3370 POPNEST;MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P; 3371 CURLIST.AUXFIELD.HH.LH:=1000;END;MEM[P].HH.B0:=13;MEM[P+6].INT:=0; 3372 IF EQTB[3420].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3420].HH.RH,13); 3373 ALIGNPEEK;END;{:799}{800:}PROCEDURE DOASSIGNMENTS;FORWARD; 3374 PROCEDURE RESUMEAFTERDISPLAY;FORWARD;PROCEDURE BUILDPAGE;FORWARD; 3375 PROCEDURE FINALIGN;VAR P,Q,R,S,U,V:HALFWORD;T,W:SCALED;O:SCALED; 3376 N:HALFWORD;RULESAVE:SCALED;AUXSAVE:MEMORYWORD; 3377 BEGIN IF CURGROUP<>6 THEN CONFUSION(915);UNSAVE; 3378 IF CURGROUP<>6 THEN CONFUSION(916);UNSAVE; 3379 IF NEST[NESTPTR-1].MODEFIELD=203 THEN O:=EQTB[5845].INT ELSE O:=0; 3380 {801:}Q:=MEM[MEM[29992].HH.RH].HH.RH;REPEAT FLUSHLIST(MEM[Q+3].INT); 3381 FLUSHLIST(MEM[Q+2].INT);P:=MEM[MEM[Q].HH.RH].HH.RH; 3382 IF MEM[Q+1].INT=-1073741824 THEN{802:}BEGIN MEM[Q+1].INT:=0; 3383 R:=MEM[Q].HH.RH;S:=MEM[R+1].HH.LH; 3384 IF S<>0 THEN BEGIN MEM[0].HH.RH:=MEM[0].HH.RH+1;DELETEGLUEREF(S); 3385 MEM[R+1].HH.LH:=0;END;END{:802}; 3386 IF MEM[Q].HH.LH<>29991 THEN{803:}BEGIN T:=MEM[Q+1].INT+MEM[MEM[MEM[Q].HH 3387 .RH+1].HH.LH+1].INT;R:=MEM[Q].HH.LH;S:=29991;MEM[S].HH.LH:=P;N:=1; 3388 REPEAT MEM[R+1].INT:=MEM[R+1].INT-T;U:=MEM[R].HH.LH; 3389 WHILE MEM[R].HH.RH>N DO BEGIN S:=MEM[S].HH.LH; 3390 N:=MEM[MEM[S].HH.LH].HH.RH+1;END; 3391 IF MEM[R].HH.RH<N THEN BEGIN MEM[R].HH.LH:=MEM[S].HH.LH;MEM[S].HH.LH:=R; 3392 MEM[R].HH.RH:=MEM[R].HH.RH-1;S:=R; 3393 END ELSE BEGIN IF MEM[R+1].INT>MEM[MEM[S].HH.LH+1].INT THEN MEM[MEM[S]. 3394 HH.LH+1].INT:=MEM[R+1].INT;FREENODE(R,2);END;R:=U;UNTIL R=29991; 3395 END{:803};MEM[Q].HH.B0:=13;MEM[Q].HH.B1:=0;MEM[Q+3].INT:=0; 3396 MEM[Q+2].INT:=0;MEM[Q+5].HH.B1:=0;MEM[Q+5].HH.B0:=0;MEM[Q+6].INT:=0; 3397 MEM[Q+4].INT:=0;Q:=P;UNTIL Q=0{:801};{804:}SAVEPTR:=SAVEPTR-2; 3398 PACKBEGINLINE:=-CURLIST.MLFIELD; 3399 IF CURLIST.MODEFIELD=-1 THEN BEGIN RULESAVE:=EQTB[5846].INT; 3400 EQTB[5846].INT:=0; 3401 P:=HPACK(MEM[29992].HH.RH,SAVESTACK[SAVEPTR+1].INT,SAVESTACK[SAVEPTR+0]. 3402 INT);EQTB[5846].INT:=RULESAVE; 3403 END ELSE BEGIN Q:=MEM[MEM[29992].HH.RH].HH.RH; 3404 REPEAT MEM[Q+3].INT:=MEM[Q+1].INT;MEM[Q+1].INT:=0; 3405 Q:=MEM[MEM[Q].HH.RH].HH.RH;UNTIL Q=0; 3406 P:=VPACKAGE(MEM[29992].HH.RH,SAVESTACK[SAVEPTR+1].INT,SAVESTACK[SAVEPTR 3407 +0].INT,1073741823);Q:=MEM[MEM[29992].HH.RH].HH.RH; 3408 REPEAT MEM[Q+1].INT:=MEM[Q+3].INT;MEM[Q+3].INT:=0; 3409 Q:=MEM[MEM[Q].HH.RH].HH.RH;UNTIL Q=0;END;PACKBEGINLINE:=0{:804}; 3410 {805:}Q:=MEM[CURLIST.HEADFIELD].HH.RH;S:=CURLIST.HEADFIELD; 3411 WHILE Q<>0 DO BEGIN IF NOT(Q>=HIMEMMIN)THEN IF MEM[Q].HH.B0=13 THEN 3412 {807:}BEGIN IF CURLIST.MODEFIELD=-1 THEN BEGIN MEM[Q].HH.B0:=0; 3413 MEM[Q+1].INT:=MEM[P+1].INT;END ELSE BEGIN MEM[Q].HH.B0:=1; 3414 MEM[Q+3].INT:=MEM[P+3].INT;END;MEM[Q+5].HH.B1:=MEM[P+5].HH.B1; 3415 MEM[Q+5].HH.B0:=MEM[P+5].HH.B0;MEM[Q+6].GR:=MEM[P+6].GR;MEM[Q+4].INT:=O; 3416 R:=MEM[MEM[Q+5].HH.RH].HH.RH;S:=MEM[MEM[P+5].HH.RH].HH.RH; 3417 REPEAT{808:}N:=MEM[R].HH.B1;T:=MEM[S+1].INT;W:=T;U:=29996; 3418 WHILE N>0 DO BEGIN N:=N-1;{809:}S:=MEM[S].HH.RH;V:=MEM[S+1].HH.LH; 3419 MEM[U].HH.RH:=NEWGLUE(V);U:=MEM[U].HH.RH;MEM[U].HH.B1:=12; 3420 T:=T+MEM[V+1].INT; 3421 IF MEM[P+5].HH.B0=1 THEN BEGIN IF MEM[V].HH.B0=MEM[P+5].HH.B1 THEN T:=T+ 3422 ROUND(MEM[P+6].GR*MEM[V+2].INT); 3423 END ELSE IF MEM[P+5].HH.B0=2 THEN BEGIN IF MEM[V].HH.B1=MEM[P+5].HH.B1 3424 THEN T:=T-ROUND(MEM[P+6].GR*MEM[V+3].INT);END;S:=MEM[S].HH.RH; 3425 MEM[U].HH.RH:=NEWNULLBOX;U:=MEM[U].HH.RH;T:=T+MEM[S+1].INT; 3426 IF CURLIST.MODEFIELD=-1 THEN MEM[U+1].INT:=MEM[S+1].INT ELSE BEGIN MEM[U 3427 ].HH.B0:=1;MEM[U+3].INT:=MEM[S+1].INT;END{:809};END; 3428 IF CURLIST.MODEFIELD=-1 THEN{810:}BEGIN MEM[R+3].INT:=MEM[Q+3].INT; 3429 MEM[R+2].INT:=MEM[Q+2].INT; 3430 IF T=MEM[R+1].INT THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0; 3431 MEM[R+6].GR:=0.0; 3432 END ELSE IF T>MEM[R+1].INT THEN BEGIN MEM[R+5].HH.B0:=1; 3433 IF MEM[R+6].INT=0 THEN MEM[R+6].GR:=0.0 ELSE MEM[R+6].GR:=(T-MEM[R+1]. 3434 INT)/MEM[R+6].INT;END ELSE BEGIN MEM[R+5].HH.B1:=MEM[R+5].HH.B0; 3435 MEM[R+5].HH.B0:=2; 3436 IF MEM[R+4].INT=0 THEN MEM[R+6].GR:=0.0 ELSE IF(MEM[R+5].HH.B1=0)AND(MEM 3437 [R+1].INT-T>MEM[R+4].INT)THEN MEM[R+6].GR:=1.0 ELSE MEM[R+6].GR:=(MEM[R 3438 +1].INT-T)/MEM[R+4].INT;END;MEM[R+1].INT:=W;MEM[R].HH.B0:=0; 3439 END{:810}ELSE{811:}BEGIN MEM[R+1].INT:=MEM[Q+1].INT; 3440 IF T=MEM[R+3].INT THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0; 3441 MEM[R+6].GR:=0.0; 3442 END ELSE IF T>MEM[R+3].INT THEN BEGIN MEM[R+5].HH.B0:=1; 3443 IF MEM[R+6].INT=0 THEN MEM[R+6].GR:=0.0 ELSE MEM[R+6].GR:=(T-MEM[R+3]. 3444 INT)/MEM[R+6].INT;END ELSE BEGIN MEM[R+5].HH.B1:=MEM[R+5].HH.B0; 3445 MEM[R+5].HH.B0:=2; 3446 IF MEM[R+4].INT=0 THEN MEM[R+6].GR:=0.0 ELSE IF(MEM[R+5].HH.B1=0)AND(MEM 3447 [R+3].INT-T>MEM[R+4].INT)THEN MEM[R+6].GR:=1.0 ELSE MEM[R+6].GR:=(MEM[R 3448 +3].INT-T)/MEM[R+4].INT;END;MEM[R+3].INT:=W;MEM[R].HH.B0:=1;END{:811}; 3449 MEM[R+4].INT:=0;IF U<>29996 THEN BEGIN MEM[U].HH.RH:=MEM[R].HH.RH; 3450 MEM[R].HH.RH:=MEM[29996].HH.RH;R:=U;END{:808}; 3451 R:=MEM[MEM[R].HH.RH].HH.RH;S:=MEM[MEM[S].HH.RH].HH.RH;UNTIL R=0; 3452 END{:807}ELSE IF MEM[Q].HH.B0=2 THEN{806:}BEGIN IF(MEM[Q+1].INT= 3453 -1073741824)THEN MEM[Q+1].INT:=MEM[P+1].INT; 3454 IF(MEM[Q+3].INT=-1073741824)THEN MEM[Q+3].INT:=MEM[P+3].INT; 3455 IF(MEM[Q+2].INT=-1073741824)THEN MEM[Q+2].INT:=MEM[P+2].INT; 3456 IF O<>0 THEN BEGIN R:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0;Q:=HPACK(Q,0,1); 3457 MEM[Q+4].INT:=O;MEM[Q].HH.RH:=R;MEM[S].HH.RH:=Q;END;END{:806};S:=Q; 3458 Q:=MEM[Q].HH.RH;END{:805};FLUSHNODELIST(P);POPALIGNMENT; 3459 {812:}AUXSAVE:=CURLIST.AUXFIELD;P:=MEM[CURLIST.HEADFIELD].HH.RH; 3460 Q:=CURLIST.TAILFIELD;POPNEST; 3461 IF CURLIST.MODEFIELD=203 THEN{1206:}BEGIN DOASSIGNMENTS; 3462 IF CURCMD<>3 THEN{1207:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 3463 PRINT(1170);END;BEGIN HELPPTR:=2;HELPLINE[1]:=895;HELPLINE[0]:=896;END; 3464 BACKERROR;END{:1207}ELSE{1197:}BEGIN GETXTOKEN; 3465 IF CURCMD<>3 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 3466 PRINT(1166);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1167;HELPLINE[0]:=1168; 3467 END;BACKERROR;END;END{:1197};POPNEST; 3468 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[5274].INT); 3469 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 3470 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(3); 3471 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 3472 MEM[CURLIST.TAILFIELD].HH.RH:=P;IF P<>0 THEN CURLIST.TAILFIELD:=Q; 3473 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[5275].INT); 3474 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 3475 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(4); 3476 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 3477 CURLIST.AUXFIELD.INT:=AUXSAVE.INT;RESUMEAFTERDISPLAY; 3478 END{:1206}ELSE BEGIN CURLIST.AUXFIELD:=AUXSAVE; 3479 MEM[CURLIST.TAILFIELD].HH.RH:=P;IF P<>0 THEN CURLIST.TAILFIELD:=Q; 3480 IF CURLIST.MODEFIELD=1 THEN BUILDPAGE;END{:812};END; 3481 {785:}PROCEDURE ALIGNPEEK;LABEL 20;BEGIN 20:ALIGNSTATE:=1000000; 3482 {406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; 3483 IF CURCMD=34 THEN BEGIN SCANLEFTBRACE;NEWSAVELEVEL(7); 3484 IF CURLIST.MODEFIELD=-1 THEN NORMALPARAGRAPH; 3485 END ELSE IF CURCMD=2 THEN FINALIGN ELSE IF(CURCMD=5)AND(CURCHR=258)THEN 3486 GOTO 20 ELSE BEGIN INITROW;INITCOL;END;END; 3487 {:785}{:800}{815:}{826:}FUNCTION FINITESHRINK(P:HALFWORD):HALFWORD; 3488 VAR Q:HALFWORD; 3489 BEGIN IF NOSHRINKERRORYET THEN BEGIN NOSHRINKERRORYET:=FALSE; 3490 {IF EQTB[5295].INT>0 THEN ENDDIAGNOSTIC(TRUE);} 3491 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(917);END; 3492 BEGIN HELPPTR:=5;HELPLINE[4]:=918;HELPLINE[3]:=919;HELPLINE[2]:=920; 3493 HELPLINE[1]:=921;HELPLINE[0]:=922;END;ERROR; 3494 {IF EQTB[5295].INT>0 THEN BEGINDIAGNOSTIC;}END;Q:=NEWSPEC(P); 3495 MEM[Q].HH.B1:=0;DELETEGLUEREF(P);FINITESHRINK:=Q;END; 3496 {:826}{829:}PROCEDURE TRYBREAK(PI:INTEGER;BREAKTYPE:SMALLNUMBER); 3497 LABEL 10,30,31,22,60;VAR R:HALFWORD;PREVR:HALFWORD;OLDL:HALFWORD; 3498 NOBREAKYET:BOOLEAN;{830:}PREVPREVR:HALFWORD;S:HALFWORD;Q:HALFWORD; 3499 V:HALFWORD;T:INTEGER;F:INTERNALFONTNUMBER;L:HALFWORD; 3500 NODERSTAYSACTIVE:BOOLEAN;LINEWIDTH:SCALED;FITCLASS:0..3;B:HALFWORD; 3501 D:INTEGER;ARTIFICIALDEMERITS:BOOLEAN;SHORTFALL:SCALED; 3502 {:830}BEGIN{831:}IF ABS(PI)>=10000 THEN IF PI>0 THEN GOTO 10 ELSE PI:= 3503 -10000{:831};NOBREAKYET:=TRUE;PREVR:=29993;OLDL:=0; 3504 CURACTIVEWIDTH[1]:=ACTIVEWIDTH[1];CURACTIVEWIDTH[2]:=ACTIVEWIDTH[2]; 3505 CURACTIVEWIDTH[3]:=ACTIVEWIDTH[3];CURACTIVEWIDTH[4]:=ACTIVEWIDTH[4]; 3506 CURACTIVEWIDTH[5]:=ACTIVEWIDTH[5];CURACTIVEWIDTH[6]:=ACTIVEWIDTH[6]; 3507 WHILE TRUE DO BEGIN 22:R:=MEM[PREVR].HH.RH; 3508 {832:}IF MEM[R].HH.B0=2 THEN BEGIN CURACTIVEWIDTH[1]:=CURACTIVEWIDTH[1]+ 3509 MEM[R+1].INT;CURACTIVEWIDTH[2]:=CURACTIVEWIDTH[2]+MEM[R+2].INT; 3510 CURACTIVEWIDTH[3]:=CURACTIVEWIDTH[3]+MEM[R+3].INT; 3511 CURACTIVEWIDTH[4]:=CURACTIVEWIDTH[4]+MEM[R+4].INT; 3512 CURACTIVEWIDTH[5]:=CURACTIVEWIDTH[5]+MEM[R+5].INT; 3513 CURACTIVEWIDTH[6]:=CURACTIVEWIDTH[6]+MEM[R+6].INT;PREVPREVR:=PREVR; 3514 PREVR:=R;GOTO 22;END{:832};{835:}BEGIN L:=MEM[R+1].HH.LH; 3515 IF L>OLDL THEN BEGIN IF(MINIMUMDEMERITS<1073741823)AND((OLDL<>EASYLINE) 3516 OR(R=29993))THEN{836:}BEGIN IF NOBREAKYET THEN{837:}BEGIN NOBREAKYET:= 3517 FALSE;BREAKWIDTH[1]:=BACKGROUND[1];BREAKWIDTH[2]:=BACKGROUND[2]; 3518 BREAKWIDTH[3]:=BACKGROUND[3];BREAKWIDTH[4]:=BACKGROUND[4]; 3519 BREAKWIDTH[5]:=BACKGROUND[5];BREAKWIDTH[6]:=BACKGROUND[6];S:=CURP; 3520 IF BREAKTYPE>0 THEN IF CURP<>0 THEN{840:}BEGIN T:=MEM[CURP].HH.B1; 3521 V:=CURP;S:=MEM[CURP+1].HH.RH;WHILE T>0 DO BEGIN T:=T-1;V:=MEM[V].HH.RH; 3522 {841:}IF(V>=HIMEMMIN)THEN BEGIN F:=MEM[V].HH.B0; 3523 BREAKWIDTH[1]:=BREAKWIDTH[1]-FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+ 3524 MEM[V].HH.B1].QQQQ.B0].INT; 3525 END ELSE CASE MEM[V].HH.B0 OF 6:BEGIN F:=MEM[V+1].HH.B0; 3526 BREAKWIDTH[1]:=BREAKWIDTH[1]-FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+ 3527 MEM[V+1].HH.B1].QQQQ.B0].INT;END; 3528 0,1,2,11:BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM[V+1].INT; 3529 ELSE CONFUSION(923)END{:841};END; 3530 WHILE S<>0 DO BEGIN{842:}IF(S>=HIMEMMIN)THEN BEGIN F:=MEM[S].HH.B0; 3531 BREAKWIDTH[1]:=BREAKWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+ 3532 MEM[S].HH.B1].QQQQ.B0].INT; 3533 END ELSE CASE MEM[S].HH.B0 OF 6:BEGIN F:=MEM[S+1].HH.B0; 3534 BREAKWIDTH[1]:=BREAKWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+ 3535 MEM[S+1].HH.B1].QQQQ.B0].INT;END; 3536 0,1,2,11:BREAKWIDTH[1]:=BREAKWIDTH[1]+MEM[S+1].INT; 3537 ELSE CONFUSION(924)END{:842};S:=MEM[S].HH.RH;END; 3538 BREAKWIDTH[1]:=BREAKWIDTH[1]+DISCWIDTH; 3539 IF MEM[CURP+1].HH.RH=0 THEN S:=MEM[V].HH.RH;END{:840}; 3540 WHILE S<>0 DO BEGIN IF(S>=HIMEMMIN)THEN GOTO 30; 3541 CASE MEM[S].HH.B0 OF 10:{838:}BEGIN V:=MEM[S+1].HH.LH; 3542 BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM[V+1].INT; 3543 BREAKWIDTH[2+MEM[V].HH.B0]:=BREAKWIDTH[2+MEM[V].HH.B0]-MEM[V+2].INT; 3544 BREAKWIDTH[6]:=BREAKWIDTH[6]-MEM[V+3].INT;END{:838};12:; 3545 9:BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM[S+1].INT; 3546 11:IF MEM[S].HH.B1<>1 THEN GOTO 30 ELSE BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM 3547 [S+1].INT;ELSE GOTO 30 END;S:=MEM[S].HH.RH;END;30:END{:837}; 3548 {843:}IF MEM[PREVR].HH.B0=2 THEN BEGIN MEM[PREVR+1].INT:=MEM[PREVR+1]. 3549 INT-CURACTIVEWIDTH[1]+BREAKWIDTH[1]; 3550 MEM[PREVR+2].INT:=MEM[PREVR+2].INT-CURACTIVEWIDTH[2]+BREAKWIDTH[2]; 3551 MEM[PREVR+3].INT:=MEM[PREVR+3].INT-CURACTIVEWIDTH[3]+BREAKWIDTH[3]; 3552 MEM[PREVR+4].INT:=MEM[PREVR+4].INT-CURACTIVEWIDTH[4]+BREAKWIDTH[4]; 3553 MEM[PREVR+5].INT:=MEM[PREVR+5].INT-CURACTIVEWIDTH[5]+BREAKWIDTH[5]; 3554 MEM[PREVR+6].INT:=MEM[PREVR+6].INT-CURACTIVEWIDTH[6]+BREAKWIDTH[6]; 3555 END ELSE IF PREVR=29993 THEN BEGIN ACTIVEWIDTH[1]:=BREAKWIDTH[1]; 3556 ACTIVEWIDTH[2]:=BREAKWIDTH[2];ACTIVEWIDTH[3]:=BREAKWIDTH[3]; 3557 ACTIVEWIDTH[4]:=BREAKWIDTH[4];ACTIVEWIDTH[5]:=BREAKWIDTH[5]; 3558 ACTIVEWIDTH[6]:=BREAKWIDTH[6];END ELSE BEGIN Q:=GETNODE(7); 3559 MEM[Q].HH.RH:=R;MEM[Q].HH.B0:=2;MEM[Q].HH.B1:=0; 3560 MEM[Q+1].INT:=BREAKWIDTH[1]-CURACTIVEWIDTH[1]; 3561 MEM[Q+2].INT:=BREAKWIDTH[2]-CURACTIVEWIDTH[2]; 3562 MEM[Q+3].INT:=BREAKWIDTH[3]-CURACTIVEWIDTH[3]; 3563 MEM[Q+4].INT:=BREAKWIDTH[4]-CURACTIVEWIDTH[4]; 3564 MEM[Q+5].INT:=BREAKWIDTH[5]-CURACTIVEWIDTH[5]; 3565 MEM[Q+6].INT:=BREAKWIDTH[6]-CURACTIVEWIDTH[6];MEM[PREVR].HH.RH:=Q; 3566 PREVPREVR:=PREVR;PREVR:=Q;END{:843}; 3567 IF ABS(EQTB[5279].INT)>=1073741823-MINIMUMDEMERITS THEN MINIMUMDEMERITS 3568 :=1073741822 ELSE MINIMUMDEMERITS:=MINIMUMDEMERITS+ABS(EQTB[5279].INT); 3569 FOR FITCLASS:=0 TO 3 DO BEGIN IF MINIMALDEMERITS[FITCLASS]<= 3570 MINIMUMDEMERITS THEN{845:}BEGIN Q:=GETNODE(2);MEM[Q].HH.RH:=PASSIVE; 3571 PASSIVE:=Q;MEM[Q+1].HH.RH:=CURP;{PASSNUMBER:=PASSNUMBER+1; 3572 MEM[Q].HH.LH:=PASSNUMBER;}MEM[Q+1].HH.LH:=BESTPLACE[FITCLASS]; 3573 Q:=GETNODE(3);MEM[Q+1].HH.RH:=PASSIVE; 3574 MEM[Q+1].HH.LH:=BESTPLLINE[FITCLASS]+1;MEM[Q].HH.B1:=FITCLASS; 3575 MEM[Q].HH.B0:=BREAKTYPE;MEM[Q+2].INT:=MINIMALDEMERITS[FITCLASS]; 3576 MEM[Q].HH.RH:=R;MEM[PREVR].HH.RH:=Q;PREVR:=Q; 3577 {IF EQTB[5295].INT>0 THEN[846:]BEGIN PRINTNL(925); 3578 PRINTINT(MEM[PASSIVE].HH.LH);PRINT(926);PRINTINT(MEM[Q+1].HH.LH-1); 3579 PRINTCHAR(46);PRINTINT(FITCLASS);IF BREAKTYPE=1 THEN PRINTCHAR(45); 3580 PRINT(927);PRINTINT(MEM[Q+2].INT);PRINT(928); 3581 IF MEM[PASSIVE+1].HH.LH=0 THEN PRINTCHAR(48)ELSE PRINTINT(MEM[MEM[ 3582 PASSIVE+1].HH.LH].HH.LH);END[:846];}END{:845}; 3583 MINIMALDEMERITS[FITCLASS]:=1073741823;END;MINIMUMDEMERITS:=1073741823; 3584 {844:}IF R<>29993 THEN BEGIN Q:=GETNODE(7);MEM[Q].HH.RH:=R; 3585 MEM[Q].HH.B0:=2;MEM[Q].HH.B1:=0; 3586 MEM[Q+1].INT:=CURACTIVEWIDTH[1]-BREAKWIDTH[1]; 3587 MEM[Q+2].INT:=CURACTIVEWIDTH[2]-BREAKWIDTH[2]; 3588 MEM[Q+3].INT:=CURACTIVEWIDTH[3]-BREAKWIDTH[3]; 3589 MEM[Q+4].INT:=CURACTIVEWIDTH[4]-BREAKWIDTH[4]; 3590 MEM[Q+5].INT:=CURACTIVEWIDTH[5]-BREAKWIDTH[5]; 3591 MEM[Q+6].INT:=CURACTIVEWIDTH[6]-BREAKWIDTH[6];MEM[PREVR].HH.RH:=Q; 3592 PREVPREVR:=PREVR;PREVR:=Q;END{:844};END{:836};IF R=29993 THEN GOTO 10; 3593 {850:}IF L>EASYLINE THEN BEGIN LINEWIDTH:=SECONDWIDTH;OLDL:=65534; 3594 END ELSE BEGIN OLDL:=L; 3595 IF L>LASTSPECIALLINE THEN LINEWIDTH:=SECONDWIDTH ELSE IF EQTB[3412].HH. 3596 RH=0 THEN LINEWIDTH:=FIRSTWIDTH ELSE LINEWIDTH:=MEM[EQTB[3412].HH.RH+2*L 3597 ].INT;END{:850};END;END{:835};{851:}BEGIN ARTIFICIALDEMERITS:=FALSE; 3598 SHORTFALL:=LINEWIDTH-CURACTIVEWIDTH[1]; 3599 IF SHORTFALL>0 THEN{852:}IF(CURACTIVEWIDTH[3]<>0)OR(CURACTIVEWIDTH[4]<>0 3600 )OR(CURACTIVEWIDTH[5]<>0)THEN BEGIN B:=0;FITCLASS:=2; 3601 END ELSE BEGIN IF SHORTFALL>7230584 THEN IF CURACTIVEWIDTH[2]<1663497 3602 THEN BEGIN B:=10000;FITCLASS:=0;GOTO 31;END; 3603 B:=BADNESS(SHORTFALL,CURACTIVEWIDTH[2]); 3604 IF B>12 THEN IF B>99 THEN FITCLASS:=0 ELSE FITCLASS:=1 ELSE FITCLASS:=2; 3605 31:END{:852}ELSE{853:}BEGIN IF-SHORTFALL>CURACTIVEWIDTH[6]THEN B:=10001 3606 ELSE B:=BADNESS(-SHORTFALL,CURACTIVEWIDTH[6]); 3607 IF B>12 THEN FITCLASS:=3 ELSE FITCLASS:=2;END{:853}; 3608 IF(B>10000)OR(PI=-10000)THEN{854:}BEGIN IF FINALPASS AND(MINIMUMDEMERITS 3609 =1073741823)AND(MEM[R].HH.RH=29993)AND(PREVR=29993)THEN 3610 ARTIFICIALDEMERITS:=TRUE ELSE IF B>THRESHOLD THEN GOTO 60; 3611 NODERSTAYSACTIVE:=FALSE;END{:854}ELSE BEGIN PREVR:=R; 3612 IF B>THRESHOLD THEN GOTO 22;NODERSTAYSACTIVE:=TRUE;END; 3613 {855:}IF ARTIFICIALDEMERITS THEN D:=0 ELSE{859:}BEGIN D:=EQTB[5265].INT+ 3614 B;IF ABS(D)>=10000 THEN D:=100000000 ELSE D:=D*D; 3615 IF PI<>0 THEN IF PI>0 THEN D:=D+PI*PI ELSE IF PI>-10000 THEN D:=D-PI*PI; 3616 IF(BREAKTYPE=1)AND(MEM[R].HH.B0=1)THEN IF CURP<>0 THEN D:=D+EQTB[5277]. 3617 INT ELSE D:=D+EQTB[5278].INT; 3618 IF ABS(FITCLASS-MEM[R].HH.B1)>1 THEN D:=D+EQTB[5279].INT;END{:859}; 3619 {IF EQTB[5295].INT>0 THEN[856:]BEGIN IF PRINTEDNODE<>CURP THEN[857:] 3620 BEGIN PRINTNL(338); 3621 IF CURP=0 THEN SHORTDISPLAY(MEM[PRINTEDNODE].HH.RH)ELSE BEGIN SAVELINK:= 3622 MEM[CURP].HH.RH;MEM[CURP].HH.RH:=0;PRINTNL(338); 3623 SHORTDISPLAY(MEM[PRINTEDNODE].HH.RH);MEM[CURP].HH.RH:=SAVELINK;END; 3624 PRINTEDNODE:=CURP;END[:857];PRINTNL(64); 3625 IF CURP=0 THEN PRINTESC(597)ELSE IF MEM[CURP].HH.B0<>10 THEN BEGIN IF 3626 MEM[CURP].HH.B0=12 THEN PRINTESC(531)ELSE IF MEM[CURP].HH.B0=7 THEN 3627 PRINTESC(349)ELSE IF MEM[CURP].HH.B0=11 THEN PRINTESC(340)ELSE PRINTESC( 3628 343);END;PRINT(929); 3629 IF MEM[R+1].HH.RH=0 THEN PRINTCHAR(48)ELSE PRINTINT(MEM[MEM[R+1].HH.RH]. 3630 HH.LH);PRINT(930);IF B>10000 THEN PRINTCHAR(42)ELSE PRINTINT(B); 3631 PRINT(931);PRINTINT(PI);PRINT(932); 3632 IF ARTIFICIALDEMERITS THEN PRINTCHAR(42)ELSE PRINTINT(D);END[:856];} 3633 D:=D+MEM[R+2].INT; 3634 IF D<=MINIMALDEMERITS[FITCLASS]THEN BEGIN MINIMALDEMERITS[FITCLASS]:=D; 3635 BESTPLACE[FITCLASS]:=MEM[R+1].HH.RH;BESTPLLINE[FITCLASS]:=L; 3636 IF D<MINIMUMDEMERITS THEN MINIMUMDEMERITS:=D;END{:855}; 3637 IF NODERSTAYSACTIVE THEN GOTO 22; 3638 60:{860:}MEM[PREVR].HH.RH:=MEM[R].HH.RH;FREENODE(R,3); 3639 IF PREVR=29993 THEN{861:}BEGIN R:=MEM[29993].HH.RH; 3640 IF MEM[R].HH.B0=2 THEN BEGIN ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[R+1].INT 3641 ;ACTIVEWIDTH[2]:=ACTIVEWIDTH[2]+MEM[R+2].INT; 3642 ACTIVEWIDTH[3]:=ACTIVEWIDTH[3]+MEM[R+3].INT; 3643 ACTIVEWIDTH[4]:=ACTIVEWIDTH[4]+MEM[R+4].INT; 3644 ACTIVEWIDTH[5]:=ACTIVEWIDTH[5]+MEM[R+5].INT; 3645 ACTIVEWIDTH[6]:=ACTIVEWIDTH[6]+MEM[R+6].INT; 3646 CURACTIVEWIDTH[1]:=ACTIVEWIDTH[1];CURACTIVEWIDTH[2]:=ACTIVEWIDTH[2]; 3647 CURACTIVEWIDTH[3]:=ACTIVEWIDTH[3];CURACTIVEWIDTH[4]:=ACTIVEWIDTH[4]; 3648 CURACTIVEWIDTH[5]:=ACTIVEWIDTH[5];CURACTIVEWIDTH[6]:=ACTIVEWIDTH[6]; 3649 MEM[29993].HH.RH:=MEM[R].HH.RH;FREENODE(R,7);END; 3650 END{:861}ELSE IF MEM[PREVR].HH.B0=2 THEN BEGIN R:=MEM[PREVR].HH.RH; 3651 IF R=29993 THEN BEGIN CURACTIVEWIDTH[1]:=CURACTIVEWIDTH[1]-MEM[PREVR+1]. 3652 INT;CURACTIVEWIDTH[2]:=CURACTIVEWIDTH[2]-MEM[PREVR+2].INT; 3653 CURACTIVEWIDTH[3]:=CURACTIVEWIDTH[3]-MEM[PREVR+3].INT; 3654 CURACTIVEWIDTH[4]:=CURACTIVEWIDTH[4]-MEM[PREVR+4].INT; 3655 CURACTIVEWIDTH[5]:=CURACTIVEWIDTH[5]-MEM[PREVR+5].INT; 3656 CURACTIVEWIDTH[6]:=CURACTIVEWIDTH[6]-MEM[PREVR+6].INT; 3657 MEM[PREVPREVR].HH.RH:=29993;FREENODE(PREVR,7);PREVR:=PREVPREVR; 3658 END ELSE IF MEM[R].HH.B0=2 THEN BEGIN CURACTIVEWIDTH[1]:=CURACTIVEWIDTH[ 3659 1]+MEM[R+1].INT;CURACTIVEWIDTH[2]:=CURACTIVEWIDTH[2]+MEM[R+2].INT; 3660 CURACTIVEWIDTH[3]:=CURACTIVEWIDTH[3]+MEM[R+3].INT; 3661 CURACTIVEWIDTH[4]:=CURACTIVEWIDTH[4]+MEM[R+4].INT; 3662 CURACTIVEWIDTH[5]:=CURACTIVEWIDTH[5]+MEM[R+5].INT; 3663 CURACTIVEWIDTH[6]:=CURACTIVEWIDTH[6]+MEM[R+6].INT; 3664 MEM[PREVR+1].INT:=MEM[PREVR+1].INT+MEM[R+1].INT; 3665 MEM[PREVR+2].INT:=MEM[PREVR+2].INT+MEM[R+2].INT; 3666 MEM[PREVR+3].INT:=MEM[PREVR+3].INT+MEM[R+3].INT; 3667 MEM[PREVR+4].INT:=MEM[PREVR+4].INT+MEM[R+4].INT; 3668 MEM[PREVR+5].INT:=MEM[PREVR+5].INT+MEM[R+5].INT; 3669 MEM[PREVR+6].INT:=MEM[PREVR+6].INT+MEM[R+6].INT; 3670 MEM[PREVR].HH.RH:=MEM[R].HH.RH;FREENODE(R,7);END;END{:860};END{:851}; 3671 END; 3672 10:{[858:]IF CURP=PRINTEDNODE THEN IF CURP<>0 THEN IF MEM[CURP].HH.B0=7 3673 THEN BEGIN T:=MEM[CURP].HH.B1;WHILE T>0 DO BEGIN T:=T-1; 3674 PRINTEDNODE:=MEM[PRINTEDNODE].HH.RH;END;END[:858]}END; 3675 {:829}{877:}PROCEDURE POSTLINEBREAK(FINALWIDOWPENALTY:INTEGER); 3676 LABEL 30,31;VAR Q,R,S:HALFWORD;DISCBREAK:BOOLEAN;POSTDISCBREAK:BOOLEAN; 3677 CURWIDTH:SCALED;CURINDENT:SCALED;T:QUARTERWORD;PEN:INTEGER; 3678 CURLINE:HALFWORD;BEGIN{878:}Q:=MEM[BESTBET+1].HH.RH;CURP:=0;REPEAT R:=Q; 3679 Q:=MEM[Q+1].HH.LH;MEM[R+1].HH.LH:=CURP;CURP:=R;UNTIL Q=0{:878}; 3680 CURLINE:=CURLIST.PGFIELD+1;REPEAT{880:}{881:}Q:=MEM[CURP+1].HH.RH; 3681 DISCBREAK:=FALSE;POSTDISCBREAK:=FALSE; 3682 IF Q<>0 THEN IF MEM[Q].HH.B0=10 THEN BEGIN DELETEGLUEREF(MEM[Q+1].HH.LH) 3683 ;MEM[Q+1].HH.LH:=EQTB[2890].HH.RH;MEM[Q].HH.B1:=9; 3684 MEM[EQTB[2890].HH.RH].HH.RH:=MEM[EQTB[2890].HH.RH].HH.RH+1;GOTO 30; 3685 END ELSE BEGIN IF MEM[Q].HH.B0=7 THEN{882:}BEGIN T:=MEM[Q].HH.B1; 3686 {883:}IF T=0 THEN R:=MEM[Q].HH.RH ELSE BEGIN R:=Q; 3687 WHILE T>1 DO BEGIN R:=MEM[R].HH.RH;T:=T-1;END;S:=MEM[R].HH.RH; 3688 R:=MEM[S].HH.RH;MEM[S].HH.RH:=0;FLUSHNODELIST(MEM[Q].HH.RH); 3689 MEM[Q].HH.B1:=0;END{:883}; 3690 IF MEM[Q+1].HH.RH<>0 THEN{884:}BEGIN S:=MEM[Q+1].HH.RH; 3691 WHILE MEM[S].HH.RH<>0 DO S:=MEM[S].HH.RH;MEM[S].HH.RH:=R; 3692 R:=MEM[Q+1].HH.RH;MEM[Q+1].HH.RH:=0;POSTDISCBREAK:=TRUE;END{:884}; 3693 IF MEM[Q+1].HH.LH<>0 THEN{885:}BEGIN S:=MEM[Q+1].HH.LH;MEM[Q].HH.RH:=S; 3694 WHILE MEM[S].HH.RH<>0 DO S:=MEM[S].HH.RH;MEM[Q+1].HH.LH:=0;Q:=S; 3695 END{:885};MEM[Q].HH.RH:=R;DISCBREAK:=TRUE; 3696 END{:882}ELSE IF(MEM[Q].HH.B0=9)OR(MEM[Q].HH.B0=11)THEN MEM[Q+1].INT:=0; 3697 END ELSE BEGIN Q:=29997;WHILE MEM[Q].HH.RH<>0 DO Q:=MEM[Q].HH.RH;END; 3698 {886:}R:=NEWPARAMGLUE(8);MEM[R].HH.RH:=MEM[Q].HH.RH;MEM[Q].HH.RH:=R; 3699 Q:=R{:886};30:{:881};{887:}R:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0; 3700 Q:=MEM[29997].HH.RH;MEM[29997].HH.RH:=R; 3701 IF EQTB[2889].HH.RH<>0 THEN BEGIN R:=NEWPARAMGLUE(7);MEM[R].HH.RH:=Q; 3702 Q:=R;END{:887}; 3703 {889:}IF CURLINE>LASTSPECIALLINE THEN BEGIN CURWIDTH:=SECONDWIDTH; 3704 CURINDENT:=SECONDINDENT; 3705 END ELSE IF EQTB[3412].HH.RH=0 THEN BEGIN CURWIDTH:=FIRSTWIDTH; 3706 CURINDENT:=FIRSTINDENT; 3707 END ELSE BEGIN CURWIDTH:=MEM[EQTB[3412].HH.RH+2*CURLINE].INT; 3708 CURINDENT:=MEM[EQTB[3412].HH.RH+2*CURLINE-1].INT;END;ADJUSTTAIL:=29995; 3709 JUSTBOX:=HPACK(Q,CURWIDTH,0);MEM[JUSTBOX+4].INT:=CURINDENT{:889}; 3710 {888:}APPENDTOVLIST(JUSTBOX); 3711 IF 29995<>ADJUSTTAIL THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[29995] 3712 .HH.RH;CURLIST.TAILFIELD:=ADJUSTTAIL;END;ADJUSTTAIL:=0{:888}; 3713 {890:}IF CURLINE+1<>BESTLINE THEN BEGIN PEN:=EQTB[5276].INT; 3714 IF CURLINE=CURLIST.PGFIELD+1 THEN PEN:=PEN+EQTB[5268].INT; 3715 IF CURLINE+2=BESTLINE THEN PEN:=PEN+FINALWIDOWPENALTY; 3716 IF DISCBREAK THEN PEN:=PEN+EQTB[5271].INT; 3717 IF PEN<>0 THEN BEGIN R:=NEWPENALTY(PEN);MEM[CURLIST.TAILFIELD].HH.RH:=R; 3718 CURLIST.TAILFIELD:=R;END;END{:890}{:880};CURLINE:=CURLINE+1; 3719 CURP:=MEM[CURP+1].HH.LH; 3720 IF CURP<>0 THEN IF NOT POSTDISCBREAK THEN{879:}BEGIN R:=29997; 3721 WHILE TRUE DO BEGIN Q:=MEM[R].HH.RH;IF Q=MEM[CURP+1].HH.RH THEN GOTO 31; 3722 IF(Q>=HIMEMMIN)THEN GOTO 31;IF(MEM[Q].HH.B0<9)THEN GOTO 31; 3723 IF MEM[Q].HH.B0=11 THEN IF MEM[Q].HH.B1<>1 THEN GOTO 31;R:=Q;END; 3724 31:IF R<>29997 THEN BEGIN MEM[R].HH.RH:=0; 3725 FLUSHNODELIST(MEM[29997].HH.RH);MEM[29997].HH.RH:=Q;END;END{:879}; 3726 UNTIL CURP=0; 3727 IF(CURLINE<>BESTLINE)OR(MEM[29997].HH.RH<>0)THEN CONFUSION(939); 3728 CURLIST.PGFIELD:=BESTLINE-1;END; 3729 {:877}{895:}{906:}FUNCTION RECONSTITUTE(J,N:SMALLNUMBER; 3730 BCHAR,HCHAR:HALFWORD):SMALLNUMBER;LABEL 22,30;VAR P:HALFWORD;T:HALFWORD; 3731 Q:FOURQUARTERS;CURRH:HALFWORD;TESTCHAR:HALFWORD;W:SCALED;K:FONTINDEX; 3732 BEGIN HYPHENPASSED:=0;T:=29996;W:=0;MEM[29996].HH.RH:=0; 3733 {908:}CURL:=HU[J]+0;CURQ:=T;IF J=0 THEN BEGIN LIGATUREPRESENT:=INITLIG; 3734 P:=INITLIST;IF LIGATUREPRESENT THEN LFTHIT:=INITLFT; 3735 WHILE P>0 DO BEGIN BEGIN MEM[T].HH.RH:=GETAVAIL;T:=MEM[T].HH.RH; 3736 MEM[T].HH.B0:=HF;MEM[T].HH.B1:=MEM[P].HH.B1;END;P:=MEM[P].HH.RH;END; 3737 END ELSE IF CURL<256 THEN BEGIN MEM[T].HH.RH:=GETAVAIL;T:=MEM[T].HH.RH; 3738 MEM[T].HH.B0:=HF;MEM[T].HH.B1:=CURL;END;LIGSTACK:=0; 3739 BEGIN IF J<N THEN CURR:=HU[J+1]+0 ELSE CURR:=BCHAR; 3740 IF ODD(HYF[J])THEN CURRH:=HCHAR ELSE CURRH:=256;END{:908}; 3741 22:{909:}IF CURL=256 THEN BEGIN K:=BCHARLABEL[HF]; 3742 IF K=0 THEN GOTO 30 ELSE Q:=FONTINFO[K].QQQQ; 3743 END ELSE BEGIN Q:=FONTINFO[CHARBASE[HF]+CURL].QQQQ; 3744 IF((Q.B2-0)MOD 4)<>1 THEN GOTO 30;K:=LIGKERNBASE[HF]+Q.B3; 3745 Q:=FONTINFO[K].QQQQ; 3746 IF Q.B0>128 THEN BEGIN K:=LIGKERNBASE[HF]+256*Q.B2+Q.B3+32768-256*(128); 3747 Q:=FONTINFO[K].QQQQ;END;END; 3748 IF CURRH<256 THEN TESTCHAR:=CURRH ELSE TESTCHAR:=CURR; 3749 WHILE TRUE DO BEGIN IF Q.B1=TESTCHAR THEN IF Q.B0<=128 THEN IF CURRH<256 3750 THEN BEGIN HYPHENPASSED:=J;HCHAR:=256;CURRH:=256;GOTO 22; 3751 END ELSE BEGIN IF HCHAR<256 THEN IF ODD(HYF[J])THEN BEGIN HYPHENPASSED:= 3752 J;HCHAR:=256;END; 3753 IF Q.B2<128 THEN{911:}BEGIN IF CURL=256 THEN LFTHIT:=TRUE; 3754 IF J=N THEN IF LIGSTACK=0 THEN RTHIT:=TRUE; 3755 BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END; 3756 CASE Q.B2 OF 1,5:BEGIN CURL:=Q.B3;LIGATUREPRESENT:=TRUE;END; 3757 2,6:BEGIN CURR:=Q.B3; 3758 IF LIGSTACK>0 THEN MEM[LIGSTACK].HH.B1:=CURR ELSE BEGIN LIGSTACK:= 3759 NEWLIGITEM(CURR);IF J=N THEN BCHAR:=256 ELSE BEGIN P:=GETAVAIL; 3760 MEM[LIGSTACK+1].HH.RH:=P;MEM[P].HH.B1:=HU[J+1]+0;MEM[P].HH.B0:=HF;END; 3761 END;END;3:BEGIN CURR:=Q.B3;P:=LIGSTACK;LIGSTACK:=NEWLIGITEM(CURR); 3762 MEM[LIGSTACK].HH.RH:=P;END; 3763 7,11:BEGIN IF LIGATUREPRESENT THEN BEGIN P:=NEWLIGATURE(HF,CURL,MEM[CURQ 3764 ].HH.RH);IF LFTHIT THEN BEGIN MEM[P].HH.B1:=2;LFTHIT:=FALSE;END; 3765 IF FALSE THEN IF LIGSTACK=0 THEN BEGIN MEM[P].HH.B1:=MEM[P].HH.B1+1; 3766 RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=P;T:=P;LIGATUREPRESENT:=FALSE;END; 3767 CURQ:=T;CURL:=Q.B3;LIGATUREPRESENT:=TRUE;END;ELSE BEGIN CURL:=Q.B3; 3768 LIGATUREPRESENT:=TRUE; 3769 IF LIGSTACK>0 THEN BEGIN IF MEM[LIGSTACK+1].HH.RH>0 THEN BEGIN MEM[T].HH 3770 .RH:=MEM[LIGSTACK+1].HH.RH;T:=MEM[T].HH.RH;J:=J+1;END;P:=LIGSTACK; 3771 LIGSTACK:=MEM[P].HH.RH;FREENODE(P,2); 3772 IF LIGSTACK=0 THEN BEGIN IF J<N THEN CURR:=HU[J+1]+0 ELSE CURR:=BCHAR; 3773 IF ODD(HYF[J])THEN CURRH:=HCHAR ELSE CURRH:=256; 3774 END ELSE CURR:=MEM[LIGSTACK].HH.B1; 3775 END ELSE IF J=N THEN GOTO 30 ELSE BEGIN BEGIN MEM[T].HH.RH:=GETAVAIL; 3776 T:=MEM[T].HH.RH;MEM[T].HH.B0:=HF;MEM[T].HH.B1:=CURR;END;J:=J+1; 3777 BEGIN IF J<N THEN CURR:=HU[J+1]+0 ELSE CURR:=BCHAR; 3778 IF ODD(HYF[J])THEN CURRH:=HCHAR ELSE CURRH:=256;END;END;END END; 3779 IF Q.B2>4 THEN IF Q.B2<>7 THEN GOTO 30;GOTO 22;END{:911}; 3780 W:=FONTINFO[KERNBASE[HF]+256*Q.B2+Q.B3].INT;GOTO 30;END; 3781 IF Q.B0>=128 THEN IF CURRH=256 THEN GOTO 30 ELSE BEGIN CURRH:=256; 3782 GOTO 22;END;K:=K+Q.B0+1;Q:=FONTINFO[K].QQQQ;END;30:{:909}; 3783 {910:}IF LIGATUREPRESENT THEN BEGIN P:=NEWLIGATURE(HF,CURL,MEM[CURQ].HH. 3784 RH);IF LFTHIT THEN BEGIN MEM[P].HH.B1:=2;LFTHIT:=FALSE;END; 3785 IF RTHIT THEN IF LIGSTACK=0 THEN BEGIN MEM[P].HH.B1:=MEM[P].HH.B1+1; 3786 RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=P;T:=P;LIGATUREPRESENT:=FALSE;END; 3787 IF W<>0 THEN BEGIN MEM[T].HH.RH:=NEWKERN(W);T:=MEM[T].HH.RH;W:=0;END; 3788 IF LIGSTACK>0 THEN BEGIN CURQ:=T;CURL:=MEM[LIGSTACK].HH.B1; 3789 LIGATUREPRESENT:=TRUE; 3790 BEGIN IF MEM[LIGSTACK+1].HH.RH>0 THEN BEGIN MEM[T].HH.RH:=MEM[LIGSTACK+1 3791 ].HH.RH;T:=MEM[T].HH.RH;J:=J+1;END;P:=LIGSTACK;LIGSTACK:=MEM[P].HH.RH; 3792 FREENODE(P,2); 3793 IF LIGSTACK=0 THEN BEGIN IF J<N THEN CURR:=HU[J+1]+0 ELSE CURR:=BCHAR; 3794 IF ODD(HYF[J])THEN CURRH:=HCHAR ELSE CURRH:=256; 3795 END ELSE CURR:=MEM[LIGSTACK].HH.B1;END;GOTO 22;END{:910}; 3796 RECONSTITUTE:=J;END;{:906}PROCEDURE HYPHENATE; 3797 LABEL 50,30,40,41,42,45,10;VAR{901:}I,J,L:0..65;Q,R,S:HALFWORD; 3798 BCHAR:HALFWORD;{:901}{912:}MAJORTAIL,MINORTAIL:HALFWORD;C:ASCIICODE; 3799 CLOC:0..63;RCOUNT:INTEGER;HYFNODE:HALFWORD;{:912}{922:}Z:TRIEPOINTER; 3800 V:INTEGER;{:922}{929:}H:HYPHPOINTER;K:STRNUMBER;U:POOLPOINTER; 3801 {:929}BEGIN{923:}FOR J:=0 TO HN DO HYF[J]:=0;{930:}H:=HC[1];HN:=HN+1; 3802 HC[HN]:=CURLANG;FOR J:=2 TO HN DO H:=(H+H+HC[J])MOD 307; 3803 WHILE TRUE DO BEGIN{931:}K:=HYPHWORD[H];IF K=0 THEN GOTO 45; 3804 IF(STRSTART[K+1]-STRSTART[K])<HN THEN GOTO 45; 3805 IF(STRSTART[K+1]-STRSTART[K])=HN THEN BEGIN J:=1;U:=STRSTART[K]; 3806 REPEAT IF STRPOOL[U]<HC[J]THEN GOTO 45;IF STRPOOL[U]>HC[J]THEN GOTO 30; 3807 J:=J+1;U:=U+1;UNTIL J>HN;{932:}S:=HYPHLIST[H]; 3808 WHILE S<>0 DO BEGIN HYF[MEM[S].HH.LH]:=1;S:=MEM[S].HH.RH;END{:932}; 3809 HN:=HN-1;GOTO 40;END;30:{:931};IF H>0 THEN H:=H-1 ELSE H:=307;END; 3810 45:HN:=HN-1{:930};IF TRIE[CURLANG+1].B1<>CURLANG+0 THEN GOTO 10; 3811 HC[0]:=0;HC[HN+1]:=0;HC[HN+2]:=256; 3812 FOR J:=0 TO HN-RHYF+1 DO BEGIN Z:=TRIE[CURLANG+1].RH+HC[J];L:=J; 3813 WHILE HC[L]=TRIE[Z].B1-0 DO BEGIN IF TRIE[Z].B0<>0 THEN{924:}BEGIN V:= 3814 TRIE[Z].B0;REPEAT V:=V+OPSTART[CURLANG];I:=L-HYFDISTANCE[V]; 3815 IF HYFNUM[V]>HYF[I]THEN HYF[I]:=HYFNUM[V];V:=HYFNEXT[V];UNTIL V=0; 3816 END{:924};L:=L+1;Z:=TRIE[Z].RH+HC[L];END;END; 3817 40:FOR J:=0 TO LHYF-1 DO HYF[J]:=0; 3818 FOR J:=0 TO RHYF-1 DO HYF[HN-J]:=0{:923}; 3819 {902:}FOR J:=LHYF TO HN-RHYF DO IF ODD(HYF[J])THEN GOTO 41;GOTO 10; 3820 41:{:902};{903:}Q:=MEM[HB].HH.RH;MEM[HB].HH.RH:=0;R:=MEM[HA].HH.RH; 3821 MEM[HA].HH.RH:=0;BCHAR:=HYFBCHAR; 3822 IF(HA>=HIMEMMIN)THEN IF MEM[HA].HH.B0<>HF THEN GOTO 42 ELSE BEGIN 3823 INITLIST:=HA;INITLIG:=FALSE;HU[0]:=MEM[HA].HH.B1-0; 3824 END ELSE IF MEM[HA].HH.B0=6 THEN IF MEM[HA+1].HH.B0<>HF THEN GOTO 42 3825 ELSE BEGIN INITLIST:=MEM[HA+1].HH.RH;INITLIG:=TRUE; 3826 INITLFT:=(MEM[HA].HH.B1>1);HU[0]:=MEM[HA+1].HH.B1-0; 3827 IF INITLIST=0 THEN IF INITLFT THEN BEGIN HU[0]:=256;INITLIG:=FALSE;END; 3828 FREENODE(HA,2); 3829 END ELSE BEGIN IF NOT(R>=HIMEMMIN)THEN IF MEM[R].HH.B0=6 THEN IF MEM[R]. 3830 HH.B1>1 THEN GOTO 42;J:=1;S:=HA;INITLIST:=0;GOTO 50;END;S:=CURP; 3831 WHILE MEM[S].HH.RH<>HA DO S:=MEM[S].HH.RH;J:=0;GOTO 50;42:S:=HA;J:=0; 3832 HU[0]:=256;INITLIG:=FALSE;INITLIST:=0;50:FLUSHNODELIST(R); 3833 {913:}REPEAT L:=J;J:=RECONSTITUTE(J,HN,BCHAR,HYFCHAR+0)+1; 3834 IF HYPHENPASSED=0 THEN BEGIN MEM[S].HH.RH:=MEM[29996].HH.RH; 3835 WHILE MEM[S].HH.RH>0 DO S:=MEM[S].HH.RH;IF ODD(HYF[J-1])THEN BEGIN L:=J; 3836 HYPHENPASSED:=J-1;MEM[29996].HH.RH:=0;END;END; 3837 IF HYPHENPASSED>0 THEN{914:}REPEAT R:=GETNODE(2); 3838 MEM[R].HH.RH:=MEM[29996].HH.RH;MEM[R].HH.B0:=7;MAJORTAIL:=R;RCOUNT:=0; 3839 WHILE MEM[MAJORTAIL].HH.RH>0 DO BEGIN MAJORTAIL:=MEM[MAJORTAIL].HH.RH; 3840 RCOUNT:=RCOUNT+1;END;I:=HYPHENPASSED;HYF[I]:=0;{915:}MINORTAIL:=0; 3841 MEM[R+1].HH.LH:=0;HYFNODE:=NEWCHARACTER(HF,HYFCHAR); 3842 IF HYFNODE<>0 THEN BEGIN I:=I+1;C:=HU[I];HU[I]:=HYFCHAR; 3843 BEGIN MEM[HYFNODE].HH.RH:=AVAIL;AVAIL:=HYFNODE;{DYNUSED:=DYNUSED-1;}END; 3844 END;WHILE L<=I DO BEGIN L:=RECONSTITUTE(L,I,FONTBCHAR[HF],256)+1; 3845 IF MEM[29996].HH.RH>0 THEN BEGIN IF MINORTAIL=0 THEN MEM[R+1].HH.LH:=MEM 3846 [29996].HH.RH ELSE MEM[MINORTAIL].HH.RH:=MEM[29996].HH.RH; 3847 MINORTAIL:=MEM[29996].HH.RH; 3848 WHILE MEM[MINORTAIL].HH.RH>0 DO MINORTAIL:=MEM[MINORTAIL].HH.RH;END;END; 3849 IF HYFNODE<>0 THEN BEGIN HU[I]:=C;L:=I;I:=I-1;END{:915}; 3850 {916:}MINORTAIL:=0;MEM[R+1].HH.RH:=0;CLOC:=0; 3851 IF BCHARLABEL[HF]<>0 THEN BEGIN L:=L-1;C:=HU[L];CLOC:=L;HU[L]:=256;END; 3852 WHILE L<J DO BEGIN REPEAT L:=RECONSTITUTE(L,HN,BCHAR,256)+1; 3853 IF CLOC>0 THEN BEGIN HU[CLOC]:=C;CLOC:=0;END; 3854 IF MEM[29996].HH.RH>0 THEN BEGIN IF MINORTAIL=0 THEN MEM[R+1].HH.RH:=MEM 3855 [29996].HH.RH ELSE MEM[MINORTAIL].HH.RH:=MEM[29996].HH.RH; 3856 MINORTAIL:=MEM[29996].HH.RH; 3857 WHILE MEM[MINORTAIL].HH.RH>0 DO MINORTAIL:=MEM[MINORTAIL].HH.RH;END; 3858 UNTIL L>=J;WHILE L>J DO{917:}BEGIN J:=RECONSTITUTE(J,HN,BCHAR,256)+1; 3859 MEM[MAJORTAIL].HH.RH:=MEM[29996].HH.RH; 3860 WHILE MEM[MAJORTAIL].HH.RH>0 DO BEGIN MAJORTAIL:=MEM[MAJORTAIL].HH.RH; 3861 RCOUNT:=RCOUNT+1;END;END{:917};END{:916}; 3862 {918:}IF RCOUNT>127 THEN BEGIN MEM[S].HH.RH:=MEM[R].HH.RH; 3863 MEM[R].HH.RH:=0;FLUSHNODELIST(R);END ELSE BEGIN MEM[S].HH.RH:=R; 3864 MEM[R].HH.B1:=RCOUNT;END;S:=MAJORTAIL{:918};HYPHENPASSED:=J-1; 3865 MEM[29996].HH.RH:=0;UNTIL NOT ODD(HYF[J-1]){:914};UNTIL J>HN; 3866 MEM[S].HH.RH:=Q{:913};FLUSHLIST(INITLIST){:903};10:END; 3867 {:895}{942:}{944:}FUNCTION NEWTRIEOP(D,N:SMALLNUMBER; 3868 V:QUARTERWORD):QUARTERWORD;LABEL 10;VAR H:-TRIEOPSIZE..TRIEOPSIZE; 3869 U:QUARTERWORD;L:0..TRIEOPSIZE; 3870 BEGIN H:=ABS(N+313*D+361*V+1009*CURLANG)MOD(TRIEOPSIZE+TRIEOPSIZE)- 3871 TRIEOPSIZE;WHILE TRUE DO BEGIN L:=TRIEOPHASH[H]; 3872 IF L=0 THEN BEGIN IF TRIEOPPTR=TRIEOPSIZE THEN OVERFLOW(949,TRIEOPSIZE); 3873 U:=TRIEUSED[CURLANG];IF U=255 THEN OVERFLOW(950,255); 3874 TRIEOPPTR:=TRIEOPPTR+1;U:=U+1;TRIEUSED[CURLANG]:=U; 3875 HYFDISTANCE[TRIEOPPTR]:=D;HYFNUM[TRIEOPPTR]:=N;HYFNEXT[TRIEOPPTR]:=V; 3876 TRIEOPLANG[TRIEOPPTR]:=CURLANG;TRIEOPHASH[H]:=TRIEOPPTR; 3877 TRIEOPVAL[TRIEOPPTR]:=U;NEWTRIEOP:=U;GOTO 10;END; 3878 IF(HYFDISTANCE[L]=D)AND(HYFNUM[L]=N)AND(HYFNEXT[L]=V)AND(TRIEOPLANG[L]= 3879 CURLANG)THEN BEGIN NEWTRIEOP:=TRIEOPVAL[L];GOTO 10;END; 3880 IF H>-TRIEOPSIZE THEN H:=H-1 ELSE H:=TRIEOPSIZE;END;10:END; 3881 {:944}{948:}FUNCTION TRIENODE(P:TRIEPOINTER):TRIEPOINTER;LABEL 10; 3882 VAR H:TRIEPOINTER;Q:TRIEPOINTER; 3883 BEGIN H:=ABS(TRIEC[P]+1009*TRIEO[P]+2718*TRIEL[P]+3142*TRIER[P])MOD 3884 TRIESIZE;WHILE TRUE DO BEGIN Q:=TRIEHASH[H]; 3885 IF Q=0 THEN BEGIN TRIEHASH[H]:=P;TRIENODE:=P;GOTO 10;END; 3886 IF(TRIEC[Q]=TRIEC[P])AND(TRIEO[Q]=TRIEO[P])AND(TRIEL[Q]=TRIEL[P])AND( 3887 TRIER[Q]=TRIER[P])THEN BEGIN TRIENODE:=Q;GOTO 10;END; 3888 IF H>0 THEN H:=H-1 ELSE H:=TRIESIZE;END;10:END; 3889 {:948}{949:}FUNCTION COMPRESSTRIE(P:TRIEPOINTER):TRIEPOINTER; 3890 BEGIN IF P=0 THEN COMPRESSTRIE:=0 ELSE BEGIN TRIEL[P]:=COMPRESSTRIE( 3891 TRIEL[P]);TRIER[P]:=COMPRESSTRIE(TRIER[P]);COMPRESSTRIE:=TRIENODE(P); 3892 END;END;{:949}{953:}PROCEDURE FIRSTFIT(P:TRIEPOINTER);LABEL 45,40; 3893 VAR H:TRIEPOINTER;Z:TRIEPOINTER;Q:TRIEPOINTER;C:ASCIICODE; 3894 L,R:TRIEPOINTER;LL:1..256;BEGIN C:=TRIEC[P];Z:=TRIEMIN[C]; 3895 WHILE TRUE DO BEGIN H:=Z-C; 3896 {954:}IF TRIEMAX<H+256 THEN BEGIN IF TRIESIZE<=H+256 THEN OVERFLOW(951, 3897 TRIESIZE);REPEAT TRIEMAX:=TRIEMAX+1;TRIETAKEN[TRIEMAX]:=FALSE; 3898 TRIE[TRIEMAX].RH:=TRIEMAX+1;TRIE[TRIEMAX].LH:=TRIEMAX-1; 3899 UNTIL TRIEMAX=H+256;END{:954};IF TRIETAKEN[H]THEN GOTO 45; 3900 {955:}Q:=TRIER[P]; 3901 WHILE Q>0 DO BEGIN IF TRIE[H+TRIEC[Q]].RH=0 THEN GOTO 45;Q:=TRIER[Q]; 3902 END;GOTO 40{:955};45:Z:=TRIE[Z].RH;END;40:{956:}TRIETAKEN[H]:=TRUE; 3903 TRIEHASH[P]:=H;Q:=P;REPEAT Z:=H+TRIEC[Q];L:=TRIE[Z].LH;R:=TRIE[Z].RH; 3904 TRIE[R].LH:=L;TRIE[L].RH:=R;TRIE[Z].RH:=0; 3905 IF L<256 THEN BEGIN IF Z<256 THEN LL:=Z ELSE LL:=256; 3906 REPEAT TRIEMIN[L]:=R;L:=L+1;UNTIL L=LL;END;Q:=TRIER[Q];UNTIL Q=0{:956}; 3907 END;{:953}{957:}PROCEDURE TRIEPACK(P:TRIEPOINTER);VAR Q:TRIEPOINTER; 3908 BEGIN REPEAT Q:=TRIEL[P]; 3909 IF(Q>0)AND(TRIEHASH[Q]=0)THEN BEGIN FIRSTFIT(Q);TRIEPACK(Q);END; 3910 P:=TRIER[P];UNTIL P=0;END;{:957}{959:}PROCEDURE TRIEFIX(P:TRIEPOINTER); 3911 VAR Q:TRIEPOINTER;C:ASCIICODE;Z:TRIEPOINTER;BEGIN Z:=TRIEHASH[P]; 3912 REPEAT Q:=TRIEL[P];C:=TRIEC[P];TRIE[Z+C].RH:=TRIEHASH[Q]; 3913 TRIE[Z+C].B1:=C+0;TRIE[Z+C].B0:=TRIEO[P];IF Q>0 THEN TRIEFIX(Q); 3914 P:=TRIER[P];UNTIL P=0;END;{:959}{960:}PROCEDURE NEWPATTERNS;LABEL 30,31; 3915 VAR K,L:0..64;DIGITSENSED:BOOLEAN;V:QUARTERWORD;P,Q:TRIEPOINTER; 3916 FIRSTCHILD:BOOLEAN;C:ASCIICODE; 3917 BEGIN IF TRIENOTREADY THEN BEGIN IF EQTB[5313].INT<=0 THEN CURLANG:=0 3918 ELSE IF EQTB[5313].INT>255 THEN CURLANG:=0 ELSE CURLANG:=EQTB[5313].INT; 3919 SCANLEFTBRACE;{961:}K:=0;HYF[0]:=0;DIGITSENSED:=FALSE; 3920 WHILE TRUE DO BEGIN GETXTOKEN; 3921 CASE CURCMD OF 11,12:{962:}IF DIGITSENSED OR(CURCHR<48)OR(CURCHR>57)THEN 3922 BEGIN IF CURCHR=46 THEN CURCHR:=0 ELSE BEGIN CURCHR:=EQTB[4239+CURCHR]. 3923 HH.RH;IF CURCHR=0 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 3924 PRINT(957);END;BEGIN HELPPTR:=1;HELPLINE[0]:=956;END;ERROR;END;END; 3925 IF K<63 THEN BEGIN K:=K+1;HC[K]:=CURCHR;HYF[K]:=0;DIGITSENSED:=FALSE; 3926 END;END ELSE IF K<63 THEN BEGIN HYF[K]:=CURCHR-48;DIGITSENSED:=TRUE; 3927 END{:962}; 3928 10,2:BEGIN IF K>0 THEN{963:}BEGIN{965:}IF HC[1]=0 THEN HYF[0]:=0; 3929 IF HC[K]=0 THEN HYF[K]:=0;L:=K;V:=0; 3930 WHILE TRUE DO BEGIN IF HYF[L]<>0 THEN V:=NEWTRIEOP(K-L,HYF[L],V); 3931 IF L>0 THEN L:=L-1 ELSE GOTO 31;END;31:{:965};Q:=0;HC[0]:=CURLANG; 3932 WHILE L<=K DO BEGIN C:=HC[L];L:=L+1;P:=TRIEL[Q];FIRSTCHILD:=TRUE; 3933 WHILE(P>0)AND(C>TRIEC[P])DO BEGIN Q:=P;P:=TRIER[Q];FIRSTCHILD:=FALSE; 3934 END; 3935 IF(P=0)OR(C<TRIEC[P])THEN{964:}BEGIN IF TRIEPTR=TRIESIZE THEN OVERFLOW( 3936 951,TRIESIZE);TRIEPTR:=TRIEPTR+1;TRIER[TRIEPTR]:=P;P:=TRIEPTR; 3937 TRIEL[P]:=0;IF FIRSTCHILD THEN TRIEL[Q]:=P ELSE TRIER[Q]:=P;TRIEC[P]:=C; 3938 TRIEO[P]:=0;END{:964};Q:=P;END; 3939 IF TRIEO[Q]<>0 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 3940 PRINT(958);END;BEGIN HELPPTR:=1;HELPLINE[0]:=956;END;ERROR;END; 3941 TRIEO[Q]:=V;END{:963};IF CURCMD=2 THEN GOTO 30;K:=0;HYF[0]:=0; 3942 DIGITSENSED:=FALSE;END;ELSE BEGIN BEGIN IF INTERACTION=3 THEN; 3943 PRINTNL(262);PRINT(955);END;PRINTESC(953);BEGIN HELPPTR:=1; 3944 HELPLINE[0]:=956;END;ERROR;END END;END;30:{:961}; 3945 END ELSE BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(952);END; 3946 PRINTESC(953);BEGIN HELPPTR:=1;HELPLINE[0]:=954;END;ERROR; 3947 MEM[29988].HH.RH:=SCANTOKS(FALSE,FALSE);FLUSHLIST(DEFREF);END;END; 3948 {:960}{966:}PROCEDURE INITTRIE;VAR P:TRIEPOINTER;J,K,T:INTEGER; 3949 R,S:TRIEPOINTER;H:TWOHALVES;BEGIN{952:}{945:}OPSTART[0]:=-0; 3950 FOR J:=1 TO 255 DO OPSTART[J]:=OPSTART[J-1]+TRIEUSED[J-1]-0; 3951 FOR J:=1 TO TRIEOPPTR DO TRIEOPHASH[J]:=OPSTART[TRIEOPLANG[J]]+TRIEOPVAL 3952 [J]; 3953 FOR J:=1 TO TRIEOPPTR DO WHILE TRIEOPHASH[J]>J DO BEGIN K:=TRIEOPHASH[J] 3954 ;T:=HYFDISTANCE[K];HYFDISTANCE[K]:=HYFDISTANCE[J];HYFDISTANCE[J]:=T; 3955 T:=HYFNUM[K];HYFNUM[K]:=HYFNUM[J];HYFNUM[J]:=T;T:=HYFNEXT[K]; 3956 HYFNEXT[K]:=HYFNEXT[J];HYFNEXT[J]:=T;TRIEOPHASH[J]:=TRIEOPHASH[K]; 3957 TRIEOPHASH[K]:=K;END{:945};FOR P:=0 TO TRIESIZE DO TRIEHASH[P]:=0; 3958 TRIEL[0]:=COMPRESSTRIE(TRIEL[0]);FOR P:=0 TO TRIEPTR DO TRIEHASH[P]:=0; 3959 FOR P:=0 TO 255 DO TRIEMIN[P]:=P+1;TRIE[0].RH:=1;TRIEMAX:=0{:952}; 3960 IF TRIEL[0]<>0 THEN BEGIN FIRSTFIT(TRIEL[0]);TRIEPACK(TRIEL[0]);END; 3961 {958:}H.RH:=0;H.B0:=0;H.B1:=0; 3962 IF TRIEL[0]=0 THEN BEGIN FOR R:=0 TO 256 DO TRIE[R]:=H;TRIEMAX:=256; 3963 END ELSE BEGIN TRIEFIX(TRIEL[0]);R:=0;REPEAT S:=TRIE[R].RH;TRIE[R]:=H; 3964 R:=S;UNTIL R>TRIEMAX;END;TRIE[0].B1:=63;{:958};TRIENOTREADY:=FALSE;END; 3965 {:966}{:942}PROCEDURE LINEBREAK(FINALWIDOWPENALTY:INTEGER); 3966 LABEL 30,31,32,33,34,35,22;VAR{862:}AUTOBREAKING:BOOLEAN;PREVP:HALFWORD; 3967 Q,R,S,PREVS:HALFWORD;F:INTERNALFONTNUMBER;{:862}{893:}J:SMALLNUMBER; 3968 C:0..255;{:893}BEGIN PACKBEGINLINE:=CURLIST.MLFIELD; 3969 {816:}MEM[29997].HH.RH:=MEM[CURLIST.HEADFIELD].HH.RH; 3970 IF(CURLIST.TAILFIELD>=HIMEMMIN)THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:= 3971 NEWPENALTY(10000);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH; 3972 END ELSE IF MEM[CURLIST.TAILFIELD].HH.B0<>10 THEN BEGIN MEM[CURLIST. 3973 TAILFIELD].HH.RH:=NEWPENALTY(10000); 3974 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH; 3975 END ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.B0:=12; 3976 DELETEGLUEREF(MEM[CURLIST.TAILFIELD+1].HH.LH); 3977 FLUSHNODELIST(MEM[CURLIST.TAILFIELD+1].HH.RH); 3978 MEM[CURLIST.TAILFIELD+1].INT:=10000;END; 3979 MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(14); 3980 INITCURLANG:=CURLIST.PGFIELD MOD 65536; 3981 INITLHYF:=CURLIST.PGFIELD DIV 4194304; 3982 INITRHYF:=(CURLIST.PGFIELD DIV 65536)MOD 64;POPNEST; 3983 {:816}{827:}NOSHRINKERRORYET:=TRUE; 3984 IF(MEM[EQTB[2889].HH.RH].HH.B1<>0)AND(MEM[EQTB[2889].HH.RH+3].INT<>0) 3985 THEN BEGIN EQTB[2889].HH.RH:=FINITESHRINK(EQTB[2889].HH.RH);END; 3986 IF(MEM[EQTB[2890].HH.RH].HH.B1<>0)AND(MEM[EQTB[2890].HH.RH+3].INT<>0) 3987 THEN BEGIN EQTB[2890].HH.RH:=FINITESHRINK(EQTB[2890].HH.RH);END; 3988 Q:=EQTB[2889].HH.RH;R:=EQTB[2890].HH.RH; 3989 BACKGROUND[1]:=MEM[Q+1].INT+MEM[R+1].INT;BACKGROUND[2]:=0; 3990 BACKGROUND[3]:=0;BACKGROUND[4]:=0;BACKGROUND[5]:=0; 3991 BACKGROUND[2+MEM[Q].HH.B0]:=MEM[Q+2].INT; 3992 BACKGROUND[2+MEM[R].HH.B0]:=BACKGROUND[2+MEM[R].HH.B0]+MEM[R+2].INT; 3993 BACKGROUND[6]:=MEM[Q+3].INT+MEM[R+3].INT; 3994 {:827}{834:}MINIMUMDEMERITS:=1073741823;MINIMALDEMERITS[3]:=1073741823; 3995 MINIMALDEMERITS[2]:=1073741823;MINIMALDEMERITS[1]:=1073741823; 3996 MINIMALDEMERITS[0]:=1073741823; 3997 {:834}{848:}IF EQTB[3412].HH.RH=0 THEN IF EQTB[5847].INT=0 THEN BEGIN 3998 LASTSPECIALLINE:=0;SECONDWIDTH:=EQTB[5833].INT;SECONDINDENT:=0; 3999 END ELSE{849:}BEGIN LASTSPECIALLINE:=ABS(EQTB[5304].INT); 4000 IF EQTB[5304].INT<0 THEN BEGIN FIRSTWIDTH:=EQTB[5833].INT-ABS(EQTB[5847] 4001 .INT); 4002 IF EQTB[5847].INT>=0 THEN FIRSTINDENT:=EQTB[5847].INT ELSE FIRSTINDENT:= 4003 0;SECONDWIDTH:=EQTB[5833].INT;SECONDINDENT:=0; 4004 END ELSE BEGIN FIRSTWIDTH:=EQTB[5833].INT;FIRSTINDENT:=0; 4005 SECONDWIDTH:=EQTB[5833].INT-ABS(EQTB[5847].INT); 4006 IF EQTB[5847].INT>=0 THEN SECONDINDENT:=EQTB[5847].INT ELSE SECONDINDENT 4007 :=0;END; 4008 END{:849}ELSE BEGIN LASTSPECIALLINE:=MEM[EQTB[3412].HH.RH].HH.LH-1; 4009 SECONDWIDTH:=MEM[EQTB[3412].HH.RH+2*(LASTSPECIALLINE+1)].INT; 4010 SECONDINDENT:=MEM[EQTB[3412].HH.RH+2*LASTSPECIALLINE+1].INT;END; 4011 IF EQTB[5282].INT=0 THEN EASYLINE:=LASTSPECIALLINE ELSE EASYLINE:=65535 4012 {:848};{863:}THRESHOLD:=EQTB[5263].INT; 4013 IF THRESHOLD>=0 THEN BEGIN{IF EQTB[5295].INT>0 THEN BEGIN 4014 BEGINDIAGNOSTIC;PRINTNL(933);END;}SECONDPASS:=FALSE;FINALPASS:=FALSE; 4015 END ELSE BEGIN THRESHOLD:=EQTB[5264].INT;SECONDPASS:=TRUE; 4016 FINALPASS:=(EQTB[5850].INT<=0); 4017 {IF EQTB[5295].INT>0 THEN BEGINDIAGNOSTIC;}END; 4018 WHILE TRUE DO BEGIN IF THRESHOLD>10000 THEN THRESHOLD:=10000; 4019 IF SECONDPASS THEN{891:}BEGIN IF TRIENOTREADY THEN INITTRIE; 4020 CURLANG:=INITCURLANG;LHYF:=INITLHYF;RHYF:=INITRHYF;END{:891}; 4021 {864:}Q:=GETNODE(3);MEM[Q].HH.B0:=0;MEM[Q].HH.B1:=2;MEM[Q].HH.RH:=29993; 4022 MEM[Q+1].HH.RH:=0;MEM[Q+1].HH.LH:=CURLIST.PGFIELD+1;MEM[Q+2].INT:=0; 4023 MEM[29993].HH.RH:=Q;ACTIVEWIDTH[1]:=BACKGROUND[1]; 4024 ACTIVEWIDTH[2]:=BACKGROUND[2];ACTIVEWIDTH[3]:=BACKGROUND[3]; 4025 ACTIVEWIDTH[4]:=BACKGROUND[4];ACTIVEWIDTH[5]:=BACKGROUND[5]; 4026 ACTIVEWIDTH[6]:=BACKGROUND[6];PASSIVE:=0;PRINTEDNODE:=29997; 4027 PASSNUMBER:=0;FONTINSHORTDISPLAY:=0{:864};CURP:=MEM[29997].HH.RH; 4028 AUTOBREAKING:=TRUE;PREVP:=CURP; 4029 WHILE(CURP<>0)AND(MEM[29993].HH.RH<>29993)DO{866:}BEGIN IF(CURP>= 4030 HIMEMMIN)THEN{867:}BEGIN PREVP:=CURP;REPEAT F:=MEM[CURP].HH.B0; 4031 ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F 4032 ]+MEM[CURP].HH.B1].QQQQ.B0].INT;CURP:=MEM[CURP].HH.RH; 4033 UNTIL NOT(CURP>=HIMEMMIN);END{:867}; 4034 CASE MEM[CURP].HH.B0 OF 0,1,2:ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1] 4035 .INT; 4036 8:{1362:}IF MEM[CURP].HH.B1=4 THEN BEGIN CURLANG:=MEM[CURP+1].HH.RH; 4037 LHYF:=MEM[CURP+1].HH.B0;RHYF:=MEM[CURP+1].HH.B1;END{:1362}; 4038 10:BEGIN{868:}IF AUTOBREAKING THEN BEGIN IF(PREVP>=HIMEMMIN)THEN 4039 TRYBREAK(0,0)ELSE IF(MEM[PREVP].HH.B0<9)THEN TRYBREAK(0,0)ELSE IF(MEM[ 4040 PREVP].HH.B0=11)AND(MEM[PREVP].HH.B1<>1)THEN TRYBREAK(0,0);END; 4041 IF(MEM[MEM[CURP+1].HH.LH].HH.B1<>0)AND(MEM[MEM[CURP+1].HH.LH+3].INT<>0) 4042 THEN BEGIN MEM[CURP+1].HH.LH:=FINITESHRINK(MEM[CURP+1].HH.LH);END; 4043 Q:=MEM[CURP+1].HH.LH;ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[Q+1].INT; 4044 ACTIVEWIDTH[2+MEM[Q].HH.B0]:=ACTIVEWIDTH[2+MEM[Q].HH.B0]+MEM[Q+2].INT; 4045 ACTIVEWIDTH[6]:=ACTIVEWIDTH[6]+MEM[Q+3].INT{:868}; 4046 IF SECONDPASS AND AUTOBREAKING THEN{894:}BEGIN PREVS:=CURP; 4047 S:=MEM[PREVS].HH.RH; 4048 IF S<>0 THEN BEGIN{896:}WHILE TRUE DO BEGIN IF(S>=HIMEMMIN)THEN BEGIN C 4049 :=MEM[S].HH.B1-0;HF:=MEM[S].HH.B0; 4050 END ELSE IF MEM[S].HH.B0=6 THEN IF MEM[S+1].HH.RH=0 THEN GOTO 22 ELSE 4051 BEGIN Q:=MEM[S+1].HH.RH;C:=MEM[Q].HH.B1-0;HF:=MEM[Q].HH.B0; 4052 END ELSE IF(MEM[S].HH.B0=11)AND(MEM[S].HH.B1=0)THEN GOTO 22 ELSE IF MEM[ 4053 S].HH.B0=8 THEN BEGIN{1363:}IF MEM[S].HH.B1=4 THEN BEGIN CURLANG:=MEM[S 4054 +1].HH.RH;LHYF:=MEM[S+1].HH.B0;RHYF:=MEM[S+1].HH.B1;END{:1363};GOTO 22; 4055 END ELSE GOTO 31; 4056 IF EQTB[4239+C].HH.RH<>0 THEN IF(EQTB[4239+C].HH.RH=C)OR(EQTB[5301].INT> 4057 0)THEN GOTO 32 ELSE GOTO 31;22:PREVS:=S;S:=MEM[PREVS].HH.RH;END; 4058 32:HYFCHAR:=HYPHENCHAR[HF];IF HYFCHAR<0 THEN GOTO 31; 4059 IF HYFCHAR>255 THEN GOTO 31;HA:=PREVS{:896}; 4060 IF LHYF+RHYF>63 THEN GOTO 31;{897:}HN:=0; 4061 WHILE TRUE DO BEGIN IF(S>=HIMEMMIN)THEN BEGIN IF MEM[S].HH.B0<>HF THEN 4062 GOTO 33;HYFBCHAR:=MEM[S].HH.B1;C:=HYFBCHAR-0; 4063 IF EQTB[4239+C].HH.RH=0 THEN GOTO 33;IF HN=63 THEN GOTO 33;HB:=S; 4064 HN:=HN+1;HU[HN]:=C;HC[HN]:=EQTB[4239+C].HH.RH;HYFBCHAR:=256; 4065 END ELSE IF MEM[S].HH.B0=6 THEN{898:}BEGIN IF MEM[S+1].HH.B0<>HF THEN 4066 GOTO 33;J:=HN;Q:=MEM[S+1].HH.RH;IF Q>0 THEN HYFBCHAR:=MEM[Q].HH.B1; 4067 WHILE Q>0 DO BEGIN C:=MEM[Q].HH.B1-0; 4068 IF EQTB[4239+C].HH.RH=0 THEN GOTO 33;IF J=63 THEN GOTO 33;J:=J+1; 4069 HU[J]:=C;HC[J]:=EQTB[4239+C].HH.RH;Q:=MEM[Q].HH.RH;END;HB:=S;HN:=J; 4070 IF ODD(MEM[S].HH.B1)THEN HYFBCHAR:=FONTBCHAR[HF]ELSE HYFBCHAR:=256; 4071 END{:898}ELSE IF(MEM[S].HH.B0=11)AND(MEM[S].HH.B1=0)THEN BEGIN HB:=S; 4072 HYFBCHAR:=FONTBCHAR[HF];END ELSE GOTO 33;S:=MEM[S].HH.RH;END;33:{:897}; 4073 {899:}IF HN<LHYF+RHYF THEN GOTO 31; 4074 WHILE TRUE DO BEGIN IF NOT((S>=HIMEMMIN))THEN CASE MEM[S].HH.B0 OF 6:; 4075 11:IF MEM[S].HH.B1<>0 THEN GOTO 34;8,10,12,3,5,4:GOTO 34; 4076 ELSE GOTO 31 END;S:=MEM[S].HH.RH;END;34:{:899};HYPHENATE;END; 4077 31:END{:894};END; 4078 11:IF MEM[CURP].HH.B1=1 THEN BEGIN IF NOT(MEM[CURP].HH.RH>=HIMEMMIN)AND 4079 AUTOBREAKING THEN IF MEM[MEM[CURP].HH.RH].HH.B0=10 THEN TRYBREAK(0,0); 4080 ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1].INT; 4081 END ELSE ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1].INT; 4082 6:BEGIN F:=MEM[CURP+1].HH.B0; 4083 ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F 4084 ]+MEM[CURP+1].HH.B1].QQQQ.B0].INT;END; 4085 7:{869:}BEGIN S:=MEM[CURP+1].HH.LH;DISCWIDTH:=0; 4086 IF S=0 THEN TRYBREAK(EQTB[5267].INT,1)ELSE BEGIN REPEAT{870:}IF(S>= 4087 HIMEMMIN)THEN BEGIN F:=MEM[S].HH.B0; 4088 DISCWIDTH:=DISCWIDTH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[S]. 4089 HH.B1].QQQQ.B0].INT; 4090 END ELSE CASE MEM[S].HH.B0 OF 6:BEGIN F:=MEM[S+1].HH.B0; 4091 DISCWIDTH:=DISCWIDTH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[S+1] 4092 .HH.B1].QQQQ.B0].INT;END;0,1,2,11:DISCWIDTH:=DISCWIDTH+MEM[S+1].INT; 4093 ELSE CONFUSION(937)END{:870};S:=MEM[S].HH.RH;UNTIL S=0; 4094 ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+DISCWIDTH;TRYBREAK(EQTB[5266].INT,1); 4095 ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]-DISCWIDTH;END;R:=MEM[CURP].HH.B1; 4096 S:=MEM[CURP].HH.RH; 4097 WHILE R>0 DO BEGIN{871:}IF(S>=HIMEMMIN)THEN BEGIN F:=MEM[S].HH.B0; 4098 ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F 4099 ]+MEM[S].HH.B1].QQQQ.B0].INT; 4100 END ELSE CASE MEM[S].HH.B0 OF 6:BEGIN F:=MEM[S+1].HH.B0; 4101 ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F 4102 ]+MEM[S+1].HH.B1].QQQQ.B0].INT;END; 4103 0,1,2,11:ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[S+1].INT; 4104 ELSE CONFUSION(938)END{:871};R:=R-1;S:=MEM[S].HH.RH;END;PREVP:=CURP; 4105 CURP:=S;GOTO 35;END{:869};9:BEGIN AUTOBREAKING:=(MEM[CURP].HH.B1=1); 4106 BEGIN IF NOT(MEM[CURP].HH.RH>=HIMEMMIN)AND AUTOBREAKING THEN IF MEM[MEM[ 4107 CURP].HH.RH].HH.B0=10 THEN TRYBREAK(0,0); 4108 ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1].INT;END;END; 4109 12:TRYBREAK(MEM[CURP+1].INT,0);4,3,5:;ELSE CONFUSION(936)END; 4110 PREVP:=CURP;CURP:=MEM[CURP].HH.RH;35:END{:866}; 4111 IF CURP=0 THEN{873:}BEGIN TRYBREAK(-10000,1); 4112 IF MEM[29993].HH.RH<>29993 THEN BEGIN{874:}R:=MEM[29993].HH.RH; 4113 FEWESTDEMERITS:=1073741823; 4114 REPEAT IF MEM[R].HH.B0<>2 THEN IF MEM[R+2].INT<FEWESTDEMERITS THEN BEGIN 4115 FEWESTDEMERITS:=MEM[R+2].INT;BESTBET:=R;END;R:=MEM[R].HH.RH; 4116 UNTIL R=29993;BESTLINE:=MEM[BESTBET+1].HH.LH{:874}; 4117 IF EQTB[5282].INT=0 THEN GOTO 30;{875:}BEGIN R:=MEM[29993].HH.RH; 4118 ACTUALLOOSENESS:=0; 4119 REPEAT IF MEM[R].HH.B0<>2 THEN BEGIN LINEDIFF:=MEM[R+1].HH.LH-BESTLINE; 4120 IF((LINEDIFF<ACTUALLOOSENESS)AND(EQTB[5282].INT<=LINEDIFF))OR((LINEDIFF> 4121 ACTUALLOOSENESS)AND(EQTB[5282].INT>=LINEDIFF))THEN BEGIN BESTBET:=R; 4122 ACTUALLOOSENESS:=LINEDIFF;FEWESTDEMERITS:=MEM[R+2].INT; 4123 END ELSE IF(LINEDIFF=ACTUALLOOSENESS)AND(MEM[R+2].INT<FEWESTDEMERITS) 4124 THEN BEGIN BESTBET:=R;FEWESTDEMERITS:=MEM[R+2].INT;END;END; 4125 R:=MEM[R].HH.RH;UNTIL R=29993;BESTLINE:=MEM[BESTBET+1].HH.LH;END{:875}; 4126 IF(ACTUALLOOSENESS=EQTB[5282].INT)OR FINALPASS THEN GOTO 30;END; 4127 END{:873};{865:}Q:=MEM[29993].HH.RH; 4128 WHILE Q<>29993 DO BEGIN CURP:=MEM[Q].HH.RH; 4129 IF MEM[Q].HH.B0=2 THEN FREENODE(Q,7)ELSE FREENODE(Q,3);Q:=CURP;END; 4130 Q:=PASSIVE;WHILE Q<>0 DO BEGIN CURP:=MEM[Q].HH.RH;FREENODE(Q,2);Q:=CURP; 4131 END{:865}; 4132 IF NOT SECONDPASS THEN BEGIN{IF EQTB[5295].INT>0 THEN PRINTNL(934);} 4133 THRESHOLD:=EQTB[5264].INT;SECONDPASS:=TRUE; 4134 FINALPASS:=(EQTB[5850].INT<=0); 4135 END ELSE BEGIN{IF EQTB[5295].INT>0 THEN PRINTNL(935);} 4136 BACKGROUND[2]:=BACKGROUND[2]+EQTB[5850].INT;FINALPASS:=TRUE;END;END; 4137 30:{IF EQTB[5295].INT>0 THEN BEGIN ENDDIAGNOSTIC(TRUE); 4138 NORMALIZESELECTOR;END;}{:863}; 4139 {876:}POSTLINEBREAK(FINALWIDOWPENALTY){:876};{865:}Q:=MEM[29993].HH.RH; 4140 WHILE Q<>29993 DO BEGIN CURP:=MEM[Q].HH.RH; 4141 IF MEM[Q].HH.B0=2 THEN FREENODE(Q,7)ELSE FREENODE(Q,3);Q:=CURP;END; 4142 Q:=PASSIVE;WHILE Q<>0 DO BEGIN CURP:=MEM[Q].HH.RH;FREENODE(Q,2);Q:=CURP; 4143 END{:865};PACKBEGINLINE:=0;END;{:815}{934:}PROCEDURE NEWHYPHEXCEPTIONS; 4144 LABEL 21,10,40,45;VAR N:0..64;J:0..64;H:HYPHPOINTER;K:STRNUMBER; 4145 P:HALFWORD;Q:HALFWORD;S,T:STRNUMBER;U,V:POOLPOINTER;BEGIN SCANLEFTBRACE; 4146 IF EQTB[5313].INT<=0 THEN CURLANG:=0 ELSE IF EQTB[5313].INT>255 THEN 4147 CURLANG:=0 ELSE CURLANG:=EQTB[5313].INT;{935:}N:=0;P:=0; 4148 WHILE TRUE DO BEGIN GETXTOKEN; 4149 21:CASE CURCMD OF 11,12,68:{937:}IF CURCHR=45 THEN{938:}BEGIN IF N<63 4150 THEN BEGIN Q:=GETAVAIL;MEM[Q].HH.RH:=P;MEM[Q].HH.LH:=N;P:=Q;END; 4151 END{:938}ELSE BEGIN IF EQTB[4239+CURCHR].HH.RH=0 THEN BEGIN BEGIN IF 4152 INTERACTION=3 THEN;PRINTNL(262);PRINT(945);END;BEGIN HELPPTR:=2; 4153 HELPLINE[1]:=946;HELPLINE[0]:=947;END;ERROR; 4154 END ELSE IF N<63 THEN BEGIN N:=N+1;HC[N]:=EQTB[4239+CURCHR].HH.RH;END; 4155 END{:937};16:BEGIN SCANCHARNUM;CURCHR:=CURVAL;CURCMD:=68;GOTO 21;END; 4156 10,2:BEGIN IF N>1 THEN{939:}BEGIN N:=N+1;HC[N]:=CURLANG; 4157 BEGIN IF POOLPTR+N>POOLSIZE THEN OVERFLOW(257,POOLSIZE-INITPOOLPTR);END; 4158 H:=0;FOR J:=1 TO N DO BEGIN H:=(H+H+HC[J])MOD 307; 4159 BEGIN STRPOOL[POOLPTR]:=HC[J];POOLPTR:=POOLPTR+1;END;END;S:=MAKESTRING; 4160 {940:}IF HYPHCOUNT=307 THEN OVERFLOW(948,307);HYPHCOUNT:=HYPHCOUNT+1; 4161 WHILE HYPHWORD[H]<>0 DO BEGIN{941:}K:=HYPHWORD[H]; 4162 IF(STRSTART[K+1]-STRSTART[K])<(STRSTART[S+1]-STRSTART[S])THEN GOTO 40; 4163 IF(STRSTART[K+1]-STRSTART[K])>(STRSTART[S+1]-STRSTART[S])THEN GOTO 45; 4164 U:=STRSTART[K];V:=STRSTART[S]; 4165 REPEAT IF STRPOOL[U]<STRPOOL[V]THEN GOTO 40; 4166 IF STRPOOL[U]>STRPOOL[V]THEN GOTO 45;U:=U+1;V:=V+1; 4167 UNTIL U=STRSTART[K+1];40:Q:=HYPHLIST[H];HYPHLIST[H]:=P;P:=Q; 4168 T:=HYPHWORD[H];HYPHWORD[H]:=S;S:=T;45:{:941}; 4169 IF H>0 THEN H:=H-1 ELSE H:=307;END;HYPHWORD[H]:=S;HYPHLIST[H]:=P{:940}; 4170 END{:939};IF CURCMD=2 THEN GOTO 10;N:=0;P:=0;END; 4171 ELSE{936:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(680);END; 4172 PRINTESC(941);PRINT(942);BEGIN HELPPTR:=2;HELPLINE[1]:=943; 4173 HELPLINE[0]:=944;END;ERROR;END{:936}END;END{:935};10:END; 4174 {:934}{968:}FUNCTION PRUNEPAGETOP(P:HALFWORD):HALFWORD; 4175 VAR PREVP:HALFWORD;Q:HALFWORD;BEGIN PREVP:=29997;MEM[29997].HH.RH:=P; 4176 WHILE P<>0 DO CASE MEM[P].HH.B0 OF 0,1,2:{969:}BEGIN Q:=NEWSKIPPARAM(10) 4177 ;MEM[PREVP].HH.RH:=Q;MEM[Q].HH.RH:=P; 4178 IF MEM[TEMPPTR+1].INT>MEM[P+3].INT THEN MEM[TEMPPTR+1].INT:=MEM[TEMPPTR 4179 +1].INT-MEM[P+3].INT ELSE MEM[TEMPPTR+1].INT:=0;P:=0;END{:969}; 4180 8,4,3:BEGIN PREVP:=P;P:=MEM[PREVP].HH.RH;END;10,11,12:BEGIN Q:=P; 4181 P:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0;MEM[PREVP].HH.RH:=P;FLUSHNODELIST(Q); 4182 END;ELSE CONFUSION(959)END;PRUNEPAGETOP:=MEM[29997].HH.RH;END; 4183 {:968}{970:}FUNCTION VERTBREAK(P:HALFWORD;H,D:SCALED):HALFWORD; 4184 LABEL 30,45,90;VAR PREVP:HALFWORD;Q,R:HALFWORD;PI:INTEGER;B:INTEGER; 4185 LEASTCOST:INTEGER;BESTPLACE:HALFWORD;PREVDP:SCALED;T:SMALLNUMBER; 4186 BEGIN PREVP:=P;LEASTCOST:=1073741823;ACTIVEWIDTH[1]:=0; 4187 ACTIVEWIDTH[2]:=0;ACTIVEWIDTH[3]:=0;ACTIVEWIDTH[4]:=0;ACTIVEWIDTH[5]:=0; 4188 ACTIVEWIDTH[6]:=0;PREVDP:=0; 4189 WHILE TRUE DO BEGIN{972:}IF P=0 THEN PI:=-10000 ELSE{973:}CASE MEM[P].HH 4190 .B0 OF 0,1,2:BEGIN ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+PREVDP+MEM[P+3].INT; 4191 PREVDP:=MEM[P+2].INT;GOTO 45;END;8:{1365:}GOTO 45{:1365}; 4192 10:IF(MEM[PREVP].HH.B0<9)THEN PI:=0 ELSE GOTO 90; 4193 11:BEGIN IF MEM[P].HH.RH=0 THEN T:=12 ELSE T:=MEM[MEM[P].HH.RH].HH.B0; 4194 IF T=10 THEN PI:=0 ELSE GOTO 90;END;12:PI:=MEM[P+1].INT;4,3:GOTO 45; 4195 ELSE CONFUSION(960)END{:973}; 4196 {974:}IF PI<10000 THEN BEGIN{975:}IF ACTIVEWIDTH[1]<H THEN IF( 4197 ACTIVEWIDTH[3]<>0)OR(ACTIVEWIDTH[4]<>0)OR(ACTIVEWIDTH[5]<>0)THEN B:=0 4198 ELSE B:=BADNESS(H-ACTIVEWIDTH[1],ACTIVEWIDTH[2])ELSE IF ACTIVEWIDTH[1]-H 4199 >ACTIVEWIDTH[6]THEN B:=1073741823 ELSE B:=BADNESS(ACTIVEWIDTH[1]-H, 4200 ACTIVEWIDTH[6]){:975}; 4201 IF B<1073741823 THEN IF PI<=-10000 THEN B:=PI ELSE IF B<10000 THEN B:=B+ 4202 PI ELSE B:=100000;IF B<=LEASTCOST THEN BEGIN BESTPLACE:=P;LEASTCOST:=B; 4203 BESTHEIGHTPLUSDEPTH:=ACTIVEWIDTH[1]+PREVDP;END; 4204 IF(B=1073741823)OR(PI<=-10000)THEN GOTO 30;END{:974}; 4205 IF(MEM[P].HH.B0<10)OR(MEM[P].HH.B0>11)THEN GOTO 45; 4206 90:{976:}IF MEM[P].HH.B0=11 THEN Q:=P ELSE BEGIN Q:=MEM[P+1].HH.LH; 4207 ACTIVEWIDTH[2+MEM[Q].HH.B0]:=ACTIVEWIDTH[2+MEM[Q].HH.B0]+MEM[Q+2].INT; 4208 ACTIVEWIDTH[6]:=ACTIVEWIDTH[6]+MEM[Q+3].INT; 4209 IF(MEM[Q].HH.B1<>0)AND(MEM[Q+3].INT<>0)THEN BEGIN BEGIN IF INTERACTION=3 4210 THEN;PRINTNL(262);PRINT(961);END;BEGIN HELPPTR:=4;HELPLINE[3]:=962; 4211 HELPLINE[2]:=963;HELPLINE[1]:=964;HELPLINE[0]:=922;END;ERROR; 4212 R:=NEWSPEC(Q);MEM[R].HH.B1:=0;DELETEGLUEREF(Q);MEM[P+1].HH.LH:=R;Q:=R; 4213 END;END;ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+PREVDP+MEM[Q+1].INT; 4214 PREVDP:=0{:976}; 4215 45:IF PREVDP>D THEN BEGIN ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+PREVDP-D; 4216 PREVDP:=D;END;{:972};PREVP:=P;P:=MEM[PREVP].HH.RH;END; 4217 30:VERTBREAK:=BESTPLACE;END;{:970}{977:}FUNCTION VSPLIT(N:EIGHTBITS; 4218 H:SCALED):HALFWORD;LABEL 10,30;VAR V:HALFWORD;P:HALFWORD;Q:HALFWORD; 4219 BEGIN V:=EQTB[3678+N].HH.RH; 4220 IF CURMARK[3]<>0 THEN BEGIN DELETETOKENREF(CURMARK[3]);CURMARK[3]:=0; 4221 DELETETOKENREF(CURMARK[4]);CURMARK[4]:=0;END; 4222 {978:}IF V=0 THEN BEGIN VSPLIT:=0;GOTO 10;END; 4223 IF MEM[V].HH.B0<>1 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 4224 PRINT(338);END;PRINTESC(965);PRINT(966);PRINTESC(967);BEGIN HELPPTR:=2; 4225 HELPLINE[1]:=968;HELPLINE[0]:=969;END;ERROR;VSPLIT:=0;GOTO 10;END{:978}; 4226 Q:=VERTBREAK(MEM[V+5].HH.RH,H,EQTB[5836].INT);{979:}P:=MEM[V+5].HH.RH; 4227 IF P=Q THEN MEM[V+5].HH.RH:=0 ELSE WHILE TRUE DO BEGIN IF MEM[P].HH.B0=4 4228 THEN IF CURMARK[3]=0 THEN BEGIN CURMARK[3]:=MEM[P+1].INT; 4229 CURMARK[4]:=CURMARK[3];MEM[CURMARK[3]].HH.LH:=MEM[CURMARK[3]].HH.LH+2; 4230 END ELSE BEGIN DELETETOKENREF(CURMARK[4]);CURMARK[4]:=MEM[P+1].INT; 4231 MEM[CURMARK[4]].HH.LH:=MEM[CURMARK[4]].HH.LH+1;END; 4232 IF MEM[P].HH.RH=Q THEN BEGIN MEM[P].HH.RH:=0;GOTO 30;END; 4233 P:=MEM[P].HH.RH;END;30:{:979};Q:=PRUNEPAGETOP(Q);P:=MEM[V+5].HH.RH; 4234 FREENODE(V,7); 4235 IF Q=0 THEN EQTB[3678+N].HH.RH:=0 ELSE EQTB[3678+N].HH.RH:=VPACKAGE(Q,0, 4236 1,1073741823);VSPLIT:=VPACKAGE(P,H,0,EQTB[5836].INT);10:END; 4237 {:977}{985:}PROCEDURE PRINTTOTALS;BEGIN PRINTSCALED(PAGESOFAR[1]); 4238 IF PAGESOFAR[2]<>0 THEN BEGIN PRINT(312);PRINTSCALED(PAGESOFAR[2]); 4239 PRINT(338);END;IF PAGESOFAR[3]<>0 THEN BEGIN PRINT(312); 4240 PRINTSCALED(PAGESOFAR[3]);PRINT(311);END; 4241 IF PAGESOFAR[4]<>0 THEN BEGIN PRINT(312);PRINTSCALED(PAGESOFAR[4]); 4242 PRINT(978);END;IF PAGESOFAR[5]<>0 THEN BEGIN PRINT(312); 4243 PRINTSCALED(PAGESOFAR[5]);PRINT(979);END; 4244 IF PAGESOFAR[6]<>0 THEN BEGIN PRINT(313);PRINTSCALED(PAGESOFAR[6]);END; 4245 END;{:985}{987:}PROCEDURE FREEZEPAGESPECS(S:SMALLNUMBER); 4246 BEGIN PAGECONTENTS:=S;PAGESOFAR[0]:=EQTB[5834].INT; 4247 PAGEMAXDEPTH:=EQTB[5835].INT;PAGESOFAR[7]:=0;PAGESOFAR[1]:=0; 4248 PAGESOFAR[2]:=0;PAGESOFAR[3]:=0;PAGESOFAR[4]:=0;PAGESOFAR[5]:=0; 4249 PAGESOFAR[6]:=0;LEASTPAGECOST:=1073741823; 4250 {IF EQTB[5296].INT>0 THEN BEGIN BEGINDIAGNOSTIC;PRINTNL(987); 4251 PRINTSCALED(PAGESOFAR[0]);PRINT(988);PRINTSCALED(PAGEMAXDEPTH); 4252 ENDDIAGNOSTIC(FALSE);END;}END; 4253 {:987}{992:}PROCEDURE BOXERROR(N:EIGHTBITS);BEGIN ERROR;BEGINDIAGNOSTIC; 4254 PRINTNL(836);SHOWBOX(EQTB[3678+N].HH.RH);ENDDIAGNOSTIC(TRUE); 4255 FLUSHNODELIST(EQTB[3678+N].HH.RH);EQTB[3678+N].HH.RH:=0;END; 4256 {:992}{993:}PROCEDURE ENSUREVBOX(N:EIGHTBITS);VAR P:HALFWORD; 4257 BEGIN P:=EQTB[3678+N].HH.RH; 4258 IF P<>0 THEN IF MEM[P].HH.B0=0 THEN BEGIN BEGIN IF INTERACTION=3 THEN; 4259 PRINTNL(262);PRINT(989);END;BEGIN HELPPTR:=3;HELPLINE[2]:=990; 4260 HELPLINE[1]:=991;HELPLINE[0]:=992;END;BOXERROR(N);END;END; 4261 {:993}{994:}{1012:}PROCEDURE FIREUP(C:HALFWORD);LABEL 10; 4262 VAR P,Q,R,S:HALFWORD;PREVP:HALFWORD;N:0..255;WAIT:BOOLEAN; 4263 SAVEVBADNESS:INTEGER;SAVEVFUZZ:SCALED;SAVESPLITTOPSKIP:HALFWORD; 4264 BEGIN{1013:}IF MEM[BESTPAGEBREAK].HH.B0=12 THEN BEGIN GEQWORDDEFINE(5302 4265 ,MEM[BESTPAGEBREAK+1].INT);MEM[BESTPAGEBREAK+1].INT:=10000; 4266 END ELSE GEQWORDDEFINE(5302,10000){:1013}; 4267 IF CURMARK[2]<>0 THEN BEGIN IF CURMARK[0]<>0 THEN DELETETOKENREF(CURMARK 4268 [0]);CURMARK[0]:=CURMARK[2]; 4269 MEM[CURMARK[0]].HH.LH:=MEM[CURMARK[0]].HH.LH+1; 4270 DELETETOKENREF(CURMARK[1]);CURMARK[1]:=0;END; 4271 {1014:}IF C=BESTPAGEBREAK THEN BESTPAGEBREAK:=0; 4272 {1015:}IF EQTB[3933].HH.RH<>0 THEN BEGIN BEGIN IF INTERACTION=3 THEN; 4273 PRINTNL(262);PRINT(338);END;PRINTESC(409);PRINT(1003);BEGIN HELPPTR:=2; 4274 HELPLINE[1]:=1004;HELPLINE[0]:=992;END;BOXERROR(255);END{:1015}; 4275 INSERTPENALTIES:=0;SAVESPLITTOPSKIP:=EQTB[2892].HH.RH; 4276 IF EQTB[5316].INT<=0 THEN{1018:}BEGIN R:=MEM[30000].HH.RH; 4277 WHILE R<>30000 DO BEGIN IF MEM[R+2].HH.LH<>0 THEN BEGIN N:=MEM[R].HH.B1 4278 -0;ENSUREVBOX(N); 4279 IF EQTB[3678+N].HH.RH=0 THEN EQTB[3678+N].HH.RH:=NEWNULLBOX; 4280 P:=EQTB[3678+N].HH.RH+5;WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH; 4281 MEM[R+2].HH.RH:=P;END;R:=MEM[R].HH.RH;END;END{:1018};Q:=29996; 4282 MEM[Q].HH.RH:=0;PREVP:=29998;P:=MEM[PREVP].HH.RH; 4283 WHILE P<>BESTPAGEBREAK DO BEGIN IF MEM[P].HH.B0=3 THEN BEGIN IF EQTB[ 4284 5316].INT<=0 THEN{1020:}BEGIN R:=MEM[30000].HH.RH; 4285 WHILE MEM[R].HH.B1<>MEM[P].HH.B1 DO R:=MEM[R].HH.RH; 4286 IF MEM[R+2].HH.LH=0 THEN WAIT:=TRUE ELSE BEGIN WAIT:=FALSE; 4287 S:=MEM[R+2].HH.RH;MEM[S].HH.RH:=MEM[P+4].HH.LH; 4288 IF MEM[R+2].HH.LH=P THEN{1021:}BEGIN IF MEM[R].HH.B0=1 THEN IF(MEM[R+1]. 4289 HH.LH=P)AND(MEM[R+1].HH.RH<>0)THEN BEGIN WHILE MEM[S].HH.RH<>MEM[R+1].HH 4290 .RH DO S:=MEM[S].HH.RH;MEM[S].HH.RH:=0;EQTB[2892].HH.RH:=MEM[P+4].HH.RH; 4291 MEM[P+4].HH.LH:=PRUNEPAGETOP(MEM[R+1].HH.RH); 4292 IF MEM[P+4].HH.LH<>0 THEN BEGIN TEMPPTR:=VPACKAGE(MEM[P+4].HH.LH,0,1, 4293 1073741823);MEM[P+3].INT:=MEM[TEMPPTR+3].INT+MEM[TEMPPTR+2].INT; 4294 FREENODE(TEMPPTR,7);WAIT:=TRUE;END;END;MEM[R+2].HH.LH:=0; 4295 N:=MEM[R].HH.B1-0;TEMPPTR:=MEM[EQTB[3678+N].HH.RH+5].HH.RH; 4296 FREENODE(EQTB[3678+N].HH.RH,7); 4297 EQTB[3678+N].HH.RH:=VPACKAGE(TEMPPTR,0,1,1073741823); 4298 END{:1021}ELSE BEGIN WHILE MEM[S].HH.RH<>0 DO S:=MEM[S].HH.RH; 4299 MEM[R+2].HH.RH:=S;END;END;{1022:}MEM[PREVP].HH.RH:=MEM[P].HH.RH; 4300 MEM[P].HH.RH:=0;IF WAIT THEN BEGIN MEM[Q].HH.RH:=P;Q:=P; 4301 INSERTPENALTIES:=INSERTPENALTIES+1; 4302 END ELSE BEGIN DELETEGLUEREF(MEM[P+4].HH.RH);FREENODE(P,5);END; 4303 P:=PREVP{:1022};END{:1020}; 4304 END ELSE IF MEM[P].HH.B0=4 THEN{1016:}BEGIN IF CURMARK[1]=0 THEN BEGIN 4305 CURMARK[1]:=MEM[P+1].INT;MEM[CURMARK[1]].HH.LH:=MEM[CURMARK[1]].HH.LH+1; 4306 END;IF CURMARK[2]<>0 THEN DELETETOKENREF(CURMARK[2]); 4307 CURMARK[2]:=MEM[P+1].INT;MEM[CURMARK[2]].HH.LH:=MEM[CURMARK[2]].HH.LH+1; 4308 END{:1016};PREVP:=P;P:=MEM[PREVP].HH.RH;END; 4309 EQTB[2892].HH.RH:=SAVESPLITTOPSKIP; 4310 {1017:}IF P<>0 THEN BEGIN IF MEM[29999].HH.RH=0 THEN IF NESTPTR=0 THEN 4311 CURLIST.TAILFIELD:=PAGETAIL ELSE NEST[0].TAILFIELD:=PAGETAIL; 4312 MEM[PAGETAIL].HH.RH:=MEM[29999].HH.RH;MEM[29999].HH.RH:=P; 4313 MEM[PREVP].HH.RH:=0;END;SAVEVBADNESS:=EQTB[5290].INT; 4314 EQTB[5290].INT:=10000;SAVEVFUZZ:=EQTB[5839].INT; 4315 EQTB[5839].INT:=1073741823; 4316 EQTB[3933].HH.RH:=VPACKAGE(MEM[29998].HH.RH,BESTSIZE,0,PAGEMAXDEPTH); 4317 EQTB[5290].INT:=SAVEVBADNESS;EQTB[5839].INT:=SAVEVFUZZ; 4318 IF LASTGLUE<>65535 THEN DELETEGLUEREF(LASTGLUE);{991:}PAGECONTENTS:=0; 4319 PAGETAIL:=29998;MEM[29998].HH.RH:=0;LASTGLUE:=65535;LASTPENALTY:=0; 4320 LASTKERN:=0;PAGESOFAR[7]:=0;PAGEMAXDEPTH:=0{:991}; 4321 IF Q<>29996 THEN BEGIN MEM[29998].HH.RH:=MEM[29996].HH.RH;PAGETAIL:=Q; 4322 END{:1017};{1019:}R:=MEM[30000].HH.RH; 4323 WHILE R<>30000 DO BEGIN Q:=MEM[R].HH.RH;FREENODE(R,4);R:=Q;END; 4324 MEM[30000].HH.RH:=30000{:1019}{:1014}; 4325 IF(CURMARK[0]<>0)AND(CURMARK[1]=0)THEN BEGIN CURMARK[1]:=CURMARK[0]; 4326 MEM[CURMARK[0]].HH.LH:=MEM[CURMARK[0]].HH.LH+1;END; 4327 IF EQTB[3413].HH.RH<>0 THEN IF DEADCYCLES>=EQTB[5303].INT THEN{1024:} 4328 BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1005);END; 4329 PRINTINT(DEADCYCLES);PRINT(1006);BEGIN HELPPTR:=3;HELPLINE[2]:=1007; 4330 HELPLINE[1]:=1008;HELPLINE[0]:=1009;END;ERROR; 4331 END{:1024}ELSE{1025:}BEGIN OUTPUTACTIVE:=TRUE;DEADCYCLES:=DEADCYCLES+1; 4332 PUSHNEST;CURLIST.MODEFIELD:=-1;CURLIST.AUXFIELD.INT:=-65536000; 4333 CURLIST.MLFIELD:=-LINE;BEGINTOKENLIST(EQTB[3413].HH.RH,6); 4334 NEWSAVELEVEL(8);NORMALPARAGRAPH;SCANLEFTBRACE;GOTO 10;END{:1025}; 4335 {1023:}BEGIN IF MEM[29998].HH.RH<>0 THEN BEGIN IF MEM[29999].HH.RH=0 4336 THEN IF NESTPTR=0 THEN CURLIST.TAILFIELD:=PAGETAIL ELSE NEST[0]. 4337 TAILFIELD:=PAGETAIL ELSE MEM[PAGETAIL].HH.RH:=MEM[29999].HH.RH; 4338 MEM[29999].HH.RH:=MEM[29998].HH.RH;MEM[29998].HH.RH:=0;PAGETAIL:=29998; 4339 END;SHIPOUT(EQTB[3933].HH.RH);EQTB[3933].HH.RH:=0;END{:1023};10:END; 4340 {:1012}PROCEDURE BUILDPAGE;LABEL 10,30,31,22,80,90;VAR P:HALFWORD; 4341 Q,R:HALFWORD;B,C:INTEGER;PI:INTEGER;N:0..255;DELTA,H,W:SCALED; 4342 BEGIN IF(MEM[29999].HH.RH=0)OR OUTPUTACTIVE THEN GOTO 10; 4343 REPEAT 22:P:=MEM[29999].HH.RH; 4344 {996:}IF LASTGLUE<>65535 THEN DELETEGLUEREF(LASTGLUE);LASTPENALTY:=0; 4345 LASTKERN:=0;IF MEM[P].HH.B0=10 THEN BEGIN LASTGLUE:=MEM[P+1].HH.LH; 4346 MEM[LASTGLUE].HH.RH:=MEM[LASTGLUE].HH.RH+1; 4347 END ELSE BEGIN LASTGLUE:=65535; 4348 IF MEM[P].HH.B0=12 THEN LASTPENALTY:=MEM[P+1].INT ELSE IF MEM[P].HH.B0= 4349 11 THEN LASTKERN:=MEM[P+1].INT;END{:996}; 4350 {997:}{1000:}CASE MEM[P].HH.B0 OF 0,1,2:IF PAGECONTENTS<2 THEN{1001:} 4351 BEGIN IF PAGECONTENTS=0 THEN FREEZEPAGESPECS(2)ELSE PAGECONTENTS:=2; 4352 Q:=NEWSKIPPARAM(9); 4353 IF MEM[TEMPPTR+1].INT>MEM[P+3].INT THEN MEM[TEMPPTR+1].INT:=MEM[TEMPPTR 4354 +1].INT-MEM[P+3].INT ELSE MEM[TEMPPTR+1].INT:=0;MEM[Q].HH.RH:=P; 4355 MEM[29999].HH.RH:=Q;GOTO 22; 4356 END{:1001}ELSE{1002:}BEGIN PAGESOFAR[1]:=PAGESOFAR[1]+PAGESOFAR[7]+MEM[P 4357 +3].INT;PAGESOFAR[7]:=MEM[P+2].INT;GOTO 80;END{:1002}; 4358 8:{1364:}GOTO 80{:1364}; 4359 10:IF PAGECONTENTS<2 THEN GOTO 31 ELSE IF(MEM[PAGETAIL].HH.B0<9)THEN PI 4360 :=0 ELSE GOTO 90; 4361 11:IF PAGECONTENTS<2 THEN GOTO 31 ELSE IF MEM[P].HH.RH=0 THEN GOTO 10 4362 ELSE IF MEM[MEM[P].HH.RH].HH.B0=10 THEN PI:=0 ELSE GOTO 90; 4363 12:IF PAGECONTENTS<2 THEN GOTO 31 ELSE PI:=MEM[P+1].INT;4:GOTO 80; 4364 3:{1008:}BEGIN IF PAGECONTENTS=0 THEN FREEZEPAGESPECS(1); 4365 N:=MEM[P].HH.B1;R:=30000; 4366 WHILE N>=MEM[MEM[R].HH.RH].HH.B1 DO R:=MEM[R].HH.RH;N:=N-0; 4367 IF MEM[R].HH.B1<>N+0 THEN{1009:}BEGIN Q:=GETNODE(4); 4368 MEM[Q].HH.RH:=MEM[R].HH.RH;MEM[R].HH.RH:=Q;R:=Q;MEM[R].HH.B1:=N+0; 4369 MEM[R].HH.B0:=0;ENSUREVBOX(N); 4370 IF EQTB[3678+N].HH.RH=0 THEN MEM[R+3].INT:=0 ELSE MEM[R+3].INT:=MEM[EQTB 4371 [3678+N].HH.RH+3].INT+MEM[EQTB[3678+N].HH.RH+2].INT;MEM[R+2].HH.LH:=0; 4372 Q:=EQTB[2900+N].HH.RH; 4373 IF EQTB[5318+N].INT=1000 THEN H:=MEM[R+3].INT ELSE H:=XOVERN(MEM[R+3]. 4374 INT,1000)*EQTB[5318+N].INT;PAGESOFAR[0]:=PAGESOFAR[0]-H-MEM[Q+1].INT; 4375 PAGESOFAR[2+MEM[Q].HH.B0]:=PAGESOFAR[2+MEM[Q].HH.B0]+MEM[Q+2].INT; 4376 PAGESOFAR[6]:=PAGESOFAR[6]+MEM[Q+3].INT; 4377 IF(MEM[Q].HH.B1<>0)AND(MEM[Q+3].INT<>0)THEN BEGIN BEGIN IF INTERACTION=3 4378 THEN;PRINTNL(262);PRINT(998);END;PRINTESC(395);PRINTINT(N); 4379 BEGIN HELPPTR:=3;HELPLINE[2]:=999;HELPLINE[1]:=1000;HELPLINE[0]:=922; 4380 END;ERROR;END;END{:1009}; 4381 IF MEM[R].HH.B0=1 THEN INSERTPENALTIES:=INSERTPENALTIES+MEM[P+1].INT 4382 ELSE BEGIN MEM[R+2].HH.RH:=P; 4383 DELTA:=PAGESOFAR[0]-PAGESOFAR[1]-PAGESOFAR[7]+PAGESOFAR[6]; 4384 IF EQTB[5318+N].INT=1000 THEN H:=MEM[P+3].INT ELSE H:=XOVERN(MEM[P+3]. 4385 INT,1000)*EQTB[5318+N].INT; 4386 IF((H<=0)OR(H<=DELTA))AND(MEM[P+3].INT+MEM[R+3].INT<=EQTB[5851+N].INT) 4387 THEN BEGIN PAGESOFAR[0]:=PAGESOFAR[0]-H; 4388 MEM[R+3].INT:=MEM[R+3].INT+MEM[P+3].INT; 4389 END ELSE{1010:}BEGIN IF EQTB[5318+N].INT<=0 THEN W:=1073741823 ELSE 4390 BEGIN W:=PAGESOFAR[0]-PAGESOFAR[1]-PAGESOFAR[7]; 4391 IF EQTB[5318+N].INT<>1000 THEN W:=XOVERN(W,EQTB[5318+N].INT)*1000;END; 4392 IF W>EQTB[5851+N].INT-MEM[R+3].INT THEN W:=EQTB[5851+N].INT-MEM[R+3].INT 4393 ;Q:=VERTBREAK(MEM[P+4].HH.LH,W,MEM[P+2].INT); 4394 MEM[R+3].INT:=MEM[R+3].INT+BESTHEIGHTPLUSDEPTH; 4395 {IF EQTB[5296].INT>0 THEN[1011:]BEGIN BEGINDIAGNOSTIC;PRINTNL(1001); 4396 PRINTINT(N);PRINT(1002);PRINTSCALED(W);PRINTCHAR(44); 4397 PRINTSCALED(BESTHEIGHTPLUSDEPTH);PRINT(931); 4398 IF Q=0 THEN PRINTINT(-10000)ELSE IF MEM[Q].HH.B0=12 THEN PRINTINT(MEM[Q 4399 +1].INT)ELSE PRINTCHAR(48);ENDDIAGNOSTIC(FALSE);END[:1011];} 4400 IF EQTB[5318+N].INT<>1000 THEN BESTHEIGHTPLUSDEPTH:=XOVERN( 4401 BESTHEIGHTPLUSDEPTH,1000)*EQTB[5318+N].INT; 4402 PAGESOFAR[0]:=PAGESOFAR[0]-BESTHEIGHTPLUSDEPTH;MEM[R].HH.B0:=1; 4403 MEM[R+1].HH.RH:=Q;MEM[R+1].HH.LH:=P; 4404 IF Q=0 THEN INSERTPENALTIES:=INSERTPENALTIES-10000 ELSE IF MEM[Q].HH.B0= 4405 12 THEN INSERTPENALTIES:=INSERTPENALTIES+MEM[Q+1].INT;END{:1010};END; 4406 GOTO 80;END{:1008};ELSE CONFUSION(993)END{:1000}; 4407 {1005:}IF PI<10000 THEN BEGIN{1007:}IF PAGESOFAR[1]<PAGESOFAR[0]THEN IF( 4408 PAGESOFAR[3]<>0)OR(PAGESOFAR[4]<>0)OR(PAGESOFAR[5]<>0)THEN B:=0 ELSE B:= 4409 BADNESS(PAGESOFAR[0]-PAGESOFAR[1],PAGESOFAR[2])ELSE IF PAGESOFAR[1]- 4410 PAGESOFAR[0]>PAGESOFAR[6]THEN B:=1073741823 ELSE B:=BADNESS(PAGESOFAR[1] 4411 -PAGESOFAR[0],PAGESOFAR[6]){:1007}; 4412 IF B<1073741823 THEN IF PI<=-10000 THEN C:=PI ELSE IF B<10000 THEN C:=B+ 4413 PI+INSERTPENALTIES ELSE C:=100000 ELSE C:=B; 4414 IF INSERTPENALTIES>=10000 THEN C:=1073741823; 4415 {IF EQTB[5296].INT>0 THEN[1006:]BEGIN BEGINDIAGNOSTIC;PRINTNL(37); 4416 PRINT(927);PRINTTOTALS;PRINT(996);PRINTSCALED(PAGESOFAR[0]);PRINT(930); 4417 IF B=1073741823 THEN PRINTCHAR(42)ELSE PRINTINT(B);PRINT(931); 4418 PRINTINT(PI);PRINT(997); 4419 IF C=1073741823 THEN PRINTCHAR(42)ELSE PRINTINT(C); 4420 IF C<=LEASTPAGECOST THEN PRINTCHAR(35);ENDDIAGNOSTIC(FALSE);END[:1006];} 4421 IF C<=LEASTPAGECOST THEN BEGIN BESTPAGEBREAK:=P;BESTSIZE:=PAGESOFAR[0]; 4422 LEASTPAGECOST:=C;R:=MEM[30000].HH.RH; 4423 WHILE R<>30000 DO BEGIN MEM[R+2].HH.LH:=MEM[R+2].HH.RH;R:=MEM[R].HH.RH; 4424 END;END;IF(C=1073741823)OR(PI<=-10000)THEN BEGIN FIREUP(P); 4425 IF OUTPUTACTIVE THEN GOTO 10;GOTO 30;END;END{:1005}; 4426 IF(MEM[P].HH.B0<10)OR(MEM[P].HH.B0>11)THEN GOTO 80; 4427 90:{1004:}IF MEM[P].HH.B0=11 THEN Q:=P ELSE BEGIN Q:=MEM[P+1].HH.LH; 4428 PAGESOFAR[2+MEM[Q].HH.B0]:=PAGESOFAR[2+MEM[Q].HH.B0]+MEM[Q+2].INT; 4429 PAGESOFAR[6]:=PAGESOFAR[6]+MEM[Q+3].INT; 4430 IF(MEM[Q].HH.B1<>0)AND(MEM[Q+3].INT<>0)THEN BEGIN BEGIN IF INTERACTION=3 4431 THEN;PRINTNL(262);PRINT(994);END;BEGIN HELPPTR:=4;HELPLINE[3]:=995; 4432 HELPLINE[2]:=963;HELPLINE[1]:=964;HELPLINE[0]:=922;END;ERROR; 4433 R:=NEWSPEC(Q);MEM[R].HH.B1:=0;DELETEGLUEREF(Q);MEM[P+1].HH.LH:=R;Q:=R; 4434 END;END;PAGESOFAR[1]:=PAGESOFAR[1]+PAGESOFAR[7]+MEM[Q+1].INT; 4435 PAGESOFAR[7]:=0{:1004}; 4436 80:{1003:}IF PAGESOFAR[7]>PAGEMAXDEPTH THEN BEGIN PAGESOFAR[1]:= 4437 PAGESOFAR[1]+PAGESOFAR[7]-PAGEMAXDEPTH;PAGESOFAR[7]:=PAGEMAXDEPTH;END; 4438 {:1003};{998:}MEM[PAGETAIL].HH.RH:=P;PAGETAIL:=P; 4439 MEM[29999].HH.RH:=MEM[P].HH.RH;MEM[P].HH.RH:=0;GOTO 30{:998}; 4440 31:{999:}MEM[29999].HH.RH:=MEM[P].HH.RH;MEM[P].HH.RH:=0; 4441 FLUSHNODELIST(P){:999};30:{:997};UNTIL MEM[29999].HH.RH=0; 4442 {995:}IF NESTPTR=0 THEN CURLIST.TAILFIELD:=29999 ELSE NEST[0].TAILFIELD 4443 :=29999{:995};10:END;{:994}{1030:}{1043:}PROCEDURE APPSPACE; 4444 VAR Q:HALFWORD; 4445 BEGIN IF(CURLIST.AUXFIELD.HH.LH>=2000)AND(EQTB[2895].HH.RH<>0)THEN Q:= 4446 NEWPARAMGLUE(13)ELSE BEGIN IF EQTB[2894].HH.RH<>0 THEN MAINP:=EQTB[2894] 4447 .HH.RH ELSE{1042:}BEGIN MAINP:=FONTGLUE[EQTB[3934].HH.RH]; 4448 IF MAINP=0 THEN BEGIN MAINP:=NEWSPEC(0); 4449 MAINK:=PARAMBASE[EQTB[3934].HH.RH]+2; 4450 MEM[MAINP+1].INT:=FONTINFO[MAINK].INT; 4451 MEM[MAINP+2].INT:=FONTINFO[MAINK+1].INT; 4452 MEM[MAINP+3].INT:=FONTINFO[MAINK+2].INT; 4453 FONTGLUE[EQTB[3934].HH.RH]:=MAINP;END;END{:1042};MAINP:=NEWSPEC(MAINP); 4454 {1044:}IF CURLIST.AUXFIELD.HH.LH>=2000 THEN MEM[MAINP+1].INT:=MEM[MAINP 4455 +1].INT+FONTINFO[7+PARAMBASE[EQTB[3934].HH.RH]].INT; 4456 MEM[MAINP+2].INT:=XNOVERD(MEM[MAINP+2].INT,CURLIST.AUXFIELD.HH.LH,1000); 4457 MEM[MAINP+3].INT:=XNOVERD(MEM[MAINP+3].INT,1000,CURLIST.AUXFIELD.HH.LH) 4458 {:1044};Q:=NEWGLUE(MAINP);MEM[MAINP].HH.RH:=0;END; 4459 MEM[CURLIST.TAILFIELD].HH.RH:=Q;CURLIST.TAILFIELD:=Q;END; 4460 {:1043}{1047:}PROCEDURE INSERTDOLLARSIGN;BEGIN BACKINPUT;CURTOK:=804; 4461 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1017);END; 4462 BEGIN HELPPTR:=2;HELPLINE[1]:=1018;HELPLINE[0]:=1019;END;INSERROR;END; 4463 {:1047}{1049:}PROCEDURE YOUCANT;BEGIN BEGIN IF INTERACTION=3 THEN; 4464 PRINTNL(262);PRINT(685);END;PRINTCMDCHR(CURCMD,CURCHR);PRINT(1020); 4465 PRINTMODE(CURLIST.MODEFIELD);END; 4466 {:1049}{1050:}PROCEDURE REPORTILLEGALCASE;BEGIN YOUCANT; 4467 BEGIN HELPPTR:=4;HELPLINE[3]:=1021;HELPLINE[2]:=1022;HELPLINE[1]:=1023; 4468 HELPLINE[0]:=1024;END;ERROR;END; 4469 {:1050}{1051:}FUNCTION PRIVILEGED:BOOLEAN; 4470 BEGIN IF CURLIST.MODEFIELD>0 THEN PRIVILEGED:=TRUE ELSE BEGIN 4471 REPORTILLEGALCASE;PRIVILEGED:=FALSE;END;END; 4472 {:1051}{1054:}FUNCTION ITSALLOVER:BOOLEAN;LABEL 10; 4473 BEGIN IF PRIVILEGED THEN BEGIN IF(29998=PAGETAIL)AND(CURLIST.HEADFIELD= 4474 CURLIST.TAILFIELD)AND(DEADCYCLES=0)THEN BEGIN ITSALLOVER:=TRUE;GOTO 10; 4475 END;BACKINPUT;BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNULLBOX; 4476 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4477 MEM[CURLIST.TAILFIELD+1].INT:=EQTB[5833].INT; 4478 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(8); 4479 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4480 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(-1073741824); 4481 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;BUILDPAGE;END; 4482 ITSALLOVER:=FALSE;10:END;{:1054}{1060:}PROCEDURE APPENDGLUE; 4483 VAR S:SMALLNUMBER;BEGIN S:=CURCHR;CASE S OF 0:CURVAL:=4;1:CURVAL:=8; 4484 2:CURVAL:=12;3:CURVAL:=16;4:SCANGLUE(2);5:SCANGLUE(3);END; 4485 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(CURVAL); 4486 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4487 IF S>=4 THEN BEGIN MEM[CURVAL].HH.RH:=MEM[CURVAL].HH.RH-1; 4488 IF S>4 THEN MEM[CURLIST.TAILFIELD].HH.B1:=99;END;END; 4489 {:1060}{1061:}PROCEDURE APPENDKERN;VAR S:QUARTERWORD;BEGIN S:=CURCHR; 4490 SCANDIMEN(S=99,FALSE,FALSE); 4491 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(CURVAL); 4492 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4493 MEM[CURLIST.TAILFIELD].HH.B1:=S;END;{:1061}{1064:}PROCEDURE OFFSAVE; 4494 VAR P:HALFWORD; 4495 BEGIN IF CURGROUP=0 THEN{1066:}BEGIN BEGIN IF INTERACTION=3 THEN; 4496 PRINTNL(262);PRINT(777);END;PRINTCMDCHR(CURCMD,CURCHR);BEGIN HELPPTR:=1; 4497 HELPLINE[0]:=1043;END;ERROR;END{:1066}ELSE BEGIN BACKINPUT;P:=GETAVAIL; 4498 MEM[29997].HH.RH:=P;BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(625); 4499 END;{1065:}CASE CURGROUP OF 14:BEGIN MEM[P].HH.LH:=6711;PRINTESC(516); 4500 END;15:BEGIN MEM[P].HH.LH:=804;PRINTCHAR(36);END; 4501 16:BEGIN MEM[P].HH.LH:=6712;MEM[P].HH.RH:=GETAVAIL;P:=MEM[P].HH.RH; 4502 MEM[P].HH.LH:=3118;PRINTESC(1042);END;ELSE BEGIN MEM[P].HH.LH:=637; 4503 PRINTCHAR(125);END END{:1065};PRINT(626); 4504 BEGINTOKENLIST(MEM[29997].HH.RH,4);BEGIN HELPPTR:=5;HELPLINE[4]:=1037; 4505 HELPLINE[3]:=1038;HELPLINE[2]:=1039;HELPLINE[1]:=1040;HELPLINE[0]:=1041; 4506 END;ERROR;END;END;{:1064}{1069:}PROCEDURE EXTRARIGHTBRACE; 4507 BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1048);END; 4508 CASE CURGROUP OF 14:PRINTESC(516);15:PRINTCHAR(36);16:PRINTESC(877);END; 4509 BEGIN HELPPTR:=5;HELPLINE[4]:=1049;HELPLINE[3]:=1050;HELPLINE[2]:=1051; 4510 HELPLINE[1]:=1052;HELPLINE[0]:=1053;END;ERROR;ALIGNSTATE:=ALIGNSTATE+1; 4511 END;{:1069}{1070:}PROCEDURE NORMALPARAGRAPH; 4512 BEGIN IF EQTB[5282].INT<>0 THEN EQWORDDEFINE(5282,0); 4513 IF EQTB[5847].INT<>0 THEN EQWORDDEFINE(5847,0); 4514 IF EQTB[5304].INT<>1 THEN EQWORDDEFINE(5304,1); 4515 IF EQTB[3412].HH.RH<>0 THEN EQDEFINE(3412,118,0);END; 4516 {:1070}{1075:}PROCEDURE BOXEND(BOXCONTEXT:INTEGER);VAR P:HALFWORD; 4517 BEGIN IF BOXCONTEXT<1073741824 THEN{1076:}BEGIN IF CURBOX<>0 THEN BEGIN 4518 MEM[CURBOX+4].INT:=BOXCONTEXT; 4519 IF ABS(CURLIST.MODEFIELD)=1 THEN BEGIN APPENDTOVLIST(CURBOX); 4520 IF ADJUSTTAIL<>0 THEN BEGIN IF 29995<>ADJUSTTAIL THEN BEGIN MEM[CURLIST. 4521 TAILFIELD].HH.RH:=MEM[29995].HH.RH;CURLIST.TAILFIELD:=ADJUSTTAIL;END; 4522 ADJUSTTAIL:=0;END;IF CURLIST.MODEFIELD>0 THEN BUILDPAGE; 4523 END ELSE BEGIN IF ABS(CURLIST.MODEFIELD)=102 THEN CURLIST.AUXFIELD.HH.LH 4524 :=1000 ELSE BEGIN P:=NEWNOAD;MEM[P+1].HH.RH:=2;MEM[P+1].HH.LH:=CURBOX; 4525 CURBOX:=P;END;MEM[CURLIST.TAILFIELD].HH.RH:=CURBOX; 4526 CURLIST.TAILFIELD:=CURBOX;END;END; 4527 END{:1076}ELSE IF BOXCONTEXT<1073742336 THEN{1077:}IF BOXCONTEXT< 4528 1073742080 THEN EQDEFINE(-1073738146+BOXCONTEXT,119,CURBOX)ELSE 4529 GEQDEFINE(-1073738402+BOXCONTEXT,119,CURBOX){:1077}ELSE IF CURBOX<>0 4530 THEN IF BOXCONTEXT>1073742336 THEN{1078:}BEGIN{404:}REPEAT GETXTOKEN; 4531 UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; 4532 IF((CURCMD=26)AND(ABS(CURLIST.MODEFIELD)<>1))OR((CURCMD=27)AND(ABS( 4533 CURLIST.MODEFIELD)=1))THEN BEGIN APPENDGLUE; 4534 MEM[CURLIST.TAILFIELD].HH.B1:=BOXCONTEXT-(1073742237); 4535 MEM[CURLIST.TAILFIELD+1].HH.RH:=CURBOX; 4536 END ELSE BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1066);END; 4537 BEGIN HELPPTR:=3;HELPLINE[2]:=1067;HELPLINE[1]:=1068;HELPLINE[0]:=1069; 4538 END;BACKERROR;FLUSHNODELIST(CURBOX);END;END{:1078}ELSE SHIPOUT(CURBOX); 4539 END;{:1075}{1079:}PROCEDURE BEGINBOX(BOXCONTEXT:INTEGER);LABEL 10,30; 4540 VAR P,Q:HALFWORD;M:QUARTERWORD;K:HALFWORD;N:EIGHTBITS; 4541 BEGIN CASE CURCHR OF 0:BEGIN SCANEIGHTBITINT; 4542 CURBOX:=EQTB[3678+CURVAL].HH.RH;EQTB[3678+CURVAL].HH.RH:=0;END; 4543 1:BEGIN SCANEIGHTBITINT;CURBOX:=COPYNODELIST(EQTB[3678+CURVAL].HH.RH); 4544 END;2:{1080:}BEGIN CURBOX:=0; 4545 IF ABS(CURLIST.MODEFIELD)=203 THEN BEGIN YOUCANT;BEGIN HELPPTR:=1; 4546 HELPLINE[0]:=1070;END;ERROR; 4547 END ELSE IF(CURLIST.MODEFIELD=1)AND(CURLIST.HEADFIELD=CURLIST.TAILFIELD) 4548 THEN BEGIN YOUCANT;BEGIN HELPPTR:=2;HELPLINE[1]:=1071;HELPLINE[0]:=1072; 4549 END;ERROR; 4550 END ELSE BEGIN IF NOT(CURLIST.TAILFIELD>=HIMEMMIN)THEN IF(MEM[CURLIST. 4551 TAILFIELD].HH.B0=0)OR(MEM[CURLIST.TAILFIELD].HH.B0=1)THEN{1081:}BEGIN Q 4552 :=CURLIST.HEADFIELD;REPEAT P:=Q; 4553 IF NOT(Q>=HIMEMMIN)THEN IF MEM[Q].HH.B0=7 THEN BEGIN FOR M:=1 TO MEM[Q]. 4554 HH.B1 DO P:=MEM[P].HH.RH;IF P=CURLIST.TAILFIELD THEN GOTO 30;END; 4555 Q:=MEM[P].HH.RH;UNTIL Q=CURLIST.TAILFIELD;CURBOX:=CURLIST.TAILFIELD; 4556 MEM[CURBOX+4].INT:=0;CURLIST.TAILFIELD:=P;MEM[P].HH.RH:=0;30:END{:1081}; 4557 END;END{:1080};3:{1082:}BEGIN SCANEIGHTBITINT;N:=CURVAL; 4558 IF NOT SCANKEYWORD(842)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 4559 PRINTNL(262);PRINT(1073);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1074; 4560 HELPLINE[0]:=1075;END;ERROR;END;SCANDIMEN(FALSE,FALSE,FALSE); 4561 CURBOX:=VSPLIT(N,CURVAL);END{:1082};ELSE{1083:}BEGIN K:=CURCHR-4; 4562 SAVESTACK[SAVEPTR+0].INT:=BOXCONTEXT; 4563 IF K=102 THEN IF(BOXCONTEXT<1073741824)AND(ABS(CURLIST.MODEFIELD)=1)THEN 4564 SCANSPEC(3,TRUE)ELSE SCANSPEC(2,TRUE)ELSE BEGIN IF K=1 THEN SCANSPEC(4, 4565 TRUE)ELSE BEGIN SCANSPEC(5,TRUE);K:=1;END;NORMALPARAGRAPH;END;PUSHNEST; 4566 CURLIST.MODEFIELD:=-K;IF K=1 THEN BEGIN CURLIST.AUXFIELD.INT:=-65536000; 4567 IF EQTB[3418].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3418].HH.RH,11); 4568 END ELSE BEGIN CURLIST.AUXFIELD.HH.LH:=1000; 4569 IF EQTB[3417].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3417].HH.RH,10);END; 4570 GOTO 10;END{:1083}END;BOXEND(BOXCONTEXT);10:END; 4571 {:1079}{1084:}PROCEDURE SCANBOX(BOXCONTEXT:INTEGER); 4572 BEGIN{404:}REPEAT GETXTOKEN;UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; 4573 IF CURCMD=20 THEN BEGINBOX(BOXCONTEXT)ELSE IF(BOXCONTEXT>=1073742337)AND 4574 ((CURCMD=36)OR(CURCMD=35))THEN BEGIN CURBOX:=SCANRULESPEC; 4575 BOXEND(BOXCONTEXT);END ELSE BEGIN BEGIN IF INTERACTION=3 THEN; 4576 PRINTNL(262);PRINT(1076);END;BEGIN HELPPTR:=3;HELPLINE[2]:=1077; 4577 HELPLINE[1]:=1078;HELPLINE[0]:=1079;END;BACKERROR;END;END; 4578 {:1084}{1086:}PROCEDURE PACKAGE(C:SMALLNUMBER);VAR H:SCALED;P:HALFWORD; 4579 D:SCALED;BEGIN D:=EQTB[5837].INT;UNSAVE;SAVEPTR:=SAVEPTR-3; 4580 IF CURLIST.MODEFIELD=-102 THEN CURBOX:=HPACK(MEM[CURLIST.HEADFIELD].HH. 4581 RH,SAVESTACK[SAVEPTR+2].INT,SAVESTACK[SAVEPTR+1].INT)ELSE BEGIN CURBOX:= 4582 VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,SAVESTACK[SAVEPTR+2].INT,SAVESTACK 4583 [SAVEPTR+1].INT,D);IF C=4 THEN{1087:}BEGIN H:=0;P:=MEM[CURBOX+5].HH.RH; 4584 IF P<>0 THEN IF MEM[P].HH.B0<=2 THEN H:=MEM[P+3].INT; 4585 MEM[CURBOX+2].INT:=MEM[CURBOX+2].INT-H+MEM[CURBOX+3].INT; 4586 MEM[CURBOX+3].INT:=H;END{:1087};END;POPNEST; 4587 BOXEND(SAVESTACK[SAVEPTR+0].INT);END; 4588 {:1086}{1091:}FUNCTION NORMMIN(H:INTEGER):SMALLNUMBER; 4589 BEGIN IF H<=0 THEN NORMMIN:=1 ELSE IF H>=63 THEN NORMMIN:=63 ELSE 4590 NORMMIN:=H;END;PROCEDURE NEWGRAF(INDENTED:BOOLEAN); 4591 BEGIN CURLIST.PGFIELD:=0; 4592 IF(CURLIST.MODEFIELD=1)OR(CURLIST.HEADFIELD<>CURLIST.TAILFIELD)THEN 4593 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(2); 4594 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;PUSHNEST; 4595 CURLIST.MODEFIELD:=102;CURLIST.AUXFIELD.HH.LH:=1000; 4596 IF EQTB[5313].INT<=0 THEN CURLANG:=0 ELSE IF EQTB[5313].INT>255 THEN 4597 CURLANG:=0 ELSE CURLANG:=EQTB[5313].INT;CURLIST.AUXFIELD.HH.RH:=CURLANG; 4598 CURLIST.PGFIELD:=(NORMMIN(EQTB[5314].INT)*64+NORMMIN(EQTB[5315].INT)) 4599 *65536+CURLANG;IF INDENTED THEN BEGIN CURLIST.TAILFIELD:=NEWNULLBOX; 4600 MEM[CURLIST.HEADFIELD].HH.RH:=CURLIST.TAILFIELD; 4601 MEM[CURLIST.TAILFIELD+1].INT:=EQTB[5830].INT;END; 4602 IF EQTB[3414].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3414].HH.RH,7); 4603 IF NESTPTR=1 THEN BUILDPAGE;END;{:1091}{1093:}PROCEDURE INDENTINHMODE; 4604 VAR P,Q:HALFWORD;BEGIN IF CURCHR>0 THEN BEGIN P:=NEWNULLBOX; 4605 MEM[P+1].INT:=EQTB[5830].INT; 4606 IF ABS(CURLIST.MODEFIELD)=102 THEN CURLIST.AUXFIELD.HH.LH:=1000 ELSE 4607 BEGIN Q:=NEWNOAD;MEM[Q+1].HH.RH:=2;MEM[Q+1].HH.LH:=P;P:=Q;END; 4608 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=P; 4609 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END;END; 4610 {:1093}{1095:}PROCEDURE HEADFORVMODE; 4611 BEGIN IF CURLIST.MODEFIELD<0 THEN IF CURCMD<>36 THEN OFFSAVE ELSE BEGIN 4612 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(685);END;PRINTESC(521); 4613 PRINT(1082);BEGIN HELPPTR:=2;HELPLINE[1]:=1083;HELPLINE[0]:=1084;END; 4614 ERROR;END ELSE BEGIN BACKINPUT;CURTOK:=PARTOKEN;BACKINPUT; 4615 CURINPUT.INDEXFIELD:=4;END;END;{:1095}{1096:}PROCEDURE ENDGRAF; 4616 BEGIN IF CURLIST.MODEFIELD=102 THEN BEGIN IF CURLIST.HEADFIELD=CURLIST. 4617 TAILFIELD THEN POPNEST ELSE LINEBREAK(EQTB[5269].INT);NORMALPARAGRAPH; 4618 ERRORCOUNT:=0;END;END;{:1096}{1099:}PROCEDURE BEGININSERTORADJUST; 4619 BEGIN IF CURCMD=38 THEN CURVAL:=255 ELSE BEGIN SCANEIGHTBITINT; 4620 IF CURVAL=255 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 4621 PRINT(1085);END;PRINTESC(330);PRINTINT(255);BEGIN HELPPTR:=1; 4622 HELPLINE[0]:=1086;END;ERROR;CURVAL:=0;END;END; 4623 SAVESTACK[SAVEPTR+0].INT:=CURVAL;SAVEPTR:=SAVEPTR+1;NEWSAVELEVEL(11); 4624 SCANLEFTBRACE;NORMALPARAGRAPH;PUSHNEST;CURLIST.MODEFIELD:=-1; 4625 CURLIST.AUXFIELD.INT:=-65536000;END;{:1099}{1101:}PROCEDURE MAKEMARK; 4626 VAR P:HALFWORD;BEGIN P:=SCANTOKS(FALSE,TRUE);P:=GETNODE(2); 4627 MEM[P].HH.B0:=4;MEM[P].HH.B1:=0;MEM[P+1].INT:=DEFREF; 4628 MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P;END; 4629 {:1101}{1103:}PROCEDURE APPENDPENALTY;BEGIN SCANINT; 4630 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(CURVAL); 4631 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4632 IF CURLIST.MODEFIELD=1 THEN BUILDPAGE;END; 4633 {:1103}{1105:}PROCEDURE DELETELAST;LABEL 10;VAR P,Q:HALFWORD; 4634 M:QUARTERWORD; 4635 BEGIN IF(CURLIST.MODEFIELD=1)AND(CURLIST.TAILFIELD=CURLIST.HEADFIELD) 4636 THEN{1106:}BEGIN IF(CURCHR<>10)OR(LASTGLUE<>65535)THEN BEGIN YOUCANT; 4637 BEGIN HELPPTR:=2;HELPLINE[1]:=1071;HELPLINE[0]:=1087;END; 4638 IF CURCHR=11 THEN HELPLINE[0]:=(1088)ELSE IF CURCHR<>10 THEN HELPLINE[0] 4639 :=(1089);ERROR;END; 4640 END{:1106}ELSE BEGIN IF NOT(CURLIST.TAILFIELD>=HIMEMMIN)THEN IF MEM[ 4641 CURLIST.TAILFIELD].HH.B0=CURCHR THEN BEGIN Q:=CURLIST.HEADFIELD; 4642 REPEAT P:=Q; 4643 IF NOT(Q>=HIMEMMIN)THEN IF MEM[Q].HH.B0=7 THEN BEGIN FOR M:=1 TO MEM[Q]. 4644 HH.B1 DO P:=MEM[P].HH.RH;IF P=CURLIST.TAILFIELD THEN GOTO 10;END; 4645 Q:=MEM[P].HH.RH;UNTIL Q=CURLIST.TAILFIELD;MEM[P].HH.RH:=0; 4646 FLUSHNODELIST(CURLIST.TAILFIELD);CURLIST.TAILFIELD:=P;END;END;10:END; 4647 {:1105}{1110:}PROCEDURE UNPACKAGE;LABEL 10;VAR P:HALFWORD;C:0..1; 4648 BEGIN C:=CURCHR;SCANEIGHTBITINT;P:=EQTB[3678+CURVAL].HH.RH; 4649 IF P=0 THEN GOTO 10; 4650 IF(ABS(CURLIST.MODEFIELD)=203)OR((ABS(CURLIST.MODEFIELD)=1)AND(MEM[P].HH 4651 .B0<>1))OR((ABS(CURLIST.MODEFIELD)=102)AND(MEM[P].HH.B0<>0))THEN BEGIN 4652 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1097);END; 4653 BEGIN HELPPTR:=3;HELPLINE[2]:=1098;HELPLINE[1]:=1099;HELPLINE[0]:=1100; 4654 END;ERROR;GOTO 10;END; 4655 IF C=1 THEN MEM[CURLIST.TAILFIELD].HH.RH:=COPYNODELIST(MEM[P+5].HH.RH) 4656 ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[P+5].HH.RH; 4657 EQTB[3678+CURVAL].HH.RH:=0;FREENODE(P,7);END; 4658 WHILE MEM[CURLIST.TAILFIELD].HH.RH<>0 DO CURLIST.TAILFIELD:=MEM[CURLIST. 4659 TAILFIELD].HH.RH;10:END;{:1110}{1113:}PROCEDURE APPENDITALICCORRECTION; 4660 LABEL 10;VAR P:HALFWORD;F:INTERNALFONTNUMBER; 4661 BEGIN IF CURLIST.TAILFIELD<>CURLIST.HEADFIELD THEN BEGIN IF(CURLIST. 4662 TAILFIELD>=HIMEMMIN)THEN P:=CURLIST.TAILFIELD ELSE IF MEM[CURLIST. 4663 TAILFIELD].HH.B0=6 THEN P:=CURLIST.TAILFIELD+1 ELSE GOTO 10; 4664 F:=MEM[P].HH.B0; 4665 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(FONTINFO[ITALICBASE[F]+( 4666 FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B2-0)DIV 4].INT); 4667 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4668 MEM[CURLIST.TAILFIELD].HH.B1:=1;END;10:END; 4669 {:1113}{1117:}PROCEDURE APPENDDISCRETIONARY;VAR C:INTEGER; 4670 BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWDISC; 4671 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4672 IF CURCHR=1 THEN BEGIN C:=HYPHENCHAR[EQTB[3934].HH.RH]; 4673 IF C>=0 THEN IF C<256 THEN MEM[CURLIST.TAILFIELD+1].HH.LH:=NEWCHARACTER( 4674 EQTB[3934].HH.RH,C);END ELSE BEGIN SAVEPTR:=SAVEPTR+1; 4675 SAVESTACK[SAVEPTR-1].INT:=0;NEWSAVELEVEL(10);SCANLEFTBRACE;PUSHNEST; 4676 CURLIST.MODEFIELD:=-102;CURLIST.AUXFIELD.HH.LH:=1000;END;END; 4677 {:1117}{1119:}PROCEDURE BUILDDISCRETIONARY;LABEL 30,10;VAR P,Q:HALFWORD; 4678 N:INTEGER;BEGIN UNSAVE;{1121:}Q:=CURLIST.HEADFIELD;P:=MEM[Q].HH.RH;N:=0; 4679 WHILE P<>0 DO BEGIN IF NOT(P>=HIMEMMIN)THEN IF MEM[P].HH.B0>2 THEN IF 4680 MEM[P].HH.B0<>11 THEN IF MEM[P].HH.B0<>6 THEN BEGIN BEGIN IF INTERACTION 4681 =3 THEN;PRINTNL(262);PRINT(1107);END;BEGIN HELPPTR:=1;HELPLINE[0]:=1108; 4682 END;ERROR;BEGINDIAGNOSTIC;PRINTNL(1109);SHOWBOX(P);ENDDIAGNOSTIC(TRUE); 4683 FLUSHNODELIST(P);MEM[Q].HH.RH:=0;GOTO 30;END;Q:=P;P:=MEM[Q].HH.RH; 4684 N:=N+1;END;30:{:1121};P:=MEM[CURLIST.HEADFIELD].HH.RH;POPNEST; 4685 CASE SAVESTACK[SAVEPTR-1].INT OF 0:MEM[CURLIST.TAILFIELD+1].HH.LH:=P; 4686 1:MEM[CURLIST.TAILFIELD+1].HH.RH:=P; 4687 2:{1120:}BEGIN IF(N>0)AND(ABS(CURLIST.MODEFIELD)=203)THEN BEGIN BEGIN IF 4688 INTERACTION=3 THEN;PRINTNL(262);PRINT(1101);END;PRINTESC(349); 4689 BEGIN HELPPTR:=2;HELPLINE[1]:=1102;HELPLINE[0]:=1103;END; 4690 FLUSHNODELIST(P);N:=0;ERROR;END ELSE MEM[CURLIST.TAILFIELD].HH.RH:=P; 4691 IF N<=255 THEN MEM[CURLIST.TAILFIELD].HH.B1:=N ELSE BEGIN BEGIN IF 4692 INTERACTION=3 THEN;PRINTNL(262);PRINT(1104);END;BEGIN HELPPTR:=2; 4693 HELPLINE[1]:=1105;HELPLINE[0]:=1106;END;ERROR;END; 4694 IF N>0 THEN CURLIST.TAILFIELD:=Q;SAVEPTR:=SAVEPTR-1;GOTO 10;END{:1120}; 4695 END;SAVESTACK[SAVEPTR-1].INT:=SAVESTACK[SAVEPTR-1].INT+1; 4696 NEWSAVELEVEL(10);SCANLEFTBRACE;PUSHNEST;CURLIST.MODEFIELD:=-102; 4697 CURLIST.AUXFIELD.HH.LH:=1000;10:END;{:1119}{1123:}PROCEDURE MAKEACCENT; 4698 VAR S,T:REAL;P,Q,R:HALFWORD;F:INTERNALFONTNUMBER;A,H,X,W,DELTA:SCALED; 4699 I:FOURQUARTERS;BEGIN SCANCHARNUM;F:=EQTB[3934].HH.RH; 4700 P:=NEWCHARACTER(F,CURVAL); 4701 IF P<>0 THEN BEGIN X:=FONTINFO[5+PARAMBASE[F]].INT; 4702 S:=FONTINFO[1+PARAMBASE[F]].INT/65536.0; 4703 A:=FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B0].INT 4704 ;DOASSIGNMENTS;{1124:}Q:=0;F:=EQTB[3934].HH.RH; 4705 IF(CURCMD=11)OR(CURCMD=12)OR(CURCMD=68)THEN Q:=NEWCHARACTER(F,CURCHR) 4706 ELSE IF CURCMD=16 THEN BEGIN SCANCHARNUM;Q:=NEWCHARACTER(F,CURVAL); 4707 END ELSE BACKINPUT{:1124}; 4708 IF Q<>0 THEN{1125:}BEGIN T:=FONTINFO[1+PARAMBASE[F]].INT/65536.0; 4709 I:=FONTINFO[CHARBASE[F]+MEM[Q].HH.B1].QQQQ; 4710 W:=FONTINFO[WIDTHBASE[F]+I.B0].INT; 4711 H:=FONTINFO[HEIGHTBASE[F]+(I.B1-0)DIV 16].INT; 4712 IF H<>X THEN BEGIN P:=HPACK(P,0,1);MEM[P+4].INT:=X-H;END; 4713 DELTA:=ROUND((W-A)/2.0+H*T-X*S);R:=NEWKERN(DELTA);MEM[R].HH.B1:=2; 4714 MEM[CURLIST.TAILFIELD].HH.RH:=R;MEM[R].HH.RH:=P; 4715 CURLIST.TAILFIELD:=NEWKERN(-A-DELTA);MEM[CURLIST.TAILFIELD].HH.B1:=2; 4716 MEM[P].HH.RH:=CURLIST.TAILFIELD;P:=Q;END{:1125}; 4717 MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P; 4718 CURLIST.AUXFIELD.HH.LH:=1000;END;END;{:1123}{1127:}PROCEDURE ALIGNERROR; 4719 BEGIN IF ABS(ALIGNSTATE)>2 THEN{1128:}BEGIN BEGIN IF INTERACTION=3 THEN; 4720 PRINTNL(262);PRINT(1114);END;PRINTCMDCHR(CURCMD,CURCHR); 4721 IF CURTOK=1062 THEN BEGIN BEGIN HELPPTR:=6;HELPLINE[5]:=1115; 4722 HELPLINE[4]:=1116;HELPLINE[3]:=1117;HELPLINE[2]:=1118;HELPLINE[1]:=1119; 4723 HELPLINE[0]:=1120;END;END ELSE BEGIN BEGIN HELPPTR:=5;HELPLINE[4]:=1115; 4724 HELPLINE[3]:=1121;HELPLINE[2]:=1118;HELPLINE[1]:=1119;HELPLINE[0]:=1120; 4725 END;END;ERROR;END{:1128}ELSE BEGIN BACKINPUT; 4726 IF ALIGNSTATE<0 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 4727 PRINT(657);END;ALIGNSTATE:=ALIGNSTATE+1;CURTOK:=379; 4728 END ELSE BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1110);END; 4729 ALIGNSTATE:=ALIGNSTATE-1;CURTOK:=637;END;BEGIN HELPPTR:=3; 4730 HELPLINE[2]:=1111;HELPLINE[1]:=1112;HELPLINE[0]:=1113;END;INSERROR;END; 4731 END;{:1127}{1129:}PROCEDURE NOALIGNERROR; 4732 BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1114);END; 4733 PRINTESC(527);BEGIN HELPPTR:=2;HELPLINE[1]:=1122;HELPLINE[0]:=1123;END; 4734 ERROR;END;PROCEDURE OMITERROR;BEGIN BEGIN IF INTERACTION=3 THEN; 4735 PRINTNL(262);PRINT(1114);END;PRINTESC(530);BEGIN HELPPTR:=2; 4736 HELPLINE[1]:=1124;HELPLINE[0]:=1123;END;ERROR;END; 4737 {:1129}{1131:}PROCEDURE DOENDV;BEGIN BASEPTR:=INPUTPTR; 4738 INPUTSTACK[BASEPTR]:=CURINPUT; 4739 WHILE(INPUTSTACK[BASEPTR].INDEXFIELD<>2)AND(INPUTSTACK[BASEPTR].LOCFIELD 4740 =0)AND(INPUTSTACK[BASEPTR].STATEFIELD=0)DO BASEPTR:=BASEPTR-1; 4741 IF(INPUTSTACK[BASEPTR].INDEXFIELD<>2)OR(INPUTSTACK[BASEPTR].LOCFIELD<>0) 4742 OR(INPUTSTACK[BASEPTR].STATEFIELD<>0)THEN FATALERROR(595); 4743 IF CURGROUP=6 THEN BEGIN ENDGRAF;IF FINCOL THEN FINROW;END ELSE OFFSAVE; 4744 END;{:1131}{1135:}PROCEDURE CSERROR;BEGIN BEGIN IF INTERACTION=3 THEN; 4745 PRINTNL(262);PRINT(777);END;PRINTESC(505);BEGIN HELPPTR:=1; 4746 HELPLINE[0]:=1126;END;ERROR;END; 4747 {:1135}{1136:}PROCEDURE PUSHMATH(C:GROUPCODE);BEGIN PUSHNEST; 4748 CURLIST.MODEFIELD:=-203;CURLIST.AUXFIELD.INT:=0;NEWSAVELEVEL(C);END; 4749 {:1136}{1138:}PROCEDURE INITMATH;LABEL 21,40,45,30;VAR W:SCALED; 4750 L:SCALED;S:SCALED;P:HALFWORD;Q:HALFWORD;F:INTERNALFONTNUMBER;N:INTEGER; 4751 V:SCALED;D:SCALED;BEGIN GETTOKEN; 4752 IF(CURCMD=3)AND(CURLIST.MODEFIELD>0)THEN{1145:}BEGIN IF CURLIST. 4753 HEADFIELD=CURLIST.TAILFIELD THEN BEGIN POPNEST;W:=-1073741823; 4754 END ELSE BEGIN LINEBREAK(EQTB[5270].INT); 4755 {1146:}V:=MEM[JUSTBOX+4].INT+2*FONTINFO[6+PARAMBASE[EQTB[3934].HH.RH]]. 4756 INT;W:=-1073741823;P:=MEM[JUSTBOX+5].HH.RH; 4757 WHILE P<>0 DO BEGIN{1147:}21:IF(P>=HIMEMMIN)THEN BEGIN F:=MEM[P].HH.B0; 4758 D:=FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B0].INT 4759 ;GOTO 40;END;CASE MEM[P].HH.B0 OF 0,1,2:BEGIN D:=MEM[P+1].INT;GOTO 40; 4760 END;6:{652:}BEGIN MEM[29988]:=MEM[P+1];MEM[29988].HH.RH:=MEM[P].HH.RH; 4761 P:=29988;GOTO 21;END{:652};11,9:D:=MEM[P+1].INT; 4762 10:{1148:}BEGIN Q:=MEM[P+1].HH.LH;D:=MEM[Q+1].INT; 4763 IF MEM[JUSTBOX+5].HH.B0=1 THEN BEGIN IF(MEM[JUSTBOX+5].HH.B1=MEM[Q].HH. 4764 B0)AND(MEM[Q+2].INT<>0)THEN V:=1073741823; 4765 END ELSE IF MEM[JUSTBOX+5].HH.B0=2 THEN BEGIN IF(MEM[JUSTBOX+5].HH.B1= 4766 MEM[Q].HH.B1)AND(MEM[Q+3].INT<>0)THEN V:=1073741823;END; 4767 IF MEM[P].HH.B1>=100 THEN GOTO 40;END{:1148};8:{1361:}D:=0{:1361}; 4768 ELSE D:=0 END{:1147};IF V<1073741823 THEN V:=V+D;GOTO 45; 4769 40:IF V<1073741823 THEN BEGIN V:=V+D;W:=V;END ELSE BEGIN W:=1073741823; 4770 GOTO 30;END;45:P:=MEM[P].HH.RH;END;30:{:1146};END; 4771 {1149:}IF EQTB[3412].HH.RH=0 THEN IF(EQTB[5847].INT<>0)AND(((EQTB[5304]. 4772 INT>=0)AND(CURLIST.PGFIELD+2>EQTB[5304].INT))OR(CURLIST.PGFIELD+1<-EQTB[ 4773 5304].INT))THEN BEGIN L:=EQTB[5833].INT-ABS(EQTB[5847].INT); 4774 IF EQTB[5847].INT>0 THEN S:=EQTB[5847].INT ELSE S:=0; 4775 END ELSE BEGIN L:=EQTB[5833].INT;S:=0; 4776 END ELSE BEGIN N:=MEM[EQTB[3412].HH.RH].HH.LH; 4777 IF CURLIST.PGFIELD+2>=N THEN P:=EQTB[3412].HH.RH+2*N ELSE P:=EQTB[3412]. 4778 HH.RH+2*(CURLIST.PGFIELD+2);S:=MEM[P-1].INT;L:=MEM[P].INT;END{:1149}; 4779 PUSHMATH(15);CURLIST.MODEFIELD:=203;EQWORDDEFINE(5307,-1); 4780 EQWORDDEFINE(5843,W);EQWORDDEFINE(5844,L);EQWORDDEFINE(5845,S); 4781 IF EQTB[3416].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3416].HH.RH,9); 4782 IF NESTPTR=1 THEN BUILDPAGE;END{:1145}ELSE BEGIN BACKINPUT; 4783 {1139:}BEGIN PUSHMATH(15);EQWORDDEFINE(5307,-1); 4784 IF EQTB[3415].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3415].HH.RH,8); 4785 END{:1139};END;END;{:1138}{1142:}PROCEDURE STARTEQNO; 4786 BEGIN SAVESTACK[SAVEPTR+0].INT:=CURCHR;SAVEPTR:=SAVEPTR+1; 4787 {1139:}BEGIN PUSHMATH(15);EQWORDDEFINE(5307,-1); 4788 IF EQTB[3415].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3415].HH.RH,8); 4789 END{:1139};END;{:1142}{1151:}PROCEDURE SCANMATH(P:HALFWORD); 4790 LABEL 20,21,10;VAR C:INTEGER;BEGIN 20:{404:}REPEAT GETXTOKEN; 4791 UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; 4792 21:CASE CURCMD OF 11,12,68:BEGIN C:=EQTB[5007+CURCHR].HH.RH-0; 4793 IF C=32768 THEN BEGIN{1152:}BEGIN CURCS:=CURCHR+1; 4794 CURCMD:=EQTB[CURCS].HH.B0;CURCHR:=EQTB[CURCS].HH.RH;XTOKEN;BACKINPUT; 4795 END{:1152};GOTO 20;END;END;16:BEGIN SCANCHARNUM;CURCHR:=CURVAL; 4796 CURCMD:=68;GOTO 21;END;17:BEGIN SCANFIFTEENBITINT;C:=CURVAL;END; 4797 69:C:=CURCHR;15:BEGIN SCANTWENTYSEVENBITINT;C:=CURVAL DIV 4096;END; 4798 ELSE{1153:}BEGIN BACKINPUT;SCANLEFTBRACE;SAVESTACK[SAVEPTR+0].INT:=P; 4799 SAVEPTR:=SAVEPTR+1;PUSHMATH(9);GOTO 10;END{:1153}END;MEM[P].HH.RH:=1; 4800 MEM[P].HH.B1:=C MOD 256+0; 4801 IF(C>=28672)AND((EQTB[5307].INT>=0)AND(EQTB[5307].INT<16))THEN MEM[P].HH 4802 .B0:=EQTB[5307].INT ELSE MEM[P].HH.B0:=(C DIV 256)MOD 16;10:END; 4803 {:1151}{1155:}PROCEDURE SETMATHCHAR(C:INTEGER);VAR P:HALFWORD; 4804 BEGIN IF C>=32768 THEN{1152:}BEGIN CURCS:=CURCHR+1; 4805 CURCMD:=EQTB[CURCS].HH.B0;CURCHR:=EQTB[CURCS].HH.RH;XTOKEN;BACKINPUT; 4806 END{:1152}ELSE BEGIN P:=NEWNOAD;MEM[P+1].HH.RH:=1; 4807 MEM[P+1].HH.B1:=C MOD 256+0;MEM[P+1].HH.B0:=(C DIV 256)MOD 16; 4808 IF C>=28672 THEN BEGIN IF((EQTB[5307].INT>=0)AND(EQTB[5307].INT<16))THEN 4809 MEM[P+1].HH.B0:=EQTB[5307].INT;MEM[P].HH.B0:=16; 4810 END ELSE MEM[P].HH.B0:=16+(C DIV 4096);MEM[CURLIST.TAILFIELD].HH.RH:=P; 4811 CURLIST.TAILFIELD:=P;END;END;{:1155}{1159:}PROCEDURE MATHLIMITSWITCH; 4812 LABEL 10; 4813 BEGIN IF CURLIST.HEADFIELD<>CURLIST.TAILFIELD THEN IF MEM[CURLIST. 4814 TAILFIELD].HH.B0=17 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.B1:=CURCHR; 4815 GOTO 10;END;BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1130);END; 4816 BEGIN HELPPTR:=1;HELPLINE[0]:=1131;END;ERROR;10:END; 4817 {:1159}{1160:}PROCEDURE SCANDELIMITER(P:HALFWORD;R:BOOLEAN); 4818 BEGIN IF R THEN SCANTWENTYSEVENBITINT ELSE BEGIN{404:}REPEAT GETXTOKEN; 4819 UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; 4820 CASE CURCMD OF 11,12:CURVAL:=EQTB[5574+CURCHR].INT; 4821 15:SCANTWENTYSEVENBITINT;ELSE CURVAL:=-1 END;END; 4822 IF CURVAL<0 THEN{1161:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 4823 PRINT(1132);END;BEGIN HELPPTR:=6;HELPLINE[5]:=1133;HELPLINE[4]:=1134; 4824 HELPLINE[3]:=1135;HELPLINE[2]:=1136;HELPLINE[1]:=1137;HELPLINE[0]:=1138; 4825 END;BACKERROR;CURVAL:=0;END{:1161}; 4826 MEM[P].QQQQ.B0:=(CURVAL DIV 1048576)MOD 16; 4827 MEM[P].QQQQ.B1:=(CURVAL DIV 4096)MOD 256+0; 4828 MEM[P].QQQQ.B2:=(CURVAL DIV 256)MOD 16;MEM[P].QQQQ.B3:=CURVAL MOD 256+0; 4829 END;{:1160}{1163:}PROCEDURE MATHRADICAL; 4830 BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=GETNODE(5); 4831 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4832 MEM[CURLIST.TAILFIELD].HH.B0:=24;MEM[CURLIST.TAILFIELD].HH.B1:=0; 4833 MEM[CURLIST.TAILFIELD+1].HH:=EMPTYFIELD; 4834 MEM[CURLIST.TAILFIELD+3].HH:=EMPTYFIELD; 4835 MEM[CURLIST.TAILFIELD+2].HH:=EMPTYFIELD; 4836 SCANDELIMITER(CURLIST.TAILFIELD+4,TRUE);SCANMATH(CURLIST.TAILFIELD+1); 4837 END;{:1163}{1165:}PROCEDURE MATHAC; 4838 BEGIN IF CURCMD=45 THEN{1166:}BEGIN BEGIN IF INTERACTION=3 THEN; 4839 PRINTNL(262);PRINT(1139);END;PRINTESC(523);PRINT(1140);BEGIN HELPPTR:=2; 4840 HELPLINE[1]:=1141;HELPLINE[0]:=1142;END;ERROR;END{:1166}; 4841 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=GETNODE(5); 4842 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4843 MEM[CURLIST.TAILFIELD].HH.B0:=28;MEM[CURLIST.TAILFIELD].HH.B1:=0; 4844 MEM[CURLIST.TAILFIELD+1].HH:=EMPTYFIELD; 4845 MEM[CURLIST.TAILFIELD+3].HH:=EMPTYFIELD; 4846 MEM[CURLIST.TAILFIELD+2].HH:=EMPTYFIELD; 4847 MEM[CURLIST.TAILFIELD+4].HH.RH:=1;SCANFIFTEENBITINT; 4848 MEM[CURLIST.TAILFIELD+4].HH.B1:=CURVAL MOD 256+0; 4849 IF(CURVAL>=28672)AND((EQTB[5307].INT>=0)AND(EQTB[5307].INT<16))THEN MEM[ 4850 CURLIST.TAILFIELD+4].HH.B0:=EQTB[5307].INT ELSE MEM[CURLIST.TAILFIELD+4] 4851 .HH.B0:=(CURVAL DIV 256)MOD 16;SCANMATH(CURLIST.TAILFIELD+1);END; 4852 {:1165}{1172:}PROCEDURE APPENDCHOICES; 4853 BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWCHOICE; 4854 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;SAVEPTR:=SAVEPTR+1; 4855 SAVESTACK[SAVEPTR-1].INT:=0;PUSHMATH(13);SCANLEFTBRACE;END; 4856 {:1172}{1174:}{1184:}FUNCTION FINMLIST(P:HALFWORD):HALFWORD; 4857 VAR Q:HALFWORD; 4858 BEGIN IF CURLIST.AUXFIELD.INT<>0 THEN{1185:}BEGIN MEM[CURLIST.AUXFIELD. 4859 INT+3].HH.RH:=3; 4860 MEM[CURLIST.AUXFIELD.INT+3].HH.LH:=MEM[CURLIST.HEADFIELD].HH.RH; 4861 IF P=0 THEN Q:=CURLIST.AUXFIELD.INT ELSE BEGIN Q:=MEM[CURLIST.AUXFIELD. 4862 INT+2].HH.LH;IF MEM[Q].HH.B0<>30 THEN CONFUSION(877); 4863 MEM[CURLIST.AUXFIELD.INT+2].HH.LH:=MEM[Q].HH.RH; 4864 MEM[Q].HH.RH:=CURLIST.AUXFIELD.INT;MEM[CURLIST.AUXFIELD.INT].HH.RH:=P; 4865 END;END{:1185}ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=P; 4866 Q:=MEM[CURLIST.HEADFIELD].HH.RH;END;POPNEST;FINMLIST:=Q;END; 4867 {:1184}PROCEDURE BUILDCHOICES;LABEL 10;VAR P:HALFWORD;BEGIN UNSAVE; 4868 P:=FINMLIST(0); 4869 CASE SAVESTACK[SAVEPTR-1].INT OF 0:MEM[CURLIST.TAILFIELD+1].HH.LH:=P; 4870 1:MEM[CURLIST.TAILFIELD+1].HH.RH:=P;2:MEM[CURLIST.TAILFIELD+2].HH.LH:=P; 4871 3:BEGIN MEM[CURLIST.TAILFIELD+2].HH.RH:=P;SAVEPTR:=SAVEPTR-1;GOTO 10; 4872 END;END;SAVESTACK[SAVEPTR-1].INT:=SAVESTACK[SAVEPTR-1].INT+1; 4873 PUSHMATH(13);SCANLEFTBRACE;10:END;{:1174}{1176:}PROCEDURE SUBSUP; 4874 VAR T:SMALLNUMBER;P:HALFWORD;BEGIN T:=0;P:=0; 4875 IF CURLIST.TAILFIELD<>CURLIST.HEADFIELD THEN IF(MEM[CURLIST.TAILFIELD]. 4876 HH.B0>=16)AND(MEM[CURLIST.TAILFIELD].HH.B0<30)THEN BEGIN P:=CURLIST. 4877 TAILFIELD+2+CURCMD-7;T:=MEM[P].HH.RH;END; 4878 IF(P=0)OR(T<>0)THEN{1177:}BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:= 4879 NEWNOAD;CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4880 P:=CURLIST.TAILFIELD+2+CURCMD-7; 4881 IF T<>0 THEN BEGIN IF CURCMD=7 THEN BEGIN BEGIN IF INTERACTION=3 THEN; 4882 PRINTNL(262);PRINT(1143);END;BEGIN HELPPTR:=1;HELPLINE[0]:=1144;END; 4883 END ELSE BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1145);END; 4884 BEGIN HELPPTR:=1;HELPLINE[0]:=1146;END;END;ERROR;END;END{:1177}; 4885 SCANMATH(P);END;{:1176}{1181:}PROCEDURE MATHFRACTION;VAR C:SMALLNUMBER; 4886 BEGIN C:=CURCHR; 4887 IF CURLIST.AUXFIELD.INT<>0 THEN{1183:}BEGIN IF C>=3 THEN BEGIN 4888 SCANDELIMITER(29988,FALSE);SCANDELIMITER(29988,FALSE);END; 4889 IF C MOD 3=0 THEN SCANDIMEN(FALSE,FALSE,FALSE); 4890 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1153);END; 4891 BEGIN HELPPTR:=3;HELPLINE[2]:=1154;HELPLINE[1]:=1155;HELPLINE[0]:=1156; 4892 END;ERROR;END{:1183}ELSE BEGIN CURLIST.AUXFIELD.INT:=GETNODE(6); 4893 MEM[CURLIST.AUXFIELD.INT].HH.B0:=25;MEM[CURLIST.AUXFIELD.INT].HH.B1:=0; 4894 MEM[CURLIST.AUXFIELD.INT+2].HH.RH:=3; 4895 MEM[CURLIST.AUXFIELD.INT+2].HH.LH:=MEM[CURLIST.HEADFIELD].HH.RH; 4896 MEM[CURLIST.AUXFIELD.INT+3].HH:=EMPTYFIELD; 4897 MEM[CURLIST.AUXFIELD.INT+4].QQQQ:=NULLDELIMITER; 4898 MEM[CURLIST.AUXFIELD.INT+5].QQQQ:=NULLDELIMITER; 4899 MEM[CURLIST.HEADFIELD].HH.RH:=0;CURLIST.TAILFIELD:=CURLIST.HEADFIELD; 4900 {1182:}IF C>=3 THEN BEGIN SCANDELIMITER(CURLIST.AUXFIELD.INT+4,FALSE); 4901 SCANDELIMITER(CURLIST.AUXFIELD.INT+5,FALSE);END; 4902 CASE C MOD 3 OF 0:BEGIN SCANDIMEN(FALSE,FALSE,FALSE); 4903 MEM[CURLIST.AUXFIELD.INT+1].INT:=CURVAL;END; 4904 1:MEM[CURLIST.AUXFIELD.INT+1].INT:=1073741824; 4905 2:MEM[CURLIST.AUXFIELD.INT+1].INT:=0;END{:1182};END;END; 4906 {:1181}{1191:}PROCEDURE MATHLEFTRIGHT;VAR T:SMALLNUMBER;P:HALFWORD; 4907 BEGIN T:=CURCHR; 4908 IF(T=31)AND(CURGROUP<>16)THEN{1192:}BEGIN IF CURGROUP=15 THEN BEGIN 4909 SCANDELIMITER(29988,FALSE);BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 4910 PRINT(777);END;PRINTESC(877);BEGIN HELPPTR:=1;HELPLINE[0]:=1157;END; 4911 ERROR;END ELSE OFFSAVE;END{:1192}ELSE BEGIN P:=NEWNOAD;MEM[P].HH.B0:=T; 4912 SCANDELIMITER(P+1,FALSE);IF T=30 THEN BEGIN PUSHMATH(16); 4913 MEM[CURLIST.HEADFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P; 4914 END ELSE BEGIN P:=FINMLIST(P);UNSAVE; 4915 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD; 4916 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4917 MEM[CURLIST.TAILFIELD].HH.B0:=23;MEM[CURLIST.TAILFIELD+1].HH.RH:=3; 4918 MEM[CURLIST.TAILFIELD+1].HH.LH:=P;END;END;END; 4919 {:1191}{1194:}PROCEDURE AFTERMATH;VAR L:BOOLEAN;DANGER:BOOLEAN; 4920 M:INTEGER;P:HALFWORD;A:HALFWORD;{1198:}B:HALFWORD;W:SCALED;Z:SCALED; 4921 E:SCALED;Q:SCALED;D:SCALED;S:SCALED;G1,G2:SMALLNUMBER;R:HALFWORD; 4922 T:HALFWORD;{:1198}BEGIN DANGER:=FALSE; 4923 {1195:}IF(FONTPARAMS[EQTB[3937].HH.RH]<22)OR(FONTPARAMS[EQTB[3953].HH.RH 4924 ]<22)OR(FONTPARAMS[EQTB[3969].HH.RH]<22)THEN BEGIN BEGIN IF INTERACTION= 4925 3 THEN;PRINTNL(262);PRINT(1158);END;BEGIN HELPPTR:=3;HELPLINE[2]:=1159; 4926 HELPLINE[1]:=1160;HELPLINE[0]:=1161;END;ERROR;FLUSHMATH;DANGER:=TRUE; 4927 END ELSE IF(FONTPARAMS[EQTB[3938].HH.RH]<13)OR(FONTPARAMS[EQTB[3954].HH. 4928 RH]<13)OR(FONTPARAMS[EQTB[3970].HH.RH]<13)THEN BEGIN BEGIN IF 4929 INTERACTION=3 THEN;PRINTNL(262);PRINT(1162);END;BEGIN HELPPTR:=3; 4930 HELPLINE[2]:=1163;HELPLINE[1]:=1164;HELPLINE[0]:=1165;END;ERROR; 4931 FLUSHMATH;DANGER:=TRUE;END{:1195};M:=CURLIST.MODEFIELD;L:=FALSE; 4932 P:=FINMLIST(0);IF CURLIST.MODEFIELD=-M THEN BEGIN{1197:}BEGIN GETXTOKEN; 4933 IF CURCMD<>3 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 4934 PRINT(1166);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1167;HELPLINE[0]:=1168; 4935 END;BACKERROR;END;END{:1197};CURMLIST:=P;CURSTYLE:=2; 4936 MLISTPENALTIES:=FALSE;MLISTTOHLIST;A:=HPACK(MEM[29997].HH.RH,0,1); 4937 UNSAVE;SAVEPTR:=SAVEPTR-1;IF SAVESTACK[SAVEPTR+0].INT=1 THEN L:=TRUE; 4938 DANGER:=FALSE; 4939 {1195:}IF(FONTPARAMS[EQTB[3937].HH.RH]<22)OR(FONTPARAMS[EQTB[3953].HH.RH 4940 ]<22)OR(FONTPARAMS[EQTB[3969].HH.RH]<22)THEN BEGIN BEGIN IF INTERACTION= 4941 3 THEN;PRINTNL(262);PRINT(1158);END;BEGIN HELPPTR:=3;HELPLINE[2]:=1159; 4942 HELPLINE[1]:=1160;HELPLINE[0]:=1161;END;ERROR;FLUSHMATH;DANGER:=TRUE; 4943 END ELSE IF(FONTPARAMS[EQTB[3938].HH.RH]<13)OR(FONTPARAMS[EQTB[3954].HH. 4944 RH]<13)OR(FONTPARAMS[EQTB[3970].HH.RH]<13)THEN BEGIN BEGIN IF 4945 INTERACTION=3 THEN;PRINTNL(262);PRINT(1162);END;BEGIN HELPPTR:=3; 4946 HELPLINE[2]:=1163;HELPLINE[1]:=1164;HELPLINE[0]:=1165;END;ERROR; 4947 FLUSHMATH;DANGER:=TRUE;END{:1195};M:=CURLIST.MODEFIELD;P:=FINMLIST(0); 4948 END ELSE A:=0; 4949 IF M<0 THEN{1196:}BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWMATH(EQTB 4950 [5831].INT,0);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4951 CURMLIST:=P;CURSTYLE:=2;MLISTPENALTIES:=(CURLIST.MODEFIELD>0); 4952 MLISTTOHLIST;MEM[CURLIST.TAILFIELD].HH.RH:=MEM[29997].HH.RH; 4953 WHILE MEM[CURLIST.TAILFIELD].HH.RH<>0 DO CURLIST.TAILFIELD:=MEM[CURLIST. 4954 TAILFIELD].HH.RH; 4955 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWMATH(EQTB[5831].INT,1); 4956 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4957 CURLIST.AUXFIELD.HH.LH:=1000;UNSAVE; 4958 END{:1196}ELSE BEGIN IF A=0 THEN{1197:}BEGIN GETXTOKEN; 4959 IF CURCMD<>3 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 4960 PRINT(1166);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1167;HELPLINE[0]:=1168; 4961 END;BACKERROR;END;END{:1197};{1199:}CURMLIST:=P;CURSTYLE:=0; 4962 MLISTPENALTIES:=FALSE;MLISTTOHLIST;P:=MEM[29997].HH.RH; 4963 ADJUSTTAIL:=29995;B:=HPACK(P,0,1);P:=MEM[B+5].HH.RH;T:=ADJUSTTAIL; 4964 ADJUSTTAIL:=0;W:=MEM[B+1].INT;Z:=EQTB[5844].INT;S:=EQTB[5845].INT; 4965 IF(A=0)OR DANGER THEN BEGIN E:=0;Q:=0;END ELSE BEGIN E:=MEM[A+1].INT; 4966 Q:=E+FONTINFO[6+PARAMBASE[EQTB[3937].HH.RH]].INT;END; 4967 IF W+Q>Z THEN{1201:}BEGIN IF(E<>0)AND((W-TOTALSHRINK[0]+Q<=Z)OR( 4968 TOTALSHRINK[1]<>0)OR(TOTALSHRINK[2]<>0)OR(TOTALSHRINK[3]<>0))THEN BEGIN 4969 FREENODE(B,7);B:=HPACK(P,Z-Q,0);END ELSE BEGIN E:=0; 4970 IF W>Z THEN BEGIN FREENODE(B,7);B:=HPACK(P,Z,0);END;END;W:=MEM[B+1].INT; 4971 END{:1201};{1202:}D:=HALF(Z-W); 4972 IF(E>0)AND(D<2*E)THEN BEGIN D:=HALF(Z-W-E); 4973 IF P<>0 THEN IF NOT(P>=HIMEMMIN)THEN IF MEM[P].HH.B0=10 THEN D:=0; 4974 END{:1202}; 4975 {1203:}BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[5274].INT); 4976 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4977 IF(D+S<=EQTB[5843].INT)OR L THEN BEGIN G1:=3;G2:=4;END ELSE BEGIN G1:=5; 4978 G2:=6;END;IF L AND(E=0)THEN BEGIN MEM[A+4].INT:=S;APPENDTOVLIST(A); 4979 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(10000); 4980 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4981 END ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(G1); 4982 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END{:1203}; 4983 {1204:}IF E<>0 THEN BEGIN R:=NEWKERN(Z-W-E-D); 4984 IF L THEN BEGIN MEM[A].HH.RH:=R;MEM[R].HH.RH:=B;B:=A;D:=0; 4985 END ELSE BEGIN MEM[B].HH.RH:=R;MEM[R].HH.RH:=A;END;B:=HPACK(B,0,1);END; 4986 MEM[B+4].INT:=S+D;APPENDTOVLIST(B){:1204}; 4987 {1205:}IF(A<>0)AND(E=0)AND NOT L THEN BEGIN BEGIN MEM[CURLIST.TAILFIELD] 4988 .HH.RH:=NEWPENALTY(10000); 4989 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4990 MEM[A+4].INT:=S+Z-MEM[A+1].INT;APPENDTOVLIST(A);G2:=0;END; 4991 IF T<>29995 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[29995].HH.RH; 4992 CURLIST.TAILFIELD:=T;END; 4993 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[5275].INT); 4994 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 4995 IF G2>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(G2); 4996 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END{:1205}; 4997 RESUMEAFTERDISPLAY{:1199};END;END; 4998 {:1194}{1200:}PROCEDURE RESUMEAFTERDISPLAY; 4999 BEGIN IF CURGROUP<>15 THEN CONFUSION(1169);UNSAVE; 5000 CURLIST.PGFIELD:=CURLIST.PGFIELD+3;PUSHNEST;CURLIST.MODEFIELD:=102; 5001 CURLIST.AUXFIELD.HH.LH:=1000; 5002 IF EQTB[5313].INT<=0 THEN CURLANG:=0 ELSE IF EQTB[5313].INT>255 THEN 5003 CURLANG:=0 ELSE CURLANG:=EQTB[5313].INT;CURLIST.AUXFIELD.HH.RH:=CURLANG; 5004 CURLIST.PGFIELD:=(NORMMIN(EQTB[5314].INT)*64+NORMMIN(EQTB[5315].INT)) 5005 *65536+CURLANG;{443:}BEGIN GETXTOKEN;IF CURCMD<>10 THEN BACKINPUT; 5006 END{:443};IF NESTPTR=1 THEN BUILDPAGE;END; 5007 {:1200}{1211:}{1215:}PROCEDURE GETRTOKEN;LABEL 20; 5008 BEGIN 20:REPEAT GETTOKEN;UNTIL CURTOK<>2592; 5009 IF(CURCS=0)OR(CURCS>2614)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 5010 PRINTNL(262);PRINT(1184);END;BEGIN HELPPTR:=5;HELPLINE[4]:=1185; 5011 HELPLINE[3]:=1186;HELPLINE[2]:=1187;HELPLINE[1]:=1188;HELPLINE[0]:=1189; 5012 END;IF CURCS=0 THEN BACKINPUT;CURTOK:=6709;INSERROR;GOTO 20;END;END; 5013 {:1215}{1229:}PROCEDURE TRAPZEROGLUE; 5014 BEGIN IF(MEM[CURVAL+1].INT=0)AND(MEM[CURVAL+2].INT=0)AND(MEM[CURVAL+3]. 5015 INT=0)THEN BEGIN MEM[0].HH.RH:=MEM[0].HH.RH+1;DELETEGLUEREF(CURVAL); 5016 CURVAL:=0;END;END; 5017 {:1229}{1236:}PROCEDURE DOREGISTERCOMMAND(A:SMALLNUMBER);LABEL 40,10; 5018 VAR L,Q,R,S:HALFWORD;P:0..3;BEGIN Q:=CURCMD; 5019 {1237:}BEGIN IF Q<>89 THEN BEGIN GETXTOKEN; 5020 IF(CURCMD>=73)AND(CURCMD<=76)THEN BEGIN L:=CURCHR;P:=CURCMD-73;GOTO 40; 5021 END;IF CURCMD<>89 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 5022 PRINT(685);END;PRINTCMDCHR(CURCMD,CURCHR);PRINT(686);PRINTCMDCHR(Q,0); 5023 BEGIN HELPPTR:=1;HELPLINE[0]:=1210;END;ERROR;GOTO 10;END;END;P:=CURCHR; 5024 SCANEIGHTBITINT;CASE P OF 0:L:=CURVAL+5318;1:L:=CURVAL+5851; 5025 2:L:=CURVAL+2900;3:L:=CURVAL+3156;END;END;40:{:1237}; 5026 IF Q=89 THEN SCANOPTIONALEQUALS ELSE IF SCANKEYWORD(1206)THEN; 5027 ARITHERROR:=FALSE; 5028 IF Q<91 THEN{1238:}IF P<2 THEN BEGIN IF P=0 THEN SCANINT ELSE SCANDIMEN( 5029 FALSE,FALSE,FALSE);IF Q=90 THEN CURVAL:=CURVAL+EQTB[L].INT; 5030 END ELSE BEGIN SCANGLUE(P);IF Q=90 THEN{1239:}BEGIN Q:=NEWSPEC(CURVAL); 5031 R:=EQTB[L].HH.RH;DELETEGLUEREF(CURVAL); 5032 MEM[Q+1].INT:=MEM[Q+1].INT+MEM[R+1].INT; 5033 IF MEM[Q+2].INT=0 THEN MEM[Q].HH.B0:=0; 5034 IF MEM[Q].HH.B0=MEM[R].HH.B0 THEN MEM[Q+2].INT:=MEM[Q+2].INT+MEM[R+2]. 5035 INT ELSE IF(MEM[Q].HH.B0<MEM[R].HH.B0)AND(MEM[R+2].INT<>0)THEN BEGIN MEM 5036 [Q+2].INT:=MEM[R+2].INT;MEM[Q].HH.B0:=MEM[R].HH.B0;END; 5037 IF MEM[Q+3].INT=0 THEN MEM[Q].HH.B1:=0; 5038 IF MEM[Q].HH.B1=MEM[R].HH.B1 THEN MEM[Q+3].INT:=MEM[Q+3].INT+MEM[R+3]. 5039 INT ELSE IF(MEM[Q].HH.B1<MEM[R].HH.B1)AND(MEM[R+3].INT<>0)THEN BEGIN MEM 5040 [Q+3].INT:=MEM[R+3].INT;MEM[Q].HH.B1:=MEM[R].HH.B1;END;CURVAL:=Q; 5041 END{:1239};END{:1238}ELSE{1240:}BEGIN SCANINT; 5042 IF P<2 THEN IF Q=91 THEN IF P=0 THEN CURVAL:=MULTANDADD(EQTB[L].INT, 5043 CURVAL,0,2147483647)ELSE CURVAL:=MULTANDADD(EQTB[L].INT,CURVAL,0, 5044 1073741823)ELSE CURVAL:=XOVERN(EQTB[L].INT,CURVAL)ELSE BEGIN S:=EQTB[L]. 5045 HH.RH;R:=NEWSPEC(S); 5046 IF Q=91 THEN BEGIN MEM[R+1].INT:=MULTANDADD(MEM[S+1].INT,CURVAL,0, 5047 1073741823);MEM[R+2].INT:=MULTANDADD(MEM[S+2].INT,CURVAL,0,1073741823); 5048 MEM[R+3].INT:=MULTANDADD(MEM[S+3].INT,CURVAL,0,1073741823); 5049 END ELSE BEGIN MEM[R+1].INT:=XOVERN(MEM[S+1].INT,CURVAL); 5050 MEM[R+2].INT:=XOVERN(MEM[S+2].INT,CURVAL); 5051 MEM[R+3].INT:=XOVERN(MEM[S+3].INT,CURVAL);END;CURVAL:=R;END;END{:1240}; 5052 IF ARITHERROR THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 5053 PRINT(1207);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1208;HELPLINE[0]:=1209; 5054 END;IF P>=2 THEN DELETEGLUEREF(CURVAL);ERROR;GOTO 10;END; 5055 IF P<2 THEN IF(A>=4)THEN GEQWORDDEFINE(L,CURVAL)ELSE EQWORDDEFINE(L, 5056 CURVAL)ELSE BEGIN TRAPZEROGLUE; 5057 IF(A>=4)THEN GEQDEFINE(L,117,CURVAL)ELSE EQDEFINE(L,117,CURVAL);END; 5058 10:END;{:1236}{1243:}PROCEDURE ALTERAUX;VAR C:HALFWORD; 5059 BEGIN IF CURCHR<>ABS(CURLIST.MODEFIELD)THEN REPORTILLEGALCASE ELSE BEGIN 5060 C:=CURCHR;SCANOPTIONALEQUALS; 5061 IF C=1 THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE); 5062 CURLIST.AUXFIELD.INT:=CURVAL;END ELSE BEGIN SCANINT; 5063 IF(CURVAL<=0)OR(CURVAL>32767)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 5064 PRINTNL(262);PRINT(1213);END;BEGIN HELPPTR:=1;HELPLINE[0]:=1214;END; 5065 INTERROR(CURVAL);END ELSE CURLIST.AUXFIELD.HH.LH:=CURVAL;END;END;END; 5066 {:1243}{1244:}PROCEDURE ALTERPREVGRAF;VAR P:0..NESTSIZE; 5067 BEGIN NEST[NESTPTR]:=CURLIST;P:=NESTPTR; 5068 WHILE ABS(NEST[P].MODEFIELD)<>1 DO P:=P-1;SCANOPTIONALEQUALS;SCANINT; 5069 IF CURVAL<0 THEN BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 5070 PRINT(955);END;PRINTESC(532);BEGIN HELPPTR:=1;HELPLINE[0]:=1215;END; 5071 INTERROR(CURVAL);END ELSE BEGIN NEST[P].PGFIELD:=CURVAL; 5072 CURLIST:=NEST[NESTPTR];END;END;{:1244}{1245:}PROCEDURE ALTERPAGESOFAR; 5073 VAR C:0..7;BEGIN C:=CURCHR;SCANOPTIONALEQUALS; 5074 SCANDIMEN(FALSE,FALSE,FALSE);PAGESOFAR[C]:=CURVAL;END; 5075 {:1245}{1246:}PROCEDURE ALTERINTEGER;VAR C:0..1;BEGIN C:=CURCHR; 5076 SCANOPTIONALEQUALS;SCANINT; 5077 IF C=0 THEN DEADCYCLES:=CURVAL ELSE INSERTPENALTIES:=CURVAL;END; 5078 {:1246}{1247:}PROCEDURE ALTERBOXDIMEN;VAR C:SMALLNUMBER;B:EIGHTBITS; 5079 BEGIN C:=CURCHR;SCANEIGHTBITINT;B:=CURVAL;SCANOPTIONALEQUALS; 5080 SCANDIMEN(FALSE,FALSE,FALSE); 5081 IF EQTB[3678+B].HH.RH<>0 THEN MEM[EQTB[3678+B].HH.RH+C].INT:=CURVAL;END; 5082 {:1247}{1257:}PROCEDURE NEWFONT(A:SMALLNUMBER);LABEL 50;VAR U:HALFWORD; 5083 S:SCALED;F:INTERNALFONTNUMBER;T:STRNUMBER;OLDSETTING:0..21; 5084 FLUSHABLESTRING:STRNUMBER;BEGIN IF JOBNAME=0 THEN OPENLOGFILE;GETRTOKEN; 5085 U:=CURCS; 5086 IF U>=514 THEN T:=HASH[U].RH ELSE IF U>=257 THEN IF U=513 THEN T:=1219 5087 ELSE T:=U-257 ELSE BEGIN OLDSETTING:=SELECTOR;SELECTOR:=21;PRINT(1219); 5088 PRINT(U-1);SELECTOR:=OLDSETTING; 5089 BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(257,POOLSIZE-INITPOOLPTR);END; 5090 T:=MAKESTRING;END;IF(A>=4)THEN GEQDEFINE(U,87,0)ELSE EQDEFINE(U,87,0); 5091 SCANOPTIONALEQUALS;SCANFILENAME;{1258:}NAMEINPROGRESS:=TRUE; 5092 IF SCANKEYWORD(1220)THEN{1259:}BEGIN SCANDIMEN(FALSE,FALSE,FALSE); 5093 S:=CURVAL; 5094 IF(S<=0)OR(S>=134217728)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 5095 PRINTNL(262);PRINT(1222);END;PRINTSCALED(S);PRINT(1223); 5096 BEGIN HELPPTR:=2;HELPLINE[1]:=1224;HELPLINE[0]:=1225;END;ERROR; 5097 S:=10*65536;END;END{:1259}ELSE IF SCANKEYWORD(1221)THEN BEGIN SCANINT; 5098 S:=-CURVAL; 5099 IF(CURVAL<=0)OR(CURVAL>32768)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 5100 PRINTNL(262);PRINT(552);END;BEGIN HELPPTR:=1;HELPLINE[0]:=553;END; 5101 INTERROR(CURVAL);S:=-1000;END;END ELSE S:=-1000; 5102 NAMEINPROGRESS:=FALSE{:1258};{1260:}FLUSHABLESTRING:=STRPTR-1; 5103 FOR F:=1 TO FONTPTR DO IF STREQSTR(FONTNAME[F],CURNAME)AND STREQSTR( 5104 FONTAREA[F],CURAREA)THEN BEGIN IF CURNAME=FLUSHABLESTRING THEN BEGIN 5105 BEGIN STRPTR:=STRPTR-1;POOLPTR:=STRSTART[STRPTR];END; 5106 CURNAME:=FONTNAME[F];END;IF S>0 THEN BEGIN IF S=FONTSIZE[F]THEN GOTO 50; 5107 END ELSE IF FONTSIZE[F]=XNOVERD(FONTDSIZE[F],-S,1000)THEN GOTO 50; 5108 END{:1260};F:=READFONTINFO(U,CURNAME,CURAREA,S);50:EQTB[U].HH.RH:=F; 5109 EQTB[2624+F]:=EQTB[U];HASH[2624+F].RH:=T;END; 5110 {:1257}{1265:}PROCEDURE NEWINTERACTION;BEGIN PRINTLN; 5111 INTERACTION:=CURCHR; 5112 {75:}IF INTERACTION=0 THEN SELECTOR:=16 ELSE SELECTOR:=17{:75}; 5113 IF LOGOPENED THEN SELECTOR:=SELECTOR+2;END; 5114 {:1265}PROCEDURE PREFIXEDCOMMAND;LABEL 30,10;VAR A:SMALLNUMBER; 5115 F:INTERNALFONTNUMBER;J:HALFWORD;K:FONTINDEX;P,Q:HALFWORD;N:INTEGER; 5116 E:BOOLEAN;BEGIN A:=0; 5117 WHILE CURCMD=93 DO BEGIN IF NOT ODD(A DIV CURCHR)THEN A:=A+CURCHR; 5118 {404:}REPEAT GETXTOKEN;UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; 5119 IF CURCMD<=70 THEN{1212:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 5120 PRINT(1179);END;PRINTCMDCHR(CURCMD,CURCHR);PRINTCHAR(39); 5121 BEGIN HELPPTR:=1;HELPLINE[0]:=1180;END;BACKERROR;GOTO 10;END{:1212};END; 5122 {1213:}IF(CURCMD<>97)AND(A MOD 4<>0)THEN BEGIN BEGIN IF INTERACTION=3 5123 THEN;PRINTNL(262);PRINT(685);END;PRINTESC(1171);PRINT(1181); 5124 PRINTESC(1172);PRINT(1182);PRINTCMDCHR(CURCMD,CURCHR);PRINTCHAR(39); 5125 BEGIN HELPPTR:=1;HELPLINE[0]:=1183;END;ERROR;END{:1213}; 5126 {1214:}IF EQTB[5306].INT<>0 THEN IF EQTB[5306].INT<0 THEN BEGIN IF(A>=4) 5127 THEN A:=A-4;END ELSE BEGIN IF NOT(A>=4)THEN A:=A+4;END{:1214}; 5128 CASE CURCMD OF{1217:}87:IF(A>=4)THEN GEQDEFINE(3934,120,CURCHR)ELSE 5129 EQDEFINE(3934,120,CURCHR); 5130 {:1217}{1218:}97:BEGIN IF ODD(CURCHR)AND NOT(A>=4)AND(EQTB[5306].INT>=0) 5131 THEN A:=A+4;E:=(CURCHR>=2);GETRTOKEN;P:=CURCS;Q:=SCANTOKS(TRUE,E); 5132 IF(A>=4)THEN GEQDEFINE(P,111+(A MOD 4),DEFREF)ELSE EQDEFINE(P,111+(A MOD 5133 4),DEFREF);END;{:1218}{1221:}94:BEGIN N:=CURCHR;GETRTOKEN;P:=CURCS; 5134 IF N=0 THEN BEGIN REPEAT GETTOKEN;UNTIL CURCMD<>10; 5135 IF CURTOK=3133 THEN BEGIN GETTOKEN;IF CURCMD=10 THEN GETTOKEN;END; 5136 END ELSE BEGIN GETTOKEN;Q:=CURTOK;GETTOKEN;BACKINPUT;CURTOK:=Q; 5137 BACKINPUT;END; 5138 IF CURCMD>=111 THEN MEM[CURCHR].HH.LH:=MEM[CURCHR].HH.LH+1; 5139 IF(A>=4)THEN GEQDEFINE(P,CURCMD,CURCHR)ELSE EQDEFINE(P,CURCMD,CURCHR); 5140 END;{:1221}{1224:}95:BEGIN N:=CURCHR;GETRTOKEN;P:=CURCS; 5141 IF(A>=4)THEN GEQDEFINE(P,0,256)ELSE EQDEFINE(P,0,256); 5142 SCANOPTIONALEQUALS;CASE N OF 0:BEGIN SCANCHARNUM; 5143 IF(A>=4)THEN GEQDEFINE(P,68,CURVAL)ELSE EQDEFINE(P,68,CURVAL);END; 5144 1:BEGIN SCANFIFTEENBITINT; 5145 IF(A>=4)THEN GEQDEFINE(P,69,CURVAL)ELSE EQDEFINE(P,69,CURVAL);END; 5146 ELSE BEGIN SCANEIGHTBITINT; 5147 CASE N OF 2:IF(A>=4)THEN GEQDEFINE(P,73,5318+CURVAL)ELSE EQDEFINE(P,73, 5148 5318+CURVAL); 5149 3:IF(A>=4)THEN GEQDEFINE(P,74,5851+CURVAL)ELSE EQDEFINE(P,74,5851+CURVAL 5150 ); 5151 4:IF(A>=4)THEN GEQDEFINE(P,75,2900+CURVAL)ELSE EQDEFINE(P,75,2900+CURVAL 5152 ); 5153 5:IF(A>=4)THEN GEQDEFINE(P,76,3156+CURVAL)ELSE EQDEFINE(P,76,3156+CURVAL 5154 ); 5155 6:IF(A>=4)THEN GEQDEFINE(P,72,3422+CURVAL)ELSE EQDEFINE(P,72,3422+CURVAL 5156 );END;END END;END;{:1224}{1225:}96:BEGIN SCANINT;N:=CURVAL; 5157 IF NOT SCANKEYWORD(842)THEN BEGIN BEGIN IF INTERACTION=3 THEN; 5158 PRINTNL(262);PRINT(1073);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1200; 5159 HELPLINE[0]:=1201;END;ERROR;END;GETRTOKEN;P:=CURCS;READTOKS(N,P); 5160 IF(A>=4)THEN GEQDEFINE(P,111,CURVAL)ELSE EQDEFINE(P,111,CURVAL);END; 5161 {:1225}{1226:}71,72:BEGIN Q:=CURCS; 5162 IF CURCMD=71 THEN BEGIN SCANEIGHTBITINT;P:=3422+CURVAL; 5163 END ELSE P:=CURCHR;SCANOPTIONALEQUALS;{404:}REPEAT GETXTOKEN; 5164 UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; 5165 IF CURCMD<>1 THEN{1227:}BEGIN IF CURCMD=71 THEN BEGIN SCANEIGHTBITINT; 5166 CURCMD:=72;CURCHR:=3422+CURVAL;END; 5167 IF CURCMD=72 THEN BEGIN Q:=EQTB[CURCHR].HH.RH; 5168 IF Q=0 THEN IF(A>=4)THEN GEQDEFINE(P,101,0)ELSE EQDEFINE(P,101,0)ELSE 5169 BEGIN MEM[Q].HH.LH:=MEM[Q].HH.LH+1; 5170 IF(A>=4)THEN GEQDEFINE(P,111,Q)ELSE EQDEFINE(P,111,Q);END;GOTO 30;END; 5171 END{:1227};BACKINPUT;CURCS:=Q;Q:=SCANTOKS(FALSE,FALSE); 5172 IF MEM[DEFREF].HH.RH=0 THEN BEGIN IF(A>=4)THEN GEQDEFINE(P,101,0)ELSE 5173 EQDEFINE(P,101,0);BEGIN MEM[DEFREF].HH.RH:=AVAIL;AVAIL:=DEFREF; 5174 {DYNUSED:=DYNUSED-1;}END; 5175 END ELSE BEGIN IF P=3413 THEN BEGIN MEM[Q].HH.RH:=GETAVAIL; 5176 Q:=MEM[Q].HH.RH;MEM[Q].HH.LH:=637;Q:=GETAVAIL;MEM[Q].HH.LH:=379; 5177 MEM[Q].HH.RH:=MEM[DEFREF].HH.RH;MEM[DEFREF].HH.RH:=Q;END; 5178 IF(A>=4)THEN GEQDEFINE(P,111,DEFREF)ELSE EQDEFINE(P,111,DEFREF);END;END; 5179 {:1226}{1228:}73:BEGIN P:=CURCHR;SCANOPTIONALEQUALS;SCANINT; 5180 IF(A>=4)THEN GEQWORDDEFINE(P,CURVAL)ELSE EQWORDDEFINE(P,CURVAL);END; 5181 74:BEGIN P:=CURCHR;SCANOPTIONALEQUALS;SCANDIMEN(FALSE,FALSE,FALSE); 5182 IF(A>=4)THEN GEQWORDDEFINE(P,CURVAL)ELSE EQWORDDEFINE(P,CURVAL);END; 5183 75,76:BEGIN P:=CURCHR;N:=CURCMD;SCANOPTIONALEQUALS; 5184 IF N=76 THEN SCANGLUE(3)ELSE SCANGLUE(2);TRAPZEROGLUE; 5185 IF(A>=4)THEN GEQDEFINE(P,117,CURVAL)ELSE EQDEFINE(P,117,CURVAL);END; 5186 {:1228}{1232:}85:BEGIN{1233:}IF CURCHR=3983 THEN N:=15 ELSE IF CURCHR= 5187 5007 THEN N:=32768 ELSE IF CURCHR=4751 THEN N:=32767 ELSE IF CURCHR=5574 5188 THEN N:=16777215 ELSE N:=255{:1233};P:=CURCHR;SCANCHARNUM;P:=P+CURVAL; 5189 SCANOPTIONALEQUALS;SCANINT; 5190 IF((CURVAL<0)AND(P<5574))OR(CURVAL>N)THEN BEGIN BEGIN IF INTERACTION=3 5191 THEN;PRINTNL(262);PRINT(1202);END;PRINTINT(CURVAL); 5192 IF P<5574 THEN PRINT(1203)ELSE PRINT(1204);PRINTINT(N);BEGIN HELPPTR:=1; 5193 HELPLINE[0]:=1205;END;ERROR;CURVAL:=0;END; 5194 IF P<5007 THEN IF(A>=4)THEN GEQDEFINE(P,120,CURVAL)ELSE EQDEFINE(P,120, 5195 CURVAL)ELSE IF P<5574 THEN IF(A>=4)THEN GEQDEFINE(P,120,CURVAL+0)ELSE 5196 EQDEFINE(P,120,CURVAL+0)ELSE IF(A>=4)THEN GEQWORDDEFINE(P,CURVAL)ELSE 5197 EQWORDDEFINE(P,CURVAL);END;{:1232}{1234:}86:BEGIN P:=CURCHR; 5198 SCANFOURBITINT;P:=P+CURVAL;SCANOPTIONALEQUALS;SCANFONTIDENT; 5199 IF(A>=4)THEN GEQDEFINE(P,120,CURVAL)ELSE EQDEFINE(P,120,CURVAL);END; 5200 {:1234}{1235:}89,90,91,92:DOREGISTERCOMMAND(A); 5201 {:1235}{1241:}98:BEGIN SCANEIGHTBITINT; 5202 IF(A>=4)THEN N:=256+CURVAL ELSE N:=CURVAL;SCANOPTIONALEQUALS; 5203 IF SETBOXALLOWED THEN SCANBOX(1073741824+N)ELSE BEGIN BEGIN IF 5204 INTERACTION=3 THEN;PRINTNL(262);PRINT(680);END;PRINTESC(536); 5205 BEGIN HELPPTR:=2;HELPLINE[1]:=1211;HELPLINE[0]:=1212;END;ERROR;END;END; 5206 {:1241}{1242:}79:ALTERAUX;80:ALTERPREVGRAF;81:ALTERPAGESOFAR; 5207 82:ALTERINTEGER;83:ALTERBOXDIMEN; 5208 {:1242}{1248:}84:BEGIN SCANOPTIONALEQUALS;SCANINT;N:=CURVAL; 5209 IF N<=0 THEN P:=0 ELSE BEGIN P:=GETNODE(2*N+1);MEM[P].HH.LH:=N; 5210 FOR J:=1 TO N DO BEGIN SCANDIMEN(FALSE,FALSE,FALSE); 5211 MEM[P+2*J-1].INT:=CURVAL;SCANDIMEN(FALSE,FALSE,FALSE); 5212 MEM[P+2*J].INT:=CURVAL;END;END; 5213 IF(A>=4)THEN GEQDEFINE(3412,118,P)ELSE EQDEFINE(3412,118,P);END; 5214 {:1248}{1252:}99:IF CURCHR=1 THEN BEGIN NEWPATTERNS;GOTO 30; 5215 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1216);END;HELPPTR:=0; 5216 ERROR;REPEAT GETTOKEN;UNTIL CURCMD=2;GOTO 10; 5217 END ELSE BEGIN NEWHYPHEXCEPTIONS;GOTO 30;END; 5218 {:1252}{1253:}77:BEGIN FINDFONTDIMEN(TRUE);K:=CURVAL;SCANOPTIONALEQUALS; 5219 SCANDIMEN(FALSE,FALSE,FALSE);FONTINFO[K].INT:=CURVAL;END; 5220 78:BEGIN N:=CURCHR;SCANFONTIDENT;F:=CURVAL;SCANOPTIONALEQUALS;SCANINT; 5221 IF N=0 THEN HYPHENCHAR[F]:=CURVAL ELSE SKEWCHAR[F]:=CURVAL;END; 5222 {:1253}{1256:}88:NEWFONT(A);{:1256}{1264:}100:NEWINTERACTION; 5223 {:1264}ELSE CONFUSION(1178)END; 5224 30:{1269:}IF AFTERTOKEN<>0 THEN BEGIN CURTOK:=AFTERTOKEN;BACKINPUT; 5225 AFTERTOKEN:=0;END{:1269};10:END;{:1211}{1270:}PROCEDURE DOASSIGNMENTS; 5226 LABEL 10;BEGIN WHILE TRUE DO BEGIN{404:}REPEAT GETXTOKEN; 5227 UNTIL(CURCMD<>10)AND(CURCMD<>0){:404};IF CURCMD<=70 THEN GOTO 10; 5228 SETBOXALLOWED:=FALSE;PREFIXEDCOMMAND;SETBOXALLOWED:=TRUE;END;10:END; 5229 {:1270}{1275:}PROCEDURE OPENORCLOSEIN;VAR C:0..1;N:0..15; 5230 BEGIN C:=CURCHR;SCANFOURBITINT;N:=CURVAL; 5231 IF READOPEN[N]<>2 THEN BEGIN ACLOSE(READFILE[N]);READOPEN[N]:=2;END; 5232 IF C<>0 THEN BEGIN SCANOPTIONALEQUALS;SCANFILENAME; 5233 IF CUREXT=338 THEN CUREXT:=791;PACKFILENAME(CURNAME,CURAREA,CUREXT); 5234 IF AOPENIN(READFILE[N])THEN READOPEN[N]:=1;END;END; 5235 {:1275}{1279:}PROCEDURE ISSUEMESSAGE;VAR OLDSETTING:0..21;C:0..1; 5236 S:STRNUMBER;BEGIN C:=CURCHR;MEM[29988].HH.RH:=SCANTOKS(FALSE,TRUE); 5237 OLDSETTING:=SELECTOR;SELECTOR:=21;TOKENSHOW(DEFREF); 5238 SELECTOR:=OLDSETTING;FLUSHLIST(DEFREF); 5239 BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(257,POOLSIZE-INITPOOLPTR);END; 5240 S:=MAKESTRING; 5241 IF C=0 THEN{1280:}BEGIN IF TERMOFFSET+(STRSTART[S+1]-STRSTART[S])> 5242 MAXPRINTLINE-2 THEN PRINTLN ELSE IF(TERMOFFSET>0)OR(FILEOFFSET>0)THEN 5243 PRINTCHAR(32);SLOWPRINT(S);; 5244 END{:1280}ELSE{1283:}BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 5245 PRINT(338);END;SLOWPRINT(S); 5246 IF EQTB[3421].HH.RH<>0 THEN USEERRHELP:=TRUE ELSE IF LONGHELPSEEN THEN 5247 BEGIN HELPPTR:=1;HELPLINE[0]:=1232; 5248 END ELSE BEGIN IF INTERACTION<3 THEN LONGHELPSEEN:=TRUE; 5249 BEGIN HELPPTR:=4;HELPLINE[3]:=1233;HELPLINE[2]:=1234;HELPLINE[1]:=1235; 5250 HELPLINE[0]:=1236;END;END;ERROR;USEERRHELP:=FALSE;END{:1283}; 5251 BEGIN STRPTR:=STRPTR-1;POOLPTR:=STRSTART[STRPTR];END;END; 5252 {:1279}{1288:}PROCEDURE SHIFTCASE;VAR B:HALFWORD;P:HALFWORD;T:HALFWORD; 5253 C:EIGHTBITS;BEGIN B:=CURCHR;P:=SCANTOKS(FALSE,FALSE); 5254 P:=MEM[DEFREF].HH.RH;WHILE P<>0 DO BEGIN{1289:}T:=MEM[P].HH.LH; 5255 IF T<4352 THEN BEGIN C:=T MOD 256; 5256 IF EQTB[B+C].HH.RH<>0 THEN MEM[P].HH.LH:=T-C+EQTB[B+C].HH.RH;END{:1289}; 5257 P:=MEM[P].HH.RH;END;BEGINTOKENLIST(MEM[DEFREF].HH.RH,3); 5258 BEGIN MEM[DEFREF].HH.RH:=AVAIL;AVAIL:=DEFREF;{DYNUSED:=DYNUSED-1;}END; 5259 END;{:1288}{1293:}PROCEDURE SHOWWHATEVER;LABEL 50;VAR P:HALFWORD; 5260 BEGIN IF P=0 THEN;CASE CURCHR OF 3:BEGIN BEGINDIAGNOSTIC;SHOWACTIVITIES; 5261 END;1:{1296:}BEGIN SCANEIGHTBITINT;BEGINDIAGNOSTIC;PRINTNL(1254); 5262 PRINTINT(CURVAL);PRINTCHAR(61); 5263 IF EQTB[3678+CURVAL].HH.RH=0 THEN PRINT(410)ELSE SHOWBOX(EQTB[3678+ 5264 CURVAL].HH.RH);END{:1296};0:{1294:}BEGIN GETTOKEN;IF INTERACTION=3 THEN; 5265 PRINTNL(1248);IF CURCS<>0 THEN BEGIN SPRINTCS(CURCS);PRINTCHAR(61);END; 5266 PRINTMEANING;GOTO 50;END{:1294};ELSE{1297:}BEGIN P:=THETOKS; 5267 IF INTERACTION=3 THEN;PRINTNL(1248);TOKENSHOW(29997); 5268 FLUSHLIST(MEM[29997].HH.RH);GOTO 50;END{:1297}END; 5269 {1298:}ENDDIAGNOSTIC(TRUE);BEGIN IF INTERACTION=3 THEN;PRINTNL(262); 5270 PRINT(1255);END; 5271 IF SELECTOR=19 THEN IF EQTB[5292].INT<=0 THEN BEGIN SELECTOR:=17; 5272 PRINT(1256);SELECTOR:=19;END{:1298}; 5273 50:IF INTERACTION<3 THEN BEGIN HELPPTR:=0;ERRORCOUNT:=ERRORCOUNT-1; 5274 END ELSE IF EQTB[5292].INT>0 THEN BEGIN BEGIN HELPPTR:=3; 5275 HELPLINE[2]:=1243;HELPLINE[1]:=1244;HELPLINE[0]:=1245;END; 5276 END ELSE BEGIN BEGIN HELPPTR:=5;HELPLINE[4]:=1243;HELPLINE[3]:=1244; 5277 HELPLINE[2]:=1245;HELPLINE[1]:=1246;HELPLINE[0]:=1247;END;END;ERROR;END; 5278 {:1293}{1302:}PROCEDURE STOREFMTFILE;LABEL 41,42,31,32; 5279 VAR J,K,L:INTEGER;P,Q:HALFWORD;X:INTEGER;W:FOURQUARTERS; 5280 BEGIN{1304:}IF SAVEPTR<>0 THEN BEGIN BEGIN IF INTERACTION=3 THEN; 5281 PRINTNL(262);PRINT(1258);END;BEGIN HELPPTR:=1;HELPLINE[0]:=1259;END; 5282 BEGIN IF INTERACTION=3 THEN INTERACTION:=2;IF LOGOPENED THEN ERROR; 5283 {IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END{:1304}; 5284 {1328:}SELECTOR:=21;PRINT(1272);PRINT(JOBNAME);PRINTCHAR(32); 5285 PRINTINT(EQTB[5286].INT);PRINTCHAR(46);PRINTINT(EQTB[5285].INT); 5286 PRINTCHAR(46);PRINTINT(EQTB[5284].INT);PRINTCHAR(41); 5287 IF INTERACTION=0 THEN SELECTOR:=18 ELSE SELECTOR:=19; 5288 BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(257,POOLSIZE-INITPOOLPTR);END; 5289 FORMATIDENT:=MAKESTRING;PACKJOBNAME(786); 5290 WHILE NOT WOPENOUT(FMTFILE)DO PROMPTFILENAME(1273,786);PRINTNL(1274); 5291 SLOWPRINT(WMAKENAMESTRING(FMTFILE));BEGIN STRPTR:=STRPTR-1; 5292 POOLPTR:=STRSTART[STRPTR];END;PRINTNL(338); 5293 SLOWPRINT(FORMATIDENT){:1328};{1307:}BEGIN FMTFILE^.INT:=504454778; 5294 PUT(FMTFILE);END;BEGIN FMTFILE^.INT:=0;PUT(FMTFILE);END; 5295 BEGIN FMTFILE^.INT:=30000;PUT(FMTFILE);END;BEGIN FMTFILE^.INT:=6106; 5296 PUT(FMTFILE);END;BEGIN FMTFILE^.INT:=1777;PUT(FMTFILE);END; 5297 BEGIN FMTFILE^.INT:=307;PUT(FMTFILE);END{:1307}; 5298 {1309:}BEGIN FMTFILE^.INT:=POOLPTR;PUT(FMTFILE);END; 5299 BEGIN FMTFILE^.INT:=STRPTR;PUT(FMTFILE);END; 5300 FOR K:=0 TO STRPTR DO BEGIN FMTFILE^.INT:=STRSTART[K];PUT(FMTFILE);END; 5301 K:=0;WHILE K+4<POOLPTR DO BEGIN W.B0:=STRPOOL[K]+0;W.B1:=STRPOOL[K+1]+0; 5302 W.B2:=STRPOOL[K+2]+0;W.B3:=STRPOOL[K+3]+0;BEGIN FMTFILE^.QQQQ:=W; 5303 PUT(FMTFILE);END;K:=K+4;END;K:=POOLPTR-4;W.B0:=STRPOOL[K]+0; 5304 W.B1:=STRPOOL[K+1]+0;W.B2:=STRPOOL[K+2]+0;W.B3:=STRPOOL[K+3]+0; 5305 BEGIN FMTFILE^.QQQQ:=W;PUT(FMTFILE);END;PRINTLN;PRINTINT(STRPTR); 5306 PRINT(1260);PRINTINT(POOLPTR){:1309};{1311:}SORTAVAIL;VARUSED:=0; 5307 BEGIN FMTFILE^.INT:=LOMEMMAX;PUT(FMTFILE);END;BEGIN FMTFILE^.INT:=ROVER; 5308 PUT(FMTFILE);END;P:=0;Q:=ROVER;X:=0; 5309 REPEAT FOR K:=P TO Q+1 DO BEGIN FMTFILE^:=MEM[K];PUT(FMTFILE);END; 5310 X:=X+Q+2-P;VARUSED:=VARUSED+Q-P;P:=Q+MEM[Q].HH.LH;Q:=MEM[Q+1].HH.RH; 5311 UNTIL Q=ROVER;VARUSED:=VARUSED+LOMEMMAX-P;DYNUSED:=MEMEND+1-HIMEMMIN; 5312 FOR K:=P TO LOMEMMAX DO BEGIN FMTFILE^:=MEM[K];PUT(FMTFILE);END; 5313 X:=X+LOMEMMAX+1-P;BEGIN FMTFILE^.INT:=HIMEMMIN;PUT(FMTFILE);END; 5314 BEGIN FMTFILE^.INT:=AVAIL;PUT(FMTFILE);END; 5315 FOR K:=HIMEMMIN TO MEMEND DO BEGIN FMTFILE^:=MEM[K];PUT(FMTFILE);END; 5316 X:=X+MEMEND+1-HIMEMMIN;P:=AVAIL;WHILE P<>0 DO BEGIN DYNUSED:=DYNUSED-1; 5317 P:=MEM[P].HH.RH;END;BEGIN FMTFILE^.INT:=VARUSED;PUT(FMTFILE);END; 5318 BEGIN FMTFILE^.INT:=DYNUSED;PUT(FMTFILE);END;PRINTLN;PRINTINT(X); 5319 PRINT(1261);PRINTINT(VARUSED);PRINTCHAR(38);PRINTINT(DYNUSED){:1311}; 5320 {1313:}{1315:}K:=1;REPEAT J:=K; 5321 WHILE J<5262 DO BEGIN IF(EQTB[J].HH.RH=EQTB[J+1].HH.RH)AND(EQTB[J].HH.B0 5322 =EQTB[J+1].HH.B0)AND(EQTB[J].HH.B1=EQTB[J+1].HH.B1)THEN GOTO 41;J:=J+1; 5323 END;L:=5263;GOTO 31;41:J:=J+1;L:=J; 5324 WHILE J<5262 DO BEGIN IF(EQTB[J].HH.RH<>EQTB[J+1].HH.RH)OR(EQTB[J].HH.B0 5325 <>EQTB[J+1].HH.B0)OR(EQTB[J].HH.B1<>EQTB[J+1].HH.B1)THEN GOTO 31;J:=J+1; 5326 END;31:BEGIN FMTFILE^.INT:=L-K;PUT(FMTFILE);END; 5327 WHILE K<L DO BEGIN BEGIN FMTFILE^:=EQTB[K];PUT(FMTFILE);END;K:=K+1;END; 5328 K:=J+1;BEGIN FMTFILE^.INT:=K-L;PUT(FMTFILE);END;UNTIL K=5263{:1315}; 5329 {1316:}REPEAT J:=K; 5330 WHILE J<6106 DO BEGIN IF EQTB[J].INT=EQTB[J+1].INT THEN GOTO 42;J:=J+1; 5331 END;L:=6107;GOTO 32;42:J:=J+1;L:=J; 5332 WHILE J<6106 DO BEGIN IF EQTB[J].INT<>EQTB[J+1].INT THEN GOTO 32;J:=J+1; 5333 END;32:BEGIN FMTFILE^.INT:=L-K;PUT(FMTFILE);END; 5334 WHILE K<L DO BEGIN BEGIN FMTFILE^:=EQTB[K];PUT(FMTFILE);END;K:=K+1;END; 5335 K:=J+1;BEGIN FMTFILE^.INT:=K-L;PUT(FMTFILE);END;UNTIL K>6106{:1316}; 5336 BEGIN FMTFILE^.INT:=PARLOC;PUT(FMTFILE);END; 5337 BEGIN FMTFILE^.INT:=WRITELOC;PUT(FMTFILE);END; 5338 {1318:}BEGIN FMTFILE^.INT:=HASHUSED;PUT(FMTFILE);END; 5339 CSCOUNT:=2613-HASHUSED; 5340 FOR P:=514 TO HASHUSED DO IF HASH[P].RH<>0 THEN BEGIN BEGIN FMTFILE^.INT 5341 :=P;PUT(FMTFILE);END;BEGIN FMTFILE^.HH:=HASH[P];PUT(FMTFILE);END; 5342 CSCOUNT:=CSCOUNT+1;END; 5343 FOR P:=HASHUSED+1 TO 2880 DO BEGIN FMTFILE^.HH:=HASH[P];PUT(FMTFILE); 5344 END;BEGIN FMTFILE^.INT:=CSCOUNT;PUT(FMTFILE);END;PRINTLN; 5345 PRINTINT(CSCOUNT);PRINT(1262){:1318}{:1313}; 5346 {1320:}BEGIN FMTFILE^.INT:=FMEMPTR;PUT(FMTFILE);END; 5347 FOR K:=0 TO FMEMPTR-1 DO BEGIN FMTFILE^:=FONTINFO[K];PUT(FMTFILE);END; 5348 BEGIN FMTFILE^.INT:=FONTPTR;PUT(FMTFILE);END; 5349 FOR K:=0 TO FONTPTR DO{1322:}BEGIN BEGIN FMTFILE^.QQQQ:=FONTCHECK[K]; 5350 PUT(FMTFILE);END;BEGIN FMTFILE^.INT:=FONTSIZE[K];PUT(FMTFILE);END; 5351 BEGIN FMTFILE^.INT:=FONTDSIZE[K];PUT(FMTFILE);END; 5352 BEGIN FMTFILE^.INT:=FONTPARAMS[K];PUT(FMTFILE);END; 5353 BEGIN FMTFILE^.INT:=HYPHENCHAR[K];PUT(FMTFILE);END; 5354 BEGIN FMTFILE^.INT:=SKEWCHAR[K];PUT(FMTFILE);END; 5355 BEGIN FMTFILE^.INT:=FONTNAME[K];PUT(FMTFILE);END; 5356 BEGIN FMTFILE^.INT:=FONTAREA[K];PUT(FMTFILE);END; 5357 BEGIN FMTFILE^.INT:=FONTBC[K];PUT(FMTFILE);END; 5358 BEGIN FMTFILE^.INT:=FONTEC[K];PUT(FMTFILE);END; 5359 BEGIN FMTFILE^.INT:=CHARBASE[K];PUT(FMTFILE);END; 5360 BEGIN FMTFILE^.INT:=WIDTHBASE[K];PUT(FMTFILE);END; 5361 BEGIN FMTFILE^.INT:=HEIGHTBASE[K];PUT(FMTFILE);END; 5362 BEGIN FMTFILE^.INT:=DEPTHBASE[K];PUT(FMTFILE);END; 5363 BEGIN FMTFILE^.INT:=ITALICBASE[K];PUT(FMTFILE);END; 5364 BEGIN FMTFILE^.INT:=LIGKERNBASE[K];PUT(FMTFILE);END; 5365 BEGIN FMTFILE^.INT:=KERNBASE[K];PUT(FMTFILE);END; 5366 BEGIN FMTFILE^.INT:=EXTENBASE[K];PUT(FMTFILE);END; 5367 BEGIN FMTFILE^.INT:=PARAMBASE[K];PUT(FMTFILE);END; 5368 BEGIN FMTFILE^.INT:=FONTGLUE[K];PUT(FMTFILE);END; 5369 BEGIN FMTFILE^.INT:=BCHARLABEL[K];PUT(FMTFILE);END; 5370 BEGIN FMTFILE^.INT:=FONTBCHAR[K];PUT(FMTFILE);END; 5371 BEGIN FMTFILE^.INT:=FONTFALSEBCHAR[K];PUT(FMTFILE);END;PRINTNL(1265); 5372 PRINTESC(HASH[2624+K].RH);PRINTCHAR(61); 5373 PRINTFILENAME(FONTNAME[K],FONTAREA[K],338); 5374 IF FONTSIZE[K]<>FONTDSIZE[K]THEN BEGIN PRINT(741); 5375 PRINTSCALED(FONTSIZE[K]);PRINT(397);END;END{:1322};PRINTLN; 5376 PRINTINT(FMEMPTR-7);PRINT(1263);PRINTINT(FONTPTR-0);PRINT(1264); 5377 IF FONTPTR<>1 THEN PRINTCHAR(115){:1320}; 5378 {1324:}BEGIN FMTFILE^.INT:=HYPHCOUNT;PUT(FMTFILE);END; 5379 FOR K:=0 TO 307 DO IF HYPHWORD[K]<>0 THEN BEGIN BEGIN FMTFILE^.INT:=K; 5380 PUT(FMTFILE);END;BEGIN FMTFILE^.INT:=HYPHWORD[K];PUT(FMTFILE);END; 5381 BEGIN FMTFILE^.INT:=HYPHLIST[K];PUT(FMTFILE);END;END;PRINTLN; 5382 PRINTINT(HYPHCOUNT);PRINT(1266);IF HYPHCOUNT<>1 THEN PRINTCHAR(115); 5383 IF TRIENOTREADY THEN INITTRIE;BEGIN FMTFILE^.INT:=TRIEMAX;PUT(FMTFILE); 5384 END;FOR K:=0 TO TRIEMAX DO BEGIN FMTFILE^.HH:=TRIE[K];PUT(FMTFILE);END; 5385 BEGIN FMTFILE^.INT:=TRIEOPPTR;PUT(FMTFILE);END; 5386 FOR K:=1 TO TRIEOPPTR DO BEGIN BEGIN FMTFILE^.INT:=HYFDISTANCE[K]; 5387 PUT(FMTFILE);END;BEGIN FMTFILE^.INT:=HYFNUM[K];PUT(FMTFILE);END; 5388 BEGIN FMTFILE^.INT:=HYFNEXT[K];PUT(FMTFILE);END;END;PRINTNL(1267); 5389 PRINTINT(TRIEMAX);PRINT(1268);PRINTINT(TRIEOPPTR);PRINT(1269); 5390 IF TRIEOPPTR<>1 THEN PRINTCHAR(115);PRINT(1270);PRINTINT(TRIEOPSIZE); 5391 FOR K:=255 DOWNTO 0 DO IF TRIEUSED[K]>0 THEN BEGIN PRINTNL(800); 5392 PRINTINT(TRIEUSED[K]-0);PRINT(1271);PRINTINT(K);BEGIN FMTFILE^.INT:=K; 5393 PUT(FMTFILE);END;BEGIN FMTFILE^.INT:=TRIEUSED[K]-0;PUT(FMTFILE);END; 5394 END{:1324};{1326:}BEGIN FMTFILE^.INT:=INTERACTION;PUT(FMTFILE);END; 5395 BEGIN FMTFILE^.INT:=FORMATIDENT;PUT(FMTFILE);END; 5396 BEGIN FMTFILE^.INT:=69069;PUT(FMTFILE);END;EQTB[5294].INT:=0{:1326}; 5397 {1329:}WCLOSE(FMTFILE){:1329};END; 5398 {:1302}{1348:}{1349:}PROCEDURE NEWWHATSIT(S:SMALLNUMBER;W:SMALLNUMBER); 5399 VAR P:HALFWORD;BEGIN P:=GETNODE(W);MEM[P].HH.B0:=8;MEM[P].HH.B1:=S; 5400 MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P;END; 5401 {:1349}{1350:}PROCEDURE NEWWRITEWHATSIT(W:SMALLNUMBER); 5402 BEGIN NEWWHATSIT(CURCHR,W); 5403 IF W<>2 THEN SCANFOURBITINT ELSE BEGIN SCANINT; 5404 IF CURVAL<0 THEN CURVAL:=17 ELSE IF CURVAL>15 THEN CURVAL:=16;END; 5405 MEM[CURLIST.TAILFIELD+1].HH.LH:=CURVAL;END;{:1350}PROCEDURE DOEXTENSION; 5406 VAR K:INTEGER;P:HALFWORD; 5407 BEGIN CASE CURCHR OF 0:{1351:}BEGIN NEWWRITEWHATSIT(3); 5408 SCANOPTIONALEQUALS;SCANFILENAME;MEM[CURLIST.TAILFIELD+1].HH.RH:=CURNAME; 5409 MEM[CURLIST.TAILFIELD+2].HH.LH:=CURAREA; 5410 MEM[CURLIST.TAILFIELD+2].HH.RH:=CUREXT;END{:1351}; 5411 1:{1352:}BEGIN K:=CURCS;NEWWRITEWHATSIT(2);CURCS:=K; 5412 P:=SCANTOKS(FALSE,FALSE);MEM[CURLIST.TAILFIELD+1].HH.RH:=DEFREF; 5413 END{:1352};2:{1353:}BEGIN NEWWRITEWHATSIT(2); 5414 MEM[CURLIST.TAILFIELD+1].HH.RH:=0;END{:1353}; 5415 3:{1354:}BEGIN NEWWHATSIT(3,2);MEM[CURLIST.TAILFIELD+1].HH.LH:=0; 5416 P:=SCANTOKS(FALSE,TRUE);MEM[CURLIST.TAILFIELD+1].HH.RH:=DEFREF; 5417 END{:1354};4:{1375:}BEGIN GETXTOKEN; 5418 IF(CURCMD=59)AND(CURCHR<=2)THEN BEGIN P:=CURLIST.TAILFIELD;DOEXTENSION; 5419 OUTWHAT(CURLIST.TAILFIELD);FLUSHNODELIST(CURLIST.TAILFIELD); 5420 CURLIST.TAILFIELD:=P;MEM[P].HH.RH:=0;END ELSE BACKINPUT;END{:1375}; 5421 5:{1377:}IF ABS(CURLIST.MODEFIELD)<>102 THEN REPORTILLEGALCASE ELSE 5422 BEGIN NEWWHATSIT(4,2);SCANINT; 5423 IF CURVAL<=0 THEN CURLIST.AUXFIELD.HH.RH:=0 ELSE IF CURVAL>255 THEN 5424 CURLIST.AUXFIELD.HH.RH:=0 ELSE CURLIST.AUXFIELD.HH.RH:=CURVAL; 5425 MEM[CURLIST.TAILFIELD+1].HH.RH:=CURLIST.AUXFIELD.HH.RH; 5426 MEM[CURLIST.TAILFIELD+1].HH.B0:=NORMMIN(EQTB[5314].INT); 5427 MEM[CURLIST.TAILFIELD+1].HH.B1:=NORMMIN(EQTB[5315].INT);END{:1377}; 5428 ELSE CONFUSION(1291)END;END;{:1348}{1376:}PROCEDURE FIXLANGUAGE; 5429 VAR L:ASCIICODE; 5430 BEGIN IF EQTB[5313].INT<=0 THEN L:=0 ELSE IF EQTB[5313].INT>255 THEN L:= 5431 0 ELSE L:=EQTB[5313].INT; 5432 IF L<>CURLIST.AUXFIELD.HH.RH THEN BEGIN NEWWHATSIT(4,2); 5433 MEM[CURLIST.TAILFIELD+1].HH.RH:=L;CURLIST.AUXFIELD.HH.RH:=L; 5434 MEM[CURLIST.TAILFIELD+1].HH.B0:=NORMMIN(EQTB[5314].INT); 5435 MEM[CURLIST.TAILFIELD+1].HH.B1:=NORMMIN(EQTB[5315].INT);END;END; 5436 {:1376}{1068:}PROCEDURE HANDLERIGHTBRACE;VAR P,Q:HALFWORD;D:SCALED; 5437 F:INTEGER;BEGIN CASE CURGROUP OF 1:UNSAVE; 5438 0:BEGIN BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(1044);END; 5439 BEGIN HELPPTR:=2;HELPLINE[1]:=1045;HELPLINE[0]:=1046;END;ERROR;END; 5440 14,15,16:EXTRARIGHTBRACE;{1085:}2:PACKAGE(0);3:BEGIN ADJUSTTAIL:=29995; 5441 PACKAGE(0);END;4:BEGIN ENDGRAF;PACKAGE(0);END;5:BEGIN ENDGRAF; 5442 PACKAGE(4);END;{:1085}{1100:}11:BEGIN ENDGRAF;Q:=EQTB[2892].HH.RH; 5443 MEM[Q].HH.RH:=MEM[Q].HH.RH+1;D:=EQTB[5836].INT;F:=EQTB[5305].INT;UNSAVE; 5444 SAVEPTR:=SAVEPTR-1; 5445 P:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,0,1,1073741823);POPNEST; 5446 IF SAVESTACK[SAVEPTR+0].INT<255 THEN BEGIN BEGIN MEM[CURLIST.TAILFIELD]. 5447 HH.RH:=GETNODE(5);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 5448 MEM[CURLIST.TAILFIELD].HH.B0:=3; 5449 MEM[CURLIST.TAILFIELD].HH.B1:=SAVESTACK[SAVEPTR+0].INT+0; 5450 MEM[CURLIST.TAILFIELD+3].INT:=MEM[P+3].INT+MEM[P+2].INT; 5451 MEM[CURLIST.TAILFIELD+4].HH.LH:=MEM[P+5].HH.RH; 5452 MEM[CURLIST.TAILFIELD+4].HH.RH:=Q;MEM[CURLIST.TAILFIELD+2].INT:=D; 5453 MEM[CURLIST.TAILFIELD+1].INT:=F; 5454 END ELSE BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=GETNODE(2); 5455 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 5456 MEM[CURLIST.TAILFIELD].HH.B0:=5;MEM[CURLIST.TAILFIELD].HH.B1:=0; 5457 MEM[CURLIST.TAILFIELD+1].INT:=MEM[P+5].HH.RH;DELETEGLUEREF(Q);END; 5458 FREENODE(P,7);IF NESTPTR=0 THEN BUILDPAGE;END; 5459 8:{1026:}BEGIN IF(CURINPUT.LOCFIELD<>0)OR((CURINPUT.INDEXFIELD<>6)AND( 5460 CURINPUT.INDEXFIELD<>3))THEN{1027:}BEGIN BEGIN IF INTERACTION=3 THEN; 5461 PRINTNL(262);PRINT(1010);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1011; 5462 HELPLINE[0]:=1012;END;ERROR;REPEAT GETTOKEN;UNTIL CURINPUT.LOCFIELD=0; 5463 END{:1027};ENDTOKENLIST;ENDGRAF;UNSAVE;OUTPUTACTIVE:=FALSE; 5464 INSERTPENALTIES:=0; 5465 {1028:}IF EQTB[3933].HH.RH<>0 THEN BEGIN BEGIN IF INTERACTION=3 THEN; 5466 PRINTNL(262);PRINT(1013);END;PRINTESC(409);PRINTINT(255); 5467 BEGIN HELPPTR:=3;HELPLINE[2]:=1014;HELPLINE[1]:=1015;HELPLINE[0]:=1016; 5468 END;BOXERROR(255);END{:1028}; 5469 IF CURLIST.TAILFIELD<>CURLIST.HEADFIELD THEN BEGIN MEM[PAGETAIL].HH.RH:= 5470 MEM[CURLIST.HEADFIELD].HH.RH;PAGETAIL:=CURLIST.TAILFIELD;END; 5471 IF MEM[29998].HH.RH<>0 THEN BEGIN IF MEM[29999].HH.RH=0 THEN NEST[0]. 5472 TAILFIELD:=PAGETAIL;MEM[PAGETAIL].HH.RH:=MEM[29999].HH.RH; 5473 MEM[29999].HH.RH:=MEM[29998].HH.RH;MEM[29998].HH.RH:=0;PAGETAIL:=29998; 5474 END;POPNEST;BUILDPAGE;END{:1026};{:1100}{1118:}10:BUILDDISCRETIONARY; 5475 {:1118}{1132:}6:BEGIN BACKINPUT;CURTOK:=6710; 5476 BEGIN IF INTERACTION=3 THEN;PRINTNL(262);PRINT(625);END;PRINTESC(899); 5477 PRINT(626);BEGIN HELPPTR:=1;HELPLINE[0]:=1125;END;INSERROR;END; 5478 {:1132}{1133:}7:BEGIN ENDGRAF;UNSAVE;ALIGNPEEK;END; 5479 {:1133}{1168:}12:BEGIN ENDGRAF;UNSAVE;SAVEPTR:=SAVEPTR-2; 5480 P:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,SAVESTACK[SAVEPTR+1].INT, 5481 SAVESTACK[SAVEPTR+0].INT,1073741823);POPNEST; 5482 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD; 5483 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 5484 MEM[CURLIST.TAILFIELD].HH.B0:=29;MEM[CURLIST.TAILFIELD+1].HH.RH:=2; 5485 MEM[CURLIST.TAILFIELD+1].HH.LH:=P;END;{:1168}{1173:}13:BUILDCHOICES; 5486 {:1173}{1186:}9:BEGIN UNSAVE;SAVEPTR:=SAVEPTR-1; 5487 MEM[SAVESTACK[SAVEPTR+0].INT].HH.RH:=3;P:=FINMLIST(0); 5488 MEM[SAVESTACK[SAVEPTR+0].INT].HH.LH:=P; 5489 IF P<>0 THEN IF MEM[P].HH.RH=0 THEN IF MEM[P].HH.B0=16 THEN BEGIN IF MEM 5490 [P+3].HH.RH=0 THEN IF MEM[P+2].HH.RH=0 THEN BEGIN MEM[SAVESTACK[SAVEPTR 5491 +0].INT].HH:=MEM[P+1].HH;FREENODE(P,4);END; 5492 END ELSE IF MEM[P].HH.B0=28 THEN IF SAVESTACK[SAVEPTR+0].INT=CURLIST. 5493 TAILFIELD+1 THEN IF MEM[CURLIST.TAILFIELD].HH.B0=16 THEN{1187:}BEGIN Q:= 5494 CURLIST.HEADFIELD; 5495 WHILE MEM[Q].HH.RH<>CURLIST.TAILFIELD DO Q:=MEM[Q].HH.RH; 5496 MEM[Q].HH.RH:=P;FREENODE(CURLIST.TAILFIELD,4);CURLIST.TAILFIELD:=P; 5497 END{:1187};END;{:1186}ELSE CONFUSION(1047)END;END; 5498 {:1068}PROCEDURE MAINCONTROL; 5499 LABEL 60,21,70,80,90,91,92,95,100,101,110,111,112,120,10;VAR T:INTEGER; 5500 BEGIN IF EQTB[3419].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3419].HH.RH,12); 5501 60:GETXTOKEN; 5502 21:{1031:}IF INTERRUPT<>0 THEN IF OKTOINTERRUPT THEN BEGIN BACKINPUT; 5503 BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END;GOTO 60;END; 5504 {IF PANICKING THEN CHECKMEM(FALSE);} 5505 IF EQTB[5299].INT>0 THEN SHOWCURCMDCHR{:1031}; 5506 CASE ABS(CURLIST.MODEFIELD)+CURCMD OF 113,114,170:GOTO 70; 5507 118:BEGIN SCANCHARNUM;CURCHR:=CURVAL;GOTO 70;END;167:BEGIN GETXTOKEN; 5508 IF(CURCMD=11)OR(CURCMD=12)OR(CURCMD=68)OR(CURCMD=16)THEN CANCELBOUNDARY 5509 :=TRUE;GOTO 21;END; 5510 112:IF CURLIST.AUXFIELD.HH.LH=1000 THEN GOTO 120 ELSE APPSPACE; 5511 166,267:GOTO 120;{1045:}1,102,203,11,213,268:; 5512 40,141,242:BEGIN{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406};GOTO 21; 5513 END;15:IF ITSALLOVER THEN GOTO 10; 5514 {1048:}23,123,224,71,172,273,{:1048}{1098:}39,{:1098}{1111:}45,{:1111} 5515 {1144:}49,150,{:1144}7,108,209:REPORTILLEGALCASE; 5516 {1046:}8,109,9,110,18,119,70,171,51,152,16,117,50,151,53,154,67,168,54, 5517 155,55,156,57,158,56,157,31,132,52,153,29,130,47,148,212,216,217,230,227 5518 ,236,239{:1046}:INSERTDOLLARSIGN; 5519 {1056:}37,137,238:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=SCANRULESPEC 5520 ;CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 5521 IF ABS(CURLIST.MODEFIELD)=1 THEN CURLIST.AUXFIELD.INT:=-65536000 ELSE IF 5522 ABS(CURLIST.MODEFIELD)=102 THEN CURLIST.AUXFIELD.HH.LH:=1000;END; 5523 {:1056}{1057:}28,128,229,231:APPENDGLUE;30,131,232,233:APPENDKERN; 5524 {:1057}{1063:}2,103:NEWSAVELEVEL(1);62,163,264:NEWSAVELEVEL(14); 5525 63,164,265:IF CURGROUP=14 THEN UNSAVE ELSE OFFSAVE; 5526 {:1063}{1067:}3,104,205:HANDLERIGHTBRACE; 5527 {:1067}{1073:}22,124,225:BEGIN T:=CURCHR;SCANDIMEN(FALSE,FALSE,FALSE); 5528 IF T=0 THEN SCANBOX(CURVAL)ELSE SCANBOX(-CURVAL);END; 5529 32,133,234:SCANBOX(1073742237+CURCHR);21,122,223:BEGINBOX(0); 5530 {:1073}{1090:}44:NEWGRAF(CURCHR>0); 5531 12,13,17,69,4,24,36,46,48,27,34,65,66:BEGIN BACKINPUT;NEWGRAF(TRUE);END; 5532 {:1090}{1092:}145,246:INDENTINHMODE; 5533 {:1092}{1094:}14:BEGIN NORMALPARAGRAPH; 5534 IF CURLIST.MODEFIELD>0 THEN BUILDPAGE;END; 5535 115:BEGIN IF ALIGNSTATE<0 THEN OFFSAVE;ENDGRAF; 5536 IF CURLIST.MODEFIELD=1 THEN BUILDPAGE;END; 5537 116,129,138,126,134:HEADFORVMODE; 5538 {:1094}{1097:}38,139,240,140,241:BEGININSERTORADJUST; 5539 19,120,221:MAKEMARK;{:1097}{1102:}43,144,245:APPENDPENALTY; 5540 {:1102}{1104:}26,127,228:DELETELAST;{:1104}{1109:}25,125,226:UNPACKAGE; 5541 {:1109}{1112:}146:APPENDITALICCORRECTION; 5542 247:BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(0); 5543 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 5544 {:1112}{1116:}149,250:APPENDDISCRETIONARY;{:1116}{1122:}147:MAKEACCENT; 5545 {:1122}{1126:}6,107,208,5,106,207:ALIGNERROR;35,136,237:NOALIGNERROR; 5546 64,165,266:OMITERROR;{:1126}{1130:}33,135:INITALIGN; 5547 235:IF PRIVILEGED THEN IF CURGROUP=15 THEN INITALIGN ELSE OFFSAVE; 5548 10,111:DOENDV;{:1130}{1134:}68,169,270:CSERROR; 5549 {:1134}{1137:}105:INITMATH; 5550 {:1137}{1140:}251:IF PRIVILEGED THEN IF CURGROUP=15 THEN STARTEQNO ELSE 5551 OFFSAVE; 5552 {:1140}{1150:}204:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD; 5553 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;BACKINPUT; 5554 SCANMATH(CURLIST.TAILFIELD+1);END; 5555 {:1150}{1154:}214,215,271:SETMATHCHAR(EQTB[5007+CURCHR].HH.RH-0); 5556 219:BEGIN SCANCHARNUM;CURCHR:=CURVAL; 5557 SETMATHCHAR(EQTB[5007+CURCHR].HH.RH-0);END;220:BEGIN SCANFIFTEENBITINT; 5558 SETMATHCHAR(CURVAL);END;272:SETMATHCHAR(CURCHR); 5559 218:BEGIN SCANTWENTYSEVENBITINT;SETMATHCHAR(CURVAL DIV 4096);END; 5560 {:1154}{1158:}253:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD; 5561 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 5562 MEM[CURLIST.TAILFIELD].HH.B0:=CURCHR;SCANMATH(CURLIST.TAILFIELD+1);END; 5563 254:MATHLIMITSWITCH;{:1158}{1162:}269:MATHRADICAL; 5564 {:1162}{1164:}248,249:MATHAC;{:1164}{1167:}259:BEGIN SCANSPEC(12,FALSE); 5565 NORMALPARAGRAPH;PUSHNEST;CURLIST.MODEFIELD:=-1; 5566 CURLIST.AUXFIELD.INT:=-65536000; 5567 IF EQTB[3418].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[3418].HH.RH,11);END; 5568 {:1167}{1171:}256:BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWSTYLE(CURCHR); 5569 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 5570 258:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(0); 5571 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 5572 MEM[CURLIST.TAILFIELD].HH.B1:=98;END;257:APPENDCHOICES; 5573 {:1171}{1175:}211,210:SUBSUP;{:1175}{1180:}255:MATHFRACTION; 5574 {:1180}{1190:}252:MATHLEFTRIGHT; 5575 {:1190}{1193:}206:IF CURGROUP=15 THEN AFTERMATH ELSE OFFSAVE; 5576 {:1193}{1210:}72,173,274,73,174,275,74,175,276,75,176,277,76,177,278,77, 5577 178,279,78,179,280,79,180,281,80,181,282,81,182,283,82,183,284,83,184, 5578 285,84,185,286,85,186,287,86,187,288,87,188,289,88,189,290,89,190,291,90 5579 ,191,292,91,192,293,92,193,294,93,194,295,94,195,296,95,196,297,96,197, 5580 298,97,198,299,98,199,300,99,200,301,100,201,302,101,202,303: 5581 PREFIXEDCOMMAND;{:1210}{1268:}41,142,243:BEGIN GETTOKEN; 5582 AFTERTOKEN:=CURTOK;END;{:1268}{1271:}42,143,244:BEGIN GETTOKEN; 5583 SAVEFORAFTER(CURTOK);END;{:1271}{1274:}61,162,263:OPENORCLOSEIN; 5584 {:1274}{1276:}59,160,261:ISSUEMESSAGE; 5585 {:1276}{1285:}58,159,260:SHIFTCASE; 5586 {:1285}{1290:}20,121,222:SHOWWHATEVER; 5587 {:1290}{1347:}60,161,262:DOEXTENSION;{:1347}{:1045}END;GOTO 60; 5588 70:{1034:}MAINS:=EQTB[4751+CURCHR].HH.RH; 5589 IF MAINS=1000 THEN CURLIST.AUXFIELD.HH.LH:=1000 ELSE IF MAINS<1000 THEN 5590 BEGIN IF MAINS>0 THEN CURLIST.AUXFIELD.HH.LH:=MAINS; 5591 END ELSE IF CURLIST.AUXFIELD.HH.LH<1000 THEN CURLIST.AUXFIELD.HH.LH:= 5592 1000 ELSE CURLIST.AUXFIELD.HH.LH:=MAINS;MAINF:=EQTB[3934].HH.RH; 5593 BCHAR:=FONTBCHAR[MAINF];FALSEBCHAR:=FONTFALSEBCHAR[MAINF]; 5594 IF CURLIST.MODEFIELD>0 THEN IF EQTB[5313].INT<>CURLIST.AUXFIELD.HH.RH 5595 THEN FIXLANGUAGE;BEGIN LIGSTACK:=AVAIL; 5596 IF LIGSTACK=0 THEN LIGSTACK:=GETAVAIL ELSE BEGIN AVAIL:=MEM[LIGSTACK].HH 5597 .RH;MEM[LIGSTACK].HH.RH:=0;{DYNUSED:=DYNUSED+1;}END;END; 5598 MEM[LIGSTACK].HH.B0:=MAINF;CURL:=CURCHR+0;MEM[LIGSTACK].HH.B1:=CURL; 5599 CURQ:=CURLIST.TAILFIELD; 5600 IF CANCELBOUNDARY THEN BEGIN CANCELBOUNDARY:=FALSE;MAINK:=0; 5601 END ELSE MAINK:=BCHARLABEL[MAINF];IF MAINK=0 THEN GOTO 92;CURR:=CURL; 5602 CURL:=256;GOTO 111; 5603 80:{1035:}IF CURL<256 THEN BEGIN IF MEM[CURQ].HH.RH>0 THEN IF MEM[ 5604 CURLIST.TAILFIELD].HH.B1=HYPHENCHAR[MAINF]+0 THEN INSDISC:=TRUE; 5605 IF LIGATUREPRESENT THEN BEGIN MAINP:=NEWLIGATURE(MAINF,CURL,MEM[CURQ].HH 5606 .RH);IF LFTHIT THEN BEGIN MEM[MAINP].HH.B1:=2;LFTHIT:=FALSE;END; 5607 IF RTHIT THEN IF LIGSTACK=0 THEN BEGIN MEM[MAINP].HH.B1:=MEM[MAINP].HH. 5608 B1+1;RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=MAINP;CURLIST.TAILFIELD:=MAINP; 5609 LIGATUREPRESENT:=FALSE;END;IF INSDISC THEN BEGIN INSDISC:=FALSE; 5610 IF CURLIST.MODEFIELD>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWDISC; 5611 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END;END{:1035}; 5612 90:{1036:}IF LIGSTACK=0 THEN GOTO 21;CURQ:=CURLIST.TAILFIELD; 5613 CURL:=MEM[LIGSTACK].HH.B1;91:IF NOT(LIGSTACK>=HIMEMMIN)THEN GOTO 95; 5614 92:IF(CURCHR<FONTBC[MAINF])OR(CURCHR>FONTEC[MAINF])THEN BEGIN 5615 CHARWARNING(MAINF,CURCHR);BEGIN MEM[LIGSTACK].HH.RH:=AVAIL; 5616 AVAIL:=LIGSTACK;{DYNUSED:=DYNUSED-1;}END;GOTO 60;END; 5617 MAINI:=FONTINFO[CHARBASE[MAINF]+CURL].QQQQ; 5618 IF NOT(MAINI.B0>0)THEN BEGIN CHARWARNING(MAINF,CURCHR); 5619 BEGIN MEM[LIGSTACK].HH.RH:=AVAIL;AVAIL:=LIGSTACK;{DYNUSED:=DYNUSED-1;} 5620 END;GOTO 60;END;MEM[CURLIST.TAILFIELD].HH.RH:=LIGSTACK; 5621 CURLIST.TAILFIELD:=LIGSTACK{:1036};100:{1038:}GETNEXT; 5622 IF CURCMD=11 THEN GOTO 101;IF CURCMD=12 THEN GOTO 101; 5623 IF CURCMD=68 THEN GOTO 101;XTOKEN;IF CURCMD=11 THEN GOTO 101; 5624 IF CURCMD=12 THEN GOTO 101;IF CURCMD=68 THEN GOTO 101; 5625 IF CURCMD=16 THEN BEGIN SCANCHARNUM;CURCHR:=CURVAL;GOTO 101;END; 5626 IF CURCMD=65 THEN BCHAR:=256;CURR:=BCHAR;LIGSTACK:=0;GOTO 110; 5627 101:MAINS:=EQTB[4751+CURCHR].HH.RH; 5628 IF MAINS=1000 THEN CURLIST.AUXFIELD.HH.LH:=1000 ELSE IF MAINS<1000 THEN 5629 BEGIN IF MAINS>0 THEN CURLIST.AUXFIELD.HH.LH:=MAINS; 5630 END ELSE IF CURLIST.AUXFIELD.HH.LH<1000 THEN CURLIST.AUXFIELD.HH.LH:= 5631 1000 ELSE CURLIST.AUXFIELD.HH.LH:=MAINS;BEGIN LIGSTACK:=AVAIL; 5632 IF LIGSTACK=0 THEN LIGSTACK:=GETAVAIL ELSE BEGIN AVAIL:=MEM[LIGSTACK].HH 5633 .RH;MEM[LIGSTACK].HH.RH:=0;{DYNUSED:=DYNUSED+1;}END;END; 5634 MEM[LIGSTACK].HH.B0:=MAINF;CURR:=CURCHR+0;MEM[LIGSTACK].HH.B1:=CURR; 5635 IF CURR=FALSEBCHAR THEN CURR:=256{:1038}; 5636 110:{1039:}IF((MAINI.B2-0)MOD 4)<>1 THEN GOTO 80; 5637 IF CURR=256 THEN GOTO 80;MAINK:=LIGKERNBASE[MAINF]+MAINI.B3; 5638 MAINJ:=FONTINFO[MAINK].QQQQ;IF MAINJ.B0<=128 THEN GOTO 112; 5639 MAINK:=LIGKERNBASE[MAINF]+256*MAINJ.B2+MAINJ.B3+32768-256*(128); 5640 111:MAINJ:=FONTINFO[MAINK].QQQQ; 5641 112:IF MAINJ.B1=CURR THEN IF MAINJ.B0<=128 THEN{1040:}BEGIN IF MAINJ.B2 5642 >=128 THEN BEGIN IF CURL<256 THEN BEGIN IF MEM[CURQ].HH.RH>0 THEN IF MEM 5643 [CURLIST.TAILFIELD].HH.B1=HYPHENCHAR[MAINF]+0 THEN INSDISC:=TRUE; 5644 IF LIGATUREPRESENT THEN BEGIN MAINP:=NEWLIGATURE(MAINF,CURL,MEM[CURQ].HH 5645 .RH);IF LFTHIT THEN BEGIN MEM[MAINP].HH.B1:=2;LFTHIT:=FALSE;END; 5646 IF RTHIT THEN IF LIGSTACK=0 THEN BEGIN MEM[MAINP].HH.B1:=MEM[MAINP].HH. 5647 B1+1;RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=MAINP;CURLIST.TAILFIELD:=MAINP; 5648 LIGATUREPRESENT:=FALSE;END;IF INSDISC THEN BEGIN INSDISC:=FALSE; 5649 IF CURLIST.MODEFIELD>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWDISC; 5650 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END;END; 5651 BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(FONTINFO[KERNBASE[MAINF]+256 5652 *MAINJ.B2+MAINJ.B3].INT); 5653 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;GOTO 90;END; 5654 IF CURL=256 THEN LFTHIT:=TRUE ELSE IF LIGSTACK=0 THEN RTHIT:=TRUE; 5655 BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END; 5656 CASE MAINJ.B2 OF 1,5:BEGIN CURL:=MAINJ.B3; 5657 MAINI:=FONTINFO[CHARBASE[MAINF]+CURL].QQQQ;LIGATUREPRESENT:=TRUE;END; 5658 2,6:BEGIN CURR:=MAINJ.B3; 5659 IF LIGSTACK=0 THEN BEGIN LIGSTACK:=NEWLIGITEM(CURR);BCHAR:=256; 5660 END ELSE IF(LIGSTACK>=HIMEMMIN)THEN BEGIN MAINP:=LIGSTACK; 5661 LIGSTACK:=NEWLIGITEM(CURR);MEM[LIGSTACK+1].HH.RH:=MAINP; 5662 END ELSE MEM[LIGSTACK].HH.B1:=CURR;END;3:BEGIN CURR:=MAINJ.B3; 5663 MAINP:=LIGSTACK;LIGSTACK:=NEWLIGITEM(CURR);MEM[LIGSTACK].HH.RH:=MAINP; 5664 END;7,11:BEGIN IF CURL<256 THEN BEGIN IF MEM[CURQ].HH.RH>0 THEN IF MEM[ 5665 CURLIST.TAILFIELD].HH.B1=HYPHENCHAR[MAINF]+0 THEN INSDISC:=TRUE; 5666 IF LIGATUREPRESENT THEN BEGIN MAINP:=NEWLIGATURE(MAINF,CURL,MEM[CURQ].HH 5667 .RH);IF LFTHIT THEN BEGIN MEM[MAINP].HH.B1:=2;LFTHIT:=FALSE;END; 5668 IF FALSE THEN IF LIGSTACK=0 THEN BEGIN MEM[MAINP].HH.B1:=MEM[MAINP].HH. 5669 B1+1;RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=MAINP;CURLIST.TAILFIELD:=MAINP; 5670 LIGATUREPRESENT:=FALSE;END;IF INSDISC THEN BEGIN INSDISC:=FALSE; 5671 IF CURLIST.MODEFIELD>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWDISC; 5672 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END;END; 5673 CURQ:=CURLIST.TAILFIELD;CURL:=MAINJ.B3; 5674 MAINI:=FONTINFO[CHARBASE[MAINF]+CURL].QQQQ;LIGATUREPRESENT:=TRUE;END; 5675 ELSE BEGIN CURL:=MAINJ.B3;LIGATUREPRESENT:=TRUE; 5676 IF LIGSTACK=0 THEN GOTO 80 ELSE GOTO 91;END END; 5677 IF MAINJ.B2>4 THEN IF MAINJ.B2<>7 THEN GOTO 80; 5678 IF CURL<256 THEN GOTO 110;MAINK:=BCHARLABEL[MAINF];GOTO 111;END{:1040}; 5679 IF MAINJ.B0=0 THEN MAINK:=MAINK+1 ELSE BEGIN IF MAINJ.B0>=128 THEN GOTO 5680 80;MAINK:=MAINK+MAINJ.B0+1;END;GOTO 111{:1039}; 5681 95:{1037:}MAINP:=MEM[LIGSTACK+1].HH.RH; 5682 IF MAINP>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MAINP; 5683 CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;TEMPPTR:=LIGSTACK; 5684 LIGSTACK:=MEM[TEMPPTR].HH.RH;FREENODE(TEMPPTR,2); 5685 MAINI:=FONTINFO[CHARBASE[MAINF]+CURL].QQQQ;LIGATUREPRESENT:=TRUE; 5686 IF LIGSTACK=0 THEN IF MAINP>0 THEN GOTO 100 ELSE CURR:=BCHAR ELSE CURR:= 5687 MEM[LIGSTACK].HH.B1;GOTO 110{:1037}{:1034}; 5688 120:{1041:}IF EQTB[2894].HH.RH=0 THEN BEGIN{1042:}BEGIN MAINP:=FONTGLUE[ 5689 EQTB[3934].HH.RH];IF MAINP=0 THEN BEGIN MAINP:=NEWSPEC(0); 5690 MAINK:=PARAMBASE[EQTB[3934].HH.RH]+2; 5691 MEM[MAINP+1].INT:=FONTINFO[MAINK].INT; 5692 MEM[MAINP+2].INT:=FONTINFO[MAINK+1].INT; 5693 MEM[MAINP+3].INT:=FONTINFO[MAINK+2].INT; 5694 FONTGLUE[EQTB[3934].HH.RH]:=MAINP;END;END{:1042}; 5695 TEMPPTR:=NEWGLUE(MAINP);END ELSE TEMPPTR:=NEWPARAMGLUE(12); 5696 MEM[CURLIST.TAILFIELD].HH.RH:=TEMPPTR;CURLIST.TAILFIELD:=TEMPPTR; 5697 GOTO 60{:1041};10:END;{:1030}{1284:}PROCEDURE GIVEERRHELP; 5698 BEGIN TOKENSHOW(EQTB[3421].HH.RH);END; 5699 {:1284}{1303:}{524:}FUNCTION OPENFMTFILE:BOOLEAN;LABEL 40,10; 5700 VAR J:0..BUFSIZE;BEGIN J:=CURINPUT.LOCFIELD; 5701 IF BUFFER[CURINPUT.LOCFIELD]=38 THEN BEGIN CURINPUT.LOCFIELD:=CURINPUT. 5702 LOCFIELD+1;J:=CURINPUT.LOCFIELD;BUFFER[LAST]:=32; 5703 WHILE BUFFER[J]<>32 DO J:=J+1;PACKBUFFEREDNAME(0,CURINPUT.LOCFIELD,J-1); 5704 IF WOPENIN(FMTFILE)THEN GOTO 40; 5705 PACKBUFFEREDNAME(11,CURINPUT.LOCFIELD,J-1); 5706 IF WOPENIN(FMTFILE)THEN GOTO 40;; 5707 WRITELN(TERMOUT,'Sorry, I can''t find that format;',' will try PLAIN.'); 5708 ;END;PACKBUFFEREDNAME(16,1,0);IF NOT WOPENIN(FMTFILE)THEN BEGIN; 5709 WRITELN(TERMOUT,'I can''t find the PLAIN format file!'); 5710 OPENFMTFILE:=FALSE;GOTO 10;END;40:CURINPUT.LOCFIELD:=J; 5711 OPENFMTFILE:=TRUE;10:END;{:524}FUNCTION LOADFMTFILE:BOOLEAN; 5712 LABEL 6666,10;VAR J,K:INTEGER;P,Q:HALFWORD;X:INTEGER;W:FOURQUARTERS; 5713 BEGIN{1308:}READ(FMTFILE,X);IF X<>504454778 THEN GOTO 6666; 5714 BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END;IF X<>0 THEN GOTO 6666; 5715 BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END;IF X<>30000 THEN GOTO 6666; 5716 BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END;IF X<>6106 THEN GOTO 6666; 5717 BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END;IF X<>1777 THEN GOTO 6666; 5718 BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END;IF X<>307 THEN GOTO 6666{:1308}; 5719 {1310:}BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5720 IF X<0 THEN GOTO 6666;IF X>POOLSIZE THEN BEGIN; 5721 WRITELN(TERMOUT,'---! Must increase the ','string pool size');GOTO 6666; 5722 END ELSE POOLPTR:=X;END;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5723 IF X<0 THEN GOTO 6666;IF X>MAXSTRINGS THEN BEGIN; 5724 WRITELN(TERMOUT,'---! Must increase the ','max strings');GOTO 6666; 5725 END ELSE STRPTR:=X;END;FOR K:=0 TO STRPTR DO BEGIN BEGIN GET(FMTFILE); 5726 X:=FMTFILE^.INT;END; 5727 IF(X<0)OR(X>POOLPTR)THEN GOTO 6666 ELSE STRSTART[K]:=X;END;K:=0; 5728 WHILE K+4<POOLPTR DO BEGIN BEGIN GET(FMTFILE);W:=FMTFILE^.QQQQ;END; 5729 STRPOOL[K]:=W.B0-0;STRPOOL[K+1]:=W.B1-0;STRPOOL[K+2]:=W.B2-0; 5730 STRPOOL[K+3]:=W.B3-0;K:=K+4;END;K:=POOLPTR-4;BEGIN GET(FMTFILE); 5731 W:=FMTFILE^.QQQQ;END;STRPOOL[K]:=W.B0-0;STRPOOL[K+1]:=W.B1-0; 5732 STRPOOL[K+2]:=W.B2-0;STRPOOL[K+3]:=W.B3-0;INITSTRPTR:=STRPTR; 5733 INITPOOLPTR:=POOLPTR{:1310};{1312:}BEGIN BEGIN GET(FMTFILE); 5734 X:=FMTFILE^.INT;END; 5735 IF(X<1019)OR(X>29986)THEN GOTO 6666 ELSE LOMEMMAX:=X;END; 5736 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5737 IF(X<20)OR(X>LOMEMMAX)THEN GOTO 6666 ELSE ROVER:=X;END;P:=0;Q:=ROVER; 5738 REPEAT FOR K:=P TO Q+1 DO BEGIN GET(FMTFILE);MEM[K]:=FMTFILE^;END; 5739 P:=Q+MEM[Q].HH.LH; 5740 IF(P>LOMEMMAX)OR((Q>=MEM[Q+1].HH.RH)AND(MEM[Q+1].HH.RH<>ROVER))THEN GOTO 5741 6666;Q:=MEM[Q+1].HH.RH;UNTIL Q=ROVER; 5742 FOR K:=P TO LOMEMMAX DO BEGIN GET(FMTFILE);MEM[K]:=FMTFILE^;END; 5743 IF MEMMIN<-2 THEN BEGIN P:=MEM[ROVER+1].HH.LH;Q:=MEMMIN+1; 5744 MEM[MEMMIN].HH.RH:=0;MEM[MEMMIN].HH.LH:=0;MEM[P+1].HH.RH:=Q; 5745 MEM[ROVER+1].HH.LH:=Q;MEM[Q+1].HH.RH:=ROVER;MEM[Q+1].HH.LH:=P; 5746 MEM[Q].HH.RH:=65535;MEM[Q].HH.LH:=-0-Q;END;BEGIN BEGIN GET(FMTFILE); 5747 X:=FMTFILE^.INT;END; 5748 IF(X<LOMEMMAX+1)OR(X>29987)THEN GOTO 6666 ELSE HIMEMMIN:=X;END; 5749 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5750 IF(X<0)OR(X>30000)THEN GOTO 6666 ELSE AVAIL:=X;END;MEMEND:=30000; 5751 FOR K:=HIMEMMIN TO MEMEND DO BEGIN GET(FMTFILE);MEM[K]:=FMTFILE^;END; 5752 BEGIN GET(FMTFILE);VARUSED:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5753 DYNUSED:=FMTFILE^.INT;END{:1312};{1314:}{1317:}K:=1; 5754 REPEAT BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5755 IF(X<1)OR(K+X>6107)THEN GOTO 6666; 5756 FOR J:=K TO K+X-1 DO BEGIN GET(FMTFILE);EQTB[J]:=FMTFILE^;END;K:=K+X; 5757 BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5758 IF(X<0)OR(K+X>6107)THEN GOTO 6666; 5759 FOR J:=K TO K+X-1 DO EQTB[J]:=EQTB[K-1];K:=K+X;UNTIL K>6106{:1317}; 5760 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5761 IF(X<514)OR(X>2614)THEN GOTO 6666 ELSE PARLOC:=X;END; 5762 PARTOKEN:=4095+PARLOC;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5763 IF(X<514)OR(X>2614)THEN GOTO 6666 ELSE WRITELOC:=X;END; 5764 {1319:}BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5765 IF(X<514)OR(X>2614)THEN GOTO 6666 ELSE HASHUSED:=X;END;P:=513; 5766 REPEAT BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5767 IF(X<P+1)OR(X>HASHUSED)THEN GOTO 6666 ELSE P:=X;END;BEGIN GET(FMTFILE); 5768 HASH[P]:=FMTFILE^.HH;END;UNTIL P=HASHUSED; 5769 FOR P:=HASHUSED+1 TO 2880 DO BEGIN GET(FMTFILE);HASH[P]:=FMTFILE^.HH; 5770 END;BEGIN GET(FMTFILE);CSCOUNT:=FMTFILE^.INT;END{:1319}{:1314}; 5771 {1321:}BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5772 IF X<7 THEN GOTO 6666;IF X>FONTMEMSIZE THEN BEGIN; 5773 WRITELN(TERMOUT,'---! Must increase the ','font mem size');GOTO 6666; 5774 END ELSE FMEMPTR:=X;END;FOR K:=0 TO FMEMPTR-1 DO BEGIN GET(FMTFILE); 5775 FONTINFO[K]:=FMTFILE^;END;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5776 IF X<0 THEN GOTO 6666;IF X>FONTMAX THEN BEGIN; 5777 WRITELN(TERMOUT,'---! Must increase the ','font max');GOTO 6666; 5778 END ELSE FONTPTR:=X;END; 5779 FOR K:=0 TO FONTPTR DO{1323:}BEGIN BEGIN GET(FMTFILE); 5780 FONTCHECK[K]:=FMTFILE^.QQQQ;END;BEGIN GET(FMTFILE); 5781 FONTSIZE[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5782 FONTDSIZE[K]:=FMTFILE^.INT;END;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT; 5783 END;IF(X<0)OR(X>65535)THEN GOTO 6666 ELSE FONTPARAMS[K]:=X;END; 5784 BEGIN GET(FMTFILE);HYPHENCHAR[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5785 SKEWCHAR[K]:=FMTFILE^.INT;END;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT; 5786 END;IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE FONTNAME[K]:=X;END; 5787 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5788 IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE FONTAREA[K]:=X;END; 5789 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5790 IF(X<0)OR(X>255)THEN GOTO 6666 ELSE FONTBC[K]:=X;END; 5791 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5792 IF(X<0)OR(X>255)THEN GOTO 6666 ELSE FONTEC[K]:=X;END;BEGIN GET(FMTFILE); 5793 CHARBASE[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5794 WIDTHBASE[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5795 HEIGHTBASE[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5796 DEPTHBASE[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5797 ITALICBASE[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5798 LIGKERNBASE[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5799 KERNBASE[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5800 EXTENBASE[K]:=FMTFILE^.INT;END;BEGIN GET(FMTFILE); 5801 PARAMBASE[K]:=FMTFILE^.INT;END;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT; 5802 END;IF(X<0)OR(X>LOMEMMAX)THEN GOTO 6666 ELSE FONTGLUE[K]:=X;END; 5803 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5804 IF(X<0)OR(X>FMEMPTR-1)THEN GOTO 6666 ELSE BCHARLABEL[K]:=X;END; 5805 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5806 IF(X<0)OR(X>256)THEN GOTO 6666 ELSE FONTBCHAR[K]:=X;END; 5807 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5808 IF(X<0)OR(X>256)THEN GOTO 6666 ELSE FONTFALSEBCHAR[K]:=X;END; 5809 END{:1323}{:1321};{1325:}BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5810 IF(X<0)OR(X>307)THEN GOTO 6666 ELSE HYPHCOUNT:=X;END; 5811 FOR K:=1 TO HYPHCOUNT DO BEGIN BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT; 5812 END;IF(X<0)OR(X>307)THEN GOTO 6666 ELSE J:=X;END; 5813 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5814 IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE HYPHWORD[J]:=X;END; 5815 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5816 IF(X<0)OR(X>65535)THEN GOTO 6666 ELSE HYPHLIST[J]:=X;END;END; 5817 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END;IF X<0 THEN GOTO 6666; 5818 IF X>TRIESIZE THEN BEGIN; 5819 WRITELN(TERMOUT,'---! Must increase the ','trie size');GOTO 6666; 5820 END ELSE J:=X;END;TRIEMAX:=J;FOR K:=0 TO J DO BEGIN GET(FMTFILE); 5821 TRIE[K]:=FMTFILE^.HH;END;BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5822 IF X<0 THEN GOTO 6666;IF X>TRIEOPSIZE THEN BEGIN; 5823 WRITELN(TERMOUT,'---! Must increase the ','trie op size');GOTO 6666; 5824 END ELSE J:=X;END;TRIEOPPTR:=J; 5825 FOR K:=1 TO J DO BEGIN BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5826 IF(X<0)OR(X>63)THEN GOTO 6666 ELSE HYFDISTANCE[K]:=X;END; 5827 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5828 IF(X<0)OR(X>63)THEN GOTO 6666 ELSE HYFNUM[K]:=X;END; 5829 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5830 IF(X<0)OR(X>255)THEN GOTO 6666 ELSE HYFNEXT[K]:=X;END;END; 5831 FOR K:=0 TO 255 DO TRIEUSED[K]:=0;K:=256; 5832 WHILE J>0 DO BEGIN BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5833 IF(X<0)OR(X>K-1)THEN GOTO 6666 ELSE K:=X;END;BEGIN BEGIN GET(FMTFILE); 5834 X:=FMTFILE^.INT;END;IF(X<1)OR(X>J)THEN GOTO 6666 ELSE X:=X;END; 5835 TRIEUSED[K]:=X+0;J:=J-X;OPSTART[K]:=J-0;END;TRIENOTREADY:=FALSE{:1325}; 5836 {1327:}BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5837 IF(X<0)OR(X>3)THEN GOTO 6666 ELSE INTERACTION:=X;END; 5838 BEGIN BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5839 IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE FORMATIDENT:=X;END; 5840 BEGIN GET(FMTFILE);X:=FMTFILE^.INT;END; 5841 IF(X<>69069)OR EOF(FMTFILE)THEN GOTO 6666{:1327};LOADFMTFILE:=TRUE; 5842 GOTO 10;6666:; 5843 WRITELN(TERMOUT,'(Fatal format file error; I''m stymied)'); 5844 LOADFMTFILE:=FALSE;10:END; 5845 {:1303}{1330:}{1333:}PROCEDURE CLOSEFILESANDTERMINATE;VAR K:INTEGER; 5846 BEGIN{1378:}FOR K:=0 TO 15 DO IF WRITEOPEN[K]THEN ACLOSE(WRITEFILE[K]) 5847 {:1378};EQTB[5312].INT:=-1; 5848 {IF EQTB[5294].INT>0 THEN[1334:]IF LOGOPENED THEN BEGIN WRITELN(LOGFILE, 5849 ' ');WRITELN(LOGFILE,'Here is how much of TeX''s memory',' you used:'); 5850 WRITE(LOGFILE,' ',STRPTR-INITSTRPTR:1,' string'); 5851 IF STRPTR<>INITSTRPTR+1 THEN WRITE(LOGFILE,'s'); 5852 WRITELN(LOGFILE,' out of ',MAXSTRINGS-INITSTRPTR:1); 5853 WRITELN(LOGFILE,' ',POOLPTR-INITPOOLPTR:1,' string characters out of ', 5854 POOLSIZE-INITPOOLPTR:1); 5855 WRITELN(LOGFILE,' ',LOMEMMAX-MEMMIN+MEMEND-HIMEMMIN+2:1, 5856 ' words of memory out of ',MEMEND+1-MEMMIN:1); 5857 WRITELN(LOGFILE,' ',CSCOUNT:1,' multiletter control sequences out of ', 5858 2100:1); 5859 WRITE(LOGFILE,' ',FMEMPTR:1,' words of font info for ',FONTPTR-0:1, 5860 ' font');IF FONTPTR<>1 THEN WRITE(LOGFILE,'s'); 5861 WRITELN(LOGFILE,', out of ',FONTMEMSIZE:1,' for ',FONTMAX-0:1); 5862 WRITE(LOGFILE,' ',HYPHCOUNT:1,' hyphenation exception'); 5863 IF HYPHCOUNT<>1 THEN WRITE(LOGFILE,'s'); 5864 WRITELN(LOGFILE,' out of ',307:1); 5865 WRITELN(LOGFILE,' ',MAXINSTACK:1,'i,',MAXNESTSTACK:1,'n,',MAXPARAMSTACK: 5866 1,'p,',MAXBUFSTACK+1:1,'b,',MAXSAVESTACK+6:1,'s stack positions out of ' 5867 ,STACKSIZE:1,'i,',NESTSIZE:1,'n,',PARAMSIZE:1,'p,',BUFSIZE:1,'b,', 5868 SAVESIZE:1,'s');END[:1334];}; 5869 {642:}WHILE CURS>-1 DO BEGIN IF CURS>0 THEN BEGIN DVIBUF[DVIPTR]:=142; 5870 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP; 5871 END ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=140;DVIPTR:=DVIPTR+1; 5872 IF DVIPTR=DVILIMIT THEN DVISWAP;END;TOTALPAGES:=TOTALPAGES+1;END; 5873 CURS:=CURS-1;END; 5874 IF TOTALPAGES=0 THEN PRINTNL(837)ELSE BEGIN BEGIN DVIBUF[DVIPTR]:=248; 5875 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(LASTBOP); 5876 LASTBOP:=DVIOFFSET+DVIPTR-5;DVIFOUR(25400000);DVIFOUR(473628672); 5877 PREPAREMAG;DVIFOUR(EQTB[5280].INT);DVIFOUR(MAXV);DVIFOUR(MAXH); 5878 BEGIN DVIBUF[DVIPTR]:=MAXPUSH DIV 256;DVIPTR:=DVIPTR+1; 5879 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 5880 BEGIN DVIBUF[DVIPTR]:=MAXPUSH MOD 256;DVIPTR:=DVIPTR+1; 5881 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 5882 BEGIN DVIBUF[DVIPTR]:=(TOTALPAGES DIV 256)MOD 256;DVIPTR:=DVIPTR+1; 5883 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 5884 BEGIN DVIBUF[DVIPTR]:=TOTALPAGES MOD 256;DVIPTR:=DVIPTR+1; 5885 IF DVIPTR=DVILIMIT THEN DVISWAP;END; 5886 {643:}WHILE FONTPTR>0 DO BEGIN IF FONTUSED[FONTPTR]THEN DVIFONTDEF( 5887 FONTPTR);FONTPTR:=FONTPTR-1;END{:643};BEGIN DVIBUF[DVIPTR]:=249; 5888 DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(LASTBOP); 5889 BEGIN DVIBUF[DVIPTR]:=2;DVIPTR:=DVIPTR+1; 5890 IF DVIPTR=DVILIMIT THEN DVISWAP;END;K:=4+((DVIBUFSIZE-DVIPTR)MOD 4); 5891 WHILE K>0 DO BEGIN BEGIN DVIBUF[DVIPTR]:=223;DVIPTR:=DVIPTR+1; 5892 IF DVIPTR=DVILIMIT THEN DVISWAP;END;K:=K-1;END; 5893 {599:}IF DVILIMIT=HALFBUF THEN WRITEDVI(HALFBUF,DVIBUFSIZE-1); 5894 IF DVIPTR>0 THEN WRITEDVI(0,DVIPTR-1){:599};PRINTNL(838); 5895 SLOWPRINT(OUTPUTFILENAME);PRINT(286);PRINTINT(TOTALPAGES);PRINT(839); 5896 IF TOTALPAGES<>1 THEN PRINTCHAR(115);PRINT(840); 5897 PRINTINT(DVIOFFSET+DVIPTR);PRINT(841);BCLOSE(DVIFILE);END{:642}; 5898 IF LOGOPENED THEN BEGIN WRITELN(LOGFILE);ACLOSE(LOGFILE); 5899 SELECTOR:=SELECTOR-2;IF SELECTOR=17 THEN BEGIN PRINTNL(1275); 5900 SLOWPRINT(LOGNAME);PRINTCHAR(46);END;END;END; 5901 {:1333}{1335:}PROCEDURE FINALCLEANUP;LABEL 10;VAR C:SMALLNUMBER; 5902 BEGIN C:=CURCHR;IF C<>1 THEN EQTB[5312].INT:=-1; 5903 IF JOBNAME=0 THEN OPENLOGFILE; 5904 WHILE INPUTPTR>0 DO IF CURINPUT.STATEFIELD=0 THEN ENDTOKENLIST ELSE 5905 ENDFILEREADING;WHILE OPENPARENS>0 DO BEGIN PRINT(1276); 5906 OPENPARENS:=OPENPARENS-1;END;IF CURLEVEL>1 THEN BEGIN PRINTNL(40); 5907 PRINTESC(1277);PRINT(1278);PRINTINT(CURLEVEL-1);PRINTCHAR(41);END; 5908 WHILE CONDPTR<>0 DO BEGIN PRINTNL(40);PRINTESC(1277);PRINT(1279); 5909 PRINTCMDCHR(105,CURIF);IF IFLINE<>0 THEN BEGIN PRINT(1280); 5910 PRINTINT(IFLINE);END;PRINT(1281);IFLINE:=MEM[CONDPTR+1].INT; 5911 CURIF:=MEM[CONDPTR].HH.B1;TEMPPTR:=CONDPTR;CONDPTR:=MEM[CONDPTR].HH.RH; 5912 FREENODE(TEMPPTR,2);END; 5913 IF HISTORY<>0 THEN IF((HISTORY=1)OR(INTERACTION<3))THEN IF SELECTOR=19 5914 THEN BEGIN SELECTOR:=17;PRINTNL(1282);SELECTOR:=19;END; 5915 IF C=1 THEN BEGIN FOR C:=0 TO 4 DO IF CURMARK[C]<>0 THEN DELETETOKENREF( 5916 CURMARK[C]);IF LASTGLUE<>65535 THEN DELETEGLUEREF(LASTGLUE); 5917 STOREFMTFILE;GOTO 10;PRINTNL(1283);GOTO 10;END;10:END; 5918 {:1335}{1336:}PROCEDURE INITPRIM;BEGIN NONEWCONTROLSEQUENCE:=FALSE; 5919 {226:}PRIMITIVE(376,75,2882);PRIMITIVE(377,75,2883); 5920 PRIMITIVE(378,75,2884);PRIMITIVE(379,75,2885);PRIMITIVE(380,75,2886); 5921 PRIMITIVE(381,75,2887);PRIMITIVE(382,75,2888);PRIMITIVE(383,75,2889); 5922 PRIMITIVE(384,75,2890);PRIMITIVE(385,75,2891);PRIMITIVE(386,75,2892); 5923 PRIMITIVE(387,75,2893);PRIMITIVE(388,75,2894);PRIMITIVE(389,75,2895); 5924 PRIMITIVE(390,75,2896);PRIMITIVE(391,76,2897);PRIMITIVE(392,76,2898); 5925 PRIMITIVE(393,76,2899);{:226}{230:}PRIMITIVE(398,72,3413); 5926 PRIMITIVE(399,72,3414);PRIMITIVE(400,72,3415);PRIMITIVE(401,72,3416); 5927 PRIMITIVE(402,72,3417);PRIMITIVE(403,72,3418);PRIMITIVE(404,72,3419); 5928 PRIMITIVE(405,72,3420);PRIMITIVE(406,72,3421); 5929 {:230}{238:}PRIMITIVE(420,73,5263);PRIMITIVE(421,73,5264); 5930 PRIMITIVE(422,73,5265);PRIMITIVE(423,73,5266);PRIMITIVE(424,73,5267); 5931 PRIMITIVE(425,73,5268);PRIMITIVE(426,73,5269);PRIMITIVE(427,73,5270); 5932 PRIMITIVE(428,73,5271);PRIMITIVE(429,73,5272);PRIMITIVE(430,73,5273); 5933 PRIMITIVE(431,73,5274);PRIMITIVE(432,73,5275);PRIMITIVE(433,73,5276); 5934 PRIMITIVE(434,73,5277);PRIMITIVE(435,73,5278);PRIMITIVE(436,73,5279); 5935 PRIMITIVE(437,73,5280);PRIMITIVE(438,73,5281);PRIMITIVE(439,73,5282); 5936 PRIMITIVE(440,73,5283);PRIMITIVE(441,73,5284);PRIMITIVE(442,73,5285); 5937 PRIMITIVE(443,73,5286);PRIMITIVE(444,73,5287);PRIMITIVE(445,73,5288); 5938 PRIMITIVE(446,73,5289);PRIMITIVE(447,73,5290);PRIMITIVE(448,73,5291); 5939 PRIMITIVE(449,73,5292);PRIMITIVE(450,73,5293);PRIMITIVE(451,73,5294); 5940 PRIMITIVE(452,73,5295);PRIMITIVE(453,73,5296);PRIMITIVE(454,73,5297); 5941 PRIMITIVE(455,73,5298);PRIMITIVE(456,73,5299);PRIMITIVE(457,73,5300); 5942 PRIMITIVE(458,73,5301);PRIMITIVE(459,73,5302);PRIMITIVE(460,73,5303); 5943 PRIMITIVE(461,73,5304);PRIMITIVE(462,73,5305);PRIMITIVE(463,73,5306); 5944 PRIMITIVE(464,73,5307);PRIMITIVE(465,73,5308);PRIMITIVE(466,73,5309); 5945 PRIMITIVE(467,73,5310);PRIMITIVE(468,73,5311);PRIMITIVE(469,73,5312); 5946 PRIMITIVE(470,73,5313);PRIMITIVE(471,73,5314);PRIMITIVE(472,73,5315); 5947 PRIMITIVE(473,73,5316);PRIMITIVE(474,73,5317); 5948 {:238}{248:}PRIMITIVE(478,74,5830);PRIMITIVE(479,74,5831); 5949 PRIMITIVE(480,74,5832);PRIMITIVE(481,74,5833);PRIMITIVE(482,74,5834); 5950 PRIMITIVE(483,74,5835);PRIMITIVE(484,74,5836);PRIMITIVE(485,74,5837); 5951 PRIMITIVE(486,74,5838);PRIMITIVE(487,74,5839);PRIMITIVE(488,74,5840); 5952 PRIMITIVE(489,74,5841);PRIMITIVE(490,74,5842);PRIMITIVE(491,74,5843); 5953 PRIMITIVE(492,74,5844);PRIMITIVE(493,74,5845);PRIMITIVE(494,74,5846); 5954 PRIMITIVE(495,74,5847);PRIMITIVE(496,74,5848);PRIMITIVE(497,74,5849); 5955 PRIMITIVE(498,74,5850);{:248}{265:}PRIMITIVE(32,64,0); 5956 PRIMITIVE(47,44,0);PRIMITIVE(508,45,0);PRIMITIVE(509,90,0); 5957 PRIMITIVE(510,40,0);PRIMITIVE(511,41,0);PRIMITIVE(512,61,0); 5958 PRIMITIVE(513,16,0);PRIMITIVE(504,107,0);PRIMITIVE(514,15,0); 5959 PRIMITIVE(515,92,0);PRIMITIVE(505,67,0);PRIMITIVE(516,62,0); 5960 HASH[2616].RH:=516;EQTB[2616]:=EQTB[CURVAL];PRIMITIVE(517,102,0); 5961 PRIMITIVE(518,88,0);PRIMITIVE(519,77,0);PRIMITIVE(520,32,0); 5962 PRIMITIVE(521,36,0);PRIMITIVE(522,39,0);PRIMITIVE(330,37,0); 5963 PRIMITIVE(351,18,0);PRIMITIVE(523,46,0);PRIMITIVE(524,17,0); 5964 PRIMITIVE(525,54,0);PRIMITIVE(526,91,0);PRIMITIVE(527,34,0); 5965 PRIMITIVE(528,65,0);PRIMITIVE(529,103,0);PRIMITIVE(335,55,0); 5966 PRIMITIVE(530,63,0);PRIMITIVE(408,84,0);PRIMITIVE(531,42,0); 5967 PRIMITIVE(532,80,0);PRIMITIVE(533,66,0);PRIMITIVE(534,96,0); 5968 PRIMITIVE(535,0,256);HASH[2621].RH:=535;EQTB[2621]:=EQTB[CURVAL]; 5969 PRIMITIVE(536,98,0);PRIMITIVE(537,109,0);PRIMITIVE(407,71,0); 5970 PRIMITIVE(352,38,0);PRIMITIVE(538,33,0);PRIMITIVE(539,56,0); 5971 PRIMITIVE(540,35,0);{:265}{334:}PRIMITIVE(597,13,256);PARLOC:=CURVAL; 5972 PARTOKEN:=4095+PARLOC;{:334}{376:}PRIMITIVE(629,104,0); 5973 PRIMITIVE(630,104,1);{:376}{384:}PRIMITIVE(631,110,0); 5974 PRIMITIVE(632,110,1);PRIMITIVE(633,110,2);PRIMITIVE(634,110,3); 5975 PRIMITIVE(635,110,4);{:384}{411:}PRIMITIVE(476,89,0); 5976 PRIMITIVE(500,89,1);PRIMITIVE(395,89,2);PRIMITIVE(396,89,3); 5977 {:411}{416:}PRIMITIVE(668,79,102);PRIMITIVE(669,79,1); 5978 PRIMITIVE(670,82,0);PRIMITIVE(671,82,1);PRIMITIVE(672,83,1); 5979 PRIMITIVE(673,83,3);PRIMITIVE(674,83,2);PRIMITIVE(675,70,0); 5980 PRIMITIVE(676,70,1);PRIMITIVE(677,70,2);PRIMITIVE(678,70,3); 5981 PRIMITIVE(679,70,4);{:416}{468:}PRIMITIVE(735,108,0); 5982 PRIMITIVE(736,108,1);PRIMITIVE(737,108,2);PRIMITIVE(738,108,3); 5983 PRIMITIVE(739,108,4);PRIMITIVE(740,108,5); 5984 {:468}{487:}PRIMITIVE(757,105,0);PRIMITIVE(758,105,1); 5985 PRIMITIVE(759,105,2);PRIMITIVE(760,105,3);PRIMITIVE(761,105,4); 5986 PRIMITIVE(762,105,5);PRIMITIVE(763,105,6);PRIMITIVE(764,105,7); 5987 PRIMITIVE(765,105,8);PRIMITIVE(766,105,9);PRIMITIVE(767,105,10); 5988 PRIMITIVE(768,105,11);PRIMITIVE(769,105,12);PRIMITIVE(770,105,13); 5989 PRIMITIVE(771,105,14);PRIMITIVE(772,105,15);PRIMITIVE(773,105,16); 5990 {:487}{491:}PRIMITIVE(774,106,2);HASH[2618].RH:=774; 5991 EQTB[2618]:=EQTB[CURVAL];PRIMITIVE(775,106,4);PRIMITIVE(776,106,3); 5992 {:491}{553:}PRIMITIVE(801,87,0);HASH[2624].RH:=801; 5993 EQTB[2624]:=EQTB[CURVAL];{:553}{780:}PRIMITIVE(898,4,256); 5994 PRIMITIVE(899,5,257);HASH[2615].RH:=899;EQTB[2615]:=EQTB[CURVAL]; 5995 PRIMITIVE(900,5,258);HASH[2619].RH:=901;HASH[2620].RH:=901; 5996 EQTB[2620].HH.B0:=9;EQTB[2620].HH.RH:=29989;EQTB[2620].HH.B1:=1; 5997 EQTB[2619]:=EQTB[2620];EQTB[2619].HH.B0:=115; 5998 {:780}{983:}PRIMITIVE(970,81,0);PRIMITIVE(971,81,1);PRIMITIVE(972,81,2); 5999 PRIMITIVE(973,81,3);PRIMITIVE(974,81,4);PRIMITIVE(975,81,5); 6000 PRIMITIVE(976,81,6);PRIMITIVE(977,81,7); 6001 {:983}{1052:}PRIMITIVE(1025,14,0);PRIMITIVE(1026,14,1); 6002 {:1052}{1058:}PRIMITIVE(1027,26,4);PRIMITIVE(1028,26,0); 6003 PRIMITIVE(1029,26,1);PRIMITIVE(1030,26,2);PRIMITIVE(1031,26,3); 6004 PRIMITIVE(1032,27,4);PRIMITIVE(1033,27,0);PRIMITIVE(1034,27,1); 6005 PRIMITIVE(1035,27,2);PRIMITIVE(1036,27,3);PRIMITIVE(336,28,5); 6006 PRIMITIVE(340,29,1);PRIMITIVE(342,30,99); 6007 {:1058}{1071:}PRIMITIVE(1054,21,1);PRIMITIVE(1055,21,0); 6008 PRIMITIVE(1056,22,1);PRIMITIVE(1057,22,0);PRIMITIVE(409,20,0); 6009 PRIMITIVE(1058,20,1);PRIMITIVE(1059,20,2);PRIMITIVE(965,20,3); 6010 PRIMITIVE(1060,20,4);PRIMITIVE(967,20,5);PRIMITIVE(1061,20,106); 6011 PRIMITIVE(1062,31,99);PRIMITIVE(1063,31,100);PRIMITIVE(1064,31,101); 6012 PRIMITIVE(1065,31,102);{:1071}{1088:}PRIMITIVE(1080,43,1); 6013 PRIMITIVE(1081,43,0);{:1088}{1107:}PRIMITIVE(1090,25,12); 6014 PRIMITIVE(1091,25,11);PRIMITIVE(1092,25,10);PRIMITIVE(1093,23,0); 6015 PRIMITIVE(1094,23,1);PRIMITIVE(1095,24,0);PRIMITIVE(1096,24,1); 6016 {:1107}{1114:}PRIMITIVE(45,47,1);PRIMITIVE(349,47,0); 6017 {:1114}{1141:}PRIMITIVE(1127,48,0);PRIMITIVE(1128,48,1); 6018 {:1141}{1156:}PRIMITIVE(866,50,16);PRIMITIVE(867,50,17); 6019 PRIMITIVE(868,50,18);PRIMITIVE(869,50,19);PRIMITIVE(870,50,20); 6020 PRIMITIVE(871,50,21);PRIMITIVE(872,50,22);PRIMITIVE(873,50,23); 6021 PRIMITIVE(875,50,26);PRIMITIVE(874,50,27);PRIMITIVE(1129,51,0); 6022 PRIMITIVE(878,51,1);PRIMITIVE(879,51,2); 6023 {:1156}{1169:}PRIMITIVE(861,53,0);PRIMITIVE(862,53,2); 6024 PRIMITIVE(863,53,4);PRIMITIVE(864,53,6); 6025 {:1169}{1178:}PRIMITIVE(1147,52,0);PRIMITIVE(1148,52,1); 6026 PRIMITIVE(1149,52,2);PRIMITIVE(1150,52,3);PRIMITIVE(1151,52,4); 6027 PRIMITIVE(1152,52,5);{:1178}{1188:}PRIMITIVE(876,49,30); 6028 PRIMITIVE(877,49,31);HASH[2617].RH:=877;EQTB[2617]:=EQTB[CURVAL]; 6029 {:1188}{1208:}PRIMITIVE(1171,93,1);PRIMITIVE(1172,93,2); 6030 PRIMITIVE(1173,93,4);PRIMITIVE(1174,97,0);PRIMITIVE(1175,97,1); 6031 PRIMITIVE(1176,97,2);PRIMITIVE(1177,97,3); 6032 {:1208}{1219:}PRIMITIVE(1191,94,0);PRIMITIVE(1192,94,1); 6033 {:1219}{1222:}PRIMITIVE(1193,95,0);PRIMITIVE(1194,95,1); 6034 PRIMITIVE(1195,95,2);PRIMITIVE(1196,95,3);PRIMITIVE(1197,95,4); 6035 PRIMITIVE(1198,95,5);PRIMITIVE(1199,95,6); 6036 {:1222}{1230:}PRIMITIVE(415,85,3983);PRIMITIVE(419,85,5007); 6037 PRIMITIVE(416,85,4239);PRIMITIVE(417,85,4495);PRIMITIVE(418,85,4751); 6038 PRIMITIVE(477,85,5574);PRIMITIVE(412,86,3935);PRIMITIVE(413,86,3951); 6039 PRIMITIVE(414,86,3967);{:1230}{1250:}PRIMITIVE(941,99,0); 6040 PRIMITIVE(953,99,1);{:1250}{1254:}PRIMITIVE(1217,78,0); 6041 PRIMITIVE(1218,78,1);{:1254}{1262:}PRIMITIVE(274,100,0); 6042 PRIMITIVE(275,100,1);PRIMITIVE(276,100,2);PRIMITIVE(1227,100,3); 6043 {:1262}{1272:}PRIMITIVE(1228,60,1);PRIMITIVE(1229,60,0); 6044 {:1272}{1277:}PRIMITIVE(1230,58,0);PRIMITIVE(1231,58,1); 6045 {:1277}{1286:}PRIMITIVE(1237,57,4239);PRIMITIVE(1238,57,4495); 6046 {:1286}{1291:}PRIMITIVE(1239,19,0);PRIMITIVE(1240,19,1); 6047 PRIMITIVE(1241,19,2);PRIMITIVE(1242,19,3); 6048 {:1291}{1344:}PRIMITIVE(1285,59,0);PRIMITIVE(594,59,1);WRITELOC:=CURVAL; 6049 PRIMITIVE(1286,59,2);PRIMITIVE(1287,59,3);PRIMITIVE(1288,59,4); 6050 PRIMITIVE(1289,59,5);{:1344};NONEWCONTROLSEQUENCE:=TRUE;END; 6051 {:1336}{1338:}{PROCEDURE DEBUGHELP;LABEL 888,10;VAR K,L,M,N:INTEGER; 6052 BEGIN;WHILE TRUE DO BEGIN;PRINTNL(1284);;READ(TERMIN,M); 6053 IF M<0 THEN GOTO 10 ELSE IF M=0 THEN BEGIN GOTO 888;888:M:=0; 6054 ['BREAKPOINT']END ELSE BEGIN READ(TERMIN,N); 6055 CASE M OF[1339:]1:PRINTWORD(MEM[N]);2:PRINTINT(MEM[N].HH.LH); 6056 3:PRINTINT(MEM[N].HH.RH);4:PRINTWORD(EQTB[N]);5:PRINTWORD(FONTINFO[N]); 6057 6:PRINTWORD(SAVESTACK[N]);7:SHOWBOX(N);8:BEGIN BREADTHMAX:=10000; 6058 DEPTHTHRESHOLD:=POOLSIZE-POOLPTR-10;SHOWNODELIST(N);END; 6059 9:SHOWTOKENLIST(N,0,1000);10:SLOWPRINT(N);11:CHECKMEM(N>0); 6060 12:SEARCHMEM(N);13:BEGIN READ(TERMIN,L);PRINTCMDCHR(N,L);END; 6061 14:FOR K:=0 TO N DO PRINT(BUFFER[K]);15:BEGIN FONTINSHORTDISPLAY:=0; 6062 SHORTDISPLAY(N);END;16:PANICKING:=NOT PANICKING; 6063 [:1339]ELSE PRINT(63)END;END;END;10:END;} 6064 {:1338}{:1330}{1332:}BEGIN HISTORY:=3;REWRITE(TERMOUT,'TTY:','/O'); 6065 IF READYALREADY=314159 THEN GOTO 1;{14:}BAD:=0; 6066 IF(HALFERRORLINE<30)OR(HALFERRORLINE>ERRORLINE-15)THEN BAD:=1; 6067 IF MAXPRINTLINE<60 THEN BAD:=2;IF DVIBUFSIZE MOD 8<>0 THEN BAD:=3; 6068 IF 1100>30000 THEN BAD:=4;IF 1777>2100 THEN BAD:=5; 6069 IF MAXINOPEN>=128 THEN BAD:=6;IF 30000<267 THEN BAD:=7; 6070 {:14}{111:}IF(MEMMIN<>0)OR(MEMMAX<>30000)THEN BAD:=10; 6071 IF(MEMMIN>0)OR(MEMMAX<30000)THEN BAD:=10;IF(0>0)OR(255<127)THEN BAD:=11; 6072 IF(0>0)OR(65535<32767)THEN BAD:=12;IF(0<0)OR(255>65535)THEN BAD:=13; 6073 IF(MEMMIN<0)OR(MEMMAX>=65535)OR(-0-MEMMIN>65536)THEN BAD:=14; 6074 IF(0<0)OR(FONTMAX>255)THEN BAD:=15;IF FONTMAX>256 THEN BAD:=16; 6075 IF(SAVESIZE>65535)OR(MAXSTRINGS>65535)THEN BAD:=17; 6076 IF BUFSIZE>65535 THEN BAD:=18;IF 255<255 THEN BAD:=19; 6077 {:111}{290:}IF 6976>65535 THEN BAD:=21; 6078 {:290}{522:}IF 20>FILENAMESIZE THEN BAD:=31; 6079 {:522}{1249:}IF 2*65535<30000-MEMMIN THEN BAD:=41; 6080 {:1249}IF BAD>0 THEN BEGIN WRITELN(TERMOUT, 6081 'Ouch---my internal constants have been clobbered!','---case ',BAD:1); 6082 GOTO 9999;END;INITIALIZE;IF NOT GETSTRINGSSTARTED THEN GOTO 9999; 6083 INITPRIM;INITSTRPTR:=STRPTR;INITPOOLPTR:=POOLPTR;FIXDATEANDTIME; 6084 READYALREADY:=314159;1:{55:}SELECTOR:=17;TALLY:=0;TERMOFFSET:=0; 6085 FILEOFFSET:=0; 6086 {:55}{61:}WRITE(TERMOUT,'This is TeX, Version 3.141592653'); 6087 IF FORMATIDENT=0 THEN WRITELN(TERMOUT,' (no format preloaded)')ELSE 6088 BEGIN SLOWPRINT(FORMATIDENT);PRINTLN;END;;{:61}{528:}JOBNAME:=0; 6089 NAMEINPROGRESS:=FALSE;LOGOPENED:=FALSE;{:528}{533:}OUTPUTFILENAME:=0; 6090 {:533};{1337:}BEGIN{331:}BEGIN INPUTPTR:=0;MAXINSTACK:=0;INOPEN:=0; 6091 OPENPARENS:=0;MAXBUFSTACK:=0;PARAMPTR:=0;MAXPARAMSTACK:=0; 6092 FIRST:=BUFSIZE;REPEAT BUFFER[FIRST]:=0;FIRST:=FIRST-1;UNTIL FIRST=0; 6093 SCANNERSTATUS:=0;WARNINGINDEX:=0;FIRST:=1;CURINPUT.STATEFIELD:=33; 6094 CURINPUT.STARTFIELD:=1;CURINPUT.INDEXFIELD:=0;LINE:=0; 6095 CURINPUT.NAMEFIELD:=0;FORCEEOF:=FALSE;ALIGNSTATE:=1000000; 6096 IF NOT INITTERMINAL THEN GOTO 9999;CURINPUT.LIMITFIELD:=LAST; 6097 FIRST:=LAST+1;END{:331}; 6098 IF(FORMATIDENT=0)OR(BUFFER[CURINPUT.LOCFIELD]=38)THEN BEGIN IF 6099 FORMATIDENT<>0 THEN INITIALIZE;IF NOT OPENFMTFILE THEN GOTO 9999; 6100 IF NOT LOADFMTFILE THEN BEGIN WCLOSE(FMTFILE);GOTO 9999;END; 6101 WCLOSE(FMTFILE); 6102 WHILE(CURINPUT.LOCFIELD<CURINPUT.LIMITFIELD)AND(BUFFER[CURINPUT.LOCFIELD 6103 ]=32)DO CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;END; 6104 IF(EQTB[5311].INT<0)OR(EQTB[5311].INT>255)THEN CURINPUT.LIMITFIELD:= 6105 CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[5311].INT; 6106 FIXDATEANDTIME;{765:}MAGICOFFSET:=STRSTART[892]-9*16{:765}; 6107 {75:}IF INTERACTION=0 THEN SELECTOR:=16 ELSE SELECTOR:=17{:75}; 6108 IF(CURINPUT.LOCFIELD<CURINPUT.LIMITFIELD)AND(EQTB[3983+BUFFER[CURINPUT. 6109 LOCFIELD]].HH.RH<>0)THEN STARTINPUT;END{:1337};HISTORY:=0;MAINCONTROL; 6110 FINALCLEANUP;CLOSEFILESANDTERMINATE;9999:READYALREADY:=0;END.{:1332}