12810 I#=CVD(X$(Q)) / CONVERT DOUBLE PRECISION DOLLAR AND CENTS AMOUNTS
12840 LPRINT TAB(T2) "";
12850 LPRINT USING "**$########,.##";I#; / PRINT DOLLAR AND CENTS AMOUNTS
12860 NEXT Q / END OF LOOP PRINTING EACH FIELD
12870 RETURN
12880 PRINT " HOW MANY COLUMNS ARE THERE ON YOUR PRINTER "
12890 GOSUB 14100 / INPUT INTEGER SUBROUTINE
12892 COLM = DT# / NUMBER OF COLUMS EQUALS THE VALUE RETURNED FROM INPUT SUBROUTINE
12895 RETURN
12900 REM ******* TAB CONTROL *******
12901 C = 15 / FIRST FIELD STARTS AT COLUMN 15 TO LEAVE ROOM FOR THE RECORD NUMBER
12902 FOR T = 1 TO NREC(A) / START LOOP COMPUTING COLUMN TO PRINT FIELDS IN
12903 LEND(T) = 0 / LINE END = NO
12905 CL(T)= C / COLUMN SET TO END OF LAST FIELD
12906 GOSUB 12910
12907 IF C > COLM THEN GOSUB 12970 /IF COLUMN IS GREATER THEN PRINT GOSUB 12970
12908 NEXT T / FINISH LOOP COMPUTING TABS
12909 RETURN
12910 ON FTY(A,T) GOTO 12920,12930,12940,12950,12950 / ON FIELD TYPE GOTO
12920 C = C + FL(A,T) + 1 / FOR STRINGS ALLOW THE STRING LENGTH PLUS 1
12925 RETURN
12930 C = C + 7 / FOR INTEGERS ALLOW 7 SPACES
12933 IF KEYLIST(A,T) > 0 THEN C = C + 30 / FOR KEYLISTS ALLOW 30 SPACES
12935 RETURN
12940 C = C + 9 / FOR SINGLE PRECISION NUMBERS ALLOW 9 SPACES
12945 RETURN
12950 C = C + 16 / FOR DOUBLE PRECISION AND DOLLAR AMOUNTS ALLOW 16 SPACES
12952 RETURN
12970 CL(T)= 1 / START NEXT LINE AT COLUMN 1
12972 C =1
12974 LEND(T) = 5 / LINE END FLAG EQUALS YES
12975 GOSUB 12910
12980 RETURN
13000 REM CLEAR SCREEN
13010 CLS
13020 RETURN
13050 REM LOCATE - TAB SET IN PROGRAM
13060 GOTO 13110 / SKIP SETTING TAB TO ONE
13100 REM LOCATE - TAB EQUALS ONE
13105 TB = 1 / COLUMN EQUALS ONE
13110 LOCATE LI,TB
13120 RETURN
13600 REM CHECK FOR ASC0 / CHECK INPUTS FOR EXTENDED ASCII CODE
13610 S4$ = INKEY$ / S4$ IS THE SECOND ASCII CODE
13620 C2 = ASC(S4$) / C2 IS THE NUMBER OF THE ASCII CODE
13630 IF C2 = 83 THEN C = 1 / SET DELETE EQUAL TO CONTROL A
13640 IF C2 = 82 THEN C = 6 / SET INSERT EQUAL TO CONTROL F
13650 IF C2 = 75 THEN C = 19 / SET CURSER LEFT EQUAL TO CONTROL S
13660 IF C2 = 77 THEN C = 4 / SET CURSER RIGHT EQUAL TO CONTROL D
13670 RETURN
14000 REM INTEGER LESS THEN 100 CHECK
14010 MAX = 2 / MAXIMUM OF TWO CHARACTERS
14020 ACT$ = " 1234567890=<>^" / ACCEPTABLE CHARACTERS FOR NEW ENTRY
14023 IF NE = 0 THEN ACT$ = " 1234567890" / ACCEPTABLE CHARACTERS
14025 PRINT ">__<";
14030 GOTO 14500
14100 REM INTEGER
14110 MAX = 8 / MAXIMUM OF EIGHT CHARACTERS
14120 ACT$ = " 1234567890-+,=<>^" / ACCEPTABLE CHARACTERS FOR NEW ENTRY
14123 IF NE = 0 THEN ACT$ = " 1234567890-+," / ACCEPTABLE CHARACTERS
14125 PRINT ">________<"; / PROMPT
14130 GOTO 14500
14200 REM SINGLE PRECISION
14210 MAX = 10 / MAXIMUM OF TEN CHARACTERS
14220 ACT$ = " 1234567890-+,.%$=<>^" / ACCEPTABLE CHARACTERS FOR NEW ENTRY
14223 IF NE = 0 THEN ACT$ = " 1234567890+-,.%$" / ACCEPTABLE CHARACTERS
14225 PRINT ">__________<";
14230 GOTO 14500
14300 REM DOUBLE PRECISION
14310 MAX = 20 / MAXIMUM OF 20 CHARACTERS
14320 ACT$ = " 1234567890-+,.%$=<>^" / ACCEPTABLE CHARACTERS FOR NEW ENTRY
14323 IF NE = 0 THEN ACT$ = " 1234567890+-,.%$" / ACCEPTABLE CHARACTERS
14325 PRINT ">____________________<";
14330 GOTO 14500
14500 REM NUMBER CHECK
14505 A$ = "" / INITIALIZE A$ TO THE NULL STRING
14510 K$(20) = " "
14515 KTMAX = 0 / INITIALIXE THE COUNT MAXIMUM TO 0
14520 FOR T9 = 1 TO MAX
14525 K$(T9) = " " / INITIALIZE K$ TO BLANK
14530 NEXT T9
14535 DIG$ = "1234567890." / STORED CHARACTERS
14540 DOTFLG = 0 / DECIMAL POINT FLAG SET TO 0
14541 T2 = MAX + 1
14542 FOR T6 = 1 TO T2
14544 PRINT CHR$(CH); / BACKSPACE TO FIRST SPACE
14546 NEXT T6
14550 IF INKEY$ = "" GOTO 14560 ELSE GOTO 14550 / CLEAR THE KEYBOARD BUFFER
14560 KT = 0 / INITIALIZE COUNT TO 0
14565 REM
14570 KT = KT + 1 / INCREMENT COUNT
14575 REM
14580 W$ = INKEY$ / GET CHARACTER FROM KEYBOARD
14585 IF W$ = "" GOTO 14580 /IF THERE IS NO CHARACTER LOOP UNTILL ON IS ENTERED
14590 C = ASC(W$) / C EQUALS THE ASCII VALUE OF THE ENTERED CHARACTER
14593 IF C = 0 THEN GOSUB 13600 / CHECK EXTENDED ASCII CODES
14595 IF C = 13 GOTO 14660 / RETURN
14600 IF C = 17 OR C = 8 GOTO 14860 / BACKSPACE
14605 IF C = 19 GOTO 14690 / CURSER LEFT
14610 IF C = 4 GOTO 14710 / CURSER RIGHT
14615 IF C = 6 GOTO 14730 / INSERT
14620 IF C = 1 GOTO 14790 / DELETE
14625 IF KT > MAX GOTO 14575 / DOES NOT ACCEPT CHARACTERS BEYOND THE MAX LIMIT
14630 IF INSTR(ACT$,W$) = 0 GOTO 14890 / IF W$ IS NOT ONE OF THE ACCEPTABLE CHARACTERS THEN GOTO UNACCEPTABLE CHARACTER SUBROUTINE
14635 K$(KT) = W$ / SAVE THE CHARACTER ENTERED AS K$(COUNT)
14645 PRINT K$(KT); / PRINT THE CHARACTER ON THE SCREEN
14650 IF KT > KTMAX THEN KTMAX = KT / IF COUNT IS GREATER THEN COUNT MAX THEN COUNT MAX EQUALS THE COUNT
14655 GOTO 14570 / BACK TO GET ANOTHER CHARACTER
14660 REM * RETURN / DONE WITH ENTERY
14670 FOR T9 = 1 TO KTMAX / FOR EACH CHARACTER ENTERED
14675 A$ = A$ + K$(T9) / A$ = ALL THE CHARACTERS STRUNG (CONCATED) TOGETHER
14676 IF K$(T9) = "^" GOTO 15830 / NEW ENTRY OPTION SAME AS LAST RECORD OVER 1
14677 IF K$(T9) = ">" GOTO 15950 / NEW ENTRY OPTION ABORT RECORD
14678 IF K$(T9) = "=" GOTO 15800 / NEW ENTRY OPTION SAME AS LAST RECORD
14679 IF K$(T9) = "<" GOTO 15900 / NEW ENTRY OPTION START RECORD OVER
14680 NEXT T9
14681 IF KTMAX = 0 THEN PRINT "1"; / DEFAULT = 1
14682 IF KTMAX = 0 THEN DT# = 1 / DEFAULT = 1
14684 IF SPRT >< 5 THEN PRINT "" / IF PRINTING IS NOT SUPRESSED THEN PRINT TO NEXT LINE / THIS IS NECESSARY IF THE PROMPT IS ON THE 24 TH LINE ON IBM BASIC OTHERWISE THE SCREEN WILL SCROLL UP ONE LINE
14685 SPRT = 0 / SET SURPRESS PRINT FLAG TO NO
14686 IF KTMAX = 0 THEN RETURN / IF DEFAULT THEN RETURN
14687 GOTO 14905
14689 GOTO 14905
14690 REM * MOVE CURSE BACK
14695 IF KT = 1 GOTO 14575 / CAN'T MOVE CURSER BACK ANY MORE
14700 KT = KT - 1 / COUNT = COUNT -1
14703 PRINT CHR$(CH); / BACKSPACE ONE SPACE
14705 GOTO 14575
14710 REM * MOVE CURSER FORWARD
14715 IF KT >= MAX GOTO 14575 / CAN'T MOVE CURSER FORWARD ANY
17360 RN = 8192 / INITIALIZE RECORD NUMBER TO 8192
17365 I!= RN / INITIALIZE I! TO 8192
17368 IF RN > MRN GOTO 17800 / IF RECORD NUMBER IS GREATER THEN THE MAXIMUM RECORD NUMBER THEN GOTO 17800
17370 GET #1,RN / GET RECORD NUMBER RN
17375 I!= I!/ 2 / REDUCE THE INCREMENT VALUE BY HALF
17376 IF FTY(A,SF) = 1 THEN XT$ = LEFT$(X$(SF),LN) ELSE XT$=X$(SF) / IF THE SEARCH FIELD IS A STRING THEN TAKE THE LEFT PART OF THE STING WITH LENGTH LN. IF THE SEARCH VALUE IS A NUMBER THE LEAVE IT THE WAY IT IS.
17377 IF I!< 1 THEN GOTO 17900 / IF INCREMENT VALUE IS LESS THEN ONE THEN END SEARCH
17378 IF XT$ = SV$ THEN RNB = RN / IF THE FIELD AND SEARCH VALUE MATCH THEN SET RNB (RECORD NUMBER BACKUP MATCH) TO RECORD NUMBER
17380 IF XT$ < SV$ THEN GOTO 17500 / IF THE FIELD IS LESS THEN THE VALUE SEARCHING FOR GOTO 17500
17390 RN = RN - I! / SUBTRACT INCREMENT VALUE FROM RECORD NUMBER
17400 GOTO 17368
17500 RN = RN + I! / ADD INCREMENT VALUE TO RECORD NUMBER
17510 GOTO 17368
17600 REM
17610 GOTO 8057 / SHOW RECORD ON SCREEN
17800 REM ON ERROR ROUTINE / IS NO LONGER AN ON ERROR ROUTINE. RECORD NUMBER LARGER THEN MAXIMUM FILE NUMBER
17801 I!= I!/ 2 / HALF INCREMENT VALUE
17802 IF I!< 1 GOTO 17900 / IF INCREMENT VALUE LESS THEN ONE END SEARCH
17805 RN = RN - I! / SUBTRACT RECORD NUMBER FROM INCREMENT VALUE
17810 GOTO 17368 / CONTINUE SEARCH
17900 IF XT$ = SV$ THEN GOTO 17950 / IF CURRENT RECORD MATCHES GOTO 17950
17902 IF RNB > 0 THEN RN = RNB / IF BACKUP MATCH THEN RECORD NUMBER = RECORD BACKUP MATCH.
17904 IF RNB > 0 THEN GOTO 8057 / IF BACKUP MATCH THEN SHOW RECORD ON SCREEN
18305 SV$ = MKD$(DT#) / CONVERT SEARCH VALUE TO A STRING
18350 REM * START SEARCH
18360 GOSUB 18800 / GET STARTING RECORD NUMBER
18365 FOR RN = RNSS TO MRN / START SEARCH LOOP FOR RECORD NUMBER START SEARCH TO MAXIMUM RECORD NUMBER
18370 GET #1,RN / GET RECORD NUMBER RN
18376 IF FTY(A,SF) = 1 THEN XT$ = LEFT$(X$(SF),LN) ELSE XT$=X$(SF) / IF SEARCH FIELD IS A STRING THEN TAKE THE LEFT PART OF THE STING EQUAL IN LENGTH TO THE VALUE YOU ARE SEARCHING FOR. IF A NUMBER TAKE ENTIRE FIELD
18378 IF XT$ = SV$ THEN GOTO 8057 / IF FIELD AND SEARCH VALUE MATCH THE SHOW RECORD
18380 NEXT RN / END OF SEARCH LOOP
18390 GOTO 3010 / GOT TO FILE OPTIONS
18800 REM * GET STARTING AND ENDING FILE
18803 PRINT ""
18805 PRINT "MINIMUM RECORD NUMBER = 1 MAXIMUM RECORD NUMBER = ";MRN
18810 PRINT "****** WHICH RECORD NUMBER DO YOU WANT TO START THE SEARCH AT ******"
18820 GOSUB 14100 / INPUT INTEGER SUBROUTINE
18830 IF DT#<1 OR DT#>MRN THEN 18820 / RECORD NUMBER OUT OF RANGE THEN REENTER
18840 RNSS = DT# / RECORD NUMBER START SEARCH EQUAL THE VALUE RETURNED FROM THE INPUT SUBROUTINE
18900 RETURN
THEN REENTER
18840 RNSS = DT# / RECORD NUMBER START SEARCH EQUAL THE VALUE RETURNED