home *** CD-ROM | disk | FTP | other *** search
- 100 REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 110 REM + ORIGINAL: CREFBAS.BAS NEW: LISTINGS.BAS +
- 120 REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 121 DEFINT I-J
- 122 DIM RW$(159),PT%(25),F$(30)
- 123 DIM VNXT%(490),V$(490),FRST%(400),LST%(400),RFL%(2000),NXT%(2000)
- 125 I=400
- 126 LW=75:PL=58
- 127 PRT2$=""
- 128 PRT3$=""
- 130 CLS
- 140 REM *** THIS PROGRAM WILL NOT PRODUCE A CROSS REFERENCE SYMBOL
- 141 REM *** FOR ANY VARIABLE WHICH CONTAINS AN IMBEDDED RESERVED WORD.
- 142 REM
- 190 'PROGRAM REVISIONS FOR IBM PC:
- 192 '7-23-82 CHANGED PRINTER STATEMENTS J. E. PERRY
- 194 '7-24-82 ADDED TIME AND DATE TO HEADING JEP
- 196 '9-3-82 ADDED RESERVED WORDS FOR IBM BASIC, CHANGED PAGE LENGTH JEP
- 198 '9-4-82 ADDED PRINTOUT OF FILE CREATION DATE JEP
- 200 '9-10-82 CORRECTED DISPLAY OF LINE NO. JEP
- 202 ' 11-9-84 CORRECTED COM VS. COMMON, EXP. PRINT HEADINGS. PAT FREEMAN
- 204 ' 1-24-85 ADJUSTED FOR LASER/LINE PTR, CHANGED PROGRAM LISTINGS P.F.
- 206 '
- 220 ON ERROR GOTO 1820
- 221 PRINT "THIS PROGRAM WILL LIST PROGRAMS AND/OR PRODUCE CROSS REFERENCES"
- 222 PRINT "IF THE SOURCE PROGRAM IS SAVED AS ASCII, AND USES LINE NUMBERS."
- 223 PRINT
- 224 Z=4
- 226 Z1=1
- 228 INPUT "ENTER DESTINATION FILENAME FOR LISTINGS OR 'ENTER' FOR LPT1:",F0$
- 230 IF LEN(F0$)=0 THEN F0$="LPT1:"
- 232 A1$=F0$
- 234 GOSUB 37000
- 236 F0$=A1$
- 238 IF F0$="LPT1:" GOTO 260
- 240 ON ERROR GOTO 45100
- 242 OPEN "I",9,F0$
- 244 CLOSE 9
- 246 ON ERROR GOTO 1820
- 248 GOTO 45200
- 250 ON ERROR GOTO 1820
- 252 PRINT
- 254 INPUT "ENTER 'Y' TO SET UP FOR LASERJET OR 'ENTER' FOR REGULAR SET UP ",A$
- 256 IF LEN(A$)=0 OR A$="N" OR A$="n" THEN Z1=1 ELSE IF A$="Y" OR A$="y" THEN Z1=2 ELSE GOTO 254
- 258 IF Z1=2 GOTO 266
- 260 PRINT
- 262 INPUT "ENTER PAGE OFFSET (0-4) ",Z
- 264 IF Z<0 OR Z>4 GOTO 262
- 266 OPEN "O",9, F0$
- 268 IF Z1=1 GOTO 278 ELSE PRINT #9, CHR$(27)+"E"
- 270 PRINT #9, CHR$(27)+"&l0O"+CHR$(27)+"(8U"+CHR$(27)+"(s0p10h12v0s0b3T"
- 272 PRINT #9, CHR$(27)+"&l0O"+CHR$(27)+")0U"+CHR$(27)+")s1p14.4v0s1b4T"
- 274 PRT2$=CHR$(27)+"&dD"
- 276 PRT3$=CHR$(27)+"&d@"
- 278 CLOSE 9
- 284 IF F0$="LPT1:" THEN Z2=1 ELSE Z2=2
- 300 'PRINT:PRINT"CROSSREF":' - BASIC-80 VERSION OF 05/19/80"
- 301 'PRINT:PRINT"COPYRIGHT (C) 1980 BY ADVANCED INFORMATICS"
- 302 PRINT:'PRINT"LISTS ALL PROGRAM LINES AND/OR REFERENCED LINE #'S TO ";F0$
- 303 PRINT"------------------------------------------------------------"
- 310 ' RESERVED WORDS
- 320 '
- 330 DATA ABS,AND,ASC,AS,ATN,AUTO,BEEP
- 340 DATA CALL,CDBL,CHAIN,CHR$,CINT,CIRCLE,CLEAR,CLOSE,CLS,COLOR,COMMON,COM
- 350 DATA CONSOLE,CONT,COS,CSNG,CSRLIN,CVD,CVI,CVS,DATA,DATE$
- 360 DATA DEFDBL,DEFINT,DEFSNG,DEFSTR,DEFUSR,DEF,DELETE,DIM,DRAW,DSKI$,DSKO$,DSKF
- 370 DATA EDIT,ELSE,END,EOF,EQV,ERASE,ERL,ERR,ERROR,EXP,FIELD,FILES,FIX,FOR
- 380 DATA FRE,GET,GOSUB,GOTO,HEX$
- 390 DATA IF,IMP,INKEY$,INPUT,INP,INSTR,INT,KEY,KILL,LEFT$,LEN,LET,LINE
- 400 DATA LIST,LLIST,LOAD,LOCATE,LOC,LOF,LOG,LPOS,LPRINT,LSET
- 410 DATA MERGE,MID$,MKD$,MKI$,MKS$,MOD,MOTOR,MOUNT
- 420 DATA NAME,NEW,NEXT,NOT,NULL,OCT$,OFF,ON,OPEN,OPTION,OR,OUT
- 430 DATA PAINT,PALETTE,PEEK,PEN,POINT,POKE,POS,PRINT,PUT
- 440 DATA RANDOMIZE,READ,REM,RENUM,RESET,RESTORE,RESUME,RETURN,RIGHT$,RND,RSET,RUN
- 450 DATA SAVE,SCREEN,SEG,SGN,SIN,SOUND,SPACE$,SPC(,SQR,STEP,STOP,STR$,STRIG,STRING$,SWAP,SYSTEM
- 460 DATA TAB(,TAN,THEN,TIME$,TO,TROFF,TRON,UNLOAD
- 470 DATA USING,USR,VAL,VARPTR,WAIT,WEND,WHILE,WIDTH,WRITE,XOR,"\"
- 480 'IBM BASIC EXTENSIONS:
- 490 'BEEP,CIRCLE,CLS,COLOR,COM,CSRLIN,DATE$,DRAW
- 500 'KEY,LOCATE,MOTOR,OFF,PAINT,PALETTE,PEN,POINT
- 510 'SCREEN,SEG,SOUND,STRIG,TIME$
- 520 '
- 530 'FILL ARRAY WITH RESERVED WORDS
- 540 '
- 550 RW=0
- 560 READ RW$
- 570 RW=RW+1:RW$(RW)=RW$:IF RW$="\" THEN 610
- 580 I=ASC(RW$)-ASC("A"):IF PT%(I)=0 THEN PT%(I)=RW
- 590 GOTO 560
- 600 '
- 610 FOR I=0 TO 25:IF PT%(I)=0 THEN PT%(I)=RW
- 620 NEXT
- 630 '
- 640 'GET LIST OF FILE NAMES
- 650 '
- 660 FX=0
- 670 PRINT "ASCII SAVED PROGRAM #" FX+1 "[.BAS]: ";:LINE INPUT A1$
- 680 IF A1$="" THEN IF FX<1 THEN 900 ELSE 740
- 690 IF INSTR(A1$,".")=0 THEN A1$=A1$+".BAS"
- 700 'NAME A1$ AS A1$
- 705 GOSUB 37000
- 706 ON ERROR GOTO 45000
- 707 OPEN "I",1,A1$
- 708 ON ERROR GOTO 1820
- 709 CLOSE 1
- 710 FX=FX+1:F$(FX)=A1$
- 720 IF FX<30 GOTO 670
- 730 '
- 740 'PRINT:INPUT"DATE = ";D$
- 750 PRINT:INPUT"1) CROSS REFERENCE 2) LIST 3) BOTH ";M
- 755 IF M<1 OR M>3 GOTO 750
- 760 '
- 770 'PROCESS LIST OF FILE NAMES
- 780 '
- 790 FOR F=1 TO FX
- 800 CLOSE:OPEN"I",1,F$(F):OPEN MID$("OA",Z2,1),9,F0$
- 810 DEF SEG:FCBADR=VARPTR(#1):DC=256*PEEK(FCBADR+22)+PEEK(FCBADR+21)
- 820 MM%=(DC AND &H1E0)/32:DD%=DC AND &H1F:YY%=80+(DC AND &HFE00)/512
- 830 DT$=RIGHT$(STR$(MM%),2)+"-"
- 840 DT$=DT$+RIGHT$(STR$(DD%),SGN(INT(DD%/10))+1)+"-"+RIGHT$(STR$(YY%),2)
- 850 PRG$=SPACE$(Z)+CHR$(Z1+13)+"PROGRAM:"+CHR$(14)+PRT2$+F$(F)+PRT3$+CHR$(20-(Z1-1)*5)+"("+DT$+")"
- 852 IF M>1 THEN GOSUB 25000
- 853 ON ERROR GOTO 1820
- 854 IF M=2 GOTO 880
- 855 PRINT
- 860 PRINT "BUILDING XREF FOR ";F$(F);" -- ";:RP=CSRLIN:CP=POS(0)
- 870 GOSUB 940
- 875 ON ERROR GOTO 1820
- 880 NEXT
- 890 PRINT #9, CHR$(12)
- 895 CLOSE
- 898 PRINT
- 900 END
- 910 '
- 920 'INITIALIZE FOR CROSS REFERENCE
- 930 '
- 940 ON ERROR GOTO 1865
- 942 LC=0:BC=0:PZ=0:V$="":C$="":VC=91:RC=-1
- 950 FOR I=0 TO 91:VNXT%(I)=-1:NEXT
- 970 '
- 980 ' INPUT LINE & EXTRACT LINE#
- 990 '
- 1000 IF EOF(1)THEN 1530
- 1010 LINE INPUT#1,L$
- 1020 LG=LEN(L$):BRNCH=0:ER$="":LC=LC+1:BC=BC+LG
- 1030 LP=INSTR(L$," "):LN=VAL(LEFT$(L$,LP)):LOCATE RP,CP,0:PRINT "LINE:";LN;:LOCATE RP,1,0
- 1040 IF LN=0 GOTO 45300 ELSE IF LN>32767 THEN LN=LN-65536!
- 1050 '
- 1060 ' PARSE REST OF LINE
- 1070 '
- 1080 LP=LP+1:IF LP>LG THEN GOSUB 1340:GOTO 1000
- 1090 C$=MID$(L$,LP,1)
- 1100 IF C$>="A" AND C$<="Z" THEN 1220 ELSE IF C$>="0" AND C$<="9" THEN 1480
- 1110 IF C$=" " THEN GOSUB 1340:GOTO 1080 ELSE IF C$<>", " THEN BRNCH=0
- 1120 IF C$=CHR$(34)THEN GOSUB 1340:LP=INSTR(LP+1,L$,C$):IF LP>0 THEN 1080 ELSE 1000
- 1130 IF C$="'" THEN GOSUB 1340:GOTO 1000
- 1140 IF C$="&" THEN GOSUB 1340:V$=C$:GOTO 1080
- 1150 IF C$="$" OR C$="!" OR C$="%" OR C$="#" THEN GOSUB 1460:GOTO 1080
- 1160 IF C$="("THEN GOSUB 1460
- 1170 GOSUB 1340:IF C$<>", " THEN ER$=""
- 1180 GOTO 1080
- 1190 '
- 1200 ' TEST FOR COMMAND
- 1210 '
- 1220 IF V$>"" THEN 1490 ELSE C=ASC(C$):P=PT%(C-ASC("A")):BRNCH=0
- 1230 IF C<ASC(RW$(P))THEN 1490
- 1240 IF INSTR(LP,L$,RW$(P))<>LP THEN P=P+1:GOTO 1230
- 1250 GOSUB 1340:RW$=RW$(P)
- 1260 IF RW$="DATA" THEN LP=INSTR(LP,L$,":"):IF LP>0 THEN 1080 ELSE 1000
- 1270 IF RW$="REM" THEN 1000
- 1280 IF RW$="GOTO" OR RW$="GOSUB" OR RW$="THEN" OR RW$="ELSE" OR RW$="RESUME" THEN BRNCH=1
- 1290 IF RW$="ERASE" THEN ER$="(" ELSE ER$=""
- 1300 LP=LP+LEN(RW$)-1:GOTO 1080
- 1310 '
- 1320 ' END VARIABLE
- 1330 '
- 1340 IF V$="" THEN RETURN
- 1350 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 1420
- 1360 IL=-1:I=C
- 1370 IF V$>V$(I)THEN IL=I:I=VNXT%(I):IF I>0 THEN 1370 ELSE 1390
- 1380 IF V$=V$(I)THEN J=LST%(I-91):IF RFL%(J)=LN THEN 1420 ELSE RC=RC+1:NXT%(J)=RC:GOTO 1410
- 1390 VC=VC+1:IF IL>=0 THEN VNXT%(IL)=VC
- 1400 V$(VC)=V$:VNXT%(VC)=I:RC=RC+1:FRST%(VC-91)=RC:I=VC
- 1410 RFL%(RC)=LN:NXT%(RC)=-1:LST%(I-91)=RC
- 1420 V$="":RETURN
- 1430 '
- 1440 ' EXPAND VARIABLE
- 1450 '
- 1460 IF V$<>"" THEN V$=V$+C$
- 1470 RETURN
- 1480 IF V$="" AND BRNCH=0 THEN 1080
- 1490 V$=V$+C$:GOTO 1080
- 1500 '
- 1510 ' LIST VARIABLES
- 1520 '
- 1530 IF M=2 THEN RETURN
- 1532 LOCATE RP,1:PRINT "PRINTING";
- 1540 PZ=0:GOSUB 1740
- 1550 FOR J=0 TO 91:V=J
- 1560 V=VNXT%(V):IF V<0 THEN 1680
- 1570 IF LZ>PL-4 THEN GOSUB 1740 ELSE SZ=SZ+1:IF SZ=3 THEN GOSUB 1750
- 1580 'IF SYMFLG=0 THEN IF LEFT$(V$(V),1)>="A" AND LEFT$(V$(V),1)<="Z" THEN GOSUB 1400:SYMFLG=1
- 1590 RZ=0:I=FRST%(V-91):PRINT #9, SPACE$(Z);V$(V);
- 1600 IF RZ=0 THEN PRINT #9, TAB(16+Z);
- 1610 LN=RFL%(I):IF LN<0 THEN LN=LN+65536!
- 1620 PRINT #9, USING " #####";LN,
- 1630 RZ=RZ+1
- 1640 IF RZ>5 THEN RZ=0:PRINT #9,SPACE$(2):LZ=LZ+1:IF LZ>PL-4 THEN GOSUB 1740
- 1650 I=NXT%(I):IF I>0 THEN 1600
- 1660 IF RZ>0 THEN PRINT #9,SPACE$(2):LZ=LZ+1
- 1670 GOTO 1560
- 1680 NEXT J
- 1690 '
- 1700 PRINT #9, SPACE$(Z);STRING$(LW,"=")
- 1710 PRINT #9, SPACE$(Z);"LINES:"LC" BYTES:"BC" SYMBOLS:"VC-91" REFERENCES:"RC+1
- 1720 LZ=LZ+2:RETURN
- 1730 '
- 1740 GOSUB 1870:PRINT #9,SPACE$(Z);"SYMBOL"TAB(20)"REFERENCE LINE":LZ=LZ+1
- 1750 PRINT #9, SPACE$(Z);STRING$(LW,"-"):LZ=LZ+1:SZ=0:RETURN
- 1760 '
- 1820 IF ERR=53 THEN PRINT:PRINT"FILE ";F$(F);" NOT FOUND":RESUME 880
- 1830 IF ERR=24 THEN RESUME '24 IS TIMEOUT
- 1840 IF ERR=58 THEN RESUME 710
- 1850 PRINT "*** ERROR *** ERR=";ERR;" ERL=";ERL
- 1860 RESUME 880
- 1865 PRINT "*** ERROR *** ERR=";ERR;" ERL=";ERL
- 1868 RESUME 1869
- 1869 IF ERL>780 THEN RETURN 880 ELSE GOTO 895
- 1870 PRINT #9, CHR$(12);
- 1880 PRINT #9, PRG$;
- 1890 PZ=PZ+1:PRINT #9, " ";TIME$;" ";DATE$;" PAGE";PZ:PRINT #9, SPACE$(2)
- 1900 LZ=3:RETURN
- 25000 ON ERROR GOTO 45400
- 25002 I9=0
- 25005 I8=1
- 25010 I7=0
- 25015 B9=0
- 25017 PRINT
- 25018 PRINT "GENERATING LISTING OF ";F$(F);" TO ";F0$;" NOW";
- 25019 PRINT #9,CHR$(12);
- 25020 GOSUB 25150
- 25025 IF I9/55=INT(I9/55) AND I9><0 THEN GOSUB 25145
- 25030 LINE INPUT #1,P9$
- 25035 B9=B9+LEN(P9$)
- 25040 I7=I7+1
- 25045 LET A1$=LEFT$(P9$,INSTR(P9$," ")-1)
- 25047 IF VAL(A1$)=0 GOTO 45300
- 25050 LET P9$=STRING$(5-LEN(A1$),32)+P9$
- 25055 IF LEN(P9$)>76 GOTO 25070
- 25060 PRINT #9,SPACE$(Z)+P9$
- 25065 GOTO 25095
- 25070 PRINT #9,SPACE$(Z)+LEFT$(P9$,76)
- 25075 I9=I9+1
- 25080 IF I9/55=INT(I9/55) THEN GOSUB 25145
- 25085 LET P9$=SPACE$(6)+RIGHT$(P9$,LEN(P9$)-76)
- 25090 GOTO 25055
- 25095 I9=I9+1
- 25100 IF EOF(1) GOTO 25110
- 25105 GOTO 25025
- 25110 PRINT #9,SPACE$(5)
- 25115 PRINT #9,TAB(10+Z);"NUMBER OF LINES="+STR$(I7)+" NUMBER OF BYTES="+STR$(B9)
- 25125 CLOSE 1
- 25130 OPEN "I",1,F$(F)
- 25135 RETURN
- 25140 '------------------- MAIN PROGRAM BODY ENDS -----------------------------
- 25145 PRINT #9,CHR$(12);
- 25150 PRINT #9,PRG$;
- 25155 PRINT #9," "+DATE$+" "+TIME$+" PAGE:"+STR$(I8)
- 25160 PRINT #9,SPACE$(5)
- 25165 I8=I8+1
- 25170 RETURN
- 37000 FOR I0=1 TO LEN(A1$)
- 37010 A$=MID$(A1$,I0,1)
- 37020 IF ASC(A$)>96 AND ASC(A$)<123 THEN MID$(A1$,I0,1)=CHR$(ASC(A$)-32)
- 37030 NEXT I0
- 37040 RETURN
- 45000 IF ERR=53 THEN RESUME 45010 ELSE GOTO 1820
- 45010 ON ERROR GOTO 1820
- 45020 PRINT CHR$(7);"FILE NOT FOUND"
- 45030 GOTO 670
- 45100 IF ERR=53 THEN RESUME 250 ELSE RESUME 45120
- 45120 PRINT CHR$(7);"INVALID FILENAME"
- 45130 ON ERROR GOTO 1820
- 45140 GOTO 228
- 45200 PRINT CHR$(7);"FILE ALREADY EXISTS - ENTER 'Y' TO OVERWRITE IT, "
- 45210 INPUT "OR ANY OTHER KEY TO RE-ENTER FILENAME ",A$
- 45220 IF A$="y" OR A$="Y" GOTO 250 ELSE GOTO 228
- 45300 PRINT
- 45310 PRINT CHR$(7);F$(F);" NOT SAVED AS ASCII OR NO LINE NUMBERS !";
- 45320 RETURN 880
- 45400 IF ERR><5 THEN GOTO 1865 ELSE RESUME 45300