summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/2.kurswahl schnittstelle
diff options
context:
space:
mode:
Diffstat (limited to 'app/schulis/2.2.1/src/2.kurswahl schnittstelle')
-rw-r--r--app/schulis/2.2.1/src/2.kurswahl schnittstelle664
1 files changed, 664 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/2.kurswahl schnittstelle b/app/schulis/2.2.1/src/2.kurswahl schnittstelle
new file mode 100644
index 0000000..2b29d36
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.kurswahl schnittstelle
@@ -0,0 +1,664 @@
+PACKET kurswahlschnittstelle240791DEFINES kurswahlinitialisieren,
+kurswahlbasisholen,erweitertekurswahlbasisholen,istkurswahlbasisvorhanden,
+kurswahldatenvorhanden,kurswahl0holen,kurswahl1holen,kurswahl2holen,
+kurswahl0sichern,kurswahl1sichern,kurswahl2sichern,kurswahlsperresetzen,
+kurswahlsperrebeenden,kurseintragen,kursloeschen,planblockeintragen,
+planblockteilen,planblockloeschen,planbloeckezumkurseintragen,
+planbloeckeinitialisieren,kurszumplanblockeintragen,schuelerwahleintragen,
+schuelerwahlaendern,ersterschueler,letzterschueler,wahldatenzumindex,
+wahldatenzumschueler,weiterewahldatenzumschueler,kursdaten,allekurse,
+alleplanblockbezeichner,planblockdaten,anzahlschuelermitwahl,schuelermitwahl,
+anzahlfreierschuelerimplanblock,schuelerinplanblock,schuelerundklausur:LET
+namezwischendatei="Hj-Daten",meldungneuebasis=377;LET maxkuwa1zeilen=66,
+laengekurseintrag=15,laengeblockwstd=4,laengeblock=3,laengekurs=6,laengefach=
+2,laengekennung=4,laengeart=2,laengewstd=2,laengeklausur=1,server=
+"kurswahl server",kennungtplbl1="a",kennungtplbl2="b",leereplanbloecke=
+" ",leererblock=" ",leerekennung=" ",leereart=" ",stat1="ls",stat2
+="n11",stat3="nso",kzschueler="�S�",kzneue="�N�",kzohneneue="O",kznurneue="N"
+,kzname="N",kzkurse="K",kzart="A",kzstd="S",kzplanbl="P",kzfake="FK",dbsj=
+"Schuljahr",dbhj="Schulhalbjahr",trenner="�",trenner2="$",kurswahl0=
+"Kurswahl-0 ",kurswahl1="Kurswahl-1 ",kurswahl2="Kurswahl-2 ",praefixsperre=
+"Sperre ";FILE VAR kuwa0,kuwa1,kuwa2,kuwa3,kuwahilf;TEXT VAR schuljahr:=
+"0000",halbjahr:="0",aktschuljahr:="0000",akthalbjahr:="0",jgst:="",hjdtid,
+fa1,ke1,fa2,ke2,ws,kl,ar,eintrag,status,datei,sj,hj;INT VAR bearbschueler,
+erster:=1,letzter:=0,namenpos,aktjg;BOOL VAR hjzukuenftig,hjaktgepl,
+kuwa2eintrag:=TRUE ,plblvorhanden:=FALSE ,faartschoneingetragen:=FALSE ,
+fakeschoneingetragen:=FALSE ,eintragloeschen:=FALSE ;TEXT VAR hjd1,hjd2,hjd3,
+hjd4,hjd5,hjd6,hjd7;TASK VAR takuser;PROC kurswahlinitialisieren(TEXT CONST
+aktjgst,gewjgst,gewhj,schueler,TEXT VAR bersj):INT VAR j;aktjg:=int(aktjgst);
+IF schueler=kzohneneueTHEN bearbschueler:=1ELIF schueler=kznurneueTHEN
+bearbschueler:=2ELSE bearbschueler:=3FI ;sj:=schulkenndatum(dbsj);hj:=
+schulkenndatum(dbhj);IF gewjgst=aktjgstTHEN schuljahr:=sjELSE j:=int(gewjgst)
+-int(aktjgst);schuljahr:=konvsjteil(text(sj,2),j)+konvsjteil(subtext(sj,3),j)
+FI ;bersj:=schuljahr;halbjahr:=gewhj;jgst:=gewjgst;IF hj="1"CAND int(gewjgst)
+>int(aktjgst)THEN hjzukuenftig:=TRUE ELIF hj="2"CAND int(gewjgst+gewhj)>(int(
+aktjgst)+1)*10+1THEN hjzukuenftig:=TRUE ELSE hjzukuenftig:=FALSE FI ;
+hjaktgepl:=NOT hjzukuenftigEND PROC kurswahlinitialisieren;BOOL PROC
+istkurswahlbasisvorhanden:dbstatus(1);IF halbjahrnichtgesetztTHEN FALSE ELIF
+NOT existstask(server)THEN FALSE ELSE takuser:=task(server);datei:=
+datenraumname(kurswahl1);dbstatus(0);exists(datei,takuser)FI END PROC
+istkurswahlbasisvorhanden;PROC kurswahlbasisholen(INT VAR fehlerstatus):INT
+VAR j;IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(server)
+THEN fehlerstatus:=2ELSE takuser:=task(server);commanddialogue(FALSE );
+fehlerstatus:=0;datei:=datenraumname(kurswahl0);IF exists(datei,takuser)THEN
+holkuwa0dateiundkoppleanELSE erstellekuwa0dateiFI ;datei:=datenraumname(
+kurswahl1);IF exists(datei,takuser)THEN plblvorhanden:=TRUE ;
+holkuwa1dateiundkoppleanELSE plblvorhanden:=FALSE ;erstellekuwa1dateiFI ;
+datei:=datenraumname(kurswahl2);IF exists(datei,takuser)THEN
+holkuwa2dateiundkoppleanELSE erstellekuwa2dateiFI ;commanddialogue(TRUE )FI .
+holkuwa0dateiundkopplean:fetch(datei,takuser);kuwa0:=sequentialfile(modify,
+old(datei)).erstellekuwa0datei:IF hjzukuenftigTHEN kuwa0:=sequentialfile(
+modify,datei);insertrecord(kuwa0)ELSE datei:=datenraumname(kurswahl0);forget(
+datei,quiet);kursdatenholen;IF lines(kuwa0)=0THEN insertrecord(kuwa0)FI FI ;
+save(datei,takuser).holkuwa1dateiundkopplean:fetch(datei,takuser);kuwa1:=
+sequentialfile(modify,old(datei)).erstellekuwa1datei:kuwa1:=sequentialfile(
+modify,datei);FOR jFROM 1UPTO maxkuwa1zeilenREP insertrecord(kuwa1)PER ;save(
+datei,takuser).holkuwa2dateiundkopplean:fetch(datei,takuser);kuwa2:=
+sequentialfile(modify,old(datei));ermittleersterletzter.erstellekuwa2datei:
+kuwa2eintrag:=TRUE ;kurswahleinerjgstaufbereiten(jgst,halbjahr,schuljahr,
+kuwa2);save(datei,takuser).END PROC kurswahlbasisholen;PROC
+ermittleersterletzter:IF bearbschueler<>2THEN erster:=1ELSE erster:=
+zeilennrzumschuelerbestand(FALSE )FI ;IF bearbschueler<>1THEN letzter:=lines(
+kuwa2)ELSE letzter:=zeilennrzumschuelerbestand(TRUE )FI END PROC
+ermittleersterletzter;PROC erweitertekurswahlbasisholen(TEXT CONST gewjgst,
+gewhj,INT VAR fehlerstatus):TEXT VAR erwschuljahr;INT VAR j;IF
+halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(server)THEN
+fehlerstatus:=2ELSE takuser:=task(server);commanddialogue(FALSE );IF int(
+gewjgst)=aktjgTHEN erwschuljahr:=sjELSE j:=int(gewjgst)-aktjg;erwschuljahr:=
+konvsjteil(text(sj,2),j)+konvsjteil(subtext(sj,3),j);FI ;fehlerstatus:=0;
+datei:=kurswahl2+gewjgst+" "+gewhj+"."+erwschuljahr;IF exists(datei,takuser)
+THEN holkuwa3dateiundkoppleanELSE erstellekuwa3dateiFI ;commanddialogue(TRUE
+)FI .holkuwa3dateiundkopplean:fetch(datei,takuser);kuwa3:=sequentialfile(
+modify,old(datei)).erstellekuwa3datei:plblvorhanden:=FALSE ;kuwa2eintrag:=
+FALSE ;kurswahleinerjgstaufbereiten(gewjgst,gewhj,erwschuljahr,kuwa3).END
+PROC erweitertekurswahlbasisholen;PROC kurswahl0holen(INT VAR fehlerstatus):
+IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(server)THEN
+fehlerstatus:=2ELSE takuser:=task(server);datei:=datenraumname(kurswahl0);IF
+exists(datei,takuser)THEN commanddialogue(FALSE );fetch(datei,takuser);
+commanddialogue(TRUE );kuwa0:=sequentialfile(modify,old(datei));fehlerstatus
+:=0ELSE fehlerstatus:=3FI ;FI .END PROC kurswahl0holen;PROC kurswahl1holen(
+INT VAR fehlerstatus):IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT
+existstask(server)THEN fehlerstatus:=2ELSE takuser:=task(server);datei:=
+datenraumname(kurswahl1);IF exists(datei,takuser)THEN commanddialogue(FALSE )
+;fetch(datei,takuser);commanddialogue(TRUE );kuwa1:=sequentialfile(modify,old
+(datei));fehlerstatus:=0ELSE fehlerstatus:=3FI ;FI .END PROC kurswahl1holen;
+PROC kurswahl2holen(INT VAR fehlerstatus):IF halbjahrnichtgesetztTHEN
+fehlerstatus:=1ELIF NOT existstask(server)THEN fehlerstatus:=2ELSE takuser:=
+task(server);datei:=datenraumname(kurswahl2);IF exists(datei,takuser)THEN
+commanddialogue(FALSE );fetch(datei,takuser);commanddialogue(TRUE );kuwa2:=
+sequentialfile(modify,old(datei));ermittleersterletzter;fehlerstatus:=0ELSE
+fehlerstatus:=3FI ;FI END PROC kurswahl2holen;PROC kurswahl0sichern(INT VAR
+fehlerstatus):kurswahl02sichern(kurswahl0,fehlerstatus)END PROC
+kurswahl0sichern;PROC kurswahl1sichern(INT VAR fehlerstatus):
+kurswahldatenraumsichern(kurswahl1,fehlerstatus)END PROC kurswahl1sichern;
+PROC kurswahl2sichern(INT VAR fehlerstatus):kurswahl02sichern(kurswahl2,
+fehlerstatus)END PROC kurswahl2sichern;PROC kurswahl02sichern(TEXT CONST
+welchen,INT VAR fehlerstatus):INT VAR aktfeld:=infeld;datei:=datenraumname(
+welchen);IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(
+server)THEN fehlerstatus:=2ELIF NOT exists(datei)THEN fehlerstatus:=4ELSE
+takuser:=task(server);IF exists(datei,takuser)THEN commanddialogue(FALSE );
+save(datei,takuser);commanddialogue(TRUE );fehlerstatus:=0ELSE
+standardmeldung(meldungneuebasis,"");forget(datei,quiet);IF welchen=kurswahl2
+THEN bereitek2datenraumaufELSE bereitek0datenraumaufFI ;commanddialogue(
+FALSE );save(datei,takuser);commanddialogue(TRUE );fehlerstatus:=0;infeld(1);
+standardfelderausgeben;infeld(aktfeld)FI FI .bereitek0datenraumauf:IF
+hjzukuenftigTHEN kuwa0:=sequentialfile(modify,datei);insertrecord(kuwa0)ELSE
+kursdatenholen;IF lines(kuwa0)=0THEN insertrecord(kuwa0)FI FI .
+bereitek2datenraumauf:kuwa2eintrag:=TRUE ;kurswahleinerjgstaufbereiten(jgst,
+halbjahr,schuljahr,kuwa2).END PROC kurswahl02sichern;PROC
+kurswahldatenraumsichern(TEXT CONST welchen,INT VAR fehlerstatus):datei:=
+datenraumname(welchen);IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT
+existstask(server)THEN fehlerstatus:=2ELIF NOT exists(datei)THEN fehlerstatus
+:=4ELSE takuser:=task(server);commanddialogue(FALSE );save(datei,takuser);
+commanddialogue(TRUE );fehlerstatus:=0FI END PROC kurswahldatenraumsichern;
+BOOL PROC kurswahldatenvorhanden:INT VAR i;dbstatus(1);IF
+halbjahrnichtgesetztTHEN FALSE ELSE datei:=datenraumname(kurswahl2);IF exists
+(datei)THEN ueberpruefwahldatenvorhandenELSE FALSE FI FI .
+ueberpruefwahldatenvorhanden:dbstatus(0);toline(kuwa2,erster);col(kuwa2,1);
+FOR iFROM ersterUPTO letzterREP readrecord(kuwa2,eintrag);IF (eintragSUB 1)<>
+trennerTHEN LEAVE ueberpruefwahldatenvorhandenWITH TRUE FI ;down(kuwa2);PER ;
+FALSE .END PROC kurswahldatenvorhanden;PROC kurswahlsperresetzen(TEXT CONST
+was,BOOL VAR ok):IF halbjahrnichtgesetztTHEN ok:=FALSE ELIF NOT existstask(
+server)THEN ok:=FALSE ELSE takuser:=task(server);datei:=
+gesperrterdatenraumname(was);IF exists(datei,takuser)THEN ok:=FALSE ELSE
+commanddialogue(FALSE );forget(datei,quiet);copy(datenraumname(was),datei);
+save(datei,takuser);forget(datei,quiet);commanddialogue(TRUE );ok:=TRUE FI ;
+FI END PROC kurswahlsperresetzen;PROC kurswahlsperrebeenden(TEXT CONST was):
+IF NOT halbjahrnichtgesetztAND existstask(server)THEN takuser:=task(server);
+datei:=gesperrterdatenraumname(was);commanddialogue(FALSE );erase(datei,
+takuser);commanddialogue(TRUE );FI END PROC kurswahlsperrebeenden;PROC
+kurseintragen(TEXT CONST fach,kennung,wstd,art):dbstatus(1);IF
+halbjahrnichtgesetztTHEN LEAVE kurseintragenELIF fach=""COR kennung=""COR
+wstd=""COR art=""THEN LEAVE kurseintragenFI ;fa1:=text(fach,laengefach);ke1:=
+text(kennung,laengekennung);ws:=text(wstd,laengewstd);ar:=text(art,laengeart)
+;IF kurseingetragen(fa1+ke1)THEN LEAVE kurseintragenFI ;toline(kuwa0,lines(
+kuwa0));insertrecord(kuwa0);writerecord(kuwa0,fa1+ke1+ws+ar);IF hjaktgepl
+THEN tragindbeinELSE dbstatus(0)FI .tragindbein:inittupel(
+dnrlehrveranstaltungen);putwert(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);
+putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,fa1+compress(ke1));
+putintwert(fnrlvwochenstd,int(wstd));putwert(fnrlvart,compress(art));insert(
+dnrlehrveranstaltungen).END PROC kurseintragen;PROC kursloeschen(TEXT CONST
+fach,kennung):IF halbjahrnichtgesetztTHEN dbstatus(1);LEAVE kursloeschenFI ;
+fa1:=text(fach,laengefach);ke1:=text(kennung,laengekennung);IF
+kurseingetragen(fa1+ke1)THEN IF hjaktgeplTHEN aenderindbFI ;deleterecord(
+kuwa0);aenderkursinkuwa1(fa1+ke1,"")ELSE dbstatus(1)FI .aenderindb:inittupel(
+dnrlehrveranstaltungen);putwert(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);
+putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,fa1+compress(ke1));search(
+dnrlehrveranstaltungen,TRUE );IF dbstatus=0THEN delete(dnrlehrveranstaltungen
+)ELSE dbstatus(1);LEAVE kursloeschenFI .END PROC kursloeschen;PROC
+planblockeintragen(TEXT CONST anwblockbez,stunden):TEXT VAR blockbez:=
+formbezeichner(anwblockbez),blocknr:=text(blockbez,2),teilkennung:=blockbez
+SUB 3;INT VAR j:=int(blocknr)*3-2;dbstatus(1);IF halbjahrnichtgesetztTHEN
+LEAVE planblockeintragenELIF j>0CAND j<=maxkuwa1zeilenTHEN IF teilkennung=
+kennungtplbl1THEN jINCR 1ELIF teilkennung=kennungtplbl2THEN jINCR 2ELIF
+teilkennung<>""CAND teilkennung<>" "THEN LEAVE planblockeintragenFI ;toline(
+kuwa1,j);readrecord(kuwa1,eintrag);IF eintrag=""THEN writerecord(kuwa1,text(
+blockbez,3)+text(stunden,1))ELSE writerecord(kuwa1,text(eintrag,3)+text(
+stunden,1)+subtext(eintrag,5))FI ;dbstatus(0)FI END PROC planblockeintragen;
+PROC planblockteilen(TEXT CONST blocknr,wstd1,wstd2):INT VAR j:=int(blocknr)*
+3-2;dbstatus(1);IF halbjahrnichtgesetztCOR (compress(blocknrSUB 3))<>""THEN
+LEAVE planblockteilenFI ;IF j>0CAND j<=maxkuwa1zeilenTHEN toline(kuwa1,j+1);
+readrecord(kuwa1,eintrag);IF eintrag=""THEN up(kuwa1);readrecord(kuwa1,
+eintrag);IF eintrag<>""THEN teileplanblockFI FI ;FI .teileplanblock:dbstatus(
+0);writerecord(kuwa1,text(eintrag,4));down(kuwa1);writerecord(kuwa1,text(
+eintrag,2)+kennungtplbl1+wstd1+subtext(eintrag,5));down(kuwa1);writerecord(
+kuwa1,text(eintrag,2)+kennungtplbl2+wstd2+subtext(eintrag,5)).END PROC
+planblockteilen;PROC planblockloeschen(TEXT CONST anwblockbez):TEXT VAR
+blockbez:=formbezeichner(anwblockbez),blocknr:=text(blockbez,2),teilkennung:=
+blockbezSUB 3;INT VAR j:=int(blocknr)*3-2;BOOL VAR pruefteilbloecke:=FALSE ;
+dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE planblockloeschenFI ;IF
+teilkennung=kennungtplbl1THEN jINCR 1ELIF teilkennung=kennungtplbl2THEN j
+INCR 2ELSE pruefteilbloecke:=TRUE FI ;IF j>0CAND j<=maxkuwa1zeilenTHEN toline
+(kuwa1,j);IF pruefteilbloeckeTHEN down(kuwa1,2);readrecord(kuwa1,eintrag);IF
+eintrag<>""THEN LEAVE planblockloeschenELSE up(kuwa1);readrecord(kuwa1,
+eintrag);IF eintrag<>""THEN LEAVE planblockloeschenELSE up(kuwa1)FI ;FI ;FI ;
+writerecord(kuwa1,"");dbstatus(0)FI .END PROC planblockloeschen;PROC
+planbloeckeinitialisieren:TEXT VAR datei:=datenraumname(kurswahl1);INT VAR j;
+IF halbjahrnichtgesetztCOR NOT existstask(server)THEN dbstatus(1)ELSE takuser
+:=task(server);erstellekuwa1dateiFI .erstellekuwa1datei:forget(datei,quiet);
+kuwa1:=sequentialfile(modify,datei);FOR jFROM 1UPTO maxkuwa1zeilenREP
+insertrecord(kuwa1)PER ;dbstatus(0);commanddialogue(FALSE );save(datei,
+takuser);commanddialogue(TRUE ).END PROC planbloeckeinitialisieren;PROC
+planbloeckezumkurseintragen(TEXT CONST anwkurs,anwblockbez1,anwblockbez2):
+TEXT VAR kurs:=text(anwkurs,laengekurs),blockbez1:=formbezeichner(
+anwblockbez1),blockbez2:=formbezeichner(anwblockbez2);dbstatus(1);IF
+halbjahrnichtgesetztTHEN LEAVE planbloeckezumkurseintragenFI ;IF blockbez1<>
+""COR blockbez2<>""THEN IF NOT kurseingetragen(kurs)THEN LEAVE
+planbloeckezumkurseintragenFI FI ;IF compress(blockbez1)<>""THEN IF NOT
+blockeingetragen(blockbez1)THEN LEAVE planbloeckezumkurseintragenFI ;FI ;IF
+compress(blockbez2)<>""THEN IF NOT blockeingetragen(blockbez2)THEN LEAVE
+planbloeckezumkurseintragenFI ;FI ;loescheplanbloeckezukurs(kurs);IF
+blockeingetragen(blockbez1)THEN tragkurseinFI ;IF blockeingetragen(blockbez2)
+THEN tragkurseinFI ;dbstatus(0).tragkursein:readrecord(kuwa1,eintrag);eintrag
+CAT kurs;writerecord(kuwa1,eintrag).END PROC planbloeckezumkurseintragen;
+PROC loescheplanbloeckezukurs(TEXT CONST kurs):TEXT VAR bloecke:=planbloecke(
+kurs);IF bloecke<>leereplanbloeckeTHEN aenderkursinkuwa1(kurs,"")FI .END
+PROC loescheplanbloeckezukurs;INT PROC planblockzeilennr(TEXT CONST
+anwblockbez):TEXT VAR blockbez:=formbezeichner(anwblockbez);IF
+blockeingetragen(blockbez)THEN lineno(kuwa1)ELSE 0FI END PROC
+planblockzeilennr;PROC schuelerwahleintragen(TEXT CONST famname,rufname,
+gebdatum,wahl):TEXT VAR schueler:=trenner+famname+trenner+rufname+trenner+
+gebdatum,wahldaten:=wahl;dbstatus(1);IF halbjahrnichtgesetztCOR length(
+wahldaten)MOD laengekurseintrag<>0THEN LEAVE schuelerwahleintragenFI ;IF
+schuelereingetragen(schueler,kuwa2)THEN readrecord(kuwa2,eintrag);hjd1:=
+wahldaten;hjdateneintragen(famname,rufname,gebdatum,1);IF dbstatus=0THEN
+schreibeintragFI ;FI .schreibeintrag:writerecord(kuwa2,wahldaten+subtext(
+eintrag,pos(eintrag,trenner))).END PROC schuelerwahleintragen;PROC
+schuelerwahleintragen(TEXT CONST famname,rufname,gebdatum,fach,kennung,art,
+klausur):TEXT VAR schueler:=trenner+famname+trenner+rufname+trenner+gebdatum,
+kurse;INT VAR aktpos;dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE
+schuelerwahleintragenFI ;fa1:=text(fach,laengefach);ke1:=text(kennung,
+laengekennung);ar:=text(art,laengeart);kl:=text(klausur,laengeklausur);IF
+schuelereingetragen(schueler,kuwa2)THEN readrecord(kuwa2,eintrag);hjd1:=fa1;
+hjd2:=ke1;hjd3:=ar;hjd4:=kl;hjdateneintragen(famname,rufname,gebdatum,2);IF
+dbstatus=0THEN schreibeintragFI FI .schreibeintrag:pruefanzkurse;IF ke1=
+leerekennungTHEN tragfachwahleinELSE tragkurswahleinFI .pruefanzkurse:aktpos
+:=pos(eintrag,trenner);kurse:=text(eintrag,aktpos-1);IF length(kurse)=195
+THEN LEAVE schuelerwahleintragenFI .tragfachwahlein:IF nichteingetragen(
+eintrag,ar+fa1,2,aktpos)THEN IF ke1<>leerekennungTHEN writerecord(kuwa2,kl+ar
++fa1+ke1+planbloecke(fa1+ke1)+eintrag)ELSE writerecord(kuwa2,kl+ar+fa1+ke1+
+leereplanbloecke+eintrag)FI ;FI .tragkurswahlein:IF nichteingetragen(eintrag,
+fa1+ke1,4,aktpos)THEN writerecord(kuwa2,kl+ar+fa1+ke1+planbloecke(fa1+ke1)+
+eintrag)FI .END PROC schuelerwahleintragen;PROC schuelerwahlaendern(TEXT
+CONST famname,rufname,gebdatum,fachalt,kennungalt,artalt,fachneu,kennungneu,
+artneu,klausur):TEXT VAR schueler:=trenner+famname+trenner+rufname+trenner+
+gebdatum,neuereintrag,aralt,compke,compart;INT VAR aktpos,kurspos;dbstatus(1)
+;IF halbjahrnichtgesetztTHEN LEAVE schuelerwahlaendernFI ;
+faartschoneingetragen:=FALSE ;fakeschoneingetragen:=FALSE ;fa1:=text(fachalt,
+laengefach);ke1:=text(kennungalt,laengekennung);aralt:=text(artalt,laengeart)
+;fa2:=text(fachneu,laengefach);ke2:=text(kennungneu,laengekennung);ar:=text(
+artneu,laengeart);kl:=text(klausur,laengeklausur);IF schuelereingetragen(
+schueler,kuwa2)THEN pruefundtragein;hjd1:=fa1;hjd2:=ke1;hjd3:=fa2;hjd4:=ke2;
+hjd5:=ar;hjd6:=kl;hjd7:=aralt;hjdateneintragen(famname,rufname,gebdatum,3);
+IF dbstatus=0THEN aendereintragFI FI .pruefundtragein:readrecord(kuwa2,
+eintrag);IF fachalt=""THEN LEAVE schuelerwahlaendernFI ;IF kennungalt<>""
+THEN IF nichteingetragen(eintrag,fa1+ke1,4,aktpos)THEN LEAVE
+schuelerwahlaendernFI ELIF artalt=""THEN LEAVE schuelerwahlaendernELIF
+nichteingetragen(eintrag,aralt+fa1,2,aktpos)THEN LEAVE schuelerwahlaendernFI
+;IF fachneu=""THEN eintragloeschen:=TRUE ;eintrag:=text(eintrag,aktpos-1)+
+subtext(eintrag,aktpos+laengekurseintrag)ELSE eintragloeschen:=FALSE ;compke
+:=compress(kennungneu);compart:=compress(artneu);IF compke=""CAND compart=""
+THEN LEAVE schuelerwahlaendernELIF compke<>""THEN IF NOT nichteingetragen(
+eintrag,fa2+ke2,4,kurspos)THEN fakeschoneingetragen:=TRUE FI ELIF compart<>""
+THEN IF NOT nichteingetragen(eintrag,ar+fa2,2,kurspos)THEN
+faartschoneingetragen:=TRUE FI FI ;loeschundtrageinFI .aendereintrag:
+writerecord(kuwa2,eintrag).loeschundtragein:neuereintrag:=kl;neuereintragCAT
+ar;neuereintragCAT fa2;neuereintragCAT ke2;IF (fa1+ke1)<>(fa2+ke2)THEN
+neuereintragCAT planbloecke(fa2+ke2)ELSE neuereintragCAT subtext(eintrag,
+aktpos+9,aktpos+14)FI ;IF faartschoneingetragenCOR fakeschoneingetragenTHEN
+ueberschreibneuenkursmitneuenwertenELSE substituieraltenkursmitneuemkursFI .
+substituieraltenkursmitneuemkurs:eintrag:=text(eintrag,aktpos-1)+neuereintrag
++subtext(eintrag,aktpos+laengekurseintrag).
+ueberschreibneuenkursmitneuenwerten:eintrag:=text(eintrag,kurspos-1)+
+neuereintrag+subtext(eintrag,kurspos+laengekurseintrag);IF aktpos<>kurspos
+THEN eintrag:=text(eintrag,aktpos-1)+subtext(eintrag,aktpos+laengekurseintrag
+)FI .END PROC schuelerwahlaendern;PROC hjdateneintragen(TEXT CONST famname,
+rufname,gebdatum,INT CONST aktion):INT VAR iii,iiii;TEXT VAR wahlteil,
+tutoreintrag;TEXT VAR t1,t2,t3,t4;SELECT aktionOF CASE 1:
+hjdatenersetzenoderanlegenCASE 2:hjdatenergaenzenoderanlegenCASE 3:
+hjdatensubstituierenEND SELECT .hjdatenersetzenoderanlegen:suchhjdaten(
+famname,rufname,gebdatum);IF dbstatus<>0THEN IF schuelerindbTHEN
+erstellhjdatensatz;IF schuljahr=aktsjCAND halbjahr=akthjCAND dbstatus=0THEN
+schreibtidinsudatenFI FI ELSE aenderehjdatensatzFI .aenderehjdatensatz:
+tragwahldatenein;putwert(fnrhjdfach,t1);putwert(fnrhjdkursart,t3);putwert(
+fnrhjdlerngrpkenn,t2);putwert(fnrhjdklausurteiln,t4);update(
+dnrhalbjahresdaten).erstellhjdatensatz:inittupel(dnrhalbjahresdaten);putwert(
+fnrhjdfamnames,famname);putwert(fnrhjdrufnames,rufname);putwert(fnrhjdgebdats
+,gebdatum);putwert(fnrhjdjgst,jgst);putwert(fnrhjdsj,schuljahr);putwert(
+fnrhjdhj,halbjahr);tragwahldatenein;IF schuljahr=aktsjCAND halbjahr=akthj
+THEN putwert(fnrhjdkennung,tutoreintrag)FI ;putwert(fnrhjdfach,t1);putwert(
+fnrhjdkursart,t3);putwert(fnrhjdlerngrpkenn,t2);putwert(fnrhjdklausurteiln,t4
+);insert(dnrhalbjahresdaten);IF dbstatus<>0THEN LEAVE hjdateneintragenELSE
+hjdtid:=gettidFI .schuelerindb:parsenooffields(7);inittupel(dnrschueler);
+putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);putwert(
+fnrsugebdatums,gebdatum);search(dnrschueler,TRUE );IF schuljahr=aktsjCAND
+halbjahr=akthjCAND dbstatus=0THEN tutoreintrag:=wert(fnrsusgrpzugtut)FI ;
+reinitparsing;dbstatus=0.tragwahldatenein:t1:="";t2:="";t3:="";t4:="";FOR iii
+FROM 1UPTO length(hjd1)DIV 15REP wahlteil:=subtext(hjd1,(iii-1)*15+1,iii*15);
+t1CAT subtext(wahlteil,4,5);t2CAT subtext(wahlteil,6,9);t3CAT subtext(
+wahlteil,2,3);t4CAT (wahlteilSUB 1)PER .schreibtidinsudaten:inittupel(
+dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);
+putwert(fnrsugebdatums,gebdatum);search(dnrschueler,TRUE );IF dbstatus=0THEN
+putwert(fnrsutidakthjd,hjdtid);selupdate(dnrschueler)FI .
+hjdatenergaenzenoderanlegen:suchhjdaten(famname,rufname,gebdatum);IF dbstatus
+<>0THEN IF schuelerindbTHEN generierhjdatensatz;IF schuljahr=aktsjCAND
+halbjahr=akthjCAND dbstatus=0THEN schreibtidinsudatenFI FI ELSE
+ergaenzehjdatensatzFI .ergaenzehjdatensatz:t1:=wert(fnrhjdfach);IF length(t1)
+=26THEN dbstatus(1);LEAVE hjdateneintragenELSE t3:=wert(fnrhjdkursart);t2:=
+wert(fnrhjdlerngrpkenn);t4:=wert(fnrhjdklausurteiln)FI ;t1CAT hjd1;t2CAT hjd2
+;t3CAT hjd3;t4CAT hjd4;putwert(fnrhjdfach,t1);putwert(fnrhjdkursart,t3);
+putwert(fnrhjdlerngrpkenn,t2);putwert(fnrhjdklausurteiln,t4);update(
+dnrhalbjahresdaten);IF dbstatus<>0THEN LEAVE hjdateneintragenFI .
+generierhjdatensatz:inittupel(dnrhalbjahresdaten);putwert(fnrhjdfamnames,
+famname);putwert(fnrhjdrufnames,rufname);putwert(fnrhjdgebdats,gebdatum);
+putwert(fnrhjdjgst,jgst);IF schuljahr=aktsjCAND halbjahr=akthjTHEN putwert(
+fnrhjdkennung,tutoreintrag)FI ;putwert(fnrhjdsj,schuljahr);putwert(fnrhjdhj,
+halbjahr);putwert(fnrhjdfach,hjd1);putwert(fnrhjdkursart,hjd3);putwert(
+fnrhjdlerngrpkenn,hjd2);putwert(fnrhjdklausurteiln,hjd4);insert(
+dnrhalbjahresdaten);IF dbstatus<>0THEN LEAVE hjdateneintragenFI ;hjdtid:=
+gettid.hjdatensubstituieren:suchhjdaten(famname,rufname,gebdatum);IF dbstatus
+<>0THEN dbstatus(1);LEAVE hjdateneintragenELSE substituierehjdatensatzFI .
+substituierehjdatensatz:t2:=wert(fnrhjdkursart);t3:=wert(fnrhjdlerngrpkenn);
+t4:=wert(fnrhjdklausurteiln);setzeuebergebenewerte;schreibgeaendertensatz.
+schreibgeaendertensatz:putwert(fnrhjdfach,t1);putwert(fnrhjdkursart,t2);
+putwert(fnrhjdlerngrpkenn,t3);putwert(fnrhjdklausurteiln,t4);update(
+dnrhalbjahresdaten).setzeuebergebenewerte:t1:=wert(fnrhjdfach);
+suchrichtigefachposition;IF eintragloeschenTHEN alteneintragloeschenELIF
+faartschoneingetragenCOR fakeschoneingetragenTHEN eintragaktualisieren;IF iii
+<>iiiiTHEN alteneintragloeschenFI ELSE alteneintragueberschreibenFI .
+eintragaktualisieren:suchschonvorhandeneneintrag;IF faartschoneingetragen
+THEN t3:=text(t3,iiii*2-2)+hjd4+subtext(t3,iiii*2+3)ELSE t2:=text(t2,iiii-1)+
+hjd5+subtext(t2,iiii+2)FI ;t4:=text(t4,(iiii+1)DIV 2-1)+hjd6+subtext(t4,(iiii
++1)DIV 2+1).alteneintragloeschen:t1:=text(t1,iii-1)+subtext(t1,iii+2);t2:=
+text(t2,iii-1)+subtext(t2,iii+2);t3:=text(t3,iii*2-2)+subtext(t3,iii*2+3);t4
+:=text(t4,(iii+1)DIV 2-1)+subtext(t4,(iii+1)DIV 2+1).
+alteneintragueberschreiben:IF hjd1<>hjd3THEN t1:=text(t1,iii-1)+hjd3+subtext(
+t1,iii+2)FI ;IF hjd2<>hjd4THEN t3:=text(t3,iii*2-2)+hjd4+subtext(t3,iii*2+3)
+FI ;IF hjd5<>hjd7THEN t2:=text(t2,iii-1)+hjd5+subtext(t2,iii+2)FI ;t4:=text(
+t4,(iii+1)DIV 2-1)+hjd6+subtext(t4,(iii+1)DIV 2+1).suchrichtigefachposition:
+iii:=1;WHILE iii<>0REP iii:=pos(t1,hjd1,iii);IF iii=0THEN dbstatus(1);LEAVE
+hjdateneintragenELSE pruefzugehoerigewerteFI ;iiiINCR 1PER ;dbstatus(1);
+LEAVE hjdateneintragen.pruefzugehoerigewerte:IF (iiiMOD 2)=1THEN IF compress(
+hjd2)<>""THEN pruefkennungELIF compress(hjd7)<>""THEN pruefartFI FI .
+pruefkennung:IF subtext(t3,iii*2-1,iii*2+2)=hjd2THEN LEAVE
+suchrichtigefachpositionFI .pruefart:IF subtext(t2,iii,iii+1)=hjd7THEN LEAVE
+suchrichtigefachpositionFI .suchschonvorhandeneneintrag:iiii:=1;WHILE iiii<>0
+REP iiii:=pos(t1,hjd3,iiii);IF iiii=0THEN dbstatus(1);LEAVE hjdateneintragen
+ELSE pruefweiterewerteFI ;iiiiINCR 1PER ;dbstatus(1);LEAVE hjdateneintragen.
+pruefweiterewerte:IF (iiiiMOD 2)=1THEN IF faartschoneingetragenTHEN IF
+subtext(t2,iiii,iiii+1)=hjd5THEN LEAVE suchschonvorhandeneneintragFI ELIF
+fakeschoneingetragenTHEN IF subtext(t3,iiii*2-1,iiii*2+2)=hjd4THEN LEAVE
+suchschonvorhandeneneintragFI FI FI .END PROC hjdateneintragen;TEXT PROC
+aktsj:IF aktschuljahr="0000"THEN aktschuljahr:=schulkenndatum("Schuljahr");
+FI ;aktschuljahrEND PROC aktsj;TEXT PROC akthj:IF akthalbjahr="0"THEN
+akthalbjahr:=schulkenndatum("Schulhalbjahr");FI ;akthalbjahrEND PROC akthj;
+PROC suchhjdaten(TEXT CONST famname,rufname,gebdatum):inittupel(
+dnrhalbjahresdaten);putwert(fnrhjdfamnames,famname);putwert(fnrhjdrufnames,
+rufname);putwert(fnrhjdgebdats,gebdatum);putwert(fnrhjdsj,schuljahr);putwert(
+fnrhjdhj,halbjahr);search(dnrhalbjahresdaten,TRUE )END PROC suchhjdaten;INT
+PROC ersterschueler:ersterEND PROC ersterschueler;INT PROC letzterschueler:
+letzterEND PROC letzterschueler;TEXT PROC wahldatenzumindex(INT CONST
+zeilennr,TEXT CONST kennung):INT VAR trennerpos;dbstatus(1);IF
+halbjahrnichtgesetztTHEN LEAVE wahldatenzumindexWITH ""ELIF zeilennr<erster
+COR zeilennr>letzterTHEN LEAVE wahldatenzumindexWITH ""FI ;toline(kuwa2,
+zeilennr);col(kuwa2,1);readrecord(kuwa2,eintrag);IF kennung=kznameCOR kennung
+=kzkurseCOR kennung=kzartTHEN dbstatus(0);trennerpos:=pos(eintrag,trenner);
+IF kennung=kznameTHEN subtext(eintrag,trennerpos+1,length(eintrag)-3)ELIF
+kennung=kzkurseTHEN text(eintrag,trennerpos-1)ELSE eintragFI ELSE ""FI END
+PROC wahldatenzumindex;TEXT PROC wahldatenzumschueler(TEXT CONST famname,
+rufname,gebdatum,kennung):TEXT VAR schueler:=trenner+famname+trenner+rufname+
+trenner+gebdatum;dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE
+wahldatenzumschuelerWITH ""FI ;IF schuelereingetragen(schueler,kuwa2)THEN
+readrecord(kuwa2,eintrag);IF kennung="F"COR kennung="A"COR kennung="FA"COR
+kennung="FAk"COR kennung="FK"COR kennung="FKk"COR kennung="FKAk"COR kennung=
+"FP"THEN dbstatus(0);alledaten(eintrag,kennung)ELSE ""FI ELSE ""FI END PROC
+wahldatenzumschueler;TEXT PROC weiterewahldatenzumschueler(TEXT CONST famname
+,rufname,gebdatum,kennung):TEXT VAR schueler:=trenner+famname+trenner+rufname
++trenner+gebdatum;dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE
+weiterewahldatenzumschuelerWITH ""FI ;IF schuelereingetragen(schueler,kuwa3)
+THEN readrecord(kuwa3,eintrag);IF kennung="F"COR kennung="A"COR kennung="FA"
+COR kennung="FAk"COR kennung="FK"COR kennung="FKk"COR kennung="FKAk"THEN
+dbstatus(0);alledaten(eintrag,kennung)ELSE ""FI ELSE ""FI END PROC
+weiterewahldatenzumschueler;TEXT PROC kursdaten(TEXT CONST anwkurs,kennung):
+TEXT VAR ausgabe:="",kurs:=text(anwkurs,laengekurs);dbstatus(1);IF
+halbjahrnichtgesetztTHEN LEAVE kursdatenWITH ""FI ;IF kurseingetragen(kurs)
+THEN readrecord(kuwa0,eintrag);IF kennung=kzartTHEN ausgabe:=subtext(eintrag,
+9);dbstatus(0)ELIF kennung=kzstdTHEN ausgabe:=subtext(eintrag,7,8);dbstatus(0
+)ELIF kennung=kzplanblTHEN ausgabe:=planbloecke(kurs);dbstatus(0)FI FI ;
+ausgabeEND PROC kursdaten;TEXT PROC allekurse:TEXT VAR ausgabe:="";IF
+halbjahrnichtgesetztTHEN dbstatus(1);LEAVE allekurseWITH ""ELSE dbstatus(0)
+FI ;col(kuwa0,1);toline(kuwa0,1);WHILE NOT eof(kuwa0)REP readrecord(kuwa0,
+eintrag);IF eintrag<>""THEN ausgabeCAT eintragFI ;down(kuwa0)PER ;ausgabeEND
+PROC allekurse;TEXT PROC alleplanblockbezeichner:TEXT VAR ausgabe:="";IF
+halbjahrnichtgesetztTHEN dbstatus(1);LEAVE alleplanblockbezeichnerWITH ""
+ELSE dbstatus(0)FI ;col(kuwa1,1);toline(kuwa1,1);WHILE NOT eof(kuwa1)REP
+readrecord(kuwa1,eintrag);IF eintrag<>""THEN ausgabeCAT text(eintrag,
+laengeblock)FI ;down(kuwa1)PER ;ausgabeEND PROC alleplanblockbezeichner;TEXT
+PROC planblockdaten(TEXT CONST anwblockbez,kennung):TEXT VAR blockbez:=
+formbezeichner(anwblockbez);IF halbjahrnichtgesetztCOR NOT blockeingetragen(
+blockbez)THEN dbstatus(1);LEAVE planblockdatenWITH ""FI ;readrecord(kuwa1,
+eintrag);IF kennung=kzstdTHEN dbstatus(0);eintragSUB 4ELIF kennung=kzkurse
+THEN dbstatus(0);subtext(eintrag,5)ELSE ""FI END PROC planblockdaten;PROC
+kurszumplanblockeintragen(TEXT CONST anwkurs,anwblockbez):TEXT VAR blockbez:=
+formbezeichner(anwblockbez);TEXT CONST kurs:=text(anwkurs,laengekurs);IF
+halbjahrnichtgesetztCOR NOT blockeingetragen(blockbez)THEN dbstatus(1);LEAVE
+kurszumplanblockeintragenFI ;readrecord(kuwa1,eintrag);IF length(eintrag)>
+laengeblockwstdTHEN IF wertnichteingetragen(subtext(eintrag,laengeblockwstd+1
+),kurs,1)THEN eintragCAT text(kurs,laengekurs);writerecord(kuwa1,eintrag)FI
+ELSE eintragCAT text(kurs,laengekurs);writerecord(kuwa1,eintrag)FI ;dbstatus(
+0)END PROC kurszumplanblockeintragen;INT PROC anzahlschuelermitwahl(TEXT
+CONST fach,kennung,art,klausur):IF halbjahrnichtgesetztTHEN dbstatus(1);
+LEAVE anzahlschuelermitwahlWITH 0FI ;fa1:=text(fach,laengefach);ke1:=text(
+kennung,laengekennung);ar:=text(art,laengeart);dbstatus(0);IF fach=""THEN
+dbstatus(1);-1ELIF kennung=""CAND art=""CAND klausur=""THEN anzahlschueler(
+fa1,"",4)ELIF kennung=""CAND art=""THEN anzahlschueler(fa1,klausur,4)ELIF
+kennung<>""CAND art=""CAND klausur=""THEN anzahlschueler(fa1+ke1,"",4)ELIF
+kennung<>""CAND art=""THEN anzahlschueler(fa1+ke1,klausur,4)ELIF kennung=""
+CAND art<>""CAND klausur=""THEN anzahlschueler(ar+fa1,"",2)ELIF kennung=""
+CAND art<>""THEN anzahlschueler(klausur+ar+fa1,"",1)ELIF klausur=""THEN
+anzahlschueler(ar+fa1+ke1,"",2)ELSE anzahlschueler(klausur+ar+fa1+ke1,"",1)
+FI END PROC anzahlschuelermitwahl;INT PROC anzahlschuelermitwahl(TEXT CONST
+fach,kennung,art,klausur,fach2,kennung2,art2,klausur2):TEXT VAR p1,p3,p4,p6,
+ar1,ar2;INT VAR p2,p5;fa1:=text(fach,laengefach);fa2:=text(fach2,laengefach);
+ke1:=text(kennung,laengekennung);ke2:=text(kennung2,laengekennung);ar1:=text(
+art,laengeart);ar2:=text(art2,laengeart);IF halbjahrnichtgesetztCOR (fa1=fa2
+CAND kennung=kennung2CAND art=art2)THEN dbstatus(1);LEAVE
+anzahlschuelermitwahlWITH 0FI ;pruefwahl.pruefwahl:dbstatus(0);IF fach=""
+THEN dbstatus(1);LEAVE anzahlschuelermitwahlWITH -1ELIF kennung=""CAND art=""
+CAND klausur=""THEN p1:=fa1;p2:=4;p3:=""ELIF kennung=""CAND art=""THEN p1:=
+fa1;p2:=4;p3:=klausurELIF kennung<>""CAND art=""CAND klausur=""THEN p1:=fa1+
+ke1;p2:=4;p3:=""ELIF kennung<>""CAND art=""THEN p1:=fa1+ke1;p2:=4;p3:=klausur
+ELIF kennung=""CAND art<>""CAND klausur=""THEN p1:=ar1+fa1;p2:=2;p3:="";ELIF
+kennung=""CAND art<>""THEN p1:=klausur+ar1+fa1;p2:=1;p3:=""ELIF klausur=""
+THEN p1:=ar1+fa1+ke1;p2:=2;p3:=""ELSE p1:=klausur+ar1+fa1+ke1;p2:=1;p3:=""FI
+;IF fach2=""THEN LEAVE anzahlschuelermitwahlWITH anzahlschueler(p1,p3,p2)
+ELIF kennung2=""CAND art2=""CAND klausur2=""THEN p4:=fa2;p5:=4;p6:=""ELIF
+kennung2=""CAND art2=""THEN p4:=fa2;p5:=4;p6:=klausur2ELIF kennung2<>""CAND
+art2=""CAND klausur2=""THEN p4:=fa2+ke2;p5:=4;p6:=""ELIF kennung2<>""CAND
+art2=""THEN p4:=fa2+ke2;p5:=4;p6:=klausur2ELIF kennung2=""CAND art2<>""CAND
+klausur2=""THEN p4:=ar2+fa2;p5:=2;p6:="";ELIF kennung2=""CAND art2<>""THEN p4
+:=klausur2+ar2+fa2;p5:=1;p6:=""ELIF klausur2=""THEN p4:=ar2+fa2+ke2;p5:=2;p6
+:=""ELSE p4:=klausur2+ar2+fa2+ke2;p5:=1;p6:=""FI ;anzahlschueler(p1,p3,p4,p6,
+p2,p5)END PROC anzahlschuelermitwahl;TEXT PROC schuelermitwahl(TEXT CONST
+fach,kennung,art,klausur):IF halbjahrnichtgesetztTHEN dbstatus(1);LEAVE
+schuelermitwahlWITH ""FI ;fa1:=text(fach,laengefach);ke1:=text(kennung,
+laengekennung);ar:=text(art,laengeart);pruefwahl.pruefwahl:dbstatus(0);IF
+fach=""THEN dbstatus(1);""ELIF kennung=""CAND art=""CAND klausur=""THEN
+schueler(fa1,"",4)ELIF kennung=""CAND art=""THEN schueler(fa1,klausur,4)ELIF
+kennung<>""CAND art=""CAND klausur=""THEN schueler(fa1+ke1,"",4)ELIF kennung
+<>""CAND art=""THEN schueler(fa1+ke1,klausur,4)ELIF kennung=""CAND art<>""
+CAND klausur=""THEN schueler(ar+fa1,"",2)ELIF kennung=""CAND art<>""THEN
+schueler(klausur+ar+fa1,"",1)ELIF klausur=""THEN schueler(ar+fa1+ke1,"",2)
+ELSE schueler(klausur+ar+fa1+ke1,"",1)FI END PROC schuelermitwahl;INT PROC
+anzahlfreierschuelerimplanblock(TEXT CONST blocknr,teilkennung,fach,kennung,
+art,klausur):TEXT VAR block:=text(blocknr,2)+text(teilkennung,1);INT VAR j:=
+int(blocknr)*3-2,anzspezschueler:=letzterschueler-ersterschueler+1,
+anzbelschueler:=0;IF halbjahrnichtgesetztCOR j<1COR j>maxkuwa1zeilenTHEN
+dbstatus(1);LEAVE anzahlfreierschuelerimplanblockWITH -1FI ;IF fach=""THEN
+anzspezschueler:=letzterschueler-ersterschueler+1ELSE anzspezschueler:=
+anzahlschuelermitwahl(fach,kennung,art,klausur)FI ;fa1:=text(fach,laengefach)
+;ke1:=text(kennung,laengekennung);ar:=text(art,laengeart);pruefwahl.pruefwahl
+:dbstatus(0);IF fach=""THEN anzbelschueler:=anzahlschueler("","",block,1)
+ELIF kennung=""CAND art=""CAND klausur=""THEN anzbelschueler:=anzahlschueler(
+fa1,"",block,4)ELIF kennung=""CAND art=""THEN anzbelschueler:=anzahlschueler(
+fa1,klausur,block,4)ELIF kennung<>""CAND art=""CAND klausur=""THEN
+anzbelschueler:=anzahlschueler(fa1+ke1,"",block,4)ELIF kennung<>""CAND art=""
+THEN anzbelschueler:=anzahlschueler(fa1+ke1,klausur,block,4)ELIF kennung=""
+CAND art<>""CAND klausur=""THEN anzbelschueler:=anzahlschueler(ar+fa1,"",
+block,2)ELIF kennung=""CAND art<>""THEN anzbelschueler:=anzahlschueler(
+klausur+ar+fa1,"",block,1)ELIF klausur=""THEN anzbelschueler:=anzahlschueler(
+ar+fa1+ke1,"",block,2)ELSE anzbelschueler:=anzahlschueler(klausur+ar+fa1+ke1,
+"",block,1)FI ;anzspezschueler-anzbelschuelerEND PROC
+anzahlfreierschuelerimplanblock;BOOL PROC schuelerinplanblock(TEXT CONST
+famname,rufname,gebdatum,blockbez):TEXT VAR schueler:=trenner+famname+trenner
++rufname+trenner+gebdatum,block:=text(blockbez,laengeblock),schuelerkurse:=""
+,aktkurs,plblkurse:=planblockdaten(block,kzkurse);INT VAR kurspos;IF
+planblockeingetragenCAND schuelereingetragen(schueler,kuwa2)CAND NOT
+halbjahrnichtgesetztTHEN dbstatus(0);schuelerkurse:=wahldatenzumschueler(
+famname,rufname,gebdatum,kzfake);IF plblkurse=""THEN FALSE ELSE
+betrachtealleschuelerkurseFI ELSE dbstatus(1);TRUE FI .planblockeingetragen:
+dbstatus=0.betrachtealleschuelerkurse:kurspos:=1;WHILE kurspos<length(
+schuelerkurse)REP aktkurs:=subtext(schuelerkurse,kurspos,kurspos+laengekurs-1
+);IF kursnichteingetragen(plblkurse,aktkurs)THEN kursposINCR laengekursELSE
+LEAVE schuelerinplanblockWITH TRUE FI PER ;FALSE .END PROC
+schuelerinplanblock;BOOL PROC kursnichteingetragen(TEXT CONST quelle,
+teilmuster):INT VAR suchab:=1,aktpos;WHILE pos(quelle,teilmuster,suchab)<>0
+REP aktpos:=pos(quelle,teilmuster,suchab);IF aktposMOD laengekurs=1THEN
+LEAVE kursnichteingetragenWITH FALSE ELSE suchab:=aktpos+1FI PER ;TRUE END
+PROC kursnichteingetragen;TEXT PROC schuelerundklausur(TEXT CONST fach,
+kennung,art):IF halbjahrnichtgesetztTHEN dbstatus(1);LEAVE schuelerundklausur
+WITH ""FI ;fa1:=text(fach,laengefach);ke1:=text(kennung,laengekennung);ar:=
+text(art,laengeart);pruefwahl.pruefwahl:dbstatus(0);IF fach=""THEN dbstatus(1
+);""ELIF kennung=""CAND art=""THEN klausurschueler(fa1,4)ELIF kennung<>""
+CAND art=""THEN klausurschueler(fa1+ke1,4)ELIF kennung=""CAND art<>""THEN
+klausurschueler(ar+fa1,2)ELSE klausurschueler(ar+fa1+ke1,2)FI END PROC
+schuelerundklausur;TEXT PROC klausurschueler(TEXT CONST suchtext,INT CONST
+findpos):INT VAR aktpos;TEXT VAR namen:="";col(kuwa2,1);toline(kuwa2,erster);
+WHILE lineno(kuwa2)<=letzterREP downety(kuwa2,suchtext);aktpos:=col(kuwa2);
+IF lineno(kuwa2)>letzterTHEN LEAVE klausurschuelerWITH namenELIF aktposMOD
+laengekurseintrag=findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(eintrag
+,trenner);IF aktpos<namenposTHEN namenCAT trenner2+(eintragSUB (aktpos-
+findpos+1));namenCAT subtext(eintrag,namenpos,length(eintrag)-3)FI FI ;col(
+kuwa2,1);down(kuwa2)PER ;namen.END PROC klausurschueler;TEXT PROC schueler(
+TEXT CONST suchtext,klausur,INT CONST findpos):INT VAR aktpos;TEXT VAR namen
+:="";col(kuwa2,1);toline(kuwa2,erster);WHILE lineno(kuwa2)<=letzterREP
+downety(kuwa2,suchtext);aktpos:=col(kuwa2);IF lineno(kuwa2)>letzterTHEN
+LEAVE schuelerWITH namenELIF aktposMOD laengekurseintrag=findposTHEN
+readrecord(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF aktpos<namenpos
+THEN IF klausur=""THEN namenCAT trenner2;namenCAT subtext(eintrag,namenpos,
+length(eintrag)-3)ELSE ueberpruefklausurFI FI FI ;col(kuwa2,1);down(kuwa2)
+PER ;namen.ueberpruefklausur:IF (eintragSUB (aktpos-findpos+1))=klausurTHEN
+namenCAT trenner2;namenCAT subtext(eintrag,pos(eintrag,trenner),length(
+eintrag)-3)FI .END PROC schueler;INT PROC anzahlschueler(TEXT CONST suchtext,
+klausur,INT CONST findpos):INT VAR anz:=0,aktpos;col(kuwa2,1);toline(kuwa2,
+erster);WHILE lineno(kuwa2)<=letzterREP downety(kuwa2,suchtext);aktpos:=col(
+kuwa2);IF lineno(kuwa2)>letzterTHEN LEAVE anzahlschuelerWITH anzELIF aktpos
+MOD laengekurseintrag=findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(
+eintrag,trenner);IF aktpos<namenposTHEN IF klausur=""THEN anzINCR 1ELSE
+ueberpruefklausurFI FI FI ;down(kuwa2);col(kuwa2,1)PER ;anz.ueberpruefklausur
+:IF (eintragSUB (aktpos-findpos+1))=klausurTHEN anzINCR 1FI .END PROC
+anzahlschueler;INT PROC anzahlschueler(TEXT CONST suchtext,klausur,anwblock,
+INT CONST findpos):INT VAR i,anz:=0,aktpos;TEXT VAR blocknr:=text(anwblock,2)
+,block:=text(blocknr,laengeblock);IF (anwblockSUB 3)="a"THEN blockCAT
+anwblockELIF (anwblockSUB 3)="b"THEN blockCAT anwblockELSE block:=blocknrFI ;
+IF suchtext=""THEN zaehlalleschuelerELSE zaehlspezschuelerFI .
+zaehlspezschueler:col(kuwa2,1);toline(kuwa2,erster);WHILE lineno(kuwa2)<=
+letzterREP downety(kuwa2,suchtext);aktpos:=col(kuwa2);IF lineno(kuwa2)>
+letzterTHEN LEAVE anzahlschuelerWITH anzELIF aktposMOD laengekurseintrag=
+findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF
+aktpos<namenposTHEN eintrag:=text(eintrag,namenpos-1);IF klausur=""THEN
+pruefblockELSE ueberpruefklausurFI FI FI ;down(kuwa2);col(kuwa2,1)PER ;anz.
+ueberpruefklausur:IF (eintragSUB (aktpos-findpos+1))=klausurTHEN pruefblock
+FI .pruefblock:IF NOT (nichteingetragen(eintrag,block,10))COR NOT (
+nichteingetragen(eintrag,block,13))THEN anzINCR 1FI .zaehlalleschueler:col(
+kuwa2,1);FOR iFROM ersterUPTO letzterREP toline(kuwa2,i);readrecord(kuwa2,
+eintrag);eintrag:=text(eintrag,pos(eintrag,trenner)-1);pruefblockPER ;anz.
+END PROC anzahlschueler;INT PROC anzahlschueler(TEXT CONST suchtext,klausur,
+suchtext2,klausur2,INT CONST findpos,findpos2):INT VAR anz:=0,aktpos,kurspos;
+col(kuwa2,1);toline(kuwa2,erster);WHILE lineno(kuwa2)<=letzterREP downety(
+kuwa2,suchtext);aktpos:=col(kuwa2);IF lineno(kuwa2)>letzterTHEN LEAVE
+anzahlschuelerWITH anzELIF aktposMOD laengekurseintrag=findposTHEN readrecord
+(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF aktpos<namenposTHEN IF
+klausur=""THEN ueberpruefkurs2ELSE ueberpruefklausurFI FI FI ;down(kuwa2);col
+(kuwa2,1)PER ;anz.ueberpruefklausur:IF (eintragSUB (aktpos-findpos+1))=
+klausurTHEN ueberpruefkurs2FI .ueberpruefkurs2:IF NOT nichteingetragen(
+eintrag,suchtext2,findpos2,kurspos)THEN IF klausur2=""THEN anzINCR 1ELIF (
+eintragSUB kurspos)=klausurTHEN anzINCR 1FI ;FI .END PROC anzahlschueler;
+TEXT PROC alledaten(TEXT CONST eintrag,kennung):INT VAR aktpos:=pos(eintrag,
+trenner);TEXT VAR kurse:=text(eintrag,aktpos-1),kurs,ausgabe:="";ausgabe:="";
+IF length(kurse)MOD laengekurseintrag<>0THEN dbstatus(1)ELSE aktpos:=1;WHILE
+aktpos<length(kurse)REP kurs:=subtext(kurse,aktpos,aktpos+laengekurseintrag-1
+);IF kennung="F"THEN ausgabeCAT subtext(kurs,4,5)ELIF kennung="A"THEN ausgabe
+CAT subtext(kurs,2,3)ELIF kennung="FA"THEN ausgabeCAT subtext(kurs,4,5);
+ausgabeCAT subtext(kurs,2,3)ELIF kennung="FAk"THEN ausgabeCAT subtext(kurs,4,
+5);ausgabeCAT subtext(kurs,2,3);ausgabeCAT (kursSUB 1)ELIF kennung="FK"THEN
+ausgabeCAT subtext(kurs,4,9)ELIF kennung="FKk"THEN ausgabeCAT subtext(kurs,4,
+9);ausgabeCAT (kursSUB 1)ELIF kennung="FKAk"THEN ausgabeCAT subtext(kurs,4,9)
+;ausgabeCAT subtext(kurs,2,3);ausgabeCAT (kursSUB 1)ELIF kennung="FP"THEN
+ausgabeCAT subtext(kurs,4,5);ausgabeCAT planbloecke(subtext(kurs,4,9))FI ;
+aktposINCR laengekurseintragPER ;FI ;ausgabeEND PROC alledaten;INT PROC
+zeilennrzumschuelerbestand(BOOL CONST letzterls):col(kuwa2,1);toline(kuwa2,1)
+;downety(kuwa2,kzneue);IF letzterlsTHEN IF eof(kuwa2)THEN lines(kuwa2)ELSE
+lineno(kuwa2)-1FI ELSE IF eof(kuwa2)THEN lines(kuwa2)+1ELSE lineno(kuwa2)FI
+FI END PROC zeilennrzumschuelerbestand;BOOL PROC nichteingetragen(TEXT CONST
+urquelle,muster,INT CONST ripos,INT VAR findpos):INT VAR suchab:=1,aktpos,
+trennerpos:=pos(urquelle,trenner);TEXT VAR quelle;IF trennerpos>0THEN quelle
+:=text(urquelle,trennerpos-1)ELSE quelle:=urquelleFI ;WHILE pos(quelle,muster
+,suchab)<>0REP aktpos:=pos(quelle,muster,suchab);IF aktposMOD
+laengekurseintrag=riposTHEN findpos:=aktpos-ripos+1;LEAVE nichteingetragen
+WITH FALSE ELSE suchab:=aktpos+1FI PER ;findpos:=0;TRUE END PROC
+nichteingetragen;BOOL PROC nichteingetragen(TEXT CONST urquelle,muster,INT
+CONST ripos):INT VAR trennerpos:=pos(urquelle,trenner);TEXT VAR quelle,
+teilmuster;IF trennerpos>0THEN quelle:=text(urquelle,trennerpos-1)ELSE quelle
+:=urquelleFI ;IF length(muster)<4THEN wertnichteingetragen(quelle,muster,
+ripos)ELSE teilmuster:=text(muster,3);IF wertnichteingetragen(quelle,
+teilmuster,ripos)THEN teilmuster:=subtext(muster,4);wertnichteingetragen(
+quelle,teilmuster,ripos)ELSE FALSE FI FI END PROC nichteingetragen;BOOL PROC
+wertnichteingetragen(TEXT CONST quelle,teilmuster,INT CONST ripos):INT VAR
+suchab:=1,aktpos;WHILE pos(quelle,teilmuster,suchab)<>0REP aktpos:=pos(quelle
+,teilmuster,suchab);IF aktposMOD laengekurseintrag=riposTHEN LEAVE
+wertnichteingetragenWITH FALSE ELSE suchab:=aktpos+1FI PER ;TRUE END PROC
+wertnichteingetragen;TEXT PROC planbloecke(TEXT CONST kurs):TEXT VAR blockbez
+:="",zeile;INT VAR aktsp;col(kuwa1,1);toline(kuwa1,1);WHILE NOT eof(kuwa1)
+REP downety(kuwa1,kurs);IF NOT eof(kuwa1)THEN aktsp:=col(kuwa1);IF aktspMOD
+laengekurs=5THEN readrecord(kuwa1,zeile);blockbezCAT text(zeile,laengeblock)
+FI ;col(kuwa1,aktsp+1)FI ;PER ;text(blockbez,6)END PROC planbloecke;PROC
+aenderkursinkuwa1(TEXT CONST kurs,kursneu):INT VAR aktsp;col(kuwa1,1);toline(
+kuwa1,1);WHILE NOT eof(kuwa1)REP downety(kuwa1,kurs);IF NOT eof(kuwa1)THEN
+aktsp:=col(kuwa1);IF aktspMOD laengekurs=5THEN readrecord(kuwa1,eintrag);
+writerecord(kuwa1,text(eintrag,aktsp-1)+kursneu+subtext(eintrag,aktsp+6))FI ;
+col(kuwa1,aktsp+1)FI ;PER END PROC aenderkursinkuwa1;BOOL PROC
+schuelereingetragen(TEXT CONST schueler,FILE VAR file):col(file,1);toline(
+file,1);downety(file,schueler);IF NOT eof(file)THEN col(file,1);TRUE ELSE
+FALSE FI END PROC schuelereingetragen;PROC planbloeckezukurseintragen(TEXT
+CONST kurs,planbloecke):INT VAR aktpos;col(kuwa2,1);toline(kuwa2,1);WHILE
+NOT eof(kuwa2)REP downety(kuwa2,kurs);IF NOT eof(kuwa2)THEN aktpos:=col(kuwa2
+);IF aktposMOD laengekurseintrag=4THEN korrigiereintragFI ;col(kuwa2,aktpos+
+11)FI PER .korrigiereintrag:readrecord(kuwa2,eintrag);writerecord(kuwa2,text(
+eintrag,aktpos+5)+planbloecke+subtext(eintrag,aktpos+12)).END PROC
+planbloeckezukurseintragen;BOOL PROC kurseingetragen(TEXT CONST anwkurs):
+TEXT VAR kurs:=text(anwkurs,laengekurs);indateieingetragen(kuwa0,kurs)END
+PROC kurseingetragen;BOOL PROC blockeingetragen(TEXT CONST planblock):
+indateieingetragen(kuwa1,planblock)END PROC blockeingetragen;BOOL PROC
+indateieingetragen(FILE VAR dat,TEXT CONST suchtext):IF compress(suchtext)=""
+THEN LEAVE indateieingetragenWITH FALSE FI ;toline(dat,1);col(dat,1);downety(
+dat,suchtext);WHILE NOT eof(dat)REP IF col(dat)=1THEN LEAVE
+indateieingetragenWITH TRUE ELSE col(dat,col(dat)+1)FI ;downety(dat,suchtext)
+PER ;FALSE END PROC indateieingetragen;TEXT PROC konvsjteil(TEXT CONST jahr,
+INT CONST jgstdiff):INT VAR kjahr:=int(jahr)+jgstdiff;IF kjahr>99THEN subtext
+(text(kjahr),2)ELSE text(kjahr)FI END PROC konvsjteil;PROC kursdatenholen:
+kuwa0:=sequentialfile(output,datei);inittupel(dnrlehrveranstaltungen);putwert
+(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);putwert(fnrlvjgst,jgst);
+statleseschleife(dnrlehrveranstaltungen,schuljahr,halbjahr,fnrlvsj,fnrlvhj,
+PROC kursdatenaktodergepl);modify(kuwa0).END PROC kursdatenholen;PROC
+kursdatenaktodergepl(BOOL VAR b):IF wert(fnrlvsj)<>schuljahrCOR wert(fnrlvhj)
+<>halbjahrCOR wert(fnrlvjgst)<>jgstCOR dbstatus<>0THEN b:=TRUE ELSE putline(
+kuwa0,text(wert(fnrlvfachkennung),laengekurs)+text(wert(fnrlvwochenstd),
+laengewstd)+text(wert(fnrlvart),laengeart))FI .END PROC kursdatenaktodergepl;
+PROC kurswahleinerjgstaufbereiten(TEXT CONST jgst,halbjahr,schuljahr,FILE
+VAR kuwadatei):datei:=kurswahl2+jgst+" "+halbjahr+"."+schuljahr;forget(datei,
+quiet);IF kuwa2eintragTHEN kuwa2:=sequentialfile(output,datei)ELSE kuwa3:=
+sequentialfile(output,datei)FI ;eintrag:=trenner;holhalbjahresdaten;
+holalleschueler;forget(namezwischendatei,quiet);IF kuwa2eintragTHEN modify(
+kuwa2)ELSE modify(kuwa3)FI .holhalbjahresdaten:inittupel(dnrhalbjahresdaten);
+changeindex;putwert(fnrhjdsj,schuljahr);putwert(fnrhjdhj,halbjahr);putwert(
+fnrhjdjgst,jgst);forget(namezwischendatei,quiet);kuwahilf:=sequentialfile(
+output,namezwischendatei);statleseschleife(ixhjdsjhjjgstkenn,schuljahr,
+halbjahr,fnrhjdsj,fnrhjdhj,PROC zwischenspeichern);.holalleschueler:modify(
+kuwahilf);IF bearbschueler<>2THEN erster:=1FI ;inittupel(dnrschueler);
+parsenooffields(5);changeindex;status:=stat1;statleseschleife(ixsustatjgst,
+status,text(aktjg),fnrsustatuss,fnrsusgrpjgst,PROC schuelerholen);IF aktjg=10
+THEN status:=stat2ELSE status:=stat3FI ;IF kuwa2eintragTHEN IF bearbschueler=
+1THEN letzter:=lines(kuwa2)ELIF bearbschueler=2THEN erster:=lines(kuwa2)+1FI
+FI ;IF aktjg<>13THEN inittupel(dnrschueler);putintwert(fnrsujgsteintr,aktjg+1
+);statleseschleife(ixsustatjgst,status,"",fnrsustatuss,fnrsusgrpjgst,PROC
+neueschuelerholen);FI ;IF kuwa2eintragTHEN IF bearbschueler<>1THEN letzter:=
+lines(kuwa2)FI ;IF erster=letzterTHEN letzterDECR 1FI FI ;reinitparsing.END
+PROC kurswahleinerjgstaufbereiten;PROC zwischenspeichern(BOOL VAR b):IF wert(
+fnrhjdsj)<>schuljahrCOR wert(fnrhjdhj)<>halbjahrCOR wert(fnrhjdjgst)<>jgst
+COR dbstatus<>0THEN b:=TRUE ELSE tragwerteeinFI .tragwerteein:bereitedatenauf
+(wert(fnrhjdfach),wert(fnrhjdkursart),wert(fnrhjdlerngrpkenn),wert(
+fnrhjdklausurteiln));putline(kuwahilf,eintrag).END PROC zwischenspeichern;
+PROC bereitedatenauf(TEXT CONST faecher,arten,kennungen,klausuren):INT VAR i,
+j,l;TEXT VAR t,fach;l:=length(faecher)DIV laengefach;eintrag:="";FOR iFROM 1
+UPTO lREP holklausur;holart;holfach;holkennungPER ;eintragCAT trenner;eintrag
+CAT wert(fnrhjdfamnames);eintragCAT trenner;eintragCAT wert(fnrhjdrufnames);
+eintragCAT trenner;eintragCAT wert(fnrhjdgebdats).holklausur:t:=subtext(
+klausuren,i,i);IF t<>""THEN eintragCAT tELSE eintragCAT " "FI .holart:j:=i*
+laengeart-1;t:=subtext(arten,j,j+1);IF t<>""THEN eintragCAT tELSE eintragCAT
+leereartFI .holfach:t:=subtext(faecher,j,j+1);IF t<>""THEN eintragCAT t;fach
+:=tELSE eintragCAT " "FI .holkennung:j:=i*laengekennung-3;t:=subtext(
+kennungen,j,j+3);IF t<>""THEN eintragCAT t;IF plblvorhandenTHEN
+holplanbloeckeELSE eintragCAT leereplanbloeckeFI ELSE eintragCAT leerekennung
++leereplanbloeckeFI .holplanbloecke:eintragCAT planbloecke(fach+t).END PROC
+bereitedatenauf;PROC schuelerholen(BOOL VAR b):IF wert(fnrsustatuss)<>status
+COR intwert(fnrsusgrpjgst)<>aktjgCOR dbstatus<>0THEN dbstatus(1);b:=TRUE
+ELSE schuelerdatenerstellen(kzschueler)FI .END PROC schuelerholen;PROC
+neueschuelerholen(BOOL VAR b):IF wert(fnrsustatuss)<>statusCOR dbstatus<>0
+THEN dbstatus(1);b:=TRUE ELIF intwert(fnrsujgsteintr)=aktjg+1THEN
+schuelerdatenerstellen(kzneue)FI .END PROC neueschuelerholen;PROC
+schuelerdatenerstellen(TEXT CONST schuelerkennung):TEXT VAR famname,rufname,
+gebdatum,eintragkuwahilf;famname:=wert(fnrsufamnames);rufname:=wert(
+fnrsurufnames);gebdatum:=wert(fnrsugebdatums);eintragkuwahilf:=trenner+
+famname+trenner+rufname+trenner+gebdatum;IF keinehjdatenTHEN
+schreibleereintragELSE suchinkuwahilfFI .keinehjdaten:eintrag=trenner.
+suchinkuwahilf:col(kuwahilf,1);toline(kuwahilf,1);downety(kuwahilf,
+eintragkuwahilf);IF eof(kuwahilf)THEN schreibleereintragELSE col(kuwahilf,1);
+readrecord(kuwahilf,eintragkuwahilf);eintragkuwahilfCAT schuelerkennung;IF
+kuwa2eintragTHEN putline(kuwa2,eintragkuwahilf)ELSE putline(kuwa3,
+eintragkuwahilf)FI ;FI .schreibleereintrag:eintragkuwahilfCAT schuelerkennung
+;IF kuwa2eintragTHEN putline(kuwa2,eintragkuwahilf)ELSE putline(kuwa3,
+eintragkuwahilf)FI .END PROC schuelerdatenerstellen;BOOL PROC
+halbjahrnichtgesetzt:schuljahr="0000"END PROC halbjahrnichtgesetzt;TEXT PROC
+gesperrterdatenraumname(TEXT CONST namepraefix):praefixsperre+datenraumname(
+namepraefix)END PROC gesperrterdatenraumname;TEXT PROC datenraumname(TEXT
+CONST namepraefix):TEXT VAR name:=namepraefix;nameCAT jgst;nameCAT " ";name
+CAT halbjahr;nameCAT ".";nameCAT schuljahr;nameEND PROC datenraumname;TEXT
+PROC formbezeichner(TEXT CONST bezeichner):TEXT VAR bez:="",erg:="";INT VAR
+ibez:=int(bezeichner);IF bezeichner=""THEN LEAVE formbezeichnerWITH
+bezeichnerFI ;IF NOT (lastconversionok)THEN erg:=bezeichnerSUB 3;IF NOT (erg=
+kennungtplbl1COR erg=kennungtplbl2)THEN LEAVE formbezeichnerWITH ""FI ELSE
+erg:=" "FI ;IF ibez<10THEN bezCAT "0";bezCAT text(ibez)ELSE bezCAT text(ibez)
+FI ;bezCAT erg;bezEND PROC formbezeichner;END PACKET
+kurswahlschnittstelle240791;
+