40 DIM DISKRCD(22),RCDMRKD(22) ' To store addresses and marked of found rcds
45 FOUNDEND = 2 ' Set up for same QSO search
50 KEY OFF
60 OPEN "CNFG.DAT" AS 2 LEN = 58
70 FIELD 2,2 AS DR1$,2 AS SPEEDLUK$,8 AS AN1$,8 AS AN2$,8 AS AN3$,5 AS RN1$,5 AS RN2$,5 AS RN3$,5 AS TR1$,5 AS TR2$,5 AS TR3$
80 GET 2,1
90 COLOR 7,0 : LOCATE ,,,6,13 ' HAVE CURSOR COVER HALF OF THE CHARACTER
100 DEF SEG = 64 : POKE 23,64 : ' SET CAPS LOCK ON
110 ' LABELS USED L = LINE NUMBER IN USE
120 ' F = FIELD NUMBER IN USE
130 ' R = POSITION IN FIELD
140 ' F1$ - F12$ = CURRENT FIELD NUMBERS
150 ' HDR$ = TITLE LINE
160 ' L$ = MASK LINE FOR VERTICAL LINES
170 ' *** SET DRIVE LETTERS
180 ONN= -1:OFFF= 0 ' SET LABELS
190 CLS:LOCATE 8,1:PRINT "WHICH DRIVE DO YOU WANT TO USE ?"
200 O$=INKEY$ : IF O$="" GOTO 200 ' WAIT FOR RESPONSE
210 IF O$ = "A" OR O$="B" THEN DR1$=O$+":" :GOTO 240 'DISKETTE A OR B
220 IF O$ = "C" OR O$="D" THEN DR1$=O$+":" :GOTO 240 'DRIVE C OR D
230 GOTO 190 ' NOT VALID DRIVE, RETRY
240 DIM FL(12),FP(12),CL$(30),F1$(30),F2$(30),F3$(30),F4$(30),F5$(30),F6$(30),F7$(30),F8$(30),F9$(30),F10$(30),F11$(30),F12$(30),FLG$(30),FLG1$(30),FLG2$(30),TP$(30)
250 ' **** SET FIELD LENGTHS
260 DATA 5,8,5,1,1,10,6,1,4,1,4,23
270 FOR I=1 TO 12:READ FL(I):DLEN=DLEN+FL(I):NEXT:'GET FIELD LENGTHS INTO ARRAY
280 '*** FIELD POSITIONS ON SCREEN
290 DATA 1,4,10,16,18,20,31,38,40,45,47,52 :FP=1:FP(1)=1
300 FOR I = 2 TO 12 :FP=FP+FL(I-1)+1:FP(I)=FP:NEXT:' GET FIELD POSTIONS
310 GOSUB 320 :GOTO 360 ' SO THIS ROUTINE CAN BE USED ELSEWHERE
320 F7$=STRING$(FL(7),32) ' PULL THESE SEPARATE TO NOT CLEAR
3190 IF LEN(S$)=0 THEN LSET DATSRCH$=DATE$ ELSE DATSRCH$=S$ ' SET SEARCH FIELD
3200 FOR K = NUMREC-1 TO 1 STEP -1 ' SET START OF SEARCH
3210 GET 1,K ' MOVE BACK THRU FILE
3220 IF DF2$=" " GOTO 3270 ' SKIP OVER COMMENT LINES
3230 IF RIGHT$(DF2$,2)<>RIGHT$(DATSRCH$,2) GOTO 3270 'PASSED THE YEAR
3240 IF MID$(DF2$,4,2)<>MID$(DATSRCH$,4,2) GOTO 3270 'PASSED THE MONTH
3250 IF LEFT$(DF2$,2)<>LEFT$(DATSRCH$,2) GOTO 3270 'PASSED THE DAY
3260 GOTO 3300 ' FOUND THE FIRST EQUAL MATCH
3270 NEXT
3280 IF K=0 THEN LOCATE 22,37: PRINT"NONE FOUND ";
3290 COLOR 7,0: LOCATE 1,1,1 :F=1:R=1:RETURN
3300 FOR K = K-1 TO 1 STEP -1 ' CONTINUE LOOKING TO GET OUT OF =
3310 GET 1,K ' MOVE BACK THRU FILE
3320 IF DF2$=" " GOTO 3360 ' SKIP OVER COMMENT LINES
3330 IF RIGHT$(DF2$,2)<>RIGHT$(DATSRCH$,2) GOTO 3370 'PASSED THE YEAR
3340 IF MID$(DF2$,4,2)<>MID$(DATSRCH$,4,2) GOTO 3370 'PASSED THE MONTH
3350 IF LEFT$(DF2$,2)<>LEFT$(DATSRCH$,2) GOTO 3370 'PASSED THE DAY
3360 NEXT
3370 K=K+1 : L=2 ' GO BACK TO LAST RECORD AND SET PRINT LINE
3380 GET 1,K : IF DF2$=" " GOTO 3370 'SKIP COMMENTS AHEAD OF DATE
3390 CURDSP=K ' SET LISTING NUMBER FOR TOP OF SCREEN
3400 FOR K = K TO K+18 ' GO FORWARD AND PRINT RECORDS
3410 IF K>NUMREC GOTO 3450 ' BEYOND END OF FILE
3420 GET 1,K ' GET NEXT RECORD
3430 GOSUB 3490 ' PRINT THE DISK RECORD
3440 L=L+1 : IF L= 21 THEN GOTO 3290 ELSE NEXT ' INCREMENT TO NEXT PRINT LINE
3450 IF L = 2 GOTO 3280 ' NO LINES PRINTED
3460 FOR L =L TO 20:LOCATE L,1:PRINT L$+STRING$(FL(12),32);:NEXT ' CLEAR REST
3470 GOTO 3290 ' OF SCREEN AND EXIT
3480 ' ***
3490 ' * ROUTINE TO DISPLAY DISK RECORD
3500 ' ***
3510 LOCATE L,1:PRINT DF1$;
3520 LOCATE L,FP(2):PRINT DF2$;
3530 LOCATE L,FP(3):PRINT DF3$
3540 LOCATE L,FP(4):PRINT DF4$;
3550 LOCATE L,FP(5):PRINT DF5$
3560 IF DFLG$="1" THEN COLOR 0,7
3570 IF DFLG$="2" THEN COLOR 15,0
3580 LOCATE L,FP(6):PRINT DF6$;
3590 COLOR 7,0
3600 LOCATE L,FP(7):PRINT DF7$;
3610 LOCATE L,FP(8):PRINT DF8$;
3620 LOCATE L,FP(9):PRINT DF9$;
3630 LOCATE L,FP(10):PRINT DF10$;
3640 LOCATE L,FP(11):PRINT DF11$;
3650 LOCATE L,FP(12):PRINT DF12$;
3660 COLOR 7,0:RETURN
3670 ' *** ROUTINE TO GET HEADER RECORD AND DISPLAY
3680 OPEN DR1$+"HAMHDR.DAT" AS 3 LEN=24
3690 FIELD 3,4 AS A$,4 AS B$,8 AS C$,8 AS D$ : GET 3,1 ' SET HEADER RECORD FLD
3700 NUMREC=CVS(A$):NUMQSO=CVS(B$):STRDATE$=C$:ENDDATE$=D$ ' GET HEADER FIELDS
3710 LOCATE 23,1:PRINT "Start date - ";STRDATE$;" : End date - ";ENDDATE$;" : Number of records -";NUMREC;
3720 OPEN DR1$+"HAMLOG.DAT" AS 1 LEN=DLEN+3
3730 FIELD 1,FL(1) AS DF1$,FL(2) AS DF2$,FL(3) AS DF3$,FL(4) AS DF4$,FL(5) AS DF5$,FL(6) AS DF6$,FL(7) AS DF7$,FL(8) AS DF8$,FL(9) AS DF9$,FL(10) AS DF10$,FL(11)AS DF11$,FL(12) AS DF12$,1 AS DFLG$,1 AS DFLG1$,1 AS DFLG2$
3740 RETURN
3750 ' ***
3760 ' * PRINT / COPY SECTIONS OF LOG
3770 ' ***
3780 XX=POS(0) : YY=CSRLIN ' CURSOR POSITION
3781 LOCATE 22,5: PRINT "Do you want to copy (C) or print (P)? Enter C or P";:INPUT ANS$
3782 IF ANS$ = "C" OR ANS$ = "c" THEN COPY = -1 ELSE GOTO 3790
3783 LOCATE 22,5 :PRINT STRING$(60,32); ' Clear line
3784 LOCATE 22,5 :PRINT "WHICH DRIVE DO YOU WANT TO USE ?"
3785 O$=INKEY$ : IF O$="" GOTO 3785 ' WAIT FOR RESPONSE
3786 IF O$ = "A" OR O$="B" THEN DR5$=O$+":" :GOTO 3790 'DISKETTE A OR B
3787 IF O$ = "C" OR O$="D" THEN DR5$=O$+":" :GOTO 3790 'DRIVE C OR D
3788 GOTO 190 ' NOT VALID DRIVE, RETRY
3790 OKSW=0 ' TURN OFF PREVIOUS USE OF SWITCH
3795 LOCATE 22,5 :PRINT STRING$(60,32); ' Clear line
3810 LOCATE 22,5: PRINT "ENTER ENDING QSO NUMBER ";
3820 IF NOT COPY THEN LPRINT HDR$ : GOTO 3830 ' PRINT HEADING
3824 OPEN DR5$+"HAMLOG.DAT" AS 2 LEN=DLEN+3 ' or Open file
3825 FIELD 2,FL(1) AS D2F1$,FL(2) AS D2F2$,FL(3) AS D2F3$,FL(4) AS D2F4$,FL(5) AS D2F5$,FL(6) AS D2F6$,FL(7) AS DF27$,FL(8) AS D2F8$,FL(9) AS D2F9$,FL(10) AS D2F10$,FL(11)AS D2F11$,FL(12) AS D2F12$,1 AS D2FLG$,1 AS D2FLG1$,1 AS D2FLG2$
3827 CPYREC = 1 ' Starting record number
3830 LOCATE 22,30: INPUT;ENDN$
3840 S$=STRING$(5,32):T$=STRING$(5,32)
3850 RSET S$=STRT$ : RSET T$=ENDN$ ' SHIFT TO RIGHT SIDE
3860 K= NUMREC ' SET A STARTING POINT
3870 GET 1,K ' GET END RECORD NUMBER
3880 IF DF1$<" " THEN K=K-1:GOTO 3870 ' OFF THE END OF THE FILE
3890 IF T$<=DF1$ THEN GOTO 3910 ' INSIDE DISK BOUNDARY
3900 LOCATE 22,5: PRINT "HIGH VALUE OUT OF THIS DISKETTE";:GOTO 4010
3910 GET 1,1 :IF S$<DF1$ THEN LOCATE 22,5 : PRINT "QSO NUMBER REQUESTED ON ANOTHER DISK";:RETURN
3920 K=VAL(STRT$) ' Get keyed in value
3925 IF K = 1 THEN GOTO 3930 ' Already know start
3928 K=VAL(STRT$)-VAL(DF1$) ' GO TO APPROXIMATE START