home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Profi Club
/
Profi_Club_5_1992_-_de.d64
/
kalender
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2023-02-26
|
12KB
|
436 lines
10 rem kalender=2300===========c64
20 rem (p) commodore disc team
30 rem ===========================
40 rem (c) by fwk v3.5
50 rem wiesloch
60 rem
70 rem (v) a.m. v2.0
80 rem drucker optional
90 rem (citizen 120-d)
91 rem ==========================
92 sys57812"sysmc",8,0:poke780,0
93 poke781,254:poke782,191:sys65493
100 rem =========================
110 gosub4320
120 printchr$(147);:sysat,11,11:print"bitte warten !";
130 rem ==========================
140 rem variable dimensionieren
150 rem ==========================
160 dim mo$(12),ta$(7),mc(13),sb(28),gj(7),zs(7),og(7,19)
170 dim f1$(32),f1(32),f2(32),f3(32),v2(32)
180 dim h1$(16),h1(16),h3(16):goto920
190 rem ==========================
200 rem datazeilen
210 rem ==========================
220 rem monatsnamen = mo$(12)
230 rem ==========================
240 data januar,februar,maerz,april,mai,juni
250 data juli,august,september,oktober,november,dezember
260 rem ==========================
270 rem tagesnamen = ta$(7)
280 rem ==========================
290 datasonntag,montag,dienstag,mittwoch
300 data donnerstag,freitag,samstag
310 rem ==========================
320 rem monatskonstante = mc(13)
330 rem ==========================
340 data 0,31,59,90,120,151,181
350 data 212,243,273,304,334,365
360 rem ==========================
370 rem sonntags 'buchstaben' = sb(28)
380 rem ==========================
390 data 76,5,4,3,21,7,6,5,43,2,1,7,65,4
400 data 3,2,17,6,5,4,32,1,7,6,54,3,2,1
410 rem ==========================
420 rem feste sonntagsbuchstaben = fb(5)
430 rem ==========================
440 data 3,5,7,3,5
450 rem ==========================
460 rem grenzjahre = gj(7)
470 rem ==========================
480 data 15821004,17000101,18000101,19000101,21000101,22000101,1e20
490 rem ==========================
500 rem zyklusstart = zs(7)
510 rem ==========================
520 data-9,1567,1691,1787,1883,2091,2187
530 rem ==========================
540 rem ostergrenzen = og(7,19)
550 rem ==========================
560 rem og(1)
570 rem ==========================
580 data 15,4,23,12,1,20,9,28,17,6
590 data 25,14,3,22,11,0,19,8,27
600 rem ==========================
610 rem og(2)
620 rem ==========================
630 data 22,11,0,19,8,27,16,5,24,13
640 data 2,21,10,28,18,7,26,15,4
650 rem ==========================
660 rem og(3+4)
670 rem ==========================
680 sysre:data 23,12,1,20,9,28,17,6,25,14
690 data 3,22,11,0,19,8,27,16,5
700 rem ==========================
710 rem og(5+6)
720 rem ==========================
730 sysre:data 24,13,2,21,10,28,18,7,26,15
740 data 4,23,12,1,20,9,27,17,6
750 rem ==========================
760 rem og(7)
770 rem ==========================
780 data 25,14,3,22,11,0,19,8,27,16
790 data 5,24,13,2,21,10,28,18,7
800 rem ==========================
810 rem daten der festtage
820 rem ==========================
830 sysre:data ostern,0,1,3,ostern,1,2,3,karfreitag,-3,6,3
840 data christi himmelf.,41,5,5,pfingsten,10,1,5
850 data pfingsten,1,2,5,fronleichnam,10,5,5
860 data 1,1,neujahr,6,1,hl.drei koenige,1,5,tag der arbeit
870 data 15,8,mariae himmelf.,3,10,t.d.dtsch.einh.
880 data 1,11,allerheiligen,25,12,weihnachten,26,12,weihnachten,buss und bettag
890 rem ==========================
900 rem data lesen
910 rem ==========================
920 for x=1 to 12: read mo$(x): next x
930 for x=1 to 7: read ta$(x):next x
940 for x=1 to 13: read mc(x): next x
950 for x=1 to 28: read sb(x):next x
960 for x=2 to 6: read fb(x): next x
970 for x=1 to 7: read gj(x): next x
980 for x=1 to 7: read zs(x): next x
990 for x=1 to 7
1000 if x=4 thengosub680
1010 if x=6 thengosub730
1020 for y=1 to 19: read og(x,y): next y
1030 next x
1040 rem =========================
1050 rem textstrings
1060 rem =========================
1070 t1$=b4$+b4$+"*** programm kalender ***"+b4$+b3$
1080 t2$=b6$+"** weiter mit <space> **"+b6$
1090 t3$=chr$(18)+t2$+chr$(146)
1100 t4$=b2$+"festtagskalender des jahres"
1110 t5$="nr. d. wochentages ="
1120 t6$="tagesdatum"+b5$+b4$+"="
1130 t7$="nr. d. monats"+b6$+"="
1140 t8$="jahr"+b$+b5$+"="
1150 t9$="zusatzeingaben"
1160 t0$=chr$(145)
1170 l1$="": for x=1 to 40: l1$=l1$+"-": next x
1180 l2$="": for x=1 to 46: l2$=l2$+"*": next x
1190 rem =========================
1200 rem windowstrings
1210 rem =========================
1220 w1$=chr$(18)+t1$+chr$(146)
1230 w2$=chr$(147)
1240 w3$=""
1250 w4$="":w5$=chr$(18)
1260 w5$=w5$+"bezeichnung(max.16) :"+b2$+"tag"+b4$+"monat [nr]"+chr$(146)
1270 rem =========================
1280 rem druckersteuerung
1290 rem =========================
1300 rem master reset
1310 p1$=chr$(27)+"@"
1320 rem linken rand setzen in spalte 10
1330 p2$=chr$(27)+chr$(108)+chr$(10)
1340 rem var. htabs in spalten 20,25,36
1350 p3$=chr$(27)+"d"+chr$(20)+chr$(25)+chr$(36)+chr$(0)
1360 rem vertikale vergroesserung ein
1370 p4$=chr$(27)+chr$(126)+chr$(49)+chr$(49)
1380 rem vertikale vergroesserung aus
1390 p5$=chr$(27)+chr$(126)+chr$(49)+chr$(48)
1400 rem sprung zum naechsten htab
1410 p6$=chr$(9)
1420 rem =========================
1430 rem eroeffnungsgrafik
1440 rem =========================
1530 rem =========================
1540 rem menue
1550 rem =========================
1560 printw2$w1$:sysat,5,3:printw3$;
1570 x=0: y=0: f=0: x1=0: x2=0: x5=0
1580 print "bitte geben sie die nummer des":sysat,5,4
1590 print "gewuenschten unterprogramms ein:":sysat,5,6
1600 print "wochentag = 1":sysat,5,8
1610 print "tagesdatum= 2":sysat,5,10
1620 print "monat"b5$"= 3":sysat,5,12
1630 print "festtage"b2$"= 4":sysat,5,14
1640 print "end"b6$" = 5"
1660 getx$:ifx$=""then1660
1665 onasc(x$)and7gosub 1720,1910,2220,2550,1680
1670 goto 1560
1680 print w2$: end
1690 rem =========================
1700 rem unterprogramm wochentagsuche
1710 rem =========================
1720 printw2$w1$;:sysat,8,3:printw3$;
1730 print "gesucht: der wochentag"
1740 sysat,8,5:printw3$;
1750 print t6$:sysat,8,7:print t7$:sysat,8,9: print t8$
1760 sysat,30,5:printw3$;
1770 input t:sysat,30,7:input m:sysat,30,9:input a
1780 gosub 3820: if f>0 then goto 3950
1790 gosub 4080
1800 tt=mc(m)+t
1810 gosub 4260
1820 if x5=1 then return
1830 sysat,8,12:printw3$;
1840 print "ergebnis:":sysat,8,14
1850 print ta$(wz);",";tab(19) t;tab(23) mo$(m);tab(32) a
1860 sysat,2,24:printt3$;:gosub4352
1870 return
1880 rem =========================
1890 rem unterprogramm tagesdatum
1900 rem =========================
1910 printw2$w1$;:sysat,0,3:printw3$;
1920 for x=1 to 7: print left$(ta$(x),2);"=";x: print: next x
1930 sysat,8,3:printw3$;
1940 print "gesucht: das tagesdatum"
1950 sysat,8,5:printw3$;
1960 print t5$:sysat,8,7:print t7$:sysat,8,9: print t8$
1970 sysat,30,5:printw3$;
1980 input wz:sysat,30,7:inputm:sysat,30,9: input a: t=1
1990 gosub 3820: if f>0 then goto 3950
2000 gosub 4080
2010 tz=wz+sz-1: if tz>7 then tz=tz-7
2020 th=mc(m)+1: th=th-int(th/7)*7: if th=0 then th=7
2030 if tz<th then tz=tz+7
2040 th=tz-th+1:x3=1:td(x3)=th:xh=mc(3)
2050 if x1=2 then mc(3)=mc(3)+1
2060 ifmc(m)+td(x3)+6>=mc(m+1)then2090
2070 x3=x3+1: td(x3)=td(x3-1)+7
2080 goto2060
2090 mc(3)=xh
2100 sysat,8,12:printw3$;
2110 print "ergebnis:": print
2120 z=1
2130 forii=ztox3:sysat,8,13+ii
2140 print ta$(wz);",";tab(19) td(ii);tab(23) mo$(m);tab(32) a:next
2150 z=ii
2170 sysat,2,24:printt3$;:goto4352
2190 rem =========================
2200 rem unterprogramm monat
2210 rem =========================
2220 printw2$w1$;:sysat,0,3:printw3$;
2230 for x=1 to 7: print left$(ta$(x),2);"=";x: print: next x
2240 sysat,8,3:printw3$;
2250 print "gesucht: der monat"
2260 sysat,8,5:printw3$;
2270 print t5$:sysat,8,7:printt6$:sysat,8,9:print t8$
2280 sysat,30,5:printw3$;
2290 input wz:sysat,30,7:inputt:sysat,30,9:inputa:m=1
2300 gosub 3820: if f>0 then goto 3950
2310 gosub 4080
2320 x3=0
2330 for m=1 to 12
2340 if len(str$(x2))>2 and m=2 then xh=mc(3): mc(3)=mc(3)+1
2350 if len(str$(x2))>2 and m=3 then sz=val(mid$(str$(x2),3,1)): mc(3)=xh
2360 tz=wz+sz-1: if tz>7 then tz=tz-7
2370 th=mc(m)+t: if th>mc(m+1) then goto 2400
2380 th=th-int(th/7)*7:if th=0 then th=7
2390 if th=tz then x3=x3+1: mh(x3)=m
2400 next m
2410 sysat,8,12:printw3$;
2420 print "ergebnis:": print
2430 if x3<>0 then goto 2460
2440 sysat,8,14:print "im jahr";a;"gibt es keinen":sysat,8,15
2450 print ta$(wz);", den";t;".": goto 2490
2460 for z=1 to x3:sysat,8,13+z
2470 print ta$(wz);",";tab(19) t;tab(23) mo$(mh(z));tab(32) a
2480 next z
2490 sysat,2,24:printt3$;:gosub4352
2500 return
2510 rem =========================
2520 rem unterprogramm festkalender
2530 rem gesetzliche feiertage der brd
2540 rem =========================
2550 printw2$w1$;:sysat,8,3:printw3$;
2560 print "gesucht: festkalender":sysat,8,5
2570 print "rechenzeit ca. 10-45 sec"
2580 sysat,8,7:printw3$;
2590 print t8$;:input a:sysat,8,9
2600 input "zusatzeingaben (j/n)";z1$:sysat,8,11
2610 print "drucker oder":sysat,8,12
2620 print "bildschirm"b5$"(d/b)";:inputz2$
2630 t=1: m=1
2640 gosub 3820: if f>0 then goto 3950
2650 x5=1: x=0
2660 if z1$="n" then goto 2840
2670 rem :
2680 rem zusatzeingaben
2690 rem :
2700 print w2$;t1$t9$;a:print w5$
2710 x=x+1
2720 printb2$;:inputh1$(x)
2730 print t0$,,: input h1(x)
2740 print t0$,,,: input h3(x): print
2750 h1$(x)=left$(h1$(x),16)
2760 t=h1(x): m=h3(x): gosub 3820
2770 if f>0 then gosub 3950
2780 ifx<>16then2790
2781 print"keine weiteren eingaben moeglich":sysat,2,24:printt3$;:gosub4352:goto2830
2790 input "weitere eingaben (j/n)";z3$
2800 if z3$<>"j" then2830
2810 print t0$b$b$b$chr$(13)t0$t0$l1$;
2820 goto2710
2830 z6=x+16
2840 rem poke 65286,11
2850 for x=17 to z6
2860 f1$(x)=h1$(x-16): f1(x)=h1(x-16): f3(x)=h3(x-16)
2870 t=f1(x): m=f3(x): gosub 3820
2880 if f=5 then f1(x)=1: f3(x)=3: f=0: t=f1(x): m=f3(x)
2890 gosub 1790
2900 f2(x)=wz
2910 next x
2920 rem :
2930 rem bewegliche feste
2940 rem :
2950 gosub830: m=3: gosub 4080
2960 gz=(a+1)-int((a+1)/19)*19
2970 tt=mc(3)+21+og(x4,gz)
2980 gosub 4260
2990 for x6=1 to 7
3000 read f1$(x6),y,f2(x6),y1
3010 tt=tt+y: t=tt-mc(y1): m=y1
3020 if x6=1 then t=8-wz+t
3030 if t+mc(y1)>mc(y1+1) then m=y1+1: t=t-(mc(y1+1)-mc(y1))
3040 if x6=1 then tt=t+mc(m)
3050 f3(x6)=m: f1(x6)=t
3060 next x6
3070 rem :
3080 rem feste feiertage
3090 rem :
3100 for x6=8 to 15
3110 read t,m,f1$(x6)
3120 f1(x6)=t: f3(x6)=m
3130 gosub 1790
3140 f2(x6)=wz
3150 next x6
3160 rem :
3170 rem buss und bettag
3180 rem :
3190 x6=16: tt=mc(12)+25: gosub 4260
3200 if wz=1 then wz=8
3210 tt=tt-wz-31: t=tt-mc(11)
3220 read f1$(x6): f1(x6)=t: f2(x6)=4: f3(x6)=11
3230 rem :
3240 rem sortieren
3250 rem :
3260 if z6<x6 then z6=x6
3270 for x=1 to z6
3280 mm$=str$(f3(x)): tt$="0"+mid$(str$(f1(x)),2)
3290 tt$=right$(tt$,2): v2$=mm$+tt$
3300 v2(x)=val(v2$)
3310 next x
3320 y=0
3330 for x=1 to (z6-1)
3340 if v2(x+1)>=v2(x) then goto 3410
3350 c=f1(x): f1(x)=f1(x+1): f1(x+1)=c
3360 c=f2(x): f2(x)=f2(x+1): f2(x+1)=c
3370 c=f3(x): f3(x)=f3(x+1): f3(x+1)=c
3380 c$=f1$(x): f1$(x)=f1$(x+1): f1$(x+1)=c$
3390 c=v2(x): v2(x)=v2(x+1): v2(x+1)=c
3400 y=1
3410 next x
3420 if y>0 then goto 3320
3430 rem poke 65286,27
3440 if z2$="d" then goto 3610
3450 rem :
3460 rem ausgabe bildschirm
3470 rem :
3480 print w2$;w1$: print t4$;a: print
3490 for x=1 to z6
3500 f3$=mo$(f3(x)): f2$=ta$(f2(x))
3510 if f1$(x)=f1$(x-1) then goto 3530
3520 print f1$(x);
3530 printtab(16)f1(x);tab(20)f3$;tab(29)f2$
3540 ifnot(x=16andz6>16)then3550
3541 sysat,2,24:printt3$;:gosub4352:printw2$w1$:printt4$a:print
3550 next x
3560 sysat,2,24:printt3$;:gosub4352
3570 return
3580 rem :
3590 rem ausgabe drucker
3600 rem :
3610 open1,4,7: cmd1
3620 print p1$;p2$;p3$;l2$: print
3630 print p4$;a;p5$: print
3640 for x=1 to z6
3650 f3$=mo$(f3(x)): f2$=ta$(f2(x))
3660 if f1$(x)=f1$(x-1) then goto 3680
3670 print f1$(x);
3680 print p6$;f1(x);p6$;f3$;p6$;f2$
3690 next x
3700 print: print l2$
3710 print p1$: print#1: close1
3720 return
3730 rem =========================
3740 rem subroutine trap-resume
3750 rem =========================
3760 sysat,8,14:printw3$;
3770 print "sie haben einen fehler gemacht!"
3780 sysat,2,24:printt3$;:gosub4352: (NULL) 1560
3790 rem =========================
3800 rem subroutine datumspruefung
3810 rem =========================
3820 if a=0 then f=1
3830 if a<0 or a>2299 then f=2
3840 if t<=0 or t>31 then f=3
3850 if m<=0 or m>12 then f=5: goto 3910
3860 if a>=1600 and right$(str$(a),2)="00" and a/400=int(a/400) and m=2 then goto 3890
3870 if right$(str$(a),2)<>"00" and a/4=int(a/4) and m=2 then goto 3890
3880 if t>mc(m+1)-mc(m) then f=5
3890 if t>(mc(m+1)-mc(m)+1) then f=3
3900 if a=1582 and m=10 and t>4 and t<15 then f=4
3910 return
3920 rem =========================
3930 rem subroutine fehlerangabe
3940 rem =========================
3950 sysat,8,14:printw3$;
3960 on f goto 3970,3980,3990,4000,3990
3970 print "das jahr 'null' gibt es nicht!": goto 4020
3980 print "datum nicht im programmbereich!": goto 4020
3990 print "dieses datum gibt es nicht!": goto 4020
4000 print "kalenderumstellung -": print
4010 print "dieses datum gibt es nicht!"
4020 sysat,2,24:printt3$;:gosub4352: f=0
4030 if x5=1 then print w2$;w1$;t9$;a: print w5$: x=x-1: f=0: return
4040 goto 1560
4050 rem =========================
4060 rem subroutine sonntags'buchstabe'
4070 rem =========================
4080 mm$="0"+mid$(str$(m),2)
4090 tt$="0"+mid$(str$(t),2)
4100 v1$=str$(a)+right$(mm$,2)+right$(tt$,2)
4110 x4=0
4120 x4=x4+1
4130 if val(v1$)<gj(x4) then4160
4140 if a<>1582 and a=val(left$(str$(gj(x4)),5))then sz=fb(x4):x4=x4+1:return
4150 goto4120
4160 r=a-zs(x4)
4170 sz=r-int(r/28)*28
4180 if sz=0 then sz=28
4190 sz=sb(sz): x2=sz: if len(str$(sz))<=2 then goto 4220
4200 x1=3:ifm<3thenx1=2
4210 sz=val(mid$(str$(sz),x1,1))
4220 return
4230 rem =========================
4240 rem subroutine tages'buchstabe'
4250 rem =========================
4260 tz=tt-int(tt/7)*7
4270 if tz=0 then tz=7
4280 wz=tz:if tz<sz then wz=tz+7
4290 wz=wz-sz+1
4300 return
4310 rem nachspann================
4320 b$=chr$(32):b2$=b$+b$
4330 b3$=b2$+b$:b4$=b3$+b$
4340 b5$=b4$+b$:b6$=b5$+b$
4350 b$=b5$+b5$:at=49152:re=49510:return
4351 rem ----------
4352 getx$:ifx$=""then4352
4353 return
4360 rem kalender 2300 =======ende
4370 rem =========================