REM Adapated from September 1981 KILOBAUD/Microcomputing Magazine REM by Don Weir, 12/Jan/82 REM REM Use CBASIC compiler CL$=CHR$(12):PRINT CL$ CODE$="NSCQ" BLANK$=" " DASH$=" " REC.SIZE%=110 DIM DAY$(7),MONTH$(12),FIRST%(12),DAYS%(12) DIM LINE.1$(8),LINE.2$(8),LINE.3$(8),WK.DY$(8) FIRST%(1)=1:FIRST%(2)=32:FIRST%(3)=60:FIRST%(4)=91 FIRST%(5)=121:FIRST%(6)=152:FIRST%(7)=182:FIRST%(8)=213 FIRST%(9)=244:FIRST%(10)=274:FIRST%(11)=305:FIRST%(12)=335 DAYS%(1)=31:DAYS%(2)=28:DAYS%(3)=31:DAYS%(4)=30 DAYS%(5)=31:DAYS%(6)=30:DAYS%(7)=31:DAYS%(8)=31 DAYS%(9)=30:DAYS%(10)=31:DAYS%(11)=30:DAYS%(12)=31 DAY$(1)="Mon":DAY$(2)="Tue":DAY$(3)="Wed":DAY$(4)="Thu" DAY$(5)="Fri":DAY$(6)="Sat":DAY$(7)="Sun" MONTH$(1)="Jan":MONTH$(2)="Feb":MONTH$(3)="Mar" MONTH$(4)="Apl":MONTH$(5)="May":MONTH$(6)="Jun" MONTH$(7)="Jul":MONTH$(8)="Aug":MONTH$(9)="Sep" MONTH$(10)="Oct":MONTH$(11)="NOv":MONTH$(12)="Dec" 5 PRINT CL$:PRINT TAB(52);"Adapted from" PRINT TAB(52);"KILOBAUD" PRINT TAB(52);"Sept. 1981." FOR I%=1 TO 5:PRINT:NEXT I% INPUT "Year (i.e., 1981)";YEAR$ PRINT "Is ";YEAR$;" correct " INPUT LINE Q$ IF LEFT$(Q$,1)="N" THEN 5 YEAR=VAL(YEAR$) A=YEAR/4:B=INT(A):C=A-B IF C<>0 THEN 10 DAYS%(2)=29 FOR X%=3 TO 12 FIRST%(X%)=FIRST%(X%)+1 NEXT X% 10 GOSUB 20 ON T% GOSUB 100,200,300,400 GOTO 10 20 PRINT CL$ PRINT IF ERSW1% THEN ERSW1%=0:PRINT TAB(10);"Year not found.":PRINT IF ERSW2% THEN ERSW2%=0:PRINT TAB(10);YEAR$;" already exists";:PRINT PRINT TAB(24);"CALENDAR" PRINT TAB(24);"--------":PRINT:PRINT PRINT PRINT TAB(10);"N = Set up New Year":PRINT PRINT TAB(10);"Y = Change Year":PRINT PRINT TAB(10);"S = See":PRINT PRINT TAB(10);"C = Change Data":PRINT PRINT TAB(10);"Q = Quit":PRINT INPUT "Task ";T$ T$=LEFT$(T$,1) IF T$="Y" THEN 5 FOR T%=1 TO 5 IF T$=MID$(CODE$,T%,1) THEN RETURN NEXT T% GOTO 10 100 PRINT CL$ PRINT:PRINT YEAR$:PRINT INPUT "Jan 1 day number (Monday=1) ";LINE DAY.NUM$ IF DAY.NUM$="" THEN RETURN DAY.NUM%=VAL(DAY.NUM$) IF DAY.NUM%<1 OR DAY.NUM%>7 THEN 100 PRINT:PRINT "Writing..."; READ%=0 GOSUB 1000 IF OLD.FILE% THEN ERSW2%=1:GOTO 110 LINE.1$=DASH$:LINE.2$=DASH$:LINE.3$=DASH$ FOR X%=1 TO FIRST%(12)+DAYS%(12) REC.NUM%=X% DAY$=DAY$(DAY.NUM%) GOSUB 1200 DAY.NUM%=DAY.NUM%+1 IF DAY.NUM%>7 THEN DAY.NUM%=1 PRINT "."; NEXT X% 110 PRINT "":CLOSE 1:RETURN 200 PRINT CL$:PRINT:PRINT INPUT "Starting date (mm,dd) ";NUM%,DATE% IF NUM%<1 OR NUM%>12 THEN 200 IF DATE%<1 OR DATE%>DAYS%(NUM%) THEN 200 START%=(FIRST%(NUM%)-1)+DATE% READ%=1:NEW%=0 GOSUB 1000 IF OLD.FILE%=0 THEN ERSW1%=1:RETURN 205 FOR X%=1 TO 7 REC.NUM%=START% GOSUB 1100 DATE$=STR$(DATE%) IF NEW%=0 THEN WK.DY$(X%)=DAY$+" "+DATE$ IF NEW% THEN NEW%=0:WK.DY$(X%)=DAY$+" "+DATE$+" "+"*" LINE.1$(X%)=LINE.1$ LINE.2$(X%)=LINE.2$ LINE.3$(X%)=LINE.3$ DATE%=DATE%+1 START%=START%+1 IF DATE%>DAYS%(NUM%) THEN DATE%=1:NUM%=NUM%+1:NEW%=1 IF START%>FIRST%(12)+30 THEN START%=1:NUM%=1 NEXT X% PRINT CL$ 210 IF TASK$="P" THEN PRINT:PRINT:PRINT:PRINT TAB(5);MONTH$(NUM%);" ";YEAR$:PRINT:GOTO 215 PRINT TAB(25);MONTH$(NUM%);" ";YEAR$:PRINT 215 FOR X%=1 TO 7 STEP 2 PRINT WK.DY$(X%);TAB(40);WK.DY$(X%+1) PRINT LINE.1$(X%);TAB(40);LINE.1$(X%+1) PRINT LINE.2$(X%);TAB(40);LINE.2$(X%+1) PRINT LINE.3$(X%);TAB(40);LINE.3$(X%+1) REM PRINT NEXT X% IF TASK$="P" THEN CONSOLE PRINT TAB(5);"P = Print Return-next Q = Quit" PRINT TAB(5);"Task "; INPUT LINE TASK$:TASK$=LEFT$(TASK$,1) IF TASK$="Q" THEN 220 IF TASK$="P" THEN LPRINTER WIDTH 80:GOTO 210 GOTO 205 220 CLOSE 1:READ%=0 RETURN 300 READ%=1 GOSUB 1000 IF OLD.FILE%=0 THEN ERSW1%=0:RETURN 310 PRINT CL$ INPUT "Date (mm,dd) ";NUM%,DATE% IF NUM%<1 OR NUM%>12 THEN 310 IF DATE%<1 OR DATE%>DAYS%(NUM%) THEN 310 320 REC.NUM%=(FIRST%(NUM%)-1)+DATE% GOSUB 1100 330 PRINT CL$ PRINT:PRINT:PRINT PRINT TAB(20);MONTH$(NUM%);" ";YEAR$:PRINT PRINT TAB(20);DAY$;DATE% PRINT TAB(20);LINE.1$ PRINT TAB(20);LINE.2$ PRINT TAB(20);LINE.3$ PRINT PRINT TAB(2);"(B-Blank W-Write S-Switch N-New date)"; PRINT " RETURN-next Q-Quit)" PRINT TAB(5);"Task"; INPUT LINE TASK$:TASK$=LEFT$(TASK$,1) IF TASK$="N" OR TASK$="" THEN 350 IF TASK$="Q" THEN 360 IF TASK$="B" THEN GOSUB 1300 IF TASK$="W" THEN GOSUB 1400 IF TASK$="S" THEN 340 GOTO 330 340 INPUT "Switch date (mm,dd) ";SM%,SD% IF SM%<1 OR SM%>12 THEN 340 IF SD%<1 OR SD%>DAYS%(SM%) THEN 340 REC.1%=REC.NUM% DAY.1$=DAY$ HOLD.1$=LINE.1$:HOLD.2$=LINE.2$:HOLD.3$=LINE.3$ REC.NUM%=(FIRST%(SM%)-1)+SD% GOSUB 1100 DAY.2$=DAY$ REC.2%=REC.NUM% DAY$=DAY.1$ REC.NUM%=REC.1% GOSUB 1200 DAY$=DAY.2$ LINE.1$=HOLD.1$ LINE.2$=HOLD.2$ LINE.3$=HOLD.3$ REC.NUM%=REC.2% GOSUB 1200 REC.NUM%=REC.1% GOSUB 1100 GOTO 330 350 GOSUB 1200 IF TASK$="N" THEN 310 DATE%=DATE%+1 IF DATE%>DAYS%(NUM%) THEN DATE%=1:NUM%=NUM%+1 IF NUM%>12 THEN NUM%=1 GOTO 320 360 GOSUB 1200 CLOSE 1:READ%=0 RETURN 400 PRINT CL$ STOP 1000 OLD.FILE%=0 IF END #1 THEN 1010 FILE$=YEAR$+".DAT" OPEN FILE$ RECL REC.SIZE% AS 1 OLD.FILE%=1 GOTO 1020 1010 IF READ% THEN 1020 CREATE FILE$ RECL REC.SIZE% AS 1 1020 RETURN 1100 END.FILE%=0 IF END # 1 THEN 1110 READ # 1,REC.NUM%;DAY$,LINE.1$,LINE.2$,LINE.3$ RETURN 1110 END.FILE%=1 RETURN 1200 PRINT # 1,REC.NUM%;DAY$,LINE.1$,LINE.2$,LINE.3$ RETURN 1300 PRINT TAB(5);"Line 1, 2, 3 or all"; INPUT LINE LN.NUM$ IF LN.NUM$="" THEN 1310 LN.NUM$=LEFT$(LN.NUM$,1) IF LN.NUM$="A" THEN LINE.1$=DASH$:LINE.2$=DASH$:LINE.3$=DASH$ IF LN.NUM$="1" THEN LINE.1$=DASH$ IF LN.NUM$="2" THEN LINE.2$=DASH$ IF LN.NUM$="3" THEN LINE.3$=DASH$ 1310 RETURN 1400 PRINT "Line #1 ";"------------------------------*" INPUT " ";LINE LN$ IF LN$="" THEN 1410 LINE.1$=LEFT$(LN$+BLANK$,30) 1410 PRINT "Line #2 ";"------------------------------*" INPUT " ";LINE LN$ IF LN$="" THEN 1420 LINE.2$=LEFT$(LN$+BLANK$,30) 1420 PRINT "Line #3 ";"------------------------------*" INPUT " ";LINE LN$ IF LN$="" THEN 1430 LINE.3$=LEFT$(LN$+BLANK$,30) 1430 RETURN