home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / BASIC / BASIC00.ZIP / XREFBUZZ.BAS < prev    next >
Encoding:
BASIC Source File  |  1987-01-11  |  6.3 KB  |  169 lines

  1. 100 KEY OFF:CLS
  2. 110 PRINT "CROSSREF ";
  3. 120 PRINT"COPYRIGHT (C) 1980 BY ADVANCED INFORMATICS"
  4. 130 'MODIFIED FOR IBM PC BY STEVE NOSSEN V1.10 1/13/82
  5. 140 'MODIFIED BY Buzz Hamilton V1.2 12/2/82
  6. 150 '    Add Keywords APPEND,ERROR, and SOUND
  7. 160 '    Relocate Keywords COM,INPUT, and LOC
  8. 170 '    Change end of DATA line check from space to colon
  9. 180 '    Permit dot in variable names
  10. 190 '    Eliminate dash spacer lines
  11. 200 '    Change default extension of input file to LST
  12. 210 PRINT"V1.2 12/2/82"
  13. 220 '
  14. 230 DEFINT I-J:LW=80
  15. 240 ON ERROR GOTO 1690
  16. 250 DIM RW$(158),PT%(25),F$(10)
  17. 260 DIM VNXT%(490),V$(490),FRST%(400),LST%(400),RFL%(2000),NXT%(2000)
  18. 270 '
  19. 280 ' RESERVED WORDS
  20. 290 '
  21. 300 DATA ABS,AND,APPEND,ASC,AS,ATN,AUTO,BEEP,BLOAD,BSAVE
  22. 310 DATA CALL,CDBL,CHAIN,CHR$,CINT,CIRCLE,CLEAR,CLOSE,CLS,COLOR,COMMON,COM
  23. 320 DATA CONT,COS,CSNC,CSRLIN,CVD,CVI,CVS,DATA,DATE$
  24. 330 DATA DEFDBL,DEFINT,DEFSNG,DEFSTR,DEFUSR,DEF,DELETE,DIM,DRAW
  25. 340 DATA EDIT,ELSE,END,EOF,EQV,ERASE,ERL,ERROR,ERR,EXP,FIELD,FILES,FIX,FOR
  26. 350 DATA FRE,GET,GOSUB,GOTO,HEX$
  27. 360 DATA IF,IMP,INKEY$,INPUT$,INPUT,INP,INSTR,INT,KEY,KILL,LEFT$,LEN,LET,LINE
  28. 370 DATA LIST,LLIST,LOAD,LOCATE,LOC,LOF,LOG,LPOS,LPRINT,LSET,MERGE,MID$,MKD$
  29. 380 DATA MKI$,MKS$,MOD,MOTOR,NAME,NEW,NEXT,NOT,OCT$,OFF,ON,OPEN,OPTION,OR,OUT
  30. 390 DATA PAINT,PEEK,PEN,PLAY,POINT,POKE,POS,PRESET,PRINT,PSET,PUT
  31. 400 DATA RANDOMIZE,READ,REM,RENUM,RESET
  32. 410 DATA RESTORE,RESUME,RETURN,RIGHT$,RND,RSET,RUN
  33. 420 DATA SAVE,SCREEN,SGN,SIN,SOUND,SPACE$,SPC(,SQR
  34. 430 DATA STEP,STICK,STOP,STR$,STRIG,STRING$,SWAP,SYSTEM
  35. 440 DATA TAB(,TAN,THEN,TIME$,TO,TROFF,TRON
  36. 450 DATA USING,USR,VAL,VARPTR,WAIT,WEND,WHILE,WIDTH,WRITE,XOR,"\"
  37. 460 '
  38. 470 ' FILL ARRAY WITH RESERVED WORDS
  39. 480 '
  40. 490 RW%=0
  41. 500 READ RW$
  42. 510 RW%=RW%+1:RW$(RW%)=RW$:IF RW$="\" THEN 550
  43. 520 I=ASC(RW$)-ASC("A"):IF PT%(I)=0 THEN PT%(I)=RW%
  44. 530 GOTO 500
  45. 540 '
  46. 550 FOR I=0 TO 25:IF PT%(I)=0 THEN PT%(I)=RW%
  47. 560 NEXT
  48. 570 '
  49. 580 ' GET LIST OF FILE NAMES
  50. 590 '
  51. 600 FX=0
  52. 610 PRINT:PRINT " ASCII SAVED PROGRAM #" FX+1 " = ";:LINE INPUT L$
  53. 620 IF L$="" THEN IF FX<1 THEN 780 ELSE 680
  54. 630 IF INSTR(L$,".")=0 THEN L$=L$+".LST"
  55. 640 NAME L$ AS L$
  56. 650 FX=FX+1:F$(FX)=L$
  57. 660 GOTO 610
  58. 670 '
  59. 680 OD$="LPT1:":PRINT:LINE INPUT " OUTPUT FILE (DEFAULT IS LPT1:) -> ";TEMP$
  60. 690 IF TEMP$="" THEN 700 ELSE OD$=TEMP$
  61. 700 IF LEFT$(OD$,5)="COM1:" THEN OPEN OD$ AS 3 ELSE OPEN "O",3,OD$
  62. 710 PRINT:INPUT"1) Cross Reference   2) List   3) Both";M
  63. 720 '
  64. 730 ' PROCESS LIST OF FILE NAMES
  65. 740 '
  66. 750 FOR F=1 TO FX
  67. 760 CLOSE 1:OPEN "I",1,F$(F): PRG$="'"+F$(F)+"'       "+DATE$+"     "+TIME$:GOSUB 820:PRINT #3,CHR$(12);
  68. 770 NEXT:PRINT #3,CHR$(12);
  69. 780 END
  70. 790 '
  71. 800 ' INITIALIZE FOR CROSS REFERENCE
  72. 810 '
  73. 820 LC=0:BC=0:PZ%=0:V$="":C$="":VC%=91:RC%=-1
  74. 830 FOR I=0 TO 91: VNXT%(I)=-1: NEXT
  75. 840 IF M>1 THEN GOSUB 1730
  76. 850 '
  77. 860 ' INPUT LINE AND EXTRACY LINE NUMBER
  78. 870 '
  79. 880 IF EOF(1) THEN 1430
  80. 890 LINE INPUT #1,L$:IF M>1 THEN GOSUB 1640:IF M=2 THEN 880
  81. 900 LG=LEN(L$): BRNCH%=0: ER$="": LC=LC+1: BC=BC+LG
  82. 910 LP%=INSTR(L$," "):LN=VAL(LEFT$(L$,LP%)):IF LEFT$(OD$,5)="SCRN:" AND M=3 THEN 920 ELSE PRINT LN,
  83. 920 IF LN>32767 THEN LN=LN-65536!
  84. 930 '
  85. 940 ' PARSE REST OF LINE
  86. 950 '
  87. 960 LP%=LP%+1: IF LP%>LG THEN GOSUB 1230: GOTO 880
  88. 970 C$=MID$(L$,LP%,1)
  89. 980 IF C$>="A" AND C$<="Z" THEN 1100 ELSE IF (C$>="0" AND C$<="9") OR C$="." THEN 1370
  90. 990 IF C$=" " THEN GOSUB 1230: GOTO 960 ELSE IF C$<>","THEN BRNCH%=0
  91. 1000 IF C$=CHR$(34) THEN GOSUB 1230:LP%=INSTR(LP%+1,L$,C$):IF LP%>0 THEN 960 ELSE 880
  92. 1010 IF C$="'" THEN GOSUB 1230: GOTO 880
  93. 1020 IF C$="&" THEN GOSUB 1230: V$=C$: GOTO 960
  94. 1030 IF C$="$" OR C$="!" OR C$="%" OR C$="#" THEN GOSUB 1350:GOTO 960
  95. 1040 IF C$="(" THEN GOSUB 1350
  96. 1050 GOSUB 1230: IF C$<>"," THEN ER$=""
  97. 1060 GOTO 960
  98. 1070 '
  99. 1080 ' TEST FOR COMMAND
  100. 1090 '
  101. 1100 IF V$>"" THEN 1380 ELSE C%=ASC(C$): P%=PT%(C%-ASC("A")): BRNCH%=0
  102. 1110 IF C%<ASC(RW$(P%))  THEN 1380
  103. 1120 IF INSTR(LP%,L$,RW$(P%))<>LP% THEN P%=P%+1: GOTO 1110
  104. 1130 GOSUB 1230: RW$=RW$(P%)
  105. 1140 IF RW$="DATA" THEN  LP%=INSTR(LP%,L$,":"): IF LP%>0 THEN 960 ELSE 880
  106. 1150 IF RW$="REM" THEN 880
  107. 1160 IF RW$="GOTO" OR RW$="GOSUB" OR RW$="THEN" THEN BRNCH%=1
  108. 1170 IF RW$="ELSE" OR RW$="RESUME" THEN BRNCH%=1
  109. 1180 IF RW$="ERASE" THEN ER$="(" ELSE ER$=""
  110. 1190 LP%=LP%+LEN(RW$)-1:GOTO 960
  111. 1200 '
  112. 1210 ' END VARIABLE
  113. 1220 '
  114. 1230 IF V$="" THEN RETURN
  115. 1240 IF V$>="A" THEN V$=V$+ER$: C%=ASC(V$)+1 ELSE IF V$>="" THEN V$=RIGHT$("    "+V$,5): C%=VAL(LEFT$(V$,2)) ELSE 1310
  116. 1250 IL=-1: I=C%
  117. 1260 IF V$>V$(I) THEN IL=I: I=VNXT%(I): IF I>0 THEN 1260 ELSE 1280
  118. 1270 IF V$=V$(I) THEN J=LST%(I-91): IF RFL%(J)=LN THEN 1310 ELSE RC%=RC%+1: NXT%(J)=RC%: GOTO 1300
  119. 1280 VC%=VC%+1: IF IL>=0 THEN VNXT%(IL)=VC%
  120. 1290 V$(VC%)=V$: VNXT%(VC%)=I: RC%=RC%+1: FRST%(VC%-91)=RC%:I=VC%
  121. 1300 RFL%(RC%)=LN: NXT%(RC%)=-1: LST%(I-91)=RC%
  122. 1310 V$="": RETURN
  123. 1320 '
  124. 1330 ' EXPAND VARIABLE
  125. 1340 '
  126. 1350 IF V$<>"" THEN V$=V$+C$
  127. 1360 RETURN
  128. 1370 IF V$="" AND BRNCH%=0 THEN 960
  129. 1380 V$=V$+C$: GOTO 960
  130. 1390 '
  131. 1400 ' LIST VARIABLES
  132. 1410 '
  133. 1420 IF M=2 THEN RETURN
  134. 1430 PZ%=0:LZ%=60
  135. 1440 FOR J=0 TO 91: V%=J
  136. 1450 V%=VNXT%(V%): IF V%<0 THEN 1560
  137. 1460 IF LZ%>56 THEN GOSUB 1620
  138. 1470 RZ%=0:I=FRST%(V%-91): PRINT #3,V$(V%);
  139. 1480 IF RZ%=0 THEN  PRINT #3,TAB(16);
  140. 1490 LN=RFL%(I): IF LN<0 THEN LN=LN+65536!
  141. 1500 PRINT #3,USING "    #####";LN,
  142. 1510 RZ%=RZ%+1
  143. 1520 IF RZ%>6 THEN RZ%=0: PRINT #3,: LZ%=LZ%+1: IF LZ%>56 THEN GOSUB 1620
  144. 1530 I=NXT%(I): IF I>0 THEN 1480
  145. 1540 IF RZ%>0 THEN PRINT #3,: LZ%=LZ%+1
  146. 1550 GOTO 1450
  147. 1560 NEXT J
  148. 1570 '
  149. 1580 PRINT #3,STRING$(79,"=")
  150. 1590 PRINT #3,"LINES: ";LC;"    BYTES: ";BC;:PRINT #3,"     SYMBOLS: ";VC%-91;"    REFERENCES: ";RC%+1
  151. 1600 LZ%=LZ%+2: RETURN
  152. 1610 '
  153. 1620 GOSUB 1730: PRINT #3,"SYMBOL" TAB(20) "REFERENCE LINE": LZ%=LZ%+1:RETURN
  154. 1630 '
  155. 1640 X%=1
  156. 1650 IF LZ%>60 OR RIGHT$(L$,3)="'PG" THEN GOSUB 1730
  157. 1660 Y%=INSTR(X%,L$,CHR$(10)): IF Y%>0 THEN PRINT #3,MID$(L$,X%,Y%-X%):LZ%=LZ%+1:X%=Y%+1:GOTO 1660
  158. 1670 PRINT #3,MID$(L$,X%,LW): LZ%=LZ%+1:X%=X%+LW: IF X%<=LEN(L$) THEN 1670 ELSE RETURN
  159. 1680 '
  160. 1690 IF ERR=53 THEN PRINT:PRINT "FILE NOT FOUND":RESUME 610
  161. 1700 IF ERR=58 THEN RESUME 650
  162. 1710 ON ERROR GOTO 0
  163. 1720 '
  164. 1730 IF PZ%>0 OR M>1 THEN PRINT #3,CHR$(12);   'FORM FEED
  165. 1740 PZ%=PZ%+1:PRINT #3,PRG$;TAB(68) "PAGE"PZ%
  166. 1750 PRINT #3,:PRINT #3,
  167. 1760 LZ%=3: RETURN
  168. PRINT #3,CHR$(12);   'FORM FEED
  169. 1740 PZ%=PZ%+1:PRINT #3,