app/schulis/2.2.1/src/2.erf wahldaten

Raw file
Back to index

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