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 zeilennrletzterTHEN 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 kurspos0 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 aktposletzterTHEN LEAVE schuelerWITH namenELIF aktposMOD laengekurseintrag=findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF aktposletzterTHEN LEAVE anzahlschuelerWITH anzELIF aktpos MOD laengekurseintrag=findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos( eintrag,trenner);IF aktpos letzterTHEN LEAVE anzahlschuelerWITH anzELIF aktposMOD laengekurseintrag= findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF aktposletzterTHEN LEAVE anzahlschuelerWITH anzELIF aktposMOD laengekurseintrag=findposTHEN readrecord (kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF aktpos0THEN dbstatus(1)ELSE aktpos:=1;WHILE aktpos0THEN 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;