PACKET stundenplanakthalbjuebernehmenDEFINES stundenplanuebernehmenpruefen, stundenplanuebernehmen:LET feldjgst1=2,feldjgst2=3,maxanzfehler=500,laengelv= 8,schuljahr="Schuljahr",halbjahr="Schulhalbjahr",schulname="Schulname", schulort="Schulort",kennungraum="R",kennungparaphe="P",kennunglv="L",allejgst ="00050607080910111213",leererraum=" ",ausgabeparam="#",erstestd=1, letztestd=66,dateiname="Protokoll zur Stundenplan-Übernahme",zwdatei= "Zwischenspeicherung",lvungueltig="Lehrveranstaltung nicht geplant", raumungueltig1="Raumbezeichnung ",raumungueltig2=" ungültig",ohneraum= " (Übernahme ohne Raum)",schnittschueler="Zeitüberschneidung Schüler durch ", schnittlehrer="Zeitüberschneidung Lehrer durch",schnittraum= "Zeitüberschneidung Raum ",leerzeile=" ",ueberschrift1= "Stundenplan für Jgst. ",ueberschrift2=" übernehmen von ",ueberschrift3= " nach ",meldungwirklichuebern=300,meldungfalschejgst=305,meldungabbruch=400, meldungbearbwird=352,meldungplausi=57,meldungwarten=69,meldungkeinesugruppen= 334,meldungzuvielesugruppen=356,meldungkeinelv=326,meldungserverfehler=376, meldungbasisinkon=378,meldungjgst13=402,meldungzuvielelv=358;TEXT VAR aktsj, akthj,geplsj,geplhj,jgst1,jgst2,allelvderzeit,alleraeumederzeit,eintrag, aktzubearbjgst,geplzubearbjgst;INT VAR i,j,fstat,jg1,jg2,jgstpos,anzbearbjgst ,zz:=0;BOOL VAR geplstundenplanneu:=FALSE ,jgstumzusetzen:=FALSE , erstereintrag:=TRUE ;FILE VAR datei,z;PROC stundenplanreorganisiertverlassen: stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(2); meldungausgeben(fstat)FI END PROC stundenplanreorganisiertverlassen;PROC stundenplanuebernehmenpruefen:standardmeldung(meldungwarten," "); holestartdaten;jgst1:=standardmaskenfeld(feldjgst1);jgst2:=standardmaskenfeld (feldjgst2);pruefeingaben;gibmeldunguebernahmeaus;standardnproc. holestartdaten:aktsj:=schulkenndatum(schuljahr);akthj:=schulkenndatum( halbjahr);geplsj:=aktsj;geplhj:=akthj;geplanteshjundsjberechnen(geplhj,geplsj ).pruefeingaben:standardmeldung(meldungplausi,"");IF jgstrichtig(jgst1,jg1,1) THEN IF NOT jgstrichtig(jgst2,jg2,2)THEN infeld(feldjgst2); fehlermeldungfalschejgstFI ELSE infeld(feldjgst1);fehlermeldungfalschejgstFI ;IF jgst1=jgst2THEN aktzubearbjgst:=jgst1;ELSE aktzubearbjgst:=subtext( allejgst,pos(allejgst,jgst1),pos(allejgst,jgst2)+1)FI ;anzbearbjgst:=length( aktzubearbjgst)DIV 2;IF geplhj="2"THEN geplzubearbjgst:=aktzubearbjgstELIF jgst1="13"THEN infeld(feldjgst1);fehlermeldungfalscherwertELIF jgst2="13" THEN infeld(feldjgst2);fehlermeldungfalscherwertELSE jgstumzusetzen:=TRUE ; berechnegeplzubearbjgstFI .fehlermeldungfalschejgst:standardmeldung( meldungfalschejgst,"");return(1);LEAVE stundenplanuebernehmenpruefen. fehlermeldungfalscherwert:standardmeldung(meldungjgst13,"");return(1);LEAVE stundenplanuebernehmenpruefen.gibmeldunguebernahmeaus:standardmeldung( meldungwirklichuebern,"").END PROC stundenplanuebernehmenpruefen;PROC berechnegeplzubearbjgst:TEXT VAR jg;jgstpos:=1;geplzubearbjgst:="";FOR iFROM 1UPTO anzbearbjgstREP jg:=subtext(aktzubearbjgst,jgstpos,jgstpos+1);IF jg= "00"THEN geplzubearbjgstCAT "00"ELSE geplzubearbjgstCAT jgstaufber(text(int( jg)+1))FI ;jgstposINCR 2PER END PROC berechnegeplzubearbjgst;BOOL PROC jgstrichtig(TEXT VAR jgst,INT VAR jg,INT CONST pruefung):IF jgst<>""THEN jg:= int(jgst);IF jg=0CAND lastconversionokTHEN jgst:="00";TRUE ELIF lastconversionokTHEN IF jg>4CAND jg<14THEN jgst:=jgstaufber(jgst);TRUE ELSE FALSE FI ELSE FALSE FI ELIF pruefung=1THEN jgst:="05";jg:=5;TRUE ELIF pruefung=2THEN jgst:=jgst1;jg:=jg1;TRUE ELSE FALSE FI .END PROC jgstrichtig; PROC stundenplanuebernehmen(BOOL CONST uebernahme):TEXT VAR ueberschrift:=""; IF uebernahmeTHEN standardmeldung(meldungbearbwird,"Stundenplan "+akthj+". "+ text(aktsj,2)+"/"+subtext(aktsj,3)+ausgabeparam);stundenplanhalbjahrsetzen( akthj,aktsj);stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat <>8THEN meldungausgeben(fstat);return(2);LEAVE stundenplanuebernehmenFI ; forget(dateiname,quiet);datei:=sequentialfile(output,dateiname);ueberschrift :=ueberschrift1+jgst1;IF jgst1<>jgst2THEN ueberschriftCAT " bis "+jgst2FI ; ueberschriftCAT ueberschrift2;ueberschriftCAT akthj+". ";ueberschriftCAT text (aktsj,2)+"/";ueberschriftCAT subtext(aktsj,3);ueberschriftCAT ueberschrift3; ueberschriftCAT geplhj+". ";ueberschriftCAT text(geplsj,2)+"/";ueberschrift CAT subtext(geplsj,3);putline(datei,schulkenndatum(schulname));putline(datei, text(schulkenndatum(schulort),65)+date);putline(datei,leerzeile);putline( datei,ueberschrift);putline(datei,length(ueberschrift)*"-");holalleeintraege; fstat:=0;loeschealleeintraege;IF fstat<>0CAND fstat<>8THEN meldungausgeben( fstat);return(2);LEAVE stundenplanuebernehmenFI ;uebertragalleeintraege; stundenplanreorganisiertverlassen;IF zz>maxanzfehlerTHEN standardmeldung( meldungabbruch,text(zz)+ausgabeparam)ELIF zz=0THEN eintragkeineuebernahmefehlerFI ;IF fstat=0THEN zeigedatei(dateiname,"vr");FI ELSE return(2)FI .eintragkeineuebernahmefehler:putline(datei,leerzeile); putline(datei,"Bei der Übernahme traten keine Fehler auf!").END PROC stundenplanuebernehmen;PROC loeschealleeintraege:INT VAR jgstpos:=1; geplstundenplanneu:=FALSE ;stundenplanhalbjahrsetzen(geplhj,geplsj); standardmeldung(meldungbearbwird,"Stundenplan "+geplhj+". "+text(geplsj,2)+ "/"+subtext(geplsj,3)+ausgabeparam);stundenplanbasisundstundenplanholen(fstat );IF fstat<>0CAND fstat<>8THEN stundenplanbasisundstundenplanerstellen(fstat) ;IF fstat<>0THEN LEAVE loeschealleeintraegeELSE geplstundenplanneu:=TRUE ; stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN meldungausgeben(fstat);return(2);LEAVE loeschealleeintraegeFI FI FI ;IF geplstundenplanneuTHEN LEAVE loeschealleeintraegeFI ;FOR iFROM erstestdUPTO letztestdREP standardmeldung(meldungbearbwird,tagstunde(i,FALSE )+ " (Einträge löschen)"+ausgabeparam);allelvderzeit:=datenderzeit(i,kennunglv); jgstpos:=1;FOR jFROM 1UPTO anzbearbjgstREP loeschelv(subtext(geplzubearbjgst, jgstpos,jgstpos+1));jgstposINCR 2PER PER .END PROC loeschealleeintraege;PROC loeschelv(TEXT CONST jgst):INT VAR suchab:=1,aktpos;BOOL VAR spok:=TRUE ; WHILE pos(allelvderzeit,jgst,suchab)>0REP aktpos:=pos(allelvderzeit,jgst, suchab);IF aktposMOD laengelv=1THEN planeintragloeschen(i,subtext( allelvderzeit,aktpos,aktpos+7),spok)FI ;suchab:=aktpos+7PER .END PROC loeschelv;PROC holalleeintraege:forget(zwdatei,quiet);z:=sequentialfile( output,zwdatei);FOR iFROM erstestdUPTO letztestdREP standardmeldung( meldungbearbwird,tagstunde(i,FALSE )+" (Einträge holen)"+ausgabeparam); allelvderzeit:=datenderzeit(i,kennunglv);alleraeumederzeit:=datenderzeit(i, kennungraum);jgstpos:=1;eintrag:="";FOR jFROM 1UPTO anzbearbjgstREP holelv( subtext(aktzubearbjgst,jgstpos,jgstpos+1));jgstposINCR 2PER ;putline(z, eintrag)PER .END PROC holalleeintraege;PROC holelv(TEXT CONST jgst):INT VAR suchab:=1,aktpos,ii;TEXT VAR lveintrag;WHILE pos(allelvderzeit,jgst,suchab)>0 REP aktpos:=pos(allelvderzeit,jgst,suchab);IF aktposMOD laengelv=1THEN ii:=( aktpos+1)DIV 2;IF jgstumzusetzenTHEN lveintrag:=lv;IF text(lveintrag,2)<>"00" THEN eintragCAT jgstaufber(text(int(text(lveintrag,2))+1));eintragCAT subtext (lveintrag,3);ELSE eintragCAT lvFI ;eintragCAT raumELSE eintragCAT lv+raumFI FI ;suchab:=aktpos+7PER .lv:subtext(allelvderzeit,aktpos,aktpos+7).raum: subtext(alleraeumederzeit,ii,ii+3).END PROC holelv;PROC uebertragalleeintraege:zz:=0;modify(z);toline(z,1);col(z,1);FOR iFROM erstestdUPTO letztestdREP standardmeldung(meldungbearbwird,tagstunde(i,FALSE )+" (Einträge übernehmen)"+ausgabeparam);readrecord(z,eintrag);IF eintrag<>"" THEN erstereintrag:=TRUE ;schreibeintraegeFI ;down(z);IF zz>maxanzfehlerTHEN putline(datei,leerzeile);putline(datei, "Abbruch, da bei der Übernahme zuviele Fehler auftraten!");LEAVE uebertragalleeintraegeFI PER END PROC uebertragalleeintraege;PROC schreibeintraege:TEXT VAR lv,raum,t1,t2;INT VAR lvpos:=1;BOOL VAR ohnefehler; WHILE lvposlv CAND t2<>"".pruefraumundschnitt:IF raum<>leererraumTHEN IF NOT bezeichnungzulaessig(kennungraum,raum)THEN IF erstereintragTHEN putline(datei ,leerzeile);erstereintrag:=FALSE FI ;putline(datei,jgfake(lv)+": "+tagstunde( i,TRUE )+". : "+raumungueltig1+raum+raumungueltig2+ohneraum);zzINCR 1;raum:= leererraumELIF raumunterrichtTHEN IF erstereintragTHEN putline(datei, leerzeile);erstereintrag:=FALSE FI ;putline(datei,jgfake(lv)+": "+tagstunde(i ,TRUE )+". : "+schnittraum+raum+ohneraum);zzINCR 1;raum:=leererraumFI FI . raumunterricht:t1:=geplantelvfuer(i,kennungraum,raum);t1<>lvCAND t1<>"".END PROC schreibeintraege;TEXT PROC jgfake(TEXT CONST lv):text(lv,2)+" "+subtext( lv,3,4)+" "+subtext(lv,5)END PROC jgfake;PROC meldungausgeben(INT VAR fstat): IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN standardmeldung( meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung(meldungkeinelv,"" )ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgebenFI END PROC meldungausgeben;END PACKET stundenplanakthalbjuebernehmen;