summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/2.erf wahldaten
blob: 79ab36c694f9280fc2187115df55c0db7700845e (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
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