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
|
PACKET raumwuenschepruefenDEFINES raumwuenschepruefenstarten,
raumwuenschepruefenlistedrucken:INT VAR fnrakthj:=2,fnrausgabebildschirm:=3,
fnrausgabedrucker:=4;LET meldnrlistewirdgedruckt=58,meldnrkeinelv=326,
meldnrkeinesugruppen=334,meldnrinbearbeitung=352,meldnrzuvielesugruppen=356,
meldnrstundenplanwirdaufbereitet=357,meldnrzuvielelv=358,
meldnrstundenplanserverfehlt=376,meldnrbasisalt=377,meldnrbasisinkons=378;
LET protname="Einhaltung der Raumwünsche";FILE VAR prot;LET raumgruppendatei=
"Datei mit Raumgruppen";FILE VAR datraumgruppen;LET schuljahr="Schuljahr",
schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort";LET
ueberschrift="Einhaltung der Raumwünsche, Stundenplan ",texthalbjahr=
". Halbjahr",kopfzeile1="Lehrver- Zeit belegter Anmerkungen",kopfzeile2=
"anstaltung Raum";LET meldkeinwunschraumfrei=
"kein Wunsch- oder Ersatzraum frei",meldwunschraumfrei=" frei",
meldkeinwunschangegeben="Raum fehlt, kein Raumwunsch angegeben";LET
fallkeinwunschraumfrei=1,fallwunschraumfrei=2,fallkeinwunschangegeben=3;LET
laengeschulname=61;LET strich="-",schraegstrich="/",blank=" ",vierblanks=
" ",leerraum=" ",kennzhell="#",editorzusatztasten="vr";LET laengeraum=4
,laengelv=8;LET kennunglv="L",kennungraum="R",kennungwunschraum="RW",
kennungersatzraum="RE";LET erstestunde=1,letztestunde=66,zeitbelegt="1";LET
posraeumeinrgzeile=5;TEXT VAR aktsj:="",akthj:="",gewsj,gewhj;TEXT VAR
auszeile;TEXT VAR jgst,lv,letztelv,raum,freierwunschraum,wunschraeumederlv,
raeumederzeit,raumgruppenzeile,zeitenderlv;INT VAR izeit;INT VAR posraum;INT
VAR fstatusstuplan;PROC raumwuenschepruefenstarten:INT VAR fnrfehler:=0;
standardpruefe(5,fnrausgabebildschirm,fnrausgabedrucker,0,"",fnrfehler);IF
fnrfehler<>0THEN infeld(fnrfehler);return(1)ELSE
schulhalbjahrbestimmenundstundenplanholen;IF fstatusstuplan<>0THEN
stundenplanfehlerbehandeln;return(1)ELSE pruefungraumwuenschedurchfuehren;IF
listedirektdruckenTHEN standardmeldung(meldnrlistewirdgedruckt,"");print(
protname);forget(protname,quiet);return(1)ELSE zeigedatei(protname,
editorzusatztasten)FI ;FI FI .listedirektdrucken:standardmaskenfeld(
fnrausgabedrucker)<>"".schulhalbjahrbestimmenundstundenplanholen:IF aktsj=""
THEN aktsj:=schulkenndatum(schuljahr);akthj:=schulkenndatum(schulhalbjahr)FI
;gewsj:=aktsj;gewhj:=akthj;IF standardmaskenfeld(fnrakthj)=""THEN
geplanteshjundsjberechnen(gewhj,gewsj);FI ;stundenplanhalbjahrsetzen(gewhj,
gewsj);standardmeldung(meldnrstundenplanwirdaufbereitet,"");
stundenplanbasisundstundenplanholen(fstatusstuplan);IF fstatusstuplan=0THEN
stundenplanreorganisierenundsichern(fstatusstuplan)ELIF fstatusstuplan=8THEN
standardmeldung(meldnrbasisalt,"");stundenplanreorganisierenundsichern(
fstatusstuplan)FI .stundenplanfehlerbehandeln:IF fstatusstuplan=2THEN
standardmeldung(meldnrstundenplanserverfehlt,"")ELIF fstatusstuplan=4THEN
standardmeldung(meldnrkeinesugruppen,"")ELIF fstatusstuplan=5THEN
standardmeldung(meldnrzuvielesugruppen,"")ELIF fstatusstuplan=6THEN
standardmeldung(meldnrkeinelv,"")ELIF fstatusstuplan=7THEN standardmeldung(
meldnrzuvielelv,"")ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt,
"")ELIF fstatusstuplan=9THEN standardmeldung(meldnrbasisinkons,"")FI .
pruefungraumwuenschedurchfuehren:protokollvorbereiten;ausgabekopfaufbereiten;
raumgruppeninraumgruppendateiauslesen;letztelv:="";inittupel(
dnrlehrveranstaltungen);putwert(fnrlvsj,gewsj);putwert(fnrlvhj,gewhj);
statleseschleife(dnrlehrveranstaltungen,gewsj,gewhj,fnrlvsj,fnrlvhj,PROC
raeumeeinerlvpruefen);ausgabefussaufbereiten.protokollvorbereiten:forget(
protname,quiet);prot:=sequentialfile(output,protname).ausgabekopfaufbereiten:
auszeile:=text(schulkenndatum(schulname),laengeschulname);auszeileCAT date;
putline(prot,auszeile);putline(prot,schulkenndatum(schulort));line(prot);
auszeile:=ueberschrift;auszeileCAT subtext(gewsj,1,2);auszeileCAT
schraegstrich;auszeileCAT subtext(gewsj,3,4);auszeileCAT ", ";auszeileCAT
gewhj;auszeileCAT texthalbjahr;putline(prot,auszeile);putline(prot,length(
auszeile)*strich);line(prot);putline(prot,kopfzeile1);putline(prot,kopfzeile2
);putline(prot,65*strich).ausgabefussaufbereiten:line(prot);putline(prot,20*
blank+20*strich).raumgruppeninraumgruppendateiauslesen:IF NOT exists(
raumgruppendatei)THEN datraumgruppen:=sequentialfile(output,raumgruppendatei)
;inittupel(dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp
,fnrrgraeume,PROC raumgruppeindateischreiben)FI .END PROC
raumwuenschepruefenstarten;PROC raumgruppeindateischreiben(BOOL VAR b):IF
dbstatus=0THEN putline(datraumgruppen,text(wert(fnrrgraumgrp),laengeraum)+
wert(fnrrgraeume))ELSE b:=TRUE FI END PROC raumgruppeindateischreiben;PROC
raeumeeinerlvpruefen(BOOL VAR b):IF dbstatus<>0OR wert(fnrlvsj)<>gewsjOR wert
(fnrlvhj)<>gewhjTHEN b:=TRUE ELSE pruefeallelveintraegeFI .
pruefeallelveintraege:jgst:=jgstzweistellig(intwert(fnrlvjgst));lv:=text(jgst
+wert(fnrlvfachkennung),laengelv);standardmeldung(meldnrinbearbeitung,lv+
kennzhell);wunschraeumezulvbestimmen;zeitenderlv:=allezeitenvon(kennunglv,lv)
;FOR izeitFROM erstestundeUPTO letztestundeREP IF (zeitenderlvSUB izeit)=
zeitbelegtTHEN prueferaumeintragFI PER .wunschraeumezulvbestimmen:
wunschraeumederlv:="";raum:=datenzurlv(kennungwunschraum,lv);IF raum<>""THEN
IF bezeichnungzulaessig(kennungraum,raum)THEN wunschraeumederlvCAT raumELSE
wunschraeumederlvCAT raeumederraumgruppeFI ;FI ;raum:=datenzurlv(
kennungersatzraum,lv);IF raum<>""THEN IF bezeichnungzulaessig(kennungraum,
raum)THEN wunschraeumederlvCAT raumELSE wunschraeumederlvCAT
raeumederraumgruppeFI ;FI .prueferaumeintrag:TEXT VAR suchpara,suchlv;
planeintraglesen(izeit,kennunglv,lv,suchlv,raum,suchpara);raeumederzeit:=
datenderzeit(izeit,kennungraum);IF wunschraeumederlv<>""THEN
erstenfreienwunschraumbestimmen;IF freierwunschraum=""THEN IF
belegterraumistkeinwunschraumTHEN inlisteschreiben(fallkeinwunschraumfrei)FI
ELIF freierwunschraumistbesseralsbelegterTHEN inlisteschreiben(
fallwunschraumfrei)FI ELIF raum=leerraumTHEN inlisteschreiben(
fallkeinwunschangegeben)FI .erstenfreienwunschraumbestimmen:freierwunschraum
:="";posraum:=1;WHILE posraum<length(wunschraeumederlv)REP freierwunschraum:=
subtext(wunschraeumederlv,posraum,posraum+laengeraum-1);IF suchpos(
raeumederzeit,freierwunschraum,laengeraum)=0THEN LEAVE
erstenfreienwunschraumbestimmenFI ;posraumINCR laengeraumPER ;
freierwunschraum:="".belegterraumistkeinwunschraum:suchpos(wunschraeumederlv,
raum,laengeraum)=0.freierwunschraumistbesseralsbelegter:raum=leerraumOR (
suchpos(wunschraeumederlv,freierwunschraum,laengeraum)<suchpos(
wunschraeumederlv,raum,laengeraum)).END PROC raeumeeinerlvpruefen;TEXT PROC
raeumederraumgruppe:datraumgruppen:=sequentialfile(modify,raumgruppendatei);
toline(datraumgruppen,1);col(datraumgruppen,1);WHILE NOT eof(datraumgruppen)
REP downety(datraumgruppen,raum);IF col(datraumgruppen)=1CAND NOT eof(
datraumgruppen)THEN readrecord(datraumgruppen,raumgruppenzeile);LEAVE
raeumederraumgruppeWITH subtext(raumgruppenzeile,posraeumeinrgzeile)ELSE col(
datraumgruppen,col(datraumgruppen)+1)FI ;PER ;"".END PROC raeumederraumgruppe
;PROC inlisteschreiben(INT CONST fallnr):auszeile:=jgst;auszeileCAT blank;
auszeileCAT subtext(lv,3,4);auszeileCAT blank;auszeileCAT subtext(lv,5);
auszeileCAT blank;auszeileCAT text(tagstunde(izeit,TRUE ),8);auszeileCAT raum
;auszeileCAT vierblanks;auszeileCAT blank;IF fallnr=fallkeinwunschraumfrei
THEN auszeileCAT meldkeinwunschraumfreiELIF fallnr=fallwunschraumfreiTHEN
auszeileCAT freierwunschraum;auszeileCAT meldwunschraumfreiELIF fallnr=
fallkeinwunschangegebenTHEN auszeileCAT meldkeinwunschangegebenFI ;IF
letztelv<>lvTHEN line(prot);letztelv:=lvFI ;putline(prot,auszeile)END PROC
inlisteschreiben;PROC raumwuenschepruefenlistedrucken(BOOL CONST drucken):IF
druckenTHEN print(protname)FI ;forget(protname,quiet);enter(2)END PROC
raumwuenschepruefenlistedrucken;INT PROC suchpos(TEXT CONST quelle,suchtext,
INT CONST laenge):INT VAR findpos:=pos(quelle,suchtext);WHILE findpos>0REP
IF findposMOD laenge=1THEN LEAVE suchposWITH findposELSE findpos:=pos(quelle,
suchtext,findpos+1);FI PER ;findposEND PROC suchpos;TEXT PROC jgstzweistellig
(INT CONST intjgst):IF intjgst=0THEN "00"ELIF intjgst>4AND intjgst<10THEN "0"
+text(intjgst)ELSE text(intjgst)FI END PROC jgstzweistellig;END PACKET
raumwuenschepruefen;
|