ZXASCII
AUTO -1
PROG analog clock
10 REM Analog Clock with sweep-second-hand
20 PALETTE 8,0,90,82: SCREEN LOCK: DEGREES: OPTION "base",0
30 xc=SCRw/2,yc=SCRh/2: GO SUB 190
40 REM Draw the clock face
50 CLS : CIRCLE INK 0;xc,yc,150 FILL 
60 FOR f=0 TO 59: CIRCLE INK 3;xc+COS(6*f)*136,yc+SIN(6*f)*136,1.5 FILL: NEXT f
70 FOR f=0 TO 11: x=xc+COS(30*f)*136,y=yc+SIN(30*f)*136: IF f MOD 3 THEN s$=STR$((f+3) MOD 12): PRINT PAPER 0;INK 4;MOVE x-4*LEN s$,y-4;INK 4;s$ ELSE s$=STR$ IIF(f=9,12,(f+3) MOD 12): PRINT PAPER 0;MOVE x-(8*LEN s$),y-8;SCALE 2,2;INK 10;s$
80 NEXT f
90 REM Calculate the angles of the hands
100 t=TIME,s=6*SECONDS t+MILLISECONDS t*.006,m=6*MINUTES t+(6*(s/360)),h=30*HOUR t+(30*(m/360)),s-=90,m-=90,h-=90
110 a$=TIME$(TIME,"hh:mm:ss"): GO SUB 250
120 REM Draw the hands
130 POLYGON INK 10;xc+COS(m-90)*3,yc+SIN(m-90)*3 TO xc+COS(m)*100,yc+SIN(m)*100 TO xc+COS(m+90)*3,yc+SIN(m+90)*3 FILL 
140 POLYGON INK 9;xc+COS(h-90)*2,yc+SIN(h-90)*2 TO xc+COS(h)*80,yc+SIN(h)*80 TO xc+COS(h+90)*2,yc+SIN(h+90)*2 FILL 
150 POLYGON INK 12;xc+COS(s-90)*1.5,yc+SIN(s-90)*1.5 TO xc+COS(s)*120,yc+SIN(s)*120 TO xc+COS(s+90)*1.5,yc+SIN(s+90)*1.5 FILL 
160 CIRCLE INK 11;xc,yc,8 FILL : CIRCLE INK 0;xc,yc,4 FILL 
170 IF INKEY$="" THEN WAIT SCREEN : GO TO 50
180 REM Set up LED segments
190 sw=1,svh=6,shw=4
200 vd$="sx,sy TO sx+sw,sy+sw TO sx+sw,sy+svh+sw TO sx,sy+sw+svh+sw TO sx-sw,sy+svh+sw TO sx-sw,sy+sw",hd$="sx,sy TO sx+sw,sy-sw TO sx+sw+shw,sy-sw TO sx+sw+shw+sw,sy TO sx+sw+shw,sy+sw TO sx+sw,sy+sw"
210 DIM digit$="123456","34","23567","23457","1347","12457","124567","234","1234567","123457" BASE 0: DIM coord$="sw,sw+1","sw+1,sw","sw*3+shw+2,sw+1","sw*3+shw+2,sw*3+svh+3","sw+1,sw*5+svh*2+4","sw,sw*3+svh+3","sw+1,sw*3+svh+2" BASE 1
220 DIM led$(10) BASE 0: FOR f=0 TO 9: b$="": FOR g=1 TO LEN digit$(f): b=VAL digit$(f)(g): b$=b$+REPLACE$("sx=x+"+coord$(b),",",",sy=y+")+":POLYGON "+IIF$(b IN [2,7,5],hd$,vd$)+" FILL:": NEXT g: led$(f)=TOKEN$ b$: NEXT f
230 RETURN 
240 REM Draw LED segment string
250 INK 1: x=xc-48,y=yc+64: FOR i=1 TO LEN a$: IF a$(i) IN ["0" TO "9"] THEN EXECUTE led$(VAL a$(i)): x+=shw+sw+sw+6 ELSE IF (s+90) MOD 6<3 THEN RECTANGLE 3+x+sw+shw/2,2+y+sw+svh/2,2,2 FILL: RECTANGLE 3+x+sw+shw/2,2+y+sw+svh*2,2,2 FILL: x+=shw+sw*2+6 ELSE x+=shw+sw*2+6
260 NEXT i: RETURN 
