10 REM KALENDER VON J.HAGEN, ERSTELLT AUF EINEM C128 15 REM C64-VERSION A.M. 20 REM IN DER ANLISTUNG : < = KLEINER , > = GROESSER 30 REM 40 REM DIESES PROGRAMM ERSTELLT KALENDER FUER DIE JAHRE VON 1583 BIS 4199 50 B$=" ":REM 60 DIM T$(12),TM(12),AM(12),WN(18),ET(6),ST(6),NM(12),VM(12):L=29.530589:JX%=0 70 O$=CHR$(145):L$=CHR$(157):RN$=CHR$(18):RF$=CHR$(146):EM$=CHR$(13):R$=CHR$(29) 80 WT$="MONTAG DIENSTAG MITTWOCH DONNERSTAGFREITAG SAMSTAG SONNTAG " 90 MT$="JANUAR FEBRUAR MAERZ APRIL MAI JUNI " 100 MT$=MT$+"JULI AUGUST SEPTEMBEROKTOBER NOVEMBER DEZEMBER " 110 POKE53281,0:POKE53280,0:POKE646,1:F$=" ":TB$=CHR$(16) 120 PRINTCHR$(147);:PRINT:PRINT:PRINT" NOTIZ : ";:GOSUB7500:D$=F$ 200 PRINTCHR$(147);:PRINT:PRINT" ";D$; 210 PRINTTAB(31)MID$(TI$,1,2);":";MID$(TI$,3,2);":";MID$(TI$,5,2) 220 PRINTTAB(16)"KALENDER":PRINTTAB(15)"==========" 230 PRINT:PRINT" FUNKTION WAEHLEN :" 240 PRINT:PRINTTAB(10)"GENERIEREN 1" 250 PRINT:PRINTTAB(10)"KORREKTUR 2" 260 PRINT:PRINTTAB(10)"FEIERTAGE 3" 270 PRINT:PRINTTAB(10)"MONDPHASEN 4" 280 PRINT:PRINTTAB(10)"ANZEIGEN 5" 290 PRINT:PRINTTAB(10)"DRUCKEN 6" 300 PRINT:PRINTTAB(10)"PROGRAMM-ENDE 9" 310 PRINT:PRINT" FUNKTION EINGEBEN ";:F$="?":GOSUB7500 320 IF F$="1"THEN1000 330 IF F$="2"THEN2000 340 IF F$="3"THEN3000 350 IF F$="4"THEN4000 360 IF F$="5"THEN5000 370 IF F$="6"THEN6000 380 IF F$="9"THEN9000 381 PRINTO$;O$:GOTO310 500 PRINTCHR$(147);:PRINT:PRINT" ";D$; 510 PRINTTAB(31)MID$(TI$,1,2);":";MID$(TI$,3,2);":";MID$(TI$,5,2):RETURN 1000 GOSUB500:PRINTTAB(15)"GENERIEREN":PRINT:PRINT:JX%=0:F$="JJJJ" 1010 PRINT" JAHR (1583 - 4199) ";:GOSUB7500:JX%=VAL(F$) 1020 IFNOT(JX%<4200 AND JX%>1582)THENPRINTO$:GOTO1010 1021 PRINT:PRINT 1030 PRINT:PRINTTAB(16)"KALENDER":PRINT:PRINTTAB(18)"WIRD" 1040 PRINT:PRINTTAB(16)"GENERIERT":PRINT:PRINT 1050 FORM=1TO12:TM(M)=0:AM(M)=0:T$(M)="":NEXTM:JH%=JX%/100 1060 P%=15+JH%-INT(JH%/3)-INT(JH%/4):P%=P%-INT(P%/30)*30:Q%=JH%-INT(JH%/4)+4 1070 Q%=Q%-INT(Q%/7)*7:A%=JX%-INT(JX%/19)*19:B%=JX%-INT(JX%/4)*4 1080 C%=JX%-INT(JX%/7)*7:X%=19*A%+P%:D%=X%-INT(X%/30)*30:X%=2*B%+4*C%+6*D%+Q% 1090 E%=X%-INT(X%/7)*7:F%=22+D%+E%:MO%=3:IF F%>31 THEN MO%=4:F%=D%+E%-9 1100 IF D%=29 AND E%=6 THEN F%=19:MO%=4:GOTO1120 1110 IF D%=28 AND E%=6 AND A%>10 THEN MO%=4:F%=18 1120 TM(1)=31:TM(2)=28:TM(3)=31:TM(4)=30:TM(5)=31:TM(6)=30:TM(7)=31:TM(8)=31 1130 TM(9)=30:TM(10)=31:TM(11)=30:TM(12)=31:IF INT(JX%/4)*4<>JX% THEN1150 1140 IF INT(JH%/4)*400<>JX% AND JH%*100=JX% THEN1150 1141 TM(2)=29 1150 M1%=MO%:F1%=F%-2:IF F1%<1 THEN F1%=F1%+31:M1%=M1%-1 1160 M5%=MO%:F5%=F%-46:IF F5%<1 AND M5%=4 THEN F5%=F5%+31:M5%=M5%-1 1170 IF F5%<1 AND M5%=3 THEN F5%=F5%+TM(2):M5%=M5%-1 1180 M6%=MO%:F6%=F%-7:IF F6%<1 THEN F6%=F6%+31:M6%=M6%-1 1190 M2%=MO%:F2%=F%+39:IF F2%>31 AND M2%=3 THEN F2%=F2%-31:M2%=M2%+1 1200 IF F2%>30 AND M2%=4 THEN F2%=F2%-30:M2%=M2%+1 1210 IF F2%>31 AND M2%=5 THEN F2%=F2%-31:M2%=M2%+1 1220 M3%=M2%:F3%=F2%+10:IF F3%>31 AND M3%=5 THEN F3%=F3%-31:M3%=M3%+1 1230 IF F3%>30 AND M3%=6 THEN F3%=F3%-30:M3%=M3%+1 1240 M7%=M3%:F7%=F3%+11:IF F7%>31 AND M7%=5 THEN F7%=F7%-31:M7%=M7%+1 1250 IF F7%>30 AND M7%=6 THEN F7%=F7%-30:M7%=M7%+1 1260 M8%=M5%:F8%=F5%-2:IF F8%<1 AND M8%=3 THEN F8%=F8%+TM(2):M8%=M8%-1 1270 NT=INT((JX%-1)*365.25)-INT((JX%-1)/100)+INT((JX%-1)/400)+309 1280 NT=NT-INT(NT/7)*7:IF NT=0 THEN NT=7 1290 WT=NT:GT=0:FORM=1TO12:GT=GT+TM(M) 1300 FORT=1TO31:IF T>TM(M) THEN T$(M)=T$(M)+CHR$(0):GOTO1330 1310 XX=WT+7:IF WT<6 THEN XX=WT 1311 T$(M)=T$(M)+CHR$(XX) 1320 WT=WT+1:IF WT>7 THEN WT=WT-7 1330 NEXTT:NEXTM 1340 BT=ASC(MID$(T$(12),24,1)):F4%=22:M4%=11:IF BT<7 THEN F4%=22-BT 1350 T=1:M=1:GOSUB1900:IF JX%>1888 THEN T=1:M=5:GOSUB1900 1360 T=25:M=12:GOSUB1900:IF(JX%>1953)AND(JX%<1991)THEN T=17:M=6:GOSUB1900 1361 IFJX%>1989THENT=3:M=10:GOSUB1900 1370 T=26:M=12:GOSUB1900:T=F1%:M=M1%:GOSUB1900:T=F%:M=MO%:GOSUB1900 1380 T=F%+1:M=MO%:IF T>31 THEN T=T-31:M=M+1 1390 GOSUB1900:T=F2%:M=M2%:GOSUB1900 1400 T=F3%:M=M3%:GOSUB1900:T=F3%+1:M=M3%:IF T>31 THEN T=T-31:M=M+1 1410 GOSUB1900:T=F4%:M=M4%:GOSUB1900:FORM=1TO12:AM(M)=0 1420 FORT=1TO31:IF T<=TM(M) THEN IF ASC(MID$(T$(M),T,1))<8 THEN AM(M)=AM(M)+1 1430 NEXTT:NEXTM 1440 NM(0)=JX%*10.632932+INT((JX%-1)/4)-INT((JX%-1)/100)+INT((JX%-1)/400)+8.582 1450 VM(0)=NM(0)-INT(NM(0)/L)*L:NM(0)=L+1-VM(0) 1460 XX=-14.8:IF NM(0)<15THENXX=14.8 1461 VM(0)=NM(0)+XX 1470 FORM=1TO12:VM(M)=VM(M-1)+L:NM(M)=NM(M-1)+L:NEXTM 1480 FORX=0TO12:T=VM(X):VM(X)=0:IF INT(T)<=GT THEN GOSUB1950:VM(X)=T 1490 T=NM(X):NM(X)=0:IFT<=GT THENGOSUB1950:NM(X)=T 1500 NEXTX:GOTO200 1900 WT=ASC(MID$(T$(M),T,1)):IF WT>=8 THEN RETURN 1901 T$(M)=LEFT$(T$(M),T-1)+CHR$(WT+7)+RIGHT$(T$(M),LEN(T$(M))-T) 1910 RETURN 1950 FORM=1TO12:IF INT(T)>TM(M) THEN T=T-TM(M):GOTO1960 1951 T=INT(T)+(M/100):M=12 1960 NEXTM:RETURN 2000 GOSUB500:PRINT:PRINTTAB(8)"KORREKTUR FUER ";JX%:IF JX%=0 THEN2500 2010 PRINT:PRINT:PRINT:PRINT:F$="TT" 2020 PRINT" TAG ";:GOSUB7500:GOSUB3500 2030 T=M:IF NOT(T>0 AND T<32) THEN PRINTO$:GOTO2020 2031 F$="MM" 2040 PRINTTAB(12)" MONAT ";:GOSUB7500:GOSUB3500 2050 IF M<1 OR M>12 THEN PRINTO$:GOTO2040 2051 IF T<=TM(M) THEN2070 2060 PRINT:PRINT:PRINT:PRINTTAB(12)"DATUM IST UNGUELTIG":GOTO2150 2070 PRINTTAB(26)" F / W ";:F$="?":GOSUB7500 2080 IF F$="W"THEN2110 2081 IF F$<>"F"THEN PRINTO$:GOTO2070 2090 X=ASC(MID$(T$(M),T,1)):IF X>7 THEN2130 2100 T$(M)=LEFT$(T$(M),T-1)+CHR$(X+7)+RIGHT$(T$(M),LEN(T$(M))-T) 2101 AM(M)=AM(M)-1:GOTO2130 2110 X=ASC(MID$(T$(M),T,1)):IF X<8 THEN2130 2120 T$(M)=LEFT$(T$(M),T-1)+CHR$(X-7)+RIGHT$(T$(M),LEN(T$(M))-T) 2121 AM(M)=AM(M)+1 2130 PRINT:PRINT:PRINT:PRINT" DER";T;". ";MID$(MT$,(M-1)*9+1,9);" IST EIN "; 2140 IF F$="W"THEN PRINT"WERKTAG":GOTO2150 2141 PRINT"FEIERTAG" 2150 PRINT:PRINT:PRINT 2160 PRINT:PRINTTAB(10)"NOCH EINMAL (J / N) ";:F$="?":GOSUB7500 2170 IF F$="J"THEN2000 2171 IF F$="N"THEN200 2172 PRINTO$;:GOTO2160 2500 PRINT:PRINT:PRINTTAB(16)"KALENDER":PRINT:PRINTTAB(17)"WURDE" 2510 PRINT:PRINTTAB(16)"NOCH NICHT":PRINT:PRINTTAB(16)"GENERIERT":PRINT:PRINT 2520 PRINT:PRINTTAB(16)"WEITER ? ";:F$="J":GOSUB7500:GOTO200 3000 GOSUB500:PRINTTAB(12)"FEIERTAGE ";JX%:PRINT:IF JX%=0 THEN2500 3010 PRINT:PRINTTAB(8)"ROSENMONTAG "; 3020 PRINTRIGHT$(STR$(F8%),2)".";:PRINTRIGHT$(STR$(M8%),2)"." 3030 PRINT:PRINTTAB(8)"ASCHERMITTWOCH "; 3040 PRINTRIGHT$(STR$(F5%),2)".";:PRINTRIGHT$(STR$(M5%),2)"." 3050 PRINT:PRINTTAB(8)"PALMSONNTAG "; 3060 PRINTRIGHT$(STR$(F6%),2)".";:PRINTRIGHT$(STR$(M6%),2)"." 3070 PRINT:PRINTTAB(6)"* KARFREITAG "; 3080 PRINTRIGHT$(STR$(F1%),2)".";:PRINTRIGHT$(STR$(M1%),2)"." 3090 PRINT:PRINTTAB(6)"* OSTERN "; 3100 PRINTRIGHT$(STR$(F%),2)".";:PRINTRIGHT$(STR$(MO%),2)"." 3110 PRINT:PRINTTAB(6)"* HIMMELFAHRT "; 3120 PRINTRIGHT$(STR$(F2%),2)".";:PRINTRIGHT$(STR$(M2%),2)"." 3130 PRINT:PRINTTAB(6)"* PFINGSTEN "; 3140 PRINTRIGHT$(STR$(F3%),2)".";:PRINTRIGHT$(STR$(M3%),2)"." 3150 PRINT:PRINTTAB(8)"FRONLEICHNAM "; 3160 PRINTRIGHT$(STR$(F7%),2)".";:PRINTRIGHT$(STR$(M7%),2)"." 3170 PRINT:PRINTTAB(6)"* BUSS-UND BETTAG "; 3180 PRINTRIGHT$(STR$(F4%),2)".";:PRINTRIGHT$(STR$(M4%),2)"." 3190 PRINT:PRINTTAB(12)"WEITER ? ";:F$="J":GOSUB7500:GOTO200 3500 M=ASC(MID$(F$,2,1)):IF M<48 OR M>57 THEN IF M<>32 THEN M=0:RETURN 3510 M=VAL(F$):RETURN 4000 GOSUB500:PRINTTAB(12)"MONDPHASEN ";JX%:PRINT:IF JX%=0 THEN2500 4010 PRINT:PRINTTAB(8)"VOLLMOND NEUMOND":PRINT:FORM=0TO12 4020 IF VM(M)<=0 THEN 4040 4021 PRINT" ";:PRINTRIGHT$(B$+STR$(INT(VM(M))),3)"."; 4030 PRINTRIGHT$(STR$(INT((VM(M)-INT(VM(M)))*100+.5)),2)"."; 4040 IF NM(M)<=0 THEN 4060 4041 PRINTTAB(24)" ";:PRINTRIGHT$(B$+STR$(INT(NM(M))),3)"."; 4050 PRINTRIGHT$(STR$(INT((NM(M)-INT(NM(M)))*100+.5)),2)"."; 4060 PRINT:NEXTM 4070 PRINT:PRINTTAB(12)"WEITER ? ";:F$="J":GOSUB7500:GOTO200 5000 GOSUB500:PRINTTAB(16)"ANZEIGEN":PRINT:IF JX%=0 THEN2500 5010 PRINT" EINGABE T / W ";:F$="?":GOSUB7500:E1$=F$:F$=" " 5020 IF NOT(E1$="T" OR E1$="W")THENPRINTO$:GOTO5010 5030 PRINTTAB(22)" ";:PRINT"MONAT 1-12 ";:GOSUB7500:GOSUB3500 5040 E2%=M:IFNOT(E2%>0 AND E2%<13)THENPRINTO$:GOTO5030 5050 PRINTO$:IF E1$="T"THEN5500 5100 PRINT" WERKSKALENDER ";MID$(MT$,(E2%-1)*9+1,9);" ";JX%;" ":PRINT 5110 T1%=0:A1%=0:IF E2%<>1 THEN FORX=1TOE2%-1:T1%=T1%+TM(X):A1%=A1%+AM(X):NEXTX 5120 T2%=T1%+15:A2%=A1%:FORX=1TO15:IF ASC(MID$(T$(E2%),X,1))<8 THEN A2%=A2%+1 5130 NEXTX:FORX=1TO16:IF X=16 THEN5190 5140 Y$=MID$(T$(E2%),X,1):IFY$=""THENY$=CHR$(0) 5141 Y=ASC(Y$):A%=0:Y=Y-7:IFY<1 THEN A1%=A1%+1:A%=A1%:Y=Y+7 5150 PRINT" ";:PRINTRIGHT$(STR$(X),2);:PRINT". ";MID$(WT$,(Y-1)*10+1,2); 5160 PRINTRIGHT$(B$+STR$(T1%+X),4);:IFA%>0THEN PRINTRIGHT$(STR$(A%),4);:GOTO5170 5161 PRINT" "; 5170 IF Y<>4 THEN PRINT" ";:GOTO5190 5171 V=1:A%=T1%:T=X:GOSUB5800 5180 PRINTRIGHT$(B$+STR$(WN((V-1)*6+Y)),3); 5190 Y=ASC(MID$(T$(E2%),X+15,1)):A%=0:Y=Y-7:IFY<1 THEN A2%=A2%+1:A%=A2%:Y=Y+7 5200 IF Y<=0 THEN PRINT:GOTO5250 5201 PRINTTAB(20)" ";:PRINTRIGHT$(STR$(X+15),2); 5210 PRINT". ";MID$(WT$,(Y-1)*10+1,2);:PRINTRIGHT$(B$+STR$(T2%+X),4); 5220 IF A%>0 THEN PRINTRIGHT$(B$+STR$(A%),4);:GOTO5230 5221 PRINT" "; 5230 IF Y<>4 THEN PRINT" ":GOTO5250 5231 V=1:A%=T1%:T=X+15:GOSUB5800 5240 PRINTRIGHT$(B$+STR$(WN((V-1)*6+Y)),3) 5250 NEXTX:GOTO5610 5500 PRINT" TAGESKALENDER ";MID$(MT$,(E2%-1)*9+1,9);" ";JX%;" " 5510 A%=0:IF E2%<>1 THEN FORX=1TOE2%-1:A%=A%+TM(X):NEXTX 5520 V=1:M=2-ASC(MID$(T$(E2%),1,1)):IF M<-5 THEN M=M+7 5530 FORX=1TO7:PRINT:PRINTTAB(05)MID$(WT$,(X-1)*10+1,10); 5540 FORY=1TO6:T=M+(X-1)+((Y-1)*7) 5550 IF T>0 AND T0 AND T0ANDT0)THENPRINT#4," ";:GOTO6340 6330 PRINT#4,RIGHT$(B$+STR$(WN((V-1)*6+Y)),3); 6340 NEXTY:PRINT#4," ";:NEXTV:PRINT#4:PRINT#4 6350 NEXTJ:PRINT#4:PRINT#4,"FEIERTAGE : KARFREITAG "; 6360 PRINT#4,RIGHT$(STR$(F1%),2)".";:PRINT#4,RIGHT$(STR$(M1%),2);:PRINT#4,". , "; 6370 PRINT#4," OSTERN ";:X=F%+1:Y=MO%:IF X>31 THEN X=X-31:Y=Y+1 6380 PRINT#4,RIGHT$(STR$(F%),2);:IF MO%<>Y THEN PRINT#4,RIGHT$(STR$(MO%),2)"."; 6390 PRINT#4,"/";:PRINT#4,RIGHT$(STR$(X),2);:PRINT#4,RIGHT$(STR$(Y),2) 6400 PRINT#4,TB$;"12HIMMELFAHRT "; 6410 PRINT#4,RIGHT$(STR$(F2%),2)".";:PRINT#4,RIGHT$(STR$(M2%),2);:PRINT#4,". , "; 6420 PRINT#4," PFINGSTEN ";:X=F3%+1:Y=M3%:IF X>31 THEN X=X-31:Y=Y+1 6430 PRINT#4,RIGHT$(STR$(F3%),2)".";:IF M3%<>Y THEN PRINT#4,RIGHT$(STR$(M3%),2)"."; 6440 PRINT#4,"/";:PRINT#4,RIGHT$(STR$(X),2)".";:PRINT#4,RIGHT$(STR$(Y),2)"." 6450 PRINT#4,TB$;"12BUSS- UND BETTAG ";:PRINT#4,RIGHT$(STR$(F4%),2)"."; 6460 PRINT#4,RIGHT$(STR$(M4%),2)".":PRINT#4:PRINT#4,"VOLLMOND : "; 6470 FORM=0TO5:GOSUB6600:PRINT#4," , ";:NEXTM:PRINT#4:PRINT#4,TB$;"11 "; 6480 FORM=6TO11:GOSUB6600:IF M<11 THEN PRINT#4," , ";:GOTO6500 6490 IF M<12 AND VM(12)>0 THEN PRINT#4," , "; 6500 NEXTM:PRINT#4 6510 IF VM(12)<>0 THEN PRINT#4,TB$;"11 ";:M=12:GOSUB6600 6520 FORX=1TO11:PRINT#4:NEXTX:GOTO6880 6600 IF VM(M)<=0 THEN RETURN 6601 PRINT#4,RIGHT$(STR$(VM(M)),2)"."; 6610 PRINT#4,RIGHT$(STR$((VM(M)-INT(VM(M)))*100),2)".";:RETURN 6700 PRINT#4,TB$;"29WERKS-KALENDER";JX%:PRINT#4 6710 FORJ=1TO2:ET(1)=0:ST(1)=0:IF J=1 THEN6730 6720 FORX=1TO6:ET(1)=ET(1)+TM(X):ST(1)=ST(1)+AM(X):NEXTX 6730 FORX=1TO5:ET(X+1)=ET(X)+TM((J-1)*6+X):ST(X+1)=ST(X)+AM((J-1)*6+X):NEXTX 6740 PRINT#4," ";:FORX=1TO6:A%=9:IF J>1 THEN6760 6750 IF X<5 THEN A%=8:PRINT#4," "; 6751 IF X<2 THEN A%=7:PRINT#4," "; 6760 PRINT#4," ";MID$(MT$,(J-1)*54+(X-1)*9+1,A%);:NEXTX:PRINT#4 6770 FORT=1TO31:PRINT#4,RIGHT$(STR$(T),2)"."; 6780 FORX=1TO6:IF T>TM((J-1)*6+X) THEN PRINT#4," ";:GOTO6800 6790 PRINT#4,RIGHT$(B$+STR$(ET(X)+T),5); 6800 IF T>TM((J-1)*6+X) OR ASC(MID$(T$((J-1)*6+X),T,1))>7 THEN6820 6810 ST(X)=ST(X)+1:PRINT#4,RIGHT$(B$+STR$(ST(X)),4);:GOTO6830 6820 PRINT#4," "; 6830 V=ASC(MID$(T$((J-1)*6+X),T,1)):IFNOT(V=4 OR V=11)THEN6860 6840 V=1:Y=1:E2%=(J-1)*6+X:A%=ET(X):GOSUB5800 6850 PRINT#4,RIGHT$(B$+STR$(WN((V-1)*6+Y)),3);:GOTO6870 6860 PRINT#4," "; 6870 NEXTX:PRINT#4:NEXTT:PRINT#4:NEXTJ:FORX=1TO4:PRINT#4:NEXTX 6880 PRINT:PRINT:PRINT:GOTO6920 6890 (null)6900 6900 PRINT:PRINT:PRINT:PRINT:PRINT 6910 OPEN3,3:PRINT#3,TAB(11)"DRUCKER NICHT BEREIT";O$;O$;O$:CLOSE3 6920 CLOSE4:E1$="":PRINTTAB(11)"NOCH EINMAL (J / N) ";:F$="?":GOSUB7500 6930 IF F$="J"THEN6000 6931 IF F$="N"THEN200 6932 PRINTO$:GOTO6920 7500 REM ZEICHEN-EINGABE-ROUTINE 7510 G$="":G=0:PRINTF$;:FORX=1TOLEN(F$):PRINTL$;:NEXTX 7520 PRINTG$;:G=G+1:IF G>LEN(F$) THEN7580 7530 G$=MID$(F$,G,1):PRINTRN$;G$;RF$;L$; 7531 GETG$:IF G$=""THEN7531 7532 IF G$=EM$ THEN7580 7540 IF G$=R$ THEN7560 7541 IF G$=L$ THEN7570 7542 IF ASC(G$)=34 THEN7530 7550 IF ASC(G$)<32 OR ASC(G$)>95 THEN 7530 7551 F$=LEFT$(F$,G-1)+G$+RIGHT$(F$,LEN(F$)-G):GOTO7520 7560 IF G=>LEN(F$) THEN7530 7561 G$=MID$(F$,G,1):GOTO7520 7570 IF G<2 THEN7530 7571 PRINTMID$(F$,G,1);L$;L$;:G=G-1:GOTO7530 7580 PRINTMID$(F$,G,1);:RETURN 9000 END