summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen
diff options
context:
space:
mode:
Diffstat (limited to 'app/schulis/2.2.1/src/4.stundenplan im dialog erstellen')
-rw-r--r--app/schulis/2.2.1/src/4.stundenplan im dialog erstellen382
1 files changed, 382 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen b/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen
new file mode 100644
index 0000000..634545c
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen
@@ -0,0 +1,382 @@
+PACKET stundenplanimdialogerstellenundaendernDEFINES stupidstart,
+stupidbearbeitendesstundenplans,stupidspeicherndieserzeitenfuerkopplung,
+stupidspeichernderraeumeundzeitenderlv,stupidkopierenderraumangabe,
+stupidnichtaendernweitermitkopplung,
+stupidnichtaendernweitermitnaechsterkopplung,stupidstoerendelvlisten,
+stupidraumbelegunglisten,stupidlistedrucken:LET maskeeingang=
+"ms erf stuplan im dialog 0";LET maskebearb1="ms erf stuplan im dialog 1";
+LET maskebearb2="ms erf stuplan im dialog 2";LET fnrkopplungbs0=2,
+fnrakthalbjahr=3,fnrmitzeitwuenschen=4,fnrkopplungbs1=2,fnrwstdmaxbs1=3,
+felderbistabbeginn=2,fnrersteseingabefeldbs1=4,felderproeintragbs1=2,
+fnrletztesfeldbs1=135,fnrlehrveranstaltbs2=2,fnrwstdbs2=3,fnrparaphebs2=4,
+fnrklassengruppenbeginn=5,fnrraumwunsch=9,felderbistabbeginnbs2=10,
+fnrersterraumbs2=12,fnrletztesfeldbs2=142,felderproeintragbs2=2;INT VAR
+fnrersteseingabefeldbs2;INT VAR ifnr;LET meldnrbittewarten=69,
+meldnrdatenwurdengespeichert=302,meldnrdatenwurdennichtgespeichert=303,
+meldnrungueltigekopplung=325,meldnrkeinelv=326,meldnrkeinesugruppen=334,
+meldnrzuvielesugruppen=356,meldnrdatenaufbereitet=357,meldnrzuvielelv=358,
+meldnrungueltigerraum=359,meldnrzuordnungwegensperrungunmoegl=368,
+meldnrzuvielezuordnungen=369,meldnrraumschonbelegt=370,
+meldnrstundenplanserverfehlt=376,meldnrbasisalt=377,meldnrbasisinkons=378,
+meldnrkeinestoerendenlv=371;FILE VAR ausgabeliste;LET liste1=
+"störende Lehrveranstaltungen",liste2="Raumbelegungen";TEXT VAR zeigdatei;
+LET raumgruppendatei="Datei mit Raumgruppen";FILE VAR datraumgruppen;LET
+wunschraumdatei="Datei mit Raumwünschen";FILE VAR datraumwunsch;LET
+zwdateiname="Datei mit Zeitwünschen";FILE VAR zwdatei;LET laengelv=8,
+laengefachkenn=6,laengekopplung=8,laengeparaphe=4,laengeraum=4,laengewstd=2,
+laengesugruppe=6,laengeklagruppe=4,laengenfaktor=2;LET erstestd=1,letztestd=
+66;LET kennzlehrergesperrt="L",kennzzeitgesperrt="X",kennzraumgesperrt="R",
+kennzschuelergesperrt="S",kennzzeitrastersperrung="x",kennzlehrerwunsch="l",
+kennzraumevtlgesperrt="r",kennzverplant="x",kennzkeinfreierwunschraum="x",
+kennzraumungeprueft="-";LET kennungkopplung="K",kennungparaphe="P",kennunglv=
+"L",kennungraum="R",kennungwunschraum="RW",kennungersatzraum="RE";LET
+stundeverplant="1",stundefrei="0",stundefehlerhaft="$";LET textschulj=
+"Schuljahr",texthalbj="Schulhalbjahr";LET raumkenndaten="c02 raeume";LET
+posraeumeinrgzeile=5;LET raumplatzhalter=" ",lehrerplatzhalter=" ",
+blankzeichen=" ",trennstrich="/",vorschlagzeichen="*",textueberschriftanhang=
+" für Halbjahr ",textueberschriftbs2="Raumzuordnung in Kopplung ";LET zwbezug
+="P";LET minusdrei="-3";INT VAR fstatusstuplan;INT VAR i;INT VAR
+maxwochenstunden;TEXT VAR aktschulj:="",akthalbj:="",gewschulj,gewhalbj,
+behandeltesschulj:="",behandelteshalbj:="";TEXT VAR kopplung,ankreuzung,
+eintrag,lv,paraphe,raum,raumhinweis,raumzeile,raumgruppenzeile,zwdateizeile,
+raumbelegliste,raumsetzliste,alleraeume:="",paraphenmitzeitwuenschen:="",
+sugruppen;INT VAR anzahlraeume,posraum;INT VAR wstdderlv;TEXT VAR
+kopplungszeiten,schuelerschnittzeiten,zeitrasterleiste:="",
+halbjderzeitrasterleiste:="",zeitwunschleiste,halbjderzeitwuensche:="",
+lvliste,paraphenliste;INT VAR ilv,anzahllv;TEXT VAR suchlv,suchraum,
+suchparaphe;TEXT VAR ueberschrift,ueberschriftbs1:="";BOOL VAR
+mitzeitwuenschen,meldungzufehlergezeigt;TEXT VAR wertfeld2:="",wertfeld3:="",
+wertfeld4:="";PROC stupidstart:standardstartproc(maskeeingang);
+wertedeseingangsbildschirmsholen;infeld(fnrkopplungbs0);
+standardfelderausgeben;infeld(fnrkopplungbs0);standardnprocEND PROC
+stupidstart;PROC stupidbearbeitendesstundenplans:
+schulhalbjahrbestimmenundstundenplanholen;IF fstatusstuplan<>0THEN
+stundenplanfehlerbehandeln;return(1)ELSE suchekopplung;IF
+keinegueltigekopplungTHEN standardmeldung(meldnrungueltigekopplung,"");return
+(1)ELSE wertedeseingangsbildschirmsmerken;standardstartproc(maskebearb1);
+kopplungzeigen;standardnprocFI FI .schulhalbjahrbestimmenundstundenplanholen:
+IF akthalbj=""THEN akthalbj:=schulkenndatum(texthalbj);aktschulj:=
+schulkenndatum(textschulj);FI ;gewhalbj:=akthalbj;gewschulj:=aktschulj;IF
+standardmaskenfeld(fnrakthalbjahr)=""THEN geplanteshjundsjberechnen(gewhalbj,
+gewschulj)FI ;mitzeitwuenschen:=standardmaskenfeld(fnrmitzeitwuenschen)<>"";
+IF mitzeitwuenschenTHEN IF paraphenmitzeitwuenschen=""COR gewhalbj<>
+halbjderzeitwuenscheTHEN halbjderzeitwuensche:=gewhalbj;standardmeldung(
+meldnrbittewarten,"");dateimitzeitwuenschenzusammenstellenFI FI ;IF NOT (
+gewhalbj=behandelteshalbjAND gewschulj=behandeltesschulj)THEN
+behandelteshalbj:=gewhalbj;behandeltesschulj:=gewschulj;
+stundenplanhalbjahrsetzen(gewhalbj,gewschulj);standardmeldung(
+meldnrdatenaufbereitet,"");stundenplanbasisundstundenplanholen(fstatusstuplan
+);IF fstatusstuplan=0THEN stundenplanreorganisierenundsichern(fstatusstuplan)
+ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt,"");
+stundenplanreorganisierenundsichern(fstatusstuplan)ELSE
+stundenplanbasisundstundenplanerstellen(fstatusstuplan);IF fstatusstuplan=0
+THEN stundenplanbasissichern(fstatusstuplan);stundenplansichern(
+fstatusstuplan)FI FI FI .stundenplanfehlerbehandeln:IF fstatusstuplan=2THEN
+standardmeldung(meldnrstundenplanserverfehlt,"")ELIF fstatusstuplan=4THEN
+standardmeldung(meldnrkeinesugruppen,"")ELIF fstatusstuplan=5THEN
+standardmeldung(meldnrzuvielesugruppen,"")ELIF fstatusstuplan=6THEN
+standardmeldung(meldnrkeinelv,"")ELIF fstatusstuplan=7THEN standardmeldung(
+meldnrzuvielelv,"")ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt,
+"")ELIF fstatusstuplan=9THEN standardmeldung(meldnrbasisinkons,"")FI .
+suchekopplung:kopplung:=standardmaskenfeld(fnrkopplungbs0);putwert(fnrlvsj,
+gewschulj);putwert(fnrlvhj,gewhalbj);putwert(fnrlvkopplung,kopplung);search(
+ixlvsjhjkopp,FALSE ).END PROC stupidbearbeitendesstundenplans;BOOL PROC
+keinegueltigekopplung:dbstatus<>0OR wert(fnrlvhj)<>gewhalbjOR wert(fnrlvsj)<>
+gewschuljEND PROC keinegueltigekopplung;PROC
+dateimitzeitwuenschenzusammenstellen:forget(zwdateiname,quiet);zwdatei:=
+sequentialfile(output,zwdateiname);paraphenmitzeitwuenschen:="";inittupel(
+dnrzeitwuensche);putwert(fnrzwbezug,zwbezug);statleseschleife(dnrzeitwuensche
+,gewschulj,gewhalbj,fnrzwsj,fnrzwhj,PROC zeitwunschlesen)END PROC
+dateimitzeitwuenschenzusammenstellen;PROC zeitwunschlesen(BOOL VAR b):IF
+dbstatus<>0OR wert(fnrzwsj)<>gewschuljOR wert(fnrzwhj)<>gewhalbjOR wert(
+fnrzwbezug)>zwbezugTHEN b:=TRUE ELSE paraphenmitzeitwuenschenCAT text(wert(
+fnrzwbezugsobjekt),laengeparaphe);zwdateizeile:=wert(fnrzwbestimmtewuensche);
+putline(zwdatei,zwdateizeile)FI END PROC zeitwunschlesen;PROC kopplungzeigen:
+ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift);
+standardmeldung(meldnrbittewarten,"");datenbestimmenundausgeben;infeld(
+fnrersteseingabefeldbs1).ueberschriftzeilezusammensetzen:IF ueberschriftbs1=
+""THEN ueberschriftbs1:=text(vergleichsknoten)FI ;ueberschrift:=
+ueberschriftbs1;ueberschriftCAT textueberschriftanhang;ueberschriftCAT
+gewhalbj;ueberschriftCAT blankzeichen;ueberschriftCAT subtext(gewschulj,1,2);
+ueberschriftCAT trennstrich;ueberschriftCAT subtext(gewschulj,3,4).
+datenbestimmenundausgeben:kopplung:=wert(fnrlvkopplung);
+maxwochenstundenbestimmen;zeitrasterleistefestlegen;kopplungszeitenfestlegen;
+lvlisteholen;paraphenlisteundwunschraumlisteholen;schuelerschnittzeitenholen;
+zeitwunschleistefestlegen;standardmaskenfeld(kopplung,fnrkopplungbs1);
+standardmaskenfeld(text(maxwochenstunden),fnrwstdmaxbs1);
+meldungzufehlergezeigt:=FALSE ;FOR iFROM erstestdUPTO letztestdREP
+fuelleeintrag;standardmaskenfeld(ankreuzung,i*felderproeintragbs1+
+felderbistabbeginn);standardmaskenfeld(text(eintrag,3),i*felderproeintragbs1+
+felderbistabbeginn+1);PER ;IF meldungzufehlergezeigtTHEN infeld(2)ELSE infeld
+(1)FI ;standardfelderausgeben.maxwochenstundenbestimmen:maxwochenstunden:=0;
+putwert(fnrlvkopplung,kopplung);putintwert(fnrlvjgst,0);statleseschleife(
+ixlvsjhjkopp,gewschulj,gewhalbj,fnrlvsj,fnrlvhj,PROC maxwochenstdberechnen).
+fuelleeintrag:IF (kopplungszeitenSUB i)=stundeverplantTHEN ankreuzung:=
+kennzverplantELSE ankreuzung:=""FI ;eintrag:="";IF (zeitrasterleisteSUB i)=
+kennzzeitrastersperrungTHEN eintragCAT kennzzeitgesperrtELSE
+weiterepruefungenzueintragFI .weiterepruefungenzueintrag:IF
+istlehrerzurzeitverplantTHEN eintragCAT kennzlehrergesperrtELSE IF
+mitzeitwuenschenCAND (zeitwunschleisteSUB i)=stundeverplantTHEN eintragCAT
+kennzlehrerwunschFI FI ;IF (schuelerschnittzeitenSUB i)=stundeverplantTHEN
+eintragCAT kennzschuelergesperrtELIF (schuelerschnittzeitenSUB i)=
+stundefehlerhaftCAND NOT meldungzufehlergezeigtTHEN standardmeldung(
+meldnrbasisinkons,"");meldungzufehlergezeigt:=TRUE FI ;IF eintrag=
+kennzlehrergesperrt+kennzschuelergesperrtTHEN eintragCAT kennzraumungeprueft
+ELSE raumhinweis:="";prueferaumbelegung;eintragCAT raumhinweisFI .
+kopplungszeitenfestlegen:kopplungszeiten:=allezeitenvon(kennungkopplung,
+kopplung).lvlisteholen:lvliste:=allelvmit(kennungkopplung,kopplung);anzahllv
+:=length(lvliste)DIV laengelv.schuelerschnittzeitenholen:
+schuelerschnittzeiten:=schuelergruppenschnittallezeiten(kennungkopplung,
+kopplung).paraphenlisteundwunschraumlisteholen:paraphenliste:="";
+raumgruppeninraumgruppendateiauslesen;forget(wunschraumdatei,quiet);
+datraumwunsch:=sequentialfile(output,wunschraumdatei);INT VAR lvpos:=1,iraum;
+FOR ilvFROM 1UPTO anzahllvREP lv:=subtext(lvliste,lvpos,lvpos+laengelv-1);
+paraphenlisteCAT datenzurlv(kennungparaphe,lv);raumzeile:="";raum:=datenzurlv
+(kennungwunschraum,lv);IF bezeichnungzulaessig(kennungraum,compress(raum))
+THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;raum:=
+datenzurlv(kennungersatzraum,lv);IF bezeichnungzulaessig(kennungraum,compress
+(raum))THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;putline
+(datraumwunsch,raumzeile);lvpos:=lvpos+laengelvPER .
+raumgruppeninraumgruppendateiauslesen:IF NOT exists(raumgruppendatei)THEN
+datraumgruppen:=sequentialfile(output,raumgruppendatei);inittupel(
+dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp,
+fnrrgraeume,PROC raumgruppeindateischreiben)FI .raeumederraumgruppe:
+datraumgruppen:=sequentialfile(modify,raumgruppendatei);toline(datraumgruppen
+,1);col(datraumgruppen,1);WHILE NOT eof(datraumgruppen)REP downety(
+datraumgruppen,raum);IF col(datraumgruppen)=1CAND NOT eof(datraumgruppen)
+THEN readrecord(datraumgruppen,raumgruppenzeile);LEAVE raeumederraumgruppe
+WITH subtext(raumgruppenzeile,posraeumeinrgzeile)ELSE col(datraumgruppen,col(
+datraumgruppen)+1)FI ;PER ;"".prueferaumbelegung:BOOL VAR vorlaeufiggesetzt;
+raumbelegliste:=datenderzeit(i,kennungraum);IF raumbelegliste<>""THEN
+raumsetzliste:="";datraumwunsch:=sequentialfile(input,wunschraumdatei);ilv:=0
+;WHILE NOT eof(datraumwunsch)REP getline(datraumwunsch,raumzeile);ilv:=ilv+1;
+IF raumzeile<>""THEN anzahlraeume:=length(raumzeile)DIV laengeraum;
+vorlaeufiggesetzt:=FALSE ;posraum:=1;FOR iraumFROM 1UPTO anzahlraeumeREP raum
+:=subtext(raumzeile,posraum,posraum+laengeraum-1);prueferaum;posraum:=posraum
++laengeraumUNTIL vorlaeufiggesetztPER ;IF NOT vorlaeufiggesetztTHEN
+raumhinweis:=kennzraumevtlgesperrtFI ;FI ;PER ;FI .prueferaum:IF suchpos(
+raumbelegliste,raum,laengeraum)>0THEN lv:=subtext(lvliste,(ilv-1)*laengelv+1,
+ilv*laengelv);planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe
+);IF suchlv<>lvTHEN IF iraum=anzahlraeumeTHEN raumhinweis:=kennzraumgesperrt;
+LEAVE prueferaumbelegungFI ELSE vorlaeufiggesetzt:=TRUE FI ELSE IF suchpos(
+raumsetzliste,raum,laengeraum)=0THEN raumsetzliste:=raum;vorlaeufiggesetzt:=
+TRUE FI FI .zeitwunschleistefestlegen:IF mitzeitwuenschenTHEN zwdatei:=
+sequentialfile(modify,zwdateiname);zeitwunschleiste:=letztestd*stundefrei;
+INT VAR fundpos,posparaphe:=1;WHILE posparaphe<length(paraphenliste)REP
+suchparaphe:=subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1);
+fundpos:=suchpos(paraphenmitzeitwuenschen,suchparaphe,laengeparaphe);IF
+fundpos>0THEN zeitwuenschezerlegenFI ;posparapheINCR laengeparaphe;PER ;FI .
+zeitwuenschezerlegen:INT VAR izeile:=(fundpos+3)DIV laengeparaphe;toline(
+zwdatei,izeile);readrecord(zwdatei,zwdateizeile);fundpos:=pos(zwdateizeile,
+minusdrei,1);WHILE fundpos>0REP fundposINCR 1;replace(zeitwunschleiste,
+fundposDIV 2,stundeverplant);fundpos:=pos(zwdateizeile,minusdrei,fundpos)PER
+.END PROC kopplungzeigen;PROC raumgruppeindateischreiben(BOOL VAR b):IF
+dbstatus=0THEN putline(datraumgruppen,text(wert(fnrrgraumgrp),laengeraum)+
+wert(fnrrgraeume))ELSE b:=TRUE FI END PROC raumgruppeindateischreiben;PROC
+maxwochenstdberechnen(BOOL VAR b):IF dbstatus=0CAND wert(fnrlvkopplung)=
+kopplungCAND wert(fnrlvsj)=gewschuljCAND wert(fnrlvhj)=gewhalbjTHEN
+maxwochenstunden:=max(intwert(fnrlvwochenstd),maxwochenstunden)ELSE b:=TRUE
+FI END PROC maxwochenstdberechnen;PROC zeitrasterleistefestlegen:IF gewhalbj
+<>halbjderzeitrasterleisteOR zeitrasterleiste=""THEN zeitrasterleiste:=
+letztestd*blankzeichen;inittupel(dnrzeitraster);statleseschleife(
+dnrzeitraster,gewschulj,gewhalbj,fnrzrsj,fnrzrhj,PROC
+erstellezeitrasterleiste);halbjderzeitrasterleiste:=gewhalbj;FI END PROC
+zeitrasterleistefestlegen;PROC erstellezeitrasterleiste(BOOL VAR b):IF wert(
+fnrzrsj)<>gewschuljCOR wert(fnrzrhj)<>gewhalbjCOR dbstatus<>0THEN b:=TRUE
+ELSE IF wert(fnrzrkennungteil)=kennzzeitrastersperrungTHEN replace(
+zeitrasterleiste,intwert(fnrzrtagstunde),kennzzeitrastersperrung)FI FI END
+PROC erstellezeitrasterleiste;BOOL PROC istlehrerzurzeitverplant:TEXT VAR
+kopplungenderzeit:="";TEXT VAR lehrerderzeit:=datenderzeit(i,kennungparaphe);
+IF lehrerderzeit=""COR paraphenliste=lehrerplatzhalterTHEN LEAVE
+istlehrerzurzeitverplantWITH FALSE FI ;INT VAR posparaphe:=1;INT VAR
+poslehrer,poskopplung;WHILE posparaphe<=length(paraphenliste)REP paraphe:=
+subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1);IF paraphe<>
+lehrerplatzhalterTHEN poslehrer:=suchpos(lehrerderzeit,paraphe,laengeparaphe)
+;IF poslehrer>0THEN IF kopplungenderzeit=""THEN kopplungenderzeit:=
+datenderzeit(i,kennungkopplung)FI ;poskopplung:=(poslehrer-1)*laengenfaktor+1
+;IF subtext(kopplungenderzeit,poskopplung,poskopplung+laengekopplung-1)<>text
+(kopplung,laengekopplung)THEN LEAVE istlehrerzurzeitverplantWITH TRUE FI FI ;
+FI ;posparaphe:=posparaphe+laengeparaphePER ;FALSE END PROC
+istlehrerzurzeitverplant;PROC stupidstoerendelvlisten:TEXT VAR prueflv,
+pruefkopplung,pruefparaphe,lvderzeit,kopplungenderzeit,paraphenderzeit,
+vglkopplung,auszeile;INT VAR feldnr:=infeld;IF
+sperrungderzeitdurchlehreroderschuelerTHEN erstelledateimitstoerendenlv;
+zeigedatei(zeigdatei,"");ELSE standardmeldung(meldnrkeinestoerendenlv,"");
+return(1)FI .sperrungderzeitdurchlehreroderschueler:pos(standardmaskenfeld(
+feldnr+1),kennzlehrergesperrt)>0OR pos(standardmaskenfeld(feldnr+1),
+kennzschuelergesperrt)>0.erstelledateimitstoerendenlv:i:=(feldnr-
+felderbistabbeginn)DIV felderproeintragbs1;zeigdatei:=liste1;forget(zeigdatei
+,quiet);ausgabeliste:=sequentialfile(output,zeigdatei);auszeile:="Kopplung ";
+auszeileCAT kopplung;auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE );
+auszeileCAT ".Stunde verhindert durch:";putline(ausgabeliste,auszeile);line(
+ausgabeliste);auszeile:="Lehrveranst. (Kopplung) Lehrer Klassengruppen";
+putline(ausgabeliste,auszeile);lvderzeit:=datenderzeit(i,kennunglv);
+kopplungenderzeit:=datenderzeit(i,kennungkopplung);paraphenderzeit:=
+datenderzeit(i,kennungparaphe);INT VAR poslv:=1,poskopplung:=1,posparaphe:=1;
+vglkopplung:=text(kopplung,laengekopplung);WHILE poslv<=length(lvderzeit)REP
+pruefkopplung:=subtext(kopplungenderzeit,poskopplung,poskopplung+
+laengekopplung-1);IF pruefkopplung<>vglkopplungTHEN pruefparaphe:=subtext(
+paraphenderzeit,posparaphe,posparaphe+laengeparaphe-1);prueflv:=subtext(
+lvderzeit,poslv,poslv+laengelv-1);IF suchpos(paraphenliste,pruefparaphe,
+laengeparaphe)>0CAND pruefparaphe<>lehrerplatzhalterTHEN vermerkelvELIF
+gemeinsameschuelergruppen(kennungkopplung,kopplung,kennunglv,prueflv)THEN
+vermerkelvFI ;FI ;poskopplung:=poskopplung+laengekopplung;poslv:=poslv+
+laengelv;posparaphe:=posparaphe+laengeparaphe;PER .vermerkelv:auszeile:=
+subtext(prueflv,1,2);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,3,4
+);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,5);auszeileCAT " ";
+auszeileCAT pruefkopplung;auszeileCAT " ";auszeileCAT pruefparaphe;auszeile
+CAT " ";sugruppen:=beteiligteschuelergruppen(kennunglv,prueflv);INT VAR
+possu:=1;WHILE possu<=length(sugruppen)REP auszeileCAT subtext(sugruppen,
+possu,possu+laengesugruppe-1);auszeileCAT blankzeichen;possu:=possu+
+laengesugruppePER ;putline(ausgabeliste,auszeile).END PROC
+stupidstoerendelvlisten;PROC stupidraumbelegunglisten:TEXT VAR auszeile;INT
+VAR feldnr:=infeld;erstelledateimitraumbelegung;zeigedatei(zeigdatei,"").
+erstelledateimitraumbelegung:i:=(feldnr-felderbistabbeginnbs2)DIV
+felderproeintragbs2;zeigdatei:=liste2;forget(zeigdatei,quiet);ausgabeliste:=
+sequentialfile(output,zeigdatei);auszeile:=
+"Raumbelegung für Lehrveranstaltung ";auszeileCAT subtext(lv,1,2);auszeile
+CAT blankzeichen;auszeileCAT subtext(lv,3,4);auszeileCAT blankzeichen;
+auszeileCAT subtext(lv,5);auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE );
+auszeileCAT ".Stunde:";putline(ausgabeliste,auszeile);line(ausgabeliste);
+putline(ausgabeliste,"freie Räume:");line(ausgabeliste);IF alleraeume=""THEN
+alleraeumeholenFI ;posraum:=1;WHILE posraum<=length(alleraeume)REP raum:=
+subtext(alleraeume,posraum,posraum+laengeraum-1);planeintraglesen(i,
+kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum=""THEN putline(
+ausgabeliste,raum)FI ;posraum:=posraum+laengeraumPER ;line(ausgabeliste);line
+(ausgabeliste);putline(ausgabeliste,"Belegung der Wunsch- und Ersatzräume:");
+datraumwunsch:=sequentialfile(modify,wunschraumdatei);toline(datraumwunsch,
+ilv);readrecord(datraumwunsch,raumzeile);posraum:=1;WHILE posraum<=length(
+raumzeile)REP raum:=subtext(raumzeile,posraum,posraum+laengeraum-1);
+planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum
+<>""THEN auszeile:=raum;auszeileCAT " : ";auszeileCAT subtext(suchlv,1,2);
+auszeileCAT blankzeichen;auszeileCAT subtext(suchlv,3,4);auszeileCAT
+blankzeichen;auszeileCAT subtext(suchlv,5);putline(ausgabeliste,auszeile);FI
+;posraum:=posraum+laengeraumPER .alleraeumeholen:inittupel(dnrschluessel);
+statleseschleife(dnrschluessel,raumkenndaten,"",fnrschlsachgebiet,
+fnrschlschluessel,PROC raeumeholen).END PROC stupidraumbelegunglisten;PROC
+raeumeholen(BOOL VAR b):IF wert(fnrschlsachgebiet)>raumkenndatenCOR dbstatus
+<>0THEN b:=TRUE ELSE alleraeumeCAT text(wert(fnrschlschluessel),laengeraum)
+FI END PROC raeumeholen;PROC stupidspeicherndieserzeitenfuerkopplung:BOOL
+VAR plausifehler:=FALSE ;INT VAR anzahlankreuzungen:=0;ifnr:=
+fnrersteseingabefeldbs1;REP IF standardmaskenfeld(ifnr)<>""THEN IF zeitbelegt
+OR lehrerbelegtOR schuelerbelegtTHEN plausifehler:=TRUE ;standardmeldung(
+meldnrzuordnungwegensperrungunmoegl,"");infeld(ifnr)FI ;anzahlankreuzungen
+INCR 1FI ;ifnrINCR felderproeintragbs1UNTIL (ifnr>fnrletztesfeldbs1)OR
+plausifehlerPER ;IF plausifehlerTHEN return(1)ELIF anzahlankreuzungen>
+maxwochenstundenTHEN standardmeldung(meldnrzuvielezuordnungen,"");return(1)
+ELSE speichernderkopplung;standardmeldung(meldnrdatenwurdengespeichert,"");
+stundenplansichern(fstatusstuplan);IF anzahlankreuzungen=0THEN
+stupidnichtaendernweitermitnaechsterkopplungELSE standardstartproc(
+maskebearb2);erstelvzurkopplungnocheinmallesen;ilv:=1;lvzeigen;standardnproc
+FI FI .zeitbelegt:pos(standardmaskenfeld(ifnr+1),kennzzeitgesperrt)>0.
+lehrerbelegt:pos(standardmaskenfeld(ifnr+1),kennzlehrergesperrt)>0.
+schuelerbelegt:pos(standardmaskenfeld(ifnr+1),kennzschuelergesperrt)>0.
+erstelvzurkopplungnocheinmallesen:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,
+gewhalbj);putwert(fnrlvkopplung,kopplung);search(ixlvsjhjkopp,FALSE ).
+speichernderkopplung:INT VAR poslv;ifnr:=fnrersteseingabefeldbs1;FOR iFROM
+erstestdUPTO letztestdREP ankreuzung:=standardmaskenfeld(ifnr);IF (
+kopplungszeitenSUB i)=stundeverplantTHEN IF ankreuzung=""THEN
+kopplungentfernenELSE kopplungueberschreibenFI ELSE IF ankreuzung<>""THEN
+kopplungschreibenFI ;FI ;ifnr:=ifnr+felderproeintragbs1PER .kopplungschreiben
+:BOOL VAR ok;poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste,
+poslv,poslv+laengelv-1);planeintragvornehmen(i,lv,raumplatzhalter,ok);poslv:=
+poslv+laengelvPER ;replace(kopplungszeiten,i,stundeverplant).
+kopplungentfernen:poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(
+lvliste,poslv,poslv+laengelv-1);planeintragloeschen(i,lv,ok);poslv:=poslv+
+laengelvPER ;replace(kopplungszeiten,i,stundefrei).kopplungueberschreiben:
+poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste,poslv,poslv+
+laengelv-1);planeintraglesen(i,kennunglv,lv,suchlv,suchraum,suchparaphe);
+suchraum:=compress(suchraum);IF suchraum=""THEN suchraum:=raumplatzhalterFI ;
+planeintragvornehmen(i,lv,suchraum,ok);poslv:=poslv+laengelvPER .END PROC
+stupidspeicherndieserzeitenfuerkopplung;PROC lvzeigen:
+ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift);
+datenbestimmenundausgeben.ueberschriftzeilezusammensetzen:ueberschrift:=
+textueberschriftbs2;ueberschriftCAT kopplung;ueberschriftCAT
+textueberschriftanhang;ueberschriftCAT gewhalbj;ueberschriftCAT blankzeichen;
+ueberschriftCAT subtext(gewschulj,1,2);ueberschriftCAT trennstrich;
+ueberschriftCAT subtext(gewschulj,3,4).datenbestimmenundausgeben:
+werteauslvsatzholen;ifnr:=felderbistabbeginnbs2;fnrersteseingabefeldbs2:=0;
+FOR iFROM erstestdUPTO letztestdREP IF (kopplungszeitenSUB i)=stundeverplant
+THEN planeintraglesen(i,kennunglv,text(lv,laengelv),suchlv,suchraum,
+suchparaphe);IF compress(suchraum)<>""THEN standardmaskenfeld(blankzeichen,
+ifnr+1);standardmaskenfeld(compress(suchraum),ifnr+2)ELSE standardmaskenfeld(
+vorschlagzeichen,ifnr+1);standardmaskenfeld(compress(wunschraumvorschlag),
+ifnr+2)FI ;IF fnrersteseingabefeldbs2=0THEN fnrersteseingabefeldbs2:=ifnr+2
+FI ELSE standardmaskenfeld(blankzeichen,ifnr+1);standardmaskenfeld(
+raumplatzhalter,ifnr+2);feldschutz(ifnr+2)FI ;ifnr:=ifnr+felderproeintragbs2
+PER ;infeld(1);standardfelderausgeben;infeld(fnrersteseingabefeldbs2).
+werteauslvsatzholen:lv:=jgstzweistellig(intwert(fnrlvjgst))+text(wert(
+fnrlvfachkennung),laengefachkenn);wstdderlv:=intwert(fnrlvwochenstd);paraphe
+:=wert(fnrlvparaphe);standardmaskenfeld(text(lv,laengelv),
+fnrlehrveranstaltbs2);standardmaskenfeld(text(wstdderlv,laengewstd),
+fnrwstdbs2);standardmaskenfeld(text(paraphe,laengeparaphe),fnrparaphebs2);
+standardmaskenfeld(text(wert(fnrlvklgrp1),laengeklagruppe),
+fnrklassengruppenbeginn);standardmaskenfeld(text(wert(fnrlvklgrp2),
+laengeklagruppe),fnrklassengruppenbeginn+1);standardmaskenfeld(text(wert(
+fnrlvklgrp3),laengeklagruppe),fnrklassengruppenbeginn+2);standardmaskenfeld(
+text(wert(fnrlvklgrp4),laengeklagruppe),fnrklassengruppenbeginn+3);
+standardmaskenfeld(text(wert(fnrlvraumgrp1),laengeraum),fnrraumwunsch);
+standardmaskenfeld(text(wert(fnrlvraumgrp2),laengeraum),fnrraumwunsch+1).
+wunschraumvorschlag:datraumwunsch:=sequentialfile(modify,wunschraumdatei);
+toline(datraumwunsch,ilv);readrecord(datraumwunsch,raumzeile);raumbelegliste
+:=datenderzeit(i,kennungraum);posraum:=1;WHILE posraum<=length(raumzeile)REP
+raum:=subtext(raumzeile,posraum,posraum+laengeraum-1);IF suchpos(
+raumbelegliste,raum,laengeraum)=0THEN LEAVE wunschraumvorschlagWITH raumFI ;
+posraum:=posraum+laengeraumPER ;kennzkeinfreierwunschraum.END PROC lvzeigen;
+PROC stupidspeichernderraeumeundzeitenderlv(BOOL CONST speichern):BOOL VAR
+plausifehler,ok;IF speichernTHEN plausifehler:=FALSE ;
+plausipruefungfuerraeumezulv;IF plausifehlerTHEN return(1)ELSE
+raeumezulvspeichern;standardmeldung(meldnrdatenwurdengespeichert,"");
+stundenplansichern(fstatusstuplan);naechstelvzurbearbeitungFI ELSE
+standardmeldung(meldnrdatenwurdennichtgespeichert,"");
+naechstelvzurbearbeitungFI .plausipruefungfuerraeumezulv:INT VAR
+anzahlankreuzungen:=0;ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO letztestd
+REP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress(
+standardmaskenfeld(ifnr));IF raum<>""THEN anzahlankreuzungen:=
+anzahlankreuzungen+1;IF raum<>kennzkeinfreierwunschraumTHEN IF NOT
+bezeichnungzulaessig(kennungraum,raum)THEN standardmeldung(
+meldnrungueltigerraum,"");infeld(ifnr);plausifehler:=TRUE ELIF
+raumdurchanderelvbelegtTHEN standardmeldung(meldnrraumschonbelegt,"");infeld(
+ifnr);plausifehler:=TRUE FI FI FI FI ;ifnr:=ifnr+felderproeintragbs2UNTIL
+plausifehlerPER ;IF NOT plausifehlerTHEN IF anzahlankreuzungen>wstdderlvTHEN
+standardmeldung(meldnrzuvielezuordnungen,"");infeld(fnrersteseingabefeldbs2);
+plausifehler:=TRUE FI FI .raumdurchanderelvbelegt:planeintraglesen(i,
+kennungraum,raum,suchlv,suchraum,suchparaphe);compress(suchraum)<>""AND
+suchlv<>lv.raeumezulvspeichern:ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO
+letztestdREP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress(
+standardmaskenfeld(ifnr));IF raum=""THEN planeintragloeschen(i,lv,ok);ELSE
+IF raum=kennzkeinfreierwunschraumTHEN raum:=raumplatzhalterFI ;
+planeintragvornehmen(i,lv,raum,ok);FI FI ;ifnr:=ifnr+felderproeintragbs2PER .
+naechstelvzurbearbeitung:succ(ixlvsjhjkopp);IF dbstatus=0THEN IF
+weiterelvzukopplungvorhandenTHEN ilv:=ilv+1;lvzeigen;return(1)ELSE
+standardstartproc(maskebearb1);kopplungzeigen;return(2)FI ELSE enter(3)FI .
+weiterelvzukopplungvorhanden:wert(fnrlvkopplung)=kopplungAND wert(fnrlvhj)=
+gewhalbjAND wert(fnrlvsj)=gewschulj.END PROC
+stupidspeichernderraeumeundzeitenderlv;PROC stupidkopierenderraumangabe:INT
+VAR feldnr:=infeld;ifnr:=feldnr;WHILE ifnr<fnrletztesfeldbs2REP ifnrINCR
+felderproeintragbs2;IF standardmaskenfeld(ifnr)<>raumplatzhalterTHEN
+standardmaskenfeld(standardmaskenfeld(feldnr),ifnr)FI PER ;return(1)END PROC
+stupidkopierenderraumangabe;PROC stupidnichtaendernweitermitkopplung:putwert(
+fnrlvkopplung,kopplung+blankzeichen);search(ixlvsjhjkopp,FALSE );IF
+keinegueltigekopplungTHEN enter(3)ELSE standardstartproc(maskebearb1);
+kopplungzeigen;return(2)FI END PROC stupidnichtaendernweitermitkopplung;PROC
+stupidnichtaendernweitermitnaechsterkopplung:putwert(fnrlvkopplung,kopplung+
+blankzeichen);search(ixlvsjhjkopp,FALSE );IF keinegueltigekopplungTHEN enter(
+2)ELSE kopplungzeigen;return(1)FI END PROC
+stupidnichtaendernweitermitnaechsterkopplung;PROC stupidlistedrucken(BOOL
+CONST drucken):IF druckenTHEN print(zeigdatei)FI ;forget(zeigdatei,quiet);
+return(2)END PROC stupidlistedrucken;INT PROC suchpos(TEXT CONST quelle,
+suchtext,INT CONST laenge):INT VAR findpos:=pos(quelle,suchtext);WHILE
+findpos>0REP IF findposMOD laenge=1THEN LEAVE suchposWITH findposELSE findpos
+:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND PROC suchpos;TEXT PROC
+jgstzweistellig(INT CONST intjgst):IF intjgst=0THEN "00"ELIF intjgst>4AND
+intjgst<10THEN "0"+text(intjgst)ELSE text(intjgst)FI END PROC jgstzweistellig
+;PROC wertedeseingangsbildschirmsmerken:wertfeld2:=standardmaskenfeld(
+fnrkopplungbs0);wertfeld3:=standardmaskenfeld(fnrakthalbjahr);wertfeld4:=
+standardmaskenfeld(fnrmitzeitwuenschen)END PROC
+wertedeseingangsbildschirmsmerken;PROC wertedeseingangsbildschirmsholen:
+standardmaskenfeld(wertfeld2,fnrkopplungbs0);standardmaskenfeld(wertfeld3,
+fnrakthalbjahr);standardmaskenfeld(wertfeld4,fnrmitzeitwuenschen)END PROC
+wertedeseingangsbildschirmsholen;END PACKET
+stundenplanimdialogerstellenundaendern
+