'===========================================================================
' Subject: RAINBOW CLOCK                      Date: 06-13-96 (19:09)       
'  Author: James McMurrin                     Code: QB, QBasic, PDS        
'  Origin: FidoNet QUIK_BAS Echo            Packet: DATETIME.ABC
'===========================================================================
DIM PAL(512) AS LONG, CO(7, 3), SC(2, 60), MC(2, 60), HQ(2, 60), HC(2, 12)
SCREEN 13
RANDOMIZE TIMER
PAL(0) = 0
'PAL(L) = A * 65536 + B * 256 + C
B = 29.4: R = 52.333333#
PAL(1) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = 2
FOR L = 1 TO 13
B = B - 2.1: R = R - 2 / 3
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
NEXT L
B = 0: R = 43
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
FOR L = 1 TO 29
G = G + 1 / 3: R = R + 2 / 3
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
NEXT L
G = 10: R = 63
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
FOR L = 1 TO 29
G = G + 53 / 30
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
NEXT L
G = 63
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
FOR L = 1 TO 29
R = R - 2.1
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
NEXT L
R = 0
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
FOR L = 1 TO 29
B = B + 2.1: G = G - 2.1
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
NEXT L
B = 63: G = 0
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
FOR L = 1 TO 29
R = R + 2.1
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
NEXT L
R = 63
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
FOR L = 1 TO 15
B = B - 2.1: R = R - 2 / 3
PAL(PC) = CINT(B) * 65536 + CINT(G) * 256 + CINT(R)
PC = PC + 1
NEXT L
PALETTE USING PAL(0)
T$ = "RAINBOW                            CLOCK"
B$ = "BY:úJAMES                       MCMURRIN"
FOR L = 1 TO 40
LOCATE 1, L
COLOR (L MOD 6) * 30 + 15
PRINT MID$(T$, L, 1);
LOCATE 24, L
PRINT MID$(B$, L, 1);
NEXT L
CIRCLE (160, 99), 119, 1
PAINT (160, 99), 1, 1
FOR L = 0 TO 359 STEP 6
IF (L / 30) = INT(L / 30) THEN
 FOR Q = -.5 TO .5 STEP .1
 ROW = 99 + COS((L + Q) * 3.14159 / 180) * 100
 COL = 160 + SIN((L + Q) * 3.14159 / 180) * 119
 LINE (160, 100)-(COL, ROW), 0
 NEXT Q
 'ROW = 99 + COS(L * 3.14159 / 180) * 95
 'COL = 160 + SIN(L * 3.14159 / 180) * 110
 'PAINT (COL, ROW), 0, 0
ELSE
 ROW = 99 + COS(L * 3.14159 / 180) * 100
 COL = 160 + SIN(L * 3.14159 / 180) * 119
 BROW = 99 + COS(L * 3.14159 / 180) * 41
 BCOL = 160 + SIN(L * 3.14159 / 180) * 49
 LINE (BCOL, BROW)-(COL, ROW), 0
END IF
NEXT L
LINE (159, 99)-(159, 101), 0
CIRCLE (160, 99), 119, 0
CIRCLE (160, 99), 98, 0
CIRCLE (160, 99), 69, 0
CIRCLE (160, 99), 49, 0
FOR L = 3 TO 360 STEP 6
ROW = 99 - COS(L * 3.14159 / 180) * 95
SC(1, (L - 3) / 6 + 1) = ROW
ROW = 99 - COS((L) * 3.14159 / 180) * 77
MC(1, (L - 3) / 6 + 1) = ROW
ROW = 99 - COS((L) * 3.14159 / 180) * 55
HQ(1, (L - 3) / 6 + 1) = ROW
COL = 160 + SIN(L * 3.14159 / 180) * 114
SC(2, (L - 3) / 6 + 1) = COL
COL = 160 + SIN((L) * 3.14159 / 180) * 95
MC(2, (L - 3) / 6 + 1) = COL
COL = 160 + SIN(L * 3.14159 / 180) * 65
HQ(2, (L - 3) / 6 + 1) = COL
IF (L - 3) / 30 = INT((L - 3) / 30) THEN
 ROW = 99 - COS((L + 15) * 3.14159 / 180) * 25
 COL = 160 - SIN((L + 15) * 3.14159 / 180) * 25
 HC(1, (L - 3) / 30 + 1) = ROW
 HC(2, (L - 3) / 30 + 1) = COL
 CIRCLE (COL, ROW), 1, 8
END IF
NEXT L
OOFM = -1: OOHQ = -1: OOFH = -1
DO
OT$ = TIME$
OFS = VAL(MID$(OT$, 7, 2))
OFM = VAL(MID$(OT$, 4, 2))
OFH = VAL(MID$(OT$, 1, 2))
OHQ = INT(OFM / 12)
FOR L = 1 TO 60
PC = ((60 - OFS) + L - 1) MOD 60 + 1
PAINT (SC(2, L), SC(1, L)), PC, 0
NEXT L
IF OFH <> OOFH THEN
 OOFH = OFH: OFS = OFH MOD 12
 FOR L = 0 TO 11
 PC = (11 - ((OFS + L) MOD 12)) * 5 + 121
 PAINT (HC(2, L + 1), HC(1, L + 1)), PC, 0
 NEXT L
END IF
IF OFM <> OOFM THEN
 OOFM = OFM
 FOR L = 1 TO 60
 PC = ((60 - OFM) + L - 1) MOD 60 + 61
 PAINT (MC(2, L), MC(1, L)), PC, 0
 NEXT L
END IF
IF OHQ <> OOHQ THEN
 OOHQ = OHQ
 OS = (OFH MOD 12) * 5 + OHQ + 1
 FOR L = 1 TO 60
 PC = ((60 - OS) + L) MOD 60 + 121
 PAINT (HQ(2, L), HQ(1, L)), PC, 0
 NEXT L
END IF
DO: LOOP WHILE TIME$ = OT$
LOOP WHILE INKEY$ = ""
