13	!
	!	PROGRAM WRITTEN BY G. COCK - LATEST MODS. 10/1/74
	!	YACHTING RESULTS USING OLYMPIC POINTS SCORES SYSTEM
	!	
	!	KEYED IN BY TIMOTHY SHANE MCCOY 
	!	AT CENTRAL STATE UNIVERSITY
	!	ON PDP 11/45
	!	VERSION RSTS/E  V06C
	!
110	DIM P(7)
120	DIM #1,S$(100),N$(100),C$(100),R(7,100),Q(7,100)
130	DIM #2,H$(3),B(1),H(7),S(7),D$(7),T$(7),F(100),D(100),T(2,100)
131	!
	!	H$ = TITLES		E  = B = ENTRIES
	!	P  = OLYMPIC POINTS	H  = HEAT NO.
	!	S  = NO. STARTERS	D$ = DATE
	!	T$ = START TIME		S$ = SAIL NO.
	!	N$ = SKIPPER		C$ = STATE OR COUNTRY
	!	R  = POINTS		Q  = POSITION
	!	F  = PLACING		D  = DUMMY
	!	T  = TOTAL AND CORR. POINTS
	!
135	OPEN "SAILS.DAT" AS FILE 1
136	OPEN "SAILS1.DAT" AS FILE 2
140	DATA 0.0,3.0,5.7,8.0,10.0,11.7,6.0
150	READ P(1),P(2),P(3),P(4),P(5),P(6),P(7)
155	X$ = "\          \###.# ###.# ###.# ###.# ###.# ###.# ###.# ###.# ###.#"
156	Z$ = "\          \\            \###   ###   ###   ###   ###  ###  ###  ###"
220	PRINT "SELECT PROCEDURE NO.  -"
225	PRINT "1 - INITIALISATION"
230	PRINT "2 - ADDITIONS"
235	PRINT "3 - RESULTS"
236	PRINT "4 - ADJUSTMENTS"
237	PRINT "5 - REPRINT"
238	PRINT "6 - HANDICAP"
240	INPUT P1
250	ON P1 GOTO 260,290,530,530,1135,2400
260	!
	!	INITIALISATION
	!
263	FOR N = 1 TO 7
264	FOR M = 1 TO 100
265	R(N,M) = 0
266	Q(N,M) = 0
267	NEXT M
268	NEXT N
270	PRINT "TYPE TITLE - MAX. 42 CHARACTERS, COMMA AFTER 14TH AND 28TH"
280	INPUT H$(1),H$(2),H$(3)
290	PRINT "TYPE NO. ENTRIES - MAX NO. 100"
300	INPUT E
301	B(1) = E
310	PRINT "TYPE ENTRIES - SAIL NO., SKIPPER, STATE OR COUNTRY"
315	PRINT "               MAX. 14 CHARACTERS PER ITEM"
320	PRINT "    E.G.  KA1234,J  BROWN,N.S.W."
330	PRINT "          KZ5678,W  WILLIAMSON,NEW ZEALAND"
340	PRINT "WHEN FINISHED, TYPE  END,END,END"
345	L1 = 1
346	IF P1 = 2
	THEN L1 = E
350	FOR N = L1 TO 100
360	INPUT S$(N),N$(N),C$(N)
370	IF S$(N) = "END"
	THEN 390
380	NEXT N
390	PRINT
410	PRINT 
420	PRINT "SUMMARY OF INITIALISATION"
430	PRINT "-------------------------"
440	PRINT
450	PRINT "TITLE-";H$(1);H$(2);H$(3)
460	PRINT "NO. ENTRIES- ";E
470	PRINT "LIST NO.","SAIL NO.","SKIPPER","STATE OR COUNTRY"
480	PRINT "--------","--------","-------","----------------"
490	PRINT
491	L1 = 1
492	IF P1 = 1
	THEN 500
493	L1 = E
494	FOR N = 1 TO 7
495	IF R(N,1) = 0 AND R(N,2) = 0
	THEN 498
496	R(N,E) = E + P(7)
497	Q(N,E) = -1
498	NEXT N
500	FOR N = L1 TO E
510	PRINT N,S$(N),N$(N),C$(N)
520	NEXT N
525	GOTO 4000
530	!
	!	RESULTS
	!
535	E = B(1)
570	PRINT
580	PRINT 
590	PRINT "TYPE RACE N0.,HEAT NO.,N0. STARTERS,START TIME,DATE"
591	PRINT
600	PRINT "E.G.  4,2,57,10.30A.M.,16/1/74"
601	PRINT
610	INPUT R1,H(R1),S(R1),T$(R1),D$(R1)
611	IF P1 = 4 
	THEN 620
612	!
	!	SET POINTS TO -1 TO DETERMINE NON-STARTERS
	!
