PACKET listenweisegrundfunktionenDEFINES holevergleichssg,istzulaessigesg, sgeinerjgst,initgruppenwechsel,gruppenwechsel,eingangsbehandlunglistenweise, startebildschirmblock,bildschirmblock:LET blank=" ",niltext="";LET maxgw=10; LET bestandtrenner="/";LET schuljahrkey="Schuljahr",schulhalbjahrkey= "Schulhalbjahr",halbjahr1="1",halbjahr2="2";BOOL VAR nichtzuende,starten,sek2 ;INT VAR bestand;INT VAR schuelerzahl;ROW maxgwTEXT VAR gw;TEXT VAR aktuelleschuelergruppen;TEXT VAR vergljgst,letztejgst;TEXT VAR schuljahr, schulhalbjahr;PROC holevergleichssg(TEXT CONST jgst,BOOL CONST aktuell): schuljahr:=schulkenndatum(schuljahrkey);schulhalbjahr:=schulkenndatum( schulhalbjahrkey);aktuelleschuelergruppen:=niltext;vergljgst:=jgst;inittupel( dnraktschuelergruppen);setzerichtigeschulkenndaten;IF jgst<>niltextTHEN statleseschleife(dnraktschuelergruppen,jgst,niltext,fnrsgrpjgst, fnrsgrpkennung,PROC pruefesg)ELSE sek2:=FALSE ;letztejgst:=niltext; statleseschleife(dnraktschuelergruppen,jgst,niltext,fnrsgrpjgst, fnrsgrpkennung,PROC allesg)FI ;.setzerichtigeschulkenndaten:IF NOT aktuell THEN IF schulhalbjahr=halbjahr1THEN schulhalbjahr:=halbjahr2ELSE schuljahr:= subtext(schuljahr,3,4);schuljahrCAT text(int(schuljahr)+1);schulhalbjahr:= halbjahr1FI ;FI ;putwert(fnrsgrpsj,schuljahr);putwert(fnrsgrphj,schulhalbjahr );.END PROC holevergleichssg;BOOL PROC istzulaessigesg(TEXT CONST sg):pos( aktuelleschuelergruppen,sg)>0END PROC istzulaessigesg;TEXT PROC sgeinerjgst: aktuelleschuelergruppenEND PROC sgeinerjgst;PROC pruefesg(BOOL VAR schluss): TEXT CONST sg:=jgstaufber(wert(fnrsgrpjgst))+wert(fnrsgrpkennung);IF dbstatus =0CAND subtext(sg,1,2)=vergljgstTHEN neueaktuelleschuelergruppe(sg)ELSE schluss:=TRUE FI .END PROC pruefesg;PROC allesg(BOOL VAR schluss):IF dbstatus <>0OR wert(fnrsgrpsj)<>schuljahrOR wert(fnrsgrphj)<>schulhalbjahrTHEN schluss :=TRUE ELSE TEXT CONST sg:=jgstaufber(wert(fnrsgrpjgst))+wert(fnrsgrpkennung) ;neueaktuelleschuelergruppe(sg)FI END PROC allesg;PROC neueaktuelleschuelergruppe(TEXT CONST sg):IF aktuelleschuelergruppen=niltext THEN anhaengenELSE trennen;anhaengenFI .anhaengen:aktuelleschuelergruppenCAT sg;.trennen:aktuelleschuelergruppenCAT bestandtrenner.END PROC neueaktuelleschuelergruppe;PROC initgruppenwechsel:INT VAR i;FOR iFROM 1UPTO maxgwREP gw(i):=niltextPER .END PROC initgruppenwechsel;PROC gruppenwechsel( TEXT CONST gwneu,INT CONST gwalt,INT CONST laenge,incr,INT VAR aktuellesfeld) :IF gruppenwechselliegtvorTHEN gruppenwechselzeigenELSE leeresfeldFI ; weiterzaehlen.gruppenwechselliegtvor:(schuelerzahl=1)COR (gw(gwalt)<>gwneu). gruppenwechselzeigen:standardmaskenfeld(text(gwneu,laenge),aktuellesfeld);gw( gwalt):=gwneu.leeresfeld:standardmaskenfeld(laenge*blank,aktuellesfeld). weiterzaehlen:aktuellesfeldINCR incr.END PROC gruppenwechsel;PROC eingangsbehandlunglistenweise:standardvproc(maske(vergleichsknoten))END PROC eingangsbehandlunglistenweise;PROC startebildschirmblock(INT CONST best,sz): nichtzuende:=TRUE ;bestand:=best;starten:=TRUE ;schuelerzahl:=sz.END PROC startebildschirmblock;PROC bildschirmblock(PROC schuelerzeigen,BOOL PROC ( INT CONST )pruefungspeziell,INT CONST was):INT VAR lv,anzahl;IF startenTHEN erstenzeigen;neuerblock;erhoehezaehlerELSE neuerblockFI .erstenzeigen: schuelerzeigen;changeindex.erhoehezaehler:schuelerzahlINCR 1.neuerblock: anzahl:=schuelerzahl;starten:=FALSE ;IF nichtzuendeTHEN multisucc(bestand, anzahl);FOR lvFROM 1UPTO anzahlREP schuelerlesen;nichtzuende:= pruefungspeziell(was);IF nichtzuendeTHEN schuelerzeigenELSE LEAVE neuerblock FI PER ;nichtzuende:=anzahl=schuelerzahlFI ;.schuelerlesen:stackentry(lv). END PROC bildschirmblock;END PACKET listenweisegrundfunktionen;