summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/2.kurse auf planbloecke legen
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2019-02-04 13:09:03 +0100
committerLars-Dominik Braun <lars@6xq.net>2019-02-04 13:09:03 +0100
commit04e68443040c7abad84d66477e98f93bed701760 (patch)
tree2b6202afae659e773bf6916157d23e83edfa44e3 /app/schulis/2.2.1/src/2.kurse auf planbloecke legen
downloadeumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.gz
eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.bz2
eumel-src-04e68443040c7abad84d66477e98f93bed701760.zip
Initial import
Diffstat (limited to 'app/schulis/2.2.1/src/2.kurse auf planbloecke legen')
-rw-r--r--app/schulis/2.2.1/src/2.kurse auf planbloecke legen449
1 files changed, 449 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/2.kurse auf planbloecke legen b/app/schulis/2.2.1/src/2.kurse auf planbloecke legen
new file mode 100644
index 0000000..f23d29c
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.kurse auf planbloecke legen
@@ -0,0 +1,449 @@
+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 posplanblock<length(
+alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(alleplanblockbez,
+posplanblock,posplanblock+2);blockzeile(iblock).blockbez:=blocknr;blockzeile(
+iblock).wstd:=planblockdaten(blocknr,kennungwstd);blockzeile(iblock).frei:=0;
+blockzeile(iblock).gesamt:=anzahlfreierschuelerimplanblock(subtext(blocknr,1,
+2),blocknrSUB 3,"","","","");blockzeile(iblock).kurse:=planblockdaten(blocknr
+,kennungkurse);posplanblockINCR planblocklaengeUNTIL iblock=maxtabzeilenPER ;
+letzterblock:=iblockEND PROC blockschemafuellen;PROC blockschemaausgebenab(
+INT CONST ersterblockeintrag):erstergezeigterblock:=ersterblockeintrag;iblock
+:=ersterblockeintrag-1;ifnr:=fnrersteblockangabe;FOR izeileFROM 1UPTO
+zeilenprobildschirmREP IF iblock<letzterblockTHEN iblockINCR 1;
+volleblockzeileausgebenELSE leereblockzeileausgebenFI ;ifnrINCR
+felderprozeilePER ;letztergezeigterblock:=iblock.leereblockzeileausgeben:
+standardmaskenfeld(" ",ifnr);standardmaskenfeld(" ",ifnr+1);
+standardmaskenfeld(" ",ifnr+2);standardmaskenfeld(" ",ifnr+3);FOR ikurs
+FROM 1UPTO maxkurseREP standardmaskenfeld(" ",ifnr+3+ikurs)PER ;
+feldschutz(ifnr+1).volleblockzeileausgeben:standardmaskenfeld(blockzeile(
+iblock).blockbez,ifnr);standardmaskenfeld(blockzeile(iblock).wstd,ifnr+1);
+standardmaskenfeld(text(blockzeile(iblock).frei),ifnr+2);standardmaskenfeld(
+text(blockzeile(iblock).gesamt),ifnr+3);allekursedesblocks:=blockzeile(iblock
+).kurse;IF rechtetabellenhaelftezeigenTHEN poskurs:=(maxkurse*laengekurs)+1
+ELSE poskurs:=1FI ;FOR ikursFROM 1UPTO maxkurseREP kursbez:=subtext(
+allekursedesblocks,poskurs,poskurs+laengekurs-1);IF kursbez=""THEN kursbez:=
+" "ELSE kursbez:=subtext(kursbez,1,2)+" "+subtext(kursbez,3,6)FI ;
+standardmaskenfeld(kursbez,ifnr+3+ikurs);poskursINCR laengekursPER ;IF
+wstdfelderschutzTHEN feldschutz(ifnr+1)ELSE feldfrei(ifnr+1)FI END PROC
+blockschemaausgebenab;PROC kurseaufbloeckeschemaspeichern(BOOL CONST
+speichern):IF speichernTHEN eingetragenewochenstundenmerken;pruefstatus:=0;
+allewochenstundenangabenpruefen;IF pruefstatus<>0THEN 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<length(alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(
+alleplanblockbez,posplanblock,posplanblock+2);blockzeile(iblock).frei:=
+anzahlfreierschuelerimplanblock(subtext(blocknr,1,2),blocknrSUB 3,fach,"",
+fachart,"");posplanblockINCR planblocklaengeUNTIL iblock=letzterblockPER ;
+blockschemaausgebenab(erstergezeigterblock);infeld(fnrwochenstunden);
+standardfelderausgeben;infeld(fnrersterkurs).feldschutzfuerinfosetzen:
+feldschutz(fnrfach);feldschutz(fnrart);eingabefelderoeffnen(fnrersterkurs,
+fnrletzterblock).kursezufachundartbestimmen:allekursedesgewhj:=allekurse;
+poskurs:=1;anzahlkursezufachart:=0;ifnr:=fnrersterkurs;FOR ifachkursFROM 1
+UPTO maxfachkursREP suchegewuenschtenkursinkursendeshj;IF gefundenerkurs<>""
+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<fnrletzterblockREP kursbez:=
+standardmaskenfeld(ifnr);IF kursbezdoppeltangegebenTHEN pruefstatus:=ifnr;
+standardmeldung(meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefenFI
+;IF kursbez=""CAND (standardmaskenfeld(ifnr+1)<>""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))<laengeblocknr).kursbezdoppeltangegeben:INT VAR ifnrpruef:=
+ifnr;kursbez:=compress(kursbez);IF kursbez<>""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<fnrletzterblockREP kompkursbez:=compress(standardmaskenfeld(ifnr));IF
+kompkursbez<>""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<length(
+alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(alleplanblockbez,
+posplanblock,posplanblock+2);blockzeile(iblock).frei:=0;blockzeile(iblock).
+kurse:=planblockdaten(blocknr,kennungkurse);posplanblockINCR planblocklaenge
+UNTIL iblock=maxtabzeilenPER .END PROC kurseaufbloeckeaenderungenspeichern;
+INT PROC stundenzahl(INT CONST feldnr):pruefblockbez:=standardmaskenfeld(
+feldnr);IF pruefblockbez=""THEN 0ELSE int(planblockdaten(pruefblockbez,
+kennungwstd))FI END PROC stundenzahl;PROC kurseaufbloeckeschemaeinteilen:
+feldschutz(fnrfach);feldschutz(fnrart);wstdfelderschutz:=FALSE ;
+blockschemaausgebenab(erstergezeigterblock);infeld(fnrerstewstd);
+standardfelderausgeben;infeld(fnrerstewstd);standardnprocEND PROC
+kurseaufbloeckeschemaeinteilen;PROC kurseaufbloecketeilblockabspalten:ifnr:=
+infeld;blocknr:=standardmaskenfeld(ifnr-1);iblockbestimmen;IF (blocknrSUB
+posblockkennung)<>" "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
+