app/schulis/2.2.1/src/0.grundfunktionen local

Raw file
Back to index

PACKET ispgrundfunktionenlocalDEFINES lieferehalbjahreszeile,
lieferehjdgrenzen,schulisdbname,baisydbname,putwert,wert,init,
halbjahresdatenloeschen,schluesselfuerhjdsetzen,
neueklasseinhalbjahresdateneintragen,schulkenndatum,datumskonversion,
datumrekonversion,melde,jgstaufber:LET punkt=".",anzkenndat=3;LET null=0,
niltext="",blank=" ";LET dnrhalbjahresdaten=88,fnrhjdjgst=94,fnrhjdkennung=95
,dnrschluessel=137,fnrschlsachgebiet=138,fnrschlschluessel=139,
fnrschllangtext=140,ixhjdfamrufgebjgsthj=263;INT VAR jgstgrenze;TEXT VAR 
halbjahrgrenze;LET maxhalbjahre=18,anzahlhalbjahrevoraktuell=5,
gesamtanzahlhalbjahre=12,laengehalbjahreseintrag=4;TEXT CONST zeilehalbjahre
:="05.105.206.106.207.107.208.108.209.109.2"+
"10.110.211.111.212.112.213.113.2";INT CONST gesamtzeilenlaenge:=
gesamtanzahlhalbjahre*laengehalbjahreseintrag;INT VAR ihalbjahr;ROW 
maxhalbjahreSTRUCT (INT vorher,nachher)VAR anzahlhjd;
initialisierehalbjahresdatentabelle;PROC lieferehalbjahreszeile(TEXT VAR 
zeile,TEXT CONST hjdkennung):INT VAR subtextbeginn:=pos(zeilehalbjahre,
hjdkennung);INT VAR subtextende;ihalbjahr:=(subtextbeginnDIV 
laengehalbjahreseintrag)+1;TEXT VAR blanksvorher:=((anzahlhalbjahrevoraktuell
-anzahlhjd(ihalbjahr).vorher)*laengehalbjahreseintrag)*blank;subtextbeginn:=(
ihalbjahr-anzahlhjd(ihalbjahr).vorher-1)*laengehalbjahreseintrag+1;
subtextende:=(ihalbjahr+anzahlhjd(ihalbjahr).nachher)*laengehalbjahreseintrag
;TEXT VAR interessanterteilderzeilehalbjahre:=subtext(zeilehalbjahre,
subtextbeginn,subtextende);zeile:=text(blanksvorher+
interessanterteilderzeilehalbjahre,gesamtzeilenlaenge).END PROC 
lieferehalbjahreszeile;PROC initialisierehalbjahresdatentabelle:anzahlhjd(1).
vorher:=0;anzahlhjd(1).nachher:=1;anzahlhjd(2).vorher:=1;anzahlhjd(2).nachher
:=1;anzahlhjd(3).vorher:=1;anzahlhjd(3).nachher:=1;anzahlhjd(4).vorher:=2;
anzahlhjd(4).nachher:=1;anzahlhjd(5).vorher:=1;anzahlhjd(5).nachher:=1;
anzahlhjd(6).vorher:=2;anzahlhjd(6).nachher:=1;anzahlhjd(7).vorher:=1;
anzahlhjd(7).nachher:=1;anzahlhjd(8).vorher:=2;anzahlhjd(8).nachher:=1;
anzahlhjd(9).vorher:=1;anzahlhjd(9).nachher:=1;anzahlhjd(10).vorher:=2;
anzahlhjd(10).nachher:=1;anzahlhjd(11).vorher:=1;anzahlhjd(11).nachher:=1;
anzahlhjd(12).vorher:=2;anzahlhjd(12).nachher:=6;anzahlhjd(13).vorher:=1;
anzahlhjd(13).nachher:=5;anzahlhjd(14).vorher:=2;anzahlhjd(14).nachher:=4;
anzahlhjd(15).vorher:=2;anzahlhjd(15).nachher:=3;anzahlhjd(16).vorher:=3;
anzahlhjd(16).nachher:=2;anzahlhjd(17).vorher:=4;anzahlhjd(17).nachher:=1;
anzahlhjd(18).vorher:=5;anzahlhjd(18).nachher:=0.END PROC 
initialisierehalbjahresdatentabelle;PROC lieferehjdgrenzen(INT VAR anfang,
ende,TEXT CONST hjdkennung):ihalbjahr:=(poshjdkennungDIV 
laengehalbjahreseintrag)+1;anfang:=-anzahlhjd(ihalbjahr).vorher;ende:=
anzahlhjd(ihalbjahr).nachher.poshjdkennung:pos(zeilehalbjahre,hjdkennung).
END PROC lieferehjdgrenzen;TEXT PROC schulisdbname:"EUMELbase.schulis"END 
PROC schulisdbname;TEXT PROC baisydbname:"EUMELbase.baisy"END PROC 
baisydbname;TEXT PROC wert(INT CONST fnr,posi,laenge):TEXT VAR teiltext:=
subtext(wert(fnr),posi,posi+laenge-1);INT VAR anfang:=pos(teiltext," ");IF 
teiltext=laenge*" "THEN teiltext:=""ELSE WHILE anfang>0REP IF subtext(
teiltext,anfang,laenge)=(laenge-anfang+1)*" "THEN teiltext:=text(teiltext,
anfang-1);anfang:=0ELSE anfang:=pos(teiltext," ",anfang+1)FI PER FI ;teiltext
END PROC wert;PROC putwert(INT CONST fnr,TEXT CONST t,INT CONST posi,laenge):
INT VAR i:=length(wert(fnr));TEXT VAR string:=wert(fnr);IF i<posiTHEN IF t<>
niltextTHEN stringCAT ((posi-i-1)*" ");stringCAT (text(t,laenge))FI ELSE 
replace(string,posi,text(t,laenge))FI ;putwert(fnr,string)END PROC putwert;
PROC init(ROW 100TEXT VAR feld):INT VAR i;FOR iFROM 1UPTO 100REP feld(i):=""
PER .END PROC init;TEXT PROC datumskonversion(TEXT CONST datum):TEXT VAR d:=
datum;IF nurblanksoderleer(datum)OR d="  .  .  "THEN "01.01.00"ELSE changeall
(d," ","0");IF nochnichtkonvertiertTHEN insertchar(d,".",3);insertchar(d,".",
6);FI ;dFI .nochnichtkonvertiert:pos(d,".")=0.ENDPROC datumskonversion;BOOL 
PROC nurblanksoderleer(TEXT CONST t):INT VAR i;FOR iFROM 1UPTO length(t)REP 
IF (tSUB i)<>" "THEN LEAVE nurblanksoderleerWITH FALSE FI PER ;TRUE ENDPROC 
nurblanksoderleer;TEXT PROC datumrekonversion(TEXT CONST datum):TEXT VAR d:=
datum;changeall(d,".","");IF d="010100"THEN d:=""FI ;dENDPROC 
datumrekonversion;PROC melde(TEXT CONST txt):melde(txt,24)END PROC melde;
PROC melde(TEXT CONST txt,INT CONST zeile):LET maxlaenge=72,spalte=4;INT VAR 
txtlaenge,pos;TEXT VAR ausgabetxt:="";txtlaenge:=min(length(txt),maxlaenge);
pos:=(maxlaenge-txtlaenge)DIV 2;ausgabetxtCAT (pos*" ");ausgabetxtCAT txt;
cursor(spalte,zeile);out(text(ausgabetxt,maxlaenge))END PROC melde;TEXT PROC 
jgstaufber(TEXT CONST jgst):LET erstestellejgst="0",maxsek1=10;INT VAR ijgst
:=int(jgst);IF ijgst>=maxsek1THEN jgstELIF ijgst=0THEN ""ELSE erstestellejgst
+text(ijgst)FI END PROC jgstaufber;PROC halbjahresdatenloeschen(ROW 
anzkenndatTEXT CONST kenndatum,TEXT CONST altejgst,neuejgst,neueshalbjahr):
BOOL CONST jgsthochgesetzt:=neuejgst>altejgst;INT VAR loeschevorher,
loeschenachher,jgstpos,maxhjdvorherneu,maxhjdnachherneu;TEXT VAR 
jgstcathalbjahr:=neuejgst+punkt+neueshalbjahr,grenzehalbjahr:="";IF neuejgst
<>altejgstTHEN loeschenderhalbjahresdatenvorbereiten;
loeschenderhalbjahresdatenFI .loeschenderhalbjahresdatenvorbereiten:
lieferehjdgrenzen(maxhjdvorherneu,maxhjdnachherneu,jgstcathalbjahr);jgstpos:=
pos(zeilehalbjahre,jgstcathalbjahr);IF jgsthochgesetztTHEN loeschevorher:=((
abs(maxhjdvorherneu))*4);grenzehalbjahr:=subtext(zeilehalbjahre,jgstpos-
loeschevorher,jgstpos-loeschevorher+3);ELSE loeschenachher:=(maxhjdnachherneu
*4);grenzehalbjahr:=subtext(zeilehalbjahre,jgstpos+loeschenachher,jgstpos+
loeschenachher+3);FI ;jgstgrenze:=int(subtext(grenzehalbjahr,1,2));
halbjahrgrenze:=subtext(grenzehalbjahr,4);.loeschenderhalbjahresdaten:IF 
jgsthochgesetztTHEN halbjahresdatenloeschen(PROC (INT CONST )pred,kenndatum,
halbjahrgrenze,jgstgrenze,jgsthochgesetzt);ELSE halbjahresdatenloeschen(PROC 
(INT CONST )succ,kenndatum,halbjahrgrenze,jgstgrenze,jgsthochgesetzt);FI .
END PROC halbjahresdatenloeschen;PROC halbjahresdatenloeschen(PROC (INT 
CONST )step,ROW anzkenndatTEXT CONST kenndatum,TEXT CONST hjgrenze,INT CONST 
jgstgrenze,BOOL CONST vorher):hjddatenloeschen(PROC step,kenndatum,
dnrhalbjahresdaten,ixhjdfamrufgebjgsthj,hjgrenze,jgstgrenze,vorher);.END 
PROC halbjahresdatenloeschen;PROC hjddatenloeschen(PROC (INT CONST )step,ROW 
anzkenndatTEXT CONST kenndatum,INT CONST dateinummer,index,TEXT CONST 
hjgrenze,INT CONST jgstgrenze,BOOL CONST vorher):TEXT VAR hj,jg;
parsenooffields(8);schluesselfuerhjdsetzen(dateinummer,kenndatum,hjgrenze,
jgstgrenze);hj:=wert(dateinummer+5);#vorläufig#jg:=wert(dateinummer+6);#
vorläufig#search(index,FALSE );IF dbstatus=0CAND richtigersatz#CAND 
eigentlichunnötig#THEN #beisucheTRUE #hj:=wert(dateinummer+5);jg:=wert(
dateinummer+6);step(index);IF NOT vorherCAND dbstatus=okCAND wiederholerTHEN 
step(index);FI ;loeschschleife;ELIF dbstatus=okCAND gleicherschuelerTHEN IF 
vorherTHEN step(index);FI ;loeschschleifeFI ;#vorläufig#reinitparsing.
wiederholer:gleicherschuelerCAND hj=wert(dateinummer+5)CAND jg=wert(
dateinummer+6).gleicherschueler:kenndatum(1)=wert(dateinummer+1)CAND 
kenndatum(2)=wert(dateinummer+2)CAND kenndatum(3)=datumrekonversion(wert(
dateinummer+3)).richtigersatz:#hoffentlichüberflüssig#gleicherschuelerCAND 
wert(dateinummer+5)=hjCAND wert(dateinummer+6)=jg.loeschschleife:WHILE 
dbstatus=okCAND gleicherschuelerREP delete(dateinummer);step(index);PER .END 
PROC hjddatenloeschen;PROC schluesselfuerhjdsetzen(INT CONST dateinummer,ROW 
anzkenndatTEXT CONST kenndatum,TEXT CONST halbjahrgrenze,INT CONST jgstgrenze
):TEXT VAR jgsttext:=text(jgstgrenze);inittupel(dateinummer);putwert(
dateinummer+1,kenndatum(1));putwert(dateinummer+2,kenndatum(2));putwert(
dateinummer+3,datumskonversion(kenndatum(3)));putwert(dateinummer+5,
halbjahrgrenze);putwert(dateinummer+6,jgstaufber(jgsttext)).END PROC 
schluesselfuerhjdsetzen;PROC schluesselfuerhjdsetzen(INT CONST dateinummer,
ROW anzkenndatTEXT CONST kenndatum,TEXT CONST sj,hj,jgst):inittupel(
dateinummer);putwert(dateinummer+1,kenndatum(1));putwert(dateinummer+2,
kenndatum(2));putwert(dateinummer+3,datumskonversion(kenndatum(3)));putwert(
dateinummer+4,sj);putwert(dateinummer+5,hj);putwert(dateinummer+6,jgstaufber(
jgst)).END PROC schluesselfuerhjdsetzen;PROC 
neueklasseinhalbjahresdateneintragen(ROW anzkenndatTEXT CONST kenndatum,TEXT 
CONST sj,hj,jgst,neueklasse):halbjahresdatensuchen;IF datenvorhandenTHEN IF 
schuelergruppegeaendertTHEN halbjahresdatenaendernFI ;FI .
halbjahresdatensuchen:schluesselfuerhjdsetzen(dnrhalbjahresdaten,kenndatum,sj
,hj,niltext);search(dnrhalbjahresdaten,TRUE );.datenvorhanden:dbstatus=null.
schuelergruppegeaendert:wert(fnrhjdjgst)<>jgstOR wert(fnrhjdkennung)<>
neueklasse.halbjahresdatenaendern:putwert(fnrhjdjgst,jgst);putwert(
fnrhjdkennung,neueklasse);update(dnrhalbjahresdaten);.END PROC 
neueklasseinhalbjahresdateneintragen;TEXT PROC schulkenndatum(TEXT CONST 
schluessel):LET schulkenndaten="c02 schulkenndaten";TEXT VAR schuldaten:="";
systemdboff;inittupel(dnrschluessel);putwert(fnrschlsachgebiet,schulkenndaten
);putwert(fnrschlschluessel,schluessel);search(dnrschluessel,TRUE );IF 
dbstatus=okTHEN schuldaten:=wert(fnrschllangtext)ELSE schuldaten:=""FI ;
schuldatenENDPROC schulkenndatum;END PACKET ispgrundfunktionenlocal