From 04e68443040c7abad84d66477e98f93bed701760 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 4 Feb 2019 13:09:03 +0100 Subject: Initial import --- app/schulis/2.2.1/src/0.hjd grundfunktionen | 110 ++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 app/schulis/2.2.1/src/0.hjd grundfunktionen (limited to 'app/schulis/2.2.1/src/0.hjd grundfunktionen') diff --git a/app/schulis/2.2.1/src/0.hjd grundfunktionen b/app/schulis/2.2.1/src/0.hjd grundfunktionen new file mode 100644 index 0000000..f553908 --- /dev/null +++ b/app/schulis/2.2.1/src/0.hjd grundfunktionen @@ -0,0 +1,110 @@ +PACKET isphjdgrundfunktionenDEFINES lieferehalbjahreszeile,lieferehjdgrenzen, +put,putwert,wert,init,halbjahresdatenloeschen,schluesselfuerhjdsetzen, +neueklasseinhalbjahresdateneintragen,:LET maxanzfelder=100;LET punkt=".", +anzkenndat=3;LET null=0,niltext="",blank=" ";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 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 +;teiltextEND 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 iniltextTHEN stringCAT ((posi-i-1)*" ");stringCAT (text(t,laenge)) +FI ELSE replace(string,posi,text(t,laenge))FI ;putwert(fnr,string)END PROC +putwert;PROC put(TAG CONST t,ROW maxanzfelderTEXT VAR pfeld,INT CONST von,bis +):INT VAR i;FOR iFROM vonUPTO bisREP IF fieldexists(t,i)THEN put(t,pfeld(i),i +)FI ;PER ;END PROC put;PROC put(TAG CONST t,ROW maxanzfelderTEXT VAR pfeld, +INT CONST pos):INT VAR i;FOR iFROM posUPTO maxanzfelderREP IF fieldexists(t,i +)THEN put(t,pfeld(i),i)FI ;PER ;END PROC put;PROC init(ROW maxanzfelderTEXT +VAR feld):INT VAR i;FOR iFROM 1UPTO maxanzfelderREP feld(i):=""PER .END PROC +init;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; +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 #beisuche +TRUE #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#.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);selupdate(dnrhalbjahresdaten);.END PROC +neueklasseinhalbjahresdateneintragen;END PACKET isphjdgrundfunktionen; + -- cgit v1.2.3