'===========================================================================
' Subject: LED CLOCK DISPLAY                  Date: 03-23-96 (15:23)       
'  Author: Douglas H. Lusher                  Code: QB, QBasic, PDS        
'  Origin: FidoNet QUIK_BAS Echo            Packet: MISC.ABC
'===========================================================================
 DECLARE SUB ClrRowCtrMsg (Message$)
 DECLARE SUB LED1 (Spec$)
 DECLARE SUB LED2 (Spec$)
 DEFINT A-Z

 'GOTO Clock

 SCREEN 0, 1, 0: COLOR 7, 1: CLS
 COLOR 0, 1
 LOCATE 3, 6: PRINT STRING$(69, "Ü")
 FOR R% = 4 TO 8    'change 8 to 10 for large LEDs
   LOCATE R%, 6: PRINT STRING$(69, "Û");
 NEXT

 DO
   T$ = "  0:00:00"
   LOCATE 4, 7: COLOR 7, 0: CALL LED1(T$): COLOR 7, 1
   ClrRowCtrMsg "Press any key to begin timing..."
   X$ = INPUT$(1)
   Start! = TIMER
   ClrRowCtrMsg "Press any key to stop timer..."
   DO
     GOSUB ShowTime
     X$ = INKEY$: IF LEN(X$) THEN EXIT DO
   LOOP
   ClrRowCtrMsg "Press ESC to quit, any other key to reset the timer."
   X$ = INPUT$(1): IF X$ = CHR$(27) THEN EXIT DO
 LOOP
 CLS
 END

 ShowTime:
 T! = TIMER - Start!
 Mins$ = RIGHT$("  " + STR$(INT(T!) \ 60), 3)
 Secs$ = RIGHT$(STR$((INT(T!) MOD 60) + 100), 2)
 Frac$ = MID$(STR$(T! - INT(T!)) + "00", 3, 2)
 MID$(T$, 1, 3) = Mins$: MID$(T$, 5, 2) = Secs$: MID$(T$, 8, 2) = Frac$
 LOCATE 4, 7: COLOR 7, 0: CALL LED1(T$): COLOR 7, 1
 RETURN

 Clock:
 SCREEN 0, 1, 0: COLOR 7, 1: CLS
 COLOR 0, 1
 LOCATE 3, 10: PRINT STRING$(60, "Ü")
 FOR R% = 4 TO 8    'change 8 to 10 for large LEDs
   LOCATE R%, 10: PRINT STRING$(60, "Û");
 NEXT
 COLOR 7, 0
 DO UNTIL LEN(INKEY$)
   LOCATE 4, 11: CALL LED1(TIME$)
 LOOP
 CLS
 END

 SUB ClrRowCtrMsg (Message$)
 LOCATE 12, 1: PRINT SPC(79); " ";
 LOCATE , (82 - LEN(Message$)) \ 2: PRINT Message$;
 END SUB

 SUB LED1 (Spec$) STATIC

 IF Initialized% GOTO Begin1
 Top1$ = "ÜßßßßÜ"
 Top2$ = "Ü    Ü"
 Top3$ = "     Ü"
 Top4$ = "Ü     "
 Top5$ = " ßßßßÜ"
 Top6$ = "Üßßßß "
 Bot1$ = " ßßßß "
 Ctr2$ = "Û    Û"
 Ctr3$ = "     Û"
 Ctr4$ = "Û     "
 XXX1$ = "      "
 Initialized% = -1

 Begin1:
 R% = CSRLIN: C% = POS(0)
 FOR Ptr% = 1 TO LEN(Spec$)
  SELECT CASE ASC(MID$(Spec$, Ptr%, 1))
    CASE 48
      T$ = Top1$: C1$ = Ctr2$: M$ = Top2$: C2$ = Ctr2$: B$ = Bot1$
      GOSUB ShowChar1: C% = C% + 9
    CASE 49
      T$ = Top3$: C1$ = Ctr3$: M$ = Top3$: C2$ = Ctr3$: B$ = XXX1$
      GOSUB ShowChar1: C% = C% + 9
    CASE 50
      T$ = Top5$: C1$ = Ctr3$: M$ = Top6$: C2$ = Ctr4$: B$ = Bot1$
      GOSUB ShowChar1: C% = C% + 9
    CASE 51
      T$ = Top5$: C1$ = Ctr3$: M$ = Top5$: C2$ = Ctr3$: B$ = Bot1$
      GOSUB ShowChar1: C% = C% + 9
    CASE 52
      T$ = Top2$: C1$ = Ctr2$: M$ = Top5$: C2$ = Ctr3$: B$ = XXX1$
      GOSUB ShowChar1: C% = C% + 9
    CASE 53
      T$ = Top6$: C1$ = Ctr4$: M$ = Top5$: C2$ = Ctr3$: B$ = Bot1$
      GOSUB ShowChar1: C% = C% + 9
    CASE 54
      T$ = Top4$: C1$ = Ctr4$: M$ = Top1$: C2$ = Ctr2$: B$ = Bot1$
      GOSUB ShowChar1: C% = C% + 9
    CASE 55
      T$ = Top5$: C1$ = Ctr3$: M$ = Top3$: C2$ = Ctr3$: B$ = XXX1$
      GOSUB ShowChar1: C% = C% + 9
    CASE 56
      T$ = Top1$: C1$ = Ctr2$: M$ = Top1$: C2$ = Ctr2$: B$ = Bot1$
      GOSUB ShowChar1: C% = C% + 9
    CASE 57
      T$ = Top1$: C1$ = Ctr2$: M$ = Top5$: C2$ = Ctr3$: B$ = XXX1$
      GOSUB ShowChar1: C% = C% + 9
    CASE ASC(":")
      LOCATE R% + 1, C%: PRINT "ß";
      LOCATE R% + 3, C%: PRINT "ß";
      C% = C% + 3
    CASE 32
      T$ = XXX1$: C1$ = XXX1$: M$ = XXX1$: C2$ = XXX1$: B$ = XXX1$
      GOSUB ShowChar1: C% = C% + 8
  END SELECT
 NEXT
 EXIT SUB

 ShowChar1:
 LOCATE R% + 0, C%: PRINT T$;
 LOCATE R% + 1, C%: PRINT C1$;
 LOCATE R% + 2, C%: PRINT M$;
 LOCATE R% + 3, C%: PRINT C2$;
 LOCATE R% + 4, C%: PRINT B$;
 RETURN
 END SUB

 SUB LED2 (Spec$) STATIC

 IF Initialized% GOTO Begin2
 Top1$ = "ÜßßßßßÜ"
 Top2$ = "Ü     Ü"
 Top3$ = "      Ü"
 Top4$ = "Ü      "
 Top5$ = " ßßßßßÜ"
 Top6$ = "Üßßßßß "
 Bot1$ = " ßßßßß "
 Ctr2$ = "Û     Û"
 Ctr3$ = "      Û"
 Ctr4$ = "Û      "
 XXX1$ = "       "
 Initialized% = -1

 Begin2:
 R% = CSRLIN: C% = POS(0)
 FOR Ptr% = 1 TO LEN(Spec$)
  SELECT CASE ASC(MID$(Spec$, Ptr%, 1))
    CASE 48
      T$ = Top1$: C1$ = Ctr2$: M$ = Top2$: C2$ = Ctr2$: B$ = Bot1$
      GOSUB ShowChar2: C% = C% + 9
    CASE 49
      T$ = Top3$: C1$ = Ctr3$: M$ = Top3$: C2$ = Ctr3$: B$ = XXX1$
      GOSUB ShowChar2: C% = C% + 9
    CASE 50
      T$ = Top5$: C1$ = Ctr3$: M$ = Top6$: C2$ = Ctr4$: B$ = Bot1$
      GOSUB ShowChar2: C% = C% + 9
    CASE 51
      T$ = Top5$: C1$ = Ctr3$: M$ = Top5$: C2$ = Ctr3$: B$ = Bot1$
      GOSUB ShowChar2: C% = C% + 9
    CASE 52
      T$ = Top2$: C1$ = Ctr2$: M$ = Top5$: C2$ = Ctr3$: B$ = XXX1$
      GOSUB ShowChar2: C% = C% + 9
    CASE 53
      T$ = Top6$: C1$ = Ctr4$: M$ = Top5$: C2$ = Ctr3$: B$ = Bot1$
      GOSUB ShowChar2: C% = C% + 9
    CASE 54
      T$ = Top4$: C1$ = Ctr4$: M$ = Top1$: C2$ = Ctr2$: B$ = Bot1$
      GOSUB ShowChar2: C% = C% + 9
    CASE 55
      T$ = Top5$: C1$ = Ctr3$: M$ = Top3$: C2$ = Ctr3$: B$ = XXX1$
      GOSUB ShowChar2: C% = C% + 9
    CASE 56
      T$ = Top1$: C1$ = Ctr2$: M$ = Top1$: C2$ = Ctr2$: B$ = Bot1$
      GOSUB ShowChar2: C% = C% + 9
    CASE 57
      T$ = Top1$: C1$ = Ctr2$: M$ = Top5$: C2$ = Ctr3$: B$ = XXX1$
      GOSUB ShowChar2: C% = C% + 9
    CASE ASC(":")
      LOCATE R% + 1, C%: PRINT "Ü";
      LOCATE R% + 4, C%: PRINT "Ü";
      C% = C% + 3
    CASE 32
      T$ = XXX1$: C1$ = XXX1$: M$ = XXX1$: C2$ = XXX1$: B$ = XXX1$
      GOSUB ShowChar2: C% = C% + 9
  END SELECT
 NEXT
 EXIT SUB

 ShowChar2:
 LOCATE R% + 0, C%: PRINT T$;
 LOCATE R% + 1, C%: PRINT C1$;
 LOCATE R% + 2, C%: PRINT C1$;
 LOCATE R% + 3, C%: PRINT M$;
 LOCATE R% + 4, C%: PRINT C2$;
 LOCATE R% + 5, C%: PRINT C2$;
 LOCATE R% + 6, C%: PRINT B$;
 RETURN
 END SUB
