' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2024.09.09.00.00]) on 2026.02.22 at 15:23 (Coordinated Universal Time)
' This program by Charlie Veniot
' A rapid-fire no-fuss-no-muss programming session
_TITLE "Clock"
' 🟠Build "pixel maps" of digit and AM/PM characters
DIM CharMap$( 0 TO 12 )
FOR d% = 0 TO 9
LET CharMap$( d% ) = GETCHR$( 48 + d% )
NEXT d%
CharMap$(10) = GETCHR$(ASC("A"))
CharMap$(11) = GETCHR$(ASC("P"))
CharMap$(12) = GETCHR$(ASC("M"))
radius% = 420
SCREEN _NEWIMAGE( radius% * 2 + 1, radius% * 2 + 1, 17 )
â–¶StartEndlessLoop:
LET h% = VAL( LEFT$( TIME$, 2 ) )
GOSUB PutAmPm
LET h% = IFF( h% = 0, 12, IFF( h% > 12, h% - 12, h% ) )
FOR n% = 1 TO 12
LET c% = 9
IF n% = h% THEN
LET c% = 31
ELSEIF ABS( n% - h% ) > 1 AND NOT ABS( n% - h% ) > 10 THEN
IF ABS( n% - h% ) < 4 OR ABS( n% - h% ) > 8 THEN c% = 1 ELSE c% = 8
END IF
COLOR c%
PRESET ( radius% + 1, radius% + 1 )
DRAW "BTA" + ( 360 - n% * 30 ) + "U320"
CIRCLE( POINT(0), POINT(1) ), 70, , , , ,T
CIRCLE( POINT(0), POINT(1) ), 69, , , , ,T
IF n% = h% THEN CIRCLE( POINT(0), POINT(1) ), 72, 63, , , ,T : CIRCLE( POINT(0), POINT(1) ), 71, 63, , , ,T
GOSUB PutHourDigits
IF n% = h% THEN PRESET ( radius% + 1, radius% + 1 ) : DRAW "TA" + ( 360 - n% * 30 ) + "BU250 R8 D250 L16 U250 R8 BD15" : PAINT( POINT(0), POINT(1) ),c%,c%
NEXT d%
CIRCLE( radius% + 1, radius%+ 1 ), 25, 31, , , ,F
LET n% = MID$( TIME$, 4, 2 )
LET c% = 55
COLOR c%
PRESET( radius% + 1, radius% + 1 )
DRAW "TA" + ( 360 - n% * 6 ) + "BU229 R6 D229 L12 U229 R6 BD15" : PAINT( POINT(0), POINT(1) ),c%,c%
PRESET( radius% + 1, radius% + 1 )
DRAW "BTA" + ( 360 - n% * 6 ) + "U210"
GOSUB MmSsHand
CIRCLE( radius% + 1, radius% + 1 ), 15, c%, , , ,F
LET n% = RIGHT$( TIME$, 2 )
LET c% = 47
COLOR c%
PRESET( radius% + 1, radius% + 1 )
DRAW "TA" + ( 360 - n% * 6 ) + "BU95 BD90 BU90 R4 D90 L8 U90 R4 BD10" : PAINT( POINT(0), POINT(1) ),c%,c%
PRESET( radius% + 1, radius% + 1 )
DRAW "BTA" + ( 360 - n% * 6 ) + "U125"
GOSUB MmSsHand
CIRCLE( radius% + 1, radius% + 1 ), 8, c%, , , ,F
SLEEP 0.05
CLS
GOTO â–¶StartEndlessLoop
PutDigit:
FOR x% = 1 TO 8
FOR y% = 0 TO 7
IF MID$( CharMap$( d% ), x% + y% * 8 , 1 ) = "X" THEN
CIRCLE ( centerX% - adjX% + x% * psize%, centerY% - adjY% + y% * psize% ), (psize% - 1), , , ,0.6
CIRCLE ( centerX% - adjX% + x% * psize%, centerY% - adjY% + y% * psize% ), (psize% - 1), , , ,0.5,F
END IF
NEXT y%
NEXT y%
RETURN
PutHourDigits:
LET centerX% = POINT(0), centerY% = POINT(1)
LET psize% = 8
LET adjY% = 21 + psize%
LET tadjX% = 28 + psize%
IF BETWEEN( n%, 1, 9 ) THEN
LET adjX% = tadjX%
LET d% = n%
GOSUB PutDigit
ELSE
LET adjX% = tadjX% + 30
LET d% = n% / 10
GOSUB PutDigit
LET adjX% = tadjX% - 30
LET d% = n% - 10
GOSUB PutDigit
END IF
RETURN
PutOtherDigits:
centerX% = POINT(0) : centerY% = POINT(1)
psize% = 4
adjY% = 12 + psize%
tadjX% = 14 + psize%
IF BETWEEN( n%, 0, 9 ) THEN
adjX% = tadjX%
d% = n%
GOSUB PutDigit
ELSE
adjX% = tadjX% + 14
d% = n% / 10
GOSUB PutDigit
adjX% = tadjX% - 14
d% = n% MOD 10
GOSUB PutDigit
END IF
RETURN
PutAmPm:
COLOR 59
LET psize% = 5
LET adjY% = 0
LET adjX% = 0
LET centerY% = 20
IF h% < 12 THEN
' AM
LET centerX% = 20
LET d% = 10
GOSUB PutDigit
LET centerX% = centerX% + 40
LET d% = 12
GOSUB PutDigit
LINE ( 0, 0 ) TO ( 130, 80 ), ,B
ELSE
' PM
LET centerX% = 730
LET d% = 11
GOSUB PutDigit
LET centerX% = centerX% + 40
LET d% = 12
GOSUB PutDigit
LINE ( XMAX - 130, 0 ) TO ( XMAX, 80 ), ,B
END IF
RETURN
MmSsHand:
CIRCLE (POINT(0), POINT(1)),40,2, , , ,F
CIRCLE (POINT(0),POINT(1)),40,0, , , ,F
CIRCLE (POINT(0), POINT(1)),40, , , , ,t
CIRCLE (POINT(0), POINT(1)),39, , , , ,t
GOSUB PutOtherDigits
RETURN