COMMA ? SEMICOLON # PERCENT ~ QUOTE ! PLIPUNCH Y INDENT Y VERTBAR | TITLE SPA:WN PROGRAM IN PASCAL / PROGRAM WARNIER(INFLE,OUTFLE,PLIPUNCH,OUTDIAG,SRCPUNCH);?? ?(*DECLARATIONS*)?? ?(*PROCEDURES*)?? ?(*MAIN ROUTINE*)?# (*DECLARATIONS*)?? ?CONST?? ?TYPE?? ?VAR!10?# TYPE?? ?WPTRT=@WNODE;~LPTRT=@LINEORD;~QPTRT=@QEL;~SPPTRT=@STRP;?? ?(*MORE TYPES*)?? ?(T*TDSTRING = STRING[8];*T)?? ?(8*CARDIMAGE=PACKED ARRAY[1..MAXLLIP1] OF CHAR;*8)?? ?(*ARBITRARY DEEPENER*)?# (8*CARDIMAGE=PACKED ARRAY[1..MAXLLIP1] OF CHAR;*8)?? ?(T*CARDIMAGE=STRING[MAXLLIP1];*T)?# (*MORE TYPES*)?? ?VMT=PACKED ARRAY[1..MAXLLO] OF CHAR;?? ?WORDT=PACKED ARRAY[1..9] OF CHAR;?? ?STRPGTP=PACKED ARRAY[1.~.LENSTRPGS] OF CHAR;?# (*ARBITRARY DEEPENER*)?? ?(*RECORD DECLARATIONS*)?? ?THREEDIG=(8*PACKED ARRAY[1..3] OF CHAR*8)~(T*STRING[3]*T);?? ?BRKCHRS=SET OF CHAR;?# VAR!10?? ?LNOEC,PCNTEC,GMXD,PCNT,NCT,NPCNT,LPCNT,NQ,GMXH,PASSCNT,?? ?WHEAD,WLAST,H,TWPTR,T,WNTOP,FRPTR,BRPTR:WPTRT;?? ?LPG,CPAGE:SPPTRT;?? ?LOTOP:LPTRT;?? ?QH,QR,FPORD,TPTR,QLTOP:QPTRT;?? ?(*ARRAYS & STRINGS*)?? ?BREAKERS,PRES,POSTS,INDIFFS:BRKCHRS;?? ?TAB,ICH,COM,SEMI,PCT,PEJ,QOT,SUPERZERO,SUPERNINE:CHAR;?? ?PLIFLAG,INDFLAG,SRCFLAG,PRINTABLE:BOOLEAN;?? ?INFLE,OUTFLE,PLIPUNCH,OUTDIAG,SRCPUNCH:TEXT;?# LNOEC,PCNTEC,GMXD,PCNT,NCT,NPCNT,LPCNT,NQ,GMXH,PASSCNT,?? +?ECPL,COLPP,DGMPL,LPP,TOPM,LLO,LLOM4,LLI,LLIM4,LLIP1,CTRL,?# +ECPL,COLPP,DGMPL,LPP,TOPM,LLO,LLOM4,LLI,LLIM4,LLIP1,CTRL,?? +?TITLEN,LASTNQ,NODEWIDTH,PREWIDTH,NODEWPPW,NODEWPP3,?# +TITLEN,LASTNQ,NODEWIDTH,PREWIDTH,NODEWPPW,NODEWPP3,?? +?I,J,NDDN,CHDEL,GST,NQLIM,RETC,DISAMNO,NSP,LSP,FROFF,BROFF:INTEGER;?# CONST?? ?NMDEL=(T*13*T)~(8*64*8);~MAXCPP=10;~MAXNW=30;~MAXPW=10;~MAXLLO=160;?# NMDEL=(T*13*T)~(8*64*8);MAXCPP=10;MAXNW=30;MAXPW=10;MAXLLO=160;?? ?MAXLLIP1=161;~MAXDEPTH=40;~NBRSTRPGS=20;~LENSTRPGS=5000;DDSTL=100;?# MAXLLIP1=161;MAXDEPTH=40;NBRSTRPGS=20;LENSTRPGS=5000;DDSTL=100;?? ?(*CHARACTER CONSTANTS*)?# (*CHARACTER CONSTANTS*)?? ?REGZERO='0';~CAPA='A';~SMALLA='a';?? ?HD1='ECHO OF INPUT / DIAGNOSTIC LOG';?# (*RECORD DECLARATIONS*)?? ?(*WARNIER NODE DEFINITION~*)?? ?LINEORD=RECORD~---~END (*LINEORD NODE DEFINITION~*);?? ?STRP=RECORD ~STRNG:STRPGTP;~END (*STRP DEFINITION*);?? ?(*PAGE QEL NODE DEFINITION *)?# (*WARNIER NODE DEFINITION*)?? ?WNODE=PACKED RECORD~---~END;?# WNODE=PACKED RECORD~---~END;?? ?(*POINTER TO SUBPAGE QUEUE ELEMENT IN PAGINATION*)?? ?(*(NEXT LVL, BACK, NEXT BRO)WARNIER POINTERS,(LEFT,RIGHT)LEX PTRS*)?? ?(*START,LOCAL START,(NODE,REP) STRING OFFSET,MAXMOVE*)?? ?(*LEN(PRE,VAL,INFX,REP,OUT),LVL,LINES/NODE,LCL DEPTH,(STR,REP)PGNO*)?# (*LEN(PRE,VAL,INFX,REP,OUT),LVL,LINES/NODE,LCL DEPTH,(STR,REP)PGNO*)?? ?LP,LV,LI,LR,LO,LVL,LPN,LD,SPN,RSPN:CHAR?# (*START,LOCAL START,(NODE,REP) STRING OFFSET,MAXMOVE*)?? ?ST,LS,NDSOFF,RPSOFF,MXM:INTEGER;?# (*POINTER TO SUBPAGE QUEUE ELEMENT IN PAGINATION*)?? ?SUBPAGE:QPTRT;?# (*(NEXT LVL, BACK, NEXT BRO)WARNIER POINTERS,(LEFT,RIGHT)LEX PTRS*)?? ?NLVL,BCK,NXT,LLINK,RLINK:WPTRT;?# LINEORD=RECORD~---~END (*LINEORD NODE DEFINITION*);?? ?(*CURRENT NODE OF COUSIN SET*)?? ?WPTR:WPTRT;?? ?(*NEXT SET OF COUSINS*)?? ?NXTSC:LPTRT;?? ?(*START POSITION, LAST POSITION IN LAYOUT*)?? ?STARTP,LASTP:INTEGER?# (*PAGE QEL NODE DEFINITION *)?? ?QEL=PACKED RECORD~---~END;?# QEL=PACKED RECORD~---~END;?? ?(*DEWEY DECIMAL STRING*)?? ?(*FORWARD AND BACKWARD IN QUEUE*)?? ?(*POINTERS*)?? ?(*FULLWORD HELD VALUES, PRIORITY*)?? ?(*BYTE HELD VALUES*)?# (*FULLWORD HELD VALUES, PRIORITY*)?? ?PRTY,LSPH,STSH,STPH,NDSOFFH:INTEGER;?# (*BYTE HELD VALUES*)?? ?LPH,LVH,LIH,LRH,LPNH,SPNH,LDPH,DDL:CHAR?# (*DEWEY DECIMAL STRING*)?? ?DDNSTR:(8*PACKED ARRAY[1..DDSTL] OF CHAR*8)~(T*STRING[DDSTL]*T);?# (*FORWARD AND BACKWARD IN QUEUE*)?? ?NEXTQ,LASTQ:QPTRT;?# (*POINTERS*)?? ?SPPTR,NXTH,NLVLH:WPTRT;?# (*ARRAYS & STRINGS*)?? ?KEYS:ARRAY[1..22] OF WORDT;?? ?START,REAR:ARRAY[1..MAXCPP] OF LPTRT;?? ?SPADDR:ARRAY[1..NBRSTRPGS] OF SPPTRT;?? ?BP,NP,NNE,NBE:ARRAY[1.~.MAXCPP] OF INTEGER;?? ?(*CHARACTER VARS*)?? ?MAXLEN:ARRAY[1..3] OF INTEGER;?? ?MAXM,TOTWIDTH:ARRAY[1.~.MAXDEPTH] OF INTEGER;?# (*CHARACTER VARS*)?? ?(8*BLNW:PACKED ARRAY[1..MAXNW] OF CHAR;*8)?? ?(T*BLNW:STRING[MAXNW];*T)?? ?(*DEWEY DECIMAL HOLDERS*)?? ?HDRPC:(8*PACKED ARRAY[1..24] OF CHAR*8)~(T*STRING[24]*T);?? ?BACKREF:(8*PACKED ARRAY[1..28] OF CHAR*8)~(T*STRING[28]*T);?? ?CSTR:(8*PACKED ARRAY[1..47] OF CHAR*8)~(T*STRING[47]*T);?? ?CPN:THREEDIG;?? ?(*MORE ARRAYS*)?? ?VBAR,TBR,BBR:PACKED ARRAY[1..3] OF CHAR;?? ?TITLE,EWDL,LCEWDL,BLANKV,TVAL:VMT;?? ?INCARD:CARDIMAGE;~WORD:WORDT;?# (*DEWEY DECIMAL HOLDERS*)?? ?DDN,PDN:(8*PACKED ARRAY[1..DDSTL] OF CHAR*8)~(T*STRING[DDSTL]*T);?# (*MORE ARRAYS*)?? ?CN1,CN2,CN3:(8*PACKED ARRAY[1..60] OF CHAR*8)~(T*STRING[60]*T);?? ?NOTITLE,EWD,LCEWD,SEEPG:PACKED ARRAY[1..24] OF CHAR;?? ?TINFX,TREP:(8*PACKED ARRAY[1..12] OF CHAR*8)~(T*STRING[12]*T);?? ?TPRE:(8*PACKED ARRAY[1..MAXPW] OF CHAR*8)~(T*STRING[MAXPW]*T);?? ?D,TIM:(8*PACKED ARRAY[1..8] OF CHAR*8)~(T*STRING[8]*T);?# (*PROCEDURES*)?? ?(*GENERAL SUPPORT ROUTINES*)?? ?PROCEDURE INITIALIZE;~VAR I:INTEGER;~BEGIN;~---~END;?? ?(*INPUT PHASE ROUTINES*)?? ?PROCEDURE SRCOUT(PPTR:WPTRT);?? ?PROCEDURE PLIOUT(TPTR:WPTRT);?? ?(*LOGICAL LAYOUT PHASE ROUTINES*)?? ?(*PHYSICAL OUTPUT PHASE ROUTINES*)?# (*GENERAL SUPPORT ROUTINES*)?? ?(T*(*$I TIMEDATE.PAS*)*T)?? ?PROCEDURE CONVERT(I:INTEGER;~VAR TPN:THREEDIG);?? ?PROCEDURE OUTP;?? ?PROCEDURE NEWNODE;?# PROCEDURE NEWNODE;?? ?BEGIN~---~END;!141?# BEGIN~---~END;!141?? ?IF WNTOP<>NIL THEN BEGIN~---~END ~ELSE ~NEW(TWPTR);?? ?(*INIT NODE*)?# (*INIT NODE*)?? ?WITH TWPTR@ DO ~BEGIN~---~END;!887?# IF WNTOP<>NIL THEN BEGIN~---~END ELSE NEW(TWPTR);?? ?TWPTR:=WNTOP;~WNTOP:=TWPTR@.NXT?# WITH TWPTR@ DO BEGIN~---~END;!887?? ?SUBPAGE:=NIL;~NLVL:=NIL;~BCK:=NIL;~NXT:=NIL;?? ?LLINK:=NIL;~RLINK:=NIL;~LD:=CHR(0);?? ?LI:=CHR(0);~LR:=CHR(0);~RSPN:=CHR(0);~RPSOFF:=0;~LS:=0; MXM:=0;?? ?SPN:=CHR(NSP);~NDSOFF:=LSP?# PROCEDURE INITIALIZE;VAR I:INTEGER;BEGIN;~---~END;?? ?BACKREF:='**(REPEATED FROM PAGE000)** ';?? ?SEEPG:='**SEE PAGE000** ';?? ?EWD:='ENDWARNIERDIAGRAM ';?? ?LCEWD:='endwarnierdiagram ';?? ?(*CHARACTERS*)?? ?ICH:=' ';~COM:=',';~SEMI:=';';~PCT:='%';~QOT:='"';?? ?PCNTEC:=0;~NDDN:=4?# (*CHARACTERS*)?? ?(T*DDN:='ROOT '+*T)?? ?(8*DDN[1]:='R';~DDN[2]:='O';~DDN[3]:='O';~DDN[4]:='T';~*8)?? ?(8*FOR I:=5 TO DDSTL DO DDN[I]:=' ';*8)?? ?HDRPC:='SPA:WN 1.5 PAGE';?? ?NOTITLE:='UNTITLED WARNIER DIAGRAM';?? ?(*XREFS,KEYS*)?? ?CSTR:='MAYaGS4bcDJPV17.defBEHKNQTWZ258ghijCFILORUX0369';?? ?(8*VBAR:=' ^ '~*8)~(T*VBAR:=' | '~*T);?? ?TBR:=' .-';~BBR:=' ''-';?? ?(8*PEJ:='1'*8)~(T*PEJ:=CHR(12)~*T);?# (T*DDN:='ROOT '+*T)?? +?(T* ' ';*T)?# (*XREFS,KEYS*)?? ?KEYS[1]:='COMMA ';~KEYS[2]:='TITLE ';~KEYS[3]:='QUOTE ';?? ?(*TRAILERS*)?? ?KEYS[4] :='SEMI ';~KEYS[5] :='SRCPUNCH ';~KEYS[6] :='PLIPUNCH ';?? ?KEYS[7] :='SEMICOLON';~KEYS[8] :='INDENT ';~KEYS[9] :='VERTBAR ';?? ?KEYS[10]:='PERCENT ';~KEYS[11]:='TOPBRACK ';?? ?(*MORE KEYS*)?? ?KEYS[21]:='LENLININ ';~KEYS[22]:=~' ';?# (*MORE KEYS*)?? ?KEYS[12]:='BOTBRACK ';~KEYS[13]:='DIAGCOLS ';~KEYS[14]:='DIAGPAGEL';?? ?KEYS[15]:='NODEWIDTH';~KEYS[16]:='PREFWIDTH';~KEYS[17]:='ECHOPAGEL';?? ?KEYS[18]:='LINESPHYS';~KEYS[19]:='TOPMARGIN';~KEYS[20]:='LENLINOUT';?# (*TRAILERS*)?? ?CN1:=' SPA:WN - STRUCTURED PROGRAMMING AUTOMATED: WARNIER NOTATION';?? ?CN2:=' COPYRIGHT 1984, KSU RESEARCH FOUNDATION, MANHATTAN,KS 66506';?? ?CN3:=' LICENSE GRANTED TO COPY, BUT NOT FOR SALE OR PROFIT ';?# PROCEDURE CONVERT(I:INTEGER;VAR TPN:THREEDIG);?? ?(*PRODUCE THREE DIGIT CHARACTER EQUIVALENT OF ~I*)?? ?BEGIN~---~END(*CONVERT SUBROUTINE*);?# BEGIN~---~END(*CONVERT SUBROUTINE*);?? ?IF I>1000 THEN I:=I MOD 1000;?? ?IF I>=10 THEN BEGIN~---~END;?? ?TPN[3]:=CHR(ORD(REGZERO)+I)?# IF I>1000 THEN I:=I MOD 1000;?? ?IF I>=100 THEN BEGIN~---~END?-XOR-? ?ELSE BEGIN~---~END;!CON1?# IF I>=100 THEN BEGIN~---~END?<3 DIGITS>? ?TPN[1]:=CHR(ORD(REGZERO)+I DIV 100);?? ?TPN[2]:='0'; ~I:=I MOD 100?# IF I>=10 THEN BEGIN~---~END;?<2 DIGITS>? ?TPN[2]:=CHR(ORD(REGZERO)+I DIV 10);?? ?I:=I MOD 10?# ELSE BEGIN~---~END;!CON1?? ?TPN[1]:=' '; ~TPN[2]:=' '?# PROCEDURE OUTP;?? ?(*ADVANCE LINENO, PAGINATE IN ECHOFILE*)?? ?BEGIN~---~END (*PROCEDURE OUTP*);?# BEGIN~---~END (*PROCEDURE OUTP*);?? ?LNOEC:=SUCC(LNOEC);?# LNOEC:=SUCC(LNOEC);?? ?IF LNOEC>ECPL THEN BEGIN~---~END?# IF LNOEC>ECPL THEN BEGIN~---~END?<1/PAGE>? ?PCNTEC:=SUCC(PCNTEC);~LNOEC:=3;?? ?WRITELN(OUTDIAG,PEJ,HD1:32,' ':64,HDRPC,PCNTEC:3);?? ?WRITELN(OUTDIAG,~' ')?# (*INPUT PHASE ROUTINES*)?? ?PROCEDURE INFILE(VAR INCARD:CARDIMAGE);?? ?PROCEDURE HEADERS;?? ?PROCEDURE LATTACH(T,N:WPTRT);?? ?FUNCTION NLINES(T:WPTRT):INTEGER;?? ?FUNCTION WHFIND(RPTR:WPTRT):BOOLEAN;?? ?FUNCTION PARSE(M:CHAR;T:WPTRT):INTEGER;?# PROCEDURE HEADERS;?? ?VAR TOK:CHAR;~HDRCARD:BOOLEAN;~I,J:INTEGER;?? ?PROCEDURE NUM(VAR VAL:INTEGER);~BEGIN;~---~END;?? ?BEGIN~---~END;!221?# BEGIN~---~END;!221?? ?(*PARSE HEADER CARD(S)*)?# PROCEDURE NUM(VAR VAL:INTEGER);BEGIN;~---~END;?? ?VAL:=ORD(TOK)-ORD(REGZERO);?? ?I:=SUCC(I);?# I:=SUCC(I);?? ?WHILE INCARD[I]<>' ' DO ~BEGIN;~---~END?# VAL:=ORD(TOK)-ORD(REGZERO);?? ?IF (VAL<0) OR (VAL>9) THEN BEGIN~---~END;?# IF (VAL<0) OR (VAL>9) THEN BEGIN~---~END;?? ?OUTP;WRITELN(OUTDIAG,' ***** NON-NUMERIC FOUND UNEXPECTEDLY: ',TOK);?# WHILE INCARD[I]<>' ' DO BEGIN;~---~END?? ?VAL:=VAL*10+ORD(INCARD[I])-ORD(REGZERO);?? ?I:=SUCC(I)?# PROCEDURE INFILE(VAR INCARD:CARDIMAGE);?? ?(*READ INPUT RECORD, SKIP COMMENTS*)?? ?BEGIN~---~END(*OF INFILE PROCEDURE*);?# BEGIN~---~END(*OF INFILE PROCEDURE*);?? ?(T*INCARD:=BLANKV*T);?? ?READLN(INFLE,INCARD);?? ?(*ASTERISK IN COLUMN 1 ==> SPA:WN COMMENT*)?? ?WHILE INCARD[1]='*' DO BEGIN~---~END?# WHILE INCARD[1]='*' DO BEGIN~---~END?? ?OUTP;WRITELN(OUTDIAG,' ',(8*INCARD:LLO*8)(T*COPY(INCARD,1,LLO)*T));?? ?IF SRCFLAG THEN WRITELN(SRCPUNCH,INCARD);?? ?READLN(INFLE,INCARD)?# IF SRCFLAG THEN WRITELN(SRCPUNCH,INCARD);?? ?INCARD[1]~:=' ';?? ?IF PLIFLAG THEN WRITELN(PLIPUNCH,INCARD);?? ?(T*INCARD:=BLANKV*T);?# PROCEDURE LATTACH(T,N:WPTRT);?? ?VAR SEARCHING,INWORD:BOOLEAN;?? ?(*ATTACH NODE IN LEXICAL ~TREE*)?# (*ATTACH NODE IN LEXICAL TREE*)?? ?BEGIN~---~END (*LATTACH FUNCTION*);?# VAR SEARCHING,INWORD:BOOLEAN;?? ?I,J:INTEGER;~TCH:CHAR;~LPG:SPPTRT;?# BEGIN~---~END (*LATTACH FUNCTION*);?? ?SEARCHING:=TRUE;?? ?WHILE SEARCHING DO WITH T@ DO ~BEGIN~---~END?# WHILE SEARCHING DO WITH T@ DO BEGIN~---~END?? ?INWORD:=TRUE;~LPG:=SPADDR[ORD(SPN)];?? ?J:=1;~I:=NDSOFF;?? ?WHILE INWORD DO BEGIN~---~END!195?# WHILE INWORD DO BEGIN~---~END!195?? ?TCH:=LPG@.STRNG[I];?? ?IF TVAL[J]=TCH THEN BEGIN~---~END?-XOR-? ?ELSE IF TVAL[J]>TCH THEN ~BEGIN~---~END?-XOR-? ?ELSE (*TVAL[J]TCH THEN BEGIN~---~END?? ?INWORD:=FALSE;?? ?IF RLINK=NIL THEN BEGIN~---~END?-XOR-? ?ELSE ~T:=RLINK?# IF RLINK=NIL THEN BEGIN~---~END?? ?RLINK:=N;~SEARCHING:=FALSE?# ELSE (*TVAL[J]? ?(*EXTEND IT ONCE*)?# (*EXTEND IT ONCE*)?? ?INWORD:=FALSE;?? ?IF LLINK=NIL THEN BEGIN~---~END?-XOR-? ?ELSE ~T:=LLINK?# IF LLINK=NIL THEN BEGIN~---~END?? ?LLINK:=N;~SEARCHING:=FALSE?# IF TVAL[J]=TCH THEN BEGIN~---~END?? ?I:=SUCC(I);~J:=SUCC(J);?? ?IF LPG@.STRNG[I]=PCT THEN ~I:=SUCC(I);?? ?IF TVAL[J]=PCT THEN ~J:=SUCC(J);?? ?IF J>ORD(N@.LV) THEN BEGIN~---~END?-XOR-? ?ELSE IF I>=NDSOFF+ORD(LV) THEN BEGIN~---~END?# IF J>ORD(N@.LV) THEN BEGIN~---~END?? ?(*END OF NEW NODE REACHED*)?? ?INWORD:=FALSE;?? ?IF I=NDSOFF+ORD(LV) THEN BEGIN~---~END?? ?INWORD:=FALSE;~IF RLINK<>NIL THEN ~T:=RLINK ~ELSE BEGIN~---~END?# INWORD:=FALSE;IF RLINK<>NIL THEN T:=RLINK ELSE BEGIN~---~END?? ?RLINK:=N;~SEARCHING:=FALSE?# IF INIL THEN ~T:=LLINK ~ELSE BEGIN~---~END?# IF LLINK<>NIL THEN T:=LLINK ELSE BEGIN~---~END?? ?LLINK:=N;~SEARCHING:=FALSE?# ELSE (*END OF BOTH NODES REACHED*)BEGIN~---~END!212?? ?(*INTO DISAMBIGUATION*)?? ?IF RLINK<>NIL THEN?-XOR-? ?ELSE BEGIN~---~END!225?# (*INTO DISAMBIGUATION*)?? ?T@.LD:=CHR(SUCC(ORD(T@.LD)));?? ?IF ORD(N@.LV)<=LLOM4 THEN BEGIN~---~END?-XOR-? ?ELSE BEGIN~---~END;!240?# ELSE BEGIN~---~END;!240?? ?OUTP;WRITELN(OUTDIAG,' ***** NODE TOO BIG TO DISAMBIGUATE.')?# IF ORD(N@.LV)<=LLOM4 THEN BEGIN~---~END?? ?DISAMNO:=SUCC(DISAMNO);?? ?(*SUPPLY THE CHARACTERS*)?? ?N@.LV:=CHR(ORD(N@.LV)+4)?# (*SUPPLY THE CHARACTERS*)?? ?TVAL[ORD(N@.LV)+1]:=QOT;?? ?TVAL[ORD(N@.LV)+2]:=QOT;?? ?TVAL[ORD(N@.LV)+3]:=CSTR[(1+DISAMNO DIV 47)];?? ?TVAL[ORD(N@.LV)+4]:=CSTR[(1+DISAMNO MOD 47)];?# IF RLINK<>NIL THEN?? ?(*LET SEARCH GO ON -- NOT DONE YET*)~T:=RLINK?# ELSE BEGIN~---~END!225?? ?RLINK:=N;SEARCHING:=FALSE?# FUNCTION WHFIND(RPTR:WPTRT):BOOLEAN;?? ?VAR RESULT,INWORD:BOOLEAN;?? ?I,J:INTEGER;~TCH:CHAR;~LPG:SPPTRT;?? ?BEGIN~---~END (*WHFIND FUNCTION*);?# BEGIN~---~END (*WHFIND FUNCTION*);?? ?(*SEARCH TREE*)?? ?IF RPTR=NIL THEN BEGIN~---~END?-XOR-? ?(*FAILS IF PARENT AMBIGUOUS*)?? ?(*OR IF ALREADY A PARENT*)?? ?ELSE ~WITH RPTR@ DO ~BEGIN~---~END;?? ?WHFIND:=RESULT?# (*SEARCH TREE*)?? ?(*FIND WARNIER PARENT NODE IN EXISTING LEXICAL TREE*)?? ?RESULT:=FALSE;?? ?WHILE (RPTR<>NIL) AND (NOT RESULT) DO?+++? ?WITH RPTR@ DO ~BEGIN~---~END;?# WITH RPTR@ DO BEGIN~---~END;?? ?INWORD:=TRUE;~LPG:=SPADDR[ORD(SPN)];?? ?J:=1;~I:=NDSOFF;?? ?WHILE INWORD DO BEGIN~---~END?# WHILE INWORD DO BEGIN~---~END?? ?TCH:=LPG@.STRNG[I];?? ?IF TVAL[J]=TCH THEN BEGIN~---~END!248?-XOR-? ?ELSE IF TVAL[J]>TCH THEN ~BEGIN~---~END!246?-XOR-? ?ELSE (*TVAL[J]TCH THEN BEGIN~---~END!246?? ?RPTR:=RLINK;~INWORD:=FALSE?# ELSE (*TVAL[J]? ?RPTR:=LLINK;~INWORD:=FALSE?# IF TVAL[J]=TCH THEN BEGIN~---~END!248?? ?I:=SUCC(I);~J:=SUCC(J);?? ?IF LPG@.STRNG[I]=PCT THEN ~I:=SUCC(I);?? ?IF TVAL[J]=PCT THEN ~J:=SUCC(J);?? ?IF J>ORD(TWPTR@.LV) THEN BEGIN~---~END?-XOR-? ?ELSE IF I>=NDSOFF+ORD(LV) THEN BEGIN~---~END!292?# ELSE IF I>=NDSOFF+ORD(LV) THEN BEGIN~---~END!292?? ?INWORD:=FALSE;~RPTR:=RLINK?# IF J>ORD(TWPTR@.LV) THEN BEGIN~---~END?? ?INWORD:=FALSE;?? ?IF I0 THEN BEGIN~---~END;?? ?WLAST:=RPTR;?? ?IF NLVL<>NIL THEN BEGIN~---~END;?? ?IF ORD(LVL)+1>GMXD THEN ~GMXD:=ORD(LVL)+1;?? ?IF GMXD>MAXDEPTH THEN BEGIN~---~END?# IF GMXD>MAXDEPTH THEN BEGIN~---~END?? ?OUTP;WRITELN(OUTDIAG,' ***** MAXIMUM LOGICAL DEPTH EXCEEDED.');?? ?PRINTABLE:=FALSE?# IF ORD(LD)<>0 THEN BEGIN~---~END;?? ?RESULT:=FALSE;?? ?OUTP;WRITELN(OUTDIAG,' ***** PARENT NODE IS AMBIGUOUS.')?# IF NLVL<>NIL THEN BEGIN~---~END;?? ?RESULT:=FALSE;?? ?OUTP;WRITELN(OUTDIAG,' ***** ALREADY A PARENT.')?# FUNCTION PARSE(M:CHAR;T:WPTRT):INTEGER;?? ?VAR I,II,J,K,JL,RESULT:INTEGER;~LABEL 10;?? ?(*PARSE NODES FROM INPUT STREAM*)?? ?BEGIN~---~10:PARSE:=RESULT ~END(*PARSE FUNCTION*);?# BEGIN~---~10:PARSE:=RESULT END(*PARSE FUNCTION*);?? ?CASE M OF~---~END;!8?? ?I:=1;~J:=1;?? ?(*BLANKS*)?? ?FOR K:=II TO 3 DO BEGIN ~---~END;?? ?I:=PRED(I);?? ?CASE M OF~---~END;?? ?(8*II:=I+5*8);~(8*IF II>LLI THEN ~II:=LLI*8);?? ?(*CHECK NEXT CHARS*)?# CASE M OF~---~END;!8?? ?'H':BEGIN~---~END;?-XOR-? ?'C':II:=1?# 'H':BEGIN~---~END;?? ?II:=2;~T@.LP:=CHR(0);~T@.LI:=CHR(0)?# (*BLANKS*)?? ?WHILE(I<=LLI)AND((INCARD[I]=~' ')OR(INCARD[I]=TAB))DO ~I:=SUCC(I);?? ?(*IF ALL BLANKS~*)?# (*IF ALL BLANKS*)?? ?IF I>LLI THEN BEGIN~---~END;!69?# IF I>LLI THEN BEGIN~---~END;!69?? ?OUTP;WRITELN(OUTDIAG,' ***** BLANK LINE ENCOUNTERED.');?? ?RESULT:=2;~GOTO 10?# FOR K:=II TO 3 DO BEGIN ~---~END;?? ?JL:=MAXLEN[K]+1;?? ?WHILE (I<=LLI) AND (INCARD[I]<>COM) AND (INCARD[I]<>SEMI)?? ?IF (TVAL=EWDL) OR (TVAL=LCEWDL) THEN BEGIN~---~END;?? ?IF I>LLI THEN BEGIN~---~END;?? ?IF J=JL THEN?? ?I:=SUCC(I);?? ?CASE K OF~---~END!104?# WHILE (I<=LLI) AND (INCARD[I]<>COM) AND (INCARD[I]<>SEMI)?? +?AND (JCOM THEN BEGIN~---~END;?? ?RESULT:=0?# IF INCARD[I]<>COM THEN BEGIN~---~END;?? ?OUTP;WRITELN(OUTDIAG,' ***** COMMA MUST CLOSE PARENT.');?? ?RESULT:=2;~GOTO 10?# 'C':BEGIN~---~END?? ?IF INCARD[I]=COM THEN ~RESULT:=3;?? ?IF INCARD[I]=SEMI THEN ~RESULT:=4?# IF (TVAL=EWDL) OR (TVAL=LCEWDL) THEN BEGIN~---~END;?? ?RESULT:=1;~GOTO 10?# IF J=JL THEN?? ?IF (INCARD[I]~<>COM) AND (INCARD[I]<>SEMI) THEN BEGIN~---~END;?# IF (INCARD[I]<>COM) AND (INCARD[I]<>SEMI) THEN BEGIN~---~END;?? ?OUTP;WRITELN(OUTDIAG,' ***** COMMA ABSENT --OR--',?? ?WHILE (I<=LLIM4) AND (INCARD[I]<>COM)?+++? ?AND (INCARD[I]~<>SEMI) DO BEGIN~---~END;?? ?IF (TVAL=EWDL) OR (TVAL=LCEWDL) THEN RESULT:=1 ELSE RESULT:=2;?? ?J:=JL; ~GOTO 10?# OUTP;WRITELN(OUTDIAG,' ***** COMMA ABSENT --OR--',?? +?' FIELD TOO LONG. TRUNCATED.');?# AND (INCARD[I]<>SEMI) DO BEGIN~---~END;?? ?IF (M='C') THEN IF (K=1) THEN IF (J<=LLIM4) THEN BEGIN~---~END;?? ?(*IDLE TO PUNCT~*)?? ?I:=SUCC(I)?# IF (M='C') THEN IF (K=1) THEN IF (J<=LLIM4) THEN BEGIN~---~END;?? ?TVAL[J]:=INCARD[I];~J:=SUCC(J)?# IF I>LLI THEN BEGIN~---~END;?? ?OUTP;WRITELN(OUTDIAG,' ***** PUNCTUATION MISSING.');?? ?RESULT:=2;~GOTO 10?# CASE K OF~---~END!104?? ?1:T@.LP:=~CHR(J-1);?-XOR-? ?2:BEGIN~---~END;?-XOR-? ?3:CASE M OF~---~END?# 2:BEGIN~---~END;?? ?IF J=1+ORD(T@.LP) THEN BEGIN~---~END;?? ?T@.LV:=CHR(J-1);~J:=1?# IF J=1+ORD(T@.LP) THEN BEGIN~---~END;?? ?OUTP;WRITELN(OUTDIAG,' ***** INCORRECT LEADING COMMA --OR--',?? ?RESULT:=2;~GOTO 10?# OUTP;WRITELN(OUTDIAG,' ***** INCORRECT LEADING COMMA --OR--',?? +?' NULL NODE VALUE. DISALLOWED.');?# 3:CASE M OF~---~END?? ?'H':T@.LR:=~CHR(J-1);?-XOR-? ?'C':T@.LI:=~CHR(J-1)?# (*CHECK NEXT CHARS*)?? ?FOR I:=SUCC(I) TO (8*II*8)~(T*LENGTH(INCARD)~*T) DO BEGIN~---~END;?# FOR I:=SUCC(I) TO (8*II*8)(T*LENGTH(INCARD)*T) DO BEGIN~---~END;?? ?IF INCARD[I]<>' ' THEN BEGIN~---~END!403?# IF INCARD[I]<>' ' THEN BEGIN~---~END!403?? ?OUTP;WRITELN(OUTDIAG,' ***** EXTRA FIELD PRESENT.');?? ?GOTO 10?# PROCEDURE SRCOUT(PPTR:WPTRT);?? ?VAR TPTR:WPTRT;?? ?LPG:SPPTRT;?? ?OUTLINE:VMT;?? ?I,J,K:INTEGER;?? ?(*OUTPUT WARNIER SOURCE CODE*)?? ?BEGIN~---~END;(*PROCEDURE SRCOUT*)?# BEGIN~---~END;(*PROCEDURE SRCOUT*)?? ?OUTLINE:=BLANKV;~LPG:=SPADDR[ORD(PPTR@.~SPN)];?? ?WITH PPTR@ DO?? ?(*PREPARE PARENT NODE*)?? ?OUTLINE[I]:=COM;?? ?WRITELN(SRCPUNCH,OUTLINE:I);?? ?TPTR:=PPTR@.NLVL;?? ?(*OUTPUT THE CHILDREN*)?? ?WHILE TPTR<>NIL DO WITH TPTR@ DO BEGIN~---~END;!387?? ?TPTR:=PPTR@.NLVL;?? ?(*DO RECURSION*)?? ?WHILE TPTR<>NIL DO WITH TPTR@ DO BEGIN~---~END!389?# WITH PPTR@ DO?? ?IF INDFLAG AND(ORD(LV)+ORD(LR)+ORD(LVL)<=LLO)THEN BEGIN~---~END?-XOR-? ?ELSE I:=2;?# IF INDFLAG AND(ORD(LV)+ORD(LR)+ORD(LVL)<=LLO)THEN BEGIN~---~END?? ?FOR I:=1 TO ORD(LVL) DO OUTLINE[I]:=ICH;?? ?I:=ORD(LVL)+1?# (*PREPARE PARENT NODE*)?? ?(*DO NODE ~VALUE*)~K:=PPTR@.NDSOFF;?? ?OUTLINE[I]:=COM;~I:=SUCC(I);?? ?IF ORD(PPTR@.LR)<>0 THEN~(*DO REPETITION FACTOR*)~BEGIN~---~END;?# (*DO NODE VALUE*)K:=PPTR@.NDSOFF;?? ?FOR J:=1 TO ORD(PPTR@.LV) DO BEGIN~---~END;?# IF ORD(PPTR@.LR)<>0 THEN(*DO REPETITION FACTOR*)BEGIN~---~END;?? ?K:=PPTR@.RPSOFF;?? ?FOR J:=1 TO ORD(PPTR@.LR) DO BEGIN~---~END?# K:=PPTR@.RPSOFF;?? ?LPG:=SPADDR[ORD(PPTR@.~RSPN)];?# FOR J:=1 TO ORD(PPTR@.LV) DO BEGIN~---~END;?? ?OUTLINE[I]:=LPG@.STRNG[K];~I:=SUCC(I);~K:=SUCC(K)?# FOR J:=1 TO ORD(PPTR@.LR) DO BEGIN~---~END?? ?OUTLINE[I]:=LPG@.STRNG[K];~I:=SUCC(I);~K:=SUCC(K)?# WHILE TPTR<>NIL DO WITH TPTR@ DO BEGIN~---~END;!387?? ?OUTLINE:=BLANKV;~LPG:=SPADDR[ORD(SPN)];~K:=NDSOFF;?? ?IF INDFLAG AND(ORD(LV)+ORD(LI)+ORD(LVL)+2~<=LLO)THEN BEGIN~---~END?-XOR-? ?ELSE I:=3;?? ?(*PREPARE A CHILD NODE*)WITH LPG@ DO BEGIN~---~END;?? ?WRITELN(SRCPUNCH,OUTLINE:I);~TPTR:=NXT?# IF INDFLAG AND(ORD(LV)+ORD(LI)+ORD(LVL)+2<=LLO)THEN BEGIN~---~END?? ?FOR I:=1 TO ORD(LVL) DO OUTLINE[I]:=ICH;?? ?I:=ORD(LVL)+2?# (*PREPARE A CHILD NODE*)WITH LPG@ DO BEGIN~---~END;?? ?FOR J:=1 TO ORD(LP) DO BEGIN~---~END;?? ?OUTLINE[I]:=COM;~I:=SUCC(I);?? ?FOR J:=ORD(LP)+1 TO ORD(LV) DO BEGIN~---~END;?? ?OUTLINE[I]:=COM;~I:=SUCC(I);?? ?FOR J:=1 TO ~ORD(LI) DO BEGIN~---~END;?? ?IF NXT<>NIL THEN OUTLINE[I]:=COM?-XOR-? ?ELSE OUTLINE[I]:=SEMI;?# FOR J:=1 TO ORD(LP) DO BEGIN~---~END;?? ?OUTLINE[I]:=STRNG[K];~I:=SUCC(I);~K:=SUCC(K)?# FOR J:=ORD(LP)+1 TO ORD(LV) DO BEGIN~---~END;?? ?OUTLINE[I]:=STRNG[K];?? ?I:=SUCC(I);~K:=SUCC(K)?# FOR J:=1 TO ORD(LI) DO BEGIN~---~END;?? ?OUTLINE[I]:=STRNG[K];?? ?I:=SUCC(I);~K:=SUCC(K)?# WHILE TPTR<>NIL DO WITH TPTR@ DO BEGIN~---~END!389?? ?IF NLVL<>NIL THEN ~SRCOUT(TPTR);?? ?TPTR:=NXT?# PROCEDURE PLIOUT(TPTR:WPTRT);?? ?VAR CALLEDDOWN:BOOLEAN;~LPG:SPPTRT;?? ?BEGIN~---~END (*PLIOUT PROCEDURE*);?# VAR CALLEDDOWN:BOOLEAN;LPG:SPPTRT;?? ?IS,II,I,J,K,KK:INTEGER;~T:VMT;~LABEL 10;?# BEGIN~---~END (*PLIOUT PROCEDURE*);?? ?(*OUTPUT TARGET LANGUAGE SOURCE CODE*)?? ?T:=BLANKV;?? ?REPEAT~---~UNTIL TPTR=NIL?# REPEAT~---~UNTIL TPTR=NIL?? ?WITH TPTR@ DO BEGIN~---~END (*WITH TPTR@*);?? ?T:=BLANKV;?? ?TPTR:=TPTR@.NXT?# WITH TPTR@ DO BEGIN~---~END (*WITH TPTR@*);?? ?II:=SUCC(ORD(LP));~KK:=0;?? ?IF INDFLAG THEN~---~ELSE ~IS:=ORD(LP);?? ?CALLEDDOWN~:=FALSE;?? ?LPG:=SPADDR[ORD(SPN)];~K:=NDSOFF+~ORD(LP);?? ?WITH LPG@ DO REPEAT~---~10:UNTIL ~II>=ORD(LV);?? ?WRITELN(PLIPUNCH,(8*T:II-IS*8)~(T*COPY(T,1,II-IS)*T));?? ?(*RECURSIVE CALL*)!560?? ?IF (NOT CALLEDDOWN) AND (NLVL<>NIL) THEN PLIOUT(NLVL)?# IF INDFLAG THEN~---~ELSE IS:=ORD(LP);?? ?IF ORD(LV)-~ORD(LP)+ORD(LVL)+1<=LLO?+++? ?THEN BEGIN~---~END!510?-XOR-? ?ELSE ~IS:=ORD(LP)-1?# THEN BEGIN~---~END!510?? ?IS:=ORD(LP)-~ORD(LVL);~KK:=ORD(LVL);?? ?FOR J:=2 TO ~ORD(LVL)+1 DO ~T[J]:=ICH?# WITH LPG@ DO REPEAT~---~10:UNTIL II>=ORD(LV);?? ?FOR I:=II TO ORD(LV) DO BEGIN~---~END (*FOR I LOOP*);?? ?II:=ORD(LV);?# FOR I:=II TO ORD(LV) DO BEGIN~---~END (*FOR I LOOP*);?? ?IF STRNG[K]=PCT THEN ~BEGIN~---~END?-XOR-? ?ELSE IF STRNG[K]=QOT THEN BEGIN~---~END?-XOR-? ?ELSE T[I-IS]~:=STRNG[K];?? ?K:=SUCC(K)?# IF STRNG[K]=PCT THEN BEGIN~---~END?? ?T[I-IS]:=' ';~IS:=SUCC(IS);?? ?IF STRNG[K+1]=~'-' THEN?? ?IF STRNG[K+2]=~'-' THEN?? ?IF STRNG[K+3]=~'-' THEN?? ?IF STRNG[K+4]=PCT THEN BEGIN~---~END?# IF STRNG[K+4]=PCT THEN BEGIN~---~END?? ?IF CALLEDDOWN THEN BEGIN~---~END;?? ?IF INDFLAG THEN IF T[2]<>ICH THEN?? ?WRITELN(PLIPUNCH,(8*T:I-IS*8)~(T*COPY(T,1,I-IS)*T));?? ?(* RECURSIVE CALL *)!587?? ?IF NLVL<>NIL THEN ~PLIOUT(NLVL)?-XOR-? ?ELSE!515?? ?II:=I+5;~K:=K+5;?? ?T:=BLANKV;~CALLEDDOWN:=TRUE;?? ?IF INDFLAG THEN BEGIN~---~END ~ELSE ~IS:=II-1;?? ?GOTO 10?# IF INDFLAG THEN IF T[2]<>ICH THEN?? ?IF I-IS+ORD(LVL)PCT THEN BEGIN~---~END;!541?? ?T@.LV:=CHR(II+IS);?? ?NLINES:=LC?# IF TVAL[II]<>PCT THEN BEGIN~---~END;!541?? ?CPAGE@.STRNG[LSP]:=PCT;~LSP:=SUCC(LSP);~IS:=SUCC(IS)?# WHILE DIVIDING DO BEGIN~---~10:END;?? ?IL:=0;~IM:=NODEWIDTH+1;~IF NOT DISAMB THEN ~LC:=SUCC(LC);?? ?IF ORD(T@.LV)-II<=NODEWIDTH THEN ~IM:=ORD(T@.LV)-II;?? ?IF IS+II+IM+EL>LLO THEN BEGIN~---~END?-XOR-? ?ELSE FOR I:=1 TO IM DO ~BEGIN~---~END;?? ?IF (II>=ORD(T@.LV)) AND (IM<=NODEWIDTH) THEN ~DIVIDING:=FALSE?-XOR-? ?ELSE BEGIN~---~END;!551?# ELSE BEGIN~---~END;!551?? ?IF IL<>IM THEN IF (IL>0) THEN ~BEGIN~---~END;!551?? ?IF IL=0 THEN BEGIN~---~END;?? ?IF NOT DISAMB THEN BEGIN~---~END?# IF IL=0 THEN BEGIN~---~END;?? ?II:=PRED(II); ~LSP:=PRED(LSP)?# IF NOT DISAMB THEN BEGIN~---~END?? ?IS:=SUCC(IS);~CPAGE@.STRNG[LSP]:=PCT;~LSP:=SUCC(LSP);?? ?IF TCH=QOT THEN!651?# IF TCH=QOT THEN!651?? ?DISAMB:=TRUE?# IF IL<>IM THEN IF (IL>0) THEN BEGIN~---~END;!551?? ?II:=II-(IM-IL);~LSP:=LSP-(IM-IL)?# ELSE FOR I:=1 TO IM DO BEGIN~---~END;?? ?II:=SUCC(II);~TCH:=TVAL[II];?? ?(*QOT STARTS DISAMBIGUATION STRING*)?? ?IF TCH=QOT THEN ~BEGIN~---~END!661?-XOR-? ?(*PCT STARTS A NEW LINE IN OUTPUT FORM*)?? ?ELSE IF TCH=PCT THEN BEGIN~---~END!409?-XOR-? ?ELSE IF (TCH IN BREAKERS) THEN?# ELSE IF (TCH IN BREAKERS) THEN?? ?IF TCH IN PRES THEN BEGIN~---~END?-XOR-? ?ELSE IF TCH IN POSTS THEN BEGIN~---~END?-XOR-? ?ELSE IF TCH IN INDIFFS THEN?# IF TCH IN PRES THEN BEGIN~---~END?? ?IF II>1 THEN IF NOT(TVAL[II-1] IN PRES) THEN IL:=I-1?# ELSE IF TCH IN POSTS THEN BEGIN~---~END?? ?IF I<=NODEWIDTH THEN IL:=I?# ELSE IF TCH IN INDIFFS THEN?? ?IF I<=NODEWIDTH THEN IL:=I?-XOR-? ?ELSE IL:=NODEWIDTH?# II:=SUCC(II);TCH:=TVAL[II];?? ?CPAGE@.STRNG[LSP]:=TCH;~LSP:=SUCC(LSP);?# IF TCH=QOT THEN BEGIN~---~END!661?? ?IL:=I;~IF (I=1) AND (LC>ILC) THEN ~IF NOT DISAMB THEN!555?? ?IF (ORD(T@.LV)-II)>8 THEN BEGIN OUTP; WRITELN(OUTDIAG,' ***** ',?? ?IF IM<>I THEN DISAMB:=TRUE;?# IF (ORD(T@.LV)-II)>8 THEN BEGIN OUTP; WRITELN(OUTDIAG,' ***** ',?? ?'OVERLONG DISAMBIGUATION; PROBABLE PUNCTUATION CONFLICT.') END;?# IL:=I;IF (I=1) AND (LC>ILC) THEN IF NOT DISAMB THEN!555?? ?LC:=PRED(LC);?# ELSE IF TCH=PCT THEN BEGIN~---~END!409?? ?IF I=1 THEN ~IF NOT DISAMB THEN ~BEGIN~---~END;?? ?GOTO 10?# IF I=1 THEN IF NOT DISAMB THEN BEGIN~---~END;?? ?LC:=PRED(LC);~IS:=PRED(IS);~LSP:=PRED(LSP)?# IF IS+II+IM+EL>LLO THEN BEGIN~---~END?? ?OUTP;WRITELN(OUTDIAG,' ***** TOO MUCH LINE DIVISION',?# OUTP;WRITELN(OUTDIAG,' ***** TOO MUCH LINE DIVISION',?? +?'. NODE TRUNCATED.');?? ?DIVIDING:=FALSE?# FUNCTION LAYOUT(TPTR:WPTRT):INTEGER;?? ?VAR K,L,LMXD,M,MM,A:~(8*INTEGER*8)~(T*BYTE*T);?? ?MPTR:WPTRT;~QP:QPTRT;?? ?PROCEDURE ADJSTS(N:INTEGER;TPTR:WPTRT);?? ?FUNCTION LIMMOVE(TPTR:WPTRT;VAR CTRL:INTEGER;N:INTEGER):INTEGER;?? ?PROCEDURE ENQ(T:WPTRT);?? ?(*LAYOUT THE WHOLE WARNIER DIAGRAM*)?# (*LAYOUT THE WHOLE WARNIER DIAGRAM*)?? ?BEGIN~---~END (*LAYOUT FUNCTION*);?# VAR K,L,LMXD,M,MM,A:~(8*INTEGER*8)~(T*BYTE*T);?? ?SPT,N,I,LST,LMXH,NN,W:INTEGER;?# FUNCTION LIMMOVE(TPTR:WPTRT;VAR CTRL:INTEGER;N:INTEGER):INTEGER;?? ?VAR DWNL,RESULT:INTEGER;?? ?BEGIN~---~END (*LIMMOVE FUNCTION*);?# BEGIN~---~END (*LIMMOVE FUNCTION*);?? ?IF ORD(TPTR@.LVL)>=CTRL THEN RESULT:=TPTR@.MXM ELSE RESULT:=32767;?? ?WHILE TPTR<>NIL DO BEGIN~---~END;!715?? ?LIMMOVE:=RESULT;?# IF ORD(TPTR@.LVL)>=CTRL THEN RESULT:=TPTR@.MXM ELSE RESULT:=32767;?? ?IF ORD(TPTR@.LVL)>CTRL THEN CTRL:=SUCC(CTRL);?# WHILE TPTR<>NIL DO BEGIN~---~END;!715?? ?IF (ORD(TPTR@.LD)>CTRL) AND (ORD(TPTR@.LVL)CTRL) AND (ORD(TPTR@.LVL)0 THEN?# IF TOTWIDTH[I]>0 THEN?? ?TOTWIDTH[I]~:=-TOTWIDTH[I]?# REPEAT~---~UNTIL TPTR=NIL;?? ?WITH TPTR@ DO BEGIN~---~END(*WITH ~TPTR@*);?? ?IF TPTR<>NIL THEN ~IF TPTR@.ST=0 THEN ~TPTR:=NIL?# WITH TPTR@ DO BEGIN~---~END(*WITH TPTR@*);?? ?ST:=ST+N;~LS:=LS+N;~MXM:=MXM+N;?? ?IF NLVL<>NIL THEN ~ADJSTS(N,NLVL);?? ?TPTR:=NXT?# PROCEDURE ENQ(T:WPTRT);?? ?VAR LPTR,TPTR,QP:QPTRT;?? ?(*ENQUEUE PAGE CANDIDATE IN PAGE PRIORITY QUEUE*)?# (*ENQUEUE PAGE CANDIDATE IN PAGE PRIORITY QUEUE*)?? ?BEGIN~---~END (* PROCEDURE ENQ*);?# BEGIN~---~END (* PROCEDURE ENQ*);?? ?IF NDDN+4>DDSTL THEN BEGIN~---~END;?? ?(*NEW QUEUE ELEMENT*)?? ?QP@.DDNSTR[NDDN+2]:='-';?? ?QP@.DDNSTR[NDDN+3]:=~CPN[2];~QP@.DDNSTR[NDDN+4]:=~CPN[3];?? ?IF NQ=1 THEN BEGIN ~QH:=QP;~QR:=QP;?? ?QP@.NEXTQ:=NIL;~QP@.LASTQ:=NIL;~END?-XOR-? ?ELSE BEGIN~---~END!712?# IF NDDN+4>DDSTL THEN BEGIN~---~END;?? ?OUTP;~WRITELN(OUTDIAG,?# OUTP;WRITELN(OUTDIAG,?? +?' ***** DEWEY DECIMAL STRING LENGTH EXCEEDED ',?# +' ***** DEWEY DECIMAL STRING LENGTH EXCEEDED ',?? +?DDSTL,'. ABORTING.');~HALT?# (*NEW QUEUE ELEMENT*)?? ?IF QLTOP<>NIL THEN BEGIN~---~END ~ELSE NEW(QP);?? ?NQ:=SUCC(NQ);?# NQ:=SUCC(NQ);?? ?WITH QP@ DO BEGIN~---~END(*WITH QP@*);?# IF QLTOP<>NIL THEN BEGIN~---~END ELSE NEW(QP);?? ?QP:=QLTOP;~QLTOP:=QP@.NEXTQ?# WITH QP@ DO BEGIN~---~END(*WITH QP@*);?? ?SPPTR:=T@.NLVL;?? ?WITH SPPTR@ DO BEGIN~---~END;!611?? ?PRTY:=W;~DDNSTR:=DDN;~DDL:=CHR(NDDN)?# WITH SPPTR@ DO BEGIN~---~END;!611?? ?NXTH:=NXT;~NDSOFFH:=NDSOFF;~SPNH:=SPN;~NLVLH:=NLVL;?? ?LRH:=LR;~LIH:=LI;~LPH:=LP;~LPNH:=LPN;~LVH:=LV;?? ?(*3 ONLY TENTATIVE*)?? ?STSH:=ST;~LSPH:=T@.LS;~STPH:=T@.ST;~LDPH:=T@.LD?# ELSE BEGIN~---~END!712?? ?IF QP@.PRTY~>=QH@.PRTY THEN BEGIN~---~END?-XOR-? ?ELSE ~IF QP@.PRTY<=QR@.PRTY THEN ~BEGIN~---~END?-XOR-? ?ELSE!630?? ?(*KEEP QUEUE DOWN TO NQLIM SIZE*)?? ?IF NQ>NQLIM THEN BEGIN~---~END?# IF QP@.PRTY>=QH@.PRTY THEN BEGIN~---~END?? ?QP@.NEXTQ:=QH;~QH@.LASTQ:=QP;~QH:=QP?# ELSE IF QP@.PRTY<=QR@.PRTY THEN BEGIN~---~END?? ?QP@.NEXTQ:=NIL;~QP@.LASTQ:=QR;~QR@.NEXTQ:=QP;~QR:=QP?# ELSE!630?? ?BEGIN~---~END;!QEL?# BEGIN~---~END;!QEL?? ?TPTR:=QH;?? ?WHILE TPTR@.PRTY>QP@.PRTY DO BEGIN~---~END;?? ?(*INSERT*)?? ?LPTR@.NEXTQ:=QP;~QP@.LASTQ:=LPTR;~TPTR@.LASTQ:=QP;~QP@.NEXTQ:=TPTR?# WHILE TPTR@.PRTY>QP@.PRTY DO BEGIN~---~END;?? ?(*FIND WHERE*)?? ?LPTR:=TPTR;~TPTR:=TPTR@.NEXTQ?# IF NQ>NQLIM THEN BEGIN~---~END?? ?NQ:=PRED(NQ);~LPTR:=QR;~QR:=QR@.LASTQ;~QR@.NEXTQ:=NIL;?? ?LPTR@.NEXTQ:=QLTOP;~QLTOP:=LPTR?# BEGIN~---~END (*LAYOUT FUNCTION*);?? ?(*INITIALIZATIONS~*)!641?? ?(*EXTENTS IN ~(LMXD,GMXD),~(LMXH,GMXH),~(LST,GST)*)?? ?(*LOCAL/GLOBAL*)?? ?(*SWEEP THE BROTHERS*)?? ?(*FINISH THE RECURSIVE ~LEVEL*)?# (*INITIALIZATIONS*)!641?? ?(*MAX DEPTH*)?? ?(*MAX WIDTH*)?? ?K:=0;~MAXM[M]:=0;?? ?(*START POINTS*)?? ?TOTWIDTH[LMXD]~:=SUCC(LMXH); ~L:=NDDN;?# (*START POINTS*)?? ?SPT:=LMXH+2;~LST:=SPT;?# (*MAX DEPTH*)?? ?LMXD:=ORD(TPTR@.LVL);?? ?M:=LMXD;?# (*MAX WIDTH*)?? ?LMXH:=TOTWIDTH[LMXD];?# (*SWEEP THE BROTHERS*)?? ?REPEAT~---~UNTIL TPTR=NIL;!LAYOT?# REPEAT~---~UNTIL TPTR=NIL;!LAYOT?? ?WITH TPTR@ DO BEGIN~---~END (*WITH TPTR@*);!LAYO?? ?MPTR:=TPTR;~TPTR:=TPTR@.NXT?# WITH TPTR@ DO BEGIN~---~END (*WITH TPTR@*);!LAYO?? ?(*INITIALIZE GLOBALS, THIS LEVEL*)?? ?GMXD:=M;?? ?ST:=TOTWIDTH[GMXD]+2;~GST:=ST;?? ?GMXH:=ST+~ORD(LPN);~K:=SUCC(K);?? ?TOTWIDTH[GMXD]:=GMXH;?? ?IF NLVL<>NIL THEN BEGIN~---~END;!676?? ?LD:=CHR(GMXD);~MXM:=MAXM[M];?? ?(*UPDATE EXTENTS*)?? ?LS:=GST;~W:=GMXH-GST+1;~A:=GMXD-M+1;?? ?IF (M1) AND ~(W>=10) AND ~(W<=DGMPL) AND ~(A<=COLPP)?# IF (M1) AND ~(W>=10) AND ~(W<=DGMPL) AND ~(A<=COLPP)?? ?THEN BEGIN~---~END?# IF NLVL<>NIL THEN BEGIN~---~END;!676?? ?MM:=K;~DDN[L+1]:='.';~NDDN:=L+2;?? ?(*RECURSIVE CALL*)!801?? ?(*I IS CENTER OF CHILDREN AS LAID OUT*)?? ?N:=ST+ORD(LPN) DIV 2;?? ?IF I<>N THEN ~BEGIN~---~END!696?# MM:=K;~DDN[L+1]:='.';~NDDN:=L+2;?? ?IF MM>=10 THEN ~BEGIN~---~END;?? ?DDN[NDDN]:=~CHR(ORD(SUPERZERO)+MM);?# (*RECURSIVE CALL*)!801?? ?I:=LAYOUT(NLVL);?# IF MM>=10 THEN BEGIN~---~END;?? ?DDN[NDDN]:=CHR(ORD(REGZERO)~+MM DIV 10);?? ?NDDN:=NDDN+1;~MM:=MM MOD 10?# IF I<>N THEN BEGIN~---~END!696?? ?(*MOVE PIECES*)?? ?IF I>N THEN ~BEGIN~---~END?-XOR-? ?ELSE BEGIN~---~END!724?# IF I>N THEN BEGIN~---~END?? ?NN:=I-N;~ST:=ST+NN;?? ?IF K=1 THEN ~BEGIN~---~END?-XOR-? ?ELSE BEGIN~---~END!513?# NN:=I-N;ST:=ST+NN;?? ?TOTWIDTH[M]:=TOTWIDTH[M]~+NN;?# IF K=1 THEN BEGIN~---~END?<1/GEN'N>? ?(*JUST ONE NODE TO MOVE*)?# (*JUST ONE NODE TO MOVE*)?? ?MAXM[M]:=NN;?? ?MXM:=NN;~LST:=LST+NN;~SPT:=SPT+NN;?# ELSE BEGIN~---~END!513?? ?MM:=M;~MPTR:=TPTR;?? ?(*HOW MUCH CAN WE MOVE DOWN*)?? ?(*MM HAS DEEPEST LEVEL OF LEAF IN PART TO MOVE*)?? ?CTRL:=M+1;?? ?IF MM>=CTRL THEN W:=LIMMOVE(NLVL,CTRL,MM) ELSE W:=NN;?? ?IF W0 THEN BEGIN~---~END;?# (*HOW MUCH CAN WE MOVE DOWN*)?? ?FOR A:=PRED(K) DOWNTO 1 DO BEGIN~---~END;?# FOR A:=PRED(K) DOWNTO 1 DO BEGIN~---~END;?? ?MPTR:=MPTR@.BCK;?# MPTR:=MPTR@.BCK;?? ?IF ORD(MPTR@.LD)>MM THEN ~MM:=ORD(MPTR@.LD);?# IF NN>0 THEN BEGIN~---~END;?? ?(*RAZZLE DAZZLE ADJSTS WITH 0 ST VALUE*)?? ?(*RESTORE AFTER ADJSTS*)?? ?REPEAT~---~UNTIL TOTWIDTH[A]>=-1?# REPEAT~---~UNTIL TOTWIDTH[A]>=-1?? ?IF TOTWIDTH[A]<~-1 THEN?? ?MAXM[A]:=~MAXM[A]+NN;?? ?A:=SUCC(A);?# IF TOTWIDTH[A]<-1 THEN?? ?TOTWIDTH[A]:=~-TOTWIDTH[A];?# (*RAZZLE DAZZLE ADJSTS WITH 0 ST VALUE*)?? ?W:=ST;~ST:=0;~ADJSTS(NN,MPTR);~ST:=W;~A:=M;?# W:=ST;ST:=0;ADJSTS(NN,MPTR);ST:=W;A:=M;?? ?LST:=LST+NN;~SPT:=SPT+NN;?# ELSE BEGIN~---~END!724?? ?ADJSTS(N-I,NLVL);?? ?A:=M;?? ?(*RESTORE MARKED LEVELS AFTER ADJSTS*)?? ?REPEAT~---~UNTIL TOTWIDTH[A]>=-1;!1?? ?GMXH:=GMXH+N-I;~GST:=GST+N-I?# REPEAT~---~UNTIL TOTWIDTH[A]>=-1;!1?? ?IF TOTWIDTH[A]<~-1 THEN TOTWIDTH[A]:=N-I-TOTWIDTH[A];?? ?A:=SUCC(A);?# (*UPDATE EXTENTS*)?? ?IF TOTWIDTH[M]>GMXH THEN ~GMXH:=TOTWIDTH[M];?? ?IF GSTLMXH THEN LMXH:=GMXH;?? ?IF GMXD>LMXD THEN LMXD:=GMXD;?# THEN BEGIN~---~END?? ?(*PAGES NON-TRIVIAL AND FIT IN DIAGRAM~PAGE*)?? ?W:=GMXD*W~(8**A*8);?? ?IF NQQR@.PRTY THEN ~ENQ(TPTR)?# (*FINISH THE RECURSIVE LEVEL*)?? ?FOR K:=L+1 TO NDDN DO DDN[K]:=' ';?? ?IF SPT+3=TOTWIDTH[M] THEN BEGIN~---~END;?? ?NDDN:=L;~GMXD:=LMXD;~GMXH:=LMXH;~GST:=LST;?? ?(*RETURN THE CENTER OF THE SUBTREE*)?# IF SPT+3=TOTWIDTH[M] THEN BEGIN~---~END;?? ?MPTR@.LPN:=~CHR(3);?? ?TOTWIDTH[M]~:=SUCC(TOTWIDTH[M]);?? ?IF TOTWIDTH[M]>LMXH THEN LMXH~:=TOTWIDTH[M]?# (*RETURN THE CENTER OF THE SUBTREE*)?? ?LAYOUT:=(TOTWIDTH[M]+SPT) DIV 2?# PROCEDURE DOPAGES;?? ?(*DOPAGE DECLARES*)?? ?(*SELECT HIGH PRIORITY NON-OVERLAPPING PAGES FROM CANDIDATES*)?? ?BEGIN~---~END(*DOPAGES PROCEDURE*);?# (*DOPAGE DECLARES*)?? ?VAR PLTT,PLT,HQH,TPTR,LPTR:QPTRT;?? ?PSNODE:WPTRT;~I,J:(8*INTEGER*8)~(T*BYTE*T);~M:INTEGER;~LABEL 10,11,12;?# BEGIN~---~END(*DOPAGES PROCEDURE*);?? ?IF NQ>2 THEN BEGIN~---~END?-XOR-? ?ELSE NQ:=1;?? ?(*CONVERT NQ CANDIDATES TO PAGES*)?? ?FOR I:=1 TO NQ DO BEGIN~---~END;?? ?(*FREE ANY EXCESS CANDIDATES*)?? ?WHILE QH<>NIL DO BEGIN~---~END?# WHILE QH<>NIL DO BEGIN~---~END?? ?HQH:=QH;~QH:=QH@.NEXTQ;~HQH@.NEXTQ:=QLTOP;~QLTOP:=HQH?# IF NQ>2 THEN BEGIN~---~END?? ?NQLIM:=NQ;?? ?HQH:=QH;?? ?(*SEARCH FOR & REMOVE CONTAINED SUBPAGES*)?? ?REPEAT~---~UNTIL(QR=QH)OR ~(QH=NIL);?? ?QH:=HQH;?? ?(*HOW MANY TO KEEP*)?? ?IF NQ<=2 THEN NQ:=1?-XOR-? ?ELSE BEGIN~---~END;!586?? ?IF NQ>LASTNQ THEN NQ:=LASTNQ;?? ?LASTNQ:=NQ;?? ?QH:=HQH?# REPEAT~---~UNTIL(QR=QH)OR (QH=NIL);?? ?PLTT:=QH;?? ?PLT:=QH@.NEXTQ;?? ?10:WHILE~(PLTT<>QR)AND ~(PLT<>NIL)DO?? ?(*ALL NESTED IN THIS NOW GONE*)?? ?QH:=QH@.NEXTQ?# 10:WHILE(PLTT<>QR)AND (PLT<>NIL)DO?? ?IF ORD(QH@.DDL)? ?FOR I:=1 TO ORD(QH@.DDL) DO?+++? ?IF QH@.DDNSTR[I]<>PLT@.DDNSTR[I] THEN BEGIN~---~END;~?-XOR-? ?(*ELIMINATE IDENTIFIED NESTED CANDIDATE*)?# IF QH@.DDNSTR[I]<>PLT@.DDNSTR[I] THEN BEGIN~---~END;?? ?(*A NOT-NESTED PAGE CANDIDATE*)?? ?PLTT:=PLT;~PLT:=PLT@.NEXTQ;~GOTO 10 ?# (*ELIMINATE IDENTIFIED NESTED CANDIDATE*)?? ?NQ:=PRED(NQ);~PLTT@.NEXTQ:=PLT@.NEXTQ;?? ?IF QR=PLT THEN ~QR:=PLTT;?? ?PLT@.NEXTQ:=QLTOP;~QLTOP:=PLT;~PLT:=PLTT@.NEXTQ?# ELSE BEGIN~---~END;!586?? ?IF NQLIM DIV 3NIL THEN?? ?(*NEW NUMBER, MAYBE*)?# (*NEW NUMBER, MAYBE*)?? ?IF PASSCNTNQ)AND ~(J<>NQLIM)THEN ~NQ:=J;?# IF PASSCNTNQ)AND (J<>NQLIM)THEN NQ:=J;?? ?IF PASSCNT>=NQLIM THEN NQ:=J?# (*CALCULATE PRIORITY THRESHHOLD*)?? ?IF PASSCNT=1 THEN?-XOR-? ?ELSE!DOP?# IF PASSCNT=1 THEN?? ?M:=(QH@.PRTY+QR@.PRTY+QR@.PRTY) DIV 3?# ELSE!DOP?? ?M:=(QH@.PRTY+QH@.PRTY+QR@.PRTY) DIV 3;?# 12: IF QH<>NIL THEN?? ?IF QH@.PRTY>=M THEN BEGIN~---~END;?# IF QH@.PRTY>=M THEN BEGIN~---~END;?? ?(*COUNT NUMBER ABOVE THRESHHOLD*)?# (*COUNT NUMBER ABOVE THRESHHOLD*)?? ?J:=SUCC(J);~QH:=QH@.NEXTQ;~GOTO 12?# FOR I:=1 TO NQ DO BEGIN~---~END;?? ?(*SUBSTITUTE PAGE TOKENS FOR ACCEPTED SUBPAGES*)?? ?LPCNT:=SUCC(LPCNT);~NCT:=SUCC(NCT);~HQH:=QH@.NEXTQ;?? ?(*PUT PAGES IN DEWEY DECIMAL ORDER==>DEPTH FIRST FINAL OUTPUT*)?? ?IF FPORD=NIL THEN BEGIN~---~END!DOP2?-XOR-? ?ELSE IF QH@.DDNSTR? ?FPORD:=QH;~QH@.NEXTQ:=NIL?# ELSE IF QH@.DDNSTR? ?QH@.NEXTQ~:=FPORD;~FPORD:=QH?# ELSE BEGIN~---~END;!510?? ?TPTR:=FPORD;?? ?(*FIND INS'N POINT*)?? ?LPTR@.NEXTQ:=QH;~QH@.NEXTQ:=TPTR?# (*FIND INS'N POINT*)?? ?11:LPTR:=TPTR;~TPTR:=LPTR@.NEXTQ;?? ?IF TPTR<>NIL THEN IF QH@.DDNSTR>=TPTR@.DDNSTR THEN GOTO 11;?# (*PHYSICAL OUTPUT PHASE ROUTINES*)?? ?PROCEDURE LINLINK(T:WPTRT;N:INTEGER);?? ?PROCEDURE OUTPAGE(LPTR:WPTRT);?# PROCEDURE LINLINK(T:WPTRT;N:INTEGER);?? ?VAR M:INTEGER;?? ?P:LPTRT;?? ?(*FORM LINKS ACROSS COUSIN CHASMS*)?? ?BEGIN~---~END (*LINLINK PROCEDURE*);?# BEGIN~---~END (*LINLINK PROCEDURE*);?? ?M:=ORD(T@.LVL)-N;?? ?IF LOTOP<>NIL THEN BEGIN~---~END ~ELSE ~NEW(P);?? ?WITH P@ DO BEGIN~---~END;?? ?IF START[M]=NIL THEN?-XOR-? ?ELSE!LINL?? ?REAR[M]:=P;?? ?WHILE T<>NIL DO?# IF LOTOP<>NIL THEN BEGIN~---~END ELSE NEW(P);?? ?P:=LOTOP;~LOTOP:=P@.NXTSC;?# WITH P@ DO BEGIN~---~END;?? ?WPTR:=T;~NXTSC:=NIL;~STARTP:=T@.ST-1;~LASTP:=0?# IF START[M]=NIL THEN?<1/COL/PAGE>? ?START[M]:=P?# ELSE!LINL?? ?REAR[M]@.NXTSC:=P;?# WHILE T<>NIL DO?? ?WITH T@ DO BEGIN~---~END!1023?# WITH T@ DO BEGIN~---~END!1023?? ?(*RECURSIVE CALL*)!1032?? ?IF(MNIL) THEN ~LINLINK(NLVL,N);?? ?REAR[M]@.LASTP:=ST+ORD(LPN);~T:=NXT?# PROCEDURE OUTPAGE(LPTR:WPTRT);?? ?VAR!989?? ?PROCEDURE NPHAND;?? ?(*OUTPUT A PAGE OF WARNIER DIAGRAM*)?? ?BEGIN~---~END(*OUTPAGE PROCEDURE*);?# VAR!989?? ?(T*PIECE:STRING[MAXNW];*T)?? ?HLP,TLP:LPTRT;~T:WPTRT;?? ?LABEL 10;?# HLP,TLP:LPTRT;T:WPTRT;?? ?COL,LINENO,I,II,J,MAXAC,NMAC:INTEGER;~CPN:THREEDIG;?# COL,LINENO,I,II,J,MAXAC,NMAC:INTEGER;CPN:THREEDIG;?? ?(T*PREF,PREBL:STRING[MAXPW];*T)?# (T*PREF,PREBL:STRING[MAXPW];*T)?? ?(8*PREF,PREBL:PACKED ARRAY[1..MAXPW] OF CHAR;*8)?# (T*PIECE:STRING[MAXNW];*T)?? ?(8*PIECE:PACKED ARRAY[1..MAXNW] OF CHAR;*8)?# (8*PIECE:PACKED ARRAY[1..MAXNW] OF CHAR;*8)?? ?(T*ACTCOLS:STRING[MAXCPP];*T)?# (T*ACTCOLS:STRING[MAXCPP];*T)?? ?(8*ACTCOLS:PACKED ARRAY[1..MAXCPP] OF CHAR;*8)?# PROCEDURE NPHAND;?? ?VAR I,J:INTEGER;?? ?LPG:SPPTRT;~TCH:CHAR;?? ?PROCEDURE ENDNODE;?? ?(*NODE PIECE HANDLER*)?? ?BEGIN~---~END;(*NPHAND INTERNAL PROCEDURE*)?# BEGIN~---~END;(*NPHAND INTERNAL PROCEDURE*)?? ?T:=START[COL]~@.WPTR;?? ?IF NNE[COL]>LINENO THEN BEGIN~---~END?-XOR-? ?ELSE WITH T@ DO CASE NP[COL] OF~---~END(* CASE NP*)?# T:=START[COL]~@.WPTR;?? ?PIECE:=BLNW;~LPG:=SPADDR[ORD(T@.SPN)];?# IF NNE[COL]>LINENO THEN BEGIN~---~END?? ?IF COLNIL THEN BEGIN~---~END;?? ?(*SCHEDULE BACK REF.*)?? ?PREF:=PREBL;?? ?IF LO1 THEN ~IF LO>=LV THEN?# IF COL=1 THEN IF PCNT>1 THEN IF LO>=LV THEN?? ?IF NBE[1]=START[1]@.LASTP THEN ~BEGIN~---~END;?# IF SUBPAGE<>NIL THEN BEGIN~---~END;?? ?(*PLANT BACK REFERENCE*)?? ?(*PUT PAGE NO IN FORWARD~REF.*)?# (*PLANT BACK REFERENCE*)?? ?SUBPAGE@.PRTY:=PCNT;?# (*PUT PAGE NO IN FORWARDREF.*)?? ?CONVERT(ORD(SUBPAGE@.DDL),CPN);?# CONVERT(ORD(SUBPAGE@.DDL),CPN);?? ?LPG@.STRNG[NDSOFF+10+FROFF]~:=CPN[1];?# LPG@.STRNG[NDSOFF+10+FROFF]~:=CPN[1];?? ?LPG@.STRNG[NDSOFF+11+FROFF]~:=CPN[2];?? ?LPG@.STRNG[NDSOFF+12+FROFF]~:=CPN[3]?# IF NBE[1]=START[1]@.LASTP THEN ~BEGIN~---~END;?? ?LV:=BRPTR@.LV;~LO:=CHR(0);~NDSOFF:=1;~LPG:=SPADDR[1];~LPN:=BRPTR@.LPN;?# LV:=BRPTR@.LV;~LO:=CHR(0);~NDSOFF:=1;~LPG:=SPADDR[1];~LPN:=BRPTR@.LPN;?? ?SPN:=CHR(1);~BP[1]:=2;~NBE[1]:=ORD(LPN)+LINENO;~LR:=LO;~LI:=LO?# IF LO? ?I:=0;~TCH:=LPG@.STRNG[NDSOFF+I+ORD(LO)];?? ?IF TCH=QOT THEN ~LO:=LV?-XOR-? ?ELSE ~LO:=CHR(ORD(LO)+SUCC(I));?? ?J:=I;?# J:=I;?? ?FOR I:=1 TO ORD(LP) DO PREF[I]~:=LPG@.STRNG[NDSOFF+I-1];?# I:=0;TCH:=LPG@.STRNG[NDSOFF+I+ORD(LO)];?? ?WHILE NOT ((TCH=PCT) OR (TCH=QOT)) DO BEGIN~---~END;?# WHILE NOT ((TCH=PCT) OR (TCH=QOT)) DO BEGIN~---~END;?? ?I:=SUCC(I);~PIECE[I]:=TCH;?? ?TCH:=LPG@.STRNG[NDSOFF+I+ORD(LO)]?# ELSE BEGIN~---~END;!705?? ?J:=1;?? ?IF ORD(LR)>0 THEN BEGIN~---~END;?? ?IF ORD(LI)=0 THEN BEGIN~---~END?-XOR-? ?ELSE BEGIN~---~END;!959?# IF ORD(LI)=0 THEN BEGIN~---~END?? ?IF LINENO>=ORD(ST)+ORD(LPN) THEN ENDNODE?# ELSE BEGIN~---~END;!959?? ?NP[COL]:=1;?? ?(*SCHEDULE INFIX ~PLACEMENT*)?# (*SCHEDULE INFIX PLACEMENT*)?? ?IF NXT<>NIL THEN NNE[COL]~:=(ST+ORD(LPN)+NXT@.ST-1) DIV 2?# IF ORD(LR)>0 THEN BEGIN~---~END;?? ?LPG:=SPADDR[ORD(RSPN)];?? ?J:=ORD(LR);?? ?FOR I:=1 TO ORD(LR) DO PIECE[I]:=LPG@.STRNG[RPSOFF-1+I];?? ?LR:=CHR(0)?# 1:BEGIN~---~END!OTP2?? ?NP[COL]:=0;?? ?FOR I:=1 TO ~ORD(LI) DO?? ?IF COLNIL THEN BEGIN~---~END;?? ?DISFLAG:=NLVL=NIL;?? ?IF NOT DISFLAG THEN DISFLAG:=NLVL@.SUBPAGE=NIL;?? ?IF DISFLAG AND~(SUBPAGE=NIL) THEN BEGIN~---~END!984?# IF DISFLAG AND(SUBPAGE=NIL) THEN BEGIN~---~END!984?? ?(*KEEP PARENTS OF SUBPAGES AND SUBPAGES, ELSE DISPOSE*)?? ?IF BCK<>NIL THEN IF BCK@.LVL=LVL THEN BCK@.NXT:=NIL?-XOR-? ?ELSE BCK@.NLVL:=NIL;?? ?IF NLVL<>NIL THEN NLVL@.BCK:=NIL;?? ?IF NXT<>NIL THEN NXT@.BCK:=NIL;?? ?NXT:=WNTOP;~WNTOP:=T?# IF NXT<>NIL THEN BEGIN~---~END;?? ?(*STEP COLUMN CONTROLS*)?? ?START[COL]@.WPTR:=NXT;?? ?NXT@.LO:=NXT@.LP;~NNE[COL]:=NXT~@.ST?# BEGIN~---~END(*OUTPAGE PROCEDURE*);?? ?PCNT:=SUCC(PCNT);?? ?LINENO:=LPTR@.LS;?? ?(T*PREF:='';*T)~FOR I:=1 TO PREWIDTH DO (T*PREF:=PREF+' ';~*T)?? ?(*CONVERT SUPER NUMERALS TO REGULAR NUMERALS*)?? ?WRITE(OUTFLE,PEJ,(8*TITLE:TITLEN*8)~(T*COPY(TITLE,1,TITLEN)*T),?? ?IF GMXD>COLPP THEN BEGIN~---~END;?? ?(*INITIALIZE COLUMN STATES*)?? ?FOR COL:=1 TO GMXD DO?? ?NMAC:=0;?? ?REPEAT~---~UNTIL GMXD=0;?? ?WRITELN(OUTFLE);?? ?J:=(TOPM+LINENO-LPTR@.LS-1) MOD LPP;?? ?IF J=SUPERZERO) THEN?# IF (PDN[I]<=SUPERNINE) AND (PDN[I]>=SUPERZERO) THEN?? ?PDN[I]:=CHR(NMDEL+ORD(PDN[I]));?# IF GMXD>COLPP THEN BEGIN~---~END;?? ?GMXD:=COLPP;~WRITELN(OUTFLE);?# GMXD:=COLPP;WRITELN(OUTFLE);?? ?WRITE(OUTFLE,~' ***** COLUMNS PAST COLUMN',COLPP:3,?# WRITE(OUTFLE,' ***** COLUMNS PAST COLUMN',COLPP:3,?? +?' DELETED DUE TO PAGE FAILURE.')?# FOR COL:=1 TO GMXD DO?? ?WITH START[COL]@ DO ~BEGIN~---~END;!85?# WITH START[COL]@ DO BEGIN~---~END;!85?? ?NBE[COL]:=STARTP;~NNE[COL]:=WPTR@.ST;?? ?IF LINENO=STARTP THEN BEGIN~---~END?-XOR-? ?ELSE ACTCOLS[COL]:='0';?? ?WPTR@.LO:=WPTR@.LP?# IF LINENO=STARTP THEN BEGIN~---~END?? ?ACTCOLS[COL]:='1';?? ?MAXAC:=COL;?# REPEAT~---~UNTIL GMXD=0;?? ?COL:=1;~WRITELN(OUTFLE);~I:=NODEWPPW;?? ?IF NMAC>MAXAC THEN MAXAC:=NMAC;?? ?NMAC:=0;?? ?REPEAT~---~UNTIL COL>GMXD;?? ?LINENO:=SUCC(LINENO)?# REPEAT~---~UNTIL COL>GMXD;?? ?IF START[COL]~<>NIL THEN BEGIN~---~END?-XOR-? ?ELSE!1177?? ?COL:=SUCC(COL);I:=NODEWPP3?# ELSE!1177?? ?IF COLNIL THEN BEGIN~---~END?? ?WITH START[COL]@ DO ~IF STARTP<=LINENO THEN BEGIN~---~END?-XOR-? ?ELSE IF COLNIL THEN?+++? ?IF START[COL]@.STARTP=LINENO+1 THEN BEGIN~---~END?# IF START[COL]@.STARTP=LINENO+1 THEN BEGIN~---~END?? ?ACTCOLS[COL]:='1';?? ?NMAC:=COL?# WITH START[COL]@ DO IF STARTP<=LINENO THEN BEGIN~---~END?? ?(*NODE IN PROGRESS*)?? ?J:=BP[COL];?? ?IF J<3 THEN BEGIN~---~END?-XOR-? ?(*NODE~FINISHED*)?? ?ELSE BEGIN~---~END!1035?# IF J<3 THEN BEGIN~---~END?? ?IF NBE[COL]=LINENO THEN BEGIN~---~END?-XOR-? ?ELSE ~IF COL>1 THEN ~WRITE(OUTFLE,VBAR:3);?? ?NPHAND?# IF NBE[COL]=LINENO THEN BEGIN~---~END?? ?IF COL>1 THEN CASE J OF~---~END;?? ?CASE J OF~---~END;?? ?BP[COL]:=~SUCC(J);?# IF COL>1 THEN CASE J OF~---~END;?? ?0:WRITE(OUTFLE,TBR);?-XOR-? ?1:WRITE(OUTFLE,'< ');?-XOR-? ?2:WRITE(OUTFLE,BBR)?# CASE J OF~---~END;?? ?0:BEGIN~---~END;?-XOR-? ?1:BEGIN~---~END;!1258?-XOR-? ?2:BEGIN~---~END?# 0:BEGIN~---~END;?? ?NBE[COL]:=(STARTP+LASTP)DIV 2;?? ?NMAC:=COL;?# 1:BEGIN~---~END;!1258?? ?NBE[COL]:=LASTP;?? ?NMAC:=COL;?# 2:BEGIN~---~END?? ?ACTCOLS[COL]:='0';~MAXAC:=0;~II:=GMXD;?? ?WHILE (MAXAC=0) AND (II>0) DO BEGIN~---~END?# WHILE (MAXAC=0) AND (II>0) DO BEGIN~---~END?? ?IF ACTCOLS[II]='1' THEN ~MAXAC:=II;?? ?II:=PRED(II)?# ELSE BEGIN~---~END!1035?? ?(*STEP TO NEXT COUSINS*)?? ?IF TLP<>NIL THEN BEGIN~---~END;!859?? ?10:IF GMXD>0 THEN ~IF START[GMXD]=NIL THEN?# (*STEP TO NEXT COUSINS*)?? ?IF COL0 THEN IF START[GMXD]=NIL THEN?? ?(*DECREMENT ACTIVE COLUMN NUMBERS*)?? ?BEGIN~---~END!1080?# BEGIN~---~END!1080?? ?GMXD:=PRED(GMXD);~GOTO 10?# IF TLP<>NIL THEN BEGIN~---~END;!859?? ?NBE[COL]:=TLP~@.STARTP;?? ?WITH TLP@.WPTR@ DO BEGIN~---~END?# WITH TLP@.WPTR@ DO BEGIN~---~END?? ?LO:=LP;~NNE[COL]:=ST?# IF J? ?START[I]:=NIL;?? ?BP[I]:=0;~NP[I]:=0;~NBE[I]:=0;~NNE[I]:=0?# WHILE NOT EOF(INFLE) DO BEGIN~---~END;?? ?(*INIT FOR DIAGRAM*)?? ?(*SPACE & DO DIAGRAM*)?? ?OUTP;WRITELN(OUTDIAG,' INPUT DONE AT ',CLOCK);?? ?IF H=NIL THEN BEGIN~---~END?-XOR-? ?ELSE IF NOT PRINTABLE THEN BEGIN~---~END?-XOR-? ?ELSE IF H@.NLVL=NIL THEN?-XOR-? ?ELSE BEGIN~---~END!844?# (*INIT FOR DIAGRAM*)?? ?OUTP;WRITELN(OUTDIAG,' RUN STARTED AT ',CLOCK);?? ?HEADERS;?? ?PRES:=['(','<'~(T*,'{','['*T)];?? ?BREAKERS:=PRES+POSTS+INDIFFS;?? ?GMXD:=2;~H:=NIL;NCT:=1;~PCNT:=0;~LPCNT:=1;~FPORD:=NIL;~DISAMNO:=0;?? ?LASTNQ:=100;?? ?(*INIT MORE*)?? ?LLOM4:=LLO-4;~LLIM4:=LLI-4;~LLIP1:=LLI+1;?? ?MAXLEN[1]:=PREWIDTH;~MAXLEN[2]:=LLIM4;~MAXLEN[3]:=12;?# PRES:=['(','<'(T*,'{','['*T)];?? ?POSTS:=[' ',';',':',')','>',PCT(T*,'}',']'*T)];?# POSTS:=[' ',';',':',')','>',PCT(T*,'}',']'*T)];?? ?INDIFFS:=['_',~'.',COM,',','&',~'=','+','-','*','/',~'^','\'];?# (*INIT MORE*)?? ?NODEWPPW:=NODEWIDTH+PREWIDTH;~NODEWPP3:=NODEWPPW+3;?? ?(*CPAGE INITIALIZATION*)?? ?NSP:=1;~LSP:=1;?? ?(*PAGE REFERENCES CREATIONS*)?# NODEWPPW:=NODEWIDTH+PREWIDTH;~NODEWPP3:=NODEWPPW+3;?? ?(T*BLNW:='';~FOR I:=1 TO NODEWIDTH DO BLNW:=BLNW+' ';~*T)?# (T*BLNW:='';FOR I:=1 TO NODEWIDTH DO BLNW:=BLNW+' ';*T)?? ?(8*FOR I:=1 TO NODEWIDTH DO BLNW[I]:=' ';~*8)?# IF H=NIL THEN BEGIN~---~END?? ?OUTP;WRITELN(OUTDIAG,' ***** NO DIAGRAM PRESENT.')?# ELSE IF H@.NLVL=NIL THEN?? ?BEGIN~---~END!1150?# BEGIN~---~END!1150?? ?OUTP;WRITELN(OUTDIAG,' ***** DIAGRAM HAS NO BODY.')?# (*PARSE HEADER CARD(S)*)?? ?HDRCARD:=TRUE;~PRINTABLE:=TRUE;?? ?WHILE HDRCARD DO BEGIN~---~END;?# WHILE HDRCARD DO BEGIN~---~END;?? ?OUTP;WRITELN(OUTDIAG,' ',(8*INCARD:LLO*8)(T*COPY(INCARD,1,LLO)*T));?? ?NSP:=1; ~I:=1;?? ?WHILE I<=LLI DO BEGIN~---~END;!129?# WHILE I<=LLI DO BEGIN~---~END;!129?? ?WHILE (I<=LLI) AND (INCARD[I]=' ') DO?? ?(*PARSE CONTROL CARD*)?? ?IF I<=LLIM4 THEN BEGIN~---~END?-XOR-? ?ELSE BEGIN~---~END;!1160?? ?NSP:=0?# ELSE BEGIN~---~END;!1160?? ?IF SRCFLAG THEN WRITELN(SRCPUNCH,INCARD);?? ?INFILE(INCARD);~I:=SUCC(LLI);?? ?IF EOF(INFLE) THEN BEGIN~---~END?# IF EOF(INFLE) THEN BEGIN~---~END?? ?HDRCARD:=FALSE; ~(T*INCARD:=EWDL~*T)?? ?(8*FOR J:=1 TO LLI DO INCARD[J]:=EWDL[J]*8)?# WHILE (I<=LLI) AND (INCARD[I]=' ') DO?? ?I:=SUCC(I);?# IF I<=LLIM4 THEN BEGIN~---~END?? ?J:=1;?? ?WHILE(INCARD[I]<>~' ') AND (J<=9) DO BEGIN~---~END;?? ?FOR J:=J TO 9 DO WORD[J]~:=' ';?? ?WHILE((INCARD[I]=' ') AND ~(I<=LLI)) DO ~I:=SUCC(I);?? ?IF I<=LLI THEN BEGIN~---~END?-XOR-? ?ELSE HDRCARD:=FALSE?# IF I<=LLI THEN BEGIN~---~END?? ?TOK:=INCARD[I];?? ?IF (TOK<='z') AND (TOK>=SMALLA) THEN TOK:=CHR(ORD(TOK)+CHDEL);?? ?J:=1;?? ?WHILE(KEYS[J]~<>WORD)AND(J<=21)DO J:=SUCC(J);?? ?CASE J OF~---~END(*CASE WORD*);?? ?I:=SUCC(I);?? ?IF (I>LLI) AND HDRCARD THEN INFILE(INCARD)?# WHILE(INCARD[I]<>' ') AND (J<=9) DO BEGIN~---~END;?? ?IF (INCARD[I]~<='z') AND ~(INCARD[I]>=SMALLA) THEN?-XOR-? ?ELSE WORD[J]:=INCARD[I];?? ?J:=SUCC(J);~I:=SUCC(I)?# IF (INCARD[I]<='z') AND (INCARD[I]>=SMALLA) THEN?? ?(*CAPITALIZE LETTERS OF KEYWORDS*)?? ?WORD[J]:=CHR(ORD(INCARD[I])+CHDEL)?# CASE J OF~---~END(*CASE WORD*);?? ?1:(*COMMA *)COM:=TOK;?-XOR-? ?2:(*TITLE *)BEGIN~---~END;?-XOR-? ?3:(*QUOTE *)QOT:=TOK;?-XOR-? ?4:(*SEMI *)SEMI:=TOK;?-XOR-? ?(*OUTPUT OPTIONS*)?-XOR-? ?7:(*SEMICOLON*)SEMI:=TOK;?-XOR-? ?9:(*VERTBAR *)VBAR[2]:=TOK;?-XOR-? ?10:(*PERCENT *)PCT:=TOK;?-XOR-? ?11:(*TOPBRACK *)BEGIN~---~END;?-XOR-? ?12:(*BOTBRACK *)BEGIN~---~END;?-XOR-? ?13:(*DIAGCOLS *)BEGIN;~NUM(COLPP);~---~END;?-XOR-? ?14:(*DIAGPAGEL*)NUM(DGMPL);?-XOR-? ?(*DEEPEN THE LEVEL*)?-XOR-? ?21:(*LENLININ *)BEGIN~---~END;?-XOR-? ?22:(*OTHERWISE*)BEGIN~---~END?# 13:(*DIAGCOLS *)BEGIN;NUM(COLPP);~---~END;?? ?IF COLPP>MAXCPP THEN BEGIN~---~END;?# IF COLPP>MAXCPP THEN BEGIN~---~END;?? ?OUTP;WRITELN(OUTDIAG,' ***** DIAGCOLS VALUE EXCEEDS ',MAXCPP,?# OUTP;WRITELN(OUTDIAG,' ***** DIAGCOLS VALUE EXCEEDS ',MAXCPP,?? +?' EXPECT CRASH.')?# 22:(*OTHERWISE*)BEGIN~---~END?? ?IF NSP=0 THEN BEGIN~---~END;?? ?I:=SUCC(LLI);~HDRCARD:=FALSE?# IF NSP=0 THEN BEGIN~---~END;?? ?OUTP;WRITELN(OUTDIAG,' ***** KEYWORD UNKNOWN: ',WORD);?# (*DEEPEN THE LEVEL*)?? ?15:(*NODEWIDTH*)BEGIN;~NUM(NODEWIDTH);~---~END;?-XOR-? ?16:(*PREFWIDTH*)BEGIN;~NUM(PREWIDTH);~---~END;?-XOR-? ?(*DEEPEN IT*)?-XOR-? ?19:(*TOPMARGIN*)NUM(TOPM);?-XOR-? ?20:(*LENLINOUT*)BEGIN;~NUM(LLO);~---~END;?# 15:(*NODEWIDTH*)BEGIN;NUM(NODEWIDTH);~---~END;?? ?IF NODEWIDTH>MAXNW THEN BEGIN~---~END?# IF NODEWIDTH>MAXNW THEN BEGIN~---~END?? ?OUTP;WRITELN(OUTDIAG,' ***** NODEWIDTH VALUE EXCEEDS ',MAXNW,?+++? ?' EXPECT CRASH.')?# 16:(*PREFWIDTH*)BEGIN;NUM(PREWIDTH);~---~END;?? ?IF PREWIDTH>MAXPW THEN BEGIN~---~END?# IF PREWIDTH>MAXPW THEN BEGIN~---~END?? ?OUTP;WRITELN(OUTDIAG,' ***** PREWIDTH VALUE EXCEEDS ',MAXPW,?+++? ?' EXPECT CRASH.')?# 20:(*LENLINOUT*)BEGIN;NUM(LLO);~---~END;?? ?IF LLO>MAXLLO THEN BEGIN~---~END?# IF LLO>MAXLLO THEN BEGIN~---~END?? ?OUTP;WRITELN(OUTDIAG,' ***** LENLINOUT VALUE EXCEEDS ',MAXLLO,?+++? ?' EXPECT CRASH.')?# (*DEEPEN IT*)?? ?17:(*ECHOPAGEL*)NUM(ECPL);?-XOR-? ?18:(*LINESPHYS*)NUM(LPP);?# 2:(*TITLE *)BEGIN~---~END;?? ?J:=1;~TITLE:=BLANKV;?? ?IF SRCFLAG THEN WRITELN(SRCPUNCH,INCARD);?? ?WHILE I<=LLI DO BEGIN~---~END;?? ?TITLE[J+2]:='/';~TITLEN:=TITLEN+3;~IF TITLEN<5 THEN TITLEN:=5?# WHILE I<=LLI DO BEGIN~---~END;?? ?TITLE[J]:=INCARD[I];?? ?IF TITLE[J]<>~' ' THEN TITLEN~:=J;?? ?J:=SUCC(J);~I:=SUCC(I)?# (*OUTPUT OPTIONS*)?? ?5:(*SRCPUNCH *)BEGIN~---~END;?-XOR-? ?6:(*PLIPUNCH *)PLIFLAG:=TOK='Y';?-XOR-? ?8:(*INDENT *)BEGIN~---~END;?# 5:(*SRCPUNCH *)BEGIN~---~END;?? ?SRCFLAG:=TOK='Y';?# 8:(*INDENT *)BEGIN~---~END;?? ?INDFLAG:=NOT(TOK='N');?? ?IF TOK='Y' THEN ICH:=' '?-XOR-? ?ELSE ~ICH:=TOK?# 11:(*TOPBRACK *)BEGIN~---~END;?? ?TBR[2]:=TOK;~TBR[3]:=' '?# 12:(*BOTBRACK *)BEGIN~---~END;?? ?BBR[2]:=TOK;~BBR[3]:=' '?# 21:(*LENLININ *)BEGIN~---~END;?? ?NUM(LLI);~LLIM4:=LLI-4?# (*CPAGE INITIALIZATION*)?? ?IF SPADDR[1]<>NIL THEN ~CPAGE:=SPADDR[1]?-XOR-? ?ELSE BEGIN~---~END;!1215?# ELSE BEGIN~---~END;!1215?? ?NEW(CPAGE);~SPADDR[1]:=CPAGE?# (*PAGE REFERENCES CREATIONS*)?? ?(*BACKREFS FIRST*)?? ?NEWNODE;~TWPTR@.NDSOFF:=LSP;?? ?FOR I:=1 TO 15 DO TVAL[I]:=SEEPG[I];~TWPTR@.LV:=CHR(15);?? ?FRPTR:=TWPTR;~TWPTR@.LPN:=CHR(NLINES(TWPTR));?# FRPTR:=TWPTR;~TWPTR@.LPN:=CHR(NLINES(TWPTR));?? ?IF NODEWIDTH>=15 THEN TWPTR@.LPN:=CHR(1);?? ?FROFF:=0;~WHILE CPAGE@.STRNG[13+TWPTR@.NDSOFF+FROFF]<>~'*' DO?# (*BACKREFS FIRST*)?? ?NEWNODE;?? ?FOR I:=1 TO 28 DO TVAL[I]:=BACKREF[I];~TWPTR@.LV:=CHR(28);?# FOR I:=1 TO 28 DO TVAL[I]:=BACKREF[I];~TWPTR@.LV:=CHR(28);?? ?BRPTR:=TWPTR;~TWPTR@.LPN:=CHR(NLINES(TWPTR));~TWPTR@.NDSOFF:=1;?? ?BROFF:=0;~WHILE CPAGE@.STRNG[26+BROFF]<>'*' DO BROFF:=SUCC(BROFF);?# FROFF:=0;~WHILE CPAGE@.STRNG[13+TWPTR@.NDSOFF+FROFF]<>'*' DO?? ?FROFF:=SUCC(FROFF);?# (*SPACE & DO DIAGRAM*)?? ?FOR I:=1 TO 3 DO BEGIN~---~END;?? ?REPEAT~---~UNTIL RETC=1;?# FOR I:=1 TO 3 DO BEGIN~---~END;?? ?OUTP;WRITELN(OUTDIAG,' ')?# REPEAT~---~UNTIL RETC=1;?? ?REPEAT~---~UNTIL RETC<=1;?? ?IF RETC<>1 THEN REPEAT~---~UNTIL(RETC=1)OR ~(RETC=4)?# REPEAT~---~UNTIL RETC<=1;?<1 ROOT>? ?NEWNODE;!1583?? ?TVAL:=BLANKV;~RETC:=PARSE('H',TWPTR);?? ?IF RETC=0 THEN ~BEGIN~---~END?-XOR-? ?ELSE BEGIN~---~END;(*ERROR*)?? ?IF (RETC<>1) AND EOF(INFLE) THEN BEGIN~---~END;?? ?IF NOT EOF(INFLE) THEN INFILE(INCARD)?# NEWNODE;!1583?? ?OUTP;WRITELN(OUTDIAG,' ',(8*INCARD:LLO*8)(T*COPY(INCARD,1,LLO)*T));?# IF (RETC<>1) AND EOF(INFLE) THEN BEGIN~---~END;?? ?RETC:=1;OUTP;?? ?WRITELN(OUTDIAG,' ***** ENDWARNIERDIAGRAM KEYWORD MISSING.')?# ELSE BEGIN~---~END;(*ERROR*)?? ?TWPTR@.NXT:=WNTOP;~WNTOP:=TWPTR?# IF RETC=0 THEN BEGIN~---~END?? ?IF H=NIL THEN BEGIN~---~END!978?-XOR-? ?ELSE BEGIN~---~END!900?# IF H=NIL THEN BEGIN~---~END!978?? ?WITH TWPTR@ DO BEGIN~---~END;!1195?? ?WLAST:=TWPTR;~H:=TWPTR;~WHEAD:=TWPTR;?# WITH TWPTR@ DO BEGIN~---~END;!1195?? ?LP:=CHR(0);~LPN:=CHR(NLINES(TWPTR));?? ?IF ORD(LR)<>0 THEN BEGIN~---~END;?? ?LVL:=CHR(1);~LS:=1?# IF ORD(LR)<>0 THEN BEGIN~---~END;?? ?LPN:=CHR(ORD(LPN)+1);?? ?RSPN:=CHR(NSP);~RPSOFF:=LSP;?? ?FOR I:=1 TO ORD(LR) DO BEGIN~---~END?# FOR I:=1 TO ORD(LR) DO BEGIN~---~END?? ?CPAGE@.STRNG[LSP]:=TREP[I];~LSP:=SUCC(LSP)?# ELSE BEGIN~---~END!900?? ?IF NOT WHFIND(H) THEN ~BEGIN~---~END?-XOR-? ?ELSE BEGIN~---~END;!206?? ?TWPTR@.NXT:=WNTOP;~WNTOP:=TWPTR?# IF NOT WHFIND(H) THEN BEGIN~---~END?? ?PRINTABLE:=FALSE;?# PRINTABLE:=FALSE;?? ?OUTP;~WRITELN(OUTDIAG,' ***** ATTACHMENT FAILURE.')?# ELSE BEGIN~---~END;!206?? ?IF ORD(TWPTR@.LR)<>0 THEN WITH WLAST@ DO BEGIN~---~END;?? ?WHEAD:=WLAST?# IF ORD(TWPTR@.LR)<>0 THEN WITH WLAST@ DO BEGIN~---~END;?? ?LPN:=CHR(ORD(LPN)+1);~LR:=TWPTR@.LR;?? ?RSPN:=CHR(NSP);~RPSOFF:=LSP;?? ?FOR I:=1 TO ORD(LR) DO BEGIN~---~END!1536?# FOR I:=1 TO ORD(LR) DO BEGIN~---~END!1536?? ?CPAGE@.STRNG[LSP]:=TREP[I];~LSP:=SUCC(LSP)?# IF RETC<>1 THEN REPEAT~---~UNTIL(RETC=1)OR (RETC=4)?? ?NEWNODE;!1631?? ?(*NEW STRING POOL, AS ~NEEDED*)?? ?CASE RETC OF~---~END;?? ?IF EOF(INFLE) THEN RETC:=1 ~ELSE ~INFILE(INCARD);?? ?IF (RETC=1)AND~(NOT (TVAL=EWDL)OR(TVAL=LCEWDL))THEN BEGIN~---~END?# NEWNODE;!1631?? ?OUTP;WRITELN(OUTDIAG,' ',(8*INCARD:LLO*8)(T*COPY(INCARD,1,LLO)*T));?# OUTP;WRITELN(OUTDIAG,' ',(8*INCARD:LLO*8)(T*COPY(INCARD,1,LLO)*T));?? ?TWPTR@.LVL:=CHR(ORD(WHEAD@.LVL)+1);?# TWPTR@.LVL:=CHR(ORD(WHEAD@.LVL)+1);?? ?TVAL:=BLANKV;~RETC:=PARSE('C',TWPTR);?# IF (RETC=1)AND(NOT (TVAL=EWDL)OR(TVAL=LCEWDL))THEN BEGIN~---~END?? ?RETC:=1;OUTP;?? ?WRITELN(OUTDIAG,' ***** ENDWARNIERDIAGRAM KEYWORD MISSING.');?# (*NEW STRING POOL, AS NEEDED*)?? ?IF LSP+ORD(TWPTR@.LV)+ORD(TWPTR@.LI)+20>LENSTRPGS THEN BEGIN~---~END;?# IF LSP+ORD(TWPTR@.LV)+ORD(TWPTR@.LI)+20>LENSTRPGS THEN BEGIN~---~END;?? ?NSP:=SUCC(NSP);~LSP:=1;~TWPTR@.SPN:=CHR(NSP);~TWPTR@.NDSOFF:=1;?? ?(*NEW STRING PAGE*)?# (*NEW STRING PAGE*)?? ?IF SPADDR[NSP]<>NIL THEN ~CPAGE:=SPADDR[NSP]?-XOR-? ?ELSE BEGIN~---~END!1301?# ELSE BEGIN~---~END!1301?? ?NEW(CPAGE);~SPADDR[NSP]:=CPAGE?# CASE RETC OF~---~END;?? ?3,4:WITH TWPTR@ DO BEGIN~---~END;?-XOR-? ?2:BEGIN~---~END;~(*ERROR*)?-XOR-? ?1:BEGIN~---~END!1626?# 2:BEGIN~---~END;(*ERROR*)?? ?TWPTR@.NXT:=WNTOP;~WNTOP:=TWPTR?# 1:BEGIN~---~END!1626?? ?OUTP;~WRITELN(OUTDIAG,' ***** NO TERMINAL SEMICOLON.')?# 3,4:WITH TWPTR@ DO BEGIN~---~END;?? ?NCT:=SUCC(NCT);?? ?LATTACH(H,TWPTR);?? ?(*ATTACH IN WARNIER TREE*)?? ?TWPTR@.BCK:=WLAST;~WLAST:=TWPTR;?? ?TWPTR@.LPN:=CHR(NLINES(TWPTR));?? ?(*DO INFIX*)?# (*ATTACH IN WARNIER TREE*)?? ?IF WHEAD=WLAST THEN ~WHEAD@.NLVL:=TWPTR?-XOR-? ?ELSE WLAST@.NXT:=TWPTR;?# (*DO INFIX*)?? ?IF RETC=4 THEN ~IF ORD(TWPTR@.LI)<>0 THEN BEGIN~---~END;?? ?FOR I:=1 TO ORD(LI) DO BEGIN~---~END?# IF RETC=4 THEN IF ORD(TWPTR@.LI)<>0 THEN BEGIN~---~END;?? ?OUTP;~TWPTR@.LI:=~CHR(0);?? ?WRITELN(OUTDIAG,' ***** INFIX MEANINGLESS HERE. SUPPRESSED.')?# FOR I:=1 TO ORD(LI) DO BEGIN~---~END?? ?CPAGE@.STRNG[LSP]:=TINFX[I];~LSP:=SUCC(LSP)?# ELSE IF NOT PRINTABLE THEN BEGIN~---~END?? ?OUTP;~WRITELN(OUTDIAG,' ***** MAJOR ERROR SUPPRESSED OUTPUT.',?# OUTP;WRITELN(OUTDIAG,' ***** MAJOR ERROR SUPPRESSED OUTPUT.',?? ?' CORRECT BEFORE RE-RUNNING.')?# ELSE BEGIN~---~END!844?? ?IF SRCFLAG THEN BEGIN~---~END;?? ?IF PLIFLAG THEN BEGIN~---~END;?? ?PDN:=DDN;?? ?(*GO PAGINATE*)?? ?PDN[6]:='-';?? ?PDN[7]:=CPN[2];~PDN[8]:=CPN[3];?? ?(*CLOSE LAYOUT STAGE*)?? ?(*FILL IN PAGE NUMBERS AS FINALLY PAGINATED*)?? ?(*OUTPUT ROOT PAGE*)?? ?(*SUBPAGE OUTPUT*)?? ?OUTP;WRITELN(OUTDIAG,' PRINT DONE AT ',CLOCK);?? ?OUTP;WRITELN(OUTDIAG,' NODES:',NCT:5,'; PAGES:',?# OUTP;WRITELN(OUTDIAG,' NODES:',NCT:5,'; PAGES:',?? +?LPCNT:3,'; N/P:',(NCT DIV LPCNT):4,'; PASSES:',PASSCNT:3,?+++? +?'; CODE PAGES:',NSP:2)?# IF SRCFLAG THEN BEGIN~---~END;?? ?(*BODY AND ENDWARNIER*)?? ?OUTP;WRITELN(OUTDIAG,' SRCPUNCH DONE AT ',CLOCK);?# (*BODY AND ENDWARNIER*)?? ?SRCOUT(H);?? ?WRITELN(SRCPUNCH,EWDL);?# IF PLIFLAG THEN BEGIN~---~END;?? ?PLIOUT(H);?? ?OUTP;WRITELN(OUTDIAG,' PLIPUNCH DONE AT ',CLOCK)?# (*GO PAGINATE*)?? ?PASSCNT:=0;?? ?REPEAT~---~UNTIL((GMXH<=DGMPL)AND(GMXD<=COLPP))OR(NQ=0);?# REPEAT~---~UNTIL((GMXH<=DGMPL)AND(GMXD<=COLPP))OR(NQ=0);?? ?NQ:=0;~GMXH:=0;~PASSCNT:=SUCC(PASSCNT);?? ?(*DET'N OF NQLIM*)?? ?FOR I:=1 TO MAXDEPTH DO TOTWIDTH[I]~:=-1;?? ?CONVERT(PASSCNT,CPN);?? ?H@.ST:=~LAYOUT(H@.NLVL)-ORD(H@.LPN) DIV 2;?? ?IF (NQ>0) AND ~((GMXH>DGMPL)OR ~(GMXD>COLPP)) THEN DOPAGES?# (*DET'N OF NQLIM*)?? ?NQLIM:=(NCT DIV 35)-LPCNT+1;?? ?IF PASSCNT>NQLIM THEN NQLIM:=LPCNT DIV 2;?? ?IF NQLIM=0 THEN NQLIM:=1;?# (*CLOSE LAYOUT STAGE*)?? ?OUTP;WRITELN(OUTDIAG,' LAYOUT DONE AT ',CLOCK);?? ?IF (NQ=0) AND ~((GMXH>DGMPL) OR ~(GMXD>COLPP)) THEN?# IF (NQ=0) AND ((GMXH>DGMPL) OR (GMXD>COLPP)) THEN?? ?(*ANY ERROR ~MESSAGE*)?? +?BEGIN~---~END;!1146?# +BEGIN~---~END;!1146?? ?OUTP;~WRITELN(OUTDIAG,' ***** NO PAGE ',?# OUTP;WRITELN(OUTDIAG,' ***** NO PAGE ',?? +?'CANDIDATE. PAGINATION HALTED AT ',LPCNT:3,?+++? +?' PAGES WITH ',GMXH:4,' LINES AND ',GMXD:2,' COLUMNS.')?# (*FILL IN PAGE NUMBERS AS FINALLY PAGINATED*)?? ?TPTR:=FPORD;~NQ:=2;?? ?WHILE TPTR<>NIL DO BEGIN~---~END;!949?# WHILE TPTR<>NIL DO BEGIN~---~END;!949?? ?TPTR@.DDL:=CHR(NQ);?? ?NQ:=SUCC(NQ);~TPTR:=TPTR@.NEXTQ?# (*OUTPUT ROOT PAGE*)?? ?LINLINK(H,0);OUTPAGE(H);?# (*SUBPAGE OUTPUT*)?? ?TPTR:=FPORD;?? ?WHILE TPTR<>NIL DO BEGIN~---~END;!1740?# WHILE TPTR<>NIL DO BEGIN~---~END;!1740?? ?T:=TPTR@.SPPTR;?? ?PDN:=TPTR@.DDNSTR;?? ?WITH T@ DO BEGIN~---~END;!689?? ?FPORD:=TPTR;?? ?TPTR:=TPTR@.NEXTQ;?? ?FPORD@.NEXTQ:=QLTOP;~QLTOP:=FPORD?# WITH T@ DO BEGIN~---~END;!689?? ?(*FILL IN BACKREF PAGENO*)?? ?CONVERT(TPTR@.PRTY,CPN);?? ?FOR I:=1 TO 3 DO SPADDR[1]@.STRNG[21+I+BROFF]:=CPN[I];?? ?WITH TPTR@ DO BEGIN~---~END;?? ?GMXD:=ORD(TPTR@.LDPH)-ORD(LVL)+2;?? ?LINLINK(BCK,ORD(LVL)-2);~OUTPAGE(BCK)?# WITH TPTR@ DO BEGIN~---~END;?? ?BCK@.LS:=LSPH;~BCK@.ST:=STPH;~BCK@.NXT:=NIL;~(*BCK@.LD:=~LDPH*)?? ?(*RESTORE ELDEST SON VALUE*)?? ?NLVL:=NLVLH;~NXT:=NXTH;~SPN:=SPNH;?? ?NDSOFF:=NDSOFFH;~SUBPAGE:=NIL;?? ?LV:=LVH;LP:=LPH;~LR:=LRH;LI:=LIH;?? ?LPN:=LPNH;~ST:=STSH?# ENDWARNIERDIAGRAM