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
|
PACKET stundenplanraumweiseerfassenDEFINES stundenplanraumweisespeichern,
stundenplanraumweisekopieren,stundenplanraumweisereorganisiertverlassen,
stundenplanraumweisezeigen:LET stdplmaske="ms stdplan raumweise bearb",
feldeingraum=2,feldeingakt=3,laengelv=8,laengeraum=4,laengejgst=2,trenner="�"
,raumkenndaten="c02 raeume",schuljahr="Schuljahr",halbjahr="Schulhalbjahr",
kennungraum="R",kennungparaphe="P",kennunglv="L",kennungzulzeit="ZZ",
ungueltigepar="$$$$",leererlehrer=" ",alleklst=
"�00�05�06�07�08�09�10�11�12�13�",ausgabeparam="#",maxstunden=66,
meldungplausi=57,meldungspeichern=50,meldungwarten=69,meldungdatenaufbereitet
=357,meldungfalscherraum=359,meldungkeinesugruppen=334,
meldungzuvielesugruppen=356,meldungnichtlv=360,meldunglehrerbesetzt=361,
meldungsugrupbesetzt=362,meldungzeitgesperrt=363,meldungkeinelv=326,
meldungaenderungsfehler=364,meldungkeineraeume=365,meldunguvfehler=403,
meldungstdplanveraltet=377,meldungserverfehler=376,meldungbasisinkon=378,
meldungunzulaessig=318,meldungzuvielelv=358;ROW maxstundenTEXT VAR lvausstdpl
;ROW maxstundenTEXT VAR lvvombs;TEXT VAR maskeneintragraum:="",gewhj,gewsj,
plausiraeume:=trenner+trenner,raumleiste:="",restraumleiste:="",
stdpleintraglv:="",stdpleintragjgst:="",stdpleintraglvident:="",
stdpleintraglvraum:="",stdpleintraglvpar:="",eintraglv,hjsjanhang:="";INT
VAR i,fstat,aktbspos,anzraeume:=0,hjkennalt:=-1,uvokfeld,hjkennneu:=0;BOOL
VAR spok:=TRUE ,uvok:=TRUE ,aenderungsfehler:=FALSE ;PROC
stundenplanraumweisekopieren:INT VAR aktfeld:=infeld;TEXT VAR feldinhalt:="";
IF aktfeld=67THEN fehlermeldunganwunzulELIF aktfeld=66THEN kopieren;infeld(
aktfeld)ELSE kopieren;infeld(aktfeld+2)FI ;return(1).kopieren:feldinhalt:=
standardmaskenfeld(aktfeld);standardmaskenfeld(feldinhalt,aktfeld+1);
standardfelderausgeben.fehlermeldunganwunzul:standardmeldung(
meldungunzulaessig,"").END PROC stundenplanraumweisekopieren;PROC
stundenplanraumweisereorganisiertverlassen:
stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(1);
meldungausgeben(fstat)ELSE enter(2)FI END PROC
stundenplanraumweisereorganisiertverlassen;PROC stundenplanraumweisezeigen:
maskeundinitialisierung;IF maskeneintragraum<>""THEN IF raumfalsch(
maskeneintragraum)THEN standardmeldung(meldungfalscherraum,"");return(1)ELSE
restraumleiste:=text(raumleiste,pos(raumleiste,maskeneintragraum)+laengeraum-
1);anzraeume:=length(restraumleiste)DIV laengeraum;
stundenplanraumweiseausgeben(letzterraum);FI ;ELSE restraumleiste:=raumleiste
;anzraeume:=length(restraumleiste)DIV laengeraum;IF anzraeume>=1THEN
stundenplanraumweiseausgeben(letzterraum)ELSE standardmeldung(
meldungkeineraeume,"");return(1)FI ;FI .letzterraum:subtext(restraumleiste,(
anzraeume-1)*laengeraum+1).maskeundinitialisierung:standardmeldung(
meldungwarten," ");IF akthj<>""THEN hjkennneu:=0ELSE hjkennneu:=1FI ;
merkeraum;IF hjkennneu<>hjkennaltTHEN hjkennalt:=hjkennneu;gewsj:=
schulkenndatum(schuljahr);gewhj:=schulkenndatum(halbjahr);IF hjkennneu=1THEN
geplanteshjundsjberechnen(gewhj,gewsj)FI ;stundenplanhalbjahrsetzen(gewhj,
gewsj);hjsjanhang:=" "+gewhj+". "+text(gewsj,2)+"/"+subtext(gewsj,3)+
", Raum ";holestdplanFI ;IF plausiraeume=trenner+trennerTHEN holeplausiraeume
FI .akthj:standardmaskenfeld(feldeingakt).merkeraum:maskeneintragraum:=
standardmaskenfeld(feldeingraum).holestdplan:standardmeldung(
meldungdatenaufbereitet,"");stundenplanbasisundstundenplanholen(fstat);IF
fstat<>0CAND fstat<>8THEN stundenplanbasisundstundenplanerstellen(fstat);IF
fstat<>0THEN return(1);meldungausgeben(fstat);LEAVE
stundenplanraumweisezeigenELSE stundenplanbasissichern(fstat);
stundenplansichern(fstat);IF fstat<>0THEN return(1);meldungausgeben(fstat);
LEAVE stundenplanraumweisezeigenFI FI ELIF fstat=8THEN meldungausgeben(fstat)
FI .holeplausiraeume:inittupel(dnrschluessel);statleseschleife(dnrschluessel,
raumkenndaten,"",dnrschluessel+1,dnrschluessel+2,PROC raeumeholen).END PROC
stundenplanraumweisezeigen;PROC stundenplanraumweiseausgeben(TEXT CONST raum)
:standardstartproc(stdplmaske);fuellemaske(raum);IF NOT uvokTHEN infeld(
uvokfeld);standardmeldung(meldunguvfehler," ")FI ;standardnproc.END PROC
stundenplanraumweiseausgeben;PROC fuellemaske(TEXT CONST raum):TEXT VAR
paraphelvnulleintrag:="";standardkopfmaskeaktualisieren("Stundenplan für"+
hjsjanhang+raum);maskeneintragraum:=compress(raum);uvok:=TRUE ;uvokfeld:=2;
FOR iFROM 1UPTO maxstundenREP planeintraglesen(i,kennungraum,raum,
stdpleintraglvident,stdpleintraglvraum,stdpleintraglvpar);IF
stdpleintraglvident<>""THEN lvausstdpl(i):=stdpleintraglvident;
standardmaskenfeld(stdpleintraglvident,i+1);IF stdpleintraglvpar=leererlehrer
THEN IF uvokTHEN uvok:=FALSE ;uvokfeld:=i+1FI ELSE pruefeparaphestdplanlvnull
FI ELSE lvausstdpl(i):="";standardmaskenfeld("",i+1);FI PER ;infeld(1);
standardfelderausgeben;infeld(2).pruefeparaphestdplanlvnull:
paraphelvnulleintrag:=datenzurlv(kennungparaphe,stdpleintraglvident);IF
stdpleintraglvpar<>paraphelvnulleintragTHEN planeintragvornehmen(i,
stdpleintraglvident,paraphelvnulleintrag,spok)FI .END PROC fuellemaske;BOOL
PROC raumfalsch(TEXT CONST raum):pos(plausiraeume,trenner+raum+trenner)=0END
PROC raumfalsch;PROC raeumeholen(BOOL VAR b):IF wert(dnrschluessel+1)>
raumkenndatenCOR dbstatus<>0THEN b:=TRUE ELSE plausiraeumeCAT wert(
dnrschluessel+2);plausiraeumeCAT trenner;raumleiste:=text(wert(dnrschluessel+
2),laengeraum)+raumleisteFI END PROC raeumeholen;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=8THEN standardmeldung(meldungstdplanveraltet,"");ELIF fstat=9THEN
standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgebenFI END PROC
meldungausgeben;PROC stundenplanraumweisespeichern(BOOL CONST speichern):
TEXT VAR t:="",lv:="";INT VAR posrestraumleiste;IF anzraeume=1THEN IF
speichernTHEN aenderungenvornehmen;FI ;
stundenplanraumweisereorganisiertverlassenELSE IF speichernTHEN
aenderungenvornehmen;FI ;anzraeumeDECR 1;IF anzraeumeMOD 10=0THEN
stundenplanreorganisierenundsichern(fstat)FI ;naechsterraum;return(1)FI .
naechsterraum:posrestraumleiste:=(anzraeume-1)*laengeraum+1;fuellemaske(
subtext(restraumleiste,posrestraumleiste,posrestraumleiste+laengeraum-1));IF
NOT uvokTHEN infeld(uvokfeld);standardmeldung(meldunguvfehler," ")FI .
aenderungenvornehmen:standardmeldung(meldungplausi," ");plausipruefung;
standardmeldung(meldungspeichern," ");aenderungsfehler:=FALSE ;speicherung;
IF aenderungsfehlerTHEN standardmeldung(meldungaenderungsfehler,"");return(1)
;LEAVE stundenplanraumweisespeichernELSE IF anzraeumeMOD 20=0THEN
stundenplanraumweisereorganisiertverlassenELSE stundenplansichern(fstat)FI ;
IF fstat<>0THEN meldungausgeben(fstat);return(1);LEAVE
stundenplanraumweisespeichernFI ;FI .plausipruefung:FOR iFROM 1UPTO
maxstundenREP aktbspos:=i+1;infeld(aktbspos);stdpleintraglv:=text(
standardmaskenfeld(aktbspos),laengelv);stdpleintragjgst:=text(stdpleintraglv,
laengejgst);IF keinejgstmitfuehrendernullTHEN IF stdpleintragjgst="0 "COR
stdpleintragjgst=" 0"THEN stdpleintraglv:="00"+subtext(stdpleintraglv,
laengejgst+1)ELSE stdpleintraglv:=jgstaufber(stdpleintragjgst)+subtext(
stdpleintraglv,laengejgst+1);IF NOT lastconversionokTHEN standardmeldung(
meldungnichtlv,standardmaskenfeld(aktbspos)+ausgabeparam);return(1);LEAVE
stundenplanraumweisespeichernFI ;FI ;FI ;IF compress(stdpleintraglv)<>""THEN
lvvombs(i):=stdpleintraglv;pruefezeit;pruefelvundpar;pruefesugruppenfreiELSE
lvvombs(i):="";FI ;PER .speicherung:FOR iFROM 1UPTO maxstundenREP IF
lvausstdpl(i)<>""COR lvvombs(i)<>""THEN aktbspos:=i+1;infeld(aktbspos);IF
loeschenTHEN planeintragentfernenELSE planeintragschreibenFI ;FI ;PER .
keinejgstmitfuehrendernull:keinejgstCAND keinleerereintrag.keinejgst:pos(
alleklst,trenner+stdpleintragjgst+trenner)=0.keinleerereintrag:compress(
stdpleintraglv)<>"".pruefelvundpar:t:=datenzurlv(kennungparaphe,
stdpleintraglv);IF t=ungueltigeparTHEN standardmeldung(meldungnichtlv,
standardmaskenfeld(aktbspos)+ausgabeparam);return(1);LEAVE
stundenplanraumweisespeichernELIF t<>leererlehrerTHEN IF lehrerunterricht
THEN standardmeldung(meldunglehrerbesetzt,t+ausgabeparam);return(1);LEAVE
stundenplanraumweisespeichernFI FI .lehrerunterricht:lv:=geplantelvfuer(i,
kennungparaphe,t);lv<>stdpleintraglvCAND lv<>"".pruefesugruppenfrei:IF
sugruppenichtunterrichtsfreiTHEN standardmeldung(meldungsugrupbesetzt,lv+
ausgabeparam);return(1);LEAVE stundenplanraumweisespeichernFI .
sugruppenichtunterrichtsfrei:schuelergruppenschnittbeizeit(i,kennunglv,
stdpleintraglv,lvausstdpl(i),lv,t).pruefezeit:t:=text(i);IF NOT
bezeichnungzulaessig(kennungzulzeit,t)THEN standardmeldung(
meldungzeitgesperrt,tagstunde(i,TRUE )+" Std."+ausgabeparam);return(1);LEAVE
stundenplanraumweisespeichernFI .loeschen:lvausstdpl(i)<>""CAND lvvombs(i)=""
.planeintragentfernen:planeintragloeschen(i,lvausstdpl(i),spok);IF NOT spok
THEN aenderungsfehler:=TRUE FI .planeintragschreiben:IF lvausstdpl(i)<>""
THEN planeintragloeschen(i,lvausstdpl(i),spok);IF spokTHEN
planeintragvornehmen(i,lvvombs(i),maskeneintragraum,spok);FI ;ELSE
planeintragvornehmen(i,lvvombs(i),maskeneintragraum,spok);FI ;IF NOT spok
THEN aenderungsfehler:=TRUE FI .END PROC stundenplanraumweisespeichern;END
PACKET stundenplanraumweiseerfassen;
|