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 letzterschuelermaxfä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 letzterschueler0THEN 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 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 indexsubtext(t,j1+1,j2-1)CAND indexniltextTHEN 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 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 betrhjniltextTHEN 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