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
|
PACKET erfwahldatenDEFINES wahldatenveraendern,wahldatenspeichern,
wahldatenbeenden,wahldatenuebernehmen,wahldatenschuelerlisten,
wahldatenlisteblaettern,wahldatenlistenachbereiten:LET eingangsmaske=
"ms wahldaten eingang",textzumeingangsknoten="Wahldaten bearbeiten",
fnreingbetrjgst=2,fnreingbetrhj=3,fnreingsuderjgst=4,fnreingneuangzurjgst=5,
fnreingfamiliennamesu=6,fnreingrufnamesu=7,fnreinggeburtsdatumsu=8,
fnreingkurse=9,fnreinguebernausjgst=10,fnreinguebernaushj=11,
fnreingcursorruhepos=12;LET jgst10="10",jgst11="11",jgst12="12",jgst13="13",
hj1="1",hj2="2";LET logtext1="Anw. 2.1.1 Wahl ",logtext2="übernehmen ",
logtext3=" nach ",logtext4=" für akt. ",text1=" """,text2=""" ",komma=", ",
punkt=".";TEXT VAR logmeldung;TEXT VAR betrjgst,betrhj,jgstfuersu,
jgstfuerneuang,aktjgst,schuelermenge,gewsj,sufamname,surufname,sugebdatum,
kurswahlgewünscht,uebernausjgst,uebernaushj;LET bearbeitungsmaske=
"ms wahldaten",fnrmeldungsfeld=1,fnrschuljahr=2,fnrschueler=3,
fnrerstesfachart=4,fnrersteeingabe=5,letztefeldnummer=195,
offsetnächsteeingabe=2,textfaecherwahl="Fächerwahl",textkurswahl="Kurswahl",
titelanfang=" eingeben für jetzige Jgst. ",titelmitte=" in ",trennerfuerjgst=
".",trennerfuerschuljahr="/";LET längedesfaches=2,längederart=2,
längederkennung=4,längefachmitkennung=6,längeeinesplbl=3,maxfächeroderkurse=
96,maximalewahlen=13;TEXT VAR aktuellerschueler,alleabiturklausurkürzel;LET
ankreuzung="x";TEXT VAR allefächeroderkursangebote;INT VAR
längefachoderkursangebot;LET längefachangebot=4,posfachimfachangebot=3,
längekursangebot=10,poskennungimkursangebot=3,endposkennungimkursangebot=6,
posartimkursangebot=9;LET listenmaske="mu objektliste",fnrerstesankreuzfeld=2
,felderprolisteneintrag=2,listeneintraegeproseite=18;LET andenanfang=1,
ansende=2,vorwaerts=3,rueckwaerts=4,dummyschueler="",sunamenstrenner=", ",
sulaengeohnedatum=60,datumstrenner=".",maxankreuzungen=1000,ankreuzungliste=
"x",keineankreuzung="",boolvektordatei="Boolvektor";BOUND ROW maxankreuzungen
BOOL VAR boolvektor;LET meldungfalschejgst=404,meldungfalscheshj=405,
meldungfalschejgstfuersu=404,meldungfalschejgstfuerneuang=404,
meldungmindestenseinejgst=409,meldungjgstsaufeinanderfolgend=410,
meldungjgstzurueckliegend=411,meldunghjzurueckliegend=412,
meldungnurzweiteshjmoeglich=413,meldungfeldleerlassen=390,meldungfamnamefehlt
=166,meldungrufnamefehlt=129,meldungsperrengescheitert=425,
meldungkeinenschülerangeben=414,meldungübernahmeinsichselbst=415,
meldungfrageuebernehmen=300,meldungdatenfehlen=68,meldunguebernehmen=301,
meldunginbearbeitung=352,meldungdatenuebernommen=302,meldungplausi=57,
meldunglistewirderstellt=7,meldungblaetternnichtmöglich=72,
meldungkurswahlserverfehlt=416,meldungsugruppeleer=423,meldungkeinangebot=417
,meldungangebotzugross=418,meldungzuvielewahlen=421,meldungfalscheskürzel=55,
meldunginkonsistenz=419,meldungdoppelbelegung=420,meldungspeicherung=50,
meldungspeicherfehler=73;LET kuerzelfuerneuang="N",kuerzelfuersuderjgst="O",
kuerzelfuerallesu="",kennungnursuname="N",kennungnurwahldatenzumsu="K",
kennungalleszumsu="A",längeeinerwahl=15,posklausurineinerwahl=1,
posartineinerwahl=2,leereart=" ",posfachineinerwahl=4,poskennungineinerwahl=
6,leerekennung=" ",posplbl1ineinerwahl=10,leererplbl=" ",
leerekennungundplbl=" ",kennungnurplanblöcke="P",poszweiterplbl=4,
keinplbl="",zusperrenderkwdatenraum="Kurswahl-2 ";LET dbtrenner="�",
textschulhalbjahr="Schulhalbjahr",textschuljahr="Schuljahr",
bestandabiturklausur="c02 abitur klausur";LET blank=" ",niltext="";TEXT VAR
zugrundeliegendeshj:=niltext,zugrundeliegendessj:=niltext,
zugrundeliegendejgst:=niltext;BOOL VAR übernahmeingang:=FALSE ,
bearbeitennachliste:=FALSE ,bearbeitungingang:=FALSE ;INT VAR aktuellezeile,
erstezeile,letztezeile;LET pufferdatenraum="temporärdatei";ROW maximalewahlen
TEXT VAR plbl1,plbl2;ROW maximalewahlenINT VAR fnrzurwahl;TEXT VAR eintrag;
FILE VAR f;BOOL VAR keineplanblöcke;INT VAR ptrfachoderkursangebot,zähler,
rücksprungweite:=1;PROC wahldatenveraendern:INT VAR fehlerstatus,fnr,i;BOOL
VAR sperregesetzt;IF NOT bearbeitennachlisteTHEN fehlerstatus:=
angabenpruefungdereingangsmaske(2);IF fehlerstatus<>0THEN infeld(fehlerstatus
);return(1);LEAVE wahldatenveraendernFI ;FI ;holeallerelevantendaten;
bearbeitungingang:=TRUE ;setzeueberschriftindenmaskekopf;
bleibendeangabenindiemaskefüllen;gefuelltebearbeitungsmaskeausgeben;
standardnproc.holeallerelevantendaten:IF NOT bearbeitennachlisteTHEN
kurswahlinitialisieren(aktjgst,betrjgst,betrhj,schuelermenge,gewsj);
kurswahlbasisholen(fehlerstatus);IF fehlerstatus<>0THEN infeld(
fnreingbetrjgst);wahldatenbeenden;standardmeldung(meldungkurswahlserverfehlt,
niltext);LEAVE wahldatenveraendernFI ;IF letzterschueler<ersterschuelerTHEN
IF schuelermenge=kuerzelfuerneuangTHEN infeld(fnreingneuangzurjgst)ELSE
infeld(fnreingsuderjgst)FI ;wahldatenbeenden;standardmeldung(
meldungsugruppeleer,niltext);LEAVE wahldatenveraendernFI ;
ermittlelistenstartundende;FI ;IF kurswahlgewünscht=niltextTHEN
zugrundeliegendejgst:=aktjgst;IF aktjgst<betrjgstCOR zugrundeliegendeshj<
betrhjTHEN geplanteshjundsjberechnen(zugrundeliegendeshj,zugrundeliegendessj)
;IF zugrundeliegendeshj=hj1THEN zugrundeliegendejgst:=text(int(aktjgst)+1,2)
FI FI ;allefächeroderkursangebote:=niltext;first(dnrfaecherangebot);
statleseschleife(dnrfaecherangebot,zugrundeliegendessj,zugrundeliegendeshj,
fnrfangsj,fnrfanghj,PROC (BOOL VAR )sammlefächerangebot);
längefachoderkursangebot:=längefachangebot;ELSE allefächeroderkursangebote:=
allekurse;längefachoderkursangebot:=längekursangebot;FI ;IF
allefächeroderkursangebote=niltextTHEN infeld(fnreingbetrjgst);
wahldatenbeenden;standardmeldung(meldungkeinangebot,niltext);LEAVE
wahldatenveraendernFI ;IF length(allefächeroderkursangebote)DIV
längefachoderkursangebot>maxfächeroderkurseTHEN infeld(fnreingbetrjgst);
wahldatenbeenden;standardmeldung(meldungangebotzugross,niltext);LEAVE
wahldatenveraendernFI ;alleabiturklausurkürzel:=ankreuzung;first(
dnrschluessel);statleseschleife(dnrschluessel,bestandabiturklausur,"",
fnrschlsachgebiet,fnrschlschluessel,PROC (BOOL VAR )sammlekürzel);IF
bearbeitennachlisteTHEN aktuellezeile:=erstezeile-1ELSE aktuellezeileDECR 1
FI ;naechsterindex(aktuellezeile);IF aktuellezeile=0THEN infeld(
fnreingbetrjgst);wahldatenbeenden;LEAVE wahldatenveraendernFI ;
kurswahlsperresetzen(zusperrenderkwdatenraum,sperregesetzt);IF NOT
sperregesetztTHEN infeld(fnreingbetrjgst);wahldatenbeenden;standardmeldung(
meldungsperrengescheitert,niltext);LEAVE wahldatenveraendernFI ;.
setzeueberschriftindenmaskekopf:TEXT VAR t;IF kurswahlgewünscht<>niltextTHEN
t:=textkurswahlELSE t:=textfaecherwahlFI ;tCAT titelanfang;tCAT aktjgst;tCAT
titelmitte;tCAT betrjgst;tCAT trennerfuerjgst;tCAT betrhj;standardstartproc(
bearbeitungsmaske);standardkopfmaskeaktualisieren(t).
bleibendeangabenindiemaskefüllen:standardmaskenfeld(text(gewsj,2)+
trennerfuerschuljahr+subtext(gewsj,3),fnrschuljahr);fnr:=fnrerstesfachart;
FOR iFROM 1UPTO length(allefächeroderkursangebote)DIV
längefachoderkursangebotREP eintrag:=subtext(allefächeroderkursangebote,1+(i-
1)*längefachoderkursangebot,i*längefachoderkursangebot);IF kurswahlgewünscht=
niltextTHEN eintrag:=subtext(eintrag,posfachimfachangebot)+blank+text(text(
eintrag,längederart),längederkennung)ELSE eintrag:=text(eintrag,
längedesfaches)+blank+subtext(eintrag,poskennungimkursangebot,
endposkennungimkursangebot)FI ;standardmaskenfeld(eintrag,fnr);fnrINCR
offsetnächsteeingabePER ;fnrINCR 1;WHILE fnr<=letztefeldnummerREP feldschutz(
fnr);fnrINCR offsetnächsteeingabePER .END PROC wahldatenveraendern;PROC
wahldatenspeichern(BOOL CONST speichern):INT VAR i,j,fnr,fehlerstatus;TEXT
VAR wahldaten,p1,p2,fname,rname,gebdat;IF speichernTHEN
evtlaktuelleplanblöckeholen;pruefeplausibilitaet;speicherungdurchfuehren;
logbucheintragausfuehrenFI ;naechsterindex(aktuellezeile);IF aktuellezeile<>0
THEN gefuelltebearbeitungsmaskeausgeben;return(1)ELSE wahldatenbeendenFI .
logbucheintragausfuehren:logmeldung:=betrjgst;logmeldungCAT punkt;logmeldung
CAT betrhj;logmeldungCAT text1;logmeldungCAT fname;logmeldungCAT komma;
logmeldungCAT rname;logmeldungCAT komma;logmeldungCAT gebdat;logmeldungCAT
text2;logbucheintragvornehmen(logmeldung);.evtlaktuelleplanblöckeholen:IF
kurswahlgewünscht<>niltextTHEN kurswahl1holen(fehlerstatus);keineplanblöcke:=
fehlerstatus<>0FI .pruefeplausibilitaet:standardmeldung(meldungplausi,niltext
);wahldaten:=niltext;zähler:=0;fnr:=fnrersteeingabe;FOR iFROM 1UPTO length(
allefächeroderkursangebote)DIV längefachoderkursangebotREP IF
standardmaskenfeld(fnr)<>niltextTHEN zählerINCR 1;IF zähler>maximalewahlen
THEN standardmeldung(meldungzuvielewahlen,niltext);infeld(fnr);return(1);
LEAVE wahldatenspeichernFI ;IF length(standardmaskenfeld(fnr))>1COR pos(
alleabiturklausurkürzel,standardmaskenfeld(fnr))=0THEN standardmeldung(
meldungfalscheskürzel,niltext);infeld(fnr);return(1);LEAVE wahldatenspeichern
FI ;IF standardmaskenfeld(fnr)=ankreuzungTHEN wahldatenCAT blankELSE
wahldatenCAT standardmaskenfeld(fnr)FI ;ptrfachoderkursangebot:=(i-1)*
längefachoderkursangebot;IF kurswahlgewünscht=niltextTHEN wahldatenCAT
subtext(allefächeroderkursangebote,ptrfachoderkursangebot+1,
ptrfachoderkursangebot+längefachoderkursangebot);wahldatenCAT
leerekennungundplbl;ELSE wahldatenCAT subtext(allefächeroderkursangebote,
ptrfachoderkursangebot+posartimkursangebot,ptrfachoderkursangebot+
längekursangebot);p1:=subtext(allefächeroderkursangebote,
ptrfachoderkursangebot+1,ptrfachoderkursangebot+längefachmitkennung);
wahldatenCAT p1;IF keineplanblöckeTHEN wahldatenCAT leererplbl;wahldatenCAT
leererplblELSE p1:=kursdaten(p1,kennungnurplanblöcke);IF p1=keinplblTHEN p1:=
leererplbl;p2:=leererplblELSE p2:=subtext(p1,poszweiterplbl);p1:=subtext(p1,1
,längeeinesplbl)FI ;FOR jFROM 1UPTO zähler-1REP IF (p1<>leererplblCAND (p1=
plbl1[j]COR p1=plbl2[j]))COR (p2<>leererplblCAND (p2=plbl2[j]COR p2=plbl1[j])
)THEN standardmeldung(meldungdoppelbelegung,standardmaskenfeld(fnrzurwahl[j])
+"#");infeld(fnr);return(1);LEAVE wahldatenspeichernFI ;PER ;plbl1[zähler]:=
p1;plbl2[zähler]:=p2;wahldatenCAT p1;wahldatenCAT p2;fnrzurwahl[zähler]:=fnr-
1;FI FI FI ;fnrINCR offsetnächsteeingabePER .speicherungdurchfuehren:
standardmeldung(meldungspeicherung,niltext);i:=pos(aktuellerschueler,
dbtrenner);j:=pos(aktuellerschueler,dbtrenner,i+1);fname:=text(
aktuellerschueler,i-1);rname:=subtext(aktuellerschueler,i+1,j-1);gebdat:=
subtext(aktuellerschueler,j+1);schuelerwahleintragen(fname,rname,gebdat,
wahldaten);.END PROC wahldatenspeichern;PROC wahldatenbeenden:INT VAR
fehlerstatus:=0,i;rücksprungweite:=1;IF übernahmeingangTHEN forget(
pufferdatenraum,quiet);FOR iFROM fnreingbetrjgstUPTO fnreinguebernaushjREP
feldfrei(i)PER ;feldschutz(fnreingcursorruhepos);infeld(fnreingbetrjgst);IF
NOT bearbeitungingangTHEN kurswahlsperrebeenden(zusperrenderkwdatenraum);
rücksprungweiteINCR 1FI ;übernahmeingang:=FALSE ELSE IF bearbeitennachliste
COR bearbeitungingangTHEN fülleeingangsmaskeFI FI ;IF bearbeitennachliste
THEN forget(boolvektordatei,quiet);bearbeitennachliste:=FALSE ;
rücksprungweiteINCR 1FI ;IF bearbeitungingangTHEN kurswahl2sichern(
fehlerstatus);IF fehlerstatus<>0THEN standardmeldung(meldungspeicherfehler,
niltext);infeld(fnreingbetrjgst)FI ;kurswahlsperrebeenden(
zusperrenderkwdatenraum);bearbeitungingang:=FALSE ;rücksprungweiteINCR 1FI ;
return(rücksprungweite).fülleeingangsmaske:standardstartproc(eingangsmaske);
standardkopfmaskeaktualisieren(textzumeingangsknoten);standardmaskenfeld(
betrjgst,fnreingbetrjgst);standardmaskenfeld(betrhj,fnreingbetrhj);
standardmaskenfeld(jgstfuersu,fnreingsuderjgst);standardmaskenfeld(
jgstfuerneuang,fnreingneuangzurjgst);standardmaskenfeld(sufamname,
fnreingfamiliennamesu);standardmaskenfeld(surufname,fnreingrufnamesu);
standardmaskenfeld(sugebdatum,fnreinggeburtsdatumsu);standardmaskenfeld(
kurswahlgewünscht,fnreingkurse);standardmaskenfeld(uebernausjgst,
fnreinguebernausjgst);standardmaskenfeld(uebernaushj,fnreinguebernaushj);
standardmaskenfeld(niltext,fnreingcursorruhepos);.END PROC wahldatenbeenden;
PROC wahldatenuebernehmen(BOOL CONST hauptaktion):INT VAR i,j1,j2,j3,j4,
fehlerstatus;TEXT VAR zeile,wahlen,t;BOOL VAR sperregesetzt;IF NOT
hauptaktionTHEN fehlerstatus:=angabenpruefungdereingangsmaske(1);IF
fehlerstatus<>0THEN infeld(fehlerstatus);return(1);LEAVE wahldatenuebernehmen
FI ;kurswahlinitialisieren(aktjgst,uebernausjgst,uebernaushj,schuelermenge,
gewsj);kurswahlbasisholen(fehlerstatus);IF fehlerstatus<>0THEN
standardmeldung(meldungkurswahlserverfehlt,niltext);infeld(fnreingbetrjgst);
return(1);LEAVE wahldatenuebernehmenFI ;IF letzterschueler<ersterschueler
THEN standardmeldung(meldungsugruppeleer,niltext);IF schuelermenge=
kuerzelfuerneuangTHEN infeld(fnreingneuangzurjgst)ELSE infeld(
fnreingsuderjgst)FI ;return(1);LEAVE wahldatenuebernehmenFI ;IF NOT
kurswahldatenvorhandenTHEN standardmeldung(meldungdatenfehlen,niltext);infeld
(fnreinguebernausjgst);return(1);LEAVE wahldatenuebernehmenFI ;f:=
sequentialfile(output,pufferdatenraum);FOR iFROM ersterschuelerUPTO
letzterschuelerREP putline(f,wahldatenzumindex(i,kennungalleszumsu))PER ;
kurswahlinitialisieren(aktjgst,betrjgst,betrhj,schuelermenge,gewsj);
kurswahlbasisholen(fehlerstatus);IF fehlerstatus<>0THEN standardmeldung(
meldungkurswahlserverfehlt,niltext);infeld(fnreingbetrjgst);forget(
pufferdatenraum,quiet);return(1);LEAVE wahldatenuebernehmenFI ;
kurswahlsperresetzen(zusperrenderkwdatenraum,sperregesetzt);IF NOT
sperregesetztTHEN standardmeldung(meldungsperrengescheitert,niltext);infeld(
fnreingbetrjgst);forget(pufferdatenraum,quiet);return(1);LEAVE
wahldatenuebernehmenFI ;übernahmeingang:=TRUE ;standardmeldung(
meldungfrageuebernehmen,niltext);FOR iFROM fnreingbetrjgstUPTO
fnreinguebernaushjREP feldschutz(i)PER ;feldfrei(fnreingcursorruhepos);infeld
(fnreingcursorruhepos);standardnproc;ELSE standardmeldung(meldunguebernehmen,
niltext);bearbeitungingang:=TRUE ;f:=sequentialfile(input,pufferdatenraum);
WHILE NOT eof(f)REP getline(f,zeile);j1:=pos(zeile,dbtrenner);j2:=pos(zeile,
dbtrenner,j1+1);j3:=pos(zeile,dbtrenner,j2+1);j4:=pos(zeile,dbtrenner,j3+1);
standardmeldung(meldunginbearbeitung,subtext(zeile,j1+1,j2-1)+"#");IF
kurswahlgewünscht=niltextTHEN t:=text(zeile,j1-1);wahlen:=niltext;FOR iFROM 1
UPTO length(t)DIV längeeinerwahlREP wahlenCAT subtext(t,(i-1)*längeeinerwahl+
1,(i-1)*längeeinerwahl+poskennungineinerwahl-1);wahlenCAT leerekennungundplbl
PER ELSE wahlen:=text(zeile,j1-1)FI ;schuelerwahleintragen(subtext(zeile,j1+1
,j2-1),subtext(zeile,j2+1,j3-1),subtext(zeile,j3+1,j4-1),wahlen);PER ;
standardmeldung(meldungdatenuebernommen,niltext);logmeldung:=logtext2;
logmeldungCAT uebernausjgst;logmeldungCAT punkt;logmeldungCAT uebernaushj;
logmeldungCAT logtext3;logmeldungCAT betrjgst;logmeldungCAT punkt;logmeldung
CAT betrhj;logmeldungCAT logtext4;logmeldungCAT aktjgst;
logbucheintragvornehmen(logmeldung);wahldatenbeendenFI END PROC
wahldatenuebernehmen;PROC wahldatenschuelerlisten:INT VAR i,fehlerstatus;
fehlerstatus:=angabenpruefungdereingangsmaske(2);IF fehlerstatus<>0THEN
infeld(fehlerstatus);return(1);LEAVE wahldatenschuelerlistenFI ;
standardmeldung(meldunglistewirderstellt,niltext);kurswahlinitialisieren(
aktjgst,betrjgst,betrhj,schuelermenge,gewsj);kurswahlbasisholen(fehlerstatus)
;IF fehlerstatus<>0THEN standardmeldung(meldungkurswahlserverfehlt,niltext);
infeld(fnreingbetrjgst);return(1);LEAVE wahldatenschuelerlistenFI ;IF
letzterschueler<ersterschuelerTHEN standardmeldung(meldungsugruppeleer,
niltext);IF schuelermenge=kuerzelfuerneuangTHEN infeld(fnreingneuangzurjgst)
ELSE infeld(fnreingsuderjgst)FI ;return(1);LEAVE wahldatenschuelerlistenFI ;
bearbeitennachliste:=TRUE ;ermittlelistenstartundende;initboolvektor;
standardstartproc(listenmaske);listezeigenabzeile(aktuellezeile);
wahldatenlistenachbereiten.initboolvektor:boolvektor:=new(boolvektordatei);
FOR iFROM erstezeileUPTO letztezeileREP boolvektor(i):=FALSE PER .END PROC
wahldatenschuelerlisten;PROC wahldatenlisteblaettern(INT CONST aktion):
SELECT aktionOF CASE andenanfang:aktuellezeile:=erstezeile;listezeigenabzeile
(aktuellezeile)CASE ansende:IF aktuellezeile+listeneintraegeproseite>
letztezeileTHEN standardmeldung(meldungblaetternnichtmöglich,"")ELSE
aktuellezeile:=max(1,letztezeile-listeneintraegeproseite+1);
listezeigenabzeile(aktuellezeile)FI CASE vorwaerts:IF aktuellezeile+
listeneintraegeproseite>letztezeileTHEN standardmeldung(
meldungblaetternnichtmöglich,"")ELSE aktuellezeileINCR
listeneintraegeproseite;listezeigenabzeile(aktuellezeile)FI CASE rueckwaerts:
IF aktuellezeile=erstezeileTHEN standardmeldung(meldungblaetternnichtmöglich,
"")ELSE aktuellezeileDECR listeneintraegeproseite;aktuellezeile:=max(
aktuellezeile,erstezeile);listezeigenabzeile(aktuellezeile)FI END SELECT ;
return(1)END PROC wahldatenlisteblaettern;PROC wahldatenlistenachbereiten:
INT VAR i,fnr;infeld(fnrerstesankreuzfeld);standardnproc;fnr:=
fnrerstesankreuzfeld;FOR iFROM aktuellezeileUPTO min(aktuellezeile+
listeneintraegeproseite,letztezeile)REP boolvektor(i):=standardmaskenfeld(fnr
)<>niltext;fnrINCR felderprolisteneintragPER END PROC
wahldatenlistenachbereiten;PROC ermittlelistenstartundende:INT VAR index,j1,
j2;TEXT VAR t;letztezeile:=min(maxankreuzungen,letzterschueler);erstezeile:=
min(ersterschueler,letztezeile);aktuellezeile:=erstergewuenschterschueler.
erstergewuenschterschueler:index:=erstezeile;IF sufamname<>niltextTHEN t:=
wahldatenzumindex(index,kennungnursuname);j1:=pos(t,dbtrenner);WHILE
sufamname>text(t,j1-1)CAND index<letztezeileREP indexINCR 1;t:=
wahldatenzumindex(index,kennungnursuname);j1:=pos(t,dbtrenner);PER ;IF
sufamname=text(t,j1-1)THEN j2:=pos(t,dbtrenner,j1+1);WHILE sufamname=text(t,
j1-1)CAND surufname>subtext(t,j1+1,j2-1)CAND index<letztezeileREP indexINCR 1
;t:=wahldatenzumindex(index,kennungnursuname);j1:=pos(t,dbtrenner);j2:=pos(t,
dbtrenner,j1+1);PER ;FI ;IF sugebdatum<>niltextTHEN WHILE sufamname=text(t,j1
-1)CAND surufname=subtext(t,j1+1,j2-1)CAND text(sugebdatum,2)+datumstrenner+
subtext(sugebdatum,3,4)+datumstrenner+subtext(sugebdatum,5)<>subtext(t,j2+1)
CAND index<letztezeileREP indexINCR 1;t:=wahldatenzumindex(index,
kennungnursuname);j1:=pos(t,dbtrenner);j2:=pos(t,dbtrenner,j1+1);PER ;FI ;FI
;index.END PROC ermittlelistenstartundende;PROC listezeigenabzeile(INT CONST
zeile):INT VAR i,j1,j2,fnr;TEXT VAR t,t1;fnr:=fnrerstesankreuzfeld;FOR iFROM
zeileUPTO zeile+listeneintraegeproseiteREP IF i<=letztezeileTHEN t:=
wahldatenzumindex(i,kennungnursuname);feldfrei(fnr);IF boolvektor(i)THEN
standardmaskenfeld(ankreuzungliste,fnr);ELSE standardmaskenfeld(
keineankreuzung,fnr);FI ;bereiteschuelerzeileauf;standardmaskenfeld(t1,fnr+1)
;ELSE standardmaskenfeld(niltext,fnr);feldschutz(fnr);standardmaskenfeld(
dummyschueler,fnr+1)FI ;fnrINCR felderprolisteneintrag;PER ;infeld(
fnrerstesankreuzfeld);standardfelderausgeben;.bereiteschuelerzeileauf:j1:=pos
(t,dbtrenner);j2:=pos(t,dbtrenner,j1+1);t1:=text(t,j1-1);t1CAT
sunamenstrenner;t1CAT subtext(t,j1+1,j2-1);t1:=text(t1,sulaengeohnedatum);t1
CAT blank;t1CAT subtext(t,j2+1).END PROC listezeigenabzeile;PROC
naechsterindex(INT VAR index):indexINCR 1;IF bearbeitennachlisteTHEN WHILE
index<=letztezeileCAND NOT boolvektor(index)REP indexINCR 1PER FI ;IF index>
letztezeileTHEN index:=0FI END PROC naechsterindex;PROC sammlefächerangebot(
BOOL VAR b):IF intwert(fnrfangsj)>int(zugrundeliegendessj)COR intwert(
fnrfanghj)>int(zugrundeliegendeshj)COR intwert(fnrfangjgst)>int(
zugrundeliegendejgst)COR dbstatus<>0THEN b:=TRUE ELIF intwert(fnrfangjgst)=
int(zugrundeliegendejgst)THEN allefächeroderkursangeboteCAT text(wert(
fnrfangart),längederart);allefächeroderkursangeboteCAT text(wert(fnrfangfach)
,längedesfaches);FI END PROC sammlefächerangebot;PROC sammlekürzel(BOOL VAR b
):IF wert(fnrschlsachgebiet)<>bestandabiturklausurCOR dbstatus<>0THEN b:=
TRUE ELSE alleabiturklausurkürzelCAT wert(fnrschlschluessel)FI ;END PROC
sammlekürzel;PROC gefuelltebearbeitungsmaskeausgeben:TEXT VAR wahldaten,
klausurleiste,suchtext;INT VAR i,anfposaktuellewahl,position,fnr;BOOL VAR
warnung:=FALSE ;wahldaten:=wahldatenzumindex(aktuellezeile,kennungnursuname);
aktuellerschueler:=wahldaten;changeall(wahldaten,dbtrenner,sunamenstrenner);
standardmaskenfeld(text(wahldaten,standardfeldlaenge(fnrschueler)),
fnrschueler);wahldaten:=wahldatenzumindex(aktuellezeile,
kennungnurwahldatenzumsu);klausurleiste:=(length(allefächeroderkursangebote)
DIV längefachoderkursangebot)*dbtrenner;FOR iFROM 1UPTO length(wahldaten)DIV
längeeinerwahlREP anfposaktuellewahl:=(i-1)*längeeinerwahl;IF
kurswahlgewünscht=niltextTHEN IF subtext(wahldaten,anfposaktuellewahl+
poskennungineinerwahl,anfposaktuellewahl+posplbl1ineinerwahl-1)<>leerekennung
THEN warnung:=TRUE FI ;IF subtext(wahldaten,anfposaktuellewahl+
posartineinerwahl,anfposaktuellewahl+posfachineinerwahl-1)=leereartTHEN
warnung:=TRUE ELSE suchtext:=subtext(wahldaten,anfposaktuellewahl+
posartineinerwahl,anfposaktuellewahl+poskennungineinerwahl-1);position:=pos(
allefächeroderkursangebote,suchtext);WHILE position<>0CAND positionMOD
längefachoderkursangebot<>1REP position:=pos(allefächeroderkursangebote,
suchtext,position+1);PER ;IF position=0THEN warnung:=TRUE ELSE position:=
positionDIV längefachoderkursangebot+1;IF (klausurleisteSUB position)<>
dbtrennerTHEN warnung:=TRUE ELSE IF (wahldatenSUB (anfposaktuellewahl+
posklausurineinerwahl))=blankTHEN change(klausurleiste,position,position,
ankreuzung)ELSE change(klausurleiste,position,position,wahldatenSUB (
anfposaktuellewahl+posklausurineinerwahl))FI FI ;FI FI ELSE IF subtext(
wahldaten,anfposaktuellewahl+posartineinerwahl,anfposaktuellewahl+
posfachineinerwahl-1)=leereartTHEN warnung:=TRUE FI ;suchtext:=subtext(
wahldaten,anfposaktuellewahl+posfachineinerwahl,anfposaktuellewahl+
posplbl1ineinerwahl-1);position:=pos(allefächeroderkursangebote,suchtext);
WHILE position<>0CAND positionMOD längefachoderkursangebot<>1REP position:=
pos(allefächeroderkursangebote,suchtext,position+1);PER ;IF position=0THEN
warnung:=TRUE ELSE position:=positionDIV längefachoderkursangebot+1;IF (
klausurleisteSUB position)<>dbtrennerTHEN warnung:=TRUE ELSE IF (wahldaten
SUB (anfposaktuellewahl+posklausurineinerwahl))=blankTHEN change(
klausurleiste,position,position,ankreuzung)ELSE change(klausurleiste,position
,position,wahldatenSUB (anfposaktuellewahl+posklausurineinerwahl))FI FI FI
FI ;PER ;fnr:=fnrersteeingabe;FOR iFROM 1UPTO length(klausurleiste)REP IF (
klausurleisteSUB i)=dbtrennerTHEN standardmaskenfeld(niltext,fnr)ELSE
standardmaskenfeld(klausurleisteSUB i,fnr)FI ;fnrINCR offsetnächsteeingabe
PER ;IF warnungTHEN standardmeldung(meldunginkonsistenz,niltext);infeld(
fnrschuljahr)ELSE infeld(fnrmeldungsfeld)FI ;standardfelderausgeben;infeld(
fnrersteeingabe)END PROC gefuelltebearbeitungsmaskeausgeben;INT PROC
angabenpruefungdereingangsmaske(INT CONST aktion):INT VAR fehlerstatus;
betrjgst:=standardmaskenfeld(fnreingbetrjgst);betrhj:=standardmaskenfeld(
fnreingbetrhj);IF betrjgst<>jgst11AND betrjgst<>jgst12AND betrjgst<>jgst13
THEN standardmeldung(meldungfalschejgst,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreingbetrjgstFI ;IF betrhj<>hj1AND
betrhj<>hj2THEN standardmeldung(meldungfalscheshj,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreingbetrhjFI ;jgstfuersu:=
standardmaskenfeld(fnreingsuderjgst);IF jgstfuersu<>niltextCAND jgstfuersu<>
jgst10CAND jgstfuersu<>jgst11CAND jgstfuersu<>jgst12CAND jgstfuersu<>jgst13
THEN standardmeldung(meldungfalschejgstfuersu,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreingsuderjgstFI ;jgstfuerneuang:=
standardmaskenfeld(fnreingneuangzurjgst);IF jgstfuerneuang<>niltextCAND
jgstfuerneuang<>jgst11CAND jgstfuerneuang<>jgst12CAND jgstfuerneuang<>jgst13
THEN standardmeldung(meldungfalschejgstfuerneuang,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreingneuangzurjgstFI ;IF jgstfuersu=
niltextCAND jgstfuerneuang=niltextTHEN standardmeldung(
meldungmindestenseinejgst,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
fnreingsuderjgstFI ;IF jgstfuersu<>niltextCAND jgstfuerneuang<>niltextCAND
int(jgstfuersu)+1<>int(jgstfuerneuang)THEN standardmeldung(
meldungjgstsaufeinanderfolgend,niltext);LEAVE angabenpruefungdereingangsmaske
WITH fnreingsuderjgstFI ;zugrundeliegendeshj:=schulkenndatum(
textschulhalbjahr);zugrundeliegendessj:=schulkenndatum(textschuljahr);IF
jgstfuerneuang<>niltextTHEN IF jgstfuerneuang>betrjgstTHEN standardmeldung(
meldungjgstzurueckliegend,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
fnreingbetrjgstFI ;aktjgst:=text(int(jgstfuerneuang)-1);IF jgstfuersu<>
niltextTHEN schuelermenge:=kuerzelfuerallesuELSE schuelermenge:=
kuerzelfuerneuangFI ELSE IF jgstfuersu>betrjgstTHEN standardmeldung(
meldungjgstzurueckliegend,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
fnreingbetrjgstFI ;IF betrjgst=jgstfuersuCAND betrhj<zugrundeliegendeshjTHEN
standardmeldung(meldunghjzurueckliegend,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreingbetrhjFI ;aktjgst:=jgstfuersu;
schuelermenge:=kuerzelfuersuderjgstFI ;IF aktjgst=jgst10CAND
zugrundeliegendeshj=hj1THEN standardmeldung(meldungnurzweiteshjmoeglich,
niltext);IF jgstfuersu<>niltextTHEN LEAVE angabenpruefungdereingangsmaske
WITH fnreingsuderjgstELSE LEAVE angabenpruefungdereingangsmaskeWITH
fnreingneuangzurjgstFI FI ;kurswahlgewünscht:=standardmaskenfeld(fnreingkurse
);sufamname:=standardmaskenfeld(fnreingfamiliennamesu);surufname:=
standardmaskenfeld(fnreingrufnamesu);sugebdatum:=standardmaskenfeld(
fnreinggeburtsdatumsu);uebernausjgst:=standardmaskenfeld(fnreinguebernausjgst
);uebernaushj:=standardmaskenfeld(fnreinguebernaushj);IF aktion=2THEN IF
sufamname=niltextCAND (surufname<>niltextOR sugebdatum<>niltext)THEN
standardmeldung(meldungfamnamefehlt,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreingfamiliennamesuFI ;IF surufname=
niltextCAND sugebdatum<>niltextTHEN standardmeldung(meldungrufnamefehlt,
niltext);LEAVE angabenpruefungdereingangsmaskeWITH fnreingrufnamesuFI ;IF
sugebdatum<>niltextTHEN standardpruefe(6,fnreinggeburtsdatumsu,0,0,"",
fehlerstatus);IF fehlerstatus<>0THEN LEAVE angabenpruefungdereingangsmaske
WITH fehlerstatusFI FI ;IF uebernausjgst<>niltextTHEN standardmeldung(
meldungfeldleerlassen,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
fnreinguebernausjgstFI ;IF uebernaushj<>niltextTHEN standardmeldung(
meldungfeldleerlassen,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
fnreinguebernaushjFI ELSE IF length(sufamname)+length(surufname)+length(
sugebdatum)>0THEN standardmeldung(meldungkeinenschülerangeben,niltext);IF
sufamname<>niltextTHEN LEAVE angabenpruefungdereingangsmaskeWITH
fnreingfamiliennamesuELIF surufname<>niltextTHEN LEAVE
angabenpruefungdereingangsmaskeWITH fnreingrufnamesuELSE LEAVE
angabenpruefungdereingangsmaskeWITH fnreinggeburtsdatumsuFI ;FI ;IF
uebernausjgst<>jgst11AND uebernausjgst<>jgst12AND uebernausjgst<>jgst13THEN
standardmeldung(meldungfalschejgst,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreinguebernausjgstFI ;IF uebernaushj<>
hj1AND uebernaushj<>hj2THEN standardmeldung(meldungfalscheshj,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreinguebernaushjFI ;IF uebernausjgst=
betrjgstCAND uebernaushj=betrhjTHEN standardmeldung(
meldungübernahmeinsichselbst,niltext);LEAVE angabenpruefungdereingangsmaske
WITH fnreinguebernausjgstFI ;IF jgstfuerneuang<>niltextTHEN IF jgstfuerneuang
>uebernausjgstTHEN standardmeldung(meldungjgstzurueckliegend,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreinguebernausjgstFI ;ELSE IF
jgstfuersu>uebernausjgstTHEN standardmeldung(meldungjgstzurueckliegend,
niltext);LEAVE angabenpruefungdereingangsmaskeWITH fnreinguebernausjgstFI ;
IF uebernausjgst=jgstfuersuCAND uebernaushj<zugrundeliegendeshjTHEN
standardmeldung(meldunghjzurueckliegend,niltext);LEAVE
angabenpruefungdereingangsmaskeWITH fnreinguebernaushjFI ;FI ;FI ;0END PROC
angabenpruefungdereingangsmaske;PROC logbucheintragvornehmen(TEXT CONST
escfunktion):logeintrag(logtext1+escfunktion)END PROC logbucheintragvornehmen
;END PACKET erfwahldaten
|