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