summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/2.kurse auf planbloecke legen
blob: f23d29c8b18845948d3c47f7f83e34d322c1917d (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
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