10 REM Race13 20 REM by Graham Kendall 30 : 40 GOSUB 110 :REM Init_1 Routine 50 GOSUB 210 :REM Odds Limit Routine 60 GOSUB 370 :REM Get Filename Routine 70 GOSUB 440 :REM Open File Routine 80 GOSUB 480 :REM Control Routine 90 END 100 : 110 REM Init_1 Routine 120 DIM STAKEPLAN%(50) 130 STAKEPLAN%(0) = -1 140 WHILE STAKEPLAN%(CNT%) <> 0 150 CNT% = CNT% +1 160 READ STAKEPLAN%(CNT%) 170 WEND 180 STAKECNT% = 1 190 RETURN 200 : 210 REM Odds Limit Routine 220 CLS:GOSUB 6500 :REM Print Heading Routine 230 ACROSS% = 1:DOWN% = 6 240 FOR P% = 1 TO 2 250 TEMP%(P%) = -1 260 DOWN% = DOWN% +2 270 WHILE TEMP%(P%) <1 280 IF P% = 1 THEN SIDE$ = "Left" ELSE SIDE$ = "Right" 290 TEXT$ = "What is the lowest odds you will bet at (" + SIDE$ + " hand side)" 300 GOSUB 5500 :REM Print Text Routine 310 INPUT TEMP%(P%) 320 WEND 330 NEXT P% 340 ODDSLIMIT = TEMP%(2) / (TEMP%(1) + TEMP%(2)) *100 350 RETURN 360 : 370 REM Get Filename Routine 380 CLS:GOSUB 6500 :REM Print Heading Routine 390 TEXT$ = "What is the name of the file holding the race details" 400 DOWN% = 10:GOSUB 5000 :REM Centre Text Routine 410 INPUT FILENAME$ 420 RETURN 430 : 440 REM Open File Routine 450 OPEN "I",#1,FILENAME$ 460 RETURN 470 : 480 REM Control Routine 490 WHILE NOT EOF(1) 500 GOSUB 590 :REM Read and Validate Record Routine 510 ODDSPCNT = ODDSRIGHT%/(ODDSRIGHT%+ODDSLEFT%)*100 520 IF (ODDSLIMIT >= ODDSPCNT) AND (WINLOSS$ = "W") THEN GOSUB 800 :REM Win Routine 530 IF (ODDSLIMIT >= ODDSPCNT) AND (WINLOSS$ = "L") THEN GOSUB 900 :REM Lose Routine 540 IF ODDSLIMIT < ODDSPCNT THEN NOBET% = NOBET% +1 550 WEND 560 GOSUB 1010 :REM Output Routine 570 RETURN 580 : 590 REM Read and Validate Record Routine 600 RECCNT% = RECCNT% +1 610 INPUT#1,REC$ 620 IF INT(RECCNT%/10) = RECCNT%/10 THEN TEXT$ = "Processing Record" + STR$(RECCNT%):DOWN% = 22: GOSUB 5000 :REM Centre Text Routine 630 A% = INSTR(REC$," ") 640 IF A% <> 0 THEN ERRMESS$ = "Rec" + STR$(RECCNT%) +" must not contain a space":GOSUB 1250:REM Error Routine 650 A% = INSTR(REC$,"-") 660 IF A% <2 THEN ERRMESS$ = "Rec" + STR$(RECCNT%) +" must contain a '-' (not as the first chr)":GOSUB 1250:REM Error Routine 670 ODDSLEFT% = VAL(LEFT$(REC$,A%)) 680 REC$ = RIGHT$(REC$,LEN(REC$) - A%) 690 ODDSRIGHT% = VAL(LEFT$(REC$,10)) 700 REC$ = MID$(REC$,LEN(STR$(ODDSRIGHT%)),2) 710 IF (ODDSLEFT% = 0) OR (ODDSRIGHT% = 0) THEN ERRMESS$ = "One side of the odds at record" + STR$(RECCNT%) + " is zero":GOSUB 1250 :REM Error Routine 720 WINLOSS$ = LEFT$(REC$,1) 730 JTFAV$ = MID$(REC$,2,1) 740 IF WINLOSS$ = "w" THEN WINLOSS$ = "W" 750 IF WINLOSS$ = "l" THEN WINLOSS$ = "L" 760 IF JTFAV$ = "j" THEN JTFAV$ = "J" 770 IF (WINLOSS$ <> "W") AND (WINLOSS$ <> "L") THEN ERRMESS$ = "The Win/Loss indicator at record" + STR$(RECCNT%) + " must be L or W" : GOSUB 1250 :REM Error Routine 780 RETURN 790 : 800 REM Win Routine 810 WINS% = WINS% +1 820 TAX = STAKEPLAN%(STAKECNT%) *.1 830 MONEY = MONEY + ((STAKEPLAN%(STAKECNT%)/ODDSRIGHT%)*ODDSLEFT%) - TAX 840 STAKECNT% = 1 850 WINSEQ% = WINSEQ% +1 860 IF TOTWINSEQ% < WINSEQ% THEN TOTWINSEQ% = WINSEQ% 870 LOSESEQ% = 0 880 RETURN 890 : 900 REM Lose Routine 910 LOSSES% = LOSSES% +1 920 STAKE = STAKEPLAN%(STAKECNT%) *1.1 930 MONEY = MONEY - STAKE 940 STAKECNT% = STAKECNT% +1 950 IF STAKEPLAN%(STAKECNT%) = 0 THEN STAKECNT% = 1 960 LOSESEQ% = LOSESEQ% +1 970 IF TOTLOSESEQ% < LOSESEQ% THEN TOTLOSESEQ% = LOSESEQ% 980 WINSEQ% = 0 990 RETURN 1000 : 1010 REM Output Routine 1020 CLS:GOSUB 6500 :REM Print Heading Routine 1030 DOWN% = 3:ACROSS% = 7 1040 ODDSLIMIT = INT(ODDSLIMIT*100)/100 1050 TEXT$ = LEFT$("Odds you needed before you bet" + STRING$(40," "),40) + STR$(TEMP%(1)) + "-" + STR$(TEMP%(2)) 1060 DOWN% = DOWN% +2:GOSUB 5500 :REM Print Text Routine 1070 TEXT$ = LEFT$("Number of Races in File" + STRING$(40," "),40) + STR$(RECCNT%) 1080 DOWN% = DOWN% +2:GOSUB 5500 :REM Print Text Routine 1090 TEXT$ = LEFT$("Number of Wins" + STRING$(40," "),40) + STR$(WINS%) 1100 DOWN% = DOWN% +2:GOSUB 5500 :REM Print Text Routine 1110 TEXT$ = LEFT$("Number of Losses" + STRING$(40," "),40) + STR$(LOSSES%) 1120 DOWN% = DOWN% +2:GOSUB 5500 :REM Print Text Routine 1130 TEXT$ = LEFT$("Longest Losing Sequence" + STRING$(40," "),40) + STR$(TOTLOSESEQ%) 1140 DOWN% = DOWN% +2:GOSUB 5500 :REM Print Text Routine 1150 TEXT$ = LEFT$("Longest Winning Sequence" + STRING$(40," "),40) + STR$(TOTWINSEQ%) 1160 DOWN% = DOWN% +2:GOSUB 5500 :REM Print Text Routine 1170 TEXT$ = LEFT$("Number of Races not Backed" + STRING$(40," "),40) + STR$(NOBET%) 1180 DOWN% = DOWN% +2:GOSUB 5500 :REM Print Text Routine 1190 MONEY = INT(MONEY*100)/100 1200 TEXT$ = LEFT$("Bank Total" + STRING$(40," "),40) + STR$(MONEY) 1210 DOWN% = DOWN% +2:GOSUB 5500 :REM Print Text Routine 1220 GOSUB 6000 :REM Press Space Routine 1230 RETURN 1240 : 1250 REM Error Routine 1260 CLS:GOSUB 6500 :REM Print Heading Routine 1270 TEXT$ = ERRMESS$ + " - Program Terminating":DOWN% = 17:GOSUB 5000 :REM Centre Text Routine 1280 GOSUB 6000 :REM Press Space Routine 1290 END 1300 RETURN 1310 : 5000 REM Print Centred Text Routine 5010 PRINT CHR$(11) 5020 FOR I% = 1 TO DOWN% -1:PRINT CHR$(10);:NEXT 5030 ACROSS% = (79-LEN(TEXT$))/2 5040 PRINT TAB(ACROSS%);TEXT$ 5050 RETURN 5060 : 5500 REM Print Text on Screen Routine 5510 PRINT CHR$(11) 5520 FOR I% = 1 TO DOWN% -1:PRINT CHR$(10);:NEXT 5530 PRINT TAB(ACROSS%);TEXT$ 5540 RETURN 5550 : 6000 REM Press Space Routine 6010 TEXT$ = "Press Space to Continue" 6020 DOWN% = 22:GOSUB 5000 : REM Centre Text Routine 6030 WHILE INKEY$ <> " " 6040 WEND 6050 RETURN 6060 : 6500 REM Print Heading Routine 6510 TEXT$ = "Racing Program 13" 6520 DOWN% = 2:GOSUB 5000 : REM Centre Text Routine 6530 RETURN 6540 : 6550 DATA 1,2,3,4,5,0