home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / basic / xref.bas < prev    next >
BASIC Source File  |  1983-09-09  |  5KB  |  159 lines

  1. 2  '
  2. 4  'SEE INTERFACE AGE -- JUNE 1981 -- PAGE 98
  3. 6  '
  4. 10 PRINT:PRINT"CROSSREF   -   BASIC-80 VERSION OF 05/19/80"
  5. 20 PRINT:PRINT"COPYRIGHT (C) 1980 BY ADVANCED INFORMATICS"
  6. 30 PRINT:PRINT"LISTS ALL VARIABLES & REFERENCED LINE #'S"
  7. 40 PRINT"-------------------------------------------"
  8. 50 '
  9. 60 DEFINT I-J:LW=80
  10. 70 ON ERROR GOTO 1480
  11. 80 DIM RW$(126),PT%(25),F$(10)
  12. 90 I=400:DIM VNXT%(I+90),V$(I+90),FRST%(I),LST%(I),RFL%(5*I),NXT%(5*I)
  13. 100 '
  14. 110 ' RESERVED WORDS
  15. 120 '
  16. 130 DATA ABS,AND,ASC,AS,ATN,AUTO,CDBL,CHR$,CINT,CLEAR,CLOSE,CONSOLE,CONT
  17. 140 DATA COS,CSNG,CVD,CVI,CVS,DATA
  18. 150 DATA DEFDBL,DEFINT,DEFSNG,DEFSTR,DEFUSR,DEF,DELETE,DIM,DSKI$,DSKO$,DSKF
  19. 160 DATA EDIT,ELSE,END,EOF,EQV,ERASE,ERL,ERR,EXP,FIELD,FILES,FIX,FOR
  20. 170 DATA FRE,GET,GOSUB,GOTO,HEX$
  21. 180 DATA IF,IMP,INPUT,INP,INSTR,INT,KILL,LEFT$,LEN,LET,LINE
  22. 190 DATA LIST,LLIST,LOAD,LOC,LOF,LOG,LPRINT,LSET,MERGE,MID$,MKD$,MKI$
  23. 200 DATA MKS$,MOD,MOUNT,NAME,NEW,NEXT,NOT,NULL,OCT$,ON,OPEN,OR,OUT
  24. 210 DATA PEEK,POKE,POS,PRINT,PUT
  25. 220 DATA READ,REM,RENUM,RESET,RESTORE,RESUME,RETURN,RIGHT$,RND,RSET,RUN
  26. 230 DATA SAVE,SGN,SIN,SPACE$,SPC(,SQR,STEP,STOP,STR$,STRING$,SWAP
  27. 240 DATA TAB(,TAN,THEN,TO,TROFF,TRON,UNLOAD
  28. 250 DATA USING,USR,VAL,VARPTR,WAIT,WIDTH,XOR,"\"
  29. 260 '
  30. 270 'FILL ARRAY WITH RESERVED WORDS
  31. 280 '
  32. 290 RW=0
  33. 300 READ RW$
  34. 310 RW=RW+1:RW$(RW)=RW$:IF RW$="\" THEN 350
  35. 320 I=ASC(RW$)-ASC("A"):IF PT%(I)=0 THEN PT%(I)=RW
  36. 330 GOTO 300
  37. 340 '
  38. 350 FOR I=0 TO 25:IF PT%(I)=0 THEN PT%(I)=RW
  39. 360 NEXT
  40. 370 '
  41. 380 'GET LIST OF FILE NAMES
  42. 390 '
  43. 400 FX=0
  44. 410 PRINT:PRINT " ASCII SAVED PROGRAM #" FX+1 " = ";:LINE INPUT L$
  45. 420 IF L$="" THEN IF FX<1 THEN 570 ELSE 480
  46. 430 IF INSTR(L$,".")=0 THEN L$=L$+".BAS"
  47. 440 NAME L$ AS L$
  48. 450 FX=FX+1:F$(FX)=L$
  49. 460 GOTO 410
  50. 470 '
  51. 480 PRINT:INPUT"DATE = ";D$
  52. 490 PRINT:INPUT"1) CROSS REFERENCE   2) LIST   3) BOTH ";M
  53. 500 '
  54. 510 'PROCESS LIST OF FILE NAMES
  55. 520 '
  56. 530 FOR F=1 TO FX
  57. 540 CLOSE:OPEN"I",1,F$(F):PRG$="'"+F$(F)+"'  -  "+D$:GOSUB 610
  58. 550 NEXT
  59. 560 LPRINT STRING$(65-LZ,CHR$(10))
  60. 570 END
  61. 580 '
  62. 590 'INITIALIZE FOR CROSS REFERENCE
  63. 600 '
  64. 610 LC=0:BC=0:PZ=0:V$="":C$="":VC=91:RC=-1
  65. 620 FOR I=0 TO 91:VNXT%(I)=-1:NEXT
  66. 630 IF M>1 THEN GOSUB 1520
  67. 640 '
  68. 650 '   INPUT LINE & EXTRACT LINE#
  69. 660 '
  70. 670 IF EOF(1)THEN 1200
  71. 680 LINE INPUT#1,L$:IF M>1 THEN GOSUB 1430:IF M=2 THEN 670
  72. 690 LG=LEN(L$):BRNCH=0:ER$="":LC=LC+1:BC=BC+LG
  73. 700 LP=INSTR(L$," "):LN=VAL(LEFT$(L$,LP)):PRINT LN,
  74. 710 IF LN>32767 THEN LN=LN-65536!
  75. 720 '
  76. 730 '   PARSE REST OF LINE
  77. 740 '
  78. 750 LP=LP+1:IF LP>LG THEN GOSUB 1010:GOTO 670
  79. 760 C$=MID$(L$,LP,1)
  80. 770 IF C$>="A"AND C$<="Z"THEN 890 ELSE IF C$>="0"AND C$<="9"THEN 1150
  81. 780 IF C$=" "THEN 750 ELSE IF C$<>","THEN BRNCH=0
  82. 790 IF C$=CHR$(34)THEN GOSUB 1010:LP=INSTR(LP+1,L$,C$):IF LP>0 THEN 750 ELSE 670
  83. 800 IF C$="\"THEN GOSUB 1010:GOTO 670
  84. 810 IF C$="&"THEN GOSUB 1010 :V$=C$:GOTO 750
  85. 820 IF C$="$"OR C$="!"OR C$="%"OR C$="#"THEN GOSUB 1130:GOTO 750
  86. 830 IF C$="("THEN GOSUB 1130
  87. 840 GOSUB 1010:IF C$<>","THEN ER$=""
  88. 850 GOTO 750
  89. 860 '
  90. 870 '   TEST FOR COMMAND
  91. 880 '
  92. 890 C=ASC(C$):P=PT%(C-ASC("A")):BRNCH=0
  93. 900 IF C<ASC(RW$(P))THEN 1160
  94. 910 IF INSTR(LP,L$,RW$(P))<>LP THEN P=P+1:GOTO 900
  95. 920 GOSUB 1010:RW$=RW$(P)
  96. 930 IF RW$="DATA" THEN LP=INSTR(LP,L$,":"):IF LP>0 THEN 750 ELSE 670
  97. 940 IF RW$="REM"THEN 670
  98. 950 IF RW$="GOTO"OR RW$="GOSUB"OR RW$="THEN"OR RW$="ELSE"OR RW$="RESUME"THEN BRNCH=1
  99. 960 IF RW$="ERASE"THEN ER$="("ELSE ER$=""
  100. 970 LP=LP+LEN(RW$)-1:GOTO 750
  101. 980 '
  102. 990 '  END VARIABLE
  103. 1000 '
  104. 1010 IF V$=""THEN RETURN
  105. 1020 IF V$>="A"THEN V$=V$+ER$:C=ASC(V$)+1ELSE IF V$>="0"THEN V$=RIGHT$("    "+V$,5):C=VAL(LEFT$(V$,2)) ELSE 1090
  106. 1030 IL=-1:I=C
  107. 1040 IF V$>V$(I)THEN IL=I:I=VNXT%(I):IF I>0 THEN 1040 ELSE 1060
  108. 1050 IF V$=V$(I)THEN J=LST%(I-91):IF RFL%(J)=LN THEN 1090 ELSE RC=RC+1:NXT%(J)=RC:GOTO 1080
  109. 1060 VC=VC+1:IF IL>=0 THEN VNXT%(IL)=VC
  110. 1070 V$(VC)=V$:VNXT%(VC)=I:RC=RC+1:FRST%(VC-91)=RC:I=VC
  111. 1080 RFL%(RC)=LN:NXT%(RC)=-1:LST%(I-91)=RC
  112. 1090 V$="":RETURN
  113. 1100 '
  114. 1110 '  EXPAND VARIABLE
  115. 1120 '
  116. 1130 IF V$<>""THEN V$=V$+C$
  117. 1140 RETURN
  118. 1150 IF V$=""AND BRNCH=0 THEN 750
  119. 1160 V$=V$+C$:GOTO 750
  120. 1170 '
  121. 1180 '  LIST VARIABLES
  122. 1190 '
  123. 1200 IF M=2 THEN RETURN
  124. 1210 PZ=0:GOSUB 1520
  125. 1220 FOR J=0 TO 91:V=J
  126. 1230 V=VNXT%(V):IF V<0 THEN 1340
  127. 1240 IF LZ>56 THEN GOSUB 1400 ELSE SZ=SZ+1:IF SZ=3 THEN GOSUB 1410
  128. 1250 RZ=0:I=FRST%(V-91):LPRINT V$(V);
  129. 1260 IF RZ=0 THEN LPRINT TAB(16);
  130. 1270 LN=RFL%(I):IF LN<0 THEN LN=LN+65536!
  131. 1280 LPRINT USING"    #####";LN,
  132. 1290 RZ=RZ+1
  133. 1300 IF RZ>6 THEN RZ=0:LPRINT:LZ=LZ+1:IF LZ>56 THEN GOSUB 1400
  134. 1310 I=NXT%(I):IF I>0 THEN 1260
  135. 1320 IF RZ>0 THEN LPRINT:LZ=LZ+1
  136. 1330 GOTO 1230
  137. 1340 NEXT J
  138. 1350 '
  139. 1360 LPRINT STRING$(80,"=")
  140. 1370 LPRINT"LINES:"LC"    BYTES:"BC"    SYMBOLS:"VC-91" REFERENCES:"RC+1
  141. 1380 LZ=LZ+2:RETURN
  142. 1390 '
  143. 1400 GOSUB 1520:LPRINT"SYMBOL"TAB(20)"REFERENCE LINE":LZ=LZ+1
  144. 1410 LPRINT STRING$(80,"-"):LZ=LZ+1:SZ=0:RETURN
  145. 1420 '
  146. 1430 X=1
  147. 1440 IF LZ>60 OR RIGHT$(L$,3)="'PG"THEN GOSUB 1520
  148. 1450 Y=INSTR(X,L$,CHR$(10)):IF Y>0 THEN LPRINT MID$(L$,X,Y-X):LZ=LZ+1:X=Y+1:GOTO 1450
  149. 1460 LPRINT MID$(L$,X,LW):LZ=LZ+1:X=X+LW:IF X<LEN(L$) THEN 1460 ELSE RETURN
  150. 1470 '
  151. 1480 IF ERR=53 THEN PRINT:PRINT"FILE NOT FOUND":RESUME 410
  152. 1490 IF ERR=58 THEN RESUME 450
  153. 1500 ON ERROR GOTO 0
  154. 1510 '
  155. 1520 LPRINT STRING$(65-LZ,CHR$(10))
  156. 1530 PZ=PZ+1:LPRINT TAB(72)"PG#"PZ
  157. 1540 LPRINT PRG$:LPRINT
  158. 1550 LZ=3:RETURN
  159.