1 MAXFILES=1:CLEAR 8000:E$=LEFT$(DATE$,5):H$=CHR$(27)+"p":I$=CHR$(27)+"q" 10 GOSUB 10100 12 F$="TODO.DO" 15 DIM B$(100):DIM SS%(12):DIM CS%(8) 17 GOSUB 2000 ' load data file 23 GOSUB 100 ' SET DATE FOR CALENDAR 25 GOSUB 150 ' DISPLAY CALENDAR 31 GOSUB 1000 ' DISPLAY APPT/TODO'S 32 GOSUB 300 35 GOSUB 500 ' GET CALENDAR INPUT 75 END 100 W%=VAL(DATE$):O%=VAL(MID$(DATE$,4,2)):V%=VAL(MID$(DATE$,7,2)):RETURN 120 DATAJan,31,Feb,28,Mar,31,Apr,30,May,31,Jun,30,Jul,31,Aug,31,Sep,30,Oct,31,Nov,30,Dec,31,EOF,-1 150 X%=1:IF V% < 50 THEN V% = V% +2000 ELSE IF V% < 100 THEN V% = V% +1900 155 LA%=1=0 160 GOSUB 400:RESTORE 120:FOR P% = 1 TO W%:READ A$,Q%:NEXT P%:IF W% = 2 THEN Q% = Q% - (0 = V% MOD 4) + (0 = V% MOD 100) - (0 = V% MOD 400) 170 CLS:LINE (5,0) - (118,7),1,BF:PRINT H$;A$;STR$(V%);I$;:PRINT@40,"Su Mo Tu We Th Fr Sa":CO% = N - 7 * INT(N / 7):PRINT SPACE$(3 * CO%); 180 RW% = 0:FOR P% = 1 TO Q%:IF P% = O% THEN PC% = CO%:PR% = RW% 190 PRINT USING "##";P%;:PRINT " "; 200 IF P% = Q% THEN RB% = RW% 210 CO% = CO% + 1:IF CO% > 6 AND P% <> Q% THEN PRINT:CO% = 0:RW% = RW% + 1 220 NEXT P% 225 P%=O% 228 GOSUB 300 230 RETURN 300 M$ = LEFT$(TIME$,5):S% = VAL(TIME$):PRINT @12,H$;:IF S% > 12 THEN PRINT RIGHT$(STR$(S% - 12),2);RIGHT$(M$,3);ELSE IF S% < 10 THEN PRINT RIGHT$(STR$(S%),2);RIGHT$(M$,3);ELSE PRINT M$; 310 PRINT " ";:IF S%>11 THEN PRINT "PM";I$ ELSE PRINT "AM";I$ 320 I%=VAL(RIGHT$(M$,2))+1:J%=VAL(M$):IF I%=60 THEN I%=0:J%=J%+1:IF J%=24 THEN J%=0 330 IF J%<10 THEN YN$="0"+RIGHT$(STR$(J%),1) ELSE YN$=RIGHT$(STR$(J%),2) 340 YN$=YN$+":" 350 IF I%<10 THEN YN$=YN$+"0"+RIGHT$(STR$(I%),1) ELSE YN$=YN$+RIGHT$(STR$(I%),2) 360 YN$=YN$+":00" 365 TIME$ ON 370 ON TIME$=YN$ GOSUB 300 380 RETURN 400 Y = -INT((14 - W%) / 12):Z = X% - 32074 + INT(1461 * (V% + 4800 + Y) / 4):Z = Z + INT(367 * (W% - 2 - 12 * Y) / 12):N = Z - INT(3 * INT((V% + 4900 + Y) / 100) / 4):RETURN 500 GOSUB 820 505 CALL CZ!:A0%=ASC(A0$):IF A0%=0 THEN 505 507 IF A0%=202 THEN TIME$ OFF:GOSUB 7000:GOTO 505 ' F3 Add Entry 508 IF A0%=201 THEN GOSUB 100:GOSUB 150:GOSUB 820:GOTO 695 'F2 Today 510 IF A0%=205 THEN TIME$ OFF:GOSUB 8000:GOTO 505 'F6 File change 511 IF A0%=207 THEN MENU 'F8 Exit 512 IF A0%=13 THEN POWER OFF,RESUME:GOSUB 300:IF VAL(MID$(DATE$,4,2))<> O% THEN GOSUB 100:GOSUB 150:GOSUB 820:GOTO 695 ELSE GOTO 505 517 IF A0%=200 THEN TIME$ OFF:GOSUB 9000:GOSUB 150:GOSUB 6000:GOSUB 820:LS%=1=1:GOTO 505 ' F1 Help 518 IF A0%=9 THEN GOSUB 850:GOTO 505 ' Tab 522 IF A0%=208 THEN GOSUB 20000:GOTO 505 'Label 523 IF NOT LS% THEN 600 524 IF A0%=29 THEN GOSUB 700:GOTO 691 'Left Arrow 525 IF A0%=30 THEN GOSUB 710:GOTO 691 'Up Arrow 530 IF A0%=31 THEN GOSUB 720:GOTO 691 'Down Arrow 540 IF A0%=28 THEN GOSUB 730:GOTO 691 'Right Arrow 560 IF A0%=20 THEN GOSUB 750:GOTO 695 'Shift Up Arrow 570 IF A0%=2 THEN GOSUB 760:GOTO 695 'Shift Down Arrow 599 GOTO 505 600 IF A0%=29 THEN GOSUB 950:GOTO 505 605 IF A0%=30 THEN GOSUB 960:GOTO 505 610 IF A0%=31 THEN GOSUB 970:GOTO 505 620 IF A0%=28 THEN GOSUB 980:GOTO 505 630 IF A0%=203 THEN TIME$ OFF:GOSUB 7500:GOTO 505 'F4 Delete Entry 690 GOTO 505 691 GOSUB 20100:IF P1%=P% THEN 505 695 GOSUB1000:GOTO 505 700 IF PC% > 0 AND P% > 1 THEN GOSUB 800:PC% = PC% -1:P1% = P%:P% = P% -1:GOSUB 820 ELSE IF P% > 1 THEN GOSUB 800:PC% = 6:PR% = PR% -1:P1% = P%:P% = P% -1:GOSUB 820 ELSE GOSUB 750:GOSUB 1000:GOSUB 300 705 RETURN 710 IF PR% > 0 AND P%-7 > 0 THEN GOSUB 800:PR% = PR% -1:P1% = P%:P% = P% -7:GOSUB 820 ELSE GOSUB 750:GOSUB 1000:GOSUB 300 715 RETURN 720 IF PR% < 5 AND P%+7 <= Q% THEN GOSUB 800:PR% = PR% +1:P1% = P%:P% = P% +7:GOSUB 820 ELSE GOSUB 760:GOSUB 1000:GOSUB 300 725 RETURN 730 IF PC% < 6 AND P% < Q% THEN GOSUB 800:PC% = PC% +1:P1% = P%:P% = P%+1:GOSUB 820 ELSE IF P% < Q% THEN GOSUB 800:PR% = PR% +1:PC% = 0:P1% = P%:P% = P% +1:GOSUB 820 ELSE GOSUB 760:GOSUB 1000:GOSUB 300 735 RETURN 750 W% = W% -1: X% = 1:IF W% = 0 THEN W% = 12: V% = V% -1:O% = 1 755 GOSUB 150:GOSUB 820:RETURN 760 W% = W% +1: X% = 1:IF W% = 13 THEN W% = 1:V% = V% +1:O% = 1 765 GOSUB 150:GOSUB 820:RETURN 800 PRINT @80 + PC% * 3 + PR% * 40,I$;:PRINT USING "##";P%;:RETURN 820 PRINT @80 + PC% * 3 + PR% * 40,H$;:PRINT USING "##";P%;:PRINT I$;:RETURN 850 IF LS%=-1 THEN LS%=0:GOSUB 900:GOTO 505 ' Left side now inactive 851 IF LS%=0 THEN LS%=-1:GOSUB 920:GOTO 505 900 PRINT @20+(CP%-1)*40,CHR$(157);:RETURN 920 PRINT @20+(CP%-1)*40," ";:RETURN 950 GOSUB 6000:GOSUB 900:RETURN 960 IF CP% <> 1 THEN GOSUB 920:CP%=CP%-1:GOSUB 900 ELSE IF CD% <> 1 THEN CD%=CD%-1:GOSUB 920:GOSUB 5000:GOSUB 6000:CP%=1:GOSUB 900 962 RETURN 970 IF CP%=8 AND SS%(CD%+1)<>0 THEN CD%=CD%+1:GOSUB 920:GOSUB 5000:GOSUB 6000:CP%=1:GOSUB 900 : GOTO 972 971 IF CP%<8 THEN IF B$(CS%(CP%+1)) <> "" THEN GOSUB 920:CP%=CP%+1:GOSUB 900 972 RETURN 980 CALL 16959:A%=INSTR(B$(CS%(CP%)),"~")+1:L%=LEN(B$(CS%(CP%))):IF L%-A%+5< 20 THEN 985 981 FOR I%= 1% TO L%-18:X$="":X$=INKEY$:IF X$="" THEN 983 982 IF X$=" " THEN 986 ELSE IF ASC(X$)=27 THEN X$="":GOSUB 950:RETURN 983 PRINT @21+(CP%-1)*40,MID$(B$(CS%(CP%)),I%,19);:FOR X%=1 TO 50:NEXT X%:NEXT I% 985 CALL 16964:RETURN 986 X$="":X$=INKEY$:IF X$="" THEN 986 987 IF X$=" " THEN 983 ELSE IF ASC(X$)=27 THEN X$="":GOSUB 950:RETURN 988 GOTO 986 1000 GOSUB 4000 1005 CD%=1 1010 GOSUB 5000 1030 GOSUB 6000 1035 CP%=1:LS%=-1'ls%=true 1040 RETURN 2000 FOR B%=1 TO 100:B$(B%)="":NEXT B% 2001 B%=0 2002 IF F$="TODO.DO" THEN YN$=F$:F$="APPT.DO":GOSUB 2018:F$=YN$ 2003 GOSUB 2018:RETURN 2018 OPEN F$ FOR APPEND AS 1:CLOSE 1 2019 OPEN F$ FOR INPUT AS 1 2020 B%=B%+1:IF NOT EOF(1) THEN LINE INPUT #1,B$(B%):GOTO 2020 ELSE B%=B%-1:GOTO 2040 2040 CLOSE #1 2050 RETURN 2500 IF F$="TODO.DO" THEN YN$=F$:F$="APPT.DO":I%=12:GOSUB 2505:F$=YN$:I%=0:GOSUB 2505:RETURN ELSE IF F$="APPT.DO" THEN I%=12:GOSUB 2505 ELSE I%=0:GOSUB 2505:RETURN 2505 OPEN F$ FOR OUTPUT AS 1 2510 FOR X%= 1 TO B% 2520 IF INSTR(B$(X%),"~")=I% THEN PRINT #1,B$(X%) 2530 NEXT X% 2540 CLOSE #1 2550 RETURN 3000 YN$=F$:F$="APPT.DO":GOSUB 2000:GOSUB 3040:GOSUB 2500:F$=YN$:GOSUB 2000:RETURN 3040 F=B% 3041 F=INT(F/2):IF F=0 THEN RETURN ELSE G=1:H=B%-F 3042 J=G 3043 K=J+F:IF B$(J)H THEN 3041 ELSE 3042 4000 FOR X%=1 TO 12:SS%(X%)=0:NEXT X% 4001 X%=P%:GOSUB 400 4003 CD%=1:X%=0 4005 FOR I%=1 TO B% 4010 A%=INSTR(B$(I%),"~") 4020 IF A%=0 OR VAL(LEFT$(B$(I%),7))=N THEN X%=X%+1 ELSE 4045 4040 IF (X%-1)/8 = INT((X%-1)/8) THEN SS%(CD%)=I%:CD%=CD%+1 4045 NEXT I% 4050 RETURN 5000 FOR I%=1 TO 8:CS%(I%)=0:NEXT I% 5002 X%=P%:GOSUB 400 5005 I%=SS%(CD%):X%=1 5010 A%=INSTR(B$(I%),"~") 5020 IF A%=0 THEN CS%(X%)=I%:X%=X%+1:GOTO 5040 5030 IF VAL(LEFT$(B$(I%),7))= N THEN CS%(X%)=I%:X%=X%+1 5040 IF X%=9 THEN RETURN 5050 I%=I%+1:GOTO 5010 6000 CALL 16959 ' LOCK DISPLAY (NO SCROLLING) 6001 FOR X%=1 TO 8:PRINT @21+(X%-1)*40," ";:NEXT X% 6002 X%=21 6003 LA%=1=0 6005 FOR I%=1 TO 8 6010 A%=INSTR(B$(CS%(I%)),"~") 6020 IF A%=0 THEN PRINT @X%,LEFT$(B$(CS%(I%)),19); 6021 IF A%=12 THEN PRINT @X%,MID$(B$(CS%(I%)),8,4);" ";MID$(B$(CS%(I%)),13,14); 6022 IF A%=8 THEN PRINT @X%,MID$(B$(CS%(I%)),9,19); 6030 X%=X%+40 6040 NEXT I% 6045 CALL 16964 'UNLOCK DISPLAY 6050 RETURN 7000 CLS:PRINT "Press Enter to return.":YN$="":INPUT "Dated? (Y/N) ";YN$:IF YN$="" THEN GOSUB 150:GOSUB 1000:GOSUB 820:RETURN ELSE IF INSTR("YyNn",YN$) = 0 THEN 7000 7005 IF INSTR("Yy",YN$) > 0 THEN CLS:PRINT "DATE: ";A$;P%;V%:INPUT "Time: (Enter for none) ";T$:IF T$="" THEN T$="****" 7010 PRINT "Enter item info:":LINE INPUT L$ 7012 IF INSTR(L$,"~") > 0 THEN BEEP:CLS:PRINT "No tilde's allowed!":GOTO 7010 7020 IF INSTR("Yy",YN$)>0 THEN X%=P%:GOSUB 400:L$=RIGHT$(STR$(N),7)+T$+"~"+L$ 7040 IF INSTR("Yy",YN$)>0 THEN OPEN "appt.do" FOR APPEND AS 1 ELSE OPEN F$ FOR APPEND AS 1 7050 PRINT #1,L$ 7060 CLOSE #1 7070 GOSUB 2000:GOSUB 150:GOSUB 1000:GOSUB 820:GOSUB 920:RETURN 7500 CLS:PRINT @130,"DELETING....":B$(CS%(CP%))=B$(B%):B$(B%)="":B%=B%-1:GOSUB 2500:GOSUB 2000:GOSUB 150:GOSUB 1000:GOSUB 820:GOSUB 920:RETURN 8000 CLS:FILES:INPUT "Swap to File:";F$ 8002 FOR I%=1 TO LEN(F$):X%=ASC(MID$(F$,I%,1)):IF X%>90 THEN X%=X%-32:F$=LEFT$(F$,I%-1)+CHR$(X%)+RIGHT$(F$,LEN(F$)-I%):NEXT I% ELSE NEXT I% 8005 OPEN F$ FOR APPEND AS 1:CLOSE 1 8010 GOSUB 2000:GOSUB 150:GOSUB 1000:GOSUB 820:RETURN 9000 CLS 9010 PRINT " ";CHR$(152);" CURSOR" 9020 PRINT CHR$(155);" ";CHR$(154);" MOVEMENT" 9030 PRINT " ";CHR$(153);" KEYS F2=GOTO TODAY" 9040 PRINT "TAB TO TOGGLE CALENDAR/LIST" 9050 PRINT "F3=ADD ENTRY F4=DELETE ENTRY" 9060 PRINT "ENTER=POWER DOWN F6=LOAD FILE F8=EXIT" 9070 PRINT:PRINT "PRESS ANY KEY TO RETURN"; 9080 X$="":X$=INKEY$:IF X$="" THEN 9080 ELSE X$="":RETURN 10100 CA$ = STRING$(33,0) 10110 A0$ = " " 10120 VC! = VARPTR(CA$) 10130 VA! = VARPTR(A0$) 10140 POKE VA! +1, PEEK(VC! +1) 10150 POKE VA! +2, PEEK(VC! +2) 10160 CZ! = PEEK(VC! +1)+256 * PEEK(VC! +2) 10200 RESTORE 10600 10300 FOR I = 1 TO 23 10310 READ A 10320 POKE CZ! +I, A 10330 NEXT I 10400 POKE CZ! + 4, PEEK(VC! +1) 10410 POKE CZ! + 5, PEEK(VC! +2) 10420 POKE CZ! +11, PEEK(VC! +1)+15 10430 POKE CZ! +12, PEEK(VC! +2) 10440 POKE CZ! +16, PEEK(VC! +1) 10450 POKE CZ! +17, PEEK(VC! +2) 10460 POKE CZ! +21, PEEK(VC! +1)+6 10470 POKE CZ! +22, PEEK(VC! +2) 10480 CZ! = CZ! +1 10500 RETURN 10600 DATA 62,0,50,0,0,205,66,114,200,210,0,0,198,200,50,0 10610 DATA 0,254,3,202,0,0,201 20000 CALL 16959 20001 IF LA% THEN 20020 20005 LA%=1=1:L8$="":FOR I%=1 TO 40:L8$=L8$+CHR$(PEEK(65303+I%)):NEXT I% 20010 IF NOT LS% THEN PRINT @280,"Help TodayAdd Delete File Exit " ELSE PRINT @280,"Help TodayAdd File Exit " 20015 CALL 16964:RETURN 20020 LA%=1=0:PRINT @280,L8$:CALL 16964:RETURN 20100 X%=P%:GOSUB 400:J1=N 20110 X%=P1%:GOSUB 400:J2=N 20120 OPEN "APPT.DO" FOR INPUT AS 1 20130 IF NOT EOF(1) THEN LINE INPUT #1,L$ ELSE P1%=P%:GOTO 20170 20140 N=VAL(LEFT$(L$,7)) 20150 IF N=J1 OR N=J2 THEN 20170 20160 GOTO 20130 20170 CLOSE #1 20180 RETURN