PACKET stdpluebersichtenDEFINES merkeartderstdpluebersichtundzeigemaske, stdpluebersichterstellenunddruckenggfvorherzeigen, stdpluebersichtdruckenundggfnaechsteerstellen:INT VAR ausgewaehlteuebersichtsart;LET artlehrer=1,artraeume=2,artsek1=3,artsek2=4, artzeiten=5,maskennamefuerlehrer="ms stdpluebersicht fuer lehrer", maskennamefuerraeume="ms stdpluebersicht fuer raeume",maskennamefuersek1= "ms stdpluebersicht fuer sek1",maskennamefuersek2= "ms stdpluebersicht fuer sek2",maskennamefuerzeiten= "ms stdpluebersicht fuer zeiten";TEXT VAR sj,hj,kennung,vonobjekt,bisobjekt, sek1kennungvon,sek1kennungbis,ueberschrift1,ueberschrift2,tag, listeallerobjekte:="";INT VAR laengederlistenobjekte,ptraktobjekt,sek1jgstvon ,sek1jgstbis,varspbreite,anzahlspalten,vonstd,bisstd,anzahltage;BOOL VAR nurdrucken,zweizeilig;LET fnr2geplsj=2,fnr3aktsj=3,fnr4einzeilig=4, fnr5zweizeilig=5,fnr6vonobjekt=6,fnr7bisobjekt=7,fnr8vonstd=8,fnr9bisstd=9, fnr10spaltenproseite=10,fnr11tageproseite=11,fnr12bildschirm=12,fnr13drucker= 13,fnrz4vonstd=4,fnrz5bisstd=5,fnrz6anzspalten=6,fnrz7bildschirm=7, fnrz8drucker=8;LET erstestd=1,letztestdmofr=12,letztestdsa=6,maxanzstdn=66, letztertag=6,erstertag=1,allewochentagsbezeichnungen= "MODIMIDOFRSAMoDiMiDoFrSamodimidofrsa";LET konstspbreite=6, konstkopplungsbreite=8,maxanzspalten1bis4=9,maxanzspalten5=5,maxanzspalten=9, minanzspalten=1,spaltenbreite8=8,spaltenbreite10=10,spaltenbreite12=12, spaltenbreite27=27,druckdatei="liste.1",textstdpluebersicht= "Stundenplanübersicht für ",textlehrer="Lehrer",textraeume="Räume",textsek1= "Klassen der Sek. 1",textsek2="Jgst. ",textzeiten="Zeiten", textanfangfuerschulhalbjahr="Schuljahr 19",trennerfuerschuljahr="/", textmittefuerschulhalbjahr=", ",textendefuerschulhalbjahr=". Halbjahr", ueberschriftenzahl=2,spaltentrenner=":",trennstrichzeichen="-", spaltentrennerimstrich="+",textzeiterstespalte="Zeit :",leereerstespalte= " :",textmontag="Mo",textdienstag="Di",textmittwoch="Mi",textdonnerstag= "Do",textfreitag="Fr",textsamstag="Sa",textkeintag=" ",trennstrichfuerlv="/" ,ueberschriftspalte2beiart4="Kopplung:",ueberschriftspalte3beiart4= " Lehrveranstaltungen",ueberschriftbeiart5="Lv /R /P /Kopplg. ", endeposjgstinlv=2,anfposfachinlv=3,endeposfachinlv=4,anfposkennunginlv=5, laengeeinerlv=8,laengeeinerkopplung=8,laengeeinerparaphe=4,laengeeinesraumes= 4,laengeeinersgrp=6,laengeeinerjgst=2,zeilebeianfangneueseite=2, maxtabzahljedruckdatei=10;LET meldnrlistewirdaufgebaut=7, meldnrbittezahlangeben=53,meldnrzahlausserhalbdergrenzen=54, meldnrungueltigeeingabe=55,meldnrauswahlnichtsinnvoll=56,meldnrplausi=57, meldnrlistewirdausgedruckt=58,meldnrbittewarten=69,meldnrinbearbeitung=352, meldnrkeinegueltigejgst=146,meldnrungueltigeparaphe=344, meldnrkeinelehrerdatenda=337,meldnrfalscheraumangabe=359, meldnrkeineraumdatenda=365,meldnrkeinestdpldatenda=366,meldnrfalschetagesbez= 385,meldnrfalschestundenfolge=386,meldnralphabetischefolge=380, meldnrkeinehjdatenda=382,meldnrmaxzeichenueberschritten=383, meldnrstdpldatenwerdenaufbereitet=384;INT VAR fehlermeldnr:= meldnrauswahlnichtsinnvoll,status,aktdnr;BOOL VAR druckenfertig;LET niltext= "",blank=" ",null=0,bestandraeume="c02 raeume";LET letztejgstsek1=10,jgst11= "11",jgst12="12",jgst13="13";PROC merkeartderstdpluebersichtundzeigemaske( INT CONST art):ausgewaehlteuebersichtsart:=art;SELECT artOF CASE artlehrer: laengederlistenobjekte:=laengeeinerparaphe;kennung:="P";varspbreite:= spaltenbreite10;standardvproc(maskennamefuerlehrer)CASE artraeume: laengederlistenobjekte:=laengeeinesraumes;kennung:="R";varspbreite:= spaltenbreite10;standardvproc(maskennamefuerraeume)CASE artsek1: laengederlistenobjekte:=laengeeinersgrp;kennung:="S";varspbreite:= spaltenbreite8;standardvproc(maskennamefuersek1)CASE artsek2: laengederlistenobjekte:=laengeeinerjgst;kennung:="L";varspbreite:= spaltenbreite12;standardvproc(maskennamefuersek2)CASE artzeiten:varspbreite:= spaltenbreite27;standardvproc(maskennamefuerzeiten)END SELECT ;END PROC merkeartderstdpluebersichtundzeigemaske;PROC stdpluebersichtdruckenundggfnaechsteerstellen(BOOL CONST drucken):FILE VAR f; IF druckenTHEN standardmeldung(meldnrlistewirdausgedruckt,niltext);f:= sequentialfile(output,druckdatei);drucknachbereiten;ELSE TEXT VAR dateiname:= niltext;INT VAR index:=0;THESAURUS VAR t:=allLIKE "liste.*";get(t,dateiname, index);WHILE dateiname<>niltextREP forget(dateiname,quiet);get(t,dateiname, index)PER ;FI ;IF druckenfertigTHEN enter(2)ELSE IF ausgewaehlteuebersichtsart=artzeitenTHEN bereitetabellefuerzeitenaufELSE bereitetabelleninderdruckdateiaufFI ;return(1)FI ;END PROC stdpluebersichtdruckenundggfnaechsteerstellen;PROC stdpluebersichterstellenunddruckenggfvorherzeigen:standardmeldung( meldnrplausi,niltext);IF NOT (maskenwerteok)THEN return(1)ELSE IF NOT ( druckwerteok)THEN fehlermeldnr:=meldnrmaxzeichenueberschritten; standardmeldung(fehlermeldnr,niltext);return(1)ELSE IF NOT (datenvorhanden) THEN standardmeldung(fehlermeldnr,niltext);return(1)ELSE IF nurdruckenTHEN standardmeldung(meldnrbittewarten,niltext)ELSE standardmeldung( meldnrlistewirdaufgebaut,niltext)FI ;ueberschrift2:= textanfangfuerschulhalbjahr;ueberschrift2CAT text(sj,2);ueberschrift2CAT trennerfuerschuljahr;ueberschrift2CAT subtext(sj,3);ueberschrift2CAT textmittefuerschulhalbjahr;ueberschrift2CAT hj;ueberschrift2CAT textendefuerschulhalbjahr;initdruckkopf(ueberschrift1,ueberschrift2); setzemitseitennummern(TRUE );druckenfertig:=FALSE ;ptraktobjekt:=1;IF ausgewaehlteuebersichtsart=artzeitenTHEN bereitetabellefuerzeitenaufELSE bereitetabelleninderdruckdateiaufFI ;IF nurdruckenTHEN drucknachbereiten; WHILE NOT druckenfertigREP IF ausgewaehlteuebersichtsart=artzeitenTHEN bereitetabellefuerzeitenaufELSE bereitetabelleninderdruckdateiaufFI ; drucknachbereiten;PER ;enter(1)ELSE zeigedatei(druckdatei,"vr");FI ;FI ;FI ; FI ;END PROC stdpluebersichterstellenunddruckenggfvorherzeigen;BOOL PROC maskenwerteok:standardpruefe(5,fnr2geplsj,fnr3aktsj,null,niltext,status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;sj:= schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr");IF standardmaskenfeld(fnr3aktsj)=niltextTHEN geplanteshjundsjberechnen(hj,sj)FI ;stundenplanhalbjahrsetzen(hj,sj);IF ausgewaehlteuebersichtsart<>artzeiten THEN IF NOT (druckerbildschirmok(fnr12bildschirm,fnr13drucker))THEN LEAVE maskenwerteokWITH FALSE FI ;standardpruefe(5,fnr4einzeilig,fnr5zweizeilig, null,niltext,status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;zweizeilig:=standardmaskenfeld(fnr4einzeilig)=niltext;IF NOT ( spaltenanzahlok(fnr10spaltenproseite))THEN LEAVE maskenwerteokWITH FALSE FI ; IF (standardmaskenfeld(fnr11tageproseite))=niltextTHEN anzahltage:=letztertag +1ELSE standardpruefe(2,fnr11tageproseite,null,null,niltext,status);IF status =0THEN standardpruefe(3,fnr11tageproseite,erstertag,letztertag,niltext,status );IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE ELSE anzahltage:=int(standardmaskenfeld(fnr11tageproseite));FI ;ELSE infeld(status );LEAVE maskenwerteokWITH FALSE FI ;FI ;IF standardmaskenfeld(fnr8vonstd)= niltextTHEN vonstd:=erstestdELSE standardpruefe(2,fnr8vonstd,null,null, niltext,status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;standardpruefe(3,fnr8vonstd,erstestd,letztestdmofr,niltext,status); IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;vonstd:=int (standardmaskenfeld(fnr8vonstd))FI ;IF standardmaskenfeld(fnr9bisstd)=niltext THEN bisstd:=letztestdmofrELSE standardpruefe(2,fnr9bisstd,null,null,niltext, status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ; standardpruefe(3,fnr9bisstd,erstestd,letztestdmofr,niltext,status);IF status <>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;bisstd:=int( standardmaskenfeld(fnr9bisstd))FI ;IF vonstd>bisstdTHEN infeld(fnr9bisstd); fehlermeldnr:=meldnrauswahlnichtsinnvoll;standardmeldung(fehlermeldnr,niltext );LEAVE maskenwerteokWITH FALSE ;FI ;vonobjekt:=standardmaskenfeld( fnr6vonobjekt);bisobjekt:=standardmaskenfeld(fnr7bisobjekt);ELSE IF NOT ( druckerbildschirmok(fnrz7bildschirm,fnrz8drucker))THEN LEAVE maskenwerteok WITH FALSE ELSE IF NOT anfangsundendzeitokTHEN standardmeldung(fehlermeldnr, niltext);LEAVE maskenwerteokWITH FALSE FI ;IF NOT (spaltenanzahlok( fnrz6anzspalten))THEN LEAVE maskenwerteokWITH FALSE FI ;FI ;FI ;TRUE . anfangsundendzeitok:TEXT VAR hilfstext;INT VAR tag;hilfstext:= standardmaskenfeld(fnrz4vonstd);IF hilfstext=niltextTHEN vonstd:=erstestd ELSE tag:=pos(allewochentagsbezeichnungen,text(hilfstext,2));IF tag=0THEN fehlermeldnr:=meldnrfalschetagesbez;infeld(fnrz4vonstd);LEAVE anfangsundendzeitokWITH FALSE FI ;tag:=(tagMOD 12)DIV 2;vonstd:=int(subtext( hilfstext,3));IF NOT lastconversionokTHEN fehlermeldnr:= meldnrbittezahlangeben;infeld(fnrz4vonstd);LEAVE anfangsundendzeitokWITH FALSE FI ;IF vonstdletztestdmofr) COR (tag=letztertag-1AND vonstd>letztestdsa)THEN fehlermeldnr:= meldnrzahlausserhalbdergrenzen;infeld(fnrz4vonstd);LEAVE anfangsundendzeitok WITH FALSE FI ;vonstd:=vonstd+(tag*letztestdmofr);FI ;hilfstext:= standardmaskenfeld(fnrz5bisstd);IF hilfstext=niltextTHEN bisstd:=maxanzstdn ELSE tag:=pos(allewochentagsbezeichnungen,text(hilfstext,2));IF tag=0THEN fehlermeldnr:=meldnrfalschetagesbez;infeld(fnrz5bisstd);LEAVE anfangsundendzeitokWITH FALSE FI ;tag:=(tagMOD 12)DIV 2;bisstd:=int(subtext( hilfstext,3));IF NOT lastconversionokTHEN fehlermeldnr:= meldnrbittezahlangeben;infeld(fnrz5bisstd);LEAVE anfangsundendzeitokWITH FALSE FI ;IF bisstdletztestdmofr) COR (tag=letztertag-1AND bisstd>letztestdsa)THEN fehlermeldnr:= meldnrzahlausserhalbdergrenzen;infeld(fnrz4vonstd);LEAVE anfangsundendzeitok WITH FALSE FI ;bisstd:=bisstd+(tag*letztestdmofr);FI ;IF vonstd>bisstdTHEN fehlermeldnr:=meldnrfalschestundenfolge;infeld(fnrz4vonstd);LEAVE anfangsundendzeitokWITH FALSE FI ;TRUE END PROC maskenwerteok;BOOL PROC druckerbildschirmok(INT CONST fnrbs,fnrdr):BOOL VAR richtig:=FALSE ; standardpruefe(5,fnrbs,fnrdr,null,niltext,status);IF status<>0THEN infeld( status);ELSE richtig:=TRUE ;nurdrucken:=standardmaskenfeld(fnrbs)=niltext;FI ;richtigEND PROC druckerbildschirmok;BOOL PROC spaltenanzahlok(INT CONST fnrspaltenanz):BOOL VAR richtig:=FALSE ;INT VAR spaltenmax,spaltenstandard; IF ausgewaehlteuebersichtsart=artzeitenTHEN spaltenstandard:=2;spaltenmax:= maxanzspalten5;ELIF ausgewaehlteuebersichtsart=artsek2THEN spaltenstandard:=4 ;spaltenmax:=maxanzspalten1bis4ELSE spaltenstandard:=5;spaltenmax:= maxanzspalten1bis4FI ;IF standardmaskenfeld(fnrspaltenanz)=niltextTHEN anzahlspalten:=spaltenstandard;richtig:=TRUE ELSE standardpruefe(2, fnrspaltenanz,null,null,niltext,status);IF status<>0THEN infeld(status);ELSE standardpruefe(3,fnrspaltenanz,minanzspalten,spaltenmax,niltext,status);IF status<>0THEN infeld(status)ELSE anzahlspalten:=int(standardmaskenfeld( fnrspaltenanz));richtig:=TRUE FI ;FI ;FI ;richtigEND PROC spaltenanzahlok; BOOL PROC druckwerteok:BOOL VAR richtig;IF ausgewaehlteuebersichtsart=artsek2 THEN richtig:=konstspbreite+1+konstkopplungsbreite+1+(varspbreite+1)* anzahlspalten<=druckbreiteELSE richtig:=konstspbreite+1+(varspbreite+1)* anzahlspalten<=druckbreiteFI ;IF NOT richtigTHEN IF ausgewaehlteuebersichtsart=artzeitenTHEN infeld(fnrz6anzspalten)ELSE infeld( fnr10spaltenproseite)FI ;FI ;richtigEND PROC druckwerteok;BOOL PROC datenvorhanden:BOOL VAR richtig:=FALSE ;stundenplanbasisundstundenplanholen( status);IF status<>0AND status<>8THEN fehlermeldnr:=meldnrkeinestdpldatenda; infeld(fnr2geplsj);ELSE SELECT ausgewaehlteuebersichtsartOF CASE artlehrer: aktdnr:=dnrlehrer;IF (datenpruefungok(fnrlparaphe,fnrlfamname))THEN richtig:= TRUE ;ueberschrift1:=textstdpluebersicht;ueberschrift1CAT textlehrer;FI ; CASE artraeume:aktdnr:=dnrschluessel;IF (datenpruefungok(fnrschlsachgebiet, fnrschlschluessel))THEN richtig:=TRUE ;ueberschrift1:=textstdpluebersicht; ueberschrift1CAT textraeume;FI ;CASE artsek1:aktdnr:=dnraktschuelergruppen; IF (datenpruefungok(fnrsgrpsj,fnrsgrphj))THEN richtig:=TRUE ;ueberschrift1:= textstdpluebersicht;ueberschrift1CAT textsek1;FI ;CASE artsek2:IF jgstokTHEN richtig:=TRUE ;ueberschrift1:=textstdpluebersicht;ueberschrift1CAT textsek2; FI ;CASE artzeiten:richtig:=TRUE ;ueberschrift1:=textstdpluebersicht; ueberschrift1CAT textzeiten;END SELECT ;FI ;richtig.jgstok:IF vonobjekt= niltextTHEN vonobjekt:=jgst11FI ;IF bisobjekt=niltextTHEN bisobjekt:=jgst13 FI ;IF vonobjekt<>jgst11AND vonobjekt<>jgst12AND vonobjekt<>jgst13THEN fehlermeldnr:=meldnrkeinegueltigejgst;infeld(fnr6vonobjekt);LEAVE jgstokWITH FALSE FI ;IF bisobjekt<>jgst11AND bisobjekt<>jgst12AND bisobjekt<>jgst13THEN fehlermeldnr:=meldnrkeinegueltigejgst;infeld(fnr7bisobjekt);LEAVE jgstokWITH FALSE FI ;IF int(bisobjekt)bisobjektTHEN listeallerobjekteCAT bisobjektFI ;TRUE END PROC datenvorhanden;BOOL PROC datenpruefungok(INT CONST erstesfeld,zweitesfeld):TEXT VAR ersterparameter, zweiterparameter;inittupel(aktdnr);listeallerobjekte:=niltext;IF ausgewaehlteuebersichtsart=artlehrerTHEN IF records(aktdnr)=0.0THEN fehlermeldnr:=meldnrkeinelehrerdatenda;infeld(fnr6vonobjekt);LEAVE datenpruefungokWITH FALSE ;FI ;IF vonobjekt<>niltextTHEN putwert(fnrlparaphe, vonobjekt);search(aktdnr,TRUE );IF dbstatus<>0THEN fehlermeldnr:= meldnrungueltigeparaphe;infeld(fnr6vonobjekt);LEAVE datenpruefungokWITH FALSE ;FI ;FI ;IF bisobjekt<>niltextTHEN putwert(fnrlparaphe,bisobjekt); search(aktdnr,TRUE );IF dbstatus<>0THEN fehlermeldnr:=meldnrungueltigeparaphe ;infeld(fnr7bisobjekt);LEAVE datenpruefungokWITH FALSE ;FI ;FI ; ersterparameter:=vonobjekt;zweiterparameter:=niltext;inittupel(aktdnr);ELIF ausgewaehlteuebersichtsart=artraeumeTHEN ersterparameter:=bestandraeume; zweiterparameter:=vonobjekt;putwert(fnrschlsachgebiet,ersterparameter); putwert(fnrschlschluessel,zweiterparameter);search(dnrschluessel,FALSE );IF dbstatus<>0OR wert(fnrschlsachgebiet)<>bestandraeumeTHEN IF vonobjekt=niltext THEN fehlermeldnr:=meldnrkeineraumdatenda;ELSE fehlermeldnr:= meldnrfalscheraumangabe;FI ;infeld(fnr6vonobjekt);LEAVE datenpruefungokWITH FALSE FI ;IF vonobjekt<>niltextTHEN search(dnrschluessel,TRUE );IF dbstatus<> 0THEN fehlermeldnr:=meldnrfalscheraumangabe;infeld(fnr6vonobjekt);LEAVE datenpruefungokWITH FALSE FI ;FI ;IF bisobjekt<>niltextTHEN putwert( fnrschlschluessel,bisobjekt);search(dnrschluessel,TRUE );IF dbstatus<>0THEN fehlermeldnr:=meldnrfalscheraumangabe;infeld(fnr7bisobjekt);LEAVE datenpruefungokWITH FALSE FI ;FI ;inittupel(aktdnr);ELSE ersterparameter:=sj; zweiterparameter:=hj;putwert(fnrsgrpsj,ersterparameter);putwert(fnrsgrphj, zweiterparameter);search(dnrschluessel,FALSE );IF dbstatus<>0OR wert( fnrsgrphj)<>hjTHEN infeld(fnr6vonobjekt);fehlermeldnr:=meldnrkeinehjdatenda; LEAVE datenpruefungokWITH FALSE FI ;IF vonobjekt<>niltextTHEN sek1kennungvon :=subtext(vonobjekt,3,6);sek1jgstvon:=int(subtext(vonobjekt,1,2));IF NOT ( lastconversionok)THEN infeld(fnr6vonobjekt);fehlermeldnr:= meldnrkeinegueltigejgst;LEAVE datenpruefungokWITH FALSE FI ;FI ;IF bisobjekt <>niltextTHEN sek1kennungbis:=subtext(bisobjekt,3,6);sek1jgstbis:=int(subtext (bisobjekt,1,2));IF NOT lastconversionokCOR sek1jgstvon<5COR sek1jgstvon>11 COR sek1jgstbis<5COR sek1jgstbis>11THEN infeld(fnr7bisobjekt);fehlermeldnr:= meldnrkeinegueltigejgst;LEAVE datenpruefungokWITH FALSE ELSE putintwert( fnrsgrpjgst,sek1jgstvon);putwert(fnrsgrpkennung,sek1kennungvon);IF sek1jgstvon>sek1jgstbisTHEN infeld(fnr6vonobjekt);fehlermeldnr:= meldnrzahlausserhalbdergrenzen;LEAVE datenpruefungokWITH FALSE FI ;IF sek1jgstvon=sek1jgstbisTHEN IF sek1kennungvon>sek1kennungbisTHEN infeld( fnr6vonobjekt);fehlermeldnr:=meldnralphabetischefolge;LEAVE datenpruefungok WITH FALSE FI ;FI ;IF sek1jgstbis<>10THEN bisobjekt:="0"+text(sek1jgstbis)+ sek1kennungbis;FI ;IF sek1jgstvon<>10THEN vonobjekt:="0"+text(sek1jgstvon)+ sek1kennungvon;FI ;FI ;FI ;FI ;IF vonanfangbisendeTHEN statleseschleife( aktdnr,ersterparameter,zweiterparameter,erstesfeld,zweitesfeld,PROC dateiende );ELIF vonanfangbiswertTHEN IF NOT bezeichnungzulaessig(kennung,bisobjekt) THEN infeld(fnr7bisobjekt);fehlermeldnr:=meldnrungueltigeeingabe; standardmeldung(fehlermeldnr,niltext);LEAVE datenpruefungokWITH FALSE ELSE statleseschleife(aktdnr,ersterparameter,zweiterparameter,erstesfeld, zweitesfeld,PROC endewert);FI ;ELIF vonwertbisendeTHEN IF NOT bezeichnungzulaessig(kennung,vonobjekt)THEN infeld(fnr6vonobjekt); fehlermeldnr:=meldnrungueltigeeingabe;standardmeldung(fehlermeldnr,niltext); LEAVE datenpruefungokWITH FALSE ELSE statleseschleife(aktdnr,ersterparameter, zweiterparameter,erstesfeld,zweitesfeld,PROC dateiende);FI ;ELIF vonwertbiswertTHEN IF NOT bezeichnungzulaessig(kennung,vonobjekt)THEN infeld( fnr6vonobjekt);fehlermeldnr:=meldnrungueltigeeingabe;standardmeldung( fehlermeldnr,niltext);LEAVE datenpruefungokWITH FALSE ELSE IF NOT bezeichnungzulaessig(kennung,bisobjekt)THEN infeld(fnr7bisobjekt); fehlermeldnr:=meldnrungueltigeeingabe;standardmeldung(fehlermeldnr,niltext); LEAVE datenpruefungokWITH FALSE ELSE IF vonobjekt>bisobjektTHEN infeld( fnr7bisobjekt);fehlermeldnr:=meldnralphabetischefolge;standardmeldung( fehlermeldnr,niltext);LEAVE datenpruefungokWITH FALSE ELSE statleseschleife( aktdnr,ersterparameter,zweiterparameter,erstesfeld,zweitesfeld,PROC endewert) ;FI ;FI ;FI ;ELSE statleseschleife(aktdnr,ersterparameter,zweiterparameter, erstesfeld,zweitesfeld,PROC endewert);FI ;TRUE .vonanfangbisende:vonobjekt= niltextAND bisobjekt=niltext.vonanfangbiswert:vonobjekt=niltextAND bisobjekt <>niltext.vonwertbisende:vonobjekt<>niltextAND bisobjekt=niltext. vonwertbiswert:vonobjekt<>niltextAND bisobjekt<>niltextEND PROC datenpruefungok;PROC endewert(BOOL VAR letzter):IF ausgewaehlteuebersichtsart =artlehrerTHEN IF dbstatus=0AND wert(fnrlparaphe)<=bisobjektTHEN listeallerobjekteCAT text(wert(fnrlparaphe),laengederlistenobjekte)ELSE letzter:=TRUE ;FI ;ELIF ausgewaehlteuebersichtsart=artraeumeTHEN IF dbstatus= 0AND wert(fnrschlsachgebiet)=bestandraeumeAND bisobjekt>=wert( fnrschlschluessel)THEN listeallerobjekteCAT text(wert(fnrschlschluessel), laengederlistenobjekte)ELSE letzter:=TRUE ;FI ;ELSE IF dbstatus=0AND wert( fnrsgrpsj)=sjAND wert(fnrsgrphj)=hjAND (sek1jgstbis>intwert(fnrsgrpjgst)OR ( sek1jgstbis=intwert(fnrsgrpjgst)AND sek1kennungbis>=wert(fnrsgrpkennung))) THEN listeallerobjekteCAT text(wert(fnrsgrpjgst),2);listeallerobjekteCAT text (wert(fnrsgrpkennung),4);ELSE letzter:=TRUE ;FI ;FI ;END PROC endewert;PROC dateiende(BOOL VAR ende):IF ausgewaehlteuebersichtsart=artlehrerTHEN IF dbstatus=0THEN listeallerobjekteCAT text(wert(fnrlparaphe), laengederlistenobjekte)ELSE ende:=TRUE FI ;ELIF ausgewaehlteuebersichtsart= artraeumeTHEN IF dbstatus=0AND wert(fnrschlsachgebiet)=bestandraeumeTHEN listeallerobjekteCAT text(wert(fnrschlschluessel),laengederlistenobjekte); ELSE ende:=TRUE FI ;ELSE IF dbstatus=0AND wert(fnrsgrpsj)=sjAND wert( fnrsgrphj)=hjAND letztejgstsek1>=intwert(fnrsgrpjgst)THEN listeallerobjekte CAT text(wert(fnrsgrpjgst),2);listeallerobjekteCAT text(wert(fnrsgrpkennung), 4);ELSE ende:=TRUE ;FI ;FI ;END PROC dateiende;PROC drucketrennstrich:TEXT VAR t:=konstspbreite*trennstrichzeichen;tCAT spaltentrennerimstrich;IF ausgewaehlteuebersichtsart=artsek2THEN tCAT konstkopplungsbreite* trennstrichzeichen;tCAT spaltentrennerimstrich;FI ;tCAT anzahlspalten*( varspbreite*trennstrichzeichen+spaltentrennerimstrich);druckzeileschreiben(t) END PROC drucketrennstrich;PROC druckespaltenueberschriften(ROW maxanzspalten TEXT CONST spaltenueberschrift):TEXT VAR t:=textzeiterstespalte;INT VAR i;IF ausgewaehlteuebersichtsart=artsek2THEN tCAT spaltenueberschrift[1];tCAT spaltenueberschrift[2]ELSE FOR iFROM 1UPTO anzahlspaltenREP tCAT text( spaltenueberschrift[i],varspbreite);tCAT spaltentrennerPER FI ;tCAT blank; druckzeileschreiben(t)END PROC druckespaltenueberschriften;PROC bereitetabelleninderdruckdateiauf:TEXT VAR jgstbez,lvsderjgst,aktlv,aktkopplg ,lvsprozeit,kopplgnprozeit,kopplgundlvs;INT VAR ptraktlv;INT VAR position, anfpos,endpos;INT VAR zeilenzaehler,aktstd,spaltenzaehler,stundenzaehler, tagzaehler,tabellenzaehler;TEXT VAR t,t1,lv,rm,par;BOOL VAR erstezeilederstunde,stundenochnichtfertig;ROW maxanzspaltenTEXT VAR spaltenueberschrift,zusatzangabe;druckvorbereiten;FOR tabellenzaehlerFROM 1 UPTO maxtabzahljedruckdateiREP bestimmespaltenueberschriften;IF ausgewaehlteuebersichtsart<>artsek2THEN standardmeldung(meldnrinbearbeitung, spaltenueberschrift(1)+"#");FI ;zeilenzaehler:=zeilebeianfangneueseite; druckkopfschreiben;druckespaltenueberschriften(spaltenueberschrift); drucketrennstrich;FOR tagzaehlerFROM erstertagUPTO letztertagREP IF tagzaehler=letztertagTHEN aktstd:=min(bisstd,letztestdsa)ELSE aktstd:=bisstd FI ;FOR stundenzaehlerFROM vonstdUPTO aktstdREP bereitezeileneinerstundeauf PER ;IF zeilenzaehler>zeilebeianfangneueseiteTHEN drucketrennstrich; zeilenzaehlerINCR 1;evtlseitenumbruchwgueberlaenge;FI ; evtlseitenumbruchwgtageszahljeseite;PER ;IF zeilenzaehler> zeilebeianfangneueseiteTHEN seitenwechsel;zeilenzaehler:= zeilebeianfangneueseite;FI ;PER ;druckenfertig:=ptraktobjekt>length( listeallerobjekte).bestimmespaltenueberschriften:IF ausgewaehlteuebersichtsart=artsek2THEN IF ptraktobjekt>length( listeallerobjekte)THEN druckenfertig:=TRUE ;LEAVE bereitetabelleninderdruckdateiaufFI ;jgstbez:=subtext(listeallerobjekte, ptraktobjekt,ptraktobjekt+laengederlistenobjekte-1);lvsderjgst:= lvderschuelergruppe(jgstbez);spaltenueberschrift[1]:= ueberschriftspalte2beiart4;spaltenueberschrift[2]:=ueberschriftspalte3beiart4 ;initdruckkopf(ueberschrift1+blank+jgstbez,ueberschrift2);ptraktobjektINCR laengederlistenobjekte;ELSE spaltenzaehler:=0;WHILE (spaltenzaehler< anzahlspalten)AND (ptraktobjekt<=length(listeallerobjekte))REP spaltenzaehler INCR 1;spaltenueberschrift[spaltenzaehler]:=subtext(listeallerobjekte, ptraktobjekt,ptraktobjekt+laengederlistenobjekte-1);ptraktobjektINCR laengederlistenobjekte;PER ;IF spaltenzaehler=0THEN druckenfertig:=TRUE ; LEAVE bereitetabelleninderdruckdateiaufFI ;anzahlspalten:=spaltenzaehlerFI . bereitezeileneinerstundeauf:erstezeilederstunde:=TRUE ;stundenochnichtfertig :=TRUE ;WHILE stundenochnichtfertigREP IF erstezeilederstundeTHEN IF stundenzaehler=vonstdTHEN SELECT tagzaehlerOF CASE 1:t:=textmontag;CASE 2:t:= textdienstag;CASE 3:t:=textmittwoch;CASE 4:t:=textdonnerstag;CASE 5:t:= textfreitag;CASE 6:t:=textsamstag;END SELECT ;tag:=t;ELSE t:=textkeintagFI ;t CAT blank;tCAT text(stundenzaehler,2);tCAT blank;tCAT spaltentrenner;ELSE t:= leereerstespalte;FI ;IF ausgewaehlteuebersichtsart=artsek2THEN IF erstezeilederstundeTHEN anfpos:=1;endpos:=8;lvsprozeit:=datenderzeit(( tagzaehler-1)*letztestdmofr+stundenzaehler,"L");kopplgnprozeit:=datenderzeit( (tagzaehler-1)*letztestdmofr+stundenzaehler,"K");position:=0;WHILE endpos<= length(lvsderjgst)AND positionMOD 8<>1REP aktlv:=subtext(lvsderjgst,anfpos, endpos);position:=pos(lvsprozeit,aktlv);anfposINCR 8;endposINCR 8PER ;IF position<>0THEN aktkopplg:=subtext(kopplgnprozeit,position,position+7); kopplgundlvs:=aktkopplg;anfpos:=1;endpos:=8;position:=pos(kopplgnprozeit, aktkopplg);WHILE endpos<=length(kopplgnprozeit)AND position<>0REP IF position MOD 8=1THEN aktlv:=subtext(lvsprozeit,position,position+7);IF pos( kopplgundlvs,aktlv)=0THEN kopplgundlvsCAT aktlvFI ;anfposINCR 8;endposINCR 8; FI ;position:=pos(kopplgnprozeit,aktkopplg,position+1);PER ;ELSE kopplgundlvs :=niltextFI ;tCAT text(text(kopplgundlvs,laengeeinerkopplung), konstkopplungsbreite);ptraktlv:=laengeeinerkopplung+1;ELSE tCAT konstkopplungsbreite*blankFI ;tCAT spaltentrenner;standardmeldung( meldnrinbearbeitung,"Jahrgangsstufe: "+jgstbez+" Wochentag: "+tag+"#");FI ; aktstd:=(tagzaehler-1)*letztestdmofr+stundenzaehler;FOR spaltenzaehlerFROM 1 UPTO anzahlspaltenREP IF ausgewaehlteuebersichtsart=artsek2THEN IF ptraktlv<= length(kopplgundlvs)THEN lv:=subtext(kopplgundlvs,ptraktlv,ptraktlv+ laengeeinerlv-1);ptraktlvINCR laengeeinerlv;planeintraglesen(aktstd,kennung, lv,lv,rm,par);rm:=8*blank+rm;t1:=subtext(lv,anfposfachinlv,endeposfachinlv); t1CAT blank;t1CAT subtext(lv,anfposkennunginlv);t1CAT trennstrichfuerlv;t1 CAT par;ELSE t1:=niltext;par:=niltext;rm:=niltext;FI ;ELSE planeintraglesen( aktstd,kennung,spaltenueberschrift[spaltenzaehler],lv,rm,par);IF lv=niltext THEN t1:=niltextELSE IF ausgewaehlteuebersichtsart=artsek1THEN IF length(lv)> laengeeinerlvTHEN lv:=text(lv,laengeeinerlv);t1:=datenzurlv("K",lv);rm:= niltext;ELSE t1:=blank;t1CAT subtext(lv,anfposfachinlv,endeposfachinlv);t1 CAT blank;t1CAT par;FI ;rm:=4*blank+rmELSE t1:=text(lv,endeposjgstinlv);t1 CAT blank;t1CAT subtext(lv,anfposfachinlv,endeposfachinlv);t1CAT blank;t1CAT subtext(lv,anfposkennunginlv);FI ;FI ;FI ;tCAT text(t1,varspbreite);tCAT spaltentrenner;IF zweizeiligTHEN IF ausgewaehlteuebersichtsart=artraeumeTHEN zusatzangabe[spaltenzaehler]:=parELSE zusatzangabe[spaltenzaehler]:=rmFI ; zusatzangabe[spaltenzaehler]:=text(zusatzangabe[spaltenzaehler],varspbreite); FI ;PER ;druckzeileschreiben(t);zeilenzaehlerINCR 1;IF zeilenzaehler= drucklaenge(ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler:= zeilebeianfangneueseite;IF zweizeiligCOR tagzaehlerzeilebeianfangneueseiteTHEN seitenwechsel;zeilenzaehler:= zeilebeianfangneueseite;IF tagzaehler zeilebeianfangneueseiteTHEN drucketrennstrich;zeilenzaehlerINCR 1;IF zeilenzaehler=drucklaenge(ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler :=zeilebeianfangneueseite;IF stundenzaehlerlength(listeallerobjekte)THEN tCAT konstkopplungsbreite* blank;tCAT trennstrichfuerlv;tCAT 4*blank;tCAT trennstrichfuerlv;tCAT 4*blank ;tCAT trennstrichfuerlv;tCAT konstkopplungsbreite*blank;tCAT spaltentrenner; ELSE tCAT subtext(listeallerobjekte,ptraktobjekt,ptraktobjekt+laengeeinerlv-1 );tCAT trennstrichfuerlv;ptraktobjektINCR laengeeinerlv;tCAT subtext( stringraeume,ptraktraum,ptraktraum+laengeeinesraumes-1);tCAT trennstrichfuerlv;ptraktraumINCR laengeeinesraumes;tCAT subtext( stringparaphen,ptraktparaphe,ptraktparaphe+laengeeinerparaphe-1);tCAT trennstrichfuerlv;ptraktparapheINCR laengeeinerparaphe;tCAT subtext( stringkopplungen,ptraktkopplung,ptraktkopplung+laengeeinerkopplung-1);tCAT spaltentrenner;ptraktkopplungINCR laengeeinerkopplung;FI ;PER ; druckzeileschreiben(t);zeilenzaehlerINCR 1;evtlseitenumbruchwgueberlaenge; PER .evtlseitenumbruchwgueberlaenge:IF zeilenzaehler=drucklaenge( ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler:=zeilebeianfangneueseite; IF stundenzaehlerniltextTHEN druckkopfschreiben ;druckespaltenueberschriften(spaltenueberschrift);drucketrennstrich;FI ;FI ;. END PROC bereitetabellefuerzeitenauf;END PACKET stdpluebersichten;