DECLARE FUNCTION j2$ (n!) DECLARE FUNCTION pdata$ (tm!, pb$, ps!, pt!) DECLARE FUNCTION j$ (j!) DECLARE FUNCTION ptime$ (tm!) DECLARE SUB sorttemp () pbpoints = 5 winpoints = 50 wide = 6: REM printout this many last races ff$ = CHR$(12) DIM races$(16), sort$(16), cnt(16) RESTORE racedata noofraces = 0 DO UNTIL name$ = "end" noofraces = noofraces + 1 READ name$, srt$ races$(noofraces) = name$: sort$(noofraces) = srt$ LOOP noofraces = noofraces - 1 IF srt$ <> "end" THEN PRINT #1, "Race data error": STOP OPEN "champ97.txt" FOR OUTPUT AS #1 OPEN "woodys" FOR OUTPUT AS #2 RESTORE runnerdata REM check data count = 0: name$ = "" DO UNTIL name$ = "end" READ name$, div IF name$ <> "end" THEN count = count + 1 FOR r = 1 TO noofraces READ tm, ps, pb$ IF tm <> 0 OR ps <> 0 THEN cnt(r) = cnt(r) + 1 NEXT READ test$ IF test$ <> "end" THEN PRINT "Error in runner data": STOP END IF LOOP DIM runners$(count), divs(count) DIM timedata(noofraces, count), posdata(noofraces, count), pbdata$(noofraces, count) DIM points(noofraces, count), temp(2, count) RESTORE runnerdata FOR runner = 1 TO count READ runners$(runner), divs(runner) FOR race = 1 TO noofraces READ timedata(race, runner), posdata(race, runner), pbdata$(race, runner) IF pbdata$(race, runner) = "Y" THEN pbdata$(race, runner) = "y" NEXT READ dummy$: IF dummy$ <> "end" THEN STOP NEXT READ a$, b$ IF a$ <> "end" AND b$ <> "end" THEN STOP FOR race = 1 TO noofraces PRINT #2, : PRINT #2, : PRINT #2, TAB(10); races$(race) IF sort$(race) = "p" OR sort$(race) = "P" THEN REM sort on pos FOR r = 1 TO count temp(1, r) = r IF posdata(race, r) = 0 THEN temp(2, r) = 999999 ELSE temp(2, r) = posdata(race, r) NEXT ELSE REM sort on time FOR r = 1 TO count temp(1, r) = r IF timedata(race, r) = 0 THEN temp(2, r) = 999999 ELSE temp(2, r) = timedata(race, r) NEXT END IF sorttemp FOR r = 1 TO count IF temp(2, r) = 999999 THEN p = 0 ELSE PRINT #2, TAB(10); j$(r); " "; runners$(temp(1, r)); TAB(35); ptime$(timedata(race, temp(1, r))); IF pbdata$(race, temp(1, r)) = "y" THEN PRINT #2, " pb" ELSE PRINT #2, n = 0: first = 0 FOR x = 1 TO count IF temp(2, x) = temp(2, r) THEN n = n + 1: IF first = 0 THEN first = x NEXT p = winpoints - first + 1 - .5 * (n - 1) END IF IF p > 0 AND (pbdata$(race, temp(1, r)) = "y") THEN p = p + pbpoints points(race, temp(1, r)) = p IF p > 0 THEN posdata(race, temp(1, r)) = r NEXT NEXT REM add up points to get total FOR r = 1 TO count s = 0 FOR t = 1 TO noofraces s = s + points(t, r) NEXT points(0, r) = s NEXT FOR r = 1 TO count temp(1, r) = r: temp(2, r) = points(0, r) NEXT sorttemp REM find last few races only FOR r = noofraces TO 1 STEP -1 IF cnt(r) > 0 THEN lastrace = r: EXIT FOR NEXT IF lastrace < wide THEN lastrace = wide CLS PRINT #1, TAB(10 * wide); "Sunderland Strollers Club Championship 1997" PRINT #1, PRINT #1, "Pos Div Name Tot."; SPC(16 - LEN(races$(lastrace - wide + 1)) / 2); FOR t = lastrace - wide + 1 TO lastrace PRINT #1, races$(t); SPC(20 + LEN(races$(t)) / 2 - LEN(races$(t)) - LEN(races$(t + 1)) / 2); NEXT PRINT #1, TAB(39); "time pos pts "; FOR r = 1 TO wide - 1 PRINT #1, "time pos pts "; NEXT PRINT #1, FOR r = count TO 1 STEP -1 p = temp(1, r) PRINT #1, j$(count - r + 1); " "; j$(divs(p)); " "; runners$(p); TAB(27); j2$(points(0, p)); SPC(3); FOR t = lastrace - wide + 1 TO lastrace IF posdata(t, p) = 0 AND timedata(t, p) = 0 THEN PRINT #1, SPC(20); ELSE PRINT #1, SPC(2); pdata$(timedata(t, p), pbdata$(t, p), posdata(t, p), points(t, p)); END IF NEXT PRINT #1, IF (count - r + 1) MOD 5 = 0 THEN PRINT #1, STRING$(33, "."); FOR t = lastrace - wide + 1 TO lastrace PRINT #1, STRING$(20, "."); NEXT PRINT #1, END IF NEXT PRINT #1, : PRINT #1, PRINT #1, " Division 1 Division 2 Division 3 Division 4 Division 5" PRINT #1, DIM d$(5), pts(5) n = 0 flag = 1 DO UNTIL flag = 0 flag = 0: n = n + 1 FOR r = 1 TO 5: d$(r) = "": cnt(r) = 0: NEXT FOR r = count TO 1 STEP -1 p = temp(1, r) REM search for n th member of each division cnt(divs(p)) = cnt(divs(p)) + 1 IF cnt(divs(p)) = n THEN d$(divs(p)) = runners$(p): pts(divs(p)) = points(0, p): flag = 1 NEXT IF flag = 1 THEN FOR r = 1 TO 5 IF d$(r) <> "" THEN PRINT #1, TAB(30 * r - 30); j$(n); " "; d$(r); TAB(30 * r - 8); j2$(pts(r)); END IF NEXT PRINT #1, END IF LOOP PRINT #1, PRINT #1, "If any of the above information is incorrect or missing, inform Woody and/or Dicka as soon as possible." PRINT #1, "Remember it is YOUR responsibility to get results/times/p.b.s to Woody within 4 weeks of the race." PRINT #1, PRINT #1, "Points are awarded as follows.." PRINT #1, "50 points to first stroller in any championship race, 49 to 2nd, 48 to 3rd etc." PRINT #1, "5 additional points for any PB in a championship race over a standard distance (5k, 10k, 10mile, 1/2 marathon & marathon)." PRINT #1, "All positions are determined by actual finishing position in the race with the exception of the Marathon which is judged on the runners recorded time." PRINT #1, PRINT #1, "The list of Championship races is :" PRINT #1, PRINT #1, "Woody's 5k+ Jarrow & Hebburn 10k Wed 27th August" PRINT #1, "Redcar 1/2 marathon St.Peters 10k Sun 31st August this replaces Raby Castle 10k which has been cancelled" PRINT #1, "Any Full Marathon Houghton Feast Sat 11th October" PRINT #1, "Blyth Valley 10 mile Kielder 6 mile Sun 26th October" PRINT #1, "Keswick 1/2 marathon Heaton 10k Sun 9th November" PRINT #1, "Blaydon Race Richmond 10k Sun 16th November" PRINT #1, "Phoenix 14 Sun 20th July Loftus Poultry Run Sun 21st December" CLOSE INPUT "The results are stored in text file 'CHAMP97.txt'. Print it now?", a$ IF LEFT$(a$, 1) = "Y" OR LEFT$(a$, 1) = "y" THEN SHELL "type champ97.txt >lpt1:" LPRINT ff$: REM printer form feed END IF END racedata: REM race data, in order Race name, t/p (sort on time or position) DATA "Woodys 5K",p,"Redcar 1/2M",p,"Marathon",t,"Blyth 10",p,"Keswick",p DATA "Blaydon",t,"Phoenix",t,"Jarrow & Hebburn",t,"St.Peters 10k",p,"Houghton Feast",p DATA "Kielder",p,"Heaton",p,"Richmond",p,"Loftus",p DATA end,end runnerdata: REM Runner data in order Name,Division, race1 time, race1 pos,pb? race2 time,race2 pos,pb? ..... REM times in form HHMMSS with no separator DATA Paul Dixon,1, 1913,1,n, 11936,1,y, 25530,0,n, 11543,17,n, 12605,3,n, 3314,,n, 12652,1,n, 3649,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Dave Dixon,1, 1934,2,n, 12406,5,n, ,,, 10134,3,n, 12359,1,n, ,,, ,,, 3921,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Wilson McKnight,1, 1939,3,n, 12350,4,n, ,,, ,,, ,,, 3432,,n, 12950,3,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Geoff Prior,1, 2000,4,n, 12221,3,n, 30825,0,y, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Steve Hobday,1, 2032,5,n, 12642,9,n, ,,, ,,, 13213,7,n, 3533,,n, ,,, 3941,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Les Copeland,1, 0,6,n, 13326,11,n, ,,, 10520,7,n, ,,, 3516,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Bob Blair,1, 2058,7,n, 12613,8,n, 30851,0,y, 10632,10,n, 12653,5,n, 3429,,, 13351,6,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Dave Warnaby,1, 2100,8,n, 12521,6,n, ,,, 10230,4,n, ,,, ,,, 13252,5,n, 3747,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Graham Clazey,1, 2109,9,n, ,,, 30355,0,y, 10315,5,n, ,,, 3509,,, 12954,4,n, 3934,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Peter Watts,1, 2131,10,n, 12212,2,y, 25857,0,y, 10026,2,y, 12437,2,n, 3437,,, 12843,2,n, 3829,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Ken Tweedy,2, 0,11,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Steve Ramsden,2, 2143,12,n, 13347,12,n, ,,, 10843,11,n, 13455,10,n, ,,, 13745,,n, 4157,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Gerry O'Brien,2, 2151,13,n, 13014,10,n, 32550,0,n, 10543,8,y, 13036,6,n, 3650,,, 13503,,n, 4146,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA John Woodward,2, 2204,14,n, 13506,14,n, ,,, 10946,12,n, 14107,13,n, 3805,,, 14354,,n, 4329,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Ev Colgin,3, 0,15,n, ,,, 34812,0,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Brian Finney,2, 2240,16,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Ian Semens,2, 0,17,n, ,,, ,,, ,,, ,,, ,,, 13658,,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Allen Routledge,3, 2305,18,n, 13406,13,n, 32228,0,y, ,,, 13703,11,n, 3859,,, ,,, 4445,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Mickey Crozier,2, 2310,19,n, ,,, ,,, ,,, ,,, ,,, ,,, 4250,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA John Wilson,3, 2311,20,n, ,,, ,,, ,,, ,,, ,,, ,,, 4610,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Alan Robertson,3, 2312,21,n, ,,, ,,, ,,, ,,, ,,, ,,, 4458,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Paul Thomas,4, 2321,22,n, ,,, ,,, 11552,18,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Alan Duffy,2, 0,23,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Phil Tweddell,2, 2356,24,n, ,,, 40728,0,n, 11408,15,n, 14615,16,n, 4020,,, 15041,,n, 4539,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Ian Maxwell,3, 0,25,n, ,,, ,,, 11133,14.5,y, 14713,17,n, 4055,,, 20035,,n, 4718,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Dave Pounder,3, 0,26,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Dennis Colgin,4, 0,27,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Dave Clear,4, 0,28,n, ,,, ,,, 11935,20,n, 14907,18,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Tony Gair,4, 0,29,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Bill Hitchcock,4, 0,30,n, ,,, ,,, ,,, ,,, ,,, 20800,,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Eddie Airson,4, 2443,31,n, 14146,16,n, 33638,0,n, 11423,16,n, 14327,15,n, 4110,,, 15304,,n, 4646,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Lesley Haldane,3, 2445,32,n, 14257,19,y, ,,, 10956,13,y, ,,, 4122,,, ,,, 4652,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Sandra Maxwell,4, 2622,33,n, 14720,20,n, 40557,0,y, 11659,18.5,y, 15730,23,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA John Cosgrove,5, 2758,34,n, 15911,21,y, ,,, ,,, 20702,24,n, 4604,,, 20033,,n, 5054,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Richie Sampson,5, 0,35,n, ,,, ,,, 14800,23,n, ,,, 4932,,, ,,, 5633,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Bruce Davison,4, 0,36,n, ,,, ,,, 12147,21,n, 15647,22,n, 4454,,, 15535,,n, 4853,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Mark Feeley,1, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Derek Dixon,1, ,,, 12613,7,n, ,,, 5948,1,n, 12610,4,n, 4008,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Steve Wills,1, ,,, ,,, ,,, ,,, ,,, 3643,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Colin Glass,1, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Roger Garrington,2, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Colin Rump,2, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Darren Milligan,2, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Dave Burke,2, ,,, ,,, ,,, ,,, ,,, ,,, 14742,,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Phil Watson,2, ,,, 14241,18,n, 32228,0,n, 10346,6,n, ,,, 3711,,, 15618,,n, 4111,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Dawn Elliot,3, ,,, ,,, 31840,0,y, 10617,9,y, 13330,9,n, ,,, 14332,,n, 4245,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Ken Younger,3, ,,, ,,, ,,, ,,, ,,, 4145,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Alan Tait,3, ,,, 13837,15,y, ,,, 11118,14,n, 14019,12,n, 3923,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Danny McFarlane,3, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Derek Wright,3, ,,, ,,, 31840,0,y, ,,, 13330,8,n, 3733,,, ,,, 4246,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Neil Wilson,4, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Paul Marshall,4, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Mike O'Hara,4, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Linda Raine,4, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Robert Allington,4, ,,, ,,, 43832,0,n, ,,, 15249,20,n, 4420,,, 20340,,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Shiela Richards,4, ,,, ,,, ,,, ,,, ,,, 4557,,, ,,, 4855,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Ray Collins,5, ,,, ,,, ,,, 11757,19,n, 15055,19,n, 4335,,, 15615,,n, 4954,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Keith Turnbull,5, ,,, ,,, ,,, 12652,22,n, 15625,21,n, 4522,,, 15920,,n, 5108,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Paul Baker,5, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Kim Easton,4, ,,, 14241,17,y, ,,, ,,, ,,, 4106,,, 15618,,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Jacquie Pitt,5, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Joe Gordon,5, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Sandra Quinn,5, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Carol Vinter,5, ,,, 21150,22,n, ,,, ,,, ,,, 5801,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Paul Taylor,1, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Norman Felce,3, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Tony Howe,5, ,,, ,,, ,,, ,,, ,,, ,,, ,,, 4920,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Dave Wilkinson,5, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Steve McKenna,5, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Malcolm Cox,3, ,,, ,,, 35919,0,n, ,,, 14156,14,n, 3942,,, 14355,,n, 4410,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Ernie Johnson,5, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Ron Avery,3, ,,, ,,, ,,, ,,, ,,, ,,, 15034,,n, ,,, ,,, ,,, ,,, ,,, ,,, ,,,end DATA Julie Emmerson,5, ,,, ,,, ,,, ,,, ,,, ,,, ,,, 4642,,n, ,,, ,,, ,,, ,,, ,,, ,,,end DATA end,0 DATA end,0 FUNCTION j$ (j) REM return a right justified string of 3 characters j$ = RIGHT$(" " + STR$(j), 3) END FUNCTION FUNCTION j2$ (n) REM return a decimal point justified string of 5 characters IF INT(n) = n THEN j2$ = RIGHT$(" " + STR$(n), 3) + " " ELSE j2$ = RIGHT$(" " + STR$(n), 5) END IF END FUNCTION FUNCTION pdata$ (tm, pb$, ps, pt) REM return a formatted string IF tm = 0 AND ps = 0 THEN pdata$ = " " ELSE a$ = ptime$(tm) IF pb$ = "Y" OR pb$ = "y" THEN a$ = a$ + "pb" ELSE a$ = a$ + " " REM pdata$ = a$ + " " + RIGHT$(STR$(ps), 2) + " " + RIGHT$(STR$(pt), 2) pdata$ = a$ + " " + RIGHT$(STR$(ps), 2) + " " + j2$(pt) END IF END FUNCTION FUNCTION ptime$ (tm) REM convert a time in the format HHMMSSS to H:MM:SS and suppress leading 0's IF tm = 0 THEN ptime$ = " " ELSE a$ = RIGHT$(STR$(1000000 + tm), 5) IF tm > 5959 THEN ptime$ = LEFT$(a$, 1) + ":" + MID$(a$, 2, 2) + ":" + RIGHT$(a$, 2) ELSE ptime$ = " " + MID$(a$, 2, 2) + ":" + RIGHT$(a$, 2) END IF END IF END FUNCTION SUB sorttemp SHARED temp(), count FOR r% = 1 TO count - 1 min = temp(2, r%): p% = r% FOR t% = r% + 1 TO count IF temp(2, t%) < min THEN min = temp(2, t%): p% = t% NEXT SWAP temp(1, p%), temp(1, r%): SWAP temp(2, p%), temp(2, r%) NEXT END SUB