home *** CD-ROM | disk | FTP | other *** search
- 1010 PROG$="XREF1.BAS":VERS$="82/09/22/2300"
- 1020 CLS:KEY OFF
- 1030 PRINT "CROSSREF Copyright (C) 1980 by ADVANCED INFORMATICS"
- 1040 PRINT
- 1050 PRINT "Distributed by Baltimore IBM PC Not for sale or commercial use"
- 1060 PRINT PROG$;TAB(20);"Version of ";VERS$
- 1070 PRINT:PRINT " Initializing . . . ":PRINT
- 1080 '
- 1090 DEFINT I-J:LW=79
- 1100 ON ERROR GOTO 2760
- 1110 DIM RW$(165),PT%(25),F$(10)
- 1120 DIM VNXT%(490),V$(490),FRST%(400),LST%(400),RFL%(2000),NXT%(2000)
- 1130 '
- 1140 ' Reserved words -- see page 3.6 of BASIC 1.1 manual
- 1150 '
- 1160 DATA ABS,AND,ASC,AS,ATN,AUTO,BEEP,BLOAD,BSAVE
- 1170 DATA CALL,CDBL,CHAIN,CHR$,CINT,CIRCLE,CLEAR,CLOSE,CLS,COLOR,COM
- 1180 DATA COMMON,CONT,COS,CSNG,CSRLIN,CVD,CVI,CVS
- 1190 DATA DATA,DATE$,DEF,DEFDBL,DEFINT,DEFSNG,DEFSTR,DELETE,DIM,DRAW
- 1200 DATA EDIT,ELSE,END,EOF,EQV,ERASE,ERL,ERR,ERROR,EXP,FIELD,FILES,FIX,FN,FOR
- 1210 DATA FRE,GET,GOSUB,GOTO,HEX$
- 1220 DATA IF,IMP,INKEY$,INP,INPUT,INPUT#,INPUT$,INSTR,INT,KEY,KILL,LEFT$,LEN
- 1230 DATA LET,LINE,LIST,LLIST,LOAD,LOC,LOCATE,LOF,LOG,LPOS,LPRINT,LSET
- 1240 DATA MERGE,MID$,MKD$,MKI$,MKS$,MOD,MOTOR
- 1250 DATA NAME,NEW,NEXT,NOT,OCT$,OFF,ON,OPEN,OPTION,OR,OUT
- 1260 DATA PAINT,PEEK,PEN,PLAY,POINT,POKE,POS,PRESET
- 1270 DATA PRINT,PRINT#,PSET,PUT,RANDOMIZE
- 1280 DATA READ,REM,RENUM,RESET,RESTORE,RESUME,RETURN,RIGHT$,RND,RSET,RUN
- 1290 DATA SAVE,SCREEN,SGN,SIN,SOUND,SPACE$,SPC(,SQR
- 1300 DATA STEP,STICK,STOP,STR$,STRIG
- 1310 DATA STRING$,SWAP,SYSTEM,TAB(,TAN,THEN,TIME$,TO,TROFF,TRON
- 1320 DATA USING,USR,VAL,VARPTR,VARPTR$
- 1330 DATA WAIT,WEND,WHILE,WIDTH,WRITE,WRITE#,XOR,"\"
- 1340 '
- 1350 ' Fill array with reserved words
- 1360 '
- 1370 RW%=0
- 1380 READ RW$
- 1390 RW%=RW%+1:RW$(RW%)=RW$:IF RW$="\" THEN 1430
- 1400 I=ASC(RW$)-ASC("A"):IF PT%(I)=0 THEN PT%(I)=RW%
- 1410 GOTO 1380
- 1420 '
- 1430 FOR I=0 TO 25:IF PT%(I)=0 THEN PT%(I)=RW%
- 1440 NEXT
- 1450 '
- 1460 ' Get list of file names
- 1470 '
- 1480 FX=0
- 1490 PRINT:PRINT " Input filespec for ASCII-saved BASIC program #" FX+1 " = ";
- 1500 LINE INPUT L$
- 1510 IF L$="" THEN IF FX<1 THEN 1760 ELSE 1580
- 1520 IF INSTR(L$,".")=0 THEN L$=L$+".BAS"
- 1530 NAME L$ AS L$
- 1540 FX=FX+1:F$(FX)=L$
- 1550 IF FX>9 THEN 1580
- 1560 GOTO 1490
- 1570 '
- 1580 OD$="LPT1:":PRINT:LINE INPUT " Output filespec (default LPT1:) = ";TEMP$
- 1590 IF TEMP$="" THEN 1600 ELSE OD$=TEMP$
- 1600 IF LEFT$(OD$,3)="COM" AND MID$(OD$,5,1)=":" THEN OPEN OD$ AS 3
- 1610 IF LEFT$(OD$,3)<>"COM" THEN OPEN "O",3,OD$
- 1620 IF LEFT$(OD$,3)="LPT" AND MID$(O$,5,1)=":" THEN WIDTH #3,81
- 1630 PRINT: INPUT "1=>Cross reference; 2=>List; 3=>Both ";M
- 1640 '
- 1650 ' Process list of input file names
- 1660 '
- 1670 STIME$=TIME$:PRINT:PRINT "Started processing at ";STIME$
- 1680 FOR F=1 TO FX
- 1690 CLOSE 1:OPEN "I",1,F$(F)
- 1700 PRG$="'"+F$(F)+"' "+DATE$+" "+STIME$
- 1710 GOSUB 1800 ' Main processing routine
- 1720 NEXT F
- 1730 PRINT #3,CHR$(12);:SOUND 2000,5:SOUND 3000,5:SOUND 2000,5
- 1740 PRINT:PRINT "Started at ";STIME$;" Ended at ";TIME$
- 1750 PRINT:PRINT "NORMAL END OF JOB"
- 1760 KEY ON:END
- 1770 '
- 1780 ' Initialize for cross reference
- 1790 '
- 1800 LC=0:BC=0:PZ%=0:V$="":C$="":VC%=91:RC%=-1
- 1810 FOR I=0 TO 91: VNXT%(I)=-1: NEXT
- 1820 IF M>1 THEN GOSUB 2800 ' Start new page if listing requested
- 1830 '
- 1840 ' Input line and extract line number
- 1850 '
- 1860 IF EOF(1) THEN 2430
- 1870 LINE INPUT #1,L$: IF M>1 THEN GOSUB 2680: IF M=2 THEN 1860
- 1880 LG=LEN(L$): BRNCH%=0: ER$="": LC=LC+1: BC=BC+LG
- 1890 LP%=INSTR(L$," "): LN=VAL(LEFT$(L$,LP%))
- 1900 IF LEFT$(OD$,5)="SCRN:" AND M=3 THEN 1910 ELSE PRINT USING " ###### ";LN;
- 1910 IF LN>32767 THEN LN=LN-65536!
- 1920 '
- 1930 ' Parse rest of line
- 1940 '
- 1950 LP%=LP%+1: IF LP%>LG THEN GOSUB 2240: GOTO 1860
- 1960 C$=MID$(L$,LP%,1)
- 1970 IF C$>="A" AND C$<="Z" THEN 2110 ELSE IF C$>="0" AND C$<="9" THEN 2380
- 1980 IF V$<>"" AND C$="." THEN 2110
- 1990 IF C$=" " THEN GOSUB 2240: GOTO 1950 ELSE IF C$<>","THEN BRNCH%=0
- 2000 IF C$=CHR$(34) THEN GOSUB 2240
- 2010 IF C$=CHR$(34) THEN LP%=INSTR(LP%+1,L$,C$):IF LP%>0 THEN 1950 ELSE 1860
- 2020 IF C$="'" THEN GOSUB 2240: GOTO 1860
- 2030 IF C$="&" THEN GOSUB 2240: V$=C$: GOTO 1950
- 2040 IF C$="$" OR C$="!" OR C$="%" OR C$="#" THEN GOSUB 2360:GOTO 1950
- 2050 IF C$="(" THEN GOSUB 2360
- 2060 GOSUB 2240: IF C$<>"," THEN ER$=""
- 2070 GOTO 1950
- 2080 '
- 2090 ' Test for command
- 2100 '
- 2110 IF V$>"" THEN 2390 ELSE C%=ASC(C$): P%=PT%(C%-ASC("A")): BRNCH%=0
- 2120 IF C%<ASC(RW$(P%)) THEN 2390
- 2130 IF INSTR(LP%,L$,RW$(P%))<>LP% THEN P%=P%+1: GOTO 2120
- 2140 T$=MID$(L$,LP%+LEN(RW$(P%)),1)
- 2150 IF (T$>="A" AND T$<="Z") OR (T$>="0" AND T$<="9") OR T$="." THEN 2390 ELSE GOSUB 2240: RW$=RW$(P%)
- 2160 IF RW$="DATA" THEN LP%=INSTR(LP%,L$," "): IF LP%>0 THEN 1950 ELSE 1860
- 2170 IF RW$="REM" THEN 1860
- 2180 IF RW$="GOTO" OR RW$="GOSUB" OR RW$="THEN" OR RW$="ELSE" OR RW$="RESUME" THEN BRNCH%=1
- 2190 IF RW$="ERASE" THEN ER$="(" ELSE ER$=""
- 2200 LP%=LP%+LEN(RW$)-1:GOTO 1950
- 2210 '
- 2220 ' End variable
- 2230 '
- 2240 IF V$="" THEN RETURN
- 2250 IF V$>="A" THEN V$=V$+ER$: C%=ASC(V$)+1 ELSE IF V$>="0" THEN V$=RIGHT$(" "+V$,5): C%=VAL(LEFT$(V$,2)) ELSE 2320
- 2260 IL=-1: I=C%
- 2270 IF V$>V$(I) THEN IL=I: I=VNXT%(I): IF I>0 THEN 2270 ELSE 2290
- 2280 IF V$=V$(I) THEN J=LST%(I-91): IF RFL%(J)=LN THEN 2320 ELSE RC%=RC%+1: NXT%(J)=RC%: GOTO 2310
- 2290 VC%=VC%+1: IF IL>=0 THEN VNXT%(IL)=VC%
- 2300 V$(VC%)=V$: VNXT%(VC%)=I: RC%=RC%+1: FRST%(VC%-91)=RC%:I=VC%
- 2310 RFL%(RC%)=LN: NXT%(RC%)=-1: LST%(I-91)=RC%
- 2320 V$="": RETURN
- 2330 '
- 2340 ' Expand variable
- 2350 '
- 2360 IF V$<>"" THEN V$=V$+C$
- 2370 RETURN
- 2380 IF V$="" AND BRNCH%=0 THEN 1950
- 2390 V$=V$+C$: GOTO 1950
- 2400 '
- 2410 ' Cross-reference if requested
- 2420 '
- 2430 IF M=2 THEN RETURN ' Cross-reference not requested
- 2440 PZ%=0:LZ%=60
- 2450 FOR J=0 TO 91: V%=J
- 2460 V%=VNXT%(V%): IF V%<0 THEN 2570
- 2470 IF LZ%>56 THEN GOSUB 2630 ELSE SZ%=SZ%+1: IF SZ%=3 THEN GOSUB 2640
- 2480 RZ%=0:I=FRST%(V%-91): PRINT #3,V$(V%);
- 2490 IF RZ%=0 THEN PRINT #3,TAB(16);
- 2500 LN=RFL%(I): IF LN<0 THEN LN=LN+65536!
- 2510 PRINT #3,USING " #####";LN,
- 2520 RZ%=RZ%+1
- 2530 IF RZ%>6 THEN RZ%=0: PRINT #3,: LZ%=LZ%+1: IF LZ%>56 THEN GOSUB 2630
- 2540 I=NXT%(I): IF I>0 THEN 2490
- 2550 IF RZ%>0 THEN PRINT #3,: LZ%=LZ%+1
- 2560 GOTO 2460
- 2570 NEXT J
- 2580 '
- 2590 PRINT #3,STRING$(79,"=")
- 2600 PRINT #3,"LINES: "LC" BYTES: "BC" SYMBOLS: "VC%-91" REFERENCES: "RC%+1
- 2610 LZ%=LZ%+2: RETURN
- 2620 '
- 2630 GOSUB 2800: PRINT #3,"SYMBOL" TAB(20) "REFERENCE LINE": LZ%=LZ%+1
- 2640 PRINT #3,STRING$(79,"-"):LZ%=LZ%+1:SZ%=0:RETURN
- 2650 '
- 2660 'List if requested
- 2670 '
- 2680 X%=1
- 2690 IF LZ%>60 THEN GOSUB 2800 ' If bottom of page, start new page
- 2700 IF RIGHT$(L$,3)="'PG" THEN GOSUB 2800 ' If 'PG ends line, start new page
- 2710 Y%=INSTR(X%,L$,CHR$(10))
- 2720 IF Y%>0 THEN PRINT #3,MID$(L$,X%,Y%-X%):LZ%=LZ%+1:X%=Y%+1:GOTO 2710
- 2730 PRINT #3,MID$(L$,X%,LW)
- 2740 LZ%=LZ%+1:X%=X%+LW: IF X%<=LEN(L$) THEN 2730 ELSE RETURN
- 2750 '
- 2760 IF ERR=53 THEN PRINT:PRINT "FILE NOT FOUND":RESUME 1490
- 2770 IF ERR=58 THEN RESUME 1540 ' File already exists -- see NAME AS line
- 2780 ON ERROR GOTO 0
- 2790 '
- 2800 PRINT #3,CHR$(12); ' Form feed
- 2810 PZ%=PZ%+1:PRINT #3,PRG$;TAB(68) "PAGE"PZ%
- 2820 PRINT #3,:PRINT #3,
- 2830 LZ%=3: RETURN
- RINT #3,CHR$(12); ' Form feed
- 2810 PZ%=PZ%+1:PRINT #3,PR