613	FOR N = 1 TO 100
614	R(R1,N) = -1
615	NEXT N
620	PRINT "TYPE FINISHING POSITION AND SAIL NO."
630	PRINT "NOTE- DNF = POSITION  0"
640	PRINT "      DNS =     -    -1"
650	PRINT "      DSQ =     -    -2"
660	PRINT "       MP =     -    -3"
670	PRINT "E.G. 27,KA1234"
680	PRINT "     -2,KA4567"
690	PRINT "WHEN FINISHED, TYPE  -100,END"
700	PRINT " IF AN ERROR IS TYPED, JUST RETYPE LINE"
710	INPUT P2,Y$
720	IF P2 = -100
	THEN 1070
730	FOR Y1 = 1 TO E
740	IF Y$ = S$(Y1)
	THEN 780
750	NEXT Y1
760	PRINT "SAIL NO. DOES NOT EXIST - RETYPE LINE"
770	GOTO 710
780	!
	!	DETERMINE POINTS FOR PLACING
	!
790	Q(R1,Y1) = P2
800	IF P2 = 0
	THEN 950
810	IF P2 = -1
	THEN 920
820	IF P2 = -2
	THEN 980
830	IF P2 = -3
	THEN 1020
840	FOR N = 1 TO 6
850	IF P2 = N 
	THEN 900
860	NEXT N
870	!
	!	PLACE POINTS
	!
880	R(R1,Y1) = P2 + P(7)
890	GOTO 710
900	R(R1,Y1) = P(N)
910	GOTO 710
920	!
	!	DNS POINTS
	!
930	R(R1,Y1) = E + P(7)
940	GOTO 710
950	!
	!	DNF POINTS
	!
960	R(R1,Y1) = S(R1) + P(7)
970	GOTO 710
980	!
	!	DNF POINTS
	!
990	X = S(R1) + P(7) + S(R1)/10 + .99
1000	R(R1,Y1) = INT(X)
1010	GOTO 710
1020	!	
	!	MP(MATERIALLY PREJUDICED) POINTS
	!
1030	PRINT "TYPE ALLOCATED POINTS"
1050	INPUT R(R1,Y1)
1060	GOTO 710
1070	!
	!	POINTS FOR NON-STARTERS
	!
1080	FOR N = 1 TO E
1090	IF R(R1,N) > -1
	THEN 1120
1100	R(R1,N) = E + P(7)
1110	Q(R1,N) = -1
1120	NEXT N
1130	!
	!	CALCULATE TOTAL POINTS
	!
1131	GOTO 1140
1135	PRINT "TYPE RACE NO."
1136	INPUT R1
1137	E = B(1)
1140	O1 = 1
1141	GOTO 1145
1142	O1 = 2
1145	FOR N = 1 TO E
1150	T(1,N) = 0.0
1160	FOR M = 1 TO R1
1170	IF O1 = 1 
	THEN T(1,N) = R(R1,N)
	ELSE T(1,N) = T(1,N) + R(M,N)
1180	NEXT M
1190	!
	!	CALCULATE CORRECTED TOTAL POINTS
	!
1200	IF O1 = 1 
	THEN 1280
1210	W1 = R(1,N)
1220	FOR L = 1 TO R1
1230	IF W1 >= R(L,N) 
	THEN 1260
1250	W1 = R(L,N)
1260	NEXT L
1270	T(2,N) = T(1,N) - W1
1280	NEXT N
1290	!
	!	SORT POINTS INTO ASCENDING ORDER
	!
1300	FOR N = 1 TO E
1320	IF R1 = 1 OR O1 = 1 
	THEN T(2,N) = T(1,N)
1330	D(N) = T(2,N)
1340	NEXT N
1345	GOSUB 1350
1346	IF O1 = 1 
	THEN 1142
	ELSE 1830
1350	!
	!	INITIALISE I1 = 1 IN EVENT ALL POINTS IN ORDER
	!
1360	L1 = E - 1
1370	I1 = 1
1380	FOR N = 1 TO L1
1390	N1 = N + 1
1400	IF D(N1) >= D(N)
	THEN 1480
1420	D1 = D(N1)
1430	D(N1) = D(N)
1440	D(N) = D1
1450	I1 = N
1460	!
	!	I1 GIVES LOCATION OF LAST INTERCHANGE
	!	ALL POINTS BEYOND D(I1) ARE IN ORDER
	!
1480	NEXT N
1490	IF I1 = 1 
	THEN GOTO 1541
1500	!
	!	IF I1 = 1 ALL POINTS ARE IN ORDER
	!
1510	L1 = I1 - 1
1520	GOTO 1370
1530	!
	!	DETERMINE IF ANY POINTS ARE TIED
	!	PRINT POSITIONAL ORDER OF YACHTS
	!
1541	IF P1 = 6
	THEN 1680
1560	PRINT
1570	PRINT
1580	PRINT
1590	PRINT
1600	PRINT H$(1);H$(2);H$(3)
1610	PRINT "-"; FOR I = 1 TO 42
1611	PRINT 
1620	PRINT
1630	PRINT "POSITIONAL ORDER OF YACHTS AFTER RACE - ";R1
1640	PRINT 
1650	PRINT ,,,"STATE OR"
1651	PRINT "PLACE","SAIL NO.","SKIPPER","COUNTRY","CORR. POINTS"
1660	PRINT "-----","--------","-------","-------","------------"
1670	PRINT
1680	I1 = 1
1690	FOR N = I1 TO E
1700	I2 = 0
1710	FOR M = 1 TO E
1720	IF T(2,M) = D(N)
	THEN 1740
