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
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
|
PACKET kurseaufplanbloeckelegenDEFINES kurseaufbloeckestarten,
kurseaufbloeckeinitialisieren,kurseaufbloeckeschemaspeichern,
kurseaufbloeckeschemavorblaettern,kurseaufbloeckeschemaentfernenfrage,
kurseaufbloeckeschemaentfernen,kurseaufbloeckeschemauebernehmenfrage,
kurseaufbloeckeschemauebernehmen,kurseaufbloeckebearbeiten,
kurseaufbloeckeinformationenaufbereiten,kurseaufbloeckerechtehaelftezeigen,
kurseaufbloeckeaenderungenspeichern,kurseaufbloeckeschemaeinteilen,
kurseaufbloecketeilblockabspalten,kurseaufbloecketeilblockentfernen,
kurseaufbloeckeschemanichtweiteraendern,kurseaufbloeckezurueckzumbeginn:LET
maskeeingang="ms kurse auf planbloecke eingang",maskebearb=
"ms kurse auf planbloecke";LET fnrgewjgst=2,fnrhalbjahr=3,fnraktjgst=4,
fnrneuanjgst=5,fnrherkunftjgst=6,fnrherkunfthj=7,fnrmitkursen=8;LET fnrfach=2
,fnrart=3,fnrwochenstunden=4,fnranzahlschueler=5,fnranzahlkurse=6,
fnrschuelerprokurs=7,fnrausgabefach=8,fnrersterkurs=9,fnrletzterblock=44,
fnrersteblockangabe=45,fnrerstewstd=46,fnrletztewstd=167;LET felderprozeile=
11,felderprokurs=3;LET meldnrspeichern=50,meldnrkeinezahl=53,
meldnrdatenwerdengeprueft=57,meldnrloeschen=61,meldnrnichtloeschen=62,
meldnrnichtspeichern=63,meldnrloeschfrage=65,meldnrbittewarten=69,
meldnrblaetternunmoeglich=72,meldnrbitteangabeergaenzen=129,
meldnrangabenichtsinnvoll=162,meldnruebernehmenfrage=300,meldnruebernehmen=
301,meldnrnichtuebernehmen=303,meldnrfeldleerlassen=390,
meldnrfachartkombinationungueltig=393,meldnrfalschejgstfolge=410,
meldnrfalschebezugsjgst=411,meldnruebernahmeingleicheshj=415,
meldnrkurswahlfehler=416,meldnrdateninbearbeitung=425,meldnrschemagibtsnicht=
426,meldnrschemagibtsschon=427,meldnrblocknichtteilbar=428,
meldnrteilblockentfernen=429,meldnrstundensummmestimmtnicht=430;LET
feldanzmaskeeingang=8;ROW feldanzmaskeeingangTEXT VAR feldbs1;INT VAR
letztecursorfnr:=fnrgewjgst,letztecursorfnrbs2,pruefstatus;INT VAR ifnr;LET
maxblock=22;LET maxtabzeilen=66;LET TABZEILE =STRUCT (TEXT blockbez,TEXT wstd
,INT frei,INT gesamt,TEXT kurse);ROW maxtabzeilenTABZEILE VAR blockzeile;INT
VAR izeile,iblock,erstergezeigterblock,letztergezeigterblock,letzterblock:=1;
BOOL VAR rechtetabellenhaelftezeigen:=FALSE ;INT VAR ikurs;LET maxkurse=7;
TEXT VAR allekursedesblocks,kursbez;INT VAR poskurs;LET laengekurs=6,
laengeallekursangaben=10,laengefach=2,laengeart=2,laengefachartstd=5,incrwstd
=4;LET KURSTAB =STRUCT (TEXT kursname,TEXT blocknr1,TEXT blocknr2);ROW
maxfachkursKURSTAB VAR kurstab;INT VAR ifachkurs;LET maxfachkurs=12;TEXT VAR
angabenzueinemkurs,gefundenerkurs,gefundeneplanbloecke,gefundenerblock1,
gefundenerblock2;INT VAR blockwstd1,blockwstd2;LET jgst10=10,jgst11=11,jgst13
=13,hj1=1,hj2=2;TEXT VAR aktjgst,gewjgst,gewhalbjahr,neuanjgst,kopiejgst,
kopiehalbjahr,gewschuljahr,aktuelleshalbjahr,fangsj,fanghj;TEXT VAR blocknr,
pruefblockbez;LET posblockkennung=3;LET kennungteilblockb="b";LET kennungwstd
="S",kennungkurse="K",kennungplanbloecke="P";TEXT VAR alleplanblockbez;LET
planblocklaenge=3,laengeblocknr=2;INT VAR posplanblock;TEXT VAR
allekursedesgewhj,allekursedesherkunfthj;TEXT VAR fachartkombinationen:="",
fach,fachart;INT VAR wochenstundenzahl,anzahlschuelermitfachart,
anzahlschuelerprokurs,anzahlkursezufachart;BOOL VAR wstdfelderschutz:=FALSE ,
planbloeckemitkursenuebernehmen,kurswahlsperreok;LET kurswahl1="Kurswahl-1 ";
TEXT VAR gewschueler;LET nuraktuelleschueler="O",nurneuangemeldete="N";LET
zeilenprobildschirm=12;INT VAR kurswahlstatus;TEXT VAR ueberschrift;LET
titel1="Kurse blocken für jetzige ",titel2=" in ";LET schulhalbjahr=
"Schulhalbjahr",schuljahr="Schuljahr";initfelderdeseingangsbildschirms;PROC
kurseaufbloeckestarten:standardstartproc(maskeeingang);
wertedeseingangsbildschirmsholen;infeld(fnrgewjgst);standardfelderausgeben;
infeld(letztecursorfnr);standardnprocEND PROC kurseaufbloeckestarten;PROC
kurseaufbloeckeinitialisieren:eingangsbehandlung(1);IF eingangsmaskenfehler
THEN infeld(pruefstatus);return(1)ELSE wertedeseingangsbildschirmsmerken;
kurswahlinitialisieren(aktjgst,gewjgst,gewhalbjahr,gewschueler,gewschuljahr);
kurswahlbasisholen(kurswahlstatus);IF kurswahlstatus<>0THEN
kurswahlfehlerbehandeln;return(1)ELIF alleplanblockbezeichner<>""THEN
standardmeldung(meldnrschemagibtsschon,"");infeld(fnrgewjgst);return(1)ELSE
kurswahlsperresetzen(kurswahl1,kurswahlsperreok);IF NOT kurswahlsperreokTHEN
standardmeldung(meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=
FALSE ;blockschemazeigen(1);infeld(fnrerstewstd);standardnprocFI FI FI .END
PROC kurseaufbloeckeinitialisieren;PROC kurswahlfehlerbehandeln:
standardmeldung(meldnrkurswahlfehler,"");pause(10)END PROC
kurswahlfehlerbehandeln;PROC kurseaufbloeckezurueckzumbeginn(INT CONST stufen
):kurswahlsperrebeenden(kurswahl1);enter(stufen)END PROC
kurseaufbloeckezurueckzumbeginn;PROC blockschemazeigen(INT CONST art):
standardstartproc(maskebearb);ueberschriftaufbereiten;
standardkopfmaskeaktualisieren(ueberschrift);eingabefeldersperren(fnrfach,
fnrart);zusatzfelderinitialisieren;IF art=1THEN blockschemainitialisieren
ELSE blockschemafuellenFI ;rechtetabellenhaelftezeigen:=FALSE ;
blockschemaausgebenab(1);infeld(fnrfach);standardfelderausgeben.
ueberschriftaufbereiten:IF art=1THEN ueberschrift:=titel1;ueberschriftCAT
aktjgst;ueberschriftCAT titel2;ELIF art=2THEN ueberschrift:=text(
vergleichsknoten);ueberschriftCAT " für ";ELIF art=3THEN IF
planbloeckemitkursenuebernehmenTHEN ueberschrift:=text(vergleichsknoten)ELSE
ueberschrift:="Blockschema ohne Kurse übernehmen"FI ;ueberschriftCAT
" für "FI ;ueberschriftCAT gewjgst;ueberschriftCAT ".";ueberschriftCAT
gewhalbjahr;ueberschriftCAT " ";ueberschriftCAT subtext(gewschuljahr,1,2);
ueberschriftCAT "/";ueberschriftCAT subtext(gewschuljahr,3,4).
zusatzfelderinitialisieren:FOR ifnrFROM fnrfachUPTO fnrersteblockangabe-1REP
standardmaskenfeld("",ifnr)PER .blockschemainitialisieren:FOR iblockFROM 1
UPTO maxtabzeilenREP IF iblock>maxblockTHEN blockzeile(iblock).blockbez:=""
ELSE blockzeile(iblock).blockbez:=textzweistellig(iblock)+" "FI ;blockzeile(
iblock).wstd:="0";blockzeile(iblock).frei:=0;blockzeile(iblock).gesamt:=0;
blockzeile(iblock).kurse:=""PER ;letzterblock:=maxblock.END PROC
blockschemazeigen;PROC blockschemafuellen:alleplanblockbez:=
alleplanblockbezeichner;iblock:=0;posplanblock:=1;WHILE posplanblock<length(
alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(alleplanblockbez,
posplanblock,posplanblock+2);blockzeile(iblock).blockbez:=blocknr;blockzeile(
iblock).wstd:=planblockdaten(blocknr,kennungwstd);blockzeile(iblock).frei:=0;
blockzeile(iblock).gesamt:=anzahlfreierschuelerimplanblock(subtext(blocknr,1,
2),blocknrSUB 3,"","","","");blockzeile(iblock).kurse:=planblockdaten(blocknr
,kennungkurse);posplanblockINCR planblocklaengeUNTIL iblock=maxtabzeilenPER ;
letzterblock:=iblockEND PROC blockschemafuellen;PROC blockschemaausgebenab(
INT CONST ersterblockeintrag):erstergezeigterblock:=ersterblockeintrag;iblock
:=ersterblockeintrag-1;ifnr:=fnrersteblockangabe;FOR izeileFROM 1UPTO
zeilenprobildschirmREP IF iblock<letzterblockTHEN iblockINCR 1;
volleblockzeileausgebenELSE leereblockzeileausgebenFI ;ifnrINCR
felderprozeilePER ;letztergezeigterblock:=iblock.leereblockzeileausgeben:
standardmaskenfeld(" ",ifnr);standardmaskenfeld(" ",ifnr+1);
standardmaskenfeld(" ",ifnr+2);standardmaskenfeld(" ",ifnr+3);FOR ikurs
FROM 1UPTO maxkurseREP standardmaskenfeld(" ",ifnr+3+ikurs)PER ;
feldschutz(ifnr+1).volleblockzeileausgeben:standardmaskenfeld(blockzeile(
iblock).blockbez,ifnr);standardmaskenfeld(blockzeile(iblock).wstd,ifnr+1);
standardmaskenfeld(text(blockzeile(iblock).frei),ifnr+2);standardmaskenfeld(
text(blockzeile(iblock).gesamt),ifnr+3);allekursedesblocks:=blockzeile(iblock
).kurse;IF rechtetabellenhaelftezeigenTHEN poskurs:=(maxkurse*laengekurs)+1
ELSE poskurs:=1FI ;FOR ikursFROM 1UPTO maxkurseREP kursbez:=subtext(
allekursedesblocks,poskurs,poskurs+laengekurs-1);IF kursbez=""THEN kursbez:=
" "ELSE kursbez:=subtext(kursbez,1,2)+" "+subtext(kursbez,3,6)FI ;
standardmaskenfeld(kursbez,ifnr+3+ikurs);poskursINCR laengekursPER ;IF
wstdfelderschutzTHEN feldschutz(ifnr+1)ELSE feldfrei(ifnr+1)FI END PROC
blockschemaausgebenab;PROC kurseaufbloeckeschemaspeichern(BOOL CONST
speichern):IF speichernTHEN eingetragenewochenstundenmerken;pruefstatus:=0;
allewochenstundenangabenpruefen;IF pruefstatus<>0THEN standardmeldung(
meldnrkeinezahl,"");blockschemaausgebenab(pruefstatus);infeld(
fnrersteblockangabe);standardfelderausgeben;infeld(fnrerstewstd);return(1)
ELSE standardmeldung(meldnrspeichern,"");wochenstundenspeichern;
kurswahl1sichern(kurswahlstatus);kurswahlsperrebeenden(kurswahl1);enter(2)FI
ELSE standardmeldung(meldnrnichtspeichern,"");kurswahlsperrebeenden(kurswahl1
);enter(2)FI .allewochenstundenangabenpruefen:INT VAR testint;iblock:=1;
WHILE iblock<=letzterblockAND pruefstatus=0REP testint:=int(blockzeile(iblock
).wstd);IF NOT lastconversionokTHEN pruefstatus:=iblockFI ;iblockINCR 1PER .
wochenstundenspeichern:FOR iblockFROM 1UPTO letzterblockREP
planblockeintragen(blockzeile(iblock).blockbez,blockzeile(iblock).wstd)PER .
END PROC kurseaufbloeckeschemaspeichern;PROC eingetragenewochenstundenmerken:
ifnr:=fnrerstewstd;iblock:=erstergezeigterblock;FOR izeileFROM 1UPTO
zeilenprobildschirmREP blockzeile(iblock).wstd:=standardmaskenfeld(ifnr);ifnr
INCR felderprozeile;iblockINCR 1UNTIL iblock>letzterblockPER END PROC
eingetragenewochenstundenmerken;PROC kurseaufbloeckeschemavorblaettern(BOOL
CONST vorwaerts):letztecursorfnrbs2:=infeld;IF letztecursorfnrbs2>=
fnrerstewstdTHEN letztecursorfnrbs2:=fnrerstewstdFI ;IF vorwaertsTHEN IF
letztergezeigterblock=letzterblockTHEN standardmeldung(
meldnrblaetternunmoeglich,"")ELSE eingetragenewochenstundenmerken;
blockschemaausgebenab(letztergezeigterblock+1);infeld(fnrersteblockangabe);
standardfelderausgeben;infeld(letztecursorfnrbs2)FI ELSE IF
erstergezeigterblock=1THEN standardmeldung(meldnrblaetternunmoeglich,"")ELSE
eingetragenewochenstundenmerken;IF erstergezeigterblock>zeilenprobildschirm
THEN blockschemaausgebenab(erstergezeigterblock-zeilenprobildschirm)ELSE
blockschemaausgebenab(1)FI ;infeld(fnrersteblockangabe);
standardfelderausgeben;infeld(letztecursorfnrbs2)FI FI ;return(1)END PROC
kurseaufbloeckeschemavorblaettern;PROC kurseaufbloeckeschemaentfernenfrage:
eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return(
1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst,
gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(
kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)
ELIF alleplanblockbezeichner<>""THEN kurswahlsperresetzen(kurswahl1,
kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung(
meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=TRUE ;
blockschemazeigen(2);standardmeldung(meldnrloeschfrage,"");feldfrei(fnrfach);
infeld(fnrfach);standardnprocFI ELSE standardmeldung(meldnrschemagibtsnicht,
"");infeld(fnrgewjgst);return(1)FI FI .END PROC
kurseaufbloeckeschemaentfernenfrage;PROC kurseaufbloeckeschemaentfernen(BOOL
CONST entfernen):IF entfernenTHEN standardmeldung(meldnrloeschen,"");
planbloeckeinitialisierenELSE standardmeldung(meldnrnichtloeschen,"")FI ;
kurswahlsperrebeenden(kurswahl1);enter(2)END PROC
kurseaufbloeckeschemaentfernen;PROC kurseaufbloeckeschemauebernehmenfrage:
eingangsbehandlung(3);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return(
1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst,
gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(
kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)
ELIF alleplanblockbezeichner<>""THEN standardmeldung(meldnrschemagibtsschon,
"");infeld(fnrgewjgst);return(1)ELSE IF planbloeckemitkursenuebernehmenTHEN
allekursedesgewhj:=allekurseFI ;TEXT VAR gewschuljahrsave:=gewschuljahr;
kopiejgst:=standardmaskenfeld(fnrherkunftjgst);kopiehalbjahr:=
standardmaskenfeld(fnrherkunfthj);kurswahlinitialisieren(aktjgst,kopiejgst,
kopiehalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(kurswahlstatus);
IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELIF
alleplanblockbezeichner<>""THEN wstdfelderschutz:=TRUE ;gewschuljahr:=
gewschuljahrsave;blockschemazeigen(3);standardmeldung(meldnruebernehmenfrage,
"");feldfrei(fnrfach);infeld(fnrfach);standardnprocELSE standardmeldung(
meldnrschemagibtsnicht,"");infeld(fnrherkunftjgst);return(1)FI FI FI END
PROC kurseaufbloeckeschemauebernehmenfrage;PROC
kurseaufbloeckeschemauebernehmen(BOOL CONST uebernehmen):IF uebernehmenTHEN
standardmeldung(meldnruebernehmen,"");IF planbloeckemitkursenuebernehmenCAND
allekursedesgewhj=""THEN allekursedesherkunfthj:=allekurseFI ;
kurswahlinitialisieren(aktjgst,gewjgst,gewhalbjahr,gewschueler,gewschuljahr);
kurswahlbasisholen(kurswahlstatus);kurswahlsperresetzen(kurswahl1,
kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung(
meldnrdateninbearbeitung,"");return(1)ELSE
evtlkurseundplanblockschemauebernahmedurchfuehren;kurswahl0sichern(
kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;
kurswahlsperrebeenden(kurswahl1);return(1)ELSE kurswahl1sichern(
kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;
kurswahlsperrebeenden(kurswahl1);return(1)ELSE kurswahlsperrebeenden(
kurswahl1);enter(2)FI FI FI ELSE standardmeldung(meldnrnichtuebernehmen,"");
enter(2)FI .allekursealskursedesgewhjeintragen:poskurs:=1;WHILE poskurs<=
length(allekursedesherkunfthj)REP kurseintragen(kursfach,kurskennung,kurswstd
,kursart);poskursINCR laengeallekursangabenPER .kursfach:subtext(
allekursedesherkunfthj,poskurs,poskurs+1).kurskennung:compress(subtext(
allekursedesherkunfthj,poskurs+2,poskurs+5)).kurswstd:subtext(
allekursedesherkunfthj,poskurs+6,poskurs+7).kursart:subtext(
allekursedesherkunfthj,poskurs+8,poskurs+9).
evtlkurseundplanblockschemauebernahmedurchfuehren:IF
planbloeckemitkursenuebernehmenCAND allekursedesgewhj=""THEN
allekursealskursedesgewhjeintragen;allekursedesgewhj:=allekursedesherkunfthj
FI ;FOR iblockFROM 1UPTO letzterblockREP planblockeintragen(blockzeile(iblock
).blockbez,blockzeile(iblock).wstd);IF planbloeckemitkursenuebernehmenTHEN
allekursedesblocks:=blockzeile(iblock).kurse;poskurs:=1;WHILE poskurs<=length
(allekursedesblocks)REP kursbez:=subtext(allekursedesblocks,poskurs,poskurs+
laengekurs-1);IF suchpos(allekursedesgewhj,kursbez,laengeallekursangaben)>0
THEN kurszumplanblockeintragen(compress(kursbez),blockzeile(iblock).blockbez)
FI ;poskursINCR laengekursPER ;FI PER .END PROC
kurseaufbloeckeschemauebernehmen;PROC kurseaufbloeckebearbeiten:
eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return(
1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst,
gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(
kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)
ELIF alleplanblockbezeichner<>""THEN kurswahlsperresetzen(kurswahl1,
kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung(
meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=TRUE ;
blockschemazeigen(2);feldfrei(fnrfach);feldfrei(fnrart);infeld(fnrfach);
standardnprocFI ELSE standardmeldung(meldnrschemagibtsnicht,"");infeld(
fnrgewjgst);return(1)FI FI END PROC kurseaufbloeckebearbeiten;PROC
kurseaufbloeckeinformationenaufbereiten:fach:=text(standardmaskenfeld(fnrfach
),laengefach);fachart:=text(standardmaskenfeld(fnrart),laengeart);IF
gueltigefachartkombination(fach,fachart,wochenstundenzahl)THEN kurswahl2holen
(kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)
ELSE informationenwirklichaufbereiten;standardnprocFI ELSE standardmeldung(
meldnrfachartkombinationungueltig,"");return(1)FI .
informationenwirklichaufbereiten:feldschutzfuerinfosetzen;standardmaskenfeld(
fach,fnrausgabefach);anzahlschuelermitfachart:=anzahlschuelermitwahl(fach,"",
fachart,"");standardmaskenfeld(text(anzahlschuelermitfachart),
fnranzahlschueler);standardmaskenfeld(text(wochenstundenzahl),
fnrwochenstunden);kursezufachundartbestimmen;standardmaskenfeld(text(
anzahlkursezufachart),fnranzahlkurse);IF anzahlkursezufachart>0THEN
anzahlschuelerprokurs:=anzahlschuelermitfachartDIV anzahlkursezufachart;
standardmaskenfeld(text(anzahlschuelerprokurs),fnrschuelerprokurs)ELSE
standardmaskenfeld(" ",fnrschuelerprokurs)FI ;iblock:=0;posplanblock:=1;
WHILE posplanblock<length(alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(
alleplanblockbez,posplanblock,posplanblock+2);blockzeile(iblock).frei:=
anzahlfreierschuelerimplanblock(subtext(blocknr,1,2),blocknrSUB 3,fach,"",
fachart,"");posplanblockINCR planblocklaengeUNTIL iblock=letzterblockPER ;
blockschemaausgebenab(erstergezeigterblock);infeld(fnrwochenstunden);
standardfelderausgeben;infeld(fnrersterkurs).feldschutzfuerinfosetzen:
feldschutz(fnrfach);feldschutz(fnrart);eingabefelderoeffnen(fnrersterkurs,
fnrletzterblock).kursezufachundartbestimmen:allekursedesgewhj:=allekurse;
poskurs:=1;anzahlkursezufachart:=0;ifnr:=fnrersterkurs;FOR ifachkursFROM 1
UPTO maxfachkursREP suchegewuenschtenkursinkursendeshj;IF gefundenerkurs<>""
THEN standardmaskenfeld(compress(gefundenerkurs),ifnr);standardmaskenfeld(
compress(gefundenerblock1),ifnr+1);standardmaskenfeld(compress(
gefundenerblock2),ifnr+2);anzahlkursezufachartINCR 1ELSE standardmaskenfeld(
"",ifnr);standardmaskenfeld("",ifnr+1);standardmaskenfeld("",ifnr+2)FI ;
kurstab(ifachkurs).kursname:=standardmaskenfeld(ifnr);kurstab(ifachkurs).
blocknr1:=standardmaskenfeld(ifnr+1);kurstab(ifachkurs).blocknr2:=
standardmaskenfeld(ifnr+2);ifnrINCR felderprokursPER .
suchegewuenschtenkursinkursendeshj:gefundenerkurs:="";WHILE poskurs<=length(
allekursedesgewhj)REP angabenzueinemkurs:=subtext(allekursedesgewhj,poskurs,
poskurs+laengeallekursangaben-1);IF subtext(angabenzueinemkurs,1,2)=fachCAND
subtext(angabenzueinemkurs,9,10)=fachartTHEN gefundenerkurs:=subtext(
angabenzueinemkurs,1,6);gefundeneplanbloecke:=kursdaten(gefundenerkurs,
kennungplanbloecke);gefundenerblock1:=subtext(gefundeneplanbloecke,1,3);
gefundenerblock2:=subtext(gefundeneplanbloecke,4,6);gefundenerkurs:=subtext(
gefundenerkurs,3)FI ;poskursINCR laengeallekursangabenUNTIL gefundenerkurs<>
""PER .END PROC kurseaufbloeckeinformationenaufbereiten;BOOL PROC
gueltigefachartkombination(TEXT CONST prueffach,pruefart,INT VAR
auswochenstundenzahl):INT VAR postreffer;IF fachartkombinationen=""THEN
standardmeldung(meldnrbittewarten,"");holeallefachartkombinationenFI ;
postreffer:=suchpos(fachartkombinationen,prueffach+pruefart,laengefachartstd)
;IF postreffer=0THEN FALSE ELSE auswochenstundenzahl:=int(
fachartkombinationenSUB (postreffer+incrwstd));TRUE FI .
holeallefachartkombinationen:TEXT VAR aktuellesschuljahr:=schulkenndatum(
schuljahr);inittupel(dnrfaecherangebot);fanghj:=aktuelleshalbjahr;fangsj:=
aktuellesschuljahr;IF NOT (gewhalbjahr=aktuelleshalbjahrAND gewschuljahr=
aktuellesschuljahr)THEN geplanteshjundsjberechnen(fanghj,fangsj)FI ;putwert(
fnrfangsj,fangsj);putwert(fnrfanghj,fanghj);putwert(fnrfangjgst,gewjgst);
search(dnrfaecherangebot,FALSE );statleseschleife(dnrfaecherangebot,fangsj,
fanghj,fnrfangsj,fnrfanghj,PROC fanglesen)END PROC gueltigefachartkombination
;PROC fanglesen(BOOL VAR b):IF dbstatus=0AND wert(fnrfangsj)=fangsjAND wert(
fnrfanghj)=fanghjAND wert(fnrfangjgst)=gewjgstTHEN fachartkombinationenCAT
text(wert(fnrfangfach),laengefach);fachartkombinationenCAT text(wert(
fnrfangart),laengeart);fachartkombinationenCAT text(wert(fnrfangwochenstd),1)
ELSE b:=TRUE FI END PROC fanglesen;PROC kurseaufbloeckerechtehaelftezeigen(
BOOL CONST rechts):rechtetabellenhaelftezeigen:=rechts;letztecursorfnrbs2:=
infeld;blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe
);standardfelderausgeben;infeld(letztecursorfnrbs2);return(1)END PROC
kurseaufbloeckerechtehaelftezeigen;PROC kurseaufbloeckeaenderungenspeichern(
BOOL CONST speichern):IF speichernTHEN kurszuordnungenpruefen;IF pruefstatus>
0THEN infeld(pruefstatus);return(1)ELSE kurszuordnungenspeichern;
kurswahl0sichern(kurswahlstatus);IF kurswahlstatus<>0THEN
kurswahlfehlerbehandeln;return(1)ELSE kurswahl1sichern(kurswahlstatus);IF
kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELSE
zurueckzumbearbeitungsanfangFI FI ;FI ;ELSE standardmeldung(
meldnrnichtspeichern,"");zurueckzumbearbeitungsanfangFI .
kurszuordnungenpruefen:standardmeldung(meldnrdatenwerdengeprueft,"");
pruefstatus:=0;ifnr:=fnrersterkurs;WHILE ifnr<fnrletzterblockREP kursbez:=
standardmaskenfeld(ifnr);IF kursbezdoppeltangegebenTHEN pruefstatus:=ifnr;
standardmeldung(meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefenFI
;IF kursbez=""CAND (standardmaskenfeld(ifnr+1)<>""OR standardmaskenfeld(ifnr+
2)<>"")THEN pruefstatus:=ifnr;standardmeldung(meldnrbitteangabeergaenzen,"");
LEAVE kurszuordnungenpruefenFI ;pruefblockbez:=standardmaskenfeld(ifnr+1);IF
ungueltigepruefblockbezTHEN pruefstatus:=ifnr+1;standardmeldung(
meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefenFI ;pruefblockbez:=
standardmaskenfeld(ifnr+2);IF ungueltigepruefblockbezTHEN pruefstatus:=ifnr+2
;standardmeldung(meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefen
FI ;ifnrINCR felderprokursPER .ungueltigepruefblockbez:pruefblockbez<>""AND (
suchpos(alleplanblockbez,pruefblockbez,planblocklaenge)=0COR length(compress(
pruefblockbez))<laengeblocknr).kursbezdoppeltangegeben:INT VAR ifnrpruef:=
ifnr;kursbez:=compress(kursbez);IF kursbez<>""THEN WHILE ifnrpruef>
fnrersterkursREP ifnrpruefDECR felderprokurs;IF kursbez=compress(
standardmaskenfeld(ifnrpruef))THEN LEAVE kursbezdoppeltangegebenWITH TRUE FI
;PER ;FI ;FALSE .kurszuordnungenspeichern:TEXT VAR kompkursbez;
standardmeldung(meldnrspeichern,"");ifnr:=fnrersterkurs;ifachkurs:=1;WHILE
ifnr<fnrletzterblockREP kompkursbez:=compress(standardmaskenfeld(ifnr));IF
kompkursbez<>""THEN IF kurstab(ifachkurs).kursname=""THEN kursneuaufnehmen
ELSE kursevtlueberschreibenFI ELSE IF kurstab(ifachkurs).kursname<>""THEN
kursentfernenFI FI ;ifachkursINCR 1;ifnrINCR felderprokursPER .
kursevtlueberschreiben:IF kompkursbez=kurstab(ifachkurs).kursnameTHEN kursbez
:=standardmaskenfeld(fnrausgabefach);kursbezCAT kompkursbez;
planbloeckezumkurseintragen(kursbez,standardmaskenfeld(ifnr+1),
standardmaskenfeld(ifnr+2))ELSE kursentfernen;kursneuaufnehmenFI .
kursneuaufnehmen:kursbez:=standardmaskenfeld(fnrausgabefach);kursbezCAT
kompkursbez;kurseintragen(standardmaskenfeld(fnrausgabefach),kompkursbez,
standardmaskenfeld(fnrwochenstunden),standardmaskenfeld(fnrart));
planbloeckezumkurseintragen(kursbez,standardmaskenfeld(ifnr+1),
standardmaskenfeld(ifnr+2)).kursentfernen:kursbez:=standardmaskenfeld(
fnrausgabefach);kursbezCAT kurstab(ifachkurs).kursname;kursloeschen(fach,
kurstab(ifachkurs).kursname).zurueckzumbearbeitungsanfang:wstdfelderschutz:=
TRUE ;IF speichernTHEN blockschemaneufuellen;blockschemaausgebenab(1)FI ;
eingabefeldersperren(fnrersterkurs,fnrletzterblock);feldfrei(fnrfach);
feldfrei(fnrart);FOR ifnrFROM fnrwochenstundenUPTO fnrletzterblockREP
standardmaskenfeld("",ifnr)PER ;infeld(fnrfach);return(2).
blockschemaneufuellen:iblock:=0;posplanblock:=1;WHILE posplanblock<length(
alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(alleplanblockbez,
posplanblock,posplanblock+2);blockzeile(iblock).frei:=0;blockzeile(iblock).
kurse:=planblockdaten(blocknr,kennungkurse);posplanblockINCR planblocklaenge
UNTIL iblock=maxtabzeilenPER .END PROC kurseaufbloeckeaenderungenspeichern;
INT PROC stundenzahl(INT CONST feldnr):pruefblockbez:=standardmaskenfeld(
feldnr);IF pruefblockbez=""THEN 0ELSE int(planblockdaten(pruefblockbez,
kennungwstd))FI END PROC stundenzahl;PROC kurseaufbloeckeschemaeinteilen:
feldschutz(fnrfach);feldschutz(fnrart);wstdfelderschutz:=FALSE ;
blockschemaausgebenab(erstergezeigterblock);infeld(fnrerstewstd);
standardfelderausgeben;infeld(fnrerstewstd);standardnprocEND PROC
kurseaufbloeckeschemaeinteilen;PROC kurseaufbloecketeilblockabspalten:ifnr:=
infeld;blocknr:=standardmaskenfeld(ifnr-1);iblockbestimmen;IF (blocknrSUB
posblockkennung)<>" "THEN standardmeldung(meldnrblocknichtteilbar,"")ELIF
text(blocknr,2)=naechsteblocknummerTHEN standardmeldung(
meldnrblocknichtteilbar,"")ELIF standardmaskenfeld(ifnr)<"0"OR
standardmaskenfeld(ifnr)>blockzeile(iblock).wstdTHEN standardmeldung(
meldnrangabenichtsinnvoll,"")ELSE teilblockabspaltendurchfuehrenFI ;return(1)
.naechsteblocknummer:IF iblock=letzterblockTHEN ""ELSE text(blockzeile(iblock
+1).blockbez,2)FI .teilblockabspaltendurchfuehren:blockwstd1:=int(
standardmaskenfeld(ifnr));blockwstd2:=int(blockzeile(iblock).wstd)-blockwstd1
;planblockteilen(text(blocknr,2),text(blockwstd1),text(blockwstd2));
kurswahl1sichern(kurswahlstatus);IF kurswahlstatus<>0THEN
kurswahlfehlerbehandelnELSE erstergezeigterblock:=iblock;blockschemafuellen;
blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe);
standardfelderausgeben;infeld(fnrerstewstd)FI END PROC
kurseaufbloecketeilblockabspalten;PROC iblockbestimmen:iblock:=
erstergezeigterblock+incrblock.incrblock:(ifnr-fnrerstewstd)DIV
felderprozeileEND PROC iblockbestimmen;PROC kurseaufbloecketeilblockentfernen
:ifnr:=infeld;blocknr:=standardmaskenfeld(ifnr-1);IF (blocknrSUB
posblockkennung)<>" "THEN standardmeldung(meldnrteilblockentfernen,"")ELSE
iblockbestimmen;IF teilbloeckevorhandenTHEN IF teilblockkurseidentischTHEN
allekursedesblocks:=blockzeile(iblock+1).kurse;planblockloeschen(blockzeile(
iblock+1).blockbez);planblockloeschen(blockzeile(iblock+2).blockbez);
allekurseinblocknreintragen;kurswahl1sichern(kurswahlstatus);IF
kurswahlstatus<>0THEN kurswahlfehlerbehandelnELSE blockschemafuellen;
blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe);
standardfelderausgeben;infeld(fnrerstewstd)FI ELSE standardmeldung(
meldnrteilblockentfernen,"")FI ELSE standardmeldung(meldnrteilblockentfernen,
"")FI FI ;return(1).teilbloeckevorhanden:text(blocknr,laengeblocknr)=
naechsteblocknummer.naechsteblocknummer:IF iblock=letzterblockTHEN ""ELSE
text(blockzeile(iblock+1).blockbez,laengeblocknr)FI .teilblockkurseidentisch:
blockzeile(iblock+1).kurse=blockzeile(iblock+2).kurse.
allekurseinblocknreintragen:poskurs:=1;WHILE poskurs<=length(
allekursedesblocks)REP kursbez:=subtext(allekursedesblocks,poskurs,poskurs+
laengekurs-1);kurszumplanblockeintragen(kursbez,blocknr);poskursINCR
laengekursPER .END PROC kurseaufbloecketeilblockentfernen;PROC
kurseaufbloeckeschemanichtweiteraendern:INT VAR meldnrfehler;
eingetragenewochenstundenmerken;pruefstatus:=0;
allewochenstundenangabenpruefen;IF pruefstatus<>0THEN standardmeldung(
meldnrfehler,"");blockschemaausgebenab(pruefstatus);infeld(
fnrersteblockangabe);standardfelderausgeben;infeld(fnrerstewstd);return(1)
ELSE standardmeldung(meldnrspeichern,"");wochenstundenspeichern;
kurswahl1sichern(kurswahlstatus);feldfrei(fnrfach);feldfrei(fnrart);
wstdfelderschutz:=TRUE ;eingabefeldersperren(fnrerstewstd,fnrletztewstd,
felderprozeile);infeld(fnrfach);return(2)FI .allewochenstundenangabenpruefen:
INT VAR testint;iblock:=1;WHILE iblock<=letzterblockAND pruefstatus=0REP
testint:=int(blockzeile(iblock).wstd);IF NOT lastconversionokTHEN pruefstatus
:=iblock;meldnrfehler:=meldnrkeinezahlELIF ((blockzeile(iblock).blockbez)SUB
posblockkennung)=kennungteilblockbTHEN IF int(blockzeile(iblock-2).wstd)<>int
(blockzeile(iblock-1).wstd)+int(blockzeile(iblock).wstd)THEN pruefstatus:=
iblock-2;meldnrfehler:=meldnrstundensummmestimmtnichtFI FI ;iblockINCR 1PER .
wochenstundenspeichern:FOR iblockFROM 1UPTO letzterblockREP
planblockeintragen(blockzeile(iblock).blockbez,blockzeile(iblock).wstd)PER .
END PROC kurseaufbloeckeschemanichtweiteraendern;PROC eingangsbehandlung(INT
CONST art):pruefstatus:=0;aktjgst:=standardmaskenfeld(fnraktjgst);gewhalbjahr
:=standardmaskenfeld(fnrhalbjahr);gewjgst:=standardmaskenfeld(fnrgewjgst);
neuanjgst:=standardmaskenfeld(fnrneuanjgst);kopiehalbjahr:=standardmaskenfeld
(fnrherkunfthj);kopiejgst:=standardmaskenfeld(fnrherkunftjgst);
aktuelleshalbjahr:=schulkenndatum(schulhalbjahr);allgemeinefelderpruefen;IF
pruefstatus=0THEN IF art=1OR art=2THEN bearbeitungfelderpruefenELIF art=3
THEN uebernahmefelderpruefen;planbloeckemitkursenuebernehmen:=
standardmaskenfeld(fnrmitkursen)<>""FI FI .allgemeinefelderpruefen:
standardpruefe(3,fnrgewjgst,jgst11,jgst13,"",pruefstatus);IF pruefstatus>0
THEN LEAVE allgemeinefelderpruefenFI ;standardpruefe(3,fnrhalbjahr,hj1,hj2,""
,pruefstatus);IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;IF
aktjgst<>""THEN IF int(aktuelleshalbjahr)=hj2THEN standardpruefe(3,fnraktjgst
,jgst10,jgst13,"",pruefstatus)ELSE standardpruefe(3,fnraktjgst,jgst11,jgst13,
"",pruefstatus)FI ;IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ;
IF neuanjgst<>""THEN standardpruefe(3,fnrneuanjgst,jgst11,jgst13,"",
pruefstatus);IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ;IF
aktjgst<>""THEN IF neuanjgst<>""THEN IF int(neuanjgst)<>int(aktjgst)+1THEN
standardmeldung(meldnrfalschejgstfolge,"");pruefstatus:=fnraktjgst;LEAVE
allgemeinefelderpruefenFI ;gewschueler:=""ELSE gewschueler:=
nuraktuelleschuelerFI ELIF neuanjgst=""THEN standardmeldung(
meldnrbitteangabeergaenzen,"");pruefstatus:=fnraktjgst;LEAVE
allgemeinefelderpruefenELSE gewschueler:=nurneuangemeldete;aktjgst:=text(int(
neuanjgst)-1)FI ;IF aktjgst>gewjgstCOR (aktjgst=gewjgstAND aktuelleshalbjahr>
gewhalbjahr)THEN standardmeldung(meldnrfalschebezugsjgst,"");pruefstatus:=
fnrgewjgst;LEAVE allgemeinefelderpruefenFI .bearbeitungfelderpruefen:IF
standardmaskenfeld(fnrherkunftjgst)<>""THEN standardmeldung(
meldnrfeldleerlassen,"");pruefstatus:=fnrherkunftjgst;LEAVE
bearbeitungfelderpruefenFI ;IF standardmaskenfeld(fnrherkunfthj)<>""THEN
standardmeldung(meldnrfeldleerlassen,"");pruefstatus:=fnrherkunfthj;LEAVE
bearbeitungfelderpruefenFI ;IF standardmaskenfeld(fnrmitkursen)<>""THEN
standardmeldung(meldnrfeldleerlassen,"");pruefstatus:=fnrmitkursen;LEAVE
bearbeitungfelderpruefenFI .uebernahmefelderpruefen:standardpruefe(3,
fnrherkunftjgst,jgst11,jgst13,"",pruefstatus);IF pruefstatus>0THEN LEAVE
uebernahmefelderpruefenFI ;standardpruefe(3,fnrherkunfthj,hj1,hj2,"",
pruefstatus);IF pruefstatus>0THEN LEAVE uebernahmefelderpruefenFI ;IF gewjgst
=kopiejgstCAND gewhalbjahr=kopiehalbjahrTHEN pruefstatus:=fnrgewjgst;
standardmeldung(meldnruebernahmeingleicheshj,"");LEAVE
uebernahmefelderpruefenFI ;END PROC eingangsbehandlung;BOOL PROC
eingangsmaskenfehler:pruefstatus<>0END PROC eingangsmaskenfehler;INT PROC
suchpos(TEXT CONST quelle,suchtext,INT CONST laenge):INT VAR findpos:=pos(
quelle,suchtext);WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE suchpos
WITH findposELSE findpos:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND
PROC suchpos;PROC eingabefeldersperren(INT CONST von,bis):
eingabefeldersperren(von,bis,1)END PROC eingabefeldersperren;PROC
eingabefeldersperren(INT CONST von,bis,abstand):INT VAR ifnr:=von;WHILE ifnr
<=bisREP feldschutz(ifnr);ifnrINCR abstandPER END PROC eingabefeldersperren;
PROC eingabefelderoeffnen(INT CONST von,bis):eingabefelderoeffnen(von,bis,1)
END PROC eingabefelderoeffnen;PROC eingabefelderoeffnen(INT CONST von,bis,
abstand):INT VAR ifnr:=von;WHILE ifnr<=bisREP feldfrei(ifnr);ifnrINCR abstand
PER END PROC eingabefelderoeffnen;PROC initfelderdeseingangsbildschirms:INT
VAR i;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1(i):=""PER END PROC
initfelderdeseingangsbildschirms;PROC wertedeseingangsbildschirmsmerken:INT
VAR i;letztecursorfnr:=infeld;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1(
i):=standardmaskenfeld(i)PER END PROC wertedeseingangsbildschirmsmerken;PROC
wertedeseingangsbildschirmsholen:INT VAR i;FOR iFROM 1UPTO
feldanzmaskeeingangREP standardmaskenfeld(feldbs1(i),i)PER END PROC
wertedeseingangsbildschirmsholen;TEXT PROC textzweistellig(INT CONST i):IF i<
10THEN "0"+text(i)ELSE text(i)FI END PROC textzweistellig;END PACKET
kurseaufplanbloeckelegen
|