// PLIST
GET "SYNHDR"
LET PLIST(X, N, D) BE
$(1 LET SIZE = 0
LET V = TABLE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
IF X=0 DO $( WRITES("NIL"); RETURN $)
SWITCHON H1!X INTO
$( CASE S.NUMBER: WRITEN(H2!X); RETURN
CASE S.NAME: WRITES(X+2); RETURN
CASE S.STRING: WRITEF("*"%S*"", X+1); RETURN
CASE S.FOR:
SIZE := SIZE + 2
CASE S.COND:CASE S.FNDEF:CASE S.RTDEF:
CASE S.TEST:CASE S.CONSTDEF:
SIZE := SIZE + 1
CASE S.VECAP:CASE S.FNAP: CASE S.BYTEAP: CASE S.NEEDS:
CASE S.SECTION:
CASE S.MULT:CASE S.DIV:CASE S.REM:CASE S.PLUS:CASE S.MINUS:
CASE S.EQ:CASE S.NE:CASE S.LS:CASE S.GR:CASE S.LE:CASE S.GE:
CASE S.LSHIFT:CASE S.RSHIFT:CASE S.LOGAND:CASE S.LOGOR:
CASE S.EQV:CASE S.NEQV:CASE S.COMMA:
CASE S.AND:CASE S.VALDEF:CASE S.VECDEF:
CASE S.ASS:CASE S.RTAP:CASE S.COLON:CASE S.IF:CASE S.UNLESS:
CASE S.WHILE:CASE S.UNTIL:CASE S.REPEATWHILE:
CASE S.REPEATUNTIL:
CASE S.SWITCHON:CASE S.CASE:CASE S.SEQ:CASE S.LET:
CASE S.MANIFEST:CASE S.STATIC:CASE S.GLOBAL:
SIZE := SIZE + 1
CASE S.VALOF:CASE S.LV:CASE S.RV:CASE S.NEG:CASE S.NOT:
CASE S.TABLE:CASE S.GOTO:CASE S.RESULTIS:CASE S.REPEAT:
CASE S.ABS:
CASE S.DEFAULT:
SIZE := SIZE + 1
CASE S.LOOP:
CASE S.BREAK:CASE S.RETURN:CASE S.FINISH:CASE S.ENDCASE:
CASE S.TRUE:CASE S.FALSE:CASE S.QUERY:
DEFAULT:
SIZE := SIZE + 1
IF N=D DO $( WRITES("ETC")
RETURN $)
WRITES ("OP")
WRITEN(H1!X)
FOR I = 2 TO SIZE DO
$( NEWLINE()
FOR J=0 TO N-1 DO WRITES( V!J )
WRITES("**-")
V!N := I=SIZE->" ","! "
PLIST(H1!(X+I-1), N+1, D) $)
RETURN $)1
.