10 REM *****************************
20 REM *  *-- K a l e n d e r --*  *
30 REM *            by             *
40 REM *   von Michael Grassmann   *
50 REM *        August 1988        *
90 REM *****************************
100 REM
110 REM ************************ Einlesen der Felder **************************
120 REM
130 DIM anzt(26),wtn$(7),mna$(12),coa$(12),coe$(12)
140 FOR i=1 TO 26
150   READ anzt(i)
160 NEXT i
170 FOR i=1 TO 7
180   READ wtn$(i)
190 NEXT i
200 FOR i=1 TO 12
210   READ mna$(i)
220 NEXT i
230 REM
240 REM ************************* Hauptprogramm ******************************
250 REM
260 MODE 2
270 PRINT"K a l e n d e r p r o g r a m m  ! ! !"
280 PRINT
290 PRINT"Zur Ausgabe eines Jahres muss der 1.1. des Jahres eingegeben werden !"
300 PRINT
310 PRINT"Geben Sie bitte das gewuenschte Datum ein : "
320 PRINT
330 PRINT"      Tag :         Monat :          Jahr (1-9999) :"
340 PRINT
350 WHILE fehler<>1
360   LOCATE 13,9:PRINT"                                                  "
370   LOCATE 13,9:INPUT"",tage:LOCATE 29,9:INPUT"",monat:                             LOCATE 54,9:INPUT"",jahr
380   GOSUB 480
390 WEND
400 PRINT
410 ta$="n"
420 IF tage=1 AND monat=1 THEN GOSUB 620
430 IF ta$="n" THEN LOCATE 1,11:PRINT"Der";USING" ##.";tage;:PRINT" ";mna$(monat);" im ";schalt$;jahr;" ist ein ";wtn$(sp5);".                ":PRINT:PRINT"Weiter mit der Leertaste !   ":GOSUB 1010
440 RUN
450 REM
460 REM ********************* Berechnen des Wochentages ***********************
470 REM
480 fehler=0
490 IF (jahr>=10000)OR(jahr<=0)OR(monat>=13)OR(monat<=0)OR(tage<=0)                 THEN RETURN
500 dif=10000-jahr:sp1=FIX(dif/4):sp2=sp1*4
510 IF sp2<>dif THEN zus=0:schalt$="Jahr" ELSE zus=13:schalt$="Schaltjahr"
520 IF tage<=anzt(monat+zus+1)-anzt(monat+zus) THEN fehler=1
530 sp1=sp1+dif+4:sp3=(7-(sp1-((FIX(sp1/7))*7)))-1
540 sp4=anzt(monat+zus)+tage
550 sp5=(sp4-((FIX(sp4/7))*7))+sp3
560 IF sp5>7 THEN sp5=sp5-7
570 IF sp5<1 THEN sp5=7
580 RETURN
590 REM
600 REM **************************** Jahresausgabe ****************************
610 REM
620 PRINT"Wollen Sie eine Kalenderausgabe dieses Jahres ? (j/n)"
630 ta$=""
640 WHILE ta$<>"j" AND ta$<>"n"
650   ta$=INKEY$
660 WEND
670 IF ta$="n" THEN RETURN
680 LOCATE 1,11:PRINT"Ausgabe auf Bildschirm oder Drucker ? (b/d)             "
690 ta$=""
700 WHILE ta$<>"b" AND ta$<>"d"
710   ta$=INKEY$
720 WEND
730 CLS
740 IF ta$="b" THEN bd=0 ELSE bd=8:PRINT"Ausgabe auf dem Drucker !":WIDTH 80
750 PRINT #bd,"                      Kalender des ";schalt$;"es";jahr
760 FOR ini=1 TO 12
770   coa$(ini)="   "
780   coe$(ini)=""
790 NEXT ini
800 FOR ms=1 TO 12 STEP 4
810   PRINT #bd,USING"    ç       ç         ç       ç         ç       ç         ç       ç";mna$(ms);mna$(ms+1);mna$(ms+2);mna$(ms+3)
820   FOR wt=1 TO 7
830     FOR monat=ms TO ms+3
840       IF monat=ms THEN PRINT #bd,LEFT$(wtn$(wt),2);
850       tage=0
860         tage=tage+1
870         GOSUB 480
880       IF sp5<>wt THEN 860
890       IF tage=1 THEN coa$(monat)="":coe$(monat)="   "
900       PRINT  #bd,coa$(monat);
910       FOR k=1 TO 5
920         IF tage>28 THEN GOSUB 480
930         IF fehler=1 THEN PRINT #bd,USING"###";tage;                                                 ELSE PRINT #bd,"   ";
940         tage=tage+7
950       NEXT k
960       PRINT #bd,coe$(monat);
970     NEXT monat
980     PRINT #bd
990   NEXT wt
1000 NEXT ms
1010 ta$=""
1020 WHILE ta$<>" " AND bd<>8
1030   ta$=INKEY$
1040 WEND
1050 RETURN
1060 DATA 0,31,59,90,120,151,181,212,243,273,304,334,365
1070 DATA 0,31,60,91,121,152,182,213,244,274,305,335,366
1080 DATA Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag
1090 DATA Januar,Februar,Maerz,April,Mai,Juni,Juli,August,September
1100 DATA Oktober,November,Dezember