0 GOTO 10 1 CSAVE"alarm" 2 END 3 CLOADPRINT"alarm" 4 END 5 REM ALARM 02.00.00 by David W. Parvin 6 REM CompuServe Number 76576,3337 10 CLEAR 1000 11 QQ=10:DIM A$(QQ),B$(QQ),C$(QQ),D$(QQ),E$(QQ),A(12),Q$(8) 12 CLS:SQ$="11111":SZ$=" 3 ":SZ%=1:Q1=8 15 Q1$=CHR$(27)+"p":Q2$=CHR$(27)+"q" 20 AD$="GMTADTEDTCDTMDTPDT" 21 AS$="GMTASTESTCSTMSTPST" 22 I=1:ON ERROR GOTO 3000:OPEN"ALARM.DO" FOR INPUT AS 1:ON ERROR GOTO 0:I=0 30 IF EOF(1) THEN 40 31 LINE INPUT#1,A$(I):LINE INPUT#1,B$(I) 33 IF INSTR(A$(I),"/")>0 THEN LINE INPUT#1,C$(I) ELSE C$(I)=B$(I):B$(I)=A$(I):A$(I)="" 34 A$=B$(I):B$=A$(I):GOSUB 120:E$(I)=A$:IF A$(I)="" THEN D$(I)="" ELSE D$(I)=B$ 35 I=I+1:IF I<=QQ THEN 30 40 QS=I-1:GOSUB 500:FOR I=1 TO 12 41 READ A(I):NEXT I:FOR I=1 TO 8 42 READ Q$(I):NEXT I 43 ON KEY GOSUB520,540,545,530,546,1050,560,1000:KEY ON 45 A=VAL(RIGHT$(DATE$,2)) 46 IF A/4=INT(A/4) THEN A(2)=29 ELSE A(2)=28 50 GOSUB 800:GOSUB 100:A$=INKEY$:IF A$<>"" THEN IF ASC(A$)=0 THEN GOSUB 546 51 IF LEFT$(SQ$,1)="0" THEN 70 60 A$=RIGHT$(DF$,5) 61 IF A$="00:00" OR A$="00:01" THEN DD=VAL(DF$):A=DD:GOSUB 640:DD=A:DL=40:GOSUB 210 63 IF A$="30:00" OR A$="30:01" THEN DD=2:DL=20:GOSUB 210 70 RL=J:IF J=-1 THEN 45 71 IF MID$(SQ$,3,1)="0" THEN 45 80 PRINT@120,C$(RL);:GOSUB 200 81 GOSUB 800:GOSUB 100 82 IF J>-1 THEN RL=J:PRINT@120,STRING$(255,32); 90 A$=INKEY$:IF A$="" THEN 80 ELSE RUN 100 J=-1:FOR I=0 TO QS:IF (A$(I)=DE$ AND B$(I)=DF$) OR (D$(I)=DE$ AND E$(I)=DF$)THEN J=I:I=QS+1 105 IF A$(I)="" AND B$(I)=DF$ OR E$(I)=DF$ THEN J=I:I=QS+1 110 NEXT I:RETURN 120 A1=VAL(A$) 121 IF INSTR("Pp",RIGHT$(A$,1))=0 THEN 124 123 A1=A1+12:A=A1:GOSUB 610:A$=G1$+MID$(A$,3,6):B$(I)=A$ 124 A2=VAL(MID$(A$,4,2)):A3=VAL(RIGHT$(A$,2))+1:A2=A2-(A3>60) 130 A1=A1-(A2>59):A3=A3+60*(A3>59):A2=A2+60*(A2>59):B2=VAL(MID$(B$,4,2))-(A1>23):A1=A1+24*(A1>23) 140 A=A1:GOSUB 610:A$=G1$+":":A=A2:GOSUB 610:A$=A$+G1$+":":A=A3:GOSUB 610:A$=A$+G1$ 150 B1=VAL(B$):B3=VAL(RIGHT$(B$,2)):B=B1:B1=B1-(B2>A(B1)):B3=B3-(B1>12) 160 B2=B2+A(B)*(B1>12):B1=B1+12*(B1>12) 170 A=B1:GOSUB 610:B$=G1$+"/":A=B2:GOSUB 610:B$=B$+G1$+"/":A=B3:GOSUB 610:B$=B$+G1$:RETURN 200 DL=20:DD=3 210 FOR D1=1 TO DD:BEEP: 211 FOR D2=1 TO DL:NEXT D2,D1 220 RETURN 500 IF RIGHT$(SQ$,1)="0" THEN 510 501 GT=1:GOSUB 600:GT=0:PRINT@240,MID$("Off On",3*VAL(LEFT$(SQ$,1))+1,3);" "; 502 PRINTMID$("Off On",3*VAL(MID$(SQ$,3,1))+1,3);" ";MID$("2412",2*VAL(MID$(SQ$,4,1))+1,2);TAB(30);GM$; 505 PRINT@280,"Beep Alrm Hour";TAB(15);MID$("SaveStnd",4*VAL(MID$(SQ$,2,1))+1,4);" Labl Set";TAB(30);"Zone Menu";:RETURN 510 PRINT@240,TAB(33);" ";:PRINT@280,TAB(19);" Labl";TAB(30);" ";:RETURN 520 B=1:GOTO 550 530 B=2:GOTO 550 540 B=3:GOTO 550 545 B=4:GOTO 550 546 SCREEN 0,0:B=5 550 D$=RIGHT$(STR$(NOT(VAL(MID$(SQ$,B,1)))-2),1):A=VARPTR(SQ$) 551 C=PEEK(A+1)+PEEK(A+2)*256 552 POKEC-1+B,ASC(D$):GOTO 500 560 D=VAL(SZ$)+1:D$=STR$(D+5*(D=>7)) 561 A=VARPTR(SZ$):C=PEEK(A+1)+PEEK(A+2)*256 562 FOR B=1 TO LEN(D$):D=ASC(MID$(D$,B,1)):POKEC-1+B,D:NEXT B:GOTO 500 600 GM$=MID$(AD$+AS$,(VAL(SZ$)+1*(GT=0)-5*(VAL(SZ$)>5)*(GT=1))*3+VAL(MID$(SQ$,2,1))*LEN(AD$)+1,3):RETURN 610 G1$=RIGHT$("00"+RIGHT$(STR$(A),LEN(STR$(A))+(A>=0)),2):RETURN 630 G2$=MID$("AmPm",2*INT(A/12)+1,2):RETURN 640 GOSUB 630:IF MID$(SQ$,4,1)="0" THEN G2$=" ":G1=A:GOTO 642 641 G1=A+12*(A>12)-12*(A<1) 642 A=G1:GOSUB 610:G3$=G1$:RETURN 650 G4$=MID$("JanFebMarAprMayJunJulAugSepOctNovDec",3*(A-1)+1,3):RETURN 660 G5$=MID$("MonTueWedThuFriSatSun",(A-1)*3+1,3):RETURN 670 G2=INT(INSTR("MonTueWedThuFriSatSun",A$)/3)+1:RETURN 700 PRINT@PP," ";GM$;" ";G5$;" ";G4$;" ";A4$;", ";A5$;" ";A3$;RIGHT$(A1$,6);" ";G2$;:RETURN 800 KEY STOP:GM$="GMT":A1$=TIME$:A2$=DATE$:PP=40:G5$=DAY$ 810 A=VAL(A1$):GOSUB 640:A3$=G3$:A=VAL(A2$):GOSUB 650 811 A4$=RIGHT$(STR$(VAL(RIGHT$(A2$,5))),2) 812 A5$=RIGHT$(STR$(1900+VAL(RIGHT$(A2$,2))),4) 820 GOSUB 700:GOSUB 600:A$=DAY$:GOSUB 670 830 TM=VAL(A1$)-SZ%-VAL(SZ$)-VAL(MID$(SQ$,2,1)) 831 A=TM+24*(TM>23)-24*(TM<0):GOSUB 640:A3$=G3$ 840 DA=VAL(RIGHT$(A2$,5))-(TM>23)+(TM<0):G2=G2-(TM>23)+(TM<0) 841 G2=G2+7*(G2>7)-7*(G2<1):A=G2:GOSUB 660 850 MN=VAL(A2$):MN=MN-(DA>A(MN))+(DA<1):YR=VAL(RIGHT$(A2$,2))-(MN>12)+(MN<1) 851 MN=MN+12*(MN>12)-12*(MN<0):DA=DA-A(MN)*(DA<1) 860 A=MN:GOSUB 650:A4$=RIGHT$(STR$(DA),2) 861 A5$=RIGHT$(STR$(1900+YR),4):PP=80:GOSUB 700 870 A=MN:GOSUB 610:DE$=G1$+"/":A=DA:GOSUB 610 871 DE$=DE$+G1$+"/":A=YR:GOSUB 610:DE$=DE$+G1$ 880 A=TM+24*(TM>23)-24*(TM<0):GOSUB 610:DF$=G1$+RIGHT$(A1$,6) 999 KEY ON:RETURN 1000 MENU 1010 DATA 31,28,31,30,31,30,31,31,30,31,30,31,"Day ","Mnth","Date","Year","Hour","Mint","Scnd","Done" 1020 PP=280:IF Q1>1 THEN FOR I=1 TO Q1-1:PRINT@PP+(I-1)*5,Q$(I);:NEXT I 1030 PRINT@PP+(Q1-1)*5,Q1$Q$(Q1)Q2$;:IF Q1<8 THEN FOR I=Q1+1 TO 8:PRINT@PP+(I-1)*5,Q$(I);:NEXT I 1040 RETURN 1050 GOSUB 510:GOSUB 1020:ON KEY GOSUB 2000,2010,2020,2030,2040,2050,2060,2070 1060 Q2=0:F$=INKEY$:IF F$="" THEN GOSUB 800:GOTO 1060 1070 IF F$=CHR$(30) THEN Q2=1 1080 IF F$=CHR$(31) THEN Q2=-1 1090 IF F$=CHR$(28) THEN Q1=Q1+1 1100 IF F$=CHR$(29) THEN Q1=Q1-1 1110 Q1=Q1+8*(Q1>8)-8*(Q1<1) 1115 GOSUB 1020 1120 ON Q1 GOSUB 1200,1300,1400,1500,1600,1700,1800,1900:GOTO 1060 1200 A$=DAY$:GOSUB 670:A=G2+Q2:A=A-7*(A<1)+7*(A>7):GOSUB 660:DAY$=G5$:RETURN 1300 A=VAL(DATE$)+Q2:A=A-12*(A<1)+12*(A>12):GOSUB 610:DATE$=G1$+RIGHT$(DATE$,6):RETURN 1400 A=VAL(MID$(DATE$,4))+Q2:B=VAL(DATE$):A=A-A(B)*(A<1)+A(B)*(A>A(B)) 1410 GOSUB 610:DATE$=LEFT$(DATE$,3)+G1$+RIGHT$(DATE$,3):RETURN 1500 A=VAL(RIGHT$(DATE$,2))+Q2:A=A-100*(A<0)+100*(A>99):GOSUB 610 1510 IF A/4=INT(A/4) THEN A(2)=29 ELSE A(2)=28 1520 DATE$=LEFT$(DATE$,6)+G1$:RETURN 1600 A=VAL(TIME$)+Q2:A=A-24*(A<0)+24*(A>23):GOSUB 610:TIME$=G1$+RIGHT$(TIME$,6):RETURN 1700 A=VAL(MID$(TIME$,4))+Q2:A=A-60*(A<0)+60*(A>59):GOSUB 610 1710 TIME$=LEFT$(TIME$,3)+G1$+RIGHT$(TIME$,3):RETURN 1800 IF Q2=0 THEN RETURN ELSE TIME$=LEFT$(TIME$,6)+"00":RETURN 1900 RUN 2000 Q1=1:GOTO 1020 2010 Q1=2:GOTO 1020 2020 Q1=3:GOTO 1020 2030 Q1=4:GOTO 1020 2040 Q1=5:GOTO 1020 2050 Q1=6:GOTO 1020 2060 Q1=7:GOTO 1020 2070 Q1=8:GOTO 1020 3000 RESUME 3010 3010 ON ERROR GOTO 0:GOTO 40