830 REM the raw references are stored in array istr$
840 REM compressed, upper case refs are stored in cstr$
850 REM overlapping words are stored in ostr$
860 WHILE NOT EOF(1)
870 NB=1
880 NREF=NREF+1
890 ISTR$(1)=""
900 OSTR$=""
910 LINE INPUT #1, ISTR$(NB)
920 DUM$=ISTR$(NB):GOSUB 2000:CSTR$(NB)=DUM$
930 IF CSTR$(NB)<>"" THEN NB=NB+1:GOTO 910
940 FOR I1=1 TO NB
950 IF LEN(ISTR$(I1))=255 THEN OSTR$=OSTR$+RIGHT$(ISTR$(I1),12)+LEFT$(ISTR$(I1+1),12)
960 NEXT I1
970 DUM$=OSTR$:GOSUB 2000: OSTR$=DUM$
980 GOSUB 3000
990 PRINT CLS$:PRINT:PRINT :PRINT
1000 PRINT ,"REFS CHECKED = ";NREF,"NUMBER OF MATCHES = ";NFOU
1010 IF MC<NSET THEN 1080
1020 NFOU=NFOU+1
1030 PRINT CLS$:PRINT:PRINT :PRINT
1040 PRINT ,"REFS CHECKED = ";NREF,"NUMBER OF MATCHES = ";NFOU
1050 FOR I1=1 TO NB
1060 IF LEN(ISTR$(I1))=255 THEN PRINT #2,ISTR$(I1); :ELSE PRINT #2, ISTR$(I1)
1070 NEXT I1
1080 WEND
1090 CLOSE #1
1100 FOR I= 1 TO 10:PRINT BELL$:NEXT I : PRINT CLS$
1110 IFILE=IFILE+1
1120 PRINT:PRINT:PRINT "Place the disk with input file #";IFILE;" in a disk drive"
1130 PRINT" DO NOT remove the disk containing the output file!!!!!"
1140 PRINT: PRINT
1150 PRINT:INPUT "What is the new INPUT file name (Hit 'RETURN' to end)";F1$
1160 DUM$=F1$: GOSUB 2000: F1$=DUM$
1170 IF F1$ = "" THEN CLOSE:PRINT BELL$,BELL$:PRINT "FINISHED":PRINT:PRINT NREF;"References checked",NFOU;"put on output file: ";F2$:PRINT:PRINT:SYSTEM:END
1180 OPEN "I",#1,F1$
1190 GOTO 860
2000 REM this subroutine converts strings to upper case and eliminates
2010 REM control characters, punct. and spaces and resets high order bits
2020 REM input the string to be cleaned as DUM$
2030 DUM$=USR1(DUM$)+""
2040 RETURN
3000 REM this subroutine checks for matches with keys. MC keeps count
3010 REM of the sets with at least one match
3020 MC=0
3030 FOR I1=1 TO NSET
3040 FOR I2=1 TO NKEY(I1)
3050 FOR I4=1 TO 5
3060 IF KEY$(I1,I4,I2)="" THEN GOTO 3120
3070 FOR I3=1 TO NB
3080 IF INSTR(CSTR$(I3),KEY$(I1,I4,I2))<>0 THEN GOTO 3110
3090 NEXT I3
3100 IF INSTR(OSTR$,KEY$(I1,I4,I2))=0 THEN GOTO 3130
3110 NEXT I4
3120 MC=MC+1: GOTO 3150
3130 NEXT I2
3140 RETURN
3150 NEXT I1
3160 RETURN
4000 REM ERROR TRAPPING ROUTINE
4010 IF ERR=53 AND ERL=1180 THEN PRINT "INPUT FILE NOT FOUND - TRY AGAIN":PRINT:RESUME 1120
4020 IF ERR=62 THEN CLOSE #1:PRINT "IMPROPER FILE END - LAST REFERENCE MAY BE IGNORED":RESUME 1110
4030 REM RE-ENABLE ERROR TRAPPING FOR OTHER FATAL ERRORS
4040 ON ERROR GOTO 0
5000 REM THIS IS THE DATA FOR THE ASSEMBLY LANGUAGE SUBROUTINE
5010 DATA &HEB,&H46,&H0E,&H00,&HE5,&H23,&H5E,&H23,&H56,&HEB,&H11
5020 DATA &HDF,&HB7,&H78,&HA7,&HCA,&HD0,&HB7,&H7E,&HE6,&H7F,&HFE
5030 DATA &H5B,&HDA,&HB7,&HB7,&HD6,&H20,&HC3,&HAD,&HB7,&HFE,&H2D
5040 DATA &HDA,&HCB,&HB7,&HFE,&H41,&HD2,&HC6,&HB7,&HFE,&H3B,&HD2
5050 DATA &HCB,&HB7,&HEB,&H77,&H23,&H0C,&HEB,&H05,&H23,&HC3,&HA5
5060 DATA &HB7,&HE1,&HE5,&H71,&H11,&HDF,&HB7,&H23,&H73,&H23,&H72
5070 DATA &H3E,&H03,&HE1,&HEB,&HC9
HEB,&H05,&H23,&HC3,&HA5
5060 DATA &HB7,&HE1,&HE5,&H71,&H11,&HDF,&HB7,&H23,&H73,&H23,&H72