summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen
blob: 634545caec2d9c4fd9bf15cc077863513f4c48fe (plain)
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
PACKET stundenplanimdialogerstellenundaendernDEFINES stupidstart,
stupidbearbeitendesstundenplans,stupidspeicherndieserzeitenfuerkopplung,
stupidspeichernderraeumeundzeitenderlv,stupidkopierenderraumangabe,
stupidnichtaendernweitermitkopplung,
stupidnichtaendernweitermitnaechsterkopplung,stupidstoerendelvlisten,
stupidraumbelegunglisten,stupidlistedrucken:LET maskeeingang=
"ms erf stuplan im dialog 0";LET maskebearb1="ms erf stuplan im dialog 1";
LET maskebearb2="ms erf stuplan im dialog 2";LET fnrkopplungbs0=2,
fnrakthalbjahr=3,fnrmitzeitwuenschen=4,fnrkopplungbs1=2,fnrwstdmaxbs1=3,
felderbistabbeginn=2,fnrersteseingabefeldbs1=4,felderproeintragbs1=2,
fnrletztesfeldbs1=135,fnrlehrveranstaltbs2=2,fnrwstdbs2=3,fnrparaphebs2=4,
fnrklassengruppenbeginn=5,fnrraumwunsch=9,felderbistabbeginnbs2=10,
fnrersterraumbs2=12,fnrletztesfeldbs2=142,felderproeintragbs2=2;INT VAR 
fnrersteseingabefeldbs2;INT VAR ifnr;LET meldnrbittewarten=69,
meldnrdatenwurdengespeichert=302,meldnrdatenwurdennichtgespeichert=303,
meldnrungueltigekopplung=325,meldnrkeinelv=326,meldnrkeinesugruppen=334,
meldnrzuvielesugruppen=356,meldnrdatenaufbereitet=357,meldnrzuvielelv=358,
meldnrungueltigerraum=359,meldnrzuordnungwegensperrungunmoegl=368,
meldnrzuvielezuordnungen=369,meldnrraumschonbelegt=370,
meldnrstundenplanserverfehlt=376,meldnrbasisalt=377,meldnrbasisinkons=378,
meldnrkeinestoerendenlv=371;FILE VAR ausgabeliste;LET liste1=
"störende Lehrveranstaltungen",liste2="Raumbelegungen";TEXT VAR zeigdatei;
LET raumgruppendatei="Datei mit Raumgruppen";FILE VAR datraumgruppen;LET 
wunschraumdatei="Datei mit Raumwünschen";FILE VAR datraumwunsch;LET 
zwdateiname="Datei mit Zeitwünschen";FILE VAR zwdatei;LET laengelv=8,
laengefachkenn=6,laengekopplung=8,laengeparaphe=4,laengeraum=4,laengewstd=2,
laengesugruppe=6,laengeklagruppe=4,laengenfaktor=2;LET erstestd=1,letztestd=
66;LET kennzlehrergesperrt="L",kennzzeitgesperrt="X",kennzraumgesperrt="R",
kennzschuelergesperrt="S",kennzzeitrastersperrung="x",kennzlehrerwunsch="l",
kennzraumevtlgesperrt="r",kennzverplant="x",kennzkeinfreierwunschraum="x",
kennzraumungeprueft="-";LET kennungkopplung="K",kennungparaphe="P",kennunglv=
"L",kennungraum="R",kennungwunschraum="RW",kennungersatzraum="RE";LET 
stundeverplant="1",stundefrei="0",stundefehlerhaft="$";LET textschulj=
"Schuljahr",texthalbj="Schulhalbjahr";LET raumkenndaten="c02 raeume";LET 
posraeumeinrgzeile=5;LET raumplatzhalter="    ",lehrerplatzhalter="    ",
blankzeichen=" ",trennstrich="/",vorschlagzeichen="*",textueberschriftanhang=
" für Halbjahr ",textueberschriftbs2="Raumzuordnung in Kopplung ";LET zwbezug
="P";LET minusdrei="-3";INT VAR fstatusstuplan;INT VAR i;INT VAR 
maxwochenstunden;TEXT VAR aktschulj:="",akthalbj:="",gewschulj,gewhalbj,
behandeltesschulj:="",behandelteshalbj:="";TEXT VAR kopplung,ankreuzung,
eintrag,lv,paraphe,raum,raumhinweis,raumzeile,raumgruppenzeile,zwdateizeile,
raumbelegliste,raumsetzliste,alleraeume:="",paraphenmitzeitwuenschen:="",
sugruppen;INT VAR anzahlraeume,posraum;INT VAR wstdderlv;TEXT VAR 
kopplungszeiten,schuelerschnittzeiten,zeitrasterleiste:="",
halbjderzeitrasterleiste:="",zeitwunschleiste,halbjderzeitwuensche:="",
lvliste,paraphenliste;INT VAR ilv,anzahllv;TEXT VAR suchlv,suchraum,
suchparaphe;TEXT VAR ueberschrift,ueberschriftbs1:="";BOOL VAR 
mitzeitwuenschen,meldungzufehlergezeigt;TEXT VAR wertfeld2:="",wertfeld3:="",
wertfeld4:="";PROC stupidstart:standardstartproc(maskeeingang);
wertedeseingangsbildschirmsholen;infeld(fnrkopplungbs0);
standardfelderausgeben;infeld(fnrkopplungbs0);standardnprocEND PROC 
stupidstart;PROC stupidbearbeitendesstundenplans:
schulhalbjahrbestimmenundstundenplanholen;IF fstatusstuplan<>0THEN 
stundenplanfehlerbehandeln;return(1)ELSE suchekopplung;IF 
keinegueltigekopplungTHEN standardmeldung(meldnrungueltigekopplung,"");return
(1)ELSE wertedeseingangsbildschirmsmerken;standardstartproc(maskebearb1);
kopplungzeigen;standardnprocFI FI .schulhalbjahrbestimmenundstundenplanholen:
IF akthalbj=""THEN akthalbj:=schulkenndatum(texthalbj);aktschulj:=
schulkenndatum(textschulj);FI ;gewhalbj:=akthalbj;gewschulj:=aktschulj;IF 
standardmaskenfeld(fnrakthalbjahr)=""THEN geplanteshjundsjberechnen(gewhalbj,
gewschulj)FI ;mitzeitwuenschen:=standardmaskenfeld(fnrmitzeitwuenschen)<>"";
IF mitzeitwuenschenTHEN IF paraphenmitzeitwuenschen=""COR gewhalbj<>
halbjderzeitwuenscheTHEN halbjderzeitwuensche:=gewhalbj;standardmeldung(
meldnrbittewarten,"");dateimitzeitwuenschenzusammenstellenFI FI ;IF NOT (
gewhalbj=behandelteshalbjAND gewschulj=behandeltesschulj)THEN 
behandelteshalbj:=gewhalbj;behandeltesschulj:=gewschulj;
stundenplanhalbjahrsetzen(gewhalbj,gewschulj);standardmeldung(
meldnrdatenaufbereitet,"");stundenplanbasisundstundenplanholen(fstatusstuplan
);IF fstatusstuplan=0THEN stundenplanreorganisierenundsichern(fstatusstuplan)
ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt,"");
stundenplanreorganisierenundsichern(fstatusstuplan)ELSE 
stundenplanbasisundstundenplanerstellen(fstatusstuplan);IF fstatusstuplan=0
THEN stundenplanbasissichern(fstatusstuplan);stundenplansichern(
fstatusstuplan)FI FI FI .stundenplanfehlerbehandeln:IF fstatusstuplan=2THEN 
standardmeldung(meldnrstundenplanserverfehlt,"")ELIF fstatusstuplan=4THEN 
standardmeldung(meldnrkeinesugruppen,"")ELIF fstatusstuplan=5THEN 
standardmeldung(meldnrzuvielesugruppen,"")ELIF fstatusstuplan=6THEN 
standardmeldung(meldnrkeinelv,"")ELIF fstatusstuplan=7THEN standardmeldung(
meldnrzuvielelv,"")ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt,
"")ELIF fstatusstuplan=9THEN standardmeldung(meldnrbasisinkons,"")FI .
suchekopplung:kopplung:=standardmaskenfeld(fnrkopplungbs0);putwert(fnrlvsj,
gewschulj);putwert(fnrlvhj,gewhalbj);putwert(fnrlvkopplung,kopplung);search(
ixlvsjhjkopp,FALSE ).END PROC stupidbearbeitendesstundenplans;BOOL PROC 
keinegueltigekopplung:dbstatus<>0OR wert(fnrlvhj)<>gewhalbjOR wert(fnrlvsj)<>
gewschuljEND PROC keinegueltigekopplung;PROC 
dateimitzeitwuenschenzusammenstellen:forget(zwdateiname,quiet);zwdatei:=
sequentialfile(output,zwdateiname);paraphenmitzeitwuenschen:="";inittupel(
dnrzeitwuensche);putwert(fnrzwbezug,zwbezug);statleseschleife(dnrzeitwuensche
,gewschulj,gewhalbj,fnrzwsj,fnrzwhj,PROC zeitwunschlesen)END PROC 
dateimitzeitwuenschenzusammenstellen;PROC zeitwunschlesen(BOOL VAR b):IF 
dbstatus<>0OR wert(fnrzwsj)<>gewschuljOR wert(fnrzwhj)<>gewhalbjOR wert(
fnrzwbezug)>zwbezugTHEN b:=TRUE ELSE paraphenmitzeitwuenschenCAT text(wert(
fnrzwbezugsobjekt),laengeparaphe);zwdateizeile:=wert(fnrzwbestimmtewuensche);
putline(zwdatei,zwdateizeile)FI END PROC zeitwunschlesen;PROC kopplungzeigen:
ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift);
standardmeldung(meldnrbittewarten,"");datenbestimmenundausgeben;infeld(
fnrersteseingabefeldbs1).ueberschriftzeilezusammensetzen:IF ueberschriftbs1=
""THEN ueberschriftbs1:=text(vergleichsknoten)FI ;ueberschrift:=
ueberschriftbs1;ueberschriftCAT textueberschriftanhang;ueberschriftCAT 
gewhalbj;ueberschriftCAT blankzeichen;ueberschriftCAT subtext(gewschulj,1,2);
ueberschriftCAT trennstrich;ueberschriftCAT subtext(gewschulj,3,4).
datenbestimmenundausgeben:kopplung:=wert(fnrlvkopplung);
maxwochenstundenbestimmen;zeitrasterleistefestlegen;kopplungszeitenfestlegen;
lvlisteholen;paraphenlisteundwunschraumlisteholen;schuelerschnittzeitenholen;
zeitwunschleistefestlegen;standardmaskenfeld(kopplung,fnrkopplungbs1);
standardmaskenfeld(text(maxwochenstunden),fnrwstdmaxbs1);
meldungzufehlergezeigt:=FALSE ;FOR iFROM erstestdUPTO letztestdREP 
fuelleeintrag;standardmaskenfeld(ankreuzung,i*felderproeintragbs1+
felderbistabbeginn);standardmaskenfeld(text(eintrag,3),i*felderproeintragbs1+
felderbistabbeginn+1);PER ;IF meldungzufehlergezeigtTHEN infeld(2)ELSE infeld
(1)FI ;standardfelderausgeben.maxwochenstundenbestimmen:maxwochenstunden:=0;
putwert(fnrlvkopplung,kopplung);putintwert(fnrlvjgst,0);statleseschleife(
ixlvsjhjkopp,gewschulj,gewhalbj,fnrlvsj,fnrlvhj,PROC maxwochenstdberechnen).
fuelleeintrag:IF (kopplungszeitenSUB i)=stundeverplantTHEN ankreuzung:=
kennzverplantELSE ankreuzung:=""FI ;eintrag:="";IF (zeitrasterleisteSUB i)=
kennzzeitrastersperrungTHEN eintragCAT kennzzeitgesperrtELSE 
weiterepruefungenzueintragFI .weiterepruefungenzueintrag:IF 
istlehrerzurzeitverplantTHEN eintragCAT kennzlehrergesperrtELSE IF 
mitzeitwuenschenCAND (zeitwunschleisteSUB i)=stundeverplantTHEN eintragCAT 
kennzlehrerwunschFI FI ;IF (schuelerschnittzeitenSUB i)=stundeverplantTHEN 
eintragCAT kennzschuelergesperrtELIF (schuelerschnittzeitenSUB i)=
stundefehlerhaftCAND NOT meldungzufehlergezeigtTHEN standardmeldung(
meldnrbasisinkons,"");meldungzufehlergezeigt:=TRUE FI ;IF eintrag=
kennzlehrergesperrt+kennzschuelergesperrtTHEN eintragCAT kennzraumungeprueft
ELSE raumhinweis:="";prueferaumbelegung;eintragCAT raumhinweisFI .
kopplungszeitenfestlegen:kopplungszeiten:=allezeitenvon(kennungkopplung,
kopplung).lvlisteholen:lvliste:=allelvmit(kennungkopplung,kopplung);anzahllv
:=length(lvliste)DIV laengelv.schuelerschnittzeitenholen:
schuelerschnittzeiten:=schuelergruppenschnittallezeiten(kennungkopplung,
kopplung).paraphenlisteundwunschraumlisteholen:paraphenliste:="";
raumgruppeninraumgruppendateiauslesen;forget(wunschraumdatei,quiet);
datraumwunsch:=sequentialfile(output,wunschraumdatei);INT VAR lvpos:=1,iraum;
FOR ilvFROM 1UPTO anzahllvREP lv:=subtext(lvliste,lvpos,lvpos+laengelv-1);
paraphenlisteCAT datenzurlv(kennungparaphe,lv);raumzeile:="";raum:=datenzurlv
(kennungwunschraum,lv);IF bezeichnungzulaessig(kennungraum,compress(raum))
THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;raum:=
datenzurlv(kennungersatzraum,lv);IF bezeichnungzulaessig(kennungraum,compress
(raum))THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;putline
(datraumwunsch,raumzeile);lvpos:=lvpos+laengelvPER .
raumgruppeninraumgruppendateiauslesen:IF NOT exists(raumgruppendatei)THEN 
datraumgruppen:=sequentialfile(output,raumgruppendatei);inittupel(
dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp,
fnrrgraeume,PROC raumgruppeindateischreiben)FI .raeumederraumgruppe:
datraumgruppen:=sequentialfile(modify,raumgruppendatei);toline(datraumgruppen
,1);col(datraumgruppen,1);WHILE NOT eof(datraumgruppen)REP downety(
datraumgruppen,raum);IF col(datraumgruppen)=1CAND NOT eof(datraumgruppen)
THEN readrecord(datraumgruppen,raumgruppenzeile);LEAVE raeumederraumgruppe
WITH subtext(raumgruppenzeile,posraeumeinrgzeile)ELSE col(datraumgruppen,col(
datraumgruppen)+1)FI ;PER ;"".prueferaumbelegung:BOOL VAR vorlaeufiggesetzt;
raumbelegliste:=datenderzeit(i,kennungraum);IF raumbelegliste<>""THEN 
raumsetzliste:="";datraumwunsch:=sequentialfile(input,wunschraumdatei);ilv:=0
;WHILE NOT eof(datraumwunsch)REP getline(datraumwunsch,raumzeile);ilv:=ilv+1;
IF raumzeile<>""THEN anzahlraeume:=length(raumzeile)DIV laengeraum;
vorlaeufiggesetzt:=FALSE ;posraum:=1;FOR iraumFROM 1UPTO anzahlraeumeREP raum
:=subtext(raumzeile,posraum,posraum+laengeraum-1);prueferaum;posraum:=posraum
+laengeraumUNTIL vorlaeufiggesetztPER ;IF NOT vorlaeufiggesetztTHEN 
raumhinweis:=kennzraumevtlgesperrtFI ;FI ;PER ;FI .prueferaum:IF suchpos(
raumbelegliste,raum,laengeraum)>0THEN lv:=subtext(lvliste,(ilv-1)*laengelv+1,
ilv*laengelv);planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe
);IF suchlv<>lvTHEN IF iraum=anzahlraeumeTHEN raumhinweis:=kennzraumgesperrt;
LEAVE prueferaumbelegungFI ELSE vorlaeufiggesetzt:=TRUE FI ELSE IF suchpos(
raumsetzliste,raum,laengeraum)=0THEN raumsetzliste:=raum;vorlaeufiggesetzt:=
TRUE FI FI .zeitwunschleistefestlegen:IF mitzeitwuenschenTHEN zwdatei:=
sequentialfile(modify,zwdateiname);zeitwunschleiste:=letztestd*stundefrei;
INT VAR fundpos,posparaphe:=1;WHILE posparaphe<length(paraphenliste)REP 
suchparaphe:=subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1);
fundpos:=suchpos(paraphenmitzeitwuenschen,suchparaphe,laengeparaphe);IF 
fundpos>0THEN zeitwuenschezerlegenFI ;posparapheINCR laengeparaphe;PER ;FI .
zeitwuenschezerlegen:INT VAR izeile:=(fundpos+3)DIV laengeparaphe;toline(
zwdatei,izeile);readrecord(zwdatei,zwdateizeile);fundpos:=pos(zwdateizeile,
minusdrei,1);WHILE fundpos>0REP fundposINCR 1;replace(zeitwunschleiste,
fundposDIV 2,stundeverplant);fundpos:=pos(zwdateizeile,minusdrei,fundpos)PER 
.END PROC kopplungzeigen;PROC raumgruppeindateischreiben(BOOL VAR b):IF 
dbstatus=0THEN putline(datraumgruppen,text(wert(fnrrgraumgrp),laengeraum)+
wert(fnrrgraeume))ELSE b:=TRUE FI END PROC raumgruppeindateischreiben;PROC 
maxwochenstdberechnen(BOOL VAR b):IF dbstatus=0CAND wert(fnrlvkopplung)=
kopplungCAND wert(fnrlvsj)=gewschuljCAND wert(fnrlvhj)=gewhalbjTHEN 
maxwochenstunden:=max(intwert(fnrlvwochenstd),maxwochenstunden)ELSE b:=TRUE 
FI END PROC maxwochenstdberechnen;PROC zeitrasterleistefestlegen:IF gewhalbj
<>halbjderzeitrasterleisteOR zeitrasterleiste=""THEN zeitrasterleiste:=
letztestd*blankzeichen;inittupel(dnrzeitraster);statleseschleife(
dnrzeitraster,gewschulj,gewhalbj,fnrzrsj,fnrzrhj,PROC 
erstellezeitrasterleiste);halbjderzeitrasterleiste:=gewhalbj;FI END PROC 
zeitrasterleistefestlegen;PROC erstellezeitrasterleiste(BOOL VAR b):IF wert(
fnrzrsj)<>gewschuljCOR wert(fnrzrhj)<>gewhalbjCOR dbstatus<>0THEN b:=TRUE 
ELSE IF wert(fnrzrkennungteil)=kennzzeitrastersperrungTHEN replace(
zeitrasterleiste,intwert(fnrzrtagstunde),kennzzeitrastersperrung)FI FI END 
PROC erstellezeitrasterleiste;BOOL PROC istlehrerzurzeitverplant:TEXT VAR 
kopplungenderzeit:="";TEXT VAR lehrerderzeit:=datenderzeit(i,kennungparaphe);
IF lehrerderzeit=""COR paraphenliste=lehrerplatzhalterTHEN LEAVE 
istlehrerzurzeitverplantWITH FALSE FI ;INT VAR posparaphe:=1;INT VAR 
poslehrer,poskopplung;WHILE posparaphe<=length(paraphenliste)REP paraphe:=
subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1);IF paraphe<>
lehrerplatzhalterTHEN poslehrer:=suchpos(lehrerderzeit,paraphe,laengeparaphe)
;IF poslehrer>0THEN IF kopplungenderzeit=""THEN kopplungenderzeit:=
datenderzeit(i,kennungkopplung)FI ;poskopplung:=(poslehrer-1)*laengenfaktor+1
;IF subtext(kopplungenderzeit,poskopplung,poskopplung+laengekopplung-1)<>text
(kopplung,laengekopplung)THEN LEAVE istlehrerzurzeitverplantWITH TRUE FI FI ;
FI ;posparaphe:=posparaphe+laengeparaphePER ;FALSE END PROC 
istlehrerzurzeitverplant;PROC stupidstoerendelvlisten:TEXT VAR prueflv,
pruefkopplung,pruefparaphe,lvderzeit,kopplungenderzeit,paraphenderzeit,
vglkopplung,auszeile;INT VAR feldnr:=infeld;IF 
sperrungderzeitdurchlehreroderschuelerTHEN erstelledateimitstoerendenlv;
zeigedatei(zeigdatei,"");ELSE standardmeldung(meldnrkeinestoerendenlv,"");
return(1)FI .sperrungderzeitdurchlehreroderschueler:pos(standardmaskenfeld(
feldnr+1),kennzlehrergesperrt)>0OR pos(standardmaskenfeld(feldnr+1),
kennzschuelergesperrt)>0.erstelledateimitstoerendenlv:i:=(feldnr-
felderbistabbeginn)DIV felderproeintragbs1;zeigdatei:=liste1;forget(zeigdatei
,quiet);ausgabeliste:=sequentialfile(output,zeigdatei);auszeile:="Kopplung ";
auszeileCAT kopplung;auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE );
auszeileCAT ".Stunde verhindert durch:";putline(ausgabeliste,auszeile);line(
ausgabeliste);auszeile:="Lehrveranst. (Kopplung) Lehrer Klassengruppen";
putline(ausgabeliste,auszeile);lvderzeit:=datenderzeit(i,kennunglv);
kopplungenderzeit:=datenderzeit(i,kennungkopplung);paraphenderzeit:=
datenderzeit(i,kennungparaphe);INT VAR poslv:=1,poskopplung:=1,posparaphe:=1;
vglkopplung:=text(kopplung,laengekopplung);WHILE poslv<=length(lvderzeit)REP 
pruefkopplung:=subtext(kopplungenderzeit,poskopplung,poskopplung+
laengekopplung-1);IF pruefkopplung<>vglkopplungTHEN pruefparaphe:=subtext(
paraphenderzeit,posparaphe,posparaphe+laengeparaphe-1);prueflv:=subtext(
lvderzeit,poslv,poslv+laengelv-1);IF suchpos(paraphenliste,pruefparaphe,
laengeparaphe)>0CAND pruefparaphe<>lehrerplatzhalterTHEN vermerkelvELIF 
gemeinsameschuelergruppen(kennungkopplung,kopplung,kennunglv,prueflv)THEN 
vermerkelvFI ;FI ;poskopplung:=poskopplung+laengekopplung;poslv:=poslv+
laengelv;posparaphe:=posparaphe+laengeparaphe;PER .vermerkelv:auszeile:=
subtext(prueflv,1,2);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,3,4
);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,5);auszeileCAT "   ";
auszeileCAT pruefkopplung;auszeileCAT "   ";auszeileCAT pruefparaphe;auszeile
CAT "   ";sugruppen:=beteiligteschuelergruppen(kennunglv,prueflv);INT VAR 
possu:=1;WHILE possu<=length(sugruppen)REP auszeileCAT subtext(sugruppen,
possu,possu+laengesugruppe-1);auszeileCAT blankzeichen;possu:=possu+
laengesugruppePER ;putline(ausgabeliste,auszeile).END PROC 
stupidstoerendelvlisten;PROC stupidraumbelegunglisten:TEXT VAR auszeile;INT 
VAR feldnr:=infeld;erstelledateimitraumbelegung;zeigedatei(zeigdatei,"").
erstelledateimitraumbelegung:i:=(feldnr-felderbistabbeginnbs2)DIV 
felderproeintragbs2;zeigdatei:=liste2;forget(zeigdatei,quiet);ausgabeliste:=
sequentialfile(output,zeigdatei);auszeile:=
"Raumbelegung für Lehrveranstaltung ";auszeileCAT subtext(lv,1,2);auszeile
CAT blankzeichen;auszeileCAT subtext(lv,3,4);auszeileCAT blankzeichen;
auszeileCAT subtext(lv,5);auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE );
auszeileCAT ".Stunde:";putline(ausgabeliste,auszeile);line(ausgabeliste);
putline(ausgabeliste,"freie Räume:");line(ausgabeliste);IF alleraeume=""THEN 
alleraeumeholenFI ;posraum:=1;WHILE posraum<=length(alleraeume)REP raum:=
subtext(alleraeume,posraum,posraum+laengeraum-1);planeintraglesen(i,
kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum=""THEN putline(
ausgabeliste,raum)FI ;posraum:=posraum+laengeraumPER ;line(ausgabeliste);line
(ausgabeliste);putline(ausgabeliste,"Belegung der Wunsch- und Ersatzräume:");
datraumwunsch:=sequentialfile(modify,wunschraumdatei);toline(datraumwunsch,
ilv);readrecord(datraumwunsch,raumzeile);posraum:=1;WHILE posraum<=length(
raumzeile)REP raum:=subtext(raumzeile,posraum,posraum+laengeraum-1);
planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum
<>""THEN auszeile:=raum;auszeileCAT " :  ";auszeileCAT subtext(suchlv,1,2);
auszeileCAT blankzeichen;auszeileCAT subtext(suchlv,3,4);auszeileCAT 
blankzeichen;auszeileCAT subtext(suchlv,5);putline(ausgabeliste,auszeile);FI 
;posraum:=posraum+laengeraumPER .alleraeumeholen:inittupel(dnrschluessel);
statleseschleife(dnrschluessel,raumkenndaten,"",fnrschlsachgebiet,
fnrschlschluessel,PROC raeumeholen).END PROC stupidraumbelegunglisten;PROC 
raeumeholen(BOOL VAR b):IF wert(fnrschlsachgebiet)>raumkenndatenCOR dbstatus
<>0THEN b:=TRUE ELSE alleraeumeCAT text(wert(fnrschlschluessel),laengeraum)
FI END PROC raeumeholen;PROC stupidspeicherndieserzeitenfuerkopplung:BOOL 
VAR plausifehler:=FALSE ;INT VAR anzahlankreuzungen:=0;ifnr:=
fnrersteseingabefeldbs1;REP IF standardmaskenfeld(ifnr)<>""THEN IF zeitbelegt
OR lehrerbelegtOR schuelerbelegtTHEN plausifehler:=TRUE ;standardmeldung(
meldnrzuordnungwegensperrungunmoegl,"");infeld(ifnr)FI ;anzahlankreuzungen
INCR 1FI ;ifnrINCR felderproeintragbs1UNTIL (ifnr>fnrletztesfeldbs1)OR 
plausifehlerPER ;IF plausifehlerTHEN return(1)ELIF anzahlankreuzungen>
maxwochenstundenTHEN standardmeldung(meldnrzuvielezuordnungen,"");return(1)
ELSE speichernderkopplung;standardmeldung(meldnrdatenwurdengespeichert,"");
stundenplansichern(fstatusstuplan);IF anzahlankreuzungen=0THEN 
stupidnichtaendernweitermitnaechsterkopplungELSE standardstartproc(
maskebearb2);erstelvzurkopplungnocheinmallesen;ilv:=1;lvzeigen;standardnproc
FI FI .zeitbelegt:pos(standardmaskenfeld(ifnr+1),kennzzeitgesperrt)>0.
lehrerbelegt:pos(standardmaskenfeld(ifnr+1),kennzlehrergesperrt)>0.
schuelerbelegt:pos(standardmaskenfeld(ifnr+1),kennzschuelergesperrt)>0.
erstelvzurkopplungnocheinmallesen:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,
gewhalbj);putwert(fnrlvkopplung,kopplung);search(ixlvsjhjkopp,FALSE ).
speichernderkopplung:INT VAR poslv;ifnr:=fnrersteseingabefeldbs1;FOR iFROM 
erstestdUPTO letztestdREP ankreuzung:=standardmaskenfeld(ifnr);IF (
kopplungszeitenSUB i)=stundeverplantTHEN IF ankreuzung=""THEN 
kopplungentfernenELSE kopplungueberschreibenFI ELSE IF ankreuzung<>""THEN 
kopplungschreibenFI ;FI ;ifnr:=ifnr+felderproeintragbs1PER .kopplungschreiben
:BOOL VAR ok;poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste,
poslv,poslv+laengelv-1);planeintragvornehmen(i,lv,raumplatzhalter,ok);poslv:=
poslv+laengelvPER ;replace(kopplungszeiten,i,stundeverplant).
kopplungentfernen:poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(
lvliste,poslv,poslv+laengelv-1);planeintragloeschen(i,lv,ok);poslv:=poslv+
laengelvPER ;replace(kopplungszeiten,i,stundefrei).kopplungueberschreiben:
poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste,poslv,poslv+
laengelv-1);planeintraglesen(i,kennunglv,lv,suchlv,suchraum,suchparaphe);
suchraum:=compress(suchraum);IF suchraum=""THEN suchraum:=raumplatzhalterFI ;
planeintragvornehmen(i,lv,suchraum,ok);poslv:=poslv+laengelvPER .END PROC 
stupidspeicherndieserzeitenfuerkopplung;PROC lvzeigen:
ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift);
datenbestimmenundausgeben.ueberschriftzeilezusammensetzen:ueberschrift:=
textueberschriftbs2;ueberschriftCAT kopplung;ueberschriftCAT 
textueberschriftanhang;ueberschriftCAT gewhalbj;ueberschriftCAT blankzeichen;
ueberschriftCAT subtext(gewschulj,1,2);ueberschriftCAT trennstrich;
ueberschriftCAT subtext(gewschulj,3,4).datenbestimmenundausgeben:
werteauslvsatzholen;ifnr:=felderbistabbeginnbs2;fnrersteseingabefeldbs2:=0;
FOR iFROM erstestdUPTO letztestdREP IF (kopplungszeitenSUB i)=stundeverplant
THEN planeintraglesen(i,kennunglv,text(lv,laengelv),suchlv,suchraum,
suchparaphe);IF compress(suchraum)<>""THEN standardmaskenfeld(blankzeichen,
ifnr+1);standardmaskenfeld(compress(suchraum),ifnr+2)ELSE standardmaskenfeld(
vorschlagzeichen,ifnr+1);standardmaskenfeld(compress(wunschraumvorschlag),
ifnr+2)FI ;IF fnrersteseingabefeldbs2=0THEN fnrersteseingabefeldbs2:=ifnr+2
FI ELSE standardmaskenfeld(blankzeichen,ifnr+1);standardmaskenfeld(
raumplatzhalter,ifnr+2);feldschutz(ifnr+2)FI ;ifnr:=ifnr+felderproeintragbs2
PER ;infeld(1);standardfelderausgeben;infeld(fnrersteseingabefeldbs2).
werteauslvsatzholen:lv:=jgstzweistellig(intwert(fnrlvjgst))+text(wert(
fnrlvfachkennung),laengefachkenn);wstdderlv:=intwert(fnrlvwochenstd);paraphe
:=wert(fnrlvparaphe);standardmaskenfeld(text(lv,laengelv),
fnrlehrveranstaltbs2);standardmaskenfeld(text(wstdderlv,laengewstd),
fnrwstdbs2);standardmaskenfeld(text(paraphe,laengeparaphe),fnrparaphebs2);
standardmaskenfeld(text(wert(fnrlvklgrp1),laengeklagruppe),
fnrklassengruppenbeginn);standardmaskenfeld(text(wert(fnrlvklgrp2),
laengeklagruppe),fnrklassengruppenbeginn+1);standardmaskenfeld(text(wert(
fnrlvklgrp3),laengeklagruppe),fnrklassengruppenbeginn+2);standardmaskenfeld(
text(wert(fnrlvklgrp4),laengeklagruppe),fnrklassengruppenbeginn+3);
standardmaskenfeld(text(wert(fnrlvraumgrp1),laengeraum),fnrraumwunsch);
standardmaskenfeld(text(wert(fnrlvraumgrp2),laengeraum),fnrraumwunsch+1).
wunschraumvorschlag:datraumwunsch:=sequentialfile(modify,wunschraumdatei);
toline(datraumwunsch,ilv);readrecord(datraumwunsch,raumzeile);raumbelegliste
:=datenderzeit(i,kennungraum);posraum:=1;WHILE posraum<=length(raumzeile)REP 
raum:=subtext(raumzeile,posraum,posraum+laengeraum-1);IF suchpos(
raumbelegliste,raum,laengeraum)=0THEN LEAVE wunschraumvorschlagWITH raumFI ;
posraum:=posraum+laengeraumPER ;kennzkeinfreierwunschraum.END PROC lvzeigen;
PROC stupidspeichernderraeumeundzeitenderlv(BOOL CONST speichern):BOOL VAR 
plausifehler,ok;IF speichernTHEN plausifehler:=FALSE ;
plausipruefungfuerraeumezulv;IF plausifehlerTHEN return(1)ELSE 
raeumezulvspeichern;standardmeldung(meldnrdatenwurdengespeichert,"");
stundenplansichern(fstatusstuplan);naechstelvzurbearbeitungFI ELSE 
standardmeldung(meldnrdatenwurdennichtgespeichert,"");
naechstelvzurbearbeitungFI .plausipruefungfuerraeumezulv:INT VAR 
anzahlankreuzungen:=0;ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO letztestd
REP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress(
standardmaskenfeld(ifnr));IF raum<>""THEN anzahlankreuzungen:=
anzahlankreuzungen+1;IF raum<>kennzkeinfreierwunschraumTHEN IF NOT 
bezeichnungzulaessig(kennungraum,raum)THEN standardmeldung(
meldnrungueltigerraum,"");infeld(ifnr);plausifehler:=TRUE ELIF 
raumdurchanderelvbelegtTHEN standardmeldung(meldnrraumschonbelegt,"");infeld(
ifnr);plausifehler:=TRUE FI FI FI FI ;ifnr:=ifnr+felderproeintragbs2UNTIL 
plausifehlerPER ;IF NOT plausifehlerTHEN IF anzahlankreuzungen>wstdderlvTHEN 
standardmeldung(meldnrzuvielezuordnungen,"");infeld(fnrersteseingabefeldbs2);
plausifehler:=TRUE FI FI .raumdurchanderelvbelegt:planeintraglesen(i,
kennungraum,raum,suchlv,suchraum,suchparaphe);compress(suchraum)<>""AND 
suchlv<>lv.raeumezulvspeichern:ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO 
letztestdREP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress(
standardmaskenfeld(ifnr));IF raum=""THEN planeintragloeschen(i,lv,ok);ELSE 
IF raum=kennzkeinfreierwunschraumTHEN raum:=raumplatzhalterFI ;
planeintragvornehmen(i,lv,raum,ok);FI FI ;ifnr:=ifnr+felderproeintragbs2PER .
naechstelvzurbearbeitung:succ(ixlvsjhjkopp);IF dbstatus=0THEN IF 
weiterelvzukopplungvorhandenTHEN ilv:=ilv+1;lvzeigen;return(1)ELSE 
standardstartproc(maskebearb1);kopplungzeigen;return(2)FI ELSE enter(3)FI .
weiterelvzukopplungvorhanden:wert(fnrlvkopplung)=kopplungAND wert(fnrlvhj)=
gewhalbjAND wert(fnrlvsj)=gewschulj.END PROC 
stupidspeichernderraeumeundzeitenderlv;PROC stupidkopierenderraumangabe:INT 
VAR feldnr:=infeld;ifnr:=feldnr;WHILE ifnr<fnrletztesfeldbs2REP ifnrINCR 
felderproeintragbs2;IF standardmaskenfeld(ifnr)<>raumplatzhalterTHEN 
standardmaskenfeld(standardmaskenfeld(feldnr),ifnr)FI PER ;return(1)END PROC 
stupidkopierenderraumangabe;PROC stupidnichtaendernweitermitkopplung:putwert(
fnrlvkopplung,kopplung+blankzeichen);search(ixlvsjhjkopp,FALSE );IF 
keinegueltigekopplungTHEN enter(3)ELSE standardstartproc(maskebearb1);
kopplungzeigen;return(2)FI END PROC stupidnichtaendernweitermitkopplung;PROC 
stupidnichtaendernweitermitnaechsterkopplung:putwert(fnrlvkopplung,kopplung+
blankzeichen);search(ixlvsjhjkopp,FALSE );IF keinegueltigekopplungTHEN enter(
2)ELSE kopplungzeigen;return(1)FI END PROC 
stupidnichtaendernweitermitnaechsterkopplung;PROC stupidlistedrucken(BOOL 
CONST drucken):IF druckenTHEN print(zeigdatei)FI ;forget(zeigdatei,quiet);
return(2)END PROC stupidlistedrucken;INT PROC suchpos(TEXT CONST quelle,
suchtext,INT CONST laenge):INT VAR findpos:=pos(quelle,suchtext);WHILE 
findpos>0REP IF findposMOD laenge=1THEN LEAVE suchposWITH findposELSE findpos
:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND PROC suchpos;TEXT PROC 
jgstzweistellig(INT CONST intjgst):IF intjgst=0THEN "00"ELIF intjgst>4AND 
intjgst<10THEN "0"+text(intjgst)ELSE text(intjgst)FI END PROC jgstzweistellig
;PROC wertedeseingangsbildschirmsmerken:wertfeld2:=standardmaskenfeld(
fnrkopplungbs0);wertfeld3:=standardmaskenfeld(fnrakthalbjahr);wertfeld4:=
standardmaskenfeld(fnrmitzeitwuenschen)END PROC 
wertedeseingangsbildschirmsmerken;PROC wertedeseingangsbildschirmsholen:
standardmaskenfeld(wertfeld2,fnrkopplungbs0);standardmaskenfeld(wertfeld3,
fnrakthalbjahr);standardmaskenfeld(wertfeld4,fnrmitzeitwuenschen)END PROC 
wertedeseingangsbildschirmsholen;END PACKET 
stundenplanimdialogerstellenundaendern