summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/2.likw wahl und kursdaten sek2
blob: 992c52b009e8bba45b267f1fe0e4e0a0af1184c7 (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
PACKET likwwahlundkursdatensek2DEFINES wahlundkursdatenmaskebearbeiten,
wahlundkursdatenggfstarten,wahlundkursdatennaechsteliste,
wahlundkursdatenabschluss,wahlundkursdatenggfbestandueberankreuzliste,
wahlundkursdatenblaettern,wahldatenlistenseiteaktualisieren:LET objektmaske=
"mu objektliste",eingangsmaske="ms wahl und kursdaten sek2 eingang",
fnr2jgstls=2,fnr3jgstneu=3,fnr4famname=4,fnr5rufname=5,fnr6gebdat=6,fnr7bs=7,
fnr8dr=8,mnrauswahlnichtsinnvoll=56,mnrlistewirdgedruckt=58,
mnrdatenexistierennicht=59,mnrbittewarten=69,mnrdruckausgabefuerwirdgedruckt=
125,mnrschuelernichtimentsprbestand=126,mnralledruckausgabenerstellt=128,
mnrangabenpraezisieren=129,mnrungueltigesdatum=157,mnrjgstfehlt=172,
mnrjgstoderschueler=318,mnrjgstfalsch=404,mnrkeinekwdatenda=406,
mnrkeinedatendain=407,mnrjgstoderbestschueler=422,trenner="�",neuang="N",
mitneuang="",ohneneuang="O";INT VAR mnrallgemein,egmaskefeldnr,status,erster,
letzter,aktschueler,zaehler,pos1,pos2;TEXT VAR fach,mnrzusatz,ueb2,hilfstext;
LET null=0,platzhalter="mehr- fach  ",niltext="",punkt=".",blank=" ",dopp=":"
,doppblank=": ",blanksdopp="   :";LET maxanzfaecher=100,maxanzschulhj=10;ROW 
maxanzfaecherROW maxanzschulhjTEXT VAR faecherschulhj;INT VAR ixfaecher,
ixschulhj,anzfaecher;TEXT VAR uebsj,uebjgst,faecherstring,faecher,kennungen,
klausuren,punkte,kursarten,zeile1,zeile2;BOOL VAR ankreuzliste,
bildschirmausgabe,lsundneue,nurneue,nurls,bestschueler,faecherstringok;TEXT 
VAR sj,hj,kwsj,jgstls,jgstneu,famname,rufname,gebdat;FILE VAR ausgabedatei;
TEXT CONST ueb1:="Wahl- und Kursdaten von";LET fnrerstesankreuzfeld=2,
felderprolisteneintrag=2,listeneintraegeproseite=18;LET 
meldungblaetternnichtmöglich=72;LET dummyschueler="",sunamenstrenner=", ",
sulaengeohnedatum=60,maxankreuzungen=1000,ankreuzung="x",keineankreuzung="",
kennungnursuname="N",boolvektordatei="Boolvektor";BOOL VAR bearbeitungingang
:=FALSE ;BOUND ROW maxankreuzungenBOOL VAR boolvektor;INT VAR aktuellezeile;
PROC wahlundkursdatenmaskebearbeiten:standardvproc(eingangsmaske);
ankreuzliste:=FALSE ;END PROC wahlundkursdatenmaskebearbeiten;PROC 
wahlundkursdatenggfbestandueberankreuzliste:IF plausisallgemokAND 
plausisspezankreuzokAND kurswahldatenraumdaTHEN ankreuzliste:=TRUE ;
aktuellezeile:=erster;initboolvektor;standardstartproc(objektmaske);
listezeigenabzeile(aktuellezeile);wahldatenlistenseiteaktualisieren;ELSE 
standardmeldung(mnrallgemein,niltext);return(1);FI ;.plausisspezankreuzok:
BOOL VAR ok:=FALSE ;IF bestschuelerTHEN mnrallgemein:=mnrjgstoderbestschueler
;infeld(fnr4famname);ELSE ok:=TRUE FI ;ok.initboolvektor:boolvektor:=new(
boolvektordatei);FOR zaehlerFROM ersterUPTO letzterREP boolvektor(zaehler):=
FALSE PER ;END PROC wahlundkursdatenggfbestandueberankreuzliste;PROC 
wahlundkursdatenggfstarten:bearbeitungingang:=FALSE ;IF ankreuzlisteTHEN 
ersterDECR 1;naechsterindex(erster);startenELSE IF NOT plausisallgemokCOR 
NOT plausisspezokTHEN standardmeldung(mnrallgemein,niltext);return(1);ELSE 
startenFI ;FI ;.plausisspezok:IF bestschuelerTHEN IF NOT bestschuelerkorrekt
THEN standardmeldung(mnrangabenpraezisieren,niltext);infeld(egmaskefeldnr);
LEAVE plausisspezokWITH FALSE ELSE erster:=1;letzter:=1;FI ;ELSE IF lsundneue
THEN IF int(jgstls)<>int(jgstneu)-1THEN mnrallgemein:=mnrjgstfalsch;infeld(
fnr2jgstls);LEAVE plausisspezokWITH FALSE FI ;FI ;IF NOT kurswahldatenraumda
THEN infeld(fnr2jgstls);LEAVE plausisspezokWITH FALSE FI ;FI ;TRUE .
bestschuelerkorrekt:IF rufname=niltextTHEN IF gebdat=niltextTHEN IF 
famnameeindeutigTHEN rufname:=wert(fnrsurufnames);gebdat:=wert(fnrsugebdatums
);LEAVE bestschuelerkorrektWITH TRUE ELSE LEAVE bestschuelerkorrektWITH 
FALSE ;FI ;ELSE egmaskefeldnr:=fnr5rufname;mnrallgemein:=
mnrangabenpraezisieren;LEAVE bestschuelerkorrektWITH FALSE ;FI ;ELSE IF 
gebdat<>niltextTHEN hilfstext:=subtext(gebdat,1,2);hilfstextCAT punkt;
hilfstextCAT subtext(gebdat,3,4);hilfstextCAT punkt;hilfstextCAT subtext(
gebdat,5,6);gebdat:=hilfstext;IF kompletterschluesselokTHEN LEAVE 
bestschuelerkorrektWITH TRUE ELSE LEAVE bestschuelerkorrektWITH FALSE FI ;
ELSE IF famnameundrufnameeindeutigTHEN gebdat:=wert(fnrsugebdatums);LEAVE 
bestschuelerkorrektWITH TRUE ELSE LEAVE bestschuelerkorrektWITH FALSE ;FI ;
FI ;FI ;TRUE END PROC wahlundkursdatenggfstarten;BOOL PROC famnameeindeutig:
inittupel(dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsurufnames,
rufname);putwert(fnrsugebdatums,gebdat);putwert(fnrsustatuss,"ls");search(
dnrschueler,FALSE );IF wert(fnrsufamnames)<>famnameTHEN egmaskefeldnr:=
fnr4famname;mnrallgemein:=mnrdatenexistierennicht;LEAVE famnameeindeutigWITH 
FALSE ;ELSE succ(dnrschueler);IF wert(fnrsufamnames)=famnameTHEN 
egmaskefeldnr:=fnr5rufname;mnrallgemein:=mnrangabenpraezisieren;LEAVE 
famnameeindeutigWITH FALSE ;ELSE pred(dnrschueler)FI ;FI ;TRUE END PROC 
famnameeindeutig;BOOL PROC famnameundrufnameeindeutig:inittupel(dnrschueler);
putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);putwert(
fnrsugebdatums,gebdat);putwert(fnrsustatuss,"ls");search(dnrschueler,FALSE );
IF wert(fnrsufamnames)<>famnameCOR wert(fnrsurufnames)<>rufnameTHEN 
egmaskefeldnr:=fnr4famname;mnrallgemein:=mnrdatenexistierennicht;LEAVE 
famnameundrufnameeindeutigWITH FALSE ELSE succ(dnrschueler);IF wert(
fnrsufamnames)=famnameAND wert(fnrsurufnames)=rufnameTHEN egmaskefeldnr:=
fnr6gebdat;mnrallgemein:=mnrangabenpraezisieren;LEAVE 
famnameundrufnameeindeutigWITH FALSE ELSE pred(dnrschueler)FI ;FI ;TRUE END 
PROC famnameundrufnameeindeutig;BOOL PROC kompletterschluesselok:BOOL VAR 
insek2:=TRUE ;standardpruefe(6,fnr6gebdat,null,null,niltext,status);IF status
<>0THEN egmaskefeldnr:=fnr6gebdat;mnrallgemein:=mnrungueltigesdatum;LEAVE 
kompletterschluesselokWITH FALSE ;FI ;hilfstext:=subtext(gebdat,1,2);
hilfstextCAT punkt;hilfstextCAT subtext(gebdat,3,4);hilfstextCAT punkt;
hilfstextCAT subtext(gebdat,5,6);gebdat:=hilfstext;inittupel(dnrschueler);
putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);putwert(
fnrsugebdatums,gebdat);putwert(fnrsustatuss,"ls");search(dnrschueler,TRUE );
IF dbstatus<>0COR intwert(fnrsusgrpjgst)<11THEN egmaskefeldnr:=fnr4famname;
mnrallgemein:=mnrschuelernichtimentsprbestand;insek2:=FALSE FI ;insek2END 
PROC kompletterschluesselok;PROC starten:aktschueler:=erster;IF 
bildschirmausgabeTHEN listeaufbereiten;bearbeitungingang:=TRUE ;rename(
"liste.1","Wahl- und Kursdaten");zeigedatei("Wahl- und Kursdaten","vr");ELSE 
IF ankreuzlisteTHEN WHILE aktschueler<>0REP 
listeaufbereitendruckenundloeschenodermeldung;naechsterindex(aktschueler);
PER ;ankreuzliste:=FALSE ;bearbeitungingang:=FALSE ;forget(boolvektordatei,
quiet);standardstartproc(eingangsmaske);egmaskenfelderleerenzurueckundmeldung
(2);ELSE FOR aktschuelerFROM ersterUPTO letzterREP 
listeaufbereitendruckenundloeschenodermeldung;PER ;
egmaskenfelderleerenzurueckundmeldung(1);FI ;FI ;END PROC starten;PROC 
listeaufbereitendruckenundloeschenodermeldung:IF NOT schuelervorhandenTHEN 
meldungELSE listemitdatenzumschueleraufbereiten;standardmeldung(
mnrdruckausgabefuerwirdgedruckt,famname+"#");listedrucken;listeloeschen;FI ;
END PROC listeaufbereitendruckenundloeschenodermeldung;PROC 
wahlundkursdatennaechsteliste(BOOL CONST drucken):IF druckenTHEN listedrucken
FI ;listeloeschen;IF ankreuzlisteTHEN naechsterindex(aktschueler);IF 
aktschueler=0THEN forget(boolvektordatei,quiet);ankreuzliste:=FALSE ;
standardstartproc(eingangsmaske);egmaskenfelderleerenzurueckundmeldung(3);
ELSE listeaufbereiten;rename("liste.1","Wahl- und Kursdaten");return(1)FI ;
ELSE IF aktschueler=letzterTHEN egmaskenfelderleerenzurueckundmeldung(2);
ELSE aktschuelerINCR 1;listeaufbereiten;rename("liste.1",
"Wahl- und Kursdaten");return(1);FI ;FI ;END PROC 
wahlundkursdatennaechsteliste;PROC listeaufbereiten:IF NOT schuelervorhanden
THEN listeleeraufbereitenELSE listemitdatenzumschueleraufbereiten;FI ;END 
PROC listeaufbereiten;PROC meldung:mnrzusatz:="Halbjahresdaten";
standardmeldung(mnrkeinedatendain,mnrzusatz+"#");END PROC meldung;PROC 
schuelerdatenauskwdatenraumholen(INT CONST index):hilfstext:=
wahldatenzumindex(index,kennungnursuname);pos1:=pos(hilfstext,trenner);pos2:=
pos(hilfstext,trenner,pos1+1);famname:=subtext(hilfstext,1,pos1-1);rufname:=
subtext(hilfstext,pos1+1,pos2-1);gebdat:=subtext(hilfstext,pos2+1,length(
hilfstext));END PROC schuelerdatenauskwdatenraumholen;PROC 
listeleeraufbereiten:dateioeffnenunddruckkopfschreiben;putline(ausgabedatei,
"Keine Halbjahres-Daten vorhanden für: "+rufname+blank+famname)END PROC 
listeleeraufbereiten;PROC dateioeffnenunddruckkopfschreiben:ausgabedatei:=
sequentialfile(output,"liste.1");druckvorbereiten;ueb2:=famname;ueb2CAT blank
;ueb2CAT rufname;ueb2CAT ", geboren am ";ueb2CAT gebdat;initdruckkopf(ueb1,
ueb2);druckkopfschreiben;END PROC dateioeffnenunddruckkopfschreiben;PROC 
rowinitialisieren:FOR ixfaecherFROM 1UPTO maxanzfaecherREP FOR ixschulhjFROM 
1UPTO maxanzschulhjREP faecherschulhj(ixfaecher)(ixschulhj):=niltextPER ;PER 
;END PROC rowinitialisieren;PROC listemitdatenzumschueleraufbereiten:
faecherstringok:=FALSE ;rowinitialisieren;dateioeffnenunddruckkopfschreiben;
uebsj:=5*blank+doppblank;uebjgst:="Fach "+doppblank;ixfaecher:=1;ixschulhj:=0
;faecherstring:=wert(fnrhjdfach);WHILE dbstatus=0AND wert(fnrhjdfamnames)=
famnameAND wert(fnrhjdrufnames)=rufnameAND wert(fnrhjdgebdats)=gebdatREP 
shjueberschriftenmerken;IF compress(faecherstring)=niltextTHEN succ(
dnrhalbjahresdaten);faecherstring:=wert(fnrhjdfach);ELSE 
faecherstringaufbereitenundweiterewertelesen;IF faecherstring=faecherTHEN 
FOR zaehlerFROM 1UPTO anzfaecherREP datenproshjprofachmerken(zaehler);PER ;
ELSE pos1:=1;zaehler:=1;WHILE pos1<length(faecher)REP fach:=subtext(faecher,
pos1,pos1+1);pos2:=pos(faecherstring,fach);WHILE pos2<>0AND pos2MOD 2=0REP 
pos2:=pos(faecherstring,fach,pos2+1);PER ;IF pos2=0THEN anzfaecherINCR 1;
ixfaecher:=anzfaecher;faecherstringCAT fach;ELSE ixfaecher:=(pos2+1)DIV 2FI ;
datenproshjprofachmerken(ixfaecher);pos1INCR 2;PER ;FI ;succ(
dnrhalbjahresdaten);FI ;PER ;ausgabederrowmatrixindatei;.
shjueberschriftenmerken:ixschulhjINCR 1;hilfstext:=wert(fnrhjdsj);uebsjCAT 
subtext(hilfstext,1,2);uebsjCAT "/";uebsjCAT subtext(hilfstext,3,4);uebsjCAT 
doppblank;hilfstext:=text(wert(fnrhjdjgst),2);hilfstextCAT punkt;hilfstext
CAT wert(fnrhjdhj);uebjgstCAT hilfstext;uebjgstCAT blank+doppblank;.
faecherstringaufbereitenundweiterewertelesen:IF NOT faecherstringokTHEN 
zaehler:=1;pos1:=1;WHILE zaehler<length(faecherstring)REP pos1:=pos(
faecherstring,subtext(faecherstring,zaehler,zaehler+1),zaehler+2);WHILE pos1
<>0AND pos1MOD 2=0REP pos1:=pos(faecherstring,subtext(faecherstring,zaehler,
zaehler+1),pos1+1)PER ;IF pos1=0THEN zaehlerINCR 2;ELSE IF pos1MOD 2=1THEN 
change(faecherstring,pos1,pos1+1,niltext);FI ;FI ;PER ;anzfaecher:=length(
faecherstring)DIV 2;faecherstringok:=TRUE ;FI ;faecher:=wert(fnrhjdfach);
kennungen:=wert(fnrhjdlerngrpkenn);klausuren:=wert(fnrhjdklausurteiln);
kursarten:=wert(fnrhjdkursart);punkte:=wert(fnrhjdnotepunkte);IF punkte=
niltextTHEN punkte:=length(faecher)*blankFI ;.ausgabederrowmatrixindatei:
zeile1:=uebsj;druckzeileschreiben(zeile1);zeile1:=uebjgst;druckzeileschreiben
(zeile1);zeile1:="-----+"+(10*"------+");druckzeileschreiben(zeile1);INT VAR 
i;i:=1;FOR pos1FROM 1UPTO anzfaecherREP zeile1:=subtext(faecherstring,i,i+1);
zeile1CAT blanksdopp;zeile2:=2*blank+blanksdopp;FOR zaehlerFROM 1UPTO 
ixschulhjREP IF faecherschulhj(pos1)(zaehler)=niltextTHEN zeile1CAT 3*blank+
blanksdopp;zeile2CAT 3*blank+blanksdopp;ELSE zeile1CAT subtext(faecherschulhj
(pos1)(zaehler),1,6);zeile1CAT dopp;zeile2CAT subtext(faecherschulhj(pos1)(
zaehler),7,12);zeile2CAT dopp;FI ;PER ;iINCR 2;druckzeileschreiben(zeile1);
druckzeileschreiben(zeile2);PER ;END PROC listemitdatenzumschueleraufbereiten
;PROC datenproshjprofachmerken(INT CONST rowindex):IF faecherschulhj(rowindex
)(ixschulhj)<>niltextTHEN faecherschulhj(rowindex)(ixschulhj):=platzhalter
ELSE faecherschulhj(rowindex)(ixschulhj):=subtext(kennungen,1,4)+blank+
subtext(klausuren,1,1)+subtext(punkte,1,2)+blank+blank+subtext(kursarten,1,2)
;FI ;kennungen:=subtext(kennungen,5,length(kennungen));klausuren:=subtext(
klausuren,2,length(klausuren));punkte:=subtext(punkte,3,length(punkte));
kursarten:=subtext(kursarten,3,length(kursarten));END PROC 
datenproshjprofachmerken;PROC egmaskenfelderleerenzurueckundmeldung(INT 
CONST stufe):FOR zaehlerFROM 2UPTO 8REP standardmaskenfeld(niltext,zaehler);
PER ;return(stufe);standardmeldung(mnralledruckausgabenerstellt,niltext);END 
PROC egmaskenfelderleerenzurueckundmeldung;PROC listedrucken:IF exists(
"Wahl- und Kursdaten")THEN print("Wahl- und Kursdaten")ELSE print("liste.1");
FI ;END PROC listedrucken;PROC listeloeschen:forget("Wahl- und Kursdaten",
quiet);forget("liste.1",quiet)END PROC listeloeschen;PROC 
wahlundkursdatenblaettern(INT CONST richtung):SELECT richtungOF CASE 1:
andenanfangCASE 2:eineseitevorCASE 3:eineseitezurueckCASE 4:andasende
ENDSELECT ;return(1).andenanfang:aktuellezeile:=erster;listezeigenabzeile(
aktuellezeile);.andasende:aktuellezeile:=max(1,letzter-
listeneintraegeproseite+1);listezeigenabzeile(aktuellezeile);.eineseitevor:
IF aktuellezeile+listeneintraegeproseite>letzterTHEN standardmeldung(
meldungblaetternnichtmöglich,"")ELSE aktuellezeileINCR 
listeneintraegeproseite;listezeigenabzeile(aktuellezeile)FI ;.
eineseitezurueck:IF aktuellezeile=ersterTHEN standardmeldung(
meldungblaetternnichtmöglich,"")ELSE aktuellezeileDECR 
listeneintraegeproseite;aktuellezeile:=max(aktuellezeile,erster);
listezeigenabzeile(aktuellezeile)FI ;END PROC wahlundkursdatenblaettern;PROC 
wahldatenlistenseiteaktualisieren:INT VAR i,fnr;standardnproc;fnr:=
fnrerstesankreuzfeld;FOR iFROM aktuellezeileUPTO min(aktuellezeile+
listeneintraegeproseite,letzter)REP boolvektor(i):=standardmaskenfeld(fnr)<>
niltext;fnrINCR felderprolisteneintragPER END PROC 
wahldatenlistenseiteaktualisieren;PROC listezeigenabzeile(INT CONST zeile):
INT VAR i,j1,j2,fnr;TEXT VAR t,t1;fnr:=fnrerstesankreuzfeld;FOR iFROM zeile
UPTO zeile+listeneintraegeproseiteREP IF i<=letzterTHEN t:=wahldatenzumindex(
i,kennungnursuname);feldfrei(fnr);IF boolvektor(i)THEN standardmaskenfeld(
ankreuzung,fnr);ELSE standardmaskenfeld(keineankreuzung,fnr);FI ;
bereiteschuelerzeileauf;standardmaskenfeld(t1,fnr+1);ELSE standardmaskenfeld(
niltext,fnr);feldschutz(fnr);standardmaskenfeld(dummyschueler,fnr+1)FI ;fnr
INCR felderprolisteneintrag;PER ;infeld(fnrerstesankreuzfeld);
standardfelderausgeben;.bereiteschuelerzeileauf:j1:=pos(t,trenner);j2:=pos(t,
trenner,j1+1);t1:=text(t,j1-1);t1CAT sunamenstrenner;t1CAT subtext(t,j1+1,j2-
1);t1:=text(t1,sulaengeohnedatum);t1CAT " ";t1CAT subtext(t,j2+1).END PROC 
listezeigenabzeile;PROC naechsterindex(INT VAR index):indexINCR 1;WHILE index
<=letzterCAND NOT boolvektor(index)REP indexINCR 1PER ;IF index>letzterTHEN 
index:=0FI END PROC naechsterindex;PROC wahlundkursdatenabschluss:INT VAR 
ruecksprungweite:=1;IF ankreuzlisteTHEN forget(boolvektordatei,quiet);
ankreuzliste:=FALSE ;ruecksprungweiteINCR 1FI ;IF bearbeitungingangTHEN 
bearbeitungingang:=FALSE ;ruecksprungweiteINCR 1FI ;listeloeschen;enter(
ruecksprungweite);END PROC wahlundkursdatenabschluss;BOOL PROC 
plausisallgemok:standardmeldung(mnrbittewarten,niltext);ankreuzliste:=FALSE ;
bestschueler:=FALSE ;lsundneue:=FALSE ;nurneue:=FALSE ;nurls:=FALSE ;
standardpruefe(5,fnr7bs,fnr8dr,null,niltext,status);IF status<>0THEN infeld(
fnr7bs);mnrallgemein:=mnrauswahlnichtsinnvoll;LEAVE plausisallgemokWITH 
FALSE FI ;bildschirmausgabe:=standardmaskenfeld(fnr8dr)=niltext;jgstls:=
standardmaskenfeld(fnr2jgstls);jgstneu:=standardmaskenfeld(fnr3jgstneu);
famname:=standardmaskenfeld(fnr4famname);rufname:=standardmaskenfeld(
fnr5rufname);gebdat:=standardmaskenfeld(fnr6gebdat);IF famname<>niltextCOR 
rufname<>niltextCOR gebdat<>niltextTHEN bestschueler:=TRUE ;IF jgstls<>
niltextCOR jgstneu<>niltextTHEN infeld(fnr4famname);mnrallgemein:=
mnrjgstoderbestschueler;LEAVE plausisallgemokWITH FALSE FI ;ELSE IF jgstls=
niltextAND jgstneu=niltextTHEN infeld(fnr2jgstls);mnrallgemein:=mnrjgstfehlt;
LEAVE plausisallgemokWITH FALSE ;FI ;IF jgstls<>niltextTHEN standardpruefe(2,
fnr2jgstls,null,null,niltext,status);IF status<>0COR (int(jgstls)<10COR int(
jgstls)>13)THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2jgstls);LEAVE 
plausisallgemokWITH FALSE ;FI ;FI ;IF jgstneu<>niltextTHEN standardpruefe(2,
fnr3jgstneu,null,null,niltext,status);IF status<>0COR (int(jgstneu)<11COR int
(jgstneu)>13)THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr3jgstneu);LEAVE 
plausisallgemokWITH FALSE ;FI ;FI ;IF jgstls=niltextTHEN nurneue:=TRUE ELIF 
jgstneu=niltextTHEN nurls:=TRUE ELSE lsundneue:=TRUE FI ;FI ;TRUE END PROC 
plausisallgemok;BOOL PROC schuelervorhanden:IF NOT bestschuelerTHEN 
schuelerdatenauskwdatenraumholen(aktschueler);FI ;inittupel(
dnrhalbjahresdaten);putwert(fnrhjdfamnames,famname);putwert(fnrhjdrufnames,
rufname);putwert(fnrhjdgebdats,gebdat);putwert(fnrhjdsj,niltext);putwert(
fnrhjdhj,niltext);search(dnrhalbjahresdaten,FALSE );dbstatus=0AND wert(
fnrhjdfamnames)=famnameAND wert(fnrhjdrufnames)=rufnameAND wert(fnrhjdgebdats
)=gebdatEND PROC schuelervorhanden;BOOL PROC kurswahldatenraumda:INT VAR 
fehler;sj:=schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr");
IF nurlsTHEN kurswahlinitialisieren(jgstls,jgstls,hj,ohneneuang,kwsj);ELIF 
nurneueTHEN jgstls:=text(int(jgstneu)-1);kurswahlinitialisieren(jgstls,jgstls
,hj,neuang,kwsj);ELSE kurswahlinitialisieren(jgstls,jgstls,hj,mitneuang,kwsj)
FI ;kurswahlbasisholen(fehler);IF fehler<>0THEN mnrallgemein:=
mnrkeinekwdatenda;infeld(fnr2jgstls);ELSE erster:=ersterschueler;letzter:=
letzterschuelerFI ;fehler=0END PROC kurswahldatenraumda;END PACKET 
likwwahlundkursdatensek2