1 '* CLOCK2.BA v1.1 for the M100/T102 by Gary Weber *
2 '* Original version "11-20-87" by Structured Software Services
3 '
10 GOTO 60
18 ' #########################################
19 ' Keyboard input routine
20 K$=INKEY$:IF K$="" THEN RETURN:
25 IF K$=" " THEN GOSUB 4000:RETURN
30 K=(ASC(K$)-245):IF K<0 OR K>8 THEN RETURN ELSE ON K GOSUB 200,300,500,530,900,1000,1100,3000:RETURN
40 ' #########################################
50 '
60 SCREEN,0:CLS:CALL 17001:PRINT"CLOCK2 v1.1 for M100/T102 by Gary Weber ":CALL 17006:PRINT"Initializing ...":CLEAR 256:FOR I=1 TO 8:KEY I,CHR$(245+I):NEXT
70 DEFINT A-Z:DEFDBL F:DIM N$(12),N(12),DW$(7),NS(9):ST$="12:00":SA$="PM":SH=12:SM=0:OM=99:KT=99:AL=3:NS(1)=1567:NS(2)=1758:NS(3)=1864:NS(4)=2092:NS(5)=2348:NS(6)=16:NS(7)=32:NS(8)=40:NS(9)=80
80 DATA Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
85 DATA January,31,February,28,March,31,April,30,May,31,June,30,July,31,August,31,September,30,October,31,November,30,December,31
90 RESTORE 80:FOR I=0 TO 6:READ DW$(I):NEXT:FOR I=1 TO 12:READ N$(I),N(I):NEXT:CLS
100 PA=9:XA$="":HA=99:HB=99:MA=99:MB=99:X1=99:XO=99:' Redisplay entire clock
110 MF=1:' MF=1 will redisplay function key line
120 GOSUB 1690:GOSUB 1280:GOSUB 1560:IF IR=1 THEN IR=0:GOTO 100 ELSE IF IR=2 THEN IR=0:GOTO 110 ELSE 120
130 '
140 ' Select style of Alarm
200 CLS:PRINT"(1) Cuckoo Song":PRINT"(2) Chimes":PRINT"(3) Take Me Out To The Ballgame":PRINT"(4) Slow beep":PRINT"(5) Fast Beep":PRINT:PRINT"Press number of desired alarm: ";
210 K$=INPUT$(1):PRINT K$
220 AL=VAL(K$):IF AL<1 OR AL>5 THEN BEEP:GOTO 200
230 IR=1:CLS:' IR=1 will redisplay the entire clock face
240 FORI=1TO10:X$=INKEY$:NEXT
250 RETURN
260 '
270 ' Menu for setting the Alarm, Time, and Date
300 CLS:CALL 17001:PRINT@0,"     Alarm, Time, and Date Setting      ";:CALL 17006:PRINT "1. Alarm Time: ";ST$" "SA$;:IF SF=1 THEN PRINT " <Set>"; ELSE PRINT " (off)";
302 PRINT:PRINT "2. Current Time: ";TIME$:PRINT "3. Current Date: ";DATE$:PRINT
305 PRINT "Enter # to change, ENTER when done:";:I$=INPUT$(1):IF I$=CHR$(13) THEN CLS:IR=1:GOTO 240 ELSE PRINT I$:IF VAL(I$)<1 OR VAL(I$)>3 THEN BEEP:GOTO 300
310 ON VAL(I$) GOSUB 320,400,460
315 GOTO 300
318 '
319 ' Set the Alarm time
320 LINE INPUT"Alarm time (HH:MM am/pm): ";NT$:IF NT$="" THEN SF=1:RETURN
325 C=INSTR(1,NT$,":"):IF C=0 THEN BEEP:RETURN
330 NA$=RIGHT$(NT$,2):IFNA$="am"THENSA$="AM":GOTO350
335 IF NA$="pm" THEN SA$="PM":GOTO 350
340 IF NA$<>"AM" AND NA$<>"PM" THEN BEEP:RETURN ELSE SA$=NA$
350 SH=VAL(LEFT$(NT$,C-1)):IF SH<1 OR SH>12 THEN BEEP:RETURN
360 SM=VAL(MID$(NT$,C+1,2)):IF SM<0 OR SM>59 THEN BEEP:RETURN
370 ST$=RIGHT$(STR$(SH),LEN(STR$(SH))-1)+":":IF SM<10 THEN ST$=ST$+"0"
380 ST$=ST$+RIGHT$(STR$(SM),LEN(STR$(SM))-1):SF=1:RETURN
390 '
399 ' Set the Current time
400 LINE INPUT "Enter new time: ";NT$:IF NT$="" THEN RETURN
410 IF LEN(NT$)<8 OR MID$(NT$,3,1)<>":" OR MID$(NT$,6,1)<>":" THEN BEEP:RETURN
420 XH=VAL(LEFT$(NT$,2)):IF XH<1 OR XH>23 THEN BEEP:RETURN
430 XM=VAL(MID$(NT$,4,2)):IF XM<0 OR XM>59 THEN BEEP:RETURN
440 XN=VAL(MID$(NT$,7,2)):IF XN<0 OR XN>59 THEN BEEP:RETURN
450 ON ERROR GOTO 455:TIME$=NT$:ON ERROR GOTO 0:RETURN
455 BEEP:RESUME
458 '
459 ' Set the Current date
460 LINE INPUT"Enter new date: ";ND$:IF ND$="" THEN RETURN
465 IF LEN(ND$)<8 OR MID$(ND$,3,1)<>"/" OR MID$(ND$,6,1)<>"/" THEN BEEP:RETURN
470 XY=VAL(RIGHT$(ND$,2)):IF XY<1 OR XY>99 THEN BEEP:RETURN
475 XM=VAL(LEFT$(ND$,2)):IF XM<1 OR XM>12 THEN BEEP:RETURN
480 XD=VAL(MID$(ND$,4,2)):IF XD<1 OR XD>31 THEN BEEP:RETURN
485 ON ERROR GOTO 490:DATE$=ND$:ON ERROR GOTO 0:RETURN
490 BEEP:RESUME
498 '
499 ' Turn the Alarm OFF
500 SF=0:IR=2:GOTO 240
510 '
520 ' Calendar
530 CM=VAL(LEFT$(DT$,2)):CY=2000+VAL(RIGHT$(DT$,2)):CD=1:A1=CM:A2=CY:A3=VAL(MID$(DT$,4,2))
550 IF CM<3 THEN F=365*CY+CD+31*(CM-1)+INT(CY/4-.25)-INT(.75*(INT((CY-1)/100)+1))
560 IF CM>2 THEN F=365*CY+CD+31*(CM-1)-INT(.4*CM+2.3)+INT(CY/4)-INT(.75*(INT(CY/100)+1))
570 F=F-(INT(F/7)*7):IF F=0 THEN F=7
580 N(2)=28:IF CM=2 AND (INT(CY/4)=CY/4) THEN N(2)=29
590 CLS:PRINT @10,N$(CM):PRINT @25,CY:PRINT @50,"Su Mo Tu We Th Fr Sa":L=1
600 FOR J=F TO F+N(CM)-1
610   PL=87+INT((J-1)/7)*19+3*J
620   L1=INT(PL/40)
630   L2=PL-L1*40
640   IF CM=A1 AND CY=A2 AND L=A3 THEN CALL 17001:LINE(L2*6-2,L1*8-1)-(L2*6+14,L1*8+7),1,BF
650   PRINT @L2+L1*40, USING"##";L;:CALL 17006:L=L+1
660 NEXT
670 FOR I=57 TO 183 STEP 18:LINE(I,15)-(I,63):NEXT:FOR I=15 TO 63 STEP 8:LINE(57,I)-(183,I):NEXT
680 PRINT @80,CHR$(155);": prev";
690 PRINT @120,CHR$(154);": next";
700 PRINT @160,"d: date?";
710 PRINT @200,"t: today";
720 PRINT @280,"ESC: exit";
730 K$=INKEY$:IF K$>"" THEN 740
732 PRINT @112,"Current:";:PRINT @192,DATE$;:PRINT @232,TIME$;
734 HR=VAL(LEFT$(TIME$,2)):MN=VAL(MID$(TIME$,4,2)):IF HR=12 THEN PM=1:GOTO738
736 IF HR>12 THEN HR=HR-12:PM=1 ELSE PM=0:IF HR=0 THEN HR=12
738 GOSUB 1560:GOTO 730
740 IF K$=CHR$(28) THEN 800
750 IF K$=CHR$(29) THEN 820
760 IF K$="D" OR K$="d" THEN CLS:LINE INPUT"Enter any date (mm/yyyy):";N$(0):CM=VAL(N$(0)):CD=1:CY=VAL(RIGHT$(N$(0),4)):GOTO 550
770 IF K$="T" OR K$="t" THEN CM=VAL(LEFT$(DT$,2)):CD=1:CY=2000+VAL(RIGHT$(DT$,2)):GOTO 550
780 IF K$=CHR$(27) OR K$="C" OR K$="c" THEN CLS:IR=1:RETURN
790 GOTO 730
800 CM=CM+1:IF CM=13 THEN CM=1:CY=CY+1
810 GOTO 550
820 CM=CM-1:IF CM=0 THEN CM=12:CY=CY-1
830 GOTO 550
840 '
850 ' Chime ON/OFF
900 IF CF=1 THEN CF=0 ELSE KF=0:CF=1
910 IR=2:GOTO 240
920 '
930 ' Cuckoo ON/OFF
1000 IF KF=1 THEN KF=0 ELSE CF=0:KF=1
1010 IR=2:GOTO 240
1020 '
1030 ' Help screen
1100 CLS:PRINT"Function keys do the following:"
1102 PRINT"F1: Set alarm sound  F5: Chimes on/off"
1104 PRINT"F2: Set alarm / time F6: Cuckoo on/off"
1106 PRINT"F3: Turn alarm off   F7: Get help"
1108 PRINT"F4: View calendar    F8: Main Menu":PRINT
1115 PRINT"Press function key for more info, or    press ESC to return to the clock.";
1118 LINE(0,7)-(239,7):LINE(0,47)-(239,47)
1120 GOSUB 1250:IF K$=CHR$(27) THEN CLS:IR=1:GOTO 240 ELSE K=(ASC(K$)-245)
1130 IF K<1 OR K>10 THEN 1120 ELSE CLS:P$="Pressing F":ON K GOSUB 1140,1160,1170,1180,1200,1220,1230,1240:GOTO 1100
1140 PRINT:PRINT P$;"1 allows you to pick one of":PRINT"the five kinds of sounds the alarm can":PRINT"make when it goes off."
1150 PRINT @280,"(Press any key to return to help menu.)";:GOSUB 1250:RETURN
1160 PRINT:PRINT P$;"2 shows menu for setting the  alarm, time & date.   On the clock face,'Set' is highlighted in black when the  alarm is set.":GOTO 1150
1170 PRINT:PRINT P$;"3 turns the alarm off. When   the alarm is off, 'Set' will not be     highlighted on the clock face. When the alarm is sounding, pressing a letter or spacebar key will turn it off.":GOTO 1150
1180 PRINT P$;"4 shows the calendar for the  current month. Today's date appears     highlighted in black. You may page      backward and forward a month at a time. Pressing D allows you view a calendar   for any month/year you wish. Pressing T ";
1190 PRINT "returns to the current date. ":GOTO 1150
1200 PRINT P$;"5 turns the chimes on or off. On the clock face, 'Chime' will be      highlighted in black when the chimes areon. If on, chimes will sound on the 1/4,";
1210 PRINT"1/2, 3/4 and whole hour. Press a letter or spacebar key to stop the chime.":GOTO 1150
1220 PRINT P$;"6 turns the cuckoo on or off. On the clock face, 'Cuckoo' will be     highlighted in black when it is on.":PRINT"If on, the cuckoo will come out and singon the 1/4, 1/2, 3/4 and whole hour.    Press a letter or spacebar key to stop"
1225 PRINT"the cuckoo's song.":GOTO 1150
1230 PRINT:PRINT P$;"7 displays the help menu you":PRINT"just saw.":GOTO 1150
1240 PRINT:PRINT P$;"8 returns you to the main":PRINT"menu.":GOTO 1150
1250 K$=INKEY$:IF K$="" THEN 1250 ELSE RETURN
1260 '
1270 ' Regular Chime & Cuckoo chime
1280 IF(KF=0 AND CF=0) OR KT=MN THEN RETURN
1290 IF MN=15 OR MN=30 OR MN=45 OR MN=0 THEN KT=MN ELSE RETURN
1300 IF KF=1 THEN X=146:Y=32:GOSUB 2840:RESTORE 2900 ELSE RESTORE 2890
1310 IF MN<>15 THEN 1390
1320 IF KF=1 THEN 1360
1330 TT=4:GOSUB 1340:GOTO 1540
1340 FOR I=1 TO TT:GOSUB 1550:FOR II=1 TO DU*2:NEXT II:K$=INKEY$:IF K$<>"" THEN I=TT
1350 NEXT I:RETURN
1360 TT=4:GOSUB 1370:GOTO 1540
1370 FOR I=1 TO TT:GOSUB 1550:K$=INKEY$:IF K$<>"" THEN I=TT
1380 NEXT I:RETURN
1390 IF MN<>30 THEN 1430
1400 IF KF=1 THEN 1420
1410 TT=7:GOSUB 1340:GOTO 1540
1420 TT=9:GOSUB 1370:GOTO 1540
1430 IF MN<>45 THEN 1470
1440 IF KF=1 THEN 1460
1450 TT=11:GOSUB 1340:GOTO 1540
1460 TT=13:GOSUB 1370:GOTO 1540
1470 IF KF=1THEN 1510
1480 TT=15:GOSUB 1340:IF K$<>"" THEN 1540
1490 FOR I=1 TO HR:SOUND 4697,80:FOR II=1 TO 160:NEXT II:IF INKEY$<>"" THEN I=HR
1500 NEXT I:GOTO 1540
1510 TT=19:GOSUB 1370:IF K$<>"" THEN 1540
1520 FOR I=1 TO HR:SOUND 1567,16:SOUND 1864,32:FOR II=1 TO 160:NEXT II:IF INKEY$<>"" THEN I=HR
1530 NEXT I
1540 LINE(146,27)-(171,52),0,BF:FORI=1TO10:K$=INKEY$:NEXT:RETURN
1550 READ T:DU=NS(T MOD 10):N=NS(T\10):IF N>0 THEN SOUND N,DU:RETURN ELSE FOR II=1 TO DU*10:NEXT II:RETURN
1560 IF SF=0 OR SM=OM THEN RETURN
1570 IF(SH<>HR)OR(SM<>MN)OR(SA$="AM" AND PM=1) OR (SA$="PM" AND PM=0) THEN RETURN
1580 IF SF=0 THEN OM=SM:IR=1:GOTO 240
1590 GO=1:ON AL GOTO 1600,1610,1615,1620,1630
1600 RESTORE 2900:TT=19:GOSUB 1370:GOTO 1650
1610 RESTORE 2890:TT=15:GOSUB 1340:GOTO 1650
1615 GOSUB 3100:GOTO 1650
1620 BEEP:FOR I=1 TO 1600:NEXT:GOTO 1640
1630 BEEP:FOR I=1 TO 200:NEXT
1640 K$=INKEY$
1650 IF K$=" " THEN 4100 ELSE IF K$>"" THEN SN=0:SF=0:' SPACEBAR = snooze (SN=1), Any other key = OFF
1660 GOTO 1580
1670 '
1680 ' Display clock face, wait for keyboard input
1690 TM$=TIME$:DT$=DATE$:DY$=DAY$:IF DT$<>DATE$ OR DY$<>DAY$ THEN 1690
1700 HR=VAL(LEFT$(TM$,2)):MN=VAL(MID$(TM$,4,2)):IF HR=12 THEN PM=1:GOTO 1720
1710 IF HR>12 THEN HR=HR-12:PM=1 ELSE PM=0:IF HR=0 THEN HR=12
1720 GOSUB 20
1730 H1=HR\10:H2=HR MOD 10:M1=MN\10:M2=MN MOD 10:XT=4:XW=25:Y=2:IF H1<>HA THEN IF H1=1 THEN LINE(0,2)-(4,52),1,BF ELSE LINE(0,2)-(4,52),0,BF
1740 HA=H1:IF H2<>HB THEN X=14:N=H2+1:GOSUB 2220:LINE(47,15)-(51,19),1,BF:LINE(47,35)-(51,39),1,BF:HB=H2
1750 IF M1<>MA THEN X=59:N=M1+1:GOSUB 2220:MA=M1
1760 IF M2<>MB THEN X=94:N=M2+1:GOSUB 2220:IF MB<>99 THEN OM=99:MB=M2 ELSE MB=M2
1770 IF PM=PA THEN 1790
1780 IF PM=1 THEN CALL 17001:PRINT @221,"PM";:CALL 17006:LINE(125,39)-(137,47),1,B ELSE LINE(125,39)-(137,47),0,BF:PRINT @221,"AM";
1790 PA=PM:IF DY$=XA$ THEN 1960
1800 IF LEFT$(DT$,5)="03/01" AND XO=2 AND VAL(RIGHT$(DT$,2)) MOD 4=0 AND D1*10+D2=28 THEN DATE$="02/29/"+RIGHT$(DT$,2):GOTO 1690
1810 LINE(126,2)-(177,25),0,BF:X=126:Y=2
1820 IF DY$="Mon" THEN DN=2:GOSUB 2460:X=144:GOSUB 2660:X=162:GOSUB 2650:GOTO 1890
1830 IF DY$="Tue" THEN DN=3:GOSUB 2510:X=144:GOSUB 2700:X=162:GOSUB 2590:GOTO 1890
1840 IF DY$="Wed" THEN DN=4:GOSUB 2520:X=144:GOSUB 2590:X=162:GOSUB 2580:GOTO 1890
1850 IF DY$="Thu" THEN DN=5:GOSUB 2510:X=144:GOSUB 2620:X=162:GOSUB 2700:GOTO 1890
1860 IF DY$="Fri" THEN DN=6:GOSUB 2440:X=144:GOSUB 2680:X=162:GOSUB 2630:GOTO 1890
1870 GOSUB 2500:X=144:IF DY$="Sat" THEN DN=7:GOSUB 2550:X=162:GOSUB 2690:GOTO 1890
1880 DN=1:GOSUB 2700:X=162:GOSUB 2650
1890 XA$=DY$:MO=VAL(LEFT$(DT$,2))
1900 IF MO=XO THEN 1920 ELSE X=186:LINE(X,Y)-(236,25),0,BF
1910 ON MO GOSUB 2100,2110,2120,2130,2140,2150,2160,2170,2180,2190,2200,2210
1920 XO=MO:D1=VAL(MID$(DT$,4,1)):D2=VAL(MID$(DT$,5,1))
1930 XW=11:XT=3:Y=30:IF D1<>X1 THEN X=199:LINE(X,Y)-(210,52),0,BF:IF D1<>0 THEN N=D1+1:GOSUB 2220
1940 X=215:LINE(X,Y)-(226,52),0,BF:N=D2+1:GOSUB 2220:X1=D1
1949 '
1950 ' Display function keys
1960 IF MF=0 THEN RETURN ELSE PRINT @280,"Alrm ";:IF SF=0 THEN PRINT"Set  ";:LINE(29,55)-(47,63),0,B:GOTO 1980
1970 CALL 17001:PRINT"Set";:CALL 17006:PRINT"  ";:LINE(29,55)-(47,63),1,B
1980 PRINT"Off  Cldr ";:IF CF=0 THEN PRINT"Chme ";:LINE(119,55)-(143,63),0,B:GOTO 2000
1990 CALL 17001:PRINT"Chme";:CALL 17006:PRINT" ";:LINE(119,55)-(143,63),1,B
2000 IF KF=0 THEN PRINT"Ckoo ";:LINE(149,55)-(173,63),0,B:GOTO 2020
2010 CALL 17001:PRINT"Ckoo";:CALL 17006:PRINT" ";:LINE(149,55)-(173,63),1,B
2020 PRINT"Help Menu";:MF=0:RETURN
2030 '
2100 GOSUB 2450:X=204:GOSUB 2550:X=222:GOSUB 2650:RETURN
2110 GOSUB 2440:X=204:GOSUB 2590:X=222:GOSUB 2560:RETURN
2120 GOSUB 2460:X=204:GOSUB 2550:X=222:GOSUB 2680:RETURN
2130 GOSUB 2410:X=204:GOSUB 2670:X=222:GOSUB 2680:RETURN
2140 GOSUB 2460:X=204:GOSUB 2550:X=222:GOSUB 2720:RETURN
2150 GOSUB 2450:X=204:GOSUB 2700:X=222:GOSUB 2650:RETURN
2160 GOSUB 2450:X=204:GOSUB 2640:X=222:GOSUB 2720:RETURN
2170 GOSUB 2410:X=204:GOSUB 2700:X=222:GOSUB 2600:RETURN
2180 GOSUB 2500:X=204:GOSUB 2590:X=222:GOSUB 2670:RETURN
2190 GOSUB 2480:X=204:GOSUB 2570:X=222:GOSUB 2690:RETURN
2200 GOSUB 2470:X=204:GOSUB 2660:X=222:GOSUB 2710:RETURN
2210 GOSUB 2420:X=204:GOSUB 2590:X=222:GOSUB 2570:RETURN
2220 ON N GOTO 2230,2240,2250,2260,2270,2280,2290,2300,2310,2320
2230 GOSUB 2400:GOSUB 2330:GOSUB 2340:GOSUB 2350:GOSUB 2360:GOSUB 2370:GOSUB 2380:RETURN
2240 GOSUB 2400:GOSUB 2340:GOSUB 2350:RETURN
2250 GOSUB 2400:GOSUB 2330:GOSUB 2340:GOSUB 2360:GOSUB 2370:GOSUB 2390:RETURN
2260 GOSUB 2400:GOSUB 2330:GOSUB 2340:GOSUB 2350:GOSUB 2360:GOSUB 2390:RETURN
2270 GOSUB 2400:GOSUB 2340:GOSUB 2350:GOSUB 2380:GOSUB 2390:RETURN
2280 GOSUB 2400:GOSUB 2330:GOSUB 2350:GOSUB 2360:GOSUB 2380:GOSUB 2390:RETURN
2290 GOSUB 2400:GOSUB 2350:GOSUB 2360:GOSUB 2370:GOSUB 2380:GOSUB 2390:RETURN
2300 GOSUB 2400:GOSUB 2330:GOSUB 2340:GOSUB 2350:RETURN
2310 GOSUB 2230:GOSUB 2390:RETURN
2320 GOSUB 2270:GOSUB 2330:RETURN
2330 LINE(X,Y)-(X+XW,Y+XT),1,BF:RETURN
2340 LINE(X+XW,Y)-(X+XW-XT,Y+XW),1,BF:RETURN
2350 LINE(X+XW-XT,Y+XW)-(X+XW,Y+2*XW),1,BF:RETURN
2360 LINE (X,Y+2*XW)-(X+XW,Y+2*XW-XT),1,BF:RETURN
2370 LINE(X,Y+XW)-(X+XT,Y+2*XW),1,BF:RETURN
2380 LINE(X,Y)-(X+XT,Y+XW),1,BF:RETURN
2390 LINE(X,Y+XW-XT\2)-(X+XW,Y+XW-XT\2+XT),1,BF:RETURN
2400 LINE(X,Y)-(X+XW,Y+2*XW),0,BF:RETURN
2410 LINE(X,Y+6)-(X+2,Y+20),1,BF:LINE(X+12,Y+6)-(X+14,Y+20),1,BF:LINE(X+3,Y+12)-(X+11,Y+14),1,BF:LINE(X+6,Y)-(X+8,Y+3),1,BF:FORI=YTOY+4:LINE(X+5,I)-(X+1,I+4):LINE(X+9,I)-(X+13,I+4):NEXT:RETURN
2420 LINE(X,Y)-(X+9,Y+2),1,BF:LINE(X,Y+18)-(X+9,Y+20),1,BF:LINE(X+3,Y+3)-(X+5,Y+17),1,BF:LINE(X+12,Y+4)-(X+14,Y+16),1,BF
2430 FORI=XTOX+3:LINE(I+8,Y)-(I+11,Y+3):LINE(I+8,Y+20)-(I+11,Y+17):NEXT:RETURN
2440 GOSUB 2530:LINE(X+3,Y)-(X+14,Y+2),1,BF:LINE(X+3,Y+9)-(X+11,Y+11),1,BF:RETURN
2450 LINE(X+6,Y)-(X+14,Y+2),1,BF:LINE(X+9,Y+3)-(X+11,Y+16),1,BF:LINE(X,Y+12)-(X+2,Y+16),1,BF:LINE(X+5,Y+18)-(X+6,Y+18):FORI=XTOX+3:LINE(I,Y+17)-(I+3,Y+20):LINE(I+5,Y+20)-(I+8,Y+17):NEXT:RETURN
2460 GOSUB 2530:GOSUB2540:FORI=Y+1TOY+4:LINE(X+3,I)-(X+7,I+4):LINE(X+11,I)-(X+7,I+4):NEXT:RETURN
2470 GOSUB 2530:GOSUB2540:FORI=YTOY+3:LINE(X+2,I)-(X+12,I+17):NEXT:RETURN
2480 LINE(X,Y+4)-(X+2,Y+16),1,BF:LINE(X+12,Y+4)-(X+14,Y+16),1,BF
2490 LINE(X+5,Y)-(X+9,Y+2),1,BF:LINE(X+5,Y+18)-(X+9,Y+20),1,BF:FORI=XTOX+3:LINE(I,Y+3)-(I+3,Y):LINE(I,Y+17)-(I+3,Y+20):NEXT:GOTO2430
2500 LINE(X,Y+4)-(X+2,Y+7),1,BF:LINE(X+12,Y+4)-(X+14,Y+5),1,BF:LINE(X+5,Y+9)-(X+9,Y+11),1,BF:LINE(X+12,Y+13)-(X+14,Y+16),1,BF:LINE(X,Y+15)-(X+2,Y+16),1,BF:FORI=XTOX+3:LINE(I,Y+8)-(I+3,Y+11):LINE(I+8,Y+9)-(I+11,Y+12):NEXT:GOTO2490
2510 LINE(X,Y)-(X+14,Y+2),1,BF:LINE(X+6,Y+3)-(X+8,Y+20),1,BF:RETURN
2520 GOSUB 2530:GOSUB2540:FORI=Y+16TOY+19:LINE(X+3,I)-(X+7,I-4):LINE(X+11,I)-(X+7,I-4):NEXT:RETURN
2530 LINE(X,Y)-(X+2,Y+20),1,BF:RETURN
2540 LINE(X+12,Y)-(X+14,Y+20),1,BF:RETURN
2550 GOSUB 2730:GOSUB2740:GOSUB2750:GOSUB2770:GOSUB2820:LINE(X,Y+15)-(X+2,Y+17),1,BF:GOSUB2800:GOSUB2790:YY=Y:Y=8:GOSUB2780:Y=YY:RETURN
2560 GOSUB 2530:GOSUB2770:GOSUB2790:GOSUB2810:LINE(X+6,Y+6)-(X+11,Y+8),1,BF:LINE(X+6,Y+18)-(X+11,Y+20),1,BF:XX=X:X=X+3:GOSUB2780:GOSUB2800:X=XX:YY=Y:Y=Y+3:GOSUB2780:Y=YY-3:GOSUB2800:Y=YY:RETURN
2570 GOSUB 2660:LINE(X+12,Y+12)-(X+14,Y+14),0,BF:RETURN
2580 GOSUB 2540:GOSUB2760:GOSUB2780:GOSUB2800:LINE(X+3,Y+6)-(X+8,Y+8),1,BF:LINE(X+3,Y+18)-(X+8,Y+20),1,BF:XX=X:X=X-3:GOSUB2790:GOSUB2810:X=XX:YY=Y:Y=Y+3:GOSUB2790:Y=YY-3:GOSUB2810:Y=YY:RETURN
2590 GOSUB 2730:GOSUB2740:GOSUB2750:GOSUB2760:LINE(X+12,Y+9)-(X+14,Y+14),1,BF:GOSUB2790:GOSUB2780:GOSUB2800:RETURN
2600 GOSUB 2830
2610 LINE(X+3,Y+6)-(X+8,Y+8),1,BF:LINE(X+3,Y+15)-(X+8,Y+17),1,BF:LINE(X,Y+9)-(X+2,Y+14),1,BF:LINE(X+9,Y+9)-(X+11,Y+14),1,BF:GOSUB2780:YY=Y:Y=Y-3:GOSUB2800:XX=X:X=X-3:GOSUB2810:Y=YY:GOSUB2790:X=XX:RETURN
2620 GOSUB 2530:GOSUB2730:GOSUB2770:GOSUB2820:GOSUB2790:RETURN
2630 GOSUB 2750:LINE(X+6,Y+6)-(X+8,Y+17),1,BF:LINE(X+3,Y+6)-(X+5,Y+8),1,BF:LINE(X+6,Y)-(X+8,Y+2),1,BF:RETURN
2640 GOSUB 2750:LINE(X+6,Y)-(X+8,Y+17),1,BF:LINE(X+3,Y)-(X+5,Y+2),1,BF:RETURN
2650 GOSUB 2680:GOSUB2770:GOSUB2820:RETURN
2660 GOSUB 2730:GOSUB2750:GOSUB2760:GOSUB2770:GOSUB2780:GOSUB2790:GOSUB2800:GOSUB2810:RETURN
2670 LINE(X,Y+6)-(X+2,Y+23),1,BF:XX=X:X=X+3:GOSUB2610:X=XX:RETURN
2680 LINE(X,Y+6)-(X+2,Y+20),1,BF:LINE(X+6,Y+6)-(X+11,Y+8),1,BF:GOSUB2790:XX=X:X=X+3:GOSUB2780:X=XX:YY=Y:Y=Y+3:GOSUB2780:Y=YY:RETURN
2690 LINE(X+3,Y)-(X+5,Y+17),1,BF:LINE(X,Y+6)-(X+11,Y+8),1,BF:LINE(X+6,Y+18)-(X+11,Y+20),1,BF:GOSUB2810:XX=X:X=X+3:GOSUB2800:X=XX:RETURN
2700 LINE(X,Y+6)-(X+2,Y+17),1,BF:LINE(X+9,Y+6)-(X+11,Y+17),1,BF:LINE(X+3,Y+18)-(X+8,Y+20),1,BF:GOSUB2800:XX=X:X=X+9:GOSUB2800:X=XX-3:GOSUB2810:X=XX:RETURN
2710 FOR I= X TO X+2:LINE(I,Y+6)-(I+6,Y+20):LINE(I+12,Y+6)-(I+6,Y+20):NEXT:RETURN
2720 LINE(X,Y+6)-(X+2,Y+14),1,BF:LINE(X+3,Y+15)-(X+8,Y+17),1,BF:GOSUB2830:YY=Y:Y=Y-3:GOSUB2800:XX=X:X=X-3:GOSUB2810:X=XX:Y=Y-3:GOSUB2810:Y=YY:RETURN
2730 LINE(X+3,Y+6)-(X+11,Y+8),1,BF:RETURN
2740 LINE(X+3,Y+12)-(X+11,Y+14),1,BF:RETURN
2750 LINE(X+3,Y+18)-(X+11,Y+20),1,BF:RETURN
2760 LINE(X,Y+9)-(X+2,Y+17),1,BF:RETURN
2770 LINE(X+12,Y+9)-(X+14,Y+17),1,BF:RETURN
2780 FOR I=X TO X+3:LINE(I,Y+9)-(I+3,Y+6):NEXT:RETURN
2790 FOR I=X+8 TO X+11:LINE(I,Y+6)-(I+3,Y+9):NEXT:RETURN
2800 FOR I=X TO X+3:LINE(I,Y+17)-(I+3,Y+20):NEXT:RETURN
2810 FOR I=X+8 TO X+11:LINE(I,Y+20)-(I+3,Y+17):NEXT:RETURN
2820 LINE(X+12,Y+18)-(X+14,Y+20),1,BF:RETURN
2830 LINE(X+12,Y+6)-(X+14,Y+20),1,BF:LINE(X+3,Y+21)-(X+11,Y+23),1,BF:YY=Y:Y=Y+3:GOSUB2810:Y=YY:RETURN
2840 LINE(X,Y)-(X+5,Y-5):LINE(X+1,Y)-(X+4,Y):PSET(X+5,Y-3):PSET(X+6,Y-5):LINE(X+7,Y-5)-(X+9,Y-3):LINE(X+9,Y-2)-(X+9,Y-1):LINE(X+8,Y)-(X+10,Y):LINE(X+5,Y+1)-(X+7,Y+3),1,BF:PRESET(X+5,Y+2):PRESET(X+7,Y+3):LINE(X+11,Y+1)-(X+19,Y+9):LINE(X+12,Y+1)-(X+18,Y+7)
2850 LINE(X+5,Y+4)-(X+8,Y+11):PSET(X+7,Y+7):PSET(X+8,Y+4):LINE(X+8,Y+5)-(X+13,Y+10):LINE(X+14,Y+10)-(X+17,Y+12):LINE(X+17,Y+8)-(X+18,Y+9)
2860 LINE(X+18,Y+10)-(X+19,Y+12),1,BF:LINE(X+9,Y+11)-(X+13,Y+15):LINE(X+10,Y+11)-(X+11,Y+12):LINE(X+11,Y+14)-(X+12,Y+15):PSET(X+19,Y+13)
2870 LINE(X+20,Y+13)-(X+23,Y+16):LINE(X+19,Y+14)-(X+21,Y+16):LINE(X+19,Y+16)-(X+21,Y+18):LINE(X+22,Y+17)-(X+24,Y+19),1,BF:PRESET(X+22,Y+19)
2880 LINE(X+24,Y+19)-(X+25,Y+20),1,BF:LINE(X+16,Y+15)-(X+18,Y+15):LINE(X+13,Y+15)-(X+15,Y+19),1,B:LINE(X+10,Y+19)-(X+12,Y+19):RETURN
2890 DATA 48,18,38,58,48,18,39,48,18,38,58,48,18,39,8
2900 DATA 16,37,16,37,16,26,36,46,37,16,37,16,37,16,26,36,46,57,7
1909 '
2910 ' Cleanup and exit
3000 CALL 23164,0,23366:CALL 27795:MENU: ' Restore function keys & exit
3098 '
3099 ' Play "Take Me Out To The Ballgame"
3100 RESTORE 3120
3110 READF,D:IF F=-1 THEN 3100 ELSE SOUND F,D
3120 K$=INKEY$:IF K$>"" THEN RETURN ELSE 3110
3130 DATA 4697,15,0,5,2348,10,2793,10,3134,10,3718,10,3134,30,4184,30
3140 DATA 4697,15,0,5,2348,10,2793,10,3134,10,3718,10,3134,60
3150 DATA 2793,10,2959,10,2793,10,3718,10,3516,10,3134,10,2793,20,3516,10
3160 DATA 4184,30,2793,20,2793,10,2793,10,2484,10,2348,10,2092,10,2484,10
3170 DATA 2793,10,3134,10,3718,10,4184,10
3180 DATA 4697,15,0,5,2348,10,2795,10,3134,10,3718,10,3134,30,4148,20,4148,10
3190 DATA 4697,20,4148,10,3718,10,3516,10,3134,10,2793,40,2793,10,2484,10
3200 DATA 2348,15,0,10,2348,15,0,10,2348,10,2484,10,2793,10,3134,10,3321,10,3134,10
3210 DATA 2793,30,2484,30,2348,60
3220 DATA-1,-1
3998 '
3999 ' Speak the time using DoubleTalk LT voice synthesizer
4000 OPEN "COM:88N1E" FOR OUTPUT AS #1:CM=VAL(LEFT$(DT$,2))
4010 HR$=RIGHT$(STR$(HR),LEN(STR$(HR))-1)
4020 MN$=RIGHT$(STR$(MN),LEN(STR$(MN))-1):IF LEN(MN$)=1 THEN MN$="0"+MN$
4030 IF PM THEN AP$="P M" ELSE AP$="AY M"
4040 A$="The current time is "+HR$+":"+MN$+" "+AP$+", on "
4050 FOR I=0 TO 6:IF DY$=LEFT$(DW$(I),3) THEN A$=A$+DW$(I):I=6
4060 NEXT
4070 A$=A$+", "+N$(CM)+" "+MID$(DT$,4,2):IF MID$(DT$,4,2)="11" OR MID$(DT$,4,2)="12" OR MID$(DT$,4,2)="13" THEN A$=A$+"th":GOTO 4090
4080 IF MID$(DT$,5,1)="1" THEN A$=A$+"st" ELSE IF MID$(DT$,5,1)="2" THEN A$=A$+"nd" ELSE IF MID$(DT$,5,1)="3" THEN A$=A$+"rd" ELSE A$=A$+"th"
4090 PRINT #1,A$:CLOSE:RETURN
4098 '
4099 ' Snooze! Add 9 minutes to the alarm
4100 SM=SM+9
4110 IF SM>59 THEN SM=SM-60:SH=SH+1:IF SH=12 THEN IF SA$="AM" THEN SA$="PM" ELSE SA$="AM"
4120 IF SH>=12 THEN SH=SH-12:IF SH=0 THEN SH=12
4130 ST$=RIGHT$(STR$(SH),LEN(STR$(SH))-1)+":":IF SM<10 THEN ST$=ST$+"0"
4140 ST$=ST$+RIGHT$(STR$(SM),LEN(STR$(SM))-1)
4150 IR=1:GOTO 240
