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
|