1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
PACKET stundenplannachzeitenerfassenDEFINES stundenplannachzeitenspeichern,
stundenplannachzeitenzurueckzummenue,stdnraustagstd,
stundenplannachzeitenzeigen:LET stdplmaske="ms stdplan nach zeit bearb",
feldeingtag=2,feldeingstd=3,feldeingakt=4,laengelv=8,laengeraum=4,trenner="�"
,schuljahr="Schuljahr",halbjahr="Schulhalbjahr",kennungraum="R",
kennungparaphe="P",kennunglv="L",kennungzulzeit="ZZ",leerelv=" ",
leererraum=" ",leererlehrer=" ",ausgabeparam="#",maxeintraege=60,
erstestunde=1,letztestunde=66,stdprotag=12,meldungzeitgesperrt=363,
meldungnichtspeichern=63,meldungraumangloeschen=396,meldungraumbesetzt=370,
meldungplausi=57,meldungnur60lv=394,meldungspeichern=50,meldungwarten=69,
meldungdatenaufbereitet=357,meldungfalschertag=385,meldungfalschestd=54,
meldungfalscherraum=359,meldungkeinesugruppen=334,meldungzuvielesugruppen=356
,meldungnichtlv=360,meldunglehrerbesetzt=361,meldungsugrupbesetzt=362,
meldungkeinelv=326,meldungaenderungsfehler=364,meldunguvfehler=403,#
meldungstdplanveraltet=377,#meldungserverfehler=376,meldungbasisinkon=378,
meldungzuvielelv=358;ROW maxeintraegeTEXT VAR eintragausstdpl;TEXT VAR
maskeneintragtag:="",maskeneintragstd:="",gewhj,gewsj,allelv,alleraeume,
alleparaphen,uvoklv,lveintrag,raumeintrag,hjsjanhang:="",altereintrag:="";
TEXT VAR alletage:="��01�02�03�04�05�06�1�2�3�4�5�6�MO�DI�MI�DO�FR�SA�"+
"�mo�di�mi�do�fr�sa�Mo�Di�Mi�Do�Fr�Sa�"+
"� 1� 2� 3� 4� 5� 6�1 �2 �3 �4 �5 �6 �",allestden:=
"��01�02�03�04�05�06�07�08�09�10�11�12�13� 1� 2� 3�"+
"� 4� 5� 6� 7� 8� 9�1 �2 �3 �4 �5 �6 �7 �8 �9 �"+"1�2�3�4�5�6�7�8�9�";INT
VAR i,fstat,abstd:=0,uvokfeld,hjkennalt:=-1,hjkennneu:=0,letztebearbstd:=66;
BOOL VAR spok:=TRUE ,uvok:=TRUE ,anzlvok:=TRUE ,stdplzeilegeloescht:=FALSE ,
aenderungsfehler:=FALSE ;INT PROC stdnraustagstd(TEXT CONST tag,std):INT VAR
itag:=int(tag),istd;IF lastconversionokTHEN IF itag=0COR itag=1THEN itag:=1
FI ELSE IF tag="MO"COR tag="mo"COR tag="Mo"COR tag=""THEN itag:=1ELIF tag=
"DI"COR tag="di"COR tag="Di"THEN itag:=2ELIF tag="MI"COR tag="mi"COR tag="Mi"
THEN itag:=3ELIF tag="DO"COR tag="do"COR tag="Do"THEN itag:=4ELIF tag="FR"
COR tag="fr"COR tag="Fr"THEN itag:=5ELSE itag:=6FI FI ;IF std=""THEN istd:=1
ELSE istd:=int(std)FI ;(itag-1)*stdprotag+istdEND PROC stdnraustagstd;PROC
stundenplannachzeitenreorganisiertverlassen:
stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(1);
meldungausgeben(fstat)ELSE enter(2)FI END PROC
stundenplannachzeitenreorganisiertverlassen;PROC stundenplannachzeitenzeigen:
standardmeldung(meldungwarten," ");maskeneintragtag:=standardmaskenfeld(
feldeingtag);maskeneintragstd:=standardmaskenfeld(feldeingstd);abstd:=
stdnraustagstd(maskeneintragtag,maskeneintragstd);prueftag;pruefstd;IF akthj
<>""THEN hjkennneu:=0ELSE hjkennneu:=1FI ;IF hjkennneu<>hjkennaltTHEN
hjkennalt:=hjkennneu;gewsj:=schulkenndatum(schuljahr);gewhj:=schulkenndatum(
halbjahr);IF hjkennneu=1THEN geplanteshjundsjberechnen(gewhj,gewsj)FI ;
stundenplanhalbjahrsetzen(gewhj,gewsj);ermittleletztestunde;hjsjanhang:=" "+
gewhj+". "+text(gewsj,2)+"/"+subtext(gewsj,3)+", Raum ";holestdplanFI ;
pruefzeitzulaessig;stundenplannachzeitenausgeben.akthj:standardmaskenfeld(
feldeingakt).holestdplan:standardmeldung(meldungdatenaufbereitet,"");
stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN
stundenplanbasisundstundenplanerstellen(fstat);IF fstat<>0THEN return(1);
meldungausgeben(fstat);LEAVE stundenplannachzeitenzeigenELSE
stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN
return(1);meldungausgeben(fstat);LEAVE stundenplannachzeitenzeigenFI FI ELIF
fstat=8THEN meldungausgeben(fstat)FI .prueftag:IF pos(alletage,trenner+
maskeneintragtag+trenner)=0THEN return(1);infeld(feldeingtag);standardmeldung
(meldungfalschertag,"");LEAVE stundenplannachzeitenzeigenFI .pruefstd:IF pos(
allestden,trenner+maskeneintragstd+trenner)=0THEN return(1);infeld(
feldeingstd);standardmeldung(meldungfalschestd,"");LEAVE
stundenplannachzeitenzeigenELIF abstdDIV stdprotag=6THEN IF abstd-60>6THEN
return(1);infeld(feldeingstd);standardmeldung(meldungfalschestd,"");LEAVE
stundenplannachzeitenzeigenFI ;FI .pruefzeitzulaessig:IF NOT
bezeichnungzulaessig(kennungzulzeit,text(abstd))THEN return(1);infeld(
feldeingtag);standardmeldung(meldungzeitgesperrt,tagstunde(abstd,FALSE )+"."+
ausgabeparam);LEAVE stundenplannachzeitenzeigenFI .ermittleletztestunde:FOR i
FROM letztestundeDOWNTO erstestundeREP IF bezeichnungzulaessig(kennungzulzeit
,text(i))THEN letztebearbstd:=i;LEAVE ermittleletztestundeFI PER .END PROC
stundenplannachzeitenzeigen;PROC stundenplannachzeitenausgeben:
standardstartproc(stdplmaske);fuellemaske;IF NOT anzlvokTHEN standardmeldung(
meldungnur60lv,tagstunde(abstd,TRUE )+ausgabeparam)ELIF NOT uvokTHEN infeld(
uvokfeld);standardmeldung(meldunguvfehler," ");FI ;standardnproc.END PROC
stundenplannachzeitenausgeben;PROC fuellemaske:TEXT VAR lvimstdplan,
raumimstdplan,parimstdplan;INT VAR poslv,posraum,index;stdplzeilegeloescht:=
FALSE ;allelv:=datenderzeit(abstd,kennunglv);alleraeume:=datenderzeit(abstd,
kennungraum);alleparaphen:=datenderzeit(abstd,kennungparaphe);
standardkopfmaskeaktualisieren("Stundenplan für "+tagstunde(abstd,FALSE )+
". Stunde");uvok:=TRUE ;anzlvok:=TRUE ;uvokfeld:=2;poslv:=1;posraum:=1;IF
length(allelv)>maxeintraege*laengelvTHEN allelv:=text(allelv,maxeintraege*
laengelv);alleraeume:=text(alleraeume,maxeintraege*laengeraum);anzlvok:=
FALSE FI ;FOR iFROM 1UPTO maxeintraegeREP index:=i*2;IF poslv<length(allelv)
THEN lvimstdplan:=subtext(allelv,poslv,poslv+7);raumimstdplan:=subtext(
alleraeume,posraum,posraum+3);parimstdplan:=subtext(alleparaphen,posraum,
posraum+3);standardmaskenfeld(compress(lvimstdplan),index);standardmaskenfeld
(compress(raumimstdplan),index+1);eintragausstdpl(i):=lvimstdplan+
raumimstdplan;IF parimstdplan=leererlehrerCAND uvokTHEN uvokfeld:=index;uvok
:=FALSE FI ;poslvINCR 8;posraumINCR 4;ELSE standardmaskenfeld("",index);
standardmaskenfeld("",index+1);eintragausstdpl(i):=""FI ;PER ;infeld(1);
standardfelderausgeben;infeld(2).END PROC fuellemaske;PROC meldungausgeben(
INT VAR fstat):IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF
fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN
standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung(
meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF
fstat=9THEN standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgeben
FI END PROC meldungausgeben;PROC stundenplannachzeitenspeichern(BOOL CONST
speichern):TEXT VAR par:="",lv:="",t1:="",t2:="";INT VAR pos:=1;IF abstd=
letztebearbstdTHEN IF speichernCAND anzlvokTHEN aenderungenvornehmen;ELIF
stdplzeilegeloeschtTHEN alteeintraegeschreibenFI ;
stundenplannachzeitenreorganisiertverlassenELSE IF speichernCAND anzlvokTHEN
aenderungenvornehmen;ELIF stdplzeilegeloeschtTHEN alteeintraegeschreibenFI ;
IF abstdMOD 12=0THEN stundenplanreorganisierenundsichern(fstat)FI ;
naechstestd;meldungenbeifehler;return(1)FI .alteeintraegeschreiben:
standardmeldung(meldungnichtspeichern,"");loescheinhaltaktstundenplanzeile;
FOR iFROM 1UPTO maxeintraegeREP IF eintragausstdpl(i)<>""THEN
planeintragvornehmen(abstd,text(eintragausstdpl(i),laengelv),subtext(
eintragausstdpl(i),laengelv+1),spok)ELSE LEAVE alteeintraegeschreibenFI PER .
loescheinhaltaktstundenplanzeile:stdplzeilegeloescht:=TRUE ;t1:=datenderzeit(
abstd,kennunglv);pos:=1;WHILE pos<length(t1)REP planeintragloeschen(abstd,
subtext(t1,pos,pos+laengelv-1),spok);posINCR laengelvPER .naechstestd:FOR i
FROM abstd+1UPTO letztebearbstdREP IF bezeichnungzulaessig(kennungzulzeit,
text(i))THEN abstd:=i;fuellemaske;LEAVE naechstestdELSE abstd:=letztebearbstd
FI ;PER .meldungenbeifehler:IF NOT anzlvokTHEN standardmeldung(meldungnur60lv
,tagstunde(abstd,TRUE )+ausgabeparam)ELIF NOT uvokTHEN infeld(uvokfeld);
standardmeldung(meldunguvfehler," ")FI .aenderungenvornehmen:standardmeldung(
meldungplausi," ");aenderungsfehler:=FALSE ;plausipruefungundspeicherung;IF
aenderungsfehlerTHEN standardmeldung(meldungaenderungsfehler,"");return(1);
LEAVE stundenplannachzeitenspeichernELSE standardmeldung(meldungspeichern," "
);IF abstdMOD 12=0THEN stundenplannachzeitenreorganisiertverlassenELSE
stundenplansichern(fstat)FI ;IF fstat<>0THEN meldungausgeben(fstat);return(1)
;LEAVE stundenplannachzeitenspeichernFI ;FI .plausipruefungundspeicherung:
loescheinhaltaktstundenplanzeile;FOR iFROM 1UPTO maxeintraegeREP infeld(i*2);
altereintrag:=eintragausstdpl(i);lveintrag:=standardmaskenfeld(i*2);IF (
lveintragSUB 1)=" "THEN lveintrag:=jgstaufber(text(lveintrag,2))+subtext(
lveintrag,3)FI ;lveintrag:=text(lveintrag,laengelv);raumeintrag:=text(
standardmaskenfeld(i*2+1),laengeraum);IF lveintrag+raumeintrag<>leerelv+
leererraumTHEN infeld(i*2);pruefelvleerundraum;pruefelvgueltig;
prueferaumgueltig;pruefelehrerfrei;prueferaumfrei;pruefesugruppenfrei;
planeintragschreibenFI ;PER .pruefelvleerundraum:IF lveintrag=leerelvCAND
raumeintrag<>leererraumTHEN standardmeldung(meldungraumangloeschen,"");return
(1);LEAVE stundenplannachzeitenspeichernFI .pruefelvgueltig:IF NOT
bezeichnungzulaessig(kennunglv,lveintrag)THEN standardmeldung(meldungnichtlv,
lveintrag+ausgabeparam);return(1);LEAVE stundenplannachzeitenspeichernFI .
prueferaumgueltig:IF raumeintrag<>leererraumTHEN IF NOT bezeichnungzulaessig(
kennungraum,raumeintrag)THEN standardmeldung(meldungfalscherraum,"");infeld(i
*2+1);return(1);LEAVE stundenplannachzeitenspeichernFI FI .pruefelehrerfrei:
par:=datenzurlv(kennungparaphe,lveintrag);IF par<>leererlehrerTHEN IF
lehrerunterrichtTHEN standardmeldung(meldunglehrerbesetzt,par+ausgabeparam);
return(1);LEAVE stundenplannachzeitenspeichernFI FI .lehrerunterricht:lv:=
geplantelvfuer(abstd,kennungparaphe,par);lv<>lveintragCAND lv<>"".
prueferaumfrei:IF raumeintrag<>leererraumTHEN IF inraumunterrichtTHEN
standardmeldung(meldungraumbesetzt,"");infeld(i*2+1);return(1);LEAVE
stundenplannachzeitenspeichernFI FI .inraumunterricht:t1:=geplantelvfuer(
abstd,kennungraum,raumeintrag);t1<>lveintragCAND t1<>"".pruefesugruppenfrei:
IF sugruppenichtunterrichtsfreiTHEN standardmeldung(meldungsugrupbesetzt,t1+
ausgabeparam);return(1);LEAVE stundenplannachzeitenspeichernFI .
sugruppenichtunterrichtsfrei:schuelergruppenschnittbeizeit(abstd,kennunglv,
lveintrag,text(altereintrag,8),t1,t2).planeintragschreiben:
planeintragvornehmen(abstd,lveintrag,raumeintrag,spok);IF NOT spokTHEN
aenderungsfehler:=TRUE FI .END PROC stundenplannachzeitenspeichern;PROC
stundenplannachzeitenzurueckzummenue:INT VAR pos;TEXT VAR t1;standardmeldung(
meldungnichtspeichern,"");IF stdplzeilegeloeschtTHEN alteeintraegeschreiben
FI ;stundenplanreorganisierenundsichern(fstat);enter(2).
alteeintraegeschreiben:loescheinhaltaktstundenplanzeile;FOR iFROM 1UPTO
maxeintraegeREP IF eintragausstdpl(i)<>""THEN planeintragvornehmen(abstd,text
(eintragausstdpl(i),laengelv),subtext(eintragausstdpl(i),laengelv+1),spok)
ELSE LEAVE alteeintraegeschreibenFI PER .loescheinhaltaktstundenplanzeile:t1
:=datenderzeit(abstd,kennunglv);pos:=1;WHILE pos<length(t1)REP
planeintragloeschen(abstd,subtext(t1,pos,pos+laengelv-1),spok);posINCR
laengelvPER .END PROC stundenplannachzeitenzurueckzummenue;END PACKET
stundenplannachzeitenerfassen;
|