' ' RUNxxxx.BAS ' ' See the file RUN.HST for updates prior to the ones listed here ' ' v 401F - 1/8/12 - drive letter prompt now reads A-P, other minor tweeks ' ' v 401E - 1/1/06 - Changed delay logic to slow things down on these ' faster computers. Changed suggested delay values. ' ' v 401D - 7/1/94 - Reading color file earlier now. ' ' v 401C - 11/02/92 - Lee Bradley ' ' Tuned code supporting graph plotting functions (was off slightly). Work ' variable P4W introduced in code supporting message as a function of ' pace. LOG file header code made into a subroutine. All variables and ' labels are UPPERCASE now. Added RUN.SHT to list of files announced by ' Setup routine. RUN.GRF is archived now and included in delete list. ' Changed icon message array name and my entry in it. ' DECLARE SUB TESTDAY (DAY) ON ERROR GOTO ERRLAB: DIM PMA(2), ARM$(1), FEET$(3), ICONMSG$(10) ' arrays used PMA(0) = -1: PMA(1) = 0: PMA(2) = 1 ' plus/minus array (used in icon routine) ARM$(0) = "'": ARM$(1) = "`" ' body parts FEET$(0) = "\": FEET$(1) = "|": FEET$(2) = "/": FEET$(3) = "-" M$(1) = "Hey, man, I'm gettin' tired. Hit the bloomin' key ..." M$(2) = "I've done this route a few times now. Got any water?" M$(3) = "Marathon training's a bear. Longest run so far is 15." M$(4) = "This is getting redikalus. I'm getting nowhere fast!" M$(5) = "Hey, man, I'm gettin' tired. Hit the bloomin' key ..." M$(6) = "There was a young runner named Chas who blew 'em away at the pass." M$(7) = "There was a young runner named Lee who stretched + trained faithfully." MESG1$ = "" ' used to associate a message with a pace MESG1$ = MESG1$ + "Gold!!SilverBronzeExclntNear10Great!TerrifSpeedyV-Fast" MESG1$ = MESG1$ + "Fast!!Aokay!V-GoodNice-1Fine!!Avg. +AvergeBloAvgJst ok" MESG1$ = MESG1$ + "TadSloHmmm..Slow..Nd-HlpTry!!!Yek!!!CumON!Poor!!2 Bad!" MESG1$ = MESG1$ + "NO WAY" ESC$ = CHR$(27) ' Esc key ATP$ = "ABCDEFGHIJKLMNOP" ' A thru P ... drive letter string VER$ = "401F" CALL TESTDAY(DAY) ' get day number in year H2$ = "Day Date Dist H:MM:SS PACE Mesg Wkly" H3$ = H2$ + " Month Yearly AveD AveM AveYear" H4$ = "-": H5$ = "]": DV = VAL(MID$(DATE$, 4, 2)) T$ = ":": H6$ = " ": W = 15: O = 7: MV = VAL(MID$(DATE$, 1, 2)) YV = VAL(MID$(DATE$, 9, 2)): SL$ = "/" ' format strings QW$ = "#:\\:\\" QT$ = "##:\\": U$ = "\ \ \ \ ##.# #:\\:\\ ##:\\" Z$ = " \ \ ##.# ###.# ####.# ##.## ##.## ####.##" ' graphic strings used for RUN.GRF below.. '---------------------------------------------------------------------------- SMV$ = MID$(STR$(MV), 2): SDV$ = MID$(STR$(DV), 2): SYV$ = MID$(STR$(YV), 2) G1$ = "_" ' (80 times) G2$ = "P:. 6 . . . 7 . . . 8 . . . 9 . . . 10 . . . 11 . . . 12" G3$ = "P:" G4$ = "D:" G5$ = "D: 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2" G6$ = "PACE/MILE CHART for " G7$ = SMV$ + SL$ + SDV$ + SL$ + SYV$ ' 04/23/49 for example G8$ = SPACE$(6 - (LEN(SMV$) + LEN(SDV$))) + "0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6" G9$ = "^" '(80 times) BAR$ = CHR$(177) ' (or 1) '---------------------------------------------------------------------------- PERR = -1 ' used by error handler OPEN "RUN.CFG" FOR INPUT AS 1 INPUT #1, DU$ INPUT #1, DELAY INPUT #1, BASEPACE CLOSE GOTO UPDUP2: UPDUP1: OPEN "RUN.CFG" FOR OUTPUT AS 1 PRINT #1, DU$ PRINT #1, DELAY PRINT #1, BASEPACE CLOSE UPDUP2: PERR = 11 ' used by error handler DUP$ = DU$ + ":\RUNNING\RUN." ' used for shelling and elsewhere GOSUB 800 ' Get color 1 ' CLS COLOR W PRINT PRINT " ......... /=====\" PRINT " ......| |" PRINT " ...| | | | /===\ /| " PRINT " ... .....|======/ | | |\ | | | | | | " PRINT " ....... ..| \ | | | \ | \====| | | | " PRINT " ...... | \ | | | \ | | | | | " PRINT " ..| \ \====/ | \| | \===/ | F" COLOR O LOCATE 12, 2: FOR I = 1 TO 78: PRINT CHR$(177); : NEXT: PRINT PRINT " ... A Distance Running Program by the Bradley Brothers,"; PRINT " January 2012 ... " GOSUB 1000 ' display silly little runner icon 5 ' CLS PRINT TAB(32); "RUNNING LOG PROGRAM" COLOR O: PRINT TAB(26); "Version "; COLOR W: PRINT MID$(VER$, 1, 1) + "." + MID$(VER$, 2); : COLOR O PRINT " January 8, 2012": PRINT COLOR W: PRINT " U"; : COLOR O: PRINT " pdate running" COLOR W: PRINT " S"; : COLOR O: PRINT " etup" COLOR W: PRINT " H"; : COLOR O: PRINT " elp" COLOR W: PRINT " R"; : COLOR O: PRINT " ead Log" COLOR W: PRINT " V"; : COLOR O: PRINT " iew Journal" COLOR W: PRINT " G"; : COLOR O: PRINT " raphic Analysis" COLOR W: PRINT " C"; : COLOR O: PRINT " onvert" COLOR W: PRINT " P"; : COLOR O: PRINT " rint" COLOR W: PRINT " A"; : COLOR O: PRINT " rchive" COLOR W: PRINT " E"; : COLOR O: PRINT " xit" PRINT : PRINT "Select:"; GOSUB 900 ' Get character C$ SELECT CASE C$ CASE "E", "X" ' smart to put X here, Lee! 6 ' LOCATE 14, 10: COLOR W: PRINT TAB(32); "Happy Running!" COLOR O: PRINT : SYSTEM CASE "H" PRINT CHR$(30) LOCATE 4, 20: PRINT "- Most frequent selection (after all runs you make)." LOCATE 5, 20: PRINT "- Creates RUNNING subdirectory, initializes needed files." LOCATE 6, 20: PRINT "- This utility (explaining the main menu and then some)." LOCATE 7, 20: PRINT "- 3 speeds of viewing on screen the running log file." LOCATE 8, 20: PRINT "- 3 speeds of viewing on screen the running jnl file." LOCATE 9, 20: PRINT "- Prints to screen PACE and DISTANCE bar charts." LOCATE 10, 20: PRINT "- Announcement about conversion of log file." LOCATE 11, 20: PRINT "- Gives you 4 options for file printing." LOCATE 12, 20: PRINT "- Archives dated copies of log, journal and graph files." LOCATE 13, 20: PRINT "- Leaves the program with a nice Goodbye." PRINT : PRINT TAB(8); GOSUB 900 GOTO 5 CASE "C" CLS PRINT : PRINT : PRINT "You have selected 'Convert..'" PRINT "RUN" + VER$ + " automatically creates a CONVERTED file named RUN.SHT." PRINT "If you have spreadsheet software (Microsoft WORKS is fine) you may" PRINT "VIEW, CHART, and/or get highly informative summaries about your RUNNING." PRINT "All the information in RUN.LOG is translated into SPREADSHEET-READABLE" PRINT "information. To VIEW this spreadsheet, you need simply to run the" PRINT "spreadsheet software you own against the file " + DUP$ + "SHT." PRINT "Monthly RUNNING summaries are ideal for this sort of work.": GOSUB 900 GOTO 5 CASE "P" PRINT : PRINT COLOR W: PRINT "L"; : COLOR O: PRINT " = LOG": COLOR W: PRINT "J"; COLOR O: PRINT " = JOURNAL": COLOR W: PRINT "C"; : COLOR O: PRINT " = CHARTS" PRINT : PRINT "Your printer needs to be ON now." PRINT "Select when ready (or press RETURN to skip) : " GOSUB 900 ' Wait for key; then convert to .ext for RUN.ext IF INSTR("LJC", C$) = 0 THEN GOTO 5 IF C$ = "L" THEN FILTYP$ = "LOG " IF C$ = "J" THEN FILTYP$ = "JNL " IF C$ = "C" THEN FILTYP$ = "GRF " SHELL "COPY " + DUP$ + FILTYP$ + " PRN" PRINT : PRINT "[RETURN for Main MENU].." GOSUB 900 GOTO 5 CASE "A" ' backup routine CLS PRINT TAB(30); : PRINT "The "; : COLOR W: PRINT "Archiving "; : COLOR 7 PRINT "Option": PRINT : COLOR W: PRINT "Please Note: ": COLOR 7: PRINT PRINT "Selecting "; : COLOR W: PRINT "Y"; : COLOR 7: PRINT " will result "; PRINT "in having your "; : COLOR W: PRINT "RUN.LOG "; COLOR 7: PRINT "and your "; : COLOR W: PRINT "RUN.JNL "; COLOR 7: PRINT "files backed up to a disc of your choice." PRINT : PRINT "You will be asked: " PRINT : PRINT "1) to supply a target drive letter." PRINT "2) to supply a target subdirectory (optional)" PRINT "3) to delete the original files (advisable although not necessary)" PRINT : PRINT "Proceed with Archiving (Y/N) ? " GOSUB 900 IF C$ <> "Y" THEN GOTO 5 ARKLET$ = "A" PRINT : PRINT "Set Target Drive to [A]. "; PRINT "Source is currently ["; : COLOR W: PRINT DU$; : COLOR 7: PRINT "]"; 15 ' LOCATE 16, 23: COLOR W: INPUT "", C$ IF C$ = "" THEN GOTO 18 ARKLET$ = UCASE$(C$) IF INSTR(ATP$, ARKLET$) <> 0 THEN GOTO 18 LOCATE 17, 1: COLOR W: PRINT "Invalid! Enter again! "; CHR$(24): GOTO 15 18 ' COLOR 7: PRINT "Optional subdirectory will be ["; : COLOR W: PRINT ARKLET$; COLOR 7: PRINT ":\ _______________________]" PRINT : PRINT "Default is ["; : COLOR W: PRINT ARKLET$ + ":\"; COLOR 7: PRINT "]. "; PRINT "If you choose a name, it must exist." LOCATE 17, 35: COLOR W: INPUT "", ARKNAM$: COLOR 7 ARKNAM$ = "\" + ARKNAM$ CLS DT$ = LTRIM$(STR$(YV)) + LTRIM$(STR$(MV)) + LTRIM$(STR$(DV)) ' file name prefix F1NAME$ = DT$ + "BK.LOG" F2NAME$ = DT$ + "BK.JNL" F3NAME$ = DT$ + "BK.GRF" IF ARKNAM$ <> "\" THEN BS$ = "\" ELSE BS$ = "" ' may need trailing backslash SHELL "COPY " + DUP$ + "LOG " + ARKLET$ + ":" + ARKNAM$ + BS$ + F1NAME$ SHELL "COPY " + DUP$ + "JNL " + ARKLET$ + ":" + ARKNAM$ + BS$ + F2NAME$ SHELL "COPY " + DUP$ + "GRF " + ARKLET$ + ":" + ARKNAM$ + BS$ + F3NAME$ PRINT : PRINT "Care to delete the originals (Y/N) ? " GOSUB 900 IF C$ = "Y" THEN SHELL "DEL " + DUP$ + "LOG" SHELL "DEL " + DUP$ + "JNL" SHELL "DEL " + DUP$ + "GRF" END IF COLOR W: PRINT : PRINT "Backup Completed. Press any key ... " GOSUB 900 GOTO 5 CASE "S" CLS PRINT : PRINT "Enter a ("; : COLOR W: PRINT "Y"; : COLOR O: PRINT ") es if you want to create a RUNNING subdirectory" PRINT "and brand new files RUN.TOT, RUN.LOG, RUN.CLR" PRINT "RUN.JNL, RUN.DAY, RUN.SKP, RUN.GRF and RUN.SHT." PRINT PRINT "The TOT file will contain weekly, monthly and annual" PRINT "mileage update values (initialized as 0,0,0). RUN.CLR will contain one" PRINT "of nine optional color settings soon to be established." PRINT "The LOG and JNL files will hold numeric and textual running data." PRINT "The DAY and SKP files are used by the program to sense skipped days" PRINT "and update the log accurately. RUN.GRF and RUN.SHT will contain" PRINT "bar charts and spreadsheet software usable data." PRINT : PRINT "Proceed? "; GOSUB 900 ' Get character C$ IF C$ <> "Y" THEN GOTO 5 CLS GOSUB 1010 ' get drive letter, delay, basepace MKDIR DU$ + ":\RUNNING" PRINT : PRINT DU$ + ":\RUNNING successfully made!": GOSUB 500 ' announce/delay UPDUP: OPEN "RUN.CFG" FOR OUTPUT AS 1 PRINT #1, DU$: PRINT #1, DELAY: PRINT #1, BASEPACE: CLOSE DUP$ = DU$ + ":\RUNNING\RUN." ' update file prefix FOUND$ = "N" PERR = 1: OPEN DUP$ + "LOG" FOR INPUT AS 1: CLOSE : FOUND$ = "Y" TOTCHK: PERR = 2: OPEN DUP$ + "TOT" FOR INPUT AS 1: CLOSE : FOUND$ = "Y" JNLCHK: PERR = 3: OPEN DUP$ + "JNL" FOR INPUT AS 1: CLOSE : FOUND$ = "Y" CLRCHK: PERR = 4: OPEN DUP$ + "CLR" FOR INPUT AS 1: CLOSE : FOUND$ = "Y" DAYCHK: PERR = 5: OPEN DUP$ + "DAY" FOR INPUT AS 1: CLOSE : FOUND$ = "Y" SKPCHK: PERR = 6: OPEN DUP$ + "SKP" FOR INPUT AS 1: CLOSE : FOUND$ = "Y" GRFCHK: PERR = 7: OPEN DUP$ + "GRF" FOR INPUT AS 1: CLOSE : FOUND$ = "Y" FILCHK: IF FOUND$ = "N" THEN GOTO OPNLOG: PRINT "LOG, TOT, JNL, CLR, GRF files exist. Ok to overwrite (Y/N) ? "; GOSUB 900 ' Get character C$ IF C$ <> "Y" THEN GOTO 5 OPNLOG: ' Either they did not exist or the user says it's ok to trash 'em CLS OPEN DUP$ + "LOG" FOR OUTPUT AS 1 GOSUB 100 ' put out LOG file header CLOSE PRINT "RUN.LOG initialized! "; : GOSUB 500 ' announce/delay OPEN DUP$ + "TOT" FOR OUTPUT AS 1 PRINT #1, 0, 0, 0 CLOSE PRINT "RUN.TOT initialized!": GOSUB 500 ' announce/delay OPEN DUP$ + "JNL" FOR OUTPUT AS 1 PRINT #1, "" PRINT #1, "You, who are on the road, must have a code, that you can live by." PRINT #1, "And so, become yourself, because the past, is just a goodbye." PRINT #1, "" CLOSE OPEN DUP$ + "CLR" FOR OUTPUT AS 1 GOSUB 610 ' Select color PRINT #1, W: CLOSE OPEN DUP$ + "GRF" FOR OUTPUT AS 1 PRINT #1, : CLOSE PRINT "RUN.JNL initialized! "; : PRINT "RUN.CLR initialized! "; PRINT "RUN.GRF initialized! "; : GOSUB 500 ' announce/delay GOSUB 880 ' Initialize header for Converted file PRINT "Conversion file Header created for RUN.SHT "; : GOSUB 500 ' announce/delay OPEN DUP$ + "DAY" FOR OUTPUT AS 1: PRINT #1, DAY; MV: CLOSE PRINT "RUN.DAY initialized! "; : GOSUB 500 ' announce/delay OPEN DUP$ + "SKP" FOR OUTPUT AS 1: PRINT #1, "": CLOSE PRINT "RUN.SKP initialized! "; : GOSUB 500 ' announce/delay PRINT "Setup COMPLETE! "; : GOSUB 500 ' announce/delay LOCATE 21, 1: PRINT "Press any key." GOSUB 900 ' Wait for key GOTO 5 CASE "U" FILTYP$ = "DAY" OPEN DUP$ + FILTYP$ FOR INPUT AS 1: INPUT #1, OLDDAYSUM INPUT #1, MONTHVAL: CLOSE FILTYP$ = "SKP" OPEN DUP$ + FILTYP$ FOR INPUT AS 1: INPUT #1, OLDWEEKDAY$: CLOSE GOTO GOFORIT: CASE "R","L","V","J","G" ' common file viewing code GOSUB 600 ' establish speed PERR = 10 ' used by error handler LINENUM = 0: HD = 0 IF C$ = "R" OR C$ = "L" THEN FILTYP$ = "LOG": HD = 1 IF C$ = "V" OR C$ = "J" THEN FILTYP$ = "JNL" IF C$ = "G" THEN FILTYP$ = "GRF" OPEN DUP$ + FILTYP$ FOR INPUT AS 1 CLS DO WHILE NOT EOF(1): FOR T = 1 TO RT: NEXT T: LINE INPUT #1, LIN$: PRINT LIN$ GOSUB 890 ' Screen Pauser.. IF C$ = ESC$ THEN GOTO VEXIT: LOOP GOSUB 900 ' Wait for key VEXIT: ' branch point if user hits Esc during view CLOSE GOTO 5 CASE "I" ' top secret, undocumented, "reiconation" option GOTO 1 CASE ELSE GOTO 5 END SELECT GOFORIT: GOSUB 800 ' Get color WEEK$ = "MonTueWedThrFriSatSunEND" 20 ' SG = 1: GS = 3 CLS : COLOR W: PRINT TAB(22); "RUNNING LOG DAILY REPORT": PRINT FOR I = 1 TO 8 COLOR W: PRINT I; : COLOR O PRINT H6$; MID$(WEEK$, SG, GS): SG = SG + 3 NEXT PRINT : PRINT "Select: "; GOSUB 900 ' Get character C$ DN = INSTR("12345678", C$): IF DN = 0 THEN GOTO 20 E$ = MID$(WEEK$, (VAL(C$) - 1) * 3 + 1, 3) IF E$ = "END" THEN GOTO 6 DO LOCATE 12, 40: PRINT H5$ LOCATE 12, 13: PRINT "Enter today's mileage ["; : COLOR W: INPUT "", D LOOP UNTIL D >= 0 OR D < 26.2 IF D = 0 THEN H = 0: M = 0: S = 0: GOTO OFFDAY: COLOR O: DO: LOCATE 13, 60: PRINT H5$ COLOR O: LOCATE 13, 13 PRINT "How many HOURS did your"; : COLOR W: PRINT D; COLOR O: PRINT "mile run take ? ["; : COLOR W: INPUT "", H LOOP UNTIL H >= 0 AND H <= 5 COLOR O: DO: LOCATE 14, 40: PRINT H5$ COLOR O: LOCATE 14, 13: PRINT "How many MINUTES (0-59) ["; COLOR W: INPUT "", M LOOP UNTIL M >= 0 AND M <= 59 COLOR O: DO: LOCATE 15, 40: PRINT H5$ COLOR O: LOCATE 15, 13: PRINT "How many SECONDS (0-59) ["; COLOR W: INPUT "", S LOOP UNTIL S >= 0 AND S <= 59 OFFDAY: COLOR O: LOCATE 18, 1: FOR DASH = 1 TO 70: PRINT "_"; : NEXT: PRINT H5$ COLOR O: LOCATE 16, 13: PRINT "How did you feel? (one sentence)"; LOCATE 18, 1: PRINT "["; : COLOR W: LINE INPUT "", FEEL$ COLOR O: LOCATE 20, 78: PRINT H5$ COLOR O: LOCATE 20, 13: PRINT "How was the Weather? ["; COLOR W: LINE INPUT "", WETH$ IF D = 0 THEN LOCA$ = "": TIM$ = "": GOTO OFFDAY1: COLOR O: LOCATE 21, 78: PRINT H5$ COLOR O: LOCATE 21, 13: PRINT "Location and/or Route taken ["; COLOR W: LINE INPUT "", LOCA$ COLOR O: LOCATE 22, 35: PRINT H5$ LOCATE 22, 13: PRINT "Time of day? ["; : COLOR W: INPUT "", TIM$ OFFDAY1: FILTYP$ = "TOT" OPEN DUP$ + FILTYP$ FOR INPUT AS 1 INPUT #1, A, B, C: CLOSE ' weekly, monthly, annual run totals P1 = 3600 * H: P2 = 60 * M IF D = 0 THEN P3 = 0: GOTO OFFDAY2: P3 = (P1 + P2 + S) / D ' calc pace from D and time to run D OFFDAY2: P4 = P3 / 60: P5 = INT(P4) P6 = ABS(P5 - P4): P7 = INT(ABS(60 * P6)) SM$ = MID$(STR$(M), 2) SS$ = MID$(STR$(S), 2) S7$ = MID$(STR$(P7), 2) IF MID$(S7$, 2, 1) = "" THEN S7$ = "0" + S7$ ' 7:2 pace -> 7:02 IF MID$(SM$, 2, 1) = "" THEN SM$ = "0" + SM$ ' 1: 2:03 time -> 1:02:03 IF MID$(SS$, 2, 1) = "" THEN SS$ = "0" + SS$ ' 1:02: 3 time -> 1:02:03 ' Quality of Run strings determined below.. (P4 = PACE in decimal form) ' EBC compiler (see elsewhere for definition) applied ... IF P4 = 0 THEN MESG$ = "Offday": GOTO OFFDAY3: P4W = P4 IF P4W < BASEPACE THEN P4W = BASEPACE - .15 IF P4W >= BASEPACE + 3.9 THEN P4W = BASEPACE + 3.9 MESG$ = MID$(MESG1$, 1 + 6 * INT((P4W - (BASEPACE - .15)) / .15), 6) OFFDAY3: DAYLAPS = DAY - OLDDAYSUM ' Compute days elapsed since last run ' if year changes, fix days elapsed and zero out yearly total IF DAYLAPS < 0 THEN DAYLAPS = DAYLAPS + 365 + LDAY: C = 0 ' the following code is the result of the use of the famous EBC compiler ' (El-Brad-Crypto compiler) ... IF (INSTR(WEEK$, OLDWEEKDAY$) - 1) / 3 + 1 + DAYLAPS >= 8 THEN A = 0 IF MV <> MONTHVAL THEN B = 0 ' monthly mileage reset WK = A + D: MO = B + D: Y = C + D ' the new vals DR = WK / DN: MR = MO / DV: YR = Y / DAY ' more new vals FILTYP$ = "SHT" OPEN DUP$ + FILTYP$ FOR APPEND AS 1 ' and make converted spreadsheet PRINT #1, CHR$(34); E$; CHR$(34); CHR$(44); CHR$(34); MID$(DATE$, 1, 5); PRINT #1, CHR$(34); CHR$(44); D; CHR$(44); H; CHR$(44); M; CHR$(44); S; PRINT #1, CHR$(44); P5; CHR$(44); P7; CHR$(44); CHR$(34); MESG$; CHR$(34); PRINT #1, CHR$(44); WK; CHR$(44); MO; CHR$(44); Y; CHR$(44); DR; CHR$(44); PRINT #1, MR; CHR$(44); YR: CLOSE FILTYP$ = "LOG" OPEN DUP$ + FILTYP$ FOR APPEND AS 1 IF MV <> MONTHVAL THEN GOSUB 100 ' put out LOG file header on new month PRINT #1, USING U$; E$; MID$(DATE$, 1, 5); D; H; SM$; SS$; P5; S7$; PRINT #1, USING Z$; MESG$; WK; MO; Y; DR; MR; YR: CLOSE FILTYP$ = "TOT" OPEN DUP$ + FILTYP$ FOR OUTPUT AS #1: PRINT #1, WK, MO, Y CLOSE : CLS GOSUB 850 ' Get pace-bar unit count (using runner's pace) GOSUB 875 ' Get distance-bar unit count using D FILTYP$ = "GRF" OPEN DUP$ + FILTYP$ FOR APPEND AS 1 FOR I = 1 TO 79: PRINT #1, G1$; : NEXT: PRINT #1, PRINT #1, G2$ PRINT #1, G3$; : FOR I = 1 TO PU: PRINT #1, BAR$; : NEXT: PRINT #1, ' from 850 PRINT #1, G4$; : FOR I = 1 TO DU: PRINT #1, BAR$; : NEXT: PRINT #1, ' from 875 PRINT #1, G5$ PRINT #1, G6$ + G7$ + G8$ FOR I = 1 TO 79: PRINT #1, G9$; : NEXT PRINT #1, CLOSE COLOR 7 PRINT "Care to add further JOURNAL" PRINT "comments at this point (Y/N) ? " GOSUB 900 ' wait for key IF C$ <> "Y" THEN GOTO 400 ' user avoided journal entry COLOR W: PRINT TAB(33); "RUNNING JOURNAL": COLOR O PRINT TAB(25); "[BLANK line ENDS the session]": PRINT FILTYP$ = "JNL" OPEN DUP$ + FILTYP$ FOR APPEND AS #1 FOR I = 1 TO 78: PRINT #1, "="; : NEXT: PRINT #1, "" PRINT #1, "Date: "; DATE$; : PRINT #1, " Hour: "; : PRINT #1, TIM$ PRINT #1, "Distance: "; D; : PRINT #1, " Miles" PRINT #1, "Time: "; : PRINT #1, USING QW$; H; SM$; SS$ PRINT #1, "Pace: "; : PRINT #1, USING QT$; P5; S7$ PRINT #1, "Location: "; LOCA$ PRINT #1, "Weather: "; WETH$ PRINT #1, "Felt: "; FEEL$ PRINT #1, PRINT #1, TAB(36); "COMMENTS" PRINT #1, DO L = L + 1: PRINT L; : PRINT ">"; : LINE INPUT "", A$ PRINT #1, A$ LOOP WHILE A$ <> "" ' enables further text entry CLOSE : GOSUB 800 ' The NEXT LINE OF code prints the DAY NUMBER and MONTH 400 : FILTYP$ = "DAY": OPEN DUP$ + FILTYP$ FOR OUTPUT AS 1 PRINT #1, DAY; MV: CLOSE FILTYP$ = "SKP" OPEN DUP$ + FILTYP$ FOR OUTPUT AS 1: PRINT #1, E$: CLOSE ' Mon Tue, etc. GOTO 5 100 ' LOG file header subroutine PRINT #1, H3$ FOR I = 1 TO 79: PRINT #1, H4$; : NEXT: PRINT #1, RETURN 500 ' delay subroutine FOR ROUTER = 1 TO DELAY: FOR RINNER = 1 TO DELAY: NEXT: NEXT RETURN 600 ' speed tuning subroutine PRINT : PRINT : PRINT "Hit "; : COLOR W: PRINT "RETURN "; : COLOR O PRINT "when DONE viewing "; : COLOR W: PRINT : PRINT "S"; COLOR O: PRINT " low "; : COLOR W: PRINT "M"; : COLOR O: PRINT " edium "; COLOR W: PRINT "F"; : COLOR O: PRINT " ast Viewing ?" DO: SPEED$ = INKEY$: LOOP UNTIL LEN(SPEED$) <> 0 RT = DELAY / 100 ' default IF UCASE$(SPEED$) = "S" THEN RT = 100 * DELAY IF UCASE$(SPEED$) = "M" THEN RT = DELAY IF UCASE$(SPEED$) = "F" THEN RT = DELAY / 100 RETURN 610 ' Select color W = 7 ' White PRINT : PRINT "Want Color (Y/N) ? " GOSUB 900 ' Get character C$ IF C$ = "N" THEN W = 7: RETURN PRINT : PRINT " 7 = Sample Color Display" PRINT " 8 = "; : COLOR 8: PRINT " S"; : COLOR O: PRINT "ample "; COLOR 8: PRINT " C"; : COLOR O: PRINT "olor "; COLOR 8: PRINT " D"; : COLOR O: PRINT "isplay" PRINT " 9 = "; : COLOR 9: PRINT " S"; : COLOR O: PRINT "ample "; COLOR 9: PRINT " C"; : COLOR O: PRINT "olor "; COLOR 9: PRINT " D"; : COLOR O: PRINT "isplay" FOR I = 10 TO 15 COLOR O: PRINT I; : PRINT " = "; : COLOR I PRINT " S"; : COLOR O: PRINT "ample "; COLOR I: PRINT " C"; : COLOR O: PRINT "olor "; COLOR I: PRINT " D"; : COLOR O: PRINT "isplay": NEXT: LOCATE 18, 40 INPUT " Select (7-15) ", W: CLS : LOCATE 13, 1 RETURN 800 ' Get color from file FILTYP$ = "CLR" OPEN DUP$ + FILTYP$ FOR INPUT AS 1: INPUT #1, W: CLOSE : RETURN 850 ' PU = 12 * P4 - 44 - 24 ' Formula for units of PACE-BAR RETURN ' Return proper count 875 ' DU = 3 * D - 1 ' Formula for units of DISTANCE BAR RETURN ' Return proper count 880 ' Create Header for RUN.SHT file (readable by other spreadsheet software) FILTYP$ = "SHT" OPEN DUP$ + FILTYP$ FOR OUTPUT AS 1 ' CHR$(34) = (") CHR$(44) = (,) PRINT #1, CHR$(34); "Day"; CHR$(34); CHR$(44); CHR$(34); "Date"; CHR$(34); PRINT #1, CHR$(44); CHR$(34); "Dist"; CHR$(34); CHR$(44); CHR$(34); "HH"; PRINT #1, CHR$(34); CHR$(44); CHR$(34); "MM"; CHR$(34); CHR$(44); CHR$(34); PRINT #1, "SS"; CHR$(34); CHR$(44); CHR$(34); "MM"; CHR$(34); CHR$(44); PRINT #1, CHR$(34); "SS"; CHR$(34); CHR$(44); CHR$(34); "Mesg"; CHR$(34); PRINT #1, CHR$(44); CHR$(34); "Weekly"; CHR$(34); CHR$(44); CHR$(34); PRINT #1, "Monthly"; CHR$(34); CHR$(44); CHR$(34); "Yearly"; CHR$(34); PRINT #1, CHR$(44); CHR$(34); "AveD"; CHR$(34); CHR$(44); CHR$(34); PRINT #1, "AveM"; CHR$(34); CHR$(44); CHR$(34); "AveYear"; CHR$(34) CLOSE : RETURN 890 ' Screen Pauser LINENUM = LINENUM + 1 IF LINENUM <> 20 THEN RETURN PRINT : COLOR O: PRINT "[RETURN for More or Esc to EXIT].."; : LINENUM = 0: COLOR 7: GOSUB 900: CLS IF HD = 1 AND C$ <> ESC$ AND MID$(LIN$, 1, 3) <> "Day" THEN ' Always put header if LOG file is displayed PRINT H3$: FOR DSH = 1 TO 79: PRINT H4$; : NEXT END IF RETURN 900 ' Wait for input. Return uppercased character in C$ DO C$ = INKEY$ LOOP UNTIL LEN(C$) > 0 C$ = UCASE$(C$) RETURN 1000 ' icon routine LOCATE 17, 27: PRINT "Press any key to start ..." R1 = 9: C = 1: PM = 1: ICONCTR = 1 1001 ' C = C + PM + PMA(INT(3 * RND)) IF (C >= 1) AND (C <= 70) THEN GOTO 1002 ICONCTR = ICONCTR + 1 IF C > 70 THEN C = 70: PM = -1 IF C < 1 THEN C = 1: PM = 1 IF ICONCTR MOD 5 > 0 THEN GOTO 1001 I1 = 1 + (ICONCTR / 5) MOD 7 SPC$ = SPACE$((78 - LEN(M$(I1))) / 2) LOCATE 15, 1: PRINT SPC$ + M$(I1) + SPC$: GOSUB 500 GOTO 1001 1002 ' LOCATE R1, C IF RND > .5 THEN FACE = 1 ELSE FACE = 2 PRINT " " + CHR$(FACE) + " " LOCATE R1 + 1, C PRINT " " + ARM$((C + 1) MOD 2) + "." + ARM$((C + 2) MOD 2) + " " LOCATE R1 + 2, C PRINT " " + FEET$(C MOD 4) + " " + FEET$((C + 1) MOD 4) + " " IF LEN(INKEY$) THEN GOTO 1003 GOSUB 500 GOTO 1001 1003 ' RETURN 1010 ' get DRIVE LETTER, software DELAY and BASEPACE subroutine PRINT : PRINT "Enter the DRIVE LETTER of the drive on which you want" PRINT "RUN" + VER$ + " to place RUN files." PRINT 1011 ' PRINT PRINT "Enter A-P : "; : GOSUB 900 IF INSTR(ATP$, C$) = 0 THEN PRINT : PRINT "Invalid entry!": GOTO 1011 DU$ = C$ PRINT C$ PRINT : PRINT "Enter a number (100-600 suggested) to control" PRINT "software delays. The bigger the number, the longer the delays." PRINT INPUT "DELAY value : ", DELAY PRINT : PRINT "Finally, enter a BASEPACE value, your average best" PRINT "minutes per mile (8 suggested)" PRINT INPUT "BASEPACE value : ", BASEPACE RETURN ERRLAB: ' error handler IF ERR <> 75 THEN GOTO ERRCONT: PRINT : PRINT "RUNNING subdirectory exists. No need to make it!" GOSUB 500 ' delay a bit RESUME UPDUP: ERRCONT: IF ERR <> 76 THEN GOTO ERRCONT1: PRINT PRINT "You must pick the Setup option to create the RUNNING " PRINT "subdirectory first. Then Update. Then read/view ..." GOSUB 500: GOSUB 500 ' delay a bit RESUME 5 ERRCONT1: IF ERR <> 53 THEN GOTO ERRCONT2: IF PERR = -1 THEN GOTO ERRCONT15: IF PERR = 1 THEN RESUME TOTCHK: IF PERR = 2 THEN RESUME JNLCHK: IF PERR = 3 THEN RESUME CLRCHK: IF PERR = 4 THEN RESUME DAYCHK: IF PERR = 5 THEN RESUME SKPCHK: IF PERR = 6 THEN RESUME GRFCHK: IF PERR = 7 THEN RESUME FILCHK: IF PERR <> 10 THEN GOTO ERRCONT11 PRINT PRINT "RUN." + FILTYP$ + " not found. Select Update": GOSUB 500: RESUME 5 ERRCONT11: IF PERR <> 11 THEN GOTO ERRCONT25: PRINT PRINT "RUN." + FILTYP$ + " not found. Select Setup": GOSUB 500: RESUME 5 ERRCONT15: GOSUB 1010 ' get drive letter, delay, basepace RESUME UPDUP1: ERRCONT2: IF ERR <> 62 OR PERR <> -1 THEN GOTO ERRCONT25: PRINT PRINT "Attempted to read past end of file in an outdated RUN.CFG file." PRINT : GOSUB 1010: CLOSE : RESUME UPDUP1: ERRCONT25: PRINT : PRINT "Error "; ERR; " encountered in main program at line "; ERL SYSTEM SUB TESTDAY (DAY) ' accurately determines day number of year CLS M$ = "000031059090120151181212243273304334" MV = VAL(MID$(DATE$, 1, 2)) DV = VAL(MID$(DATE$, 4, 2)) YV = VAL(MID$(DATE$, 9, 2)) LDAY = 0 IF YV / 4 = INT(YV / 4) AND MV >= 3 THEN LDAY = 1 DAY = VAL(MID$(M$, 1 + 3 * (MV - 1), 3)) + DV + LDAY END SUB