PACKET einzelstdplraeumeDEFINES einzelstdplraeumeeingang, einzelstdplraeumestarten,einzelstdplraeumesonderwerte, einzelstdplraeumemultistop,einzelstdplraeumedruckdateibauen:LET maske= "ms einzelstdpl raeume eingang",fnr2raum=2,fnr3akthj=3,fnr4ausgabebs=4, fnr5ausgabedr=5,blank=" ",null=0,niltext="", fehlermeldnrkeinestundenplandatenvorhanden=366,fehlermeldnrungueltigerraum= 359,fehlermeldnrauswahlunsinnig=56,fehlermeldnrbestandraeumeleer=365, meldnrbittewarten=69,swraum=511,swschuljahr=512,swhalbjahr=513,swraumlangtext =514,swtagesstunde=520,maxzeichenimvordruck=79;TASK VAR vordruckserver;TEXT CONST dateimitvordruck1:="vordruck1 einzelstdpl raeume",dateimitvordruck2:= "vordruck2 einzelstdpl raeume",bestandnameraeume:="c02 raeume",strich:="-", kreuz:="+",abschlusslinie:=76*strich+blank,normaletrennlinie:=3*strich+kreuz+ 5*(11*strich+kreuz)+11*strich+": ";TEXT VAR hj,sj,raum:="",l:="",r:="",p:=""; BOOL VAR anschreibenaufbszeigen:=TRUE ,einzelanschreiben:=TRUE , aktuelleshjgewaehlt:=TRUE ;INT VAR eingabestatus,i,x,fehlermeldnr;INT CONST aktuellerindex:=dnrschluessel,maxwochstdn:=66,erstestd:=1,letztestd:=12;PROC einzelstdplraeumeeingang:standardvproc(maske)END PROC einzelstdplraeumeeingang;PROC einzelstdplraeumestarten:IF maskenwerteokTHEN IF stundenplanokTHEN startenausfuehrenELSE fehlermeldnr:= fehlermeldnrkeinestundenplandatenvorhanden;meldedenfehler;zurueckzumdialog; FI ;ELSE meldedenfehler;zurueckzumdialogFI ;.meldedenfehler:standardmeldung( fehlermeldnr,niltext).zurueckzumdialog:return(1).startenausfuehren: vordruckserver:=/"anschreiben server";forget(dateimitvordruck1,quiet);forget( dateimitvordruck2,quiet);fetch(dateimitvordruck1,vordruckserver);fetch( dateimitvordruck2,vordruckserver);inittupel(dnrschluessel);putwert( fnrschlsachgebiet,bestandnameraeume);putwert(fnrschlschluessel,raum); standardmeldung(meldnrbittewarten,niltext);zusammengesetztesanschreiben( aktuellerindex,anschreibenaufbszeigen,einzelanschreiben,BOOL PROC einzelstdplraeumesonderwerte,BOOL PROC einzelstdplraeumemultistop,TEXT PROC einzelstdplraeumedruckdateibauen);END PROC einzelstdplraeumestarten;BOOL PROC stundenplanok:stundenplanhalbjahrsetzen(hj,sj); stundenplanbasisundstundenplanholen(eingabestatus);eingabestatus=0OR eingabestatus=8END PROC stundenplanok;BOOL PROC maskenwerteok:BOOL VAR ok; standardpruefe(5,fnr4ausgabebs,fnr5ausgabedr,null,niltext,eingabestatus);IF eingabestatus<>0THEN fehlermeldnr:=fehlermeldnrauswahlunsinnig;infeld( fnr4ausgabebs);ok:=FALSE ELSE anschreibenaufbszeigen:=standardmaskenfeld( fnr5ausgabedr)=niltext;einzelanschreiben:=standardmaskenfeld(fnr2raum)<> niltext;aktuelleshjgewaehlt:=standardmaskenfeld(fnr3akthj)<>niltext;sj:= schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr");IF NOT ( aktuelleshjgewaehlt)THEN geplanteshjundsjberechnen(hj,sj)FI ;IF einzelanschreibenTHEN IF gueltigerraumTHEN ok:=TRUE ELSE fehlermeldnr:= fehlermeldnrungueltigerraum;ok:=FALSE FI ;ELSE IF schluesselbestandleerTHEN fehlermeldnr:=fehlermeldnrbestandraeumeleer;infeld(fnr2raum);ok:=FALSE ELSE raum:=wert(fnrschlschluessel);ok:=TRUE FI ;FI ;FI ;okEND PROC maskenwerteok; BOOL PROC gueltigerraum:raum:=standardmaskenfeld(fnr2raum);inittupel( dnrschluessel);putwert(fnrschlsachgebiet,bestandnameraeume);putwert( fnrschlschluessel,raum);search(dnrschluessel,TRUE );dbstatus=0END PROC gueltigerraum;BOOL PROC schluesselbestandleer:inittupel(dnrschluessel); putwert(fnrschlsachgebiet,bestandnameraeume);search(dnrschluessel);raum:=wert (fnrschlschluessel);dbstatus<>0COR wert(fnrschlsachgebiet)<>bestandnameraeume END PROC schluesselbestandleer;BOOL PROC einzelstdplraeumesonderwerte: initialisieresonderwerte;adressat(raum);setzesonderwert(swschuljahr,subtext( sj,1,2)+"/"+subtext(sj,3,4));setzesonderwert(swhalbjahr,hj);setzesonderwert( swraum,wert(fnrschlschluessel));setzesonderwert(swraumlangtext,wert( fnrschllangtext));TRUE END PROC einzelstdplraeumesonderwerte;BOOL PROC einzelstdplraeumemultistop:BOOL VAR b;IF einzelanschreibenTHEN b:=wert( fnrschlschluessel)=raumELSE b:=wert(fnrschlsachgebiet)=bestandnameraeumeFI ;b ENDPROC einzelstdplraeumemultistop;TEXT PROC einzelstdplraeumedruckdateibauen :LET stddruckdatei="liste.1",hilfsdatei="hilfsdatei";FILE VAR f;TEXT VAR zeile:="",druckdatei:="Raumplan";forget(druckdatei,quiet);druckvorbereiten; setzeanzahlderzeichenprozeile(maxzeichenimvordruck);raum:=wert( fnrschlschluessel);datendeserstenvordrucksindruckdatei;FOR xFROM erstestd UPTO letztestdREP datendeszweitenvordrucksindruckdateiPER ;rename( stddruckdatei,druckdatei);f:=sequentialfile(modify,druckdatei);toline(f,1); input(f);druckdatei.datendeserstenvordrucksindruckdatei:briefalternative( dateimitvordruck1,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei); forget(hilfsdatei,quiet);.datendeszweitenvordrucksindruckdatei: setzesonderwert(swtagesstunde,text(x,2)); planeintraegeprowochenstdenlesenundsonderwertesetzen(x);briefalternative( dateimitvordruck2,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei); IF x<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:=abschlusslinieFI ; druckzeileschreiben(zeile);forget(hilfsdatei,quiet);END PROC einzelstdplraeumedruckdateibauen;PROC zeilenweisehilfsdateiindruckdatei(TEXT CONST hilfsdatei):TEXT VAR zeile:=niltext;FILE VAR f;f:=sequentialfile(input, hilfsdatei);FOR iFROM 1UPTO lines(f)REP getline(f,zeile);druckzeileschreiben( zeile)PER ;END PROC zeilenweisehilfsdateiindruckdatei;PROC planeintraegeprowochenstdenlesenundsonderwertesetzen(INT CONST std):INT VAR wochenstd:=std,sonderwert:=521;TEXT VAR ausgabe;WHILE wochenstd<=maxwochstdn REP planeintraglesen(wochenstd,"R",raum,l,r,p);IF r<>""THEN ausgabe:=subtext( l,1,2);ausgabeCAT blank;ausgabeCAT subtext(l,3,4);ausgabeCAT blank;ausgabe CAT subtext(l,5,8);setzesonderwert(sonderwert,ausgabe);setzesonderwert( sonderwert+6,p);ELSE setzesonderwert(sonderwert,blank);setzesonderwert( sonderwert+6,blank);FI ;ausgabe:=niltext;sonderwertINCR 1;wochenstdINCR 12; PER ;END PROC planeintraegeprowochenstdenlesenundsonderwertesetzen;END PACKET einzelstdplraeume;