PACKET stundenplannachzeitenerfassenDEFINES stundenplannachzeitenspeichern, stundenplannachzeitenzurueckzummenue,stdnraustagstd, stundenplannachzeitenzeigen:LET stdplmaske="ms stdplan nach zeit bearb", feldeingtag=2,feldeingstd=3,feldeingakt=4,laengelv=8,laengeraum=4,trenner="�" ,schuljahr="Schuljahr",halbjahr="Schulhalbjahr",kennungraum="R", kennungparaphe="P",kennunglv="L",kennungzulzeit="ZZ",leerelv=" ", leererraum=" ",leererlehrer=" ",ausgabeparam="#",maxeintraege=60, erstestunde=1,letztestunde=66,stdprotag=12,meldungzeitgesperrt=363, meldungnichtspeichern=63,meldungraumangloeschen=396,meldungraumbesetzt=370, meldungplausi=57,meldungnur60lv=394,meldungspeichern=50,meldungwarten=69, meldungdatenaufbereitet=357,meldungfalschertag=385,meldungfalschestd=54, meldungfalscherraum=359,meldungkeinesugruppen=334,meldungzuvielesugruppen=356 ,meldungnichtlv=360,meldunglehrerbesetzt=361,meldungsugrupbesetzt=362, meldungkeinelv=326,meldungaenderungsfehler=364,meldunguvfehler=403,# meldungstdplanveraltet=377,#meldungserverfehler=376,meldungbasisinkon=378, meldungzuvielelv=358;ROW maxeintraegeTEXT VAR eintragausstdpl;TEXT VAR maskeneintragtag:="",maskeneintragstd:="",gewhj,gewsj,allelv,alleraeume, alleparaphen,uvoklv,lveintrag,raumeintrag,hjsjanhang:="",altereintrag:=""; TEXT VAR alletage:="��01�02�03�04�05�06�1�2�3�4�5�6�MO�DI�MI�DO�FR�SA�"+ "�mo�di�mi�do�fr�sa�Mo�Di�Mi�Do�Fr�Sa�"+ "� 1� 2� 3� 4� 5� 6�1 �2 �3 �4 �5 �6 �",allestden:= "��01�02�03�04�05�06�07�08�09�10�11�12�13� 1� 2� 3�"+ "� 4� 5� 6� 7� 8� 9�1 �2 �3 �4 �5 �6 �7 �8 �9 �"+"1�2�3�4�5�6�7�8�9�";INT VAR i,fstat,abstd:=0,uvokfeld,hjkennalt:=-1,hjkennneu:=0,letztebearbstd:=66; BOOL VAR spok:=TRUE ,uvok:=TRUE ,anzlvok:=TRUE ,stdplzeilegeloescht:=FALSE , aenderungsfehler:=FALSE ;INT PROC stdnraustagstd(TEXT CONST tag,std):INT VAR itag:=int(tag),istd;IF lastconversionokTHEN IF itag=0COR itag=1THEN itag:=1 FI ELSE IF tag="MO"COR tag="mo"COR tag="Mo"COR tag=""THEN itag:=1ELIF tag= "DI"COR tag="di"COR tag="Di"THEN itag:=2ELIF tag="MI"COR tag="mi"COR tag="Mi" THEN itag:=3ELIF tag="DO"COR tag="do"COR tag="Do"THEN itag:=4ELIF tag="FR" COR tag="fr"COR tag="Fr"THEN itag:=5ELSE itag:=6FI FI ;IF std=""THEN istd:=1 ELSE istd:=int(std)FI ;(itag-1)*stdprotag+istdEND PROC stdnraustagstd;PROC stundenplannachzeitenreorganisiertverlassen: stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(1); meldungausgeben(fstat)ELSE enter(2)FI END PROC stundenplannachzeitenreorganisiertverlassen;PROC stundenplannachzeitenzeigen: standardmeldung(meldungwarten," ");maskeneintragtag:=standardmaskenfeld( feldeingtag);maskeneintragstd:=standardmaskenfeld(feldeingstd);abstd:= stdnraustagstd(maskeneintragtag,maskeneintragstd);prueftag;pruefstd;IF akthj <>""THEN hjkennneu:=0ELSE hjkennneu:=1FI ;IF hjkennneu<>hjkennaltTHEN hjkennalt:=hjkennneu;gewsj:=schulkenndatum(schuljahr);gewhj:=schulkenndatum( halbjahr);IF hjkennneu=1THEN geplanteshjundsjberechnen(gewhj,gewsj)FI ; stundenplanhalbjahrsetzen(gewhj,gewsj);ermittleletztestunde;hjsjanhang:=" "+ gewhj+". "+text(gewsj,2)+"/"+subtext(gewsj,3)+", Raum ";holestdplanFI ; pruefzeitzulaessig;stundenplannachzeitenausgeben.akthj:standardmaskenfeld( feldeingakt).holestdplan:standardmeldung(meldungdatenaufbereitet,""); stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN stundenplanbasisundstundenplanerstellen(fstat);IF fstat<>0THEN return(1); meldungausgeben(fstat);LEAVE stundenplannachzeitenzeigenELSE stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN return(1);meldungausgeben(fstat);LEAVE stundenplannachzeitenzeigenFI FI ELIF fstat=8THEN meldungausgeben(fstat)FI .prueftag:IF pos(alletage,trenner+ maskeneintragtag+trenner)=0THEN return(1);infeld(feldeingtag);standardmeldung (meldungfalschertag,"");LEAVE stundenplannachzeitenzeigenFI .pruefstd:IF pos( allestden,trenner+maskeneintragstd+trenner)=0THEN return(1);infeld( feldeingstd);standardmeldung(meldungfalschestd,"");LEAVE stundenplannachzeitenzeigenELIF abstdDIV stdprotag=6THEN IF abstd-60>6THEN return(1);infeld(feldeingstd);standardmeldung(meldungfalschestd,"");LEAVE stundenplannachzeitenzeigenFI ;FI .pruefzeitzulaessig:IF NOT bezeichnungzulaessig(kennungzulzeit,text(abstd))THEN return(1);infeld( feldeingtag);standardmeldung(meldungzeitgesperrt,tagstunde(abstd,FALSE )+"."+ ausgabeparam);LEAVE stundenplannachzeitenzeigenFI .ermittleletztestunde:FOR i FROM letztestundeDOWNTO erstestundeREP IF bezeichnungzulaessig(kennungzulzeit ,text(i))THEN letztebearbstd:=i;LEAVE ermittleletztestundeFI PER .END PROC stundenplannachzeitenzeigen;PROC stundenplannachzeitenausgeben: standardstartproc(stdplmaske);fuellemaske;IF NOT anzlvokTHEN standardmeldung( meldungnur60lv,tagstunde(abstd,TRUE )+ausgabeparam)ELIF NOT uvokTHEN infeld( uvokfeld);standardmeldung(meldunguvfehler," ");FI ;standardnproc.END PROC stundenplannachzeitenausgeben;PROC fuellemaske:TEXT VAR lvimstdplan, raumimstdplan,parimstdplan;INT VAR poslv,posraum,index;stdplzeilegeloescht:= FALSE ;allelv:=datenderzeit(abstd,kennunglv);alleraeume:=datenderzeit(abstd, kennungraum);alleparaphen:=datenderzeit(abstd,kennungparaphe); standardkopfmaskeaktualisieren("Stundenplan für "+tagstunde(abstd,FALSE )+ ". Stunde");uvok:=TRUE ;anzlvok:=TRUE ;uvokfeld:=2;poslv:=1;posraum:=1;IF length(allelv)>maxeintraege*laengelvTHEN allelv:=text(allelv,maxeintraege* laengelv);alleraeume:=text(alleraeume,maxeintraege*laengeraum);anzlvok:= FALSE FI ;FOR iFROM 1UPTO maxeintraegeREP index:=i*2;IF poslv""THEN planeintragvornehmen(abstd,text(eintragausstdpl(i),laengelv),subtext( eintragausstdpl(i),laengelv+1),spok)ELSE LEAVE alteeintraegeschreibenFI PER . loescheinhaltaktstundenplanzeile:stdplzeilegeloescht:=TRUE ;t1:=datenderzeit( abstd,kennunglv);pos:=1;WHILE pos0THEN meldungausgeben(fstat);return(1) ;LEAVE stundenplannachzeitenspeichernFI ;FI .plausipruefungundspeicherung: loescheinhaltaktstundenplanzeile;FOR iFROM 1UPTO maxeintraegeREP infeld(i*2); altereintrag:=eintragausstdpl(i);lveintrag:=standardmaskenfeld(i*2);IF ( lveintragSUB 1)=" "THEN lveintrag:=jgstaufber(text(lveintrag,2))+subtext( lveintrag,3)FI ;lveintrag:=text(lveintrag,laengelv);raumeintrag:=text( standardmaskenfeld(i*2+1),laengeraum);IF lveintrag+raumeintrag<>leerelv+ leererraumTHEN infeld(i*2);pruefelvleerundraum;pruefelvgueltig; prueferaumgueltig;pruefelehrerfrei;prueferaumfrei;pruefesugruppenfrei; planeintragschreibenFI ;PER .pruefelvleerundraum:IF lveintrag=leerelvCAND raumeintrag<>leererraumTHEN standardmeldung(meldungraumangloeschen,"");return (1);LEAVE stundenplannachzeitenspeichernFI .pruefelvgueltig:IF NOT bezeichnungzulaessig(kennunglv,lveintrag)THEN standardmeldung(meldungnichtlv, lveintrag+ausgabeparam);return(1);LEAVE stundenplannachzeitenspeichernFI . prueferaumgueltig:IF raumeintrag<>leererraumTHEN IF NOT bezeichnungzulaessig( kennungraum,raumeintrag)THEN standardmeldung(meldungfalscherraum,"");infeld(i *2+1);return(1);LEAVE stundenplannachzeitenspeichernFI FI .pruefelehrerfrei: par:=datenzurlv(kennungparaphe,lveintrag);IF par<>leererlehrerTHEN IF lehrerunterrichtTHEN standardmeldung(meldunglehrerbesetzt,par+ausgabeparam); return(1);LEAVE stundenplannachzeitenspeichernFI FI .lehrerunterricht:lv:= geplantelvfuer(abstd,kennungparaphe,par);lv<>lveintragCAND lv<>"". prueferaumfrei:IF raumeintrag<>leererraumTHEN IF inraumunterrichtTHEN standardmeldung(meldungraumbesetzt,"");infeld(i*2+1);return(1);LEAVE stundenplannachzeitenspeichernFI FI .inraumunterricht:t1:=geplantelvfuer( abstd,kennungraum,raumeintrag);t1<>lveintragCAND t1<>"".pruefesugruppenfrei: IF sugruppenichtunterrichtsfreiTHEN standardmeldung(meldungsugrupbesetzt,t1+ ausgabeparam);return(1);LEAVE stundenplannachzeitenspeichernFI . sugruppenichtunterrichtsfrei:schuelergruppenschnittbeizeit(abstd,kennunglv, lveintrag,text(altereintrag,8),t1,t2).planeintragschreiben: planeintragvornehmen(abstd,lveintrag,raumeintrag,spok);IF NOT spokTHEN aenderungsfehler:=TRUE FI .END PROC stundenplannachzeitenspeichern;PROC stundenplannachzeitenzurueckzummenue:INT VAR pos;TEXT VAR t1;standardmeldung( meldungnichtspeichern,"");IF stdplzeilegeloeschtTHEN alteeintraegeschreiben FI ;stundenplanreorganisierenundsichern(fstat);enter(2). alteeintraegeschreiben:loescheinhaltaktstundenplanzeile;FOR iFROM 1UPTO maxeintraegeREP IF eintragausstdpl(i)<>""THEN planeintragvornehmen(abstd,text (eintragausstdpl(i),laengelv),subtext(eintragausstdpl(i),laengelv+1),spok) ELSE LEAVE alteeintraegeschreibenFI PER .loescheinhaltaktstundenplanzeile:t1 :=datenderzeit(abstd,kennunglv);pos:=1;WHILE pos