Handicaps a harness race from figures you copy out of the track program. For each horse (up to 15) a worksheet asks for its number and name, its half-mile and final times in the last race, its post position last time and today, its stretch gain, whether it is moving up or down in class, whether its driver wins more than 15% of the time, and how many times it was parked out. Optional help text explains where to find each figure. The program turns these into a rating, sorts the field, and shows a rating report for the race, which can also be sent to the printer with two header lines of your own. A separate Wager Master section gives a table of estimated $2 payoffs for odds from 1-1 to 20-1, works out the return on a win/place/show bet at chosen odds, and picks daily-double, perfecta/exacta and trifecta combinations from your top choices, each with an optional printout.
The Handicapper was written by Leonard Hyre of Federal Hill Software, Baltimore, in 1984 and distributed by Knighted Computers of Fulton, New York. The REM header reads “HARNESS HANDICAPPER / FEDERAL HILL SOFTWARE ©1984 BY L. HYRE”, and the title screen says “FEDERAL HILL SOFTWARE PRESENTS” and “by LEONARD HYRE”. The product was sold as separate programs for thoroughbreds, harness horses and greyhounds; only the harness module survives, on a Larken disk in Bob Swoger’s collection. The disk’s Tasword product sheet is included in the zip as a text file. It describes all three programs and the factors each one uses.
Program Analysis
Structure
- Lines 10–100: copyright REMs, caps lock on (
POKE 23658,8), and the arrays for up to 15 horses. - Lines 110–840: the handicapping worksheet, one screen per horse, with a review step (
Cto accept,Rto redo). - Lines 860–970: help screens for each input.
- Lines 990–1170: lookup tables that turn times and post positions into points.
- Lines 1190–1780: title, main menu, background information and handicapping principles.
- Lines 1820–2340: bubble sort, rating report and printout.
- Lines 2350–3620: Wager Master, with the odds/payoff table held in
DATAlines 2370–2380. - Lines 3680–3760: a routine that formats a number as dollars and cents.
Rating
Each horse’s rating is the sum of seven scores (line 760). The half-mile time is scored from 55 points (under 59 seconds) down to 0 (1:09 or slower), less one point per fifth of a second. The final time is scored from 100 (under 1:53) down to 0 (2:12 or slower), again less the fifths. The post-position score is today’s post value minus last race’s, with inside posts worth the most, so a horse moving from outside to inside gains; for posts 9 and 10 the program asks whether the horse starts in the first or second tier. The stretch gain is added as entered. Class adds or takes away 5 points, a driver who wins more than 15% of the time adds 12, and each parked-out sign adds 6. Times are entered as four digits, with the last digit in fifths of a second. The report shows each rating doubled.
Notable Techniques
- Computed jumps such as
GO TO (1420 AND VAL Z$=1)+(1510 AND VAL Z$=2)+…stand in forON … GO TO. - The TS2068’s
ON ERR GO TOtraps bad numeric input in Wager Master, andON ERR RESETturns the trap off again. - The money-format routine is called as
GO SUB CASH, withCASHset to 3680 at the start. - The odds table keeps win, place and show payoffs as strings in
DATAand reads them into four string arrays.
Potential Issues
- Horse entries should start with the horse’s number, as the help says. Line 2060 takes
VALof the first two characters to line up the report, so a name that starts with a letter appears to stop the program with an error. - Key checks compare against capital letters, so the program depends on the caps lock it sets in line 70.
- Printouts need a printer. The rating report and the Wager Master selections can also be read on screen.
This program came from a Larken disk and was converted to run from tape: the LKDOS save and load lines and the LOGICALL load were removed, the program is saved without variables, and the disk’s Larken launcher (HTRACK.B1) was left out. It was tested in ZEsarUX through the menus, a two-horse worksheet, the rating report and the payoff table.
Source Code
10 REM ***********************
20 REM * HARNESS HANDICAPPER *
30 REM *FEDERAL HILL SOFTWARE*
40 REM * * 1984 BY L. HYRE *
50 REM ***********************
60 REM REPRODUCTION OF THIS SOFTWARE PROGRAM OTHER THAN FOR THE PROTECTION OF THE ORIGINAL PURCHASER AS A BACKUP COPY IS STRICTLY PROHIBITED BY COPYRIGHTLAW
70 LET CASH=3680: POKE 23658,8
80 DIM G$(3,8): DIM L(3): DIM U$(1,9): DIM A$(15,20): DIM R(15): DIM M$(4,25): DIM H$(2,31): DIM T$(3,32): DIM U$(2,20): DIM K$(15,20): DIM V(3): DIM J(2): DIM O$(15,4): DIM W$(15,4): DIM P$(15,4): DIM S$(15,4)
90 LET HP=0: LET z$=" "
100 GO TO 1190
110 FOR R=1 TO 15
120 BORDER 0: PAPER 0: INK 6: CLS
130 PRINT AT 0,0;: GO SUB 1790
140 PRINT AT 2,4;"HANDICAPPING WORKSHEET"
150 PRINT AT 4,0;"HORSE NO. & NAME";: PRINT AT 6,0;"1/2 MILE TIME";
160 PRINT AT 7,0;"FINAL TIME";AT 8,0;"POST POS. LAST RACE"
170 PRINT AT 9,0;"POST POS. THIS RACE";AT 10,0;"STRETCH GAIN LAST RACE"
180 PRINT AT 11,0;"CLASS (U)p (D)own (S)ame";AT 12,0;"DRIVER WIN RATE"
190 PRINT AT 13,0;"PARKED OUT SIGNS"
200 PRINT AT 14,0;: GO SUB 1790: PRINT AT 15,0;: GO SUB 1790
210 IF R<>1 THEN GO TO 250
220 PRINT AT 20,0;"HELP ON SCREEN ? (Y/N)": INPUT B$
230 LET HP=(1 AND B$="Y")+(0 AND B$="N")
240 GO SUB 980
250 IF HP=0 THEN PRINT AT 19,4;"The HARNESS HANDICAPPER"
260 IF HP=1 THEN GO SUB 870
270 INPUT "HORSE NUMBER & NAME";A$(R): PRINT INK 7; PAPER 1;AT 5,8;A$(R)
280 IF HP=1 THEN GO SUB 980: GO SUB 880
290 INPUT "1/2 MILE TIME";C$
300 IF LEN c$<>4 THEN GO TO 290
310 IF VAL (c$)<500 OR VAL (c$)>1200 THEN GO TO 290
320 PRINT INK 7; PAPER 1;AT 6,15;C$: LET A=VAL (C$( TO 3)): LET B=VAL (C$(4))
330 GO SUB 990
340 LET SH=X-B
350 IF HP=1 THEN GO SUB 980: GO SUB 890
360 INPUT "FINAL TIME : ";D$
370 IF LEN D$<>4 THEN GO TO 360
380 IF VAL (D$)<1480 OR VAL (D$)>2240 THEN GO TO 360
390 PRINT INK 7; PAPER 1;AT 7,12;D$: LET C=VAL (D$( TO 3)): LET D=VAL (D$(4))
400 GO SUB 1020
410 LET SF=Y-D
420 IF HP=1 THEN GO SUB 980: GO SUB 900
430 INPUT "POST POS. LAST RACE ";E
440 IF E<1 OR E>12 THEN GO TO 430
450 PRINT INK 7; PAPER 1;AT 8,21;E: GO SUB 1060
460 IF HP=1 THEN GO SUB 980: GO SUB 910
470 INPUT "POST POS. THIS RACE ";F
480 IF F<1 OR F>12 THEN GO TO 470
490 PRINT INK 7; PAPER 1;AT 9,21;F: GO SUB 1120
500 LET PP=N-M
510 IF HP=1 THEN GO SUB 980: GO SUB 920
520 INPUT "STRETCH GAIN LAST RACE ";G
530 IF G>20 THEN GO TO 520
540 PRINT INK 7; PAPER 1;AT 10,24;G: IF HP=1 THEN GO SUB 980: GO SUB 940
550 REM **********************
560 INPUT "CLASS: (U)p (D)own (S)ame ";E$
570 IF E$="U" THEN LET H=-5: GO TO 610
580 IF E$="D" THEN LET H=5: GO TO 610
590 IF E$="S" THEN LET H=0: GO TO 610
600 GO TO 550
610 PRINT INK 7; PAPER 1;AT 11,26;E$: IF HP=1 THEN GO SUB 980: GO SUB 960
620 INPUT "DRIVER WIN RATE (1 or 2)";J
630 IF J<1 OR J>2 THEN GO TO 620
640 LET DR=(12 AND J=1)+(0 AND J=2)
650 PRINT INK 7; PAPER 1;AT 12,17;J: IF HP=1 THEN GO SUB 980: GO SUB 970
660 INPUT "PARKED OUT SIGNS ";K
670 IF K>12 THEN GO TO 660
680 PRINT INK 7; PAPER 1;AT 13,18;K: LET PO=K*6
690 GO SUB 980: PRINT AT 16,0;"REVIEW DATA:"
700 PRINT AT 18,0;"IF ABOVE DATA IS"; INK 4;" CORRECT"; INK 6;" PRESS THE "; INK 4;"""C"""; INK 6;" KEY"
710 PRINT AT 20,0;"IF DATA IS "; INK 3;"INCORRECT "; INK 6;" PRESS "; INK 3;"""R"""; INK 6;" TO REDO"
720 LET I$=INKEY$: IF I$="" THEN GO TO 720
730 IF I$="R" THEN GO TO 120
740 IF I$="C" THEN GO TO 760
750 GO TO 720
760 LET R(R)=SH+SF+PP+G+H+DR+PO
770 GO SUB 980
780 PRINT AT 21,0;" ";AT 21,0;"ANOTHER HORSE ? (Y/N)"
790 LET I$=INKEY$: IF I$="" THEN GO TO 790
800 IF I$="N" THEN GO TO 840
810 IF I$="Y" THEN GO TO 830
820 GO TO 790
830 NEXT R
840 GO TO 1820
850 GO TO 850
860 REM *** HELP SCREENS HERE **
870 PRINT AT 14,0; INK 4;"TYPE THE HORSES NUMBER FOLLOWED BY A SPACE AND HIS NAME."'"Then hit [ENTER] Key"; INK 6: RETURN
880 PRINT AT 14,0; INK 4;"LOCATE THE 1/2 MILE SPEED LISTEDFOR THE RACE FROM WHICH YOU ARE OBTAINING THE HANDICAPPING INFORMATION.(E.G. 1012 OR 0572)."'"Enter this figure- then Hit [ENTER] Key."; INK 6: RETURN
890 PRINT AT 14,0; INK 4;"LOCATE THE FINAL TIME FOR THIS HORSE FROM THE RACE FROM WHICH YOU ARE OBTAINING THE HANDICAPPING INFORMATION. (E.G. 1571 or 2023)": PRINT "Enter this figure- Then Hit [ENTER] Key.": INK 6: RETURN
900 PRINT AT 14,0; INK 4;"Find the POST POSITION of 'THIS'Horse from which you are obtaining data.": PRINT "Enter this figure- Then Hit [ENTER] Key.": INK 6: RETURN
910 PRINT AT 14,0; INK 4;"Find the POST POSITION of 'THIS'Horse in 'TODAYS' race.": PRINT INK 4;"Usually the Wagering Number, BUTnot always!": PRINT "Enter this figure- Then Hit [ENTER] Key.": INK 6: RETURN
920 PRINT INK 4;AT 14,0;"This entry is the number of lengths this horse gained in the""STRETCH RUN in it's last race."""
930 PRINT INK 5;"NOTE: If horse was winner in last, enter lengths of win here.": PRINT "Input number and Hit [ENTER]": INK 6: RETURN
940 GO SUB 980: PRINT INK 4;AT 14,0;"IF PURSE OR CLAIMING PRICE THIS RACE IS :": PRINT INK 4;"1. HIGHER THAN THIS HORSES PREVIOUS RACE THEN ENTER ""U""": PRINT INK 4;"2. LOWER THAN THIS HORSES PREVIOUS RACE THEN ENTER ""D"""
950 PRINT INK 4;"3. THE SAME AS THIS HORSES PREVIOUS RACE THEN ENTER ""S""": INK 6: RETURN
960 PRINT INK 4;AT 14,0;"DRIVER WIN RATE: If Driver WINS MORE than 15%, Enter 1": PRINT INK 4;"If DRIVER WINS LESS THAN 15%, Enter 2": INK 6: RETURN
970 PRINT INK 4;AT 14,0;"PARKED OUT indicators are small ""o"" marks at each of the horse'srace positions. Simply count the number and Enter the figure.": INK 6: RETURN
980 FOR u=14 TO 21: PRINT AT U,0;" ": NEXT u: PRINT AT 14,0;: RETURN
990 IF A<59 THEN LET X=55
991 IF A=59 THEN LET X=50
992 IF A=100 THEN LET X=45
993 IF A=101 THEN LET X=40
994 IF A=102 THEN LET X=35
995 IF A=103 THEN LET X=30
996 IF A=104 THEN LET X=25
997 IF A=105 THEN LET X=20
998 IF A=106 THEN LET X=15
999 IF A=107 THEN LET X=10
1000 IF A>108 THEN LET X=0
1001 IF A=108 THEN LET X=5
1010 RETURN
1020 IF C<153 THEN LET Y=100
1030 IF C=153 THEN LET Y=95
1031 IF C=154 THEN LET Y=90
1032 IF C=155 THEN LET Y=85
1033 IF C=156 THEN LET Y=80
1034 IF C=157 THEN LET Y=75
1035 IF C=158 THEN LET Y=70
1036 IF C>=159 AND C<200 THEN LET Y=65
1037 IF C=200 THEN LET Y=60
1038 IF C=201 THEN LET Y=55
1039 IF C=202 THEN LET Y=50
1040 IF C=203 THEN LET Y=45
1041 IF C=204 THEN LET Y=40
1042 IF C=205 THEN LET Y=35
1043 IF C=206 THEN LET Y=30
1044 IF C=207 THEN LET Y=25
1045 IF C=208 THEN LET Y=20
1046 IF C=209 THEN LET Y=15
1047 IF C=210 THEN LET Y=10
1048 IF C=211 THEN LET Y=5
1049 IF C>211 THEN LET Y=0
1050 RETURN
1060 LET M=6
1064 IF E=1 OR E=2 THEN LET M=8
1065 IF E=3 OR E=4 OR E=5 THEN LET M=6
1067 IF E=6 THEN LET M=4
1068 IF E=7 THEN LET M=2
1069 IF E=8 THEN LET M=1
1070 IF E=9 OR E=10 THEN LET M=0: GO SUB 980: PRINT AT 20,0;"TIER 1 OR 2? <Enter 1 or 2>": INPUT "Enter 1 OR 2 ";zz: PRINT AT 8,25;"TIER "; INK 7; PAPER 1;ZZ: PRINT AT 14,0;
1074 IF E<9 THEN GO TO 1100
1075 IF ZZ<1 OR ZZ>2 THEN GO TO 1070
1076 IF ZZ=1 THEN LET M=1
1077 IF ZZ>1 THEN LET M=6
1079 PRINT AT 14,30;ZZ: PAUSE 240
1080 PRINT AT 14,0;" "
1090 IF E=11 OR E=12 THEN LET M=1
1100 LET ZZ=0
1110 RETURN
1120 LET N=0: IF F=1 OR F=2 THEN LET N=8
1126 IF F=3 OR F=4 OR F=5 THEN LET N=6
1127 IF F=6 THEN LET N=4
1128 IF F=7 THEN LET N=2
1129 IF F=8 THEN LET N=1
1130 IF F=9 OR F=10 THEN GO SUB 980: PRINT AT 20,0;"TIER 1 OR 2? <Enter 1 or 2>": INPUT V: PRINT AT 9,25;"TIER "; INK 7; PAPER 1;V: IF V<1 OR V>2 THEN GO TO 1130
1131 IF F<9 THEN GO TO 1160
1132 IF V=1 THEN LET N=1
1133 IF V=2 THEN LET N=6
1140 PRINT AT 14,0;" "
1150 IF F=11 OR F=12 THEN LET N=1
1155 IF N<>1 THEN LET N=6
1160 LET V=0
1170 RETURN
1180 REM ** SPEED DATA ENDS HERE*******************************
1190 LET U$(1)="THE MENU": LET M$(1)="1. BACKGROUND INFORMATION": LET M$(2)="2. HANDICAPPING FACTORS": LET M$(3)="3. HANDICAPPING INPUT": LET M$(4)="4. WAGER MASTER"
1200 PRINT AT 0,0;
1210 INK 6: BORDER 0: PAPER 0: CLS
1220 GO SUB 1790
1230 PRINT INK 7; PAPER 1;" FEDERAL HILL SOFTWARE PRESENTS ": INK 6: PAPER 0
1240 GO SUB 1790
1250 PAUSE 150
1260 LET DN=3
1270 FOR I=2 TO 10
1280 PRINT AT DN,I;"HARNESS HANDICAPPER": LET DN=DN+1: NEXT I
1290 PRINT : GO SUB 1790
1300 PRINT
1310 PRINT " * by LEONARD HYRE"
1320 PAUSE 100
1330 CLS : GO SUB 1790
1340 PRINT TAB (11);U$(1)
1350 LET L1=4: FOR I=1 TO 4: PRINT AT L1,5;M$(I): LET L1=L1+2: NEXT I
1360 PRINT : GO SUB 1790
1370 PRINT '''''TAB 10;"CHOOSE ?"
1380 BEEP .25,5: PRINT '"**** The HARNESS HANDICAPPER ***"
1390 LET Z$=INKEY$: IF Z$="" THEN GO TO 1390
1395 IF Z$<CHR$ (49) OR Z$>CHR$ 52 THEN GO TO 1390
1400 IF VAL Z$<1 OR VAL Z$>4 THEN GO TO 1390
1410 ON ERR RESET : PRINT INK 7; PAPER 1;AT 21,8;"ONE MOMENT PLEASE": GO TO (1420 AND VAL Z$=1)+(1510 AND VAL Z$=2)+(110 AND VAL Z$=3)+(2350 AND VAL Z$=4)
1420 INK 7: BORDER 1: PAPER 1: CLS : GO SUB 1790: PRINT " Background Information"
1430 GO SUB 1790: PRINT '"HARNESS HANDICAPPER is a programfor your TS2068 computer which will allow you to handicap a race quickly and easily. It doesnot contain a magic formula for getting rich.";
1440 PRINT " However, if you follow these instructions care- fully, avoid bad races and gimmick bets, you will be able to make a tidy profit at the track."
1450 PRINT '"The program uses eight differentcriteria for rating horses, relying heavily on their performance last time out on a fast or sloppy track.": PRINT INK 4; PAPER 0;AT 21,3;"PRESS ANY KEY FOR NEXT PAGE": PAUSE 0: CLS
1460 PRINT ''"You may now select the kind of Information you want."
1470 PRINT ''"(1) HANDICAPPING PRINCIPLES"''"(2) HANDICAPPING INPUT"''"(3) WAGER MASTER"
1480 LET Z$=INKEY$: IF Z$="" THEN GO TO 1480
1485 IF Z$<CHR$ (49) OR Z$>CHR$ (51) THEN GO TO 1480
1490 IF VAL Z$<1 OR VAL Z$>3 THEN GO TO 1480
1500 GO TO (1510 AND VAL Z$=1)+(110 AND VAL Z$=2)+(2350 AND VAL Z$=3)
1510 CLS : GO SUB 1790: PRINT " HANDICAPPING PRINCIPLES": GO SUB 1790
1520 PRINT '"/// STAY HOME IF THE TRACK CONDITION IS NOT FAST. ANY OFF TRACK, MEANING GOOD, MUDDY, OR SLOPPY, SHOULD BE AVOIDED!"
1530 PRINT '"/// DON'T BET ON MAIDEN RACES. THESE ARE UNPROVEN OR JUST PLAINBAD HORSES."
1540 PRINT '"/// DON'T BET ON RACES WITH THE CHEAPEST HORSES ON THE GROUNDS THESE ARE USUALLY THE FIRST AND LAST RACES. THE BETTER THE CLASSOF HORSE, THE BETTER THE HANDI- CAPPER PROGRAM WORKS.": PRINT AT 21,3; INK 4; PAPER 0;"PRESS ANY KEY FOR NEXT PAGE": PAUSE 90: PAUSE 0: CLS
1550 PRINT "/// DON'T BET ON RACES WITH A HIGH PROPORTION OF SHIPPERS. THESE ARE HORSES RUNNING AT THE TRACK FOR THE FIRST TIME."
1560 REM
1570 PRINT AT 21,3; INK 4; PAPER 0;"PRESS ANY KEY TO CONTINUE": PAUSE 90: PAUSE 0: CLS
1580 GO SUB 1790: PRINT " ELIMINATE BAD HORSES QUICKLY": GO SUB 1790
1590 PRINT '"/// ELIMINATE ANY HORSE WHO DID NOT SHOW A STRONG PERFORMANCE LAST TIME OUT ON A FAST OR SLOPPY TRACK. THIS MEANS A WIN, PLACE, OR SHOW, A STRONG RUN ON THE LEADER IN THE STRETCH OR SETTING THE EARLY PACE."
1600 PRINT '"/// ELIMINATE ANY HORSE WHO HAS NOT RACED IN THE LAST TWO WEEKS."
1610 PRINT '"/// ELIMINATE SHIPPERS. THESE ARE HORSES RUNNING AT THIS TRACKFOR THE FIRST TIME. EXCEPTIONS MAY BE MADE FOR BIG STAKES RACES--BUT WE DO NOT RECOMMEND THESE AS GOOD BETTING PROPOSITIONS."
1620 PRINT AT 21,3; INK 4; PAPER 0;"PRESS ANY KEY TO CONTINUE": PAUSE 60: PAUSE 0: CLS
1630 REM ***********************
1640 GO SUB 1790: PRINT AT 1,4;"FACTORS USED BY HARNESS": GO SUB 1790
1650 PRINT AT 4,0;"1: Speed of horse at 1/2 mile";AT 5,0;"2: Final speed of horse";AT 6,0;"3. Driver ability to win";AT 7,0;"4. Stretch gain last race"
1660 PRINT AT 8,0;"5: Class of the contending horse";AT 9,0;"6: Post position last race";AT 10,0;"7: Post position this race";AT 11,0;"8: Relationship of all above";AT 21,3; INK 4; PAPER 0;"PRESS ANY KEY TO CONTINUE"
1670 PAUSE 90: PAUSE 0: CLS
1680 GO SUB 1790: PRINT AT 1,5;"ELIMINATE the LOSERS": GO SUB 1790: GO SUB 1790: PRINT AT 4,5;"AVOID THE FOLLOWING": GO SUB 1790
1690 PRINT AT 6,0;"1. MAIDENS !(Terrible Wagers...)";"2. CHEAPER TROTTERS (These races usually have breakers).": PRINT AT 9,0;"3. EXCESSIVE EXOTIC WAGERS (doubles, triples, etc.).": PRINT AT 11,0;"4. ANY ";
1700 PRINT "'OFF' "; INK 6;"TRACK (Muddy, sloppy, good, etc.)": PRINT AT 13,0;"5. TIPS ! TIPS ! TIPS ! (You can get a 'tip' on every horse in race)"
1710 PRINT AT 21,3; INK 4; PAPER 0;"PRESS ANY KEY TO CONTINUE": PAUSE 60: PAUSE 0
1720 CLS : GO SUB 1790: PRINT "HANDICAPPING REMINDERS AND TIPS": GO SUB 1790
1730 PRINT AT 5,0;"1. PRIOR TO HANDICAPPING INPUT:";" A. THROWOUT THE NON-CONTENDERS";" B. MAKE UP A DRIVER LIST (15% wins)";" C. SKIP THE 'BAD' RACES."
1740 PRINT '"2. PROOF YOUR INPUT DATA (mark race lines, circle key infor- mation etc.)": PRINT '"3. REMEMBER- FOR THE TIME INPUTS": PRINT " A. USE 4 DIGITS": PRINT " B. FIRST 3-DIGITS REPRESENT MINUTES & SECONDS"
1750 PRINT " C. LAST DIGIT REPRESENT 'FIFTH' OF A SECOND"
1760 PRINT AT 21,3; INK 4; PAPER 0;"PRESS ANY KEY TO CONTINUE": PAUSE 60
1770 PAUSE 0
1780 GO TO 1330
1790 PRINT "--------------------------------"
1800 RETURN
1810 GO TO 1330
1820 PRINT AT 6,1;"ONE MOMENT, PLEASE"
1830 GO SUB 1980
1840 CLS : PRINT AT 6,1;"PLEASE ENTER THE NUMBER OF THIS RACE "; FLASH 1;"::": INPUT "RACE NUMBER ";RACENUMBER: PRINT AT 7,6; FLASH 0;RACENUMBER: GO SUB 2320
1850 CLS : GO SUB 2090
1860 PRINT AT 1,0;T$(1): PRINT AT 2,0;T$(2);AT 3,0;T$(3)
1870 GO SUB 1790
1880 LET VERT=6
1890 FOR K=1 TO R
1900 PRINT AT VERT,4;: PRINT A$(K);TAB 26;STR$ (2*R(K));
1910 LET VERT=VERT+1
1920 NEXT K
1930 PRINT AT 19,0;: GO SUB 1790
1940 INPUT "DO YOU WANT A PRINTOUT (Y/N)";F$: IF F$="Y" THEN GO TO 2120
1950 PRINT AT 20,0;"DO YOU WANT TO HANDICAP ANOTHER RACE ? (Y/N)": INPUT Z$: IF Z$="Y" THEN LET HP=0: GO TO 110
1960 CLS : GO TO 1330
1970 REM ****** BUBBLESORT *****
1980 LET T=0
1990 FOR L=1 TO R-1
2000 IF R(L)>=R(L+1) THEN GO TO 2030
2010 LET E=R(L): LET R(L)=R(L+1): LET R(L+1)=E: LET E$=A$(L): LET A$(L)=A$(L+1): LET A$(L+1)=E$
2020 LET T=1
2030 NEXT L
2040 IF T=1 THEN GO TO 1980
2050 REM PUT IN LEADERING
2060 FOR K=1 TO R: IF VAL (A$(K, TO 2))<10 THEN LET A$(K)=" "+A$(K, TO )
2070 LET A$(K)=" "+A$(K)+" "+"...": NEXT K
2080 RETURN
2090 CLS
2100 GO SUB 1790
2110 RETURN
2120 GO SUB 980
2130 INPUT "HEADER 1. ";H$(1)
2140 INPUT "HEADER 2. ";H$(2)
2150 PRINT ''"PREPARE PRINTER "
2160 PRINT AT 21,3; INK 4; PAPER 0;"PRESS ANY KEY WHEN READY"
2170 PAUSE 60: PAUSE 0
2180 LPRINT : LPRINT : LPRINT : LPRINT " ";T$(1): LPRINT TAB 8;T$(2): LPRINT TAB 8;T$(3)
2190 LPRINT "================================"
2200 IF H$(1)<>"" THEN LPRINT : LPRINT H$(1)
2210 IF H$(1)="" THEN GO TO 2230
2220 LET J(2)=0: LPRINT TAB J(2);H$(2)
2230 LPRINT '"================================": LPRINT '''
2240 LPRINT TAB (5);"HORSE";TAB 26;"RATING": LPRINT ''
2250 FOR K=1 TO R
2260 LPRINT TAB (2);A$(K);TAB 27;STR$ (2*R(K))
2270 NEXT K
2280 LPRINT '''"================================"
2290 LPRINT " *** THE HARNESS HANDICAPPER ***": LPRINT " *** FEDERAL HILL SOFTWARE ***": LPRINT " *** BALTIMORE, MD *** ": LPRINT "================================": LPRINT '''
2300 REM
2310 GO TO 1950
2320 LET T$(1)="The HARNESS HANDICAPPER ": LET T$(2)="RATING REPORT ": LET L(1)=LEN T$(1): LET V(1)=INT ((32-L(1))/2): LET L(2)=LEN (T$(2)): LET V(2)=INT ((32-L(2))/2)
2330 LET T$(3)="RACE NUMBER "+STR$ (RACENUMBER): LET L(3)=LEN T$(3): LET V(3)=INT ((32-L(3)/2))
2340 RETURN
2350 INK 6: PAPER 0: BORDER 0
2360 GO SUB 3640
2370 DATA "1-1","4.00","2.80","2.20","6-5","4.40","3.00","2.20","7-5","4.80","3.20","2.80","8-5","5.20","3.20","2.80","9-5","5.60","3.20","2.80","2-1","6.00","3.40","2.80","5-2","7.00","3.60","3.00","3-1","8.00","4.00","3.00","4-1","10.00","5.20","3.40","5-1","12.00","6.00","4.00","6-1","12.00","7.00","4.40","8-1","18.00","8.00","5.20"
2380 DATA "10-1","22.00","8.00","5.20","20-1","42.00","18.00","10.00"
2390 PAPER 6: INK 4: BORDER 6: CLS : PRINT "********************************": PRINT TAB 10;"WAGER MASTER": PRINT "________________________________"
2400 INK 2
2410 PRINT " THE MENU :": PRINT '"1> STANDARD PAYOFFS": PRINT '"2> RETURN PER SPECIFIC WAGER": PRINT '"3> RETURN PER SPECIFIC ODDS": PRINT '"4> DAILY DOUBLE WAGERS": PRINT '"5> PERFECTA, EXACTA TYPE WAGERS"
2420 PRINT '"6> TRIFECTA,TRIPLE TYPE WAGERS": PRINT '"7> "; INK 2;"Run HORSES"
2430 REM
2440 PRINT TAB 4; INK 7; PAPER 1;"FEDERAL HILL SOFTWARE CO.": PRINT TAB 9; INK 7; PAPER 1;"BALTIMORE, MD"
2450 PRINT " < TYPE NO. OF SELECTION >"
2460 LET Z$=INKEY$: IF Z$="" THEN GO TO 2460
2465 IF Z$<CHR$ (49) OR Z$>CHR$ (55) THEN GO TO 2460
2470 IF VAL z$<1 OR VAL z$>7 THEN GO TO 2460
2480 LET AA=VAL Z$: GO TO (2490 AND AA=1)+(2610 AND AA=2)+(2870 AND AA=3)+(3110 AND AA=4)+(3260 AND AA=5)+(3430 AND AA=6)+(100 AND AA=7)
2490 INK 7: PAPER 1: BORDER 1: CLS : PRINT "********************************": PRINT "ESTIMATED PAYOFF ON $2.00 WAGER": PRINT "********************************"
2500 PRINT "-ODDS-";TAB 9;"-WIN-";TAB 17;"-PLACE-";TAB 26;"-SHOW-"
2510 PRINT "------ ----- ------- ------"
2520 FOR X=1 TO 14
2530 REM
2540 REM
2550 REM
2560 PRINT O$(X);: LET T=VAL (W$(X)): GO SUB CASH: PRINT " ";Q$;: LET T=VAL (P$(X)): GO SUB CASH: PRINT " ";Q$;: LET T=VAL (S$(X)): GO SUB CASH: PRINT Q$
2570 NEXT X
2580 PRINT AT 21,12;"(M)enu"
2590 PAUSE 60: PAUSE 0
2600 GO TO 2390
2610 CLS
2620 PRINT "********************************": PRINT " RETURN PER SPECIFIC WAGER": PRINT "********************************"
2630 PRINT "SELECT ANTICIPATED ODDS:": PRINT '"(1) 1-1 (2) 6-5 (3)7-5 (4) 8-5": PRINT "(5) 9-5 (6) 2-1 (7)5-2 (8) 3-1"
2640 PRINT "(9) 4-1 (10) 5-1 (11) 6-1 ": PRINT "(12) 8-1 (13) 10-1 (14) 20-1"
2650 PRINT "--------------------------------"
2660 ON ERR GO TO 2660: INPUT "SELECT (1 - 14) ";Y$: IF VAL Y$>14 THEN GO TO 2660
2670 ON ERR RESET : LET X=VAL Y$: PRINT "ODDS = ";O$(X);":::";
2680 ON ERR GO TO 2680: INPUT "HOW MUCH TO WIN ? ";WM: PRINT AT 10,15;"W=";WM;: INPUT "HOW MUCH TO PLACE ? ";PM: PRINT " P=";PM;: INPUT "HOW MUCH TO SHOW ? ";SM: PRINT " S=";SM
2690 ON ERR RESET : PRINT "FOR A HORSE AT ";O$(X);" ODDS"
2700 PRINT "TOTAL WAGER OF $";: LET T=WM+PM+SM: GO SUB CASH: PRINT Q$
2710 PRINT "YOUR PAYOFF WOULD BE :"
2720 LET W=VAL W$(X)/2: LET P=VAL P$(X)/2: LET S=VAL S$(X)/2
2730 PRINT "WIN $";: LET T=WM*W: GO SUB CASH: PRINT Q$
2740 PRINT "PLACE $";: LET T=PM*P: GO SUB CASH: PRINT Q$
2750 PRINT "SHOW $";: LET T=SM*S: GO SUB CASH: PRINT Q$
2760 PRINT " ------"
2770 PRINT "TOTAL $";: LET T=(WM*W)+(PM*P)+(SM*S): GO SUB CASH: PRINT Q$
2780 PRINT "LESS $";: LET T=WM+PM+SM: GO SUB CASH: PRINT Q$
2790 PRINT "PROFIT $";: LET T=((WM*W)+(PM*P)+(SM*S))-(WM+PM+SM): GO SUB CASH: PRINT Q$
2800 PRINT AT 21,5;"<A>nother <M)enu"
2810 LET Z$=INKEY$: IF Z$="" THEN GO TO 2810
2820 IF Z$="A" THEN GO TO 2850
2830 IF Z$="M" THEN GO TO 2390
2840 GO TO 2810
2850 FOR L=10 TO 21: PRINT AT L,0;" ": NEXT L: PRINT AT 10,0;
2860 GO TO 2660
2870 CLS
2880 PRINT "********************************": PRINT " RETURN per SPECIFIC ODDS": PRINT "********************************"
2890 PRINT '"SELECT ANTICIPATED ODDS:": PRINT '"(1) 1-1 (2) 6-5 (3) 7-5": PRINT "(4) 8-5 (5) 9-5 (6) 2-1": PRINT "(7) 5-2 (8) 3-1 (9) 4-1"
2900 PRINT "(10) 5-1 (11) 6-1 (12) 8-1": PRINT "(13) 10-1 (14) 20-1"
2910 PRINT "--------------------------------"
2920 ON ERR GO TO 2920: INPUT "SELECT (1 - 14) ";Y$: IF VAL Y$>14 THEN GO TO 2920
2930 ON ERR RESET : LET X=VAL Y$: PRINT " ODDS=";O$(X)
2940 PRINT TAB 8;"WIN ONLY ->"
2950 PAUSE 120
2960 LET MU=VAL (W$(X))/2
2970 PRINT "WAGER $ 2.00 PAYOFF $";: LET T=2*MU: GO SUB CASH: PRINT Q$
2980 PRINT "WAGER $ 4.00 PAYOFF $";: LET T=4*MU: GO SUB CASH: PRINT Q$
2990 PRINT "WAGER $ 5.00 PAYOFF $";: LET T=5*MU: GO SUB CASH: PRINT Q$
3000 PRINT "WAGER $ 6.00 PAYOFF $";: LET T=6*MU: GO SUB CASH: PRINT Q$
3010 PRINT "WAGER $10.00 PAYOFF $";: LET T=10*MU: GO SUB CASH: PRINT Q$
3020 PRINT "WAGER $20.00 PAYOFF $";: LET T=20*MU: GO SUB CASH: PRINT Q$
3030 PRINT "WAGER $50.00 PAYOFF $";: LET T=50*MU: GO SUB CASH: PRINT Q$
3040 PRINT AT 21,5;"<A>nother <M)enu"
3050 LET Z$=INKEY$: IF Z$="" THEN GO TO 3050
3060 IF Z$="A" THEN GO TO 3090
3070 IF z$="M" THEN GO TO 2390
3080 GO TO 3050
3090 PRINT AT 12,0;: FOR L=13 TO 22: PRINT " ": NEXT L: PRINT AT 12,0;
3100 GO TO 2920
3110 CLS : FOR l=1 TO 4: PRINT " ": NEXT l: PRINT "********************************": PRINT " THE DAILY DOUBLE SELECTION": PRINT "********************************"
3120 ON ERR GO TO 3120: BEEP .2,.2: INPUT "TOP CHOICE-1ST RACE ";T1: BEEP .3,.3: INPUT "2ND CHOICE-1ST RACE ";T2: BEEP .4,.4: INPUT "TOP CHOICE-2ND RACE ";T3: BEEP .5,.5: INPUT "2ND CHOICE-2ND RACE ";T4
3130 ON ERR RESET : PRINT "--------------------------------"
3140 LET G$(1)="KEY BET: ": LET G$(2)=STR$ (T1): LET G$(3)=STR$ (T3): LET J$=G$(2, TO 2)+" -"+G$(3, TO 2)
3150 PRINT G$(1);" ";J$
3160 PRINT "Also: ";T1;"-";T4;" ** ";T2;"-";T3
3170 PRINT "POSSIBLE HEDGE: ";T2;"-";T4: PRINT "--------------------------------"
3180 PRINT "--------------------------------"
3190 PRINT AT 21,6;"[M]enu [P]rinter"
3200 LET Z$=INKEY$: IF Z$="" THEN GO TO 3200
3210 IF Z$="M" THEN GO TO 2390
3220 GO TO (3230 AND Z$="P")+(2390 AND Z$="M")
3225 GO TO 3210
3230 PRINT "PRINTING": LPRINT '"--------------------------------": LPRINT " **DAILY DOUBLE SELECTION **": LPRINT "KEY BET: ";T1;"-";T3: LPRINT "Also: ";T1;"-";T4;" and ";T2;"-";T3
3240 LPRINT '"POSSIBLE HEDGE BET:";T2;"-";T3: LPRINT "--------------------------------"
3250 PRINT "PRINT ACTION FINISHED": PAUSE 150: GO TO 2390
3260 ON ERR RESET : CLS : PRINT "********************************": PRINT " PERFACTA/EXACTA COMBINATIONS";" ********************************"
3270 ON ERR GO TO 3270: BEEP .25,9: INPUT "ENTER TOP CHOICE ";T1
3280 BEEP .25,11: INPUT "SECOND CHOICE ";T2: BEEP .25,13: INPUT "THIRD CHOICE ";T3: PRINT "FIRST CHOICE ";T1: PRINT "SECOND CHOICE ";T2: PRINT "THIRD CHOICE ";T3
3290 ON ERR RESET : PRINT "--------------------------------"
3300 PRINT "The COMBINATIONS :"
3310 PRINT " ";T1;"-";T2;" ** ";T1;"-";T3
3320 PRINT " ";T2;"-";T1;" ** ";T3;"-";T1
3330 PRINT '"IF TOP CHOICE IS 5-1 OR GREATER": PRINT "CONSIDER PLAYING ";T1;"-all"
3340 PRINT "--------------------------------"
3350 PRINT AT 21,4;"[M]enu [P]rinter"
3360 LET X$=INKEY$: IF x$="" THEN GO TO 3360
3370 GO TO (2390 AND X$="M")+(3380 AND X$="P")
3375 GO TO 3350
3380 ON ERR RESET : ON ERR GO TO 3380: BEEP .25,8: INPUT "INPUT RACE NO. ";RN: LPRINT "--------------------------------": LPRINT " * PERFECTA/EXACTA WAGERING *"
3390 ON ERR RESET : PRINT "PRINTING": LPRINT TAB 6;"RACE NO. ";RN: LPRINT '"Combinations To Play": LPRINT TAB 4;T1;"-";T2;TAB 20;T1;"-";T3: LPRINT TAB 4;T2;"-";T1;TAB 20;T3;"-";T1
3400 LPRINT '"IF CHOICE IS 5-1 OR UP CONSIDER": LPRINT TAB 4;T1;"-all"
3410 LPRINT '"--------------------------------"
3420 PRINT '"PRINTING COMPLETE": BEEP .25,10: PAUSE 300: GO TO 2390
3430 CLS : PRINT "********************************": PRINT " TRIPLE/TRIFECTA COMBINATIONS"
3440 ON ERR GO TO 3440: PRINT '"ENTER HORSE NUMBERS": BEEP .25,6: INPUT "TOP SELECTION ";T1
3450 BEEP .25,7: INPUT "2ND SELECTION ";T2
3460 BEEP .25,8: INPUT "3RD SELECTION ";T3
3470 BEEP .25,9: INPUT "4TH SELECTION ";T4
3480 ON ERR RESET : PRINT "TOP SELECTION ";T1: PRINT "2ND SELECTION ";T2: PRINT "3RD SELECTION ";T3: PRINT "4TH SELECTION ";T4: PRINT "--------------------------------"
3490 INK 4: PAPER 7: PRINT "TRIPLE SELECTIONS: ": PRINT TAB 4;T1;"-";T2;"-";T3: PRINT TAB 4;T1;"-";T2;"-";T4
3500 PRINT TAB 4;T1;"-";T3;"-";T2;TAB 18;T1;"-";T3;"-";T4: PRINT TAB 4;T1;"-";T4;"-";T2;TAB 18;T1;"-";T4;"-";T3
3510 PRINT '"THE HEDGE BOX : ";T1;"-";T2;"-";T3: PRINT "--------------------------------"
3520 PRINT AT 21,6;"[M]enu [P]rinter"
3530 LET X$=INKEY$: IF X$="" THEN GO TO 3530
3540 GO TO (2390 AND X$="M")+(3550 AND X$="P")
3545 GO TO 3530
3550 PRINT '"PRINTING": LPRINT "--------------------------------": LPRINT " TRIPLE SELECTION"
3560 LPRINT 'T1;"-";T2;"-";T3;TAB 20;T1;"-";T2;"-";T4
3570 LPRINT 'T1;"-";T3;"-";T2;TAB 20;T1;"-";T3;"-";T4
3580 LPRINT 'T1;"-";T4;"-";T2;TAB 20;T1;"-";T4;"-";T3
3590 LPRINT '"The Hedge Box : ";T1;"-";T2;"-";T3
3600 LPRINT "--------------------------------"
3610 PRINT '"PRINTING OPERATION COMPLETED": PAUSE 120
3620 GO TO 2390
3630 GO TO 90
3640 FOR X=1 TO 14
3650 READ O$(X): READ W$(X): READ P$(X): READ S$(X)
3660 NEXT X
3670 RESTORE : RETURN
3680 LET N=0: DIM Q$(8): LET Q$=STR$ T
3690 IF Q$(8)=CHR$ 32 THEN LET Q$=CHR$ 32+Q$( TO 7): GO TO 3690
3700 FOR L=1 TO 8
3710 IF Q$(L)="." THEN GO TO 3730
3720 NEXT L
3730 IF L=9 THEN LET Q$=Q$(4 TO )+".00"
3740 IF L=7 THEN LET Q$=Q$(2 TO )+"0"
3750 IF Q$(6)<>"." THEN LET N=1
3760 RETURN
4010 RETURN
9992 SAVE "HANDIC.B1" LINE 1
9998 REM was LKDOS-onlyNote: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.



