Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-02 - decus/20-0057/crosph.new
There is 1 other file named crosph.new in the archive. Click here to see a list.
;*	*	*	*	*	*	*	*	*
;*	*	DECLARATIONS	*	*	*	*	*
;*	*	*	*	*	*	*	*	*
;*
;*		LOCAL
;*
;	DECLARE('SNOBOL.SUBPROGRAM','CROSPH')
;	DECLARE('OPTION','NO.STNO')
;	DECLARE('PURGE.VARIABLE',ALL)
;	DECLARE('PURGE.LABEL',ALL)
;	DECLARE('EXTERNAL.FUNCTION','PRTOUT')
;	DECLARE('STRING','SSTNO(5)')
;	DECLARE('INTEGER','I,J,PUTSYM')
;	DECLARE('ENTRY.FUNCTION','INICRS()')
;	DECLARE('ENTRY.FUNCTION','CROSPH()TREEHD')
;*
;*		SYSTEM COMMON
;*
;*	TABLES AND LISTS
;	DECLARE('EXTERNAL.VARIABLE',
;.'SYMBTB,XNAMTB,KEYWTB,CTRLTB,DECLTB,CROSTB,CONSTB,ENTFTB,DSIZTB,
;.BOPRTB,UOPRTB')
;	DECLARE('EXTERNAL.VARIABLE',
;.'ENTRLS,EXTRLS,FORTLS')
;*	ARRAYS
;	DECLARE('EXTERNAL.VARIABLE',
;.'PTVRAR,PTFNAR,PRIMAR,GOTOAR,DECLAR,PROGAR,VARBAR,MACHAR,STENAR,BOPRAR,
;.UOPRAR,PATRAR,EXPRAR,AROPAR,ARITAR,EACTAR')
;*	PARAMETERS (STRINGS,DATATYPES)
;	DECLARE('EXTERNAL.VARIABLE',
;.'C,INDENT,SPLASH,ITNAM,ITENT,NOFAIL,SNONAM,SUBNAM,PARBLK,PRGNAM,STARTP,
;.TEMLOC,P1,P2,P3,P4,P5')
;*	PARAMETERS (INTEGERS)
;	DECLARE('EXTERNAL.VARIABLE',
;.'P,OBJFLG,LISTSR,INTGER,ITTYP,ITATR,PRGALV,PRGALL,PRGALF,STNFLG,HSHSIZ,
;.STRTIM,DMPFLG,LISTOB,STNO,MAXTMP')
;	DECLARE('INTEGER',
;.'P,OBJFLG,LISTSR,INTGER,ITTYP,ITATR,PRGALV,PRGALL,PRGALF,STNFLG,HSHSIZ,
;.STRTIM,DMPFLG,LISTOB,STNO,MAXTMP')
;	DECLARE('EXTERNAL.VARIABLE',
;.'XNATRB,VTATRB,VDATRB,LTATRB,FTATRB,FDATRB,TXATRB,VNATRB,VXATRB,VIATRB,
;.VGATRB,LIATRB,LGATRB,FIATRB,FGATRB,FXATRB,SKATRB,SDATRB,BTATRB')
;	DECLARE('INTEGER',
;.'XNATRB,VTATRB,VDATRB,LTATRB,FTATRB,FDATRB,TXATRB,VNATRB,VXATRB,VIATRB,
;.VGATRB,LIATRB,LGATRB,FIATRB,FGATRB,FXATRB,SKATRB,SDATRB,BTATRB')
;	DECLARE('EXTERNAL.VARIABLE',
;.'XNVATR,XNLATR,XNFATR,XNXMSK,VTVATR,VDDATR,VDPATR,VDDMSK,LTDATR,LTTMSK,
;.FTFATR,FDPATR,FDIATR,FDDMSK,TXTATR,TXTMSK,VNNATR,VXXATR,VIPATR,VGGATR,
;.LIPATR,LGGATR,FIPATR,FGGATR,FXXATR,FXXMSK,SKRATR,SDRATR,BTRATR')
;	DECLARE('INTEGER',
;.'XNVATR,XNLATR,XNFATR,XNXMSK,VTVATR,VDDATR,VDPATR,VDDMSK,LTDATR,LTTMSK,
;.FTFATR,FDPATR,FDIATR,FDDMSK,TXTATR,TXTMSK,VNNATR,VXXATR,VIPATR,VGGATR,
;.LIPATR,LGGATR,FIPATR,FGGATR,FXXATR,FXXMSK,SKRATR,SDRATR,BTRATR')
;*	SPECIAL CHARACTERS,CHARACTER SEQUENCES, AND CHARACTER CLASSES
;	DECLARE('EXTERNAL.VARIABLE',
;.'FFCHR,CRLCHR,LFCHR,CRCHR,SQCHR,DQCHR,TBCHR,LCSCHR,BLNCHR,EQLCHR,
;.QTSCHR,ELTCHR,LBCHR')
;*	PATTERNS AND MATCHES
;	DECLARE('EXTERNAL.VARIABLE',
;.'COMSPT,INTGPT,BLNKPT,OPBLPT,PCOMPT,PCPRMT,IDENPT,DCLCMT,RSIDPT,LABLPT,
;.POPRMT,IDENMT,SQLTPT,DQLTPT,LBDCPT,IDDCPT')
;*
;*	MINIMAL SYMBOL TABLE
;*
;	DECLARE('UNPURGE.VARIABLE','INICRS,CROSPH,TREEHD,PUTSYM,ENT,
;.WALK')
;	DECLARE('UNPURGE.LABEL','INICRS CROSPH PUTSYM WALK')
;	DECLARE('PURGE.FUNCTION','DEFINE,DATA,ARRAY,DIFFER,DATATYPE,LGT,
;.COPY,SIZE,TIME')
;*	*	*	*	*	*	*	*	*
;*	*	INITIALIZE CROSS-REFERENCE PHASE	*	*
;*	*	*	*	*	*	*	*	*
;INICRS	DEFINE('PUTSYM(ENT)')
TITLE CROSPH
	OPDEF	UFERR$	[1B8]
	OPDEF	CFERR$	[2B8]
	OPDEF	FCALV$	[3B8]
	OPDEF	FCALN$	[4B8]
	OPDEF	DASGN$	[5B8]
	OPDEF	DCONC$	[6B8]
	OPDEF	DICNV$	[7B8]
	OPDEF	DRCNV$	[10B8]
	OPDEF	AREFV$	[11B8]
	OPDEF	AREFN$	[12B8]
ENTRY CROSPH,INICRS
EXTERN IDDCPT,LBDCPT,DQLTPT,SQLTPT,IDENMT,POPRMT,LABLPT,RSIDPT,DCLCMT,IDENPT
EXTERN PCPRMT,PCOMPT,OPBLPT,BLNKPT,INTGPT,COMSPT,LBCHR,ELTCHR,QTSCHR,EQLCHR
EXTERN BLNCHR,LCSCHR,TBCHR,DQCHR,SQCHR,CRCHR,LFCHR,CRLCHR,FFCHR,BTRATR
EXTERN SDRATR,SKRATR,FXXMSK,FXXATR,FGGATR,FIPATR,LGGATR,LIPATR,VGGATR,VIPATR
EXTERN VXXATR,VNNATR,TXTMSK,TXTATR,FDDMSK,FDIATR,FDPATR,FTFATR,LTTMSK,LTDATR
EXTERN VDDMSK,VDPATR,VDDATR,VTVATR,XNXMSK,XNFATR,XNLATR,XNVATR,BTATRB,SDATRB
EXTERN SKATRB,FXATRB,FGATRB,FIATRB,LGATRB,LIATRB,VGATRB,VIATRB,VXATRB,VNATRB
EXTERN TXATRB,FDATRB,FTATRB,LTATRB,VDATRB,VTATRB,XNATRB,MAXTMP,STNO,LISTOB
EXTERN DMPFLG,STRTIM,HSHSIZ,STNFLG,PRGALF,PRGALL,PRGALV,ITATR,ITTYP,INTGER
EXTERN LISTSR,OBJFLG,P,P5,P4,P3,P2,P1,TEMLOC,STARTP
EXTERN PRGNAM,PARBLK,SUBNAM,SNONAM,NOFAIL,ITENT,ITNAM,SPLASH,INDENT,C
EXTERN EACTAR,ARITAR,AROPAR,EXPRAR,PATRAR,UOPRAR,BOPRAR,STENAR,MACHAR,VARBAR
EXTERN PROGAR,DECLAR,GOTOAR,PRIMAR,PTFNAR,PTVRAR,FORTLS,EXTRLS,ENTRLS,UOPRTB
EXTERN BOPRTB,DSIZTB,ENTFTB,CONSTB,CROSTB,DECLTB,CTRLTB,KEYWTB,XNAMTB,SYMBTB
EXTERN PRTOUT
L10090:
	MOVEI	14,Q10002
	MOVEM	14,S$$FLP##
	MOVE	1,S10237
	FCALV$	^D1,F10066
Q10002:
;	DEFINE('WALK(ENT)')
	MOVEI	14,Q10003
	MOVEM	14,S$$FLP##
	MOVE	1,S10238
	FCALV$	^D1,F10066
Q10003:
;	DATA('CRS(NEXT,CRSI)')
	MOVEI	14,Q10004
	MOVEM	14,S$$FLP##
	MOVE	1,S10239
	FCALV$	^D1,F10060
Q10004:
;	DATA('NOD(FRNT,BACK)')
	MOVEI	14,Q10005
	MOVEM	14,S$$FLP##
	MOVE	1,S10240
	FCALV$	^D1,F10060
Q10005:
;	ATRARR	= ARRAY('0:4,0:1')
	MOVEI	14,Q10006
	MOVEM	14,S$$FLP##
	MOVE	1,S10242
	FCALV$	^D1,F10063
	MOVEM	1,@N10241
Q10006:
;	ATRARR<0,1>	= INDENT 'VARIABLE'
	MOVEI	14,Q10007
	MOVEM	14,S$$FLP##
	MOVE	1,I10243
	PUSH	16,1
	MOVE	1,I10244
	AREFN$	^D2,N10241
	PUSH	16,1
	MOVE	1,@INDENT
	PUSH	16,1
	MOVE	1,S10245
	JSP	14,S$$CNC##
	EXP	^D2
	JSP	11,S$$ASG##
Q10007:
;	ATRARR<1,1>	= INDENT 'LABEL'
	MOVEI	14,Q10008
	MOVEM	14,S$$FLP##
	MOVE	1,I10244
	PUSH	16,1
	MOVE	1,I10244
	AREFN$	^D2,N10241
	PUSH	16,1
	MOVE	1,@INDENT
	PUSH	16,1
	MOVE	1,S10246
	JSP	14,S$$CNC##
	EXP	^D2
	JSP	11,S$$ASG##
Q10008:
;	ATRARR<2,1>	= INDENT 'FUNCTION'
	MOVEI	14,Q10009
	MOVEM	14,S$$FLP##
	MOVE	1,I10247
	PUSH	16,1
	MOVE	1,I10244
	AREFN$	^D2,N10241
	PUSH	16,1
	MOVE	1,@INDENT
	PUSH	16,1
	MOVE	1,S10248
	JSP	14,S$$CNC##
	EXP	^D2
	JSP	11,S$$ASG##
Q10009:
;	ATRARR<3,1>	= INDENT 'STRING'
	MOVEI	14,Q10010
	MOVEM	14,S$$FLP##
	MOVE	1,I10249
	PUSH	16,1
	MOVE	1,I10244
	AREFN$	^D2,N10241
	PUSH	16,1
	MOVE	1,@INDENT
	PUSH	16,1
	MOVE	1,S10250
	JSP	14,S$$CNC##
	EXP	^D2
	JSP	11,S$$ASG##
Q10010:
;	ATRARR<4,1>	= INDENT 'BREAK TABLE'	:(RETURN)
	MOVEI	14,S$$SRT##
	MOVEM	14,S$$FLP##
	MOVE	1,I10251
	PUSH	16,1
	MOVE	1,I10244
	AREFN$	^D2,N10241
	PUSH	16,1
	MOVE	1,@INDENT
	PUSH	16,1
	MOVE	1,S10252
	JSP	14,S$$CNC##
	EXP	^D2
	JSP	11,S$$ASG##
	JRST	S$$SRT##
;*	*	*	*	*	*	*	*	*
;*	*	PRODUCE CROSS-REFERENCE LISTING	*	*	*
;*	*	*	*	*	*	*	*	*
;CROSPH	?INE(LISTSR,0)	:F(RETURN)
L10092:
	MOVEI	14,S$$SRT##
	MOVEM	14,S$$FLP##
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$NEP##
	JUMP	0,LISTSR
	JUMP	0,K10243
	ADD	16,S$$STB##
	SETZ	1,
;	LISTAR	= ARRAY(CROSTB)	:F(RETURN)
	MOVEI	14,S$$SRT##
	MOVEM	14,S$$FLP##
	MOVE	1,@CROSTB
	FCALV$	^D1,F10063
	MOVEM	1,@N10253
;	PRTOUT(FFCHR CRLCHR CRLCHR SPLASH INDENT
;. '******* CROSS-REFERENCE DICTIONARY *******' CRLCHR SPLASH CRLCHR
;. '[SYMBOL]' CRLCHR INDENT 'ATTRIBUTE,STATEMENT NUMBERS' CRLCHR CRLCHR
;. CRLCHR)
	MOVEI	14,Q10011
	MOVEM	14,S$$FLP##
	MOVE	1,@FFCHR
	PUSH	16,1
	MOVE	1,@CRLCHR
	PUSH	16,1
	MOVE	1,@CRLCHR
	PUSH	16,1
	MOVE	1,@SPLASH
	PUSH	16,1
	MOVE	1,@INDENT
	PUSH	16,1
	MOVE	1,S10254
	PUSH	16,1
	MOVE	1,@CRLCHR
	PUSH	16,1
	MOVE	1,@SPLASH
	PUSH	16,1
	MOVE	1,@CRLCHR
	PUSH	16,1
	MOVE	1,S10255
	PUSH	16,1
	MOVE	1,@CRLCHR
	PUSH	16,1
	MOVE	1,@INDENT
	PUSH	16,1
	MOVE	1,S10256
	PUSH	16,1
	MOVE	1,@CRLCHR
	PUSH	16,1
	MOVE	1,@CRLCHR
	PUSH	16,1
	MOVE	1,@CRLCHR
	JSP	14,S$$CNC##
	EXP	^D16
	FCALV$	^D1,PRTOUT
Q10011:
;	I	= 1
	MOVE	^D1,K10244
	MOVEM	1,V10087
;	TREEHD	= 1
	MOVEI	14,Q10012
	MOVEM	14,S$$FLP##
	MOVE	1,I10244
	MOVEM	1,@N10234
Q10012:
;*	LOOP TO PUT SYMBOL INDICES IN TREE
;CROS1	I	= I + 1
L10257:
	MOVE	^D1,V10087
	ADD	^D1,K10244
	MOVEM	1,V10087
;	ITNAM	= LISTAR<I,1>	:F(CROS2)
	MOVEI	14,L10258
	MOVEM	14,S$$FLP##
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,I10244
	AREFV$	^D2,N10253
	MOVEM	1,@ITNAM
;	J	= PUTSYM(TREEHD)
	MOVEI	14,Q10013
	MOVEM	14,S$$FLP##
	MOVE	1,@N10234
	FCALV$	^D1,F10089
	DASGN$	2,V10088
Q10013:
;	?INE(J,0)	:F(CROS1)
	MOVEI	14,L10257
	MOVEM	14,S$$FLP##
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$NEP##
	JUMP	0,V10088
	JUMP	0,K10243
	ADD	16,S$$STB##
	SETZ	1,
;	TREEHD	= ?ILT(J,0) NOD(I,TREEHD)	:S(CROS1)
	MOVEI	14,Q10014
	MOVEM	14,S$$FLP##
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$LTP##
	JUMP	0,V10088
	JUMP	0,K10243
	ADD	16,S$$STB##
	SETZ	1,
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,@N10234
	FCALV$	^D2,F10259
	MOVEM	1,@N10234
	JRST	L10257
Q10014:
;	TREEHD	= NOD(TREEHD,I)	:(CROS1)
	MOVEI	14,L10257
	MOVEM	14,S$$FLP##
	MOVE	1,@N10234
	PUSH	16,1
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	FCALV$	^D2,F10259
	MOVEM	1,@N10234
	JRST	L10257
;*	WALK TREE AND LIST SYMBOLS IN ORDER
;CROS2	WALK(TREEHD)	:(RETURN)
L10258:
	MOVEI	14,S$$SRT##
	MOVEM	14,S$$FLP##
	MOVE	1,@N10234
	FCALV$	^D1,F10236
	JRST	S$$SRT##
;*	*	*	*	*	*	*	*	*
;*	*	SUBROUTINES	*	*	*	*	*
;*	*	*	*	*	*	*	*	*
;*		PUTSYM(ENT) PUT SYMBOL IN TREE IN LEXICAL ORDER
;*	RETURNS -N, 0, 0R N DEPENDING ON WHETHER THE NEW SYMBOL IS TO
;*	THE LEFT (LESS), WITHIN, OR TO THE RIGHT (GREATER) OF THE
;*	SUBTREE. N IS THE FUNCTION (TREE) DEPTH AT WHICH THE COMPARISON
;*	WAS MADE, AND IS USED TO KEEP THE TREE AS BALANCED AS POSSIBLE
;*
;PUTSYM	ENT	= ?DIFFER(DATATYPE(ENT),'NOD') LISTAR<ENT,1> :F(PUTS1)
L10089:
	MOVEI	14,L10260
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALV$	^D1,F10052
	PUSH	16,1
	MOVE	1,S10259
	FCALV$	^D2,F10071
	SETZ	1,
	MOVE	1,@N10235
	PUSH	16,1
	MOVE	1,I10244
	AREFV$	^D2,N10253
	MOVEM	1,@N10235
;	PUTSYM	= LGT(ENT,ITNAM) -&FNCLEVEL	:S(RETURN)
	MOVEI	14,Q10015
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	PUSH	16,1
	MOVE	1,@ITNAM
	FCALV$	^D2,F10061
	PUSH	16,1
	MOVN	^D1,S$$KWD##+^D3
	TLO	1,1B18
	TLZ	1,1B19
	JSP	14,S$$CNC##
	EXP	^D2
	DASGN$	2,V10089
	JRST	S$$SRT##
Q10015:
;	PUTSYM	= &FNCLEVEL	:(RETURN)
	MOVE	^D1,S$$KWD##+^D3
	MOVEM	1,V10089
	JRST	S$$SRT##
;PUTS1	PUTSYM	= PUTSYM(FRNT(ENT))
L10260:
	MOVEI	14,Q10016
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALV$	^D1,F10261
	FCALV$	^D1,F10089
	DASGN$	2,V10089
Q10016:
;	J	= ?IGT(PUTSYM,0) PUTSYM(BACK(ENT))	:F(RETURN)
	MOVEI	14,S$$SRT##
	MOVEM	14,S$$FLP##
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$GTP##
	JUMP	0,V10089
	JUMP	0,K10243
	ADD	16,S$$STB##
	SETZ	1,
	MOVE	1,@N10235
	FCALV$	^D1,F10262
	FCALV$	^D1,F10089
	DASGN$	2,V10088
;	PUTSYM	= ?IGE(J,0) J	:S(RETURN)
	MOVEI	14,Q10017
	MOVEM	14,S$$FLP##
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$GEP##
	JUMP	0,V10088
	JUMP	0,K10243
	ADD	16,S$$STB##
	SETZ	1,
	MOVE	^D1,V10088
	MOVEM	1,V10089
	JRST	S$$SRT##
Q10017:
;	FRNT(ENT)	= ?ILT(PUTSYM + J,0) NOD(FRNT(ENT),I) :S(PUTS2)
	MOVEI	14,Q10018
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALN$	^D1,F10261
	PUSH	16,1
	MOVE	^D1,V10089
	ADD	^D1,V10088
	MOVEM	1,Q10001+^D0
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$LTP##
	JUMP	0,Q10001+^D0
	JUMP	0,K10243
	ADD	16,S$$STB##
	SETZ	1,
	MOVE	1,@N10235
	FCALV$	^D1,F10261
	PUSH	16,1
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	FCALV$	^D2,F10259
	JSP	11,S$$ASG##
	JRST	L10263
Q10018:
;	BACK(ENT)	= ?IGT(PUTSYM + J,0) NOD(I,BACK(ENT)) :S(PUTS2)
	MOVEI	14,Q10019
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALN$	^D1,F10262
	PUSH	16,1
	MOVE	^D1,V10089
	ADD	^D1,V10088
	MOVEM	1,Q10001+^D0
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$GTP##
	JUMP	0,Q10001+^D0
	JUMP	0,K10243
	ADD	16,S$$STB##
	SETZ	1,
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,@N10235
	FCALV$	^D1,F10262
	FCALV$	^D2,F10259
	JSP	11,S$$ASG##
	JRST	L10263
Q10019:
;	FRNT(ENT)	= ?IEQ(AND(TIME(),1),0) NOD(FRNT(ENT),I)
;.	:S(PUTS2)
	MOVEI	14,Q10020
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALN$	^D1,F10261
	PUSH	16,1
	FCALV$	^D0,F10045
	DASGN$	2,Q10001+^D1
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$AND##
	JUMP	0,Q10001+^D1
	JUMP	0,K10244
	ADD	16,S$$STB##
	MOVE	1,0
	MOVEM	1,Q10001+^D0
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$EQP##
	JUMP	0,Q10001+^D0
	JUMP	0,K10243
	ADD	16,S$$STB##
	SETZ	1,
	MOVE	1,@N10235
	FCALV$	^D1,F10261
	PUSH	16,1
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	FCALV$	^D2,F10259
	JSP	11,S$$ASG##
	JRST	L10263
Q10020:
;	BACK(ENT)	= NOD(I,BACK(ENT))
	MOVEI	14,Q10021
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALN$	^D1,F10262
	PUSH	16,1
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,@N10235
	FCALV$	^D1,F10262
	FCALV$	^D2,F10259
	JSP	11,S$$ASG##
Q10021:
;PUTS2	PUTSYM	=	:(RETURN)
L10263:
	MOVEI	14,S$$SRT##
	MOVEM	14,S$$FLP##
	SETZM	V10089
	JRST	S$$SRT##
;*	*	*	*	*	*	*	*	*
;*		WALK(ENT) WALK TREE
;*	DOES A LEFT-TO-RIGHT, BOTTOM-TO-TOP TREE WALK, PRINTING THE
;*	INFORMATION FOR EACH SYMBOL AS IT IS ENCOUNTERED IN THE TREE
;*
;WALK	(?DIFFER(DATATYPE(ENT),'INTEGER') ?WALK(FRNT(ENT))
;. ?WALK(BACK(ENT)))	:S(RETURN)
L10236:
	MOVEI	14,Q10022
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALV$	^D1,F10052
	PUSH	16,1
	MOVE	1,S10048
	FCALV$	^D2,F10071
	SETZ	1,
	MOVE	1,@N10235
	FCALV$	^D1,F10261
	FCALV$	^D1,F10236
	SETZ	1,
	MOVE	1,@N10235
	FCALV$	^D1,F10262
	FCALV$	^D1,F10236
	SETZ	1,
	JRST	S$$SRT##
Q10022:
;	AR	= COPY(ATRARR)
	MOVEI	14,Q10023
	MOVEM	14,S$$FLP##
	MOVE	1,@N10241
	FCALV$	^D1,F10053
	MOVEM	1,@N10264
Q10023:
;	PRTOUT(CRLCHR '[' LISTAR<ENT,1> ']')
	MOVEI	14,Q10024
	MOVEM	14,S$$FLP##
	MOVE	1,@CRLCHR
	PUSH	16,1
	MOVE	1,S10265
	PUSH	16,1
	MOVE	1,@N10235
	PUSH	16,1
	MOVE	1,I10244
	AREFV$	^D2,N10253
	PUSH	16,1
	MOVE	1,S10266
	JSP	14,S$$CNC##
	EXP	^D4
	FCALV$	^D1,PRTOUT
Q10024:
;	ENT	= LISTAR<ENT,2>	:(WLK2)
	MOVEI	14,L10267
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	PUSH	16,1
	MOVE	1,I10247
	AREFV$	^D2,N10253
	MOVEM	1,@N10235
	JRST	L10267
;WLK1	ENT	= NEXT(ENT)
L10268:
	MOVEI	14,Q10025
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALV$	^D1,F10269
	MOVEM	1,@N10235
Q10025:
;WLK2	I	= ?DIFFER(ENT) CRSI(ENT)	:F(WLK3)
L10267:
	MOVEI	14,L10271
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALV$	^D1,F10071
	SETZ	1,
	MOVE	1,@N10235
	FCALV$	^D1,F10270
	DASGN$	2,V10087
;	J	= RSHIFT(I,3)
	MOVEI	14,Q10026
	MOVEM	14,S$$FLP##
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$RSH##
	JUMP	0,V10087
	JUMP	0,K10249
	ADD	16,S$$STB##
	MOVE	1,0
	MOVEM	1,V10088
Q10026:
;	I	= AND(I,7)
	MOVEI	14,Q10027
	MOVEM	14,S$$FLP##
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$AND##
	JUMP	0,V10087
	JUMP	0,K10272
	ADD	16,S$$STB##
	MOVE	1,0
	MOVEM	1,V10087
Q10027:
;	AR<I,0>	= CRS(AR<I,0>,J)	:S(WLK1)
	MOVEI	14,Q10028
	MOVEM	14,S$$FLP##
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,I10243
	AREFN$	^D2,N10264
	PUSH	16,1
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,I10243
	AREFV$	^D2,N10264
	PUSH	16,1
	MOVE	^D1,V10088
	TLO	1,1B18
	TLZ	1,1B19
	FCALV$	^D2,F10273
	JSP	11,S$$ASG##
	JRST	L10268
Q10028:
;	AR<I - 5,0>	= CRS(AR<I - 5,0>,J)	:(WLK1)
	MOVEI	14,L10268
	MOVEM	14,S$$FLP##
	MOVE	^D1,V10087
	SUB	^D1,K10274
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,I10243
	AREFN$	^D2,N10264
	PUSH	16,1
	MOVE	^D1,V10087
	SUB	^D1,K10274
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,I10243
	AREFV$	^D2,N10264
	PUSH	16,1
	MOVE	^D1,V10088
	TLO	1,1B18
	TLZ	1,1B19
	FCALV$	^D2,F10273
	JSP	11,S$$ASG##
	JRST	L10268
;WLK3	I	=
L10271:
	MOVEI	14,Q10029
	MOVEM	14,S$$FLP##
	SETZM	V10087
Q10029:
;WLK4	ENT	= AR<I,0>
L10275:
	MOVEI	14,Q10030
	MOVEM	14,S$$FLP##
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,I10243
	AREFV$	^D2,N10264
	MOVEM	1,@N10235
Q10030:
;	WALK	= ?DIFFER(ENT)	AR<I,1>	:F(WLK8)
	MOVEI	14,L10276
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALV$	^D1,F10071
	SETZ	1,
	MOVE	^D1,V10087
	TLO	1,1B18
	TLZ	1,1B19
	PUSH	16,1
	MOVE	1,I10244
	AREFV$	^D2,N10264
	MOVEM	1,@N10236
;	J	= ?PRTOUT(WALK,'',1) SIZE(WALK)	:(WLK6)
	MOVEI	14,L10277
	MOVEM	14,S$$FLP##
	MOVE	1,@N10236
	PUSH	16,1
	SETZ	1,
	PUSH	16,1
	MOVE	1,I10244
	FCALV$	^D3,PRTOUT
	SETZ	1,
	MOVE	1,@N10236
	FCALV$	^D1,F10050
	DASGN$	2,V10088
	JRST	L10277
;WLK5	ENT	= NEXT(ENT)
L10278:
	MOVEI	14,Q10031
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALV$	^D1,F10269
	MOVEM	1,@N10235
Q10031:
;WLK6	SSTNO	= ?DIFFER(ENT) CRSI(ENT)	:F(WLK7)
L10277:
	MOVEI	14,L10279
	MOVEM	14,S$$FLP##
	MOVE	1,@N10235
	FCALV$	^D1,F10071
	SETZ	1,
	MOVE	1,@N10235
	FCALV$	^D1,F10270
	DASGN$	1,V10086
;	WALK	= ',' SSTNO
	MOVEI	14,Q10032
	MOVEM	14,S$$FLP##
	MOVE	1,S10280
	PUSH	16,1
	MOVE	1,@N10086
	JSP	7,S$$CPS##
	JSP	14,S$$CNC##
	EXP	^D2
	MOVEM	1,@N10236
Q10032:
;	J	= ?PRTOUT(WALK,'',1) J + SIZE(WALK)
	MOVEI	14,Q10033
	MOVEM	14,S$$FLP##
	MOVE	1,@N10236
	PUSH	16,1
	SETZ	1,
	PUSH	16,1
	MOVE	1,I10244
	FCALV$	^D3,PRTOUT
	SETZ	1,
	MOVE	^D1,V10088
	PUSH	17,1
	MOVE	1,@N10236
	FCALV$	^D1,F10050
	DICNV$	0
	POP	17,0
	ADD	^D1,0
	MOVEM	1,V10088
Q10033:
;	J	= ?IGE(J,60) ?PRTOUT(CRLCHR INDENT,'',1) SIZE(INDENT)
;.	:(WLK5)
	MOVEI	14,L10278
	MOVEM	14,S$$FLP##
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$GEP##
	JUMP	0,V10088
	JUMP	0,K10281
	ADD	16,S$$STB##
	SETZ	1,
	MOVE	1,@CRLCHR
	PUSH	16,1
	MOVE	1,@INDENT
	JSP	14,S$$CNC##
	EXP	^D2
	PUSH	16,1
	SETZ	1,
	PUSH	16,1
	MOVE	1,I10244
	FCALV$	^D3,PRTOUT
	SETZ	1,
	MOVE	1,@INDENT
	FCALV$	^D1,F10050
	DASGN$	2,V10088
	JRST	L10278
;WLK7	PRTOUT()
L10279:
	MOVEI	14,Q10034
	MOVEM	14,S$$FLP##
	FCALV$	^D0,PRTOUT
Q10034:
;WLK8	I	= ?INE(I,4) I + 1	:F(RETURN)S(WLK4)
L10276:
	MOVEI	14,S$$SRT##
	MOVEM	14,S$$FLP##
	SUB	16,S$$STB##
	MOVEM	16,S$$STS##
	JSA	16,F$$NEP##
	JUMP	0,V10087
	JUMP	0,K10251
	ADD	16,S$$STB##
	SETZ	1,
	MOVE	^D1,V10087
	ADD	^D1,K10244
	MOVEM	1,V10087
	JRST	L10275
;*	*	*	*	*	*	*	*	*
;END
	JRST	S$$SXT##
Q10001:	BLOCK	^D2
K10243:	EXP	^D0
I10243:	EXP	^D0!1B0
K10244:	EXP	^D1
I10244:	EXP	^D1!1B0
I10247:	EXP	^D2!1B0
K10249:	EXP	^D3
I10249:	EXP	^D3!1B0
K10251:	EXP	^D4
I10251:	EXP	^D4!1B0
K10272:	EXP	^D7
K10274:	EXP	^D5
K10281:	EXP	^D60
F10045:	BYTE	(4)4(4)0(5)^D0(5)0(18)P$$TIM##
S10048:	POINT	7,A10048,35
A10048:	BYTE	(2)2(16)^D2+1(18)^D7
	ASCII	'INTEGER'
F10050:	BYTE	(4)4(4)0(5)^D1(5)0(18)P$$SIZ##
F10052:	BYTE	(4)4(4)0(5)^D1(5)0(18)P$$DTY##
F10053:	BYTE	(4)4(4)0(5)^D1(5)0(18)P$$CPY##
F10060:	BYTE	(4)4(4)0(5)^D1(5)0(18)P$$DAT##
F10061:	BYTE	(4)4(4)0(5)^D2(5)0(18)P$$LGT##
F10063:	BYTE	(4)4(4)0(5)^D2(5)0(18)P$$ARR##
F10066:	BYTE	(4)4(4)0(5)^D2(5)0(18)P$$DEF##
F10071:	BYTE	(4)4(4)0(5)^D2(5)0(18)P$$DIF##
V10086:	POINT	7,.+1,35
	BYTE	(2)0(16)^D1+1(18)0
	BLOCK	^D1
N10086:	BYTE	(4)4(2)1(12)0(18)V10086
V10087:	EXP	0
V10088:	EXP	0
V10089:	EXP	0
A10089:	BYTE	(2)2(16)^D2+1(18)^D6
	ASCII	'PUTSYM'
A10090:	BYTE	(2)2(16)^D2+1(18)^D6
	ASCII	'INICRS'
A10091:	BYTE	(2)2(16)^D2+1(18)^D8
	ASCII	'INICRS()'
A10092:	BYTE	(2)2(16)^D2+1(18)^D6
	ASCII	'CROSPH'
A10093:	BYTE	(2)2(16)^D3+1(18)^D14
	ASCII	'CROSPH()TREEHD'
A10234:	BYTE	(2)2(16)^D2+1(18)^D6
	ASCII	'TREEHD'
A10235:	BYTE	(2)2(16)^D1+1(18)^D3
	ASCII	'ENT'
A10236:	BYTE	(2)2(16)^D1+1(18)^D4
	ASCII	'WALK'
S10237:	POINT	7,A10237,35
A10237:	BYTE	(2)2(16)^D3+1(18)^D11
	ASCII	'PUTSYM(ENT)'
S10238:	POINT	7,A10238,35
A10238:	BYTE	(2)2(16)^D2+1(18)^D9
	ASCII	'WALK(ENT)'
S10239:	POINT	7,A10239,35
A10239:	BYTE	(2)2(16)^D3+1(18)^D14
	ASCII	'CRS(NEXT,CRSI)'
S10240:	POINT	7,A10240,35
A10240:	BYTE	(2)2(16)^D3+1(18)^D14
	ASCII	'NOD(FRNT,BACK)'
N10241:	BYTE	(4)4(14)0(18)Q10035+^D6
S10242:	POINT	7,A10242,35
A10242:	BYTE	(2)2(16)^D2+1(18)^D7
	ASCII	'0:4,0:1'
S10245:	POINT	7,A10245,35
A10245:	BYTE	(2)2(16)^D2+1(18)^D8
	ASCII	'VARIABLE'
S10246:	POINT	7,A10246,35
A10246:	BYTE	(2)2(16)^D1+1(18)^D5
	ASCII	'LABEL'
S10248:	POINT	7,A10248,35
A10248:	BYTE	(2)2(16)^D2+1(18)^D8
	ASCII	'FUNCTION'
S10250:	POINT	7,A10250,35
A10250:	BYTE	(2)2(16)^D2+1(18)^D6
	ASCII	'STRING'
S10252:	POINT	7,A10252,35
A10252:	BYTE	(2)2(16)^D3+1(18)^D11
	ASCII	'BREAK TABLE'
N10253:	BYTE	(4)4(14)0(18)Q10035+^D7
S10254:	POINT	7,A10254,35
A10254:	BYTE	(2)2(16)^D9+1(18)^D42
	ASCII	'******* CROSS-REFERENCE DICTIONARY *******'
S10255:	POINT	7,A10255,35
A10255:	BYTE	(2)2(16)^D2+1(18)^D8
	ASCII	'[SYMBOL]'
S10256:	POINT	7,A10256,35
A10256:	BYTE	(2)2(16)^D6+1(18)^D27
	ASCII	'ATTRIBUTE,STATEMENT NUMBERS'
A10259:	BYTE	(2)2(16)^D1+1(18)^D3
	ASCII	'NOD'
A10261:	BYTE	(2)2(16)^D1+1(18)^D4
	ASCII	'FRNT'
A10262:	BYTE	(2)2(16)^D1+1(18)^D4
	ASCII	'BACK'
N10264:	BYTE	(4)4(14)0(18)Q10035+^D8
S10265:	POINT	7,A10265,35
A10265:	BYTE	(2)2(16)^D1+1(18)^D1
	ASCII	'['
S10266:	POINT	7,A10266,35
A10266:	BYTE	(2)2(16)^D1+1(18)^D1
	ASCII	']'
A10269:	BYTE	(2)2(16)^D1+1(18)^D4
	ASCII	'NEXT'
A10270:	BYTE	(2)2(16)^D1+1(18)^D4
	ASCII	'CRSI'
A10273:	BYTE	(2)2(16)^D1+1(18)^D3
	ASCII	'CRS'
S10280:	POINT	7,A10280,35
A10280:	BYTE	(2)2(16)^D1+1(18)^D1
	ASCII	','
Q10035:	BYTE	(2)2(16)^D8+1(18)0
	REPEAT	^D8,<0>
Q10036:	BYTE	(2)2(16)^D20*4+1(18)-^D20
	EXP	0
	BYTE	(5)5(31)0
	POINT	7,A10273,35
F10273:	BYTE	(4)4(4)0(5)20(5)0(18)S$$UDF##
	EXP	0
	BYTE	(5)5(31)0
	POINT	7,A10270,35
F10270:	BYTE	(4)4(4)0(5)20(5)0(18)S$$UDF##
	EXP	0
	BYTE	(5)5(31)0
	POINT	7,A10269,35
F10269:	BYTE	(4)4(4)0(5)20(5)0(18)S$$UDF##
	EXP	0
	BYTE	(5)5(31)0
	POINT	7,A10262,35
F10262:	BYTE	(4)4(4)0(5)20(5)0(18)S$$UDF##
	EXP	0
	BYTE	(5)5(31)0
	POINT	7,A10261,35
F10261:	BYTE	(4)4(4)0(5)20(5)0(18)S$$UDF##
	EXP	0
	BYTE	(5)5(31)0
S10259:	POINT	7,A10259,35
F10259:	BYTE	(4)4(4)0(5)20(5)0(18)S$$UDF##
	EXP	0
	BYTE	(5)5(31)0
	POINT	7,A10236,35
F10236:	BYTE	(4)4(4)0(5)20(5)0(18)S$$UDF##
	EXP	0
	BYTE	(5)3(31)0
	POINT	7,A10236,35
	JRST	L10236
	EXP	0
	BYTE	(5)1(31)0
	POINT	7,A10236,35
N10236:	BYTE	(4)4(14)0(18)Q10035+^D5
	EXP	0
	BYTE	(5)1(31)0
	POINT	7,A10235,35
N10235:	BYTE	(4)4(14)0(18)Q10035+^D4
	EXP	0
	BYTE	(5)1(31)0
	POINT	7,A10234,35
N10234:	BYTE	(4)4(14)0(18)Q10035+^D3
	EXP	0
	BYTE	(5)5(31)0
	POINT	7,A10092,35
CROSPH:	BYTE	(4)4(4)0(5)^D0(5)0(18)E10092
	EXP	0
	BYTE	(5)3(31)0
	POINT	7,A10092,35
	JRST	L10092
	EXP	0
	BYTE	(5)1(31)0
	POINT	7,A10092,35
N10092:	BYTE	(4)4(14)0(18)Q10035+^D2
	EXP	0
	BYTE	(5)5(31)0
	POINT	7,A10090,35
INICRS:	BYTE	(4)4(4)0(5)^D0(5)0(18)E10090
	EXP	0
	BYTE	(5)3(31)0
	POINT	7,A10090,35
	JRST	L10090
	EXP	0
	BYTE	(5)1(31)0
	POINT	7,A10090,35
N10090:	BYTE	(4)4(14)0(18)Q10035+^D1
	EXP	0
	BYTE	(5)5(31)0
	POINT	7,A10089,35
F10089:	BYTE	(4)4(4)0(5)20(5)0(18)S$$UDF##
	EXP	0
	BYTE	(5)3(31)0
	POINT	7,A10089,35
	JRST	L10089
	EXP	0
	BYTE	(5)1(31)0
	POINT	7,A10089,35
N10089:	BYTE	(4)4(2)2(12)0(18)V10089
	POINT	7,A10092,35
Q10000:	XWD	0,Q10035
	XWD	Q10036,^D0
	EXP	Q10036
	XWD	^D8,Q10000
E10090:	JSP	13,S$$EFI##
	POINT	7,A10091,35
	EXP	0
	XWD	^D9,Q10000
E10092:	JSP	13,S$$EFI##
	POINT	7,A10093,35
	EXP	0
	END