65000 '
65005 '---------- VARIABLE DOCUMENTATION PROGRAM -------------
65010 ' LOAD TARGET PROGRAM, MERGE THIS PROGRAM THEN RUN 65000
65015 CLEAR 200 : DEFINT A,L,M : CLS : INPUT"DO YOU WISH HARD COPY (Y/N)";A$ : IF A$="Y" THEN P=1 ELSE P=0
65020 INPUT"NAME OF TARGET PROGRAM";A$ : CLS : PRINT "VARIABLES AND REFERENCES FOR '";A$;"'" : A2=75 : A3=60 : A4=100 'A$	-A2 A-A3 M&L-A4
65025 IF P=1 LPRINT"VARIABLES AND REFERENCES FOR '";A$;"'" : LPRINT CHR$(138)
65030 DIM A(A2+2,A3),A$(A2+2),L(A4+2),M(A4+2) : A1=0 : A$(1)="[" : M(1)=32767 : M1=0 : SW=1 : U=PEEK(16548)+PEEK(16549)*256 : GOTO 65045
65035 IF U>32767 THEN F=-1*(U-65535) ELSE F=U
65040 T=PEEK(F) : U=U+1 : PRINT@ 128,"MEMORY ADDRESS =";U;"     "; : RETURN
65045 GOSUB 65035 : D=T : GOSUB 65035 : D=T*256+D : GOSUB 65035 : E=T : GOSUB 65035 : E=T*256+E : IF E>32766 THEN 65155 ELSE PRINT@ 64,"WORKING ON LINE #";E;
65050 GOSUB 65035 : IF T=32 THEN 65050
65055 IF T=0 OR T=147 OR T=251 THEN U=D : GOTO 65045
65060 IF T=34 THEN SW=-SW
65065 IF SW<0 GOSUB 65035 : GOTO 65060
65070 IF T=141 OR T=145 OR T=202 THEN C$="" : GOTO 65130
65075 IF T<65 OR T>90 THEN 65050 ELSE C$=""
65080 IF (T>47 AND T<58) OR (T>64 AND T<91) OR T=33 OR T=35 OR T=36 OR T=37 THEN C$=C$+CHR$(T) : GOSUB 65035 : GOTO 65080
65085 IF T=40 THEN C$=C$+"(*)"
65090 U=U-1 : A1=A1+1 : IF A1>A2 THEN A$="A$" : GOTO 65210
65095 FOR J=1 TO A1 : IF C$=A$(J) THEN 65115 ELSE IF C$>A$(J) THEN 65125
65100 PRINT@ 256,"SORTING ARRAYS"; : FOR R=A1+1 TO J STEP-1 : A$(R+1)=A$(R) : NEXT : A$(J)=C$
65105 FOR R=A1+1 TO J STEP-1 : FOR S=0 TO A3 : A(R+1,S)=A(R,S) : NEXT
65110 NEXT : A(J,0)=E : FOR R=1 TO A3 : A(J,R)=0 : NEXT : PRINT@ 256,"              "; : J=100 : GOTO 65125
65115 FOR R=0 TO A3 : IF A(J,R)=0 OR A(J,R)=E THEN A(J,R)=E : R=A3+10 : J=A2+2
65120 NEXT : A1=A1-1 : IF R<>A3+11 THEN A$="A" : GOTO 65210
65125 NEXT : PRINT@ 192,"NUMBER OF VARIABLES SO FAR =";A1; : GOTO 65050
65130 GOSUB 65035 : IF T=32 THEN 65130 ELSE IF T<48 OR T>57 THEN RE=VAL(C$) : U=U-1 : GOTO 65140
65135 C$=C$+CHR$(T) : GOTO 65130
65140 M1=M1+1 : IF M1>A4 THEN A$="L&M" : GOTO 65210 ELSE IF C$="" THEN M1=M1-1 : GOTO 65050
65145 FOR J=1 TO M1 : IF RE<=M(J) AND RE>M(J-1) THEN FOR Q=M1+1 TO J STEP-1 : M(Q+1)=M(Q) : L(Q+1)=L(Q) : NEXT : M(J)=RE : L(J)=E : J=A4
65150 NEXT : GOTO 65050
65155 CLS : PRINT"VAR","USED IN LINES" : IF P=1 LPRINT"VAR","USED IN LINES"
65160 FOR R=1 TO A1 : LE=0 : PRINT" ";A$(R), : IF P=1 LPRINT " ";A$(R),
65165 FOR S=0 TO A3 : IF A(R,S)=0 THEN S=A3 : PRINT : IF P<>1 THEN 65175 ELSE LPRINT CHR$(13) : GOTO 65175
65170 GOSUB 65215 : PRINT A(R,S); : IF P=1 GOSUB 65220 : LPRINT A(R,S);
65175 NEXT : NEXT : PRINT : IF P=1 LPRINT CHR$(138)
65180 PRINT"LINE #","REFERENCED BY"; : IF P=1 LPRINT"LINE #","REFERENCED BY"
65185 FOR R=1 TO M1 : LE=0 : IF M(R)<>M(R-1) PRINT : IF P=1 LPRINT CHR$(13)
65190 IF M(R)=32767 PRINT "NONE" : END
65195 IF M(R)<>M(R-1) PRINT M(R), : IF P=1 LPRINT M(R),
65200 IF L(R)<>L(R-1) OR M(R)<>M(R-1) GOSUB 65215 : PRINT L(R); : IF P=1 THEN LE=LE+LEN(STR$(L(R))) : IF LE>45 THEN LE=0 : LPRINT CHR$(13);"", : LPRINT L(R); ELSE LPRINT L(R);
65205 NEXT : END
65210 PRINT@ 384,"SORRY ARRAY '";A$;"' IS FULL" : END
65215 PP=PEEK(16416)+PEEK(16417)*256 : IF PP-15359-INT((PP-15359)/64)*64>57 THEN PRINT : PRINT, : RETURN ELSE RETURN
65220 LE=LE+LEN(STR$(A(R,S))) : IF LE>45 THEN LE=0 : LPRINT CHR$(13);"", : RETURN ELSE RETURN
