home *** CD-ROM | disk | FTP | other *** search
- 100 KEY OFF:CLS
- 110 PRINT "CROSSREF ";
- 120 PRINT"COPYRIGHT (C) 1980 BY ADVANCED INFORMATICS"
- 130 'MODIFIED FOR IBM PC BY STEVE NOSSEN V1.10 1/13/82
- 140 'MODIFIED BY Buzz Hamilton V1.2 12/2/82
- 150 ' Add Keywords APPEND,ERROR, and SOUND
- 160 ' Relocate Keywords COM,INPUT, and LOC
- 170 ' Change end of DATA line check from space to colon
- 180 ' Permit dot in variable names
- 190 ' Eliminate dash spacer lines
- 200 ' Change default extension of input file to LST
- 210 PRINT"V1.2 12/2/82"
- 220 '
- 230 DEFINT I-J:LW=80
- 240 ON ERROR GOTO 1690
- 250 DIM RW$(158),PT%(25),F$(10)
- 260 DIM VNXT%(490),V$(490),FRST%(400),LST%(400),RFL%(2000),NXT%(2000)
- 270 '
- 280 ' RESERVED WORDS
- 290 '
- 300 DATA ABS,AND,APPEND,ASC,AS,ATN,AUTO,BEEP,BLOAD,BSAVE
- 310 DATA CALL,CDBL,CHAIN,CHR$,CINT,CIRCLE,CLEAR,CLOSE,CLS,COLOR,COMMON,COM
- 320 DATA CONT,COS,CSNC,CSRLIN,CVD,CVI,CVS,DATA,DATE$
- 330 DATA DEFDBL,DEFINT,DEFSNG,DEFSTR,DEFUSR,DEF,DELETE,DIM,DRAW
- 340 DATA EDIT,ELSE,END,EOF,EQV,ERASE,ERL,ERROR,ERR,EXP,FIELD,FILES,FIX,FOR
- 350 DATA FRE,GET,GOSUB,GOTO,HEX$
- 360 DATA IF,IMP,INKEY$,INPUT$,INPUT,INP,INSTR,INT,KEY,KILL,LEFT$,LEN,LET,LINE
- 370 DATA LIST,LLIST,LOAD,LOCATE,LOC,LOF,LOG,LPOS,LPRINT,LSET,MERGE,MID$,MKD$
- 380 DATA MKI$,MKS$,MOD,MOTOR,NAME,NEW,NEXT,NOT,OCT$,OFF,ON,OPEN,OPTION,OR,OUT
- 390 DATA PAINT,PEEK,PEN,PLAY,POINT,POKE,POS,PRESET,PRINT,PSET,PUT
- 400 DATA RANDOMIZE,READ,REM,RENUM,RESET
- 410 DATA RESTORE,RESUME,RETURN,RIGHT$,RND,RSET,RUN
- 420 DATA SAVE,SCREEN,SGN,SIN,SOUND,SPACE$,SPC(,SQR
- 430 DATA STEP,STICK,STOP,STR$,STRIG,STRING$,SWAP,SYSTEM
- 440 DATA TAB(,TAN,THEN,TIME$,TO,TROFF,TRON
- 450 DATA USING,USR,VAL,VARPTR,WAIT,WEND,WHILE,WIDTH,WRITE,XOR,"\"
- 460 '
- 470 ' FILL ARRAY WITH RESERVED WORDS
- 480 '
- 490 RW%=0
- 500 READ RW$
- 510 RW%=RW%+1:RW$(RW%)=RW$:IF RW$="\" THEN 550
- 520 I=ASC(RW$)-ASC("A"):IF PT%(I)=0 THEN PT%(I)=RW%
- 530 GOTO 500
- 540 '
- 550 FOR I=0 TO 25:IF PT%(I)=0 THEN PT%(I)=RW%
- 560 NEXT
- 570 '
- 580 ' GET LIST OF FILE NAMES
- 590 '
- 600 FX=0
- 610 PRINT:PRINT " ASCII SAVED PROGRAM #" FX+1 " = ";:LINE INPUT L$
- 620 IF L$="" THEN IF FX<1 THEN 780 ELSE 680
- 630 IF INSTR(L$,".")=0 THEN L$=L$+".LST"
- 640 NAME L$ AS L$
- 650 FX=FX+1:F$(FX)=L$
- 660 GOTO 610
- 670 '
- 680 OD$="LPT1:":PRINT:LINE INPUT " OUTPUT FILE (DEFAULT IS LPT1:) -> ";TEMP$
- 690 IF TEMP$="" THEN 700 ELSE OD$=TEMP$
- 700 IF LEFT$(OD$,5)="COM1:" THEN OPEN OD$ AS 3 ELSE OPEN "O",3,OD$
- 710 PRINT:INPUT"1) Cross Reference 2) List 3) Both";M
- 720 '
- 730 ' PROCESS LIST OF FILE NAMES
- 740 '
- 750 FOR F=1 TO FX
- 760 CLOSE 1:OPEN "I",1,F$(F): PRG$="'"+F$(F)+"' "+DATE$+" "+TIME$:GOSUB 820:PRINT #3,CHR$(12);
- 770 NEXT:PRINT #3,CHR$(12);
- 780 END
- 790 '
- 800 ' INITIALIZE FOR CROSS REFERENCE
- 810 '
- 820 LC=0:BC=0:PZ%=0:V$="":C$="":VC%=91:RC%=-1
- 830 FOR I=0 TO 91: VNXT%(I)=-1: NEXT
- 840 IF M>1 THEN GOSUB 1730
- 850 '
- 860 ' INPUT LINE AND EXTRACY LINE NUMBER
- 870 '
- 880 IF EOF(1) THEN 1430
- 890 LINE INPUT #1,L$:IF M>1 THEN GOSUB 1640:IF M=2 THEN 880
- 900 LG=LEN(L$): BRNCH%=0: ER$="": LC=LC+1: BC=BC+LG
- 910 LP%=INSTR(L$," "):LN=VAL(LEFT$(L$,LP%)):IF LEFT$(OD$,5)="SCRN:" AND M=3 THEN 920 ELSE PRINT LN,
- 920 IF LN>32767 THEN LN=LN-65536!
- 930 '
- 940 ' PARSE REST OF LINE
- 950 '
- 960 LP%=LP%+1: IF LP%>LG THEN GOSUB 1230: GOTO 880
- 970 C$=MID$(L$,LP%,1)
- 980 IF C$>="A" AND C$<="Z" THEN 1100 ELSE IF (C$>="0" AND C$<="9") OR C$="." THEN 1370
- 990 IF C$=" " THEN GOSUB 1230: GOTO 960 ELSE IF C$<>","THEN BRNCH%=0
- 1000 IF C$=CHR$(34) THEN GOSUB 1230:LP%=INSTR(LP%+1,L$,C$):IF LP%>0 THEN 960 ELSE 880
- 1010 IF C$="'" THEN GOSUB 1230: GOTO 880
- 1020 IF C$="&" THEN GOSUB 1230: V$=C$: GOTO 960
- 1030 IF C$="$" OR C$="!" OR C$="%" OR C$="#" THEN GOSUB 1350:GOTO 960
- 1040 IF C$="(" THEN GOSUB 1350
- 1050 GOSUB 1230: IF C$<>"," THEN ER$=""
- 1060 GOTO 960
- 1070 '
- 1080 ' TEST FOR COMMAND
- 1090 '
- 1100 IF V$>"" THEN 1380 ELSE C%=ASC(C$): P%=PT%(C%-ASC("A")): BRNCH%=0
- 1110 IF C%<ASC(RW$(P%)) THEN 1380
- 1120 IF INSTR(LP%,L$,RW$(P%))<>LP% THEN P%=P%+1: GOTO 1110
- 1130 GOSUB 1230: RW$=RW$(P%)
- 1140 IF RW$="DATA" THEN LP%=INSTR(LP%,L$,":"): IF LP%>0 THEN 960 ELSE 880
- 1150 IF RW$="REM" THEN 880
- 1160 IF RW$="GOTO" OR RW$="GOSUB" OR RW$="THEN" THEN BRNCH%=1
- 1170 IF RW$="ELSE" OR RW$="RESUME" THEN BRNCH%=1
- 1180 IF RW$="ERASE" THEN ER$="(" ELSE ER$=""
- 1190 LP%=LP%+LEN(RW$)-1:GOTO 960
- 1200 '
- 1210 ' END VARIABLE
- 1220 '
- 1230 IF V$="" THEN RETURN
- 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
- 1250 IL=-1: I=C%
- 1260 IF V$>V$(I) THEN IL=I: I=VNXT%(I): IF I>0 THEN 1260 ELSE 1280
- 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
- 1280 VC%=VC%+1: IF IL>=0 THEN VNXT%(IL)=VC%
- 1290 V$(VC%)=V$: VNXT%(VC%)=I: RC%=RC%+1: FRST%(VC%-91)=RC%:I=VC%
- 1300 RFL%(RC%)=LN: NXT%(RC%)=-1: LST%(I-91)=RC%
- 1310 V$="": RETURN
- 1320 '
- 1330 ' EXPAND VARIABLE
- 1340 '
- 1350 IF V$<>"" THEN V$=V$+C$
- 1360 RETURN
- 1370 IF V$="" AND BRNCH%=0 THEN 960
- 1380 V$=V$+C$: GOTO 960
- 1390 '
- 1400 ' LIST VARIABLES
- 1410 '
- 1420 IF M=2 THEN RETURN
- 1430 PZ%=0:LZ%=60
- 1440 FOR J=0 TO 91: V%=J
- 1450 V%=VNXT%(V%): IF V%<0 THEN 1560
- 1460 IF LZ%>56 THEN GOSUB 1620
- 1470 RZ%=0:I=FRST%(V%-91): PRINT #3,V$(V%);
- 1480 IF RZ%=0 THEN PRINT #3,TAB(16);
- 1490 LN=RFL%(I): IF LN<0 THEN LN=LN+65536!
- 1500 PRINT #3,USING " #####";LN,
- 1510 RZ%=RZ%+1
- 1520 IF RZ%>6 THEN RZ%=0: PRINT #3,: LZ%=LZ%+1: IF LZ%>56 THEN GOSUB 1620
- 1530 I=NXT%(I): IF I>0 THEN 1480
- 1540 IF RZ%>0 THEN PRINT #3,: LZ%=LZ%+1
- 1550 GOTO 1450
- 1560 NEXT J
- 1570 '
- 1580 PRINT #3,STRING$(79,"=")
- 1590 PRINT #3,"LINES: ";LC;" BYTES: ";BC;:PRINT #3," SYMBOLS: ";VC%-91;" REFERENCES: ";RC%+1
- 1600 LZ%=LZ%+2: RETURN
- 1610 '
- 1620 GOSUB 1730: PRINT #3,"SYMBOL" TAB(20) "REFERENCE LINE": LZ%=LZ%+1:RETURN
- 1630 '
- 1640 X%=1
- 1650 IF LZ%>60 OR RIGHT$(L$,3)="'PG" THEN GOSUB 1730
- 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
- 1670 PRINT #3,MID$(L$,X%,LW): LZ%=LZ%+1:X%=X%+LW: IF X%<=LEN(L$) THEN 1670 ELSE RETURN
- 1680 '
- 1690 IF ERR=53 THEN PRINT:PRINT "FILE NOT FOUND":RESUME 610
- 1700 IF ERR=58 THEN RESUME 650
- 1710 ON ERROR GOTO 0
- 1720 '
- 1730 IF PZ%>0 OR M>1 THEN PRINT #3,CHR$(12); 'FORM FEED
- 1740 PZ%=PZ%+1:PRINT #3,PRG$;TAB(68) "PAGE"PZ%
- 1750 PRINT #3,:PRINT #3,
- 1760 LZ%=3: RETURN
- PRINT #3,CHR$(12); 'FORM FEED
- 1740 PZ%=PZ%+1:PRINT #3,