{4:}{9:} [inherit('sys$library:starlet')] {:9}PROGRAM ETEX;LABEL{6:}1,9998,9999;{:6}CONST{11:}MEMMAX=327144; MEMMIN=0;BUFSIZE=2048;SIZEINPUTLINE=133;ERRORLINE=79;HALFERRORLINE=50; MAXPRINTLINE=79;STACKSIZE=200;MAXINOPEN=12;FONTMAX=255; FONTMEMSIZE=81920;PARAMSIZE=60;NESTSIZE=40;MAXSTRINGS=15400; STRINGVACANCIES=160000;POOLSIZE=186000;SAVESIZE=2000;TRIESIZE=45000; TRIEOPSIZE=1000;DVIBUFSIZE=1024;VAXBLOCKLENGTH=512;FILENAMESIZE=255; POOLFNAME='ETEX.POOL';{:11}TYPE{18:}ASCIICODE=0..255;{:18}{25:} EIGHTBITS=0..255;ALPHAFILE= text ; BYTEBLOCK=PACKED ARRAY[0..VAXBLOCKLENGTH-1]OF EIGHTBITS; BYTEFILE=PACKED FILE OF BYTEBLOCK;{:25}{38:}POOLPOINTER=0..POOLSIZE; STRNUMBER=0..MAXSTRINGS;PACKEDASCIICODE=0..255;{:38}{101:} SCALED=INTEGER;NONNEGATIVEINTEGER=0..2147483647;SMALLNUMBER=0..63;{:101} {109:}GLUERATIO=REAL;{:109}{113:}QUARTERWORD=0..511;HALFWORD=0..327145; TWOCHOICES=1..2;FOURCHOICES=1..4;TWOHALVES=PACKED RECORD RH:HALFWORD; CASE TWOCHOICES OF 1:(LH:HALFWORD);2:(B0:QUARTERWORD;B1:QUARTERWORD); END;FOURQUARTERS=PACKED RECORD B0:QUARTERWORD;B1:QUARTERWORD; B2:QUARTERWORD;B3:QUARTERWORD;END; MEMORYWORD=PACKED RECORD CASE FOURCHOICES OF 1:(INT:INTEGER); 2:(GR:GLUERATIO);3:(HH:TWOHALVES);4:(QQQQ:FOURQUARTERS);END; WORDBLOCK=PACKED ARRAY[0..VAXBLOCKLENGTH-1]OF MEMORYWORD; WORDFILE=PACKED FILE OF WORDBLOCK;{:113}{150:}GLUEORD=0..3;{:150}{212:} LISTSTATERECORD=RECORD MODEFIELD:-203..203;HEADFIELD,TAILFIELD:HALFWORD; ETEXAUXFIELD:HALFWORD;PGFIELD,MLFIELD:INTEGER;AUXFIELD:MEMORYWORD;END; {:212}{269:}GROUPCODE=0..16;{:269}{300:} INSTATERECORD=RECORD STATEFIELD,INDEXFIELD:QUARTERWORD; STARTFIELD,LOCFIELD,LIMITFIELD,NAMEFIELD:HALFWORD;END;{:300}{548:} INTERNALFONTNUMBER=0..FONTMAX;FONTINDEX=0..FONTMEMSIZE;{:548}{594:} DVIINDEX=0..DVIBUFSIZE;{:594}{920:}TRIEPOINTER=0..TRIESIZE;{:920}{925:} HYPHPOINTER=0..503;{:925}{1412:}SAVEPOINTER=0..SAVESIZE;{:1412}{1623:} SIGNEDHALFWORD=[ word ]-32768..32767;SIXTEENBITS=[ word ]0..65535; FILESIZE=[ word ]0..FILENAMESIZE;VAXFFLOAT=PACKED RECORD FRAC1:0..127; EXPO:0..255;SIGN:BOOLEAN;FRAC:0..65535;END;{:1623}{1626:} UNSAFEFILE=[ unsafe ]FILE OF CHAR;FABPTR=^ FAB$type ;RABPTR=^ RAB$type ; NAMPTR=^ NAM$type ;CHRPTR=^CHAR;{:1626}{1630:} VMSITEMLIST=PACKED RECORD CASE BOOLEAN OF TRUE:(BUFFERLENGTH:SIXTEENBITS ;ITEMCODE:SIXTEENBITS;BUFFERADDR:[ long ]INTEGER; RETLENADDR:[ long ]INTEGER);FALSE:(NEXTITEM:[ long ]INTEGER)END;{:1630} {1634:}DESCRTYPE=PACKED RECORD LEN:SIXTEENBITS;DESCTYPE:EIGHTBITS; DESCCLASS:EIGHTBITS;STRING:[ long ]INTEGER;END;DESCRPTR=^DESCRTYPE; {:1634}{1636:}EDITORIDENT=RECORD CMDOFFSET:INTEGER; IMAGE,ENTRY,QUITTING,EXITING,CMDTEXT:STRNUMBER; STARTQUAL,EDTLIKE:BOOLEAN;LOGICAL:PACKED ARRAY[1..FILENAMESIZE]OF CHAR; END;{:1636}{1639:}EDITRESULT=(FAILED,QUIT,EDITED);{:1639}VAR{13:} BAD:INTEGER;{:13}{20:}XORD:ARRAY[CHAR]OF ASCIICODE; XCHR:ARRAY[ASCIICODE]OF CHAR;{:20}{26:} NAMEOFFILE,DEFAULTNAME:PACKED ARRAY[1..FILENAMESIZE]OF CHAR; NAMELENGTH,DEFLTLENGTH:FILESIZE;{:26}{30:} AUXBUF:VARYING[SIZEINPUTLINE]OF CHAR; BUFFER:ARRAY[0..BUFSIZE]OF ASCIICODE;FIRST:0..BUFSIZE;LAST:0..BUFSIZE; MAXBUFSTACK:0..BUFSIZE;{:30}{32:}TERMIN:ALPHAFILE;TERMOUT:ALPHAFILE; {:32}{39:}STRPOOL:PACKED ARRAY[POOLPOINTER]OF PACKEDASCIICODE; STRSTART:ARRAY[STRNUMBER]OF POOLPOINTER;POOLPTR:POOLPOINTER; STRPTR:STRNUMBER;INITPOOLPTR:POOLPOINTER;INITSTRPTR:STRNUMBER;{:39}{50:} POOLFILE:ALPHAFILE;{:50}{54:}LOGFILE:ALPHAFILE;EDCMDFILE:ALPHAFILE; SELECTOR:0..22;DIG:ARRAY[0..22]OF 0..15;TALLY:INTEGER; TERMOFFSET:0..MAXPRINTLINE;FILEOFFSET:0..MAXPRINTLINE; TRICKBUF:ARRAY[0..ERRORLINE]OF ASCIICODE;TRICKCOUNT:INTEGER; FIRSTCOUNT:INTEGER;{:54}{73:}INTERACTION:0..3;{:73}{76:} DELETIONSALLOWED:BOOLEAN;SETBOXALLOWED:BOOLEAN;HISTORY:0..3; ERRORCOUNT:-1..100;{:76}{79:}HELPLINE:ARRAY[0..5]OF STRNUMBER; HELPPTR:0..6;USEERRHELP:BOOLEAN;{:79}{96:}INTERRUPT:[ volatile ]INTEGER; OKTOINTERRUPT:BOOLEAN;{:96}{104:}ARITHERROR:BOOLEAN;REMAINDER:SCALED; {:104}{115:}TEMPPTR:HALFWORD;{:115}{116:} MEM:ARRAY[MEMMIN..MEMMAX]OF MEMORYWORD;LOMEMMAX:HALFWORD; HIMEMMIN:HALFWORD;{:116}{117:}VARUSED,DYNUSED:INTEGER;{:117}{118:} AVAIL:HALFWORD;MEMEND:HALFWORD;{:118}{124:}ROVER:HALFWORD;{:124}{165:} {FREE:PACKED ARRAY[MEMMIN..MEMMAX]OF BOOLEAN; WASFREE:PACKED ARRAY[MEMMIN..MEMMAX]OF BOOLEAN; WASMEMEND,WASLOMAX,WASHIMIN:HALFWORD;PANICKING:BOOLEAN;}{:165}{173:} FONTINSHORTDISPLAY:INTEGER;{:173}{181:}DEPTHTHRESHOLD:INTEGER; BREADTHMAX:INTEGER;{:181}{213:} NEST:ARRAY[0..NESTSIZE]OF LISTSTATERECORD;NESTPTR:0..NESTSIZE; MAXNESTSTACK:0..NESTSIZE;CURLIST:LISTSTATERECORD;SHOWNMODE:-203..203; {:213}{246:}OLDSETTING:0..22;{:246}{253:} EQTB:ARRAY[1..14021]OF MEMORYWORD; XEQLEVEL:ARRAY[13168..14021]OF QUARTERWORD;{:253}{256:} HASH:ARRAY[514..10780]OF TWOHALVES;HASHUSED:HALFWORD; NONEWCONTROLSEQUENCE:BOOLEAN;CSCOUNT:INTEGER;{:256}{271:} SAVESTACK:ARRAY[0..SAVESIZE]OF MEMORYWORD;SAVEPTR:0..SAVESIZE; MAXSAVESTACK:0..SAVESIZE;CURLEVEL:QUARTERWORD;CURGROUP:GROUPCODE; CURBOUNDARY:0..SAVESIZE;{:271}{286:}MAGSET:INTEGER;{:286}{297:} CURCMD:EIGHTBITS;CURCHR:HALFWORD;CURCS:HALFWORD;CURTOK:HALFWORD;{:297} {301:}INPUTSTACK:ARRAY[0..STACKSIZE]OF INSTATERECORD; INPUTPTR:0..STACKSIZE;MAXINSTACK:0..STACKSIZE;CURINPUT:INSTATERECORD; {:301}{304:}INOPEN:0..MAXINOPEN;OPENPARENS:0..MAXINOPEN; INPUTFILE:ARRAY[1..MAXINOPEN]OF ALPHAFILE;LINE:INTEGER; LINESTACK:ARRAY[1..MAXINOPEN]OF INTEGER;{:304}{305:}SCANNERSTATUS:0..5; WARNINGINDEX:HALFWORD;DEFREF:HALFWORD;{:305}{308:} PARAMSTACK:ARRAY[0..PARAMSIZE]OF HALFWORD;PARAMPTR:0..PARAMSIZE; MAXPARAMSTACK:INTEGER;{:308}{309:}ALIGNSTATE:INTEGER;{:309}{310:} BASEPTR:0..STACKSIZE;{:310}{333:}PARLOC:HALFWORD;PARTOKEN:HALFWORD; {:333}{361:}FORCEEOF:BOOLEAN;{:361}{382:}CURMARK:ARRAY[0..4]OF HALFWORD; {:382}{387:}LONGSTATE:111..114;{:387}{388:} PSTACK:ARRAY[0..8]OF HALFWORD;{:388}{410:}CURVAL:INTEGER; CURVALLEVEL:0..5;{:410}{438:}RADIX:SMALLNUMBER;{:438}{447:} CURORDER:GLUEORD;{:447}{480:}READFILE:ARRAY[0..15]OF ALPHAFILE; READOPEN:ARRAY[0..16]OF 0..2;{:480}{489:}CONDPTR:HALFWORD;IFLIMIT:0..4; CURIF:SMALLNUMBER;IFLINE:INTEGER;{:489}{493:}SKIPLINE:INTEGER;{:493} {512:}CURNAME:STRNUMBER;CURAREA:STRNUMBER;CUREXT:STRNUMBER;{:512}{513:} AREADELIMITER:POOLPOINTER;TEXAREA,TEXFONTAREA:STRNUMBER; INPNAME,FONTSNAME:PACKED ARRAY[1..FILENAMESIZE]OF CHAR; INPLEN,FONTSLEN:FILESIZE;I:INTEGER;EXTDELIMITER:POOLPOINTER;{:513}{520:} TEXFNAMEDEFAULT:PACKED ARRAY[1..9]OF CHAR; TEXFORMATDEFAULT:PACKED ARRAY[1..FILENAMESIZE]OF CHAR; POOLNAME:PACKED ARRAY[1..FILENAMESIZE]OF CHAR;FORMATAREALENGTH:FILESIZE; FORMATDEFAULTLENGTH:INTEGER;{:520}{527:}NAMEINPROGRESS:BOOLEAN; JOBNAME:STRNUMBER;LOGOPENED:BOOLEAN;{:527}{532:}DVIFILE:BYTEFILE; OUTPUTFILENAME:STRNUMBER;LOGNAME:STRNUMBER;{:532}{539:}TFMFILE:BYTEFILE; {:539}{549:}FONTINFO:ARRAY[FONTINDEX]OF MEMORYWORD;FMEMPTR:FONTINDEX; FONTPTR:INTERNALFONTNUMBER; FONTCHECK:ARRAY[INTERNALFONTNUMBER]OF FOURQUARTERS; FONTSIZE:ARRAY[INTERNALFONTNUMBER]OF SCALED; FONTDSIZE:ARRAY[INTERNALFONTNUMBER]OF SCALED; FONTPARAMS:ARRAY[INTERNALFONTNUMBER]OF FONTINDEX; FONTNAME:ARRAY[INTERNALFONTNUMBER]OF STRNUMBER; FONTAREA:ARRAY[INTERNALFONTNUMBER]OF STRNUMBER; FONTBC:ARRAY[INTERNALFONTNUMBER]OF EIGHTBITS; FONTEC:ARRAY[INTERNALFONTNUMBER]OF EIGHTBITS; FONTGLUE:ARRAY[INTERNALFONTNUMBER]OF HALFWORD; FONTUSED:ARRAY[INTERNALFONTNUMBER]OF BOOLEAN; HYPHENCHAR:ARRAY[INTERNALFONTNUMBER]OF INTEGER; SKEWCHAR:ARRAY[INTERNALFONTNUMBER]OF INTEGER; BCHARLABEL:ARRAY[INTERNALFONTNUMBER]OF FONTINDEX; FONTBCHAR:ARRAY[INTERNALFONTNUMBER]OF 0..256; FONTFALSEBCHAR:ARRAY[INTERNALFONTNUMBER]OF 0..256;{:549}{550:} CHARBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; WIDTHBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; HEIGHTBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; DEPTHBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; ITALICBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; LIGKERNBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; KERNBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; EXTENBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER; PARAMBASE:ARRAY[INTERNALFONTNUMBER]OF INTEGER;{:550}{555:} NULLCHARACTER:FOURQUARTERS;{:555}{592:}TOTALPAGES:INTEGER;MAXV:SCALED; MAXH:SCALED;MAXPUSH:INTEGER;LASTBOP:INTEGER;DEADCYCLES:INTEGER; DOINGLEADERS:BOOLEAN;C,F:QUARTERWORD;RULEHT,RULEDP,RULEWD:SCALED; G:HALFWORD;LQ,LR:INTEGER;{:592}{595:} DBUFFER:[ volatile , aligned (9)]PACKED RECORD CASE BOOLEAN OF FALSE:(B: PACKED ARRAY[DVIINDEX]OF EIGHTBITS);TRUE:(L:BYTEBLOCK;R:BYTEBLOCK; J:EIGHTBITS);END;HALFBUF:DVIINDEX;DVILIMIT:DVIINDEX;DVIPTR:DVIINDEX; DVIOFFSET:INTEGER;DVIGONE:INTEGER;{:595}{605:}DOWNPTR,RIGHTPTR:HALFWORD; {:605}{616:}DVIH,DVIV:SCALED;CURH,CURV:SCALED;DVIF:INTERNALFONTNUMBER; CURS:INTEGER;{:616}{646:} TOTALSTRETCH,TOTALSHRINK:ARRAY[GLUEORD]OF SCALED;LASTBADNESS:INTEGER; {:646}{647:}ADJUSTTAIL:HALFWORD;{:647}{661:}PACKBEGINLINE:INTEGER;{:661} {684:}EMPTYFIELD:TWOHALVES;NULLDELIMITER:FOURQUARTERS;{:684}{719:} CURMLIST:HALFWORD;CURSTYLE:SMALLNUMBER;CURSIZE:SMALLNUMBER;CURMU:SCALED; MLISTPENALTIES:BOOLEAN;{:719}{724:}CURF:INTERNALFONTNUMBER; CURC:QUARTERWORD;CURI:FOURQUARTERS;{:724}{764:}MAGICOFFSET:INTEGER; {:764}{770:}CURALIGN:HALFWORD;CURSPAN:HALFWORD;CURLOOP:HALFWORD; ALIGNPTR:HALFWORD;CURHEAD,CURTAIL:HALFWORD;{:770}{814:}JUSTBOX:HALFWORD; {:814}{821:}PASSIVE:HALFWORD;PRINTEDNODE:HALFWORD;PASSNUMBER:HALFWORD; {:821}{823:}ACTIVEWIDTH:ARRAY[1..6]OF SCALED; CURACTIVEWIDTH:ARRAY[1..6]OF SCALED;BACKGROUND:ARRAY[1..6]OF SCALED; BREAKWIDTH:ARRAY[1..6]OF SCALED;{:823}{825:}NOSHRINKERRORYET:BOOLEAN; {:825}{828:}CURP:HALFWORD;SECONDPASS:BOOLEAN;FINALPASS:BOOLEAN; THRESHOLD:INTEGER;{:828}{833:}MINIMALDEMERITS:ARRAY[0..3]OF INTEGER; MINIMUMDEMERITS:INTEGER;BESTPLACE:ARRAY[0..3]OF HALFWORD; BESTPLLINE:ARRAY[0..3]OF HALFWORD;{:833}{839:}DISCWIDTH:SCALED;{:839} {847:}EASYLINE:HALFWORD;LASTSPECIALLINE:HALFWORD;FIRSTWIDTH:SCALED; SECONDWIDTH:SCALED;FIRSTINDENT:SCALED;SECONDINDENT:SCALED;{:847}{872:} BESTBET:HALFWORD;FEWESTDEMERITS:INTEGER;BESTLINE:HALFWORD; ACTUALLOOSENESS:INTEGER;LINEDIFF:INTEGER;{:872}{892:} HC:ARRAY[0..65]OF 0..256;HN:SMALLNUMBER;HA,HB:HALFWORD; HF:INTERNALFONTNUMBER;HU:ARRAY[0..63]OF 0..256;HYFCHAR:INTEGER; CURLANG,INITCURLANG:ASCIICODE;LHYF,RHYF,INITLHYF,INITRHYF:INTEGER; HYFBCHAR:HALFWORD;{:892}{900:}HYF:ARRAY[0..64]OF 0..9;INITLIST:HALFWORD; INITLIG:BOOLEAN;INITLFT:BOOLEAN;{:900}{905:}HYPHENPASSED:SMALLNUMBER; {:905}{907:}CURL,CURR:HALFWORD;CURQ:HALFWORD;LIGSTACK:HALFWORD; LIGATUREPRESENT:BOOLEAN;LFTHIT,RTHIT:BOOLEAN;{:907}{921:} TRIE:ARRAY[TRIEPOINTER]OF TWOHALVES; HYFDISTANCE:ARRAY[1..TRIEOPSIZE]OF SMALLNUMBER; HYFNUM:ARRAY[1..TRIEOPSIZE]OF SMALLNUMBER; HYFNEXT:ARRAY[1..TRIEOPSIZE]OF QUARTERWORD; OPSTART:ARRAY[ASCIICODE]OF 0..TRIEOPSIZE;{:921}{926:} HYPHWORD:ARRAY[HYPHPOINTER]OF STRNUMBER; HYPHLIST:ARRAY[HYPHPOINTER]OF HALFWORD;HYPHCOUNT:HYPHPOINTER;{:926} {943:}TRIEOPHASH:ARRAY[-TRIEOPSIZE..TRIEOPSIZE]OF 0..TRIEOPSIZE; TRIEUSED:ARRAY[ASCIICODE]OF QUARTERWORD; TRIEOPLANG:ARRAY[1..TRIEOPSIZE]OF ASCIICODE; TRIEOPVAL:ARRAY[1..TRIEOPSIZE]OF QUARTERWORD;TRIEOPPTR:0..TRIEOPSIZE; {:943}{947:}TRIEC:PACKED ARRAY[TRIEPOINTER]OF PACKEDASCIICODE; TRIEO:PACKED ARRAY[TRIEPOINTER]OF QUARTERWORD; TRIEL:PACKED ARRAY[TRIEPOINTER]OF TRIEPOINTER; TRIER:PACKED ARRAY[TRIEPOINTER]OF TRIEPOINTER;TRIEPTR:TRIEPOINTER; TRIEHASH:PACKED ARRAY[TRIEPOINTER]OF TRIEPOINTER;{:947}{950:} TRIETAKEN:PACKED ARRAY[1..TRIESIZE]OF BOOLEAN; TRIEMIN:ARRAY[ASCIICODE]OF TRIEPOINTER;TRIEMAX:TRIEPOINTER; TRIENOTREADY:BOOLEAN;{:950}{971:}BESTHEIGHTPLUSDEPTH:SCALED;{:971}{980:} PAGETAIL:HALFWORD;PAGECONTENTS:0..2;PAGEMAXDEPTH:SCALED; BESTPAGEBREAK:HALFWORD;LEASTPAGECOST:INTEGER;BESTSIZE:SCALED;{:980} {982:}PAGESOFAR:ARRAY[0..7]OF SCALED;LASTGLUE:HALFWORD; LASTPENALTY:INTEGER;LASTKERN:SCALED;LASTNODETYPE:INTEGER; INSERTPENALTIES:INTEGER;{:982}{989:}OUTPUTACTIVE:BOOLEAN;{:989}{1032:} MAINF:INTERNALFONTNUMBER;MAINI:FOURQUARTERS;MAINJ:FOURQUARTERS; MAINK:FONTINDEX;MAINP:HALFWORD;MAINS:INTEGER;BCHAR:HALFWORD; FALSEBCHAR:HALFWORD;CANCELBOUNDARY:BOOLEAN;INSDISC:BOOLEAN;{:1032} {1074:}CURBOX:HALFWORD;{:1074}{1266:}AFTERTOKEN:HALFWORD;{:1266}{1281:} LONGHELPSEEN:BOOLEAN;{:1281}{1299:}FORMATIDENT:STRNUMBER;{:1299}{1305:} FMTFILE:WORDFILE;{:1305}{1331:}INITFLAG:BOOLEAN;{:1331}{1342:} WRITEFILE:ARRAY[0..15]OF ALPHAFILE;WRITEOPEN:ARRAY[0..17]OF BOOLEAN; {:1342}{1345:}WRITELOC:HALFWORD;{:1345}{1386:}ETEXMODE:0..1;{:1386} {1394:}EOFSEEN:ARRAY[1..MAXINOPEN]OF BOOLEAN;{:1394}{1439:} LRTEMP:HALFWORD;LRPTR:HALFWORD;LRPROBLEMS:INTEGER;CURDIR:SMALLNUMBER; {:1439}{1483:}PSEUDOFILES:HALFWORD;{:1483}{1506:} GRPSTACK:ARRAY[0..MAXINOPEN]OF SAVEPOINTER; IFSTACK:ARRAY[0..MAXINOPEN]OF HALFWORD;{:1506}{1547:}MAXREGNUM:HALFWORD; MAXREGHELPLINE:STRNUMBER;{:1547}{1549:}SAROOT:ARRAY[0..6]OF HALFWORD; CURPTR:HALFWORD;SANULL:MEMORYWORD;{:1549}{1568:}SACHAIN:HALFWORD; SALEVEL:QUARTERWORD;{:1568}{1575:}LASTLINEFILL:HALFWORD; DOLASTLINEFIT:BOOLEAN;ACTIVENODESIZE:SMALLNUMBER; FILLWIDTH:ARRAY[0..2]OF SCALED;BESTPLSHORT:ARRAY[0..3]OF SCALED; BESTPLGLUE:ARRAY[0..3]OF SCALED;{:1575}{1591:}HYPHSTART:TRIEPOINTER; HYPHINDEX:TRIEPOINTER;{:1591}{1592:}DISCPTR:ARRAY[1..3]OF HALFWORD; {:1592}{1603:}COPYERR:(IGNOREIT,PRINTIT,SAVEIT);LABELSIZE:-1..14;{:1603} {1616:}FORMATQUAL,DVIQUAL,CMDLINEPRESENT,CONTINUEQUAL,EIGHTQUAL,JOBQUAL, BATCHQUAL,LOGQUAL,DIAGQUAL,EDITQUAL:BOOLEAN;DIAGFILE:ALPHAFILE; DIAGNAME:STRNUMBER;TEMPFILE:ALPHAFILE; LOGFNAME,DIAGFNAME,EDITNAME,LJOBNAME,DVIFNAME:PACKED ARRAY[1.. FILENAMESIZE]OF CHAR;LOGFLEN,DIAGFLEN,EDITLEN,LLENNAME,DVIFLEN:FILESIZE; {:1616}{1619:}ETEX_CLI:[ external, readonly ] unsigned ;{:1619}{1622:} TFMCOUNT:0..VAXBLOCKLENGTH;FMTCOUNT:0..VAXBLOCKLENGTH;{:1622}{1624:} RES:[ volatile ]INTEGER;TTCHAN:[ volatile ]SIGNEDHALFWORD;{:1624}{1628:} INFAB,OUTFAB:FABPTR;INRAB,OUTRAB:RABPTR;LASTLENGTH:INTEGER; LASTNAME:PACKED ARRAY[1..FILENAMESIZE]OF CHAR;LASTBASENAMLEN:INTEGER; LASTBASENAME:PACKED ARRAY[1..FILENAMESIZE]OF CHAR;{:1628}{1637:} EDITOR:PACKED ARRAY[1..4]OF EDITORIDENT;{:1637}{1665:} EMPTYEDITOR:EDITORIDENT;{:1665}{34:}PROCEDURE WAKEUPTERMINAL; BEGIN OUTRAB^.RAB$V_CCO:=TRUE;WRITELN(TERMOUT);OUTRAB^.RAB$V_CCO:=FALSE; END;{:34}{1618:} [ external]FUNCTION cli$present( %stdescr ENTITY:[ volatile , readonly ] PACKED ARRAY[L1..U1:INTEGER]OF CHAR:= %immed 0):INTEGER;EXTERN; [ external]FUNCTION cli$get_value( %stdescr ENTITY:[ volatile , readonly ]PACKED ARRAY[L1..U1:INTEGER]OF CHAR:= %immed 0; %stdescr RETURNS:[ volatile ]PACKED ARRAY[L2..U2:INTEGER]OF CHAR:= %immed 0;VAR RETLEN:[ volatile ]SIXTEENBITS:= %immed 0):INTEGER;EXTERN; [ external]FUNCTION cli$dcl_parse( %stdescr CMDLINE:[ volatile , readonly ]PACKED ARRAY[L1..U1:INTEGER]OF CHAR:= %immed 0; %immed CLDTABLE:[ volatile , readonly ] unsigned := %immed 0):INTEGER; EXTERN; [ external]FUNCTION lib$get_foreign( %stdescr CMDLIN:[ volatile ]PACKED ARRAY[L1..U1:INTEGER]OF CHAR:= %immed 0; %stdescr PROMPT:[ volatile ]PACKED ARRAY[L2..U2:INTEGER]OF CHAR:= %immed 0;VAR LEN:[ volatile ]SIXTEENBITS:= %immed 0; VAR FLAG:[ volatile ]INTEGER:= %immed 0):INTEGER;EXTERN; [ external, asynchronous]FUNCTION lib$sig_to_ret( %ref SIGNALARGS:[ volatile , unsafe ]ARRAY[L1..U1:INTEGER]OF[ byte ]EIGHTBITS; %ref MECHANARGS:[ volatile , unsafe ]ARRAY[L2..U2:INTEGER]OF[ byte ] EIGHTBITS):INTEGER;EXTERN;{:1618}{1625:} [ asynchronous]PROCEDURE CTRLCROUT;BEGIN INTERRUPT:=1; $qiow(,TTCHAN, io$_setmode + io$m_ctrlcast ,,,, %immed CTRLCROUT,, %immed 3,,,);;END;{:1625}{1627:}FUNCTION USERRESET(VAR FAB: FAB$type ; VAR RAB: RAB$type ;VAR F:UNSAFEFILE):INTEGER;LABEL 30;VAR STS:INTEGER; NAM:NAMPTR;P:CHRPTR;I:INTEGER;ICHR:INTEGER;BEGIN LASTLENGTH:=0; STS:=$parse(FAB);IF NOT ODD(STS)THEN GOTO 30;STS:=$search(FAB); IF ODD(STS)THEN FAB.FAB$V_NAM:=TRUE;STS:=$open(FAB); IF NOT ODD(STS)THEN GOTO 30;STS:=$connect(RAB); IF NOT ODD(STS)THEN GOTO 30;NAM:=FAB.FAB$L_NAM::NAMPTR; IF NAM=NIL THEN GOTO 30;LASTLENGTH:=NAM^.NAM$B_RSL; FOR I:=1 TO LASTLENGTH DO BEGIN P:=(NAM^.NAM$L_RSA::INTEGER+I-1)::CHRPTR ;LASTNAME[I]:=P^;END;LASTBASENAMLEN:=NAM^.NAM$B_NAME; FOR I:=1 TO LASTBASENAMLEN DO BEGIN P:=(NAM^.NAM$L_NAME::INTEGER+I-1):: CHRPTR;ICHR:=ORD(P^);IF(ICHR>64)AND(ICHR<91)THEN ICHR:=ICHR+32; LASTBASENAME[I]:=CHR(ICHR);END;30:USERRESET:=STS;END; FUNCTION USERREWRITE(VAR FAB: FAB$type ;VAR RAB: RAB$type ; VAR F:UNSAFEFILE):INTEGER;LABEL 30;VAR STS:INTEGER;NAM:NAMPTR;P:CHRPTR; I:INTEGER;ICHR:INTEGER;BEGIN STS:=$create(FAB); IF NOT ODD(STS)THEN GOTO 30;STS:=$connect(RAB); IF NOT ODD(STS)THEN GOTO 30;NAM:=FAB.FAB$L_NAM::NAMPTR; IF NAM=NIL THEN GOTO 30;LASTLENGTH:=NAM^.NAM$B_RSL; FOR I:=1 TO LASTLENGTH DO BEGIN P:=(NAM^.NAM$L_RSA::INTEGER+I-1)::CHRPTR ;LASTNAME[I]:=P^;END;LASTBASENAMLEN:=NAM^.NAM$B_NAME; FOR I:=1 TO LASTBASENAMLEN DO BEGIN P:=(NAM^.NAM$L_NAME::INTEGER+I-1):: CHRPTR;ICHR:=ORD(P^);IF(ICHR>64)AND(ICHR<91)THEN ICHR:=ICHR+32; LASTBASENAME[I]:=CHR(ICHR);END;30:USERREWRITE:=STS;END; FUNCTION PAS$FAB(VAR FOOBAR:UNSAFEFILE):FABPTR;EXTERN; FUNCTION PAS$RAB(VAR FOOBAR:UNSAFEFILE):RABPTR;EXTERN;{:1627}{1629:} FUNCTION TRANSLATE(VAR T:PACKED ARRAY[L1..U1:INTEGER]OF CHAR; VAR LEN:SIGNEDHALFWORD):BOOLEAN;VAR S:VARYING[FILENAMESIZE]OF CHAR; TRNLNMRETURN:INTEGER;RETURNLENGTH:[ volatile ]INTEGER; ATTRIBUTES:UNSIGNED;ITEMLIST:[ volatile ]ARRAY[0..1]OF VMSITEMLIST; BEGIN S:= substr(T,1,LEN);ATTRIBUTES:= lnm$m_case_blind ; RETURNLENGTH:=0;WITH ITEMLIST[0]DO BEGIN BUFFERLENGTH:=FILENAMESIZE; ITEMCODE:= lnm$_string ;BUFFERADDR:= iaddress(T); RETLENADDR:= iaddress(RETURNLENGTH);END;ITEMLIST[1].NEXTITEM:=0; TRNLNMRETURN:= $trnlnm(ATTRIBUTES,'LNM$DCL_LOGICAL',S,,ITEMLIST); LEN:=RETURNLENGTH;TRANSLATE:=TRNLNMRETURN= sts$k_success ;END;{:1629} {1631:}[ external]FUNCTION lib$callg( %immed ARGLIST:[ long ]INTEGER; %immed USERPROC:[ long ]INTEGER):INTEGER;EXTERN; FUNCTION CALLEDITOR(PROC:[ long ]INTEGER; PARAM1,PARAM3:[ volatile ]DESCRPTR):INTEGER; VAR CALLGDESCRIPTOR:PACKED ARRAY[1..4]OF[ long ]INTEGER; BEGIN CALLGDESCRIPTOR[1]:=1;CALLGDESCRIPTOR[2]:=PARAM1::INTEGER; IF PARAM3<>NIL THEN BEGIN CALLGDESCRIPTOR[1]:=3;CALLGDESCRIPTOR[3]:=0; CALLGDESCRIPTOR[4]:=PARAM3::INTEGER;END; CALLEDITOR:= lib$callg( iaddress(CALLGDESCRIPTOR),PROC)END;{:1631} {1632:} [ external, asynchronous]FUNCTION str$get1_dx( %ref ALLOC:[ readonly ] SIXTEENBITS; %immed DESCRP:DESCRPTR):INTEGER;EXTERN; [ external, asynchronous]FUNCTION str$free1_dx( %immed DESCRP:DESCRPTR): INTEGER;EXTERN; [ external, asynchronous]PROCEDURE lib$signal( %immed CONDCODE:INTEGER; %immed NUMOFARGS:INTEGER:= %immed 0; %immed FAOARGUMENT:[list,unsafe]INTEGER);EXTERN;{:1632}{1633:} PROCEDURE STRTODESCR(POOLSTRING:STRNUMBER; VAR DYNAMSTR:[ volatile ]DESCRPTR);VAR CHPTR,STRSTAT:INTEGER; STRSIZE:SIXTEENBITS;CHCTR:CHRPTR; BEGIN IF DYNAMSTR=NIL THEN BEGIN NEW(DYNAMSTR); WITH DYNAMSTR^DO BEGIN LEN:=0;DESCTYPE:= dsc$k_dtype_t ; DESCCLASS:= dsc$k_class_d ;STRING:=0 END; END ELSE IF DYNAMSTR^.LEN<>0 THEN BEGIN STRSTAT:= str$free1_dx(DYNAMSTR) ;IF NOT ODD(STRSTAT)THEN lib$signal(STRSTAT)END; CHPTR:=STRSTART[POOLSTRING]; STRSIZE:=STRSTART[POOLSTRING+1]-STRSTART[POOLSTRING]; STRSTAT:= str$get1_dx(STRSIZE,DYNAMSTR); IF NOT ODD(STRSTAT)THEN lib$signal(STRSTAT); CHCTR:=DYNAMSTR^.STRING::CHRPTR; WHILE STRSIZE>0 DO BEGIN CHCTR^:=XCHR[STRPOOL[CHPTR]]; CHCTR:=(CHCTR::INTEGER+1)::CHRPTR;CHPTR:=CHPTR+1;STRSIZE:=STRSIZE-1 END; END;{:1633}{1635:}PROCEDURE RELEASE(STRING:DESCRPTR); VAR STRSTAT:INTEGER; BEGIN IF STRING<>NIL THEN BEGIN STRSTAT:= str$free1_dx(STRING); IF NOT ODD(STRSTAT)THEN lib$signal(STRSTAT);DISPOSE(STRING);STRING:=NIL; END;END;{:1635}{1640:} [ external]FUNCTION lib$find_image_symbol( %immed FILENM:DESCRPTR; %immed SYMBOL:DESCRPTR; %ref SYMBOLVALUE:[ volatile , long ]INTEGER; %immed IMAGENAME:DESCRPTR:= %immed 0):INTEGER;EXTERN; [ external]FUNCTION lib$spawn( %immed CMD:DESCRPTR; %immed SYSINPUT:DESCRPTR:= %immed 0; %immed SYSOUTPUT:DESCRPTR:= %immed 0; %ref FLAGS:[ long ]INTEGER:= %immed 0; %immed PRCNM:DESCRPTR:= %immed 0; %ref PID:[ long ]INTEGER:= %immed 0; %ref STATUS:[ long ]INTEGER:= %immed 0):INTEGER;EXTERN; FUNCTION EDIT(FILENM,CMDFILE:STRNUMBER;EDITOR:EDITORIDENT):EDITRESULT; VAR EDITCOMMANDLINE:DESCRPTR;CHARCT:SIXTEENBITS;EDITORENTRY:INTEGER; EDITORSTATUS,STRSTAT:INTEGER;CHPTR:CHRPTR;QUITSTATUS,EXITSTATUS:INTEGER; IMAGESYMBOL,ENTRYPOINT,BADSYMBOL,GOODSYMBOL:DESCRPTR; EDITFILE,EDITCMD:DESCRPTR;BEGIN{1647:}RESET(TEMPFILE);CHARCT:=1; WHILE NOT EOF(TEMPFILE)DO BEGIN GET(TEMPFILE); CHARCT:=CHARCT+1 END{:1647};EDITCOMMANDLINE:=NIL;{1648:} NEW(EDITCOMMANDLINE);WITH EDITCOMMANDLINE^DO BEGIN LEN:=0; DESCTYPE:= dsc$k_dtype_t ;DESCCLASS:= dsc$k_class_d ;STRING:=0 END; STRSTAT:= str$get1_dx(CHARCT,EDITCOMMANDLINE); IF NOT ODD(STRSTAT)THEN lib$signal(STRSTAT); CHPTR:=EDITCOMMANDLINE^.STRING::CHRPTR;RESET(TEMPFILE); WHILE NOT EOF(TEMPFILE)DO BEGIN CHPTR^:=TEMPFILE^;GET(TEMPFILE); CHPTR:=(CHPTR::INTEGER+1)::CHRPTR END{:1648};EDITFILE:=NIL;EDITCMD:=NIL; IF EDITOR.EDTLIKE THEN BEGIN STRTODESCR(FILENM,EDITFILE); STRTODESCR(CMDFILE,EDITCMD);END;EDIT:=FAILED;EDITORSTATUS:=4; QUITSTATUS:=0;EXITSTATUS:= sts$k_success ;{1641:}IMAGESYMBOL:=NIL; ENTRYPOINT:=NIL;BADSYMBOL:=NIL;GOODSYMBOL:=NIL; STRTODESCR(EDITOR.IMAGE,IMAGESYMBOL); STRTODESCR(EDITOR.ENTRY,ENTRYPOINT); STRTODESCR(EDITOR.QUITTING,BADSYMBOL); STRTODESCR(EDITOR.EXITING,GOODSYMBOL){:1641}; IF EDITOR.IMAGE<>0 THEN BEGIN IF lib$find_image_symbol(IMAGESYMBOL, ENTRYPOINT,EDITORENTRY)= sts$k_success THEN{1642:}BEGIN{1645:} IF EDITOR.QUITTING<>0 THEN IF NOT ODD( lib$find_image_symbol(IMAGESYMBOL ,BADSYMBOL,QUITSTATUS))THEN QUITSTATUS:= sts$k_success ; IF EDITOR.EXITING<>0 THEN IF NOT ODD( lib$find_image_symbol(IMAGESYMBOL, GOODSYMBOL,EXITSTATUS))THEN EXITSTATUS:= sts$k_success {:1645}; IF EDITOR.EDTLIKE THEN EDITORSTATUS:=CALLEDITOR(EDITORENTRY,EDITFILE, EDITCMD)ELSE{1646:}BEGIN CHPTR:=EDITCOMMANDLINE^.STRING::CHRPTR; FOR CHARCT:=1 TO EDITOR.CMDOFFSET DO BEGIN CHPTR^:=' '; CHPTR:=(CHPTR::INTEGER+1)::CHRPTR END; EDITORSTATUS:=CALLEDITOR(EDITORENTRY,EDITCOMMANDLINE,NIL);END{:1646}; END{:1642}ELSE EDITOR.IMAGE:=0 END; IF EDITOR.IMAGE=0 THEN STRSTAT:= lib$spawn(CMD:=EDITCOMMANDLINE,STATUS:= EDITORSTATUS);{1643:}RELEASE(IMAGESYMBOL);RELEASE(ENTRYPOINT); RELEASE(BADSYMBOL);RELEASE(GOODSYMBOL);RELEASE(EDITCOMMANDLINE); RELEASE(EDITFILE);RELEASE(EDITCMD);{:1643};{1644:} IF EDITORSTATUS>= sts$m_inhib_msg THEN EDITORSTATUS:=EDITORSTATUS- sts$m_inhib_msg ; IF EDITORSTATUS=EXITSTATUS THEN EDIT:=EDITED ELSE IF EDITORSTATUS= QUITSTATUS THEN EDIT:=QUIT{:1644}END;{:1640}PROCEDURE INITIALIZE; VAR{19:}I:INTEGER;{:19}{163:}K:INTEGER;{:163}{927:}Z:HYPHPOINTER;{:927} BEGIN{8:}{21:}XCHR[32]:=' ';XCHR[33]:='!';XCHR[34]:='"';XCHR[35]:='#'; XCHR[36]:='$';XCHR[37]:='%';XCHR[38]:='&';XCHR[39]:='''';XCHR[40]:='('; XCHR[41]:=')';XCHR[42]:='*';XCHR[43]:='+';XCHR[44]:=',';XCHR[45]:='-'; XCHR[46]:='.';XCHR[47]:='/';XCHR[48]:='0';XCHR[49]:='1';XCHR[50]:='2'; XCHR[51]:='3';XCHR[52]:='4';XCHR[53]:='5';XCHR[54]:='6';XCHR[55]:='7'; XCHR[56]:='8';XCHR[57]:='9';XCHR[58]:=':';XCHR[59]:=';';XCHR[60]:='<'; XCHR[61]:='=';XCHR[62]:='>';XCHR[63]:='?';XCHR[64]:='@';XCHR[65]:='A'; XCHR[66]:='B';XCHR[67]:='C';XCHR[68]:='D';XCHR[69]:='E';XCHR[70]:='F'; XCHR[71]:='G';XCHR[72]:='H';XCHR[73]:='I';XCHR[74]:='J';XCHR[75]:='K'; XCHR[76]:='L';XCHR[77]:='M';XCHR[78]:='N';XCHR[79]:='O';XCHR[80]:='P'; XCHR[81]:='Q';XCHR[82]:='R';XCHR[83]:='S';XCHR[84]:='T';XCHR[85]:='U'; XCHR[86]:='V';XCHR[87]:='W';XCHR[88]:='X';XCHR[89]:='Y';XCHR[90]:='Z'; XCHR[91]:='[';XCHR[92]:='\';XCHR[93]:=']';XCHR[94]:='^';XCHR[95]:='_'; XCHR[96]:='`';XCHR[97]:='a';XCHR[98]:='b';XCHR[99]:='c';XCHR[100]:='d'; XCHR[101]:='e';XCHR[102]:='f';XCHR[103]:='g';XCHR[104]:='h'; XCHR[105]:='i';XCHR[106]:='j';XCHR[107]:='k';XCHR[108]:='l'; XCHR[109]:='m';XCHR[110]:='n';XCHR[111]:='o';XCHR[112]:='p'; XCHR[113]:='q';XCHR[114]:='r';XCHR[115]:='s';XCHR[116]:='t'; XCHR[117]:='u';XCHR[118]:='v';XCHR[119]:='w';XCHR[120]:='x'; XCHR[121]:='y';XCHR[122]:='z';XCHR[123]:='{';XCHR[124]:='|'; XCHR[125]:='}';XCHR[126]:='~';{:21}{23:}XCHR[0]:=' '; FOR I:=1 TO 31 DO XCHR[I]:=CHR(I);XCHR[12]:=CHR(12);XCHR[9]:=CHR(9); FOR I:=127 TO 159 DO XCHR[I]:=' ';FOR I:=160 TO 255 DO XCHR[I]:=CHR(I); {:23}{24:}FOR I:=0 TO 255 DO XORD[CHR(I)]:=127; FOR I:=128 TO 255 DO XORD[XCHR[I]]:=I; FOR I:=0 TO 126 DO XORD[XCHR[I]]:=I;{:24}{74:}INTERACTION:=3;{:74}{77:} DELETIONSALLOWED:=TRUE;SETBOXALLOWED:=TRUE;ERRORCOUNT:=0;{:77}{80:} HELPPTR:=0;USEERRHELP:=FALSE;{:80}{97:}INTERRUPT:=0;OKTOINTERRUPT:=TRUE; IF $assign('SYS$COMMAND',TTCHAN,,)= sts$k_success THEN $qiow(,TTCHAN, io$_setmode + io$m_ctrlcast ,,,, %immed CTRLCROUT,, %immed 3,,,);;{:97} {166:}{WASMEMEND:=MEMMIN;WASLOMAX:=MEMMIN;WASHIMIN:=MEMMAX; PANICKING:=FALSE;}{:166}{215:}NESTPTR:=0;MAXNESTSTACK:=0; CURLIST.MODEFIELD:=1;CURLIST.HEADFIELD:=327143; CURLIST.TAILFIELD:=327143;CURLIST.ETEXAUXFIELD:=0; CURLIST.AUXFIELD.INT:=-65536000;CURLIST.MLFIELD:=0;CURLIST.PGFIELD:=0; SHOWNMODE:=0;{991:}PAGECONTENTS:=0;PAGETAIL:=327142; MEM[327142].HH.RH:=0;LASTGLUE:=327145;LASTPENALTY:=0;LASTKERN:=0; LASTNODETYPE:=-1;PAGESOFAR[7]:=0;PAGEMAXDEPTH:=0{:991};{:215}{254:} FOR K:=13168 TO 14021 DO XEQLEVEL[K]:=1;{:254}{257:} NONEWCONTROLSEQUENCE:=TRUE;HASH[514].LH:=0;HASH[514].RH:=0; FOR K:=515 TO 10780 DO HASH[K]:=HASH[514];{:257}{272:}SAVEPTR:=0; CURLEVEL:=1;CURGROUP:=0;CURBOUNDARY:=0;MAXSAVESTACK:=0;{:272}{287:} MAGSET:=0;{:287}{383:}CURMARK[0]:=0;CURMARK[1]:=0;CURMARK[2]:=0; CURMARK[3]:=0;CURMARK[4]:=0;{:383}{439:}CURVAL:=0;CURVALLEVEL:=0; RADIX:=0;CURORDER:=0;{:439}{481:}FOR K:=0 TO 16 DO READOPEN[K]:=2;{:481} {490:}CONDPTR:=0;IFLIMIT:=0;CURIF:=0;IFLINE:=0;{:490}{521:} TEXFNAMEDEFAULT:='plain.fmt'; cli$get_value('TEXFORMATS',TEXFORMATDEFAULT,FORMATAREALENGTH); POOLNAME:=TEXFORMATDEFAULT; FOR I:=1 TO length(POOLFNAME)DO POOLNAME[I+FORMATAREALENGTH]:=POOLFNAME[ I]; FOR I:=1 TO 9 DO TEXFORMATDEFAULT[I+FORMATAREALENGTH]:=TEXFNAMEDEFAULT[I ];FORMATDEFAULTLENGTH:=FORMATAREALENGTH+9;{:521}{551:} FOR K:=0 TO FONTMAX DO FONTUSED[K]:=FALSE;{:551}{556:} NULLCHARACTER.B0:=0;NULLCHARACTER.B1:=0;NULLCHARACTER.B2:=0; NULLCHARACTER.B3:=0;{:556}{593:}TOTALPAGES:=0;MAXV:=0;MAXH:=0; MAXPUSH:=0;LASTBOP:=-1;DOINGLEADERS:=FALSE;DEADCYCLES:=0;CURS:=-1;{:593} {596:}HALFBUF:=DVIBUFSIZE DIV 2;DVILIMIT:=DVIBUFSIZE;DVIPTR:=0; DVIOFFSET:=0;DVIGONE:=0;{:596}{606:}DOWNPTR:=0;RIGHTPTR:=0;{:606}{648:} ADJUSTTAIL:=0;LASTBADNESS:=0;{:648}{662:}PACKBEGINLINE:=0;{:662}{685:} EMPTYFIELD.RH:=0;EMPTYFIELD.LH:=0;NULLDELIMITER.B0:=0; NULLDELIMITER.B1:=0;NULLDELIMITER.B2:=0;NULLDELIMITER.B3:=0;{:685}{771:} ALIGNPTR:=0;CURALIGN:=0;CURSPAN:=0;CURLOOP:=0;CURHEAD:=0;CURTAIL:=0; {:771}{928:}FOR Z:=0 TO 503 DO BEGIN HYPHWORD[Z]:=0;HYPHLIST[Z]:=0;END; HYPHCOUNT:=0;{:928}{990:}OUTPUTACTIVE:=FALSE;INSERTPENALTIES:=0;{:990} {1033:}LIGATUREPRESENT:=FALSE;CANCELBOUNDARY:=FALSE;LFTHIT:=FALSE; RTHIT:=FALSE;INSDISC:=FALSE;{:1033}{1267:}AFTERTOKEN:=0;{:1267}{1282:} LONGHELPSEEN:=FALSE;{:1282}{1300:}FORMATIDENT:=0;{:1300}{1343:} FOR K:=0 TO 17 DO WRITEOPEN[K]:=FALSE;{:1343}{1440:}LRTEMP:=0;LRPTR:=0; LRPROBLEMS:=0;CURDIR:=0;{:1440}{1484:}PSEUDOFILES:=0;{:1484}{1550:} SAROOT[6]:=0;SANULL.HH.LH:=0;SANULL.HH.RH:=0;{:1550}{1569:}SACHAIN:=0; SALEVEL:=0;{:1569}{1593:}DISCPTR[2]:=0;DISCPTR[3]:=0;{:1593}{1638:} WITH EDITOR[1]DO BEGIN LOGICAL:='CALLABLE_LSE';IMAGE:=1417;ENTRY:=1418; QUITTING:=1419;EXITING:=1420;CMDTEXT:=1421;CMDOFFSET:=0;STARTQUAL:=TRUE; EDTLIKE:=FALSE;END;WITH EDITOR[2]DO BEGIN LOGICAL:='CALLABLE_TPU'; IMAGE:=1422;ENTRY:=1423;QUITTING:=1419;EXITING:=1420;CMDTEXT:=1424; CMDOFFSET:=5;STARTQUAL:=TRUE;EDTLIKE:=FALSE;END; WITH EDITOR[3]DO BEGIN LOGICAL:='CALLABLE_EDT';IMAGE:=1425;ENTRY:=1426; QUITTING:=0;EXITING:=0;CMDTEXT:=1427;CMDOFFSET:=0;STARTQUAL:=FALSE; EDTLIKE:=TRUE;END;WITH EDITOR[4]DO BEGIN LOGICAL:='CALLABLE_TECO'; IMAGE:=1428;ENTRY:=1429;QUITTING:=0;EXITING:=0;CMDTEXT:=1430; CMDOFFSET:=0;STARTQUAL:=FALSE;EDTLIKE:=TRUE;END;{:1638}{1666:} WITH EMPTYEDITOR DO BEGIN LOGICAL:='';IMAGE:=0;ENTRY:=0;QUITTING:=0; EXITING:=0;CMDTEXT:=0;CMDOFFSET:=0;STARTQUAL:=FALSE;EDTLIKE:=FALSE;END; {:1666}IF INITFLAG THEN BEGIN{164:}FOR K:=1 TO 19 DO MEM[K].INT:=0;K:=0; WHILE K<=19 DO BEGIN MEM[K].HH.RH:=1;MEM[K].HH.B0:=0;MEM[K].HH.B1:=0; K:=K+4;END;MEM[6].INT:=65536;MEM[4].HH.B0:=1;MEM[10].INT:=65536; MEM[8].HH.B0:=2;MEM[14].INT:=65536;MEM[12].HH.B0:=1;MEM[15].INT:=65536; MEM[12].HH.B1:=1;MEM[18].INT:=-65536;MEM[16].HH.B0:=1;ROVER:=20; MEM[ROVER].HH.RH:=327145;MEM[ROVER].HH.LH:=1000; MEM[ROVER+1].HH.LH:=ROVER;MEM[ROVER+1].HH.RH:=ROVER; LOMEMMAX:=ROVER+1000;MEM[LOMEMMAX].HH.RH:=0;MEM[LOMEMMAX].HH.LH:=0; FOR K:=327131 TO 327144 DO MEM[K]:=MEM[LOMEMMAX];{790:} MEM[327134].HH.LH:=14614;{:790}{797:}MEM[327135].HH.RH:=512; MEM[327135].HH.LH:=0;{:797}{820:}MEM[327137].HH.B0:=1; MEM[327138].HH.LH:=327145;MEM[327137].HH.B1:=0;{:820}{981:} MEM[327144].HH.B1:=255;MEM[327144].HH.B0:=1;MEM[327144].HH.RH:=327144; {:981}{988:}MEM[327142].HH.B0:=10;MEM[327142].HH.B1:=0;{:988};AVAIL:=0; MEMEND:=327144;HIMEMMIN:=327131;VARUSED:=20;DYNUSED:=14;{:164}{222:} EQTB[10781].HH.B0:=101;EQTB[10781].HH.RH:=0;EQTB[10781].HH.B1:=0; FOR K:=1 TO 10780 DO EQTB[K]:=EQTB[10781];{:222}{228:} EQTB[10782].HH.RH:=0;EQTB[10782].HH.B1:=1;EQTB[10782].HH.B0:=117; FOR K:=10783 TO 11311 DO EQTB[K]:=EQTB[10782]; MEM[0].HH.RH:=MEM[0].HH.RH+530;{:228}{232:}EQTB[11312].HH.RH:=0; EQTB[11312].HH.B0:=118;EQTB[11312].HH.B1:=1; FOR K:=11313 TO 11316 DO EQTB[K]:=EQTB[11312]; FOR K:=11317 TO 11582 DO EQTB[K]:=EQTB[10781];EQTB[11583].HH.RH:=0; EQTB[11583].HH.B0:=119;EQTB[11583].HH.B1:=1; FOR K:=11584 TO 11838 DO EQTB[K]:=EQTB[11583];EQTB[11839].HH.RH:=0; EQTB[11839].HH.B0:=120;EQTB[11839].HH.B1:=1; FOR K:=11840 TO 11887 DO EQTB[K]:=EQTB[11839];EQTB[11888].HH.RH:=0; EQTB[11888].HH.B0:=120;EQTB[11888].HH.B1:=1; FOR K:=11889 TO 13167 DO EQTB[K]:=EQTB[11888]; FOR K:=0 TO 255 DO BEGIN EQTB[11888+K].HH.RH:=12;EQTB[12912+K].HH.RH:=K; EQTB[12656+K].HH.RH:=1000;END;EQTB[11901].HH.RH:=5; EQTB[11920].HH.RH:=10;EQTB[11980].HH.RH:=0;EQTB[11925].HH.RH:=14; EQTB[11900].HH.RH:=5;EQTB[12015].HH.RH:=15;EQTB[11888].HH.RH:=9; FOR K:=48 TO 57 DO EQTB[12912+K].HH.RH:=K+28672; FOR K:=65 TO 90 DO BEGIN EQTB[11888+K].HH.RH:=11; EQTB[11888+K+32].HH.RH:=11;EQTB[12912+K].HH.RH:=K+28928; EQTB[12912+K+32].HH.RH:=K+28960;EQTB[12144+K].HH.RH:=K+32; EQTB[12144+K+32].HH.RH:=K+32;EQTB[12400+K].HH.RH:=K; EQTB[12400+K+32].HH.RH:=K;EQTB[12656+K].HH.RH:=999;END;{:232}{240:} FOR K:=13168 TO 13488 DO EQTB[K].INT:=0;EQTB[13185].INT:=1000; EQTB[13169].INT:=10000;EQTB[13209].INT:=1;EQTB[13208].INT:=25; EQTB[13213].INT:=92;EQTB[13216].INT:=13; FOR K:=0 TO 255 DO EQTB[13489+K].INT:=-1;EQTB[13535].INT:=0;{:240}{250:} FOR K:=13745 TO 14021 DO EQTB[K].INT:=0;{:250}{258:}HASHUSED:=10514; CSCOUNT:=0;EQTB[10523].HH.B0:=116;HASH[10523].RH:=505;{:258}{552:} FONTPTR:=0;FMEMPTR:=7;FONTNAME[0]:=808;FONTAREA[0]:=339; HYPHENCHAR[0]:=45;SKEWCHAR[0]:=-1;BCHARLABEL[0]:=0;FONTBCHAR[0]:=256; FONTFALSEBCHAR[0]:=256;FONTBC[0]:=1;FONTEC[0]:=0;FONTSIZE[0]:=0; FONTDSIZE[0]:=0;CHARBASE[0]:=0;WIDTHBASE[0]:=0;HEIGHTBASE[0]:=0; DEPTHBASE[0]:=0;ITALICBASE[0]:=0;LIGKERNBASE[0]:=0;KERNBASE[0]:=0; EXTENBASE[0]:=0;FONTGLUE[0]:=0;FONTPARAMS[0]:=7;PARAMBASE[0]:=-1; FOR K:=0 TO 6 DO FONTINFO[K].INT:=0;{:552}{946:} FOR K:=-TRIEOPSIZE TO TRIEOPSIZE DO TRIEOPHASH[K]:=0; FOR K:=0 TO 255 DO TRIEUSED[K]:=0;TRIEOPPTR:=0;{:946}{951:} TRIENOTREADY:=TRUE;TRIEL[0]:=0;TRIEC[0]:=0;TRIEPTR:=0;{:951}{1216:} HASH[10514].RH:=1199;{:1216}{1301:}FORMATIDENT:=1265;{:1301}{1369:} HASH[10522].RH:=1306;EQTB[10522].HH.B1:=1;EQTB[10522].HH.B0:=113; EQTB[10522].HH.RH:=0;{:1369}{1387:}ETEXMODE:=0;{1545:}MAXREGNUM:=255; MAXREGHELPLINE:=697;{:1545}{:1387}{1551:}FOR I:=0 TO 5 DO SAROOT[I]:=0; {:1551}{1587:}TRIER[0]:=0;HYPHSTART:=0;{:1587}END;{:8}END;{56:} PROCEDURE DIAGCHAR(S:ASCIICODE);VAR CH:CHAR;BEGIN CH:=XCHR[S]; IF DIAGQUAL THEN WRITE(DIAGFILE,CH); IF CH='"'THEN IF DIAGQUAL THEN WRITE(DIAGFILE,CH)END; PROCEDURE TEMPCHAR(S:ASCIICODE);VAR CH:CHAR;BEGIN CH:=XCHR[S]; WRITE(TEMPFILE,CH);IF CH='"'THEN WRITE(TEMPFILE,CH)END; PROCEDURE DIAGPRINT(S:INTEGER);VAR J:POOLPOINTER;BEGIN J:=STRSTART[S]; WHILE J0 THEN DIAGCHAR(S); IF LABELSIZE>0 THEN LABELSIZE:=LABELSIZE-1 END;IGNOREIT:; SAVEIT:TEMPCHAR(S)END{:1602}; CASE SELECTOR OF 19:BEGIN WRITE(TERMOUT,XCHR[S]); IF LOGQUAL THEN WRITE(LOGFILE,XCHR[S]);TERMOFFSET:=TERMOFFSET+1; FILEOFFSET:=FILEOFFSET+1; IF TERMOFFSET=MAXPRINTLINE THEN BEGIN WRITELN(TERMOUT,CHR(13),CHR(10)); TERMOFFSET:=0;END; IF FILEOFFSET=MAXPRINTLINE THEN BEGIN IF LOGQUAL THEN WRITELN(LOGFILE); FILEOFFSET:=0;END;END;18:BEGIN IF LOGQUAL THEN WRITE(LOGFILE,XCHR[S]); FILEOFFSET:=FILEOFFSET+1;IF FILEOFFSET=MAXPRINTLINE THEN PRINTLN;END; 17:BEGIN WRITE(TERMOUT,XCHR[S]);TERMOFFSET:=TERMOFFSET+1; IF TERMOFFSET=MAXPRINTLINE THEN PRINTLN;END;16:; 20:IF TALLY=STRPTR THEN S:=260 ELSE IF S<256 THEN IF S<0 THEN S:=260 ELSE BEGIN IF SELECTOR>20 THEN BEGIN PRINTCHAR(S);GOTO 10;END;IF({244:} S=EQTB[13217].INT{:244})THEN IF SELECTOR<20 THEN BEGIN PRINTLN;GOTO 10; END;NL:=EQTB[13217].INT;EQTB[13217].INT:=-1;J:=STRSTART[S]; WHILE J=STRPTR)OR(S<256)THEN PRINT(S)ELSE BEGIN J:=STRSTART[S]; WHILE J0)AND(ODD(SELECTOR)))OR((FILEOFFSET>0)AND(SELECTOR >=18))THEN PRINTLN;PRINT(S);END;{:62}{63:} PROCEDURE PRINTESC(S:STRNUMBER);VAR C:INTEGER;BEGIN{243:} C:=EQTB[13213].INT{:243};IF C>=0 THEN IF C<256 THEN PRINT(C); SLOWPRINT(S);END;{:63}{64:}PROCEDURE PRINTTHEDIGS(K:EIGHTBITS); BEGIN WHILE K>0 DO BEGIN K:=K-1; IF DIG[K]<10 THEN PRINTCHAR(48+DIG[K])ELSE PRINTCHAR(55+DIG[K]);END;END; {:64}{65:}PROCEDURE PRINTINT(N:INTEGER);VAR K:0..23;M:INTEGER; BEGIN K:=0;IF N<0 THEN BEGIN PRINTCHAR(45); IF N>-100000000 THEN N:=-N ELSE BEGIN M:=-1-N;N:=M DIV 10; M:=(M MOD 10)+1;K:=1;IF M<10 THEN DIG[0]:=M ELSE BEGIN DIG[0]:=0;N:=N+1; END;END;END;REPEAT DIG[K]:=N MOD 10;N:=N DIV 10;K:=K+1;UNTIL N=0; PRINTTHEDIGS(K);END;{:65}{262:}PROCEDURE PRINTCS(P:INTEGER); BEGIN IF P<514 THEN IF P>=257 THEN IF P=513 THEN BEGIN PRINTESC(507); PRINTESC(508);END ELSE BEGIN PRINTESC(P-257); IF EQTB[11888+P-257].HH.RH=11 THEN PRINTCHAR(32); END ELSE IF P<1 THEN PRINTESC(509)ELSE PRINT(P-1)ELSE IF P>=10781 THEN PRINTESC(509)ELSE IF(HASH[P].RH<0)OR(HASH[P].RH>=STRPTR)THEN PRINTESC( 510)ELSE BEGIN PRINTESC(HASH[P].RH);PRINTCHAR(32);END;END;{:262}{263:} PROCEDURE SPRINTCS(P:HALFWORD); BEGIN IF P<514 THEN IF P<257 THEN PRINT(P-1)ELSE IF P<513 THEN PRINTESC( P-257)ELSE BEGIN PRINTESC(507);PRINTESC(508); END ELSE PRINTESC(HASH[P].RH);END;{:263}{518:} PROCEDURE PRINTFILENAME(N,A,E:INTEGER);BEGIN SLOWPRINT(A);SLOWPRINT(N); SLOWPRINT(E);END;{:518}{699:}PROCEDURE PRINTSIZE(S:INTEGER); BEGIN IF S=0 THEN PRINTESC(415)ELSE IF S=16 THEN PRINTESC(416)ELSE PRINTESC(417);END;{:699}{1355:}PROCEDURE PRINTWRITEWHATSIT(S:STRNUMBER; P:HALFWORD);BEGIN PRINTESC(S); IF MEM[P+1].HH.LH<16 THEN PRINTINT(MEM[P+1].HH.LH)ELSE IF MEM[P+1].HH.LH =16 THEN PRINTCHAR(42)ELSE PRINTCHAR(45);END;{:1355}{1555:} PROCEDURE PRINTSANUM(Q:HALFWORD);VAR N:HALFWORD; BEGIN IF MEM[Q].HH.B0<32 THEN N:=MEM[Q+1].HH.RH ELSE BEGIN N:=MEM[Q].HH. B0 MOD 16;Q:=MEM[Q].HH.RH;N:=N+16*MEM[Q].HH.B0;Q:=MEM[Q].HH.RH; N:=N+256*(MEM[Q].HH.B0+16*MEM[MEM[Q].HH.RH].HH.B0);END;PRINTINT(N);END; {:1555}{1649:}PROCEDURE EDITLOCATE(LINE,COL:INTEGER);BEGIN PRINT(1431); PRINTINT(LINE);PRINTCHAR(44);PRINTINT(COL);PRINT(1432)END;{:1649}{1650:} FUNCTION EDITFILE(STACKITEM:INSTATERECORD;LINE:INTEGER):BOOLEAN;FORWARD; {:1650}{78:}PROCEDURE NORMALIZESELECTOR;FORWARD;PROCEDURE GETTOKEN; FORWARD;PROCEDURE TERMINPUT;FORWARD;PROCEDURE SHOWCONTEXT;FORWARD; PROCEDURE BEGINFILEREADING;FORWARD;PROCEDURE OPENLOGFILE;FORWARD; PROCEDURE CLOSEFILESANDTERMINATE;FORWARD;PROCEDURE CLEARFORERRORPROMPT; FORWARD;PROCEDURE GIVEERRHELP;FORWARD;{PROCEDURE DEBUGHELP;FORWARD;} {:78}{81:}PROCEDURE JUMPOUT;BEGIN GOTO 9998;END;{:81}{82:} PROCEDURE ERROR;LABEL 22,10;VAR C:ASCIICODE;S1,S2,S3,S4:INTEGER; BEGIN IF HISTORY<2 THEN HISTORY:=2;PRINTCHAR(46);{1604:} COPYERR:=IGNOREIT;RESET(TEMPFILE){:1604};SHOWCONTEXT; IF INTERACTION=3 THEN{83:}WHILE TRUE DO BEGIN 22:CLEARFORERRORPROMPT; BEGIN WAKEUPTERMINAL;PRINT(265);TERMINPUT;END; IF LAST=FIRST THEN GOTO 10;C:=BUFFER[FIRST];IF C>=97 THEN C:=C-32;{84:} CASE C OF 48,49,50,51,52,53,54,55,56,57:IF DELETIONSALLOWED THEN{88:} BEGIN S1:=CURTOK;S2:=CURCMD;S3:=CURCHR;S4:=ALIGNSTATE; ALIGNSTATE:=1000000;OKTOINTERRUPT:=FALSE; IF(LAST>FIRST+1)AND(BUFFER[FIRST+1]>=48)AND(BUFFER[FIRST+1]<=57)THEN C:= C*10+BUFFER[FIRST+1]-48*11 ELSE C:=C-48;WHILE C>0 DO BEGIN GETTOKEN; C:=C-1;END;CURTOK:=S1;CURCMD:=S2;CURCHR:=S3;ALIGNSTATE:=S4; OKTOINTERRUPT:=TRUE;BEGIN HELPPTR:=2;HELPLINE[1]:=280;HELPLINE[0]:=281; END;SHOWCONTEXT;GOTO 22;END{:88};{68:BEGIN DEBUGHELP;GOTO 22;END;} 69:IF BASEPTR>0 THEN BEGIN IF EDITFILE(INPUTSTACK[BASEPTR],LINE)THEN BEGIN IF CONTINUEQUAL THEN BEGIN SHOWCONTEXT;GOTO 22; END ELSE BEGIN INTERACTION:=2;JUMPOUT;END END ELSE BEGIN PRINTNL(266); SLOWPRINT(INPUTSTACK[BASEPTR].NAMEFIELD);PRINT(267);PRINTINT(LINE); INTERACTION:=2;JUMPOUT;END END;72:{89:} BEGIN IF USEERRHELP THEN BEGIN GIVEERRHELP;USEERRHELP:=FALSE; END ELSE BEGIN IF HELPPTR=0 THEN BEGIN HELPPTR:=2;HELPLINE[1]:=282; HELPLINE[0]:=283;END;REPEAT HELPPTR:=HELPPTR-1;PRINT(HELPLINE[HELPPTR]); PRINTLN;UNTIL HELPPTR=0;END;BEGIN HELPPTR:=4;HELPLINE[3]:=284; HELPLINE[2]:=283;HELPLINE[1]:=285;HELPLINE[0]:=286;END;GOTO 22;END{:89}; 73:{87:}BEGIN BEGINFILEREADING; IF LAST>FIRST+1 THEN BEGIN CURINPUT.LOCFIELD:=FIRST+1;BUFFER[FIRST]:=32; END ELSE BEGIN BEGIN WAKEUPTERMINAL;PRINT(279);TERMINPUT;END; CURINPUT.LOCFIELD:=FIRST;END;FIRST:=LAST;CURINPUT.LIMITFIELD:=LAST-1; GOTO 10;END{:87};81,82,83:{86:}BEGIN ERRORCOUNT:=0;INTERACTION:=0+C-81; PRINT(274);CASE C OF 81:PRINTESC(275);82:PRINTESC(276);83:PRINTESC(277); END;PRINT(278);PRINTLN;IF ODD(SELECTOR)THEN WRITELN(TERMOUT); IF C=81 THEN SELECTOR:=SELECTOR-1;GOTO 10;END{:86}; 88:BEGIN INTERACTION:=2;JUMPOUT;END;OTHERWISE END;{85:}BEGIN PRINT(268); PRINTNL(269);PRINTNL(270);IF BASEPTR>0 THEN PRINT(271); IF DELETIONSALLOWED THEN PRINTNL(272);PRINTNL(273);END{:85}{:84}; END{:83};ERRORCOUNT:=ERRORCOUNT+1; IF ERRORCOUNT=100 THEN BEGIN PRINTNL(264);HISTORY:=3;JUMPOUT;END;{90:} IF INTERACTION>0 THEN SELECTOR:=SELECTOR-1; IF USEERRHELP THEN BEGIN PRINTLN;GIVEERRHELP; END ELSE WHILE HELPPTR>0 DO BEGIN HELPPTR:=HELPPTR-1; PRINTNL(HELPLINE[HELPPTR]);END;PRINTLN; IF INTERACTION>0 THEN SELECTOR:=SELECTOR+1;PRINTLN{:90};10:END;{:82} {93:}PROCEDURE FATALERROR(S:STRNUMBER);BEGIN NORMALIZESELECTOR; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(288);END;BEGIN HELPPTR:=1;HELPLINE[0]:=S;END; BEGIN IF INTERACTION=3 THEN INTERACTION:=2;IF LOGOPENED THEN ERROR; {IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END;{:93}{94:} PROCEDURE OVERFLOW(S:STRNUMBER;N:INTEGER);BEGIN NORMALIZESELECTOR; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(289);END;PRINT(S);PRINTCHAR(61);PRINTINT(N); PRINTCHAR(93);BEGIN HELPPTR:=2;HELPLINE[1]:=290;HELPLINE[0]:=291;END; BEGIN IF INTERACTION=3 THEN INTERACTION:=2;IF LOGOPENED THEN ERROR; {IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END;{:94}{95:} PROCEDURE CONFUSION(S:STRNUMBER);BEGIN NORMALIZESELECTOR; IF HISTORY<2 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(292);END;PRINT(S); PRINTCHAR(41);BEGIN HELPPTR:=1;HELPLINE[0]:=293;END; END ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(294);END;BEGIN HELPPTR:=2; HELPLINE[1]:=295;HELPLINE[0]:=296;END;END; BEGIN IF INTERACTION=3 THEN INTERACTION:=2;IF LOGOPENED THEN ERROR; {IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END;{:95}{:4} {27:}FUNCTION AOPENIN(VAR F:ALPHAFILE):BOOLEAN; BEGIN OPEN(F,NAMEOFFILE, readonly ,user_action:=USERRESET, error:=continue); IF STATUS(F)>0 THEN AOPENIN:=FALSE ELSE BEGIN RESET(F,error:=continue); AOPENIN:=STATUS(F)<=0;END;END; FUNCTION AOPENOUT(VAR F:ALPHAFILE):BOOLEAN; BEGIN OPEN(F,NAMEOFFILE, new ,16383,disposition:=delete, default := DEFAULTNAME,user_action:=USERREWRITE,error:=continue); IF STATUS(F)>0 THEN AOPENOUT:=FALSE ELSE BEGIN LINELIMIT(F,MAXINT); REWRITE(F,error:=continue);AOPENOUT:=STATUS(F)<=0;END;END; FUNCTION BOPENIN(VAR F:BYTEFILE):BOOLEAN; BEGIN OPEN(F,NAMEOFFILE, readonly ,user_action:=USERRESET, error:=continue); IF STATUS(F)>0 THEN BOPENIN:=FALSE ELSE BEGIN RESET(F,error:=continue); BOPENIN:=STATUS(F)<=0;END;END;FUNCTION BOPENOUT(VAR F:BYTEFILE):BOOLEAN; BEGIN OPEN(F,NAMEOFFILE, new ,disposition:=delete, default :=DEFAULTNAME ,user_action:=USERREWRITE,error:=continue); IF STATUS(F)>0 THEN BOPENOUT:=FALSE ELSE BEGIN REWRITE(F,error:=continue );BOPENOUT:=STATUS(F)<=0;END;END; FUNCTION WOPENIN(VAR F:WORDFILE):BOOLEAN; BEGIN OPEN(F,NAMEOFFILE, readonly ,user_action:=USERRESET, error:=continue); IF STATUS(F)>0 THEN WOPENIN:=FALSE ELSE BEGIN RESET(F,error:=continue); WOPENIN:=STATUS(F)<=0;END;FMTCOUNT:=0;END; FUNCTION WOPENOUT(VAR F:WORDFILE):BOOLEAN; BEGIN OPEN(F,NAMEOFFILE, new ,disposition:=delete,user_action:= USERREWRITE,error:=continue); IF STATUS(F)>0 THEN WOPENOUT:=FALSE ELSE BEGIN REWRITE(F,error:=continue );WOPENOUT:=STATUS(F)<=0;END;FMTCOUNT:=0;END;{:27}{28:} PROCEDURE ACLOSE(VAR F:ALPHAFILE); BEGIN CLOSE(F,disposition:=save,error:=continue);END; PROCEDURE BCLOSE(VAR F:BYTEFILE); BEGIN CLOSE(F,disposition:=save,error:=continue);END; PROCEDURE WCLOSE(VAR F:WORDFILE); BEGIN CLOSE(F,disposition:=save,error:=continue);END;{:28}{31:} FUNCTION INPUTLN(VAR F:ALPHAFILE;BYPASSEOLN:BOOLEAN):BOOLEAN;LABEL 40; VAR LEN:INTEGER;K:0..BUFSIZE;BEGIN LAST:=FIRST; IF STATUS(F)<>0 THEN INPUTLN:=FALSE ELSE BEGIN WHILE NOT EOLN(F)DO BEGIN READ(F,AUXBUF,error:=continue);LEN:=AUXBUF.length; IF LAST+LEN>=MAXBUFSTACK THEN BEGIN IF LAST+LENFIRST THEN IF BUFFER[LAST-1]=32 THEN BEGIN LAST:=LAST-1; GOTO 40;END;INPUTLN:=TRUE;READLN(F,error:=continue);END;END;{:31}{37:} FUNCTION INITTERMINAL:BOOLEAN;LABEL 10; VAR COMMANDLINE:PACKED ARRAY[1..256]OF CHAR;LEN:SIXTEENBITS;I:INTEGER; BEGIN BEGIN OPEN(TERMIN, 'SYS$INPUT' );RESET(TERMIN); INFAB:= PAS$FAB(TERMIN);INRAB:= PAS$RAB(TERMIN);END; IF CMDLINEPRESENT THEN BEGIN cli$get_value('COMMAND_LINE',COMMANDLINE, LEN);I:=1;WHILE(I<=LEN)AND(COMMANDLINE[I]=' ')DO I:=I+1; IF I<=LEN THEN BEGIN CURINPUT.LOCFIELD:=FIRST;LAST:=FIRST; WHILE I<=LEN DO BEGIN BUFFER[LAST]:=XORD[COMMANDLINE[I]];LAST:=LAST+1; I:=I+1;END;INITTERMINAL:=TRUE;GOTO 10;END;END; WHILE TRUE DO BEGIN WAKEUPTERMINAL;WRITE(TERMOUT,'**'); IF ODD(SELECTOR)THEN WRITELN(TERMOUT); IF NOT INPUTLN(TERMIN,TRUE)THEN BEGIN WRITE(TERMOUT,CHR(13),CHR(10)); WRITELN(TERMOUT,'! End of file on the terminal... why?',CHR(13),CHR(10)) ;INITTERMINAL:=FALSE;GOTO 10;END;CURINPUT.LOCFIELD:=FIRST; WHILE(CURINPUT.LOCFIELDBUFFER[K]THEN BEGIN RESULT :=FALSE;GOTO 45;END;J:=J+1;K:=K+1;END;RESULT:=TRUE;45:STREQBUF:=RESULT; END;{:45}{46:}FUNCTION STREQSTR(S,T:STRNUMBER):BOOLEAN;LABEL 45; VAR J,K:POOLPOINTER;RESULT:BOOLEAN;BEGIN RESULT:=FALSE; IF(STRSTART[S+1]-STRSTART[S])<>(STRSTART[T+1]-STRSTART[T])THEN GOTO 45; J:=STRSTART[S];K:=STRSTART[T]; WHILE JSTRPOOL[K]THEN GOTO 45; J:=J+1;K:=K+1;END;RESULT:=TRUE;45:STREQSTR:=RESULT;END;{:46}{47:} FUNCTION GETSTRINGSSTARTED:BOOLEAN;LABEL 30,10;VAR K,L:0..255;M,N:CHAR; G:STRNUMBER;A:INTEGER;C:BOOLEAN;BEGIN POOLPTR:=0;STRPTR:=0; STRSTART[0]:=0;{48:}FOR K:=0 TO 255 DO BEGIN IF({49:} (K<32)OR((K>126)AND(K<160))OR(K=255)OR((K>=160)AND NOT EIGHTQUAL){:49} )THEN BEGIN BEGIN STRPOOL[POOLPTR]:=94;POOLPTR:=POOLPTR+1;END; BEGIN STRPOOL[POOLPTR]:=94;POOLPTR:=POOLPTR+1;END; IF K<64 THEN BEGIN STRPOOL[POOLPTR]:=K+64;POOLPTR:=POOLPTR+1; END ELSE IF K<128 THEN BEGIN STRPOOL[POOLPTR]:=K-64;POOLPTR:=POOLPTR+1; END ELSE BEGIN L:=K DIV 16;IF L<10 THEN BEGIN STRPOOL[POOLPTR]:=L+48; POOLPTR:=POOLPTR+1;END ELSE BEGIN STRPOOL[POOLPTR]:=L+87; POOLPTR:=POOLPTR+1;END;L:=K MOD 16; IF L<10 THEN BEGIN STRPOOL[POOLPTR]:=L+48;POOLPTR:=POOLPTR+1; END ELSE BEGIN STRPOOL[POOLPTR]:=L+87;POOLPTR:=POOLPTR+1;END;END; END ELSE BEGIN STRPOOL[POOLPTR]:=K;POOLPTR:=POOLPTR+1;END;G:=MAKESTRING; END{:48};{51:}NAMEOFFILE:=POOLNAME; IF AOPENIN(POOLFILE)THEN BEGIN C:=FALSE;REPEAT{52:} BEGIN IF EOF(POOLFILE)THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'! ETEX.POOL has no check sum.',CHR(13),CHR(10)); ACLOSE(POOLFILE);GETSTRINGSSTARTED:=FALSE;GOTO 10;END; READ(POOLFILE,M,N);IF M='*'THEN{53:}BEGIN A:=0;K:=1; WHILE TRUE DO BEGIN IF(XORD[N]<48)OR(XORD[N]>57)THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'! ETEX.POOL check sum doesn''t have nine digits.',CHR( 13),CHR(10));ACLOSE(POOLFILE);GETSTRINGSSTARTED:=FALSE;GOTO 10;END; A:=10*A+XORD[N]-48;IF K=9 THEN GOTO 30;K:=K+1;READ(POOLFILE,N);END; 30:IF A<>340764991 THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'! ETEX.POOL doesn''t match; TANGLE me again.',CHR(13), CHR(10));ACLOSE(POOLFILE);GETSTRINGSSTARTED:=FALSE;GOTO 10;END;C:=TRUE; END{:53} ELSE BEGIN IF(XORD[M]<48)OR(XORD[M]>57)OR(XORD[N]<48)OR(XORD[N]>57)THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'! ETEX.POOL line doesn''t begin with two digits.',CHR( 13),CHR(10));ACLOSE(POOLFILE);GETSTRINGSSTARTED:=FALSE;GOTO 10;END; L:=XORD[M]*10+XORD[N]-48*11; IF POOLPTR+L+STRINGVACANCIES>POOLSIZE THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'! You have to increase POOLSIZE.',CHR(13),CHR(10)); ACLOSE(POOLFILE);GETSTRINGSSTARTED:=FALSE;GOTO 10;END; FOR K:=1 TO L DO BEGIN IF EOLN(POOLFILE)THEN M:=' 'ELSE READ(POOLFILE,M) ;BEGIN STRPOOL[POOLPTR]:=XORD[M];POOLPTR:=POOLPTR+1;END;END; READLN(POOLFILE);G:=MAKESTRING;END;END{:52};UNTIL C;ACLOSE(POOLFILE); GETSTRINGSSTARTED:=TRUE;END ELSE BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'! I can''t read ETEX.POOL.',CHR(13),CHR(10)); ACLOSE(POOLFILE);GETSTRINGSSTARTED:=FALSE;GOTO 10;END{:51};10:END;{:47} {66:}PROCEDURE PRINTTWO(N:INTEGER);BEGIN N:=ABS(N)MOD 100; PRINTCHAR(48+(N DIV 10));PRINTCHAR(48+(N MOD 10));END;{:66}{67:} PROCEDURE PRINTHEX(N:INTEGER);VAR K:0..22;BEGIN K:=0;PRINTCHAR(34); REPEAT DIG[K]:=N MOD 16;N:=N DIV 16;K:=K+1;UNTIL N=0;PRINTTHEDIGS(K); END;{:67}{69:}PROCEDURE PRINTROMANINT(N:INTEGER);LABEL 10; VAR J,K:POOLPOINTER;U,V:NONNEGATIVEINTEGER;BEGIN J:=STRSTART[261]; V:=1000;WHILE TRUE DO BEGIN WHILE N>=V DO BEGIN PRINTCHAR(STRPOOL[J]); N:=N-V;END;IF N<=0 THEN GOTO 10;K:=J+2;U:=V DIV(STRPOOL[K-1]-48); IF STRPOOL[K-1]=50 THEN BEGIN K:=K+2;U:=U DIV(STRPOOL[K-1]-48);END; IF N+U>=V THEN BEGIN PRINTCHAR(STRPOOL[K]);N:=N+U;END ELSE BEGIN J:=J+2; V:=V DIV(STRPOOL[J-1]-48);END;END;10:END;{:69}{70:} PROCEDURE PRINTCURRENTSTRING;VAR J:POOLPOINTER; BEGIN J:=STRSTART[STRPTR]; WHILE JFIRST THEN FOR K:=FIRST TO LAST-1 DO PRINT(BUFFER[K]);PRINTLN; SELECTOR:=SELECTOR+1;END;{:71}{91:}PROCEDURE INTERROR(N:INTEGER); BEGIN PRINT(287);PRINTINT(N);PRINTCHAR(41);ERROR;END;{:91}{92:} PROCEDURE NORMALIZESELECTOR; BEGIN IF LOGOPENED THEN SELECTOR:=19 ELSE SELECTOR:=17; IF JOBNAME=0 THEN OPENLOGFILE; IF INTERACTION=0 THEN SELECTOR:=SELECTOR-1;END;{:92}{98:} PROCEDURE PAUSEFORINSTRUCTIONS; BEGIN IF OKTOINTERRUPT THEN BEGIN INTERACTION:=3; IF(SELECTOR=18)OR(SELECTOR=16)THEN SELECTOR:=SELECTOR+1; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(297);END;BEGIN HELPPTR:=3;HELPLINE[2]:=298; HELPLINE[1]:=299;HELPLINE[0]:=300;END;DELETIONSALLOWED:=FALSE;ERROR; DELETIONSALLOWED:=TRUE;INTERRUPT:=0;END;END;{:98}{100:} FUNCTION HALF(X:INTEGER):INTEGER; BEGIN IF ODD(X)THEN HALF:=(X+1)DIV 2 ELSE HALF:=X DIV 2;END;{:100}{102:} FUNCTION ROUNDDECIMALS(K:SMALLNUMBER):SCALED;VAR A:INTEGER;BEGIN A:=0; WHILE K>0 DO BEGIN K:=K-1;A:=(A+DIG[K]*131072)DIV 10;END; ROUNDDECIMALS:=(A+1)DIV 2;END;{:102}{103:} PROCEDURE PRINTSCALED(S:SCALED);VAR DELTA:SCALED; BEGIN IF S<0 THEN BEGIN PRINTCHAR(45);S:=-S;END;PRINTINT(S DIV 65536); PRINTCHAR(46);S:=10*(S MOD 65536)+5;DELTA:=10; REPEAT IF DELTA>65536 THEN S:=S-17232;PRINTCHAR(48+(S DIV 65536)); S:=10*(S MOD 65536);DELTA:=DELTA*10;UNTIL S<=DELTA;END;{:103}{105:} FUNCTION MULTANDADD(N:INTEGER;X,Y,MAXANSWER:SCALED):SCALED; BEGIN IF N<0 THEN BEGIN X:=-X;N:=-N;END; IF N=0 THEN MULTANDADD:=Y ELSE IF((X<=(MAXANSWER-Y)DIV N)AND(-X<=( MAXANSWER+Y)DIV N))THEN MULTANDADD:=N*X+Y ELSE BEGIN ARITHERROR:=TRUE; MULTANDADD:=0;END;END;{:105}{106:}FUNCTION XOVERN(X:SCALED; N:INTEGER):SCALED;VAR NEGATIVE:BOOLEAN;BEGIN NEGATIVE:=FALSE; IF N=0 THEN BEGIN ARITHERROR:=TRUE;XOVERN:=0;REMAINDER:=X; END ELSE BEGIN IF N<0 THEN BEGIN X:=-X;N:=-N;NEGATIVE:=TRUE;END; IF X>=0 THEN BEGIN XOVERN:=X DIV N;REMAINDER:=X MOD N; END ELSE BEGIN XOVERN:=-((-X)DIV N);REMAINDER:=-((-X)MOD N);END;END; IF NEGATIVE THEN REMAINDER:=-REMAINDER;END;{:106}{107:} FUNCTION XNOVERD(X:SCALED;N,D:INTEGER):SCALED;VAR POSITIVE:BOOLEAN; T,U,V:NONNEGATIVEINTEGER; BEGIN IF X>=0 THEN POSITIVE:=TRUE ELSE BEGIN X:=-X;POSITIVE:=FALSE;END; T:=(X MOD 32768)*N;U:=(X DIV 32768)*N+(T DIV 32768); V:=(U MOD D)*32768+(T MOD 32768); IF U DIV D>=32768 THEN ARITHERROR:=TRUE ELSE U:=32768*(U DIV D)+(V DIV D );IF POSITIVE THEN BEGIN XNOVERD:=U;REMAINDER:=V MOD D; END ELSE BEGIN XNOVERD:=-U;REMAINDER:=-(V MOD D);END;END;{:107}{108:} FUNCTION BADNESS(T,S:SCALED):HALFWORD;VAR R:INTEGER; BEGIN IF T=0 THEN BADNESS:=0 ELSE IF S<=0 THEN BADNESS:=10000 ELSE BEGIN IF T<=7230584 THEN R:=(T*297)DIV S ELSE IF S>=1663497 THEN R:=T DIV(S DIV 297)ELSE R:=T; IF R>1290 THEN BADNESS:=10000 ELSE BADNESS:=(R*R*R+131072)DIV 262144; END;END;{:108}{114:}{PROCEDURE PRINTWORD(W:MEMORYWORD); BEGIN PRINTINT(W.INT);PRINTCHAR(32);PRINTSCALED(W.INT);PRINTCHAR(32); PRINTSCALED(ROUND(65536*DBLE(W.GR)));PRINTLN;PRINTINT(W.HH.LH); PRINTCHAR(61);PRINTINT(W.HH.B0);PRINTCHAR(58);PRINTINT(W.HH.B1); PRINTCHAR(59);PRINTINT(W.HH.RH);PRINTCHAR(32);PRINTINT(W.QQQQ.B0); PRINTCHAR(58);PRINTINT(W.QQQQ.B1);PRINTCHAR(58);PRINTINT(W.QQQQ.B2); PRINTCHAR(58);PRINTINT(W.QQQQ.B3);END;}{:114}{119:}{292:} PROCEDURE SHOWTOKENLIST(P,Q:INTEGER;L:INTEGER);LABEL 10;VAR M,C:INTEGER; MATCHCHR:ASCIICODE;N:ASCIICODE;BEGIN MATCHCHR:=35;N:=48;TALLY:=0; WHILE(P<>0)AND(TALLYMEMEND)THEN BEGIN PRINTESC(310);GOTO 10;END; IF MEM[P].HH.LH>=4095 THEN PRINTCS(MEM[P].HH.LH-4095)ELSE BEGIN M:=MEM[P ].HH.LH DIV 256;C:=MEM[P].HH.LH MOD 256; IF MEM[P].HH.LH<0 THEN PRINTESC(562)ELSE{294:} CASE M OF 1,2,3,4,7,8,10,11,12:PRINT(C);6:BEGIN PRINT(C);PRINT(C);END; 5:BEGIN PRINT(MATCHCHR); IF C<=9 THEN PRINTCHAR(C+48)ELSE BEGIN PRINTCHAR(33);GOTO 10;END;END; 13:BEGIN MATCHCHR:=C;PRINT(C);N:=N+1;PRINTCHAR(N);IF N>57 THEN GOTO 10; END;14:IF C=0 THEN PRINT(563);OTHERWISE PRINTESC(562)END{:294};END{:293} ;P:=MEM[P].HH.RH;END;IF P<>0 THEN PRINTESC(411);10:END;{:292}{306:} PROCEDURE RUNAWAY;VAR P:HALFWORD; BEGIN IF SCANNERSTATUS>1 THEN BEGIN PRINTNL(577); CASE SCANNERSTATUS OF 2:BEGIN PRINT(578);P:=DEFREF;END; 3:BEGIN PRINT(579);P:=327141;END;4:BEGIN PRINT(580);P:=327140;END; 5:BEGIN PRINT(581);P:=DEFREF;END;END;PRINTCHAR(63);PRINTLN; SHOWTOKENLIST(MEM[P].HH.RH,0,ERRORLINE-10);END;END;{:306}{:119}{120:} FUNCTION GETAVAIL:HALFWORD;VAR P:HALFWORD;BEGIN P:=AVAIL; IF P<>0 THEN AVAIL:=MEM[AVAIL].HH.RH ELSE IF MEMEND0 THEN BEGIN R:=P;REPEAT Q:=R;R:=MEM[R].HH.RH; DYNUSED:=DYNUSED-1;UNTIL R=0;MEM[Q].HH.RH:=AVAIL;AVAIL:=P;END;END;{:123} {125:}FUNCTION GETNODE(S:INTEGER):HALFWORD;LABEL 40,10,20; VAR P:HALFWORD;Q:HALFWORD;R:INTEGER;T:INTEGER;BEGIN 20:P:=ROVER; REPEAT{127:}Q:=P+MEM[P].HH.LH; WHILE(MEM[Q].HH.RH=327145)DO BEGIN T:=MEM[Q+1].HH.RH; IF Q=ROVER THEN ROVER:=T;MEM[T+1].HH.LH:=MEM[Q+1].HH.LH; MEM[MEM[Q+1].HH.LH+1].HH.RH:=T;Q:=Q+MEM[Q].HH.LH;END;R:=Q-S; IF R>P+1 THEN{128:}BEGIN MEM[P].HH.LH:=R-P;ROVER:=P;GOTO 40;END{:128}; IF R=P THEN IF MEM[P+1].HH.RH<>P THEN{129:}BEGIN ROVER:=MEM[P+1].HH.RH; T:=MEM[P+1].HH.LH;MEM[ROVER+1].HH.LH:=T;MEM[T+1].HH.RH:=ROVER;GOTO 40; END{:129};MEM[P].HH.LH:=Q-P{:127};P:=MEM[P+1].HH.RH;UNTIL P=ROVER; IF S=1073741824 THEN BEGIN GETNODE:=327145;GOTO 10;END; IF LOMEMMAX+2=1998 THEN T:=LOMEMMAX+1000 ELSE T:=LOMEMMAX +1+(HIMEMMIN-LOMEMMAX)DIV 2;P:=MEM[ROVER+1].HH.LH;Q:=LOMEMMAX; MEM[P+1].HH.RH:=Q;MEM[ROVER+1].HH.LH:=Q;IF T>327145 THEN T:=327145; MEM[Q+1].HH.RH:=ROVER;MEM[Q+1].HH.LH:=P;MEM[Q].HH.RH:=327145; MEM[Q].HH.LH:=T-LOMEMMAX;LOMEMMAX:=T;MEM[LOMEMMAX].HH.RH:=0; MEM[LOMEMMAX].HH.LH:=0;ROVER:=Q;GOTO 20;END{:126}; OVERFLOW(301,MEMMAX+1-MEMMIN);40:MEM[R].HH.RH:=0;VARUSED:=VARUSED+S; GETNODE:=R;10:END;{:125}{130:}PROCEDURE FREENODE(P:HALFWORD;S:HALFWORD); VAR Q:HALFWORD;BEGIN MEM[P].HH.LH:=S;MEM[P].HH.RH:=327145; Q:=MEM[ROVER+1].HH.LH;MEM[P+1].HH.LH:=Q;MEM[P+1].HH.RH:=ROVER; MEM[ROVER+1].HH.LH:=P;MEM[Q+1].HH.RH:=P;VARUSED:=VARUSED-S;END;{:130} {131:}PROCEDURE SORTAVAIL;VAR P,Q,R:HALFWORD;OLDROVER:HALFWORD; BEGIN P:=GETNODE(1073741824);P:=MEM[ROVER+1].HH.RH; MEM[ROVER+1].HH.RH:=327145;OLDROVER:=ROVER;WHILE P<>OLDROVER DO{132:} IF P327145 DO BEGIN MEM[MEM[P+1].HH.RH+1].HH.LH:=P; P:=MEM[P+1].HH.RH;END;MEM[P+1].HH.RH:=ROVER;MEM[ROVER+1].HH.LH:=P;END; {:131}{136:}FUNCTION NEWNULLBOX:HALFWORD;VAR P:HALFWORD; BEGIN P:=GETNODE(7);MEM[P].HH.B0:=0;MEM[P].HH.B1:=0;MEM[P+1].INT:=0; MEM[P+2].INT:=0;MEM[P+3].INT:=0;MEM[P+4].INT:=0;MEM[P+5].HH.RH:=0; MEM[P+5].HH.B0:=0;MEM[P+5].HH.B1:=0;MEM[P+6].GR:=0.0;NEWNULLBOX:=P;END; {:136}{139:}FUNCTION NEWRULE:HALFWORD;VAR P:HALFWORD; BEGIN P:=GETNODE(4);MEM[P].HH.B0:=2;MEM[P].HH.B1:=0; MEM[P+1].INT:=-1073741824;MEM[P+2].INT:=-1073741824; MEM[P+3].INT:=-1073741824;NEWRULE:=P;END;{:139}{144:} FUNCTION NEWLIGATURE(F,C:QUARTERWORD;Q:HALFWORD):HALFWORD; VAR P:HALFWORD;BEGIN P:=GETNODE(2);MEM[P].HH.B0:=6;MEM[P+1].HH.B0:=F; MEM[P+1].HH.B1:=C;MEM[P+1].HH.RH:=Q;MEM[P].HH.B1:=0;NEWLIGATURE:=P;END; FUNCTION NEWLIGITEM(C:QUARTERWORD):HALFWORD;VAR P:HALFWORD; BEGIN P:=GETNODE(2);MEM[P].HH.B1:=C;MEM[P+1].HH.RH:=0;NEWLIGITEM:=P;END; {:144}{145:}FUNCTION NEWDISC:HALFWORD;VAR P:HALFWORD; BEGIN P:=GETNODE(2);MEM[P].HH.B0:=7;MEM[P].HH.B1:=0;MEM[P+1].HH.LH:=0; MEM[P+1].HH.RH:=0;NEWDISC:=P;END;{:145}{147:}FUNCTION NEWMATH(W:SCALED; S:SMALLNUMBER):HALFWORD;VAR P:HALFWORD;BEGIN P:=GETNODE(2); MEM[P].HH.B0:=9;MEM[P].HH.B1:=S;MEM[P+1].INT:=W;NEWMATH:=P;END;{:147} {151:}FUNCTION NEWSPEC(P:HALFWORD):HALFWORD;VAR Q:HALFWORD; BEGIN Q:=GETNODE(4);MEM[Q]:=MEM[P];MEM[Q].HH.RH:=0; MEM[Q+1].INT:=MEM[P+1].INT;MEM[Q+2].INT:=MEM[P+2].INT; MEM[Q+3].INT:=MEM[P+3].INT;NEWSPEC:=Q;END;{:151}{152:} FUNCTION NEWPARAMGLUE(N:SMALLNUMBER):HALFWORD;VAR P:HALFWORD;Q:HALFWORD; BEGIN P:=GETNODE(2);MEM[P].HH.B0:=10;MEM[P].HH.B1:=N+1; MEM[P+1].HH.RH:=0;Q:={224:}EQTB[10782+N].HH.RH{:224};MEM[P+1].HH.LH:=Q; MEM[Q].HH.RH:=MEM[Q].HH.RH+1;NEWPARAMGLUE:=P;END;{:152}{153:} FUNCTION NEWGLUE(Q:HALFWORD):HALFWORD;VAR P:HALFWORD; BEGIN P:=GETNODE(2);MEM[P].HH.B0:=10;MEM[P].HH.B1:=0;MEM[P+1].HH.RH:=0; MEM[P+1].HH.LH:=Q;MEM[Q].HH.RH:=MEM[Q].HH.RH+1;NEWGLUE:=P;END;{:153} {154:}FUNCTION NEWSKIPPARAM(N:SMALLNUMBER):HALFWORD;VAR P:HALFWORD; BEGIN TEMPPTR:=NEWSPEC({224:}EQTB[10782+N].HH.RH{:224}); P:=NEWGLUE(TEMPPTR);MEM[TEMPPTR].HH.RH:=0;MEM[P].HH.B1:=N+1; NEWSKIPPARAM:=P;END;{:154}{156:}FUNCTION NEWKERN(W:SCALED):HALFWORD; VAR P:HALFWORD;BEGIN P:=GETNODE(2);MEM[P].HH.B0:=11;MEM[P].HH.B1:=0; MEM[P+1].INT:=W;NEWKERN:=P;END;{:156}{158:} FUNCTION NEWPENALTY(M:INTEGER):HALFWORD;VAR P:HALFWORD; BEGIN P:=GETNODE(2);MEM[P].HH.B0:=12;MEM[P].HH.B1:=0;MEM[P+1].INT:=M; NEWPENALTY:=P;END;{:158}{167:}{PROCEDURE CHECKMEM(PRINTLOCS:BOOLEAN); LABEL 31,32;VAR P,Q:HALFWORD;CLOBBERED:BOOLEAN; BEGIN FOR P:=MEMMIN TO LOMEMMAX DO FREE[P]:=FALSE; FOR P:=HIMEMMIN TO MEMEND DO FREE[P]:=FALSE;[168:]P:=AVAIL;Q:=0; CLOBBERED:=FALSE; WHILE P<>0 DO BEGIN IF(P>MEMEND)OR(P=LOMEMMAX)OR(P=LOMEMMAX)OR(MEM[P+1].HH.RHLOMEMMAX) OR(MEM[MEM[P+1].HH.RH+1].HH.LH<>P)THEN CLOBBERED:=TRUE; IF CLOBBERED THEN BEGIN PRINTNL(303);PRINTINT(Q);GOTO 32;END; FOR Q:=P TO P+MEM[P].HH.LH-1 DO BEGIN IF FREE[Q]THEN BEGIN PRINTNL(304); PRINTINT(Q);GOTO 32;END;FREE[Q]:=TRUE;END;Q:=P;P:=MEM[P+1].HH.RH; UNTIL P=ROVER;32:[:169];[170:]P:=MEMMIN; WHILE P<=LOMEMMAX DO BEGIN IF(MEM[P].HH.RH=327145)THEN BEGIN PRINTNL(305 );PRINTINT(P);END;WHILE(P<=LOMEMMAX)AND NOT FREE[P]DO P:=P+1; WHILE(P<=LOMEMMAX)AND FREE[P]DO P:=P+1;END[:170]; IF PRINTLOCS THEN[171:]BEGIN PRINTNL(306); FOR P:=MEMMIN TO LOMEMMAX DO IF NOT FREE[P]AND((P>WASLOMAX)OR WASFREE[P] )THEN BEGIN PRINTCHAR(32);PRINTINT(P);END; FOR P:=HIMEMMIN TO MEMEND DO IF NOT FREE[P]AND((P WASMEMEND)OR WASFREE[P])THEN BEGIN PRINTCHAR(32);PRINTINT(P);END; END[:171];FOR P:=MEMMIN TO LOMEMMAX DO WASFREE[P]:=FREE[P]; FOR P:=HIMEMMIN TO MEMEND DO WASFREE[P]:=FREE[P];WASMEMEND:=MEMEND; WASLOMAX:=LOMEMMAX;WASHIMIN:=HIMEMMIN;END;}{:167}{172:} {PROCEDURE SEARCHMEM(P:HALFWORD);VAR Q:INTEGER; BEGIN FOR Q:=MEMMIN TO LOMEMMAX DO BEGIN IF MEM[Q].HH.RH=P THEN BEGIN PRINTNL(307);PRINTINT(Q);PRINTCHAR(41);END; IF MEM[Q].HH.LH=P THEN BEGIN PRINTNL(308);PRINTINT(Q);PRINTCHAR(41);END; END; FOR Q:=HIMEMMIN TO MEMEND DO BEGIN IF MEM[Q].HH.RH=P THEN BEGIN PRINTNL( 307);PRINTINT(Q);PRINTCHAR(41);END; IF MEM[Q].HH.LH=P THEN BEGIN PRINTNL(308);PRINTINT(Q);PRINTCHAR(41);END; END; [255:]FOR Q:=1 TO 11838 DO BEGIN IF EQTB[Q].HH.RH=P THEN BEGIN PRINTNL( 504);PRINTINT(Q);PRINTCHAR(41);END;END[:255]; [285:]IF SAVEPTR>0 THEN FOR Q:=0 TO SAVEPTR-1 DO BEGIN IF SAVESTACK[Q]. HH.RH=P THEN BEGIN PRINTNL(554);PRINTINT(Q);PRINTCHAR(41);END;END[:285]; [933:]FOR Q:=0 TO 503 DO BEGIN IF HYPHLIST[Q]=P THEN BEGIN PRINTNL(949); PRINTINT(Q);PRINTCHAR(41);END;END[:933];END;}{:172}{174:} PROCEDURE SHORTDISPLAY(P:INTEGER);VAR N:INTEGER; BEGIN WHILE P>MEMMIN DO BEGIN IF(P>=HIMEMMIN)THEN BEGIN IF P<=MEMEND THEN BEGIN IF MEM[P].HH.B0<>FONTINSHORTDISPLAY THEN BEGIN IF(MEM[P].HH. B0<0)OR(MEM[P].HH.B0>FONTMAX)THEN PRINTCHAR(42)ELSE{267:} PRINTESC(HASH[10524+MEM[P].HH.B0].RH){:267};PRINTCHAR(32); FONTINSHORTDISPLAY:=MEM[P].HH.B0;END;PRINT(MEM[P].HH.B1);END; END ELSE{175:}CASE MEM[P].HH.B0 OF 0,1,3,8,4,5,13:PRINT(309); 2:PRINTCHAR(124);10:IF MEM[P+1].HH.LH<>0 THEN PRINTCHAR(32); 9:IF MEM[P].HH.B1>=4 THEN PRINT(309)ELSE PRINTCHAR(36); 6:SHORTDISPLAY(MEM[P+1].HH.RH);7:BEGIN SHORTDISPLAY(MEM[P+1].HH.LH); SHORTDISPLAY(MEM[P+1].HH.RH);N:=MEM[P].HH.B1; WHILE N>0 DO BEGIN IF MEM[P].HH.RH<>0 THEN P:=MEM[P].HH.RH;N:=N-1;END; END;OTHERWISE END{:175};P:=MEM[P].HH.RH;END;END;{:174}{176:} PROCEDURE PRINTFONTANDCHAR(P:INTEGER); BEGIN IF P>MEMEND THEN PRINTESC(310)ELSE BEGIN IF(MEM[P].HH.B0<0)OR(MEM[ P].HH.B0>FONTMAX)THEN PRINTCHAR(42)ELSE{267:} PRINTESC(HASH[10524+MEM[P].HH.B0].RH){:267};PRINTCHAR(32); PRINT(MEM[P].HH.B1);END;END;PROCEDURE PRINTMARK(P:INTEGER); BEGIN PRINTCHAR(123); IF(PMEMEND)THEN PRINTESC(310)ELSE SHOWTOKENLIST(MEM[P].HH .RH,0,MAXPRINTLINE-10);PRINTCHAR(125);END; PROCEDURE PRINTRULEDIMEN(D:SCALED); BEGIN IF(D=-1073741824)THEN PRINTCHAR(42)ELSE PRINTSCALED(D);END;{:176} {177:}PROCEDURE PRINTGLUE(D:SCALED;ORDER:INTEGER;S:STRNUMBER); BEGIN PRINTSCALED(D); IF(ORDER<0)OR(ORDER>3)THEN PRINT(311)ELSE IF ORDER>0 THEN BEGIN PRINT( 312);WHILE ORDER>1 DO BEGIN PRINTCHAR(108);ORDER:=ORDER-1;END; END ELSE IF S<>0 THEN PRINT(S);END;{:177}{178:} PROCEDURE PRINTSPEC(P:INTEGER;S:STRNUMBER); BEGIN IF(P=LOMEMMAX)THEN PRINTCHAR(42)ELSE BEGIN PRINTSCALED(MEM[P+1].INT);IF S<>0 THEN PRINT(S); IF MEM[P+2].INT<>0 THEN BEGIN PRINT(313); PRINTGLUE(MEM[P+2].INT,MEM[P].HH.B0,S);END; IF MEM[P+3].INT<>0 THEN BEGIN PRINT(314); PRINTGLUE(MEM[P+3].INT,MEM[P].HH.B1,S);END;END;END;{:178}{179:}{691:} PROCEDURE PRINTFAMANDCHAR(P:HALFWORD);BEGIN PRINTESC(467); PRINTINT(MEM[P].HH.B0);PRINTCHAR(32);PRINT(MEM[P].HH.B1);END; PROCEDURE PRINTDELIMITER(P:HALFWORD);VAR A:INTEGER; BEGIN A:=MEM[P].QQQQ.B0*256+MEM[P].QQQQ.B1; A:=A*4096+MEM[P].QQQQ.B2*256+MEM[P].QQQQ.B3; IF A<0 THEN PRINTINT(A)ELSE PRINTHEX(A);END;{:691}{692:} PROCEDURE SHOWINFO;FORWARD;PROCEDURE PRINTSUBSIDIARYDATA(P:HALFWORD; C:ASCIICODE); BEGIN IF(POOLPTR-STRSTART[STRPTR])>=DEPTHTHRESHOLD THEN BEGIN IF MEM[P]. HH.RH<>0 THEN PRINT(315);END ELSE BEGIN BEGIN STRPOOL[POOLPTR]:=C; POOLPTR:=POOLPTR+1;END;TEMPPTR:=P;CASE MEM[P].HH.RH OF 1:BEGIN PRINTLN; PRINTCURRENTSTRING;PRINTFAMANDCHAR(P);END;2:SHOWINFO; 3:IF MEM[P].HH.LH=0 THEN BEGIN PRINTLN;PRINTCURRENTSTRING;PRINT(868); END ELSE SHOWINFO;OTHERWISE END;POOLPTR:=POOLPTR-1;END;END;{:692}{694:} PROCEDURE PRINTSTYLE(C:INTEGER);BEGIN CASE C DIV 2 OF 0:PRINTESC(869); 1:PRINTESC(870);2:PRINTESC(871);3:PRINTESC(872);OTHERWISE PRINT(873)END; END;{:694}{225:}PROCEDURE PRINTSKIPPARAM(N:INTEGER); BEGIN CASE N OF 0:PRINTESC(379);1:PRINTESC(380);2:PRINTESC(381); 3:PRINTESC(382);4:PRINTESC(383);5:PRINTESC(384);6:PRINTESC(385); 7:PRINTESC(386);8:PRINTESC(387);9:PRINTESC(388);10:PRINTESC(389); 11:PRINTESC(390);12:PRINTESC(391);13:PRINTESC(392);14:PRINTESC(393); 15:PRINTESC(394);16:PRINTESC(395);17:PRINTESC(396); OTHERWISE PRINT(397)END;END;{:225}{:179}{182:} PROCEDURE SHOWNODELIST(P:INTEGER);LABEL 10;VAR N:INTEGER;G:DOUBLE; BEGIN IF(POOLPTR-STRSTART[STRPTR])>DEPTHTHRESHOLD THEN BEGIN IF P>0 THEN PRINT(315);GOTO 10;END;N:=0;WHILE P>MEMMIN DO BEGIN PRINTLN; PRINTCURRENTSTRING;IF P>MEMEND THEN BEGIN PRINT(316);GOTO 10;END;N:=N+1; IF N>BREADTHMAX THEN BEGIN PRINT(317);GOTO 10;END;{183:} IF(P>=HIMEMMIN)THEN PRINTFONTANDCHAR(P)ELSE CASE MEM[P].HH.B0 OF 0,1,13: {184:} BEGIN IF MEM[P].HH.B0=0 THEN PRINTESC(104)ELSE IF MEM[P].HH.B0=1 THEN PRINTESC(118)ELSE PRINTESC(319);PRINT(320);PRINTSCALED(MEM[P+3].INT); PRINTCHAR(43);PRINTSCALED(MEM[P+2].INT);PRINT(321); PRINTSCALED(MEM[P+1].INT);IF MEM[P].HH.B0=13 THEN{185:} BEGIN IF MEM[P].HH.B1<>0 THEN BEGIN PRINT(287);PRINTINT(MEM[P].HH.B1+1); PRINT(323);END;IF MEM[P+6].INT<>0 THEN BEGIN PRINT(324); PRINTGLUE(MEM[P+6].INT,MEM[P+5].HH.B1,0);END; IF MEM[P+4].INT<>0 THEN BEGIN PRINT(325); PRINTGLUE(MEM[P+4].INT,MEM[P+5].HH.B0,0);END;END{:185}ELSE BEGIN{186:} G:=DBLE(MEM[P+6].GR); IF(G<>0.0D0)AND(MEM[P+5].HH.B0<>0)THEN BEGIN PRINT(326); IF MEM[P+5].HH.B0=2 THEN PRINT(327); IF(MEM[P+6].GR::VAXFFLOAT.SIGN AND(MEM[P+6].GR::VAXFFLOAT.EXPO=0))THEN PRINT(328)ELSE IF ABS(G)>20000.0D0 THEN BEGIN IF G>0.0D0 THEN PRINTCHAR( 62)ELSE PRINT(329);PRINTGLUE(20000*65536,MEM[P+5].HH.B1,0); END ELSE PRINTGLUE(ROUND(65536*G),MEM[P+5].HH.B1,0);END{:186}; IF MEM[P+4].INT<>0 THEN BEGIN PRINT(322);PRINTSCALED(MEM[P+4].INT);END; IF(ETEXMODE=1)THEN{1438:} IF(MEM[P].HH.B0=0)AND(MEM[P].HH.B1=2)THEN PRINT(1368){:1438};END; BEGIN BEGIN STRPOOL[POOLPTR]:=46;POOLPTR:=POOLPTR+1;END; SHOWNODELIST(MEM[P+5].HH.RH);POOLPTR:=POOLPTR-1;END;END{:184};2:{187:} BEGIN PRINTESC(330);PRINTRULEDIMEN(MEM[P+3].INT);PRINTCHAR(43); PRINTRULEDIMEN(MEM[P+2].INT);PRINT(321);PRINTRULEDIMEN(MEM[P+1].INT); END{:187};3:{188:}BEGIN PRINTESC(331);PRINTINT(MEM[P].HH.B1);PRINT(332); PRINTSCALED(MEM[P+3].INT);PRINT(333);PRINTSPEC(MEM[P+4].HH.RH,0); PRINTCHAR(44);PRINTSCALED(MEM[P+2].INT);PRINT(334); PRINTINT(MEM[P+1].INT);BEGIN BEGIN STRPOOL[POOLPTR]:=46; POOLPTR:=POOLPTR+1;END;SHOWNODELIST(MEM[P+4].HH.LH);POOLPTR:=POOLPTR-1; END;END{:188};8:{1356:} CASE MEM[P].HH.B1 OF 0:BEGIN PRINTWRITEWHATSIT(1295,P);PRINTCHAR(61); PRINTFILENAME(MEM[P+1].HH.RH,MEM[P+2].HH.LH,MEM[P+2].HH.RH);END; 1:BEGIN PRINTWRITEWHATSIT(603,P);PRINTMARK(MEM[P+1].HH.RH);END; 2:PRINTWRITEWHATSIT(1296,P);3:BEGIN PRINTESC(1297); PRINTMARK(MEM[P+1].HH.RH);END;4:BEGIN PRINTESC(1299); PRINTINT(MEM[P+1].HH.RH);PRINT(1302);PRINTINT(MEM[P+1].HH.B0); PRINTCHAR(44);PRINTINT(MEM[P+1].HH.B1);PRINTCHAR(41);END; OTHERWISE PRINT(1303)END{:1356};10:{189:}IF MEM[P].HH.B1>=100 THEN{190:} BEGIN PRINTESC(339); IF MEM[P].HH.B1=101 THEN PRINTCHAR(99)ELSE IF MEM[P].HH.B1=102 THEN PRINTCHAR(120);PRINT(340);PRINTSPEC(MEM[P+1].HH.LH,0); BEGIN BEGIN STRPOOL[POOLPTR]:=46;POOLPTR:=POOLPTR+1;END; SHOWNODELIST(MEM[P+1].HH.RH);POOLPTR:=POOLPTR-1;END;END{:190} ELSE BEGIN PRINTESC(335);IF MEM[P].HH.B1<>0 THEN BEGIN PRINTCHAR(40); IF MEM[P].HH.B1<98 THEN PRINTSKIPPARAM(MEM[P].HH.B1-1)ELSE IF MEM[P].HH. B1=98 THEN PRINTESC(336)ELSE PRINTESC(337);PRINTCHAR(41);END; IF MEM[P].HH.B1<>98 THEN BEGIN PRINTCHAR(32); IF MEM[P].HH.B1<98 THEN PRINTSPEC(MEM[P+1].HH.LH,0)ELSE PRINTSPEC(MEM[P +1].HH.LH,338);END;END{:189};11:{191:} IF MEM[P].HH.B1<>99 THEN BEGIN PRINTESC(341); IF MEM[P].HH.B1<>0 THEN PRINTCHAR(32);PRINTSCALED(MEM[P+1].INT); IF MEM[P].HH.B1=2 THEN PRINT(342);END ELSE BEGIN PRINTESC(343); PRINTSCALED(MEM[P+1].INT);PRINT(338);END{:191};9:{192:} IF MEM[P].HH.B1>1 THEN BEGIN IF ODD(MEM[P].HH.B1)THEN PRINTESC(344)ELSE PRINTESC(345); IF MEM[P].HH.B1>8 THEN PRINTCHAR(82)ELSE IF MEM[P].HH.B1>4 THEN PRINTCHAR(76)ELSE PRINTCHAR(77);END ELSE BEGIN PRINTESC(346); IF MEM[P].HH.B1=0 THEN PRINT(347)ELSE PRINT(348); IF MEM[P+1].INT<>0 THEN BEGIN PRINT(349);PRINTSCALED(MEM[P+1].INT);END; END{:192};6:{193:}BEGIN PRINTFONTANDCHAR(P+1);PRINT(350); IF MEM[P].HH.B1>1 THEN PRINTCHAR(124); FONTINSHORTDISPLAY:=MEM[P+1].HH.B0;SHORTDISPLAY(MEM[P+1].HH.RH); IF ODD(MEM[P].HH.B1)THEN PRINTCHAR(124);PRINTCHAR(41);END{:193}; 12:{194:}BEGIN PRINTESC(351);PRINTINT(MEM[P+1].INT);END{:194};7:{195:} BEGIN PRINTESC(352);IF MEM[P].HH.B1>0 THEN BEGIN PRINT(353); PRINTINT(MEM[P].HH.B1);END;BEGIN BEGIN STRPOOL[POOLPTR]:=46; POOLPTR:=POOLPTR+1;END;SHOWNODELIST(MEM[P+1].HH.LH);POOLPTR:=POOLPTR-1; END;BEGIN STRPOOL[POOLPTR]:=124;POOLPTR:=POOLPTR+1;END; SHOWNODELIST(MEM[P+1].HH.RH);POOLPTR:=POOLPTR-1;END{:195};4:{196:} BEGIN PRINTESC(354);IF MEM[P+1].HH.LH<>0 THEN BEGIN PRINTCHAR(115); PRINTINT(MEM[P+1].HH.LH);END;PRINTMARK(MEM[P+1].HH.RH);END{:196}; 5:{197:}BEGIN PRINTESC(355);BEGIN BEGIN STRPOOL[POOLPTR]:=46; POOLPTR:=POOLPTR+1;END;SHOWNODELIST(MEM[P+1].INT);POOLPTR:=POOLPTR-1; END;END{:197};{690:}14:PRINTSTYLE(MEM[P].HH.B1);15:{695:} BEGIN PRINTESC(528);BEGIN STRPOOL[POOLPTR]:=68;POOLPTR:=POOLPTR+1;END; SHOWNODELIST(MEM[P+1].HH.LH);POOLPTR:=POOLPTR-1; BEGIN STRPOOL[POOLPTR]:=84;POOLPTR:=POOLPTR+1;END; SHOWNODELIST(MEM[P+1].HH.RH);POOLPTR:=POOLPTR-1; BEGIN STRPOOL[POOLPTR]:=83;POOLPTR:=POOLPTR+1;END; SHOWNODELIST(MEM[P+2].HH.LH);POOLPTR:=POOLPTR-1; BEGIN STRPOOL[POOLPTR]:=115;POOLPTR:=POOLPTR+1;END; SHOWNODELIST(MEM[P+2].HH.RH);POOLPTR:=POOLPTR-1;END{:695}; 16,17,18,19,20,21,22,23,24,27,26,29,28,30,31:{696:} BEGIN CASE MEM[P].HH.B0 OF 16:PRINTESC(874);17:PRINTESC(875); 18:PRINTESC(876);19:PRINTESC(877);20:PRINTESC(878);21:PRINTESC(879); 22:PRINTESC(880);23:PRINTESC(881);27:PRINTESC(882);26:PRINTESC(883); 29:PRINTESC(543);24:BEGIN PRINTESC(537);PRINTDELIMITER(P+4);END; 28:BEGIN PRINTESC(511);PRINTFAMANDCHAR(P+4);END;30:BEGIN PRINTESC(884); PRINTDELIMITER(P+1);END; 31:BEGIN IF MEM[P].HH.B1=0 THEN PRINTESC(885)ELSE PRINTESC(886); PRINTDELIMITER(P+1);END;END; IF MEM[P].HH.B0<30 THEN BEGIN IF MEM[P].HH.B1<>0 THEN IF MEM[P].HH.B1=1 THEN PRINTESC(887)ELSE PRINTESC(888);PRINTSUBSIDIARYDATA(P+1,46);END; PRINTSUBSIDIARYDATA(P+2,94);PRINTSUBSIDIARYDATA(P+3,95);END{:696}; 25:{697:}BEGIN PRINTESC(889); IF MEM[P+1].INT=1073741824 THEN PRINT(890)ELSE PRINTSCALED(MEM[P+1].INT) ; IF(MEM[P+4].QQQQ.B0<>0)OR(MEM[P+4].QQQQ.B1<>0)OR(MEM[P+4].QQQQ.B2<>0)OR( MEM[P+4].QQQQ.B3<>0)THEN BEGIN PRINT(891);PRINTDELIMITER(P+4);END; IF(MEM[P+5].QQQQ.B0<>0)OR(MEM[P+5].QQQQ.B1<>0)OR(MEM[P+5].QQQQ.B2<>0)OR( MEM[P+5].QQQQ.B3<>0)THEN BEGIN PRINT(892);PRINTDELIMITER(P+5);END; PRINTSUBSIDIARYDATA(P+2,92);PRINTSUBSIDIARYDATA(P+3,47);END{:697};{:690} OTHERWISE PRINT(318)END{:183};P:=MEM[P].HH.RH;END;10:END;{:182}{198:} PROCEDURE SHOWBOX(P:HALFWORD);BEGIN{236:} DEPTHTHRESHOLD:=EQTB[13193].INT;BREADTHMAX:=EQTB[13192].INT{:236}; IF BREADTHMAX<=0 THEN BREADTHMAX:=5; IF POOLPTR+DEPTHTHRESHOLD>=POOLSIZE THEN DEPTHTHRESHOLD:=POOLSIZE- POOLPTR-1;SHOWNODELIST(P);PRINTLN;END;{:198}{200:} PROCEDURE DELETETOKENREF(P:HALFWORD); BEGIN IF MEM[P].HH.LH=0 THEN FLUSHLIST(P)ELSE MEM[P].HH.LH:=MEM[P].HH.LH -1;END;{:200}{201:}PROCEDURE DELETEGLUEREF(P:HALFWORD); BEGIN IF MEM[P].HH.RH=0 THEN FREENODE(P,4)ELSE MEM[P].HH.RH:=MEM[P].HH. RH-1;END;{:201}{202:}PROCEDURE FLUSHNODELIST(P:HALFWORD);LABEL 30; VAR Q:HALFWORD;BEGIN WHILE P<>0 DO BEGIN Q:=MEM[P].HH.RH; IF(P>=HIMEMMIN)THEN BEGIN MEM[P].HH.RH:=AVAIL;AVAIL:=P; DYNUSED:=DYNUSED-1; END ELSE BEGIN CASE MEM[P].HH.B0 OF 0,1,13:BEGIN FLUSHNODELIST(MEM[P+5]. HH.RH);FREENODE(P,7);GOTO 30;END;2:BEGIN FREENODE(P,4);GOTO 30;END; 3:BEGIN FLUSHNODELIST(MEM[P+4].HH.LH);DELETEGLUEREF(MEM[P+4].HH.RH); FREENODE(P,5);GOTO 30;END;8:{1358:} BEGIN CASE MEM[P].HH.B1 OF 0:FREENODE(P,3); 1,3:BEGIN DELETETOKENREF(MEM[P+1].HH.RH);FREENODE(P,2);GOTO 30;END; 2,4:FREENODE(P,2);OTHERWISE CONFUSION(1305)END;GOTO 30;END{:1358}; 10:BEGIN BEGIN IF MEM[MEM[P+1].HH.LH].HH.RH=0 THEN FREENODE(MEM[P+1].HH. LH,4)ELSE MEM[MEM[P+1].HH.LH].HH.RH:=MEM[MEM[P+1].HH.LH].HH.RH-1;END; IF MEM[P+1].HH.RH<>0 THEN FLUSHNODELIST(MEM[P+1].HH.RH);END;11,9,12:; 6:FLUSHNODELIST(MEM[P+1].HH.RH);4:DELETETOKENREF(MEM[P+1].HH.RH); 7:BEGIN FLUSHNODELIST(MEM[P+1].HH.LH);FLUSHNODELIST(MEM[P+1].HH.RH);END; 5:FLUSHNODELIST(MEM[P+1].INT);{698:}14:BEGIN FREENODE(P,3);GOTO 30;END; 15:BEGIN FLUSHNODELIST(MEM[P+1].HH.LH);FLUSHNODELIST(MEM[P+1].HH.RH); FLUSHNODELIST(MEM[P+2].HH.LH);FLUSHNODELIST(MEM[P+2].HH.RH); FREENODE(P,3);GOTO 30;END; 16,17,18,19,20,21,22,23,24,27,26,29,28:BEGIN IF MEM[P+1].HH.RH>=2 THEN FLUSHNODELIST(MEM[P+1].HH.LH); IF MEM[P+2].HH.RH>=2 THEN FLUSHNODELIST(MEM[P+2].HH.LH); IF MEM[P+3].HH.RH>=2 THEN FLUSHNODELIST(MEM[P+3].HH.LH); IF MEM[P].HH.B0=24 THEN FREENODE(P,5)ELSE IF MEM[P].HH.B0=28 THEN FREENODE(P,5)ELSE FREENODE(P,4);GOTO 30;END;30,31:BEGIN FREENODE(P,4); GOTO 30;END;25:BEGIN FLUSHNODELIST(MEM[P+2].HH.LH); FLUSHNODELIST(MEM[P+3].HH.LH);FREENODE(P,6);GOTO 30;END;{:698} OTHERWISE CONFUSION(356)END;FREENODE(P,2);30:END;P:=Q;END;END;{:202} {204:}FUNCTION COPYNODELIST(P:HALFWORD):HALFWORD;VAR H:HALFWORD; Q:HALFWORD;R:HALFWORD;WORDS:0..5;BEGIN H:=GETAVAIL;Q:=H; WHILE P<>0 DO BEGIN{205:}WORDS:=1; IF(P>=HIMEMMIN)THEN R:=GETAVAIL ELSE{206:} CASE MEM[P].HH.B0 OF 0,1,13:BEGIN R:=GETNODE(7);MEM[R+6]:=MEM[P+6]; MEM[R+5]:=MEM[P+5];MEM[R+5].HH.RH:=COPYNODELIST(MEM[P+5].HH.RH); WORDS:=5;END;2:BEGIN R:=GETNODE(4);WORDS:=4;END;3:BEGIN R:=GETNODE(5); MEM[R+4]:=MEM[P+4]; MEM[MEM[P+4].HH.RH].HH.RH:=MEM[MEM[P+4].HH.RH].HH.RH+1; MEM[R+4].HH.LH:=COPYNODELIST(MEM[P+4].HH.LH);WORDS:=4;END;8:{1357:} CASE MEM[P].HH.B1 OF 0:BEGIN R:=GETNODE(3);WORDS:=3;END; 1,3:BEGIN R:=GETNODE(2); MEM[MEM[P+1].HH.RH].HH.LH:=MEM[MEM[P+1].HH.RH].HH.LH+1;WORDS:=2;END; 2,4:BEGIN R:=GETNODE(2);WORDS:=2;END;OTHERWISE CONFUSION(1304)END{:1357} ;10:BEGIN R:=GETNODE(2); MEM[MEM[P+1].HH.LH].HH.RH:=MEM[MEM[P+1].HH.LH].HH.RH+1; MEM[R+1].HH.LH:=MEM[P+1].HH.LH; MEM[R+1].HH.RH:=COPYNODELIST(MEM[P+1].HH.RH);END; 11,9,12:BEGIN R:=GETNODE(2);WORDS:=2;END;6:BEGIN R:=GETNODE(2); MEM[R+1]:=MEM[P+1];MEM[R+1].HH.RH:=COPYNODELIST(MEM[P+1].HH.RH);END; 7:BEGIN R:=GETNODE(2);MEM[R+1].HH.LH:=COPYNODELIST(MEM[P+1].HH.LH); MEM[R+1].HH.RH:=COPYNODELIST(MEM[P+1].HH.RH);END;4:BEGIN R:=GETNODE(2); MEM[MEM[P+1].HH.RH].HH.LH:=MEM[MEM[P+1].HH.RH].HH.LH+1;WORDS:=2;END; 5:BEGIN R:=GETNODE(2);MEM[R+1].INT:=COPYNODELIST(MEM[P+1].INT);END; OTHERWISE CONFUSION(357)END{:206};WHILE WORDS>0 DO BEGIN WORDS:=WORDS-1; MEM[R+WORDS]:=MEM[P+WORDS];END{:205};MEM[Q].HH.RH:=R;Q:=R; P:=MEM[P].HH.RH;END;MEM[Q].HH.RH:=0;Q:=MEM[H].HH.RH; BEGIN MEM[H].HH.RH:=AVAIL;AVAIL:=H;DYNUSED:=DYNUSED-1;END; COPYNODELIST:=Q;END;{:204}{211:}PROCEDURE PRINTMODE(M:INTEGER); BEGIN IF M>0 THEN CASE M DIV(101)OF 0:PRINT(358);1:PRINT(359); 2:PRINT(360); END ELSE IF M=0 THEN PRINT(361)ELSE CASE(-M)DIV(101)OF 0:PRINT(362); 1:PRINT(363);2:PRINT(346);END;PRINT(364);END;{:211}{216:} PROCEDURE PUSHNEST; BEGIN IF NESTPTR>MAXNESTSTACK THEN BEGIN MAXNESTSTACK:=NESTPTR; IF NESTPTR=NESTSIZE THEN OVERFLOW(365,NESTSIZE);END; NEST[NESTPTR]:=CURLIST;NESTPTR:=NESTPTR+1;CURLIST.HEADFIELD:=GETAVAIL; CURLIST.TAILFIELD:=CURLIST.HEADFIELD;CURLIST.PGFIELD:=0; CURLIST.MLFIELD:=LINE;CURLIST.ETEXAUXFIELD:=0;END;{:216}{217:} PROCEDURE POPNEST;BEGIN BEGIN MEM[CURLIST.HEADFIELD].HH.RH:=AVAIL; AVAIL:=CURLIST.HEADFIELD;DYNUSED:=DYNUSED-1;END;NESTPTR:=NESTPTR-1; CURLIST:=NEST[NESTPTR];END;{:217}{218:}PROCEDURE PRINTTOTALS;FORWARD; PROCEDURE SHOWACTIVITIES;VAR P:0..NESTSIZE;M:-203..203;A:MEMORYWORD; Q,R:HALFWORD;T:INTEGER;BEGIN NEST[NESTPTR]:=CURLIST;PRINTNL(339); PRINTLN;FOR P:=NESTPTR DOWNTO 0 DO BEGIN M:=NEST[P].MODEFIELD; A:=NEST[P].AUXFIELD;PRINTNL(366);PRINTMODE(M);PRINT(367); PRINTINT(ABS(NEST[P].MLFIELD)); IF M=102 THEN IF NEST[P].PGFIELD<>8585216 THEN BEGIN PRINT(368); PRINTINT(NEST[P].PGFIELD MOD 65536);PRINT(369); PRINTINT(NEST[P].PGFIELD DIV 4194304);PRINTCHAR(44); PRINTINT((NEST[P].PGFIELD DIV 65536)MOD 64);PRINTCHAR(41);END; IF NEST[P].MLFIELD<0 THEN PRINT(370);IF P=0 THEN BEGIN{986:} IF 327142<>PAGETAIL THEN BEGIN PRINTNL(989); IF OUTPUTACTIVE THEN PRINT(990);SHOWBOX(MEM[327142].HH.RH); IF PAGECONTENTS>0 THEN BEGIN PRINTNL(991);PRINTTOTALS;PRINTNL(992); PRINTSCALED(PAGESOFAR[0]);R:=MEM[327144].HH.RH; WHILE R<>327144 DO BEGIN PRINTLN;PRINTESC(331);T:=MEM[R].HH.B1; PRINTINT(T);PRINT(993);T:=XOVERN(MEM[R+3].INT,1000)*EQTB[13233+T].INT; PRINTSCALED(T);IF MEM[R].HH.B0=1 THEN BEGIN Q:=327142;T:=0; REPEAT Q:=MEM[Q].HH.RH; IF(MEM[Q].HH.B0=3)AND(MEM[Q].HH.B1=MEM[R].HH.B1)THEN T:=T+1; UNTIL Q=MEM[R+1].HH.LH;PRINT(994);PRINTINT(T);PRINT(995);END; R:=MEM[R].HH.RH;END;END;END{:986}; IF MEM[327143].HH.RH<>0 THEN PRINTNL(371);END; SHOWBOX(MEM[NEST[P].HEADFIELD].HH.RH);{219:} CASE ABS(M)DIV(101)OF 0:BEGIN PRINTNL(372); IF A.INT<=-65536000 THEN PRINT(373)ELSE PRINTSCALED(A.INT); IF NEST[P].PGFIELD<>0 THEN BEGIN PRINT(374);PRINTINT(NEST[P].PGFIELD); PRINT(375);IF NEST[P].PGFIELD<>1 THEN PRINTCHAR(115);END;END; 1:BEGIN PRINTNL(376);PRINTINT(A.HH.LH); IF M>0 THEN IF A.HH.RH>0 THEN BEGIN PRINT(377);PRINTINT(A.HH.RH);END; END;2:IF A.INT<>0 THEN BEGIN PRINT(378);SHOWBOX(A.INT);END;END{:219}; END;END;{:218}{237:}PROCEDURE PRINTPARAM(N:INTEGER); BEGIN CASE N OF 0:PRINTESC(423);1:PRINTESC(424);2:PRINTESC(425); 3:PRINTESC(426);4:PRINTESC(427);5:PRINTESC(428);6:PRINTESC(429); 7:PRINTESC(430);8:PRINTESC(431);9:PRINTESC(432);10:PRINTESC(433); 11:PRINTESC(434);12:PRINTESC(435);13:PRINTESC(436);14:PRINTESC(437); 15:PRINTESC(438);16:PRINTESC(439);17:PRINTESC(440);18:PRINTESC(441); 19:PRINTESC(442);20:PRINTESC(443);21:PRINTESC(444);22:PRINTESC(445); 23:PRINTESC(446);24:PRINTESC(447);25:PRINTESC(448);26:PRINTESC(449); 27:PRINTESC(450);28:PRINTESC(451);29:PRINTESC(452);30:PRINTESC(453); 31:PRINTESC(454);32:PRINTESC(455);33:PRINTESC(456);34:PRINTESC(457); 35:PRINTESC(458);36:PRINTESC(459);37:PRINTESC(460);38:PRINTESC(461); 39:PRINTESC(462);40:PRINTESC(463);41:PRINTESC(464);42:PRINTESC(465); 43:PRINTESC(466);44:PRINTESC(467);45:PRINTESC(468);46:PRINTESC(469); 47:PRINTESC(470);48:PRINTESC(471);49:PRINTESC(472);50:PRINTESC(473); 51:PRINTESC(474);52:PRINTESC(475);53:PRINTESC(476);54:PRINTESC(477); {1393:}55:PRINTESC(1316);56:PRINTESC(1317);57:PRINTESC(1318); 58:PRINTESC(1319);59:PRINTESC(1320);60:PRINTESC(1321);61:PRINTESC(1322); 62:PRINTESC(1323);63:PRINTESC(1324);{:1393}{1434:}64:PRINTESC(1363); {:1434}OTHERWISE PRINT(478)END;END;{:237}{241:}PROCEDURE FIXDATEANDTIME; VAR T:ARRAY[1..7]OF SIGNEDHALFWORD;BEGIN $numtim(T); EQTB[13191].INT:=T[1];EQTB[13190].INT:=T[2];EQTB[13189].INT:=T[3]; EQTB[13188].INT:=T[4]*60+T[5];END;{:241}{245:}PROCEDURE BEGINDIAGNOSTIC; BEGIN OLDSETTING:=SELECTOR; IF(EQTB[13197].INT<=0)AND(SELECTOR=19)THEN BEGIN SELECTOR:=SELECTOR-1; IF HISTORY=0 THEN HISTORY:=1;END;END; PROCEDURE ENDDIAGNOSTIC(BLANKLINE:BOOLEAN);BEGIN PRINTNL(339); IF BLANKLINE THEN PRINTLN;SELECTOR:=OLDSETTING;END;{:245}{247:} PROCEDURE PRINTLENGTHPARAM(N:INTEGER);BEGIN CASE N OF 0:PRINTESC(481); 1:PRINTESC(482);2:PRINTESC(483);3:PRINTESC(484);4:PRINTESC(485); 5:PRINTESC(486);6:PRINTESC(487);7:PRINTESC(488);8:PRINTESC(489); 9:PRINTESC(490);10:PRINTESC(491);11:PRINTESC(492);12:PRINTESC(493); 13:PRINTESC(494);14:PRINTESC(495);15:PRINTESC(496);16:PRINTESC(497); 17:PRINTESC(498);18:PRINTESC(499);19:PRINTESC(500);20:PRINTESC(501); OTHERWISE PRINT(502)END;END;{:247}{252:}{298:} PROCEDURE PRINTCMDCHR(CMD:QUARTERWORD;CHRCODE:HALFWORD);VAR N:INTEGER; BEGIN CASE CMD OF 1:BEGIN PRINT(564);PRINT(CHRCODE);END; 2:BEGIN PRINT(565);PRINT(CHRCODE);END;3:BEGIN PRINT(566);PRINT(CHRCODE); END;6:BEGIN PRINT(567);PRINT(CHRCODE);END;7:BEGIN PRINT(568); PRINT(CHRCODE);END;8:BEGIN PRINT(569);PRINT(CHRCODE);END;9:PRINT(570); 10:BEGIN PRINT(571);PRINT(CHRCODE);END;11:BEGIN PRINT(572); PRINT(CHRCODE);END;12:BEGIN PRINT(573);PRINT(CHRCODE);END;{227:} 75,76:IF CHRCODE<10800 THEN PRINTSKIPPARAM(CHRCODE-10782)ELSE IF CHRCODE <11056 THEN BEGIN PRINTESC(398);PRINTINT(CHRCODE-10800); END ELSE BEGIN PRINTESC(399);PRINTINT(CHRCODE-11056);END;{:227}{231:} 72:IF CHRCODE>=11327 THEN BEGIN PRINTESC(410);PRINTINT(CHRCODE-11327); END ELSE CASE CHRCODE OF 11317:PRINTESC(401);11318:PRINTESC(402); 11319:PRINTESC(403);11320:PRINTESC(404);11321:PRINTESC(405); 11322:PRINTESC(406);11323:PRINTESC(407);11324:PRINTESC(408);{1392:} 11325:PRINTESC(1315);{:1392}OTHERWISE PRINTESC(409)END;{:231}{239:} 73:IF CHRCODE<13233 THEN PRINTPARAM(CHRCODE-13168)ELSE BEGIN PRINTESC( 479);PRINTINT(CHRCODE-13233);END;{:239}{249:} 74:IF CHRCODE<13766 THEN PRINTLENGTHPARAM(CHRCODE-13745)ELSE BEGIN PRINTESC(503);PRINTINT(CHRCODE-13766);END;{:249}{266:}45:PRINTESC(511); 90:PRINTESC(512);40:PRINTESC(513);41:PRINTESC(514);77:PRINTESC(522); 61:PRINTESC(515);42:PRINTESC(535);16:PRINTESC(516);107:PRINTESC(507); 88:PRINTESC(521);15:PRINTESC(517);92:PRINTESC(518);67:PRINTESC(508); 62:PRINTESC(519);64:PRINTESC(32); 102:IF CHRCODE=0 THEN PRINTESC(520){1496:}ELSE PRINTESC(782){:1496}; 32:PRINTESC(523);36:PRINTESC(524);39:PRINTESC(525);37:PRINTESC(331); 44:PRINTESC(47);18:BEGIN PRINTESC(354);IF CHRCODE>0 THEN PRINTCHAR(115); END;46:PRINTESC(526);17:PRINTESC(527);54:PRINTESC(528);91:PRINTESC(529); 34:PRINTESC(530);65:PRINTESC(531);103:PRINTESC(532);55:PRINTESC(336); 63:PRINTESC(533);66:PRINTESC(537); 96:IF CHRCODE=0 THEN PRINTESC(538){1493:}ELSE PRINTESC(1378){:1493}; 0:PRINTESC(539);98:PRINTESC(540);80:PRINTESC(536); 84:CASE CHRCODE OF 11312:PRINTESC(534);{1598:}11313:PRINTESC(1411); 11314:PRINTESC(1412);11315:PRINTESC(1413);11316:PRINTESC(1414);{:1598} END;109:IF CHRCODE=0 THEN PRINTESC(541){1421:} ELSE IF CHRCODE=1 THEN PRINTESC(1353)ELSE PRINTESC(1354){:1421}; 71:{1566:}BEGIN PRINTESC(410);IF CHRCODE<>0 THEN PRINTSANUM(CHRCODE); END{:1566};38:PRINTESC(355);33:IF CHRCODE=0 THEN PRINTESC(542){1436:} ELSE CASE CHRCODE OF 6:PRINTESC(1364);7:PRINTESC(1365); 10:PRINTESC(1366);OTHERWISE PRINTESC(1367)END{:1436};56:PRINTESC(543); 35:PRINTESC(544);{:266}{335:}13:PRINTESC(606);{:335}{377:} 104:IF CHRCODE=0 THEN PRINTESC(638){1481:} ELSE IF CHRCODE=2 THEN PRINTESC(1376){:1481}ELSE PRINTESC(639);{:377} {385:}110:BEGIN CASE(CHRCODE MOD 5)OF 1:PRINTESC(641);2:PRINTESC(642); 3:PRINTESC(643);4:PRINTESC(644);OTHERWISE PRINTESC(640)END; IF CHRCODE>=5 THEN PRINTCHAR(115);END;{:385}{412:}89:{1565:} BEGIN IF(CHRCODE<0)OR(CHRCODE>19)THEN CMD:=(MEM[CHRCODE].HH.B0 DIV 16) ELSE BEGIN CMD:=CHRCODE-0;CHRCODE:=0;END; IF CMD=0 THEN PRINTESC(479)ELSE IF CMD=1 THEN PRINTESC(503)ELSE IF CMD=2 THEN PRINTESC(398)ELSE PRINTESC(399); IF CHRCODE<>0 THEN PRINTSANUM(CHRCODE);END{:1565};{:412}{417:} 79:IF CHRCODE=1 THEN PRINTESC(678)ELSE PRINTESC(677); 82:IF CHRCODE=0 THEN PRINTESC(679){1427:} ELSE IF CHRCODE=2 THEN PRINTESC(1359){:1427}ELSE PRINTESC(680); 83:IF CHRCODE=1 THEN PRINTESC(681)ELSE IF CHRCODE=3 THEN PRINTESC(682) ELSE PRINTESC(683);70:CASE CHRCODE OF 0:PRINTESC(684);1:PRINTESC(685); 2:PRINTESC(686);4:PRINTESC(687);{1381:}3:PRINTESC(1311); 6:PRINTESC(1312);{:1381}{1398:}7:PRINTESC(1338);8:PRINTESC(1339);{:1398} {1401:}9:PRINTESC(1340);10:PRINTESC(1341);11:PRINTESC(1342);{:1401} {1404:}14:PRINTESC(1343);15:PRINTESC(1344);16:PRINTESC(1345); 17:PRINTESC(1346);{:1404}{1407:}18:PRINTESC(1347);19:PRINTESC(1348); 20:PRINTESC(1349);{:1407}{1512:}25:PRINTESC(1387);26:PRINTESC(1388); 27:PRINTESC(1389);28:PRINTESC(1390);{:1512}{1535:}12:PRINTESC(1394); 13:PRINTESC(1395);21:PRINTESC(1396);22:PRINTESC(1397);{:1535}{1539:} 23:PRINTESC(1398);24:PRINTESC(1399);{:1539}OTHERWISE PRINTESC(688)END; {:417}{469:}108:CASE CHRCODE OF 0:PRINTESC(744);1:PRINTESC(745); 2:PRINTESC(746);3:PRINTESC(747);4:PRINTESC(748);{1383:}6:PRINTESC(1313); {:1383}OTHERWISE PRINTESC(749)END;{:469}{488:} 105:BEGIN IF CHRCODE>=32 THEN PRINTESC(782); CASE CHRCODE MOD 32 OF 1:PRINTESC(766);2:PRINTESC(767);3:PRINTESC(768); 4:PRINTESC(769);5:PRINTESC(770);6:PRINTESC(771);7:PRINTESC(772); 8:PRINTESC(773);9:PRINTESC(774);10:PRINTESC(775);11:PRINTESC(776); 12:PRINTESC(777);13:PRINTESC(778);14:PRINTESC(779);15:PRINTESC(780); 16:PRINTESC(781);{1497:}17:PRINTESC(1379);18:PRINTESC(1380); 19:PRINTESC(1381);{:1497}OTHERWISE PRINTESC(765)END;END;{:488}{492:} 106:IF CHRCODE=2 THEN PRINTESC(783)ELSE IF CHRCODE=4 THEN PRINTESC(784) ELSE PRINTESC(785);{:492}{781:} 4:IF CHRCODE=256 THEN PRINTESC(907)ELSE BEGIN PRINT(911);PRINT(CHRCODE); END;5:IF CHRCODE=257 THEN PRINTESC(908)ELSE PRINTESC(909);{:781}{984:} 81:CASE CHRCODE OF 0:PRINTESC(979);1:PRINTESC(980);2:PRINTESC(981); 3:PRINTESC(982);4:PRINTESC(983);5:PRINTESC(984);6:PRINTESC(985); OTHERWISE PRINTESC(986)END;{:984}{1053:} 14:IF CHRCODE=1 THEN PRINTESC(1034)ELSE PRINTESC(344);{:1053}{1059:} 26:CASE CHRCODE OF 4:PRINTESC(1035);0:PRINTESC(1036);1:PRINTESC(1037); 2:PRINTESC(1038);OTHERWISE PRINTESC(1039)END; 27:CASE CHRCODE OF 4:PRINTESC(1040);0:PRINTESC(1041);1:PRINTESC(1042); 2:PRINTESC(1043);OTHERWISE PRINTESC(1044)END;28:PRINTESC(337); 29:PRINTESC(341);30:PRINTESC(343);{:1059}{1072:} 21:IF CHRCODE=1 THEN PRINTESC(1062)ELSE PRINTESC(1063); 22:IF CHRCODE=1 THEN PRINTESC(1064)ELSE PRINTESC(1065); 20:CASE CHRCODE OF 0:PRINTESC(412);1:PRINTESC(1066);2:PRINTESC(1067); 3:PRINTESC(974);4:PRINTESC(1068);5:PRINTESC(976); OTHERWISE PRINTESC(1069)END; 31:IF CHRCODE=100 THEN PRINTESC(1071)ELSE IF CHRCODE=101 THEN PRINTESC( 1072)ELSE IF CHRCODE=102 THEN PRINTESC(1073)ELSE PRINTESC(1070);{:1072} {1089:}43:IF CHRCODE=0 THEN PRINTESC(1089)ELSE PRINTESC(1088);{:1089} {1108:} 25:IF CHRCODE=10 THEN PRINTESC(1100)ELSE IF CHRCODE=11 THEN PRINTESC( 1099)ELSE PRINTESC(1098); 23:IF CHRCODE=1 THEN PRINTESC(1102)ELSE PRINTESC(1101); 24:IF CHRCODE=1 THEN PRINTESC(1104){1595:} ELSE IF CHRCODE=2 THEN PRINTESC(1409)ELSE IF CHRCODE=3 THEN PRINTESC( 1410){:1595}ELSE PRINTESC(1103);{:1108}{1115:} 47:IF CHRCODE=1 THEN PRINTESC(45)ELSE PRINTESC(352);{:1115}{1143:} 48:IF CHRCODE=1 THEN PRINTESC(1136)ELSE PRINTESC(1135);{:1143}{1157:} 50:CASE CHRCODE OF 16:PRINTESC(874);17:PRINTESC(875);18:PRINTESC(876); 19:PRINTESC(877);20:PRINTESC(878);21:PRINTESC(879);22:PRINTESC(880); 23:PRINTESC(881);26:PRINTESC(883);OTHERWISE PRINTESC(882)END; 51:IF CHRCODE=1 THEN PRINTESC(887)ELSE IF CHRCODE=2 THEN PRINTESC(888) ELSE PRINTESC(1137);{:1157}{1170:}53:PRINTSTYLE(CHRCODE);{:1170}{1179:} 52:CASE CHRCODE OF 1:PRINTESC(1156);2:PRINTESC(1157);3:PRINTESC(1158); 4:PRINTESC(1159);5:PRINTESC(1160);OTHERWISE PRINTESC(1155)END;{:1179} {1189:}49:IF CHRCODE=30 THEN PRINTESC(884){1432:} ELSE IF CHRCODE=1 THEN PRINTESC(886){:1432}ELSE PRINTESC(885);{:1189} {1209:} 93:IF CHRCODE=1 THEN PRINTESC(1180)ELSE IF CHRCODE=2 THEN PRINTESC(1181) {1504:}ELSE IF CHRCODE=8 THEN PRINTESC(1259){:1504}ELSE PRINTESC(1182); 97:IF CHRCODE=0 THEN PRINTESC(1183)ELSE IF CHRCODE=1 THEN PRINTESC(1184) ELSE IF CHRCODE=2 THEN PRINTESC(1185)ELSE PRINTESC(1186);{:1209}{1220:} 94:IF CHRCODE<>0 THEN PRINTESC(1201)ELSE PRINTESC(1200);{:1220}{1223:} 95:CASE CHRCODE OF 0:PRINTESC(1202);1:PRINTESC(1203);2:PRINTESC(1204); 3:PRINTESC(1205);4:PRINTESC(1206);5:PRINTESC(1207); OTHERWISE PRINTESC(1208)END;68:BEGIN PRINTESC(516);PRINTHEX(CHRCODE); END;69:BEGIN PRINTESC(527);PRINTHEX(CHRCODE);END;{:1223}{1231:} 85:IF CHRCODE=11888 THEN PRINTESC(418)ELSE IF CHRCODE=12912 THEN PRINTESC(422)ELSE IF CHRCODE=12144 THEN PRINTESC(419)ELSE IF CHRCODE= 12400 THEN PRINTESC(420)ELSE IF CHRCODE=12656 THEN PRINTESC(421)ELSE PRINTESC(480);86:PRINTSIZE(CHRCODE-11840);{:1231}{1251:} 99:IF CHRCODE=1 THEN PRINTESC(962)ELSE PRINTESC(950);{:1251}{1255:} 78:IF CHRCODE=0 THEN PRINTESC(1226)ELSE PRINTESC(1227);{:1255}{1261:} 87:BEGIN PRINT(1235);SLOWPRINT(FONTNAME[CHRCODE]); IF FONTSIZE[CHRCODE]<>FONTDSIZE[CHRCODE]THEN BEGIN PRINT(750); PRINTSCALED(FONTSIZE[CHRCODE]);PRINT(400);END;END;{:1261}{1263:} 100:CASE CHRCODE OF 0:PRINTESC(275);1:PRINTESC(276);2:PRINTESC(277); OTHERWISE PRINTESC(1236)END;{:1263}{1273:} 60:IF CHRCODE=0 THEN PRINTESC(1238)ELSE PRINTESC(1237);{:1273}{1278:} 58:IF CHRCODE=0 THEN PRINTESC(1239)ELSE PRINTESC(1240);{:1278}{1287:} 57:IF CHRCODE=12144 THEN PRINTESC(1246)ELSE PRINTESC(1247);{:1287} {1292:}19:CASE CHRCODE OF 1:PRINTESC(1249);2:PRINTESC(1250); 3:PRINTESC(1251);{1410:}4:PRINTESC(1350);{:1410}{1419:}5:PRINTESC(1352); {:1419}{1424:}6:PRINTESC(1355);{:1424}OTHERWISE PRINTESC(1248)END; {:1292}{1295:}101:PRINT(1258);111,112,113,114:BEGIN N:=CMD-111; IF MEM[MEM[CHRCODE].HH.RH].HH.LH=3585 THEN N:=N+4; IF ODD(N DIV 4)THEN PRINTESC(1259);IF ODD(N)THEN PRINTESC(1180); IF ODD(N DIV 2)THEN PRINTESC(1181);IF N>0 THEN PRINTCHAR(32); PRINT(1260);END;115:PRINTESC(1261);{:1295}{1346:} 59:CASE CHRCODE OF 0:PRINTESC(1295);1:PRINTESC(603);2:PRINTESC(1296); 3:PRINTESC(1297);4:PRINTESC(1298);5:PRINTESC(1299); OTHERWISE PRINT(1300)END;{:1346}OTHERWISE PRINT(574)END;END;{:298} PROCEDURE SHOWEQTB(N:HALFWORD); BEGIN IF N<1 THEN PRINTCHAR(63)ELSE IF N<10782 THEN{223:} BEGIN SPRINTCS(N);PRINTCHAR(61); PRINTCMDCHR(EQTB[N].HH.B0,EQTB[N].HH.RH); IF EQTB[N].HH.B0>=111 THEN BEGIN PRINTCHAR(58); SHOWTOKENLIST(MEM[EQTB[N].HH.RH].HH.RH,0,32);END;END{:223} ELSE IF N<11312 THEN{229:}IF N<10800 THEN BEGIN PRINTSKIPPARAM(N-10782); PRINTCHAR(61); IF N<10797 THEN PRINTSPEC(EQTB[N].HH.RH,400)ELSE PRINTSPEC(EQTB[N].HH.RH ,338);END ELSE IF N<11056 THEN BEGIN PRINTESC(398);PRINTINT(N-10800); PRINTCHAR(61);PRINTSPEC(EQTB[N].HH.RH,400);END ELSE BEGIN PRINTESC(399); PRINTINT(N-11056);PRINTCHAR(61);PRINTSPEC(EQTB[N].HH.RH,338);END{:229} ELSE IF N<13168 THEN{233:}IF N<11317 THEN BEGIN PRINTCMDCHR(84,N); PRINTCHAR(61); IF EQTB[N].HH.RH=0 THEN PRINTCHAR(48)ELSE IF N>11312 THEN BEGIN PRINTINT (MEM[EQTB[N].HH.RH+1].INT);PRINTCHAR(32); PRINTINT(MEM[EQTB[N].HH.RH+2].INT); IF MEM[EQTB[N].HH.RH+1].INT>1 THEN PRINTESC(411); END ELSE PRINTINT(MEM[EQTB[11312].HH.RH].HH.LH); END ELSE IF N<11327 THEN BEGIN PRINTCMDCHR(72,N);PRINTCHAR(61); IF EQTB[N].HH.RH<>0 THEN SHOWTOKENLIST(MEM[EQTB[N].HH.RH].HH.RH,0,32); END ELSE IF N<11583 THEN BEGIN PRINTESC(410);PRINTINT(N-11327); PRINTCHAR(61); IF EQTB[N].HH.RH<>0 THEN SHOWTOKENLIST(MEM[EQTB[N].HH.RH].HH.RH,0,32); END ELSE IF N<11839 THEN BEGIN PRINTESC(412);PRINTINT(N-11583); PRINTCHAR(61); IF EQTB[N].HH.RH=0 THEN PRINT(413)ELSE BEGIN DEPTHTHRESHOLD:=0; BREADTHMAX:=1;SHOWNODELIST(EQTB[N].HH.RH);END; END ELSE IF N<11888 THEN{234:} BEGIN IF N=11839 THEN PRINT(414)ELSE IF N<11856 THEN BEGIN PRINTESC(415) ;PRINTINT(N-11840);END ELSE IF N<11872 THEN BEGIN PRINTESC(416); PRINTINT(N-11856);END ELSE BEGIN PRINTESC(417);PRINTINT(N-11872);END; PRINTCHAR(61);PRINTESC(HASH[10524+EQTB[N].HH.RH].RH);END{:234}ELSE{235:} IF N<12912 THEN BEGIN IF N<12144 THEN BEGIN PRINTESC(418); PRINTINT(N-11888);END ELSE IF N<12400 THEN BEGIN PRINTESC(419); PRINTINT(N-12144);END ELSE IF N<12656 THEN BEGIN PRINTESC(420); PRINTINT(N-12400);END ELSE BEGIN PRINTESC(421);PRINTINT(N-12656);END; PRINTCHAR(61);PRINTINT(EQTB[N].HH.RH);END ELSE BEGIN PRINTESC(422); PRINTINT(N-12912);PRINTCHAR(61);PRINTINT(EQTB[N].HH.RH);END{:235}{:233} ELSE IF N<13745 THEN{242:} BEGIN IF N<13233 THEN PRINTPARAM(N-13168)ELSE IF N<13489 THEN BEGIN PRINTESC(479);PRINTINT(N-13233);END ELSE BEGIN PRINTESC(480); PRINTINT(N-13489);END;PRINTCHAR(61);PRINTINT(EQTB[N].INT);END{:242} ELSE IF N<=14021 THEN{251:} BEGIN IF N<13766 THEN PRINTLENGTHPARAM(N-13745)ELSE BEGIN PRINTESC(503); PRINTINT(N-13766);END;PRINTCHAR(61);PRINTSCALED(EQTB[N].INT);PRINT(400); END{:251}ELSE PRINTCHAR(63);END;{:252}{259:} FUNCTION IDLOOKUP(J,L:INTEGER):HALFWORD;LABEL 40;VAR H:INTEGER; D:INTEGER;P:HALFWORD;K:HALFWORD;BEGIN{261:}H:=BUFFER[J]; FOR K:=J+1 TO J+L-1 DO BEGIN H:=H+H+BUFFER[K]; WHILE H>=8501 DO H:=H-8501;END{:261};P:=H+514; WHILE TRUE DO BEGIN IF HASH[P].RH>0 THEN IF(STRSTART[HASH[P].RH+1]- STRSTART[HASH[P].RH])=L THEN IF STREQBUF(HASH[P].RH,J)THEN GOTO 40; IF HASH[P].LH=0 THEN BEGIN IF NONEWCONTROLSEQUENCE THEN P:=10781 ELSE{ 260:} BEGIN IF HASH[P].RH>0 THEN BEGIN REPEAT IF(HASHUSED=514)THEN OVERFLOW( 506,10000);HASHUSED:=HASHUSED-1;UNTIL HASH[HASHUSED].RH=0; HASH[P].LH:=HASHUSED;P:=HASHUSED;END; BEGIN IF POOLPTR+L>POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR);END; D:=(POOLPTR-STRSTART[STRPTR]); WHILE POOLPTR>STRSTART[STRPTR]DO BEGIN POOLPTR:=POOLPTR-1; STRPOOL[POOLPTR+L]:=STRPOOL[POOLPTR];END; FOR K:=J TO J+L-1 DO BEGIN STRPOOL[POOLPTR]:=BUFFER[K]; POOLPTR:=POOLPTR+1;END;HASH[P].RH:=MAKESTRING;POOLPTR:=POOLPTR+D; CSCOUNT:=CSCOUNT+1;END{:260};GOTO 40;END;P:=HASH[P].LH;END; 40:IDLOOKUP:=P;END;{:259}{264:}PROCEDURE PRIMITIVE(S:STRNUMBER; C:QUARTERWORD;O:HALFWORD);VAR K:POOLPOINTER;J:0..BUFSIZE;L:SMALLNUMBER; BEGIN IF S<256 THEN CURVAL:=S+257 ELSE BEGIN K:=STRSTART[S]; L:=STRSTART[S+1]-K;IF FIRST+L>BUFSIZE+1 THEN OVERFLOW(257,BUFSIZE); FOR J:=0 TO L-1 DO BUFFER[FIRST+J]:=STRPOOL[K+J]; CURVAL:=IDLOOKUP(FIRST,L);BEGIN STRPTR:=STRPTR-1; POOLPTR:=STRSTART[STRPTR];END;HASH[CURVAL].RH:=S;END; EQTB[CURVAL].HH.B1:=1;EQTB[CURVAL].HH.B0:=C;EQTB[CURVAL].HH.RH:=O;END; {:264}{268:}{284:}PROCEDURE RESTORETRACE(P:HALFWORD;S:STRNUMBER); BEGIN BEGINDIAGNOSTIC;PRINTCHAR(123);PRINT(S);PRINTCHAR(32);SHOWEQTB(P); PRINTCHAR(125);ENDDIAGNOSTIC(FALSE);END;{:284}{1395:} PROCEDURE PRINTGROUP(E:BOOLEAN);LABEL 10; BEGIN CASE CURGROUP OF 0:BEGIN PRINT(1325);GOTO 10;END; 1,14:BEGIN IF CURGROUP=14 THEN PRINT(1326);PRINT(1327);END; 2,3:BEGIN IF CURGROUP=3 THEN PRINT(1328);PRINT(1069);END;4:PRINT(976); 5:PRINT(1068);6,7:BEGIN IF CURGROUP=7 THEN PRINT(1329);PRINT(1330);END; 8:PRINT(401);10:PRINT(1331);11:PRINT(331);12:PRINT(543); 9,13,15,16:BEGIN PRINT(346); IF CURGROUP=13 THEN PRINT(1332)ELSE IF CURGROUP=15 THEN PRINT(1333)ELSE IF CURGROUP=16 THEN PRINT(1334);END;END;PRINT(1335);PRINTINT(CURLEVEL); PRINTCHAR(41); IF SAVESTACK[SAVEPTR-1].INT<>0 THEN BEGIN IF E THEN PRINT(367)ELSE PRINT (267);PRINTINT(SAVESTACK[SAVEPTR-1].INT);END;10:END;{:1395}{1396:} PROCEDURE GROUPTRACE(E:BOOLEAN);BEGIN BEGINDIAGNOSTIC;PRINTCHAR(123); IF E THEN PRINT(1336)ELSE PRINT(1337);PRINTGROUP(E);PRINTCHAR(125); ENDDIAGNOSTIC(FALSE);END;{:1396}{1489:}FUNCTION PSEUDOINPUT:BOOLEAN; VAR P:HALFWORD;SZ:INTEGER;W:FOURQUARTERS;R:HALFWORD;BEGIN LAST:=FIRST; P:=MEM[PSEUDOFILES].HH.LH; IF P=0 THEN PSEUDOINPUT:=FALSE ELSE BEGIN MEM[PSEUDOFILES].HH.LH:=MEM[P] .HH.RH;SZ:=MEM[P].HH.LH;IF 4*SZ-3>=BUFSIZE-LAST THEN{35:} IF FORMATIDENT=0 THEN BEGIN WRITELN(TERMOUT,'Buffer size exceeded!'); GOTO 9999;END ELSE BEGIN CURINPUT.LOCFIELD:=FIRST; CURINPUT.LIMITFIELD:=LAST-1;OVERFLOW(257,BUFSIZE);END{:35};LAST:=FIRST; FOR R:=P+1 TO P+SZ-1 DO BEGIN W:=MEM[R].QQQQ;BUFFER[LAST]:=W.B0; BUFFER[LAST+1]:=W.B1;BUFFER[LAST+2]:=W.B2;BUFFER[LAST+3]:=W.B3; LAST:=LAST+4;END;IF LAST>=MAXBUFSTACK THEN MAXBUFSTACK:=LAST+1; WHILE(LAST>FIRST)AND(BUFFER[LAST-1]=32)DO LAST:=LAST-1;FREENODE(P,SZ); PSEUDOINPUT:=TRUE;END;END;{:1489}{1490:}PROCEDURE PSEUDOCLOSE; VAR P,Q:HALFWORD;BEGIN P:=MEM[PSEUDOFILES].HH.RH; Q:=MEM[PSEUDOFILES].HH.LH;BEGIN MEM[PSEUDOFILES].HH.RH:=AVAIL; AVAIL:=PSEUDOFILES;DYNUSED:=DYNUSED-1;END;PSEUDOFILES:=P; WHILE Q<>0 DO BEGIN P:=Q;Q:=MEM[P].HH.RH;FREENODE(P,MEM[P].HH.LH);END; END;{:1490}{1507:}PROCEDURE GROUPWARNING;VAR I:0..MAXINOPEN;W:BOOLEAN; BEGIN BASEPTR:=INPUTPTR;INPUTSTACK[BASEPTR]:=CURINPUT;I:=INOPEN; W:=FALSE;WHILE(GRPSTACK[I]=CURBOUNDARY)AND(I>0)DO BEGIN{1508:} IF EQTB[13227].INT>0 THEN BEGIN WHILE(INPUTSTACK[BASEPTR].STATEFIELD=0) OR(INPUTSTACK[BASEPTR].INDEXFIELD>I)DO BASEPTR:=BASEPTR-1; IF INPUTSTACK[BASEPTR].NAMEFIELD>17 THEN W:=TRUE;END{:1508}; GRPSTACK[I]:=SAVESTACK[SAVEPTR].HH.RH;I:=I-1;END; IF W THEN BEGIN PRINTNL(1383);PRINTGROUP(TRUE);PRINT(1384);PRINTLN; IF EQTB[13227].INT>1 THEN SHOWCONTEXT;IF HISTORY=0 THEN HISTORY:=1;END; END;{:1507}{1509:}PROCEDURE IFWARNING;VAR I:0..MAXINOPEN;W:BOOLEAN; BEGIN BASEPTR:=INPUTPTR;INPUTSTACK[BASEPTR]:=CURINPUT;I:=INOPEN; W:=FALSE;WHILE IFSTACK[I]=CONDPTR DO BEGIN{1508:} IF EQTB[13227].INT>0 THEN BEGIN WHILE(INPUTSTACK[BASEPTR].STATEFIELD=0) OR(INPUTSTACK[BASEPTR].INDEXFIELD>I)DO BASEPTR:=BASEPTR-1; IF INPUTSTACK[BASEPTR].NAMEFIELD>17 THEN W:=TRUE;END{:1508}; IFSTACK[I]:=MEM[CONDPTR].HH.RH;I:=I-1;END;IF W THEN BEGIN PRINTNL(1383); PRINTCMDCHR(105,CURIF);IF IFLINE<>0 THEN BEGIN PRINT(1356); PRINTINT(IFLINE);END;PRINT(1384);PRINTLN; IF EQTB[13227].INT>1 THEN SHOWCONTEXT;IF HISTORY=0 THEN HISTORY:=1;END; END;{:1509}{1510:}PROCEDURE FILEWARNING;VAR P:HALFWORD;L:QUARTERWORD; C:QUARTERWORD;I:INTEGER;BEGIN P:=SAVEPTR;L:=CURLEVEL;C:=CURGROUP; SAVEPTR:=CURBOUNDARY; WHILE GRPSTACK[INOPEN]<>SAVEPTR DO BEGIN CURLEVEL:=CURLEVEL-1; PRINTNL(1385);PRINTGROUP(TRUE);PRINT(1386); CURGROUP:=SAVESTACK[SAVEPTR].HH.B1; SAVEPTR:=SAVESTACK[SAVEPTR].HH.RH END;SAVEPTR:=P;CURLEVEL:=L; CURGROUP:=C;P:=CONDPTR;L:=IFLIMIT;C:=CURIF;I:=IFLINE; WHILE IFSTACK[INOPEN]<>CONDPTR DO BEGIN PRINTNL(1385); PRINTCMDCHR(105,CURIF);IF IFLIMIT=2 THEN PRINTESC(785); IF IFLINE<>0 THEN BEGIN PRINT(1356);PRINTINT(IFLINE);END;PRINT(1386); IFLINE:=MEM[CONDPTR+1].INT;CURIF:=MEM[CONDPTR].HH.B1; IFLIMIT:=MEM[CONDPTR].HH.B0;CONDPTR:=MEM[CONDPTR].HH.RH;END;CONDPTR:=P; IFLIMIT:=L;CURIF:=C;IFLINE:=I;PRINTLN; IF EQTB[13227].INT>1 THEN SHOWCONTEXT;IF HISTORY=0 THEN HISTORY:=1;END; {:1510}{1554:}PROCEDURE DELETESAREF(Q:HALFWORD);LABEL 10;VAR P:HALFWORD; I:SMALLNUMBER;S:SMALLNUMBER;BEGIN MEM[Q+1].HH.LH:=MEM[Q+1].HH.LH-1; IF MEM[Q+1].HH.LH<>0 THEN GOTO 10; IF MEM[Q].HH.B0<32 THEN IF MEM[Q+2].INT=0 THEN S:=3 ELSE GOTO 10 ELSE BEGIN IF MEM[Q].HH.B0<64 THEN IF MEM[Q+1].HH.RH=0 THEN DELETEGLUEREF(0) ELSE GOTO 10 ELSE IF MEM[Q+1].HH.RH<>0 THEN GOTO 10;S:=2;END; REPEAT I:=MEM[Q].HH.B0 MOD 16;P:=Q;Q:=MEM[P].HH.RH;FREENODE(P,S); IF Q=0 THEN BEGIN SAROOT[I]:=0;GOTO 10;END; BEGIN IF ODD(I)THEN MEM[Q+(I DIV 2)+1].HH.RH:=0 ELSE MEM[Q+(I DIV 2)+1]. HH.LH:=0;MEM[Q].HH.B1:=MEM[Q].HH.B1-1;END;S:=9;UNTIL MEM[Q].HH.B1>0; 10:END;{:1554}{1556:}PROCEDURE SHOWSA(P:HALFWORD;S:STRNUMBER); VAR T:SMALLNUMBER;BEGIN BEGINDIAGNOSTIC;PRINTCHAR(123);PRINT(S); PRINTCHAR(32); IF P=0 THEN PRINTCHAR(63)ELSE BEGIN T:=(MEM[P].HH.B0 DIV 16); IF T<4 THEN PRINTCMDCHR(89,P)ELSE IF T=4 THEN BEGIN PRINTESC(412); PRINTSANUM(P);END ELSE IF T=5 THEN PRINTCMDCHR(71,P)ELSE PRINTCHAR(63); PRINTCHAR(61); IF T=0 THEN PRINTINT(MEM[P+2].INT)ELSE IF T=1 THEN BEGIN PRINTSCALED(MEM [P+2].INT);PRINT(400);END ELSE BEGIN P:=MEM[P+1].HH.RH; IF T=2 THEN PRINTSPEC(P,400)ELSE IF T=3 THEN PRINTSPEC(P,338)ELSE IF T=4 THEN IF P=0 THEN PRINT(413)ELSE BEGIN DEPTHTHRESHOLD:=0;BREADTHMAX:=1; SHOWNODELIST(P); END ELSE IF T=5 THEN BEGIN IF P<>0 THEN SHOWTOKENLIST(MEM[P].HH.RH,0,32) ;END ELSE PRINTCHAR(63);END;END;PRINTCHAR(125);ENDDIAGNOSTIC(FALSE);END; {:1556}{1570:}PROCEDURE SASAVE(P:HALFWORD);VAR Q:HALFWORD;I:QUARTERWORD; BEGIN IF CURLEVEL<>SALEVEL THEN BEGIN IF SAVEPTR>MAXSAVESTACK THEN BEGIN MAXSAVESTACK:=SAVEPTR; IF MAXSAVESTACK>SAVESIZE-7 THEN OVERFLOW(545,SAVESIZE);END; SAVESTACK[SAVEPTR].HH.B0:=4;SAVESTACK[SAVEPTR].HH.B1:=SALEVEL; SAVESTACK[SAVEPTR].HH.RH:=SACHAIN;SAVEPTR:=SAVEPTR+1;SACHAIN:=0; SALEVEL:=CURLEVEL;END;I:=MEM[P].HH.B0; IF I<32 THEN BEGIN IF MEM[P+2].INT=0 THEN BEGIN Q:=GETNODE(2);I:=96; END ELSE BEGIN Q:=GETNODE(3);MEM[Q+2].INT:=MEM[P+2].INT;END; MEM[Q+1].HH.RH:=0;END ELSE BEGIN Q:=GETNODE(2); MEM[Q+1].HH.RH:=MEM[P+1].HH.RH;END;MEM[Q+1].HH.LH:=P;MEM[Q].HH.B0:=I; MEM[Q].HH.B1:=MEM[P].HH.B1;MEM[Q].HH.RH:=SACHAIN;SACHAIN:=Q; MEM[P+1].HH.LH:=MEM[P+1].HH.LH+1;END;{:1570}{1571:} PROCEDURE SADESTROY(P:HALFWORD); BEGIN IF MEM[P].HH.B0<64 THEN DELETEGLUEREF(MEM[P+1].HH.RH)ELSE IF MEM[P +1].HH.RH<>0 THEN IF MEM[P].HH.B0<80 THEN FLUSHNODELIST(MEM[P+1].HH.RH) ELSE DELETETOKENREF(MEM[P+1].HH.RH);END;{:1571}{1572:} PROCEDURE SADEF(P:HALFWORD;E:HALFWORD); BEGIN MEM[P+1].HH.LH:=MEM[P+1].HH.LH+1; IF MEM[P+1].HH.RH=E THEN BEGIN IF EQTB[13223].INT>0 THEN SHOWSA(P,547); SADESTROY(P);END ELSE BEGIN IF EQTB[13223].INT>0 THEN SHOWSA(P,548); IF MEM[P].HH.B1=CURLEVEL THEN SADESTROY(P)ELSE SASAVE(P); MEM[P].HH.B1:=CURLEVEL;MEM[P+1].HH.RH:=E; IF EQTB[13223].INT>0 THEN SHOWSA(P,549);END;DELETESAREF(P);END; PROCEDURE SAWDEF(P:HALFWORD;W:INTEGER); BEGIN MEM[P+1].HH.LH:=MEM[P+1].HH.LH+1; IF MEM[P+2].INT=W THEN BEGIN IF EQTB[13223].INT>0 THEN SHOWSA(P,547); END ELSE BEGIN IF EQTB[13223].INT>0 THEN SHOWSA(P,548); IF MEM[P].HH.B1<>CURLEVEL THEN SASAVE(P);MEM[P].HH.B1:=CURLEVEL; MEM[P+2].INT:=W;IF EQTB[13223].INT>0 THEN SHOWSA(P,549);END; DELETESAREF(P);END;{:1572}{1573:}PROCEDURE GSADEF(P:HALFWORD; E:HALFWORD);BEGIN MEM[P+1].HH.LH:=MEM[P+1].HH.LH+1; IF EQTB[13223].INT>0 THEN SHOWSA(P,550);SADESTROY(P);MEM[P].HH.B1:=1; MEM[P+1].HH.RH:=E;IF EQTB[13223].INT>0 THEN SHOWSA(P,549); DELETESAREF(P);END;PROCEDURE GSAWDEF(P:HALFWORD;W:INTEGER); BEGIN MEM[P+1].HH.LH:=MEM[P+1].HH.LH+1; IF EQTB[13223].INT>0 THEN SHOWSA(P,550);MEM[P].HH.B1:=1;MEM[P+2].INT:=W; IF EQTB[13223].INT>0 THEN SHOWSA(P,549);DELETESAREF(P);END;{:1573} {1574:}PROCEDURE SARESTORE;VAR P:HALFWORD; BEGIN REPEAT P:=MEM[SACHAIN+1].HH.LH; IF MEM[P].HH.B1=1 THEN BEGIN IF MEM[P].HH.B0>=32 THEN SADESTROY(SACHAIN) ;IF EQTB[13205].INT>0 THEN SHOWSA(P,552); END ELSE BEGIN IF MEM[P].HH.B0<32 THEN IF MEM[SACHAIN].HH.B0<32 THEN MEM [P+2].INT:=MEM[SACHAIN+2].INT ELSE MEM[P+2].INT:=0 ELSE BEGIN SADESTROY( P);MEM[P+1].HH.RH:=MEM[SACHAIN+1].HH.RH;END; MEM[P].HH.B1:=MEM[SACHAIN].HH.B1; IF EQTB[13205].INT>0 THEN SHOWSA(P,553);END;DELETESAREF(P);P:=SACHAIN; SACHAIN:=MEM[P].HH.RH; IF MEM[P].HH.B0<32 THEN FREENODE(P,3)ELSE FREENODE(P,2);UNTIL SACHAIN=0; END;{:1574}{:268}{274:}PROCEDURE NEWSAVELEVEL(C:GROUPCODE); BEGIN IF SAVEPTR>MAXSAVESTACK THEN BEGIN MAXSAVESTACK:=SAVEPTR; IF MAXSAVESTACK>SAVESIZE-7 THEN OVERFLOW(545,SAVESIZE);END; IF(ETEXMODE=1)THEN BEGIN SAVESTACK[SAVEPTR+0].INT:=LINE; SAVEPTR:=SAVEPTR+1;END;SAVESTACK[SAVEPTR].HH.B0:=3; SAVESTACK[SAVEPTR].HH.B1:=CURGROUP; SAVESTACK[SAVEPTR].HH.RH:=CURBOUNDARY; IF CURLEVEL=511 THEN OVERFLOW(546,511);CURBOUNDARY:=SAVEPTR;CURGROUP:=C; IF EQTB[13224].INT>0 THEN GROUPTRACE(FALSE);CURLEVEL:=CURLEVEL+1; SAVEPTR:=SAVEPTR+1;END;{:274}{275:}PROCEDURE EQDESTROY(W:MEMORYWORD); VAR Q:HALFWORD; BEGIN CASE W.HH.B0 OF 111,112,113,114:DELETETOKENREF(W.HH.RH); 117:DELETEGLUEREF(W.HH.RH);118:BEGIN Q:=W.HH.RH; IF Q<>0 THEN FREENODE(Q,MEM[Q].HH.LH+MEM[Q].HH.LH+1);END; 119:FLUSHNODELIST(W.HH.RH);{1567:} 71,89:IF(W.HH.RH<0)OR(W.HH.RH>19)THEN DELETESAREF(W.HH.RH);{:1567} OTHERWISE END;END;{:275}{276:}PROCEDURE EQSAVE(P:HALFWORD; L:QUARTERWORD); BEGIN IF SAVEPTR>MAXSAVESTACK THEN BEGIN MAXSAVESTACK:=SAVEPTR; IF MAXSAVESTACK>SAVESIZE-7 THEN OVERFLOW(545,SAVESIZE);END; IF L=0 THEN SAVESTACK[SAVEPTR].HH.B0:=1 ELSE BEGIN SAVESTACK[SAVEPTR]:= EQTB[P];SAVEPTR:=SAVEPTR+1;SAVESTACK[SAVEPTR].HH.B0:=0;END; SAVESTACK[SAVEPTR].HH.B1:=L;SAVESTACK[SAVEPTR].HH.RH:=P; SAVEPTR:=SAVEPTR+1;END;{:276}{277:}PROCEDURE EQDEFINE(P:HALFWORD; T:QUARTERWORD;E:HALFWORD);LABEL 10; BEGIN IF(ETEXMODE=1)AND(EQTB[P].HH.B0=T)AND(EQTB[P].HH.RH=E)THEN BEGIN IF EQTB[13223].INT>0 THEN RESTORETRACE(P,547);EQDESTROY(EQTB[P]); GOTO 10;END;IF EQTB[13223].INT>0 THEN RESTORETRACE(P,548); IF EQTB[P].HH.B1=CURLEVEL THEN EQDESTROY(EQTB[P])ELSE IF CURLEVEL>1 THEN EQSAVE(P,EQTB[P].HH.B1);EQTB[P].HH.B1:=CURLEVEL;EQTB[P].HH.B0:=T; EQTB[P].HH.RH:=E;IF EQTB[13223].INT>0 THEN RESTORETRACE(P,549);10:END; {:277}{278:}PROCEDURE EQWORDDEFINE(P:HALFWORD;W:INTEGER);LABEL 10; BEGIN IF(ETEXMODE=1)AND(EQTB[P].INT=W)THEN BEGIN IF EQTB[13223].INT>0 THEN RESTORETRACE(P,547);GOTO 10;END; IF EQTB[13223].INT>0 THEN RESTORETRACE(P,548); IF XEQLEVEL[P]<>CURLEVEL THEN BEGIN EQSAVE(P,XEQLEVEL[P]); XEQLEVEL[P]:=CURLEVEL;END;EQTB[P].INT:=W; IF EQTB[13223].INT>0 THEN RESTORETRACE(P,549);10:END;{:278}{279:} PROCEDURE GEQDEFINE(P:HALFWORD;T:QUARTERWORD;E:HALFWORD); BEGIN IF EQTB[13223].INT>0 THEN RESTORETRACE(P,550); BEGIN EQDESTROY(EQTB[P]);EQTB[P].HH.B1:=1;EQTB[P].HH.B0:=T; EQTB[P].HH.RH:=E;END;IF EQTB[13223].INT>0 THEN RESTORETRACE(P,549);END; PROCEDURE GEQWORDDEFINE(P:HALFWORD;W:INTEGER); BEGIN IF EQTB[13223].INT>0 THEN RESTORETRACE(P,550); BEGIN EQTB[P].INT:=W;XEQLEVEL[P]:=1;END; IF EQTB[13223].INT>0 THEN RESTORETRACE(P,549);END;{:279}{280:} PROCEDURE SAVEFORAFTER(T:HALFWORD); BEGIN IF CURLEVEL>1 THEN BEGIN IF SAVEPTR>MAXSAVESTACK THEN BEGIN MAXSAVESTACK:=SAVEPTR; IF MAXSAVESTACK>SAVESIZE-7 THEN OVERFLOW(545,SAVESIZE);END; SAVESTACK[SAVEPTR].HH.B0:=2;SAVESTACK[SAVEPTR].HH.B1:=0; SAVESTACK[SAVEPTR].HH.RH:=T;SAVEPTR:=SAVEPTR+1;END;END;{:280}{281:} PROCEDURE BACKINPUT;FORWARD;PROCEDURE UNSAVE;LABEL 30;VAR P:HALFWORD; L:QUARTERWORD;T:HALFWORD;A:BOOLEAN;BEGIN A:=FALSE; IF CURLEVEL>1 THEN BEGIN CURLEVEL:=CURLEVEL-1;{282:} WHILE TRUE DO BEGIN SAVEPTR:=SAVEPTR-1; IF SAVESTACK[SAVEPTR].HH.B0=3 THEN GOTO 30;P:=SAVESTACK[SAVEPTR].HH.RH; IF SAVESTACK[SAVEPTR].HH.B0=2 THEN{326:}BEGIN T:=CURTOK;CURTOK:=P; IF A THEN BEGIN P:=GETAVAIL;MEM[P].HH.LH:=CURTOK; MEM[P].HH.RH:=CURINPUT.LOCFIELD;CURINPUT.LOCFIELD:=P; CURINPUT.STARTFIELD:=P; IF CURTOK<768 THEN IF CURTOK<512 THEN ALIGNSTATE:=ALIGNSTATE-1 ELSE ALIGNSTATE:=ALIGNSTATE+1;END ELSE BEGIN BACKINPUT;A:=(ETEXMODE=1);END; CURTOK:=T;END{:326} ELSE IF SAVESTACK[SAVEPTR].HH.B0=4 THEN BEGIN SARESTORE;SACHAIN:=P; SALEVEL:=SAVESTACK[SAVEPTR].HH.B1; END ELSE BEGIN IF SAVESTACK[SAVEPTR].HH.B0=0 THEN BEGIN L:=SAVESTACK[ SAVEPTR].HH.B1;SAVEPTR:=SAVEPTR-1; END ELSE SAVESTACK[SAVEPTR]:=EQTB[10781];{283:} IF P<13168 THEN IF EQTB[P].HH.B1=1 THEN BEGIN EQDESTROY(SAVESTACK[ SAVEPTR]);IF EQTB[13205].INT>0 THEN RESTORETRACE(P,552); END ELSE BEGIN EQDESTROY(EQTB[P]);EQTB[P]:=SAVESTACK[SAVEPTR]; IF EQTB[13205].INT>0 THEN RESTORETRACE(P,553); END ELSE IF XEQLEVEL[P]<>1 THEN BEGIN EQTB[P]:=SAVESTACK[SAVEPTR]; XEQLEVEL[P]:=L;IF EQTB[13205].INT>0 THEN RESTORETRACE(P,553); END ELSE BEGIN IF EQTB[13205].INT>0 THEN RESTORETRACE(P,552);END{:283}; END;END;30:IF EQTB[13224].INT>0 THEN GROUPTRACE(TRUE); IF GRPSTACK[INOPEN]=CURBOUNDARY THEN GROUPWARNING; CURGROUP:=SAVESTACK[SAVEPTR].HH.B1; CURBOUNDARY:=SAVESTACK[SAVEPTR].HH.RH; IF(ETEXMODE=1)THEN SAVEPTR:=SAVEPTR-1{:282};END ELSE CONFUSION(551);END; {:281}{288:}PROCEDURE PREPAREMAG; BEGIN IF(MAGSET>0)AND(EQTB[13185].INT<>MAGSET)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(555);END;PRINTINT(EQTB[13185].INT);PRINT(556); PRINTNL(557);BEGIN HELPPTR:=2;HELPLINE[1]:=558;HELPLINE[0]:=559;END; INTERROR(MAGSET);GEQWORDDEFINE(13185,MAGSET);END; IF(EQTB[13185].INT<=0)OR(EQTB[13185].INT>32768)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(560);END;BEGIN HELPPTR:=1;HELPLINE[0]:=561;END; INTERROR(EQTB[13185].INT);GEQWORDDEFINE(13185,1000);END; MAGSET:=EQTB[13185].INT;END;{:288}{295:}PROCEDURE TOKENSHOW(P:HALFWORD); BEGIN IF P<>0 THEN SHOWTOKENLIST(MEM[P].HH.RH,0,10000000);END;{:295} {296:}PROCEDURE PRINTMEANING;BEGIN PRINTCMDCHR(CURCMD,CURCHR); IF CURCMD>=111 THEN BEGIN PRINTCHAR(58);PRINTLN;TOKENSHOW(CURCHR); END ELSE IF(CURCMD=110)AND(CURCHR<5)THEN BEGIN PRINTCHAR(58);PRINTLN; TOKENSHOW(CURMARK[CURCHR]);END;END;{:296}{299:}PROCEDURE SHOWCURCMDCHR; VAR N:INTEGER;L:INTEGER;P:HALFWORD;BEGIN BEGINDIAGNOSTIC;PRINTNL(123); IF CURLIST.MODEFIELD<>SHOWNMODE THEN BEGIN PRINTMODE(CURLIST.MODEFIELD); PRINT(575);SHOWNMODE:=CURLIST.MODEFIELD;END;PRINTCMDCHR(CURCMD,CURCHR); IF EQTB[13225].INT>0 THEN IF CURCMD>=105 THEN IF CURCMD<=106 THEN BEGIN PRINT(575);IF CURCMD=106 THEN BEGIN PRINTCMDCHR(105,CURIF); PRINTCHAR(32);N:=0;L:=IFLINE;END ELSE BEGIN N:=1;L:=LINE;END;P:=CONDPTR; WHILE P<>0 DO BEGIN N:=N+1;P:=MEM[P].HH.RH;END;PRINT(576);PRINTINT(N); PRINTCHAR(41);IF L<>0 THEN BEGIN PRINT(1356);PRINTINT(L);END;END; PRINTCHAR(125);ENDDIAGNOSTIC(FALSE);END;{:299}{311:} PROCEDURE SHOWCONTEXT;LABEL 30;VAR OLDSETTING:0..22;NN:INTEGER; BOTTOMLINE:BOOLEAN;{315:}I:0..BUFSIZE;J:0..BUFSIZE;L:0..HALFERRORLINE; M:INTEGER;N:0..ERRORLINE;P:INTEGER;Q:INTEGER;{:315} BEGIN BASEPTR:=INPUTPTR;INPUTSTACK[BASEPTR]:=CURINPUT;{1605:} IF DIAGQUAL THEN WRITELN(DIAGFILE,'!'); IF DIAGQUAL THEN WRITELN(DIAGFILE,' start diagnostic'){:1605};NN:=-1; BOTTOMLINE:=FALSE;WHILE TRUE DO BEGIN CURINPUT:=INPUTSTACK[BASEPTR]; IF(CURINPUT.STATEFIELD<>0)THEN IF(CURINPUT.NAMEFIELD>19)OR(BASEPTR=0) THEN BOTTOMLINE:=TRUE; IF(BASEPTR=INPUTPTR)OR BOTTOMLINE OR(NN0)OR(CURINPUT. INDEXFIELD<>3)OR(CURINPUT.LOCFIELD<>0)THEN BEGIN TALLY:=0; OLDSETTING:=SELECTOR;IF CURINPUT.STATEFIELD<>0 THEN BEGIN{313:} IF CURINPUT.NAMEFIELD<=17 THEN BEGIN{1607:} IF DIAGQUAL THEN WRITE(DIAGFILE,' region/text/label="'); COPYERR:=PRINTIT;LABELSIZE:=14{:1607}; IF(CURINPUT.NAMEFIELD=0)THEN IF BASEPTR=0 THEN PRINTNL(582)ELSE PRINTNL( 583)ELSE BEGIN PRINTNL(584); IF CURINPUT.NAMEFIELD=17 THEN PRINTCHAR(42)ELSE PRINTINT(CURINPUT. NAMEFIELD-1);PRINTCHAR(62);END;{1608:}COPYERR:=IGNOREIT; IF DIAGQUAL THEN WRITE(DIAGFILE,'" "'){:1608}; END ELSE IF CURINPUT.INDEXFIELD<>INOPEN THEN BEGIN PRINTNL(585); PRINTINT(LINESTACK[CURINPUT.INDEXFIELD+1]);END ELSE BEGIN PRINTNL(585); PRINTINT(LINE);{1609:} IF DIAGQUAL THEN WRITE(DIAGFILE,' region/file/primary '); DIAGPRINT(CURINPUT.NAMEFIELD);IF DIAGQUAL THEN WRITELN(DIAGFILE,' -'); IF DIAGQUAL THEN WRITELN(DIAGFILE,' /line=',LINE:1, '/column_range=(1,65535)'){:1609};END;PRINTCHAR(32){:313};{318:} BEGIN L:=TALLY;TALLY:=0;SELECTOR:=20;TRICKCOUNT:=1000000;END; IF BUFFER[CURINPUT.LIMITFIELD]=EQTB[13216].INT THEN J:=CURINPUT. LIMITFIELD ELSE J:=CURINPUT.LIMITFIELD+1; IF J>0 THEN FOR I:=CURINPUT.STARTFIELD TO J-1 DO BEGIN IF I=CURINPUT. LOCFIELD THEN BEGIN FIRSTCOUNT:=TALLY; TRICKCOUNT:=TALLY+1+ERRORLINE-HALFERRORLINE; IF TRICKCOUNTERRORLINE THEN PRINT(278);{1612:} IF COPYERR=PRINTIT THEN BEGIN IF DIAGQUAL THEN WRITE(DIAGFILE, '"/line=1/column_range=(');N:=N-L; IF DIAGQUAL THEN WRITELN(DIAGFILE,N+1:1,',65535)');COPYERR:=IGNOREIT; END ELSE IF DIAGQUAL THEN WRITELN(DIAGFILE,' region/nested/column=', CURINPUT.LOCFIELD-CURINPUT.STARTFIELD+1:1){:1612}{:317};NN:=NN+1;END; END{:312}ELSE IF NN=EQTB[13222].INT THEN BEGIN PRINTNL(278);NN:=NN+1; END;IF BOTTOMLINE THEN GOTO 30;BASEPTR:=BASEPTR-1;END; 30:CURINPUT:=INPUTSTACK[INPUTPTR];{1606:} IF DIAGQUAL THEN WRITE(DIAGFILE,' message "%TEX-E-TEXERROR, '); WHILE NOT EOF(TEMPFILE)DO BEGIN IF DIAGQUAL THEN WRITE(DIAGFILE,TEMPFILE ^);GET(TEMPFILE)END;IF DIAGQUAL THEN WRITELN(DIAGFILE,'"'); IF DIAGQUAL THEN WRITELN(DIAGFILE,' end diagnostic'){:1606};END;{:311} {323:}PROCEDURE BEGINTOKENLIST(P:HALFWORD;T:QUARTERWORD); BEGIN BEGIN IF INPUTPTR>MAXINSTACK THEN BEGIN MAXINSTACK:=INPUTPTR; IF INPUTPTR=STACKSIZE THEN OVERFLOW(602,STACKSIZE);END; INPUTSTACK[INPUTPTR]:=CURINPUT;INPUTPTR:=INPUTPTR+1;END; CURINPUT.STATEFIELD:=0;CURINPUT.STARTFIELD:=P;CURINPUT.INDEXFIELD:=T; IF T>=5 THEN BEGIN MEM[P].HH.LH:=MEM[P].HH.LH+1; IF T=5 THEN CURINPUT.LIMITFIELD:=PARAMPTR ELSE BEGIN CURINPUT.LOCFIELD:= MEM[P].HH.RH;IF EQTB[13198].INT>1 THEN BEGIN BEGINDIAGNOSTIC; PRINTNL(339);CASE T OF 15:PRINTESC(354);16:PRINTESC(603); OTHERWISE PRINTCMDCHR(72,T+11311)END;PRINT(563);TOKENSHOW(P); ENDDIAGNOSTIC(FALSE);END;END;END ELSE CURINPUT.LOCFIELD:=P;END;{:323} {324:}PROCEDURE ENDTOKENLIST; BEGIN IF CURINPUT.INDEXFIELD>=3 THEN BEGIN IF CURINPUT.INDEXFIELD<=4 THEN FLUSHLIST(CURINPUT.STARTFIELD)ELSE BEGIN DELETETOKENREF(CURINPUT. STARTFIELD); IF CURINPUT.INDEXFIELD=5 THEN WHILE PARAMPTR>CURINPUT.LIMITFIELD DO BEGIN PARAMPTR:=PARAMPTR-1;FLUSHLIST(PARAMSTACK[PARAMPTR]);END;END; END ELSE IF CURINPUT.INDEXFIELD=1 THEN IF ALIGNSTATE>500000 THEN ALIGNSTATE:=0 ELSE FATALERROR(604);BEGIN INPUTPTR:=INPUTPTR-1; CURINPUT:=INPUTSTACK[INPUTPTR];END; BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END;END;{:324}{325:} PROCEDURE BACKINPUT;VAR P:HALFWORD; BEGIN WHILE(CURINPUT.STATEFIELD=0)AND(CURINPUT.LOCFIELD=0)DO ENDTOKENLIST;P:=GETAVAIL;MEM[P].HH.LH:=CURTOK; IF CURTOK<768 THEN IF CURTOK<512 THEN ALIGNSTATE:=ALIGNSTATE-1 ELSE ALIGNSTATE:=ALIGNSTATE+1; BEGIN IF INPUTPTR>MAXINSTACK THEN BEGIN MAXINSTACK:=INPUTPTR; IF INPUTPTR=STACKSIZE THEN OVERFLOW(602,STACKSIZE);END; INPUTSTACK[INPUTPTR]:=CURINPUT;INPUTPTR:=INPUTPTR+1;END; CURINPUT.STATEFIELD:=0;CURINPUT.STARTFIELD:=P;CURINPUT.INDEXFIELD:=3; CURINPUT.LOCFIELD:=P;END;{:325}{327:}PROCEDURE BACKERROR; BEGIN OKTOINTERRUPT:=FALSE;BACKINPUT;OKTOINTERRUPT:=TRUE;ERROR;END; PROCEDURE INSERROR;BEGIN OKTOINTERRUPT:=FALSE;BACKINPUT; CURINPUT.INDEXFIELD:=4;OKTOINTERRUPT:=TRUE;ERROR;END;{:327}{328:} PROCEDURE BEGINFILEREADING; BEGIN IF INOPEN=MAXINOPEN THEN OVERFLOW(605,MAXINOPEN); IF FIRST=BUFSIZE THEN OVERFLOW(257,BUFSIZE);INOPEN:=INOPEN+1; BEGIN IF INPUTPTR>MAXINSTACK THEN BEGIN MAXINSTACK:=INPUTPTR; IF INPUTPTR=STACKSIZE THEN OVERFLOW(602,STACKSIZE);END; INPUTSTACK[INPUTPTR]:=CURINPUT;INPUTPTR:=INPUTPTR+1;END; CURINPUT.INDEXFIELD:=INOPEN;EOFSEEN[CURINPUT.INDEXFIELD]:=FALSE; GRPSTACK[CURINPUT.INDEXFIELD]:=CURBOUNDARY; IFSTACK[CURINPUT.INDEXFIELD]:=CONDPTR; LINESTACK[CURINPUT.INDEXFIELD]:=LINE;CURINPUT.STARTFIELD:=FIRST; CURINPUT.STATEFIELD:=1;CURINPUT.NAMEFIELD:=0;END;{:328}{329:} PROCEDURE ENDFILEREADING;BEGIN FIRST:=CURINPUT.STARTFIELD; LINE:=LINESTACK[CURINPUT.INDEXFIELD]; IF(CURINPUT.NAMEFIELD=18)OR(CURINPUT.NAMEFIELD=19)THEN PSEUDOCLOSE ELSE IF CURINPUT.NAMEFIELD>17 THEN ACLOSE(INPUTFILE[CURINPUT.INDEXFIELD]); BEGIN INPUTPTR:=INPUTPTR-1;CURINPUT:=INPUTSTACK[INPUTPTR];END; INOPEN:=INOPEN-1;END;{:329}{330:}PROCEDURE CLEARFORERRORPROMPT; BEGIN WHILE(CURINPUT.STATEFIELD<>0)AND(CURINPUT.NAMEFIELD=0)AND(INPUTPTR >0)AND(CURINPUT.LOCFIELD>CURINPUT.LIMITFIELD)DO ENDFILEREADING;PRINTLN; INRAB^.RAB$V_PTA:=TRUE;END;{:330}{336:}PROCEDURE CHECKOUTERVALIDITY; VAR P:HALFWORD;Q:HALFWORD; BEGIN IF SCANNERSTATUS<>0 THEN BEGIN DELETIONSALLOWED:=FALSE;{337:} IF CURCS<>0 THEN BEGIN IF(CURINPUT.STATEFIELD=0)OR(CURINPUT.NAMEFIELD<1) OR(CURINPUT.NAMEFIELD>17)THEN BEGIN P:=GETAVAIL; MEM[P].HH.LH:=4095+CURCS;BEGINTOKENLIST(P,3);END;CURCMD:=10;CURCHR:=32; END{:337};IF SCANNERSTATUS>1 THEN{338:}BEGIN RUNAWAY; IF CURCS=0 THEN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(613);END ELSE BEGIN CURCS:=0; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(614);END;END;PRINT(615);{339:}P:=GETAVAIL; CASE SCANNERSTATUS OF 2:BEGIN PRINT(578);MEM[P].HH.LH:=637;END; 3:BEGIN PRINT(621);MEM[P].HH.LH:=PARTOKEN;LONGSTATE:=113;END; 4:BEGIN PRINT(580);MEM[P].HH.LH:=637;Q:=P;P:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[P].HH.LH:=14610;ALIGNSTATE:=-1000000;END;5:BEGIN PRINT(581); MEM[P].HH.LH:=637;END;END;BEGINTOKENLIST(P,4){:339};PRINT(616); SPRINTCS(WARNINGINDEX);BEGIN HELPPTR:=4;HELPLINE[3]:=617; HELPLINE[2]:=618;HELPLINE[1]:=619;HELPLINE[0]:=620;END;ERROR;END{:338} ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(607);END;PRINTCMDCHR(105,CURIF); PRINT(608);PRINTINT(SKIPLINE);BEGIN HELPPTR:=3;HELPLINE[2]:=609; HELPLINE[1]:=610;HELPLINE[0]:=611;END; IF CURCS<>0 THEN CURCS:=0 ELSE HELPLINE[2]:=612;CURTOK:=14613;INSERROR; END;DELETIONSALLOWED:=TRUE;END;END;{:336}{340:}PROCEDURE FIRMUPTHELINE; FORWARD;{:340}{341:}PROCEDURE GETNEXT;LABEL 20,25,21,26,40,10; VAR K:0..BUFSIZE;T:HALFWORD;CAT:0..15;C,CC:ASCIICODE;D:2..3; BEGIN 20:CURCS:=0;IF CURINPUT.STATEFIELD<>0 THEN{343:} BEGIN 25:IF CURINPUT.LOCFIELD<=CURINPUT.LIMITFIELD THEN BEGIN CURCHR:= BUFFER[CURINPUT.LOCFIELD];CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1; 21:CURCMD:=EQTB[11888+CURCHR].HH.RH;{344:} CASE CURINPUT.STATEFIELD+CURCMD OF{345:}10,26,42,27,43{:345}:GOTO 25; 1,17,33:{354:} BEGIN IF CURINPUT.LOCFIELD>CURINPUT.LIMITFIELD THEN CURCS:=513 ELSE BEGIN 26:K:=CURINPUT.LOCFIELD;CURCHR:=BUFFER[K]; CAT:=EQTB[11888+CURCHR].HH.RH;K:=K+1; IF CAT=11 THEN CURINPUT.STATEFIELD:=17 ELSE IF CAT=10 THEN CURINPUT. STATEFIELD:=17 ELSE CURINPUT.STATEFIELD:=1; IF(CAT=11)AND(K<=CURINPUT.LIMITFIELD)THEN{356:} BEGIN REPEAT CURCHR:=BUFFER[K];CAT:=EQTB[11888+CURCHR].HH.RH;K:=K+1; UNTIL(CAT<>11)OR(K>CURINPUT.LIMITFIELD);{355:} BEGIN IF BUFFER[K]=CURCHR THEN IF CAT=7 THEN IF K=48)AND(C<=57))OR((C>=97)AND(C<=102)))THEN IF K+2<=CURINPUT. LIMITFIELD THEN BEGIN CC:=BUFFER[K+2]; IF(((CC>=48)AND(CC<=57))OR((CC>=97)AND(CC<=102)))THEN D:=D+1;END; IF D>2 THEN BEGIN IF C<=57 THEN CURCHR:=C-48 ELSE CURCHR:=C-87; IF CC<=57 THEN CURCHR:=16*CURCHR+CC-48 ELSE CURCHR:=16*CURCHR+CC-87; BUFFER[K-1]:=CURCHR; END ELSE IF C<64 THEN BUFFER[K-1]:=C+64 ELSE BUFFER[K-1]:=C-64; CURINPUT.LIMITFIELD:=CURINPUT.LIMITFIELD-D;FIRST:=FIRST-D; WHILE K<=CURINPUT.LIMITFIELD DO BEGIN BUFFER[K]:=BUFFER[K+D];K:=K+1;END; GOTO 26;END;END;END{:355};IF CAT<>11 THEN K:=K-1; IF K>CURINPUT.LOCFIELD+1 THEN BEGIN CURCS:=IDLOOKUP(CURINPUT.LOCFIELD,K- CURINPUT.LOCFIELD);CURINPUT.LOCFIELD:=K;GOTO 40;END;END{:356}ELSE{355:} BEGIN IF BUFFER[K]=CURCHR THEN IF CAT=7 THEN IF K=48)AND(C<=57))OR((C>=97)AND(C<=102)))THEN IF K+2<=CURINPUT. LIMITFIELD THEN BEGIN CC:=BUFFER[K+2]; IF(((CC>=48)AND(CC<=57))OR((CC>=97)AND(CC<=102)))THEN D:=D+1;END; IF D>2 THEN BEGIN IF C<=57 THEN CURCHR:=C-48 ELSE CURCHR:=C-87; IF CC<=57 THEN CURCHR:=16*CURCHR+CC-48 ELSE CURCHR:=16*CURCHR+CC-87; BUFFER[K-1]:=CURCHR; END ELSE IF C<64 THEN BUFFER[K-1]:=C+64 ELSE BUFFER[K-1]:=C-64; CURINPUT.LIMITFIELD:=CURINPUT.LIMITFIELD-D;FIRST:=FIRST-D; WHILE K<=CURINPUT.LIMITFIELD DO BEGIN BUFFER[K]:=BUFFER[K+D];K:=K+1;END; GOTO 26;END;END;END{:355};CURCS:=257+BUFFER[CURINPUT.LOCFIELD]; CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;END;40:CURCMD:=EQTB[CURCS].HH.B0; CURCHR:=EQTB[CURCS].HH.RH;IF CURCMD>=113 THEN CHECKOUTERVALIDITY; END{:354};14,30,46:{353:}BEGIN CURCS:=CURCHR+1; CURCMD:=EQTB[CURCS].HH.B0;CURCHR:=EQTB[CURCS].HH.RH; CURINPUT.STATEFIELD:=1;IF CURCMD>=113 THEN CHECKOUTERVALIDITY;END{:353}; 8,24,40:{352:} BEGIN IF CURCHR=BUFFER[CURINPUT.LOCFIELD]THEN IF CURINPUT.LOCFIELD< CURINPUT.LIMITFIELD THEN BEGIN C:=BUFFER[CURINPUT.LOCFIELD+1]; IF C<128 THEN BEGIN CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+2; IF(((C>=48)AND(C<=57))OR((C>=97)AND(C<=102)))THEN IF CURINPUT.LOCFIELD<= CURINPUT.LIMITFIELD THEN BEGIN CC:=BUFFER[CURINPUT.LOCFIELD]; IF(((CC>=48)AND(CC<=57))OR((CC>=97)AND(CC<=102)))THEN BEGIN CURINPUT. LOCFIELD:=CURINPUT.LOCFIELD+1; IF C<=57 THEN CURCHR:=C-48 ELSE CURCHR:=C-87; IF CC<=57 THEN CURCHR:=16*CURCHR+CC-48 ELSE CURCHR:=16*CURCHR+CC-87; GOTO 21;END;END;IF C<64 THEN CURCHR:=C+64 ELSE CURCHR:=C-64;GOTO 21;END; END;CURINPUT.STATEFIELD:=1;END{:352};16,32,48:{346:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(622);END;BEGIN HELPPTR:=2; HELPLINE[1]:=623;HELPLINE[0]:=624;END;DELETIONSALLOWED:=FALSE;ERROR; DELETIONSALLOWED:=TRUE;GOTO 20;END{:346};{347:}11:{349:} BEGIN CURINPUT.STATEFIELD:=17;CURCHR:=32;END{:349};6:{348:} BEGIN CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1;CURCMD:=10;CURCHR:=32; END{:348};22,15,31,47:{350:} BEGIN CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1;GOTO 25;END{:350}; 38:{351:}BEGIN CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1;CURCS:=PARLOC; CURCMD:=EQTB[CURCS].HH.B0;CURCHR:=EQTB[CURCS].HH.RH; IF CURCMD>=113 THEN CHECKOUTERVALIDITY;END{:351}; 2:ALIGNSTATE:=ALIGNSTATE+1;18,34:BEGIN CURINPUT.STATEFIELD:=1; ALIGNSTATE:=ALIGNSTATE+1;END;3:ALIGNSTATE:=ALIGNSTATE-1; 19,35:BEGIN CURINPUT.STATEFIELD:=1;ALIGNSTATE:=ALIGNSTATE-1;END; 20,21,23,25,28,29,36,37,39,41,44,45:CURINPUT.STATEFIELD:=1;{:347} OTHERWISE END{:344};END ELSE BEGIN CURINPUT.STATEFIELD:=33;{360:} IF CURINPUT.NAMEFIELD>17 THEN{362:}BEGIN LINE:=LINE+1; FIRST:=CURINPUT.STARTFIELD; IF NOT FORCEEOF THEN IF CURINPUT.NAMEFIELD<=19 THEN BEGIN IF PSEUDOINPUT THEN FIRMUPTHELINE ELSE IF(EQTB[11325].HH.RH<>0)AND NOT EOFSEEN[CURINPUT .INDEXFIELD]THEN BEGIN CURINPUT.LIMITFIELD:=FIRST-1; EOFSEEN[CURINPUT.INDEXFIELD]:=TRUE;BEGINTOKENLIST(EQTB[11325].HH.RH,14); GOTO 20;END ELSE FORCEEOF:=TRUE; END ELSE BEGIN IF INPUTLN(INPUTFILE[CURINPUT.INDEXFIELD],TRUE)THEN FIRMUPTHELINE ELSE IF(EQTB[11325].HH.RH<>0)AND NOT EOFSEEN[CURINPUT. INDEXFIELD]THEN BEGIN CURINPUT.LIMITFIELD:=FIRST-1; EOFSEEN[CURINPUT.INDEXFIELD]:=TRUE;BEGINTOKENLIST(EQTB[11325].HH.RH,14); GOTO 20;END ELSE FORCEEOF:=TRUE;END; IF FORCEEOF THEN BEGIN IF EQTB[13227].INT>0 THEN IF(GRPSTACK[INOPEN]<> CURBOUNDARY)OR(IFSTACK[INOPEN]<>CONDPTR)THEN FILEWARNING; IF CURINPUT.NAMEFIELD>=19 THEN BEGIN PRINTCHAR(41); OPENPARENS:=OPENPARENS-1;IF ODD(SELECTOR)THEN WRITELN(TERMOUT);END; FORCEEOF:=FALSE;ENDFILEREADING;CHECKOUTERVALIDITY;GOTO 20;END; IF(EQTB[13216].INT<0)OR(EQTB[13216].INT>255)THEN CURINPUT.LIMITFIELD:= CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[13216].INT; FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD; END{:362}ELSE BEGIN IF NOT(CURINPUT.NAMEFIELD=0)THEN BEGIN CURCMD:=0; CURCHR:=0;GOTO 10;END;IF INPUTPTR>0 THEN BEGIN ENDFILEREADING;GOTO 20; END;IF SELECTOR<18 THEN OPENLOGFILE; IF INTERACTION>1 THEN BEGIN IF(EQTB[13216].INT<0)OR(EQTB[13216].INT>255) THEN CURINPUT.LIMITFIELD:=CURINPUT.LIMITFIELD+1; IF CURINPUT.LIMITFIELD=CURINPUT.STARTFIELD THEN PRINTNL(625);PRINTLN; FIRST:=CURINPUT.STARTFIELD;BEGIN WAKEUPTERMINAL;PRINT(42);TERMINPUT;END; CURINPUT.LIMITFIELD:=LAST; IF(EQTB[13216].INT<0)OR(EQTB[13216].INT>255)THEN CURINPUT.LIMITFIELD:= CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[13216].INT; FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD; END ELSE FATALERROR(626);END{:360}; BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END;GOTO 25;END; END{:343}ELSE{357:} IF CURINPUT.LOCFIELD<>0 THEN BEGIN T:=MEM[CURINPUT.LOCFIELD].HH.LH; CURINPUT.LOCFIELD:=MEM[CURINPUT.LOCFIELD].HH.RH; IF T>=4095 THEN BEGIN CURCS:=T-4095;CURCMD:=EQTB[CURCS].HH.B0; CURCHR:=EQTB[CURCS].HH.RH;IF CURCMD>=113 THEN IF CURCMD=116 THEN{358:} BEGIN CURCS:=MEM[CURINPUT.LOCFIELD].HH.LH-4095;CURINPUT.LOCFIELD:=0; CURCMD:=EQTB[CURCS].HH.B0;CURCHR:=EQTB[CURCS].HH.RH; IF CURCMD>100 THEN BEGIN CURCMD:=0;CURCHR:=257;END;END{:358} ELSE CHECKOUTERVALIDITY;END ELSE BEGIN CURCMD:=T DIV 256; CURCHR:=T MOD 256;CASE CURCMD OF 1:ALIGNSTATE:=ALIGNSTATE+1; 2:ALIGNSTATE:=ALIGNSTATE-1;5:{359:} BEGIN BEGINTOKENLIST(PARAMSTACK[CURINPUT.LIMITFIELD+CURCHR-1],0); GOTO 20;END{:359};OTHERWISE END;END;END ELSE BEGIN ENDTOKENLIST;GOTO 20; END{:357};{342:} IF CURCMD<=5 THEN IF CURCMD>=4 THEN IF ALIGNSTATE=0 THEN{789:} BEGIN IF SCANNERSTATUS=4 THEN FATALERROR(604); CURCMD:=MEM[CURALIGN+5].HH.LH;MEM[CURALIGN+5].HH.LH:=CURCHR; IF CURCMD=63 THEN BEGINTOKENLIST(327134,2)ELSE BEGINTOKENLIST(MEM[ CURALIGN+2].INT,2);ALIGNSTATE:=1000000;GOTO 20;END{:789}{:342};10:END; {:341}{363:}PROCEDURE FIRMUPTHELINE;VAR K:0..BUFSIZE; BEGIN CURINPUT.LIMITFIELD:=LAST; IF EQTB[13196].INT>0 THEN IF INTERACTION>1 THEN BEGIN WAKEUPTERMINAL; PRINTLN;IF CURINPUT.STARTFIELDFIRST THEN BEGIN FOR K:=FIRST TO LAST-1 DO BUFFER[K+CURINPUT. STARTFIELD-FIRST]:=BUFFER[K]; CURINPUT.LIMITFIELD:=CURINPUT.STARTFIELD+LAST-FIRST;END;END;END;{:363} {365:}PROCEDURE GETTOKEN;BEGIN NONEWCONTROLSEQUENCE:=FALSE;GETNEXT; NONEWCONTROLSEQUENCE:=TRUE; IF CURCS=0 THEN CURTOK:=(CURCMD*256)+CURCHR ELSE CURTOK:=4095+CURCS;END; {:365}{366:}{389:}PROCEDURE MACROCALL;LABEL 10,22,30,31,40; VAR R:HALFWORD;P:HALFWORD;Q:HALFWORD;S:HALFWORD;T:HALFWORD;U,V:HALFWORD; RBRACEPTR:HALFWORD;N:SMALLNUMBER;UNBALANCE:HALFWORD;M:HALFWORD; REFCOUNT:HALFWORD;SAVESCANNERSTATUS:SMALLNUMBER; SAVEWARNINGINDEX:HALFWORD;MATCHCHR:ASCIICODE; BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS;SAVEWARNINGINDEX:=WARNINGINDEX; WARNINGINDEX:=CURCS;REFCOUNT:=CURCHR;R:=MEM[REFCOUNT].HH.RH;N:=0; IF EQTB[13198].INT>0 THEN{401:}BEGIN BEGINDIAGNOSTIC;PRINTLN; PRINTCS(WARNINGINDEX);TOKENSHOW(REFCOUNT);ENDDIAGNOSTIC(FALSE);END{:401} ;IF MEM[R].HH.LH=3585 THEN R:=MEM[R].HH.RH; IF MEM[R].HH.LH<>3584 THEN{391:}BEGIN SCANNERSTATUS:=3;UNBALANCE:=0; LONGSTATE:=EQTB[CURCS].HH.B0; IF LONGSTATE>=113 THEN LONGSTATE:=LONGSTATE-2; REPEAT MEM[327141].HH.RH:=0; IF(MEM[R].HH.LH>3583)OR(MEM[R].HH.LH<3328)THEN S:=0 ELSE BEGIN MATCHCHR :=MEM[R].HH.LH-3328;S:=MEM[R].HH.RH;R:=S;P:=327141;M:=0;END;{392:} 22:GETTOKEN;IF CURTOK=MEM[R].HH.LH THEN{394:}BEGIN R:=MEM[R].HH.RH; IF(MEM[R].HH.LH>=3328)AND(MEM[R].HH.LH<=3584)THEN BEGIN IF CURTOK<512 THEN ALIGNSTATE:=ALIGNSTATE-1;GOTO 40;END ELSE GOTO 22;END{:394};{397:} IF S<>R THEN IF S=0 THEN{398:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(659);END;SPRINTCS(WARNINGINDEX); PRINT(660);BEGIN HELPPTR:=4;HELPLINE[3]:=661;HELPLINE[2]:=662; HELPLINE[1]:=663;HELPLINE[0]:=664;END;ERROR;GOTO 10;END{:398} ELSE BEGIN T:=S;REPEAT BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[Q].HH.LH:=MEM[T].HH.LH;P:=Q;END;M:=M+1;U:=MEM[T].HH.RH;V:=S; WHILE TRUE DO BEGIN IF U=R THEN IF CURTOK<>MEM[V].HH.LH THEN GOTO 30 ELSE BEGIN R:=MEM[V].HH.RH;GOTO 22;END; IF MEM[U].HH.LH<>MEM[V].HH.LH THEN GOTO 30;U:=MEM[U].HH.RH; V:=MEM[V].HH.RH;END;30:T:=MEM[T].HH.RH;UNTIL T=R;R:=S;END{:397}; IF CURTOK=PARTOKEN THEN IF LONGSTATE<>112 THEN{396:} BEGIN IF LONGSTATE=111 THEN BEGIN RUNAWAY; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(654);END;SPRINTCS(WARNINGINDEX);PRINT(655); BEGIN HELPPTR:=3;HELPLINE[2]:=656;HELPLINE[1]:=657;HELPLINE[0]:=658;END; BACKERROR;END;PSTACK[N]:=MEM[327141].HH.RH; ALIGNSTATE:=ALIGNSTATE-UNBALANCE;FOR M:=0 TO N DO FLUSHLIST(PSTACK[M]); GOTO 10;END{:396};IF CURTOK<768 THEN IF CURTOK<512 THEN{399:} BEGIN UNBALANCE:=1;WHILE TRUE DO BEGIN BEGIN BEGIN Q:=AVAIL; IF Q=0 THEN Q:=GETAVAIL ELSE BEGIN AVAIL:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0; DYNUSED:=DYNUSED+1;END;END;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q; END;GETTOKEN;IF CURTOK=PARTOKEN THEN IF LONGSTATE<>112 THEN{396:} BEGIN IF LONGSTATE=111 THEN BEGIN RUNAWAY; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(654);END;SPRINTCS(WARNINGINDEX);PRINT(655); BEGIN HELPPTR:=3;HELPLINE[2]:=656;HELPLINE[1]:=657;HELPLINE[0]:=658;END; BACKERROR;END;PSTACK[N]:=MEM[327141].HH.RH; ALIGNSTATE:=ALIGNSTATE-UNBALANCE;FOR M:=0 TO N DO FLUSHLIST(PSTACK[M]); GOTO 10;END{:396}; IF CURTOK<768 THEN IF CURTOK<512 THEN UNBALANCE:=UNBALANCE+1 ELSE BEGIN UNBALANCE:=UNBALANCE-1;IF UNBALANCE=0 THEN GOTO 31;END;END; 31:RBRACEPTR:=P;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK; P:=Q;END;END{:399}ELSE{395:}BEGIN BACKINPUT; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(646);END;SPRINTCS(WARNINGINDEX);PRINT(647); BEGIN HELPPTR:=6;HELPLINE[5]:=648;HELPLINE[4]:=649;HELPLINE[3]:=650; HELPLINE[2]:=651;HELPLINE[1]:=652;HELPLINE[0]:=653;END; ALIGNSTATE:=ALIGNSTATE+1;LONGSTATE:=111;CURTOK:=PARTOKEN;INSERROR; END{:395}ELSE{393:} BEGIN IF CURTOK=2592 THEN IF MEM[R].HH.LH<=3584 THEN IF MEM[R].HH.LH>= 3328 THEN GOTO 22;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[Q].HH.LH:=CURTOK;P:=Q;END;END{:393};M:=M+1; IF MEM[R].HH.LH>3584 THEN GOTO 22;IF MEM[R].HH.LH<3328 THEN GOTO 22; 40:IF S<>0 THEN{400:} BEGIN IF(M=1)AND(MEM[P].HH.LH<768)AND(P<>327141)THEN BEGIN MEM[RBRACEPTR ].HH.RH:=0;BEGIN MEM[P].HH.RH:=AVAIL;AVAIL:=P;DYNUSED:=DYNUSED-1;END; P:=MEM[327141].HH.RH;PSTACK[N]:=MEM[P].HH.RH;BEGIN MEM[P].HH.RH:=AVAIL; AVAIL:=P;DYNUSED:=DYNUSED-1;END;END ELSE PSTACK[N]:=MEM[327141].HH.RH; N:=N+1;IF EQTB[13198].INT>0 THEN BEGIN BEGINDIAGNOSTIC; PRINTNL(MATCHCHR);PRINTINT(N);PRINT(665); SHOWTOKENLIST(PSTACK[N-1],0,1000);ENDDIAGNOSTIC(FALSE);END;END{:400} {:392};UNTIL MEM[R].HH.LH=3584;END{:391};{390:} WHILE(CURINPUT.STATEFIELD=0)AND(CURINPUT.LOCFIELD=0)DO ENDTOKENLIST; BEGINTOKENLIST(REFCOUNT,5);CURINPUT.NAMEFIELD:=WARNINGINDEX; CURINPUT.LOCFIELD:=MEM[R].HH.RH; IF N>0 THEN BEGIN IF PARAMPTR+N>MAXPARAMSTACK THEN BEGIN MAXPARAMSTACK:= PARAMPTR+N;IF MAXPARAMSTACK>PARAMSIZE THEN OVERFLOW(645,PARAMSIZE);END; FOR M:=0 TO N-1 DO PARAMSTACK[PARAMPTR+M]:=PSTACK[M]; PARAMPTR:=PARAMPTR+N;END{:390};10:SCANNERSTATUS:=SAVESCANNERSTATUS; WARNINGINDEX:=SAVEWARNINGINDEX;END;{:389}{379:}PROCEDURE INSERTRELAX; BEGIN CURTOK:=4095+CURCS;BACKINPUT;CURTOK:=14616;BACKINPUT; CURINPUT.INDEXFIELD:=4;END;{:379}{1485:}PROCEDURE PSEUDOSTART;FORWARD; {:1485}{1543:}PROCEDURE SCANREGISTERNUM;FORWARD;{:1543}{1548:} PROCEDURE NEWINDEX(I:QUARTERWORD;Q:HALFWORD);VAR K:SMALLNUMBER; BEGIN CURPTR:=GETNODE(9);MEM[CURPTR].HH.B0:=I;MEM[CURPTR].HH.B1:=0; MEM[CURPTR].HH.RH:=Q;FOR K:=1 TO 8 DO MEM[CURPTR+K]:=SANULL;END;{:1548} {1552:}PROCEDURE FINDSAELEMENT(T:SMALLNUMBER;N:HALFWORD;W:BOOLEAN); LABEL 45,46,47,48,49,10;VAR Q:HALFWORD;I:SMALLNUMBER; BEGIN CURPTR:=SAROOT[T]; BEGIN IF CURPTR=0 THEN IF W THEN GOTO 45 ELSE GOTO 10;END;Q:=CURPTR; I:=N DIV 4096; IF ODD(I)THEN CURPTR:=MEM[Q+(I DIV 2)+1].HH.RH ELSE CURPTR:=MEM[Q+(I DIV 2)+1].HH.LH;BEGIN IF CURPTR=0 THEN IF W THEN GOTO 46 ELSE GOTO 10;END; Q:=CURPTR;I:=(N DIV 256)MOD 16; IF ODD(I)THEN CURPTR:=MEM[Q+(I DIV 2)+1].HH.RH ELSE CURPTR:=MEM[Q+(I DIV 2)+1].HH.LH;BEGIN IF CURPTR=0 THEN IF W THEN GOTO 47 ELSE GOTO 10;END; Q:=CURPTR;I:=(N DIV 16)MOD 16; IF ODD(I)THEN CURPTR:=MEM[Q+(I DIV 2)+1].HH.RH ELSE CURPTR:=MEM[Q+(I DIV 2)+1].HH.LH;BEGIN IF CURPTR=0 THEN IF W THEN GOTO 48 ELSE GOTO 10;END; Q:=CURPTR;I:=N MOD 16; IF ODD(I)THEN CURPTR:=MEM[Q+(I DIV 2)+1].HH.RH ELSE CURPTR:=MEM[Q+(I DIV 2)+1].HH.LH;IF(CURPTR=0)AND W THEN GOTO 49;GOTO 10;45:NEWINDEX(T,0); SAROOT[T]:=CURPTR;Q:=CURPTR;I:=N DIV 4096;46:NEWINDEX(I,Q); BEGIN IF ODD(I)THEN MEM[Q+(I DIV 2)+1].HH.RH:=CURPTR ELSE MEM[Q+(I DIV 2 )+1].HH.LH:=CURPTR;MEM[Q].HH.B1:=MEM[Q].HH.B1+1;END;Q:=CURPTR; I:=(N DIV 256)MOD 16;47:NEWINDEX(I,Q); BEGIN IF ODD(I)THEN MEM[Q+(I DIV 2)+1].HH.RH:=CURPTR ELSE MEM[Q+(I DIV 2 )+1].HH.LH:=CURPTR;MEM[Q].HH.B1:=MEM[Q].HH.B1+1;END;Q:=CURPTR; I:=(N DIV 16)MOD 16;48:NEWINDEX(I,Q); BEGIN IF ODD(I)THEN MEM[Q+(I DIV 2)+1].HH.RH:=CURPTR ELSE MEM[Q+(I DIV 2 )+1].HH.LH:=CURPTR;MEM[Q].HH.B1:=MEM[Q].HH.B1+1;END;Q:=CURPTR; I:=N MOD 16;49:{1553:}IF T=6 THEN BEGIN CURPTR:=GETNODE(4); MEM[CURPTR+1]:=SANULL;MEM[CURPTR+2]:=SANULL;MEM[CURPTR+3]:=SANULL; END ELSE BEGIN IF T<=1 THEN BEGIN CURPTR:=GETNODE(3); MEM[CURPTR+2].INT:=0;MEM[CURPTR+1].HH.RH:=N; END ELSE BEGIN CURPTR:=GETNODE(2); IF T<=3 THEN BEGIN MEM[CURPTR+1].HH.RH:=0;MEM[0].HH.RH:=MEM[0].HH.RH+1; END ELSE MEM[CURPTR+1].HH.RH:=0;END;MEM[CURPTR+1].HH.LH:=0;END; MEM[CURPTR].HH.B0:=16*T+I;MEM[CURPTR].HH.B1:=1{:1553}; MEM[CURPTR].HH.RH:=Q; BEGIN IF ODD(I)THEN MEM[Q+(I DIV 2)+1].HH.RH:=CURPTR ELSE MEM[Q+(I DIV 2 )+1].HH.LH:=CURPTR;MEM[Q].HH.B1:=MEM[Q].HH.B1+1;END;10:END;{:1552} PROCEDURE PASSTEXT;FORWARD;PROCEDURE STARTINPUT;FORWARD; PROCEDURE CONDITIONAL;FORWARD;PROCEDURE GETXTOKEN;FORWARD; PROCEDURE CONVTOKS;FORWARD;PROCEDURE INSTHETOKS;FORWARD; PROCEDURE EXPAND;LABEL 21;VAR T:HALFWORD;P,Q,R:HALFWORD;J:0..BUFSIZE; CVBACKUP:INTEGER;CVLBACKUP,RADIXBACKUP,COBACKUP:SMALLNUMBER; BACKUPBACKUP:HALFWORD;SAVESCANNERSTATUS:SMALLNUMBER; BEGIN CVBACKUP:=CURVAL;CVLBACKUP:=CURVALLEVEL;RADIXBACKUP:=RADIX; COBACKUP:=CURORDER;BACKUPBACKUP:=MEM[327131].HH.RH; 21:IF CURCMD<111 THEN{367:} BEGIN IF EQTB[13204].INT>1 THEN SHOWCURCMDCHR;CASE CURCMD OF 110:{386:} BEGIN T:=CURCHR MOD 5;IF CURCHR>=5 THEN SCANREGISTERNUM ELSE CURVAL:=0; IF CURVAL=0 THEN CURPTR:=CURMARK[T]ELSE{1557:} BEGIN FINDSAELEMENT(6,CURVAL,FALSE); IF CURPTR<>0 THEN IF ODD(T)THEN CURPTR:=MEM[CURPTR+(T DIV 2)+1].HH.RH ELSE CURPTR:=MEM[CURPTR+(T DIV 2)+1].HH.LH;END{:1557}; IF CURPTR<>0 THEN BEGINTOKENLIST(CURPTR,15);END{:386}; 102:IF CURCHR=0 THEN{368:}BEGIN GETTOKEN;T:=CURTOK;GETTOKEN; IF CURCMD>100 THEN EXPAND ELSE BACKINPUT;CURTOK:=T;BACKINPUT;END{:368} ELSE{1498:}BEGIN GETTOKEN; IF(CURCMD=105)AND(CURCHR<>16)THEN BEGIN CURCHR:=CURCHR+32;GOTO 21;END; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(694);END;PRINTESC(782);PRINT(1382); PRINTCMDCHR(CURCMD,CURCHR);PRINTCHAR(39);BEGIN HELPPTR:=1; HELPLINE[0]:=624;END;BACKERROR;END{:1498};103:{369:} BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS;SCANNERSTATUS:=0;GETTOKEN; SCANNERSTATUS:=SAVESCANNERSTATUS;T:=CURTOK;BACKINPUT; IF T>=4095 THEN BEGIN P:=GETAVAIL;MEM[P].HH.LH:=14618; MEM[P].HH.RH:=CURINPUT.LOCFIELD;CURINPUT.STARTFIELD:=P; CURINPUT.LOCFIELD:=P;END;END{:369};107:{372:}BEGIN R:=GETAVAIL;P:=R; REPEAT GETXTOKEN;IF CURCS=0 THEN BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[Q].HH.LH:=CURTOK;P:=Q;END;UNTIL CURCS<>0;IF CURCMD<>67 THEN{373:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(634);END;PRINTESC(508); PRINT(635);BEGIN HELPPTR:=2;HELPLINE[1]:=636;HELPLINE[0]:=637;END; BACKERROR;END{:373};{374:}J:=FIRST;P:=MEM[R].HH.RH; WHILE P<>0 DO BEGIN IF J>=MAXBUFSTACK THEN BEGIN MAXBUFSTACK:=J+1; IF MAXBUFSTACK=BUFSIZE THEN OVERFLOW(257,BUFSIZE);END; BUFFER[J]:=MEM[P].HH.LH MOD 256;J:=J+1;P:=MEM[P].HH.RH;END; IF J>FIRST+1 THEN BEGIN NONEWCONTROLSEQUENCE:=FALSE; CURCS:=IDLOOKUP(FIRST,J-FIRST);NONEWCONTROLSEQUENCE:=TRUE; END ELSE IF J=FIRST THEN CURCS:=513 ELSE CURCS:=257+BUFFER[FIRST]{:374}; FLUSHLIST(R);IF EQTB[CURCS].HH.B0=101 THEN BEGIN EQDEFINE(CURCS,0,256); END;CURTOK:=CURCS+4095;BACKINPUT;END{:372};108:CONVTOKS;109:INSTHETOKS; 105:CONDITIONAL;106:{510:} BEGIN IF EQTB[13225].INT>0 THEN IF EQTB[13204].INT<=1 THEN SHOWCURCMDCHR ; IF CURCHR>IFLIMIT THEN IF IFLIMIT=1 THEN INSERTRELAX ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(786);END;PRINTCMDCHR(106,CURCHR); BEGIN HELPPTR:=1;HELPLINE[0]:=787;END;ERROR; END ELSE BEGIN WHILE CURCHR<>2 DO PASSTEXT;{496:} BEGIN IF IFSTACK[INOPEN]=CONDPTR THEN IFWARNING;P:=CONDPTR; IFLINE:=MEM[P+1].INT;CURIF:=MEM[P].HH.B1;IFLIMIT:=MEM[P].HH.B0; CONDPTR:=MEM[P].HH.RH;FREENODE(P,2);END{:496};END;END{:510};104:{378:} IF CURCHR=1 THEN FORCEEOF:=TRUE{1482:} ELSE IF CURCHR=2 THEN PSEUDOSTART{:1482} ELSE IF NAMEINPROGRESS THEN INSERTRELAX ELSE STARTINPUT{:378}; OTHERWISE{370:}BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(628);END; BEGIN HELPPTR:=5;HELPLINE[4]:=629;HELPLINE[3]:=630;HELPLINE[2]:=631; HELPLINE[1]:=632;HELPLINE[0]:=633;END;ERROR;END{:370}END;END{:367} ELSE IF CURCMD<115 THEN MACROCALL ELSE{375:}BEGIN CURTOK:=14615; BACKINPUT;END{:375};CURVAL:=CVBACKUP;CURVALLEVEL:=CVLBACKUP; RADIX:=RADIXBACKUP;CURORDER:=COBACKUP;MEM[327131].HH.RH:=BACKUPBACKUP; END;{:366}{380:}PROCEDURE GETXTOKEN;LABEL 20,30;BEGIN 20:GETNEXT; IF CURCMD<=100 THEN GOTO 30; IF CURCMD>=111 THEN IF CURCMD<115 THEN MACROCALL ELSE BEGIN CURCS:=10520 ;CURCMD:=9;GOTO 30;END ELSE EXPAND;GOTO 20; 30:IF CURCS=0 THEN CURTOK:=(CURCMD*256)+CURCHR ELSE CURTOK:=4095+CURCS; END;{:380}{381:}PROCEDURE XTOKEN;BEGIN WHILE CURCMD>100 DO BEGIN EXPAND; GETNEXT;END; IF CURCS=0 THEN CURTOK:=(CURCMD*256)+CURCHR ELSE CURTOK:=4095+CURCS;END; {:381}{403:}PROCEDURE SCANLEFTBRACE;BEGIN{404:}REPEAT GETXTOKEN; UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; IF CURCMD<>1 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(666);END; BEGIN HELPPTR:=4;HELPLINE[3]:=667;HELPLINE[2]:=668;HELPLINE[1]:=669; HELPLINE[0]:=670;END;BACKERROR;CURTOK:=379;CURCMD:=1;CURCHR:=123; ALIGNSTATE:=ALIGNSTATE+1;END;END;{:403}{405:} PROCEDURE SCANOPTIONALEQUALS;BEGIN{406:}REPEAT GETXTOKEN; UNTIL CURCMD<>10{:406};IF CURTOK<>3133 THEN BACKINPUT;END;{:405}{407:} FUNCTION SCANKEYWORD(S:STRNUMBER):BOOLEAN;LABEL 10;VAR P:HALFWORD; Q:HALFWORD;K:POOLPOINTER;BEGIN P:=327131;MEM[P].HH.RH:=0;K:=STRSTART[S]; WHILE K10)OR(P<>327131)THEN BEGIN BACKINPUT; IF P<>327131 THEN BEGINTOKENLIST(MEM[327131].HH.RH,3); SCANKEYWORD:=FALSE;GOTO 10;END;END;FLUSHLIST(MEM[327131].HH.RH); SCANKEYWORD:=TRUE;10:END;{:407}{408:}PROCEDURE MUERROR; BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(671);END;BEGIN HELPPTR:=1; HELPLINE[0]:=672;END;ERROR;END;{:408}{409:}PROCEDURE SCANINT;FORWARD; {433:}PROCEDURE SCANEIGHTBITINT;BEGIN SCANINT; IF(CURVAL<0)OR(CURVAL>255)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(696);END;BEGIN HELPPTR:=2;HELPLINE[1]:=697;HELPLINE[0]:=698;END; INTERROR(CURVAL);CURVAL:=0;END;END;{:433}{434:}PROCEDURE SCANCHARNUM; BEGIN SCANINT; IF(CURVAL<0)OR(CURVAL>255)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(699);END;BEGIN HELPPTR:=2;HELPLINE[1]:=700;HELPLINE[0]:=698;END; INTERROR(CURVAL);CURVAL:=0;END;END;{:434}{435:}PROCEDURE SCANFOURBITINT; BEGIN SCANINT; IF(CURVAL<0)OR(CURVAL>15)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(701);END;BEGIN HELPPTR:=2;HELPLINE[1]:=702;HELPLINE[0]:=698;END; INTERROR(CURVAL);CURVAL:=0;END;END;{:435}{436:} PROCEDURE SCANFIFTEENBITINT;BEGIN SCANINT; IF(CURVAL<0)OR(CURVAL>32767)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(703);END;BEGIN HELPPTR:=2;HELPLINE[1]:=704;HELPLINE[0]:=698;END; INTERROR(CURVAL);CURVAL:=0;END;END;{:436}{437:} PROCEDURE SCANTWENTYSEVENBITINT;BEGIN SCANINT; IF(CURVAL<0)OR(CURVAL>134217727)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(705);END;BEGIN HELPPTR:=2;HELPLINE[1]:=706;HELPLINE[0]:=698;END; INTERROR(CURVAL);CURVAL:=0;END;END;{:437}{1544:} PROCEDURE SCANREGISTERNUM;BEGIN SCANINT; IF(CURVAL<0)OR(CURVAL>MAXREGNUM)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(696);END;BEGIN HELPPTR:=2;HELPLINE[1]:=MAXREGHELPLINE; HELPLINE[0]:=698;END;INTERROR(CURVAL);CURVAL:=0;END;END;{:1544}{1416:} PROCEDURE SCANGENERALTEXT;FORWARD;{:1416}{1444:}PROCEDURE REMOVEENDM; VAR P:HALFWORD;BEGIN P:=CURLIST.HEADFIELD; WHILE MEM[P].HH.RH<>CURLIST.TAILFIELD DO P:=MEM[P].HH.RH; IF NOT(P>=HIMEMMIN)THEN BEGIN LRTEMP:=CURLIST.TAILFIELD;MEM[P].HH.RH:=0; CURLIST.TAILFIELD:=P;END;END;{:1444}{1445:}PROCEDURE INSERTENDM; LABEL 30;VAR P:HALFWORD; BEGIN IF NOT(CURLIST.TAILFIELD>=HIMEMMIN)THEN IF(MEM[CURLIST.TAILFIELD]. HH.B0=9)AND(MEM[CURLIST.TAILFIELD].HH.B1=2)THEN BEGIN FREENODE(LRTEMP,2) ;P:=CURLIST.HEADFIELD; WHILE MEM[P].HH.RH<>CURLIST.TAILFIELD DO P:=MEM[P].HH.RH; FREENODE(CURLIST.TAILFIELD,2);MEM[P].HH.RH:=0;CURLIST.TAILFIELD:=P; GOTO 30;END;MEM[CURLIST.TAILFIELD].HH.RH:=LRTEMP; CURLIST.TAILFIELD:=LRTEMP;30:LRTEMP:=0;END;{:1445}{1505:} PROCEDURE GETXORPROTECTED;LABEL 10;BEGIN WHILE TRUE DO BEGIN GETTOKEN; IF CURCMD<=100 THEN GOTO 10; IF(CURCMD>=111)AND(CURCMD<115)THEN IF MEM[MEM[CURCHR].HH.RH].HH.LH=3585 THEN GOTO 10;EXPAND;END;10:END;{:1505}{1514:}PROCEDURE SCANEXPR;FORWARD; {:1514}{1519:}PROCEDURE SCANNORMALGLUE;FORWARD;PROCEDURE SCANMUGLUE; FORWARD;{:1519}{577:}PROCEDURE SCANFONTIDENT;VAR F:INTERNALFONTNUMBER; M:HALFWORD;BEGIN{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; IF CURCMD=88 THEN F:=EQTB[11839].HH.RH ELSE IF CURCMD=87 THEN F:=CURCHR ELSE IF CURCMD=86 THEN BEGIN M:=CURCHR;SCANFOURBITINT; F:=EQTB[M+CURVAL].HH.RH; END ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(824);END;BEGIN HELPPTR:=2; HELPLINE[1]:=825;HELPLINE[0]:=826;END;BACKERROR;F:=0;END;CURVAL:=F;END; {:577}{578:}PROCEDURE FINDFONTDIMEN(WRITING:BOOLEAN); VAR F:INTERNALFONTNUMBER;N:INTEGER;BEGIN SCANINT;N:=CURVAL; SCANFONTIDENT;F:=CURVAL; IF N<=0 THEN CURVAL:=FMEMPTR ELSE BEGIN IF WRITING AND(N<=4)AND(N>=2)AND (FONTGLUE[F]<>0)THEN BEGIN DELETEGLUEREF(FONTGLUE[F]);FONTGLUE[F]:=0; END;IF N>FONTPARAMS[F]THEN IF F5 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(673);END; BEGIN HELPPTR:=3;HELPLINE[2]:=674;HELPLINE[1]:=675;HELPLINE[0]:=676;END; BACKERROR;BEGIN CURVAL:=0;CURVALLEVEL:=1;END; END ELSE IF CURCMD<=72 THEN BEGIN IF CURCMD<72 THEN IF M=0 THEN BEGIN SCANREGISTERNUM; IF CURVAL<256 THEN CURVAL:=EQTB[11327+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT(5,CURVAL,FALSE); IF CURPTR=0 THEN CURVAL:=0 ELSE CURVAL:=MEM[CURPTR+1].HH.RH;END; END ELSE CURVAL:=MEM[M+1].HH.RH ELSE CURVAL:=EQTB[M].HH.RH; CURVALLEVEL:=5;END ELSE BEGIN BACKINPUT;SCANFONTIDENT; BEGIN CURVAL:=10524+CURVAL;CURVALLEVEL:=4;END;END{:415}; 73:BEGIN CURVAL:=EQTB[M].INT;CURVALLEVEL:=0;END; 74:BEGIN CURVAL:=EQTB[M].INT;CURVALLEVEL:=1;END; 75:BEGIN CURVAL:=EQTB[M].HH.RH;CURVALLEVEL:=2;END; 76:BEGIN CURVAL:=EQTB[M].HH.RH;CURVALLEVEL:=3;END;79:{418:} IF ABS(CURLIST.MODEFIELD)<>M THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(689);END;PRINTCMDCHR(79,M);BEGIN HELPPTR:=4;HELPLINE[3]:=690; HELPLINE[2]:=691;HELPLINE[1]:=692;HELPLINE[0]:=693;END;ERROR; IF LEVEL<>5 THEN BEGIN CURVAL:=0;CURVALLEVEL:=1; END ELSE BEGIN CURVAL:=0;CURVALLEVEL:=0;END; END ELSE IF M=1 THEN BEGIN CURVAL:=CURLIST.AUXFIELD.INT;CURVALLEVEL:=1; END ELSE BEGIN CURVAL:=CURLIST.AUXFIELD.HH.LH;CURVALLEVEL:=0;END{:418}; 80:{422:}IF CURLIST.MODEFIELD=0 THEN BEGIN CURVAL:=0;CURVALLEVEL:=0; END ELSE BEGIN NEST[NESTPTR]:=CURLIST;P:=NESTPTR; WHILE ABS(NEST[P].MODEFIELD)<>1 DO P:=P-1;BEGIN CURVAL:=NEST[P].PGFIELD; CURVALLEVEL:=0;END;END{:422};82:{419:} BEGIN IF M=0 THEN CURVAL:=DEADCYCLES{1428:} ELSE IF M=2 THEN CURVAL:=INTERACTION{:1428}ELSE CURVAL:=INSERTPENALTIES; CURVALLEVEL:=0;END{:419};81:{421:} BEGIN IF(PAGECONTENTS=0)AND(NOT OUTPUTACTIVE)THEN IF M=0 THEN CURVAL:= 1073741823 ELSE CURVAL:=0 ELSE CURVAL:=PAGESOFAR[M];CURVALLEVEL:=1; END{:421};84:{423:}BEGIN IF M>11312 THEN{1599:}BEGIN SCANINT; IF(EQTB[M].HH.RH=0)OR(CURVAL<0)THEN CURVAL:=0 ELSE BEGIN IF CURVAL>MEM[ EQTB[M].HH.RH+1].INT THEN CURVAL:=MEM[EQTB[M].HH.RH+1].INT; CURVAL:=MEM[EQTB[M].HH.RH+CURVAL+1].INT;END;END{:1599} ELSE IF EQTB[11312].HH.RH=0 THEN CURVAL:=0 ELSE CURVAL:=MEM[EQTB[11312]. HH.RH].HH.LH;CURVALLEVEL:=0;END{:423};83:{420:}BEGIN SCANREGISTERNUM; IF CURVAL<256 THEN Q:=EQTB[11583+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR=0 THEN Q:=0 ELSE Q:=MEM[CURPTR+1].HH.RH;END; IF Q=0 THEN CURVAL:=0 ELSE CURVAL:=MEM[Q+M].INT;CURVALLEVEL:=1;END{:420} ;68,69:BEGIN CURVAL:=CURCHR;CURVALLEVEL:=0;END;77:{425:} BEGIN FINDFONTDIMEN(FALSE);FONTINFO[FMEMPTR].INT:=0; BEGIN CURVAL:=FONTINFO[CURVAL].INT;CURVALLEVEL:=1;END;END{:425}; 78:{426:}BEGIN SCANFONTIDENT; IF M=0 THEN BEGIN CURVAL:=HYPHENCHAR[CURVAL];CURVALLEVEL:=0; END ELSE BEGIN CURVAL:=SKEWCHAR[CURVAL];CURVALLEVEL:=0;END;END{:426}; 89:{427:} BEGIN IF(M<0)OR(M>19)THEN BEGIN CURVALLEVEL:=(MEM[M].HH.B0 DIV 16); IF CURVALLEVEL<2 THEN CURVAL:=MEM[M+2].INT ELSE CURVAL:=MEM[M+1].HH.RH; END ELSE BEGIN SCANREGISTERNUM;CURVALLEVEL:=M-0; IF CURVAL>255 THEN BEGIN FINDSAELEMENT(CURVALLEVEL,CURVAL,FALSE); IF CURPTR=0 THEN IF CURVALLEVEL<2 THEN CURVAL:=0 ELSE CURVAL:=0 ELSE IF CURVALLEVEL<2 THEN CURVAL:=MEM[CURPTR+2].INT ELSE CURVAL:=MEM[CURPTR+1]. HH.RH;END ELSE CASE CURVALLEVEL OF 0:CURVAL:=EQTB[13233+CURVAL].INT; 1:CURVAL:=EQTB[13766+CURVAL].INT;2:CURVAL:=EQTB[10800+CURVAL].HH.RH; 3:CURVAL:=EQTB[11056+CURVAL].HH.RH;END;END;END{:427};70:{424:} IF M>3 THEN IF M>=23 THEN{1513:} BEGIN IF M<24 THEN BEGIN CASE M OF{1540:}23:SCANMUGLUE;{:1540}END; CURVALLEVEL:=2;END ELSE IF M<25 THEN BEGIN CASE M OF{1541:} 24:SCANNORMALGLUE;{:1541}END;CURVALLEVEL:=3; END ELSE BEGIN CURVALLEVEL:=M-25;SCANEXPR;END; WHILE CURVALLEVEL>LEVEL DO BEGIN IF CURVALLEVEL=2 THEN BEGIN M:=CURVAL; CURVAL:=MEM[M+1].INT;DELETEGLUEREF(M); END ELSE IF CURVALLEVEL=3 THEN MUERROR;CURVALLEVEL:=CURVALLEVEL-1;END; IF NEGATIVE THEN IF CURVALLEVEL>=2 THEN BEGIN M:=CURVAL; CURVAL:=NEWSPEC(M);DELETEGLUEREF(M);{431:} BEGIN MEM[CURVAL+1].INT:=-MEM[CURVAL+1].INT; MEM[CURVAL+2].INT:=-MEM[CURVAL+2].INT; MEM[CURVAL+3].INT:=-MEM[CURVAL+3].INT;END{:431}; END ELSE CURVAL:=-CURVAL;GOTO 10;END{:1513} ELSE IF M>=14 THEN BEGIN CASE M OF{1405:} 14,15,16,17:BEGIN SCANFONTIDENT;Q:=CURVAL;SCANCHARNUM; IF(FONTBC[Q]<=CURVAL)AND(FONTEC[Q]>=CURVAL)THEN BEGIN I:=FONTINFO[ CHARBASE[Q]+CURVAL].QQQQ; CASE M OF 14:CURVAL:=FONTINFO[WIDTHBASE[Q]+I.B0].INT; 15:CURVAL:=FONTINFO[HEIGHTBASE[Q]+(I.B1)DIV 16].INT; 16:CURVAL:=FONTINFO[DEPTHBASE[Q]+(I.B1)MOD 16].INT; 17:CURVAL:=FONTINFO[ITALICBASE[Q]+(I.B2)DIV 4].INT;END; END ELSE CURVAL:=0;END;{:1405}{1408:}18,19,20:BEGIN Q:=CURCHR-18; SCANINT; IF(EQTB[11312].HH.RH=0)OR(CURVAL<=0)THEN CURVAL:=0 ELSE BEGIN IF Q=2 THEN BEGIN Q:=CURVAL MOD 2;CURVAL:=(CURVAL+Q)DIV 2;END; IF CURVAL>MEM[EQTB[11312].HH.RH].HH.LH THEN CURVAL:=MEM[EQTB[11312].HH. RH].HH.LH;CURVAL:=MEM[EQTB[11312].HH.RH+2*CURVAL-Q].INT;END; CURVALLEVEL:=1;END;{:1408}{1537:}21,22:BEGIN SCANNORMALGLUE;Q:=CURVAL; IF M=21 THEN CURVAL:=MEM[Q+2].INT ELSE CURVAL:=MEM[Q+3].INT; DELETEGLUEREF(Q);END;{:1537}END;CURVALLEVEL:=1; END ELSE BEGIN CASE M OF 4:CURVAL:=LINE;5:CURVAL:=LASTBADNESS;{1382:} 6:CURVAL:=2;{:1382}{1399:}7:CURVAL:=CURLEVEL-1;8:CURVAL:=CURGROUP; {:1399}{1402:}9:BEGIN Q:=CONDPTR;CURVAL:=0; WHILE Q<>0 DO BEGIN CURVAL:=CURVAL+1;Q:=MEM[Q].HH.RH;END;END; 10:IF CONDPTR=0 THEN CURVAL:=0 ELSE IF CURIF<32 THEN CURVAL:=CURIF+1 ELSE CURVAL:=-(CURIF-31); 11:IF(IFLIMIT=4)OR(IFLIMIT=3)THEN CURVAL:=1 ELSE IF IFLIMIT=2 THEN CURVAL:=-1 ELSE CURVAL:=0;{:1402}{1536:}12,13:BEGIN SCANNORMALGLUE; Q:=CURVAL;IF M=12 THEN CURVAL:=MEM[Q].HH.B0 ELSE CURVAL:=MEM[Q].HH.B1; DELETEGLUEREF(Q);END;{:1536}END;CURVALLEVEL:=0; END ELSE BEGIN IF CURCHR=2 THEN CURVAL:=0 ELSE CURVAL:=0; IF CURCHR=3 THEN BEGIN CURVAL:=0; IF(CURLIST.TAILFIELD=CURLIST.HEADFIELD)OR(CURLIST.MODEFIELD=0)THEN CURVAL:=-1;END ELSE CURVALLEVEL:=CURCHR; IF NOT(CURLIST.TAILFIELD>=HIMEMMIN)AND(CURLIST.MODEFIELD<>0)THEN BEGIN IF(MEM[CURLIST.TAILFIELD].HH.B0=9)AND(MEM[CURLIST.TAILFIELD].HH.B1=3) THEN REMOVEENDM; CASE CURCHR OF 0:IF MEM[CURLIST.TAILFIELD].HH.B0=12 THEN CURVAL:=MEM[ CURLIST.TAILFIELD+1].INT; 1:IF MEM[CURLIST.TAILFIELD].HH.B0=11 THEN CURVAL:=MEM[CURLIST.TAILFIELD +1].INT; 2:IF MEM[CURLIST.TAILFIELD].HH.B0=10 THEN BEGIN CURVAL:=MEM[CURLIST. TAILFIELD+1].HH.LH; IF MEM[CURLIST.TAILFIELD].HH.B1=99 THEN CURVALLEVEL:=3;END; 3:IF(MEM[CURLIST.TAILFIELD].HH.B0<>9)OR(MEM[CURLIST.TAILFIELD].HH.B1<>3) THEN IF MEM[CURLIST.TAILFIELD].HH.B0<=13 THEN CURVAL:=MEM[CURLIST. TAILFIELD].HH.B0+1 ELSE CURVAL:=15;END;IF LRTEMP<>0 THEN INSERTENDM; END ELSE IF(CURLIST.MODEFIELD=1)AND(CURLIST.TAILFIELD=CURLIST.HEADFIELD) THEN CASE CURCHR OF 0:CURVAL:=LASTPENALTY;1:CURVAL:=LASTKERN; 2:IF LASTGLUE<>327145 THEN CURVAL:=LASTGLUE;3:CURVAL:=LASTNODETYPE;END; END{:424};OTHERWISE{428:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(694);END; PRINTCMDCHR(CURCMD,CURCHR);PRINT(695);PRINTESC(541);BEGIN HELPPTR:=1; HELPLINE[0]:=693;END;ERROR;IF LEVEL<>5 THEN BEGIN CURVAL:=0; CURVALLEVEL:=1;END ELSE BEGIN CURVAL:=0;CURVALLEVEL:=0;END;END{:428}END; WHILE CURVALLEVEL>LEVEL DO{429:} BEGIN IF CURVALLEVEL=2 THEN CURVAL:=MEM[CURVAL+1].INT ELSE IF CURVALLEVEL=3 THEN MUERROR;CURVALLEVEL:=CURVALLEVEL-1;END{:429};{430:} IF NEGATIVE THEN IF CURVALLEVEL>=2 THEN BEGIN CURVAL:=NEWSPEC(CURVAL); {431:}BEGIN MEM[CURVAL+1].INT:=-MEM[CURVAL+1].INT; MEM[CURVAL+2].INT:=-MEM[CURVAL+2].INT; MEM[CURVAL+3].INT:=-MEM[CURVAL+3].INT;END{:431}; END ELSE CURVAL:=-CURVAL ELSE IF(CURVALLEVEL>=2)AND(CURVALLEVEL<=3)THEN MEM[CURVAL].HH.RH:=MEM[CURVAL].HH.RH+1{:430};10:END;{:413}{440:} PROCEDURE SCANINT;LABEL 30;VAR NEGATIVE:BOOLEAN;M:INTEGER;D:SMALLNUMBER; VACUOUS:BOOLEAN;OKSOFAR:BOOLEAN;BEGIN RADIX:=0;OKSOFAR:=TRUE;{441:} NEGATIVE:=FALSE;REPEAT{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; IF CURTOK=3117 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURTOK:=3115;END; UNTIL CURTOK<>3115{:441};IF CURTOK=3168 THEN{442:}BEGIN GETTOKEN; IF CURTOK<4095 THEN BEGIN CURVAL:=CURCHR; IF CURCMD<=2 THEN IF CURCMD=2 THEN ALIGNSTATE:=ALIGNSTATE+1 ELSE ALIGNSTATE:=ALIGNSTATE-1; END ELSE IF CURTOK<4352 THEN CURVAL:=CURTOK-4096 ELSE CURVAL:=CURTOK -4352; IF CURVAL>255 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(707);END; BEGIN HELPPTR:=2;HELPLINE[1]:=708;HELPLINE[0]:=709;END;CURVAL:=48; BACKERROR;END ELSE{443:}BEGIN GETXTOKEN;IF CURCMD<>10 THEN BACKINPUT; END{:443};END{:442} ELSE IF(CURCMD>=68)AND(CURCMD<=89)THEN SCANSOMETHINGINTERNAL(0,FALSE) ELSE{444:}BEGIN RADIX:=10;M:=214748364; IF CURTOK=3111 THEN BEGIN RADIX:=8;M:=268435456;GETXTOKEN; END ELSE IF CURTOK=3106 THEN BEGIN RADIX:=16;M:=134217728;GETXTOKEN;END; VACUOUS:=TRUE;CURVAL:=0;{445:} WHILE TRUE DO BEGIN IF(CURTOK<3120+RADIX)AND(CURTOK>=3120)AND(CURTOK<= 3129)THEN D:=CURTOK-3120 ELSE IF RADIX=16 THEN IF(CURTOK<=2886)AND( CURTOK>=2881)THEN D:=CURTOK-2871 ELSE IF(CURTOK<=3142)AND(CURTOK>=3137) THEN D:=CURTOK-3127 ELSE GOTO 30 ELSE GOTO 30;VACUOUS:=FALSE; IF(CURVAL>=M)AND((CURVAL>M)OR(D>7)OR(RADIX<>10))THEN BEGIN IF OKSOFAR THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(710);END;BEGIN HELPPTR:=2; HELPLINE[1]:=711;HELPLINE[0]:=712;END;ERROR;CURVAL:=2147483647; OKSOFAR:=FALSE;END;END ELSE CURVAL:=CURVAL*RADIX+D;GETXTOKEN;END; 30:{:445};IF VACUOUS THEN{446:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(673);END;BEGIN HELPPTR:=3; HELPLINE[2]:=674;HELPLINE[1]:=675;HELPLINE[0]:=676;END;BACKERROR; END{:446}ELSE IF CURCMD<>10 THEN BACKINPUT;END{:444}; IF NEGATIVE THEN CURVAL:=-CURVAL;END;{:440}{448:} PROCEDURE SCANDIMEN(MU,INF,SHORTCUT:BOOLEAN);LABEL 30,31,32,40,45,88,89; VAR NEGATIVE:BOOLEAN;F:INTEGER;{450:}NUM,DENOM:1..65536; K,KK:SMALLNUMBER;P,Q:HALFWORD;V:SCALED;SAVECURVAL:INTEGER;{:450} BEGIN F:=0;ARITHERROR:=FALSE;CURORDER:=0;NEGATIVE:=FALSE; IF NOT SHORTCUT THEN BEGIN{441:}NEGATIVE:=FALSE;REPEAT{406:} REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; IF CURTOK=3117 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURTOK:=3115;END; UNTIL CURTOK<>3115{:441};IF(CURCMD>=68)AND(CURCMD<=89)THEN{449:} IF MU THEN BEGIN SCANSOMETHINGINTERNAL(3,FALSE);{451:} IF CURVALLEVEL>=2 THEN BEGIN V:=MEM[CURVAL+1].INT;DELETEGLUEREF(CURVAL); CURVAL:=V;END{:451};IF CURVALLEVEL=3 THEN GOTO 89; IF CURVALLEVEL<>0 THEN MUERROR; END ELSE BEGIN SCANSOMETHINGINTERNAL(1,FALSE); IF CURVALLEVEL=1 THEN GOTO 89;END{:449}ELSE BEGIN BACKINPUT; IF CURTOK=3116 THEN CURTOK:=3118; IF CURTOK<>3118 THEN SCANINT ELSE BEGIN RADIX:=10;CURVAL:=0;END; IF CURTOK=3116 THEN CURTOK:=3118;IF(RADIX=10)AND(CURTOK=3118)THEN{452:} BEGIN K:=0;P:=0;GETTOKEN;WHILE TRUE DO BEGIN GETXTOKEN; IF(CURTOK>3129)OR(CURTOK<3120)THEN GOTO 31; IF K<17 THEN BEGIN Q:=GETAVAIL;MEM[Q].HH.RH:=P; MEM[Q].HH.LH:=CURTOK-3120;P:=Q;K:=K+1;END;END; 31:FOR KK:=K DOWNTO 1 DO BEGIN DIG[KK-1]:=MEM[P].HH.LH;Q:=P; P:=MEM[P].HH.RH;BEGIN MEM[Q].HH.RH:=AVAIL;AVAIL:=Q;DYNUSED:=DYNUSED-1; END;END;F:=ROUNDDECIMALS(K);IF CURCMD<>10 THEN BACKINPUT;END{:452};END; END;IF CURVAL<0 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURVAL:=-CURVAL;END; {453:}IF INF THEN{454:}IF SCANKEYWORD(312)THEN BEGIN CURORDER:=1; WHILE SCANKEYWORD(108)DO BEGIN IF CURORDER=3 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(714);END;PRINT(715);BEGIN HELPPTR:=1; HELPLINE[0]:=716;END;ERROR;END ELSE CURORDER:=CURORDER+1;END;GOTO 88; END{:454};{455:}SAVECURVAL:=CURVAL;{406:}REPEAT GETXTOKEN; UNTIL CURCMD<>10{:406}; IF(CURCMD<68)OR(CURCMD>89)THEN BACKINPUT ELSE BEGIN IF MU THEN BEGIN SCANSOMETHINGINTERNAL(3,FALSE);{451:} IF CURVALLEVEL>=2 THEN BEGIN V:=MEM[CURVAL+1].INT;DELETEGLUEREF(CURVAL); CURVAL:=V;END{:451};IF CURVALLEVEL<>3 THEN MUERROR; END ELSE SCANSOMETHINGINTERNAL(1,FALSE);V:=CURVAL;GOTO 40;END; IF MU THEN GOTO 45;IF SCANKEYWORD(717)THEN V:=({558:} FONTINFO[6+PARAMBASE[EQTB[11839].HH.RH]].INT{:558} )ELSE IF SCANKEYWORD(718)THEN V:=({559:} FONTINFO[5+PARAMBASE[EQTB[11839].HH.RH]].INT{:559})ELSE GOTO 45;{443:} BEGIN GETXTOKEN;IF CURCMD<>10 THEN BACKINPUT;END{:443}; 40:CURVAL:=MULTANDADD(SAVECURVAL,V,XNOVERD(V,F,65536),1073741823); GOTO 89;45:{:455};IF MU THEN{456:} IF SCANKEYWORD(338)THEN GOTO 88 ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(714);END;PRINT(719);BEGIN HELPPTR:=4;HELPLINE[3]:=720; HELPLINE[2]:=721;HELPLINE[1]:=722;HELPLINE[0]:=723;END;ERROR;GOTO 88; END{:456};IF SCANKEYWORD(713)THEN{457:}BEGIN PREPAREMAG; IF EQTB[13185].INT<>1000 THEN BEGIN CURVAL:=XNOVERD(CURVAL,1000,EQTB[ 13185].INT);F:=(1000*F+65536*REMAINDER)DIV EQTB[13185].INT; CURVAL:=CURVAL+(F DIV 65536);F:=F MOD 65536;END;END{:457}; IF SCANKEYWORD(400)THEN GOTO 88;{458:} IF SCANKEYWORD(724)THEN BEGIN NUM:=7227;DENOM:=100; END ELSE IF SCANKEYWORD(725)THEN BEGIN NUM:=12;DENOM:=1; END ELSE IF SCANKEYWORD(726)THEN BEGIN NUM:=7227;DENOM:=254; END ELSE IF SCANKEYWORD(727)THEN BEGIN NUM:=7227;DENOM:=2540; END ELSE IF SCANKEYWORD(728)THEN BEGIN NUM:=7227;DENOM:=7200; END ELSE IF SCANKEYWORD(729)THEN BEGIN NUM:=1238;DENOM:=1157; END ELSE IF SCANKEYWORD(730)THEN BEGIN NUM:=14856;DENOM:=1157; END ELSE IF SCANKEYWORD(731)THEN GOTO 30 ELSE{459:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(714);END;PRINT(732); BEGIN HELPPTR:=6;HELPLINE[5]:=733;HELPLINE[4]:=734;HELPLINE[3]:=735; HELPLINE[2]:=721;HELPLINE[1]:=722;HELPLINE[0]:=723;END;ERROR;GOTO 32; END{:459};CURVAL:=XNOVERD(CURVAL,NUM,DENOM); F:=(NUM*F+65536*REMAINDER)DIV DENOM;CURVAL:=CURVAL+(F DIV 65536); F:=F MOD 65536;32:{:458}; 88:IF CURVAL>=16384 THEN ARITHERROR:=TRUE ELSE CURVAL:=CURVAL*65536+F; 30:{:453};{443:}BEGIN GETXTOKEN;IF CURCMD<>10 THEN BACKINPUT;END{:443}; 89:IF ARITHERROR OR(ABS(CURVAL)>=1073741824)THEN{460:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(736);END;BEGIN HELPPTR:=2; HELPLINE[1]:=737;HELPLINE[0]:=738;END;ERROR;CURVAL:=1073741823; ARITHERROR:=FALSE;END{:460};IF NEGATIVE THEN CURVAL:=-CURVAL;END;{:448} {461:}PROCEDURE SCANGLUE(LEVEL:SMALLNUMBER);LABEL 10; VAR NEGATIVE:BOOLEAN;Q:HALFWORD;MU:BOOLEAN;BEGIN MU:=(LEVEL=3);{441:} NEGATIVE:=FALSE;REPEAT{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; IF CURTOK=3117 THEN BEGIN NEGATIVE:=NOT NEGATIVE;CURTOK:=3115;END; UNTIL CURTOK<>3115{:441}; IF(CURCMD>=68)AND(CURCMD<=89)THEN BEGIN SCANSOMETHINGINTERNAL(LEVEL, NEGATIVE); IF CURVALLEVEL>=2 THEN BEGIN IF CURVALLEVEL<>LEVEL THEN MUERROR;GOTO 10; END;IF CURVALLEVEL=0 THEN SCANDIMEN(MU,FALSE,TRUE)ELSE IF LEVEL=3 THEN MUERROR;END ELSE BEGIN BACKINPUT;SCANDIMEN(MU,FALSE,FALSE); IF NEGATIVE THEN CURVAL:=-CURVAL;END;{462:}Q:=NEWSPEC(0); MEM[Q+1].INT:=CURVAL; IF SCANKEYWORD(739)THEN BEGIN SCANDIMEN(MU,TRUE,FALSE); MEM[Q+2].INT:=CURVAL;MEM[Q].HH.B0:=CURORDER;END; IF SCANKEYWORD(740)THEN BEGIN SCANDIMEN(MU,TRUE,FALSE); MEM[Q+3].INT:=CURVAL;MEM[Q].HH.B1:=CURORDER;END;CURVAL:=Q{:462};10:END; {1515:}{1526:}FUNCTION ADDORSUB(X,Y,MAXANSWER:INTEGER; NEGATIVE:BOOLEAN):INTEGER;VAR A:INTEGER;BEGIN IF NEGATIVE THEN Y:=-Y; IF X>=0 THEN IF Y<=MAXANSWER-X THEN A:=X+Y ELSE BEGIN ARITHERROR:=TRUE; A:=0; END ELSE IF Y>=-MAXANSWER-X THEN A:=X+Y ELSE BEGIN ARITHERROR:=TRUE; A:=0;END;ADDORSUB:=A;END;{:1526}{1530:} FUNCTION QUOTIENT(N,D:INTEGER):INTEGER;VAR NEGATIVE:BOOLEAN;A:INTEGER; BEGIN IF D=0 THEN BEGIN ARITHERROR:=TRUE;A:=0; END ELSE BEGIN IF D>0 THEN NEGATIVE:=FALSE ELSE BEGIN D:=-D; NEGATIVE:=TRUE;END;IF N<0 THEN BEGIN N:=-N;NEGATIVE:=NOT NEGATIVE;END; A:=N DIV D;N:=N-A*D;D:=N-D;IF D+N>=0 THEN A:=A+1;IF NEGATIVE THEN A:=-A; END;QUOTIENT:=A;END;{:1530}{1532:} FUNCTION FRACT(X,N,D,MAXANSWER:INTEGER):INTEGER;LABEL 40,41,88,30; VAR NEGATIVE:BOOLEAN;A:INTEGER;F:INTEGER;H:INTEGER;R:INTEGER;T:INTEGER; BEGIN IF D=0 THEN GOTO 88;A:=0; IF D>0 THEN NEGATIVE:=FALSE ELSE BEGIN D:=-D;NEGATIVE:=TRUE;END; IF X<0 THEN BEGIN X:=-X;NEGATIVE:=NOT NEGATIVE; END ELSE IF X=0 THEN GOTO 30;IF N<0 THEN BEGIN N:=-N; NEGATIVE:=NOT NEGATIVE;END;T:=N DIV D;IF T>MAXANSWER DIV X THEN GOTO 88; A:=T*X;N:=N-T*D;IF N=0 THEN GOTO 40;T:=X DIV D; IF T>(MAXANSWER-A)DIV N THEN GOTO 88;A:=A+T*N;X:=X-T*D; IF X=0 THEN GOTO 40;IF X=0 THEN BEGIN R:=R-D;F:=F+1;END;END;N:=N DIV 2;IF N=0 THEN GOTO 41; IF X(MAXANSWER-A)THEN GOTO 88;A:=A+F; 40:IF NEGATIVE THEN A:=-A;GOTO 30;88:BEGIN ARITHERROR:=TRUE;A:=0;END; 30:FRACT:=A;END;{:1532}PROCEDURE SCANEXPR;LABEL 20,22,40; VAR A,B:BOOLEAN;L:SMALLNUMBER;R:SMALLNUMBER;S:SMALLNUMBER;O:SMALLNUMBER; E:INTEGER;T:INTEGER;F:INTEGER;N:INTEGER;P:HALFWORD;Q:HALFWORD; BEGIN L:=CURVALLEVEL;A:=ARITHERROR;B:=FALSE;P:=0;{1516:}20:R:=0;E:=0; S:=0;T:=0;N:=0;22:IF S=0 THEN O:=L ELSE O:=0;{1518:}{406:} REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406};IF CURTOK=3112 THEN{1521:} BEGIN Q:=GETNODE(4);MEM[Q].HH.RH:=P;MEM[Q].HH.B0:=L;MEM[Q].HH.B1:=4*S+R; MEM[Q+1].INT:=E;MEM[Q+2].INT:=T;MEM[Q+3].INT:=N;P:=Q;L:=O;GOTO 20; END{:1521};BACKINPUT; IF O=0 THEN SCANINT ELSE IF O=1 THEN SCANDIMEN(FALSE,FALSE,FALSE)ELSE IF O=2 THEN SCANNORMALGLUE ELSE SCANMUGLUE;F:=CURVAL{:1518};40:{1517:} {406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; IF CURTOK=3115 THEN O:=1 ELSE IF CURTOK=3117 THEN O:=2 ELSE IF CURTOK= 3114 THEN O:=3 ELSE IF CURTOK=3119 THEN O:=4 ELSE BEGIN O:=0; IF P=0 THEN BEGIN IF CURCMD<>0 THEN BACKINPUT; END ELSE IF CURTOK<>3113 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1392);END;BEGIN HELPPTR:=1;HELPLINE[0]:=1393;END;BACKERROR;END; END{:1517};ARITHERROR:=B;{1523:} IF(L=0)OR(S>2)THEN BEGIN IF(F>2147483647)OR(F<-2147483647)THEN BEGIN ARITHERROR:=TRUE;F:=0;END; END ELSE IF L=1 THEN BEGIN IF ABS(F)>1073741823 THEN BEGIN ARITHERROR:= TRUE;F:=0;END; END ELSE BEGIN IF(ABS(MEM[F+1].INT)>1073741823)OR(ABS(MEM[F+2].INT)> 1073741823)OR(ABS(MEM[F+3].INT)>1073741823)THEN BEGIN ARITHERROR:=TRUE; DELETEGLUEREF(F);F:=NEWSPEC(0);END;END{:1523};CASE S OF{1524:} 0:IF(L>=2)AND(O<>0)THEN BEGIN T:=NEWSPEC(F);DELETEGLUEREF(F); IF MEM[T+2].INT=0 THEN MEM[T].HH.B0:=0; IF MEM[T+3].INT=0 THEN MEM[T].HH.B1:=0;END ELSE T:=F;{:1524}{1528:} 3:IF O=4 THEN BEGIN N:=F;O:=5; END ELSE IF L=0 THEN T:=MULTANDADD(T,F,0,2147483647)ELSE IF L=1 THEN T:= MULTANDADD(T,F,0,1073741823)ELSE BEGIN MEM[T+1].INT:=MULTANDADD(MEM[T+1] .INT,F,0,1073741823); MEM[T+2].INT:=MULTANDADD(MEM[T+2].INT,F,0,1073741823); MEM[T+3].INT:=MULTANDADD(MEM[T+3].INT,F,0,1073741823);END;{:1528}{1529:} 4:IF L<2 THEN T:=QUOTIENT(T,F)ELSE BEGIN MEM[T+1].INT:=QUOTIENT(MEM[T+1] .INT,F);MEM[T+2].INT:=QUOTIENT(MEM[T+2].INT,F); MEM[T+3].INT:=QUOTIENT(MEM[T+3].INT,F);END;{:1529}{1531:} 5:IF L=0 THEN T:=FRACT(T,N,F,2147483647)ELSE IF L=1 THEN T:=FRACT(T,N,F, 1073741823)ELSE BEGIN MEM[T+1].INT:=FRACT(MEM[T+1].INT,N,F,1073741823); MEM[T+2].INT:=FRACT(MEM[T+2].INT,N,F,1073741823); MEM[T+3].INT:=FRACT(MEM[T+3].INT,N,F,1073741823);END;{:1531}END; IF O>2 THEN S:=O ELSE{1525:}BEGIN S:=0; IF R=0 THEN E:=T ELSE IF L=0 THEN E:=ADDORSUB(E,T,2147483647,R=2)ELSE IF L=1 THEN E:=ADDORSUB(E,T,1073741823,R=2)ELSE{1527:} BEGIN MEM[E+1].INT:=ADDORSUB(MEM[E+1].INT,MEM[T+1].INT,1073741823,R=2); IF MEM[E].HH.B0=MEM[T].HH.B0 THEN MEM[E+2].INT:=ADDORSUB(MEM[E+2].INT, MEM[T+2].INT,1073741823,R=2)ELSE IF(MEM[E].HH.B00)THEN BEGIN MEM[E+2].INT:=MEM[T+2].INT; MEM[E].HH.B0:=MEM[T].HH.B0;END; IF MEM[E].HH.B1=MEM[T].HH.B1 THEN MEM[E+3].INT:=ADDORSUB(MEM[E+3].INT, MEM[T+3].INT,1073741823,R=2)ELSE IF(MEM[E].HH.B10)THEN BEGIN MEM[E+3].INT:=MEM[T+3].INT; MEM[E].HH.B1:=MEM[T].HH.B1;END;DELETEGLUEREF(T); IF MEM[E+2].INT=0 THEN MEM[E].HH.B0:=0; IF MEM[E+3].INT=0 THEN MEM[E].HH.B1:=0;END{:1527};R:=O;END{:1525}; B:=ARITHERROR;IF O<>0 THEN GOTO 22;IF P<>0 THEN{1522:}BEGIN F:=E;Q:=P; E:=MEM[Q+1].INT;T:=MEM[Q+2].INT;N:=MEM[Q+3].INT;S:=MEM[Q].HH.B1 DIV 4; R:=MEM[Q].HH.B1 MOD 4;L:=MEM[Q].HH.B0;P:=MEM[Q].HH.RH;FREENODE(Q,4); GOTO 40;END{:1522}{:1516}; IF B THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1216);END;BEGIN HELPPTR:=2; HELPLINE[1]:=1391;HELPLINE[0]:=1218;END;ERROR; IF L>=2 THEN BEGIN DELETEGLUEREF(E);E:=0;MEM[E].HH.RH:=MEM[E].HH.RH+1; END ELSE E:=0;END;ARITHERROR:=A;CURVAL:=E;CURVALLEVEL:=L;END;{:1515} {1520:}PROCEDURE SCANNORMALGLUE;BEGIN SCANGLUE(2);END; PROCEDURE SCANMUGLUE;BEGIN SCANGLUE(3);END;{:1520}{:461}{463:} FUNCTION SCANRULESPEC:HALFWORD;LABEL 21;VAR Q:HALFWORD;BEGIN Q:=NEWRULE; IF CURCMD=35 THEN MEM[Q+1].INT:=26214 ELSE BEGIN MEM[Q+3].INT:=26214; MEM[Q+2].INT:=0;END; 21:IF SCANKEYWORD(741)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE); MEM[Q+1].INT:=CURVAL;GOTO 21;END; IF SCANKEYWORD(742)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE); MEM[Q+3].INT:=CURVAL;GOTO 21;END; IF SCANKEYWORD(743)THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE); MEM[Q+2].INT:=CURVAL;GOTO 21;END;SCANRULESPEC:=Q;END;{:463}{464:}{1417:} PROCEDURE SCANGENERALTEXT;LABEL 40;VAR S:0..5;W:HALFWORD;D:HALFWORD; P:HALFWORD;Q:HALFWORD;UNBALANCE:HALFWORD;BEGIN S:=SCANNERSTATUS; W:=WARNINGINDEX;D:=DEFREF;SCANNERSTATUS:=5;WARNINGINDEX:=CURCS; DEFREF:=GETAVAIL;MEM[DEFREF].HH.LH:=0;P:=DEFREF;SCANLEFTBRACE; UNBALANCE:=1;WHILE TRUE DO BEGIN GETTOKEN; IF CURTOK<768 THEN IF CURCMD<2 THEN UNBALANCE:=UNBALANCE+1 ELSE BEGIN UNBALANCE:=UNBALANCE-1;IF UNBALANCE=0 THEN GOTO 40;END; BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END;END; 40:Q:=MEM[DEFREF].HH.RH;BEGIN MEM[DEFREF].HH.RH:=AVAIL;AVAIL:=DEFREF; DYNUSED:=DYNUSED-1;END;IF Q=0 THEN CURVAL:=327141 ELSE CURVAL:=P; MEM[327141].HH.RH:=Q;SCANNERSTATUS:=S;WARNINGINDEX:=W;DEFREF:=D;END; {:1417}{1486:}PROCEDURE PSEUDOSTART;VAR OLDSETTING:0..22;S:STRNUMBER; L,M:POOLPOINTER;P,Q,R:HALFWORD;W:FOURQUARTERS;NL,SZ:INTEGER; BEGIN SCANGENERALTEXT;OLDSETTING:=SELECTOR;SELECTOR:=21; TOKENSHOW(327141);SELECTOR:=OLDSETTING;FLUSHLIST(MEM[327141].HH.RH); BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR);END; S:=MAKESTRING;{1487:}STRPOOL[POOLPTR]:=32;L:=STRSTART[S]; NL:=EQTB[13217].INT;P:=GETAVAIL;Q:=P;WHILE LNL)DO L:=L+1;SZ:=(L-M+7)DIV 4; IF SZ=1 THEN SZ:=2;R:=GETNODE(SZ);MEM[Q].HH.RH:=R;Q:=R;MEM[Q].HH.LH:=SZ; WHILE SZ>2 DO BEGIN SZ:=SZ-1;R:=R+1;W.B0:=STRPOOL[M];W.B1:=STRPOOL[M+1]; W.B2:=STRPOOL[M+2];W.B3:=STRPOOL[M+3];MEM[R].QQQQ:=W;M:=M+4;END; W.B0:=32;W.B1:=32;W.B2:=32;W.B3:=32;IF L>M THEN BEGIN W.B0:=STRPOOL[M]; IF L>M+1 THEN BEGIN W.B1:=STRPOOL[M+1]; IF L>M+2 THEN BEGIN W.B2:=STRPOOL[M+2];IF L>M+3 THEN W.B3:=STRPOOL[M+3]; END;END;END;MEM[R+1].QQQQ:=W;IF STRPOOL[L]=NL THEN L:=L+1;END; MEM[P].HH.LH:=MEM[P].HH.RH;MEM[P].HH.RH:=PSEUDOFILES; PSEUDOFILES:=P{:1487};BEGIN STRPTR:=STRPTR-1;POOLPTR:=STRSTART[STRPTR]; END;{1488:}BEGINFILEREADING;LINE:=0; CURINPUT.LIMITFIELD:=CURINPUT.STARTFIELD; CURINPUT.LOCFIELD:=CURINPUT.LIMITFIELD+1; IF EQTB[13226].INT>0 THEN BEGIN IF TERMOFFSET>MAXPRINTLINE-3 THEN PRINTLN ELSE IF(TERMOFFSET>0)OR(FILEOFFSET>0)THEN PRINTCHAR(32); CURINPUT.NAMEFIELD:=19;PRINT(1377);OPENPARENS:=OPENPARENS+1; IF ODD(SELECTOR)THEN WRITELN(TERMOUT); END ELSE CURINPUT.NAMEFIELD:=18{:1488};END;{:1486} FUNCTION STRTOKS(B:POOLPOINTER):HALFWORD;VAR P:HALFWORD;Q:HALFWORD; T:HALFWORD;K:POOLPOINTER; BEGIN BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR );END;P:=327141;MEM[P].HH.RH:=0;K:=B; WHILE K=4 THEN{466:}BEGIN P:=327141;MEM[P].HH.RH:=0; IF CURVALLEVEL=4 THEN BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[Q].HH.LH:=4095+CURVAL;P:=Q; END ELSE IF CURVAL<>0 THEN BEGIN R:=MEM[CURVAL].HH.RH; WHILE R<>0 DO BEGIN BEGIN BEGIN Q:=AVAIL; IF Q=0 THEN Q:=GETAVAIL ELSE BEGIN AVAIL:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0; DYNUSED:=DYNUSED+1;END;END;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=MEM[R].HH.LH; P:=Q;END;R:=MEM[R].HH.RH;END;END;THETOKS:=P;END{:466} ELSE BEGIN OLDSETTING:=SELECTOR;SELECTOR:=21;B:=POOLPTR; CASE CURVALLEVEL OF 0:PRINTINT(CURVAL);1:BEGIN PRINTSCALED(CURVAL); PRINT(400);END;2:BEGIN PRINTSPEC(CURVAL,400);DELETEGLUEREF(CURVAL);END; 3:BEGIN PRINTSPEC(CURVAL,338);DELETEGLUEREF(CURVAL);END;END; SELECTOR:=OLDSETTING;THETOKS:=STRTOKS(B);END;10:END;{:465}{467:} PROCEDURE INSTHETOKS;BEGIN MEM[327132].HH.RH:=THETOKS; BEGINTOKENLIST(MEM[327141].HH.RH,4);END;{:467}{470:}PROCEDURE CONVTOKS; VAR OLDSETTING:0..22;C:SMALLNUMBER;SAVESCANNERSTATUS:SMALLNUMBER; B:POOLPOINTER;BEGIN C:=CURCHR;{471:}CASE C OF 0,1:SCANINT; 2,3:BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS;SCANNERSTATUS:=0;GETTOKEN; SCANNERSTATUS:=SAVESCANNERSTATUS;END;4:SCANFONTIDENT; 5:IF JOBNAME=0 THEN OPENLOGFILE;{1384:}6:;{:1384}END{:471}; OLDSETTING:=SELECTOR;SELECTOR:=21;B:=POOLPTR;{472:} CASE C OF 0:PRINTINT(CURVAL);1:PRINTROMANINT(CURVAL); 2:IF CURCS<>0 THEN SPRINTCS(CURCS)ELSE PRINTCHAR(CURCHR);3:PRINTMEANING; 4:BEGIN PRINT(FONTNAME[CURVAL]); IF FONTSIZE[CURVAL]<>FONTDSIZE[CURVAL]THEN BEGIN PRINT(750); PRINTSCALED(FONTSIZE[CURVAL]);PRINT(400);END;END;5:PRINT(JOBNAME); {1385:}6:PRINT(256);{:1385}END{:472};SELECTOR:=OLDSETTING; MEM[327132].HH.RH:=STRTOKS(B);BEGINTOKENLIST(MEM[327141].HH.RH,4);END; {:470}{473:}FUNCTION SCANTOKS(MACRODEF,XPAND:BOOLEAN):HALFWORD; LABEL 40,30,31,32;VAR T:HALFWORD;S:HALFWORD;P:HALFWORD;Q:HALFWORD; UNBALANCE:HALFWORD;HASHBRACE:HALFWORD; BEGIN IF MACRODEF THEN SCANNERSTATUS:=2 ELSE SCANNERSTATUS:=5; WARNINGINDEX:=CURCS;DEFREF:=GETAVAIL;MEM[DEFREF].HH.LH:=0;P:=DEFREF; HASHBRACE:=0;T:=3120;IF MACRODEF THEN{474:} BEGIN WHILE TRUE DO BEGIN GETTOKEN;IF CURTOK<768 THEN GOTO 31; IF CURCMD=6 THEN{476:}BEGIN S:=3328+CURCHR;GETTOKEN; IF CURCMD=1 THEN BEGIN HASHBRACE:=CURTOK;BEGIN Q:=GETAVAIL; MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END;BEGIN Q:=GETAVAIL; MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=3584;P:=Q;END;GOTO 30;END; IF T=3129 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(753);END; BEGIN HELPPTR:=1;HELPLINE[0]:=754;END;ERROR;END ELSE BEGIN T:=T+1; IF CURTOK<>T THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(755);END; BEGIN HELPPTR:=2;HELPLINE[1]:=756;HELPLINE[0]:=757;END;BACKERROR;END; CURTOK:=S;END;END{:476};BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[Q].HH.LH:=CURTOK;P:=Q;END;END;31:BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[Q].HH.LH:=3584;P:=Q;END;IF CURCMD=2 THEN{475:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(666);END; ALIGNSTATE:=ALIGNSTATE+1;BEGIN HELPPTR:=2;HELPLINE[1]:=751; HELPLINE[0]:=752;END;ERROR;GOTO 40;END{:475};30:END{:474} ELSE SCANLEFTBRACE;{477:}UNBALANCE:=1; WHILE TRUE DO BEGIN IF XPAND THEN{478:} BEGIN WHILE TRUE DO BEGIN GETNEXT; IF CURCMD>=111 THEN IF MEM[MEM[CURCHR].HH.RH].HH.LH=3585 THEN BEGIN CURCMD:=0;CURCHR:=257;END;IF CURCMD<=100 THEN GOTO 32; IF CURCMD<>109 THEN EXPAND ELSE BEGIN Q:=THETOKS; IF MEM[327141].HH.RH<>0 THEN BEGIN MEM[P].HH.RH:=MEM[327141].HH.RH;P:=Q; END;END;END;32:XTOKEN END{:478}ELSE GETTOKEN; IF CURTOK<768 THEN IF CURCMD<2 THEN UNBALANCE:=UNBALANCE+1 ELSE BEGIN UNBALANCE:=UNBALANCE-1;IF UNBALANCE=0 THEN GOTO 40; END ELSE IF CURCMD=6 THEN IF MACRODEF THEN{479:}BEGIN S:=CURTOK; IF XPAND THEN GETXTOKEN ELSE GETTOKEN; IF CURCMD<>6 THEN IF(CURTOK<=3120)OR(CURTOK>T)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(758);END;SPRINTCS(WARNINGINDEX); BEGIN HELPPTR:=3;HELPLINE[2]:=759;HELPLINE[1]:=760;HELPLINE[0]:=761;END; BACKERROR;CURTOK:=S;END ELSE CURTOK:=1232+CURCHR;END{:479}; BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END; END{:477};40:SCANNERSTATUS:=0;IF HASHBRACE<>0 THEN BEGIN Q:=GETAVAIL; MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=HASHBRACE;P:=Q;END;SCANTOKS:=P;END;{:473} {482:}PROCEDURE READTOKS(N:INTEGER;R:HALFWORD;J:HALFWORD);LABEL 30; VAR P:HALFWORD;Q:HALFWORD;S:INTEGER;M:SMALLNUMBER; BEGIN SCANNERSTATUS:=2;WARNINGINDEX:=R;DEFREF:=GETAVAIL; MEM[DEFREF].HH.LH:=0;P:=DEFREF;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[Q].HH.LH:=3584;P:=Q;END;IF(N<0)OR(N>15)THEN M:=16 ELSE M:=N; S:=ALIGNSTATE;ALIGNSTATE:=1000000;REPEAT{483:}BEGINFILEREADING; CURINPUT.NAMEFIELD:=M+1;IF READOPEN[M]=2 THEN{484:} IF INTERACTION>1 THEN IF N<0 THEN BEGIN WAKEUPTERMINAL;PRINT(339); TERMINPUT;END ELSE BEGIN WAKEUPTERMINAL;PRINTLN;SPRINTCS(R); BEGIN WAKEUPTERMINAL;PRINT(61);TERMINPUT;END;N:=-1; END ELSE FATALERROR(762){:484}ELSE IF READOPEN[M]=1 THEN{485:} IF INPUTLN(READFILE[M],FALSE)THEN READOPEN[M]:=0 ELSE BEGIN ACLOSE( READFILE[M]);READOPEN[M]:=2;END{:485}ELSE{486:} BEGIN IF NOT INPUTLN(READFILE[M],TRUE)THEN BEGIN ACLOSE(READFILE[M]); READOPEN[M]:=2;IF ALIGNSTATE<>1000000 THEN BEGIN RUNAWAY; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(763);END;PRINTESC(538);BEGIN HELPPTR:=1; HELPLINE[0]:=764;END;ALIGNSTATE:=1000000;ERROR;END;END;END{:486}; CURINPUT.LIMITFIELD:=LAST; IF(EQTB[13216].INT<0)OR(EQTB[13216].INT>255)THEN CURINPUT.LIMITFIELD:= CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[13216].INT; FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD; CURINPUT.STATEFIELD:=33;{1494:} IF J=1 THEN BEGIN WHILE CURINPUT.LOCFIELD<=CURINPUT.LIMITFIELD DO BEGIN CURCHR:=BUFFER[CURINPUT.LOCFIELD]; CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1; IF CURCHR=32 THEN CURTOK:=2592 ELSE CURTOK:=CURCHR+3072; BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q;MEM[Q].HH.LH:=CURTOK;P:=Q;END;END; GOTO 30;END{:1494};WHILE TRUE DO BEGIN GETTOKEN; IF CURTOK=0 THEN GOTO 30; IF ALIGNSTATE<1000000 THEN BEGIN REPEAT GETTOKEN;UNTIL CURTOK=0; ALIGNSTATE:=1000000;GOTO 30;END;BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[Q].HH.LH:=CURTOK;P:=Q;END;END;30:ENDFILEREADING{:483}; UNTIL ALIGNSTATE=1000000;CURVAL:=DEFREF;SCANNERSTATUS:=0;ALIGNSTATE:=S; END;{:482}{494:}PROCEDURE PASSTEXT;LABEL 30;VAR L:INTEGER; SAVESCANNERSTATUS:SMALLNUMBER;BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS; SCANNERSTATUS:=1;L:=0;SKIPLINE:=LINE;WHILE TRUE DO BEGIN GETNEXT; IF CURCMD=106 THEN BEGIN IF L=0 THEN GOTO 30;IF CURCHR=2 THEN L:=L-1; END ELSE IF CURCMD=105 THEN L:=L+1;END; 30:SCANNERSTATUS:=SAVESCANNERSTATUS; IF EQTB[13225].INT>0 THEN SHOWCURCMDCHR;END;{:494}{497:} PROCEDURE CHANGEIFLIMIT(L:SMALLNUMBER;P:HALFWORD);LABEL 10; VAR Q:HALFWORD;BEGIN IF P=CONDPTR THEN IFLIMIT:=L ELSE BEGIN Q:=CONDPTR; WHILE TRUE DO BEGIN IF Q=0 THEN CONFUSION(765); IF MEM[Q].HH.RH=P THEN BEGIN MEM[Q].HH.B0:=L;GOTO 10;END; Q:=MEM[Q].HH.RH;END;END;10:END;{:497}{498:}PROCEDURE CONDITIONAL; LABEL 10,50;VAR B:BOOLEAN;R:60..62;M,N:INTEGER;P,Q:HALFWORD; SAVESCANNERSTATUS:SMALLNUMBER;SAVECONDPTR:HALFWORD;THISIF:SMALLNUMBER; ISUNLESS:BOOLEAN; BEGIN IF EQTB[13225].INT>0 THEN IF EQTB[13204].INT<=1 THEN SHOWCURCMDCHR ;{495:}BEGIN P:=GETNODE(2);MEM[P].HH.RH:=CONDPTR;MEM[P].HH.B0:=IFLIMIT; MEM[P].HH.B1:=CURIF;MEM[P+1].INT:=IFLINE;CONDPTR:=P;CURIF:=CURCHR; IFLIMIT:=1;IFLINE:=LINE;END{:495};SAVECONDPTR:=CONDPTR; ISUNLESS:=(CURCHR>=32);THISIF:=CURCHR MOD 32;{501:} CASE THISIF OF 0,1:{506:}BEGIN BEGIN GETXTOKEN; IF CURCMD=0 THEN IF CURCHR=257 THEN BEGIN CURCMD:=13; CURCHR:=CURTOK-4096;END;END;IF(CURCMD>13)OR(CURCHR>255)THEN BEGIN M:=0; N:=256;END ELSE BEGIN M:=CURCMD;N:=CURCHR;END;BEGIN GETXTOKEN; IF CURCMD=0 THEN IF CURCHR=257 THEN BEGIN CURCMD:=13; CURCHR:=CURTOK-4096;END;END; IF(CURCMD>13)OR(CURCHR>255)THEN BEGIN CURCMD:=0;CURCHR:=256;END; IF THISIF=0 THEN B:=(N=CURCHR)ELSE B:=(M=CURCMD);END{:506};2,3:{503:} BEGIN IF THISIF=2 THEN SCANINT ELSE SCANDIMEN(FALSE,FALSE,FALSE); N:=CURVAL;{406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; IF(CURTOK>=3132)AND(CURTOK<=3134)THEN R:=CURTOK-3072 ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(790);END;PRINTCMDCHR(105,THISIF); BEGIN HELPPTR:=1;HELPLINE[0]:=791;END;BACKERROR;R:=61;END; IF THISIF=2 THEN SCANINT ELSE SCANDIMEN(FALSE,FALSE,FALSE); CASE R OF 60:B:=(NCURVAL);END; END{:503};4:{504:}BEGIN SCANINT;B:=ODD(CURVAL);END{:504}; 5:B:=(ABS(CURLIST.MODEFIELD)=1);6:B:=(ABS(CURLIST.MODEFIELD)=102); 7:B:=(ABS(CURLIST.MODEFIELD)=203);8:B:=(CURLIST.MODEFIELD<0); 9,10,11:{505:}BEGIN SCANREGISTERNUM; IF CURVAL<256 THEN P:=EQTB[11583+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR=0 THEN P:=0 ELSE P:=MEM[CURPTR+1].HH.RH;END; IF THISIF=9 THEN B:=(P=0)ELSE IF P=0 THEN B:=FALSE ELSE IF THISIF=10 THEN B:=(MEM[P].HH.B0=0)ELSE B:=(MEM[P].HH.B0=1);END{:505};12:{507:} BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS;SCANNERSTATUS:=0;GETNEXT; N:=CURCS;P:=CURCMD;Q:=CURCHR;GETNEXT; IF CURCMD<>P THEN B:=FALSE ELSE IF CURCMD<111 THEN B:=(CURCHR=Q)ELSE{508 :}BEGIN P:=MEM[CURCHR].HH.RH;Q:=MEM[EQTB[N].HH.RH].HH.RH; IF P=Q THEN B:=TRUE ELSE BEGIN WHILE(P<>0)AND(Q<>0)DO IF MEM[P].HH.LH<> MEM[Q].HH.LH THEN P:=0 ELSE BEGIN P:=MEM[P].HH.RH;Q:=MEM[Q].HH.RH;END; B:=((P=0)AND(Q=0));END;END{:508};SCANNERSTATUS:=SAVESCANNERSTATUS; END{:507};13:BEGIN SCANFOURBITINT;B:=(READOPEN[CURVAL]=2);END; 14:B:=TRUE;15:B:=FALSE;{1499:}17:BEGIN SAVESCANNERSTATUS:=SCANNERSTATUS; SCANNERSTATUS:=0;GETNEXT;B:=(CURCMD<>101); SCANNERSTATUS:=SAVESCANNERSTATUS;END;{:1499}{1500:}18:BEGIN N:=GETAVAIL; P:=N;REPEAT GETXTOKEN;IF CURCS=0 THEN BEGIN Q:=GETAVAIL;MEM[P].HH.RH:=Q; MEM[Q].HH.LH:=CURTOK;P:=Q;END;UNTIL CURCS<>0;IF CURCMD<>67 THEN{373:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(634);END;PRINTESC(508); PRINT(635);BEGIN HELPPTR:=2;HELPLINE[1]:=636;HELPLINE[0]:=637;END; BACKERROR;END{:373};{1501:}M:=FIRST;P:=MEM[N].HH.RH; WHILE P<>0 DO BEGIN IF M>=MAXBUFSTACK THEN BEGIN MAXBUFSTACK:=M+1; IF MAXBUFSTACK=BUFSIZE THEN OVERFLOW(257,BUFSIZE);END; BUFFER[M]:=MEM[P].HH.LH MOD 256;M:=M+1;P:=MEM[P].HH.RH;END; IF M>FIRST+1 THEN CURCS:=IDLOOKUP(FIRST,M-FIRST)ELSE IF M=FIRST THEN CURCS:=513 ELSE CURCS:=257+BUFFER[FIRST]{:1501};FLUSHLIST(N); B:=(EQTB[CURCS].HH.B0<>101);END;{:1500}{1502:}19:BEGIN SCANFONTIDENT; N:=CURVAL;SCANCHARNUM; IF(FONTBC[N]<=CURVAL)AND(FONTEC[N]>=CURVAL)THEN B:=(FONTINFO[CHARBASE[N] +CURVAL].QQQQ.B0>0)ELSE B:=FALSE;END;{:1502}16:{509:}BEGIN SCANINT; N:=CURVAL;IF EQTB[13204].INT>1 THEN BEGIN BEGINDIAGNOSTIC;PRINT(792); PRINTINT(N);PRINTCHAR(125);ENDDIAGNOSTIC(FALSE);END; WHILE N<>0 DO BEGIN PASSTEXT; IF CONDPTR=SAVECONDPTR THEN IF CURCHR=4 THEN N:=N-1 ELSE GOTO 50 ELSE IF CURCHR=2 THEN{496:}BEGIN IF IFSTACK[INOPEN]=CONDPTR THEN IFWARNING; P:=CONDPTR;IFLINE:=MEM[P+1].INT;CURIF:=MEM[P].HH.B1; IFLIMIT:=MEM[P].HH.B0;CONDPTR:=MEM[P].HH.RH;FREENODE(P,2);END{:496};END; CHANGEIFLIMIT(4,SAVECONDPTR);GOTO 10;END{:509};END{:501}; IF ISUNLESS THEN B:=NOT B;IF EQTB[13204].INT>1 THEN{502:} BEGIN BEGINDIAGNOSTIC;IF B THEN PRINT(788)ELSE PRINT(789); ENDDIAGNOSTIC(FALSE);END{:502}; IF B THEN BEGIN CHANGEIFLIMIT(3,SAVECONDPTR);GOTO 10;END;{500:} WHILE TRUE DO BEGIN PASSTEXT; IF CONDPTR=SAVECONDPTR THEN BEGIN IF CURCHR<>4 THEN GOTO 50; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(786);END;PRINTESC(784);BEGIN HELPPTR:=1; HELPLINE[0]:=787;END;ERROR;END ELSE IF CURCHR=2 THEN{496:} BEGIN IF IFSTACK[INOPEN]=CONDPTR THEN IFWARNING;P:=CONDPTR; IFLINE:=MEM[P+1].INT;CURIF:=MEM[P].HH.B1;IFLIMIT:=MEM[P].HH.B0; CONDPTR:=MEM[P].HH.RH;FREENODE(P,2);END{:496};END{:500}; 50:IF CURCHR=2 THEN{496:} BEGIN IF IFSTACK[INOPEN]=CONDPTR THEN IFWARNING;P:=CONDPTR; IFLINE:=MEM[P+1].INT;CURIF:=MEM[P].HH.B1;IFLIMIT:=MEM[P].HH.B0; CONDPTR:=MEM[P].HH.RH;FREENODE(P,2);END{:496}ELSE IFLIMIT:=2;10:END; {:498}{515:}PROCEDURE BEGINNAME;BEGIN AREADELIMITER:=0;EXTDELIMITER:=0; END;{:515}{516:}FUNCTION MORENAME(C:ASCIICODE):BOOLEAN; BEGIN IF C=32 THEN MORENAME:=FALSE ELSE BEGIN BEGIN IF POOLPTR+1> POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR);END;IF(C=63)THEN C:=37; BEGIN STRPOOL[POOLPTR]:=C;POOLPTR:=POOLPTR+1;END; IF(C=62)OR(C=93)OR(C=58)THEN BEGIN AREADELIMITER:=(POOLPTR-STRSTART[ STRPTR]);EXTDELIMITER:=0; END ELSE IF(C=46)AND(EXTDELIMITER=0)THEN EXTDELIMITER:=(POOLPTR-STRSTART [STRPTR]);MORENAME:=TRUE;END;END;{:516}{517:}PROCEDURE ENDNAME; LABEL 20,10;VAR T:PACKED ARRAY[1..FILENAMESIZE]OF CHAR;I:POOLPOINTER; LEN:SIGNEDHALFWORD; BEGIN 20:IF(STRPOOL[STRSTART[STRPTR]+AREADELIMITER]=58)AND(POOLPTR= STRSTART[STRPTR]+AREADELIMITER+1)THEN BEGIN CURAREA:=MAKESTRING; LEN:=(STRSTART[CURAREA+1]-STRSTART[CURAREA])-1; FOR I:=1 TO LEN DO T[I]:=XCHR[STRPOOL[STRSTART[CURAREA]+I-1]]; IF NOT TRANSLATE(T,LEN)THEN BEGIN CUREXT:=339;CURNAME:=339;GOTO 10;END; BEGIN STRPTR:=STRPTR-1;POOLPTR:=STRSTART[STRPTR];END;BEGINNAME; FOR I:=1 TO LEN DO IF NOT MORENAME(XORD[T[I]])THEN GOTO 20;GOTO 20;END; IF STRPTR+3>MAXSTRINGS THEN OVERFLOW(259,MAXSTRINGS-INITSTRPTR); IF AREADELIMITER=0 THEN CURAREA:=339 ELSE BEGIN CURAREA:=STRPTR; STRSTART[STRPTR+1]:=STRSTART[STRPTR]+AREADELIMITER;STRPTR:=STRPTR+1;END; IF EXTDELIMITER=0 THEN BEGIN CUREXT:=339;CURNAME:=MAKESTRING; END ELSE BEGIN CURNAME:=STRPTR; STRSTART[STRPTR+1]:=STRSTART[STRPTR]+EXTDELIMITER-AREADELIMITER-1; STRPTR:=STRPTR+1;CUREXT:=MAKESTRING;END;10:END;{:517}{519:} PROCEDURE PACKFILENAME(N,A,E:STRNUMBER);VAR K:INTEGER;C:ASCIICODE; J:POOLPOINTER;BEGIN K:=0; FOR J:=STRSTART[A]TO STRSTART[A+1]-1 DO BEGIN C:=STRPOOL[J];K:=K+1; IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; FOR J:=STRSTART[N]TO STRSTART[N+1]-1 DO BEGIN C:=STRPOOL[J];K:=K+1; IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; FOR J:=STRSTART[E]TO STRSTART[E+1]-1 DO BEGIN C:=STRPOOL[J];K:=K+1; IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; IF K<=FILENAMESIZE THEN NAMELENGTH:=K ELSE NAMELENGTH:=FILENAMESIZE; FOR K:=NAMELENGTH+1 TO FILENAMESIZE DO NAMEOFFILE[K]:=' ';END;{:519} {523:}PROCEDURE PACKBUFFEREDNAME(N:SMALLNUMBER;A,B:INTEGER); VAR K:INTEGER;C:ASCIICODE;J:INTEGER; BEGIN IF N+B-A+5>FILENAMESIZE THEN B:=A+FILENAMESIZE-N-5;K:=0; FOR J:=1 TO N DO BEGIN C:=XORD[TEXFORMATDEFAULT[J]];K:=K+1; IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; FOR J:=A TO B DO BEGIN C:=BUFFER[J];K:=K+1; IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; FOR J:=FORMATDEFAULTLENGTH-3 TO FORMATDEFAULTLENGTH DO BEGIN C:=XORD[ TEXFORMATDEFAULT[J]];K:=K+1; IF K<=FILENAMESIZE THEN NAMEOFFILE[K]:=XCHR[C];END; IF K<=FILENAMESIZE THEN NAMELENGTH:=K ELSE NAMELENGTH:=FILENAMESIZE; FOR K:=NAMELENGTH+1 TO FILENAMESIZE DO NAMEOFFILE[K]:=' ';END;{:523} {525:}FUNCTION MAKENAMESTRING:STRNUMBER;VAR K:1..FILENAMESIZE; BEGIN IF(POOLPTR+LASTLENGTH>POOLSIZE)OR(STRPTR=MAXSTRINGS)OR((POOLPTR- STRSTART[STRPTR])>0)THEN MAKENAMESTRING:=63 ELSE BEGIN FOR K:=1 TO LASTLENGTH DO BEGIN STRPOOL[POOLPTR]:=XORD[LASTNAME[K]]; POOLPTR:=POOLPTR+1;END;MAKENAMESTRING:=MAKESTRING;END;END; FUNCTION AMAKENAMESTRING(VAR F:ALPHAFILE):STRNUMBER; BEGIN AMAKENAMESTRING:=MAKENAMESTRING;END; FUNCTION BMAKENAMESTRING(VAR F:BYTEFILE):STRNUMBER; BEGIN BMAKENAMESTRING:=MAKENAMESTRING;END; FUNCTION WMAKENAMESTRING(VAR F:WORDFILE):STRNUMBER; BEGIN WMAKENAMESTRING:=MAKENAMESTRING;END;{:525}{526:} PROCEDURE SCANFILENAME;LABEL 30;BEGIN NAMEINPROGRESS:=TRUE;BEGINNAME; {406:}REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406}; WHILE TRUE DO BEGIN IF(CURCMD>12)OR(CURCHR>255)THEN BEGIN BACKINPUT; GOTO 30;END;IF NOT MORENAME(CURCHR)THEN GOTO 30;GETXTOKEN;END; 30:ENDNAME;NAMEINPROGRESS:=FALSE;END;{:526}{529:} PROCEDURE PACKJOBNAME(S:STRNUMBER);BEGIN CURAREA:=339;CUREXT:=S; CURNAME:=JOBNAME;PACKFILENAME(CURNAME,CURAREA,CUREXT);END; FUNCTION PACKDEFAULTNAME(QUAL:BOOLEAN; DFNAME:PACKED ARRAY[L1..U1:INTEGER]OF CHAR;DFLEN:FILESIZE):BOOLEAN; VAR K:INTEGER; BEGIN FOR K:=1 TO FILENAMESIZE DO DEFAULTNAME[K]:=NAMEOFFILE[K]; DEFLTLENGTH:=NAMELENGTH;IF QUAL THEN BEGIN NAMEOFFILE:=DFNAME; NAMELENGTH:=DFLEN; IF NAMELENGTH0 THEN BEGIN IF CURAREA=339 THEN BEGIN PACKFILENAME(CURNAME ,TEXAREA,CUREXT); OPEN(F,NAMEOFFILE, readonly ,user_action:=USERRESET,error:=continue); END;END; IF STATUS(F)>0 THEN XOPENIN:=FALSE ELSE BEGIN RESET(F,error:=continue); XOPENIN:=STATUS(F)<=0;END;END;PROCEDURE STARTINPUT;LABEL 30; VAR K:INTEGER;BEGIN SCANFILENAME;IF CUREXT=339 THEN CUREXT:=798; PACKFILENAME(CURNAME,CURAREA,CUREXT); WHILE TRUE DO BEGIN BEGINFILEREADING; IF XOPENIN(INPUTFILE[CURINPUT.INDEXFIELD])THEN GOTO 30;ENDFILEREADING; PROMPTFILENAME(794,798);END; 30:CURINPUT.NAMEFIELD:=AMAKENAMESTRING(INPUTFILE[CURINPUT.INDEXFIELD]); IF JOBNAME=0 THEN BEGIN IF LASTBASENAMLEN=(STRSTART[CURNAME+1]-STRSTART[ CURNAME])THEN BEGIN FOR K:=1 TO LASTBASENAMLEN DO STRPOOL[STRSTART[ CURNAME]+K-1]:=XORD[LASTBASENAME[K]]; END ELSE IF(POOLPTR+LASTBASENAMLEN<=POOLSIZE)AND(STRPTR<>MAXSTRINGS)AND( (POOLPTR-STRSTART[STRPTR])<=0)THEN BEGIN FOR K:=1 TO LASTBASENAMLEN DO BEGIN STRPOOL[POOLPTR]:=XORD[LASTBASENAME[K]];POOLPTR:=POOLPTR+1;END; CURNAME:=MAKESTRING;END;JOBNAME:=CURNAME;OPENLOGFILE;END; IF TERMOFFSET+(STRSTART[CURINPUT.NAMEFIELD+1]-STRSTART[CURINPUT. NAMEFIELD])>MAXPRINTLINE-2 THEN PRINTLN ELSE IF(TERMOFFSET>0)OR( FILEOFFSET>0)THEN PRINTCHAR(32);PRINTCHAR(40);OPENPARENS:=OPENPARENS+1; SLOWPRINT(CURINPUT.NAMEFIELD);IF ODD(SELECTOR)THEN WRITELN(TERMOUT); CURINPUT.STATEFIELD:=33;{538:}BEGIN LINE:=1; IF INPUTLN(INPUTFILE[CURINPUT.INDEXFIELD],FALSE)THEN;FIRMUPTHELINE; IF(EQTB[13216].INT<0)OR(EQTB[13216].INT>255)THEN CURINPUT.LIMITFIELD:= CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[13216].INT; FIRST:=CURINPUT.LIMITFIELD+1;CURINPUT.LOCFIELD:=CURINPUT.STARTFIELD; END{:538};END;{:537}{560:}FUNCTION READFONTINFO(U:HALFWORD; NOM,AIRE:STRNUMBER;S:SCALED):INTERNALFONTNUMBER;LABEL 30,11,45; VAR K:FONTINDEX;FILEOPENED:BOOLEAN; LF,LH,BC,EC,NW,NH,ND,NI,NL,NK,NE,NP:HALFWORD;F:INTERNALFONTNUMBER; G:INTERNALFONTNUMBER;A,B,C,D:EIGHTBITS;QW:FOURQUARTERS;SW:SCALED; BCHLABEL:INTEGER;BCHAR:0..256;Z:SCALED;ALPHA:INTEGER;BETA:1..16; BEGIN G:=0;{562:}{563:}FILEOPENED:=FALSE; IF AIRE=339 THEN PACKFILENAME(NOM,TEXFONTAREA,818)ELSE PACKFILENAME(NOM, AIRE,818);IF NOT BOPENIN(TFMFILE)THEN GOTO 11;TFMCOUNT:=0; FILEOPENED:=TRUE{:563};{565:}BEGIN BEGIN LF:=TFMFILE^[TFMCOUNT]; IF LF>127 THEN GOTO 11;BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;LF:=LF*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN LH:=TFMFILE^[TFMCOUNT];IF LH>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;LH:=LH*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN BC:=TFMFILE^[TFMCOUNT];IF BC>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BC:=BC*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN EC:=TFMFILE^[TFMCOUNT];IF EC>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;EC:=EC*256+TFMFILE^[TFMCOUNT];END; IF(BC>EC+1)OR(EC>255)THEN GOTO 11;IF BC>255 THEN BEGIN BC:=1;EC:=0;END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN NW:=TFMFILE^[TFMCOUNT];IF NW>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;NW:=NW*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN NH:=TFMFILE^[TFMCOUNT];IF NH>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;NH:=NH*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN ND:=TFMFILE^[TFMCOUNT];IF ND>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;ND:=ND*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN NI:=TFMFILE^[TFMCOUNT];IF NI>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;NI:=NI*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN NL:=TFMFILE^[TFMCOUNT];IF NL>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;NL:=NL*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN NK:=TFMFILE^[TFMCOUNT];IF NK>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;NK:=NK*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN NE:=TFMFILE^[TFMCOUNT];IF NE>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;NE:=NE*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN NP:=TFMFILE^[TFMCOUNT];IF NP>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;NP:=NP*256+TFMFILE^[TFMCOUNT];END; IF LF<>6+LH+(EC-BC+1)+NW+NH+ND+NI+NL+NK+NE+NP THEN GOTO 11;END{:565}; {566:}LF:=LF-6-LH;IF NP<7 THEN LF:=LF+7-NP; IF(FONTPTR=FONTMAX)OR(FMEMPTR+LF>FONTMEMSIZE)THEN{567:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(809);END;SPRINTCS(U); PRINTCHAR(61);PRINTFILENAME(NOM,AIRE,339);IF S>=0 THEN BEGIN PRINT(750); PRINTSCALED(S);PRINT(400);END ELSE IF S<>-1000 THEN BEGIN PRINT(810); PRINTINT(-S);END;PRINT(819);BEGIN HELPPTR:=4;HELPLINE[3]:=820; HELPLINE[2]:=821;HELPLINE[1]:=822;HELPLINE[0]:=823;END;ERROR;GOTO 30; END{:567};F:=FONTPTR+1;CHARBASE[F]:=FMEMPTR-BC; WIDTHBASE[F]:=CHARBASE[F]+EC+1;HEIGHTBASE[F]:=WIDTHBASE[F]+NW; DEPTHBASE[F]:=HEIGHTBASE[F]+NH;ITALICBASE[F]:=DEPTHBASE[F]+ND; LIGKERNBASE[F]:=ITALICBASE[F]+NI; KERNBASE[F]:=LIGKERNBASE[F]+NL-256*(128); EXTENBASE[F]:=KERNBASE[F]+256*(128)+NK; PARAMBASE[F]:=EXTENBASE[F]+NE{:566};{568:}BEGIN IF LH<2 THEN GOTO 11; BEGIN BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;A:=TFMFILE^[TFMCOUNT];QW.B0:=A; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;B:=TFMFILE^[TFMCOUNT];QW.B1:=B; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;C:=TFMFILE^[TFMCOUNT];QW.B2:=C; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;D:=TFMFILE^[TFMCOUNT];QW.B3:=D;FONTCHECK[F]:=QW;END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN Z:=TFMFILE^[TFMCOUNT];IF Z>127 THEN GOTO 11; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;Z:=Z*256+TFMFILE^[TFMCOUNT];END; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;Z:=Z*256+TFMFILE^[TFMCOUNT]; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;Z:=(Z*16)+(TFMFILE^[TFMCOUNT]DIV 16); IF Z<65536 THEN GOTO 11;WHILE LH>2 DO BEGIN BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;LH:=LH-1;END;FONTDSIZE[F]:=Z; IF S<>-1000 THEN IF S>=0 THEN Z:=S ELSE Z:=XNOVERD(Z,-S,1000); FONTSIZE[F]:=Z;END{:568};{569:} FOR K:=FMEMPTR TO WIDTHBASE[F]-1 DO BEGIN BEGIN BEGIN TFMCOUNT:=TFMCOUNT +1;IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;A:=TFMFILE^[TFMCOUNT];QW.B0:=A; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;B:=TFMFILE^[TFMCOUNT];QW.B1:=B; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;C:=TFMFILE^[TFMCOUNT];QW.B2:=C; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;D:=TFMFILE^[TFMCOUNT];QW.B3:=D;FONTINFO[K].QQQQ:=QW; END; IF(A>=NW)OR(B DIV 16>=NH)OR(B MOD 16>=ND)OR(C DIV 4>=NI)THEN GOTO 11; CASE C MOD 4 OF 1:IF D>=NL THEN GOTO 11;3:IF D>=NE THEN GOTO 11;2:{570:} BEGIN BEGIN IF(DEC)THEN GOTO 11 END; WHILE D2 THEN GOTO 45;D:=QW.B3;END; IF D=K+BC-FMEMPTR THEN GOTO 11;45:END{:570};OTHERWISE END;END{:569}; {571:}BEGIN{572:}BEGIN ALPHA:=16;WHILE Z>=8388608 DO BEGIN Z:=Z DIV 2; ALPHA:=ALPHA+ALPHA;END;BETA:=256 DIV ALPHA;ALPHA:=ALPHA*Z;END{:572}; FOR K:=WIDTHBASE[F]TO LIGKERNBASE[F]-1 DO BEGIN BEGIN TFMCOUNT:=TFMCOUNT +1;IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;A:=TFMFILE^[TFMCOUNT];BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;B:=TFMFILE^[TFMCOUNT];BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;C:=TFMFILE^[TFMCOUNT];BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;D:=TFMFILE^[TFMCOUNT]; SW:=(((((D*Z)DIV 256)+(C*Z))DIV 256)+(B*Z))DIV BETA; IF A=0 THEN FONTINFO[K].INT:=SW ELSE IF A=255 THEN FONTINFO[K].INT:=SW- ALPHA ELSE GOTO 11;END;IF FONTINFO[WIDTHBASE[F]].INT<>0 THEN GOTO 11; IF FONTINFO[HEIGHTBASE[F]].INT<>0 THEN GOTO 11; IF FONTINFO[DEPTHBASE[F]].INT<>0 THEN GOTO 11; IF FONTINFO[ITALICBASE[F]].INT<>0 THEN GOTO 11;END{:571};{573:} BCHLABEL:=32767;BCHAR:=256; IF NL>0 THEN BEGIN FOR K:=LIGKERNBASE[F]TO KERNBASE[F]+256*(128)-1 DO BEGIN BEGIN BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;A:=TFMFILE^[TFMCOUNT];QW.B0:=A; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;B:=TFMFILE^[TFMCOUNT];QW.B1:=B; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;C:=TFMFILE^[TFMCOUNT];QW.B2:=C; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;D:=TFMFILE^[TFMCOUNT];QW.B3:=D;FONTINFO[K].QQQQ:=QW; END;IF A>128 THEN BEGIN IF 256*C+D>=NL THEN GOTO 11; IF A=255 THEN IF K=LIGKERNBASE[F]THEN BCHAR:=B; END ELSE BEGIN IF B<>BCHAR THEN BEGIN BEGIN IF(BEC)THEN GOTO 11 END;QW:=FONTINFO[CHARBASE[F]+B].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; IF C<128 THEN BEGIN BEGIN IF(DEC)THEN GOTO 11 END; QW:=FONTINFO[CHARBASE[F]+D].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11; END ELSE IF 256*(C-128)+D>=NK THEN GOTO 11; IF A<128 THEN IF K-LIGKERNBASE[F]+A+1>=NL THEN GOTO 11;END;END; IF A=255 THEN BCHLABEL:=256*C+D;END; FOR K:=KERNBASE[F]+256*(128)TO EXTENBASE[F]-1 DO BEGIN BEGIN TFMCOUNT:= TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;A:=TFMFILE^[TFMCOUNT];BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;B:=TFMFILE^[TFMCOUNT];BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;C:=TFMFILE^[TFMCOUNT];BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;D:=TFMFILE^[TFMCOUNT]; SW:=(((((D*Z)DIV 256)+(C*Z))DIV 256)+(B*Z))DIV BETA; IF A=0 THEN FONTINFO[K].INT:=SW ELSE IF A=255 THEN FONTINFO[K].INT:=SW- ALPHA ELSE GOTO 11;END;{:573};{574:} FOR K:=EXTENBASE[F]TO PARAMBASE[F]-1 DO BEGIN BEGIN BEGIN TFMCOUNT:= TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;A:=TFMFILE^[TFMCOUNT];QW.B0:=A; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;B:=TFMFILE^[TFMCOUNT];QW.B1:=B; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;C:=TFMFILE^[TFMCOUNT];QW.B2:=C; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;D:=TFMFILE^[TFMCOUNT];QW.B3:=D;FONTINFO[K].QQQQ:=QW; END;IF A<>0 THEN BEGIN BEGIN IF(AEC)THEN GOTO 11 END; QW:=FONTINFO[CHARBASE[F]+A].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; IF B<>0 THEN BEGIN BEGIN IF(BEC)THEN GOTO 11 END; QW:=FONTINFO[CHARBASE[F]+B].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; IF C<>0 THEN BEGIN BEGIN IF(CEC)THEN GOTO 11 END; QW:=FONTINFO[CHARBASE[F]+C].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; BEGIN BEGIN IF(DEC)THEN GOTO 11 END; QW:=FONTINFO[CHARBASE[F]+D].QQQQ;IF NOT(QW.B0>0)THEN GOTO 11;END; END{:574};{575:} BEGIN FOR K:=1 TO NP DO IF K=1 THEN BEGIN BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;SW:=TFMFILE^[TFMCOUNT];IF SW>127 THEN SW:=SW-256; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;SW:=SW*256+TFMFILE^[TFMCOUNT]; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;SW:=SW*256+TFMFILE^[TFMCOUNT]; BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END; FONTINFO[PARAMBASE[F]].INT:=(SW*16)+(TFMFILE^[TFMCOUNT]DIV 16); END ELSE BEGIN BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;A:=TFMFILE^[TFMCOUNT];BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;B:=TFMFILE^[TFMCOUNT];BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;C:=TFMFILE^[TFMCOUNT];BEGIN TFMCOUNT:=TFMCOUNT+1; IF TFMCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(TFMFILE,error:=continue); TFMCOUNT:=0;END END;D:=TFMFILE^[TFMCOUNT]; SW:=(((((D*Z)DIV 256)+(C*Z))DIV 256)+(B*Z))DIV BETA; IF A=0 THEN FONTINFO[PARAMBASE[F]+K-1].INT:=SW ELSE IF A=255 THEN FONTINFO[PARAMBASE[F]+K-1].INT:=SW-ALPHA ELSE GOTO 11;END; IF STATUS(TFMFILE)<>0 THEN GOTO 11; FOR K:=NP+1 TO 7 DO FONTINFO[PARAMBASE[F]+K-1].INT:=0;END{:575};{576:} IF NP>=7 THEN FONTPARAMS[F]:=NP ELSE FONTPARAMS[F]:=7; HYPHENCHAR[F]:=EQTB[13214].INT;SKEWCHAR[F]:=EQTB[13215].INT; IF BCHLABEL=BC THEN BEGIN QW:=FONTINFO[CHARBASE[F]+BCHAR ].QQQQ;IF(QW.B0>0)THEN FONTFALSEBCHAR[F]:=256;END;FONTNAME[F]:=NOM; FONTAREA[F]:=AIRE;FONTBC[F]:=BC;FONTEC[F]:=EC;FONTGLUE[F]:=0; CHARBASE[F]:=CHARBASE[F];WIDTHBASE[F]:=WIDTHBASE[F]; LIGKERNBASE[F]:=LIGKERNBASE[F];KERNBASE[F]:=KERNBASE[F]; EXTENBASE[F]:=EXTENBASE[F];PARAMBASE[F]:=PARAMBASE[F]-1; FMEMPTR:=FMEMPTR+LF;FONTPTR:=F;G:=F;GOTO 30{:576}{:562};11:{561:} BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(809);END;SPRINTCS(U);PRINTCHAR(61); PRINTFILENAME(NOM,AIRE,339);IF S>=0 THEN BEGIN PRINT(750); PRINTSCALED(S);PRINT(400);END ELSE IF S<>-1000 THEN BEGIN PRINT(810); PRINTINT(-S);END;IF FILEOPENED THEN PRINT(811)ELSE PRINT(812); BEGIN HELPPTR:=5;HELPLINE[4]:=813;HELPLINE[3]:=814;HELPLINE[2]:=815; HELPLINE[1]:=816;HELPLINE[0]:=817;END;ERROR{:561}; 30:IF FILEOPENED THEN BCLOSE(TFMFILE);READFONTINFO:=G;END;{:560}{581:} PROCEDURE CHARWARNING(F:INTERNALFONTNUMBER;C:EIGHTBITS); VAR OLDSETTING:INTEGER; BEGIN IF EQTB[13203].INT>0 THEN BEGIN OLDSETTING:=EQTB[13197].INT; IF(ETEXMODE=1)AND(EQTB[13203].INT>1)THEN EQTB[13197].INT:=1; BEGIN BEGINDIAGNOSTIC;PRINTNL(832);PRINT(C);PRINT(833); SLOWPRINT(FONTNAME[F]);PRINTCHAR(33);ENDDIAGNOSTIC(FALSE);END; EQTB[13197].INT:=OLDSETTING;END;END;{:581}{582:} FUNCTION NEWCHARACTER(F:INTERNALFONTNUMBER;C:EIGHTBITS):HALFWORD; LABEL 10;VAR P:HALFWORD; BEGIN IF FONTBC[F]<=C THEN IF FONTEC[F]>=C THEN IF(FONTINFO[CHARBASE[F]+ C].QQQQ.B0>0)THEN BEGIN P:=GETAVAIL;MEM[P].HH.B0:=F;MEM[P].HH.B1:=C; NEWCHARACTER:=P;GOTO 10;END;CHARWARNING(F,C);NEWCHARACTER:=0;10:END; {:582}{598:}PROCEDURE DVISWAP; BEGIN IF DVILIMIT=DVIBUFSIZE THEN BEGIN IF DVIQUAL THEN WRITE(DVIFILE, DBUFFER.L);DVILIMIT:=HALFBUF;DVIOFFSET:=DVIOFFSET+DVIBUFSIZE;DVIPTR:=0; END ELSE BEGIN IF DVIQUAL THEN WRITE(DVIFILE,DBUFFER.R); DVILIMIT:=DVIBUFSIZE;END;DVIGONE:=DVIGONE+HALFBUF;END;{:598}{600:} PROCEDURE DVIFOUR(X:INTEGER); BEGIN IF X>=0 THEN BEGIN DBUFFER.B[DVIPTR]:=X DIV 16777216; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP; END ELSE BEGIN X:=X+1073741824;X:=X+1073741824; BEGIN DBUFFER.B[DVIPTR]:=(X DIV 16777216)+128;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;X:=X MOD 16777216; BEGIN DBUFFER.B[DVIPTR]:=X DIV 65536;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;X:=X MOD 65536; BEGIN DBUFFER.B[DVIPTR]:=X DIV 256;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DBUFFER.B[DVIPTR]:=X MOD 256; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;{:600}{601:} PROCEDURE DVIPOP(L:INTEGER); BEGIN IF(L=DVIOFFSET+DVIPTR)AND(DVIPTR>0)THEN DVIPTR:=DVIPTR-1 ELSE BEGIN DBUFFER.B[DVIPTR]:=142;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;{:601}{602:} PROCEDURE DVIFONTDEF(F:INTERNALFONTNUMBER);VAR K:POOLPOINTER; BEGIN BEGIN DBUFFER.B[DVIPTR]:=243;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DBUFFER.B[DVIPTR]:=F-1; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=FONTCHECK[F].B0;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=FONTCHECK[F].B1;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=FONTCHECK[F].B2;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=FONTCHECK[F].B3;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(FONTSIZE[F]); DVIFOUR(FONTDSIZE[F]); BEGIN DBUFFER.B[DVIPTR]:=(STRSTART[FONTAREA[F]+1]-STRSTART[FONTAREA[F]]) ;DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=(STRSTART[FONTNAME[F]+1]-STRSTART[FONTNAME[F]]) ;DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;{603:} FOR K:=STRSTART[FONTAREA[F]]TO STRSTART[FONTAREA[F]+1]-1 DO BEGIN DBUFFER.B[DVIPTR]:=STRPOOL[K];DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; FOR K:=STRSTART[FONTNAME[F]]TO STRSTART[FONTNAME[F]+1]-1 DO BEGIN DBUFFER.B[DVIPTR]:=STRPOOL[K];DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END{:603};END;{:602}{607:} PROCEDURE MOVEMENT(W:SCALED;O:EIGHTBITS);LABEL 10,40,45,2,1; VAR MSTATE:SMALLNUMBER;P,Q:HALFWORD;K:INTEGER;BEGIN Q:=GETNODE(3); MEM[Q+1].INT:=W;MEM[Q+2].INT:=DVIOFFSET+DVIPTR; IF O=157 THEN BEGIN MEM[Q].HH.RH:=DOWNPTR;DOWNPTR:=Q; END ELSE BEGIN MEM[Q].HH.RH:=RIGHTPTR;RIGHTPTR:=Q;END;{611:} P:=MEM[Q].HH.RH;MSTATE:=0; WHILE P<>0 DO BEGIN IF MEM[P+1].INT=W THEN{612:} CASE MSTATE+MEM[P].HH.LH OF 3,4,15,16:IF MEM[P+2].INT=8388608 THEN BEGIN BEGIN DBUFFER.B[DVIPTR]:=O+3; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(W);GOTO 10; END;IF ABS(W)>=32768 THEN BEGIN BEGIN DBUFFER.B[DVIPTR]:=O+2; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; IF W<0 THEN W:=W+16777216;BEGIN DBUFFER.B[DVIPTR]:=W DIV 65536; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;W:=W MOD 65536; GOTO 2;END;IF ABS(W)>=128 THEN BEGIN BEGIN DBUFFER.B[DVIPTR]:=O+1; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; IF W<0 THEN W:=W+65536;GOTO 2;END;BEGIN DBUFFER.B[DVIPTR]:=O; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; IF W<0 THEN W:=W+256;GOTO 1;2:BEGIN DBUFFER.B[DVIPTR]:=W DIV 256; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; 1:BEGIN DBUFFER.B[DVIPTR]:=W MOD 256;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;GOTO 10{:610};40:{609:} MEM[Q].HH.LH:=MEM[P].HH.LH; IF MEM[Q].HH.LH=1 THEN BEGIN BEGIN DBUFFER.B[DVIPTR]:=O+4; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; WHILE MEM[Q].HH.RH<>P DO BEGIN Q:=MEM[Q].HH.RH; CASE MEM[Q].HH.LH OF 3:MEM[Q].HH.LH:=5;4:MEM[Q].HH.LH:=6;OTHERWISE END; END;END ELSE BEGIN BEGIN DBUFFER.B[DVIPTR]:=O+9;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; WHILE MEM[Q].HH.RH<>P DO BEGIN Q:=MEM[Q].HH.RH; CASE MEM[Q].HH.LH OF 3:MEM[Q].HH.LH:=4;5:MEM[Q].HH.LH:=6;OTHERWISE END; END;END{:609};10:END;{:607}{615:}PROCEDURE PRUNEMOVEMENTS(L:INTEGER); LABEL 30,10;VAR P:HALFWORD; BEGIN WHILE DOWNPTR<>0 DO BEGIN IF MEM[DOWNPTR+2].INT0 DO BEGIN IF MEM[RIGHTPTR+2].INTDVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH;END; IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; OLDSETTING:=SELECTOR;SELECTOR:=21; SHOWTOKENLIST(MEM[MEM[P+1].HH.RH].HH.RH,0,POOLSIZE-POOLPTR); SELECTOR:=OLDSETTING; BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR);END; IF(POOLPTR-STRSTART[STRPTR])<256 THEN BEGIN BEGIN DBUFFER.B[DVIPTR]:=239 ;DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=(POOLPTR-STRSTART[STRPTR]);DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; END ELSE BEGIN BEGIN DBUFFER.B[DVIPTR]:=242;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR((POOLPTR-STRSTART[STRPTR])); END; FOR K:=STRSTART[STRPTR]TO POOLPTR-1 DO BEGIN DBUFFER.B[DVIPTR]:=STRPOOL[ K];DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; POOLPTR:=STRSTART[STRPTR];END;{:1368}{1370:} PROCEDURE WRITEOUT(P:HALFWORD);VAR OLDSETTING:0..22;OLDMODE:INTEGER; J:SMALLNUMBER;Q,R:HALFWORD;BEGIN{1371:}Q:=GETAVAIL;MEM[Q].HH.LH:=637; R:=GETAVAIL;MEM[Q].HH.RH:=R;MEM[R].HH.LH:=14617;BEGINTOKENLIST(Q,4); BEGINTOKENLIST(MEM[P+1].HH.RH,16);Q:=GETAVAIL;MEM[Q].HH.LH:=379; BEGINTOKENLIST(Q,4);OLDMODE:=CURLIST.MODEFIELD;CURLIST.MODEFIELD:=0; CURCS:=WRITELOC;Q:=SCANTOKS(FALSE,TRUE);GETTOKEN; IF CURTOK<>14617 THEN{1372:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1307);END;BEGIN HELPPTR:=2; HELPLINE[1]:=1308;HELPLINE[0]:=1021;END;ERROR;REPEAT GETTOKEN; UNTIL CURTOK=14617;END{:1372};CURLIST.MODEFIELD:=OLDMODE; ENDTOKENLIST{:1371};OLDSETTING:=SELECTOR;J:=MEM[P+1].HH.LH; IF WRITEOPEN[J]THEN SELECTOR:=J ELSE BEGIN IF(J=17)AND(SELECTOR=19)THEN SELECTOR:=18;PRINTNL(339);END;TOKENSHOW(DEFREF);PRINTLN; FLUSHLIST(DEFREF);SELECTOR:=OLDSETTING;END;{:1370}{1373:} PROCEDURE OUTWHAT(P:HALFWORD);VAR J:SMALLNUMBER; BEGIN CASE MEM[P].HH.B1 OF 0,1,2:{1374:} IF NOT DOINGLEADERS THEN BEGIN J:=MEM[P+1].HH.LH; IF MEM[P].HH.B1=1 THEN WRITEOUT(P)ELSE BEGIN IF WRITEOPEN[J]THEN ACLOSE( WRITEFILE[J]); IF MEM[P].HH.B1=2 THEN WRITEOPEN[J]:=FALSE ELSE IF J<16 THEN BEGIN CURNAME:=MEM[P+1].HH.RH;CURAREA:=MEM[P+2].HH.LH;CUREXT:=MEM[P+2].HH.RH; IF CUREXT=339 THEN CUREXT:=798;PACKFILENAME(CURNAME,CURAREA,CUREXT); WHILE NOT AOPENOUT(WRITEFILE[J])DO PROMPTFILENAME(1310,798); WRITEOPEN[J]:=TRUE;END;END;END{:1374};3:SPECIALOUT(P);4:; OTHERWISE CONFUSION(1309)END;END;{:1373}{1433:} FUNCTION DOGLUE(THISBOX,P:HALFWORD):SCALED;LABEL 22,15,30; VAR Q:HALFWORD;GORDER:GLUEORD;GSIGN:0..2;S:SCALED;GLUETEMP:DOUBLE; BEGIN GORDER:=MEM[THISBOX+5].HH.B1;GSIGN:=MEM[THISBOX+5].HH.B0;S:=0; IF GSIGN=1 THEN BEGIN IF MEM[G].HH.B0=GORDER THEN S:=S+MEM[G+2].INT; END ELSE BEGIN IF MEM[G].HH.B1=GORDER THEN S:=S-MEM[G+3].INT;END; IF NOT(ETEXMODE=1)OR(MEM[P].HH.B1>=100)THEN GOTO 30;Q:=P; 22:MEM[Q].HH.B0:=11;MEM[Q+1].INT:=MEM[G+1].INT; BEGIN IF MEM[G].HH.RH=0 THEN FREENODE(G,4)ELSE MEM[G].HH.RH:=MEM[G].HH. RH-1;END;15:Q:=MEM[Q].HH.RH; IF(Q<>0)AND NOT(Q>=HIMEMMIN)THEN CASE MEM[Q].HH.B0 OF 3,4,5,11,12:GOTO 15;10:IF MEM[Q].HH.B1<100 THEN BEGIN G:=MEM[Q+1].HH.LH; IF GSIGN=1 THEN BEGIN IF MEM[G].HH.B0=GORDER THEN S:=S+MEM[G+2].INT; END ELSE BEGIN IF MEM[G].HH.B1=GORDER THEN S:=S-MEM[G+3].INT;END; GOTO 22;END;OTHERWISE END; 30:IF S<>0 THEN BEGIN GLUETEMP:=DBLE(MEM[THISBOX+6].GR)*S; IF GLUETEMP>1000000000.0D0 THEN GLUETEMP:=1000000000.0D0 ELSE IF GLUETEMP<-1000000000.0D0 THEN GLUETEMP:=-1000000000.0D0; S:=ROUND(GLUETEMP);IF MEM[P].HH.B0=11 THEN MEM[P+1].INT:=MEM[P+1].INT+S; END;DOGLUE:=S;END;{:1433}{1452:}FUNCTION NEWEDGE(S:SMALLNUMBER; W:SCALED):HALFWORD;VAR P:HALFWORD;BEGIN P:=GETNODE(3);MEM[P].HH.B0:=14; MEM[P].HH.B1:=S;MEM[P+1].INT:=W;MEM[P+2].INT:=0;NEWEDGE:=P;END;{:1452} {1456:}FUNCTION REVERSE(THISBOX,T:HALFWORD):HALFWORD;LABEL 21,15,30; VAR L:HALFWORD;P:HALFWORD;Q:HALFWORD;GSIGN:0..2;M,N:HALFWORD; BEGIN GSIGN:=MEM[THISBOX+5].HH.B0;L:=T;P:=TEMPPTR;M:=0;N:=0; WHILE TRUE DO BEGIN WHILE P<>0 DO{1457:} 21:IF(P>=HIMEMMIN)THEN REPEAT F:=MEM[P].HH.B0;C:=MEM[P].HH.B1; CURH:=CURH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+C].QQQQ.B0].INT; Q:=MEM[P].HH.RH;MEM[P].HH.RH:=L;L:=P;P:=Q; UNTIL NOT(P>=HIMEMMIN)ELSE{1458:}BEGIN Q:=MEM[P].HH.RH; CASE MEM[P].HH.B0 OF 0,1,2,11:RULEWD:=MEM[P+1].INT;{1459:} 10:BEGIN G:=MEM[P+1].HH.LH;RULEWD:=MEM[G+1].INT; IF GSIGN<>0 THEN RULEWD:=RULEWD+DOGLUE(THISBOX,P); IF MEM[P].HH.B1>=100 THEN BEGIN TEMPPTR:=MEM[P+1].HH.RH; IF MEM[TEMPPTR].HH.B0=2 THEN BEGIN DELETEGLUEREF(G);FREENODE(P,2); P:=TEMPPTR;MEM[P+1].INT:=RULEWD;END;END;END;{:1459}{1460:} 6:BEGIN FLUSHNODELIST(MEM[P+1].HH.RH);TEMPPTR:=P;P:=GETAVAIL; MEM[P]:=MEM[TEMPPTR+1];MEM[P].HH.RH:=Q;FREENODE(TEMPPTR,2);GOTO 21;END; {:1460}{1461:}9:BEGIN RULEWD:=MEM[P+1].INT; IF ODD(MEM[P].HH.B1)THEN IF MEM[LRPTR].HH.LH<>(4*(MEM[P].HH.B1 DIV 4)+3) THEN BEGIN MEM[P].HH.B0:=11;LRPROBLEMS:=LRPROBLEMS+1; END ELSE BEGIN BEGIN TEMPPTR:=LRPTR;LRPTR:=MEM[TEMPPTR].HH.RH; BEGIN MEM[TEMPPTR].HH.RH:=AVAIL;AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END; END;IF N>0 THEN BEGIN N:=N-1;MEM[P].HH.B1:=MEM[P].HH.B1-1; END ELSE BEGIN MEM[P].HH.B0:=11;IF M>0 THEN M:=M-1 ELSE{1462:} BEGIN FREENODE(P,2);MEM[T].HH.RH:=Q;MEM[T+1].INT:=RULEWD; MEM[T+2].INT:=-CURH-RULEWD;GOTO 30;END{:1462};END; END ELSE BEGIN BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=(4*(MEM[P].HH.B1 DIV 4)+3); MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR;END; IF(N>0)OR((MEM[P].HH.B1 DIV 8)<>CURDIR)THEN BEGIN N:=N+1; MEM[P].HH.B1:=MEM[P].HH.B1+1;END ELSE BEGIN MEM[P].HH.B0:=11;M:=M+1;END; END;END;{:1461}14:CONFUSION(1373);OTHERWISE GOTO 15 END; CURH:=CURH+RULEWD;15:MEM[P].HH.RH:=L; IF MEM[P].HH.B0=11 THEN IF(RULEWD=0)OR(L=0)THEN BEGIN FREENODE(P,2); P:=L;END;L:=P;P:=Q;END{:1458}{:1457}; IF(T=0)AND(M=0)AND(N=0)THEN GOTO 30;P:=NEWMATH(0,MEM[LRPTR].HH.LH); LRPROBLEMS:=LRPROBLEMS+10000;END;30:REVERSE:=L;END;{:1456} PROCEDURE HLISTOUT;LABEL 21,13,14,15;VAR BASELINE:SCALED; LEFTEDGE:SCALED;SAVEH,SAVEV:SCALED;THISBOX:HALFWORD;GSIGN:0..2; P:HALFWORD;SAVELOC:INTEGER;LEADERBOX:HALFWORD;LEADERWD:SCALED;LX:SCALED; OUTERDOINGLEADERS:BOOLEAN;EDGE:SCALED;PREVP:HALFWORD; BEGIN THISBOX:=TEMPPTR;GSIGN:=MEM[THISBOX+5].HH.B0; P:=MEM[THISBOX+5].HH.RH;CURS:=CURS+1; IF CURS>0 THEN BEGIN DBUFFER.B[DVIPTR]:=141;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;IF CURS>MAXPUSH THEN MAXPUSH:=CURS; SAVELOC:=DVIOFFSET+DVIPTR;BASELINE:=CURV;PREVP:=THISBOX+5; IF(ETEXMODE=1)THEN BEGIN{1446:}BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=0;MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR; END{:1446}; IF MEM[THISBOX].HH.B1=2 THEN IF CURDIR=1 THEN BEGIN CURDIR:=0; CURH:=CURH-MEM[THISBOX+1].INT;END ELSE MEM[THISBOX].HH.B1:=0; IF(CURDIR=1)AND(MEM[THISBOX].HH.B1<>1)THEN{1454:}BEGIN SAVEH:=CURH; TEMPPTR:=P;P:=NEWKERN(0);MEM[PREVP].HH.RH:=P;CURH:=0; MEM[P].HH.RH:=REVERSE(THISBOX,0);MEM[P+1].INT:=-CURH;CURH:=SAVEH; MEM[THISBOX].HH.B1:=1;END{:1454};END;LEFTEDGE:=CURH;WHILE P<>0 DO{620:} 21:IF(P>=HIMEMMIN)THEN BEGIN IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH ,143);DVIH:=CURH;END;IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157); DVIV:=CURV;END;REPEAT F:=MEM[P].HH.B0;C:=MEM[P].HH.B1; IF F<>DVIF THEN{621:}BEGIN IF NOT FONTUSED[F]THEN BEGIN DVIFONTDEF(F); FONTUSED[F]:=TRUE;END;IF F<=64 THEN BEGIN DBUFFER.B[DVIPTR]:=F+170; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP; END ELSE BEGIN BEGIN DBUFFER.B[DVIPTR]:=235;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DBUFFER.B[DVIPTR]:=F-1; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;END;DVIF:=F; END{:621};IF C>=128 THEN BEGIN DBUFFER.B[DVIPTR]:=128;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;BEGIN DBUFFER.B[DVIPTR]:=C; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; CURH:=CURH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+C].QQQQ.B0].INT; PREVP:=MEM[PREVP].HH.RH;P:=MEM[P].HH.RH;UNTIL NOT(P>=HIMEMMIN); DVIH:=CURH;END ELSE{622:}BEGIN CASE MEM[P].HH.B0 OF 0,1:{623:} IF MEM[P+5].HH.RH=0 THEN CURH:=CURH+MEM[P+1].INT ELSE BEGIN SAVEH:=DVIH; SAVEV:=DVIV;CURV:=BASELINE+MEM[P+4].INT;TEMPPTR:=P; EDGE:=CURH+MEM[P+1].INT;IF CURDIR=1 THEN CURH:=EDGE; IF MEM[P].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT;DVIH:=SAVEH;DVIV:=SAVEV; CURH:=EDGE;CURV:=BASELINE;END{:623};2:BEGIN RULEHT:=MEM[P+3].INT; RULEDP:=MEM[P+2].INT;RULEWD:=MEM[P+1].INT;GOTO 14;END;8:{1367:} OUTWHAT(P){:1367};10:{625:}BEGIN G:=MEM[P+1].HH.LH;RULEWD:=MEM[G+1].INT; IF GSIGN<>0 THEN RULEWD:=RULEWD+DOGLUE(THISBOX,P); IF MEM[P].HH.B1>=100 THEN{626:}BEGIN LEADERBOX:=MEM[P+1].HH.RH; IF MEM[LEADERBOX].HH.B0=2 THEN BEGIN RULEHT:=MEM[LEADERBOX+3].INT; RULEDP:=MEM[LEADERBOX+2].INT;GOTO 14;END;LEADERWD:=MEM[LEADERBOX+1].INT; IF(LEADERWD>0)AND(RULEWD>0)THEN BEGIN RULEWD:=RULEWD+10; IF CURDIR=1 THEN CURH:=CURH-10;EDGE:=CURH+RULEWD;LX:=0;{627:} IF MEM[P].HH.B1=100 THEN BEGIN SAVEH:=CURH; CURH:=LEFTEDGE+LEADERWD*((CURH-LEFTEDGE)DIV LEADERWD); IF CURHDVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; SAVEV:=DVIV;IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH; END;SAVEH:=DVIH;TEMPPTR:=LEADERBOX;IF CURDIR=1 THEN CURH:=CURH+LEADERWD; OUTERDOINGLEADERS:=DOINGLEADERS;DOINGLEADERS:=TRUE; IF MEM[LEADERBOX].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT; DOINGLEADERS:=OUTERDOINGLEADERS;DVIV:=SAVEV;DVIH:=SAVEH;CURV:=BASELINE; CURH:=SAVEH+LEADERWD+LX;END{:628}; IF CURDIR=1 THEN CURH:=EDGE ELSE CURH:=EDGE-10;GOTO 15;END;END{:626}; GOTO 13;END{:625};11:CURH:=CURH+MEM[P+1].INT; 9:BEGIN IF(ETEXMODE=1)THEN{1450:} BEGIN IF ODD(MEM[P].HH.B1)THEN IF MEM[LRPTR].HH.LH=(4*(MEM[P].HH.B1 DIV 4)+3)THEN BEGIN TEMPPTR:=LRPTR;LRPTR:=MEM[TEMPPTR].HH.RH; BEGIN MEM[TEMPPTR].HH.RH:=AVAIL;AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END; END ELSE BEGIN IF MEM[P].HH.B1>4 THEN LRPROBLEMS:=LRPROBLEMS+1; END ELSE BEGIN BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=(4*(MEM[P].HH.B1 DIV 4)+3); MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR;END; IF(MEM[P].HH.B1 DIV 8)<>CURDIR THEN{1455:}BEGIN SAVEH:=CURH; TEMPPTR:=MEM[P].HH.RH;RULEWD:=MEM[P+1].INT;FREENODE(P,2); CURDIR:=1-CURDIR;P:=NEWEDGE(CURDIR,RULEWD);MEM[PREVP].HH.RH:=P; CURH:=CURH-LEFTEDGE+RULEWD; MEM[P].HH.RH:=REVERSE(THISBOX,NEWEDGE(1-CURDIR,0));MEM[P+2].INT:=CURH; CURDIR:=1-CURDIR;CURH:=SAVEH;GOTO 21;END{:1455};END;MEM[P].HH.B0:=11; END{:1450};CURH:=CURH+MEM[P+1].INT;END;6:{652:} BEGIN MEM[327132]:=MEM[P+1];MEM[327132].HH.RH:=MEM[P].HH.RH;P:=327132; GOTO 21;END{:652};{1453:}14:BEGIN CURH:=CURH+MEM[P+1].INT; LEFTEDGE:=CURH+MEM[P+2].INT;CURDIR:=MEM[P].HH.B1;END;{:1453} OTHERWISE END;GOTO 15;14:{624:} IF(RULEHT=-1073741824)THEN RULEHT:=MEM[THISBOX+3].INT; IF(RULEDP=-1073741824)THEN RULEDP:=MEM[THISBOX+2].INT; RULEHT:=RULEHT+RULEDP; IF(RULEHT>0)AND(RULEWD>0)THEN BEGIN IF CURH<>DVIH THEN BEGIN MOVEMENT( CURH-DVIH,143);DVIH:=CURH;END;CURV:=BASELINE+RULEDP; IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; BEGIN DBUFFER.B[DVIPTR]:=132;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(RULEHT);DVIFOUR(RULEWD); CURV:=BASELINE;DVIH:=DVIH+RULEWD;END{:624};13:CURH:=CURH+RULEWD; 15:PREVP:=P;P:=MEM[P].HH.RH;END{:622}{:620}; IF(ETEXMODE=1)THEN BEGIN{1451:} BEGIN WHILE MEM[LRPTR].HH.LH<>0 DO BEGIN IF MEM[LRPTR].HH.LH>4 THEN LRPROBLEMS:=LRPROBLEMS+10000;BEGIN TEMPPTR:=LRPTR; LRPTR:=MEM[TEMPPTR].HH.RH;BEGIN MEM[TEMPPTR].HH.RH:=AVAIL; AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END;END;END;BEGIN TEMPPTR:=LRPTR; LRPTR:=MEM[TEMPPTR].HH.RH;BEGIN MEM[TEMPPTR].HH.RH:=AVAIL; AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END;END;END{:1451}; IF MEM[THISBOX].HH.B1=2 THEN CURDIR:=1;END;PRUNEMOVEMENTS(SAVELOC); IF CURS>0 THEN DVIPOP(SAVELOC);CURS:=CURS-1;END;{:619}{629:} PROCEDURE VLISTOUT;LABEL 13,14,15;VAR LEFTEDGE:SCALED;TOPEDGE:SCALED; SAVEH,SAVEV:SCALED;THISBOX:HALFWORD;GSIGN:0..2;P:HALFWORD; SAVELOC:INTEGER;LEADERBOX:HALFWORD;LEADERHT:SCALED;LX:SCALED; OUTERDOINGLEADERS:BOOLEAN;EDGE:SCALED;BEGIN THISBOX:=TEMPPTR; GSIGN:=MEM[THISBOX+5].HH.B0;P:=MEM[THISBOX+5].HH.RH;CURS:=CURS+1; IF CURS>0 THEN BEGIN DBUFFER.B[DVIPTR]:=141;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;IF CURS>MAXPUSH THEN MAXPUSH:=CURS; SAVELOC:=DVIOFFSET+DVIPTR;LEFTEDGE:=CURH;CURV:=CURV-MEM[THISBOX+3].INT; TOPEDGE:=CURV;WHILE P<>0 DO{630:} BEGIN IF(P>=HIMEMMIN)THEN CONFUSION(835)ELSE{631:} BEGIN CASE MEM[P].HH.B0 OF 0,1:{632:} IF MEM[P+5].HH.RH=0 THEN CURV:=CURV+MEM[P+3].INT+MEM[P+2].INT ELSE BEGIN CURV:=CURV+MEM[P+3].INT; IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; SAVEH:=DVIH;SAVEV:=DVIV; IF CURDIR=1 THEN CURH:=LEFTEDGE-MEM[P+4].INT ELSE CURH:=LEFTEDGE+MEM[P+4 ].INT;TEMPPTR:=P;IF MEM[P].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT; DVIH:=SAVEH;DVIV:=SAVEV;CURV:=SAVEV+MEM[P+2].INT;CURH:=LEFTEDGE; END{:632};2:BEGIN RULEHT:=MEM[P+3].INT;RULEDP:=MEM[P+2].INT; RULEWD:=MEM[P+1].INT;GOTO 14;END;8:{1366:}OUTWHAT(P){:1366};10:{634:} BEGIN G:=MEM[P+1].HH.LH;RULEHT:=MEM[G+1].INT; IF GSIGN<>0 THEN RULEHT:=RULEHT+DOGLUE(THISBOX,P); IF MEM[P].HH.B1>=100 THEN{635:}BEGIN LEADERBOX:=MEM[P+1].HH.RH; IF MEM[LEADERBOX].HH.B0=2 THEN BEGIN RULEWD:=MEM[LEADERBOX+1].INT; RULEDP:=0;GOTO 14;END; LEADERHT:=MEM[LEADERBOX+3].INT+MEM[LEADERBOX+2].INT; IF(LEADERHT>0)AND(RULEHT>0)THEN BEGIN RULEHT:=RULEHT+10; EDGE:=CURV+RULEHT;LX:=0;{636:} IF MEM[P].HH.B1=100 THEN BEGIN SAVEV:=CURV; CURV:=TOPEDGE+LEADERHT*((CURV-TOPEDGE)DIV LEADERHT); IF CURVDVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH;END; SAVEH:=DVIH;CURV:=CURV+MEM[LEADERBOX+3].INT; IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; SAVEV:=DVIV;TEMPPTR:=LEADERBOX;OUTERDOINGLEADERS:=DOINGLEADERS; DOINGLEADERS:=TRUE; IF MEM[LEADERBOX].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT; DOINGLEADERS:=OUTERDOINGLEADERS;DVIV:=SAVEV;DVIH:=SAVEH;CURH:=LEFTEDGE; CURV:=SAVEV-MEM[LEADERBOX+3].INT+LEADERHT+LX;END{:637};CURV:=EDGE-10; GOTO 15;END;END{:635};GOTO 13;END{:634};11:CURV:=CURV+MEM[P+1].INT; OTHERWISE END;GOTO 15;14:{633:} IF(RULEWD=-1073741824)THEN RULEWD:=MEM[THISBOX+1].INT; RULEHT:=RULEHT+RULEDP;CURV:=CURV+RULEHT; IF(RULEHT>0)AND(RULEWD>0)THEN BEGIN IF CURDIR=1 THEN CURH:=CURH-RULEWD; IF CURH<>DVIH THEN BEGIN MOVEMENT(CURH-DVIH,143);DVIH:=CURH;END; IF CURV<>DVIV THEN BEGIN MOVEMENT(CURV-DVIV,157);DVIV:=CURV;END; BEGIN DBUFFER.B[DVIPTR]:=137;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(RULEHT);DVIFOUR(RULEWD); CURH:=LEFTEDGE;END;GOTO 15{:633};13:CURV:=CURV+RULEHT;END{:631}; 15:P:=MEM[P].HH.RH;END{:630};PRUNEMOVEMENTS(SAVELOC); IF CURS>0 THEN DVIPOP(SAVELOC);CURS:=CURS-1;END;{:629}{638:} PROCEDURE SHIPOUT(P:HALFWORD);LABEL 30;VAR PAGELOC:INTEGER;J,K:0..9; S:POOLPOINTER;OLDSETTING:0..22; BEGIN IF EQTB[13202].INT>0 THEN BEGIN PRINTNL(339);PRINTLN;PRINT(836); END;IF TERMOFFSET>MAXPRINTLINE-9 THEN PRINTLN ELSE IF(TERMOFFSET>0)OR( FILEOFFSET>0)THEN PRINTCHAR(32);PRINTCHAR(91);J:=9; WHILE(EQTB[13233+J].INT=0)AND(J>0)DO J:=J-1; FOR K:=0 TO J DO BEGIN PRINTINT(EQTB[13233+K].INT); IF K0 THEN BEGIN PRINTCHAR(93);BEGINDIAGNOSTIC; SHOWBOX(P);ENDDIAGNOSTIC(TRUE);END;{640:}{641:} IF(MEM[P+3].INT>1073741823)OR(MEM[P+2].INT>1073741823)OR(MEM[P+3].INT+ MEM[P+2].INT+EQTB[13764].INT>1073741823)OR(MEM[P+1].INT+EQTB[13763].INT> 1073741823)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(840);END; BEGIN HELPPTR:=2;HELPLINE[1]:=841;HELPLINE[0]:=842;END;ERROR; IF EQTB[13202].INT<=0 THEN BEGIN BEGINDIAGNOSTIC;PRINTNL(843); SHOWBOX(P);ENDDIAGNOSTIC(TRUE);END;GOTO 30;END; IF MEM[P+3].INT+MEM[P+2].INT+EQTB[13764].INT>MAXV THEN MAXV:=MEM[P+3]. INT+MEM[P+2].INT+EQTB[13764].INT; IF MEM[P+1].INT+EQTB[13763].INT>MAXH THEN MAXH:=MEM[P+1].INT+EQTB[13763] .INT{:641};{617:}DVIH:=0;DVIV:=0;CURH:=EQTB[13763].INT;DVIF:=0; IF OUTPUTFILENAME=0 THEN BEGIN IF JOBNAME=0 THEN OPENLOGFILE; PACKJOBNAME(801); IF PACKDEFAULTNAME(DVIQUAL,DVIFNAME,DVIFLEN)THEN BEGIN WHILE NOT BOPENOUT(DVIFILE)DO PROMPTFILENAME(802,801); OUTPUTFILENAME:=BMAKENAMESTRING(DVIFILE);END ELSE OUTPUTFILENAME:=46; CLEARDEFAULTNAME;END; IF TOTALPAGES=0 THEN BEGIN BEGIN DBUFFER.B[DVIPTR]:=247; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=2;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(25400000); DVIFOUR(473628672);PREPAREMAG;DVIFOUR(EQTB[13185].INT); OLDSETTING:=SELECTOR;SELECTOR:=21;PRINT(834);PRINTINT(EQTB[13191].INT); PRINTCHAR(46);PRINTTWO(EQTB[13190].INT);PRINTCHAR(46); PRINTTWO(EQTB[13189].INT);PRINTCHAR(58); PRINTTWO(EQTB[13188].INT DIV 60);PRINTTWO(EQTB[13188].INT MOD 60); SELECTOR:=OLDSETTING; BEGIN DBUFFER.B[DVIPTR]:=(POOLPTR-STRSTART[STRPTR]);DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; FOR S:=STRSTART[STRPTR]TO POOLPTR-1 DO BEGIN DBUFFER.B[DVIPTR]:=STRPOOL[ S];DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END; POOLPTR:=STRSTART[STRPTR];END{:617};PAGELOC:=DVIOFFSET+DVIPTR; BEGIN DBUFFER.B[DVIPTR]:=139;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; FOR K:=0 TO 9 DO DVIFOUR(EQTB[13233+K].INT);DVIFOUR(LASTBOP); LASTBOP:=PAGELOC;CURV:=MEM[P+3].INT+EQTB[13764].INT;TEMPPTR:=P; IF MEM[P].HH.B0=1 THEN VLISTOUT ELSE HLISTOUT; BEGIN DBUFFER.B[DVIPTR]:=140;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;TOTALPAGES:=TOTALPAGES+1;CURS:=-1; 30:{:640};IF(ETEXMODE=1)THEN{1463:} BEGIN IF LRPROBLEMS>0 THEN BEGIN{1449:}BEGIN PRINTLN;PRINTNL(1370); PRINTINT(LRPROBLEMS DIV 10000);PRINT(1371); PRINTINT(LRPROBLEMS MOD 10000);PRINT(1372);LRPROBLEMS:=0;END{:1449}; PRINTCHAR(41);PRINTLN;END;IF(LRPTR<>0)OR(CURDIR<>0)THEN CONFUSION(1374); END{:1463};IF EQTB[13202].INT<=0 THEN PRINTCHAR(93);DEADCYCLES:=0; IF ODD(SELECTOR)THEN WRITELN(TERMOUT);{639:} IF EQTB[13199].INT>1 THEN BEGIN PRINTNL(837);PRINTINT(VARUSED); PRINTCHAR(38);PRINTINT(DYNUSED);PRINTCHAR(59);END;FLUSHNODELIST(P); IF EQTB[13199].INT>1 THEN BEGIN PRINT(838);PRINTINT(VARUSED); PRINTCHAR(38);PRINTINT(DYNUSED);PRINT(839); PRINTINT(HIMEMMIN-LOMEMMAX-1);PRINTLN;END;{:639};END;{:638}{645:} PROCEDURE SCANSPEC(C:GROUPCODE;THREECODES:BOOLEAN);LABEL 40; VAR S:INTEGER;SPECCODE:0..1; BEGIN IF THREECODES THEN S:=SAVESTACK[SAVEPTR+0].INT; IF SCANKEYWORD(850)THEN SPECCODE:=0 ELSE IF SCANKEYWORD(851)THEN SPECCODE:=1 ELSE BEGIN SPECCODE:=1;CURVAL:=0;GOTO 40;END; SCANDIMEN(FALSE,FALSE,FALSE); 40:IF THREECODES THEN BEGIN SAVESTACK[SAVEPTR+0].INT:=S; SAVEPTR:=SAVEPTR+1;END;SAVESTACK[SAVEPTR+0].INT:=SPECCODE; SAVESTACK[SAVEPTR+1].INT:=CURVAL;SAVEPTR:=SAVEPTR+2;NEWSAVELEVEL(C); SCANLEFTBRACE;END;{:645}{649:}FUNCTION HPACK(P:HALFWORD;W:SCALED; M:SMALLNUMBER):HALFWORD;LABEL 21,50,10;VAR R:HALFWORD;Q:HALFWORD; H,D,X:SCALED;S:SCALED;G:HALFWORD;O:GLUEORD;F:INTERNALFONTNUMBER; I:FOURQUARTERS;HD:EIGHTBITS;BEGIN LASTBADNESS:=0;R:=GETNODE(7); MEM[R].HH.B0:=0;MEM[R].HH.B1:=0;MEM[R+4].INT:=0;Q:=R+5;MEM[Q].HH.RH:=P; H:=0;{650:}D:=0;X:=0;TOTALSTRETCH[0]:=0;TOTALSHRINK[0]:=0; TOTALSTRETCH[1]:=0;TOTALSHRINK[1]:=0;TOTALSTRETCH[2]:=0; TOTALSHRINK[2]:=0;TOTALSTRETCH[3]:=0;TOTALSHRINK[3]:=0{:650}; IF(EQTB[13232].INT>0)THEN{1446:}BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=0;MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR; END{:1446};WHILE P<>0 DO{651:}BEGIN 21:WHILE(P>=HIMEMMIN)DO{654:} BEGIN F:=MEM[P].HH.B0;I:=FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ; HD:=I.B1;X:=X+FONTINFO[WIDTHBASE[F]+I.B0].INT; S:=FONTINFO[HEIGHTBASE[F]+(HD)DIV 16].INT;IF S>H THEN H:=S; S:=FONTINFO[DEPTHBASE[F]+(HD)MOD 16].INT;IF S>D THEN D:=S; P:=MEM[P].HH.RH;END{:654}; IF P<>0 THEN BEGIN CASE MEM[P].HH.B0 OF 0,1,2,13:{653:} BEGIN X:=X+MEM[P+1].INT; IF MEM[P].HH.B0>=2 THEN S:=0 ELSE S:=MEM[P+4].INT; IF MEM[P+3].INT-S>H THEN H:=MEM[P+3].INT-S; IF MEM[P+2].INT+S>D THEN D:=MEM[P+2].INT+S;END{:653}; 3,4,5:IF ADJUSTTAIL<>0 THEN{655:} BEGIN WHILE MEM[Q].HH.RH<>P DO Q:=MEM[Q].HH.RH; IF MEM[P].HH.B0=5 THEN BEGIN MEM[ADJUSTTAIL].HH.RH:=MEM[P+1].INT; WHILE MEM[ADJUSTTAIL].HH.RH<>0 DO ADJUSTTAIL:=MEM[ADJUSTTAIL].HH.RH; P:=MEM[P].HH.RH;FREENODE(MEM[Q].HH.RH,2); END ELSE BEGIN MEM[ADJUSTTAIL].HH.RH:=P;ADJUSTTAIL:=P;P:=MEM[P].HH.RH; END;MEM[Q].HH.RH:=P;P:=Q;END{:655};8:{1360:}{:1360};10:{656:} BEGIN G:=MEM[P+1].HH.LH;X:=X+MEM[G+1].INT;O:=MEM[G].HH.B0; TOTALSTRETCH[O]:=TOTALSTRETCH[O]+MEM[G+2].INT;O:=MEM[G].HH.B1; TOTALSHRINK[O]:=TOTALSHRINK[O]+MEM[G+3].INT; IF MEM[P].HH.B1>=100 THEN BEGIN G:=MEM[P+1].HH.RH; IF MEM[G+3].INT>H THEN H:=MEM[G+3].INT; IF MEM[G+2].INT>D THEN D:=MEM[G+2].INT;END;END{:656}; 11:X:=X+MEM[P+1].INT;9:BEGIN X:=X+MEM[P+1].INT; IF(EQTB[13232].INT>0)THEN{1447:} IF ODD(MEM[P].HH.B1)THEN IF MEM[LRPTR].HH.LH=(4*(MEM[P].HH.B1 DIV 4)+3) THEN BEGIN TEMPPTR:=LRPTR;LRPTR:=MEM[TEMPPTR].HH.RH; BEGIN MEM[TEMPPTR].HH.RH:=AVAIL;AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END; END ELSE BEGIN LRPROBLEMS:=LRPROBLEMS+1;MEM[P].HH.B0:=11; MEM[P].HH.B1:=1;END ELSE BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=(4*(MEM[P].HH.B1 DIV 4)+3); MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR;END{:1447};END;6:{652:} BEGIN MEM[327132]:=MEM[P+1];MEM[327132].HH.RH:=MEM[P].HH.RH;P:=327132; GOTO 21;END{:652};OTHERWISE END;P:=MEM[P].HH.RH;END;END{:651}; IF ADJUSTTAIL<>0 THEN MEM[ADJUSTTAIL].HH.RH:=0;MEM[R+3].INT:=H; MEM[R+2].INT:=D;{657:}IF M=1 THEN W:=X+W;MEM[R+1].INT:=W;X:=W-X; IF X=0 THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0;MEM[R+6].GR:=0.0; GOTO 10;END ELSE IF X>0 THEN{658:}BEGIN{659:} IF TOTALSTRETCH[3]<>0 THEN O:=3 ELSE IF TOTALSTRETCH[2]<>0 THEN O:=2 ELSE IF TOTALSTRETCH[1]<>0 THEN O:=1 ELSE O:=0{:659};MEM[R+5].HH.B1:=O; MEM[R+5].HH.B0:=1; IF TOTALSTRETCH[O]<>0 THEN MEM[R+6].GR:=SNGL(1.0D0*X/TOTALSTRETCH[O]) ELSE BEGIN MEM[R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END; IF O=0 THEN IF MEM[R+5].HH.RH<>0 THEN{660:} BEGIN LASTBADNESS:=BADNESS(X,TOTALSTRETCH[0]); IF LASTBADNESS>EQTB[13194].INT THEN BEGIN PRINTLN; IF LASTBADNESS>100 THEN PRINTNL(852)ELSE PRINTNL(853);PRINT(854); PRINTINT(LASTBADNESS);GOTO 50;END;END{:660};GOTO 10;END{:658}ELSE{664:} BEGIN{665:} IF TOTALSHRINK[3]<>0 THEN O:=3 ELSE IF TOTALSHRINK[2]<>0 THEN O:=2 ELSE IF TOTALSHRINK[1]<>0 THEN O:=1 ELSE O:=0{:665};MEM[R+5].HH.B1:=O; MEM[R+5].HH.B0:=2; IF TOTALSHRINK[O]<>0 THEN MEM[R+6].GR:=SNGL(1.0D0*(-X)/TOTALSHRINK[O]) ELSE BEGIN MEM[R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END; IF(TOTALSHRINK[O]<-X)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN BEGIN LASTBADNESS:=1000000;MEM[R+6].GR:=1.0;{666:} IF(-X-TOTALSHRINK[0]>EQTB[13753].INT)OR(EQTB[13194].INT<100)THEN BEGIN IF(EQTB[13761].INT>0)AND(-X-TOTALSHRINK[0]>EQTB[13753].INT)THEN BEGIN WHILE MEM[Q].HH.RH<>0 DO Q:=MEM[Q].HH.RH;MEM[Q].HH.RH:=NEWRULE; MEM[MEM[Q].HH.RH+1].INT:=EQTB[13761].INT;END;PRINTLN;PRINTNL(860); PRINTSCALED(-X-TOTALSHRINK[0]);PRINT(861);GOTO 50;END{:666}; END ELSE IF O=0 THEN IF MEM[R+5].HH.RH<>0 THEN{667:} BEGIN LASTBADNESS:=BADNESS(-X,TOTALSHRINK[0]); IF LASTBADNESS>EQTB[13194].INT THEN BEGIN PRINTLN;PRINTNL(862); PRINTINT(LASTBADNESS);GOTO 50;END;END{:667};GOTO 10;END{:664}{:657}; 50:{663:} IF OUTPUTACTIVE THEN PRINT(855)ELSE BEGIN IF PACKBEGINLINE<>0 THEN BEGIN IF PACKBEGINLINE>0 THEN PRINT(856)ELSE PRINT(857); PRINTINT(ABS(PACKBEGINLINE));PRINT(858);END ELSE PRINT(859); PRINTINT(LINE);END;PRINTLN;FONTINSHORTDISPLAY:=0; SHORTDISPLAY(MEM[R+5].HH.RH);PRINTLN;BEGINDIAGNOSTIC;SHOWBOX(R); ENDDIAGNOSTIC(TRUE){:663};10:IF(EQTB[13232].INT>0)THEN{1448:} BEGIN IF MEM[LRPTR].HH.LH<>0 THEN BEGIN WHILE MEM[Q].HH.RH<>0 DO Q:=MEM[ Q].HH.RH;REPEAT TEMPPTR:=Q;Q:=NEWMATH(0,MEM[LRPTR].HH.LH); MEM[TEMPPTR].HH.RH:=Q;LRPROBLEMS:=LRPROBLEMS+10000;BEGIN TEMPPTR:=LRPTR; LRPTR:=MEM[TEMPPTR].HH.RH;BEGIN MEM[TEMPPTR].HH.RH:=AVAIL; AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END;END;UNTIL MEM[LRPTR].HH.LH=0;END; IF LRPROBLEMS>0 THEN BEGIN{1449:}BEGIN PRINTLN;PRINTNL(1370); PRINTINT(LRPROBLEMS DIV 10000);PRINT(1371); PRINTINT(LRPROBLEMS MOD 10000);PRINT(1372);LRPROBLEMS:=0;END{:1449}; GOTO 50;END;BEGIN TEMPPTR:=LRPTR;LRPTR:=MEM[TEMPPTR].HH.RH; BEGIN MEM[TEMPPTR].HH.RH:=AVAIL;AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END; END;IF LRPTR<>0 THEN CONFUSION(1369);END{:1448};HPACK:=R;END;{:649} {668:}FUNCTION VPACKAGE(P:HALFWORD;H:SCALED;M:SMALLNUMBER; L:SCALED):HALFWORD;LABEL 50,10;VAR R:HALFWORD;W,D,X:SCALED;S:SCALED; G:HALFWORD;O:GLUEORD;BEGIN LASTBADNESS:=0;R:=GETNODE(7);MEM[R].HH.B0:=1; MEM[R].HH.B1:=0;MEM[R+4].INT:=0;MEM[R+5].HH.RH:=P;W:=0;{650:}D:=0;X:=0; TOTALSTRETCH[0]:=0;TOTALSHRINK[0]:=0;TOTALSTRETCH[1]:=0; TOTALSHRINK[1]:=0;TOTALSTRETCH[2]:=0;TOTALSHRINK[2]:=0; TOTALSTRETCH[3]:=0;TOTALSHRINK[3]:=0{:650};WHILE P<>0 DO{669:} BEGIN IF(P>=HIMEMMIN)THEN CONFUSION(863)ELSE CASE MEM[P].HH.B0 OF 0,1,2, 13:{670:}BEGIN X:=X+D+MEM[P+3].INT;D:=MEM[P+2].INT; IF MEM[P].HH.B0>=2 THEN S:=0 ELSE S:=MEM[P+4].INT; IF MEM[P+1].INT+S>W THEN W:=MEM[P+1].INT+S;END{:670};8:{1359:}{:1359}; 10:{671:}BEGIN X:=X+D;D:=0;G:=MEM[P+1].HH.LH;X:=X+MEM[G+1].INT; O:=MEM[G].HH.B0;TOTALSTRETCH[O]:=TOTALSTRETCH[O]+MEM[G+2].INT; O:=MEM[G].HH.B1;TOTALSHRINK[O]:=TOTALSHRINK[O]+MEM[G+3].INT; IF MEM[P].HH.B1>=100 THEN BEGIN G:=MEM[P+1].HH.RH; IF MEM[G+1].INT>W THEN W:=MEM[G+1].INT;END;END{:671}; 11:BEGIN X:=X+D+MEM[P+1].INT;D:=0;END;OTHERWISE END;P:=MEM[P].HH.RH; END{:669};MEM[R+1].INT:=W;IF D>L THEN BEGIN X:=X+D-L;MEM[R+2].INT:=L; END ELSE MEM[R+2].INT:=D;{672:}IF M=1 THEN H:=X+H;MEM[R+3].INT:=H; X:=H-X;IF X=0 THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0; MEM[R+6].GR:=0.0;GOTO 10;END ELSE IF X>0 THEN{673:}BEGIN{659:} IF TOTALSTRETCH[3]<>0 THEN O:=3 ELSE IF TOTALSTRETCH[2]<>0 THEN O:=2 ELSE IF TOTALSTRETCH[1]<>0 THEN O:=1 ELSE O:=0{:659};MEM[R+5].HH.B1:=O; MEM[R+5].HH.B0:=1; IF TOTALSTRETCH[O]<>0 THEN MEM[R+6].GR:=SNGL(1.0D0*X/TOTALSTRETCH[O]) ELSE BEGIN MEM[R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END; IF O=0 THEN IF MEM[R+5].HH.RH<>0 THEN{674:} BEGIN LASTBADNESS:=BADNESS(X,TOTALSTRETCH[0]); IF LASTBADNESS>EQTB[13195].INT THEN BEGIN PRINTLN; IF LASTBADNESS>100 THEN PRINTNL(852)ELSE PRINTNL(853);PRINT(864); PRINTINT(LASTBADNESS);GOTO 50;END;END{:674};GOTO 10;END{:673}ELSE{676:} BEGIN{665:} IF TOTALSHRINK[3]<>0 THEN O:=3 ELSE IF TOTALSHRINK[2]<>0 THEN O:=2 ELSE IF TOTALSHRINK[1]<>0 THEN O:=1 ELSE O:=0{:665};MEM[R+5].HH.B1:=O; MEM[R+5].HH.B0:=2; IF TOTALSHRINK[O]<>0 THEN MEM[R+6].GR:=SNGL(1.0D0*(-X)/TOTALSHRINK[O]) ELSE BEGIN MEM[R+5].HH.B0:=0;MEM[R+6].GR:=0.0;END; IF(TOTALSHRINK[O]<-X)AND(O=0)AND(MEM[R+5].HH.RH<>0)THEN BEGIN LASTBADNESS:=1000000;MEM[R+6].GR:=1.0;{677:} IF(-X-TOTALSHRINK[0]>EQTB[13754].INT)OR(EQTB[13195].INT<100)THEN BEGIN PRINTLN;PRINTNL(865);PRINTSCALED(-X-TOTALSHRINK[0]);PRINT(866);GOTO 50; END{:677};END ELSE IF O=0 THEN IF MEM[R+5].HH.RH<>0 THEN{678:} BEGIN LASTBADNESS:=BADNESS(-X,TOTALSHRINK[0]); IF LASTBADNESS>EQTB[13195].INT THEN BEGIN PRINTLN;PRINTNL(867); PRINTINT(LASTBADNESS);GOTO 50;END;END{:678};GOTO 10;END{:676}{:672}; 50:{675:} IF OUTPUTACTIVE THEN PRINT(855)ELSE BEGIN IF PACKBEGINLINE<>0 THEN BEGIN PRINT(857);PRINTINT(ABS(PACKBEGINLINE));PRINT(858);END ELSE PRINT(859); PRINTINT(LINE);PRINTLN;END;BEGINDIAGNOSTIC;SHOWBOX(R); ENDDIAGNOSTIC(TRUE){:675};10:VPACKAGE:=R;END;{:668}{679:} PROCEDURE APPENDTOVLIST(B:HALFWORD);VAR D:SCALED;P:HALFWORD; BEGIN IF CURLIST.AUXFIELD.INT>-65536000 THEN BEGIN D:=MEM[EQTB[10783].HH .RH+1].INT-CURLIST.AUXFIELD.INT-MEM[B+3].INT; IF D0)OR(X<>0)THEN BEGIN Z:=Z+S+16;REPEAT Z:=Z-16; G:=EQTB[11840+Z].HH.RH;IF G<>0 THEN{708:}BEGIN Y:=X; IF(Y>=FONTBC[G])AND(Y<=FONTEC[G])THEN BEGIN 22:Q:=FONTINFO[CHARBASE[G]+Y ].QQQQ;IF(Q.B0>0)THEN BEGIN IF((Q.B2)MOD 4)=3 THEN BEGIN F:=G;C:=Y; GOTO 40;END;HD:=Q.B1; U:=FONTINFO[HEIGHTBASE[G]+(HD)DIV 16].INT+FONTINFO[DEPTHBASE[G]+(HD)MOD 16].INT;IF U>W THEN BEGIN F:=G;C:=Y;W:=U;IF U>=V THEN GOTO 40;END; IF((Q.B2)MOD 4)=2 THEN BEGIN Y:=Q.B3;GOTO 22;END;END;END;END{:708}; UNTIL Z<16;END{:707};IF LARGEATTEMPT THEN GOTO 40;LARGEATTEMPT:=TRUE; Z:=MEM[D].QQQQ.B2;X:=MEM[D].QQQQ.B3;END;40:IF F<>0 THEN{710:} IF((Q.B2)MOD 4)=3 THEN{713:}BEGIN B:=NEWNULLBOX;MEM[B].HH.B0:=1; R:=FONTINFO[EXTENBASE[F]+Q.B3].QQQQ;{714:}C:=R.B3; U:=HEIGHTPLUSDEPTH(F,C);W:=0;Q:=FONTINFO[CHARBASE[F]+C].QQQQ; MEM[B+1].INT:=FONTINFO[WIDTHBASE[F]+Q.B0].INT+FONTINFO[ITALICBASE[F]+(Q. B2)DIV 4].INT;C:=R.B2;IF C<>0 THEN W:=W+HEIGHTPLUSDEPTH(F,C);C:=R.B1; IF C<>0 THEN W:=W+HEIGHTPLUSDEPTH(F,C);C:=R.B0; IF C<>0 THEN W:=W+HEIGHTPLUSDEPTH(F,C);N:=0; IF U>0 THEN WHILE W0 THEN W:=W+U; END{:714};C:=R.B2;IF C<>0 THEN STACKINTOBOX(B,F,C);C:=R.B3; FOR M:=1 TO N DO STACKINTOBOX(B,F,C);C:=R.B1; IF C<>0 THEN BEGIN STACKINTOBOX(B,F,C);C:=R.B3; FOR M:=1 TO N DO STACKINTOBOX(B,F,C);END;C:=R.B0; IF C<>0 THEN STACKINTOBOX(B,F,C);MEM[B+2].INT:=W-MEM[B+3].INT;END{:713} ELSE B:=CHARBOX(F,C){:710}ELSE BEGIN B:=NEWNULLBOX; MEM[B+1].INT:=EQTB[13756].INT;END; MEM[B+4].INT:=HALF(MEM[B+3].INT-MEM[B+2].INT)-FONTINFO[22+PARAMBASE[EQTB [11842+S].HH.RH]].INT;VARDELIMITER:=B;END;{:706}{715:} FUNCTION REBOX(B:HALFWORD;W:SCALED):HALFWORD;VAR P:HALFWORD; F:INTERNALFONTNUMBER;V:SCALED; BEGIN IF(MEM[B+1].INT<>W)AND(MEM[B+5].HH.RH<>0)THEN BEGIN IF MEM[B].HH. B0=1 THEN B:=HPACK(B,0,1);P:=MEM[B+5].HH.RH; IF((P>=HIMEMMIN))AND(MEM[P].HH.RH=0)THEN BEGIN F:=MEM[P].HH.B0; V:=FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B0].INT ;IF V<>MEM[B+1].INT THEN MEM[P].HH.RH:=NEWKERN(MEM[B+1].INT-V);END; FREENODE(B,7);B:=NEWGLUE(12);MEM[B].HH.RH:=P; WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;MEM[P].HH.RH:=NEWGLUE(12); REBOX:=HPACK(B,W,0);END ELSE BEGIN MEM[B+1].INT:=W;REBOX:=B;END;END; {:715}{716:}FUNCTION MATHGLUE(G:HALFWORD;M:SCALED):HALFWORD; VAR P:HALFWORD;N:INTEGER;F:SCALED;BEGIN N:=XOVERN(M,65536);F:=REMAINDER; IF F<0 THEN BEGIN N:=N-1;F:=F+65536;END;P:=GETNODE(4); MEM[P+1].INT:=MULTANDADD(N,MEM[G+1].INT,XNOVERD(MEM[G+1].INT,F,65536), 1073741823);MEM[P].HH.B0:=MEM[G].HH.B0; IF MEM[P].HH.B0=0 THEN MEM[P+2].INT:=MULTANDADD(N,MEM[G+2].INT,XNOVERD( MEM[G+2].INT,F,65536),1073741823)ELSE MEM[P+2].INT:=MEM[G+2].INT; MEM[P].HH.B1:=MEM[G].HH.B1; IF MEM[P].HH.B1=0 THEN MEM[P+3].INT:=MULTANDADD(N,MEM[G+3].INT,XNOVERD( MEM[G+3].INT,F,65536),1073741823)ELSE MEM[P+3].INT:=MEM[G+3].INT; MATHGLUE:=P;END;{:716}{717:}PROCEDURE MATHKERN(P:HALFWORD;M:SCALED); VAR N:INTEGER;F:SCALED; BEGIN IF MEM[P].HH.B1=99 THEN BEGIN N:=XOVERN(M,65536);F:=REMAINDER; IF F<0 THEN BEGIN N:=N-1;F:=F+65536;END; MEM[P+1].INT:=MULTANDADD(N,MEM[P+1].INT,XNOVERD(MEM[P+1].INT,F,65536), 1073741823);MEM[P].HH.B1:=1;END;END;{:717}{718:}PROCEDURE FLUSHMATH; BEGIN FLUSHNODELIST(MEM[CURLIST.HEADFIELD].HH.RH); FLUSHNODELIST(CURLIST.AUXFIELD.INT);MEM[CURLIST.HEADFIELD].HH.RH:=0; CURLIST.TAILFIELD:=CURLIST.HEADFIELD;CURLIST.AUXFIELD.INT:=0;END;{:718} {720:}PROCEDURE MLISTTOHLIST;FORWARD;FUNCTION CLEANBOX(P:HALFWORD; S:SMALLNUMBER):HALFWORD;LABEL 40;VAR Q:HALFWORD;SAVESTYLE:SMALLNUMBER; X:HALFWORD;R:HALFWORD; BEGIN CASE MEM[P].HH.RH OF 1:BEGIN CURMLIST:=NEWNOAD; MEM[CURMLIST+1]:=MEM[P];END;2:BEGIN Q:=MEM[P].HH.LH;GOTO 40;END; 3:CURMLIST:=MEM[P].HH.LH;OTHERWISE BEGIN Q:=NEWNULLBOX;GOTO 40;END END; SAVESTYLE:=CURSTYLE;CURSTYLE:=S;MLISTPENALTIES:=FALSE;MLISTTOHLIST; Q:=MEM[327141].HH.RH;CURSTYLE:=SAVESTYLE;{703:} BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2) ;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT,18); END{:703}; 40:IF(Q>=HIMEMMIN)OR(Q=0)THEN X:=HPACK(Q,0,1)ELSE IF(MEM[Q].HH.RH=0)AND( MEM[Q].HH.B0<=1)AND(MEM[Q+4].INT=0)THEN X:=Q ELSE X:=HPACK(Q,0,1);{721:} Q:=MEM[X+5].HH.RH;IF(Q>=HIMEMMIN)THEN BEGIN R:=MEM[Q].HH.RH; IF R<>0 THEN IF MEM[R].HH.RH=0 THEN IF NOT(R>=HIMEMMIN)THEN IF MEM[R].HH .B0=11 THEN BEGIN FREENODE(R,2);MEM[Q].HH.RH:=0;END;END{:721}; CLEANBOX:=X;END;{:720}{722:}PROCEDURE FETCH(A:HALFWORD); BEGIN CURC:=MEM[A].HH.B1;CURF:=EQTB[11840+MEM[A].HH.B0+CURSIZE].HH.RH; IF CURF=0 THEN{723:}BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(339);END; PRINTSIZE(CURSIZE);PRINTCHAR(32);PRINTINT(MEM[A].HH.B0);PRINT(893); PRINT(CURC);PRINTCHAR(41);BEGIN HELPPTR:=4;HELPLINE[3]:=894; HELPLINE[2]:=895;HELPLINE[1]:=896;HELPLINE[0]:=897;END;ERROR; CURI:=NULLCHARACTER;MEM[A].HH.RH:=0;END{:723} ELSE BEGIN IF(CURC>=FONTBC[CURF])AND(CURC<=FONTEC[CURF])THEN CURI:= FONTINFO[CHARBASE[CURF]+CURC].QQQQ ELSE CURI:=NULLCHARACTER; IF NOT((CURI.B0>0))THEN BEGIN CHARWARNING(CURF,CURC);MEM[A].HH.RH:=0; END;END;END;{:722}{726:}{734:}PROCEDURE MAKEOVER(Q:HALFWORD); BEGIN MEM[Q+1].HH.LH:=OVERBAR(CLEANBOX(Q+1,2*(CURSTYLE DIV 2)+1),3* FONTINFO[8+PARAMBASE[EQTB[11843+CURSIZE].HH.RH]].INT,FONTINFO[8+ PARAMBASE[EQTB[11843+CURSIZE].HH.RH]].INT);MEM[Q+1].HH.RH:=2;END;{:734} {735:}PROCEDURE MAKEUNDER(Q:HALFWORD);VAR P,X,Y:HALFWORD;DELTA:SCALED; BEGIN X:=CLEANBOX(Q+1,CURSTYLE); P:=NEWKERN(3*FONTINFO[8+PARAMBASE[EQTB[11843+CURSIZE].HH.RH]].INT); MEM[X].HH.RH:=P; MEM[P].HH.RH:=FRACTIONRULE(FONTINFO[8+PARAMBASE[EQTB[11843+CURSIZE].HH. RH]].INT);Y:=VPACKAGE(X,0,1,1073741823); DELTA:=MEM[Y+3].INT+MEM[Y+2].INT+FONTINFO[8+PARAMBASE[EQTB[11843+CURSIZE ].HH.RH]].INT;MEM[Y+3].INT:=MEM[X+3].INT; MEM[Y+2].INT:=DELTA-MEM[Y+3].INT;MEM[Q+1].HH.LH:=Y;MEM[Q+1].HH.RH:=2; END;{:735}{736:}PROCEDURE MAKEVCENTER(Q:HALFWORD);VAR V:HALFWORD; DELTA:SCALED;BEGIN V:=MEM[Q+1].HH.LH; IF MEM[V].HH.B0<>1 THEN CONFUSION(543);DELTA:=MEM[V+3].INT+MEM[V+2].INT; MEM[V+3].INT:=FONTINFO[22+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT+HALF (DELTA);MEM[V+2].INT:=DELTA-MEM[V+3].INT;END;{:736}{737:} PROCEDURE MAKERADICAL(Q:HALFWORD);VAR X,Y:HALFWORD;DELTA,CLR:SCALED; BEGIN X:=CLEANBOX(Q+1,2*(CURSTYLE DIV 2)+1); IF CURSTYLE<2 THEN CLR:=FONTINFO[8+PARAMBASE[EQTB[11843+CURSIZE].HH.RH]] .INT+(ABS(FONTINFO[5+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT)DIV 4) ELSE BEGIN CLR:=FONTINFO[8+PARAMBASE[EQTB[11843+CURSIZE].HH.RH]].INT; CLR:=CLR+(ABS(CLR)DIV 4);END; Y:=VARDELIMITER(Q+4,CURSIZE,MEM[X+3].INT+MEM[X+2].INT+CLR+FONTINFO[8+ PARAMBASE[EQTB[11843+CURSIZE].HH.RH]].INT); DELTA:=MEM[Y+2].INT-(MEM[X+3].INT+MEM[X+2].INT+CLR); IF DELTA>0 THEN CLR:=CLR+HALF(DELTA);MEM[Y+4].INT:=-(MEM[X+3].INT+CLR); MEM[Y].HH.RH:=OVERBAR(X,CLR,MEM[Y+3].INT);MEM[Q+1].HH.LH:=HPACK(Y,0,1); MEM[Q+1].HH.RH:=2;END;{:737}{738:}PROCEDURE MAKEMATHACCENT(Q:HALFWORD); LABEL 30,31;VAR P,X,Y:HALFWORD;A:INTEGER;C:QUARTERWORD; F:INTERNALFONTNUMBER;I:FOURQUARTERS;S:SCALED;H:SCALED;DELTA:SCALED; W:SCALED;BEGIN FETCH(Q+4);IF(CURI.B0>0)THEN BEGIN I:=CURI;C:=CURC; F:=CURF;{741:}S:=0;IF MEM[Q+1].HH.RH=1 THEN BEGIN FETCH(Q+1); IF((CURI.B2)MOD 4)=1 THEN BEGIN A:=LIGKERNBASE[CURF]+CURI.B3; CURI:=FONTINFO[A].QQQQ; IF CURI.B0>128 THEN BEGIN A:=LIGKERNBASE[CURF]+256*CURI.B2+CURI.B3 +32768-256*(128);CURI:=FONTINFO[A].QQQQ;END; WHILE TRUE DO BEGIN IF CURI.B1=SKEWCHAR[CURF]THEN BEGIN IF CURI.B2>=128 THEN IF CURI.B0<=128 THEN S:=FONTINFO[KERNBASE[CURF]+256*CURI.B2+CURI.B3 ].INT;GOTO 31;END;IF CURI.B0>=128 THEN GOTO 31;A:=A+CURI.B0+1; CURI:=FONTINFO[A].QQQQ;END;END;END;31:{:741}; X:=CLEANBOX(Q+1,2*(CURSTYLE DIV 2)+1);W:=MEM[X+1].INT;H:=MEM[X+3].INT; {740:}WHILE TRUE DO BEGIN IF((I.B2)MOD 4)<>2 THEN GOTO 30;Y:=I.B3; I:=FONTINFO[CHARBASE[F]+Y].QQQQ;IF NOT(I.B0>0)THEN GOTO 30; IF FONTINFO[WIDTHBASE[F]+I.B0].INT>W THEN GOTO 30;C:=Y;END;30:{:740}; IF H0)OR(MEM[Q+3].HH.RH<>0)THEN IF MEM[Q+1].HH.RH=1 THEN{ 742:}BEGIN FLUSHNODELIST(X);X:=NEWNOAD;MEM[X+1]:=MEM[Q+1]; MEM[X+2]:=MEM[Q+2];MEM[X+3]:=MEM[Q+3];MEM[Q+2].HH:=EMPTYFIELD; MEM[Q+3].HH:=EMPTYFIELD;MEM[Q+1].HH.RH:=3;MEM[Q+1].HH.LH:=X; X:=CLEANBOX(Q+1,CURSTYLE);DELTA:=DELTA+MEM[X+3].INT-H;H:=MEM[X+3].INT; END{:742};Y:=CHARBOX(F,C);MEM[Y+4].INT:=S+HALF(W-MEM[Y+1].INT); MEM[Y+1].INT:=0;P:=NEWKERN(-DELTA);MEM[P].HH.RH:=X;MEM[Y].HH.RH:=P; Y:=VPACKAGE(Y,0,1,1073741823);MEM[Y+1].INT:=MEM[X+1].INT; IF MEM[Y+3].INT0 THEN SHIFTUP:=FONTINFO[9+PARAMBASE[EQTB[11842+CURSIZE ].HH.RH]].INT ELSE SHIFTUP:=FONTINFO[10+PARAMBASE[EQTB[11842+CURSIZE].HH .RH]].INT;END{:744};IF MEM[Q+1].INT=0 THEN{745:} BEGIN IF CURSTYLE<2 THEN CLR:=7*FONTINFO[8+PARAMBASE[EQTB[11843+CURSIZE] .HH.RH]].INT ELSE CLR:=3*FONTINFO[8+PARAMBASE[EQTB[11843+CURSIZE].HH.RH] ].INT; DELTA:=HALF(CLR-((SHIFTUP-MEM[X+2].INT)-(MEM[Z+3].INT-SHIFTDOWN))); IF DELTA>0 THEN BEGIN SHIFTUP:=SHIFTUP+DELTA;SHIFTDOWN:=SHIFTDOWN+DELTA; END;END{:745}ELSE{746:} BEGIN IF CURSTYLE<2 THEN CLR:=3*MEM[Q+1].INT ELSE CLR:=MEM[Q+1].INT; DELTA:=HALF(MEM[Q+1].INT); DELTA1:=CLR-((SHIFTUP-MEM[X+2].INT)-(FONTINFO[22+PARAMBASE[EQTB[11842+ CURSIZE].HH.RH]].INT+DELTA)); DELTA2:=CLR-((FONTINFO[22+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT- DELTA)-(MEM[Z+3].INT-SHIFTDOWN)); IF DELTA1>0 THEN SHIFTUP:=SHIFTUP+DELTA1; IF DELTA2>0 THEN SHIFTDOWN:=SHIFTDOWN+DELTA2;END{:746};{747:} V:=NEWNULLBOX;MEM[V].HH.B0:=1;MEM[V+3].INT:=SHIFTUP+MEM[X+3].INT; MEM[V+2].INT:=MEM[Z+2].INT+SHIFTDOWN;MEM[V+1].INT:=MEM[X+1].INT; IF MEM[Q+1].INT=0 THEN BEGIN P:=NEWKERN((SHIFTUP-MEM[X+2].INT)-(MEM[Z+3] .INT-SHIFTDOWN));MEM[P].HH.RH:=Z; END ELSE BEGIN Y:=FRACTIONRULE(MEM[Q+1].INT); P:=NEWKERN((FONTINFO[22+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT-DELTA) -(MEM[Z+3].INT-SHIFTDOWN));MEM[Y].HH.RH:=P;MEM[P].HH.RH:=Z; P:=NEWKERN((SHIFTUP-MEM[X+2].INT)-(FONTINFO[22+PARAMBASE[EQTB[11842+ CURSIZE].HH.RH]].INT+DELTA));MEM[P].HH.RH:=Y;END;MEM[X].HH.RH:=P; MEM[V+5].HH.RH:=X{:747};{748:} IF CURSTYLE<2 THEN DELTA:=FONTINFO[20+PARAMBASE[EQTB[11842+CURSIZE].HH. RH]].INT ELSE DELTA:=FONTINFO[21+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]]. INT;X:=VARDELIMITER(Q+4,CURSIZE,DELTA);MEM[X].HH.RH:=V; Z:=VARDELIMITER(Q+5,CURSIZE,DELTA);MEM[V].HH.RH:=Z; MEM[Q+1].INT:=HPACK(X,0,1){:748};END;{:743}{749:} FUNCTION MAKEOP(Q:HALFWORD):SCALED;VAR DELTA:SCALED;P,V,X,Y,Z:HALFWORD; C:QUARTERWORD;I:FOURQUARTERS;SHIFTUP,SHIFTDOWN:SCALED; BEGIN IF(MEM[Q].HH.B1=0)AND(CURSTYLE<2)THEN MEM[Q].HH.B1:=1; IF MEM[Q+1].HH.RH=1 THEN BEGIN FETCH(Q+1); IF(CURSTYLE<2)AND(((CURI.B2)MOD 4)=2)THEN BEGIN C:=CURI.B3; I:=FONTINFO[CHARBASE[CURF]+C].QQQQ;IF(I.B0>0)THEN BEGIN CURC:=C;CURI:=I; MEM[Q+1].HH.B1:=C;END;END; DELTA:=FONTINFO[ITALICBASE[CURF]+(CURI.B2)DIV 4].INT; X:=CLEANBOX(Q+1,CURSTYLE); IF(MEM[Q+3].HH.RH<>0)AND(MEM[Q].HH.B1<>1)THEN MEM[X+1].INT:=MEM[X+1].INT -DELTA; MEM[X+4].INT:=HALF(MEM[X+3].INT-MEM[X+2].INT)-FONTINFO[22+PARAMBASE[EQTB [11842+CURSIZE].HH.RH]].INT;MEM[Q+1].HH.RH:=2;MEM[Q+1].HH.LH:=X; END ELSE DELTA:=0;IF MEM[Q].HH.B1=1 THEN{750:} BEGIN X:=CLEANBOX(Q+2,2*(CURSTYLE DIV 4)+4+(CURSTYLE MOD 2)); Y:=CLEANBOX(Q+1,CURSTYLE);Z:=CLEANBOX(Q+3,2*(CURSTYLE DIV 4)+5); V:=NEWNULLBOX;MEM[V].HH.B0:=1;MEM[V+1].INT:=MEM[Y+1].INT; IF MEM[X+1].INT>MEM[V+1].INT THEN MEM[V+1].INT:=MEM[X+1].INT; IF MEM[Z+1].INT>MEM[V+1].INT THEN MEM[V+1].INT:=MEM[Z+1].INT; X:=REBOX(X,MEM[V+1].INT);Y:=REBOX(Y,MEM[V+1].INT); Z:=REBOX(Z,MEM[V+1].INT);MEM[X+4].INT:=HALF(DELTA); MEM[Z+4].INT:=-MEM[X+4].INT;MEM[V+3].INT:=MEM[Y+3].INT; MEM[V+2].INT:=MEM[Y+2].INT;{751:} IF MEM[Q+2].HH.RH=0 THEN BEGIN FREENODE(X,7);MEM[V+5].HH.RH:=Y; END ELSE BEGIN SHIFTUP:=FONTINFO[11+PARAMBASE[EQTB[11843+CURSIZE].HH.RH] ].INT-MEM[X+2].INT; IF SHIFTUP0 THEN IF(MEM[P].HH.B0>=16)AND(MEM[P].HH.B0<=22)THEN IF MEM[P+1]. HH.RH=1 THEN IF MEM[P+1].HH.B0=MEM[Q+1].HH.B0 THEN BEGIN MEM[Q+1].HH.RH :=4;FETCH(Q+1); IF((CURI.B2)MOD 4)=1 THEN BEGIN A:=LIGKERNBASE[CURF]+CURI.B3; CURC:=MEM[P+1].HH.B1;CURI:=FONTINFO[A].QQQQ; IF CURI.B0>128 THEN BEGIN A:=LIGKERNBASE[CURF]+256*CURI.B2+CURI.B3 +32768-256*(128);CURI:=FONTINFO[A].QQQQ;END;WHILE TRUE DO BEGIN{753:} IF CURI.B1=CURC THEN IF CURI.B0<=128 THEN IF CURI.B2>=128 THEN BEGIN P:= NEWKERN(FONTINFO[KERNBASE[CURF]+256*CURI.B2+CURI.B3].INT); MEM[P].HH.RH:=MEM[Q].HH.RH;MEM[Q].HH.RH:=P;GOTO 10; END ELSE BEGIN BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END; CASE CURI.B2 OF 1,5:MEM[Q+1].HH.B1:=CURI.B3;2,6:MEM[P+1].HH.B1:=CURI.B3; 3,7,11:BEGIN R:=NEWNOAD;MEM[R+1].HH.B1:=CURI.B3; MEM[R+1].HH.B0:=MEM[Q+1].HH.B0;MEM[Q].HH.RH:=R;MEM[R].HH.RH:=P; IF CURI.B2<11 THEN MEM[R+1].HH.RH:=1 ELSE MEM[R+1].HH.RH:=4;END; OTHERWISE BEGIN MEM[Q].HH.RH:=MEM[P].HH.RH;MEM[Q+1].HH.B1:=CURI.B3; MEM[Q+3]:=MEM[P+3];MEM[Q+2]:=MEM[P+2];FREENODE(P,4);END END; IF CURI.B2>3 THEN GOTO 10;MEM[Q+1].HH.RH:=1;GOTO 20;END{:753}; IF CURI.B0>=128 THEN GOTO 10;A:=A+CURI.B0+1;CURI:=FONTINFO[A].QQQQ;END; END;END;END;10:END;{:752}{756:}PROCEDURE MAKESCRIPTS(Q:HALFWORD; DELTA:SCALED);VAR P,X,Y,Z:HALFWORD;SHIFTUP,SHIFTDOWN,CLR:SCALED; T:SMALLNUMBER;BEGIN P:=MEM[Q+1].INT; IF(P>=HIMEMMIN)THEN BEGIN SHIFTUP:=0;SHIFTDOWN:=0; END ELSE BEGIN Z:=HPACK(P,0,1);IF CURSTYLE<4 THEN T:=16 ELSE T:=32; SHIFTUP:=MEM[Z+3].INT-FONTINFO[18+PARAMBASE[EQTB[11842+T].HH.RH]].INT; SHIFTDOWN:=MEM[Z+2].INT+FONTINFO[19+PARAMBASE[EQTB[11842+T].HH.RH]].INT; FREENODE(Z,7);END;IF MEM[Q+2].HH.RH=0 THEN{757:} BEGIN X:=CLEANBOX(Q+3,2*(CURSTYLE DIV 4)+5); MEM[X+1].INT:=MEM[X+1].INT+EQTB[13757].INT; IF SHIFTDOWN0 THEN BEGIN SHIFTDOWN:=SHIFTDOWN+CLR; CLR:=(ABS(FONTINFO[5+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT*4)DIV 5)- (SHIFTUP-MEM[X+2].INT);IF CLR>0 THEN BEGIN SHIFTUP:=SHIFTUP+CLR; SHIFTDOWN:=SHIFTDOWN-CLR;END;END;MEM[X+4].INT:=DELTA; P:=NEWKERN((SHIFTUP-MEM[X+2].INT)-(MEM[Y+3].INT-SHIFTDOWN)); MEM[X].HH.RH:=P;MEM[P].HH.RH:=Y;X:=VPACKAGE(X,0,1,1073741823); MEM[X+4].INT:=SHIFTDOWN;END{:759};END; IF MEM[Q+1].INT=0 THEN MEM[Q+1].INT:=X ELSE BEGIN P:=MEM[Q+1].INT; WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;MEM[P].HH.RH:=X;END;END;{:756} {762:}FUNCTION MAKELEFTRIGHT(Q:HALFWORD;STYLE:SMALLNUMBER; MAXD,MAXH:SCALED):SMALLNUMBER;VAR DELTA,DELTA1,DELTA2:SCALED; BEGIN CURSTYLE:=STYLE;{703:} BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2) ;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT,18); END{:703}; DELTA2:=MAXD+FONTINFO[22+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT; DELTA1:=MAXH+MAXD-DELTA2;IF DELTA2>DELTA1 THEN DELTA1:=DELTA2; DELTA:=(DELTA1 DIV 500)*EQTB[13186].INT; DELTA2:=DELTA1+DELTA1-EQTB[13755].INT; IF DELTA0 DO{727:}BEGIN{728:}21:DELTA:=0; CASE MEM[Q].HH.B0 OF 18:CASE RTYPE OF 18,17,19,20,22,30:BEGIN MEM[Q].HH. B0:=16;GOTO 21;END;OTHERWISE END;19,21,22,31:BEGIN{729:} IF RTYPE=18 THEN MEM[R].HH.B0:=16{:729};IF MEM[Q].HH.B0=31 THEN GOTO 80; END;{733:}30:GOTO 80;25:BEGIN MAKEFRACTION(Q);GOTO 82;END; 17:BEGIN DELTA:=MAKEOP(Q);IF MEM[Q].HH.B1=1 THEN GOTO 82;END; 16:MAKEORD(Q);20,23:;24:MAKERADICAL(Q);27:MAKEOVER(Q);26:MAKEUNDER(Q); 28:MAKEMATHACCENT(Q);29:MAKEVCENTER(Q);{:733}{730:} 14:BEGIN CURSTYLE:=MEM[Q].HH.B1;{703:} BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2) ;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT,18); END{:703};GOTO 81;END;15:{731:} BEGIN CASE CURSTYLE DIV 2 OF 0:BEGIN P:=MEM[Q+1].HH.LH; MEM[Q+1].HH.LH:=0;END;1:BEGIN P:=MEM[Q+1].HH.RH;MEM[Q+1].HH.RH:=0;END; 2:BEGIN P:=MEM[Q+2].HH.LH;MEM[Q+2].HH.LH:=0;END; 3:BEGIN P:=MEM[Q+2].HH.RH;MEM[Q+2].HH.RH:=0;END;END; FLUSHNODELIST(MEM[Q+1].HH.LH);FLUSHNODELIST(MEM[Q+1].HH.RH); FLUSHNODELIST(MEM[Q+2].HH.LH);FLUSHNODELIST(MEM[Q+2].HH.RH); MEM[Q].HH.B0:=14;MEM[Q].HH.B1:=CURSTYLE;MEM[Q+1].INT:=0;MEM[Q+2].INT:=0; IF P<>0 THEN BEGIN Z:=MEM[Q].HH.RH;MEM[Q].HH.RH:=P; WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH;MEM[P].HH.RH:=Z;END;GOTO 81; END{:731};3,4,5,8,12,7:GOTO 81; 2:BEGIN IF MEM[Q+3].INT>MAXH THEN MAXH:=MEM[Q+3].INT; IF MEM[Q+2].INT>MAXD THEN MAXD:=MEM[Q+2].INT;GOTO 81;END;10:BEGIN{732:} IF MEM[Q].HH.B1=99 THEN BEGIN X:=MEM[Q+1].HH.LH;Y:=MATHGLUE(X,CURMU); DELETEGLUEREF(X);MEM[Q+1].HH.LH:=Y;MEM[Q].HH.B1:=0; END ELSE IF(CURSIZE<>0)AND(MEM[Q].HH.B1=98)THEN BEGIN P:=MEM[Q].HH.RH; IF P<>0 THEN IF(MEM[P].HH.B0=10)OR(MEM[P].HH.B0=11)THEN BEGIN MEM[Q].HH. RH:=MEM[P].HH.RH;MEM[P].HH.RH:=0;FLUSHNODELIST(P);END;END{:732};GOTO 81; END;11:BEGIN MATHKERN(Q,CURMU);GOTO 81;END;{:730} OTHERWISE CONFUSION(898)END;{754:}CASE MEM[Q+1].HH.RH OF 1,4:{755:} BEGIN FETCH(Q+1); IF(CURI.B0>0)THEN BEGIN DELTA:=FONTINFO[ITALICBASE[CURF]+(CURI.B2)DIV 4] .INT;P:=NEWCHARACTER(CURF,CURC); IF(MEM[Q+1].HH.RH=4)AND(FONTINFO[2+PARAMBASE[CURF]].INT<>0)THEN DELTA:=0 ; IF(MEM[Q+3].HH.RH=0)AND(DELTA<>0)THEN BEGIN MEM[P].HH.RH:=NEWKERN(DELTA) ;DELTA:=0;END;END ELSE P:=0;END{:755};0:P:=0;2:P:=MEM[Q+1].HH.LH; 3:BEGIN CURMLIST:=MEM[Q+1].HH.LH;SAVESTYLE:=CURSTYLE; MLISTPENALTIES:=FALSE;MLISTTOHLIST;CURSTYLE:=SAVESTYLE;{703:} BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2) ;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT,18); END{:703};P:=HPACK(MEM[327141].HH.RH,0,1);END; OTHERWISE CONFUSION(899)END;MEM[Q+1].INT:=P; IF(MEM[Q+3].HH.RH=0)AND(MEM[Q+2].HH.RH=0)THEN GOTO 82; MAKESCRIPTS(Q,DELTA){:754}{:728};82:Z:=HPACK(MEM[Q+1].INT,0,1); IF MEM[Z+3].INT>MAXH THEN MAXH:=MEM[Z+3].INT; IF MEM[Z+2].INT>MAXD THEN MAXD:=MEM[Z+2].INT;FREENODE(Z,7);80:R:=Q; RTYPE:=MEM[R].HH.B0;IF RTYPE=31 THEN BEGIN RTYPE:=30;CURSTYLE:=STYLE; {703:} BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2) ;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT,18); END{:703};END;81:Q:=MEM[Q].HH.RH;END{:727};{729:} IF RTYPE=18 THEN MEM[R].HH.B0:=16{:729};{760:}P:=327141;MEM[P].HH.RH:=0; Q:=MLIST;RTYPE:=0;CURSTYLE:=STYLE;{703:} BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2) ;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT,18); END{:703};WHILE Q<>0 DO BEGIN{761:}T:=16;S:=4;PEN:=10000; CASE MEM[Q].HH.B0 OF 17,20,21,22,23:T:=MEM[Q].HH.B0;18:BEGIN T:=18; PEN:=EQTB[13177].INT;END;19:BEGIN T:=19;PEN:=EQTB[13178].INT;END; 16,29,27,26:;24:S:=5;28:S:=5;25:BEGIN T:=23;S:=6;END; 30,31:T:=MAKELEFTRIGHT(Q,STYLE,MAXD,MAXH);14:{763:} BEGIN CURSTYLE:=MEM[Q].HH.B1;S:=3;{703:} BEGIN IF CURSTYLE<4 THEN CURSIZE:=0 ELSE CURSIZE:=16*((CURSTYLE-2)DIV 2) ;CURMU:=XOVERN(FONTINFO[6+PARAMBASE[EQTB[11842+CURSIZE].HH.RH]].INT,18); END{:703};GOTO 83;END{:763};8,12,2,7,5,3,4,10,11:BEGIN MEM[P].HH.RH:=Q; P:=Q;Q:=MEM[Q].HH.RH;MEM[P].HH.RH:=0;GOTO 30;END; OTHERWISE CONFUSION(900)END{:761};{766:} IF RTYPE>0 THEN BEGIN CASE STRPOOL[RTYPE*8+T+MAGICOFFSET]OF 48:X:=0; 49:IF CURSTYLE<4 THEN X:=15 ELSE X:=0;50:X:=15; 51:IF CURSTYLE<4 THEN X:=16 ELSE X:=0; 52:IF CURSTYLE<4 THEN X:=17 ELSE X:=0;OTHERWISE CONFUSION(902)END; IF X<>0 THEN BEGIN Y:=MATHGLUE(EQTB[10782+X].HH.RH,CURMU);Z:=NEWGLUE(Y); MEM[Y].HH.RH:=0;MEM[P].HH.RH:=Z;P:=Z;MEM[Z].HH.B1:=X+1;END;END{:766}; {767:}IF MEM[Q+1].INT<>0 THEN BEGIN MEM[P].HH.RH:=MEM[Q+1].INT; REPEAT P:=MEM[P].HH.RH;UNTIL MEM[P].HH.RH=0;END; IF PENALTIES THEN IF MEM[Q].HH.RH<>0 THEN IF PEN<10000 THEN BEGIN RTYPE :=MEM[MEM[Q].HH.RH].HH.B0; IF RTYPE<>12 THEN IF RTYPE<>19 THEN BEGIN Z:=NEWPENALTY(PEN); MEM[P].HH.RH:=Z;P:=Z;END;END{:767};IF MEM[Q].HH.B0=31 THEN T:=20; RTYPE:=T;83:R:=Q;Q:=MEM[Q].HH.RH;FREENODE(R,S);30:END{:760};END;{:726} {772:}PROCEDURE PUSHALIGNMENT;VAR P:HALFWORD;BEGIN P:=GETNODE(5); MEM[P].HH.RH:=ALIGNPTR;MEM[P].HH.LH:=CURALIGN; MEM[P+1].HH.LH:=MEM[327136].HH.RH;MEM[P+1].HH.RH:=CURSPAN; MEM[P+2].INT:=CURLOOP;MEM[P+3].INT:=ALIGNSTATE;MEM[P+4].HH.LH:=CURHEAD; MEM[P+4].HH.RH:=CURTAIL;ALIGNPTR:=P;CURHEAD:=GETAVAIL;END; PROCEDURE POPALIGNMENT;VAR P:HALFWORD; BEGIN BEGIN MEM[CURHEAD].HH.RH:=AVAIL;AVAIL:=CURHEAD;DYNUSED:=DYNUSED-1; END;P:=ALIGNPTR;CURTAIL:=MEM[P+4].HH.RH;CURHEAD:=MEM[P+4].HH.LH; ALIGNSTATE:=MEM[P+3].INT;CURLOOP:=MEM[P+2].INT;CURSPAN:=MEM[P+1].HH.RH; MEM[327136].HH.RH:=MEM[P+1].HH.LH;CURALIGN:=MEM[P].HH.LH; ALIGNPTR:=MEM[P].HH.RH;FREENODE(P,5);END;{:772}{774:}{782:} PROCEDURE GETPREAMBLETOKEN;LABEL 20;BEGIN 20:GETTOKEN; WHILE(CURCHR=256)AND(CURCMD=4)DO BEGIN GETTOKEN; IF CURCMD>100 THEN BEGIN EXPAND;GETTOKEN;END;END; IF CURCMD=9 THEN FATALERROR(604); IF(CURCMD=75)AND(CURCHR=10793)THEN BEGIN SCANOPTIONALEQUALS;SCANGLUE(2); IF EQTB[13211].INT>0 THEN GEQDEFINE(10793,117,CURVAL)ELSE EQDEFINE(10793 ,117,CURVAL);GOTO 20;END;END;{:782}PROCEDURE ALIGNPEEK;FORWARD; PROCEDURE NORMALPARAGRAPH;FORWARD;PROCEDURE INITALIGN;LABEL 30,31,32,22; VAR SAVECSPTR:HALFWORD;P:HALFWORD;BEGIN SAVECSPTR:=CURCS;PUSHALIGNMENT; ALIGNSTATE:=-1000000;{776:} IF(CURLIST.MODEFIELD=203)AND((CURLIST.TAILFIELD<>CURLIST.HEADFIELD)OR( CURLIST.AUXFIELD.INT<>0))THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(689);END;PRINTESC(523);PRINT(903);BEGIN HELPPTR:=3; HELPLINE[2]:=904;HELPLINE[1]:=905;HELPLINE[0]:=906;END;ERROR;FLUSHMATH; END{:776};PUSHNEST;{775:} IF CURLIST.MODEFIELD=203 THEN BEGIN CURLIST.MODEFIELD:=-1; CURLIST.AUXFIELD.INT:=NEST[NESTPTR-2].AUXFIELD.INT; END ELSE IF CURLIST.MODEFIELD>0 THEN CURLIST.MODEFIELD:=-CURLIST. MODEFIELD{:775};SCANSPEC(6,FALSE);{777:}MEM[327136].HH.RH:=0; CURALIGN:=327136;CURLOOP:=0;SCANNERSTATUS:=4;WARNINGINDEX:=SAVECSPTR; ALIGNSTATE:=-1000000;WHILE TRUE DO BEGIN{778:} MEM[CURALIGN].HH.RH:=NEWPARAMGLUE(11); CURALIGN:=MEM[CURALIGN].HH.RH{:778};IF CURCMD=5 THEN GOTO 30;{779:} {783:}P:=327140;MEM[P].HH.RH:=0;WHILE TRUE DO BEGIN GETPREAMBLETOKEN; IF CURCMD=6 THEN GOTO 31; IF(CURCMD<=5)AND(CURCMD>=4)AND(ALIGNSTATE=-1000000)THEN IF(P=327140)AND( CURLOOP=0)AND(CURCMD=4)THEN CURLOOP:=CURALIGN ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(912);END;BEGIN HELPPTR:=3;HELPLINE[2]:=913; HELPLINE[1]:=914;HELPLINE[0]:=915;END;BACKERROR;GOTO 31; END ELSE IF(CURCMD<>10)OR(P<>327140)THEN BEGIN MEM[P].HH.RH:=GETAVAIL; P:=MEM[P].HH.RH;MEM[P].HH.LH:=CURTOK;END;END;31:{:783}; MEM[CURALIGN].HH.RH:=NEWNULLBOX;CURALIGN:=MEM[CURALIGN].HH.RH; MEM[CURALIGN].HH.LH:=327135;MEM[CURALIGN+1].INT:=-1073741824; MEM[CURALIGN+3].INT:=MEM[327140].HH.RH;{784:}P:=327140;MEM[P].HH.RH:=0; WHILE TRUE DO BEGIN 22:GETPREAMBLETOKEN; IF(CURCMD<=5)AND(CURCMD>=4)AND(ALIGNSTATE=-1000000)THEN GOTO 32; IF CURCMD=6 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(916);END; BEGIN HELPPTR:=3;HELPLINE[2]:=913;HELPLINE[1]:=914;HELPLINE[0]:=917;END; ERROR;GOTO 22;END;MEM[P].HH.RH:=GETAVAIL;P:=MEM[P].HH.RH; MEM[P].HH.LH:=CURTOK;END;32:MEM[P].HH.RH:=GETAVAIL;P:=MEM[P].HH.RH; MEM[P].HH.LH:=14614{:784};MEM[CURALIGN+2].INT:=MEM[327140].HH.RH{:779}; END;30:SCANNERSTATUS:=0{:777};NEWSAVELEVEL(6); IF EQTB[11324].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11324].HH.RH,13); ALIGNPEEK;END;{:774}{786:}{787:}PROCEDURE INITSPAN(P:HALFWORD); BEGIN PUSHNEST; IF CURLIST.MODEFIELD=-102 THEN CURLIST.AUXFIELD.HH.LH:=1000 ELSE BEGIN CURLIST.AUXFIELD.INT:=-65536000;NORMALPARAGRAPH;END;CURSPAN:=P;END; {:787}PROCEDURE INITROW;BEGIN PUSHNEST; CURLIST.MODEFIELD:=(-103)-CURLIST.MODEFIELD; IF CURLIST.MODEFIELD=-102 THEN CURLIST.AUXFIELD.HH.LH:=0 ELSE CURLIST. AUXFIELD.INT:=0; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(MEM[MEM[327136].HH.RH+1].HH. LH);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B1:=12;CURALIGN:=MEM[MEM[327136].HH.RH].HH.RH; CURTAIL:=CURHEAD;INITSPAN(CURALIGN);END;{:786}{788:}PROCEDURE INITCOL; BEGIN MEM[CURALIGN+5].HH.LH:=CURCMD; IF CURCMD=63 THEN ALIGNSTATE:=0 ELSE BEGIN BACKINPUT; BEGINTOKENLIST(MEM[CURALIGN+3].INT,1);END;END;{:788}{791:} FUNCTION FINCOL:BOOLEAN;LABEL 10;VAR P:HALFWORD;Q,R:HALFWORD;S:HALFWORD; U:HALFWORD;W:SCALED;O:GLUEORD;N:HALFWORD; BEGIN IF CURALIGN=0 THEN CONFUSION(918);Q:=MEM[CURALIGN].HH.RH; IF Q=0 THEN CONFUSION(918);IF ALIGNSTATE<500000 THEN FATALERROR(604); P:=MEM[Q].HH.RH;{792:} IF(P=0)AND(MEM[CURALIGN+5].HH.LH<257)THEN IF CURLOOP<>0 THEN{793:} BEGIN MEM[Q].HH.RH:=NEWNULLBOX;P:=MEM[Q].HH.RH;MEM[P].HH.LH:=327135; MEM[P+1].INT:=-1073741824;CURLOOP:=MEM[CURLOOP].HH.RH;{794:}Q:=327140; R:=MEM[CURLOOP+3].INT;WHILE R<>0 DO BEGIN MEM[Q].HH.RH:=GETAVAIL; Q:=MEM[Q].HH.RH;MEM[Q].HH.LH:=MEM[R].HH.LH;R:=MEM[R].HH.RH;END; MEM[Q].HH.RH:=0;MEM[P+3].INT:=MEM[327140].HH.RH;Q:=327140; R:=MEM[CURLOOP+2].INT;WHILE R<>0 DO BEGIN MEM[Q].HH.RH:=GETAVAIL; Q:=MEM[Q].HH.RH;MEM[Q].HH.LH:=MEM[R].HH.LH;R:=MEM[R].HH.RH;END; MEM[Q].HH.RH:=0;MEM[P+2].INT:=MEM[327140].HH.RH{:794}; CURLOOP:=MEM[CURLOOP].HH.RH;MEM[P].HH.RH:=NEWGLUE(MEM[CURLOOP+1].HH.LH); END{:793}ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(919);END; PRINTESC(908);BEGIN HELPPTR:=3;HELPLINE[2]:=920;HELPLINE[1]:=921; HELPLINE[0]:=922;END;MEM[CURALIGN+5].HH.LH:=257;ERROR;END{:792}; IF MEM[CURALIGN+5].HH.LH<>256 THEN BEGIN UNSAVE;NEWSAVELEVEL(6);{796:} BEGIN IF CURLIST.MODEFIELD=-102 THEN BEGIN ADJUSTTAIL:=CURTAIL; U:=HPACK(MEM[CURLIST.HEADFIELD].HH.RH,0,1);W:=MEM[U+1].INT; CURTAIL:=ADJUSTTAIL;ADJUSTTAIL:=0; END ELSE BEGIN U:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,0,1,0); W:=MEM[U+3].INT;END;N:=0;IF CURSPAN<>CURALIGN THEN{798:} BEGIN Q:=CURSPAN;REPEAT N:=N+1;Q:=MEM[MEM[Q].HH.RH].HH.RH; UNTIL Q=CURALIGN;IF N>511 THEN CONFUSION(923);Q:=CURSPAN; WHILE MEM[MEM[Q].HH.LH].HH.RHN THEN BEGIN S:=GETNODE(2); MEM[S].HH.LH:=MEM[Q].HH.LH;MEM[S].HH.RH:=N;MEM[Q].HH.LH:=S; MEM[S+1].INT:=W; END ELSE IF MEM[MEM[Q].HH.LH+1].INTMEM[CURALIGN+1].INT THEN MEM[CURALIGN+1].INT:=W; MEM[U].HH.B0:=13;MEM[U].HH.B1:=N;{659:} IF TOTALSTRETCH[3]<>0 THEN O:=3 ELSE IF TOTALSTRETCH[2]<>0 THEN O:=2 ELSE IF TOTALSTRETCH[1]<>0 THEN O:=1 ELSE O:=0{:659};MEM[U+5].HH.B1:=O; MEM[U+6].INT:=TOTALSTRETCH[O];{665:} IF TOTALSHRINK[3]<>0 THEN O:=3 ELSE IF TOTALSHRINK[2]<>0 THEN O:=2 ELSE IF TOTALSHRINK[1]<>0 THEN O:=1 ELSE O:=0{:665};MEM[U+5].HH.B0:=O; MEM[U+4].INT:=TOTALSHRINK[O];POPNEST;MEM[CURLIST.TAILFIELD].HH.RH:=U; CURLIST.TAILFIELD:=U;END{:796};{795:} BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(MEM[MEM[CURALIGN].HH.RH+1]. HH.LH);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B1:=12{:795}; IF MEM[CURALIGN+5].HH.LH>=257 THEN BEGIN FINCOL:=TRUE;GOTO 10;END; INITSPAN(P);END;ALIGNSTATE:=1000000;REPEAT GETXORPROTECTED; UNTIL CURCMD<>10;CURALIGN:=P;INITCOL;FINCOL:=FALSE;10:END;{:791}{799:} PROCEDURE FINROW;VAR P:HALFWORD; BEGIN IF CURLIST.MODEFIELD=-102 THEN BEGIN P:=HPACK(MEM[CURLIST. HEADFIELD].HH.RH,0,1);POPNEST;APPENDTOVLIST(P); IF CURHEAD<>CURTAIL THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[CURHEAD ].HH.RH;CURLIST.TAILFIELD:=CURTAIL;END; END ELSE BEGIN P:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,0,1,1073741823); POPNEST;MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P; CURLIST.AUXFIELD.HH.LH:=1000;END;MEM[P].HH.B0:=13;MEM[P+6].INT:=0; IF EQTB[11324].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11324].HH.RH,13); ALIGNPEEK;END;{:799}{800:}PROCEDURE DOASSIGNMENTS;FORWARD; PROCEDURE RESUMEAFTERDISPLAY;FORWARD;PROCEDURE BUILDPAGE;FORWARD; PROCEDURE FINALIGN;VAR P,Q,R,S,U,V:HALFWORD;T,W:SCALED;O:SCALED; N:HALFWORD;RULESAVE:SCALED;AUXSAVE:MEMORYWORD; BEGIN IF CURGROUP<>6 THEN CONFUSION(924);UNSAVE; IF CURGROUP<>6 THEN CONFUSION(925);UNSAVE; IF NEST[NESTPTR-1].MODEFIELD=203 THEN O:=EQTB[13760].INT ELSE O:=0; {801:}Q:=MEM[MEM[327136].HH.RH].HH.RH;REPEAT FLUSHLIST(MEM[Q+3].INT); FLUSHLIST(MEM[Q+2].INT);P:=MEM[MEM[Q].HH.RH].HH.RH; IF MEM[Q+1].INT=-1073741824 THEN{802:}BEGIN MEM[Q+1].INT:=0; R:=MEM[Q].HH.RH;S:=MEM[R+1].HH.LH; IF S<>0 THEN BEGIN MEM[0].HH.RH:=MEM[0].HH.RH+1;DELETEGLUEREF(S); MEM[R+1].HH.LH:=0;END;END{:802};IF MEM[Q].HH.LH<>327135 THEN{803:} BEGIN T:=MEM[Q+1].INT+MEM[MEM[MEM[Q].HH.RH+1].HH.LH+1].INT; R:=MEM[Q].HH.LH;S:=327135;MEM[S].HH.LH:=P;N:=1; REPEAT MEM[R+1].INT:=MEM[R+1].INT-T;U:=MEM[R].HH.LH; WHILE MEM[R].HH.RH>N DO BEGIN S:=MEM[S].HH.LH; N:=MEM[MEM[S].HH.LH].HH.RH+1;END; IF MEM[R].HH.RHMEM[MEM[S].HH.LH+1].INT THEN MEM[MEM[S]. HH.LH+1].INT:=MEM[R+1].INT;FREENODE(R,2);END;R:=U;UNTIL R=327135; END{:803};MEM[Q].HH.B0:=13;MEM[Q].HH.B1:=0;MEM[Q+3].INT:=0; MEM[Q+2].INT:=0;MEM[Q+5].HH.B1:=0;MEM[Q+5].HH.B0:=0;MEM[Q+6].INT:=0; MEM[Q+4].INT:=0;Q:=P;UNTIL Q=0{:801};{804:}SAVEPTR:=SAVEPTR-2; PACKBEGINLINE:=-CURLIST.MLFIELD; IF CURLIST.MODEFIELD=-1 THEN BEGIN RULESAVE:=EQTB[13761].INT; EQTB[13761].INT:=0; P:=HPACK(MEM[327136].HH.RH,SAVESTACK[SAVEPTR+1].INT,SAVESTACK[SAVEPTR+0] .INT);EQTB[13761].INT:=RULESAVE; END ELSE BEGIN Q:=MEM[MEM[327136].HH.RH].HH.RH; REPEAT MEM[Q+3].INT:=MEM[Q+1].INT;MEM[Q+1].INT:=0; Q:=MEM[MEM[Q].HH.RH].HH.RH;UNTIL Q=0; P:=VPACKAGE(MEM[327136].HH.RH,SAVESTACK[SAVEPTR+1].INT,SAVESTACK[SAVEPTR +0].INT,1073741823);Q:=MEM[MEM[327136].HH.RH].HH.RH; REPEAT MEM[Q+1].INT:=MEM[Q+3].INT;MEM[Q+3].INT:=0; Q:=MEM[MEM[Q].HH.RH].HH.RH;UNTIL Q=0;END;PACKBEGINLINE:=0{:804};{805:} Q:=MEM[CURLIST.HEADFIELD].HH.RH;S:=CURLIST.HEADFIELD; WHILE Q<>0 DO BEGIN IF NOT(Q>=HIMEMMIN)THEN IF MEM[Q].HH.B0=13 THEN{807: }BEGIN IF CURLIST.MODEFIELD=-1 THEN BEGIN MEM[Q].HH.B0:=0; MEM[Q+1].INT:=MEM[P+1].INT; IF NEST[NESTPTR-1].MODEFIELD=203 THEN MEM[Q].HH.B1:=2; END ELSE BEGIN MEM[Q].HH.B0:=1;MEM[Q+3].INT:=MEM[P+3].INT;END; MEM[Q+5].HH.B1:=MEM[P+5].HH.B1;MEM[Q+5].HH.B0:=MEM[P+5].HH.B0; MEM[Q+6].GR:=MEM[P+6].GR;MEM[Q+4].INT:=O;R:=MEM[MEM[Q+5].HH.RH].HH.RH; S:=MEM[MEM[P+5].HH.RH].HH.RH;REPEAT{808:}N:=MEM[R].HH.B1; T:=MEM[S+1].INT;W:=T;U:=327140;MEM[R].HH.B1:=0; WHILE N>0 DO BEGIN N:=N-1;{809:}S:=MEM[S].HH.RH;V:=MEM[S+1].HH.LH; MEM[U].HH.RH:=NEWGLUE(V);U:=MEM[U].HH.RH;MEM[U].HH.B1:=12; T:=T+MEM[V+1].INT; IF MEM[P+5].HH.B0=1 THEN BEGIN IF MEM[V].HH.B0=MEM[P+5].HH.B1 THEN T:=T+ ROUND(DBLE(MEM[P+6].GR)*MEM[V+2].INT); END ELSE IF MEM[P+5].HH.B0=2 THEN BEGIN IF MEM[V].HH.B1=MEM[P+5].HH.B1 THEN T:=T-ROUND(DBLE(MEM[P+6].GR)*MEM[V+3].INT);END;S:=MEM[S].HH.RH; MEM[U].HH.RH:=NEWNULLBOX;U:=MEM[U].HH.RH;T:=T+MEM[S+1].INT; IF CURLIST.MODEFIELD=-1 THEN MEM[U+1].INT:=MEM[S+1].INT ELSE BEGIN MEM[U ].HH.B0:=1;MEM[U+3].INT:=MEM[S+1].INT;END{:809};END; IF CURLIST.MODEFIELD=-1 THEN{810:}BEGIN MEM[R+3].INT:=MEM[Q+3].INT; MEM[R+2].INT:=MEM[Q+2].INT; IF T=MEM[R+1].INT THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0; MEM[R+6].GR:=0.0; END ELSE IF T>MEM[R+1].INT THEN BEGIN MEM[R+5].HH.B0:=1; IF MEM[R+6].INT=0 THEN MEM[R+6].GR:=0.0 ELSE MEM[R+6].GR:=SNGL(1.0D0*(T- MEM[R+1].INT)/MEM[R+6].INT); END ELSE BEGIN MEM[R+5].HH.B1:=MEM[R+5].HH.B0;MEM[R+5].HH.B0:=2; IF MEM[R+4].INT=0 THEN MEM[R+6].GR:=0.0 ELSE IF(MEM[R+5].HH.B1=0)AND(MEM [R+1].INT-T>MEM[R+4].INT)THEN MEM[R+6].GR:=1.0 ELSE MEM[R+6].GR:=SNGL( 1.0D0*(MEM[R+1].INT-T)/MEM[R+4].INT);END;MEM[R+1].INT:=W; MEM[R].HH.B0:=0;END{:810}ELSE{811:}BEGIN MEM[R+1].INT:=MEM[Q+1].INT; IF T=MEM[R+3].INT THEN BEGIN MEM[R+5].HH.B0:=0;MEM[R+5].HH.B1:=0; MEM[R+6].GR:=0.0; END ELSE IF T>MEM[R+3].INT THEN BEGIN MEM[R+5].HH.B0:=1; IF MEM[R+6].INT=0 THEN MEM[R+6].GR:=0.0 ELSE MEM[R+6].GR:=SNGL(1.0D0*(T- MEM[R+3].INT)/MEM[R+6].INT); END ELSE BEGIN MEM[R+5].HH.B1:=MEM[R+5].HH.B0;MEM[R+5].HH.B0:=2; IF MEM[R+4].INT=0 THEN MEM[R+6].GR:=0.0 ELSE IF(MEM[R+5].HH.B1=0)AND(MEM [R+3].INT-T>MEM[R+4].INT)THEN MEM[R+6].GR:=1.0 ELSE MEM[R+6].GR:=SNGL( 1.0D0*(MEM[R+3].INT-T)/MEM[R+4].INT);END;MEM[R+3].INT:=W; MEM[R].HH.B0:=1;END{:811};MEM[R+4].INT:=0; IF U<>327140 THEN BEGIN MEM[U].HH.RH:=MEM[R].HH.RH; MEM[R].HH.RH:=MEM[327140].HH.RH;R:=U;END{:808}; R:=MEM[MEM[R].HH.RH].HH.RH;S:=MEM[MEM[S].HH.RH].HH.RH;UNTIL R=0; END{:807}ELSE IF MEM[Q].HH.B0=2 THEN{806:} BEGIN IF(MEM[Q+1].INT=-1073741824)THEN MEM[Q+1].INT:=MEM[P+1].INT; IF(MEM[Q+3].INT=-1073741824)THEN MEM[Q+3].INT:=MEM[P+3].INT; IF(MEM[Q+2].INT=-1073741824)THEN MEM[Q+2].INT:=MEM[P+2].INT; IF O<>0 THEN BEGIN R:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0;Q:=HPACK(Q,0,1); MEM[Q+4].INT:=O;MEM[Q].HH.RH:=R;MEM[S].HH.RH:=Q;END;END{:806};S:=Q; Q:=MEM[Q].HH.RH;END{:805};FLUSHNODELIST(P);POPALIGNMENT;{812:} AUXSAVE:=CURLIST.AUXFIELD;P:=MEM[CURLIST.HEADFIELD].HH.RH; Q:=CURLIST.TAILFIELD;POPNEST;IF CURLIST.MODEFIELD=203 THEN{1206:} BEGIN DOASSIGNMENTS;IF CURCMD<>3 THEN{1207:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1179);END;BEGIN HELPPTR:=2; HELPLINE[1]:=904;HELPLINE[0]:=905;END;BACKERROR;END{:1207}ELSE{1197:} BEGIN GETXTOKEN; IF CURCMD<>3 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1175);END; BEGIN HELPPTR:=2;HELPLINE[1]:=1176;HELPLINE[0]:=1177;END;BACKERROR;END; END{:1197};FLUSHNODELIST(CURLIST.ETEXAUXFIELD);POPNEST; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[13179].INT); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(3); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.RH:=P;IF P<>0 THEN CURLIST.TAILFIELD:=Q; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[13180].INT); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(4); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; CURLIST.AUXFIELD.INT:=AUXSAVE.INT;RESUMEAFTERDISPLAY;END{:1206} ELSE BEGIN CURLIST.AUXFIELD:=AUXSAVE;MEM[CURLIST.TAILFIELD].HH.RH:=P; IF P<>0 THEN CURLIST.TAILFIELD:=Q;IF CURLIST.MODEFIELD=1 THEN BUILDPAGE; END{:812};END;{785:}PROCEDURE ALIGNPEEK;LABEL 20; BEGIN 20:ALIGNSTATE:=1000000;REPEAT GETXORPROTECTED;UNTIL CURCMD<>10; IF CURCMD=34 THEN BEGIN SCANLEFTBRACE;NEWSAVELEVEL(7); IF CURLIST.MODEFIELD=-1 THEN NORMALPARAGRAPH; END ELSE IF CURCMD=2 THEN FINALIGN ELSE IF(CURCMD=5)AND(CURCHR=258)THEN GOTO 20 ELSE BEGIN INITROW;INITCOL;END;END;{:785}{:800}{815:}{826:} FUNCTION FINITESHRINK(P:HALFWORD):HALFWORD;VAR Q:HALFWORD; BEGIN IF NOSHRINKERRORYET THEN BEGIN NOSHRINKERRORYET:=FALSE; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(926);END;BEGIN HELPPTR:=5;HELPLINE[4]:=927; HELPLINE[3]:=928;HELPLINE[2]:=929;HELPLINE[1]:=930;HELPLINE[0]:=931;END; ERROR;END;Q:=NEWSPEC(P);MEM[Q].HH.B1:=0;DELETEGLUEREF(P); FINITESHRINK:=Q;END;{:826}{829:}PROCEDURE TRYBREAK(PI:INTEGER; BREAKTYPE:SMALLNUMBER);LABEL 10,30,31,22,60,40,45;VAR R:HALFWORD; PREVR:HALFWORD;OLDL:HALFWORD;NOBREAKYET:BOOLEAN;{830:} PREVPREVR:HALFWORD;S:HALFWORD;Q:HALFWORD;V:HALFWORD;T:INTEGER; F:INTERNALFONTNUMBER;L:HALFWORD;NODERSTAYSACTIVE:BOOLEAN; LINEWIDTH:SCALED;FITCLASS:0..3;B:HALFWORD;D:INTEGER; ARTIFICIALDEMERITS:BOOLEAN;SAVELINK:HALFWORD;SHORTFALL:SCALED;{:830} {1577:}G:SCALED;{:1577}BEGIN{831:} IF ABS(PI)>=10000 THEN IF PI>0 THEN GOTO 10 ELSE PI:=-10000{:831}; NOBREAKYET:=TRUE;PREVR:=327137;OLDL:=0; CURACTIVEWIDTH[1]:=ACTIVEWIDTH[1];CURACTIVEWIDTH[2]:=ACTIVEWIDTH[2]; CURACTIVEWIDTH[3]:=ACTIVEWIDTH[3];CURACTIVEWIDTH[4]:=ACTIVEWIDTH[4]; CURACTIVEWIDTH[5]:=ACTIVEWIDTH[5];CURACTIVEWIDTH[6]:=ACTIVEWIDTH[6]; WHILE TRUE DO BEGIN 22:R:=MEM[PREVR].HH.RH;{832:} IF MEM[R].HH.B0=2 THEN BEGIN CURACTIVEWIDTH[1]:=CURACTIVEWIDTH[1]+MEM[R +1].INT;CURACTIVEWIDTH[2]:=CURACTIVEWIDTH[2]+MEM[R+2].INT; CURACTIVEWIDTH[3]:=CURACTIVEWIDTH[3]+MEM[R+3].INT; CURACTIVEWIDTH[4]:=CURACTIVEWIDTH[4]+MEM[R+4].INT; CURACTIVEWIDTH[5]:=CURACTIVEWIDTH[5]+MEM[R+5].INT; CURACTIVEWIDTH[6]:=CURACTIVEWIDTH[6]+MEM[R+6].INT;PREVPREVR:=PREVR; PREVR:=R;GOTO 22;END{:832};{835:}BEGIN L:=MEM[R+1].HH.LH; IF L>OLDL THEN BEGIN IF(MINIMUMDEMERITS<1073741823)AND((OLDL<>EASYLINE) OR(R=327137))THEN{836:}BEGIN IF NOBREAKYET THEN{837:} BEGIN NOBREAKYET:=FALSE;BREAKWIDTH[1]:=BACKGROUND[1]; BREAKWIDTH[2]:=BACKGROUND[2];BREAKWIDTH[3]:=BACKGROUND[3]; BREAKWIDTH[4]:=BACKGROUND[4];BREAKWIDTH[5]:=BACKGROUND[5]; BREAKWIDTH[6]:=BACKGROUND[6];S:=CURP; IF BREAKTYPE>0 THEN IF CURP<>0 THEN{840:}BEGIN T:=MEM[CURP].HH.B1; V:=CURP;S:=MEM[CURP+1].HH.RH;WHILE T>0 DO BEGIN T:=T-1;V:=MEM[V].HH.RH; {841:}IF(V>=HIMEMMIN)THEN BEGIN F:=MEM[V].HH.B0; BREAKWIDTH[1]:=BREAKWIDTH[1]-FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+ MEM[V].HH.B1].QQQQ.B0].INT; END ELSE CASE MEM[V].HH.B0 OF 6:BEGIN F:=MEM[V+1].HH.B0; BREAKWIDTH[1]:=BREAKWIDTH[1]-FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+ MEM[V+1].HH.B1].QQQQ.B0].INT;END; 0,1,2,11:BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM[V+1].INT; OTHERWISE CONFUSION(932)END{:841};END;WHILE S<>0 DO BEGIN{842:} IF(S>=HIMEMMIN)THEN BEGIN F:=MEM[S].HH.B0; BREAKWIDTH[1]:=BREAKWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+ MEM[S].HH.B1].QQQQ.B0].INT; END ELSE CASE MEM[S].HH.B0 OF 6:BEGIN F:=MEM[S+1].HH.B0; BREAKWIDTH[1]:=BREAKWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+ MEM[S+1].HH.B1].QQQQ.B0].INT;END; 0,1,2,11:BREAKWIDTH[1]:=BREAKWIDTH[1]+MEM[S+1].INT; OTHERWISE CONFUSION(933)END{:842};S:=MEM[S].HH.RH;END; BREAKWIDTH[1]:=BREAKWIDTH[1]+DISCWIDTH; IF MEM[CURP+1].HH.RH=0 THEN S:=MEM[V].HH.RH;END{:840}; WHILE S<>0 DO BEGIN IF(S>=HIMEMMIN)THEN GOTO 30; CASE MEM[S].HH.B0 OF 10:{838:}BEGIN V:=MEM[S+1].HH.LH; BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM[V+1].INT; BREAKWIDTH[2+MEM[V].HH.B0]:=BREAKWIDTH[2+MEM[V].HH.B0]-MEM[V+2].INT; BREAKWIDTH[6]:=BREAKWIDTH[6]-MEM[V+3].INT;END{:838};12:; 9:BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM[S+1].INT; 11:IF MEM[S].HH.B1<>1 THEN GOTO 30 ELSE BREAKWIDTH[1]:=BREAKWIDTH[1]-MEM [S+1].INT;OTHERWISE GOTO 30 END;S:=MEM[S].HH.RH;END;30:END{:837};{843:} IF MEM[PREVR].HH.B0=2 THEN BEGIN MEM[PREVR+1].INT:=MEM[PREVR+1].INT- CURACTIVEWIDTH[1]+BREAKWIDTH[1]; MEM[PREVR+2].INT:=MEM[PREVR+2].INT-CURACTIVEWIDTH[2]+BREAKWIDTH[2]; MEM[PREVR+3].INT:=MEM[PREVR+3].INT-CURACTIVEWIDTH[3]+BREAKWIDTH[3]; MEM[PREVR+4].INT:=MEM[PREVR+4].INT-CURACTIVEWIDTH[4]+BREAKWIDTH[4]; MEM[PREVR+5].INT:=MEM[PREVR+5].INT-CURACTIVEWIDTH[5]+BREAKWIDTH[5]; MEM[PREVR+6].INT:=MEM[PREVR+6].INT-CURACTIVEWIDTH[6]+BREAKWIDTH[6]; END ELSE IF PREVR=327137 THEN BEGIN ACTIVEWIDTH[1]:=BREAKWIDTH[1]; ACTIVEWIDTH[2]:=BREAKWIDTH[2];ACTIVEWIDTH[3]:=BREAKWIDTH[3]; ACTIVEWIDTH[4]:=BREAKWIDTH[4];ACTIVEWIDTH[5]:=BREAKWIDTH[5]; ACTIVEWIDTH[6]:=BREAKWIDTH[6];END ELSE BEGIN Q:=GETNODE(7); MEM[Q].HH.RH:=R;MEM[Q].HH.B0:=2;MEM[Q].HH.B1:=0; MEM[Q+1].INT:=BREAKWIDTH[1]-CURACTIVEWIDTH[1]; MEM[Q+2].INT:=BREAKWIDTH[2]-CURACTIVEWIDTH[2]; MEM[Q+3].INT:=BREAKWIDTH[3]-CURACTIVEWIDTH[3]; MEM[Q+4].INT:=BREAKWIDTH[4]-CURACTIVEWIDTH[4]; MEM[Q+5].INT:=BREAKWIDTH[5]-CURACTIVEWIDTH[5]; MEM[Q+6].INT:=BREAKWIDTH[6]-CURACTIVEWIDTH[6];MEM[PREVR].HH.RH:=Q; PREVPREVR:=PREVR;PREVR:=Q;END{:843}; IF ABS(EQTB[13184].INT)>=1073741823-MINIMUMDEMERITS THEN MINIMUMDEMERITS :=1073741822 ELSE MINIMUMDEMERITS:=MINIMUMDEMERITS+ABS(EQTB[13184].INT); FOR FITCLASS:=0 TO 3 DO BEGIN IF MINIMALDEMERITS[FITCLASS]<= MINIMUMDEMERITS THEN{845:}BEGIN Q:=GETNODE(2);MEM[Q].HH.RH:=PASSIVE; PASSIVE:=Q;MEM[Q+1].HH.RH:=CURP;PASSNUMBER:=PASSNUMBER+1; MEM[Q].HH.LH:=PASSNUMBER;MEM[Q+1].HH.LH:=BESTPLACE[FITCLASS]; Q:=GETNODE(ACTIVENODESIZE);MEM[Q+1].HH.RH:=PASSIVE; MEM[Q+1].HH.LH:=BESTPLLINE[FITCLASS]+1;MEM[Q].HH.B1:=FITCLASS; MEM[Q].HH.B0:=BREAKTYPE;MEM[Q+2].INT:=MINIMALDEMERITS[FITCLASS]; IF DOLASTLINEFIT THEN{1584:}BEGIN MEM[Q+3].INT:=BESTPLSHORT[FITCLASS]; MEM[Q+4].INT:=BESTPLGLUE[FITCLASS];END{:1584};MEM[Q].HH.RH:=R; MEM[PREVR].HH.RH:=Q;PREVR:=Q;IF EQTB[13200].INT>0 THEN{846:} BEGIN PRINTNL(934);PRINTINT(MEM[PASSIVE].HH.LH);PRINT(935); PRINTINT(MEM[Q+1].HH.LH-1);PRINTCHAR(46);PRINTINT(FITCLASS); IF BREAKTYPE=1 THEN PRINTCHAR(45);PRINT(936);PRINTINT(MEM[Q+2].INT); IF DOLASTLINEFIT THEN{1585:}BEGIN PRINT(1407);PRINTSCALED(MEM[Q+3].INT); IF CURP=0 THEN PRINT(1408)ELSE PRINT(1005);PRINTSCALED(MEM[Q+4].INT); END{:1585};PRINT(937); IF MEM[PASSIVE+1].HH.LH=0 THEN PRINTCHAR(48)ELSE PRINTINT(MEM[MEM[ PASSIVE+1].HH.LH].HH.LH);END{:846};END{:845}; MINIMALDEMERITS[FITCLASS]:=1073741823;END;MINIMUMDEMERITS:=1073741823; {844:}IF R<>327137 THEN BEGIN Q:=GETNODE(7);MEM[Q].HH.RH:=R; MEM[Q].HH.B0:=2;MEM[Q].HH.B1:=0; MEM[Q+1].INT:=CURACTIVEWIDTH[1]-BREAKWIDTH[1]; MEM[Q+2].INT:=CURACTIVEWIDTH[2]-BREAKWIDTH[2]; MEM[Q+3].INT:=CURACTIVEWIDTH[3]-BREAKWIDTH[3]; MEM[Q+4].INT:=CURACTIVEWIDTH[4]-BREAKWIDTH[4]; MEM[Q+5].INT:=CURACTIVEWIDTH[5]-BREAKWIDTH[5]; MEM[Q+6].INT:=CURACTIVEWIDTH[6]-BREAKWIDTH[6];MEM[PREVR].HH.RH:=Q; PREVPREVR:=PREVR;PREVR:=Q;END{:844};END{:836};IF R=327137 THEN GOTO 10; {850:}IF L>EASYLINE THEN BEGIN LINEWIDTH:=SECONDWIDTH;OLDL:=327144; END ELSE BEGIN OLDL:=L; IF L>LASTSPECIALLINE THEN LINEWIDTH:=SECONDWIDTH ELSE IF EQTB[11312].HH. RH=0 THEN LINEWIDTH:=FIRSTWIDTH ELSE LINEWIDTH:=MEM[EQTB[11312].HH.RH+2* L].INT;END{:850};END;END{:835};{851:}BEGIN ARTIFICIALDEMERITS:=FALSE; SHORTFALL:=LINEWIDTH-CURACTIVEWIDTH[1];IF SHORTFALL>0 THEN{852:} IF(CURACTIVEWIDTH[3]<>0)OR(CURACTIVEWIDTH[4]<>0)OR(CURACTIVEWIDTH[5]<>0) THEN BEGIN IF DOLASTLINEFIT THEN BEGIN IF CURP=0 THEN{1579:} BEGIN IF(MEM[R+3].INT=0)OR(MEM[R+4].INT<=0)THEN GOTO 45; IF(CURACTIVEWIDTH[3]<>FILLWIDTH[0])OR(CURACTIVEWIDTH[4]<>FILLWIDTH[1])OR (CURACTIVEWIDTH[5]<>FILLWIDTH[2])THEN GOTO 45; IF MEM[R+3].INT>0 THEN G:=CURACTIVEWIDTH[2]ELSE G:=CURACTIVEWIDTH[6]; IF G<=0 THEN GOTO 45;ARITHERROR:=FALSE; G:=FRACT(G,MEM[R+3].INT,MEM[R+4].INT,1073741823); IF EQTB[13229].INT<1000 THEN G:=FRACT(G,EQTB[13229].INT,1000,1073741823) ;IF ARITHERROR THEN IF MEM[R+3].INT>0 THEN G:=1073741823 ELSE G:= -1073741823;IF G>0 THEN{1580:}BEGIN IF G>SHORTFALL THEN G:=SHORTFALL; IF G>7230584 THEN IF CURACTIVEWIDTH[2]<1663497 THEN BEGIN B:=10000; FITCLASS:=0;GOTO 40;END;B:=BADNESS(G,CURACTIVEWIDTH[2]); IF B>12 THEN IF B>99 THEN FITCLASS:=0 ELSE FITCLASS:=1 ELSE FITCLASS:=2; GOTO 40;END{:1580}ELSE IF G<0 THEN{1581:} BEGIN IF-G>CURACTIVEWIDTH[6]THEN G:=-CURACTIVEWIDTH[6]; B:=BADNESS(-G,CURACTIVEWIDTH[6]); IF B>12 THEN FITCLASS:=3 ELSE FITCLASS:=2;GOTO 40;END{:1581}; 45:END{:1579};SHORTFALL:=0;END;B:=0;FITCLASS:=2; END ELSE BEGIN IF SHORTFALL>7230584 THEN IF CURACTIVEWIDTH[2]<1663497 THEN BEGIN B:=10000;FITCLASS:=0;GOTO 31;END; B:=BADNESS(SHORTFALL,CURACTIVEWIDTH[2]); IF B>12 THEN IF B>99 THEN FITCLASS:=0 ELSE FITCLASS:=1 ELSE FITCLASS:=2; 31:END{:852}ELSE{853:} BEGIN IF-SHORTFALL>CURACTIVEWIDTH[6]THEN B:=10001 ELSE B:=BADNESS(- SHORTFALL,CURACTIVEWIDTH[6]);IF B>12 THEN FITCLASS:=3 ELSE FITCLASS:=2; END{:853};IF DOLASTLINEFIT THEN{1582:}BEGIN IF CURP=0 THEN SHORTFALL:=0; IF SHORTFALL>0 THEN G:=CURACTIVEWIDTH[2]ELSE IF SHORTFALL<0 THEN G:= CURACTIVEWIDTH[6]ELSE G:=0;END{:1582}; 40:IF(B>10000)OR(PI=-10000)THEN{854:} BEGIN IF FINALPASS AND(MINIMUMDEMERITS=1073741823)AND(MEM[R].HH.RH= 327137)AND(PREVR=327137)THEN ARTIFICIALDEMERITS:=TRUE ELSE IF B> THRESHOLD THEN GOTO 60;NODERSTAYSACTIVE:=FALSE;END{:854} ELSE BEGIN PREVR:=R;IF B>THRESHOLD THEN GOTO 22;NODERSTAYSACTIVE:=TRUE; END;{855:}IF ARTIFICIALDEMERITS THEN D:=0 ELSE{859:} BEGIN D:=EQTB[13170].INT+B; IF ABS(D)>=10000 THEN D:=100000000 ELSE D:=D*D; IF PI<>0 THEN IF PI>0 THEN D:=D+PI*PI ELSE IF PI>-10000 THEN D:=D-PI*PI; IF(BREAKTYPE=1)AND(MEM[R].HH.B0=1)THEN IF CURP<>0 THEN D:=D+EQTB[13182]. INT ELSE D:=D+EQTB[13183].INT; IF ABS(FITCLASS-MEM[R].HH.B1)>1 THEN D:=D+EQTB[13184].INT;END{:859}; IF EQTB[13200].INT>0 THEN{856:}BEGIN IF PRINTEDNODE<>CURP THEN{857:} BEGIN PRINTNL(339); IF CURP=0 THEN SHORTDISPLAY(MEM[PRINTEDNODE].HH.RH)ELSE BEGIN SAVELINK:= MEM[CURP].HH.RH;MEM[CURP].HH.RH:=0;PRINTNL(339); SHORTDISPLAY(MEM[PRINTEDNODE].HH.RH);MEM[CURP].HH.RH:=SAVELINK;END; PRINTEDNODE:=CURP;END{:857};PRINTNL(64); IF CURP=0 THEN PRINTESC(606)ELSE IF MEM[CURP].HH.B0<>10 THEN BEGIN IF MEM[CURP].HH.B0=12 THEN PRINTESC(535)ELSE IF MEM[CURP].HH.B0=7 THEN PRINTESC(352)ELSE IF MEM[CURP].HH.B0=11 THEN PRINTESC(341)ELSE PRINTESC( 346);END;PRINT(938); IF MEM[R+1].HH.RH=0 THEN PRINTCHAR(48)ELSE PRINTINT(MEM[MEM[R+1].HH.RH]. HH.LH);PRINT(939);IF B>10000 THEN PRINTCHAR(42)ELSE PRINTINT(B); PRINT(940);PRINTINT(PI);PRINT(941); IF ARTIFICIALDEMERITS THEN PRINTCHAR(42)ELSE PRINTINT(D);END{:856}; D:=D+MEM[R+2].INT; IF D<=MINIMALDEMERITS[FITCLASS]THEN BEGIN MINIMALDEMERITS[FITCLASS]:=D; BESTPLACE[FITCLASS]:=MEM[R+1].HH.RH;BESTPLLINE[FITCLASS]:=L; IF DOLASTLINEFIT THEN{1583:}BEGIN BESTPLSHORT[FITCLASS]:=SHORTFALL; BESTPLGLUE[FITCLASS]:=G;END{:1583}; IF D0 THEN IF MEM[CURP].HH.B0=7 THEN BEGIN T:=MEM[CURP].HH.B1;WHILE T>0 DO BEGIN T:=T-1; PRINTEDNODE:=MEM[PRINTEDNODE].HH.RH;END;END{:858}END;{:829}{877:} PROCEDURE POSTLINEBREAK(D:BOOLEAN);LABEL 30,31;VAR Q,R,S:HALFWORD; DISCBREAK:BOOLEAN;POSTDISCBREAK:BOOLEAN;CURWIDTH:SCALED; CURINDENT:SCALED;T:QUARTERWORD;PEN:INTEGER;CURLINE:HALFWORD; LRPTR:HALFWORD;BEGIN LRPTR:=CURLIST.ETEXAUXFIELD;{878:} Q:=MEM[BESTBET+1].HH.RH;CURP:=0;REPEAT R:=Q;Q:=MEM[Q+1].HH.LH; MEM[R+1].HH.LH:=CURP;CURP:=R;UNTIL Q=0{:878};CURLINE:=CURLIST.PGFIELD+1; REPEAT{880:}IF(EQTB[13232].INT>0)THEN{1441:}BEGIN Q:=MEM[327141].HH.RH; IF LRPTR<>0 THEN BEGIN TEMPPTR:=LRPTR;R:=Q; REPEAT S:=NEWMATH(0,(MEM[TEMPPTR].HH.LH-1));MEM[S].HH.RH:=R;R:=S; TEMPPTR:=MEM[TEMPPTR].HH.RH;UNTIL TEMPPTR=0;MEM[327141].HH.RH:=R;END; WHILE Q<>MEM[CURP+1].HH.RH DO BEGIN IF NOT(Q>=HIMEMMIN)THEN IF MEM[Q].HH .B0=9 THEN{1442:} IF ODD(MEM[Q].HH.B1)THEN BEGIN IF LRPTR<>0 THEN IF MEM[LRPTR].HH.LH=(4*( MEM[Q].HH.B1 DIV 4)+3)THEN BEGIN TEMPPTR:=LRPTR; LRPTR:=MEM[TEMPPTR].HH.RH;BEGIN MEM[TEMPPTR].HH.RH:=AVAIL; AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END;END; END ELSE BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=(4*(MEM[Q].HH.B1 DIV 4)+3); MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR;END{:1442};Q:=MEM[Q].HH.RH;END; END{:1441};{881:}Q:=MEM[CURP+1].HH.RH;DISCBREAK:=FALSE; POSTDISCBREAK:=FALSE; IF Q<>0 THEN IF MEM[Q].HH.B0=10 THEN BEGIN DELETEGLUEREF(MEM[Q+1].HH.LH) ;MEM[Q+1].HH.LH:=EQTB[10790].HH.RH;MEM[Q].HH.B1:=9; MEM[EQTB[10790].HH.RH].HH.RH:=MEM[EQTB[10790].HH.RH].HH.RH+1;GOTO 30; END ELSE BEGIN IF MEM[Q].HH.B0=7 THEN{882:}BEGIN T:=MEM[Q].HH.B1;{883:} IF T=0 THEN R:=MEM[Q].HH.RH ELSE BEGIN R:=Q; WHILE T>1 DO BEGIN R:=MEM[R].HH.RH;T:=T-1;END;S:=MEM[R].HH.RH; R:=MEM[S].HH.RH;MEM[S].HH.RH:=0;FLUSHNODELIST(MEM[Q].HH.RH); MEM[Q].HH.B1:=0;END{:883};IF MEM[Q+1].HH.RH<>0 THEN{884:} BEGIN S:=MEM[Q+1].HH.RH;WHILE MEM[S].HH.RH<>0 DO S:=MEM[S].HH.RH; MEM[S].HH.RH:=R;R:=MEM[Q+1].HH.RH;MEM[Q+1].HH.RH:=0;POSTDISCBREAK:=TRUE; END{:884};IF MEM[Q+1].HH.LH<>0 THEN{885:}BEGIN S:=MEM[Q+1].HH.LH; MEM[Q].HH.RH:=S;WHILE MEM[S].HH.RH<>0 DO S:=MEM[S].HH.RH; MEM[Q+1].HH.LH:=0;Q:=S;END{:885};MEM[Q].HH.RH:=R;DISCBREAK:=TRUE; END{:882} ELSE IF MEM[Q].HH.B0=11 THEN MEM[Q+1].INT:=0 ELSE IF MEM[Q].HH.B0=9 THEN BEGIN MEM[Q+1].INT:=0;IF(EQTB[13232].INT>0)THEN{1442:} IF ODD(MEM[Q].HH.B1)THEN BEGIN IF LRPTR<>0 THEN IF MEM[LRPTR].HH.LH=(4*( MEM[Q].HH.B1 DIV 4)+3)THEN BEGIN TEMPPTR:=LRPTR; LRPTR:=MEM[TEMPPTR].HH.RH;BEGIN MEM[TEMPPTR].HH.RH:=AVAIL; AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END;END; END ELSE BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=(4*(MEM[Q].HH.B1 DIV 4)+3); MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR;END{:1442};END; END ELSE BEGIN Q:=327141;WHILE MEM[Q].HH.RH<>0 DO Q:=MEM[Q].HH.RH;END; {886:}R:=NEWPARAMGLUE(8);MEM[R].HH.RH:=MEM[Q].HH.RH;MEM[Q].HH.RH:=R; Q:=R{:886};30:{:881};IF(EQTB[13232].INT>0)THEN{1443:} IF LRPTR<>0 THEN BEGIN S:=327141;R:=MEM[S].HH.RH; WHILE R<>Q DO BEGIN S:=R;R:=MEM[S].HH.RH;END;R:=LRPTR; WHILE R<>0 DO BEGIN TEMPPTR:=NEWMATH(0,MEM[R].HH.LH); MEM[S].HH.RH:=TEMPPTR;S:=TEMPPTR;R:=MEM[R].HH.RH;END;MEM[S].HH.RH:=Q; END{:1443};{887:}R:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0;Q:=MEM[327141].HH.RH; MEM[327141].HH.RH:=R; IF EQTB[10789].HH.RH<>0 THEN BEGIN R:=NEWPARAMGLUE(7);MEM[R].HH.RH:=Q; Q:=R;END{:887};{889:} IF CURLINE>LASTSPECIALLINE THEN BEGIN CURWIDTH:=SECONDWIDTH; CURINDENT:=SECONDINDENT; END ELSE IF EQTB[11312].HH.RH=0 THEN BEGIN CURWIDTH:=FIRSTWIDTH; CURINDENT:=FIRSTINDENT; END ELSE BEGIN CURWIDTH:=MEM[EQTB[11312].HH.RH+2*CURLINE].INT; CURINDENT:=MEM[EQTB[11312].HH.RH+2*CURLINE-1].INT;END; ADJUSTTAIL:=327139;JUSTBOX:=HPACK(Q,CURWIDTH,0); MEM[JUSTBOX+4].INT:=CURINDENT{:889};{888:}APPENDTOVLIST(JUSTBOX); IF 327139<>ADJUSTTAIL THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[ 327139].HH.RH;CURLIST.TAILFIELD:=ADJUSTTAIL;END;ADJUSTTAIL:=0{:888}; {890:}IF CURLINE+1<>BESTLINE THEN BEGIN Q:=EQTB[11313].HH.RH; IF Q<>0 THEN BEGIN R:=CURLINE;IF R>MEM[Q+1].INT THEN R:=MEM[Q+1].INT; PEN:=MEM[Q+R+1].INT;END ELSE PEN:=EQTB[13181].INT;Q:=EQTB[11314].HH.RH; IF Q<>0 THEN BEGIN R:=CURLINE-CURLIST.PGFIELD; IF R>MEM[Q+1].INT THEN R:=MEM[Q+1].INT;PEN:=PEN+MEM[Q+R+1].INT; END ELSE IF CURLINE=CURLIST.PGFIELD+1 THEN PEN:=PEN+EQTB[13173].INT; IF D THEN Q:=EQTB[11316].HH.RH ELSE Q:=EQTB[11315].HH.RH; IF Q<>0 THEN BEGIN R:=BESTLINE-CURLINE-1; IF R>MEM[Q+1].INT THEN R:=MEM[Q+1].INT;PEN:=PEN+MEM[Q+R+1].INT; END ELSE IF CURLINE+2=BESTLINE THEN IF D THEN PEN:=PEN+EQTB[13175].INT ELSE PEN:=PEN+EQTB[13174].INT; IF DISCBREAK THEN PEN:=PEN+EQTB[13176].INT; IF PEN<>0 THEN BEGIN R:=NEWPENALTY(PEN);MEM[CURLIST.TAILFIELD].HH.RH:=R; CURLIST.TAILFIELD:=R;END;END{:890}{:880};CURLINE:=CURLINE+1; CURP:=MEM[CURP+1].HH.LH;IF CURP<>0 THEN IF NOT POSTDISCBREAK THEN{879:} BEGIN R:=327141;WHILE TRUE DO BEGIN Q:=MEM[R].HH.RH; IF Q=MEM[CURP+1].HH.RH THEN GOTO 31;IF(Q>=HIMEMMIN)THEN GOTO 31; IF(MEM[Q].HH.B0<9)THEN GOTO 31; IF MEM[Q].HH.B0=11 THEN IF MEM[Q].HH.B1<>1 THEN GOTO 31;R:=Q; IF MEM[Q].HH.B0=9 THEN IF(EQTB[13232].INT>0)THEN{1442:} IF ODD(MEM[Q].HH.B1)THEN BEGIN IF LRPTR<>0 THEN IF MEM[LRPTR].HH.LH=(4*( MEM[Q].HH.B1 DIV 4)+3)THEN BEGIN TEMPPTR:=LRPTR; LRPTR:=MEM[TEMPPTR].HH.RH;BEGIN MEM[TEMPPTR].HH.RH:=AVAIL; AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END;END; END ELSE BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=(4*(MEM[Q].HH.B1 DIV 4)+3); MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR;END{:1442};END; 31:IF R<>327141 THEN BEGIN MEM[R].HH.RH:=0; FLUSHNODELIST(MEM[327141].HH.RH);MEM[327141].HH.RH:=Q;END;END{:879}; UNTIL CURP=0; IF(CURLINE<>BESTLINE)OR(MEM[327141].HH.RH<>0)THEN CONFUSION(948); CURLIST.PGFIELD:=BESTLINE-1;CURLIST.ETEXAUXFIELD:=LRPTR;END;{:877}{895:} {906:}FUNCTION RECONSTITUTE(J,N:SMALLNUMBER; BCHAR,HCHAR:HALFWORD):SMALLNUMBER;LABEL 22,30;VAR P:HALFWORD;T:HALFWORD; Q:FOURQUARTERS;CURRH:HALFWORD;TESTCHAR:HALFWORD;W:SCALED;K:FONTINDEX; BEGIN HYPHENPASSED:=0;T:=327140;W:=0;MEM[327140].HH.RH:=0;{908:} CURL:=HU[J];CURQ:=T;IF J=0 THEN BEGIN LIGATUREPRESENT:=INITLIG; P:=INITLIST;IF LIGATUREPRESENT THEN LFTHIT:=INITLFT; WHILE P>0 DO BEGIN BEGIN MEM[T].HH.RH:=GETAVAIL;T:=MEM[T].HH.RH; MEM[T].HH.B0:=HF;MEM[T].HH.B1:=MEM[P].HH.B1;END;P:=MEM[P].HH.RH;END; END ELSE IF CURL<256 THEN BEGIN MEM[T].HH.RH:=GETAVAIL;T:=MEM[T].HH.RH; MEM[T].HH.B0:=HF;MEM[T].HH.B1:=CURL;END;LIGSTACK:=0; BEGIN IF J1 THEN GOTO 30;K:=LIGKERNBASE[HF]+Q.B3; Q:=FONTINFO[K].QQQQ; IF Q.B0>128 THEN BEGIN K:=LIGKERNBASE[HF]+256*Q.B2+Q.B3+32768-256*(128); Q:=FONTINFO[K].QQQQ;END;END; IF CURRH<256 THEN TESTCHAR:=CURRH ELSE TESTCHAR:=CURR; WHILE TRUE DO BEGIN IF Q.B1=TESTCHAR THEN IF Q.B0<=128 THEN IF CURRH<256 THEN BEGIN HYPHENPASSED:=J;HCHAR:=256;CURRH:=256;GOTO 22; END ELSE BEGIN IF HCHAR<256 THEN IF ODD(HYF[J])THEN BEGIN HYPHENPASSED:= J;HCHAR:=256;END;IF Q.B2<128 THEN{911:} BEGIN IF CURL=256 THEN LFTHIT:=TRUE; IF J=N THEN IF LIGSTACK=0 THEN RTHIT:=TRUE; BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END; CASE Q.B2 OF 1,5:BEGIN CURL:=Q.B3;LIGATUREPRESENT:=TRUE;END; 2,6:BEGIN CURR:=Q.B3; IF LIGSTACK>0 THEN MEM[LIGSTACK].HH.B1:=CURR ELSE BEGIN LIGSTACK:= NEWLIGITEM(CURR);IF J=N THEN BCHAR:=256 ELSE BEGIN P:=GETAVAIL; MEM[LIGSTACK+1].HH.RH:=P;MEM[P].HH.B1:=HU[J+1];MEM[P].HH.B0:=HF;END;END; END;3:BEGIN CURR:=Q.B3;P:=LIGSTACK;LIGSTACK:=NEWLIGITEM(CURR); MEM[LIGSTACK].HH.RH:=P;END; 7,11:BEGIN IF LIGATUREPRESENT THEN BEGIN P:=NEWLIGATURE(HF,CURL,MEM[CURQ ].HH.RH);IF LFTHIT THEN BEGIN MEM[P].HH.B1:=2;LFTHIT:=FALSE;END; IF FALSE THEN IF LIGSTACK=0 THEN BEGIN MEM[P].HH.B1:=MEM[P].HH.B1+1; RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=P;T:=P;LIGATUREPRESENT:=FALSE;END; CURQ:=T;CURL:=Q.B3;LIGATUREPRESENT:=TRUE;END;OTHERWISE BEGIN CURL:=Q.B3; LIGATUREPRESENT:=TRUE; IF LIGSTACK>0 THEN BEGIN IF MEM[LIGSTACK+1].HH.RH>0 THEN BEGIN MEM[T].HH .RH:=MEM[LIGSTACK+1].HH.RH;T:=MEM[T].HH.RH;J:=J+1;END;P:=LIGSTACK; LIGSTACK:=MEM[P].HH.RH;FREENODE(P,2); IF LIGSTACK=0 THEN BEGIN IF J4 THEN IF Q.B2<>7 THEN GOTO 30;GOTO 22;END{:911}; W:=FONTINFO[KERNBASE[HF]+256*Q.B2+Q.B3].INT;GOTO 30;END; IF Q.B0>=128 THEN IF CURRH=256 THEN GOTO 30 ELSE BEGIN CURRH:=256; GOTO 22;END;K:=K+Q.B0+1;Q:=FONTINFO[K].QQQQ;END;30:{:909};{910:} IF LIGATUREPRESENT THEN BEGIN P:=NEWLIGATURE(HF,CURL,MEM[CURQ].HH.RH); IF LFTHIT THEN BEGIN MEM[P].HH.B1:=2;LFTHIT:=FALSE;END; IF RTHIT THEN IF LIGSTACK=0 THEN BEGIN MEM[P].HH.B1:=MEM[P].HH.B1+1; RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=P;T:=P;LIGATUREPRESENT:=FALSE;END; IF W<>0 THEN BEGIN MEM[T].HH.RH:=NEWKERN(W);T:=MEM[T].HH.RH;W:=0;END; IF LIGSTACK>0 THEN BEGIN CURQ:=T;CURL:=MEM[LIGSTACK].HH.B1; LIGATUREPRESENT:=TRUE; BEGIN IF MEM[LIGSTACK+1].HH.RH>0 THEN BEGIN MEM[T].HH.RH:=MEM[LIGSTACK+1 ].HH.RH;T:=MEM[T].HH.RH;J:=J+1;END;P:=LIGSTACK;LIGSTACK:=MEM[P].HH.RH; FREENODE(P,2); IF LIGSTACK=0 THEN BEGIN IF JHC[J]THEN GOTO 30; J:=J+1;U:=U+1;UNTIL J>HN;{932:}S:=HYPHLIST[H]; WHILE S<>0 DO BEGIN HYF[MEM[S].HH.LH]:=1;S:=MEM[S].HH.RH;END{:932}; HN:=HN-1;GOTO 40;END;30:{:931};IF H>0 THEN H:=H-1 ELSE H:=503;END; 45:HN:=HN-1{:930};IF TRIE[CURLANG+1].B1<>CURLANG THEN GOTO 10;HC[0]:=0; HC[HN+1]:=0;HC[HN+2]:=256; FOR J:=0 TO HN-RHYF+1 DO BEGIN Z:=TRIE[CURLANG+1].RH+HC[J];L:=J; WHILE HC[L]=TRIE[Z].B1 DO BEGIN IF TRIE[Z].B0<>0 THEN{924:} BEGIN V:=TRIE[Z].B0;REPEAT V:=V+OPSTART[CURLANG];I:=L-HYFDISTANCE[V]; IF HYFNUM[V]>HYF[I]THEN HYF[I]:=HYFNUM[V];V:=HYFNEXT[V];UNTIL V=0; END{:924};L:=L+1;Z:=TRIE[Z].RH+HC[L];END;END; 40:FOR J:=0 TO LHYF-1 DO HYF[J]:=0; FOR J:=0 TO RHYF-1 DO HYF[HN-J]:=0{:923};{902:} FOR J:=LHYF TO HN-RHYF DO IF ODD(HYF[J])THEN GOTO 41;GOTO 10;41:{:902}; {903:}Q:=MEM[HB].HH.RH;MEM[HB].HH.RH:=0;R:=MEM[HA].HH.RH; MEM[HA].HH.RH:=0;BCHAR:=HYFBCHAR; IF(HA>=HIMEMMIN)THEN IF MEM[HA].HH.B0<>HF THEN GOTO 42 ELSE BEGIN INITLIST:=HA;INITLIG:=FALSE;HU[0]:=MEM[HA].HH.B1; END ELSE IF MEM[HA].HH.B0=6 THEN IF MEM[HA+1].HH.B0<>HF THEN GOTO 42 ELSE BEGIN INITLIST:=MEM[HA+1].HH.RH;INITLIG:=TRUE; INITLFT:=(MEM[HA].HH.B1>1);HU[0]:=MEM[HA+1].HH.B1; IF INITLIST=0 THEN IF INITLFT THEN BEGIN HU[0]:=256;INITLIG:=FALSE;END; FREENODE(HA,2); END ELSE BEGIN IF NOT(R>=HIMEMMIN)THEN IF MEM[R].HH.B0=6 THEN IF MEM[R]. HH.B1>1 THEN GOTO 42;J:=1;S:=HA;INITLIST:=0;GOTO 50;END;S:=CURP; WHILE MEM[S].HH.RH<>HA DO S:=MEM[S].HH.RH;J:=0;GOTO 50;42:S:=HA;J:=0; HU[0]:=256;INITLIG:=FALSE;INITLIST:=0;50:FLUSHNODELIST(R);{913:} REPEAT L:=J;J:=RECONSTITUTE(J,HN,BCHAR,HYFCHAR)+1; IF HYPHENPASSED=0 THEN BEGIN MEM[S].HH.RH:=MEM[327140].HH.RH; WHILE MEM[S].HH.RH>0 DO S:=MEM[S].HH.RH;IF ODD(HYF[J-1])THEN BEGIN L:=J; HYPHENPASSED:=J-1;MEM[327140].HH.RH:=0;END;END; IF HYPHENPASSED>0 THEN{914:}REPEAT R:=GETNODE(2); MEM[R].HH.RH:=MEM[327140].HH.RH;MEM[R].HH.B0:=7;MAJORTAIL:=R;RCOUNT:=0; WHILE MEM[MAJORTAIL].HH.RH>0 DO BEGIN MAJORTAIL:=MEM[MAJORTAIL].HH.RH; RCOUNT:=RCOUNT+1;END;I:=HYPHENPASSED;HYF[I]:=0;{915:}MINORTAIL:=0; MEM[R+1].HH.LH:=0;HYFNODE:=NEWCHARACTER(HF,HYFCHAR); IF HYFNODE<>0 THEN BEGIN I:=I+1;C:=HU[I];HU[I]:=HYFCHAR; BEGIN MEM[HYFNODE].HH.RH:=AVAIL;AVAIL:=HYFNODE;DYNUSED:=DYNUSED-1;END; END;WHILE L<=I DO BEGIN L:=RECONSTITUTE(L,I,FONTBCHAR[HF],256)+1; IF MEM[327140].HH.RH>0 THEN BEGIN IF MINORTAIL=0 THEN MEM[R+1].HH.LH:= MEM[327140].HH.RH ELSE MEM[MINORTAIL].HH.RH:=MEM[327140].HH.RH; MINORTAIL:=MEM[327140].HH.RH; WHILE MEM[MINORTAIL].HH.RH>0 DO MINORTAIL:=MEM[MINORTAIL].HH.RH;END;END; IF HYFNODE<>0 THEN BEGIN HU[I]:=C;L:=I;I:=I-1;END{:915};{916:} MINORTAIL:=0;MEM[R+1].HH.RH:=0;CLOC:=0; IF BCHARLABEL[HF]<>0 THEN BEGIN L:=L-1;C:=HU[L];CLOC:=L;HU[L]:=256;END; WHILE L0 THEN BEGIN HU[CLOC]:=C;CLOC:=0;END; IF MEM[327140].HH.RH>0 THEN BEGIN IF MINORTAIL=0 THEN MEM[R+1].HH.RH:= MEM[327140].HH.RH ELSE MEM[MINORTAIL].HH.RH:=MEM[327140].HH.RH; MINORTAIL:=MEM[327140].HH.RH; WHILE MEM[MINORTAIL].HH.RH>0 DO MINORTAIL:=MEM[MINORTAIL].HH.RH;END; UNTIL L>=J;WHILE L>J DO{917:}BEGIN J:=RECONSTITUTE(J,HN,BCHAR,256)+1; MEM[MAJORTAIL].HH.RH:=MEM[327140].HH.RH; WHILE MEM[MAJORTAIL].HH.RH>0 DO BEGIN MAJORTAIL:=MEM[MAJORTAIL].HH.RH; RCOUNT:=RCOUNT+1;END;END{:917};END{:916};{918:} IF RCOUNT>127 THEN BEGIN MEM[S].HH.RH:=MEM[R].HH.RH;MEM[R].HH.RH:=0; FLUSHNODELIST(R);END ELSE BEGIN MEM[S].HH.RH:=R;MEM[R].HH.B1:=RCOUNT; END;S:=MAJORTAIL{:918};HYPHENPASSED:=J-1;MEM[327140].HH.RH:=0; UNTIL NOT ODD(HYF[J-1]){:914};UNTIL J>HN;MEM[S].HH.RH:=Q{:913}; FLUSHLIST(INITLIST){:903};10:END;{:895}{942:}{944:} FUNCTION NEWTRIEOP(D,N:SMALLNUMBER;V:QUARTERWORD):QUARTERWORD;LABEL 10; VAR H:-TRIEOPSIZE..TRIEOPSIZE;U:QUARTERWORD;L:0..TRIEOPSIZE; BEGIN H:=ABS(N+313*D+361*V+1009*CURLANG)MOD(TRIEOPSIZE+TRIEOPSIZE)- TRIEOPSIZE;WHILE TRUE DO BEGIN L:=TRIEOPHASH[H]; IF L=0 THEN BEGIN IF TRIEOPPTR=TRIEOPSIZE THEN OVERFLOW(958,TRIEOPSIZE); U:=TRIEUSED[CURLANG];IF U=511 THEN OVERFLOW(959,511); TRIEOPPTR:=TRIEOPPTR+1;U:=U+1;TRIEUSED[CURLANG]:=U; HYFDISTANCE[TRIEOPPTR]:=D;HYFNUM[TRIEOPPTR]:=N;HYFNEXT[TRIEOPPTR]:=V; TRIEOPLANG[TRIEOPPTR]:=CURLANG;TRIEOPHASH[H]:=TRIEOPPTR; TRIEOPVAL[TRIEOPPTR]:=U;NEWTRIEOP:=U;GOTO 10;END; IF(HYFDISTANCE[L]=D)AND(HYFNUM[L]=N)AND(HYFNEXT[L]=V)AND(TRIEOPLANG[L]= CURLANG)THEN BEGIN NEWTRIEOP:=TRIEOPVAL[L];GOTO 10;END; IF H>-TRIEOPSIZE THEN H:=H-1 ELSE H:=TRIEOPSIZE;END;10:END;{:944}{948:} FUNCTION TRIENODE(P:TRIEPOINTER):TRIEPOINTER;LABEL 10;VAR H:TRIEPOINTER; Q:TRIEPOINTER; BEGIN H:=ABS(TRIEC[P]+1009*TRIEO[P]+2718*TRIEL[P]+3142*TRIER[P])MOD TRIESIZE;WHILE TRUE DO BEGIN Q:=TRIEHASH[H]; IF Q=0 THEN BEGIN TRIEHASH[H]:=P;TRIENODE:=P;GOTO 10;END; IF(TRIEC[Q]=TRIEC[P])AND(TRIEO[Q]=TRIEO[P])AND(TRIEL[Q]=TRIEL[P])AND( TRIER[Q]=TRIER[P])THEN BEGIN TRIENODE:=Q;GOTO 10;END; IF H>0 THEN H:=H-1 ELSE H:=TRIESIZE;END;10:END;{:948}{949:} FUNCTION COMPRESSTRIE(P:TRIEPOINTER):TRIEPOINTER; BEGIN IF P=0 THEN COMPRESSTRIE:=0 ELSE BEGIN TRIEL[P]:=COMPRESSTRIE( TRIEL[P]);TRIER[P]:=COMPRESSTRIE(TRIER[P]);COMPRESSTRIE:=TRIENODE(P); END;END;{:949}{953:}PROCEDURE FIRSTFIT(P:TRIEPOINTER);LABEL 45,40; VAR H:TRIEPOINTER;Z:TRIEPOINTER;Q:TRIEPOINTER;C:ASCIICODE; L,R:TRIEPOINTER;LL:1..256;BEGIN C:=TRIEC[P];Z:=TRIEMIN[C]; WHILE TRUE DO BEGIN H:=Z-C;{954:} IF TRIEMAX0 DO BEGIN IF TRIE[H+TRIEC[Q]].RH=0 THEN GOTO 45; Q:=TRIER[Q];END;GOTO 40{:955};45:Z:=TRIE[Z].RH;END;40:{956:} TRIETAKEN[H]:=TRUE;TRIEHASH[P]:=H;Q:=P;REPEAT Z:=H+TRIEC[Q]; L:=TRIE[Z].LH;R:=TRIE[Z].RH;TRIE[R].LH:=L;TRIE[L].RH:=R;TRIE[Z].RH:=0; IF L<256 THEN BEGIN IF Z<256 THEN LL:=Z ELSE LL:=256; REPEAT TRIEMIN[L]:=R;L:=L+1;UNTIL L=LL;END;Q:=TRIER[Q];UNTIL Q=0{:956}; END;{:953}{957:}PROCEDURE TRIEPACK(P:TRIEPOINTER);VAR Q:TRIEPOINTER; BEGIN REPEAT Q:=TRIEL[P]; IF(Q>0)AND(TRIEHASH[Q]=0)THEN BEGIN FIRSTFIT(Q);TRIEPACK(Q);END; P:=TRIER[P];UNTIL P=0;END;{:957}{959:}PROCEDURE TRIEFIX(P:TRIEPOINTER); VAR Q:TRIEPOINTER;C:ASCIICODE;Z:TRIEPOINTER;BEGIN Z:=TRIEHASH[P]; REPEAT Q:=TRIEL[P];C:=TRIEC[P];TRIE[Z+C].RH:=TRIEHASH[Q]; TRIE[Z+C].B1:=C;TRIE[Z+C].B0:=TRIEO[P];IF Q>0 THEN TRIEFIX(Q); P:=TRIER[P];UNTIL P=0;END;{:959}{960:}PROCEDURE NEWPATTERNS;LABEL 30,31; VAR K,L:0..64;DIGITSENSED:BOOLEAN;V:QUARTERWORD;P,Q:TRIEPOINTER; FIRSTCHILD:BOOLEAN;C:ASCIICODE; BEGIN IF TRIENOTREADY THEN BEGIN IF EQTB[13218].INT<=0 THEN CURLANG:=0 ELSE IF EQTB[13218].INT>255 THEN CURLANG:=0 ELSE CURLANG:=EQTB[13218]. INT;SCANLEFTBRACE;{961:}K:=0;HYF[0]:=0;DIGITSENSED:=FALSE; WHILE TRUE DO BEGIN GETXTOKEN;CASE CURCMD OF 11,12:{962:} IF DIGITSENSED OR(CURCHR<48)OR(CURCHR>57)THEN BEGIN IF CURCHR=46 THEN CURCHR:=0 ELSE BEGIN CURCHR:=EQTB[12144+CURCHR].HH.RH; IF CURCHR=0 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(966);END; BEGIN HELPPTR:=1;HELPLINE[0]:=965;END;ERROR;END;END; IF K<63 THEN BEGIN K:=K+1;HC[K]:=CURCHR;HYF[K]:=0;DIGITSENSED:=FALSE; END;END ELSE IF K<63 THEN BEGIN HYF[K]:=CURCHR-48;DIGITSENSED:=TRUE; END{:962};10,2:BEGIN IF K>0 THEN{963:}BEGIN{965:} IF HC[1]=0 THEN HYF[0]:=0;IF HC[K]=0 THEN HYF[K]:=0;L:=K;V:=0; WHILE TRUE DO BEGIN IF HYF[L]<>0 THEN V:=NEWTRIEOP(K-L,HYF[L],V); IF L>0 THEN L:=L-1 ELSE GOTO 31;END;31:{:965};Q:=0;HC[0]:=CURLANG; WHILE L<=K DO BEGIN C:=HC[L];L:=L+1;P:=TRIEL[Q];FIRSTCHILD:=TRUE; WHILE(P>0)AND(C>TRIEC[P])DO BEGIN Q:=P;P:=TRIER[Q];FIRSTCHILD:=FALSE; END;IF(P=0)OR(C0 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(967);END; BEGIN HELPPTR:=1;HELPLINE[0]:=965;END;ERROR;END;TRIEO[Q]:=V;END{:963}; IF CURCMD=2 THEN GOTO 30;K:=0;HYF[0]:=0;DIGITSENSED:=FALSE;END; OTHERWISE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(964);END;PRINTESC(962); BEGIN HELPPTR:=1;HELPLINE[0]:=965;END;ERROR;END END;END;30:{:961}; IF EQTB[13231].INT>0 THEN{1588:}BEGIN C:=CURLANG;FIRSTCHILD:=FALSE;P:=0; REPEAT Q:=P;P:=TRIER[Q];UNTIL(P=0)OR(C<=TRIEC[P]); IF(P=0)OR(C0)OR((C=255)AND FIRSTCHILD) THEN BEGIN IF P=0 THEN{964:} BEGIN IF TRIEPTR=TRIESIZE THEN OVERFLOW(960,TRIESIZE); TRIEPTR:=TRIEPTR+1;TRIER[TRIEPTR]:=P;P:=TRIEPTR;TRIEL[P]:=0; IF FIRSTCHILD THEN TRIEL[Q]:=P ELSE TRIER[Q]:=P;TRIEC[P]:=C;TRIEO[P]:=0; END{:964}ELSE TRIEC[P]:=C;TRIEO[P]:=EQTB[12144+C].HH.RH;Q:=P; P:=TRIER[Q];FIRSTCHILD:=FALSE;END; IF FIRSTCHILD THEN TRIEL[Q]:=0 ELSE TRIER[Q]:=0{:1589};END{:1588}; END ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(961);END;PRINTESC(962); BEGIN HELPPTR:=1;HELPLINE[0]:=963;END;ERROR; MEM[327132].HH.RH:=SCANTOKS(FALSE,FALSE);FLUSHLIST(DEFREF);END;END; {:960}{966:}PROCEDURE INITTRIE;VAR P:TRIEPOINTER;J,K,T:INTEGER; R,S:TRIEPOINTER;H:TWOHALVES;BEGIN{952:}{945:}OPSTART[0]:=-0; FOR J:=1 TO 255 DO OPSTART[J]:=OPSTART[J-1]+TRIEUSED[J-1]; FOR J:=1 TO TRIEOPPTR DO TRIEOPHASH[J]:=OPSTART[TRIEOPLANG[J]]+TRIEOPVAL [J]; FOR J:=1 TO TRIEOPPTR DO WHILE TRIEOPHASH[J]>J DO BEGIN K:=TRIEOPHASH[J] ;T:=HYFDISTANCE[K];HYFDISTANCE[K]:=HYFDISTANCE[J];HYFDISTANCE[J]:=T; T:=HYFNUM[K];HYFNUM[K]:=HYFNUM[J];HYFNUM[J]:=T;T:=HYFNEXT[K]; HYFNEXT[K]:=HYFNEXT[J];HYFNEXT[J]:=T;TRIEOPHASH[J]:=TRIEOPHASH[K]; TRIEOPHASH[K]:=K;END{:945};FOR P:=0 TO TRIESIZE DO TRIEHASH[P]:=0; TRIER[0]:=COMPRESSTRIE(TRIER[0]);TRIEL[0]:=COMPRESSTRIE(TRIEL[0]); FOR P:=0 TO TRIEPTR DO TRIEHASH[P]:=0; FOR P:=0 TO 255 DO TRIEMIN[P]:=P+1;TRIE[0].RH:=1;TRIEMAX:=0{:952}; IF TRIEL[0]<>0 THEN BEGIN FIRSTFIT(TRIEL[0]);TRIEPACK(TRIEL[0]);END; IF TRIER[0]<>0 THEN{1590:} BEGIN IF TRIEL[0]=0 THEN FOR P:=0 TO 255 DO TRIEMIN[P]:=P+2; FIRSTFIT(TRIER[0]);TRIEPACK(TRIER[0]);HYPHSTART:=TRIEHASH[TRIER[0]]; END{:1590};{958:}H.RH:=0;H.B0:=0;H.B1:=0; IF TRIEMAX=0 THEN BEGIN FOR R:=0 TO 256 DO TRIE[R]:=H;TRIEMAX:=256; END ELSE BEGIN IF TRIER[0]>0 THEN TRIEFIX(TRIER[0]); IF TRIEL[0]>0 THEN TRIEFIX(TRIEL[0]);R:=0;REPEAT S:=TRIE[R].RH; TRIE[R]:=H;R:=S;UNTIL R>TRIEMAX;END;TRIE[0].B1:=63;{:958}; TRIENOTREADY:=FALSE;END;{:966}{:942}PROCEDURE LINEBREAK(D:BOOLEAN); LABEL 30,31,32,33,34,35,22;VAR{862:}AUTOBREAKING:BOOLEAN;PREVP:HALFWORD; Q,R,S,PREVS:HALFWORD;F:INTERNALFONTNUMBER;{:862}{893:}J:SMALLNUMBER; C:0..255;{:893}BEGIN PACKBEGINLINE:=CURLIST.MLFIELD;{816:} MEM[327141].HH.RH:=MEM[CURLIST.HEADFIELD].HH.RH; IF(CURLIST.TAILFIELD>=HIMEMMIN)THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:= NEWPENALTY(10000);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH; END ELSE IF MEM[CURLIST.TAILFIELD].HH.B0<>10 THEN BEGIN MEM[CURLIST. TAILFIELD].HH.RH:=NEWPENALTY(10000); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH; END ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.B0:=12; DELETEGLUEREF(MEM[CURLIST.TAILFIELD+1].HH.LH); FLUSHNODELIST(MEM[CURLIST.TAILFIELD+1].HH.RH); MEM[CURLIST.TAILFIELD+1].INT:=10000;END; MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(14); LASTLINEFILL:=MEM[CURLIST.TAILFIELD].HH.RH; INITCURLANG:=CURLIST.PGFIELD MOD 65536; INITLHYF:=CURLIST.PGFIELD DIV 4194304; INITRHYF:=(CURLIST.PGFIELD DIV 65536)MOD 64;POPNEST;{:816}{827:} NOSHRINKERRORYET:=TRUE; IF(MEM[EQTB[10789].HH.RH].HH.B1<>0)AND(MEM[EQTB[10789].HH.RH+3].INT<>0) THEN BEGIN EQTB[10789].HH.RH:=FINITESHRINK(EQTB[10789].HH.RH);END; IF(MEM[EQTB[10790].HH.RH].HH.B1<>0)AND(MEM[EQTB[10790].HH.RH+3].INT<>0) THEN BEGIN EQTB[10790].HH.RH:=FINITESHRINK(EQTB[10790].HH.RH);END; Q:=EQTB[10789].HH.RH;R:=EQTB[10790].HH.RH; BACKGROUND[1]:=MEM[Q+1].INT+MEM[R+1].INT;BACKGROUND[2]:=0; BACKGROUND[3]:=0;BACKGROUND[4]:=0;BACKGROUND[5]:=0; BACKGROUND[2+MEM[Q].HH.B0]:=MEM[Q+2].INT; BACKGROUND[2+MEM[R].HH.B0]:=BACKGROUND[2+MEM[R].HH.B0]+MEM[R+2].INT; BACKGROUND[6]:=MEM[Q+3].INT+MEM[R+3].INT;{1576:}DOLASTLINEFIT:=FALSE; ACTIVENODESIZE:=3; IF EQTB[13229].INT>0 THEN BEGIN Q:=MEM[LASTLINEFILL+1].HH.LH; IF(MEM[Q+2].INT>0)AND(MEM[Q].HH.B0>0)THEN IF(BACKGROUND[3]=0)AND( BACKGROUND[4]=0)AND(BACKGROUND[5]=0)THEN BEGIN DOLASTLINEFIT:=TRUE; ACTIVENODESIZE:=5;FILLWIDTH[0]:=0;FILLWIDTH[1]:=0;FILLWIDTH[2]:=0; FILLWIDTH[MEM[Q].HH.B0-1]:=MEM[Q+2].INT;END;END{:1576};{:827}{834:} MINIMUMDEMERITS:=1073741823;MINIMALDEMERITS[3]:=1073741823; MINIMALDEMERITS[2]:=1073741823;MINIMALDEMERITS[1]:=1073741823; MINIMALDEMERITS[0]:=1073741823;{:834}{848:} IF EQTB[11312].HH.RH=0 THEN IF EQTB[13762].INT=0 THEN BEGIN LASTSPECIALLINE:=0;SECONDWIDTH:=EQTB[13748].INT;SECONDINDENT:=0; END ELSE{849:}BEGIN LASTSPECIALLINE:=ABS(EQTB[13209].INT); IF EQTB[13209].INT<0 THEN BEGIN FIRSTWIDTH:=EQTB[13748].INT-ABS(EQTB[ 13762].INT); IF EQTB[13762].INT>=0 THEN FIRSTINDENT:=EQTB[13762].INT ELSE FIRSTINDENT :=0;SECONDWIDTH:=EQTB[13748].INT;SECONDINDENT:=0; END ELSE BEGIN FIRSTWIDTH:=EQTB[13748].INT;FIRSTINDENT:=0; SECONDWIDTH:=EQTB[13748].INT-ABS(EQTB[13762].INT); IF EQTB[13762].INT>=0 THEN SECONDINDENT:=EQTB[13762].INT ELSE SECONDINDENT:=0;END;END{:849} ELSE BEGIN LASTSPECIALLINE:=MEM[EQTB[11312].HH.RH].HH.LH-1; SECONDWIDTH:=MEM[EQTB[11312].HH.RH+2*(LASTSPECIALLINE+1)].INT; SECONDINDENT:=MEM[EQTB[11312].HH.RH+2*LASTSPECIALLINE+1].INT;END; IF EQTB[13187].INT=0 THEN EASYLINE:=LASTSPECIALLINE ELSE EASYLINE:= 327145{:848};{863:}THRESHOLD:=EQTB[13168].INT; IF THRESHOLD>=0 THEN BEGIN IF EQTB[13200].INT>0 THEN BEGIN BEGINDIAGNOSTIC;PRINTNL(942);END;SECONDPASS:=FALSE;FINALPASS:=FALSE; END ELSE BEGIN THRESHOLD:=EQTB[13169].INT;SECONDPASS:=TRUE; FINALPASS:=(EQTB[13765].INT<=0); IF EQTB[13200].INT>0 THEN BEGINDIAGNOSTIC;END; WHILE TRUE DO BEGIN IF THRESHOLD>10000 THEN THRESHOLD:=10000; IF SECONDPASS THEN{891:}BEGIN IF TRIENOTREADY THEN INITTRIE; CURLANG:=INITCURLANG;LHYF:=INITLHYF;RHYF:=INITRHYF; IF TRIE[HYPHSTART+CURLANG].B1<>CURLANG THEN HYPHINDEX:=0 ELSE HYPHINDEX :=TRIE[HYPHSTART+CURLANG].RH;END{:891};{864:}Q:=GETNODE(ACTIVENODESIZE); MEM[Q].HH.B0:=0;MEM[Q].HH.B1:=2;MEM[Q].HH.RH:=327137;MEM[Q+1].HH.RH:=0; MEM[Q+1].HH.LH:=CURLIST.PGFIELD+1;MEM[Q+2].INT:=0;MEM[327137].HH.RH:=Q; IF DOLASTLINEFIT THEN{1578:}BEGIN MEM[Q+3].INT:=0;MEM[Q+4].INT:=0; END{:1578};ACTIVEWIDTH[1]:=BACKGROUND[1];ACTIVEWIDTH[2]:=BACKGROUND[2]; ACTIVEWIDTH[3]:=BACKGROUND[3];ACTIVEWIDTH[4]:=BACKGROUND[4]; ACTIVEWIDTH[5]:=BACKGROUND[5];ACTIVEWIDTH[6]:=BACKGROUND[6];PASSIVE:=0; PRINTEDNODE:=327141;PASSNUMBER:=0;FONTINSHORTDISPLAY:=0{:864}; CURP:=MEM[327141].HH.RH;AUTOBREAKING:=TRUE;PREVP:=CURP; WHILE(CURP<>0)AND(MEM[327137].HH.RH<>327137)DO{866:} BEGIN IF(CURP>=HIMEMMIN)THEN{867:}BEGIN PREVP:=CURP; REPEAT F:=MEM[CURP].HH.B0; ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F ]+MEM[CURP].HH.B1].QQQQ.B0].INT;CURP:=MEM[CURP].HH.RH; UNTIL NOT(CURP>=HIMEMMIN);END{:867}; CASE MEM[CURP].HH.B0 OF 0,1,2:ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1] .INT;8:{1362:} IF MEM[CURP].HH.B1=4 THEN BEGIN CURLANG:=MEM[CURP+1].HH.RH; LHYF:=MEM[CURP+1].HH.B0;RHYF:=MEM[CURP+1].HH.B1;END{:1362}; 10:BEGIN{868:} IF AUTOBREAKING THEN BEGIN IF(PREVP>=HIMEMMIN)THEN TRYBREAK(0,0)ELSE IF( MEM[PREVP].HH.B0<9)THEN TRYBREAK(0,0)ELSE IF(MEM[PREVP].HH.B0=11)AND(MEM [PREVP].HH.B1<>1)THEN TRYBREAK(0,0);END; IF(MEM[MEM[CURP+1].HH.LH].HH.B1<>0)AND(MEM[MEM[CURP+1].HH.LH+3].INT<>0) THEN BEGIN MEM[CURP+1].HH.LH:=FINITESHRINK(MEM[CURP+1].HH.LH);END; Q:=MEM[CURP+1].HH.LH;ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[Q+1].INT; ACTIVEWIDTH[2+MEM[Q].HH.B0]:=ACTIVEWIDTH[2+MEM[Q].HH.B0]+MEM[Q+2].INT; ACTIVEWIDTH[6]:=ACTIVEWIDTH[6]+MEM[Q+3].INT{:868}; IF SECONDPASS AND AUTOBREAKING THEN{894:}BEGIN PREVS:=CURP; S:=MEM[PREVS].HH.RH;IF S<>0 THEN BEGIN{896:} WHILE TRUE DO BEGIN IF(S>=HIMEMMIN)THEN BEGIN C:=MEM[S].HH.B1; HF:=MEM[S].HH.B0; END ELSE IF MEM[S].HH.B0=6 THEN IF MEM[S+1].HH.RH=0 THEN GOTO 22 ELSE BEGIN Q:=MEM[S+1].HH.RH;C:=MEM[Q].HH.B1;HF:=MEM[Q].HH.B0; END ELSE IF(MEM[S].HH.B0=11)AND(MEM[S].HH.B1=0)THEN GOTO 22 ELSE IF MEM[ S].HH.B0=8 THEN BEGIN{1363:} IF MEM[S].HH.B1=4 THEN BEGIN CURLANG:=MEM[S+1].HH.RH; LHYF:=MEM[S+1].HH.B0;RHYF:=MEM[S+1].HH.B1; IF TRIE[HYPHSTART+CURLANG].B1<>CURLANG THEN HYPHINDEX:=0 ELSE HYPHINDEX :=TRIE[HYPHSTART+CURLANG].RH;END{:1363};GOTO 22;END ELSE GOTO 31; IF HYPHINDEX=0 THEN HC[0]:=EQTB[12144+C].HH.RH ELSE IF TRIE[HYPHINDEX+C] .B1<>C THEN HC[0]:=0 ELSE HC[0]:=TRIE[HYPHINDEX+C].B0; IF HC[0]<>0 THEN IF(HC[0]=C)OR(EQTB[13206].INT>0)THEN GOTO 32 ELSE GOTO 31;22:PREVS:=S;S:=MEM[PREVS].HH.RH;END;32:HYFCHAR:=HYPHENCHAR[HF]; IF HYFCHAR<0 THEN GOTO 31;IF HYFCHAR>255 THEN GOTO 31;HA:=PREVS{:896}; IF LHYF+RHYF>63 THEN GOTO 31;{897:}HN:=0; WHILE TRUE DO BEGIN IF(S>=HIMEMMIN)THEN BEGIN IF MEM[S].HH.B0<>HF THEN GOTO 33;HYFBCHAR:=MEM[S].HH.B1;C:=HYFBCHAR; IF HYPHINDEX=0 THEN HC[0]:=EQTB[12144+C].HH.RH ELSE IF TRIE[HYPHINDEX+C] .B1<>C THEN HC[0]:=0 ELSE HC[0]:=TRIE[HYPHINDEX+C].B0; IF HC[0]=0 THEN GOTO 33;IF HN=63 THEN GOTO 33;HB:=S;HN:=HN+1;HU[HN]:=C; HC[HN]:=HC[0];HYFBCHAR:=256;END ELSE IF MEM[S].HH.B0=6 THEN{898:} BEGIN IF MEM[S+1].HH.B0<>HF THEN GOTO 33;J:=HN;Q:=MEM[S+1].HH.RH; IF Q>0 THEN HYFBCHAR:=MEM[Q].HH.B1;WHILE Q>0 DO BEGIN C:=MEM[Q].HH.B1; IF HYPHINDEX=0 THEN HC[0]:=EQTB[12144+C].HH.RH ELSE IF TRIE[HYPHINDEX+C] .B1<>C THEN HC[0]:=0 ELSE HC[0]:=TRIE[HYPHINDEX+C].B0; IF HC[0]=0 THEN GOTO 33;IF J=63 THEN GOTO 33;J:=J+1;HU[J]:=C; HC[J]:=HC[0];Q:=MEM[Q].HH.RH;END;HB:=S;HN:=J; IF ODD(MEM[S].HH.B1)THEN HYFBCHAR:=FONTBCHAR[HF]ELSE HYFBCHAR:=256; END{:898}ELSE IF(MEM[S].HH.B0=11)AND(MEM[S].HH.B1=0)THEN BEGIN HB:=S; HYFBCHAR:=FONTBCHAR[HF];END ELSE GOTO 33;S:=MEM[S].HH.RH;END;33:{:897}; {899:}IF HN=HIMEMMIN))THEN CASE MEM[S].HH.B0 OF 6:; 11:IF MEM[S].HH.B1<>0 THEN GOTO 34;8,10,12,3,5,4:GOTO 34; OTHERWISE GOTO 31 END;S:=MEM[S].HH.RH;END;34:{:899};HYPHENATE;END; 31:END{:894};END; 11:IF MEM[CURP].HH.B1=1 THEN BEGIN IF NOT(MEM[CURP].HH.RH>=HIMEMMIN)AND AUTOBREAKING THEN IF MEM[MEM[CURP].HH.RH].HH.B0=10 THEN TRYBREAK(0,0); ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1].INT; END ELSE ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1].INT; 6:BEGIN F:=MEM[CURP+1].HH.B0; ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F ]+MEM[CURP+1].HH.B1].QQQQ.B0].INT;END;7:{869:} BEGIN S:=MEM[CURP+1].HH.LH;DISCWIDTH:=0; IF S=0 THEN TRYBREAK(EQTB[13172].INT,1)ELSE BEGIN REPEAT{870:} IF(S>=HIMEMMIN)THEN BEGIN F:=MEM[S].HH.B0; DISCWIDTH:=DISCWIDTH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[S]. HH.B1].QQQQ.B0].INT; END ELSE CASE MEM[S].HH.B0 OF 6:BEGIN F:=MEM[S+1].HH.B0; DISCWIDTH:=DISCWIDTH+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[S+1] .HH.B1].QQQQ.B0].INT;END;0,1,2,11:DISCWIDTH:=DISCWIDTH+MEM[S+1].INT; OTHERWISE CONFUSION(946)END{:870};S:=MEM[S].HH.RH;UNTIL S=0; ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+DISCWIDTH;TRYBREAK(EQTB[13171].INT,1); ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]-DISCWIDTH;END;R:=MEM[CURP].HH.B1; S:=MEM[CURP].HH.RH;WHILE R>0 DO BEGIN{871:} IF(S>=HIMEMMIN)THEN BEGIN F:=MEM[S].HH.B0; ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F ]+MEM[S].HH.B1].QQQQ.B0].INT; END ELSE CASE MEM[S].HH.B0 OF 6:BEGIN F:=MEM[S+1].HH.B0; ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F ]+MEM[S+1].HH.B1].QQQQ.B0].INT;END; 0,1,2,11:ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[S+1].INT; OTHERWISE CONFUSION(947)END{:871};R:=R-1;S:=MEM[S].HH.RH;END; PREVP:=CURP;CURP:=S;GOTO 35;END{:869}; 9:BEGIN IF MEM[CURP].HH.B1<4 THEN AUTOBREAKING:=ODD(MEM[CURP].HH.B1); BEGIN IF NOT(MEM[CURP].HH.RH>=HIMEMMIN)AND AUTOBREAKING THEN IF MEM[MEM[ CURP].HH.RH].HH.B0=10 THEN TRYBREAK(0,0); ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+MEM[CURP+1].INT;END;END; 12:TRYBREAK(MEM[CURP+1].INT,0);4,3,5:;OTHERWISE CONFUSION(945)END; PREVP:=CURP;CURP:=MEM[CURP].HH.RH;35:END{:866};IF CURP=0 THEN{873:} BEGIN TRYBREAK(-10000,1);IF MEM[327137].HH.RH<>327137 THEN BEGIN{874:} R:=MEM[327137].HH.RH;FEWESTDEMERITS:=1073741823; REPEAT IF MEM[R].HH.B0<>2 THEN IF MEM[R+2].INT2 THEN BEGIN LINEDIFF:=MEM[R+1].HH.LH-BESTLINE; IF((LINEDIFFACTUALLOOSENESS)AND(EQTB[13187].INT>=LINEDIFF))THEN BEGIN BESTBET:=R; ACTUALLOOSENESS:=LINEDIFF;FEWESTDEMERITS:=MEM[R+2].INT; END ELSE IF(LINEDIFF=ACTUALLOOSENESS)AND(MEM[R+2].INT327137 DO BEGIN CURP:=MEM[Q].HH.RH; IF MEM[Q].HH.B0=2 THEN FREENODE(Q,7)ELSE FREENODE(Q,ACTIVENODESIZE); Q:=CURP;END;Q:=PASSIVE;WHILE Q<>0 DO BEGIN CURP:=MEM[Q].HH.RH; FREENODE(Q,2);Q:=CURP;END{:865}; IF NOT SECONDPASS THEN BEGIN IF EQTB[13200].INT>0 THEN PRINTNL(943); THRESHOLD:=EQTB[13169].INT;SECONDPASS:=TRUE; FINALPASS:=(EQTB[13765].INT<=0); END ELSE BEGIN IF EQTB[13200].INT>0 THEN PRINTNL(944); BACKGROUND[2]:=BACKGROUND[2]+EQTB[13765].INT;FINALPASS:=TRUE;END;END; 30:IF EQTB[13200].INT>0 THEN BEGIN ENDDIAGNOSTIC(TRUE); NORMALIZESELECTOR;END;IF DOLASTLINEFIT THEN{1586:} IF MEM[BESTBET+3].INT=0 THEN DOLASTLINEFIT:=FALSE ELSE BEGIN Q:=NEWSPEC( MEM[LASTLINEFILL+1].HH.LH);DELETEGLUEREF(MEM[LASTLINEFILL+1].HH.LH); MEM[Q+1].INT:=MEM[Q+1].INT+MEM[BESTBET+3].INT-MEM[BESTBET+4].INT; MEM[Q+2].INT:=0;MEM[LASTLINEFILL+1].HH.LH:=Q;END{:1586};{:863};{876:} POSTLINEBREAK(D){:876};{865:}Q:=MEM[327137].HH.RH; WHILE Q<>327137 DO BEGIN CURP:=MEM[Q].HH.RH; IF MEM[Q].HH.B0=2 THEN FREENODE(Q,7)ELSE FREENODE(Q,ACTIVENODESIZE); Q:=CURP;END;Q:=PASSIVE;WHILE Q<>0 DO BEGIN CURP:=MEM[Q].HH.RH; FREENODE(Q,2);Q:=CURP;END{:865};PACKBEGINLINE:=0;END;{1390:} FUNCTION ETEXENABLED(B:BOOLEAN;J:QUARTERWORD;K:HALFWORD):BOOLEAN; BEGIN IF NOT B THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(689);END; PRINTCMDCHR(J,K);BEGIN HELPPTR:=1;HELPLINE[0]:=1314;END;ERROR;END; ETEXENABLED:=B;END;{:1390}{1413:}PROCEDURE SHOWSAVEGROUPS; LABEL 41,42,40,30;VAR P:0..NESTSIZE;M:-203..203;V:SAVEPOINTER; L:QUARTERWORD;C:GROUPCODE;A:-1..1;I:INTEGER;J:QUARTERWORD;S:STRNUMBER; BEGIN P:=NESTPTR;NEST[P]:=CURLIST;V:=SAVEPTR;L:=CURLEVEL;C:=CURGROUP; SAVEPTR:=CURBOUNDARY;CURLEVEL:=CURLEVEL-1;A:=1;PRINTNL(339);PRINTLN; WHILE TRUE DO BEGIN PRINTNL(366);PRINTGROUP(TRUE); IF CURGROUP=0 THEN GOTO 30;REPEAT M:=NEST[P].MODEFIELD; IF P>0 THEN P:=P-1 ELSE M:=1;UNTIL M<>102;PRINT(287); CASE CURGROUP OF 1:BEGIN P:=P+1;GOTO 42;END;2,3:S:=1069;4:S:=976; 5:S:=1068;6:IF A=0 THEN BEGIN IF M=-1 THEN S:=523 ELSE S:=542;A:=1; GOTO 41;END ELSE BEGIN IF A=1 THEN PRINT(1351)ELSE PRINTESC(908); IF P>=A THEN P:=P-A;A:=0;GOTO 40;END;7:BEGIN P:=P+1;A:=-1;PRINTESC(530); GOTO 42;END;8:BEGIN PRINTESC(401);GOTO 40;END;9:GOTO 42; 10,13:BEGIN IF CURGROUP=10 THEN PRINTESC(352)ELSE PRINTESC(528); FOR I:=1 TO 3 DO IF I<=SAVESTACK[SAVEPTR-2].INT THEN PRINT(868);GOTO 42; END; 11:BEGIN IF SAVESTACK[SAVEPTR-2].INT=255 THEN PRINTESC(355)ELSE BEGIN PRINTESC(331);PRINTINT(SAVESTACK[SAVEPTR-2].INT);END;GOTO 42;END; 12:BEGIN S:=543;GOTO 41;END;14:BEGIN P:=P+1;PRINTESC(515);GOTO 40;END; 15:BEGIN IF M=203 THEN PRINTCHAR(36)ELSE IF NEST[P].MODEFIELD=203 THEN BEGIN PRINTCMDCHR(48,SAVESTACK[SAVEPTR-2].INT);GOTO 40;END; PRINTCHAR(36);GOTO 40;END; 16:BEGIN IF MEM[NEST[P+1].ETEXAUXFIELD].HH.B0=30 THEN PRINTESC(884)ELSE PRINTESC(886);GOTO 40;END;END;{1415:}I:=SAVESTACK[SAVEPTR-4].INT; IF I<>0 THEN IF I<1073741824 THEN BEGIN IF ABS(NEST[P].MODEFIELD)=1 THEN J:=21 ELSE J:=22;IF I>0 THEN PRINTCMDCHR(J,0)ELSE PRINTCMDCHR(J,1); PRINTSCALED(ABS(I));PRINT(400); END ELSE IF I<1073807360 THEN BEGIN IF I>=1073774592 THEN BEGIN PRINTESC (1182);I:=I-(32768);END;PRINTESC(540);PRINTINT(I-1073741824); PRINTCHAR(61);END ELSE PRINTCMDCHR(31,I-(1073807261)){:1415}; 41:PRINTESC(S);{1414:} IF SAVESTACK[SAVEPTR-2].INT<>0 THEN BEGIN PRINTCHAR(32); IF SAVESTACK[SAVEPTR-3].INT=0 THEN PRINT(850)ELSE PRINT(851); PRINTSCALED(SAVESTACK[SAVEPTR-2].INT);PRINT(400);END{:1414}; 42:PRINTCHAR(123);40:PRINTCHAR(41);CURLEVEL:=CURLEVEL-1; CURGROUP:=SAVESTACK[SAVEPTR].HH.B1; SAVEPTR:=SAVESTACK[SAVEPTR].HH.RH END;30:SAVEPTR:=V;CURLEVEL:=L; CURGROUP:=C;END;{:1413}{1429:}PROCEDURE NEWINTERACTION;FORWARD;{:1429} {:815}{934:}PROCEDURE NEWHYPHEXCEPTIONS;LABEL 21,10,40,45,46; VAR N:0..64;J:0..64;H:HYPHPOINTER;K:STRNUMBER;P:HALFWORD;Q:HALFWORD; S,T:STRNUMBER;U,V:POOLPOINTER;BEGIN SCANLEFTBRACE; IF EQTB[13218].INT<=0 THEN CURLANG:=0 ELSE IF EQTB[13218].INT>255 THEN CURLANG:=0 ELSE CURLANG:=EQTB[13218].INT; IF TRIENOTREADY THEN BEGIN HYPHINDEX:=0;GOTO 46;END; IF TRIE[HYPHSTART+CURLANG].B1<>CURLANG THEN HYPHINDEX:=0 ELSE HYPHINDEX :=TRIE[HYPHSTART+CURLANG].RH;46:{935:}N:=0;P:=0; WHILE TRUE DO BEGIN GETXTOKEN;21:CASE CURCMD OF 11,12,68:{937:} IF CURCHR=45 THEN{938:}BEGIN IF N<63 THEN BEGIN Q:=GETAVAIL; MEM[Q].HH.RH:=P;MEM[Q].HH.LH:=N;P:=Q;END;END{:938} ELSE BEGIN IF HYPHINDEX=0 THEN HC[0]:=EQTB[12144+CURCHR].HH.RH ELSE IF TRIE[HYPHINDEX+CURCHR].B1<>CURCHR THEN HC[0]:=0 ELSE HC[0]:=TRIE[ HYPHINDEX+CURCHR].B0; IF HC[0]=0 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(954);END; BEGIN HELPPTR:=2;HELPLINE[1]:=955;HELPLINE[0]:=956;END;ERROR; END ELSE IF N<63 THEN BEGIN N:=N+1;HC[N]:=HC[0];END;END{:937}; 16:BEGIN SCANCHARNUM;CURCHR:=CURVAL;CURCMD:=68;GOTO 21;END; 10,2:BEGIN IF N>1 THEN{939:}BEGIN N:=N+1;HC[N]:=CURLANG; BEGIN IF POOLPTR+N>POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR);END; H:=0;FOR J:=1 TO N DO BEGIN H:=(H+H+HC[J])MOD 503; BEGIN STRPOOL[POOLPTR]:=HC[J];POOLPTR:=POOLPTR+1;END;END;S:=MAKESTRING; {940:}IF HYPHCOUNT=503 THEN OVERFLOW(957,503);HYPHCOUNT:=HYPHCOUNT+1; WHILE HYPHWORD[H]<>0 DO BEGIN{941:}K:=HYPHWORD[H]; IF(STRSTART[K+1]-STRSTART[K])<(STRSTART[S+1]-STRSTART[S])THEN GOTO 40; IF(STRSTART[K+1]-STRSTART[K])>(STRSTART[S+1]-STRSTART[S])THEN GOTO 45; U:=STRSTART[K];V:=STRSTART[S]; REPEAT IF STRPOOL[U]STRPOOL[V]THEN GOTO 45;U:=U+1;V:=V+1; UNTIL U=STRSTART[K+1];40:Q:=HYPHLIST[H];HYPHLIST[H]:=P;P:=Q; T:=HYPHWORD[H];HYPHWORD[H]:=S;S:=T;45:{:941}; IF H>0 THEN H:=H-1 ELSE H:=503;END;HYPHWORD[H]:=S;HYPHLIST[H]:=P{:940}; END{:939};IF CURCMD=2 THEN GOTO 10;N:=0;P:=0;END;OTHERWISE{936:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(689);END;PRINTESC(950); PRINT(951);BEGIN HELPPTR:=2;HELPLINE[1]:=952;HELPLINE[0]:=953;END;ERROR; END{:936}END;END{:935};10:END;{:934}{968:} FUNCTION PRUNEPAGETOP(P:HALFWORD;S:BOOLEAN):HALFWORD;VAR PREVP:HALFWORD; Q,R:HALFWORD;BEGIN PREVP:=327141;MEM[327141].HH.RH:=P; WHILE P<>0 DO CASE MEM[P].HH.B0 OF 0,1,2:{969:} BEGIN Q:=NEWSKIPPARAM(10);MEM[PREVP].HH.RH:=Q;MEM[Q].HH.RH:=P; IF MEM[TEMPPTR+1].INT>MEM[P+3].INT THEN MEM[TEMPPTR+1].INT:=MEM[TEMPPTR +1].INT-MEM[P+3].INT ELSE MEM[TEMPPTR+1].INT:=0;P:=0;END{:969}; 8,4,3:BEGIN PREVP:=P;P:=MEM[PREVP].HH.RH;END;10,11,12:BEGIN Q:=P; P:=MEM[Q].HH.RH;MEM[Q].HH.RH:=0;MEM[PREVP].HH.RH:=P; IF S THEN BEGIN IF DISCPTR[3]=0 THEN DISCPTR[3]:=Q ELSE MEM[R].HH.RH:=Q; R:=Q;END ELSE FLUSHNODELIST(Q);END;OTHERWISE CONFUSION(968)END; PRUNEPAGETOP:=MEM[327141].HH.RH;END;{:968}{970:} FUNCTION VERTBREAK(P:HALFWORD;H,D:SCALED):HALFWORD;LABEL 30,45,90; VAR PREVP:HALFWORD;Q,R:HALFWORD;PI:INTEGER;B:INTEGER;LEASTCOST:INTEGER; BESTPLACE:HALFWORD;PREVDP:SCALED;T:SMALLNUMBER;BEGIN PREVP:=P; LEASTCOST:=1073741823;ACTIVEWIDTH[1]:=0;ACTIVEWIDTH[2]:=0; ACTIVEWIDTH[3]:=0;ACTIVEWIDTH[4]:=0;ACTIVEWIDTH[5]:=0;ACTIVEWIDTH[6]:=0; PREVDP:=0;WHILE TRUE DO BEGIN{972:}IF P=0 THEN PI:=-10000 ELSE{973:} CASE MEM[P].HH.B0 OF 0,1,2:BEGIN ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+PREVDP+ MEM[P+3].INT;PREVDP:=MEM[P+2].INT;GOTO 45;END;8:{1365:}GOTO 45{:1365}; 10:IF(MEM[PREVP].HH.B0<9)THEN PI:=0 ELSE GOTO 90; 11:BEGIN IF MEM[P].HH.RH=0 THEN T:=12 ELSE T:=MEM[MEM[P].HH.RH].HH.B0; IF T=10 THEN PI:=0 ELSE GOTO 90;END;12:PI:=MEM[P+1].INT;4,3:GOTO 45; OTHERWISE CONFUSION(969)END{:973};{974:}IF PI<10000 THEN BEGIN{975:} IF ACTIVEWIDTH[1]0)OR(ACTIVEWIDTH[4]<>0)OR( ACTIVEWIDTH[5]<>0)THEN B:=0 ELSE B:=BADNESS(H-ACTIVEWIDTH[1],ACTIVEWIDTH [2])ELSE IF ACTIVEWIDTH[1]-H>ACTIVEWIDTH[6]THEN B:=1073741823 ELSE B:= BADNESS(ACTIVEWIDTH[1]-H,ACTIVEWIDTH[6]){:975}; IF B<1073741823 THEN IF PI<=-10000 THEN B:=PI ELSE IF B<10000 THEN B:=B+ PI ELSE B:=100000;IF B<=LEASTCOST THEN BEGIN BESTPLACE:=P;LEASTCOST:=B; BESTHEIGHTPLUSDEPTH:=ACTIVEWIDTH[1]+PREVDP;END; IF(B=1073741823)OR(PI<=-10000)THEN GOTO 30;END{:974}; IF(MEM[P].HH.B0<10)OR(MEM[P].HH.B0>11)THEN GOTO 45;90:{976:} IF MEM[P].HH.B0=11 THEN Q:=P ELSE BEGIN Q:=MEM[P+1].HH.LH; ACTIVEWIDTH[2+MEM[Q].HH.B0]:=ACTIVEWIDTH[2+MEM[Q].HH.B0]+MEM[Q+2].INT; ACTIVEWIDTH[6]:=ACTIVEWIDTH[6]+MEM[Q+3].INT; IF(MEM[Q].HH.B1<>0)AND(MEM[Q+3].INT<>0)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(970);END;BEGIN HELPPTR:=4;HELPLINE[3]:=971;HELPLINE[2]:=972; HELPLINE[1]:=973;HELPLINE[0]:=931;END;ERROR;R:=NEWSPEC(Q); MEM[R].HH.B1:=0;DELETEGLUEREF(Q);MEM[P+1].HH.LH:=R;Q:=R;END;END; ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+PREVDP+MEM[Q+1].INT;PREVDP:=0{:976}; 45:IF PREVDP>D THEN BEGIN ACTIVEWIDTH[1]:=ACTIVEWIDTH[1]+PREVDP-D; PREVDP:=D;END;{:972};PREVP:=P;P:=MEM[PREVP].HH.RH;END; 30:VERTBREAK:=BESTPLACE;END;{:970}{977:}{1558:} FUNCTION DOMARKS(A,L:SMALLNUMBER;Q:HALFWORD):BOOLEAN;VAR I:SMALLNUMBER; BEGIN IF L<4 THEN BEGIN FOR I:=0 TO 15 DO BEGIN IF ODD(I)THEN CURPTR:= MEM[Q+(I DIV 2)+1].HH.RH ELSE CURPTR:=MEM[Q+(I DIV 2)+1].HH.LH; IF CURPTR<>0 THEN IF DOMARKS(A,L+1,CURPTR)THEN BEGIN IF ODD(I)THEN MEM[Q +(I DIV 2)+1].HH.RH:=0 ELSE MEM[Q+(I DIV 2)+1].HH.LH:=0; MEM[Q].HH.B1:=MEM[Q].HH.B1-1;END;END; IF MEM[Q].HH.B1=0 THEN BEGIN FREENODE(Q,9);Q:=0;END; END ELSE BEGIN CASE A OF{1559:} 0:IF MEM[Q+2].HH.RH<>0 THEN BEGIN DELETETOKENREF(MEM[Q+2].HH.RH); MEM[Q+2].HH.RH:=0;DELETETOKENREF(MEM[Q+3].HH.LH);MEM[Q+3].HH.LH:=0;END; {:1559}{1561:} 1:IF MEM[Q+2].HH.LH<>0 THEN BEGIN IF MEM[Q+1].HH.LH<>0 THEN DELETETOKENREF(MEM[Q+1].HH.LH);DELETETOKENREF(MEM[Q+1].HH.RH); MEM[Q+1].HH.RH:=0; IF MEM[MEM[Q+2].HH.LH].HH.RH=0 THEN BEGIN DELETETOKENREF(MEM[Q+2].HH.LH) ;MEM[Q+2].HH.LH:=0; END ELSE MEM[MEM[Q+2].HH.LH].HH.LH:=MEM[MEM[Q+2].HH.LH].HH.LH+1; MEM[Q+1].HH.LH:=MEM[Q+2].HH.LH;END;{:1561}{1562:} 2:IF(MEM[Q+1].HH.LH<>0)AND(MEM[Q+1].HH.RH=0)THEN BEGIN MEM[Q+1].HH.RH:= MEM[Q+1].HH.LH;MEM[MEM[Q+1].HH.LH].HH.LH:=MEM[MEM[Q+1].HH.LH].HH.LH+1; END;{:1562}{1564:} 3:FOR I:=0 TO 4 DO BEGIN IF ODD(I)THEN CURPTR:=MEM[Q+(I DIV 2)+1].HH.RH ELSE CURPTR:=MEM[Q+(I DIV 2)+1].HH.LH; IF CURPTR<>0 THEN BEGIN DELETETOKENREF(CURPTR); IF ODD(I)THEN MEM[Q+(I DIV 2)+1].HH.RH:=0 ELSE MEM[Q+(I DIV 2)+1].HH.LH :=0;END;END;{:1564}END; IF MEM[Q+2].HH.LH=0 THEN IF MEM[Q+3].HH.LH=0 THEN BEGIN FREENODE(Q,4); Q:=0;END;END;DOMARKS:=(Q=0);END;{:1558}FUNCTION VSPLIT(N:HALFWORD; H:SCALED):HALFWORD;LABEL 10,30;VAR V:HALFWORD;P:HALFWORD;Q:HALFWORD; BEGIN CURVAL:=N; IF CURVAL<256 THEN V:=EQTB[11583+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR=0 THEN V:=0 ELSE V:=MEM[CURPTR+1].HH.RH;END; FLUSHNODELIST(DISCPTR[3]);DISCPTR[3]:=0; IF SAROOT[6]<>0 THEN IF DOMARKS(0,0,SAROOT[6])THEN SAROOT[6]:=0; IF CURMARK[3]<>0 THEN BEGIN DELETETOKENREF(CURMARK[3]);CURMARK[3]:=0; DELETETOKENREF(CURMARK[4]);CURMARK[4]:=0;END;{978:} IF V=0 THEN BEGIN VSPLIT:=0;GOTO 10;END; IF MEM[V].HH.B0<>1 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL ;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(339);END; PRINTESC(974);PRINT(975);PRINTESC(976);BEGIN HELPPTR:=2; HELPLINE[1]:=977;HELPLINE[0]:=978;END;ERROR;VSPLIT:=0;GOTO 10;END{:978}; Q:=VERTBREAK(MEM[V+5].HH.RH,H,EQTB[13751].INT);{979:}P:=MEM[V+5].HH.RH; IF P=Q THEN MEM[V+5].HH.RH:=0 ELSE WHILE TRUE DO BEGIN IF MEM[P].HH.B0=4 THEN IF MEM[P+1].HH.LH<>0 THEN{1560:} BEGIN FINDSAELEMENT(6,MEM[P+1].HH.LH,TRUE); IF MEM[CURPTR+2].HH.RH=0 THEN BEGIN MEM[CURPTR+2].HH.RH:=MEM[P+1].HH.RH; MEM[MEM[P+1].HH.RH].HH.LH:=MEM[MEM[P+1].HH.RH].HH.LH+1; END ELSE DELETETOKENREF(MEM[CURPTR+3].HH.LH); MEM[CURPTR+3].HH.LH:=MEM[P+1].HH.RH; MEM[MEM[P+1].HH.RH].HH.LH:=MEM[MEM[P+1].HH.RH].HH.LH+1;END{:1560} ELSE IF CURMARK[3]=0 THEN BEGIN CURMARK[3]:=MEM[P+1].HH.RH; CURMARK[4]:=CURMARK[3];MEM[CURMARK[3]].HH.LH:=MEM[CURMARK[3]].HH.LH+2; END ELSE BEGIN DELETETOKENREF(CURMARK[4]);CURMARK[4]:=MEM[P+1].HH.RH; MEM[CURMARK[4]].HH.LH:=MEM[CURMARK[4]].HH.LH+1;END; IF MEM[P].HH.RH=Q THEN BEGIN MEM[P].HH.RH:=0;GOTO 30;END; P:=MEM[P].HH.RH;END;30:{:979};Q:=PRUNEPAGETOP(Q,EQTB[13230].INT>0); P:=MEM[V+5].HH.RH;FREENODE(V,7); IF Q<>0 THEN Q:=VPACKAGE(Q,0,1,1073741823); IF CURVAL<256 THEN EQTB[11583+CURVAL].HH.RH:=Q ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR<>0 THEN BEGIN MEM[CURPTR+1].HH.RH:=Q; MEM[CURPTR+1].HH.LH:=MEM[CURPTR+1].HH.LH+1;DELETESAREF(CURPTR);END;END; VSPLIT:=VPACKAGE(P,H,0,EQTB[13751].INT);10:END;{:977}{985:} PROCEDURE PRINTTOTALS;BEGIN PRINTSCALED(PAGESOFAR[1]); IF PAGESOFAR[2]<>0 THEN BEGIN PRINT(313);PRINTSCALED(PAGESOFAR[2]); PRINT(339);END;IF PAGESOFAR[3]<>0 THEN BEGIN PRINT(313); PRINTSCALED(PAGESOFAR[3]);PRINT(312);END; IF PAGESOFAR[4]<>0 THEN BEGIN PRINT(313);PRINTSCALED(PAGESOFAR[4]); PRINT(987);END;IF PAGESOFAR[5]<>0 THEN BEGIN PRINT(313); PRINTSCALED(PAGESOFAR[5]);PRINT(988);END; IF PAGESOFAR[6]<>0 THEN BEGIN PRINT(314);PRINTSCALED(PAGESOFAR[6]);END; END;{:985}{987:}PROCEDURE FREEZEPAGESPECS(S:SMALLNUMBER); BEGIN PAGECONTENTS:=S;PAGESOFAR[0]:=EQTB[13749].INT; PAGEMAXDEPTH:=EQTB[13750].INT;PAGESOFAR[7]:=0;PAGESOFAR[1]:=0; PAGESOFAR[2]:=0;PAGESOFAR[3]:=0;PAGESOFAR[4]:=0;PAGESOFAR[5]:=0; PAGESOFAR[6]:=0;LEASTPAGECOST:=1073741823; IF EQTB[13201].INT>0 THEN BEGIN BEGINDIAGNOSTIC;PRINTNL(996); PRINTSCALED(PAGESOFAR[0]);PRINT(997);PRINTSCALED(PAGEMAXDEPTH); ENDDIAGNOSTIC(FALSE);END;END;{:987}{992:} PROCEDURE BOXERROR(N:EIGHTBITS);BEGIN ERROR;BEGINDIAGNOSTIC; PRINTNL(843);SHOWBOX(EQTB[11583+N].HH.RH);ENDDIAGNOSTIC(TRUE); FLUSHNODELIST(EQTB[11583+N].HH.RH);EQTB[11583+N].HH.RH:=0;END;{:992} {993:}PROCEDURE ENSUREVBOX(N:EIGHTBITS);VAR P:HALFWORD; BEGIN P:=EQTB[11583+N].HH.RH; IF P<>0 THEN IF MEM[P].HH.B0=0 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(998);END;BEGIN HELPPTR:=3;HELPLINE[2]:=999;HELPLINE[1]:=1000; HELPLINE[0]:=1001;END;BOXERROR(N);END;END;{:993}{994:}{1012:} PROCEDURE FIREUP(C:HALFWORD);LABEL 10;VAR P,Q,R,S:HALFWORD; PREVP:HALFWORD;N:0..255;WAIT:BOOLEAN;SAVEVBADNESS:INTEGER; SAVEVFUZZ:SCALED;SAVESPLITTOPSKIP:HALFWORD;BEGIN{1013:} IF MEM[BESTPAGEBREAK].HH.B0=12 THEN BEGIN GEQWORDDEFINE(13207,MEM[ BESTPAGEBREAK+1].INT);MEM[BESTPAGEBREAK+1].INT:=10000; END ELSE GEQWORDDEFINE(13207,10000){:1013}; IF SAROOT[6]<>0 THEN IF DOMARKS(1,0,SAROOT[6])THEN SAROOT[6]:=0; IF CURMARK[2]<>0 THEN BEGIN IF CURMARK[0]<>0 THEN DELETETOKENREF(CURMARK [0]);CURMARK[0]:=CURMARK[2]; MEM[CURMARK[0]].HH.LH:=MEM[CURMARK[0]].HH.LH+1; DELETETOKENREF(CURMARK[1]);CURMARK[1]:=0;END;{1014:} IF C=BESTPAGEBREAK THEN BESTPAGEBREAK:=0;{1015:} IF EQTB[11838].HH.RH<>0 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(339);END;PRINTESC(412);PRINT(1012);BEGIN HELPPTR:=2; HELPLINE[1]:=1013;HELPLINE[0]:=1001;END;BOXERROR(255);END{:1015}; INSERTPENALTIES:=0;SAVESPLITTOPSKIP:=EQTB[10792].HH.RH; IF EQTB[13221].INT<=0 THEN{1018:}BEGIN R:=MEM[327144].HH.RH; WHILE R<>327144 DO BEGIN IF MEM[R+2].HH.LH<>0 THEN BEGIN N:=MEM[R].HH.B1 ;ENSUREVBOX(N); IF EQTB[11583+N].HH.RH=0 THEN EQTB[11583+N].HH.RH:=NEWNULLBOX; P:=EQTB[11583+N].HH.RH+5;WHILE MEM[P].HH.RH<>0 DO P:=MEM[P].HH.RH; MEM[R+2].HH.RH:=P;END;R:=MEM[R].HH.RH;END;END{:1018};Q:=327140; MEM[Q].HH.RH:=0;PREVP:=327142;P:=MEM[PREVP].HH.RH; WHILE P<>BESTPAGEBREAK DO BEGIN IF MEM[P].HH.B0=3 THEN BEGIN IF EQTB[ 13221].INT<=0 THEN{1020:}BEGIN R:=MEM[327144].HH.RH; WHILE MEM[R].HH.B1<>MEM[P].HH.B1 DO R:=MEM[R].HH.RH; IF MEM[R+2].HH.LH=0 THEN WAIT:=TRUE ELSE BEGIN WAIT:=FALSE; S:=MEM[R+2].HH.RH;MEM[S].HH.RH:=MEM[P+4].HH.LH; IF MEM[R+2].HH.LH=P THEN{1021:} BEGIN IF MEM[R].HH.B0=1 THEN IF(MEM[R+1].HH.LH=P)AND(MEM[R+1].HH.RH<>0) THEN BEGIN WHILE MEM[S].HH.RH<>MEM[R+1].HH.RH DO S:=MEM[S].HH.RH; MEM[S].HH.RH:=0;EQTB[10792].HH.RH:=MEM[P+4].HH.RH; MEM[P+4].HH.LH:=PRUNEPAGETOP(MEM[R+1].HH.RH,FALSE); IF MEM[P+4].HH.LH<>0 THEN BEGIN TEMPPTR:=VPACKAGE(MEM[P+4].HH.LH,0,1, 1073741823);MEM[P+3].INT:=MEM[TEMPPTR+3].INT+MEM[TEMPPTR+2].INT; FREENODE(TEMPPTR,7);WAIT:=TRUE;END;END;MEM[R+2].HH.LH:=0; N:=MEM[R].HH.B1;TEMPPTR:=MEM[EQTB[11583+N].HH.RH+5].HH.RH; FREENODE(EQTB[11583+N].HH.RH,7); EQTB[11583+N].HH.RH:=VPACKAGE(TEMPPTR,0,1,1073741823);END{:1021} ELSE BEGIN WHILE MEM[S].HH.RH<>0 DO S:=MEM[S].HH.RH;MEM[R+2].HH.RH:=S; END;END;{1022:}MEM[PREVP].HH.RH:=MEM[P].HH.RH;MEM[P].HH.RH:=0; IF WAIT THEN BEGIN MEM[Q].HH.RH:=P;Q:=P; INSERTPENALTIES:=INSERTPENALTIES+1; END ELSE BEGIN DELETEGLUEREF(MEM[P+4].HH.RH);FREENODE(P,5);END; P:=PREVP{:1022};END{:1020}; END ELSE IF MEM[P].HH.B0=4 THEN IF MEM[P+1].HH.LH<>0 THEN{1563:} BEGIN FINDSAELEMENT(6,MEM[P+1].HH.LH,TRUE); IF MEM[CURPTR+1].HH.RH=0 THEN BEGIN MEM[CURPTR+1].HH.RH:=MEM[P+1].HH.RH; MEM[MEM[P+1].HH.RH].HH.LH:=MEM[MEM[P+1].HH.RH].HH.LH+1;END; IF MEM[CURPTR+2].HH.LH<>0 THEN DELETETOKENREF(MEM[CURPTR+2].HH.LH); MEM[CURPTR+2].HH.LH:=MEM[P+1].HH.RH; MEM[MEM[P+1].HH.RH].HH.LH:=MEM[MEM[P+1].HH.RH].HH.LH+1;END{:1563} ELSE{1016:}BEGIN IF CURMARK[1]=0 THEN BEGIN CURMARK[1]:=MEM[P+1].HH.RH; MEM[CURMARK[1]].HH.LH:=MEM[CURMARK[1]].HH.LH+1;END; IF CURMARK[2]<>0 THEN DELETETOKENREF(CURMARK[2]); CURMARK[2]:=MEM[P+1].HH.RH; MEM[CURMARK[2]].HH.LH:=MEM[CURMARK[2]].HH.LH+1;END{:1016};PREVP:=P; P:=MEM[PREVP].HH.RH;END;EQTB[10792].HH.RH:=SAVESPLITTOPSKIP;{1017:} IF P<>0 THEN BEGIN IF MEM[327143].HH.RH=0 THEN IF NESTPTR=0 THEN CURLIST .TAILFIELD:=PAGETAIL ELSE NEST[0].TAILFIELD:=PAGETAIL; MEM[PAGETAIL].HH.RH:=MEM[327143].HH.RH;MEM[327143].HH.RH:=P; MEM[PREVP].HH.RH:=0;END;SAVEVBADNESS:=EQTB[13195].INT; EQTB[13195].INT:=10000;SAVEVFUZZ:=EQTB[13754].INT; EQTB[13754].INT:=1073741823; EQTB[11838].HH.RH:=VPACKAGE(MEM[327142].HH.RH,BESTSIZE,0,PAGEMAXDEPTH); EQTB[13195].INT:=SAVEVBADNESS;EQTB[13754].INT:=SAVEVFUZZ; IF LASTGLUE<>327145 THEN DELETEGLUEREF(LASTGLUE);{991:}PAGECONTENTS:=0; PAGETAIL:=327142;MEM[327142].HH.RH:=0;LASTGLUE:=327145;LASTPENALTY:=0; LASTKERN:=0;LASTNODETYPE:=-1;PAGESOFAR[7]:=0;PAGEMAXDEPTH:=0{:991}; IF Q<>327140 THEN BEGIN MEM[327142].HH.RH:=MEM[327140].HH.RH; PAGETAIL:=Q;END{:1017};{1019:}R:=MEM[327144].HH.RH; WHILE R<>327144 DO BEGIN Q:=MEM[R].HH.RH;FREENODE(R,4);R:=Q;END; MEM[327144].HH.RH:=327144{:1019}{:1014}; IF SAROOT[6]<>0 THEN IF DOMARKS(2,0,SAROOT[6])THEN SAROOT[6]:=0; IF(CURMARK[0]<>0)AND(CURMARK[1]=0)THEN BEGIN CURMARK[1]:=CURMARK[0]; MEM[CURMARK[0]].HH.LH:=MEM[CURMARK[0]].HH.LH+1;END; IF EQTB[11317].HH.RH<>0 THEN IF DEADCYCLES>=EQTB[13208].INT THEN{1024:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1014);END;PRINTINT(DEADCYCLES); PRINT(1015);BEGIN HELPPTR:=3;HELPLINE[2]:=1016;HELPLINE[1]:=1017; HELPLINE[0]:=1018;END;ERROR;END{:1024}ELSE{1025:} BEGIN OUTPUTACTIVE:=TRUE;DEADCYCLES:=DEADCYCLES+1;PUSHNEST; CURLIST.MODEFIELD:=-1;CURLIST.AUXFIELD.INT:=-65536000; CURLIST.MLFIELD:=-LINE;BEGINTOKENLIST(EQTB[11317].HH.RH,6); NEWSAVELEVEL(8);NORMALPARAGRAPH;SCANLEFTBRACE;GOTO 10;END{:1025};{1023:} BEGIN IF MEM[327142].HH.RH<>0 THEN BEGIN IF MEM[327143].HH.RH=0 THEN IF NESTPTR=0 THEN CURLIST.TAILFIELD:=PAGETAIL ELSE NEST[0].TAILFIELD:= PAGETAIL ELSE MEM[PAGETAIL].HH.RH:=MEM[327143].HH.RH; MEM[327143].HH.RH:=MEM[327142].HH.RH;MEM[327142].HH.RH:=0; PAGETAIL:=327142;END;FLUSHNODELIST(DISCPTR[2]);DISCPTR[2]:=0; SHIPOUT(EQTB[11838].HH.RH);EQTB[11838].HH.RH:=0;END{:1023};10:END; {:1012}PROCEDURE BUILDPAGE;LABEL 10,30,31,22,80,90;VAR P:HALFWORD; Q,R:HALFWORD;B,C:INTEGER;PI:INTEGER;N:0..255;DELTA,H,W:SCALED; BEGIN IF(MEM[327143].HH.RH=0)OR OUTPUTACTIVE THEN GOTO 10; REPEAT 22:P:=MEM[327143].HH.RH;{996:} IF LASTGLUE<>327145 THEN DELETEGLUEREF(LASTGLUE);LASTPENALTY:=0; LASTKERN:=0;LASTNODETYPE:=MEM[P].HH.B0+1; IF MEM[P].HH.B0=10 THEN BEGIN LASTGLUE:=MEM[P+1].HH.LH; MEM[LASTGLUE].HH.RH:=MEM[LASTGLUE].HH.RH+1; END ELSE BEGIN LASTGLUE:=327145; IF MEM[P].HH.B0=12 THEN LASTPENALTY:=MEM[P+1].INT ELSE IF MEM[P].HH.B0= 11 THEN LASTKERN:=MEM[P+1].INT;END{:996};{997:}{1000:} CASE MEM[P].HH.B0 OF 0,1,2:IF PAGECONTENTS<2 THEN{1001:} BEGIN IF PAGECONTENTS=0 THEN FREEZEPAGESPECS(2)ELSE PAGECONTENTS:=2; Q:=NEWSKIPPARAM(9); IF MEM[TEMPPTR+1].INT>MEM[P+3].INT THEN MEM[TEMPPTR+1].INT:=MEM[TEMPPTR +1].INT-MEM[P+3].INT ELSE MEM[TEMPPTR+1].INT:=0;MEM[Q].HH.RH:=P; MEM[327143].HH.RH:=Q;GOTO 22;END{:1001}ELSE{1002:} BEGIN PAGESOFAR[1]:=PAGESOFAR[1]+PAGESOFAR[7]+MEM[P+3].INT; PAGESOFAR[7]:=MEM[P+2].INT;GOTO 80;END{:1002};8:{1364:}GOTO 80{:1364}; 10:IF PAGECONTENTS<2 THEN GOTO 31 ELSE IF(MEM[PAGETAIL].HH.B0<9)THEN PI :=0 ELSE GOTO 90; 11:IF PAGECONTENTS<2 THEN GOTO 31 ELSE IF MEM[P].HH.RH=0 THEN GOTO 10 ELSE IF MEM[MEM[P].HH.RH].HH.B0=10 THEN PI:=0 ELSE GOTO 90; 12:IF PAGECONTENTS<2 THEN GOTO 31 ELSE PI:=MEM[P+1].INT;4:GOTO 80; 3:{1008:}BEGIN IF PAGECONTENTS=0 THEN FREEZEPAGESPECS(1); N:=MEM[P].HH.B1;R:=327144; WHILE N>=MEM[MEM[R].HH.RH].HH.B1 DO R:=MEM[R].HH.RH;N:=N; IF MEM[R].HH.B1<>N THEN{1009:}BEGIN Q:=GETNODE(4); MEM[Q].HH.RH:=MEM[R].HH.RH;MEM[R].HH.RH:=Q;R:=Q;MEM[R].HH.B1:=N; MEM[R].HH.B0:=0;ENSUREVBOX(N); IF EQTB[11583+N].HH.RH=0 THEN MEM[R+3].INT:=0 ELSE MEM[R+3].INT:=MEM[ EQTB[11583+N].HH.RH+3].INT+MEM[EQTB[11583+N].HH.RH+2].INT; MEM[R+2].HH.LH:=0;Q:=EQTB[10800+N].HH.RH; IF EQTB[13233+N].INT=1000 THEN H:=MEM[R+3].INT ELSE H:=XOVERN(MEM[R+3]. INT,1000)*EQTB[13233+N].INT;PAGESOFAR[0]:=PAGESOFAR[0]-H-MEM[Q+1].INT; PAGESOFAR[2+MEM[Q].HH.B0]:=PAGESOFAR[2+MEM[Q].HH.B0]+MEM[Q+2].INT; PAGESOFAR[6]:=PAGESOFAR[6]+MEM[Q+3].INT; IF(MEM[Q].HH.B1<>0)AND(MEM[Q+3].INT<>0)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1007);END;PRINTESC(398);PRINTINT(N);BEGIN HELPPTR:=3; HELPLINE[2]:=1008;HELPLINE[1]:=1009;HELPLINE[0]:=931;END;ERROR;END; END{:1009}; IF MEM[R].HH.B0=1 THEN INSERTPENALTIES:=INSERTPENALTIES+MEM[P+1].INT ELSE BEGIN MEM[R+2].HH.RH:=P; DELTA:=PAGESOFAR[0]-PAGESOFAR[1]-PAGESOFAR[7]+PAGESOFAR[6]; IF EQTB[13233+N].INT=1000 THEN H:=MEM[P+3].INT ELSE H:=XOVERN(MEM[P+3]. INT,1000)*EQTB[13233+N].INT; IF((H<=0)OR(H<=DELTA))AND(MEM[P+3].INT+MEM[R+3].INT<=EQTB[13766+N].INT) THEN BEGIN PAGESOFAR[0]:=PAGESOFAR[0]-H; MEM[R+3].INT:=MEM[R+3].INT+MEM[P+3].INT;END ELSE{1010:} BEGIN IF EQTB[13233+N].INT<=0 THEN W:=1073741823 ELSE BEGIN W:=PAGESOFAR [0]-PAGESOFAR[1]-PAGESOFAR[7]; IF EQTB[13233+N].INT<>1000 THEN W:=XOVERN(W,EQTB[13233+N].INT)*1000;END; IF W>EQTB[13766+N].INT-MEM[R+3].INT THEN W:=EQTB[13766+N].INT-MEM[R+3]. INT;Q:=VERTBREAK(MEM[P+4].HH.LH,W,MEM[P+2].INT); MEM[R+3].INT:=MEM[R+3].INT+BESTHEIGHTPLUSDEPTH; IF EQTB[13201].INT>0 THEN{1011:}BEGIN BEGINDIAGNOSTIC;PRINTNL(1010); PRINTINT(N);PRINT(1011);PRINTSCALED(W);PRINTCHAR(44); PRINTSCALED(BESTHEIGHTPLUSDEPTH);PRINT(940); IF Q=0 THEN PRINTINT(-10000)ELSE IF MEM[Q].HH.B0=12 THEN PRINTINT(MEM[Q +1].INT)ELSE PRINTCHAR(48);ENDDIAGNOSTIC(FALSE);END{:1011}; IF EQTB[13233+N].INT<>1000 THEN BESTHEIGHTPLUSDEPTH:=XOVERN( BESTHEIGHTPLUSDEPTH,1000)*EQTB[13233+N].INT; PAGESOFAR[0]:=PAGESOFAR[0]-BESTHEIGHTPLUSDEPTH;MEM[R].HH.B0:=1; MEM[R+1].HH.RH:=Q;MEM[R+1].HH.LH:=P; IF Q=0 THEN INSERTPENALTIES:=INSERTPENALTIES-10000 ELSE IF MEM[Q].HH.B0= 12 THEN INSERTPENALTIES:=INSERTPENALTIES+MEM[Q+1].INT;END{:1010};END; GOTO 80;END{:1008};OTHERWISE CONFUSION(1002)END{:1000};{1005:} IF PI<10000 THEN BEGIN{1007:} IF PAGESOFAR[1]0)OR(PAGESOFAR[4]<>0) OR(PAGESOFAR[5]<>0)THEN B:=0 ELSE B:=BADNESS(PAGESOFAR[0]-PAGESOFAR[1], PAGESOFAR[2])ELSE IF PAGESOFAR[1]-PAGESOFAR[0]>PAGESOFAR[6]THEN B:= 1073741823 ELSE B:=BADNESS(PAGESOFAR[1]-PAGESOFAR[0],PAGESOFAR[6]){:1007 }; IF B<1073741823 THEN IF PI<=-10000 THEN C:=PI ELSE IF B<10000 THEN C:=B+ PI+INSERTPENALTIES ELSE C:=100000 ELSE C:=B; IF INSERTPENALTIES>=10000 THEN C:=1073741823; IF EQTB[13201].INT>0 THEN{1006:}BEGIN BEGINDIAGNOSTIC;PRINTNL(37); PRINT(936);PRINTTOTALS;PRINT(1005);PRINTSCALED(PAGESOFAR[0]);PRINT(939); IF B=1073741823 THEN PRINTCHAR(42)ELSE PRINTINT(B);PRINT(940); PRINTINT(PI);PRINT(1006); IF C=1073741823 THEN PRINTCHAR(42)ELSE PRINTINT(C); IF C<=LEASTPAGECOST THEN PRINTCHAR(35);ENDDIAGNOSTIC(FALSE);END{:1006}; IF C<=LEASTPAGECOST THEN BEGIN BESTPAGEBREAK:=P;BESTSIZE:=PAGESOFAR[0]; LEASTPAGECOST:=C;R:=MEM[327144].HH.RH; WHILE R<>327144 DO BEGIN MEM[R+2].HH.LH:=MEM[R+2].HH.RH;R:=MEM[R].HH.RH; END;END;IF(C=1073741823)OR(PI<=-10000)THEN BEGIN FIREUP(P); IF OUTPUTACTIVE THEN GOTO 10;GOTO 30;END;END{:1005}; IF(MEM[P].HH.B0<10)OR(MEM[P].HH.B0>11)THEN GOTO 80;90:{1004:} IF MEM[P].HH.B0=11 THEN Q:=P ELSE BEGIN Q:=MEM[P+1].HH.LH; PAGESOFAR[2+MEM[Q].HH.B0]:=PAGESOFAR[2+MEM[Q].HH.B0]+MEM[Q+2].INT; PAGESOFAR[6]:=PAGESOFAR[6]+MEM[Q+3].INT; IF(MEM[Q].HH.B1<>0)AND(MEM[Q+3].INT<>0)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1003);END;BEGIN HELPPTR:=4;HELPLINE[3]:=1004;HELPLINE[2]:=972; HELPLINE[1]:=973;HELPLINE[0]:=931;END;ERROR;R:=NEWSPEC(Q); MEM[R].HH.B1:=0;DELETEGLUEREF(Q);MEM[P+1].HH.LH:=R;Q:=R;END;END; PAGESOFAR[1]:=PAGESOFAR[1]+PAGESOFAR[7]+MEM[Q+1].INT; PAGESOFAR[7]:=0{:1004};80:{1003:} IF PAGESOFAR[7]>PAGEMAXDEPTH THEN BEGIN PAGESOFAR[1]:=PAGESOFAR[1]+ PAGESOFAR[7]-PAGEMAXDEPTH;PAGESOFAR[7]:=PAGEMAXDEPTH;END;{:1003};{998:} MEM[PAGETAIL].HH.RH:=P;PAGETAIL:=P;MEM[327143].HH.RH:=MEM[P].HH.RH; MEM[P].HH.RH:=0;GOTO 30{:998};31:{999:}MEM[327143].HH.RH:=MEM[P].HH.RH; MEM[P].HH.RH:=0; IF EQTB[13230].INT>0 THEN BEGIN IF DISCPTR[2]=0 THEN DISCPTR[2]:=P ELSE MEM[DISCPTR[1]].HH.RH:=P;DISCPTR[1]:=P;END ELSE FLUSHNODELIST(P){:999}; 30:{:997};UNTIL MEM[327143].HH.RH=0;{995:} IF NESTPTR=0 THEN CURLIST.TAILFIELD:=327143 ELSE NEST[0].TAILFIELD:= 327143{:995};10:END;{:994}{1030:}{1043:}PROCEDURE APPSPACE; VAR Q:HALFWORD; BEGIN IF(CURLIST.AUXFIELD.HH.LH>=2000)AND(EQTB[10795].HH.RH<>0)THEN Q:= NEWPARAMGLUE(13)ELSE BEGIN IF EQTB[10794].HH.RH<>0 THEN MAINP:=EQTB[ 10794].HH.RH ELSE{1042:}BEGIN MAINP:=FONTGLUE[EQTB[11839].HH.RH]; IF MAINP=0 THEN BEGIN MAINP:=NEWSPEC(0); MAINK:=PARAMBASE[EQTB[11839].HH.RH]+2; MEM[MAINP+1].INT:=FONTINFO[MAINK].INT; MEM[MAINP+2].INT:=FONTINFO[MAINK+1].INT; MEM[MAINP+3].INT:=FONTINFO[MAINK+2].INT; FONTGLUE[EQTB[11839].HH.RH]:=MAINP;END;END{:1042};MAINP:=NEWSPEC(MAINP); {1044:} IF CURLIST.AUXFIELD.HH.LH>=2000 THEN MEM[MAINP+1].INT:=MEM[MAINP+1].INT+ FONTINFO[7+PARAMBASE[EQTB[11839].HH.RH]].INT; MEM[MAINP+2].INT:=XNOVERD(MEM[MAINP+2].INT,CURLIST.AUXFIELD.HH.LH,1000); MEM[MAINP+3].INT:=XNOVERD(MEM[MAINP+3].INT,1000,CURLIST.AUXFIELD.HH.LH){ :1044};Q:=NEWGLUE(MAINP);MEM[MAINP].HH.RH:=0;END; MEM[CURLIST.TAILFIELD].HH.RH:=Q;CURLIST.TAILFIELD:=Q;END;{:1043}{1047:} PROCEDURE INSERTDOLLARSIGN;BEGIN BACKINPUT;CURTOK:=804; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(1026);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1027; HELPLINE[0]:=1028;END;INSERROR;END;{:1047}{1049:}PROCEDURE YOUCANT; BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(694);END; PRINTCMDCHR(CURCMD,CURCHR);PRINT(1029);PRINTMODE(CURLIST.MODEFIELD);END; {:1049}{1050:}PROCEDURE REPORTILLEGALCASE;BEGIN YOUCANT; BEGIN HELPPTR:=4;HELPLINE[3]:=1030;HELPLINE[2]:=1031;HELPLINE[1]:=1032; HELPLINE[0]:=1033;END;ERROR;END;{:1050}{1051:} FUNCTION PRIVILEGED:BOOLEAN; BEGIN IF CURLIST.MODEFIELD>0 THEN PRIVILEGED:=TRUE ELSE BEGIN REPORTILLEGALCASE;PRIVILEGED:=FALSE;END;END;{:1051}{1054:} FUNCTION ITSALLOVER:BOOLEAN;LABEL 10; BEGIN IF PRIVILEGED THEN BEGIN IF(327142=PAGETAIL)AND(CURLIST.HEADFIELD= CURLIST.TAILFIELD)AND(DEADCYCLES=0)THEN BEGIN ITSALLOVER:=TRUE;GOTO 10; END;BACKINPUT;BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNULLBOX; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD+1].INT:=EQTB[13748].INT; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(8); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(-1073741824); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;BUILDPAGE;END; ITSALLOVER:=FALSE;10:END;{:1054}{1060:}PROCEDURE APPENDGLUE; VAR S:SMALLNUMBER;BEGIN S:=CURCHR;CASE S OF 0:CURVAL:=4;1:CURVAL:=8; 2:CURVAL:=12;3:CURVAL:=16;4:SCANGLUE(2);5:SCANGLUE(3);END; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(CURVAL); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; IF S>=4 THEN BEGIN MEM[CURVAL].HH.RH:=MEM[CURVAL].HH.RH-1; IF S>4 THEN MEM[CURLIST.TAILFIELD].HH.B1:=99;END;END;{:1060}{1061:} PROCEDURE APPENDKERN;VAR S:QUARTERWORD;BEGIN S:=CURCHR; SCANDIMEN(S=99,FALSE,FALSE); BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(CURVAL); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B1:=S;END;{:1061}{1064:}PROCEDURE OFFSAVE; VAR P:HALFWORD;BEGIN IF CURGROUP=0 THEN{1066:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(786);END; PRINTCMDCHR(CURCMD,CURCHR);BEGIN HELPPTR:=1;HELPLINE[0]:=1051;END;ERROR; END{:1066}ELSE BEGIN BACKINPUT;P:=GETAVAIL;MEM[327141].HH.RH:=P; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(634);END;{1065:} CASE CURGROUP OF 14:BEGIN MEM[P].HH.LH:=14611;PRINTESC(519);END; 15:BEGIN MEM[P].HH.LH:=804;PRINTCHAR(36);END; 16:BEGIN MEM[P].HH.LH:=14612;MEM[P].HH.RH:=GETAVAIL;P:=MEM[P].HH.RH; MEM[P].HH.LH:=3118;PRINTESC(1050);END;OTHERWISE BEGIN MEM[P].HH.LH:=637; PRINTCHAR(125);END END{:1065};PRINT(635); BEGINTOKENLIST(MEM[327141].HH.RH,4);BEGIN HELPPTR:=5;HELPLINE[4]:=1045; HELPLINE[3]:=1046;HELPLINE[2]:=1047;HELPLINE[1]:=1048;HELPLINE[0]:=1049; END;ERROR;END;END;{:1064}{1069:}PROCEDURE EXTRARIGHTBRACE; BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1056);END; CASE CURGROUP OF 14:PRINTESC(519);15:PRINTCHAR(36);16:PRINTESC(885);END; BEGIN HELPPTR:=5;HELPLINE[4]:=1057;HELPLINE[3]:=1058;HELPLINE[2]:=1059; HELPLINE[1]:=1060;HELPLINE[0]:=1061;END;ERROR;ALIGNSTATE:=ALIGNSTATE+1; END;{:1069}{1070:}PROCEDURE NORMALPARAGRAPH; BEGIN IF EQTB[13187].INT<>0 THEN EQWORDDEFINE(13187,0); IF EQTB[13762].INT<>0 THEN EQWORDDEFINE(13762,0); IF EQTB[13209].INT<>1 THEN EQWORDDEFINE(13209,1); IF EQTB[11312].HH.RH<>0 THEN EQDEFINE(11312,118,0); IF EQTB[11313].HH.RH<>0 THEN EQDEFINE(11313,118,0);END;{:1070}{1075:} PROCEDURE BOXEND(BOXCONTEXT:INTEGER);VAR P:HALFWORD;A:SMALLNUMBER; BEGIN IF BOXCONTEXT<1073741824 THEN{1076:} BEGIN IF CURBOX<>0 THEN BEGIN MEM[CURBOX+4].INT:=BOXCONTEXT; IF ABS(CURLIST.MODEFIELD)=1 THEN BEGIN APPENDTOVLIST(CURBOX); IF ADJUSTTAIL<>0 THEN BEGIN IF 327139<>ADJUSTTAIL THEN BEGIN MEM[CURLIST .TAILFIELD].HH.RH:=MEM[327139].HH.RH;CURLIST.TAILFIELD:=ADJUSTTAIL;END; ADJUSTTAIL:=0;END;IF CURLIST.MODEFIELD>0 THEN BUILDPAGE; END ELSE BEGIN IF ABS(CURLIST.MODEFIELD)=102 THEN CURLIST.AUXFIELD.HH.LH :=1000 ELSE BEGIN P:=NEWNOAD;MEM[P+1].HH.RH:=2;MEM[P+1].HH.LH:=CURBOX; CURBOX:=P;END;MEM[CURLIST.TAILFIELD].HH.RH:=CURBOX; CURLIST.TAILFIELD:=CURBOX;END;END;END{:1076} ELSE IF BOXCONTEXT<1073807360 THEN{1077:} BEGIN IF BOXCONTEXT<1073774592 THEN BEGIN CURVAL:=BOXCONTEXT-1073741824; A:=0;END ELSE BEGIN CURVAL:=BOXCONTEXT-1073774592;A:=4;END; IF CURVAL<256 THEN IF(A>=4)THEN GEQDEFINE(11583+CURVAL,119,CURBOX)ELSE EQDEFINE(11583+CURVAL,119,CURBOX)ELSE BEGIN FINDSAELEMENT(4,CURVAL,TRUE) ;IF(A>=4)THEN GSADEF(CURPTR,CURBOX)ELSE SADEF(CURPTR,CURBOX);END; END{:1077}ELSE IF CURBOX<>0 THEN IF BOXCONTEXT>1073807360 THEN{1078:} BEGIN{404:}REPEAT GETXTOKEN;UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; IF((CURCMD=26)AND(ABS(CURLIST.MODEFIELD)<>1))OR((CURCMD=27)AND(ABS( CURLIST.MODEFIELD)=1))OR((CURCMD=28)AND(ABS(CURLIST.MODEFIELD)=203))THEN BEGIN APPENDGLUE;MEM[CURLIST.TAILFIELD].HH.B1:=BOXCONTEXT-(1073807261); MEM[CURLIST.TAILFIELD+1].HH.RH:=CURBOX; END ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1074);END;BEGIN HELPPTR:=3; HELPLINE[2]:=1075;HELPLINE[1]:=1076;HELPLINE[0]:=1077;END;BACKERROR; FLUSHNODELIST(CURBOX);END;END{:1078}ELSE SHIPOUT(CURBOX);END;{:1075} {1079:}PROCEDURE BEGINBOX(BOXCONTEXT:INTEGER);LABEL 10,30; VAR P,Q:HALFWORD;M:QUARTERWORD;K:HALFWORD;N:HALFWORD; BEGIN CASE CURCHR OF 0:BEGIN SCANREGISTERNUM; IF CURVAL<256 THEN CURBOX:=EQTB[11583+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT(4,CURVAL,FALSE); IF CURPTR=0 THEN CURBOX:=0 ELSE CURBOX:=MEM[CURPTR+1].HH.RH;END; IF CURVAL<256 THEN EQTB[11583+CURVAL].HH.RH:=0 ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR<>0 THEN BEGIN MEM[CURPTR+1].HH.RH:=0; MEM[CURPTR+1].HH.LH:=MEM[CURPTR+1].HH.LH+1;DELETESAREF(CURPTR);END;END; END;1:BEGIN SCANREGISTERNUM; IF CURVAL<256 THEN Q:=EQTB[11583+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR=0 THEN Q:=0 ELSE Q:=MEM[CURPTR+1].HH.RH;END; CURBOX:=COPYNODELIST(Q);END;2:{1080:}BEGIN CURBOX:=0; IF ABS(CURLIST.MODEFIELD)=203 THEN BEGIN YOUCANT;BEGIN HELPPTR:=1; HELPLINE[0]:=1078;END;ERROR; END ELSE IF(CURLIST.MODEFIELD=1)AND(CURLIST.HEADFIELD=CURLIST.TAILFIELD) THEN BEGIN YOUCANT;BEGIN HELPPTR:=2;HELPLINE[1]:=1079;HELPLINE[0]:=1080; END;ERROR; END ELSE BEGIN IF NOT(CURLIST.TAILFIELD>=HIMEMMIN)THEN BEGIN IF(MEM[ CURLIST.TAILFIELD].HH.B0=9)AND(MEM[CURLIST.TAILFIELD].HH.B1=3)THEN REMOVEENDM; IF(MEM[CURLIST.TAILFIELD].HH.B0=0)OR(MEM[CURLIST.TAILFIELD].HH.B0=1)THEN {1081:}BEGIN Q:=CURLIST.HEADFIELD;REPEAT P:=Q; IF NOT(Q>=HIMEMMIN)THEN IF MEM[Q].HH.B0=7 THEN BEGIN FOR M:=1 TO MEM[Q]. HH.B1 DO P:=MEM[P].HH.RH;IF P=CURLIST.TAILFIELD THEN GOTO 30;END; Q:=MEM[P].HH.RH;UNTIL Q=CURLIST.TAILFIELD;CURBOX:=CURLIST.TAILFIELD; MEM[CURBOX+4].INT:=0;CURLIST.TAILFIELD:=P;MEM[P].HH.RH:=0;30:END{:1081}; IF LRTEMP<>0 THEN INSERTENDM;END;END;END{:1080};3:{1082:} BEGIN SCANREGISTERNUM;N:=CURVAL; IF NOT SCANKEYWORD(850)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1081);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1082;HELPLINE[0]:=1083; END;ERROR;END;SCANDIMEN(FALSE,FALSE,FALSE);CURBOX:=VSPLIT(N,CURVAL); END{:1082};OTHERWISE{1083:}BEGIN K:=CURCHR-4; SAVESTACK[SAVEPTR+0].INT:=BOXCONTEXT; IF K=102 THEN IF(BOXCONTEXT<1073741824)AND(ABS(CURLIST.MODEFIELD)=1)THEN SCANSPEC(3,TRUE)ELSE SCANSPEC(2,TRUE)ELSE BEGIN IF K=1 THEN SCANSPEC(4, TRUE)ELSE BEGIN SCANSPEC(5,TRUE);K:=1;END;NORMALPARAGRAPH;END;PUSHNEST; CURLIST.MODEFIELD:=-K;IF K=1 THEN BEGIN CURLIST.AUXFIELD.INT:=-65536000; IF EQTB[11322].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11322].HH.RH,11); END ELSE BEGIN CURLIST.AUXFIELD.HH.LH:=1000; IF EQTB[11321].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11321].HH.RH,10);END; GOTO 10;END{:1083}END;BOXEND(BOXCONTEXT);10:END;{:1079}{1084:} PROCEDURE SCANBOX(BOXCONTEXT:INTEGER);BEGIN{404:}REPEAT GETXTOKEN; UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; IF CURCMD=20 THEN BEGINBOX(BOXCONTEXT)ELSE IF(BOXCONTEXT>=1073807361)AND ((CURCMD=36)OR(CURCMD=35))THEN BEGIN CURBOX:=SCANRULESPEC; BOXEND(BOXCONTEXT); END ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1084);END;BEGIN HELPPTR:=3; HELPLINE[2]:=1085;HELPLINE[1]:=1086;HELPLINE[0]:=1087;END;BACKERROR;END; END;{:1084}{1086:}PROCEDURE PACKAGE(C:SMALLNUMBER);VAR H:SCALED; P:HALFWORD;D:SCALED;BEGIN D:=EQTB[13752].INT;UNSAVE;SAVEPTR:=SAVEPTR-3; IF CURLIST.MODEFIELD=-102 THEN CURBOX:=HPACK(MEM[CURLIST.HEADFIELD].HH. RH,SAVESTACK[SAVEPTR+2].INT,SAVESTACK[SAVEPTR+1].INT)ELSE BEGIN CURBOX:= VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,SAVESTACK[SAVEPTR+2].INT,SAVESTACK [SAVEPTR+1].INT,D);IF C=4 THEN{1087:}BEGIN H:=0;P:=MEM[CURBOX+5].HH.RH; IF P<>0 THEN IF MEM[P].HH.B0<=2 THEN H:=MEM[P+3].INT; MEM[CURBOX+2].INT:=MEM[CURBOX+2].INT-H+MEM[CURBOX+3].INT; MEM[CURBOX+3].INT:=H;END{:1087};END;POPNEST; BOXEND(SAVESTACK[SAVEPTR+0].INT);END;{:1086}{1091:} FUNCTION NORMMIN(H:INTEGER):SMALLNUMBER; BEGIN IF H<=0 THEN NORMMIN:=1 ELSE IF H>=63 THEN NORMMIN:=63 ELSE NORMMIN:=H;END;PROCEDURE NEWGRAF(INDENTED:BOOLEAN); BEGIN CURLIST.PGFIELD:=0; IF(CURLIST.MODEFIELD=1)OR(CURLIST.HEADFIELD<>CURLIST.TAILFIELD)THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(2); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;PUSHNEST; CURLIST.MODEFIELD:=102;CURLIST.AUXFIELD.HH.LH:=1000; IF EQTB[13218].INT<=0 THEN CURLANG:=0 ELSE IF EQTB[13218].INT>255 THEN CURLANG:=0 ELSE CURLANG:=EQTB[13218].INT; CURLIST.AUXFIELD.HH.RH:=CURLANG; CURLIST.PGFIELD:=(NORMMIN(EQTB[13219].INT)*64+NORMMIN(EQTB[13220].INT)) *65536+CURLANG;IF INDENTED THEN BEGIN CURLIST.TAILFIELD:=NEWNULLBOX; MEM[CURLIST.HEADFIELD].HH.RH:=CURLIST.TAILFIELD; MEM[CURLIST.TAILFIELD+1].INT:=EQTB[13745].INT;END; IF EQTB[11318].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11318].HH.RH,7); IF NESTPTR=1 THEN BUILDPAGE;END;{:1091}{1093:}PROCEDURE INDENTINHMODE; VAR P,Q:HALFWORD;BEGIN IF CURCHR>0 THEN BEGIN P:=NEWNULLBOX; MEM[P+1].INT:=EQTB[13745].INT; IF ABS(CURLIST.MODEFIELD)=102 THEN CURLIST.AUXFIELD.HH.LH:=1000 ELSE BEGIN Q:=NEWNOAD;MEM[Q+1].HH.RH:=2;MEM[Q+1].HH.LH:=P;P:=Q;END; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=P; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END;END;{:1093} {1095:}PROCEDURE HEADFORVMODE; BEGIN IF CURLIST.MODEFIELD<0 THEN IF CURCMD<>36 THEN OFFSAVE ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(694);END;PRINTESC(524);PRINT(1090); BEGIN HELPPTR:=2;HELPLINE[1]:=1091;HELPLINE[0]:=1092;END;ERROR; END ELSE BEGIN BACKINPUT;CURTOK:=PARTOKEN;BACKINPUT; CURINPUT.INDEXFIELD:=4;END;END;{:1095}{1096:}PROCEDURE ENDGRAF; BEGIN IF CURLIST.MODEFIELD=102 THEN BEGIN IF CURLIST.HEADFIELD=CURLIST. TAILFIELD THEN POPNEST ELSE LINEBREAK(FALSE); IF CURLIST.ETEXAUXFIELD<>0 THEN BEGIN FLUSHLIST(CURLIST.ETEXAUXFIELD); CURLIST.ETEXAUXFIELD:=0;END;NORMALPARAGRAPH;ERRORCOUNT:=0;END;END; {:1096}{1099:}PROCEDURE BEGININSERTORADJUST; BEGIN IF CURCMD=38 THEN CURVAL:=255 ELSE BEGIN SCANEIGHTBITINT; IF CURVAL=255 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1093);END; PRINTESC(331);PRINTINT(255);BEGIN HELPPTR:=1;HELPLINE[0]:=1094;END; ERROR;CURVAL:=0;END;END;SAVESTACK[SAVEPTR+0].INT:=CURVAL; SAVEPTR:=SAVEPTR+1;NEWSAVELEVEL(11);SCANLEFTBRACE;NORMALPARAGRAPH; PUSHNEST;CURLIST.MODEFIELD:=-1;CURLIST.AUXFIELD.INT:=-65536000;END; {:1099}{1101:}PROCEDURE MAKEMARK;VAR P:HALFWORD;C:HALFWORD; BEGIN IF CURCHR=0 THEN C:=0 ELSE BEGIN SCANREGISTERNUM;C:=CURVAL;END; P:=SCANTOKS(FALSE,TRUE);P:=GETNODE(2);MEM[P+1].HH.LH:=C;MEM[P].HH.B0:=4; MEM[P].HH.B1:=0;MEM[P+1].HH.RH:=DEFREF;MEM[CURLIST.TAILFIELD].HH.RH:=P; CURLIST.TAILFIELD:=P;END;{:1101}{1103:}PROCEDURE APPENDPENALTY; BEGIN SCANINT;BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(CURVAL); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; IF CURLIST.MODEFIELD=1 THEN BUILDPAGE;END;{:1103}{1105:} PROCEDURE DELETELAST;LABEL 10;VAR P,Q:HALFWORD;M:QUARTERWORD; BEGIN IF(CURLIST.MODEFIELD=1)AND(CURLIST.TAILFIELD=CURLIST.HEADFIELD) THEN{1106:}BEGIN IF(CURCHR<>10)OR(LASTGLUE<>327145)THEN BEGIN YOUCANT; BEGIN HELPPTR:=2;HELPLINE[1]:=1079;HELPLINE[0]:=1095;END; IF CURCHR=11 THEN HELPLINE[0]:=(1096)ELSE IF CURCHR<>10 THEN HELPLINE[0] :=(1097);ERROR;END;END{:1106} ELSE BEGIN IF NOT(CURLIST.TAILFIELD>=HIMEMMIN)THEN BEGIN IF(MEM[CURLIST. TAILFIELD].HH.B0=9)AND(MEM[CURLIST.TAILFIELD].HH.B1=3)THEN REMOVEENDM; IF MEM[CURLIST.TAILFIELD].HH.B0=CURCHR THEN BEGIN Q:=CURLIST.HEADFIELD; REPEAT P:=Q; IF NOT(Q>=HIMEMMIN)THEN IF MEM[Q].HH.B0=7 THEN BEGIN FOR M:=1 TO MEM[Q]. HH.B1 DO P:=MEM[P].HH.RH;IF P=CURLIST.TAILFIELD THEN GOTO 10;END; Q:=MEM[P].HH.RH;UNTIL Q=CURLIST.TAILFIELD;MEM[P].HH.RH:=0; FLUSHNODELIST(CURLIST.TAILFIELD);CURLIST.TAILFIELD:=P;END; IF LRTEMP<>0 THEN INSERTENDM;END;END;10:END;{:1105}{1110:} PROCEDURE UNPACKAGE;LABEL 30,10;VAR P:HALFWORD;C:0..1; BEGIN IF CURCHR>1 THEN{1596:} BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=DISCPTR[CURCHR];DISCPTR[CURCHR]:=0; GOTO 30;END{:1596};C:=CURCHR;SCANREGISTERNUM; IF CURVAL<256 THEN P:=EQTB[11583+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR=0 THEN P:=0 ELSE P:=MEM[CURPTR+1].HH.RH;END; IF P=0 THEN GOTO 10; IF(ABS(CURLIST.MODEFIELD)=203)OR((ABS(CURLIST.MODEFIELD)=1)AND(MEM[P].HH .B0<>1))OR((ABS(CURLIST.MODEFIELD)=102)AND(MEM[P].HH.B0<>0))THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(1105);END;BEGIN HELPPTR:=3;HELPLINE[2]:=1106; HELPLINE[1]:=1107;HELPLINE[0]:=1108;END;ERROR;GOTO 10;END; IF C=1 THEN MEM[CURLIST.TAILFIELD].HH.RH:=COPYNODELIST(MEM[P+5].HH.RH) ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[P+5].HH.RH; IF CURVAL<256 THEN EQTB[11583+CURVAL].HH.RH:=0 ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR<>0 THEN BEGIN MEM[CURPTR+1].HH.RH:=0; MEM[CURPTR+1].HH.LH:=MEM[CURPTR+1].HH.LH+1;DELETESAREF(CURPTR);END;END; FREENODE(P,7);END; 30:WHILE MEM[CURLIST.TAILFIELD].HH.RH<>0 DO CURLIST.TAILFIELD:=MEM[ CURLIST.TAILFIELD].HH.RH;10:END;{:1110}{1113:} PROCEDURE APPENDITALICCORRECTION;LABEL 10;VAR P:HALFWORD; F:INTERNALFONTNUMBER; BEGIN IF CURLIST.TAILFIELD<>CURLIST.HEADFIELD THEN BEGIN IF(CURLIST. TAILFIELD>=HIMEMMIN)THEN P:=CURLIST.TAILFIELD ELSE IF MEM[CURLIST. TAILFIELD].HH.B0=6 THEN P:=CURLIST.TAILFIELD+1 ELSE GOTO 10; F:=MEM[P].HH.B0; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(FONTINFO[ITALICBASE[F]+( FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B2)DIV 4].INT); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B1:=1;END;10:END;{:1113}{1117:} PROCEDURE APPENDDISCRETIONARY;VAR C:INTEGER; BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWDISC; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; IF CURCHR=1 THEN BEGIN C:=HYPHENCHAR[EQTB[11839].HH.RH]; IF C>=0 THEN IF C<256 THEN MEM[CURLIST.TAILFIELD+1].HH.LH:=NEWCHARACTER( EQTB[11839].HH.RH,C);END ELSE BEGIN SAVEPTR:=SAVEPTR+1; SAVESTACK[SAVEPTR-1].INT:=0;NEWSAVELEVEL(10);SCANLEFTBRACE;PUSHNEST; CURLIST.MODEFIELD:=-102;CURLIST.AUXFIELD.HH.LH:=1000;END;END;{:1117} {1119:}PROCEDURE BUILDDISCRETIONARY;LABEL 30,10;VAR P,Q:HALFWORD; N:INTEGER;BEGIN UNSAVE;{1121:}Q:=CURLIST.HEADFIELD;P:=MEM[Q].HH.RH;N:=0; WHILE P<>0 DO BEGIN IF NOT(P>=HIMEMMIN)THEN IF MEM[P].HH.B0>2 THEN IF MEM[P].HH.B0<>11 THEN IF MEM[P].HH.B0<>6 THEN BEGIN BEGIN IF INTERACTION =3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1115);END;BEGIN HELPPTR:=1;HELPLINE[0]:=1116;END;ERROR; BEGINDIAGNOSTIC;PRINTNL(1117);SHOWBOX(P);ENDDIAGNOSTIC(TRUE); FLUSHNODELIST(P);MEM[Q].HH.RH:=0;GOTO 30;END;Q:=P;P:=MEM[Q].HH.RH; N:=N+1;END;30:{:1121};P:=MEM[CURLIST.HEADFIELD].HH.RH;POPNEST; CASE SAVESTACK[SAVEPTR-1].INT OF 0:MEM[CURLIST.TAILFIELD+1].HH.LH:=P; 1:MEM[CURLIST.TAILFIELD+1].HH.RH:=P;2:{1120:} BEGIN IF(N>0)AND(ABS(CURLIST.MODEFIELD)=203)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(1109);END;PRINTESC(352);BEGIN HELPPTR:=2; HELPLINE[1]:=1110;HELPLINE[0]:=1111;END;FLUSHNODELIST(P);N:=0;ERROR; END ELSE MEM[CURLIST.TAILFIELD].HH.RH:=P; IF N<=511 THEN MEM[CURLIST.TAILFIELD].HH.B1:=N ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(1112);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1113; HELPLINE[0]:=1114;END;ERROR;END;IF N>0 THEN CURLIST.TAILFIELD:=Q; SAVEPTR:=SAVEPTR-1;GOTO 10;END{:1120};END; SAVESTACK[SAVEPTR-1].INT:=SAVESTACK[SAVEPTR-1].INT+1;NEWSAVELEVEL(10); SCANLEFTBRACE;PUSHNEST;CURLIST.MODEFIELD:=-102; CURLIST.AUXFIELD.HH.LH:=1000;10:END;{:1119}{1123:}PROCEDURE MAKEACCENT; VAR S,T:DOUBLE;P,Q,R:HALFWORD;F:INTERNALFONTNUMBER;A,H,X,W,DELTA:SCALED; I:FOURQUARTERS;BEGIN SCANCHARNUM;F:=EQTB[11839].HH.RH; P:=NEWCHARACTER(F,CURVAL); IF P<>0 THEN BEGIN X:=FONTINFO[5+PARAMBASE[F]].INT; S:=FONTINFO[1+PARAMBASE[F]].INT/65536.0D0; A:=FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B0].INT ;DOASSIGNMENTS;{1124:}Q:=0;F:=EQTB[11839].HH.RH; IF(CURCMD=11)OR(CURCMD=12)OR(CURCMD=68)THEN Q:=NEWCHARACTER(F,CURCHR) ELSE IF CURCMD=16 THEN BEGIN SCANCHARNUM;Q:=NEWCHARACTER(F,CURVAL); END ELSE BACKINPUT{:1124};IF Q<>0 THEN{1125:} BEGIN T:=FONTINFO[1+PARAMBASE[F]].INT/65536.0D0; I:=FONTINFO[CHARBASE[F]+MEM[Q].HH.B1].QQQQ; W:=FONTINFO[WIDTHBASE[F]+I.B0].INT; H:=FONTINFO[HEIGHTBASE[F]+(I.B1)DIV 16].INT; IF H<>X THEN BEGIN P:=HPACK(P,0,1);MEM[P+4].INT:=X-H;END; DELTA:=ROUND((W-A)/2.0D0+H*T-X*S);R:=NEWKERN(DELTA);MEM[R].HH.B1:=2; MEM[CURLIST.TAILFIELD].HH.RH:=R;MEM[R].HH.RH:=P; CURLIST.TAILFIELD:=NEWKERN(-A-DELTA);MEM[CURLIST.TAILFIELD].HH.B1:=2; MEM[P].HH.RH:=CURLIST.TAILFIELD;P:=Q;END{:1125}; MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P; CURLIST.AUXFIELD.HH.LH:=1000;END;END;{:1123}{1127:}PROCEDURE ALIGNERROR; BEGIN IF ABS(ALIGNSTATE)>2 THEN{1128:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1122);END; PRINTCMDCHR(CURCMD,CURCHR);IF CURTOK=1062 THEN BEGIN BEGIN HELPPTR:=6; HELPLINE[5]:=1123;HELPLINE[4]:=1124;HELPLINE[3]:=1125;HELPLINE[2]:=1126; HELPLINE[1]:=1127;HELPLINE[0]:=1128;END;END ELSE BEGIN BEGIN HELPPTR:=5; HELPLINE[4]:=1123;HELPLINE[3]:=1129;HELPLINE[2]:=1126;HELPLINE[1]:=1127; HELPLINE[0]:=1128;END;END;ERROR;END{:1128}ELSE BEGIN BACKINPUT; IF ALIGNSTATE<0 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(666);END; ALIGNSTATE:=ALIGNSTATE+1;CURTOK:=379; END ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1118);END; ALIGNSTATE:=ALIGNSTATE-1;CURTOK:=637;END;BEGIN HELPPTR:=3; HELPLINE[2]:=1119;HELPLINE[1]:=1120;HELPLINE[0]:=1121;END;INSERROR;END; END;{:1127}{1129:}PROCEDURE NOALIGNERROR; BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1122);END;PRINTESC(530); BEGIN HELPPTR:=2;HELPLINE[1]:=1130;HELPLINE[0]:=1131;END;ERROR;END; PROCEDURE OMITERROR;BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1122);END; PRINTESC(533);BEGIN HELPPTR:=2;HELPLINE[1]:=1132;HELPLINE[0]:=1131;END; ERROR;END;{:1129}{1131:}PROCEDURE DOENDV; BEGIN IF CURGROUP=6 THEN BEGIN ENDGRAF;IF FINCOL THEN FINROW; END ELSE OFFSAVE;END;{:1131}{1135:}PROCEDURE CSERROR; BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(786);END;PRINTESC(508); BEGIN HELPPTR:=1;HELPLINE[0]:=1134;END;ERROR;END;{:1135}{1136:} PROCEDURE PUSHMATH(C:GROUPCODE);BEGIN PUSHNEST;CURLIST.MODEFIELD:=-203; CURLIST.AUXFIELD.INT:=0;NEWSAVELEVEL(C);END;{:1136}{1138:}{1466:} PROCEDURE JUSTCOPY(P,H,T:HALFWORD);LABEL 40,45;VAR R:HALFWORD; WORDS:0..5;BEGIN WHILE P<>0 DO BEGIN WORDS:=1; IF(P>=HIMEMMIN)THEN R:=GETAVAIL ELSE CASE MEM[P].HH.B0 OF 0,1:BEGIN R:= GETNODE(7);MEM[R+6]:=MEM[P+6];MEM[R+5]:=MEM[P+5];WORDS:=5; MEM[R+5].HH.RH:=0;END;2:BEGIN R:=GETNODE(4);WORDS:=4;END; 6:BEGIN R:=GETAVAIL;MEM[R]:=MEM[P+1];GOTO 40;END; 11,9:BEGIN R:=GETNODE(2);WORDS:=2;END;10:BEGIN R:=GETNODE(2); MEM[MEM[P+1].HH.LH].HH.RH:=MEM[MEM[P+1].HH.LH].HH.RH+1; MEM[R+1].HH.LH:=MEM[P+1].HH.LH;MEM[R+1].HH.RH:=0;END;8:{1357:} CASE MEM[P].HH.B1 OF 0:BEGIN R:=GETNODE(3);WORDS:=3;END; 1,3:BEGIN R:=GETNODE(2); MEM[MEM[P+1].HH.RH].HH.LH:=MEM[MEM[P+1].HH.RH].HH.LH+1;WORDS:=2;END; 2,4:BEGIN R:=GETNODE(2);WORDS:=2;END;OTHERWISE CONFUSION(1304)END{:1357} ;OTHERWISE GOTO 45 END;WHILE WORDS>0 DO BEGIN WORDS:=WORDS-1; MEM[R+WORDS]:=MEM[P+WORDS];END;40:MEM[H].HH.RH:=R;H:=R; 45:P:=MEM[P].HH.RH;END;MEM[H].HH.RH:=T;END;{:1466}{1471:} PROCEDURE JUSTREVERSE(P:HALFWORD);LABEL 40,30;VAR L:HALFWORD;T:HALFWORD; Q:HALFWORD;M,N:HALFWORD;BEGIN M:=0;N:=0; IF MEM[327141].HH.RH=0 THEN BEGIN JUSTCOPY(MEM[P].HH.RH,327141,0); Q:=MEM[327141].HH.RH;END ELSE BEGIN Q:=MEM[P].HH.RH;MEM[P].HH.RH:=0; FLUSHNODELIST(MEM[327141].HH.RH);END;T:=NEWEDGE(CURDIR,0);L:=T; CURDIR:=1-CURDIR;WHILE Q<>0 DO IF(Q>=HIMEMMIN)THEN REPEAT P:=Q; Q:=MEM[P].HH.RH;MEM[P].HH.RH:=L;L:=P; UNTIL NOT(Q>=HIMEMMIN)ELSE BEGIN P:=Q;Q:=MEM[P].HH.RH; IF MEM[P].HH.B0=9 THEN{1472:} IF ODD(MEM[P].HH.B1)THEN IF MEM[LRPTR].HH.LH<>(4*(MEM[P].HH.B1 DIV 4)+3) THEN BEGIN MEM[P].HH.B0:=11;LRPROBLEMS:=LRPROBLEMS+1; END ELSE BEGIN BEGIN TEMPPTR:=LRPTR;LRPTR:=MEM[TEMPPTR].HH.RH; BEGIN MEM[TEMPPTR].HH.RH:=AVAIL;AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END; END;IF N>0 THEN BEGIN N:=N-1;MEM[P].HH.B1:=MEM[P].HH.B1-1; END ELSE BEGIN IF M>0 THEN M:=M-1 ELSE GOTO 40;MEM[P].HH.B0:=11;END; END ELSE BEGIN BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=(4*(MEM[P].HH.B1 DIV 4)+3); MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR;END; IF(N>0)OR((MEM[P].HH.B1 DIV 8)<>CURDIR)THEN BEGIN N:=N+1; MEM[P].HH.B1:=MEM[P].HH.B1+1;END ELSE BEGIN MEM[P].HH.B0:=11;M:=M+1;END; END{:1472};MEM[P].HH.RH:=L;L:=P;END;GOTO 30; 40:MEM[T+1].INT:=MEM[P+1].INT;MEM[T].HH.RH:=Q;FREENODE(P,2); 30:MEM[327141].HH.RH:=L;END;{:1471}PROCEDURE INITMATH;LABEL 21,40,45,30; VAR W:SCALED;J:HALFWORD;X:INTEGER;L:SCALED;S:SCALED;P:HALFWORD; Q:HALFWORD;F:INTERNALFONTNUMBER;N:INTEGER;V:SCALED;D:SCALED; BEGIN GETTOKEN;IF(CURCMD=3)AND(CURLIST.MODEFIELD>0)THEN{1145:} BEGIN J:=0;W:=-1073741823; IF CURLIST.HEADFIELD=CURLIST.TAILFIELD THEN{1465:}BEGIN POPNEST;{1464:} IF CURLIST.ETEXAUXFIELD=0 THEN X:=0 ELSE IF MEM[CURLIST.ETEXAUXFIELD].HH .LH>=8 THEN X:=-1 ELSE X:=1{:1464};END{:1465}ELSE BEGIN LINEBREAK(TRUE); {1146:}{1467:}IF(ETEXMODE=1)THEN{1473:} BEGIN IF EQTB[10790].HH.RH=0 THEN J:=NEWKERN(0)ELSE J:=NEWPARAMGLUE(8); IF EQTB[10789].HH.RH=0 THEN P:=NEWKERN(0)ELSE P:=NEWPARAMGLUE(7); MEM[P].HH.RH:=J;J:=NEWNULLBOX;MEM[J+1].INT:=MEM[JUSTBOX+1].INT; MEM[J+4].INT:=MEM[JUSTBOX+4].INT;MEM[J+5].HH.RH:=P; MEM[J+5].HH.B1:=MEM[JUSTBOX+5].HH.B1; MEM[J+5].HH.B0:=MEM[JUSTBOX+5].HH.B0;MEM[J+6].GR:=MEM[JUSTBOX+6].GR; END{:1473};V:=MEM[JUSTBOX+4].INT;{1464:} IF CURLIST.ETEXAUXFIELD=0 THEN X:=0 ELSE IF MEM[CURLIST.ETEXAUXFIELD].HH .LH>=8 THEN X:=-1 ELSE X:=1{:1464}; IF X>=0 THEN BEGIN P:=MEM[JUSTBOX+5].HH.RH;MEM[327141].HH.RH:=0; END ELSE BEGIN V:=-V-MEM[JUSTBOX+1].INT;P:=NEWMATH(0,6); MEM[327141].HH.RH:=P;JUSTCOPY(MEM[JUSTBOX+5].HH.RH,P,NEWMATH(0,7)); CURDIR:=1;END;V:=V+2*FONTINFO[6+PARAMBASE[EQTB[11839].HH.RH]].INT; IF(EQTB[13232].INT>0)THEN{1446:}BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=0;MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR; END{:1446}{:1467};WHILE P<>0 DO BEGIN{1147:} 21:IF(P>=HIMEMMIN)THEN BEGIN F:=MEM[P].HH.B0; D:=FONTINFO[WIDTHBASE[F]+FONTINFO[CHARBASE[F]+MEM[P].HH.B1].QQQQ.B0].INT ;GOTO 40;END;CASE MEM[P].HH.B0 OF 0,1,2:BEGIN D:=MEM[P+1].INT;GOTO 40; END;6:{652:}BEGIN MEM[327132]:=MEM[P+1];MEM[327132].HH.RH:=MEM[P].HH.RH; P:=327132;GOTO 21;END{:652};11:D:=MEM[P+1].INT;{1469:} 9:BEGIN D:=MEM[P+1].INT;IF(EQTB[13232].INT>0)THEN{1470:} IF ODD(MEM[P].HH.B1)THEN BEGIN IF MEM[LRPTR].HH.LH=(4*(MEM[P].HH.B1 DIV 4)+3)THEN BEGIN TEMPPTR:=LRPTR;LRPTR:=MEM[TEMPPTR].HH.RH; BEGIN MEM[TEMPPTR].HH.RH:=AVAIL;AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END; END ELSE IF MEM[P].HH.B1>4 THEN BEGIN W:=1073741823;GOTO 30; END END ELSE BEGIN BEGIN TEMPPTR:=GETAVAIL; MEM[TEMPPTR].HH.LH:=(4*(MEM[P].HH.B1 DIV 4)+3); MEM[TEMPPTR].HH.RH:=LRPTR;LRPTR:=TEMPPTR;END; IF(MEM[P].HH.B1 DIV 8)<>CURDIR THEN BEGIN JUSTREVERSE(P);P:=327141;END; END{:1470}ELSE IF MEM[P].HH.B1>=4 THEN BEGIN W:=1073741823;GOTO 30;END; END;14:BEGIN D:=MEM[P+1].INT;CURDIR:=MEM[P].HH.B1;END;{:1469}10:{1148:} BEGIN Q:=MEM[P+1].HH.LH;D:=MEM[Q+1].INT; IF MEM[JUSTBOX+5].HH.B0=1 THEN BEGIN IF(MEM[JUSTBOX+5].HH.B1=MEM[Q].HH. B0)AND(MEM[Q+2].INT<>0)THEN V:=1073741823; END ELSE IF MEM[JUSTBOX+5].HH.B0=2 THEN BEGIN IF(MEM[JUSTBOX+5].HH.B1= MEM[Q].HH.B1)AND(MEM[Q+3].INT<>0)THEN V:=1073741823;END; IF MEM[P].HH.B1>=100 THEN GOTO 40;END{:1148};8:{1361:}D:=0{:1361}; OTHERWISE D:=0 END{:1147};IF V<1073741823 THEN V:=V+D;GOTO 45; 40:IF V<1073741823 THEN BEGIN V:=V+D;W:=V;END ELSE BEGIN W:=1073741823; GOTO 30;END;45:P:=MEM[P].HH.RH;END;30:{1468:} IF(EQTB[13232].INT>0)THEN BEGIN WHILE LRPTR<>0 DO BEGIN TEMPPTR:=LRPTR; LRPTR:=MEM[TEMPPTR].HH.RH;BEGIN MEM[TEMPPTR].HH.RH:=AVAIL; AVAIL:=TEMPPTR;DYNUSED:=DYNUSED-1;END;END; IF LRPROBLEMS<>0 THEN BEGIN W:=1073741823;LRPROBLEMS:=0;END;END; CURDIR:=0;FLUSHNODELIST(MEM[327141].HH.RH){:1468}{:1146};END;{1149:} IF EQTB[11312].HH.RH=0 THEN IF(EQTB[13762].INT<>0)AND(((EQTB[13209].INT >=0)AND(CURLIST.PGFIELD+2>EQTB[13209].INT))OR(CURLIST.PGFIELD+1<-EQTB[ 13209].INT))THEN BEGIN L:=EQTB[13748].INT-ABS(EQTB[13762].INT); IF EQTB[13762].INT>0 THEN S:=EQTB[13762].INT ELSE S:=0; END ELSE BEGIN L:=EQTB[13748].INT;S:=0; END ELSE BEGIN N:=MEM[EQTB[11312].HH.RH].HH.LH; IF CURLIST.PGFIELD+2>=N THEN P:=EQTB[11312].HH.RH+2*N ELSE P:=EQTB[11312 ].HH.RH+2*(CURLIST.PGFIELD+2);S:=MEM[P-1].INT;L:=MEM[P].INT;END{:1149}; PUSHMATH(15);CURLIST.MODEFIELD:=203;EQWORDDEFINE(13212,-1); EQWORDDEFINE(13758,W);CURLIST.ETEXAUXFIELD:=J; IF(ETEXMODE=1)THEN EQWORDDEFINE(13228,X);EQWORDDEFINE(13759,L); EQWORDDEFINE(13760,S); IF EQTB[11320].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11320].HH.RH,9); IF NESTPTR=1 THEN BUILDPAGE;END{:1145}ELSE BEGIN BACKINPUT;{1139:} BEGIN PUSHMATH(15);EQWORDDEFINE(13212,-1); IF EQTB[11319].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11319].HH.RH,8); END{:1139};END;END;{:1138}{1142:}PROCEDURE STARTEQNO; BEGIN SAVESTACK[SAVEPTR+0].INT:=CURCHR;SAVEPTR:=SAVEPTR+1;{1139:} BEGIN PUSHMATH(15);EQWORDDEFINE(13212,-1); IF EQTB[11319].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11319].HH.RH,8); END{:1139};END;{:1142}{1151:}PROCEDURE SCANMATH(P:HALFWORD); LABEL 20,21,10;VAR C:INTEGER;BEGIN 20:{404:}REPEAT GETXTOKEN; UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; 21:CASE CURCMD OF 11,12,68:BEGIN C:=EQTB[12912+CURCHR].HH.RH; IF C=32768 THEN BEGIN{1152:}BEGIN CURCS:=CURCHR+1; CURCMD:=EQTB[CURCS].HH.B0;CURCHR:=EQTB[CURCS].HH.RH;XTOKEN;BACKINPUT; END{:1152};GOTO 20;END;END;16:BEGIN SCANCHARNUM;CURCHR:=CURVAL; CURCMD:=68;GOTO 21;END;17:BEGIN SCANFIFTEENBITINT;C:=CURVAL;END; 69:C:=CURCHR;15:BEGIN SCANTWENTYSEVENBITINT;C:=CURVAL DIV 4096;END; OTHERWISE{1153:}BEGIN BACKINPUT;SCANLEFTBRACE; SAVESTACK[SAVEPTR+0].INT:=P;SAVEPTR:=SAVEPTR+1;PUSHMATH(9);GOTO 10; END{:1153}END;MEM[P].HH.RH:=1;MEM[P].HH.B1:=C MOD 256; IF(C>=28672)AND((EQTB[13212].INT>=0)AND(EQTB[13212].INT<16))THEN MEM[P]. HH.B0:=EQTB[13212].INT ELSE MEM[P].HH.B0:=(C DIV 256)MOD 16;10:END; {:1151}{1155:}PROCEDURE SETMATHCHAR(C:INTEGER);VAR P:HALFWORD; BEGIN IF C>=32768 THEN{1152:}BEGIN CURCS:=CURCHR+1; CURCMD:=EQTB[CURCS].HH.B0;CURCHR:=EQTB[CURCS].HH.RH;XTOKEN;BACKINPUT; END{:1152}ELSE BEGIN P:=NEWNOAD;MEM[P+1].HH.RH:=1; MEM[P+1].HH.B1:=C MOD 256;MEM[P+1].HH.B0:=(C DIV 256)MOD 16; IF C>=28672 THEN BEGIN IF((EQTB[13212].INT>=0)AND(EQTB[13212].INT<16)) THEN MEM[P+1].HH.B0:=EQTB[13212].INT;MEM[P].HH.B0:=16; END ELSE MEM[P].HH.B0:=16+(C DIV 4096);MEM[CURLIST.TAILFIELD].HH.RH:=P; CURLIST.TAILFIELD:=P;END;END;{:1155}{1159:}PROCEDURE MATHLIMITSWITCH; LABEL 10; BEGIN IF CURLIST.HEADFIELD<>CURLIST.TAILFIELD THEN IF MEM[CURLIST. TAILFIELD].HH.B0=17 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.B1:=CURCHR; GOTO 10;END;BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1138);END;BEGIN HELPPTR:=1; HELPLINE[0]:=1139;END;ERROR;10:END;{:1159}{1160:} PROCEDURE SCANDELIMITER(P:HALFWORD;R:BOOLEAN); BEGIN IF R THEN SCANTWENTYSEVENBITINT ELSE BEGIN{404:}REPEAT GETXTOKEN; UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; CASE CURCMD OF 11,12:CURVAL:=EQTB[13489+CURCHR].INT; 15:SCANTWENTYSEVENBITINT;OTHERWISE CURVAL:=-1 END;END; IF CURVAL<0 THEN{1161:}BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1140);END; BEGIN HELPPTR:=6;HELPLINE[5]:=1141;HELPLINE[4]:=1142;HELPLINE[3]:=1143; HELPLINE[2]:=1144;HELPLINE[1]:=1145;HELPLINE[0]:=1146;END;BACKERROR; CURVAL:=0;END{:1161};MEM[P].QQQQ.B0:=(CURVAL DIV 1048576)MOD 16; MEM[P].QQQQ.B1:=(CURVAL DIV 4096)MOD 256; MEM[P].QQQQ.B2:=(CURVAL DIV 256)MOD 16;MEM[P].QQQQ.B3:=CURVAL MOD 256; END;{:1160}{1163:}PROCEDURE MATHRADICAL; BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=GETNODE(5); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B0:=24;MEM[CURLIST.TAILFIELD].HH.B1:=0; MEM[CURLIST.TAILFIELD+1].HH:=EMPTYFIELD; MEM[CURLIST.TAILFIELD+3].HH:=EMPTYFIELD; MEM[CURLIST.TAILFIELD+2].HH:=EMPTYFIELD; SCANDELIMITER(CURLIST.TAILFIELD+4,TRUE);SCANMATH(CURLIST.TAILFIELD+1); END;{:1163}{1165:}PROCEDURE MATHAC;BEGIN IF CURCMD=45 THEN{1166:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1147);END;PRINTESC(526); PRINT(1148);BEGIN HELPPTR:=2;HELPLINE[1]:=1149;HELPLINE[0]:=1150;END; ERROR;END{:1166};BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=GETNODE(5); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B0:=28;MEM[CURLIST.TAILFIELD].HH.B1:=0; MEM[CURLIST.TAILFIELD+1].HH:=EMPTYFIELD; MEM[CURLIST.TAILFIELD+3].HH:=EMPTYFIELD; MEM[CURLIST.TAILFIELD+2].HH:=EMPTYFIELD; MEM[CURLIST.TAILFIELD+4].HH.RH:=1;SCANFIFTEENBITINT; MEM[CURLIST.TAILFIELD+4].HH.B1:=CURVAL MOD 256; IF(CURVAL>=28672)AND((EQTB[13212].INT>=0)AND(EQTB[13212].INT<16))THEN MEM[CURLIST.TAILFIELD+4].HH.B0:=EQTB[13212].INT ELSE MEM[CURLIST. TAILFIELD+4].HH.B0:=(CURVAL DIV 256)MOD 16; SCANMATH(CURLIST.TAILFIELD+1);END;{:1165}{1172:}PROCEDURE APPENDCHOICES; BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWCHOICE; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;SAVEPTR:=SAVEPTR+1; SAVESTACK[SAVEPTR-1].INT:=0;PUSHMATH(13);SCANLEFTBRACE;END;{:1172} {1174:}{1184:}FUNCTION FINMLIST(P:HALFWORD):HALFWORD;VAR Q:HALFWORD; BEGIN IF CURLIST.AUXFIELD.INT<>0 THEN{1185:} BEGIN MEM[CURLIST.AUXFIELD.INT+3].HH.RH:=3; MEM[CURLIST.AUXFIELD.INT+3].HH.LH:=MEM[CURLIST.HEADFIELD].HH.RH; IF P=0 THEN Q:=CURLIST.AUXFIELD.INT ELSE BEGIN Q:=MEM[CURLIST.AUXFIELD. INT+2].HH.LH; IF(MEM[Q].HH.B0<>30)OR(CURLIST.ETEXAUXFIELD=0)THEN CONFUSION(885); MEM[CURLIST.AUXFIELD.INT+2].HH.LH:=MEM[CURLIST.ETEXAUXFIELD].HH.RH; MEM[CURLIST.ETEXAUXFIELD].HH.RH:=CURLIST.AUXFIELD.INT; MEM[CURLIST.AUXFIELD.INT].HH.RH:=P;END;END{:1185} ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=P; Q:=MEM[CURLIST.HEADFIELD].HH.RH;END;POPNEST;FINMLIST:=Q;END;{:1184} PROCEDURE BUILDCHOICES;LABEL 10;VAR P:HALFWORD;BEGIN UNSAVE; P:=FINMLIST(0); CASE SAVESTACK[SAVEPTR-1].INT OF 0:MEM[CURLIST.TAILFIELD+1].HH.LH:=P; 1:MEM[CURLIST.TAILFIELD+1].HH.RH:=P;2:MEM[CURLIST.TAILFIELD+2].HH.LH:=P; 3:BEGIN MEM[CURLIST.TAILFIELD+2].HH.RH:=P;SAVEPTR:=SAVEPTR-1;GOTO 10; END;END;SAVESTACK[SAVEPTR-1].INT:=SAVESTACK[SAVEPTR-1].INT+1; PUSHMATH(13);SCANLEFTBRACE;10:END;{:1174}{1176:}PROCEDURE SUBSUP; VAR T:SMALLNUMBER;P:HALFWORD;BEGIN T:=0;P:=0; IF CURLIST.TAILFIELD<>CURLIST.HEADFIELD THEN IF(MEM[CURLIST.TAILFIELD]. HH.B0>=16)AND(MEM[CURLIST.TAILFIELD].HH.B0<30)THEN BEGIN P:=CURLIST. TAILFIELD+2+CURCMD-7;T:=MEM[P].HH.RH;END;IF(P=0)OR(T<>0)THEN{1177:} BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; P:=CURLIST.TAILFIELD+2+CURCMD-7; IF T<>0 THEN BEGIN IF CURCMD=7 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1151);END;BEGIN HELPPTR:=1;HELPLINE[0]:=1152;END; END ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1153);END;BEGIN HELPPTR:=1; HELPLINE[0]:=1154;END;END;ERROR;END;END{:1177};SCANMATH(P);END;{:1176} {1181:}PROCEDURE MATHFRACTION;VAR C:SMALLNUMBER;BEGIN C:=CURCHR; IF CURLIST.AUXFIELD.INT<>0 THEN{1183:} BEGIN IF C>=3 THEN BEGIN SCANDELIMITER(327132,FALSE); SCANDELIMITER(327132,FALSE);END; IF C MOD 3=0 THEN SCANDIMEN(FALSE,FALSE,FALSE); BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(1161);END;BEGIN HELPPTR:=3;HELPLINE[2]:=1162; HELPLINE[1]:=1163;HELPLINE[0]:=1164;END;ERROR;END{:1183} ELSE BEGIN CURLIST.AUXFIELD.INT:=GETNODE(6); MEM[CURLIST.AUXFIELD.INT].HH.B0:=25;MEM[CURLIST.AUXFIELD.INT].HH.B1:=0; MEM[CURLIST.AUXFIELD.INT+2].HH.RH:=3; MEM[CURLIST.AUXFIELD.INT+2].HH.LH:=MEM[CURLIST.HEADFIELD].HH.RH; MEM[CURLIST.AUXFIELD.INT+3].HH:=EMPTYFIELD; MEM[CURLIST.AUXFIELD.INT+4].QQQQ:=NULLDELIMITER; MEM[CURLIST.AUXFIELD.INT+5].QQQQ:=NULLDELIMITER; MEM[CURLIST.HEADFIELD].HH.RH:=0;CURLIST.TAILFIELD:=CURLIST.HEADFIELD; {1182:}IF C>=3 THEN BEGIN SCANDELIMITER(CURLIST.AUXFIELD.INT+4,FALSE); SCANDELIMITER(CURLIST.AUXFIELD.INT+5,FALSE);END; CASE C MOD 3 OF 0:BEGIN SCANDIMEN(FALSE,FALSE,FALSE); MEM[CURLIST.AUXFIELD.INT+1].INT:=CURVAL;END; 1:MEM[CURLIST.AUXFIELD.INT+1].INT:=1073741824; 2:MEM[CURLIST.AUXFIELD.INT+1].INT:=0;END{:1182};END;END;{:1181}{1191:} PROCEDURE MATHLEFTRIGHT;VAR T:SMALLNUMBER;P:HALFWORD;Q:HALFWORD; BEGIN T:=CURCHR;IF(T<>30)AND(CURGROUP<>16)THEN{1192:} BEGIN IF CURGROUP=15 THEN BEGIN SCANDELIMITER(327132,FALSE); BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(786);END;IF T=1 THEN BEGIN PRINTESC(886); BEGIN HELPPTR:=1;HELPLINE[0]:=1165;END;END ELSE BEGIN PRINTESC(885); BEGIN HELPPTR:=1;HELPLINE[0]:=1166;END;END;ERROR;END ELSE OFFSAVE; END{:1192}ELSE BEGIN P:=NEWNOAD;MEM[P].HH.B0:=T; SCANDELIMITER(P+1,FALSE);IF T=1 THEN BEGIN MEM[P].HH.B0:=31; MEM[P].HH.B1:=1;END;IF T=30 THEN Q:=P ELSE BEGIN Q:=FINMLIST(P);UNSAVE; END;IF T<>31 THEN BEGIN PUSHMATH(16);MEM[CURLIST.HEADFIELD].HH.RH:=Q; CURLIST.TAILFIELD:=P;CURLIST.ETEXAUXFIELD:=P; END ELSE BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B0:=23;MEM[CURLIST.TAILFIELD+1].HH.RH:=3; MEM[CURLIST.TAILFIELD+1].HH.LH:=Q;END;END;END;{:1191}{1194:}{1477:} PROCEDURE APPDISPLAY(J,B:HALFWORD;D:SCALED);VAR Z:SCALED;S:SCALED; E:SCALED;X:INTEGER;P,Q,R,T,U:HALFWORD;BEGIN S:=EQTB[13760].INT; X:=EQTB[13228].INT; IF X=0 THEN MEM[B+4].INT:=S+D ELSE BEGIN Z:=EQTB[13759].INT;P:=B;{1478:} IF X>0 THEN E:=Z-D-MEM[P+1].INT ELSE BEGIN E:=D;D:=Z-E-MEM[P+1].INT;END; IF J<>0 THEN BEGIN B:=COPYNODELIST(J);MEM[B+3].INT:=MEM[P+3].INT; MEM[B+2].INT:=MEM[P+2].INT;S:=S-MEM[B+4].INT;D:=D+S; E:=E+MEM[B+1].INT-Z-S;END; IF MEM[P].HH.B1=2 THEN Q:=P ELSE BEGIN R:=MEM[P+5].HH.RH;FREENODE(P,7); IF R=0 THEN CONFUSION(1375);IF X>0 THEN BEGIN P:=R;REPEAT Q:=R; R:=MEM[R].HH.RH;UNTIL R=0;END ELSE BEGIN P:=0;Q:=R; REPEAT T:=MEM[R].HH.RH;MEM[R].HH.RH:=P;P:=R;R:=T;UNTIL R=0;END; END{:1478};{1479:}IF J=0 THEN BEGIN R:=NEWKERN(0);T:=NEWKERN(0); END ELSE BEGIN R:=MEM[B+5].HH.RH;T:=MEM[R].HH.RH;END;U:=NEWMATH(0,3); IF MEM[T].HH.B0=10 THEN BEGIN J:=NEWSKIPPARAM(8);MEM[Q].HH.RH:=J; MEM[J].HH.RH:=U;J:=MEM[T+1].HH.LH;MEM[TEMPPTR].HH.B0:=MEM[J].HH.B0; MEM[TEMPPTR].HH.B1:=MEM[J].HH.B1;MEM[TEMPPTR+1].INT:=E-MEM[J+1].INT; MEM[TEMPPTR+2].INT:=-MEM[J+2].INT;MEM[TEMPPTR+3].INT:=-MEM[J+3].INT; MEM[U].HH.RH:=T;END ELSE BEGIN MEM[T+1].INT:=E;MEM[T].HH.RH:=U; MEM[Q].HH.RH:=T;END;U:=NEWMATH(0,2); IF MEM[R].HH.B0=10 THEN BEGIN J:=NEWSKIPPARAM(7);MEM[U].HH.RH:=J; MEM[J].HH.RH:=P;J:=MEM[R+1].HH.LH;MEM[TEMPPTR].HH.B0:=MEM[J].HH.B0; MEM[TEMPPTR].HH.B1:=MEM[J].HH.B1;MEM[TEMPPTR+1].INT:=D-MEM[J+1].INT; MEM[TEMPPTR+2].INT:=-MEM[J+2].INT;MEM[TEMPPTR+3].INT:=-MEM[J+3].INT; MEM[R].HH.RH:=U;END ELSE BEGIN MEM[R+1].INT:=D;MEM[R].HH.RH:=P; MEM[U].HH.RH:=R;IF J=0 THEN BEGIN B:=HPACK(U,0,1);MEM[B+4].INT:=S; END ELSE MEM[B+5].HH.RH:=U;END{:1479};END;APPENDTOVLIST(B);END;{:1477} PROCEDURE AFTERMATH;VAR L:BOOLEAN;DANGER:BOOLEAN;M:INTEGER;P:HALFWORD; A:HALFWORD;{1198:}B:HALFWORD;W:SCALED;Z:SCALED;E:SCALED;Q:SCALED; D:SCALED;S:SCALED;G1,G2:SMALLNUMBER;R:HALFWORD;T:HALFWORD;{:1198}{1474:} J:HALFWORD;{:1474}BEGIN DANGER:=FALSE;{1475:} IF CURLIST.MODEFIELD=203 THEN J:=CURLIST.ETEXAUXFIELD{:1475};{1195:} IF(FONTPARAMS[EQTB[11842].HH.RH]<22)OR(FONTPARAMS[EQTB[11858].HH.RH]<22) OR(FONTPARAMS[EQTB[11874].HH.RH]<22)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1167);END;BEGIN HELPPTR:=3;HELPLINE[2]:=1168;HELPLINE[1]:=1169; HELPLINE[0]:=1170;END;ERROR;FLUSHMATH;DANGER:=TRUE; END ELSE IF(FONTPARAMS[EQTB[11843].HH.RH]<13)OR(FONTPARAMS[EQTB[11859]. HH.RH]<13)OR(FONTPARAMS[EQTB[11875].HH.RH]<13)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(1171);END;BEGIN HELPPTR:=3;HELPLINE[2]:=1172; HELPLINE[1]:=1173;HELPLINE[0]:=1174;END;ERROR;FLUSHMATH;DANGER:=TRUE; END{:1195};M:=CURLIST.MODEFIELD;L:=FALSE;P:=FINMLIST(0); IF CURLIST.MODEFIELD=-M THEN BEGIN{1197:}BEGIN GETXTOKEN; IF CURCMD<>3 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1175);END; BEGIN HELPPTR:=2;HELPLINE[1]:=1176;HELPLINE[0]:=1177;END;BACKERROR;END; END{:1197};CURMLIST:=P;CURSTYLE:=2;MLISTPENALTIES:=FALSE;MLISTTOHLIST; A:=HPACK(MEM[327141].HH.RH,0,1);MEM[A].HH.B1:=2;UNSAVE; SAVEPTR:=SAVEPTR-1;IF SAVESTACK[SAVEPTR+0].INT=1 THEN L:=TRUE; DANGER:=FALSE;{1475:} IF CURLIST.MODEFIELD=203 THEN J:=CURLIST.ETEXAUXFIELD{:1475};{1195:} IF(FONTPARAMS[EQTB[11842].HH.RH]<22)OR(FONTPARAMS[EQTB[11858].HH.RH]<22) OR(FONTPARAMS[EQTB[11874].HH.RH]<22)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1167);END;BEGIN HELPPTR:=3;HELPLINE[2]:=1168;HELPLINE[1]:=1169; HELPLINE[0]:=1170;END;ERROR;FLUSHMATH;DANGER:=TRUE; END ELSE IF(FONTPARAMS[EQTB[11843].HH.RH]<13)OR(FONTPARAMS[EQTB[11859]. HH.RH]<13)OR(FONTPARAMS[EQTB[11875].HH.RH]<13)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(1171);END;BEGIN HELPPTR:=3;HELPLINE[2]:=1172; HELPLINE[1]:=1173;HELPLINE[0]:=1174;END;ERROR;FLUSHMATH;DANGER:=TRUE; END{:1195};M:=CURLIST.MODEFIELD;P:=FINMLIST(0);END ELSE A:=0; IF M<0 THEN{1196:} BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWMATH(EQTB[13746].INT,0); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;CURMLIST:=P; CURSTYLE:=2;MLISTPENALTIES:=(CURLIST.MODEFIELD>0);MLISTTOHLIST; MEM[CURLIST.TAILFIELD].HH.RH:=MEM[327141].HH.RH; WHILE MEM[CURLIST.TAILFIELD].HH.RH<>0 DO CURLIST.TAILFIELD:=MEM[CURLIST. TAILFIELD].HH.RH; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWMATH(EQTB[13746].INT,1); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; CURLIST.AUXFIELD.HH.LH:=1000;UNSAVE;END{:1196} ELSE BEGIN IF A=0 THEN{1197:}BEGIN GETXTOKEN; IF CURCMD<>3 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1175);END; BEGIN HELPPTR:=2;HELPLINE[1]:=1176;HELPLINE[0]:=1177;END;BACKERROR;END; END{:1197};{1199:}CURMLIST:=P;CURSTYLE:=0;MLISTPENALTIES:=FALSE; MLISTTOHLIST;P:=MEM[327141].HH.RH;ADJUSTTAIL:=327139;B:=HPACK(P,0,1); P:=MEM[B+5].HH.RH;T:=ADJUSTTAIL;ADJUSTTAIL:=0;W:=MEM[B+1].INT; Z:=EQTB[13759].INT;S:=EQTB[13760].INT;IF EQTB[13228].INT<0 THEN S:=-S-Z; IF(A=0)OR DANGER THEN BEGIN E:=0;Q:=0;END ELSE BEGIN E:=MEM[A+1].INT; Q:=E+FONTINFO[6+PARAMBASE[EQTB[11842].HH.RH]].INT;END; IF W+Q>Z THEN{1201:} BEGIN IF(E<>0)AND((W-TOTALSHRINK[0]+Q<=Z)OR(TOTALSHRINK[1]<>0)OR( TOTALSHRINK[2]<>0)OR(TOTALSHRINK[3]<>0))THEN BEGIN FREENODE(B,7); B:=HPACK(P,Z-Q,0);END ELSE BEGIN E:=0;IF W>Z THEN BEGIN FREENODE(B,7); B:=HPACK(P,Z,0);END;END;W:=MEM[B+1].INT;END{:1201};{1202:} MEM[B].HH.B1:=2;D:=HALF(Z-W);IF(E>0)AND(D<2*E)THEN BEGIN D:=HALF(Z-W-E); IF P<>0 THEN IF NOT(P>=HIMEMMIN)THEN IF MEM[P].HH.B0=10 THEN D:=0; END{:1202};{1203:} BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[13179].INT); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; IF(D+S<=EQTB[13758].INT)OR L THEN BEGIN G1:=3;G2:=4; END ELSE BEGIN G1:=5;G2:=6;END; IF L AND(E=0)THEN BEGIN APPDISPLAY(J,A,0); BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(10000); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; END ELSE BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(G1); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END{:1203};{1204:} IF E<>0 THEN BEGIN R:=NEWKERN(Z-W-E-D);IF L THEN BEGIN MEM[A].HH.RH:=R; MEM[R].HH.RH:=B;B:=A;D:=0;END ELSE BEGIN MEM[B].HH.RH:=R; MEM[R].HH.RH:=A;END;B:=HPACK(B,0,1);END;APPDISPLAY(J,B,D){:1204};{1205:} IF(A<>0)AND(E=0)AND NOT L THEN BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH :=NEWPENALTY(10000);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; APPDISPLAY(J,A,Z-MEM[A+1].INT);G2:=0;END; IF T<>327139 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MEM[327139].HH.RH; CURLIST.TAILFIELD:=T;END; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPENALTY(EQTB[13180].INT); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; IF G2>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWPARAMGLUE(G2); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END{:1205};{1476:} FLUSHNODELIST(J){:1476};RESUMEAFTERDISPLAY{:1199};END;END;{:1194}{1200:} PROCEDURE RESUMEAFTERDISPLAY;BEGIN IF CURGROUP<>15 THEN CONFUSION(1178); UNSAVE;CURLIST.PGFIELD:=CURLIST.PGFIELD+3;PUSHNEST; CURLIST.MODEFIELD:=102;CURLIST.AUXFIELD.HH.LH:=1000; IF EQTB[13218].INT<=0 THEN CURLANG:=0 ELSE IF EQTB[13218].INT>255 THEN CURLANG:=0 ELSE CURLANG:=EQTB[13218].INT; CURLIST.AUXFIELD.HH.RH:=CURLANG; CURLIST.PGFIELD:=(NORMMIN(EQTB[13219].INT)*64+NORMMIN(EQTB[13220].INT)) *65536+CURLANG;{443:}BEGIN GETXTOKEN;IF CURCMD<>10 THEN BACKINPUT; END{:443};IF NESTPTR=1 THEN BUILDPAGE;END;{:1200}{1211:}{1215:} PROCEDURE GETRTOKEN;LABEL 20;BEGIN 20:REPEAT GETTOKEN; UNTIL CURTOK<>2592; IF(CURCS=0)OR(CURCS>10514)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1193);END;BEGIN HELPPTR:=5;HELPLINE[4]:=1194;HELPLINE[3]:=1195; HELPLINE[2]:=1196;HELPLINE[1]:=1197;HELPLINE[0]:=1198;END; IF CURCS=0 THEN BACKINPUT;CURTOK:=14609;INSERROR;GOTO 20;END;END;{:1215} {1229:}PROCEDURE TRAPZEROGLUE; BEGIN IF(MEM[CURVAL+1].INT=0)AND(MEM[CURVAL+2].INT=0)AND(MEM[CURVAL+3]. INT=0)THEN BEGIN MEM[0].HH.RH:=MEM[0].HH.RH+1;DELETEGLUEREF(CURVAL); CURVAL:=0;END;END;{:1229}{1236:} PROCEDURE DOREGISTERCOMMAND(A:SMALLNUMBER);LABEL 40,10; VAR L,Q,R,S:HALFWORD;P:0..3;E:BOOLEAN;W:INTEGER;BEGIN Q:=CURCMD; E:=FALSE;{1237:}BEGIN IF Q<>89 THEN BEGIN GETXTOKEN; IF(CURCMD>=73)AND(CURCMD<=76)THEN BEGIN L:=CURCHR;P:=CURCMD-73;GOTO 40; END;IF CURCMD<>89 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(694);END; PRINTCMDCHR(CURCMD,CURCHR);PRINT(695);PRINTCMDCHR(Q,0);BEGIN HELPPTR:=1; HELPLINE[0]:=1219;END;ERROR;GOTO 10;END;END; IF(CURCHR<0)OR(CURCHR>19)THEN BEGIN L:=CURCHR;P:=(MEM[L].HH.B0 DIV 16); E:=TRUE;END ELSE BEGIN P:=CURCHR-0;SCANREGISTERNUM; IF CURVAL>255 THEN BEGIN FINDSAELEMENT(P,CURVAL,TRUE);L:=CURPTR;E:=TRUE; END ELSE CASE P OF 0:L:=CURVAL+13233;1:L:=CURVAL+13766; 2:L:=CURVAL+10800;3:L:=CURVAL+11056;END;END;END; 40:IF P<2 THEN IF E THEN W:=MEM[L+2].INT ELSE W:=EQTB[L].INT ELSE IF E THEN S:=MEM[L+1].HH.RH ELSE S:=EQTB[L].HH.RH{:1237}; IF Q=89 THEN SCANOPTIONALEQUALS ELSE IF SCANKEYWORD(1215)THEN; ARITHERROR:=FALSE;IF Q<91 THEN{1238:} IF P<2 THEN BEGIN IF P=0 THEN SCANINT ELSE SCANDIMEN(FALSE,FALSE,FALSE); IF Q=90 THEN CURVAL:=CURVAL+W;END ELSE BEGIN SCANGLUE(P); IF Q=90 THEN{1239:}BEGIN Q:=NEWSPEC(CURVAL);R:=S;DELETEGLUEREF(CURVAL); MEM[Q+1].INT:=MEM[Q+1].INT+MEM[R+1].INT; IF MEM[Q+2].INT=0 THEN MEM[Q].HH.B0:=0; IF MEM[Q].HH.B0=MEM[R].HH.B0 THEN MEM[Q+2].INT:=MEM[Q+2].INT+MEM[R+2]. INT ELSE IF(MEM[Q].HH.B00)THEN BEGIN MEM [Q+2].INT:=MEM[R+2].INT;MEM[Q].HH.B0:=MEM[R].HH.B0;END; IF MEM[Q+3].INT=0 THEN MEM[Q].HH.B1:=0; IF MEM[Q].HH.B1=MEM[R].HH.B1 THEN MEM[Q+3].INT:=MEM[Q+3].INT+MEM[R+3]. INT ELSE IF(MEM[Q].HH.B10)THEN BEGIN MEM [Q+3].INT:=MEM[R+3].INT;MEM[Q].HH.B1:=MEM[R].HH.B1;END;CURVAL:=Q; END{:1239};END{:1238}ELSE{1240:}BEGIN SCANINT; IF P<2 THEN IF Q=91 THEN IF P=0 THEN CURVAL:=MULTANDADD(W,CURVAL,0, 2147483647)ELSE CURVAL:=MULTANDADD(W,CURVAL,0,1073741823)ELSE CURVAL:= XOVERN(W,CURVAL)ELSE BEGIN R:=NEWSPEC(S); IF Q=91 THEN BEGIN MEM[R+1].INT:=MULTANDADD(MEM[S+1].INT,CURVAL,0, 1073741823);MEM[R+2].INT:=MULTANDADD(MEM[S+2].INT,CURVAL,0,1073741823); MEM[R+3].INT:=MULTANDADD(MEM[S+3].INT,CURVAL,0,1073741823); END ELSE BEGIN MEM[R+1].INT:=XOVERN(MEM[S+1].INT,CURVAL); MEM[R+2].INT:=XOVERN(MEM[S+2].INT,CURVAL); MEM[R+3].INT:=XOVERN(MEM[S+3].INT,CURVAL);END;CURVAL:=R;END;END{:1240}; IF ARITHERROR THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1216);END; BEGIN HELPPTR:=2;HELPLINE[1]:=1217;HELPLINE[0]:=1218;END;ERROR;GOTO 10; END; IF P<2 THEN IF E THEN IF(A>=4)THEN GSAWDEF(L,CURVAL)ELSE SAWDEF(L,CURVAL )ELSE IF(A>=4)THEN GEQWORDDEFINE(L,CURVAL)ELSE EQWORDDEFINE(L,CURVAL) ELSE BEGIN TRAPZEROGLUE; IF E THEN IF(A>=4)THEN GSADEF(L,CURVAL)ELSE SADEF(L,CURVAL)ELSE IF(A>=4) THEN GEQDEFINE(L,117,CURVAL)ELSE EQDEFINE(L,117,CURVAL);END;10:END; {:1236}{1243:}PROCEDURE ALTERAUX;VAR C:HALFWORD; BEGIN IF CURCHR<>ABS(CURLIST.MODEFIELD)THEN REPORTILLEGALCASE ELSE BEGIN C:=CURCHR;SCANOPTIONALEQUALS; IF C=1 THEN BEGIN SCANDIMEN(FALSE,FALSE,FALSE); CURLIST.AUXFIELD.INT:=CURVAL;END ELSE BEGIN SCANINT; IF(CURVAL<=0)OR(CURVAL>32767)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1222);END;BEGIN HELPPTR:=1;HELPLINE[0]:=1223;END;INTERROR(CURVAL); END ELSE CURLIST.AUXFIELD.HH.LH:=CURVAL;END;END;END;{:1243}{1244:} PROCEDURE ALTERPREVGRAF;VAR P:0..NESTSIZE;BEGIN NEST[NESTPTR]:=CURLIST; P:=NESTPTR;WHILE ABS(NEST[P].MODEFIELD)<>1 DO P:=P-1;SCANOPTIONALEQUALS; SCANINT; IF CURVAL<0 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(964);END; PRINTESC(536);BEGIN HELPPTR:=1;HELPLINE[0]:=1224;END;INTERROR(CURVAL); END ELSE BEGIN NEST[P].PGFIELD:=CURVAL;CURLIST:=NEST[NESTPTR];END;END; {:1244}{1245:}PROCEDURE ALTERPAGESOFAR;VAR C:0..7;BEGIN C:=CURCHR; SCANOPTIONALEQUALS;SCANDIMEN(FALSE,FALSE,FALSE);PAGESOFAR[C]:=CURVAL; END;{:1245}{1246:}PROCEDURE ALTERINTEGER;VAR C:SMALLNUMBER; BEGIN C:=CURCHR;SCANOPTIONALEQUALS;SCANINT; IF C=0 THEN DEADCYCLES:=CURVAL{1430:} ELSE IF C=2 THEN BEGIN IF(CURVAL<0)OR(CURVAL>3)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(1360);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1361; HELPLINE[0]:=1362;END;INTERROR(CURVAL);END ELSE BEGIN CURCHR:=CURVAL; NEWINTERACTION;END;END{:1430}ELSE INSERTPENALTIES:=CURVAL;END;{:1246} {1247:}PROCEDURE ALTERBOXDIMEN;VAR C:SMALLNUMBER;B:HALFWORD; BEGIN C:=CURCHR;SCANREGISTERNUM; IF CURVAL<256 THEN B:=EQTB[11583+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR=0 THEN B:=0 ELSE B:=MEM[CURPTR+1].HH.RH;END; SCANOPTIONALEQUALS;SCANDIMEN(FALSE,FALSE,FALSE); IF B<>0 THEN MEM[B+C].INT:=CURVAL;END;{:1247}{1257:} PROCEDURE NEWFONT(A:SMALLNUMBER);LABEL 50;VAR U:HALFWORD;S:SCALED; F:INTERNALFONTNUMBER;T:STRNUMBER;OLDSETTING:0..22; FLUSHABLESTRING:STRNUMBER;BEGIN IF JOBNAME=0 THEN OPENLOGFILE;GETRTOKEN; U:=CURCS; IF U>=514 THEN T:=HASH[U].RH ELSE IF U>=257 THEN IF U=513 THEN T:=1228 ELSE T:=U-257 ELSE BEGIN OLDSETTING:=SELECTOR;SELECTOR:=21;PRINT(1228); PRINT(U-1);SELECTOR:=OLDSETTING; BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR);END; T:=MAKESTRING;END;IF(A>=4)THEN GEQDEFINE(U,87,0)ELSE EQDEFINE(U,87,0); SCANOPTIONALEQUALS;SCANFILENAME;{1258:}NAMEINPROGRESS:=TRUE; IF SCANKEYWORD(1229)THEN{1259:}BEGIN SCANDIMEN(FALSE,FALSE,FALSE); S:=CURVAL;IF(S<=0)OR(S>=134217728)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1231);END;PRINTSCALED(S);PRINT(1232);BEGIN HELPPTR:=2; HELPLINE[1]:=1233;HELPLINE[0]:=1234;END;ERROR;S:=10*65536;END;END{:1259} ELSE IF SCANKEYWORD(1230)THEN BEGIN SCANINT;S:=-CURVAL; IF(CURVAL<=0)OR(CURVAL>32768)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(560);END;BEGIN HELPPTR:=1;HELPLINE[0]:=561;END;INTERROR(CURVAL); S:=-1000;END;END ELSE S:=-1000;NAMEINPROGRESS:=FALSE{:1258};{1260:} FLUSHABLESTRING:=STRPTR-1; FOR F:=1 TO FONTPTR DO IF STREQSTR(FONTNAME[F],CURNAME)AND STREQSTR( FONTAREA[F],CURAREA)THEN BEGIN IF CURNAME=FLUSHABLESTRING THEN BEGIN BEGIN STRPTR:=STRPTR-1;POOLPTR:=STRSTART[STRPTR];END; CURNAME:=FONTNAME[F];END;IF S>0 THEN BEGIN IF S=FONTSIZE[F]THEN GOTO 50; END ELSE IF FONTSIZE[F]=XNOVERD(FONTDSIZE[F],-S,1000)THEN GOTO 50; END{:1260};F:=READFONTINFO(U,CURNAME,CURAREA,S);50:EQTB[U].HH.RH:=F; EQTB[10524+F]:=EQTB[U];HASH[10524+F].RH:=T;END;{:1257}{1265:} PROCEDURE NEWINTERACTION;BEGIN PRINTLN;INTERACTION:=CURCHR;{75:} IF INTERACTION=0 THEN SELECTOR:=16 ELSE SELECTOR:=17{:75}; IF LOGOPENED THEN SELECTOR:=SELECTOR+2;END;{:1265} PROCEDURE PREFIXEDCOMMAND;LABEL 30,10;VAR A:SMALLNUMBER; F:INTERNALFONTNUMBER;J:HALFWORD;K:FONTINDEX;P,Q:HALFWORD;N:INTEGER; E:BOOLEAN;BEGIN A:=0; WHILE CURCMD=93 DO BEGIN IF NOT ODD(A DIV CURCHR)THEN A:=A+CURCHR;{404:} REPEAT GETXTOKEN;UNTIL(CURCMD<>10)AND(CURCMD<>0){:404}; IF CURCMD<=70 THEN{1212:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1188);END; PRINTCMDCHR(CURCMD,CURCHR);PRINTCHAR(39);BEGIN HELPPTR:=1; HELPLINE[0]:=1189;END;BACKERROR;GOTO 10;END{:1212}; IF EQTB[13204].INT>2 THEN IF(ETEXMODE=1)THEN SHOWCURCMDCHR;END;{1213:} IF A>=8 THEN BEGIN J:=3585;A:=A-8;END ELSE J:=0; IF(CURCMD<>97)AND((A MOD 4<>0)OR(J<>0))THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(694);END;PRINTESC(1180);PRINT(1190);PRINTESC(1181);PRINT(1191); PRINTCMDCHR(CURCMD,CURCHR);PRINTCHAR(39);BEGIN HELPPTR:=1; HELPLINE[0]:=1192;END;ERROR;END{:1213};{1214:} IF EQTB[13211].INT<>0 THEN IF EQTB[13211].INT<0 THEN BEGIN IF(A>=4)THEN A:=A-4;END ELSE BEGIN IF NOT(A>=4)THEN A:=A+4;END{:1214}; CASE CURCMD OF{1217:} 87:IF(A>=4)THEN GEQDEFINE(11839,120,CURCHR)ELSE EQDEFINE(11839,120, CURCHR);{:1217}{1218:} 97:BEGIN IF ODD(CURCHR)AND NOT(A>=4)AND(EQTB[13211].INT>=0)THEN A:=A+4; E:=(CURCHR>=2);GETRTOKEN;P:=CURCS;Q:=SCANTOKS(TRUE,E); IF J<>0 THEN BEGIN Q:=GETAVAIL;MEM[Q].HH.LH:=J; MEM[Q].HH.RH:=MEM[DEFREF].HH.RH;MEM[DEFREF].HH.RH:=Q;END; IF(A>=4)THEN GEQDEFINE(P,111+(A MOD 4),DEFREF)ELSE EQDEFINE(P,111+(A MOD 4),DEFREF);END;{:1218}{1221:}94:BEGIN N:=CURCHR;GETRTOKEN;P:=CURCS; IF N=0 THEN BEGIN REPEAT GETTOKEN;UNTIL CURCMD<>10; IF CURTOK=3133 THEN BEGIN GETTOKEN;IF CURCMD=10 THEN GETTOKEN;END; END ELSE BEGIN GETTOKEN;Q:=CURTOK;GETTOKEN;BACKINPUT;CURTOK:=Q; BACKINPUT;END; IF CURCMD>=111 THEN MEM[CURCHR].HH.LH:=MEM[CURCHR].HH.LH+1; IF(A>=4)THEN GEQDEFINE(P,CURCMD,CURCHR)ELSE EQDEFINE(P,CURCMD,CURCHR); END;{:1221}{1224:}95:BEGIN N:=CURCHR;GETRTOKEN;P:=CURCS; IF(A>=4)THEN GEQDEFINE(P,0,256)ELSE EQDEFINE(P,0,256); SCANOPTIONALEQUALS;CASE N OF 0:BEGIN SCANCHARNUM; IF(A>=4)THEN GEQDEFINE(P,68,CURVAL)ELSE EQDEFINE(P,68,CURVAL);END; 1:BEGIN SCANFIFTEENBITINT; IF(A>=4)THEN GEQDEFINE(P,69,CURVAL)ELSE EQDEFINE(P,69,CURVAL);END; OTHERWISE BEGIN SCANREGISTERNUM;IF CURVAL>255 THEN BEGIN J:=N-2; IF J>3 THEN J:=5;FINDSAELEMENT(J,CURVAL,TRUE); MEM[CURPTR+1].HH.LH:=MEM[CURPTR+1].HH.LH+1;IF J=5 THEN J:=71 ELSE J:=89; IF(A>=4)THEN GEQDEFINE(P,J,CURPTR)ELSE EQDEFINE(P,J,CURPTR); END ELSE CASE N OF 2:IF(A>=4)THEN GEQDEFINE(P,73,13233+CURVAL)ELSE EQDEFINE(P,73,13233+CURVAL); 3:IF(A>=4)THEN GEQDEFINE(P,74,13766+CURVAL)ELSE EQDEFINE(P,74,13766+ CURVAL); 4:IF(A>=4)THEN GEQDEFINE(P,75,10800+CURVAL)ELSE EQDEFINE(P,75,10800+ CURVAL); 5:IF(A>=4)THEN GEQDEFINE(P,76,11056+CURVAL)ELSE EQDEFINE(P,76,11056+ CURVAL); 6:IF(A>=4)THEN GEQDEFINE(P,72,11327+CURVAL)ELSE EQDEFINE(P,72,11327+ CURVAL);END;END END;END;{:1224}{1225:}96:BEGIN J:=CURCHR;SCANINT; N:=CURVAL;IF NOT SCANKEYWORD(850)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1081);END;BEGIN HELPPTR:=2;HELPLINE[1]:=1209;HELPLINE[0]:=1210; END;ERROR;END;GETRTOKEN;P:=CURCS;READTOKS(N,P,J); IF(A>=4)THEN GEQDEFINE(P,111,CURVAL)ELSE EQDEFINE(P,111,CURVAL);END; {:1225}{1226:}71,72:BEGIN Q:=CURCS;E:=FALSE; IF CURCMD=71 THEN IF CURCHR=0 THEN BEGIN SCANREGISTERNUM; IF CURVAL>255 THEN BEGIN FINDSAELEMENT(5,CURVAL,TRUE);CURCHR:=CURPTR; E:=TRUE;END ELSE CURCHR:=11327+CURVAL;END ELSE E:=TRUE;P:=CURCHR; SCANOPTIONALEQUALS;{404:}REPEAT GETXTOKEN; UNTIL(CURCMD<>10)AND(CURCMD<>0){:404};IF CURCMD<>1 THEN{1227:} IF(CURCMD=71)OR(CURCMD=72)THEN BEGIN IF CURCMD=71 THEN IF CURCHR=0 THEN BEGIN SCANREGISTERNUM; IF CURVAL<256 THEN Q:=EQTB[11327+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT( 5,CURVAL,FALSE);IF CURPTR=0 THEN Q:=0 ELSE Q:=MEM[CURPTR+1].HH.RH;END; END ELSE Q:=MEM[CURPTR+1].HH.RH ELSE Q:=EQTB[CURCHR].HH.RH; IF Q=0 THEN IF E THEN IF(A>=4)THEN GSADEF(P,0)ELSE SADEF(P,0)ELSE IF(A>= 4)THEN GEQDEFINE(P,101,0)ELSE EQDEFINE(P,101,0)ELSE BEGIN MEM[Q].HH.LH:= MEM[Q].HH.LH+1; IF E THEN IF(A>=4)THEN GSADEF(P,Q)ELSE SADEF(P,Q)ELSE IF(A>=4)THEN GEQDEFINE(P,111,Q)ELSE EQDEFINE(P,111,Q);END;GOTO 30;END{:1227}; BACKINPUT;CURCS:=Q;Q:=SCANTOKS(FALSE,FALSE); IF MEM[DEFREF].HH.RH=0 THEN BEGIN IF E THEN IF(A>=4)THEN GSADEF(P,0)ELSE SADEF(P,0)ELSE IF(A>=4)THEN GEQDEFINE(P,101,0)ELSE EQDEFINE(P,101,0); BEGIN MEM[DEFREF].HH.RH:=AVAIL;AVAIL:=DEFREF;DYNUSED:=DYNUSED-1;END; END ELSE BEGIN IF(P=11317)AND NOT E THEN BEGIN MEM[Q].HH.RH:=GETAVAIL; Q:=MEM[Q].HH.RH;MEM[Q].HH.LH:=637;Q:=GETAVAIL;MEM[Q].HH.LH:=379; MEM[Q].HH.RH:=MEM[DEFREF].HH.RH;MEM[DEFREF].HH.RH:=Q;END; IF E THEN IF(A>=4)THEN GSADEF(P,DEFREF)ELSE SADEF(P,DEFREF)ELSE IF(A>=4) THEN GEQDEFINE(P,111,DEFREF)ELSE EQDEFINE(P,111,DEFREF);END;END;{:1226} {1228:}73:BEGIN P:=CURCHR;SCANOPTIONALEQUALS;SCANINT; IF(A>=4)THEN GEQWORDDEFINE(P,CURVAL)ELSE EQWORDDEFINE(P,CURVAL);END; 74:BEGIN P:=CURCHR;SCANOPTIONALEQUALS;SCANDIMEN(FALSE,FALSE,FALSE); IF(A>=4)THEN GEQWORDDEFINE(P,CURVAL)ELSE EQWORDDEFINE(P,CURVAL);END; 75,76:BEGIN P:=CURCHR;N:=CURCMD;SCANOPTIONALEQUALS; IF N=76 THEN SCANGLUE(3)ELSE SCANGLUE(2);TRAPZEROGLUE; IF(A>=4)THEN GEQDEFINE(P,117,CURVAL)ELSE EQDEFINE(P,117,CURVAL);END; {:1228}{1232:}85:BEGIN{1233:} IF CURCHR=11888 THEN N:=15 ELSE IF CURCHR=12912 THEN N:=32768 ELSE IF CURCHR=12656 THEN N:=32767 ELSE IF CURCHR=13489 THEN N:=16777215 ELSE N :=255{:1233};P:=CURCHR;SCANCHARNUM;P:=P+CURVAL;SCANOPTIONALEQUALS; SCANINT; IF((CURVAL<0)AND(P<13489))OR(CURVAL>N)THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1211);END;PRINTINT(CURVAL); IF P<13489 THEN PRINT(1212)ELSE PRINT(1213);PRINTINT(N); BEGIN HELPPTR:=1;HELPLINE[0]:=1214;END;ERROR;CURVAL:=0;END; IF P<12912 THEN IF(A>=4)THEN GEQDEFINE(P,120,CURVAL)ELSE EQDEFINE(P,120, CURVAL)ELSE IF P<13489 THEN IF(A>=4)THEN GEQDEFINE(P,120,CURVAL)ELSE EQDEFINE(P,120,CURVAL)ELSE IF(A>=4)THEN GEQWORDDEFINE(P,CURVAL)ELSE EQWORDDEFINE(P,CURVAL);END;{:1232}{1234:}86:BEGIN P:=CURCHR; SCANFOURBITINT;P:=P+CURVAL;SCANOPTIONALEQUALS;SCANFONTIDENT; IF(A>=4)THEN GEQDEFINE(P,120,CURVAL)ELSE EQDEFINE(P,120,CURVAL);END; {:1234}{1235:}89,90,91,92:DOREGISTERCOMMAND(A);{:1235}{1241:} 98:BEGIN SCANREGISTERNUM; IF(A>=4)THEN N:=1073774592+CURVAL ELSE N:=1073741824+CURVAL; SCANOPTIONALEQUALS; IF SETBOXALLOWED THEN SCANBOX(N)ELSE BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(689);END;PRINTESC(540);BEGIN HELPPTR:=2;HELPLINE[1]:=1220; HELPLINE[0]:=1221;END;ERROR;END;END;{:1241}{1242:}79:ALTERAUX; 80:ALTERPREVGRAF;81:ALTERPAGESOFAR;82:ALTERINTEGER;83:ALTERBOXDIMEN; {:1242}{1248:}84:BEGIN Q:=CURCHR;SCANOPTIONALEQUALS;SCANINT;N:=CURVAL; IF N<=0 THEN P:=0 ELSE IF Q>11312 THEN BEGIN N:=(CURVAL DIV 2)+1; P:=GETNODE(2*N+1);MEM[P].HH.LH:=N;N:=CURVAL;MEM[P+1].INT:=N; FOR J:=P+2 TO P+N+1 DO BEGIN SCANINT;MEM[J].INT:=CURVAL;END; IF NOT ODD(N)THEN MEM[P+N+2].INT:=0;END ELSE BEGIN P:=GETNODE(2*N+1); MEM[P].HH.LH:=N;FOR J:=1 TO N DO BEGIN SCANDIMEN(FALSE,FALSE,FALSE); MEM[P+2*J-1].INT:=CURVAL;SCANDIMEN(FALSE,FALSE,FALSE); MEM[P+2*J].INT:=CURVAL;END;END; IF(A>=4)THEN GEQDEFINE(Q,118,P)ELSE EQDEFINE(Q,118,P);END;{:1248}{1252:} 99:IF CURCHR=1 THEN BEGIN IF INITFLAG THEN BEGIN NEWPATTERNS;GOTO 30; END;BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1225);END;HELPPTR:=0;ERROR; REPEAT GETTOKEN;UNTIL CURCMD=2;GOTO 10;END ELSE BEGIN NEWHYPHEXCEPTIONS; GOTO 30;END;{:1252}{1253:}77:BEGIN FINDFONTDIMEN(TRUE);K:=CURVAL; SCANOPTIONALEQUALS;SCANDIMEN(FALSE,FALSE,FALSE);FONTINFO[K].INT:=CURVAL; END;78:BEGIN N:=CURCHR;SCANFONTIDENT;F:=CURVAL;SCANOPTIONALEQUALS; SCANINT;IF N=0 THEN HYPHENCHAR[F]:=CURVAL ELSE SKEWCHAR[F]:=CURVAL;END; {:1253}{1256:}88:NEWFONT(A);{:1256}{1264:}100:NEWINTERACTION;{:1264} OTHERWISE CONFUSION(1187)END;30:{1269:} IF AFTERTOKEN<>0 THEN BEGIN CURTOK:=AFTERTOKEN;BACKINPUT;AFTERTOKEN:=0; END{:1269};10:END;{:1211}{1270:}PROCEDURE DOASSIGNMENTS;LABEL 10; BEGIN WHILE TRUE DO BEGIN{404:}REPEAT GETXTOKEN; UNTIL(CURCMD<>10)AND(CURCMD<>0){:404};IF CURCMD<=70 THEN GOTO 10; SETBOXALLOWED:=FALSE;PREFIXEDCOMMAND;SETBOXALLOWED:=TRUE;END;10:END; {:1270}{1275:}PROCEDURE OPENORCLOSEIN;VAR C:0..1;N:0..15; BEGIN C:=CURCHR;SCANFOURBITINT;N:=CURVAL; IF READOPEN[N]<>2 THEN BEGIN ACLOSE(READFILE[N]);READOPEN[N]:=2;END; IF C<>0 THEN BEGIN SCANOPTIONALEQUALS;SCANFILENAME; IF CUREXT=339 THEN CUREXT:=798;PACKFILENAME(CURNAME,CURAREA,CUREXT); IF XOPENIN(READFILE[N])THEN READOPEN[N]:=1;END;END;{:1275}{1279:} PROCEDURE ISSUEMESSAGE;VAR OLDSETTING:0..22;C:0..1;S:STRNUMBER; BEGIN C:=CURCHR;MEM[327132].HH.RH:=SCANTOKS(FALSE,TRUE); OLDSETTING:=SELECTOR;SELECTOR:=21;TOKENSHOW(DEFREF); SELECTOR:=OLDSETTING;FLUSHLIST(DEFREF); BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR);END; S:=MAKESTRING;IF C=0 THEN{1280:} BEGIN IF TERMOFFSET+(STRSTART[S+1]-STRSTART[S])>MAXPRINTLINE-2 THEN PRINTLN ELSE IF(TERMOFFSET>0)OR(FILEOFFSET>0)THEN PRINTCHAR(32); SLOWPRINT(S);IF ODD(SELECTOR)THEN WRITELN(TERMOUT);END{:1280}ELSE{1283:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(339);END;SLOWPRINT(S); IF EQTB[11326].HH.RH<>0 THEN USEERRHELP:=TRUE ELSE IF LONGHELPSEEN THEN BEGIN HELPPTR:=1;HELPLINE[0]:=1241; END ELSE BEGIN IF INTERACTION<3 THEN LONGHELPSEEN:=TRUE; BEGIN HELPPTR:=4;HELPLINE[3]:=1242;HELPLINE[2]:=1243;HELPLINE[1]:=1244; HELPLINE[0]:=1245;END;END;ERROR;USEERRHELP:=FALSE;END{:1283}; BEGIN STRPTR:=STRPTR-1;POOLPTR:=STRSTART[STRPTR];END;END;{:1279}{1288:} PROCEDURE SHIFTCASE;VAR B:HALFWORD;P:HALFWORD;T:HALFWORD;C:EIGHTBITS; BEGIN B:=CURCHR;P:=SCANTOKS(FALSE,FALSE);P:=MEM[DEFREF].HH.RH; WHILE P<>0 DO BEGIN{1289:}T:=MEM[P].HH.LH; IF T<4352 THEN BEGIN C:=T MOD 256; IF EQTB[B+C].HH.RH<>0 THEN MEM[P].HH.LH:=T-C+EQTB[B+C].HH.RH;END{:1289}; P:=MEM[P].HH.RH;END;BEGINTOKENLIST(MEM[DEFREF].HH.RH,3); BEGIN MEM[DEFREF].HH.RH:=AVAIL;AVAIL:=DEFREF;DYNUSED:=DYNUSED-1;END;END; {:1288}{1293:}PROCEDURE SHOWWHATEVER;LABEL 50;VAR P:HALFWORD; T:SMALLNUMBER;M:0..4;L:INTEGER;N:INTEGER;BEGIN{1614:}COPYERR:=IGNOREIT; REWRITE(TEMPFILE);{:1614};CASE CURCHR OF 3:BEGIN BEGINDIAGNOSTIC; SHOWACTIVITIES;END;1:{1296:}BEGIN SCANREGISTERNUM; IF CURVAL<256 THEN P:=EQTB[11583+CURVAL].HH.RH ELSE BEGIN FINDSAELEMENT( 4,CURVAL,FALSE);IF CURPTR=0 THEN P:=0 ELSE P:=MEM[CURPTR+1].HH.RH;END; BEGINDIAGNOSTIC;PRINTNL(1262);PRINTINT(CURVAL);PRINTCHAR(61); IF P=0 THEN PRINT(413)ELSE SHOWBOX(P);END{:1296};0:{1294:} BEGIN GETTOKEN;IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(1257); IF CURCS<>0 THEN BEGIN SPRINTCS(CURCS);PRINTCHAR(61);END;PRINTMEANING; GOTO 50;END{:1294};{1411:}4:BEGIN BEGINDIAGNOSTIC;SHOWSAVEGROUPS;END; {:1411}{1425:}6:BEGIN BEGINDIAGNOSTIC;PRINTNL(339);PRINTLN; IF CONDPTR=0 THEN BEGIN PRINTNL(366);PRINT(1357); END ELSE BEGIN P:=CONDPTR;N:=0;REPEAT N:=N+1;P:=MEM[P].HH.RH;UNTIL P=0; P:=CONDPTR;T:=CURIF;L:=IFLINE;M:=IFLIMIT;REPEAT PRINTNL(1358); PRINTINT(N);PRINT(575);PRINTCMDCHR(105,T);IF M=2 THEN PRINTESC(785); IF L<>0 THEN BEGIN PRINT(1356);PRINTINT(L);END;N:=N-1;T:=MEM[P].HH.B1; L:=MEM[P+1].INT;M:=MEM[P].HH.B0;P:=MEM[P].HH.RH;UNTIL P=0;END;END; {:1425}OTHERWISE{1297:}BEGIN P:=THETOKS; IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(1257);TOKENSHOW(327141); FLUSHLIST(MEM[327141].HH.RH);GOTO 50;END{:1297}END;{1298:} ENDDIAGNOSTIC(TRUE);BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1263);END; IF SELECTOR=19 THEN IF EQTB[13197].INT<=0 THEN BEGIN SELECTOR:=17; PRINT(1264);SELECTOR:=19;END{:1298}; 50:IF INTERACTION<3 THEN BEGIN HELPPTR:=0;ERRORCOUNT:=ERRORCOUNT-1; END ELSE IF EQTB[13197].INT>0 THEN BEGIN BEGIN HELPPTR:=3; HELPLINE[2]:=1252;HELPLINE[1]:=1253;HELPLINE[0]:=1254;END; END ELSE BEGIN BEGIN HELPPTR:=5;HELPLINE[4]:=1252;HELPLINE[3]:=1253; HELPLINE[2]:=1254;HELPLINE[1]:=1255;HELPLINE[0]:=1256;END;END;ERROR;END; {:1293}{1302:}PROCEDURE STOREFMTFILE;LABEL 41,42,31,32; VAR J,K,L:INTEGER;P,Q:HALFWORD;X:INTEGER;W:FOURQUARTERS;BEGIN{1304:} IF SAVEPTR<>0 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL; PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1266);END; BEGIN HELPPTR:=1;HELPLINE[0]:=1267;END; BEGIN IF INTERACTION=3 THEN INTERACTION:=2;IF LOGOPENED THEN ERROR; {IF INTERACTION>0 THEN DEBUGHELP;}HISTORY:=3;JUMPOUT;END;END{:1304}; {1328:}SELECTOR:=21;PRINT(1280);PRINT(JOBNAME);PRINTCHAR(32); PRINTINT(EQTB[13191].INT MOD 100);PRINTCHAR(46); PRINTINT(EQTB[13190].INT);PRINTCHAR(46);PRINTINT(EQTB[13189].INT); PRINTCHAR(41);IF INTERACTION=0 THEN SELECTOR:=18 ELSE SELECTOR:=19; BEGIN IF POOLPTR+1>POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR);END; FORMATIDENT:=MAKESTRING;PACKJOBNAME(793); WHILE NOT WOPENOUT(FMTFILE)DO PROMPTFILENAME(1281,793);PRINTNL(1282); SLOWPRINT(WMAKENAMESTRING(FMTFILE));BEGIN STRPTR:=STRPTR-1; POOLPTR:=STRSTART[STRPTR];END;PRINTNL(339);SLOWPRINT(FORMATIDENT){:1328} ;{1307:}BEGIN FMTFILE^[FMTCOUNT].INT:=340764991; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;{1388:}BEGIN FMTFILE^[FMTCOUNT].INT:=ETEXMODE; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;FOR J:=0 TO-0 DO EQTB[13232+J].INT:=0;{:1388} {1491:}WHILE PSEUDOFILES<>0 DO PSEUDOCLOSE;{:1491} BEGIN FMTFILE^[FMTCOUNT].INT:=0;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=327144; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=14021; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=8501; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=503; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END{:1307};{1309:} BEGIN FMTFILE^[FMTCOUNT].INT:=POOLPTR;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=STRPTR; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END; FOR K:=0 TO STRPTR DO BEGIN FMTFILE^[FMTCOUNT].INT:=STRSTART[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;K:=0; WHILE K+40 DO BEGIN DYNUSED:=DYNUSED-1;P:=MEM[P].HH.RH;END; BEGIN FMTFILE^[FMTCOUNT].INT:=VARUSED;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=DYNUSED; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;PRINTLN;PRINTINT(X);PRINT(1269); PRINTINT(VARUSED);PRINTCHAR(38);PRINTINT(DYNUSED){:1311};{1313:}{1315:} K:=1;REPEAT J:=K; WHILE J<13167 DO BEGIN IF(EQTB[J].HH.RH=EQTB[J+1].HH.RH)AND(EQTB[J].HH. B0=EQTB[J+1].HH.B0)AND(EQTB[J].HH.B1=EQTB[J+1].HH.B1)THEN GOTO 41; J:=J+1;END;L:=13168;GOTO 31;41:J:=J+1;L:=J; WHILE J<13167 DO BEGIN IF(EQTB[J].HH.RH<>EQTB[J+1].HH.RH)OR(EQTB[J].HH. B0<>EQTB[J+1].HH.B0)OR(EQTB[J].HH.B1<>EQTB[J+1].HH.B1)THEN GOTO 31; J:=J+1;END;31:BEGIN FMTFILE^[FMTCOUNT].INT:=L-K; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END; WHILE KEQTB[J+1].INT THEN GOTO 32; J:=J+1;END;32:BEGIN FMTFILE^[FMTCOUNT].INT:=L-K; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END; WHILE K14021{:1316}; BEGIN FMTFILE^[FMTCOUNT].INT:=PARLOC;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=WRITELOC; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;{1318:}BEGIN FMTFILE^[FMTCOUNT].INT:=HASHUSED; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;CSCOUNT:=10513-HASHUSED; FOR P:=514 TO HASHUSED DO IF HASH[P].RH<>0 THEN BEGIN BEGIN FMTFILE^[ FMTCOUNT].INT:=P;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].HH:=HASH[P]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;CSCOUNT:=CSCOUNT+1;END; FOR P:=HASHUSED+1 TO 10780 DO BEGIN FMTFILE^[FMTCOUNT].HH:=HASH[P]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=CSCOUNT; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;PRINTLN;PRINTINT(CSCOUNT);PRINT(1270){:1318} {:1313};{1320:}BEGIN FMTFILE^[FMTCOUNT].INT:=FMEMPTR; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END; FOR K:=0 TO FMEMPTR-1 DO BEGIN FMTFILE^[FMTCOUNT]:=FONTINFO[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTPTR; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;FOR K:=0 TO FONTPTR DO{1322:} BEGIN BEGIN FMTFILE^[FMTCOUNT].QQQQ:=FONTCHECK[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTSIZE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTDSIZE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTPARAMS[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=HYPHENCHAR[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=SKEWCHAR[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTNAME[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTAREA[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTBC[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTEC[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=CHARBASE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=WIDTHBASE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=HEIGHTBASE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=DEPTHBASE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=ITALICBASE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=LIGKERNBASE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=KERNBASE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=EXTENBASE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=PARAMBASE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTGLUE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=BCHARLABEL[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTBCHAR[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FONTFALSEBCHAR[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;PRINTNL(1273);PRINTESC(HASH[10524+K].RH); PRINTCHAR(61);PRINTFILENAME(FONTNAME[K],FONTAREA[K],339); IF FONTSIZE[K]<>FONTDSIZE[K]THEN BEGIN PRINT(750); PRINTSCALED(FONTSIZE[K]);PRINT(400);END;END{:1322};PRINTLN; PRINTINT(FMEMPTR-7);PRINT(1271);PRINTINT(FONTPTR-0);PRINT(1272); IF FONTPTR<>1 THEN PRINTCHAR(115){:1320};{1324:} BEGIN FMTFILE^[FMTCOUNT].INT:=HYPHCOUNT;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END; FOR K:=0 TO 503 DO IF HYPHWORD[K]<>0 THEN BEGIN BEGIN FMTFILE^[FMTCOUNT] .INT:=K;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=HYPHWORD[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=HYPHLIST[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;END;PRINTLN;PRINTINT(HYPHCOUNT);PRINT(1274); IF HYPHCOUNT<>1 THEN PRINTCHAR(115);IF TRIENOTREADY THEN INITTRIE; BEGIN FMTFILE^[FMTCOUNT].INT:=TRIEMAX;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=HYPHSTART; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END; FOR K:=0 TO TRIEMAX DO BEGIN FMTFILE^[FMTCOUNT].HH:=TRIE[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=TRIEOPPTR; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END; FOR K:=1 TO TRIEOPPTR DO BEGIN BEGIN FMTFILE^[FMTCOUNT].INT:=HYFDISTANCE [K];BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=HYFNUM[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=HYFNEXT[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;END;PRINTNL(1275);PRINTINT(TRIEMAX);PRINT(1276); PRINTINT(TRIEOPPTR);PRINT(1277);IF TRIEOPPTR<>1 THEN PRINTCHAR(115); PRINT(1278);PRINTINT(TRIEOPSIZE); FOR K:=255 DOWNTO 0 DO IF TRIEUSED[K]>0 THEN BEGIN PRINTNL(807); PRINTINT(TRIEUSED[K]);PRINT(1279);PRINTINT(K); BEGIN FMTFILE^[FMTCOUNT].INT:=K;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=TRIEUSED[K]; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;END{:1324};{1326:} BEGIN FMTFILE^[FMTCOUNT].INT:=INTERACTION;BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=FORMATIDENT; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;BEGIN FMTFILE^[FMTCOUNT].INT:=69069; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;EQTB[13199].INT:=0{:1326};{1329:} WHILE FMTCOUNT>0 DO BEGIN FMTFILE^[FMTCOUNT].INT:=0; BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN PUT(FMTFILE,error:=continue); FMTCOUNT:=0;END END;END;WCLOSE(FMTFILE){:1329};END;{:1302}{1348:}{1349:} PROCEDURE NEWWHATSIT(S:SMALLNUMBER;W:SMALLNUMBER);VAR P:HALFWORD; BEGIN P:=GETNODE(W);MEM[P].HH.B0:=8;MEM[P].HH.B1:=S; MEM[CURLIST.TAILFIELD].HH.RH:=P;CURLIST.TAILFIELD:=P;END;{:1349}{1350:} PROCEDURE NEWWRITEWHATSIT(W:SMALLNUMBER);BEGIN NEWWHATSIT(CURCHR,W); IF W<>2 THEN SCANFOURBITINT ELSE BEGIN SCANINT; IF CURVAL<0 THEN CURVAL:=17 ELSE IF CURVAL>15 THEN CURVAL:=16;END; MEM[CURLIST.TAILFIELD+1].HH.LH:=CURVAL;END;{:1350}PROCEDURE DOEXTENSION; VAR K:INTEGER;P:HALFWORD;BEGIN CASE CURCHR OF 0:{1351:} BEGIN NEWWRITEWHATSIT(3);SCANOPTIONALEQUALS;SCANFILENAME; MEM[CURLIST.TAILFIELD+1].HH.RH:=CURNAME; MEM[CURLIST.TAILFIELD+2].HH.LH:=CURAREA; MEM[CURLIST.TAILFIELD+2].HH.RH:=CUREXT;END{:1351};1:{1352:} BEGIN K:=CURCS;NEWWRITEWHATSIT(2);CURCS:=K;P:=SCANTOKS(FALSE,FALSE); MEM[CURLIST.TAILFIELD+1].HH.RH:=DEFREF;END{:1352};2:{1353:} BEGIN NEWWRITEWHATSIT(2);MEM[CURLIST.TAILFIELD+1].HH.RH:=0;END{:1353}; 3:{1354:}BEGIN NEWWHATSIT(3,2);MEM[CURLIST.TAILFIELD+1].HH.LH:=0; P:=SCANTOKS(FALSE,TRUE);MEM[CURLIST.TAILFIELD+1].HH.RH:=DEFREF; END{:1354};4:{1375:}BEGIN GETXTOKEN; IF(CURCMD=59)AND(CURCHR<=2)THEN BEGIN P:=CURLIST.TAILFIELD;DOEXTENSION; OUTWHAT(CURLIST.TAILFIELD);FLUSHNODELIST(CURLIST.TAILFIELD); CURLIST.TAILFIELD:=P;MEM[P].HH.RH:=0;END ELSE BACKINPUT;END{:1375}; 5:{1377:} IF ABS(CURLIST.MODEFIELD)<>102 THEN REPORTILLEGALCASE ELSE BEGIN NEWWHATSIT(4,2);SCANINT; IF CURVAL<=0 THEN CURLIST.AUXFIELD.HH.RH:=0 ELSE IF CURVAL>255 THEN CURLIST.AUXFIELD.HH.RH:=0 ELSE CURLIST.AUXFIELD.HH.RH:=CURVAL; MEM[CURLIST.TAILFIELD+1].HH.RH:=CURLIST.AUXFIELD.HH.RH; MEM[CURLIST.TAILFIELD+1].HH.B0:=NORMMIN(EQTB[13219].INT); MEM[CURLIST.TAILFIELD+1].HH.B1:=NORMMIN(EQTB[13220].INT);END{:1377}; OTHERWISE CONFUSION(1301)END;END;{:1348}{1376:}PROCEDURE FIXLANGUAGE; VAR L:ASCIICODE; BEGIN IF EQTB[13218].INT<=0 THEN L:=0 ELSE IF EQTB[13218].INT>255 THEN L :=0 ELSE L:=EQTB[13218].INT; IF L<>CURLIST.AUXFIELD.HH.RH THEN BEGIN NEWWHATSIT(4,2); MEM[CURLIST.TAILFIELD+1].HH.RH:=L;CURLIST.AUXFIELD.HH.RH:=L; MEM[CURLIST.TAILFIELD+1].HH.B0:=NORMMIN(EQTB[13219].INT); MEM[CURLIST.TAILFIELD+1].HH.B1:=NORMMIN(EQTB[13220].INT);END;END;{:1376} {1068:}PROCEDURE HANDLERIGHTBRACE;VAR P,Q:HALFWORD;D:SCALED;F:INTEGER; BEGIN CASE CURGROUP OF 1:UNSAVE; 0:BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1052);END;BEGIN HELPPTR:=2; HELPLINE[1]:=1053;HELPLINE[0]:=1054;END;ERROR;END; 14,15,16:EXTRARIGHTBRACE;{1085:}2:PACKAGE(0);3:BEGIN ADJUSTTAIL:=327139; PACKAGE(0);END;4:BEGIN ENDGRAF;PACKAGE(0);END;5:BEGIN ENDGRAF; PACKAGE(4);END;{:1085}{1100:}11:BEGIN ENDGRAF;Q:=EQTB[10792].HH.RH; MEM[Q].HH.RH:=MEM[Q].HH.RH+1;D:=EQTB[13751].INT;F:=EQTB[13210].INT; UNSAVE;SAVEPTR:=SAVEPTR-1; P:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,0,1,1073741823);POPNEST; IF SAVESTACK[SAVEPTR+0].INT<255 THEN BEGIN BEGIN MEM[CURLIST.TAILFIELD]. HH.RH:=GETNODE(5);CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B0:=3; MEM[CURLIST.TAILFIELD].HH.B1:=SAVESTACK[SAVEPTR+0].INT; MEM[CURLIST.TAILFIELD+3].INT:=MEM[P+3].INT+MEM[P+2].INT; MEM[CURLIST.TAILFIELD+4].HH.LH:=MEM[P+5].HH.RH; MEM[CURLIST.TAILFIELD+4].HH.RH:=Q;MEM[CURLIST.TAILFIELD+2].INT:=D; MEM[CURLIST.TAILFIELD+1].INT:=F; END ELSE BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=GETNODE(2); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B0:=5;MEM[CURLIST.TAILFIELD].HH.B1:=0; MEM[CURLIST.TAILFIELD+1].INT:=MEM[P+5].HH.RH;DELETEGLUEREF(Q);END; FREENODE(P,7);IF NESTPTR=0 THEN BUILDPAGE;END;8:{1026:} BEGIN IF(CURINPUT.LOCFIELD<>0)OR((CURINPUT.INDEXFIELD<>6)AND(CURINPUT. INDEXFIELD<>3))THEN{1027:} BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263); COPYERR:=SAVEIT;REWRITE(TEMPFILE);PRINT(1019);END;BEGIN HELPPTR:=2; HELPLINE[1]:=1020;HELPLINE[0]:=1021;END;ERROR;REPEAT GETTOKEN; UNTIL CURINPUT.LOCFIELD=0;END{:1027};ENDTOKENLIST;ENDGRAF;UNSAVE; OUTPUTACTIVE:=FALSE;INSERTPENALTIES:=0;{1028:} IF EQTB[11838].HH.RH<>0 THEN BEGIN BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT;REWRITE(TEMPFILE); PRINT(1022);END;PRINTESC(412);PRINTINT(255);BEGIN HELPPTR:=3; HELPLINE[2]:=1023;HELPLINE[1]:=1024;HELPLINE[0]:=1025;END;BOXERROR(255); END{:1028}; IF CURLIST.TAILFIELD<>CURLIST.HEADFIELD THEN BEGIN MEM[PAGETAIL].HH.RH:= MEM[CURLIST.HEADFIELD].HH.RH;PAGETAIL:=CURLIST.TAILFIELD;END; IF MEM[327142].HH.RH<>0 THEN BEGIN IF MEM[327143].HH.RH=0 THEN NEST[0]. TAILFIELD:=PAGETAIL;MEM[PAGETAIL].HH.RH:=MEM[327143].HH.RH; MEM[327143].HH.RH:=MEM[327142].HH.RH;MEM[327142].HH.RH:=0; PAGETAIL:=327142;END;FLUSHNODELIST(DISCPTR[2]);DISCPTR[2]:=0;POPNEST; BUILDPAGE;END{:1026};{:1100}{1118:}10:BUILDDISCRETIONARY;{:1118}{1132:} 6:BEGIN BACKINPUT;CURTOK:=14610; BEGIN IF INTERACTION=3 THEN WAKEUPTERMINAL;PRINTNL(263);COPYERR:=SAVEIT; REWRITE(TEMPFILE);PRINT(634);END;PRINTESC(908);PRINT(635); BEGIN HELPPTR:=1;HELPLINE[0]:=1133;END;INSERROR;END;{:1132}{1133:} 7:BEGIN ENDGRAF;UNSAVE;ALIGNPEEK;END;{:1133}{1168:}12:BEGIN ENDGRAF; UNSAVE;SAVEPTR:=SAVEPTR-2; P:=VPACKAGE(MEM[CURLIST.HEADFIELD].HH.RH,SAVESTACK[SAVEPTR+1].INT, SAVESTACK[SAVEPTR+0].INT,1073741823);POPNEST; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B0:=29;MEM[CURLIST.TAILFIELD+1].HH.RH:=2; MEM[CURLIST.TAILFIELD+1].HH.LH:=P;END;{:1168}{1173:}13:BUILDCHOICES; {:1173}{1186:}9:BEGIN UNSAVE;SAVEPTR:=SAVEPTR-1; MEM[SAVESTACK[SAVEPTR+0].INT].HH.RH:=3;P:=FINMLIST(0); MEM[SAVESTACK[SAVEPTR+0].INT].HH.LH:=P; IF P<>0 THEN IF MEM[P].HH.RH=0 THEN IF MEM[P].HH.B0=16 THEN BEGIN IF MEM [P+3].HH.RH=0 THEN IF MEM[P+2].HH.RH=0 THEN BEGIN MEM[SAVESTACK[SAVEPTR +0].INT].HH:=MEM[P+1].HH;FREENODE(P,4);END; END ELSE IF MEM[P].HH.B0=28 THEN IF SAVESTACK[SAVEPTR+0].INT=CURLIST. TAILFIELD+1 THEN IF MEM[CURLIST.TAILFIELD].HH.B0=16 THEN{1187:} BEGIN Q:=CURLIST.HEADFIELD; WHILE MEM[Q].HH.RH<>CURLIST.TAILFIELD DO Q:=MEM[Q].HH.RH; MEM[Q].HH.RH:=P;FREENODE(CURLIST.TAILFIELD,4);CURLIST.TAILFIELD:=P; END{:1187};END;{:1186}OTHERWISE CONFUSION(1055)END;END;{:1068} PROCEDURE MAINCONTROL; LABEL 60,21,70,80,90,91,92,95,100,101,110,111,112,120,10;VAR T:INTEGER; BEGIN IF EQTB[11323].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11323].HH.RH,12); 60:GETXTOKEN;21:{1031:} IF INTERRUPT<>0 THEN IF OKTOINTERRUPT THEN BEGIN BACKINPUT; BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END;GOTO 60;END; {IF PANICKING THEN CHECKMEM(FALSE);} IF EQTB[13204].INT>0 THEN SHOWCURCMDCHR{:1031}; CASE ABS(CURLIST.MODEFIELD)+CURCMD OF 113,114,170:GOTO 70; 118:BEGIN SCANCHARNUM;CURCHR:=CURVAL;GOTO 70;END;167:BEGIN GETXTOKEN; IF(CURCMD=11)OR(CURCMD=12)OR(CURCMD=68)OR(CURCMD=16)THEN CANCELBOUNDARY :=TRUE;GOTO 21;END; 112:IF CURLIST.AUXFIELD.HH.LH=1000 THEN GOTO 120 ELSE APPSPACE; 166,267:GOTO 120;{1045:}1,102,203,11,213,268:;40,141,242:BEGIN{406:} REPEAT GETXTOKEN;UNTIL CURCMD<>10{:406};GOTO 21;END; 15:IF ITSALLOVER THEN GOTO 10;{1048:}23,123,224,71,172,273,{:1048} {1098:}39,{:1098}{1111:}45,{:1111}{1144:}49,150,{:1144} 7,108,209:REPORTILLEGALCASE;{1046:} 8,109,9,110,18,119,70,171,51,152,16,117,50,151,53,154,67,168,54,155,55, 156,57,158,56,157,31,132,52,153,29,130,47,148,212,216,217,230,227,236, 239{:1046}:INSERTDOLLARSIGN;{1056:} 37,137,238:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=SCANRULESPEC; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; IF ABS(CURLIST.MODEFIELD)=1 THEN CURLIST.AUXFIELD.INT:=-65536000 ELSE IF ABS(CURLIST.MODEFIELD)=102 THEN CURLIST.AUXFIELD.HH.LH:=1000;END;{:1056} {1057:}28,128,229,231:APPENDGLUE;30,131,232,233:APPENDKERN;{:1057} {1063:}2,103:NEWSAVELEVEL(1);62,163,264:NEWSAVELEVEL(14); 63,164,265:IF CURGROUP=14 THEN UNSAVE ELSE OFFSAVE;{:1063}{1067:} 3,104,205:HANDLERIGHTBRACE;{:1067}{1073:}22,124,225:BEGIN T:=CURCHR; SCANDIMEN(FALSE,FALSE,FALSE); IF T=0 THEN SCANBOX(CURVAL)ELSE SCANBOX(-CURVAL);END; 32,133,234:SCANBOX(1073807261+CURCHR);21,122,223:BEGINBOX(0);{:1073} {1090:}44:NEWGRAF(CURCHR>0); 12,13,17,69,4,24,36,46,48,27,34,65,66:BEGIN BACKINPUT;NEWGRAF(TRUE);END; {:1090}{1092:}145,246:INDENTINHMODE;{:1092}{1094:} 14:BEGIN NORMALPARAGRAPH;IF CURLIST.MODEFIELD>0 THEN BUILDPAGE;END; 115:BEGIN IF ALIGNSTATE<0 THEN OFFSAVE;ENDGRAF; IF CURLIST.MODEFIELD=1 THEN BUILDPAGE;END; 116,129,138,126,134:HEADFORVMODE;{:1094}{1097:} 38,139,240,140,241:BEGININSERTORADJUST;19,120,221:MAKEMARK;{:1097} {1102:}43,144,245:APPENDPENALTY;{:1102}{1104:}26,127,228:DELETELAST; {:1104}{1109:}25,125,226:UNPACKAGE;{:1109}{1112:} 146:APPENDITALICCORRECTION; 247:BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(0); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;{:1112}{1116:} 149,250:APPENDDISCRETIONARY;{:1116}{1122:}147:MAKEACCENT;{:1122}{1126:} 6,107,208,5,106,207:ALIGNERROR;35,136,237:NOALIGNERROR; 64,165,266:OMITERROR;{:1126}{1130:}33:INITALIGN;135:{1437:} IF CURCHR>0 THEN BEGIN IF ETEXENABLED((EQTB[13232].INT>0),CURCMD,CURCHR) THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWMATH(0,CURCHR); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END ELSE{:1437} INITALIGN; 235:IF PRIVILEGED THEN IF CURGROUP=15 THEN INITALIGN ELSE OFFSAVE; 10,111:DOENDV;{:1130}{1134:}68,169,270:CSERROR;{:1134}{1137:} 105:INITMATH;{:1137}{1140:} 251:IF PRIVILEGED THEN IF CURGROUP=15 THEN STARTEQNO ELSE OFFSAVE; {:1140}{1150:}204:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;BACKINPUT; SCANMATH(CURLIST.TAILFIELD+1);END;{:1150}{1154:} 214,215,271:SETMATHCHAR(EQTB[12912+CURCHR].HH.RH);219:BEGIN SCANCHARNUM; CURCHR:=CURVAL;SETMATHCHAR(EQTB[12912+CURCHR].HH.RH);END; 220:BEGIN SCANFIFTEENBITINT;SETMATHCHAR(CURVAL);END; 272:SETMATHCHAR(CURCHR);218:BEGIN SCANTWENTYSEVENBITINT; SETMATHCHAR(CURVAL DIV 4096);END;{:1154}{1158:} 253:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWNOAD; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B0:=CURCHR;SCANMATH(CURLIST.TAILFIELD+1);END; 254:MATHLIMITSWITCH;{:1158}{1162:}269:MATHRADICAL;{:1162}{1164:} 248,249:MATHAC;{:1164}{1167:}259:BEGIN SCANSPEC(12,FALSE); NORMALPARAGRAPH;PUSHNEST;CURLIST.MODEFIELD:=-1; CURLIST.AUXFIELD.INT:=-65536000; IF EQTB[11322].HH.RH<>0 THEN BEGINTOKENLIST(EQTB[11322].HH.RH,11);END; {:1167}{1171:}256:BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWSTYLE(CURCHR); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; 258:BEGIN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWGLUE(0); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END; MEM[CURLIST.TAILFIELD].HH.B1:=98;END;257:APPENDCHOICES;{:1171}{1175:} 211,210:SUBSUP;{:1175}{1180:}255:MATHFRACTION;{:1180}{1190:} 252:MATHLEFTRIGHT;{:1190}{1193:} 206:IF CURGROUP=15 THEN AFTERMATH ELSE OFFSAVE;{:1193}{1210:} 72,173,274,73,174,275,74,175,276,75,176,277,76,177,278,77,178,279,78,179 ,280,79,180,281,80,181,282,81,182,283,82,183,284,83,184,285,84,185,286, 85,186,287,86,187,288,87,188,289,88,189,290,89,190,291,90,191,292,91,192 ,293,92,193,294,93,194,295,94,195,296,95,196,297,96,197,298,97,198,299, 98,199,300,99,200,301,100,201,302,101,202,303:PREFIXEDCOMMAND;{:1210} {1268:}41,142,243:BEGIN GETTOKEN;AFTERTOKEN:=CURTOK;END;{:1268}{1271:} 42,143,244:BEGIN GETTOKEN;SAVEFORAFTER(CURTOK);END;{:1271}{1274:} 61,162,263:OPENORCLOSEIN;{:1274}{1276:}59,160,261:ISSUEMESSAGE;{:1276} {1285:}58,159,260:SHIFTCASE;{:1285}{1290:}20,121,222:SHOWWHATEVER; {:1290}{1347:}60,161,262:DOEXTENSION;{:1347}{:1045}END;GOTO 60; 70:{1034:}MAINS:=EQTB[12656+CURCHR].HH.RH; IF MAINS=1000 THEN CURLIST.AUXFIELD.HH.LH:=1000 ELSE IF MAINS<1000 THEN BEGIN IF MAINS>0 THEN CURLIST.AUXFIELD.HH.LH:=MAINS; END ELSE IF CURLIST.AUXFIELD.HH.LH<1000 THEN CURLIST.AUXFIELD.HH.LH:= 1000 ELSE CURLIST.AUXFIELD.HH.LH:=MAINS;MAINF:=EQTB[11839].HH.RH; BCHAR:=FONTBCHAR[MAINF];FALSEBCHAR:=FONTFALSEBCHAR[MAINF]; IF CURLIST.MODEFIELD>0 THEN IF EQTB[13218].INT<>CURLIST.AUXFIELD.HH.RH THEN FIXLANGUAGE;BEGIN LIGSTACK:=AVAIL; IF LIGSTACK=0 THEN LIGSTACK:=GETAVAIL ELSE BEGIN AVAIL:=MEM[LIGSTACK].HH .RH;MEM[LIGSTACK].HH.RH:=0;DYNUSED:=DYNUSED+1;END;END; MEM[LIGSTACK].HH.B0:=MAINF;CURL:=CURCHR;MEM[LIGSTACK].HH.B1:=CURL; CURQ:=CURLIST.TAILFIELD; IF CANCELBOUNDARY THEN BEGIN CANCELBOUNDARY:=FALSE;MAINK:=0; END ELSE MAINK:=BCHARLABEL[MAINF];IF MAINK=0 THEN GOTO 92;CURR:=CURL; CURL:=256;GOTO 111;80:{1035:} IF CURL<256 THEN BEGIN IF MEM[CURLIST.TAILFIELD].HH.B1=HYPHENCHAR[MAINF] THEN IF MEM[CURQ].HH.RH>0 THEN INSDISC:=TRUE; IF LIGATUREPRESENT THEN BEGIN MAINP:=NEWLIGATURE(MAINF,CURL,MEM[CURQ].HH .RH);IF LFTHIT THEN BEGIN MEM[MAINP].HH.B1:=2;LFTHIT:=FALSE;END; IF RTHIT THEN IF LIGSTACK=0 THEN BEGIN MEM[MAINP].HH.B1:=MEM[MAINP].HH. B1+1;RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=MAINP;CURLIST.TAILFIELD:=MAINP; LIGATUREPRESENT:=FALSE;END;IF INSDISC THEN BEGIN INSDISC:=FALSE; IF CURLIST.MODEFIELD>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWDISC; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END;END{:1035}; 90:{1036:}IF LIGSTACK=0 THEN GOTO 21;CURQ:=CURLIST.TAILFIELD; CURL:=MEM[LIGSTACK].HH.B1;91:IF NOT(LIGSTACK>=HIMEMMIN)THEN GOTO 95; 92:IF(CURCHRFONTEC[MAINF])THEN BEGIN CHARWARNING(MAINF,CURCHR);BEGIN MEM[LIGSTACK].HH.RH:=AVAIL; AVAIL:=LIGSTACK;DYNUSED:=DYNUSED-1;END;GOTO 60;END; MAINI:=FONTINFO[CHARBASE[MAINF]+CURL].QQQQ; IF NOT(MAINI.B0>0)THEN BEGIN CHARWARNING(MAINF,CURCHR); BEGIN MEM[LIGSTACK].HH.RH:=AVAIL;AVAIL:=LIGSTACK;DYNUSED:=DYNUSED-1;END; GOTO 60;END;BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=LIGSTACK; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END{:1036};100:{1038:} GETNEXT;IF CURCMD=11 THEN GOTO 101;IF CURCMD=12 THEN GOTO 101; IF CURCMD=68 THEN GOTO 101;XTOKEN;IF CURCMD=11 THEN GOTO 101; IF CURCMD=12 THEN GOTO 101;IF CURCMD=68 THEN GOTO 101; IF CURCMD=16 THEN BEGIN SCANCHARNUM;CURCHR:=CURVAL;GOTO 101;END; IF CURCMD=65 THEN BCHAR:=256;CURR:=BCHAR;LIGSTACK:=0;GOTO 110; 101:MAINS:=EQTB[12656+CURCHR].HH.RH; IF MAINS=1000 THEN CURLIST.AUXFIELD.HH.LH:=1000 ELSE IF MAINS<1000 THEN BEGIN IF MAINS>0 THEN CURLIST.AUXFIELD.HH.LH:=MAINS; END ELSE IF CURLIST.AUXFIELD.HH.LH<1000 THEN CURLIST.AUXFIELD.HH.LH:= 1000 ELSE CURLIST.AUXFIELD.HH.LH:=MAINS;BEGIN LIGSTACK:=AVAIL; IF LIGSTACK=0 THEN LIGSTACK:=GETAVAIL ELSE BEGIN AVAIL:=MEM[LIGSTACK].HH .RH;MEM[LIGSTACK].HH.RH:=0;DYNUSED:=DYNUSED+1;END;END; MEM[LIGSTACK].HH.B0:=MAINF;CURR:=CURCHR;MEM[LIGSTACK].HH.B1:=CURR; IF CURR=FALSEBCHAR THEN CURR:=256{:1038};110:{1039:} IF((MAINI.B2)MOD 4)<>1 THEN GOTO 80;MAINK:=LIGKERNBASE[MAINF]+MAINI.B3; MAINJ:=FONTINFO[MAINK].QQQQ;IF MAINJ.B0<=128 THEN GOTO 112; MAINK:=LIGKERNBASE[MAINF]+256*MAINJ.B2+MAINJ.B3+32768-256*(128); 111:MAINJ:=FONTINFO[MAINK].QQQQ; 112:IF MAINJ.B1=CURR THEN IF MAINJ.B0<=128 THEN{1040:} BEGIN IF MAINJ.B2>=128 THEN BEGIN IF CURL<256 THEN BEGIN IF MEM[CURLIST. TAILFIELD].HH.B1=HYPHENCHAR[MAINF]THEN IF MEM[CURQ].HH.RH>0 THEN INSDISC :=TRUE; IF LIGATUREPRESENT THEN BEGIN MAINP:=NEWLIGATURE(MAINF,CURL,MEM[CURQ].HH .RH);IF LFTHIT THEN BEGIN MEM[MAINP].HH.B1:=2;LFTHIT:=FALSE;END; IF RTHIT THEN IF LIGSTACK=0 THEN BEGIN MEM[MAINP].HH.B1:=MEM[MAINP].HH. B1+1;RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=MAINP;CURLIST.TAILFIELD:=MAINP; LIGATUREPRESENT:=FALSE;END;IF INSDISC THEN BEGIN INSDISC:=FALSE; IF CURLIST.MODEFIELD>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWDISC; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END;END; BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWKERN(FONTINFO[KERNBASE[MAINF]+256 *MAINJ.B2+MAINJ.B3].INT); CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;GOTO 90;END; IF CURL=256 THEN LFTHIT:=TRUE ELSE IF LIGSTACK=0 THEN RTHIT:=TRUE; BEGIN IF INTERRUPT<>0 THEN PAUSEFORINSTRUCTIONS;END; CASE MAINJ.B2 OF 1,5:BEGIN CURL:=MAINJ.B3; MAINI:=FONTINFO[CHARBASE[MAINF]+CURL].QQQQ;LIGATUREPRESENT:=TRUE;END; 2,6:BEGIN CURR:=MAINJ.B3; IF LIGSTACK=0 THEN BEGIN LIGSTACK:=NEWLIGITEM(CURR);BCHAR:=256; END ELSE IF(LIGSTACK>=HIMEMMIN)THEN BEGIN MAINP:=LIGSTACK; LIGSTACK:=NEWLIGITEM(CURR);MEM[LIGSTACK+1].HH.RH:=MAINP; END ELSE MEM[LIGSTACK].HH.B1:=CURR;END;3:BEGIN CURR:=MAINJ.B3; MAINP:=LIGSTACK;LIGSTACK:=NEWLIGITEM(CURR);MEM[LIGSTACK].HH.RH:=MAINP; END;7,11:BEGIN IF CURL<256 THEN BEGIN IF MEM[CURLIST.TAILFIELD].HH.B1= HYPHENCHAR[MAINF]THEN IF MEM[CURQ].HH.RH>0 THEN INSDISC:=TRUE; IF LIGATUREPRESENT THEN BEGIN MAINP:=NEWLIGATURE(MAINF,CURL,MEM[CURQ].HH .RH);IF LFTHIT THEN BEGIN MEM[MAINP].HH.B1:=2;LFTHIT:=FALSE;END; IF FALSE THEN IF LIGSTACK=0 THEN BEGIN MEM[MAINP].HH.B1:=MEM[MAINP].HH. B1+1;RTHIT:=FALSE;END;MEM[CURQ].HH.RH:=MAINP;CURLIST.TAILFIELD:=MAINP; LIGATUREPRESENT:=FALSE;END;IF INSDISC THEN BEGIN INSDISC:=FALSE; IF CURLIST.MODEFIELD>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=NEWDISC; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;END;END; CURQ:=CURLIST.TAILFIELD;CURL:=MAINJ.B3; MAINI:=FONTINFO[CHARBASE[MAINF]+CURL].QQQQ;LIGATUREPRESENT:=TRUE;END; OTHERWISE BEGIN CURL:=MAINJ.B3;LIGATUREPRESENT:=TRUE; IF LIGSTACK=0 THEN GOTO 80 ELSE GOTO 91;END END; IF MAINJ.B2>4 THEN IF MAINJ.B2<>7 THEN GOTO 80; IF CURL<256 THEN GOTO 110;MAINK:=BCHARLABEL[MAINF];GOTO 111;END{:1040}; IF MAINJ.B0=0 THEN MAINK:=MAINK+1 ELSE BEGIN IF MAINJ.B0>=128 THEN GOTO 80;MAINK:=MAINK+MAINJ.B0+1;END;GOTO 111{:1039};95:{1037:} MAINP:=MEM[LIGSTACK+1].HH.RH; IF MAINP>0 THEN BEGIN MEM[CURLIST.TAILFIELD].HH.RH:=MAINP; CURLIST.TAILFIELD:=MEM[CURLIST.TAILFIELD].HH.RH;END;TEMPPTR:=LIGSTACK; LIGSTACK:=MEM[TEMPPTR].HH.RH;FREENODE(TEMPPTR,2); MAINI:=FONTINFO[CHARBASE[MAINF]+CURL].QQQQ;LIGATUREPRESENT:=TRUE; IF LIGSTACK=0 THEN IF MAINP>0 THEN GOTO 100 ELSE CURR:=BCHAR ELSE CURR:= MEM[LIGSTACK].HH.B1;GOTO 110{:1037}{:1034};120:{1041:} IF EQTB[10794].HH.RH=0 THEN BEGIN{1042:} BEGIN MAINP:=FONTGLUE[EQTB[11839].HH.RH]; IF MAINP=0 THEN BEGIN MAINP:=NEWSPEC(0); MAINK:=PARAMBASE[EQTB[11839].HH.RH]+2; MEM[MAINP+1].INT:=FONTINFO[MAINK].INT; MEM[MAINP+2].INT:=FONTINFO[MAINK+1].INT; MEM[MAINP+3].INT:=FONTINFO[MAINK+2].INT; FONTGLUE[EQTB[11839].HH.RH]:=MAINP;END;END{:1042}; TEMPPTR:=NEWGLUE(MAINP);END ELSE TEMPPTR:=NEWPARAMGLUE(12); MEM[CURLIST.TAILFIELD].HH.RH:=TEMPPTR;CURLIST.TAILFIELD:=TEMPPTR; GOTO 60{:1041};10:END;{:1030}{1284:}PROCEDURE GIVEERRHELP; BEGIN TOKENSHOW(EQTB[11326].HH.RH);END;{:1284}{1303:}{524:} FUNCTION OPENFMTFILE:BOOLEAN;LABEL 40,10;VAR J:0..BUFSIZE; BEGIN J:=CURINPUT.LOCFIELD; IF BUFFER[CURINPUT.LOCFIELD]=38 THEN BEGIN CURINPUT.LOCFIELD:=CURINPUT. LOCFIELD+1;J:=CURINPUT.LOCFIELD;BUFFER[LAST]:=32; WHILE BUFFER[J]<>32 DO J:=J+1;PACKBUFFEREDNAME(0,CURINPUT.LOCFIELD,J-1); IF WOPENIN(FMTFILE)THEN GOTO 40; PACKBUFFEREDNAME(FORMATAREALENGTH,CURINPUT.LOCFIELD,J-1); IF WOPENIN(FMTFILE)THEN GOTO 40;WAKEUPTERMINAL; WRITELN(TERMOUT,'Sorry, I can''t find that format;',' will try PLAIN.', CHR(13),CHR(10));IF ODD(SELECTOR)THEN WRITELN(TERMOUT);END; PACKBUFFEREDNAME(FORMATDEFAULTLENGTH-4,1,0); IF NOT WOPENIN(FMTFILE)THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'I can''t find the PLAIN format file!',CHR(13),CHR(10)); OPENFMTFILE:=FALSE;GOTO 10;END;40:CURINPUT.LOCFIELD:=J; OPENFMTFILE:=TRUE;10:END;{:524}FUNCTION LOADFMTFILE:BOOLEAN; LABEL 6666,10;VAR J,K:INTEGER;P,Q:HALFWORD;X:INTEGER;W:FOURQUARTERS; BEGIN{1308:}X:=FMTFILE^[FMTCOUNT].INT;IF X<>340764991 THEN GOTO 6666; {1389:}BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>1)THEN GOTO 6666 ELSE ETEXMODE:=X;END; IF(ETEXMODE=1)THEN BEGIN{1546:}MAXREGNUM:=32767;MAXREGHELPLINE:=1406; {:1546}END ELSE BEGIN{1545:}MAXREGNUM:=255;MAXREGHELPLINE:=697;{:1545} END;{:1389}BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF X<>0 THEN GOTO 6666;BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF X<>327144 THEN GOTO 6666;BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF X<>14021 THEN GOTO 6666;BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF X<>8501 THEN GOTO 6666;BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF X<>503 THEN GOTO 6666{:1308};{1310:} BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END;IF X<0 THEN GOTO 6666; IF X>POOLSIZE THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'---! Must increase the ','string pool size',CHR(13),CHR (10));GOTO 6666;END ELSE POOLPTR:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END;IF X<0 THEN GOTO 6666; IF X>MAXSTRINGS THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'---! Must increase the ','max strings',CHR(13),CHR(10)) ;GOTO 6666;END ELSE STRPTR:=X;END; FOR K:=0 TO STRPTR DO BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>POOLPTR)THEN GOTO 6666 ELSE STRSTART[K]:=X;END;K:=0; WHILE K+4327130)THEN GOTO 6666 ELSE LOMEMMAX:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<20)OR(X>LOMEMMAX)THEN GOTO 6666 ELSE ROVER:=X;END; IF(ETEXMODE=1)THEN FOR K:=0 TO 5 DO BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT +1;IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>LOMEMMAX)THEN GOTO 6666 ELSE SAROOT[K]:=X;END;P:=0;Q:=ROVER; REPEAT FOR K:=P TO Q+1 DO BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;MEM[K]:=FMTFILE^[FMTCOUNT];END;P:=Q+MEM[Q].HH.LH; IF(P>LOMEMMAX)OR((Q>=MEM[Q+1].HH.RH)AND(MEM[Q+1].HH.RH<>ROVER))THEN GOTO 6666;Q:=MEM[Q+1].HH.RH;UNTIL Q=ROVER; FOR K:=P TO LOMEMMAX DO BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;MEM[K]:=FMTFILE^[FMTCOUNT];END; IF MEMMIN<-2 THEN BEGIN P:=MEM[ROVER+1].HH.LH;Q:=MEMMIN+1; MEM[MEMMIN].HH.RH:=0;MEM[MEMMIN].HH.LH:=0;MEM[P+1].HH.RH:=Q; MEM[ROVER+1].HH.LH:=Q;MEM[Q+1].HH.RH:=ROVER;MEM[Q+1].HH.LH:=P; MEM[Q].HH.RH:=327145;MEM[Q].HH.LH:=-0-Q;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X327131)THEN GOTO 6666 ELSE HIMEMMIN:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>327144)THEN GOTO 6666 ELSE AVAIL:=X;END;MEMEND:=327144; FOR K:=HIMEMMIN TO MEMEND DO BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;MEM[K]:=FMTFILE^[FMTCOUNT];END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;VARUSED:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;DYNUSED:=FMTFILE^[FMTCOUNT].INT;END{:1312};{1314:} {1317:}K:=1;REPEAT BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<1)OR(K+X>14022)THEN GOTO 6666; FOR J:=K TO K+X-1 DO BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;EQTB[J]:=FMTFILE^[FMTCOUNT];END;K:=K+X; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(K+X>14022)THEN GOTO 6666; FOR J:=K TO K+X-1 DO EQTB[J]:=EQTB[K-1];K:=K+X;UNTIL K>14021{:1317}; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<514)OR(X>10514)THEN GOTO 6666 ELSE PARLOC:=X;END; PARTOKEN:=4095+PARLOC;BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<514)OR(X>10514)THEN GOTO 6666 ELSE WRITELOC:=X;END;{1319:} BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<514)OR(X>10514)THEN GOTO 6666 ELSE HASHUSED:=X;END;P:=513; REPEAT BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(XHASHUSED)THEN GOTO 6666 ELSE P:=X;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;HASH[P]:=FMTFILE^[FMTCOUNT].HH;END;UNTIL P=HASHUSED; FOR P:=HASHUSED+1 TO 10780 DO BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;HASH[P]:=FMTFILE^[FMTCOUNT].HH;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;CSCOUNT:=FMTFILE^[FMTCOUNT].INT;END{:1319}{:1314}; {1321:}BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END;IF X<7 THEN GOTO 6666; IF X>FONTMEMSIZE THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'---! Must increase the ','font mem size',CHR(13),CHR(10 ));GOTO 6666;END ELSE FMEMPTR:=X;END; FOR K:=0 TO FMEMPTR-1 DO BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;FONTINFO[K]:=FMTFILE^[FMTCOUNT];END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END;IF X<0 THEN GOTO 6666; IF X>FONTMAX THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'---! Must increase the ','font max',CHR(13),CHR(10)); GOTO 6666;END ELSE FONTPTR:=X;END;FOR K:=0 TO FONTPTR DO{1323:} BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;FONTCHECK[K]:=FMTFILE^[FMTCOUNT].QQQQ;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;FONTSIZE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;FONTDSIZE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>327145)THEN GOTO 6666 ELSE FONTPARAMS[K]:=X;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;HYPHENCHAR[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;SKEWCHAR[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE FONTNAME[K]:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE FONTAREA[K]:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>255)THEN GOTO 6666 ELSE FONTBC[K]:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>255)THEN GOTO 6666 ELSE FONTEC[K]:=X;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;CHARBASE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;WIDTHBASE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;HEIGHTBASE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;DEPTHBASE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;ITALICBASE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;LIGKERNBASE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;KERNBASE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;EXTENBASE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;PARAMBASE[K]:=FMTFILE^[FMTCOUNT].INT;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>LOMEMMAX)THEN GOTO 6666 ELSE FONTGLUE[K]:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>FMEMPTR-1)THEN GOTO 6666 ELSE BCHARLABEL[K]:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>256)THEN GOTO 6666 ELSE FONTBCHAR[K]:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>256)THEN GOTO 6666 ELSE FONTFALSEBCHAR[K]:=X;END;END{:1323} {:1321};{1325:}BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>503)THEN GOTO 6666 ELSE HYPHCOUNT:=X;END; FOR K:=1 TO HYPHCOUNT DO BEGIN BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>503)THEN GOTO 6666 ELSE J:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE HYPHWORD[J]:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>327145)THEN GOTO 6666 ELSE HYPHLIST[J]:=X;END;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END;IF X<0 THEN GOTO 6666; IF X>TRIESIZE THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'---! Must increase the ','trie size',CHR(13),CHR(10)); GOTO 6666;END ELSE J:=X;END;TRIEMAX:=J; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>J)THEN GOTO 6666 ELSE HYPHSTART:=X;END; FOR K:=0 TO J DO BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;TRIE[K]:=FMTFILE^[FMTCOUNT].HH;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END;IF X<0 THEN GOTO 6666; IF X>TRIEOPSIZE THEN BEGIN WAKEUPTERMINAL; WRITELN(TERMOUT,'---! Must increase the ','trie op size',CHR(13),CHR(10) );GOTO 6666;END ELSE J:=X;END;TRIEOPPTR:=J; FOR K:=1 TO J DO BEGIN BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>63)THEN GOTO 6666 ELSE HYFDISTANCE[K]:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>63)THEN GOTO 6666 ELSE HYFNUM[K]:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>511)THEN GOTO 6666 ELSE HYFNEXT[K]:=X;END;END; FOR K:=0 TO 255 DO TRIEUSED[K]:=0;K:=256; WHILE J>0 DO BEGIN BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>K-1)THEN GOTO 6666 ELSE K:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<1)OR(X>J)THEN GOTO 6666 ELSE X:=X;END;TRIEUSED[K]:=X;J:=J-X; OPSTART[K]:=J;END;TRIENOTREADY:=FALSE{:1325};{1327:} BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>3)THEN GOTO 6666 ELSE INTERACTION:=X;END; BEGIN BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<0)OR(X>STRPTR)THEN GOTO 6666 ELSE FORMATIDENT:=X;END; BEGIN BEGIN FMTCOUNT:=FMTCOUNT+1; IF FMTCOUNT=VAXBLOCKLENGTH THEN BEGIN GET(FMTFILE,error:=continue); FMTCOUNT:=0;END END;X:=FMTFILE^[FMTCOUNT].INT;END; IF(X<>69069)OR EOF(FMTFILE)THEN GOTO 6666{:1327};LOADFMTFILE:=TRUE; GOTO 10;6666:WAKEUPTERMINAL; WRITELN(TERMOUT,'(Fatal format file error; I''m stymied)',CHR(13),CHR(10 ));LOADFMTFILE:=FALSE;10:END;{:1303}{1330:}{1333:} PROCEDURE CLOSEFILESANDTERMINATE;VAR K:INTEGER;BEGIN{1378:} FOR K:=0 TO 15 DO IF WRITEOPEN[K]THEN ACLOSE(WRITEFILE[K]){:1378}; IF EQTB[13199].INT>0 THEN{1334:} IF LOGOPENED THEN BEGIN IF LOGQUAL THEN WRITELN(LOGFILE,' '); IF LOGQUAL THEN WRITELN(LOGFILE,'Here is how much of TeX''s memory', ' you used:'); IF LOGQUAL THEN WRITE(LOGFILE,' ',STRPTR-INITSTRPTR:1,' string'); IF STRPTR<>INITSTRPTR+1 THEN IF LOGQUAL THEN WRITE(LOGFILE,'s'); IF LOGQUAL THEN WRITELN(LOGFILE,' out of ',MAXSTRINGS-INITSTRPTR:1); IF LOGQUAL THEN WRITELN(LOGFILE,' ',POOLPTR-INITPOOLPTR:1, ' string characters out of ',POOLSIZE-INITPOOLPTR:1); IF LOGQUAL THEN WRITELN(LOGFILE,' ',LOMEMMAX-MEMMIN+MEMEND-HIMEMMIN+2:1, ' words of memory out of ',MEMEND+1-MEMMIN:1); IF LOGQUAL THEN WRITELN(LOGFILE,' ',CSCOUNT:1, ' multiletter control sequences out of ',10000:1); IF LOGQUAL THEN WRITE(LOGFILE,' ',FMEMPTR:1,' words of font info for ', FONTPTR-0:1,' font'); IF FONTPTR<>1 THEN IF LOGQUAL THEN WRITE(LOGFILE,'s'); IF LOGQUAL THEN WRITELN(LOGFILE,', out of ',FONTMEMSIZE:1,' for ', FONTMAX-0:1); IF LOGQUAL THEN WRITE(LOGFILE,' ',HYPHCOUNT:1,' hyphenation exception'); IF HYPHCOUNT<>1 THEN IF LOGQUAL THEN WRITE(LOGFILE,'s'); IF LOGQUAL THEN WRITELN(LOGFILE,' out of ',503:1); IF LOGQUAL THEN WRITELN(LOGFILE,' ',MAXINSTACK:1,'i,',MAXNESTSTACK:1, 'n,',MAXPARAMSTACK:1,'p,',MAXBUFSTACK+1:1,'b,',MAXSAVESTACK+6:1, 's stack positions out of ',STACKSIZE:1,'i,',NESTSIZE:1,'n,',PARAMSIZE:1 ,'p,',BUFSIZE:1,'b,',SAVESIZE:1,'s');END{:1334};WAKEUPTERMINAL;{642:} WHILE CURS>-1 DO BEGIN IF CURS>0 THEN BEGIN DBUFFER.B[DVIPTR]:=142; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP; END ELSE BEGIN BEGIN DBUFFER.B[DVIPTR]:=140;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;TOTALPAGES:=TOTALPAGES+1;END; CURS:=CURS-1;END; IF TOTALPAGES=0 THEN PRINTNL(844)ELSE BEGIN BEGIN DBUFFER.B[DVIPTR]:=248 ;DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(LASTBOP); LASTBOP:=DVIOFFSET+DVIPTR-5;DVIFOUR(25400000);DVIFOUR(473628672); PREPAREMAG;DVIFOUR(EQTB[13185].INT);DVIFOUR(MAXV);DVIFOUR(MAXH); BEGIN DBUFFER.B[DVIPTR]:=MAXPUSH DIV 256;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=MAXPUSH MOD 256;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=(TOTALPAGES DIV 256)MOD 256;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END; BEGIN DBUFFER.B[DVIPTR]:=TOTALPAGES MOD 256;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;{643:} WHILE FONTPTR>0 DO BEGIN IF FONTUSED[FONTPTR]THEN DVIFONTDEF(FONTPTR); FONTPTR:=FONTPTR-1;END{:643};BEGIN DBUFFER.B[DVIPTR]:=249; DVIPTR:=DVIPTR+1;IF DVIPTR=DVILIMIT THEN DVISWAP;END;DVIFOUR(LASTBOP); BEGIN DBUFFER.B[DVIPTR]:=2;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;K:=4+((DVIBUFSIZE-DVIPTR)MOD 4); WHILE K>0 DO BEGIN BEGIN DBUFFER.B[DVIPTR]:=223;DVIPTR:=DVIPTR+1; IF DVIPTR=DVILIMIT THEN DVISWAP;END;K:=K-1;END;{599:} IF(DVILIMIT=HALFBUF)AND DVIQUAL THEN WRITE(DVIFILE,DBUFFER.R); FOR K:=DVIPTR TO DVIBUFSIZE DO DBUFFER.B[K]:=223; IF(DVIPTR>0)AND DVIQUAL THEN WRITE(DVIFILE,DBUFFER.L); IF(DVIPTR>HALFBUF)AND DVIQUAL THEN WRITE(DVIFILE,DBUFFER.R);{:599}; IF DVIQUAL THEN BEGIN BCLOSE(DVIFILE);PRINTNL(845); SLOWPRINT(OUTPUTFILENAME);END ELSE PRINTNL(846);PRINT(287); PRINTINT(TOTALPAGES);PRINT(847);IF TOTALPAGES<>1 THEN PRINTCHAR(115); PRINT(848);PRINTINT(DVIOFFSET+DVIPTR);PRINT(849);END{:642}; IF DIAGQUAL THEN BEGIN IF DIAGQUAL THEN WRITELN(DIAGFILE); IF DIAGQUAL THEN WRITELN(DIAGFILE,'end module');ACLOSE(DIAGFILE); PRINTNL(1285);SLOWPRINT(DIAGNAME);PRINTCHAR(46);END;END;{:1333}{1335:} PROCEDURE FINALCLEANUP;LABEL 10;VAR C:SMALLNUMBER;BEGIN C:=CURCHR; IF JOBNAME=0 THEN OPENLOGFILE; WHILE INPUTPTR>0 DO IF CURINPUT.STATEFIELD=0 THEN ENDTOKENLIST ELSE ENDFILEREADING;WHILE OPENPARENS>0 DO BEGIN PRINT(1286); OPENPARENS:=OPENPARENS-1;END;IF CURLEVEL>1 THEN BEGIN PRINTNL(40); PRINTESC(1287);PRINT(1288);PRINTINT(CURLEVEL-1);PRINTCHAR(41); IF(ETEXMODE=1)THEN SHOWSAVEGROUPS;END; WHILE CONDPTR<>0 DO BEGIN PRINTNL(40);PRINTESC(1287);PRINT(1289); PRINTCMDCHR(105,CURIF);IF IFLINE<>0 THEN BEGIN PRINT(1290); PRINTINT(IFLINE);END;PRINT(1291);IFLINE:=MEM[CONDPTR+1].INT; CURIF:=MEM[CONDPTR].HH.B1;TEMPPTR:=CONDPTR;CONDPTR:=MEM[CONDPTR].HH.RH; FREENODE(TEMPPTR,2);END; IF HISTORY<>0 THEN IF((HISTORY=1)OR(INTERACTION<3))THEN IF SELECTOR=19 THEN BEGIN SELECTOR:=17;PRINTNL(1292);SELECTOR:=19;END; IF C=1 THEN BEGIN IF INITFLAG THEN BEGIN FOR C:=0 TO 4 DO IF CURMARK[C] <>0 THEN DELETETOKENREF(CURMARK[C]); IF SAROOT[6]<>0 THEN IF DOMARKS(3,0,SAROOT[6])THEN SAROOT[6]:=0; FOR C:=2 TO 3 DO FLUSHNODELIST(DISCPTR[C]);STOREFMTFILE;GOTO 10;END; PRINTNL(1293);GOTO 10;END;10:END;{:1335}{1336:}PROCEDURE INITPRIM; BEGIN NONEWCONTROLSEQUENCE:=FALSE;FIRST:=0;{226:} PRIMITIVE(379,75,10782);PRIMITIVE(380,75,10783);PRIMITIVE(381,75,10784); PRIMITIVE(382,75,10785);PRIMITIVE(383,75,10786);PRIMITIVE(384,75,10787); PRIMITIVE(385,75,10788);PRIMITIVE(386,75,10789);PRIMITIVE(387,75,10790); PRIMITIVE(388,75,10791);PRIMITIVE(389,75,10792);PRIMITIVE(390,75,10793); PRIMITIVE(391,75,10794);PRIMITIVE(392,75,10795);PRIMITIVE(393,75,10796); PRIMITIVE(394,76,10797);PRIMITIVE(395,76,10798);PRIMITIVE(396,76,10799); {:226}{230:}PRIMITIVE(401,72,11317);PRIMITIVE(402,72,11318); PRIMITIVE(403,72,11319);PRIMITIVE(404,72,11320);PRIMITIVE(405,72,11321); PRIMITIVE(406,72,11322);PRIMITIVE(407,72,11323);PRIMITIVE(408,72,11324); PRIMITIVE(409,72,11326);{:230}{238:}PRIMITIVE(423,73,13168); PRIMITIVE(424,73,13169);PRIMITIVE(425,73,13170);PRIMITIVE(426,73,13171); PRIMITIVE(427,73,13172);PRIMITIVE(428,73,13173);PRIMITIVE(429,73,13174); PRIMITIVE(430,73,13175);PRIMITIVE(431,73,13176);PRIMITIVE(432,73,13177); PRIMITIVE(433,73,13178);PRIMITIVE(434,73,13179);PRIMITIVE(435,73,13180); PRIMITIVE(436,73,13181);PRIMITIVE(437,73,13182);PRIMITIVE(438,73,13183); PRIMITIVE(439,73,13184);PRIMITIVE(440,73,13185);PRIMITIVE(441,73,13186); PRIMITIVE(442,73,13187);PRIMITIVE(443,73,13188);PRIMITIVE(444,73,13189); PRIMITIVE(445,73,13190);PRIMITIVE(446,73,13191);PRIMITIVE(447,73,13192); PRIMITIVE(448,73,13193);PRIMITIVE(449,73,13194);PRIMITIVE(450,73,13195); PRIMITIVE(451,73,13196);PRIMITIVE(452,73,13197);PRIMITIVE(453,73,13198); PRIMITIVE(454,73,13199);PRIMITIVE(455,73,13200);PRIMITIVE(456,73,13201); PRIMITIVE(457,73,13202);PRIMITIVE(458,73,13203);PRIMITIVE(459,73,13204); PRIMITIVE(460,73,13205);PRIMITIVE(461,73,13206);PRIMITIVE(462,73,13207); PRIMITIVE(463,73,13208);PRIMITIVE(464,73,13209);PRIMITIVE(465,73,13210); PRIMITIVE(466,73,13211);PRIMITIVE(467,73,13212);PRIMITIVE(468,73,13213); PRIMITIVE(469,73,13214);PRIMITIVE(470,73,13215);PRIMITIVE(471,73,13216); PRIMITIVE(472,73,13217);PRIMITIVE(473,73,13218);PRIMITIVE(474,73,13219); PRIMITIVE(475,73,13220);PRIMITIVE(476,73,13221);PRIMITIVE(477,73,13222); {:238}{248:}PRIMITIVE(481,74,13745);PRIMITIVE(482,74,13746); PRIMITIVE(483,74,13747);PRIMITIVE(484,74,13748);PRIMITIVE(485,74,13749); PRIMITIVE(486,74,13750);PRIMITIVE(487,74,13751);PRIMITIVE(488,74,13752); PRIMITIVE(489,74,13753);PRIMITIVE(490,74,13754);PRIMITIVE(491,74,13755); PRIMITIVE(492,74,13756);PRIMITIVE(493,74,13757);PRIMITIVE(494,74,13758); PRIMITIVE(495,74,13759);PRIMITIVE(496,74,13760);PRIMITIVE(497,74,13761); PRIMITIVE(498,74,13762);PRIMITIVE(499,74,13763);PRIMITIVE(500,74,13764); PRIMITIVE(501,74,13765);{:248}{265:}PRIMITIVE(32,64,0); PRIMITIVE(47,44,0);PRIMITIVE(511,45,0);PRIMITIVE(512,90,0); PRIMITIVE(513,40,0);PRIMITIVE(514,41,0);PRIMITIVE(515,61,0); PRIMITIVE(516,16,0);PRIMITIVE(507,107,0);PRIMITIVE(517,15,0); PRIMITIVE(518,92,0);PRIMITIVE(508,67,0);PRIMITIVE(519,62,0); HASH[10516].RH:=519;EQTB[10516]:=EQTB[CURVAL];PRIMITIVE(520,102,0); PRIMITIVE(521,88,0);PRIMITIVE(522,77,0);PRIMITIVE(523,32,0); PRIMITIVE(524,36,0);PRIMITIVE(525,39,0);PRIMITIVE(331,37,0); PRIMITIVE(354,18,0);PRIMITIVE(526,46,0);PRIMITIVE(527,17,0); PRIMITIVE(528,54,0);PRIMITIVE(529,91,0);PRIMITIVE(530,34,0); PRIMITIVE(531,65,0);PRIMITIVE(532,103,0);PRIMITIVE(336,55,0); PRIMITIVE(533,63,0);PRIMITIVE(534,84,11312);PRIMITIVE(535,42,0); PRIMITIVE(536,80,0);PRIMITIVE(537,66,0);PRIMITIVE(538,96,0); PRIMITIVE(539,0,256);HASH[10521].RH:=539;EQTB[10521]:=EQTB[CURVAL]; PRIMITIVE(540,98,0);PRIMITIVE(541,109,0);PRIMITIVE(410,71,0); PRIMITIVE(355,38,0);PRIMITIVE(542,33,0);PRIMITIVE(543,56,0); PRIMITIVE(544,35,0);{:265}{334:}PRIMITIVE(606,13,256);PARLOC:=CURVAL; PARTOKEN:=4095+PARLOC;{:334}{376:}PRIMITIVE(638,104,0); PRIMITIVE(639,104,1);{:376}{384:}PRIMITIVE(640,110,0); PRIMITIVE(641,110,1);PRIMITIVE(642,110,2);PRIMITIVE(643,110,3); PRIMITIVE(644,110,4);{:384}{411:}PRIMITIVE(479,89,0); PRIMITIVE(503,89,1);PRIMITIVE(398,89,2);PRIMITIVE(399,89,3);{:411}{416:} PRIMITIVE(677,79,102);PRIMITIVE(678,79,1);PRIMITIVE(679,82,0); PRIMITIVE(680,82,1);PRIMITIVE(681,83,1);PRIMITIVE(682,83,3); PRIMITIVE(683,83,2);PRIMITIVE(684,70,0);PRIMITIVE(685,70,1); PRIMITIVE(686,70,2);PRIMITIVE(687,70,4);PRIMITIVE(688,70,5);{:416}{468:} PRIMITIVE(744,108,0);PRIMITIVE(745,108,1);PRIMITIVE(746,108,2); PRIMITIVE(747,108,3);PRIMITIVE(748,108,4);PRIMITIVE(749,108,5);{:468} {487:}PRIMITIVE(765,105,0);PRIMITIVE(766,105,1);PRIMITIVE(767,105,2); PRIMITIVE(768,105,3);PRIMITIVE(769,105,4);PRIMITIVE(770,105,5); PRIMITIVE(771,105,6);PRIMITIVE(772,105,7);PRIMITIVE(773,105,8); PRIMITIVE(774,105,9);PRIMITIVE(775,105,10);PRIMITIVE(776,105,11); PRIMITIVE(777,105,12);PRIMITIVE(778,105,13);PRIMITIVE(779,105,14); PRIMITIVE(780,105,15);PRIMITIVE(781,105,16);{:487}{491:} PRIMITIVE(783,106,2);HASH[10518].RH:=783;EQTB[10518]:=EQTB[CURVAL]; PRIMITIVE(784,106,4);PRIMITIVE(785,106,3);{:491}{553:} PRIMITIVE(808,87,0);HASH[10524].RH:=808;EQTB[10524]:=EQTB[CURVAL];{:553} {780:}PRIMITIVE(907,4,256);PRIMITIVE(908,5,257);HASH[10515].RH:=908; EQTB[10515]:=EQTB[CURVAL];PRIMITIVE(909,5,258);HASH[10519].RH:=910; HASH[10520].RH:=910;EQTB[10520].HH.B0:=9;EQTB[10520].HH.RH:=327133; EQTB[10520].HH.B1:=1;EQTB[10519]:=EQTB[10520];EQTB[10519].HH.B0:=115; {:780}{983:}PRIMITIVE(979,81,0);PRIMITIVE(980,81,1);PRIMITIVE(981,81,2); PRIMITIVE(982,81,3);PRIMITIVE(983,81,4);PRIMITIVE(984,81,5); PRIMITIVE(985,81,6);PRIMITIVE(986,81,7);{:983}{1052:} PRIMITIVE(344,14,0);PRIMITIVE(1034,14,1);{:1052}{1058:} PRIMITIVE(1035,26,4);PRIMITIVE(1036,26,0);PRIMITIVE(1037,26,1); PRIMITIVE(1038,26,2);PRIMITIVE(1039,26,3);PRIMITIVE(1040,27,4); PRIMITIVE(1041,27,0);PRIMITIVE(1042,27,1);PRIMITIVE(1043,27,2); PRIMITIVE(1044,27,3);PRIMITIVE(337,28,5);PRIMITIVE(341,29,1); PRIMITIVE(343,30,99);{:1058}{1071:}PRIMITIVE(1062,21,1); PRIMITIVE(1063,21,0);PRIMITIVE(1064,22,1);PRIMITIVE(1065,22,0); PRIMITIVE(412,20,0);PRIMITIVE(1066,20,1);PRIMITIVE(1067,20,2); PRIMITIVE(974,20,3);PRIMITIVE(1068,20,4);PRIMITIVE(976,20,5); PRIMITIVE(1069,20,106);PRIMITIVE(1070,31,99);PRIMITIVE(1071,31,100); PRIMITIVE(1072,31,101);PRIMITIVE(1073,31,102);{:1071}{1088:} PRIMITIVE(1088,43,1);PRIMITIVE(1089,43,0);{:1088}{1107:} PRIMITIVE(1098,25,12);PRIMITIVE(1099,25,11);PRIMITIVE(1100,25,10); PRIMITIVE(1101,23,0);PRIMITIVE(1102,23,1);PRIMITIVE(1103,24,0); PRIMITIVE(1104,24,1);{:1107}{1114:}PRIMITIVE(45,47,1); PRIMITIVE(352,47,0);{:1114}{1141:}PRIMITIVE(1135,48,0); PRIMITIVE(1136,48,1);{:1141}{1156:}PRIMITIVE(874,50,16); PRIMITIVE(875,50,17);PRIMITIVE(876,50,18);PRIMITIVE(877,50,19); PRIMITIVE(878,50,20);PRIMITIVE(879,50,21);PRIMITIVE(880,50,22); PRIMITIVE(881,50,23);PRIMITIVE(883,50,26);PRIMITIVE(882,50,27); PRIMITIVE(1137,51,0);PRIMITIVE(887,51,1);PRIMITIVE(888,51,2);{:1156} {1169:}PRIMITIVE(869,53,0);PRIMITIVE(870,53,2);PRIMITIVE(871,53,4); PRIMITIVE(872,53,6);{:1169}{1178:}PRIMITIVE(1155,52,0); PRIMITIVE(1156,52,1);PRIMITIVE(1157,52,2);PRIMITIVE(1158,52,3); PRIMITIVE(1159,52,4);PRIMITIVE(1160,52,5);{:1178}{1188:} PRIMITIVE(884,49,30);PRIMITIVE(885,49,31);HASH[10517].RH:=885; EQTB[10517]:=EQTB[CURVAL];{:1188}{1208:}PRIMITIVE(1180,93,1); PRIMITIVE(1181,93,2);PRIMITIVE(1182,93,4);PRIMITIVE(1183,97,0); PRIMITIVE(1184,97,1);PRIMITIVE(1185,97,2);PRIMITIVE(1186,97,3);{:1208} {1219:}PRIMITIVE(1200,94,0);PRIMITIVE(1201,94,1);{:1219}{1222:} PRIMITIVE(1202,95,0);PRIMITIVE(1203,95,1);PRIMITIVE(1204,95,2); PRIMITIVE(1205,95,3);PRIMITIVE(1206,95,4);PRIMITIVE(1207,95,5); PRIMITIVE(1208,95,6);{:1222}{1230:}PRIMITIVE(418,85,11888); PRIMITIVE(422,85,12912);PRIMITIVE(419,85,12144);PRIMITIVE(420,85,12400); PRIMITIVE(421,85,12656);PRIMITIVE(480,85,13489);PRIMITIVE(415,86,11840); PRIMITIVE(416,86,11856);PRIMITIVE(417,86,11872);{:1230}{1250:} PRIMITIVE(950,99,0);PRIMITIVE(962,99,1);{:1250}{1254:} PRIMITIVE(1226,78,0);PRIMITIVE(1227,78,1);{:1254}{1262:} PRIMITIVE(275,100,0);PRIMITIVE(276,100,1);PRIMITIVE(277,100,2); PRIMITIVE(1236,100,3);{:1262}{1272:}PRIMITIVE(1237,60,1); PRIMITIVE(1238,60,0);{:1272}{1277:}PRIMITIVE(1239,58,0); PRIMITIVE(1240,58,1);{:1277}{1286:}PRIMITIVE(1246,57,12144); PRIMITIVE(1247,57,12400);{:1286}{1291:}PRIMITIVE(1248,19,0); PRIMITIVE(1249,19,1);PRIMITIVE(1250,19,2);PRIMITIVE(1251,19,3);{:1291} {1344:}PRIMITIVE(1295,59,0);PRIMITIVE(603,59,1);WRITELOC:=CURVAL; PRIMITIVE(1296,59,2);PRIMITIVE(1297,59,3);PRIMITIVE(1298,59,4); PRIMITIVE(1299,59,5);{:1344};NONEWCONTROLSEQUENCE:=TRUE;END;{:1336} {1338:}{PROCEDURE DEBUGHELP;LABEL 888,10;VAR K,L,M,N:INTEGER; BEGIN WHILE TRUE DO BEGIN WAKEUPTERMINAL;PRINTNL(1294); IF ODD(SELECTOR)THEN WRITELN(TERMOUT);READ(TERMIN,M); IF M<0 THEN GOTO 10 ELSE IF M=0 THEN BEGIN GOTO 888; 888:M:=0; ['BREAKPOINT'] END ELSE BEGIN READ(TERMIN,N);CASE M OF[1339:]1:PRINTWORD(MEM[N]); 2:PRINTINT(MEM[N].HH.LH);3:PRINTINT(MEM[N].HH.RH);4:PRINTWORD(EQTB[N]); 5:PRINTWORD(FONTINFO[N]);6:PRINTWORD(SAVESTACK[N]);7:SHOWBOX(N); 8:BEGIN BREADTHMAX:=10000;DEPTHTHRESHOLD:=POOLSIZE-POOLPTR-10; SHOWNODELIST(N);END;9:SHOWTOKENLIST(N,0,1000);10:SLOWPRINT(N); 11:CHECKMEM(N>0);12:SEARCHMEM(N);13:BEGIN READ(TERMIN,L); PRINTCMDCHR(N,L);END;14:FOR K:=0 TO N DO PRINT(BUFFER[K]); 15:BEGIN FONTINSHORTDISPLAY:=0;SHORTDISPLAY(N);END; 16:PANICKING:=NOT PANICKING;[:1339]OTHERWISE PRINT(63)END;END;END; 10:END;}{:1338}{1601:}PROCEDURE lib$set_symbol ( %immed SYMBOL:DESCRPTR; %immed VALUESTRING:DESCRPTR;TBLIND:INTEGER:= %immed 0);EXTERNAL; PROCEDURE SYMBOLJOBNAME;VAR TMPDESCR:DESCRPTR;BEGIN TMPDESCR:=NIL; IF JOBQUAL THEN BEGIN STRTODESCR(JOBNAME,TMPDESCR); lib$set_symbol ( %stdescr LJOBNAME,TMPDESCR,2);END;END;{:1601}{1620:} FUNCTION INITCLI(VAR TABLE:[ readonly ] unsigned ; VERBNAME:[ readonly ]PACKED ARRAY[L1..U1:INTEGER]OF CHAR; QUALNAME:[ readonly ]PACKED ARRAY[L2..U2:INTEGER]OF CHAR):INTEGER; LABEL 10;VAR COMMANDLINE:PACKED ARRAY[1..256]OF CHAR;LEN:SIXTEENBITS; STS:INTEGER; FUNCTION CHECKCLI(UNIQUEDEFQUAL:[ readonly ]PACKED ARRAY[L1..U1:INTEGER] OF CHAR):INTEGER;BEGIN establish( lib$sig_to_ret); CHECKCLI:= cli$present(UNIQUEDEFQUAL);END; BEGIN STS:= cli$get_value('$VERB',COMMANDLINE,LEN); IF(ODD(STS)AND(LEN>0))THEN IF( substr(COMMANDLINE,1,LEN)=VERBNAME)THEN IF(ODD(CHECKCLI(QUALNAME)))THEN BEGIN INITCLI:=1;GOTO 10;END; lib$get_foreign(COMMANDLINE,,LEN); COMMANDLINE:=VERBNAME+' '+ substr(COMMANDLINE,1,LEN); INITCLI:= cli$dcl_parse(COMMANDLINE, iaddress(TABLE));10:END;{:1620} {1621:}PROCEDURE GETCOMMANDLINE; VAR QUALARGUMENT:PACKED ARRAY[1..256]OF CHAR;LEN:SIXTEENBITS;I:INTEGER; J:0..BUFSIZE;BEGIN CMDLINEPRESENT:=ODD( cli$present('COMMAND_LINE')); EDITQUAL:=ODD( cli$present('EDITOR')); IF EDITQUAL THEN cli$get_value('EDITOR',EDITNAME,EDITLEN); JOBQUAL:=ODD( cli$present('JOBNAME_SYMBOL')); IF JOBQUAL THEN cli$get_value('JOBNAME_SYMBOL',LJOBNAME,LLENNAME); CONTINUEQUAL:=ODD( cli$present('CONTINUE')); BATCHQUAL:=ODD( cli$present('BATCH')); DVIQUAL:=ODD( cli$present('OUTPUT')); IF DVIQUAL THEN cli$get_value('OUTPUT',DVIFNAME,DVIFLEN); LOGQUAL:=ODD( cli$present('LOG_FILE')); IF LOGQUAL THEN cli$get_value('LOG_FILE',LOGFNAME,LOGFLEN); DIAGQUAL:=ODD( cli$present('DIAGNOSTICS')); IF DIAGQUAL THEN cli$get_value('DIAGNOSTICS',DIAGFNAME,DIAGFLEN); FORMATQUAL:=ODD( cli$present('FORMAT')); IF FORMATQUAL THEN BEGIN cli$get_value('FORMAT',QUALARGUMENT,LEN); CURINPUT.LOCFIELD:=0;BUFFER[0]:=XORD['&'];J:=1; FOR I:=1 TO LEN DO BEGIN BUFFER[J]:=XORD[QUALARGUMENT[I]];J:=J+1 END; BUFFER[J]:=XORD[' '];IF FORMATIDENT<>0 THEN INITIALIZE; IF NOT OPENFMTFILE THEN GOTO 9999; IF NOT LOADFMTFILE THEN BEGIN WCLOSE(FMTFILE);GOTO 9999;END; WCLOSE(FMTFILE);END;END;{:1621}{1651:}FUNCTION EDITFILE; VAR EQUIVALENCE:PACKED ARRAY[1..FILENAMESIZE]OF CHAR; EQUVLEN:SIGNEDHALFWORD;OLDSETTING:INTEGER;EDITSTATUS:EDITRESULT; EDITCTR:INTEGER;EDITFOUND:INTEGER;{1657:}KKK:INTEGER;CMDFILE:STRNUMBER; {:1657}{1660:}TECOCMD:[ volatile ]VARYING[FILENAMESIZE]OF CHAR; ITEMLIST:[ volatile ]ARRAY[0..1]OF VMSITEMLIST;{:1660}{1663:} NEXTCH:POOLPOINTER;HADSEMICOLON:BOOLEAN;{:1663} BEGIN OLDSETTING:=SELECTOR;SELECTOR:=18;EDITFILE:=FALSE; EDITSTATUS:=FAILED;EQUIVALENCE:=EDITNAME;EQUVLEN:=EDITLEN; IF EDITQUAL THEN IF EQUIVALENCE[EQUVLEN]=':'THEN BEGIN EQUIVALENCE[ EQUVLEN]:=' ';EQUVLEN:=EQUVLEN-1; EDITQUAL:=TRANSLATE(EQUIVALENCE,EQUVLEN);END;IF EDITQUAL THEN{1652:} BEGIN PRINTNL(1433);{1653:} FOR EDITCTR:=1 TO EQUVLEN DO IF EQUIVALENCE[EDITCTR]IN['a'..'z']THEN EQUIVALENCE[EDITCTR]:=XCHR[XORD[EQUIVALENCE[EDITCTR]]-32]{:1653};{1654:} EDITCTR:=1;EDITFOUND:=0; WHILE(EDITCTR<=4)AND(EDITFOUND=0)DO BEGIN IF index(EDITOR[EDITCTR]. LOGICAL,EQUIVALENCE)=1 THEN EDITFOUND:=EDITCTR;EDITCTR:=EDITCTR+1 END; {:1654};IF EDITFOUND<>0 THEN{1655:} WITH EDITOR[EDITFOUND]DO BEGIN REWRITE(TEMPFILE);COPYERR:=SAVEIT; PRINTNL(CMDTEXT); IF STARTQUAL THEN WITH STACKITEM DO EDITLOCATE(LINE,LOCFIELD-STARTFIELD +1);IF EDITFOUND=3 THEN{1656:}BEGIN NAMEOFFILE:='TEX_EDTINI'; DEFAULTNAME:='.EDT'; IF AOPENOUT(EDCMDFILE)THEN BEGIN CMDFILE:=MAKENAMESTRING; EQUIVALENCE:='EDTINI';EQUVLEN:=6; IF NOT TRANSLATE(EQUIVALENCE,EQUVLEN)THEN EQUVLEN:=6;COPYERR:=IGNOREIT; SELECTOR:=22;PRINT(1434);PRINTLN;PRINT(1435);PRINTINT(LINE); PRINTCHAR(59);WITH STACKITEM DO PRINTINT(LOCFIELD-STARTFIELD); PRINT(1436);PRINTLN;PRINT(1437);PRINTLN;PRINT(1438); FOR KKK:=1 TO EQUVLEN DO PRINTCHAR(XORD[EQUIVALENCE[KKK]]); ACLOSE(EDCMDFILE);COPYERR:=SAVEIT;SELECTOR:=18;PRINT(1439); PRINT(CMDFILE);PRINTCHAR(32);END END{:1656};IF EDITFOUND=4 THEN{1658:} BEGIN NAMEOFFILE:='TEX_TECOINI';DEFAULTNAME:='.TEC'; IF AOPENOUT(EDCMDFILE)THEN BEGIN CMDFILE:=MAKENAMESTRING; EQUIVALENCE:='TEC$INIT';EQUVLEN:=8;COPYERR:=IGNOREIT;SELECTOR:=22; IF TRANSLATE(EQUIVALENCE,EQUVLEN)THEN BEGIN IF EQUIVALENCE[1]='$'THEN BEGIN PRINT(1440); FOR KKK:=2 TO EQUVLEN DO PRINTCHAR(XORD[EQUIVALENCE[KKK]]); END ELSE FOR KKK:=1 TO EQUVLEN DO PRINTCHAR(XORD[EQUIVALENCE[KKK]]); PRINTCHAR(27);PRINTLN;END;PRINT(1441);PRINTINT(LINE);PRINT(1442); WITH STACKITEM DO PRINTINT(LOCFIELD-STARTFIELD);PRINT(1443); PRINTCHAR(27);PRINTCHAR(27);PRINTLN;ACLOSE(EDCMDFILE);COPYERR:=SAVEIT; SELECTOR:=18;PRINT(1439);PRINT(CMDFILE);PRINTCHAR(32);{1659:} BEGIN TECOCMD:='$';KKK:=STRSTART[CMDFILE]; WHILE KKK0 THEN BEGIN WITH ITEMLIST[0] DO BEGIN BUFFERLENGTH:=EQUVLEN;ITEMCODE:= lnm$_string ; BUFFERADDR:= iaddress(EQUIVALENCE);RETLENADDR:=0;END; ITEMLIST[1].NEXTITEM:=0; $crelnm(,'LNM$PROCESS_TABLE','TEC$INIT',,ITEMLIST); END ELSE $dellnm('LNM$PROCESS_TABLE','TEC$INIT');END; delete_file(LASTNAME)END{:1661} END ELSE EDITSTATUS:=EDIT(0,0,EDITOR[EDITFOUND]);END{:1655}ELSE{1664:} BEGIN REWRITE(TEMPFILE);COPYERR:=SAVEIT;PRINTLN; FOR KKK:=1 TO EQUVLEN DO PRINT(XORD[EQUIVALENCE[KKK]]);PRINT(32); PRINT(STACKITEM.NAMEFIELD);PRINT(32);PRINTINT(LINE);PRINT(32); WITH STACKITEM DO PRINTINT(LOCFIELD-STARTFIELD+1); EDITSTATUS:=EDIT(0,0,EMPTYEDITOR);END{:1664};COPYERR:=IGNOREIT; SELECTOR:=OLDSETTING;END{:1652}; IF EDITSTATUS<>FAILED THEN BEGIN EDITFILE:=TRUE; IF EDITSTATUS=EDITED THEN{1662:}BEGIN HADSEMICOLON:=FALSE; FOR NEXTCH:=STRSTART[STACKITEM.NAMEFIELD]TO STRSTART[STACKITEM.NAMEFIELD +1]-1 DO BEGIN IF STRPOOL[NEXTCH]=59 THEN HADSEMICOLON:=TRUE; IF HADSEMICOLON THEN STRPOOL[NEXTCH]:=32 END;END{:1662}END; SELECTOR:=OLDSETTING;END;{:1651}{:1330}{1332:}BEGIN HISTORY:=3; BEGIN OPEN(TERMOUT, 'SYS$OUTPUT' , carriage_control := none ); LINELIMIT(TERMOUT,MAXINT);REWRITE(TERMOUT);OUTFAB:= PAS$FAB(TERMOUT); OUTRAB:= PAS$RAB(TERMOUT);END; IF NOT ODD(INITCLI(ETEX_CLI,'ETEX','TEXFORMATS'))THEN BEGIN WRITELN( TERMOUT,'Ouch---access to DCL command line interface has failed!',CHR(13 ),CHR(10));GOTO 9999;END;INITFLAG:=ODD( cli$present('INIT'));{14:} BAD:=0;IF(HALFERRORLINE<30)OR(HALFERRORLINE>ERRORLINE-15)THEN BAD:=1; IF MAXPRINTLINE<60 THEN BAD:=2;IF DVIBUFSIZE MOD 8<>0 THEN BAD:=3; IF 1100>327144 THEN BAD:=4;IF 8501>10000 THEN BAD:=5; IF MAXINOPEN>=128 THEN BAD:=6;IF 327144<267 THEN BAD:=7;{:14}{111:} IF(MEMMIN<>0)OR(MEMMAX<>327144)THEN BAD:=10; IF(MEMMIN>0)OR(MEMMAX<327144)THEN BAD:=10; IF(0>0)OR(511<127)THEN BAD:=11;IF(0>0)OR(327145<32767)THEN BAD:=12; IF(0<0)OR(511>327145)THEN BAD:=13; IF(MEMMIN<0)OR(MEMMAX>=327145)OR(-0-MEMMIN>327146)THEN BAD:=14; IF(0<0)OR(FONTMAX>511)THEN BAD:=15;IF FONTMAX>256 THEN BAD:=16; IF(SAVESIZE>327145)OR(MAXSTRINGS>327145)THEN BAD:=17; IF BUFSIZE>327145 THEN BAD:=18;IF 511<255 THEN BAD:=19;{:111}{290:} IF 14876>327145 THEN BAD:=21;{:290}{597:} IF DVIBUFSIZE<>2*VAXBLOCKLENGTH THEN BAD:=223;{:597}{1249:} IF 2*327144+1<327144-MEMMIN THEN BAD:=41;{:1249} IF BAD>0 THEN BEGIN WRITELN(TERMOUT, 'Ouch---my internal constants have been clobbered!','---case ',BAD:1,CHR (13),CHR(10));GOTO 9999;END;INITIALIZE; EIGHTQUAL:=ODD( cli$present('EIGHT_BIT')); IF INITFLAG THEN BEGIN IF NOT GETSTRINGSSTARTED THEN GOTO 9999;INITPRIM; INITSTRPTR:=STRPTR;INITPOOLPTR:=POOLPTR;FIXDATEANDTIME;END;1:{1617:} DIAGNAME:=0;GETCOMMANDLINE;IF BATCHQUAL THEN INTERACTION:=0; COPYERR:=IGNOREIT{:1617};{55:}SELECTOR:=17;TALLY:=0;TERMOFFSET:=0; FILEOFFSET:=0;{:55}{61:} WRITE(TERMOUT,'This is e-TeX, Version ','3.14159-2.0', ';fMar06 [PD VMS 3.6f]'); IF FORMATIDENT=0 THEN WRITELN(TERMOUT,' (no format preloaded)',CHR(13), CHR(10))ELSE BEGIN SLOWPRINT(FORMATIDENT);PRINTLN;END; IF ODD(SELECTOR)THEN WRITELN(TERMOUT);{:61}{528:}JOBNAME:=0; NAMEINPROGRESS:=FALSE;LOGOPENED:=FALSE;{:528}{533:}OUTPUTFILENAME:=0; {:533};{1337:}BEGIN{331:}BEGIN INPUTPTR:=0;MAXINSTACK:=0;INOPEN:=0; OPENPARENS:=0;MAXBUFSTACK:=0;GRPSTACK[0]:=0;IFSTACK[0]:=0;PARAMPTR:=0; MAXPARAMSTACK:=0;FIRST:=BUFSIZE;REPEAT BUFFER[FIRST]:=0;FIRST:=FIRST-1; UNTIL FIRST=0;SCANNERSTATUS:=0;WARNINGINDEX:=0;FIRST:=1; CURINPUT.STATEFIELD:=33;CURINPUT.STARTFIELD:=1;CURINPUT.INDEXFIELD:=0; LINE:=0;CURINPUT.NAMEFIELD:=0;FORCEEOF:=FALSE;ALIGNSTATE:=1000000; IF NOT INITTERMINAL THEN GOTO 9999;CURINPUT.LIMITFIELD:=LAST; FIRST:=LAST+1;END{:331};{1379:} IF(BUFFER[CURINPUT.LOCFIELD]=42)AND(FORMATIDENT=1265)THEN BEGIN NONEWCONTROLSEQUENCE:=FALSE;{1380:}PRIMITIVE(1311,70,3); PRIMITIVE(1312,70,6);PRIMITIVE(1313,108,6);{:1380}{1391:} PRIMITIVE(1315,72,11325);PRIMITIVE(1316,73,13223); PRIMITIVE(1317,73,13224);PRIMITIVE(1318,73,13225); PRIMITIVE(1319,73,13226);PRIMITIVE(1320,73,13227); PRIMITIVE(1321,73,13228);PRIMITIVE(1322,73,13229); PRIMITIVE(1323,73,13230);PRIMITIVE(1324,73,13231);{:1391}{1397:} PRIMITIVE(1338,70,7);PRIMITIVE(1339,70,8);{:1397}{1400:} PRIMITIVE(1340,70,9);PRIMITIVE(1341,70,10);PRIMITIVE(1342,70,11);{:1400} {1403:}PRIMITIVE(1343,70,14);PRIMITIVE(1344,70,15); PRIMITIVE(1345,70,16);PRIMITIVE(1346,70,17);{:1403}{1406:} PRIMITIVE(1347,70,18);PRIMITIVE(1348,70,19);PRIMITIVE(1349,70,20); {:1406}{1409:}PRIMITIVE(1350,19,4);{:1409}{1418:}PRIMITIVE(1352,19,5); {:1418}{1420:}PRIMITIVE(1353,109,1);PRIMITIVE(1354,109,5);{:1420}{1423:} PRIMITIVE(1355,19,6);{:1423}{1426:}PRIMITIVE(1359,82,2);{:1426}{1431:} PRIMITIVE(886,49,1);{:1431}{1435:}PRIMITIVE(1363,73,13232); PRIMITIVE(1364,33,6);PRIMITIVE(1365,33,7);PRIMITIVE(1366,33,10); PRIMITIVE(1367,33,11);{:1435}{1480:}PRIMITIVE(1376,104,2);{:1480}{1492:} PRIMITIVE(1378,96,1);{:1492}{1495:}PRIMITIVE(782,102,1); PRIMITIVE(1379,105,17);PRIMITIVE(1380,105,18);PRIMITIVE(1381,105,19); {:1495}{1503:}PRIMITIVE(1259,93,8);{:1503}{1511:}PRIMITIVE(1387,70,25); PRIMITIVE(1388,70,26);PRIMITIVE(1389,70,27);PRIMITIVE(1390,70,28); {:1511}{1534:}PRIMITIVE(1394,70,12);PRIMITIVE(1395,70,13); PRIMITIVE(1396,70,21);PRIMITIVE(1397,70,22);{:1534}{1538:} PRIMITIVE(1398,70,23);PRIMITIVE(1399,70,24);{:1538}{1542:} PRIMITIVE(1400,18,5);PRIMITIVE(1401,110,5);PRIMITIVE(1402,110,6); PRIMITIVE(1403,110,7);PRIMITIVE(1404,110,8);PRIMITIVE(1405,110,9); {:1542}{1594:}PRIMITIVE(1409,24,2);PRIMITIVE(1410,24,3);{:1594}{1597:} PRIMITIVE(1411,84,11313);PRIMITIVE(1412,84,11314); PRIMITIVE(1413,84,11315);PRIMITIVE(1414,84,11316);{:1597} CURINPUT.LOCFIELD:=CURINPUT.LOCFIELD+1;ETEXMODE:=1;{1546:} MAXREGNUM:=32767;MAXREGHELPLINE:=1406;{:1546}END; IF NOT NONEWCONTROLSEQUENCE THEN NONEWCONTROLSEQUENCE:=TRUE ELSE{:1379} IF(FORMATIDENT=0)OR(BUFFER[CURINPUT.LOCFIELD]=38)THEN BEGIN IF FORMATIDENT<>0 THEN INITIALIZE;IF NOT OPENFMTFILE THEN GOTO 9999; IF NOT LOADFMTFILE THEN BEGIN WCLOSE(FMTFILE);GOTO 9999;END; WCLOSE(FMTFILE); WHILE(CURINPUT.LOCFIELD255)THEN CURINPUT.LIMITFIELD:= CURINPUT.LIMITFIELD-1 ELSE BUFFER[CURINPUT.LIMITFIELD]:=EQTB[13216].INT; FIXDATEANDTIME;{765:}MAGICOFFSET:=STRSTART[901]-9*16{:765};{75:} IF INTERACTION=0 THEN SELECTOR:=16 ELSE SELECTOR:=17{:75};{514:} cli$get_value('TEXINPUTS',INPNAME,INPLEN); BEGIN IF POOLPTR+INPLEN>POOLSIZE THEN OVERFLOW(258,POOLSIZE-INITPOOLPTR) ;END;FOR I:=1 TO INPLEN DO BEGIN STRPOOL[POOLPTR]:=XORD[INPNAME[I]]; POOLPTR:=POOLPTR+1;END;TEXAREA:=MAKESTRING; cli$get_value('TEXFONTS',FONTSNAME,FONTSLEN); BEGIN IF POOLPTR+FONTSLEN>POOLSIZE THEN OVERFLOW(258,POOLSIZE- INITPOOLPTR);END; FOR I:=1 TO FONTSLEN DO BEGIN STRPOOL[POOLPTR]:=XORD[FONTSNAME[I]]; POOLPTR:=POOLPTR+1;END;TEXFONTAREA:=MAKESTRING{:514}; IF(CURINPUT.LOCFIELD0)THEN STARTINPUT;END{:1337};HISTORY:=0;MAINCONTROL; FINALCLEANUP;9998:CLOSEFILESANDTERMINATE; 9999:IF LOGOPENED THEN BEGIN IF LOGQUAL THEN WRITELN(LOGFILE); ACLOSE(LOGFILE);SELECTOR:=SELECTOR-2; IF SELECTOR=17 THEN BEGIN IF LOGQUAL THEN BEGIN PRINTNL(1283); SLOWPRINT(LOGNAME);PRINTCHAR(46);END ELSE PRINTNL(1284);END;END;{1600:} SYMBOLJOBNAME;CASE HISTORY OF 0:$exit( sts$k_success ); 1:$exit( sts$k_warning+sts$m_inhib_msg ); 2:$exit( sts$k_error+sts$m_inhib_msg ); 3:$exit( sts$k_severe+sts$m_inhib_msg )END{:1600};END.{:1332}