1730	GOTO 1770
1740	F(M) = N
1741	IF P1 = 6 AND N = S(R1)
	THEN F(M) = Q(R1,M)
1750	I2 = I2 + 1
1751	IF P1 = 6 
	THEN 1770
1760	PRINT N,S$(M),N$(M),C$(M),T(2,M)
1770	NEXT M
1780	IF I2 > 1 
	THEN 1810
1790	NEXT N
1800	GOTO 1825
1810	I1 = N + I2
1820	GOTO 1690
1825	RETURN
1830	!
	!	PRINT RESULTS IN LIST ORDER
	!
1840	PRINT
1860	PRINT
1870	PRINT
1880	PRINT
1890	PRINT H$(1);H$(2);H$(3)
1900	PRINT "-"; FOR I = 1 TO 42
1901	PRINT
1910	PRINT
1920	PRINT "POINTS RESULTS TO RACE - ";R1
1930	PRINT 
1940	PRINT "HEAT NO. ";H(R1);"   STARTERS";S(R1);"   START TIME ";T$(R1);"  DATE ";D$(R1)
1950	PRINT
1960	PRINT "SAIL NO.","  R1    R2    R3    R4    R5    R6    R7     T     T-1"
1970	PRINT "--------","  --    --    --    --    --    --    --    ---    ---"
1980	PRINT
1990	!
	!	SET POINTS OF 11.7 TO 117 FOR ZONE PRINTING
	!
2080	FOR N = 1 TO E
2090	PRINT USING X$,S$(N),R(1,N),R(2,N),R(3,N),R(4,N),R(5,N),R(6,N),R(7,N),T(1,N),T(2,N)
2100	NEXT N
2110	PRINT
2130	PRINT 
2140	PRINT
2150	PRINT
2160	PRINT H$(1);H$(2);H$(3)
2170	PRINT "-"; FOR I = 1 TO 42
2171	PRINT
2180	PRINT
2190	PRINT "POSITIONAL RESULTS TO RACE - ";R1
2200	PRINT
2210	PRINT "HEAT NO.";H(R1);"   STARTERS ";S(R1);"   START TIME ",T$(R1);"   DATE ";D$(R1)
2220	PRINT
2230	PRINT "SAIL NO.","SKIPPER"," R1    R2    R3    R4    R5    R6   R7   PL"
2240	PRINT "--------","-------"," --    --    --    --    --    --   --   --"
2250	PRINT
2260	FOR N = 1 TO E
2270	PRINT USING Z$,S$(N),N$(N),Q(1,N),Q(2,N),Q(3,N),Q(4,N),Q(5,N),Q(6,N),Q(7,N),F(N)
2280	NEXT N
2290	GOTO 4000
2400	!
	!	HANDICAP CALCULATIONS AND RESULTS
	!
2405	E = B(1)
2410	DEF FNA(D1,D2,D3) = D1*60 + D2 + D3/60
2420	PRINT "TYPE RACE NO.,START TIME,ELAPSED TIME"
2430	PRINT "E.G. 2,10,30,00,1,44,37 (N.B.  COMMAS SEPERATE HRS,MINS,SECS)"
2440	INPUT R1,T1,T2,T3,T4,T5,T6
2460	PRINT "TYPE SAIL NO.,HANDICAP,FINISH TIME"
2475	PRINT "WHEN FINISHED,TYPE END,,,,"
2500	INPUT Y$,H1,T7,T8,T9
2505	IF Y$ = "END"
	THEN 2910
2510	IF T1 > 6 AND T7 < 6
	THEN T7 = T7 + 12
2520	FOR Y1 = 1 TO E
2530	IF Y$ = S$(Y1) 
	THEN 2620
2540	NEXT Y1
2550	PRINT "SAIL NO. DOES NOT EXIST - RETYPE LINE"
2560	GOTO 2500
2620	T(2,Y1) = FNA(T7,T8,T9) - FNA(T4,T5,T6) * H1/100
2660	H2 = ((FNA(T7,T8,T9) - FNA(T1,T2,T3)) - FNA(T4,T5,T6))/FNA(T4,T5,T6) * 100
2780	T(1,Y1) = INT(H2*2+.25)/2
2850	GOTO 2500
2910	FOR N = 1 TO E
2915	IF Q(R1,N) < 1
	THEN T(2,N) = 1000
2920	D(N) = T(2,N)
2930	NEXT N
2940	GOSUB 1350
3030	PRINT
3040	PRINT "HANDICAP RESULTS FOR RACE - ";R1
3050	PRINT ,"POS","N.H."
3090	FOR N = 1 TO E
3100	IF F(N) < 1
	THEN 3130
3110	PRINT S$(N),F(N),T(1,N)
3120	GOTO 3140
3130	PRINT S$(N),F(N)
3140	NEXT N
4000	CLOSE 1,2
5000	END
