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