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
|