PACKET kurseaufplanbloeckelegenDEFINES kurseaufbloeckestarten, kurseaufbloeckeinitialisieren,kurseaufbloeckeschemaspeichern, kurseaufbloeckeschemavorblaettern,kurseaufbloeckeschemaentfernenfrage, kurseaufbloeckeschemaentfernen,kurseaufbloeckeschemauebernehmenfrage, kurseaufbloeckeschemauebernehmen,kurseaufbloeckebearbeiten, kurseaufbloeckeinformationenaufbereiten,kurseaufbloeckerechtehaelftezeigen, kurseaufbloeckeaenderungenspeichern,kurseaufbloeckeschemaeinteilen, kurseaufbloecketeilblockabspalten,kurseaufbloecketeilblockentfernen, kurseaufbloeckeschemanichtweiteraendern,kurseaufbloeckezurueckzumbeginn:LET maskeeingang="ms kurse auf planbloecke eingang",maskebearb= "ms kurse auf planbloecke";LET fnrgewjgst=2,fnrhalbjahr=3,fnraktjgst=4, fnrneuanjgst=5,fnrherkunftjgst=6,fnrherkunfthj=7,fnrmitkursen=8;LET fnrfach=2 ,fnrart=3,fnrwochenstunden=4,fnranzahlschueler=5,fnranzahlkurse=6, fnrschuelerprokurs=7,fnrausgabefach=8,fnrersterkurs=9,fnrletzterblock=44, fnrersteblockangabe=45,fnrerstewstd=46,fnrletztewstd=167;LET felderprozeile= 11,felderprokurs=3;LET meldnrspeichern=50,meldnrkeinezahl=53, meldnrdatenwerdengeprueft=57,meldnrloeschen=61,meldnrnichtloeschen=62, meldnrnichtspeichern=63,meldnrloeschfrage=65,meldnrbittewarten=69, meldnrblaetternunmoeglich=72,meldnrbitteangabeergaenzen=129, meldnrangabenichtsinnvoll=162,meldnruebernehmenfrage=300,meldnruebernehmen= 301,meldnrnichtuebernehmen=303,meldnrfeldleerlassen=390, meldnrfachartkombinationungueltig=393,meldnrfalschejgstfolge=410, meldnrfalschebezugsjgst=411,meldnruebernahmeingleicheshj=415, meldnrkurswahlfehler=416,meldnrdateninbearbeitung=425,meldnrschemagibtsnicht= 426,meldnrschemagibtsschon=427,meldnrblocknichtteilbar=428, meldnrteilblockentfernen=429,meldnrstundensummmestimmtnicht=430;LET feldanzmaskeeingang=8;ROW feldanzmaskeeingangTEXT VAR feldbs1;INT VAR letztecursorfnr:=fnrgewjgst,letztecursorfnrbs2,pruefstatus;INT VAR ifnr;LET maxblock=22;LET maxtabzeilen=66;LET TABZEILE =STRUCT (TEXT blockbez,TEXT wstd ,INT frei,INT gesamt,TEXT kurse);ROW maxtabzeilenTABZEILE VAR blockzeile;INT VAR izeile,iblock,erstergezeigterblock,letztergezeigterblock,letzterblock:=1; BOOL VAR rechtetabellenhaelftezeigen:=FALSE ;INT VAR ikurs;LET maxkurse=7; TEXT VAR allekursedesblocks,kursbez;INT VAR poskurs;LET laengekurs=6, laengeallekursangaben=10,laengefach=2,laengeart=2,laengefachartstd=5,incrwstd =4;LET KURSTAB =STRUCT (TEXT kursname,TEXT blocknr1,TEXT blocknr2);ROW maxfachkursKURSTAB VAR kurstab;INT VAR ifachkurs;LET maxfachkurs=12;TEXT VAR angabenzueinemkurs,gefundenerkurs,gefundeneplanbloecke,gefundenerblock1, gefundenerblock2;INT VAR blockwstd1,blockwstd2;LET jgst10=10,jgst11=11,jgst13 =13,hj1=1,hj2=2;TEXT VAR aktjgst,gewjgst,gewhalbjahr,neuanjgst,kopiejgst, kopiehalbjahr,gewschuljahr,aktuelleshalbjahr,fangsj,fanghj;TEXT VAR blocknr, pruefblockbez;LET posblockkennung=3;LET kennungteilblockb="b";LET kennungwstd ="S",kennungkurse="K",kennungplanbloecke="P";TEXT VAR alleplanblockbez;LET planblocklaenge=3,laengeblocknr=2;INT VAR posplanblock;TEXT VAR allekursedesgewhj,allekursedesherkunfthj;TEXT VAR fachartkombinationen:="", fach,fachart;INT VAR wochenstundenzahl,anzahlschuelermitfachart, anzahlschuelerprokurs,anzahlkursezufachart;BOOL VAR wstdfelderschutz:=FALSE , planbloeckemitkursenuebernehmen,kurswahlsperreok;LET kurswahl1="Kurswahl-1 "; TEXT VAR gewschueler;LET nuraktuelleschueler="O",nurneuangemeldete="N";LET zeilenprobildschirm=12;INT VAR kurswahlstatus;TEXT VAR ueberschrift;LET titel1="Kurse blocken für jetzige ",titel2=" in ";LET schulhalbjahr= "Schulhalbjahr",schuljahr="Schuljahr";initfelderdeseingangsbildschirms;PROC kurseaufbloeckestarten:standardstartproc(maskeeingang); wertedeseingangsbildschirmsholen;infeld(fnrgewjgst);standardfelderausgeben; infeld(letztecursorfnr);standardnprocEND PROC kurseaufbloeckestarten;PROC kurseaufbloeckeinitialisieren:eingangsbehandlung(1);IF eingangsmaskenfehler THEN infeld(pruefstatus);return(1)ELSE wertedeseingangsbildschirmsmerken; kurswahlinitialisieren(aktjgst,gewjgst,gewhalbjahr,gewschueler,gewschuljahr); kurswahlbasisholen(kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELIF alleplanblockbezeichner<>""THEN standardmeldung(meldnrschemagibtsschon,"");infeld(fnrgewjgst);return(1)ELSE kurswahlsperresetzen(kurswahl1,kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung(meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:= FALSE ;blockschemazeigen(1);infeld(fnrerstewstd);standardnprocFI FI FI .END PROC kurseaufbloeckeinitialisieren;PROC kurswahlfehlerbehandeln: standardmeldung(meldnrkurswahlfehler,"");pause(10)END PROC kurswahlfehlerbehandeln;PROC kurseaufbloeckezurueckzumbeginn(INT CONST stufen ):kurswahlsperrebeenden(kurswahl1);enter(stufen)END PROC kurseaufbloeckezurueckzumbeginn;PROC blockschemazeigen(INT CONST art): standardstartproc(maskebearb);ueberschriftaufbereiten; standardkopfmaskeaktualisieren(ueberschrift);eingabefeldersperren(fnrfach, fnrart);zusatzfelderinitialisieren;IF art=1THEN blockschemainitialisieren ELSE blockschemafuellenFI ;rechtetabellenhaelftezeigen:=FALSE ; blockschemaausgebenab(1);infeld(fnrfach);standardfelderausgeben. ueberschriftaufbereiten:IF art=1THEN ueberschrift:=titel1;ueberschriftCAT aktjgst;ueberschriftCAT titel2;ELIF art=2THEN ueberschrift:=text( vergleichsknoten);ueberschriftCAT " für ";ELIF art=3THEN IF planbloeckemitkursenuebernehmenTHEN ueberschrift:=text(vergleichsknoten)ELSE ueberschrift:="Blockschema ohne Kurse übernehmen"FI ;ueberschriftCAT " für "FI ;ueberschriftCAT gewjgst;ueberschriftCAT ".";ueberschriftCAT gewhalbjahr;ueberschriftCAT " ";ueberschriftCAT subtext(gewschuljahr,1,2); ueberschriftCAT "/";ueberschriftCAT subtext(gewschuljahr,3,4). zusatzfelderinitialisieren:FOR ifnrFROM fnrfachUPTO fnrersteblockangabe-1REP standardmaskenfeld("",ifnr)PER .blockschemainitialisieren:FOR iblockFROM 1 UPTO maxtabzeilenREP IF iblock>maxblockTHEN blockzeile(iblock).blockbez:="" ELSE blockzeile(iblock).blockbez:=textzweistellig(iblock)+" "FI ;blockzeile( iblock).wstd:="0";blockzeile(iblock).frei:=0;blockzeile(iblock).gesamt:=0; blockzeile(iblock).kurse:=""PER ;letzterblock:=maxblock.END PROC blockschemazeigen;PROC blockschemafuellen:alleplanblockbez:= alleplanblockbezeichner;iblock:=0;posplanblock:=1;WHILE posplanblock0THEN standardmeldung( meldnrkeinezahl,"");blockschemaausgebenab(pruefstatus);infeld( fnrersteblockangabe);standardfelderausgeben;infeld(fnrerstewstd);return(1) ELSE standardmeldung(meldnrspeichern,"");wochenstundenspeichern; kurswahl1sichern(kurswahlstatus);kurswahlsperrebeenden(kurswahl1);enter(2)FI ELSE standardmeldung(meldnrnichtspeichern,"");kurswahlsperrebeenden(kurswahl1 );enter(2)FI .allewochenstundenangabenpruefen:INT VAR testint;iblock:=1; WHILE iblock<=letzterblockAND pruefstatus=0REP testint:=int(blockzeile(iblock ).wstd);IF NOT lastconversionokTHEN pruefstatus:=iblockFI ;iblockINCR 1PER . wochenstundenspeichern:FOR iblockFROM 1UPTO letzterblockREP planblockeintragen(blockzeile(iblock).blockbez,blockzeile(iblock).wstd)PER . END PROC kurseaufbloeckeschemaspeichern;PROC eingetragenewochenstundenmerken: ifnr:=fnrerstewstd;iblock:=erstergezeigterblock;FOR izeileFROM 1UPTO zeilenprobildschirmREP blockzeile(iblock).wstd:=standardmaskenfeld(ifnr);ifnr INCR felderprozeile;iblockINCR 1UNTIL iblock>letzterblockPER END PROC eingetragenewochenstundenmerken;PROC kurseaufbloeckeschemavorblaettern(BOOL CONST vorwaerts):letztecursorfnrbs2:=infeld;IF letztecursorfnrbs2>= fnrerstewstdTHEN letztecursorfnrbs2:=fnrerstewstdFI ;IF vorwaertsTHEN IF letztergezeigterblock=letzterblockTHEN standardmeldung( meldnrblaetternunmoeglich,"")ELSE eingetragenewochenstundenmerken; blockschemaausgebenab(letztergezeigterblock+1);infeld(fnrersteblockangabe); standardfelderausgeben;infeld(letztecursorfnrbs2)FI ELSE IF erstergezeigterblock=1THEN standardmeldung(meldnrblaetternunmoeglich,"")ELSE eingetragenewochenstundenmerken;IF erstergezeigterblock>zeilenprobildschirm THEN blockschemaausgebenab(erstergezeigterblock-zeilenprobildschirm)ELSE blockschemaausgebenab(1)FI ;infeld(fnrersteblockangabe); standardfelderausgeben;infeld(letztecursorfnrbs2)FI FI ;return(1)END PROC kurseaufbloeckeschemavorblaettern;PROC kurseaufbloeckeschemaentfernenfrage: eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return( 1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst, gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen( kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1) ELIF alleplanblockbezeichner<>""THEN kurswahlsperresetzen(kurswahl1, kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung( meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=TRUE ; blockschemazeigen(2);standardmeldung(meldnrloeschfrage,"");feldfrei(fnrfach); infeld(fnrfach);standardnprocFI ELSE standardmeldung(meldnrschemagibtsnicht, "");infeld(fnrgewjgst);return(1)FI FI .END PROC kurseaufbloeckeschemaentfernenfrage;PROC kurseaufbloeckeschemaentfernen(BOOL CONST entfernen):IF entfernenTHEN standardmeldung(meldnrloeschen,""); planbloeckeinitialisierenELSE standardmeldung(meldnrnichtloeschen,"")FI ; kurswahlsperrebeenden(kurswahl1);enter(2)END PROC kurseaufbloeckeschemaentfernen;PROC kurseaufbloeckeschemauebernehmenfrage: eingangsbehandlung(3);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return( 1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst, gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen( kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1) ELIF alleplanblockbezeichner<>""THEN standardmeldung(meldnrschemagibtsschon, "");infeld(fnrgewjgst);return(1)ELSE IF planbloeckemitkursenuebernehmenTHEN allekursedesgewhj:=allekurseFI ;TEXT VAR gewschuljahrsave:=gewschuljahr; kopiejgst:=standardmaskenfeld(fnrherkunftjgst);kopiehalbjahr:= standardmaskenfeld(fnrherkunfthj);kurswahlinitialisieren(aktjgst,kopiejgst, kopiehalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(kurswahlstatus); IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELIF alleplanblockbezeichner<>""THEN wstdfelderschutz:=TRUE ;gewschuljahr:= gewschuljahrsave;blockschemazeigen(3);standardmeldung(meldnruebernehmenfrage, "");feldfrei(fnrfach);infeld(fnrfach);standardnprocELSE standardmeldung( meldnrschemagibtsnicht,"");infeld(fnrherkunftjgst);return(1)FI FI FI END PROC kurseaufbloeckeschemauebernehmenfrage;PROC kurseaufbloeckeschemauebernehmen(BOOL CONST uebernehmen):IF uebernehmenTHEN standardmeldung(meldnruebernehmen,"");IF planbloeckemitkursenuebernehmenCAND allekursedesgewhj=""THEN allekursedesherkunfthj:=allekurseFI ; kurswahlinitialisieren(aktjgst,gewjgst,gewhalbjahr,gewschueler,gewschuljahr); kurswahlbasisholen(kurswahlstatus);kurswahlsperresetzen(kurswahl1, kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung( meldnrdateninbearbeitung,"");return(1)ELSE evtlkurseundplanblockschemauebernahmedurchfuehren;kurswahl0sichern( kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln; kurswahlsperrebeenden(kurswahl1);return(1)ELSE kurswahl1sichern( kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln; kurswahlsperrebeenden(kurswahl1);return(1)ELSE kurswahlsperrebeenden( kurswahl1);enter(2)FI FI FI ELSE standardmeldung(meldnrnichtuebernehmen,""); enter(2)FI .allekursealskursedesgewhjeintragen:poskurs:=1;WHILE poskurs<= length(allekursedesherkunfthj)REP kurseintragen(kursfach,kurskennung,kurswstd ,kursart);poskursINCR laengeallekursangabenPER .kursfach:subtext( allekursedesherkunfthj,poskurs,poskurs+1).kurskennung:compress(subtext( allekursedesherkunfthj,poskurs+2,poskurs+5)).kurswstd:subtext( allekursedesherkunfthj,poskurs+6,poskurs+7).kursart:subtext( allekursedesherkunfthj,poskurs+8,poskurs+9). evtlkurseundplanblockschemauebernahmedurchfuehren:IF planbloeckemitkursenuebernehmenCAND allekursedesgewhj=""THEN allekursealskursedesgewhjeintragen;allekursedesgewhj:=allekursedesherkunfthj FI ;FOR iblockFROM 1UPTO letzterblockREP planblockeintragen(blockzeile(iblock ).blockbez,blockzeile(iblock).wstd);IF planbloeckemitkursenuebernehmenTHEN allekursedesblocks:=blockzeile(iblock).kurse;poskurs:=1;WHILE poskurs<=length (allekursedesblocks)REP kursbez:=subtext(allekursedesblocks,poskurs,poskurs+ laengekurs-1);IF suchpos(allekursedesgewhj,kursbez,laengeallekursangaben)>0 THEN kurszumplanblockeintragen(compress(kursbez),blockzeile(iblock).blockbez) FI ;poskursINCR laengekursPER ;FI PER .END PROC kurseaufbloeckeschemauebernehmen;PROC kurseaufbloeckebearbeiten: eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return( 1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst, gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen( kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1) ELIF alleplanblockbezeichner<>""THEN kurswahlsperresetzen(kurswahl1, kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung( meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=TRUE ; blockschemazeigen(2);feldfrei(fnrfach);feldfrei(fnrart);infeld(fnrfach); standardnprocFI ELSE standardmeldung(meldnrschemagibtsnicht,"");infeld( fnrgewjgst);return(1)FI FI END PROC kurseaufbloeckebearbeiten;PROC kurseaufbloeckeinformationenaufbereiten:fach:=text(standardmaskenfeld(fnrfach ),laengefach);fachart:=text(standardmaskenfeld(fnrart),laengeart);IF gueltigefachartkombination(fach,fachart,wochenstundenzahl)THEN kurswahl2holen (kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1) ELSE informationenwirklichaufbereiten;standardnprocFI ELSE standardmeldung( meldnrfachartkombinationungueltig,"");return(1)FI . informationenwirklichaufbereiten:feldschutzfuerinfosetzen;standardmaskenfeld( fach,fnrausgabefach);anzahlschuelermitfachart:=anzahlschuelermitwahl(fach,"", fachart,"");standardmaskenfeld(text(anzahlschuelermitfachart), fnranzahlschueler);standardmaskenfeld(text(wochenstundenzahl), fnrwochenstunden);kursezufachundartbestimmen;standardmaskenfeld(text( anzahlkursezufachart),fnranzahlkurse);IF anzahlkursezufachart>0THEN anzahlschuelerprokurs:=anzahlschuelermitfachartDIV anzahlkursezufachart; standardmaskenfeld(text(anzahlschuelerprokurs),fnrschuelerprokurs)ELSE standardmaskenfeld(" ",fnrschuelerprokurs)FI ;iblock:=0;posplanblock:=1; WHILE posplanblock"" THEN standardmaskenfeld(compress(gefundenerkurs),ifnr);standardmaskenfeld( compress(gefundenerblock1),ifnr+1);standardmaskenfeld(compress( gefundenerblock2),ifnr+2);anzahlkursezufachartINCR 1ELSE standardmaskenfeld( "",ifnr);standardmaskenfeld("",ifnr+1);standardmaskenfeld("",ifnr+2)FI ; kurstab(ifachkurs).kursname:=standardmaskenfeld(ifnr);kurstab(ifachkurs). blocknr1:=standardmaskenfeld(ifnr+1);kurstab(ifachkurs).blocknr2:= standardmaskenfeld(ifnr+2);ifnrINCR felderprokursPER . suchegewuenschtenkursinkursendeshj:gefundenerkurs:="";WHILE poskurs<=length( allekursedesgewhj)REP angabenzueinemkurs:=subtext(allekursedesgewhj,poskurs, poskurs+laengeallekursangaben-1);IF subtext(angabenzueinemkurs,1,2)=fachCAND subtext(angabenzueinemkurs,9,10)=fachartTHEN gefundenerkurs:=subtext( angabenzueinemkurs,1,6);gefundeneplanbloecke:=kursdaten(gefundenerkurs, kennungplanbloecke);gefundenerblock1:=subtext(gefundeneplanbloecke,1,3); gefundenerblock2:=subtext(gefundeneplanbloecke,4,6);gefundenerkurs:=subtext( gefundenerkurs,3)FI ;poskursINCR laengeallekursangabenUNTIL gefundenerkurs<> ""PER .END PROC kurseaufbloeckeinformationenaufbereiten;BOOL PROC gueltigefachartkombination(TEXT CONST prueffach,pruefart,INT VAR auswochenstundenzahl):INT VAR postreffer;IF fachartkombinationen=""THEN standardmeldung(meldnrbittewarten,"");holeallefachartkombinationenFI ; postreffer:=suchpos(fachartkombinationen,prueffach+pruefart,laengefachartstd) ;IF postreffer=0THEN FALSE ELSE auswochenstundenzahl:=int( fachartkombinationenSUB (postreffer+incrwstd));TRUE FI . holeallefachartkombinationen:TEXT VAR aktuellesschuljahr:=schulkenndatum( schuljahr);inittupel(dnrfaecherangebot);fanghj:=aktuelleshalbjahr;fangsj:= aktuellesschuljahr;IF NOT (gewhalbjahr=aktuelleshalbjahrAND gewschuljahr= aktuellesschuljahr)THEN geplanteshjundsjberechnen(fanghj,fangsj)FI ;putwert( fnrfangsj,fangsj);putwert(fnrfanghj,fanghj);putwert(fnrfangjgst,gewjgst); search(dnrfaecherangebot,FALSE );statleseschleife(dnrfaecherangebot,fangsj, fanghj,fnrfangsj,fnrfanghj,PROC fanglesen)END PROC gueltigefachartkombination ;PROC fanglesen(BOOL VAR b):IF dbstatus=0AND wert(fnrfangsj)=fangsjAND wert( fnrfanghj)=fanghjAND wert(fnrfangjgst)=gewjgstTHEN fachartkombinationenCAT text(wert(fnrfangfach),laengefach);fachartkombinationenCAT text(wert( fnrfangart),laengeart);fachartkombinationenCAT text(wert(fnrfangwochenstd),1) ELSE b:=TRUE FI END PROC fanglesen;PROC kurseaufbloeckerechtehaelftezeigen( BOOL CONST rechts):rechtetabellenhaelftezeigen:=rechts;letztecursorfnrbs2:= infeld;blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe );standardfelderausgeben;infeld(letztecursorfnrbs2);return(1)END PROC kurseaufbloeckerechtehaelftezeigen;PROC kurseaufbloeckeaenderungenspeichern( BOOL CONST speichern):IF speichernTHEN kurszuordnungenpruefen;IF pruefstatus> 0THEN infeld(pruefstatus);return(1)ELSE kurszuordnungenspeichern; kurswahl0sichern(kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELSE kurswahl1sichern(kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELSE zurueckzumbearbeitungsanfangFI FI ;FI ;ELSE standardmeldung( meldnrnichtspeichern,"");zurueckzumbearbeitungsanfangFI . kurszuordnungenpruefen:standardmeldung(meldnrdatenwerdengeprueft,""); pruefstatus:=0;ifnr:=fnrersterkurs;WHILE ifnr""OR standardmaskenfeld(ifnr+ 2)<>"")THEN pruefstatus:=ifnr;standardmeldung(meldnrbitteangabeergaenzen,""); LEAVE kurszuordnungenpruefenFI ;pruefblockbez:=standardmaskenfeld(ifnr+1);IF ungueltigepruefblockbezTHEN pruefstatus:=ifnr+1;standardmeldung( meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefenFI ;pruefblockbez:= standardmaskenfeld(ifnr+2);IF ungueltigepruefblockbezTHEN pruefstatus:=ifnr+2 ;standardmeldung(meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefen FI ;ifnrINCR felderprokursPER .ungueltigepruefblockbez:pruefblockbez<>""AND ( suchpos(alleplanblockbez,pruefblockbez,planblocklaenge)=0COR length(compress( pruefblockbez))""THEN WHILE ifnrpruef> fnrersterkursREP ifnrpruefDECR felderprokurs;IF kursbez=compress( standardmaskenfeld(ifnrpruef))THEN LEAVE kursbezdoppeltangegebenWITH TRUE FI ;PER ;FI ;FALSE .kurszuordnungenspeichern:TEXT VAR kompkursbez; standardmeldung(meldnrspeichern,"");ifnr:=fnrersterkurs;ifachkurs:=1;WHILE ifnr""THEN IF kurstab(ifachkurs).kursname=""THEN kursneuaufnehmen ELSE kursevtlueberschreibenFI ELSE IF kurstab(ifachkurs).kursname<>""THEN kursentfernenFI FI ;ifachkursINCR 1;ifnrINCR felderprokursPER . kursevtlueberschreiben:IF kompkursbez=kurstab(ifachkurs).kursnameTHEN kursbez :=standardmaskenfeld(fnrausgabefach);kursbezCAT kompkursbez; planbloeckezumkurseintragen(kursbez,standardmaskenfeld(ifnr+1), standardmaskenfeld(ifnr+2))ELSE kursentfernen;kursneuaufnehmenFI . kursneuaufnehmen:kursbez:=standardmaskenfeld(fnrausgabefach);kursbezCAT kompkursbez;kurseintragen(standardmaskenfeld(fnrausgabefach),kompkursbez, standardmaskenfeld(fnrwochenstunden),standardmaskenfeld(fnrart)); planbloeckezumkurseintragen(kursbez,standardmaskenfeld(ifnr+1), standardmaskenfeld(ifnr+2)).kursentfernen:kursbez:=standardmaskenfeld( fnrausgabefach);kursbezCAT kurstab(ifachkurs).kursname;kursloeschen(fach, kurstab(ifachkurs).kursname).zurueckzumbearbeitungsanfang:wstdfelderschutz:= TRUE ;IF speichernTHEN blockschemaneufuellen;blockschemaausgebenab(1)FI ; eingabefeldersperren(fnrersterkurs,fnrletzterblock);feldfrei(fnrfach); feldfrei(fnrart);FOR ifnrFROM fnrwochenstundenUPTO fnrletzterblockREP standardmaskenfeld("",ifnr)PER ;infeld(fnrfach);return(2). blockschemaneufuellen:iblock:=0;posplanblock:=1;WHILE posplanblock" "THEN standardmeldung(meldnrblocknichtteilbar,"")ELIF text(blocknr,2)=naechsteblocknummerTHEN standardmeldung( meldnrblocknichtteilbar,"")ELIF standardmaskenfeld(ifnr)<"0"OR standardmaskenfeld(ifnr)>blockzeile(iblock).wstdTHEN standardmeldung( meldnrangabenichtsinnvoll,"")ELSE teilblockabspaltendurchfuehrenFI ;return(1) .naechsteblocknummer:IF iblock=letzterblockTHEN ""ELSE text(blockzeile(iblock +1).blockbez,2)FI .teilblockabspaltendurchfuehren:blockwstd1:=int( standardmaskenfeld(ifnr));blockwstd2:=int(blockzeile(iblock).wstd)-blockwstd1 ;planblockteilen(text(blocknr,2),text(blockwstd1),text(blockwstd2)); kurswahl1sichern(kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandelnELSE erstergezeigterblock:=iblock;blockschemafuellen; blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe); standardfelderausgeben;infeld(fnrerstewstd)FI END PROC kurseaufbloecketeilblockabspalten;PROC iblockbestimmen:iblock:= erstergezeigterblock+incrblock.incrblock:(ifnr-fnrerstewstd)DIV felderprozeileEND PROC iblockbestimmen;PROC kurseaufbloecketeilblockentfernen :ifnr:=infeld;blocknr:=standardmaskenfeld(ifnr-1);IF (blocknrSUB posblockkennung)<>" "THEN standardmeldung(meldnrteilblockentfernen,"")ELSE iblockbestimmen;IF teilbloeckevorhandenTHEN IF teilblockkurseidentischTHEN allekursedesblocks:=blockzeile(iblock+1).kurse;planblockloeschen(blockzeile( iblock+1).blockbez);planblockloeschen(blockzeile(iblock+2).blockbez); allekurseinblocknreintragen;kurswahl1sichern(kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandelnELSE blockschemafuellen; blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe); standardfelderausgeben;infeld(fnrerstewstd)FI ELSE standardmeldung( meldnrteilblockentfernen,"")FI ELSE standardmeldung(meldnrteilblockentfernen, "")FI FI ;return(1).teilbloeckevorhanden:text(blocknr,laengeblocknr)= naechsteblocknummer.naechsteblocknummer:IF iblock=letzterblockTHEN ""ELSE text(blockzeile(iblock+1).blockbez,laengeblocknr)FI .teilblockkurseidentisch: blockzeile(iblock+1).kurse=blockzeile(iblock+2).kurse. allekurseinblocknreintragen:poskurs:=1;WHILE poskurs<=length( allekursedesblocks)REP kursbez:=subtext(allekursedesblocks,poskurs,poskurs+ laengekurs-1);kurszumplanblockeintragen(kursbez,blocknr);poskursINCR laengekursPER .END PROC kurseaufbloecketeilblockentfernen;PROC kurseaufbloeckeschemanichtweiteraendern:INT VAR meldnrfehler; eingetragenewochenstundenmerken;pruefstatus:=0; allewochenstundenangabenpruefen;IF pruefstatus<>0THEN standardmeldung( meldnrfehler,"");blockschemaausgebenab(pruefstatus);infeld( fnrersteblockangabe);standardfelderausgeben;infeld(fnrerstewstd);return(1) ELSE standardmeldung(meldnrspeichern,"");wochenstundenspeichern; kurswahl1sichern(kurswahlstatus);feldfrei(fnrfach);feldfrei(fnrart); wstdfelderschutz:=TRUE ;eingabefeldersperren(fnrerstewstd,fnrletztewstd, felderprozeile);infeld(fnrfach);return(2)FI .allewochenstundenangabenpruefen: INT VAR testint;iblock:=1;WHILE iblock<=letzterblockAND pruefstatus=0REP testint:=int(blockzeile(iblock).wstd);IF NOT lastconversionokTHEN pruefstatus :=iblock;meldnrfehler:=meldnrkeinezahlELIF ((blockzeile(iblock).blockbez)SUB posblockkennung)=kennungteilblockbTHEN IF int(blockzeile(iblock-2).wstd)<>int (blockzeile(iblock-1).wstd)+int(blockzeile(iblock).wstd)THEN pruefstatus:= iblock-2;meldnrfehler:=meldnrstundensummmestimmtnichtFI FI ;iblockINCR 1PER . wochenstundenspeichern:FOR iblockFROM 1UPTO letzterblockREP planblockeintragen(blockzeile(iblock).blockbez,blockzeile(iblock).wstd)PER . END PROC kurseaufbloeckeschemanichtweiteraendern;PROC eingangsbehandlung(INT CONST art):pruefstatus:=0;aktjgst:=standardmaskenfeld(fnraktjgst);gewhalbjahr :=standardmaskenfeld(fnrhalbjahr);gewjgst:=standardmaskenfeld(fnrgewjgst); neuanjgst:=standardmaskenfeld(fnrneuanjgst);kopiehalbjahr:=standardmaskenfeld (fnrherkunfthj);kopiejgst:=standardmaskenfeld(fnrherkunftjgst); aktuelleshalbjahr:=schulkenndatum(schulhalbjahr);allgemeinefelderpruefen;IF pruefstatus=0THEN IF art=1OR art=2THEN bearbeitungfelderpruefenELIF art=3 THEN uebernahmefelderpruefen;planbloeckemitkursenuebernehmen:= standardmaskenfeld(fnrmitkursen)<>""FI FI .allgemeinefelderpruefen: standardpruefe(3,fnrgewjgst,jgst11,jgst13,"",pruefstatus);IF pruefstatus>0 THEN LEAVE allgemeinefelderpruefenFI ;standardpruefe(3,fnrhalbjahr,hj1,hj2,"" ,pruefstatus);IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;IF aktjgst<>""THEN IF int(aktuelleshalbjahr)=hj2THEN standardpruefe(3,fnraktjgst ,jgst10,jgst13,"",pruefstatus)ELSE standardpruefe(3,fnraktjgst,jgst11,jgst13, "",pruefstatus)FI ;IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ; IF neuanjgst<>""THEN standardpruefe(3,fnrneuanjgst,jgst11,jgst13,"", pruefstatus);IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ;IF aktjgst<>""THEN IF neuanjgst<>""THEN IF int(neuanjgst)<>int(aktjgst)+1THEN standardmeldung(meldnrfalschejgstfolge,"");pruefstatus:=fnraktjgst;LEAVE allgemeinefelderpruefenFI ;gewschueler:=""ELSE gewschueler:= nuraktuelleschuelerFI ELIF neuanjgst=""THEN standardmeldung( meldnrbitteangabeergaenzen,"");pruefstatus:=fnraktjgst;LEAVE allgemeinefelderpruefenELSE gewschueler:=nurneuangemeldete;aktjgst:=text(int( neuanjgst)-1)FI ;IF aktjgst>gewjgstCOR (aktjgst=gewjgstAND aktuelleshalbjahr> gewhalbjahr)THEN standardmeldung(meldnrfalschebezugsjgst,"");pruefstatus:= fnrgewjgst;LEAVE allgemeinefelderpruefenFI .bearbeitungfelderpruefen:IF standardmaskenfeld(fnrherkunftjgst)<>""THEN standardmeldung( meldnrfeldleerlassen,"");pruefstatus:=fnrherkunftjgst;LEAVE bearbeitungfelderpruefenFI ;IF standardmaskenfeld(fnrherkunfthj)<>""THEN standardmeldung(meldnrfeldleerlassen,"");pruefstatus:=fnrherkunfthj;LEAVE bearbeitungfelderpruefenFI ;IF standardmaskenfeld(fnrmitkursen)<>""THEN standardmeldung(meldnrfeldleerlassen,"");pruefstatus:=fnrmitkursen;LEAVE bearbeitungfelderpruefenFI .uebernahmefelderpruefen:standardpruefe(3, fnrherkunftjgst,jgst11,jgst13,"",pruefstatus);IF pruefstatus>0THEN LEAVE uebernahmefelderpruefenFI ;standardpruefe(3,fnrherkunfthj,hj1,hj2,"", pruefstatus);IF pruefstatus>0THEN LEAVE uebernahmefelderpruefenFI ;IF gewjgst =kopiejgstCAND gewhalbjahr=kopiehalbjahrTHEN pruefstatus:=fnrgewjgst; standardmeldung(meldnruebernahmeingleicheshj,"");LEAVE uebernahmefelderpruefenFI ;END PROC eingangsbehandlung;BOOL PROC eingangsmaskenfehler:pruefstatus<>0END PROC eingangsmaskenfehler;INT PROC suchpos(TEXT CONST quelle,suchtext,INT CONST laenge):INT VAR findpos:=pos( quelle,suchtext);WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE suchpos WITH findposELSE findpos:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND PROC suchpos;PROC eingabefeldersperren(INT CONST von,bis): eingabefeldersperren(von,bis,1)END PROC eingabefeldersperren;PROC eingabefeldersperren(INT CONST von,bis,abstand):INT VAR ifnr:=von;WHILE ifnr <=bisREP feldschutz(ifnr);ifnrINCR abstandPER END PROC eingabefeldersperren; PROC eingabefelderoeffnen(INT CONST von,bis):eingabefelderoeffnen(von,bis,1) END PROC eingabefelderoeffnen;PROC eingabefelderoeffnen(INT CONST von,bis, abstand):INT VAR ifnr:=von;WHILE ifnr<=bisREP feldfrei(ifnr);ifnrINCR abstand PER END PROC eingabefelderoeffnen;PROC initfelderdeseingangsbildschirms:INT VAR i;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1(i):=""PER END PROC initfelderdeseingangsbildschirms;PROC wertedeseingangsbildschirmsmerken:INT VAR i;letztecursorfnr:=infeld;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1( i):=standardmaskenfeld(i)PER END PROC wertedeseingangsbildschirmsmerken;PROC wertedeseingangsbildschirmsholen:INT VAR i;FOR iFROM 1UPTO feldanzmaskeeingangREP standardmaskenfeld(feldbs1(i),i)PER END PROC wertedeseingangsbildschirmsholen;TEXT PROC textzweistellig(INT CONST i):IF i< 10THEN "0"+text(i)ELSE text(i)FI END PROC textzweistellig;END PACKET kurseaufplanbloeckelegen