Active Forums > QB64 Discussion
Time Calculator
(1/1)
Jaze:
--- Code: QB64: ---_TITLE "Time Calculator" ' I do wonder if I should start planning before I begin to code...'Author: Jaze James McAskill (mcaskilljaze@gmail.com)'License: Freeware if anyone can remember what that is.' All I ask is that if you copy part or all' of this code you keep my name on it CONST TRUE% = 1CONST FALSE% = -1CONST AM% = -1CONST PM% = 1 WIDTH 80, 50_FULLSCREEN DIM SHARED LeftArrowKey$: LeftArrowKey$ = CHR$(0) + "K"DIM SHARED RightArrowKey$: RightArrowKey$ = CHR$(0) + "M"DIM SHARED UpArrowKey$: UpArrowKey$ = CHR$(0) + "H"DIM SHARED DownArrowKey$: DownArrowKey$ = CHR$(0) + "P"CONST UpKeyHit% = 18432CONST DownKeyHit% = 20480CONST LeftKeyHit% = 19200CONST RightKeyHit% = 19712 CLSLOCATE 20, 1 CALL Menu FUNCTION GetDateAndTime$ (Header$) HaltAndDisplay% = 0: UserCommand$ = "": HeaderCopy$ = "": Instructions$ = "": HighlightedOption% = 0 yPos% = 0: xPos% = 0: GDTMonth% = 0: GDTDay% = 0: GDTYear% = 0: O% = 0: OP$ = "": MaxOption% = 0 GDTHours% = 0: GDTMinutes% = 0: GDTSeconds% = 0: GDTRtn$ = "" MW$ = "": SomeKey% = 0: TimerStarted% = 0: FirstTime% = 0: Increment% = 0: TimeElapsed% = 0 HaltAndDisplay% = TRUE: yPos% = 15: xPos% = 17: HighlightedOption% = 1: MaxOption% = 6 GDTMonth% = VAL(LEFT$(DATE$, 2)): GDTDay% = VAL(MID$(DATE$, 4, 2)): GDTYear% = VAL(RIGHT$(DATE$, 4)) GDTHours% = VAL(LEFT$(TIME$, 2)): GDTMinutes% = VAL(MID$(TIME$, 4, 2)): GDTSeconds% = VAL(RIGHT$(TIME$, 2)) TimerStarted% = FALSE%: Increment% = 1 DO UserCommand$ = INKEY$ IF HaltAndDisplay% = TRUE% THEN xPos% = 17: yPos% = 15 HeaderCopy$ = Header$ COLOR 14, 1: CLS COLOR 15 IF LEN(Header$) >= 50 THEN LOCATE 3, 1: PRINT LongCenter(HeaderCopy$, 50, FALSE%) ELSE LOCATE 3, Center(HeaderCopy$): PRINT HeaderCopy$: END IF COLOR 12, 1: Instructions$ = "Use the arrow keys to select the date and time - Push " Instructions$ = Instructions$ + CHR$(34) + "X" + CHR$(34) + " to exit to the system - Push [ESC] to reset - Push [ENTER] to confirm" LOCATE 46, 1: PRINT LongCenter$(Instructions$, 50, FALSE) LOCATE yPos% - 5, xPos%: IF HighlightedOption% = 1 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Month" MW$ = "": MW$ = MonthWord$(GDTMonth% - 1): COLOR 14, 1 LOCATE yPos% - 2, CenterBetween(MW$, xPos% - 3, xPos% + 8): PRINT MW$ MW$ = "": MW$ = MonthWord$(GDTMonth%): COLOR 10, 0 LOCATE yPos%, CenterBetween(MW$, xPos% - 3, xPos% + 8): PRINT MW$ MW$ = "": MW$ = MonthWord$(GDTMonth% + 1): COLOR 14, 1 LOCATE yPos% + 2, CenterBetween(MW$, xPos% - 3, xPos% + 8): PRINT MW$ LOCATE yPos% - 5, xPos% + 20: IF HighlightedOption% = 2 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Day" COLOR 14, 1: O% = 0: O% = CorrectDay(GDTMonth%, GDTDay% - 1, GDTYear%) OP$ = "": OP$ = S$(O%) + Suffix$(O%) LOCATE yPos% - 2, CenterBetween(OP$, xPos% + 19, xPos% + 22): PRINT OP$ COLOR 10, 0: OP$ = "": O% = 0: OP$ = S$(GDTDay%) + Suffix$(GDTDay%) LOCATE yPos%, CenterBetween(OP$, xPos% + 19, xPos% + 22): PRINT OP$ COLOR 14, 1: O% = 0: O% = CorrectDay(GDTMonth%, GDTDay% + 1, GDTYear%) OP$ = "": OP$ = S$(O%) + Suffix$(O%) LOCATE yPos% + 2, CenterBetween(OP$, xPos% + 19, xPos% + 22): PRINT OP$ LOCATE yPos% - 5, xPos% + 40: IF HighlightedOption% = 3 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Year" COLOR 14, 1: O% = 0: O% = GDTYear% - 1: IF O% = -1 THEN O% = 9999 LOCATE yPos% - 2, CenterBetween(S$(O%), xPos% + 40, xPos% + 44): PRINT S$(O%) COLOR 10, 0: LOCATE yPos%, CenterBetween(S$(GDTYear%), xPos% + 40, xPos% + 44): PRINT S$(GDTYear%) COLOR 14, 1: O% = 0: O% = GDTYear% + 1: IF O% > 9999 THEN O% = 0 LOCATE yPos% + 2, CenterBetween(S$(O%), xPos% + 40, xPos% + 44): PRINT S$(O%) COLOR 10, 1: a$ = "": a$ = WrittenOutDate$(GDTMonth%, GDTDay%, GDTYear%) + " at " + ClockString$(GDTHours%, GDTMinutes%, GDTSeconds%) LOCATE yPos% + 9, Center(a$): PRINT a$ yPos% = yPos% + 21 IF HighlightedOption% = 4 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF LOCATE yPos% - 5, xPos%: PRINT "Hours" LOCATE yPos% - 2, xPos% + 2 COLOR 14, 1: IF GDTHours% - 1 = -1 THEN PRINT "11" ELSEIF GDTHours% - 1 = 0 THEN PRINT "12" ELSEIF GDTHours% - 1 > 0 AND GDTHours% - 1 <= 12 THEN PRINT S$(GDTHours% - 1) ELSEIF GDTHours% - 1 >= 13 AND GDTHours% - 1 <= 23 THEN PRINT S$(GDTHours% - 1 - 12): END IF LOCATE yPos%, xPos% + 2: COLOR 10, 0 IF GDTHours% = 0 THEN PRINT "12" ELSEIF GDTHours% > 0 AND GDTHours% <= 12 THEN PRINT S$(GDTHours%) ELSEIF GDTHours% > 12 AND GDTHours% < 24 THEN PRINT S$(GDTHours% - 12): END IF LOCATE yPos% + 2, xPos% + 2: COLOR 14, 1 IF GDTHours% + 1 >= 1 AND GDTHours% + 1 < 13 THEN PRINT S$(GDTHours% + 1) ELSEIF GDTHours% + 1 >= 13 AND GDTHours% + 1 <= 24 THEN PRINT S$(GDTHours% + 1 - 12): END IF IF HighlightedOption% = 5 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF LOCATE yPos% - 5, xPos% + 16: PRINT "Minutes" LOCATE yPos% - 2, xPos% + 18: COLOR 14, 1 IF GDTMinutes% - 1 = -1 THEN PRINT "59" ELSEIF GDTMinutes% - 1 >= 0 AND GDTMinutes% - 1 <= 59 THEN IF GDTMinutes% - 1 < 10 THEN PRINT "0";: PRINT S$(GDTMinutes% - 1) END IF LOCATE yPos%, xPos% + 18: COLOR 10, 0: IF GDTMinutes% < 10 THEN PRINT "0"; PRINT S$(GDTMinutes%) LOCATE yPos% + 2, xPos% + 18: COLOR 14, 1 IF GDTMinutes% + 1 >= 0 AND GDTMinutes% + 1 <= 59 THEN IF GDTMinutes% + 1 < 10 THEN PRINT "0"; PRINT S$(GDTMinutes% + 1) ELSEIF GDTMinutes% + 1 = 60 THEN PRINT "00" END IF IF HighlightedOption% = 6 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF LOCATE yPos% - 5, xPos% + 32: PRINT "Seconds" LOCATE yPos% - 2, xPos% + 36: COLOR 14, 1 IF GDTSeconds% - 1 = -1 THEN PRINT "59" ELSEIF GDTSeconds% - 1 >= 0 AND GDTSeconds% <= 59 THEN PRINT S$(GDTSeconds% - 1) END IF LOCATE yPos%, xPos% + 36: COLOR 10, 0 PRINT S$(GDTSeconds%) LOCATE yPos% + 2, xPos% + 36: COLOR 14, 1 IF gdtseonds% + 1 >= 0 AND GDTSeconds% + 1 <= 59 THEN PRINT S$(GDTSeconds% + 1) ELSEIF GDTSeconds% + 1 = 60 THEN PRINT "0": END IF LOCATE yPos% - 2, xPos% + 50: COLOR 14, 1 IF GDTHours% - 1 >= 0 AND GDTHours% - 1 <= 11 THEN PRINT "AM": ELSE PRINT "PM": END IF LOCATE yPos%, xPos% + 50: COLOR 10, 0 IF GDTHours% < 12 THEN PRINT "AM": ELSE PRINT "PM": END IF LOCATE yPos% + 2, xPos% + 50: COLOR 14, 1 IF GDTHours% + 1 >= 0 AND GDTHours% + 1 <= 11 OR GDTHours% + 1 = 24 THEN PRINT "AM": ELSE: PRINT "PM": END IF HaltAndDisplay% = FALSE END IF SomeKey% = _KEYHIT IF SomeKey% = UpKeyHit% OR SomeKey% = DownKeyHit% THEN IF TimerStarted% = FALSE% THEN FirstTime% = TIMER TimerStarted% = TRUE% END IF END IF IF SomeKey% < 0 THEN FirstTime% = 0 Increment% = 1 TimeElapsed% = 0 TimerStarted% = FALSE% END IF TimeElapsed% = ABS(TIMER - FirstTime%) IF TimeElapsed% = 2 THEN IF HighlightedOption% = 2 THEN Increment% = 2 'Day IF HighlightedOption% = 3 THEN Increment% = 10 'Year IF HighlightedOption% = 5 THEN Increment% = 2 'minutes IF HighlightedOption% = 6 THEN Increment% = 2 'seconds ELSEIF TimeElapsed% = 3 THEN IF HighlightedOption% = 3 THEN Increment% = 25 ELSEIF TimeElapsed% = 4 THEN IF HighlightedOption% = 3 THEN Increment% = 50 END IF SELECT CASE UserCommand$ CASE LeftArrowKey$ HighlightedOption% = HighlightedOption% - 1 IF HighlightedOption% = 0 THEN HighlightedOption% = MaxOption% HaltAndDisplay% = TRUE% CASE RightArrowKey$ HighlightedOption% = HighlightedOption% + 1 IF HighlightedOption% > MaxOption% THEN HighlightedOption% = 1 HaltAndDisplay% = TRUE% CASE UpArrowKey$ IF HighlightedOption% = 1 THEN GDTMonth% = GDTMonth% - Increment% IF GDTMonth% <= 0 THEN GDTMonth% = 12 IF GDTMonth% = 4 OR GDTMonth% = 6 OR GDTMonth% = 9 OR GDTMonth% = 11 THEN IF GDTDay% = 31 THEN GDTDay% = 30: ELSEIF GDTMonth% = 2 THEN IF GDTDay% > 29 AND GDTYear% MOD 4 = 0 THEN GDTDay% = 29 ELSEIF GDTDay% >= 29 AND GDTYear% MOD 4 <> 0 THEN GDTDay% = 28 END IF END IF ELSEIF HighlightedOption% = 2 THEN GDTDay% = GDTDay% - Increment% IF GDTDay% <= 0 THEN IF GDTMonth% = 4 OR GDTMonth% = 6 OR GDTMonth% = 9 OR GDTMonth% = 11 THEN GDTDay% = 30 ELSEIF GDTMonth% = 2 AND GDTYear% MOD 4 = 0 THEN GDTDay% = 29 ELSEIF GDTMonth% = 2 AND GDTYear% MOD 4 <> 0 THEN GDTDay% = 28 ELSE GDTDay% = 31: END IF END IF ELSEIF HighlightedOption% = 3 THEN GDTYear% = GDTYear% - Increment% IF GDTYear% < 0 THEN GDTYear% = 9999 GDTDay% = CorrectDay%(GDTMonth%, GDTDay%, GDTYear%) ELSEIF HighlightedOption% = 4 THEN GDTHours% = GDTHours% - 1 IF GDTHours% < 0 THEN GDTHours% = 23 ELSEIF HighlightedOption% = 5 THEN GDTMinutes% = GDTMinutes% - Increment% IF GDTMinutes% < 0 THEN GDTMinutes% = 59 ELSEIF HighlightedOption% = 6 THEN GDTSeconds% = GDTSeconds% - Increment% IF GDTSeconds% < 0 THEN GDTSeconds% = 59 END IF HaltAndDisplay% = TRUE% CASE DownArrowKey$ IF HighlightedOption% = 1 THEN GDTMonth% = GDTMonth% + Increment% IF GDTMonth% > 12 THEN GDTMonth% = 1 GDTDay% = CorrectDay%(GDTMonth%, GDTDay%, GDTYear%) ELSEIF HighlightedOption% = 2 THEN GDTDay% = GDTDay% + Increment% IF GDTDay% >= 29 THEN GDTDay% = CorrectDay(GDTMonth%, GDTDay%, GDTYear%) ELSEIF HighlightedOption% = 3 THEN GDTYear% = GDTYear% + Increment% IF GDTYear% > 9999 THEN GDTYear% = 0 GDTDay% = CorrectDay%(GDTMonth%, GDTDay%, GDTYear%) ELSEIF HighlightedOption% = 4 THEN GDTHours% = GDTHours% + 1 IF GDTHours% = 24 THEN GDTHours% = 0 ELSEIF HighlightedOption% = 5 THEN GDTMinutes% = GDTMinutes% + Increment% IF GDTMinutes% >= 60 THEN GDTMinutes% = 0 ELSEIF HighlightedOption% = 6 THEN GDTSeconds% = GDTSeconds% + Increment% IF GDTSeconds% >= 60 THEN GDTSeconds% = 0 END IF HaltAndDisplay% = TRUE% CASE CHR$(27) GDTMonth% = VAL(LEFT$(DATE$, 2)) GDTDay% = VAL(MID$(DATE$, 4, 2)) GDTYear% = VAL(RIGHT$(DATE$, 4)) GDTHours% = VAL(LEFT$(TIME$, 2)) GDTMinutes% = VAL(MID$(TIME$, 4, 2)) GDTSeconds% = VAL(RIGHT$(TIME$, 2)) HaltAndDisplay% = TRUE% CASE "X", "x" SYSTEM CASE CHR$(13) GDTRtn$ = "" IF GDTYear% < 10 THEN GDTRtn$ = "000" ELSEIF GDTYear% >= 10 AND GDTYear% < 100 THEN GDTRtn$ = "00" ELSEIF GDTYear% >= 100 AND GDTYear% < 1000 THEN GDTRtn$ = "0": END IF GDTRtn$ = GDTRtn$ + S$(GDTYear%) + ":" tempDay% = 0: tempDay% = DaysPassedJanFromMonthDayYear(GDTMonth%, GDTDay%, GDTYear%) IF tempDay% < 10 THEN GDTRtn$ = GDTRtn$ + "00" ELSEIF tempDay% >= 10 AND tempDay% < 100 THEN GDTRtn$ = GDTRtn$ + "0": END IF GDTRtn$ = GDTRtn$ + S$(tempDay%) + ":" IF GDTHours% < 10 THEN GDTRtn$ = GDTRtn$ + "0" GDTRtn$ = GDTRtn$ + S$(GDTHours%) + ":" IF GDTMinutes% < 10 THEN GDTRtn$ = GDTRtn$ + "0" GDTRtn$ = GDTRtn$ + S$(GDTMinutes%) + ":" IF GDTSeconds% < 10 THEN GDTRtn$ = GDTRtn$ + "0" GDTRtn$ = GDTRtn$ + S$(GDTSeconds%) END SELECT LOOP UNTIL UserCommand$ = CHR$(13) GetDateAndTime$ = GDTRtn$END FUNCTION FUNCTION ClockString$ (CSHours%, CSMinutes%, CSSeconds%) DisplayHours$ = "": CSRtn$ = "": AmPm$ = "" IF CSHours% = 0 THEN DisplayHours$ = "12" AmPm$ = "AM" ELSEIF CSHours% >= 1 AND CSHours% <= 11 THEN DisplayHours$ = S$(CSHours%) AmPm$ = "AM" ELSEIF CSHours% = 12 THEN DisplayHours$ = "12" AmPm$ = "PM" ELSEIF CSHours% > 12 AND CSHours% <= 23 THEN DisplayHours$ = S$(CSHours% - 12) AmPm$ = "PM" END IF CSRtn$ = DisplayHours$ + ":" IF CSMinutes% < 10 THEN CSRtn$ = CSRtn$ + "0" CSRtn$ = CSRtn$ + S$(CSMinutes%) + " " + AmPm$ + " and " + S$(CSSeconds%) + " second" IF CSSeconds% <> 1 THEN CSRtn$ = CSRtn$ + "s" ClockString$ = CSRtn$ END FUNCTION FUNCTION GetDate$ (Header$) xPos% = 0: yPos% = 0: MaxOption% = 0: HighlightedOption% = 0 HaltAndDisplay% = 0: UserCommand$ = "": Instructions$ = "": TimerStarted% = 0: FirstTime% = 0: TimeElapsed% = 0 GDMonth% = 0: GDDay% = 0: GDYear% = 0: MW$ = "": Increment% = 0: MinOption% = 0: HeaderCopy$ = "": GDRtn$ = "" HaltAndDisplay% = TRUE%: yPos% = 22: xPos% = 19: HighlightedOption% = 1: Increment% = 1 MaxOption% = 3: MinOption% = 1: HeaderCopy$ = Header$ GDMonth% = VAL(LEFT$(DATE$, 2)): GDDay% = VAL(MID$(DATE$, 4, 2)): GDYear% = VAL(RIGHT$(DATE$, 4)) TimerStarted% = FALSE DO UserCommand$ = INKEY$ IF HaltAndDisplay% = TRUE% THEN HeaderCopy$ = Header$ COLOR 14, 1: CLS COLOR 15 IF LEN(Header$) >= 50 THEN LOCATE 7, 1: PRINT LongCenter(HeaderCopy$, 50, FALSE%) ELSE LOCATE 7, Center(HeaderCopy$): PRINT HeaderCopy$: END IF COLOR 12, 1: Instructions$ = "Use the arrow keys to select the date - Push [ESC] to reset - Push " Instructions$ = Instructions$ + CHR$(34) + "X" + CHR$(34) + " to exit to the system - " Instructions$ = Instructions$ + "Push [ENTER] when you have selected the desired date" LOCATE yPos% + 20, 1: PRINT LongCenter$(Instructions$, 60, FALSE%) LOCATE yPos% - 5, xPos%: IF HighlightedOption% = 1 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Month" MW$ = "": MW$ = MonthWord$(GDMonth% - 1): COLOR 14, 1 LOCATE yPos% - 2, CenterBetween(MW$, xPos% - 3, xPos% + 8): PRINT MW$ MW$ = "": MW$ = MonthWord$(GDMonth%): COLOR 10, 0 LOCATE yPos%, CenterBetween(MW$, xPos% - 3, xPos% + 8): PRINT MW$ MW$ = "": MW$ = MonthWord$(GDMonth% + 1): COLOR 14, 1 LOCATE yPos% + 2, CenterBetween(MW$, xPos% - 3, xPos% + 8): PRINT MW$ LOCATE yPos% - 5, xPos% + 20: IF HighlightedOption% = 2 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Day" COLOR 14, 1: O% = 0: O% = CorrectDay(GDMonth%, GDDay% - 1, GDYear%) OP$ = "": OP$ = S$(O%) + Suffix$(O%) LOCATE yPos% - 2, CenterBetween(OP$, xPos% + 19, xPos% + 22): PRINT OP$ COLOR 10, 0: OP$ = "": O% = 0: OP$ = S$(GDDay%) + Suffix$(GDDay%) LOCATE yPos%, CenterBetween(OP$, xPos% + 19, xPos% + 22): PRINT OP$ COLOR 14, 1: O% = 0: O% = CorrectDay(GDMonth%, GDDay% + 1, GDYear%) OP$ = "": OP$ = S$(O%) + Suffix$(O%) LOCATE yPos% + 2, CenterBetween(OP$, xPos% + 19, xPos% + 22): PRINT OP$ LOCATE yPos% - 5, xPos% + 40: IF HighlightedOption% = 3 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Year" COLOR 14, 1: O% = 0: O% = GDYear% - 1: IF O% = -1 THEN O% = 9999 LOCATE yPos% - 2, CenterBetween(S$(O%), xPos% + 40, xPos% + 44): PRINT S$(O%) COLOR 10, 0: LOCATE yPos%, CenterBetween(S$(GDYear%), xPos% + 40, xPos% + 44): PRINT S$(GDYear%) COLOR 14, 1: O% = 0: O% = GDYear% + 1: IF O% > 9999 THEN O% = 0 LOCATE yPos% + 2, CenterBetween(S$(O%), xPos% + 40, xPos% + 44): PRINT S$(O%) COLOR 10, 0: a$ = "": a$ = WrittenOutDate$(GDMonth%, GDDay%, GDYear%) LOCATE yPos% + 10, Center(a$): PRINT a$ HaltAndDisplay% = FALSE% END IF SomeKey% = _KEYHIT IF SomeKey% = UpKeyHit% OR SomeKey% = DownKeyHit% THEN IF TimerStarted% = FALSE% THEN FirstTime% = TIMER TimerStarted% = TRUE% END IF END IF IF SomeKey% < 0 THEN FirstTime% = 0 Increment% = 1 TimeElapsed% = 0 TimerStarted% = FALSE% END IF TimeElapsed% = ABS(TIMER - FirstTime%) IF TimeElapsed% = 2 THEN IF HighlightedOption% = 3 THEN Increment% = 15 ELSEIF TimeElapsed% = 3 THEN IF HighlightedOption% = 2 THEN Increment% = 2 IF HighlightedOption% = 3 THEN Increment% = 25 ELSEIF TimeElapsed% = 4 THEN IF HighlightedOption% = 3 THEN Increment% = 35 ELSEIF TimeElapsed% = 6 THEN IF HighlightedOption% = 3 THEN Increment% = 65 END IF SELECT CASE UserCommand$ CASE UpArrowKey$ IF HighlightedOption% = 1 THEN GDMonth% = GDMonth% - Increment% IF GDMonth% <= 0 THEN GDMonth% = 12 IF GDMonth% = 4 OR GDMonth% = 6 OR GDMonth% = 9 OR GDMonth% = 11 THEN IF GDDay% = 31 THEN GDDay% = 30: ELSEIF GDMonth% = 2 THEN IF GDDay% > 29 AND GDYear% MOD 4 = 0 THEN GDDay% = 29 ELSEIF GDDay% >= 29 AND GDYear% MOD 4 <> 0 THEN GDDay% = 28 END IF END IF ELSEIF HighlightedOption% = 2 THEN GDDay% = GDDay% - Increment% IF GDDay% <= 0 THEN IF GDMonth% = 4 OR GDMonth% = 6 OR GDMonth% = 9 OR GDMonth% = 11 THEN GDDay% = 30 ELSEIF GDMonth% = 2 AND GDYear% MOD 4 = 0 THEN GDDay% = 29 ELSEIF GDMonth% = 2 AND GDYear% MOD 4 <> 0 THEN GDDay% = 28 ELSE GDDay% = 31: END IF END IF ELSEIF HighlightedOption% = 3 THEN GDYear% = GDYear% - Increment% IF GDYear% < 0 THEN GDYear% = 9999 GDDay% = CorrectDay%(GDMonth%, GDDay%, GDYear%) END IF HaltAndDisplay% = TRUE% CASE DownArrowKey$ IF HighlightedOption% = 1 THEN GDMonth% = GDMonth% + Increment% IF GDMonth% > 12 THEN GDMonth% = 1 GDDay% = CorrectDay%(GDMonth%, GDDay%, GDYear%) ELSEIF HighlightedOption% = 2 THEN GDDay% = GDDay% + Increment% IF GDDay% >= 29 THEN GDDay% = CorrectDay(GDMonth%, GDDay%, GDYear%) ELSEIF HighlightedOption% = 3 THEN GDYear% = GDYear% + Increment% IF GDYear% > 9999 THEN GDYear% = 0 GDDay% = CorrectDay%(GDMonth%, GDDay%, GDYear%) END IF HaltAndDisplay% = TRUE% CASE RightArrowKey$ HighlightedOption% = HighlightedOption% + 1 IF HighlightedOption% > MaxOption% THEN HighlightedOption% = MinOption% HaltAndDisplay% = TRUE% CASE LeftArrowKey$ HighlightedOption% = HighlightedOption% - 1 IF HighlightedOption% < MinOption% THEN HighlightedOption% = MaxOption% HaltAndDisplay% = TRUE% CASE CHR$(27) GDMonth% = VAL(LEFT$(DATE$, 2)) GDDay% = VAL(MID$(DATE$, 4, 2)) GDYear% = VAL(RIGHT$(DATE$, 4)) CASE "X", "x" SYSTEM CASE CHR$(13) GDRtn$ = "" GDRtn$ = MakeFormattedDATE$(GDMonth%, GDDay%, GDYear%) END SELECT LOOP UNTIL UserCommand$ = CHR$(13) GetDate$ = GDRtn$END FUNCTION FUNCTION MakeFormattedDATE$ (MFMonth%, MFDay%, MFYear%) MFDRtn$ = "" IF MFMonth% < 10 THEN MFDRtn$ = "0" MFDRtn$ = MFDRtn$ + S$(MFMonth%) + "/" IF MFDay% < 10 THEN MFDRtn$ = MFDRtn$ + "0" MFDRtn$ = MFDRtn$ + S$(MFDay%) + "/" IF MFYear% < 10 THEN MFDRtn$ = MFDRtn$ + "000" ELSEIF MFYear% >= 10 AND MFYear% < 100 THEN MFDRtn$ = MFDRtn$ + "00" ELSEIF MFYear% >= 100 AND MFYear% < 1000 THEN MFDRtn$ = MFDRtn$ + "0": END IF MFDRtn$ = MFDRtn$ + S$(MFYear%) MakeFormattedDATE$ = MFDRtn$ END FUNCTION FUNCTION WrittenOutDate$ (WODMonth%, WODDay%, WODYear%) WODRtn$ = "" WODRtn$ = MonthWord$(WODMonth%) WODRtn$ = WODRtn$ + " " WODRtn$ = WODRtn$ + S$(WODDay%) + Suffix(WODDay%) WODRtn$ = WODRtn$ + ", " WODRtn$ = WODRtn$ + S$(WODYear%) WrittenOutDate$ = WODRtn$END FUNCTION FUNCTION CorrectDay% (CDMonth%, CDDay%, CDYear%) CDRtn% = 0 SELECT CASE CDDay% CASE IS <= 0 IF CDMonth% = 1 OR CDMonth% = 3 OR CDMonth% = 5 OR CDMonth% = 7 OR CDMonth% = 8 OR CDMonth% = 10 OR CDMonth% = 12 THEN CDRtn% = 31 ELSEIF CDMonth% = 4 OR CDMonth% = 6 OR CDMonth% = 9 OR CDMonth% = 11 THEN CDRtn% = 30 ELSEIF CDMonth% = 2 THEN IF CDYear% MOD 4 = 0 THEN CDRtn% = 29: ELSE CDRtn% = 28: END IF END IF CASE 29 IF CDMonth% = 2 AND CDYear% MOD 4 <> 0 THEN CDRtn% = 1 ELSE CDRtn% = CDDay%: END IF CASE 30 IF CDMonth% = 2 AND CDYear% MOD 4 = 0 THEN CDRtn% = 1: ELSE CDRtn% = CDDay%: END IF CASE 31 IF CDMonth% = 4 OR CDMonth% = 6 OR CDMonth% = 9 OR CDMonth% = 11 THEN CDRtn% = 1 ELSE CDRtn% = CDDay%: END IF CASE IS >= 32 CDRtn% = 1 CASE ELSE CDRtn% = CDDay% END SELECT CorrectDay% = CDRtn%END FUNCTION FUNCTION CenterBetween% (text$, MinX%, MaxX%) CBRtn% = 0 IF LEN(text$) + MinX% >= MaxX% THEN CBRtn% = MinX% ELSE CBRtn% = INT((MaxX% - MinX% - LEN(text$)) / 2) + MinX% END IF CenterBetween = CBRtn%END FUNCTION SUB FromNowUntil FNUMonth% = 0: FNUDay% = 0: FNUYear% = 0: FNUHour% = 0: FNUMinute% = 0: FNUSecond% = 0 FNUHeader$ = "": FNUTargetFormatDATE$ = "": FNUTargetMonth% = 0: FNUTargetDay% = 0: FNUTargetYear% = 0 FNUTargetFormatTIME$ = "": FNUTargetHour% = 0: FNUTargetMinute% = 0: FNUTargetSecond% = 0: FNUTargetDayCopy% = 0 FNUFinalDay% = 0: FNUFinalMonth% = 0: FNUFinalYear% = 0: FNUFinalHour% = 0: FNUFinalMinute% = 0: FNUFinalSecond% = 0 a$ = "": LeftChar$ = "" FNUMonth% = VAL(LEFT$(DATE$, 2)) FNUDay% = VAL(MID$(DATE$, 4, 2)) FNUYear% = VAL(RIGHT$(DATE$, 4)) FNUDay% = DaysPassedJanFromMonthDayYear(FNUMonth%, FNUDay%, FNUYear%) FNUHour% = VAL(LEFT$(TIME$, 2)) FNUMinute% = VAL(MID$(TIME$, 4, 2)) FNUSecond% = VAL(RIGHT$(TIME$, 2)) FNUHeader$ = "Select A Target Date$" FNUTargetFormatDATE$ = GetDate$(FNUHeader$) PRINT: PRINT: PRINT FNUTargetMonth% = VAL(LEFT$(FNUTargetFormatDATE$, 2)) FNUTargetDay% = VAL(MID$(FNUTargetFormatDATE$, 4, 2)) FNUTargetDayCopy% = FNUTargetDay% FNUTargetYear% = VAL(RIGHT$(FNUTargetFormatDATE$, 4)) FNUTargetDay% = DaysPassedJanFromMonthDayYear(FNUTargetMonth%, FNUTargetDay%, FNUTargetYear%) FNUHeader$ = "" FNUHeader$ = "Select A Target Time On " + WrittenOutDate$(FNUTargetMonth%, FNUTargetDayCopy%, FNUTargetYear%) FNUTargetFormatTIME$ = GetTime$(FNUHeader$) FNUTargetHour% = VAL(LEFT$(FNUTargetFormatTIME$, 2)) FNUTargetMinute% = VAL(MID$(FNUTargetFormatTIME$, 4, 4)) FNUTargetSecond% = VAL(RIGHT$(FNUTargetFormatTIME$, 2)) FNUFinalSecond% = FNUTargetSecond% - FNUSecond% IF FNUFinalSecond% < 0 THEN FNUTargetMinute% = FNUTargetMinute% - 1 FNUFinalSecond% = FNUFinalSecond% + 60 END IF FNUFinalMinute% = FNUTargetMinute% - FNUMinute% IF FinalMinute% < 0 THEN FNUTargetHour% = FNUTargetHour% - 1 FNUFinalMinute% = FNUFinalMinute% + 60 END IF FNUFinalHour% = FNUTargetHour% - FNUHour% IF FNUFinalHour% < 0 THEN FNUFinalHour% = FNUFinalHour% + 60 FNUTargetDay% = FNUTargetDay% - 1 END IF FNUFinalDay% = FNUTargetDay% - FNUDay% IF FNUFinalDay% < 0 THEN FNUFinalDay% = FNUFinalDay% + 366 FNUTargetYear% = FNUTargetYear% - 1 END IF FNUFinalYear% = FNUTargetYear% - FNUYear% COLOR 14, 1: CLS IF FNUFinalYear% < 0 THEN a$ = "": a$ = "The selected date and time is before now" LOCATE 25, Center(a$) PRINT a$ ELSE a$ = "": a$ = MakeElapsedTimeShort$(FNUFinalYear%, FNUFinalDay%, FNUFinalHour%, FNUFinalMinute%, FNUFinalSecond%) a$ = ElapsedTimeWrittenOut$(a$) IF VAL(LEFT$(a$, 2)) = 1 THEN b$ = "There is" ELSE b$ = "There are": END IF LOCATE 15, Center(b$): PRINT b$ LOCATE 20, Center(a$): PRINT a$ LOCATE 25, Center("until"): PRINT "until" a$ = "": a$ = WrittenOutDate$(FNUTargetMonth%, FNUTargetDayCopy%, FNUTargetYear%) LOCATE 30, Center(a$): PRINT a$ LOCATE 32, Center("at"): PRINT "at" a$ = "": a$ = ClockString$(FNUTargetHour%, FNUTargetMinute%, FNUTargetSecond%) LOCATE 34, Center(a$): PRINT a$ END IF a$ = "": a$ = "Hit any key to continue" LOCATE 48, Center(a$): PRINT a$: ll$ = P$END SUB FUNCTION MakeElapsedTimeShort$ (MEYears%, MEDays%, MEHours%, MEMinutes%, MESeconds%) METSRtn$ = "" IF MEYears% < 10 THEN METSRtn$ = "000" ELSEIF MEYears% >= 10 AND MEYears% < 100 THEN METSRtn$ = "00" ELSEIF MEYears% >= 100 AND MEYears% < 1000 THEN METSRtn$ = "0": END IF METSRtn$ = METSRtn$ + S$(MEYears%) + ":" IF MEDays% < 10 THEN METSRtn$ = METSRtn$ + "00" ELSEIF MEDays% >= 10 AND MEDays% < 100 THEN METSRtn$ = METSRtn$ + "0": END IF METSRtn$ = METSRtn$ + S$(MEDays%) + ":" IF MEHours% < 10 THEN METSRtn$ = METSRtn$ + "0" METSRtn$ = METSRtn$ + S$(MEHours%) + ":" IF MEMinutes% < 10 THEN METSRtn$ = METSRtn$ + "0" METSRtn$ = METSRtn$ + S$(MEMinutes%) + ":" IF MESeconds% < 10 THEN METSRtn$ = METSRtn$ + "0" METSRtn$ = METSRtn$ + S$(MESeconds%) MakeElapsedTimeShort$ = METSRtn$END FUNCTION FUNCTION ElapsedTimeWrittenOut$ (TimeShortString$) ETWORtn$ = "": Years3% = 0: Days3% = 0: Hours3% = 0: Minutes3% = 0: Seconds3% = 0 Years3% = VAL(LEFT$(TimeShortString$, 4)) Days3% = VAL(MID$(TimeShortString$, 6, 3)) Hours3% = VAL(MID$(TimeShortString$, 10, 2)) Minutes3% = VAL(MID$(TimeShortString$, 13, 2)) Seconds3% = VAL(RIGHT$(TimeShortString$, 2)) IF Years3% <> 0 THEN IF Years3% >= 1000 AND Years3% <= 9999 THEN lftNum% = INT(Years3% / 1000) ETWORtn$ = S$(lftNum%) + "," rtNum% = Years3% - (lftNum% * 1000) IF rtNum% < 10 THEN ETWORtn$ = ETWORtn$ + "00" ELSEIF rtNum% >= 10 AND rtNum% < 100 THEN ETWORtn$ = ETWORtn$ + "0" END IF ETWORtn$ = ETWORtn$ + S$(rtNum%) ELSE ETWORtn$ = S$(Years3%) END IF ETWORtn$ = ETWORtn$ + " Year" IF Years3% <> 1 THEN ETWORtn$ = ETWORtn$ + "s" IF Days3% <> 0 AND (Hours3% <> 0 OR Minutes3% <> 0 OR Seconds3% <> 0) THEN ETWORtn$ = ETWORtn$ + ", " ELSEIF Days3% <> 0 AND (Hours3% = 0 AND Minutes3% = 0 AND Seconds3% = 0) THEN ETWORtn$ = ETWORtn$ + " and " ELSEIF Hours3% <> 0 AND (Minutes3% <> 0 OR Seconds3% <> 0) THEN ETWORtn$ = ETWORtn$ + ", " ELSEIF Hours3% <> 0 AND Minutes3% = 0 AND Seconds3% = 0 THEN ETWORtn$ = ETWORtn$ + " and " ELSEIF Minutes3% <> 0 AND Seconds3% <> 0 THEN ETWORtn$ = ETWORtn$ + ", " ELSEIF Minutes3% <> 0 XOR Seconds3% <> 0 THEN ETWORtn$ = ETWORtn$ + " and " END IF END IF IF Days3% <> 0 THEN ETWORtn$ = ETWORtn$ + S$(Days3%) + " Day" IF Days3% <> 1 THEN ETWORtn$ = ETWORtn$ + "s" IF Hours3% <> 0 AND (Minutes3% <> 0 OR Seconds3% <> 0) THEN ETWORtn$ = ETWORtn$ + ", " ELSEIF Hours3% <> 0 AND Minutes3% = 0 AND Seconds3% = 0 THEN ETWORtn$ = ETWORtn$ + " and " ELSEIF Minutes3% <> 0 AND Seconds3% <> 0 THEN ETWORtn$ = ETWORtn$ + ", " ELSEIF Minutes3% <> 0 XOR Seconds3% <> 0 THEN ETWORtn$ = ETWORtn$ + " and " END IF END IF IF Hours3% <> 0 THEN ETWORtn$ = ETWORtn$ + S$(Hours3%) + " hour" IF Hours3% <> 1 THEN ETWORtn$ = ETWORtn$ + "s" IF Minutes3% <> 0 AND Seconds3% <> 0 THEN ETWORtn$ = ETWORtn$ + ", " ELSEIF Minutes3% <> 0 XOR Seconds3% <> 0 THEN ETWORtn$ = ETWORtn$ + " and " END IF END IF IF Minutes3% <> 0 THEN ETWORtn$ = ETWORtn$ + S$(Minutes3%) + " minute" IF Minutes3% <> 1 THEN ETWORtn$ = ETWORtn$ + "s" IF Seconds3% <> 0 THEN ETWORtn$ = ETWORtn$ + " and " END IF IF Seconds3% <> 0 THEN ETWORtn$ = ETWORtn$ + S$(Seconds3%) + " second" IF Seconds3% <> 1 THEN ETWORtn$ = ETWORtn$ + "s" END IF IF Years3% = 0 AND Days3% = 0 AND Hours3% = 0 AND Minutes3% = 0 AND Seconds3% = 0 THEN ETWORtn$ = "Nothing" ElapsedTimeWrittenOut$ = ETWORtn$END FUNCTION FUNCTION GetTime$ (GTHeader$) HaltAndDisplay% = 0: GTHeaderCopy$ = "": Instructions$ = "": xPos% = 0: yPos% = 0: HighlightedOption% = 0 GTHours% = 0: GTMinutes% = 0: GTSeconds% = 0: SomeKey% = 0: TimerStarted% = 0: GTClock$ = "" FirstTime% = 0: Increment% = 0: TimeElapsed% = 0: UserCommand$ = "": MaxOption% = 0: GTRtn$ = "" HaltAndDisplay% = TRUE%: xPos% = 13: yPos% = 25: HighlightedOption% = 1 GTHours% = VAL(LEFT$(TIME$, 2)): GTMinutes% = VAL(MID$(TIME$, 4, 2)): GTSeconds% = VAL(RIGHT$(TIME$, 2)) Increment% = 1: TimerStarted% = FALSE%: MaxOption% = 3 DO UserCommand$ = INKEY$ IF HaltAndDisplay% = TRUE% THEN GTHeaderCopy$ = GTHeader$ COLOR 14, 1: CLS COLOR 15 IF LEN(GTHeader$) >= 50 THEN LOCATE 6, 1: PRINT LongCenter(GTHeaderCopy$, 50, FALSE%) ELSE LOCATE 7, Center(GTHeaderCopy$) PRINT GTHeaderCopy$ END IF COLOR 12, 1: Instructions$ = "Use the arrow keys to select the time. Push [ESC] to reset. Push " Instructions$ = Instructions$ + CHR$(34) + "X" + CHR$(34) + " to exit to the system. Push [ENTER] when you have selected the desired time" LOCATE 44, 1: PRINT LongCenter$(Instructions$, 60, FALSE%) IF HighlightedOption% = 1 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF LOCATE yPos% - 5, xPos%: PRINT "Hours" LOCATE yPos% - 2, xPos% + 2 COLOR 14, 1: IF GTHours% - 1 = -1 THEN PRINT "11" ELSEIF GTHours% - 1 = 0 THEN PRINT "12" ELSEIF GTHours% - 1 > 0 AND GTHours% - 1 <= 12 THEN PRINT S$(GTHours% - 1) ELSEIF GTHours% - 1 >= 13 AND GTHours% - 1 <= 23 THEN PRINT S$(GTHours% - 1 - 12): END IF LOCATE yPos%, xPos% + 2: COLOR 10, 0 IF GTHours% = 0 THEN PRINT "12" ELSEIF GTHours% > 0 AND GTHours% <= 12 THEN PRINT S$(GTHours%) ELSEIF GTHours% > 12 AND GTHours% < 24 THEN PRINT S$(GTHours% - 12): END IF LOCATE yPos% + 2, xPos% + 2: COLOR 14, 1 IF GTHours% + 1 >= 1 AND GTHours% + 1 < 13 THEN PRINT S$(GTHours% + 1) ELSEIF GTHours% + 1 >= 13 AND GTHours% + 1 <= 24 THEN PRINT S$(GTHours% + 1 - 12): END IF IF HighlightedOption% = 2 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF LOCATE yPos% - 5, xPos% + 16: PRINT "Minutes" LOCATE yPos% - 2, xPos% + 18: COLOR 14, 1 IF GTMinutes% - 1 = -1 THEN PRINT "59" ELSEIF GTMinutes% - 1 >= 0 AND GTMinutes% - 1 <= 59 THEN IF GTMinutes% - 1 < 10 THEN PRINT "0";: PRINT S$(GTMinutes% - 1) END IF LOCATE yPos%, xPos% + 18: COLOR 10, 0: IF GTMinutes% < 10 THEN PRINT "0"; PRINT S$(GTMinutes%) LOCATE yPos% + 2, xPos% + 18: COLOR 14, 1 IF GTMinutes% + 1 >= 0 AND GTMinutes% + 1 <= 59 THEN IF GTMinutes% + 1 < 10 THEN PRINT "0"; PRINT S$(GTMinutes% + 1) ELSEIF GTMinutes% + 1 = 60 THEN PRINT "00" END IF IF HighlightedOption% = 3 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF LOCATE yPos% - 5, xPos% + 32: PRINT "Seconds" LOCATE yPos% - 2, xPos% + 36: COLOR 14, 1 IF GTSeconds% - 1 = -1 THEN PRINT "59" ELSEIF GTSeconds% - 1 >= 0 AND GTSeconds% <= 59 THEN IF GTSeconds% - 1 < 10 THEN PRINT "0"; PRINT S$(GTSeconds% - 1) END IF LOCATE yPos%, xPos% + 36: COLOR 10, 0: IF GTSeconds% < 10 THEN PRINT "0"; PRINT S$(GTSeconds%) LOCATE yPos% + 2, xPos% + 36: COLOR 14, 1 IF GTSeconds% + 1 >= 0 AND GTSeconds% + 1 <= 59 THEN IF GTSeconds% + 1 < 10 THEN PRINT "0"; PRINT S$(GTSeconds% + 1) ELSEIF GTSeconds% + 1 = 60 THEN PRINT "00": END IF LOCATE yPos% - 2, xPos% + 50: COLOR 14, 1 IF GTHours% - 1 >= 0 AND GTHours% - 1 <= 11 THEN PRINT "AM": ELSE PRINT "PM": END IF LOCATE yPos%, xPos% + 50: COLOR 10, 0 IF GTHours% < 12 THEN PRINT "AM": ELSE PRINT "PM": END IF LOCATE yPos% + 2, xPos% + 50: COLOR 14, 1 IF GTHours% + 1 >= 0 AND GTHours% + 1 <= 11 OR GTHours% + 1 = 24 THEN PRINT "AM": ELSE: PRINT "PM": END IF GTClock$ = ClockString$(GTHours%, GTMinutes%, GTSeconds%) COLOR 10, 0: LOCATE ypos + 34, Center(GTClock$): PRINT GTClock$ HaltAndDisplay% = FALSE% END IF SomeKey% = _KEYHIT IF SomeKey% = UpKeyHit% OR SomeKey% = DownKeyHit% THEN IF TimerStarted% = FALSE% THEN FirstTime% = TIMER TimerStarted% = TRUE% END IF END IF IF SomeKey% < 0 THEN FirstTime% = 0 Increment% = 1 TimeElapsed% = 0 TimerStarted% = FALSE% END IF TimeElapsed% = ABS(TIMER - FirstTime%) IF TimeElapsed% = 2 THEN IF HighlightedOption% = 2 OR HighlightedOption% = 3 THEN Increment% = 3 END IF SELECT CASE UserCommand$ CASE UpArrowKey$ IF HighlightedOption% = 1 THEN GTHours% = GTHours% - Increment% IF GTHours% < 0 THEN GTHours% = 23 ELSEIF HighlightedOption% = 2 THEN GTMinutes% = GTMinutes% - Increment% IF GTMinutes% < 0 THEN GTMinutes% = 59 ELSEIF HighlightedOption% = 3 THEN GTSeconds% = GTSeconds% - Increment% IF GTSeconds% < 0 THEN GTSeconds% = 59 END IF HaltAndDisplay% = TRUE CASE DownArrowKey$ IF HighlightedOption% = 1 THEN GTHours% = GTHours% + Increment% IF GTHours% > 23 THEN GTHours% = 0 ELSEIF HighlightedOption% = 2 THEN GTMinutes% = GTMinutes% + Increment% IF GTMinutes% > 59 THEN GTMinutes% = 0 ELSEIF HighlightedOption% = 3 THEN GTSeconds% = GTSeconds% + Increment% IF GTSeconds% > 59 THEN GTSeconds% = 0 END IF HaltAndDisplay% = TRUE CASE LeftArrowKey$ HighlightedOption% = HighlightedOption% - 1 IF HighlightedOption% = 0 THEN HighlightedOption% = MaxOption% HaltAndDisplay% = TRUE CASE RightArrowKey$ HighlightedOption% = HighlightedOption% + 1 IF HighlightedOption% > MaxOption% THEN HighlightedOption% = 1 HaltAndDisplay% = TRUE CASE CHR$(13) GTRtn$ = MakeFormattedTIME$(GTHours%, GTMinutes%, GTSeconds%) CASE CHR$(27) GTHours% = VAL(LEFT$(TIME$, 2)) GTMinutes% = VAL(MID$(TIME$, 4, 2)) GTSeconds% = VAL(RIGHT$(TIME$, 2)) HaltAndDisplay% = TRUE% CASE "X", "x" SYSTEM END SELECT LOOP UNTIL UserCommand$ = CHR$(13) GetTime$ = GTRtn$END FUNCTION FUNCTION MakeFormattedTIME$ (MFHours%, MFMinutes%, MFSeconds%) MFTRtn$ = "" IF MFHours% < 10 THEN MFTRtn$ = "0" MFTRtn$ = MFTRtn$ + S$(MFHours%) + ":" IF MFMinutes% < 10 THEN MFTRtn$ = MFTRtn$ + "0" MFTRtn$ = MFTRtn$ + S$(MFMinutes%) + ":" IF MFSeconds% < 10 THEN MFTRtn$ = MFTRtn$ + "0" MFTRtn$ = MFTRtn$ + S$(MFSeconds%) MakeFormattedTIME$ = MFTRtn$ END FUNCTION FUNCTION LongCenter$ (Text$, CutHere%, BlankLineBetween%) PartString$ = "": Spaces$ = "": CutString$ = "": LCRtn$ = "": LastSpaces$ = "" NumLastSpaces% = 0 CutHere% = CutHere% + 1 DO DO CutHere% = CutHere% - 1 Cutting$ = MID$(Text$, CutHere%, 1) LOOP UNTIL Cutting$ = " " PartString$ = MID$(Text$, 1, CutHere%) Text$ = MID$(Text$, CutHere% + 1, LEN(Text$)) Spaces$ = STRING$(Center(PartString$), " ") CutString$ = Spaces$ + PartString$ + Spaces$ LCRtn$ = LCRtn$ + CutString$ IF BlankLineBetween% = TRUE% THEN LCRtn$ = LCRtn$ + STRING$(80, " ") LOOP UNTIL LEN(Text$) < CutHere% NumLastSpaces% = Center(Text$) LastSpaces$ = STRING$(NumLastSpaces%, " ") LCRtn$ = LCRtn$ + LastSpaces$ + Text$ LongCenter$ = LCRtn$END FUNCTION FUNCTION DaysPassedJanFromMonthDayYear% (Month9%, Day9%, Years9%) DPJFMDYRtn% = 0: LeapYear% = 0 IF Years9% MOD 4 = 0 THEN LeapYear% = 1: ELSE LeapYear% = 0: END IF SELECT CASE Month9% CASE 1 DPJFMDYRtn% = Day9% CASE 2 DPJFMDYRtn% = 31 + Day9% CASE 3 DPJFMDYRtn% = 31 + 28 + LeapYear% + Day9% CASE 4 DPJFMDYRtn% = 31 + 28 + LeapYear% + 31 + Day9% CASE 5 DPJFMDYRtn% = 31 + 28 + LeapYear% + 31 + 30 + Day9% CASE 6 DPJFMDYRtn% = 31 + 28 + LeapYear% + 31 + 30 + 31 + Day9% CASE 7 DPJFMDYRtn% = 31 + 28 + LeapYear% + 31 + 30 + 31 + 30 + Day9% CASE 8 DPJFMDYRtn% = 31 + 28 + LeapYear% + 31 + 30 + 31 + 30 + 31 + Day9% CASE 9 DPJFMDYRtn% = 31 + 28 + LeapYear% + 31 + 30 + 31 + 30 + 31 + 31 + Day9% CASE 10 DPJFMDYRtn% = 31 + 28 + LeapYear% + 31 + 30 + 31 + 30 + 31 + 31 + 30 + Day9% CASE 11 DPJFMDYRtn% = 31 + 28 + LeapYear% + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + Day9% CASE 12 DPJFMDYRtn% = 31 + 28 + LeapYear% + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + Day9% END SELECT DaysPassedJanFromMonthDayYear = DPJFMDYRtn%END FUNCTION SUB HowLongSince YearNow% = 0: DayNow% = 0: HourNow% = 0: MinuteNow% = 0: SecondNow% = 0: MonthNow% = 0 HLSTargetDateAndTime$ = "": Instructions$ = "": DayNowCopy% = 0: HLSTargetYear% = 0: HLSTargetDay% = 0 HLSTargetHour% = 0: HLSTargetMinute% = 0: HLSTargetSecond% = 0: HLSFinalYear% = 0: HLSFinalDay% = 0 HLSFinalHour% = 0: HLSFinalMinute% = 0: HLSFinalSecond% = 0: SecondNowCopy% = 0: MinuteNowCopy% = 0: HourNowCopy% = 0 DayNowCopy% = 0: YearNowCopy% = 0: HLSTargetMonth% = 0: HLSTargetDayCopy% = 0 YearNow% = VAL(RIGHT$(DATE$, 4)) DayNow% = VAL(MID$(DATE$, 4, 2)) DayNowCopy% = DayNow% MonthNow% = VAL(LEFT$(DATE$, 2)) DayNow% = DaysPassedJanFromMonthDayYear(MonthNow%, DayNow%, YearNow%) HourNow% = VAL(LEFT$(TIME$, 2)) MinuteNow% = VAL(MID$(TIME$, 4, 2)) SecondNow% = VAL(RIGHT$(TIME$, 2)) YearNowCopy% = YearNow% HourNowCopy% = HourNow% MinuteNowCopy% = MinuteNow% SecondNowCopy% = SecondNow% Instructions$ = "Select A Target Date and Time Before " + WrittenOutDate$(MonthNow%, DayNowCopy%, YearNow%) Instructions$ = Instructions$ + " at " + ClockString$(HourNow%, MinuteNow%, SecondNow%) HLSTargetDateAndTime$ = GetDateAndTime$(Instructions$) whatTheHellString$ = MID$(HLSTargetDateAndTime$, 6, 3) whatTheHellInteger% = VAL(whatTheHellString$) HLSTargetYear% = VAL(LEFT$(HLSTargetDateAndTime$, 4)) HLSTargetDay% = VAL(MID$(HLSTargetDateAndTime$, 6, 3)) HLSTargetHour% = VAL(MID$(HLSTargetDateAndTime$, 10, 2)) HLSTargetMinute% = VAL(MID$(HLSTargetDateAndTime$, 13, 2)) HLSTargetSecond% = VAL(RIGHT$(HLSTargetDateAndTime$, 2)) HLSTargetMonth% = MonthOrDayFromDaysPassedJan(HLSTargetDay%, 1, HLSTargetYear%) HLSTargetDayCopy% = MonthOrDayFromDaysPassedJan(HLSTargetDay%, 2, HLSTargetYear%) HLSFinalSecond% = SecondNow% - HLSTargetSecond% IF HLSFinalSecond% < 0 THEN HLSFinalSecond% = HLSFinalSecond% + 60 MinuteNow% = MinuteNow% - 1 END IF HLSFinalMinute% = MinuteNow% - HLSTargetMinute% IF HLSFinalMinute% < 0 THEN HLSFinalMinute% = HLSFinalMinute% + 60 HourNow% = HourNow% - 1 END IF HLSFinalHour% = HourNow% - HLSTargetHour% IF HLSFinalHour% < 0 THEN HLSFinalHour% = HLSFinalHour% + 24 DayNow% = DayNow% - 1 END IF HLSFinalDay% = DayNow% - whatTheHellInteger% IF HLSFinalDay% < 0 THEN HLSFinalDay% = HLSFinalDay% + 365 YearNow% = YearNow% - 1 END IF HLSFinalYear% = YearNow% - HLSTargetYear% COLOR 14, 1: CLS IF HLSFinalYear% < 0 THEN a$ = "": a$ = "The selected date and time is after " a$ = a$ + WrittenOutDate$(MonthNow%, DayNowCopy%, YearNowCopy%) a$ = a$ + " at " + ClockString$(HourNowCopy%, MinuteNowCopy%, SecondNowCopy%) LOCATE 24, 1 PRINT LongCenter$(a$, 50, TRUE%) ELSE a$ = "": a$ = WrittenOutDate$(HLSTargetMonth%, HLSTargetDayCopy%, HLSTargetYear%) a$ = a$ + " at " + ClockString$(HLSTargetHour%, HLSTargetMinute%, HLSTargetSecond%) a$ = a$ + " occurred " a$ = a$ + ElapsedTimeWrittenOut$(MakeElapsedTimeShort$(HLSFinalYear%, HLSFinalDay%, HLSFinalHour%, HLSFinalMinute%, HLSFinalSecond%)) a$ = a$ + " ago" LOCATE 24, 1 PRINT LongCenter(a$, 50, TRUE%) END IF a$ = "Hit any key": LOCATE 48, Center(a$): PRINT a$: ll$ = P$END SUB SUB WhatDateAfterElapsedTime TimePassed$ = "": YearsToday% = 0: MonthToday% = 0: DaysToday% = 0: DaysTodayAfterJan0% = 0: HoursToday% = 0: MinutesToday% = 0 SecondsToday% = 0: YearsPassed% = 0: DaysPassed% = 0: HoursPassed% = 0: MinutesPassed% = 0: SecondsPassed% = 0 ResultingYears% = 0: ResultingDaysPassedJan% = 0: ResultingDays% = 0: ResultingHours% = 0: ResultingMinutes% = 0 ResultingSeconds% = 0: ResultingDateMonth% = 0: ResultingDateDay% = 0: ResultingDateYear% = 0: ResultingTimeHour% = 0 ResultingTimeMinutes% = 0: ResultingTimeSeconds% = 0: AnswerString$ = "" YearsToday% = VAL(RIGHT$(DATE$, 4)) DaysToday% = VAL(MID$(DATE$, 4, 2)) MonthToday% = VAL(LEFT$(DATE$, 2)) DaysTodayAfterJan0% = DaysPassedJanFromMonthDayYear(MonthToday%, DaysToday%, YearsToday%) HoursToday% = VAL(LEFT$(TIME$, 2)) MinutesToday% = VAL(MID$(TIME$, 4, 2)) SecondsToday% = VAL(RIGHT$(TIME$, 2)) TimePassed$ = GetElapsedTime$("Find the date after how much time has passed?") YearsPassed% = VAL(LEFT$(TimePassed$, 4)) DaysPassed% = VAL(MID$(TimePassed$, 6, 3)) HoursPassed% = VAL(MID$(TimePassed$, 10, 2)) MinutesPassed% = VAL(MID$(TimePassed$, 13, 2)) SecondsPassed% = VAL(RIGHT$(TimePassed$, 2)) ResultingSeconds% = SecondsToday% + SecondsPassed% IF ResultingSeconds% >= 60 THEN ResultingSeconds% = ResultingSeconds% - 60 MinutesPassed% = MinutesPassed% + 1 END IF ResultingMinutes% = MinutesToday% + MinutesPassed% IF ResultingMinutes% >= 60 THEN ResultingMinutes% = ResultingMinutes% - 60 HoursPassed% = HoursPassed% + 1 END IF ResultingHours% = HoursToday% + HoursPassed% IF ResultingHours% >= 24 THEN ResultingHours% = ResultingHours% - 24 DaysPassed% = DaysPassed% + 1 END IF ResultingDays% = DaysTodayAfterJan0% + DaysPassed% IF ResultingDays% >= 365 THEN ResultingDays% = ResultingDays% - 365 YearsPassed% = YearsPassed% + 1 END IF ResultingYears% = YearsToday% + YearsPassed% ResultingDateYear% = ResultingYears% ResultingDateMonth% = MonthOrDayFromDaysPassedJan(ResultingDays%, 1, ResultingDateYear%) ResultingDateDay% = MonthOrDayFromDaysPassedJan(ResultingDays%, 2, ResultingDateYear%) ResultingTimeHour% = ResultingHours% ResultingTimeMinutes% = ResultingMinutes% ResultingTimeSeconds% = ResultingSeconds% AnswerString$ = ElapsedTimeWrittenOut$(MakeElapsedTimeShort$(YearsPassed%, DaysPassed%, HoursPassed%, MinutesPassed%, SecondsPassed%)) AnswerString$ = AnswerString$ + " after now is " AnswerString$ = AnswerString$ + WrittenOutDate$(ResultingDateMonth%, ResultingDateDay%, ResultingDateYear%) AnswerString$ = AnswerString$ + " at " + ClockString$(ResultingTimeHour%, ResultingTimeMinutes%, ResultingTimeSeconds%) CLS LOCATE 23, 1 PRINT LongCenter$(AnswerString$, 45, TRUE%) a$ = "": a$ = "Hit any key": LOCATE 48, Center(a$): PRINT a$: ll$ = P$END SUB SUB AddElapsedTimes Years1% = 0: Years2% = 0: AddedYears% = 0: Days1% = 0: Days2% = 0: AddedDays% = 0: Hours1% = 0 Hours2% = 0: AddedHours% = 0: Minutes1% = 0: Minutes2% = 0: AddedMinutes% = 0: Seconds1% = 0 Seconds2% = 0: AddedSeconds% = 0: et1$ = "": et2$ = "": Prompt2$ = "": AnswerString$ = "": AT$ = "" et1$ = GetElapsedTime$("Select the fire time") Years1% = VAL(LEFT$(et1$, 4)) Days1% = VAL(MID$(et1$, 6, 3)) Hours1% = VAL(MID$(et1$, 10, 2)) Minutes1% = VAL(MID$(et1$, 13, 2)) Seconds1% = VAL(RIGHT$(et1$, 2)) Prompt2$ = "Select the amount of time to add to " + ElapsedTimeWrittenOut$(et1$) et2$ = GetElapsedTime$(Prompt2$) Years2% = VAL(LEFT$(et2$, 4)) Days2% = VAL(MID$(et2$, 6, 3)) Hours2% = VAL(MID$(et2$, 10, 2)) Minutes2% = VAL(MID$(et2$, 13, 2)) Seconds2% = VAL(RIGHT$(et2$, 2)) AddedSeconds% = Seconds1% + Seconds2% IF AddedSeconds% >= 60 THEN AddedSeconds% = AddedSeconds% - 60 Minutes1% = Minutes1% + 1 END IF AddedMinutes% = Minutes1% + Minutes2% IF AddedMinutes% >= 60 THEN AddedMinutes% = AddedMinutes% - 60 Hours1% = Hours1% + 1 END IF AddedHours% = Hours1% + Hours2% IF AddedHours% >= 24 THEN AddedHours% = AddedHours% - 24 Days1% = Days1% + 1 END IF AddedDays% = Days1% + Days2% IF AddedDays% >= 365 THEN AddedDays% = AddedDays% - 365 Years1% = Years1% + 1 END IF AddedYears% = Years1% + Years2% COLOR 14, 1: CLS AnswerString$ = ElapsedTimeWrittenOut$(et1$) + " added with " + ElapsedTimeWrittenOut$(et2$) ATShort$ = MakeElapsedTimeShort$(AddedYears%, AddedDays%, AddedHours%, AddedMinutes%, AddedSeconds%) AT$ = ElapsedTimeWrittenOut$(ATShort$) AnswerString$ = AnswerString$ + " equals " + AT$ LOCATE 20, 1 PRINT LongCenter$(AnswerString$, 50, TRUE%) ll$ = P$END SUB SUB SubtractElapsedTimes Et1$ = "": Et2$ = "": Prompt1$ = "": Prompt2$ = "": Years1% = 0: Years2% = 0: SubtractedYears% = 0: Days1% = 0: Days2% = 0 SubtractedDays% = 0: Hours1% = 0: Hours2% = 0: SubtractedHours% = 0: Minutes1% = 0: Minutes2% = 0: SubtractedMinutes% = 0 Seconds1% = 0: Seconds2% = 0: SubtractedSeconds% = 0: BT% = 0: FirstYears% = 0: SecondYears% = 0: FirstDays% = 0: SecondDays% = 0 FirstHours% = 0: SecondHours% = 0: FirstMinutes% = 0: SecondMinutes% = 0: FirstSeconds% = 0: SecondSeconds% = 0: Result$ = "" FTWO$ = "": STWO$ = "": SubTWO$ = "" Prompt1$ = "Select one of the 2 times" Et1$ = GetElapsedTime$(Prompt1$) Years1% = VAL(LEFT$(Et1$, 4)) Days1% = VAL(MID$(Et1$, 6, 3)) Hours1% = VAL(MID$(Et1$, 10, 2)) Minutes1% = VAL(MID$(Et1$, 13, 2)) Seconds1% = VAL(RIGHT$(Et1$, 2)) Prompt2$ = "Select the second time -- The smaller time will be subtracted from the larger" Et2$ = GetElapsedTime$(Prompt2$) Years2% = VAL(LEFT$(Et2$, 4)) Days2% = VAL(MID$(Et2$, 6, 3)) Hours2% = VAL(MID$(Et2$, 10, 2)) Minutes2% = VAL(MID$(Et2$, 13, 2)) Seconds2% = VAL(RIGHT$(Et2$, 2)) BT% = 1 IF Years1% < Years2% THEN BT% = 2 ELSEIF Years1% = Years2% AND Days1% < Days2% THEN BT% = 2 ELSEIF Years1% = Years2% AND Days1% = Days2% AND Hours1% < Hours2% THEN BT% = 2 ELSEIF Years1% = Years2% AND Days1% = Days2% AND Hours1% = Hours2% AND Minutes1% < Minutes2% THEN BT% = 2 ELSEIF Years1% = Years2% AND Days1% = Days2% AND Hours1% = Hours2% AND Minutes1% = Minutes1% AND Seconds1% < Seconds2% THEN BT% = 2 END IF ' first - second IF BT% = 1 THEN FirstYears% = Years1%: SecondYears% = Years2% FirstDays% = Days1%: SecondDays% = Days2% FirstHours% = Hours1%: SecondHours% = Hours2% FirstMinutes% = Minutes1%: SecondMinutes% = Minutes2% FirstSeconds% = Seconds1%: SecondSeconds% = Seconds2% ELSE FirstYears% = Years2%: SecondYears% = Years1% FirstDays% = Days2%: SecondDays% = Days1% FirstHours% = Hours2%: SecondHours% = Hours1% FirstMinutes% = Minutes2%: SecondMinutes% = Minutes1% FirstSeconds% = Seconds2%: SecondSeconds% = Seconds1% END IF SubtractedSeconds% = FirstSeconds% - SecondSeconds% IF SubtractedSeconds% < 0 THEN SubtractedSeconds% = SubtractedSeconds% + 60 FirstMinutes% = FirstMinutes% - 1 END IF SubtractedMinutes% = FirstMinutes% - SecondMinutes% IF SubtractedMinutes% < 0 THEN SubtractedMinutes% = SubtractedMinutes% + 60 FirstHours% = FirstHours% - 1 END IF SubtractedHours% = FirstHours% - SecondHours% IF SubtractedHours% < 0 THEN SubtractedHours% = SubtractedHours% + 24 FirstDays% = FirstDays% - 1 END IF SubtractedDays% = FirstDays% - SecondDays% IF SubtractedDays% < 0 THEN SubtractedDays% = SubtractedDays% + 365 FirstYears% = FirstYears% - 1 END IF SubtractedYears% = FirstYears% - SecondYears% CLS PRINT "SubtractedYears%: " + S$(SubtractedYears%) PRINT "SubtractedDays%: " + S$(SubtractedDays%) PRINT "SubtractedHours%: " + S$(SubtractedHours%) PRINT "SubtractedMinutes%: " + S$(SubtractedMinutes%) PRINT "SubtractedSeconds%: " + S$(SubtractedSeconds%) ll$ = P$ FTWO$ = ElapsedTimeWrittenOut$(Et1$) STWO$ = ElapsedTimeWrittenOut$(Et2$) SubTWO$ = ElapsedTimeWrittenOut$(MakeElapsedTimeShort$(SubtractedYears%, SubtractedDays%, SubtractedHours%, SubtractedMinutes%, SubtractedSeconds%)) Result$ = FTWO$ + " minus " + STWO$ + " equals " + SubTWO$ CLS: COLOR 14, 1: LOCATE 20, 1: PRINT LongCenter$(Result$, 50, TRUE%) ll$ = P$END SUB SUB Multiply Prompt$ = "": Et$ = "": Years% = 0: Days% = 0: Hours% = 0: Minutes% = 0: Seconds% = 0: ETWO$ = "": x = 0 Constant! = 0.0: ProductYears% = 0: ProductDays% = 0: ProductHours% = 0: ProductMinutes% = 0: ProductSeconds% = 0 TMin% = 0: THr% = 0: Tsec% = 0: Tday% = 0: Tyr% = 0: Ans$ = "" Prompt$ = "Select a time to multiply" Et$ = GetElapsedTime$(Prompt$) Years% = VAL(LEFT$(Et$, 4)) Days% = VAL(MID$(Et$, 6, 3)) Hours% = VAL(MID$(Et$, 10, 2)) Minutes% = VAL(MID$(Et$, 13, 2)) Seconds% = VAL(MID$(Et$, 16, 2)) COLOR 14, 1: CLS LOCATE 20, Center("Multiply") ETWO$ = ElapsedTimeWrittenOut$(Et$) LOCATE 22, Center(ETWO$): PRINT ETWO$ x = Center("by what ") LOCATE 25, x: INPUT "by what"; Constant! ProductSeconds% = RoundOff(Seconds% * Constant! / 100) * 100 IF ProductSeconds% >= 60 THEN DO ProductSeconds% = ProductSeconds% - 60 TMin% = TMin% + 1 LOOP UNTIL ProductSeconds% < 60 END IF ProductMinutes% = RoundOff(Minutes% * Constant! / 100) * 100 + TMin% IF ProductMinutes% >= 60 THEN DO ProductMinutes% = ProductMinutes% - 60 THr% = THr% + 1 LOOP UNTIL ProductMinutes% < 60 END IF ProductHours% = RoundOff(Hours% * Constant! / 100) * 100 + THr% IF ProductHours% >= 24 THEN DO ProductHours% = ProductHours% - 24 Tday% = Tday% + 1 LOOP UNTIL ProductHours% < 24 END IF ProductDays% = RoundOff(Days% * Constant! / 100) * 100 + Tday% IF ProductDays% >= 365 THEN ProductDays% = ProductDays% - 365 Tyr% = Tyr% + 1 END IF ProductYears% = RoundOff(Years% * Constant! / 100) * 100 + Tyr% CLS IF ProductYears% > 9999 THEN LOCATE 10: a$ = "": a$ = "May not display correctly": LOCATE , Center(a$): PRINT a$ END IF LOCATE 20, Center(ElapsedTimeWrittenOut$(Et$)): PRINT ElapsedTimeWrittenOut$(Et$) Ans$ = "multiplied by " + S$(Constant!) + " equals": LOCATE 22, Center(Ans$): PRINT Ans$ LOCATE 24, 1 PRINT LongCenter(ElapsedTimeWrittenOut$(MakeElapsedTimeShort$(ProductYears%, ProductDays%, ProductHours%, ProductMinutes%, ProductSeconds%)), 40, TRUE) ll$ = P$END SUB FUNCTION RoundOff (Number!) DIM Rtn!, DifferentNumber!, Decimal!: Rtn = 0.0: DifferentNumber = 0.0: Decimal = 0.0 Decimal = INT(Number * 1000) - (INT(Number * 100) * 10) DifferentNumber! = INT(Number! * 100) IF Decimal! >= 5 AND Decimal! <= 9 THEN DifferentNumber! = DifferentNumber! + 1 ELSE DifferentNumber! = DifferentNumber! END IF Rtn = DifferentNumber! / 100 RoundOff = Rtn!END FUNCTION FUNCTION GetElapsedTime$ (title$) DIM minOption, maxOption, haltAndDisplay, xPos, yPos, highlightedOption AS INTEGER DIM Years1, Days1, Hours1, Minutes1, Seconds1 AS INTEGER KeyThatWasHit% = 0: TimerStarted% = FALSE%: FirstTime% = 0: Increment% = 1: RecentTime% = 0: TimeDifference% = 0 highlightedOption = 4: haltAndDisplay = TRUE minOption = 4: maxOption = 8 DO userCommand$ = INKEY$ IF haltAndDisplay = TRUE THEN COLOR 14, 1: CLS: yPos = 22: xPos = 10 COLOR 15, 1 titleCopy$ = title$ IF LEN(titleCopy$) >= 60 THEN a$ = LongCenter(titleCopy$, 60, FALSE%) LOCATE 8, 1: PRINT a$ ELSE LOCATE 8, Center(titleCopy$): PRINT title$ END IF COLOR 12, 1 Instructions$ = "" Instructions$ = "Use the arrow keys to select the desired elapsed time - Push [ENTER] to accept - Push " Instructions$ = Instructions$ + "Push [ESC] to reset - Push " + CHR$(34) + "X" + CHR$(34) + " to exit to the system" LOCATE yPos + 18, 1 PRINT LongCenter$(Instructions$, 50, FALSE%) xPos = xPos + 16 'Years LOCATE yPos - 5, xPos - 10 IF highlightedOption = 4 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Years" LOCATE yPos - 2, xPos - 10: COLOR 14, 1: IF Years1 - 1 >= 0 THEN PRINT USING "#,###"; (Years1 - 1): ELSE PRINT "9,999": END IF LOCATE yPos: COLOR 10, 0: IF Years1 >= 0 AND Years1 < 10 THEN LOCATE , xPos - 6: PRINT S$(Years1) ELSEIF Years1 >= 10 AND Years1 < 100 THEN LOCATE , xPos - 7: PRINT S$(Years1) ELSEIF Years1 >= 100 AND Years1 < 1000 THEN LOCATE , xPos - 8: PRINT S$(Years1) ELSEIF Years1 >= 1000 AND Years1 < 10000 THEN LOCATE , xPos - 10: PRINT USING "#,###"; Years1 ELSE PRINT "I hope I don't see this error": END IF LOCATE yPos + 2, xPos - 10: COLOR 14, 1: IF Years1 + 1 < 10000 THEN PRINT USING "#,###"; Years1 + 1: ELSE PRINT USING "#,###"; 0: END IF 'Days LOCATE yPos - 5, xPos IF highlightedOption = 5 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Days" COLOR 14, 1: LOCATE yPos - 2, xPos: IF Days1 - 1 = -1 THEN PRINT "364": ELSE PRINT USING "###"; Days1 - 1: END IF COLOR 10, 0: LOCATE yPos: IF Days1 < 10 THEN LOCATE , xPos + 2: PRINT S$(Days1) ELSEIF Days1 < 100 THEN LOCATE , xPos + 1: PRINT S$(Days1) ELSE LOCATE , xPos: PRINT S$(Days1): END IF COLOR 14, 1: LOCATE yPos + 2, xPos + 0: IF Days1 + 1 < 365 THEN PRINT USING "###"; Days1 + 1: ELSE PRINT USING "###"; 0: END IF LOCATE yPos - 5, xPos + 9 IF highlightedOption = 6 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Hours" COLOR 14, 1: LOCATE yPos - 2, xPos + 11: IF Hours1 - 1 >= 0 THEN PRINT S$(Hours1 - 1): ELSE PRINT "23": END IF LOCATE yPos, xPos + 11: COLOR 10, 0: PRINT S$(Hours1) LOCATE yPos + 2, xPos + 11: COLOR 14, 1: IF Hours1 + 1 <= 23 THEN PRINT S$(Hours1 + 1): ELSE PRINT "0": END IF LOCATE yPos - 5, xPos + 18 IF highlightedOption = 7 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Minutes" COLOR 14, 1: LOCATE yPos - 2, xPos + 20: IF Minutes1 - 1 >= 0 THEN PRINT S$(Minutes1 - 1): ELSE PRINT "59": END IF LOCATE yPos, xPos + 20: COLOR 10, 0: PRINT S$(Minutes1) LOCATE yPos + 2, xPos + 20: COLOR 14, 1: IF Minutes1 + 1 < 60 THEN PRINT S$(Minutes1 + 1): ELSE PRINT "0": END IF LOCATE yPos - 5, xPos + 29 IF highlightedOption = 8 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT "Seconds" COLOR 14, 1: LOCATE yPos - 2, xPos + 32: IF Seconds1 - 1 >= 0 THEN PRINT S$(Seconds1 - 1): ELSE PRINT "59": END IF LOCATE yPos, xPos + 32: COLOR 10, 0: PRINT S$(Seconds1) LOCATE yPos + 2, xPos + 32: COLOR 14, 1: IF Seconds1 + 1 <= 59 THEN PRINT S$(Seconds1 + 1): ELSE PRINT "0": END IF a$ = "": a$ = ElapsedTimeWrittenOut$(MakeElapsedTimeShort$(Years1, Days1, Hours1, Minutes1, Seconds1)) LOCATE yPos + 12, Center(a$): PRINT a$ haltAndDisplay = FALSE END IF SomeKey% = _KEYHIT IF SomeKey% = UpKeyHit% OR SomeKey% = DownKeyHit% THEN IF TimerStarted% = FALSE% THEN FirstTime% = TIMER TimerStarted% = TRUE% END IF END IF IF SomeKey% < 0 THEN FirstTime% = 0 Increment% = 1 TimeElapsed% = 0 TimerStarted% = FALSE% END IF TimeElapsed% = ABS(TIMER - FirstTime%) IF TimeElapsed% = 2 THEN IF highlightedOption = 4 THEN Increment% = 5 IF highlightedOption = 5 THEN Increment% = 3 IF highlightedOption = 7 THEN Increment% = 2 IF highlightedOption = 8 THEN incrment% = 2 ELSEIF TimeElapsed% = 3 THEN IF highlightedOption = 4 THEN Increment% = 15 IF highlightedOption = 5 THEN Increment% = 10 IF highlightedOption = 7 THEN Increment% = 5 IF highlightedOption = 8 THEN Increment% = 5 ELSEIF TimeElapsed% = 4 THEN IF highlightedOption = 4 THEN Increment% = 40 IF highlightedOption = 5 THEN Increment% = 15 ELSEIF TimeElapsed% = 5 THEN Increment% = 70 END IF SELECT CASE userCommand$ CASE UpArrowKey$ IF highlightedOption = 4 THEN Years1 = Years1 - Increment% IF Years1 <= -1 THEN Years1 = 9999 ELSEIF highlightedOption = 5 THEN Days1 = Days1 - Increment% IF Days1 <= -1 THEN Days1 = 364 ELSEIF highlightedOption = 6 THEN Hours1 = Hours1 - 1 IF Hours1 = -1 THEN Hours1 = 23 ELSEIF highlightedOption = 7 THEN Minutes1 = Minutes1 - Increment% IF Minutes1 <= -1 THEN Minutes1 = 59 ELSEIF highlightedOption = 8 THEN Seconds1 = Seconds1 - Increment% IF Seconds1 <= -1 THEN Seconds1 = 59 END IF haltAndDisplay = TRUE CASE DownArrowKey$ IF highlightedOption = 4 THEN Years1 = Years1 + Increment% IF Years1 >= 10000 THEN Years1 = 0 ELSEIF highlightedOption = 5 THEN Days1 = Days1 + Increment% IF Days1 >= 365 THEN Days1 = 0 ELSEIF highlightedOption = 6 THEN Hours1 = Hours1 + 1 IF Hours1 = 24 THEN Hours1 = 0 ELSEIF highlightedOption = 7 THEN Minutes1 = Minutes1 + Increment% IF Minutes1 >= 60 THEN Minutes1 = 0 ELSEIF highlightedOption = 8 THEN Seconds1 = Seconds1 + Increment% IF Seconds1 >= 60 THEN Seconds1 = 0 END IF haltAndDisplay = TRUE CASE RightArrowKey$ highlightedOption = highlightedOption + 1 IF highlightedOption > maxOption THEN highlightedOption = minOption haltAndDisplay = TRUE CASE LeftArrowKey$ highlightedOption = highlightedOption - 1 IF highlightedOption < minOption THEN highlightedOption = maxOption haltAndDisplay = TRUE CASE CHR$(13), CHR$(32) Rtn$ = MakeElapsedTimeShort$(Years1, Days1, Hours1, Minutes1, Seconds1) CASE CHR$(27) montH = 1: daY = 1: year = 2022 Years1 = 0: Days1 = 0: Hours1 = 0: Minutes1 = 0: Seconds1 = 0 Years2 = 0: Days2 = 0: Hours2 = 0: Minutes2 = 0: Seconds2 = 0 haltAndDisplay = TRUE CASE "X", "x" SYSTEM END SELECT LOOP UNTIL userCommand$ = CHR$(13) OR userCommand$ = CHR$(32) GetElapsedTime$ = Rtn$ END FUNCTION FUNCTION MonthOrDayFromDaysPassedJan% (Days27%, Month1Day2%, Year27%) MODFDPJRtn% = 0: Month27% = 0: Leap% = 0 IF Year27% MOD 4 = 0 THEN Leap% = 1: ELSE Leap% = 0: END IF SELECT CASE Days27% CASE 1 TO 31 'January Month27% = 1 Days27% = Days27% CASE 32 TO 59 + Leap% 'February Month27% = 2 Days27% = Days27% - 31 CASE 60 + Leap% TO 90 + Leap% 'March Month27% = 3 Days27% = Days27% - 59 - Leap% CASE 91 + Leap% TO 120 + Leap% 'april Month27% = 4 Days27% = Days27% - 90 - Leap% CASE 121 + Leap% TO 151 + Leap% 'may Month27% = 5 Days27% = Days27% - 120 - Leap% CASE 152 + Leap% TO 181 + Leap% Month27% = 6 Days27% = Days27% - 150 - Leap% CASE 182 + Leap% TO 212 + Leap% Month27% = 7 Days27% = Days27% - 180 - Leap% CASE 213 + Leap% TO 243 + Leap% Month27% = 8 Days27% = Days27% - 212 - Leap% CASE 244 + Leap% TO 273 + Leap% Month27% = 9 Days27% = Days27% - 243 - Leap% CASE 274 + Leap% TO 304 + Leap% Month27% = 10 Days27% = Days27% - 273 - Leap% CASE 305 + Leap% TO 334 + Leap% Month27% = 11 Days27% = Days27% - 304 - Leap% CASE 335 + Leap% TO 365 + Leap% Month27% = 12 Days27% = Days27% - 334 - Leap% END SELECT IF Month1Day2% = 1 THEN MODFDPJRtn% = Month27% ELSEIF Month1Day2% = 2 THEN MODFDPJRtn% = Days27% END IF MonthOrDayFromDaysPassedJan = MODFDPJRtn%END FUNCTION FUNCTION MonthWord$ (Month10%) MWRtn$ = "" SELECT CASE Month10% CASE 0 ' for the top value of the dial MWRtn$ = "December" CASE 1 MWRtn$ = "January" CASE 2 MWRtn$ = "February" CASE 3 MWRtn$ = "March" CASE 4 MWRtn$ = "April" CASE 5 MWRtn$ = "May" CASE 6 MWRtn$ = "June" CASE 7 MWRtn$ = "July" CASE 8 MWRtn$ = "August" CASE 9 MWRtn$ = "September" CASE 10 MWRtn$ = "October" CASE 11 MWRtn$ = "November" CASE 12 MWRtn$ = "December" CASE 13 'for the bottom value of the dial MWRtn$ = "January" END SELECT MonthWord$ = MWRtn$END FUNCTION FUNCTION Suffix$ (DaySuffix%) SRtn$ = "" IF DaySuffix% = 1 OR DaySuffix% = 21 OR DaySuffix% = 31 THEN SRtn$ = "st" ELSEIF DaySuffix% = 2 OR DaySuffix% = 22 THEN SRtn$ = "nd" ELSEIF DaySuffix% = 3 OR DaySuffix% = 23 THEN SRtn$ = "rd" ELSE SRtn$ = "th": END IF Suffix$ = SRtn$END FUNCTION FUNCTION WrittenDate1Clock2Time3$ (AllFive$, Which%) WD1C2T3Rtn$ = "": Years8% = 0: Days8% = 0: Hours8% = 0: Minutes8% = 0: Seconds8% = 0: Month8% = 0 AmPm8$ = "": LftNum8% = 0: RtNum8% = 0: LpYr% = 0 Years8% = VAL(MID$(AllFive$, 1, 4)) Days8% = VAL(MID$(AllFive$, 6, 3)) Hours8% = VAL(MID$(AllFive$, 10, 2)) Minutes8% = VAL(MID$(AllFive$, 13, 2)) Seconds8% = VAL(MID$(AllFive$, 16, 2)) SELECT CASE Which% CASE 1 Month8% = MonthOrDayFromDaysPassedJan(Days8% - LpYr%, 1, Years8%) Days8% = MonthOrDayFromDaysPassedJan(Days8% - LpYr%, 2, Years8%) WD1C2T3Rtn$ = MonthWord$(Month8%) WD1C2T3Rtn$ = WD1C2T3Rtn$ + " " + S$(Days8%) WD1C2T3Rtn$ = WD1C2T3Rtn$ + Suffix$(Days8%) + ", " + S$(Years8%) CASE 2 IF Hours8% = 0 THEN WD1C2T3Rtn$ = "12" AmPm8$ = "AM" ELSEIF Hours8% > 0 AND Hours8% < 12 THEN WD1C2T3Rtn$ = S$(Hours8%) AmPm8$ = "AM" ELSEIF Hours% = 12 THEN WD1C2T3Rtn$ = "12" AmPm8$ = "PM" ELSEIF Hours8% > 12 AND Hours8% < 24 THEN WD1C2T3Rtn$ = S$(Hours8% - 12) AmPm8$ = "PM" END IF WD1C2T3Rtn$ = WD1C2T3Rtn$ + ":" + S$(Minutes8%) + " " + AmPm8$ + " and " + S$(Seconds8%) IF Seconds8% <> 1 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + "s" CASE 3 IF Years8% <> 0 THEN IF Years8% >= 1000 AND Years8% <= 9999 THEN LftNum8% = INT(Years8% / 1000) WD1C2T3Rtn$ = S$(LftNum8%) + "," RtNum8% = Years8% - (LftNum8% * 1000) IF RtNum8% < 10 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + "00" ELSEIF RtNum8% >= 10 AND RtNum8% < 100 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + "0" END IF WD1C2T3Rtn$ = WD1C2T3Rtn$ + S$(RtNum8%) ELSE WD1C2T3Rtn$ = S$(Years8%) END IF WD1C2T3Rtn$ = WD1C2T3Rtn$ + " Year" IF Years% <> 1 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + "s" IF Days8% <> 0 AND (Hours3% <> 0 OR Minutes8% <> 0 OR Seconds8% <> 0) THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + ", " ELSEIF Days8% <> 0 AND (Hours8% = 0 AND Minutes8% = 0 AND Seconds8% = 0) THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + " and " ELSEIF Hours8% <> 0 AND (Minutes8% <> 0 OR Seconds8% <> 0) THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + ", " ELSEIF Hours8% <> 0 AND Minutes8% = 0 AND Seconds8% = 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + " and " ELSEIF Minutes8% <> 0 AND Seconds8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + ", " ELSEIF Minutes8% <> 0 XOR Seconds8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + " and " END IF END IF IF Days8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + S$(Days8%) + " Day" IF Days8% <> 1 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + "s" IF Hours8% <> 0 AND (Minutes8% <> 0 OR Seconds8% <> 0) THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + ", " ELSEIF Hours8% <> 0 AND Minutes8% = 0 AND Seconds8% = 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + " and " ELSEIF Minutes8% <> 0 AND Seconds8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + ", " ELSEIF Minutes8% <> 0 XOR Seconds8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + " and " END IF END IF IF Hours8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + S$(Hours8%) + " hour" IF Hours8% <> 1 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + "s" IF Minutes8% <> 0 AND Seconds8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + ", " ELSEIF Minutes8% <> 0 XOR Seconds8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + " and " END IF END IF IF Minutes8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + S$(Minutes8%) + " minute" IF Minutes8% <> 1 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + "s" IF Seconds8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + " and " END IF IF Seconds8% <> 0 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + S$(Seconds8%) + " second" IF Seconds8% <> 1 THEN WD1C2T3Rtn$ = WD1C2T3Rtn$ + "s" END IF IF Years8% = 0 AND Days8% = 0 AND Hours8% = 0 AND Minutes8% = 0 AND Seconds8% = 0 THEN WD1C2T3Rtn$ = "Nothing" END SELECT WrittenDate1Clock2Time3$ = WD1C2T3Rtn$END FUNCTION SUB Menu HaltAndDisplay% = 0: HighlightedOption% = 0: yPos% = 0: UserCommand$ = "": A$ = "" xPos% = 0: MaxOption% = 0: SelectedAnOption% = 0 HaltAndDisplay% = TRUE%: HighlightedOption% = 1: yPos% = 13: MaxOption% = 7: SelectedAnOption% = FALSE% HighlightedOption% = 1 HaltAndDisplay% = TRUE% yPos = 14 DO UserCommand$ = INKEY$ IF HaltAndDisplay% = TRUE% THEN COLOR 14, 1: CLS A$ = "Time Calculator Menu": xPos% = Center(A$) LOCATE yPos%, Center(A$): PRINT A$: LOCATE yPos% + 1, Center(A$) PRINT "---- ---------- ----" A$ = "": A$ = "1.) Find How Long From Now" LOCATE yPos% + 3, Center(A$): IF HighlightedOption% = 1 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ A$ = "": A$ = "Until A Selected Time" LOCATE yPos% + 4, Center(A$): IF HighlightedOption% = 1 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ A$ = "": A$ = "2.) Find How Long It Has Been Since" LOCATE yPos% + 6, Center(A$): IF HighlightedOption% = 2 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ A$ = "": A$ = "A Selected Time Has Passed" LOCATE yPos% + 7, Center(A$): IF HighlightedOption% = 2 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ A$ = "": A$ = "3.) Find The Date And Time It Will Be After" LOCATE yPos% + 9, Center(A$): IF HighlightedOption% = 3 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ A$ = "": A$ = "A Selected Amount Of Time Has Passed" LOCATE yPos% + 10, Center(A$): IF HighlightedOption% = 3 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ A$ = "": A$ = "4.) Add Two Elapsed Times" LOCATE yPos% + 12, Center(A$): IF HighlightedOption% = 4 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ A$ = "": A$ = "5.) Subtract One Elapsed Time From Another One" LOCATE yPos% + 14, Center(A$): IF HighlightedOption% = 5 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ A$ = "": A$ = "6.) Multiply An Elapsed Time By A Constant" LOCATE yPos% + 16, Center(A$): IF HighlightedOption% = 6 THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ A$ = "": A$ = "7.) Exit" LOCATE 45, Center(A$): IF HighlightedOption% = MaxOption% THEN COLOR 10, 0: ELSE COLOR 14, 1: END IF: PRINT A$ HaltAndDisplay% = FALSE% END IF SELECT CASE UserCommand$ CASE UpArrowKey$, LeftArrowKey$ HighlightedOption% = HighlightedOption% - 1 IF HighlightedOption% = 0 THEN HighlightedOption% = MaxOption% HaltAndDisplay% = TRUE% CASE DownArrowKey$, RightArrowKey$ HighlightedOption% = HighlightedOption% + 1 IF HighlightedOption% > MaxOption% THEN HighlightedOption% = 1 HaltAndDisplay% = TRUE% CASE CHR$(13) SelectedAnOption% = TRUE% CASE "1", "2", "3", "4", "5", "6" HighlightedOption% = VAL(UserCommand$) SelectedAnOption% = TRUE% END SELECT IF SelectedAnOption% = TRUE THEN SELECT CASE HighlightedOption% CASE 1 CALL FromNowUntil SelectedAnOption% = FALSE% HaltAndDisplay% = TRUE% CASE 2 CALL HowLongSince SelectedAnOption% = FALSE% HaltAndDisplay% = TRUE% CASE 3 CALL WhatDateAfterElapsedTime SelectedAnOption% = FALSE% HaltAndDisplay% = TRUE% CASE 4 CALL AddElapsedTimes SelectedAnOption% = FALSE% HaltAndDisplay% = TRUE% CASE 5 CALL SubtractElapsedTimes SelectedAnOption% = FALSE% HaltAndDisplay% = TRUE% CASE 6 CALL Multiply SelectedAnOption% = FALSE% HaltAndDisplay% = TRUE% END SELECT END IF LOOP UNTIL UserCommand$ = CHR$(27) OR UserCommand$ = S$(MaxOption%)END SUB FUNCTION Center% (Text$): Center% = INT((80 - LEN(Text$)) / 2): END FUNCTIONFUNCTION S$ (Number!): S$ = LTRIM$(STR$(Number!)): END FUNCTIONFUNCTION P$ pause$ = INPUT$(1): IF pause$ = CHR$(27) THEN ENDP$ = pause$: END FUNCTION
Navigation
[0] Message Index
Go to full version