100 REM ************************************************ 110 REM **** CROSSV.BAS 28-FEB-78/09-AUG-78 **** 120 REM **** N A BOURGEOIS SANDIA LABORATORIES **** 130 REM ************************************************ 140 REM **** CROSS REFERENCE PROGRAM FOR BASIC TEXT **** 150 REM **** CLINT PURDUE KEN NOWOTNY 20-JAN-75 **** 160 REM ************************************************ 170 REM **** INITIALIZATION **** 180 REM ************************ 190 PRINT CLK$,'CROSSV: 79H09A' 200 DIM #3,S1%(857%) 210 DIM #4,S2%(2200%,1%) 220 DIM #5,S4%(500%,1%) 230 OPEN 'TEMP3' AS FILE #3 240 OPEN 'TEMP4' AS FILE #4 250 OPEN 'TEMP5' AS FILE #5 260 FOR I%=0% TO 857% 270 S1%(I%)=0% 280 NEXT I% 290 FOR J%=0% TO 1% 300 FOR I%=0% TO 2200% 310 S2%(I%,J%)=0% 320 NEXT I% 330 FOR I%=0% TO 500% 340 S4%(I%,J%)=0% 350 NEXT I% 360 NEXT J% 370 S3%=1% 380 S5%=0% 390 DIM D1$(1%) 400 D1$(0%)="'" 410 D1$(1%)='"' 420 DIM D$(112%) 430 I8%=112% 440 FOR I%=0% TO I8% 450 READ D$(I%) 460 NEXT I% 470 P$=CHR$(12%) 480 T$=' CROSS REFERENCE '&DAT$&' '&CLK$ 490 REM ************************** 500 REM **** KEYBOARD ENTRIES **** 510 REM ************************** 520 PRINT 'ENTER THE INPUT FILE NAME', 530 LINPUT A$ 540 IF POS(A$,':',1%)=0% THEN A$='SY:'&A$ 550 IF POS(A$,'.',1%)=0% THEN A$=A$&'.BAS' 560 PRINT 'NAME THE OUTPUT DEVICE', 570 LINPUT F$ 580 IF F$='' THEN F$='LP:' 590 IF POS(F$,':',1%)=0% THEN 560 600 I%=POS(A$,':',1%) 610 J%=POS(A$,".",1%) 620 Z$=SEG$(A$,I%+1%,J%-1%) 630 F$=F$&Z$&'.CRF' 640 I%=POS(A$,':',1%) 650 Z$=SEG$(A$,I%+1%,255%) 660 T$=Z$&T$ 670 REM ************************ 680 REM **** OPEN THE FILES **** 690 REM ************************ 700 OPEN A$ FOR INPUT AS FILE #1 DOUBLE BUF 710 OPEN F$ FOR OUTPUT AS FILE #2 DOUBLE BUF 720 IF SEG$(F$,1%,3%)='TT:' THEN PRINT #2 730 PRINT #2,T$ 740 PRINT #2 750 REM ******************************** 760 REM **** START OF MAIN SEQUENCE **** 770 REM ******************************** 780 IF END #1 THEN 2160 \ REM **** PRINT THE VARIABLES USAGE TABLE 790 LINPUT #1,B$ 800 PRINT #2,B$ 810 I1%=1% 820 GOSUB 2770 \ REM **** OBTAIN THE LINE NUMBER 830 I9%=I2% 840 REM ********************************* 850 REM **** IGNORE 'REM' STATEMENTS **** 860 REM ********************************* 870 IF SEG$(B$,I1%,I1%+2%)='REM' THEN 780 \ REM **** GET ANOTHER LINE 880 REM **************************************** 890 REM **** FIND AND REMOVE QUOTED STRINGS **** 900 REM **************************************** 910 FOR I%=0% TO 1% 920 I1%=POS(B$,D1$(I%),1%) 930 IF I1%=0% THEN 1050 940 I4%=POS(B$,D1$(I%),I1%+1%) 950 IF I4%=0% THEN 1050 960 I3%=POS(B$,D1$(1%-I%),1%) 970 IF I3%>I1% THEN 1020 980 I5%=POS(B$,D1$(1%-I%),I3%+1%) 990 IF I5%=0% THEN 1020 1000 I1%=I3% 1010 I4%=I5% 1020 I4%=I4%+1% 1030 GOSUB 3090 \ REM **** REMOVE QUOTED STRING 1040 GO TO 920 1050 NEXT I% 1060 REM **************************************** 1070 REM **** TRUNCATE ' \ REM' STATEMENTS **** 1080 REM **************************************** 1090 I1%=POS(B$,'\ REM',1%) 1100 IF I1%=0% THEN 1150 1110 B$=SEG$(B$,1%,I1%-1%) 1120 REM *********************************** 1130 REM **** FIND AND REMOVE KEY WORDS **** 1140 REM *********************************** 1150 FOR I%=0% TO I8% 1160 I1%=POS(B$,D$(I%),1%) 1170 IF I1%=0% THEN 1390 1180 I4%=I1%+LEN(D$(I%)) 1190 GOSUB 3090 \ REM **** REMOVE KEY WORD 1200 IF I%>2% THEN 1160 1210 GOSUB 2770 \ REM **** OBTAIN THE LINE NUMBER 1220 IF I%=2% THEN I9%=-I9% \ REM **** KEY WORD 'GOSUB' 1230 FOR J%=0% TO S5% 1240 IF S4%(J%,0%)<>I2% THEN 1310 1250 K%=S4%(J%,1%) 1260 IF S2%(K%,1%)=0% THEN 1290 1270 K%=S2%(K%,1%) 1280 GO TO 1260 1290 S2%(K%,1%)=S3% 1300 GO TO 1350 1310 NEXT J% 1320 S4%(S5%,0%)=I2% 1330 S4%(S5%,1%)=S3% 1340 S5%=S5%+1% 1350 S2%(S3%,0%)=I9% 1360 S3%=S3%+1% 1370 I9%=ABS(I9%) 1380 GO TO 1160 1390 NEXT I% 1400 REM ******************************* 1410 REM **** REPLACE 'AS' WITH '?' **** 1420 REM ******************************* 1430 I1%=POS(B$,'AS',1%) 1440 IF I1%=0% THEN 1500 1450 B$=SEG$(B$,1%,I1%-1%)&'?'&SEG$(B$,I1%+2%,255%) 1460 GO TO 1430 1470 REM ******************************* 1480 REM **** REPLACE 'IF' WITH '@' **** 1490 REM ******************************* 1500 I1%=POS(B$,'IF',1%) 1510 IF I1%=0% THEN 1570 1520 B$=SEG$(B$,1%,I1%-1%)&'@'&SEG$(B$,I1%+2%,255%) 1530 GO TO 1500 1540 REM ************************************** 1550 REM **** FIND AND SAVE VARIABLE NAMES **** 1560 REM ************************************** 1570 I3%=0% 1580 I2%=LEN(B$) 1590 IF I2%=0% THEN 780 \ REM **** GET ANOTHER LINE 1600 I1%=1% 1610 J5%=I3% 1620 J1%=0% 1630 J2%=0% 1640 J3%=0% 1650 I3%=ASC(SEG$(B$,1%,1%)) 1660 GOSUB 3040 \ REM **** REMOVE SINGLE CHARACTER 1670 IF I3%<65% THEN 1580 \ REM **** 'A' 1680 IF I3%>90% THEN 1580 \ REM **** 'Z' 1690 J1%=I3% 1700 IF I2%=1% THEN 1870 1710 I4%=ASC(SEG$(B$,1,1)) 1720 IF I4%=36% THEN 1830 \ REM **** '$' 1730 IF I4%=37% THEN 1850 \ REM **** '%' 1740 IF I4%>57% THEN 1870 \ REM **** '9' 1750 IF I4%<48% THEN 1870 \ REM **** '0' 1760 J2%=I4% 1770 GOSUB 3040 \ REM **** REMOVE SINGLE CHARACTER 1780 IF I2%=2% THEN 1870 1790 I4%=ASC(SEG$(B$,1%,1%)) 1800 IF I4%<36% THEN 1870 \ REM **** '$' 1810 IF I4%>37% THEN 1870 \ REM **** '%' 1820 IF I4%=37% THEN 1850 1830 J3%=1% 1840 GO TO 1860 1850 J3%=2% 1860 GOSUB 3040 \ REM **** REMOVE SINGLE CHARACTER 1870 IF LEN(B$)<1% THEN 1960 1880 IF J5%=64% THEN 1960 \ REM **** '@' (IF ) 1890 Z$=SEG$(B$,1%,1%) 1900 IF Z$='=' THEN 1950 1910 IF Z$<>'(' THEN 1960 1920 I4%=POS(B$,')',1%) 1930 IF I4%=0% THEN 1960 1940 IF SEG$(B$,I4%+1%,I4%+1%)<>'=' THEN 1960 1950 I9%=-I9% \ REM **** VARIABLE PRECEEDED BY '=' 1960 IF J2%=0% THEN J2%=47% 1970 J9%=J3%*286%+(J1%-65%)*11%+J2%-47% 1980 IF S1%(J9%)<>0% THEN 2040 1990 S1%(J9%)=S3% 2000 S2%(S3%,0%)=I9% 2010 I9%=ABS(I9%) 2020 S3%=S3%+1% 2030 GO TO 1580 \ REM **** LOOK FOR ANOTHER VARIABLE 2040 I1%=S1%(J9%) 2050 IF S2%(I1%,1%)<>0% THEN 2080 2060 S2%(I1%,1%)=S3% 2070 GO TO 2000 2080 I1%=S2%(I1%,1%) 2090 GO TO 2050 2100 REM ****************************** 2110 REM **** END OF MAIN SEQUENCE **** 2120 REM ****************************** 2130 REM ***************************************** 2140 REM **** PRINT THE VARIABLES USAGE TABLE **** 2150 REM ***************************************** 2160 CLOSE #1 2170 PRINT #2,P$ 2180 IF SEG$(F$,1%,3%)='TT:' THEN PRINT #2 2190 PRINT #2,T$ 2200 PRINT #2 2210 PRINT #2,'VARIABLE LINE(S) WHERE USED:'; 2220 PRINT #2,' IF PRECEEDED BY -, VAR FOLLOWED BY =' 2230 PRINT #2 2240 FOR K%=0% TO 285% 2250 FOR K1%=0% TO 572% STEP 286% 2260 I%=K%+K1% 2270 IF S1%(I%)=0% THEN 2460 2280 V$='' 2290 J3%=I% 2300 J4%=INT(I%/286%) 2310 IF J4%=0% THEN 2380 2320 IF J4%=1% THEN 2360 2330 V$='%' 2340 J3%=I%-572% 2350 GO TO 2380 2360 V$='$' 2370 J3%=I%-286% 2380 I3%=INT(J3%/11%) 2390 I2%=J3%-I3%*11% 2400 IF I2%=0% THEN 2420 2410 V$=CHR$(I2%+47%)&V$ 2420 V$=CHR$(I3%+65%)&V$ 2430 I1%=S1%(I%) 2440 PRINT #2,V$; 2450 GOSUB 2900 \ REM **** PRINT THE LINE NUMBERS USED 2460 NEXT K1% 2470 NEXT K% 2480 REM ***************************************** 2490 REM **** PRINT THE CONTOL TRANSFER TABLE **** 2500 REM ***************************************** 2510 K1%=1% 2520 S6%=S5%-1% 2530 PRINT #2,P$ 2540 IF SEG$(F$,1%,3%)='TT:' THEN PRINT #2 2550 PRINT #2,T$ 2560 PRINT #2 2570 PRINT #2,'CONTROL TRANSFER SECTION (GOSUB, GO TO & THEN):'; 2580 PRINT #2,' GOSUB PRECEEDED BY -' 2590 PRINT #2 2600 K2%=32767% 2610 FOR K%=0% TO S6% 2620 IF S4%(K%,0%)<=K1% THEN 2660 2630 IF S4%(K%,0%)>K2% THEN 2660 2640 K2%=S4%(K%,0%) 2650 I1%=S4%(K%,1%) 2660 NEXT K% 2670 IF K2%=32767% THEN 3570 \ REM **** CLOSEOUT ROUTINE 2680 K1%=K2% 2690 PRINT #2,K1%; 2700 GOSUB 2900 \ REM **** PRINT THE LINE NUMBERS USED 2710 GO TO 2600 2720 REM ********************* 2730 REM **** SUBROUTINES **** 2740 REM ************************************ 2750 REM **** S/R OBTAIN THE LINE NUMBER **** 2760 REM ************************************ 2770 I2%=0% 2780 IF I1%>LEN(B$) THEN 2860 2790 I3%=ASC(SEG$(B$,I1%,I1%)) 2800 IF I3%=32% THEN 2840 \ REM **** 'SPACE' 2810 IF I3%<48% THEN 2860 \ REM **** '0' 2820 IF I3%>57% THEN 2860 \ REM **** '9' 2830 I2%=I2%*10%+I3%-48% 2840 GOSUB 3040 \ REM **** REMOVE SINGLE CHARACTER 2850 GO TO 2780 2860 RETURN 2870 REM ***************************************** 2880 REM **** S/R PRINT THE LINE NUMBERS USED **** 2890 REM ***************************************** 2900 I2%=5% 2910 I2%=2%+I2%+LEN(STR$(S2%(I1%,0%))) 2920 IF I2%<60% THEN 2950 2930 PRINT #2 2940 GO TO 2900 2950 PRINT #2,TAB(10%);S2%(I1%,0%); 2960 I1%=S2%(I1%,1%) 2970 IF I1%<>0% THEN 2910 2980 PRINT #2 2990 PRINT #2 3000 RETURN 3010 REM ************************************* 3020 REM **** S/R REMOVE SINGLE CHARACTER **** 3030 REM ************************************* 3040 B$=SEG$(B$,1%,I1%-1%)&SEG$(B$,I1%+1%,255%) 3050 RETURN 3060 REM ********************************************** 3070 REM **** S/R REMOVE KEY WORD OR QUOTED STRING **** 3080 REM ********************************************** 3090 B$=SEG$(B$,1%,I1%-1%)&SEG$(B$,I4%,255%) 3100 RETURN 3110 REM ******************* 3120 REM **** KEY WORDS **** 3130 REM ******************** 3140 REM **** STATEMENTS **** 3150 REM ******************** 3160 DATA 'GO TO','THEN','GOSUB' 3170 DATA 'AS FILE','CALL','CHAIN','CLOSE #','CLOSE','COMMON' 3180 DATA 'DATA','DEF','DIM #','DIM','DOUBLE BUF','FILESIZE' 3190 DATA 'FOR INPUT','FOR OUTPUT','FOR','IF END #','END',LINPUT #' 3200 DATA 'LINPUT','INPUT #','INPUT','KILL','LET','LINE' 3210 DATA 'MODE','NAME','NEXT','ON','OPEN','OVERLAY' 3220 DATA 'PRINT #','PRINT','RANDOMIZE','READ','RECORDSIZE','REM' 3230 DATA 'RESET #','RESET','RESTORE #','RESTORE','RETURN','STEP' 3240 DATA 'STOP','TO','USING' 3250 REM ****************************** 3260 REM **** ARITHMETIC FUNCTIONS **** 3270 REM ****************************** 3280 DATA 'ABS','ATN','COS','EXP','INT','LOG10' 3290 DATA 'LOG','PI','RND','SGN','SIN','SQR' 3300 DATA 'TAB' 3310 REM ************************** 3320 REM **** STRING FUNCTIONS **** 3330 REM ************************** 3340 DATA 'ASC','BIN','CHR$','CLK$','DAT$','LEN' 3350 DATA 'OCT','POS','SEG$','STR$','TRM$','VAL' 3360 REM ******************************** 3370 REM **** USER DEFINED FUNCTIONS **** 3380 REM ******************************** 3390 DATA 'FNA','FNB','FNC','FND','FNE','FNF' 3400 DATA 'FNG','FNH','FNI','FNJ','FNK','FNL' 3410 DATA 'FNM','FNN','FNO','FNP','FNQ','FNR' 3420 DATA 'FNS','FNT','FNU','FNV','FNW','FNX' 3430 DATA 'FNY','FNZ' 3440 REM ********************************* 3450 REM **** RT-11 UTILITY FUNCTIONS **** 3460 REM ********************************* 3470 DATA 'RCTRLO','SYS','TTYSET' 3480 REM *************************** 3490 DATA 'ABORT','RCTRLC','CTRLC' 3500 REM **** DATBAS CALL NAMES **** 3510 REM *************************** 3520 DATA 'GETB','GET','IDEN','NULL' 3530 DATA 'PUTB','PUT','SBIT','TBIT' 3540 REM ************************** 3550 REM **** CLOSEOUT ROUTINE **** 3560 REM ************************** 3570 PRINT #2,P$ 3580 CLOSE #2,#3,#4,#5 3590 KILL 'TEMP3' 3600 KILL 'TEMP4' 3610 KILL 'TEMP5' 3620 PRINT CLK$ 3630 END