summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/0.grundfunktionen local
blob: d7b0fc8aa8de8d3d27834987d60b9bad9f74aff9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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