Clock
(Use authentic machine speed)
Virtual basic | Applesoft basic |
rem * control D char d${Cmd}= chr$(4) pi= 3.14159:ci{circumference in radians}= (2 * pi) rem * width max, height max for screen (279, 191, 159) ml%{widthMax}= 279:mw%{widthMax}= ml%:mh%{HeightMax}= 191 if peek(33){mode 80 cols} = 80 then mh%{HeightMax}= 159 rem * true random number def fn alea{true random number}(x) = int(rnd(peek(78)+peek(79)*256) * x + 1) rem * beep and buzz by default bz%{NbreBuzz}= 3:be%{NbreBeep}= 1 section intro text:home gosub @splash gosub @help closesection section global vars def fn hdigi(x)= int( ( ml%{widthmax} - (x * 7.75) ) / 2 ) def fn ten(x)= int(x / 10) * 10 de%{delay}= 10 sn%{sound}= 0 ry%{radius}= 50:di%{digiEdge}= 10 # size of digit numbers dg%{digitspace}= int( (di%{digiEdge} * 2) + (di%{digiEdge} / 2) + (di%{digiEdge} / 4) ) xo%{OrigX}= 140:yo%{OrigY}= 80 hh%{hours}= 0:mm%{mins}= 0:ss%{secs}= 0 closesection section main program £begin {*** beginning of the main loop ***} bp%{mainloop}= bp%{mainloop} + 1 # reset to defaut the values xo%{OrigX}= 140:yo%{OrigY}= 80 hh%{hours}= 0:mm%{mins}= 0:ss%{secs}= 0 hcolor= 3 # white # every day redraw all # switch to graphic mode gosub @hgrscreen hcolor= 3 # white # draw the clock gosub @clockdecoration gosub @clockcircle {one day} # - - - - - - - - - - - - - - - hours for b1=0 to 23 gosub @showhour # - - - - - - - - - - - - - - - minutes for b2=0 to 59 gosub @showminute # when minutes erase hour if b1 * 5 = mm% - 1 or (b1 - 12) * 5 = mm% - 1 then gosub @showhour # - - - - - - - - - - - - - - - - seconds for b3=0 to 59 gosub @showseconde if sn%{sound} = 1 then gosub @beep ki%{keyboardInput}= peek(49152) if ki%{keyboardInput}= 209{"Q"} then goto @endprogram if ki%{keyboardInput}= 212{"T"} then gosub @setclock if ki%{keyboardInput}= 214{"V"} then gosub @setspeed if ki%{keyboardInput}= 200{"H"} then gosub @helpbis # toggle sound if sn%{sound}= 1 and ki%{keyboardInput}= 211{s} then sn%{sound}= 0:goto @soundend if ki%{keyboardInput}= 211{"S"} then sn%{sound}= 1 £soundend gosub @keyboardcapture # rem * delay for b4= 0 to de%{delay} next : next : next : next # can run one month if (bp%{mainloop} < 32) then goto @begin £endprogram text:home:poke 49168,0 gosub @credits end closesection section subscripts {*** subscripts ***} section diginumbers # digit schema # a---b # | | # c---d # | | # e---f # coordinates postions # x1%, y1% are a (origin) coordinates # di%{digiEdge} equal to width of a -> b £a x2%= x1%:y2%= y1%:return £b x2%= x1% + di%{digiEdge}:y2%= y1%:return £c x2%= x1%:y2%= y1% + di%{digiEdge}:return £d x2%= x1% + di%{digiEdge}:y2%= y1% + di%{digiEdge}:return £e x2%= x1%:y2%= y1% + (2 * di%{digiEdge}):return £f x2%= x1% + di%{digiEdge}:y2%= y1% + (2 * di%{digiEdge}):return # digit numbers £zero x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @a:hplot x2%,y2% gosub @b:hplot to x2%,y2% gosub @f:hplot to x2%,y2% gosub @e:hplot to x2%,y2% gosub @a:hplot to x2%,y2% return £one x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @b:hplot x2%,y2% gosub @f:hplot to x2%,y2% return £two x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @a:hplot x2%,y2% gosub @b:hplot to x2%,y2% gosub @d:hplot to x2%,y2% gosub @c:hplot to x2%,y2% gosub @e:hplot to x2%,y2% gosub @f:hplot to x2%,y2% return £three x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @a:hplot x2%,y2% gosub @b:hplot to x2%,y2% gosub @d:hplot to x2%,y2% gosub @c:hplot to x2%,y2% gosub @d:hplot to x2%,y2% gosub @f:hplot to x2%,y2% gosub @e:hplot to x2%,y2% return £four x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @a:hplot x2%,y2% gosub @c:hplot to x2%,y2% gosub @d:hplot to x2%,y2% gosub @f:hplot to x2%,y2% gosub @b:hplot to x2%,y2% return £five x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @b:hplot x2%,y2% gosub @a:hplot to x2%,y2% gosub @c:hplot to x2%,y2% gosub @d:hplot to x2%,y2% gosub @f:hplot to x2%,y2% gosub @e:hplot to x2%,y2% return £six x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @a:hplot x2%,y2% gosub @e:hplot to x2%,y2% gosub @f:hplot to x2%,y2% gosub @d:hplot to x2%,y2% gosub @c:hplot to x2%,y2% return £seven x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @a:hplot x2%,y2% gosub @b:hplot to x2%,y2% gosub @f:hplot to x2%,y2% return £eight x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @a:hplot x2%,y2% gosub @e:hplot to x2%,y2% gosub @f:hplot to x2%,y2% gosub @d:hplot to x2%,y2% gosub @c:hplot to x2%,y2% gosub @a:hplot to x2%,y2% gosub @b:hplot to x2%,y2% gosub @d:hplot to x2%,y2% return £nine x1%= xo%{OrigX}:y1%= yo%{OrigY} gosub @f:hplot x2%,y2% gosub @b:hplot to x2%,y2% gosub @a:hplot to x2%,y2% gosub @c:hplot to x2%,y2% gosub @d:hplot to x2%,y2% return closesection section draw digital clock £digisecs if ss%{secs} < 10 then s1%= 1:s2%= ss%{secs} + 1 if ss%{secs} >= 10 then s1%= int(ss%{secs} / 10) + 1:s2%= ss%{secs} - fn ten(ss%{secs}) + 1 on s1% gosub @zero, @one, @two, @three, @four, @five, @six, @seven, @eight, @nine xo%{OrigX}= xo%{OrigX} + (di%{digiEdge} + int(di%{digiEdge} / 4)) on s2% gosub @zero, @one, @two, @three, @four, @five, @six, @seven, @eight, @nine return £digimins if mm%{mins} < 10 then m1%= 1:m2%= mm%{mins} + 1 if mm%{mins} >= 10 then m1%= int(mm%{mins} / 10) + 1:m2%= mm%{mins} - fn ten(mm%{mins}) + 1 on m1% gosub @zero, @one, @two, @three, @four, @five, @six, @seven, @eight, @nine xo%{OrigX}= xo%{OrigX} + (di%{digiEdge} + int(di%{digiEdge} / 4)) on m2% gosub @zero, @one, @two, @three, @four, @five, @six, @seven, @eight, @nine return £digihours if hh%{hours} < 10 then h1%= 1:h2%= hh%{hours} + 1 if hh%{hours} >= 10 then h1%= int(hh%{hours} / 10) + 1:h2%= hh%{hours} - fn ten(hh%{hours}) + 1 on h1% gosub @zero, @one, @two, @three, @four, @five, @six, @seven, @eight, @nine xo%{OrigX}= xo%{OrigX} + (di%{digiEdge} + int(di%{digiEdge} / 4)) on h2% gosub @zero, @one, @two, @three, @four, @five, @six, @seven, @eight, @nine return closesection section draw arrows £secondsarrows ag= (ss%{secs} + 45) * (ci / 60) x2= xo%{OrigX} + ( ry%{radius} * cos(ag) ) y2= yo%{OrigY} + ( ry%{radius} * sin(ag) ) x1= xo%{OrigX} + ( (ry%{radius}-6) * cos(ag) ) y1= yo%{OrigY} + ( (ry%{radius}-6) * sin(ag) ) hplot x1{OrigX},y1{OrigY} to x2,y2 return £minutesarrows ag= (mm%{mins} + 45) * (ci / 60) x2= xo%{OrigX} + ( (ry%{radius}-10) * cos(ag) ) y2= yo%{OrigY} + ( (ry%{radius}-10) * sin(ag) ) x1= xo%{OrigX} + ( (ry%{radius}-40) * cos(ag) ) y1= yo%{OrigY} + ( (ry%{radius}-40) * sin(ag) ) hplot x1{OrigX},y1{OrigY} to x2,y2 return £hoursarrows ag= (hh%{hours} + 9) * (ci / 12) x2= xo%{OrigX} + ( (ry%{radius} - 18) * cos(ag) ) y2= yo%{OrigY} + ( (ry%{radius} - 18) * sin(ag) ) x1= xo%{OrigX} + ( (ry%{radius}-40) * cos(ag) ) y1= yo%{OrigY} + ( (ry%{radius}-40) * sin(ag) ) hplot x1{OrigX},y1{OrigY} to x2,y2 return closesection section show the clock time £showseconde # erase old second arrow hcolor= 0 xo%{OrigX}= 140:yo%{OrigY}= 80 gosub @secondsarrows xo%{OrigX}= fn hdigi(di%{digiEdge}) :yo%{OrigY}= 160 xo% = xo% + ( dg%{digitspace} * 2 ) gosub @digisecs # draw new second arrow hcolor= 3 ss%{secs}= b3 # new second arrow = b3 xo%{OrigX}= 140:yo%{OrigY}= 80 gosub @secondsarrows xo%{OrigX}= fn hdigi(di%{digiEdge}) :yo%{OrigY}= 160 xo% = xo% + ( dg%{digitspace} * 2 ) gosub @digisecs return £showminute # erase old minute hcolor= 0 xo%{OrigX}= 140:yo%{OrigY}= 80 gosub @minutesarrows mm%{mins} = 88 # digit erase xo%{OrigX}= fn hdigi(di%{digiEdge}) :yo%{OrigY}= 160 xo% = xo% + dg%{digitspace} gosub @digimins # new time hcolor= 3 mm%{mins}= b2 xo%{OrigX}= 140:yo%{OrigY}= 80 gosub @minutesarrows xo%{OrigX}= fn hdigi(di%{digiEdge}) :yo%{OrigY}= 160 xo% = xo% + dg%{digitspace} gosub @digimins return £showhour # erase old hour hcolor= 0 xo%{OrigX}= 140:yo%{OrigY}= 80 gosub @hoursarrows hh%{hours} = 88 # digit erase xo%{OrigX}= fn hdigi(di%{digiEdge}) :yo%{OrigY}= 160 gosub @digihours # new time hcolor= 3 hh%{hours}= b1 xo%{OrigX}= 140:yo%{OrigY}= 80 gosub @hoursarrows xo%{OrigX}= fn hdigi(di%{digiEdge}) :yo%{OrigY}= 160 gosub @digihours return closesection section clock draw £clockdecoration s5 = ci{radiantcircle} / 14 for b7= 0 to ci{radiantcircle} + 0.1 step s5 v1= (ry%{radius} + 20) * cos(b7) v2= (ry%{radius} + 20) * sin(b7) x2%= int( xo%{OrigX} + v1 ) y2%= int( yo%{OrigY} + v2 ) if b7 = 0 then hplot x2%,y2% if b7 > 0 then hplot to x2%,y2% next s5 = ci{radiantcircle} / 14 for b7= 0 to ci{radiantcircle} + 0.1 step s5 v1= (ry%{radius} - 46) * cos(b7) v2= (ry%{radius} - 46) * sin(b7) x2%= int( xo%{OrigX} + v1 ) y2%= int( yo%{OrigY} + v2 ) if b7 = 0 then hplot x2%,y2% if b7 > 0 then hplot to x2%,y2% next return £clockcircle s4 = ci{radiantcircle} / 12 for b6= (s4 * 9) to ( ci{radiantcircle} + 0.1 ) + (s4 * 9) step s4 v1= (ry%{radius} + 5) * cos(b6) v2= (ry%{radius} + 5) * sin(b6) x2%= int( xo%{OrigX} + v1 ) y2%= int( yo%{OrigY} + v2 ) hplot x2%,y2% next return closesection section clock settings £setclock poke 49168,0 text:home print input "hour 1/23 ? ";b1 input "minute 1/59 ? ";b2 input "second 1/59 ? ";b3 if b1 > 23 then b1= 23 if b1 < 0 then b1= 0 if b2 > 59 then b2= 59 if b2 < 0 then b2= 0 if b3 > 59 then b3= 59 if b3 < 0 then b3= 0 gosub @hgrscreen xo%{OrigX}= 140:yo%{OrigY}= 80 gosub @clockdecoration gosub @clockcircle gosub @showhour gosub @showminute gosub @showseconde return £setspeed poke 49168,0 text:home print "actual speed: ";de%{delay} input "speed 1/1000 ?";de%{delay} if de%{delay} <= 0 then de%{delay}= 1 gosub @hgrscreen xo%{OrigX}= 140:yo%{OrigY}= 80 gosub @clockdecoration gosub @clockcircle gosub @showhour gosub @showminute gosub @showseconde return £help poke 49168,0 text:home vtab(peek(37) + 2): s$= " *** clock *** ":gosub @centertext print s$ vtab(peek(37) + 2): s$= " *** by loz *** ":gosub @centertext print s$ vtab(peek(37) + 2): s$= "q-> quit ":gosub @centertext print s$ vtab(peek(37) + 2): s$= "h-> this help ":gosub @centertext print s$ vtab(peek(37) + 2): s$= "t-> set time ":gosub @centertext print s$ vtab(peek(37) + 2): s$= "v-> time speed ":gosub @centertext print s$ vtab(peek(37) + 2): s$= "s-> toggle sound on/off":gosub @centertext print s$ vtab(peek(37) + 2): s$= "type enter to continue ":gosub @centertext print s$ get s$ return £helpbis gosub @help gosub @hgrscreen xo%{OrigX}= 140:yo%{OrigY}= 80 gosub @clockcircle gosub @clockdecoration gosub @showhour gosub @showminute gosub @showseconde return closesection closesection £hgrscreen if peek(33) < 41 and mh%{MaxHauteur} > 159 then hg$= "hgr2" if peek(33) < 41 and mh%{MaxHauteur} <= 159 then hg$= "hgr" rem * mod 80 colonnes if peek(33) > 40 then hg$= "hgr" if hg$ = "hgr" then hgr if hg$ = "hgr2" then hgr2 return £splash text:home vtab(3):print vtab(peek(37) + 2) s${sentence}= "applesoft basic code":gosub @centertext print s${sentence} return £credits text:home gosub @beep vtab(3):print vtab(peek(37) + 2) s${sentence}= "by andres aka loz":gosub @centertext print s${sentence} return £keyboardcapture rem * capture last keyboard entered ki%{keyboardInput}= peek(49152) rem * reset poke 49168,0 rem * actions if ki% = 155{Escape} then goto @endprogram if chr$(ki%) = "t" then text return £centertext t9%{leftSpace}= int( (peek(33) - len(s${sentence}) ) / 2 ) rem * is result is null if (t9% < 1) then t9%= 0 htab(t9%{leftSpace}+1) return £beep if (be%{NbreBeep} < 2) then be%{NbreBeep}= 1 for b9= 1 to be%{NbreBeep} print chr$(7); next return |
10 REM - CLOCK7.BAS - 14/01/2012 - 08h34 - BY - ANDRES - AKA - LOZ - COPYLEFT 20 D$= CHR$(4) 30 PI= 3.14159:CI= (2 * PI) 40 ML%= 279:MW%= ML%:MH%= 191 50 IF PEEK(33) = 80 THEN MH%= 159 60 DEF FN ALEA(X) = INT(RND(PEEK(78)+PEEK(79)*256) * X + 1) 70 BZ%= 3:BE%= 1 80 TEXT:HOME 90 GOSUB 3480 100 GOSUB 3020 110 DEF FN HDIGI(X)= INT( ( ML% - (X * 7.75) ) / 2 ) 120 DEF FN TEN(X)= INT(X / 10) * 10 130 DE%= 10 140 SN%= 0 150 RY%= 50:DI%= 10 160 DG%= INT( (DI% * 2) + (DI% / 2) + (DI% / 4) ) 170 XO%= 140:YO%= 80 180 HH%= 0:MM%= 0:SS%= 0 190 REM->BEGIN 200 BP%= BP% + 1 210 XO%= 140:YO%= 80 220 HH%= 0:MM%= 0:SS%= 0 230 HCOLOR= 3 240 GOSUB 3410 250 HCOLOR= 3 260 GOSUB 2370 270 GOSUB 2570 280 FOR B1=0 TO 23 290 GOSUB 2230 300 FOR B2=0 TO 59 310 GOSUB 2070 320 IF B1 * 5 = MM% - 1 OR (B1 - 12) * 5 = MM% - 1 THEN GOSUB 2230 330 FOR B3=0 TO 59 340 GOSUB 1920 350 IF SN% = 1 THEN GOSUB 3740 360 KI%= PEEK(49152) 370 IF KI%= 209 THEN GOTO 490 380 IF KI%= 212 THEN GOSUB 2670 390 IF KI%= 214 THEN GOSUB 2880 400 IF KI%= 200 THEN GOSUB 3310 410 IF SN%= 1 AND KI%= 211 THEN SN%= 0:GOTO 440 420 IF KI%= 211 THEN SN%= 1 430 REM->SOUNDEND 440 GOSUB 3630 450 FOR B4= 0 TO DE% 460 NEXT : NEXT : NEXT : NEXT 470 IF (BP% < 32) THEN GOTO 200 480 REM->ENDPROGRAM 490 TEXT:HOME:POKE 49168,0 500 GOSUB 3550 510 END 520 REM->A 530 X2%= X1%:Y2%= Y1%:RETURN 540 REM->B 550 X2%= X1% + DI%:Y2%= Y1%:RETURN 560 REM->C 570 X2%= X1%:Y2%= Y1% + DI%:RETURN 580 REM->D 590 X2%= X1% + DI%:Y2%= Y1% + DI%:RETURN 600 REM->E 610 X2%= X1%:Y2%= Y1% + (2 * DI%):RETURN 620 REM->F 630 X2%= X1% + DI%:Y2%= Y1% + (2 * DI%):RETURN 640 REM->ZERO 650 X1%= XO%:Y1%= YO% 660 GOSUB 530:HPLOT X2%,Y2% 670 GOSUB 550:HPLOT TO X2%,Y2% 680 GOSUB 630:HPLOT TO X2%,Y2% 690 GOSUB 610:HPLOT TO X2%,Y2% 700 GOSUB 530:HPLOT TO X2%,Y2% 710 RETURN 720 REM->ONE 730 X1%= XO%:Y1%= YO% 740 GOSUB 550:HPLOT X2%,Y2% 750 GOSUB 630:HPLOT TO X2%,Y2% 760 RETURN 770 REM->TWO 780 X1%= XO%:Y1%= YO% 790 GOSUB 530:HPLOT X2%,Y2% 800 GOSUB 550:HPLOT TO X2%,Y2% 810 GOSUB 590:HPLOT TO X2%,Y2% 820 GOSUB 570:HPLOT TO X2%,Y2% 830 GOSUB 610:HPLOT TO X2%,Y2% 840 GOSUB 630:HPLOT TO X2%,Y2% 850 RETURN 860 REM->THREE 870 X1%= XO%:Y1%= YO% 880 GOSUB 530:HPLOT X2%,Y2% 890 GOSUB 550:HPLOT TO X2%,Y2% 900 GOSUB 590:HPLOT TO X2%,Y2% 910 GOSUB 570:HPLOT TO X2%,Y2% 920 GOSUB 590:HPLOT TO X2%,Y2% 930 GOSUB 630:HPLOT TO X2%,Y2% 940 GOSUB 610:HPLOT TO X2%,Y2% 950 RETURN 960 REM->FOUR 970 X1%= XO%:Y1%= YO% 980 GOSUB 530:HPLOT X2%,Y2% 990 GOSUB 570:HPLOT TO X2%,Y2% 1000 GOSUB 590:HPLOT TO X2%,Y2% 1010 GOSUB 630:HPLOT TO X2%,Y2% 1020 GOSUB 550:HPLOT TO X2%,Y2% 1030 RETURN 1040 REM->FIVE 1050 X1%= XO%:Y1%= YO% 1060 GOSUB 550:HPLOT X2%,Y2% 1070 GOSUB 530:HPLOT TO X2%,Y2% 1080 GOSUB 570:HPLOT TO X2%,Y2% 1090 GOSUB 590:HPLOT TO X2%,Y2% 1100 GOSUB 630:HPLOT TO X2%,Y2% 1110 GOSUB 610:HPLOT TO X2%,Y2% 1120 RETURN 1130 REM->SIX 1140 X1%= XO%:Y1%= YO% 1150 GOSUB 530:HPLOT X2%,Y2% 1160 GOSUB 610:HPLOT TO X2%,Y2% 1170 GOSUB 630:HPLOT TO X2%,Y2% 1180 GOSUB 590:HPLOT TO X2%,Y2% 1190 GOSUB 570:HPLOT TO X2%,Y2% 1200 RETURN 1210 REM->SEVEN 1220 X1%= XO%:Y1%= YO% 1230 GOSUB 530:HPLOT X2%,Y2% 1240 GOSUB 550:HPLOT TO X2%,Y2% 1250 GOSUB 630:HPLOT TO X2%,Y2% 1260 RETURN 1270 REM->EIGHT 1280 X1%= XO%:Y1%= YO% 1290 GOSUB 530:HPLOT X2%,Y2% 1300 GOSUB 610:HPLOT TO X2%,Y2% 1310 GOSUB 630:HPLOT TO X2%,Y2% 1320 GOSUB 590:HPLOT TO X2%,Y2% 1330 GOSUB 570:HPLOT TO X2%,Y2% 1340 GOSUB 530:HPLOT TO X2%,Y2% 1350 GOSUB 550:HPLOT TO X2%,Y2% 1360 GOSUB 590:HPLOT TO X2%,Y2% 1370 RETURN 1380 REM->NINE 1390 X1%= XO%:Y1%= YO% 1400 GOSUB 630:HPLOT X2%,Y2% 1410 GOSUB 550:HPLOT TO X2%,Y2% 1420 GOSUB 530:HPLOT TO X2%,Y2% 1430 GOSUB 570:HPLOT TO X2%,Y2% 1440 GOSUB 590:HPLOT TO X2%,Y2% 1450 RETURN 1460 REM->DIGISECS 1470 IF SS% < 10 THEN S1%= 1:S2%= SS% + 1 1480 IF SS% >= 10 THEN S1%= INT(SS% / 10) + 1:S2%= SS% - FN TEN(SS%) + 1 1490 ON S1% GOSUB 650, 730, 780, 870, 970, 1050, 1140, 1220, 1280, 1390 1500 XO%= XO% + (DI% + INT(DI% / 4)) 1510 ON S2% GOSUB 650, 730, 780, 870, 970, 1050, 1140, 1220, 1280, 1390 1520 RETURN 1530 REM->DIGIMINS 1540 IF MM% < 10 THEN M1%= 1:M2%= MM% + 1 1550 IF MM% >= 10 THEN M1%= INT(MM% / 10) + 1:M2%= MM% - FN TEN(MM%) + 1 1560 ON M1% GOSUB 650, 730, 780, 870, 970, 1050, 1140, 1220, 1280, 1390 1570 XO%= XO% + (DI% + INT(DI% / 4)) 1580 ON M2% GOSUB 650, 730, 780, 870, 970, 1050, 1140, 1220, 1280, 1390 1590 RETURN 1600 REM->DIGIHOURS 1610 IF HH% < 10 THEN H1%= 1:H2%= HH% + 1 1620 IF HH% >= 10 THEN H1%= INT(HH% / 10) + 1:H2%= HH% - FN TEN(HH%) + 1 1630 ON H1% GOSUB 650, 730, 780, 870, 970, 1050, 1140, 1220, 1280, 1390 1640 XO%= XO% + (DI% + INT(DI% / 4)) 1650 ON H2% GOSUB 650, 730, 780, 870, 970, 1050, 1140, 1220, 1280, 1390 1660 RETURN 1670 REM->SECONDSARROWS 1680 AG= (SS% + 45) * (CI / 60) 1690 X2= XO% + ( RY% * COS(AG) ) 1700 Y2= YO% + ( RY% * SIN(AG) ) 1710 X1= XO% + ( (RY%-6) * COS(AG) ) 1720 Y1= YO% + ( (RY%-6) * SIN(AG) ) 1730 HPLOT X1,Y1 TO X2,Y2 1740 RETURN 1750 REM->MINUTESARROWS 1760 AG= (MM% + 45) * (CI / 60) 1770 X2= XO% + ( (RY%-10) * COS(AG) ) 1780 Y2= YO% + ( (RY%-10) * SIN(AG) ) 1790 X1= XO% + ( (RY%-40) * COS(AG) ) 1800 Y1= YO% + ( (RY%-40) * SIN(AG) ) 1810 HPLOT X1,Y1 TO X2,Y2 1820 RETURN 1830 REM->HOURSARROWS 1840 AG= (HH% + 9) * (CI / 12) 1850 X2= XO% + ( (RY% - 18) * COS(AG) ) 1860 Y2= YO% + ( (RY% - 18) * SIN(AG) ) 1870 X1= XO% + ( (RY%-40) * COS(AG) ) 1880 Y1= YO% + ( (RY%-40) * SIN(AG) ) 1890 HPLOT X1,Y1 TO X2,Y2 1900 RETURN 1910 REM->SHOWSECONDE 1920 HCOLOR= 0 1930 XO%= 140:YO%= 80 1940 GOSUB 1680 1950 XO%= FN HDIGI(DI%) :YO%= 160 1960 XO% = XO% + ( DG% * 2 ) 1970 GOSUB 1470 1980 HCOLOR= 3 1990 SS%= B3 2000 XO%= 140:YO%= 80 2010 GOSUB 1680 2020 XO%= FN HDIGI(DI%) :YO%= 160 2030 XO% = XO% + ( DG% * 2 ) 2040 GOSUB 1470 2050 RETURN 2060 REM->SHOWMINUTE 2070 HCOLOR= 0 2080 XO%= 140:YO%= 80 2090 GOSUB 1760 2100 MM% = 88 2110 XO%= FN HDIGI(DI%) :YO%= 160 2120 XO% = XO% + DG% 2130 GOSUB 1540 2140 HCOLOR= 3 2150 MM%= B2 2160 XO%= 140:YO%= 80 2170 GOSUB 1760 2180 XO%= FN HDIGI(DI%) :YO%= 160 2190 XO% = XO% + DG% 2200 GOSUB 1540 2210 RETURN 2220 REM->SHOWHOUR 2230 HCOLOR= 0 2240 XO%= 140:YO%= 80 2250 GOSUB 1840 2260 HH% = 88 2270 XO%= FN HDIGI(DI%) :YO%= 160 2280 GOSUB 1610 2290 HCOLOR= 3 2300 HH%= B1 2310 XO%= 140:YO%= 80 2320 GOSUB 1840 2330 XO%= FN HDIGI(DI%) :YO%= 160 2340 GOSUB 1610 2350 RETURN 2360 REM->CLOCKDECORATION 2370 S5 = CI / 14 2380 FOR B7= 0 TO CI + 0.1 STEP S5 2390 V1= (RY% + 20) * COS(B7) 2400 V2= (RY% + 20) * SIN(B7) 2410 X2%= INT( XO% + V1 ) 2420 Y2%= INT( YO% + V2 ) 2430 IF B7 = 0 THEN HPLOT X2%,Y2% 2440 IF B7 > 0 THEN HPLOT TO X2%,Y2% 2450 NEXT 2460 S5 = CI / 14 2470 FOR B7= 0 TO CI + 0.1 STEP S5 2480 V1= (RY% - 46) * COS(B7) 2490 V2= (RY% - 46) * SIN(B7) 2500 X2%= INT( XO% + V1 ) 2510 Y2%= INT( YO% + V2 ) 2520 IF B7 = 0 THEN HPLOT X2%,Y2% 2530 IF B7 > 0 THEN HPLOT TO X2%,Y2% 2540 NEXT 2550 RETURN 2560 REM->CLOCKCIRCLE 2570 S4 = CI / 12 2580 FOR B6= (S4 * 9) TO ( CI + 0.1 ) + (S4 * 9) STEP S4 2590 V1= (RY% + 5) * COS(B6) 2600 V2= (RY% + 5) * SIN(B6) 2610 X2%= INT( XO% + V1 ) 2620 Y2%= INT( YO% + V2 ) 2630 HPLOT X2%,Y2% 2640 NEXT 2650 RETURN 2660 REM->SETCLOCK 2670 POKE 49168,0 2680 TEXT:HOME 2690 ? 2700 INPUT "HOUR 1/23 ? ";B1 2710 INPUT "MINUTE 1/59 ? ";B2 2720 INPUT "SECOND 1/59 ? ";B3 2730 IF B1 > 23 THEN B1= 23 2740 IF B1 < 0 THEN B1= 0 2750 IF B2 > 59 THEN B2= 59 2760 IF B2 < 0 THEN B2= 0 2770 IF B3 > 59 THEN B3= 59 2780 IF B3 < 0 THEN B3= 0 2790 GOSUB 3410 2800 XO%= 140:YO%= 80 2810 GOSUB 2370 2820 GOSUB 2570 2830 GOSUB 2230 2840 GOSUB 2070 2850 GOSUB 1920 2860 RETURN 2870 REM->SETSPEED 2880 POKE 49168,0 2890 TEXT:HOME 2900 ? "ACTUAL SPEED: ";DE% 2910 INPUT "SPEED 1/1000 ?";DE% 2920 IF DE% <= 0 THEN DE%= 1 2930 GOSUB 3410 2940 XO%= 140:YO%= 80 2950 GOSUB 2370 2960 GOSUB 2570 2970 GOSUB 2230 2980 GOSUB 2070 2990 GOSUB 1920 3000 RETURN 3010 REM->HELP 3020 POKE 49168,0 3030 TEXT:HOME 3040 VTAB(PEEK(37) + 2): 3050 S$= " *** CLOCK *** ":GOSUB 3690 3060 ? S$ 3070 VTAB(PEEK(37) + 2): 3080 S$= " *** BY LOZ *** ":GOSUB 3690 3090 ? S$ 3100 VTAB(PEEK(37) + 2): 3110 S$= "Q-> QUIT ":GOSUB 3690 3120 ? S$ 3130 VTAB(PEEK(37) + 2): 3140 S$= "H-> THIS HELP ":GOSUB 3690 3150 ? S$ 3160 VTAB(PEEK(37) + 2): 3170 S$= "T-> SET TIME ":GOSUB 3690 3180 ? S$ 3190 VTAB(PEEK(37) + 2): 3200 S$= "V-> TIME SPEED ":GOSUB 3690 3210 ? S$ 3220 VTAB(PEEK(37) + 2): 3230 S$= "S-> TOGGLE SOUND ON/OFF":GOSUB 3690 3240 ? S$ 3250 VTAB(PEEK(37) + 2): 3260 S$= "TYPE ENTER TO CONTINUE ":GOSUB 3690 3270 ? S$ 3280 GET S$ 3290 RETURN 3300 REM->HELPBIS 3310 GOSUB 3020 3320 GOSUB 3410 3330 XO%= 140:YO%= 80 3340 GOSUB 2570 3350 GOSUB 2370 3360 GOSUB 2230 3370 GOSUB 2070 3380 GOSUB 1920 3390 RETURN 3400 REM->HGRSCREEN 3410 IF PEEK(33) < 41 AND MH% > 159 THEN HG$= "HGR2" 3420 IF PEEK(33) < 41 AND MH% <= 159 THEN HG$= "HGR" 3430 IF PEEK(33) > 40 THEN HG$= "HGR" 3440 IF HG$ = "HGR" THEN HGR 3450 IF HG$ = "HGR2" THEN HGR2 3460 RETURN 3470 REM->SPLASH 3480 TEXT:HOME 3490 VTAB(3):? 3500 VTAB(PEEK(37) + 2) 3510 S$= "APPLESOFT BASIC CODE":GOSUB 3690 3520 ? S$ 3530 RETURN 3540 REM->CREDITS 3550 TEXT:HOME 3560 GOSUB 3740 3570 VTAB(3):? 3580 VTAB(PEEK(37) + 2) 3590 S$= "BY ANDRES AKA LOZ":GOSUB 3690 3600 ? S$ 3610 RETURN 3620 REM->KEYBOARDCAPTURE 3630 KI%= PEEK(49152) 3640 POKE 49168,0 3650 IF KI% = 155 THEN GOTO 490 3660 IF CHR$(KI%) = "T" THEN TEXT 3670 RETURN 3680 REM->CENTERTEXT 3690 T9%= INT( (PEEK(33) - LEN(S$) ) / 2 ) 3700 IF (T9% < 1) THEN T9%= 0 3710 HTAB(T9%+1) 3720 RETURN 3730 REM->BEEP 3740 IF (BE% < 2) THEN BE%= 1 3750 FOR B9= 1 TO BE% 3760 ? CHR$(7); 3770 NEXT 3780 RETURN |