100 REM ************************************************ 110 REM **** CROSS1.BAS 28-FEB-78/27-FEB-81 **** 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 **** CHAIN:[CROSS0,CROSS1,CROSS2].BAS **** 180 REM ****************************************** 190 REM **** INITIALIZATION **** 200 REM ************************ 210 COMMON A$,F$,P$,T$ 220 COMMON D$(112%),I8% 230 PRINT CLK$,'CROSS1: 81B27A' 240 DIM #3,S1%(857%) 250 DIM #4,S2%(2200%,1%) 260 DIM #5,S4%(500%,1%) 270 OPEN 'TEMP3' AS FILE #3 280 OPEN 'TEMP4' AS FILE #4 290 OPEN 'TEMP5' AS FILE #5 300 S3%=1% 310 S5%=0% 320 DIM D1$(1%) 330 D1$(0%)="'" 340 D1$(1%)='"' 350 REM ************************ 360 REM **** OPEN THE FILES **** 370 REM ************************ 380 OPEN A$ FOR INPUT AS FILE #1 DOUBLE BUF 390 OPEN F$ FOR OUTPUT AS FILE #2 DOUBLE BUF 400 IF SEG$(F$,1%,3%)='TT:' THEN PRINT #2 410 PRINT #2,T$ 420 PRINT #2 430 REM ******************************** 440 REM **** START OF MAIN SEQUENCE **** 450 REM ******************************** 460 IF END #1 THEN 2080 \ REM **** CHAIN ROUTINE 470 LINPUT #1,B$ 480 PRINT #2,B$ 490 I1%=1% 500 GOSUB 1850 \ REM **** OBTAIN THE LINE NUMBER 510 I9%=I2% 520 REM ********************************* 530 REM **** IGNORE 'REM' STATEMENTS **** 540 REM ********************************* 550 IF SEG$(B$,I1%,I1%+2%)='REM' THEN 460 \ REM **** GET ANOTHER LINE 560 REM **************************************** 570 REM **** FIND AND REMOVE QUOTED STRINGS **** 580 REM **************************************** 590 FOR I%=0% TO 1% 600 I1%=POS(B$,D1$(I%),1%) 610 IF I1%=0% THEN 730 620 I4%=POS(B$,D1$(I%),I1%+1%) 630 IF I4%=0% THEN 730 640 I3%=POS(B$,D1$(1%-I%),1%) 650 IF I3%>I1% THEN 700 660 I5%=POS(B$,D1$(1%-I%),I3%+1%) 670 IF I5%=0% THEN 700 680 I1%=I3% 690 I4%=I5% 700 I4%=I4%+1% 710 GOSUB 2030 \ REM **** REMOVE QUOTED STRING 720 GO TO 600 730 NEXT I% 740 REM ************************************** 750 REM **** TRUNCATE ' \ REM' STATEMENTS **** 760 REM ************************************** 770 I1%=POS(B$,'\ REM',1%) 780 IF I1%=0% THEN 830 790 B$=SEG$(B$,1%,I1%-1%) 800 REM *********************************** 810 REM **** FIND AND REMOVE KEY WORDS **** 820 REM *********************************** 830 FOR I%=0% TO I8% 840 I1%=POS(B$,D$(I%),1%) 850 IF I1%=0% THEN 1070 860 I4%=I1%+LEN(D$(I%)) 870 GOSUB 2030 \ REM **** REMOVE KEY WORD 880 IF I%>2% THEN 840 890 GOSUB 1850 \ REM **** OBTAIN THE LINE NUMBER 900 IF I%=2% THEN I9%=-I9% \ REM **** KEY WORD 'GOSUB' 910 FOR J%=0% TO S5% 920 IF S4%(J%,0%)<>I2% THEN 990 930 K%=S4%(J%,1%) 940 IF S2%(K%,1%)=0% THEN 970 950 K%=S2%(K%,1%) 960 GO TO 940 970 S2%(K%,1%)=S3% 980 GO TO 1030 990 NEXT J% 1000 S4%(S5%,0%)=I2% 1010 S4%(S5%,1%)=S3% 1020 S5%=S5%+1% 1030 S2%(S3%,0%)=I9% 1040 S3%=S3%+1% 1050 I9%=ABS(I9%) 1060 IF X%=1% THEN 890 1070 NEXT I% 1080 REM ******************************* 1090 REM **** REPLACE 'AS' WITH '?' **** 1100 REM ******************************* 1110 I1%=POS(B$,'AS',1%) 1120 IF I1%=0% THEN 1180 1130 B$=SEG$(B$,1%,I1%-1%)&'?'&SEG$(B$,I1%+2%,255%) 1140 GO TO 1110 1150 REM ******************************* 1160 REM **** REPLACE 'IF' WITH '@' **** 1170 REM ******************************* 1180 I1%=POS(B$,'IF',1%) 1190 IF I1%=0% THEN 1250 1200 B$=SEG$(B$,1%,I1%-1%)&'@'&SEG$(B$,I1%+2%,255%) 1210 GO TO 1180 1220 REM ************************************** 1230 REM **** FIND AND SAVE VARIABLE NAMES **** 1240 REM ************************************** 1250 I3%=0% 1260 I2%=LEN(B$) 1270 IF I2%=0% THEN 460 \ REM **** GET ANOTHER LINE 1280 I1%=1% 1290 J5%=I3% 1300 J1%=0% 1310 J2%=0% 1320 J3%=0% 1330 I3%=ASC(SEG$(B$,1%,1%)) 1340 GOSUB 1980 \ REM **** REMOVE SINGLE CHARACTER 1350 IF I3%<65% THEN 1260 \ REM **** 'A' 1360 IF I3%>90% THEN 1260 \ REM **** 'Z' 1370 J1%=I3% 1380 IF I2%=1% THEN 1550 1390 I4%=ASC(SEG$(B$,1%,1%)) 1400 IF I4%=36% THEN 1510 \ REM **** '$' 1410 IF I4%=37% THEN 1530 \ REM **** '%' 1420 IF I4%>57% THEN 1550 \ REM **** '9' 1430 IF I4%<48% THEN 1550 \ REM **** '0' 1440 J2%=I4% 1450 GOSUB 1980 \ REM **** REMOVE SINGLE CHARACTER 1460 IF I2%=2% THEN 1550 1470 I4%=ASC(SEG$(B$,1%,1%)) 1480 IF I4%<36% THEN 1550 \ REM **** '$' 1490 IF I4%>37% THEN 1550 \ REM **** '%' 1500 IF I4%=37% THEN 1530 1510 J3%=1% 1520 GO TO 1540 1530 J3%=2% 1540 GOSUB 1980 \ REM **** REMOVE SINGLE CHARACTER 1550 IF LEN(B$)<1% THEN 1640 1560 IF J5%=64% THEN 1640 \ REM **** '@' (IF ) 1570 Z$=SEG$(B$,1%,1%) 1580 IF Z$='=' THEN 1630 1590 IF Z$<>'(' THEN 1640 1600 I4%=POS(B$,')',1%) 1610 IF I4%=0% THEN 1640 1620 IF SEG$(B$,I4%+1%,I4%+1%)<>'=' THEN 1640 1630 I9%=-I9% \ REM **** VARIABLE PRECEEDED BY '=' 1640 IF J2%=0% THEN J2%=47% 1650 J9%=J3%*286%+(J1%-65%)*11%+J2%-47% 1660 IF S1%(J9%)<>0% THEN 1720 1670 S1%(J9%)=S3% 1680 S2%(S3%,0%)=I9% 1690 I9%=ABS(I9%) 1700 S3%=S3%+1% 1710 GO TO 1260 \ REM **** LOOK FOR ANOTHER VARIABLE 1720 I1%=S1%(J9%) 1730 IF S2%(I1%,1%)<>0% THEN 1760 1740 S2%(I1%,1%)=S3% 1750 GO TO 1680 1760 I1%=S2%(I1%,1%) 1770 GO TO 1730 1780 REM ****************************** 1790 REM **** END OF MAIN SEQUENCE **** 1800 REM ****************************** 1810 REM **** SUBROUTINES **** 1820 REM ************************************ 1830 REM **** S/R OBTAIN THE LINE NUMBER **** 1840 REM ************************************ 1850 I2%=0% 1855 X%=0% 1860 IF I1%>LEN(B$) THEN 1940 1870 I3%=ASC(SEG$(B$,I1%,I1%)) 1875 IF I3%=44% THEN GOSUB 1980 \ X%=1% \ GO TO 1940 1880 IF I3%=32% THEN 1920 \ REM **** 'SPACE' 1890 IF I3%<48% THEN 1940 \ REM **** '0' 1900 IF I3%>57% THEN 1940 \ REM **** '9' 1910 I2%=I2%*10%+I3%-48% 1920 GOSUB 1980 \ REM **** REMOVE SINGLE CHARACTER 1930 GO TO 1860 1940 RETURN 1950 REM ************************************* 1960 REM **** S/R REMOVE SINGLE CHARACTER **** 1970 REM ************************************* 1980 B$=SEG$(B$,1%,I1%-1%)&SEG$(B$,I1%+1%,255%) 1990 RETURN 2000 REM ********************************************** 2010 REM **** S/R REMOVE KEY WORD OR QUOTED STRING **** 2020 REM ********************************************** 2030 B$=SEG$(B$,1%,I1%-1%)&SEG$(B$,I4%,255%) 2040 RETURN 2050 REM *********************** 2060 REM **** CHAIN ROUTINE **** 2070 REM *********************** 2080 CLOSE #1,#2,#3,#4,#5 2085 PRINT CLK$,'CROSS1: CHAIN' 2090 CHAIN 'CROSS2' 2100 END