summaryrefslogtreecommitdiff
path: root/app/schulis
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2019-02-04 13:09:03 +0100
committerLars-Dominik Braun <lars@6xq.net>2019-02-04 13:09:03 +0100
commit04e68443040c7abad84d66477e98f93bed701760 (patch)
tree2b6202afae659e773bf6916157d23e83edfa44e3 /app/schulis
downloadeumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.gz
eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.bz2
eumel-src-04e68443040c7abad84d66477e98f93bed701760.zip
Initial import
Diffstat (limited to 'app/schulis')
-rw-r--r--app/schulis/2.2.1/data/db/2.BAISY-0bin0 -> 225280 bytes
-rw-r--r--app/schulis/2.2.1/data/db/2.BAISY-1bin0 -> 87552 bytes
-rw-r--r--app/schulis/2.2.1/data/db/BAISY-2bin0 -> 16384 bytes
-rw-r--r--app/schulis/2.2.1/data/db/BAISY-3bin0 -> 226304 bytes
-rw-r--r--app/schulis/2.2.1/data/db/BAISY-4bin0 -> 166400 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.baisybin0 -> 5120 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.baisy.data0bin0 -> 4096 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.baisy.data1bin0 -> 184320 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.baisy.tree0bin0 -> 1536 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.baisy.tree1bin0 -> 46080 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.baisy.treedescriptionbin0 -> 49152 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.schulisbin0 -> 28160 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.schulis.data0bin0 -> 4096 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.schulis.data1bin0 -> 16384 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.schulis.tree0bin0 -> 1536 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.schulis.tree1bin0 -> 18944 bytes
-rw-r--r--app/schulis/2.2.1/data/db/EUMELbase.schulis.treedescriptionbin0 -> 49152 bytes
-rw-r--r--app/schulis/2.2.1/data/vordrucke/VORDRUCKE.files49
-rw-r--r--app/schulis/2.2.1/data/vordrucke/fehlerliste konsistenzpruefung64
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 1147
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 538
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 1115
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 513
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck fuer wiederholer44
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck klassenbuchliste5
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine abmeldung54
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit diffd44
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit hjd48
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungsbescheinigung34
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungszulassung48
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck schulbescheinigung29
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft betroffene60
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft lehrer38
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl lehrer13
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl raeume13
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek114
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek214
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 kursli kopfueb10
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 protokoll versetzkonf6
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 unterrichtsvertlg fuer lehrer21
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck1 vertretungen14
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft betroffene3
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft lehrer7
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl lehrer9
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl raeume4
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek13
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek23
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 kursli zeile3
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 protokoll versetzkonf13
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 unterrichtsvertlg fuer lehrer3
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck2 vertretungen3
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft betroffene28
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft lehrer3
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl lehrer3
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl sek17
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck3 protokoll versetzkonf9
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft betroffene23
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft lehrer7
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck4 einzelstdpl sek13
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft betroffene38
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft lehrer20
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck5 einzelstdpl sek19
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck6 auskunft lehrer5
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck6 einzelstdpl sek13
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck7 auskunft lehrer3
-rw-r--r--app/schulis/2.2.1/data/vordrucke/vordruck7 einzelstdpl sek13
-rw-r--r--app/schulis/2.2.1/source-disk5
-rw-r--r--app/schulis/2.2.1/src/0.ANSCHREIBEN.files14
-rw-r--r--app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE TEIL2.files6
-rw-r--r--app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE.files6
-rw-r--r--app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN 2.files10
-rw-r--r--app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN.files15
-rw-r--r--app/schulis/2.2.1/src/0.ERFASSUNGEN LISTENWEISE.files10
-rw-r--r--app/schulis/2.2.1/src/0.ERFASSUNGEN.files2
-rw-r--r--app/schulis/2.2.1/src/0.IDA SERVER.files4
-rw-r--r--app/schulis/2.2.1/src/0.IDA SICHERUNG.files4
-rw-r--r--app/schulis/2.2.1/src/0.LISTEN 2.files18
-rw-r--r--app/schulis/2.2.1/src/0.LISTEN.files15
-rw-r--r--app/schulis/2.2.1/src/0.LOCAL.files4
-rw-r--r--app/schulis/2.2.1/src/0.anschr.druckereinstellung69
-rw-r--r--app/schulis/2.2.1/src/0.anschr.grundfunktionen193
-rw-r--r--app/schulis/2.2.1/src/0.anschr.steuerfunktionen einfach96
-rw-r--r--app/schulis/2.2.1/src/0.anschr.steuerfunktionen zusammengesetzt87
-rw-r--r--app/schulis/2.2.1/src/0.erf aufsichtszeiten201
-rw-r--r--app/schulis/2.2.1/src/0.erf zeitraster145
-rw-r--r--app/schulis/2.2.1/src/0.erf.faecher38
-rw-r--r--app/schulis/2.2.1/src/0.erf.schuldaten51
-rw-r--r--app/schulis/2.2.1/src/0.grundfunktionen local132
-rw-r--r--app/schulis/2.2.1/src/0.hjd grundfunktionen110
-rw-r--r--app/schulis/2.2.1/src/0.hoeherstufen local.prog312
-rw-r--r--app/schulis/2.2.1/src/0.ida.data170
-rw-r--r--app/schulis/2.2.1/src/0.ida.form34
-rw-r--r--app/schulis/2.2.1/src/0.ida.server51
-rw-r--r--app/schulis/2.2.1/src/0.klassengruppen definieren81
-rw-r--r--app/schulis/2.2.1/src/0.kurswahlbasis bereinigen34
-rw-r--r--app/schulis/2.2.1/src/0.liste der aufsichtszeiten93
-rw-r--r--app/schulis/2.2.1/src/0.liste der zeitrasterdaten101
-rw-r--r--app/schulis/2.2.1/src/0.listen.benutz84
-rw-r--r--app/schulis/2.2.1/src/0.listen.druckbearbeitung207
-rw-r--r--app/schulis/2.2.1/src/0.listen.faecher86
-rw-r--r--app/schulis/2.2.1/src/0.listen.klassengruppen104
-rw-r--r--app/schulis/2.2.1/src/0.listen.raumgruppen97
-rw-r--r--app/schulis/2.2.1/src/0.listen.schlueabku69
-rw-r--r--app/schulis/2.2.1/src/0.listen.schuelergruppen109
-rw-r--r--app/schulis/2.2.1/src/0.listen.schulen87
-rw-r--r--app/schulis/2.2.1/src/0.listen.steuerung67
-rw-r--r--app/schulis/2.2.1/src/0.listen.werkzeuge29
-rw-r--r--app/schulis/2.2.1/src/0.listenweise grundfunktionen51
-rw-r--r--app/schulis/2.2.1/src/0.listenweise klassen erf215
-rw-r--r--app/schulis/2.2.1/src/0.raumgruppen bearbeiten54
-rw-r--r--app/schulis/2.2.1/src/0.schulis schrifttyp9
-rw-r--r--app/schulis/2.2.1/src/0.schulkenndaten bearbeiten109
-rw-r--r--app/schulis/2.2.1/src/1.abgegangene aussortieren75
-rw-r--r--app/schulis/2.2.1/src/1.anschr.anmeldebestaetigung fuer jgst 5 und 1158
-rw-r--r--app/schulis/2.2.1/src/1.anschr.mitteilungen neuangemeldete und abgemeldete262
-rw-r--r--app/schulis/2.2.1/src/1.anschr.nachpruefungsbescheinigung150
-rw-r--r--app/schulis/2.2.1/src/1.anschr.nachpruefungszulassung146
-rw-r--r--app/schulis/2.2.1/src/1.anschr.schulbescheinigung61
-rw-r--r--app/schulis/2.2.1/src/1.anschr.wiederholer91
-rw-r--r--app/schulis/2.2.1/src/1.auskunft.betroffene259
-rw-r--r--app/schulis/2.2.1/src/1.erf.abmeldedaten142
-rw-r--r--app/schulis/2.2.1/src/1.erf.schuelerdaten605
-rw-r--r--app/schulis/2.2.1/src/1.halbjahresdaten bearbeiten679
-rw-r--r--app/schulis/2.2.1/src/1.hoeherstufen anw do.prog43
-rw-r--r--app/schulis/2.2.1/src/1.listen.abgem115
-rw-r--r--app/schulis/2.2.1/src/1.listen.adressen186
-rw-r--r--app/schulis/2.2.1/src/1.listen.anherk124
-rw-r--r--app/schulis/2.2.1/src/1.listen.gebu125
-rw-r--r--app/schulis/2.2.1/src/1.listen.gesamt106
-rw-r--r--app/schulis/2.2.1/src/1.listen.klassen157
-rw-r--r--app/schulis/2.2.1/src/1.listen.klassenbuch237
-rw-r--r--app/schulis/2.2.1/src/1.listen.nachpruefung155
-rw-r--r--app/schulis/2.2.1/src/1.listen.neuan121
-rw-r--r--app/schulis/2.2.1/src/1.listen.prot versetzkonferenz162
-rw-r--r--app/schulis/2.2.1/src/1.listen.wiederholer160
-rw-r--r--app/schulis/2.2.1/src/1.listenweise dif dat erf255
-rw-r--r--app/schulis/2.2.1/src/1.listenweise erg nachpr250
-rw-r--r--app/schulis/2.2.1/src/1.listenweise erg vers konf219
-rw-r--r--app/schulis/2.2.1/src/1.listenweise klassenbildung270
-rw-r--r--app/schulis/2.2.1/src/1.schuelerjgst aendern161
-rw-r--r--app/schulis/2.2.1/src/1.stat grundfunktionen70
-rw-r--r--app/schulis/2.2.1/src/1.stat intern337
-rw-r--r--app/schulis/2.2.1/src/2.AUSWERTUNGEN KURSWAHL.files7
-rw-r--r--app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL 2.files5
-rw-r--r--app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL.files8
-rw-r--r--app/schulis/2.2.1/src/2.erf wahldaten395
-rw-r--r--app/schulis/2.2.1/src/2.halbjahreswechsel fuer kursdaten77
-rw-r--r--app/schulis/2.2.1/src/2.konsistenzpruefung in kursdaten75
-rw-r--r--app/schulis/2.2.1/src/2.kursdaten exportieren226
-rw-r--r--app/schulis/2.2.1/src/2.kursdaten importieren199
-rw-r--r--app/schulis/2.2.1/src/2.kurse auf planbloecke legen449
-rw-r--r--app/schulis/2.2.1/src/2.kurswahl schnittstelle664
-rw-r--r--app/schulis/2.2.1/src/2.kurszuordnung und umwahl fuer einzelne schueler sek2420
-rw-r--r--app/schulis/2.2.1/src/2.kw anschr kurslisten sek290
-rw-r--r--app/schulis/2.2.1/src/2.likw kurskombinationen sek2166
-rw-r--r--app/schulis/2.2.1/src/2.likw schuelerwahl sek2173
-rw-r--r--app/schulis/2.2.1/src/2.likw wahl und kursdaten sek2246
-rw-r--r--app/schulis/2.2.1/src/2.schueler zu kursen zuordnen384
-rw-r--r--app/schulis/2.2.1/src/2.stand der kursbildung analysieren132
-rw-r--r--app/schulis/2.2.1/src/3.anschr.betroffene lehrer174
-rw-r--r--app/schulis/2.2.1/src/3.erf lehrer134
-rw-r--r--app/schulis/2.2.1/src/3.listen.lehrbef faecherweise104
-rw-r--r--app/schulis/2.2.1/src/3.listen.lehrbef lehrerweise100
-rw-r--r--app/schulis/2.2.1/src/3.listen.paraphen81
-rw-r--r--app/schulis/2.2.1/src/3.listen.sprechzeiten99
-rw-r--r--app/schulis/2.2.1/src/3.listen.wochenstunden114
-rw-r--r--app/schulis/2.2.1/src/3.listenweise lehrer erf95
-rw-r--r--app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 2.files5
-rw-r--r--app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 3.files6
-rw-r--r--app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN.files11
-rw-r--r--app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 2.files6
-rw-r--r--app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 3.files7
-rw-r--r--app/schulis/2.2.1/src/4.ERFASSUNGEN STUNDENPLAN.files11
-rw-r--r--app/schulis/2.2.1/src/4.anschr.unterrichtsvertlg fuer lehrer137
-rw-r--r--app/schulis/2.2.1/src/4.anschr.vertretungen149
-rw-r--r--app/schulis/2.2.1/src/4.aufsichten erstellen194
-rw-r--r--app/schulis/2.2.1/src/4.daten für intega aufbereiten462
-rw-r--r--app/schulis/2.2.1/src/4.daten für schulis aufbereiten184
-rw-r--r--app/schulis/2.2.1/src/4.einhaltung zeitwuensche pruefen195
-rw-r--r--app/schulis/2.2.1/src/4.einzelstdpl.lehrer113
-rw-r--r--app/schulis/2.2.1/src/4.einzelstdpl.raeume86
-rw-r--r--app/schulis/2.2.1/src/4.einzelstdpl.sek1233
-rw-r--r--app/schulis/2.2.1/src/4.einzelstdpl.sek2197
-rw-r--r--app/schulis/2.2.1/src/4.faecherangebot drucken110
-rw-r--r--app/schulis/2.2.1/src/4.faecherangebot planen369
-rw-r--r--app/schulis/2.2.1/src/4.halbjahreswechsel zum stundenplan120
-rw-r--r--app/schulis/2.2.1/src/4.konsistenzpruefung274
-rw-r--r--app/schulis/2.2.1/src/4.lehrveranstaltungen benennen480
-rw-r--r--app/schulis/2.2.1/src/4.liste ausgewaehlter kopplungen drucken72
-rw-r--r--app/schulis/2.2.1/src/4.listen.aufsichtsplan78
-rw-r--r--app/schulis/2.2.1/src/4.listen.unterrichtsverteilung252
-rw-r--r--app/schulis/2.2.1/src/4.raumwuensche pruefen117
-rw-r--r--app/schulis/2.2.1/src/4.springstunden lehrer analysieren122
-rw-r--r--app/schulis/2.2.1/src/4.springstunden schueler analysieren137
-rw-r--r--app/schulis/2.2.1/src/4.stand der stundenplanung analysieren98
-rw-r--r--app/schulis/2.2.1/src/4.stdpluebersichten425
-rw-r--r--app/schulis/2.2.1/src/4.stundenplan akt halbj uebernehmen141
-rw-r--r--app/schulis/2.2.1/src/4.stundenplan im dialog erstellen382
-rw-r--r--app/schulis/2.2.1/src/4.stundenplan nach lv erfassen133
-rw-r--r--app/schulis/2.2.1/src/4.stundenplan nach zeiten erfassen157
-rw-r--r--app/schulis/2.2.1/src/4.stundenplan raumweise erfassen135
-rw-r--r--app/schulis/2.2.1/src/4.stundenplan schnittstelle692
-rw-r--r--app/schulis/2.2.1/src/4.teilstdpl fach lehrer124
-rw-r--r--app/schulis/2.2.1/src/4.uv und kopplungen bearbeiten319
-rw-r--r--app/schulis/2.2.1/src/4.vertretungen organisieren318
-rw-r--r--app/schulis/2.2.1/src/4.vertretungsdaten bearbeiten279
-rw-r--r--app/schulis/2.2.1/src/4.zeitwuensche bearbeiten243
-rw-r--r--app/schulis/2.2.1/src/4.zeitwuensche drucken129
-rw-r--r--app/schulis/2.2.1/src/5.STATISTIK SERVER.files2
-rw-r--r--app/schulis/2.2.1/src/5.STATISTIK.files9
-rw-r--r--app/schulis/2.2.1/src/5.benennen116
-rw-r--r--app/schulis/2.2.1/src/5.datenbasis62
-rw-r--r--app/schulis/2.2.1/src/5.drucken153
-rw-r--r--app/schulis/2.2.1/src/5.erstellen146
-rw-r--r--app/schulis/2.2.1/src/5.felder263
-rw-r--r--app/schulis/2.2.1/src/5.manager47
-rw-r--r--app/schulis/2.2.1/src/5.merkmale52
-rw-r--r--app/schulis/2.2.1/src/5.statistik liste27
-rw-r--r--app/schulis/2.2.1/src/5.thesaurus38
-rw-r--r--app/schulis/2.2.1/src/6.IDA.files17
-rw-r--r--app/schulis/2.2.1/src/6.db q.sc222
-rw-r--r--app/schulis/2.2.1/src/6.db ref.sc20
-rw-r--r--app/schulis/2.2.1/src/6.db sel.sc127
-rw-r--r--app/schulis/2.2.1/src/6.db snd query.sc39
-rw-r--r--app/schulis/2.2.1/src/6.ida.auswahl23
-rw-r--r--app/schulis/2.2.1/src/6.ida.check162
-rw-r--r--app/schulis/2.2.1/src/6.ida.def.druck64
-rw-r--r--app/schulis/2.2.1/src/6.ida.definieren516
-rw-r--r--app/schulis/2.2.1/src/6.ida.druck261
-rw-r--r--app/schulis/2.2.1/src/6.ida.eingang87
-rw-r--r--app/schulis/2.2.1/src/6.ida.gen79
-rw-r--r--app/schulis/2.2.1/src/6.ida.grund182
-rw-r--r--app/schulis/2.2.1/src/6.ida.plausi114
-rw-r--r--app/schulis/2.2.1/src/insert schulis472
234 files changed, 25838 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/data/db/2.BAISY-0 b/app/schulis/2.2.1/data/db/2.BAISY-0
new file mode 100644
index 0000000..9412329
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/2.BAISY-0
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/2.BAISY-1 b/app/schulis/2.2.1/data/db/2.BAISY-1
new file mode 100644
index 0000000..5840f5d
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/2.BAISY-1
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/BAISY-2 b/app/schulis/2.2.1/data/db/BAISY-2
new file mode 100644
index 0000000..d5066ff
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/BAISY-2
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/BAISY-3 b/app/schulis/2.2.1/data/db/BAISY-3
new file mode 100644
index 0000000..dd2af90
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/BAISY-3
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/BAISY-4 b/app/schulis/2.2.1/data/db/BAISY-4
new file mode 100644
index 0000000..52ce9bf
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/BAISY-4
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy b/app/schulis/2.2.1/data/db/EUMELbase.baisy
new file mode 100644
index 0000000..2e9852b
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.data0 b/app/schulis/2.2.1/data/db/EUMELbase.baisy.data0
new file mode 100644
index 0000000..b11232d
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.data0
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.data1 b/app/schulis/2.2.1/data/db/EUMELbase.baisy.data1
new file mode 100644
index 0000000..3cdc6a2
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.data1
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree0 b/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree0
new file mode 100644
index 0000000..7b13c5c
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree0
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree1 b/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree1
new file mode 100644
index 0000000..026ef9f
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree1
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.treedescription b/app/schulis/2.2.1/data/db/EUMELbase.baisy.treedescription
new file mode 100644
index 0000000..ea123ac
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.treedescription
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis b/app/schulis/2.2.1/data/db/EUMELbase.schulis
new file mode 100644
index 0000000..fae85ba
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.data0 b/app/schulis/2.2.1/data/db/EUMELbase.schulis.data0
new file mode 100644
index 0000000..42a82fc
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.data0
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.data1 b/app/schulis/2.2.1/data/db/EUMELbase.schulis.data1
new file mode 100644
index 0000000..2e5fd82
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.data1
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree0 b/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree0
new file mode 100644
index 0000000..7bc7a83
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree0
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree1 b/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree1
new file mode 100644
index 0000000..c0daa5f
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree1
Binary files differ
diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.treedescription b/app/schulis/2.2.1/data/db/EUMELbase.schulis.treedescription
new file mode 100644
index 0000000..17154f0
--- /dev/null
+++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.treedescription
Binary files differ
diff --git a/app/schulis/2.2.1/data/vordrucke/VORDRUCKE.files b/app/schulis/2.2.1/data/vordrucke/VORDRUCKE.files
new file mode 100644
index 0000000..b055c9e
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/VORDRUCKE.files
@@ -0,0 +1,49 @@
+vordruck anmeldebestaetigung zur jgst 5
+vordruck anmeldebestaetigung zur jgst 11
+vordruck mitteilung ueber eine abmeldung
+vordruck mitteilung ueber eine anmeldung mit hjd
+vordruck mitteilung ueber eine anmeldung mit diffd
+vordruck schulbescheinigung
+vordruck fuer wiederholer
+vordruck nachpruefungsbescheinigung
+vordruck fuer anschreiben an herkunftsschulen fuer jgst 11
+vordruck fuer anschreiben an herkunftsschulen fuer jgst 5
+vordruck1 auskunft betroffene
+vordruck2 auskunft betroffene
+vordruck3 auskunft betroffene
+vordruck4 auskunft betroffene
+vordruck5 auskunft betroffene
+vordruck1 protokoll versetzkonf
+vordruck2 protokoll versetzkonf
+vordruck3 protokoll versetzkonf
+vordruck klassenbuchliste
+vordruck nachpruefungszulassung
+vordruck1 auskunft lehrer
+vordruck2 auskunft lehrer
+vordruck3 auskunft lehrer
+vordruck4 auskunft lehrer
+vordruck5 auskunft lehrer
+vordruck1 einzelstdpl lehrer
+vordruck2 einzelstdpl lehrer
+vordruck1 einzelstdpl raeume
+vordruck2 einzelstdpl raeume
+vordruck1 einzelstdpl sek1
+vordruck2 einzelstdpl sek1
+vordruck3 einzelstdpl sek1
+vordruck4 einzelstdpl sek1
+vordruck5 einzelstdpl sek1
+vordruck6 einzelstdpl sek1
+vordruck7 einzelstdpl sek1
+fehlerliste konsistenzpruefung
+vordruck6 auskunft lehrer
+vordruck7 auskunft lehrer
+vordruck1 unterrichtsvertlg fuer lehrer
+vordruck2 unterrichtsvertlg fuer lehrer
+vordruck1 vertretungen
+vordruck2 vertretungen
+vordruck1 einzelstdpl sek2
+vordruck2 einzelstdpl sek2
+vordruck1 kursli kopfueb
+vordruck2 kursli zeile
+vordruck3 einzelstdpl lehrer
+
diff --git a/app/schulis/2.2.1/data/vordrucke/fehlerliste konsistenzpruefung b/app/schulis/2.2.1/data/vordrucke/fehlerliste konsistenzpruefung
new file mode 100644
index 0000000..d1e0343
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/fehlerliste konsistenzpruefung
@@ -0,0 +1,64 @@
+Fall 1:
+Klassengruppe # : ungültige Schülergruppenbezeichnung #
+Fall 2:
+Raumgruppe # : ungültige Raumbezeichnung #
+Fall 3:
+Lehrveranstaltung # : ungültige Fachbezeichnung #
+Fall 4:
+Lehrveranstaltung # : ungültige Lehrerparaphe #
+Fall 5:
+Lehrveranstaltung # : # weder gültig als Klassengruppe, noch als
+Kennung einer Schülergruppe dieser Jgst.
+Fall 6:
+Lehrveranstaltung # , Klassengruppe # :
+ Fehlermeldung zur Klassengruppe beachten!
+Fall 7:
+Lehrveranstaltung # : # weder gültig als Raumgruppe, noch als Raum
+Fall 8:
+Lehrveranstaltung # : Raumgruppe # :
+ Fehlermeldung zur Raumgruppe beachten!
+Fall 9:
+Lehrer # : mehr Wochenstunden als Sollstunden
+Fall 10:
+Zeitwünsche: # ungültige Bezeichnung für #
+ ****** Zeitwunsch wurde gelöscht *******
+Fall 11:
+Stundenplan für Lehrveranstaltung # , Zeit # :
+ ungültige Lehrveranstaltungsbezeichnung
+ ****** Stundenplaneintrag wurde gelöscht ******
+Fall 12:
+Stundenplan für Lehrveranstaltung # , Zeit # :
+ Fehlermeldung für diese Lehrveranstaltung beachten!
+Fall 13:
+Stundenplan für Lehrveranstaltung # , Zeit # :
+ Lehrerparaphe zwischenzeitlich geändert : alt #, neu #
+ ****** neue Paraphe eingesetzt, keine Zeitüberschneidung ******
+Fall 14:
+Stundenplan für Lehrveranstaltung # , Zeit # :
+ Lehrerparaphe zwischenzeitlich geändert : alt #, neu #
+ für neue Paraphe evtl. Zeitüberschneidung
+Fall 15:
+Stundenplan für Lehrveranstaltung # , Zeit # :
+ ****** ungültige Raumangabe wurde gelöscht ******
+Fall 16:
+Stundenplan für Lehrveranstaltung # , Zeit # :
+ Kopplung zwischenzeitlich geändert: alt # , neu #
+ ****** neue Kopplung eingesetzt ******
+Fall 17:
+Stundenplan für Lehrveranstaltung # , Zeit # :
+ Zeitüberschneidung für Schüler
+Fall 18:
+Stundenplan für Zeit # : Zeit laut Zeitraster gesperrt
+ betrifft Lehrveranstaltung #
+ ****** Eintrag für diese Zeit wurde gelöscht ******
+Fall 19:
+Aufsichtsplan für Aufsichtszeit # : Aufsichtszeit ungültig
+ ****** Eintrag wurde gelöscht ******
+Fall 20:
+Aufsichtsplan für Aufsichtszeit # und Aufsichtsort #:
+ Aufsichtsort ungültig
+Fall 21:
+Aufsichtsplan für Aufsichtszeit # und Aufsichtsort #:
+ Lehrerparaphe ungültig
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 11 b/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 11
new file mode 100644
index 0000000..eca6b7e
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 11
@@ -0,0 +1,47 @@
+<502 >
+<503 >
+
+<504 > <501 >
+
+
+
+
+
+<511%v#<20> <21%#*<21> ><3>#m#<29> <30%#*<30> ><28>>
+<24 >>
+
+<25 >>
+
+
+
+
+
+
+<511%v#Ihre Anmeldung an unsere Schule zum Schuljahr <507>><512%w#Anmeldung der Schülerin #m#Anmeldung des Schülers ><511%m#<20> <21%#*<21> ><3>>
+<511%m#an unsere Schule zum Schuljahr <507>>
+
+
+Wir bestätigen hiermit, daß <511%v#Sie><512%w#die Schülerin #m#der Schüler ><511%m#<20> <21%#*<21> ><3>>
+entsprechend Ihrem Wunsch zum Schuljahr <507 >> in die Jahrgangsstufe 11
+unserer Schule aufgenommen <511%v#werden#m#wird>. Diese Zusage erfolgt unter der
+Bedingung, daß <511%v#Sie><512%m#der Schüler#w#die Schülerin> bis zum 3. Schultag
+des kommenden Schuljahres die entsprechenden Voraussetzungen <511%v#erfüllen#m#erfüllt>.
+
+In der Anlage finden Sie weitere Informationen und Termine.
+
+Es ist unbedingt erforderlich, daß <511%v#Sie><512%w#die Schülerin#m#der Schüler> an den
+Kurswahlen termingerecht <511%v#teilnehmen#m#teilnimmt>, damit die Schule das
+Unterrichtsangebot für das kommende Schuljahr gewährleisten kann. Aus dem
+gleichen Grund bitten wir auch, uns unverzüglich zu informieren, wenn
+<511%v#Sie><512%w#die Schülerin#m#der Schüler> nicht wie vorgesehen in unsere Schule
+eintreten <511%v#werden#m#wird>.
+
+
+Mit freundlichen Grüßen
+
+
+
+
+<506 >>
+(Schulleiter)
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 5 b/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 5
new file mode 100644
index 0000000..d9eff7f
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 5
@@ -0,0 +1,38 @@
+<502 >
+<503 >
+
+<504 > <501 >
+
+
+
+
+<29 >> <30%#*<30> ><28 >>
+<31 >>
+
+<32 >>
+
+
+
+
+
+
+Aufnahme <12%m#des Schülers#w#der Schülerin> <20 >> <21%#*<21> ><3 >> an
+unsere Schule zur Jahrgangsstufe 5
+
+
+Wir bestätigen hiermit, daß <12%w#Ihre Tochter#m#Ihr Sohn> <20 >>
+entsprechend Ihrem Wunsch zum Schuljahr <507 >> in die Jahrgangsstufe 5
+unserer Schule aufgenommen wurde.
+
+Einzelheiten zum Schulbeginn entnehmen Sie bitte dem beiliegenden
+Informationsblatt.
+
+
+Mit freundlichen Grüßen
+
+
+
+
+<506 >>
+(Schulleiter)
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 11 b/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 11
new file mode 100644
index 0000000..c61cb47
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 11
@@ -0,0 +1,15 @@
+Anmeldung von Schülern zur Jahrgangsstufe 11
+
+
+Sehr geehrte Damen und Herren,
+
+die nachstehend genannten Schülerinnen und Schüler Ihrer Schule wurden zum
+kommenden Schuljahr für die Jahrgangsstufe 11 an unserer Schule angemeldet.
+Wir bitten Sie, uns jeweils zu bestätigen, ob die Schülerin/der Schüler eine
+2. Fremdsprache gelernt hat, die den Bedingungen der Ausbildungs- und
+Prüfungsordnung der gymnasialen Oberstufe genügt. Wir bitten um Antwort bis
+zum Beginn des kommenden Schuljahrs.
+
+
+Mit freundlichen Grüßen
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 5 b/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 5
new file mode 100644
index 0000000..d6593ac
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 5
@@ -0,0 +1,13 @@
+Anmeldung von Schülern zur Jahrgangsstufe 5
+
+
+Sehr geehrte Damen und Herren,
+
+die nachstehend genannten Schülerinnen und Schüler Ihrer Schule wurden zum
+kommenden Schuljahr für die Jahrgangsstufe 5 an unserer Schule angemeldet.
+Wir bitten Sie, uns jeweils das Grundschulgutachten und das letzte Zeugnis
+dieser Schüler im Verlauf der nächsten zwei Wochen zuzusenden.
+
+
+Mit freundlichen Grüßen
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck fuer wiederholer b/app/schulis/2.2.1/data/vordrucke/vordruck fuer wiederholer
new file mode 100644
index 0000000..6f5a224
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck fuer wiederholer
@@ -0,0 +1,44 @@
+<502 >
+<503 >
+
+<504 > <501 >
+
+
+
+
+<511%v#<20> <21%#*<21> ><3>#m#<29> <30%#*<30> ><28>>
+<24 >>
+
+<25 >
+
+
+
+
+
+Versetzung zum Ende des Schuljahres <505 >>
+
+
+Laut Beschluß der Versetzungskonferenz<511%v# haben Sie>
+<512%w#hat Ihre Tochter #m#hat Ihr Sohn ><511%m#<20> >die Versetzung in die
+Jahrgangsstufe <513>> nicht erreicht.
+
+Das diesem Beschluß zugrundeliegende Zeugnis fügen wir als Anlage bei. Wir
+überlassen es Ihrer Entscheidung, ob<511%v# Sie>
+<512%w#Ihre Tochter #m#Ihr Sohn >am letzten Schultag
+<511%v#teilnehmen#m#teilnimmt>.
+
+Falls Sie wünschen, daß <511%v#Sie><512%w#Ihre Tochter#m#Ihr Sohn> in eine
+bestimmte Klasse/Tutorenkurs aufgenommen <511%v#werden#m#wird>, sind wir
+bemüht, dies zu realisieren, sofern Sie uns Ihren Wunsch und die Gründe
+dafür bis zum ersten Ferientag wissen lassen.
+
+
+Mit freundlichen Grüßen
+
+
+
+
+<506 >>
+(Schulleiter)
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck klassenbuchliste b/app/schulis/2.2.1/data/vordrucke/vordruck klassenbuchliste
new file mode 100644
index 0000000..880662a
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck klassenbuchliste
@@ -0,0 +1,5 @@
+<511%#*<511>>
+<503 >
+
+<512%#*<512>>
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine abmeldung b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine abmeldung
new file mode 100644
index 0000000..1493b9f
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine abmeldung
@@ -0,0 +1,54 @@
+<502 >
+<503 >
+
+<504 > <501 >
+
+
+
+
+
+Mitteilung über eine Abmeldung
+
+
+
+Am <512%#___________*<512>> verläßt unsere Schule:
+
+ Schüler: <513 >
+ Geburtsdatum: <514 >
+
+ Abgangsgrund: <515 >
+
+
+Klasse/Tutorenkurs: <519 >><520%#*, <520>>
+
+
+
+Kurs Fachlehrer Unterschr. Note Anz.entl
+ Bücher
+-------:------------------------------------:----------:----:--------
+
+<530 >><531 >><530%#<590>* <591>>
+<532 >><533 >><532%#<590>* <591>>
+<534 >><535 >><534%#<590>* <591>>
+<536 >><537 >><536%#<590>* <591>>
+<538 >><539 >><538%#<590>* <591>>
+<540 >><541 >><540%#<590>* <591>>
+<542 >><543 >><542%#<590>* <591>>
+<544 >><545 >><544%#<590>* <591>>
+<546 >><547 >><546%#<590>* <591>>
+<548 >><549 >><548%#<590>* <591>>
+<550 >><551 >><550%#<590>* <591>>
+<552 >><553 >><552%#<590>* <591>>
+<554 >><555 >><554%#<590>* <591>>
+<556 >><557 >><556%#<590>* <591>>
+<558 >><559 >><558%#<590>* <591>>
+
+
+
+ erreichter Abschluß: <516 >
+
+ Zeugnis ausgestellt am: ____________________
+
+Unterschrift Klassenlehrer/Tutor: ______________________________
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit diffd b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit diffd
new file mode 100644
index 0000000..8fbfa16
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit diffd
@@ -0,0 +1,44 @@
+<502 >
+<503 >
+
+<504 > <501 >
+
+
+
+
+
+Mitteilung über eine Anmeldung
+
+
+
+Ab dem <512 >> nimmt am Unterricht teil:
+
+
+ Schüler: <513 >
+ Geburtsdatum: <514 >
+
+ Adresse: <516 >
+ <517 >
+ Telefon: <518 >
+
+
+
+Klasse/Tutorenkurs: <519 >><520%#*, <520>>
+
+
+<530%#*Der Schüler nimmt teil am Unterricht in:>
+
+<<530 > <531 >
+<<532 > <533 >
+<<534 > <535 >
+<<536 > <537 >
+<<538 > <539 >
+<<540 > <541 >
+<<542 > <543 >
+<<544 > <545 >
+<<546 > <547 >
+<<548 > <549 >
+<<550 > <551 >
+<<552 > <553 >
+<<554 > <555 >
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit hjd b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit hjd
new file mode 100644
index 0000000..fa551f8
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit hjd
@@ -0,0 +1,48 @@
+<502 >
+<503 >
+
+<504 > <501 >
+
+
+
+
+
+Mitteilung über eine Anmeldung
+
+
+
+Ab dem <512 >> nimmt am Unterricht teil:
+
+
+ Schüler: <513 >
+ Geburtsdatum: <514 >
+
+ Adresse: <516 >
+ <517 >
+ Telefon: <518 >
+
+
+
+Klasse/Tutorenkurs: <519 >><520%#*, <520>>
+
+
+<530%#*Der Schüler nimmt teil am Unterricht in:>
+
+<530%#*Kurs Fach Fachlehrer>
+<530%#*-------:-------------------------------:----------------------------->
+<530 > <531 > <532 >>
+<533 > <534 > <535 >>
+<536 > <537 > <538 >>
+<539 > <540 > <541 >>
+<542 > <543 > <544 >>
+<545 > <546 > <547 >>
+<548 > <549 > <550 >>
+<551 > <552 > <553 >>
+<554 > <555 > <556 >>
+<557 > <558 > <559 >>
+<560 > <561 > <562 >>
+<563 > <564 > <565 >>
+<566 > <567 > <568 >>
+<569 > <570 > <571 >>
+<572 > <573 > <574 >>
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungsbescheinigung b/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungsbescheinigung
new file mode 100644
index 0000000..406c2c7
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungsbescheinigung
@@ -0,0 +1,34 @@
+<502 >
+<503 >
+
+<504 > <501 >
+
+
+
+
+
+
+
+Bescheinigung
+
+
+Gemäß <519%#*<519>> hat <514%m#der Schüler#w#die Schülerin>
+<513 >> <512%#*<512> ><511 >>,
+geboren am <515 >>, in Jahrgangsstufe <517>> im
+Fach <518%# *<518 >> an einer Prüfung
+teilgenommen.
+<514%m#Er#w#Sie> hat die Nachprüfung <516%x#nicht >bestanden und damit
+<520%# *<520>> <516%x#nicht >erreicht.
+
+Diese Bescheinigung ist nur in Verbindung mit dem Versetzungszeugnis des
+Schuljahres <508 >> gültig. Auf Antrag wird ein neues Zeugnis mit
+der in der Nachprüfung erreichten Note ausgestellt.
+
+
+
+
+
+
+<506 >>
+(Schulleiter)
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungszulassung b/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungszulassung
new file mode 100644
index 0000000..032afcb
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungszulassung
@@ -0,0 +1,48 @@
+<502 >
+<503 >
+
+<504 > <501 >
+
+
+
+
+
+<515%v#<513> <512%#*<512> ><511>#m#<521> <520%#*<520> ><519>>
+<515%v#<517>#m#<522>>
+
+<515%v#<518>#m#<523>>
+
+
+
+
+
+Versetzung zum Ende des Schuljahres <505 >>
+
+
+Gemäß <524%#*<524>> hat die Versetzungskonferenz festgestellt, daß
+<515%v#Sie#m#<514%m#Ihr Sohn#w#Ihre Tochter> <513>> eine Nachprüfung
+<525%#*in <525>> ablegen <515 %v#können#m#kann>.
+
+Durch die Nachprüfung kann nachträglich <526%# *<526>>
+erworben werden.
+
+Die Prüfung findet in den ersten Tagen nach den Schulferien statt.
+Meldungen sind unter Angabe des Prüfungsfaches bis zum Ende der
+zweiten Ferienwoche im Sekretariat abzugeben. Die genauen
+Prüfungstermine erfragen Sie bitte in der letzten Ferienwoche im
+Sekretariat.
+
+Das diesem Beschluß zugrundeliegende Zeugnis fügen wir als Anlage
+bei. Wir überlassen es Ihrer Entscheidung, ob
+<515%v#Sie#m#<514%m#Ihr Sohn#w#Ihre Tochter> <513>> am letzten
+Schultag am Unterricht <515%v#teilnehmen#m#teilnimmt>.
+
+
+Mit freundlichen Grüßen
+
+
+
+
+<506 >>
+(Schulleiter)
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck schulbescheinigung b/app/schulis/2.2.1/data/vordrucke/vordruck schulbescheinigung
new file mode 100644
index 0000000..84c95a8
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck schulbescheinigung
@@ -0,0 +1,29 @@
+<502 >
+<503 >
+
+<504 > <501 >
+
+
+
+
+
+Bescheinigung
+
+
+
+
+<12%m#Der Schüler#w#Die Schülerin> <20 >> <21%#*<21> ><3 >>,
+
+geboren am <5 >>,
+
+ist im Schuljahr <505 >> <12%m#Schüler#w#Schülerin> der Jahrgangsstufe <7>>
+unserer Schule.
+
+
+
+
+
+
+<506 >>
+(Schulleiter)
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft betroffene
new file mode 100644
index 0000000..c922e82
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft betroffene
@@ -0,0 +1,60 @@
+<502 > <501 >
+<504 >
+
+Auskunft über die im schulis-System gespeicherten Daten des Schülers
+
+Familienname: <3 >
+Namenszusatz: <21 > Geburtsname: <22 >
+ Rufname: <4 > Vornamen: <20 >
+Geburtsdatum: <5 >
+
+ Status: <6 > <583 >
+
+ Adresse: <24 >
+ <511 >
+ Telefon: <26 >
+ <512 >
+ Ortsteil: <27>> <513 >>
+
+erziehungsberechtigt: <34>> <514 >>
+ Name: <28 >
+ Vornamen: <29 >
+ Namenszusätze: <30 >
+ Adresse: <568 >
+ <515 >
+ Telefon: <569 >
+
+ Geburtsort/Kreis: <40 >> / <41 >>
+ Staatsangehörigkeit: <35 >> <516 >>
+ Muttersprache: <39 >> <517 >>
+ Spätaussiedler: <518 >>
+ Geschlecht: <12>> <519 >>
+ Religionszugehörigkeit: <36 >> <520 >>
+Zeugnisvermerk Religion: <521>>
+
+ Einschulungsjahr: <42>>
+ letzte Schule: <570 >
+ <571 >
+ <522 >
+ letzte Klasse dort: <15> Schulform: <582>> <523 >>
+
+ Eintritt in diese Schule: <43 > in Jahrgangsstufe: <13>>
+ Eintritt in Sek.II: <524>
+ aktuelle Schülergruppe: <7 >> <8 >>
+Zugang zur akt. Jahrgangsstufe: <10>> <525 >>
+ neuer Zug/Tutor: <11>
+
+ Abgangsdatum: <16 > Abgangsgrund: <17 >> <526 >>
+erworbener Abschluß: <18 >> <527 >>
+ neue Schule: <572 >
+ <573 >
+ <528 >
+
+ Vermerk1: <45 >
+ Vermerk2: <46 >
+ Vermerk3: <47 >
+ Vermerk4: <48 >
+ Vermerk5: <49 >
+ Vermerk6: <50 >
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft lehrer
new file mode 100644
index 0000000..7bedad8
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft lehrer
@@ -0,0 +1,38 @@
+<502 >
+<503 >
+<504 > <501 >
+
+ Auskunft an Betroffene im Sinne des Datenschutzesgesetzes
+ für: <511> <151%#*<151>> <513 >
+
+ (Stunden- und Aufsichtsplan werden auf Wunsch gesondert erstellt.)
+
+ Paraphe: <147>
+ Familienname: <148 >
+ Rufname: <149 >
+ Namenszusatz: <150 >
+ Amtsbezeichnung, Titel: <151 >
+ Geschlecht: <152>
+
+ Adresse Straße, Nr.: <164 >
+ PLZ, Ort: <165 >
+ Tel.Nr.: <166 >
+
+ Sprechzeiten: <163 >
+
+ Sollstunden: <153>
+ Pflichtstunden: <154>
+ Ermäßigung 1: <155> Grund: <156>(<550 >>)
+ Ermäßigung 2: <157> Grund: <158>(<551 >>)
+ Ermäßigung 3: <159> Grund: <160>(<552 >>)
+ Ermäßigung 4: <161> Grund: <162>(<553 >>)
+
+ Lehrbefähigung Fach 1: <514 > Art: <515>(<554 >>)
+ Fach 2: <516 > Art: <517>(<555 >>)
+ Fach 3: <518 > Art: <519>(<556 >>)
+ Fach 4: <520 > Art: <521>(<557 >>)
+ Fach 5: <522 > Art: <523>(<558 >>)
+ Fach 6: <524 > Art: <525>(<559 >>)
+
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl lehrer
new file mode 100644
index 0000000..5dc680e
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl lehrer
@@ -0,0 +1,13 @@
+<502 > <501 >
+<504 >
+
+
+Stundenplan für <511>> <151%#*<151>> <512 >>
+Schuljahr <514>>, <515>>. Halbjahr
+
+
+
+Std: Montag : Dienstag : Mittwoch : Donnerstag: Freitag : Samstag :
+---+-----------+-----------+-----------+-----------+-----------+-----------:
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl raeume b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl raeume
new file mode 100644
index 0000000..2158494
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl raeume
@@ -0,0 +1,13 @@
+<502 > <501 >
+<504 >
+
+
+Belegungsplan für Raum <511>> (<514 >>)
+Schuljahr <512>>, <513>>. Halbjahr
+
+
+
+Std: Montag : Dienstag : Mittwoch : Donnerstag: Freitag : Samstag :
+---+-----------+-----------+-----------+-----------+-----------+-----------:
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek1
new file mode 100644
index 0000000..e58f75f
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek1
@@ -0,0 +1,14 @@
+<502 > <501 >
+<504 >
+
+
+Stundenplan für Klasse <511>
+Schuljahr <512>>, <513>>. Halbjahr
+
+ Klassenleiter: <514 >
+Stellvertreter: <516 >
+
+Std: Montag : Dienstag : Mittwoch : Donnerstag: Freitag : Samstag :
+---+-----------+-----------+-----------+-----------+-----------+-----------:
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek2 b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek2
new file mode 100644
index 0000000..662b9f2
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek2
@@ -0,0 +1,14 @@
+<502 > <501 >
+<504 >
+
+
+Stundenplan für <511 >> <512 >>, geb. <513 >
+Schuljahr <514>>, <515>>. Halbjahr
+
+Tutorkurs: <516 >
+
+
+Std: Montag : Dienstag : Mittwoch : Donnerstag: Freitag : Samstag :
+---+-----------+-----------+-----------+-----------+-----------+-----------:
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 kursli kopfueb b/app/schulis/2.2.1/data/vordrucke/vordruck1 kursli kopfueb
new file mode 100644
index 0000000..b9a87c7
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 kursli kopfueb
@@ -0,0 +1,10 @@
+<502 > <501 >
+<504 >
+
+ Kurs : <520 >
+Lehrer : <521>><522 >
+
+Hinweis: Familienname, Rufname, Geburtsdatum
+-------+-------------------------------------------------------------------
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 protokoll versetzkonf b/app/schulis/2.2.1/data/vordrucke/vordruck1 protokoll versetzkonf
new file mode 100644
index 0000000..d064f40
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 protokoll versetzkonf
@@ -0,0 +1,6 @@
+<502 > <501 >
+<503 >
+
+
+Versetzungskonferenz zum Ende des Schuljahrs 19<505>, <511 >
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 unterrichtsvertlg fuer lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck1 unterrichtsvertlg fuer lehrer
new file mode 100644
index 0000000..0d85b97
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 unterrichtsvertlg fuer lehrer
@@ -0,0 +1,21 @@
+<502 >
+<503 >
+<504 > <501 >
+
+Unterrichtsverteilung im Schuljahr <520>, <521>>. Halbjahr
+
+<522>> <151>> <150 >> <148 >>
+
+
+ Paraphe: <147>
+
+ Sollstunden: <153>
+ Pflichtstunden: <154>
+ Ermäßigung 1: <155> Grund: <156>(<530 >>)
+ Ermäßigung 2: <157> Grund: <158>(<531 >>)
+ Ermäßigung 3: <159> Grund: <160>(<532 >>)
+ Ermäßigung 4: <161> Grund: <162>(<533 >>)
+
+ Lehrveranstaltungen : <<183> <534>> <535> Wstd.: <<536>
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 vertretungen b/app/schulis/2.2.1/data/vordrucke/vordruck1 vertretungen
new file mode 100644
index 0000000..e1b636d
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 vertretungen
@@ -0,0 +1,14 @@
+<502 >
+<503 >
+<504 > <501 >
+
+Aufstellung der Daten über Vertretungen und Freistunden
+
+für: <550 >
+
+
+Datum Zeit Art ausgefallene/vertretene
+ Lehrveranstaltungen
+--------+------+-----+-----------------------------
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft betroffene
new file mode 100644
index 0000000..2531674
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft betroffene
@@ -0,0 +1,3 @@
+Familienname: <3 >
+Namenszusatz: <21 > Rufname: <4 > (Fortsetzung)
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft lehrer
new file mode 100644
index 0000000..2be3ff8
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft lehrer
@@ -0,0 +1,7 @@
+
+Unterrichtsverteilung Schuljahr <526>>, <527>>.Halbjahr
+
+Jgst. Fach Kurs Wochenstd.
+
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl lehrer
new file mode 100644
index 0000000..f9e0f34
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl lehrer
@@ -0,0 +1,9 @@
+
+ Klassenleitung/Tutor für: <540 >
+
+stellv. Klassenleitung für: <541 >
+
+ Aufsichten: Ort Zeit
+
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl raeume b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl raeume
new file mode 100644
index 0000000..538fa14
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl raeume
@@ -0,0 +1,4 @@
+<520>> : <521 >: <522 >: <523 >: <524 >: <525 >: <526 >:
+ : <527> : <528> : <529> : <530> : <531> : <532> :
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek1
new file mode 100644
index 0000000..16a5152
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek1
@@ -0,0 +1,3 @@
+<520>> : <521 > : <522 > : <523 > : <524 > : <525 > : <526 > :
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek2 b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek2
new file mode 100644
index 0000000..a44f64b
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek2
@@ -0,0 +1,3 @@
+<540 > <541 >
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 kursli zeile b/app/schulis/2.2.1/data/vordrucke/vordruck2 kursli zeile
new file mode 100644
index 0000000..32a345c
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 kursli zeile
@@ -0,0 +1,3 @@
+ <523> : <524 >>, <525 >>, <526 >
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 protokoll versetzkonf b/app/schulis/2.2.1/data/vordrucke/vordruck2 protokoll versetzkonf
new file mode 100644
index 0000000..288806c
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 protokoll versetzkonf
@@ -0,0 +1,13 @@
+
+
+Datum: ________ Beginn:_____ Uhr, Ende:_____ Uhr
+
+
+Anwesend:
+
+ <512%#*<512>>
+
+Ort, Zeit und Tagesordnung sind den Mitgliedern ordnungsgemäß bekannt
+gegeben worden. Der Vorsitzende hat die Beschlußfähigkeit der Konferenz
+festgestellt.
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 unterrichtsvertlg fuer lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck2 unterrichtsvertlg fuer lehrer
new file mode 100644
index 0000000..f29b7d5
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 unterrichtsvertlg fuer lehrer
@@ -0,0 +1,3 @@
+ <<183> <534>> <535> <<536>
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 vertretungen b/app/schulis/2.2.1/data/vordrucke/vordruck2 vertretungen
new file mode 100644
index 0000000..441742c
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 vertretungen
@@ -0,0 +1,3 @@
+<520 > <521> <522 > <523 >
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft betroffene
new file mode 100644
index 0000000..aad98ea
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft betroffene
@@ -0,0 +1,28 @@
+
+Differenzierungsdaten:
+ 1. Fremdsprache: <55 >> <537 >>
+ von: <538> bis: <539>
+ 2. Fremdsprache: <58 >> <540 >>
+ von: <541> bis: <542>
+ 3. Fremdsprache: <61 >> <543 >>
+ von: <544> bis: <545>
+ 4. Fremdsprache: <64 >><546 >>
+ von: <547> bis: <548>
+ Religionsunterricht in: <67>> <549 >>
+ abgemeldet: <68 > wiederangemeldet: <69 >
+ Kunst/Musik: <70>> <550 >>
+Wahlpflichtfächer in 09.1: <71 >> <551 >>
+ <72 >> <552 >>
+Wahlpflichtfächer in 09.2: <73 >> <553 >>
+ <74 >> <554 >>
+Wahlpflichtfächer in 10.1: <75 >> <555 >>
+ <76 >> <556 >>
+Wahlpflichtfächer in 10.2: <77 >> <557 >>
+ <78 >> <558 >>
+ Arbeitsgemeinschaften: <79 >> <559 >>
+ von: <560> bis: <561>
+ Arbeitsgemeinschaften: <82 >> <562 >>
+ von: <563> bis: <564>
+ Arbeitsgemeinschaften: <85 >> <565 >>
+ von: <566> bis: <567>
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft lehrer
new file mode 100644
index 0000000..6616e46
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft lehrer
@@ -0,0 +1,3 @@
+ <528 > <529> <530> <531>
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl lehrer
new file mode 100644
index 0000000..f54fce2
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl lehrer
@@ -0,0 +1,3 @@
+ <543> <542 >
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl sek1
new file mode 100644
index 0000000..e72e32c
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl sek1
@@ -0,0 +1,7 @@
+
+Erläuterungen:
+
+Fach (Kopplung) Fach Lehrer
+----:-----------:--------------------:--------------------------
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 protokoll versetzkonf b/app/schulis/2.2.1/data/vordrucke/vordruck3 protokoll versetzkonf
new file mode 100644
index 0000000..cd69816
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 protokoll versetzkonf
@@ -0,0 +1,9 @@
+
+
+
+Abkürzungen in Spalte "Bem.": w/x = Schüler wiederholte diese Jgst.
+ ab = Schüler abgemeldet
+
+
+Vorsitzender:______________________ Protokollführer:______________________
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft betroffene
new file mode 100644
index 0000000..2b24d03
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft betroffene
@@ -0,0 +1,23 @@
+
+
+Daten zum Schuljahr <511>, <93>>. Halbjahr, Jgst. <94> Zug/Tutor: <95 >
+
+ Versetzung: <518> <519 >
+ Warnung: <512> mit Bem.Nr.: <513>
+ Nachwarnung: <515> mit Bem.Nr.: <516>
+ <517%#*<517>>
+ Nachpr.mögl.in: <520> <521 >
+ <522> <523 >
+ <524> <525 >
+ abgelegt in: <526> mit Note: <527>>
+Zeugnis Bem.Nr.: <528>
+ <529%#*<529>>
+ <530>
+ <531%#*<531>>
+ <532>
+ <533%#*<533>>
+
+Bemerkung zur Nachprüfung: <108> <537 >>
+
+Versäumt mit/ohne Entschuldigung: <534>>/<535>> Std. verspätet: <536>> mal
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft lehrer
new file mode 100644
index 0000000..31bf2b0
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft lehrer
@@ -0,0 +1,7 @@
+
+
+Leitung von Schülergruppen: <526 >
+ Klassenleiter/Tutor: <580 > <582 > <584 > <586 > <588 >
+ Stellvertreter: <581 > <583 > <585 > <587 > <589 >
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck4 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck4 einzelstdpl sek1
new file mode 100644
index 0000000..810e66f
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck4 einzelstdpl sek1
@@ -0,0 +1,3 @@
+<518>> <519 > <520 > <521 >
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft betroffene
new file mode 100644
index 0000000..43c0388
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft betroffene
@@ -0,0 +1,38 @@
+
+Wahl geprüft: <537 >
+
+Fach <538 >
+Art <539 >
+Klausur <541 >
+Kurs Nr. <542 >
+Warnung <543 >
+Note <544 >
+Bem. dazu<545 >
+
+Bem. Nr. <546>:
+ <547%#*<547>>
+ <548>:
+ <549%#*<549>>
+ <550>:
+ <551%#*<551>>
+ <552>:
+ <553%#*<553>>
+ <554>:
+ <555%#*<555>>
+ <556>:
+ <557%#*<557>>
+ <558>:
+ <559%#*<559>>
+ <560>:
+ <561%#*<561>>
+ <562>:
+ <563%#*<563>>
+ <564>:
+ <565%#*<565>>
+ <566>:
+ <567%#*<567>>
+ <568>:
+ <569%#*<569>>
+ <570>:
+ <571%#*<571>>
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft lehrer
new file mode 100644
index 0000000..2b5f0dd
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft lehrer
@@ -0,0 +1,20 @@
+
+
+Zeitwünsche <526 >
+Wünsche für bestimmte Zeiten:
+ 1 2 3 4 5 6 7 8 9 10 11 12
+ -----------------------------------------------------
+ Mo <531>> <532>> <533>> <534>> <535>> <536>> <537>> <538>> <539>> <540>> <541>> <542>>
+ Di <543>> <544>> <545>> <546>> <547>> <548>> <549>> <550>> <551>> <552>> <553>> <554>>
+ Mi <555>> <556>> <557>> <558>> <559>> <560>> <561>> <562>> <563>> <564>> <565>> <566>>
+ Do <567>> <568>> <569>> <570>> <571>> <572>> <573>> <574>> <575>> <576>> <577>> <578>>
+ Fr <579>> <580>> <581>> <582>> <583>> <584>> <585>> <586>> <587>> <588>> <589>> <590>>
+ Sa <591>> <592>> <593>> <594>> <595>> <596>>
+
+insgesamt sollen frei sein (incl. den o.g. Wünschen) :
+ Anzahl Gewicht
+ ganze Tage <520> <521>
+ Vormittage <522> <523>
+ zusätzliche Nachmittage <524> <525>
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck5 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck5 einzelstdpl sek1
new file mode 100644
index 0000000..d7bd03e
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck5 einzelstdpl sek1
@@ -0,0 +1,9 @@
+
+
+Räume für gekoppelten Unterricht:
+
+Kopplung Zeiten
+ Fach Räume
+--------:-------:------:------:------:------:------:------:------:------:
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck6 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck6 auskunft lehrer
new file mode 100644
index 0000000..90c1a7a
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck6 auskunft lehrer
@@ -0,0 +1,5 @@
+
+Vertretungen:
+Datum: <520 > Zeit: <521> Art: <522 >> Lehrveranst.: <523 >
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck6 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck6 einzelstdpl sek1
new file mode 100644
index 0000000..d7c5b14
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck6 einzelstdpl sek1
@@ -0,0 +1,3 @@
+<530 > <531> <532> <533> <534> <535> <536> <537> <538>
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck7 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck7 auskunft lehrer
new file mode 100644
index 0000000..0ac9975
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck7 auskunft lehrer
@@ -0,0 +1,3 @@
+ <520 > <521> <522 >> <523 >
+
+
diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck7 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck7 einzelstdpl sek1
new file mode 100644
index 0000000..b64618e
--- /dev/null
+++ b/app/schulis/2.2.1/data/vordrucke/vordruck7 einzelstdpl sek1
@@ -0,0 +1,3 @@
+ <540 > <541> <542> <543> <544> <545> <546> <547> <548>
+
+
diff --git a/app/schulis/2.2.1/source-disk b/app/schulis/2.2.1/source-disk
new file mode 100644
index 0000000..0fbb9d3
--- /dev/null
+++ b/app/schulis/2.2.1/source-disk
@@ -0,0 +1,5 @@
+schulis-grundpaket-schulverwaltung-2.2.1/03_schulis-quellen.img
+schulis-grundpaket-schulverwaltung-2.2.1/04_schulis-quellen.img
+schulis-grundpaket-schulverwaltung-2.2.1/05_schulis-quellen.img
+schulis-grundpaket-schulverwaltung-2.2.1/06_vordrucke.img
+schulis-grundpaket-schulverwaltung-2.2.1/07_baisy-schulis-db.img
diff --git a/app/schulis/2.2.1/src/0.ANSCHREIBEN.files b/app/schulis/2.2.1/src/0.ANSCHREIBEN.files
new file mode 100644
index 0000000..1352f80
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ANSCHREIBEN.files
@@ -0,0 +1,14 @@
+1.anschr.schulbescheinigung
+1.anschr.anmeldebestaetigung fuer jgst 5 und 11
+1.anschr.wiederholer
+1.anschr.nachpruefungsbescheinigung
+1.anschr.nachpruefungszulassung
+1.auskunft.betroffene
+1.anschr.mitteilungen neuangemeldete und abgemeldete
+1.listen.anherk
+3.anschr.betroffene lehrer
+4.anschr.unterrichtsvertlg fuer lehrer
+4.anschr.vertretungen
+
+
+
diff --git a/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE TEIL2.files b/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE TEIL2.files
new file mode 100644
index 0000000..22746c7
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE TEIL2.files
@@ -0,0 +1,6 @@
+0.anschr.druckereinstellung
+0.listen.werkzeuge
+0.listen.druckbearbeitung
+0.listen.steuerung
+
+
diff --git a/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE.files b/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE.files
new file mode 100644
index 0000000..aec57ff
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE.files
@@ -0,0 +1,6 @@
+0.anschr.grundfunktionen
+0.anschr.steuerfunktionen einfach
+0.anschr.steuerfunktionen zusammengesetzt
+0.schulis schrifttyp
+
+
diff --git a/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN 2.files b/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN 2.files
new file mode 100644
index 0000000..07e60dd
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN 2.files
@@ -0,0 +1,10 @@
+3.erf lehrer
+0.erf.faecher
+0.schulkenndaten bearbeiten
+0.erf.schuldaten
+0.klassengruppen definieren
+0.raumgruppen bearbeiten
+0.erf zeitraster
+0.erf aufsichtszeiten
+
+
diff --git a/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN.files b/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN.files
new file mode 100644
index 0000000..9931455
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN.files
@@ -0,0 +1,15 @@
+0.kurswahlbasis bereinigen
+0.hjd grundfunktionen
+1.erf.schuelerdaten
+1.erf.abmeldedaten
+1.abgegangene aussortieren
+1.schuelerjgst aendern
+1.halbjahresdaten bearbeiten
+1.hoeherstufen anw do.prog
+1.stat grundfunktionen
+1.stat intern
+
+
+
+
+
diff --git a/app/schulis/2.2.1/src/0.ERFASSUNGEN LISTENWEISE.files b/app/schulis/2.2.1/src/0.ERFASSUNGEN LISTENWEISE.files
new file mode 100644
index 0000000..51bb04d
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ERFASSUNGEN LISTENWEISE.files
@@ -0,0 +1,10 @@
+0.hjd grundfunktionen
+0.listenweise grundfunktionen
+0.kurswahlbasis bereinigen
+0.listenweise klassen erf
+1.listenweise erg vers konf
+1.listenweise erg nachpr
+1.listenweise dif dat erf
+1.listenweise klassenbildung
+3.listenweise lehrer erf
+
diff --git a/app/schulis/2.2.1/src/0.ERFASSUNGEN.files b/app/schulis/2.2.1/src/0.ERFASSUNGEN.files
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ERFASSUNGEN.files
@@ -0,0 +1,2 @@
+
+
diff --git a/app/schulis/2.2.1/src/0.IDA SERVER.files b/app/schulis/2.2.1/src/0.IDA SERVER.files
new file mode 100644
index 0000000..504c576
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.IDA SERVER.files
@@ -0,0 +1,4 @@
+0.ida.data
+0.ida.server
+
+
diff --git a/app/schulis/2.2.1/src/0.IDA SICHERUNG.files b/app/schulis/2.2.1/src/0.IDA SICHERUNG.files
new file mode 100644
index 0000000..6a7804e
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.IDA SICHERUNG.files
@@ -0,0 +1,4 @@
+0.ida.data
+0.ida.form
+
+
diff --git a/app/schulis/2.2.1/src/0.LISTEN 2.files b/app/schulis/2.2.1/src/0.LISTEN 2.files
new file mode 100644
index 0000000..bfb49ca
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.LISTEN 2.files
@@ -0,0 +1,18 @@
+0.listen.faecher
+0.listen.schuelergruppen
+3.listen.paraphen
+3.listen.sprechzeiten
+3.listen.wochenstunden
+3.listen.lehrbef faecherweise
+3.listen.lehrbef lehrerweise
+4.faecherangebot drucken
+0.liste der zeitrasterdaten
+4.listen.unterrichtsverteilung
+0.listen.raumgruppen
+0.listen.klassengruppen
+4.zeitwuensche drucken
+0.liste der aufsichtszeiten
+4.listen.aufsichtsplan
+4.liste ausgewaehlter kopplungen drucken
+
+
diff --git a/app/schulis/2.2.1/src/0.LISTEN.files b/app/schulis/2.2.1/src/0.LISTEN.files
new file mode 100644
index 0000000..af0173b
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.LISTEN.files
@@ -0,0 +1,15 @@
+1.listen.neuan
+1.listen.gesamt
+1.listen.gebu
+1.listen.adressen
+1.listen.klassenbuch
+1.listen.klassen
+1.listen.abgem
+0.listen.benutz
+1.listen.wiederholer
+1.listen.nachpruefung
+1.listen.prot versetzkonferenz
+0.listen.schlueabku
+0.listen.schulen
+
+
diff --git a/app/schulis/2.2.1/src/0.LOCAL.files b/app/schulis/2.2.1/src/0.LOCAL.files
new file mode 100644
index 0000000..1731322
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.LOCAL.files
@@ -0,0 +1,4 @@
+0.grundfunktionen local
+0.hoeherstufen local.prog
+
+
diff --git a/app/schulis/2.2.1/src/0.anschr.druckereinstellung b/app/schulis/2.2.1/src/0.anschr.druckereinstellung
new file mode 100644
index 0000000..5e014bf
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.anschr.druckereinstellung
@@ -0,0 +1,69 @@
+PACKET anschrdruckereinstellungDEFINES einstellungderausgabefueranschreiben,
+einstellungderausgabefuermitteilung,
+leseveraenderteausgabeneinstellunganschreiben,
+leseveraenderteausgabeneinstellungmitteilung,
+initialisieredruckerfueranschreiben,initialisieredruckerfuermitteilung,:REAL
+VAR anschreibenstartx:=2.54,anschreibenstarty:=2.35,mitteilungstartx:=2.54,
+mitteilungstarty:=2.35;INT VAR anschreibendruckbreite:=70,
+mitteilungdruckbreite:=70;INT CONST minbreiteanschreiben:=50,
+minbreitemitteilung:=70;LET maske="ms einstellung druck anschreiben";LET
+schriftfeldnr=2,druckbreitefeldnr=3,mindruckbreitefeldnr=4,startxfeldnr=5,
+startyfeldnr=6;LET maxstartxy=10.0,textnull="0.0",realnull=0.0,
+eingabenichtsinnvoll=162;LET niltext="";PROC
+initialisieredruckerfueranschreiben:setzeanzahlderzeichenprozeile(
+anschreibendruckbreite);schrift(anschreibenschrifttyp);start(
+anschreibenstartx,anschreibenstarty);END PROC
+initialisieredruckerfueranschreiben;PROC einstellungderausgabefueranschreiben
+:standardstartproc(maske);standardmaskenfeld(anschreibenschrifttyp,
+schriftfeldnr);standardmaskenfeld(text(anschreibendruckbreite),
+druckbreitefeldnr);standardmaskenfeld(text(minbreiteanschreiben),
+mindruckbreitefeldnr);standardmaskenfeld(text(anschreibenstartx),startxfeldnr
+);standardmaskenfeld(text(anschreibenstarty),startyfeldnr);standardnprocEND
+PROC einstellungderausgabefueranschreiben;PROC
+leseveraenderteausgabeneinstellunganschreiben:INT VAR testdruckzeilenbreite;
+TEXT VAR teststartx,teststarty;BOOL VAR werteinordnung:=TRUE ;
+testdruckzeilenbreite:=int(standardmaskenfeld(druckbreitefeldnr));teststartx
+:=compress(standardmaskenfeld(startxfeldnr));teststarty:=compress(
+standardmaskenfeld(startyfeldnr));ueberpruefendergegebenenwerte;IF
+werteinordnungTHEN werteuebernehmen;enter(2)ELSE meldefehler;return(1)FI .
+ueberpruefendergegebenenwerte:IF testdruckzeilenbreite<minbreiteanschreiben
+THEN infeld(druckbreitefeldnr);werteinordnung:=FALSE ELIF (teststartx<>
+textnullAND real(teststartx)=realnull)OR real(teststartx)>maxstartxyOR real(
+teststartx)<realnullTHEN infeld(startxfeldnr);werteinordnung:=FALSE ELIF (
+teststarty<>textnullAND real(teststarty)=realnull)OR real(teststarty)>
+maxstartxyOR real(teststarty)<realnullTHEN infeld(startyfeldnr);
+werteinordnung:=FALSE ELSE werteinordnung:=TRUE FI .werteuebernehmen:
+setzeschuliszeichensatz(standardmaskenfeld(schriftfeldnr));
+anschreibendruckbreite:=testdruckzeilenbreite;anschreibenstartx:=real(
+teststartx);anschreibenstarty:=real(teststarty).meldefehler:standardmeldung(
+eingabenichtsinnvoll,niltext).END PROC
+leseveraenderteausgabeneinstellunganschreiben;PROC
+initialisieredruckerfuermitteilung:setzeanzahlderzeichenprozeile(
+mitteilungdruckbreite);schrift(mitteilungschrifttyp);start(mitteilungstartx,
+mitteilungstarty);END PROC initialisieredruckerfuermitteilung;PROC
+einstellungderausgabefuermitteilung:standardstartproc(maske);
+standardmaskenfeld(mitteilungschrifttyp,schriftfeldnr);standardmaskenfeld(
+text(mitteilungdruckbreite),druckbreitefeldnr);standardmaskenfeld(text(
+minbreitemitteilung),mindruckbreitefeldnr);standardmaskenfeld(text(
+mitteilungstartx),startxfeldnr);standardmaskenfeld(text(mitteilungstarty),
+startyfeldnr);standardnprocEND PROC einstellungderausgabefuermitteilung;PROC
+leseveraenderteausgabeneinstellungmitteilung:INT VAR testdruckzeilenbreite;
+TEXT VAR teststartx,teststarty;BOOL VAR werteinordnung:=TRUE ;
+testdruckzeilenbreite:=int(standardmaskenfeld(druckbreitefeldnr));teststartx
+:=compress(standardmaskenfeld(startxfeldnr));teststarty:=compress(
+standardmaskenfeld(startyfeldnr));ueberpruefendergegebenenwerte;IF
+werteinordnungTHEN werteuebernehmen;enter(2)ELSE meldefehler;return(1)FI .
+ueberpruefendergegebenenwerte:IF testdruckzeilenbreite<minbreitemitteilung
+THEN infeld(druckbreitefeldnr);werteinordnung:=FALSE ELIF (teststartx<>
+textnullAND real(teststartx)=realnull)OR real(teststartx)>maxstartxyOR real(
+teststartx)<realnullTHEN infeld(startxfeldnr);werteinordnung:=FALSE ELIF (
+teststarty<>textnullAND real(teststarty)=realnull)OR real(teststarty)>
+maxstartxyOR real(teststarty)<realnullTHEN infeld(startyfeldnr);
+werteinordnung:=FALSE ELSE werteinordnung:=TRUE FI .werteuebernehmen:
+setzeschuliszeichensatz(standardmaskenfeld(schriftfeldnr));
+mitteilungdruckbreite:=testdruckzeilenbreite;mitteilungstartx:=real(
+teststartx);mitteilungstarty:=real(teststarty).meldefehler:standardmeldung(
+eingabenichtsinnvoll,niltext).END PROC
+leseveraenderteausgabeneinstellungmitteilung;END PACKET
+anschrdruckereinstellung
+
diff --git a/app/schulis/2.2.1/src/0.anschr.grundfunktionen b/app/schulis/2.2.1/src/0.anschr.grundfunktionen
new file mode 100644
index 0000000..0330b7a
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.anschr.grundfunktionen
@@ -0,0 +1,193 @@
+PACKET anschrgrundfunktionenfueranschreibenDEFINES volljaehrig,
+setzesonderwert,setzesonderwerteschulkenndaten,zeigeallesonderwerte,
+initialisieresonderwerte,sonderwert,indexadressat,adressat,
+setzeanzahlderzeichenprozeile,schrift,start,schreibesteuerzeichenzeile,
+briefalternative:LET linkeklammer="<",rechteklammer=">",parametergrenze="%",
+parametertrennzeichen="#",otherwise="*",niltext="";INT CONST indexadressat:=
+510;LET swindexdatum=1,swindexschulname=2,swindexschulstrasse=3,
+swindexschulort=4,swindexschuljahr=5,swindexschulleiter=6,
+swindexnaechstesschuljahr=7,swindexvorangehendesschuljahr=8,swindexhalbjahr=9
+;LET kennzahlsonderwert=500;LET laengedessonderwertpuffers=100,
+anzahlsonderwerteschulkenndaten=10;LET volljaehrigkeitsalter=18;TEXT VAR
+schrifttyp:="pica",ersterparameterstartanweisung:="1.0",
+zweiterparameterstartanweisung:="1.0";INT VAR zeilenlaenge:=70;ROW
+laengedessonderwertpuffersTEXT VAR sonderwertpuffer;BOOL PROC volljaehrig(
+TEXT CONST alter):TEXT VAR stichtag:=date;change(stichtag,7,8,text(int(
+subtext(stichtag,7,8))-volljaehrigkeitsalter));datum(alter)<=datum(stichtag)
+END PROC volljaehrig;PROC initialisieresonderwerte:INT VAR z;FOR zFROM
+anzahlsonderwerteschulkenndaten+1UPTO laengedessonderwertpuffersREP
+sonderwertpuffer(z):=""PER END PROC initialisieresonderwerte;PROC
+initialisiereallesonderwerte:INT VAR z;FOR zFROM 1UPTO
+anzahlsonderwerteschulkenndatenREP sonderwertpuffer(z):=""PER ;
+initialisieresonderwerteEND PROC initialisiereallesonderwerte;PROC
+setzesonderwert(INT CONST index,TEXT CONST sondertext):IF (index>(
+kennzahlsonderwert+anzahlsonderwerteschulkenndaten))AND (index<=
+laengedessonderwertpuffers+kennzahlsonderwert)THEN sonderwertpuffer(index-
+kennzahlsonderwert):=sondertextFI END PROC setzesonderwert;PROC
+sonderwertefuernaechstesundvorangehendesschuljahr(TEXT CONST
+aktuellesschuljahr):sonderwertfuernaechstesschuljahr;
+sonderwertfuervorangehendesschuljahr.sonderwertfuernaechstesschuljahr:
+sonderwertpuffer(swindexnaechstesschuljahr):=addierezumerstenjahreins+"/"+
+addierezumzweitenjahreins;.addierezumerstenjahreins:text((int(subtext(
+aktuellesschuljahr,1,2))+1)MOD 100).addierezumzweitenjahreins:text((int(
+subtext(aktuellesschuljahr,3,4))+1)MOD 100).
+sonderwertfuervorangehendesschuljahr:sonderwertpuffer(
+swindexvorangehendesschuljahr):=subtrahierevomerstenjahreins+"/"+
+subtrahierevomzweitenjahreins;.subtrahierevomerstenjahreins:text((int(subtext
+(aktuellesschuljahr,1,2))+99)MOD 100).subtrahierevomzweitenjahreins:text((int
+(subtext(aktuellesschuljahr,3,4))+99)MOD 100).END PROC
+sonderwertefuernaechstesundvorangehendesschuljahr;PROC zeigeallesonderwerte:
+INT VAR z,z1;page;z:=1;REP FOR z1FROM 1UPTO 20REP putline(text(z)+" "+
+sonderwertpuffer(z));zINCR 1;PER ;pauseUNTIL z>=laengedessonderwertpuffers
+PER ;END PROC zeigeallesonderwerte;TEXT PROC sonderwert(INT CONST swindex):
+IF swindex>kennzahlsonderwertAND swindex<=kennzahlsonderwert+
+laengedessonderwertpuffersTHEN sonderwertpuffer(swindex-kennzahlsonderwert)
+ELSE niltextFI END PROC sonderwert;PROC adressat(TEXT CONST name):
+sonderwertpuffer(indexadressat-kennzahlsonderwert):=compress(subtext(name,1,
+20))END PROC adressat;TEXT PROC lueckenwert(INT CONST fnr1):IF fnr1<=
+kennzahlsonderwertTHEN aufbereiteterdbwertELSE sonderwertpuffer(fnr1-
+kennzahlsonderwert)FI .aufbereiteterdbwert:IF (feldtyp(fnr1)=intfeldCAND
+intwert(fnr1)=0)COR (feldtyp(fnr1)=datumfeldCAND wert(fnr1)="01.01.00")THEN
+""ELSE wert(fnr1)FI .END PROC lueckenwert;TEXT PROC zeilenalternative(TEXT
+CONST eingabe,BOOL CONST rekursiveraufruf):INT VAR positionlinkeklammer:=1,
+positionrechteklammer:=1,positionlinkeskreuz,positionrechteskreuz,
+positionmittlereskreuz,positionparametergrenze,parameter1,parameter2,
+positionparametertrennzeichen,laenge,pufferlaenge,aktuelleposition,
+positionotherwise,anzahldergeoeffnetenklammern;BOOL VAR ausdruckvorhanden,
+caseaufruf,linkeseitevariabel,rechteseitevariabel;TEXT VAR puffer,
+vergleichswert,aktuellessymbol,ausgabe:=eingabe;REP
+auffindeneinesspitzgeklammertenausdrucks;IF ausdruckvorhandenTHEN
+bestimmungderuebergabeparameterfuerdieprozedurlueckenwert;
+aufrufderprozedurlueckenwert;IF NOT caseaufrufTHEN bestimmungdesteiltextes
+ELSE bestimmungderrichtigenalternativeFI ;
+einsetzendesteiltextesoderderalternative;FI ;UNTIL NOT ausdruckvorhandenPER ;
+ausgabe.auffindeneinesspitzgeklammertenausdrucks:aktuelleposition:=0;
+linkeseitevariabel:=FALSE ;rechteseitevariabel:=FALSE ;aktuelleposition:=pos(
+ausgabe,linkeklammer);ausdruckvorhanden:=aktuelleposition<>0;
+positionlinkeklammer:=aktuelleposition.
+bestimmungderuebergabeparameterfuerdieprozedurlueckenwert:
+ueberpruefeoblinkeseitedoppeltgeklammert;bestimmedenerstenuebergabeparameter;
+IF aktuellessymbol<>parametertrennzeichenTHEN parameter2:=1;ELSE
+bestimmedenzweitenuebergabeparameterFI ;IF aktuellessymbol=rechteklammerTHEN
+caseaufruf:=FALSE ;fuehreleseoperationaus;
+ueberpruefeobrechteseitedoppeltgeklammertELSE caseaufruf:=TRUE ;
+positionparametergrenze:=aktuellepositionFI .fuehreleseoperationaus:
+aktuellepositionINCR 1;aktuellessymbol:=ausgabeSUB aktuelleposition;IF
+aktuellessymbol=linkeklammerTHEN anzahldergeoeffnetenklammernINCR 1ELIF
+aktuellessymbol=rechteklammerTHEN anzahldergeoeffnetenklammernDECR 1FI .
+ueberpruefeoblinkeseitedoppeltgeklammert:fuehreleseoperationaus;
+linkeseitevariabel:=aktuellessymbol=linkeklammer.
+bestimmedenerstenuebergabeparameter:WHILE NOT (aktuellessymbol=
+parametertrennzeichenOR aktuellessymbol=parametergrenzeOR aktuellessymbol=
+rechteklammer)REP fuehreleseoperationausPER ;IF linkeseitevariabelTHEN
+parameter1:=int(subtext(ausgabe,positionlinkeklammer+2,aktuelleposition-1))
+ELSE parameter1:=int(subtext(ausgabe,positionlinkeklammer+1,aktuelleposition-
+1))FI .bestimmedenzweitenuebergabeparameter:positionparametertrennzeichen:=
+aktuelleposition;REP fuehreleseoperationausUNTIL aktuellessymbol=
+parametergrenzeOR aktuellessymbol=rechteklammerPER ;parameter2:=int(subtext(
+ausgabe,positionparametertrennzeichen+1,aktuelleposition-1)).
+ueberpruefeobrechteseitedoppeltgeklammert:IF aktuellessymbol=rechteklammer
+THEN rechteseitevariabel:=TRUE ;positionrechteklammer:=aktuellepositionELSE
+positionrechteklammer:=aktuelleposition-1FI .bestimmungdesteiltextes:IF NOT
+rekursiveraufrufTHEN bestimmungderlaengederauszufuellendenluecke;
+entsprechendenabschnittdeserhaltenenwortesbestimmenFI .
+aufrufderprozedurlueckenwert:puffer:=lueckenwert(parameter1#,parameter2#).
+bestimmungderlaengederauszufuellendenluecke:laenge:=positionrechteklammer-
+positionlinkeklammer+1.entsprechendenabschnittdeserhaltenenwortesbestimmen:
+pufferlaenge:=length(puffer);IF pufferlaenge<=laengeTHEN IF NOT (
+linkeseitevariabelOR rechteseitevariabel)THEN puffer:=puffer+((laenge-
+pufferlaenge)*" ")ELIF linkeseitevariabelTHEN puffer:=((laenge-pufferlaenge)*
+" ")+pufferFI ;ELSE IF NOT linkeseitevariabelTHEN puffer:=subtext(puffer,1,
+laenge);ELSE puffer:=subtext(puffer,pufferlaenge-laenge+1,pufferlaenge)FI ;
+FI .bestimmungderrichtigenalternative:bestimmungdeserstenvergleichswertes;
+WHILE vergleichswertstimmtnichtuebereinundeinweiterervorhandenREP
+suchenaechstenvergleichswertPER ;positionrechteklammerbeicaseaufrufbestimmen;
+IF vergleichswertstimmtmitdemergebnisausdemlueckenwertaufrufuebereinTHEN
+bereitstellenderentsprechendenalternativeELIF (ausgabeSUB positionotherwise)=
+otherwiseTHEN puffer:=zeilenalternative(subtext(ausgabe,positionotherwise+1,
+positionrechteklammer-1),TRUE )ELSE bereitstelleneinerleerenalternativeFI .
+bestimmungdeserstenvergleichswertes:positionlinkeskreuz:=
+positionparametergrenze;positionmittlereskreuz:=pos(ausgabe,
+parametertrennzeichen,positionlinkeskreuz+1);vergleichswert:=subtext(ausgabe,
+positionlinkeskreuz+1,positionmittlereskreuz-1);rechteskreuzbestimmen.
+suchenaechstenvergleichswert:positionlinkeskreuz:=positionrechteskreuz;
+positionmittlereskreuz:=pos(ausgabe,parametertrennzeichen,positionlinkeskreuz
++1);vergleichswert:=subtext(ausgabe,positionlinkeskreuz+1,
+positionmittlereskreuz-1);rechteskreuzbestimmen.rechteskreuzbestimmen:
+aktuelleposition:=positionmittlereskreuz;anzahldergeoeffnetenklammern:=0;REP
+fuehreleseoperationausUNTIL (anzahldergeoeffnetenklammern=0AND (
+aktuellessymbol=parametertrennzeichenOR aktuellessymbol=otherwise))OR
+anzahldergeoeffnetenklammern<0PER ;positionrechteskreuz:=aktuelleposition;
+positionotherwise:=aktuelleposition.
+vergleichswertstimmtmitdemergebnisausdemlueckenwertaufrufueberein:
+vergleichswert=puffer.bereitstellenderentsprechendenalternative:puffer:=
+zeilenalternative(subtext(ausgabe,positionmittlereskreuz+1,
+positionrechteskreuz-1),TRUE ).bereitstelleneinerleerenalternative:puffer:=""
+.vergleichswertstimmtnichtuebereinundeinweiterervorhanden:NOT
+vergleichswertstimmtmitdemergebnisausdemlueckenwertaufrufuebereinAND
+einweiterervergleichswertistvorhanden.einweiterervergleichswertistvorhanden:
+aktuellessymbol=parametertrennzeichen.
+positionrechteklammerbeicaseaufrufbestimmen:anzahldergeoeffnetenklammern:=0;
+IF aktuellessymbol<>rechteklammerTHEN WHILE NOT (anzahldergeoeffnetenklammern
+<0AND aktuellessymbol=rechteklammer)REP fuehreleseoperationausPER FI ;
+positionrechteklammer:=aktuelleposition.
+einsetzendesteiltextesoderderalternative:change(ausgabe,positionlinkeklammer,
+positionrechteklammer,puffer).END PROC zeilenalternative;PROC
+setzeanzahlderzeichenprozeile(INT CONST anzahl):zeilenlaenge:=anzahlEND PROC
+setzeanzahlderzeichenprozeile;PROC schrift(TEXT CONST typ):schrifttyp:=typ
+END PROC schrift;PROC start(REAL CONST x,y):ersterparameterstartanweisung:=
+text(x);zweiterparameterstartanweisung:=text(y)END PROC start;PROC
+schreibesteuerzeichenzeile(TEXT CONST dateiname):FILE VAR f:=sequentialfile(
+output,dateiname);LET druckersteuerzeichen="#",praefixschrifttypanweisung=
+"type(""",praefixstartanweisung="start(",komma=",",suffixstartanweisung=")",
+suffixschrifttypanweisung=""")",pagelengthanweisung="#pagelength(29.0)#";
+putline(f,druckersteuerzeichen+praefixschrifttypanweisung+schrifttyp+
+suffixschrifttypanweisung+druckersteuerzeichen+druckersteuerzeichen+
+praefixstartanweisung+ersterparameterstartanweisung+komma+
+zweiterparameterstartanweisung+suffixstartanweisung+druckersteuerzeichen+
+pagelengthanweisung)END PROC schreibesteuerzeichenzeile;PROC briefalternative
+(TEXT CONST eingabedatei,ausgabedatei):TEXT VAR ausgabe:=ausgabedatei;TEXT
+VAR zeile:="",text:="",praefixdernaechstenzeile:="",briefzeile:="";BOOL VAR
+absatzende;INT VAR postrennzeichen:=1,z;LET trennzeichen=" ";FILE VAR f:=
+sequentialfile(output,ausgabe);FILE VAR eingabe:=sequentialfile(input,
+eingabedatei);WHILE NOT eof(eingabe)REP holezeileausdemvordruck;
+einrueckendererstenbriefzeilevorbereiten;REP ueberpruefeaufabsatzende;
+ersetzeindergeholtenzeilediegeklammertenausdruecke;
+konkatenierediegeholtezeilemitdemrestdervorangehenden;IF briefzeilelanggenug
+OR absatzendeTHEN zeilenumbruch;WHILE absatzendeAND nochtextvorhandenREP
+bildedenrestdesumbruchs;zeilenumbruchPER FI ;IF NOT absatzendeTHEN
+holezeileausdemvordruck;einrueckendernaechstenbriefzeilevorbereiten;FI ;
+UNTIL absatzendePER PER .holezeileausdemvordruck:getline(eingabe,zeile).
+konkatenierediegeholtezeilemitdemrestdervorangehenden:briefzeile:=text+zeile+
+trennzeichen;text:=briefzeile.ueberpruefeaufabsatzende:absatzende:=(zeileSUB
+(length(zeile)))=trennzeichen.briefzeilelanggenug:(length(briefzeile))>=
+zeilenlaenge.bildedenrestdesumbruchs:briefzeile:=text.nochtextvorhanden:
+length(subtext(text,length(praefixdernaechstenzeile)+1))>1.zeilenumbruch:IF (
+zeilenlaenge<length(briefzeile))THEN postrennzeichen:=zeilenlaenge+1ELSE
+postrennzeichen:=length(briefzeile)FI ;WHILE (briefzeileSUB postrennzeichen)
+<>trennzeichenREP postrennzeichen:=postrennzeichen-1PER ;putline(f,subtext(
+briefzeile,1,postrennzeichen-1));text:=praefixdernaechstenzeile+subtext(
+briefzeile,postrennzeichen+1);.einrueckendernaechstenbriefzeilevorbereiten:
+praefixdernaechstenzeile:="";z:=1;WHILE ((zeileSUB z)=trennzeichen)AND (
+length(zeile)>z)REP praefixdernaechstenzeile:=praefixdernaechstenzeile+
+trennzeichen;z:=z+1PER ;zeile:=subtext(zeile,z);.
+einrueckendererstenbriefzeilevorbereiten:praefixdernaechstenzeile:="";z:=1;
+WHILE ((zeileSUB z)=trennzeichen)AND (length(zeile)>z)REP
+praefixdernaechstenzeile:=praefixdernaechstenzeile+trennzeichen;z:=z+1PER ;
+text:="";.ersetzeindergeholtenzeilediegeklammertenausdruecke:zeile:=
+zeilenalternative(zeile,FALSE ).END PROC briefalternative;PROC
+setzesonderwerteschulkenndaten:TEXT VAR schlsicherung;savetupel(dnrschluessel
+,schlsicherung);TEXT VAR aktj:=schulkenndatum("Schuljahr");sonderwertpuffer(
+swindexschulname):=schulkenndatum("Schulname");sonderwertpuffer(
+swindexschulstrasse):=schulkenndatum("Schulstraße");sonderwertpuffer(
+swindexschulort):=schulkenndatum("Schulort");sonderwertpuffer(
+swindexschuljahr):=aktj;insertchar(sonderwertpuffer(swindexschuljahr),"/",3);
+sonderwertpuffer(swindexschulleiter):=schulkenndatum("Schulleiter");
+sonderwertpuffer(swindexhalbjahr):=schulkenndatum("Schulhalbjahr");
+sonderwertpuffer(swindexdatum):=date;
+sonderwertefuernaechstesundvorangehendesschuljahr(aktj);restoretupel(
+dnrschluessel,schlsicherung);ENDPROC setzesonderwerteschulkenndaten;
+initialisiereallesonderwerte;initialisiereschriftundstart.
+initialisiereschriftundstart:schrift("pica");.END PACKET
+anschrgrundfunktionenfueranschreiben;
+
diff --git a/app/schulis/2.2.1/src/0.anschr.steuerfunktionen einfach b/app/schulis/2.2.1/src/0.anschr.steuerfunktionen einfach
new file mode 100644
index 0000000..e0024ca
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.anschr.steuerfunktionen einfach
@@ -0,0 +1,96 @@
+PACKET anschrsteuerfunktionenfuereinfacheanschreibenDEFINES anschreibenstart,
+naechstesanschreiben:LET anschreibentext="Text des Anschreibens";LET manager=
+"anschreiben server";LET niltext="",nildatum="01.01.00";LET nproc=1,
+eingangsbildschirm=2;LET vorwaertstaste="a";LET tupelstackgroesse=10;LET
+ROWTEXT =ROW 10TEXT ;LET druckmeldnr=125,existiertnichtnr=126,leermeldnr=127,
+endemeldnr=128,weitereangabenr=129,nichterstellbarmeldnr=130;TEXT VAR
+druckmeld:="";LET meldkz="#";INT VAR dateinummer,aktuellerindex,anzgeftupel;
+TEXT VAR anschreibenvordruck;BOOL VAR einzelbearbeitung;PROC anschreibenstart
+(INT CONST aktuellerinx,TEXT CONST vordruck,BOOL CONST anschreibenzeigen,
+peinzelbearbeitung,BOOL PROC sonderwerteundueberpruefungauferstellbarkeit,
+BOOL PROC pruefespeziell):ROWTEXT VAR schluesselsve1,schluesselsve2;INT VAR i
+;vorbereitungen;IF einzelbearbeitungTHEN einzelanschreibenELSE
+anschreibenfuerbestandFI .anschreibenfuerbestand:IF leererbestandTHEN
+meldeleerenbestand;zurueckzumeingangsbildschirmELSE
+bearbeiteallediesesbestandesFI .bearbeiteallediesesbestandes:IF
+anschreibenzeigenTHEN erstenbearbeitenELSE anschreibenleseschleife(BOOL PROC
+sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell);
+meldeendederbrieferstellung;zurueckzumeingangsbildschirmFI .erstenbearbeiten:
+BOOL VAR erstellbar:=TRUE ;BOOL VAR bestandleer:=FALSE ;erstellbar:=
+sonderwerteundueberpruefungauferstellbarkeit;IF erstellbarTHEN
+bearbeitenzumzeigenELSE REP IF anzgeftupel=0THEN anzgeftupel:=
+tupelstackgroesse;multisucc(aktuellerindex,anzgeftupel)FI ;IF anzgeftupel<>0
+THEN multisucc;anzgeftupelDECR 1;bestandleer:=NOT pruefespeziellELSE
+bestandleer:=TRUE FI UNTIL bestandleerCOR
+sonderwerteundueberpruefungauferstellbarkeitPER ;IF NOT bestandleerTHEN
+bearbeitenzumzeigenELSE zurueckzumeingangsbildschirm;
+meldeendederbrieferstellungFI FI .bearbeitenzumzeigen:IF einzelbearbeitung
+CAND NOT sonderwerteundueberpruefungauferstellbarkeitTHEN
+meldenichterstellbar;zurueckzumeingangsbildschirmELSE
+schreibesteuerzeichenzeile(anschreibentext);briefalternative(
+anschreibenvordruck,anschreibentext);editierebriefFI .einzelanschreiben:
+direktlesen;IF gefundenTHEN IF eindeutigTHEN datenlesen;IF anschreibenzeigen
+THEN bearbeitenzumzeigenELSE einzelbriefschreiben;
+zurueckzumeingangsbildschirmFI ELSE meldeanforderunggenauererangaben;
+zurueckzumeingangsbildschirmFI ELSE meldenichtgefunden;
+zurueckzumeingangsbildschirmFI .vorbereitungen:dateinummer:=dateinr(primdatid
+(aktuellerinx));aktuellerindex:=aktuellerinx;einzelbearbeitung:=
+peinzelbearbeitung;meldungstext(druckmeldnr,druckmeld);
+setzesonderwerteschulkenndaten;setzewerte;holeanschreibenvordruck.setzewerte:
+anschreibenvordruck:=vordruck.holeanschreibenvordruck:loeschealtenvordruck;
+fetch(anschreibenvordruck,/manager).loeschealtenvordruck:forget(vordruck,
+quiet).direktlesen:gesetztenschluesselsichern(schluesselsve1);anzgeftupel:=2;
+multisearchforward(aktuellerindex,anzgeftupel).gefunden:IF anzgeftupel=0THEN
+FALSE ELSE multisucc;pruefespeziellCAND schluesselgleichFI .schluesselgleich:
+NOT schluesselungleich(schluesselsve1,schluesselsve1).eindeutig:anzgeftupel=1
+COR naechsterungleich.naechsterungleich:gesetztenschluesselsichern(
+schluesselsve2);multisucc;IF NOT pruefespeziellTHEN TRUE ELSE
+schluesselungleich(schluesselsve1,schluesselsve2)FI .datenlesen:stackentry(1)
+.einzelbriefschreiben:IF NOT sonderwerteundueberpruefungauferstellbarkeit
+THEN meldenichterstellbarELSE briefschreibenFI .meldenichtgefunden:
+standardmeldung(existiertnichtnr,niltext).meldeanforderunggenauererangaben:
+standardmeldung(weitereangabenr,niltext).meldenichterstellbar:standardmeldung
+(nichterstellbarmeldnr,sonderwert(indexadressat)+meldkz).
+meldeendederbrieferstellung:standardmeldung(endemeldnr,niltext).
+zurueckzumeingangsbildschirm:return(nproc).leererbestand:anzgeftupel:=
+tupelstackgroesse;multisearchforward(aktuellerindex,anzgeftupel);IF
+anzgeftupel<>0THEN multisucc;anzgeftupelDECR 1;NOT pruefespeziellELSE TRUE
+FI .meldeleerenbestand:standardmeldung(leermeldnr,niltext).END PROC
+anschreibenstart;BOOL PROC schluesselungleich(ROWTEXT CONST sve1,sve2):INT
+VAR i;FOR iFROM 1UPTO anzkey(dateinummer)REP IF sve1[i]=""COR (feldtyp(
+dateinummer+i)=datumfeldCAND sve1[i]=nildatum)THEN LEAVE schluesselungleich
+WITH FALSE FI ;IF sve2[i]<>wert(dateinummer+i)THEN LEAVE schluesselungleich
+WITH TRUE FI PER ;FALSE ENDPROC schluesselungleich;PROC
+gesetztenschluesselsichern(ROW 10TEXT VAR schluesselsve):INT VAR i;FOR iFROM
+1UPTO anzkey(dateinummer)REP schluesselsve[i]:=wert(dateinummer+i)PER
+ENDPROC gesetztenschluesselsichern;PROC briefschreiben:
+schreibesteuerzeichenzeile(anschreibentext);briefalternative(
+anschreibenvordruck,anschreibentext);print(anschreibentext);standardmeldung(
+druckmeldnr,sonderwert(indexadressat)+meldkz);forget(anschreibentext,quiet)
+END PROC briefschreiben;PROC anschreibenleseschleife(BOOL PROC
+sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell):BOOL
+VAR schluss:=FALSE ;vorlesen;leseschleife.leseschleife:WHILE NOT schlussREP
+IF sonderwerteundueberpruefungauferstellbarkeitTHEN briefschreibenELSE
+standardmeldung(nichterstellbarmeldnr,sonderwert(indexadressat)+meldkz)FI ;
+lesenPER .lesen:IF anzgeftupel=0THEN anzgeftupel:=tupelstackgroesse;multisucc
+(aktuellerindex,anzgeftupel)FI ;satzlesen.vorlesen:anzgeftupel:=
+tupelstackgroesse;multisearchforward(aktuellerindex,anzgeftupel);satzlesen.
+satzlesen:IF anzgeftupel<>0THEN multisucc;anzgeftupelDECR 1;schluss:=NOT
+pruefespeziellELSE schluss:=TRUE FI .END PROC anschreibenleseschleife;PROC
+editierebrief:editiere(anschreibentext,vorwaertstaste,FALSE )END PROC
+editierebrief;PROC naechstesanschreiben(BOOL PROC
+sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell,BOOL
+CONST drucken):BOOL VAR bestandleer:=FALSE ;IF druckenTHEN print(
+anschreibentext);standardmeldung(druckmeld#nr,#,sonderwert(indexadressat)+
+meldkz)FI ;forget(anschreibentext,quiet);IF einzelbearbeitungTHEN enter(
+eingangsbildschirm)ELSE REP IF anzgeftupel=0THEN anzgeftupel:=
+tupelstackgroesse;multisucc(aktuellerindex,anzgeftupel)FI ;IF anzgeftupel<>0
+THEN multisucc;anzgeftupelDECR 1;bestandleer:=NOT pruefespeziellELSE
+bestandleer:=TRUE FI UNTIL bestandleerCOR
+sonderwerteundueberpruefungauferstellbarkeitPER ;IF NOT bestandleerTHEN
+schreibesteuerzeichenzeile(anschreibentext);briefalternative(
+anschreibenvordruck,anschreibentext);return(nproc)ELSE standardmeldung(
+endemeldnr,niltext);#enter(eingangsbildschirm)#return(eingangsbildschirm)FI
+FI END PROC naechstesanschreiben;END PACKET
+anschrsteuerfunktionenfuereinfacheanschreiben;
+
diff --git a/app/schulis/2.2.1/src/0.anschr.steuerfunktionen zusammengesetzt b/app/schulis/2.2.1/src/0.anschr.steuerfunktionen zusammengesetzt
new file mode 100644
index 0000000..0b77e49
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.anschr.steuerfunktionen zusammengesetzt
@@ -0,0 +1,87 @@
+PACKET anschrsteuerfunktionenfuerzusammengesetzteanschreibenDEFINES
+zusammengesetztesanschreiben,naechsteszusammengesetztesanschreiben:LET
+niltext="",nildatum="01.01.00";LET nproc=1,eingangsbildschirm=2;LET
+vorwaertstaste="a";LET tupelstackgroesse=10;LET druckmeldnr=125,
+existiertnichtnr=126,leermeldnr=127,endemeldnr=128,weitereangabenr=129,
+nichterstellbarmeldnr=130;TEXT VAR druckmeld:="",anschreibentext;LET meldkz=
+"#";INT VAR dateinummer,aktuellerindex,anzgeftupel;BOOL VAR einzelbearbeitung
+;PROC zusammengesetztesanschreiben(INT CONST aktuellerinx,BOOL CONST
+anschreibenzeigen,peinzelbearbeitung,BOOL PROC sonderwerteundueberpruefungauf
+erstellbarkeit,BOOL PROC pruefespeziell,TEXT PROC druckdatei):ROW 10TEXT VAR
+schluesselsve1,schluesselsve2;INT VAR i;vorbereitungen;IF einzelbearbeitung
+THEN einzelanschreibenELSE anschreibenfuerbestandFI .anschreibenfuerbestand:
+IF leererbestandTHEN meldeleerenbestand;zurueckzumeingangsbildschirmELSE
+bearbeiteallediesesbestandesFI .bearbeiteallediesesbestandes:IF
+anschreibenzeigenTHEN erstenbearbeitenELSE anschreibenleseschleife(BOOL PROC
+sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell,TEXT
+PROC druckdatei);meldeendederbrieferstellung;zurueckzumeingangsbildschirmFI .
+erstenbearbeiten:BOOL VAR erstellbar:=TRUE ;BOOL VAR bestandleer:=FALSE ;
+erstellbar:=sonderwerteundueberpruefungauferstellbarkeit;IF erstellbarTHEN
+bearbeitenzumzeigenELSE REP IF anzgeftupel=0THEN anzgeftupel:=
+tupelstackgroesse;multisucc(aktuellerindex,anzgeftupel)FI ;IF anzgeftupel<>0
+THEN multisucc;anzgeftupelDECR 1;bestandleer:=NOT pruefespeziellELSE
+bestandleer:=TRUE FI UNTIL bestandleerCOR
+sonderwerteundueberpruefungauferstellbarkeitPER ;IF NOT bestandleerTHEN
+bearbeitenzumzeigenELSE zurueckzumeingangsbildschirm;
+meldeendederbrieferstellungFI FI .bearbeitenzumzeigen:IF einzelbearbeitung
+CAND NOT sonderwerteundueberpruefungauferstellbarkeitTHEN
+meldenichterstellbar;zurueckzumeingangsbildschirmELSE anschreibentext:=
+druckdatei;editierebriefFI .einzelanschreiben:direktlesen;IF gefundenTHEN IF
+eindeutigTHEN datenlesen;IF anschreibenzeigenTHEN bearbeitenzumzeigenELSE
+einzelbriefschreiben;zurueckzumeingangsbildschirmFI ELSE
+meldeanforderunggenauererangaben;return(1)FI ELSE meldenichtgefunden;return(1
+)FI .vorbereitungen:dateinummer:=dateinr(primdatid(aktuellerinx));
+aktuellerindex:=aktuellerinx;einzelbearbeitung:=peinzelbearbeitung;
+meldungstext(druckmeldnr,druckmeld);setzesonderwerteschulkenndaten;.
+direktlesen:gesetztenschluesselsichern(schluesselsve1);anzgeftupel:=2;
+multisearchforward(aktuellerindex,anzgeftupel).gefunden:IF anzgeftupel=0THEN
+FALSE ELSE multisucc;pruefespeziellFI .eindeutig:anzgeftupel=1COR
+naechsterungleich.naechsterungleich:gesetztenschluesselsichern(schluesselsve2
+);multisucc;IF NOT pruefespeziellTHEN TRUE ELSE FOR iFROM 1UPTO anzkey(
+dateinummer)REP IF schluesselsve1[i]=""COR (feldtyp(dateinummer+i)=datumfeld
+CAND schluesselsve1[i]=nildatum)THEN LEAVE naechsterungleichWITH FALSE FI ;
+IF schluesselsve2[i]<>wert(dateinummer+i)THEN LEAVE naechsterungleichWITH
+TRUE FI PER ;FALSE FI .datenlesen:stackentry(1).einzelbriefschreiben:IF NOT
+sonderwerteundueberpruefungauferstellbarkeitTHEN meldenichterstellbarELSE
+briefschreibenFI .meldenichtgefunden:standardmeldung(existiertnichtnr,niltext
+).meldeanforderunggenauererangaben:standardmeldung(weitereangabenr,niltext).
+meldenichterstellbar:standardmeldung(nichterstellbarmeldnr,sonderwert(
+indexadressat)+meldkz).meldeendederbrieferstellung:standardmeldung(endemeldnr
+,niltext).zurueckzumeingangsbildschirm:enter(nproc).leererbestand:anzgeftupel
+:=tupelstackgroesse;multisearchforward(aktuellerindex,anzgeftupel);IF
+anzgeftupel<>0THEN multisucc;anzgeftupelDECR 1;NOT pruefespeziellELSE TRUE
+FI .meldeleerenbestand:standardmeldung(leermeldnr,niltext).briefschreiben:
+anschreibentext:=druckdatei;print(anschreibentext);standardmeldung(
+druckmeldnr,sonderwert(indexadressat)+meldkz);forget(anschreibentext,quiet).
+END PROC zusammengesetztesanschreiben;PROC gesetztenschluesselsichern(ROW 10
+TEXT VAR schluesselsve):INT VAR i;FOR iFROM 1UPTO anzkey(dateinummer)REP
+schluesselsve[i]:=wert(dateinummer+i)PER ENDPROC gesetztenschluesselsichern;
+PROC anschreibenleseschleife(BOOL PROC sonderwerteundueberpruefungauf
+erstellbarkeit,BOOL PROC pruefespeziell,TEXT PROC druckdatei):BOOL VAR
+schluss:=FALSE ;vorlesen;leseschleife.leseschleife:WHILE NOT schlussREP IF
+sonderwerteundueberpruefungauferstellbarkeitTHEN briefschreibenELSE
+standardmeldung(nichterstellbarmeldnr,sonderwert(indexadressat)+meldkz)FI ;
+lesenPER .lesen:IF anzgeftupel=0THEN anzgeftupel:=tupelstackgroesse;multisucc
+(aktuellerindex,anzgeftupel)FI ;satzlesen.vorlesen:anzgeftupel:=
+tupelstackgroesse;multisearchforward(aktuellerindex,anzgeftupel);satzlesen.
+satzlesen:IF anzgeftupel<>0THEN multisucc;anzgeftupelDECR 1;schluss:=NOT
+pruefespeziellELSE schluss:=TRUE FI .briefschreiben:anschreibentext:=
+druckdatei;print(anschreibentext);standardmeldung(druckmeldnr,sonderwert(
+indexadressat)+meldkz);forget(anschreibentext,quiet).END PROC
+anschreibenleseschleife;PROC editierebrief:editiere(anschreibentext,
+vorwaertstaste,FALSE )END PROC editierebrief;PROC
+naechsteszusammengesetztesanschreiben(BOOL PROC
+sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell,BOOL
+CONST drucken,TEXT PROC druckdatei):BOOL VAR bestandleer:=FALSE ;IF drucken
+THEN print(anschreibentext);standardmeldung(druckmeld#nr,#,sonderwert(
+indexadressat)+meldkz)FI ;forget(anschreibentext,quiet);IF einzelbearbeitung
+THEN enter(eingangsbildschirm)ELSE REP IF anzgeftupel=0THEN anzgeftupel:=
+tupelstackgroesse;multisucc(aktuellerindex,anzgeftupel)FI ;IF anzgeftupel<>0
+THEN multisucc;anzgeftupelDECR 1;bestandleer:=NOT pruefespeziellELSE
+bestandleer:=TRUE FI UNTIL bestandleerCOR
+sonderwerteundueberpruefungauferstellbarkeitPER ;IF NOT bestandleerTHEN
+anschreibentext:=druckdatei;return(nproc)ELSE standardmeldung(endemeldnr,
+niltext);enter(eingangsbildschirm)FI FI END PROC
+naechsteszusammengesetztesanschreiben;END PACKET
+anschrsteuerfunktionenfuerzusammengesetzteanschreiben;
+
diff --git a/app/schulis/2.2.1/src/0.erf aufsichtszeiten b/app/schulis/2.2.1/src/0.erf aufsichtszeiten
new file mode 100644
index 0000000..443be9d
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.erf aufsichtszeiten
@@ -0,0 +1,201 @@
+PACKET erfaufsichtszeitenDEFINES aufsichtszeitenveraendern,
+aufsichtszeitenspeichern,aufsichtszeitenzeileentfernen,
+aufsichtszeitenzeileeinfuegen,aufsichtszeitenuebernehmen,
+aufsichtszeitenkopieren:LET niltext="",titelanfang="Aufsichtszeiten für das "
+,titelmitte=". Halbjahr ",trennerfuerschuljahr="/",null=0,eins=1;LET
+fnrfueruebernehmen=2,fnrfuergeplbearb=3,fnrabtagfuergepl=4,fnrfueraktbearb=5,
+fnrabtagfuerakt=6,fnrcursorruhepos=7,allewochentagsbezeichnungen=
+"MODIMIDOFRSAMoDiMiDoFrSamodimidofrsa",maske="ms aufsichtszeiten",
+fnrwochentag=2,fnrerstebezeichnung=3,felderprozeile=5,offsetstundevor=1,
+offsetstundenach=2,offsetbeginnuhr=3,offsetendeuhr=4,fnrerstesfeldletztezeile
+=73,fnrletztesfeld=77,erstestundeamtag=1,stundenprowochentag=12,
+stundenamsamstag=6,stelledestages=100,datensaetzepromaske=15;LET
+textschuljahr="Schuljahr",textschulhalbjahr="Schulhalbjahr";LET
+meldungfeldleerlassen=390,meldungzeilezutief=391,meldungmindeinestunde=392,
+meldungspeicherung=50,meldungfalschezeitangabe=54,meldungeingabesinnlos=56,
+meldungplausi=57,meldungdatenfehlen=68,meldungspeicherfehler=73,
+meldungfrageuebernehmen=300,meldunguebernehmen=301,meldungzeitangabezulang=
+341,meldungfalschezeitfolge=342,meldungfalschetagesbez=385,
+meldungstdnachfolgend=386;TEXT VAR schuljahr:=niltext,halbjahr:=niltext;BOOL
+VAR datenvorhanden;INT VAR tagnr;LET nummerfürmo=1,kürzelfürmo="Mo",
+nummerfürdi=2,kürzelfürdi="Di",nummerfürmi=3,kürzelfürmi="Mi",nummerfürdo=4,
+kürzelfürdo="Do",nummerfürfr=5,kürzelfürfr="Fr",nummerfürsa=6,kürzelfürsa=
+"Sa";ROW datensaetzepromaskeTEXT VAR alteaufsichtszeiten;INT VAR aktindex;
+PROC aufsichtszeitenzeileeinfuegen:INT VAR i,cursorfeld:=infeld;IF cursorfeld
+>=fnrerstesfeldletztezeileTHEN standardmeldung(meldungzeilezutief,niltext);
+ELSE cursorfeld:=cursorfeld-((cursorfeld-fnrerstebezeichnung)MOD
+felderprozeile)+felderprozeile;FOR iFROM fnrletztesfeldDOWNTO cursorfeld+
+felderprozeileREP standardmaskenfeld(standardmaskenfeld(i-felderprozeile),i)
+PER ;FOR iFROM cursorfeldUPTO cursorfeld+offsetendeuhrREP standardmaskenfeld(
+niltext,i)PER ;FI ;return(1);END PROC aufsichtszeitenzeileeinfuegen;PROC
+aufsichtszeitenzeileentfernen:INT VAR i,cursorfeld:=infeld;cursorfeld:=
+cursorfeld-((cursorfeld-fnrerstebezeichnung)MOD felderprozeile);FOR iFROM
+cursorfeldUPTO cursorfeld+offsetendeuhrREP standardmaskenfeld(niltext,i)PER ;
+infeld(cursorfeld);return(1);END PROC aufsichtszeitenzeileentfernen;PROC
+aufsichtszeitenveraendern:INT VAR aktfnr;pruefeplausidereingangsmaske;
+setzeschulhalbjahrindenmaskekopf;holealledatendestages;infeld(fnrwochentag);
+standardfelderausgeben;infeld(fnrerstebezeichnung);standardnproc.
+pruefeplausidereingangsmaske:IF standardmaskenfeld(fnrfueruebernehmen)<>
+niltextOR NOT (standardmaskenfeld(fnrfuergeplbearb)<>niltextXOR
+standardmaskenfeld(fnrfueraktbearb)<>niltext)THEN standardmeldung(
+meldungeingabesinnlos,niltext);IF standardmaskenfeld(fnrfueruebernehmen)=
+niltextTHEN infeld(fnrfuergeplbearb)ELSE infeld(fnrfueruebernehmen)FI ;return
+(1);LEAVE aufsichtszeitenveraendernFI ;IF standardmaskenfeld(fnrfuergeplbearb
+)=niltextTHEN aktfnr:=fnrabtagfuergeplELSE aktfnr:=fnrabtagfueraktFI ;IF
+standardmaskenfeld(aktfnr)<>niltextTHEN standardmeldung(meldungfeldleerlassen
+,niltext);infeld(aktfnr);return(1);LEAVE aufsichtszeitenveraendernFI ;IF
+standardmaskenfeld(fnrfuergeplbearb)=niltextTHEN aktfnr:=fnrabtagfueraktELSE
+aktfnr:=fnrabtagfuergeplFI ;IF standardmaskenfeld(aktfnr)=niltextTHEN tagnr:=
+nummerfürmo;ELSE tagnr:=pos(allewochentagsbezeichnungen,standardmaskenfeld(
+aktfnr));IF tagnr=0THEN standardmeldung(meldungfalschetagesbez,niltext);
+infeld(aktfnr);return(1);LEAVE aufsichtszeitenveraendernFI ;tagnr:=(tagnrMOD
+12)DIV 2+1;FI .setzeschulhalbjahrindenmaskekopf:schuljahr:=schulkenndatum(
+textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr);IF
+standardmaskenfeld(fnrfuergeplbearb)<>niltextTHEN geplanteshjundsjberechnen(
+halbjahr,schuljahr)FI ;standardstartproc(maske);
+standardkopfmaskeaktualisieren(titelanfang+halbjahr+titelmitte+text(schuljahr
+,2)+trennerfuerschuljahr+subtext(schuljahr,3)).END PROC
+aufsichtszeitenveraendern;PROC aufsichtszeitenspeichern(BOOL CONST speichern)
+:INT VAR fehlerstatus:=null,aktfnr,aznr,beginn,ende,letztestd,i;IF speichern
+THEN pruefeplausibilitaet;IF fehlerstatus<>nullTHEN infeld(fehlerstatus);
+return(1);LEAVE aufsichtszeitenspeichernFI ;speicherungdurchfuehren;FI ;IF
+tagnr<nummerfürsaTHEN tagnrINCR 1;holealledatendestages;infeld(fnrwochentag);
+standardfelderausgeben;infeld(fnrerstebezeichnung);return(1)ELSE enter(2)FI .
+pruefeplausibilitaet:standardmeldung(meldungplausi,niltext);aktfnr:=
+fnrerstebezeichnung-1;FOR iFROM 1UPTO datensaetzepromaskeREP aktfnrINCR 1;IF
+(standardmaskenfeld(aktfnr)<>niltextCOR standardmaskenfeld(aktfnr+
+offsetbeginnuhr)<>niltextCOR standardmaskenfeld(aktfnr+offsetendeuhr)<>
+niltext)CAND standardmaskenfeld(aktfnr+offsetstundevor)=niltextCAND
+standardmaskenfeld(aktfnr+offsetstundenach)=niltextTHEN standardmeldung(
+meldungmindeinestunde,niltext);fehlerstatus:=aktfnr+offsetstundevor;LEAVE
+pruefeplausibilitaetFI ;IF tagnr=nummerfürsaTHEN letztestd:=stundenamsamstag
+ELSE letztestd:=stundenprowochentagFI ;aktfnrINCR 1;IF standardmaskenfeld(
+aktfnr)<>niltextTHEN standardpruefe(2,aktfnr,null,null,niltext,fehlerstatus);
+IF fehlerstatus<>0THEN LEAVE pruefeplausibilitaetFI ;standardpruefe(3,aktfnr,
+erstestundeamtag,letztestd,niltext,fehlerstatus);IF fehlerstatus<>0THEN
+LEAVE pruefeplausibilitaetFI ;FI ;beginn:=int(standardmaskenfeld(aktfnr));
+aktfnrINCR 1;IF standardmaskenfeld(aktfnr)<>niltextTHEN standardpruefe(2,
+aktfnr,null,null,niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE
+pruefeplausibilitaetFI ;standardpruefe(3,aktfnr,erstestundeamtag,letztestd,
+niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE pruefeplausibilitaetFI ;
+FI ;ende:=int(standardmaskenfeld(aktfnr));IF beginn>0AND ende>0AND ende<>
+beginn+1THEN standardmeldung(meldungstdnachfolgend,niltext);fehlerstatus:=
+aktfnr-1;LEAVE pruefeplausibilitaetFI ;aktfnrINCR 1;beginn:=int(
+standardmaskenfeld(aktfnr));IF falschezeitangabe(beginn,aktfnr,fehlerstatus)
+THEN LEAVE pruefeplausibilitaetFI ;aktfnrINCR 1;ende:=int(standardmaskenfeld(
+aktfnr));IF falschezeitangabe(ende,aktfnr,fehlerstatus)THEN LEAVE
+pruefeplausibilitaetFI ;IF beginn>endeAND ende>0THEN standardmeldung(
+meldungfalschezeitfolge,niltext);fehlerstatus:=aktfnr-1;LEAVE
+pruefeplausibilitaetFI PER .speicherungdurchfuehren:standardmeldung(
+meldungspeicherung,niltext);aktfnr:=fnrerstebezeichnung;aznr:=1;
+suchenächstenichtleerezeile;WHILE aktfnr<=fnrerstesfeldletztezeileREP infeld(
+aktfnr);fülleprimärindexfelder;search(dnraufsichtszeiten,true);
+füllerestlichedbfelder;IF dbstatus<>nullTHEN insert(dnraufsichtszeiten)ELSE
+update(dnraufsichtszeiten)FI ;speicherfehlerabfangen;aktfnrINCR
+felderprozeile;aznrINCR 1;suchenächstenichtleerezeile;PER ;dbstatus(0);WHILE
+dbstatus=0CAND aznr<=datensaetzepromaskeREP fülleprimärindexfelder;delete(
+dnraufsichtszeiten);aznrINCR 1;PER .suchenächstenichtleerezeile:WHILE aktfnr
+<=fnrerstesfeldletztezeileCAND zeileistleerREP aktfnrINCR felderprozeilePER .
+zeileistleer:standardmaskenfeld(aktfnr)+standardmaskenfeld(aktfnr+
+offsetbeginnuhr)+standardmaskenfeld(aktfnr+offsetendeuhr)+standardmaskenfeld(
+aktfnr+offsetstundevor)+standardmaskenfeld(aktfnr+offsetstundenach)=niltext.
+fülleprimärindexfelder:putwert(fnrazsj,schuljahr);putwert(fnrazhj,halbjahr);
+putintwert(fnrazaufsichtszeit,tagnr*stelledestages+aznr);.
+füllerestlichedbfelder:putwert(fnrazbezeichnung,standardmaskenfeld(aktfnr));
+IF standardmaskenfeld(aktfnr+offsetstundevor)=niltextTHEN putintwert(
+fnraztagstdvor,null)ELSE putintwert(fnraztagstdvor,(tagnr-1)*
+stundenprowochentag+int(standardmaskenfeld(aktfnr+offsetstundevor)))FI ;IF
+standardmaskenfeld(aktfnr+offsetstundenach)=niltextTHEN putintwert(
+fnraztagstdnach,null)ELSE putintwert(fnraztagstdnach,(tagnr-1)*
+stundenprowochentag+int(standardmaskenfeld(aktfnr+offsetstundenach)))FI ;
+putwert(fnrazbeginnuhr,standardmaskenfeld(aktfnr+offsetbeginnuhr));putwert(
+fnrazendeuhr,standardmaskenfeld(aktfnr+offsetendeuhr)).speicherfehlerabfangen
+:IF dbstatus<>nullTHEN standardmeldung(meldungspeicherfehler,niltext);return(
+1);LEAVE aufsichtszeitenspeichernFI .END PROC aufsichtszeitenspeichern;PROC
+aufsichtszeitenkopieren:INT VAR i,altetagnr;aktindex:=null;altetagnr:=tagnr;
+tagnr:=nummerfürmo;inittupel(dnraufsichtszeiten);statleseschleife(
+dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC fuellenurmaske);
+FOR iFROM aktindex*felderprozeile+fnrerstebezeichnungUPTO fnrletztesfeldREP
+standardmaskenfeld(niltext,i)PER ;tagnr:=altetagnr;infeld(fnrerstebezeichnung
+);return(1);END PROC aufsichtszeitenkopieren;PROC aufsichtszeitenuebernehmen(
+BOOL CONST hauptaktion):TEXT VAR geplhj,geplsj;INT VAR i,j,altetagnr;IF NOT
+hauptaktionTHEN prüfeobeingangsmaskerichtigangekreuzt;schuljahr:=
+schulkenndatum(textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr);
+tagnr:=nummerfürmo;fuelledenpuffermitdenaufsichtszeiten;IF datenvorhanden
+THEN standardmeldung(meldungfrageuebernehmen,niltext);feldschutz(
+fnrfueruebernehmen);feldschutz(fnrfuergeplbearb);feldschutz(fnrabtagfuergepl)
+;feldschutz(fnrfueraktbearb);feldschutz(fnrabtagfuerakt);feldfrei(
+fnrcursorruhepos);infeld(fnrcursorruhepos);standardnproc;ELSE standardmeldung
+(meldungdatenfehlen,niltext);infeld(fnrfueruebernehmen);return(1)FI ELSE
+standardmeldung(meldunguebernehmen,niltext);geplhj:=halbjahr;geplsj:=
+schuljahr;geplanteshjundsjberechnen(geplhj,geplsj);WHILE datenvorhandenREP
+löschealletagebiszumvorliegenden;speicheredenvorliegendentag;tagnrINCR 1;
+fuelledenpuffermitdenaufsichtszeiten;PER ;löscheallerestlichentage;enter(2)
+FI .prüfeobeingangsmaskerichtigangekreuzt:IF standardmaskenfeld(
+fnrfueruebernehmen)=niltextOR standardmaskenfeld(fnrfuergeplbearb)<>niltext
+OR standardmaskenfeld(fnrfueraktbearb)<>niltextTHEN standardmeldung(
+meldungeingabesinnlos,niltext);infeld(fnrfueruebernehmen);return(1);LEAVE
+aufsichtszeitenuebernehmenFI ;IF standardmaskenfeld(fnrabtagfuergepl)<>
+niltextTHEN standardmeldung(meldungfeldleerlassen,niltext);infeld(
+fnrabtagfuergepl);return(1);LEAVE aufsichtszeitenuebernehmenFI ;IF
+standardmaskenfeld(fnrabtagfuerakt)<>niltextTHEN standardmeldung(
+meldungfeldleerlassen,niltext);infeld(fnrabtagfuerakt);return(1);LEAVE
+aufsichtszeitenuebernehmenFI ;.fuelledenpuffermitdenaufsichtszeiten:aktindex
+:=null;datenvorhanden:=FALSE ;altetagnr:=tagnr;inittupel(dnraufsichtszeiten);
+statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC
+fuellenurpuffer);.löschealletagebiszumvorliegenden:FOR iFROM altetagnrUPTO
+tagnr-1REP löschedateneinestagesPER .löschedateneinestages:j:=1;dbstatus(0);
+WHILE dbstatus=0CAND j<=datensaetzepromaskeREP putwert(fnrazsj,geplsj);
+putwert(fnrazhj,geplhj);putintwert(fnrazaufsichtszeit,i*stelledestages+j);
+delete(dnraufsichtszeiten);jINCR 1;PER .speicheredenvorliegendentag:i:=1;
+WHILE i<=aktindexREP fülleprimärindexfelder;search(dnraufsichtszeiten,true);
+füllerestlichedbfelder;IF dbstatus<>nullTHEN insert(dnraufsichtszeiten)ELSE
+update(dnraufsichtszeiten)FI ;speicherfehlerabfangen;iINCR 1;PER ;WHILE
+dbstatus=0CAND i<=datensaetzepromaskeREP fülleprimärindexfelder;delete(
+dnraufsichtszeiten);iINCR 1;PER .fülleprimärindexfelder:putwert(fnrazsj,
+geplsj);putwert(fnrazhj,geplhj);putintwert(fnrazaufsichtszeit,tagnr*
+stelledestages+i);.füllerestlichedbfelder:restoretupel(dnraufsichtszeiten,
+alteaufsichtszeiten(i));putwert(fnrazsj,geplsj);putwert(fnrazhj,geplhj);.
+speicherfehlerabfangen:IF dbstatus<>nullTHEN standardmeldung(
+meldungspeicherfehler,niltext);infeld(fnrfueruebernehmen);return(2);LEAVE
+aufsichtszeitenuebernehmenFI .löscheallerestlichentage:FOR iFROM altetagnr
+UPTO nummerfürsaREP löschedateneinestagesPER .END PROC
+aufsichtszeitenuebernehmen;PROC holealledatendestages:TEXT VAR tag;INT VAR i;
+setzewochentagindiemaske;holegewünschtentagindiemaske.
+setzewochentagindiemaske:SELECT tagnrOF CASE nummerfürmo:tag:=kürzelfürmo
+CASE nummerfürdi:tag:=kürzelfürdiCASE nummerfürmi:tag:=kürzelfürmiCASE
+nummerfürdo:tag:=kürzelfürdoCASE nummerfürfr:tag:=kürzelfürfrCASE nummerfürsa
+:tag:=kürzelfürsaEND SELECT ;standardmaskenfeld(tag,fnrwochentag).
+holegewünschtentagindiemaske:aktindex:=null;inittupel(dnraufsichtszeiten);
+statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC
+fuellenurmaske);FOR iFROM aktindex*felderprozeile+fnrerstebezeichnungUPTO
+fnrletztesfeldREP standardmaskenfeld(niltext,i)PER ;.END PROC
+holealledatendestages;PROC fuellenurmaske(BOOL VAR b):INT VAR feldnr,stunde;
+IF wert(fnrazsj)>schuljahrCOR wert(fnrazhj)>halbjahrCOR intwert(
+fnrazaufsichtszeit)>tagnr*stelledestages+datensaetzepromaskeCOR dbstatus<>0
+THEN b:=TRUE ELSE IF intwert(fnrazaufsichtszeit)>tagnr*stelledestagesTHEN
+aktindexINCR eins;feldnr:=fnrerstebezeichnung+(aktindex-1)*felderprozeile;
+standardmaskenfeld(wert(fnrazbezeichnung),feldnr);feldnrINCR 1;stunde:=
+intwert(fnraztagstdvor);IF stunde>0THEN stunde:=(stunde-1)MOD
+stundenprowochentag+1;standardmaskenfeld(text(stunde),feldnr);ELSE
+standardmaskenfeld(niltext,feldnr);FI ;feldnrINCR 1;stunde:=intwert(
+fnraztagstdnach);IF stunde>0THEN stunde:=(stunde-1)MOD stundenprowochentag+1;
+standardmaskenfeld(text(stunde),feldnr);ELSE standardmaskenfeld(niltext,
+feldnr);FI ;feldnrINCR 1;standardmaskenfeld(wert(fnrazbeginnuhr),feldnr);
+feldnrINCR 1;standardmaskenfeld(wert(fnrazendeuhr),feldnr);FI FI END PROC
+fuellenurmaske;PROC fuellenurpuffer(BOOL VAR b):IF wert(fnrazsj)>schuljahr
+COR wert(fnrazhj)>halbjahrCOR (datenvorhandenCAND intwert(fnrazaufsichtszeit)
+>tagnr*stelledestages+datensaetzepromaske)COR dbstatus<>0THEN b:=TRUE ELSE
+IF intwert(fnrazaufsichtszeit)>tagnr*stelledestagesTHEN IF NOT datenvorhanden
+THEN datenvorhanden:=TRUE ;tagnr:=intwert(fnrazaufsichtszeit)DIV
+stelledestagesFI ;aktindexINCR eins;savetupel(dnraufsichtszeiten,
+alteaufsichtszeiten(aktindex));FI FI END PROC fuellenurpuffer;BOOL PROC
+falschezeitangabe(INT CONST zeit,fnr,INT VAR status):IF standardmaskenfeld(
+fnr)=niltextTHEN LEAVE falschezeitangabeWITH FALSE FI ;IF length(
+standardmaskenfeld(fnr))>4THEN standardmeldung(meldungzeitangabezulang,
+niltext);status:=fnr;LEAVE falschezeitangabeWITH TRUE FI ;standardpruefe(2,
+fnr,null,null,niltext,status);IF status<>nullTHEN LEAVE falschezeitangabe
+WITH TRUE FI ;IF zeit<nullOR zeitMOD 100>59OR zeitDIV 100>24THEN
+standardmeldung(meldungfalschezeitangabe,niltext);status:=fnr;TRUE ELSE
+FALSE FI END PROC falschezeitangabe;END PACKET erfaufsichtszeiten;
+
diff --git a/app/schulis/2.2.1/src/0.erf zeitraster b/app/schulis/2.2.1/src/0.erf zeitraster
new file mode 100644
index 0000000..b1b1bd7
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.erf zeitraster
@@ -0,0 +1,145 @@
+PACKET erfzeitrasterDEFINES zeitrasterveraendern,zeitrasterspeichern,
+zeitrasteruebernehmen,zeitrasterkopieren:LET trenner="�",niltext="",
+titelanfang="Zeitraster für das ",titelmitte=". Halbjahr ",
+trennerfuerschuljahr="/",null=0,eins=1;LET fnrfueruebernehmen=2,
+fnrfuergeplbearb=3,fnrfueraktbearb=4,fnrcursorruhepos=5,maske="ms zeitraster"
+,fnrerstertagesteil=2,wochentage=6,stundenprowochentag=12,stundenamsamstag=6,
+vormittagsstunden=6,nachmittagsstunden=6,zeitfelderprowochentag=24,
+felderprowochentag=36,datensaetzepromaske=66,erstesfeldfuersamstag=182;LET
+textschuljahr="Schuljahr",textschulhalbjahr="Schulhalbjahr";LET
+kennungvormittag="v",kennungnachmittag="n",allekennungen="vnx",
+kennungmoerstestd=1;LET meldungeingabesinnlos=56,meldungfalschekennung=55,
+meldungfalschezeitangabe=54,meldungzeitangabezulang=341,
+meldungfalschezeitfolge=342,meldungplausi=57,meldungdatenfehlen=68,
+meldungfrageuebernehmen=300,meldunguebernehmen=301,meldungfeldfuellen=52,
+meldungspeicherfehler=73,meldungspeicherung=50;TEXT VAR schuljahr:=niltext,
+halbjahr:=niltext;BOOL VAR datenvorhanden,datenlueckenhaft;ROW
+datensaetzepromaskeTEXT VAR alteszeitraster;INT VAR aktindex;PROC
+zeitrasterveraendern:INT VAR i,j,aktfnr;IF standardmaskenfeld(
+fnrfueruebernehmen)=niltextAND (standardmaskenfeld(fnrfuergeplbearb)<>niltext
+XOR standardmaskenfeld(fnrfueraktbearb)<>niltext)THEN schuljahr:=
+schulkenndatum(textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr);IF
+standardmaskenfeld(fnrfuergeplbearb)<>niltextTHEN geplanteshjundsjberechnen(
+halbjahr,schuljahr)FI ;standardstartproc(maske);
+standardkopfmaskeaktualisieren(titelanfang+halbjahr+titelmitte+text(schuljahr
+,2)+trennerfuerschuljahr+subtext(schuljahr,3));aktindex:=null;inittupel(
+dnrzeitraster);statleseschleife(dnrzeitraster,schuljahr,halbjahr,fnrzrsj,
+fnrzrhj,PROC fuellemaskeundpuffer);datenvorhanden:=aktindex>null;
+datenlueckenhaft:=datenvorhandenCAND aktindex<datensaetzepromaske;IF NOT
+datenvorhandenTHEN aktfnr:=fnrerstertagesteil;FOR iFROM einsUPTO wochentage-
+einsREP FOR jFROM einsUPTO vormittagsstundenREP standardmaskenfeld(
+kennungvormittag,aktfnr);aktfnrINCR einsPER ;FOR jFROM einsUPTO
+nachmittagsstundenREP standardmaskenfeld(kennungnachmittag,aktfnr);aktfnr
+INCR einsPER ;aktfnrINCR zeitfelderprowochentag;PER ;FOR iFROM einsUPTO
+stundenamsamstagREP standardmaskenfeld(kennungvormittag,aktfnr);aktfnrINCR
+einsPER ;FI ;standardnprocELSE standardmeldung(meldungeingabesinnlos,niltext)
+;IF standardmaskenfeld(fnrfueruebernehmen)=niltextTHEN infeld(
+fnrfuergeplbearb)ELSE infeld(fnrfueruebernehmen)FI ;return(1)FI END PROC
+zeitrasterveraendern;PROC zeitrasterspeichern:INT VAR fehlerstatus:=null,
+aktfnr,aktfnrbeginn,aktfnrende,beginnzeit,endezeit,i;pruefeplausibilitaet;IF
+fehlerstatus<>nullTHEN infeld(fehlerstatus);return(1);LEAVE
+zeitrasterspeichernELSE speicherungdurchfuehrenFI ;enter(2).
+pruefeplausibilitaet:standardmeldung(meldungplausi,niltext);FOR iFROM null
+UPTO datensaetzepromaske-einsREP aktfnr:=fnrerstertagesteil+iMOD
+stundenprowochentag+(iDIV stundenprowochentag)*felderprowochentag;IF aktfnr>=
+erstesfeldfuersamstagTHEN aktfnrbeginn:=aktfnr+stundenamsamstag;aktfnrende:=
+aktfnrbeginn+stundenamsamstagELSE aktfnrbeginn:=aktfnr+stundenprowochentag;
+aktfnrende:=aktfnrbeginn+stundenprowochentagFI ;IF standardmaskenfeld(aktfnr)
+=niltextTHEN standardmeldung(meldungfeldfuellen,niltext);fehlerstatus:=aktfnr
+;LEAVE pruefeplausibilitaetFI ;IF pos(allekennungen,standardmaskenfeld(aktfnr
+))=nullTHEN standardmeldung(meldungfalschekennung,niltext);fehlerstatus:=
+aktfnr;LEAVE pruefeplausibilitaetFI ;beginnzeit:=int(standardmaskenfeld(
+aktfnrbeginn));IF falschezeitangabe(beginnzeit,aktfnrbeginn,fehlerstatus)
+THEN LEAVE pruefeplausibilitaetFI ;endezeit:=int(standardmaskenfeld(
+aktfnrende));IF falschezeitangabe(endezeit,aktfnrende,fehlerstatus)THEN
+LEAVE pruefeplausibilitaetFI ;IF beginnzeit>endezeitAND endezeit>0THEN
+standardmeldung(meldungfalschezeitfolge,niltext);fehlerstatus:=aktfnrbeginn;
+LEAVE pruefeplausibilitaetFI PER .speicherungdurchfuehren:standardmeldung(
+meldungspeicherung,niltext);FOR aktindexFROM einsUPTO datensaetzepromaskeREP
+berechnemaskenunddbgroessen;IF datenvorhandenTHEN IF stundewurdeveraendert
+THEN infeld(aktfnr);putwert(fnrzrsj,schuljahr);putwert(fnrzrhj,halbjahr);
+putintwert(fnrzrtagstunde,aktindex);search(dnrzeitraster,true);putwert(
+fnrzrkennungteil,standardmaskenfeld(aktfnr));putwert(fnrzrbeginnuhr,
+standardmaskenfeld(aktfnrbeginn));putwert(fnrzrendeuhr,standardmaskenfeld(
+aktfnrende));IF dbstatus<>nullTHEN insert(dnrzeitraster)ELSE update(
+dnrzeitraster)FI ;speicherfehlerabfangenFI ELSE infeld(aktfnr);putwert(
+fnrzrsj,schuljahr);putwert(fnrzrhj,halbjahr);putintwert(fnrzrtagstunde,
+aktindex);putwert(fnrzrkennungteil,standardmaskenfeld(aktfnr));putwert(
+fnrzrbeginnuhr,standardmaskenfeld(aktfnrbeginn));putwert(fnrzrendeuhr,
+standardmaskenfeld(aktfnrende));insert(dnrzeitraster)FI PER .
+berechnemaskenunddbgroessen:aktfnr:=fnrerstertagesteil+(aktindex-eins)MOD
+stundenprowochentag+((aktindex-eins)DIV stundenprowochentag)*
+felderprowochentag;IF aktfnr>=erstesfeldfuersamstagTHEN aktfnrbeginn:=aktfnr+
+stundenamsamstag;aktfnrende:=aktfnrbeginn+stundenamsamstagELSE aktfnrbeginn:=
+aktfnr+stundenprowochentag;aktfnrende:=aktfnrbeginn+stundenprowochentagFI ;.
+stundewurdeveraendert:datenlueckenhaftCOR standardmaskenfeld(aktfnr)+trenner+
+standardmaskenfeld(aktfnrbeginn)+trenner+standardmaskenfeld(aktfnrende)<>
+alteszeitraster(aktindex).speicherfehlerabfangen:IF dbstatus<>nullTHEN
+standardmeldung(meldungspeicherfehler,niltext);return(1);LEAVE
+zeitrasterspeichernFI .END PROC zeitrasterspeichern;PROC zeitrasterkopieren:
+TEXT VAR tagesteil,beginn,ende;INT VAR i,j,aktfnr:=fnrerstertagesteil;FOR i
+FROM 0UPTO stundenprowochentag-1REP aktfnr:=fnrerstertagesteil+i;tagesteil:=
+standardmaskenfeld(aktfnr);aktfnrINCR stundenprowochentag;beginn:=
+standardmaskenfeld(aktfnr);aktfnrINCR stundenprowochentag;ende:=
+standardmaskenfeld(aktfnr);aktfnrINCR stundenprowochentag;FOR jFROM 1UPTO
+wochentage-2REP standardmaskenfeld(tagesteil,aktfnr);aktfnrINCR
+stundenprowochentag;standardmaskenfeld(beginn,aktfnr);aktfnrINCR
+stundenprowochentag;standardmaskenfeld(ende,aktfnr);aktfnrINCR
+stundenprowochentagPER ;IF i<stundenamsamstagTHEN standardmaskenfeld(
+tagesteil,aktfnr);aktfnrINCR stundenamsamstag;standardmaskenfeld(beginn,
+aktfnr);aktfnrINCR stundenamsamstag;standardmaskenfeld(ende,aktfnr)FI PER ;
+return(1);END PROC zeitrasterkopieren;PROC zeitrasteruebernehmen(BOOL CONST
+hauptaktion):INT VAR posi,i;TEXT VAR satz;BOOL VAR ueberschreiben;IF NOT
+hauptaktionTHEN IF NOT eingangsmaskerichtigangekreuztTHEN standardmeldung(
+meldungeingabesinnlos,niltext);infeld(fnrfueruebernehmen);return(1);LEAVE
+zeitrasteruebernehmenFI ;schuljahr:=schulkenndatum(textschuljahr);halbjahr:=
+schulkenndatum(textschulhalbjahr);fuelledenpuffermitdemzeitraster;IF
+datenvorhandenTHEN standardmeldung(meldungfrageuebernehmen,niltext);
+feldschutz(fnrfueruebernehmen);feldschutz(fnrfuergeplbearb);feldschutz(
+fnrfueraktbearb);feldfrei(fnrcursorruhepos);infeld(fnrcursorruhepos);
+standardnproc;ELSE standardmeldung(meldungdatenfehlen,niltext);infeld(
+fnrfueruebernehmen);return(1)FI ELSE standardmeldung(meldunguebernehmen,
+niltext);geplanteshjundsjberechnen(halbjahr,schuljahr);
+testeobdatenschonvorhanden;FOR iFROM einsUPTO aktindexREP
+ladedendatenbankpuffer;IF ueberschreibenCAND dbstatus=nullTHEN update(
+dnrzeitraster)ELSE insert(dnrzeitraster)FI ;speicherfehlerabfangen;PER ;enter
+(2)FI .eingangsmaskerichtigangekreuzt:standardmaskenfeld(fnrfueruebernehmen)
+<>niltextAND standardmaskenfeld(fnrfuergeplbearb)=niltextAND
+standardmaskenfeld(fnrfueraktbearb)=niltext.fuelledenpuffermitdemzeitraster:
+aktindex:=null;inittupel(dnrzeitraster);statleseschleife(dnrzeitraster,
+schuljahr,halbjahr,fnrzrsj,fnrzrhj,PROC fuellenurpuffer);datenvorhanden:=
+aktindex>null.testeobdatenschonvorhanden:putwert(fnrzrsj,schuljahr);putwert(
+fnrzrhj,halbjahr);putintwert(fnrzrtagstunde,kennungmoerstestd);search(
+dnrzeitraster,TRUE );ueberschreiben:=dbstatus=null.ladedendatenbankpuffer:
+putwert(fnrzrsj,schuljahr);putwert(fnrzrhj,halbjahr);satz:=alteszeitraster(i)
+;posi:=pos(satz,trenner);putwert(fnrzrtagstunde,text(satz,posi-eins));IF
+ueberschreibenTHEN search(dnrzeitraster,TRUE )FI ;satz:=subtext(satz,posi+
+eins);posi:=pos(satz,trenner);putwert(fnrzrkennungteil,text(satz,posi-eins));
+satz:=subtext(satz,posi+eins);posi:=pos(satz,trenner);putwert(fnrzrbeginnuhr,
+text(satz,posi-eins));satz:=subtext(satz,posi+eins);putwert(fnrzrendeuhr,satz
+).speicherfehlerabfangen:IF ueberschreibenCAND dbstatus<>nullTHEN
+standardmeldung(meldungspeicherfehler,niltext);infeld(fnrfueruebernehmen);
+return(1);LEAVE zeitrasteruebernehmenFI .END PROC zeitrasteruebernehmen;PROC
+fuellemaskeundpuffer(BOOL VAR b):INT VAR feldnr,feldnr2;IF wert(fnrzrsj)>
+schuljahrCOR wert(fnrzrhj)>halbjahrCOR dbstatus<>0THEN b:=TRUE ELSE feldnr:=
+fnrerstertagesteil+aktindexMOD stundenprowochentag+(aktindexDIV
+stundenprowochentag)*felderprowochentag;aktindexINCR eins;alteszeitraster(
+aktindex):=wert(fnrzrkennungteil)+trenner+wert(fnrzrbeginnuhr)+trenner+wert(
+fnrzrendeuhr);standardmaskenfeld(wert(fnrzrkennungteil),feldnr);IF feldnr>=
+erstesfeldfuersamstagTHEN feldnrINCR stundenamsamstag;feldnr2:=feldnr+
+stundenamsamstagELSE feldnrINCR stundenprowochentag;feldnr2:=feldnr+
+stundenprowochentagFI ;standardmaskenfeld(wert(fnrzrbeginnuhr),feldnr);
+standardmaskenfeld(wert(fnrzrendeuhr),feldnr2);FI END PROC
+fuellemaskeundpuffer;PROC fuellenurpuffer(BOOL VAR b):IF wert(fnrzrsj)>
+schuljahrCOR wert(fnrzrhj)>halbjahrCOR dbstatus<>0THEN b:=TRUE ELSE aktindex
+INCR eins;alteszeitraster(aktindex):=wert(fnrzrtagstunde)+trenner+wert(
+fnrzrkennungteil)+trenner+wert(fnrzrbeginnuhr)+trenner+wert(fnrzrendeuhr)FI
+END PROC fuellenurpuffer;BOOL PROC falschezeitangabe(INT CONST zeit,fnr,INT
+VAR status):IF standardmaskenfeld(fnr)=niltextTHEN LEAVE falschezeitangabe
+WITH FALSE FI ;IF length(standardmaskenfeld(fnr))>4THEN standardmeldung(
+meldungzeitangabezulang,niltext);status:=fnr;LEAVE falschezeitangabeWITH
+TRUE FI ;standardpruefe(2,fnr,null,null,niltext,status);IF status<>nullTHEN
+LEAVE falschezeitangabeWITH TRUE FI ;IF zeit<nullOR zeitMOD 100>59OR zeitDIV
+100>24THEN standardmeldung(meldungfalschezeitangabe,niltext);status:=fnr;
+TRUE ELSE FALSE FI END PROC falschezeitangabe;END PACKET erfzeitraster;
+
diff --git a/app/schulis/2.2.1/src/0.erf.faecher b/app/schulis/2.2.1/src/0.erf.faecher
new file mode 100644
index 0000000..b3cc71b
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.erf.faecher
@@ -0,0 +1,38 @@
+PACKET erffaecherDEFINES erfassungfaecher:LET maskenname="ms erf faecher",
+fnrletztesfeld=5,fnrkennung=2,fnrlangtext=3,fnrgruppe=4,fnrbereich=5,trenner=
+" = ";LET maxlaengefach=2;LET meldnrfachzulang=60;PROC erfassungfaecher(INT
+CONST proznr):systemdboff;reinitparsing;SELECT proznrOF CASE 1:
+setzeerfassungsparameterCASE 2:zeigefachzurbearbeitungCASE 3:
+pruefeplausibilitaetCASE 4:setzewertefuerdbspeicherungCASE 5:
+setzeidentiobjektfuerobjektlisteCASE 6:faecherlesenCASE 7:faecheraendernCASE
+8:faechereinfuegenCASE 9:faecherloeschenEND SELECT END PROC erfassungfaecher;
+PROC setzeerfassungsparameter:setzeerfassungsparameter(dnrfaecher,maskenname,
+fnrletztesfeld)END PROC setzeerfassungsparameter;PROC zeigefachzurbearbeitung
+:setzeerfassungsfeld(wert(fnrffach),fnrkennung);setzeerfassungsfeld(wert(
+fnrffachbez),fnrlangtext);setzeerfassungsfeld(textnichtnull(wert(fnrffachgrp)
+),fnrgruppe);setzeerfassungsfeld(wert(fnrffachbereich),fnrbereich);END PROC
+zeigefachzurbearbeitung;PROC pruefeplausibilitaet:LET leer="",null=0;INT VAR
+fehlerstatus;pruefe(1,erfassungsmaske,PROC erfassungswert,fnrkennung,null,
+null,leer,fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus
+);LEAVE pruefeplausibilitaetELIF length(erfassungswert(fnrkennung))>
+maxlaengefachTHEN meldeauffaellig(erfassungsmaske,meldnrfachzulang);
+setzefehlerstatus(fnrkennung);LEAVE pruefeplausibilitaetFI ;pruefe(1,
+erfassungsmaske,PROC erfassungswert,fnrlangtext,null,null,leer,fehlerstatus);
+IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);FI ;END PROC
+pruefeplausibilitaet;PROC setzewertefuerdbspeicherung:putwert(fnrffach,
+compress(erfassungswert(fnrkennung)));putwert(fnrffachbez,erfassungswert(
+fnrlangtext));putwert(fnrffachgrp,erfassungswert(fnrgruppe));putwert(
+fnrffachbereich,erfassungswert(fnrbereich));END PROC
+setzewertefuerdbspeicherung;PROC setzeidentiobjektfuerobjektliste:LET
+trennsymbolfuerobli="$";TEXT VAR identizeile;identizeile:=wert(fnrffach)+
+trenner+wert(fnrffachbez);setzeidentiwert(identizeilemitschluesselanhang).
+identizeilemitschluesselanhang:identizeile+trennsymbolfuerobli+wert(fnrffach)
+.END PROC setzeidentiobjektfuerobjektliste;PROC faecherlesen:putwert(fnrffach
+,compress(schluessel));search(dnrfaecher,TRUE );IF dbstatus=okTHEN
+saveupdateposition(dnrfaecher)FI END PROC faecherlesen;PROC faecheraendern:
+restoreupdateposition(dnrfaecher);update(dnrfaecher)END PROC faecheraendern;
+PROC faechereinfuegen:insert(dnrfaecher)END PROC faechereinfuegen;PROC
+faecherloeschen:delete(dnrfaecher)END PROC faecherloeschen;TEXT PROC
+schluessel:erfassungswert(fnrkennung)END PROC schluessel;END PACKET
+erffaecher
+
diff --git a/app/schulis/2.2.1/src/0.erf.schuldaten b/app/schulis/2.2.1/src/0.erf.schuldaten
new file mode 100644
index 0000000..d2bedbd
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.erf.schuldaten
@@ -0,0 +1,51 @@
+PACKET erfschuldatenDEFINES erfassungschuldaten:LET maskenname=
+"ms erf schuldaten",fnrletztesfeld=9,fnrkennung=2,fnrschulname=3,
+fnrstrasseundnummer=4,fnrtelefon=5,fnrplzort=6,fnrschulart=7,fnrschulnr=8,
+fnrbundesland=9,trenner=" = ";LET maxlaengekennung=7,meldkennungzulang=60;
+LET bestandschulart="c02 schulart";PROC erfassungschuldaten(INT CONST proznr)
+:systemdboff;reinitparsing;SELECT proznrOF CASE 1:setzeerfassungsparameter
+CASE 2:zeigeschluesselzurbearbeitungCASE 3:pruefeplausibilitaetCASE 4:
+setzewertefuerdbspeicherungCASE 5:setzeidentiobjektfuerobjektlisteCASE 6:
+schuldatenlesenCASE 7:schuldatenaendernCASE 8:schuldateneinfuegenCASE 9:
+schuldatenloeschenEND SELECT END PROC erfassungschuldaten;PROC
+setzeerfassungsparameter:setzeerfassungsparameter(dnrschulen,maskenname,
+fnrletztesfeld)END PROC setzeerfassungsparameter;PROC
+zeigeschluesselzurbearbeitung:setzeerfassungsfeld(wert(fnrschkennung),
+fnrkennung);setzeerfassungsfeld(wert(fnrschname),fnrschulname);
+setzeerfassungsfeld(wert(fnrschstrnr),fnrstrasseundnummer);
+setzeerfassungsfeld(wert(fnrschtelnr),fnrtelefon);setzeerfassungsfeld(wert(
+fnrschplzort),fnrplzort);setzeerfassungsfeld(wert(fnrschart),fnrschulart);
+setzeerfassungsfeld(wert(fnrschamtlnr),fnrschulnr);setzeerfassungsfeld(wert(
+fnrschbundesland),fnrbundesland);END PROC zeigeschluesselzurbearbeitung;PROC
+pruefeplausibilitaet:LET leer="",null=0;INT VAR fehlerstatus;pruefe(1,
+erfassungsmaske,PROC erfassungswert,fnrkennung,null,null,leer,fehlerstatus);
+ueberpruefefehlerstatus;IF length(erfassungswert(fnrkennung))>
+maxlaengekennungTHEN meldeauffaellig(erfassungsmaske,meldkennungzulang);
+setzefehlerstatus(fnrkennung);LEAVE pruefeplausibilitaetFI ;pruefe(1,
+erfassungsmaske,PROC erfassungswert,fnrschulname,null,null,leer,fehlerstatus)
+;ueberpruefefehlerstatus;pruefe(1,erfassungsmaske,PROC erfassungswert,
+fnrschulart,null,null,leer,fehlerstatus);ueberpruefefehlerstatus;pruefe(4,
+erfassungsmaske,PROC erfassungswert,fnrschulart,null,null,bestandschulart,
+fehlerstatus);ueberpruefefehlerstatus;.ueberpruefefehlerstatus:IF
+fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);LEAVE
+pruefeplausibilitaetFI ;.END PROC pruefeplausibilitaet;PROC
+setzewertefuerdbspeicherung:putwert(fnrschkennung,erfassungswert(fnrkennung))
+;putwert(fnrschname,erfassungswert(fnrschulname));putwert(fnrschstrnr,
+erfassungswert(fnrstrasseundnummer));putwert(fnrschtelnr,erfassungswert(
+fnrtelefon));putwert(fnrschplzort,erfassungswert(fnrplzort));putwert(
+fnrschart,erfassungswert(fnrschulart));putwert(fnrschamtlnr,erfassungswert(
+fnrschulnr));putwert(fnrschbundesland,erfassungswert(fnrbundesland));END
+PROC setzewertefuerdbspeicherung;PROC setzeidentiobjektfuerobjektliste:LET
+trennsymbolfuerobli="$";TEXT VAR identizeile;identizeile:=wert(dnrschulen+1)+
+trenner+wert(dnrschulen+2);identizeile:=subtext(identizeile,1,
+maxidentizeilenlaenge);setzeidentiwert(identizeilemitschluesselanhang).
+identizeilemitschluesselanhang:identizeile+trennsymbolfuerobli+wert(
+dnrschulen+1).END PROC setzeidentiobjektfuerobjektliste;PROC schuldatenlesen:
+putwert(fnrschkennung,schluessel);search(dnrschulen,TRUE );IF dbstatus=ok
+THEN saveupdateposition(dnrschulen);FI END PROC schuldatenlesen;PROC
+schuldatenaendern:restoreupdateposition(dnrschulen);update(dnrschulen);END
+PROC schuldatenaendern;PROC schuldateneinfuegen:insert(dnrschulen)END PROC
+schuldateneinfuegen;PROC schuldatenloeschen:delete(dnrschulen)END PROC
+schuldatenloeschen;TEXT PROC schluessel:erfassungswert(fnrkennung)END PROC
+schluessel;END PACKET erfschuldaten;
+
diff --git a/app/schulis/2.2.1/src/0.grundfunktionen local b/app/schulis/2.2.1/src/0.grundfunktionen local
new file mode 100644
index 0000000..d7b0fc8
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.grundfunktionen local
@@ -0,0 +1,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
+
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 i<posi
+THEN 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 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;
+
diff --git a/app/schulis/2.2.1/src/0.hoeherstufen local.prog b/app/schulis/2.2.1/src/0.hoeherstufen local.prog
new file mode 100644
index 0000000..73f5b20
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.hoeherstufen local.prog
@@ -0,0 +1,312 @@
+PACKET hoeherstufenlocalprogDEFINES schuljahreswechsel,halbjahreswechsel:LET
+dnrschueler=2,fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums=5,fnrsustatuss=6
+,fnrsusgrpjgst=7,fnrsusgrpzugtut=8,fnrsutidakthjd=9,fnrsuartzugang=10,
+fnrsuneuerzugtut=11,fnrsujgsteintr=13,#fnrsuskennlschule=14,dr13.05.88#
+fnrsuabgdats=16,fnrsuabschluss=18,fnrsueintrittinsek=44,dnrhalbjahresdaten=88
+,fnrhjdfamnames=89,fnrhjdrufnames=90,fnrhjdgebdats=91,fnrhjdsj=92,fnrhjdhj=93
+,fnrhjdjgst=94,fnrhjdkennung=95,fnrhjdversetzung=96,#dnrschulen=120,dr13.
+05.88##fnrschkennung=121,dr13.05.88#dnraktschuelergruppen=129,fnrsgrpsj=130,
+fnrsgrphj=131,fnrsgrpjgst=132,fnrsgrpkennung=133,ixsustatfamrufgeb=243,
+ixsustatjgstzug=244,ixsustatjgst=250;LET hellan="",hellaus=" ",meldz=23;
+LET neuanmeld5="n05",neuanmeld11="n11",neuanmeldsonst="nso";LET jgst13="13",
+jgst11="11";LET posvers=1,posnachpr=2,posspringer=3,posfreiwillig=4,
+posnichtvers=5,poshoeherstufen=2,kennzeichenneuan="z",kennzeichenabitur="K",
+gueltigekennzeichen="vnsfw",dreizehnnachpr="N";LET null=0,niltext="",
+trennername=", ",sgtrenner="/",blank=" ",maxjahr=100,minjahr="00",klammerauf=
+" (",klammerzu=")",leerdatum="01.01.00";LET halbjahr1="1",halbjahr2="2",
+zumschuljahresende=1,zumhalbjahresende=0;LET schluesselschuljahr="Schuljahr",
+schluesselhalbjahr="Schulhalbjahr",schluesselendeschulhalbjahr=
+"Ende Schulhalbjahr";LET bestandabgegangene="abg",aktbestand="ls";LET
+anzkenndaten=3;LET protname="Fehlerprotokoll";LET schulname="Schulname",
+schulort="Schulort",zeilenlaenge=77,datumslaenge=8,ordnungstrenner=". ",
+absatztrenner=" - ",protueberschrift=
+"Fehlerprotokoll zum automatischen Hochsetzen";LET weiterefehler=
+"Abbruch des Programmes, da zu viele Fehler",maxfehler=50;LET
+fehlerkeinverserg=1,fehlerkeinneuertutor=2,fehlerungueltigesverserg=3,
+fehlerungueltigesg=4,fehlerungueltigehjd=5,fehlerstatus=6,fehlerplanung=7;
+LET maxfehlerart=7;LET fehleraendern="Ändern: ",fehlerloeschen="Löschen: ";
+LET rcodeprot=1001,rcodenoprot=1002;BOOL VAR updatenoetig:=FALSE ;DATASPACE
+VAR ds:=nilspace;FILE VAR fehlerprot;INT VAR fehlerzahl,kanal;TEXT VAR
+stichtag:="";TEXT VAR letztername,letzterrufname,letztesgebdatum,
+letzterstatus;ROW anzkenndatenTEXT VAR key;ROW maxfehlerartTEXT CONST
+fehlertext:=ROW maxfehlerartTEXT :("Es liegt kein Versetzungsergebnis vor",
+"Es wurde kein neuer Zug/Tutor eingetragen",
+"Das eingetragene Versetzungsergebnis ist nicht zulässig",
+"Die eingetragene Schülergruppe ist nicht vorgesehen",
+"Zu diesem Schüler liegen keine oder unvollständige Halbjahresdaten vor",
+"Fehler beim Datenbankzugriff","Keine Schülergruppen im Planungsbestand");
+TEXT VAR geplschuelergruppen,aufbermeld,aufberprot,aktschuljahr,akthalbjahr,
+kommendesschuljahr;PROC schuljahreswechsel:abschnittsendebearbeitung(
+zumschuljahresende)END PROC schuljahreswechsel;PROC halbjahreswechsel:
+abschnittsendebearbeitung(zumhalbjahresende)END PROC halbjahreswechsel;PROC
+abschnittsendebearbeitung(INT CONST zeitpunkt):forget(ds);kanal:=int(
+getrcvparam(1));continue(kanal);reinitparsing;stichtag:=schulkenndatum(
+schluesselendeschulhalbjahr);aktschuljahr:=schulkenndatum(schluesselschuljahr
+);akthalbjahr:=schulkenndatum(schluesselhalbjahr);kommendesschuljahr:=subtext
+(aktschuljahr,3,4);kommendesschuljahrCAT (jahrestext(int(kommendesschuljahr)+
+1));fehlerbehandlungvorbereiten;verarbeitung;fehlerauswertung;break(quiet).
+fehlerbehandlungvorbereiten:disablestop;forget(protname,quiet);fehlerzahl:=
+null.verarbeitung:IF zeitpunkt=zumschuljahresendeTHEN hochsetzenderschueler
+ELSE halbjahreswechselderschuelerFI .fehlerauswertung:IF fehleraufgetreten
+THEN schickefehlerprotokollananwenderELSE putsndcode(rcodenoprot);ds:=
+nilspace;putsndds(ds);forget(ds)FI ;forget(protname,quiet).fehleraufgetreten:
+fehlerzahl>null.schickefehlerprotokollananwender:clearerror;enablestop;
+putsndcode(rcodeprot);ds:=old(protname);putsndds(ds);forget(ds).END PROC
+abschnittsendebearbeitung;PROC halbjahreswechselderschueler:enablestop;
+schuelergruppenausplanunguebernehmen;IF fehlerzahl=nullTHEN
+aktuellanderschulebefindlicheschuelerdurchgehen(zumhalbjahresende)FI .END
+PROC halbjahreswechselderschueler;PROC hochsetzenderschueler:enablestop;
+schuelergruppenausplanunguebernehmen;IF fehlerzahl=nullTHEN
+aktuellanderschulebefindlicheschuelerdurchgehen(zumschuljahresende);
+neuanmeldungenuebernehmenFI .neuanmeldungenuebernehmen:
+neuanmeldungenzur5uebernehmen;neuanmeldungenzur11uebernehmen;
+sonstigeneuanmeldungenuebernehmen.END PROC hochsetzenderschueler;PROC
+schuelergruppenausplanunguebernehmen:TEXT VAR folgesj,folgehj;
+geplschuelergruppen:=niltext;neuewertefuerschuljahrhalbjahrbestimmen;
+inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,folgesj);putwert(fnrsgrphj
+,folgehj);search(dnraktschuelergruppen,FALSE );WHILE dbstatus=okCAND
+richtigesschulhalbjahrREP leseeinesg;succ(dnraktschuelergruppen)PER ;IF
+geplschuelergruppen=niltextTHEN fehler(niltext,fehlerplanung)ELSE
+alteschuelergruppenloeschen;#statistikwuerfelvorbereitendr11.05.88#FI .
+neuewertefuerschuljahrhalbjahrbestimmen:IF akthalbjahr=halbjahr1THEN folgesj
+:=aktschuljahr;folgehj:=halbjahr2ELSE folgesj:=kommendesschuljahr;folgehj:=
+halbjahr1FI .richtigesschulhalbjahr:wert(fnrsgrpsj)=folgesjCAND wert(
+fnrsgrphj)=folgehj.#dr11.05.88statistikwuerfelvorbereiten:melde(hellan+
+"Die speziellen Statistiken werden initialisiert"+hellaus,meldz);initstatraum
+(TRUE );bestaendeinstatraumeintragen(folgesj,folgehj);
+kuerzelnameninstatraumeintragen.#END PROC
+schuelergruppenausplanunguebernehmen;PROC alteschuelergruppenloeschen:TEXT
+VAR sg:="";inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,aktschuljahr);
+putwert(fnrsgrphj,akthalbjahr);search(dnraktschuelergruppen,FALSE );WHILE
+altesschuljahrhalbjahrREP sg:=wert(fnrsgrpjgst)+wert(fnrsgrpkennung);delete(
+dnraktschuelergruppen);IF dbstatus<>nullTHEN fehler(sg,fehlerstatus,
+fehlerloeschen+text(dbstatus))ELSE melde("Die aktuelle Schülergruppe "+hellan
++sg+hellaus+"wird gelöscht",meldz)FI ;search(dnraktschuelergruppen,FALSE )
+PER .altesschuljahrhalbjahr:dbstatus=nullCAND wert(fnrsgrpsj)=aktschuljahr
+CAND wert(fnrsgrphj)=akthalbjahr.END PROC alteschuelergruppenloeschen;PROC
+leseeinesg:TEXT CONST jgstkurz:=wert(fnrsgrpjgst),jgstlang:=jgstaufber(
+jgstkurz),zug:=compress(wert(fnrsgrpkennung));melde(
+"Die aktuelle Schülergruppe "+hellan+jgstlang+zug+hellaus+"wird eingerichtet"
+,meldz);geplschuelergruppenCAT jgstlang;geplschuelergruppenCAT zug;
+geplschuelergruppenCAT sgtrennerEND PROC leseeinesg;PROC
+aktuellanderschulebefindlicheschuelerdurchgehen(INT CONST zeitpunkt):TEXT
+VAR schuelertid:="";bereitevor;erstenlesen;WHILE nochwelchedaREP schuelertid
+:=gettid;saveupdateposition(dnrschueler);verarbeiten;aenderungspeichern;
+updatenoetig:=TRUE ;naechstenlesen;PER .bereitevor:inittupel(dnrschueler);
+putwert(fnrsustatuss,aktbestand);updatenoetig:=TRUE .erstenlesen:search(
+ixsustatfamrufgeb,FALSE );merkealleschluesselwerte.naechstenlesen:IF wert(
+fnrsustatuss)=bestandabgegangeneTHEN putwert(fnrsustatuss,aktbestand);search(
+ixsustatfamrufgeb,FALSE )ELSE succ(ixsustatfamrufgeb)FI ;IF
+selbensatznochmalgelesenTHEN succ(ixsustatfamrufgeb)FI ;
+merkealleschluesselwerte.merkealleschluesselwerte:letztername:=wert(
+fnrsufamnames);letzterrufname:=wert(fnrsurufnames);letztesgebdatum:=wert(
+fnrsugebdatums);letzterstatus:=wert(fnrsustatuss).selbensatznochmalgelesen:
+letztername=wert(fnrsufamnames)CAND letzterrufname=wert(fnrsurufnames)CAND
+letztesgebdatum=wert(fnrsugebdatums)CAND letzterstatus=wert(fnrsustatuss).
+nochwelcheda:dbstatus=nullCAND wert(fnrsustatuss)=aktbestand.verarbeiten:
+setzekenndaten;setzejgstundsg;meldebearbeitung;IF abgemeldetTHEN
+anderschulebefindlicheabmeldenELIF zeitpunkt=zumschuljahresendeTHEN
+anderschulebefindlichebehandeln(aktjgst,aktsg)ELSE
+schuelerzumhalbjahreswechselbehandeln(aktjgst,aktsg)FI .setzejgstundsg:TEXT
+VAR aktjgst:=jgstaufber(wert(fnrsusgrpjgst)),aktsg:=compress(wert(
+fnrsusgrpzugtut)).meldebearbeitung:melde("Die Daten von "+hellan+aufbermeld+
+hellaus+", "+hellan+aktjgst+aktsg+hellaus+"werden bearbeitet",meldz).
+abgemeldet:INT VAR aktabmeldedatum:=datum(wert(fnrsuabgdats));(
+aktabmeldedatum<>datum(leerdatum))CAND (datum(stichtag)>=aktabmeldedatum).
+anderschulebefindlicheabmelden:putwert(fnrsustatuss,bestandabgegangene);
+updatenoetig:=TRUE ;hjdnaechstesschulhalbjahrbearbeiten(aktjgst,aktsg).
+aenderungspeichern:IF dbstatus=okTHEN IF updatenoetigTHEN
+restoreupdateposition(dnrschueler);selupdate(dnrschueler);ELSE replace(
+dnrschueler,schuelertid);putptid(schuelertid);insertinindex(ixsustatjgstzug);
+IF zeitpunkt=zumschuljahresendeTHEN insertinindex(ixsustatjgst)FI FI ;IF
+dbstatus<>nullTHEN fehler(aufberprot,fehlerstatus,fehleraendern+text(dbstatus
+))FI FI .END PROC aktuellanderschulebefindlicheschuelerdurchgehen;PROC
+schuelerzumhalbjahreswechselbehandeln(TEXT CONST aktjgst,aktsg):TEXT VAR
+neueklasse,neuesg;tutorloeschen;neueklassepruefen;dbstatus(ok).tutorloeschen:
+#removeoutoffindex(ixsustatjgstzug);##dr18.08.88#neuesg:=compress(wert(
+fnrsuneuerzugtut));IF neuesg<>niltextTHEN putwert(fnrsusgrpzugtut,niltext)FI
+.neueklassepruefen:IF neuesg=niltextTHEN neueklasse:=aktjgst+aktsg;neuesg:=
+aktsgELSE neueklasse:=aktjgst+neuesg;putwert(fnrsuneuerzugtut,niltext);
+putwert(fnrsusgrpzugtut,neuesg);FI ;IF NOT gueltigesg(neueklasse)THEN fehler(
+aufberprot,fehlerungueltigesg,neueklasse);dbstatus(9);LEAVE
+schuelerzumhalbjahreswechselbehandelnELSE hjdnaechstesschulhalbjahrbearbeiten
+(aktjgst,neuesg)FI .END PROC schuelerzumhalbjahreswechselbehandeln;PROC
+anderschulebefindlichebehandeln(TEXT CONST aktjgst,aktsg):holehjd;
+analysierehalbjahresdaten;aendere.holehjd:IF wert(fnrsutidakthjd)<>niltext
+THEN readtid(dnrhalbjahresdaten,wert(fnrsutidakthjd));IF iserrorTHEN
+clearerror;dbstatus(notfound)FI ELSE dbstatus(notfound)FI ;IF
+keinehalbjahresdatenvorhandenTHEN fehler(aufberprot,fehlerungueltigehjd);
+LEAVE anderschulebefindlichebehandelnFI .keinehalbjahresdatenvorhanden:
+dbstatus<>okCOR aktschuljahr<>wert(fnrhjdsj)COR akthalbjahr<>wert(fnrhjdhj)
+COR key[1]<>wert(fnrhjdfamnames)COR key[2]<>wert(fnrhjdrufnames)COR key[3]<>
+datumrekonversion(wert(fnrhjdgebdats))COR aktjgst<>jgstaufber(wert(fnrhjdjgst
+))COR aktsg<>compress(wert(fnrhjdkennung)).analysierehalbjahresdaten:TEXT
+VAR versetzung:=wert(fnrhjdversetzung);pruefeversetzungskennzeichen.
+pruefeversetzungskennzeichen:BOOL VAR datenkorrekt:=FALSE ;TEXT CONST
+neuerzugtutor:=wert(fnrsuneuerzugtut);IF versetzung=niltextTHEN fehler(
+aufberprot,fehlerkeinverserg)ELIF pos(gueltigekennzeichen,versetzung)<=null
+THEN fehler(aufberprot,fehlerungueltigesverserg,versetzung);ELIF
+nichtnormalhoeherstufenCAND keinzugtutorTHEN fehler(aufberprot,
+fehlerkeinneuertutor);ELSE datenkorrekt:=TRUE FI ;IF NOT datenkorrektTHEN
+LEAVE anderschulebefindlichebehandelnFI .nichtnormalhoeherstufen:pos(
+gueltigekennzeichen,versetzung)>poshoeherstufen.keinzugtutor:neuerzugtutor=
+niltext.aendere:TEXT VAR neuesg:=wert(fnrsusgrpzugtut);#removeoutoffindex(
+ixsustatjgst);removeoutoffindex(ixsustatjgstzug);##dr18.08.88#IF
+neuerzugtutor<>niltextTHEN neuesg:=neuerzugtutorFI ;aendereschueler(aktjgst,
+aktsg,neuesg,versetzung).END PROC anderschulebefindlichebehandeln;PROC
+aendereschueler(TEXT CONST aktjgst,aktsg,neuesg,versetzung):bereitevor;
+setzedaten;hjddatenloeschen;hjdnaechstesschulhalbjahrbearbeiten(neuejgst,
+neuesg).bereitevor:TEXT VAR neuejgst:=aktjgst;TEXT VAR loeschjgst:=aktjgst;.
+setzedaten:trageversetzungundtutorein;INT CONST kennzeichenpos:=pos(
+gueltigekennzeichen,versetzung);SELECT kennzeichenposOF CASE posspringer:
+springenCASE posvers:normalversetzenCASE posnachpr:zurnachpruefungversetzen
+CASE posnichtvers,posfreiwillig:sitzenbleibenEND SELECT ;TEXT VAR neueklasse
+:=neuejgst+neuesg;IF falscherzugtutorTHEN fehler(aufberprot,
+fehlerungueltigesg,neueklasse);LEAVE aendereschuelerFI .falscherzugtutor:NOT
+gueltigesg(neueklasse).trageversetzungundtutorein:putwert(fnrsuartzugang,
+versetzung);putwert(fnrsuneuerzugtut,niltext).springen:IF int(aktjgst)>11
+THEN fehler(aufberprot,fehlerungueltigesverserg,versetzung);LEAVE
+aendereschuelerFI ;BOOL VAR sitzenbleiber:=FALSE ;neuejgst:=jgstaufber(text(
+int(aktjgst)+2));loeschjgst:=jgstaufber(text(int(aktjgst)+1));
+nachfolgendehjdsloeschen;sgeintragen;eintrittsek2evtleintragen.
+normalversetzen:IF inder13THEN dreizehnerabmelden;
+hjdnaechstesschulhalbjahrbearbeiten(neuejgst,aktsg);LEAVE aendereschueler
+ELSE normalhochsetzenFI .zurnachpruefungversetzen:IF inder13THEN
+nachpruefling13ELSE normalhochsetzenFI .normalhochsetzen:sitzenbleiber:=
+FALSE ;neuejgst:=jgstaufber(text(int(aktjgst)+1));loeschjgst:=neuejgst;
+sgeintragen;eintrittsek2evtleintragen.sgeintragen:putwert(fnrsusgrpjgst,
+neuejgst);putwert(fnrsusgrpzugtut,neuesg);.eintrittsek2evtleintragen:IF
+neuejgst=jgst11THEN putwert(fnrsueintrittinsek,kommendesschuljahr);FI .
+nachpruefling13:sitzenbleiber:=TRUE ;putwert(fnrsuartzugang,dreizehnnachpr);
+sgeintragen.sitzenbleiben:sitzenbleiber:=TRUE ;sgeintragen;
+nachfolgendehjdsloeschen.nachfolgendehjdsloeschen:halbjahresdatenloeschen(
+PROC (INT CONST )succ,key,halbjahr2,int(aktjgst),FALSE );.inder13:aktjgst=
+jgst13.hjddatenloeschen:halbjahresdatenloeschen(key,aktjgst,loeschjgst,
+halbjahr1).END PROC aendereschueler;PROC dreizehnerabmelden:putwert(
+fnrsuabgdats,stichtag);putwert(fnrsuabschluss,kennzeichenabitur);putwert(
+fnrsustatuss,bestandabgegangene);updatenoetig:=TRUE ;END PROC
+dreizehnerabmelden;PROC neuanmeldungenzur5uebernehmen:uebernehmenaus(
+neuanmeld5,1)END PROC neuanmeldungenzur5uebernehmen;PROC
+neuanmeldungenzur11uebernehmen:uebernehmenaus(neuanmeld11,1)END PROC
+neuanmeldungenzur11uebernehmen;PROC sonstigeneuanmeldungenuebernehmen:
+uebernehmenaus(neuanmeldsonst,2)END PROC sonstigeneuanmeldungenuebernehmen;
+PROC uebernehmenaus(TEXT CONST bestand,INT CONST meld):BOOL VAR
+allesinordnung:=FALSE ;TEXT VAR neuejgst,neuerzug;bereitevor;erstenlesen;
+WHILE nochwelchedaREP saveupdateposition(dnrschueler);pruefen;IF
+allesinordnungTHEN uebernehmen;putwert(fnrsustatuss,bestand);meldeuebernahme;
+FI ;naechstenlesen;PER .bereitevor:inittupel(dnrschueler);putwert(
+fnrsustatuss,bestand).erstenlesen:search(ixsustatfamrufgeb,FALSE ).
+nochwelcheda:dbstatus=nullCAND wert(fnrsustatuss)=bestand.pruefen:
+setzekenndaten;pruefetutorsg(allesinordnung);.uebernehmen:neuejgst:=wert(
+fnrsujgsteintr);neuerzug:=wert(fnrsuneuerzugtut);dbwertesetzen;
+hjdnaechstesschulhalbjahrbearbeiten(neuejgst,neuerzug);restoreupdateposition(
+dnrschueler);selupdate(dnrschueler);IF dbstatus<>nullTHEN fehler(aufberprot,
+fehlerstatus,fehleraendern+text(dbstatus))FI .dbwertesetzen:putwert(
+fnrsusgrpjgst,jgstaufber(neuejgst));putwert(fnrsusgrpzugtut,neuerzug);putwert
+(fnrsuartzugang,kennzeichenneuan);putwert(fnrsuneuerzugtut,niltext).
+meldeuebernahme:IF meld=1THEN melde("Bearbeitung der Neuangemeldeten zur "+
+jgstaufber(neuejgst)+": "+hellan+aufbermeld+hellaus,meldz)ELSE melde(
+"Bearbeitung sonstiger Neuanmeldungen: "+hellan+aufbermeld+hellaus,meldz)FI .
+naechstenlesen:search(ixsustatfamrufgeb,FALSE )#dr18.08.88##succ(
+ixsustatfamrufgeb)##eigentlichrichtig#.END PROC uebernehmenaus;PROC fehler(
+TEXT CONST name,INT CONST fehlernr):fehler(name,fehlernr,niltext)END PROC
+fehler;PROC fehler(TEXT CONST name,INT CONST fehlernr,TEXT CONST ergaenzung):
+IF ersterfehlerTHEN fehlerprotokollbeginnenELIF zuvielefehlerTHEN
+programmendeFI ;nameinprotokoll;fehler(fehlernr,ergaenzung);dbstatus(notfound
+);.ersterfehler:fehlerzahl=null.zuvielefehler:fehlerzahl=maxfehler.
+fehlerprotokollbeginnen:fehlerprot:=sequentialfile(output,protname);TEXT VAR
+protzeile:=schulkenndatum(schulname);protzeileCAT ((zeilenlaenge-datumslaenge
+-length(protzeile))*blank);protzeileCAT date;putline(fehlerprot,protzeile);
+putline(fehlerprot,schulkenndatum(schulort));line(fehlerprot,3);putline(
+fehlerprot,protueberschrift);line(fehlerprot).programmende:line(fehlerprot);
+putline(fehlerprot,weiterefehler);stop.nameinprotokoll:fehlerzahlINCR 1;line(
+fehlerprot);protzeile:=text(fehlerzahl)+ordnungstrenner+name;putline(
+fehlerprot,protzeile).END PROC fehler;PROC fehler(INT CONST fehlernr,TEXT
+CONST ergaenzung):TEXT VAR protzeile:=absatztrenner+fehlertext(fehlernr);IF
+ergaenzung<>niltextTHEN protzeileCAT klammerauf;protzeileCAT ergaenzung;
+protzeileCAT klammerzuFI ;putline(fehlerprot,protzeile)END PROC fehler;PROC
+pruefetutorsg(BOOL VAR allesinordnung):TEXT VAR eintrittjgst:=wert(
+fnrsujgsteintr),neuerzug:=wert(fnrsuneuerzugtut);allesinordnung:=neuerzug<>
+niltext;IF allesinordnungTHEN allesinordnung:=gueltigesg(eintrittjgst+
+neuerzug);IF NOT allesinordnungTHEN fehler(aufberprot,fehlerungueltigesg,
+eintrittjgst+neuerzug)FI ELSE fehler(aufberprot,fehlerkeinneuertutor)FI ;END
+PROC pruefetutorsg;BOOL PROC gueltigesg(TEXT CONST sg):pos(
+geplschuelergruppen,sg+sgtrenner)>nullEND PROC gueltigesg;PROC setzekenndaten
+:key(1):=wert(fnrsufamnames);key(2):=wert(fnrsurufnames);key(3):=
+datumrekonversion(wert(fnrsugebdatums));aufbermeld:=key(1)+trennername+key(2)
+;aufberprot:=aufbermeld+trennername+datumskonversion(key(3))END PROC
+setzekenndaten;TEXT PROC jahrestext(INT CONST jahr):IF jahr=maxjahrTHEN
+minjahrELSE text(jahr)FI END PROC jahrestext;PROC
+hjdnaechstesschulhalbjahrbearbeiten(TEXT CONST jgst,zug):IF wert(fnrsustatuss
+)<>aktbestandTHEN halbjahresdateninitialisierenundverarbeitenELSE
+halbjahresdatensuchenundverarbeitenFI ;dbstatus(ok)#dr18.08.88##inittupel(
+dnrschulen);dr11.05.88putwert(fnrschkennung,wert(fnrsuskennlschule));search(
+dnrschulen,TRUE );einenschuelerinstatraumeinfuegen#.
+halbjahresdateninitialisierenundverarbeiten:putwert(fnrsutidakthjd,niltext);
+inittupel(dnrhalbjahresdaten);IF wert(fnrsustatuss)<>bestandabgegangeneTHEN
+putwert(fnrsustatuss,aktbestand)FI .halbjahresdatensuchenundverarbeiten:
+schluesselsetzen;search(dnrhalbjahresdaten,TRUE );IF dbstatus=okTHEN
+eventuellneueklasseeintragen;putwert(fnrsutidakthjd,gettid)ELSE putwert(
+fnrsutidakthjd,niltext)FI .schluesselsetzen:IF akthalbjahr=halbjahr1THEN
+schluesselfuerhjdsetzen(dnrhalbjahresdaten,key,aktschuljahr,halbjahr2,jgst)
+ELSE schluesselfuerhjdsetzen(dnrhalbjahresdaten,key,kommendesschuljahr,
+halbjahr2,jgst)FI .eventuellneueklasseeintragen:IF schuelergruppegeaendert
+THEN halbjahresdatenaendernFI .schuelergruppegeaendert:wert(fnrhjdjgst)<>jgst
+OR wert(fnrhjdkennung)<>zug.halbjahresdatenaendern:putwert(fnrhjdjgst,jgst);
+putwert(fnrhjdkennung,zug);selupdate(dnrhalbjahresdaten).END PROC
+hjdnaechstesschulhalbjahrbearbeiten;LET seperatorzeichen=":./ ",
+seperatorzeichen1=".";INT CONST beforefirstday:=-(22*vierjahre)-1;TEXT VAR b;
+BOOL VAR conversionerror:=FALSE ;INT PROC nildatum:beforefirstdayEND PROC
+nildatum;#L datumslets#LET letzterjanuar=31,letzterfebruar=59,letztermaerz=90
+,letzterapril=120,letztermai=151,letzterjuni=181,letzterjuli=212,
+letzteraugust=243,letzterseptember=273,letzteroktober=304,letzternovember=334
+,#letzterdezember=365,#vierjahre=1461;PROC tmj(INT CONST d,INT VAR t,m,j):
+INT VAR a;IF d<=beforefirstdayTHEN t:=-1;m:=-1;j:=-1;LEAVE tmjFI ;a:=d;IF a>0
+THEN j:=88ELSE j:=0;aINCR (-(beforefirstday+1))FI ;jINCR 4*(aDIV vierjahre);a
+:=aMOD vierjahre;IF a=letzterfebruarTHEN t:=29;m:=2;LEAVE tmjELIF a>
+letzterfebruarTHEN aDECR 1FI ;jINCR aDIV 365;a:=(aMOD 365)+1;IF a<=
+letzterjuniTHEN januarbisjuniELSE julibisdezemberFI .januarbisjuni:IF a<=
+letztermaerzTHEN januarbismaerzELSE aprilbisjuniFI .julibisdezember:IF a<=
+letzterseptemberTHEN julibisseptemberELSE oktoberbisdezemberFI .
+januarbismaerz:IF a<=letzterjanuarTHEN m:=1;t:=aELIF a<=letzterfebruarTHEN m
+:=2;t:=a-letzterjanuarELSE m:=3;t:=a-letzterfebruarFI .aprilbisjuni:IF a<=
+letzteraprilTHEN m:=4;t:=a-letztermaerzELIF a<=letztermaiTHEN m:=5;t:=a-
+letzteraprilELSE m:=6;t:=a-letztermaiFI .julibisseptember:IF a<=letzterjuli
+THEN m:=7;t:=a-letzterjuniELIF a<=letzteraugustTHEN m:=8;t:=a-letzterjuli
+ELSE m:=9;t:=a-letzteraugustFI .oktoberbisdezember:IF a<=letzteroktoberTHEN m
+:=10;t:=a-letzterseptemberELIF a<=letzternovemberTHEN m:=11;t:=a-
+letzteroktoberELSE m:=12;t:=a-letzternovemberFI .END PROC tmj;INT PROC datum(
+TEXT CONST a):b:=a;conversionerror:=FALSE ;INT VAR seperator:=seppos,t,m,j;
+IF seperator=0THEN IF length(b)=6THEN t:=z(1)*10+z(2);m:=z(3)*10+z(4);j:=z(5)
+*10+z(6);INT VAR dummy:=datum(t,m,j);IF conversionerrorTHEN dummy:=nildatum
+FI ;LEAVE datumWITH dummyELSE leaveFI ELIF seperator=2THEN t:=z(1);ELIF
+seperator=3THEN t:=10*z(1)+z(2);ELSE leaveFI ;b:=subtext(b,seperator+1);
+seperator:=seppos;IF seperator=3THEN m:=z(1)*10+z(2);ELIF seperator=2THEN m:=
+z(1)ELSE leaveFI ;b:=subtext(b,seperator+1);IF length(b)=2THEN j:=z(1)*10+z(2
+)ELIF length(b)=4THEN j:=z(1)*1000+z(2)*100+z(3)*10+z(4)-1900;ELSE leaveFI ;
+IF conversionerrorTHEN nildatumELSE datum(t,m,j)FI .leave:LEAVE datumWITH
+nildatum.seppos:INT VAR q;FOR qFROM 2UPTO 3REP IF pos(seperatorzeichen,bSUB q
+)>0THEN LEAVE sepposWITH q;FI PER ;0.END PROC datum;INT PROC z(INT CONST wo):
+INT VAR e:=code(bSUB wo)-48;IF e<0OR e>9THEN conversionerror:=TRUE ;0ELSE e
+FI END PROC z;INT PROC datum(INT CONST t,m,jc):INT VAR j:=jc-1900IF j<0THEN j
+INCR 1900FI ;IF (j+160)DIV 160<>1THEN nildatumELIF t<0THEN nildatumELSE
+SELECT mOF CASE 1,3,5,7,8,10,12:IF t>31THEN nildatumELSE erg(t,m,j)FI CASE 4,
+6,9,11:IF t>30THEN nildatumELSE erg(t,m,j)FI CASE 2:IF t<29THEN erg(t,m,j)
+ELIF t=29AND jMOD 4=0THEN erg(t,m,j)ELSE nildatumFI OTHERWISE nildatumEND
+SELECT FI END PROC datum;INT PROC erg(INT CONST t,m,jc):INT VAR j:=jc;INT
+VAR result:=beforefirstday,tagimzyklus;IF j>=88THEN jDECR 88;result:=-1FI ;
+resultINCR ((jDIV 4)*vierjahre);j:=jMOD 4;tagimzyklus:=tagundmonat+365*j;IF
+tagimzyklus>erstermaerzimschaltjahrTHEN tagimzyklusINCR 1ELIF tagimzyklus=
+erstermaerzimschaltjahrAND m=3THEN tagimzyklusINCR 1FI ;result+tagimzyklus.
+erstermaerzimschaltjahr:60.tagundmonat:SELECT mOF CASE 1:tCASE 2:t+
+letzterjanuarCASE 3:t+letzterfebruarCASE 4:t+letztermaerzCASE 5:t+
+letzteraprilCASE 6:t+letztermaiCASE 7:t+letzterjuniCASE 8:t+letzterjuliCASE 9
+:t+letzteraugustCASE 10:t+letzterseptemberCASE 11:t+letzteroktoberCASE 12:t+
+letzternovemberOTHERWISE errorstop("monat > 12 oder < 0");0END SELECT .END
+PROC erg;INT PROC jahr(INT CONST d):INT VAR t,m,j;tmj(d,t,m,j);j+1900END
+PROC jahr;TEXT PROC datum(INT CONST d):INT VAR t,m,j;TEXT VAR e;tmj(d,t,m,j);
+IF t<0THEN LEAVE datumWITH ""FI ;e:=code(tDIV 10+48);eCAT code(tMOD 10+48);e
+CAT seperatorzeichen1;eCAT code(mDIV 10+48);eCAT code(mMOD 10+48);eCAT
+seperatorzeichen1;eCAT code((jMOD 100)DIV 10+48);eCAT code(jMOD 10+48);eEND
+PROC datum;END PACKET hoeherstufenlocalprog
+
diff --git a/app/schulis/2.2.1/src/0.ida.data b/app/schulis/2.2.1/src/0.ida.data
new file mode 100644
index 0000000..a9cff8e
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ida.data
@@ -0,0 +1,170 @@
+PACKET idadataDEFINES putformular,openformular,initformular,getactivformular,
+getformtextname,getformularinfo,putformularinfo,getformularname,
+getformularindex,getsteuercode,putsteuercode,getdruckaufbereitung,
+putdruckaufbereitung,getzeile,putzeile,geteinfuegstellen,puteinfuegstellen,
+getzeilenanzahl,putzeilenanzahl,getunterbloecke,putunterbloecke,
+getvorzeilennr,putvorzeilennr,getanzahlselfelder,putanzahlselfelder,
+getselektion,putselektion,getobjektklasse,putobjektklasse,getleitindex,
+putleitindex,getscan,putscan,getanzahlregeln,putanzahlregeln,getregelnummer,
+deleteregel,getblockregelnummer,putblockregelnummer,getzugriffsregel,
+putzugriffsregel,getanzahlregelfelder,putanzahlregelfelder,getvergleichswert,
+putvergleichswert,getblockanzahl,FORMULAR ,openmitloeschen,
+setzeidazeichensatz:TEXT VAR idazeichensatz:="";LET maxanw=100,maxblock=11,
+maxregel=50,maxobjekt=10,maxfeld=10,maxtext=100,maxsel=200;TYPE FORMULAR =
+STRUCT (INFO formularbeschreibung,ROW maxregelREGEL zugriffsregel,INT
+anzregeln,ROW maxobjektTEXT objektklassen,ROW maxselSELEKT selektion,INT
+anzselfelder,DRUCKFORM druckform);TYPE INFO =STRUCT (TEXT formname,
+scanbedingung,INT formindex,leitindex,BOOL formtyp);TYPE REGEL =STRUCT (INT
+objektklassennr,regelnummer,indexnr,anzkeyfelder,ROW maxfeldTEXT
+vergleichswert);TYPE SELEKT =STRUCT (TEXT selektionsfeld,wert);TYPE BLOCK =
+STRUCT (ROW maxtextTEXT zeile,ROW maxtextTEXT einfuegstellen,INT anzzeilen,
+zuregelnummer,TEXT unterblock,vorzeilennr);TYPE DRUCKFORM =STRUCT (ROW
+maxblockBLOCK block,ROW maxanwSTCODE stcodes,INT anzblock,DRUCK
+druckaufbereitung);TYPE STCODE =STRUCT (TEXT steuercode,INT laenge,BOOL
+rechtsbuendig,druckvariable);TYPE DRUCK =STRUCT (TEXT schrifttyp,REAL
+startlinks,startoben,INT zeilenproseite,REAL zeilenbreite);DATASPACE VAR fds
+:=nilspace;BOUND FORMULAR VAR form;INT VAR aktformindex:=0;PROC
+setzeidazeichensatz(TEXT CONST schriftart):idazeichensatz:=schriftartEND
+PROC setzeidazeichensatz;BOOL VAR loeschenerlaubt:=TRUE ;BOOL PROC
+openmitloeschen:loeschenerlaubtENDPROC openmitloeschen;PROC openmitloeschen(
+BOOL CONST b):loeschenerlaubt:=bENDPROC openmitloeschen;PROC putformular(
+DATASPACE CONST ds):forget(fds);fds:=ds;form:=fds;aktformindex:=
+getformularindexENDPROC putformular;PROC openformular(INT CONST index):IF
+aktformindex<>indexCAND loeschenerlaubtTHEN letzteformularloeschenFI ;
+aktformindex:=index;IF exists(getformdataname)THEN form:=old(getformdataname)
+ELSE initformular(index);FI .letzteformularloeschen:forget(getformdataname,
+quiet);forget(getformtextname,quiet).ENDPROC openformular;PROC initformular(
+INT CONST index):INT VAR i,j;FILE VAR formtext;aktformindex:=index;forget(
+getformdataname,quiet);form:=new(getformdataname);putanzahlregeln(0);
+putanzahlselfelder(0);putleitindex(0);putscan("");formtext:=sequentialfile(
+output,getformtextname);FOR iFROM 1UPTO maxobjektREP putobjektklasse(i,"")
+PER ;FOR iFROM 1UPTO maxanwREP putsteuercode(i,"",0,FALSE ,TRUE )PER ;FOR i
+FROM 1UPTO maxregelREP FOR jFROM 1UPTO maxfeldREP form.zugriffsregel[i].
+vergleichswert[j]:=""PER PER ;putdruckaufbereitung(idazeichensatz,2.0,2.0,60,
+77.0);putformularinfo("",index,TRUE )ENDPROC initformular;INT PROC
+getactivformular:aktformindexENDPROC getactivformular;TEXT PROC
+getformdataname:"FORMDATA."+text(aktformindex)ENDPROC getformdataname;TEXT
+PROC getformtextname:"FORMTEXT."+text(aktformindex)ENDPROC getformtextname;
+PROC getsteuercode(INT CONST index,TEXT VAR ausdruck,INT VAR ausglaenge,BOOL
+VAR rbuendig,druckvar):IF index<1COR index>maxanwTHEN ausdruck:=""ELSE
+ausdruck:=form.druckform.stcodes[index].steuercode;ausglaenge:=form.druckform
+.stcodes[index].laenge;rbuendig:=form.druckform.stcodes[index].rechtsbuendig;
+druckvar:=form.druckform.stcodes[index].druckvariable;FI ENDPROC
+getsteuercode;PROC putsteuercode(INT CONST index,TEXT CONST ausdruck,INT
+CONST ausglaenge,BOOL CONST rbuendig,druckvar):form.druckform.stcodes[index].
+steuercode:=ausdruck;form.druckform.stcodes[index].laenge:=ausglaenge;form.
+druckform.stcodes[index].rechtsbuendig:=rbuendig;form.druckform.stcodes[index
+].druckvariable:=druckvar;ENDPROC putsteuercode;PROC putdruckaufbereitung(
+TEXT CONST schriftart,REAL CONST linkerrandlinks,linkerrandoben,INT CONST
+zeilenperseite,REAL CONST zeichenperzeile):form.druckform.druckaufbereitung.
+schrifttyp:=schriftart;form.druckform.druckaufbereitung.startlinks:=
+linkerrandlinks;form.druckform.druckaufbereitung.startoben:=linkerrandoben;
+form.druckform.druckaufbereitung.zeilenproseite:=zeilenperseite;form.
+druckform.druckaufbereitung.zeilenbreite:=zeichenperzeile;ENDPROC
+putdruckaufbereitung;PROC getdruckaufbereitung(TEXT VAR schriftart,REAL VAR
+linkerrandlinks,linkerrandoben,INT VAR zeilenperseite,REAL VAR
+zeichenperzeile):schriftart:=form.druckform.druckaufbereitung.schrifttyp;
+linkerrandlinks:=form.druckform.druckaufbereitung.startlinks;linkerrandoben:=
+form.druckform.druckaufbereitung.startoben;zeilenperseite:=form.druckform.
+druckaufbereitung.zeilenproseite;zeichenperzeile:=form.druckform.
+druckaufbereitung.zeilenbreite;ENDPROC getdruckaufbereitung;TEXT PROC
+getzeile(INT CONST blocknr,zeilennr):form.druckform.block[blocknr+1].zeile[
+zeilennr]ENDPROC getzeile;PROC putzeile(INT CONST blocknr,zeilennr,TEXT
+CONST textzeile):form.druckform.block[blocknr+1].zeile[zeilennr]:=textzeile;
+form.druckform.anzblock:=max(form.druckform.anzblock,blocknr)ENDPROC putzeile
+;TEXT PROC geteinfuegstellen(INT CONST blocknr,zeilennr):form.druckform.block
+[blocknr+1].einfuegstellen[zeilennr]ENDPROC geteinfuegstellen;PROC
+puteinfuegstellen(INT CONST blocknr,zeilennr,TEXT CONST einfueg):form.
+druckform.block[blocknr+1].einfuegstellen[zeilennr]:=einfuegENDPROC
+puteinfuegstellen;INT PROC getzeilenanzahl(INT CONST blocknr):form.druckform.
+block[blocknr+1].anzzeilenENDPROC getzeilenanzahl;PROC putzeilenanzahl(INT
+CONST blocknr,zeilennr):form.druckform.block[blocknr+1].anzzeilen:=zeilennr
+ENDPROC putzeilenanzahl;INT PROC getblockregelnummer(INT CONST blocknr):form.
+druckform.block[blocknr+1].zuregelnummerENDPROC getblockregelnummer;PROC
+putblockregelnummer(INT CONST blocknr,regel):form.druckform.block[blocknr+1].
+zuregelnummer:=regelENDPROC putblockregelnummer;INT PROC getblockanzahl:form.
+druckform.anzblockENDPROC getblockanzahl;TEXT PROC getunterbloecke(INT CONST
+blocknr):form.druckform.block[blocknr+1].unterblockENDPROC getunterbloecke;
+PROC putunterbloecke(INT CONST blocknr,TEXT CONST ub):form.druckform.block[
+blocknr+1].unterblock:=ubENDPROC putunterbloecke;TEXT PROC getvorzeilennr(
+INT CONST blocknr):form.druckform.block[blocknr+1].vorzeilennrENDPROC
+getvorzeilennr;PROC putvorzeilennr(INT CONST blocknr,TEXT CONST zeilenno):
+form.druckform.block[blocknr+1].vorzeilennr:=zeilennoENDPROC putvorzeilennr;
+TEXT PROC getscan:form.formularbeschreibung.scanbedingungENDPROC getscan;
+PROC putscan(TEXT CONST bedingung):form.formularbeschreibung.scanbedingung:=
+bedingungENDPROC putscan;TEXT PROC getobjektklasse(INT CONST ix):form.
+objektklassen[ix]ENDPROC getobjektklasse;PROC putobjektklasse(INT CONST ix,
+TEXT CONST okname):form.objektklassen[ix]:=oknameENDPROC putobjektklasse;
+TEXT PROC getformularname:form.formularbeschreibung.formnameENDPROC
+getformularname;INT PROC getformularindex:form.formularbeschreibung.formindex
+ENDPROC getformularindex;PROC getformularinfo(TEXT VAR name,INT VAR index,
+BOOL VAR typ):name:=form.formularbeschreibung.formname;index:=form.
+formularbeschreibung.formindex;typ:=form.formularbeschreibung.formtyp;
+ENDPROC getformularinfo;PROC putformularinfo(TEXT CONST name,INT CONST index,
+BOOL CONST typ):form.formularbeschreibung.formname:=name;form.
+formularbeschreibung.formindex:=index;form.formularbeschreibung.formtyp:=typ;
+ENDPROC putformularinfo;INT PROC getleitindex:form.formularbeschreibung.
+leitindexENDPROC getleitindex;PROC putleitindex(INT CONST neuerindex):form.
+formularbeschreibung.leitindex:=neuerindexENDPROC putleitindex;INT PROC
+getanzahlregeln:form.anzregelnENDPROC getanzahlregeln;PROC putanzahlregeln(
+INT CONST anzahl):form.anzregeln:=anzahlENDPROC putanzahlregeln;PROC
+putanzahlselfelder(INT CONST anzahl):form.anzselfelder:=anzahlENDPROC
+putanzahlselfelder;INT PROC getanzahlselfelder:form.anzselfelderENDPROC
+getanzahlselfelder;OP :=(REGEL VAR left,REGEL CONST right):CONCR (left):=
+CONCR (right)ENDOP :=;INT PROC getregelnummer(INT CONST objektklasse,regelnr)
+:INT VAR i;FOR iFROM 1UPTO getanzahlregelnREP IF form.zugriffsregel[i].
+objektklassennr=objektklasseCAND form.zugriffsregel[i].regelnummer=regelnr
+THEN LEAVE getregelnummerWITH iFI PER ;0ENDPROC getregelnummer;PROC
+deleteregel(INT CONST regel):INT VAR i;IF regel<=getanzahlregelnCAND regel>0
+THEN FOR iFROM regelUPTO getanzahlregeln-1REP form.zugriffsregel[i]:=form.
+zugriffsregel[i+1]PER ;putanzahlregeln(getanzahlregeln-1)FI ENDPROC
+deleteregel;PROC getzugriffsregel(INT CONST nr,INT VAR objekt,regel,index,
+anzfelder):objekt:=form.zugriffsregel[nr].objektklassennr;regel:=form.
+zugriffsregel[nr].regelnummer;index:=form.zugriffsregel[nr].indexnr;anzfelder
+:=form.zugriffsregel[nr].anzkeyfelder;ENDPROC getzugriffsregel;PROC
+putzugriffsregel(INT CONST nr,INT CONST objekt,regel,index,anzfelder):form.
+anzregeln:=max(nr,form.anzregeln);form.zugriffsregel[nr].objektklassennr:=
+objekt;form.zugriffsregel[nr].regelnummer:=regel;form.zugriffsregel[nr].
+indexnr:=index;form.zugriffsregel[nr].anzkeyfelder:=anzfelder;ENDPROC
+putzugriffsregel;INT PROC getanzahlregelfelder(INT CONST regelnr):form.
+zugriffsregel[regelnr].anzkeyfelderENDPROC getanzahlregelfelder;PROC
+putanzahlregelfelder(INT CONST regelnr,anzahl):form.zugriffsregel[regelnr].
+anzkeyfelder:=anzahlENDPROC putanzahlregelfelder;TEXT PROC getvergleichswert(
+INT CONST regel,nr):form.zugriffsregel[regel].vergleichswert[nr]ENDPROC
+getvergleichswert;PROC putvergleichswert(INT CONST regelnr,TEXT CONST vglwert
+):form.zugriffsregel[regelnr].anzkeyfelderINCR 1;form.zugriffsregel[regelnr].
+vergleichswert[form.zugriffsregel[regelnr].anzkeyfelder]:=vglwertENDPROC
+putvergleichswert;PROC putselektion(TEXT CONST feldname,vglwert):form.
+anzselfelderINCR 1;form.selektion[form.anzselfelder].selektionsfeld:=feldname
+;form.selektion[form.anzselfelder].wert:=vglwert;ENDPROC putselektion;PROC
+getselektion(INT CONST ix,TEXT VAR feldname,vglwert):feldname:=form.selektion
+[ix].selektionsfeld;vglwert:=form.selektion[ix].wert;ENDPROC getselektion;
+TEXT PROC getselektion:buildselektionENDPROC getselektion;LET textbegrenzer=
+"""",klammerauf="<",klammerzu=">",gleich="=",undoperator=" UND ",operatoren=
+"=<>";INT PROC postextende(TEXT CONST ausgabe,INT CONST aktuelleposition):
+INT VAR neupos:=aktuelleposition+1;WHILE (ausgabeSUB neupos)<>textbegrenzer
+REP neuposINCR 1;IF (ausgabeSUB neupos)=textbegrenzerCAND (ausgabeSUB neupos+
+1)=textbegrenzerTHEN neuposINCR 2;FI ;UNTIL neupos>length(ausgabe)PER ;neupos
++1ENDPROC postextende;INT PROC operatorposition(TEXT VAR ausdruck,INT CONST
+abpos):INT VAR p:=abpos;WHILE p<=length(ausdruck)AND pos(operatoren,ausdruck
+SUB p)=0REP IF (ausdruckSUB p)=textbegrenzerTHEN insertchar(ausdruck,
+klammerauf,p);pINCR 1;p:=postextende(ausdruck,p);insertchar(ausdruck,
+klammerzu,p);pINCR 1;ELSE pINCR 1FI ;PER ;IF p>length(ausdruck)THEN 0ELSE p
+FI ENDPROC operatorposition;TEXT PROC buildselektion:INT VAR i:=1,oppos,
+lastpos;TEXT VAR selausdruck:="",feldname:="",einfacherausdruck:="",
+feldausdruck:="";WHILE i<=getanzahlselfelderREP getselektion(i,feldname,
+einfacherausdruck);IF einfacherausdruck>""THEN evtlumoperatorergaenzen;
+feldausdruck:="";lastpos:=1;oppos:=operatorposition(einfacherausdruck,1);
+WHILE oppos>0REP teilausdruckuebernehmen;feldnameneinfuegen;lastpos:=oppos;
+opposINCR 1;IF pos(operatoren,einfacherausdruckSUB oppos)>0THEN opposINCR 1
+FI ;oppos:=operatorposition(einfacherausdruck,oppos);PER ;restuebernehmen;
+feldausdruckklammern;IF length(selausdruck)>0THEN selausdruckCAT undoperator
+FI ;selausdruckCAT feldausdruck;FI ;iINCR 1;PER ;selausdruck.
+evtlumoperatorergaenzen:IF pos(operatoren,einfacherausdruckSUB 1)=0THEN
+einfacherausdruck:=gleich+einfacherausdruckFI .teilausdruckuebernehmen:
+feldausdruckCAT subtext(einfacherausdruck,lastpos,oppos-1).feldnameneinfuegen
+:feldausdruck:=feldausdruck+textbegrenzer+feldname+textbegrenzer+" ".
+restuebernehmen:feldausdruckCAT subtext(einfacherausdruck,lastpos).
+feldausdruckklammern:feldausdruck:="("+feldausdruck+")".ENDPROC
+buildselektion;ENDPACKET idadata
+
diff --git a/app/schulis/2.2.1/src/0.ida.form b/app/schulis/2.2.1/src/0.ida.form
new file mode 100644
index 0000000..faa2776
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ida.form
@@ -0,0 +1,34 @@
+PACKET formdbDEFINES putform,getform,delform,formexists,formdbstatus:LET
+putdatacode=10,puttextcode=11,getdatacodeno=12,gettextcodeno=13,
+getdatacodename=19,gettextcodename=20,initializeserver=18,delcodeno=14,
+existscodeno=15,delcodename=16,existscodename=17,errornak=2,ok=0,
+cformtextname="FORMTEXT.",cformdataname="FORMDATA.";DATASPACE VAR ds;INT VAR
+formnr,replycode;TASK VAR formdbserver:=/"ida server";BOUND TEXT VAR
+boundinhalt;TEXT VAR id,formname;BOUND FORMULAR VAR form;TEXT PROC
+formtextname:cformtextname+text(getformularindex)ENDPROC formtextname;TEXT
+PROC formdataname:cformdataname+text(getformularindex)ENDPROC formdataname;
+TEXT PROC formtextname(INT CONST formnr):cformtextname+text(formnr)ENDPROC
+formtextname;TEXT PROC formdataname(INT CONST formnr):cformdataname+text(
+formnr)ENDPROC formdataname;PROC formdbstatus(INT CONST newcode):replycode:=
+newcode;ENDPROC formdbstatus;INT PROC formdbstatus:replycodeENDPROC
+formdbstatus;PROC putform:forget(ds);formnr:=getformularindex;ds:=old(
+formdataname);c(formdbserver,putdatacode,ds,replycode);IF replycode=okTHEN
+forget(ds);ds:=old(formtextname(formnr));type(ds,formnr);c(formdbserver,
+puttextcode,ds,replycode);forget(ds)FI ENDPROC putform;PROC getform(INT
+CONST formnr):call(text(formnr),getdatacodeno);receive(replycode)ENDPROC
+getform;PROC getform(TEXT CONST formname):call(formname,getdatacodename);
+receive(replycode);ENDPROC getform;PROC receive(INT CONST replycode):IF
+replycode=okTHEN putformular(ds);formnr:=getformularindex;forget(formdataname
+,quiet);copy(ds,formdataname);call(text(formnr),gettextcodeno);forget(
+formtextname(formnr),quiet);type(ds,1003);copy(ds,formtextname(formnr));
+forget(ds)FI ENDPROC receive;PROC delform(INT CONST formnr):call(text(formnr)
+,delcodeno)ENDPROC delform;PROC delform(TEXT CONST formname):call(formname,
+delcodename)ENDPROC delform;BOOL PROC formexists(INT CONST formnr):call(text(
+formnr),existscodeno);replycode=okENDPROC formexists;BOOL PROC formexists(
+TEXT CONST formname):call(text(formnr),existscodename);replycode=okENDPROC
+formexists;PROC call(TEXT CONST inhalt,INT CONST ordercode):forget(ds);ds:=
+nilspace;boundinhalt:=ds;boundinhalt:=inhalt;c(formdbserver,ordercode,ds,
+replycode);ENDPROC call;PROC c(TASK CONST t,INT CONST i,DATASPACE VAR d,INT
+VAR r):call(t,i,d,r);IF r=errornakTHEN boundinhalt:=ds;errorstop(
+"IDA-MANAGER-Fehler: "+boundinhalt);FI ENDPROC c;ENDPACKET formdb;
+
diff --git a/app/schulis/2.2.1/src/0.ida.server b/app/schulis/2.2.1/src/0.ida.server
new file mode 100644
index 0000000..ee1b067
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.ida.server
@@ -0,0 +1,51 @@
+PACKET idaserverDEFINES idaserver:LET ok=00,#SERVER M essages&E rrors#
+notfound=04,noform="",cformtextname="FORMTEXT.",#SERVER const#cformdataname=
+"FORMDATA.",putdatacode=10,#SERVER ordercodes#puttextcode=11,getdatacodeno=12
+,gettextcodeno=13,getdatacodename=19,gettextcodename=20,delcodeno=14,
+delcodename=16,existscodeno=15,existscodename=17,#initserver=18,#errornak=2,#
+EUMEL S ystemerrors#continuecode=100;#EUMEL S ystemcodes#DATASPACE VAR ds:=
+nilspace;#BOUND FORMULAR VAR form;#BOUND TEXT VAR errortext,formtext;TASK
+VAR ordertask;INT VAR i,ordercode;ROW 100TEXT VAR formname;TEXT VAR id;FOR i
+FROM 1UPTO 100REP formname[i]:="";PER ;#TEXT PROC formtextname:cformtextname+
+text(getformularindex)ENDPROC formtextname;#TEXT PROC formdataname:
+cformdataname+text(getformularindex)ENDPROC formdataname;TEXT PROC
+formtextname(TEXT CONST formnr):cformtextname+formnrENDPROC formtextname;
+TEXT PROC formdataname(TEXT CONST formnr):cformdataname+formnrENDPROC
+formdataname;TEXT PROC searchid:INT VAR count;TEXT VAR returntext;formtext:=
+ds;returntext:=formtext;IF ordercode=delcodenameOR ordercode=existscodename
+OR ordercode=getdatacodenameTHEN searchheaderELSE returntextFI .searchheader:
+FOR countFROM 1UPTO 100REP IF formname[count]=formtextTHEN LEAVE searchid
+WITH text(count);FI ;PER ;noform.ENDPROC searchid;PROC server:SELECT
+ordercodeOF CASE putdatacode:writeformdataCASE puttextcode:writeformtextCASE
+getdatacodeno,getdatacodename:readformdataCASE gettextcodeno,gettextcodename:
+readformtextCASE delcodeno,delcodename:deleteformCASE existscodename,
+existscodeno:existsformOTHERWISE :errorstop("Unbekannter Auftrag")ENDSELECT
+;eventuellfehlerbehandlung;send(ordertask,ordercode,ds).
+eventuellfehlerbehandlung:IF iserrorTHEN ordercode:=errornak;errortext:=ds;
+errortext:=errormessage;clearerrorFI .writeformdata:putformular(ds);#form:=ds
+;#id:=text(getformularindex);i:=getformularindex;formname[i]:=getformularname
+;forget(formdataname,quiet);copy(ds,formdataname);forget(ds);ds:=nilspace;
+ordercode:=ok.writeformtext:#form:=ds;#id:=text(type(ds));forget(formtextname
+(id),quiet);type(ds,1003);copy(ds,formtextname(id));forget(ds);ordercode:=ok;
+ds:=nilspace.readformdata:id:=searchid;IF id=noformTHEN ordercode:=notfound;
+LEAVE readformdataFI ;forget(ds);IF exists(formdataname(id))THEN ordercode:=
+ok;ds:=old(formdataname(id));ELSE ds:=nilspace;ordercode:=notfoundFI .
+readformtext:id:=searchid;IF id=noformTHEN ordercode:=notfound;LEAVE
+readformtextFI ;forget(ds);IF exists(formtextname(id))THEN ordercode:=ok;ds:=
+old(formtextname(id));ELSE ordercode:=notfound;ds:=nilspaceFI .ENDPROC server
+;PROC deleteform:id:=searchid;ordercode:=ok;IF id=noformTHEN LEAVE deleteform
+FI ;forget(formtextname(id),quiet);forget(formdataname(id),quiet);forget(ds);
+ds:=nilspace;ENDPROC deleteform;PROC existsform:id:=searchid;IF id=noform
+THEN ordercode:=notfoundELSE IF exists(formtextname(id))CAND exists(
+formdataname(id))THEN ordercode:=okELSE ordercode:=notfoundFI FI ;ENDPROC
+existsform;PROC idaserver:globalmanager(PROC (DATASPACE VAR ,INT CONST ,INT
+CONST ,TASK CONST )idaserver)ENDPROC idaserver;PROC idaserver(DATASPACE VAR
+dsp,INT CONST orderp,phasep,TASK CONST ordertaskp):IF orderp>=continuecode
+AND ordertaskp=supervisorTHEN forget(dsp);spoolcommand(orderp)ELSE clearerror
+;enablestop;forget(ds);ds:=dsp;ordercode:=orderp;ordertask:=ordertaskp;server
+FI ENDPROC idaserver;PROC spoolcommand(INT CONST order):TEXT VAR commandline
+:="";enablestop;break(quiet);continue(order-continuecode);disablestop;REP
+commanddialogue(TRUE );getcommand("ISP-IDA-MANAGER:",commandline);do(
+commandline)UNTIL NOT onlinePER ;commanddialogue(FALSE );break(quiet);
+setautonomEND PROC spoolcommand;ENDPACKET idaserver;
+
diff --git a/app/schulis/2.2.1/src/0.klassengruppen definieren b/app/schulis/2.2.1/src/0.klassengruppen definieren
new file mode 100644
index 0000000..0765de9
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.klassengruppen definieren
@@ -0,0 +1,81 @@
+PACKET erfklassengruppenDEFINES erfassungklassengruppen:LET maskenname=
+"ms erf klassengruppen",fnrkennung=2,fnrletztesfeld=32,trenner=" = ",
+maxsugruppen=15,laengejgst=2,laengezug=4,laengeeinersugruppe=6,
+laengeklassengruppe=4,felderprozeile=2;INT VAR fnrjgst;TEXT VAR sugruppen:=""
+;TEXT VAR sugruppe:="";INT VAR anzsugruppen;TEXT VAR gueltigeschuelergruppen
+:="";LET postrenner="�";LET fuehrendenull="0",jgst5=5,jgst10=10,jgst13=13;
+LET meldnrfehlendeangabe=52,meldnrungueltigesugruppe=55,
+meldnrklassengruppezulang=60,meldnrungueltigegruppenbez=86;LET wertaktuell=
+"aktuell",wertgeplant="geplant";PROC erfassungklassengruppen(INT CONST proznr
+):systemdboff;reinitparsing;SELECT proznrOF CASE 1:setzeerfassungsparameter
+CASE 2:zeigeklassengruppezurbearbeitungCASE 3:pruefeplausibilitaetCASE 4:
+setzewertefuerdbspeicherungCASE 5:setzeidentiobjektfuerobjektlisteCASE 6:
+klassengruppenlesenCASE 7:klassengruppenaendernCASE 8:klassengruppeneinfuegen
+CASE 9:klassengruppenloeschenEND SELECT END PROC erfassungklassengruppen;
+PROC setzeerfassungsparameter:gueltigeschuelergruppen:="";
+setzeerfassungsparameter(dnrklassengruppen,maskenname,fnrletztesfeld)END
+PROC setzeerfassungsparameter;PROC zeigeklassengruppezurbearbeitung:
+setzeerfassungsfeld(wert(fnrkgklassengrp),fnrkennung);sugruppen:=wert(
+fnrkgschuelergrp);anzsugruppen:=(length(sugruppen))DIV laengeeinersugruppe;
+INT VAR i:=1;fnrjgst:=fnrkennung+1;WHILE i<=anzsugruppenREP sugruppe:=subtext
+(sugruppen,1,laengeeinersugruppe);sugruppen:=subtext(sugruppen,
+laengeeinersugruppe+1);setzeerfassungsfeld(subtext(sugruppe,1,laengejgst),
+fnrjgst);setzeerfassungsfeld(compress(subtext(sugruppe,laengejgst+1)),fnrjgst
++1);fnrjgstINCR felderprozeile;iINCR 1PER ;WHILE i<=maxsugruppenREP
+setzeerfassungsfeld("",fnrjgst);setzeerfassungsfeld("",fnrjgst+1);fnrjgst
+INCR felderprozeile;iINCR 1PER ;END PROC zeigeklassengruppezurbearbeitung;
+PROC pruefeplausibilitaet:LET leer="",null=0;INT VAR pruefbez;IF
+gueltigeschuelergruppen=""THEN
+holeallegeplundaktschuelergruppeningueltigesugruppenFI ;INT VAR fehlerstatus;
+pruefe(1,erfassungsmaske,PROC erfassungswert,fnrkennung,null,null,leer,
+fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);LEAVE
+pruefeplausibilitaetELIF length(erfassungswert(fnrkennung))>
+laengeklassengruppeTHEN meldeauffaellig(erfassungsmaske,
+meldnrklassengruppezulang);setzefehlerstatus(fnrkennung);LEAVE
+pruefeplausibilitaetELSE pruefbez:=int(erfassungswert(fnrkennung));IF
+lastconversionokTHEN IF pruefbez>=jgst5CAND pruefbez<=jgst13THEN
+meldeauffaellig(erfassungsmaske,meldnrungueltigegruppenbez);setzefehlerstatus
+(fnrkennung);LEAVE pruefeplausibilitaetFI FI FI ;INT VAR i;fnrjgst:=
+fnrkennung+1;FOR iFROM 1UPTO maxsugruppenREP IF erfassungswert(fnrjgst)<>""
+THEN pruefe(3,erfassungsmaske,PROC erfassungswert,fnrjgst,jgst5,jgst13,leer,
+fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);LEAVE
+pruefeplausibilitaetELIF kennungangegebenCAND ungueltigeschuelergruppenangabe
+THEN setzefehlerstatus(fnrjgst);meldeauffaellig(erfassungsmaske,
+meldnrungueltigesugruppe);LEAVE pruefeplausibilitaetFI ;ELIF kennungangegeben
+THEN setzefehlerstatus(fnrjgst);meldeauffaellig(erfassungsmaske,
+meldnrfehlendeangabe);LEAVE pruefeplausibilitaetFI ;fnrjgstINCR
+felderprozeilePER .kennungangegeben:erfassungswert(fnrjgst+1)<>"".
+ungueltigeschuelergruppenangabe:pos(gueltigeschuelergruppen,suchwert)=0.
+suchwert:postrenner+text(int(erfassungswert(fnrjgst)))+compress(
+erfassungswert(fnrjgst+1))+postrenner.END PROC pruefeplausibilitaet;PROC
+holeallegeplundaktschuelergruppeningueltigesugruppen:gueltigeschuelergruppen
+:=postrenner;statleseschleife(dnraktschuelergruppen,"","",fnrsgrpsj,fnrsgrpsj
+,PROC sugruppelesen);END PROC
+holeallegeplundaktschuelergruppeningueltigesugruppen;PROC sugruppelesen(BOOL
+VAR b):IF dbstatus<>0THEN b:=TRUE ELSE gueltigeschuelergruppenCAT wert(
+fnrsgrpjgst)+wert(fnrsgrpkennung)+postrennerFI END PROC sugruppelesen;PROC
+setzewertefuerdbspeicherung:putwert(fnrkgklassengrp,erfassungswert(fnrkennung
+));sugruppen:="";INT VAR i;fnrjgst:=fnrkennung+1;FOR iFROM 1UPTO maxsugruppen
+REP sugruppe:=erfassungswert(fnrjgst);IF sugruppe<>""THEN sugruppenCAT
+jgstangabe;sugruppenCAT text(erfassungswert(fnrjgst+1),laengezug)FI ;fnrjgst
+INCR felderprozeilePER ;putwert(fnrkgschuelergrp,sugruppen).jgstangabe:INT
+VAR ijgst:=int(sugruppe);IF ijgst>=jgst10CAND ijgst<=jgst13THEN sugruppeELSE
+fuehrendenull+text(ijgst,1)FI .END PROC setzewertefuerdbspeicherung;PROC
+setzeidentiobjektfuerobjektliste:LET trennsymbolfuerobli="$";TEXT VAR
+identizeile;identizeile:=wert(fnrkgklassengrp)+trenner+wert(fnrkgschuelergrp)
+;setzeidentiwert(identizeilemitschluesselanhang).
+identizeilemitschluesselanhang:identizeile+trennsymbolfuerobli+wert(
+fnrkgklassengrp).END PROC setzeidentiobjektfuerobjektliste;PROC
+klassengruppenlesen:putwert(fnrkgklassengrp,schluessel);search(
+dnrklassengruppen,TRUE );IF dbstatus=okTHEN saveupdateposition(
+dnrklassengruppen)FI END PROC klassengruppenlesen;PROC klassengruppenaendern:
+restoreupdateposition(dnrklassengruppen);update(dnrklassengruppen);
+aenderungsvermerksetzen(wertaktuell);aenderungsvermerksetzen(wertgeplant)END
+PROC klassengruppenaendern;PROC klassengruppeneinfuegen:insert(
+dnrklassengruppen);aenderungsvermerksetzen(wertaktuell);
+aenderungsvermerksetzen(wertgeplant)END PROC klassengruppeneinfuegen;PROC
+klassengruppenloeschen:delete(dnrklassengruppen);aenderungsvermerksetzen(
+wertaktuell);aenderungsvermerksetzen(wertgeplant)END PROC
+klassengruppenloeschen;TEXT PROC schluessel:erfassungswert(fnrkennung)END
+PROC schluessel;END PACKET erfklassengruppen;
+
diff --git a/app/schulis/2.2.1/src/0.kurswahlbasis bereinigen b/app/schulis/2.2.1/src/0.kurswahlbasis bereinigen
new file mode 100644
index 0000000..8be6d56
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.kurswahlbasis bereinigen
@@ -0,0 +1,34 @@
+PACKET kurswahlbasisbereinigenDEFINES kurswahlserveraktualisieren,
+kurswahlserverlvaktualisieren:LET server="kurswahl server",jg9=9,jg14=14,hj1=
+"1",hj2="2",dbsj="Schuljahr",dbhj="Schulhalbjahr",kurswahl="Kurswahl-",kw2=
+"2 ",kw0="0 ";INT VAR sj1,sj2,sj3,sj4,akthj;TEXT VAR schuljahr,halbjahr;TASK
+VAR takuser;PROC kurswahlserveraktualisieren(TEXT CONST jgst,spezjgst,spezhj)
+:serveraktualisieren(kw2,jgst,spezjgst,spezhj)END PROC
+kurswahlserveraktualisieren;PROC kurswahlserverlvaktualisieren(TEXT CONST
+jgst,spezjgst,spezhj):serveraktualisieren(kw0,jgst,spezjgst,spezhj)END PROC
+kurswahlserverlvaktualisieren;PROC serveraktualisieren(TEXT CONST ds,jgst,
+spezjgst,spezhj):INT VAR jg:=int(jgst),spezjg:=int(spezjgst),jgdiff;IF
+existstask(server)THEN takuser:=task(server);schuljahr:=schulkenndatum(dbsj);
+halbjahr:=schulkenndatum(dbhj);sj1:=int(schuljahr);sj2:=sj1+101;sj3:=sj2+101;
+sj4:=sj3+101;IF jg>jg9CAND jg<jg14THEN commanddialogue(FALSE );IF (spezjgst=
+""CAND spezhj="")THEN loeschealledatenraeumeELIF spezjg>jg9CAND spezjg<jg14
+THEN IF spezhj=hj1COR spezhj=hj2THEN loeschespezdatenraumFI ;FI ;
+commanddialogue(TRUE );FI ;FI .loeschealledatenraeume:IF NOT (jg=10CAND
+halbjahr="1")THEN erase(datenraumname(jg,ds,hj1,schuljahr),takuser);erase(
+datenraumname(jg,ds,hj2,schuljahr),takuser);erase(datenraumname(jg+1,ds,hj1,
+konvsj(sj2)),takuser);erase(datenraumname(jg+1,ds,hj2,konvsj(sj2)),takuser);
+erase(datenraumname(jg+2,ds,hj1,konvsj(sj3)),takuser);erase(datenraumname(jg+
+2,ds,hj2,konvsj(sj3)),takuser);erase(datenraumname(jg+3,ds,hj1,konvsj(sj4)),
+takuser);erase(datenraumname(jg+3,ds,hj2,konvsj(sj4)),takuser)FI .
+loeschespezdatenraum:akthj:=int(halbjahr);jgdiff:=spezjg-jg;IF NOT (jg=10
+CAND spezjg=10)THEN IF jgdiff=0CAND spezhj>=halbjahrTHEN erase(datenraumname(
+spezjg,ds,spezhj,schuljahr),takuser)ELIF jgdiff=1THEN erase(datenraumname(
+spezjg,ds,spezhj,konvsj(sj2)),takuser)ELIF jgdiff=2THEN erase(datenraumname(
+spezjg,ds,spezhj,konvsj(sj3)),takuser)ELIF jgdiff=3THEN erase(datenraumname(
+spezjg,ds,spezhj,konvsj(sj4)),takuser)FI FI .END PROC serveraktualisieren;
+TEXT PROC datenraumname(INT CONST jgst,TEXT CONST dsp,halbjahr,schuljahr):
+TEXT VAR name:=kurswahl;nameCAT dsp;nameCAT text(jgst);nameCAT " ";nameCAT
+halbjahr;nameCAT ".";nameCAT schuljahr;nameEND PROC datenraumname;TEXT PROC
+konvsj(INT CONST sjbez):IF sjbez<9901THEN text(sjbez)ELSE subtext(text(sjbez)
+,2)FI END PROC konvsj;END PACKET kurswahlbasisbereinigen;
+
diff --git a/app/schulis/2.2.1/src/0.liste der aufsichtszeiten b/app/schulis/2.2.1/src/0.liste der aufsichtszeiten
new file mode 100644
index 0000000..c0138c4
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.liste der aufsichtszeiten
@@ -0,0 +1,93 @@
+PACKET listederaufsichtszeitenDEFINES
+aufsichtszeitenlisteerstellenunddruckenggfvorherzeigen:LET fnrausggeplanteshj
+=2,fnrausgaktuelleshj=3,fnrausgdrucker=4,fnrausgbild=5;LET
+schluesselschuljahr="Schuljahr",schluesselschulhalbjahr="Schulhalbjahr";LET
+zusätzlicherlaubtetasten="vr";LET meldunglistewirdaufgebaut=7,
+meldunglistewirdausgedruckt=58,meldungbittewarten=69,
+meldungkeinedatenvorhanden=68;LET dateinamezumzeigen=
+"Liste der Aufsichtszeiten",ueberschrift1fuerdruckdatei=
+"Liste der Aufsichtszeiten",ueberschrift2fuerdruckdatei=
+"-------------------------",textanfangfuerschulhalbjahr="für Schuljahr ",
+trennerfuerschuljahr="/",textmittefuerschulhalbjahr=", ",
+textendefuerschulhalbjahr=". Halbjahr",ueberschrift1dertabelle=
+" Tag Nr. Bezeichnung Stunde Uhrzeit",
+ueberschrift2dertabelle=
+" vorher nachher von bis",
+trennstrichdertabelle=
+"--------+----------------------+-----------------+-----------------",
+stelligkeitdestages=100,füllervorbezeichnung=". ",bezeichnungslänge=20,
+füllervorstunde=" ",stundenprowochentag=12,leerestunde=" ",füllerinstunde=
+". ",füllervoruhrzeit=". ",blankszumauffüllen=" ",stellenfürzeit
+=4,füllerinuhrzeit=" ",stdundmintrenner=":",laengederstundenzeit=2,
+blanksvorwochentag=" ",leererwochentag=" ",textmontag="Mo",textdienstag=
+"Di",textmittwoch="Mi",textdonnerstag="Do",textfreitag="Fr",textsamstag="Sa",
+nummerfürsa=6;LET niltext="",blank=" ";BOOL VAR erstaufbildschirm:=FALSE ;
+TEXT VAR schuljahr:=niltext,halbjahr:=niltext;INT VAR fehlerstatus;FILE VAR f
+;INT VAR akttag;PROC aufsichtszeitenlisteerstellenunddruckenggfvorherzeigen(
+INT CONST nr):SELECT nrOF CASE 1:aufsichtszeitenlisteerstellenCASE 2:
+aufsichtszeitenlistedruckenENDSELECT .END PROC
+aufsichtszeitenlisteerstellenunddruckenggfvorherzeigen;PROC
+aufsichtszeitenlisteerstellen:INT VAR i;prüfeobrichtigangekreuztist;IF
+fehlerstatus<>0THEN infeld(fehlerstatus);return(1);LEAVE
+aufsichtszeitenlisteerstellenFI ;erstaufbildschirm:=standardmaskenfeld(
+fnrausgbild)<>niltext;IF erstaufbildschirmTHEN standardmeldung(
+meldunglistewirdaufgebaut,niltext)ELSE standardmeldung(meldungbittewarten,
+niltext)FI ;berechnebearbeitungsschuljahrundhalbjahr;
+fuellediedateimitdenaufsichtszeiten;IF akttag=0THEN standardmeldung(
+meldungkeinedatenvorhanden,niltext);forget(dateinamezumzeigen,quiet);return(1
+);LEAVE aufsichtszeitenlisteerstellenFI ;IF erstaufbildschirmTHEN zeigedatei(
+dateinamezumzeigen,zusätzlicherlaubtetasten)ELSE standardmeldung(
+meldunglistewirdausgedruckt,niltext);aufsichtszeitenlistedruckenFI .
+prüfeobrichtigangekreuztist:standardpruefe(5,fnrausggeplanteshj,
+fnrausgaktuelleshj,0,niltext,fehlerstatus);IF fehlerstatus=0THEN
+standardpruefe(5,fnrausgdrucker,fnrausgbild,0,niltext,fehlerstatus);FI .
+fuellediedateimitdenaufsichtszeiten:f:=sequentialfile(output,
+dateinamezumzeigen);putline(f,blank);putline(f,zentriert(
+textanfangfuerschulhalbjahr+text(schuljahr,2)+trennerfuerschuljahr+subtext(
+schuljahr,3)+textmittefuerschulhalbjahr+halbjahr+textendefuerschulhalbjahr,
+bildbreite));putline(f,blank);putline(f,blank);putline(f,
+ueberschrift1dertabelle+blank);putline(f,ueberschrift2dertabelle+blank);
+putline(f,trennstrichdertabelle+blank);akttag:=0;inittupel(dnraufsichtszeiten
+);statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,
+PROC fuellediedatei);FOR iFROM akttag+1UPTO nummerfürsaREP putline(f,blank);
+putline(f,wochentag(i));PER ;.berechnebearbeitungsschuljahrundhalbjahr:
+schuljahr:=schulkenndatum(schluesselschuljahr);halbjahr:=schulkenndatum(
+schluesselschulhalbjahr);IF standardmaskenfeld(fnrausgaktuelleshj)=niltext
+THEN geplanteshjundsjberechnen(halbjahr,schuljahr)FI .END PROC
+aufsichtszeitenlisteerstellen;PROC aufsichtszeitenlistedrucken:INT VAR
+zeilenzähler;TEXT VAR t;FILE VAR f1:=sequentialfile(input,dateinamezumzeigen)
+;initdruckkopf(zentriert(ueberschrift1fuerdruckdatei,druckbreite),zentriert(
+ueberschrift2fuerdruckdatei,druckbreite));setzemitseitennummern(TRUE );
+druckvorbereiten;druckkopfschreiben;getline(f1,t);druckzeileschreiben(t);
+getline(f1,t);druckzeileschreiben(zentriert(compress(t),druckbreite));
+zeilenzähler:=drucklaenge(2)-2;WHILE NOT eof(f1)REP IF zeilenzähler=0THEN
+seitenwechsel;druckkopfschreiben;druckzeileschreiben(ueberschrift1dertabelle)
+;druckzeileschreiben(ueberschrift2dertabelle);druckzeileschreiben(
+trennstrichdertabelle);zeilenzähler:=drucklaenge(2)-3;FI ;getline(f1,t);
+druckzeileschreiben(t);zeilenzählerDECR 1;PER ;drucknachbereiten;forget(
+dateinamezumzeigen,quiet);IF erstaufbildschirmTHEN enter(2)ELSE enter(1)FI
+END PROC aufsichtszeitenlistedrucken;TEXT PROC wochentag(INT CONST tag):TEXT
+VAR t;SELECT tagOF CASE 1:t:=blanksvorwochentag+textmontag+blankCASE 2:t:=
+blanksvorwochentag+textdienstag+blankCASE 3:t:=blanksvorwochentag+
+textmittwoch+blankCASE 4:t:=blanksvorwochentag+textdonnerstag+blankCASE 5:t:=
+blanksvorwochentag+textfreitag+blankCASE 6:t:=blanksvorwochentag+textsamstag+
+blankEND SELECT ;tEND PROC wochentag;PROC fuellediedatei(BOOL VAR b):INT VAR
+i,neuertag;TEXT VAR t,t2;IF wert(fnrazsj)>schuljahrCOR wert(fnrazhj)>halbjahr
+COR dbstatus<>okTHEN b:=TRUE ELSE neuertag:=intwert(fnrazaufsichtszeit)DIV
+stelligkeitdestages;IF neuertag>akttagTHEN putline(f,blank);FOR iFROM akttag+
+1UPTO neuertag-1REP putline(f,wochentag(i));putline(f,blank);PER ;t:=
+wochentag(neuertag);akttag:=neuertag;ELSE t:=leererwochentagFI ;tCAT text(
+intwert(fnrazaufsichtszeit)MOD stelligkeitdestages,2);tCAT
+füllervorbezeichnung;tCAT text(wert(fnrazbezeichnung),bezeichnungslänge);t
+CAT füllervorstunde;IF intwert(fnraztagstdvor)=0THEN tCAT leerestundeELSE i:=
+(intwert(fnraztagstdvor)-1)MOD stundenprowochentag+1;tCAT text(i,2);FI ;tCAT
+füllerinstunde;IF intwert(fnraztagstdnach)=0THEN tCAT leerestundeELSE i:=(
+intwert(fnraztagstdnach)-1)MOD stundenprowochentag+1;tCAT text(i,2);FI ;tCAT
+füllervoruhrzeit;t2:=blankszumauffüllen+wert(fnrazbeginnuhr);t2:=subtext(t2,
+length(t2)+1-stellenfürzeit);tCAT text(t2,laengederstundenzeit);tCAT
+stdundmintrenner;tCAT subtext(t2,laengederstundenzeit+1);tCAT füllerinuhrzeit
+;t2:=blankszumauffüllen+wert(fnrazendeuhr);t2:=subtext(t2,length(t2)+1-
+stellenfürzeit);tCAT text(t2,laengederstundenzeit);tCAT stdundmintrenner;t
+CAT subtext(t2,laengederstundenzeit+1);tCAT blank;putline(f,t);FI END PROC
+fuellediedatei;END PACKET listederaufsichtszeiten
+
diff --git a/app/schulis/2.2.1/src/0.liste der zeitrasterdaten b/app/schulis/2.2.1/src/0.liste der zeitrasterdaten
new file mode 100644
index 0000000..51e91c9
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.liste der zeitrasterdaten
@@ -0,0 +1,101 @@
+PACKET listederzeitrasterdatenDEFINES
+zeitrasterlisteerstellenunddruckenggfvorherzeigen:LET fnrausggeplanteshj=2,
+fnrausgaktuelleshj=3,fnrausgdrucker=4,fnrausgbild=5;LET schluesselschuljahr=
+"Schuljahr",schluesselschulhalbjahr="Schulhalbjahr",
+anzahldatensaetzeprozeitraster=66;LET zusätzlicherlaubtetasten="vr";LET
+meldunglistewirdaufgebaut=7,meldunglistewirdausgedruckt=58,meldungbittewarten
+=69,meldungkeinedatenvorhanden=68;LET dateinamezumzeigen=
+"Liste der Zeitrasterdaten",ueberschrift1fuerdruckdatei=
+"Liste der Zeitrasterdaten",ueberschrift2fuerdruckdatei=
+"-------------------------",blankszumauffuellen=" ",
+textanfangfuerschulhalbjahr="für Schuljahr 19",trennerfuerschuljahr="/",
+textmittefuerschulhalbjahr=", ",textendefuerschulhalbjahr=". Halbjahr",
+ueberschriftdererstentabelle="Uhrzeiten:",unterschriftdererstentabelle=
+"----------",zeilederwochentage=
+" Mo Di Mi Do Fr Sa",textvorbeginnzeiten=
+". von",textvorendezeiten=" bis",trennerdererstentabelle=" ",
+stdundmintrenner=":",laengederstundenzeit=2,stellenderstundennummer=2,
+zeilenzahldererstentabelle=45,ueberschriftderzweitentabelle=
+"Kennzeichnung der Tagesteile:",unterschriftderzweitentabelle=
+"-----------------------------",zeilederstunden=
+" 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.",textmontag="Mo",
+textdienstag="Di",textmittwoch="Mi",textdonnerstag="Do",textfreitag="Fr",
+textsamstag="Sa",trennerderzweitentabelle=" ",stundenamsamstag=6,
+stundenprowochentag=12,mobissa=6,mobisfr=5,poskennungtagesteil=1,
+anfposbeginnzeit=2,endeposbeginnzeit=5,anfposendezeit=6,endeposendezeit=9,
+gesamtetextlaenge=9,stellenfuerkennungtagesteil=1,stellenfuerzeit=4;LET
+niltext="",blank=" ",null=0,eins=1;BOOL VAR erstaufbildschirm:=FALSE ;TEXT
+VAR schuljahr:=niltext,halbjahr:=niltext;INT VAR fehlerstatus;ROW
+anzahldatensaetzeprozeitrasterTEXT VAR alteszeitraster;INT VAR aktindex;PROC
+zeitrasterlisteerstellenunddruckenggfvorherzeigen(INT CONST nr):SELECT nrOF
+CASE 1:zeitrasterlisteerstellenCASE 2:zeitrasterlistedruckenENDSELECT .END
+PROC zeitrasterlisteerstellenunddruckenggfvorherzeigen;PROC
+zeitrasterlisteerstellen:INT VAR i;prüfeobrichtigangekreuztist;IF
+fehlerstatus<>nullTHEN infeld(fehlerstatus);return(1);LEAVE
+zeitrasterlisteerstellenFI ;erstaufbildschirm:=standardmaskenfeld(fnrausgbild
+)<>niltext;IF erstaufbildschirmTHEN standardmeldung(meldunglistewirdaufgebaut
+,niltext)ELSE standardmeldung(meldungbittewarten,niltext)FI ;
+berechnebearbeitungsschuljahrundhalbjahr;fuelledenpuffermitdemzeitraster;IF
+aktindex=nullTHEN standardmeldung(meldungkeinedatenvorhanden,niltext);return(
+1);LEAVE zeitrasterlisteerstellenFI ;fuegeerstetabelleindateian;
+fuegezweitetabelleindateian;IF erstaufbildschirmTHEN zeigedatei(
+dateinamezumzeigen,zusätzlicherlaubtetasten)ELSE standardmeldung(
+meldunglistewirdausgedruckt,niltext);zeitrasterlistedruckenFI .
+prüfeobrichtigangekreuztist:standardpruefe(5,fnrausggeplanteshj,
+fnrausgaktuelleshj,null,niltext,fehlerstatus);IF fehlerstatus=nullTHEN
+standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,fehlerstatus);FI .
+fuelledenpuffermitdemzeitraster:aktindex:=null;inittupel(dnrzeitraster);
+statleseschleife(dnrzeitraster,schuljahr,halbjahr,fnrzrsj,fnrzrhj,PROC
+fuellenurpuffer);FOR iFROM aktindex+einsUPTO anzahldatensaetzeprozeitraster
+REP alteszeitraster(i):=gesamtetextlaenge*blankPER .
+berechnebearbeitungsschuljahrundhalbjahr:schuljahr:=schulkenndatum(
+schluesselschuljahr);halbjahr:=schulkenndatum(schluesselschulhalbjahr);IF
+standardmaskenfeld(fnrausgaktuelleshj)=niltextTHEN geplanteshjundsjberechnen(
+halbjahr,schuljahr)FI .END PROC zeitrasterlisteerstellen;PROC
+zeitrasterlistedrucken:INT VAR i;TEXT VAR t;FILE VAR f1:=sequentialfile(input
+,dateinamezumzeigen);initdruckkopf(zentriert(ueberschrift1fuerdruckdatei,
+druckbreite),zentriert(ueberschrift2fuerdruckdatei,druckbreite));
+setzemitseitennummern(TRUE );druckvorbereiten;druckkopfschreiben;getline(f1,t
+);druckzeileschreiben(t);getline(f1,t);druckzeileschreiben(zentriert(compress
+(t),druckbreite));FOR iFROM einsUPTO zeilenzahldererstentabelleREP getline(f1
+,t);druckzeileschreiben(t)PER ;seitenwechsel;druckkopfschreiben;WHILE NOT eof
+(f1)REP getline(f1,t);druckzeileschreiben(t)PER ;drucknachbereiten;forget(
+dateinamezumzeigen,quiet);IF erstaufbildschirmTHEN enter(2)ELSE enter(1)FI
+END PROC zeitrasterlistedrucken;PROC fuegeerstetabelleindateian:INT VAR i,j,k
+;TEXT VAR t1,t2,t3;FILE VAR f:=sequentialfile(output,dateinamezumzeigen);
+putline(f,blank);putline(f,zentriert(textanfangfuerschulhalbjahr+text(
+schuljahr,2)+trennerfuerschuljahr+subtext(schuljahr,3)+
+textmittefuerschulhalbjahr+halbjahr+textendefuerschulhalbjahr,bildbreite));
+putline(f,blank);putline(f,blank);putline(f,ueberschriftdererstentabelle+
+blank);putline(f,unterschriftdererstentabelle+blank);putline(f,blank);putline
+(f,zeilederwochentage+blank);FOR iFROM einsUPTO stundenprowochentagREP
+putline(f,blank);t1:=text(i,stellenderstundennummer)+textvorbeginnzeiten;t2:=
+textvorendezeiten;IF i>stundenamsamstagTHEN k:=mobisfrELSE k:=mobissaFI ;FOR
+jFROM einsUPTO kREP t1CAT trennerdererstentabelle;t2CAT
+trennerdererstentabelle;t3:=subtext(alteszeitraster(i+(j-eins)*
+stundenprowochentag),anfposbeginnzeit,endeposbeginnzeit);t1CAT text(t3,
+laengederstundenzeit)+stdundmintrenner+subtext(t3,laengederstundenzeit+1);t3
+:=subtext(alteszeitraster(i+(j-eins)*stundenprowochentag),anfposendezeit,
+endeposendezeit);t2CAT text(t3,laengederstundenzeit)+stdundmintrenner+subtext
+(t3,laengederstundenzeit+1);PER ;putline(f,t1+blank);putline(f,t2+blank);PER
+;putline(f,blank);putline(f,blank);putline(f,blank)END PROC
+fuegeerstetabelleindateian;PROC fuegezweitetabelleindateian:INT VAR i,j,k;
+TEXT VAR t1;FILE VAR f:=sequentialfile(output,dateinamezumzeigen);putline(f,
+blank);putline(f,ueberschriftderzweitentabelle+blank);putline(f,
+unterschriftderzweitentabelle+blank);putline(f,blank);putline(f,
+zeilederstunden+blank);putline(f,blank);FOR iFROM einsUPTO mobissaREP SELECT
+iOF CASE 1:t1:=textmontagCASE 2:t1:=textdienstagCASE 3:t1:=textmittwochCASE 4
+:t1:=textdonnerstagCASE 5:t1:=textfreitagCASE 6:t1:=textsamstagEND SELECT ;
+IF i=mobissaTHEN k:=stundenamsamstagELSE k:=stundenprowochentagFI ;FOR jFROM
+einsUPTO kREP t1CAT trennerderzweitentabelle+text(alteszeitraster((i-eins)*
+stundenprowochentag+j),poskennungtagesteil);PER ;putline(f,t1+blank);PER END
+PROC fuegezweitetabelleindateian;PROC fuellenurpuffer(BOOL VAR b):TEXT VAR t;
+IF wert(fnrzrsj)>schuljahrCOR wert(fnrzrhj)>halbjahrCOR dbstatus<>okTHEN b:=
+TRUE ELSE aktindexINCR eins;t:=blankszumauffuellen+wert(fnrzrkennungteil);
+alteszeitraster(aktindex):=subtext(t,length(t)+eins-
+stellenfuerkennungtagesteil);t:=blankszumauffuellen+wert(fnrzrbeginnuhr);
+alteszeitraster(aktindex)CAT subtext(t,length(t)+eins-stellenfuerzeit);t:=
+blankszumauffuellen+wert(fnrzrendeuhr);alteszeitraster(aktindex)CAT subtext(t
+,length(t)+eins-stellenfuerzeit)FI END PROC fuellenurpuffer;END PACKET
+listederzeitrasterdaten
+
diff --git a/app/schulis/2.2.1/src/0.listen.benutz b/app/schulis/2.2.1/src/0.listen.benutz
new file mode 100644
index 0000000..cabeae1
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.benutz
@@ -0,0 +1,84 @@
+PACKET benutzerlisteDEFINES benulispezielleteile:LET niltext="",blank=" ",
+null=0,slash="/",spaltentrenner=" ",ueberschriftenzeilen=1,anzspalten=6,
+dateiname="sortdatei",ausgfeldlaenge=9,spaltenbreite=11,AUSGFELD =ROW
+ausgfeldlaengeTEXT ,benulieingangsmaske="mu liste einfach eingang",
+benulianfpos=2,mnrbearbeitetwerden=104;#LET dnrbenutz=7,fnrbenutzname=9,
+fnrbenutzberecht=11;#INT VAR druckzeilenzahl,bildanf,eingabestatus,
+aktuelleindexnr,ausgfeldlaengereal;TEXT VAR benuliueberschrift,kennung,
+berechtigungen,bearbeitetwerden,startwert,anfbuchstabe,neueranfbuchstabe;
+AUSGFELD VAR ausgfeld;BOOL PROC multistop:TRUE END PROC multistop;PROC
+benulispezielleteile(INT CONST nr):SELECT nrOF CASE 1:benulidialogvorbereiten
+CASE 2:benulieingabenrichtigCASE 3:benulilistenvorbereitenCASE 4:
+benulidruckvorbereitenCASE 5:benuliseitedruckenCASE 6:
+benulibildschirmvorbereitenCASE 7:benuliseitezeigenENDSELECT .END PROC
+benulispezielleteile;PROC benulidialogvorbereiten:systemdbon;#first(dnrbenutz
+);startwert:=wert(fnrbenutzname);#benuliueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(benulieingangsmaske,benulianfpos).END PROC
+benulidialogvorbereiten;PROC benulieingabenrichtig:LET fnrausgdrucker=2,
+fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest
+(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);
+setzeeingabetest(TRUE )FI .END PROC benulieingabenrichtig;PROC
+benulilistenvorbereiten:INT VAR i;BOOL VAR b:=FALSE ;initspalten;FOR iFROM 1
+UPTO anzspaltenREP setzespaltenbreite(spaltenbreite)PER ;setzespaltentrenner(
+spaltentrenner);aktuelleindexnr:=dnrbenutz;inittupel(dnrbenutz);
+setzeidentiwert("");initobli(2);objektlistestarten(aktuelleindexnr,"",
+fnrbenutzname,FALSE ,b);setzebestandende(NOT multistop)END PROC
+benulilistenvorbereiten;PROC benulibildschirmvorbereiten:LET fnrausganf=2;
+standardkopfmaskeaktualisieren(benuliueberschrift);bildanf:=fnrausganf;
+setzebildanfangsposition(bildanf).END PROC benulibildschirmvorbereiten;PROC
+benuliseitezeigen:blaettern(PROC (INT CONST )benutzerzeigen,aktion,FALSE ,
+FALSE ,BOOL PROC multistop);END PROC benuliseitezeigen;PROC benutzerzeigen(
+INT CONST x):benutzerholen;benutzeraufbereitenbild;benutzeraufbildschirm.END
+PROC benutzerzeigen;PROC benutzeraufbereitenbild:INT VAR i;
+benutzeraufbereitenallgemein(bildbreite);restbehandlungbild.
+restbehandlungbild:FOR iFROM ausgfeldlaengereal+1UPTO ausgfeldlaengeREP
+ausgfeld(i):=text(blank,bildbreite)PER .END PROC benutzeraufbereitenbild;
+PROC benutzeraufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP
+ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsEND REP .END PROC
+benutzeraufbildschirm;PROC benulidruckvorbereiten:anfbuchstabe:=niltext;
+druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(zentriert(
+benuliueberschrift,druckbreite));holemeldung;systemdbon;inittupel(dnrbenutz);
+setzebestandende(NOT multistop);lesenvorbereitendruck(PROC (INT CONST ,BOOL
+PROC ,INT VAR )scanforward,BOOL PROC multistop).holemeldung:meldungstext(
+mnrbearbeitetwerden,bearbeitetwerden).variablenfuerdrucksetzen:
+druckzeilenzahl:=drucklaenge(ueberschriftenzeilen).END PROC
+benulidruckvorbereiten;PROC benuliseitedrucken:benuliueberschriftdrucken;
+seitedrucken(PROC (INT VAR )benutzerdrucken,druckzeilenzahl,ausgfeldlaenge,
+BOOL PROC multistop);seitenwechsel.END PROC benuliseitedrucken;PROC
+benuliueberschriftdrucken:druckkopfschreiben.END PROC
+benuliueberschriftdrucken;PROC benutzerdrucken(INT VAR zeilenzaehler):LET
+markiert="#";benutzerholen;ggflmeldunganfbuchstabe;benutzeraufbereitendruck;
+zeilenzaehlerINCR ausgfeldlaengereal;benutzerindruckdatei.
+ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .
+anfbuchstabegeaendert:neueranfbuchstabe:=kennungSUB 1;anfbuchstabe<>
+neueranfbuchstabe.meldunganfbuchstabe:standardmeldung(bearbeitetwerden,
+neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC
+benutzerdrucken;PROC benutzeraufbereitendruck:benutzeraufbereitenallgemein(
+druckbreite).END PROC benutzeraufbereitendruck;PROC benutzerindruckdatei:INT
+VAR i;FOR iFROM 1UPTO ausgfeldlaengerealREP druckzeileschreiben(ausgfeld(i))
+PER .END PROC benutzerindruckdatei;PROC benutzeraufbereitenallgemein(INT
+CONST breite):INT VAR position,anzahlberechtigungen,anzzeilenreal,i,j,k;FILE
+VAR f;TEXT VAR berechtigung;kennungaufbereiten;berechtigungenaufbereiten.
+kennungaufbereiten:ausgfeld(1):=text(kennung,breite).
+berechtigungenaufbereiten:erstenslashimtextueberlesen;
+berechtigungenindateiundsortieren;wirklichezeilenzahlberechnen;
+ausgabefelderberechtigungenauffuellen.erstenslashimtextueberlesen:position:=
+pos(berechtigungen,slash);berechtigungen:=subtext(berechtigungen,position+1).
+berechtigungenindateiundsortieren:f:=sequentialfile(output,dateiname);
+anzahlberechtigungen:=null;position:=pos(berechtigungen,slash);WHILE position
+<>nullREP anzahlberechtigungenINCR 1;putline(f,subtext(berechtigungen,1,
+position-1));berechtigungen:=subtext(berechtigungen,position+1);position:=pos
+(berechtigungen,slash)PER ;putline(f,berechtigungen);anzahlberechtigungen
+INCR 1;sort(dateiname).wirklichezeilenzahlberechnen:anzzeilenreal:=
+anzahlberechtigungenDIV anzspalten;IF (anzahlberechtigungenMOD anzspalten<>
+null)THEN anzzeilenrealINCR 1FI .ausgabefelderberechtigungenauffuellen:f:=
+sequentialfile(input,dateiname);i:=null;FOR jFROM 1UPTO anzzeilenrealREP FOR
+kFROM 1UPTO anzspaltenREP iINCR 1;IF i>anzahlberechtigungenTHEN spaltenweise(
+blank)ELSE getline(f,berechtigung);spaltenweise(berechtigung)FI ;PER ;
+ausgfeld(j+1):=zeilePER ;forget(dateiname,quiet);ausgfeldlaengereal:=
+anzzeilenreal+2;ausgfeld(ausgfeldlaengereal):=text(blank,breite).END PROC
+benutzeraufbereitenallgemein;PROC benutzerholen:kennung:=wert(fnrbenutzname);
+berechtigungen:=wert(fnrbenutzberecht);END PROC benutzerholen;END PACKET
+benutzerliste;
+
diff --git a/app/schulis/2.2.1/src/0.listen.druckbearbeitung b/app/schulis/2.2.1/src/0.listen.druckbearbeitung
new file mode 100644
index 0000000..a7c47be
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.druckbearbeitung
@@ -0,0 +1,207 @@
+PACKET listendruckbearbeitungDEFINES einstellungderlistenausgabe,
+leseveraendertelisteneinstellung,einstellungdersonderlistenausgabe,
+leseveraendertesonderlisteneinstellung,
+einstellungderstartwertefueruebersichtsplaene,
+leseveraenderteuebersichtsplaneinstellung,lesenvorbereitendruck,seitedrucken,
+druckbreite,drucklaenge,initdruckkopf,druckvorbereiten,druckkopfschreiben,
+druckzeileschreiben,seitenwechsel,setzemitseitennummern,drucknachbereiten,
+drucknachbereitenohneausdrucken:LET niltext="",blank=" ",null=0,
+schulnameschluessel="Schulname",schulstrasseschluessel="Schulstraße",
+schulortschluessel="Schulort",seitennrtrenner="/",seitenwechselanweisung=
+"###page#",stdxeumel=2.54,stdyeumel=2.35,druckdateinamepre="liste.",
+dateilaenge=4073,seitenwechselzeilen=2,tatsdruckkopflaenge=7,
+eineueberschriftzeilen=1,zweiueberschriftenzeilen=2,ueberschriftenmaxzeilen=2
+,schreiben=FALSE ,lesen=TRUE ,schriftfeldnr=2,druckbreitefeldnr=3,
+drucklaengefeldnr=4,mindruckbreitefeldnr=4,startxfeldnr=5,startyfeldnr=6,
+startxfeldnruebplan=3,startyfeldnruebplan=4,maxdruckbreite=76,mindruckbreite=
+60,mindrucklaenge=26,maxstartxy=10.0,textnull="0.0",realnull=0.0,
+eingabenichtsinnvoll=162,stackgroessedrucktupel=3,DRUCKKOPF =STRUCT (ROW
+tatsdruckkopflaengeTEXT zeile,BOOL zweiueberschriften);REAL VAR startx:=
+stdxeumel,starty:=stdyeumel,schreibflaeche;INT VAR druckzeilenbreite:=75,
+druckseitenlaenge:=60,testdruckzeilenbreite,testdruckseitenlaenge,
+anzahldrucktupel,bearbeitetedrucktupel,minbreitemitteilung;TEXT VAR
+teststartx,teststarty;BOOL VAR werteinordnung,mitseitennummern;INT VAR
+maxdateiseiten,schreibbaredrucklaenge,druckzeilennummer,druckseitennummer,
+druckdateinummer,zeilenzaehler;TEXT VAR schulname,schulstrasse,schulort,
+druckdateiname;DRUCKKOPF VAR druckkopf;FILE VAR druckdatei;INT PROC
+druckbreite:druckzeilenbreiteEND PROC druckbreite;PROC
+einstellungderlistenausgabe:LET maske="ms einstellung druck listen";
+druckzeilenbreite:=75;standardstartproc(maske);standardmaskenfeld(schrifttyp,
+schriftfeldnr);standardmaskenfeld(text(druckzeilenbreite),druckbreitefeldnr);
+standardmaskenfeld(text(druckseitenlaenge),drucklaengefeldnr);
+standardmaskenfeld(text(startx),startxfeldnr);standardmaskenfeld(text(starty)
+,startyfeldnr);standardnprocEND PROC einstellungderlistenausgabe;PROC
+einstellungdersonderlistenausgabe:LET maske=
+"ms einstellung druck anschreiben";minbreitemitteilung:=70;druckzeilenbreite
+:=75;standardstartproc(maske);standardmaskenfeld(schrifttyp,schriftfeldnr);
+standardmaskenfeld(text(druckzeilenbreite),druckbreitefeldnr);
+standardmaskenfeld(text(minbreitemitteilung),mindruckbreitefeldnr);
+standardmaskenfeld(text(startx),startxfeldnr);standardmaskenfeld(text(starty)
+,startyfeldnr);standardnprocEND PROC einstellungdersonderlistenausgabe;PROC
+einstellungdersonderlistenausgabe(INT CONST anzzeichen):LET maske=
+"ms einstellung druck anschreiben";minbreitemitteilung:=anzzeichen;
+druckzeilenbreite:=anzzeichen;standardstartproc(maske);standardmaskenfeld(
+schrifttyp,schriftfeldnr);standardmaskenfeld(text(druckzeilenbreite),
+druckbreitefeldnr);standardmaskenfeld(text(minbreitemitteilung),
+mindruckbreitefeldnr);standardmaskenfeld(text(startx),startxfeldnr);
+standardmaskenfeld(text(starty),startyfeldnr);standardnprocEND PROC
+einstellungdersonderlistenausgabe;PROC
+einstellungderstartwertefueruebersichtsplaene:LET maske=
+"ms einstellung startwerte";standardstartproc(maske);standardmaskenfeld(
+schrifttyp,schriftfeldnr);standardmaskenfeld(text(startx),startxfeldnruebplan
+);standardmaskenfeld(text(starty),startyfeldnruebplan);standardnprocEND PROC
+einstellungderstartwertefueruebersichtsplaene;PROC
+leseveraenderteuebersichtsplaneinstellung:werteinordnung:=TRUE ;teststartx:=
+compress(standardmaskenfeld(startxfeldnruebplan));teststarty:=compress(
+standardmaskenfeld(startyfeldnruebplan));ueberpruefendergegebenenwerte;IF
+werteinordnungTHEN werteuebernehmen;IF fontexists(schrifttyp)THEN
+schreibflaeche:=(16.0-(real(teststartx)-stdxeumel));druckzeilenbreite:=((
+xstepconversion(schreibflaeche))DIV (charpitch(font(schrifttyp)," ")))FI ;IF
+druckzeilenbreite<mindruckbreiteTHEN druckzeilenbreite:=mindruckbreiteELIF
+druckzeilenbreite>maxdruckbreiteTHEN druckzeilenbreite:=maxdruckbreiteFI ;
+enter(2)ELSE meldefehler;return(1)FI ;.ueberpruefendergegebenenwerte:IF (
+teststartx<>textnullAND real(teststartx)=realnull)OR real(teststartx)>
+maxstartxyOR real(teststartx)<realnullTHEN infeld(startxfeldnruebplan);
+werteinordnung:=FALSE ELSE IF (teststarty<>textnullAND real(teststarty)=
+realnull)OR real(teststarty)>maxstartxyOR real(teststarty)<realnullTHEN
+infeld(startyfeldnruebplan);werteinordnung:=FALSE ELSE werteinordnung:=TRUE
+FI ;FI .werteuebernehmen:setzeschuliszeichensatz(standardmaskenfeld(
+schriftfeldnr));startx:=real(teststartx);starty:=real(teststarty).meldefehler
+:standardmeldung(eingabenichtsinnvoll,niltext).END PROC
+leseveraenderteuebersichtsplaneinstellung;PROC
+leseveraendertelisteneinstellung:werteinordnung:=TRUE ;testdruckzeilenbreite
+:=int(standardmaskenfeld(druckbreitefeldnr));testdruckseitenlaenge:=int(
+standardmaskenfeld(drucklaengefeldnr));teststartx:=compress(
+standardmaskenfeld(startxfeldnr));teststarty:=compress(standardmaskenfeld(
+startyfeldnr));ueberpruefendergegebenenwerte;IF werteinordnungTHEN
+werteuebernehmen;enter(2)ELSE meldefehler;return(1)FI .
+ueberpruefendergegebenenwerte:IF testdruckzeilenbreite<mindruckbreiteTHEN
+infeld(druckbreitefeldnr);werteinordnung:=FALSE ELIF testdruckseitenlaenge<
+mindrucklaengeTHEN infeld(drucklaengefeldnr);werteinordnung:=FALSE ELIF (
+teststartx<>textnullAND real(teststartx)=realnull)OR real(teststartx)>
+maxstartxyOR real(teststartx)<realnullTHEN infeld(startxfeldnr);
+werteinordnung:=FALSE ELIF (teststarty<>textnullAND real(teststarty)=realnull
+)OR real(teststarty)>maxstartxyOR real(teststarty)<realnullTHEN infeld(
+startyfeldnr);werteinordnung:=FALSE ELSE werteinordnung:=TRUE FI .
+werteuebernehmen:setzeschuliszeichensatz(standardmaskenfeld(schriftfeldnr));
+druckzeilenbreite:=testdruckzeilenbreite;druckseitenlaenge:=
+testdruckseitenlaenge;maxdateiseiten:=dateilaengeDIV druckseitenlaenge;
+schreibbaredrucklaenge:=druckseitenlaenge-seitenwechselzeilen;startx:=real(
+teststartx);starty:=real(teststarty).meldefehler:standardmeldung(
+eingabenichtsinnvoll,niltext).END PROC leseveraendertelisteneinstellung;PROC
+leseveraendertesonderlisteneinstellung:werteinordnung:=TRUE ;
+testdruckzeilenbreite:=int(standardmaskenfeld(druckbreitefeldnr));teststartx
+:=compress(standardmaskenfeld(startxfeldnr));teststarty:=compress(
+standardmaskenfeld(startyfeldnr));ueberpruefendergegebenenwerte;IF
+werteinordnungTHEN werteuebernehmen;enter(2)ELSE meldefehler;return(1)FI .
+ueberpruefendergegebenenwerte:IF testdruckzeilenbreite<minbreitemitteilung
+THEN infeld(druckbreitefeldnr);werteinordnung:=FALSE ELIF (teststartx<>
+textnullAND real(teststartx)=realnull)OR real(teststartx)>maxstartxyOR real(
+teststartx)<realnullTHEN infeld(startxfeldnr);werteinordnung:=FALSE ELIF (
+teststarty<>textnullAND real(teststarty)=realnull)OR real(teststarty)>
+maxstartxyOR real(teststarty)<realnullTHEN infeld(startyfeldnr);
+werteinordnung:=FALSE ELSE werteinordnung:=TRUE FI .werteuebernehmen:
+setzeschuliszeichensatz(standardmaskenfeld(schriftfeldnr));druckzeilenbreite
+:=testdruckzeilenbreite;startx:=real(teststartx);starty:=real(teststarty).
+meldefehler:standardmeldung(eingabenichtsinnvoll,niltext).END PROC
+leseveraendertesonderlisteneinstellung;PROC lesenvorbereitendruck(PROC (INT
+CONST ,BOOL PROC ,INT VAR )mitscanner,BOOL PROC pruefungspeziell):
+anzahldrucktupel:=stackgroessedrucktupel;eineseiteeinlesen(PROC (INT CONST ,
+BOOL PROC ,INT VAR )mitscanner,PROC (INT CONST ,INT VAR )multisearchforward,
+TRUE ,BOOL PROC pruefungspeziell,anzahldrucktupel);IF anzahldrucktupel>0THEN
+einendatensatzlesen(PROC (INT CONST ,BOOL PROC )scanstacksucc,PROC multisucc,
+TRUE ,BOOL PROC pruefungspeziell);bearbeitetedrucktupel:=1ELSE
+setzebestandende(TRUE )FI END PROC lesenvorbereitendruck;PROC lesendruck(
+PROC (INT CONST ,BOOL PROC ,INT VAR )mitscanner,BOOL PROC pruefungspeziell):
+anzahldrucktupel:=stackgroessedrucktupel;eineseiteeinlesen(PROC (INT CONST ,
+BOOL PROC ,INT VAR )mitscanner,PROC (INT CONST ,INT VAR )multisucc,TRUE ,
+BOOL PROC pruefungspeziell,anzahldrucktupel);IF anzahldrucktupel>0THEN
+einendatensatzlesen(PROC (INT CONST ,BOOL PROC )scanstacksucc,PROC multisucc,
+TRUE ,BOOL PROC pruefungspeziell);bearbeitetedrucktupel:=1ELSE
+setzebestandende(TRUE )FI END PROC lesendruck;TEXT PROC tb:IF bestandende
+THEN "Bestandsende"ELSE "kein Ende"FI ENDPROC tb;PROC dummy(INT CONST i,INT
+VAR j):ENDPROC dummy;PROC dummy:ENDPROC dummy;PROC naechsteseiteeinlesen(
+BOOL PROC pruefungspeziell):lesendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )
+scansucc,BOOL PROC pruefungspeziell)ENDPROC naechsteseiteeinlesen;PROC
+seitedrucken(PROC (INT VAR )drucken,INT CONST zeilenzahl,maxsatzlaenge,BOOL
+PROC pruefespeziell):seitedrucken(PROC (INT VAR )drucken,zeilenzahl,
+maxsatzlaenge,PROC dummy,BOOL PROC pruefespeziell)ENDPROC seitedrucken;PROC
+seitedrucken(PROC (INT VAR )drucken,INT CONST zeilenzahl,maxsatzlaenge,PROC
+bestandendesimulierenbeimerkmalwechsel,BOOL PROC pruefespeziell):
+zeilenzaehler:=null;WHILE NOT bestandendeCAND (zeilenzaehler<=zeilenzahl-
+maxsatzlaenge)CAND pruefespeziellREP drucken(zeilenzaehler);
+naechstensatzlesen;#IF NOT bestandendeTHEN #
+bestandendesimulierenbeimerkmalwechsel#FI #PER .naechstensatzlesen:IF
+bearbeitetedrucktupel=anzahldrucktupelTHEN IF anzahldrucktupel<>
+stackgroessedrucktupelTHEN setzebestandende(TRUE )ELSE naechsteseiteeinlesen(
+BOOL PROC pruefespeziell)FI ELSE einendatensatzlesen(PROC (INT CONST ,BOOL
+PROC )scanstacksucc,PROC multisucc,TRUE ,BOOL PROC pruefespeziell);
+bearbeitetedrucktupelINCR 1FI .END PROC seitedrucken;INT PROC drucklaenge(
+INT CONST ueberschriftenzeilen):schreibbaredrucklaenge-druckkopflaenge(
+ueberschriftenzeilen).END PROC drucklaenge;INT PROC drucklaenge:
+schreibbaredrucklaenge.END PROC drucklaenge;PROC initdruckkopf:initdruckkopf(
+niltext,niltext).END PROC initdruckkopf;PROC initdruckkopf(TEXT CONST
+ueberschrift):initdruckkopf(ueberschrift,niltext).END PROC initdruckkopf;
+PROC initdruckkopf(TEXT CONST ueberschrift1,ueberschrift2):schulname:=
+schulkenndatum(schulnameschluessel);schulort:=schulkenndatum(
+schulortschluessel);druckkopf.zeile(1):=geblockt(schulname,date,
+druckzeilenbreite);IF (ueberschrift1=niltext)AND (ueberschrift2=niltext)THEN
+teilbriefkopfELSE teillistenkopfFI ;druckkopf.zeile(4):=ueberschrift1;
+druckkopf.zeile(5):=ueberschrift2;druckkopf.zeile(6):=niltext;druckkopf.zeile
+(7):=niltext;druckkopf.zweiueberschriften:=ueberschrift2<>niltext.
+teilbriefkopf:schulstrasse:=schulkenndatum(schulstrasseschluessel);druckkopf.
+zeile(2):=schulstrasse;druckkopf.zeile(3):=schulort.teillistenkopf:druckkopf.
+zeile(2):=schulort;druckkopf.zeile(3):=niltext.END PROC initdruckkopf;PROC
+druckvorbereiten:druckdateinummer:=0;druckseitennummer:=0;druckzeilennummer:=
+0;dateieroeffnen(schreiben).END PROC druckvorbereiten;PROC druckkopfschreiben
+:INT VAR i;FOR iFROM 1UPTO druckkopflaengeREPEAT druckzeileschreiben(
+druckkopf.zeile[i])END REPEAT .END PROC druckkopfschreiben;PROC
+druckzeileschreiben(TEXT CONST inhalt):IF druckzeilennummer<
+schreibbaredrucklaengeTHEN put(druckdatei,inhalt);line(druckdatei);
+druckzeilennummerINCR 1END IF .END PROC druckzeileschreiben;PROC
+seitenwechsel:trageggfleerzeilenein;putline(druckdatei,seitenwechselanweisung
+);druckseitennummerINCR 1;druckzeilennummer:=0;ggffolgedateieroeffnen(
+schreiben).trageggfleerzeilenein:INT CONST fehlendezeilen:=max(0,
+druckseitenlaenge-druckzeilennummer-1);line(druckdatei,fehlendezeilen).END
+PROC seitenwechsel;PROC setzemitseitennummern(BOOL CONST ja):mitseitennummern
+:=ja.END PROC setzemitseitennummern;PROC drucknachbereiten:INT VAR i;
+ggfseitenwechsel;IF mitseitennummernTHEN seitennummerneintragenFI ;FOR iFROM
+1UPTO druckdateinummerREPEAT druckdateiname:=druckdateinamepre+text(i);
+dateidruckenundloeschenEND REPEAT .ggfseitenwechsel:IF druckzeilennummer>0
+THEN seitenwechselEND IF .dateidruckenundloeschen:print(druckdateiname);
+forget(druckdateiname,quiet).END PROC drucknachbereiten;PROC
+drucknachbereitenohneausdrucken:ggfseitenwechsel;IF mitseitennummernTHEN
+seitennummerneintragenFI .ggfseitenwechsel:IF druckzeilennummer>0THEN
+seitenwechselEND IF .END PROC drucknachbereitenohneausdrucken;PROC
+seitennummerneintragen:IF mehralseineseiteTHEN
+trageseitennummernindruckdateieinEND IF .mehralseineseite:druckseitennummer>1
+.trageseitennummernindruckdateiein:INT CONST seiten:=druckseitennummer;
+druckdateinummer:=0;dateieroeffnen(lesen);FOR druckseitennummerFROM 1UPTO
+seitenREPEAT down(druckdatei,seitenwechselanweisung);trageseitennummerein;
+ggffolgedateieroeffnen(lesen)END REPEAT .trageseitennummerein:writerecord(
+druckdatei,seitennummer+seitenwechselanweisung);down(druckdatei).seitennummer
+:TEXT CONST seitennr:=nr;blanks+seitennr.nr:text(druckseitennummer)+
+seitennrtrenner+text(seiten).blanks:(druckzeilenbreite-seitennrlaenge)*blank.
+seitennrlaenge:length(seitennr).END PROC seitennummerneintragen;PROC
+ggffolgedateieroeffnen(BOOL CONST lesen):IF druckseitennummerMOD
+maxdateiseiten=0THEN dateieroeffnen(lesen)END IF .END PROC
+ggffolgedateieroeffnen;PROC dateieroeffnen(BOOL CONST lesen):druckdateinummer
+INCR 1;druckdateiname:=druckdateinamepre+text(druckdateinummer);IF lesenTHEN
+lesedateieroeffnenELSE schreibdateieroeffnenEND IF .lesedateieroeffnen:
+druckdatei:=sequentialfile(modify,druckdateiname);down(druckdatei,
+seitenwechselanweisung).schreibdateieroeffnen:forget(druckdateiname,quiet);
+druckdatei:=sequentialfile(output,druckdateiname);maxdateiseiten:=dateilaenge
+DIV druckseitenlaenge;schreibbaredrucklaenge:=druckseitenlaenge;IF
+mitseitennummernTHEN schreibbaredrucklaenge:=schreibbaredrucklaenge-
+seitenwechselzeilenFI ;setzeanzahlderzeichenprozeile(druckzeilenbreite);
+schrift(schrifttyp);start(startx,starty);schreibesteuerzeichenzeile(
+druckdateiname);putline(druckdatei,seitenwechselanweisung).END PROC
+dateieroeffnen;INT PROC druckkopflaenge(INT CONST ueberschriftenzeilen):IF
+ueberschriftenzeilen>ueberschriftenmaxzeilenTHEN errorstop("max "+text(
+ueberschriftenmaxzeilen)+" Ueberschriften im Druckkopf");0ELSE
+tatsdruckkopflaenge-ueberschriftenmaxzeilen+ueberschriftenzeilenEND IF .END
+PROC druckkopflaenge;INT PROC druckkopflaenge:druckkopflaenge(
+ueberschriftenzeilen).ueberschriftenzeilen:IF druckkopf.zweiueberschriften
+THEN zweiueberschriftenzeilenELSE eineueberschriftzeilenEND IF .END PROC
+druckkopflaenge;END PACKET listendruckbearbeitung
+
diff --git a/app/schulis/2.2.1/src/0.listen.faecher b/app/schulis/2.2.1/src/0.listen.faecher
new file mode 100644
index 0000000..650efde
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.faecher
@@ -0,0 +1,86 @@
+PACKET faecherlistenDEFINES faecherlispezielleteile:LET faechereingangsmaske=
+"mu liste einfach eingang",spaltentrenner=" ",faecheranfpos=2,spalte1breite=5
+,spalte2breite=35,spalte3breite=10,spalte4breite=11,niltext="",blank=" ",null
+=0,strich="-",ueberschriftenzeilen=2,mnrauswahlnichtsinnvoll=56,
+mnrbearbeitetwerden=109,ausgkopflaenge=2,ausgfeldlaenge=1,
+anzahlderobjekteprobildschirm=17;TEXT VAR faecherueberschrift:=
+"Liste der Fächer",fach,fachbezeichnung,fachgruppe,fachbereich,anfbuchstabe,
+neueranfbuchstabe:="",auswahlnichtsinnvoll,bearbeitetwerden;TEXT CONST
+leerzeile:=bildbreite*blank,textueberschrift:=("Fach"+2*blank+
+"Fachbezeichnung"+21*blank+"Fachgruppe"+blank+"Fachbereich");INT VAR
+eingabestatus,lesestart,bildanfang,spalte2druckbreite,druckzeilenzahl;INT
+CONST aktuelleindexnr:=dnrfaecher,fnrfach:=fnrffach,fnrfachbezeichnung:=
+fnrffachbez,fnrfachgruppe:=fnrffachgrp,fnrfachbereich:=fnrffachbereich;LET
+AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,
+AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR
+ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC multistop:TRUE END PROC
+multistop;PROC faecherlispezielleteile(INT CONST nr):SELECT nrOF CASE 1:
+faecherdialogvorbereitenCASE 2:faechereingabenrichtigCASE 3:
+faecherlistenvorbereitenCASE 4:faecherdruckvorbereitenCASE 5:
+faecherseitedruckenCASE 6:faecherbildschirmvorbereitenCASE 7:
+faecherseitezeigenENDSELECT .END PROC faecherlispezielleteile;PROC
+faecherdialogvorbereiten:faecherueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(faechereingangsmaske,faecheranfpos)END PROC
+faecherdialogvorbereiten;PROC faechereingabenrichtig:LET fnrausgdrucker=2,
+fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
+eingabestatus);IF eingabestatus=0THEN setzeeingabetest(TRUE );
+setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext)ELSE meldefehler;
+setzeeingabetest(FALSE )FI .meldefehler:meldungstext(mnrauswahlnichtsinnvoll,
+auswahlnichtsinnvoll);standardmeldung(auswahlnichtsinnvoll,niltext).END PROC
+faechereingabenrichtig;PROC faecherlistenvorbereiten:BOOL VAR b;initspalten;
+setzespaltentrenner(spaltentrenner);lesestart:=fnrfach;inittupel(dnrfaecher);
+setzeidentiwert("");initobli(anzahlderobjekteprobildschirm);
+objektlistestarten(aktuelleindexnr,"",lesestart,TRUE ,b);setzebestandende(
+NOT multistopCOR b);END PROC faecherlistenvorbereiten;PROC
+faecherbildschirmvorbereiten:LET fnrausganf=2;standardkopfmaskeaktualisieren(
+faecherueberschrift);bildanfang:=fnrausganf;setzebildanfangsposition(
+bildanfang);INT VAR i;setzespaltenbreite(bildbreite);spaltenweise(
+textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;
+erhoeheausgabeposumeins;spaltenweise(leerzeile);ausgfeld(1):=zeile;ausgfeld(1
+)IN ausgabepos;erhoeheausgabeposumeins;setzebildanfangsposition(4);
+initspalten;setzespaltentrenner(spaltentrenner);setzespaltenbreite(
+spalte1breite);setzespaltenbreite(spalte2breite);setzespaltenbreite(
+spalte3breite);setzespaltenbreite(spalte4breite);END PROC
+faecherbildschirmvorbereiten;PROC faecherseitezeigen:blaettern(PROC (INT
+CONST )faecherdatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END PROC
+faecherseitezeigen;PROC faecherdatenzeigen(INT CONST x):faecherdatenholen;
+faecherdatenaufbereitenbild;faecherdatenaufbildschirm.END PROC
+faecherdatenzeigen;PROC faecherdatenholen:fach:=wert(fnrfach);fachbezeichnung
+:=wert(fnrfachbezeichnung);IF wert(fnrfachgruppe)=text(null)THEN fachgruppe:=
+strichELSE fachgruppe:=wert(fnrfachgruppe);FI ;IF wert(fnrfachbereich)=
+niltextTHEN fachbereich:=strichELSE fachbereich:=wert(fnrfachbereich)FI ;END
+PROC faecherdatenholen;PROC faecherdatenaufbereitenbild:spaltenweise(fach);
+spaltenweise(fachbezeichnung);spaltenweise(fachgruppe);spaltenweise(
+fachbereich);END PROC faecherdatenaufbereitenbild;PROC
+faecherdatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP
+ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;END
+PROC faecherdatenaufbildschirm;PROC faecherdruckvorbereiten:setzebestandende(
+FALSE );anfbuchstabe:=" ";druckvorbereiten;variablenfuerdrucksetzen;
+initdruckkopf(zentriert(faecherueberschrift,druckbreite),zentriert(length(
+faecherueberschrift)*"-",druckbreite));initspalten;setzespaltenbreite(
+spalte1breite);setzespaltenbreite(spalte2breite);setzespaltenbreite(
+spalte3breite);setzespaltenbreite(spalte4breite);holemeldung;inittupel(
+dnrfaecher);initausgabekopfdruck;lesenvorbereitendruck(PROC (INT CONST ,BOOL
+PROC ,INT VAR )scanforward,BOOL PROC multistop);.holemeldung:meldungstext(
+mnrbearbeitetwerden,bearbeitetwerden).variablenfuerdrucksetzen:
+druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC
+faecherdruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck(1):=
+textueberschrift;ausgkopfdruck(2):=leerzeile;END PROC initausgabekopfdruck;
+PROC faecherseitedrucken:faecherueberschriftdrucken;seitedrucken(PROC (INT
+VAR )lehrerdrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistop);
+seitenwechsel.END PROC faecherseitedrucken;PROC faecherueberschriftdrucken:
+INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP
+druckzeileschreiben(ausgkopfdruck(i))PER END PROC faecherueberschriftdrucken;
+PROC lehrerdrucken(INT VAR zeilenzaehler):LET markiert="#";faecherdatenholen;
+ggflmeldunganfbuchstabe;faecheraufbereitendruck;zeilenzaehlerINCR
+ausgfeldlaenge;faecherindruckdatei.ggflmeldunganfbuchstabe:IF
+anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:
+neueranfbuchstabe:=fachSUB 1;anfbuchstabe<>neueranfbuchstabe.
+meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,neueranfbuchstabe+
+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC lehrerdrucken;PROC
+faecheraufbereitendruck:spaltenweise(fach);spaltenweise(fachbezeichnung);
+spaltenweise(fachgruppe);spaltenweise(fachbereich);ausgfeld(1):=zeile;END
+PROC faecheraufbereitendruck;PROC faecherindruckdatei:INT VAR i;FOR iFROM 1
+UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER .END PROC
+faecherindruckdatei;END PACKET faecherlisten
+
diff --git a/app/schulis/2.2.1/src/0.listen.klassengruppen b/app/schulis/2.2.1/src/0.listen.klassengruppen
new file mode 100644
index 0000000..7543dad
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.klassengruppen
@@ -0,0 +1,104 @@
+PACKET klassengruppenlistenDEFINES klassengruppenspezielleteile:LET
+klassengruppeneingangsmaske="mu liste einfach eingang",spaltentrenner=" ",
+klassengruppenanfpos=2,spaltenbreite1=12,spaltenbreite2=7,niltext="",blank=
+" ",strich="-",null=0,ueberschriftenzeilen=2,ausgkopflaenge=2,ausgfeldlaenge=
+1,anzahlderobjekteprobildschirm=5,mnrauswahlnichtsinnvoll=56,
+mnrbearbeitetwerden=352;TEXT CONST spaltentext1:="Klassengruppe",spaltentext2
+:="Bezeichnung Zusammensetzung";TEXT VAR klassengrueberschrift:=
+"Liste der Raumgruppen",schuelergrfuerzeile1,schuelergrfuerzeile2,
+schuelergrfuerzeile3,klassengruppe,alteklassengruppe:="",anfbuchstabe,
+neueranfbuchstabe:="",teiltextmeldung:=
+"die Klassengruppe dem Anfangsbuchstaben:";INT VAR eingabestatus,bildanfang,
+druckzeilenzahl;LET AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW
+ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR
+ausgfeld;AUSGKOPF VAR ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC
+multistop:TRUE END PROC multistop;PROC klassengruppenspezielleteile(INT
+CONST nr):SELECT nrOF CASE 1:klassengrdialogvorbereitenCASE 2:
+klassengreingabenrichtigCASE 3:klassengrlistenvorbereitenCASE 4:
+klassengrdruckvorbereitenCASE 5:klassengrseitedruckenCASE 6:
+klassengrbildschirmvorbereitenCASE 7:klassengrseitezeigenENDSELECT .END PROC
+klassengruppenspezielleteile;PROC klassengrdialogvorbereiten:
+klassengrueberschrift:=text(vergleichsknoten);setzeanfangswerte(
+klassengruppeneingangsmaske,klassengruppenanfpos)END PROC
+klassengrdialogvorbereiten;PROC klassengreingabenrichtig:LET fnrausgdrucker=2
+,fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
+eingabestatus);IF eingabestatus=0THEN setzeeingabetest(TRUE );
+setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);ELSE meldefehler
+;setzeeingabetest(FALSE )FI ;.meldefehler:standardmeldung(
+mnrauswahlnichtsinnvoll,niltext).END PROC klassengreingabenrichtig;PROC
+klassengrlistenvorbereiten:BOOL VAR b;initspalten;setzespaltentrenner(
+spaltentrenner);inittupel(dnrklassengruppen);setzeidentiwert("");initobli(
+anzahlderobjekteprobildschirm);objektlistestarten(dnrklassengruppen,"",
+fnrkgklassengrp,TRUE ,b);setzebestandende(NOT multistopCOR b);END PROC
+klassengrlistenvorbereiten;PROC klassengrbildschirmvorbereiten:LET fnrausganf
+=2;standardkopfmaskeaktualisieren(klassengrueberschrift);bildanfang:=
+fnrausganf;setzebildanfangsposition(bildanfang);initspalten;
+setzespaltenbreite(bildbreite);spaltenweise(spaltentext1);ausgfeld(1):=zeile;
+ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;spaltenweise(spaltentext2);
+ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;
+spaltenweise(blank);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;
+erhoeheausgabeposumeins;setzebildanfangsposition(5);spaltenbreitensetzenEND
+PROC klassengrbildschirmvorbereiten;PROC klassengrseitezeigen:blaettern(PROC
+(INT CONST )klassengrdatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END
+PROC klassengrseitezeigen;PROC klassengrdatenzeigen(INT CONST x):
+klassengrdatenholen;klassengrdatenaufbereitenbild1;
+klassengrdatenaufbildschirm;klassengrdatenaufbereitenbild2;
+klassengrdatenaufbildschirm;klassengrdatenaufbereitenbild3;
+klassengrdatenaufbildschirmEND PROC klassengrdatenzeigen;PROC
+klassengrdatenaufbereitenbild1:INT VAR y:=1;spaltenweise(klassengruppe);
+spaltenweise(subtext(schuelergrfuerzeile1,y,y+5));yINCR 6;spaltenweise(
+subtext(schuelergrfuerzeile1,y,y+5));yINCR 6;spaltenweise(subtext(
+schuelergrfuerzeile1,y,y+5));yINCR 6;spaltenweise(subtext(
+schuelergrfuerzeile1,y,y+5));yINCR 6;spaltenweise(subtext(
+schuelergrfuerzeile1,y,y+5));yINCR 6;END PROC klassengrdatenaufbereitenbild1;
+PROC klassengrdatenaufbereitenbild2:INT VAR y:=1;spaltenweise(blank);
+spaltenweise(subtext(schuelergrfuerzeile2,y,y+5));yINCR 6;spaltenweise(
+subtext(schuelergrfuerzeile2,y,y+5));yINCR 6;spaltenweise(subtext(
+schuelergrfuerzeile2,y,y+5));yINCR 6;spaltenweise(subtext(
+schuelergrfuerzeile2,y,y+5));yINCR 6;spaltenweise(subtext(
+schuelergrfuerzeile2,y,y+5));yINCR 6;END PROC klassengrdatenaufbereitenbild2;
+PROC klassengrdatenaufbereitenbild3:INT VAR y:=1;spaltenweise(blank);
+spaltenweise(subtext(schuelergrfuerzeile3,y,y+5));yINCR 6;spaltenweise(
+subtext(schuelergrfuerzeile3,y,y+5));yINCR 6;spaltenweise(subtext(
+schuelergrfuerzeile3,y,y+5));yINCR 6;spaltenweise(subtext(
+schuelergrfuerzeile3,y,y+5));yINCR 6;spaltenweise(subtext(
+schuelergrfuerzeile3,y,y+5));yINCR 6;END PROC klassengrdatenaufbereitenbild3;
+PROC klassengrdatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP
+ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;END
+PROC klassengrdatenaufbildschirm;PROC klassengrdruckvorbereiten:
+setzebestandende(FALSE );anfbuchstabe:=" ";druckvorbereiten;
+variablenfuerdrucksetzen;initdruckkopf(zentriert(klassengrueberschrift,
+druckbreite),zentriert(length(klassengrueberschrift)*strich,druckbreite));
+initausgabekopfdruck;inittupel(dnrklassengruppen);spaltenbreitensetzen;
+lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL
+PROC multistop);.variablenfuerdrucksetzen:druckzeilenzahl:=drucklaenge(
+ueberschriftenzeilen)-ausgkopflaenge.END PROC klassengrdruckvorbereiten;PROC
+klassengrseitedrucken:klassengrueberschriftdrucken;seitedrucken(PROC (INT
+VAR )klassengrdatendrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistop
+);seitenwechsel.END PROC klassengrseitedrucken;PROC
+klassengrueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO
+ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck(i))PER ;ausgfeld(1):=
+zeile;druckzeileschreiben(ausgfeld(1))END PROC klassengrueberschriftdrucken;
+PROC klassengrdatendrucken(INT VAR zeilenzaehler):LET markiert="#";
+klassengrdatenholen;ggflmeldunganfbuchstabe;klassengrdatenaufbereitenbild1;
+zeilenzaehlerINCR ausgfeldlaenge;klassengrindruckdatei;IF
+schuelergrfuerzeile2<>niltextTHEN klassengrdatenaufbereitenbild2;
+zeilenzaehlerINCR ausgfeldlaenge;klassengrindruckdatei;IF
+schuelergrfuerzeile3<>niltextTHEN klassengrdatenaufbereitenbild3;
+zeilenzaehlerINCR ausgfeldlaenge;klassengrindruckdatei;FI FI ;.
+ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .
+anfbuchstabegeaendert:neueranfbuchstabe:=klassengruppeSUB 1;anfbuchstabe<>
+neueranfbuchstabe.meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,
+teiltextmeldung+neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.
+END PROC klassengrdatendrucken;PROC initausgabekopfdruck:ausgkopfdruck(1):=
+spaltentext1;ausgkopfdruck(2):=spaltentext2;END PROC initausgabekopfdruck;
+PROC klassengrindruckdatei:ausgfeld(1):=zeile;INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END PROC
+klassengrindruckdatei;PROC spaltenbreitensetzen:INT VAR z;initspalten;
+setzespaltenbreite(spaltenbreite1);FOR zFROM 1UPTO 5REP setzespaltenbreite(
+spaltenbreite2);PER END PROC spaltenbreitensetzen;PROC klassengrdatenholen:
+klassengruppe:=wert(fnrkgklassengrp);schuelergrfuerzeile1:=subtext(wert(
+fnrkgschuelergrp),1,30);schuelergrfuerzeile2:=subtext(wert(fnrkgschuelergrp),
+31,60);schuelergrfuerzeile3:=subtext(wert(fnrkgschuelergrp),61,90);END PROC
+klassengrdatenholen;END PACKET klassengruppenlisten;
+
diff --git a/app/schulis/2.2.1/src/0.listen.raumgruppen b/app/schulis/2.2.1/src/0.listen.raumgruppen
new file mode 100644
index 0000000..9d8b0f4
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.raumgruppen
@@ -0,0 +1,97 @@
+PACKET raumgruppenlistenDEFINES raumgruppenspezielleteile:LET
+raumgruppeneingangsmaske="mu liste einfach eingang",spaltentrenner=" ",
+raumgruppenanfpos=2,spaltenbreite1=4,spaltenbreite2=12,niltext="",blank=" ",
+strich="-",null=0,ueberschriftenzeilen=2,ausgkopflaenge=2,ausgfeldlaenge=1,
+anzahlderobjekteprobildschirm=8,mnrauswahlnichtsinnvoll=56,
+mnrbearbeitetwerden=352;TEXT VAR raumgrueberschrift:="Liste der Raumgruppen",
+spaltentext:="Raumgruppe Räume",raeumefuerzeile1,raeumefuerzeile2,raum1,
+raum2,raum3,raum4,raum5,raum6,raum7,raum8,raum9,raum10,raum11,raum12,raum13,
+raum14,raum15,raumgruppe,alteraumgruppe:="",anfbuchstabe,neueranfbuchstabe:=
+"",teiltextmeldung:="die Raumgruppe dem Anfangsbuchstaben:";INT VAR
+eingabestatus,bildanfang,spalte2druckbreite,druckzeilenzahl;LET AUSGFELD =
+ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW
+ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;
+AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC multistop:TRUE END PROC multistop;
+PROC raumgruppenspezielleteile(INT CONST nr):SELECT nrOF CASE 1:
+raumgrdialogvorbereitenCASE 2:raumgreingabenrichtigCASE 3:
+raumgrlistenvorbereitenCASE 4:raumgrdruckvorbereitenCASE 5:raumgrseitedrucken
+CASE 6:raumgrbildschirmvorbereitenCASE 7:raumgrseitezeigenENDSELECT .END
+PROC raumgruppenspezielleteile;PROC raumgrdialogvorbereiten:
+raumgrueberschrift:=text(vergleichsknoten);setzeanfangswerte(
+raumgruppeneingangsmaske,raumgruppenanfpos)END PROC raumgrdialogvorbereiten;
+PROC raumgreingabenrichtig:LET fnrausgdrucker=2,fnrausgbild=3;standardpruefe(
+5,fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus=0
+THEN setzeeingabetest(TRUE );setzeausgabedrucker(standardmaskenfeld(
+fnrausgbild)=niltext);ELSE meldefehler;setzeeingabetest(FALSE )FI ;.
+meldefehler:standardmeldung(mnrauswahlnichtsinnvoll,niltext).END PROC
+raumgreingabenrichtig;PROC raumgrlistenvorbereiten:BOOL VAR b;initspalten;
+setzespaltentrenner(spaltentrenner);inittupel(dnrraumgruppen);setzeidentiwert
+("");initobli(anzahlderobjekteprobildschirm);objektlistestarten(
+dnrraumgruppen,"",fnrrgraumgrp,TRUE ,b);setzebestandende(NOT multistopCOR b);
+END PROC raumgrlistenvorbereiten;PROC raumgrbildschirmvorbereiten:LET
+fnrausganf=2;standardkopfmaskeaktualisieren(raumgrueberschrift);bildanfang:=
+fnrausganf;setzebildanfangsposition(bildanfang);initspalten;
+setzespaltenbreite(bildbreite);spaltenweise(spaltentext);ausgfeld(1):=zeile;
+ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;spaltenweise(blank);ausgfeld
+(1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;
+setzebildanfangsposition(4);spaltenbreitensetzenEND PROC
+raumgrbildschirmvorbereiten;PROC raumgrseitezeigen:blaettern(PROC (INT CONST
+)raumgrdatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END PROC
+raumgrseitezeigen;PROC raumgrdatenzeigen(INT CONST x):raumgrdatenholen;
+raumgrdatenaufbereitenbild1;raumgrdatenaufbildschirm;
+raumgrdatenaufbereitenbild2;raumgrdatenaufbildschirmEND PROC
+raumgrdatenzeigen;PROC raumgrdatenaufbereitenbild1:spaltenweise(raumgruppe);
+spaltenweise(raum1);spaltenweise(raum2);spaltenweise(raum3);spaltenweise(
+raum4);spaltenweise(raum5);spaltenweise(raum6);spaltenweise(raum7);
+spaltenweise(raum8);spaltenweise(raum9);spaltenweise(raum10);END PROC
+raumgrdatenaufbereitenbild1;PROC raumgrdatenaufbereitenbild2:spaltenweise(
+blank);spaltenweise(raum11);spaltenweise(raum12);spaltenweise(raum13);
+spaltenweise(raum14);spaltenweise(raum15);spaltenweise(blank);spaltenweise(
+blank);spaltenweise(blank);spaltenweise(blank);spaltenweise(blank);END PROC
+raumgrdatenaufbereitenbild2;PROC raumgrdatenaufbildschirm:INT VAR i;FOR i
+FROM 1UPTO ausgfeldlaengeREP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;
+erhoeheausgabeposumeins;PER ;END PROC raumgrdatenaufbildschirm;PROC
+raumgrdruckvorbereiten:setzebestandende(FALSE );anfbuchstabe:=" ";
+druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(zentriert(
+raumgrueberschrift,druckbreite),zentriert(length(raumgrueberschrift)*strich,
+druckbreite));initausgabekopfdruck;inittupel(dnrraumgruppen);
+spaltenbreitensetzen;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT
+VAR )scanforward,BOOL PROC multistop);.variablenfuerdrucksetzen:
+druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC
+raumgrdruckvorbereiten;PROC raumgrseitedrucken:raumgrueberschriftdrucken;
+seitedrucken(PROC (INT VAR )raumgrdatendrucken,druckzeilenzahl,ausgfeldlaenge
+,BOOL PROC multistop);seitenwechsel.END PROC raumgrseitedrucken;PROC
+raumgrueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO
+ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck(i))PER END PROC
+raumgrueberschriftdrucken;PROC raumgrdatendrucken(INT VAR zeilenzaehler):LET
+markiert="#";raumgrdatenholen;ggflmeldunganfbuchstabe;
+raumgrdatenaufbereitenbild1;zeilenzaehlerINCR ausgfeldlaenge;
+raumgrindruckdatei;IF raeumefuerzeile2<>niltextTHEN
+raumgrdatenaufbereitenbild2;zeilenzaehlerINCR ausgfeldlaenge;
+raumgrindruckdatei;FI ;.ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN
+meldunganfbuchstabeFI .anfbuchstabegeaendert:neueranfbuchstabe:=raumgruppe
+SUB 1;anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe:standardmeldung(
+mnrbearbeitetwerden,teiltextmeldung+neueranfbuchstabe+markiert);anfbuchstabe
+:=neueranfbuchstabe.END PROC raumgrdatendrucken;PROC initausgabekopfdruck:
+TEXT VAR unterstreichung:=druckbreite*strich;ausgkopfdruck(1):=spaltentext;
+ausgkopfdruck(2):=unterstreichung;END PROC initausgabekopfdruck;PROC
+raumgrindruckdatei:ausgfeld(1):=zeile;INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END PROC
+raumgrindruckdatei;PROC spaltenbreitensetzen:initspalten;setzespaltenbreite(
+spaltenbreite2);INT VAR x;INT CONST zehnraeumedererstenzeile:=10;FOR xFROM 1
+UPTO zehnraeumedererstenzeileREP setzespaltenbreite(spaltenbreite1);PER ;END
+PROC spaltenbreitensetzen;PROC raumgrdatenholen:INT VAR x:=1;raumgruppe:=wert
+(fnrrgraumgrp);raeumefuerzeile1:=subtext(wert(fnrrgraeume),1,40);
+raeumefuerzeile2:=subtext(wert(fnrrgraeume),41,60);raum1:=subtext(
+raeumefuerzeile1,x,x+4);xINCR 4;raum2:=subtext(raeumefuerzeile1,x,x+4);xINCR
+4;raum3:=subtext(raeumefuerzeile1,x,x+4);xINCR 4;raum4:=subtext(
+raeumefuerzeile1,x,x+4);xINCR 4;raum5:=subtext(raeumefuerzeile1,x,x+4);xINCR
+4;raum6:=subtext(raeumefuerzeile1,x,x+4);xINCR 4;raum7:=subtext(
+raeumefuerzeile1,x,x+4);xINCR 4;raum8:=subtext(raeumefuerzeile1,x,x+4);xINCR
+4;raum9:=subtext(raeumefuerzeile1,x,x+4);xINCR 4;raum10:=subtext(
+raeumefuerzeile1,x,x+4);xINCR 4;raum11:=subtext(raeumefuerzeile2,x,x+4);x
+INCR 4;raum12:=subtext(raeumefuerzeile2,x,x+4);xINCR 4;raum13:=subtext(
+raeumefuerzeile2,x,x+4);xINCR 4;raum14:=subtext(raeumefuerzeile2,x,x+4);x
+INCR 4;raum15:=subtext(raeumefuerzeile2,x,x+4);xINCR 4;alteraumgruppe:=
+raumgruppe;END PROC raumgrdatenholen;END PACKET raumgruppenlisten;
+
diff --git a/app/schulis/2.2.1/src/0.listen.schlueabku b/app/schulis/2.2.1/src/0.listen.schlueabku
new file mode 100644
index 0000000..54a928d
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.schlueabku
@@ -0,0 +1,69 @@
+PACKET schluesselundabkulisteDEFINES schlueabkulieingang,
+schlueabkulispezielleteile:LET niltext="",null=0,ueberschriftenzeilen=1,
+spalte1breite=10,anzspaltentrenner=1,ausgfeldlaenge=1,AUSGFELD =ROW
+ausgfeldlaengeTEXT ,schlueabkulieingangsmaske="mu liste einfach eingang",
+schlueabkulianfpos=2;#LET dnrschluessel=137,fnrschlsachgebiet=138,
+fnrschlschluessel=139,fnrschllangtext=140,dnrgesamtbestand=--,fnrbestandname=
+--,fnrbestandid=--;#INT CONST spalte2bildbreite:=bildbreite-anzspaltentrenner
+-spalte1breite;INT VAR spalte2druckbreite,druckzeilenzahl,bildanf,
+eingabestatus;TEXT VAR schlueabkuliueberschrift,bestand,schluesselabk,
+schluessellangtext;AUSGFELD VAR ausgfeld;#INT VAR sachgebiet;#BOOL PROC
+multistop:BOOL VAR b;b:=wert(fnrschlsachgebiet)=bestand;bENDPROC multistop;
+BOOL PROC multistopdruck:BOOL VAR b:=multistop;setzebestandende(NOT b);b
+ENDPROC multistopdruck;PROC schlueabkulieingang(TEXT CONST spezbestand):
+bestand:=spezbestand;eingangsmaskezeigenundparameterlesen(PROC
+schlueabkulispezielleteile).END PROC schlueabkulieingang;PROC
+schlueabkulispezielleteile(INT CONST nr):SELECT nrOF CASE 1:
+schlueabkulidialogvorbereitenCASE 2:schlueabkulieingabenrichtigCASE 3:
+schlueabkulilistenvorbereitenCASE 4:schlueabkulidruckvorbereitenCASE 5:
+schlueabkuliseitedruckenCASE 6:schlueabkulibildschirmvorbereitenCASE 7:
+schlueabkuliseitezeigenENDSELECT .END PROC schlueabkulispezielleteile;PROC
+schlueabkulidialogvorbereiten:schlueabkuliueberschrift:=text(vergleichsknoten
+);setzeanfangswerte(schlueabkulieingangsmaske,schlueabkulianfpos).END PROC
+schlueabkulidialogvorbereiten;PROC schlueabkulieingabenrichtig:LET
+fnrausgdrucker=2,fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,
+null,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);
+setzeeingabetest(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(
+fnrausgbild)=niltext);setzeeingabetest(TRUE )FI .END PROC
+schlueabkulieingabenrichtig;PROC bestandidbestimmenundalssachgebieteintragen:
+#jf##systemdbon;putwert(fnrbestandname,bestand);search(dnrgesamtbestand,TRUE
+);IF dbstatus=okTHEN sachgebiet:=intwert(fnrbestandid)ELSE sachgebiet:=maxint
+FI ;#systemdboff;inittupel(dnrschluessel);putwert(fnrschlsachgebiet,bestand)
+ENDPROC bestandidbestimmenundalssachgebieteintragen;PROC
+schlueabkulilistenvorbereiten:BOOL VAR b:=FALSE ;
+bestandidbestimmenundalssachgebieteintragen;initobli(19);#A nzahlproS eite#
+reinitparsing;setzeidentiwert("");objektlistestarten(dnrschluessel,"",
+fnrschlschluessel,TRUE ,b);setzebestandende(b)END PROC
+schlueabkulilistenvorbereiten;PROC schlueabkulibildschirmvorbereiten:LET
+fnrausganf=2;standardkopfmaskeaktualisieren(schlueabkuliueberschrift);
+initspalten;setzespaltenbreite(spalte1breite);setzespaltenbreite(
+spalte2bildbreite);bildanf:=fnrausganf;setzebildanfangsposition(bildanf).END
+PROC schlueabkulibildschirmvorbereiten;PROC schlueabkuliseitezeigen:blaettern
+(PROC (INT CONST )abkuerzungzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop);
+END PROC schlueabkuliseitezeigen;PROC abkuerzungzeigen(INT CONST dummy):
+abkuerzungholen;abkuerzungaufbereiten;abkuerzungaufbildschirm.END PROC
+abkuerzungzeigen;PROC abkuerzungaufbildschirm:INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsEND
+REPEAT .END PROC abkuerzungaufbildschirm;PROC schlueabkulidruckvorbereiten:
+druckvorbereiten;variablenfuerdrucksetzen;initspalten;setzespaltenbreite(
+spalte1breite);setzespaltenbreite(spalte2druckbreite);initdruckkopf(zentriert
+(schlueabkuliueberschrift,druckbreite));
+bestandidbestimmenundalssachgebieteintragen;lesenvorbereitendruck(PROC (INT
+CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopdruck).
+variablenfuerdrucksetzen:spalte2druckbreite:=druckbreite-anzspaltentrenner-
+spalte1breite;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen).END PROC
+schlueabkulidruckvorbereiten;PROC schlueabkuliseitedrucken:
+schlueabkuliueberschriftdrucken;seitedrucken(PROC (INT VAR )abkuerzungdrucken
+,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopdruck);seitenwechsel.END
+PROC schlueabkuliseitedrucken;PROC schlueabkuliueberschriftdrucken:
+druckkopfschreiben;END PROC schlueabkuliueberschriftdrucken;PROC
+abkuerzungdrucken(INT VAR zeilenzaehler):abkuerzungholen;
+abkuerzungaufbereiten;zeilenzaehlerINCR ausgfeldlaenge;abkuerzungindruckdatei
+.END PROC abkuerzungdrucken;PROC abkuerzungindruckdatei:druckzeileschreiben(
+ausgfeld(1)).END PROC abkuerzungindruckdatei;PROC abkuerzungaufbereiten:
+schreibeabkuerzunglangtext.schreibeabkuerzunglangtext:spaltenweise(
+schluesselabk);spaltenweise(schluessellangtext);ausgfeld(1):=zeile.END PROC
+abkuerzungaufbereiten;PROC abkuerzungholen:schluesselabk:=wert(
+fnrschlschluessel);schluessellangtext:=wert(fnrschllangtext);END PROC
+abkuerzungholen;END PACKET schluesselundabkuliste;
+
diff --git a/app/schulis/2.2.1/src/0.listen.schuelergruppen b/app/schulis/2.2.1/src/0.listen.schuelergruppen
new file mode 100644
index 0000000..cbef1c3
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.schuelergruppen
@@ -0,0 +1,109 @@
+PACKET schuelergruppenlistenDEFINES schuelergruplispezielleteile:LET
+AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,
+AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR
+ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;LET schuelergruppeneingangsmaske=
+"ms liste schuelergruppen",ausgfeldlaenge=1,anzahlderobjekteprobildschirm=17,
+ueberschriftenzeilen=2,ausgkopflaenge=2,spaltentrenner=" ",
+schuelergruppenanfpos=2,jgstspalte1breite=14,zugspalte2breite=9,
+lehrerspalte3breite=15,stellvspalte4breite=15,strich="/",niltext="",blank=" "
+,null=0,mnrauswahlnichtsinnvoll=56;LET textsj="Schuljahr",texthj=
+"Schulhalbjahr";TEXT VAR schuelergruppenueberschrift:="",schuljahr,halbjahr,
+jahrgangsstufe,altejahrgangsstufe:="",bearbeitungsschuljahr,
+bearbeitungshalbjahr,zugtutor,klassenlehrer,stellvertreter,
+auswahlnichtsinnvoll;TEXT CONST leerzeile:=bildbreite*blank,textueberschrift
+:=("Jahrgangsstufe"+blank+"Zug/Tutor"+blank+"Klassenleiter"+3*blank+
+"Stellvertreter");INT VAR eingabestatus,bildanfang,spalte2druckbreite,
+druckzeilenzahl;INT CONST aktuelleindexnr:=dnraktschuelergruppen;BOOL VAR
+aktuelleshjgewaehlt;BOOL PROC multistop:BOOL VAR b;IF dbstatus=okTHEN b:=(
+bearbeitungshalbjahr=wert(fnrsgrphj)AND bearbeitungsschuljahr=wert(fnrsgrpsj)
+)ELSE b:=FALSE FI ;bEND PROC multistop;BOOL PROC multistopsim:
+setzebestandende(FALSE );BOOL VAR b:=multistop;setzebestandende(NOT b);bEND
+PROC multistopsim;PROC schuelergruplispezielleteile(INT CONST nr):SELECT nr
+OF CASE 1:schuelergruppendialogvorbereitenCASE 2:
+schuelergruppeneingabenrichtigCASE 3:schuelergruppenlistenvorbereitenCASE 4:
+schuelergruppendruckvorbereitenCASE 5:schuelergruppenseitedruckenCASE 6:
+schuelergruppenbildschirmvorbereitenCASE 7:schuelergruppenseitezeigen
+ENDSELECT .END PROC schuelergruplispezielleteile;PROC
+schuelergruppendialogvorbereiten:schuelergruppenueberschrift:=text(
+vergleichsknoten);setzeanfangswerte(schuelergruppeneingangsmaske,
+schuelergruppenanfpos)END PROC schuelergruppendialogvorbereiten;PROC
+schuelergruppeneingabenrichtig:LET fnrausggeplanteshj=2,fnrausgaktuelleshj=3,
+fnrausgdrucker=4,fnrausgbild=5;standardpruefe(5,fnrausgdrucker,fnrausgbild,
+null,niltext,eingabestatus);IF eingabestatus=0THEN standardpruefe(5,
+fnrausggeplanteshj,fnrausgaktuelleshj,null,niltext,eingabestatus);IF
+eingabestatus=0THEN gewaehlteshalbjahrmerken;setzeeingabetest(TRUE );
+setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext)ELSE meldefehler;
+setzeeingabetest(FALSE )FI ;ELSE meldefehler;setzeeingabetest(FALSE )FI .
+meldefehler:meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);
+standardmeldung(auswahlnichtsinnvoll,niltext).gewaehlteshalbjahrmerken:
+aktuelleshjgewaehlt:=standardmaskenfeld(fnrausgaktuelleshj)<>niltext.END
+PROC schuelergruppeneingabenrichtig;PROC schuelergruppenlistenvorbereiten:
+BOOL VAR b;initspalten;setzespaltentrenner(spaltentrenner);
+bearbeitungsschuljahr:=schulkenndatum(textsj);bearbeitungshalbjahr:=
+schulkenndatum(texthj);IF NOT (aktuelleshjgewaehlt)THEN
+geplanteshjundsjberechnen(bearbeitungshalbjahr,bearbeitungsschuljahr)FI ;
+inittupel(dnraktschuelergruppen);setzeidentiwert("");initobli(
+anzahlderobjekteprobildschirm);parsenooffields(6);putwert(fnrsgrpsj,
+bearbeitungsschuljahr);putwert(fnrsgrphj,bearbeitungshalbjahr);
+setzescanendewert("255");objektlistestarten(aktuelleindexnr,
+bearbeitungsschuljahr,fnrsgrpjgst,TRUE ,b);setzebestandende(NOT multistopCOR
+b);END PROC schuelergruppenlistenvorbereiten;PROC
+schuelergruppenbildschirmvorbereiten:LET fnrausganf=2;
+standardkopfmaskeaktualisieren(schuelergruppenueberschrift);bildanfang:=
+fnrausganf;setzebildanfangsposition(bildanfang);INT VAR i;setzespaltenbreite(
+bildbreite);spaltenweise(textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)IN
+ausgabepos;erhoeheausgabeposumeins;spaltenweise(leerzeile);ausgfeld(1):=zeile
+;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;setzebildanfangsposition(4)
+;initspalten;setzespaltentrenner(spaltentrenner);setzespaltenbreite(
+jgstspalte1breite);setzespaltenbreite(zugspalte2breite);setzespaltenbreite(
+lehrerspalte3breite);setzespaltenbreite(stellvspalte4breite);END PROC
+schuelergruppenbildschirmvorbereiten;PROC schuelergruppenseitezeigen:
+blaettern(PROC (INT CONST )schuelergruppendatenzeigen,aktion,TRUE ,TRUE ,
+BOOL PROC multistop)END PROC schuelergruppenseitezeigen;PROC
+schuelergruppendatenzeigen(INT CONST x):schuelergruppendatenholen;
+schuelergruppendatenaufbereitenbild;schuelergruppendatenaufbildschirm;END
+PROC schuelergruppendatenzeigen;PROC schuelergruppendatenholen:schuljahr:=
+wert(fnrsgrpsj);halbjahr:=wert(fnrsgrphj);jahrgangsstufe:=wert(fnrsgrpjgst);
+zugtutor:=wert(fnrsgrpkennung);klassenlehrer:=wert(fnrsgrplehrer);
+stellvertreter:=wert(fnrsgrpstellvlehrer);END PROC schuelergruppendatenholen;
+PROC schuelergruppendatenaufbereitenbild:IF length(jahrgangsstufe)=1THEN
+spaltenweise(13*blank+jahrgangsstufe);ELSE spaltenweise(12*blank+
+jahrgangsstufe);FI ;spaltenweise(zugtutor);spaltenweise(klassenlehrer);
+spaltenweise(stellvertreter);END PROC schuelergruppendatenaufbereitenbild;
+PROC schuelergruppendatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengeREP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;
+erhoeheausgabeposumeins;PER ;END PROC schuelergruppendatenaufbildschirm;PROC
+schuelergruppendruckvorbereiten:setzebestandende(FALSE );druckvorbereiten;
+variablenfuerdrucksetzen;TEXT VAR schjaufbereitet:=text(bearbeitungsschuljahr
+,2)+strich+text(bearbeitungsschuljahr,2,3),halbjaufbereitet:=
+bearbeitungshalbjahr+". Halbjahr";schuelergruppenueberschrift:=
+"Liste der Schülergruppen im Schuljahr "+schjaufbereitet+blank+
+halbjaufbereitet;initdruckkopf(zentriert(schuelergruppenueberschrift,
+druckbreite),zentriert(length(schuelergruppenueberschrift)*"-",druckbreite));
+initspalten;setzespaltenbreite(jgstspalte1breite);setzespaltenbreite(
+zugspalte2breite);setzespaltenbreite(lehrerspalte3breite);setzespaltenbreite(
+stellvspalte4breite);inittupel(dnraktschuelergruppen);initausgabekopfdruck;
+putwert(fnrsgrpsj,bearbeitungsschuljahr);putwert(fnrsgrphj,
+bearbeitungshalbjahr);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT
+VAR )scanforward,BOOL PROC multistopsim);.variablenfuerdrucksetzen:
+druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC
+schuelergruppendruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck(1):=
+textueberschrift;ausgkopfdruck(2):=leerzeileEND PROC initausgabekopfdruck;
+PROC schuelergruppenseitedrucken:schuelergruppenueberschriftdrucken;
+seitedrucken(PROC (INT VAR )schuelergruppendrucken,druckzeilenzahl,
+ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END PROC
+schuelergruppenseitedrucken;PROC schuelergruppenueberschriftdrucken:INT VAR i
+;druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP druckzeileschreiben(
+ausgkopfdruck(i))PER END PROC schuelergruppenueberschriftdrucken;PROC
+schuelergruppendrucken(INT VAR zeilenzaehler):schuelergruppendatenholen;IF
+altejahrgangsstufe<>jahrgangsstufeTHEN spaltenweise(" ");spaltenweise(" ");
+spaltenweise(" ");spaltenweise(" ");ausgfeld(1):=zeile;zeilenzaehlerINCR
+ausgfeldlaenge;schuelergruppenindruckdateiFI ;schuelergruppenaufbereitendruck
+;zeilenzaehlerINCR ausgfeldlaenge;schuelergruppenindruckdatei.END PROC
+schuelergruppendrucken;PROC schuelergruppenaufbereitendruck:
+setzespaltentrenner(spaltentrenner);schuelergruppendatenaufbereitenbild;
+ausgfeld(1):=zeile;altejahrgangsstufe:=jahrgangsstufe;END PROC
+schuelergruppenaufbereitendruck;PROC schuelergruppenindruckdatei:INT VAR i;
+FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END
+PROC schuelergruppenindruckdatei;END PACKET schuelergruppenlisten
+
diff --git a/app/schulis/2.2.1/src/0.listen.schulen b/app/schulis/2.2.1/src/0.listen.schulen
new file mode 100644
index 0000000..c23ade2
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.schulen
@@ -0,0 +1,87 @@
+PACKET schulenlistenDEFINES schulenspezielleteile:LET niltext="",blank=" ",
+mittestrich="-",ueberschriftenzeilen=1,#bestand="c05 schulen",#spalte1breite=
+8,spalte2breite=8,spalte4breite=17,anzspaltentrenner=3,ausgkopflaenge=3,
+ausgfeldlaenge=5,#maxdbwerte=100,##anzdbwerte=8,#AUSGFELD =ROW ausgfeldlaenge
+TEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,schuleneingangsmaske=
+"mu liste einfach eingang",schulenanfpos=2;#LET dnrschulen=120,fnrschkennung=
+121,fnrschname=122,fnrschart=123,fnrschamtlnr=127,fnrschbundesland=128,
+fnrschstrnr=124,fnrschplzort=125,fnrschtelnr=126;#INT CONST spalte3bildbreite
+:=bildbreite-anzspaltentrenner-spalte1breite-spalte2breite-spalte4breite;INT
+VAR spalte3druckbreite,spalte3breite,druckzeilenzahl,bildanf,eingabestatus;
+TEXT VAR schulenueberschrift,schulkennung,schulart,amtlschulkennnr,schulname,
+schulstrnr,schulnat,schulplz,schulort,schulland,schultelnr,anfbuchstabe,
+neueranfbuchstabe;TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite*
+mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL PROC multistop:
+TRUE ENDPROC multistop;BOOL PROC multistopsim:setzebestandende(FALSE );TRUE
+ENDPROC multistopsim;PROC schulenspezielleteile(INT CONST nr):SELECT nrOF
+CASE 1:schulendialogvorbereitenCASE 2:schuleneingabenrichtigCASE 3:
+schulenlistenvorbereitenCASE 4:schulendruckvorbereitenCASE 5:
+schulenseitedruckenCASE 6:schulenbildschirmvorbereitenCASE 7:
+schulenseitezeigenENDSELECT .END PROC schulenspezielleteile;PROC
+schulendialogvorbereiten:schulenueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(schuleneingangsmaske,schulenanfpos).END PROC
+schulendialogvorbereiten;PROC schuleneingabenrichtig:LET fnrausgdrucker=2,
+fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,0,niltext,
+eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest
+(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);
+setzeeingabetest(TRUE )END IF .END PROC schuleneingabenrichtig;PROC
+schulenlistenvorbereiten:BOOL VAR b;inittupel(dnrschulen);initobli(3);
+reinitparsing;setzeidentiwert("");objektlistestarten(dnrschulen,"",
+fnrschkennung,TRUE ,b);setzebestandende(b)END PROC schulenlistenvorbereiten;
+PROC schulenbildschirmvorbereiten:LET fnrausganf=2;
+standardkopfmaskeaktualisieren(schulenueberschrift);initspalten;spalte3breite
+:=spalte3bildbreite;ausgfeld(5):=bildbreite*blank;setzespaltenbreiten;
+initausgabekopf(bildstrich);bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO
+ausgkopflaengeREPEAT ausgkopf(i)IN bildanf;bildanfINCR 1END REPEAT ;
+setzebildanfangsposition(bildanf).END PROC schulenbildschirmvorbereiten;PROC
+schulenseitezeigen:blaettern(PROC (INT CONST )schulezeigen,aktion,TRUE ,
+FALSE ,BOOL PROC multistop);END PROC schulenseitezeigen;PROC schulezeigen(
+INT CONST dummy):schuleholen;schuleaufbereiten;schuleaufbildschirm.END PROC
+schulezeigen;PROC schuleaufbildschirm:INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsEND
+REPEAT .END PROC schuleaufbildschirm;PROC schulendruckvorbereiten:
+anfbuchstabe:=niltext;druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf
+(zentriert(schulenueberschrift,druckbreite));initspalten;spalte3breite:=
+spalte3druckbreite;ausgfeld(5):=druckbreite*blank;setzespaltenbreiten;
+initausgabekopf(druckstrich);inittupel(dnrschulen);setzebestandende(FALSE );
+lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL
+PROC multistopsim).variablenfuerdrucksetzen:druckstrich:=druckbreite*
+mittestrich;spalte3druckbreite:=druckbreite-anzspaltentrenner-spalte1breite-
+spalte2breite-spalte4breite;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen
+)-ausgkopflaenge.END PROC schulendruckvorbereiten;PROC schulenseitedrucken:
+schulenueberschriftdrucken;seitedrucken(PROC (INT VAR )schuledrucken,
+druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END
+PROC schulenseitedrucken;PROC schulenueberschriftdrucken:druckkopfschreiben;
+INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i
+))END REPEAT .END PROC schulenueberschriftdrucken;PROC schuledrucken(INT VAR
+zeilenzaehler):LET druckmeldung=101,markiert="#";schuleholen;
+ggfmeldunganfbuchstabe;schuleaufbereiten;zeilenzaehlerINCR ausgfeldlaenge;
+schuleindruckdatei.ggfmeldunganfbuchstabe:IF anfangsbuchstabegeaendertTHEN
+meldunganfbuchstabeEND IF .anfangsbuchstabegeaendert:neueranfbuchstabe:=
+schulkennungSUB 1;anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe:
+standardmeldung(druckmeldung,neueranfbuchstabe+markiert);anfbuchstabe:=
+neueranfbuchstabe.END PROC schuledrucken;PROC schuleindruckdatei:INT VAR i;
+FOR iFROM 1UPTO ausgfeldlaengeREPEAT druckzeileschreiben(ausgfeld(i))END
+REPEAT .END PROC schuleindruckdatei;PROC setzespaltenbreiten:
+setzespaltenbreite(spalte1breite);setzespaltenbreite(spalte2breite);
+setzespaltenbreite(spalte3breite);setzespaltenbreite(spalte4breite);END PROC
+setzespaltenbreiten;PROC initausgabekopf(TEXT CONST strich):LET kennung=
+"Kennung",art="Schulart",name="Name",amtlnr="amtl. Nr.",adresse="Adresse",
+telnr="Telefon";spaltenweise(kennung);spaltenweise(art);spaltenweise(name);
+spaltenweise(blank);ausgkopf(1):=zeile;spaltenweise(blank);spaltenweise(
+amtlnr);spaltenweise(adresse);spaltenweise(telnr);ausgkopf(2):=zeile;ausgkopf
+(3):=strich.END PROC initausgabekopf;PROC schuleholen:schulkennung:=wert(
+fnrschkennung);schulname:=wert(fnrschname);schulart:=wert(fnrschart);
+amtlschulkennnr:=wert(fnrschamtlnr);schulland:=wert(fnrschbundesland);
+schulstrnr:=wert(fnrschstrnr);schulort:=wert(fnrschplzort);schultelnr:=wert(
+fnrschtelnr).END PROC schuleholen;PROC schuleaufbereiten:LET deutsch="D";
+schreibekennungartname;schreibeamtlnrstrtelnr;schreibeortland.
+schreibekennungartname:spaltenweise(schulkennung);spaltenweise(schulart);
+spaltenweise(schulname);spaltenweise(blank);ausgfeld(1):=zeile.
+schreibeamtlnrstrtelnr:spaltenweise(blank);spaltenweise(amtlschulkennnr);
+spaltenweise(schulstrnr);spaltenweise(schultelnr);ausgfeld(2):=zeile.
+schreibeortland:spaltenweise(blank);spaltenweise(blank);spaltenweise(schulort
+);spaltenweise(blank);ausgfeld(3):=zeile;spaltenweise(blank);spaltenweise(
+blank);spaltenweise(schulland);spaltenweise(blank);ausgfeld(4):=zeile.END
+PROC schuleaufbereiten;END PACKET schulenlisten;
+
diff --git a/app/schulis/2.2.1/src/0.listen.steuerung b/app/schulis/2.2.1/src/0.listen.steuerung
new file mode 100644
index 0000000..bafd51b
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.steuerung
@@ -0,0 +1,67 @@
+PACKET listensteuerungDEFINES eingangsmaskezeigenundparameterlesen,
+listedruckenoderzeigenggflweitereaktionlesen,weitereaktionlesen,
+aufbildschirmblaettern,druckbearbeitung,setzeanfangswerte,setzeausgabedrucker
+,ausgabedrucker,setzeeingabetest,setzebildanfangsposition,ausgabepos,
+erhoeheausgabeposumeins,seitenzaehler,erhoeheseitenzaehlerumeins,aktion,
+bildbreite,bildlaenge:LET namebildausgabemaske="mu liste bildausgabe",
+datenexistierennicht=59,warteaufforderung=69,listewirdgedruckt=58,
+zurnachprozedur=1,niltext="",blank=" ";INT VAR bildanfangsposition,
+aktuelleposition,zeiger,richtung,seite;TEXT VAR nameauswahlmaske;BOOL VAR
+eingabenrichtig,ausgdrucker;TEXT CONST leerzeilebild:=bildbreite*blank;PROC
+eingangsmaskezeigenundparameterlesen(PROC (INT CONST )spezielleteile):
+enablestop;dialogvorbereiten;dialogstarten.dialogvorbereiten:spezielleteile(1
+);standardstartproc(nameauswahlmaske).dialogstarten:infeld(aktuelleposition);
+standardnproc.END PROC eingangsmaskezeigenundparameterlesen;PROC
+listedruckenoderzeigenggflweitereaktionlesen(PROC (INT CONST )spezielleteile)
+:eingabenueberpruefen;IF eingabenrichtigTHEN werteauswahlausundgibausELSE
+wiederholeauswahlFI .eingabenueberpruefen:spezielleteile(2).
+werteauswahlausundgibaus:meldewarten;vorbereitungenliste;IF bestandendeTHEN
+meldekeinbestand;zurueckzumdialogELIF ausgdruckerTHEN druckbearbeitung(
+zurnachprozedur,PROC spezielleteile)ELSE
+bildschirmvorbereitenundersteseitezeigen(PROC spezielleteile)FI .
+vorbereitungenliste:spezielleteile(3).meldewarten:standardmeldung(
+warteaufforderung,niltext).meldekeinbestand:standardmeldung(
+datenexistierennicht,niltext).wiederholeauswahl:zurueckzumdialog.
+zurueckzumdialog:return(1).END PROC
+listedruckenoderzeigenggflweitereaktionlesen;PROC druckbearbeitung(INT CONST
+ruecksprung,PROC (INT CONST )spezielleteile):IF NOT (ruecksprung=
+zurnachprozedur)THEN setzeausgabedrucker(TRUE )FI ;seite:=1;
+ausgebenaufdrucker(PROC spezielleteile);zurueckzumdialog.zurueckzumdialog:IF
+ruecksprung=zurnachprozedurTHEN return(ruecksprung)ELSE enter(ruecksprung)FI
+.END PROC druckbearbeitung;PROC ausgebenaufdrucker(PROC (INT CONST )
+spezielleteile):setzemitseitennummern(TRUE );druckvorbereiten;druckeeineseite
+;WHILE NOT bestandendeREP nimmnaechsteseite;druckeeineseitePER ;
+meldelistewirdgedruckt;drucknachbereiten.druckvorbereiten:spezielleteile(4).
+druckeeineseite:spezielleteile(5).nimmnaechsteseite:seiteINCR 1.
+meldelistewirdgedruckt:standardmeldung(listewirdgedruckt,niltext).END PROC
+ausgebenaufdrucker;PROC bildschirmvorbereitenundersteseitezeigen(PROC (INT
+CONST )spezielleteile):standardstartproc(namebildausgabemaske);spezielleteile
+(6);richtung:=#1;#3;seitezeigen(PROC spezielleteile);dialogstarten.
+dialogstarten:weitereaktionlesen.END PROC
+bildschirmvorbereitenundersteseitezeigen;PROC weitereaktionlesen:maskendialog
+.maskendialog:aktuelleposition:=21;infeld(aktuelleposition);standardnproc.
+END PROC weitereaktionlesen;PROC aufbildschirmblaettern(INT CONST was,PROC (
+INT CONST )spezielleteile):richtung:=was;standardkopfmaskeaktualisieren;
+seitezeigen(PROC spezielleteile);zurueckzumdialog.zurueckzumdialog:return(1).
+END PROC aufbildschirmblaettern;PROC setzeanfangswerte(TEXT CONST
+eingangsmaske,INT CONST anfpos):nameauswahlmaske:=eingangsmaske;
+aktuelleposition:=anfpos;END PROC setzeanfangswerte;PROC seitezeigen(PROC (
+INT CONST )spezielleteile):LET fnrausgende=20;aktuelleposition:=
+bildanfangsposition;spezielleteile(7);ggfrestbildloeschen.ggfrestbildloeschen
+:IF neuesbildangefangenTHEN restbildloeschenFI .neuesbildangefangen:
+aktuelleposition>bildanfangsposition.restbildloeschen:FOR zeigerFROM
+aktuellepositionUPTO fnrausgendeREP leerzeilebildIN zeigerPER .END PROC
+seitezeigen;PROC setzeausgabedrucker(BOOL CONST b):ausgdrucker:=bEND PROC
+setzeausgabedrucker;BOOL PROC ausgabedrucker:ausgdruckerEND PROC
+ausgabedrucker;PROC setzeeingabetest(BOOL CONST b):eingabenrichtig:=bEND
+PROC setzeeingabetest;PROC setzebildanfangsposition(INT CONST anfangsposition
+):bildanfangsposition:=anfangspositionEND PROC setzebildanfangsposition;INT
+PROC ausgabepos:aktuellepositionEND PROC ausgabepos;PROC
+erhoeheausgabeposumeins:aktuellepositionINCR 1END PROC
+erhoeheausgabeposumeins;INT PROC seitenzaehler:seiteEND PROC seitenzaehler;
+PROC erhoeheseitenzaehlerumeins:seiteINCR 1END PROC
+erhoeheseitenzaehlerumeins;INT PROC aktion:richtungEND PROC aktion;LET
+bildzeilenbreite=78,bildseitenlaenge=23,bildkopflaenge=4;INT CONST bildbreite
+:=bildzeilenbreite,bildlaenge:=bildseitenlaenge-bildkopflaenge;END PACKET
+listensteuerung;
+
diff --git a/app/schulis/2.2.1/src/0.listen.werkzeuge b/app/schulis/2.2.1/src/0.listen.werkzeuge
new file mode 100644
index 0000000..011db81
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listen.werkzeuge
@@ -0,0 +1,29 @@
+PACKET listenwerkzeugeDEFINES initspalten,setzespaltenbreite,
+setzespaltentrenner,spaltenweise,zeile,geblockt,zentriert,zweistellig,
+vergleichsdatum:LET maxanzspalten=20,null=0,blank=" ",niltext=""#,andenanfang
+=1,ansende=2,vorwaerts=3,rueckwaerts=4,naechstenlesen=1;#;TEXT VAR
+zwischenpuffer,spaltentrenner;INT VAR aktspalte,aktmaxanzspalten;ROW
+maxanzspaltenINT VAR spaltenbreite;PROC initspalten:INT VAR i;FOR iFROM 1
+UPTO maxanzspaltenREP spaltenbreite(i):=nullPER ;aktmaxanzspalten:=null;
+aktspalte:=1;zwischenpuffer:=niltext;spaltentrenner:=blank;END PROC
+initspalten;PROC setzespaltenbreite(INT CONST breite):aktmaxanzspaltenINCR 1;
+IF aktmaxanzspalten<=maxanzspaltenTHEN spaltenbreite(aktmaxanzspalten):=
+breiteFI ;END PROC setzespaltenbreite;PROC setzespaltentrenner(TEXT CONST
+trenner):spaltentrenner:=trennerEND PROC setzespaltentrenner;PROC
+spaltenweise(TEXT CONST t):IF aktspalte>aktmaxanzspaltenTHEN aktspalte:=1;
+zwischenpuffer:=niltextFI ;zwischenpuffer:=zwischenpuffer+text(t,
+spaltenbreite(aktspalte));IF aktspalte<aktmaxanzspaltenTHEN zwischenpuffer:=
+zwischenpuffer+spaltentrennerFI ;aktspalteINCR 1END PROC spaltenweise;TEXT
+PROC zeile:zwischenpufferEND PROC zeile;TEXT PROC geblockt(TEXT CONST links,
+rechts,INT CONST breite):links+blanks+rechts.blanks:(breite-length(links)-
+length(rechts))*blank.END PROC geblockt;TEXT PROC zentriert(TEXT CONST text,
+INT CONST breite):INT CONST blankanzahl:=breite-length(text);TEXT CONST
+blanks:=blankausgleich;IF blankanzahlgeradeTHEN blanks+text+blanksELSE blanks
++text+blanks+blankFI .blankausgleich:(blankanzahlDIV 2)*blank.
+blankanzahlgerade:blankanzahlMOD 2=0.END PROC zentriert;TEXT PROC zweistellig
+(TEXT CONST jahrgang):TEXT VAR puffer;puffer:=text(null)+jahrgang;subtext(
+puffer,length(puffer)-1).END PROC zweistellig;INT PROC vergleichsdatum(INT
+CONST jahre):INT VAR hilfe;hilfe:=int(subtext(date,7,8));hilfeDECR jahre;
+datum(subtext(date,1,6)+text(hilfe)).END PROC vergleichsdatum;END PACKET
+listenwerkzeuge;
+
diff --git a/app/schulis/2.2.1/src/0.listenweise grundfunktionen b/app/schulis/2.2.1/src/0.listenweise grundfunktionen
new file mode 100644
index 0000000..7b7d32c
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listenweise grundfunktionen
@@ -0,0 +1,51 @@
+PACKET listenweisegrundfunktionenDEFINES holevergleichssg,istzulaessigesg,
+sgeinerjgst,initgruppenwechsel,gruppenwechsel,eingangsbehandlunglistenweise,
+startebildschirmblock,bildschirmblock:LET blank=" ",niltext="";LET maxgw=10;
+LET bestandtrenner="/";LET schuljahrkey="Schuljahr",schulhalbjahrkey=
+"Schulhalbjahr",halbjahr1="1",halbjahr2="2";BOOL VAR nichtzuende,starten,sek2
+;INT VAR bestand;INT VAR schuelerzahl;ROW maxgwTEXT VAR gw;TEXT VAR
+aktuelleschuelergruppen;TEXT VAR vergljgst,letztejgst;TEXT VAR schuljahr,
+schulhalbjahr;PROC holevergleichssg(TEXT CONST jgst,BOOL CONST aktuell):
+schuljahr:=schulkenndatum(schuljahrkey);schulhalbjahr:=schulkenndatum(
+schulhalbjahrkey);aktuelleschuelergruppen:=niltext;vergljgst:=jgst;inittupel(
+dnraktschuelergruppen);setzerichtigeschulkenndaten;IF jgst<>niltextTHEN
+statleseschleife(dnraktschuelergruppen,jgst,niltext,fnrsgrpjgst,
+fnrsgrpkennung,PROC pruefesg)ELSE sek2:=FALSE ;letztejgst:=niltext;
+statleseschleife(dnraktschuelergruppen,jgst,niltext,fnrsgrpjgst,
+fnrsgrpkennung,PROC allesg)FI ;.setzerichtigeschulkenndaten:IF NOT aktuell
+THEN IF schulhalbjahr=halbjahr1THEN schulhalbjahr:=halbjahr2ELSE schuljahr:=
+subtext(schuljahr,3,4);schuljahrCAT text(int(schuljahr)+1);schulhalbjahr:=
+halbjahr1FI ;FI ;putwert(fnrsgrpsj,schuljahr);putwert(fnrsgrphj,schulhalbjahr
+);.END PROC holevergleichssg;BOOL PROC istzulaessigesg(TEXT CONST sg):pos(
+aktuelleschuelergruppen,sg)>0END PROC istzulaessigesg;TEXT PROC sgeinerjgst:
+aktuelleschuelergruppenEND PROC sgeinerjgst;PROC pruefesg(BOOL VAR schluss):
+TEXT CONST sg:=jgstaufber(wert(fnrsgrpjgst))+wert(fnrsgrpkennung);IF dbstatus
+=0CAND subtext(sg,1,2)=vergljgstTHEN neueaktuelleschuelergruppe(sg)ELSE
+schluss:=TRUE FI .END PROC pruefesg;PROC allesg(BOOL VAR schluss):IF dbstatus
+<>0OR wert(fnrsgrpsj)<>schuljahrOR wert(fnrsgrphj)<>schulhalbjahrTHEN schluss
+:=TRUE ELSE TEXT CONST sg:=jgstaufber(wert(fnrsgrpjgst))+wert(fnrsgrpkennung)
+;neueaktuelleschuelergruppe(sg)FI END PROC allesg;PROC
+neueaktuelleschuelergruppe(TEXT CONST sg):IF aktuelleschuelergruppen=niltext
+THEN anhaengenELSE trennen;anhaengenFI .anhaengen:aktuelleschuelergruppenCAT
+sg;.trennen:aktuelleschuelergruppenCAT bestandtrenner.END PROC
+neueaktuelleschuelergruppe;PROC initgruppenwechsel:INT VAR i;FOR iFROM 1UPTO
+maxgwREP gw(i):=niltextPER .END PROC initgruppenwechsel;PROC gruppenwechsel(
+TEXT CONST gwneu,INT CONST gwalt,INT CONST laenge,incr,INT VAR aktuellesfeld)
+:IF gruppenwechselliegtvorTHEN gruppenwechselzeigenELSE leeresfeldFI ;
+weiterzaehlen.gruppenwechselliegtvor:(schuelerzahl=1)COR (gw(gwalt)<>gwneu).
+gruppenwechselzeigen:standardmaskenfeld(text(gwneu,laenge),aktuellesfeld);gw(
+gwalt):=gwneu.leeresfeld:standardmaskenfeld(laenge*blank,aktuellesfeld).
+weiterzaehlen:aktuellesfeldINCR incr.END PROC gruppenwechsel;PROC
+eingangsbehandlunglistenweise:standardvproc(maske(vergleichsknoten))END PROC
+eingangsbehandlunglistenweise;PROC startebildschirmblock(INT CONST best,sz):
+nichtzuende:=TRUE ;bestand:=best;starten:=TRUE ;schuelerzahl:=sz.END PROC
+startebildschirmblock;PROC bildschirmblock(PROC schuelerzeigen,BOOL PROC (
+INT CONST )pruefungspeziell,INT CONST was):INT VAR lv,anzahl;IF startenTHEN
+erstenzeigen;neuerblock;erhoehezaehlerELSE neuerblockFI .erstenzeigen:
+schuelerzeigen;changeindex.erhoehezaehler:schuelerzahlINCR 1.neuerblock:
+anzahl:=schuelerzahl;starten:=FALSE ;IF nichtzuendeTHEN multisucc(bestand,
+anzahl);FOR lvFROM 1UPTO anzahlREP schuelerlesen;nichtzuende:=
+pruefungspeziell(was);IF nichtzuendeTHEN schuelerzeigenELSE LEAVE neuerblock
+FI PER ;nichtzuende:=anzahl=schuelerzahlFI ;.schuelerlesen:stackentry(lv).
+END PROC bildschirmblock;END PACKET listenweisegrundfunktionen;
+
diff --git a/app/schulis/2.2.1/src/0.listenweise klassen erf b/app/schulis/2.2.1/src/0.listenweise klassen erf
new file mode 100644
index 0000000..9b3c02e
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.listenweise klassen erf
@@ -0,0 +1,215 @@
+PACKET listenweiseklassenerfDEFINES neueinfuegenklassen,entfernenklassen,
+bearbeitungklassen,klassennichtspeichern,klassenspeichern:LET tofather=1,
+tograndfather=2,niltext="",blank=" ",null=0,trenner="/",meldtrenner="#";LET
+standardanfang=1,standardeinstieg=4;LET jgst5=5,jgst13=13,erstejgst="05";LET
+erstesfeld=3,felderprozeile=4,klassenproseite=18;LET meldbestleer=59,
+meldnichtspeichern=63,meldplausi=57,meldwertzulang=60,meldwarten=69,
+meldspeicherung=132,meldspeicherfehler=131,meldfalscheauswahl=56,
+meldfortschreibung=140,meldkeinelehrer=141,meldfalscherlehrer=142,meldschonda
+=143,meldnichtleer=144,meldnichtda=134,meldloeschung=145;LET maxlaengekennung
+=4,maxlaengeintegabez=4;LET pruefartalternative=5,pruefartgrenzen=3;LET
+fnrjgst=4,fnrakt=3,fnrgepl=2,fnrfort2=5,fnrfortneu=6;LET keysj="Schuljahr",
+keyshj="Schulhalbjahr";LET wertaktuell="aktuell",wertgeplant="geplant";LET
+paraphentrenner=" ";LET vaaendern=1,vaneu=2,valoeschen=3;LET hj1="1",hj2="2";
+BOOL VAR nochwelcheda,akthalbjahr,fortschreibungzweiteshalbjahr,
+fortschreibungneuesschuljahr,fortschreibung;INT VAR klassenzahl,aktuellesfeld
+,pruefstatus,verarbeitungsart;ROW klassenproseiteTEXT VAR kennung;ROW
+klassenproseiteTEXT VAR altedaten;TEXT VAR neuesschuljahr,neueshalbjahr,
+vergleichsjgst,lehrerparaphen:=niltext,schuljahr:=niltext,halbjahr:=niltext;
+PROC eingangsbildschirmpruefen(BOOL CONST neu):reinitparsing;
+ankreuzfelderpruefen;IF eingangsbildschirmokTHEN jgstpruefen;IF
+eingangsbildschirmokTHEN fortschreibungpruefenFI FI .ankreuzfelderpruefen:
+standardpruefe(pruefartalternative,fnrgepl,fnrakt,null,niltext,pruefstatus).
+jgstpruefen:akthalbjahr:=standardmaskenfeld(fnrakt)<>niltext;standardpruefe(
+pruefartgrenzen,fnrjgst,jgst5,jgst13,niltext,pruefstatus);.
+fortschreibungpruefen:vergleichsjgst:=jgstaufber(standardmaskenfeld(fnrjgst))
+;fortschreibungzweiteshalbjahr:=standardmaskenfeld(fnrfort2)<>niltext;
+fortschreibungneuesschuljahr:=standardmaskenfeld(fnrfortneu)<>niltext;
+fortschreibung:=(fortschreibungzweiteshalbjahrCOR
+fortschreibungneuesschuljahr);IF (fortschreibungzweiteshalbjahrCAND
+fortschreibungneuesschuljahr)THEN pruefstatus:=fnrfort2ELIF (fortschreibung
+CAND akthalbjahr)THEN pruefstatus:=fnraktELIF (fortschreibungCAND (NOT neu))
+THEN pruefstatus:=meldfortschreibungELIF ((NOT akthalbjahr)CAND (
+vergleichsjgst=erstejgst))CAND fortschreibungneuesschuljahrTHEN pruefstatus:=
+fnrjgstFI ;IF pruefstatus=meldfortschreibungTHEN standardmeldung(pruefstatus,
+niltext);pruefstatus:=fnrjgstELIF pruefstatus<>nullTHEN standardmeldung(
+meldfalscheauswahl,niltext)FI .eingangsbildschirmok:pruefstatus=0.END PROC
+eingangsbildschirmpruefen;PROC neueinfuegenklassen:verarbeitungsart:=vaneu;
+eingangsbehandlungEND PROC neueinfuegenklassen;PROC entfernenklassen:
+verarbeitungsart:=valoeschen;eingangsbehandlungEND PROC entfernenklassen;
+PROC bearbeitungklassen:verarbeitungsart:=vaaendern;eingangsbehandlungEND
+PROC bearbeitungklassen;PROC eingangsbehandlung:BOOL CONST neueklassen:=(
+verarbeitungsart=vaneu);eingangsbildschirmpruefen(neueklassen);IF
+eingangsbildschirmokTHEN neuesschuljahrhalbjahrerrechnen;
+initialisierungenvornehmen;blocklesenundausgeben;IF keinemehrdaTHEN
+bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE
+eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmok:pruefstatus=0.
+initialisierungenvornehmen:bestandsetzen;plausipruefungvorbereiten;
+standardstartproc(maske(vergleichsknoten)).bestandsetzen:infeld(fnrjgst);IF
+verarbeitungsart=vaaendernTHEN pruefebestandELSE nochwelcheda:=trueFI .
+pruefebestand:inittupel(dnraktschuelergruppen);klassengrunddateninpuffer;
+search(dnraktschuelergruppen,FALSE );IF keineklassezudieserjgstTHEN
+bestandleermelden;return(tofather);LEAVE eingangsbehandlungELSE nochwelcheda
+:=trueFI .keineklassezudieserjgst:(dbstatus<>null)COR ((jgstaufber(wert(
+fnrsgrpjgst))<>vergleichsjgst)COR (wert(fnrsgrpsj)<>neuesschuljahr)COR (wert(
+fnrsgrphj)<>neueshalbjahr)).plausipruefungvorbereiten:standardmeldung(
+meldwarten,niltext);.keinemehrda:NOT nochwelcheda.bestandleermelden:
+standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:infeld(pruefstatus
+).END PROC eingangsbehandlung;PROC klassennichtspeichern:nichtspeichernmelden
+;neuerblock.nichtspeichernmelden:standardmeldung(meldnichtspeichern,niltext);
+pause(10).END PROC klassennichtspeichern;PROC klassenspeichern:SELECT
+verarbeitungsartOF CASE vaaendern:aenderungenspeichernCASE vaneu:
+neueklassenspeichernCASE valoeschen:klassenloeschenEND SELECT .
+aenderungenspeichern:speicherungdurchfuehren(PROC (BOOL VAR )
+pruefeaenderungsplausi,false,true,false).neueklassenspeichern:
+speicherungdurchfuehren(PROC (BOOL VAR )pruefeneuplausi,true,false,false).
+klassenloeschen:speicherungdurchfuehren(PROC (BOOL VAR )pruefeloeschplausi,
+false,false,true).END PROC klassenspeichern;PROC pruefeloeschplausi(BOOL VAR
+dateninordnung):INT VAR satzindex:=erstesfeld,plausind;FOR plausindFROM 1
+UPTO klassenzahlREP pruefezeile;IF NOT dateninordnungTHEN fehlermeldung;
+LEAVE pruefeloeschplausiFI ;satzindexINCR felderprozeilePER .pruefezeile:IF
+standardmaskenfeld(satzindex)<>niltextTHEN dateninordnung:=
+schuelergruppevorhandenFI .schuelergruppevorhanden:klassengrunddateninpuffer;
+putwert(fnrsgrpkennung,standardmaskenfeld(satzindex));search(
+dnraktschuelergruppen,TRUE );aktuellesfeld:=satzindex;(dbstatus=null).
+fehlermeldung:IF (akthalbjahr)CAND (dbstatus=null)THEN TEXT VAR pruefsg:=
+vergleichsjgst+standardmaskenfeld(satzindex);standardmeldung(meldnichtleer,
+pruefsg+meldtrenner)ELSE standardmeldung(meldnichtda,standardmaskenfeld(
+satzindex)+meldtrenner)FI .END PROC pruefeloeschplausi;PROC pruefeneuplausi(
+BOOL VAR dateninordnung):BOOL VAR parapheninordnung;INT VAR satzindex:=
+erstesfeld,plausind;IF lehrerparaphen=niltextTHEN holeallelehrerparaphenFI ;
+FOR plausindFROM 1UPTO klassenzahlREP IF standardmaskenfeld(satzindex)<>
+niltextTHEN IF length(standardmaskenfeld(satzindex))>maxlaengekennungTHEN
+dateninordnung:=FALSE ;standardmeldung(meldwertzulang,meldtrenner);
+aktuellesfeld:=satzindex;LEAVE pruefeneuplausiELIF length(standardmaskenfeld(
+satzindex+3))>maxlaengeintegabezTHEN dateninordnung:=FALSE ;standardmeldung(
+meldwertzulang,meldtrenner);aktuellesfeld:=satzindex+3;LEAVE pruefeneuplausi
+ELSE parapheninordnung:=korrekteparaphe(satzindex+1)CAND korrekteparaphe(
+satzindex+2);dateninordnung:=parapheninordnungCAND schuelergruppenochnichtda;
+IF NOT dateninordnungTHEN fehlermeldung;LEAVE pruefeneuplausiFI FI FI ;
+satzindexINCR felderprozeilePER .schuelergruppenochnichtda:TEXT VAR pruefsg:=
+vergleichsjgst+standardmaskenfeld(satzindex);klassengrunddateninpuffer;
+putwert(fnrsgrpkennung,standardmaskenfeld(satzindex));search(
+dnraktschuelergruppen,TRUE );aktuellesfeld:=satzindex;(dbstatus<>null).
+fehlermeldung:IF NOT parapheninordnungTHEN IF lehrerparaphen=paraphentrenner
+THEN standardmeldung(meldkeinelehrer,niltext)ELSE standardmeldung(
+meldfalscherlehrer,standardmaskenfeld(aktuellesfeld)+meldtrenner)FI ELSE
+standardmeldung(meldschonda,pruefsg+meldtrenner)FI .END PROC pruefeneuplausi;
+PROC pruefeaenderungsplausi(BOOL VAR dateninordnung):INT VAR satzindex:=
+erstesfeld,plausind;IF lehrerparaphen=niltextTHEN holeallelehrerparaphenFI ;
+FOR plausindFROM 1UPTO klassenzahlREP IF length(standardmaskenfeld(satzindex)
+)>maxlaengekennungTHEN dateninordnung:=FALSE ;standardmeldung(meldwertzulang,
+meldtrenner);aktuellesfeld:=satzindex;LEAVE pruefeaenderungsplausiELIF length
+(standardmaskenfeld(satzindex+3))>maxlaengeintegabezTHEN dateninordnung:=
+FALSE ;standardmeldung(meldwertzulang,meldtrenner);aktuellesfeld:=satzindex+3
+;LEAVE pruefeaenderungsplausiELSE dateninordnung:=korrekteparaphe(satzindex+1
+)CAND korrekteparaphe(satzindex+2);IF NOT dateninordnungTHEN fehlermeldung;
+LEAVE pruefeaenderungsplausiFI ;FI ;satzindexINCR felderprozeilePER .
+fehlermeldung:IF lehrerparaphen=paraphentrennerTHEN standardmeldung(
+meldkeinelehrer,niltext)ELSE standardmeldung(meldfalscherlehrer,
+standardmaskenfeld(aktuellesfeld)+meldtrenner)FI .END PROC
+pruefeaenderungsplausi;PROC speicherungdurchfuehren(PROC (BOOL VAR )plausi,
+BOOL CONST neu,aendern,loeschen):pruefeplausibilitaet;IF dateninordnungTHEN
+speicherntransaktion;neuerblockELSE eingabefehler;return(tofather)FI ;.
+pruefeplausibilitaet:BOOL VAR dateninordnung:=true;standardmeldung(meldplausi
+,niltext);plausi(dateninordnung).speicherntransaktion:BOOL VAR
+transaktionsfehler:=false;BOOL VAR aenderungsvermerkzusetzen:=FALSE ;
+aendernschleife;IF aenderungsvermerkzusetzenTHEN IF akthalbjahrTHEN
+aenderungsvermerksetzen(wertaktuell)ELSE aenderungsvermerksetzen(wertgeplant)
+FI ELSE pause(10)FI .aendernschleife:INT VAR suind;INT VAR zahlderaenderungen
+:=null;INT VAR satzindex:=erstesfeld;FOR suindFROM 1UPTO klassenzahlREP
+behandleklassensatz;satzindexINCR felderprozeilePER .behandleklassensatz:IF
+datenveraendertTHEN fuehreaenderungaus;aenderungsvermerkzusetzen:=TRUE ;
+meldevollzugFI .datenveraendert:((NOT aendern)CAND (standardmaskenfeld(
+satzindex)<>niltext))COR (aendernCAND (altedaten(suind)<>(standardmaskenfeld(
+satzindex+1)+trenner+standardmaskenfeld(satzindex+2)+trenner+
+standardmaskenfeld(satzindex+3)))).fuehreaenderungaus:lesenvorbereiten;lesen;
+zurueckschreiben.lesenvorbereiten:zahlderaenderungenINCR 1;
+klassengrunddateninpuffer;putwert(fnrsgrpkennung,standardmaskenfeld(satzindex
+)).lesen:IF NOT neuTHEN search(dnraktschuelergruppen,TRUE );
+transaktionsfehler:=(dbstatus<>null)FI .zurueckschreiben:IF NOT
+transaktionsfehlerTHEN saveupdateposition(dnraktschuelergruppen);IF NOT
+loeschenTHEN putwert(fnrsgrplehrer,standardmaskenfeld(satzindex+1));putwert(
+fnrsgrpstellvlehrer,standardmaskenfeld(satzindex+2));bereiteintegabezauf;
+putwert(fnrsgrpintegabez,standardmaskenfeld(satzindex+3));IF aendernTHEN
+selupdate(dnraktschuelergruppen)ELSE insert(dnraktschuelergruppen);#
+wuerfelwarten(vergleichsjgst,dr10.05.88standardmaskenfeld(satzindex))#FI
+ELSE delete(dnraktschuelergruppen);#wuerfelwarten(vergleichsjgst,dr10.05.88
+standardmaskenfeld(satzindex))#FI FI .bereiteintegabezauf:IF
+standardmaskenfeld(satzindex+3)=niltextCAND length(standardmaskenfeld(
+satzindex))<=2THEN standardmaskenfeld(standardmaskenfeld(erstesfeld-1)+
+standardmaskenfeld(satzindex),satzindex+3)FI .meldevollzug:TEXT VAR
+meldungstext;IF dbstatus=nullTHEN meldungstext:=vergleichsjgst+
+standardmaskenfeld(satzindex)+meldtrenner;IF NOT loeschenTHEN standardmeldung
+(meldspeicherung,meldungstext)ELSE standardmeldung(meldloeschung,meldungstext
+)FI ELSE meldungstext:=text(dbstatus)+meldtrenner;meldungstextCAT (
+vergleichsjgst+standardmaskenfeld(satzindex));meldungstextCAT meldtrenner;
+standardmeldung(meldspeicherfehler,meldungstext);return(tofather);LEAVE
+speicherungdurchfuehrenFI ;infeld(satzindex).eingabefehler:infeld(
+aktuellesfeld).END PROC speicherungdurchfuehren;PROC neuerblock:enter(
+tograndfather)END PROC neuerblock;PROC blocklesenundausgeben:SELECT
+verarbeitungsartOF CASE vaaendern:aenderungsblocklesenCASE vaneu:
+blocklesenneuCASE valoeschen:blocklesenloeschenEND SELECT .blocklesenneu:
+neuerbildschirm.blocklesenloeschen:neuerbildschirm;
+paraphenfelderundintegabezsperren.paraphenfelderundintegabezsperren:INT VAR
+sperrfeld:=erstesfeld+1;INT VAR i;FOR iFROM 1UPTO klassenproseiteREP
+feldschutz(sperrfeld);feldschutz(sperrfeld+1);feldschutz(sperrfeld+2);
+sperrfeldINCR felderprozeilePER .END PROC blocklesenundausgeben;PROC
+neuerbildschirm:vorbereiten;gewuenschteszeigen;nachbereiten.vorbereiten:
+standardmaskenfeld(vergleichsjgst,erstesfeld-1);aktuellesfeld:=erstesfeld.
+gewuenschteszeigen:IF fortschreibungTHEN TEXT VAR altejgst:=vergleichsjgst;
+TEXT VAR altesschuljahr:=neuesschuljahr,alteshalbjahr:=neueshalbjahr;
+klassenzahl:=null;IF fortschreibungneuesschuljahrTHEN vergleichsjgst:=
+jgstaufber(text(int(altejgst)-1));FI ;neuesschuljahr:=schulkenndatum(keysj);
+neueshalbjahr:=schulkenndatum(keyshj);klassengrunddateninpuffer;
+statleseschleife(dnraktschuelergruppen,vergleichsjgst,niltext,fnrsgrpjgst,
+fnrsgrpkennung,PROC zeigeklassendaten);vergleichsjgst:=altejgst;
+neuesschuljahr:=altesschuljahr;neueshalbjahr:=alteshalbjahrFI .nachbereiten:
+klassenzahl:=klassenproseite;infeld(standardanfang);standardfelderausgeben;
+infeld(erstesfeld).END PROC neuerbildschirm;PROC aenderungsblocklesen:
+vorbereiten;gewuenschteszeigen;nachbereiten.vorbereiten:standardmeldung(
+meldwarten,niltext);klassenzahl:=null;standardmaskenfeld(vergleichsjgst,
+erstesfeld-1);aktuellesfeld:=erstesfeld.gewuenschteszeigen:
+klassengrunddateninpuffer;statleseschleife(dnraktschuelergruppen,
+vergleichsjgst,niltext,fnrsgrpjgst,fnrsgrpkennung,PROC zeigeklassendaten).
+nachbereiten:restlichezeilenloeschen;infeld(standardanfang);
+standardfelderausgeben;infeld(standardeinstieg).restlichezeilenloeschen:INT
+VAR zeilenzaehler;INT VAR zeilenfeld:=(klassenzahl*felderprozeile)+erstesfeld
+;FOR zeilenzaehlerFROM klassenzahl+1UPTO klassenproseiteREP loeschezeilePER .
+loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP
+standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank,zeilenfeld);
+feldschutz(zeilenfeld);zeilenfeldINCR 1PER ;.END PROC aenderungsblocklesen;
+PROC zeigeklassendaten(BOOL VAR schluss):IF gehoertdazuTHEN klassenzahlINCR 1
+;kennungzeigen;paraphenzeigen;integabezzeigenFI .gehoertdazu:schluss:=(
+jgstaufber(wert(fnrsgrpjgst))<>vergleichsjgst)COR klassenzahl=klassenproseite
+;NOT schluss.kennungzeigen:TEXT CONST zug:=wert(fnrsgrpkennung);kennung(
+klassenzahl):=zug;standardmaskenfeld(zug,aktuellesfeld);IF NOT fortschreibung
+THEN feldschutz(aktuellesfeld);FI ;aktuellesfeldINCR 1.paraphenzeigen:TEXT
+VAR paraphen:=wert(fnrsgrplehrer);TEXT CONST par:=wert(fnrsgrpstellvlehrer);
+standardmaskenfeld(paraphen,aktuellesfeld);feldfrei(aktuellesfeld);
+aktuellesfeldINCR 1;standardmaskenfeld(par,aktuellesfeld);feldfrei(
+aktuellesfeld);aktuellesfeldINCR 1;paraphenCAT (trenner+par);altedaten(
+klassenzahl):=paraphen+trenner+wert(fnrsgrpintegabez).integabezzeigen:
+standardmaskenfeld(wert(fnrsgrpintegabez),aktuellesfeld);feldfrei(
+aktuellesfeld);aktuellesfeldINCR 1.END PROC zeigeklassendaten;PROC
+feldloeschen(INT CONST laenge):standardmaskenfeld(laenge*blank,aktuellesfeld)
+END PROC feldloeschen;PROC holeallelehrerparaphen:lehrerparaphen:=
+paraphentrenner;statleseschleife(dnrlehrer,niltext,niltext,fnrlparaphe,
+fnrlfamname,PROC setzelehrparaphe)END PROC holeallelehrerparaphen;PROC
+neuesschuljahrhalbjahrerrechnen:IF schuljahr=niltextTHEN schuljahr:=
+schulkenndatum(keysj);halbjahr:=schulkenndatum(keyshj)FI ;IF akthalbjahrTHEN
+neuesschuljahr:=schuljahr;neueshalbjahr:=halbjahrELIF halbjahr=hj1THEN
+neuesschuljahr:=schuljahr;neueshalbjahr:=hj2ELSE ersteshalbjahrneuesschuljahr
+FI .ersteshalbjahrneuesschuljahr:neuesschuljahr:=subtext(schuljahr,3,4);
+neuesschuljahrCAT text(int(neuesschuljahr)+1,2);neueshalbjahr:=hj1.END PROC
+neuesschuljahrhalbjahrerrechnen;PROC setzelehrparaphe(BOOL VAR b):
+lehrerparaphenCAT paraphe(wert(fnrlparaphe))END PROC setzelehrparaphe;TEXT
+PROC paraphe(TEXT CONST p):p+paraphentrennerEND PROC paraphe;BOOL PROC
+korrekteparaphe(INT CONST ind):TEXT CONST par:=standardmaskenfeld(ind);INT
+VAR paraphenpos:=pos(lehrerparaphen,paraphentrenner+paraphe(par));
+aktuellesfeld:=ind;(par=niltext)COR (paraphenpos>null)END PROC
+korrekteparaphe;PROC klassengrunddateninpuffer:putwert(fnrsgrpsj,
+neuesschuljahr);putwert(fnrsgrphj,neueshalbjahr);putwert(fnrsgrpjgst,
+vergleichsjgst);END PROC klassengrunddateninpuffer;END PACKET
+listenweiseklassenerf;
+
diff --git a/app/schulis/2.2.1/src/0.raumgruppen bearbeiten b/app/schulis/2.2.1/src/0.raumgruppen bearbeiten
new file mode 100644
index 0000000..b61497b
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.raumgruppen bearbeiten
@@ -0,0 +1,54 @@
+PACKET erfraumgruppenDEFINES erfassungraumgruppen:LET maskenname=
+"ms erf raumgruppen",fnrkennung=2,fnrletztesfeld=17,trenner=" = ",maxraeume=
+15,laengeraumgruppe=4,laengeeinerraumangabe=4;TEXT VAR raeume:="";TEXT VAR
+raum:="";INT VAR anzraeume;TEXT VAR gueltigeraeume:="";LET postrenner="�";
+LET meldnrungueltigerraum=55,meldnrraumgruppezulang=60;LET sachgebietraum=
+"c02 raeume"PROC erfassungraumgruppen(INT CONST proznr):systemdboff;
+reinitparsing;SELECT proznrOF CASE 1:setzeerfassungsparameterCASE 2:
+zeigeraumgruppezurbearbeitungCASE 3:pruefeplausibilitaetCASE 4:
+setzewertefuerdbspeicherungCASE 5:setzeidentiobjektfuerobjektlisteCASE 6:
+raumgruppelesenCASE 7:raumgruppeaendernCASE 8:raumgruppeeinfuegenCASE 9:
+raumgruppeloeschenEND SELECT END PROC erfassungraumgruppen;PROC
+setzeerfassungsparameter:gueltigeraeume:="";setzeerfassungsparameter(
+dnrraumgruppen,maskenname,fnrletztesfeld)END PROC setzeerfassungsparameter;
+PROC zeigeraumgruppezurbearbeitung:setzeerfassungsfeld(wert(fnrrgraumgrp),
+fnrkennung);raeume:=wert(fnrrgraeume);anzraeume:=(length(raeume))DIV
+laengeeinerraumangabe;INT VAR i:=1;WHILE i<=anzraeumeREP raum:=subtext(raeume
+,1,laengeeinerraumangabe);raeume:=subtext(raeume,laengeeinerraumangabe+1);
+setzeerfassungsfeld(compress(raum),i+fnrkennung);iINCR 1PER ;WHILE i<=
+maxraeumeREP setzeerfassungsfeld("",i+fnrkennung);iINCR 1PER ;END PROC
+zeigeraumgruppezurbearbeitung;PROC pruefeplausibilitaet:LET leer="",null=0;
+IF gueltigeraeume=""THEN holealleraeumeingueltigeraeumeFI ;INT VAR
+fehlerstatus;pruefe(1,erfassungsmaske,PROC erfassungswert,fnrkennung,null,
+null,leer,fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus
+);LEAVE pruefeplausibilitaetELIF length(erfassungswert(fnrkennung))>
+laengeraumgruppeTHEN meldeauffaellig(erfassungsmaske,meldnrraumgruppezulang);
+setzefehlerstatus(fnrkennung);LEAVE pruefeplausibilitaetFI ;INT VAR i;FOR i
+FROM 1UPTO maxraeumeREP INT VAR fnrraum:=i+fnrkennung;IF erfassungswert(
+fnrraum)<>""THEN IF ungueltigeraumangabeTHEN setzefehlerstatus(fnrraum);
+meldeauffaellig(erfassungsmaske,meldnrungueltigerraum);LEAVE
+pruefeplausibilitaetFI ;FI ;PER .ungueltigeraumangabe:pos(gueltigeraeume,
+suchwert)=0.suchwert:postrenner+compress(erfassungswert(fnrraum))+postrenner.
+END PROC pruefeplausibilitaet;PROC holealleraeumeingueltigeraeume:
+gueltigeraeume:=postrenner;statleseschleife(dnrschluessel,sachgebietraum,"",
+fnrschlsachgebiet,fnrschlschluessel,PROC raumlesen);END PROC
+holealleraeumeingueltigeraeume;PROC raumlesen(BOOL VAR b):IF dbstatus<>0COR
+wert(fnrschlsachgebiet)>sachgebietraumTHEN b:=TRUE ELSE gueltigeraeumeCAT
+wert(fnrschlschluessel)+postrennerFI END PROC raumlesen;PROC
+setzewertefuerdbspeicherung:putwert(fnrrgraumgrp,erfassungswert(fnrkennung));
+INT VAR i;raeume:="";FOR iFROM fnrkennung+1UPTO fnrletztesfeldREP raum:=
+erfassungswert(i);IF raum<>""THEN raeumeCAT text(raum,laengeeinerraumangabe)
+FI PER ;putwert(fnrrgraeume,raeume)END PROC setzewertefuerdbspeicherung;PROC
+setzeidentiobjektfuerobjektliste:LET trennsymbolfuerobli="$";TEXT VAR
+identizeile;identizeile:=wert(fnrrgraumgrp)+trenner+wert(fnrrgraeume);
+setzeidentiwert(identizeilemitschluesselanhang).
+identizeilemitschluesselanhang:identizeile+trennsymbolfuerobli+wert(
+fnrrgraumgrp).END PROC setzeidentiobjektfuerobjektliste;PROC raumgruppelesen:
+putwert(fnrrgraumgrp,schluessel);search(dnrraumgruppen,TRUE );IF dbstatus=ok
+THEN saveupdateposition(dnrraumgruppen)FI END PROC raumgruppelesen;PROC
+raumgruppeaendern:restoreupdateposition(dnrraumgruppen);update(dnrraumgruppen
+)END PROC raumgruppeaendern;PROC raumgruppeeinfuegen:insert(dnrraumgruppen)
+END PROC raumgruppeeinfuegen;PROC raumgruppeloeschen:delete(dnrraumgruppen)
+END PROC raumgruppeloeschen;TEXT PROC schluessel:erfassungswert(fnrkennung)
+END PROC schluessel;END PACKET erfraumgruppen;
+
diff --git a/app/schulis/2.2.1/src/0.schulis schrifttyp b/app/schulis/2.2.1/src/0.schulis schrifttyp
new file mode 100644
index 0000000..19f6bf8
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.schulis schrifttyp
@@ -0,0 +1,9 @@
+PACKET schulisschrifttypDEFINES schrifttyp,anschreibenschrifttyp,
+mitteilungschrifttyp,setzeschuliszeichensatz:TEXT VAR zeichensatz:="";PROC
+setzeschuliszeichensatz(TEXT CONST font):zeichensatz:=fontEND PROC
+setzeschuliszeichensatz;TEXT PROC schrifttyp:zeichensatzEND PROC schrifttyp;
+TEXT PROC anschreibenschrifttyp:zeichensatzEND PROC anschreibenschrifttyp;
+TEXT PROC mitteilungschrifttyp:zeichensatzEND PROC mitteilungschrifttyp;IF
+fontexists(font(1))THEN zeichensatz:=font(1)ELSE zeichensatz:=""FI .END
+PACKET schulisschrifttyp;
+
diff --git a/app/schulis/2.2.1/src/0.schulkenndaten bearbeiten b/app/schulis/2.2.1/src/0.schulkenndaten bearbeiten
new file mode 100644
index 0000000..d82c587
--- /dev/null
+++ b/app/schulis/2.2.1/src/0.schulkenndaten bearbeiten
@@ -0,0 +1,109 @@
+PACKET schulkenndatenbearbeitenDEFINES schulkenndatenbearbeiten,
+schulkenndatenspeichern:LET maske="ms erf schulkenndaten";LET sachgebiet=
+"c02 schulkenndaten";LET schuljahr="Schuljahr",schulhalbjahr="Schulhalbjahr",
+anfangschulhj="Anfang Schulhalbjahr",endeschulhj="Ende Schulhalbjahr",
+schulname="Schulname",schulleiter="Schulleiter",schulort="Schulort",
+schulstrasse="Schulstraße",schulrufnummer="Schulrufnummer";LET fnrschuljahr=2
+,fnrschulhalbjahr=3,fnranfangschulhj=4,fnrendeschulhj=5,fnrschulname=6,
+fnrschulleiter=7,fnrschulort=8,fnrschulstrasse=9,fnrschulrufnummer=10;LET
+melddatenwerdengespeichert=50,meldfehlendesdatum=52,melddatennichtspeichern=
+63,meldkeinupdatemoeglich=73,meldungueltigesdatum=157,meldungueltigeangabe=
+162;INT VAR ifnr;LET maxfelder=10;ROW maxfelderTEXT VAR alterwert;LET
+laengeschuljahr=4;INT VAR erstesjahr,zweitesjahr;LET zwischenpunkt=".",
+logbucheintrag="Anw. 10.3.1 Änderung an den Schulkenndaten";PROC
+schulkenndatenbearbeiten:standardstartproc(maske);zeigeschulkenndaten;infeld(
+fnrschuljahr);standardnproc.zeigeschulkenndaten:alterwert(fnrschuljahr):=
+schulkenndatum(schuljahr);alterwert(fnrschulhalbjahr):=schulkenndatum(
+schulhalbjahr);alterwert(fnranfangschulhj):=kurzdatum(schulkenndatum(
+anfangschulhj));alterwert(fnrendeschulhj):=kurzdatum(schulkenndatum(
+endeschulhj));alterwert(fnrschulname):=schulkenndatum(schulname);alterwert(
+fnrschulleiter):=schulkenndatum(schulleiter);alterwert(fnrschulort):=
+schulkenndatum(schulort);alterwert(fnrschulstrasse):=schulkenndatum(
+schulstrasse);alterwert(fnrschulrufnummer):=schulkenndatum(schulrufnummer);
+FOR ifnrFROM fnrschuljahrUPTO maxfelderREP standardmaskenfeld(alterwert(ifnr)
+,ifnr)PER ;infeld(fnrschuljahr);standardfelderausgeben.END PROC
+schulkenndatenbearbeiten;PROC schulkenndatenspeichern(BOOL CONST speichern):
+IF NOT speichernTHEN standardmeldung(melddatennichtspeichern,"");pause(10);
+return(2)ELSE INT VAR fehlerstatus:=0;dbstatus(0);pruefeplausibilitaet(
+fehlerstatus);IF fehlerstatus=0THEN datenspeichern;logeintrag(logbucheintrag)
+;IF dbstatus<>0THEN standardmeldung(meldkeinupdatemoeglich,"");return(1)ELSE
+return(2)FI ELSE infeld(fehlerstatus);return(1)FI FI .datenspeichern:
+standardmeldung(melddatenwerdengespeichert,"");IF standardmaskenfeld(
+fnrschuljahr)<>alterwert(fnrschuljahr)THEN putwert(fnrschlsachgebiet,
+sachgebiet);putwert(fnrschlschluessel,schuljahr);search(dnrschluessel,TRUE );
+putwert(fnrschllangtext,standardmaskenfeld(fnrschuljahr));IF dbstatus=0THEN
+update(dnrschluessel);IF dbstatus<>0THEN infeld(fnrschuljahr);LEAVE
+datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld(
+fnrschulhalbjahr)<>alterwert(fnrschulhalbjahr)THEN putwert(fnrschlsachgebiet,
+sachgebiet);putwert(fnrschlschluessel,schulhalbjahr);search(dnrschluessel,
+TRUE );putwert(fnrschllangtext,standardmaskenfeld(fnrschulhalbjahr));IF
+dbstatus=0THEN update(dnrschluessel);IF dbstatus<>0THEN infeld(
+fnrschulhalbjahr);LEAVE datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF
+standardmaskenfeld(fnranfangschulhj)<>alterwert(fnranfangschulhj)THEN putwert
+(fnrschlsachgebiet,sachgebiet);putwert(fnrschlschluessel,anfangschulhj);
+search(dnrschluessel,TRUE );putwert(fnrschllangtext,langdatum(
+standardmaskenfeld(fnranfangschulhj)));IF dbstatus=0THEN update(dnrschluessel
+);IF dbstatus<>0THEN infeld(fnranfangschulhj);LEAVE datenspeichernFI ELSE
+insert(dnrschluessel)FI FI ;IF standardmaskenfeld(fnrendeschulhj)<>alterwert(
+fnrendeschulhj)THEN putwert(fnrschlsachgebiet,sachgebiet);putwert(
+fnrschlschluessel,endeschulhj);search(dnrschluessel,TRUE );putwert(
+fnrschllangtext,langdatum(standardmaskenfeld(fnrendeschulhj)));IF dbstatus=0
+THEN update(dnrschluessel);IF dbstatus<>0THEN infeld(fnrendeschulhj);LEAVE
+datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld(
+fnrschulname)<>alterwert(fnrschulname)THEN putwert(fnrschlsachgebiet,
+sachgebiet);putwert(fnrschlschluessel,schulname);search(dnrschluessel,TRUE );
+putwert(fnrschllangtext,standardmaskenfeld(fnrschulname));IF dbstatus=0THEN
+update(dnrschluessel);IF dbstatus<>0THEN infeld(fnrschulname);LEAVE
+datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld(
+fnrschulleiter)<>alterwert(fnrschulleiter)THEN putwert(fnrschlsachgebiet,
+sachgebiet);putwert(fnrschlschluessel,schulleiter);search(dnrschluessel,TRUE
+);putwert(fnrschllangtext,standardmaskenfeld(fnrschulleiter));IF dbstatus=0
+THEN update(dnrschluessel);IF dbstatus<>0THEN infeld(fnrschulleiter);LEAVE
+datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld(
+fnrschulort)<>alterwert(fnrschulort)THEN putwert(fnrschlsachgebiet,sachgebiet
+);putwert(fnrschlschluessel,schulort);search(dnrschluessel,TRUE );putwert(
+fnrschllangtext,standardmaskenfeld(fnrschulort));IF dbstatus=0THEN update(
+dnrschluessel);IF dbstatus<>0THEN infeld(fnrschulort);LEAVE datenspeichernFI
+ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld(fnrschulstrasse)<>
+alterwert(fnrschulstrasse)THEN putwert(fnrschlsachgebiet,sachgebiet);putwert(
+fnrschlschluessel,schulstrasse);search(dnrschluessel,TRUE );putwert(
+fnrschllangtext,standardmaskenfeld(fnrschulstrasse));IF dbstatus=0THEN update
+(dnrschluessel);IF dbstatus<>0THEN infeld(fnrschulstrasse);LEAVE
+datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld(
+fnrschulrufnummer)<>alterwert(fnrschulrufnummer)THEN putwert(
+fnrschlsachgebiet,sachgebiet);putwert(fnrschlschluessel,schulrufnummer);
+search(dnrschluessel,TRUE );putwert(fnrschllangtext,standardmaskenfeld(
+fnrschulrufnummer));IF dbstatus=0THEN update(dnrschluessel);IF dbstatus<>0
+THEN infeld(fnrschulrufnummer);LEAVE datenspeichernFI ELSE insert(
+dnrschluessel)FI FI .END PROC schulkenndatenspeichern;PROC
+pruefeplausibilitaet(INT VAR fstatus):TEXT VAR pruefwert;pruefwert:=
+standardmaskenfeld(fnrschuljahr);IF length(pruefwert)<>laengeschuljahrTHEN
+standardmeldung(meldungueltigeangabe,"");fstatus:=fnrschuljahr;LEAVE
+pruefeplausibilitaetFI ;erstesjahr:=int(pruefwert);IF NOT lastconversionok
+THEN standardmeldung(meldungueltigeangabe,"");fstatus:=fnrschuljahr;LEAVE
+pruefeplausibilitaetELIF erstesjahr<0THEN standardmeldung(
+meldungueltigeangabe,"");fstatus:=fnrschuljahr;LEAVE pruefeplausibilitaetFI ;
+erstesjahr:=int(subtext(pruefwert,1,2));zweitesjahr:=int(subtext(pruefwert,3,
+4));IF ((erstesjahr+1)MOD 100)<>zweitesjahrTHEN standardmeldung(
+meldungueltigeangabe,"");fstatus:=fnrschuljahr;LEAVE pruefeplausibilitaetFI ;
+IF standardmaskenfeld(fnrschulhalbjahr)<>"1"AND standardmaskenfeld(
+fnrschulhalbjahr)<>"2"THEN standardmeldung(meldungueltigeangabe,"");fstatus:=
+fnrschulhalbjahr;LEAVE pruefeplausibilitaetFI ;IF fehlerhaftesdatum(
+standardmaskenfeld(fnranfangschulhj))THEN standardmeldung(
+meldungueltigesdatum,"");fstatus:=fnranfangschulhj;LEAVE pruefeplausibilitaet
+FI ;IF fehlerhaftesdatum(standardmaskenfeld(fnrendeschulhj))THEN
+standardmeldung(meldungueltigesdatum,"");fstatus:=fnrendeschulhj;LEAVE
+pruefeplausibilitaetFI ;IF subtext(standardmaskenfeld(fnrendeschulhj),5,6)<>
+"00"AND NOT (datum(standardmaskenfeld(fnrendeschulhj))>datum(
+standardmaskenfeld(fnranfangschulhj)))THEN standardmeldung(
+meldungueltigesdatum,"");fstatus:=fnrendeschulhj;LEAVE pruefeplausibilitaet
+FI ;IF standardmaskenfeld(fnrschulname)=""THEN standardmeldung(
+meldfehlendesdatum,"");fstatus:=fnrschulname;LEAVE pruefeplausibilitaetFI .
+END PROC pruefeplausibilitaet;BOOL PROC fehlerhaftesdatum(TEXT CONST
+testdatum):datum(testdatum)=nildatumEND PROC fehlerhaftesdatum;TEXT PROC
+kurzdatum(TEXT CONST langdatum):subtext(langdatum,1,2)+subtext(langdatum,4,5)
++subtext(langdatum,7,8)END PROC kurzdatum;TEXT PROC langdatum(TEXT CONST
+kurzdatum):subtext(kurzdatum,1,2)+zwischenpunkt+subtext(kurzdatum,3,4)+
+zwischenpunkt+subtext(kurzdatum,5,6)END PROC langdatum;END PACKET
+schulkenndatenbearbeiten
+
diff --git a/app/schulis/2.2.1/src/1.abgegangene aussortieren b/app/schulis/2.2.1/src/1.abgegangene aussortieren
new file mode 100644
index 0000000..ac73783
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.abgegangene aussortieren
@@ -0,0 +1,75 @@
+PACKET abgegangeneaussortierenDEFINES
+abgegangeneaussortiereneingangsbehandlung,abgegangeneaussortieren:LET null=0,
+fnrdatum=2,fnrankreuz1=3,fnrankreuz2=4,pruefartalternative=5,niltext="",
+tofather=1,meldtrenner="#",namenstrenner=", ",meldfalschesdatum=157,
+meldbearbeitung=153,meldspeicherfehler=131,meldende=158;LET falschertag="00",
+keindatum="01.01.00";LET anzschlfelder=3;LET bestandabgegangene="abg",
+bestandlaufsj="ls";LET jgstufe10=10;LET logtextbeginn1=
+"Anw. 1.3.4 Abgemeldete bis ",logtextbeginn2="Anw. 1.3.4 Abgegangene bis ",
+logtextende1=" aussortieren",logtextende2=" entfernen";ROW anzschlfelderTEXT
+VAR key;TEXT VAR jgst,zugtutor;PROC abgegangeneaussortiereneingangsbehandlung
+:reinitparsing;standardvproc(maske(vergleichsknoten)).END PROC
+abgegangeneaussortiereneingangsbehandlung;PROC abgegangeneaussortieren:
+pruefeplausibilitaet;IF allesokTHEN aussortierendurchfuehrenELSE
+fehlerbehandlungFI .pruefeplausibilitaet:pruefedatum;IF allesokTHEN
+pruefeankreuzfelderFI .allesok:INT VAR pruefstatus;pruefstatus=null.
+pruefeankreuzfelder:standardpruefe(pruefartalternative,fnrankreuz1,
+fnrankreuz2,null,niltext,pruefstatus);.pruefedatum:TEXT VAR stichtag:=
+standardmaskenfeld(fnrdatum);IF (subtext(stichtag,1,2)=falschertag)COR (datum
+(stichtag)=nildatum)THEN pruefstatus:=fnrdatum;standardmeldung(
+meldfalschesdatum,niltext);ELSE pruefstatus:=nullFI .fehlerbehandlung:infeld(
+pruefstatus);return(tofather).aussortierendurchfuehren:aussortieren(stichtag,
+standardmaskenfeld(fnrankreuz1)<>niltext);return(tofather).END PROC
+abgegangeneaussortieren;PROC aussortieren(TEXT CONST stichtag,BOOL CONST
+uebertragen):TEXT VAR eintrag;IF uebertragenTHEN inbestandabgegangeneELSE
+endgueltigloeschenFI .inbestandabgegangene:eintrag:=logtextbeginn1;eintrag
+CAT datumskonversion(stichtag);eintragCAT logtextende1;logeintrag(eintrag);
+leseschleife(ixsustatabgdat,bestandlaufsj,stichtag,PROC
+abgegangeneuebertragen).endgueltigloeschen:eintrag:=logtextbeginn2;eintrag
+CAT datumskonversion(stichtag);eintragCAT logtextende2;logeintrag(eintrag);
+leseschleife(ixsustatabgdat,bestandabgegangene,stichtag,PROC
+endgueltigloeschen).END PROC aussortieren;PROC leseschleife(INT CONST
+sekbestandindex,TEXT CONST sustatus,TEXT CONST stichtag,PROC (BOOL VAR )
+aktion):erstenlesen;WHILE NOT schlussREP ausfuehrung;naechstenlesenPER ;
+endemeldung.erstenlesen:BOOL VAR endegewuenscht:=FALSE ;putwert(fnrsustatuss,
+sustatus);putwert(fnrsuabgdats,datumskonversion(stichtag));search(
+sekbestandindex,FALSE );IF NOT gueltigesabgangsdatum(sustatus,stichtag)THEN
+pred(sekbestandindex)FI ;statusueberpruefen.schluss:(dbstatus<>null)COR
+endegewuenscht.ausfuehrung:bearbeitungmelden;aktion(endegewuenscht).
+naechstenlesen:pred(sekbestandindex);statusueberpruefen.endemeldung:IF NOT
+endegewuenschtTHEN standardmeldung(meldende,niltext)FI .statusueberpruefen:
+IF gueltigesabgangsdatum(sustatus,stichtag)THEN lesenzumaendernELSE dbstatus(
+notfound)FI .END PROC leseschleife;PROC abgegangeneuebertragen(BOOL VAR
+schluss):delete(dnrschueler);IF dbstatus=okTHEN IF intwert(fnrsusgrpjgst)>=
+jgstufe10THEN kurswahlserveraktualisieren(wert(fnrsusgrpjgst),"","")FI ;
+putwert(fnrsustatuss,bestandabgegangene);insert(dnrschueler);IF dbstatus<>ok
+THEN aktbestandzuruecksetzen;schlussundfehlermeldenFI ;
+aktbestandzuruecksetzenELSE schlussundfehlermeldenFI .aktbestandzuruecksetzen
+:putwert(fnrsustatuss,bestandlaufsj);.schlussundfehlermelden:schluss:=TRUE ;
+fehlermelden.END PROC abgegangeneuebertragen;PROC endgueltigloeschen(BOOL
+VAR schluss):#aenderunginstatraumvorbereiten(TRUE );dr11.05.88#IF NOT schluss
+THEN #einenschuelerausstatraumentfernen;dr11.05.88#datenloeschen(
+dnrhalbjahresdaten,schluss);IF NOT schlussTHEN diffdatenloeschen;delete(
+dnrschueler);schluss:=dbstatus<>null;FI FI ;IF schlussTHEN #
+einenschuelerinstatraumeinfuegen;dr11.05.88#fehlermeldenFI .diffdatenloeschen
+:IF wert(fnrsudiffdatennrs)<>""THEN putwert(fnrdddiffdatennr,wert(
+fnrsudiffdatennrs));search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN delete(
+dnrdiffdaten)FI FI .END PROC endgueltigloeschen;PROC datenloeschen(INT CONST
+dateinummer,BOOL VAR schluss):inittupel(dateinummer);putwert(dateinummer+1,
+key(1));putwert(dateinummer+2,key(2));putwert(dateinummer+3,datumskonversion(
+key(3)));search(dateinummer,FALSE );WHILE dbstatus=okCAND gleicherschueler
+REP delete(dateinummer);IF dbstatus<>okTHEN schluss:=TRUE ELSE succ(
+dateinummer)FI PER .gleicherschueler:key(1)=wert(dateinummer+1)CAND key(2)=
+wert(dateinummer+2)CAND key(3)=datumrekonversion(wert(dateinummer+3)).END
+PROC datenloeschen;BOOL PROC gueltigesabgangsdatum(TEXT CONST bestand,
+stichtag):dbstatus=okCAND wert(fnrsustatuss)=bestandCAND wert(fnrsuabgdats)<>
+keindatumCAND datum(wert(fnrsuabgdats))<=datum(datumskonversion(stichtag)).
+END PROC gueltigesabgangsdatum;PROC lesenzumaendern:key(1):=wert(
+fnrsufamnames);key(2):=wert(fnrsurufnames);key(3):=datumrekonversion(wert(
+fnrsugebdatums));jgst:=wert(fnrsusgrpjgst);zugtutor:=wert(fnrsusgrpzugtut)
+END PROC lesenzumaendern;PROC bearbeitungmelden:standardmeldung(
+meldbearbeitung,key(1)+namenstrenner+key(2)+meldtrenner+jgst+zugtutor+
+meldtrenner)END PROC bearbeitungmelden;PROC fehlermelden:standardmeldung(
+meldspeicherfehler,text(dbstatus)+meldtrenner+key(1)+namenstrenner+key(2)+
+meldtrenner);END PROC fehlermelden;END PACKET abgegangeneaussortieren
+
diff --git a/app/schulis/2.2.1/src/1.anschr.anmeldebestaetigung fuer jgst 5 und 11 b/app/schulis/2.2.1/src/1.anschr.anmeldebestaetigung fuer jgst 5 und 11
new file mode 100644
index 0000000..608e8e4
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.anschr.anmeldebestaetigung fuer jgst 5 und 11
@@ -0,0 +1,58 @@
+PACKET anschranmeldebestaetigungfuerjgst5und11DEFINES anschreibenbesteingang,
+anschreibenbestneustarten,sonderwertebestneu,multistopanmeld:LET swindexvollj
+=511,swindexminderjmaennlweibl=512,vollj="v",minderjaehrig="m",maennl="m",
+weibl="w",trennsymbol=" ",punkt=".";LET vordruckneu11=
+"vordruck anmeldebestaetigung zur jgst 11";LET vordruckneu5=
+"vordruck anmeldebestaetigung zur jgst 5";LET hellan="",hellaus=" ",maske=
+"ms anschreiben best",jgstfeldnr=3,bestandfeldnr=2,namefeldnr=4,vornamefeldnr
+=5,gebdatfeldnr=6,bildschirmfeldnr=7,druckerfeldnr=8;LET niltext="",
+fehlermeldnr=56,wartemeldnr=69,datumfehler=157,vater=1;LET jgst05="05";INT
+VAR eingabestatus;BOOL VAR anschreibenfuerjgst5;PROC anschreibenbesteingang(
+TEXT CONST jgst):anschreibenfuerjgst5:=(jgst=jgst05);standardstartproc(maske)
+;standardmaskenfeld(hellan+jgst+hellaus,jgstfeldnr);standardnprocEND PROC
+anschreibenbesteingang;BOOL PROC sonderwertebestneu:IF NOT
+anschreibenfuerjgst5THEN IF volljaehrig(wert(fnrsugebdatums))THEN
+setzesonderwert(swindexvollj,vollj);setzesonderwert(swindexminderjmaennlweibl
+,niltext)ELSE setzesonderwert(swindexvollj,minderjaehrig);IF wert(
+fnrsugeschlechts)=weiblTHEN setzesonderwert(swindexminderjmaennlweibl,weibl)
+ELSE setzesonderwert(swindexminderjmaennlweibl,maennl)FI FI FI ;IF
+andereerzieheradresseCAND NOT volljaehrig(wert(fnrsugebdatums))#sf30.10.#
+THEN leseerzieheradresse;uebertrageerzieheradresseFI ;adressat((wert(
+fnrsuvornames)SUB 1)+punkt+trennsymbol+wert(fnrsufamnames));TRUE .
+andereerzieheradresse:#intwert(fnradresskuerzel)<>0#wert(fnrsuplzorte)<>"".
+leseerzieheradresse:#inittupel(dnradressen);putwert(dnradressen+1,wert(
+fnradresskuerzel));search(dnradressen,TRUE )#.uebertrageerzieheradresse:
+putwert(fnrsustrnrs,wert(fnrsustrnre));putwert(fnrsuplzorts,wert(fnrsuplzorte
+)).END PROC sonderwertebestneu;PROC anschreibenbestneustarten:TEXT VAR
+vordruckneu:="";lesemaskenwerte;IF NOT (auswahldruckeroderbildschirmok)THEN
+meldedenfehler;infeld(bildschirmfeldnr);zurueckzumdialogELSE IF
+schluesselmitdatumangegebenTHEN IF schuelerschluessel3okTHEN
+startenausfuehrenELSE standardmeldung(datumfehler,niltext);infeld(
+gebdatfeldnr);zurueckzumdialogFI ;ELSE IF (alleschuelergewaehltXOR
+einschuelerohnedatumgewaehlt)THEN startenausfuehrenELSE meldedenfehler;
+zurueckzumdialogFI ;FI ;FI .lesemaskenwerte:TEXT CONST schluessel1:=
+standardmaskenfeld(namefeldnr);TEXT CONST schluessel2:=standardmaskenfeld(
+vornamefeldnr);TEXT CONST schluessel3:=standardmaskenfeld(gebdatfeldnr);BOOL
+CONST anschreibenzeigen:=standardmaskenfeld(bildschirmfeldnr)<>niltext;BOOL
+CONST alle:=standardmaskenfeld(bestandfeldnr)<>niltext.
+auswahldruckeroderbildschirmok:(standardmaskenfeld(bildschirmfeldnr)<>niltext
+)XOR (standardmaskenfeld(druckerfeldnr)<>niltext).schluesselmitdatumangegeben
+:NOT alleAND schluessel1<>niltextAND schluessel2<>niltextAND schluessel3<>
+niltext.alleschuelergewaehlt:alleAND (schluessel1+schluessel2+schluessel3)=
+niltext.einschuelerohnedatumgewaehlt:NOT alleAND schluessel1<>niltextAND
+schluessel3=niltext.schuelerschluessel3ok:standardpruefe(6,6,0,0,niltext,
+eingabestatus);IF NOT (eingabestatus=0)THEN FALSE ELSE TRUE FI .
+meldedenfehler:standardmeldung(fehlermeldnr,niltext).zurueckzumdialog:return(
+vater).startenausfuehren:standardmeldung(wartemeldnr,niltext);
+initialisieredruckerfueranschreiben;inittupel(dnrschueler);parsenooffields(30
+);uebernimmnamen;IF anschreibenfuerjgst5THEN putwert(fnrsustatuss,"n05");
+vordruckneu:=vordruckneu5ELSE putwert(fnrsustatuss,"n11");vordruckneu:=
+vordruckneu11FI ;anschreibenstart(ixsustatfamrufgeb,vordruckneu,
+anschreibenzeigen,(schluessel1+schluessel2)<>"",BOOL PROC sonderwertebestneu,
+BOOL PROC multistopanmeld).uebernimmnamen:putwert(fnrsufamnames,schluessel1);
+putwert(fnrsurufnames,schluessel2);putwert(fnrsugebdatums,datumskonversion(
+schluessel3)).END PROC anschreibenbestneustarten;BOOL PROC multistopanmeld:
+BOOL VAR b;IF anschreibenfuerjgst5THEN b:=wert(fnrsustatuss)="n05"ELSE b:=
+wert(fnrsustatuss)="n11"FI ;bENDPROC multistopanmeld;END PACKET
+anschranmeldebestaetigungfuerjgst5und11;
+
diff --git a/app/schulis/2.2.1/src/1.anschr.mitteilungen neuangemeldete und abgemeldete b/app/schulis/2.2.1/src/1.anschr.mitteilungen neuangemeldete und abgemeldete
new file mode 100644
index 0000000..3271256
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.anschr.mitteilungen neuangemeldete und abgemeldete
@@ -0,0 +1,262 @@
+PACKET anschrmitteilungenneuangemeldeteundabgemeldeteDEFINES
+mitteilungeingang,mitteilungende,mitteilungneuangstarten,
+mitteilungabmeldungstarten,sonderwertemitteilungabmeldung,
+sonderwertemitteilungneuangmithjd,sonderwertemitteilungneuangmitdiffd,
+dummystop:LET laufenderbestand="ls";LET bestandfuerabgang="c02 abgang",
+bestandfuerabschluss="c02 abschluss";LET swaktuelleshalbjahr=509,
+sweintrittsdatum=512,swabgangsdatum=512,swschuelername=513,swgeburtsdatum=514
+,swabgangsgrund=515,swstrhausnr=516,swerreichterabschluss=516,swplzort=517,
+swtelephonnr=518,swaktjgst=519,swklassenlehrer=520,#swbafoeg=521,dr05.03.88#
+swkursanfang=530,swfelderunterschrnoteentlbuecher=591,swmatrixfeld=590;INT
+VAR swkurse,eingabestatus;TEXT VAR aktuellejgst,tutorlehrer,abglangtext,
+abslangtext;TEXT VAR aktuelleshalbjahr:="",aktuellesschuljahr:="",
+schuljahranfang:="",schuljahrende:="";LET textschulhalbjahr="Schulhalbjahr",
+textschuljahr="Schuljahr",textschuljahranfang="Anfang Schulhalbjahr",
+textschuljahrende="Ende Schulhalbjahr";BOOL VAR hjdvorhanden,abmeldung:=
+FALSE ,schuelergefunden;LET jgst09="09",jgst10="10";LET maske="ms mitteilung"
+;LET namefeldnr=2,rufnamefeldnr=3,geburtsdatumfeldnr=4,bildschirmfeldnr=5,
+druckerfeldnr=6;LET father=1;LET wartemeldnr=69,existiertnichtmeldnr=126,
+falschesdatum=192,datumfehler=157,fehlermeldnr=56;TEXT VAR familienname,
+rufname,geburtsdatum;BOOL VAR zeigen;BOOL VAR erstemitteilung:=TRUE ;LET
+vordruckmithjd="vordruck mitteilung ueber eine anmeldung mit hjd",
+vordruckmitdiffd="vordruck mitteilung ueber eine anmeldung mit diffd",
+vordruckabmeldung="vordruck mitteilung ueber eine abmeldung";LET
+maxanzahlbelegtekurse=15,anzahlkurskomponenten=4;ROW maxanzahlbelegtekurse
+ROW anzahlkurskomponentenTEXT VAR kursdaten;LET lerngruppenindex=1,
+fachlangtextindex=2,lehrerindex=3,fachschluesselindex=4;LET
+indexdiffdatenbeschreibung=1,indexdiffdatenschluessel=2;INT VAR
+anzahlderfaecher:=1,anzahlderbelegtenkurse:=0,anzahlderdiffdaten:=0;INT VAR
+zaehler,zaehler1,zaehler2;TEXT VAR fachkuerzel;LET weiblich="w",maennlich="m"
+,anredeweibl="Fr.",anredemaennl="Hr.",erstehalbj="1",auszufuellendesfeld=
+"___________________________",trennsymbol=" ",punkt=".",niltext="",nildatum=
+"01.01.00",textwahlpflichtfach="Wahlpflichtf. ";TEXT CONST
+auszufuellendefelderunterschrnoteentlbuecher:="__________ ____ ________";
+TEXT CONST auszufuellendesfeldlehrer:="____________________________________ "
+;TEXT CONST matrixfeld:="_______ "+auszufuellendesfeldlehrer+
+auszufuellendefelderunterschrnoteentlbuecher;LET maxanzahlderfaecher=100;ROW
+maxanzahlderfaecherROW 2TEXT VAR faecherkartei;LET karteifachschluesselindex=
+1,karteifachlangtext=2;LET anzstacktupel=25;PROC initialisierekursdaten:FOR
+zaehler1FROM 1UPTO maxanzahlbelegtekurseREP FOR zaehler2FROM 1UPTO
+anzahlkurskomponentenREP kursdaten(zaehler1)(zaehler2):=niltextPER PER END
+PROC initialisierekursdaten;PROC holekursdaten:INT VAR i;
+anzahlderbelegtenkurse:=length(wert(fnrhjdfach))DIV 2;FOR iFROM 1UPTO
+anzahlderbelegtenkurseREP fachkuerzel:=subtext(wert(fnrhjdfach),i*2-1,i*2);
+kursdaten(i)(fachschluesselindex):=compress(fachkuerzel);kursdaten(i)(
+lerngruppenindex):=fachkuerzel+trennsymbol+subtext(wert(fnrhjdlerngrpkenn),i*
+4-3,i*4);PER ;END PROC holekursdaten;PROC suchelangtextzufachschluessel(INT
+VAR anzahlderschluessel):INT VAR i;FOR iFROM 1UPTO anzahlderschluesselREP
+zaehler:=0;REP zaehlerINCR 1UNTIL zaehler>anzahlderfaecherCOR faecherkartei(
+zaehler)(karteifachschluesselindex)=kursdaten(i)(fachschluesselindex)PER ;IF
+faecherkartei(zaehler)(karteifachschluesselindex)=kursdaten(i)(
+fachschluesselindex)THEN kursdaten(i)(fachlangtextindex):=faecherkartei(
+zaehler)(karteifachlangtext);FI PER ;END PROC suchelangtextzufachschluessel;
+PROC zuordnunglerngruppelehrer:INT VAR i;anzahlderbelegtenkurse:=length(wert(
+fnrhjdfach))DIV 2;FOR iFROM 1UPTO anzahlderbelegtenkurseREP kursdaten(i)(
+lehrerindex):=lehrerzukurs(subtext(wert(fnrhjdfach),i*2-1,i*2),i)PER ;END
+PROC zuordnunglerngruppelehrer;TEXT PROC lehrerzukurs(TEXT CONST fachkuerzel,
+INT CONST wievielte):INT VAR i:=wievielte;suchelerngruppe;IF dbstatus=okTHEN
+suchelehrerELSE auszufuellendesfeldlehrerFI .suchelerngruppe:putwert(fnrlvsj,
+wert(fnrhjdsj));putwert(fnrlvhj,wert(fnrhjdhj));putwert(fnrlvfachkennung,
+fachkuerzel+compress(subtext(wert(fnrhjdlerngrpkenn),i*4-3,i*4)));putwert(
+fnrlvjgst,wert(fnrhjdjgst));search(dnrlehrveranstaltungen,TRUE ).suchelehrer:
+putwert(dnrlehrer+1,wert(fnrlvparaphe));search(dnrlehrer,TRUE );IF dbstatus<>
+okTHEN auszufuellendesfeldlehrerELSE kompletteanredeFI .kompletteanrede:text(
+anrede+lehrertitel+lehrerzusatz+trennsymbol+wert(fnrlfamname),length(
+auszufuellendesfeldlehrer)).anrede:IF wert(fnrlgeschlecht)=weiblichTHEN
+anredeweiblELIF wert(fnrlgeschlecht)=maennlichTHEN anredemaennlELSE niltext
+FI .lehrertitel:IF wert(fnrlamtsbeztitel)=niltextTHEN niltextELSE trennsymbol
++wert(fnrlamtsbeztitel)FI .lehrerzusatz:IF wert(fnrlzusatz)=niltextTHEN
+niltextELSE trennsymbol+wert(fnrlzusatz)FI .ENDPROC lehrerzukurs;PROC
+sonderwertfueradressaten:adressat((wert(fnrsurufnames)SUB 1)+punkt+
+trennsymbol+wert(fnrsufamnames))END PROC sonderwertfueradressaten;PROC
+sonderwerteallgschuelerdaten:IF wert(fnrsunamenszusatzs)<>niltextTHEN
+setzesonderwert(swschuelername,wert(fnrsurufnames)+trennsymbol+wert(
+fnrsunamenszusatzs)+trennsymbol+wert(fnrsufamnames))ELSE setzesonderwert(
+swschuelername,wert(fnrsurufnames)+trennsymbol+wert(fnrsufamnames))FI ;
+setzesonderwert(swgeburtsdatum,wert(fnrsugebdatums));END PROC
+sonderwerteallgschuelerdaten;PROC
+sonderwerteschuelerdatenfueranmeldebestaetigung:sonderwerteallgschuelerdaten;
+setzesonderwert(swstrhausnr,wert(fnrsustrnrs));setzesonderwert(swplzort,wert(
+fnrsuplzorts));setzesonderwert(swtelephonnr,wert(fnrsutelnrs));END PROC
+sonderwerteschuelerdatenfueranmeldebestaetigung;PROC sonderwertfueraktjgst:
+aktuellejgst:=wert(fnrsusgrpjgst)+wert(fnrsusgrpjgst+1);setzesonderwert(
+swaktjgst,aktuellejgst);END PROC sonderwertfueraktjgst;PROC
+sonderwertfuerklassenlehrer:sucheklassenlehrer;IF dbstatus=okTHEN IF wert(
+fnrlgeschlecht)=weiblichTHEN tutorlehrer:=anredeweibl+trennsymbolELIF wert(
+fnrlgeschlecht)=maennlichTHEN tutorlehrer:=anredemaennl+trennsymbolELSE
+tutorlehrer:=niltextFI ;IF wert(fnrlzusatz)<>niltextTHEN tutorlehrer:=
+tutorlehrer+wert(fnrlzusatz)+trennsymbolFI ;setzesonderwert(swklassenlehrer,
+text(tutorlehrer+wert(fnrlfamname),37));FI .sucheklassenlehrer:
+sucheschuelergruppe;suchelehrer.sucheschuelergruppe:putwert(fnrsgrpsj,
+aktuellesschuljahr);putwert(fnrsgrphj,aktuelleshalbjahr);putwert(fnrsgrpjgst,
+wert(fnrsusgrpjgst));putwert(fnrsgrpkennung,wert(fnrsusgrpzugtut));search(
+dnraktschuelergruppen,TRUE ).suchelehrer:inittupel(dnrlehrer);IF dbstatus=ok
+THEN putwert(fnrlparaphe,wert(fnrsgrplehrer));search(dnrlehrer,TRUE )FI .END
+PROC sonderwertfuerklassenlehrer;PROC bildefaecherbestand:
+initialisierefaecherkartei;vorbereitung;leseschleife.
+initialisierefaecherkartei:FOR zaehler1FROM 1UPTO maxanzahlderfaecherREP FOR
+zaehler2FROM 1UPTO karteifachlangtextREP faecherkartei(zaehler1)(zaehler2):=
+niltextPER PER .vorbereitung:BOOL VAR wenigergelesen:=FALSE ;INT VAR anztupel
+;inittupel(dnrfaecher);anztupel:=anzstacktupel;anzahlderfaecher:=0;
+multisearchforward(dnrfaecher,anztupel);evtweniger.leseschleife:WHILE
+anztupel>0CAND anzahlderfaecher<=maxanzahlderfaecherREP anzahlderfaecherINCR
+1;anztupelDECR 1;multisucc;faecherkartei(anzahlderfaecher)(1):=wert(
+dnrfaecher+1);faecherkartei(anzahlderfaecher)(2):=wert(dnrfaecher+2);IF
+anztupel=0CAND NOT wenigergelesenTHEN anztupel:=anzstacktupel;multisucc(
+dnrfaecher,anztupel);evtwenigerFI PER .evtweniger:IF anztupel<anzstacktupel
+THEN wenigergelesen:=TRUE FI .END PROC bildefaecherbestand;PROC
+mitteilungeingang:standardvproc(maske);IF erstemitteilungTHEN
+bildefaecherbestand;erstemitteilung:=FALSE FI ;END PROC mitteilungeingang;
+PROC mitteilungende:erstemitteilung:=TRUE ;enter(2)END PROC mitteilungende;
+BOOL PROC sonderwertemitteilungneuangmithjd:initialisierekursdaten;
+initialisieresonderwerte;sonderwertfueradressaten;
+sonderwertfuereintrittsdatum;sonderwerteschuelerdatenfueranmeldebestaetigung;
+sonderwertfueraktjgst;bestimmekurse;sonderwertfuerklassenlehrer;
+sonderwertefuerkurse;TRUE .sonderwertfuereintrittsdatum:setzesonderwert(
+sweintrittsdatum,wert(fnrsueintrittsdats)).bestimmekurse:holekursdaten;
+suchelangtextzufachschluessel(anzahlderbelegtenkurse);
+zuordnunglerngruppelehrer;.sonderwertefuerkurse:swkurse:=swkursanfang;FOR
+zaehler1FROM 1UPTO anzahlderbelegtenkurseREP setzesonderwert(swkurse,
+kursdaten(zaehler1)(lerngruppenindex));swkurseINCR 1;setzesonderwert(swkurse,
+kursdaten(zaehler1)(fachlangtextindex));swkurseINCR 1;setzesonderwert(swkurse
+,kursdaten(zaehler1)(lehrerindex));swkurseINCR 1;PER .END PROC
+sonderwertemitteilungneuangmithjd;BOOL PROC
+sonderwertemitteilungneuangmitdiffd:initialisierekursdaten;
+initialisieresonderwerte;sonderwertfueradressaten;
+sonderwertfuereintrittsdatum;sonderwerteschuelerdatenfueranmeldebestaetigung;
+sonderwertfueraktjgst;bestimmediffdaten;sonderwertfuerklassenlehrer;
+sonderwertefuerdiffdaten;TRUE .sonderwertfuereintrittsdatum:setzesonderwert(
+sweintrittsdatum,wert(fnrsueintrittsdats)).bestimmediffdaten:
+anzahlderdiffdaten:=0;ermittlediefremdsprachen;
+ueberpruefeobreligionsteilnahme;ueberpruefeobkunstodermusik;IF wert(
+fnrsusgrpjgst)=jgst09THEN ermittlewp09FI ;IF wert(fnrsusgrpjgst)=jgst10THEN
+ermittlewp10FI ;ermittleags.ermittlediefremdsprachen:INT VAR
+anzahlderbelegtenfremdsprachen:=1;INT VAR wievieltesprache:=0;REP fachkuerzel
+:=wert(fnrdd1fremdfach+wievieltesprache);IF fachkuerzel<>niltextTHEN
+anzahlderdiffdatenINCR 1;kursdaten(anzahlderdiffdaten)(
+indexdiffdatenbeschreibung):=text(anzahlderbelegtenfremdsprachen)+
+". Fremdsprache:";anzahlderbelegtenfremdsprachenINCR 1;kursdaten(
+anzahlderdiffdaten)(indexdiffdatenschluessel):=fachkuerzel;FI ;
+wievieltespracheINCR 3UNTIL (fnrdd1fremdfach+wievieltesprache)>fnrdd4fremde
+PER .ueberpruefeobreligionsteilnahme:IF wert(fnrddreliunter)<>niltextCAND (
+wert(fnrddreliunter+1)=nildatum)OR (wert(fnrddreliunter+1)<>nildatumAND wert(
+fnrddreliunter+2)<>nildatum)THEN anzahlderdiffdatenINCR 1;kursdaten(
+anzahlderdiffdaten)(indexdiffdatenbeschreibung):="Religion:";kursdaten(
+anzahlderdiffdaten)(indexdiffdatenschluessel):=wert(fnrddreliunter)FI .
+ueberpruefeobkunstodermusik:IF wert(fnrddkunstmusik)<>niltextTHEN
+anzahlderdiffdatenINCR 1;kursdaten(anzahlderdiffdaten)(
+indexdiffdatenbeschreibung):="Kunst/Musik:";kursdaten(anzahlderdiffdaten)(
+indexdiffdatenschluessel):=wert(fnrddkunstmusik)FI .ermittlewp09:TEXT VAR txt
+;IF erstehalbjahrTHEN txt:=textwahlpflichtfach+"09.1:";wps(fnrddfach091a,
+anzahlderdiffdaten,txt);wps(fnrddfach091b,anzahlderdiffdaten,txt)ELSE txt:=
+textwahlpflichtfach+"09.2:";wps(fnrddfach092a,anzahlderdiffdaten,txt);wps(
+fnrddfach092b,anzahlderdiffdaten,txt)FI .ermittlewp10:IF erstehalbjahrTHEN
+txt:=textwahlpflichtfach+"10.1:";wps(fnrddfach101a,anzahlderdiffdaten,txt);
+wps(fnrddfach101b,anzahlderdiffdaten,txt);ELSE txt:=textwahlpflichtfach+
+"10.2:";wps(fnrddfach102a,anzahlderdiffdaten,txt);wps(fnrddfach102b,
+anzahlderdiffdaten,txt)FI .erstehalbjahr:erstehalbj=sonderwert(
+swaktuelleshalbjahr).ermittleags:INT VAR wievielteag:=0;REP fachkuerzel:=wert
+(fnrddagthema1+wievielteag);IF fachkuerzel<>niltextTHEN anzahlderdiffdaten
+INCR 1;kursdaten(anzahlderdiffdaten)(indexdiffdatenbeschreibung):="AG:";
+kursdaten(anzahlderdiffdaten)(indexdiffdatenschluessel):=fachkuerzel;FI ;
+wievielteagINCR 3#2#UNTIL (fnrddagthema1+wievielteag)>fnrddagthema3PER .
+sonderwertefuerdiffdaten:swkurse:=swkursanfang;FOR zaehler1FROM 1UPTO
+anzahlderdiffdatenREP FOR zaehler2FROM 1UPTO indexdiffdatenschluesselREP
+setzesonderwert(swkurse,kursdaten(zaehler1)(zaehler2));swkurseINCR 1PER PER .
+END PROC sonderwertemitteilungneuangmitdiffd;PROC wps(INT CONST fnr,INT VAR
+anzahlderdiffdaten,TEXT CONST txt):IF wert(fnr)<>niltextTHEN
+anzahlderdiffdatenINCR 1;kursdaten(anzahlderdiffdaten)(
+indexdiffdatenbeschreibung):=txt;kursdaten(anzahlderdiffdaten)(
+indexdiffdatenschluessel):=wert(fnr)FI ENDPROC wps;BOOL PROC
+sonderwertemitteilungabmeldung:initialisierekursdaten;
+initialisieresonderwerte;sonderwertezumaufbaueinermatrix;
+sonderwertfueradressaten;sonderwerteallgschuelerdaten;
+abgangsdatumundabgangsgrund;sonderwertfueraktjgst;
+sonderwertefuerkursebeimabgang;sonderwertfuerklassenlehrer;
+sonderwertfuerabgangsgrundundabschluss;TRUE .abgangsdatumundabgangsgrund:
+TEXT VAR abgdatum:=wert(fnrsuabgdats);IF abgdatum=nildatumTHEN abgdatum:=""
+FI ;setzesonderwert(swabgangsdatum,abgdatum);TEXT VAR abgkuerzel:=wert(
+fnrsuabggrund);TEXT VAR abskuerzel:=wert(fnrsuabschluss);.
+sonderwertfuerabgangsgrundundabschluss:IF langtextgefunden(
+bestandfuerabschluss,abskuerzel,abslangtext)THEN setzesonderwert(
+swerreichterabschluss,abslangtext)ELSE setzesonderwert(swerreichterabschluss,
+auszufuellendesfeld)FI ;IF langtextgefunden(bestandfuerabgang,abgkuerzel,
+abglangtext)THEN setzesonderwert(swabgangsgrund,abglangtext)ELSE
+setzesonderwert(swabgangsgrund,auszufuellendesfeld)FI .
+sonderwertefuerkursebeimabgang:IF hjdvorhandenTHEN holekursdaten;
+zuordnunglerngruppelehrer;swkurse:=swkursanfangELSE anzahlderbelegtenkurse:=0
+FI ;FOR zaehler1FROM 1UPTO anzahlderbelegtenkurseREP setzesonderwert(swkurse,
+plusanhang(kursdaten(zaehler1)(fachschluesselindex),subtext(wert(
+fnrhjdlerngrpkenn),zaehler1*4-3,zaehler1*4)));swkurseINCR 1;setzesonderwert(
+swkurse,kursdaten(zaehler1)(lehrerindex));swkurseINCR 1PER .
+sonderwertezumaufbaueinermatrix:setzesonderwert(
+swfelderunterschrnoteentlbuecher,auszufuellendefelderunterschrnoteentlbuecher
+);setzesonderwert(swmatrixfeld,matrixfeld).END PROC
+sonderwertemitteilungabmeldung;TEXT PROC plusanhang(TEXT CONST t,t2):text(t,3
+)+text(t2,5)ENDPROC plusanhang;BOOL PROC langtextgefunden(TEXT CONST bestand,
+kuerzel,TEXT VAR lang):systemdboff;putwert(fnrschlsachgebiet,bestand);putwert
+(fnrschlschluessel,kuerzel);search(dnrschluessel,TRUE );lang:=wert(
+fnrschllangtext);dbstatus=okENDPROC langtextgefunden;PROC lesemaskenwerte:
+familienname:=standardmaskenfeld(namefeldnr);rufname:=standardmaskenfeld(
+rufnamefeldnr);geburtsdatum:=standardmaskenfeld(geburtsdatumfeldnr);zeigen:=
+standardmaskenfeld(bildschirmfeldnr)<>niltextEND PROC lesemaskenwerte;PROC
+ermittledievorliegendendaten:standardmeldung(wartemeldnr,niltext);IF
+aktuelleshalbjahr=""THEN aktuelleshalbjahr:=schulkenndatum(textschulhalbjahr)
+;aktuellesschuljahr:=schulkenndatum(textschuljahr);FI ;
+uebernimmschluesselwerte;search(ixsustatfamrufgeb,FALSE );schuelergefunden:=(
+dbstatus=ok)CAND (wert(fnrsufamnames)=familienname)CAND (wert(fnrsurufnames)=
+rufnameCOR rufname="")CAND (wert(fnrsugebdatums)=datumskonversion(
+geburtsdatum)COR geburtsdatum="");IF schuelergefundenCAND abmeldungCAND
+falschesabmelddatumTHEN schuelergefunden:=FALSE ;meldefalschesdatum;
+zurueckzumdialogELSE weiterverarbeitungFI .falschesabmelddatum:IF
+schuljahranfang=""THEN schuljahranfang:=schulkenndatum(textschuljahranfang);
+schuljahrende:=schulkenndatum(textschuljahrende)FI ;NOT ((date(wert(
+fnrsuabgdats))>=date(schuljahranfang))CAND (date(wert(fnrsuabgdats))<=date(
+schuljahrende))).weiterverarbeitung:IF schuelergefundenTHEN
+halbjahresdatenholen;ueberpruefeobkursdatenvorliegen;IF NOT hjdvorhandenTHEN
+diffdatenholenFI ELSE meldeschuelerexistiertnicht;zurueckzumdialogFI .
+halbjahresdatenholen:inittupel(dnrhalbjahresdaten);TEXT VAR tidhjddaten:=wert
+(fnrsutidakthjd);readtid(dnrhalbjahresdaten,tidhjddaten).diffdatenholen:
+inittupel(dnrdiffdaten);TEXT VAR tiddiffdaten:=wert(fnrsutiddiffdaten);
+readtid(dnrdiffdaten,tiddiffdaten).meldeschuelerexistiertnicht:
+standardmeldung(existiertnichtmeldnr,niltext).meldefalschesdatum:
+standardmeldung(falschesdatum,niltext).ueberpruefeobkursdatenvorliegen:
+hjdvorhanden:=dbstatus=okCAND wert(fnrhjdfach)<>"".zurueckzumdialog:return(
+father).END PROC ermittledievorliegendendaten;PROC uebernimmschluesselwerte:
+putwert(fnrsustatuss,laufenderbestand);putwert(fnrsufamnames,familienname);
+putwert(fnrsurufnames,rufname);putwert(fnrsugebdatums,datumskonversion(
+geburtsdatum))ENDPROC uebernimmschluesselwerte;PROC mitteilungneuangstarten:
+reinitparsing;lesemaskenwerte;IF NOT (wahldruckeroderbildschirmok)THEN
+meldedenfehler;zurueckzumdialogELSE IF (schluesselmitdatum)AND (NOT (datumok)
+)THEN meldefehlerbeidatum;zurueckzumdialogELSE IF (schluesselmitdatumXOR
+schluesselohnedatumok)THEN neuangemeldeteweiterELSE meldedenfehler;
+zurueckzumdialogFI ;FI ;FI .neuangemeldeteweiter:abmeldung:=FALSE ;
+ermittledievorliegendendaten;IF schuelergefundenTHEN
+initialisieredruckerfuermitteilung;IF hjdvorhandenTHEN anschreibenstart(
+ixsustatfamrufgeb,vordruckmithjd,zeigen,TRUE ,BOOL PROC
+sonderwertemitteilungneuangmithjd,BOOL PROC dummystop)ELSE anschreibenstart(
+ixsustatfamrufgeb,vordruckmitdiffd,zeigen,TRUE ,BOOL PROC
+sonderwertemitteilungneuangmitdiffd,BOOL PROC dummystop)FI ;FI ;.END PROC
+mitteilungneuangstarten;PROC meldedenfehler:standardmeldung(fehlermeldnr,
+niltext)END PROC meldedenfehler;PROC zurueckzumdialog:return(father)END PROC
+zurueckzumdialog;BOOL PROC wahldruckeroderbildschirmok:standardmaskenfeld(
+bildschirmfeldnr)<>niltextXOR standardmaskenfeld(druckerfeldnr)<>niltextEND
+PROC wahldruckeroderbildschirmok;BOOL PROC schluesselmitdatum:familienname<>
+niltextAND rufname<>niltextAND geburtsdatum<>niltextEND PROC
+schluesselmitdatum;BOOL PROC schluesselohnedatumok:familienname<>niltextAND
+geburtsdatum=niltextEND PROC schluesselohnedatumok;BOOL PROC datumok:
+standardpruefe(6,6,0,0,niltext,eingabestatus);IF NOT (eingabestatus=0)THEN
+FALSE ELSE TRUE FI END PROC datumok;PROC meldefehlerbeidatum:standardmeldung(
+datumfehler,niltext)END PROC meldefehlerbeidatum;PROC
+mitteilungabmeldungstarten:reinitparsing;lesemaskenwerte;IF NOT (
+wahldruckeroderbildschirmok)THEN meldedenfehler;zurueckzumdialogELSE IF (
+schluesselmitdatum)AND (NOT (datumok))THEN meldefehlerbeidatum;
+zurueckzumdialogELSE IF (schluesselmitdatumXOR schluesselohnedatumok)THEN
+abgemeldeteweiterELSE meldedenfehler;zurueckzumdialogFI ;FI ;FI .
+abgemeldeteweiter:abmeldung:=TRUE ;ermittledievorliegendendaten;IF
+schuelergefundenTHEN initialisieredruckerfuermitteilung;anschreibenstart(
+ixsustatfamrufgeb,vordruckabmeldung,zeigen,TRUE ,BOOL PROC
+sonderwertemitteilungabmeldung,BOOL PROC dummystop)FI .END PROC
+mitteilungabmeldungstarten;BOOL PROC dummystop:TRUE ENDPROC dummystop;END
+PACKET anschrmitteilungenneuangemeldeteundabgemeldete;
+
diff --git a/app/schulis/2.2.1/src/1.anschr.nachpruefungsbescheinigung b/app/schulis/2.2.1/src/1.anschr.nachpruefungsbescheinigung
new file mode 100644
index 0000000..27212bf
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.anschr.nachpruefungsbescheinigung
@@ -0,0 +1,150 @@
+PACKET anschrnachpruefungsbescheinigungDEFINES
+nachpruefungsbescheinigungeingang,nachpruefungsbescheinigungende,
+nachpruefungsbescheinigungstarten,sonderwertenachpruefungsbescheinigung,
+multistopnachpruefbesch:INT VAR aktuellerindex;TEXT VAR schuelerschluessel1,
+schuelerschluessel2,schuelerschluessel3,bestandsschluessel1,
+bestandsschluessel2,aktuellesschuljahr,vorigesschuljahr;LET #
+schluesselversetztmitpruefung="n"#schluesselnachpruefung="n";#
+schluesselwiederholtmitpruefung="x",schluesselwiederholer="w";#LET vordruck=
+"vordruck nachpruefungsbescheinigung";LET maske=
+"ms auswahl schueler o. klasse";LET namefeldnr=2,vornamefeldnr=3,
+geburtsdatumfeldnr=4,jgstfeldnr=5,zugtutorfeldnr=6,bildschirmfeldnr=7,
+druckerfeldnr=8;LET niltext="",trennsymbol=" ",punkt=".",meldkennz="#",
+fehlerhalbjnr=165,fehlermeldnr=56,#wartemeldnr=69,sortiervorgangwartemeldnr=
+76,#dieauswahlderjgstistnichtzulaessignr=146,vater=1;LET minjgst=5,jgst11=11,
+maxjgst=13;LET swschulhalbjahr=509,swzuname=511,swnamenszusaetze=512,
+swvornamen=513,swgeschlecht=514,swgeburtsdatum=515,swzugang=516,
+swjgstnachpruefung=517,swnachpruefungsfach=518,swparagraph=519,swbemerkung=
+520;LET maxanzahlderfaecher=100,fachschluesselindex=1,fachlangtextindex=2;
+ROW maxanzahlderfaecherROW fachlangtextindexTEXT VAR faecherkartei;INT VAR
+anzahlderfaecher:=0;BOOL VAR eingang:=TRUE ,erstehalbjahr:=TRUE ,
+anschreibenzeigen;TEXT PROC langtextzufachschluessel(TEXT CONST schluessel):
+INT VAR zaehler:=1;TEXT VAR langtext:="";WHILE zaehler<anzahlderfaecherCAND
+schluessel<>faecherkartei(zaehler)(fachschluesselindex)REP zaehlerINCR 1PER ;
+IF schluessel=faecherkartei(zaehler)(fachschluesselindex)THEN langtext:=
+faecherkartei(zaehler)(fachlangtextindex)FI ;langtextEND PROC
+langtextzufachschluessel;PROC bildefaecherbestand:LET anzstacktupel=25;
+initialisierefaecherkartei;vorbereitung;leseschleife.
+initialisierefaecherkartei:INT VAR zaehler1,zaehler2;FOR zaehler1FROM 1UPTO
+maxanzahlderfaecherREP FOR zaehler2FROM 1UPTO fachlangtextindexREP
+faecherkartei(zaehler1)(zaehler2):=niltextPER PER .vorbereitung:BOOL VAR
+wenigergelesen:=FALSE ;INT VAR anztupel;inittupel(dnrfaecher);anztupel:=
+anzstacktupel;anzahlderfaecher:=0;multisearchforward(dnrfaecher,anztupel);
+evtweniger.leseschleife:WHILE anztupel>0CAND anzahlderfaecher<=
+maxanzahlderfaecherREP anzahlderfaecherINCR 1;anztupelDECR 1;multisucc;
+faecherkartei(anzahlderfaecher)(1):=wert(dnrfaecher+1);faecherkartei(
+anzahlderfaecher)(2):=wert(dnrfaecher+2);IF anztupel=0CAND NOT wenigergelesen
+THEN anztupel:=anzstacktupel;multisucc(dnrfaecher,anztupel);evtwenigerFI PER
+.evtweniger:IF anztupel<anzstacktupelTHEN wenigergelesen:=TRUE FI .END PROC
+bildefaecherbestand;PROC nachpruefungsbescheinigungeingang:standardvproc(
+maske);IF eingangTHEN setzesonderwerteschulkenndaten;
+feststellenoberstehalbjahr;IF erstehalbjahrTHEN berechneschuljahre;
+bildefaecherbestand;FI ;aendernderflaggeFI .feststellenoberstehalbjahr:
+erstehalbjahr:=int(sonderwert(swschulhalbjahr))=1.aendernderflagge:eingang:=
+FALSE .berechneschuljahre:aktuellesschuljahr:=schulkenndatum("Schuljahr");
+vorigesschuljahr:=vorigesjahr.vorigesjahr:text(int(subtext(aktuellesschuljahr
+,1,2))-1)+text(int(subtext(aktuellesschuljahr,3,4))-1).END PROC
+nachpruefungsbescheinigungeingang;PROC nachpruefungsbescheinigungende:eingang
+:=TRUE ;enter(2)END PROC nachpruefungsbescheinigungende;BOOL PROC
+sonderwertenachpruefungsbescheinigung:initialisieresonderwerte;sucheschueler;
+sonderwertfuerdenadressaten;sonderwerteschuelerdaten;sonderwertartdeszugangs;
+sonderwertfuerdiejahrgangsstufe;sonderwertparagraph;
+sonderwertfuerdasnachpruefungsfach;sonderwertfuerbemerkung;TRUE .
+sucheschueler:inittupel(dnrschueler);uebernehmeentsprdaten;search(dnrschueler
+,TRUE ).uebernehmeentsprdaten:putwert(fnrsufamnames,wert(fnrhjdfamnames));
+putwert(fnrsurufnames,wert(fnrhjdrufnames));putwert(fnrsugebdatums,wert(
+fnrhjdgebdats)).sonderwertfuerdenadressaten:adressat((wert(fnrsuvornames)SUB
+1)+punkt+trennsymbol+wert(fnrsufamnames)).sonderwerteschuelerdaten:
+setzesonderwert(swzuname,wert(fnrsufamnames));setzesonderwert(
+swnamenszusaetze,wert(fnrsunamenszusatzs));setzesonderwert(swvornamen,wert(
+fnrsuvornames));setzesonderwert(swgeschlecht,wert(fnrsugeschlechts));
+setzesonderwert(swgeburtsdatum,wert(fnrsugebdatums));#setzesonderwert(
+swstrhausnr,wert(fnrsustrnrs));setzesonderwert(swplzort,wert(fnrsuplzorts));
+IF volljaehrig(wert(fnrsugebdatums))THEN setzesonderwert(swvollj,vollj);ELSE
+setzesonderwert(swvollj,minderj)FI #.sonderwertartdeszugangs:IF #wert(
+fnrsuartzugang)="x"#bestandenTHEN setzesonderwert(swzugang,"")ELSE
+setzesonderwert(swzugang,"x")FI .bestanden:TEXT VAR nachpruefergebnis:=wert(
+fnrhjdnacherg);(length(nachpruefergebnis)>1CAND int(nachpruefergebnis)>=4)
+COR (length(nachpruefergebnis)=1CAND int(nachpruefergebnis)<=4).
+sonderwertfuerdiejahrgangsstufe:#IF wert(fnrsuartzugang)="x"THEN
+setzesonderwert(swjgstnachpruefung,text(int(wert(fnrsujgst))-1))ELSE
+setzesonderwert(swjgstnachpruefung,wert(fnrsujgst))FI #setzesonderwert(
+swjgstnachpruefung,wert(fnrhjdjgst)).sonderwertparagraph:TEXT CONST
+paragraphsek1:="Nr. 4 der Verordnung über die Abschlüsse und "+
+"die Versetzung in Sekundarstufe 1 (AVO - SI)",paragraphsek2:=
+"Nr. 11 der Verordnung über den Bildungsgang"+
+" und die Abiturprüfung der gymnasialen Oberstufe";IF int(wert(fnrhjdjgst))<
+jgst11THEN setzesonderwert(swparagraph,paragraphsek1)ELSE setzesonderwert(
+swparagraph,paragraphsek2)FI .sonderwertfuerdasnachpruefungsfach:TEXT VAR
+fachschluessel:="";#TEXT VAR nachpruefungsfach:="";#TEXT VAR langtext:="";
+fachschluessel:=wert(fnrhjdnachfach);langtext:=langtextzufachschluessel(
+fachschluessel);setzesonderwert(swnachpruefungsfach,langtext).
+sonderwertfuerbemerkung:sucheschluesselbemerkung;
+suchelangtextzubemerkungundsetzesonderwert.sucheschluesselbemerkung:TEXT VAR
+bemerkungsschluessel:="";bemerkungsschluessel:=wert(fnrhjdbemerk).
+suchelangtextzubemerkungundsetzesonderwert:#INT VAR bestandsid:=0;systemdbon;
+putwert(fnrsysbestand,"c02 bemerkungen");search(dnrsysbestaende,TRUE );IF
+dbstatus=okTHEN bestandsid:=intwert(fnrsysbestandsid)FI ;systemdboff;#putwert
+(fnrschlsachgebiet,"c02 bemerkungen");putwert(fnrschlschluessel,
+bemerkungsschluessel);search(dnrschluessel,TRUE );IF dbstatus=okTHEN
+setzesonderwert(swbemerkung,wert(fnrschllangtext))ELSE dbstatus(ok);
+setzesonderwert(swbemerkung,niltext)FI .END PROC
+sonderwertenachpruefungsbescheinigung;PROC nachpruefungsbescheinigungstarten:
+IF erstehalbjahrTHEN lesemaskenwerte;IF maskenwerteinordnungTHEN IF
+beibestandsauswahlauswahlzulaessigTHEN #bildebestand;IF status<>0AND NOT
+einzelbearbeitungTHEN meldenichterstellbar;zurueckzumdialogELSE #
+startenausfuehren#FI #ELSE meldeunzulaessigeschuelergruppenauswahl;
+zurueckzumdialogFI ELSE meldedenfehler;zurueckzumdialogFI ELSE
+meldefalscheshalbjahr;zurueckzumdialogFI .meldefalscheshalbjahr:LET
+ersteshalbjahr="1";standardmeldung(fehlerhalbjnr,ersteshalbjahr+meldkennz).
+lesemaskenwerte:schuelerschluessel1:=standardmaskenfeld(namefeldnr);
+schuelerschluessel2:=standardmaskenfeld(vornamefeldnr);schuelerschluessel3:=
+standardmaskenfeld(geburtsdatumfeldnr);bestandsschluessel1:=
+standardmaskenfeld(jgstfeldnr);bestandsschluessel2:=standardmaskenfeld(
+zugtutorfeldnr);anschreibenzeigen:=standardmaskenfeld(bildschirmfeldnr)<>
+niltext.maskenwerteinordnung:IF NOT ((standardmaskenfeld(bildschirmfeldnr)<>
+niltext)XOR (standardmaskenfeld(druckerfeldnr)<>niltext))THEN infeld(
+bildschirmfeldnr);FALSE ELIF ((schuelerschluessel1<>niltextAND
+bestandsschluessel1+bestandsschluessel2=niltextAND (schuelerschluessel2<>
+niltextXOR (schuelerschluessel2=niltextAND schuelerschluessel3=niltext)))XOR
+(schuelerschluessel1+schuelerschluessel2+schuelerschluessel3=niltextAND
+bestandsschluessel1<>niltext)XOR (schuelerschluessel1+schuelerschluessel2+
+schuelerschluessel3+bestandsschluessel1+bestandsschluessel2=niltext))THEN
+TRUE ELSE infeld(namefeldnr);FALSE FI .meldedenfehler:standardmeldung(
+fehlermeldnr,niltext).zurueckzumdialog:return(vater).
+meldeunzulaessigeschuelergruppenauswahl:standardmeldung(
+dieauswahlderjgstistnichtzulaessignr,niltext).
+beibestandsauswahlauswahlzulaessig:(bestandsschluessel1=niltext)OR (
+bestandsschluessel1<>niltextCAND int(bestandsschluessel1)<=maxjgstCAND int(
+bestandsschluessel1)>=minjgst).#einzelbearbeitung:schuelerschluessel1<>
+niltext.startenausfuehren:initialisieredruckerfueranschreiben;
+anschreibenstart(endbestand,vordruck,dbmnachpruefungsbescheinigung,
+schuelerschluessel1,schuelerschluessel2+schuelerschluessel3,anschreibenzeigen
+,laengedbmnachpruefungsbescheinigung,BOOL PROC
+sonderwertenachpruefungsbescheinigung);.END PROC
+nachpruefungsbescheinigungstarten;#startenausfuehren:
+initialisieredruckerfueranschreiben;dbstatus(ok);parsenooffields(44);
+indexnummerbestimmen;uebernimmentsprechendedaten;anschreibenstart(
+aktuellerindex,vordruck,anschreibenzeigen,(schuelerschluessel1+
+schuelerschluessel2)<>"",BOOL PROC sonderwertenachpruefungsbescheinigung,
+BOOL PROC multistopnachpruefbesch).uebernimmentsprechendedaten:putwert(
+fnrhjdsj,#aktuellesschuljahr#vorigesschuljahr);putintwert(fnrhjdhj,2);putwert
+(fnrhjdfamnames,schuelerschluessel1);putwert(fnrhjdrufnames,
+schuelerschluessel2);putwert(fnrhjdgebdats,datumskonversion(
+schuelerschluessel3));putwert(fnrhjdjgst,bestandsschluessel1);putwert(
+fnrhjdkennung,bestandsschluessel2);putwert(fnrhjdversetzung,
+schluesselnachpruefung).indexnummerbestimmen:IF schuelerschluessel1<>niltext
+THEN aktuellerindex:=#dnrhjd#ixhjdverfamsjhjrufgebELSE aktuellerindex:=
+ixhjdversjhjjgstkennFI .END PROC nachpruefungsbescheinigungstarten;BOOL PROC
+multistopnachpruefbesch:BOOL VAR b:=wert(fnrhjdsj)=#aktuellesschuljahr#
+vorigesschuljahrCAND intwert(fnrhjdhj)=2CAND wert(fnrhjdversetzung)=
+schluesselnachpruefung;IF bTHEN weitereueberpruefungFI ;b.
+weitereueberpruefung:IF aktuellerindex=ixhjdverfamsjhjrufgebTHEN
+ueberpruefenamenELSE IF bestandsschluessel1<>""THEN ueberpruefejgstFI FI .
+ueberpruefenamen:b:=wert(fnrhjdfamnames)=schuelerschluessel1CAND (
+schuelerschluessel2=""COR wert(fnrhjdrufnames)=schuelerschluessel2)CAND (
+schuelerschluessel3=""COR wert(fnrhjdgebdats)=datumskonversion(
+schuelerschluessel3)).ueberpruefejgst:b:=bestandsschluessel1=wert(fnrhjdjgst)
+CAND (bestandsschluessel2=""COR bestandsschluessel2=wert(fnrhjdkennung)).
+ENDPROC multistopnachpruefbesch;END PACKET anschrnachpruefungsbescheinigung;
+
diff --git a/app/schulis/2.2.1/src/1.anschr.nachpruefungszulassung b/app/schulis/2.2.1/src/1.anschr.nachpruefungszulassung
new file mode 100644
index 0000000..871d9b6
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.anschr.nachpruefungszulassung
@@ -0,0 +1,146 @@
+PACKET anschrnachpruefungszulassungDEFINES nachpruefungszulassungeingang,
+nachpruefungszulassungende,nachpruefungszulassungstarten,
+sonderwertenachpruefungszulassung,multistopnachpruefler:INT VAR
+aktuellerindex;TEXT VAR schuelerschluessel1,schuelerschluessel2,
+schuelerschluessel3,bestandsschluessel1,bestandsschluessel2,
+aktuellesschuljahr;LET schluesselnachpruefung="n";LET vordruck=
+"vordruck nachpruefungszulassung";LET maske="ms anschr schueler o. klasse";
+LET namefeldnr=2,vornamefeldnr=3,geburtsdatumfeldnr=4,jgstfeldnr=5,
+zugtutorfeldnr=6,bildschirmfeldnr=7,druckerfeldnr=8;LET niltext="",
+trennsymbol=" ",vollj="v",minderj="m",oder=" oder ",punkt=".",meldkennz="#",
+fehlerhalbjnr=167,fehlermeldnr=56,#wartemeldnr=69,#
+dieauswahlderjgstistnichtzulaessignr=146,#
+anschreibenkannnichterstelltwerdennr=124,#vater=1;LET minjgst=5,jgst11=11,
+maxjgst=13;LET swschulhalbjahr=509,swzuname=511,swnamenszusaetze=512,
+swvornamen=513,swgeschlecht=514,swvollj=515,swstrhausnr=517,swplzort=518,
+swnameerzieher=519,swnamenszusaetzeerzieher=520,swvornameerzieher=521,
+swstrhausnrerzieher=522,swplzorterzieher=523,swparagraph=524,
+swnachpruefungsfaecher=525,swbemerkung=526;LET maxanzahlderfaecher=100,
+karteifachlangtext=2,fachschluesselindex=1,fachlangtextindex=2;ROW
+maxanzahlderfaecherROW karteifachlangtextTEXT VAR faecherkartei;INT VAR
+anzahlderfaecher:=0;BOOL VAR eingang:=TRUE ,zweitehalbjahr:=TRUE ,
+anschreibenzeigen;PROC bildefaecherbestand:LET anzstacktupel=25;
+initialisierefaecherkartei;vorbereitung;leseschleife.
+initialisierefaecherkartei:INT VAR zaehler1,zaehler2;FOR zaehler1FROM 1UPTO
+maxanzahlderfaecherREP FOR zaehler2FROM 1UPTO karteifachlangtextREP
+faecherkartei(zaehler1)(zaehler2):=niltextPER PER .vorbereitung:BOOL VAR
+wenigergelesen:=FALSE ;INT VAR anztupel;inittupel(dnrfaecher);anztupel:=
+anzstacktupel;anzahlderfaecher:=0;multisearchforward(dnrfaecher,anztupel);
+evtweniger.leseschleife:WHILE anztupel>0CAND anzahlderfaecher<=
+maxanzahlderfaecherREP anzahlderfaecherINCR 1;anztupelDECR 1;multisucc;
+faecherkartei(anzahlderfaecher)(1):=wert(dnrfaecher+1);faecherkartei(
+anzahlderfaecher)(2):=wert(dnrfaecher+2);IF anztupel=0CAND NOT wenigergelesen
+THEN anztupel:=anzstacktupel;multisucc(dnrfaecher,anztupel);evtwenigerFI PER
+.evtweniger:IF anztupel<anzstacktupelTHEN wenigergelesen:=TRUE FI .END PROC
+bildefaecherbestand;TEXT PROC langtextzufachschluessel(TEXT CONST schluessel)
+:INT VAR zaehler:=1;TEXT VAR langtext:="";WHILE zaehler<anzahlderfaecherCAND
+schluessel<>faecherkartei(zaehler)(fachschluesselindex)REP zaehlerINCR 1PER ;
+IF schluessel=faecherkartei(zaehler)(fachschluesselindex)THEN langtext:=
+faecherkartei(zaehler)(fachlangtextindex)FI ;langtextEND PROC
+langtextzufachschluessel;PROC nachpruefungszulassungeingang:standardvproc(
+maske);IF eingangTHEN setzesonderwerteschulkenndaten;
+feststellenobzweitehalbjahr;IF zweitehalbjahrTHEN bildefaecherbestand;FI ;
+aendernderflaggeFI .feststellenobzweitehalbjahr:zweitehalbjahr:=int(
+sonderwert(swschulhalbjahr))=2.aendernderflagge:eingang:=FALSE .END PROC
+nachpruefungszulassungeingang;PROC nachpruefungszulassungende:eingang:=TRUE ;
+enter(2)END PROC nachpruefungszulassungende;BOOL PROC
+sonderwertenachpruefungszulassung:initialisieresonderwerte;sucheschueler;
+sonderwertfuerdenadressaten;sonderwerteschuelerdaten;sonderwerteerzieherdaten
+;sonderwertparagraph;sonderwertfuerdienachpruefungsfaecher;
+sonderwertfuerbemerkung;TRUE .sucheschueler:inittupel(dnrschueler);
+uebernehmeentsprdaten;search(dnrschueler,TRUE ).uebernehmeentsprdaten:putwert
+(fnrsufamnames,wert(fnrhjdfamnames));putwert(fnrsurufnames,wert(
+fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats)).
+sonderwertfuerdenadressaten:adressat((wert(fnrsuvornames)SUB 1)+punkt+
+trennsymbol+wert(fnrsufamnames)).sonderwerteschuelerdaten:setzesonderwert(
+swzuname,wert(fnrsufamnames));setzesonderwert(swnamenszusaetze,wert(
+fnrsunamenszusatzs));setzesonderwert(swvornamen,wert(fnrsuvornames));
+setzesonderwert(swgeschlecht,wert(fnrsugeschlechts));setzesonderwert(
+swstrhausnr,wert(fnrsustrnrs));setzesonderwert(swplzort,wert(fnrsuplzorts));
+IF volljaehrig(wert(fnrsugebdatums))THEN setzesonderwert(swvollj,vollj);ELSE
+setzesonderwert(swvollj,minderj)FI .sonderwerteerzieherdaten:setzesonderwert(
+swnameerzieher,wert(fnrsufamnamee));setzesonderwert(swnamenszusaetzeerzieher,
+wert(fnrsunamenszusatze));setzesonderwert(swvornameerzieher,wert(
+fnrsuvornamee));sucheerzieheradresse;setzesonderwert(swstrhausnrerzieher,wert
+(fnrsustrnrs));setzesonderwert(swplzorterzieher,wert(fnrsuplzorts));.
+sucheerzieheradresse:#IF wert(fnradresse)<>""THEN putwert(fnradrkuerzel,wert(
+fnradresse));search(dnradressen,TRUE );IF dbstatus=okTHEN
+uebernehmeerzieheradresseELSE dbstatus(ok)FI FI #IF wert(fnrsuplzorte)<>""
+THEN uebernehmeerzieheradresseFI .uebernehmeerzieheradresse:putwert(
+fnrsustrnrs,wert(fnrsustrnre));putwert(fnrsuplzorts,wert(fnrsuplzorte)).
+sonderwertparagraph:TEXT CONST paragraphsek1:=
+"Nr. 4 der Verordnung über die Abschlüsse und "+
+"die Versetzung in Sekundarstufe 1 (AVO - SI)",paragraphsek2:=
+"Nr. 11 der Verordnung über den Bildungsgang"+
+" und die Abiturprüfung der gymnasialen Oberstufe";IF int(wert(fnrhjdjgst))<
+jgst11THEN setzesonderwert(swparagraph,paragraphsek1)ELSE setzesonderwert(
+swparagraph,paragraphsek2)FI .sonderwertfuerdienachpruefungsfaecher:TEXT VAR
+fachschluessel:="";TEXT VAR nachpruefungsfach:="";TEXT VAR langtext:="";
+bestimmungderfaecherindennachpruefungmoeglich;setzesonderwert(
+swnachpruefungsfaecher,nachpruefungsfach).
+bestimmungderfaecherindennachpruefungmoeglich:fachschluessel:=wert(
+fnrhjdnachfach1);langtext:=langtextzufachschluessel(fachschluessel);IF
+langtext<>niltextTHEN nachpruefungsfach:=langtext;fachschluessel:=wert(
+fnrhjdnachfach2);langtext:=langtextzufachschluessel(fachschluessel);IF
+langtext<>niltextTHEN nachpruefungsfach:=nachpruefungsfach+oder+langtext;
+fachschluessel:=wert(fnrhjdnachfach3);langtext:=langtextzufachschluessel(
+fachschluessel);IF langtext<>niltextTHEN nachpruefungsfach:=nachpruefungsfach
++oder+langtextFI FI FI .sonderwertfuerbemerkung:sucheschluesselbemerkung;
+suchelangtextzubemerkungundsetzesonderwert.sucheschluesselbemerkung:TEXT VAR
+bemerkungsschluessel:="";bemerkungsschluessel:=wert(fnrhjdbemnach).
+suchelangtextzubemerkungundsetzesonderwert:putwert(fnrschlsachgebiet,
+"c02 bemerkungen");putwert(fnrschlschluessel,bemerkungsschluessel);search(
+dnrschluessel,TRUE );IF dbstatus=okTHEN setzesonderwert(swbemerkung,wert(
+fnrschllangtext))ELSE dbstatus(ok);setzesonderwert(swbemerkung,niltext)FI .
+END PROC sonderwertenachpruefungszulassung;PROC nachpruefungszulassungstarten
+:IF zweitehalbjahrTHEN lesemaskenwerte;IF maskenwerteinordnungTHEN IF
+beibestandsauswahlauswahlzulaessigTHEN startenausfuehrenELSE
+meldeunzulaessigeschuelergruppenauswahl;zurueckzumdialogFI ELSE
+meldedenfehler;zurueckzumdialogFI ELSE meldefalscheshalbjahr;zurueckzumdialog
+FI .meldefalscheshalbjahr:LET zweiteshalbjahr="2";standardmeldung(
+fehlerhalbjnr,zweiteshalbjahr+meldkennz).lesemaskenwerte:schuelerschluessel1
+:=standardmaskenfeld(namefeldnr);schuelerschluessel2:=standardmaskenfeld(
+vornamefeldnr);schuelerschluessel3:=standardmaskenfeld(geburtsdatumfeldnr);
+bestandsschluessel1:=standardmaskenfeld(jgstfeldnr);bestandsschluessel2:=
+standardmaskenfeld(zugtutorfeldnr);anschreibenzeigen:=standardmaskenfeld(
+bildschirmfeldnr)<>niltext.maskenwerteinordnung:IF NOT ((standardmaskenfeld(
+bildschirmfeldnr)<>niltext)XOR (standardmaskenfeld(druckerfeldnr)<>niltext))
+THEN infeld(bildschirmfeldnr);FALSE ELIF ((schuelerschluessel1<>niltextAND
+bestandsschluessel1+bestandsschluessel2=niltextAND (schuelerschluessel2<>
+niltextXOR (schuelerschluessel2=niltextAND schuelerschluessel3=niltext)))XOR
+(schuelerschluessel1+schuelerschluessel2+schuelerschluessel3=niltextAND
+bestandsschluessel1<>niltext)XOR (schuelerschluessel1+schuelerschluessel2+
+schuelerschluessel3+bestandsschluessel1+bestandsschluessel2=niltext))THEN
+TRUE ELSE infeld(namefeldnr);FALSE FI .meldedenfehler:standardmeldung(
+fehlermeldnr,niltext).zurueckzumdialog:return(vater).
+meldeunzulaessigeschuelergruppenauswahl:standardmeldung(
+dieauswahlderjgstistnichtzulaessignr,niltext).
+beibestandsauswahlauswahlzulaessig:(bestandsschluessel1=niltext)OR (
+bestandsschluessel1<>niltextCAND int(bestandsschluessel1)<=maxjgstCAND int(
+bestandsschluessel1)>=minjgst).startenausfuehren:
+initialisieredruckerfueranschreiben;dbstatus(ok);parsenooffields(30);
+indexnummerbestimmen;uebernimmentsprechendedaten;anschreibenstart(
+aktuellerindex,vordruck,anschreibenzeigen,(schuelerschluessel1+
+schuelerschluessel2)<>"",BOOL PROC sonderwertenachpruefungszulassung,BOOL
+PROC multistopnachpruefler).uebernimmentsprechendedaten:aktuellesschuljahr:=
+schulkenndatum("Schuljahr");putwert(fnrhjdsj,aktuellesschuljahr);putintwert(
+fnrhjdhj,2);putwert(fnrhjdfamnames,schuelerschluessel1);putwert(
+fnrhjdrufnames,schuelerschluessel2);putwert(fnrhjdgebdats,datumskonversion(
+schuelerschluessel3));putwert(fnrhjdjgst,bestandsschluessel1);putwert(
+fnrhjdkennung,bestandsschluessel2);putwert(fnrhjdversetzung,
+schluesselnachpruefung).indexnummerbestimmen:IF schuelerschluessel1<>niltext
+THEN aktuellerindex:=#dnrhalbjahresdaten#ixhjdverfamsjhjrufgebELSE
+aktuellerindex:=ixhjdversjhjjgstkennFI .END PROC
+nachpruefungszulassungstarten;BOOL PROC multistopnachpruefler:BOOL VAR b:=
+wert(fnrhjdsj)=aktuellesschuljahrCAND intwert(fnrhjdhj)=2CAND wert(
+fnrhjdversetzung)=schluesselnachpruefung;IF bTHEN weitereueberpruefungFI ;b.
+weitereueberpruefung:IF aktuellerindex=ixhjdverfamsjhjrufgebTHEN
+ueberpruefenamenELSE IF bestandsschluessel1<>""THEN ueberpruefejgstFI FI .
+ueberpruefenamen:b:=wert(fnrhjdfamnames)=schuelerschluessel1CAND (
+schuelerschluessel2=""COR wert(fnrhjdrufnames)=schuelerschluessel2)CAND (
+schuelerschluessel3=""COR wert(fnrhjdgebdats)=datumskonversion(
+schuelerschluessel3)).ueberpruefejgst:b:=int(bestandsschluessel1)=intwert(
+fnrhjdjgst)CAND (bestandsschluessel2=""COR bestandsschluessel2=wert(
+fnrhjdkennung)).ENDPROC multistopnachpruefler;END PACKET
+anschrnachpruefungszulassung;
+
diff --git a/app/schulis/2.2.1/src/1.anschr.schulbescheinigung b/app/schulis/2.2.1/src/1.anschr.schulbescheinigung
new file mode 100644
index 0000000..16686b2
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.anschr.schulbescheinigung
@@ -0,0 +1,61 @@
+PACKET anschrschulbescheinigungDEFINES schulbescheinigungeingang,
+schulbescheinigungstarten,sonderwerteschulbescheinigung,
+multistopschulbescheinigung:TEXT VAR schuelerschluessel1,schuelerschluessel2,
+schuelerschluessel3,bestandsschluessel1,bestandsschluessel2;BOOL VAR
+anschreibenzeigen;INT VAR aktuellerindex,eingabestatus;LET vordruck=
+"vordruck schulbescheinigung";LET trennsymbol=" ",punkt=".";LET maske=
+"ms auswahl schueler o. klasse",namefeldnr=2,vornamefeldnr=3,
+geburtsdatumfeldnr=4,jgstfeldnr=5,zugtutorfeldnr=6,bildschirmfeldnr=7,
+druckerfeldnr=8,niltext="",fehlermeldnr=56,wartemeldnr=69,datumfehler=157,
+vater=1;PROC schulbescheinigungeingang:standardvproc(maske)END PROC
+schulbescheinigungeingang;BOOL PROC sonderwerteschulbescheinigung:adressat((
+wert(fnrsurufnames)SUB 1)+punkt+trennsymbol+wert(fnrsufamnames));TRUE END
+PROC sonderwerteschulbescheinigung;PROC schulbescheinigungstarten:
+lesemaskenwerte;IF NOT (auswahldruckeroderbildschirmok)THEN meldedenfehler;
+infeld(bildschirmfeldnr);zurueckzumdialogELSE IF schluesselmitdatumangegeben
+THEN IF schuelerschluessel3okTHEN indexnrbilden;startenausfuehrenELSE
+standardmeldung(datumfehler,niltext);infeld(geburtsdatumfeldnr);
+zurueckzumdialogFI ;ELSE IF (alleschuelergewaehltXOR schuelergruppegewaehlt
+XOR einschuelerohnedatumgewaehlt)THEN indexnrbilden;startenausfuehrenELSE
+meldedenfehler;zurueckzumdialogFI ;FI ;FI .lesemaskenwerte:
+schuelerschluessel1:=standardmaskenfeld(namefeldnr);schuelerschluessel2:=
+standardmaskenfeld(vornamefeldnr);schuelerschluessel3:=standardmaskenfeld(
+geburtsdatumfeldnr);bestandsschluessel1:=standardmaskenfeld(jgstfeldnr);
+bestandsschluessel2:=standardmaskenfeld(zugtutorfeldnr);anschreibenzeigen:=
+standardmaskenfeld(bildschirmfeldnr)<>niltext.auswahldruckeroderbildschirmok:
+(standardmaskenfeld(bildschirmfeldnr)<>niltext)XOR (standardmaskenfeld(
+druckerfeldnr)<>niltext).schluesselmitdatumangegeben:((bestandsschluessel1+
+bestandsschluessel2)=niltextAND schuelerschluessel1<>niltextAND
+schuelerschluessel2<>niltextAND schuelerschluessel3<>niltext).
+alleschuelergewaehlt:(schuelerschluessel1+schuelerschluessel2+
+schuelerschluessel3+bestandsschluessel1+bestandsschluessel2)=niltext.
+schuelergruppegewaehlt:bestandsschluessel1<>niltextAND (schuelerschluessel1+
+schuelerschluessel2+schuelerschluessel3=niltext).einschuelerohnedatumgewaehlt
+:(bestandsschluessel1+bestandsschluessel2+schuelerschluessel3)=niltextAND
+schuelerschluessel1<>niltext.schuelerschluessel3ok:standardpruefe(6,4,0,0,
+niltext,eingabestatus);IF NOT (eingabestatus=0)THEN FALSE ELSE TRUE FI .
+meldedenfehler:standardmeldung(fehlermeldnr,niltext).zurueckzumdialog:return(
+vater).indexnrbilden:standardmeldung(wartemeldnr,niltext);IF
+bestandsschluessel1<>niltextTHEN IF bestandsschluessel2<>niltextTHEN
+aktuellerindex:=ixsustatjgstzugELSE aktuellerindex:=ixsustatjgstFI ELSE
+aktuellerindex:=dnrschuelerFI .startenausfuehren:
+initialisieredruckerfueranschreiben;#anschreibenstart(bestand,vordruck,
+dbmschulbescheinigung,schuelerschluessel1,schuelerschluessel2+
+schuelerschluessel3,anschreibenzeigen,laengedbmschulbescheinigung,BOOL PROC
+sonderwerteschulbescheinigung);#dbstatus(ok);inittupel(dnrschueler);
+parsenooffields(19);uebernimmentsprechendedaten;anschreibenstart(
+aktuellerindex,vordruck,anschreibenzeigen,(schuelerschluessel1+
+schuelerschluessel2)<>"",BOOL PROC sonderwerteschulbescheinigung,BOOL PROC
+multistopschulbescheinigung).uebernimmentsprechendedaten:putwert(
+fnrsufamnames,schuelerschluessel1);putwert(fnrsurufnames,schuelerschluessel2)
+;putwert(fnrsugebdatums,datumskonversion(schuelerschluessel3));putwert(
+fnrsusgrpjgst,bestandsschluessel1);putwert(fnrsusgrpzugtut,
+bestandsschluessel2);putwert(fnrsustatuss,"ls").END PROC
+schulbescheinigungstarten;BOOL PROC multistopschulbescheinigung:BOOL VAR b:=
+FALSE ;IF wert(fnrsustatuss)="ls"THEN IF aktuellerindex<>dnrschuelerTHEN IF
+aktuellerindex=ixsustatjgstTHEN b:=bestandsschluessel1=wert(fnrsusgrpjgst)
+ELSE b:=(bestandsschluessel1=wert(fnrsusgrpjgst)CAND bestandsschluessel2=wert
+(fnrsusgrpzugtut))FI ELSE b:=(schuelerschluessel1<>niltextCAND dbstatus=ok)
+COR (schuelerschluessel1=niltextCAND TRUE )FI ;FI ;bENDPROC
+multistopschulbescheinigung;END PACKET anschrschulbescheinigung;
+
diff --git a/app/schulis/2.2.1/src/1.anschr.wiederholer b/app/schulis/2.2.1/src/1.anschr.wiederholer
new file mode 100644
index 0000000..8de4b25
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.anschr.wiederholer
@@ -0,0 +1,91 @@
+PACKET anschrwiederholerDEFINES wiederholereingang,wiederholerstarten,
+sonderwertewiederholer,multistopwiederholer:INT VAR aktuellerindex;TEXT VAR
+schuelerschluessel1,schuelerschluessel2,schuelerschluessel3,
+bestandsschluessel1,bestandsschluessel2,aktuellesschuljahr:="";LET vordruck=
+"vordruck fuer wiederholer";LET swindexvolljminderj=511,
+swindexminderjmaennlweibl=512,swindexnichterreichtejgst=513;LET jgst13=13,
+weibl="w",maennl="m",minderj="m",vollj="v",niltext="",trennsymbol=" ",punkt=
+".",schluesselwiederholer="w";LET maske="ms anschr schueler o. klasse";LET
+namefeldnr=2,vornamefeldnr=3,geburtsdatumfeldnr=4,jgstfeldnr=5,zugtutorfeldnr
+=6,bildschirmfeldnr=7,druckerfeldnr=8;LET fehlermeldnr=56,nurimzweitenhj=194,
+#wartemeldnr=69,anschreibenkannnichterstelltwerdennr=124,#
+dieauswahlderjgstistnichtzulaessignr=146,vater=1;LET minjgst=5,maxjgst=13;
+PROC wiederholereingang:standardvproc(maske)END PROC wiederholereingang;BOOL
+PROC sonderwertewiederholer:BOOL VAR erstellbar:=TRUE ;sucheschuelerdaten;
+sonderwertfuervolljoderminderjundmaennlweibl;sonderwertfuernichterreichtejgst
+;sonderwertfueradressaten;erstellbar#keitsangabe#.sucheschuelerdaten:
+inittupel(dnrschueler);uebernimmschuelerdaten;search(dnrschueler,TRUE ).
+uebernimmschuelerdaten:putwert(fnrsufamnames,wert(fnrhjdfamnames));putwert(
+fnrsurufnames,wert(fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats
+)).sonderwertfuervolljoderminderjundmaennlweibl:IF volljaehrig(wert(
+fnrsugebdatums))THEN setzesonderwert(swindexvolljminderj,vollj);
+setzesonderwert(swindexminderjmaennlweibl,niltext)ELSE setzesonderwert(
+swindexvolljminderj,minderj);IF wert(fnrsugeschlechts)=weiblTHEN
+setzesonderwert(swindexminderjmaennlweibl,weibl)ELSE setzesonderwert(
+swindexminderjmaennlweibl,maennl)FI ;setzeerzieheradresseFI .
+setzeerzieheradresse:#IF intwert(fnradresse)<>0THEN putwert(fnradrkuerzel,
+wert(fnradresse));search(dnradressen,TRUE );IF dbstatus=okTHEN putwert(
+fnrsustrnrs,wert(fnradrstrasse));putwert(fnrsuplzorts,wert(fnradrort))FI FI #
+IF wert(fnrsuplzorte)<>""THEN putwert(fnrsustrnrs,wert(fnrsustrnre));putwert(
+fnrsuplzorts,wert(fnrsuplzorts))FI .sonderwertfuernichterreichtejgst:
+setzesonderwert(swindexnichterreichtejgst,text(intwert(fnrhjdjgst)+1));
+erstellbar:=NOT (intwert(fnrhjdjgst)=jgst13).sonderwertfueradressaten:
+adressat((wert(fnrsurufnames)SUB 1)+punkt+trennsymbol+wert(fnrsufamnames));.#
+erstellbarkeitsangabe:IF intwert(fnrzugang)=schluesselwiederholerTHEN
+erstellbar:=wert(dbmindexversetzung,zweiteteilsegment)=schluesselwiederholer
+AND erstellbarELSE erstellbar:=(dbwert(dbmindexversetzung,ersteteilsegment)=
+schluesselwiederholer)AND erstellbarFI ;erstellbar.#END PROC
+sonderwertewiederholer;PROC wiederholerstarten:IF zweiteshjTHEN weiterFI .
+weiter:lesemaskenwerte;IF maskenwerteinordnungTHEN IF
+beibestandsauswahlauswahlzulaessigTHEN #bestandbilden;IF status<>0THEN
+meldenichterstellbar;zurueckzumdialogELSE #indexnummerbestimmen;
+startenausfuehren#FI #ELSE meldeunzulaessigeschuelergruppenauswahl;
+zurueckzumdialogFI ELSE meldedenfehler;zurueckzumdialogFI .zweiteshj:IF int(
+schulkenndatum("Schulhalbjahr"))=1THEN standardmeldung(nurimzweitenhj,"2.#");
+zurueckzumdialog;FALSE ELSE TRUE FI .lesemaskenwerte:schuelerschluessel1:=
+standardmaskenfeld(namefeldnr);schuelerschluessel2:=standardmaskenfeld(
+vornamefeldnr);schuelerschluessel3:=standardmaskenfeld(geburtsdatumfeldnr);
+bestandsschluessel1:=standardmaskenfeld(jgstfeldnr);bestandsschluessel2:=
+standardmaskenfeld(zugtutorfeldnr);BOOL CONST anschreibenzeigen:=
+standardmaskenfeld(bildschirmfeldnr)<>niltext.maskenwerteinordnung:IF NOT ((
+standardmaskenfeld(bildschirmfeldnr)<>niltext)XOR (standardmaskenfeld(
+druckerfeldnr)<>niltext))THEN infeld(bildschirmfeldnr);FALSE ELIF ((
+schuelerschluessel1<>niltextAND bestandsschluessel1+bestandsschluessel2=
+niltextAND (schuelerschluessel2<>niltextXOR (schuelerschluessel2=niltextAND
+schuelerschluessel3=niltext)))XOR (schuelerschluessel1+schuelerschluessel2+
+schuelerschluessel3=niltextAND bestandsschluessel1<>niltext)XOR (
+schuelerschluessel1+schuelerschluessel2+schuelerschluessel3+
+bestandsschluessel1+bestandsschluessel2=niltext))THEN TRUE ELSE infeld(
+namefeldnr);FALSE FI .meldedenfehler:standardmeldung(fehlermeldnr,niltext).
+zurueckzumdialog:return(vater).#meldenichterstellbar:standardmeldung(
+anschreibenkannnichterstelltwerdennr,niltext);.#
+meldeunzulaessigeschuelergruppenauswahl:standardmeldung(
+dieauswahlderjgstistnichtzulaessignr,niltext).
+beibestandsauswahlauswahlzulaessig:(bestandsschluessel1=niltext)OR (
+bestandsschluessel1<>niltextCAND int(bestandsschluessel1)<maxjgstCAND int(
+bestandsschluessel1)>=minjgst).startenausfuehren:
+initialisieredruckerfueranschreiben;dbstatus(ok);inittupel(dnrhalbjahresdaten
+);parsenooffields(28);uebernimmentsprechendedaten;anschreibenstart(
+aktuellerindex,vordruck,anschreibenzeigen,(schuelerschluessel1+
+schuelerschluessel2)<>"",BOOL PROC sonderwertewiederholer,BOOL PROC
+multistopwiederholer).uebernimmentsprechendedaten:putwert(fnrhjdfamnames,
+schuelerschluessel1);putwert(fnrhjdrufnames,schuelerschluessel2);putwert(
+fnrhjdgebdats,datumskonversion(schuelerschluessel3));aktuellesschuljahr:=
+schulkenndatum("Schuljahr");putwert(fnrhjdsj,aktuellesschuljahr);putintwert(
+fnrhjdhj,2);putwert(fnrhjdjgst,bestandsschluessel1);putwert(fnrhjdkennung,
+bestandsschluessel2);putwert(fnrhjdversetzung,schluesselwiederholer);.
+indexnummerbestimmen:IF schuelerschluessel1<>niltextTHEN aktuellerindex:=#
+dnrhalbjahresdaten#ixhjdverfamsjhjrufgebELSE aktuellerindex:=
+ixhjdversjhjjgstkennFI .END PROC wiederholerstarten;BOOL PROC
+multistopwiederholer:BOOL VAR b:=wert(fnrhjdsj)=aktuellesschuljahrCAND
+intwert(fnrhjdhj)=2CAND wert(fnrhjdversetzung)=schluesselwiederholer;IF b
+THEN weitereueberpruefungFI ;b.weitereueberpruefung:IF aktuellerindex=
+ixhjdverfamsjhjrufgebTHEN ueberpruefenamenELSE IF bestandsschluessel1<>""
+THEN ueberpruefejgstFI FI .ueberpruefenamen:b:=wert(fnrhjdfamnames)=
+schuelerschluessel1CAND (schuelerschluessel2=""COR wert(fnrhjdrufnames)=
+schuelerschluessel2)CAND (schuelerschluessel3=""COR wert(fnrhjdgebdats)=
+datumskonversion(schuelerschluessel3)).ueberpruefejgst:b:=int(
+bestandsschluessel1)=intwert(fnrhjdjgst)CAND (bestandsschluessel2=""COR
+bestandsschluessel2=wert(fnrhjdkennung)).ENDPROC multistopwiederholer;END
+PACKET anschrwiederholer;
+
diff --git a/app/schulis/2.2.1/src/1.auskunft.betroffene b/app/schulis/2.2.1/src/1.auskunft.betroffene
new file mode 100644
index 0000000..bfa245d
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.auskunft.betroffene
@@ -0,0 +1,259 @@
+PACKET auskbetroffenDEFINES auskbetroffeneingang,auskbetroffenstarten,
+auskbetroffensonderwerte:TEXT VAR schuelerschluessel1,schuelerschluessel2,
+schuelerschluessel3;LET swiort=511,swiwohntbei=512,swilangtextortsteil=513,
+swilangtexterzber=514,swiorterzber=515,swilangtextstaatsan=516,
+swilangtextsprache=517,swilangtextspaetaus=518,swilangtextgeschl=519,
+swilangtextrelizug=520,swilangtextrelizeugnis=521,swiortletzteschule=522,
+swilangtextschulform=523,swiaufbschuljeintrsek2=524,swilangtextzugang=525,
+swilangtextabgang=526,swilangtextabschluss=527,swiortneueschule=528,
+swilangtextfremdspr1=537,swiaufbhjafremdspr1=538,swiaufbhjefremdspr1=539,
+swilangtextfremdspr2=540,swiaufbhjafremdspr2=541,swiaufbhjefremdspr2=542,
+swilangtextfremdspr3=543,swiaufbhjafremdspr3=544,swiaufbhjefremdspr3=545,
+swilangtextfremdspr4=546,swiaufbhjafremdspr4=547,swiaufbhjefremdspr4=548,
+swilangtextreliunt=549,swilangtextkumu=550,swilangtextwpf191=551,
+swilangtextwpf291=552,swilangtextwpf192=553,swilangtextwpf292=554,
+swilangtextwpf1101=555,swilangtextwpf2101=556,swilangtextwpf1102=557,
+swilangtextwpf2102=558,swilangtextag1=559,swiaufbhjaag1=560,swiaufbhjeag1=561
+,swilangtextag2=562,swiaufbhjaag2=563,swiaufbhjeag2=564,swilangtextag3=565,
+swiaufbhjaag3=566,swiaufbhjeag3=567,swistrasseerz=568,switelerz=569,
+swinameletzte=570,swistrasseletzte=571,swinameneue=572,swistrasseneue=573,
+swischulform=582,swilangtextstatus=583;LET suffix1="c02 ortsteil",suffix2=
+"c02 verwandtschaft",suffix3="c02 staaten",suffix4="c02 sprachen",suffix5=
+"c02 relizugehoerigkeit",suffix6="c02 schulart",suffix7="c02 zugang",suffix8=
+"c02 abgang",suffix9="c02 abschluss",suffix12="c02 blauer brief",suffix13=
+"c02 bemerkungen",suffix14="c02 versetzung",namefeldnr=2,vornamefeldnr=3,
+geburtsdatumfeldnr=4,niltext="",null=0,blank=" ",punkt=".",kla="(",klz=")",
+fehlermeld1=56,fehlermeld2=157,wartemeldnr=69,vater=1,maske=
+"ms auswahl schueler o. klasse mit bestand";TEXT VAR aktjgsthj;INT VAR
+aktuellesschuljahr,aktuelleshalbjahr,jahr,halbjahr,eingabestatus;INT VAR
+gewindex;BOOL CONST anschreibenzeigen:=FALSE ;PROC auskbetroffeneingang:
+standardvproc(maske)END PROC auskbetroffeneingang;PROC auskbetroffenstarten:
+lesemaskenwerte;IF schluesselmitdatumangegebenTHEN IF datumseingabekorrekt
+THEN fortfahrenELSE meldungdatumnichtkorrekt;zurueckzumdialogFI ;ELSE IF
+schlüsselohnedatumkorrektTHEN fortfahrenELSE meldungauswahlnichtsinnvoll;
+zurueckzumdialogFI ;FI .schluesselmitdatumangegeben:schuelerschluessel1<>
+niltextCAND schuelerschluessel2<>niltextCAND schuelerschluessel3<>niltext.
+datumseingabekorrekt:standardpruefe(6,4,0,0,niltext,eingabestatus);
+eingabestatus=0.schlüsselohnedatumkorrekt:schuelerschluessel3=niltextCAND
+schuelerschluessel1<>niltext.fortfahren:setzemitseitennummern(TRUE );gewindex
+:=dnrschueler;startenausfuehren.lesemaskenwerte:schuelerschluessel1:=
+standardmaskenfeld(namefeldnr);schuelerschluessel2:=standardmaskenfeld(
+vornamefeldnr);schuelerschluessel3:=standardmaskenfeld(geburtsdatumfeldnr).
+meldungauswahlnichtsinnvoll:standardmeldung(fehlermeld1,niltext).
+meldungdatumnichtkorrekt:standardmeldung(fehlermeld2,niltext).
+zurueckzumdialog:return(vater).startenausfuehren:BOOL CONST einzelbearbeitung
+:=TRUE ;reinitparsing;standardmeldung(wartemeldnr,niltext);#dr20.08.87#
+aktjgsthj:=schulkenndatum("Schulhalbjahr");aktuelleshalbjahr:=int(aktjgsthj);
+aktuellesschuljahr:=int(schulkenndatum("Schuljahr"));convertierehalbjahr;
+setzesonderwerteschulkenndaten;setzewerte;zusammengesetztesanschreiben(
+gewindex,anschreibenzeigen,einzelbearbeitung,BOOL PROC
+auskbetroffensonderwerte,BOOL PROC multistopauskunft,TEXT PROC
+druckdateiauskzusammenstellen).setzewerte:putwert(fnrsufamnames,
+schuelerschluessel1);putwert(fnrsurufnames,schuelerschluessel2);putwert(
+fnrsugebdatums,datumskonversion(schuelerschluessel3)).convertierehalbjahr:IF
+aktuelleshalbjahr=1THEN jahr:=int(subtext(wert(2),1,2));halbjahr:=2ELSE jahr
+:=int(subtext(wert(2),3,4));halbjahr:=1FI .END PROC auskbetroffenstarten;
+BOOL PROC auskbetroffensonderwerte:LET nein="n",ja="j",langtextnein="nein",
+langtextja="ja";initialisieresonderwerte;holediffdaten;adressat((wert(
+fnrsurufnames)SUB 1)+punkt+blank+wert(fnrsufamnames));setzesonderwert(swiort,
+wert(fnrsuplzorts));setzesonderwert(swiorterzber,wert(fnrsuplzorte));
+setzesonderwert(swistrasseerz,wert(fnrsustrnre));setzesonderwert(switelerz,
+wert(fnrsutelnre));sucheadressezurschule(wert(fnrsuskennlschule));
+setzesonderwert(swiortletzteschule,wert(fnrschplzort));setzesonderwert(
+swischulform,wert(fnrschart));setzesonderwert(swilangtextschulform,langtext(
+suffix6,wert(fnrschart)));setzesonderwert(swinameletzte,wert(fnrschname));
+setzesonderwert(swistrasseletzte,wert(fnrschstrnr));sucheadressezurschule(
+wert(fnrsuskennnschule));setzesonderwert(swiortneueschule,wert(fnrschplzort))
+;setzesonderwert(swinameneue,wert(fnrschname));setzesonderwert(swistrasseneue
+,wert(fnrschstrnr));setzesonderwert(swiwohntbei,wohntbei);setzesonderwert(
+swilangtextgeschl,langtextgeschl);setzesonderwert(swilangtextspaetaus,
+langtextspaetaus);setzesonderwert(swilangtextrelizeugnis,langtextrelizeugnis)
+;setzesonderwert(swilangtextstatus,langtextstatus);setzesonderwert(
+swilangtextortsteil,langtext(suffix1,wert(fnrsuortsteils)));setzesonderwert(
+swilangtexterzber,langtext(suffix2,wert(fnrsuverhes)));setzesonderwert(
+swilangtextstaatsan,langtext(suffix3,wert(fnrsustaatsangs)));setzesonderwert(
+swilangtextsprache,langtext(suffix4,wert(fnrsumuttersprache)));
+setzesonderwert(swilangtextrelizug,langtext(suffix5,wert(fnrsureligionsz)));
+setzesonderwert(swilangtextzugang,langtext(suffix7,wert(fnrsuartzugang)));
+setzesonderwert(swilangtextabgang,langtext(suffix8,wert(fnrsuabggrund)));
+setzesonderwert(swilangtextabschluss,langtext(suffix9,wert(fnrsuabschluss)));
+setzesonderwert(swilangtextfremdspr1,langtextfach(wert(fnrdd1fremdfach)));
+setzesonderwert(swilangtextfremdspr2,langtextfach(wert(fnrdd2fremdfach)));
+setzesonderwert(swilangtextfremdspr3,langtextfach(wert(fnrdd3fremdfach)));
+setzesonderwert(swilangtextfremdspr4,langtextfach(wert(fnrdd4fremdfach)));
+setzesonderwert(swilangtextreliunt,langtextfach(wert(fnrddreliunter)));
+setzesonderwert(swilangtextkumu,langtextfach(wert(fnrddkunstmusik)));
+setzesonderwert(swilangtextwpf191,langtextfach(wert(fnrddfach091a)));
+setzesonderwert(swilangtextwpf291,langtextfach(wert(fnrddfach091b)));
+setzesonderwert(swilangtextwpf192,langtextfach(wert(fnrddfach092a)));
+setzesonderwert(swilangtextwpf292,langtextfach(wert(fnrddfach092b)));
+setzesonderwert(swilangtextwpf1101,langtextfach(wert(fnrddfach101a)));
+setzesonderwert(swilangtextwpf2101,langtextfach(wert(fnrddfach101b)));
+setzesonderwert(swilangtextwpf1102,langtextfach(wert(fnrddfach102a)));
+setzesonderwert(swilangtextwpf2102,langtextfach(wert(fnrddfach102b)));
+setzesonderwert(swilangtextag1,langtextfach(wert(fnrddagthema1)));
+setzesonderwert(swilangtextag2,langtextfach(wert(fnrddagthema2)));
+setzesonderwert(swilangtextag3,langtextfach(wert(fnrddagthema3)));
+setzesonderwert(swiaufbschuljeintrsek2,aufbschuljahr(fnrsueintrittinsek));
+setzesonderwert(swiaufbhjafremdspr1,aufbhalbjahr(fnrdd1fremdb));
+setzesonderwert(swiaufbhjefremdspr1,aufbhalbjahr(fnrdd1fremde));
+setzesonderwert(swiaufbhjafremdspr2,aufbhalbjahr(fnrdd2fremdb));
+setzesonderwert(swiaufbhjefremdspr2,aufbhalbjahr(fnrdd2fremde));
+setzesonderwert(swiaufbhjafremdspr3,aufbhalbjahr(fnrdd3fremdb));
+setzesonderwert(swiaufbhjefremdspr3,aufbhalbjahr(fnrdd3fremde));
+setzesonderwert(swiaufbhjafremdspr4,aufbhalbjahr(fnrdd4fremdb));
+setzesonderwert(swiaufbhjefremdspr4,aufbhalbjahr(fnrdd4fremde));
+setzesonderwert(swiaufbhjaag1,aufbhalbjahr(fnrddagthema1b));setzesonderwert(
+swiaufbhjeag1,aufbhalbjahr(fnrddagthema1e));setzesonderwert(swiaufbhjaag2,
+aufbhalbjahr(fnrddagthema2b));setzesonderwert(swiaufbhjeag2,aufbhalbjahr(
+fnrddagthema2e));setzesonderwert(swiaufbhjaag3,aufbhalbjahr(fnrddagthema3b));
+setzesonderwert(swiaufbhjeag3,aufbhalbjahr(fnrddagthema3e));TRUE .
+holediffdaten:readtid(dnrdiffdaten,zugriff(fnrsutiddiffdaten)).langtextstatus
+:IF wert(fnrsustatuss)="n05"THEN geklammert(
+"Neuangemeldet zur Jahrgangsstufe 5")ELIF wert(fnrsustatuss)="n011"THEN
+geklammert("Neuangemeldet zu jahrgangsstufe 11")ELIF wert(fnrsustatuss)="nso"
+THEN geklammert("Neuangemeldet")ELIF wert(fnrsustatuss)="abg"THEN geklammert(
+"Abgegangen")ELIF wert(fnrsustatuss)="ls"THEN geklammert(
+"Laufendes Schuljahr")ELSE geklammert("Kein Eintrag")FI .wohntbei:IF wert(
+fnrsuwohntbei)=niltextTHEN niltextELSE "bei: "+wert(fnrsuwohntbei)FI .
+langtextgeschl:LET weiblich="w",langtextweibl="weiblich",langtextmaennl=
+"männlich";IF wert(fnrsugeschlechts)=weiblichTHEN kla+langtextweibl+klzELSE
+kla+langtextmaennl+klzFI .langtextspaetaus:IF wert(fnrsuspaetaus)=neinTHEN
+langtextneinELIF wert(fnrsuspaetaus)=jaTHEN langtextjaELSE niltextFI .
+langtextrelizeugnis:IF wert(fnrsureligionsz)=neinTHEN langtextneinELIF wert(
+fnrsureligionsz)=jaTHEN langtextjaELSE niltextFI .END PROC
+auskbetroffensonderwerte;PROC sucheadressezurschule(TEXT CONST schulk):
+inittupel(dnrschulen);IF schulk<>""THEN putwert(fnrschkennung,schulk);search(
+dnrschulen,TRUE );FI ENDPROC sucheadressezurschule;TEXT PROC langtextfach(
+TEXT CONST kuerzel):inittupel(dnrfaecher);putwert(dnrfaecher+1,kuerzel);
+search(dnrfaecher,TRUE );geklammert(wert(dnrfaecher+2))END PROC langtextfach;
+TEXT PROC langtext(TEXT CONST bestand,bemerkungsschluessel):TEXT VAR
+gefundenerlangtext:="";INT VAR bestandsid:=0;putwert(fnrschlsachgebiet,
+bestand);putwert(fnrschlschluessel,bemerkungsschluessel);search(dnrschluessel
+,TRUE );IF dbstatus=okTHEN gefundenerlangtext:=wert(fnrschllangtext)ELSE
+dbstatus(ok);FI ;geklammert(gefundenerlangtext)END PROC langtext;TEXT PROC
+geklammert(TEXT CONST zuklammern):IF zuklammern=niltextTHEN niltextELSE kla+
+zuklammern+klzFI ENDPROC geklammert;TEXT PROC aufbschuljahr(INT CONST dbindex
+):LET trenner="/";IF wert(dbindex)=niltextOR wert(dbindex)="0"THEN niltext
+ELSE subtext(wert(dbindex),1,2)+trenner+subtext(wert(dbindex),3,4)FI END
+PROC aufbschuljahr;TEXT PROC aufbhalbjahr(INT CONST dbindex):LET trenner=".";
+IF wert(dbindex)=niltextTHEN niltextELSE subtext(wert(dbindex),1,2)+trenner+
+subtext(wert(dbindex),3,3)FI END PROC aufbhalbjahr;TEXT PROC aufbhalbjahr(
+INT CONST dbindex,ae):LET trenner=".";TEXT VAR hj:=subtext(wert(dbindex),(ae*
+3)-2,ae*3);IF hj=niltextTHEN niltextELSE subtext(hj,1,2)+trenner+subtext(hj,3
+,3)FI END PROC aufbhalbjahr;TEXT PROC druckdateiauskzusammenstellen:LET
+prevordruck="vordruck",postvordruck=" auskunft betroffene",vordruck1=
+"vordruck1 auskunft betroffene",vordruck2="vordruck2 auskunft betroffene",
+vordruck3="vordruck3 auskunft betroffene",vordruck4=
+"vordruck4 auskunft betroffene",vordruck5="vordruck5 auskunft betroffene",
+anzvordrucke=5,hilfsdatei1="hilfsdatei1",hilfsdatei2="hilfsdatei2",
+hilfsdateikopf="hilfsdatei kopf",druckdatei="liste.1",manager=
+"anschreiben server";INT VAR i,zeilenanz1,zeilenanz2,zeilenanzkopf,anzhj;
+TEXT VAR zeile,schuljahr;INT VAR neuesschuljahr;FILE VAR f,g,kopfspeicher;
+aktuellevordruckevommanagerholen;druckvorbereiten;
+allgemeineschuelerdatenindiedruckdateischreiben;
+halbjahresdatendesschuelersindiedruckdateischreiben;
+letztehilfsdateiindruckdateibringen;drucknachbereitenohneausdrucken;
+druckdatei.aktuellevordruckevommanagerholen:FOR iFROM 1UPTO anzvordruckeREP
+forget(prevordruck+text(i)+postvordruck,quiet);fetch(prevordruck+text(i)+
+postvordruck,/manager)PER .allgemeineschuelerdatenindiedruckdateischreiben:
+briefalternative(vordruck1,hilfsdatei1);f:=sequentialfile(input,hilfsdatei1);
+#limit(75);##"unerklärliche"Z eilenumbrüche#maxlinelength(f,75);zeilenanz1:=
+lines(f);FOR iFROM 1UPTO zeilenanz1REP getline(f,zeile);druckzeileschreiben(
+zeile)PER ;seitenwechsel;forget(hilfsdatei1,quiet);briefalternative(vordruck2
+,hilfsdatei1);vordruck2merkenfuerfolgeseiten;briefalternative(vordruck3,
+hilfsdatei1);f:=sequentialfile(output,hilfsdatei1);zeilenanz1:=lines(f).
+halbjahresdatendesschuelersindiedruckdateischreiben:bestimme5teshjvor;lesehjd
+;WHILE (dbstatus=ok)CAND gleicherschuelerREP initialisieresonderwerte;
+alteanweisungsfolge;succ(dnrhalbjahresdaten);PER .bestimme5teshjvor:anzhj:=-5
+;bestimmeentsprechendesschuljahr.bestimmeentsprechendesschuljahr:IF anzhj<0
+THEN anzhj:=anzhj*-1;neuesschuljahr:=jahr-(anzhjDIV 2);IF (anzhjMOD 2)=0CAND
+halbjahr=2THEN schuljahr:=text(neuesschuljahr)+text(neuesschuljahr+1);ELSE
+schuljahr:=text(neuesschuljahr-1)+text(neuesschuljahr);FI ELSE neuesschuljahr
+:=jahr+(anzhjDIV 2)+anzhjMOD 2;IF ((anzhjMOD 2)=1CAND halbjahr=2)COR (
+halbjahr=1)THEN schuljahr:=text(neuesschuljahr-1)+text(neuesschuljahr);ELSE
+schuljahr:=text(neuesschuljahr)+text(neuesschuljahr+1);FI FI .lesehjd:
+inittupel(dnrhalbjahresdaten);uebernehmenschuelerdaten;search(
+dnrhalbjahresdaten,FALSE ).uebernehmenschuelerdaten:putwert(fnrhjdfamnames,
+wert(fnrsufamnames));putwert(fnrhjdrufnames,wert(fnrsurufnames));putwert(
+fnrhjdgebdats,wert(fnrsugebdatums));putwert(fnrhjdsj,schuljahr);putintwert(
+fnrhjdhj,neueshalbjahr);.neueshalbjahr:IF aktuelleshalbjahr=1THEN 2ELSE 1FI .
+gleicherschueler:wert(fnrhjdfamnames)=wert(fnrsufamnames)CAND wert(
+fnrhjdrufnames)=wert(fnrsurufnames)CAND wert(fnrhjdgebdats)=wert(
+fnrsugebdatums).alteanweisungsfolge:teil1hjdaufbereiten(vordruck4,hilfsdatei2
+);aufbereitetedatenunterbringen;teil2hjdaufbereiten(vordruck5,hilfsdatei2);
+aufbereitetedatenunterbringen;.vordruck2merkenfuerfolgeseiten:copy(
+hilfsdatei1,hilfsdateikopf);kopfspeicher:=sequentialfile(input,hilfsdateikopf
+);zeilenanzkopf:=lines(kopfspeicher).aufbereitetedatenunterbringen:g:=
+sequentialfile(input,hilfsdatei2);#limit(75);##"unerklärliche"Z eilenumbrüche
+#maxlinelength(g,75);zeilenanz2:=lines(g);IF zeilenanz1+zeilenanz2>
+drucklaengeTHEN hilfsdatei1indruckdateibringenundloeschen;seitenwechsel;
+vordruckkopfnachhilfsdatei1;zeilenanz1:=zeilenanz2+zeilenanzkopf;ELSE
+zeilenanz1:=zeilenanz1+zeilenanz2;FI ;hilfsdatei2nachhilfsdatei1undloeschen;.
+hilfsdatei1indruckdateibringenundloeschen:input(f);FOR iFROM 1UPTO zeilenanz1
+REP getline(f,zeile);druckzeileschreiben(zeile);PER ;forget(hilfsdatei1,quiet
+).vordruckkopfnachhilfsdatei1:f:=sequentialfile(output,hilfsdatei1);input(
+kopfspeicher);FOR iFROM 1UPTO zeilenanzkopfREP getline(kopfspeicher,zeile);
+putline(f,zeile)PER .hilfsdatei2nachhilfsdatei1undloeschen:FOR iFROM 1UPTO
+zeilenanz2REP getline(g,zeile);putline(f,zeile)PER ;forget(hilfsdatei2,quiet)
+.letztehilfsdateiindruckdateibringen:input(f);FOR iFROM 1UPTO zeilenanz1REP
+getline(f,zeile);druckzeileschreiben(zeile)PER ;forget(hilfsdateikopf,quiet);
+forget(hilfsdatei1,quiet).END PROC druckdateiauskzusammenstellen;PROC
+teil1hjdaufbereiten(TEXT CONST vordruck,hilfsdatei):LET wiederholung=
+" Wiederholung",zuwiederholen=" zu wiederholen",wirdwiederholt=
+" wird wiederholt",swiaufbschuljahr=511,swiwarnung1=512,swibemnr1=513,
+swilangtextbemnr1=514,swiwarnung2=515,swibemnr2=516,swilangtextbemnr2=517,
+swiversetzung=518,swilangtextversetzung=519,swistartnachpruefungen=520,
+swinotenachpruef=527,swistartzeugnisbemerk=528,swistartversaeumtverspaetet=
+534,swilangtextbemerknachpruefung=537;INT VAR hilfsindex,i,swi;TEXT VAR wie;
+wie:=wert(fnrhjdversetzung);setzesonderwert(swiaufbschuljahr,aufbschuljahr(
+fnrhjdsj));setzesonderwert(swiwarnung1,wert(fnrhjdvermblau));setzesonderwert(
+swibemnr1,wert(fnrhjdbemblau));setzesonderwert(swilangtextbemnr1,langtext(
+suffix12,wert(fnrhjdbemblau)));setzesonderwert(swiwarnung2,wert(
+fnrhjdvermnachwarn));setzesonderwert(swibemnr2,wert(fnrhjdbemnachwarn));
+setzesonderwert(swilangtextbemnr2,langtext(suffix13,wert(fnrhjdbemnachwarn)))
+;setzesonderwert(swiversetzung,wert(fnrhjdversetzung));setzesonderwert(
+swilangtextversetzung,langtext(suffix14,wert(fnrhjdversetzung)));
+setzesonderwert(swilangtextbemerknachpruefung,langtext("Bemerkungen",
+geklammert(wert(fnrhjdbemnach))));swi:=swistartnachpruefungen;FOR iFROM 1
+UPTO 3REP setzesonderwert(swi,wert(fnrhjdnachfach1+i-1));swiINCR 1;
+setzesonderwert(swi,langtextfach(wert(fnrhjdnachfach1+i-1)));swiINCR 1;
+hilfsindexINCR 1PER ;setzesonderwert(swi,wert(fnrhjdnachfach));
+setzesonderwert(swinotenachpruef,wert(fnrhjdnacherg));swi:=
+swistartzeugnisbemerk;FOR iFROM 1UPTO 3REP setzesonderwert(swi,wert(
+fnrhjdbemzeug1+i-1));swiINCR 1;setzesonderwert(swi,langtext(suffix13,wert(
+fnrhjdbemzeug1+i-1)));swiINCR 1;hilfsindexINCR 1PER ;swi:=
+swistartversaeumtverspaetet;FOR iFROM 1UPTO 3REP setzesonderwert(swi,wert(
+fnrhjdversstdm+i-1));swiINCR 1;hilfsindexINCR 1PER ;briefalternative(vordruck
+,hilfsdatei).END PROC teil1hjdaufbereiten;PROC teil2hjdaufbereiten(TEXT
+CONST vordruck,hilfsdatei):LET swifach=538,swiart=539,swiklau=541,swiknr=542,
+swiwarn=543,swinote=544,swibem=545;setzesonderwert(swifach,aufbereiteterwert(
+fnrhjdfach,2));setzesonderwert(swiart,aufbereiteterwert(fnrhjdkursart,2));
+setzesonderwert(swiklau,aufbereiteterwert(fnrhjdklausurteiln,1));
+setzesonderwert(swiknr,aufbereiteterwert(fnrhjdlerngrpkenn,4));
+setzesonderwert(swiwarn,aufbereiteterwert(fnrhjdvermwarnung,1));
+setzesonderwert(swinote,aufbereiteterwert(fnrhjdnotepunkte,2));
+setzesonderwert(swibem,aufbereiteterwert(fnrhjdbemerk,3));fuellebemerkungen;
+briefalternative(vordruck,hilfsdatei).fuellebemerkungen:LET kuerzelbreite=3;
+INT VAR i,l:=length(wert(fnrhjdbemerk))DIV kuerzelbreite,von,bis;TEXT VAR
+kuerzel;INT VAR swib:=546;FOR iFROM 1UPTO lREP von:=((i-1)*kuerzelbreite)+1;
+bis:=i*kuerzelbreite;kuerzel:=subtext(wert(fnrhjdbemerk),von,bis);
+setzesonderwert(swib,kuerzel);swibINCR 1;setzesonderwert(swib,langtext(
+suffix13,kuerzel));swibINCR 1PER .END PROC teil2hjdaufbereiten;TEXT PROC
+aufbereiteterwert(INT CONST fnr,kuerzelbreite):LET doppelpunkt=":",anzspalten
+=13,spaltenbreitetab=4;INT VAR i,l:=length(wert(fnr))DIV kuerzelbreite,von,
+bis,blankanz;TEXT VAR zeile:="",kuerzel;#IF l>nullTHEN #FOR iFROM 1UPTO #l#
+anzspaltenREP von:=((i-1)*kuerzelbreite)+1;bis:=i*kuerzelbreite;kuerzel:=
+subtext(wert(fnr),von,bis);zeile:=zeile+aufbkuerzelPER ;#ELSE zeile:=
+anzspalten*(doppelpunkt+spaltenbreitetab*blank)FI ;#zeile.aufbkuerzel:IF
+length(kuerzel)<>nullTHEN blankanz:=spaltenbreitetab-length(kuerzel);
+doppelpunkt+preblankanz*blank+kuerzel+postblankanz*blankELSE doppelpunkt+
+spaltenbreitetab*blankFI .preblankanz:blankanzDIV 2.postblankanz:blankanz-
+preblankanz.ENDPROC aufbereiteterwert;BOOL PROC multistopauskunft:(
+schuelerschluessel1=wert(fnrsufamnames))CAND (schuelerschluessel2=wert(
+fnrsurufnames)COR schuelerschluessel2="")CAND (schuelerschluessel3=
+datumrekonversion(wert(fnrsugebdatums))COR schuelerschluessel3="")END PROC
+multistopauskunft;TEXT PROC leerintintext(TEXT CONST t):IF t="0"THEN ""ELSE t
+FI END PROC leerintintext;TEXT PROC kurz(TEXT CONST t):TEXT VAR txt:=niltext;
+IF t<>niltextTHEN txt:=t+blankFI ;txtEND PROC kurz;END PACKET auskbetroffen;
+
diff --git a/app/schulis/2.2.1/src/1.erf.abmeldedaten b/app/schulis/2.2.1/src/1.erf.abmeldedaten
new file mode 100644
index 0000000..9c5523b
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.erf.abmeldedaten
@@ -0,0 +1,142 @@
+PACKET erfabmeldedatenDEFINES suabmeldedatenbearbeiten,
+suabmeldedatenspeichern,suausgesuchteabmeldedatenbearbeiten,
+schuelerlistezeigen,pruefungschuelerab:LET maskennameeingang=
+"ms schuelerangabe",maskenstammname="ms erf abmeldedaten",aktbestand="ls",
+bestandschulen="Schulen",fnrname=2,fnrrufname=3,fnrgebdatum=4,fnrjgst=5,
+fnrzug=6,fnrabdatum=7,fnrabgrund=8,fnrneueschule=9,fnrabschluss=10,
+meldunglistenerstellung=7,meldungspeicherung=50,pruefemeldung=57,
+meldungkeineaenderung=63,meldungletzter=67,meldungkeineliste=68,
+meldunggibtsnicht=71,meldungspeicherungfehlerhaft=73,meldungfalschesdatum=157
+;LET leer="",oblitrenner="$";LET anzschluessel=3;#A nzahlderamP
+rimärschlüselbeteiligtenF elder#BOOL VAR falschesdatum:=FALSE ;FILE VAR f;
+ROW anzschluesselTEXT VAR schluessel;#24.03.87#TAG VAR maske;TEXT VAR
+dateiname:="Schülerliste",schuelertid:="";TEXT VAR abdatumsicherung,
+abgrundsicherung,abschlusssicherung;LET logtextbeginn=
+"Anw. 1.3.1 Änderung """;PROC bearbeitunginitialisieren:forget(dateiname,
+quiet).END PROC bearbeitunginitialisieren;PROC suabmeldedatenbearbeiten:BOOL
+VAR sudatenexistieren;falschesdatum:=FALSE ;systemdboff;reinitparsing;
+bearbeitunginitialisieren;schluessel(1):=standardmaskenfeld(fnrname);
+schluessel(2):=standardmaskenfeld(fnrrufname);schluessel(3):=
+datumrekonversion(standardmaskenfeld(fnrgebdatum));pruefeobsudatenexistieren(
+sudatenexistieren);IF NOT falschesdatumTHEN IF sudatenexistierenTHEN
+schluessel(1):=wert(fnrsufamnames);schluessel(2):=wert(fnrsurufnames);
+schluessel(3):=datumrekonversion(wert(fnrsugebdatums));standardstartproc(
+maskenstammname);bereiteaenderungvor;standardnproc;ELSE standardmeldung(
+meldunggibtsnicht,"");return(1)FI ;ELSE return(1)FI .END PROC
+suabmeldedatenbearbeiten;PROC bereiteaenderungvor:saveupdateposition(
+dnrschueler);schuelertid:=gettid;holedbwerteinmaske;abdatumsicherung:=wert(
+fnrsuabgdats);abgrundsicherung:=wert(fnrsuabggrund);abschlusssicherung:=wert(
+fnrsuabschluss);infeld(fnrname);standardfelderausgeben;infeld(fnrabdatum).
+END PROC bereiteaenderungvor;PROC holedbwerteinmaske:standardmaskenfeld(wert(
+fnrsufamnames),fnrname);standardmaskenfeld(wert(fnrsurufnames),fnrrufname);
+standardmaskenfeld(datumrekonversion(wert(fnrsugebdatums)),fnrgebdatum);
+standardmaskenfeld(jgstaufber(wert(fnrsusgrpjgst)),fnrjgst);
+standardmaskenfeld(wert(fnrsusgrpzugtut),fnrzug);standardmaskenfeld(
+datumrekonversion(wert(fnrsuabgdats)),fnrabdatum);standardmaskenfeld(wert(
+fnrsuabggrund),fnrabgrund);standardmaskenfeld(wert(fnrsuskennnschule),
+fnrneueschule);standardmaskenfeld(wert(fnrsuabschluss),fnrabschluss)END PROC
+holedbwerteinmaske;PROC pruefeobsudatenexistieren(BOOL VAR suexist):TEXT VAR
+datenbankwerte,schluesselwerte;inittupel(dnrschueler);maskenwerteindatenbank;
+IF NOT falschesdatumTHEN search(ixsustatfamrufgeb);IF dbstatus=okTHEN
+datenbankwerte:=wert(fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));
+schluesselwerte:=schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=
+schluessel(1)CAND ((schluessel(2)=leerAND schluessel(3)=leer)OR (pos(
+datenbankwerte,schluesselwerte)=1)))ELSE suexist:=FALSE FI FI .END PROC
+pruefeobsudatenexistieren;PROC maskenwerteindatenbank:putwert(fnrsufamnames,
+schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop;initmaske(
+maske,maskennameeingang);putwert(fnrsugebdatums,datumskonversion(schluessel(3
+)));IF iserrorTHEN clearerror;standardmeldung(meldungfalschesdatum,"");infeld
+(fnrgebdatum);falschesdatum:=TRUE ;enablestop;ELSE enablestop;putwert(
+fnrsustatuss,aktbestand);FI ;END PROC maskenwerteindatenbank;PROC
+suabmeldedatenspeichern(BOOL CONST zuspeichern):IF zuspeichernTHEN
+bereitespeicherungvorELSE standardmeldung(meldungkeineaenderung,"");
+vorbereitendernaechstendatenbehandlungFI .bereitespeicherungvor:INT VAR
+fehlerstatus:=0;pruefeplausibilitaet(fehlerstatus);IF datenfehlerfreiTHEN
+datenschreiben;vorbereitendernaechstendatenbehandlungELSE fehlerbehandeln;
+return(1)FI .datenfehlerfrei:fehlerstatus=0.fehlerbehandeln:infeld(
+fehlerstatus).datenschreiben:meldespeicherung;datenindatenbankspeichern.
+meldespeicherung:standardmeldung(meldungspeicherung,"").
+datenindatenbankspeichern:logeintragvornehmen;setzedbwerte;
+abmeldedatenschreiben.logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;
+eintragCAT schluessel(1);eintragCAT ", ";eintragCAT schluessel(2);eintragCAT
+", ";eintragCAT datumskonversion(schluessel(3));eintragCAT """";logeintrag(
+eintrag).setzedbwerte:putwert(fnrsuabggrund,standardmaskenfeld(fnrabgrund));
+putwert(fnrsuskennnschule,standardmaskenfeld(fnrneueschule));putwert(
+fnrsuabschluss,standardmaskenfeld(fnrabschluss));putwert(fnrsuabgdats,
+datumskonversion(standardmaskenfeld(fnrabdatum)));.abmeldedatenschreiben:IF
+abdatumsicherung<>wert(fnrsuabgdats)THEN restoreupdateposition(dnrschueler);
+selupdate(dnrschueler);ELSE replace(dnrschueler,schuelertid)FI ;IF dbstatus<>
+0THEN standardmeldung(meldungspeicherungfehlerhaft,"")#dr11.05.88ELIF
+grundgeaendertTHEN grundinstatraumaendernELIF abschlussgeaendertTHEN
+abschlussinstatraumaendern#FI .#drgrundgeaendert:11.05.88abgrundsicherung<>
+wert(fnrsuabggrund).abschlussgeaendert:abschlusssicherung<>wert(
+fnrsuabschluss).grundinstatraumaendern:kuerzelaendern(statnrabgrund,
+abgrundsicherung,wert(fnrsuabggrund)).abschlussinstatraumaendern:
+kuerzelaendern(statnrabschluss,abschlusssicherung,wert(fnrsuabschluss)).#END
+PROC suabmeldedatenspeichern;PROC vorbereitendernaechstendatenbehandlung:IF
+exists(dateiname)THEN holenaechstenschluesselauslisteELSE enter(2)FI .
+holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ;
+holenaechstenmehrtlgschluesselausdatei(ok);WHILE okREP
+pruefeobsudatenexistieren(ok);IF okTHEN kannbearbeitetwerden:=TRUE ;ok:=
+FALSE ELSE holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF
+kannbearbeitetwerdenTHEN bereiteaenderungvor;return(1)ELSE
+behandleendederthesaurusabarbeitungFI .behandleendederthesaurusabarbeitung:
+standardmeldung(meldungletzter,"");enter(3).END PROC
+vorbereitendernaechstendatenbehandlung;PROC schuelerlistezeigen:BOOL VAR
+keineliste;schluessel(1):=standardmaskenfeld(fnrname);schluessel(2):=
+standardmaskenfeld(fnrrufname);schluessel(3):=datumrekonversion(
+standardmaskenfeld(fnrgebdatum));falschesdatum:=FALSE ;systemdboff;
+parsenooffields(5);maskenwerteindatenbank;IF NOT falschesdatumTHEN
+objektlistestarten(ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,
+keineliste);IF keinelisteTHEN reinitparsing;standardmeldung(meldungkeineliste
+,"");return(1)ELSE standardmeldung(meldunglistenerstellung,"");
+datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler,TRUE ,BOOL PROC
+pruefungschuelerab)FI ELSE return(1)FI END PROC schuelerlistezeigen;BOOL
+PROC pruefungschuelerab:wert(fnrsustatuss)=aktbestandEND PROC
+pruefungschuelerab;PROC suausgesuchteabmeldedatenbearbeiten:BOOL VAR ok,
+kannbearbeitetwerden:=FALSE ;bearbeitunginitialisieren;objektlistebeenden(
+dateiname,TRUE );reinitparsing;holeerstenmehrtlgschluesselausdatei(ok);WHILE
+okREP pruefeobsudatenexistieren(ok);IF okTHEN kannbearbeitetwerden:=TRUE ;ok
+:=FALSE ELSE holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF
+kannbearbeitetwerdenTHEN standardstartproc(maskenstammname);
+bereiteaenderungvor;standardnprocELSE enter(2)FI .END PROC
+suausgesuchteabmeldedatenbearbeiten;PROC holeerstenmehrtlgschluesselausdatei(
+BOOL VAR ok):IF NOT exists(dateiname)THEN ok:=FALSE ;LEAVE
+holeerstenmehrtlgschluesselausdateiFI ;f:=sequentialfile(input,dateiname);
+holenaechstenmehrtlgschluesselausdatei(ok);END PROC
+holeerstenmehrtlgschluesselausdatei;PROC
+holenaechstenmehrtlgschluesselausdatei(BOOL VAR ok):TEXT VAR thesaurustext:=
+"";INT VAR schluesselbeginn:=0;INT VAR schluesseltrennung:=0;INT VAR i:=1,
+anzschlfelder:=anzkey(dnrschueler);IF eof(f)THEN ok:=FALSE ;
+loeschedieerstellteobjektlisteELSE getline(f,thesaurustext);
+bestimmeschluesselausthesaurustext;ok:=TRUE FI .
+bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext,
+oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner,
+schluesselbeginn+1);FOR iFROM 1UPTO anzschlfelderREP IF schluesseltrennung>0
+THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1,
+schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung
+:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):=
+subtext(thesaurustext,schluesselbeginn+1);FI ;PER ;schluessel(3):=
+datumrekonversion(schluessel(3));.END PROC
+holenaechstenmehrtlgschluesselausdatei;PROC loeschedieerstellteobjektliste:
+forget(dateiname,quiet);END PROC loeschedieerstellteobjektliste;PROC
+pruefeplausibilitaet(INT VAR fstatus):LET pruefartdatum=5,fmeldnichtimbestand
+=55,bestandabgangsgrund="c02 abgang",bestandabschluss="c02 abschluss";fstatus
+:=0;standardmeldung(pruefemeldung,"");IF standardmaskenfeld(fnrabgrund)<>leer
+THEN IF NOT imschlbestand(standardmaskenfeld(fnrabgrund),bestandabgangsgrund)
+THEN fstatus:=fnrabgrund;standardmeldung(fmeldnichtimbestand,"");LEAVE
+pruefeplausibilitaetFI ;FI ;IF standardmaskenfeld(fnrneueschule)<>leerTHEN
+IF NOT imbestand(standardmaskenfeld(fnrneueschule),bestandschulen)THEN
+fstatus:=fnrneueschule;standardmeldung(fmeldnichtimbestand,"");LEAVE
+pruefeplausibilitaetFI ;FI ;IF standardmaskenfeld(fnrabschluss)<>leerTHEN IF
+NOT imschlbestand(standardmaskenfeld(fnrabschluss),bestandabschluss)THEN
+fstatus:=fnrabschluss;standardmeldung(fmeldnichtimbestand,"");LEAVE
+pruefeplausibilitaetFI ;FI ;IF standardmaskenfeld(fnrabdatum)<>leerTHEN
+standardpruefe(pruefartdatum,fnrabdatum,0,0,"",fstatus);FI ;END PROC
+pruefeplausibilitaet;#dr11.05.88PROC kuerzelaendern(INT CONST statnr,TEXT
+CONST alterwert,neuerwert):kuerzelsummeeinsrunter(statnr,jgstaufber(wert(
+fnrsusgrpjgst)),compress(wert(fnrsusgrpzugtut)),aktbestand,alterwert);
+kuerzelsummeeinsrauf(statnr,jgstaufber(wert(fnrsusgrpjgst)),compress(wert(
+fnrsusgrpzugtut)),aktbestand,neuerwert)END PROC kuerzelaendern;#END PACKET
+erfabmeldedaten
+
diff --git a/app/schulis/2.2.1/src/1.erf.schuelerdaten b/app/schulis/2.2.1/src/1.erf.schuelerdaten
new file mode 100644
index 0000000..fb86963
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.erf.schuelerdaten
@@ -0,0 +1,605 @@
+PACKET erfschuelerdatenDEFINES sustartunderfassungsbildschirmaufbauen,
+suvonerfassungsbildschirmeinlesen,suanmeldungbearbeiten,suanmeldungeinfuegen,
+suanmeldungzeigen,suanmeldungloeschen,suanmeldungloeschenausfuehren,
+suanmeldungspeichern,suschuelerbsblaettern,sudatenimbildschirmkopieren,
+suausgesuchtezurbearbeitung,suanmeldungausgesuchteloeschen,
+suzurueckzumanfangsbildschirm,suerfassungswert,suerfassungschueler,
+pruefungschueler:LET maskenstammname="ms erf schuelerdaten",maskennameeingang
+="ms schuelerangabe",maskennamebearbeitung="ms bearb schuelerdaten";LET
+bestandneu5="n05",bestandneu11="n11",bestandneusonst="nso",bestandlaufschulj=
+"ls",#bestandschuelergruppen="aktuelle Schülergruppen",#bestandschulen=
+"Schulen",kuerzelzugangaktjgst="z";LET meldungloeschfrage=65,meldungloeschung
+=83,meldungkeineloeschung=84,meldunggibtsschon=70,meldunggibtsnicht=71,
+meldungletzter=67,meldungkeineliste=68,meldungspeicherung=80,meldungaenderung
+=81,meldungkeineaenderung=82,meldunglistenerstellung=7,
+meldungblaetterngehtnicht=72,meldungspeicherungfehlerhaft=73,
+meldungloeschenfehlerhaft=74,meldungangabengenauer=129,meldungfalschesdatum=
+157,meldungbittename=166,pruefemeldung=57;LET fmeldbittefuellen=52,
+fmeldnichtimbestand=55,fmeldfalschesdatum=157,fmeldnumundbegrenzt=54,
+fmeldbitteanderejgst=85,weiblich="w",maennlich="m",bestandstaaten=
+"c02 staaten",bestandreligion="c02 relizugehoerigkeit",bestandzugang=
+"c02 zugang";LET fbs1=1,fbs2=2,fbs3=3,fbs4=4,erstesfeldbeierfassungbs1=2,
+erstesfeldbeierfassungbs2=2,erstesfeldbeierfassungbs3=3,
+erstesfeldbeierfassungbs4=3,erstererfbildschirm=2,letztererfbildschirm=4;LET
+fnrname=2,fnrnamenszus=3,fnrgebname=4,fnrvornamen=5,fnrrufname=6,fnrsustr=7,
+fnrsutelefon=8,fnrsuplzort=9,fnrwohntbei=10,fnrortsteil=11,fnrgebdat=12,
+fnrgeschlecht=13,fnrstaatsan=14,fnrreligion=15,fnrverwandt=16,fnrerzname=17,
+fnrerznamenszus=18,fnrerzvornamen=19,fnrerzstr=20,fnrerztelefon=21,
+fnrerzplzort=22,fnrloeschfeld=23,fnrgebort=3,fnrkreisland=4,fnrmuttersprache=
+5,fnraussiedler=6,fnreinschulung=7,fnrschulkuerzel=8,fnrletzteklasse=9,
+fnreintrittsdatum=10,fnreintrittjgst=11,fnrsek2=12,fnrjgst=13,fnrzug=14,
+fnrzugang=15,fnrneuerzug=16,fnrvermerk1=17,fnrabdatum=23,fnrabgrund=24,
+fnrneueschule=25,fnrabschluss=26,fnrreligionunterricht=3,
+fnrreligionabmelddatum=4,fnrreligionanmelddatum=5,fnrfremdsprache=6,
+fnrkunstmusik=18,fnrag=19,fnrwpsek1=28,fnrauswahlanfang=2,fnrauswahlende=5,
+fnrneuan5=2,fnrneuan11=3,fnrneusonst=4,fnrneulaufschulj=5,fnrparamname=6,
+fnrparamrufname=7,fnrparamgebdat=8,fnrparambearbname=2,fnrparambearbrufname=3
+,fnrparambearbgebdat=4,fnrerstesausgabefeld=2,fnrletztesausgabefeld=40,
+fnrausgabename=2;LET zahldervermerke=6,maxlaengenamebeiaenderung=32,
+maxlaengenamebeikeineaenderung=26;LET pruefartdatum=6,pruefartauswahl=5;LET
+satzeinfuegen=1,#satzaendern=2,#satzloeschen=3,satzneueschluessel=4;LET
+kennungerfassungsprogramm=1,kennungbearbeitungsprogramm=2,
+kennungzeigeprogramm=3;LET leer="",leerzeichen=" ",oblitrenner="$",
+kennzmeldungauffaellig="#";LET jgst05="05",jgst11="11",jgstufe5=5,jgstufe10=
+10,jgstufe11=11,jgstufe13=13;LET bsanzahl=4,maxfelderzahl=100;LET
+anzschluesselsu=3;LET aktschuljahr="Schuljahr",akthalbjahr="Schulhalbjahr";
+LET aendern=1,loeschen=2;BOOL VAR zurueckschreiben:=FALSE ;BOOL VAR
+neuerschueler,neuenschuelereinfuegen,neuerschuelerersteintrag;BOOL VAR
+zeigeprogramm:=FALSE ,mehrereloeschen:=FALSE ,feldschutzzumloeschengesetzt:=
+FALSE ;FILE VAR f;INT VAR statussudatei:=0;INT VAR startpos;INT VAR
+programmnummer;INT VAR bs,bsdraussen,fnrfehlerfeld;ROW bsanzahlROW
+maxfelderzahlTEXT VAR erfassungsfeld;ROW bsanzahlTAG VAR maske;ROW bsanzahl
+BOOL VAR maskegeholt;ROW anzschluesselsuTEXT VAR schluessel;ROW
+anzschluesselsuTEXT VAR alterschluessel;TEXT VAR dateiname:="Schülerliste",
+hjdtid:="",diffdatentid:="";#schultypsich:="",verskennzsich:="";#TEXT VAR
+aktbestand,programmname,tupelsich;LET logtextbeginn1="Anw. 1.1.1 ",
+logtextbeginn2="Anw. 1.2.2 ";BOOL PROC erfassungsprogramm:programmnummer=
+kennungerfassungsprogrammEND PROC erfassungsprogramm;BOOL PROC
+bearbeitungsprogramm:programmnummer=kennungbearbeitungsprogrammEND PROC
+bearbeitungsprogramm;PROC sustartunderfassungsbildschirmaufbauen(INT CONST
+progrnr):IF progrnr=kennungzeigeprogrammTHEN programmnummer:=
+kennungbearbeitungsprogramm;zeigeprogramm:=TRUE ELSE programmnummer:=progrnr;
+zeigeprogramm:=FALSE FI ;startprozedur;erfassungsbildschirmaufbauen;
+suvonerfassungsbildschirmeinlesen.END PROC
+sustartunderfassungsbildschirmaufbauen;PROC startprozedur:programmname:=text(
+vergleichsknoten);reinitparsing;systemdboff;bildschirmeinitialisieren;
+standardkopfmaskeausgeben(programmname);.END PROC startprozedur;PROC
+bildschirmeinitialisieren:FOR bsFROM 1UPTO bsanzahlREP maskegeholt(bs):=
+FALSE PER ;bs:=1;maskeholen(bs);bsdraussen:=0.END PROC
+bildschirmeinitialisieren;PROC erfassungsbildschirmaufbauen:reinitparsing;
+standardkopfmaskeaktualisieren(bstitel);erfassungsmaskeausgeben;
+feldvorbelegungenbehandeln;felderausgeben.bstitel:IF bs>1THEN programmname+
+" ("+text(bs-1)+".Bildschirm)"ELSE programmnameFI .erfassungsmaskeausgeben:
+IF bs<>bsdraussenTHEN zeigemaske;bsdraussen:=bsFI .zeigemaske:show(maske(bs))
+.felderausgeben:startpos:=fnrerstesausgabefeld;put(maske(bs),erfassungsfeld(
+bs),startpos);IF zeigeprogrammCAND (bs<>fbs1)THEN feldschutzfuerallefelder;
+startpos:=1ELSE startpos:=erstesfeldbeierfassung(bs)FI .
+feldschutzfuerallefelder:INT VAR i;protect(maske(bs),1,FALSE );FOR iFROM
+fnrerstesausgabefeldUPTO fnrletztesausgabefeldREP protect(maske(bs),i,TRUE )
+PER .END PROC erfassungsbildschirmaufbauen;PROC maskeholen(INT CONST maskennr
+):initmaske(maske(maskennr),initmaskenname);maskegeholt(maskennr):=TRUE .
+initmaskenname:IF erfassungsprogrammTHEN maskenstammname+text(maskennr)ELSE
+maskennamefuerbearbeitungFI .maskennamefuerbearbeitung:SELECT maskennrOF
+CASE 1:maskennameeingangCASE 2:maskenstammname+text(maskennr)CASE 3:
+maskennamebearbeitung+text(maskennr)CASE 4:maskenstammname+text(maskennr)
+OTHERWISE ""END SELECT .END PROC maskeholen;PROC feldvorbelegungenbehandeln:
+SELECT bsOF CASE 1:bsfelderinitialisierenCASE 2:vorbelegungen2CASE 3:
+vorbelegungen3CASE 4:vorbelegungen4END SELECT .vorbelegungen2:
+vorbelegungneuerschueler2;loeschfeldverdecken.loeschfeldverdecken:LET
+rahmenzeichen="=";erfassungsfeld(bs)(fnrloeschfeld):=rahmenzeichen.
+vorbelegungen3:vorbelegungname3;vorbelegungzugang;vorbelegungeintrittjgst;
+feldschutzfuerfelderbeineuanmeldungen;.vorbelegungen4:vorbelegungname4.END
+PROC feldvorbelegungenbehandeln;PROC vorbelegungname3:TEXT VAR vor,zus,nach;
+vor:=erfassungsfeld(fbs2)(fnrrufname)+leerzeichen;zus:=erfassungsfeld(fbs2)(
+fnrnamenszus);IF zus<>leerTHEN zusCAT leerzeichenFI ;nach:=erfassungsfeld(
+fbs2)(fnrname);erfassungsfeld(bs)(fnrausgabename):=text(vor+zus+nach,
+laengefnrausgabename).laengefnrausgabename:length(maske(bs),fnrausgabename).
+END PROC vorbelegungname3;PROC vorbelegungzugang:IF aktbestand<>
+bestandlaufschuljTHEN erfassungsfeld(bs)(fnrzugang):=kuerzelzugangaktjgst;
+protect(maske(bs),fnrzugang,TRUE )ELSE protect(maske(bs),fnrzugang,FALSE )FI
+.END PROC vorbelegungzugang;PROC vorbelegungname4:erfassungsfeld(bs)(
+fnrausgabename):=erfassungsfeld(fbs3)(fnrausgabename).END PROC
+vorbelegungname4;PROC vorbelegungneuerschueler2:IF neuerschuelerersteintrag
+THEN neuerschuelerersteintrag:=FALSE ;erfassungsfeld(fbs2)(fnrname):=
+erfassungsfeld(fbs1)(fnrparamname);erfassungsfeld(fbs2)(fnrrufname):=
+erfassungsfeld(fbs1)(fnrparamrufname);erfassungsfeld(fbs2)(fnrvornamen):=
+erfassungsfeld(fbs1)(fnrparamrufname);erfassungsfeld(fbs2)(fnrgebdat):=
+erfassungsfeld(fbs1)(fnrparamgebdat)FI .END PROC vorbelegungneuerschueler2;
+PROC vorbelegungeintrittjgst:protect(maske(bs),fnrsek2,FALSE );protect(maske(
+bs),fnreintrittjgst,FALSE );IF aktbestand=bestandneu5THEN erfassungsfeld(bs)(
+fnreintrittjgst):=jgst05;protect(maske(bs),fnreintrittjgst,TRUE )ELIF
+aktbestand=bestandneu11THEN erfassungsfeld(bs)(fnreintrittjgst):=jgst11;
+protect(maske(bs),fnreintrittjgst,TRUE );IF neuerschuelerTHEN
+eintrittinsek2vorbelegenFI FI .END PROC vorbelegungeintrittjgst;PROC
+eintrittinsek2vorbelegen:TEXT VAR schuljahr:=schulkenndatum(aktschuljahr);
+schuljahr:=subtext(schuljahr,3,4);schuljahr:=schuljahr+text(int(schuljahr)+1)
+;erfassungsfeld(bs)(fnrsek2):=schuljahr;protect(maske(bs),fnrsek2,TRUE ).END
+PROC eintrittinsek2vorbelegen;PROC feldschutzfuerfelderbeineuanmeldungen:IF
+aktbestand=bestandlaufschuljTHEN protect(maske(bs),fnrzug,FALSE );IF
+neuerschuelerTHEN protect(maske(bs),fnrjgst,FALSE )ELSE protect(maske(bs),
+fnrjgst,TRUE )FI ELSE protect(maske(bs),fnrjgst,TRUE );protect(maske(bs),
+fnrzug,TRUE )FI .END PROC feldschutzfuerfelderbeineuanmeldungen;PROC
+suvonerfassungsbildschirmeinlesen:get(maske(bs),erfassungsfeld(bs),startpos);
+loeschemeldung(maske(bs)).END PROC suvonerfassungsbildschirmeinlesen;PROC
+suanmeldungbearbeiten:neuenschuelereinfuegen:=FALSE ;IF
+sinnvolleauswahlgetroffenTHEN bearbeitungvorbereitungbeginnenELSE startpos:=
+fnrfehlerfeld;return(1)FI .bearbeitungvorbereitungbeginnen:IF
+namenangabenausreichendTHEN bearbeitungbeginnenELSE startpos:=fnrfehlerfeld;
+return(1)FI .namenangabenausreichend:IF erfassungsprogrammTHEN
+namenangabenausreichendbeierfassungELSE
+namenangabenausreichendbeibearbeitungoderzeigenFI .bearbeitungbeginnen:
+legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;schluesselbereitstellen
+;pruefeobnameexistiert(suexistiert);IF suexistiertTHEN saveupdateposition(
+dnrschueler);diffdatenlesen;schluessel(1):=wert(fnrsufamnames);schluessel(2)
+:=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(fnrsugebdatums));
+loeschedieerstellteobjektliste;zurueckschreiben:=TRUE ;#
+schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvor;
+suvonerfassungsbildschirmeinlesenELSE meldeauffaellig(maske(bs),
+meldunggibtsnicht);IF erfassungsprogrammTHEN startpos:=fnrparamnameELSE
+startpos:=fnrparambearbnameFI ;return(1)FI .END PROC suanmeldungbearbeiten;
+BOOL PROC sinnvolleauswahlgetroffen:fnrfehlerfeld:=0;IF erfassungsprogramm
+THEN pruefe(pruefartauswahl,maske(bs),erfassungsfeld(fbs1),fnrauswahlanfang,
+fnrauswahlende,0,leer,fnrfehlerfeld);IF fnrfehlerfeld=0THEN IF erfassungsfeld
+(fbs1)(fnrparamgebdat)<>leerTHEN pruefe(pruefartdatum,maske(bs),
+erfassungsfeld(fbs1),fnrparamgebdat,0,0,leer,fnrfehlerfeld);FI FI ;
+fnrfehlerfeld=0ELSE IF erfassungsfeld(fbs1)(fnrparambearbgebdat)<>leerTHEN
+pruefe(pruefartdatum,maske(bs),erfassungsfeld(fbs1),fnrparambearbgebdat,0,0,
+leer,fnrfehlerfeld);FI ;fnrfehlerfeld=0FI .END PROC sinnvolleauswahlgetroffen
+;TEXT PROC suerfassungswert(INT CONST feldnr):IF (feldnr>maxfelderzahl)OR (
+feldnr<1)THEN ""ELSE erfassungsfeld(bs)(feldnr)FI .END PROC suerfassungswert;
+PROC schluesselbereitstellen:IF erfassungsprogrammTHEN schluessel(1):=
+erfassungsfeld(fbs1)(fnrparamname);schluessel(2):=erfassungsfeld(fbs1)(
+fnrparamrufname);schluessel(3):=erfassungsfeld(fbs1)(fnrparamgebdat)ELIF
+bearbeitungsprogrammTHEN schluessel(1):=erfassungsfeld(fbs1)(
+fnrparambearbname);schluessel(2):=erfassungsfeld(fbs1)(fnrparambearbrufname);
+schluessel(3):=erfassungsfeld(fbs1)(fnrparambearbgebdat)FI ;alterschluessel(1
+):=schluessel(1);alterschluessel(2):=schluessel(2);alterschluessel(3):=
+schluessel(3);END PROC schluesselbereitstellen;PROC pruefeobnameexistiert(
+BOOL VAR suexist):TEXT VAR datenbankwerte,schluesselwerte;inittupel(
+dnrschueler);putwert(fnrsufamnames,schluessel(1));putwert(fnrsurufnames,
+schluessel(2));putwert(fnrsugebdatums,datumskonversion(schluessel(3)));
+putwert(fnrsustatuss,aktbestand);IF neuenschuelereinfuegenTHEN search(
+dnrschueler,FALSE )ELSE search(ixsustatfamrufgeb,FALSE );FI ;IF (NOT
+neuenschuelereinfuegenCAND dbstatus=okCAND wert(fnrsustatuss)=aktbestand)OR (
+neuenschuelereinfuegenCAND dbstatus=ok)THEN datenbankwerte:=wert(
+fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));schluesselwerte:=
+schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=schluessel(1)CAND (
+(schluessel(2)=leerAND schluessel(3)=leer)OR (pos(datenbankwerte,
+schluesselwerte)=1)))ELSE suexist:=FALSE FI .END PROC pruefeobnameexistiert;
+PROC bereiteaenderungvor:savetupel(dnrschueler,tupelsich);neuerschueler:=
+FALSE ;holemaskenfallsnotwendig;fuelledbdateninfelder;bs:=erstererfbildschirm
+;erfassungsbildschirmaufbauen.fuelledbdateninfelder:INT VAR bsn;FOR bsnFROM
+erstererfbildschirmUPTO letztererfbildschirmREP holedbwerte(bsn)PER .END
+PROC bereiteaenderungvor;PROC holemaskenfallsnotwendig:IF NOT (maskegeholt(
+erstererfbildschirm))THEN FOR bsFROM erstererfbildschirmUPTO
+letztererfbildschirmREP IF NOT maskegeholt(bs)THEN maskeholen(bs)FI ;PER FI .
+END PROC holemaskenfallsnotwendig;PROC suanmeldungeinfuegen:
+neuenschuelereinfuegen:=TRUE ;IF sinnvolleauswahlgetroffenTHEN
+neueintragbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI .
+neueintragbeginnen:legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;
+schluesselbereitstellen;pruefeobnameexistiert(suexistiert);IF suexistiert
+THEN meldeauffaellig(maske(bs),meldunggibtsschon);return(1)ELSE
+zurueckschreiben:=FALSE ;bereiteneueintragvor;
+suvonerfassungsbildschirmeinlesenFI .bereiteneueintragvor:neuerschueler:=
+TRUE ;neuerschuelerersteintrag:=TRUE ;holemaskenfallsnotwendig;bs:=
+erstererfbildschirm;erfassungsbildschirmaufbauen.END PROC
+suanmeldungeinfuegen;PROC legeaktuellenbestandfest:IF bearbeitungsprogramm
+THEN aktbestand:=bestandlaufschuljELIF erfassungsfeld(fbs1)(fnrneuan5)<>leer
+THEN aktbestand:=bestandneu5ELIF erfassungsfeld(fbs1)(fnrneuan11)<>leerTHEN
+aktbestand:=bestandneu11ELIF erfassungsfeld(fbs1)(fnrneusonst)<>leerTHEN
+aktbestand:=bestandneusonstELIF erfassungsfeld(fbs1)(fnrneulaufschulj)<>leer
+THEN aktbestand:=bestandlaufschuljFI .END PROC legeaktuellenbestandfest;PROC
+suanmeldungspeichern(BOOL CONST zuspeichern):BOOL VAR suexistiert;TEXT VAR
+schuelertupel:="";IF NOT zuspeichernTHEN IF neuerschuelerTHEN
+vorbereitendesnaechstenneuen;return(1)ELSE IF NOT zeigeprogrammTHEN melde(
+maske(bs),meldungkeineaenderung,subtext(namefuermeldung,1,
+maxlaengenamebeikeineaenderung)+kennzmeldungauffaellig)FI ;
+vorbereitendernaechstenschluesselbehandlungFI ELSE speicherungstartenFI .
+speicherungstarten:INT VAR fehlerstatus:=0;
+pruefeobbeineuemschuelerschonvorhanden;IF datenfehlerfreiTHEN datenschreiben;
+IF statussudatei<>0THEN melde(maske(bs),meldungspeicherungfehlerhaft,text(
+statussudatei)+kennzmeldungauffaellig);#altenschuelerwiedereintragen;dr10.
+05.88#return(1)ELIF neuerschuelerTHEN #schuelerinstatwuerfeleinfuegen;dr10.
+05.88#vorbereitendesnaechstenneuen;return(1)ELSE #
+schuelerinstatwuerfeleinfuegen;dr10.05.88#
+vorbereitendernaechstenschluesselbehandlungFI ;ELSE fehlerbehandeln;return(1)
+FI .pruefeobbeineuemschuelerschonvorhanden:IF falschesdatum(erfassungsfeld(
+fbs2)(fnrgebdat))THEN fehlerstatus:=fnrgebdat;bs:=fbs2;
+erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),meldungfalschesdatum);
+ELSE schluessel(1):=erfassungsfeld(fbs2)(fnrname);schluessel(2):=
+erfassungsfeld(fbs2)(fnrrufname);schluessel(3):=erfassungsfeld(fbs2)(
+fnrgebdat);IF geaenderteschluesselfelderTHEN savetupel(dnrschueler,
+schuelertupel);pruefeobnameexistiert(suexistiert);restoretupel(dnrschueler,
+schuelertupel);IF suexistiertTHEN fehlerstatus:=fnrname;bs:=fbs2;
+erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),meldunggibtsschon);
+ELSE pruefeplausibilitaet(fehlerstatus);FI ELSE pruefeplausibilitaet(
+fehlerstatus);FI FI .datenfehlerfrei:fehlerstatus=0.fehlerbehandeln:startpos
+:=fehlerstatus.END PROC suanmeldungspeichern;PROC datenschreiben:
+meldespeicherung;dbwertzuordnung;IF neuerschuelerTHEN logeintragvornehmen(
+"Neueinfügen");neueneinfuegenELSE logeintragvornehmen("Änderung");
+bearbeitetenschreibenFI ;.meldespeicherung:IF neuerschuelerTHEN melde(maske(
+bs),meldungspeicherung,namefuermeldung+kennzmeldungauffaellig)ELSE melde(
+maske(bs),meldungaenderung,subtext(namefuermeldung,1,
+maxlaengenamebeiaenderung)+kennzmeldungauffaellig)FI .dbwertzuordnung:INT
+VAR bsn;IF neuerschuelerTHEN inittupel(dnrschueler)FI ;FOR bsnFROM
+erstererfbildschirmUPTO letztererfbildschirmREP setzedbwerte(bsn)PER ;.END
+PROC datenschreiben;TEXT PROC namefuermeldung:LET kennznametrenner=".";(
+schluessel(2)SUB 1)+kennznametrenner+schluessel(1).END PROC namefuermeldung;
+PROC logeintragvornehmen(TEXT CONST logergaenzung):TEXT VAR eintrag;IF
+erfassungsprogrammTHEN eintrag:=logtextbeginn1ELSE eintrag:=logtextbeginn2FI
+;eintragCAT logergaenzung;eintragCAT " """;eintragCAT schluessel(1);eintrag
+CAT ", ";eintragCAT schluessel(2);eintragCAT ", ";eintragCAT datumskonversion
+(schluessel(3));eintragCAT """";logeintrag(eintrag)END PROC
+logeintragvornehmen;PROC neueneinfuegen:diffdatentid:="";putwert(
+fnrdddiffdatennr,unique(dnrdiffdaten));insert(dnrdiffdaten);IF dbstatus=ok
+THEN search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN diffdatentid:=gettid;FI
+ELSE fehlerprotokoll(dnrdiffdaten,satzeinfuegen);FI ;putwert(
+fnrsudiffdatennrs,wert(fnrdddiffdatennr));putwert(fnrsustatuss,aktbestand);
+putwert(fnrsutiddiffdaten,diffdatentid);insert(dnrschueler);statussudatei:=
+dbstatus;evtlaenderungderkurswahldatenvollziehenEND PROC neueneinfuegen;PROC
+bearbeitetenschreiben:TEXT VAR sj:=schulkenndatum(aktschuljahr),hj:=
+schulkenndatum(akthalbjahr);putwert(fnrsustatuss,aktbestand);
+restoreupdateposition(dnrschueler);#update(dnrschueler);dr10.05.88#selupdate(
+dnrschueler);statussudatei:=dbstatus;replace(dnrdiffdaten,wert(
+fnrsutiddiffdaten));IF statussudatei=okCAND aktbestand=bestandlaufschuljTHEN
+neueklasseinhalbjahresdateneintragen(schluessel,sj,hj,wert(fnrsusgrpjgst),
+wert(fnrsusgrpzugtut))FI ;IF statussudatei=okCAND geaenderteschluesselfelder
+THEN hjddateiupdate(dnrhalbjahresdaten,satzneueschluessel);
+evtlaenderungderkurswahldatenvollziehenFI END PROC bearbeitetenschreiben;
+BOOL PROC geaenderteschluesselfelder:schluessel(1)<>alterschluessel(1)OR
+schluessel(2)<>alterschluessel(2)OR schluessel(3)<>alterschluessel(3)END
+PROC geaenderteschluesselfelder;PROC
+vorbereitendernaechstenschluesselbehandlung:IF exists(dateiname)THEN
+holenaechstenschluesselauslisteELSE zurueckschreiben:=FALSE ;
+suzurueckzumanfangsbildschirm(2);FI .holenaechstenschluesselausliste:BOOL
+VAR ok,kannbearbeitetwerden:=FALSE ;holenaechstenmehrtlgschluesselausdatei(ok
+);WHILE okREP pruefeobnameexistiert(ok);IF okTHEN saveupdateposition(
+dnrschueler);diffdatenlesen;kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE
+holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden
+THEN zurueckschreiben:=TRUE ;IF mehrereloeschenTHEN bereiteloeschenvor;return
+(1)ELSE #schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvor;
+return(1)FI ELSE zurueckschreiben:=FALSE ;behandleendederlistenabarbeitungFI
+.behandleendederlistenabarbeitung:mehrereloeschen:=FALSE ;meldeauffaellig(
+maske(bs),meldungletzter);suzurueckzumanfangsbildschirm(3).END PROC
+vorbereitendernaechstenschluesselbehandlung;PROC sudatenimbildschirmkopieren:
+INT VAR curspos:=startpos;IF bs=fbs2THEN IF curspos=fnrrufnameTHEN
+erfassungsfeld(bs)(fnrrufname):=erfassungsfeld(bs)(fnrvornamen);put(maske(bs)
+,erfassungsfeld(bs)(fnrrufname),fnrrufname)ELIF curspos=fnrerznameTHEN
+erfassungsfeld(bs)(fnrerzname):=erfassungsfeld(bs)(fnrname);put(maske(bs),
+erfassungsfeld(bs)(fnrerzname),fnrerzname);erfassungsfeld(bs)(fnrerznamenszus
+):=erfassungsfeld(bs)(fnrnamenszus);put(maske(bs),erfassungsfeld(bs)(
+fnrerznamenszus),fnrerznamenszus);INT VAR i;FOR iFROM 0UPTO fnrerzplzort-
+fnrerzstrREP erfassungsfeld(bs)(fnrerzstr+i):=erfassungsfeld(bs)(fnrsustr+i);
+put(maske(bs),erfassungsfeld(bs)(fnrerzstr+i),fnrerzstr+i)PER ;FI ;startpos:=
+cursposFI ;return(1).END PROC sudatenimbildschirmkopieren;PROC
+suanmeldungzeigen:BOOL VAR listeexistiertnicht;IF sinnvolleauswahlgetroffen
+THEN listezeigenbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI .
+listezeigenbeginnen:schluesselbereitstellen;legeaktuellenbestandfest;
+setzedbwerte(bs);meldeauffaellig(maske(bs),meldunglistenerstellung);
+parsenooffields(5);putwert(fnrsustatuss,aktbestand);objektlistestarten(
+ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,listeexistiertnicht);IF
+listeexistiertnichtTHEN reinitparsing;meldeauffaellig(maske(bs),
+meldungkeineliste);return(1)ELSE bsdraussen:=0;datensatzlistenausgabe(PROC (
+INT CONST )suerfassungschueler,TRUE ,BOOL PROC pruefungschueler)FI .END PROC
+suanmeldungzeigen;PROC suerfassungschueler(INT CONST n):LET namenlaenge=63,
+trenner=", ";TEXT VAR identizeile,schluesselanhang:="";INT VAR i;identizeile
+:=wert(fnrsufamnames)+trenner+wert(fnrsurufnames);identizeile:=text(
+identizeile,namenlaenge)+wert(fnrsugebdatums);schluesselkoppeln;
+setzeidentiwert(identizeilemitschluesselanhang).schluesselkoppeln:FOR iFROM 1
+UPTO anzschluesselsuREP schluesselanhangCAT oblitrenner;schluesselanhangCAT
+wert(dnrschueler+i);PER .identizeilemitschluesselanhang:identizeile+
+schluesselanhang.END PROC suerfassungschueler;BOOL PROC pruefungschueler:wert
+(fnrsustatuss)=aktbestandEND PROC pruefungschueler;PROC
+suausgesuchtezurbearbeitung:behandlungderausgesuchten(aendern)END PROC
+suausgesuchtezurbearbeitung;PROC holeerstenmehrtlgschluesselausdatei(BOOL
+VAR ok):IF NOT exists(dateiname)THEN ok:=FALSE ;LEAVE
+holeerstenmehrtlgschluesselausdateiFI ;f:=sequentialfile(input,dateiname);
+holenaechstenmehrtlgschluesselausdatei(ok);END PROC
+holeerstenmehrtlgschluesselausdatei;PROC
+holenaechstenmehrtlgschluesselausdatei(BOOL VAR ok):TEXT VAR thesaurustext:=
+"";INT VAR schluesselbeginn:=0;INT VAR schluesseltrennung:=0;INT VAR i:=1;IF
+eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f,
+thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI .
+bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext,
+oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner,
+schluesselbeginn+1);FOR iFROM 1UPTO anzschluesselsuREP IF schluesseltrennung>
+0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1,
+schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung
+:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):=
+subtext(thesaurustext,schluesselbeginn+1);FI ;PER ;schluessel(3):=
+datumrekonversion(schluessel(3));.END PROC
+holenaechstenmehrtlgschluesselausdatei;PROC loeschedieerstellteobjektliste:
+forget(dateiname,quiet);END PROC loeschedieerstellteobjektliste;INT PROC
+erstesfeldbeierfassung(INT CONST bildschirmnummer):IF bildschirmnummer=fbs1
+THEN erstesfeldbeierfassungbs1ELIF bildschirmnummer=fbs2THEN
+erstesfeldbeierfassungbs2ELIF bildschirmnummer=fbs3THEN
+erstesfeldbeierfassungbs3ELIF bildschirmnummer=fbs4THEN
+erstesfeldbeierfassungbs4ELSE 1FI .END PROC erstesfeldbeierfassung;PROC
+suschuelerbsblaettern(BOOL CONST vorwaerts):IF blaetternsinnlosTHEN
+meldeauffaellig(maske(bs),meldungblaetterngehtnicht)ELSE
+fuehreblaettervorgangdurch;FI ;return(1).blaetternsinnlos:(vorwaertsAND (bs=
+letztererfbildschirm))OR (NOT vorwaertsAND (bs=erstererfbildschirm)).
+fuehreblaettervorgangdurch:IF vorwaertsTHEN bsINCR 1ELSE bsDECR 1FI ;
+erfassungsbildschirmaufbauen.END PROC suschuelerbsblaettern;PROC
+bsfelderinitialisieren:INT VAR bsnr;FOR bsnrFROM 1UPTO bsanzahlREP init(
+erfassungsfeld(bsnr))PER .END PROC bsfelderinitialisieren;PROC
+vorbereitendesnaechstenneuen:bsfelderinitialisieren;bs:=erstererfbildschirm;
+erfassungsbildschirmaufbauen.END PROC vorbereitendesnaechstenneuen;PROC
+suzurueckzumanfangsbildschirm(INT CONST schritte):bs:=1;IF zurueckschreiben
+THEN #schuelerinstatwuerfeleinfuegendr10.05.88#FI ;IF
+feldschutzzumloeschengesetztTHEN feldschutzfuerallefelderaufheben;
+feldschutzzumloeschengesetzt:=FALSE FI ;erfassungsbildschirmaufbauen;return(
+schritte);.feldschutzfuerallefelderaufheben:INT VAR i;FOR iFROM
+fnrerstesausgabefeldUPTO fnrloeschfeld-1REP protect(maske(erstererfbildschirm
+),i,FALSE )PER ;protect(maske(erstererfbildschirm),fnrloeschfeld,TRUE ).END
+PROC suzurueckzumanfangsbildschirm;PROC pruefeplausibilitaet(INT VAR fstatus)
+:fstatus:=0;INT VAR fmeld;meldeauffaellig(maske(bs),pruefemeldung);pruefebs2;
+IF fstatus<>0THEN fehlerausgabeELSE pruefebs3;IF fstatus<>0THEN fehlerausgabe
+ELSE pruefebs4;IF fstatus<>0THEN fehlerausgabeFI FI FI .pruefebs2:IF
+erfassungsfeld(fbs2)(fnrname)=leerTHEN fstatus:=fnrname;bs:=fbs2;fmeld:=
+fmeldbittefuellen;LEAVE pruefebs2FI ;IF erfassungsfeld(fbs2)(fnrrufname)=leer
+THEN fstatus:=fnrrufname;bs:=fbs2;fmeld:=fmeldbittefuellen;LEAVE pruefebs2FI
+;IF erfassungsfeld(fbs2)(fnrgebdat)=leerTHEN fstatus:=fnrgebdat;bs:=fbs2;
+fmeld:=fmeldbittefuellen;LEAVE pruefebs2ELSE IF falschesdatum(erfassungsfeld(
+fbs2)(fnrgebdat))THEN fstatus:=fnrgebdat;bs:=fbs2;fmeld:=fmeldfalschesdatum;
+LEAVE pruefebs2FI FI ;IF NOT ((erfassungsfeld(fbs2)(fnrgeschlecht)=weiblich)
+OR (erfassungsfeld(fbs2)(fnrgeschlecht)=maennlich))THEN fstatus:=
+fnrgeschlecht;bs:=fbs2;fmeld:=fmeldnichtimbestand;LEAVE pruefebs2FI ;IF
+erfassungsfeld(fbs2)(fnrstaatsan)<>leerTHEN IF NOT imschlbestand(
+erfassungsfeld(fbs2)(fnrstaatsan),bestandstaaten)THEN fstatus:=fnrstaatsan;bs
+:=fbs2;fmeld:=fmeldnichtimbestand;LEAVE pruefebs2FI FI ;IF erfassungsfeld(
+fbs2)(fnrreligion)<>leerTHEN IF NOT imschlbestand(erfassungsfeld(fbs2)(
+fnrreligion),bestandreligion)THEN fstatus:=fnrreligion;bs:=fbs2;fmeld:=
+fmeldnichtimbestand;LEAVE pruefebs2FI FI .pruefebs3:INT CONST eintrittsjgst:=
+int(erfassungsfeld(fbs3)(fnreintrittjgst));IF erfassungsfeld(fbs3)(
+fnreintrittsdatum)=leerTHEN fstatus:=fnreintrittsdatum;bs:=fbs3;fmeld:=
+fmeldbittefuellen;LEAVE pruefebs3ELSE IF falschesdatum(erfassungsfeld(fbs3)(
+fnreintrittsdatum))THEN fstatus:=fnreintrittsdatum;bs:=fbs3;fmeld:=
+fmeldfalschesdatum;LEAVE pruefebs3FI FI ;IF aktbestand=bestandneusonstTHEN
+IF erfassungsfeld(fbs3)(fnreintrittjgst)=leerTHEN fstatus:=fnreintrittjgst;bs
+:=fbs3;fmeld:=fmeldbittefuellen;LEAVE pruefebs3FI ;IF eintrittsjgst<jgstufe5
+COR eintrittsjgst>jgstufe13THEN fstatus:=fnreintrittjgst;bs:=fbs3;fmeld:=
+fmeldnumundbegrenzt;LEAVE pruefebs3FI ;IF eintrittsjgst=jgstufe5COR
+eintrittsjgst=jgstufe11THEN fstatus:=fnreintrittjgst;bs:=fbs3;fmeld:=
+fmeldbitteanderejgst;LEAVE pruefebs3FI FI ;IF erfassungsfeld(fbs3)(
+fnrschulkuerzel)<>leerTHEN IF NOT imbestand(erfassungsfeld(fbs3)(
+fnrschulkuerzel),bestandschulen)THEN fstatus:=fnrschulkuerzel;bs:=fbs3;fmeld
+:=fmeldnichtimbestand;LEAVE pruefebs3FI FI ;IF aktbestand=bestandlaufschulj
+THEN IF erfassungsfeld(fbs3)(fnrzugang)=leerTHEN fstatus:=fnrzugang;bs:=fbs3;
+fmeld:=fmeldbittefuellen;LEAVE pruefebs3ELIF NOT imschlbestand(erfassungsfeld
+(fbs3)(fnrzugang),bestandzugang)THEN fstatus:=fnrzugang;bs:=fbs3;fmeld:=
+fmeldnichtimbestand;LEAVE pruefebs3FI ;FI ;IF bearbeitungsprogrammCAND
+erfassungsfeld(fbs3)(fnrneueschule)<>leerTHEN IF NOT imbestand(erfassungsfeld
+(fbs3)(fnrneueschule),bestandschulen)THEN fstatus:=fnrneueschule;bs:=fbs3;
+fmeld:=fmeldnichtimbestand;LEAVE pruefebs3FI FI ;IF bearbeitungsprogrammCAND
+erfassungsfeld(fbs3)(fnrabdatum)<>leerTHEN IF falschesdatum(erfassungsfeld(
+fbs3)(fnrabdatum))THEN fstatus:=fnrabdatum;bs:=fbs3;fmeld:=fmeldfalschesdatum
+;LEAVE pruefebs3FI FI ;IF aktbestand<>bestandlaufschuljTHEN LEAVE pruefebs3
+FI ;TEXT VAR jgst:=erfassungsfeld(fbs3)(fnrjgst);TEXT VAR zug:=erfassungsfeld
+(fbs3)(fnrzug);IF jgst=leerTHEN fstatus:=fnrjgst;bs:=fbs3;fmeld:=
+fmeldbittefuellen;LEAVE pruefebs3FI ;IF zug=leerTHEN fstatus:=fnrzug;bs:=fbs3
+;fmeld:=fmeldbittefuellen;LEAVE pruefebs3FI ;IF NOT imbestandschuelergruppen
+THEN IF neuerschuelerTHEN fstatus:=fnrjgstELSE fstatus:=fnrzugFI ;bs:=fbs3;
+fmeld:=fmeldnichtimbestand;LEAVE pruefebs3FI .pruefebs4:IF erfassungsfeld(
+fbs4)(fnrreligionabmelddatum)<>leerTHEN IF falschesdatum(erfassungsfeld(fbs4)
+(fnrreligionabmelddatum))THEN fstatus:=fnrreligionabmelddatum;bs:=fbs4;fmeld
+:=fmeldfalschesdatum;LEAVE pruefebs4FI FI ;IF erfassungsfeld(fbs4)(
+fnrreligionanmelddatum)<>leerTHEN IF falschesdatum(erfassungsfeld(fbs4)(
+fnrreligionanmelddatum))THEN fstatus:=fnrreligionanmelddatum;bs:=fbs4;fmeld:=
+fmeldfalschesdatum;LEAVE pruefebs4FI FI ;.fehlerausgabe:
+erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),fmeld).END PROC
+pruefeplausibilitaet;BOOL PROC imbestandschuelergruppen:TEXT VAR schuljahr:=
+schulkenndatum(aktschuljahr),halbjahr:=schulkenndatum(akthalbjahr);INT VAR
+dateinummer:=dnraktschuelergruppen;putwert(dateinummer+1,schuljahr);putwert(
+dateinummer+2,halbjahr);putwert(dateinummer+3,erfassungsfeld(fbs3)(fnrjgst));
+putwert(dateinummer+4,erfassungsfeld(fbs3)(fnrzug));search(dateinummer,TRUE )
+;dbstatus=0END PROC imbestandschuelergruppen;BOOL PROC falschesdatum(TEXT
+CONST pruefdatum):LET falschertag="00";datum(pruefdatum)=nildatumCOR subtext(
+pruefdatum,1,2)=falschertag.END PROC falschesdatum;PROC setzedbwerte(INT
+CONST bsnr):INT VAR lv,verm;SELECT bsnrOF CASE fbs1:setzedbwertevonbs1CASE
+fbs2:setzedbwertevonbs2CASE fbs3:setzedbwertevonbs3CASE fbs4:
+setzedbwertevonbs4END SELECT ;IF neuenschuelereinfuegenTHEN putwert(
+fnrsutidakthjd,leer)ELSE putwert(fnrsutidakthjd,hjdtid)FI .setzedbwertevonbs1
+:IF NOT bearbeitungsprogrammTHEN putwert(fnrsufamnames,erfassungsfeld[bsnr][
+fnrparamname]);putwert(fnrsurufnames,erfassungsfeld[bsnr][fnrparamrufname]);
+putwert(fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrparamgebdat])
+);ELSE putwert(fnrsufamnames,erfassungsfeld[bsnr][fnrparambearbname]);putwert
+(fnrsurufnames,erfassungsfeld[bsnr][fnrparambearbrufname]);putwert(
+fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrparambearbgebdat]));
+FI .setzedbwertevonbs2:putwert(fnrsufamnames,erfassungsfeld[bsnr][fnrname]);
+putwert(fnrsunamenszusatzs,erfassungsfeld[bsnr][fnrnamenszus]);putwert(
+fnrsugebnames,erfassungsfeld[bsnr][fnrgebname]);putwert(fnrsuvornames,
+erfassungsfeld[bsnr][fnrvornamen]);putwert(fnrsurufnames,erfassungsfeld[bsnr]
+[fnrrufname]);putwert(fnrsustrnrs,erfassungsfeld[bsnr][fnrsustr]);putwert(
+fnrsutelnrs,erfassungsfeld[bsnr][fnrsutelefon]);putwert(fnrsuplzorts,
+erfassungsfeld[bsnr][fnrsuplzort]);putwert(fnrsuwohntbei,erfassungsfeld[bsnr]
+[fnrwohntbei]);putwert(fnrsuortsteils,erfassungsfeld[bsnr][fnrortsteil]);
+putwert(fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrgebdat]));
+putwert(fnrsugeschlechts,erfassungsfeld[bsnr][fnrgeschlecht]);putwert(
+fnrsustaatsangs,erfassungsfeld[bsnr][fnrstaatsan]);putwert(fnrsureligionsz,
+erfassungsfeld[bsnr][fnrreligion]);putwert(fnrsuverhes,erfassungsfeld[bsnr][
+fnrverwandt]);putwert(fnrsufamnamee,erfassungsfeld[bsnr][fnrerzname]);putwert
+(fnrsunamenszusatze,erfassungsfeld[bsnr][fnrerznamenszus]);putwert(
+fnrsuvornamee,erfassungsfeld[bsnr][fnrerzvornamen]);putwert(fnrsustrnre,
+erfassungsfeld[bsnr][fnrerzstr]);putwert(fnrsutelnre,erfassungsfeld[bsnr][
+fnrerztelefon]);putwert(fnrsuplzorte,erfassungsfeld[bsnr][fnrerzplzort]);.
+setzedbwertevonbs3:putwert(fnrsugeborts,erfassungsfeld[bsnr][fnrgebort]);
+putwert(fnrsugebkreiss,erfassungsfeld[bsnr][fnrkreisland]);putwert(
+fnrsumuttersprache,erfassungsfeld[bsnr][fnrmuttersprache]);putwert(
+fnrsuspaetaus,erfassungsfeld[bsnr][fnraussiedler]);putwert(fnrsujahreinschul,
+erfassungsfeld[bsnr][fnreinschulung]);putwert(fnrsuskennlschule,
+erfassungsfeld[bsnr][fnrschulkuerzel]);putwert(fnrsuklasselschule,
+erfassungsfeld[bsnr][fnrletzteklasse]);putwert(fnrsueintrittsdats,
+datumskonversion(erfassungsfeld[bsnr][fnreintrittsdatum]));putwert(
+fnrsujgsteintr,jgstaufber(erfassungsfeld[bsnr][fnreintrittjgst]));putwert(
+fnrsueintrittinsek,erfassungsfeld[bsnr][fnrsek2]);putwert(fnrsusgrpjgst,
+jgstaufber(erfassungsfeld[bsnr][fnrjgst]));putwert(fnrsusgrpzugtut,
+erfassungsfeld[bsnr][fnrzug]);putwert(fnrsuartzugang,erfassungsfeld[bsnr][
+fnrzugang]);putwert(fnrsuneuerzugtut,erfassungsfeld[bsnr][fnrneuerzug]);FOR
+vermFROM 0UPTO zahldervermerke-1REP putwert(fnrsuvermerk1+verm,erfassungsfeld
+[bsnr][fnrvermerk1+verm])PER ;IF bearbeitungsprogrammTHEN putwert(
+fnrsuabgdats,datumskonversion(erfassungsfeld[bsnr][fnrabdatum]));putwert(
+fnrsuabggrund,erfassungsfeld[bsnr][fnrabgrund]);putwert(fnrsuskennnschule,
+erfassungsfeld[bsnr][fnrneueschule]);putwert(fnrsuabschluss,erfassungsfeld[
+bsnr][fnrabschluss]);FI .setzedbwertevonbs4:putwert(fnrddreliunter,
+erfassungsfeld[bsnr][fnrreligionunterricht]);putwert(fnrddreliunter+1,
+datumskonversion(erfassungsfeld[bsnr][fnrreligionabmelddatum]));putwert(
+fnrddreliunter+2,datumskonversion(erfassungsfeld[bsnr][fnrreligionanmelddatum
+]));FOR lvFROM 0UPTO 11REP putwert(fnrdd1fremdfach+lv,erfassungsfeld[bsnr][
+fnrfremdsprache+lv]);PER ;putwert(fnrddkunstmusik,erfassungsfeld[bsnr][
+fnrkunstmusik]);FOR lvFROM 0UPTO 8REP putwert(fnrddagthema1+lv,erfassungsfeld
+[bsnr][fnrag+lv]);PER ;FOR lvFROM 0UPTO 7REP putwert(fnrddfach091a+lv,
+erfassungsfeld[bsnr][fnrwpsek1+lv]);PER .END PROC setzedbwerte;PROC
+holedbwerte(INT CONST bsnr):INT VAR lv,verm;SELECT bsnrOF CASE fbs1:
+holedbwertevonbs1CASE fbs2:holedbwertevonbs2CASE fbs3:holedbwertevonbs3CASE
+fbs4:holedbwertevonbs4END SELECT ;hjdtid:=wert(fnrsutidakthjd);.
+holedbwertevonbs1:IF NOT bearbeitungsprogrammTHEN erfassungsfeld[bsnr][
+fnrparamname]:=wert(fnrsufamnames);erfassungsfeld[bsnr][fnrparamrufname]:=
+wert(fnrsurufnames);erfassungsfeld[bsnr][fnrparamgebdat]:=wert(fnrsugebdatums
+);ELSE erfassungsfeld[bsnr][fnrparambearbname]:=wert(fnrsufamnames);
+erfassungsfeld[bsnr][fnrparambearbrufname]:=wert(fnrsurufnames);
+erfassungsfeld[bsnr][fnrparambearbgebdat]:=wert(fnrsugebdatums);FI .
+holedbwertevonbs2:erfassungsfeld[bsnr][fnrname]:=wert(fnrsufamnames);
+erfassungsfeld[bsnr][fnrnamenszus]:=wert(fnrsunamenszusatzs);erfassungsfeld[
+bsnr][fnrgebname]:=wert(fnrsugebnames);erfassungsfeld[bsnr][fnrvornamen]:=
+wert(fnrsuvornames);erfassungsfeld[bsnr][fnrrufname]:=wert(fnrsurufnames);
+erfassungsfeld[bsnr][fnrsustr]:=wert(fnrsustrnrs);erfassungsfeld[bsnr][
+fnrsutelefon]:=wert(fnrsutelnrs);erfassungsfeld[bsnr][fnrsuplzort]:=wert(
+fnrsuplzorts);erfassungsfeld[bsnr][fnrwohntbei]:=wert(fnrsuwohntbei);
+erfassungsfeld[bsnr][fnrortsteil]:=wert(fnrsuortsteils);erfassungsfeld[bsnr][
+fnrgebdat]:=datumrekonversion(wert(fnrsugebdatums));erfassungsfeld[bsnr][
+fnrgeschlecht]:=wert(fnrsugeschlechts);erfassungsfeld[bsnr][fnrstaatsan]:=
+wert(fnrsustaatsangs);erfassungsfeld[bsnr][fnrreligion]:=wert(fnrsureligionsz
+);erfassungsfeld[bsnr][fnrverwandt]:=wert(fnrsuverhes);erfassungsfeld[bsnr][
+fnrerzname]:=wert(fnrsufamnamee);erfassungsfeld[bsnr][fnrerznamenszus]:=wert(
+fnrsunamenszusatze);erfassungsfeld[bsnr][fnrerzvornamen]:=wert(fnrsuvornamee)
+;erfassungsfeld[bsnr][fnrerzstr]:=wert(fnrsustrnre);erfassungsfeld[bsnr][
+fnrerztelefon]:=wert(fnrsutelnre);erfassungsfeld[bsnr][fnrerzplzort]:=wert(
+fnrsuplzorte);alteschluesselsichern.alteschluesselsichern:alterschluessel(1)
+:=erfassungsfeld[bsnr][fnrname];alterschluessel(2):=erfassungsfeld[bsnr][
+fnrrufname];alterschluessel(3):=erfassungsfeld[bsnr][fnrgebdat];.
+holedbwertevonbs3:TEXT VAR einjgst:=wert(fnrsujgsteintr),aktjgst:=wert(
+fnrsusgrpjgst);erfassungsfeld[bsnr][fnrgebort]:=wert(fnrsugeborts);
+erfassungsfeld[bsnr][fnrkreisland]:=wert(fnrsugebkreiss);erfassungsfeld[bsnr]
+[fnrmuttersprache]:=wert(fnrsumuttersprache);erfassungsfeld[bsnr][
+fnraussiedler]:=wert(fnrsuspaetaus);erfassungsfeld[bsnr][fnreinschulung]:=
+textnichtnull(wert(fnrsujahreinschul));erfassungsfeld[bsnr][fnrschulkuerzel]
+:=wert(fnrsuskennlschule);erfassungsfeld[bsnr][fnrletzteklasse]:=wert(
+fnrsuklasselschule);erfassungsfeld[bsnr][fnreintrittsdatum]:=
+datumrekonversion(wert(fnrsueintrittsdats));erfassungsfeld[bsnr][
+fnreintrittjgst]:=jgstaufber(einjgst);erfassungsfeld[bsnr][fnrsek2]:=
+textnichtnull(wert(fnrsueintrittinsek));erfassungsfeld[bsnr][fnrjgst]:=
+jgstaufber(aktjgst);erfassungsfeld[bsnr][fnrzug]:=wert(fnrsusgrpzugtut);
+erfassungsfeld[bsnr][fnrzugang]:=wert(fnrsuartzugang);erfassungsfeld[bsnr][
+fnrneuerzug]:=wert(fnrsuneuerzugtut);FOR vermFROM 0UPTO zahldervermerke-1REP
+erfassungsfeld[bsnr][fnrvermerk1+verm]:=wert(fnrsuvermerk1+verm)PER ;IF
+bearbeitungsprogrammTHEN erfassungsfeld[bsnr][fnrabdatum]:=datumrekonversion(
+wert(fnrsuabgdats));erfassungsfeld[bsnr][fnrabgrund]:=wert(fnrsuabggrund);
+erfassungsfeld[bsnr][fnrneueschule]:=wert(fnrsuskennnschule);erfassungsfeld[
+bsnr][fnrabschluss]:=wert(fnrsuabschluss);FI .holedbwertevonbs4:
+erfassungsfeld[bsnr][fnrreligionunterricht]:=wert(fnrddreliunter);
+erfassungsfeld[bsnr][fnrreligionabmelddatum]:=datumrekonversion(wert(
+fnrddreliunter+1));erfassungsfeld[bsnr][fnrreligionanmelddatum]:=
+datumrekonversion(wert(fnrddreliunter+2));FOR lvFROM 0UPTO 11REP
+erfassungsfeld[bsnr][fnrfremdsprache+lv]:=wert(fnrdd1fremdfach+lv);PER ;
+erfassungsfeld[bsnr][fnrkunstmusik]:=wert(fnrddkunstmusik);FOR lvFROM 0UPTO 8
+REP erfassungsfeld[bsnr][fnrag+lv]:=wert(fnrddagthema1+lv);PER ;FOR lvFROM 0
+UPTO 7REP erfassungsfeld[bsnr][fnrwpsek1+lv]:=wert(fnrddfach091a+lv);PER .
+END PROC holedbwerte;PROC suanmeldungloeschen:IF sinnvolleauswahlgetroffen
+THEN loeschenvorbereitungbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI .
+loeschenvorbereitungbeginnen:IF namenangabenausreichendTHEN loeschenbeginnen
+ELSE startpos:=fnrfehlerfeld;return(1)FI .namenangabenausreichend:IF
+erfassungsprogrammTHEN namenangabenausreichendbeierfassungELSE
+namenangabenausreichendbeibearbeitungoderzeigenFI .loeschenbeginnen:
+legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;schluesselbereitstellen
+;pruefeobnameexistiert(suexistiert);IF suexistiertTHEN saveupdateposition(
+dnrschueler);diffdatenlesen;schluessel(1):=wert(fnrsufamnames);schluessel(2)
+:=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(fnrsugebdatums));
+loeschedieerstellteobjektliste;zurueckschreiben:=FALSE ;bereiteloeschenvor;
+suvonerfassungsbildschirmeinlesenELSE meldeauffaellig(maske(bs),
+meldunggibtsnicht);IF erfassungsprogrammTHEN startpos:=fnrparamnameELSE
+startpos:=fnrparambearbnameFI ;return(1)FI .END PROC suanmeldungloeschen;
+PROC bereiteloeschenvor:bereiteaenderungvor;
+feldschutzfuerallefelderausserloeschfeldsetzen;meldeauffaellig(maske(bs),
+meldungloeschfrage);startpos:=fnrloeschfeldEND PROC bereiteloeschenvor;PROC
+feldschutzfuerallefelderausserloeschfeldsetzen:INT VAR i;FOR iFROM
+fnrerstesausgabefeldUPTO fnrloeschfeld-1REP protect(maske(bs),i,TRUE )PER ;
+protect(maske(erstererfbildschirm),fnrloeschfeld,FALSE );
+feldschutzzumloeschengesetzt:=TRUE .END PROC
+feldschutzfuerallefelderausserloeschfeldsetzen;PROC
+suanmeldungloeschenausfuehren(BOOL CONST zuloeschen):IF zuloeschenTHEN melde(
+maske(bs),meldungloeschung,namefuermeldung+kennzmeldungauffaellig);
+logeintragvornehmen("Entfernen");schuelerloeschen;IF dbstatus<>0THEN melde(
+maske(bs),meldungloeschenfehlerhaft,text(dbstatus)+kennzmeldungauffaellig);#
+altenschuelerwiedereintragen;dr10.05.88#return(1)ELSE
+vorbereitendernaechstenschluesselbehandlungFI ELSE melde(maske(bs),
+meldungkeineloeschung,namefuermeldung+kennzmeldungauffaellig);
+vorbereitendernaechstenschluesselbehandlungFI .schuelerloeschen:
+hjddateiupdate(dnrhalbjahresdaten,satzloeschen);diffdatenloeschen;delete(
+dnrschueler);evtlaenderungderkurswahldatenvollziehen.diffdatenloeschen:IF
+wert(fnrsudiffdatennrs)<>""THEN putwert(fnrdddiffdatennr,wert(
+fnrsudiffdatennrs));search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN delete(
+dnrdiffdaten)FI FI .END PROC suanmeldungloeschenausfuehren;PROC
+suanmeldungausgesuchteloeschen:behandlungderausgesuchten(loeschen)END PROC
+suanmeldungausgesuchteloeschen;PROC behandlungderausgesuchten(INT CONST
+wasistzutun):BOOL VAR ok,kannbearbeitetwerden:=FALSE ;
+loeschedieerstellteobjektliste;objektlistebeenden(dateiname,TRUE );
+reinitparsing;holeerstenmehrtlgschluesselausdatei(ok);WHILE okREP
+pruefeobnameexistiert(ok);IF okTHEN saveupdateposition(dnrschueler);
+diffdatenlesen;kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE
+holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden
+THEN zurueckschreiben:=TRUE ;IF wasistzutun=aendernTHEN #
+schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvorELSE
+bereiteloeschenvor;mehrereloeschen:=TRUE FI ;
+suvonerfassungsbildschirmeinlesenELSE zurueckschreiben:=FALSE ;
+suzurueckzumanfangsbildschirm(2)FI .END PROC behandlungderausgesuchten;BOOL
+PROC namenangabenausreichendbeierfassung:IF erfassungsfeld(fbs1)(fnrparamname
+)=leerTHEN meldeauffaellig(maske(bs),meldungbittename);fnrfehlerfeld:=
+fnrparamname;FALSE ELIF erfassungsfeld(fbs1)(fnrparamrufname)=leerCAND
+erfassungsfeld(fbs1)(fnrparamgebdat)<>leerTHEN meldeauffaellig(maske(bs),
+meldungangabengenauer);fnrfehlerfeld:=fnrparamrufname;FALSE ELSE TRUE FI .
+END PROC namenangabenausreichendbeierfassung;BOOL PROC
+namenangabenausreichendbeibearbeitungoderzeigen:IF erfassungsfeld(fbs1)(
+fnrparambearbname)=leerTHEN meldeauffaellig(maske(bs),meldungbittename);
+fnrfehlerfeld:=fnrparambearbname;FALSE ELIF erfassungsfeld(fbs1)(
+fnrparambearbrufname)=leerCAND erfassungsfeld(fbs1)(fnrparambearbgebdat)<>
+leerTHEN meldeauffaellig(maske(bs),meldungangabengenauer);fnrfehlerfeld:=
+fnrparambearbrufname;FALSE ELSE TRUE FI .END PROC
+namenangabenausreichendbeibearbeitungoderzeigen;PROC hjddateiupdate(INT
+CONST dateinummer,wasistzutun):LET stackgroesse=6;INT VAR anzahltupel:=
+stackgroesse;inittupel(dateinummer);putwert(dateinummer+1,alterschluessel(1))
+;putwert(dateinummer+2,alterschluessel(2));putwert(dateinummer+3,
+datumskonversion(alterschluessel(3)));multisearchforward(dateinummer,
+anzahltupel);WHILE anzahltupel>0REP multisucc;IF gleicherschuelerTHEN SELECT
+wasistzutunOF CASE satzloeschen:datenloeschenCASE satzneueschluessel:
+schluesselfelderaendernENDSELECT ;anzahltupelDECR 1;IF anzahltupel=0THEN
+nachlesenFI ;ELSE LEAVE hjddateiupdateFI PER .gleicherschueler:
+alterschluessel(1)=wert(dateinummer+1)CAND alterschluessel(2)=wert(
+dateinummer+2)CAND alterschluessel(3)=datumrekonversion(wert(dateinummer+3)).
+datenloeschen:delete(dateinummer);fehlerprotokoll(dateinummer,satzloeschen).
+schluesselfelderaendern:putwert(dateinummer+1,schluessel(1));putwert(
+dateinummer+2,schluessel(2));putwert(dateinummer+3,datumskonversion(
+schluessel(3)));#update(dateinummer);dr10.05.88#selupdate(dateinummer);
+fehlerprotokoll(dateinummer,satzneueschluessel);putwert(dateinummer+1,
+alterschluessel(1));putwert(dateinummer+2,alterschluessel(2));putwert(
+dateinummer+3,datumskonversion(alterschluessel(3)));.nachlesen:anzahltupel:=
+stackgroesse;multisucc(dateinummer,anzahltupel).END PROC hjddateiupdate;PROC
+fehlerprotokoll(INT CONST dateinummer,wasausdrucken):TEXT CONST fehlerdatei:=
+"Fehlerprotokoll";ROW 4TEXT VAR fehlerwobei:=ROW 4TEXT :(
+"Einfügen in die Datei ","Ändern in der Datei ","Löschen in der Datei ",
+"Ändern der Schlüsselfelder der Datei ");IF dbstatus<>okTHEN FILE VAR f:=
+sequentialfile(output,fehlerdatei);putline(f,
+"Fehlerprotokoll zur Bearbeitung des Schülers:");putline(f,schluessel(2)+
+leerzeichen+schluessel(1)+", geboren am "+datumskonversion(schluessel(3)));
+putline(f,leer);putline(f,"Fehler beim "+fehlerwobei[wasausdrucken]+name(
+dateinummer));print(fehlerdatei);forget(fehlerdatei,quiet);FI END PROC
+fehlerprotokoll;PROC diffdatenlesen:readtid(dnrdiffdaten,wert(
+fnrsutiddiffdaten))END PROC diffdatenlesen;PROC
+evtlaenderungderkurswahldatenvollziehen:IF dbstatus=0THEN IF aktbestand=
+bestandlaufschuljTHEN IF intwert(fnrsusgrpjgst)>=jgstufe10THEN
+kurswahlserveraktualisieren(wert(fnrsusgrpjgst),"","")FI ELIF aktbestand=
+bestandneu11THEN kurswahlserveraktualisieren(text(jgstufe10),"","")ELIF
+aktbestand=bestandneusonstTHEN IF intwert(fnrsujgsteintr)>jgstufe10THEN
+kurswahlserveraktualisieren(text(intwert(fnrsujgsteintr)-1),"","")FI FI ;FI
+END PROC evtlaenderungderkurswahldatenvollziehen;END PACKET erfschuelerdaten
+
diff --git a/app/schulis/2.2.1/src/1.halbjahresdaten bearbeiten b/app/schulis/2.2.1/src/1.halbjahresdaten bearbeiten
new file mode 100644
index 0000000..3427981
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.halbjahresdaten bearbeiten
@@ -0,0 +1,679 @@
+PACKET halbjahresdatenbearbeitenDEFINES halbjahresdatenbearbeiten,
+halbjahresdatenblaettern,halbjahresdatenspeichern,
+listezuhalbjahresdatenzeigen,
+halbjahresdatenausgewaehlterschuelerbearbeitenvorbereiten,
+halbjahresdatendesschuelersnichtbearbeiten,
+halbjahresdatendesschuelersbearbeiten,halbjahresdatenentfernenvorbereiten,
+halbjahresdatenentfernen,halbjahresdatennichtentfernen,pruefunghjd,
+hjderfassungswert:LET maskennamebearb1="ms bearb halbjahresdaten 1",
+maskennamebearb2="ms bearb halbjahresdaten 2",maskennameeingang=
+"ms bearb halbjahresdaten 0",fnrname=2,fnrrufname=3,fnrgebdatum=4,
+fnrgewschuljahr=5,fnrgewhalbjahr=6,fnrgewjgst=7,fnrabgangbestand=8,
+fnrausgabename=2,fnrausgaberufname=3,fnrausgabegebdatum=4,fnrausgabeaktjgst=5
+,fnrausgabeaktzug=6,fnrausgabeabgegangen=7,fnrausgabegewschj=8,
+fnrausgabegewhj=9,fnrausgabegewjgst=10,fnrausgabegewzug=11,fnrblbriefwarn=12,
+fnrblbriefbem=13,fnrblbriefnwarn=14,fnrblbriefnbem=15,fnrversetzung=16,
+fnrnachpr1=17,fnrnachpr2=18,fnrnachpr3=19,fnrnachprbem=20,fnrnachprabgelegt=
+21,fnrnachprnote=22,fnrzeugbem1=23,fnrzeugbem2=24,fnrzeugbem3=25,
+fnrversaeumtmit=26,fnrversaeumtohne=27,fnrverspaetet=28,fnrfachanf=12,
+fnrfachende=24,fnrkursartanf=25,fnrkursartende=37,fnrklausuranf=38,
+fnrklausurende=50,fnrkursanf=51,fnrkursende=63,fnrnoteanf=64,fnrnoteende=76,
+fnrbemanf=77,fnrbemende=89,fnrwarnunganf=90,fnrwarnungende=102,
+schueleraktuell="ls",schuelerabgegangen="abg",schulhalbjahr="Schulhalbjahr",
+schuljahr="Schuljahr",bestandblauerbrief="c02 blauer brief",
+bestandbemerkungen="c02 bemerkungen",bestandzeugnisnoten="c02 zeugnisnoten",
+bestandartlv="c02 art lehrveranstaltung",trenner="�",stdplausileiste=
+"0000000000000",paramausgabe="#",anzschluesselsu=3,fmeldnichtimbestand=55,
+meldungnureinesderfaechererl=147,meldungfachangabeunzulaessig=310,
+meldungversetzungskzunzulaessig=136,meldungwirklichloeschen=65,
+meldunggibtsnicht=71,meldunghjdgibtsnicht=168,meldungunerlaubterwert=34,
+meldunglistenerstellung=7,meldungkeineliste=68,meldungletzter=67,
+meldungspeicherung=50,meldungkeinespeicherung=63,meldungfalschesdatum=157,#
+meldungkeinewiederholungsdaten=160,#meldunghalbjahrnichtrelevant=161,
+meldungungueltigekursart=164,meldungfeldfuellen=170,meldungschuljahrangeben=
+171,meldungjgstangeben=172,meldungfalschejgst=173,meldungfalschefunktion=72,
+meldungnichtentfernt=62,meldungentfernt=61,meldungspeicherfehler=73,
+meldungvornamepraez=129,meldunginakthjkeineaenderung=379,pruefemeldung=57,
+dateiname="Schülerliste",oblitrenner="$",leer="",niltext="",punkt=".",
+textabgegangen="abgegangen",schrittefuerobjektliste=2,anzmasken=3,eingang=1,
+bearb1=2,bearb2=3,maxfeldbearb0=8,maxfeldbearb1=28,maxfeldbearb2=102,
+saetzederliste=17,pruefartdatum=6;BOOL VAR maskebearb1nochnichtda:=TRUE ,
+maskebearb2nochnichtda:=TRUE ,maskeeingangnochnichtda:=TRUE ,falschesdatum:=
+FALSE ;BOOL VAR schuljahrgefuellt,halbjahrgefuellt,jgstgefuellt,
+halbjahresdatenschonvorhanden;FILE VAR f;INT VAR fehlerfeld:=0,ind,bs,
+posgewhalbjahr,fnrfehler,fehlerstatus,fmeld:=0,lv:=0,feldnummer:=0;ROW
+anzschluesselsuTEXT VAR schluessel;ROW anzmaskenROW maxfeldbearb2TEXT VAR
+erfassungsfeld;ROW anzmaskenTAG VAR maske;TEXT VAR sicherunghjd:="",
+schuelertid:="",hjdtid:="",vergleichszeile:="",hjdfachleiste:="",hjdartleiste
+:="",hjdklausurleiste:="",hjdkennungenleiste:="",verglfachleiste:="",
+verglartleiste:="",verglklausurleiste:="",verglkennungenleiste:="",leiste,
+plausivar:="",plausileiste:="",pruefbestand:="",plausitxt,akthalbjahr:="",
+aktschuljahr:="",gewhalbjahr:="",gewschuljahr:="",jgst,zug,vglgewhalbjahr:=""
+,vglakthalbjahr:="",gewjgst:="",gewzug:="",aktbestand,spalteninhalte,versetzg
+:=trenner+trenner+"v"+trenner+"n"+trenner+"s"+trenner+"f"+trenner+"w"+trenner
+,faecher:=trenner+trenner,blbrief:=trenner+trenner,bemerk:=trenner+trenner,
+noten:=trenner+trenner,artlv:=trenner+trenner;LET logtextbeginn="Anw. 1.2.3 "
+;PROC halbjahresdatenentfernen:standardmeldung(meldungentfernt,niltext);
+infeld(fnrname);inittupel(dnrhalbjahresdaten);schluesselfuerhjdsetzen(
+dnrhalbjahresdaten,schluessel,gewschuljahr,gewhalbjahr,gewjgst);
+logeintragvornehmen("Entfernen");delete(dnrhalbjahresdaten);IF
+aktuellesschulhalbjahrinbearbeitungTHEN loeschehjdtidinsu;FI ;enter(2).
+loeschehjdtidinsu:inittupel(dnrschueler);putwert(fnrsufamnames,schluessel(1))
+;putwert(fnrsurufnames,schluessel(2));putwert(fnrsugebdatums,schluessel(3));
+search(dnrschueler,TRUE );putwert(fnrsutidakthjd,"");update(dnrschueler).END
+PROC halbjahresdatenentfernen;PROC halbjahresdatennichtentfernen:
+standardmeldung(meldungnichtentfernt,niltext);infeld(fnrname);return(2)END
+PROC halbjahresdatennichtentfernen;PROC halbjahresdatenentfernenvorbereiten:
+BOOL VAR suexistiert:=FALSE ;IF maskeeingangnochnichtdaTHEN bs:=1;initmaske(
+maske(bs),maskennameeingang);init(bs,maxfeldbearb0);maskeeingangnochnichtda:=
+FALSE FI ;IF erfassungsfeld(bs)(fnrname)<>""CAND erfassungsfeld(bs)(
+fnrgebdatum)<>""CAND erfassungsfeld(bs)(fnrrufname)=""THEN meldungausgeben(
+meldungvornamepraez,fnrrufname);LEAVE halbjahresdatenentfernenvorbereitenFI ;
+schluesselbereitstellen;IF NOT falschesdatumTHEN pruefeobnameexistiert(
+suexistiert);IF suexistiertTHEN bs:=1;holedbwerte(bs);schluessel(1):=
+erfassungsfeld(bs)(fnrname);schluessel(2):=erfassungsfeld(bs)(fnrrufname);
+schluessel(3):=datumskonversion(erfassungsfeld(eingang)(fnrgebdatum));
+weiterepruefungELSE meldungausgeben(meldunggibtsnicht,fnrname)FI ELSE
+meldungausgeben(meldungfalschesdatum,fnrgebdatum)FI .weiterepruefung:jgst:=
+jgstaufber(wert(fnrsusgrpjgst));zug:=wert(fnrsusgrpzugtut);akthalbjahr:=
+schulkenndatum(schulhalbjahr);erfassungsfeld(bs)(fnrgewschuljahr):=
+standardmaskenfeld(fnrgewschuljahr);erfassungsfeld(bs)(fnrgewhalbjahr):=
+standardmaskenfeld(fnrgewhalbjahr);IF int(standardmaskenfeld(fnrgewjgst))=0
+THEN erfassungsfeld(bs)(fnrgewjgst):=niltext;gewjgst:=standardmaskenfeld(
+fnrgewjgst);ELSE erfassungsfeld(bs)(fnrgewjgst):=jgstaufber(
+standardmaskenfeld(fnrgewjgst));gewjgst:=jgstaufber(standardmaskenfeld(
+fnrgewjgst));FI ;gewschuljahr:=standardmaskenfeld(fnrgewschuljahr);
+gewhalbjahr:=standardmaskenfeld(fnrgewhalbjahr);fnrfehler:=0;
+pruefenobeintraegefuerhjdausreichend;IF fnrfehler=0THEN IF eingabenummerisch(
+gewschuljahr)CAND korrekteschuljahreseingabe(gewschuljahr)THEN
+weiterevorbereitungnachfehlerpruefungELSE meldungausgeben(
+meldungunerlaubterwert,fnrgewschuljahr)FI ELSE meldungausgeben(
+meldungfeldfuellen,fnrfehler)FI .pruefenobeintraegefuerhjdausreichend:
+schuljahrgefuellt:=standardmaskenfeld(fnrgewschuljahr)<>leer;halbjahrgefuellt
+:=standardmaskenfeld(fnrgewhalbjahr)<>leer;jgstgefuellt:=standardmaskenfeld(
+fnrgewjgst)<>leer;IF allefelderleerOR nurhalbjahrgefuelltTHEN fnrfehler:=
+fnrgewschuljahrELIF nurschuljahrgefuelltOR nurjgstgefuelltOR
+nurschuljahrundjgstgefuelltTHEN fnrfehler:=fnrgewhalbjahrFI .allefelderleer:(
+NOT schuljahrgefuellt)CAND (NOT halbjahrgefuellt)CAND (NOT jgstgefuellt).
+nurhalbjahrgefuellt:(NOT schuljahrgefuellt)CAND (halbjahrgefuellt)CAND (NOT
+jgstgefuellt).nurschuljahrgefuellt:(schuljahrgefuellt)CAND (NOT
+halbjahrgefuellt)CAND (NOT jgstgefuellt).nurjgstgefuellt:(NOT
+schuljahrgefuellt)CAND (NOT halbjahrgefuellt)CAND (jgstgefuellt).
+nurschuljahrundjgstgefuellt:(schuljahrgefuellt)CAND (NOT halbjahrgefuellt)
+CAND (jgstgefuellt).weiterevorbereitungnachfehlerpruefung:
+halbjahresdatenschonvorhanden:=FALSE ;IF allefeldergefuelltTHEN
+angabevonsjhjjgstELIF nurschuljahrundhalbjahrgefuelltTHEN angabevonsjhjELIF
+nurhalbjahrundjgstgefuelltTHEN angabevonhjjgstFI ;gibmaskemitrowaus(eingang,
+fnrname,fnrabgangbestand).allefeldergefuellt:(schuljahrgefuellt)CAND (
+halbjahrgefuellt)CAND (jgstgefuellt).nurschuljahrundhalbjahrgefuellt:(
+schuljahrgefuellt)CAND (halbjahrgefuellt)CAND (NOT jgstgefuellt).
+nurhalbjahrundjgstgefuellt:(NOT schuljahrgefuellt)CAND (halbjahrgefuellt)
+CAND (jgstgefuellt).angabevonsjhjjgst:jgst:=jgstaufber(wert(fnrsusgrpjgst));
+vglgewhalbjahr:=gewjgst+punkt+gewhalbjahr;vglakthalbjahr:=jgst+punkt+
+akthalbjahr;schuelerhjdlesen(dnrhalbjahresdaten,TRUE );IF
+halbjahresdatenschonvorhandenTHEN loeschedatensatzELSE meldunghjdgibtesnicht
+FI .angabevonsjhj:schuelerhjdlesen(dnrhalbjahresdaten,FALSE );IF
+halbjahresdatenschonvorhandenTHEN savetupel(dnrhalbjahresdaten,sicherunghjd);
+saveupdateposition(dnrhalbjahresdaten);gewjgst:=jgstaufber(wert(fnrhjdjgst));
+erfassungsfeld(eingang)(fnrgewjgst):=gewjgst;erfassungsfeld(bearb1)(
+fnrausgabegewjgst):=gewjgst;loeschedatensatzELSE meldungausgeben(
+meldungjgstangeben,fnrgewjgst)FI .angabevonhjjgst:schuelerhjdlesen(
+ixhjdfamrufgebjgsthj,TRUE );IF halbjahresdatenschonvorhandenTHEN savetupel(
+dnrhalbjahresdaten,sicherunghjd);saveupdateposition(dnrhalbjahresdaten);
+gewschuljahr:=wert(fnrhjdsj);erfassungsfeld(eingang)(fnrgewschuljahr):=gew
+schuljahr;erfassungsfeld(bearb1)(fnrausgabegewschj):=gewschuljahr;IF
+wiederholungvorhanden(dnrhalbjahresdaten,ixhjdfamrufgebjgsthj)THEN
+meldungbitteschuljahrangebenELSE restoreupdateposition(dnrhalbjahresdaten);
+loeschedatensatzFI ELSE meldungbitteschuljahrangebenFI .
+meldungbitteschuljahrangeben:meldungausgeben(meldungschuljahrangeben,
+fnrgewschuljahr).meldunghjdgibtesnicht:meldungausgeben(meldunghjdgibtsnicht,
+fnrgewschuljahr).loeschedatensatz:standardmaskenfeld(wert(fnrsufamnames),
+fnrname);standardmaskenfeld(wert(fnrsurufnames),fnrrufname);
+standardmaskenfeld(datumrekonversion(wert(fnrsugebdatums)),fnrgebdatum);
+standardmaskenfeld(gewschuljahr,fnrgewschuljahr);standardmaskenfeld(
+gewhalbjahr,fnrgewhalbjahr);standardmaskenfeld(gewjgst,fnrgewjgst);IF
+aktbestand=schueleraktuellTHEN standardmaskenfeld("",fnrabgangbestand);ELSE
+standardmaskenfeld("x",fnrabgangbestand);FI ;infeld(fnrname);
+standardfelderausgeben;meldungausgebeneinfach(meldungwirklichloeschen,fnrname
+).END PROC halbjahresdatenentfernenvorbereiten;PROC halbjahresdatenblaettern(
+BOOL CONST b):IF bTHEN IF bs=2THEN blaetteraufbearb2ELSE fehlermeldungFI
+ELSE IF bs=3THEN blaetteraufbearb1ELSE fehlermeldungFI FI .fehlermeldung:
+standardmeldung(meldungfalschefunktion,"");return(1).blaetteraufbearb2:
+merkeinhaltbearb1;gibbearb2maskeaus;gibinhaltebearb2aus;.merkeinhaltbearb1:
+merkemaskeninhalt(bearb1,fnrausgabegewjgst,fnrverspaetet).gibbearb2maskeaus:
+IF maskebearb2nochnichtdaTHEN initmaske(maske(bearb2),maskennamebearb2);init(
+bearb2,maxfeldbearb2);FI ;standardstartproc(maskennamebearb2).
+gibinhaltebearb2aus:bs:=3;fuellehjddateninfelder;maskebearb2nochnichtda:=
+FALSE ;infeld(fnrausgabename);standardfelderausgeben;infeld(fnrfachanf);
+return(1).blaetteraufbearb1:merkeinhaltbearb2;gibbearb1maskeaus;
+gibinhaltebearb1aus.merkeinhaltbearb2:merkemaskeninhalt(bearb2,fnrfachanf,
+fnrwarnungende).gibbearb1maskeaus:standardstartproc(maskennamebearb1).
+gibinhaltebearb1aus:bs:=2;fuellehjddateninfelder;infeld(fnrausgabename);
+standardfelderausgeben;IF akthalbjahr=gewhalbjahrCAND aktschuljahr=
+gewschuljahrTHEN infeld(fnrblbriefwarn)ELSE infeld(fnrausgabegewjgst);FI ;
+return(1).END PROC halbjahresdatenblaettern;PROC gibmaskemitrowaus(INT CONST
+maske,vonfeld,bisfeld):INT VAR lv;FOR lvFROM vonfeldUPTO bisfeldREP
+standardmaskenfeld(erfassungsfeld(maske)(lv),lv);PER END PROC
+gibmaskemitrowaus;PROC merkemaskeninhalt(INT CONST maske,vonfeld,bisfeld):
+INT VAR lv;FOR lvFROM vonfeldUPTO bisfeldREP erfassungsfeld(maske)(lv):=
+standardmaskenfeld(lv);PER END PROC merkemaskeninhalt;PROC
+halbjahresdatenbearbeiten:BOOL VAR suexistiert:=FALSE ;reinitparsing;bs:=
+eingang;IF maskeeingangnochnichtdaTHEN initmaske(maske(bs),maskennameeingang)
+;init(bs,maxfeldbearb0);maskeeingangnochnichtda:=FALSE FI ;erfassungsfeld(bs)
+(fnrname):=standardmaskenfeld(fnrname);erfassungsfeld(bs)(fnrrufname):=
+standardmaskenfeld(fnrrufname);erfassungsfeld(bs)(fnrgebdatum):=
+standardmaskenfeld(fnrgebdatum);IF erfassungsfeld(bs)(fnrname)<>""CAND
+erfassungsfeld(bs)(fnrgebdatum)<>""CAND erfassungsfeld(bs)(fnrrufname)=""
+THEN meldungausgeben(meldungvornamepraez,fnrrufname);LEAVE
+halbjahresdatenbearbeitenFI ;schluesselbereitstellen;IF NOT falschesdatum
+THEN pruefeobnameexistiert(suexistiert);IF suexistiertTHEN
+loeschedieerstellteobjektliste;holedbwerte(bs);schluessel(1):=erfassungsfeld(
+bs)(fnrname);schluessel(2):=erfassungsfeld(bs)(fnrrufname);schluessel(3):=
+datumskonversion(erfassungsfeld(bs)(fnrgebdatum));jgst:=jgstaufber(wert(
+fnrsusgrpjgst));zug:=wert(fnrsusgrpzugtut);akthalbjahr:=schulkenndatum(
+schulhalbjahr);aktschuljahr:=schulkenndatum(schuljahr);
+halbjahresdatendesschuelersbearbeiten;ELSE meldungausgeben(meldunggibtsnicht,
+fnrname)FI ELSE return(1)FI .END PROC halbjahresdatenbearbeiten;PROC
+halbjahresdatendesschuelersbearbeiten:maskebearb1nochnichtda:=TRUE ;
+maskebearb2nochnichtda:=TRUE ;erfassungsfeld(bs)(fnrgewschuljahr):=
+standardmaskenfeld(fnrgewschuljahr);erfassungsfeld(bs)(fnrgewhalbjahr):=
+standardmaskenfeld(fnrgewhalbjahr);IF int(standardmaskenfeld(fnrgewjgst))=0
+THEN erfassungsfeld(bs)(fnrgewjgst):=niltext;gewjgst:=standardmaskenfeld(
+fnrgewjgst);ELSE erfassungsfeld(bs)(fnrgewjgst):=jgstaufber(
+standardmaskenfeld(fnrgewjgst));gewjgst:=erfassungsfeld(bs)(fnrgewjgst)FI ;
+gewschuljahr:=standardmaskenfeld(fnrgewschuljahr);gewhalbjahr:=
+standardmaskenfeld(fnrgewhalbjahr);infeld(fnrname);gibmaskemitrowaus(eingang,
+fnrname,fnrgewjgst);standardfelderausgeben;IF akthalbjahr=gewhalbjahrCAND
+aktschuljahr=gewschuljahrTHEN IF erfassungsfeld(bs)(fnrgewjgst)<>niltextCAND
+jgst<>gewjgstTHEN meldungausgeben(meldungfalschejgst,fnrgewjgst);LEAVE
+halbjahresdatendesschuelersbearbeitenFI ;FI ;
+pruefenobeintraegefuerhjdausreichend;#dr16.07.87#IF fnrfehler=0THEN IF
+eingabenummerisch(gewschuljahr)CAND korrekteschuljahreseingabe(gewschuljahr)
+THEN initmaske(maske(bs),maskennamebearb1);init(bearb1,maxfeldbearb1);
+erfassungsfeld(bearb1)(fnrausgabename):=schluessel(1);erfassungsfeld(bearb1)(
+fnrausgaberufname):=schluessel(2);erfassungsfeld(bearb1)(fnrausgabegebdatum)
+:=erfassungsfeld(eingang)(fnrgebdatum);erfassungsfeld(bearb1)(
+fnrausgabeaktjgst):=jgst;erfassungsfeld(bearb1)(fnrausgabeaktzug):=zug;IF
+aktbestand="ls"THEN erfassungsfeld(bearb1)(fnrausgabeabgegangen):=
+" "ELSE erfassungsfeld(bearb1)(fnrausgabeabgegangen):="abgegangen"
+FI ;erfassungsfeld(bearb1)(fnrausgabegewschj):=gewschuljahr;erfassungsfeld(
+bearb1)(fnrausgabegewhj):=gewhalbjahr;erfassungsfeld(bearb1)(
+fnrausgabegewjgst):=gewjgst;weiterevorbereitungnachfehlerpruefungELSE
+meldungausgeben(meldungunerlaubterwert,fnrgewschuljahr)FI ELSE
+meldungausgeben(meldungfeldfuellen,fnrfehler)FI .
+pruefenobeintraegefuerhjdausreichend:fnrfehler:=0;schuljahrgefuellt:=
+standardmaskenfeld(fnrgewschuljahr)<>leer;halbjahrgefuellt:=
+standardmaskenfeld(fnrgewhalbjahr)<>leer;jgstgefuellt:=standardmaskenfeld(
+fnrgewjgst)<>leer;IF allefelderleerOR nurhalbjahrgefuelltTHEN fnrfehler:=
+fnrgewschuljahrELIF nurschuljahrgefuelltOR nurjgstgefuelltOR
+nurschuljahrundjgstgefuelltTHEN fnrfehler:=fnrgewhalbjahrFI .allefelderleer:(
+NOT schuljahrgefuellt)CAND (NOT halbjahrgefuellt)CAND (NOT jgstgefuellt).
+nurhalbjahrgefuellt:(NOT schuljahrgefuellt)CAND (halbjahrgefuellt)CAND (NOT
+jgstgefuellt).nurschuljahrgefuellt:(schuljahrgefuellt)CAND (NOT
+halbjahrgefuellt)CAND (NOT jgstgefuellt).nurjgstgefuellt:(NOT
+schuljahrgefuellt)CAND (NOT halbjahrgefuellt)CAND (jgstgefuellt).
+nurschuljahrundjgstgefuellt:(schuljahrgefuellt)CAND (NOT halbjahrgefuellt)
+CAND (jgstgefuellt).weiterevorbereitungnachfehlerpruefung:
+halbjahresdatenschonvorhanden:=FALSE ;IF allefeldergefuelltTHEN
+angabevonsjhjjgstELIF nurschuljahrundhalbjahrgefuelltTHEN angabevonsjhjELIF
+nurhalbjahrundjgstgefuelltTHEN angabevonhjjgstFI ;gibmaskemitrowaus(bearb1,
+fnrname,fnrabgangbestand).allefeldergefuellt:(schuljahrgefuellt)CAND (
+halbjahrgefuellt)CAND (jgstgefuellt).nurschuljahrundhalbjahrgefuellt:(
+schuljahrgefuellt)CAND (halbjahrgefuellt)CAND (NOT jgstgefuellt).
+nurhalbjahrundjgstgefuellt:(NOT schuljahrgefuellt)CAND (halbjahrgefuellt)
+CAND (jgstgefuellt).angabevonsjhjjgst:IF halbjahrrelevantTHEN
+schuelerhjdlesen(dnrhalbjahresdaten,TRUE );IF halbjahresdatenschonvorhanden
+THEN savetupel(dnrhalbjahresdaten,sicherunghjd);saveupdateposition(
+dnrhalbjahresdaten);IF passendejgstTHEN aenderungsvorbereitungELSE
+meldungausgeben(meldungfalschejgst,fnrgewjgst);LEAVE
+halbjahresdatendesschuelersbearbeitenFI ;ELSE aenderungsvorbereitungFI ;ELSE
+meldungausgeben(meldunghalbjahrnichtrelevant,fnrgewjgst);LEAVE
+halbjahresdatendesschuelersbearbeitenFI .passendejgst:int(gewjgst)=intwert(
+fnrhjdjgst).angabevonsjhj:schuelerhjdlesen(dnrhalbjahresdaten,FALSE );IF
+halbjahresdatenschonvorhandenTHEN savetupel(dnrhalbjahresdaten,sicherunghjd);
+saveupdateposition(dnrhalbjahresdaten);gewjgst:=jgstaufber(wert(fnrhjdjgst));
+erfassungsfeld(eingang)(fnrgewjgst):=gewjgst;erfassungsfeld(bearb1)(
+fnrausgabegewjgst):=gewjgst;infeld(fnrgewjgst);standardmaskenfeld(gewjgst,
+fnrgewjgst);standardfelderausgeben;vglgewhalbjahr:=gewjgst+punkt+gewhalbjahr;
+vglakthalbjahr:=jgst+punkt+akthalbjahr;aenderungsvorbereitungELIF akthalbjahr
+=gewhalbjahrCAND aktschuljahr=gewschuljahrTHEN infeld(fnrgewjgst);
+standardmaskenfeld(jgst,fnrgewjgst);standardfelderausgeben;erfassungsfeld(
+bearb1)(fnrausgabegewjgst):=jgst;vglgewhalbjahr:=gewjgst+punkt+gewhalbjahr;
+vglakthalbjahr:=jgst+punkt+akthalbjahr;aenderungsvorbereitungELSE
+meldungausgeben(meldungjgstangeben,fnrgewjgst);LEAVE
+halbjahresdatendesschuelersbearbeitenFI .angabevonhjjgst:IF halbjahrrelevant
+THEN schuelerhjdlesen(ixhjdfamrufgebjgsthj,TRUE );IF
+halbjahresdatenschonvorhandenTHEN savetupel(dnrhalbjahresdaten,sicherunghjd);
+saveupdateposition(dnrhalbjahresdaten);gewschuljahr:=wert(fnrhjdsj);
+erfassungsfeld(eingang)(fnrgewschuljahr):=gewschuljahr;erfassungsfeld(bearb1)
+(fnrausgabegewschj):=gewschuljahr;IF wiederholungvorhanden(dnrhalbjahresdaten
+,ixhjdfamrufgebjgsthj)THEN meldungbitteschuljahrangeben;LEAVE
+halbjahresdatendesschuelersbearbeitenELSE infeld(fnrgewschuljahr);
+standardmaskenfeld(gewschuljahr,fnrgewschuljahr);standardfelderausgeben;
+aenderungsvorbereitungFI ELSE meldungbitteschuljahrangeben;LEAVE
+halbjahresdatendesschuelersbearbeitenFI ELSE meldungausgeben(
+meldunghalbjahrnichtrelevant,fnrgewjgst);LEAVE
+halbjahresdatendesschuelersbearbeitenFI .meldungbitteschuljahrangeben:
+meldungausgeben(meldungschuljahrangeben,fnrgewschuljahr).
+aenderungsvorbereitung:standardstartproc(maskennamebearb1);bs:=bearb1;IF
+maskebearb1nochnichtdaTHEN maskebearb1nochnichtda:=FALSE FI ;
+bereiteaenderungvor.halbjahrrelevant:vglgewhalbjahr:=gewjgst+punkt+
+gewhalbjahr;vglakthalbjahr:=jgst+punkt+akthalbjahr;lieferehalbjahreszeile(
+vergleichszeile,vglakthalbjahr);posgewhalbjahr:=pos(vergleichszeile,
+vglgewhalbjahr);posgewhalbjahr>0.END PROC
+halbjahresdatendesschuelersbearbeiten;PROC meldungausgeben(INT CONST welche,
+fehlerfeld):standardmeldung(welche,niltext);infeld(fehlerfeld);return(1)END
+PROC meldungausgeben;PROC meldungausgebeneinfach(INT CONST welche,fehlerfeld)
+:standardmeldung(welche,niltext);infeld(fehlerfeld);standardnprocEND PROC
+meldungausgebeneinfach;PROC schluesselbereitstellen:falschesdatum:=FALSE ;
+fehlerfeld:=0;schluessel(1):=standardmaskenfeld(fnrname);schluessel(2):=
+standardmaskenfeld(fnrrufname);schluessel(3):=datumrekonversion(
+standardmaskenfeld(fnrgebdatum));IF standardmaskenfeld(fnrgebdatum)<>niltext
+THEN pruefe(pruefartdatum,maske(bs),TEXT PROC (INT CONST )hjderfassungswert,
+fnrgebdatum,0,0,niltext,fehlerfeld);IF fehlerfeld<>0THEN infeld(fehlerfeld);
+falschesdatum:=TRUE ;FI FI ;IF NOT falschesdatumTHEN legeaktuellenbestandfest
+FI .END PROC schluesselbereitstellen;PROC legeaktuellenbestandfest:
+erfassungsfeld(bs)(fnrabgangbestand):=standardmaskenfeld(fnrabgangbestand);
+IF standardmaskenfeld(fnrabgangbestand)=""THEN aktbestand:=schueleraktuell
+ELSE aktbestand:=schuelerabgegangenFI END PROC legeaktuellenbestandfest;PROC
+pruefeobnameexistiert(BOOL VAR suexist):TEXT VAR datenbankwerte,
+schluesselwerte;inittupel(dnrschueler);maskenwerteindatenbank;IF NOT
+falschesdatumTHEN search(ixsustatfamrufgeb,FALSE );IF dbstatus=okCAND wert(
+fnrsustatuss)=aktbestandTHEN schuelertid:=gettid;hjdtid:=wert(fnrsutidakthjd)
+;datenbankwerte:=wert(fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));
+schluesselwerte:=schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=
+schluessel(1)CAND ((schluessel(2)=leerAND schluessel(3)=leer)OR (pos(
+datenbankwerte,schluesselwerte)=1)))ELSE suexist:=FALSE FI FI .END PROC
+pruefeobnameexistiert;PROC maskenwerteindatenbank:putwert(fnrsufamnames,
+schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop;putwert(
+fnrsugebdatums,datumskonversion(schluessel(3)));IF iserrorTHEN clearerror;
+standardmeldung(meldungfalschesdatum,"");infeld(fnrgebdatum);falschesdatum:=
+TRUE ;ELSE putwert(fnrsustatuss,aktbestand);FI ;enablestopEND PROC
+maskenwerteindatenbank;PROC bereiteaenderungvor:IF
+halbjahresdatenschonvorhandenTHEN restoretupel(dnrhalbjahresdaten,
+sicherunghjd);holedbwerte(bearb1);FI ;IF aktuelleshalbjahrTHEN IF NOT
+halbjahresdatenschonvorhandenTHEN erfassungsfeld(bearb1)(fnrausgabegewzug):=
+zug;FI ;fuellehjddateninfelder;infeld(fnrausgabename);standardfelderausgeben;
+infeld(fnrblbriefwarn)ELSE IF NOT halbjahresdatenschonvorhandenTHEN
+erfassungsfeld(bearb1)(fnrausgabegewzug):=gewzug;FI ;fuellehjddateninfelder;
+infeld(fnrausgabename);standardfelderausgeben;infeld(fnrausgabegewjgst)FI ;
+standardnproc.aktuelleshalbjahr:akthalbjahr=gewhalbjahrCAND aktschuljahr=
+gewschuljahr.END PROC bereiteaenderungvor;BOOL PROC wiederholungvorhanden(
+INT CONST dnr,index):ROW 5TEXT VAR feld;feld(1):=wert(dnr+1);feld(2):=wert(
+dnr+2);feld(3):=wert(dnr+3);feld(4):=wert(dnr+5);feld(5):=wert(dnr+6);succ(
+index);dbstatus=okCAND feld(1)=wert(dnr+1)CAND feld(2)=wert(dnr+2)CAND feld(3
+)=wert(dnr+3)CAND feld(4)=wert(dnr+5)CAND feld(5)=wert(dnr+6).END PROC
+wiederholungvorhanden;PROC fuellehjddateninfelder:IF bs=2THEN
+gibmaskemitrowaus(bearb1,fnrname,fnrverspaetet);ELSE gibmaskemitrowaus(bearb1
+,fnrname,fnrausgabegewzug);IF maskebearb2nochnichtdaTHEN fachfuellen;
+artfuellen;klausurfuellen;kursfuellen;notefuellen;bemfuellen;warnungfuellen;
+ELSE gibmaskemitrowaus(bearb2,fnrfachanf,fnrwarnungende)FI FI .fachfuellen:
+hjdfachleiste:=wert(fnrhjdfach);FOR indFROM 0UPTO (fnrfachende-fnrfachanf)
+REP standardmaskenfeld(wert(fnrhjdfach,(ind*2+1),2),(fnrfachanf+ind))PER .
+artfuellen:hjdartleiste:=wert(fnrhjdkursart);FOR indFROM 0UPTO (
+fnrkursartende-fnrkursartanf)REP standardmaskenfeld(wert(fnrhjdkursart,(ind*2
++1),2),(fnrkursartanf+ind))PER .klausurfuellen:hjdklausurleiste:=wert(
+fnrhjdklausurteiln);FOR indFROM 0UPTO (fnrklausurende-fnrklausuranf)REP
+standardmaskenfeld(wert(fnrhjdklausurteiln,(ind+1),1),(fnrklausuranf+ind))
+PER .kursfuellen:TEXT VAR klzeichen;hjdkennungenleiste:=wert(
+fnrhjdlerngrpkenn);FOR indFROM 0UPTO (fnrkursende-fnrkursanf)REP
+standardmaskenfeld(wert(fnrhjdlerngrpkenn,(4*ind+1),4),(fnrkursanf+ind))PER .
+notefuellen:FOR indFROM 0UPTO (fnrnoteende-fnrnoteanf)REP standardmaskenfeld(
+wert(fnrhjdnotepunkte,(2*ind+1),2),(fnrnoteanf+ind))PER .bemfuellen:FOR ind
+FROM 0UPTO (fnrbemende-fnrbemanf)REP standardmaskenfeld(wert(fnrhjdbemerk,(3*
+ind+1),3),(fnrbemanf+ind))PER .warnungfuellen:FOR indFROM 0UPTO (
+fnrwarnungende-fnrwarnunganf)REP standardmaskenfeld(wert(fnrhjdvermwarnung,(
+ind+1),1),(fnrwarnunganf+ind))PER .END PROC fuellehjddateninfelder;PROC
+loeschedieerstellteobjektliste:forget(dateiname,quiet);END PROC
+loeschedieerstellteobjektliste;PROC schuelerhjdlesen(INT CONST index,BOOL
+CONST jgstgesetzt):IF jgstgesetztTHEN IF aktuellesschulhalbjahrinbearbeitung
+THEN IF hjdtid<>leerTHEN readtid(dnrhalbjahresdaten,hjdtid);
+halbjahresdatenschonvorhanden:=dbstatus=0ELSE inittupel(dnrhalbjahresdaten);
+halbjahresdatenschonvorhanden:=FALSE FI ELSE richtigsuchenundlesenFI ELSE
+richtigsuchenundlesenFI ;IF halbjahresdatenschonvorhandenAND wert(
+fnrhjdkennung)<>""THEN gewzug:=wert(fnrhjdkennung)ELSE gewzug:=""FI .
+richtigsuchenundlesen:inittupel(dnrhalbjahresdaten);schluesselfuerhjdsetzen(
+dnrhalbjahresdaten,schluessel,gewschuljahr,gewhalbjahr,gewjgst);search(index,
+TRUE );halbjahresdatenschonvorhanden:=dbstatus=0.END PROC schuelerhjdlesen;
+PROC halbjahresdatenspeichern(BOOL CONST speichern):INT VAR aktjg:=int(jgst);
+IF speichernTHEN IF faecher=trenner+trennerTHEN holeaktdatenFI ;fehlerstatus
+:=0;merkeinhaltdesaktuellenschirms;pruefeplausibilitaet(fehlerstatus);IF
+datenfehlerfreiTHEN standardmeldung(meldungspeicherung,"");datenspeichern;#
+eventuellinstatwuerfeleintragen;dr11.05.88#
+ueberpruefobkurswahlbasisnochaktuell;
+vorbereitendernaechstenschluesselbehandlung(2)ELSE return(1)FI ELSE
+standardmeldung(meldungkeinespeicherung,"");
+vorbereitendernaechstenschluesselbehandlung(2)FI .
+ueberpruefobkurswahlbasisnochaktuell:IF NOT maskebearb2nochnichtdaTHEN IF
+sek2jgstTHEN IF aktoderzukhjTHEN IF aenderunginkurswahldatenTHEN
+loeschspezkurswahlbasisFI FI FI FI .sek2jgst:aktjg>9.aktoderzukhj:(int(
+gewjgst)=aktjgCAND int(gewhalbjahr)>=int(akthalbjahr))COR int(gewjgst)>aktjg.
+aenderunginkurswahldaten:hjdfachleiste<>verglfachleisteCOR hjdartleiste<>
+verglartleisteCOR hjdklausurleiste<>verglklausurleisteCOR hjdkennungenleiste
+<>verglkennungenleiste.loeschspezkurswahlbasis:kurswahlserveraktualisieren(
+jgst,gewjgst,gewhalbjahr).holeaktdaten:holeblbrief;holebemerk;holenoten;
+holefaecher;holeartlv.holeblbrief:inittupel(dnrschluessel);statleseschleife(
+dnrschluessel,bestandblauerbrief,"",fnrschlsachgebiet,fnrschlschluessel,PROC
+briefcat).holebemerk:inittupel(dnrschluessel);statleseschleife(dnrschluessel,
+bestandbemerkungen,"",fnrschlsachgebiet,fnrschlschluessel,PROC bemerkcat).
+holenoten:inittupel(dnrschluessel);statleseschleife(dnrschluessel,
+bestandzeugnisnoten,"",fnrschlsachgebiet,fnrschlschluessel,PROC notencat).
+holefaecher:inittupel(dnrfaecher);statleseschleife(dnrfaecher,"","",fnrffach,
+fnrffachbez,PROC fachcat).holeartlv:inittupel(dnrschluessel);statleseschleife
+(dnrschluessel,bestandartlv,"",fnrschlsachgebiet,fnrschlschluessel,PROC
+artcat).merkeinhaltdesaktuellenschirms:IF bs=2THEN merkemaskeninhalt(bearb1,
+fnrausgabegewjgst,fnrverspaetet)ELSE merkemaskeninhalt(bearb2,fnrfachanf,
+fnrwarnungende);FI .datenfehlerfrei:fehlerstatus=0.datenspeichern:IF
+halbjahresdatenschonvorhandenTHEN logeintragvornehmen("Änderung");
+datenaendernELSE logeintragvornehmen("Neueinfügen");schluesselsetzen(
+dnrhalbjahresdaten);dateneinfuegenFI .datenaendern:dbwertesetzen;
+restoreupdateposition(dnrhalbjahresdaten);selupdate(dnrhalbjahresdaten);
+statusabfrage.dateneinfuegen:dbwertesetzen;insert(dnrhalbjahresdaten);
+statusabfrage;IF dbstatus=ok#dr11.05.88#THEN hjdtid:=gettid;
+eventuellneueshjdtideintragenFI .END PROC halbjahresdatenspeichern;PROC
+logeintragvornehmen(TEXT CONST logergaenzung):TEXT VAR eintrag:=logtextbeginn
+;eintragCAT logergaenzung;eintragCAT " """;eintragCAT schluessel(1);eintrag
+CAT ", ";eintragCAT schluessel(2);eintragCAT ", ";eintragCAT schluessel(3);
+eintragCAT """";logeintrag(eintrag)END PROC logeintragvornehmen;PROC fachcat(
+BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE faecherCAT wert(fnrffach);faecher
+CAT trennerFI END PROC fachcat;PROC artcat(BOOL VAR b):IF wert(
+fnrschlsachgebiet)>bestandartlvCOR dbstatus<>0THEN b:=TRUE ELSE artlvCAT wert
+(fnrschlschluessel);artlvCAT trennerFI END PROC artcat;PROC briefcat(BOOL
+VAR b):IF wert(fnrschlsachgebiet)>bestandblauerbriefCOR dbstatus<>0THEN b:=
+TRUE ELSE blbriefCAT wert(fnrschlschluessel);blbriefCAT trennerFI END PROC
+briefcat;PROC bemerkcat(BOOL VAR b):IF wert(fnrschlsachgebiet)>
+bestandbemerkungenCOR dbstatus<>0THEN b:=TRUE ELSE bemerkCAT wert(
+fnrschlschluessel);bemerkCAT trennerFI END PROC bemerkcat;PROC notencat(BOOL
+VAR b):IF wert(fnrschlsachgebiet)>bestandzeugnisnotenCOR dbstatus<>0THEN b:=
+TRUE ELSE notenCAT wert(fnrschlschluessel);notenCAT trennerFI END PROC
+notencat;PROC statusabfrage:IF dbstatus<>0THEN standardmeldung(
+meldungspeicherfehler,text(dbstatus)+paramausgabe);pauseFI .END PROC
+statusabfrage;PROC schluesselsetzen(INT CONST dateinummer):
+schluesselfuerhjdsetzen(dateinummer,schluessel,gewschuljahr,gewhalbjahr,
+gewjgst)END PROC schluesselsetzen;PROC dbwertesetzen:INT VAR lv;IF bs=2THEN
+datenbearb1vombsholen;datenbearb2setzenELSE datenbearb1setzen;
+datenbearb2vombsholenFI .datenbearb1vombsholen:FOR lvFROM fnrausgabegewjgst
+UPTO fnrverspaetetREP erfassungsfeld(bearb1)(lv):=standardmaskenfeld(lv)PER ;
+setzedbwerte(bearb1);setzekennung;.setzekennung:IF
+aktuellesschulhalbjahrinbearbeitungTHEN putwert(fnrhjdkennung,compress(zug))
+FI .datenbearb2setzen:IF NOT maskebearb2nochnichtdaTHEN setzedbwerte(bearb2)
+FI .datenbearb1setzen:setzedbwerte(bearb1).datenbearb2vombsholen:fachsetzen;
+artsetzen;klausursetzen;kurssetzen;notesetzen;bemerksetzen;kurswarnungsetzen.
+fachsetzen:spalteninhalte:="";FOR indFROM fnrfachanfUPTO fnrfachendeREP
+plausivar:=standardmaskenfeld(ind);IF compress(plausivar)<>""THEN
+spalteninhalteCAT text(plausivar,2)FI ;PER ;putwert(fnrhjdfach,spalteninhalte
+).artsetzen:spalteninhalte:="";FOR indFROM fnrkursartanfUPTO fnrkursartende
+REP IF (plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text(
+standardmaskenfeld(ind),2)FI ;PER ;putwert(fnrhjdkursart,spalteninhalte).
+klausursetzen:spalteninhalte:="";FOR indFROM fnrklausuranfUPTO fnrklausurende
+REP IF (plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text(
+standardmaskenfeld(ind),1)FI ;PER ;putwert(fnrhjdklausurteiln,spalteninhalte)
+.kurssetzen:spalteninhalte:="";FOR indFROM fnrkursanfUPTO fnrkursendeREP IF (
+plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text(
+standardmaskenfeld(ind),4)FI ;PER ;putwert(fnrhjdlerngrpkenn,spalteninhalte).
+notesetzen:spalteninhalte:="";FOR indFROM fnrnoteanfUPTO fnrnoteendeREP IF (
+plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text(
+standardmaskenfeld(ind),2)FI ;PER ;putwert(fnrhjdnotepunkte,spalteninhalte).
+bemerksetzen:spalteninhalte:="";FOR indFROM fnrbemanfUPTO fnrbemendeREP IF (
+plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text(
+standardmaskenfeld(ind),3)FI ;PER ;putwert(fnrhjdbemerk,spalteninhalte).
+kurswarnungsetzen:spalteninhalte:="";FOR indFROM fnrwarnunganfUPTO
+fnrwarnungendeREP IF (plausileisteSUB ((ind+1)MOD 13+1))="1"THEN
+spalteninhalteCAT text(standardmaskenfeld(ind),1)FI ;PER ;putwert(
+fnrhjdvermwarnung,spalteninhalte).END PROC dbwertesetzen;PROC
+vorbereitendernaechstenschluesselbehandlung(INT CONST rueckschritte):IF
+exists(dateiname)THEN holenaechstenschluesselauslisteELSE enter(2)FI .
+holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ;
+holenaechstenmehrtlgschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(
+ok);IF okTHEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE
+holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden
+THEN bereiteeingangsmaskefuerausgewaehltenvor;return(rueckschritte)ELSE
+behandleendederlistenabarbeitungFI .behandleendederlistenabarbeitung:
+standardmeldung(meldungletzter,"");enter(rueckschritte+
+schrittefuerobjektliste).END PROC vorbereitendernaechstenschluesselbehandlung
+;PROC bereiteeingangsmaskefuerausgewaehltenvor:standardstartproc(
+maskennameeingang);bs:=eingang;IF maskeeingangnochnichtdaTHEN initmaske(maske
+(bs),maskennameeingang);init(bs,maxfeldbearb0);maskeeingangnochnichtda:=
+FALSE FI ;jgst:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut);akthalbjahr:=
+schulkenndatum(schulhalbjahr);fuellemaskenfeldereingang;gibmaskemitrowaus(
+eingang,fnrname,fnrabgangbestand);infeld(fnrname);standardfelderausgeben;
+setzefeldschutz;infeld(fnrgewschuljahr)END PROC
+bereiteeingangsmaskefuerausgewaehltenvor;PROC pruefeplausibilitaet(INT VAR
+fstatus):fmeld:=0;feldnummer:=0;pruefbestand:="";fstatus:=0;standardmeldung(
+pruefemeldung,"");pruefeplausibilitaetbearb1;IF NOT maskebearb2nochnichtda
+THEN pruefeplausibilitaetbearb2FI .fehlerbehandlungbearb1:IF bs=3THEN
+standardstartproc(maskennamebearb1);bs:=2;fuellehjddateninfelder;infeld(
+fnrausgabename);standardfelderausgeben;FI ;fehlerausgabespeziell;infeld(
+fstatus);LEAVE pruefeplausibilitaet.fehlerausgabespeziell:IF fmeld=
+meldungversetzungskzunzulaessigTHEN standardmeldung(fmeld,erfassungsfeld(
+bearb1)(fnrversetzung)+paramausgabe);ELIF fmeld=meldungnureinesderfaechererl
+THEN standardmeldung(fmeld,plausitxt+paramausgabe);ELIF fmeld=
+meldunginakthjkeineaenderungTHEN standardmeldung(fmeld,erfassungsfeld(bearb1)
+(fnrrufname)+" "+erfassungsfeld(bearb1)(fnrname)+paramausgabe+jgst+zug+
+paramausgabe)ELSE standardmeldung(fmeld,"")FI .fehlerbehandlungbearb2:IF bs=2
+THEN standardstartproc(maskennamebearb2);bs:=3;fuellehjddateninfelder;infeld(
+fnrausgabename);standardfelderausgeben;FI ;fehlerausgabe;LEAVE
+pruefeplausibilitaet.fehlerausgabe:infeld(fstatus);standardmeldung(fmeld,"").
+pruefeplausibilitaetbearb1:IF erfassungsfeld(bearb1)(fnrausgabegewjgst)=""
+THEN fstatus:=fnrausgabegewjgst;fmeld:=meldungjgstangeben;
+fehlerbehandlungbearb1ELIF erfassungsfeld(bearb1)(fnrausgabegewzug)=""THEN
+fstatus:=fnrausgabegewzug;fmeld:=meldungfeldfuellen;fehlerbehandlungbearb1
+ELIF erfassungsfeld(bearb1)(fnrausgabegewjgst)<>jgstCAND aktuellessjhjTHEN
+fstatus:=fnrausgabegewjgst;fmeld:=meldunginakthjkeineaenderung;
+fehlerbehandlungbearb1ELIF erfassungsfeld(bearb1)(fnrausgabegewzug)<>zugCAND
+aktuellessjhjTHEN fstatus:=fnrausgabegewzug;fmeld:=
+meldunginakthjkeineaenderung;fehlerbehandlungbearb1ELSE gewjgst:=jgstaufber(
+erfassungsfeld(bearb1)(fnrausgabegewjgst));vglgewhalbjahr:=gewjgst+punkt+
+gewhalbjahr;vglakthalbjahr:=jgst+punkt+akthalbjahr;lieferehalbjahreszeile(
+vergleichszeile,vglakthalbjahr);posgewhalbjahr:=pos(vergleichszeile,
+vglgewhalbjahr);IF posgewhalbjahr<1THEN fstatus:=fnrausgabegewjgst;fmeld:=
+meldunghalbjahrnichtrelevant;fehlerbehandlungbearb1FI ;FI ;IF pos(blbrief,
+trenner+erfassungsfeld(bearb1)(fnrblbriefwarn)+trenner)<1THEN fstatus:=
+fnrblbriefwarn;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;IF pos(
+blbrief,trenner+erfassungsfeld(bearb1)(fnrblbriefnwarn)+trenner)<1THEN
+fstatus:=fnrblbriefnwarn;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI
+;IF pos(bemerk,trenner+erfassungsfeld(bearb1)(fnrblbriefbem)+trenner)<1THEN
+fstatus:=fnrblbriefbem;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;
+IF pos(bemerk,trenner+erfassungsfeld(bearb1)(fnrblbriefnbem)+trenner)<1THEN
+fstatus:=fnrblbriefnbem;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;
+IF pos(versetzg,trenner+erfassungsfeld(bearb1)(fnrversetzung)+trenner)<1THEN
+fstatus:=fnrversetzung;fmeld:=meldungversetzungskzunzulaessig;
+fehlerbehandlungbearb1FI ;IF pos(faecher,trenner+erfassungsfeld(bearb1)(
+fnrnachpr1)+trenner)<1THEN fstatus:=fnrnachpr1;fmeld:=
+meldungfachangabeunzulaessig;fehlerbehandlungbearb1FI ;IF pos(faecher,trenner
++erfassungsfeld(bearb1)(fnrnachpr2)+trenner)<1THEN fstatus:=fnrnachpr2;fmeld
+:=meldungfachangabeunzulaessig;fehlerbehandlungbearb1FI ;IF pos(faecher,
+trenner+erfassungsfeld(bearb1)(fnrnachpr3)+trenner)<1THEN fstatus:=fnrnachpr3
+;fmeld:=meldungfachangabeunzulaessig;fehlerbehandlungbearb1FI ;IF pos(bemerk,
+trenner+erfassungsfeld(bearb1)(fnrnachprbem)+trenner)<1THEN fstatus:=
+fnrnachprbem;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;plausitxt:=
+"";plausitxtCAT trenner;plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr1);
+plausitxtCAT trenner;plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr2);
+plausitxtCAT trenner;plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr3);
+plausitxtCAT trenner;IF pos(plausitxt,trenner+erfassungsfeld(bearb1)(
+fnrnachprabgelegt)+trenner)<1THEN plausitxt:="";IF erfassungsfeld(bearb1)(
+fnrnachpr1)<>""THEN plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr1);FI ;IF
+erfassungsfeld(bearb1)(fnrnachpr2)<>""THEN plausitxtCAT ",";plausitxtCAT
+erfassungsfeld(bearb1)(fnrnachpr2);FI ;IF erfassungsfeld(bearb1)(fnrnachpr3)
+<>""THEN plausitxtCAT ",";plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr3);FI
+;fstatus:=fnrnachprabgelegt;fmeld:=meldungnureinesderfaechererl;
+fehlerbehandlungbearb1FI ;IF pos(noten,trenner+erfassungsfeld(bearb1)(
+fnrnachprnote)+trenner)<1THEN fstatus:=fnrnachprnote;fmeld:=
+fmeldnichtimbestand;fehlerbehandlungbearb1FI ;IF pos(bemerk,trenner+
+erfassungsfeld(bearb1)(fnrzeugbem1)+trenner)<1THEN fstatus:=fnrzeugbem1;fmeld
+:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;IF pos(bemerk,trenner+
+erfassungsfeld(bearb1)(fnrzeugbem2)+trenner)<1THEN fstatus:=fnrzeugbem2;fmeld
+:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;IF pos(bemerk,trenner+
+erfassungsfeld(bearb1)(fnrzeugbem3)+trenner)<1THEN fstatus:=fnrzeugbem3;fmeld
+:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;plausitxt:=erfassungsfeld(
+bearb1)(fnrversaeumtmit);IF plausitxt<>""CAND plausitxt<>"0"THEN IF int(
+plausitxt)=0THEN fstatus:=fnrversaeumtmit;fmeld:=meldungunerlaubterwert;
+fehlerbehandlungbearb1FI FI ;plausitxt:=erfassungsfeld(bearb1)(
+fnrversaeumtohne);IF plausitxt<>""CAND plausitxt<>"0"THEN IF int(plausitxt)=0
+THEN fstatus:=fnrversaeumtohne;fmeld:=meldungunerlaubterwert;
+fehlerbehandlungbearb1FI FI ;plausitxt:=erfassungsfeld(bearb1)(fnrverspaetet)
+;IF plausitxt<>""CAND plausitxt<>"0"THEN IF int(plausitxt)=0THEN fstatus:=
+fnrverspaetet;fmeld:=meldungunerlaubterwert;fehlerbehandlungbearb1FI FI .
+aktuellessjhj:akthalbjahr=gewhalbjahrCAND aktschuljahr=gewschuljahr.
+pruefeplausibilitaetbearb2:verglfachleiste:="";verglartleiste:="";
+verglklausurleiste:="";verglkennungenleiste:="";plausileiste:=stdplausileiste
+;FOR lvFROM 0UPTO fnrfachende-fnrfachanfREP plausitxt:=erfassungsfeld(bearb2)
+(fnrfachanf+lv);IF plausitxt<>""THEN replace(plausileiste,lv+1,"1");
+verglfachleisteCAT text(plausitxt,2);IF pos(faecher,trenner+plausitxt+trenner
+)<1THEN fstatus:=fnrfachanf+lv;fmeld:=meldungfachangabeunzulaessig;
+fehlerbehandlungbearb2FI FI PER ;FOR lvFROM 0UPTO fnrkursartende-
+fnrkursartanfREP plausitxt:=erfassungsfeld(bearb2)(fnrkursartanf+lv);IF (
+plausileisteSUB (lv+1))="1"THEN verglartleisteCAT text(plausitxt,2)FI ;IF
+plausitxt<>""THEN IF pos(artlv,trenner+plausitxt+trenner)<1THEN fstatus:=
+fnrkursartanf+lv;fmeld:=meldungungueltigekursart;fehlerbehandlungbearb2FI ;
+FI PER ;FOR lvFROM 0UPTO fnrkursende-fnrkursanfREP plausitxt:=erfassungsfeld(
+bearb2)(fnrkursanf+lv);IF (plausileisteSUB (lv+1))="1"THEN
+verglkennungenleisteCAT text(plausitxt,4)FI PER ;FOR lvFROM 0UPTO
+fnrklausurende-fnrklausuranfREP plausitxt:=erfassungsfeld(bearb2)(
+fnrklausuranf+lv);IF (plausileisteSUB (lv+1))="1"THEN verglklausurleisteCAT
+text(plausitxt,1)FI PER ;FOR lvFROM 0UPTO fnrnoteende-fnrnoteanfREP plausitxt
+:=erfassungsfeld(bearb2)(fnrnoteanf+lv);IF plausitxt<>""THEN IF pos(noten,
+trenner+plausitxt+trenner)<1THEN fstatus:=fnrnoteanf+lv;fmeld:=
+fmeldnichtimbestand;fehlerbehandlungbearb2FI FI ;PER ;FOR lvFROM 0UPTO
+fnrbemende-fnrbemanfREP plausitxt:=erfassungsfeld(bearb2)(fnrbemanf+lv);IF
+plausitxt<>""THEN IF pos(bemerk,trenner+plausitxt+trenner)<1THEN fstatus:=
+fnrbemanf+lv;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb2FI FI ;PER ;
+FOR lvFROM 0UPTO fnrwarnungende-fnrwarnunganfREP plausitxt:=erfassungsfeld(
+bearb2)(fnrwarnunganf+lv);IF plausitxt<>""THEN IF pos(blbrief,trenner+
+plausitxt+trenner)<1THEN fstatus:=fnrwarnunganf+lv;fmeld:=fmeldnichtimbestand
+;fehlerbehandlungbearb2FI FI ;PER .END PROC pruefeplausibilitaet;PROC
+listezuhalbjahresdatenzeigen:BOOL VAR listeexistiertnicht;falschesdatum:=
+FALSE ;bs:=eingang;IF maskeeingangnochnichtdaTHEN initmaske(maske(bs),
+maskennameeingang);init(bs,maxfeldbearb0);maskeeingangnochnichtda:=FALSE FI ;
+gewschuljahr:=standardmaskenfeld(fnrgewschuljahr);gewhalbjahr:=
+standardmaskenfeld(fnrgewhalbjahr);IF int(standardmaskenfeld(fnrgewjgst))=0
+THEN gewjgst:=standardmaskenfeld(fnrgewjgst);ELSE gewjgst:=jgstaufber(
+standardmaskenfeld(fnrgewjgst));FI ;schluesselbereitstellen;IF NOT
+falschesdatumTHEN putwert(fnrsustatuss,aktbestand);standardmeldung(
+meldunglistenerstellung,"");initobli(saetzederliste);parsenooffields(5);
+objektlistestarten(ixsustatfamrufgeb,standardmaskenfeld(fnrname),
+fnrsufamnames,TRUE ,listeexistiertnicht);IF listeexistiertnichtTHEN
+reinitparsing;standardmeldung(meldungkeineliste,"");return(1)ELSE
+datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler,TRUE ,BOOL PROC
+pruefunghjd);FI ELSE return(1)FI .END PROC listezuhalbjahresdatenzeigen;BOOL
+PROC pruefunghjd:wert(fnrsustatuss)=aktbestandEND PROC pruefunghjd;PROC
+halbjahresdatenausgewaehlterschuelerbearbeitenvorbereiten:BOOL VAR ok,
+kannbearbeitetwerden:=FALSE ;loeschedieerstellteobjektliste;
+objektlistebeenden(dateiname,TRUE );reinitparsing;
+holeerstenmehrtlgschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok)
+;IF okTHEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE
+holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden
+THEN bereiteeingangsmaskefuerausgewaehltenvor;standardnprocELSE
+standardmeldung(meldungletzter,"");enter(2)FI .END PROC
+halbjahresdatenausgewaehlterschuelerbearbeitenvorbereiten;PROC
+fuellemaskenfeldereingang:INT VAR lv;holedbwerte(bs);erfassungsfeld(bs)(
+fnrgewschuljahr):=gewschuljahr;erfassungsfeld(bs)(fnrgewhalbjahr):=
+gewhalbjahr;erfassungsfeld(bs)(fnrgewjgst):=gewjgst;IF aktbestand=
+schueleraktuellTHEN erfassungsfeld(bs)(fnrabgangbestand):=""ELSE
+erfassungsfeld(bs)(fnrabgangbestand):="x"FI ;FOR lvFROM fnrnameUPTO
+fnrabgangbestandREP standardmaskenfeld(erfassungsfeld(bs)(lv),lv)PER .END
+PROC fuellemaskenfeldereingang;PROC setzefeldschutz:INT VAR i;FOR iFROM
+fnrnameUPTO fnrabgangbestandREP feldschutz(i)PER ;feldfrei(fnrgewschuljahr);
+feldfrei(fnrgewhalbjahr);feldfrei(fnrgewjgst);.END PROC setzefeldschutz;PROC
+holeerstenmehrtlgschluesselausdatei(BOOL VAR ok):IF NOT exists(dateiname)
+THEN ok:=FALSE ;LEAVE holeerstenmehrtlgschluesselausdateiFI ;f:=
+sequentialfile(input,dateiname);holenaechstenmehrtlgschluesselausdatei(ok).
+END PROC holeerstenmehrtlgschluesselausdatei;PROC
+holenaechstenmehrtlgschluesselausdatei(BOOL VAR ok):TEXT VAR thesaurustext:=
+"";INT VAR schluesselbeginn:=0;INT VAR schluesseltrennung:=0;INT VAR i:=1;IF
+eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f,
+thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI .
+bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext,
+oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner,
+schluesselbeginn+1);FOR iFROM 1UPTO anzschluesselsuREP IF schluesseltrennung>
+0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1,
+schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung
+:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):=
+subtext(thesaurustext,schluesselbeginn+1);FI ;schluessel(3):=
+datumrekonversion(schluessel(3));PER ;.END PROC
+holenaechstenmehrtlgschluesselausdatei;PROC
+halbjahresdatendesschuelersnichtbearbeiten:
+vorbereitendernaechstenschluesselbehandlung(1)END PROC
+halbjahresdatendesschuelersnichtbearbeiten;TEXT PROC hjderfassungswert(INT
+CONST feldnr):IF (feldnr>maxfeldbearb2)OR (feldnr<1)THEN ""ELSE
+erfassungsfeld(bs)(feldnr)FI .END PROC hjderfassungswert;PROC setzedbwerte(
+INT CONST mnr):SELECT mnrOF CASE eingang:setzedbwerteeingangCASE bearb1:
+setzedbwertebearb1CASE bearb2:setzedbwertebearb2END SELECT .
+setzedbwerteeingang:putwert(fnrsufamnames,erfassungsfeld[mnr][fnrname]);
+putwert(fnrsurufnames,erfassungsfeld[mnr][fnrrufname]);putwert(fnrsugebdatums
+,datumskonversion(erfassungsfeld[mnr][fnrgebdatum]));.setzedbwertebearb1:
+putwert(fnrhjdjgst,erfassungsfeld[mnr][fnrausgabegewjgst]);putwert(
+fnrhjdkennung,erfassungsfeld[mnr][fnrausgabegewzug]);putwert(fnrhjdvermblau,
+erfassungsfeld[mnr][fnrblbriefwarn]);putwert(fnrhjdbemblau,erfassungsfeld[mnr
+][fnrblbriefbem]);putwert(fnrhjdvermnachwarn,erfassungsfeld[mnr][
+fnrblbriefnwarn]);putwert(fnrhjdbemnachwarn,erfassungsfeld[mnr][
+fnrblbriefnbem]);putwert(fnrhjdversetzung,erfassungsfeld[mnr][fnrversetzung])
+;putwert(fnrhjdnachfach1,erfassungsfeld[mnr][fnrnachpr1]);putwert(
+fnrhjdnachfach2,erfassungsfeld[mnr][fnrnachpr2]);putwert(fnrhjdnachfach3,
+erfassungsfeld[mnr][fnrnachpr3]);putwert(fnrhjdbemnach,erfassungsfeld[mnr][
+fnrnachprbem]);putwert(fnrhjdnachfach,erfassungsfeld[mnr][fnrnachprabgelegt])
+;putwert(fnrhjdnacherg,erfassungsfeld[mnr][fnrnachprnote]);putwert(
+fnrhjdbemzeug1,erfassungsfeld[mnr][fnrzeugbem1]);putwert(fnrhjdbemzeug2,
+erfassungsfeld[mnr][fnrzeugbem2]);putwert(fnrhjdbemzeug3,erfassungsfeld[mnr][
+fnrzeugbem3]);putwert(fnrhjdversstdm,erfassungsfeld[mnr][fnrversaeumtmit]);
+putwert(fnrhjdversstdo,erfassungsfeld[mnr][fnrversaeumtohne]);putwert(
+fnrhjdverspaet,erfassungsfeld[mnr][fnrverspaetet]);.setzedbwertebearb2:
+setzedbwertfach;setzedbwertart;setzedbwertklausur;setzedbwertkurs;
+setzedbwertnote;setzedbwertbem;setzedbwertwarnung.setzedbwertfach:
+spalteninhalte:="";FOR indFROM fnrfachanfUPTO fnrfachendeREP spalteninhalte
+CAT text(erfassungsfeld[mnr][ind],2)PER ;putwert(fnrhjdfach,spalteninhalte).
+setzedbwertart:spalteninhalte:="";FOR indFROM fnrkursartanfUPTO
+fnrkursartendeREP spalteninhalteCAT text(erfassungsfeld[mnr][ind],2)PER ;
+putwert(fnrhjdkursart,spalteninhalte).setzedbwertklausur:spalteninhalte:="";
+FOR indFROM fnrklausuranfUPTO fnrklausurendeREP spalteninhalteCAT text(
+erfassungsfeld[mnr][ind],1)PER ;putwert(fnrhjdklausurteiln,spalteninhalte).
+setzedbwertkurs:spalteninhalte:="";FOR indFROM fnrkursanfUPTO fnrkursendeREP
+spalteninhalteCAT text(erfassungsfeld[mnr][ind],4)PER ;putwert(
+fnrhjdlerngrpkenn,spalteninhalte).setzedbwertnote:spalteninhalte:="";FOR ind
+FROM fnrnoteanfUPTO fnrnoteendeREP spalteninhalteCAT text(erfassungsfeld[mnr]
+[ind],2)PER ;putwert(fnrhjdnotepunkte,spalteninhalte).setzedbwertbem:
+spalteninhalte:="";FOR indFROM fnrbemanfUPTO fnrbemendeREP spalteninhalteCAT
+text(erfassungsfeld[mnr][ind],3)PER ;putwert(fnrhjdbemerk,spalteninhalte).
+setzedbwertwarnung:spalteninhalte:="";FOR indFROM fnrwarnunganfUPTO
+fnrwarnungendeREP spalteninhalteCAT text(erfassungsfeld[mnr][ind],1)PER ;
+putwert(fnrhjdvermwarnung,spalteninhalte).END PROC setzedbwerte;PROC
+holedbwerte(INT CONST mnr):SELECT mnrOF CASE eingang:holedbwerteeingangCASE
+bearb1:holedbwertebearb1CASE bearb2:holedbwertebearb2END SELECT .
+holedbwerteeingang:erfassungsfeld[mnr][fnrname]:=wert(fnrsufamnames);
+erfassungsfeld[mnr][fnrrufname]:=wert(fnrsurufnames);erfassungsfeld[mnr][
+fnrgebdatum]:=datumrekonversion(wert(fnrsugebdatums));.holedbwertebearb1:
+erfassungsfeld[mnr][fnrausgabegewjgst]:=jgstaufber(wert(fnrhjdjgst));
+erfassungsfeld[mnr][fnrausgabegewzug]:=wert(fnrhjdkennung);erfassungsfeld[mnr
+][fnrblbriefwarn]:=wert(fnrhjdvermblau);erfassungsfeld[mnr][fnrblbriefbem]:=
+wert(fnrhjdbemblau);erfassungsfeld[mnr][fnrblbriefnwarn]:=wert(
+fnrhjdvermnachwarn);erfassungsfeld[mnr][fnrblbriefnbem]:=wert(
+fnrhjdbemnachwarn);erfassungsfeld[mnr][fnrversetzung]:=wert(fnrhjdversetzung)
+;erfassungsfeld[mnr][fnrnachpr1]:=wert(fnrhjdnachfach1);erfassungsfeld[mnr][
+fnrnachpr2]:=wert(fnrhjdnachfach2);erfassungsfeld[mnr][fnrnachpr3]:=wert(
+fnrhjdnachfach3);erfassungsfeld[mnr][fnrnachprbem]:=wert(fnrhjdbemnach);
+erfassungsfeld[mnr][fnrnachprabgelegt]:=wert(fnrhjdnachfach);erfassungsfeld[
+mnr][fnrnachprnote]:=wert(fnrhjdnacherg);erfassungsfeld[mnr][fnrzeugbem1]:=
+wert(fnrhjdbemzeug1);erfassungsfeld[mnr][fnrzeugbem2]:=wert(fnrhjdbemzeug2);
+erfassungsfeld[mnr][fnrzeugbem3]:=wert(fnrhjdbemzeug3);erfassungsfeld[mnr][
+fnrversaeumtmit]:=wert(fnrhjdversstdm);erfassungsfeld[mnr][fnrversaeumtohne]
+:=wert(fnrhjdversstdo);erfassungsfeld[mnr][fnrverspaetet]:=wert(
+fnrhjdverspaet).holedbwertebearb2:.END PROC holedbwerte;BOOL PROC
+korrekteschuljahreseingabe(TEXT CONST eingabe):eingabe=niltextOR eingabe=
+"9900"OR int(subtext(eingabe,1,2))=int(subtext(eingabe,3,4))-1END PROC
+korrekteschuljahreseingabe;PROC eventuellneueshjdtideintragen:IF
+aktuellesschulhalbjahrinbearbeitungTHEN neueshjdtideintragenFI .
+neueshjdtideintragen:readtid(dnrschueler,schuelertid);putwert(fnrsutidakthjd,
+hjdtid);replace(dnrschueler,schuelertid).END PROC
+eventuellneueshjdtideintragen;#dr11.05.88PROC eventuellinstatwuerfeleintragen
+:IF aktuellesschulhalbjahrinbearbeitungCAND versetzungseintrag<>wert(
+fnrhjdversetzung)THEN kuerzelsummeeinsrunter(statnrversetzung,jgst,zug,
+aktbestand,versetzungseintrag);kuerzelsummeeinsrauf(statnrversetzung,jgst,zug
+,aktbestand,wert(fnrhjdversetzung));FI END PROC
+eventuellinstatwuerfeleintragen;#BOOL PROC
+aktuellesschulhalbjahrinbearbeitung:vglgewhalbjahr=vglakthalbjahrCAND
+gewschuljahr=schulkenndatum(schuljahr)END PROC
+aktuellesschulhalbjahrinbearbeitung;TEXT PROC ohnestrich(TEXT CONST txt):
+TEXT VAR t:=txt;changeall(t,"_",niltext);tEND PROC ohnestrich;PROC init(INT
+CONST bsnr,maxfeld):FOR lvFROM 1UPTO maxfeldREP erfassungsfeld(bsnr)(lv):=""
+PER END PROC init;END PACKET halbjahresdatenbearbeiten;
+
diff --git a/app/schulis/2.2.1/src/1.hoeherstufen anw do.prog b/app/schulis/2.2.1/src/1.hoeherstufen anw do.prog
new file mode 100644
index 0000000..d7dc1ea
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.hoeherstufen anw do.prog
@@ -0,0 +1,43 @@
+PACKET hoeherstufenanwdoprogDEFINES halbjahreswechselbearbeitung,
+hochsetzeneingangsbehandlung,hochsetzenbearbeitung,hochsetzenprotokolldrucken
+:#LET schuljahreswechsel="isp.hoeherstufen local.sj",halbjahreswechsel=
+"isp.hoeherstufen local.hj";#LET niltext="",tofather=1,tograndfather=2,
+maxjahr=100,minjahr="00";LET zumschuljahresende=1,zumhalbjahresende=0;LET
+schluesselschuljahr="Schuljahr",schluesselhalbjahr="Schulhalbjahr",
+schuljahresfeld=2,infofeld=3;LET meldende=110,melddruck=58,meldwarten=156;
+LET protname="Fehlerprotokoll";LET rcodeprot=1001;DATASPACE VAR ds;INT VAR
+kanal:=channel,rcode;TAG VAR aktuellemaske;TEXT VAR aktschuljahr,akthalbjahr,
+kommendesschuljahr;LET logbucheintragsjwechsel="Anw. 1.5.1 Hochsetzen ",
+logbucheintraghjwechsel="Anw. 1.5.2 Halbjahreswechsel ";TEXT VAR
+logbuchtextanfang;PROC hochsetzeneingangsbehandlung:reinitparsing;
+eingangsbildschirmzeigen;schuljahrzeigen;aufaktionwarten.
+eingangsbildschirmzeigen:initmaske(aktuellemaske,maske(vergleichsknoten));
+standardstartproc(maske(vergleichsknoten)).schuljahrzeigen:schuljahrIN
+schuljahresfeld.schuljahr:aktschuljahr:=schulkenndatum(schluesselschuljahr);
+akthalbjahr:=schulkenndatum(schluesselhalbjahr);kommendesschuljahr:=subtext(
+aktschuljahr,3,4);kommendesschuljahrCAT (jahrestext(int(kommendesschuljahr)+1
+));aktschuljahr.aufaktionwarten:infeld(infofeld);standardnproc.END PROC
+hochsetzeneingangsbehandlung;PROC halbjahreswechselbearbeitung:
+logbuchtextanfang:=logbucheintraghjwechsel;logeintrag(logbucheintraghjwechsel
++"gestartet");abschnittsendebearbeitung(zumhalbjahresende)END PROC
+halbjahreswechselbearbeitung;PROC hochsetzenbearbeitung:logbuchtextanfang:=
+logbucheintragsjwechsel;logeintrag(logbucheintragsjwechsel+"gestartet");
+abschnittsendebearbeitung(zumschuljahresende)END PROC hochsetzenbearbeitung;
+PROC abschnittsendebearbeitung(INT CONST zeitpunkt):meldewarten;
+fehlerbehandlungvorbereiten;verarbeitung;reinitparsing;fehlerauswertung.
+meldewarten:standardmeldung(meldwarten,niltext).fehlerbehandlungvorbereiten:
+forget(protname,quiet);disablestop.verarbeitung:kanal:=channel;#17.10.88dr#
+putsndparam(1,text(kanal));break(quiet);IF zeitpunkt=zumschuljahresendeTHEN
+doonserver("schuljahreswechsel",rcode)ELSE doonserver("halbjahreswechsel",
+rcode)FI ;continue(kanal).fehlerauswertung:loeschemeldung(aktuellemaske);IF
+rcode=rcodeprotTHEN ds:=getrcvds;copy(ds,protname);forget(ds);logeintrag(
+logbuchtextanfang+"beendet mit Fehlern");zeigefehlerprotokollELSE logeintrag(
+logbuchtextanfang+"beendet ohne Fehler");fertigmeldungFI .
+zeigefehlerprotokoll:store(FALSE );clearerror;enablestop;editiere(protname).
+fertigmeldung:IF NOT iserrorTHEN standardmeldung(meldende,niltext);FI ;return
+(tofather).END PROC abschnittsendebearbeitung;PROC hochsetzenprotokolldrucken
+:print(protname);forget(protname,quiet);reorganizescreen;standardmeldung(
+melddruck,niltext);return(tograndfather)END PROC hochsetzenprotokolldrucken;
+TEXT PROC jahrestext(INT CONST jahr):IF jahr=maxjahrTHEN minjahrELSE text(
+jahr)FI END PROC jahrestext;END PACKET hoeherstufenanwdoprog
+
diff --git a/app/schulis/2.2.1/src/1.listen.abgem b/app/schulis/2.2.1/src/1.listen.abgem
new file mode 100644
index 0000000..da5fb1b
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.abgem
@@ -0,0 +1,115 @@
+PACKET abgemlistenDEFINES abgemlispezielleteile:LET niltext="",blank=" ",
+mittestrich="-",null=0,ueberschriftenzeilen=1,spalte1breite=7,spalte3breite=8
+,spalte4breite=8,spalte5breite=7,anzspaltentrenner=4,ausgkopflaenge=3,
+ausgfeldlaenge=2,AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW
+ausgkopflaengeTEXT ,abgemlieingangsmaske="mu liste einfach eingang",
+abgemlianfpos=2,mnrbearbeitetwirdjgst=106,#ixsustatabgdat=260,dnrschueler=2,
+fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums=5,fnrsustatuss=6,fnrsusgrpjgst
+=7,fnrsusgrpzugtut=8,fnrsunamenszusatzs=21,fnrsuabgdats=16,fnrsuabggrund=17,
+fnrsuabschluss=18,#anfangsj="Anfang Schulhalbjahr",endesj=
+"Ende Schulhalbjahr";INT CONST spalte2bildbreite:=bildbreite-
+anzspaltentrenner-spalte1breite-spalte3breite-spalte4breite-spalte5breite;
+INT VAR spalte2druckbreite,druckzeilenzahl,aktuelleindexnr,bildanf,
+eingabestatus,breite;TEXT VAR abgemliueberschrift,bearbeitetwirdjgst,
+schuljahr,jahr1,jahr2,schuelername,schuelerrufname,schuelernamenszus,
+schuelerjgst,schuelerzug,schuelergebdat,schuelerabdat,schuelerabgrund,
+schuelerabqual,jgst,neuejgst,startwert,klasse,neueklasse,anfangsdatum:="",
+endedatum:="";TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite*
+mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR
+ersteraufbildschirm,klassegeaendert:=FALSE ;BOOL PROC multistop:BOOL VAR b:=(
+date(wert(fnrsuabgdats))>=date(anfangsdatum))CAND (date(wert(fnrsuabgdats))<=
+date(endedatum))CAND (wert(fnrsustatuss)="ls");bEND PROC multistop;BOOL PROC
+multistopdruck:BOOL VAR b:=multistop;setzebestandende(NOT b);bENDPROC
+multistopdruck;PROC abgemlispezielleteile(INT CONST nr):SELECT nrOF CASE 1:
+abgemlidialogvorbereitenCASE 2:abgemlieingabenrichtigCASE 3:
+abgemlilistenvorbereitenCASE 4:abgemlidruckvorbereitenCASE 5:
+abgemliseitedruckenCASE 6:abgemlibildschirmvorbereitenCASE 7:
+abgemliseitezeigenENDSELECT .END PROC abgemlispezielleteile;PROC
+abgemlidialogvorbereiten:abgemliueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(abgemlieingangsmaske,abgemlianfpos)END PROC
+abgemlidialogvorbereiten;PROC abgemlieingabenrichtig:LET fnrausgdrucker=2,
+fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest
+(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);
+setzeeingabetest(TRUE )FI .END PROC abgemlieingabenrichtig;PROC
+abgemlilistenvorbereiten:BOOL VAR b:=FALSE ;LET schluessel="Schuljahr";
+aktuellesschuljahrermitteln;aktuelleindexnr:=ixsustatabgdat;startwert:="ls";
+inittupel(dnrschueler);initobli(8);parsenooffields(21);setzeidentiwert("");
+putwert(fnrsustatuss,startwert);putwert(fnrsuabgdats,anfangsdatum);#
+objektlistestarten(aktuelleindexnr,"",3,TRUE ,b);#objektlistestarten(
+aktuelleindexnr,"",fnrsuabgdats,TRUE ,b);setzebestandende(NOT multistopOR b).
+aktuellesschuljahrermitteln:schuljahr:=schulkenndatum(schluessel);jahr1:=
+subtext(schuljahr,1,2);jahr2:=subtext(schuljahr,3,4);anfangsdatum:=
+schulkenndatum(anfangsj);endedatum:=schulkenndatum(endesj).END PROC
+abgemlilistenvorbereiten;PROC abgemlibildschirmvorbereiten:LET fnrausganf=2;
+standardkopfmaskeaktualisieren(abgemliueberschrift);breite:=bildbreite;
+initspalten;setzespaltenbreiten(spalte2bildbreite);initausgabekopf(bildstrich
+);bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT ausgkopf
+(i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext;
+setzebildanfangsposition(bildanf).END PROC abgemlibildschirmvorbereiten;PROC
+abgemliseitezeigen:ersteraufbildschirm:=TRUE ;setzescanendewert(endedatum);
+setzescanstartwert(anfangsdatum);blaettern(PROC (INT CONST )schuelerzeigen,
+aktion,TRUE ,TRUE ,BOOL PROC multistop);setzescanendewert("�");
+setzescanstartwert("�")END PROC abgemliseitezeigen;PROC schuelerzeigen(INT
+CONST x):schuelerholen;IF ersteraufbildschirmTHEN klassegeaendert:=TRUE ;
+ersteraufbildschirm:=FALSE FI ;schueleraufbereiten;schueleraufbildschirm.END
+PROC schuelerzeigen;PROC schueleraufbildschirm:INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsEND
+REPEAT .END PROC schueleraufbildschirm;PROC abgemlidruckvorbereiten:LET
+uebteil1="Liste der im Schuljahr ",uebteil2=" abgemeldeten Schüler";TEXT VAR
+ueberschrift;jgst:=niltext;klasse:=niltext;druckvorbereiten;
+variablenfuerdrucksetzen;ueberschriftvorbereitendruck;initdruckkopf(zentriert
+(ueberschrift,druckbreite));breite:=druckbreite;initspalten;
+setzespaltenbreiten(spalte2druckbreite);initausgabekopf(druckstrich);
+holemeldung;inittupel(dnrschueler);putwert(fnrsustatuss,startwert);putwert(
+fnrsuabgdats,anfangsdatum);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,
+INT VAR )scanforward,BOOL PROC multistopdruck).holemeldung:meldungstext(
+mnrbearbeitetwirdjgst,bearbeitetwirdjgst).variablenfuerdrucksetzen:
+druckstrich:=druckbreite*mittestrich;spalte2druckbreite:=druckbreite-
+anzspaltentrenner-spalte1breite-spalte3breite-spalte4breite-spalte5breite;
+druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.
+ueberschriftvorbereitendruck:ueberschrift:=uebteil1+aufbereitetesschuljahr+
+uebteil2.aufbereitetesschuljahr:"19"+jahr1+"/"+jahr2.END PROC
+abgemlidruckvorbereiten;PROC abgemliseitedrucken:abgemliueberschriftdrucken;
+seitedrucken(PROC (INT VAR )schuelerdrucken,druckzeilenzahl,ausgfeldlaenge,
+BOOL PROC multistopdruck);seitenwechsel.END PROC abgemliseitedrucken;PROC
+abgemliueberschriftdrucken:druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO
+ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC
+abgemliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler):LET
+markiert="#";schuelerholen;IF zeilenzaehler=nullTHEN klassegeaendert:=TRUE
+FI ;ggflmeldungjgst;schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge;
+schuelerindruckdatei.ggflmeldungjgst:IF jgstgeaendertTHEN zwischenmeldungFI .
+jgstgeaendert:neuejgst:=schuelerjgst;jgst<>neuejgst.zwischenmeldung:
+standardmeldung(bearbeitetwirdjgst,neuejgst+markiert);jgst:=neuejgst;END
+PROC schuelerdrucken;PROC schuelerindruckdatei:INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengeREPEAT druckzeileschreiben(ausgfeld(i))END REPEAT .END PROC
+schuelerindruckdatei;PROC setzespaltenbreiten(INT CONST spalte2breite):
+setzespaltenbreite(spalte1breite);setzespaltenbreite(spalte2breite);
+setzespaltenbreite(spalte3breite);setzespaltenbreite(spalte4breite);
+setzespaltenbreite(spalte5breite);END PROC setzespaltenbreiten;PROC
+initausgabekopf(TEXT CONST strich):LET jgst="Jgst.",klasse=" Kl.",name=
+"Familienname",rufname=" Rufname",geb="Geburts-",abg="Abgangs-",datum=
+"datum",grund="Grund",qual=" Qual.";spaltenweise(jgst);spaltenweise(name);
+spaltenweise(geb);spaltenweise(abg);spaltenweise(grund);ausgkopf(1):=zeile;
+spaltenweise(klasse);spaltenweise(rufname);spaltenweise(datum);spaltenweise(
+datum);spaltenweise(qual);ausgkopf(2):=zeile;ausgkopf(3):=strich;END PROC
+initausgabekopf;PROC schuelerholen:schuelername:=wert(fnrsufamnames);
+schuelerrufname:=wert(fnrsurufnames);schuelernamenszus:=wert(
+fnrsunamenszusatzs);schuelerjgst:=wert(fnrsusgrpjgst);schuelerzug:=wert(
+fnrsusgrpzugtut);schuelergebdat:=wert(fnrsugebdatums);schuelerabdat:=wert(
+fnrsuabgdats);schuelerabgrund:=wert(fnrsuabggrund);schuelerabqual:=wert(
+fnrsuabschluss);neueklasse:=schuelerjgst+schuelerzug;klassegeaendert:=klasse
+<>neueklasse;klasse:=neueklasse.END PROC schuelerholen;PROC
+schueleraufbereiten:LET minus="-";schreibenameabdaten;schreiberufname.
+schreibenameabdaten:spaltenweise(aufbschuelerklasse);spaltenweise(
+aufbschuelername);spaltenweise(schuelergebdat);spaltenweise(schuelerabdat);
+spaltenweise(blank+aufbschuelerabgrund+blank+aufbschuelerabqual);ausgfeld(1)
+:=zeile.schreiberufname:ausgfeld(2):=text(aufbrufname,breite).
+aufbschuelerklasse:IF klassegeaendertTHEN schuelerjgst+blank+schuelerzugELSE
+spalte1breite*blankFI .aufbschuelername:IF schuelernamenszus=niltextTHEN
+schuelernameELSE schuelernamenszus+blank+schuelernameFI .aufbschuelerabqual:
+IF schuelerabqual=niltextTHEN minusELSE schuelerabqualFI .aufbschuelerabgrund
+:IF schuelerabgrund=niltextTHEN minusELSE schuelerabgrundFI .aufbrufname:(
+spalte1breite+3)*blank+schuelerrufname.END PROC schueleraufbereiten;END
+PACKET abgemlisten;
+
diff --git a/app/schulis/2.2.1/src/1.listen.adressen b/app/schulis/2.2.1/src/1.listen.adressen
new file mode 100644
index 0000000..0a45d7b
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.adressen
@@ -0,0 +1,186 @@
+PACKET adressenlistenDEFINES adrlispezielleteile:LET niltext="",blank=" ",
+mittestrich="-",null=0,komma=",",altervolljaehrig=18,uebteil21="Jgst. ",
+uebteil22="Klasse ",uebteil23="Tutorenkurs ",uebteil24="alphabetisch",
+ueberschriftenzeilen=2,#bestand1="c12 schueler",bestand2=
+"c11 akt schuelergruppen",praefix1="c12 jgst",praefix2="c12 sg",#
+ausgfeldlaenge=9,AUSGFELD =ROW ausgfeldlaengeTEXT ,adrlieingangsmaske=
+"ms liste adressen eingang",adrlianfpos=2,#dnrschueler=2,fnrsufamnames=3,
+fnrsurufnames=4,fnrsustatuss=6,fnrsunamenszusatzs=21,fnrsugebnames=22,
+fnrsugebdatums=5,fnrsusgrpjgst=7,fnrsusgrpzugtut=8,fnrsuwohntbei=23,
+fnrsustrnrs=24,fnrsuplzorts=25,fnrsutelnrs=26,fnrsufamnamee=28,fnrsuvornamee=
+29,fnrsunamenszusatzs=30,fnrsustrnre=31,fnrsuplzorte=32,fnrsutelnre=33,
+ixsustatjgstzug=255,ixsustatjgst=261,ixstatfamrufgeb=254,stattnachfolgendemI
+ndexixsustat=252,#mnrbearbeitetwerden=102,mnrbearbeitetwird=100,
+mnrauswahlnichtsinnvoll=56,mnrlistewirdgedruckt=58;INT VAR aktuelleindexnr,
+druckzeilenzahl,bildanf,vergldatum,ausgfeldzeile,eingabestatus,zaehler;TEXT
+VAR adrliueberschrift,ueberschrift1,ueberschrift2,anfbuchstabe,
+neueranfbuchstabe,startjahr,startzug,bearbeitetwerden,bearbeitetwird,
+schuelername,schuelervorname,schuelernamenszusatz,schuelergebname,gebdat,
+jahrgangsstufe,zug,adressename,adressestrasse,adresseort,adressetelnr,
+erzbername,erzbervorname,erzbernamenszusatz,erzberstrasse,erzberort,
+erzbertelnr;AUSGFELD VAR ausgfeld;ausgfeld(ausgfeldlaenge):=niltext;TEXT VAR
+druckstrich;BOOL VAR einjahrgang,alle,sortalpha,neueklasse;BOOL PROC
+multistop:BOOL VAR b:=FALSE ;IF wert(fnrsustatuss)="ls"THEN IF startjahr<>
+niltextTHEN IF startzug=niltextTHEN b:=(wert(fnrsusgrpjgst)=startjahr)ELSE b
+:=(wert(fnrsusgrpzugtut)=startzugAND wert(fnrsusgrpjgst)=startjahr)FI ELSE b
+:=dbstatus=okFI ;FI ;bEND PROC multistop;BOOL PROC multistopsim:BOOL VAR b:=
+multistop;setzebestandende(NOT b);bENDPROC multistopsim;PROC
+adrlispezielleteile(INT CONST nr):SELECT nrOF CASE 1:adrlidialogvorbereiten
+CASE 2:adrlieingabenrichtigCASE 3:adrlilistenvorbereitenCASE 4:
+adrlidruckvorbereitenCASE 5:adrliseitedruckenCASE 6:
+adrlibildschirmvorbereitenCASE 7:adrliseitezeigenENDSELECT .END PROC
+adrlispezielleteile;PROC adrlidialogvorbereiten:adrliueberschrift:=text(
+vergleichsknoten);setzeanfangswerte(adrlieingangsmaske,adrlianfpos).END PROC
+adrlidialogvorbereiten;PROC adrlieingabenrichtig:LET fnrjgst=2,fnrzug=3,
+fnralphasort=4,fnrklassensort=5,fnrausgdrucker=6,fnrausgbild=7;alle:=FALSE ;
+einjahrgang:=FALSE ;sortalpha:=FALSE ;wohinausgabepruefen;IF
+falschausgefuelltTHEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE
+jahrgangsstufe:=standardmaskenfeld(fnrjgst);zug:=standardmaskenfeld(fnrzug);
+wasausgabepruefenFI .wohinausgabepruefen:standardpruefe(5,fnrausgdrucker,
+fnrausgbild,null,niltext,eingabestatus).wasausgabepruefen:IF jahrgangsstufe=
+niltextTHEN IF zug=niltextTHEN wieausgabepruefen;IF falschausgefuelltTHEN
+infeld(eingabestatus);setzeeingabetest(FALSE )ELSE alle:=TRUE ;
+wertesetzenfuerweiterebearbeitungFI ELSE meldefehler;infeld(fnrzug);
+setzeeingabetest(FALSE )FI ELSE standardpruefe(3,fnrjgst,5,13,niltext,
+eingabestatus);IF falschausgefuelltTHEN infeld(eingabestatus);
+setzeeingabetest(FALSE )ELSE jahrgangsstufe:=zweistellig(jahrgangsstufe);
+einjahrgang:=(zug=niltext);IF einjahrgangTHEN wieausgabepruefen;IF
+falschausgefuelltTHEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE
+wertesetzenfuerweiterebearbeitungFI ELSE wertesetzenfuerweiterebearbeitung;
+sortalpha:=TRUE FI ;FI ;FI .wieausgabepruefen:standardpruefe(5,fnralphasort,
+fnrklassensort,null,niltext,eingabestatus).wertesetzenfuerweiterebearbeitung:
+sortalpha:=standardmaskenfeld(fnrklassensort)=niltext;setzeausgabedrucker(
+standardmaskenfeld(fnrausgbild)=niltext);setzeeingabetest(TRUE ).
+falschausgefuellt:eingabestatus<>0.meldefehler:standardmeldung(
+mnrauswahlnichtsinnvoll,niltext).END PROC adrlieingabenrichtig;PROC
+adrlilistenvorbereiten:BOOL VAR b:=FALSE ;INT VAR staticfield:=dnrschueler+1;
+vergldatum:=vergleichsdatum(altervolljaehrig);startjahr:=jahrgangsstufe;
+startzug:=zug;IF sortalphaTHEN IF startjahr<>niltextTHEN IF startzug<>niltext
+THEN aktuelleindexnr:=ixsustatjgstzugELSE aktuelleindexnr:=ixsustatjgstFI ;
+ELSE staticfield:=fnrsustatuss;#?????#aktuelleindexnr:=ixsustatfamrufgeb#
+aktuelleindexnr:=ixsustat#FI ;ELSE IF startjahr=""THEN staticfield:=
+fnrsusgrpjgstELSE staticfield:=fnrsusgrpzugtutFI ;aktuelleindexnr:=
+ixsustatjgstzugFI ;inittupel(dnrschueler);initobli(2);parsenooffields(34);
+setzeidentiwert("");putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut,
+startzug);putwert(fnrsustatuss,"ls");#objektlistestarten(aktuelleindexnr,"",
+fnrsustatuss,TRUE ,b);#objektlistestarten(aktuelleindexnr,"",staticfield,
+TRUE ,b);setzebestandende(NOT multistopCOR b)END PROC adrlilistenvorbereiten;
+PROC adrlibildschirmvorbereiten:LET fnrausganf=2;ueberschriftvorbereitenbild;
+standardkopfmaskeaktualisieren(ueberschrift1);bildanf:=fnrausganf;#
+setzenderhilfsgroessenfuersblaettern(min(maxblocklaenge,bildblocklaenge),
+bildsatzzahl);#setzebildanfangsposition(bildanf).END PROC
+adrlibildschirmvorbereiten;PROC ueberschriftvorbereitenbild:LET aufein="",
+aufaus=" ";ueberschrift1:=adrliueberschrift;IF NOT alleTHEN ueberschrift1:=
+ueberschrift1+komma+blank;IF einjahrgangTHEN ueberschrift1:=ueberschrift1+
+uebteil21+aufein+jahrgangsstufe+aufausELSE IF int(jahrgangsstufe)<11THEN
+ueberschrift1:=ueberschrift1+uebteil22ELSE ueberschrift1:=ueberschrift1+
+uebteil23FI ;ueberschrift1:=ueberschrift1+aufein+jahrgangsstufe+blank+zug+
+aufausFI FI ;END PROC ueberschriftvorbereitenbild;PROC adrliseitezeigen:
+blaettern(PROC (INT CONST )adressdatenzeigen,aktion,TRUE ,aktuelleindexnr<>
+dnrschueler,BOOL PROC multistop)END PROC adrliseitezeigen;PROC
+adressdatenzeigen(INT CONST x):TEXT CONST leerzeile:=text(blank,bildbreite);
+INT VAR i;adressdatenholen;adressdatenaufbereiten(bildbreite);
+ggfleerzeilenfuellen;adressdatenaufbildschirm.ggfleerzeilenfuellen:
+ausgfeldzeileINCR 1;FOR iFROM ausgfeldzeileUPTO ausgfeldlaenge-1REP ausgfeld(
+i):=leerzeilePER .END PROC adressdatenzeigen;PROC adressdatenaufbildschirm:
+INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;
+erhoeheausgabeposumeinsEND REPEAT .END PROC adressdatenaufbildschirm;PROC
+adrlidruckvorbereiten:IF (alleOR einjahrgang)AND NOT sortalphaTHEN zaehler:=
+null;neueklasse:=TRUE ELSE anfbuchstabe:=niltextFI ;druckvorbereiten;
+variablenfuerdrucksetzen;holemeldungen;inittupel(dnrschueler);putwert(
+fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut,startzug);putwert(
+fnrsustatuss,"ls");lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR
+)scanforward,BOOL PROC multistopsim);ueberschriftvorbereitendruck;
+initdruckkopf(zentriert(ueberschrift1,druckbreite),zentriert(ueberschrift2,
+druckbreite)).variablenfuerdrucksetzen:druckzeilenzahl:=drucklaenge(
+ueberschriftenzeilen);druckstrich:=druckbreite*mittestrich.holemeldungen:
+meldungstext(mnrbearbeitetwird,bearbeitetwird);meldungstext(
+mnrbearbeitetwerden,bearbeitetwerden).END PROC adrlidruckvorbereiten;PROC
+ueberschriftvorbereitendruck:jahrgangsstufe:=wert(fnrsusgrpjgst);zug:=wert(
+fnrsusgrpzugtut);ueberschrift1:=compress(adrliueberschrift);#dr28.03.88#IF
+alleTHEN IF sortalphaTHEN ueberschrift2:=uebteil24ELSE klassenueberschriftFI
+ELSE IF einjahrgangTHEN IF sortalphaTHEN ueberschrift2:=uebteil21+
+jahrgangsstufe+komma+blank+uebteil24ELSE klassenueberschriftFI ELSE
+klassenueberschriftFI FI .klassenueberschrift:IF int(jahrgangsstufe)<11THEN
+ueberschrift2:=uebteil22ELSE ueberschrift2:=uebteil23FI ;ueberschrift2:=
+ueberschrift2+jahrgangsstufe+blank+zug.END PROC ueberschriftvorbereitendruck;
+PROC adrliseitedrucken:adrliueberschriftdrucken;IF (alleOR einjahrgang)AND
+NOT sortalphaTHEN seitedrucken(PROC (INT VAR )adressdatendrucken,
+druckzeilenzahl,ausgfeldlaenge,PROC bestandendesimulierenbeiklassenwechsel,
+BOOL PROC multistopsim);IF neueklasseTHEN simuliertesendezuruecknehmen;
+neuelistevorbereitenELSE seitenwechselFI ELSE seitedrucken(PROC (INT VAR )
+adressdatendrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);
+seitenwechselFI .simuliertesendezuruecknehmen:setzebestandende(FALSE ).
+neuelistevorbereiten:meldelistewirdgedruckt;drucknachbereiten;
+druckvorbereiten;zaehler:=null;ueberschriftvorbereitendruck;initdruckkopf(
+zentriert(ueberschrift1,druckbreite),zentriert(ueberschrift2,druckbreite)).
+meldelistewirdgedruckt:standardmeldung(mnrlistewirdgedruckt,"").END PROC
+adrliseitedrucken;PROC adrliueberschriftdrucken:druckkopfschreiben.END PROC
+adrliueberschriftdrucken;PROC adressdatendrucken(INT VAR zeilenzaehler):LET
+markiert="#";adressdatenholen;ggfmeldung;zaehlerINCR 1;adressdatenaufbereiten
+(druckbreite);zeilenzaehlerINCR ausgfeldzeile;adressdatenindruckdatei.
+ggfmeldung:IF (alleOR einjahrgang)AND NOT sortalphaTHEN ggfmeldungklasseELSE
+ggfmeldunganfbuchstabeEND IF .ggfmeldungklasse:IF zaehler=nullTHEN
+standardmeldung(bearbeitetwird,jahrgangsstufe+blank+zug+markiert)FI .
+ggfmeldunganfbuchstabe:IF anfangsbuchstabegeaendertTHEN meldunganfbuchstabe
+END IF .anfangsbuchstabegeaendert:neueranfbuchstabe:=schuelernameSUB 1;
+anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe:standardmeldung(
+bearbeitetwerden,neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.
+END PROC adressdatendrucken;PROC adressdatenindruckdatei:INT VAR i;FOR iFROM
+1UPTO ausgfeldzeileREP druckzeileschreiben(ausgfeld(i))PER .END PROC
+adressdatenindruckdatei;PROC bestandendesimulierenbeiklassenwechsel:IF
+bestandendeTHEN neueklasse:=FALSE ELSE nochklassezubearbeiten;IF neueklasse
+THEN setzebestandende(TRUE )FI ;FI .nochklassezubearbeiten:neueklasse:=zug<>
+wert(fnrsusgrpzugtut);IF alleTHEN neueklasse:=neueklasseOR (int(
+jahrgangsstufe)<>int(wert(fnrsusgrpjgst)))FI .END PROC
+bestandendesimulierenbeiklassenwechsel;PROC adressdatenholen:schuelername:=
+wert(fnrsufamnames);schuelervorname:=wert(fnrsurufnames);schuelernamenszusatz
+:=wert(fnrsunamenszusatzs);schuelergebname:=wert(fnrsugebnames);gebdat:=wert(
+fnrsugebdatums);jahrgangsstufe:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut
+);adressename:=wert(fnrsuwohntbei);adressestrasse:=wert(fnrsustrnrs);
+adresseort:=wert(fnrsuplzorts);adressetelnr:=wert(fnrsutelnrs);erzbername:=
+wert(fnrsufamnamee);erzbervorname:=wert(fnrsuvornamee);erzbernamenszusatz:=
+wert(fnrsunamenszusatze);erzberstrasse:=wert(fnrsustrnre);erzberort:=wert(
+fnrsuplzorte);erzbertelnr:=wert(fnrsutelnre)END PROC adressdatenholen;PROC
+adressdatenaufbereiten(INT CONST breite):LET prebreite=19,klassetelnrbreite=
+21,deutsch="D",namevornametrenner=", ",gebnamepre=", geb. ",gebdatpre=
+" Geb.Dat.: ",vollj="(Vollj.)",klassepre="Klasse: ",adressepre=
+" Adresse : ",preleer=" ",adressnamepre="bei ",
+telnrpre="Tel.: ",erzberpre=" Erz.Ber.: ";INT CONST breiteohnepre:=
+breite-prebreite,ortgebdatbreite:=breiteohnepre-klassetelnrbreite;
+schreibenamenszeile;schreibegebdatundggfklasse;schreibeschueleradresse;
+schreibeggferzberadresse.schreibenamenszeile:ausgfeld(1):=text(
+zusammengesetztername,breite).zusammengesetztername:subtext(schuelername+
+namevornametrenner+schuelervorname+blank+schuelernamenszusatz+gebname,1,
+breite).gebname:IF schuelergebname=niltextTHEN niltextELSE gebnamepre+
+schuelergebnameEND IF .schreibegebdatundggfklasse:ausgfeld(2):=gebdatpre+
+gebdatundggfklasse.gebdatundggfklasse:IF alleOR einjahrgangTHEN text(gebdat+
+ggfvollj,ortgebdatbreite)+text(klassepre+klasse,klassetelnrbreite)ELSE text(
+gebdat+ggfvollj,breiteohnepre)FI .klasse:jahrgangsstufe+blank+zug.ggfvollj:
+IF volljaehrig(datum(gebdat))THEN volljELSE niltextEND IF .
+schreibeschueleradresse:IF adressename=niltextTHEN ausgfeld(3):=text(
+adressepre+adressestrasse,breite);ausgfeldzeile:=4ELSE ausgfeld(3):=text(
+adressepre+adressnamepre+adressename,breite);ausgfeld(4):=text(preleer+
+adressestrasse,breite);ausgfeldzeile:=5FI ;ausgfeld(ausgfeldzeile):=preleer+
+ortundggftelefon.ortundggftelefon:IF adressetelnr=niltextTHEN text(
+adresseggflandundort,breiteohnepre)ELSE text(adresseggflandundort,
+ortgebdatbreite)+text(telnrpre+adressetelnr,klassetelnrbreite)FI .
+adresseggflandundort:adresseort.schreibeggferzberadresse:IF erzbername=
+niltextTHEN schreibeleerzeileELSE schreibeerzberadresseFI .
+schreibeerzberadresse:schreibeerzbername;schreibeggferzberstrort.
+schreibeerzbername:ausgfeldzeileINCR 1;ausgfeld(ausgfeldzeile):=text(
+erzberpre+ggferzbernamenszusatz+erzbername+namevornametrenner+erzbervorname,
+breite).ggferzbernamenszusatz:IF erzbernamenszusatz<>niltextTHEN
+erzbernamenszusatz+blankELSE niltextFI .schreibeggferzberstrort:IF (
+erzberstrasse=niltext)AND (erzberort=niltext)THEN schreibeleerzeileELSE
+schreibeerzberstrasse;schreibeerzberortundggftelnrFI .schreibeerzberstrasse:
+ausgfeldzeileINCR 1;ausgfeld(ausgfeldzeile):=text(preleer+erzberstrasse,
+breite).schreibeerzberortundggftelnr:ausgfeldzeileINCR 1;ausgfeld(
+ausgfeldzeile):=preleer+erzberortundggftelefon.erzberortundggftelefon:IF
+erzbertelnr=niltextTHEN text(erzberggflandundort,breiteohnepre)ELSE text(
+erzberggflandundort,ortgebdatbreite)+text(telnrpre+erzbertelnr,
+klassetelnrbreite)FI .erzberggflandundort:erzberort.schreibeleerzeile:
+ausgfeldzeileINCR 1;ausgfeld(ausgfeldzeile):=text(blank,breite).END PROC
+adressdatenaufbereiten;BOOL PROC volljaehrig(INT CONST geburtstag):geburtstag
+<=vergldatumEND PROC volljaehrig;END PACKET adressenlisten;
+
diff --git a/app/schulis/2.2.1/src/1.listen.anherk b/app/schulis/2.2.1/src/1.listen.anherk
new file mode 100644
index 0000000..fb9a34e
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.anherk
@@ -0,0 +1,124 @@
+PACKET anherklistenDEFINES anherklispezielleteile:#LET dnrschueler=2,
+fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums=5,fnrsustatuss=6,
+fnrsuskennlschule=14,fnrsuklasselschule=15,fnrsunamenszusatzs=21,dnrschulen=
+120,fnrschkennung=121,fnrschname=122,fnrschstrnr=124,fnrschplzort=125,
+ixsustatschulkenn=253,#LET mnrbearbeitetwirdschule=103,mnrlistewirdgedruckt=
+58;TEXT VAR bearbeitetwirdschule:="",listewirdgedruckt:="",startwert:="";LET
+niltext="",blank=" ",mittestrich="-",null=0,komma=",",ueberschriftenzeilen=1,
+spalte2breite=8,spalte3breite=27,anzspaltentrenner=2,spaltentrenner=":",
+ausgkopflaenge=3,ausgfeldlaenge=1,AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF
+=ROW ausgkopflaengeTEXT ,anherklieingangsmaske="ms liste anherk eingang",
+anherklianfpos=2;INT VAR druckzeilenzahl,druckzeilenzahlseite1,
+druckzeilenzahlfolgeseiten,spalte1breite,eingabestatus;TEXT VAR #
+anherkliueberschrift,#schuelername,schuelerrufname,schuelernamenszus,
+schuelergebdat,schulkuerzel,letzteklasse,vordruck,vordruckueberarbeitet;TEXT
+VAR druckstrich;AUSGFELD VAR ausgfelddruck;AUSGKOPF VAR ausgkopfdruck;BOOL
+VAR jgst5,neueherkschule;FILE VAR textanschr;PROC anherklispezielleteile(INT
+CONST nr):SELECT nrOF CASE 1:anherklidialogvorbereitenCASE 2:
+anherklieingabenrichtigCASE 3:anherklilistenvorbereitenCASE 4:
+anherklidruckvorbereitenCASE 5:anherkliseitedruckenENDSELECT .END PROC
+anherklispezielleteile;PROC anherklidialogvorbereiten:setzeanfangswerte(
+anherklieingangsmaske,anherklianfpos).END PROC anherklidialogvorbereiten;
+PROC anherklieingabenrichtig:LET fnrjgst5=2,fnrjgst11=3;standardpruefe(5,
+fnrjgst5,fnrjgst11,null,niltext,eingabestatus);IF eingabestatus<>0THEN infeld
+(eingabestatus);setzeeingabetest(FALSE )ELSE jgst5:=(standardmaskenfeld(
+fnrjgst11)=niltext);setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )FI .
+END PROC anherklieingabenrichtig;PROC anherklilistenvorbereiten:BOOL VAR b:=
+FALSE ;IF jgst5THEN startwert:="n05"ELSE startwert:="n11"FI ;meldungstext(
+mnrbearbeitetwirdschule,bearbeitetwirdschule);meldungstext(
+mnrlistewirdgedruckt,listewirdgedruckt);inittupel(dnrschueler);
+parsenooffields(21);setzeidentiwert("");putwert(fnrsustatuss,startwert);
+putwert(fnrsuskennlschule," ");objektlistestarten(ixsustatschulkenn,"",#
+fnrsustatuss#dnrschueler+1,TRUE ,b);setzebestandende(b)END PROC
+anherklilistenvorbereiten;PROC anherklidruckvorbereiten:LET vordr1=
+"vordruck fuer anschreiben an herkunftsschulen fuer jgst 5",vordr2=
+"vordruck fuer anschreiben an herkunftsschulen fuer jgst 11",vordrueberarb=
+"vordruck ueberarbeitet",manager="anschreiben server";neueherkschule:=TRUE ;
+druckvorbereiten;festenanschreibentextholen;variablenfuerdrucksetzen;
+inittupel(dnrschueler);putwert(fnrsustatuss,startwert);putwert(
+fnrsuskennlschule," ");lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT
+VAR )scanforward,BOOL PROC multistopsim);initdruckkopf;initspalten;
+initausgabekopfdruck.festenanschreibentextholen:IF jgst5THEN vordruck:=vordr1
+ELSE vordruck:=vordr2FI ;vordruckueberarbeitet:=vordrueberarb;forget(vordruck
+,quiet);forget(vordruckueberarbeitet,quiet);fetch(vordruck,/manager);
+briefalternative(vordruck,vordruckueberarbeitet).variablenfuerdrucksetzen:
+druckstrich:=druckbreite*mittestrich;spalte1breite:=druckbreite-
+anzspaltentrenner-spalte2breite-spalte3breite;druckzeilenzahlseite1:=
+drucklaenge(ueberschriftenzeilen)-ausgkopflaenge;druckzeilenzahlfolgeseiten:=
+drucklaenge-ausgkopflaenge.END PROC anherklidruckvorbereiten;PROC
+initausgabekopfdruck:LET name="Name",geb="Geburts-",dat="datum",letzte=
+"letzte:",klasse="Klasse:",bedingung="Bed. 2. Fremdsprache",erfuellt=
+"erfüllt für";hilfsfeldervorbelegen;spaltenweise(niltext);spaltenweise(geb);
+IF jgst5THEN spaltenweise(letzte)ELSE spaltenweise(letzte+bedingung)FI ;
+ausgkopfdruck(1):=zeile;spaltenweise(name);spaltenweise(dat);IF jgst5THEN
+spaltenweise(klasse)ELSE spaltenweise(klasse+erfuellt)FI ;ausgkopfdruck(2):=
+zeile;ausgkopfdruck(3):=druckstrich.hilfsfeldervorbelegen:setzespaltentrenner
+(spaltentrenner);setzespaltenbreite(spalte1breite);setzespaltenbreite(
+spalte2breite);setzespaltenbreite(spalte3breite).END PROC
+initausgabekopfdruck;BOOL PROC multistopsim:BOOL VAR b;IF jgst5THEN b:=wert(
+fnrsustatuss)="n05"ELSE b:=wert(fnrsustatuss)="n11"FI ;setzebestandende(NOT b
+);bENDPROC multistopsim;PROC anherkliseitedrucken:anherkliueberschriftdrucken
+;seitedrucken(PROC (INT VAR )schuelerdatendrucken,druckzeilenzahl,
+ausgfeldlaenge,PROC bestandendesimulierenbeischulwechsel,BOOL PROC
+multistopsim);IF neueherkschuleTHEN simuliertesendezuruecknehmen;
+neuelistevorbereitenELSE seitenwechselFI .simuliertesendezuruecknehmen:
+setzebestandende(FALSE ).neuelistevorbereiten:meldelistewirdgedruckt;
+drucknachbereiten;druckvorbereiten;initdruckkopf.meldelistewirdgedruckt:
+standardmeldung(listewirdgedruckt,"").END PROC anherkliseitedrucken;PROC
+anherkliueberschriftdrucken:LET anzleerzeilen=3,markiert="#";INT VAR i;IF
+neueherkschuleTHEN zwischenmeldung;druckzeilenzahl:=druckzeilenzahlseite1;
+druckkopfschreiben;anschreibenschreibenELSE druckzeilenzahl:=
+druckzeilenzahlfolgeseitenFI ;FOR iFROM 1UPTO ausgkopflaengeREPEAT
+druckzeileschreiben(ausgkopfdruck(i))END REPEAT .zwischenmeldung:
+standardmeldung(bearbeitetwirdschule,wert(fnrsuskennlschule)+markiert).
+anschreibenschreiben:#ROW 3TEXT VAR herkschuldaten,merker;##dbwertemerken;#
+adresseherkschuleholen;adresseherkschuleschreiben;festentextschreiben;
+unterschriftschreiben;#dbwertezurueckholen.#.#dbwertemerken:FOR iFROM 1UPTO 3
+REP merker(i):=dbwert(i)PER .#adresseherkschuleholen:putwert(fnrschkennung,
+wert(fnrsuskennlschule));search(dnrschulen,TRUE );IF NOT gefundenTHEN
+inittupel(dnrschulen)FI .gefunden:dbstatus=ok.adresseherkschuleschreiben:LET
+an="An",zeilenzahladresse=7;ausgfelddruck(1):=text(an,druckbreite);
+druckzeileschreiben(ausgfelddruck(1));drucke(text(wert(fnrschname),
+druckbreite));drucke(text(wert(fnrschstrnr),druckbreite));drucke(text(wert(
+fnrschplzort),druckbreite));#FOR iFROM 1UPTO 3REP ausgfelddruck(1):=text(
+herkschuldaten(i),druckbreite);druckzeileschreiben(ausgfelddruck(1))PER ;#
+FOR iFROM 1UPTO anzleerzeilenREP ausgfelddruck(1):=text(niltext,druckbreite);
+druckzeileschreiben(ausgfelddruck(1))PER ;druckzeilenzahl:=druckzeilenzahl-
+zeilenzahladresse.festentextschreiben:textanschr:=sequentialfile(input,
+vordruckueberarbeitet);WHILE NOT eof(textanschr)REP getline(textanschr,
+ausgfelddruck(1));druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1
+PER ;FOR iFROM 1UPTO anzleerzeilenREP ausgfelddruck(1):=text(niltext,
+druckbreite);druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1PER .
+unterschriftschreiben:LET schluessel="Schulleiter",klammer1="(",klammer2=")",
+anzblank=5;TEXT VAR schulleiter;schulleiter:=schulkenndatum("Schulleiter");
+ausgfelddruck(1):=text(varanzblank*blank+klammer1+schulleiter+klammer2,
+druckbreite);druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1;
+ausgfelddruck(1):=text(anzblank*blank+schluessel,druckbreite);
+druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1;FOR iFROM 1UPTO
+anzleerzeilenREP ausgfelddruck(1):=text(niltext,druckbreite);
+druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1PER .varanzblank:
+anzblank-((length(schulleiter)+2-length(schluessel))DIV 2).#
+dbwertezurueckholen:FOR iFROM 1UPTO 3REP dbwert(merker(i),i)PER .#END PROC
+anherkliueberschriftdrucken;PROC drucke(TEXT CONST drucktext):ausgfelddruck(1
+):=drucktext;druckzeileschreiben(ausgfelddruck(1))ENDPROC drucke;PROC
+schuelerdatendrucken(INT VAR zeilenzaehler):schuelerdatenholen;
+schuelerdatenaufbereiten;zeilenzaehlerINCR ausgfeldlaenge;
+schuelerdatenindruckdatei.END PROC schuelerdatendrucken;PROC
+schuelerdatenholen:schuelername:=wert(fnrsufamnames);schuelerrufname:=wert(
+fnrsurufnames);schuelernamenszus:=wert(fnrsunamenszusatzs);schuelergebdat:=
+wert(fnrsugebdatums);schulkuerzel:=wert(fnrsuskennlschule);letzteklasse:=wert
+(fnrsuklasselschule).END PROC schuelerdatenholen;PROC
+schuelerdatenaufbereiten:LET restjgst5=" :",restjgst11=" : _________";
+schreibenamegebdatletzteklasse.schreibenamegebdatletzteklasse:spaltenweise(
+schuelernameaufber);spaltenweise(schuelergebdat);IF jgst5THEN spaltenweise(
+blank+letzteklasseaufber+restjgst5)ELSE spaltenweise(blank+letzteklasseaufber
++restjgst11)FI ;ausgfelddruck(1):=zeile.schuelernameaufber:schuelername+komma
++blank+schuelerrufname+blank+schuelernamenszus.letzteklasseaufber:IF
+letzteklasse=niltextTHEN 3*blankELSE ((3-length(letzteklasse))*blank)+
+letzteklasseFI .END PROC schuelerdatenaufbereiten;PROC
+schuelerdatenindruckdatei:druckzeileschreiben(ausgfelddruck(1)).END PROC
+schuelerdatenindruckdatei;PROC bestandendesimulierenbeischulwechsel:IF
+bestandendeTHEN neueherkschule:=FALSE ELSE neueherkschule:=schulkuerzel<>wert
+(fnrsuskennlschule);IF neueherkschuleTHEN setzebestandende(TRUE )FI ;FI .END
+PROC bestandendesimulierenbeischulwechsel;END PACKET anherklisten;
+
diff --git a/app/schulis/2.2.1/src/1.listen.gebu b/app/schulis/2.2.1/src/1.listen.gebu
new file mode 100644
index 0000000..a025331
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.gebu
@@ -0,0 +1,125 @@
+PACKET geburtslistenDEFINES gebulispezielleteile:LET niltext="",blank=" ",
+mittestrich="-",null=0,komma=",",ueberschriftenzeilen=2,klas="Klasse",name=
+"Name, Rufname",gebtag="Geburtstag",spalte1breite=7,spalte3breite=12,
+anzspaltentrenner=2,ausgkopflaenge=2,ausgfeldlaenge=1,AUSGFELD =ROW
+ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,gebulieingangsmaske=
+"ms liste gebjahr eingang",gebulianfpos=2,mnrbearbeitetwird=100;INT CONST
+spalte2bildbreite:=bildbreite-anzspaltentrenner-spalte1breite-spalte3breite;
+INT VAR spalte2druckbreite,druckzeilenzahl,bildanf,eingabestatus,
+aktuelleindexnr;TEXT VAR gebjahreingang,schuelername,schuelerrufname,
+schuelernamenszus,schuelergebdat,klasse,alteklasse,druckstrich,bearbeitetwird
+,startjahr,startgeschl;TEXT CONST bildstrich:=bildbreite*mittestrich;
+AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR weibl,maennl,
+ersteraufbildschirm,klassegeaendert:=FALSE ;#DBMASKE VAR sortiertnachgebjahr,
+sortiertnachgebjahrgeschl,sortiertnachklassename;#BOOL PROC multistopstatus:
+BOOL VAR b:=wert(fnrsustatuss)="ls";setzebestandende(NOT b);bENDPROC
+multistopstatus;BOOL PROC multistopdrucken:BOOL VAR b:=multistopmitdbstatus(
+FALSE );setzebestandende(NOT b);bENDPROC multistopdrucken;BOOL PROC
+multistopmitdbstatusdrucken:BOOL VAR b:=multistopmitdbstatus(TRUE );
+setzebestandende(NOT b);bENDPROC multistopmitdbstatusdrucken;BOOL PROC
+multistop:multistopmitdbstatus(FALSE )ENDPROC multistop;BOOL PROC
+multistopmitdbstatus:multistopmitdbstatus(TRUE )ENDPROC multistopmitdbstatus;
+BOOL PROC multistopmitdbstatus(BOOL CONST mitdbstatus):BOOL VAR b:=FALSE ;IF
+wert(fnrsustatuss)="ls"THEN IF startgeschl<>""THEN IF wert(fnrsugeschlechts)=
+startgeschlTHEN b:=(subtext(wert(fnrsugebdatums),7,8)=gebjahreingang)ELSE b:=
+FALSE FI ELSE b:=(subtext(wert(fnrsugebdatums),7,8)=gebjahreingang);IF
+mitdbstatusTHEN b:=bCAND (dbstatus=ok)FI FI ;FI ;bEND PROC
+multistopmitdbstatus;PROC gebulispezielleteile(INT CONST nr):SELECT nrOF
+CASE 1:gebulidialogvorbereitenCASE 2:gebulieingabenrichtigCASE 3:
+gebulilistenvorbereitenCASE 4:gebulidruckvorbereitenCASE 5:gebuliseitedrucken
+CASE 6:gebulibildschirmvorbereitenCASE 7:gebuliseitezeigenENDSELECT .END
+PROC gebulispezielleteile;PROC gebulidialogvorbereiten:setzeanfangswerte(
+gebulieingangsmaske,gebulianfpos)END PROC gebulidialogvorbereiten;PROC
+gebulieingabenrichtig:LET fnrgebjahr=2,fnrmaennlich=3,fnrweiblich=4,
+fnrausgdrucker=5,fnrausgbild=6;standardpruefe(2,fnrgebjahr,null,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest
+(FALSE )ELSE waspruefen;wohinpruefen;IF eingabestatus<>0THEN infeld(
+eingabestatus);setzeeingabetest(FALSE )ELSE setzegeburtsjahr;
+setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);setzeeingabetest
+(TRUE )FI FI .waspruefen:weibl:=(standardmaskenfeld(fnrmaennlich)=niltext)
+AND (standardmaskenfeld(fnrweiblich)<>niltext);maennl:=(standardmaskenfeld(
+fnrweiblich)=niltext)AND (standardmaskenfeld(fnrmaennlich)<>niltext).
+wohinpruefen:standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
+eingabestatus).setzegeburtsjahr:gebjahreingang:=standardmaskenfeld(fnrgebjahr
+);IF int(gebjahreingang)<10THEN gebjahreingang:=text(null)+text(int(
+gebjahreingang))FI .END PROC gebulieingabenrichtig;PROC
+gebulilistenvorbereiten:#bestanderstellen(PROC
+bestandgeburtsjahrgaengeerstellen).#BOOL VAR b:=FALSE ;startjahr:="01.01."+
+gebjahreingang;setzescanendewert("01.01."+text(int(gebjahreingang)+1));
+setzescanstartwert(startjahr);IF weiblTHEN startgeschl:="w";ELIF maennlTHEN
+startgeschl:="m";ELSE startgeschl:="";FI ;IF startgeschl=""THEN
+aktuelleindexnr:=ixsustatgebELSE aktuelleindexnr:=ixsustatgeschlgeb;FI ;
+inittupel(dnrschueler);initobli(14);parsenooffields(19);setzeidentiwert("");
+putdatumwert(fnrsugebdatums,startjahr);putwert(fnrsugeschlechts,startgeschl);
+putwert(fnrsustatuss,"ls");dbstatus(ok);objektlistestarten(aktuelleindexnr,""
+,fnrsugebdatums,TRUE ,b);setzebestandende(NOT multistopmitdbstatus)END PROC
+gebulilistenvorbereiten;PROC gebulibildschirmvorbereiten:LET fnrausganf=2,
+gebuliueberschriftneu="Schülerliste Geburtsjahrgang 19";INT VAR i;
+standardkopfmaskeaktualisieren(gebuliueberschriftneu+gebjahreingang);
+initspalten;setzespaltenbreite(spalte1breite);setzespaltenbreite(
+spalte2bildbreite);setzespaltenbreite(spalte3breite);initausgabekopf(
+bildstrich);bildanf:=fnrausganf;FOR iFROM 1UPTO ausgkopflaengeREPEAT ausgkopf
+(i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext;#
+setzenderhilfsgroessenfuersblaettern(min(bildblocklaenge,maxblocklaenge),
+bildsatzzahl);#setzebildanfangsposition(bildanf).END PROC
+gebulibildschirmvorbereiten;PROC gebuliseitezeigen:ersteraufbildschirm:=TRUE
+;blaettern(PROC (INT CONST )schuelerzeigen,aktion,TRUE ,TRUE ,BOOL PROC
+multistop).END PROC gebuliseitezeigen;PROC schuelerzeigen(INT CONST x):
+schuelerholen1;schuelerholen2;IF ersteraufbildschirmTHEN klassegeaendert:=
+TRUE ;ersteraufbildschirm:=FALSE FI ;schueleraufbereiten;
+schueleraufbildschirm.END PROC schuelerzeigen;PROC schueleraufbildschirm:INT
+VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;
+erhoeheausgabeposumeinsEND REPEAT .END PROC schueleraufbildschirm;PROC
+gebulidruckvorbereiten:LET uebteil1="Liste der im Jahr 19",uebteil2=
+" geborenen ",uebteil31="weiblichen ",uebteil32="männlichen ",uebteil4=
+"Schüler";TEXT VAR ueberschrift;klasse:=niltext;druckvorbereiten;
+variablenfuerdrucksetzen;ueberschriftvorbereitendruck;initdruckkopf(
+ueberschrift);initspalten;setzespaltenbreite(spalte1breite);
+setzespaltenbreite(spalte2druckbreite);setzespaltenbreite(spalte3breite);
+initausgabekopf(druckstrich);holemeldungen;#putwert(dateinr(primdatid(
+aktuelleindexnr))+1,"");putwert(fnrsugebdatums,"01.01."+gebjahreingang);
+dbstatus(ok);#inittupel(dnrschueler);putwert(fnrsustatuss,"ls");
+aktuelleindexnr:=ixsustatjgstzug;BOOL VAR b;objektlistestarten(
+aktuelleindexnr,"",fnrsusgrpzugtut,TRUE ,b);lesenvorbereitendruck(PROC (INT
+CONST ,BOOL PROC ,INT VAR )scanforward,#BOOL PROC multistopmitdbstatusdrucken
+#BOOL PROC multistopstatus).variablenfuerdrucksetzen:druckstrich:=druckbreite
+*mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner-spalte1breite-
+spalte3breite;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-
+ausgkopflaenge.ueberschriftvorbereitendruck:ueberschrift:=uebteil1+
+gebjahreingang+uebteil2;IF weiblTHEN ueberschrift:=ueberschrift+uebteil31
+ELSE IF maennlTHEN ueberschrift:=ueberschrift+uebteil32FI ;FI ;ueberschrift:=
+ueberschrift+uebteil4.holemeldungen:meldungstext(mnrbearbeitetwird,
+bearbeitetwird).END PROC gebulidruckvorbereiten;PROC gebuliseitedrucken:
+gebuliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdrucken,
+druckzeilenzahl,ausgfeldlaenge,#BOOL PROC multistopdrucken#BOOL PROC
+multistopstatus);seitenwechsel.END PROC gebuliseitedrucken;PROC
+gebuliueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO
+ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC
+gebuliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler):LET
+markiert="#";schuelerholen1;evtleave;schuelerholen2;ggflmeldungklasse;IF
+zeilenzaehler=nullTHEN klassegeaendert:=TRUE FI ;IF klassegeaendertTHEN
+leerzeileindruckdateiFI ;schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge
+;schuelerindruckdatei.evtleave:IF jahrstimmtnichtCOR geschlechtstimmtnicht
+THEN LEAVE schuelerdruckenFI .jahrstimmtnicht:subtext(wert(fnrsugebdatums),7,
+8)<>gebjahreingang.geschlechtstimmtnicht:startgeschl<>""CAND wert(
+fnrsugeschlechts)<>startgeschl.ggflmeldungklasse:IF klassegeaendertTHEN
+meldungklasseFI .meldungklasse:standardmeldung(bearbeitetwird,klasse+markiert
+).leerzeileindruckdatei:ausgfeld(1):=text(blank,druckbreite);
+druckzeileschreiben(ausgfeld(1));zeilenzaehlerINCR 1.END PROC schuelerdrucken
+;PROC schuelerindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT
+druckzeileschreiben(ausgfeld(i))END REPEAT .END PROC schuelerindruckdatei;
+PROC initausgabekopf(TEXT CONST strich):spaltenweise(klas);spaltenweise(name)
+;spaltenweise(gebtag);ausgkopf(1):=zeile;ausgkopf(2):=strich;END PROC
+initausgabekopf;PROC schuelerholen1:schuelergebdat:=wert(fnrsugebdatums);
+schuelername:=wert(fnrsufamnames);schuelerrufname:=wert(fnrsurufnames);
+schuelernamenszus:=wert(fnrsunamenszusatzs);#alteklasse:=klasse;klasse:=wert(
+fnrsusgrpjgst)+blank+wert(fnrsusgrpzugtut);klassegeaendert:=alteklasse<>
+klasse.#END PROC schuelerholen1;PROC schuelerholen2:alteklasse:=klasse;klasse
+:=wert(fnrsusgrpjgst)+blank+wert(fnrsusgrpzugtut);klassegeaendert:=alteklasse
+<>klasse.END PROC schuelerholen2;PROC schueleraufbereiten:
+schreibeklassenamegebdat.schreibeklassenamegebdat:IF klassegeaendertTHEN
+spaltenweise(klasse)ELSE spaltenweise(blank)FI ;spaltenweise(
+schuelernameaufber);spaltenweise(schuelergebdat);ausgfeld(1):=zeile.
+schuelernameaufber:schuelername+komma+blank+schuelerrufname+blank+
+schuelernamenszus.END PROC schueleraufbereiten;END PACKET geburtslisten;
+
diff --git a/app/schulis/2.2.1/src/1.listen.gesamt b/app/schulis/2.2.1/src/1.listen.gesamt
new file mode 100644
index 0000000..2ec7ee7
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.gesamt
@@ -0,0 +1,106 @@
+PACKET gesamtlisteDEFINES geslispezielleteile:#LET dnrschueler=2,
+ixsustatfamrufgeb=254,stattnachfolgendemI ndexixsustat=252,fnrsufamnames=3,
+fnrsurufnames=4,fnrsustatuss=6,fnrsunamenszusatzs=21,fnrsugebdatums=5,
+fnrsuabgdats=16,fnrsusgrpjgst=7,fnrsusgrpzugtut=8;#LET niltext="",nildatum=
+"01.01.00",blank=" ",mittestrich="-",null=0,komma=",",kleina="a",stern="*",
+ueberschriftenzeilen=1,altervolljaehrig=18,spalte2breite=10,spalte3breite=9,
+anzspaltentrenner=2,spaltentrenner=":",ausgkopflaengebild=2,
+ausgkopflaengedruck=6,ausgfeldlaenge=1,AUSGKOPFBILD =ROW ausgkopflaengebild
+TEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengedruckTEXT ,AUSGFELD =ROW
+ausgfeldlaengeTEXT ,geslieingangsmaske="mu liste einfach eingang",geslianfpos
+=2,nname="Name, Rufname",gebdat=" Geb.Dat.",klasse="Jgst./Kl.";INT CONST
+spalte1bildbreite:=bildbreite-anzspaltentrenner-spalte2breite-spalte3breite;
+INT VAR spalte1druckbreite,druckzeilenzahl,bildanf,vergldatum,eingabestatus;
+TEXT VAR gesliueberschrift,schuelername,schuelerrufname,schuelernamenszus,
+schuelergebdat,schuelerabdat,schuelernameaufber,gebdataufber,klasseaufber,
+jahrgang,zug,anfbuchstabe,neueranfbuchstabe;TEXT VAR druckstrich;TEXT CONST
+bildstrich:=bildbreite*mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPFDRUCK VAR
+ausgkopfdruck;AUSGKOPFBILD VAR ausgkopfbild;PROC geslispezielleteile(INT
+CONST nr):SELECT nrOF CASE 1:geslidialogvorbereitenCASE 2:
+geslieingabenrichtigCASE 3:geslilistenvorbereitenCASE 4:geslidruckvorbereiten
+CASE 5:gesliseitedruckenCASE 6:geslibildschirmvorbereitenCASE 7:
+gesliseitezeigenENDSELECT .END PROC geslispezielleteile;PROC
+geslidialogvorbereiten:gesliueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(geslieingangsmaske,geslianfpos).END PROC
+geslidialogvorbereiten;PROC geslieingabenrichtig:LET fnrausgdrucker=2,
+fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest
+(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);
+setzeeingabetest(TRUE )FI .END PROC geslieingabenrichtig;PROC
+geslilistenvorbereiten:BOOL VAR b;setzespaltentrenner(spaltentrenner);
+vergldatum:=vergleichsdatum(altervolljaehrig);inittupel(dnrschueler);initobli
+(17);parsenooffields(21);setzeidentiwert("");putwert(fnrsustatuss,"ls");
+objektlistestarten(ixsustatfamrufgeb,"",fnrsufamnames,TRUE ,b);
+setzebestandende(NOT multistopCOR b)END PROC geslilistenvorbereiten;BOOL
+PROC multistop:wert(fnrsustatuss)="ls"ENDPROC multistop;BOOL PROC
+multistopdruck:BOOL VAR b:=multistop;setzebestandende(NOT b);bENDPROC
+multistopdruck;PROC geslibildschirmvorbereiten:LET fnrausganf=2;
+standardkopfmaskeaktualisieren(gesliueberschrift);initspalten;
+setzespaltenbreite(spalte1bildbreite);setzespaltenbreite(spalte2breite);
+setzespaltenbreite(spalte3breite);initausgabekopfbild;bildanf:=fnrausganf;
+INT VAR i;FOR iFROM 1UPTO ausgkopflaengebildREPEAT ausgkopfbild(i)IN bildanf;
+bildanfINCR 1END REPEAT ;setzebildanfangsposition(bildanf).END PROC
+geslibildschirmvorbereiten;PROC initausgabekopfbild:spaltenweise(nname);
+spaltenweise(gebdat);spaltenweise(klasse);ausgkopfbild(1):=zeile;ausgkopfbild
+(2):=bildstrich;END PROC initausgabekopfbild;PROC gesliseitezeigen:blaettern(
+PROC (INT CONST )schuelerzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop)END
+PROC gesliseitezeigen;BOOL PROC dummystop:#dbstatus<>ok#TRUE ENDPROC
+dummystop;PROC schuelerzeigen(INT CONST x):schuelerholen;schueleraufbereiten;
+schueleraufbildschirm;END PROC schuelerzeigen;PROC schueleraufbildschirm:INT
+VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;
+erhoeheausgabeposumeinsEND REPEAT .END PROC schueleraufbildschirm;PROC
+geslidruckvorbereiten:anfbuchstabe:=niltext;druckvorbereiten;
+variablenfuerdrucksetzen;inittupel(dnrschueler);putwert(fnrsustatuss,"ls");
+lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL
+PROC multistopdruck);initdruckkopf(zentriert(gesliueberschrift,druckbreite));
+initspalten;setzespaltenbreite(spalte1druckbreite);setzespaltenbreite(
+spalte2breite);setzespaltenbreite(spalte3breite);initausgabekopfdruck.
+variablenfuerdrucksetzen:druckstrich:=druckbreite*mittestrich;
+spalte1druckbreite:=druckbreite-anzspaltentrenner-spalte2breite-spalte3breite
+;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaengedruck.END
+PROC geslidruckvorbereiten;PROC initausgabekopfdruck:LET kommentar1=
+"Die abgemeldeten Schüler sind mit einem a vor Jgst./",kommentar2=
+"Kl. markiert,",kommentar3="die volljährigen Schüler mit einem * vor dem ",
+kommentar4="Geburtsdatum.";ausgkopfdruck(1):=text(kommentar1+kommentar2,
+druckbreite);ausgkopfdruck(2):=text(kommentar3+kommentar4,druckbreite);
+ausgkopfdruck(3):=text(niltext,druckbreite);ausgkopfdruck(4):=text(niltext,
+druckbreite);spaltenweise(nname);spaltenweise(gebdat);spaltenweise(klasse);
+ausgkopfdruck(5):=zeile;ausgkopfdruck(6):=druckstrich;END PROC
+initausgabekopfdruck;PROC gesliseitedrucken:gesliueberschriftdrucken;
+seitedrucken(PROC (INT VAR )schuelerdrucken,druckzeilenzahl,ausgfeldlaenge,
+BOOL PROC multistopdruck);seitenwechsel.END PROC gesliseitedrucken;PROC
+gesliueberschriftdrucken:druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO
+ausgkopflaengedruckREPEAT druckzeileschreiben(ausgkopfdruck[i])END REPEAT .
+END PROC gesliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler)
+:LET bearbeitetwerden=102,markiert="#";schuelerholen;ggflmeldunganfbuchstabe;
+schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge;schuelerindruckdatei.
+ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .
+anfbuchstabegeaendert:neueranfbuchstabe:=schuelernameSUB 1;anfbuchstabe<>
+neueranfbuchstabe.meldunganfbuchstabe:standardmeldung(bearbeitetwerden,
+neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC
+schuelerdrucken;PROC schuelerindruckdatei:druckzeileschreiben(ausgfeld(1)).
+END PROC schuelerindruckdatei;#PROC schuelerbestanderstellen(TEXT VAR aktbest
+,DBMASKE VAR nameklassegebdat):setzemaske(nameklassegebdat,
+"t c12 familienname/"+"t c12 rufname/"+"t c12 namenszusaetze(1)/"+
+"i c12 geburtsdatum/"+"i c12 abgangsdatum/"+"t c12 aktuelle schuelergruppe");
+aktbest:=bestand.END PROC schuelerbestanderstellen;#PROC schueleraufbereiten:
+schuelervorbereiten;schreibenamegebdatklasse.schreibenamegebdatklasse:
+ausgfeld(1):=zeile.END PROC schueleraufbereiten;PROC schuelervorbereiten:
+schuelernamevorbereiten;gebdatvorbereiten;klassevorbereiten;zeilefuellen.
+schuelernamevorbereiten:schuelernameaufber:=niltext;IF schuelernamenszus<>
+niltextTHEN schuelernameaufber:=schuelernamenszus+blankFI ;schuelernameaufber
+:=schuelernameaufber+schuelername+komma+blank+schuelerrufname.
+gebdatvorbereiten:IF (schuelergebdat<>niltext)THEN IF volljaehrig(datum(
+schuelergebdat))THEN gebdataufber:=sternELSE gebdataufber:=blankFI ;
+gebdataufber:=gebdataufber+blank+schuelergebdatELSE gebdataufber:=niltextFI .
+klassevorbereiten:IF (schuelerabdat<>nildatum)THEN klasseaufber:=kleinaELSE
+klasseaufber:=blankFI ;klasseaufber:=klasseaufber+blank+jahrgang+blank+zug.
+zeilefuellen:spaltenweise(schuelernameaufber);spaltenweise(gebdataufber);
+spaltenweise(klasseaufber).END PROC schuelervorbereiten;BOOL PROC volljaehrig
+(INT CONST geburtstag):geburtstag<=vergldatumEND PROC volljaehrig;PROC
+schuelerholen:schuelername:=wert(fnrsufamnames);schuelerrufname:=wert(
+fnrsurufnames);schuelernamenszus:=wert(fnrsunamenszusatzs);schuelergebdat:=
+wert(fnrsugebdatums);schuelerabdat:=wert(fnrsuabgdats);jahrgang:=wert(
+fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut);END PROC schuelerholen;END PACKET
+gesamtliste;
+
diff --git a/app/schulis/2.2.1/src/1.listen.klassen b/app/schulis/2.2.1/src/1.listen.klassen
new file mode 100644
index 0000000..7b4d39b
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.klassen
@@ -0,0 +1,157 @@
+PACKET klassenlistenDEFINES klalispezielleteile:LET niltext="",blank=" ",
+mittestrich="-",null=0,komma=",",stern="*",ueb1teil1="Klassenliste",ueb1teil2
+=" für Klasse ",ueb1teil3="Klassenlehrer: ",ueb2teil1="Tutorenkursliste",
+ueb2teil21=" für Jahrgangsstufe ",ueb2teil22=" für den Kurs ",ueb2teil3=
+"Tutor: ",ueb3="n der Jahrgangsstufe ",ueberschriftenzeilen=2,
+spalte1druckbreite=3,spalte2bildbreite=7,anzspaltentrenner=1,ausgkopflaenge=2
+,ausgfeldlaenge=1,AUSGFELDDRUCK =ROW ausgfeldlaengeTEXT ,AUSGFELDBILD =ROW
+ausgfeldlaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ,AUSGKOPFBILD =ROW
+ausgkopflaengeTEXT ,klalieingangsmaske="ms liste klassen eingang",klalianfpos
+=2,nr="Nr.",name="Name, Rufname",sternvolljaehrig=
+" ( * entspricht volljährig )",klasse="Klasse",altervolljaehrig=18,
+mnrbearbeitetwird=100,mnrlistewirdgedruckt=58,mnrauswahlnichtsinnvoll=56;INT
+CONST spalte1bildbreite:=bildbreite-anzspaltentrenner-spalte2bildbreite;INT
+VAR spalte2druckbreite,druckzeilenzahlmax,druckzeilenzahl,bildanf,zaehler,
+vergldatum,aktuelleindexnr,eingabestatus;TEXT VAR klaliueberschrift,
+schuelername,schuelerrufname,schuelernamenszus,schuelergebdat,
+schuelernameaufber,zaehleraufber,ueberschrift1,ueberschrift2,lehrer,jahrgang,
+zug,startjgst,startzug,bearbeitetwird,listewirdgedruckt,auswahlnichtsinnvoll;
+TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite*mittestrich;
+AUSGFELDDRUCK VAR ausgfelddruck;AUSGFELDBILD VAR ausgfeldbild;AUSGKOPFDRUCK
+VAR ausgkopfdruck;AUSGKOPFBILD VAR ausgkopfbild;BOOL VAR einjahrgang,alle,
+voll,neueklasse;BOOL PROC multistop:BOOL VAR b;IF startjgst<>""THEN IF
+einjahrgangTHEN b:=wert(fnrsusgrpjgst)=startjgst;ELSE b:=wert(fnrsusgrpjgst)=
+startjgstAND wert(fnrsusgrpzugtut)=startzug;FI ELSE b:=wert(fnrsustatuss)=
+"ls";FI ;bEND PROC multistop;BOOL PROC multistopsim:BOOL VAR b:=multistop;
+setzebestandende(NOT b);bENDPROC multistopsim;PROC klalispezielleteile(INT
+CONST nr):SELECT nrOF CASE 1:klalidialogvorbereitenCASE 2:
+klalieingabenrichtigCASE 3:klalilistenvorbereitenCASE 4:klalidruckvorbereiten
+CASE 5:klaliseitedruckenCASE 6:klalibildschirmvorbereitenCASE 7:
+klaliseitezeigenENDSELECT .END PROC klalispezielleteile;PROC
+klalidialogvorbereiten:klaliueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(klalieingangsmaske,klalianfpos).END PROC
+klalidialogvorbereiten;PROC klalieingabenrichtig:LET fnrjgst=2,fnrzug=3,
+fnrvoll=4,fnrausgdrucker=5,fnrausgbild=6;alle:=FALSE ;einjahrgang:=FALSE ;
+voll:=FALSE ;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest
+(FALSE )ELSE zug:=standardmaskenfeld(fnrzug);jahrgang:=standardmaskenfeld(
+fnrjgst);IF standardmaskenfeld(fnrjgst)=niltextTHEN IF zug=niltextTHEN alle:=
+TRUE ;voll:=(standardmaskenfeld(fnrvoll)<>niltext);setzeausgabedrucker(
+standardmaskenfeld(fnrausgbild)=niltext);setzeeingabetest(TRUE )ELSE
+meldefehler;infeld(fnrzug);setzeeingabetest(FALSE )FI ELSE standardpruefe(3,
+fnrjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(
+eingabestatus);setzeeingabetest(FALSE )ELSE jahrgang:=zweistellig(
+standardmaskenfeld(fnrjgst));einjahrgang:=(zug=niltext);voll:=(
+standardmaskenfeld(fnrvoll)<>niltext);setzeausgabedrucker(standardmaskenfeld(
+fnrausgbild)=niltext);setzeeingabetest(TRUE )FI FI FI .meldefehler:
+meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung(
+auswahlnichtsinnvoll,niltext).END PROC klalieingabenrichtig;PROC
+klalilistenvorbereiten:BOOL VAR b:=FALSE ;startjgst:=jahrgang;startzug:=zug;
+neueklasse:=FALSE ;aktuelleindexnr:=ixsustatjgstzug;inittupel(dnrschueler);
+initobli(17);parsenooffields(19);setzeidentiwert("");putwert(fnrsustatuss,
+"ls");putwert(fnrsusgrpjgst,startjgst);putwert(fnrsusgrpzugtut,startzug);
+vergldatum:=vergleichsdatum(altervolljaehrig);#objektlistestarten(
+aktuelleindexnr,"",fnrsustatuss,TRUE ,b);#objektlistestarten(aktuelleindexnr,
+"",staticfield,TRUE ,b);setzebestandende(NOT multistopCOR b).staticfield:IF
+startjgst=niltextTHEN fnrsusgrpjgstELSE IF startzug=niltextTHEN
+fnrsusgrpzugtutELSE dnrschueler+1FI FI .END PROC klalilistenvorbereiten;PROC
+klalibildschirmvorbereiten:LET fnrausganf=2;ueberschriftvorbereitenbild;
+standardkopfmaskeaktualisieren(ueberschrift1);initspalten;initausgabekopfbild
+;bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT
+ausgkopfbild(i)IN bildanf;bildanfINCR 1END REPEAT ;setzebildanfangsposition(
+bildanf).END PROC klalibildschirmvorbereiten;PROC ueberschriftvorbereitenbild
+:LET aufein="",aufaus=" ";IF alleTHEN ueberschrift1:=klaliueberschriftELSE
+IF einjahrgangTHEN IF int(jahrgang)<11THEN ueberschrift1:=ueb1teil1ELSE
+ueberschrift1:=ueb2teil1FI ;ueberschrift1:=ueberschrift1+ueb3+aufein+jahrgang
++aufausELSE IF int(jahrgang)<11THEN ueberschrift1:=ueb1teil1+ueb1teil2ELSE
+ueberschrift1:=ueb2teil1+ueb2teil22FI ;ueberschrift1:=ueberschrift1+aufein+
+jahrgang+blank+wert(fnrsusgrpzugtut)+aufausFI FI ;END PROC
+ueberschriftvorbereitenbild;PROC initausgabekopfbild:IF einjahrgangOR alle
+THEN hilfsfeldervorbelegen;ausgkopfbild(1):=zeileELSE ausgkopfbild(1):=text(
+name,bildbreite)FI ;ausgkopfbild(2):=bildstrich.hilfsfeldervorbelegen:
+setzespaltenbreite(spalte1bildbreite);setzespaltenbreite(spalte2bildbreite);
+IF vollTHEN spaltenweise(name+sternvolljaehrig)ELSE spaltenweise(name)FI ;
+spaltenweise(klasse).END PROC initausgabekopfbild;PROC klaliseitezeigen:
+blaettern(PROC (INT CONST )schuelerdatenzeigen,aktion,TRUE ,TRUE ,BOOL PROC
+multistop)END PROC klaliseitezeigen;PROC schuelerdatenzeigen(INT CONST x):
+schuelerdatenholen;schuelerdatenaufbereitenbild;schuelerdatenaufbildschirm.
+END PROC schuelerdatenzeigen;PROC schuelerdatenaufbereitenbild:
+schuelernameaufbereiten;IF alleOR einjahrgangTHEN schreibenamerufnameklasse
+ELSE schreibenamerufnameFI .schreibenamerufnameklasse:spaltenweise(
+schuelernameaufber);spaltenweise(jahrgang+blank+wert(fnrsusgrpzugtut));
+ausgfeldbild(1):=zeile.schreibenamerufname:ausgfeldbild(1):=text(
+schuelernameaufber,bildbreite).END PROC schuelerdatenaufbereitenbild;PROC
+schuelerdatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT
+ausgfeldbild(i)IN ausgabepos;erhoeheausgabeposumeinsEND REPEAT .END PROC
+schuelerdatenaufbildschirm;PROC klalidruckvorbereiten:zaehler:=null;
+neueklasse:=TRUE ;druckvorbereiten;variablenfuerdrucksetzen;druckzeilenzahl:=
+druckzeilenzahlmax;IF vollTHEN druckzeilenzahl:=druckzeilenzahl-2FI ;
+holemeldung;inittupel(dnrschueler);putwert(fnrsusgrpjgst,startjgst);putwert(
+fnrsusgrpzugtut,startzug);putwert(fnrsustatuss,"ls");lesenvorbereitendruck(
+PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim);
+ueberschriftvorbereitendruck;initdruckkopf(ueberschrift1,ueberschrift2);
+initspalten;initausgabekopfdruck.variablenfuerdrucksetzen:druckstrich:=
+druckbreite*mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner-
+spalte1druckbreite;druckzeilenzahlmax:=drucklaenge(ueberschriftenzeilen)-
+ausgkopflaenge.holemeldung:meldungstext(mnrbearbeitetwird,bearbeitetwird).
+END PROC klalidruckvorbereiten;PROC ueberschriftvorbereitendruck:IF int(
+jahrgang)<11THEN ueberschrift1:=ueb1teil1+ueb1teil2+wert(fnrsusgrpjgst)+blank
++wert(fnrsusgrpzugtut);ueberschrift2:=ueb1teil3ELSE ueberschrift1:=ueb2teil1+
+ueb2teil21+jahrgang;ueberschrift2:=ueb2teil3FI ;klassenlehrer(lehrer,jahrgang
+,wert(fnrsusgrpzugtut));ueberschrift2:=ueberschrift2+lehrer;END PROC
+ueberschriftvorbereitendruck;PROC klassenlehrer(TEXT VAR lehrer,TEXT CONST
+jahrgang,TEXT CONST zug):putwert(fnrsgrpsj,schulkenndatum("Schuljahr"));
+putwert(fnrsgrphj,schulkenndatum("Schulhalbjahr"));putwert(fnrsgrpjgst,
+jahrgang);putwert(fnrsgrpkennung,zug);search(dnraktschuelergruppen,TRUE );IF
+dbstatus=okTHEN putwert(fnrlparaphe,wert(fnrsgrplehrer));search(dnrlehrer,
+TRUE );IF dbstatus=okTHEN lehrer:=wert(fnrlfamname)ELSE lehrer:=""FI ;ELSE
+lehrer:=""FI END PROC klassenlehrer;PROC initausgabekopfdruck:
+hilfsfeldervorbelegen;ausgkopfdruck(1):=zeile;ausgkopfdruck(2):=druckstrich.
+hilfsfeldervorbelegen:setzespaltenbreite(spalte1druckbreite);
+setzespaltenbreite(spalte2druckbreite);spaltenweise(nr);spaltenweise(name).
+END PROC initausgabekopfdruck;PROC klaliseitedrucken:LET kommentar=
+"* Schüler ist am Tag der Listenerstellung volljährig";
+klaliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdatendrucken,
+druckzeilenzahl,ausgfeldlaenge,PROC bestandendesimulierenbeiklassenwechsel,
+BOOL PROC multistopsim);ggflkommentarzeile;IF neueklasseTHEN
+simuliertesendezuruecknehmen;neuelistevorbereitenELSE seitenwechselFI .
+ggflkommentarzeile:IF vollTHEN kommentarzeiledruckenFI .kommentarzeiledrucken
+:ausgfelddruck(1):=text(niltext,druckbreite);druckzeileschreiben(
+ausgfelddruck(1));ausgfelddruck(1):=text(kommentar,druckbreite);
+druckzeileschreiben(ausgfelddruck(1)).simuliertesendezuruecknehmen:
+setzebestandende(FALSE ).neuelistevorbereiten:meldelistewirdgedruckt;
+drucknachbereiten;druckvorbereiten;zaehler:=null;schuelerdatenholen;
+ueberschriftvorbereitendruck;initdruckkopf(ueberschrift1,ueberschrift2).
+meldelistewirdgedruckt:meldungstext(mnrlistewirdgedruckt,listewirdgedruckt);
+standardmeldung(listewirdgedruckt,niltext).END PROC klaliseitedrucken;PROC
+klaliueberschriftdrucken:druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO
+ausgkopflaengeREPEAT druckzeileschreiben(ausgkopfdruck(i))END REPEAT .END
+PROC klaliueberschriftdrucken;PROC schuelerdatendrucken(INT VAR zeilenzaehler
+):LET markiert="#";schuelerdatenholen;ggflmeldungklasse;zaehlerINCR 1;
+schuelerdatenaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge;
+schuelerdatenindruckdatei.ggflmeldungklasse:IF zaehler=nullTHEN
+standardmeldung(bearbeitetwird,jahrgang+blank+zug+markiert)FI .END PROC
+schuelerdatendrucken;PROC schuelerdatenaufbereitendruck:zaehleraufbereiten;
+schuelernameaufbereiten;schreibenrnamerufname.zaehleraufbereiten:IF zaehler<
+10THEN zaehleraufber:=blankELSE zaehleraufber:=niltextFI ;zaehleraufber:=
+zaehleraufber+text(zaehler).schreibenrnamerufname:spaltenweise(zaehleraufber)
+;spaltenweise(schuelernameaufber);ausgfelddruck(1):=zeile;END PROC
+schuelerdatenaufbereitendruck;PROC schuelerdatenindruckdatei:
+druckzeileschreiben(ausgfelddruck(1)).END PROC schuelerdatenindruckdatei;
+PROC bestandendesimulierenbeiklassenwechsel:IF bestandendeTHEN neueklasse:=
+FALSE ELSE nochklassezubearbeiten;IF neueklasseTHEN setzebestandende(TRUE )
+FI ;FI .nochklassezubearbeiten:neueklasse:=zug<>wert(fnrsusgrpzugtut);IF alle
+THEN neueklasse:=neueklasseOR (int(jahrgang)<>int(wert(fnrsusgrpjgst)))FI .
+END PROC bestandendesimulierenbeiklassenwechsel;PROC schuelernameaufbereiten:
+schuelernameaufber:=niltext;IF schuelernamenszus<>niltextTHEN
+schuelernameaufber:=schuelernamenszus+blankFI ;schuelernameaufber:=
+schuelernameaufber+schuelername+komma+blank+schuelerrufname;IF vollCAND (
+schuelergebdat<>niltext)CAND volljaehrig(datum(schuelergebdat))THEN
+schuelernameaufber:=schuelernameaufber+blank+sternFI ;END PROC
+schuelernameaufbereiten;BOOL PROC volljaehrig(INT CONST geburtstag):
+geburtstag<=vergldatumEND PROC volljaehrig;PROC schuelerdatenholen:
+schuelername:=wert(fnrsufamnames);schuelerrufname:=wert(fnrsurufnames);
+schuelernamenszus:=wert(fnrsunamenszusatzs);schuelergebdat:=wert(
+fnrsugebdatums);jahrgang:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut).END
+PROC schuelerdatenholen;END PACKET klassenlisten;
+
diff --git a/app/schulis/2.2.1/src/1.listen.klassenbuch b/app/schulis/2.2.1/src/1.listen.klassenbuch
new file mode 100644
index 0000000..e0c2386
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.klassenbuch
@@ -0,0 +1,237 @@
+PACKET klassenbuchlistenDEFINES klabulispezielleteile:LET nildatumdb=
+"01.01.00",niltext="",blank=" ",mittestrich="-",null=0,slspalte3breite=16,
+slanzspaltentrenner=2,ausgkopflaenge=3,ausgfeldlaenge=3,maxanzproseite=50,
+AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,SPEICHER
+=ROW maxanzproseiteTEXT ,klabulieingangsmaske="ms liste klabuch eingang",
+klabulianfpos=2,#dnrschueler=2,fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums
+=5,fnrsustatuss=6,fnrsusgrpjgst=7,fnrsusgrpzugtut=8,fnrsugeschlechts=12,
+fnrsunamenszusatzs=21,fnrsustrnrs=24,fnrsuplzorts=25,dbiplz=--,fnrsutelnrs=26
+,fnrsutidiffdaten=52,dnrdiffdaten=53,fnrddreliunter=67,fnrddreliunteranmeld=
+69,fnrddreliunterabmeld=68,fnrddkunstmusik=70,fnrddfach091a=71,fnrddfach091b=
+72,fnrddfach092a=73,fnrddfach092b=74,fnrddfach101a=75,fnrddfach101b=76,
+fnrddfach102a=77,fnrddfach102b=78,fnrhjdfamnames=89,fnrhjdrufnames=90,
+fnrhjdgebdats=91,fnrhjdhj=93,fnrhjdjgst=94,fnrhjdfach=113,fnrhjdkursart=114,
+dnrfaecher=141,fnrffach=142,fnrffachbez=143,ixhjdfamrufgebjgsthj=276,
+ixsustatjgstzug=255,#mnrlistewirdgedruckt=58,mnrbearbeitetwird=100,
+mnrauswahlnichtsinnvoll=56;INT VAR slspalte1breite,slspalte2breite,
+druckzeilenzahlgrund,druckzeilenzahl,druckzeilenzahlrest,zaehler,anzzaehler,
+indexspeicher,eingabestatus,aktuelleindexnr;TEXT VAR vordruck,
+vordruckueberarbsl,vordruckueberarbsr,klabuliueberschrift,
+auswahlnichtsinnvoll,listewirdgedruckt,bearbeitetwird,startjahr,startzug,
+schuelername,schuelerrufname,schuelernamenszus,jahrgang,zug,schuelerstrasse,
+schuelerort,schuelertelefon,schuelergebdat,schuelergeschlecht,schuelerreliunt
+,schuelersprachen,schuelermusfach,schuelerwpffach,schuelerkursfachbez,
+schuelerkursartbez,zaehleraufber,lehrer,puffer1,puffer2,druckstrich;AUSGFELD
+VAR ausgfeld;AUSGKOPF VAR slausgkopf,srausgkopf;SPEICHER VAR speicher;FILE
+VAR f,g;BOOL VAR einjahrgang,alle,elementsek1,neueklasse:=FALSE ;BOOL PROC
+multistopsim:BOOL VAR b:=FALSE ;IF wert(fnrsustatuss)="ls"THEN IF startjahr<>
+""THEN b:=wert(fnrsusgrpjgst)=startjahr;IF bCAND startzug<>""THEN b:=wert(
+fnrsusgrpzugtut)=startzugFI ELSE #b:=dbstatus=ok;#b:=wert(fnrsustatuss)="ls"
+FI ;FI ;setzebestandende(NOT b);bEND PROC multistopsim;PROC
+klabulispezielleteile(INT CONST nr):SELECT nrOF CASE 1:
+klabulidialogvorbereiten;CASE 2:klabulieingabenrichtig;CASE 3:
+klabulilistenvorbereiten;CASE 4:klabulidruckvorbereiten;CASE 5:
+klabuliseitedrucken;ENDSELECT .END PROC klabulispezielleteile;PROC
+klabulidialogvorbereiten:klabuliueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(klabulieingangsmaske,klabulianfpos).END PROC
+klabulidialogvorbereiten;PROC klabulieingabenrichtig:LET fnrjgst=2,fnrzug=3;
+alle:=FALSE ;einjahrgang:=FALSE ;reinitparsing;zug:=standardmaskenfeld(fnrzug
+);jahrgang:=standardmaskenfeld(fnrjgst);IF standardmaskenfeld(fnrjgst)=
+niltextTHEN IF zug=niltextTHEN alle:=TRUE ;setzeausgabedrucker(TRUE );
+setzeeingabetest(TRUE )ELSE meldefehler;infeld(fnrzug);setzeeingabetest(
+FALSE )FI ELSE standardpruefe(3,fnrjgst,5,13,niltext,eingabestatus);IF
+eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE
+jahrgang:=zweistellig(standardmaskenfeld(fnrjgst));einjahrgang:=(zug=niltext)
+;setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )FI FI .meldefehler:
+meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung(
+auswahlnichtsinnvoll,niltext).END PROC klabulieingabenrichtig;PROC
+klabulilistenvorbereiten:BOOL VAR b;startjahr:=jahrgang;startzug:=zug;
+aktuelleindexnr:=ixsustatjgstzug;inittupel(dnrschueler);initobli(9);
+setzeidentiwert("");putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut,
+startzug);putwert(fnrsustatuss,"ls");#objektlistestarten(aktuelleindexnr,"",
+fnrsusgrpjgst,TRUE ,b);#objektlistestarten(aktuelleindexnr,"",fnrsustatuss,
+TRUE ,b);setzebestandende(NOT multistopsim)END PROC klabulilistenvorbereiten;
+PROC klabulidruckvorbereiten:LET vordr="vordruck klassenbuchliste",manager=
+"anschreiben server";setzemitseitennummern(FALSE );zaehler:=null;neueklasse:=
+TRUE ;druckvorbereiten;variablenfuerdrucksetzen;holemeldungen;inittupel(
+dnrschueler);putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut,
+startzug);putwert(fnrsustatuss,"ls");lesenvorbereitendruck(PROC (INT CONST ,
+BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim);
+vordruckvommanagerholen;ueberschriftenvorbereiten;initspalten;
+ausgabekoepfevorbereiten;ausgfeld(3):=druckstrich.holemeldungen:meldungstext(
+mnrbearbeitetwird,bearbeitetwird).variablenfuerdrucksetzen:druckstrich:=
+druckbreite*mittestrich;slspalte2breite:=(druckbreite-slanzspaltentrenner-
+slspalte3breite)DIV 2;slspalte1breite:=druckbreite-slanzspaltentrenner-
+slspalte2breite-slspalte3breite;druckzeilenzahlgrund:=drucklaenge-
+ausgkopflaenge.vordruckvommanagerholen:vordruck:=vordr;forget(vordruck,quiet)
+;fetch(vordruck,/manager).END PROC klabulidruckvorbereiten;PROC
+ueberschriftenvorbereiten:LET swischuledatum=511,swiuebzeile=512,
+vordrueberarbsl="vordruck ueberarbeitet sl",vordrueberarbsr=
+"vordruck ueberarbeitet sr",beginnsek2=11,uebteil1sek1="Klasse: ",
+uebteil1sek2="Tutorenkurs: ",ueb1teil2sek1=" Klassenlehrer: ",ueb1teil2sek2
+=" Tutor: ",ueb2teil2="Schuljahr ";jahrgangundzugholen;elementsek1bestimmen
+;#puffer1:=wert();#setzesonderwerteschulkenndaten;#putwert(,puffer1);#
+vordruckfuellenfuerueberschrift1;vordruckfuellenfuerueberschrift2;
+verbleibendedruckzeilenzahlbestimmen.jahrgangundzugholen:jahrgang:=wert(
+fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut).elementsek1bestimmen:elementsek1:=
+FALSE ;IF int(jahrgang)<beginnsek2THEN elementsek1:=TRUE FI .
+vordruckfuellenfuerueberschrift1:setzesonderwert(swischuledatum,
+aufbereiteteschuledatum);setzesonderwert(swiuebzeile,aufbereiteteklasselehrer
+);vordruckueberarbsl:=vordrueberarbsl;forget(vordruckueberarbsl,quiet);
+briefalternative(vordruck,vordruckueberarbsl);f:=sequentialfile(input,
+vordruckueberarbsl).vordruckfuellenfuerueberschrift2:setzesonderwert(
+swischuledatum,aufbereiteteschuledatum);setzesonderwert(swiuebzeile,
+aufbereiteteklasseschuljahr);vordruckueberarbsr:=vordrueberarbsr;forget(
+vordruckueberarbsr,quiet);briefalternative(vordruck,vordruckueberarbsr);g:=
+sequentialfile(input,vordruckueberarbsr).aufbereiteteschuledatum:puffer1:=
+sonderwert(501);puffer2:=sonderwert(502);puffer2+(druckbreite-length(puffer2)
+-length(puffer1))*blank+puffer1.aufbereiteteklasselehrer:klassenlehrer(lehrer
+,jahrgang,zug);puffer2:=jahrgang+blank+zug;IF int(jahrgang)<11THEN
+uebteil1sek1+puffer2+ueb1teil2sek1+lehrerELSE uebteil1sek2+puffer2+
+ueb1teil2sek2+lehrerFI .aufbereiteteklasseschuljahr:puffer1:=ueb2teil2+
+sonderwert(505);puffer2:=jahrgang+blank+zug;IF int(jahrgang)<11THEN puffer2:=
+uebteil1sek1+puffer2ELSE puffer2:=uebteil1sek2+puffer2FI ;puffer2+(
+druckbreite-length(puffer2)-length(puffer1))*blank+puffer1.
+verbleibendedruckzeilenzahlbestimmen:druckzeilenzahl:=druckzeilenzahlgrund-
+max(lines(f),lines(g));druckzeilenzahl:=min((maxanzproseiteDIV (
+ausgfeldlaenge-1))*ausgfeldlaenge,druckzeilenzahl).END PROC
+ueberschriftenvorbereiten;PROC klassenlehrer(TEXT VAR lehrer,TEXT CONST
+jahrgang,TEXT CONST zug):putwert(fnrsgrpsj,schulkenndatum("Schuljahr"));
+putwert(fnrsgrphj,schulkenndatum("Schulhalbjahr"));putwert(fnrsgrpjgst,
+jahrgang);putwert(fnrsgrpkennung,zug);search(dnraktschuelergruppen,TRUE );IF
+dbstatus=okTHEN putwert(fnrlparaphe,wert(fnrsgrplehrer));search(dnrlehrer,
+TRUE );IF dbstatus=okTHEN lehrer:=wert(fnrlfamname)ELSE lehrer:=""FI ;ELSE
+lehrer:=""FI END PROC klassenlehrer;PROC ausgabekoepfevorbereiten:LET name=
+" Familienname",strasse="Straße Hausnummer",telefon="Telefonnummer",
+nrrufname="Nr. Rufname Namenszusatz",ort="Plz Ort";ausgabekopfslvorbelegen;
+ausgabekopfsrvorbelegen.ausgabekopfslvorbelegen:hilfsfeldervorbelegen;
+spaltenweise(name);spaltenweise(strasse);spaltenweise(telefon);slausgkopf(1)
+:=zeile;spaltenweise(nrrufname);spaltenweise(ort);spaltenweise(blank);
+slausgkopf(2):=zeile;slausgkopf(3):=druckstrich.hilfsfeldervorbelegen:
+setzespaltenbreite(slspalte1breite);setzespaltenbreite(slspalte2breite);
+setzespaltenbreite(slspalte3breite).END PROC ausgabekoepfevorbereiten;PROC
+ausgabekopfsrvorbelegen:LET srkopft1=" Geburts- J/M ",srkopft2=
+"Nr. datum ",srkopf1t1="Unterr. Sprachen musisches Wahlpflicht-"
+,srkopf1t2="Religion Fach fächer",srkopf2t1="Fächer",
+srkopf2t2="Kurskennungen";IF elementsek1THEN srausgkopf(1):=srkopft1+
+srkopf1t1;srausgkopf(2):=srkopft2+srkopf1t2ELSE srausgkopf(1):=srkopft1+
+srkopf2t1;srausgkopf(2):=srkopft2+srkopf2t2FI ;srausgkopf(3):=druckstrich.
+END PROC ausgabekopfsrvorbelegen;PROC klabuliseitedrucken:
+speicherrechteseiteloeschen;klabulislueberschriftdrucken;anzzaehler:=null;
+seitedrucken(PROC (INT VAR )schuelerdatendrucken,druckzeilenzahl,
+ausgfeldlaenge,PROC bestandendesimulierenbeiklassenwechsel,BOOL PROC
+multistopsim);IF neueklasseTHEN simuliertesendezuruecknehmen;
+neuelistevorbereitenELSE IF NOT bestandendeTHEN rechteseitedrucken;
+seitenwechselFI FI .speicherrechteseiteloeschen:FOR indexspeicherFROM 1UPTO
+maxanzproseiteREP speicher(indexspeicher):=niltextPER ;indexspeicher:=null.
+simuliertesendezuruecknehmen:setzebestandende(FALSE ).neuelistevorbereiten:
+leereschuelereintragen;rechteseitedrucken;meldelistewirdgedruckt;
+drucknachbereiten;druckvorbereiten;zaehler:=null;ueberschriftenvorbereiten.
+meldelistewirdgedruckt:meldungstext(mnrlistewirdgedruckt,listewirdgedruckt);
+standardmeldung(listewirdgedruckt,niltext).END PROC klabuliseitedrucken;PROC
+klabulislueberschriftdrucken:INT VAR i;input(f);WHILE NOT eof(f)REP getline(f
+,ausgfeld(1));druckzeileschreiben(ausgfeld(1));PER ;druckzeileschreiben(
+druckstrich);FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(
+slausgkopf(i))END REPEAT ;druckzeilenzahlrest:=druckzeilenzahl.END PROC
+klabulislueberschriftdrucken;PROC bestandendesimulierenbeiklassenwechsel:IF
+bestandendeTHEN leereschuelereintragen;rechteseitedrucken;neueklasse:=FALSE
+ELSE nochklassezubearbeiten;IF neueklasseTHEN setzebestandende(TRUE )FI ;FI .
+nochklassezubearbeiten:IF alleTHEN neueklasse:=int(jahrgang)<>int(wert(
+fnrsusgrpjgst));IF neueklasseTHEN ausgabekopfsrvorbelegenFI ;neueklasse:=
+neueklasseOR (zug<>wert(fnrsusgrpzugtut));ELSE neueklasse:=zug<>wert(
+fnrsusgrpzugtut)FI .END PROC bestandendesimulierenbeiklassenwechsel;PROC
+schuelerdatendrucken(INT VAR zeilenzaehler):LET markiert="#";
+schuelerdatenholen;ggflmeldungklasse;zaehlerINCR 1;anzzaehlerINCR 1;
+schuelerdatenaufbereiten;zeilenzaehlerINCR ausgfeldlaenge;
+schuelerdatenindruckdatei.ggflmeldungklasse:IF zaehler=nullTHEN
+standardmeldung(bearbeitetwird,jahrgang+blank+zug+markiert)FI .END PROC
+schuelerdatendrucken;PROC schuelerdatenholen:LET weiblich="w",maennlich="m",
+junge="J",maedchen="M",anzsprachen=4,prosprache=3;INT VAR i,j;schuelername:=
+wert(fnrsufamnames);schuelerrufname:=2*blank+wert(fnrsurufnames);
+schuelernamenszus:=wert(fnrsunamenszusatzs);jahrgang:=wert(fnrsusgrpjgst);zug
+:=wert(fnrsusgrpzugtut);schuelerstrasse:=wert(fnrsustrnrs);schuelerort:=wert(
+fnrsuplzorts);schuelertelefon:=wert(fnrsutelnrs);schuelergebdat:=wert(
+fnrsugebdatums);IF wert(fnrsugeschlechts)=weiblichTHEN schuelergeschlecht:=
+maedchenELIF wert(fnrsugeschlechts)=maennlichTHEN schuelergeschlecht:=junge
+ELSE schuelergeschlecht:=blankFI ;IF elementsek1THEN
+diffdatenholenundaufbereitenELSE schuelerkursfachbez:=niltext;
+schuelerkursartbez:=niltext;kursdatenholenundaufbereitenFI .
+diffdatenholenundaufbereiten:INT VAR difstatus:=0;inittupel(dnrdiffdaten);IF
+wert(fnrsutiddiffdaten)<>""THEN disablestop;readtid(dnrdiffdaten,wert(
+fnrsutiddiffdaten));IF iserrorTHEN clearerror;difstatus:=1FI ;enablestopFI ;
+IF difstatus=0THEN schuelersprachen:=niltext;sprachenaufbereiten;
+schuelerreliunt:=wert(fnrddreliunter);schuelermusfach:=wert(fnrddkunstmusik);
+schuelerwpffach:=niltext;IF jahrgang="09"THEN wpf9aufbereitenELIF jahrgang=
+"10"THEN wpf10aufbereitenFI FI .sprachenaufbereiten:FOR iFROM 0UPTO
+anzsprachen-1REP j:=(3*i)+55;puffer1:=wert(j);schuelersprachen:=
+schuelersprachen+puffer1+(prosprache-length(puffer1))*blankPER .
+wpf9aufbereiten:puffer1:=wert(fnrddfach091a);schuelerwpffach:=puffer1+(5-
+length(puffer1))*blank;puffer1:=wert(fnrddfach091b);schuelerwpffach:=
+schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1:=wert(fnrddfach092a
+);schuelerwpffach:=schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1
+:=wert(fnrddfach092b);schuelerwpffach:=schuelerwpffach+puffer1+(5-length(
+puffer1))*blank.wpf10aufbereiten:puffer1:=wert(fnrddfach101a);schuelerwpffach
+:=puffer1+(5-length(puffer1))*blank;puffer1:=wert(fnrddfach101b);
+schuelerwpffach:=schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1:=
+wert(fnrddfach102a);schuelerwpffach:=schuelerwpffach+puffer1+(5-length(
+puffer1))*blank;puffer1:=wert(fnrddfach102b);schuelerwpffach:=schuelerwpffach
++puffer1+(5-length(puffer1))*blank.kursdatenholenundaufbereiten:putwert(
+fnrhjdfamnames,schuelername);putwert(fnrhjdrufnames,compress(schuelerrufname)
+);putwert(fnrhjdgebdats,schuelergebdat);putwert(fnrhjdjgst,jahrgang);putwert(
+fnrhjdhj,schulkenndatum("Schulhalbjahr"));search(ixhjdfamrufgebjgsthj,TRUE );
+pause(5);IF dbstatus=okTHEN kursartzuweisenFI .#dr31.03.88kursartzuweisen:
+TEXT VAR suchbegriff:="";FOR iFROM 1UPTO (length(wert(fnrhjdfach))DIV 2)REP
+puffer1:=wert(fnrhjdkursart)SUB i;schuelerkursartbez:=schuelerkursartbez+
+puffer1+(2-length(puffer1))*blank;suchbegriff:=subtext(wert(fnrhjdfach),(2*i)
+-1,2*i);suchbegriff:=compress(suchbegriff);putwert(fnrffach,suchbegriff);
+search(dnrfaecher,TRUE );IF dbstatus=okTHEN puffer1:=wert(fnrffachbez);
+schuelerkursfachbez:=schuelerkursfachbez+puffer1+(3-length(puffer1))*blank;
+FI ;PER .#kursartzuweisen:TEXT VAR suchbegriff:="";FOR iFROM 1UPTO (length(
+wert(fnrhjdfach))DIV 2)REP suchbegriff:=subtext(wert(fnrhjdfach),(2*i)-1,2*i)
+;suchbegriff:=compress(suchbegriff);putwert(fnrffach,suchbegriff);search(
+dnrfaecher,TRUE );IF dbstatus=okTHEN puffer1:=wert(fnrffach);
+schuelerkursfachbez:=schuelerkursfachbez+text(puffer1,3);puffer1:=wert(
+fnrhjdkursart)SUB i;schuelerkursartbez:=schuelerkursartbez+text(puffer1,3);
+ELSE schuelerkursfachbez:=schuelerkursfachbez+(3*blank);schuelerkursartbez:=
+schuelerkursartbez+(3*blank);FI ;PER .END PROC schuelerdatenholen;PROC
+schuelerdatenaufbereiten:zaehleraufbereiten;schreibenrnamestrassetelnr;
+schreiberufnameort;datenfuerrechteseitespeichern.schreibenrnamestrassetelnr:
+spaltenweise(zaehleraufber+2*blank+schuelername);spaltenweise(schuelerstrasse
+);spaltenweise(schuelertelefon);ausgfeld(1):=zeile.schreiberufnameort:
+spaltenweise(4*blank+schuelerrufname+blank+schuelernamenszus);spaltenweise(
+schuelerort);spaltenweise(blank);ausgfeld(2):=zeile.
+datenfuerrechteseitespeichern:indexspeicherINCR 1;speicher(indexspeicher):=
+zaehleraufber+2*blank+aufbgebdat+3*blank+schuelergeschlecht;IF elementsek1
+THEN speicher(indexspeicher):=speicher(indexspeicher)+6*blank+aufbreliunt+5*
+blank+schuelersprachen+4*blank+aufbmusfach+6*blank+schuelerwpffach;
+indexspeicherINCR 1ELSE speicher(indexspeicher):=speicher(indexspeicher)+3*
+blank+schuelerkursfachbez;indexspeicherINCR 1;speicher(indexspeicher):=19*
+blank+schuelerkursartbezFI .aufbgebdat:IF schuelergebdat=niltextTHEN 8*blank
+ELSE schuelergebdatFI .aufbreliunt:IF schuelerreliunt=niltextOR (reliabmeld
+AND NOT relianmeld)THEN 2*blankELSE schuelerreliuntFI .reliabmeld:wert(
+fnrddabmeldedatreli)<>nildatumdb.relianmeld:wert(fnrddanmeldedatreli)<>
+nildatumdb.aufbmusfach:IF schuelermusfach=niltextTHEN 2*blankELSE
+schuelermusfachFI .END PROC schuelerdatenaufbereiten;PROC
+schuelerdatenindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP
+druckzeileschreiben(ausgfeld(i))PER ;druckzeilenzahlrestDECR ausgfeldlaenge.
+END PROC schuelerdatenindruckdatei;PROC leereschuelereintragen:INT VAR
+leereschuelermoeglich,i;indexspeicherINCR 1;moeglicheschuelereintragen.
+moeglicheschuelereintragen:leereschuelermoeglich:=druckzeilenzahlrestDIV
+ausgfeldlaenge;FOR iFROM 1UPTO leereschuelermoeglichREP zaehlerINCR 1;
+zaehleraufbereiten;ausgfeld(1):=text(zaehleraufber,druckbreite);ausgfeld(2):=
+text(blank,druckbreite);schuelerdatenindruckdatei;
+leerenschuelerfuerrechteseitespeichernPER .
+leerenschuelerfuerrechteseitespeichern:anzzaehlerINCR 1;speicher(
+indexspeicher):=text(zaehleraufber,druckbreite);indexspeicherINCR 2.END PROC
+leereschuelereintragen;PROC rechteseitedrucken:INT VAR i,j;seitenwechsel;
+klabulisrueberschriftdrucken;FOR iFROM 1UPTO anzzaehlerREP j:=2*i;ausgfeld(1)
+:=speicher(j-1);ausgfeld(2):=speicher(j);schuelerdatenindruckdateiPER .END
+PROC rechteseitedrucken;PROC klabulisrueberschriftdrucken:INT VAR i;input(g);
+WHILE NOT eof(g)REP getline(g,ausgfeld(1));druckzeileschreiben(ausgfeld(1));
+PER ;druckzeileschreiben(druckstrich);FOR iFROM 1UPTO ausgkopflaengeREPEAT
+druckzeileschreiben(srausgkopf(i))END REPEAT .END PROC
+klabulisrueberschriftdrucken;PROC zaehleraufbereiten:LET zaehlerzweistellig=
+10;IF zaehler<zaehlerzweistelligTHEN zaehleraufber:=blankELSE zaehleraufber:=
+niltextFI ;zaehleraufber:=zaehleraufber+text(zaehler).END PROC
+zaehleraufbereiten;END PACKET klassenbuchlisten;
+
diff --git a/app/schulis/2.2.1/src/1.listen.nachpruefung b/app/schulis/2.2.1/src/1.listen.nachpruefung
new file mode 100644
index 0000000..0247060
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.nachpruefung
@@ -0,0 +1,155 @@
+PACKET nachprueflistenDEFINES nachprlispezielleteile:LET
+mnrbearbeitetwirdjgst=106,nurimzweitenhj=193,schluesselnachpruefler="n";TEXT
+VAR aktuellesschuljahr,endewertjgst,startwertjgst,bearbeitetwirdjgst;LET
+niltext="",blank=" ",mittestrich="-",null=0,ueberschriftenzeilen=2,
+spalte1breite=7,spalte3breite=40,anzspaltentrenner=2,spaltentrenner=":",
+ausgkopflaenge=3,ausgfeldlaenge=4,AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF
+=ROW ausgkopflaengeTEXT ,nachprlieingangsmaske=
+"ms liste versetz nachpr eingang",nachprlianfpos=2;INT CONST
+spalte2bildbreite:=bildbreite-anzspaltentrenner-spalte1breite-spalte3breite;
+INT VAR spalte2druckbreite,druckzeilenzahl,bildanf,eingabestatus,breite,
+ausgfeldlaengereal;TEXT VAR nachprliueberschrift,schuljahr,jahr1,jahr2,
+schuelername,schuelerrufname,schuelernamenszus,schuelerjgst,schuelerzug,fach1
+,fach2,fach3,paraphe1,paraphe2,paraphe3,jgst,neuejgst,klasse,neueklasse;TEXT
+VAR druckstrich;TEXT CONST bildstrich:=bildbreite*mittestrich;AUSGFELD VAR
+ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR sek1,sek2,ersteraufbildschirm,
+klassegeaendert:=FALSE ;PROC nachprlispezielleteile(INT CONST nr):SELECT nr
+OF CASE 1:nachprlidialogvorbereitenCASE 2:nachprlieingabenrichtigCASE 3:
+nachprlilistenvorbereitenCASE 4:nachprlidruckvorbereitenCASE 5:
+nachprliseitedruckenCASE 6:nachprlibildschirmvorbereitenCASE 7:
+nachprliseitezeigenENDSELECT .END PROC nachprlispezielleteile;PROC
+nachprlidialogvorbereiten:nachprliueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(nachprlieingangsmaske,nachprlianfpos)END PROC
+nachprlidialogvorbereiten;PROC nachprlieingabenrichtig:LET fnrsek1=2,fnrsek2=
+3,fnrjgst=4,fnrausgdrucker=5,fnrausgbild=6,auswahlnichtsinnvoll=56;IF int(
+schulkenndatum("Schulhalbjahr"))=1THEN standardmeldung(nurimzweitenhj,"2.#");
+setzeeingabetest(FALSE )ELSE wohinpruefenFI .wohinpruefen:standardpruefe(5,
+fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus<>0
+THEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE waspruefenFI .
+waspruefen:sek1:=FALSE ;sek2:=FALSE ;fach1:="";fach2:="";fach3:="";
+reinitparsing;IF standardmaskenfeld(fnrjgst)=niltextTHEN standardpruefe(5,
+fnrsek1,fnrsek2,null,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(
+eingabestatus);setzeeingabetest(FALSE )ELSE sek1:=standardmaskenfeld(fnrsek2)
+=niltext;sek2:=NOT sek1;setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=
+niltext);setzeeingabetest(TRUE )FI ;ELSE IF (standardmaskenfeld(fnrsek1)=
+niltext)AND (standardmaskenfeld(fnrsek2)=niltext)THEN standardpruefe(3,
+fnrjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(
+eingabestatus);setzeeingabetest(FALSE )ELSE jgst:=zweistellig(
+standardmaskenfeld(fnrjgst));setzeausgabedrucker(standardmaskenfeld(
+fnrausgbild)=niltext);setzeeingabetest(TRUE )FI ;ELSE meldefehler;infeld(
+fnrsek1);setzeeingabetest(FALSE )FI ;FI .meldefehler:standardmeldung(
+auswahlnichtsinnvoll,niltext).END PROC nachprlieingabenrichtig;PROC
+nachprlilistenvorbereiten:BOOL VAR b;LET schluessel="Schuljahr";
+startwertjgstbestimmen;aktuellesschuljahrermitteln;inittupel(
+dnrhalbjahresdaten);initobli(4);setzeidentiwert("");startwertesetzen;
+objektlistestarten(ixhjdversjhjjgstkenn,"",fnrhjdjgst,TRUE ,b);
+setzebestandende(NOT multistopnachprueflerCOR b).startwertjgstbestimmen:
+aktuellesschuljahr:=schulkenndatum("Schuljahr");endewertjgst:=endeberechnung;
+startwertjgst:=anfangsberechnung;.anfangsberechnung:IF sek1THEN "05"ELIF sek2
+THEN "11"ELSE jgstFI .endeberechnung:IF sek1THEN "11"ELIF sek2THEN "14"ELSE
+text(int(jgst)+1)FI .startwertesetzen:putwert(fnrhjdversetzung,
+schluesselnachpruefler);putwert(fnrhjdjgst,startwertjgst);putwert(fnrhjdsj,
+aktuellesschuljahr);putintwert(fnrhjdhj,2).aktuellesschuljahrermitteln:
+schuljahr:=schulkenndatum(schluessel);jahr1:=subtext(schuljahr,1,2);jahr2:=
+subtext(schuljahr,3,4).END PROC nachprlilistenvorbereiten;PROC
+nachprlibildschirmvorbereiten:LET fnrausganf=2;standardkopfmaskeaktualisieren
+(nachprliueberschrift);breite:=bildbreite;initspalten;setzespaltentrenner(
+spaltentrenner);setzespaltenbreiten(spalte2bildbreite);initausgabekopf(
+bildstrich);bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaenge
+REPEAT ausgkopf(i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext;
+setzebildanfangsposition(bildanf).END PROC nachprlibildschirmvorbereiten;
+PROC nachprliseitezeigen:setzescanstartwert(startwertjgst);setzescanendewert(
+endewertjgst);blaettern(PROC (INT CONST )schuelerzeigen,aktion,TRUE ,TRUE ,
+BOOL PROC multistopnachpruefler);setzescanstartwert("");setzescanendewert("�"
+).#endewertjgstpluseinsbeigleichheit:IF startwertjgst=endewertjgstTHEN text(
+int(endewertjgst)+1)ELSE endewertjgstFI .#END PROC nachprliseitezeigen;PROC
+schuelerzeigen(INT CONST x):schuelerholen;IF ersteraufbildschirmTHEN
+klassegeaendert:=TRUE ;ersteraufbildschirm:=FALSE FI ;schueleraufbereiten;
+schueleraufbildschirm.END PROC schuelerzeigen;PROC schueleraufbildschirm:INT
+VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;
+erhoeheausgabeposumeinsEND REPEAT .END PROC schueleraufbildschirm;PROC
+nachprlidruckvorbereiten:LET uebteil11=
+"Liste der zur Nachprüfung berechtigten Schüler, ",uebteil12="Sek.I",
+uebteil13="Sek.II",uebteil14="Jgst. ",uebteil2="Schuljahr: ";TEXT VAR
+ueberschrift1,ueberschrift2;ueberschriftvorbereitendruck;jgst:=niltext;klasse
+:=niltext;druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(
+ueberschrift1,ueberschrift2);breite:=druckbreite;initspalten;
+setzespaltentrenner(spaltentrenner);setzespaltenbreiten(spalte2druckbreite);
+initausgabekopf(druckstrich);holemeldungen;setzewerte;lesenvorbereitendruck(
+PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC
+multistopnachprueflersim).holemeldungen:meldungstext(mnrbearbeitetwirdjgst,
+bearbeitetwirdjgst).setzewerte:inittupel(dnrhalbjahresdaten);putwert(
+fnrhjdversetzung,schluesselnachpruefler);putwert(fnrhjdjgst,startwertjgst);
+putwert(fnrhjdsj,aktuellesschuljahr);putintwert(fnrhjdhj,2).
+ueberschriftvorbereitendruck:ueberschrift1:=uebteil11;IF sek1THEN
+ueberschrift1:=ueberschrift1+uebteil12ELSE IF sek2THEN ueberschrift1:=
+ueberschrift1+uebteil13ELSE ueberschrift1:=ueberschrift1+uebteil14+jgstFI ;
+FI ;ueberschrift2:=uebteil2+aufbereitetesschuljahr.aufbereitetesschuljahr:
+"19"+jahr1+"/"+jahr2.variablenfuerdrucksetzen:druckstrich:=druckbreite*
+mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner-spalte1breite-
+spalte3breite;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-
+ausgkopflaenge.END PROC nachprlidruckvorbereiten;PROC nachprliseitedrucken:
+nachprliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdrucken,
+druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopnachprueflersim);
+seitenwechsel.END PROC nachprliseitedrucken;PROC nachprliueberschriftdrucken:
+druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT
+druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC
+nachprliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler):LET
+markiert="#";schuelerholen;IF zeilenzaehler=nullTHEN klassegeaendert:=TRUE
+FI ;ggflmeldungjgst;schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaengereal;
+schuelerindruckdatei.ggflmeldungjgst:IF jgstgeaendertTHEN zwischenmeldungFI .
+jgstgeaendert:neuejgst:=schuelerjgst;jgst<>neuejgst.zwischenmeldung:
+standardmeldung(bearbeitetwirdjgst,neuejgst+markiert);jgst:=neuejgst;END
+PROC schuelerdrucken;PROC schuelerindruckdatei:INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengerealREPEAT druckzeileschreiben(ausgfeld(i))END REPEAT .END
+PROC schuelerindruckdatei;PROC setzespaltenbreiten(INT CONST spalte2breite):
+setzespaltenbreite(spalte1breite);setzespaltenbreite(spalte2breite);
+setzespaltenbreite(spalte3breite);END PROC setzespaltenbreiten;PROC
+initausgabekopf(TEXT CONST strich):LET jgst="Jgst.",zugtut="Zug/Tut",name=
+"Familienname",rufname=" Rufname",rest1=
+"Meldg. :Prüfer :Datum : : ",rest2=
+" :Fach:Fach:Vors:Beis: Zeit:Raum:Note";spaltenweise(jgst);spaltenweise(
+name);spaltenweise(rest1);ausgkopf(1):=zeile;spaltenweise(zugtut);
+spaltenweise(rufname);spaltenweise(rest2);ausgkopf(2):=zeile;ausgkopf(3):=
+strich;END PROC initausgabekopf;PROC schuelerholen:schuelername:=wert(
+fnrhjdfamnames);schuelerrufname:=wert(fnrhjdrufnames);#schuelernamenszus:=
+wert(fnrhjdzusatz);#schuelernamenszus:="";schuelerjgst:=wert(fnrhjdjgst);
+schuelerzug:=wert(fnrhjdkennung);fach1:=wert(fnrhjdnachfach1);fach2:=wert(
+fnrhjdnachfach2);fach3:=wert(fnrhjdnachfach3);fachlehrersuchen(fach1,paraphe1
+);fachlehrersuchen(fach2,paraphe2);fachlehrersuchen(fach3,paraphe3);
+neueklasse:=schuelerjgst+schuelerzug;klassegeaendert:=klasse<>neueklasse;
+klasse:=neueklasse.END PROC schuelerholen;PROC fachlehrersuchen(TEXT CONST
+fach,TEXT VAR paraphe):putwert(fnrlvhj,wert(fnrhjdhj));putwert(fnrlvsj,wert(
+fnrhjdsj));putwert(fnrlvjgst,wert(fnrhjdjgst));#putwert(fnrlvzug,wert(
+fnrhjdkennung));#putwert(fnrlvfachkennung,fach+wert(fnrhjdkennung));search(
+dnrlehrveranstaltungen,TRUE );IF dbstatus=okTHEN paraphe:=wert(fnrlvparaphe)
+ELSE paraphe:=""FI END PROC fachlehrersuchen;PROC schueleraufbereiten:LET
+zwizeile=" : : : : : : :";INT VAR posausgfeld;
+posausgfeld:=null;schreibeklassenamefach1;schreiberufnamefach2;IF
+ausgabedruckerTHEN schreibeggffach3ELSE schreibefach3FI ;
+schreibezwischenzeile.schreibeklassenamefach1:spaltenweise(aufbschuelerklasse
+);spaltenweise(aufbschuelername);spaltenweise(aufbfach1);posausgfeldINCR 1;
+ausgfeld(posausgfeld):=zeile;posausgfeldINCR 1.schreiberufnamefach2:
+spaltenweise(blank);spaltenweise(aufbrufname);spaltenweise(aufbfach2);
+ausgfeld(posausgfeld):=zeile;posausgfeldINCR 1.schreibeggffach3:IF fach3<>
+niltextTHEN schreibefach3FI ;ausgfeldlaengereal:=posausgfeld.schreibefach3:
+spaltenweise(blank);spaltenweise(blank);spaltenweise(aufbfach3);ausgfeld(
+posausgfeld):=zeile;posausgfeldINCR 1.schreibezwischenzeile:spaltenweise(
+blank);spaltenweise(blank);spaltenweise(zwizeile);ausgfeld(posausgfeld):=
+zeile.aufbschuelerklasse:IF klassegeaendertTHEN schuelerjgst+blank+
+schuelerzugELSE blankFI .aufbschuelername:IF schuelernamenszus=niltextTHEN
+schuelernameELSE schuelernamenszus+blank+schuelernameFI .aufbfach1:aufbfach(
+fach1,paraphe1).aufbrufname:2*blank+schuelerrufname.aufbfach2:aufbfach(fach2,
+paraphe2).aufbfach3:aufbfach(fach3,paraphe3).END PROC schueleraufbereiten;
+TEXT PROC aufbfach(TEXT CONST fach,paraphe):LET vorfach="__: ",nachfach=
+":____:____:_______:____:____";vorfach+fach+(3-length(fach))*blank+
+spaltentrenner+paraphe+(4-length(paraphe))*blank+nachfach.END PROC aufbfach;
+BOOL PROC elementsek1:sek1COR int(startwertjgst)<11ENDPROC elementsek1;BOOL
+PROC multistopnachpruefler:BOOL VAR b;b:=nachprueflerundrichtigesdatumCAND
+int(wert(fnrhjdjgst))>=int(startwertjgst)CAND int(wert(fnrhjdjgst))<#=#int(
+endewertjgst);b.nachprueflerundrichtigesdatum:wert(fnrhjdversetzung)=
+schluesselnachprueflerCAND wert(fnrhjdsj)=aktuellesschuljahrCAND wert(
+fnrhjdhj)="2".ENDPROC multistopnachpruefler;BOOL PROC
+multistopnachprueflersim:BOOL VAR b:=multistopnachpruefler;setzebestandende(
+NOT b);bENDPROC multistopnachprueflersim;END PACKET nachprueflisten;
+
diff --git a/app/schulis/2.2.1/src/1.listen.neuan b/app/schulis/2.2.1/src/1.listen.neuan
new file mode 100644
index 0000000..6fd7fc5
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.neuan
@@ -0,0 +1,121 @@
+PACKET neuanlistenDEFINES neuanlispezielleteile:LET niltext="",blank=" ",
+mittestrich="-",null=0,komma=",",ueberschriftenzeilen=2,nname="Name",schule=
+"Schule",klasse="Klasse",spalte3breite=6,anzspaltentrenner=2,ausgkopflaenge=2
+,ausgfeldlaenge=2,AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW
+ausgkopflaengeTEXT ,neuanlieingangsmaske="ms liste neuanmeld eingang",
+neuanlianfpos=2,#fnrsustatuss=6,fnrsunamenszusatzs=21,fnrsuskennlschule=14,
+fnrsuklasselschule=15,ixsustatschulkenn=253,ixsustatfamrufgeb=254dnrschueler=
+2,dnrschulen=120,fnrschkennung=121,fnrschname=122,#mnrbearbeitetwerdenschulen
+=101,mnrbearbeitetwerdenschueler=102;INT CONST spalte1bildbreite:=(bildbreite
+-anzspaltentrenner-spalte3breite)DIV 2,spalte2bildbreite:=spalte1bildbreite;#
+bildsatzzahl:=(bildlaenge-ausgkopflaenge)DIV ausgfeldlaenge,bildblocklaenge:=
+(bildsatzzahl+1)DIV 2;#INT VAR spalte1druckbreite,spalte2druckbreite,
+druckzeilenzahl,bildanf,eingabestatus,aktuelleindexnr;TEXT VAR schuljahr,
+schuelername,schuelerrufname,schuelernamenszus,schuelerherkschule,
+schuelerherkklasse,schuelernameaufber,jahrgang,#sortbest,#anfbuchstabe,
+neueranfbuchstabe,startwert,bearbeitetwerdenschulen,bearbeitetwerdenschueler;
+TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite*mittestrich;AUSGFELD
+VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR sortalpha,jgst5,jgst11;BOOL PROC
+multistop:BOOL VAR b;IF jgst5THEN b:=wert(fnrsustatuss)="n05"ELIF jgst11THEN
+b:=wert(fnrsustatuss)="n11"ELSE b:=wert(fnrsustatuss)="nso"FI ;bENDPROC
+multistop;BOOL PROC multistopsim:BOOL VAR b:=multistop;setzebestandende(NOT b
+);bENDPROC multistopsim;PROC neuanlispezielleteile(INT CONST nr):SELECT nrOF
+CASE 1:neuanlidialogvorbereitenCASE 2:neuanlieingabenrichtigCASE 3:
+neuanlilistenvorbereitenCASE 4:neuanlidruckvorbereitenCASE 5:
+neuanliseitedruckenCASE 6:neuanlibildschirmvorbereitenCASE 7:
+neuanliseitezeigenENDSELECT .END PROC neuanlispezielleteile;PROC
+neuanlidialogvorbereiten:setzeanfangswerte(neuanlieingangsmaske,neuanlianfpos
+)END PROC neuanlidialogvorbereiten;PROC neuanlieingabenrichtig:LET fnrjgst5=2
+,fnrjgst11=3,fnrjgstsonst=4,fnrsortalpha=5,fnrsortschule=6,fnrausgdrucker=7,
+fnrausgbild=8;standardpruefe(5,fnrjgst5,fnrjgstsonst,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest
+(FALSE )ELSE standardpruefe(5,fnrsortalpha,fnrsortschule,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest
+(FALSE )ELSE standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest
+(FALSE )ELSE jgst5:=standardmaskenfeld(fnrjgst5)<>niltext;jgst11:=
+standardmaskenfeld(fnrjgst11)<>niltext;sortalpha:=standardmaskenfeld(
+fnrsortschule)=niltext;#note("-->"+standardmaskenfeld(fnrsortschule)+"<--");
+noteline;#setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);
+setzeeingabetest(TRUE )FI FI FI .END PROC neuanlieingabenrichtig;PROC
+neuanlilistenvorbereiten:LET fuenf="05",elf="11",sonst="sonst";BOOL VAR b:=
+FALSE ;IF jgst5THEN jahrgang:=fuenf;startwert:="n05"ELSE IF jgst11THEN
+jahrgang:=elf;startwert:="n11"ELSE jahrgang:=sonst;startwert:="nso"FI ;FI ;
+IF sortalphaTHEN aktuelleindexnr:=ixsustatfamrufgebELSE aktuelleindexnr:=
+ixsustatschulkennFI ;#note("Nr,: "+text(aktuelleindexnr));noteline;#inittupel
+(dnrschueler);initobli(8);parsenooffields(21);setzeidentiwert("");putwert(
+fnrsustatuss,startwert);#objektlistestarten(aktuelleindexnr,"",fnrsustatuss,
+TRUE ,b);#objektlistestarten(aktuelleindexnr,"",staticfield,TRUE ,b);
+setzebestandende(b).staticfield:IF sortalphaTHEN dnrschueler+1ELSE
+fnrsuskennlschuleFI .END PROC neuanlilistenvorbereiten;PROC
+neuanlibildschirmvorbereiten:LET fnrausganf=2,aufein="",aufaus=" ",
+neuanliueberschriftneu1="Liste der Neuanmeldungen zur Jgst. ",
+neuanliueberschriftneu2="Liste der sonstigen Neuanmeldungen";
+standardkopfmaskeaktualisieren(neueueberschrift);initspalten;
+setzespaltenbreite(spalte1bildbreite);setzespaltenbreite(spalte2bildbreite);
+setzespaltenbreite(spalte3breite);initausgabekopf(bildstrich);bildanf:=
+fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT ausgkopf(i)IN
+bildanf;bildanfINCR 1END REPEAT ;setzebildanfangsposition(bildanf).
+neueueberschrift:IF (jgst5OR jgst11)THEN neuanliueberschriftneu1+aufein+
+jahrgang+aufausELSE neuanliueberschriftneu2FI .END PROC
+neuanlibildschirmvorbereiten;PROC neuanliseitezeigen:blaettern(PROC (INT
+CONST )schuelerzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop)END PROC
+neuanliseitezeigen;PROC schuelerzeigen(INT CONST x):schuelerholen;
+schueleraufbereiten;schueleraufbildschirmEND PROC schuelerzeigen;PROC
+schueleraufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld
+(i)IN ausgabepos;erhoeheausgabeposumeinsEND REPEAT .END PROC
+schueleraufbildschirm;PROC neuanlidruckvorbereiten:LET schluessel="Schuljahr"
+,uebteil1="Folgende Schüler wurden zum Schuljahr ",uebteil2=" für die",
+uebteil31="Jahrgangsstufe ",uebteil32="sonstigen Jahrgangsstufen ",uebteil4=
+" angemeldet:";TEXT VAR ueberschrift1,ueberschrift2;anfbuchstabe:=blank;
+druckvorbereiten;variablenfuerdrucksetzen;ueberschriftvorbereitendruck;
+initdruckkopf(ueberschrift1,ueberschrift2);initspalten;setzespaltenbreite(
+spalte1druckbreite);setzespaltenbreite(spalte2druckbreite);setzespaltenbreite
+(spalte3breite);initausgabekopf(druckstrich);holemeldungen;inittupel(
+dnrschueler);putwert(fnrsustatuss,startwert);lesenvorbereitendruck(PROC (INT
+CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim).
+variablenfuerdrucksetzen:druckstrich:=druckbreite*mittestrich;
+spalte1druckbreite:=(druckbreite-anzspaltentrenner-spalte3breite)DIV 2;
+spalte2druckbreite:=spalte1druckbreite;druckzeilenzahl:=drucklaenge(
+ueberschriftenzeilen)-ausgkopflaenge.ueberschriftvorbereitendruck:schuljahr:=
+schulkenndatum(schluessel);schuljahraufbereiten;ueberschrift1:=uebteil1+
+schuljahr+uebteil2;IF (jgst5OR jgst11)THEN ueberschrift2:=uebteil31+jahrgang+
+uebteil4ELSE ueberschrift2:=uebteil32+uebteil4FI .schuljahraufbereiten:
+schuljahr:="19"+subtext(schuljahr,1,2)+"/"+subtext(schuljahr,3,4).
+holemeldungen:meldungstext(mnrbearbeitetwerdenschulen,bearbeitetwerdenschulen
+);meldungstext(mnrbearbeitetwerdenschueler,bearbeitetwerdenschueler).END
+PROC neuanlidruckvorbereiten;PROC neuanliseitedrucken:
+neuanliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdrucken,
+druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END
+PROC neuanliseitedrucken;PROC neuanliueberschriftdrucken:druckkopfschreiben;
+INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i
+))END REPEAT .END PROC neuanliueberschriftdrucken;PROC schuelerdrucken(INT
+VAR zeilenzaehler):LET markiert="#";schuelerholen;ggflmeldunganfbuchstabe;
+schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge;schuelerindruckdatei.
+ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN zwischenmeldungFI .
+anfbuchstabegeaendert:IF sortalphaTHEN neueranfbuchstabe:=schuelernameSUB 1
+ELSE neueranfbuchstabe:=schuelerherkschuleSUB 1FI ;anfbuchstabe<>
+neueranfbuchstabe.zwischenmeldung:IF sortalphaTHEN standardmeldung(
+bearbeitetwerdenschueler,neueranfbuchstabe+markiert)ELSE standardmeldung(
+bearbeitetwerdenschulen,neueranfbuchstabe+markiert)FI ;anfbuchstabe:=
+neueranfbuchstabe;END PROC schuelerdrucken;PROC schuelerindruckdatei:INT VAR
+i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT druckzeileschreiben(ausgfeld(i))END
+REPEAT .END PROC schuelerindruckdatei;PROC initausgabekopf(TEXT CONST strich)
+:spaltenweise(nname);spaltenweise(schule);spaltenweise(klasse);ausgkopf(1):=
+zeile;ausgkopf(2):=strich;END PROC initausgabekopf;PROC schuelerholen:
+schuelername:=wert(3);schuelerrufname:=2*blank+wert(4);schuelernamenszus:=
+wert(fnrsunamenszusatzs);sucheschule;schuelerherkklasse:=wert(
+fnrsuklasselschule).sucheschule:putwert(fnrschkennung,wert(fnrsuskennlschule)
+);search(dnrschulen,TRUE );IF dbstatus=okTHEN schuelerherkschule:=wert(
+fnrschname)ELSE schuelerherkschule:=wert(fnrsuskennlschule)FI .END PROC
+schuelerholen;PROC schueleraufbereiten:schuelernameaufbereiten;
+schreibenameschuleklasse;schreiberufname.schreibenameschuleklasse:
+spaltenweise(schuelernameaufber);spaltenweise(schuelerherkschule);
+spaltenweise(schuelerherkklasse);ausgfeld(1):=zeile.schreiberufname:
+spaltenweise(schuelerrufname);spaltenweise(blank);spaltenweise(blank);
+ausgfeld(2):=zeile.END PROC schueleraufbereiten;PROC schuelernameaufbereiten:
+schuelernameaufber:=niltext;IF schuelernamenszus<>niltextTHEN
+schuelernameaufber:=schuelernamenszus+blankFI ;schuelernameaufber:=
+schuelernameaufber+schuelername+komma;END PROC schuelernameaufbereiten;END
+PACKET neuanlisten;
+
diff --git a/app/schulis/2.2.1/src/1.listen.prot versetzkonferenz b/app/schulis/2.2.1/src/1.listen.prot versetzkonferenz
new file mode 100644
index 0000000..976d67c
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.prot versetzkonferenz
@@ -0,0 +1,162 @@
+PACKET protversetzkonflistenDEFINES konfprolispezielleteile:LET
+mnrbearbeitetwirdjgst=106,mnrbearbeitetwirdklasse=107,mnrbearbeitetwirdkurs=
+108;TEXT VAR bearbeitetwirdjgst,bearbeitetwirdklasse,bearbeitetwirdkurs,
+startjahr,startzug;INT VAR aktuelleindexnr;LET niltext="",nildatum="01.01.00"
+,null=0,blank=" ",mittestrich="-",doppelpunkt=":",vordr1ueberarb=
+"vordruck1 ueberarbeitet",vordr2ueberarb="vordruck2 ueberarbeitet",
+vordr3ueberarb="vordruck3 ueberarbeitet",spalte2breite=52,anzspaltentrenner=1
+,ausgkopflaenge=3,ausgfeldlaenge=2,AUSGFELD =ROW ausgfeldlaengeTEXT ,
+AUSGKOPF =ROW ausgkopflaengeTEXT ,konfprolieingangsmaske=
+"ms liste konfpro eingang",konfprolianfpos=2;INT VAR spalte1breite,
+druckzeilenzahl,druckzeilenzahlrest,zeilenanz,schuelerzaehler,eingabestatus;
+TEXT VAR konfproliueberschrift,zug,jahrgang,schuelername,schuelerrufname,
+schuelernamenszus,schuelergebdat,zugangjgst,abmeldedat,schuelerjgst,
+schuelerzug,vordruck,vordruckueberarbeitet,druckstrich;AUSGFELD VAR
+ausgfelddruck;AUSGKOPF VAR ausgkopfdruck;BOOL VAR sek1,einjahrgang,alle,
+neuesmerkmal;FILE VAR f;PROC konfprolispezielleteile(INT CONST nr):SELECT nr
+OF CASE 1:konfprolidialogvorbereitenCASE 2:konfprolieingabenrichtigCASE 3:
+konfprolilistenvorbereitenCASE 4:konfprolidruckvorbereitenCASE 5:
+konfproliseitedruckenENDSELECT .END PROC konfprolispezielleteile;PROC
+konfprolidialogvorbereiten:konfproliueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(konfprolieingangsmaske,konfprolianfpos).END PROC
+konfprolidialogvorbereiten;PROC konfprolieingabenrichtig:LET fnrmskjgst=2,
+fnrmskzug=3,auswahlnichtsinnvoll=56;sek1:=FALSE ;alle:=FALSE ;einjahrgang:=
+FALSE ;jahrgang:="";zug:=compress(standardmaskenfeld(fnrmskzug));IF
+standardmaskenfeld(fnrmskjgst)=niltextTHEN IF zug=niltextTHEN alle:=TRUE ;
+sek1:=TRUE ;setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )ELSE
+meldefehler;infeld(fnrmskzug);setzeeingabetest(FALSE )FI ELSE standardpruefe(
+3,fnrmskjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(
+eingabestatus);setzeeingabetest(FALSE )ELSE jahrgang:=zweistellig(
+standardmaskenfeld(fnrmskjgst));einjahrgang:=(zug=niltext);IF int(jahrgang)<
+11THEN sek1:=TRUE FI ;setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )FI
+FI .meldefehler:standardmeldung(auswahlnichtsinnvoll,niltext).END PROC
+konfprolieingabenrichtig;PROC konfprolilistenvorbereiten:BOOL VAR b:=FALSE ;
+startjahr:=jahrgang;startzug:=zug;IF startjahr>"10"CAND startzug=niltextTHEN
+aktuelleindexnr:=ixsustatjgstELSE aktuelleindexnr:=ixsustatjgstzugFI ;
+dbstatus(ok);inittupel(dnrschueler);initobli(1);parsenooffields(19);
+setzeidentiwert("");putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut,
+startzug);putwert(fnrsustatuss,"ls");#objektlistestarten(aktuelleindexnr,"",
+fnrsusgrpjgst,TRUE ,b);#objektlistestarten(aktuelleindexnr,"",staticfield,
+TRUE ,b);setzebestandende(NOT multistopkonf).staticfield:IF aktuelleindexnr=
+ixsustatjgstzugTHEN fnrsusgrpzugtutELSE dnrschueler+1FI .END PROC
+konfprolilistenvorbereiten;PROC konfprolidruckvorbereiten:LET prevordruck=
+"vordruck",postvordruck=" protokoll versetzkonf",vordr3=
+"vordruck3 protokoll versetzkonf",anzvordrucke=3,manager="anschreiben server"
+;INT VAR i;schuelerzaehler:=null;jahrgang:=wert(fnrsusgrpjgst);zug:=wert(
+fnrsusgrpzugtut);aktuellevordruckevommanagerholen;neuesmerkmal:=TRUE ;
+druckvorbereiten;variablenfuerdrucksetzen;vordruck3fuellen;
+setzesonderwerteschulkenndaten;holemeldungen;putwert(dateinr(primdatid(
+aktuelleindexnr))+1,"");putwert(fnrsusgrpjgst,startjahr);putwert(
+fnrsusgrpzugtut,startzug);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,
+INT VAR )scanforward,BOOL PROC multistopkonfsim);initspalten;
+initausgabekopfdruck.holemeldungen:meldungstext(mnrbearbeitetwirdjgst,
+bearbeitetwirdjgst);meldungstext(mnrbearbeitetwirdklasse,bearbeitetwirdklasse
+);meldungstext(mnrbearbeitetwirdkurs,bearbeitetwirdkurs).
+aktuellevordruckevommanagerholen:FOR iFROM 1UPTO anzvordruckeREP forget(
+prevordruck+text(i)+postvordruck,quiet);fetch(prevordruck+text(i)+
+postvordruck,/manager);PER .variablenfuerdrucksetzen:druckstrich:=druckbreite
+*mittestrich;spalte1breite:=druckbreite-anzspaltentrenner-spalte2breite.
+vordruck3fuellen:vordruck:=vordr3;vordruckueberarbeitet:=vordr3ueberarb;
+forget(vordruckueberarbeitet,quiet);briefalternative(vordruck,
+vordruckueberarbeitet).END PROC konfprolidruckvorbereiten;PROC
+initausgabekopfdruck:LET name=" :Familienname",rufname=" : Rufname",
+rest1=" : :Erg. :Fächer:",rest2=
+"Geb.dat.:Bem.:v/w/n :Nachpr:Gründe";hilfsfeldervorbelegen;spaltenweise(name)
+;spaltenweise(rest1);ausgkopfdruck(1):=zeile;spaltenweise(rufname);
+spaltenweise(rest2);ausgkopfdruck(2):=zeile;ausgkopfdruck(3):=druckstrich.
+hilfsfeldervorbelegen:setzespaltentrenner(blank);setzespaltenbreite(
+spalte1breite);setzespaltenbreite(spalte2breite).END PROC
+initausgabekopfdruck;PROC konfproliseitedrucken:LET listewirdgedruckt=58;
+konfproliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdatendrucken
+,druckzeilenzahl,ausgfeldlaenge,PROC bestandendesimulierenbeimerkmalwechsel,
+BOOL PROC multistopkonfsim);IF neuesmerkmalTHEN simuliertesendezuruecknehmen;
+konfproliunterschriftdrucken;meldelistewirdgedruckt;drucknachbereiten;
+schuelerzaehler:=null;neuelistevorbereitenELIF NOT bestandendeTHEN
+seitenwechselFI .simuliertesendezuruecknehmen:setzebestandende(FALSE ).
+meldelistewirdgedruckt:standardmeldung(listewirdgedruckt,niltext).
+neuelistevorbereiten:druckvorbereiten.END PROC konfproliseitedrucken;PROC
+konfproliueberschriftdrucken:LET vordr1="vordruck1 protokoll versetzkonf",
+vordr2="vordruck2 protokoll versetzkonf",anzleerzeilen=2,markiert="#";INT
+VAR i;TEXT VAR klassejgstaufber;IF neuesmerkmalTHEN
+zwischenmeldungundvordruckefuellenFI ;vordruck1schreiben;IF neuesmerkmalTHEN
+vordruck2schreibenFI ;leerzeilenschreiben;ausgabekopfschreiben.
+zwischenmeldungundvordruckefuellen:LET swiklassebzwjgst=511,
+swianwesendelehrer=512,klasse="Klasse ",kurs="Tutorenkurs ",jgst="Jgst. ";
+klassejgstaufber:=jahrgang;IF (alleOR einjahrgang)AND NOT sek1THEN
+standardmeldung(bearbeitetwirdjgst,klassejgstaufber+markiert);
+klassejgstaufber:=jgst+klassejgstaufberELSE klassejgstaufber:=
+klassejgstaufber+blank+zug;IF sek1THEN standardmeldung(bearbeitetwirdklasse,
+klassejgstaufber+markiert);klassejgstaufber:=klasse+klassejgstaufberELSE
+standardmeldung(bearbeitetwirdkurs,klassejgstaufber+markiert);
+klassejgstaufber:=kurs+klassejgstaufberFI ;FI ;festesonderwertesetzen;
+vordruck:=vordr1;vordruckueberarbeitet:=vordr1ueberarb;forget(
+vordruckueberarbeitet,quiet);briefalternative(vordruck,vordruckueberarbeitet)
+;vordruck:=vordr2;vordruckueberarbeitet:=vordr2ueberarb;forget(
+vordruckueberarbeitet,quiet);briefalternative(vordruck,vordruckueberarbeitet)
+.festesonderwertesetzen:setzesonderwert(swiklassebzwjgst,klassejgstaufber);
+setzesonderwert(swianwesendelehrer,blank).vordruck2schreiben:
+vordruckueberarbeitet:=vordr2ueberarb;f:=sequentialfile(input,
+vordruckueberarbeitet);zeilenanz:=lines(f);FOR iFROM 1UPTO zeilenanzREP
+getline(f,ausgfelddruck(1));druckzeileschreiben(ausgfelddruck(1));PER ;
+druckzeilenzahlDECR zeilenanz.leerzeilenschreiben:FOR iFROM 1UPTO
+anzleerzeilenREP druckzeileschreiben(blank)PER ;druckzeilenzahlDECR
+anzleerzeilen.ausgabekopfschreiben:FOR iFROM 1UPTO ausgkopflaengeREP
+druckzeileschreiben(ausgkopfdruck(i))PER ;druckzeilenzahlDECR ausgkopflaenge;
+druckzeilenzahlrest:=druckzeilenzahl.END PROC konfproliueberschriftdrucken;
+PROC konfproliunterschriftdrucken:INT VAR i;vordruck3holen;vordruck3schreiben
+.vordruck3holen:vordruckueberarbeitet:=vordr3ueberarb;f:=sequentialfile(input
+,vordruckueberarbeitet);zeilenanz:=lines(f).vordruck3schreiben:IF zeilenanz>
+druckzeilenzahlrestTHEN seitenwechselmitneuemkopfFI ;FOR iFROM 1UPTO
+zeilenanzREP getline(f,ausgfelddruck(1));druckzeileschreiben(ausgfelddruck(1)
+);PER ;druckzeilenzahlrestDECR zeilenanz.seitenwechselmitneuemkopf:
+seitenwechsel;vordruck1schreiben;druckzeilenzahlrest:=druckzeilenzahl;
+vordruck3holen.END PROC konfproliunterschriftdrucken;PROC vordruck1schreiben:
+INT VAR i;druckzeilenzahl:=drucklaenge;vordruckueberarbeitet:=vordr1ueberarb;
+f:=sequentialfile(input,vordruckueberarbeitet);zeilenanz:=lines(f);FOR iFROM
+1UPTO zeilenanzREP getline(f,ausgfelddruck(1));druckzeileschreiben(
+ausgfelddruck(1));PER ;druckzeilenzahlDECR zeilenanz.END PROC
+vordruck1schreiben;PROC schuelerdatendrucken(INT VAR zeilenzaehler):
+schuelerdatenholen;schuelerdatenaufbereiten;zeilenzaehlerINCR ausgfeldlaenge;
+schuelerdatenindruckdatei.END PROC schuelerdatendrucken;PROC
+schuelerdatenholen:schuelername:=wert(fnrsufamnames);schuelerrufname:=wert(
+fnrsurufnames);schuelernamenszus:=wert(fnrsunamenszusatzs);schuelergebdat:=
+wert(fnrsugebdatums);zugangjgst:=wert(fnrsuartzugang);abmeldedat:=wert(
+fnrsuabgdats);schuelerjgst:=wert(fnrsusgrpjgst);schuelerzug:=wert(
+fnrsusgrpzugtut).END PROC schuelerdatenholen;PROC schuelerdatenaufbereiten:
+LET unterstrich="_",bem1="w",bem2="x",abgemeldet="ab",gebdatlaenge=8,
+zugangjgstlaenge=4,ausgleich1=3,ausgleich2=2,abgemlaenge1=4,abgemlaenge2=2,
+rest1=": : :",rest2=":______:______:________________________";
+schuelerzaehlerINCR 1;schreibenamegebdatbemerkungen.
+schreibenamegebdatbemerkungen:setzespaltentrenner(blank);spaltenweise(
+schuelernameundnraufber);spaltenweise(schuelerbemteil1aufber);ausgfelddruck(1
+):=zeile;setzespaltentrenner(unterstrich);spaltenweise(schuelerrufnameaufber)
+;spaltenweise(schuelerbemteil2aufber);ausgfelddruck(2):=zeile.
+schuelernameundnraufber:IF schuelernamenszus=niltextTHEN nr+doppelpunkt+
+schuelernameELSE nr+doppelpunkt+schuelernamenszus+blank+schuelernameFI .nr:(
+ausgleich1-length(text(schuelerzaehler)))*blank+text(schuelerzaehler).
+schuelerbemteil1aufber:gebdatlaenge*blank+doppelpunkt+zugangjgstaufber+rest1.
+zugangjgstaufber:IF (zugangjgst=bem1)OR (zugangjgst=bem2)THEN zugangjgst+(
+zugangjgstlaenge-length(zugangjgst))*blankELSE zugangjgstlaenge*blankFI .
+schuelerrufnameaufber:ausgleich1*unterstrich+doppelpunkt+ausgleich2*
+unterstrich+schuelerrufname+anzunterstriche*unterstrich.
+schuelerbemteil2aufber:schuelergebdat+doppelpunkt+abgemeldetaufber+rest2.
+anzunterstriche:spalte1breite-ausgleich2-length(schuelerrufname).
+abgemeldetaufber:IF abmeldedat=nildatumTHEN abgemlaenge1*unterstrichELSE
+abgemeldet+abgemlaenge2*unterstrichFI .END PROC schuelerdatenaufbereiten;
+PROC schuelerdatenindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP
+druckzeileschreiben(ausgfelddruck(i))PER ;druckzeilenzahlrestDECR
+ausgfeldlaenge.END PROC schuelerdatenindruckdatei;PROC
+bestandendesimulierenbeimerkmalwechsel:IF bestandendeTHEN neuesmerkmal:=
+FALSE ;konfproliunterschriftdruckenELSE nochklassebzwjgstzubearbeiten;IF
+neuesmerkmalTHEN setzebestandende(TRUE )FI ;FI .nochklassebzwjgstzubearbeiten
+:jahrgang:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut);neuesmerkmal:=
+neuejgst;IF neuesmerkmalAND int(jahrgang)>10THEN sek1:=FALSE FI ;IF sek1THEN
+neuesmerkmal:=neuesmerkmalOR neuerzugFI .neuejgst:schuelerjgst<>jahrgang.
+neuerzug:schuelerzug<>zug.END PROC bestandendesimulierenbeimerkmalwechsel;
+BOOL PROC multistopkonf:BOOL VAR b:=#TRUE ;#FALSE ;IF wert(fnrsustatuss)="ls"
+THEN b:=TRUE ;IF startjahr<>""THEN IF startzug=niltextTHEN b:=(wert(
+fnrsusgrpjgst)=startjahr)ELSE b:=(wert(fnrsusgrpzugtut)=startzugAND wert(
+fnrsusgrpjgst)=startjahr)FI ;FI ;FI ;bEND PROC multistopkonf;BOOL PROC
+multistopkonfsim:BOOL VAR b:=multistopkonf;setzebestandende(NOT b);bENDPROC
+multistopkonfsim;END PACKET protversetzkonflisten;
+
diff --git a/app/schulis/2.2.1/src/1.listen.wiederholer b/app/schulis/2.2.1/src/1.listen.wiederholer
new file mode 100644
index 0000000..e0541d2
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listen.wiederholer
@@ -0,0 +1,160 @@
+PACKET versetzlistenDEFINES verslispezielleteile:LET schluesselwiederholer=
+"w";INT CONST mnrbearbeitetwirdjgst:=106,nurimzweitenhj:=193;TEXT VAR
+bearbeitetwirdjgst:="",aktuellesschuljahr:="",endewertjgst:="",startwertjgst
+:="";LET niltext="",nildatum="01.01.00",blank=" ",mittestrich="-",null=0,
+komma=",",ueberschriftenzeilen=2,spalte1breitesek1=5,spalte3breitesek1=32,
+spalte1breitesek2=8,spalte3breitesek2=25,anzspaltentrenner=2,spaltentrenner=
+":",ausgkopflaenge=3,ausgfeldlaenge=1,AUSGFELD =ROW ausgfeldlaengeTEXT ,
+AUSGKOPF =ROW ausgkopflaengeTEXT ,verslieingangsmaske=
+"ms liste versetz nachpr eingang",verslianfpos=2;INT CONST
+spalte2bildbreitesek1:=bildbreite-anzspaltentrenner-spalte1breitesek1-
+spalte3breitesek1,spalte2bildbreitesek2:=bildbreite-anzspaltentrenner-
+spalte1breitesek2-spalte3breitesek2;INT VAR spalte2druckbreite,
+druckzeilenzahl,bildanf,eingabestatus,breite;TEXT VAR versliueberschrift,
+jahr1,jahr2,schuelername,schuelerrufname,schuelernamenszus,schuelerjgst,
+schuelerzug,schuelerabdat,ortsteil,erstesprache,religionsunt,kuodermu,jgst,
+neuejgst,klasse,neueklasse;TEXT VAR druckstrich;TEXT CONST bildstrich:=
+bildbreite*mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR
+sek1,sek2,ersteraufbildschirm,klassegeaendert:=FALSE ;PROC
+verslispezielleteile(INT CONST nr):SELECT nrOF CASE 1:verslidialogvorbereiten
+CASE 2:verslieingabenrichtigCASE 3:verslilistenvorbereitenCASE 4:
+verslidruckvorbereitenCASE 5:versliseitedruckenCASE 6:
+verslibildschirmvorbereitenCASE 7:versliseitezeigenENDSELECT .END PROC
+verslispezielleteile;PROC verslidialogvorbereiten:versliueberschrift:=text(
+vergleichsknoten);setzeanfangswerte(verslieingangsmaske,verslianfpos);
+reinitparsingEND PROC verslidialogvorbereiten;PROC verslieingabenrichtig:LET
+fnrsek1=2,fnrsek2=3,fnrjgst=4,fnrausgdrucker=5,fnrausgbild=6,
+auswahlnichtsinnvoll=56;IF int(schulkenndatum("Schulhalbjahr"))=1THEN
+standardmeldung(nurimzweitenhj,"2.#");setzeeingabetest(FALSE )ELSE
+wohinpruefenFI .wohinpruefen:standardpruefe(5,fnrausgdrucker,fnrausgbild,null
+,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);
+setzeeingabetest(FALSE )ELSE waspruefenFI .waspruefen:sek1:=FALSE ;sek2:=
+FALSE ;jgst:="";IF standardmaskenfeld(fnrjgst)=niltextTHEN standardpruefe(5,
+fnrsek1,fnrsek2,null,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(
+eingabestatus);setzeeingabetest(FALSE )ELSE sek1:=standardmaskenfeld(fnrsek2)
+=niltext;sek2:=NOT sek1;setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=
+niltext);setzeeingabetest(TRUE )FI ;ELSE IF (standardmaskenfeld(fnrsek1)=
+niltext)AND (standardmaskenfeld(fnrsek2)=niltext)THEN standardpruefe(3,
+fnrjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(
+eingabestatus);setzeeingabetest(FALSE )ELSE jgst:=zweistellig(
+standardmaskenfeld(fnrjgst));setzeausgabedrucker(standardmaskenfeld(
+fnrausgbild)=niltext);setzeeingabetest(TRUE )FI ;ELSE meldefehler;infeld(
+fnrsek1);setzeeingabetest(FALSE )FI ;FI .meldefehler:standardmeldung(
+auswahlnichtsinnvoll,niltext).END PROC verslieingabenrichtig;PROC
+verslilistenvorbereiten:BOOL VAR b;LET schluessel="Schuljahr";
+aktuellesschuljahrermitteln;startwertjgstbestimmen;inittupel(
+dnrhalbjahresdaten);initobli(16);setzeidentiwert("");startwertesetzen;
+objektlistestarten(ixhjdversjhjjgstkenn,"",fnrhjdjgst,TRUE ,b);
+setzebestandende(NOT multistopniverCOR b).aktuellesschuljahrermitteln:
+aktuellesschuljahr:=schulkenndatum(schluessel);jahr1:=subtext(
+aktuellesschuljahr,1,2);jahr2:=subtext(aktuellesschuljahr,3,4).
+startwertjgstbestimmen:endewertjgst:=endeberechnung;startwertjgst:=
+anfangsberechnung;.anfangsberechnung:IF sek1THEN "05"ELIF sek2THEN "11"ELSE
+jgstFI .endeberechnung:IF sek1THEN "11"ELIF sek2THEN "14"ELSE text(int(jgst)+
+1)FI .startwertesetzen:putwert(fnrhjdversetzung,schluesselwiederholer);
+putwert(fnrhjdjgst,startwertjgst);putwert(fnrhjdsj,aktuellesschuljahr);
+putintwert(fnrhjdhj,2).END PROC verslilistenvorbereiten;BOOL PROC
+multistopniver:BOOL VAR b;b:=wiederholerundrichtigesdatumCAND int(wert(
+fnrhjdjgst))>=int(startwertjgst)CAND int(wert(fnrhjdjgst))<#=#int(
+endewertjgst);b.wiederholerundrichtigesdatum:wert(fnrhjdversetzung)=
+schluesselwiederholerCAND wert(fnrhjdsj)=aktuellesschuljahrCAND wert(fnrhjdhj
+)="2".ENDPROC multistopniver;BOOL PROC multistopniversim:BOOL VAR b:=
+multistopniver;setzebestandende(NOT b);bENDPROC multistopniversim;PROC
+verslibildschirmvorbereiten:LET fnrausganf=2;standardkopfmaskeaktualisieren(
+versliueberschrift);breite:=bildbreite;initspalten;setzespaltentrenner(
+spaltentrenner);IF elementsek1THEN setzespaltenbreitensek1(
+spalte2bildbreitesek1);initausgabekopfsek1(bildstrich)ELSE
+setzespaltenbreitensek2(spalte2bildbreitesek2);initausgabekopfsek2(bildstrich
+)FI ;bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT
+ausgkopf(i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext;
+setzebildanfangsposition(bildanf).END PROC verslibildschirmvorbereiten;PROC
+versliseitezeigen:setzescanstartwert(startwertjgst);setzescanendewert(
+endewertjgstpluseinsbeigleichheit);blaettern(PROC (INT CONST )schuelerzeigen,
+aktion,TRUE ,TRUE ,BOOL PROC multistopniver);setzescanstartwert("");
+setzescanendewert("�").endewertjgstpluseinsbeigleichheit:IF startwertjgst=
+endewertjgstTHEN text(int(endewertjgst)+1)ELSE endewertjgstFI .END PROC
+versliseitezeigen;PROC schuelerzeigen(INT CONST x):schuelerholen;IF
+ersteraufbildschirmTHEN klassegeaendert:=TRUE ;ersteraufbildschirm:=FALSE FI
+;schueleraufbereiten;schueleraufbildschirm.END PROC schuelerzeigen;PROC
+schueleraufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld
+(i)IN ausgabepos;erhoeheausgabeposumeinsEND REPEAT .END PROC
+schueleraufbildschirm;PROC verslidruckvorbereiten:LET uebteil11=
+"Liste der nicht versetzten Schüler, ",uebteil12="Sek.I",uebteil13="Sek.II",
+uebteil14="Jgst. ",uebteil2="Schuljahr: ";TEXT VAR ueberschrift1,
+ueberschrift2;ueberschriftvorbereitendruck;jgst:=niltext;klasse:=niltext;
+druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(ueberschrift1,
+ueberschrift2);breite:=druckbreite;initspalten;setzespaltentrenner(
+spaltentrenner);IF elementsek1THEN setzespaltenbreitensek1(spalte2druckbreite
+);initausgabekopfsek1(druckstrich)ELSE setzespaltenbreitensek2(
+spalte2druckbreite);initausgabekopfsek2(druckstrich)FI ;holemeldungen;
+setzewerte;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )
+scanforward,BOOL PROC multistopniversim).holemeldungen:meldungstext(
+mnrbearbeitetwirdjgst,bearbeitetwirdjgst).setzewerte:inittupel(
+dnrhalbjahresdaten);putwert(fnrhjdversetzung,schluesselwiederholer);putwert(
+fnrhjdjgst,startwertjgst);putwert(fnrhjdsj,aktuellesschuljahr);putintwert(
+fnrhjdhj,2).ueberschriftvorbereitendruck:ueberschrift1:=uebteil11;IF sek1
+THEN ueberschrift1:=ueberschrift1+uebteil12ELSE IF sek2THEN ueberschrift1:=
+ueberschrift1+uebteil13ELSE ueberschrift1:=ueberschrift1+uebteil14+jgstFI ;
+FI ;ueberschrift2:=uebteil2+aufbereitetesschuljahr.aufbereitetesschuljahr:
+"19"+jahr1+"/"+jahr2.variablenfuerdrucksetzen:druckstrich:=druckbreite*
+mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner;IF elementsek1
+THEN spalte2druckbreite:=spalte2druckbreite-spalte1breitesek1-
+spalte3breitesek1ELSE spalte2druckbreite:=spalte2druckbreite-
+spalte1breitesek2-spalte3breitesek2FI ;druckzeilenzahl:=drucklaenge(
+ueberschriftenzeilen)-ausgkopflaenge.END PROC verslidruckvorbereiten;PROC
+versliseitedrucken:versliueberschriftdrucken;seitedrucken(PROC (INT VAR )
+schuelerdrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopniversim);
+seitenwechsel.END PROC versliseitedrucken;PROC versliueberschriftdrucken:
+druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT
+druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC
+versliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler):LET
+markiert="#";schuelerholen;IF zeilenzaehler=nullTHEN klassegeaendert:=TRUE
+FI ;ggflmeldungjgst;schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge;
+schuelerindruckdatei.ggflmeldungjgst:IF jgstgeaendertTHEN zwischenmeldungFI .
+jgstgeaendert:neuejgst:=schuelerjgst;jgst<>neuejgst.zwischenmeldung:
+standardmeldung(bearbeitetwirdjgst,neuejgst+markiert);jgst:=neuejgst;END
+PROC schuelerdrucken;PROC schuelerindruckdatei:INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengeREPEAT druckzeileschreiben(ausgfeld(i))END REPEAT .END PROC
+schuelerindruckdatei;PROC setzespaltenbreitensek1(INT CONST spalte2breitesek1
+):setzespaltenbreite(spalte1breitesek1);setzespaltenbreite(spalte2breitesek1)
+;setzespaltenbreite(spalte3breitesek1);END PROC setzespaltenbreitensek1;PROC
+setzespaltenbreitensek2(INT CONST spalte2breitesek2):setzespaltenbreite(
+spalte1breitesek2);setzespaltenbreite(spalte2breitesek2);setzespaltenbreite(
+spalte3breitesek2);END PROC setzespaltenbreitensek2;PROC initausgabekopfsek1(
+TEXT CONST strich):LET jgst="Jgst.",zug=" Zug",name="Name",rest1=
+"Orts-:Rel.: L : KU : Klasse",rest2="teil :unt.: F : MU :Wunsch:neu";
+spaltenweise(jgst);spaltenweise(blank);spaltenweise(rest1);ausgkopf(1):=zeile
+;spaltenweise(zug);spaltenweise(name);spaltenweise(rest2);ausgkopf(2):=zeile;
+ausgkopf(3):=strich;END PROC initausgabekopfsek1;PROC initausgabekopfsek2(
+TEXT CONST strich):LET jgst="Jgst.",tutor=" Tutor",name="Name",rest1=
+"Abmeldung";spaltenweise(jgst);spaltenweise(blank);spaltenweise(blank);
+ausgkopf(1):=zeile;spaltenweise(tutor);spaltenweise(name);spaltenweise(rest1)
+;ausgkopf(2):=zeile;ausgkopf(3):=strich;END PROC initausgabekopfsek2;PROC
+schuelerholen:sucheschueler;schuelername:=wert(fnrsufamnames);schuelerrufname
+:=wert(fnrsurufnames);schuelernamenszus:=wert(fnrsunamenszusatzs);
+schuelerjgst:=wert(fnrhjdjgst);schuelerzug:=wert(fnrhjdkennung);schuelerabdat
+:=wert(fnrsuabgdats);IF elementsek1THEN ortsteil:=wert(fnrsuortsteils);
+erstesprache:=wert(fnrdd1fremdfach);religionsunt:=wert(fnrddreliunter);
+kuodermu:=wert(fnrddkunstmusik)FI ;neueklasse:=schuelerjgst+schuelerzug;
+klassegeaendert:=klasse<>neueklasse;klasse:=neueklasse.sucheschueler:
+uebernehmewerte;search(dnrschueler,TRUE );IF dbstatus=okTHEN readtid(
+dnrdiffdaten,zugriff(fnrsutiddiffdaten))ELSE inittupel(dnrdiffdaten)FI .
+uebernehmewerte:putwert(fnrsufamnames,wert(fnrhjdfamnames));putwert(
+fnrsurufnames,wert(fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats
+)).END PROC schuelerholen;PROC schueleraufbereiten:LET abgemsek1="abgem.",
+abgemsek2="abgemeldet";schreibeklassenamerest.schreibeklassenamerest:
+spaltenweise(aufbschuelerklasse);spaltenweise(aufbschuelername);spaltenweise(
+aufbrest);ausgfeld(1):=zeile.aufbschuelerklasse:IF klassegeaendertTHEN
+schuelerjgst+blank+schuelerzugELSE blankFI .aufbschuelername:IF
+schuelernamenszus=niltextTHEN schuelername+komma+blank+schuelerrufnameELSE
+schuelernamenszus+blank+schuelername+komma+blank+schuelerrufnameFI .aufbrest:
+IF elementsek1THEN ganzerrestsek1ELSE abmeldungsek2FI .ganzerrestsek1:blank+
+text(ortsteil,3)+blank+spaltentrenner+blank+text(religionsunt,2)+blank+
+spaltentrenner+blank+text(erstesprache,1)+blank+spaltentrenner+blank+text(
+kuodermu,2)+blank+spaltentrenner+abmeldungsek1.abmeldungsek1:IF (
+schuelerabdat=niltext)OR (schuelerabdat=nildatum)THEN text(blank,6)+
+spaltentrennerELSE abgemsek1+spaltentrenner+blank+mittestrichFI .
+abmeldungsek2:IF (schuelerabdat=niltext)OR (schuelerabdat=nildatum)THEN blank
+ELSE abgemsek2FI .END PROC schueleraufbereiten;BOOL PROC elementsek1:sek1COR
+int(startwertjgst)<11ENDPROC elementsek1;END PACKET versetzlisten;
+
diff --git a/app/schulis/2.2.1/src/1.listenweise dif dat erf b/app/schulis/2.2.1/src/1.listenweise dif dat erf
new file mode 100644
index 0000000..0ef8cfd
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listenweise dif dat erf
@@ -0,0 +1,255 @@
+PACKET listenweisedifdaterfDEFINES bearbeitungdifdaterf,
+difdaterfnichtspeichern,difdaterfspeichern:LET tofather=1,tograndfather=2,
+maxsek1="10",niltext="",blank=" ",namenstrenner=", ",null=0,meldtrenner="#";
+LET maskennamepreallg="ms dif dat erf bearbeitung";LET jgst5=5,jgst13=13,
+standardanfang=1;LET maxschueler=14,schuelerproseite=15;LET meldbestleer=59,
+meldnichtspeichern=63,meldplausi=57,meldwarten=69,meldspeicherung=132,
+meldspeicherfehler=131,meldnrfalschesdatum=157,meldnrfalscherschluessel=34;
+LET pruefartalternative=5,pruefartgrenzen=3;LET fnrjgst=2,fnrtutor=3,fnrfs1=4
+,fnrag=12,fnrmaskentitel=3,fnrklasse=2;LET mnr1=1,mnr2=2,mnr3=3,mnr4=4,mnr5=5
+,titel09="09",titel10="10",ef1=4,fpz1=4,ef2=3,fpz3=2,fpz4=5;LET awfs1=1,awfs2
+=2,awfs3=3,awfs4=4,awreli=5,awkunst=6,awwp9=7,awwp10=8,awag=9,
+auswertungsdistanz=3;LET maxag=3;LET allespruefen=1,einejgstpruefen=2,
+eineklassepruefen=3;LET schuelerbestand="ls";LET logtextbeginn="Anw. 1.4.2 ",
+logtextalleklassen="alle Klassen";LET logtext1=".Fremdsprache",logtext2=
+"Teilnahme am Religionsunterricht",logtext3="Kunst/Musik",logtext4=
+"Wahlpflichtfächer",logtext5="Arbeitsgemeinschaften";TEXT VAR logarttext;
+BOOL VAR nochwelcheda,alleklassen,tutorenkurs,sek2,eineklasse,
+nochweiterebestaende,einejgst;INT VAR fremdsprachenindex,wpindex,waspruefen,
+erstesfeld,felderprozeile,standardeinstieg,laengename,laengeklasse,
+schuelerzahl,aktuellesfeld,auswertungsnr;ROW schuelerproseiteTEXT VAR name;
+ROW schuelerproseiteTEXT VAR rufname;ROW schuelerproseiteTEXT VAR gebdat;ROW
+schuelerproseiteTEXT VAR altedaten;TEXT VAR vergleichsjgst,vergleichszug,
+sicherungstupel;PROC bearbeitungdifdaterf:TEXT VAR jgst,zug;reinitparsing;
+eingangsbildschirmpruefen;IF eingangsbildschirmokTHEN
+initialisierungenvornehmen;naechsteportionlesen;IF keinemehrdaTHEN
+bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE
+eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmok:pruefstatus=0.
+eingangsbildschirmpruefen:ankreuzfelderpruefen;IF eingangsbildschirmokTHEN
+jgstzugpruefenFI .ankreuzfelderpruefen:INT VAR pruefstatus;standardpruefe(
+pruefartalternative,fnrfs1,fnrag,null,niltext,pruefstatus);.jgstzugpruefen:
+alleklassen:=FALSE ;IF standardmaskenfeld(fnrjgst)<>niltextTHEN
+standardpruefe(pruefartgrenzen,fnrjgst,jgst5,jgst13,niltext,pruefstatus)ELIF
+standardmaskenfeld(fnrtutor)<>niltextTHEN pruefstatus:=fnrtutorELSE
+alleklassen:=TRUE FI .initialisierungenvornehmen:bestandundmaskesetzen;
+bearbeitungsmaskevorbereiten;laengenfestlegen;IF sek2CAND NOT tutorenkurs
+THEN startebildschirmblock(ixsustatjgst,maxschueler)ELSE
+startebildschirmblock(ixsustatjgstzug,maxschueler)FI .
+bearbeitungsmaskevorbereiten:standardstartproc(maskennamepreallg+text(
+auswertungsmaskennr));IF maskentitel<>niltextTHEN standardmaskenfeld(
+maskentitel,fnrmaskentitel)FI ;SELECT auswertungsmaskennrOF CASE mnr1:
+erstesfeld:=ef1;felderprozeile:=fpz1CASE mnr2:erstesfeld:=ef2;felderprozeile
+:=fpz1CASE mnr3:erstesfeld:=ef2;felderprozeile:=fpz3CASE mnr4:erstesfeld:=ef1
+;felderprozeile:=fpz4CASE mnr5:erstesfeld:=ef2;felderprozeile:=fpz1END
+SELECT ;standardeinstieg:=erstesfeld+1.laengenfestlegen:laengeklasse:=
+standardfeldlaenge(fnrklasse);laengename:=standardfeldlaenge(erstesfeld).
+naechsteportionlesen:blocklesenundausgeben.keinemehrda:NOT nochwelcheda.
+bestandleermelden:standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:
+#standardmeldung(meldfalscheauswahl,niltext);#infeld(pruefstatus).
+bestandundmaskesetzen:standardmeldung(meldwarten,niltext);bestimmebestand;
+setzestartkeys;pruefebestand;bestimmemaske.bestimmebestand:eineklasse:=FALSE
+;einejgst:=FALSE ;jgst:=jgstaufber(standardmaskenfeld(fnrjgst));zug:=
+standardmaskenfeld(fnrtutor);IF alleklassenTHEN alleklassensetzenELIF
+nureineklasseTHEN setzeklasseELSE setzejgstFI .alleklassensetzen:waspruefen:=
+allespruefen;sek2:=FALSE ;vergleichsjgst:=niltext;infeld(fnrjgst).
+nureineklasse:tutorenkurs:=zug<>niltext;tutorenkurs.setzeklasse:eineklasse:=
+TRUE ;waspruefen:=eineklassepruefen;vergleichsjgst:=jgst;vergleichszug:=zug;
+sek2:=FALSE ;infeld(fnrtutor).setzejgst:sek2:=istsek2(jgst);einejgst:=TRUE ;
+waspruefen:=einejgstpruefen;vergleichsjgst:=jgst;infeld(fnrjgst).
+setzestartkeys:inittupel(dnrschueler);putwert(fnrsustatuss,schuelerbestand);
+putwert(fnrsusgrpjgst,jgst);putwert(fnrsusgrpzugtut,zug);.pruefebestand:
+search(ixsustatjgstzug,FALSE );IF dbstatus=nullCAND (pruefungspeziell(
+waspruefen))THEN vergleichsjgst:=wert(fnrsusgrpjgst);vergleichszug:=wert(
+fnrsusgrpzugtut);nochwelcheda:=TRUE ;IF alleklassenTHEN waspruefen:=
+eineklassepruefenELIF NOT sek2CAND waspruefen=einejgstpruefenTHEN waspruefen
+:=eineklassepruefenFI ELSE bestandleermelden;return(tofather);LEAVE
+bearbeitungdifdaterfFI .bestimmemaske:setzeauswertungsnr;SELECT auswertungsnr
+OF CASE awfs1,awfs2,awfs3,awfs4:auswertungfremdspracheCASE awreli:
+auswertungreliCASE awkunst:auswertungkunstCASE awwp9:auswertungwp9CASE awwp10
+:auswertungwp10CASE awag:auswertungagEND SELECT .auswertungfremdsprache:INT
+VAR auswertungsmaskennr:=mnr1;maskentitel:=text(auswertungsnr);logarttext:=
+maskentitel;logarttextCAT logtext1.auswertungreli:auswertungsmaskennr:=mnr2;
+logarttext:=logtext2.auswertungkunst:auswertungsmaskennr:=mnr3;logarttext:=
+logtext3.auswertungwp9:auswertungsmaskennr:=mnr4;maskentitel:=titel09;
+logarttext:=logtext4.auswertungwp10:auswertungsmaskennr:=mnr4;maskentitel:=
+titel10;logarttext:=logtext4.auswertungag:auswertungsmaskennr:=mnr5;
+logarttext:=logtext5.setzeauswertungsnr:INT VAR indauswertungsnr;TEXT VAR
+maskentitel:=niltext;FOR indauswertungsnrFROM fnrfs1UPTO fnragREP IF
+standardmaskenfeld(indauswertungsnr)<>niltextTHEN auswertungsnr:=
+indauswertungsnr-auswertungsdistanz;LEAVE setzeauswertungsnrFI PER .END PROC
+bearbeitungdifdaterf;PROC difdaterfnichtspeichern:nichtspeichernmelden;
+startkeyssetzen;neuerblock.nichtspeichernmelden:standardmeldung(
+meldnichtspeichern,niltext);pause(10).startkeyssetzen:restoretupel(
+dnrschueler,sicherungstupel);changeindex.END PROC difdaterfnichtspeichern;
+PROC difdaterfspeichern:BOOL VAR falschesdatum:=FALSE ;INT VAR lv;
+pruefeplausibilitaet;IF dateninordnungTHEN speicherungdurchfuehren;
+startkeyssetzen;neuerblockELSE eingabefehler;return(tofather);FI .
+pruefeplausibilitaet:BOOL VAR dateninordnung:=TRUE ;standardmeldung(
+meldplausi,niltext);aktuellesfeldvorbelegen;FOR suindFROM 1UPTO schuelerzahl
+REP pruefezeile;IF NOT dateninordnungTHEN LEAVE pruefeplausibilitaetFI PER .
+aktuellesfeldvorbelegen:SELECT auswertungsnrOF CASE awfs1,awfs2,awfs3,awfs4:
+vorbelegungmitsprungCASE awreli:vorbelegungmitsprungCASE awkunst:
+vorbelegungmitsprungCASE awwp9,awwp10:vorbelegungohnesprungCASE awag:
+vorbelegungohnesprungEND SELECT .vorbelegungmitsprung:aktuellesfeld:=
+erstesfeld+1-felderprozeile.vorbelegungohnesprung:aktuellesfeld:=erstesfeld.
+pruefezeile:falschesdatum:=FALSE ;SELECT auswertungsnrOF CASE awfs1,awfs2,
+awfs3,awfs4:ueberpruefefachmitsprungCASE awreli:ueberpruefefachmitsprungCASE
+awkunst:ueberpruefefachmitsprungCASE awwp9,awwp10:ueberpruefefachinreiheCASE
+awag:ueberpruefefachinreiheEND SELECT .ueberpruefefachmitsprung:aktuellesfeld
+:=aktuellesfeld+felderprozeile;dateninordnung:=schluesselexistiert;IF
+auswertungsnr=awreliTHEN disablestop;FOR lvFROM 1UPTO 2REP putwert(
+fnrddreliunter+lv,datumskonversion(standardmaskenfeld(aktuellesfeld+lv)));IF
+iserrorTHEN clearerror;falschesdatum:=TRUE ;dateninordnung:=FALSE ;enablestop
+;LEAVE ueberpruefefachmitsprungFI ;PER ;enablestop;FI .ueberpruefefachinreihe
+:INT VAR i;FOR iFROM 1UPTO felderprozeile-1REP aktuellesfeldINCR 1;
+dateninordnung:=schluesselexistiert;IF NOT dateninordnungTHEN LEAVE
+ueberpruefefachinreiheFI PER ;aktuellesfeldINCR 1.schluesselexistiert:TEXT
+CONST schleintrag:=compress(subtext(standardmaskenfeld(aktuellesfeld),1,2));(
+schleintrag=niltext)COR schluesselvorhanden(schleintrag).
+speicherungdurchfuehren:logeintragvornehmen;aendernschleife;kurzwarten.
+logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;eintragCAT logarttext;
+eintragCAT " für ";IF alleklassenTHEN eintragCAT logtextalleklassenELSE
+eintragCAT vergleichsjgst;eintragCAT vergleichszugFI ;logeintrag(eintrag).
+kurzwarten:pause(10).aendernschleife:INT VAR suind;INT VAR zahlderaenderungen
+:=null;INT VAR satzindex:=erstesfeld;FOR suindFROM 1UPTO schuelerzahlREP
+behandleschuelersatz;satzindexINCR felderprozeilePER .behandleschuelersatz:
+IF datenveraendertTHEN fuehreaenderungaus;meldevollzugFI .fuehreaenderungaus:
+lesenvorbereiten;lesen;zurueckschreiben;.lesenvorbereiten:zahlderaenderungen
+INCR 1;putwert(fnrsufamnames,name(suind));putwert(fnrsurufnames,rufname(suind
+));putwert(fnrsugebdatums,gebdat(suind)).lesen:search(dnrschueler,TRUE );IF
+dbstatus=okCAND wert(fnrsutiddiffdaten)<>niltextTHEN readtid(dnrdiffdaten,
+wert(fnrsutiddiffdaten))ELSE dbstatus(notfound)FI .zurueckschreiben:IF
+dbstatus=0THEN dbwertesetzen;aenderntransaktionFI .dbwertesetzen:
+aktuellesfeld:=satzindex+1;SELECT auswertungsnrOF CASE awfs1,awfs2,awfs3,
+awfs4:setzefremdsprachenCASE awreli:setzereliCASE awkunst:setzekunstCASE
+awwp9,awwp10:setzewpCASE awag:setzeagEND SELECT .aenderntransaktion:replace(
+dnrdiffdaten,wert(fnrsutiddiffdaten)).meldevollzug:TEXT VAR meldungstext;IF
+dbstatus=0THEN meldungstext:=compress(standardmaskenfeld(satzindex))+
+meldtrenner;standardmeldung(meldspeicherung,meldungstext)ELSE meldungstext:=
+text(dbstatus)+meldtrenner;meldungstextCAT compress(standardmaskenfeld(
+satzindex));meldungstextCAT meldtrenner;standardmeldung(meldspeicherfehler,
+meldungstext);return(tofather);LEAVE difdaterfspeichernFI ;infeld(satzindex+1
+).datenveraendert:altedaten(suind)<>jetzigedaten.jetzigedaten:INT VAR datind;
+TEXT VAR datenindermaske:=niltext;FOR datindFROM 1UPTO felderprozeile-1REP
+datenindermaskeCAT text(standardmaskenfeld(satzindex+datind),
+standardfeldlaenge(satzindex+datind))PER ;datenindermaske.startkeyssetzen:
+restoretupel(dnrschueler,sicherungstupel);changeindex.eingabefehler:IF
+falschesdatumTHEN standardmeldung(meldnrfalschesdatum,niltext);infeld(
+aktuellesfeld+lv)ELSE standardmeldung(meldnrfalscherschluessel,niltext);
+infeld(aktuellesfeld)FI ;.END PROC difdaterfspeichern;BOOL PROC
+schluesselvorhanden(TEXT CONST eingabe):putwert(fnrffach,eingabe);search(
+dnrfaecher,TRUE );dbstatus=okEND PROC schluesselvorhanden;PROC neuerblock:
+evtlnaechsterbestand;blocklesenundausgeben;IF nochwelchedaTHEN return(
+tofather)ELSE enter(tograndfather)FI .evtlnaechsterbestand:IF schuelerzahl=
+maxschuelerTHEN IF sek2CAND NOT tutorenkursTHEN succ(ixsustatjgst)ELSE succ(
+ixsustatjgstzug);FI ;IF dbstatus<>0THEN nochwelcheda:=FALSE ;
+nochweiterebestaende:=FALSE ;FI FI ;IF NOT pruefungspeziell(waspruefen)THEN
+IF naechsterbestandTHEN changeindex;vergleichsjgst:=wert(fnrsusgrpjgst);
+vergleichszug:=wert(fnrsusgrpzugtut);startebildschirmblock(ixsustatjgstzug,
+maxschueler)ELSE nochwelcheda:=FALSE FI ELSE restoretupel(dnrschueler,
+sicherungstupel);changeindexFI .END PROC neuerblock;PROC
+blocklesenundausgeben:REP vorbereiten;gewuenschteszeigen;nachbereitenPER .
+vorbereiten:IF NOT nochwelchedaTHEN LEAVE blocklesenundausgebenFI ;
+standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:=
+erstesfeld.nachbereiten:nochwelcheda:=(schuelerzahl>null);IF nochwelcheda
+THEN savetupel(dnrschueler,sicherungstupel);restlichezeilenloeschen;infeld(
+standardanfang);standardfelderausgeben;infeld(standardeinstieg);LEAVE
+blocklesenundausgebenELIF naechsterbestandTHEN vergleichsjgst:=wert(
+fnrsusgrpjgst);vergleichszug:=wert(fnrsusgrpzugtut);#???#
+startebildschirmblock(ixsustatjgstzug,maxschueler);nochwelcheda:=TRUE ELSE
+LEAVE blocklesenundausgebenFI ;.restlichezeilenloeschen:INT VAR zeilenzaehler
+;INT VAR zeilenfeld:=(schuelerzahl*felderprozeile)+(erstesfeld-1);FOR
+zeilenzaehlerFROM schuelerzahlUPTO maxschuelerREP loeschezeilePER .
+loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP
+zeilenfeldINCR 1;standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank,
+zeilenfeld);feldschutz(zeilenfeld)PER ;.gewuenschteszeigen:SELECT
+auswertungsnrOF CASE awfs1:zeigefremdsprache1CASE awfs2:zeigefremdsprache2
+CASE awfs3:zeigefremdsprache3CASE awfs4:zeigefremdsprache4CASE awreli:
+zeigereliCASE awkunst:zeigekunstCASE awwp9:zeigewp9CASE awwp10:zeigewp10CASE
+awag:zeigeagEND SELECT ;.zeigefremdsprache1:fremdsprachenindex:=
+fnrdd1fremdfach;bildschirmblock(PROC fremdsprachezeigen,BOOL PROC (INT CONST
+)pruefungspeziell,waspruefen).zeigefremdsprache2:fremdsprachenindex:=
+fnrdd2fremdfach;bildschirmblock(PROC fremdsprachezeigen,BOOL PROC (INT CONST
+)pruefungspeziell,waspruefen).zeigefremdsprache3:fremdsprachenindex:=
+fnrdd3fremdfach;bildschirmblock(PROC fremdsprachezeigen,BOOL PROC (INT CONST
+)pruefungspeziell,waspruefen).zeigefremdsprache4:fremdsprachenindex:=
+fnrdd4fremdfach;bildschirmblock(PROC fremdsprachezeigen,BOOL PROC (INT CONST
+)pruefungspeziell,waspruefen).zeigereli:bildschirmblock(PROC relizeigen,BOOL
+PROC (INT CONST )pruefungspeziell,waspruefen).zeigekunst:bildschirmblock(
+PROC kunstzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen).zeigewp9:
+wpindex:=fnrddfach091a;bildschirmblock(PROC wpzeigen,BOOL PROC (INT CONST )
+pruefungspeziell,waspruefen).zeigewp10:wpindex:=fnrddfach101a;bildschirmblock
+(PROC wpzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen).zeigeag:
+bildschirmblock(PROC agzeigen,BOOL PROC (INT CONST )pruefungspeziell,
+waspruefen).END PROC blocklesenundausgeben;PROC namezeigen:IF ersterTHEN
+klassezeigenundrettenFI ;namenretten;standardmaskenfeld(text(schuelername+
+namenstrenner+schuelervorname,laengename),aktuellesfeld);readtid(dnrdiffdaten
+,wert(fnrsutiddiffdaten));aktuellesfeldINCR 1.erster:schuelerzahl=null.
+klassezeigenundretten:sek2:=istsek2(wert(fnrsusgrpjgst));IF sek2CAND (NOT
+tutorenkurs)THEN sek2sonderbehandlungELSE normalbehandlungFI .
+normalbehandlung:vergleichsjgst:=wert(fnrsusgrpjgst);vergleichszug:=wert(
+fnrsusgrpzugtut);standardmaskenfeld(text(vergleichsjgst+vergleichszug,
+laengeklasse),fnrklasse).sek2sonderbehandlung:vergleichsjgst:=wert(
+fnrsusgrpjgst);standardmaskenfeld(text(vergleichsjgst,laengeklasse),fnrklasse
+).namenretten:TEXT VAR schuelername,schuelervorname;schuelername:=wert(
+fnrsufamnames);schuelervorname:=wert(fnrsurufnames);schuelerzahlINCR 1;name(
+schuelerzahl):=schuelername;rufname(schuelerzahl):=schuelervorname;gebdat(
+schuelerzahl):=wert(fnrsugebdatums).END PROC namezeigen;PROC
+fremdsprachezeigen:namezeigen;gewaehltefremdsprachezeigen.
+gewaehltefremdsprachezeigen:TEXT VAR was;INT VAR lv;altedaten(schuelerzahl):=
+niltext;FOR lvFROM fremdsprachenindexUPTO fremdsprachenindex+2REP was:=wert(
+lv);standardmaskenfeld(was,aktuellesfeld);altedaten(schuelerzahl)CAT text(was
+,standardfeldlaenge(aktuellesfeld));feldfrei(aktuellesfeld);aktuellesfeld
+INCR 1PER .END PROC fremdsprachezeigen;PROC setzefremdsprachen:TEXT VAR was;
+INT VAR lv;FOR lvFROM fremdsprachenindexUPTO fremdsprachenindex+2REP was:=
+standardmaskenfeld(aktuellesfeld);putwert(lv,was);aktuellesfeldINCR 1;PER .
+END PROC setzefremdsprachen;PROC relizeigen:namezeigen;relidatenzeigen.
+relidatenzeigen:INT VAR was:=fnrddreliunter,lv;TEXT VAR daten;altedaten(
+schuelerzahl):=niltext;FOR lvFROM wasUPTO was+2REP IF lv=wasTHEN daten:=(wert
+(lv));ELSE daten:=datumrekonversion(wert(lv))FI ;standardmaskenfeld(daten,
+aktuellesfeld);altedaten(schuelerzahl)CAT text(daten,standardfeldlaenge(
+aktuellesfeld));feldfrei(aktuellesfeld);aktuellesfeldINCR 1PER .END PROC
+relizeigen;PROC setzereli:INT VAR was:=fnrddreliunter,lv;TEXT VAR daten;FOR
+lvFROM wasUPTO was+2REP IF lv=wasTHEN daten:=standardmaskenfeld(aktuellesfeld
+);ELSE daten:=datumskonversion(standardmaskenfeld(aktuellesfeld));FI ;putwert
+(lv,daten);aktuellesfeldINCR 1PER END PROC setzereli;PROC kunstzeigen:
+namezeigen;fachzeigen;merken.fachzeigen:TEXT VAR fach:=wert(fnrddkunstmusik);
+standardmaskenfeld(fach,aktuellesfeld);feldfrei(aktuellesfeld);aktuellesfeld
+INCR 1.merken:altedaten(schuelerzahl):=text(fach,2).END PROC kunstzeigen;
+PROC setzekunst:putwert(fnrddkunstmusik,standardmaskenfeld(aktuellesfeld));
+END PROC setzekunst;PROC wpzeigen:namezeigen;zeigefaecher;merken.zeigefaecher
+:INT VAR lv;TEXT VAR wpfaecher:=niltext,fach;FOR lvFROM wpindexUPTO wpindex+3
+REP fach:=wert(lv);standardmaskenfeld(fach,aktuellesfeld);feldfrei(
+aktuellesfeld);aktuellesfeldINCR 1;wpfaecherCAT text(fach,2)PER .merken:
+altedaten(schuelerzahl):=wpfaecher.END PROC wpzeigen;PROC setzewp:INT VAR lv;
+TEXT VAR fach;FOR lvFROM wpindexUPTO wpindex+3REP fach:=standardmaskenfeld(
+aktuellesfeld);putwert(lv,fach);aktuellesfeldINCR 1PER END PROC setzewp;PROC
+agzeigen:namezeigen;agdatenzeigen.agdatenzeigen:INT VAR agind,woher:=0,
+laengeag:=2;TEXT VAR ag:=niltext;altedaten(schuelerzahl):=niltext;FOR agind
+FROM 0UPTO maxag-1REP ag:=text(wert(fnrddagthema1+woher),laengeag);agCAT text
+(wert(fnrddagthema1b+woher),laengeag+1);agCAT text(wert(fnrddagthema1e+woher)
+,laengeag+1);IF compress(ag)<>niltextTHEN standardmaskenfeld(ag,aktuellesfeld
+);ELSE standardmaskenfeld(niltext,aktuellesfeld);FI ;altedaten(schuelerzahl)
+CAT text(ag,standardfeldlaenge(aktuellesfeld));feldfrei(aktuellesfeld);
+aktuellesfeldINCR 1;woherINCR 3PER .END PROC agzeigen;PROC setzeag:INT VAR
+agind,wohin:=0;TEXT VAR ag:=niltext;FOR agindFROM 0UPTO maxag-1REP ag:=
+standardmaskenfeld(aktuellesfeld);putwert(fnrddagthema1+wohin,subtext(ag,1,2)
+);putwert(fnrddagthema1b+wohin,subtext(ag,3,5));putwert(fnrddagthema1e+wohin,
+subtext(ag,6,8));wohinINCR 3;aktuellesfeldINCR 1;PER END PROC setzeag;PROC
+feldloeschen(INT CONST laenge):standardmaskenfeld(laenge*blank,aktuellesfeld)
+END PROC feldloeschen;BOOL PROC istsek2(TEXT CONST jgst):jgst>maxsek1END
+PROC istsek2;BOOL PROC naechsterbestand:nochweiterebestaende:=(alleklassen
+CAND pruefungspeziell(allespruefen))OR (einejgstCAND pruefungspeziell(
+einejgstpruefen))OR (eineklasseCAND pruefungspeziell(eineklassepruefen));
+nochweiterebestaendeEND PROC naechsterbestand;BOOL PROC pruefungspeziell(INT
+CONST wasistzutun):BOOL VAR b:=FALSE ;SELECT wasistzutunOF CASE allespruefen:
+pruefungalleklassen(b)CASE einejgstpruefen:pruefungeinejgst(b)CASE
+eineklassepruefen:pruefungeineklasse(b)END SELECT ;bEND PROC pruefungspeziell
+;PROC pruefungalleklassen(BOOL VAR bool):bool:=wert(fnrsustatuss)=
+schuelerbestandEND PROC pruefungalleklassen;PROC pruefungeinejgst(BOOL VAR
+bool):bool:=(wert(fnrsustatuss)=schuelerbestandCAND wert(fnrsusgrpjgst)=
+vergleichsjgst)END PROC pruefungeinejgst;PROC pruefungeineklasse(BOOL VAR
+bool):bool:=(wert(fnrsustatuss)=schuelerbestandCAND wert(fnrsusgrpjgst)=
+vergleichsjgstCAND wert(fnrsusgrpzugtut)=vergleichszug)END PROC
+pruefungeineklasse;END PACKET listenweisedifdaterf
+
diff --git a/app/schulis/2.2.1/src/1.listenweise erg nachpr b/app/schulis/2.2.1/src/1.listenweise erg nachpr
new file mode 100644
index 0000000..6b5a676
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listenweise erg nachpr
@@ -0,0 +1,250 @@
+PACKET listenweiseergnachprDEFINES bearbeitungergnachpr,
+ergnachprnichtspeichern,ergnachprspeichern:LET tofather=1,tograndfather=2,
+jgst5=5,jgst13=13,niltext="",blank=" ",namenstrenner=", ",null=0,punkt=".",
+meldtrenner="#";LET jgstufe10=10;LET einejgst=2,eineklasse=3;LET
+geaendertersatz="x",kznachpruefung="n",dreizehnnachprsatz="N";LET
+standardanfang=1,standardeinstieg=2,abstandzumnamen=2;LET maxschueler=15,
+erstesfeld=5,felderprozeile=6,schuelerproseite=16;LET gwklasse=1;LET
+bestandengrenzeeinstellig=4,bestandengrenzezweistellig="05",minnoteeinstellig
+=1,maxnoteeinstellig=6,minnotezweistellig="00",maxnotezweistellig="15",
+leernote="";LET meldbestleer=59,meldnichtspeichern=63,meldwarten=69,
+meldspeicherung=132,meldspeicherfehler=131,meldfalschesfach=147,
+meldungueltigenote=148,meldfalschesg=134,meldfehlendesfach=52,
+meldtransaktionsfehler=138,meldplausi=57,meldfalscheauswahl=56,
+meldzugtutorfehlt=52;LET pruefartgrenzen=3;LET fnrjgst=2,fnrtutor=3,fnrklasse
+=2,fnrname=3,fnrbetr=4,fnrfach=5,fnrnote=6,fnrzug=7;LET schuljahrkey=
+"Schuljahr",anfangschuljahrkey="Anfang Schulhalbjahr",halbjahr1="1",halbjahr2
+="2",bestandlaufsj="ls",bestandabgegangene="abg";LET allespruefen=1,
+einejgstpruefen=2,eineklassepruefen=3;LET anzkenndaten=3,sek2min=11;LET
+logtextbeginn="Anw. 1.4.9 Nachprüfungen für ",logtextalleklassen=
+"alle Klassen";BOOL VAR nochwelcheda,alleklassen;INT VAR waspruefen,
+laengeklasse,laengename,laengebetr,laengefach,laengenote,laengezugtutor,
+bestandindex,schuelerzahl,aktuellesfeld;ROW schuelerproseiteTEXT VAR name;
+ROW schuelerproseiteTEXT VAR rufname;ROW schuelerproseiteTEXT VAR gebdatum;
+ROW schuelerproseiteBOOL VAR dreizehner;ROW schuelerproseiteTEXT VAR
+altedaten;ROW schuelerproseiteTEXT VAR npfaecher;ROW anzkenndatenTEXT VAR key
+;TEXT VAR startkey1,startkey2,aktschuljahr,schuljahr,schulhalbjahr,hjdtupel,
+schuelertupel,sichtupel;PROC bearbeitungergnachpr:reinitparsing;
+eingangsbildschirmpruefen;IF eingangsbildschirmokTHEN
+initialisierungenvornehmen;naechsteportionlesen;IF keinemehrdaTHEN
+bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE
+eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmpruefen:INT VAR
+pruefstatus:=null;startkey1:=niltext;startkey2:=niltext;alleklassen:=FALSE ;
+IF standardmaskenfeld(fnrjgst)<>niltextTHEN standardpruefe(pruefartgrenzen,
+fnrjgst,jgst5,jgst13,niltext,pruefstatus);IF pruefstatus=nullTHEN startkey1:=
+jgstaufber(standardmaskenfeld(fnrjgst));startkey2:=standardmaskenfeld(
+fnrtutor);IF standardmaskenfeld(fnrtutor)=niltextTHEN bestandindex:=einejgst
+ELSE bestandindex:=eineklasseFI FI ELIF standardmaskenfeld(fnrtutor)<>niltext
+THEN pruefstatus:=fnrtutorELSE alleklassen:=TRUE FI .eingangsbildschirmok:
+pruefstatus=null.initialisierungenvornehmen:plausipruefungvorbereiten;
+bestandsetzen;standardstartproc(maske(vergleichsknoten));laengenfestlegen;IF
+waspruefen=einejgstpruefenAND sek2THEN startebildschirmblock(
+ixhjdsjhjverjgstkenn,maxschueler);ELSE startebildschirmblock(ixhjdsjhjverjgst
+,maxschueler);FI .sek2:int(startkey1)>=sek2min.bestandsetzen:bestimmebestand;
+setzestartkeys;pruefebestand.bestimmebestand:aktschuljahr:=schulkenndatum(
+schuljahrkey);schuljahr:=subtext(aktschuljahr,1,2);schuljahr:=text(int(
+schuljahr)-1)+schuljahr;schulhalbjahr:=halbjahr2;IF alleklassenTHEN
+alleklassensetzenELSE SELECT bestandindexOF CASE einejgst:bestandjgstCASE
+eineklasse:bestandklasseEND SELECT FI ;.alleklassensetzen:waspruefen:=
+allespruefen;infeld(fnrjgst).bestandjgst:waspruefen:=einejgstpruefen;infeld(
+fnrjgst).bestandklasse:waspruefen:=eineklassepruefen;infeld(fnrtutor).
+setzestartkeys:putwert(fnrhjdsj,schuljahr);putwert(fnrhjdhj,schulhalbjahr);
+putwert(fnrhjdjgst,startkey1);putwert(fnrhjdkennung,startkey2);putwert(
+fnrhjdversetzung,kznachpruefung).pruefebestand:search(ixhjdsjhjverjgstkenn,
+FALSE );IF dbstatus<>nullOR (NOT pruefungspeziell(waspruefen))THEN
+bestandleermelden;return(tofather);LEAVE bearbeitungergnachprELSE
+nochwelcheda:=TRUE FI .laengenfestlegen:laengeklasse:=standardfeldlaenge(
+fnrklasse);laengename:=standardfeldlaenge(fnrname);laengebetr:=
+standardfeldlaenge(fnrbetr);laengefach:=standardfeldlaenge(fnrfach);
+laengenote:=standardfeldlaenge(fnrnote);laengezugtutor:=standardfeldlaenge(
+fnrzug).plausipruefungvorbereiten:standardmeldung(meldwarten,niltext);.
+naechsteportionlesen:blocklesenundausgeben.keinemehrda:NOT nochwelcheda.
+bestandleermelden:infeld(fnrjgst);standardmeldung(meldbestleer,niltext).
+eingangsmaskenfehler:standardmeldung(meldfalscheauswahl,niltext);infeld(
+pruefstatus).END PROC bearbeitungergnachpr;PROC ergnachprnichtspeichern:
+nichtspeichernmelden;startkeyssetzen;neuerblock.nichtspeichernmelden:
+standardmeldung(meldnichtspeichern,niltext);pause(10).startkeyssetzen:
+restoretupel(dnrhalbjahresdaten,hjdtupel);changeindex.END PROC
+ergnachprnichtspeichern;PROC ergnachprspeichern:BOOL VAR
+halbjahresdateninzwischengeaendert,schuelerdateninzwischengeaendert;TEXT VAR
+altejgst:="",alterzug:="",neuejgst:="";pruefeplausibilitaet;IF dateninordnung
+THEN speicherungdurchfuehren;startkeyssetzen;neuerblockELSE eingabefehler;
+return(tofather)FI .pruefeplausibilitaet:standardmeldung(meldplausi,niltext);
+BOOL VAR dateninordnung:=TRUE ;INT VAR satzindex:=erstesfeld;INT VAR fehlernr
+;TEXT VAR fehlertext:=niltext;FOR suindFROM 1UPTO schuelerzahlREP pruefezeile
+;IF NOT dateninordnungTHEN LEAVE pruefeplausibilitaetFI ;satzindexINCR
+felderprozeilePER .pruefezeile:dateninordnung:=allesfreiCOR allesrichtig.
+allesrichtig:((noterichtig)CAND (schuelergrupperichtig))CAND (fachrichtig).
+noterichtig:((NOT fehlendertutor)CAND (gueltigenote))CAND (NOT fehlendesfach)
+.fehlendertutor:fehlernr:=meldzugtutorfehlt;aktuellesfeld:=satzindex+2;
+sitzengebliebenCAND keintutor.sitzengeblieben:IF length(eingegebenenote)=1
+THEN int(eingegebenenote)>bestandengrenzeeinstelligELSE eingegebenenote<
+bestandengrenzezweistelligFI .eingegebenenote:standardmaskenfeld(satzindex+1)
+.gueltigenote:fehlernr:=meldungueltigenote;aktuellesfeld:=satzindex+1;TEXT
+VAR pruefungsnote:=eingegebenenote;noteimbereich.noteimbereich:pruefungsnote=
+leernoteOR (notenichtzukleinCAND notenichtzugross).notenichtzuklein:IF length
+(pruefungsnote)=1THEN int(pruefungsnote)>=minnoteeinstelligELSE pruefungsnote
+>=minnotezweistelligFI .notenichtzugross:IF length(pruefungsnote)=1THEN int(
+pruefungsnote)<=maxnoteeinstelligELSE pruefungsnote<=maxnotezweistelligFI .
+fehlendesfach:fehlernr:=meldfehlendesfach;aktuellesfeld:=satzindex;bestanden
+CAND keinfach.bestanden:NOT sitzengeblieben.schuelergrupperichtig:fehlernr:=
+meldfalschesg;aktuellesfeld:=satzindex+2;fehlertext:=standardmaskenfeld(
+aktuellesfeld)+meldtrenner;keintutorCOR schuelergruppeimbestand.
+schuelergruppeimbestand:#????#putwert(fnrsgrpsj,aktschuljahr);putwert(
+fnrsgrphj,halbjahr1);putwert(fnrsgrpjgst,schuelergruppenschluessel);putwert(
+fnrsgrpkennung,eingegebenertutor);search(dnraktschuelergruppen,TRUE );
+dbstatus=null.schuelergruppenschluessel:IF bestandenCAND NOT
+dreizehnernachprueflingTHEN jahrgangsstufeeinshoeherELSE
+bisherigejahrgangsstufeFI .bisherigejahrgangsstufe:subtext(altedaten(suind),1
+,2).jahrgangsstufeeinshoeher:jgstaufber(text(int(bisherigejahrgangsstufe)+1))
+.eingegebenertutor:standardmaskenfeld(satzindex+2).fachrichtig:fehlernr:=
+meldfalschesfach;aktuellesfeld:=satzindex;fehlertext:=npfaecher(suind)+
+meldtrenner;keinfachCOR ausdemvorgegebenenbereich.ausdemvorgegebenenbereich:
+pos(fehlertext,eingegebenesfach)>null.eingegebenesfach:standardmaskenfeld(
+satzindex).allesfrei:(keintutorCAND keinfach)CAND keinenote.keintutor:
+eingegebenertutor=niltextCOR eingegebenertutor="abg.".keinenote:
+standardmaskenfeld(satzindex+1)=niltext.keinfach:eingegebenesfach=niltext.
+speicherungdurchfuehren:logeintragvornehmen;aendernschleife;kurzwarten.
+logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;IF alleklassenTHEN
+eintragCAT logtextalleklassenELSE eintragCAT startkey1;eintragCAT startkey2
+FI ;logeintrag(eintrag).kurzwarten:pause(10).aendernschleife:INT VAR suind;
+INT VAR zahlderaenderungen:=null;satzindex:=erstesfeld-abstandzumnamen;FOR
+suindFROM 1UPTO schuelerzahlREP behandleschuelersatz;satzindexINCR
+felderprozeilePER .behandleschuelersatz:IF datenveraendertTHEN
+aenderungvorbereiten;IF zwischenzeitlichgeaendertTHEN transaktionsfehlerELSE
+dateninpuffersetzen;schreibtransaktion;meldevollzugFI ;FI ;.datenveraendert:
+subtext(altedaten(suind),laengeklasse+1)<>jetzigedaten.jetzigedaten:INT VAR
+datenfeldanfang:=satzindex+abstandzumnamen;standardmaskenfeld(datenfeldanfang
+)+standardmaskenfeld(datenfeldanfang+1)+standardmaskenfeld(datenfeldanfang+2)
+.aenderungvorbereiten:lesenvorbereiten;lesen.lesenvorbereiten:
+zahlderaenderungenINCR 1;key(1):=name(suind);key(2):=rufname(suind);key(3):=
+datumrekonversion(gebdatum(suind));schluesselfuerhjddateisetzen.
+schluesselfuerhjddateisetzen:schluesselfuerhjdsetzen(dnrhalbjahresdaten,key,
+schuljahr,halbjahr2,"").lesen:search(dnrhalbjahresdaten,TRUE );
+halbjahresdateninzwischengeaendert:=(dbstatus<>ok);IF dbstatus=okTHEN
+saveupdateposition(dnrhalbjahresdaten);savetupel(dnrhalbjahresdaten,sichtupel
+);altejgst:=jgstaufber(wert(fnrhjdjgst));schluesselfuerschuelerdateisetzen;
+search(dnrschueler,TRUE );schuelerdateninzwischengeaendert:=(dbstatus<>ok);
+IF dbstatus=okTHEN alterzug:=wert(fnrsusgrpzugtut);saveupdateposition(
+dnrschueler);savetupel(dnrschueler,schuelertupel)FI FI .
+zwischenzeitlichgeaendert:halbjahresdateninzwischengeaendertOR
+schuelerdateninzwischengeaendert.transaktionsfehler:standardmeldung(
+meldtransaktionsfehler,niltext);return(tofather);infeld(satzindex+
+abstandzumnamen);LEAVE ergnachprspeichern.dateninpuffersetzen:IF jetzigedaten
+=niltextTHEN noteundfachsetzen;schuelerdatenaendernELIF nichtbestandenTHEN
+nichtbestandenneuELSE notenfachundneuerzugFI ;neuerzugtutorloeschen.
+schuelerdatenaendern:putwert(fnrsustatuss,bestandlaufsj);IF
+dreizehnernachprueflingTHEN putwert(fnrsusgrpjgst,text(jgst13));putwert(
+fnrsuartzugang,dreizehnnachprsatz)ELSE neuejgst:=jgstaufber(text(int(altejgst
+)+1));putwert(fnrsusgrpjgst,neuejgst);putwert(fnrsusgrpzugtut,wert(
+fnrhjdkennung));putwert(fnrsuartzugang,kznachpruefung)FI .nichtbestanden:
+datenfeldanfang:=satzindex+abstandzumnamen;IF length(standardmaskenfeld(
+datenfeldanfang+1))=1THEN int(standardmaskenfeld(datenfeldanfang+1))>
+bestandengrenzeeinstelligELSE standardmaskenfeld(datenfeldanfang+1)<
+bestandengrenzezweistelligFI .notenfachundneuerzug:noteundfachsetzen;IF
+dreizehnernachprueflingTHEN dreizehnerabmeldenELSE neuejgst:=jgstaufber(text(
+int(altejgst)+1));putwert(fnrsusgrpjgst,neuejgst);putwert(fnrsuartzugang,
+kznachpruefung);neuerzugsetzenFI .noteundfachsetzen:TEXT VAR fach:=
+standardmaskenfeld(datenfeldanfang);TEXT VAR note:=standardmaskenfeld(
+datenfeldanfang+1);putwert(fnrhjdnachfach,fach);putwert(fnrhjdnacherg,note).
+dreizehnernachpruefling:dreizehner(suind).dreizehnerabmelden:putwert(
+fnrsustatuss,bestandabgegangene);putwert(fnrsuabgdats,schulkenndatum(
+anfangschuljahrkey)).neuerzugsetzen:TEXT VAR neuerzug;neuerzug:=
+standardmaskenfeld(datenfeldanfang+2);IF neuerzug<>niltextTHEN IF neuerzug<>
+alterzugTHEN putwert(fnrsusgrpzugtut,neuerzug);FI ELSE IF jgstaufber(wert(
+fnrsusgrpjgst))=altejgstTHEN putwert(fnrsusgrpzugtut,wert(fnrhjdkennung))FI
+FI ;zuginakthjdaendern.zuginakthjdaendern:savetupel(dnrhalbjahresdaten,
+sichtupel);neueklasseinhalbjahresdateneintragen(key,aktschuljahr,halbjahr1,
+neuejgst,neuerzug);IF dbstatus=okTHEN putwert(fnrsutidakthjd,gettid)FI ;
+restoretupel(dnrhalbjahresdaten,sichtupel).nichtbestandenneu:
+noteundfachsetzen;setzezugang;savetupel(dnrhalbjahresdaten,sichtupel);
+setzejgstrunter;halbjahresdatenbearbeiten;restoretupel(dnrhalbjahresdaten,
+sichtupel).setzezugang:putwert(fnrsuartzugang,geaendertersatz).
+setzejgstrunter:neuejgst:=jgstaufber(text(int(altejgst)));neuerzug:=
+standardmaskenfeld(datenfeldanfang+2);putwert(fnrsusgrpjgst,neuejgst);putwert
+(fnrsusgrpzugtut,neuerzug);putwert(fnrsustatuss,bestandlaufsj);.
+halbjahresdatenbearbeiten:IF NOT dreizehnernachprueflingTHEN
+nachfolgendehjdsloeschen;FI .nachfolgendehjdsloeschen:halbjahresdatenloeschen
+(PROC (INT CONST )succ,key,halbjahr2,int(neuejgst),FALSE );.
+neuerzugtutorloeschen:putwert(fnrsuneuerzugtut,niltext).schreibtransaktion:
+restoreupdateposition(dnrhalbjahresdaten);selupdate(dnrhalbjahresdaten);IF
+dbstatus<>okTHEN restoretupel(dnrschueler,schuelertupel)ELSE
+restoreupdateposition(dnrschueler);selupdate(dnrschueler);IF dbstatus<>ok
+THEN restoretupel(dnrschueler,schuelertupel)ELSE IF int(neuejgst)=int(
+altejgst)THEN evtlkurswahldatenfuerwiederholerbehandelnFI ;FI FI .
+evtlkurswahldatenfuerwiederholerbehandeln:IF int(neuejgst)>=jgstufe10THEN
+kurswahlserveraktualisieren(neuejgst,"","")FI ;IF (int(neuejgst)+1)>=
+jgstufe10THEN kurswahlserveraktualisieren(text(int(neuejgst)+1),"","")FI .
+meldevollzug:TEXT VAR meldungstext;IF dbstatus=0THEN meldungstext:=compress(
+standardmaskenfeld(satzindex))+meldtrenner;standardmeldung(meldspeicherung,
+meldungstext)ELSE meldungstext:=text(dbstatus)+meldtrenner;meldungstextCAT
+compress(standardmaskenfeld(satzindex));meldungstextCAT meldtrenner;
+standardmeldung(meldspeicherfehler,meldungstext);return(tofather);LEAVE
+ergnachprspeichernFI ;infeld(satzindex+abstandzumnamen).startkeyssetzen:
+restoretupel(dnrhalbjahresdaten,hjdtupel);changeindex.eingabefehler:
+standardmeldung(fehlernr,fehlertext);infeld(aktuellesfeld).END PROC
+ergnachprspeichern;PROC neuerblock:blocklesenundausgeben;IF nochwelchedaTHEN
+return(tofather)ELSE enter(tograndfather)FI .END PROC neuerblock;PROC
+blocklesenundausgeben:vorbereiten;initgruppenwechsel;gewuenschteszeigen;
+nachbereiten.vorbereiten:IF NOT nochwelchedaTHEN LEAVE blocklesenundausgeben
+FI ;standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:=
+standardeinstieg.gewuenschteszeigen:bildschirmblock(PROC datenzeigen,BOOL
+PROC (INT CONST )pruefungspeziell,waspruefen).nachbereiten:nochwelcheda:=(
+schuelerzahl>null);IF nochwelchedaTHEN savetupel(dnrhalbjahresdaten,hjdtupel)
+;restlichezeilenloeschen;infeld(standardanfang);standardfelderausgebenELSE
+LEAVE blocklesenundausgebenFI ;infeld(erstesfeld).restlichezeilenloeschen:
+INT VAR zeilenzaehler;INT VAR zeilenfeld:=(schuelerzahl*felderprozeile)+1;
+FOR zeilenzaehlerFROM schuelerzahlUPTO schuelerproseite-1REP loeschezeilePER
+.loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP
+zeilenfeldINCR 1;standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank,
+zeilenfeld);feldschutz(zeilenfeld)PER ;.END PROC blocklesenundausgeben;PROC
+datenzeigen:TEXT VAR merkdaten:=niltext;zaehlen;zeigenundmerken.zaehlen:
+schuelerzahlINCR 1.zeigenundmerken:altejgstzeigen;namezeigen;aktjgstzeigen;
+fachzeigen;npfaechermerken;notezeigen;neuerzugtutorzeigen.altejgstzeigen:IF
+dreizehnerzurnachpruefungTHEN aenderungsetzenELSE neusetzenFI ;
+betreffendeszeigen.dreizehnerzurnachpruefung:intwert(fnrhjdjgst)=jgst13.
+aenderungsetzen:BOOL VAR satzgeaendert:=TRUE ;.neusetzen:satzgeaendert:=
+FALSE ;.betreffendeszeigen:TEXT VAR alteklasse:=jgstaufber(wert(fnrhjdjgst))+
+wert(fnrhjdkennung);dreizehner(schuelerzahl):=satzgeaendert;
+standardmaskenfeld(text(alteklasse,laengeklasse),aktuellesfeld);merkdaten:=
+text(alteklasse,laengeklasse);gruppenwechsel(alteklasse,gwklasse,laengeklasse
+,1,aktuellesfeld);.namezeigen:namenretten;standardmaskenfeld(text(
+schuelername+namenstrenner+schuelervorname,laengename),aktuellesfeld);
+aktuellesfeldINCR 1.namenretten:TEXT VAR schuelername,schuelervorname;
+schuelername:=wert(fnrhjdfamnames);schuelervorname:=wert(fnrhjdrufnames);name
+(schuelerzahl):=schuelername;rufname(schuelerzahl):=schuelervorname;gebdatum(
+schuelerzahl):=wert(fnrhjdgebdats).aktjgstzeigen:TEXT VAR aktklasse:=niltext;
+schluesselfuerschuelerdateisetzen;search(dnrschueler,TRUE );IF dbstatus=ok
+THEN aktklasse:=jgstaufber(wert(fnrsusgrpjgst))+wert(fnrsusgrpzugtut)FI ;
+standardmaskenfeld(aktklasse,aktuellesfeld);aktuellesfeldINCR 1.fachzeigen:
+TEXT VAR fach:=niltext,faecher:=niltext;fach:=wert(fnrhjdnachfach);merkdaten
+CAT fach;standardmaskenfeld(fach,aktuellesfeld);feldfrei(aktuellesfeld);
+aktuellesfeldINCR 1.npfaechermerken:INT VAR fachind;FOR fachindFROM
+fnrhjdnachfach1UPTO fnrhjdnachfach1+2REP faecherCAT wert(fachind);faecherCAT
+namenstrenner;PER ;npfaecher(schuelerzahl):=faecher.notezeigen:TEXT VAR note;
+note:=wert(fnrhjdnacherg);merkdatenCAT note;standardmaskenfeld(note,
+aktuellesfeld);feldfrei(aktuellesfeld);aktuellesfeldINCR 1.
+neuerzugtutorzeigen:#????#TEXT VAR tutor;IF wert(fnrsustatuss)=
+bestandabgegangeneTHEN tutor:=bestandabgegangene+punktELSE tutor:=niltext;#
+wert(fnrsusgrpzugtut);15.07.87dr#FI ;merkdatenCAT tutor;standardmaskenfeld(
+tutor,aktuellesfeld);altedaten(schuelerzahl):=merkdaten;feldfrei(
+aktuellesfeld);aktuellesfeldINCR 1.END PROC datenzeigen;PROC
+schluesselfuerschuelerdateisetzen:inittupel(dnrschueler);putwert(
+fnrsufamnames,wert(fnrhjdfamnames));putwert(fnrsurufnames,wert(fnrhjdrufnames
+));putwert(fnrsugebdatums,wert(fnrhjdgebdats));.END PROC
+schluesselfuerschuelerdateisetzen;PROC feldloeschen(INT CONST laenge):
+standardmaskenfeld(laenge*blank,aktuellesfeld)END PROC feldloeschen;BOOL
+PROC pruefungspeziell(INT CONST wasistzutun):BOOL VAR b:=FALSE ;SELECT
+wasistzutunOF CASE allespruefen:pruefungalleklassen(b)CASE einejgstpruefen:
+pruefungeinejgst(b)CASE eineklassepruefen:pruefungeineklasse(b)END SELECT ;b
+END PROC pruefungspeziell;PROC pruefungalleklassen(BOOL VAR bool):bool:=(wert
+(fnrhjdsj)=schuljahrCAND wert(fnrhjdhj)=schulhalbjahrCAND wert(
+fnrhjdversetzung)=kznachpruefung)END PROC pruefungalleklassen;PROC
+pruefungeinejgst(BOOL VAR bool):bool:=(wert(fnrhjdsj)=schuljahrCAND wert(
+fnrhjdhj)=schulhalbjahrCAND wert(fnrhjdversetzung)=kznachpruefungCAND
+jgstaufber(wert(fnrhjdjgst))=startkey1)END PROC pruefungeinejgst;PROC
+pruefungeineklasse(BOOL VAR bool):bool:=(wert(fnrhjdsj)=schuljahrCAND wert(
+fnrhjdhj)=schulhalbjahrCAND wert(fnrhjdversetzung)=kznachpruefungCAND
+jgstaufber(wert(fnrhjdjgst))=startkey1CAND wert(fnrhjdkennung)=startkey2)END
+PROC pruefungeineklasse;END PACKET listenweiseergnachpr
+
diff --git a/app/schulis/2.2.1/src/1.listenweise erg vers konf b/app/schulis/2.2.1/src/1.listenweise erg vers konf
new file mode 100644
index 0000000..83ce515
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listenweise erg vers konf
@@ -0,0 +1,219 @@
+PACKET listenweiseergverskonfDEFINES bearbeitungergverskonf,
+ergverskonfnichtspeichern,ergverskonfspeichern:LET tofather=1,tograndfather=2
+,jgst5=5,jgst13=13,leerejgst=" ",maxfach=3,niltext="",blank=" ",
+namenstrenner=", ",unterstrich="_",null=0,leererzug=" ",meldtrenner="#";
+LET nachpruefling="n",versetzter="vs",wiederholer="wf";LET schuljahrkey=
+"Schuljahr",schulhalbjahrkey="Schulhalbjahr";LET maxschueler=15,erstesfeld=2,
+felderprozeile=4,schuelerproseite=16,laengefach=2;LET gwklasse=1;LET
+meldbestleer=59,meldnichtspeichern=63,meldplausi=57,meldwarten=69,
+meldspeicherung=132,meldspeicherfehler=131,meldfalscheauswahl=56,
+meldtransaktionsfehler=138,meldfalscheeingabe1=136,meldfalscheeingabe2=137,
+meldungueltigesfach=149;LET pruefartgrenzen=3;LET fnrjgst=2,fnrtutor=3,
+fnrklasse=2,fnrname=3,fnrvers=4,fnrnachprfaecher=5;LET einejgst=2,eineklasse=
+3;LET standardanfang=1,standardeinstieg=4;LET allespruefen=1,einejgstpruefen=
+2,eineklassepruefen=3;LET anzkenndaten=3,sek2min=11,laufbestand="ls";LET
+logtextbeginn="Anw. 1.4.4 Versetzungen für ",logtextalleklassen=
+"alle Klassen";BOOL VAR nochwelcheda,alleklassen;INT VAR waspruefen:=0;INT
+VAR laengeklasse,laengename,laengenachprfaecher,bestandindex,laengevers,
+schuelerzahl,aktuellesfeld;ROW schuelerproseiteROW anzkenndatenTEXT VAR
+kenndatum;ROW schuelerproseiteTEXT VAR altedaten;TEXT VAR schuelertid:="",
+hjdtid:="";TEXT VAR versetzungszeichen:="";TEXT VAR startkey1,startkey2,
+sicherungstupel,vergleichsjgst,zulaessigekuerzel,schuljahr,schulhalbjahr,
+gueltigejgst,gueltigerzug;TEXT VAR fachkatalog:="";LET trenner="�";PROC
+bearbeitungergverskonf:reinitparsing;eingangsbildschirmpruefen;IF
+eingangsbildschirmokTHEN initialisierungenvornehmen;naechsteportionlesen;IF
+keinemehrdaTHEN bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE
+eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmpruefen:INT VAR
+pruefstatus:=null;startkey1:=niltext;startkey2:=niltext;vergleichsjgst:=
+niltext;alleklassen:=FALSE ;IF standardmaskenfeld(fnrjgst)<>niltextTHEN
+standardpruefe(pruefartgrenzen,fnrjgst,jgst5,jgst13,niltext,pruefstatus);IF
+pruefstatus=nullTHEN startkey1:=jgstaufber(standardmaskenfeld(fnrjgst));
+vergleichsjgst:=startkey1;startkey2:=standardmaskenfeld(fnrtutor);IF
+standardmaskenfeld(fnrtutor)=niltextTHEN bestandindex:=einejgstELSE
+bestandindex:=eineklasseFI FI ELIF standardmaskenfeld(fnrtutor)<>niltextTHEN
+pruefstatus:=fnrtutorELSE alleklassen:=TRUE FI .eingangsbildschirmok:
+pruefstatus=null.initialisierungenvornehmen:plausipruefungvorbereiten;
+bestandsetzen;standardstartproc(maske(vergleichsknoten));laengenfestlegen;IF
+waspruefen=einejgstpruefenCAND sek2THEN startebildschirmblock(ixsustatjgst,
+maxschueler);ELSE startebildschirmblock(ixsustatjgstzug,maxschueler);FI .sek2
+:int(startkey1)>=sek2min.bestandsetzen:bestimmebestand;setzestartkeys;
+pruefebestand.bestimmebestand:schuljahr:=schulkenndatum(schuljahrkey);
+schulhalbjahr:=schulkenndatum(schulhalbjahrkey);IF alleklassenTHEN
+alleklassensetzenELSE SELECT bestandindexOF CASE einejgst:bestandjgstCASE
+eineklasse:bestandklasseEND SELECT FI ;.alleklassensetzen:waspruefen:=
+allespruefen;infeld(fnrjgst).bestandjgst:waspruefen:=einejgstpruefen;infeld(
+fnrjgst).bestandklasse:waspruefen:=eineklassepruefen;infeld(fnrtutor).
+setzestartkeys:inittupel(dnrschueler);putwert(fnrsustatuss,laufbestand);
+putwert(fnrsusgrpjgst,startkey1);putwert(fnrsusgrpzugtut,startkey2);.
+pruefebestand:IF waspruefen=einejgstpruefenCAND sek2THEN search(ixsustatjgst,
+FALSE )ELSE search(ixsustatjgstzug,FALSE )FI ;IF dbstatus<>nullCOR (NOT
+pruefungspeziell(waspruefen))THEN bestandleermelden;return(tofather);LEAVE
+bearbeitungergverskonfELSE nochwelcheda:=TRUE FI .laengenfestlegen:
+laengeklasse:=standardfeldlaenge(fnrklasse);laengename:=standardfeldlaenge(
+fnrname);laengevers:=standardfeldlaenge(fnrvers);laengenachprfaecher:=
+standardfeldlaenge(fnrnachprfaecher).plausipruefungvorbereiten:
+standardmeldung(meldwarten,niltext);zulaessigekuerzel:=nachpruefling+
+versetzter+wiederholer+blank.naechsteportionlesen:blocklesenundausgeben.
+keinemehrda:NOT nochwelcheda.bestandleermelden:infeld(fnrjgst);
+standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:standardmeldung(
+meldfalscheauswahl,niltext);infeld(pruefstatus).END PROC
+bearbeitungergverskonf;PROC ergverskonfnichtspeichern:nichtspeichernmelden;
+startkeyssetzen;neuerblock.nichtspeichernmelden:standardmeldung(
+meldnichtspeichern,niltext);pause(10).startkeyssetzen:restoretupel(
+dnrschueler,sicherungstupel);#dr02.05.88#changeindex.END PROC
+ergverskonfnichtspeichern;PROC ergverskonfspeichern:BOOL VAR hjdgefunden:=
+FALSE ;pruefeplausibilitaet;IF dateninordnungTHEN speicherungdurchfuehren;
+startkeyssetzen;neuerblockELSE eingabefehler;return(tofather)FI .
+pruefeplausibilitaet:standardmeldung(meldplausi,niltext);BOOL VAR
+dateninordnung:=TRUE ,richtigesverskz,ungueltigefachangaben:=FALSE ,
+fachfehler:=FALSE ;INT VAR versfeld:=felderprozeile;FOR suindFROM 1UPTO
+schuelerzahlREP pruefezeile;IF NOT dateninordnungTHEN LEAVE
+pruefeplausibilitaetFI ;versfeldINCR felderprozeilePER .pruefezeile:TEXT VAR
+gefundenesverskz:=standardmaskenfeld(versfeld);richtigesverskz:=
+gefundenesverskz=niltextOR (pos(zulaessigekuerzel,gefundenesverskz)>null);IF
+richtigesverskzTHEN pruefefachangabenzuverskz;IF ungueltigefachangabenTHEN
+dateninordnung:=FALSE FI ELSE dateninordnung:=FALSE FI .
+pruefefachangabenzuverskz:IF gefundenesverskz<>nachprueflingTHEN IF NOT
+keineeingabenTHEN ungueltigefachangaben:=TRUE FI ELSE pruefefachangaben;IF
+fachfehlerTHEN ungueltigefachangaben:=TRUE FI FI .pruefefachangaben:IF
+fachkatalog=niltextTHEN holeaktuellenfachkatalogFI ;TEXT VAR fachangaben:=
+standardmaskenfeld(versfeld+1);INT VAR lenfachang:=length(fachangaben);INT
+VAR fachanzahl:=(lenfachang+1)DIV laengefach;INT VAR i;TEXT VAR fach;FOR i
+FROM 0UPTO fachanzahl-1REP fach:=subtext(fachangaben,i*laengefach+1,i*
+laengefach+laengefach);changeall(fach,unterstrich,niltext);fach:=compress(
+fach);IF fach<>niltextCAND fachungueltig(fach)THEN fachfehler:=TRUE FI UNTIL
+fachfehlerPER .keineeingaben:BOOL VAR b:=TRUE ;INT VAR lv;TEXT VAR t:=
+standardmaskenfeld(versfeld+1);FOR lvFROM 1UPTO length(t)REP b:=(tSUB lv)=
+unterstrichUNTIL NOT bPER ;b.speicherungdurchfuehren:vorbereiten;
+logeintragvornehmen;aendernschleife;kurzwarten.logeintragvornehmen:TEXT VAR
+eintrag:=logtextbeginn;IF alleklassenTHEN eintragCAT logtextalleklassenELSE
+eintragCAT startkey1;eintragCAT startkey2FI ;logeintrag(eintrag).kurzwarten:
+pause(10).vorbereiten:gueltigejgst:=vergleichsjgst;gueltigerzug:=startkey2;.
+aendernschleife:INT VAR suind;INT VAR zahlderaenderungen:=null;INT VAR
+satzindex:=felderprozeile-1;FOR suindFROM 1UPTO schuelerzahlREP
+behandleschuelersatz;satzindexINCR felderprozeilePER .behandleschuelersatz:
+IF vergleichsjgst=niltextTHEN gueltigejgstneubestimmenFI ;IF startkey2=
+niltextTHEN gueltigenzugneubestimmenFI ;IF datenveraendertTHEN
+fuehreaenderungaus;meldevollzugFI .gueltigejgstneubestimmen:TEXT VAR
+pruefjgst:=subtext(standardmaskenfeld(satzindex-1),1,2);IF pruefjgst<>
+leerejgstTHEN gueltigejgst:=pruefjgstFI ;.gueltigenzugneubestimmen:TEXT VAR
+pruefzug:=subtext(standardmaskenfeld(satzindex-1),3,6);IF pruefzug<>leererzug
+THEN gueltigerzug:=pruefzugFI .datenveraendert:altedaten(suind)<>(
+standardmaskenfeld(satzindex+1)+standardmaskenfeld(satzindex+2)).
+fuehreaenderungaus:lesenvorbereiten;lesen;hjdgefunden:=dbstatus=ok;IF
+dbstatus=okTHEN saveupdateposition(dnrhalbjahresdaten);hjdtid:=gettid;
+versetzungszeichen:=wert(fnrhjdversetzung);zurueckschreiben;ELSE
+versetzungszeichen:=niltext;neuensatzankoppelnFI .lesenvorbereiten:
+zahlderaenderungenINCR 1;schluesselfuerhjdsetzen(dnrhalbjahresdaten,kenndatum
+[suind],schuljahr,schulhalbjahr,gueltigejgst);.lesen:search(
+dnrhalbjahresdaten,TRUE );.zurueckschreiben:IF datenaenderungTHEN
+transaktionsfehlerELSE schreibtransaktionFI .datenaenderung:(
+versetzungsergebnis+nachpruefungsfaecher)<>altedaten(suind).
+versetzungsergebnis:wert(fnrhjdversetzung).transaktionsfehler:standardmeldung
+(meldtransaktionsfehler,niltext);return(tofather);infeld(suind*felderprozeile
+);LEAVE ergverskonfspeichern.schreibtransaktion:setzedaten;
+vorhandenensatzaendern.setzedaten:setzeverskz;setzefaecherdaten.setzeverskz:
+putwert(fnrhjdversetzung,standardmaskenfeld(satzindex+1)).setzefaecherdaten:
+INT VAR fachindanfang:=1,fachindende:=2;INT VAR fachind;TEXT VAR
+eingegebenenpfaecher:=standardmaskenfeld(satzindex+2);TEXT VAR einzelfach;
+FOR fachindFROM 0UPTO maxfach-1REP einzelfach:=subtext(eingegebenenpfaecher,
+fachindanfang,fachindende);IF einzelfach<>laengefach*unterstrichTHEN
+changeall(einzelfach,unterstrich,niltext);putwert(fnrhjdnachfach1+fachind,
+compress(einzelfach))ELSE putwert(fnrhjdnachfach1+fachind,niltext)FI ;
+fachindanfangINCR laengefach;fachindendeINCR laengefach;PER .
+vorhandenensatzaendern:IF standardmaskenfeld(satzindex+1)<>versetzungszeichen
+THEN restoreupdateposition(dnrhalbjahresdaten);#update(dnrhalbjahresdaten);
+dr10.05.88#selupdate(dnrhalbjahresdaten)ELSE replace(dnrhalbjahresdaten,
+hjdtid)FI .neuensatzankoppeln:setzedaten;putwert(fnrhjdkennung,compress(
+gueltigerzug));insert(dnrhalbjahresdaten);hjdtid:=gettid;.meldevollzug:TEXT
+VAR meldungstext;IF dbstatus=0THEN IF NOT hjdgefundenTHEN
+neueshjdtidinschuelerdateieintragen(satzindex+1);FI ;#dr04.05.88hjdtid:=
+gettid;neueshjdtidinschuelerdateieintragen(satzindex+1);##dr10.05.88
+eventuellinstatwuerfelaendern(satzindex+1);#meldungstext:=compress(
+standardmaskenfeld(satzindex))+meldtrenner;standardmeldung(meldspeicherung,
+meldungstext)ELSE meldungstext:=text(dbstatus)+meldtrenner;meldungstextCAT
+compress(standardmaskenfeld(satzindex));meldungstextCAT meldtrenner;
+standardmeldung(meldspeicherfehler,meldungstext);return(tofather);LEAVE
+ergverskonfspeichernFI ;infeld(satzindex+1).startkeyssetzen:restoretupel(
+dnrschueler,sicherungstupel);#dr02.05.88#changeindex.eingabefehler:IF NOT
+richtigesverskzTHEN standardmeldung(meldfalscheeingabe1,standardmaskenfeld(
+versfeld)+meldtrenner);infeld(versfeld)ELIF fachfehlerTHEN standardmeldung(
+meldungueltigesfach,fach+meldtrenner);infeld(versfeld+1)ELSE standardmeldung(
+meldfalscheeingabe2,niltext);infeld(versfeld+1)FI .END PROC
+ergverskonfspeichern;PROC neuerblock:blocklesenundausgeben;IF nochwelcheda
+THEN return(tofather)ELSE enter(tograndfather)FI .END PROC neuerblock;PROC
+blocklesenundausgeben:parsenooffields(fnrhjdnachfach3-dnrhalbjahresdaten);
+vorbereiten;initgruppenwechsel;gewuenschteszeigen;nachbereiten;reinitparsing.
+vorbereiten:IF NOT nochwelchedaTHEN reinitparsing;LEAVE blocklesenundausgeben
+FI ;standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:=
+erstesfeld.gewuenschteszeigen:parsenooffields(12);#dr04.05.88#bildschirmblock
+(PROC datenzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen);
+reinitparsing#dr04.05.88#.nachbereiten:nochwelcheda:=(schuelerzahl>null);IF
+nochwelchedaTHEN savetupel(dnrschueler,sicherungstupel);#dr02.05.88#
+restlichezeilenloeschen;infeld(standardanfang);standardfelderausgebenELSE
+LEAVE blocklesenundausgebenFI ;infeld(standardeinstieg).
+restlichezeilenloeschen:INT VAR zeilenzaehler;INT VAR zeilenfeld:=(
+schuelerzahl*felderprozeile)+1;FOR zeilenzaehlerFROM schuelerzahlUPTO
+maxschuelerREP loeschezeilePER .loeschezeile:INT VAR zeilenincr;FOR
+zeilenincrFROM 1UPTO felderprozeileREP zeilenfeldINCR 1;standardmaskenfeld(
+standardfeldlaenge(zeilenfeld)*blank,zeilenfeld);feldschutz(zeilenfeld)PER .
+END PROC blocklesenundausgeben;PROC namezeigen:namenretten;standardmaskenfeld
+(text(schuelername+namenstrenner+schuelervorname,laengename),aktuellesfeld);
+aktuellesfeldINCR 1.namenretten:TEXT VAR schuelername,schuelervorname;
+schuelername:=wert(fnrsufamnames);schuelervorname:=wert(fnrsurufnames);
+kenndatum[schuelerzahl][1]:=schuelername;kenndatum[schuelerzahl][2]:=
+schuelervorname;kenndatum[schuelerzahl][3]:=datumrekonversion(wert(
+fnrsugebdatums));.END PROC namezeigen;PROC datenzeigen:BOOL VAR neuerstellen
+:=FALSE ;zeigen;merken.zeigen:vorbereiten;alteklassezeigen;namezeigen;
+halbjahresdatensuchen;versetzungsdatenzeigen.vorbereiten:schuelerzahlINCR 1;
+TEXT VAR merkdaten:=niltext.alteklassezeigen:TEXT CONST alteklasse:=
+jgstaufber(wert(fnrsusgrpjgst))+wert(fnrsusgrpzugtut);gruppenwechsel(
+alteklasse,gwklasse,laengeklasse,1,aktuellesfeld).halbjahresdatensuchen:
+inittupel(dnrhalbjahresdaten);#schluesselfuerhjdsetzen(dnrhalbjahresdaten,
+kenndatum[schuelerzahl],schuljahr,schulhalbjahr,startkey1);search(
+dnrhalbjahresdaten,TRUE );neuerstellen:=dbstatus<>ok##dr04.05.88#IF wert(
+fnrsutidakthjd)<>niltext#neudr04.05.88#THEN disablestop;readtid(
+dnrhalbjahresdaten,wert(fnrsutidakthjd));IF iserrorTHEN clearerror;
+neuerstellen:=TRUE ELSE neuerstellen:=FALSE FI ;enablestopELSE neuerstellen:=
+TRUE FI .versetzungsdatenzeigen:versetzunginmaske;feldfreigeben;
+nachprfaecherinmaske;feldfreigeben.versetzunginmaske:TEXT VAR versetzungskz:=
+niltext;IF NOT neuerstellenTHEN versetzungskz:=wert(fnrhjdversetzung);FI ;
+merkdatenCAT versetzungskz;standardmaskenfeld(versetzungskz,aktuellesfeld).
+nachprfaecherinmaske:TEXT VAR nachprfaecher:=niltext;IF NOT neuerstellenTHEN
+nachprfaecher:=nachpruefungsfaecher;FI ;merkdatenCAT nachprfaecher;
+standardmaskenfeld(nachprfaecher,aktuellesfeld).feldfreigeben:feldfrei(
+aktuellesfeld);aktuellesfeldINCR 1.merken:altedaten(schuelerzahl):=merkdaten.
+END PROC datenzeigen;TEXT PROC nachpruefungsfaecher:TEXT VAR nfaecher:=
+niltext;INT VAR fachind;FOR fachindFROM 0UPTO maxfach-1REP IF wert(
+fnrhjdnachfach1+fachind)=niltextTHEN nfaecherCAT (laengefach*unterstrich)
+ELSE nfaecherCAT text(wert(fnrhjdnachfach1+fachind),laengefach);FI PER ;
+nfaecherEND PROC nachpruefungsfaecher;PROC feldloeschen(INT CONST laenge):
+standardmaskenfeld(laenge*blank,aktuellesfeld)END PROC feldloeschen;BOOL
+PROC pruefungspeziell(INT CONST wasistzutun):BOOL VAR b:=FALSE ;SELECT
+wasistzutunOF CASE allespruefen:pruefungalleklassen(b)CASE einejgstpruefen:
+pruefungeinejgst(b)CASE eineklassepruefen:pruefungeineklasse(b)END SELECT ;b
+END PROC pruefungspeziell;PROC pruefungalleklassen(BOOL VAR bool):bool:=(wert
+(fnrsustatuss)=laufbestand)END PROC pruefungalleklassen;PROC pruefungeinejgst
+(BOOL VAR bool):bool:=(wert(fnrsustatuss)=laufbestandCAND jgstaufber(wert(
+fnrsusgrpjgst))=startkey1)END PROC pruefungeinejgst;PROC pruefungeineklasse(
+BOOL VAR bool):bool:=(wert(fnrsustatuss)=laufbestandCAND jgstaufber(wert(
+fnrsusgrpjgst))=startkey1CAND wert(fnrsusgrpzugtut)=startkey2)END PROC
+pruefungeineklasse;PROC neueshjdtidinschuelerdateieintragen(INT CONST nr):IF
+standardmaskenfeld(nr)<>versetzungszeichenTHEN inittupel(dnrschueler);putwert
+(fnrsufamnames,wert(fnrhjdfamnames));putwert(fnrsurufnames,wert(
+fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats));search(
+dnrschueler,TRUE );IF dbstatus=okTHEN schuelertid:=gettid;putwert(
+fnrsutidakthjd,hjdtid);replace(dnrschueler,schuelertid)FI FI END PROC
+neueshjdtidinschuelerdateieintragen;BOOL PROC fachungueltig(TEXT CONST objekt
+):pos(fachkatalog,trenner+objekt+trenner)=0END PROC fachungueltig;PROC
+fachcat(BOOL VAR b):fachkatalogCAT wert(dnrfaecher+1)+trenner;END PROC
+fachcat;PROC holeaktuellenfachkatalog:fachkatalog:=trenner;statleseschleife(
+dnrfaecher,"","",dnrfaecher+1,dnrfaecher+1,PROC fachcat);END PROC
+holeaktuellenfachkatalog;#dr10.05.88PROC eventuellinstatwuerfelaendern(INT
+CONST nummer):IF standardmaskenfeld(nummer)<>versetzungszeichenTHEN
+kuerzelsummeeinsrunter(statnrversetzung,jgstaufber(gueltigejgst),compress(
+gueltigerzug),compress(laufbestand),compress(versetzungszeichen));
+kuerzelsummeeinsrauf(statnrversetzung,jgstaufber(gueltigejgst),compress(
+gueltigerzug),compress(laufbestand),compress(standardmaskenfeld(nummer)));FI
+END PROC eventuellinstatwuerfelaendern;#END PACKET listenweiseergverskonf
+
diff --git a/app/schulis/2.2.1/src/1.listenweise klassenbildung b/app/schulis/2.2.1/src/1.listenweise klassenbildung
new file mode 100644
index 0000000..c563019
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.listenweise klassenbildung
@@ -0,0 +1,270 @@
+PACKET listenweiseklassenbildungDEFINES bearbeitungklassenbildung,
+klassenbildungnichtspeichern,klassenbildungspeichern:LET meldbestleer=59,
+meldnichtspeichern=63,meldwarten=69,meldspeicherung=132,meldspeicherfehler=
+131,meldplausi=57,meldfalscheauswahl=56,meldexistiertnicht=134,
+meldzuggewechselt=135,meldfalscheshj=78;LET meldtrenner="#",meldkznorm="+";
+LET fnrneuan5=2,fnrneuan11=3,fnrneuansonst=4,fnrjgst=5,fnrtutor=6,
+fnrnurnichtvers=7,fnrgeplhj=8,fnrakthj=9;LET fnrherk=2,fnralteklasse=3,
+fnrname=4,fnrneueklasse=5;LET tofather=1,tograndfather=2;LET niltext="",blank
+=" ",namenstrenner=", ";LET pruefartalternative=5,pruefartgrenzen=3,jgst5=5,
+jgst13=13,null=0,freigabeincr=2;LET schuljahrkey="Schuljahr",schulhalbjahrkey
+="Schulhalbjahr",best5="n05",best11="n11",bestsonst="nso",bestlaufsj="ls";
+LET jgst05="05",jgst11="11",maxjgst="13",leerejgst=" ";LET kzwiederholer="w"
+;LET standardanfang=1,standardeinstieg=6;LET ersteskommendeshj=1,
+geplanteszweiteshj=2,aktuelleshj=3;LET maxschueler=15,erstesfeld=2,
+felderprozeile=5,schuelerproseite=16,anzkenndaten=3;LET gwherk=1,gwalteklasse
+=2,gwneuejgst=3;LET logtextbeginn="Anw. 1.4.1 Klassenbildung ",logtextneu5=
+"Neu 5",logtextneu11="Neu 11",logtextneuso="Neu sonstige",logtextwiederhol=
+", Wiederholer",logtextfuer="für ",logtextakthj="aktuelles Halbjahr ";BOOL
+VAR nochwelcheda,klassenbehandlung,nurnichtversetzte,logakthalbjahr;LET
+allespruefen=1,einejgstpruefen=2,eineklassepruefen=3,
+einejgstwiederholerpruefen=4,eineklassewiederholerpruefen=5;INT VAR
+waspruefen:=0;INT VAR laengeherk,laengealteklasse,laengename,laengeneueklasse
+,bestandindex,halbjahresindex,indexbestand,schuelerzahl,aktuellesfeld,
+wiederholerbestand;ROW schuelerproseiteROW anzkenndatenTEXT VAR kenndatum;#
+ROW schuelerproseiteTEXT VAR name;ROW schuelerproseiteTEXT VAR rufname;ROW
+schuelerproseiteTEXT VAR gebdat;##17.07.87dr#ROW schuelerproseiteTEXT VAR
+zugtutor;TEXT VAR altejgst,neuejgst,benoetigtevergljgst,vergleichsjgst,
+vergleichszug,sicherungstupel,klassenbildungsbestand,aktschuljahr,
+aktschulhalbjahr;PROC bearbeitungklassenbildung:reinitparsing;
+eingangsbildschirmpruefen;IF eingangsbildschirmokTHEN
+initialisierungenvornehmen;naechsteportionlesen;IF keinemehrdaTHEN
+bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE
+eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmpruefen:
+ankreuzfelderpruefen;IF eingangsbildschirmokTHEN jgstzugpruefen;IF
+eingangsbildschirmokTHEN halbjahrmitankreuzungvergleichenFI FI .
+ankreuzfelderpruefen:INT VAR pruefstatus;standardpruefe(pruefartalternative,
+fnrneuan5,fnrjgst,null,niltext,pruefstatus);.jgstzugpruefen:IF
+standardmaskenfeld(fnrjgst)<>niltextTHEN standardpruefe(pruefartgrenzen,
+fnrjgst,jgst5,jgst13,niltext,pruefstatus)FI ;IF eingangsbildschirmokTHEN
+nurnichtversetzte:=standardmaskenfeld(fnrnurnichtvers)<>niltext;
+bestimmebestandindex;IF nurnichtversetzteCAND (bestandindex<fnrjgst)THEN
+standardmeldung(meldfalscheauswahl,niltext);pruefstatus:=fnrnurnichtversFI
+FI .bestimmebestandindex:FOR bestandindexFROM fnrneuan5UPTO fnrjgstREP IF
+standardmaskenfeld(bestandindex)<>niltextTHEN LEAVE bestimmebestandindexFI
+PER .halbjahrmitankreuzungvergleichen:aktschulhalbjahr:=schulkenndatum(
+schulhalbjahrkey);aktschuljahr:=schulkenndatum(schuljahrkey);IF
+aktschulhalbjahr="2"THEN IF standardmaskenfeld(fnrgeplhj)<>""THEN
+standardmeldung(meldfalscheshj,aktschulhalbjahr+meldkznorm);pruefstatus:=
+fnrgeplhjFI ELIF aktschulhalbjahr="1"THEN IF standardmaskenfeld(fnrgeplhj)=""
+CAND standardmaskenfeld(fnrakthj)=""THEN standardmeldung(meldfalscheshj,
+aktschulhalbjahr+meldkznorm);pruefstatus:=fnrgeplhjFI FI .
+eingangsbildschirmok:pruefstatus=0.initialisierungenvornehmen:
+bestandunddbmaskesetzen;halbjahrsetzen;nichtverspruefen;
+plausipruefungvorbereiten;standardstartproc(maske(vergleichsknoten));
+laengenfestlegen;IF nurnichtversetzteTHEN startebildschirmblock(
+wiederholerbestand,maxschueler)ELSE startebildschirmblock(indexbestand,
+maxschueler)FI .bestandunddbmaskesetzen:standardmeldung(meldwarten,niltext);
+klassenbehandlung:=FALSE ;SELECT bestandindexOF CASE fnrneuan5:neuan5setzen
+CASE fnrneuan11:neuan11setzenCASE fnrneuansonst:neuansonstsetzenOTHERWISE
+jgstoderzugsetzenEND SELECT ;pruefebestand.neuan5setzen:vergleichsjgst:=
+jgst05;benoetigtevergljgst:=vergleichsjgst;klassenbildungsbestand:=best5;
+indexbestand:=ixsustatschulkenn;waspruefen:=allespruefen;infeld(fnrneuan5).
+neuan11setzen:vergleichsjgst:=jgst11;benoetigtevergljgst:=vergleichsjgst;
+klassenbildungsbestand:=best11;indexbestand:=ixsustatschulkenn;waspruefen:=
+allespruefen;infeld(fnrneuan11).neuansonstsetzen:vergleichsjgst:=niltext;
+benoetigtevergljgst:=vergleichsjgst;klassenbildungsbestand:=bestsonst;
+indexbestand:=ixsustatschulkenn;waspruefen:=allespruefen;infeld(fnrneuansonst
+).jgstoderzugsetzen:TEXT CONST jgst:=jgstaufber(standardmaskenfeld(fnrjgst));
+vergleichsjgst:=jgst;klassenbildungsbestand:=bestlaufsj;IF eineklasseTHEN
+setzeklasseELSE setzejgstFI ;IF NOT ((akthalbjahrCOR geplhalbjahr)COR
+nurnichtversetzte)THEN neuejgst:=jgstaufber(text(int(altejgst)+1));
+benoetigtevergljgst:=neuejgstELSE neuejgst:=altejgst;benoetigtevergljgst:=
+altejgstFI .eineklasse:TEXT CONST zug:=standardmaskenfeld(fnrtutor);
+vergleichszug:=zug;klassenbehandlung:=zug<>niltext;klassenbehandlung.
+setzeklasse:IF nurnichtversetzteTHEN wiederholerbestand:=ixhjdsjhjverjgstkenn
+;waspruefen:=eineklassewiederholerpruefenELSE indexbestand:=ixsustatjgstzug;
+waspruefen:=eineklassepruefen;FI ;altejgst:=jgst;infeld(fnrtutor).setzejgst:
+IF nurnichtversetzteTHEN IF NOT klassenbehandlungTHEN #???index#
+wiederholerbestand:=ixhjdsjhjverjgst;#wiederholer#ELSE wiederholerbestand:=
+ixhjdsjhjverjgstkenn;FI ;waspruefen:=einejgstwiederholerpruefenELSE IF NOT
+klassenbehandlungTHEN indexbestand:=ixsustatjgst;ELSE indexbestand:=
+ixsustatjgstzug;FI ;waspruefen:=einejgstpruefen;FI ;altejgst:=jgst;infeld(
+fnrjgst).pruefebestand:reinitparsing;IF nurnichtversetzteTHEN inittupel(
+dnrhalbjahresdaten);schluesselfelderinhalbjahresdatenbelegen;search(
+wiederholerbestand,FALSE );ELSE inittupel(dnrschueler);
+schluesselfelderinschuelerbelegen;search(indexbestand,FALSE );FI ;IF
+bestandnichtvorhandenTHEN bestandleermelden;return(tofather);LEAVE
+bearbeitungklassenbildungELSE nochwelcheda:=TRUE FI .
+schluesselfelderinhalbjahresdatenbelegen:putwert(fnrhjdversetzung,
+kzwiederholer);putwert(fnrhjdsj,aktschuljahr);putwert(fnrhjdhj,
+aktschulhalbjahr);putwert(fnrhjdjgst,vergleichsjgst);putwert(fnrhjdkennung,
+vergleichszug);.schluesselfelderinschuelerbelegen:putwert(fnrsustatuss,
+klassenbildungsbestand);IF indexbestand=ixsustatjgstzugOR indexbestand=
+ixsustatjgstTHEN putwert(fnrsusgrpjgst,vergleichsjgst);putwert(
+fnrsusgrpzugtut,vergleichszug)FI .bestandnichtvorhanden:dbstatus<>okOR (NOT
+nurnichtversetzteCAND NOT pruefungspeziell(waspruefen))OR (nurnichtversetzte
+CAND NOT pruefungspeziell(waspruefen)).halbjahrsetzen:logakthalbjahr:=FALSE ;
+IF geplhalbjahrTHEN geplhalbjahrsetzenELIF akthalbjahrTHEN logakthalbjahr:=
+TRUE ;akthalbjahrsetzenELSE ersteshalbjahrsetzenFI .geplhalbjahr:INT VAR
+angekreuztesfeld;standardmaskenfeld(fnrgeplhj)<>niltext.geplhalbjahrsetzen:
+IF akthalbjahrCOR neuanmeldungTHEN angekreuztesfeld:=fnrgeplhj;falscheauswahl
+ELSE halbjahresindex:=geplanteszweiteshjFI .akthalbjahr:standardmaskenfeld(
+fnrakthj)<>niltext.akthalbjahrsetzen:IF neuanmeldungTHEN angekreuztesfeld:=
+fnrakthj;falscheauswahlELSE halbjahresindex:=aktuelleshjFI .
+ersteshalbjahrsetzen:halbjahresindex:=ersteskommendeshj.neuanmeldung:
+bestandindex<=fnrneuansonst.falscheauswahl:standardmeldung(meldfalscheauswahl
+,niltext);infeld(angekreuztesfeld);return(tofather);LEAVE
+bearbeitungklassenbildung.nichtverspruefen:IF (nurnichtversetzteCAND (
+halbjahresindex<>ersteskommendeshj))COR (((NOT nurnichtversetzte)CAND (jgst=
+maxjgst))CAND (halbjahresindex=ersteskommendeshj))THEN angekreuztesfeld:=
+fnrnurnichtvers;falscheauswahlELIF nurnichtversetzteTHEN halbjahresindex:=
+ersteskommendeshjFI .plausipruefungvorbereiten:#holevergleichssg(
+benoetigtevergljgst,(halbjahresindex=aktuelleshj)COR nurnichtversetzte)dr13.
+11.87#holevergleichssg(benoetigtevergljgst,halbjahresindex=aktuelleshj).
+laengenfestlegen:laengeherk:=standardfeldlaenge(fnrherk);laengealteklasse:=
+standardfeldlaenge(fnralteklasse);laengename:=standardfeldlaenge(fnrname);
+laengeneueklasse:=standardfeldlaenge(fnrneueklasse).naechsteportionlesen:
+blocklesenundausgeben.keinemehrda:NOT nochwelcheda.bestandleermelden:
+standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:infeld(pruefstatus
+).END PROC bearbeitungklassenbildung;PROC klassenbildungnichtspeichern:
+nichtspeichernmelden;startkeyssetzen;neuerblock.nichtspeichernmelden:
+standardmeldung(meldnichtspeichern,niltext);pause(10).startkeyssetzen:
+restoretupel(dnrschueler,sicherungstupel);changeindex.END PROC
+klassenbildungnichtspeichern;PROC klassenbildungspeichern:
+bestimmeaenderungsart;pruefeplausibilitaet;IF dateninordnungTHEN
+speicherungdurchfuehren;startkeyssetzen;neuerblockELSE eingabefehler;return(
+tofather)FI .bestimmeaenderungsart:BOOL VAR normalfall:=NOT ((bestandindex>
+fnrneuansonst)CAND (halbjahresindex=aktuelleshj));.pruefeplausibilitaet:BOOL
+VAR dateninordnung:=TRUE ;INT VAR aktfeld:=1;TEXT VAR bezugsjgst:="",
+gelesenejgst;standardmeldung(meldplausi,niltext);FOR suindFROM 1UPTO
+schuelerzahlREP pruefezeile;IF NOT dateninordnungTHEN LEAVE
+pruefeplausibilitaetFI ;PER .pruefezeile:TEXT VAR aktuellerzug;TEXT VAR
+aktuelleschuelergruppe;aktfeldINCR felderprozeile;aktuellerzug:=
+standardmaskenfeld(aktfeld);gelesenejgst:=standardmaskenfeld(aktfeld-1);IF
+gelesenejgst<>leerejgstTHEN bezugsjgst:=gelesenejgst;FI ;
+aktuelleschuelergruppe:=bezugsjgst+aktuellerzug;IF normalfallTHEN
+dateninordnung:=(aktuellerzug=niltext)COR istzulaessigesg(
+aktuelleschuelergruppe)ELSE dateninordnung:=istzulaessigesg(
+aktuelleschuelergruppe)CAND (aktuellerzug<>niltext)FI .
+speicherungdurchfuehren:vorbereiten;logeintragvornehmen;aendernschleife;
+kurzwarten.logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;IF
+klassenbildungsbestand=best5THEN eintragCAT logtextfuer;eintragCAT
+logtextneu5ELIF klassenbildungsbestand=best11THEN eintragCAT logtextfuer;
+eintragCAT logtextneu11ELIF klassenbildungsbestand=bestsonstTHEN eintragCAT
+logtextfuer;eintragCAT logtextneusoELIF klassenbildungsbestand=bestlaufsj
+THEN IF logakthalbjahrTHEN eintragCAT logtextakthjFI ;eintragCAT logtextfuer;
+eintragCAT vergleichsjgst;eintragCAT vergleichszug;IF nurnichtversetzteTHEN
+eintragCAT logtextwiederholFI ;FI ;logeintrag(eintrag).kurzwarten:pause(10).
+vorbereiten:INT VAR aufsatzpunkt:=null;.aendernschleife:INT VAR suind;INT
+VAR zahlderaenderungen:=null;FOR suindFROM 1UPTO schuelerzahlREP
+behandleschuelersatzPER .behandleschuelersatz:IF datenveraendertTHEN
+fuehreaenderungaus;meldevollzugELSE merkenalsaufsatzpunktFI .datenveraendert:
+zugtutor(suind)<>standardmaskenfeld((suind*felderprozeile)+1).
+merkenalsaufsatzpunkt:aufsatzpunkt:=suind.fuehreaenderungaus:lesenvorbereiten
+;lesen;IF normalfallTHEN zurueckschreibenELSE aenderneinheitFI .
+lesenvorbereiten:putwert(fnrsufamnames,kenndatum[suind][1]);putwert(
+fnrsurufnames,kenndatum[suind][2]);putwert(fnrsugebdatums,datumskonversion(
+kenndatum[suind][3]));zahlderaenderungenINCR 1;.lesen:search(dnrschueler,
+TRUE ).zurueckschreiben:IF dbstatus=0THEN putwert(fnrsuneuerzugtut,
+standardmaskenfeld((suind*felderprozeile)+1));replace(dnrschueler,gettid)FI .
+aenderneinheit:TEXT VAR alterzug:=zugtutor(suind);TEXT VAR neuerzug:=
+standardmaskenfeld((suind*felderprozeile)+1);TEXT VAR geliefertejgst:=
+jgstaufber(wert(fnrsusgrpjgst));TEXT VAR gelieferterzug:=wert(fnrsusgrpzugtut
+);IF dbstatus=0CAND geliefertejgst=altejgstCAND gelieferterzug=alterzugTHEN
+TEXT VAR schuelertid:=gettid;aenderntransaktion;ELSE transaktionsfehlerFI .
+aenderntransaktion:removeoutofindex(ixsustatjgstzug);#
+aenderunginstatraumvorbereiten(FALSE );dr10.05.88
+einenschuelerausstatraumentfernen;#IF wert(fnrsutidakthjd)<>niltextTHEN
+readtid(dnrhalbjahresdaten,wert(fnrsutidakthjd));putwert(fnrhjdkennung,
+neuerzug);#update(dnrhalbjahresdaten);dr10.05.88#selupdate(dnrhalbjahresdaten
+);putwert(fnrsutidakthjd,gettid)ELSE FI ;putwert(fnrsusgrpzugtut,neuerzug);
+replace(dnrschueler,schuelertid);insertinindex(ixsustatjgstzug);#IF dbstatus
+<>okTHEN putwert(fnrsusgrpzugtut,zugtutor[suind]);FI ;
+einenschuelerinstatraumeinfuegen;dr10.05.88#.transaktionsfehler:
+standardmeldung(meldzuggewechselt,niltext);return(tofather);infeld((suind*
+felderprozeile)+1);LEAVE klassenbildungspeichern.meldevollzug:TEXT VAR
+meldungstext;INT VAR satzindex:=(suind*felderprozeile)-1;IF dbstatus=0THEN
+meldungstext:=compress(standardmaskenfeld(satzindex))+meldtrenner;
+standardmeldung(meldspeicherung,meldungstext)ELSE meldungstext:=text(dbstatus
+)+meldtrenner;meldungstextCAT compress(standardmaskenfeld(satzindex));
+meldungstextCAT meldtrenner;standardmeldung(meldspeicherfehler,meldungstext);
+return(tofather);LEAVE klassenbildungspeichernFI ;infeld(satzindex+2).
+startkeyssetzen:IF (NOT klassenbehandlung)OR normalfallTHEN aufsatzpunkt:=
+schuelerzahlFI ;IF aufsatzpunkt>nullTHEN restoretupel(dnrschueler,
+sicherungstupel);changeindexFI .eingabefehler:standardmeldung(
+meldexistiertnicht,standardmaskenfeld(aktfeld)+meldtrenner);infeld(aktfeld).
+END PROC klassenbildungspeichern;PROC neuerblock:blocklesenundausgeben;IF
+nochwelchedaTHEN return(tofather)ELSE enter(tograndfather)FI .END PROC
+neuerblock;PROC blocklesenundausgeben:vorbereiten;initgruppenwechsel;SELECT
+bestandindexOF CASE fnrneuan5:neuan5lesenCASE fnrneuan11:neuan11lesenCASE
+fnrneuansonst:neuansonstlesenOTHERWISE jgstoderzuglesenEND SELECT ;
+nachbereiten.vorbereiten:IF NOT nochwelchedaTHEN LEAVE blocklesenundausgeben
+FI ;standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:=
+erstesfeld.neuan5lesen:bildschirmblock(PROC neuan5zeigen,BOOL PROC (INT
+CONST )pruefungspeziell,waspruefen).neuan11lesen:bildschirmblock(PROC
+neuan11zeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen).
+neuansonstlesen:bildschirmblock(PROC neuansonstzeigen,BOOL PROC (INT CONST )
+pruefungspeziell,waspruefen).jgstoderzuglesen:bildschirmblock(PROC
+jgstoderzugzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen).
+nachbereiten:nochwelcheda:=(schuelerzahl>null);IF nochwelchedaTHEN savetupel(
+dnrschueler,sicherungstupel);restlichezeilenloeschen;infeld(standardanfang);
+standardfelderausgebenFI ;infeld(standardeinstieg).restlichezeilenloeschen:
+INT VAR zeilenzaehler;INT VAR zeilenfeld:=(schuelerzahl*felderprozeile)+1;
+FOR zeilenzaehlerFROM schuelerzahlUPTO maxschuelerREP loeschezeilePER .
+loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP
+zeilenfeldINCR 1;standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank,
+zeilenfeld)PER ;feldschutz(zeilenfeld).END PROC blocklesenundausgeben;PROC
+neuanzeigen(TEXT CONST jgst):schuelerzahlINCR 1;herkunftsschulezeigen;
+alteklassezeigen;namezeigen;neueklassezeigen;neuerzugtutorzeigen.
+neueklassezeigen:gruppenwechsel(jgst,gwneuejgst,laengeneueklasse,1,
+aktuellesfeld).END PROC neuanzeigen;PROC namezeigen:namenretten;
+standardmaskenfeld(text(schuelername+namenstrenner+schuelervorname,laengename
+),aktuellesfeld);INT VAR eingabefeld:=aktuellesfeld+freigabeincr;
+standardmaskenfeld(niltext,eingabefeld);feldfrei(eingabefeld);aktuellesfeld
+INCR 1.namenretten:TEXT VAR schuelername,schuelervorname;schuelername:=wert(
+fnrsufamnames);schuelervorname:=wert(fnrsurufnames);kenndatum[schuelerzahl][1
+]:=schuelername;kenndatum[schuelerzahl][2]:=schuelervorname;kenndatum[
+schuelerzahl][3]:=datumrekonversion(wert(fnrsugebdatums));.END PROC
+namezeigen;PROC herkunftsschulezeigen:gruppenwechsel(wert(fnrsuskennlschule),
+gwherk,laengeherk,1,aktuellesfeld)END PROC herkunftsschulezeigen;PROC
+alteklassezeigen:gruppenwechsel(wert(fnrsuklasselschule),gwalteklasse,
+laengealteklasse,1,aktuellesfeld)END PROC alteklassezeigen;PROC neuan5zeigen:
+neuanzeigen(jgst05)END PROC neuan5zeigen;PROC neuan11zeigen:neuanzeigen(
+jgst11)END PROC neuan11zeigen;PROC neuansonstzeigen:schuelerzahlINCR 1;
+herkunftsschulezeigen;alteklassezeigen;namezeigen;neueklassezeigen;
+neuerzugtutorzeigen.neueklassezeigen:gruppenwechsel(jgstaufber(wert(
+fnrsujgsteintr)),gwneuejgst,2,1,aktuellesfeld).END PROC neuansonstzeigen;
+PROC neuerzugtutorzeigen:TEXT CONST neuerzugtutor:=wert(fnrsuneuerzugtut);
+standardmaskenfeld(neuerzugtutor,aktuellesfeld);zugtutor(schuelerzahl):=
+neuerzugtutor;aktuellesfeldINCR 1END PROC neuerzugtutorzeigen;PROC
+jgstoderzugzeigen:schuelerzahlINCR 1;herkunftsschuleloeschen;
+aktuelleklassezeigen;namezeigen;neueklassezeigen;zugtutorbehandeln.
+herkunftsschuleloeschen:feldloeschen(laengeherk);aktuellesfeldINCR 1.
+aktuelleklassezeigen:TEXT VAR aktjgst:=jgstaufber(wert(fnrsusgrpjgst));IF
+halbjahresindex=aktuelleshjTHEN feldloeschen(laengealteklasse);aktuellesfeld
+INCR 1ELSE gruppenwechsel(aktjgst+wert(fnrsusgrpzugtut),gwalteklasse,
+laengealteklasse,1,aktuellesfeld)FI .neueklassezeigen:IF halbjahresindex=
+ersteskommendeshjTHEN gruppenwechsel(neuejgst,gwneuejgst,2,1,aktuellesfeld)
+ELSE gruppenwechsel(aktjgst,gwneuejgst,2,1,aktuellesfeld)FI .
+zugtutorbehandeln:IF halbjahresindex<>aktuelleshjTHEN neuerzugtutorzeigen
+ELSE TEXT CONST zugtutordesschuelers:=wert(fnrsusgrpzugtut);zugtutor(
+schuelerzahl):=zugtutordesschuelers;standardmaskenfeld(zugtutordesschuelers,
+aktuellesfeld);aktuellesfeldINCR 1FI .END PROC jgstoderzugzeigen;PROC
+feldloeschen(INT CONST laenge):standardmaskenfeld(laenge*blank,aktuellesfeld)
+END PROC feldloeschen;BOOL PROC pruefungspeziell(INT CONST wasistzutun):BOOL
+VAR b:=FALSE ;SELECT wasistzutunOF CASE allespruefen:pruefungalleklassen(b)
+CASE einejgstpruefen:pruefungeinejgst(b)CASE eineklassepruefen:
+pruefungeineklasse(b)CASE einejgstwiederholerpruefen:
+pruefungeinejgstwiederholer(b)CASE eineklassewiederholerpruefen:
+pruefungeineklassewiederholer(b)END SELECT ;bEND PROC pruefungspeziell;PROC
+pruefungalleklassen(BOOL VAR bool):bool:=(wert(fnrsustatuss)=
+klassenbildungsbestand)END PROC pruefungalleklassen;PROC pruefungeinejgst(
+BOOL VAR bool):bool:=(wert(fnrsustatuss)=bestlaufsjCAND jgstaufber(wert(
+fnrsusgrpjgst))=vergleichsjgst)END PROC pruefungeinejgst;PROC
+pruefungeineklasse(BOOL VAR bool):bool:=(wert(fnrsustatuss)=bestlaufsjCAND
+jgstaufber(wert(fnrsusgrpjgst))=vergleichsjgstCAND wert(fnrsusgrpzugtut)=
+vergleichszug)END PROC pruefungeineklasse;PROC pruefungeinejgstwiederholer(
+BOOL VAR bool):inschuelerdateisuchen;bool:=(wert(fnrhjdversetzung)=
+kzwiederholerCAND wert(fnrhjdsj)=aktschuljahrCAND wert(fnrhjdhj)=
+aktschulhalbjahrCAND jgstaufber(wert(fnrhjdjgst))=vergleichsjgst)END PROC
+pruefungeinejgstwiederholer;PROC pruefungeineklassewiederholer(BOOL VAR bool)
+:inschuelerdateisuchen;bool:=(wert(fnrhjdversetzung)=kzwiederholerCAND wert(
+fnrhjdsj)=aktschuljahrCAND wert(fnrhjdhj)=aktschulhalbjahrCAND jgstaufber(
+wert(fnrhjdjgst))=vergleichsjgstCAND wert(fnrhjdkennung)=vergleichszug)END
+PROC pruefungeineklassewiederholer;PROC inschuelerdateisuchen:inittupel(
+dnrschueler);putwert(fnrsufamnames,wert(fnrhjdfamnames));putwert(
+fnrsurufnames,wert(fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats
+));putwert(fnrsustatuss,bestlaufsj);search(ixsustatfamrufgeb,TRUE );END PROC
+inschuelerdateisuchen;END PACKET listenweiseklassenbildung
+
diff --git a/app/schulis/2.2.1/src/1.schuelerjgst aendern b/app/schulis/2.2.1/src/1.schuelerjgst aendern
new file mode 100644
index 0000000..1a80c4f
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.schuelerjgst aendern
@@ -0,0 +1,161 @@
+PACKET schuelerjgstaendernDEFINES schuelerjgstbearbeiten,
+schuelerjgstaenderungschuelerzeigen,
+schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten,
+schuelerjgstaenderungspeichern,pruefungschuelerjgst:LET maskenname=
+"ms schuelerjgst aendern",maskennameeingang="ms schuelerjgst aendern eingang"
+,fnrname=2,fnrrufname=3,fnrgebdatum=4,fnrjgst=5,fnrhalbjahr=6,fnrzug=7,
+fnrzugang=8,fnraktuellehjd=9,fnrneueshj1=10,fnrneuehjd1=11,fnrneueshj2=12,
+fnrneuehjd2=13;LET schulhalbjahr="Schulhalbjahr";LET aktbestand="ls",
+aktschuljahr="Schuljahr";LET meldunggibtsnicht=71,meldunglistenerstellung=7,
+meldungkeineliste=68,meldungletzter=67,meldungspeicherung=50,
+meldungkeinespeicherung=63,pruefemeldung=57;LET dateiname="Schülerliste";
+FILE VAR f;TEXT VAR schuelertupel:="",zugangsicherung:="",schuelertid:="",
+hjdtid:="";TEXT VAR akthalbjahr,jgstalt,zugalt,jgst,zug,jgsttext;LET
+gesamtanzahlhalbjahre=12,laengehalbjahreseintrag=4;LET jgst05="05",jgst13=
+"13";LET jgstufe10=10;LET oblitrenner="$",leer="",punkt=".";LET
+anzschlfeldersu=3;BOOL VAR falschesdatum:=FALSE ;INT CONST gesamtzeilenlaenge
+:=gesamtanzahlhalbjahre*laengehalbjahreseintrag;ROW anzschlfeldersuTEXT VAR
+schluessel;TAG VAR maske;TEXT VAR ausgabezeile:="",halbjahrkuerzel:="";LET
+logtextbeginn="Anw. 1.2.4 Änderung";PROC schuelerjgstbearbeiten:BOOL VAR
+suexistiert:=FALSE ;falschesdatum:=FALSE ;systemdboff;reinitparsing;
+schluesselbereitstellen;pruefeobnameexistiert(suexistiert);IF NOT
+falschesdatumTHEN IF suexistiertTHEN schluessel(1):=wert(fnrsufamnames);
+schluessel(2):=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(
+fnrsugebdatums));loeschedieerstellteobjektliste;standardstartproc(maskenname)
+;bereiteaenderungvor;infeld(fnrjgst);standardnprocELSE standardmeldung(
+meldunggibtsnicht,"");return(1)FI ELSE return(1)FI .END PROC
+schuelerjgstbearbeiten;PROC schluesselbereitstellen:schluessel(1):=
+standardmaskenfeld(fnrname);schluessel(2):=standardmaskenfeld(fnrrufname);
+schluessel(3):=datumrekonversion(standardmaskenfeld(fnrgebdatum));END PROC
+schluesselbereitstellen;PROC pruefeobnameexistiert(BOOL VAR suexist):TEXT
+VAR datenbankwerte,schluesselwerte;inittupel(dnrschueler);
+maskenwerteindatenbank;IF NOT falschesdatumTHEN search(ixsustatfamrufgeb,
+FALSE );IF dbstatus=okTHEN saveupdateposition(dnrschueler);datenbankwerte:=
+wert(fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));schluesselwerte:=
+schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=schluessel(1)CAND (
+(schluessel(2)=leerAND schluessel(3)=leer)OR (pos(datenbankwerte,
+schluesselwerte)=1)))ELSE suexist:=FALSE FI FI .END PROC
+pruefeobnameexistiert;PROC bereiteaenderungvor:saveupdateposition(dnrschueler
+);savetupel(dnrschueler,schuelertupel);schuelertid:=gettid;hjdtid:=wert(
+fnrsutidakthjd);zugangsicherung:=wert(fnrsuartzugang);wertelesen;
+fuelledbdateninfelder;fuellehjddateninfelder;infeld(1);standardfelderausgeben
+;infeld(fnrjgst).wertelesen:akthalbjahr:=schulkenndatum(schulhalbjahr);.
+fuelledbdateninfelder:jgstalt:=jgstaufber(wert(fnrsusgrpjgst));zugalt:=
+compress(wert(fnrsusgrpzugtut));standardmaskenfeld(schluessel(1),fnrname);
+standardmaskenfeld(schluessel(2),fnrrufname);standardmaskenfeld(schluessel(3)
+,fnrgebdatum);standardmaskenfeld(akthalbjahr,fnrhalbjahr);standardmaskenfeld(
+jgstalt,fnrjgst);standardmaskenfeld(zugalt,fnrzug);standardmaskenfeld(wert(
+fnrsuartzugang),fnrzugang);.fuellehjddateninfelder:jgsttext:=jgstalt;
+halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;lieferehalbjahreszeile(
+ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnraktuellehjd)
+;IF jgstalt=jgst05THEN erhoehejgsttext(TRUE );halbjahrkuerzel:=jgsttext+punkt
++akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);
+lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld(
+ausgabezeile,fnrneuehjd1);liefereleerzeileELIF jgstalt=jgst13THEN
+erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;
+standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);lieferehalbjahreszeile(
+ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd1);
+liefereleerzeileELSE erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+
+akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);
+lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld(
+ausgabezeile,fnrneuehjd1);jgsttext:=jgstalt;erhoehejgsttext(TRUE );
+halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;standardmaskenfeld(
+halbjahrkuerzel,fnrneueshj2);lieferehalbjahreszeile(ausgabezeile,
+halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd2)FI .
+liefereleerzeile:standardmaskenfeld(leereshj,fnrneueshj2);standardmaskenfeld(
+leerezeile,fnrneuehjd2).leereshj:text(" ",laengehalbjahreseintrag).leerezeile
+:text(" ",gesamtzeilenlaenge).END PROC bereiteaenderungvor;PROC
+erhoehejgsttext(BOOL CONST erhoehen):INT VAR jgstint:=int(jgsttext);IF
+erhoehenTHEN jgstintINCR 1ELSE jgstintDECR 1FI ;jgsttext:=jgstaufber(text(
+jgstint))END PROC erhoehejgsttext;PROC loeschedieerstellteobjektliste:forget(
+dateiname,quiet);END PROC loeschedieerstellteobjektliste;PROC
+schuelerjgstaenderungschuelerzeigen:BOOL VAR listeexistiertnicht;
+falschesdatum:=FALSE ;systemdboff;schluesselbereitstellen;
+maskenwerteindatenbank;IF NOT falschesdatumTHEN standardmeldung(
+meldunglistenerstellung,"");parsenooffields(5);objektlistestarten(
+ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,listeexistiertnicht);IF
+listeexistiertnichtTHEN reinitparsing;standardmeldung(meldungkeineliste,"");
+return(1)ELSE datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler,
+TRUE ,BOOL PROC pruefungschuelerjgst)FI ELSE return(1)FI .END PROC
+schuelerjgstaenderungschuelerzeigen;PROC maskenwerteindatenbank:putwert(
+fnrsufamnames,schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop
+;initmaske(maske,maskennameeingang);putwert(fnrsugebdatums,datumskonversion(
+schluessel(3)));IF iserrorTHEN clearerror;meldeauffaellig(maske,157);infeld(
+fnrgebdatum);falschesdatum:=TRUE ;enablestopELSE enablestop;putwert(
+fnrsustatuss,aktbestand);FI END PROC maskenwerteindatenbank;BOOL PROC
+pruefungschuelerjgst:wert(fnrsustatuss)=aktbestandEND PROC
+pruefungschuelerjgst;PROC
+schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten:BOOL VAR ok,
+kannbearbeitetwerden:=FALSE ;loeschedieerstellteobjektliste;
+objektlistebeenden(dateiname,TRUE );reinitparsing;
+holeerstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF ok
+THEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE
+holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN
+standardstartproc(maskenname);bereiteaenderungvor;infeld(fnrjgst);
+standardnprocELSE enter(2)FI .END PROC
+schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten;PROC
+holeerstenschluesselausdatei(BOOL VAR ok):IF NOT exists(dateiname)THEN ok:=
+FALSE ;LEAVE holeerstenschluesselausdateiFI ;f:=sequentialfile(input,
+dateiname);holenaechstenschluesselausdatei(ok);END PROC
+holeerstenschluesselausdatei;PROC holenaechstenschluesselausdatei(BOOL VAR ok
+):TEXT VAR thesaurustext:="";INT VAR schluesselbeginn,schluesseltrennung,i;
+IF eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f,
+thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI .
+bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext,
+oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner,
+schluesselbeginn+1);FOR iFROM 1UPTO anzschlfeldersuREP IF schluesseltrennung>
+0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1,
+schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung
+:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):=
+subtext(thesaurustext,schluesselbeginn+1);FI ;schluessel(3):=
+datumrekonversion(schluessel(3));PER ;.END PROC
+holenaechstenschluesselausdatei;PROC schuelerjgstaenderungspeichern(BOOL
+CONST speichern):IF speichernTHEN INT VAR fehlerstatus:=0;
+pruefeplausibilitaet(fehlerstatus);IF datenfehlerfreiTHEN standardmeldung(
+meldungspeicherung,"");datenspeichern;
+vorbereitendernaechstenschluesselbehandlungELSE fehlerbehandeln;return(1)FI
+ELSE standardmeldung(meldungkeinespeicherung,"");
+vorbereitendernaechstenschluesselbehandlungFI .datenfehlerfrei:fehlerstatus=0
+.fehlerbehandeln:infeld(fehlerstatus).datenspeichern:logeintragvornehmen;
+aenderungschreiben;halbjahresdatenloeschen(schluessel,jgstalt,jgst,
+akthalbjahr).logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;eintragCAT
+" """;eintragCAT schluessel(1);eintragCAT ", ";eintragCAT schluessel(2);
+eintragCAT ", ";eintragCAT datumskonversion(schluessel(3));eintragCAT """";
+logeintrag(eintrag).aenderungschreiben:IF jgstoderzuggeaendertTHEN
+dbfelderfuellen;aenderunginhjdeintragen;restoreupdateposition(dnrschueler);
+selupdate(dnrschueler);IF dbstatus<>0THEN restoretupel(dnrschueler,
+schuelertupel)ELSE IF jgst<>jgstaltTHEN IF int(jgst)>=jgstufe10THEN
+kurswahlserveraktualisieren(jgst,"","")FI ;IF int(jgstalt)>=jgstufe10THEN
+kurswahlserveraktualisieren(jgstalt,"","")FI ;FI ;FI ;ELSE dbfelderfuellen;
+replace(dnrschueler,schuelertid);FI .dbfelderfuellen:putwert(fnrsusgrpjgst,
+jgst);putwert(fnrsusgrpzugtut,zug);putwert(fnrsuartzugang,standardmaskenfeld(
+fnrzugang));.jgstoderzuggeaendert:jgst<>jgstaltCOR zug<>zugalt.
+aenderunginhjdeintragen:IF hjdtid<>leerTHEN putwert(fnrhjdjgst,jgst);putwert(
+fnrhjdkennung,zug);selupdate(dnrhalbjahresdaten);IF dbstatus=okTHEN putwert(
+fnrsutidakthjd,gettid)FI FI .END PROC schuelerjgstaenderungspeichern;PROC
+vorbereitendernaechstenschluesselbehandlung:IF exists(dateiname)THEN
+holenaechstenschluesselauslisteELSE enter(2)FI .
+holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ;
+holenaechstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF
+okTHEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE
+holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN
+bereiteaenderungvor;return(1)ELSE behandleendederlistenabarbeitungFI .
+behandleendederlistenabarbeitung:standardmeldung(meldungletzter,"");enter(3).
+END PROC vorbereitendernaechstenschluesselbehandlung;PROC
+pruefeplausibilitaet(INT VAR fstatus):INT VAR fmeld;LET fmeldbittefuellen=52,
+fmeldnichtimbestand=55,bestandzugang="c02 zugang";fstatus:=0;standardmeldung(
+pruefemeldung,"");IF NOT imschlbestand(standardmaskenfeld(fnrzugang),
+bestandzugang)THEN fstatus:=fnrzugang;fmeld:=fmeldnichtimbestand;
+behandledenplausifehlerFI ;jgst:=jgstaufber(standardmaskenfeld(fnrjgst));zug
+:=compress(standardmaskenfeld(fnrzug));IF jgst=leerTHEN fstatus:=fnrjgst;
+fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF zug=leerTHEN fstatus:=
+fnrzug;fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF NOT
+imbestandschuelergruppenTHEN fstatus:=fnrjgst;fmeld:=fmeldnichtimbestand;
+behandledenplausifehlerFI .imbestandschuelergruppen:TEXT VAR schuljahr:=
+schulkenndatum(aktschuljahr),halbjahr:=schulkenndatum(schulhalbjahr);INT VAR
+dateinummer:=dnraktschuelergruppen;putwert(dateinummer+1,schuljahr);putwert(
+dateinummer+2,halbjahr);putwert(dateinummer+3,jgst);putwert(dateinummer+4,zug
+);search(dateinummer,TRUE );dbstatus=0.behandledenplausifehler:
+standardmeldung(fmeld,"");LEAVE pruefeplausibilitaet.END PROC
+pruefeplausibilitaet;END PACKET schuelerjgstaendern
+
diff --git a/app/schulis/2.2.1/src/1.stat grundfunktionen b/app/schulis/2.2.1/src/1.stat grundfunktionen
new file mode 100644
index 0000000..8ef332a
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.stat grundfunktionen
@@ -0,0 +1,70 @@
+PACKET statgrundfunktionenDEFINES statleseschleife,statauszaehlen,statinit,
+statausgeben,statspalteausgeben,statzeilevertauschen,rechtstext,loeschespalte
+:LET matrixanfang=6,zeilenlaenge=8,zeilensummentitel=93,spaltensummenbasis=12
+,matrixspaltenzahl=6,matrixzeilenzahl=11,laengezaehlfeld=5,laengewertefeld=8;
+LET mv=100,nv=20,summentitel="Summe",maxfeld=100,niltext=" ";BOOL VAR
+maskierung;INT VAR zeilenzahl,spaltenzahl;INT VAR aktuellestartzeile;INT VAR
+aktuelleendzeile;INT VAR gesamtsumme:=0;ROW mvROW nvINT VAR statzaehler;ROW
+mvINT VAR zeilenzeiger;INT PROC zaehler(INT CONST i,j):IF maskierungTHEN
+statzaehler(zeilenzeiger(i))(j)ELSE statzaehler(i)(j)FI END PROC zaehler;
+PROC statzeilevertauschen(INT CONST i,j):INT VAR k:=zeilenzeiger(j);
+zeilenzeiger(j):=zeilenzeiger(i);zeilenzeiger(i):=k;maskierung:=TRUE END
+PROC statzeilevertauschen;PROC statleseschleife(INT CONST indexnummer,TEXT
+CONST startschluessel1,startschluessel2,INT CONST feldnr1,feldnr2,PROC (BOOL
+VAR )stataktion):vorbereitungen;leseschleife.vorbereitungen:LET maxleseanzahl
+=10;BOOL VAR vorzeitigesende:=FALSE ;#INT CONST maxblock:=maxfeldDIV
+zahlderfelder;#INT VAR anzahltupel;#INT CONST maxanzahl:=(maxintDIV maxblock)
+*maxblock#.leseschleife:putwert(feldnr1,startschluessel1);putwert(feldnr2,
+startschluessel2);search(indexnummer);IF dbstatus=0THEN einleseschleifeFI .
+einleseschleife:zaehlen;WHILE NOT schlussREP anzahltupel:=maxleseanzahl;
+multisucc(indexnummer,anzahltupel);stackdurchlaufPER ;.stackdurchlauf:IF
+anzahltupel=0THEN dbstatus(1)ELSE WHILE anzahltupel<>0REP lesen;zaehlen;IF
+vorzeitigesendeTHEN dbstatus(1);anzahltupel:=0FI ;PER FI .schluss:dbstatus<>0
+.zaehlen:stataktion(vorzeitigesende).lesen:multisucc;anzahltupelDECR 1;.END
+PROC statleseschleife;PROC statauszaehlen(INT CONST zeile,spalte):statzaehler
+(zeile)(spalte)INCR 1;gesamtsummeINCR 1END PROC statauszaehlen;PROC
+statauszaehlen(INT CONST zeile,spalte,anzahl):statzaehler(zeile)(spalte):=
+anzahl;gesamtsummeINCR anzahlEND PROC statauszaehlen;PROC statinit(INT CONST
+zeilen,spalten):#INT VAR i,j;#gesamtsumme:=0;spaltenzahl:=spalten;
+aktuellestartzeile:=1;zeilenzahl:=0;maskierung:=FALSE ;statinit(zeilen)END
+PROC statinit;PROC statinit(INT CONST zeilen):INT VAR i,j;FOR iFROM
+zeilenzahl+1UPTO zeilenREP zeilenzeiger(i):=i;FOR jFROM 1UPTO spaltenzahlREP
+statzaehler(i)(j):=0PER PER ;zeilenzahl:=zeilen;aktuelleendzeile:=min(
+zeilenzahl,matrixzeilenzahl)END PROC statinit;PROC statausgeben(INT CONST
+startzeile,startspalte):initialisieren;spaltenausgeben;
+restlichespaltenloeschen;summenberechnen.initialisieren:INT VAR spalte;
+aktuellestartzeile:=startzeile;BOOL VAR gesamtsummeausgeben:=TRUE ;INT CONST
+endzeile:=min(zeilenzahl,startzeile+matrixzeilenzahl-1);aktuelleendzeile:=
+endzeile;INT CONST endspalte:=min(spaltenzahl,startspalte+matrixspaltenzahl-1
+);INT VAR spaltennr:=1;.spaltenausgeben:FOR spalteFROM startspalteUPTO
+endspalteREP statspalteausgeben(spalte,spaltennr);spaltennrINCR 1PER ;.
+summenberechnen:IF zeilensummedarstellbarTHEN statzeilensummeELSE
+gesamtsummeausgeben:=FALSE ;FI ;IF spaltensummedarstellbarTHEN
+statspaltensumme(startspalte,endspalte);ELSE gesamtsummeausgeben:=FALSE ;FI ;
+IF gesamtsummeausgebenTHEN statgesamtsummeFI .spaltensummedarstellbar:(
+endzeile=zeilenzahl).zeilensummedarstellbar:(endspalte=spaltenzahl).
+restlichespaltenloeschen:INT VAR i,basis:=matrixanfang+spaltennr-1;FOR iFROM
+spaltennrUPTO matrixspaltenzahl+1REP loeschespalte(basis);basisINCR 1PER .
+END PROC statausgeben;PROC loeschespalte(INT CONST basis):INT VAR feldnr:=
+basis;WHILE feldnr<=maxfeldREP niltextIN feldnr;feldnrINCR zeilenlaengePER
+END PROC loeschespalte;PROC statspalteausgeben(INT CONST spalte,spaltennr):
+INT VAR i,basis:=matrixanfang+spaltennr-1;FOR iFROM aktuellestartzeileUPTO
+aktuelleendzeileREP text(zaehler(i,spalte),laengezaehlfeld)IN basis;basis
+INCR zeilenlaengePER ;WHILE basis<=maxfeldREP (niltextIN basis);basisINCR
+zeilenlaengePER END PROC statspalteausgeben;PROC statzeilensumme:INT VAR i,
+basis:=spaltensummenbasis;FOR iFROM aktuellestartzeileUPTO aktuelleendzeile
+REP text(zeilensumme(i),laengezaehlfeld)IN basis;basisINCR zeilenlaengePER
+END PROC statzeilensumme;PROC statgesamtsumme:INT VAR basis:=
+zeilensummentitel+zeilenlaenge-1;text(gesamtsumme,laengezaehlfeld)IN basis
+END PROC statgesamtsumme;PROC statspaltensumme(INT CONST startspalte,
+endspalte):titel;einzelsummen.titel:rechtstext(summentitel,laengewertefeld)
+IN zeilensummentitel.einzelsummen:INT VAR j,basis:=zeilensummentitel+1;FOR j
+FROM startspalteUPTO endspalteREP text(spaltensumme(j),laengezaehlfeld)IN
+basis;basisINCR 1;PER .END PROC statspaltensumme;INT PROC zeilensumme(INT
+CONST zeilennr):INT VAR summe:=0;INT VAR j;FOR jFROM 1UPTO spaltenzahlREP
+summeINCR zaehler(zeilennr,j)PER ;summeEND PROC zeilensumme;INT PROC
+spaltensumme(INT CONST spaltennr):INT VAR summe:=0;INT VAR i;FOR iFROM 1UPTO
+zeilenzahlREP summeINCR zaehler(i,spaltennr)PER ;summeEND PROC spaltensumme;
+TEXT PROC rechtstext(TEXT CONST t,INT CONST laenge):((laenge-length(t))*" ")+
+tEND PROC rechtstext;END PACKET statgrundfunktionen
+
diff --git a/app/schulis/2.2.1/src/1.stat intern b/app/schulis/2.2.1/src/1.stat intern
new file mode 100644
index 0000000..a94ef21
--- /dev/null
+++ b/app/schulis/2.2.1/src/1.stat intern
@@ -0,0 +1,337 @@
+PACKET statinternDEFINES statinternstart,statistiklistezeigen,
+erstellestatistik,zeigefertigestatistik,statblaettern:LET matrix=
+"ms stat matrix",obli="mu objektliste",ueberschriftenfeld=2,fortsetzungsfeld=
+3,spaltentitel=4,wertebereichanfang=5,spaltenzahl=6,zeilenzahl=11,
+zeilenlaenge=8,maxfeld=100,laengezaehlfeld=5,laengewertefeld=8;LET mv=100,nv=
+20;ROW nvTEXT VAR spaltenwert;INT VAR maxspaltenwert;ROW mvTEXT VAR
+zeilenwert;INT VAR maxzeilenwert;INT VAR zeileleer;LET anhangzeilen=2;LET
+maxbestaende=8,maxauswertungen=17;LET titelergaenz1="alle Klassen ",
+titelergaenz2="alle Tutorenkurse ";ROW maxbestaendeTEXT CONST bestandtitel1:=
+ROW maxbestaendeTEXT :("der Jahrgangsstufe ","Jahrgangsstufen der Sek. 1",
+"Jahrgangsstufen der Sek. 2","alle Jahrgangsstufen",
+"Neuangemeldete zur Jgst. 5","Neuangemeldete zur Jgst. 11",
+"Neuangemeldete zu einer anderen Jgst.","Abgegangene aller Jahrgangsstufen");
+LET allejgstsek1=2,allejgstsek2=3,allejgst=4,neuan5=5,neuan11=6,neuansonst=7,
+abgegangene=8;ROW maxauswertungenTEXT CONST bestandtitel2:=ROW
+maxauswertungenTEXT :("Geschlecht","Alter","Schultyp der Herkunftsschule",
+"Art des Zugangs zur Jgst.","Versetzungsergebnis",
+"Teilnahme Religionsunterricht","Sprachenfolge","Kunst/Musik",
+"Ortsteil des Wohnortes","Staatsangehörigkeit","Muttersprache",
+"Einschulungsjahr Grundschule","Herkunftsschule","Religionszugehörigkeit",
+"Spätaussiedler","Abgangsgrund","Abschluß");LET geschlecht=1,alter=2,schultyp
+=3,zugang=4,versetzung=5,teilnahmereli=6,fremdsprachen=7,kunst=8,ort=9,staat=
+10,sprache=11,einschulung=12,herkunft=13,religion=14,aussiedler=15,abgang=16,
+abschluss=17;LET fortsetzungstitel=" Forts.",leertitel="leer",
+leertitelplatzhalter="�",sonsttitel="sonst",summentitel="Summe";LET
+neuanmeld5="n05",neuanmeld11="n11",neuanmeldsonst="nso",archivbestand="abg",
+gesamtbestand="ls";LET bestort="c02 ortsteil",beststaat="c02 staaten",
+bestsprache="c02 sprachen",bestreligion="c02 relizugehoerigkeit",bestabgang=
+"c02 abgang",bestabschluss="c02 abschluss",bestschulart="c02 schulart",
+bestversetzung="c02 versetzung",bestzugang="c02 zugang",bestherkunft=
+"Schulen";LET null="0",niltext="",blank=" ";LET allesek1=
+" 05 06 07 08 09 10",allesek2=" 11 12 13";LET einenbestand=
+2,einejgst=1,alleinsek1=4,alleinsek2=5;LET sjahr="Schuljahr",shj=
+"Schulhalbjahr",trenner1=".",trenner2="/",trennpos1=2,trennpos2=3,stattext1=
+"alle",stattext2="Werte",maxsek1=10,titeltrenner=", ",links=4,rechts=3,oben=2
+,unten=1,minjgst=5,maxjgst=13,abgkz="abg. ",maxkreuzzahl=1,basisohnebestand=1
+,laengespaltentitel=30,standardanfang=2;LET weiblich="w",maennlich="m",ja="j"
+,nein="n";LET unzulaessigewahlnr=56,wartennr=69,fertignr=77,meldzuvielewerte=
+87,nproc=1,standardabstand=2;LET maxoblizeile=18,listenauskunft=2018;LET
+beginntag=1,endetag=2,beginnmonat=4,endemonat=5,beginnjahr=7;BOOL VAR
+rechtsverschiebbar,variablezaehlung,neueintragnoetig,#20.01.88dr#
+vergleichsstart,sprungvonunten,fehlerzuvielewerte;INT VAR xaktuell,yaktuell,
+aktuellerbestand,statbestandnr,statjgst,statauswertungsnr,statbasisnr,
+jahrdestagesdatums,monatdestagesdatums,tagdestagesdatums,waspruefen,#06.07.87
+dr#dateinummer,#01.02.88dr#schluesseldateinr,vglfeld,gewindex;#05.08.87dr#
+TEXT VAR kuerzelbestand,gewbestand,#06.08.87dr#bestaendezeile,vergleichsjgst,
+statgrundmaske,aktschuljahr,akthalbjahr,titelzeile;PROC statinternstart:
+standardvproc(maske(vergleichsknoten));sprungvonunten:=FALSE END PROC
+statinternstart;PROC statistiklistezeigen:IF eingangsbildschirmkorrektTHEN
+standardstartproc(obli);auskunftstextergaenzen;fuellestatistikliste;
+standardnprocELSE fehlerbehandlungFI .auskunftstextergaenzen:titelzeile:=
+niltext;IF statbestandnr=einejgstTHEN titelzeile1ELSE einfachetitelzeileFI ;
+ergaenzeauskunft(titelzeile+auskunftstextende,listenauskunft).titelzeile1:IF
+insek1THEN titelzeileCAT titelergaenz1ELSE titelzeileCAT titelergaenz2FI ;
+titelzeileCAT bestandtitel1(statbestandnr);titelzeileCAT aufberzweistellig(
+text(statjgst)).insek1:statjgst<=maxsek1.einfachetitelzeile:titelzeileCAT
+bestandtitel1(statbestandnr).fuellestatistikliste:INT VAR feldnr:=
+standardabstand+1;FOR iFROM 1UPTO maxauswertungenREP standardmaskenfeld(
+bestandtitel2(i),feldnr);feldnrINCR standardabstandPER ;feldnrDECR 1;FOR i
+FROM maxauswertungen+1UPTO maxoblizeileREP feldschutz(feldnr);feldnrINCR
+standardabstandPER .eingangsbildschirmkorrekt:IF sprungvonuntenTHEN TRUE
+ELSE INT VAR i,kreuzzahl:=0;TEXT VAR ankreuzfeld;statbestandnr:=
+standardanfang;FOR iFROM standardanfangUPTO maxbestaende+1REP ankreuzfeld:=
+standardmaskenfeld(i);IF ankreuzfeld<>niltextTHEN IF (i=standardanfang)THEN
+statjgst:=int(ankreuzfeld);IF (NOT lastconversionok)COR statjgstungueltig
+THEN LEAVE eingangsbildschirmkorrektWITH FALSE FI FI ;kreuzzahlINCR 1;
+statbestandnr:=iFI PER ;statbestandnrDECR 1;(kreuzzahl<=maxkreuzzahl)CAND (
+kreuzzahl>0)FI .statjgstungueltig:(statjgst<minjgst)COR (statjgst>maxjgst).
+fehlerbehandlung:standardmeldung(unzulaessigewahlnr,niltext);infeld(
+statbestandnr+1);return(nproc).END PROC statistiklistezeigen;PROC
+erstellestatistik:reinitparsing;IF listenwahlkorrektTHEN startestatistik(
+statbestandnr,statjgst,statauswertungsnr);initialisiereblaettern;
+zeigefertigestatistikELSE fehlerbehandlungFI .listenwahlkorrekt:INT VAR i,
+kreuzzahl:=0;TEXT VAR ankreuzfeld;statauswertungsnr:=standardanfang;INT VAR
+feldnr:=standardabstand;FOR iFROM 1UPTO maxauswertungenREP ankreuzfeld:=
+standardmaskenfeld(feldnr);IF ankreuzfeld<>niltextTHEN kreuzzahlINCR 1;
+statauswertungsnr:=iFI ;feldnrINCR standardabstandPER ;(kreuzzahl<=
+maxkreuzzahl)CAND (kreuzzahl>0).initialisiereblaettern:sprungvonunten:=TRUE ;
+IF NOT fehlerzuvielewerteTHEN standardmeldung(fertignr,niltext)FI ;xaktuell:=
+1;yaktuell:=1.fehlerbehandlung:standardmeldung(unzulaessigewahlnr,niltext);
+infeld(statauswertungsnr*standardabstand);return(nproc).END PROC
+erstellestatistik;PROC zeigefertigestatistik:infeld(fortsetzungsfeld);
+standardnprocEND PROC zeigefertigestatistik;PROC startestatistik(INT CONST
+bestandnr,jgst,auswertungsnr):initialisiere;maskeausgeben;titelausgeben;
+indexbestimmen;bestaendeausgeben;werteverarbeitung(auswertungsnr).
+initialisiere:fehlerzuvielewerte:=FALSE ;statbasisnr:=basisohnebestand;
+statgrundmaske:=niltext.maskeausgeben:standardstartproc(matrix);
+standardmeldung(wartennr,niltext).titelausgeben:titelzeileCAT titeltrenner;
+IF auswertungsnr=versetzungTHEN versetzungsergaenzungFI ;titelzeilenrest;
+titelzeileausgeben.versetzungsergaenzung:liesschuljahr;lieshalbjahr;
+titelzeilenzusatz.liesschuljahr:aktschuljahr:=schulkenndatum(sjahr).
+lieshalbjahr:akthalbjahr:=schulkenndatum(shj).titelzeilenzusatz:titelzeile
+CAT (subtext(aktschuljahr,1,trennpos1));titelzeileCAT trenner2;titelzeileCAT
+(subtext(aktschuljahr,trennpos2));titelzeileCAT trenner1;titelzeileCAT
+akthalbjahr;titelzeileCAT titeltrenner.titelzeilenrest:titelzeileCAT
+bestandtitel2(auswertungsnr);.titelzeileausgeben:titelzeileIN
+ueberschriftenfeld.indexbestimmen:SELECT bestandnrOF CASE allejgst,neuan5,
+neuan11,neuansonst,abgegangene:gewindex:=ixsustatfamrufgebCASE allejgstsek1,
+allejgstsek2,einejgst:gewindex:=ixsustatjgstEND SELECT ;indexvorbelegen.
+indexvorbelegen:inittupel(dnrschueler);waspruefen:=einenbestand;gewbestand:=
+gesamtbestand;SELECT bestandnrOF CASE einejgst:putwert(fnrsustatuss,
+gesamtbestand);putwert(fnrsusgrpjgst,jgstkonv(jgst));waspruefen:=einejgst;
+CASE allejgstsek1:putwert(fnrsustatuss,gesamtbestand);putwert(fnrsusgrpjgst,
+"05");waspruefen:=alleinsek1;CASE allejgstsek2:putwert(fnrsustatuss,
+gesamtbestand);putwert(fnrsusgrpjgst,"11");waspruefen:=alleinsek2;CASE
+allejgst:putwert(fnrsustatuss,gesamtbestand);CASE neuan5:putwert(fnrsustatuss
+,neuanmeld5);gewbestand:=neuanmeld5;CASE neuan11:putwert(fnrsustatuss,
+neuanmeld11);gewbestand:=neuanmeld11;CASE neuansonst:putwert(fnrsustatuss,
+neuanmeldsonst);gewbestand:=neuanmeldsonst;CASE abgegangene:putwert(
+fnrsustatuss,archivbestand);gewbestand:=archivbestand;END SELECT .
+bestaendeausgeben:SELECT bestandnrOF CASE einejgst:ermittleallekomponenten(
+jgst)CASE allejgstsek1:ermittlebestaendezeile(allesek1)CASE allejgstsek2:
+ermittlebestaendezeile(allesek2)CASE allejgst,neuansonst,abgegangene:
+ermittlebestaendezeile(allesek1+allesek2)CASE neuan5:ermittlebestaendezeile(
+praefix(allesek1))CASE neuan11:ermittlebestaendezeile(praefix(allesek2))END
+SELECT ;bestaendezeileersterteilIN spaltentitel.bestaendezeileersterteil:IF
+laengespaltentitel<length(bestaendezeile)THEN rechtsverschiebbar:=TRUE ;text(
+bestaendezeile,laengespaltentitel)ELSE rechtsverschiebbar:=FALSE ;text(
+bestaendezeile,laengespaltentitel)+summentitelFI .END PROC startestatistik;
+PROC werteverarbeitung(INT CONST auswertungsnr):vorbereitung;auswertung.
+vorbereitung:schluesseldateinr:=dnrschluessel.auswertung:dateinummer:=
+dnrschueler;SELECT auswertungsnrOF CASE geschlecht:vglfeld:=fnrsugeschlechts;
+statkonst(weiblich,maennlich);CASE alter:vglfeld:=fnrsugebdatums;statalter
+CASE schultyp:vglfeld:=fnrschart;dateinummer:=dnrschulen;statschluessel(
+bestschulart,PROC registriereeinenschueler)CASE zugang:vglfeld:=
+fnrsuartzugang;statschluessel(bestzugang)CASE versetzung:vglfeld:=
+fnrhjdversetzung;dateinummer:=dnrhalbjahresdaten;statschluessel(
+bestversetzung,PROC registriereeinenschueler)CASE teilnahmereli:dateinummer:=
+dnrdiffdaten;statreliCASE fremdsprachen:dateinummer:=dnrdiffdaten;
+statfremdsprachenCASE kunst:vglfeld:=fnrddkunstmusik;dateinummer:=
+dnrdiffdaten;statvariabel(PROC registriereeinenschueler)CASE ort:vglfeld:=
+fnrsuortsteils;statschluessel(bestort)CASE staat:vglfeld:=fnrsustaatsangs;
+statschluessel(beststaat)CASE sprache:vglfeld:=fnrsumuttersprache;
+statschluessel(bestsprache)CASE einschulung:vglfeld:=fnrsujahreinschul;
+stateinschulungCASE herkunft:vglfeld:=fnrsuskennlschule;statherkunftCASE
+religion:vglfeld:=fnrsureligionsz;statschluessel(bestreligion)CASE aussiedler
+:vglfeld:=fnrsuspaetaus;statkonst(ja,nein);CASE abgang:vglfeld:=fnrsuabggrund
+;statschluessel(bestabgang)CASE abschluss:vglfeld:=fnrsuabschluss;
+statschluessel(bestabschluss)END SELECT .statalter:holetagesdatum;
+statvariabel(PROC zaehlmethodealter).stateinschulung:statvariabel(PROC
+registriereeinenschueler).statherkunft:schluesseldateinr:=dnrschulen;
+statschluessel(bestherkunft).statreli:statvariabel(PROC zaehlmethodereli).
+statfremdsprachen:statvariabel(PROC zaehlmethodefremdsprachen).END PROC
+werteverarbeitung;PROC ermittlebestaendezeile(TEXT CONST titel):
+bestaendezeile:=titel;INT VAR lg:=length(titel),ug:=1,og:=laengezaehlfeld,i:=
+0;REP iINCR 1;spaltenwert(i):=compress(subtext(titel,ug,og));ug:=og+1;ogINCR
+laengezaehlfeldUNTIL og>lgPER ;maxspaltenwert:=iEND PROC
+ermittlebestaendezeile;PROC ermittleallekomponenten(INT CONST jgst):INT VAR
+dnrklassenbestand:=dnraktschuelergruppen;bestaendezeile:=niltext;
+maxspaltenwert:=0;vergleichsjgst:=jgstkonv(jgst);vergleichsstart:=TRUE ;
+inittupel(dnrklassenbestand);putwert(fnrsgrpsj,schulkenndatum(sjahr));putwert
+(fnrsgrphj,schulkenndatum(shj));statleseschleife(dnrklassenbestand,
+vergleichsjgst,niltext,dnrklassenbestand+3,dnrklassenbestand+4,PROC (BOOL
+VAR )gibklasseaus);END PROC ermittleallekomponenten;PROC gibklasseaus(BOOL
+VAR ende):INT CONST dnr:=dnraktschuelergruppen;TEXT CONST klassenjgst:=
+jgstkonv(intwert(dnr+3));IF vergleichsstartTHEN IF vergleichsjgst<>
+klassenjgstTHEN ende:=TRUE ELSE vergleichsjgst:=klassenjgst;vergleichsstart:=
+FALSE FI ELSE IF vergleichsjgst<>klassenjgstTHEN ende:=TRUE FI FI ;IF NOT
+endeTHEN TEXT CONST klassenkennung:=wert(dnr+4);maxspaltenwertINCR 1;
+spaltenwert(maxspaltenwert):=compress(klassenkennung);bestaendezeileCAT
+rechtstext(klassenkennung,laengezaehlfeld);FI END PROC gibklasseaus;PROC
+felderparsen:IF dateinummer=dnrschuelerTHEN IF vglfeld<=fnrsujgsteintrTHEN
+parsenooffields(fnrsujgsteintr-dnrschueler)ELSE parsenooffields(vglfeld-
+dnrschueler)FI ELIF dateinummer=dnrhalbjahresdatenTHEN parsenooffields(
+fnrhjdversetzung)ELIF dateinummer=dnrschulenTHEN parsenooffields(
+fnrsuskennlschule)ELSE parsenooffields(fnrsutiddiffdaten-dnrschueler)FI END
+PROC felderparsen;PROC statkonst(TEXT CONST wert1,wert2):#dr11.05.88#LET
+konstwertezahl=2;felderparsen;setzewerte;gibwerteaus;startezaehlung.
+setzewerte:variablezaehlung:=FALSE ;maxzeilenwert:=konstwertezahl+
+anhangzeilen;zeileleer:=konstwertezahl+1;zeilenwert(1):=wert1;zeilenwert(2):=
+wert2;zeilenwert(zeileleer):=niltext.gibwerteaus:ausgabederzeilenwerte(1).
+startezaehlung:statzaehlung(PROC registriereeinenschueler).END PROC statkonst
+;PROC statschluessel(TEXT CONST bestand):statschluessel(bestand,PROC
+registriereeinenschueler)END PROC statschluessel;PROC statschluessel(TEXT
+CONST bestand,PROC zaehlmethode):systemdboff;setzewerte;gibwerteaus;
+startezaehlung.setzewerte:kuerzelbestand:=bestand;variablezaehlung:=FALSE ;
+maxzeilenwert:=0;inittupel(schluesseldateinr);IF schluesselbestandTHEN
+statleseschleife(schluesseldateinr,bestand,niltext,schluesseldateinr+1,
+schluesseldateinr+2,PROC (BOOL VAR )tragegefundenenzeilenwertein)ELSE
+statleseschleife(schluesseldateinr,niltext,niltext,schluesseldateinr+1,
+schluesseldateinr+2,PROC (BOOL VAR )tragegefundenenzeilenwertein)FI ;
+maxzeilenwertINCR anhangzeilen;zeileleer:=maxzeilenwert-1;zeilenwert(
+maxzeilenwert):=sonsttitel;zeilenwert(zeileleer):=niltext.schluesselbestand:(
+bestandSUB 1)="c".gibwerteaus:ausgabederzeilenwerte(1).startezaehlung:
+statzaehlung(PROC zaehlmethode).END PROC statschluessel;PROC
+tragegefundenenzeilenwertein(BOOL VAR schluss):IF dbstatus=okTHEN IF
+schluesseldateinr=dnrschluesselTHEN IF wert(fnrschlsachgebiet)=kuerzelbestand
+THEN IF maxzeilenwert=mv-anhangzeilenTHEN fehlerzuvielewerte:=TRUE ;
+standardmeldung(meldzuvielewerte,niltext)ELSE maxzeilenwertINCR 1;zeilenwert(
+maxzeilenwert):=wert(fnrschlschluessel)FI ELSE schluss:=TRUE FI ELSE IF
+maxzeilenwert=mv-anhangzeilenTHEN fehlerzuvielewerte:=TRUE ;standardmeldung(
+meldzuvielewerte,niltext)ELSE maxzeilenwertINCR 1;zeilenwert(maxzeilenwert):=
+wert(schluesseldateinr+1)FI FI ELSE schluss:=TRUE FI END PROC
+tragegefundenenzeilenwertein;PROC statvariabel(PROC zaehlmethode):setzewerte;
+gibwerteaus;startezaehlung.setzewerte:variablezaehlung:=TRUE ;maxzeilenwert:=
+0.gibwerteaus:stattext1IN wertebereichanfang;stattext2IN (wertebereichanfang+
+zeilenlaenge).startezaehlung:statzaehlung(PROC zaehlmethode).END PROC
+statvariabel;PROC statzaehlung(PROC zaehlmethode):LET stackgroesse=15;INT
+VAR anzahl;vorbereitung;zaehlschleife;IF variablezaehlungTHEN umsortierenFI ;
+ausgabe.vorbereitung:reinitparsing;neueintragnoetig:=FALSE ;statinit(
+maxzeilenwert,maxspaltenwert).zaehlschleife:anzahl:=stackgroesse;
+multisearchforward(gewindex,anzahl);WHILE anzahl>0REP felderparsen;multisucc;
+IF pruefungbestand(waspruefen)THEN IF dateinummer=dnrdiffdaten#dr11.05.88#
+THEN diffdatenlesenELIF dateinummer=dnrhalbjahresdatenTHEN hjddatenlesenELIF
+dateinummer=dnrschulenTHEN schuldatenlesenFI ;zaehlmethode;
+gegebenenfallsneuenzeilenwertausgeben;anzahlDECR 1;
+wennstackabgearbeitetnachlesenELSE LEAVE zaehlschleifeFI ;PER .diffdatenlesen
+:inittupel(dnrdiffdaten);IF wert(fnrsutiddiffdaten)<>niltextTHEN readtid(
+dnrdiffdaten,wert(fnrsutiddiffdaten))FI .hjddatenlesen:inittupel(
+dnrhalbjahresdaten);IF wert(fnrsutidakthjd)<>niltextTHEN readtid(
+dnrhalbjahresdaten,wert(fnrsutidakthjd));FI .schuldatenlesen:inittupel(
+dnrschulen);IF wert(fnrsuskennlschule)<>niltextTHEN putwert(fnrschkennung,
+wert(fnrsuskennlschule));search(dnrschulen,TRUE )FI .
+gegebenenfallsneuenzeilenwertausgeben:IF variablezaehlungCAND
+neueintragnoetigTHEN ausgabederzeilenwerte(1)FI .
+wennstackabgearbeitetnachlesen:IF anzahl=0THEN anzahl:=stackgroesse;multisucc
+(gewindex,anzahl);FI .umsortieren:quicksort(1,maxzeilenwert).ausgabe:
+zwischentitel(0);ausgabederzeilenwerte(1);statausgeben(1,1).END PROC
+statzaehlung;PROC ausgabederzeilenwerte(INT CONST startzeile):
+sovielzeilenwiemoeglich;uebrigezeilenloeschen.sovielzeilenwiemoeglich:INT
+VAR i,endwert:=min(maxzeilenwert,startzeile+zeilenzahl-1);INT VAR basis:=
+wertebereichanfang;TEXT VAR ausgabewert:="";FOR iFROM startzeileUPTO endwert
+REP IF variablezaehlungTHEN ausgabewert:=zeilenwert(i);IF ausgabewert=
+leertitelplatzhalterTHEN ausgabewert:=leertitelFI ELIF i=zeileleerTHEN
+ausgabewert:=leertitelELIF i=maxzeilenwertTHEN ausgabewert:=sonsttitelELSE
+ausgabewert:=zeilenwert(i)FI ;rechtstext(ausgabewert,laengewertefeld)IN basis
+;basisINCR zeilenlaengePER .uebrigezeilenloeschen:TEXT CONST loeschwert:=
+rechtstext(niltext,laengewertefeld);WHILE basis<maxfeldREP loeschwertIN basis
+;basisINCR zeilenlaengePER .END PROC ausgabederzeilenwerte;PROC
+ausgabederspaltenwerte(INT CONST startspalte):INT VAR basis:=((startspalte-1)
+*laengezaehlfeld)+1;TEXT VAR titel:=subtext(bestaendezeile,basis);IF length(
+titel)<=laengespaltentitelTHEN setzesummenspalteELSE titel:=text(titel,
+laengespaltentitel)FI ;titelIN spaltentitel.setzesummenspalte:titel:=text(
+titel,laengespaltentitel)+summentitel.END PROC ausgabederspaltenwerte;PROC
+spaltenneuausgeben(INT CONST basisspalte):INT VAR i;FOR iFROM spaltenzahl-1
+DOWNTO 1REP statspalteausgeben(basisspalte+i,i)PER END PROC
+spaltenneuausgeben;PROC zwischentitel(INT CONST bestandnr):IF bestandnr=0
+THEN IF rechtsverschiebbarTHEN bestaendetitelsoweitesgehtIN spaltentitel;FI
+ELSE setzecursorFI .bestaendetitelsoweitesgeht:text(bestaendezeile,
+laengespaltentitel).setzecursor:INT VAR aktuellespalte:=bestandnr,basis;IF
+bestandnr>spaltenzahlTHEN basis:=((bestandnr-spaltenzahl)*laengezaehlfeld)+1;
+text(subtext(bestaendezeile,basis),laengespaltentitel)IN spaltentitel;
+aktuellespalte:=spaltenzahl;loeschespalte(wertebereichanfang+aktuellespalte);
+spaltenneuausgeben(bestandnr-spaltenzahl)FI ;infeld(wertebereichanfang+
+aktuellespalte);INT VAR x,y;getcursor(x,y);cursor(x+laengezaehlfeld-1,y-2).
+END PROC zwischentitel;PROC statblaettern(INT CONST richtung):SELECT richtung
+OF CASE links:nachlinksblaetternCASE rechts:nachrechtsblaetternCASE unten:
+nachuntenblaetternCASE oben:nachobenblaetternEND SELECT ;return(nproc).
+nachlinksblaettern:blaettern(xaktuell,yaktuell,0,-spaltenzahl).
+nachrechtsblaettern:blaettern(xaktuell,yaktuell,0,spaltenzahl).
+nachuntenblaettern:blaettern(xaktuell,yaktuell,zeilenzahl,0).
+nachobenblaettern:blaettern(xaktuell,yaktuell,-zeilenzahl,0).END PROC
+statblaettern;PROC blaettern(INT VAR x,y,INT CONST xincr,yincr):IF zulaessig
+THEN meldefortsetzung;fuehreausFI .zulaessig:INT CONST xneu:=x+xincr;INT
+CONST yneu:=y+yincr;((xneu>0)CAND (xneu<=maxzeilenwert))CAND ((yneu>0)CAND (
+yneu<=maxspaltenwert)).meldefortsetzung:IF (xneu=1)CAND (yneu=1)THEN
+rechtstext(niltext,laengewertefeld)IN fortsetzungsfeldELSE fortsetzungstitel
+IN fortsetzungsfeldFI .fuehreaus:x:=xneu;y:=yneu;IF xincr=0THEN
+spaltentitelneuELSE zeilentitelneuFI ;statausgeben(xneu,yneu).spaltentitelneu
+:ausgabederspaltenwerte(yneu).zeilentitelneu:ausgabederzeilenwerte(xneu).END
+PROC blaettern;PROC registriereeinenschueler:tragevariablenwertein(wert(
+vglfeld))END PROC registriereeinenschueler;PROC zaehlmethodealter:TEXT CONST
+suchwert:=jgstkonv(lebensalter(wert(fnrsugebdatums)));tragevariablenwertein(
+suchwert)END PROC zaehlmethodealter;PROC zaehlmethodereli:TEXT VAR suchwert:=
+"";suchwert:=wert(fnrddreliunter);IF NOT leerTHEN IF abgemeldetTHEN suchwert
+:=abgkz+suchwertFI FI ;eintragen.leer:suchwert=niltext.abgemeldet:datum(
+datumrekonversion(wert(fnrddabmeldedatreli)))<>nildatum.eintragen:
+tragevariablenwertein(suchwert).END PROC zaehlmethodereli;PROC
+zaehlmethodefremdsprachen:TEXT VAR suchwert:=text(wert(fnrdd1fremdfach),2)+
+text(wert(fnrdd2fremdfach),2)+text(wert(fnrdd3fremdfach),2)+text(wert(
+fnrdd4fremdfach),2);IF suchwert=zeilenlaenge*blankTHEN suchwert:=niltextFI ;
+tragevariablenwertein(suchwert)END PROC zaehlmethodefremdsprachen;PROC
+tragevariablenwertein(TEXT CONST suchwert):INT VAR lva:=0,zeilennr:=0;BOOL
+VAR gefunden:=TRUE ;TEXT VAR gefundenerwert:=niltext;sucheaktuellenbestand;
+suchegefundenenwert;IF NOT gefundenAND variablezaehlungTHEN IF maxzeilenwert=
+mvTHEN fehlerzuvielewerte:=TRUE ;standardmeldung(meldzuvielewerte,niltext)
+ELSE neueintragnoetig:=TRUE ;zeilennrINCR 1;maxzeilenwert:=zeilennr;
+zeilenwert(zeilennr):=gefundenerwert;statinit(maxzeilenwert);registrierenFI
+ELSE neueintragnoetig:=FALSE ;registrierenFI .sucheaktuellenbestand:SELECT
+statbestandnrOF CASE einejgst:bestimmeaktuellenbestandCASE allejgstsek2:
+aktuellerbestand:=int(wert(fnrsusgrpjgst))-10CASE allejgst,allejgstsek1,
+abgegangene:aktuellerbestand:=int(wert(fnrsusgrpjgst))-4CASE neuansonst:
+aktuellerbestand:=int(wert(fnrsujgsteintr))-4CASE neuan5,neuan11:
+aktuellerbestand:=1END SELECT ;.bestimmeaktuellenbestand:FOR lvaFROM 1UPTO
+maxspaltenwertREP IF compress(wert(fnrsusgrpzugtut))=compress(spaltenwert(lva
+))THEN aktuellerbestand:=lva;LEAVE bestimmeaktuellenbestandFI PER .
+suchegefundenenwert:IF suchwert=niltextTHEN IF variablezaehlungTHEN
+gefundenerwert:=leertitelplatzhalter;zeilennr:=gefundenezeile(gefundenerwert,
+maxzeilenwert,gefunden)ELSE zeilennr:=zeileleerFI ELSE gefundenerwert:=
+suchwert;zeilennr:=gefundenezeile(gefundenerwert,maxzeilenwert,gefunden)FI .
+registrieren:statauszaehlen(zeilennr,aktuellerbestand).END PROC
+tragevariablenwertein;INT PROC gefundenezeile(TEXT CONST vergleichswert,INT
+CONST oberegrenze,BOOL VAR gefunden):INT VAR i;FOR iFROM 1UPTO oberegrenze
+REP IF vergleichswert=zeilenwert(i)THEN gefunden:=TRUE ;LEAVE gefundenezeile
+WITH iFI PER ;gefunden:=FALSE ;maxzeilenwertEND PROC gefundenezeile;PROC
+holetagesdatum:TEXT CONST tagesdatum:=date;jahrdestagesdatums:=int(subtext(
+tagesdatum,beginnjahr));monatdestagesdatums:=int(subtext(tagesdatum,
+beginnmonat,endemonat));tagdestagesdatums:=int(subtext(tagesdatum,beginntag,
+endetag));END PROC holetagesdatum;INT PROC lebensalter(TEXT CONST
+geburtsdatum):INT VAR grundalter:=jahrdestagesdatums-int(subtext(geburtsdatum
+,beginnjahr));IF spaeterermonatgeborenCOR (gleichermonatgeborenCAND
+spaeterertaggeboren)THEN einsjuengerFI ;grundalter.einsjuenger:grundalter
+DECR 1.spaeterermonatgeboren:INT CONST geburtsmonat:=int(subtext(geburtsdatum
+,beginnmonat,endemonat));geburtsmonat>monatdestagesdatums.
+gleichermonatgeboren:geburtsmonat=monatdestagesdatums.spaeterertaggeboren:int
+(subtext(geburtsdatum,beginntag,endetag))>tagdestagesdatums.END PROC
+lebensalter;TEXT PROC aufberzweistellig(TEXT CONST jgst):IF length(jgst)=1
+THEN null+jgstELSE jgstFI END PROC aufberzweistellig;TEXT PROC praefix(TEXT
+CONST t):subtext(t,1,laengezaehlfeld)END PROC praefix;PROC quicksort(INT
+CONST anfang,ende):IF anfang<endeTHEN waehlepivot;sortieregrob;fuegepivotein;
+quicksort(anfang,pivotstelle-1);quicksort(pivotstelle+1,ende)FI .waehlepivot:
+vertauscheinzeilenwert(anfang,(anfang+ende)DIV 2);TEXT CONST pivot:=
+zeilenwert(anfang).sortieregrob:nimmreduziertezeilenwert;REP schluckelinks;
+schluckerechts;IF nochnichtleerTHEN vertauscheamrandELSE LEAVE sortieregrob
+FI PER .nimmreduziertezeilenwert:INT VAR bereichsanfang:=anfang+1,
+bereichsende:=ende.nochnichtleer:bereichsanfang<=bereichsende.schluckelinks:
+WHILE nochnichtleerCAND zeilenwert(bereichsanfang)<=pivotREP bereichsanfang
+INCR 1PER .schluckerechts:WHILE nochnichtleerCAND zeilenwert(bereichsende)>=
+pivotREP bereichsendeDECR 1PER .vertauscheamrand:vertauscheinzeilenwert(
+bereichsanfang,bereichsende).fuegepivotein:INT CONST pivotstelle:=
+bereichsende;vertauscheinzeilenwert(anfang,pivotstelle).END PROC quicksort;
+PROC vertauscheinzeilenwert(INT CONST i,j):TEXT VAR hilfselement:=zeilenwert(
+i);zeilenwert(i):=zeilenwert(j);zeilenwert(j):=hilfselement;
+statzeilevertauschen(i,j)END PROC vertauscheinzeilenwert;TEXT PROC jgstkonv(
+INT CONST jgst):TEXT CONST tjgst:=text(jgst);IF jgst<maxsek1THEN null+tjgst
+ELSE tjgstFI END PROC jgstkonv;BOOL PROC pruefungbestand(INT CONST welchen):
+BOOL VAR b;SELECT welchenOF CASE einenbestand:pruefungeinenbestand(b)CASE
+einejgst:pruefungeinejgst(b)CASE alleinsek1:pruefungsek1(b)CASE alleinsek2:
+pruefungsek2(b)END SELECT ;bEND PROC pruefungbestand;PROC pruefungeinejgst(
+BOOL VAR b):b:=(wert(fnrsustatuss)=gewbestandCAND wert(fnrsusgrpjgst)=
+vergleichsjgst)END PROC pruefungeinejgst;PROC pruefungeinenbestand(BOOL VAR b
+):b:=(wert(fnrsustatuss)=gewbestand)END PROC pruefungeinenbestand;PROC
+pruefungsek1(BOOL VAR b):b:=(wert(fnrsustatuss)=gewbestandCAND intwert(
+fnrsusgrpjgst)<=maxsek1)END PROC pruefungsek1;PROC pruefungsek2(BOOL VAR b):b
+:=(wert(fnrsustatuss)=gewbestandCAND intwert(fnrsusgrpjgst)>maxsek1)END PROC
+pruefungsek2;END PACKET statintern;
+
diff --git a/app/schulis/2.2.1/src/2.AUSWERTUNGEN KURSWAHL.files b/app/schulis/2.2.1/src/2.AUSWERTUNGEN KURSWAHL.files
new file mode 100644
index 0000000..e5bd001
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.AUSWERTUNGEN KURSWAHL.files
@@ -0,0 +1,7 @@
+2.kurswahl schnittstelle
+2.likw schuelerwahl sek2
+2.likw kurskombinationen sek2
+2.likw wahl und kursdaten sek2
+2.kw anschr kurslisten sek2
+2.stand der kursbildung analysieren
+
diff --git a/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL 2.files b/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL 2.files
new file mode 100644
index 0000000..8e00897
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL 2.files
@@ -0,0 +1,5 @@
+2.kurswahl schnittstelle
+2.kurszuordnung und umwahl fuer einzelne schueler sek2
+2.kursdaten exportieren
+2.kursdaten importieren
+
diff --git a/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL.files b/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL.files
new file mode 100644
index 0000000..2f7ea21
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL.files
@@ -0,0 +1,8 @@
+0.kurswahlbasis bereinigen
+2.kurswahl schnittstelle
+2.erf wahldaten
+2.kurse auf planbloecke legen
+2.schueler zu kursen zuordnen
+2.konsistenzpruefung in kursdaten
+2.halbjahreswechsel fuer kursdaten
+
diff --git a/app/schulis/2.2.1/src/2.erf wahldaten b/app/schulis/2.2.1/src/2.erf wahldaten
new file mode 100644
index 0000000..79ab36c
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.erf wahldaten
@@ -0,0 +1,395 @@
+PACKET erfwahldatenDEFINES wahldatenveraendern,wahldatenspeichern,
+wahldatenbeenden,wahldatenuebernehmen,wahldatenschuelerlisten,
+wahldatenlisteblaettern,wahldatenlistenachbereiten:LET eingangsmaske=
+"ms wahldaten eingang",textzumeingangsknoten="Wahldaten bearbeiten",
+fnreingbetrjgst=2,fnreingbetrhj=3,fnreingsuderjgst=4,fnreingneuangzurjgst=5,
+fnreingfamiliennamesu=6,fnreingrufnamesu=7,fnreinggeburtsdatumsu=8,
+fnreingkurse=9,fnreinguebernausjgst=10,fnreinguebernaushj=11,
+fnreingcursorruhepos=12;LET jgst10="10",jgst11="11",jgst12="12",jgst13="13",
+hj1="1",hj2="2";LET logtext1="Anw. 2.1.1 Wahl ",logtext2="übernehmen ",
+logtext3=" nach ",logtext4=" für akt. ",text1=" """,text2=""" ",komma=", ",
+punkt=".";TEXT VAR logmeldung;TEXT VAR betrjgst,betrhj,jgstfuersu,
+jgstfuerneuang,aktjgst,schuelermenge,gewsj,sufamname,surufname,sugebdatum,
+kurswahlgewünscht,uebernausjgst,uebernaushj;LET bearbeitungsmaske=
+"ms wahldaten",fnrmeldungsfeld=1,fnrschuljahr=2,fnrschueler=3,
+fnrerstesfachart=4,fnrersteeingabe=5,letztefeldnummer=195,
+offsetnächsteeingabe=2,textfaecherwahl="Fächerwahl",textkurswahl="Kurswahl",
+titelanfang=" eingeben für jetzige Jgst. ",titelmitte=" in ",trennerfuerjgst=
+".",trennerfuerschuljahr="/";LET längedesfaches=2,längederart=2,
+längederkennung=4,längefachmitkennung=6,längeeinesplbl=3,maxfächeroderkurse=
+96,maximalewahlen=13;TEXT VAR aktuellerschueler,alleabiturklausurkürzel;LET
+ankreuzung="x";TEXT VAR allefächeroderkursangebote;INT VAR
+längefachoderkursangebot;LET längefachangebot=4,posfachimfachangebot=3,
+längekursangebot=10,poskennungimkursangebot=3,endposkennungimkursangebot=6,
+posartimkursangebot=9;LET listenmaske="mu objektliste",fnrerstesankreuzfeld=2
+,felderprolisteneintrag=2,listeneintraegeproseite=18;LET andenanfang=1,
+ansende=2,vorwaerts=3,rueckwaerts=4,dummyschueler="",sunamenstrenner=", ",
+sulaengeohnedatum=60,datumstrenner=".",maxankreuzungen=1000,ankreuzungliste=
+"x",keineankreuzung="",boolvektordatei="Boolvektor";BOUND ROW maxankreuzungen
+BOOL VAR boolvektor;LET meldungfalschejgst=404,meldungfalscheshj=405,
+meldungfalschejgstfuersu=404,meldungfalschejgstfuerneuang=404,
+meldungmindestenseinejgst=409,meldungjgstsaufeinanderfolgend=410,
+meldungjgstzurueckliegend=411,meldunghjzurueckliegend=412,
+meldungnurzweiteshjmoeglich=413,meldungfeldleerlassen=390,meldungfamnamefehlt
+=166,meldungrufnamefehlt=129,meldungsperrengescheitert=425,
+meldungkeinenschülerangeben=414,meldungübernahmeinsichselbst=415,
+meldungfrageuebernehmen=300,meldungdatenfehlen=68,meldunguebernehmen=301,
+meldunginbearbeitung=352,meldungdatenuebernommen=302,meldungplausi=57,
+meldunglistewirderstellt=7,meldungblaetternnichtmöglich=72,
+meldungkurswahlserverfehlt=416,meldungsugruppeleer=423,meldungkeinangebot=417
+,meldungangebotzugross=418,meldungzuvielewahlen=421,meldungfalscheskürzel=55,
+meldunginkonsistenz=419,meldungdoppelbelegung=420,meldungspeicherung=50,
+meldungspeicherfehler=73;LET kuerzelfuerneuang="N",kuerzelfuersuderjgst="O",
+kuerzelfuerallesu="",kennungnursuname="N",kennungnurwahldatenzumsu="K",
+kennungalleszumsu="A",längeeinerwahl=15,posklausurineinerwahl=1,
+posartineinerwahl=2,leereart=" ",posfachineinerwahl=4,poskennungineinerwahl=
+6,leerekennung=" ",posplbl1ineinerwahl=10,leererplbl=" ",
+leerekennungundplbl=" ",kennungnurplanblöcke="P",poszweiterplbl=4,
+keinplbl="",zusperrenderkwdatenraum="Kurswahl-2 ";LET dbtrenner="�",
+textschulhalbjahr="Schulhalbjahr",textschuljahr="Schuljahr",
+bestandabiturklausur="c02 abitur klausur";LET blank=" ",niltext="";TEXT VAR
+zugrundeliegendeshj:=niltext,zugrundeliegendessj:=niltext,
+zugrundeliegendejgst:=niltext;BOOL VAR übernahmeingang:=FALSE ,
+bearbeitennachliste:=FALSE ,bearbeitungingang:=FALSE ;INT VAR aktuellezeile,
+erstezeile,letztezeile;LET pufferdatenraum="temporärdatei";ROW maximalewahlen
+TEXT VAR plbl1,plbl2;ROW maximalewahlenINT VAR fnrzurwahl;TEXT VAR eintrag;
+FILE VAR f;BOOL VAR keineplanblöcke;INT VAR ptrfachoderkursangebot,zähler,
+rücksprungweite:=1;PROC wahldatenveraendern:INT VAR fehlerstatus,fnr,i;BOOL
+VAR sperregesetzt;IF NOT bearbeitennachlisteTHEN fehlerstatus:=
+angabenpruefungdereingangsmaske(2);IF fehlerstatus<>0THEN infeld(fehlerstatus
+);return(1);LEAVE wahldatenveraendernFI ;FI ;holeallerelevantendaten;
+bearbeitungingang:=TRUE ;setzeueberschriftindenmaskekopf;
+bleibendeangabenindiemaskefüllen;gefuelltebearbeitungsmaskeausgeben;
+standardnproc.holeallerelevantendaten:IF NOT bearbeitennachlisteTHEN
+kurswahlinitialisieren(aktjgst,betrjgst,betrhj,schuelermenge,gewsj);
+kurswahlbasisholen(fehlerstatus);IF fehlerstatus<>0THEN infeld(
+fnreingbetrjgst);wahldatenbeenden;standardmeldung(meldungkurswahlserverfehlt,
+niltext);LEAVE wahldatenveraendernFI ;IF letzterschueler<ersterschuelerTHEN
+IF schuelermenge=kuerzelfuerneuangTHEN infeld(fnreingneuangzurjgst)ELSE
+infeld(fnreingsuderjgst)FI ;wahldatenbeenden;standardmeldung(
+meldungsugruppeleer,niltext);LEAVE wahldatenveraendernFI ;
+ermittlelistenstartundende;FI ;IF kurswahlgewünscht=niltextTHEN
+zugrundeliegendejgst:=aktjgst;IF aktjgst<betrjgstCOR zugrundeliegendeshj<
+betrhjTHEN geplanteshjundsjberechnen(zugrundeliegendeshj,zugrundeliegendessj)
+;IF zugrundeliegendeshj=hj1THEN zugrundeliegendejgst:=text(int(aktjgst)+1,2)
+FI FI ;allefächeroderkursangebote:=niltext;first(dnrfaecherangebot);
+statleseschleife(dnrfaecherangebot,zugrundeliegendessj,zugrundeliegendeshj,
+fnrfangsj,fnrfanghj,PROC (BOOL VAR )sammlefächerangebot);
+längefachoderkursangebot:=längefachangebot;ELSE allefächeroderkursangebote:=
+allekurse;längefachoderkursangebot:=längekursangebot;FI ;IF
+allefächeroderkursangebote=niltextTHEN infeld(fnreingbetrjgst);
+wahldatenbeenden;standardmeldung(meldungkeinangebot,niltext);LEAVE
+wahldatenveraendernFI ;IF length(allefächeroderkursangebote)DIV
+längefachoderkursangebot>maxfächeroderkurseTHEN infeld(fnreingbetrjgst);
+wahldatenbeenden;standardmeldung(meldungangebotzugross,niltext);LEAVE
+wahldatenveraendernFI ;alleabiturklausurkürzel:=ankreuzung;first(
+dnrschluessel);statleseschleife(dnrschluessel,bestandabiturklausur,"",
+fnrschlsachgebiet,fnrschlschluessel,PROC (BOOL VAR )sammlekürzel);IF
+bearbeitennachlisteTHEN aktuellezeile:=erstezeile-1ELSE aktuellezeileDECR 1
+FI ;naechsterindex(aktuellezeile);IF aktuellezeile=0THEN infeld(
+fnreingbetrjgst);wahldatenbeenden;LEAVE wahldatenveraendernFI ;
+kurswahlsperresetzen(zusperrenderkwdatenraum,sperregesetzt);IF NOT
+sperregesetztTHEN infeld(fnreingbetrjgst);wahldatenbeenden;standardmeldung(
+meldungsperrengescheitert,niltext);LEAVE wahldatenveraendernFI ;.
+setzeueberschriftindenmaskekopf:TEXT VAR t;IF kurswahlgewünscht<>niltextTHEN
+t:=textkurswahlELSE t:=textfaecherwahlFI ;tCAT titelanfang;tCAT aktjgst;tCAT
+titelmitte;tCAT betrjgst;tCAT trennerfuerjgst;tCAT betrhj;standardstartproc(
+bearbeitungsmaske);standardkopfmaskeaktualisieren(t).
+bleibendeangabenindiemaskefüllen:standardmaskenfeld(text(gewsj,2)+
+trennerfuerschuljahr+subtext(gewsj,3),fnrschuljahr);fnr:=fnrerstesfachart;
+FOR iFROM 1UPTO length(allefächeroderkursangebote)DIV
+längefachoderkursangebotREP eintrag:=subtext(allefächeroderkursangebote,1+(i-
+1)*längefachoderkursangebot,i*längefachoderkursangebot);IF kurswahlgewünscht=
+niltextTHEN eintrag:=subtext(eintrag,posfachimfachangebot)+blank+text(text(
+eintrag,längederart),längederkennung)ELSE eintrag:=text(eintrag,
+längedesfaches)+blank+subtext(eintrag,poskennungimkursangebot,
+endposkennungimkursangebot)FI ;standardmaskenfeld(eintrag,fnr);fnrINCR
+offsetnächsteeingabePER ;fnrINCR 1;WHILE fnr<=letztefeldnummerREP feldschutz(
+fnr);fnrINCR offsetnächsteeingabePER .END PROC wahldatenveraendern;PROC
+wahldatenspeichern(BOOL CONST speichern):INT VAR i,j,fnr,fehlerstatus;TEXT
+VAR wahldaten,p1,p2,fname,rname,gebdat;IF speichernTHEN
+evtlaktuelleplanblöckeholen;pruefeplausibilitaet;speicherungdurchfuehren;
+logbucheintragausfuehrenFI ;naechsterindex(aktuellezeile);IF aktuellezeile<>0
+THEN gefuelltebearbeitungsmaskeausgeben;return(1)ELSE wahldatenbeendenFI .
+logbucheintragausfuehren:logmeldung:=betrjgst;logmeldungCAT punkt;logmeldung
+CAT betrhj;logmeldungCAT text1;logmeldungCAT fname;logmeldungCAT komma;
+logmeldungCAT rname;logmeldungCAT komma;logmeldungCAT gebdat;logmeldungCAT
+text2;logbucheintragvornehmen(logmeldung);.evtlaktuelleplanblöckeholen:IF
+kurswahlgewünscht<>niltextTHEN kurswahl1holen(fehlerstatus);keineplanblöcke:=
+fehlerstatus<>0FI .pruefeplausibilitaet:standardmeldung(meldungplausi,niltext
+);wahldaten:=niltext;zähler:=0;fnr:=fnrersteeingabe;FOR iFROM 1UPTO length(
+allefächeroderkursangebote)DIV längefachoderkursangebotREP IF
+standardmaskenfeld(fnr)<>niltextTHEN zählerINCR 1;IF zähler>maximalewahlen
+THEN standardmeldung(meldungzuvielewahlen,niltext);infeld(fnr);return(1);
+LEAVE wahldatenspeichernFI ;IF length(standardmaskenfeld(fnr))>1COR pos(
+alleabiturklausurkürzel,standardmaskenfeld(fnr))=0THEN standardmeldung(
+meldungfalscheskürzel,niltext);infeld(fnr);return(1);LEAVE wahldatenspeichern
+FI ;IF standardmaskenfeld(fnr)=ankreuzungTHEN wahldatenCAT blankELSE
+wahldatenCAT standardmaskenfeld(fnr)FI ;ptrfachoderkursangebot:=(i-1)*
+längefachoderkursangebot;IF kurswahlgewünscht=niltextTHEN wahldatenCAT
+subtext(allefächeroderkursangebote,ptrfachoderkursangebot+1,
+ptrfachoderkursangebot+längefachoderkursangebot);wahldatenCAT
+leerekennungundplbl;ELSE wahldatenCAT subtext(allefächeroderkursangebote,
+ptrfachoderkursangebot+posartimkursangebot,ptrfachoderkursangebot+
+längekursangebot);p1:=subtext(allefächeroderkursangebote,
+ptrfachoderkursangebot+1,ptrfachoderkursangebot+längefachmitkennung);
+wahldatenCAT p1;IF keineplanblöckeTHEN wahldatenCAT leererplbl;wahldatenCAT
+leererplblELSE p1:=kursdaten(p1,kennungnurplanblöcke);IF p1=keinplblTHEN p1:=
+leererplbl;p2:=leererplblELSE p2:=subtext(p1,poszweiterplbl);p1:=subtext(p1,1
+,längeeinesplbl)FI ;FOR jFROM 1UPTO zähler-1REP IF (p1<>leererplblCAND (p1=
+plbl1[j]COR p1=plbl2[j]))COR (p2<>leererplblCAND (p2=plbl2[j]COR p2=plbl1[j])
+)THEN standardmeldung(meldungdoppelbelegung,standardmaskenfeld(fnrzurwahl[j])
++"#");infeld(fnr);return(1);LEAVE wahldatenspeichernFI ;PER ;plbl1[zähler]:=
+p1;plbl2[zähler]:=p2;wahldatenCAT p1;wahldatenCAT p2;fnrzurwahl[zähler]:=fnr-
+1;FI FI FI ;fnrINCR offsetnächsteeingabePER .speicherungdurchfuehren:
+standardmeldung(meldungspeicherung,niltext);i:=pos(aktuellerschueler,
+dbtrenner);j:=pos(aktuellerschueler,dbtrenner,i+1);fname:=text(
+aktuellerschueler,i-1);rname:=subtext(aktuellerschueler,i+1,j-1);gebdat:=
+subtext(aktuellerschueler,j+1);schuelerwahleintragen(fname,rname,gebdat,
+wahldaten);.END PROC wahldatenspeichern;PROC wahldatenbeenden:INT VAR
+fehlerstatus:=0,i;rücksprungweite:=1;IF übernahmeingangTHEN forget(
+pufferdatenraum,quiet);FOR iFROM fnreingbetrjgstUPTO fnreinguebernaushjREP
+feldfrei(i)PER ;feldschutz(fnreingcursorruhepos);infeld(fnreingbetrjgst);IF
+NOT bearbeitungingangTHEN kurswahlsperrebeenden(zusperrenderkwdatenraum);
+rücksprungweiteINCR 1FI ;übernahmeingang:=FALSE ELSE IF bearbeitennachliste
+COR bearbeitungingangTHEN fülleeingangsmaskeFI FI ;IF bearbeitennachliste
+THEN forget(boolvektordatei,quiet);bearbeitennachliste:=FALSE ;
+rücksprungweiteINCR 1FI ;IF bearbeitungingangTHEN kurswahl2sichern(
+fehlerstatus);IF fehlerstatus<>0THEN standardmeldung(meldungspeicherfehler,
+niltext);infeld(fnreingbetrjgst)FI ;kurswahlsperrebeenden(
+zusperrenderkwdatenraum);bearbeitungingang:=FALSE ;rücksprungweiteINCR 1FI ;
+return(rücksprungweite).fülleeingangsmaske:standardstartproc(eingangsmaske);
+standardkopfmaskeaktualisieren(textzumeingangsknoten);standardmaskenfeld(
+betrjgst,fnreingbetrjgst);standardmaskenfeld(betrhj,fnreingbetrhj);
+standardmaskenfeld(jgstfuersu,fnreingsuderjgst);standardmaskenfeld(
+jgstfuerneuang,fnreingneuangzurjgst);standardmaskenfeld(sufamname,
+fnreingfamiliennamesu);standardmaskenfeld(surufname,fnreingrufnamesu);
+standardmaskenfeld(sugebdatum,fnreinggeburtsdatumsu);standardmaskenfeld(
+kurswahlgewünscht,fnreingkurse);standardmaskenfeld(uebernausjgst,
+fnreinguebernausjgst);standardmaskenfeld(uebernaushj,fnreinguebernaushj);
+standardmaskenfeld(niltext,fnreingcursorruhepos);.END PROC wahldatenbeenden;
+PROC wahldatenuebernehmen(BOOL CONST hauptaktion):INT VAR i,j1,j2,j3,j4,
+fehlerstatus;TEXT VAR zeile,wahlen,t;BOOL VAR sperregesetzt;IF NOT
+hauptaktionTHEN fehlerstatus:=angabenpruefungdereingangsmaske(1);IF
+fehlerstatus<>0THEN infeld(fehlerstatus);return(1);LEAVE wahldatenuebernehmen
+FI ;kurswahlinitialisieren(aktjgst,uebernausjgst,uebernaushj,schuelermenge,
+gewsj);kurswahlbasisholen(fehlerstatus);IF fehlerstatus<>0THEN
+standardmeldung(meldungkurswahlserverfehlt,niltext);infeld(fnreingbetrjgst);
+return(1);LEAVE wahldatenuebernehmenFI ;IF letzterschueler<ersterschueler
+THEN standardmeldung(meldungsugruppeleer,niltext);IF schuelermenge=
+kuerzelfuerneuangTHEN infeld(fnreingneuangzurjgst)ELSE infeld(
+fnreingsuderjgst)FI ;return(1);LEAVE wahldatenuebernehmenFI ;IF NOT
+kurswahldatenvorhandenTHEN standardmeldung(meldungdatenfehlen,niltext);infeld
+(fnreinguebernausjgst);return(1);LEAVE wahldatenuebernehmenFI ;f:=
+sequentialfile(output,pufferdatenraum);FOR iFROM ersterschuelerUPTO
+letzterschuelerREP putline(f,wahldatenzumindex(i,kennungalleszumsu))PER ;
+kurswahlinitialisieren(aktjgst,betrjgst,betrhj,schuelermenge,gewsj);
+kurswahlbasisholen(fehlerstatus);IF fehlerstatus<>0THEN standardmeldung(
+meldungkurswahlserverfehlt,niltext);infeld(fnreingbetrjgst);forget(
+pufferdatenraum,quiet);return(1);LEAVE wahldatenuebernehmenFI ;
+kurswahlsperresetzen(zusperrenderkwdatenraum,sperregesetzt);IF NOT
+sperregesetztTHEN standardmeldung(meldungsperrengescheitert,niltext);infeld(
+fnreingbetrjgst);forget(pufferdatenraum,quiet);return(1);LEAVE
+wahldatenuebernehmenFI ;übernahmeingang:=TRUE ;standardmeldung(
+meldungfrageuebernehmen,niltext);FOR iFROM fnreingbetrjgstUPTO
+fnreinguebernaushjREP feldschutz(i)PER ;feldfrei(fnreingcursorruhepos);infeld
+(fnreingcursorruhepos);standardnproc;ELSE standardmeldung(meldunguebernehmen,
+niltext);bearbeitungingang:=TRUE ;f:=sequentialfile(input,pufferdatenraum);
+WHILE NOT eof(f)REP getline(f,zeile);j1:=pos(zeile,dbtrenner);j2:=pos(zeile,
+dbtrenner,j1+1);j3:=pos(zeile,dbtrenner,j2+1);j4:=pos(zeile,dbtrenner,j3+1);
+standardmeldung(meldunginbearbeitung,subtext(zeile,j1+1,j2-1)+"#");IF
+kurswahlgewünscht=niltextTHEN t:=text(zeile,j1-1);wahlen:=niltext;FOR iFROM 1
+UPTO length(t)DIV längeeinerwahlREP wahlenCAT subtext(t,(i-1)*längeeinerwahl+
+1,(i-1)*längeeinerwahl+poskennungineinerwahl-1);wahlenCAT leerekennungundplbl
+PER ELSE wahlen:=text(zeile,j1-1)FI ;schuelerwahleintragen(subtext(zeile,j1+1
+,j2-1),subtext(zeile,j2+1,j3-1),subtext(zeile,j3+1,j4-1),wahlen);PER ;
+standardmeldung(meldungdatenuebernommen,niltext);logmeldung:=logtext2;
+logmeldungCAT uebernausjgst;logmeldungCAT punkt;logmeldungCAT uebernaushj;
+logmeldungCAT logtext3;logmeldungCAT betrjgst;logmeldungCAT punkt;logmeldung
+CAT betrhj;logmeldungCAT logtext4;logmeldungCAT aktjgst;
+logbucheintragvornehmen(logmeldung);wahldatenbeendenFI END PROC
+wahldatenuebernehmen;PROC wahldatenschuelerlisten:INT VAR i,fehlerstatus;
+fehlerstatus:=angabenpruefungdereingangsmaske(2);IF fehlerstatus<>0THEN
+infeld(fehlerstatus);return(1);LEAVE wahldatenschuelerlistenFI ;
+standardmeldung(meldunglistewirderstellt,niltext);kurswahlinitialisieren(
+aktjgst,betrjgst,betrhj,schuelermenge,gewsj);kurswahlbasisholen(fehlerstatus)
+;IF fehlerstatus<>0THEN standardmeldung(meldungkurswahlserverfehlt,niltext);
+infeld(fnreingbetrjgst);return(1);LEAVE wahldatenschuelerlistenFI ;IF
+letzterschueler<ersterschuelerTHEN standardmeldung(meldungsugruppeleer,
+niltext);IF schuelermenge=kuerzelfuerneuangTHEN infeld(fnreingneuangzurjgst)
+ELSE infeld(fnreingsuderjgst)FI ;return(1);LEAVE wahldatenschuelerlistenFI ;
+bearbeitennachliste:=TRUE ;ermittlelistenstartundende;initboolvektor;
+standardstartproc(listenmaske);listezeigenabzeile(aktuellezeile);
+wahldatenlistenachbereiten.initboolvektor:boolvektor:=new(boolvektordatei);
+FOR iFROM erstezeileUPTO letztezeileREP boolvektor(i):=FALSE PER .END PROC
+wahldatenschuelerlisten;PROC wahldatenlisteblaettern(INT CONST aktion):
+SELECT aktionOF CASE andenanfang:aktuellezeile:=erstezeile;listezeigenabzeile
+(aktuellezeile)CASE ansende:IF aktuellezeile+listeneintraegeproseite>
+letztezeileTHEN standardmeldung(meldungblaetternnichtmöglich,"")ELSE
+aktuellezeile:=max(1,letztezeile-listeneintraegeproseite+1);
+listezeigenabzeile(aktuellezeile)FI CASE vorwaerts:IF aktuellezeile+
+listeneintraegeproseite>letztezeileTHEN standardmeldung(
+meldungblaetternnichtmöglich,"")ELSE aktuellezeileINCR
+listeneintraegeproseite;listezeigenabzeile(aktuellezeile)FI CASE rueckwaerts:
+IF aktuellezeile=erstezeileTHEN standardmeldung(meldungblaetternnichtmöglich,
+"")ELSE aktuellezeileDECR listeneintraegeproseite;aktuellezeile:=max(
+aktuellezeile,erstezeile);listezeigenabzeile(aktuellezeile)FI END SELECT ;
+return(1)END PROC wahldatenlisteblaettern;PROC wahldatenlistenachbereiten:
+INT VAR i,fnr;infeld(fnrerstesankreuzfeld);standardnproc;fnr:=
+fnrerstesankreuzfeld;FOR iFROM aktuellezeileUPTO min(aktuellezeile+
+listeneintraegeproseite,letztezeile)REP boolvektor(i):=standardmaskenfeld(fnr
+)<>niltext;fnrINCR felderprolisteneintragPER END PROC
+wahldatenlistenachbereiten;PROC ermittlelistenstartundende:INT VAR index,j1,
+j2;TEXT VAR t;letztezeile:=min(maxankreuzungen,letzterschueler);erstezeile:=
+min(ersterschueler,letztezeile);aktuellezeile:=erstergewuenschterschueler.
+erstergewuenschterschueler:index:=erstezeile;IF sufamname<>niltextTHEN t:=
+wahldatenzumindex(index,kennungnursuname);j1:=pos(t,dbtrenner);WHILE
+sufamname>text(t,j1-1)CAND index<letztezeileREP indexINCR 1;t:=
+wahldatenzumindex(index,kennungnursuname);j1:=pos(t,dbtrenner);PER ;IF
+sufamname=text(t,j1-1)THEN j2:=pos(t,dbtrenner,j1+1);WHILE sufamname=text(t,
+j1-1)CAND surufname>subtext(t,j1+1,j2-1)CAND index<letztezeileREP indexINCR 1
+;t:=wahldatenzumindex(index,kennungnursuname);j1:=pos(t,dbtrenner);j2:=pos(t,
+dbtrenner,j1+1);PER ;FI ;IF sugebdatum<>niltextTHEN WHILE sufamname=text(t,j1
+-1)CAND surufname=subtext(t,j1+1,j2-1)CAND text(sugebdatum,2)+datumstrenner+
+subtext(sugebdatum,3,4)+datumstrenner+subtext(sugebdatum,5)<>subtext(t,j2+1)
+CAND index<letztezeileREP indexINCR 1;t:=wahldatenzumindex(index,
+kennungnursuname);j1:=pos(t,dbtrenner);j2:=pos(t,dbtrenner,j1+1);PER ;FI ;FI
+;index.END PROC ermittlelistenstartundende;PROC listezeigenabzeile(INT CONST
+zeile):INT VAR i,j1,j2,fnr;TEXT VAR t,t1;fnr:=fnrerstesankreuzfeld;FOR iFROM
+zeileUPTO zeile+listeneintraegeproseiteREP IF i<=letztezeileTHEN t:=
+wahldatenzumindex(i,kennungnursuname);feldfrei(fnr);IF boolvektor(i)THEN
+standardmaskenfeld(ankreuzungliste,fnr);ELSE standardmaskenfeld(
+keineankreuzung,fnr);FI ;bereiteschuelerzeileauf;standardmaskenfeld(t1,fnr+1)
+;ELSE standardmaskenfeld(niltext,fnr);feldschutz(fnr);standardmaskenfeld(
+dummyschueler,fnr+1)FI ;fnrINCR felderprolisteneintrag;PER ;infeld(
+fnrerstesankreuzfeld);standardfelderausgeben;.bereiteschuelerzeileauf:j1:=pos
+(t,dbtrenner);j2:=pos(t,dbtrenner,j1+1);t1:=text(t,j1-1);t1CAT
+sunamenstrenner;t1CAT subtext(t,j1+1,j2-1);t1:=text(t1,sulaengeohnedatum);t1
+CAT blank;t1CAT subtext(t,j2+1).END PROC listezeigenabzeile;PROC
+naechsterindex(INT VAR index):indexINCR 1;IF bearbeitennachlisteTHEN WHILE
+index<=letztezeileCAND NOT boolvektor(index)REP indexINCR 1PER FI ;IF index>
+letztezeileTHEN index:=0FI END PROC naechsterindex;PROC sammlefächerangebot(
+BOOL VAR b):IF intwert(fnrfangsj)>int(zugrundeliegendessj)COR intwert(
+fnrfanghj)>int(zugrundeliegendeshj)COR intwert(fnrfangjgst)>int(
+zugrundeliegendejgst)COR dbstatus<>0THEN b:=TRUE ELIF intwert(fnrfangjgst)=
+int(zugrundeliegendejgst)THEN allefächeroderkursangeboteCAT text(wert(
+fnrfangart),längederart);allefächeroderkursangeboteCAT text(wert(fnrfangfach)
+,längedesfaches);FI END PROC sammlefächerangebot;PROC sammlekürzel(BOOL VAR b
+):IF wert(fnrschlsachgebiet)<>bestandabiturklausurCOR dbstatus<>0THEN b:=
+TRUE ELSE alleabiturklausurkürzelCAT wert(fnrschlschluessel)FI ;END PROC
+sammlekürzel;PROC gefuelltebearbeitungsmaskeausgeben:TEXT VAR wahldaten,
+klausurleiste,suchtext;INT VAR i,anfposaktuellewahl,position,fnr;BOOL VAR
+warnung:=FALSE ;wahldaten:=wahldatenzumindex(aktuellezeile,kennungnursuname);
+aktuellerschueler:=wahldaten;changeall(wahldaten,dbtrenner,sunamenstrenner);
+standardmaskenfeld(text(wahldaten,standardfeldlaenge(fnrschueler)),
+fnrschueler);wahldaten:=wahldatenzumindex(aktuellezeile,
+kennungnurwahldatenzumsu);klausurleiste:=(length(allefächeroderkursangebote)
+DIV längefachoderkursangebot)*dbtrenner;FOR iFROM 1UPTO length(wahldaten)DIV
+längeeinerwahlREP anfposaktuellewahl:=(i-1)*längeeinerwahl;IF
+kurswahlgewünscht=niltextTHEN IF subtext(wahldaten,anfposaktuellewahl+
+poskennungineinerwahl,anfposaktuellewahl+posplbl1ineinerwahl-1)<>leerekennung
+THEN warnung:=TRUE FI ;IF subtext(wahldaten,anfposaktuellewahl+
+posartineinerwahl,anfposaktuellewahl+posfachineinerwahl-1)=leereartTHEN
+warnung:=TRUE ELSE suchtext:=subtext(wahldaten,anfposaktuellewahl+
+posartineinerwahl,anfposaktuellewahl+poskennungineinerwahl-1);position:=pos(
+allefächeroderkursangebote,suchtext);WHILE position<>0CAND positionMOD
+längefachoderkursangebot<>1REP position:=pos(allefächeroderkursangebote,
+suchtext,position+1);PER ;IF position=0THEN warnung:=TRUE ELSE position:=
+positionDIV längefachoderkursangebot+1;IF (klausurleisteSUB position)<>
+dbtrennerTHEN warnung:=TRUE ELSE IF (wahldatenSUB (anfposaktuellewahl+
+posklausurineinerwahl))=blankTHEN change(klausurleiste,position,position,
+ankreuzung)ELSE change(klausurleiste,position,position,wahldatenSUB (
+anfposaktuellewahl+posklausurineinerwahl))FI FI ;FI FI ELSE IF subtext(
+wahldaten,anfposaktuellewahl+posartineinerwahl,anfposaktuellewahl+
+posfachineinerwahl-1)=leereartTHEN warnung:=TRUE FI ;suchtext:=subtext(
+wahldaten,anfposaktuellewahl+posfachineinerwahl,anfposaktuellewahl+
+posplbl1ineinerwahl-1);position:=pos(allefächeroderkursangebote,suchtext);
+WHILE position<>0CAND positionMOD längefachoderkursangebot<>1REP position:=
+pos(allefächeroderkursangebote,suchtext,position+1);PER ;IF position=0THEN
+warnung:=TRUE ELSE position:=positionDIV längefachoderkursangebot+1;IF (
+klausurleisteSUB position)<>dbtrennerTHEN warnung:=TRUE ELSE IF (wahldaten
+SUB (anfposaktuellewahl+posklausurineinerwahl))=blankTHEN change(
+klausurleiste,position,position,ankreuzung)ELSE change(klausurleiste,position
+,position,wahldatenSUB (anfposaktuellewahl+posklausurineinerwahl))FI FI FI
+FI ;PER ;fnr:=fnrersteeingabe;FOR iFROM 1UPTO length(klausurleiste)REP IF (
+klausurleisteSUB i)=dbtrennerTHEN standardmaskenfeld(niltext,fnr)ELSE
+standardmaskenfeld(klausurleisteSUB i,fnr)FI ;fnrINCR offsetnächsteeingabe
+PER ;IF warnungTHEN standardmeldung(meldunginkonsistenz,niltext);infeld(
+fnrschuljahr)ELSE infeld(fnrmeldungsfeld)FI ;standardfelderausgeben;infeld(
+fnrersteeingabe)END PROC gefuelltebearbeitungsmaskeausgeben;INT PROC
+angabenpruefungdereingangsmaske(INT CONST aktion):INT VAR fehlerstatus;
+betrjgst:=standardmaskenfeld(fnreingbetrjgst);betrhj:=standardmaskenfeld(
+fnreingbetrhj);IF betrjgst<>jgst11AND betrjgst<>jgst12AND betrjgst<>jgst13
+THEN standardmeldung(meldungfalschejgst,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreingbetrjgstFI ;IF betrhj<>hj1AND
+betrhj<>hj2THEN standardmeldung(meldungfalscheshj,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreingbetrhjFI ;jgstfuersu:=
+standardmaskenfeld(fnreingsuderjgst);IF jgstfuersu<>niltextCAND jgstfuersu<>
+jgst10CAND jgstfuersu<>jgst11CAND jgstfuersu<>jgst12CAND jgstfuersu<>jgst13
+THEN standardmeldung(meldungfalschejgstfuersu,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreingsuderjgstFI ;jgstfuerneuang:=
+standardmaskenfeld(fnreingneuangzurjgst);IF jgstfuerneuang<>niltextCAND
+jgstfuerneuang<>jgst11CAND jgstfuerneuang<>jgst12CAND jgstfuerneuang<>jgst13
+THEN standardmeldung(meldungfalschejgstfuerneuang,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreingneuangzurjgstFI ;IF jgstfuersu=
+niltextCAND jgstfuerneuang=niltextTHEN standardmeldung(
+meldungmindestenseinejgst,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
+fnreingsuderjgstFI ;IF jgstfuersu<>niltextCAND jgstfuerneuang<>niltextCAND
+int(jgstfuersu)+1<>int(jgstfuerneuang)THEN standardmeldung(
+meldungjgstsaufeinanderfolgend,niltext);LEAVE angabenpruefungdereingangsmaske
+WITH fnreingsuderjgstFI ;zugrundeliegendeshj:=schulkenndatum(
+textschulhalbjahr);zugrundeliegendessj:=schulkenndatum(textschuljahr);IF
+jgstfuerneuang<>niltextTHEN IF jgstfuerneuang>betrjgstTHEN standardmeldung(
+meldungjgstzurueckliegend,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
+fnreingbetrjgstFI ;aktjgst:=text(int(jgstfuerneuang)-1);IF jgstfuersu<>
+niltextTHEN schuelermenge:=kuerzelfuerallesuELSE schuelermenge:=
+kuerzelfuerneuangFI ELSE IF jgstfuersu>betrjgstTHEN standardmeldung(
+meldungjgstzurueckliegend,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
+fnreingbetrjgstFI ;IF betrjgst=jgstfuersuCAND betrhj<zugrundeliegendeshjTHEN
+standardmeldung(meldunghjzurueckliegend,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreingbetrhjFI ;aktjgst:=jgstfuersu;
+schuelermenge:=kuerzelfuersuderjgstFI ;IF aktjgst=jgst10CAND
+zugrundeliegendeshj=hj1THEN standardmeldung(meldungnurzweiteshjmoeglich,
+niltext);IF jgstfuersu<>niltextTHEN LEAVE angabenpruefungdereingangsmaske
+WITH fnreingsuderjgstELSE LEAVE angabenpruefungdereingangsmaskeWITH
+fnreingneuangzurjgstFI FI ;kurswahlgewünscht:=standardmaskenfeld(fnreingkurse
+);sufamname:=standardmaskenfeld(fnreingfamiliennamesu);surufname:=
+standardmaskenfeld(fnreingrufnamesu);sugebdatum:=standardmaskenfeld(
+fnreinggeburtsdatumsu);uebernausjgst:=standardmaskenfeld(fnreinguebernausjgst
+);uebernaushj:=standardmaskenfeld(fnreinguebernaushj);IF aktion=2THEN IF
+sufamname=niltextCAND (surufname<>niltextOR sugebdatum<>niltext)THEN
+standardmeldung(meldungfamnamefehlt,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreingfamiliennamesuFI ;IF surufname=
+niltextCAND sugebdatum<>niltextTHEN standardmeldung(meldungrufnamefehlt,
+niltext);LEAVE angabenpruefungdereingangsmaskeWITH fnreingrufnamesuFI ;IF
+sugebdatum<>niltextTHEN standardpruefe(6,fnreinggeburtsdatumsu,0,0,"",
+fehlerstatus);IF fehlerstatus<>0THEN LEAVE angabenpruefungdereingangsmaske
+WITH fehlerstatusFI FI ;IF uebernausjgst<>niltextTHEN standardmeldung(
+meldungfeldleerlassen,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
+fnreinguebernausjgstFI ;IF uebernaushj<>niltextTHEN standardmeldung(
+meldungfeldleerlassen,niltext);LEAVE angabenpruefungdereingangsmaskeWITH
+fnreinguebernaushjFI ELSE IF length(sufamname)+length(surufname)+length(
+sugebdatum)>0THEN standardmeldung(meldungkeinenschülerangeben,niltext);IF
+sufamname<>niltextTHEN LEAVE angabenpruefungdereingangsmaskeWITH
+fnreingfamiliennamesuELIF surufname<>niltextTHEN LEAVE
+angabenpruefungdereingangsmaskeWITH fnreingrufnamesuELSE LEAVE
+angabenpruefungdereingangsmaskeWITH fnreinggeburtsdatumsuFI ;FI ;IF
+uebernausjgst<>jgst11AND uebernausjgst<>jgst12AND uebernausjgst<>jgst13THEN
+standardmeldung(meldungfalschejgst,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreinguebernausjgstFI ;IF uebernaushj<>
+hj1AND uebernaushj<>hj2THEN standardmeldung(meldungfalscheshj,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreinguebernaushjFI ;IF uebernausjgst=
+betrjgstCAND uebernaushj=betrhjTHEN standardmeldung(
+meldungübernahmeinsichselbst,niltext);LEAVE angabenpruefungdereingangsmaske
+WITH fnreinguebernausjgstFI ;IF jgstfuerneuang<>niltextTHEN IF jgstfuerneuang
+>uebernausjgstTHEN standardmeldung(meldungjgstzurueckliegend,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreinguebernausjgstFI ;ELSE IF
+jgstfuersu>uebernausjgstTHEN standardmeldung(meldungjgstzurueckliegend,
+niltext);LEAVE angabenpruefungdereingangsmaskeWITH fnreinguebernausjgstFI ;
+IF uebernausjgst=jgstfuersuCAND uebernaushj<zugrundeliegendeshjTHEN
+standardmeldung(meldunghjzurueckliegend,niltext);LEAVE
+angabenpruefungdereingangsmaskeWITH fnreinguebernaushjFI ;FI ;FI ;0END PROC
+angabenpruefungdereingangsmaske;PROC logbucheintragvornehmen(TEXT CONST
+escfunktion):logeintrag(logtext1+escfunktion)END PROC logbucheintragvornehmen
+;END PACKET erfwahldaten
+
diff --git a/app/schulis/2.2.1/src/2.halbjahreswechsel fuer kursdaten b/app/schulis/2.2.1/src/2.halbjahreswechsel fuer kursdaten
new file mode 100644
index 0000000..4443395
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.halbjahreswechsel fuer kursdaten
@@ -0,0 +1,77 @@
+PACKET halbjahreswechselfuerkursdatenDEFINES
+halbjahreswechselfuerkursdatenvorbereiten,
+halbjahreswechselfuerkursdatenstarten,halbjahreswechselfuerkursdatendrucken:
+LET maske="ms halbjahreswechsel fuer kursdaten";INT VAR fnraktsj:=2,fnrakthj
+:=3,fnrgeplsj:=4,fnrgeplhj:=5,fnrauskunft:=6;LET
+meldnrhalbjahreswechsellaeuft=156,meldnrinbearbeitung=352,
+meldnrkurswahlfehler=416;FILE VAR prot;LET protname=
+"Protokoll zum Halbjahreswechsel";FILE VAR f,faus;LET datei="Ausgangsliste",
+bearbdatei="Bearbeitungsliste";LET schuljahr="Schuljahr",schulhalbjahr=
+"Schulhalbjahr",schulname="Schulname",schulort="Schulort";LET ueberschrift=
+"Schulhalbjahreswechsel für Kursdaten Sek. 2",untertitel1=
+"Wechsel von Schuljahr ",untertitel2=" zum Schuljahr ",halbjahr=
+". Halbjahr",protokollanfang="Planblockschema und Hilfsdateien zu";LET strich
+="-",schraegstrich="/",kennzhell="#";LET beginnjgst=12,beginnhj=15,beginnsj=
+17,beginnjgstsort=6,beginndateiname=8;LET kurswahlpraefix="Kurswahl-",
+kurswahl2praefix="Kurswahl-2",sperrepraefix="Sperre Kurswahl-";TEXT VAR aktsj
+:="",akthj:="",geplsj,geplhj;TEXT VAR vergleichshj:="",vergleichsjgst,
+aktuelleshj;TEXT VAR zeile,neuezeile,auszeile;LET tasknameserver=
+"kurswahl server";TASK VAR kurswahlserver;THESAURUS VAR thes;LET
+logbucheintraghjwechsel="Anw. 2.2.4.1 Halbjahreswechsel für Kursdaten Sek. 2"
+;PROC halbjahreswechselfuerkursdatenvorbereiten:standardstartproc(maske);IF
+aktsj=""THEN aktsj:=schulkenndatum(schuljahr);akthj:=schulkenndatum(
+schulhalbjahr)FI ;geplsj:=aktsj;geplhj:=akthj;geplanteshjundsjberechnen(
+geplhj,geplsj);standardmaskenfeld(aktsj,fnraktsj);standardmaskenfeld(akthj,
+fnrakthj);standardmaskenfeld(geplsj,fnrgeplsj);standardmaskenfeld(geplhj,
+fnrgeplhj);infeld(fnraktsj);standardfelderausgeben;infeld(fnrauskunft);
+standardnprocEND PROC halbjahreswechselfuerkursdatenvorbereiten;PROC
+halbjahreswechselfuerkursdatenstarten:IF NOT existstask(tasknameserver)THEN
+standardmeldung(meldnrkurswahlfehler,"");return(1)ELSE kurswahlserver:=/
+tasknameserver;standardmeldung(meldnrhalbjahreswechsellaeuft,"");logeintrag(
+logbucheintraghjwechsel+" Start");dateienverzeichnissortierterstellen;
+dateienverzeichnisbehandeln;logeintrag(logbucheintraghjwechsel+" Ende");
+zeigedatei(protname,"")FI .dateienverzeichnissortierterstellen:forget(datei,
+quiet);forget(bearbdatei,quiet);thes:=ALL kurswahlserver;dateiFILLBY thes;f:=
+sequentialfile(input,datei);faus:=sequentialfile(output,bearbdatei);WHILE
+NOT eof(f)REP getline(f,zeile);IF pos(zeile,kurswahlpraefix)=1THEN
+sortierkriterienanzeilenanfangkopierenELSE neuezeile:=zeileFI ;putline(faus,
+neuezeile)PER ;forget(datei,quiet);sort(bearbdatei).
+sortierkriterienanzeilenanfangkopieren:neuezeile:=subtext(zeile,beginnsj);
+neuezeileCAT (zeileSUB beginnhj);neuezeileCAT subtext(zeile,beginnjgst,
+beginnjgst+1);neuezeileCAT zeile.dateienverzeichnisbehandeln:aktuelleshj:=
+aktsj;aktuelleshjCAT akthj;f:=sequentialfile(input,bearbdatei);forget(
+protname,quiet);prot:=sequentialfile(output,protname);
+kopfinausgabedateischreiben;commanddialogue(FALSE );WHILE NOT eof(f)REP
+getline(f,zeile);zeileuntersuchenPER ;forget(bearbdatei,quiet);
+commanddialogue(TRUE ).zeileuntersuchen:IF pos(zeile,kurswahlpraefix)=0THEN
+erase(zeile,kurswahlserver)ELIF pos(zeile,sperrepraefix)>0THEN erase(zeile,
+kurswahlserver)ELSE IF subtext(zeile,1,5)<>vergleichshjTHEN vergleichshj:=
+subtext(zeile,1,5);vergleichsjgst:="";line(prot);standardmeldung(
+meldnrinbearbeitung,(vergleichshjSUB 5)+". "+subtext(vergleichshj,1,2)+
+schraegstrich+subtext(vergleichshj,3,4)+kennzhell)FI ;IF vergleichshj<=
+aktuelleshjTHEN meldeloeschung(zeile,TRUE );erase(subtext(zeile,
+beginndateiname),kurswahlserver)ELIF pos(zeile,kurswahl2praefix)>0THEN erase(
+subtext(zeile,beginndateiname),kurswahlserver)ELSE meldeloeschung(zeile,
+FALSE )FI FI .kopfinausgabedateischreiben:putline(prot,schulkenndatum(
+schulname));putline(prot,text(schulkenndatum(schulort),65)+date);line(prot);
+putline(prot,ueberschrift);putline(prot,length(ueberschrift)*strich);line(
+prot);auszeile:=untertitel1;auszeileCAT subtext(aktsj,1,2);auszeileCAT
+schraegstrich;auszeileCAT subtext(aktsj,3,4);auszeileCAT " , ";auszeileCAT
+akthj;auszeileCAT halbjahr;putline(prot,auszeile);auszeile:=untertitel2;
+auszeileCAT subtext(geplsj,1,2);auszeileCAT schraegstrich;auszeileCAT subtext
+(geplsj,3,4);auszeileCAT " , ";auszeileCAT geplhj;auszeileCAT halbjahr;
+putline(prot,auszeile);line(prot);putline(prot,protokollanfang)END PROC
+halbjahreswechselfuerkursdatenstarten;PROC meldeloeschung(TEXT CONST
+ausdatname,BOOL CONST loeschen):IF vergleichsjgst<>jgstinausdatnameTHEN
+vergleichsjgst:=jgstinausdatname;TEXT VAR auszeile:="Jgst. ";auszeileCAT
+vergleichsjgst;auszeileCAT " in ";auszeileCAT subtext(vergleichshj,1,2);
+auszeileCAT "/";auszeileCAT subtext(vergleichshj,3,4);auszeileCAT " ";
+auszeileCAT (vergleichshjSUB 5);auszeileCAT ". Halbjahr ";IF loeschenTHEN
+auszeileCAT "wurden gelöscht"ELSE auszeileCAT "existieren"FI ;putline(prot,
+auszeile)FI .jgstinausdatname:subtext(ausdatname,beginnjgstsort,
+beginnjgstsort+1).END PROC meldeloeschung;PROC
+halbjahreswechselfuerkursdatendrucken(BOOL CONST drucken):IF druckenTHEN
+print(protname)FI ;forget(protname,quiet);enter(2)END PROC
+halbjahreswechselfuerkursdatendrucken;END PACKET
+halbjahreswechselfuerkursdaten
+
diff --git a/app/schulis/2.2.1/src/2.konsistenzpruefung in kursdaten b/app/schulis/2.2.1/src/2.konsistenzpruefung in kursdaten
new file mode 100644
index 0000000..c027414
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.konsistenzpruefung in kursdaten
@@ -0,0 +1,75 @@
+PACKET konsistenzpruefunginkursdatenDEFINES
+konsistenzpruefunginkursdatenstarten,
+konsistenzpruefunginkursdatenprotokolldrucken:LET meldnrblankomeldung=343;
+LET protname="Protokoll zur Konsistenzprüfung";FILE VAR prot;LET schuljahr=
+"Schuljahr",schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort=
+"Schulort";LET ueberschrift="Konsistenzprüfung in Kursdaten",untertitel1=
+"Kursdaten zum Schuljahr ",texthalbjahr=". Halbjahr",untertitel2=
+"Prüfung am ",beginnderfehlerliste=" festgestellte Inkonsistenzen:";LET
+strich="-",schraegstrich="/",blank=" ",kennzhell="#";TEXT VAR aktsj:="",akthj
+:="",gewsj:="",gewhj:="",bearbschuljahr;INT VAR ihalbjahr;LET maxhalbjahre=7;
+LET ersteshj="1";INT VAR jgst,gewjgst,jgstinkrement,startjgst;LET jgst10=10,
+jgst11=11,jgst13=13;TEXT VAR auszeile;TEXT VAR gueltigekurse,alleplanbloecke,
+allekursedesplanblocks,planblock,kurs;LET kennungkurse="K";LET
+laengeplanblock=3,laengekurs=6,laengekursangaben=10;INT VAR posplanblock,
+poskurs;BOOL VAR keinfehleraufgetreten;PROC
+konsistenzpruefunginkursdatenstarten:IF aktsj=""THEN aktsj:=schulkenndatum(
+schuljahr);akthj:=schulkenndatum(schulhalbjahr)FI ;gewsj:=aktsj;gewhj:=akthj;
+protokollvorbereiten;ausgabekopfaufbereiten;pruefunginkursdatendurchfuehren;
+zeigedatei(protname,"").protokollvorbereiten:forget(protname,quiet);prot:=
+sequentialfile(output,protname).ausgabekopfaufbereiten:putline(prot,
+schulkenndatum(schulname));putline(prot,schulkenndatum(schulort));line(prot,2
+);putline(prot,20*blank+ueberschrift);putline(prot,20*blank+length(
+ueberschrift)*strich);line(prot);auszeile:=untertitel1;auszeileCAT
+aufberschuljahr;auszeileCAT ", ";auszeileCAT akthj;auszeileCAT texthalbjahr;
+putline(prot,auszeile);auszeile:=untertitel2;auszeileCAT date;auszeileCAT
+blank;auszeileCAT timeofday;putline(prot,auszeile);line(prot,2).END PROC
+konsistenzpruefunginkursdatenstarten;PROC pruefunginkursdatendurchfuehren:IF
+akthj=ersteshjTHEN startjgst:=jgst11ELSE startjgst:=jgst10FI ;FOR jgstFROM
+startjgstUPTO jgst13REP kurswahlserveraktualisieren(text(jgst),"","")#spr16.
+01.91#PER ;jgstinkrement:=0;FOR ihalbjahrFROM 1UPTO maxhalbjahreREP
+gewhalbjahrbearbeiten;halbjahrerhoehenPER .halbjahrerhoehen:
+geplanteshjundsjberechnen(gewhj,gewsj);IF gewhj=ersteshjTHEN jgstinkrement
+INCR 1FI .gewhalbjahrbearbeiten:FOR jgstFROM startjgstUPTO jgst13REP gewjgst
+:=jgst+jgstinkrement;IF gewjgst<=13THEN kurswahlinitialisieren(text(jgst),
+text(gewjgst),gewhj,"",bearbschuljahr);IF istkurswahlbasisvorhandenTHEN
+bearbeiteFI ;FI ;PER .bearbeite:kontrollmeldungausgeben;
+datenmeldunginprotokollausgeben;fehlerschalterinitialisieren;IF
+aktuellesodergeplanteshalbjahrTHEN INT VAR fehlerstatus;kurswahlbasisholen(
+fehlerstatus);pruefeplanblockschemamitkursen;kurswahl1sichern(fehlerstatus)
+FI ;fehlerschalterauswerten.aktuellesodergeplanteshalbjahr:ihalbjahr=1COR
+ihalbjahr=2.kontrollmeldungausgeben:auszeile:="Daten zu Jgst. ";auszeileCAT
+text(gewjgst);auszeileCAT ".";auszeileCAT gewhj;auszeileCAT " in ";auszeile
+CAT aufberschuljahr;auszeileCAT " werden geprüft.";auszeileCAT kennzhell;
+standardmeldung(meldnrblankomeldung,auszeile).datenmeldunginprotokollausgeben
+:auszeile:="Wahldaten für Schüler der Jgst. ";auszeileCAT text(jgst);auszeile
+CAT ": Schuljahr ";auszeileCAT aufberschuljahr;auszeileCAT " Jgst. ";auszeile
+CAT text(gewjgst);auszeileCAT ".";auszeileCAT gewhj;putline(prot,auszeile).
+fehlerschalterinitialisieren:keinfehleraufgetreten:=TRUE .
+fehlerschalterauswerten:IF keinfehleraufgetretenTHEN putline(prot,
+beginnderfehlerliste+" keine")FI ;line(prot,2).pruefeplanblockschemamitkursen
+:gueltigekurse:=allekurse;alleplanbloecke:=alleplanblockbezeichner;
+posplanblock:=1;WHILE posplanblock<length(alleplanbloecke)REP planblock:=
+subtext(alleplanbloecke,posplanblock,posplanblock+laengeplanblock-1);
+allekursedesplanblocks:=planblockdaten(planblock,kennungkurse);poskurs:=1;
+WHILE poskurs<length(allekursedesplanblocks)REP kurs:=subtext(
+allekursedesplanblocks,poskurs,poskurs+laengekurs-1);IF suchpos(gueltigekurse
+,kurs,laengekursangaben)=0THEN planbloeckezumkurseintragen(kurs,"","");
+fehlerprotokollierenFI ;poskursINCR laengekursPER ;posplanblockINCR
+laengeplanblockPER .fehlerprotokollieren:IF keinfehleraufgetretenTHEN
+keinfehleraufgetreten:=FALSE ;putline(prot,beginnderfehlerliste)FI ;
+fehlerzeileschreiben.fehlerzeileschreiben:auszeile:="Kurs ";auszeileCAT text(
+gewjgst);auszeileCAT blank;auszeileCAT subtext(kurs,1,2);auszeileCAT blank;
+auszeileCAT subtext(kurs,3);auszeileCAT
+" : Bezeichnung ungültig, wurde aus der Blockung gelöscht";putline(prot,
+auszeile).END PROC pruefunginkursdatendurchfuehren;TEXT PROC aufberschuljahr:
+TEXT VAR aufbersj:=subtext(gewsj,1,2);aufbersjCAT schraegstrich;aufbersjCAT
+subtext(gewsj,3,4);aufbersjEND PROC aufberschuljahr;PROC
+konsistenzpruefunginkursdatenprotokolldrucken(BOOL CONST drucken):IF drucken
+THEN print(protname)FI ;forget(protname,quiet);enter(2)END PROC
+konsistenzpruefunginkursdatenprotokolldrucken;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;END
+PACKET konsistenzpruefunginkursdaten
+
diff --git a/app/schulis/2.2.1/src/2.kursdaten exportieren b/app/schulis/2.2.1/src/2.kursdaten exportieren
new file mode 100644
index 0000000..e93c54d
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.kursdaten exportieren
@@ -0,0 +1,226 @@
+PACKET kursdatenueberschnittstelleexportierenDEFINES
+kursdatenschnittstelleexportanfang,
+kursdatenschnittstelleexportaufbereitenoderabfrage,
+kursdatenschnittstelleexportaufbereiten,kursdatenschnittstelleexportzeigen,
+kursdatenschnittstelleexportzeigenverlassen,
+kursdatenschnittstelleexportloeschenabfrage,
+kursdatenschnittstelleexportloeschen,kursdatenschnittstelleexportarchiv,
+kursdatenschnittstelleexportabfrage,
+kursdatenschnittstelleexportloescheundreturn,
+kursdatenschnittstelleexportdrucken,kursdatenschnittstelleexportabbruch:LET
+eingangsmaske="ms kurswahldaten exportieren",schuljahr="Schuljahr",halbjahr=
+"Schulhalbjahr",filemodus="file ibm",listenname=
+"Liste der Dateien auf der Diskette:",trenner="�",dos="DOS",einganggewjgst=2,
+einganggewhj=3,eingangaktjgst=4,eingangaktneue=5,eingangmitkursen=6,
+eingangdateiname=7,anzeingangsfelder=7,kurslaenge=15,kznurneue="N",kzohneneue
+="O",kzalle="A",kzname="N",kzkurse="K",suffixfa=".FA",suffixwk=".WK",suffixbr
+=".BR",suffixzi=".ZI",suffixzieintrag=" ",leerekennung=" "
+,meldungkeineschueler=423,meldungbearbwird=352,meldungwarten=69,
+meldungdrucken=58,meldungpraezisieren=129,meldungfeldfuellen=52,
+meldungfalschejgst=404,meldungfalscheshj=405,meldungserverfehler=416,
+meldungandereauswahl=318,meldungdatengeloescht=431,meldungnamefalsch=323,
+meldungrausreichen=343,meldungdisksichern=347,meldungdiskinit=348,
+meldungnameloeschen=349,meldungaufdiskschr=350,meldungnameunbek=351;ROW
+anzeingangsfelderTEXT VAR eingangrow:=ROW anzeingangsfelderTEXT :("","","",""
+,"","","schulis");INT VAR i,j;TEXT VAR t,t1,t2;INT VAR pos1,pos2,letztepos,
+fstat,ruecksprung,aktfeld;TEXT VAR aktdateiname:="schulis",gewjgst,gewhj,
+aktjgst,aktneue,gewsj,aktsj:="0000",akthj,schuelergruppe,aktsuffix:=suffixfa,
+fahj,fasj,kweintrag,kurseintrag,dateieintrag;THESAURUS VAR thes;BOOL VAR
+archivfehler;FILE VAR dsfa,dswk,dsbr,dszi,g;PROC
+kursdatenschnittstelleexportanfang:standardstartproc(eingangsmaske);
+gibeingangaus;standardfelderausgeben;infeld(letztepos);standardnproc.
+gibeingangaus:infeld(1);FOR iFROM 1UPTO anzeingangsfelderREP
+standardmaskenfeld(eingangrow(i),i);IF eingangrow(i)<>""THEN letztepos:=iFI
+PER .END PROC kursdatenschnittstelleexportanfang;PROC
+kursdatenschnittstelleexportaufbereitenoderabfrage:
+pruefeingabeundbelegvariablen;IF fstat=0THEN abfrageloeschenFI .
+abfrageloeschen:beginlist;REP getlistentry(t1,t2);IF pos(t1,suffixfa)>0THEN
+infeld(eingangdateiname);ruecksprung:=2;standardmeldung(meldungnameloeschen,
+t1+" (-WK,-BR,-ZI)#"+text(t2,8)+"#");standardnproc;LEAVE
+kursdatenschnittstelleexportaufbereitenoderabfrageFI UNTIL t1=""PER ;
+ruecksprung:=1;kursdatenschnittstelleexportaufbereiten.END PROC
+kursdatenschnittstelleexportaufbereitenoderabfrage;PROC
+kursdatenschnittstelleexportaufbereiten:kurswahlinitialisieren(aktjgst,
+gewjgst,gewhj,schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0
+THEN meldungausgeben(meldungserverfehler,einganggewjgst,1);ELIF
+letzterschueler<ersterschuelerTHEN meldungausgeben(meldungkeineschueler,
+einganggewjgst,1);ELSE bereitefadateiauf;bereitewkdateiauf;bereitebrdateiauf;
+bereitezidateiauf;loeschemeldung;return(ruecksprung)FI .bereitefadateiauf:IF
+gewjgst=aktjgstCAND gewhj=akthjTHEN fahj:=akthj;fasj:=aktsjELSE
+geplanteshjundsjberechnen(fahj,fasj)FI ;standardmeldung(meldungbearbwird,
+aktdateiname+suffixfa+"#");forget(aktdateiname+suffixfa,quiet);dsfa:=
+sequentialfile(output,aktdateiname+suffixfa);inittupel(dnrfaecherangebot);
+putwert(fnrfangjgst,gewjgst);statleseschleife(dnrfaecherangebot,fasj,fahj,
+fnrfangsj,fnrfanghj,PROC faecherangebotindateischreiben).bereitewkdateiauf:
+forget(aktdateiname+suffixwk,quiet);dswk:=sequentialfile(output,aktdateiname+
+suffixwk);standardmeldung(meldungbearbwird,aktdateiname+suffixwk+"#");IF
+eingangrow(eingangmitkursen)<>""THEN erstelledateimitkennungELSE
+erstelledateiohnekennungFI .erstelledateimitkennung:FOR iFROM ersterschueler
+UPTO letzterschuelerREP kweintrag:=wahldatenzumindex(i,kzname);pos1:=pos(
+kweintrag,trenner)-1;pos2:=pos(kweintrag,trenner,pos1+2)-1;dateieintrag:=text
+(kweintrag,pos1);dateieintrag:=text(dateieintrag,30);dateieintragCAT text(
+subtext(kweintrag,pos1+2,pos2),15);dateieintragCAT subtext(kweintrag,pos2+2);
+kweintrag:=wahldatenzumindex(i,kzkurse);pos1:=1;FOR jFROM 1UPTO length(
+kweintrag)DIV kurslaengeREP kurseintrag:=subtext(kweintrag,pos1,pos1+
+kurslaenge-1);dateieintragCAT subtext(kurseintrag,4,5);dateieintragCAT
+subtext(kurseintrag,2,3);dateieintragCAT (kurseintragSUB 1);dateieintragCAT
+subtext(kurseintrag,6,7);pos1INCR kurslaenge;PER ;put(dswk,dateieintrag);line
+(dswk);PER .erstelledateiohnekennung:FOR iFROM ersterschuelerUPTO
+letzterschuelerREP kweintrag:=wahldatenzumindex(i,kzname);pos1:=pos(kweintrag
+,trenner)-1;pos2:=pos(kweintrag,trenner,pos1+2)-1;dateieintrag:=text(
+kweintrag,pos1);dateieintrag:=text(dateieintrag,30);dateieintragCAT text(
+subtext(kweintrag,pos1+2,pos2),15);dateieintragCAT subtext(kweintrag,pos2+2);
+kweintrag:=wahldatenzumindex(i,kzkurse);pos1:=1;FOR jFROM 1UPTO length(
+kweintrag)DIV kurslaengeREP kurseintrag:=subtext(kweintrag,pos1,pos1+
+kurslaenge-1);dateieintragCAT subtext(kurseintrag,4,5);dateieintragCAT
+subtext(kurseintrag,2,3);dateieintragCAT (kurseintragSUB 1);dateieintragCAT
+leerekennung;pos1INCR kurslaenge;PER ;put(dswk,dateieintrag);line(dswk);PER .
+bereitebrdateiauf:forget(aktdateiname+suffixbr,quiet);dsbr:=sequentialfile(
+output,aktdateiname+suffixbr).bereitezidateiauf:forget(aktdateiname+suffixzi,
+quiet);standardmeldung(meldungbearbwird,aktdateiname+suffixzi+"#");dszi:=
+sequentialfile(output,aktdateiname+suffixzi);dateieintrag:=gewsj;dateieintrag
+CAT gewjgst;dateieintragCAT gewhj;dateieintragCAT date;dateieintragCAT
+"schulis ";dateieintragCAT suffixzieintrag;put(dszi,dateieintrag).END PROC
+kursdatenschnittstelleexportaufbereiten;PROC faecherangebotindateischreiben(
+BOOL VAR b):INT VAR wstd;IF wert(fnrfangsj)=fasjCAND wert(fnrfanghj)=fahj
+CAND wert(fnrfangjgst)=gewjgstCAND dbstatus=okTHEN wstd:=intwert(
+fnrfangwochenstd);IF wstd>9THEN wstd:=9FI ;put(dsfa,text(wert(fnrfangfach),2)
++text(wert(fnrfangart),2)+text(wert(fnrfanganzlv),2)+text(wstd));line(dsfa)
+ELSE dbstatus(1);b:=FALSE FI .END PROC faecherangebotindateischreiben;PROC
+kursdatenschnittstelleexportzeigen:aktdateiname:=standardmaskenfeld(
+eingangdateiname);IF aktdateiname=""THEN fehlermeldungfeldfuellenELIF exists(
+aktdateiname+suffixfa)THEN zeigdateiELSE fehlermeldungdateifehltFI .END PROC
+kursdatenschnittstelleexportzeigen;PROC zeigdatei:zeigedatei(aktdateiname+
+aktsuffix,"vr").END PROC zeigdatei;PROC
+kursdatenschnittstelleexportzeigenverlassen:IF aktsuffix=suffixziTHEN
+aktsuffix:=suffixfa;enter(2)ELSE IF aktsuffix=suffixfaTHEN aktsuffix:=
+suffixwkELIF aktsuffix=suffixwkTHEN aktsuffix:=suffixziFI ;enter(1)FI .END
+PROC kursdatenschnittstelleexportzeigenverlassen;PROC
+kursdatenschnittstelleexportloeschenabfrage:aktdateiname:=standardmaskenfeld(
+eingangdateiname);IF aktdateiname=""THEN fehlermeldungfeldfuellenELIF exists(
+aktdateiname+suffixfa)THEN beginlist;t1:=" ";REP getlistentry(t1,t2);IF t1=
+aktdateiname+suffixfaTHEN standardmeldung(meldungnameloeschen,t1+
+" (-WK,-BR,-ZI)#"+text(t2,8)+"#");standardnproc;LEAVE
+kursdatenschnittstelleexportloeschenabfrageFI ;UNTIL t1=""PER ELSE
+fehlermeldungdateifehltFI .END PROC
+kursdatenschnittstelleexportloeschenabfrage;PROC
+kursdatenschnittstelleexportloeschen:forget(aktdateiname+suffixfa,quiet);
+forget(aktdateiname+suffixwk,quiet);forget(aktdateiname+suffixbr,quiet);
+forget(aktdateiname+suffixzi,quiet);standardmeldung(meldungdatengeloescht,"")
+;return(2).END PROC kursdatenschnittstelleexportloeschen;PROC
+kursdatenschnittstelleexportdrucken:aktdateiname:=standardmaskenfeld(
+eingangdateiname);IF aktdateiname=""THEN fehlermeldungfeldfuellenELIF exists(
+aktdateiname+suffixfa)THEN druckalledateienELSE fehlermeldungdateifehltFI .
+druckalledateien:standardmeldung(meldungdrucken,"");print(aktdateiname+
+suffixfa);print(aktdateiname+suffixwk);print(aktdateiname+suffixzi);return(1)
+.END PROC kursdatenschnittstelleexportdrucken;PROC
+pruefeingabeundbelegvariablen:fstat:=0;eingangrow(einganggewjgst):=
+standardmaskenfeld(einganggewjgst);eingangrow(einganggewhj):=
+standardmaskenfeld(einganggewhj);eingangrow(eingangaktjgst):=
+standardmaskenfeld(eingangaktjgst);eingangrow(eingangaktneue):=
+standardmaskenfeld(eingangaktneue);eingangrow(eingangmitkursen):=
+standardmaskenfeld(eingangmitkursen);IF aktsj="0000"THEN aktsj:=
+schulkenndatum(schuljahr);akthj:=schulkenndatum(halbjahr)FI ;gewjgst:=
+eingangrow(einganggewjgst);gewhj:=eingangrow(einganggewhj);aktjgst:=
+eingangrow(eingangaktjgst);aktneue:=eingangrow(eingangaktneue);prueffeld2;
+prueffeld3;prueffeld4und5;prueffeld4;prueffeld5;IF fstat=0THEN pruefdateiname
+FI .prueffeld2:i:=int(gewjgst);IF gewjgst=""THEN meldungausgeben(
+meldungfeldfuellen,einganggewjgst,1);LEAVE pruefeingabeundbelegvariablenELIF
+i<11COR i>14THEN meldungausgeben(meldungfalschejgst,einganggewjgst,1);LEAVE
+pruefeingabeundbelegvariablenFI .prueffeld3:i:=int(gewhj);IF gewhj=""THEN
+meldungausgeben(meldungfeldfuellen,einganggewhj,1);LEAVE
+pruefeingabeundbelegvariablenELIF i<1COR i>2THEN meldungausgeben(
+meldungfalscheshj,einganggewhj,1);LEAVE pruefeingabeundbelegvariablenFI .
+prueffeld4und5:IF aktjgst=""CAND aktneue=""THEN meldungausgeben(
+meldungpraezisieren,eingangaktjgst,1);LEAVE pruefeingabeundbelegvariablen
+ELIF aktjgst=""CAND aktneue<>""THEN schuelergruppe:=kznurneueELIF aktjgst<>""
+CAND aktneue=""THEN schuelergruppe:=kzohneneueELSE schuelergruppe:=kzalleFI .
+prueffeld4:i:=int(aktjgst);IF i<10COR i>14THEN meldungausgeben(
+meldungfalschejgst,einganggewjgst,1);LEAVE pruefeingabeundbelegvariablenELIF
+i>int(gewjgst)THEN meldungausgeben(meldungandereauswahl,einganggewjgst,1);
+LEAVE pruefeingabeundbelegvariablenELIF i=int(gewjgst)THEN IF gewhj="1"CAND
+akthj="2"THEN meldungausgeben(meldungandereauswahl,einganggewhj,1);LEAVE
+pruefeingabeundbelegvariablenFI FI .prueffeld5:i:=int(aktneue);IF aktneue<>""
+CAND aktjgst<>""THEN IF i-1<>int(aktjgst)THEN meldungausgeben(
+meldungandereauswahl,eingangaktneue,1)FI ELIF aktneue<>""CAND aktjgst=""THEN
+IF i<11COR i>14THEN meldungausgeben(meldungfalschejgst,eingangaktneue,1)ELIF
+i+1>int(gewjgst)THEN meldungausgeben(meldungandereauswahl,eingangaktneue,1)
+ELIF i-1=int(gewjgst)THEN IF gewhj="1"CAND akthj="2"THEN meldungausgeben(
+meldungandereauswahl,einganggewhj,1)FI FI FI .pruefdateiname:aktdateiname:=
+standardmaskenfeld(eingangdateiname);IF aktdateiname=""THEN
+fehlermeldungfeldfuellenELIF falschercode(aktdateiname)THEN
+fehlermeldungnamefalsch(TRUE )FI .END PROC pruefeingabeundbelegvariablen;
+BOOL PROC falschercode(TEXT CONST t):INT VAR zeichencode;FOR iFROM 1UPTO
+LENGTH t-3REP zeichencode:=code(tSUB i);IF NOT ((zeichencode>=48AND
+zeichencode<=57)OR (zeichencode>=65AND zeichencode<=90)OR (zeichencode>=97
+AND zeichencode<=122))THEN LEAVE falschercodeWITH TRUE FI PER ;FALSE END
+PROC falschercode;PROC meldungausgeben(INT CONST meldung,gewfeld,
+gewruecksprung):fstat:=1;standardmeldung(meldung,"");infeld(gewfeld);return(
+gewruecksprung)END PROC meldungausgeben;PROC archivanmelden:aktfeld:=infeld;
+archivfehler:=FALSE ;commanddialogue(FALSE );aktdateiname:=standardmaskenfeld
+(eingangdateiname);IF aktdateiname=""THEN fehlermeldungfeldfuellenELIF exists
+(aktdateiname+suffixfa)THEN meldearchivanELSE fehlermeldungdateifehltFI .
+meldearchivan:disablestop;reserve(filemodus,/dos);IF iserrorTHEN archivfehler
+:=TRUE ;abbruchnachfehler(1);ELSE enablestopFI .END PROC archivanmelden;PROC
+kursdatenschnittstelleexportarchiv(INT CONST wahl):aktfeld:=infeld;SELECT
+wahlOF CASE 1:archivinitialisierenCASE 2:archivanmelden;IF archivfehlerTHEN
+LEAVE kursdatenschnittstelleexportarchivFI ;archivlistenCASE 3:
+archivbeschreibenCASE 4:archivueberschreibenEND SELECT ;infeld(aktfeld).
+archivinitialisieren:standardmeldung(meldungwarten,"");disablestop;clear(/dos
+);IF iserrorTHEN abbruchnachfehler(2);ELSE enablestop;loeschemeldung;release(
+/dos);return(2)FI .archivlisten:standardmeldung(meldungwarten,"");disablestop
+;g:=sequentialfile(output,listenname);thes:=ALL /dos;IF iserrorTHEN
+abbruchnachfehler(1);ELSE thesaurusaufbereiten;enablestop;zeigedatei(
+listenname,"vr");release(/dos)FI .thesaurusaufbereiten:t:=" ";i:=0;REP get(
+thes,t,i);putline(g,t)UNTIL t=""PER .archivbeschreiben:standardmeldung(
+meldungwarten,"");disablestop;IF exists(aktdateiname+suffixfa,/dos)THEN IF
+iserrorTHEN abbruchnachfehler(2);LEAVE kursdatenschnittstelleexportarchiv
+ELSE abfragedateiueberschreibenFI ELSE save(aktdateiname+suffixfa,/dos);IF
+iserrorTHEN abbruchnachfehler(2);LEAVE kursdatenschnittstelleexportarchiv
+ELSE save(aktdateiname+suffixwk,/dos);save(aktdateiname+suffixbr,/dos);save(
+aktdateiname+suffixzi,/dos)FI ;enablestop;commanddialogue(TRUE );
+loeschemeldung;release(/dos);return(2)FI .abfragedateiueberschreiben:
+standardmeldung(meldungaufdiskschr,aktdateiname+".FA (-WK,-BR,-ZI)#");
+standardnproc.archivueberschreiben:standardmeldung(meldungwarten,"");
+disablestop;commanddialogue(FALSE );erase(aktdateiname+suffixfa,/dos);erase(
+aktdateiname+suffixwk,/dos);erase(aktdateiname+suffixbr,/dos);erase(
+aktdateiname+suffixzi,/dos);IF iserrorTHEN abbruchnachfehler(3);LEAVE
+kursdatenschnittstelleexportarchivFI ;save(aktdateiname+suffixfa,/dos);IF
+iserrorTHEN abbruchnachfehler(3);LEAVE kursdatenschnittstelleexportarchiv
+ELSE save(aktdateiname+suffixwk,/dos);save(aktdateiname+suffixbr,/dos);save(
+aktdateiname+suffixzi,/dos)FI ;enablestop;commanddialogue(TRUE );
+loeschemeldung;release(/dos);return(3).END PROC
+kursdatenschnittstelleexportarchiv;PROC abbruchnachfehler(INT CONST schritte)
+:standardmeldung(meldungrausreichen,"Fehler: "+errormessage+" !#");clearerror
+;return(schritte);infeld(aktfeld);release(/dos);commanddialogue(TRUE );
+enablestopEND PROC abbruchnachfehler;PROC kursdatenschnittstelleexportabbruch
+(INT CONST schritte):return(schritte);infeld(aktfeld);release(/dos);
+commanddialogue(TRUE );enablestopEND PROC kursdatenschnittstelleexportabbruch
+;PROC kursdatenschnittstelleexportabfrage(INT CONST wahl):SELECT wahlOF CASE
+1:archivanmelden;IF archivfehlerTHEN LEAVE
+kursdatenschnittstelleexportabfrageFI ;standardmeldung(meldungdisksichern,
+aktdateiname+".FA (-WK,-BR,-ZI)#")CASE 2:archivanmelden;IF archivfehlerTHEN
+LEAVE kursdatenschnittstelleexportabfrageFI ;standardmeldung(meldungdiskinit,
+"")CASE 3:fragevorbereiten;standardmeldung(meldungnameloeschen,aktdateiname+
+".FA (-WK,-BR,-ZI)#"+text(t2,8)+"#")END SELECT ;standardnproc.
+fragevorbereiten:aktdateiname:=standardmaskenfeld(eingangdateiname);IF
+aktdateiname=""THEN fehlermeldungnamefalsch(FALSE )ELIF falschercode(
+aktdateiname)THEN fehlermeldungnamefalsch(TRUE )FI ;IF exists(aktdateiname+
+suffixfa)THEN beginlist;REP getlistentry(t1,t2);UNTIL t1=aktdateiname+
+suffixfaCOR t1=""PER ;ELSE fehlermeldungdateifehlt;LEAVE
+kursdatenschnittstelleexportabfrageFI .END PROC
+kursdatenschnittstelleexportabfrage;PROC fehlermeldungdateifehlt:fstat:=1;
+standardmeldung(meldungnameunbek,aktdateiname+".FA (-WK,-BR,-ZI)#");infeld(
+eingangdateiname);return(1).END PROC fehlermeldungdateifehlt;PROC
+fehlermeldungfeldfuellen:meldungausgeben(meldungpraezisieren,eingangdateiname
+,1).END PROC fehlermeldungfeldfuellen;PROC fehlermeldungnamefalsch(BOOL
+CONST mitfalschemzeichen):IF mitfalschemzeichenTHEN fstat:=1;standardmeldung(
+meldungnamefalsch,subtext(aktdateiname,i,i)+"#"+aktdateiname+"#");infeld(
+eingangdateiname);return(1)ELSE meldungausgeben(meldungnamefalsch,
+eingangdateiname,1)FI END PROC fehlermeldungnamefalsch;PROC
+kursdatenschnittstelleexportloescheundreturn(BOOL CONST b):IF bTHEN forget(
+listenname,quiet);FI ;loeschemeldung;return(2)END PROC
+kursdatenschnittstelleexportloescheundreturn;PROC loeschemeldung:aktfeld:=
+infeld;infeld(1);standardfelderausgeben;infeld(aktfeld)END PROC
+loeschemeldung;END PACKET kursdatenueberschnittstelleexportieren
+
diff --git a/app/schulis/2.2.1/src/2.kursdaten importieren b/app/schulis/2.2.1/src/2.kursdaten importieren
new file mode 100644
index 0000000..20dd27e
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.kursdaten importieren
@@ -0,0 +1,199 @@
+PACKET kursdatenueberschnittstelleimportierenDEFINES
+kursdatenschnittstelleimportanfang,
+kursdatenschnittstelleimportaufbereitenfrage,
+kursdatenschnittstelleimportaufbereiten,
+kursdatenschnittstelleimportloescheundreturn,
+kursdatenschnittstelleimportarchiv:LET eingangsmaske=
+"ms kurswahldaten importieren",schuljahr="Schuljahr",halbjahr="Schulhalbjahr"
+,kuwa2sperre="Kurswahl-2 ",filemodus="file ibm",listenname=
+"Liste der Dateien auf der Diskette:",protname="Protokoll zur Übernahme",
+schulname="Schulname",schulort="Schulort",leerzeile=" ",ueberschrift1=
+"Protokoll zur Übernahme von Kurswahldaten aus Standardschnittstelle der",
+ueberschrift2a="Jgst. ",ueberschrift2b=" für das Halbjahr ",ueberschrift2c=
+" (Schuljahr ",unterschrift=
+"-----------------------------------------------------------------------",
+fehlerfall1="Fehler, Schüler nicht in akt. Jgst. : ",fehlerfall2=
+"Warnung, neuer Kurs : ",fehlerfall3a=
+"Fehler, Planblock nicht übernommen : ",fehlerfall3b=
+" Nicht übernommene Daten : ",fehlerfall3c=
+" ",fehlerfall4a=
+"Fehler, unbekannter Kurs : ",fehlerfall4b=
+" in Kurswahl von : ",trenner="�",dos="DOS",
+eingangdateiname=2,kurslaengebr=6,kurslaengewk=7,kursendebr=5,kursendewk=6,
+kzart="A",kzalle="A",kzplbl="P",kzstd="S",suffixfa=".FA",suffixwk=".WK",
+suffixbr=".BR",suffixzi=".ZI",meldungkeineschueler=423,meldunggewhjunzul=405,
+meldunggewsjunzul=127,meldunggewjgstunzul=404,meldungparallelanw=425,
+meldungbearbwird=352,meldungwarten=69,meldungpraezisieren=129,
+meldungserverfehler=416,meldungdatenuebernehmen=433,meldungdatenirrelevant=
+432,meldungnamefalsch=323,meldungrausreichen=343,meldungnameunbek=351;INT
+VAR i;TEXT VAR t;INT VAR fstat,aktfeld,ermwstd,kurspos,aktpos,aktzeile;TEXT
+VAR aktdateiname:="schulis",gewjgst,gewhj,aktjgst,geplsj,geplhj,gewsj,aktsj:=
+"0000",akthj,neuewahldaten,aktfake,dateieintrag,aktkurs,neuekurse:=trenner,
+fach,kennung,behandeltekurse:=trenner,weitererblock;BOOL VAR archivfehler:=
+FALSE ,sperreok:=TRUE ,aktodergeplhj:=FALSE ;THESAURUS VAR thes;FILE VAR dsfa
+,dswk,dsbr,dszi,prot,g;PROC kursdatenschnittstelleimportanfang:
+standardstartproc(eingangsmaske);infeld(2);standardmaskenfeld(aktdateiname,
+eingangdateiname);standardfelderausgeben;standardnproc.END PROC
+kursdatenschnittstelleimportanfang;PROC
+kursdatenschnittstelleimportaufbereitenfrage:standardmeldung(meldungwarten,""
+);fstat:=0;pruefdateiname;holedateivomarchiv;holedatenfuerabfrage.
+holedatenfuerabfrage:toline(dszi,1);readrecord(dszi,dateieintrag);gewsj:=text
+(dateieintrag,4);i:=int(gewsj);IF NOT lastconversionokTHEN
+fehlermeldungsjunzulaessigFI ;gewhj:=dateieintragSUB 7;IF gewhj<>"1"CAND
+gewhj<>"2"THEN fehlermeldunggewhjunzulaessigFI ;gewjgst:=subtext(dateieintrag
+,5,6);IF gewjgst<>"10"CAND gewjgst<>"11"CAND gewjgst<>"12"CAND gewjgst<>"13"
+THEN fehlermeldunggewjgstunzulaessigFI ;IF aktsj="0000"THEN aktsj:=
+schulkenndatum(schuljahr);akthj:=schulkenndatum(halbjahr);geplhj:=akthj;
+geplsj:=aktsj;geplanteshjundsjberechnen(geplhj,geplsj)FI ;IF gewsj=aktsjCAND
+gewhj=akthjTHEN aktodergeplhj:=TRUE ;aktjgst:=gewjgstELIF gewsj=aktsjCAND
+gewhj<akthjTHEN fehlermeldungdatennichtrelevantELIF gewsj<aktsjTHEN
+fehlermeldungdatennichtrelevantELSE IF gewsj=geplsjCAND gewhj=geplhjTHEN
+aktodergeplhj:=TRUE ELSE aktodergeplhj:=FALSE FI ;aktjgst:=text(int(gewjgst)-
+(int(text(gewsj,2))-int(text(aktsj,2))))FI ;standardmeldung(
+meldungdatenuebernehmen,aktjgst+"#"+gewjgst+"."+gewhj+"#");standardnproc.
+fehlermeldungdatennichtrelevant:meldungausgeben(meldungdatenirrelevant,
+eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
+fehlermeldungsjunzulaessig:meldungausgeben(meldunggewsjunzul,eingangdateiname
+,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
+fehlermeldunggewhjunzulaessig:meldungausgeben(meldunggewhjunzul,
+eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
+fehlermeldunggewjgstunzulaessig:meldungausgeben(meldunggewjgstunzul,
+eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
+pruefdateiname:aktdateiname:=standardmaskenfeld(eingangdateiname);IF
+aktdateiname=""THEN fehlermeldungfeldfuellenELIF falschercode(aktdateiname)
+THEN fehlermeldungnamefalsch(TRUE )FI .holedateivomarchiv:archivanmelden;IF
+archivfehlerTHEN LEAVE kursdatenschnittstelleimportaufbereitenfrageFI ;
+disablestop;forget(aktdateiname+suffixfa,quiet);fetch(aktdateiname+suffixfa,/
+dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE
+kursdatenschnittstelleimportaufbereitenfrageFI ;dsfa:=sequentialfile(modify,
+old(aktdateiname+suffixfa));forget(aktdateiname+suffixwk,quiet);fetch(
+aktdateiname+suffixwk,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE
+kursdatenschnittstelleimportaufbereitenfrageFI ;dswk:=sequentialfile(modify,
+old(aktdateiname+suffixwk));forget(aktdateiname+suffixbr,quiet);fetch(
+aktdateiname+suffixbr,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE
+kursdatenschnittstelleimportaufbereitenfrageFI ;dsbr:=sequentialfile(modify,
+old(aktdateiname+suffixbr));forget(aktdateiname+suffixzi,quiet);fetch(
+aktdateiname+suffixzi,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE
+kursdatenschnittstelleimportaufbereitenfrageFI ;dszi:=sequentialfile(modify,
+old(aktdateiname+suffixzi));enablestop.END PROC
+kursdatenschnittstelleimportaufbereitenfrage;PROC
+kursdatenschnittstelleimportaufbereiten:standardmeldung(meldungwarten,"");
+kurswahlinitialisieren(aktjgst,gewjgst,gewhj,kzalle,gewsj);kurswahlbasisholen
+(fstat);IF fstat<>0THEN meldungausgeben(meldungserverfehler,eingangdateiname,
+1);LEAVE kursdatenschnittstelleimportaufbereitenELIF letzterschueler<
+ersterschuelerTHEN meldungausgeben(meldungkeineschueler,eingangdateiname,1);
+LEAVE kursdatenschnittstelleimportaufbereitenFI ;kurswahlsperresetzen(
+kuwa2sperre,sperreok);IF NOT sperreokTHEN meldungausgeben(meldungparallelanw,
+eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenFI ;
+neuekurse:=trenner;behandeltekurse:=trenner;bereiteprotokollvor;
+uebernehmebrdatei;uebernehmewkdatei;loeschemeldung;kurswahlsperrebeenden(
+kuwa2sperre);kurswahlbasissichern;zeigedatei(protname,"vr").
+kurswahlbasissichern:kurswahl0sichern(fstat);kurswahl1sichern(fstat);
+kurswahl2sichern(fstat);IF fstat<>0THEN meldungausgeben(meldungserverfehler,
+eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenFI .
+bereiteprotokollvor:forget(protname,quiet);prot:=sequentialfile(output,
+protname);putline(prot,schulkenndatum(schulname));putline(prot,text(
+schulkenndatum(schulort),65)+date);putline(prot,leerzeile);putline(prot,
+ueberschrift1);putline(prot,ueberschrift2a+aktjgst+ueberschrift2b+gewjgst+"."
++gewhj+ueberschrift2c+text(gewsj,2)+"/"+subtext(gewsj,3)+"):");putline(prot,
+unterschrift);putline(prot,leerzeile).uebernehmebrdatei:bereitek1dateivor;
+toline(dsbr,1);col(dsbr,1);WHILE NOT eof(dsbr)REP readrecord(dsbr,
+dateieintrag);IF compress(dateieintrag)<>""THEN pruefplanblockundkurse(text(
+dateieintrag,3),subtext(dateieintrag,4))FI ;down(dsbr);col(dsbr,1)PER .
+bereitek1dateivor:planbloeckeinitialisieren;FOR iFROM 1UPTO 22REP
+planblockloeschen(text(i))PER .uebernehmewkdatei:toline(dswk,1);col(dswk,1);
+WHILE NOT eof(dswk)REP readrecord(dswk,dateieintrag);pruefschueler(compress(
+text(dateieintrag,30)),compress(subtext(dateieintrag,31,45)),subtext(
+dateieintrag,46,53),subtext(dateieintrag,54));down(dswk);col(dswk,1)PER .END
+PROC kursdatenschnittstelleimportaufbereiten;PROC pruefplanblockundkurse(
+TEXT CONST block,kurse):INT VAR blockbez:=int(text(block,2)),laengekurse:=
+length(kurse);standardmeldung(meldungbearbwird,"Planblock "+text(block,2)+"#"
+);IF blockbez>0CAND blockbez<23THEN tragblockein;tragkurseeinELSE
+fehlermeldungblockfalschFI .fehlermeldungblockfalsch:putline(prot,
+fehlerfall3a+text(block,2));putline(prot,fehlerfall3b+text(kurse,42));IF
+laengekurse>42THEN putline(prot,fehlerfall3c+subtext(kurse,43))FI .
+tragblockein:planblockeintragen(text(block,2),text(int(blockSUB 3))).
+tragkurseein:kurspos:=1;WHILE kurspos<laengekurseREP aktkurs:=subtext(kurse,
+kurspos,kurspos+kursendebr);aktfake:=text(aktkurs,2)+text(subtext(aktkurs,5),
+4);weitererblock:="";t:=kursdaten(aktfake,kzart);IF dbstatus=1CAND compress(
+aktfake)<>""THEN ermittlewstd;tragkursein;
+planbloeckezumkurseintragenmitevtlblockeintrag(aktfake,text(block,2),
+weitererblock);behandeltekurseCAT aktfake+trennerELSE
+evtlplanbloeckeaktualisierenFI ;kursposINCR kurslaengebrPER .ermittlewstd:IF
+pos(neuekurse,trenner+aktfake+trenner)=0THEN aktzeile:=lineno(dsbr);ermwstd:=
+int(blockSUB 3);toline(dsbr,aktzeile+1);col(dsbr,1);WHILE NOT eof(dsbr)REP
+downety(dsbr,aktkurs);aktpos:=col(dsbr);IF NOT eof(dsbr)CAND ((aktpos-3)MOD 6
+)=1THEN readrecord(dsbr,t);ermwstdINCR int(tSUB 3);weitererblock:=text(t,2);
+down(dsbr);col(dsbr,1);neuekurseCAT aktfake+trenner;toline(dsbr,aktzeile);
+LEAVE ermittlewstdELSE col(dsbr,aktpos+1)FI ;PER ;neuekurseCAT aktfake+
+trenner;toline(dsbr,aktzeile)FI .evtlplanbloeckeaktualisieren:IF pos(
+behandeltekurse,trenner+aktfake+trenner)=0CAND compress(aktfake)<>""THEN
+aktzeile:=lineno(dsbr);toline(dsbr,aktzeile+1);col(dsbr,1);WHILE NOT eof(dsbr
+)REP downety(dsbr,aktkurs);aktpos:=col(dsbr);IF NOT eof(dsbr)CAND ((aktpos-3)
+MOD 6)=1THEN readrecord(dsbr,t);weitererblock:=text(t,2);behandeltekurseCAT
+aktfake+trenner;toline(dsbr,aktzeile);
+planbloeckezumkurseintragenmitevtlblockeintrag(aktfake,text(block,2),
+weitererblock);LEAVE evtlplanbloeckeaktualisierenELSE col(dsbr,aktpos+1)FI ;
+PER ;weitererblock:="";planbloeckezumkurseintragenmitevtlblockeintrag(aktfake
+,text(block,2),weitererblock);behandeltekurseCAT aktfake+trenner;toline(dsbr,
+aktzeile)FI .tragkursein:IF aktodergeplhjTHEN putline(prot,fehlerfall2+text(
+aktkurs,2)+" "+text(subtext(aktkurs,5),4)+", Art "+subtext(aktkurs,3,4))FI ;
+kurseintragen(text(aktkurs,2),text(subtext(aktkurs,5),4),text(ermwstd),
+subtext(aktkurs,3,4)).END PROC pruefplanblockundkurse;PROC
+planbloeckezumkurseintragenmitevtlblockeintrag(TEXT CONST kurs,block1,block2)
+:TEXT VAR t:=planblockdaten(block1,kzstd);IF dbstatus=1THEN
+planblockeintragen(block1,"0")FI ;t:=planblockdaten(block2,kzstd);IF dbstatus
+=1THEN planblockeintragen(block2,"0")FI ;planbloeckezumkurseintragen(kurs,
+block1,block2)END PROC planbloeckezumkurseintragenmitevtlblockeintrag;PROC
+pruefschueler(TEXT CONST famname,rufname,gebdatum,wahldaten):standardmeldung(
+meldungbearbwird,famname+", "+rufname+"#");t:=wahldatenzumschueler(famname,
+rufname,gebdatum,kzart);IF dbstatus=1THEN fehlermeldungunbekschuelerELSE
+tragwahldateneinFI .fehlermeldungunbekschueler:putline(prot,fehlerfall1+text(
+famname+", "+rufname+", "+gebdatum,40)).tragwahldatenein:
+schuelerwahleintragen(famname,rufname,gebdatum,aufbereitetewahldaten(famname,
+rufname,gebdatum,wahldaten)).END PROC pruefschueler;TEXT PROC
+aufbereitetewahldaten(TEXT CONST famname,rufname,gebdatum,altewahldaten):INT
+VAR wahllaenge:=length(altewahldaten);TEXT VAR planbloecke;kurspos:=1;
+neuewahldaten:="";WHILE kurspos<wahllaengeREP aktkurs:=subtext(altewahldaten,
+kurspos,kurspos+kursendewk);fach:=text(aktkurs,2);kennung:=subtext(aktkurs,6)
++" ";planbloecke:=kursdaten(fach+kennung,kzplbl);IF compress(planbloecke)=""
+THEN putline(prot,fehlerfall4a+fach+" "+kennung+", Art "+subtext(aktkurs,3,4)
+);putline(prot,fehlerfall4b+text(famname+", "+rufname+", "+gebdatum,40))ELSE
+ergaenzewahldatenFI ;kursposINCR kurslaengewkPER ;neuewahldaten.
+ergaenzewahldaten:neuewahldatenCAT (aktkursSUB 5);neuewahldatenCAT subtext(
+aktkurs,3,4);neuewahldatenCAT fach;neuewahldatenCAT kennung;neuewahldatenCAT
+planbloecke.END PROC aufbereitetewahldaten;BOOL PROC falschercode(TEXT CONST
+t):INT VAR zeichencode;FOR iFROM 1UPTO LENGTH t-3REP zeichencode:=code(tSUB i
+);IF NOT ((zeichencode>=48AND zeichencode<=57)OR (zeichencode>=65AND
+zeichencode<=90)OR (zeichencode>=97AND zeichencode<=122))THEN LEAVE
+falschercodeWITH TRUE FI PER ;FALSE END PROC falschercode;PROC
+meldungausgeben(INT CONST meldung,gewfeld,gewruecksprung):fstat:=1;
+standardmeldung(meldung,"");infeld(gewfeld);return(gewruecksprung)END PROC
+meldungausgeben;PROC archivanmelden:aktfeld:=infeld;archivfehler:=FALSE ;
+commanddialogue(FALSE );disablestop;reserve(filemodus,/dos);IF iserrorTHEN
+archivfehler:=TRUE ;abbruchnachfehler(1);ELSE enablestopFI .END PROC
+archivanmelden;PROC kursdatenschnittstelleimportarchiv:aktfeld:=infeld;
+archivanmelden;IF archivfehlerTHEN LEAVE kursdatenschnittstelleimportarchiv
+FI ;archivlisten;infeld(aktfeld).archivlisten:standardmeldung(meldungwarten,
+"");disablestop;g:=sequentialfile(output,listenname);thes:=ALL /dos;IF
+iserrorTHEN abbruchnachfehler(1);ELSE thesaurusaufbereiten;enablestop;
+zeigedatei(listenname,"vr");release(/dos)FI .thesaurusaufbereiten:t:=" ";i:=0
+;REP get(thes,t,i);putline(g,t)UNTIL t=""PER .END PROC
+kursdatenschnittstelleimportarchiv;PROC abbruchnachfehler(INT CONST schritte)
+:standardmeldung(meldungrausreichen,"Fehler: "+errormessage+" !#");clearerror
+;return(schritte);infeld(aktfeld);release(/dos);commanddialogue(TRUE );
+enablestopEND PROC abbruchnachfehler;PROC fehlermeldungdateifehlt:fstat:=1;
+standardmeldung(meldungnameunbek,aktdateiname+".FA (-WK,-BR,-ZI)#");infeld(
+eingangdateiname);return(1).END PROC fehlermeldungdateifehlt;PROC
+fehlermeldungfeldfuellen:meldungausgeben(meldungpraezisieren,eingangdateiname
+,1).END PROC fehlermeldungfeldfuellen;PROC fehlermeldungnamefalsch(BOOL
+CONST mitfalschemzeichen):IF mitfalschemzeichenTHEN fstat:=1;standardmeldung(
+meldungnamefalsch,subtext(aktdateiname,i,i)+"#"+aktdateiname+"#");infeld(
+eingangdateiname);return(1)ELSE meldungausgeben(meldungnamefalsch,
+eingangdateiname,1)FI END PROC fehlermeldungnamefalsch;PROC
+kursdatenschnittstelleimportloescheundreturn:forget(listenname,quiet);forget(
+protname,quiet);loeschemeldung;return(3)END PROC
+kursdatenschnittstelleimportloescheundreturn;PROC loeschemeldung:aktfeld:=
+infeld;infeld(1);standardfelderausgeben;infeld(aktfeld)END PROC
+loeschemeldung;END PACKET kursdatenueberschnittstelleimportieren
+
diff --git a/app/schulis/2.2.1/src/2.kurse auf planbloecke legen b/app/schulis/2.2.1/src/2.kurse auf planbloecke legen
new file mode 100644
index 0000000..f23d29c
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.kurse auf planbloecke legen
@@ -0,0 +1,449 @@
+PACKET kurseaufplanbloeckelegenDEFINES kurseaufbloeckestarten,
+kurseaufbloeckeinitialisieren,kurseaufbloeckeschemaspeichern,
+kurseaufbloeckeschemavorblaettern,kurseaufbloeckeschemaentfernenfrage,
+kurseaufbloeckeschemaentfernen,kurseaufbloeckeschemauebernehmenfrage,
+kurseaufbloeckeschemauebernehmen,kurseaufbloeckebearbeiten,
+kurseaufbloeckeinformationenaufbereiten,kurseaufbloeckerechtehaelftezeigen,
+kurseaufbloeckeaenderungenspeichern,kurseaufbloeckeschemaeinteilen,
+kurseaufbloecketeilblockabspalten,kurseaufbloecketeilblockentfernen,
+kurseaufbloeckeschemanichtweiteraendern,kurseaufbloeckezurueckzumbeginn:LET
+maskeeingang="ms kurse auf planbloecke eingang",maskebearb=
+"ms kurse auf planbloecke";LET fnrgewjgst=2,fnrhalbjahr=3,fnraktjgst=4,
+fnrneuanjgst=5,fnrherkunftjgst=6,fnrherkunfthj=7,fnrmitkursen=8;LET fnrfach=2
+,fnrart=3,fnrwochenstunden=4,fnranzahlschueler=5,fnranzahlkurse=6,
+fnrschuelerprokurs=7,fnrausgabefach=8,fnrersterkurs=9,fnrletzterblock=44,
+fnrersteblockangabe=45,fnrerstewstd=46,fnrletztewstd=167;LET felderprozeile=
+11,felderprokurs=3;LET meldnrspeichern=50,meldnrkeinezahl=53,
+meldnrdatenwerdengeprueft=57,meldnrloeschen=61,meldnrnichtloeschen=62,
+meldnrnichtspeichern=63,meldnrloeschfrage=65,meldnrbittewarten=69,
+meldnrblaetternunmoeglich=72,meldnrbitteangabeergaenzen=129,
+meldnrangabenichtsinnvoll=162,meldnruebernehmenfrage=300,meldnruebernehmen=
+301,meldnrnichtuebernehmen=303,meldnrfeldleerlassen=390,
+meldnrfachartkombinationungueltig=393,meldnrfalschejgstfolge=410,
+meldnrfalschebezugsjgst=411,meldnruebernahmeingleicheshj=415,
+meldnrkurswahlfehler=416,meldnrdateninbearbeitung=425,meldnrschemagibtsnicht=
+426,meldnrschemagibtsschon=427,meldnrblocknichtteilbar=428,
+meldnrteilblockentfernen=429,meldnrstundensummmestimmtnicht=430;LET
+feldanzmaskeeingang=8;ROW feldanzmaskeeingangTEXT VAR feldbs1;INT VAR
+letztecursorfnr:=fnrgewjgst,letztecursorfnrbs2,pruefstatus;INT VAR ifnr;LET
+maxblock=22;LET maxtabzeilen=66;LET TABZEILE =STRUCT (TEXT blockbez,TEXT wstd
+,INT frei,INT gesamt,TEXT kurse);ROW maxtabzeilenTABZEILE VAR blockzeile;INT
+VAR izeile,iblock,erstergezeigterblock,letztergezeigterblock,letzterblock:=1;
+BOOL VAR rechtetabellenhaelftezeigen:=FALSE ;INT VAR ikurs;LET maxkurse=7;
+TEXT VAR allekursedesblocks,kursbez;INT VAR poskurs;LET laengekurs=6,
+laengeallekursangaben=10,laengefach=2,laengeart=2,laengefachartstd=5,incrwstd
+=4;LET KURSTAB =STRUCT (TEXT kursname,TEXT blocknr1,TEXT blocknr2);ROW
+maxfachkursKURSTAB VAR kurstab;INT VAR ifachkurs;LET maxfachkurs=12;TEXT VAR
+angabenzueinemkurs,gefundenerkurs,gefundeneplanbloecke,gefundenerblock1,
+gefundenerblock2;INT VAR blockwstd1,blockwstd2;LET jgst10=10,jgst11=11,jgst13
+=13,hj1=1,hj2=2;TEXT VAR aktjgst,gewjgst,gewhalbjahr,neuanjgst,kopiejgst,
+kopiehalbjahr,gewschuljahr,aktuelleshalbjahr,fangsj,fanghj;TEXT VAR blocknr,
+pruefblockbez;LET posblockkennung=3;LET kennungteilblockb="b";LET kennungwstd
+="S",kennungkurse="K",kennungplanbloecke="P";TEXT VAR alleplanblockbez;LET
+planblocklaenge=3,laengeblocknr=2;INT VAR posplanblock;TEXT VAR
+allekursedesgewhj,allekursedesherkunfthj;TEXT VAR fachartkombinationen:="",
+fach,fachart;INT VAR wochenstundenzahl,anzahlschuelermitfachart,
+anzahlschuelerprokurs,anzahlkursezufachart;BOOL VAR wstdfelderschutz:=FALSE ,
+planbloeckemitkursenuebernehmen,kurswahlsperreok;LET kurswahl1="Kurswahl-1 ";
+TEXT VAR gewschueler;LET nuraktuelleschueler="O",nurneuangemeldete="N";LET
+zeilenprobildschirm=12;INT VAR kurswahlstatus;TEXT VAR ueberschrift;LET
+titel1="Kurse blocken für jetzige ",titel2=" in ";LET schulhalbjahr=
+"Schulhalbjahr",schuljahr="Schuljahr";initfelderdeseingangsbildschirms;PROC
+kurseaufbloeckestarten:standardstartproc(maskeeingang);
+wertedeseingangsbildschirmsholen;infeld(fnrgewjgst);standardfelderausgeben;
+infeld(letztecursorfnr);standardnprocEND PROC kurseaufbloeckestarten;PROC
+kurseaufbloeckeinitialisieren:eingangsbehandlung(1);IF eingangsmaskenfehler
+THEN infeld(pruefstatus);return(1)ELSE wertedeseingangsbildschirmsmerken;
+kurswahlinitialisieren(aktjgst,gewjgst,gewhalbjahr,gewschueler,gewschuljahr);
+kurswahlbasisholen(kurswahlstatus);IF kurswahlstatus<>0THEN
+kurswahlfehlerbehandeln;return(1)ELIF alleplanblockbezeichner<>""THEN
+standardmeldung(meldnrschemagibtsschon,"");infeld(fnrgewjgst);return(1)ELSE
+kurswahlsperresetzen(kurswahl1,kurswahlsperreok);IF NOT kurswahlsperreokTHEN
+standardmeldung(meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=
+FALSE ;blockschemazeigen(1);infeld(fnrerstewstd);standardnprocFI FI FI .END
+PROC kurseaufbloeckeinitialisieren;PROC kurswahlfehlerbehandeln:
+standardmeldung(meldnrkurswahlfehler,"");pause(10)END PROC
+kurswahlfehlerbehandeln;PROC kurseaufbloeckezurueckzumbeginn(INT CONST stufen
+):kurswahlsperrebeenden(kurswahl1);enter(stufen)END PROC
+kurseaufbloeckezurueckzumbeginn;PROC blockschemazeigen(INT CONST art):
+standardstartproc(maskebearb);ueberschriftaufbereiten;
+standardkopfmaskeaktualisieren(ueberschrift);eingabefeldersperren(fnrfach,
+fnrart);zusatzfelderinitialisieren;IF art=1THEN blockschemainitialisieren
+ELSE blockschemafuellenFI ;rechtetabellenhaelftezeigen:=FALSE ;
+blockschemaausgebenab(1);infeld(fnrfach);standardfelderausgeben.
+ueberschriftaufbereiten:IF art=1THEN ueberschrift:=titel1;ueberschriftCAT
+aktjgst;ueberschriftCAT titel2;ELIF art=2THEN ueberschrift:=text(
+vergleichsknoten);ueberschriftCAT " für ";ELIF art=3THEN IF
+planbloeckemitkursenuebernehmenTHEN ueberschrift:=text(vergleichsknoten)ELSE
+ueberschrift:="Blockschema ohne Kurse übernehmen"FI ;ueberschriftCAT
+" für "FI ;ueberschriftCAT gewjgst;ueberschriftCAT ".";ueberschriftCAT
+gewhalbjahr;ueberschriftCAT " ";ueberschriftCAT subtext(gewschuljahr,1,2);
+ueberschriftCAT "/";ueberschriftCAT subtext(gewschuljahr,3,4).
+zusatzfelderinitialisieren:FOR ifnrFROM fnrfachUPTO fnrersteblockangabe-1REP
+standardmaskenfeld("",ifnr)PER .blockschemainitialisieren:FOR iblockFROM 1
+UPTO maxtabzeilenREP IF iblock>maxblockTHEN blockzeile(iblock).blockbez:=""
+ELSE blockzeile(iblock).blockbez:=textzweistellig(iblock)+" "FI ;blockzeile(
+iblock).wstd:="0";blockzeile(iblock).frei:=0;blockzeile(iblock).gesamt:=0;
+blockzeile(iblock).kurse:=""PER ;letzterblock:=maxblock.END PROC
+blockschemazeigen;PROC blockschemafuellen:alleplanblockbez:=
+alleplanblockbezeichner;iblock:=0;posplanblock:=1;WHILE posplanblock<length(
+alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(alleplanblockbez,
+posplanblock,posplanblock+2);blockzeile(iblock).blockbez:=blocknr;blockzeile(
+iblock).wstd:=planblockdaten(blocknr,kennungwstd);blockzeile(iblock).frei:=0;
+blockzeile(iblock).gesamt:=anzahlfreierschuelerimplanblock(subtext(blocknr,1,
+2),blocknrSUB 3,"","","","");blockzeile(iblock).kurse:=planblockdaten(blocknr
+,kennungkurse);posplanblockINCR planblocklaengeUNTIL iblock=maxtabzeilenPER ;
+letzterblock:=iblockEND PROC blockschemafuellen;PROC blockschemaausgebenab(
+INT CONST ersterblockeintrag):erstergezeigterblock:=ersterblockeintrag;iblock
+:=ersterblockeintrag-1;ifnr:=fnrersteblockangabe;FOR izeileFROM 1UPTO
+zeilenprobildschirmREP IF iblock<letzterblockTHEN iblockINCR 1;
+volleblockzeileausgebenELSE leereblockzeileausgebenFI ;ifnrINCR
+felderprozeilePER ;letztergezeigterblock:=iblock.leereblockzeileausgeben:
+standardmaskenfeld(" ",ifnr);standardmaskenfeld(" ",ifnr+1);
+standardmaskenfeld(" ",ifnr+2);standardmaskenfeld(" ",ifnr+3);FOR ikurs
+FROM 1UPTO maxkurseREP standardmaskenfeld(" ",ifnr+3+ikurs)PER ;
+feldschutz(ifnr+1).volleblockzeileausgeben:standardmaskenfeld(blockzeile(
+iblock).blockbez,ifnr);standardmaskenfeld(blockzeile(iblock).wstd,ifnr+1);
+standardmaskenfeld(text(blockzeile(iblock).frei),ifnr+2);standardmaskenfeld(
+text(blockzeile(iblock).gesamt),ifnr+3);allekursedesblocks:=blockzeile(iblock
+).kurse;IF rechtetabellenhaelftezeigenTHEN poskurs:=(maxkurse*laengekurs)+1
+ELSE poskurs:=1FI ;FOR ikursFROM 1UPTO maxkurseREP kursbez:=subtext(
+allekursedesblocks,poskurs,poskurs+laengekurs-1);IF kursbez=""THEN kursbez:=
+" "ELSE kursbez:=subtext(kursbez,1,2)+" "+subtext(kursbez,3,6)FI ;
+standardmaskenfeld(kursbez,ifnr+3+ikurs);poskursINCR laengekursPER ;IF
+wstdfelderschutzTHEN feldschutz(ifnr+1)ELSE feldfrei(ifnr+1)FI END PROC
+blockschemaausgebenab;PROC kurseaufbloeckeschemaspeichern(BOOL CONST
+speichern):IF speichernTHEN eingetragenewochenstundenmerken;pruefstatus:=0;
+allewochenstundenangabenpruefen;IF pruefstatus<>0THEN standardmeldung(
+meldnrkeinezahl,"");blockschemaausgebenab(pruefstatus);infeld(
+fnrersteblockangabe);standardfelderausgeben;infeld(fnrerstewstd);return(1)
+ELSE standardmeldung(meldnrspeichern,"");wochenstundenspeichern;
+kurswahl1sichern(kurswahlstatus);kurswahlsperrebeenden(kurswahl1);enter(2)FI
+ELSE standardmeldung(meldnrnichtspeichern,"");kurswahlsperrebeenden(kurswahl1
+);enter(2)FI .allewochenstundenangabenpruefen:INT VAR testint;iblock:=1;
+WHILE iblock<=letzterblockAND pruefstatus=0REP testint:=int(blockzeile(iblock
+).wstd);IF NOT lastconversionokTHEN pruefstatus:=iblockFI ;iblockINCR 1PER .
+wochenstundenspeichern:FOR iblockFROM 1UPTO letzterblockREP
+planblockeintragen(blockzeile(iblock).blockbez,blockzeile(iblock).wstd)PER .
+END PROC kurseaufbloeckeschemaspeichern;PROC eingetragenewochenstundenmerken:
+ifnr:=fnrerstewstd;iblock:=erstergezeigterblock;FOR izeileFROM 1UPTO
+zeilenprobildschirmREP blockzeile(iblock).wstd:=standardmaskenfeld(ifnr);ifnr
+INCR felderprozeile;iblockINCR 1UNTIL iblock>letzterblockPER END PROC
+eingetragenewochenstundenmerken;PROC kurseaufbloeckeschemavorblaettern(BOOL
+CONST vorwaerts):letztecursorfnrbs2:=infeld;IF letztecursorfnrbs2>=
+fnrerstewstdTHEN letztecursorfnrbs2:=fnrerstewstdFI ;IF vorwaertsTHEN IF
+letztergezeigterblock=letzterblockTHEN standardmeldung(
+meldnrblaetternunmoeglich,"")ELSE eingetragenewochenstundenmerken;
+blockschemaausgebenab(letztergezeigterblock+1);infeld(fnrersteblockangabe);
+standardfelderausgeben;infeld(letztecursorfnrbs2)FI ELSE IF
+erstergezeigterblock=1THEN standardmeldung(meldnrblaetternunmoeglich,"")ELSE
+eingetragenewochenstundenmerken;IF erstergezeigterblock>zeilenprobildschirm
+THEN blockschemaausgebenab(erstergezeigterblock-zeilenprobildschirm)ELSE
+blockschemaausgebenab(1)FI ;infeld(fnrersteblockangabe);
+standardfelderausgeben;infeld(letztecursorfnrbs2)FI FI ;return(1)END PROC
+kurseaufbloeckeschemavorblaettern;PROC kurseaufbloeckeschemaentfernenfrage:
+eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return(
+1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst,
+gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(
+kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)
+ELIF alleplanblockbezeichner<>""THEN kurswahlsperresetzen(kurswahl1,
+kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung(
+meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=TRUE ;
+blockschemazeigen(2);standardmeldung(meldnrloeschfrage,"");feldfrei(fnrfach);
+infeld(fnrfach);standardnprocFI ELSE standardmeldung(meldnrschemagibtsnicht,
+"");infeld(fnrgewjgst);return(1)FI FI .END PROC
+kurseaufbloeckeschemaentfernenfrage;PROC kurseaufbloeckeschemaentfernen(BOOL
+CONST entfernen):IF entfernenTHEN standardmeldung(meldnrloeschen,"");
+planbloeckeinitialisierenELSE standardmeldung(meldnrnichtloeschen,"")FI ;
+kurswahlsperrebeenden(kurswahl1);enter(2)END PROC
+kurseaufbloeckeschemaentfernen;PROC kurseaufbloeckeschemauebernehmenfrage:
+eingangsbehandlung(3);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return(
+1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst,
+gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(
+kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)
+ELIF alleplanblockbezeichner<>""THEN standardmeldung(meldnrschemagibtsschon,
+"");infeld(fnrgewjgst);return(1)ELSE IF planbloeckemitkursenuebernehmenTHEN
+allekursedesgewhj:=allekurseFI ;TEXT VAR gewschuljahrsave:=gewschuljahr;
+kopiejgst:=standardmaskenfeld(fnrherkunftjgst);kopiehalbjahr:=
+standardmaskenfeld(fnrherkunfthj);kurswahlinitialisieren(aktjgst,kopiejgst,
+kopiehalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(kurswahlstatus);
+IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELIF
+alleplanblockbezeichner<>""THEN wstdfelderschutz:=TRUE ;gewschuljahr:=
+gewschuljahrsave;blockschemazeigen(3);standardmeldung(meldnruebernehmenfrage,
+"");feldfrei(fnrfach);infeld(fnrfach);standardnprocELSE standardmeldung(
+meldnrschemagibtsnicht,"");infeld(fnrherkunftjgst);return(1)FI FI FI END
+PROC kurseaufbloeckeschemauebernehmenfrage;PROC
+kurseaufbloeckeschemauebernehmen(BOOL CONST uebernehmen):IF uebernehmenTHEN
+standardmeldung(meldnruebernehmen,"");IF planbloeckemitkursenuebernehmenCAND
+allekursedesgewhj=""THEN allekursedesherkunfthj:=allekurseFI ;
+kurswahlinitialisieren(aktjgst,gewjgst,gewhalbjahr,gewschueler,gewschuljahr);
+kurswahlbasisholen(kurswahlstatus);kurswahlsperresetzen(kurswahl1,
+kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung(
+meldnrdateninbearbeitung,"");return(1)ELSE
+evtlkurseundplanblockschemauebernahmedurchfuehren;kurswahl0sichern(
+kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;
+kurswahlsperrebeenden(kurswahl1);return(1)ELSE kurswahl1sichern(
+kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;
+kurswahlsperrebeenden(kurswahl1);return(1)ELSE kurswahlsperrebeenden(
+kurswahl1);enter(2)FI FI FI ELSE standardmeldung(meldnrnichtuebernehmen,"");
+enter(2)FI .allekursealskursedesgewhjeintragen:poskurs:=1;WHILE poskurs<=
+length(allekursedesherkunfthj)REP kurseintragen(kursfach,kurskennung,kurswstd
+,kursart);poskursINCR laengeallekursangabenPER .kursfach:subtext(
+allekursedesherkunfthj,poskurs,poskurs+1).kurskennung:compress(subtext(
+allekursedesherkunfthj,poskurs+2,poskurs+5)).kurswstd:subtext(
+allekursedesherkunfthj,poskurs+6,poskurs+7).kursart:subtext(
+allekursedesherkunfthj,poskurs+8,poskurs+9).
+evtlkurseundplanblockschemauebernahmedurchfuehren:IF
+planbloeckemitkursenuebernehmenCAND allekursedesgewhj=""THEN
+allekursealskursedesgewhjeintragen;allekursedesgewhj:=allekursedesherkunfthj
+FI ;FOR iblockFROM 1UPTO letzterblockREP planblockeintragen(blockzeile(iblock
+).blockbez,blockzeile(iblock).wstd);IF planbloeckemitkursenuebernehmenTHEN
+allekursedesblocks:=blockzeile(iblock).kurse;poskurs:=1;WHILE poskurs<=length
+(allekursedesblocks)REP kursbez:=subtext(allekursedesblocks,poskurs,poskurs+
+laengekurs-1);IF suchpos(allekursedesgewhj,kursbez,laengeallekursangaben)>0
+THEN kurszumplanblockeintragen(compress(kursbez),blockzeile(iblock).blockbez)
+FI ;poskursINCR laengekursPER ;FI PER .END PROC
+kurseaufbloeckeschemauebernehmen;PROC kurseaufbloeckebearbeiten:
+eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return(
+1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst,
+gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(
+kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)
+ELIF alleplanblockbezeichner<>""THEN kurswahlsperresetzen(kurswahl1,
+kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung(
+meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=TRUE ;
+blockschemazeigen(2);feldfrei(fnrfach);feldfrei(fnrart);infeld(fnrfach);
+standardnprocFI ELSE standardmeldung(meldnrschemagibtsnicht,"");infeld(
+fnrgewjgst);return(1)FI FI END PROC kurseaufbloeckebearbeiten;PROC
+kurseaufbloeckeinformationenaufbereiten:fach:=text(standardmaskenfeld(fnrfach
+),laengefach);fachart:=text(standardmaskenfeld(fnrart),laengeart);IF
+gueltigefachartkombination(fach,fachart,wochenstundenzahl)THEN kurswahl2holen
+(kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)
+ELSE informationenwirklichaufbereiten;standardnprocFI ELSE standardmeldung(
+meldnrfachartkombinationungueltig,"");return(1)FI .
+informationenwirklichaufbereiten:feldschutzfuerinfosetzen;standardmaskenfeld(
+fach,fnrausgabefach);anzahlschuelermitfachart:=anzahlschuelermitwahl(fach,"",
+fachart,"");standardmaskenfeld(text(anzahlschuelermitfachart),
+fnranzahlschueler);standardmaskenfeld(text(wochenstundenzahl),
+fnrwochenstunden);kursezufachundartbestimmen;standardmaskenfeld(text(
+anzahlkursezufachart),fnranzahlkurse);IF anzahlkursezufachart>0THEN
+anzahlschuelerprokurs:=anzahlschuelermitfachartDIV anzahlkursezufachart;
+standardmaskenfeld(text(anzahlschuelerprokurs),fnrschuelerprokurs)ELSE
+standardmaskenfeld(" ",fnrschuelerprokurs)FI ;iblock:=0;posplanblock:=1;
+WHILE posplanblock<length(alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(
+alleplanblockbez,posplanblock,posplanblock+2);blockzeile(iblock).frei:=
+anzahlfreierschuelerimplanblock(subtext(blocknr,1,2),blocknrSUB 3,fach,"",
+fachart,"");posplanblockINCR planblocklaengeUNTIL iblock=letzterblockPER ;
+blockschemaausgebenab(erstergezeigterblock);infeld(fnrwochenstunden);
+standardfelderausgeben;infeld(fnrersterkurs).feldschutzfuerinfosetzen:
+feldschutz(fnrfach);feldschutz(fnrart);eingabefelderoeffnen(fnrersterkurs,
+fnrletzterblock).kursezufachundartbestimmen:allekursedesgewhj:=allekurse;
+poskurs:=1;anzahlkursezufachart:=0;ifnr:=fnrersterkurs;FOR ifachkursFROM 1
+UPTO maxfachkursREP suchegewuenschtenkursinkursendeshj;IF gefundenerkurs<>""
+THEN standardmaskenfeld(compress(gefundenerkurs),ifnr);standardmaskenfeld(
+compress(gefundenerblock1),ifnr+1);standardmaskenfeld(compress(
+gefundenerblock2),ifnr+2);anzahlkursezufachartINCR 1ELSE standardmaskenfeld(
+"",ifnr);standardmaskenfeld("",ifnr+1);standardmaskenfeld("",ifnr+2)FI ;
+kurstab(ifachkurs).kursname:=standardmaskenfeld(ifnr);kurstab(ifachkurs).
+blocknr1:=standardmaskenfeld(ifnr+1);kurstab(ifachkurs).blocknr2:=
+standardmaskenfeld(ifnr+2);ifnrINCR felderprokursPER .
+suchegewuenschtenkursinkursendeshj:gefundenerkurs:="";WHILE poskurs<=length(
+allekursedesgewhj)REP angabenzueinemkurs:=subtext(allekursedesgewhj,poskurs,
+poskurs+laengeallekursangaben-1);IF subtext(angabenzueinemkurs,1,2)=fachCAND
+subtext(angabenzueinemkurs,9,10)=fachartTHEN gefundenerkurs:=subtext(
+angabenzueinemkurs,1,6);gefundeneplanbloecke:=kursdaten(gefundenerkurs,
+kennungplanbloecke);gefundenerblock1:=subtext(gefundeneplanbloecke,1,3);
+gefundenerblock2:=subtext(gefundeneplanbloecke,4,6);gefundenerkurs:=subtext(
+gefundenerkurs,3)FI ;poskursINCR laengeallekursangabenUNTIL gefundenerkurs<>
+""PER .END PROC kurseaufbloeckeinformationenaufbereiten;BOOL PROC
+gueltigefachartkombination(TEXT CONST prueffach,pruefart,INT VAR
+auswochenstundenzahl):INT VAR postreffer;IF fachartkombinationen=""THEN
+standardmeldung(meldnrbittewarten,"");holeallefachartkombinationenFI ;
+postreffer:=suchpos(fachartkombinationen,prueffach+pruefart,laengefachartstd)
+;IF postreffer=0THEN FALSE ELSE auswochenstundenzahl:=int(
+fachartkombinationenSUB (postreffer+incrwstd));TRUE FI .
+holeallefachartkombinationen:TEXT VAR aktuellesschuljahr:=schulkenndatum(
+schuljahr);inittupel(dnrfaecherangebot);fanghj:=aktuelleshalbjahr;fangsj:=
+aktuellesschuljahr;IF NOT (gewhalbjahr=aktuelleshalbjahrAND gewschuljahr=
+aktuellesschuljahr)THEN geplanteshjundsjberechnen(fanghj,fangsj)FI ;putwert(
+fnrfangsj,fangsj);putwert(fnrfanghj,fanghj);putwert(fnrfangjgst,gewjgst);
+search(dnrfaecherangebot,FALSE );statleseschleife(dnrfaecherangebot,fangsj,
+fanghj,fnrfangsj,fnrfanghj,PROC fanglesen)END PROC gueltigefachartkombination
+;PROC fanglesen(BOOL VAR b):IF dbstatus=0AND wert(fnrfangsj)=fangsjAND wert(
+fnrfanghj)=fanghjAND wert(fnrfangjgst)=gewjgstTHEN fachartkombinationenCAT
+text(wert(fnrfangfach),laengefach);fachartkombinationenCAT text(wert(
+fnrfangart),laengeart);fachartkombinationenCAT text(wert(fnrfangwochenstd),1)
+ELSE b:=TRUE FI END PROC fanglesen;PROC kurseaufbloeckerechtehaelftezeigen(
+BOOL CONST rechts):rechtetabellenhaelftezeigen:=rechts;letztecursorfnrbs2:=
+infeld;blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe
+);standardfelderausgeben;infeld(letztecursorfnrbs2);return(1)END PROC
+kurseaufbloeckerechtehaelftezeigen;PROC kurseaufbloeckeaenderungenspeichern(
+BOOL CONST speichern):IF speichernTHEN kurszuordnungenpruefen;IF pruefstatus>
+0THEN infeld(pruefstatus);return(1)ELSE kurszuordnungenspeichern;
+kurswahl0sichern(kurswahlstatus);IF kurswahlstatus<>0THEN
+kurswahlfehlerbehandeln;return(1)ELSE kurswahl1sichern(kurswahlstatus);IF
+kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELSE
+zurueckzumbearbeitungsanfangFI FI ;FI ;ELSE standardmeldung(
+meldnrnichtspeichern,"");zurueckzumbearbeitungsanfangFI .
+kurszuordnungenpruefen:standardmeldung(meldnrdatenwerdengeprueft,"");
+pruefstatus:=0;ifnr:=fnrersterkurs;WHILE ifnr<fnrletzterblockREP kursbez:=
+standardmaskenfeld(ifnr);IF kursbezdoppeltangegebenTHEN pruefstatus:=ifnr;
+standardmeldung(meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefenFI
+;IF kursbez=""CAND (standardmaskenfeld(ifnr+1)<>""OR standardmaskenfeld(ifnr+
+2)<>"")THEN pruefstatus:=ifnr;standardmeldung(meldnrbitteangabeergaenzen,"");
+LEAVE kurszuordnungenpruefenFI ;pruefblockbez:=standardmaskenfeld(ifnr+1);IF
+ungueltigepruefblockbezTHEN pruefstatus:=ifnr+1;standardmeldung(
+meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefenFI ;pruefblockbez:=
+standardmaskenfeld(ifnr+2);IF ungueltigepruefblockbezTHEN pruefstatus:=ifnr+2
+;standardmeldung(meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefen
+FI ;ifnrINCR felderprokursPER .ungueltigepruefblockbez:pruefblockbez<>""AND (
+suchpos(alleplanblockbez,pruefblockbez,planblocklaenge)=0COR length(compress(
+pruefblockbez))<laengeblocknr).kursbezdoppeltangegeben:INT VAR ifnrpruef:=
+ifnr;kursbez:=compress(kursbez);IF kursbez<>""THEN WHILE ifnrpruef>
+fnrersterkursREP ifnrpruefDECR felderprokurs;IF kursbez=compress(
+standardmaskenfeld(ifnrpruef))THEN LEAVE kursbezdoppeltangegebenWITH TRUE FI
+;PER ;FI ;FALSE .kurszuordnungenspeichern:TEXT VAR kompkursbez;
+standardmeldung(meldnrspeichern,"");ifnr:=fnrersterkurs;ifachkurs:=1;WHILE
+ifnr<fnrletzterblockREP kompkursbez:=compress(standardmaskenfeld(ifnr));IF
+kompkursbez<>""THEN IF kurstab(ifachkurs).kursname=""THEN kursneuaufnehmen
+ELSE kursevtlueberschreibenFI ELSE IF kurstab(ifachkurs).kursname<>""THEN
+kursentfernenFI FI ;ifachkursINCR 1;ifnrINCR felderprokursPER .
+kursevtlueberschreiben:IF kompkursbez=kurstab(ifachkurs).kursnameTHEN kursbez
+:=standardmaskenfeld(fnrausgabefach);kursbezCAT kompkursbez;
+planbloeckezumkurseintragen(kursbez,standardmaskenfeld(ifnr+1),
+standardmaskenfeld(ifnr+2))ELSE kursentfernen;kursneuaufnehmenFI .
+kursneuaufnehmen:kursbez:=standardmaskenfeld(fnrausgabefach);kursbezCAT
+kompkursbez;kurseintragen(standardmaskenfeld(fnrausgabefach),kompkursbez,
+standardmaskenfeld(fnrwochenstunden),standardmaskenfeld(fnrart));
+planbloeckezumkurseintragen(kursbez,standardmaskenfeld(ifnr+1),
+standardmaskenfeld(ifnr+2)).kursentfernen:kursbez:=standardmaskenfeld(
+fnrausgabefach);kursbezCAT kurstab(ifachkurs).kursname;kursloeschen(fach,
+kurstab(ifachkurs).kursname).zurueckzumbearbeitungsanfang:wstdfelderschutz:=
+TRUE ;IF speichernTHEN blockschemaneufuellen;blockschemaausgebenab(1)FI ;
+eingabefeldersperren(fnrersterkurs,fnrletzterblock);feldfrei(fnrfach);
+feldfrei(fnrart);FOR ifnrFROM fnrwochenstundenUPTO fnrletzterblockREP
+standardmaskenfeld("",ifnr)PER ;infeld(fnrfach);return(2).
+blockschemaneufuellen:iblock:=0;posplanblock:=1;WHILE posplanblock<length(
+alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(alleplanblockbez,
+posplanblock,posplanblock+2);blockzeile(iblock).frei:=0;blockzeile(iblock).
+kurse:=planblockdaten(blocknr,kennungkurse);posplanblockINCR planblocklaenge
+UNTIL iblock=maxtabzeilenPER .END PROC kurseaufbloeckeaenderungenspeichern;
+INT PROC stundenzahl(INT CONST feldnr):pruefblockbez:=standardmaskenfeld(
+feldnr);IF pruefblockbez=""THEN 0ELSE int(planblockdaten(pruefblockbez,
+kennungwstd))FI END PROC stundenzahl;PROC kurseaufbloeckeschemaeinteilen:
+feldschutz(fnrfach);feldschutz(fnrart);wstdfelderschutz:=FALSE ;
+blockschemaausgebenab(erstergezeigterblock);infeld(fnrerstewstd);
+standardfelderausgeben;infeld(fnrerstewstd);standardnprocEND PROC
+kurseaufbloeckeschemaeinteilen;PROC kurseaufbloecketeilblockabspalten:ifnr:=
+infeld;blocknr:=standardmaskenfeld(ifnr-1);iblockbestimmen;IF (blocknrSUB
+posblockkennung)<>" "THEN standardmeldung(meldnrblocknichtteilbar,"")ELIF
+text(blocknr,2)=naechsteblocknummerTHEN standardmeldung(
+meldnrblocknichtteilbar,"")ELIF standardmaskenfeld(ifnr)<"0"OR
+standardmaskenfeld(ifnr)>blockzeile(iblock).wstdTHEN standardmeldung(
+meldnrangabenichtsinnvoll,"")ELSE teilblockabspaltendurchfuehrenFI ;return(1)
+.naechsteblocknummer:IF iblock=letzterblockTHEN ""ELSE text(blockzeile(iblock
++1).blockbez,2)FI .teilblockabspaltendurchfuehren:blockwstd1:=int(
+standardmaskenfeld(ifnr));blockwstd2:=int(blockzeile(iblock).wstd)-blockwstd1
+;planblockteilen(text(blocknr,2),text(blockwstd1),text(blockwstd2));
+kurswahl1sichern(kurswahlstatus);IF kurswahlstatus<>0THEN
+kurswahlfehlerbehandelnELSE erstergezeigterblock:=iblock;blockschemafuellen;
+blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe);
+standardfelderausgeben;infeld(fnrerstewstd)FI END PROC
+kurseaufbloecketeilblockabspalten;PROC iblockbestimmen:iblock:=
+erstergezeigterblock+incrblock.incrblock:(ifnr-fnrerstewstd)DIV
+felderprozeileEND PROC iblockbestimmen;PROC kurseaufbloecketeilblockentfernen
+:ifnr:=infeld;blocknr:=standardmaskenfeld(ifnr-1);IF (blocknrSUB
+posblockkennung)<>" "THEN standardmeldung(meldnrteilblockentfernen,"")ELSE
+iblockbestimmen;IF teilbloeckevorhandenTHEN IF teilblockkurseidentischTHEN
+allekursedesblocks:=blockzeile(iblock+1).kurse;planblockloeschen(blockzeile(
+iblock+1).blockbez);planblockloeschen(blockzeile(iblock+2).blockbez);
+allekurseinblocknreintragen;kurswahl1sichern(kurswahlstatus);IF
+kurswahlstatus<>0THEN kurswahlfehlerbehandelnELSE blockschemafuellen;
+blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe);
+standardfelderausgeben;infeld(fnrerstewstd)FI ELSE standardmeldung(
+meldnrteilblockentfernen,"")FI ELSE standardmeldung(meldnrteilblockentfernen,
+"")FI FI ;return(1).teilbloeckevorhanden:text(blocknr,laengeblocknr)=
+naechsteblocknummer.naechsteblocknummer:IF iblock=letzterblockTHEN ""ELSE
+text(blockzeile(iblock+1).blockbez,laengeblocknr)FI .teilblockkurseidentisch:
+blockzeile(iblock+1).kurse=blockzeile(iblock+2).kurse.
+allekurseinblocknreintragen:poskurs:=1;WHILE poskurs<=length(
+allekursedesblocks)REP kursbez:=subtext(allekursedesblocks,poskurs,poskurs+
+laengekurs-1);kurszumplanblockeintragen(kursbez,blocknr);poskursINCR
+laengekursPER .END PROC kurseaufbloecketeilblockentfernen;PROC
+kurseaufbloeckeschemanichtweiteraendern:INT VAR meldnrfehler;
+eingetragenewochenstundenmerken;pruefstatus:=0;
+allewochenstundenangabenpruefen;IF pruefstatus<>0THEN standardmeldung(
+meldnrfehler,"");blockschemaausgebenab(pruefstatus);infeld(
+fnrersteblockangabe);standardfelderausgeben;infeld(fnrerstewstd);return(1)
+ELSE standardmeldung(meldnrspeichern,"");wochenstundenspeichern;
+kurswahl1sichern(kurswahlstatus);feldfrei(fnrfach);feldfrei(fnrart);
+wstdfelderschutz:=TRUE ;eingabefeldersperren(fnrerstewstd,fnrletztewstd,
+felderprozeile);infeld(fnrfach);return(2)FI .allewochenstundenangabenpruefen:
+INT VAR testint;iblock:=1;WHILE iblock<=letzterblockAND pruefstatus=0REP
+testint:=int(blockzeile(iblock).wstd);IF NOT lastconversionokTHEN pruefstatus
+:=iblock;meldnrfehler:=meldnrkeinezahlELIF ((blockzeile(iblock).blockbez)SUB
+posblockkennung)=kennungteilblockbTHEN IF int(blockzeile(iblock-2).wstd)<>int
+(blockzeile(iblock-1).wstd)+int(blockzeile(iblock).wstd)THEN pruefstatus:=
+iblock-2;meldnrfehler:=meldnrstundensummmestimmtnichtFI FI ;iblockINCR 1PER .
+wochenstundenspeichern:FOR iblockFROM 1UPTO letzterblockREP
+planblockeintragen(blockzeile(iblock).blockbez,blockzeile(iblock).wstd)PER .
+END PROC kurseaufbloeckeschemanichtweiteraendern;PROC eingangsbehandlung(INT
+CONST art):pruefstatus:=0;aktjgst:=standardmaskenfeld(fnraktjgst);gewhalbjahr
+:=standardmaskenfeld(fnrhalbjahr);gewjgst:=standardmaskenfeld(fnrgewjgst);
+neuanjgst:=standardmaskenfeld(fnrneuanjgst);kopiehalbjahr:=standardmaskenfeld
+(fnrherkunfthj);kopiejgst:=standardmaskenfeld(fnrherkunftjgst);
+aktuelleshalbjahr:=schulkenndatum(schulhalbjahr);allgemeinefelderpruefen;IF
+pruefstatus=0THEN IF art=1OR art=2THEN bearbeitungfelderpruefenELIF art=3
+THEN uebernahmefelderpruefen;planbloeckemitkursenuebernehmen:=
+standardmaskenfeld(fnrmitkursen)<>""FI FI .allgemeinefelderpruefen:
+standardpruefe(3,fnrgewjgst,jgst11,jgst13,"",pruefstatus);IF pruefstatus>0
+THEN LEAVE allgemeinefelderpruefenFI ;standardpruefe(3,fnrhalbjahr,hj1,hj2,""
+,pruefstatus);IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;IF
+aktjgst<>""THEN IF int(aktuelleshalbjahr)=hj2THEN standardpruefe(3,fnraktjgst
+,jgst10,jgst13,"",pruefstatus)ELSE standardpruefe(3,fnraktjgst,jgst11,jgst13,
+"",pruefstatus)FI ;IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ;
+IF neuanjgst<>""THEN standardpruefe(3,fnrneuanjgst,jgst11,jgst13,"",
+pruefstatus);IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ;IF
+aktjgst<>""THEN IF neuanjgst<>""THEN IF int(neuanjgst)<>int(aktjgst)+1THEN
+standardmeldung(meldnrfalschejgstfolge,"");pruefstatus:=fnraktjgst;LEAVE
+allgemeinefelderpruefenFI ;gewschueler:=""ELSE gewschueler:=
+nuraktuelleschuelerFI ELIF neuanjgst=""THEN standardmeldung(
+meldnrbitteangabeergaenzen,"");pruefstatus:=fnraktjgst;LEAVE
+allgemeinefelderpruefenELSE gewschueler:=nurneuangemeldete;aktjgst:=text(int(
+neuanjgst)-1)FI ;IF aktjgst>gewjgstCOR (aktjgst=gewjgstAND aktuelleshalbjahr>
+gewhalbjahr)THEN standardmeldung(meldnrfalschebezugsjgst,"");pruefstatus:=
+fnrgewjgst;LEAVE allgemeinefelderpruefenFI .bearbeitungfelderpruefen:IF
+standardmaskenfeld(fnrherkunftjgst)<>""THEN standardmeldung(
+meldnrfeldleerlassen,"");pruefstatus:=fnrherkunftjgst;LEAVE
+bearbeitungfelderpruefenFI ;IF standardmaskenfeld(fnrherkunfthj)<>""THEN
+standardmeldung(meldnrfeldleerlassen,"");pruefstatus:=fnrherkunfthj;LEAVE
+bearbeitungfelderpruefenFI ;IF standardmaskenfeld(fnrmitkursen)<>""THEN
+standardmeldung(meldnrfeldleerlassen,"");pruefstatus:=fnrmitkursen;LEAVE
+bearbeitungfelderpruefenFI .uebernahmefelderpruefen:standardpruefe(3,
+fnrherkunftjgst,jgst11,jgst13,"",pruefstatus);IF pruefstatus>0THEN LEAVE
+uebernahmefelderpruefenFI ;standardpruefe(3,fnrherkunfthj,hj1,hj2,"",
+pruefstatus);IF pruefstatus>0THEN LEAVE uebernahmefelderpruefenFI ;IF gewjgst
+=kopiejgstCAND gewhalbjahr=kopiehalbjahrTHEN pruefstatus:=fnrgewjgst;
+standardmeldung(meldnruebernahmeingleicheshj,"");LEAVE
+uebernahmefelderpruefenFI ;END PROC eingangsbehandlung;BOOL PROC
+eingangsmaskenfehler:pruefstatus<>0END PROC eingangsmaskenfehler;INT PROC
+suchpos(TEXT CONST quelle,suchtext,INT CONST laenge):INT VAR findpos:=pos(
+quelle,suchtext);WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE suchpos
+WITH findposELSE findpos:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND
+PROC suchpos;PROC eingabefeldersperren(INT CONST von,bis):
+eingabefeldersperren(von,bis,1)END PROC eingabefeldersperren;PROC
+eingabefeldersperren(INT CONST von,bis,abstand):INT VAR ifnr:=von;WHILE ifnr
+<=bisREP feldschutz(ifnr);ifnrINCR abstandPER END PROC eingabefeldersperren;
+PROC eingabefelderoeffnen(INT CONST von,bis):eingabefelderoeffnen(von,bis,1)
+END PROC eingabefelderoeffnen;PROC eingabefelderoeffnen(INT CONST von,bis,
+abstand):INT VAR ifnr:=von;WHILE ifnr<=bisREP feldfrei(ifnr);ifnrINCR abstand
+PER END PROC eingabefelderoeffnen;PROC initfelderdeseingangsbildschirms:INT
+VAR i;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1(i):=""PER END PROC
+initfelderdeseingangsbildschirms;PROC wertedeseingangsbildschirmsmerken:INT
+VAR i;letztecursorfnr:=infeld;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1(
+i):=standardmaskenfeld(i)PER END PROC wertedeseingangsbildschirmsmerken;PROC
+wertedeseingangsbildschirmsholen:INT VAR i;FOR iFROM 1UPTO
+feldanzmaskeeingangREP standardmaskenfeld(feldbs1(i),i)PER END PROC
+wertedeseingangsbildschirmsholen;TEXT PROC textzweistellig(INT CONST i):IF i<
+10THEN "0"+text(i)ELSE text(i)FI END PROC textzweistellig;END PACKET
+kurseaufplanbloeckelegen
+
diff --git a/app/schulis/2.2.1/src/2.kurswahl schnittstelle b/app/schulis/2.2.1/src/2.kurswahl schnittstelle
new file mode 100644
index 0000000..2b29d36
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.kurswahl schnittstelle
@@ -0,0 +1,664 @@
+PACKET kurswahlschnittstelle240791DEFINES kurswahlinitialisieren,
+kurswahlbasisholen,erweitertekurswahlbasisholen,istkurswahlbasisvorhanden,
+kurswahldatenvorhanden,kurswahl0holen,kurswahl1holen,kurswahl2holen,
+kurswahl0sichern,kurswahl1sichern,kurswahl2sichern,kurswahlsperresetzen,
+kurswahlsperrebeenden,kurseintragen,kursloeschen,planblockeintragen,
+planblockteilen,planblockloeschen,planbloeckezumkurseintragen,
+planbloeckeinitialisieren,kurszumplanblockeintragen,schuelerwahleintragen,
+schuelerwahlaendern,ersterschueler,letzterschueler,wahldatenzumindex,
+wahldatenzumschueler,weiterewahldatenzumschueler,kursdaten,allekurse,
+alleplanblockbezeichner,planblockdaten,anzahlschuelermitwahl,schuelermitwahl,
+anzahlfreierschuelerimplanblock,schuelerinplanblock,schuelerundklausur:LET
+namezwischendatei="Hj-Daten",meldungneuebasis=377;LET maxkuwa1zeilen=66,
+laengekurseintrag=15,laengeblockwstd=4,laengeblock=3,laengekurs=6,laengefach=
+2,laengekennung=4,laengeart=2,laengewstd=2,laengeklausur=1,server=
+"kurswahl server",kennungtplbl1="a",kennungtplbl2="b",leereplanbloecke=
+" ",leererblock=" ",leerekennung=" ",leereart=" ",stat1="ls",stat2
+="n11",stat3="nso",kzschueler="�S�",kzneue="�N�",kzohneneue="O",kznurneue="N"
+,kzname="N",kzkurse="K",kzart="A",kzstd="S",kzplanbl="P",kzfake="FK",dbsj=
+"Schuljahr",dbhj="Schulhalbjahr",trenner="�",trenner2="$",kurswahl0=
+"Kurswahl-0 ",kurswahl1="Kurswahl-1 ",kurswahl2="Kurswahl-2 ",praefixsperre=
+"Sperre ";FILE VAR kuwa0,kuwa1,kuwa2,kuwa3,kuwahilf;TEXT VAR schuljahr:=
+"0000",halbjahr:="0",aktschuljahr:="0000",akthalbjahr:="0",jgst:="",hjdtid,
+fa1,ke1,fa2,ke2,ws,kl,ar,eintrag,status,datei,sj,hj;INT VAR bearbschueler,
+erster:=1,letzter:=0,namenpos,aktjg;BOOL VAR hjzukuenftig,hjaktgepl,
+kuwa2eintrag:=TRUE ,plblvorhanden:=FALSE ,faartschoneingetragen:=FALSE ,
+fakeschoneingetragen:=FALSE ,eintragloeschen:=FALSE ;TEXT VAR hjd1,hjd2,hjd3,
+hjd4,hjd5,hjd6,hjd7;TASK VAR takuser;PROC kurswahlinitialisieren(TEXT CONST
+aktjgst,gewjgst,gewhj,schueler,TEXT VAR bersj):INT VAR j;aktjg:=int(aktjgst);
+IF schueler=kzohneneueTHEN bearbschueler:=1ELIF schueler=kznurneueTHEN
+bearbschueler:=2ELSE bearbschueler:=3FI ;sj:=schulkenndatum(dbsj);hj:=
+schulkenndatum(dbhj);IF gewjgst=aktjgstTHEN schuljahr:=sjELSE j:=int(gewjgst)
+-int(aktjgst);schuljahr:=konvsjteil(text(sj,2),j)+konvsjteil(subtext(sj,3),j)
+FI ;bersj:=schuljahr;halbjahr:=gewhj;jgst:=gewjgst;IF hj="1"CAND int(gewjgst)
+>int(aktjgst)THEN hjzukuenftig:=TRUE ELIF hj="2"CAND int(gewjgst+gewhj)>(int(
+aktjgst)+1)*10+1THEN hjzukuenftig:=TRUE ELSE hjzukuenftig:=FALSE FI ;
+hjaktgepl:=NOT hjzukuenftigEND PROC kurswahlinitialisieren;BOOL PROC
+istkurswahlbasisvorhanden:dbstatus(1);IF halbjahrnichtgesetztTHEN FALSE ELIF
+NOT existstask(server)THEN FALSE ELSE takuser:=task(server);datei:=
+datenraumname(kurswahl1);dbstatus(0);exists(datei,takuser)FI END PROC
+istkurswahlbasisvorhanden;PROC kurswahlbasisholen(INT VAR fehlerstatus):INT
+VAR j;IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(server)
+THEN fehlerstatus:=2ELSE takuser:=task(server);commanddialogue(FALSE );
+fehlerstatus:=0;datei:=datenraumname(kurswahl0);IF exists(datei,takuser)THEN
+holkuwa0dateiundkoppleanELSE erstellekuwa0dateiFI ;datei:=datenraumname(
+kurswahl1);IF exists(datei,takuser)THEN plblvorhanden:=TRUE ;
+holkuwa1dateiundkoppleanELSE plblvorhanden:=FALSE ;erstellekuwa1dateiFI ;
+datei:=datenraumname(kurswahl2);IF exists(datei,takuser)THEN
+holkuwa2dateiundkoppleanELSE erstellekuwa2dateiFI ;commanddialogue(TRUE )FI .
+holkuwa0dateiundkopplean:fetch(datei,takuser);kuwa0:=sequentialfile(modify,
+old(datei)).erstellekuwa0datei:IF hjzukuenftigTHEN kuwa0:=sequentialfile(
+modify,datei);insertrecord(kuwa0)ELSE datei:=datenraumname(kurswahl0);forget(
+datei,quiet);kursdatenholen;IF lines(kuwa0)=0THEN insertrecord(kuwa0)FI FI ;
+save(datei,takuser).holkuwa1dateiundkopplean:fetch(datei,takuser);kuwa1:=
+sequentialfile(modify,old(datei)).erstellekuwa1datei:kuwa1:=sequentialfile(
+modify,datei);FOR jFROM 1UPTO maxkuwa1zeilenREP insertrecord(kuwa1)PER ;save(
+datei,takuser).holkuwa2dateiundkopplean:fetch(datei,takuser);kuwa2:=
+sequentialfile(modify,old(datei));ermittleersterletzter.erstellekuwa2datei:
+kuwa2eintrag:=TRUE ;kurswahleinerjgstaufbereiten(jgst,halbjahr,schuljahr,
+kuwa2);save(datei,takuser).END PROC kurswahlbasisholen;PROC
+ermittleersterletzter:IF bearbschueler<>2THEN erster:=1ELSE erster:=
+zeilennrzumschuelerbestand(FALSE )FI ;IF bearbschueler<>1THEN letzter:=lines(
+kuwa2)ELSE letzter:=zeilennrzumschuelerbestand(TRUE )FI END PROC
+ermittleersterletzter;PROC erweitertekurswahlbasisholen(TEXT CONST gewjgst,
+gewhj,INT VAR fehlerstatus):TEXT VAR erwschuljahr;INT VAR j;IF
+halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(server)THEN
+fehlerstatus:=2ELSE takuser:=task(server);commanddialogue(FALSE );IF int(
+gewjgst)=aktjgTHEN erwschuljahr:=sjELSE j:=int(gewjgst)-aktjg;erwschuljahr:=
+konvsjteil(text(sj,2),j)+konvsjteil(subtext(sj,3),j);FI ;fehlerstatus:=0;
+datei:=kurswahl2+gewjgst+" "+gewhj+"."+erwschuljahr;IF exists(datei,takuser)
+THEN holkuwa3dateiundkoppleanELSE erstellekuwa3dateiFI ;commanddialogue(TRUE
+)FI .holkuwa3dateiundkopplean:fetch(datei,takuser);kuwa3:=sequentialfile(
+modify,old(datei)).erstellekuwa3datei:plblvorhanden:=FALSE ;kuwa2eintrag:=
+FALSE ;kurswahleinerjgstaufbereiten(gewjgst,gewhj,erwschuljahr,kuwa3).END
+PROC erweitertekurswahlbasisholen;PROC kurswahl0holen(INT VAR fehlerstatus):
+IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(server)THEN
+fehlerstatus:=2ELSE takuser:=task(server);datei:=datenraumname(kurswahl0);IF
+exists(datei,takuser)THEN commanddialogue(FALSE );fetch(datei,takuser);
+commanddialogue(TRUE );kuwa0:=sequentialfile(modify,old(datei));fehlerstatus
+:=0ELSE fehlerstatus:=3FI ;FI .END PROC kurswahl0holen;PROC kurswahl1holen(
+INT VAR fehlerstatus):IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT
+existstask(server)THEN fehlerstatus:=2ELSE takuser:=task(server);datei:=
+datenraumname(kurswahl1);IF exists(datei,takuser)THEN commanddialogue(FALSE )
+;fetch(datei,takuser);commanddialogue(TRUE );kuwa1:=sequentialfile(modify,old
+(datei));fehlerstatus:=0ELSE fehlerstatus:=3FI ;FI .END PROC kurswahl1holen;
+PROC kurswahl2holen(INT VAR fehlerstatus):IF halbjahrnichtgesetztTHEN
+fehlerstatus:=1ELIF NOT existstask(server)THEN fehlerstatus:=2ELSE takuser:=
+task(server);datei:=datenraumname(kurswahl2);IF exists(datei,takuser)THEN
+commanddialogue(FALSE );fetch(datei,takuser);commanddialogue(TRUE );kuwa2:=
+sequentialfile(modify,old(datei));ermittleersterletzter;fehlerstatus:=0ELSE
+fehlerstatus:=3FI ;FI END PROC kurswahl2holen;PROC kurswahl0sichern(INT VAR
+fehlerstatus):kurswahl02sichern(kurswahl0,fehlerstatus)END PROC
+kurswahl0sichern;PROC kurswahl1sichern(INT VAR fehlerstatus):
+kurswahldatenraumsichern(kurswahl1,fehlerstatus)END PROC kurswahl1sichern;
+PROC kurswahl2sichern(INT VAR fehlerstatus):kurswahl02sichern(kurswahl2,
+fehlerstatus)END PROC kurswahl2sichern;PROC kurswahl02sichern(TEXT CONST
+welchen,INT VAR fehlerstatus):INT VAR aktfeld:=infeld;datei:=datenraumname(
+welchen);IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(
+server)THEN fehlerstatus:=2ELIF NOT exists(datei)THEN fehlerstatus:=4ELSE
+takuser:=task(server);IF exists(datei,takuser)THEN commanddialogue(FALSE );
+save(datei,takuser);commanddialogue(TRUE );fehlerstatus:=0ELSE
+standardmeldung(meldungneuebasis,"");forget(datei,quiet);IF welchen=kurswahl2
+THEN bereitek2datenraumaufELSE bereitek0datenraumaufFI ;commanddialogue(
+FALSE );save(datei,takuser);commanddialogue(TRUE );fehlerstatus:=0;infeld(1);
+standardfelderausgeben;infeld(aktfeld)FI FI .bereitek0datenraumauf:IF
+hjzukuenftigTHEN kuwa0:=sequentialfile(modify,datei);insertrecord(kuwa0)ELSE
+kursdatenholen;IF lines(kuwa0)=0THEN insertrecord(kuwa0)FI FI .
+bereitek2datenraumauf:kuwa2eintrag:=TRUE ;kurswahleinerjgstaufbereiten(jgst,
+halbjahr,schuljahr,kuwa2).END PROC kurswahl02sichern;PROC
+kurswahldatenraumsichern(TEXT CONST welchen,INT VAR fehlerstatus):datei:=
+datenraumname(welchen);IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT
+existstask(server)THEN fehlerstatus:=2ELIF NOT exists(datei)THEN fehlerstatus
+:=4ELSE takuser:=task(server);commanddialogue(FALSE );save(datei,takuser);
+commanddialogue(TRUE );fehlerstatus:=0FI END PROC kurswahldatenraumsichern;
+BOOL PROC kurswahldatenvorhanden:INT VAR i;dbstatus(1);IF
+halbjahrnichtgesetztTHEN FALSE ELSE datei:=datenraumname(kurswahl2);IF exists
+(datei)THEN ueberpruefwahldatenvorhandenELSE FALSE FI FI .
+ueberpruefwahldatenvorhanden:dbstatus(0);toline(kuwa2,erster);col(kuwa2,1);
+FOR iFROM ersterUPTO letzterREP readrecord(kuwa2,eintrag);IF (eintragSUB 1)<>
+trennerTHEN LEAVE ueberpruefwahldatenvorhandenWITH TRUE FI ;down(kuwa2);PER ;
+FALSE .END PROC kurswahldatenvorhanden;PROC kurswahlsperresetzen(TEXT CONST
+was,BOOL VAR ok):IF halbjahrnichtgesetztTHEN ok:=FALSE ELIF NOT existstask(
+server)THEN ok:=FALSE ELSE takuser:=task(server);datei:=
+gesperrterdatenraumname(was);IF exists(datei,takuser)THEN ok:=FALSE ELSE
+commanddialogue(FALSE );forget(datei,quiet);copy(datenraumname(was),datei);
+save(datei,takuser);forget(datei,quiet);commanddialogue(TRUE );ok:=TRUE FI ;
+FI END PROC kurswahlsperresetzen;PROC kurswahlsperrebeenden(TEXT CONST was):
+IF NOT halbjahrnichtgesetztAND existstask(server)THEN takuser:=task(server);
+datei:=gesperrterdatenraumname(was);commanddialogue(FALSE );erase(datei,
+takuser);commanddialogue(TRUE );FI END PROC kurswahlsperrebeenden;PROC
+kurseintragen(TEXT CONST fach,kennung,wstd,art):dbstatus(1);IF
+halbjahrnichtgesetztTHEN LEAVE kurseintragenELIF fach=""COR kennung=""COR
+wstd=""COR art=""THEN LEAVE kurseintragenFI ;fa1:=text(fach,laengefach);ke1:=
+text(kennung,laengekennung);ws:=text(wstd,laengewstd);ar:=text(art,laengeart)
+;IF kurseingetragen(fa1+ke1)THEN LEAVE kurseintragenFI ;toline(kuwa0,lines(
+kuwa0));insertrecord(kuwa0);writerecord(kuwa0,fa1+ke1+ws+ar);IF hjaktgepl
+THEN tragindbeinELSE dbstatus(0)FI .tragindbein:inittupel(
+dnrlehrveranstaltungen);putwert(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);
+putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,fa1+compress(ke1));
+putintwert(fnrlvwochenstd,int(wstd));putwert(fnrlvart,compress(art));insert(
+dnrlehrveranstaltungen).END PROC kurseintragen;PROC kursloeschen(TEXT CONST
+fach,kennung):IF halbjahrnichtgesetztTHEN dbstatus(1);LEAVE kursloeschenFI ;
+fa1:=text(fach,laengefach);ke1:=text(kennung,laengekennung);IF
+kurseingetragen(fa1+ke1)THEN IF hjaktgeplTHEN aenderindbFI ;deleterecord(
+kuwa0);aenderkursinkuwa1(fa1+ke1,"")ELSE dbstatus(1)FI .aenderindb:inittupel(
+dnrlehrveranstaltungen);putwert(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);
+putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,fa1+compress(ke1));search(
+dnrlehrveranstaltungen,TRUE );IF dbstatus=0THEN delete(dnrlehrveranstaltungen
+)ELSE dbstatus(1);LEAVE kursloeschenFI .END PROC kursloeschen;PROC
+planblockeintragen(TEXT CONST anwblockbez,stunden):TEXT VAR blockbez:=
+formbezeichner(anwblockbez),blocknr:=text(blockbez,2),teilkennung:=blockbez
+SUB 3;INT VAR j:=int(blocknr)*3-2;dbstatus(1);IF halbjahrnichtgesetztTHEN
+LEAVE planblockeintragenELIF j>0CAND j<=maxkuwa1zeilenTHEN IF teilkennung=
+kennungtplbl1THEN jINCR 1ELIF teilkennung=kennungtplbl2THEN jINCR 2ELIF
+teilkennung<>""CAND teilkennung<>" "THEN LEAVE planblockeintragenFI ;toline(
+kuwa1,j);readrecord(kuwa1,eintrag);IF eintrag=""THEN writerecord(kuwa1,text(
+blockbez,3)+text(stunden,1))ELSE writerecord(kuwa1,text(eintrag,3)+text(
+stunden,1)+subtext(eintrag,5))FI ;dbstatus(0)FI END PROC planblockeintragen;
+PROC planblockteilen(TEXT CONST blocknr,wstd1,wstd2):INT VAR j:=int(blocknr)*
+3-2;dbstatus(1);IF halbjahrnichtgesetztCOR (compress(blocknrSUB 3))<>""THEN
+LEAVE planblockteilenFI ;IF j>0CAND j<=maxkuwa1zeilenTHEN toline(kuwa1,j+1);
+readrecord(kuwa1,eintrag);IF eintrag=""THEN up(kuwa1);readrecord(kuwa1,
+eintrag);IF eintrag<>""THEN teileplanblockFI FI ;FI .teileplanblock:dbstatus(
+0);writerecord(kuwa1,text(eintrag,4));down(kuwa1);writerecord(kuwa1,text(
+eintrag,2)+kennungtplbl1+wstd1+subtext(eintrag,5));down(kuwa1);writerecord(
+kuwa1,text(eintrag,2)+kennungtplbl2+wstd2+subtext(eintrag,5)).END PROC
+planblockteilen;PROC planblockloeschen(TEXT CONST anwblockbez):TEXT VAR
+blockbez:=formbezeichner(anwblockbez),blocknr:=text(blockbez,2),teilkennung:=
+blockbezSUB 3;INT VAR j:=int(blocknr)*3-2;BOOL VAR pruefteilbloecke:=FALSE ;
+dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE planblockloeschenFI ;IF
+teilkennung=kennungtplbl1THEN jINCR 1ELIF teilkennung=kennungtplbl2THEN j
+INCR 2ELSE pruefteilbloecke:=TRUE FI ;IF j>0CAND j<=maxkuwa1zeilenTHEN toline
+(kuwa1,j);IF pruefteilbloeckeTHEN down(kuwa1,2);readrecord(kuwa1,eintrag);IF
+eintrag<>""THEN LEAVE planblockloeschenELSE up(kuwa1);readrecord(kuwa1,
+eintrag);IF eintrag<>""THEN LEAVE planblockloeschenELSE up(kuwa1)FI ;FI ;FI ;
+writerecord(kuwa1,"");dbstatus(0)FI .END PROC planblockloeschen;PROC
+planbloeckeinitialisieren:TEXT VAR datei:=datenraumname(kurswahl1);INT VAR j;
+IF halbjahrnichtgesetztCOR NOT existstask(server)THEN dbstatus(1)ELSE takuser
+:=task(server);erstellekuwa1dateiFI .erstellekuwa1datei:forget(datei,quiet);
+kuwa1:=sequentialfile(modify,datei);FOR jFROM 1UPTO maxkuwa1zeilenREP
+insertrecord(kuwa1)PER ;dbstatus(0);commanddialogue(FALSE );save(datei,
+takuser);commanddialogue(TRUE ).END PROC planbloeckeinitialisieren;PROC
+planbloeckezumkurseintragen(TEXT CONST anwkurs,anwblockbez1,anwblockbez2):
+TEXT VAR kurs:=text(anwkurs,laengekurs),blockbez1:=formbezeichner(
+anwblockbez1),blockbez2:=formbezeichner(anwblockbez2);dbstatus(1);IF
+halbjahrnichtgesetztTHEN LEAVE planbloeckezumkurseintragenFI ;IF blockbez1<>
+""COR blockbez2<>""THEN IF NOT kurseingetragen(kurs)THEN LEAVE
+planbloeckezumkurseintragenFI FI ;IF compress(blockbez1)<>""THEN IF NOT
+blockeingetragen(blockbez1)THEN LEAVE planbloeckezumkurseintragenFI ;FI ;IF
+compress(blockbez2)<>""THEN IF NOT blockeingetragen(blockbez2)THEN LEAVE
+planbloeckezumkurseintragenFI ;FI ;loescheplanbloeckezukurs(kurs);IF
+blockeingetragen(blockbez1)THEN tragkurseinFI ;IF blockeingetragen(blockbez2)
+THEN tragkurseinFI ;dbstatus(0).tragkursein:readrecord(kuwa1,eintrag);eintrag
+CAT kurs;writerecord(kuwa1,eintrag).END PROC planbloeckezumkurseintragen;
+PROC loescheplanbloeckezukurs(TEXT CONST kurs):TEXT VAR bloecke:=planbloecke(
+kurs);IF bloecke<>leereplanbloeckeTHEN aenderkursinkuwa1(kurs,"")FI .END
+PROC loescheplanbloeckezukurs;INT PROC planblockzeilennr(TEXT CONST
+anwblockbez):TEXT VAR blockbez:=formbezeichner(anwblockbez);IF
+blockeingetragen(blockbez)THEN lineno(kuwa1)ELSE 0FI END PROC
+planblockzeilennr;PROC schuelerwahleintragen(TEXT CONST famname,rufname,
+gebdatum,wahl):TEXT VAR schueler:=trenner+famname+trenner+rufname+trenner+
+gebdatum,wahldaten:=wahl;dbstatus(1);IF halbjahrnichtgesetztCOR length(
+wahldaten)MOD laengekurseintrag<>0THEN LEAVE schuelerwahleintragenFI ;IF
+schuelereingetragen(schueler,kuwa2)THEN readrecord(kuwa2,eintrag);hjd1:=
+wahldaten;hjdateneintragen(famname,rufname,gebdatum,1);IF dbstatus=0THEN
+schreibeintragFI ;FI .schreibeintrag:writerecord(kuwa2,wahldaten+subtext(
+eintrag,pos(eintrag,trenner))).END PROC schuelerwahleintragen;PROC
+schuelerwahleintragen(TEXT CONST famname,rufname,gebdatum,fach,kennung,art,
+klausur):TEXT VAR schueler:=trenner+famname+trenner+rufname+trenner+gebdatum,
+kurse;INT VAR aktpos;dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE
+schuelerwahleintragenFI ;fa1:=text(fach,laengefach);ke1:=text(kennung,
+laengekennung);ar:=text(art,laengeart);kl:=text(klausur,laengeklausur);IF
+schuelereingetragen(schueler,kuwa2)THEN readrecord(kuwa2,eintrag);hjd1:=fa1;
+hjd2:=ke1;hjd3:=ar;hjd4:=kl;hjdateneintragen(famname,rufname,gebdatum,2);IF
+dbstatus=0THEN schreibeintragFI FI .schreibeintrag:pruefanzkurse;IF ke1=
+leerekennungTHEN tragfachwahleinELSE tragkurswahleinFI .pruefanzkurse:aktpos
+:=pos(eintrag,trenner);kurse:=text(eintrag,aktpos-1);IF length(kurse)=195
+THEN LEAVE schuelerwahleintragenFI .tragfachwahlein:IF nichteingetragen(
+eintrag,ar+fa1,2,aktpos)THEN IF ke1<>leerekennungTHEN writerecord(kuwa2,kl+ar
++fa1+ke1+planbloecke(fa1+ke1)+eintrag)ELSE writerecord(kuwa2,kl+ar+fa1+ke1+
+leereplanbloecke+eintrag)FI ;FI .tragkurswahlein:IF nichteingetragen(eintrag,
+fa1+ke1,4,aktpos)THEN writerecord(kuwa2,kl+ar+fa1+ke1+planbloecke(fa1+ke1)+
+eintrag)FI .END PROC schuelerwahleintragen;PROC schuelerwahlaendern(TEXT
+CONST famname,rufname,gebdatum,fachalt,kennungalt,artalt,fachneu,kennungneu,
+artneu,klausur):TEXT VAR schueler:=trenner+famname+trenner+rufname+trenner+
+gebdatum,neuereintrag,aralt,compke,compart;INT VAR aktpos,kurspos;dbstatus(1)
+;IF halbjahrnichtgesetztTHEN LEAVE schuelerwahlaendernFI ;
+faartschoneingetragen:=FALSE ;fakeschoneingetragen:=FALSE ;fa1:=text(fachalt,
+laengefach);ke1:=text(kennungalt,laengekennung);aralt:=text(artalt,laengeart)
+;fa2:=text(fachneu,laengefach);ke2:=text(kennungneu,laengekennung);ar:=text(
+artneu,laengeart);kl:=text(klausur,laengeklausur);IF schuelereingetragen(
+schueler,kuwa2)THEN pruefundtragein;hjd1:=fa1;hjd2:=ke1;hjd3:=fa2;hjd4:=ke2;
+hjd5:=ar;hjd6:=kl;hjd7:=aralt;hjdateneintragen(famname,rufname,gebdatum,3);
+IF dbstatus=0THEN aendereintragFI FI .pruefundtragein:readrecord(kuwa2,
+eintrag);IF fachalt=""THEN LEAVE schuelerwahlaendernFI ;IF kennungalt<>""
+THEN IF nichteingetragen(eintrag,fa1+ke1,4,aktpos)THEN LEAVE
+schuelerwahlaendernFI ELIF artalt=""THEN LEAVE schuelerwahlaendernELIF
+nichteingetragen(eintrag,aralt+fa1,2,aktpos)THEN LEAVE schuelerwahlaendernFI
+;IF fachneu=""THEN eintragloeschen:=TRUE ;eintrag:=text(eintrag,aktpos-1)+
+subtext(eintrag,aktpos+laengekurseintrag)ELSE eintragloeschen:=FALSE ;compke
+:=compress(kennungneu);compart:=compress(artneu);IF compke=""CAND compart=""
+THEN LEAVE schuelerwahlaendernELIF compke<>""THEN IF NOT nichteingetragen(
+eintrag,fa2+ke2,4,kurspos)THEN fakeschoneingetragen:=TRUE FI ELIF compart<>""
+THEN IF NOT nichteingetragen(eintrag,ar+fa2,2,kurspos)THEN
+faartschoneingetragen:=TRUE FI FI ;loeschundtrageinFI .aendereintrag:
+writerecord(kuwa2,eintrag).loeschundtragein:neuereintrag:=kl;neuereintragCAT
+ar;neuereintragCAT fa2;neuereintragCAT ke2;IF (fa1+ke1)<>(fa2+ke2)THEN
+neuereintragCAT planbloecke(fa2+ke2)ELSE neuereintragCAT subtext(eintrag,
+aktpos+9,aktpos+14)FI ;IF faartschoneingetragenCOR fakeschoneingetragenTHEN
+ueberschreibneuenkursmitneuenwertenELSE substituieraltenkursmitneuemkursFI .
+substituieraltenkursmitneuemkurs:eintrag:=text(eintrag,aktpos-1)+neuereintrag
++subtext(eintrag,aktpos+laengekurseintrag).
+ueberschreibneuenkursmitneuenwerten:eintrag:=text(eintrag,kurspos-1)+
+neuereintrag+subtext(eintrag,kurspos+laengekurseintrag);IF aktpos<>kurspos
+THEN eintrag:=text(eintrag,aktpos-1)+subtext(eintrag,aktpos+laengekurseintrag
+)FI .END PROC schuelerwahlaendern;PROC hjdateneintragen(TEXT CONST famname,
+rufname,gebdatum,INT CONST aktion):INT VAR iii,iiii;TEXT VAR wahlteil,
+tutoreintrag;TEXT VAR t1,t2,t3,t4;SELECT aktionOF CASE 1:
+hjdatenersetzenoderanlegenCASE 2:hjdatenergaenzenoderanlegenCASE 3:
+hjdatensubstituierenEND SELECT .hjdatenersetzenoderanlegen:suchhjdaten(
+famname,rufname,gebdatum);IF dbstatus<>0THEN IF schuelerindbTHEN
+erstellhjdatensatz;IF schuljahr=aktsjCAND halbjahr=akthjCAND dbstatus=0THEN
+schreibtidinsudatenFI FI ELSE aenderehjdatensatzFI .aenderehjdatensatz:
+tragwahldatenein;putwert(fnrhjdfach,t1);putwert(fnrhjdkursart,t3);putwert(
+fnrhjdlerngrpkenn,t2);putwert(fnrhjdklausurteiln,t4);update(
+dnrhalbjahresdaten).erstellhjdatensatz:inittupel(dnrhalbjahresdaten);putwert(
+fnrhjdfamnames,famname);putwert(fnrhjdrufnames,rufname);putwert(fnrhjdgebdats
+,gebdatum);putwert(fnrhjdjgst,jgst);putwert(fnrhjdsj,schuljahr);putwert(
+fnrhjdhj,halbjahr);tragwahldatenein;IF schuljahr=aktsjCAND halbjahr=akthj
+THEN putwert(fnrhjdkennung,tutoreintrag)FI ;putwert(fnrhjdfach,t1);putwert(
+fnrhjdkursart,t3);putwert(fnrhjdlerngrpkenn,t2);putwert(fnrhjdklausurteiln,t4
+);insert(dnrhalbjahresdaten);IF dbstatus<>0THEN LEAVE hjdateneintragenELSE
+hjdtid:=gettidFI .schuelerindb:parsenooffields(7);inittupel(dnrschueler);
+putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);putwert(
+fnrsugebdatums,gebdatum);search(dnrschueler,TRUE );IF schuljahr=aktsjCAND
+halbjahr=akthjCAND dbstatus=0THEN tutoreintrag:=wert(fnrsusgrpzugtut)FI ;
+reinitparsing;dbstatus=0.tragwahldatenein:t1:="";t2:="";t3:="";t4:="";FOR iii
+FROM 1UPTO length(hjd1)DIV 15REP wahlteil:=subtext(hjd1,(iii-1)*15+1,iii*15);
+t1CAT subtext(wahlteil,4,5);t2CAT subtext(wahlteil,6,9);t3CAT subtext(
+wahlteil,2,3);t4CAT (wahlteilSUB 1)PER .schreibtidinsudaten:inittupel(
+dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);
+putwert(fnrsugebdatums,gebdatum);search(dnrschueler,TRUE );IF dbstatus=0THEN
+putwert(fnrsutidakthjd,hjdtid);selupdate(dnrschueler)FI .
+hjdatenergaenzenoderanlegen:suchhjdaten(famname,rufname,gebdatum);IF dbstatus
+<>0THEN IF schuelerindbTHEN generierhjdatensatz;IF schuljahr=aktsjCAND
+halbjahr=akthjCAND dbstatus=0THEN schreibtidinsudatenFI FI ELSE
+ergaenzehjdatensatzFI .ergaenzehjdatensatz:t1:=wert(fnrhjdfach);IF length(t1)
+=26THEN dbstatus(1);LEAVE hjdateneintragenELSE t3:=wert(fnrhjdkursart);t2:=
+wert(fnrhjdlerngrpkenn);t4:=wert(fnrhjdklausurteiln)FI ;t1CAT hjd1;t2CAT hjd2
+;t3CAT hjd3;t4CAT hjd4;putwert(fnrhjdfach,t1);putwert(fnrhjdkursart,t3);
+putwert(fnrhjdlerngrpkenn,t2);putwert(fnrhjdklausurteiln,t4);update(
+dnrhalbjahresdaten);IF dbstatus<>0THEN LEAVE hjdateneintragenFI .
+generierhjdatensatz:inittupel(dnrhalbjahresdaten);putwert(fnrhjdfamnames,
+famname);putwert(fnrhjdrufnames,rufname);putwert(fnrhjdgebdats,gebdatum);
+putwert(fnrhjdjgst,jgst);IF schuljahr=aktsjCAND halbjahr=akthjTHEN putwert(
+fnrhjdkennung,tutoreintrag)FI ;putwert(fnrhjdsj,schuljahr);putwert(fnrhjdhj,
+halbjahr);putwert(fnrhjdfach,hjd1);putwert(fnrhjdkursart,hjd3);putwert(
+fnrhjdlerngrpkenn,hjd2);putwert(fnrhjdklausurteiln,hjd4);insert(
+dnrhalbjahresdaten);IF dbstatus<>0THEN LEAVE hjdateneintragenFI ;hjdtid:=
+gettid.hjdatensubstituieren:suchhjdaten(famname,rufname,gebdatum);IF dbstatus
+<>0THEN dbstatus(1);LEAVE hjdateneintragenELSE substituierehjdatensatzFI .
+substituierehjdatensatz:t2:=wert(fnrhjdkursart);t3:=wert(fnrhjdlerngrpkenn);
+t4:=wert(fnrhjdklausurteiln);setzeuebergebenewerte;schreibgeaendertensatz.
+schreibgeaendertensatz:putwert(fnrhjdfach,t1);putwert(fnrhjdkursart,t2);
+putwert(fnrhjdlerngrpkenn,t3);putwert(fnrhjdklausurteiln,t4);update(
+dnrhalbjahresdaten).setzeuebergebenewerte:t1:=wert(fnrhjdfach);
+suchrichtigefachposition;IF eintragloeschenTHEN alteneintragloeschenELIF
+faartschoneingetragenCOR fakeschoneingetragenTHEN eintragaktualisieren;IF iii
+<>iiiiTHEN alteneintragloeschenFI ELSE alteneintragueberschreibenFI .
+eintragaktualisieren:suchschonvorhandeneneintrag;IF faartschoneingetragen
+THEN t3:=text(t3,iiii*2-2)+hjd4+subtext(t3,iiii*2+3)ELSE t2:=text(t2,iiii-1)+
+hjd5+subtext(t2,iiii+2)FI ;t4:=text(t4,(iiii+1)DIV 2-1)+hjd6+subtext(t4,(iiii
++1)DIV 2+1).alteneintragloeschen:t1:=text(t1,iii-1)+subtext(t1,iii+2);t2:=
+text(t2,iii-1)+subtext(t2,iii+2);t3:=text(t3,iii*2-2)+subtext(t3,iii*2+3);t4
+:=text(t4,(iii+1)DIV 2-1)+subtext(t4,(iii+1)DIV 2+1).
+alteneintragueberschreiben:IF hjd1<>hjd3THEN t1:=text(t1,iii-1)+hjd3+subtext(
+t1,iii+2)FI ;IF hjd2<>hjd4THEN t3:=text(t3,iii*2-2)+hjd4+subtext(t3,iii*2+3)
+FI ;IF hjd5<>hjd7THEN t2:=text(t2,iii-1)+hjd5+subtext(t2,iii+2)FI ;t4:=text(
+t4,(iii+1)DIV 2-1)+hjd6+subtext(t4,(iii+1)DIV 2+1).suchrichtigefachposition:
+iii:=1;WHILE iii<>0REP iii:=pos(t1,hjd1,iii);IF iii=0THEN dbstatus(1);LEAVE
+hjdateneintragenELSE pruefzugehoerigewerteFI ;iiiINCR 1PER ;dbstatus(1);
+LEAVE hjdateneintragen.pruefzugehoerigewerte:IF (iiiMOD 2)=1THEN IF compress(
+hjd2)<>""THEN pruefkennungELIF compress(hjd7)<>""THEN pruefartFI FI .
+pruefkennung:IF subtext(t3,iii*2-1,iii*2+2)=hjd2THEN LEAVE
+suchrichtigefachpositionFI .pruefart:IF subtext(t2,iii,iii+1)=hjd7THEN LEAVE
+suchrichtigefachpositionFI .suchschonvorhandeneneintrag:iiii:=1;WHILE iiii<>0
+REP iiii:=pos(t1,hjd3,iiii);IF iiii=0THEN dbstatus(1);LEAVE hjdateneintragen
+ELSE pruefweiterewerteFI ;iiiiINCR 1PER ;dbstatus(1);LEAVE hjdateneintragen.
+pruefweiterewerte:IF (iiiiMOD 2)=1THEN IF faartschoneingetragenTHEN IF
+subtext(t2,iiii,iiii+1)=hjd5THEN LEAVE suchschonvorhandeneneintragFI ELIF
+fakeschoneingetragenTHEN IF subtext(t3,iiii*2-1,iiii*2+2)=hjd4THEN LEAVE
+suchschonvorhandeneneintragFI FI FI .END PROC hjdateneintragen;TEXT PROC
+aktsj:IF aktschuljahr="0000"THEN aktschuljahr:=schulkenndatum("Schuljahr");
+FI ;aktschuljahrEND PROC aktsj;TEXT PROC akthj:IF akthalbjahr="0"THEN
+akthalbjahr:=schulkenndatum("Schulhalbjahr");FI ;akthalbjahrEND PROC akthj;
+PROC suchhjdaten(TEXT CONST famname,rufname,gebdatum):inittupel(
+dnrhalbjahresdaten);putwert(fnrhjdfamnames,famname);putwert(fnrhjdrufnames,
+rufname);putwert(fnrhjdgebdats,gebdatum);putwert(fnrhjdsj,schuljahr);putwert(
+fnrhjdhj,halbjahr);search(dnrhalbjahresdaten,TRUE )END PROC suchhjdaten;INT
+PROC ersterschueler:ersterEND PROC ersterschueler;INT PROC letzterschueler:
+letzterEND PROC letzterschueler;TEXT PROC wahldatenzumindex(INT CONST
+zeilennr,TEXT CONST kennung):INT VAR trennerpos;dbstatus(1);IF
+halbjahrnichtgesetztTHEN LEAVE wahldatenzumindexWITH ""ELIF zeilennr<erster
+COR zeilennr>letzterTHEN LEAVE wahldatenzumindexWITH ""FI ;toline(kuwa2,
+zeilennr);col(kuwa2,1);readrecord(kuwa2,eintrag);IF kennung=kznameCOR kennung
+=kzkurseCOR kennung=kzartTHEN dbstatus(0);trennerpos:=pos(eintrag,trenner);
+IF kennung=kznameTHEN subtext(eintrag,trennerpos+1,length(eintrag)-3)ELIF
+kennung=kzkurseTHEN text(eintrag,trennerpos-1)ELSE eintragFI ELSE ""FI END
+PROC wahldatenzumindex;TEXT PROC wahldatenzumschueler(TEXT CONST famname,
+rufname,gebdatum,kennung):TEXT VAR schueler:=trenner+famname+trenner+rufname+
+trenner+gebdatum;dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE
+wahldatenzumschuelerWITH ""FI ;IF schuelereingetragen(schueler,kuwa2)THEN
+readrecord(kuwa2,eintrag);IF kennung="F"COR kennung="A"COR kennung="FA"COR
+kennung="FAk"COR kennung="FK"COR kennung="FKk"COR kennung="FKAk"COR kennung=
+"FP"THEN dbstatus(0);alledaten(eintrag,kennung)ELSE ""FI ELSE ""FI END PROC
+wahldatenzumschueler;TEXT PROC weiterewahldatenzumschueler(TEXT CONST famname
+,rufname,gebdatum,kennung):TEXT VAR schueler:=trenner+famname+trenner+rufname
++trenner+gebdatum;dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE
+weiterewahldatenzumschuelerWITH ""FI ;IF schuelereingetragen(schueler,kuwa3)
+THEN readrecord(kuwa3,eintrag);IF kennung="F"COR kennung="A"COR kennung="FA"
+COR kennung="FAk"COR kennung="FK"COR kennung="FKk"COR kennung="FKAk"THEN
+dbstatus(0);alledaten(eintrag,kennung)ELSE ""FI ELSE ""FI END PROC
+weiterewahldatenzumschueler;TEXT PROC kursdaten(TEXT CONST anwkurs,kennung):
+TEXT VAR ausgabe:="",kurs:=text(anwkurs,laengekurs);dbstatus(1);IF
+halbjahrnichtgesetztTHEN LEAVE kursdatenWITH ""FI ;IF kurseingetragen(kurs)
+THEN readrecord(kuwa0,eintrag);IF kennung=kzartTHEN ausgabe:=subtext(eintrag,
+9);dbstatus(0)ELIF kennung=kzstdTHEN ausgabe:=subtext(eintrag,7,8);dbstatus(0
+)ELIF kennung=kzplanblTHEN ausgabe:=planbloecke(kurs);dbstatus(0)FI FI ;
+ausgabeEND PROC kursdaten;TEXT PROC allekurse:TEXT VAR ausgabe:="";IF
+halbjahrnichtgesetztTHEN dbstatus(1);LEAVE allekurseWITH ""ELSE dbstatus(0)
+FI ;col(kuwa0,1);toline(kuwa0,1);WHILE NOT eof(kuwa0)REP readrecord(kuwa0,
+eintrag);IF eintrag<>""THEN ausgabeCAT eintragFI ;down(kuwa0)PER ;ausgabeEND
+PROC allekurse;TEXT PROC alleplanblockbezeichner:TEXT VAR ausgabe:="";IF
+halbjahrnichtgesetztTHEN dbstatus(1);LEAVE alleplanblockbezeichnerWITH ""
+ELSE dbstatus(0)FI ;col(kuwa1,1);toline(kuwa1,1);WHILE NOT eof(kuwa1)REP
+readrecord(kuwa1,eintrag);IF eintrag<>""THEN ausgabeCAT text(eintrag,
+laengeblock)FI ;down(kuwa1)PER ;ausgabeEND PROC alleplanblockbezeichner;TEXT
+PROC planblockdaten(TEXT CONST anwblockbez,kennung):TEXT VAR blockbez:=
+formbezeichner(anwblockbez);IF halbjahrnichtgesetztCOR NOT blockeingetragen(
+blockbez)THEN dbstatus(1);LEAVE planblockdatenWITH ""FI ;readrecord(kuwa1,
+eintrag);IF kennung=kzstdTHEN dbstatus(0);eintragSUB 4ELIF kennung=kzkurse
+THEN dbstatus(0);subtext(eintrag,5)ELSE ""FI END PROC planblockdaten;PROC
+kurszumplanblockeintragen(TEXT CONST anwkurs,anwblockbez):TEXT VAR blockbez:=
+formbezeichner(anwblockbez);TEXT CONST kurs:=text(anwkurs,laengekurs);IF
+halbjahrnichtgesetztCOR NOT blockeingetragen(blockbez)THEN dbstatus(1);LEAVE
+kurszumplanblockeintragenFI ;readrecord(kuwa1,eintrag);IF length(eintrag)>
+laengeblockwstdTHEN IF wertnichteingetragen(subtext(eintrag,laengeblockwstd+1
+),kurs,1)THEN eintragCAT text(kurs,laengekurs);writerecord(kuwa1,eintrag)FI
+ELSE eintragCAT text(kurs,laengekurs);writerecord(kuwa1,eintrag)FI ;dbstatus(
+0)END PROC kurszumplanblockeintragen;INT PROC anzahlschuelermitwahl(TEXT
+CONST fach,kennung,art,klausur):IF halbjahrnichtgesetztTHEN dbstatus(1);
+LEAVE anzahlschuelermitwahlWITH 0FI ;fa1:=text(fach,laengefach);ke1:=text(
+kennung,laengekennung);ar:=text(art,laengeart);dbstatus(0);IF fach=""THEN
+dbstatus(1);-1ELIF kennung=""CAND art=""CAND klausur=""THEN anzahlschueler(
+fa1,"",4)ELIF kennung=""CAND art=""THEN anzahlschueler(fa1,klausur,4)ELIF
+kennung<>""CAND art=""CAND klausur=""THEN anzahlschueler(fa1+ke1,"",4)ELIF
+kennung<>""CAND art=""THEN anzahlschueler(fa1+ke1,klausur,4)ELIF kennung=""
+CAND art<>""CAND klausur=""THEN anzahlschueler(ar+fa1,"",2)ELIF kennung=""
+CAND art<>""THEN anzahlschueler(klausur+ar+fa1,"",1)ELIF klausur=""THEN
+anzahlschueler(ar+fa1+ke1,"",2)ELSE anzahlschueler(klausur+ar+fa1+ke1,"",1)
+FI END PROC anzahlschuelermitwahl;INT PROC anzahlschuelermitwahl(TEXT CONST
+fach,kennung,art,klausur,fach2,kennung2,art2,klausur2):TEXT VAR p1,p3,p4,p6,
+ar1,ar2;INT VAR p2,p5;fa1:=text(fach,laengefach);fa2:=text(fach2,laengefach);
+ke1:=text(kennung,laengekennung);ke2:=text(kennung2,laengekennung);ar1:=text(
+art,laengeart);ar2:=text(art2,laengeart);IF halbjahrnichtgesetztCOR (fa1=fa2
+CAND kennung=kennung2CAND art=art2)THEN dbstatus(1);LEAVE
+anzahlschuelermitwahlWITH 0FI ;pruefwahl.pruefwahl:dbstatus(0);IF fach=""
+THEN dbstatus(1);LEAVE anzahlschuelermitwahlWITH -1ELIF kennung=""CAND art=""
+CAND klausur=""THEN p1:=fa1;p2:=4;p3:=""ELIF kennung=""CAND art=""THEN p1:=
+fa1;p2:=4;p3:=klausurELIF kennung<>""CAND art=""CAND klausur=""THEN p1:=fa1+
+ke1;p2:=4;p3:=""ELIF kennung<>""CAND art=""THEN p1:=fa1+ke1;p2:=4;p3:=klausur
+ELIF kennung=""CAND art<>""CAND klausur=""THEN p1:=ar1+fa1;p2:=2;p3:="";ELIF
+kennung=""CAND art<>""THEN p1:=klausur+ar1+fa1;p2:=1;p3:=""ELIF klausur=""
+THEN p1:=ar1+fa1+ke1;p2:=2;p3:=""ELSE p1:=klausur+ar1+fa1+ke1;p2:=1;p3:=""FI
+;IF fach2=""THEN LEAVE anzahlschuelermitwahlWITH anzahlschueler(p1,p3,p2)
+ELIF kennung2=""CAND art2=""CAND klausur2=""THEN p4:=fa2;p5:=4;p6:=""ELIF
+kennung2=""CAND art2=""THEN p4:=fa2;p5:=4;p6:=klausur2ELIF kennung2<>""CAND
+art2=""CAND klausur2=""THEN p4:=fa2+ke2;p5:=4;p6:=""ELIF kennung2<>""CAND
+art2=""THEN p4:=fa2+ke2;p5:=4;p6:=klausur2ELIF kennung2=""CAND art2<>""CAND
+klausur2=""THEN p4:=ar2+fa2;p5:=2;p6:="";ELIF kennung2=""CAND art2<>""THEN p4
+:=klausur2+ar2+fa2;p5:=1;p6:=""ELIF klausur2=""THEN p4:=ar2+fa2+ke2;p5:=2;p6
+:=""ELSE p4:=klausur2+ar2+fa2+ke2;p5:=1;p6:=""FI ;anzahlschueler(p1,p3,p4,p6,
+p2,p5)END PROC anzahlschuelermitwahl;TEXT PROC schuelermitwahl(TEXT CONST
+fach,kennung,art,klausur):IF halbjahrnichtgesetztTHEN dbstatus(1);LEAVE
+schuelermitwahlWITH ""FI ;fa1:=text(fach,laengefach);ke1:=text(kennung,
+laengekennung);ar:=text(art,laengeart);pruefwahl.pruefwahl:dbstatus(0);IF
+fach=""THEN dbstatus(1);""ELIF kennung=""CAND art=""CAND klausur=""THEN
+schueler(fa1,"",4)ELIF kennung=""CAND art=""THEN schueler(fa1,klausur,4)ELIF
+kennung<>""CAND art=""CAND klausur=""THEN schueler(fa1+ke1,"",4)ELIF kennung
+<>""CAND art=""THEN schueler(fa1+ke1,klausur,4)ELIF kennung=""CAND art<>""
+CAND klausur=""THEN schueler(ar+fa1,"",2)ELIF kennung=""CAND art<>""THEN
+schueler(klausur+ar+fa1,"",1)ELIF klausur=""THEN schueler(ar+fa1+ke1,"",2)
+ELSE schueler(klausur+ar+fa1+ke1,"",1)FI END PROC schuelermitwahl;INT PROC
+anzahlfreierschuelerimplanblock(TEXT CONST blocknr,teilkennung,fach,kennung,
+art,klausur):TEXT VAR block:=text(blocknr,2)+text(teilkennung,1);INT VAR j:=
+int(blocknr)*3-2,anzspezschueler:=letzterschueler-ersterschueler+1,
+anzbelschueler:=0;IF halbjahrnichtgesetztCOR j<1COR j>maxkuwa1zeilenTHEN
+dbstatus(1);LEAVE anzahlfreierschuelerimplanblockWITH -1FI ;IF fach=""THEN
+anzspezschueler:=letzterschueler-ersterschueler+1ELSE anzspezschueler:=
+anzahlschuelermitwahl(fach,kennung,art,klausur)FI ;fa1:=text(fach,laengefach)
+;ke1:=text(kennung,laengekennung);ar:=text(art,laengeart);pruefwahl.pruefwahl
+:dbstatus(0);IF fach=""THEN anzbelschueler:=anzahlschueler("","",block,1)
+ELIF kennung=""CAND art=""CAND klausur=""THEN anzbelschueler:=anzahlschueler(
+fa1,"",block,4)ELIF kennung=""CAND art=""THEN anzbelschueler:=anzahlschueler(
+fa1,klausur,block,4)ELIF kennung<>""CAND art=""CAND klausur=""THEN
+anzbelschueler:=anzahlschueler(fa1+ke1,"",block,4)ELIF kennung<>""CAND art=""
+THEN anzbelschueler:=anzahlschueler(fa1+ke1,klausur,block,4)ELIF kennung=""
+CAND art<>""CAND klausur=""THEN anzbelschueler:=anzahlschueler(ar+fa1,"",
+block,2)ELIF kennung=""CAND art<>""THEN anzbelschueler:=anzahlschueler(
+klausur+ar+fa1,"",block,1)ELIF klausur=""THEN anzbelschueler:=anzahlschueler(
+ar+fa1+ke1,"",block,2)ELSE anzbelschueler:=anzahlschueler(klausur+ar+fa1+ke1,
+"",block,1)FI ;anzspezschueler-anzbelschuelerEND PROC
+anzahlfreierschuelerimplanblock;BOOL PROC schuelerinplanblock(TEXT CONST
+famname,rufname,gebdatum,blockbez):TEXT VAR schueler:=trenner+famname+trenner
++rufname+trenner+gebdatum,block:=text(blockbez,laengeblock),schuelerkurse:=""
+,aktkurs,plblkurse:=planblockdaten(block,kzkurse);INT VAR kurspos;IF
+planblockeingetragenCAND schuelereingetragen(schueler,kuwa2)CAND NOT
+halbjahrnichtgesetztTHEN dbstatus(0);schuelerkurse:=wahldatenzumschueler(
+famname,rufname,gebdatum,kzfake);IF plblkurse=""THEN FALSE ELSE
+betrachtealleschuelerkurseFI ELSE dbstatus(1);TRUE FI .planblockeingetragen:
+dbstatus=0.betrachtealleschuelerkurse:kurspos:=1;WHILE kurspos<length(
+schuelerkurse)REP aktkurs:=subtext(schuelerkurse,kurspos,kurspos+laengekurs-1
+);IF kursnichteingetragen(plblkurse,aktkurs)THEN kursposINCR laengekursELSE
+LEAVE schuelerinplanblockWITH TRUE FI PER ;FALSE .END PROC
+schuelerinplanblock;BOOL PROC kursnichteingetragen(TEXT CONST quelle,
+teilmuster):INT VAR suchab:=1,aktpos;WHILE pos(quelle,teilmuster,suchab)<>0
+REP aktpos:=pos(quelle,teilmuster,suchab);IF aktposMOD laengekurs=1THEN
+LEAVE kursnichteingetragenWITH FALSE ELSE suchab:=aktpos+1FI PER ;TRUE END
+PROC kursnichteingetragen;TEXT PROC schuelerundklausur(TEXT CONST fach,
+kennung,art):IF halbjahrnichtgesetztTHEN dbstatus(1);LEAVE schuelerundklausur
+WITH ""FI ;fa1:=text(fach,laengefach);ke1:=text(kennung,laengekennung);ar:=
+text(art,laengeart);pruefwahl.pruefwahl:dbstatus(0);IF fach=""THEN dbstatus(1
+);""ELIF kennung=""CAND art=""THEN klausurschueler(fa1,4)ELIF kennung<>""
+CAND art=""THEN klausurschueler(fa1+ke1,4)ELIF kennung=""CAND art<>""THEN
+klausurschueler(ar+fa1,2)ELSE klausurschueler(ar+fa1+ke1,2)FI END PROC
+schuelerundklausur;TEXT PROC klausurschueler(TEXT CONST suchtext,INT CONST
+findpos):INT VAR aktpos;TEXT VAR namen:="";col(kuwa2,1);toline(kuwa2,erster);
+WHILE lineno(kuwa2)<=letzterREP downety(kuwa2,suchtext);aktpos:=col(kuwa2);
+IF lineno(kuwa2)>letzterTHEN LEAVE klausurschuelerWITH namenELIF aktposMOD
+laengekurseintrag=findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(eintrag
+,trenner);IF aktpos<namenposTHEN namenCAT trenner2+(eintragSUB (aktpos-
+findpos+1));namenCAT subtext(eintrag,namenpos,length(eintrag)-3)FI FI ;col(
+kuwa2,1);down(kuwa2)PER ;namen.END PROC klausurschueler;TEXT PROC schueler(
+TEXT CONST suchtext,klausur,INT CONST findpos):INT VAR aktpos;TEXT VAR namen
+:="";col(kuwa2,1);toline(kuwa2,erster);WHILE lineno(kuwa2)<=letzterREP
+downety(kuwa2,suchtext);aktpos:=col(kuwa2);IF lineno(kuwa2)>letzterTHEN
+LEAVE schuelerWITH namenELIF aktposMOD laengekurseintrag=findposTHEN
+readrecord(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF aktpos<namenpos
+THEN IF klausur=""THEN namenCAT trenner2;namenCAT subtext(eintrag,namenpos,
+length(eintrag)-3)ELSE ueberpruefklausurFI FI FI ;col(kuwa2,1);down(kuwa2)
+PER ;namen.ueberpruefklausur:IF (eintragSUB (aktpos-findpos+1))=klausurTHEN
+namenCAT trenner2;namenCAT subtext(eintrag,pos(eintrag,trenner),length(
+eintrag)-3)FI .END PROC schueler;INT PROC anzahlschueler(TEXT CONST suchtext,
+klausur,INT CONST findpos):INT VAR anz:=0,aktpos;col(kuwa2,1);toline(kuwa2,
+erster);WHILE lineno(kuwa2)<=letzterREP downety(kuwa2,suchtext);aktpos:=col(
+kuwa2);IF lineno(kuwa2)>letzterTHEN LEAVE anzahlschuelerWITH anzELIF aktpos
+MOD laengekurseintrag=findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(
+eintrag,trenner);IF aktpos<namenposTHEN IF klausur=""THEN anzINCR 1ELSE
+ueberpruefklausurFI FI FI ;down(kuwa2);col(kuwa2,1)PER ;anz.ueberpruefklausur
+:IF (eintragSUB (aktpos-findpos+1))=klausurTHEN anzINCR 1FI .END PROC
+anzahlschueler;INT PROC anzahlschueler(TEXT CONST suchtext,klausur,anwblock,
+INT CONST findpos):INT VAR i,anz:=0,aktpos;TEXT VAR blocknr:=text(anwblock,2)
+,block:=text(blocknr,laengeblock);IF (anwblockSUB 3)="a"THEN blockCAT
+anwblockELIF (anwblockSUB 3)="b"THEN blockCAT anwblockELSE block:=blocknrFI ;
+IF suchtext=""THEN zaehlalleschuelerELSE zaehlspezschuelerFI .
+zaehlspezschueler:col(kuwa2,1);toline(kuwa2,erster);WHILE lineno(kuwa2)<=
+letzterREP downety(kuwa2,suchtext);aktpos:=col(kuwa2);IF lineno(kuwa2)>
+letzterTHEN LEAVE anzahlschuelerWITH anzELIF aktposMOD laengekurseintrag=
+findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF
+aktpos<namenposTHEN eintrag:=text(eintrag,namenpos-1);IF klausur=""THEN
+pruefblockELSE ueberpruefklausurFI FI FI ;down(kuwa2);col(kuwa2,1)PER ;anz.
+ueberpruefklausur:IF (eintragSUB (aktpos-findpos+1))=klausurTHEN pruefblock
+FI .pruefblock:IF NOT (nichteingetragen(eintrag,block,10))COR NOT (
+nichteingetragen(eintrag,block,13))THEN anzINCR 1FI .zaehlalleschueler:col(
+kuwa2,1);FOR iFROM ersterUPTO letzterREP toline(kuwa2,i);readrecord(kuwa2,
+eintrag);eintrag:=text(eintrag,pos(eintrag,trenner)-1);pruefblockPER ;anz.
+END PROC anzahlschueler;INT PROC anzahlschueler(TEXT CONST suchtext,klausur,
+suchtext2,klausur2,INT CONST findpos,findpos2):INT VAR anz:=0,aktpos,kurspos;
+col(kuwa2,1);toline(kuwa2,erster);WHILE lineno(kuwa2)<=letzterREP downety(
+kuwa2,suchtext);aktpos:=col(kuwa2);IF lineno(kuwa2)>letzterTHEN LEAVE
+anzahlschuelerWITH anzELIF aktposMOD laengekurseintrag=findposTHEN readrecord
+(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF aktpos<namenposTHEN IF
+klausur=""THEN ueberpruefkurs2ELSE ueberpruefklausurFI FI FI ;down(kuwa2);col
+(kuwa2,1)PER ;anz.ueberpruefklausur:IF (eintragSUB (aktpos-findpos+1))=
+klausurTHEN ueberpruefkurs2FI .ueberpruefkurs2:IF NOT nichteingetragen(
+eintrag,suchtext2,findpos2,kurspos)THEN IF klausur2=""THEN anzINCR 1ELIF (
+eintragSUB kurspos)=klausurTHEN anzINCR 1FI ;FI .END PROC anzahlschueler;
+TEXT PROC alledaten(TEXT CONST eintrag,kennung):INT VAR aktpos:=pos(eintrag,
+trenner);TEXT VAR kurse:=text(eintrag,aktpos-1),kurs,ausgabe:="";ausgabe:="";
+IF length(kurse)MOD laengekurseintrag<>0THEN dbstatus(1)ELSE aktpos:=1;WHILE
+aktpos<length(kurse)REP kurs:=subtext(kurse,aktpos,aktpos+laengekurseintrag-1
+);IF kennung="F"THEN ausgabeCAT subtext(kurs,4,5)ELIF kennung="A"THEN ausgabe
+CAT subtext(kurs,2,3)ELIF kennung="FA"THEN ausgabeCAT subtext(kurs,4,5);
+ausgabeCAT subtext(kurs,2,3)ELIF kennung="FAk"THEN ausgabeCAT subtext(kurs,4,
+5);ausgabeCAT subtext(kurs,2,3);ausgabeCAT (kursSUB 1)ELIF kennung="FK"THEN
+ausgabeCAT subtext(kurs,4,9)ELIF kennung="FKk"THEN ausgabeCAT subtext(kurs,4,
+9);ausgabeCAT (kursSUB 1)ELIF kennung="FKAk"THEN ausgabeCAT subtext(kurs,4,9)
+;ausgabeCAT subtext(kurs,2,3);ausgabeCAT (kursSUB 1)ELIF kennung="FP"THEN
+ausgabeCAT subtext(kurs,4,5);ausgabeCAT planbloecke(subtext(kurs,4,9))FI ;
+aktposINCR laengekurseintragPER ;FI ;ausgabeEND PROC alledaten;INT PROC
+zeilennrzumschuelerbestand(BOOL CONST letzterls):col(kuwa2,1);toline(kuwa2,1)
+;downety(kuwa2,kzneue);IF letzterlsTHEN IF eof(kuwa2)THEN lines(kuwa2)ELSE
+lineno(kuwa2)-1FI ELSE IF eof(kuwa2)THEN lines(kuwa2)+1ELSE lineno(kuwa2)FI
+FI END PROC zeilennrzumschuelerbestand;BOOL PROC nichteingetragen(TEXT CONST
+urquelle,muster,INT CONST ripos,INT VAR findpos):INT VAR suchab:=1,aktpos,
+trennerpos:=pos(urquelle,trenner);TEXT VAR quelle;IF trennerpos>0THEN quelle
+:=text(urquelle,trennerpos-1)ELSE quelle:=urquelleFI ;WHILE pos(quelle,muster
+,suchab)<>0REP aktpos:=pos(quelle,muster,suchab);IF aktposMOD
+laengekurseintrag=riposTHEN findpos:=aktpos-ripos+1;LEAVE nichteingetragen
+WITH FALSE ELSE suchab:=aktpos+1FI PER ;findpos:=0;TRUE END PROC
+nichteingetragen;BOOL PROC nichteingetragen(TEXT CONST urquelle,muster,INT
+CONST ripos):INT VAR trennerpos:=pos(urquelle,trenner);TEXT VAR quelle,
+teilmuster;IF trennerpos>0THEN quelle:=text(urquelle,trennerpos-1)ELSE quelle
+:=urquelleFI ;IF length(muster)<4THEN wertnichteingetragen(quelle,muster,
+ripos)ELSE teilmuster:=text(muster,3);IF wertnichteingetragen(quelle,
+teilmuster,ripos)THEN teilmuster:=subtext(muster,4);wertnichteingetragen(
+quelle,teilmuster,ripos)ELSE FALSE FI FI END PROC nichteingetragen;BOOL PROC
+wertnichteingetragen(TEXT CONST quelle,teilmuster,INT CONST ripos):INT VAR
+suchab:=1,aktpos;WHILE pos(quelle,teilmuster,suchab)<>0REP aktpos:=pos(quelle
+,teilmuster,suchab);IF aktposMOD laengekurseintrag=riposTHEN LEAVE
+wertnichteingetragenWITH FALSE ELSE suchab:=aktpos+1FI PER ;TRUE END PROC
+wertnichteingetragen;TEXT PROC planbloecke(TEXT CONST kurs):TEXT VAR blockbez
+:="",zeile;INT VAR aktsp;col(kuwa1,1);toline(kuwa1,1);WHILE NOT eof(kuwa1)
+REP downety(kuwa1,kurs);IF NOT eof(kuwa1)THEN aktsp:=col(kuwa1);IF aktspMOD
+laengekurs=5THEN readrecord(kuwa1,zeile);blockbezCAT text(zeile,laengeblock)
+FI ;col(kuwa1,aktsp+1)FI ;PER ;text(blockbez,6)END PROC planbloecke;PROC
+aenderkursinkuwa1(TEXT CONST kurs,kursneu):INT VAR aktsp;col(kuwa1,1);toline(
+kuwa1,1);WHILE NOT eof(kuwa1)REP downety(kuwa1,kurs);IF NOT eof(kuwa1)THEN
+aktsp:=col(kuwa1);IF aktspMOD laengekurs=5THEN readrecord(kuwa1,eintrag);
+writerecord(kuwa1,text(eintrag,aktsp-1)+kursneu+subtext(eintrag,aktsp+6))FI ;
+col(kuwa1,aktsp+1)FI ;PER END PROC aenderkursinkuwa1;BOOL PROC
+schuelereingetragen(TEXT CONST schueler,FILE VAR file):col(file,1);toline(
+file,1);downety(file,schueler);IF NOT eof(file)THEN col(file,1);TRUE ELSE
+FALSE FI END PROC schuelereingetragen;PROC planbloeckezukurseintragen(TEXT
+CONST kurs,planbloecke):INT VAR aktpos;col(kuwa2,1);toline(kuwa2,1);WHILE
+NOT eof(kuwa2)REP downety(kuwa2,kurs);IF NOT eof(kuwa2)THEN aktpos:=col(kuwa2
+);IF aktposMOD laengekurseintrag=4THEN korrigiereintragFI ;col(kuwa2,aktpos+
+11)FI PER .korrigiereintrag:readrecord(kuwa2,eintrag);writerecord(kuwa2,text(
+eintrag,aktpos+5)+planbloecke+subtext(eintrag,aktpos+12)).END PROC
+planbloeckezukurseintragen;BOOL PROC kurseingetragen(TEXT CONST anwkurs):
+TEXT VAR kurs:=text(anwkurs,laengekurs);indateieingetragen(kuwa0,kurs)END
+PROC kurseingetragen;BOOL PROC blockeingetragen(TEXT CONST planblock):
+indateieingetragen(kuwa1,planblock)END PROC blockeingetragen;BOOL PROC
+indateieingetragen(FILE VAR dat,TEXT CONST suchtext):IF compress(suchtext)=""
+THEN LEAVE indateieingetragenWITH FALSE FI ;toline(dat,1);col(dat,1);downety(
+dat,suchtext);WHILE NOT eof(dat)REP IF col(dat)=1THEN LEAVE
+indateieingetragenWITH TRUE ELSE col(dat,col(dat)+1)FI ;downety(dat,suchtext)
+PER ;FALSE END PROC indateieingetragen;TEXT PROC konvsjteil(TEXT CONST jahr,
+INT CONST jgstdiff):INT VAR kjahr:=int(jahr)+jgstdiff;IF kjahr>99THEN subtext
+(text(kjahr),2)ELSE text(kjahr)FI END PROC konvsjteil;PROC kursdatenholen:
+kuwa0:=sequentialfile(output,datei);inittupel(dnrlehrveranstaltungen);putwert
+(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);putwert(fnrlvjgst,jgst);
+statleseschleife(dnrlehrveranstaltungen,schuljahr,halbjahr,fnrlvsj,fnrlvhj,
+PROC kursdatenaktodergepl);modify(kuwa0).END PROC kursdatenholen;PROC
+kursdatenaktodergepl(BOOL VAR b):IF wert(fnrlvsj)<>schuljahrCOR wert(fnrlvhj)
+<>halbjahrCOR wert(fnrlvjgst)<>jgstCOR dbstatus<>0THEN b:=TRUE ELSE putline(
+kuwa0,text(wert(fnrlvfachkennung),laengekurs)+text(wert(fnrlvwochenstd),
+laengewstd)+text(wert(fnrlvart),laengeart))FI .END PROC kursdatenaktodergepl;
+PROC kurswahleinerjgstaufbereiten(TEXT CONST jgst,halbjahr,schuljahr,FILE
+VAR kuwadatei):datei:=kurswahl2+jgst+" "+halbjahr+"."+schuljahr;forget(datei,
+quiet);IF kuwa2eintragTHEN kuwa2:=sequentialfile(output,datei)ELSE kuwa3:=
+sequentialfile(output,datei)FI ;eintrag:=trenner;holhalbjahresdaten;
+holalleschueler;forget(namezwischendatei,quiet);IF kuwa2eintragTHEN modify(
+kuwa2)ELSE modify(kuwa3)FI .holhalbjahresdaten:inittupel(dnrhalbjahresdaten);
+changeindex;putwert(fnrhjdsj,schuljahr);putwert(fnrhjdhj,halbjahr);putwert(
+fnrhjdjgst,jgst);forget(namezwischendatei,quiet);kuwahilf:=sequentialfile(
+output,namezwischendatei);statleseschleife(ixhjdsjhjjgstkenn,schuljahr,
+halbjahr,fnrhjdsj,fnrhjdhj,PROC zwischenspeichern);.holalleschueler:modify(
+kuwahilf);IF bearbschueler<>2THEN erster:=1FI ;inittupel(dnrschueler);
+parsenooffields(5);changeindex;status:=stat1;statleseschleife(ixsustatjgst,
+status,text(aktjg),fnrsustatuss,fnrsusgrpjgst,PROC schuelerholen);IF aktjg=10
+THEN status:=stat2ELSE status:=stat3FI ;IF kuwa2eintragTHEN IF bearbschueler=
+1THEN letzter:=lines(kuwa2)ELIF bearbschueler=2THEN erster:=lines(kuwa2)+1FI
+FI ;IF aktjg<>13THEN inittupel(dnrschueler);putintwert(fnrsujgsteintr,aktjg+1
+);statleseschleife(ixsustatjgst,status,"",fnrsustatuss,fnrsusgrpjgst,PROC
+neueschuelerholen);FI ;IF kuwa2eintragTHEN IF bearbschueler<>1THEN letzter:=
+lines(kuwa2)FI ;IF erster=letzterTHEN letzterDECR 1FI FI ;reinitparsing.END
+PROC kurswahleinerjgstaufbereiten;PROC zwischenspeichern(BOOL VAR b):IF wert(
+fnrhjdsj)<>schuljahrCOR wert(fnrhjdhj)<>halbjahrCOR wert(fnrhjdjgst)<>jgst
+COR dbstatus<>0THEN b:=TRUE ELSE tragwerteeinFI .tragwerteein:bereitedatenauf
+(wert(fnrhjdfach),wert(fnrhjdkursart),wert(fnrhjdlerngrpkenn),wert(
+fnrhjdklausurteiln));putline(kuwahilf,eintrag).END PROC zwischenspeichern;
+PROC bereitedatenauf(TEXT CONST faecher,arten,kennungen,klausuren):INT VAR i,
+j,l;TEXT VAR t,fach;l:=length(faecher)DIV laengefach;eintrag:="";FOR iFROM 1
+UPTO lREP holklausur;holart;holfach;holkennungPER ;eintragCAT trenner;eintrag
+CAT wert(fnrhjdfamnames);eintragCAT trenner;eintragCAT wert(fnrhjdrufnames);
+eintragCAT trenner;eintragCAT wert(fnrhjdgebdats).holklausur:t:=subtext(
+klausuren,i,i);IF t<>""THEN eintragCAT tELSE eintragCAT " "FI .holart:j:=i*
+laengeart-1;t:=subtext(arten,j,j+1);IF t<>""THEN eintragCAT tELSE eintragCAT
+leereartFI .holfach:t:=subtext(faecher,j,j+1);IF t<>""THEN eintragCAT t;fach
+:=tELSE eintragCAT " "FI .holkennung:j:=i*laengekennung-3;t:=subtext(
+kennungen,j,j+3);IF t<>""THEN eintragCAT t;IF plblvorhandenTHEN
+holplanbloeckeELSE eintragCAT leereplanbloeckeFI ELSE eintragCAT leerekennung
++leereplanbloeckeFI .holplanbloecke:eintragCAT planbloecke(fach+t).END PROC
+bereitedatenauf;PROC schuelerholen(BOOL VAR b):IF wert(fnrsustatuss)<>status
+COR intwert(fnrsusgrpjgst)<>aktjgCOR dbstatus<>0THEN dbstatus(1);b:=TRUE
+ELSE schuelerdatenerstellen(kzschueler)FI .END PROC schuelerholen;PROC
+neueschuelerholen(BOOL VAR b):IF wert(fnrsustatuss)<>statusCOR dbstatus<>0
+THEN dbstatus(1);b:=TRUE ELIF intwert(fnrsujgsteintr)=aktjg+1THEN
+schuelerdatenerstellen(kzneue)FI .END PROC neueschuelerholen;PROC
+schuelerdatenerstellen(TEXT CONST schuelerkennung):TEXT VAR famname,rufname,
+gebdatum,eintragkuwahilf;famname:=wert(fnrsufamnames);rufname:=wert(
+fnrsurufnames);gebdatum:=wert(fnrsugebdatums);eintragkuwahilf:=trenner+
+famname+trenner+rufname+trenner+gebdatum;IF keinehjdatenTHEN
+schreibleereintragELSE suchinkuwahilfFI .keinehjdaten:eintrag=trenner.
+suchinkuwahilf:col(kuwahilf,1);toline(kuwahilf,1);downety(kuwahilf,
+eintragkuwahilf);IF eof(kuwahilf)THEN schreibleereintragELSE col(kuwahilf,1);
+readrecord(kuwahilf,eintragkuwahilf);eintragkuwahilfCAT schuelerkennung;IF
+kuwa2eintragTHEN putline(kuwa2,eintragkuwahilf)ELSE putline(kuwa3,
+eintragkuwahilf)FI ;FI .schreibleereintrag:eintragkuwahilfCAT schuelerkennung
+;IF kuwa2eintragTHEN putline(kuwa2,eintragkuwahilf)ELSE putline(kuwa3,
+eintragkuwahilf)FI .END PROC schuelerdatenerstellen;BOOL PROC
+halbjahrnichtgesetzt:schuljahr="0000"END PROC halbjahrnichtgesetzt;TEXT PROC
+gesperrterdatenraumname(TEXT CONST namepraefix):praefixsperre+datenraumname(
+namepraefix)END PROC gesperrterdatenraumname;TEXT PROC datenraumname(TEXT
+CONST namepraefix):TEXT VAR name:=namepraefix;nameCAT jgst;nameCAT " ";name
+CAT halbjahr;nameCAT ".";nameCAT schuljahr;nameEND PROC datenraumname;TEXT
+PROC formbezeichner(TEXT CONST bezeichner):TEXT VAR bez:="",erg:="";INT VAR
+ibez:=int(bezeichner);IF bezeichner=""THEN LEAVE formbezeichnerWITH
+bezeichnerFI ;IF NOT (lastconversionok)THEN erg:=bezeichnerSUB 3;IF NOT (erg=
+kennungtplbl1COR erg=kennungtplbl2)THEN LEAVE formbezeichnerWITH ""FI ELSE
+erg:=" "FI ;IF ibez<10THEN bezCAT "0";bezCAT text(ibez)ELSE bezCAT text(ibez)
+FI ;bezCAT erg;bezEND PROC formbezeichner;END PACKET
+kurswahlschnittstelle240791;
+
diff --git a/app/schulis/2.2.1/src/2.kurszuordnung und umwahl fuer einzelne schueler sek2 b/app/schulis/2.2.1/src/2.kurszuordnung und umwahl fuer einzelne schueler sek2
new file mode 100644
index 0000000..2c44f7d
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.kurszuordnung und umwahl fuer einzelne schueler sek2
@@ -0,0 +1,420 @@
+PACKET kurszuordnungundumwahlfuereinzelneschuelersek2DEFINES
+kurszuordnungundumwahlsek2anfang,kurszuordnungundumwahlbearbeiten,
+kurszuordnungundumwahlspeichern,kurszuordnungundumwahlkurselisten,
+kurszuordnungundumwahlkopieren,kurszuordnungundumwahlrechtehaelfte,
+kurszuordnungundumwahllinkehaelfte,kurszuordnungundumwahlvorwaerts,
+kurszuordnungundumwahlrueckwaerts,kurszuordnungundumwahlbeenden,
+kurszuordnungundumwahllistezeigen,kurszuordnungundumwahllisteblaettern,
+kurszuordnungundumwahllistebearbeiten,kurszuordnungundumwahllistebeenden:LET
+artbestand="c02 art lehrveranstaltung",abiklbestand="c02 abitur klausur",
+kuwa2sperre="Kurswahl-2 ",eingangsmaske=
+"ms kurszuordnung und umwahl sek2 eingang",bearbmaske=
+"ms kurszuordnung und umwahl sek2 bearb",listenmaske="mu objektliste",
+schuljahr="Schuljahr",halbjahr="Schulhalbjahr",laengefake=6,laengefakeartkl=9
+,laengevname=15,laengeplbleinesbs=36,laengekurseeinesbs=42,laengefamname=30,
+laengegebdat=8,laengename=53,einganggewjgst=2,einganggewhj=3,eingangaktjgst=4
+,eingangaktneue=5,eingangfamname=6,eingangrufname=7,eingangdatum=8,bearbname=
+2,bearbfaecher=3,bearbkurse=42,meldungwarten=69,meldungpraezisieren=129,
+meldungpruefen=329,meldungspeichern=50,meldungnspeichern=63,
+meldungfeldfuellen=52,meldungfalschejgst=404,meldungfalscheshj=405,
+meldungandereauswahl=318,meldunglistezeigen=7,meldungkeineschueler=423,
+meldungserverfehler=416,meldungkeinblaettern=72,meldungfalschesfach=310,
+meldungfalscheart=311,meldungunbeklv=360,meldungblockschnitt=424,
+meldungspfehler=419,meldungparallelanw=425,meldungfalscheartzk=434,
+meldungunbekannt=126,trenner="�",leerespraefix=" ",leererblock=" ",
+leerebloecke=" ",ausgzeichen="#",namenstrenner=", ",kzdoppeltbelegt=
+" * ",kzfaecher="F",kznurneue="N",kzname="N",kzohneneue="O",kzkurse="K",
+kzalle="A",kzart="A",kzstd="S",kzplbl="P",kzfaplbl="FP",kzfakeartkl="FKAk",
+logtext1="Anw. 2.3.1 Umwahl ",text1=" """,text2=""" ",punkt=".",komma=", ",
+ersteslistenfeld=2,erstesfachfeld=3,ersteskursfeld=42,anzbearbeingfelder=13,
+anzlistenfelder=18,anzbearbzeilen=12,anzfeldereingang=8;TEXT VAR gewsj,aktsj
+:="0000",akthj,gewjgst,gewhj,aktjgst,aktneue,aktwahl,aktname,aktvname,
+aktgebdatum,aktfaecher,aktartkl,aktkurse,aktschueler,schuelergruppe,
+schuelerliste,aktblock,alleplanbloecke:="",faecherbloecke,wahldaten,fach,art,
+klausur,kennung,fehlerblock,allearten:=trenner,allefaecher:=trenner,block12,
+block1,block2,alleklausurbez:="",praefix,kurse,pruefbloecke:=trenner,
+logmeldung;INT VAR i,j,letztepos:=2,fstat:=0,aktlistennr,fachfeld:=
+erstesfachfeld,artfeld:=16,klfeld:=17,kursfeld:=ersteskursfeld,aktplblindex:=
+1,anfpos,aktbsseite:=1,letztesfeld,listenpos:=1,aktindex,ersterindex:=
+ersterschueler;ROW anzbearbeingfelderROW 4TEXT VAR bearbrow;ROW
+anzfeldereingangTEXT VAR eingangrow;ROW anzlistenfelderTEXT VAR aktliste;
+BOOL VAR listenbearbeitung:=FALSE ,rechtsscrollen:=FALSE ,sperreok,
+kopierfunktion:=FALSE ,scrollen:=FALSE ;WINDOW VAR w;initroweingang;
+initrowbearb;PROC initroweingang:FOR iFROM 2UPTO anzfeldereingangREP
+eingangrow(i):=""PER ;END PROC initroweingang;PROC initrowbearb:INT VAR i;
+FOR iFROM 1UPTO anzbearbeingfelderREP bearbrow(i):=ROW 4TEXT :("","","","")
+PER ;END PROC initrowbearb;PROC kurszuordnungundumwahlsek2anfang:aktplblindex
+:=1;standardstartproc(eingangsmaske);gibeingangaus;infeld(1);
+standardfelderausgeben;infeld(letztepos);standardnproc.gibeingangaus:FOR i
+FROM 2UPTO anzfeldereingangREP standardmaskenfeld(eingangrow(i),i);IF
+eingangrow(i)<>""THEN letztepos:=iFI PER .END PROC
+kurszuordnungundumwahlsek2anfang;PROC kurszuordnungundumwahlbearbeiten:
+listenbearbeitung:=FALSE ;kopierfunktion:=FALSE ;schuelerliste:="";
+standardmeldung(meldungwarten,"");merkeeingang;aktname:=eingangrow(
+eingangfamname);aktvname:=eingangrow(eingangrufname);aktgebdatum:=konvdatum(
+eingangrow(eingangdatum));prueffeld2bis5;IF fstat<>0THEN LEAVE
+kurszuordnungundumwahlbearbeitenFI ;kurswahlinitialisieren(aktjgst,gewjgst,
+gewhj,schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0THEN
+meldungausgeben(meldungserverfehler,einganggewjgst,1);LEAVE
+kurszuordnungundumwahlbearbeitenELIF letzterschueler<ersterschuelerTHEN
+meldungausgeben(meldungkeineschueler,einganggewjgst,1);LEAVE
+kurszuordnungundumwahlbearbeitenFI ;kurswahlsperresetzen(kuwa2sperre,sperreok
+);IF NOT sperreokTHEN meldungausgeben(meldungparallelanw,einganggewjgst,1);
+LEAVE kurszuordnungundumwahlbearbeitenFI ;prueffeld6bis8;standardstartproc(
+bearbmaske);standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "
++aktjgst+" in "+gewjgst+"."+gewhj);aktbsseite:=1;aktplblindex:=1;
+schuelerbearbeiten;standardnproc.prueffeld6bis8:FOR iFROM eingangfamnameUPTO
+eingangdatumREP IF standardmaskenfeld(i)=""THEN meldungausgeben(
+meldungfeldfuellen,i,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE
+kurszuordnungundumwahlbearbeitenFI PER ;pruefexistschueler.pruefexistschueler
+:aktfaecher:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,kzfaecher);IF
+dbstatus<>0THEN meldungausgeben(meldungunbekannt,eingangfamname,1);
+kurswahlsperrebeenden(kuwa2sperre);LEAVE kurszuordnungundumwahlbearbeitenFI .
+END PROC kurszuordnungundumwahlbearbeiten;PROC schuelerbearbeiten:INT VAR
+kurspos,rowindex:=1;aktschueler:=aktname+namenstrenner+aktvname+namenstrenner
++aktgebdatum;initrowbearb;ermittlefaecherartklkurse;standardmaskenfeld(text(
+aktschueler,laengename),bearbname);zeigplanblockkurszuordnung.
+ermittlefaecherartklkurse:fachfeld:=erstesfachfeld;artfeld:=16;klfeld:=17;
+kursfeld:=ersteskursfeld;kurspos:=1;aktfaecher:="";aktartkl:="";aktkurse:="";
+rowindex:=1;aktwahl:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,
+kzfakeartkl);IF dbstatus=1COR aktwahl=""THEN aktwahl:="";initrowbearb;FOR j
+FROM 1UPTO anzbearbeingfelderREP standardmaskenfeld("",fachfeld);
+standardmaskenfeld("",artfeld);standardmaskenfeld("",klfeld);
+standardmaskenfeld("",kursfeld);fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;
+kursfeldINCR 1;PER ;ELSE gibwahlausFI .gibwahlaus:WHILE kurspos<length(
+aktwahl)REP fach:=subtext(aktwahl,kurspos,kurspos+1);kennung:=subtext(aktwahl
+,kurspos+2,kurspos+5);aktfaecherCAT fach;aktkurseCAT kennung;fach:=compress(
+fach);kennung:=compress(kennung);art:=compress(subtext(aktwahl,kurspos+6,
+kurspos+7));klausur:=compress(aktwahlSUB (kurspos+8));standardmaskenfeld(fach
+,fachfeld);standardmaskenfeld(art,artfeld);standardmaskenfeld(klausur,klfeld)
+;standardmaskenfeld(kennung,kursfeld);bearbrow(rowindex):=ROW 4TEXT :(fach,
+art,klausur,kennung);IF rowindex<anzbearbeingfelderTHEN rowindexINCR 1FI ;
+fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;kursfeldINCR 1;kursposINCR
+laengefakeartklPER ;IF rowindex<anzbearbeingfelderTHEN FOR jFROM rowindex
+UPTO anzbearbeingfelderREP standardmaskenfeld("",fachfeld);standardmaskenfeld
+("",artfeld);standardmaskenfeld("",klfeld);standardmaskenfeld("",kursfeld);
+bearbrow(rowindex):=ROW 4TEXT :("","","","");IF rowindex<anzbearbeingfelder
+THEN rowindexINCR 1;fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;kursfeldINCR 1;
+FI PER FI .zeigplanblockkurszuordnung:alleplanbloecke:=
+alleplanblockbezeichner;scrollen:=length(alleplanbloecke)>laengeplbleinesbs;
+zeigbearbdaten(aktplblindex).END PROC schuelerbearbeiten;PROC zeigbearbdaten(
+INT CONST planblocknr):INT VAR blockpos:=planblocknr*3-2;pruefbloecke:=
+trenner;faecherbloecke:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,
+kzfaplbl);rechtsscrollen:=FALSE ;FOR iFROM 1UPTO anzbearbzeilenREP aktblock:=
+subtext(alleplanbloecke,blockpos,blockpos+2);IF aktblock=""THEN scrollen:=
+FALSE ;standardmaskenfeld("",i*4+51);standardmaskenfeld("",i*4+52);
+standardmaskenfeld("",i*4+53);standardmaskenfeld("",i*4+54)ELSE
+standardmaskenfeld(konvplanblock(aktblock),i*4+51);standardmaskenfeld(
+planblockdaten(aktblock,kzstd),i*4+52);standardmaskenfeld("",i*4+53);
+ermittlemoeglichekurse;blockposINCR 3;FI ;PER ;
+kurszuordnungundumwahlkopierenvorbereiten;infeld(erstesfachfeld).END PROC
+zeigbearbdaten;PROC ermittlemoeglichekurse:TEXT VAR kurse:=planblockdaten(
+aktblock,kzkurse),ausgabekurse;INT VAR kurspos:=1,berhilfe:=aktbsseite*
+laengekurseeinesbs;IF length(kurse)>berhilfeTHEN rechtsscrollen:=TRUE ;FI ;
+kurse:=subtext(kurse,berhilfe-laengekurseeinesbs+1,berhilfe);konvkurse;
+standardmaskenfeld(ausgabekurse,i*4+54).konvkurse:ausgabekurse:="";kurspos:=1
+;WHILE kurspos<length(kurse)REP ausgabekurseCAT subtext(kurse,kurspos,kurspos
++1);ausgabekurseCAT " ";ausgabekurseCAT subtext(kurse,kurspos+2,kurspos+5);
+kursposINCR 6PER .END PROC ermittlemoeglichekurse;TEXT PROC konvplanblock(
+TEXT CONST planblock):INT VAR blnr:=int(text(planblock,2));IF blnr<10THEN "0"
++text(blnr)+(planblockSUB 3)ELSE planblockFI END PROC konvplanblock;TEXT
+PROC konvdatum(TEXT CONST datumohnepunkte):text(datumohnepunkte,2)+"."+
+subtext(datumohnepunkte,3,4)+"."+subtext(datumohnepunkte,5)END PROC konvdatum
+;PROC kurszuordnungundumwahlspeichern(BOOL CONST speichern):BOOL VAR
+aenderung:=FALSE ;TEXT VAR std,fa,ke;IF speichernTHEN
+pruefundspeicheraenderungen;ELSE standardmeldung(meldungnspeichern,"");FI ;
+naechsterbildschirm.naechsterbildschirm:IF listenbearbeitungTHEN IF listenpos
+>length(schuelerliste)THEN kurswahlsperrebeenden(kuwa2sperre);enter(3)ELSE
+kopierfunktion:=FALSE ;IF naechsterschuelerTHEN infeld(1);schuelerbearbeiten;
+return(1)ELSE kurswahlsperrebeenden(kuwa2sperre);enter(3)FI FI ;ELSE
+kurswahlsperrebeenden(kuwa2sperre);enter(2)FI .pruefundspeicheraenderungen:
+standardmeldung(meldungpruefen,"");fachfeld:=erstesfachfeld;artfeld:=16;
+klfeld:=17;kursfeld:=ersteskursfeld;aenderung:=FALSE ;wahldaten:="";FOR i
+FROM 1UPTO anzbearbeingfelderREP infeld(fachfeld);fach:=standardmaskenfeld(
+fachfeld);art:=standardmaskenfeld(artfeld);klausur:=standardmaskenfeld(klfeld
+);kennung:=standardmaskenfeld(kursfeld);block12:=kursdaten(text(fach,2)+
+kennung,kzplbl);IF fach<>bearbrow(i)(1)COR art<>bearbrow(i)(2)COR klausur<>
+bearbrow(i)(3)COR kennung<>bearbrow(i)(4)THEN aenderung:=TRUE FI ;IF fach<>""
+THEN IF art=""CAND kennung=""THEN meldungfeldfuellenausgebenELSE prueffachFI
+ELIF art<>""COR kennung<>""THEN meldungfeldfachfuellenausgeben;LEAVE
+kurszuordnungundumwahlspeichernFI ;IF art<>""THEN pruefartFI ;IF kennung<>""
+THEN pruefkennung;pruefartzumkurs;IF block12<>leerebloeckeTHEN
+pruefkursueberschneidungFI FI ;IF fach<>""THEN wahldatenCAT text(klausur,1);
+wahldatenCAT text(art,2);wahldatenCAT text(fach,2);wahldatenCAT text(kennung,
+4);wahldatenCAT text(block12,6)FI ;fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;
+kursfeldINCR 1PER ;IF aenderungTHEN standardmeldung(meldungspeichern,"");
+schuelerwahleintragen(aktname,aktvname,aktgebdatum,wahldaten);IF dbstatus<>0
+THEN meldungausgeben(meldungspfehler,bearbfaecher,1);LEAVE
+kurszuordnungundumwahlspeichernELSE logbucheintragvornehmen;kurswahl2sichern(
+fstat)FI FI .prueffach:IF allefaecher=trennerTHEN holepruefdatenFI ;IF pos(
+allefaecher,trenner+fach+trenner)=0THEN meldungausgeben(meldungfalschesfach,
+fachfeld,1);LEAVE kurszuordnungundumwahlspeichernFI .pruefart:IF pos(
+allearten,trenner+art+trenner)=0THEN meldungausgeben(meldungfalscheart,
+artfeld,1);LEAVE kurszuordnungundumwahlspeichernFI .pruefkennung:std:=
+compress(kursdaten(text(fach,2)+text(kennung,4),kzart));IF dbstatus<>0THEN
+standardmeldung(meldungunbeklv,text(fach,2)+kennung+ausgzeichen);infeld(
+kursfeld);return(1);LEAVE kurszuordnungundumwahlspeichernFI .pruefartzumkurs:
+IF art<>""CAND std<>artCAND std<>""THEN meldungfalscheartausgeben;LEAVE
+kurszuordnungundumwahlspeichernFI .pruefkursueberschneidung:TEXT VAR kuform;
+block1:=text(block12,3);block2:=subtext(block12,4);FOR jFROM 1UPTO i-1REP fa
+:=standardmaskenfeld(erstesfachfeld+j-1);ke:=standardmaskenfeld(
+ersteskursfeld+j-1);kuform:=text(text(fa,2)+ke,laengefake);IF fa<>""CAND ke<>
+""THEN IF kuform<>text(text(fach,2)+kennung,laengefake)THEN IF
+planblockschnitt(kuform)THEN meldungblockschnittausgeben;LEAVE
+kurszuordnungundumwahlspeichernFI FI FI PER ;FOR jFROM i+1UPTO
+anzbearbeingfelderREP fa:=standardmaskenfeld(erstesfachfeld+j-1);ke:=
+standardmaskenfeld(ersteskursfeld+j-1);kuform:=text(text(fa,2)+ke,laengefake)
+;IF fa<>""CAND ke<>""THEN IF kuform<>text(text(fach,2)+kennung,laengefake)
+THEN IF planblockschnitt(kuform)THEN meldungblockschnittausgeben;LEAVE
+kurszuordnungundumwahlspeichernFI FI FI PER .meldungfeldfuellenausgeben:
+meldungausgeben(meldungfeldfuellen,artfeld,1).meldungfeldfachfuellenausgeben:
+meldungausgeben(meldungfeldfuellen,fachfeld,1).meldungfalscheartausgeben:
+standardmeldung(meldungfalscheartzk,text(fach,2)+kennung+ausgzeichen+std+
+ausgzeichen);infeld(artfeld);return(1).meldungblockschnittausgeben:
+standardmeldung(meldungblockschnitt,compress(fehlerblock)+ausgzeichen);infeld
+(kursfeld);return(1).END PROC kurszuordnungundumwahlspeichern;BOOL PROC
+naechsterschueler:aktindex:=int(subtext(schuelerliste,listenpos,listenpos+2))
+;belegeglobalevariablen(aktindex);listenposINCR 4;aktname<>""END PROC
+naechsterschueler;BOOL PROC planblockschnitt(TEXT CONST andererkurs):TEXT
+VAR bl1,bl2,bl12;IF compress(andererkurs)=""THEN LEAVE planblockschnittWITH
+FALSE ELIF block1=leererblockCAND block2=leererblockTHEN LEAVE
+planblockschnittWITH FALSE FI ;bl12:=kursdaten(andererkurs,kzplbl);IF
+dbstatus=1THEN LEAVE planblockschnittWITH FALSE FI ;IF bl12=leerebloeckeTHEN
+LEAVE planblockschnittWITH FALSE FI ;IF block1<>leererblockTHEN bl1:=text(
+bl12,3);IF block1ganzerblockCOR bl1ganzerblockTHEN block1:=text(block1,2);bl1
+:=text(bl12,2);ELSE bl1:=text(bl12,3)FI ;IF block1=bl1COR block1=bl2THEN
+fehlerblock:=block1;LEAVE planblockschnittWITH TRUE FI ;FI ;IF block2<>
+leererblockTHEN bl2:=subtext(bl12,4);IF block2ganzerblockCOR bl2ganzerblock
+THEN block2:=text(block2,2);bl2:=subtext(bl12,4,5)ELSE bl2:=subtext(bl12,4)
+FI ;IF block2=bl1COR block2=bl2THEN fehlerblock:=block2;LEAVE
+planblockschnittWITH TRUE FI ;FI ;FALSE .block1ganzerblock:(block1SUB 3)=" ".
+bl1ganzerblock:(bl1SUB 3)=" ".block2ganzerblock:(block2SUB 3)=" ".
+bl2ganzerblock:(bl2SUB 3)=" ".END PROC planblockschnitt;PROC holepruefdaten:
+allefaecher:=trenner;allearten:=trenner;inittupel(dnrfaecher);
+statleseschleife(dnrfaecher,"","",fnrffach,fnrffach,PROC sammleallefaecher);
+inittupel(dnrschluessel);statleseschleife(dnrschluessel,artbestand,"",
+fnrschlsachgebiet,fnrschlschluessel,PROC sammleallearten)END PROC
+holepruefdaten;PROC sammleallefaecher(BOOL VAR b):allefaecherCAT wert(
+fnrffach);allefaecherCAT trennerEND PROC sammleallefaecher;PROC
+sammleallearten(BOOL VAR b):IF wert(fnrschlsachgebiet)>artbestandCOR dbstatus
+<>0THEN b:=TRUE ELSE alleartenCAT wert(fnrschlschluessel);alleartenCAT
+trenner;alleartenCAT text(wert(fnrschlschluessel),2);alleartenCAT trennerFI
+END PROC sammleallearten;PROC kurszuordnungundumwahlkurselisten:TEXT VAR
+kursliste,liste,ausgabeart;INT VAR aktfeld;kursliste:="";aktfeld:=infeld;w:=
+startwindow(20,23,77,1);liste:="";standardmeldung(meldunglistezeigen,"");#IF
+menuedraussen08.02.91THEN reorganizescreenFI ;#fuelleliste;infeld(1);
+standardfelderausgeben;open(w);auskunfterteilung(liste,w,FALSE );
+reorganizescreen;setlasteditvalues;infeld(aktfeld);return(1).fuelleliste:
+holklausurkuerzel;listeCAT "Zusammensetzung der Kurse";listeCAT
+auskunftstextende;listeCAT " ";listeCAT auskunftstextende;listeCAT
+"Fach Art Kurs Schüler Klausur";listeCAT auskunftstextende;listeCAT
+" ges. ";FOR iFROM 1UPTO 6REP IF (alleklausurbezSUB i)<>""
+THEN listeCAT text((alleklausurbezSUB i),5)FI PER ;listeCAT auskunftstextende
+;listeallerkurse.holklausurkuerzel:IF alleklausurbez=""THEN statleseschleife(
+dnrschluessel,abiklbestand,"",fnrschlsachgebiet,fnrschlschluessel,PROC
+sammlealleabikl)FI .listeallerkurse:belegefachart;betrachtekurse;anfpos:=1;
+praefix:=text(fach,5)+text(ausgabeart,4);WHILE anfpos<length(kursliste)REP
+listeCAT praefix;IF praefix<>""THEN praefix:=leerespraefixFI ;kennung:=
+subtext(kursliste,anfpos,anfpos+3);listeCAT text(kennung,6);listeCAT text(
+anzahlschuelermitwahl(fach,kennung,"",""),3);listeCAT " ";FOR iFROM 1UPTO 6
+REP IF (alleklausurbezSUB i)<>""THEN listeCAT text(anzahlschuelermitwahl(fach
+,kennung,ausgabeart,(alleklausurbezSUB i)),5)FI PER ;listeCAT
+auskunftstextende;anfposINCR 4PER ;listeCAT auskunftstextende.betrachtekurse:
+anfpos:=1;kursliste:="";kurse:=allekurse;WHILE anfpos<>0REP anfpos:=pos(kurse
+,fach,anfpos);IF anfposMOD 10=1THEN IF subtext(kurse,anfpos,anfpos+1)=text(
+fach,2)CAND subtext(kurse,anfpos+8,anfpos+9)=text(art,2)THEN kurslisteCAT
+subtext(kurse,anfpos+2,anfpos+5)FI FI ;IF anfpos<>0THEN anfposINCR 1FI PER ;
+IF kursliste=""THEN ausgabeart:="";ermittleallekursezumfachELSE ausgabeart:=
+artFI .ermittleallekursezumfach:anfpos:=1;kursliste:="";WHILE anfpos<>0REP
+anfpos:=pos(kurse,fach,anfpos);IF anfposMOD 10=1THEN IF subtext(kurse,anfpos,
+anfpos+1)=fachTHEN kurslisteCAT subtext(kurse,anfpos+2,anfpos+5)FI FI ;IF
+anfpos<>0THEN anfposINCR 1FI PER .belegefachart:aktfeld:=infeld;IF aktfeld>2
+CAND aktfeld<16THEN fach:=standardmaskenfeld(aktfeld);art:=standardmaskenfeld
+(((aktfeld-2)*2-1)+15)ELIF aktfeld>15CAND aktfeld<42THEN fach:=
+standardmaskenfeld(aktfeldDIV 2-5);IF aktfeldMOD 2=0THEN art:=
+standardmaskenfeld(aktfeld)ELSE art:=standardmaskenfeld(aktfeld-1)FI ELSE
+fach:=standardmaskenfeld(aktfeld-39);art:=standardmaskenfeld((aktfeld-39)*2+
+10)FI ;art:=compress(art).END PROC kurszuordnungundumwahlkurselisten;PROC
+kurszuordnungundumwahllistebeenden:kurswahlsperrebeenden(kuwa2sperre);enter(2
+)END PROC kurszuordnungundumwahllistebeenden;PROC sammlealleabikl(BOOL VAR b)
+:IF wert(fnrschlsachgebiet)>abiklbestandCOR dbstatus<>0THEN b:=TRUE ELSE
+alleklausurbezCAT wert(fnrschlschluessel)FI END PROC sammlealleabikl;PROC
+kurszuordnungundumwahlkopierenvorbereiten:TEXT VAR fa,ke,f,k,aktplbl;INT VAR
+z;TEXT VAR var:="",neuerkurseintrag:="";IF pruefbloecke=trennerTHEN
+ermittlegezeigtebloecke;FI ;FOR jFROM 1UPTO anzbearbeingfelderREP fa:=
+standardmaskenfeld(bearbfaecher+j-1);ke:=standardmaskenfeld(bearbkurse+j-1);
+IF altedatenleerundneuedatenTHEN neuedateneintragenELIF
+altedatenundneuedatenleerTHEN altedatenloeschenELIF altedatenundneuedaten
+THEN altedatenloeschenundneuedateneintragenFI ;bearbrow(j)(1):=fa;bearbrow(j)
+(4):=kePER ;standardfelderausgeben.altedatenleerundneuedaten:bearbrow(j)(4)=
+""CAND fa<>""CAND ke<>"".altedatenundneuedatenleer:bearbrow(j)(1)<>""CAND
+bearbrow(j)(4)<>""CAND ke="".altedatenundneuedaten:bearbrow(j)(1)<>""CAND
+bearbrow(j)(4)<>""CAND fa<>""CAND ke<>"".ermittlegezeigtebloecke:aktplbl:=
+subtext(alleplanbloecke,aktplblindex*3-2,(aktplblindex+anzbearbzeilen-1)*3);
+pruefbloecke:=trenner;FOR jFROM 1UPTO length(aktplbl)DIV 3REP pruefbloecke
+CAT subtext(aktplbl,j*3-2,j*3);pruefbloeckeCAT trennerPER .neuedateneintragen
+:faecherbloecke:=kursdaten(text(fa,2)+ke,kzplbl);IF faecherbloecke=
+leerebloeckeTHEN LEAVE neuedateneintragenFI ;aktplbl:=text(faecherbloecke,3);
+IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+aktplbl+trenner);IF i
+>0THEN i:=iDIV 4+1;tragneuenkurseinFI FI ;aktplbl:=subtext(faecherbloecke,4);
+IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+aktplbl+trenner);IF i
+>0THEN i:=iDIV 4+1;tragneuenkurseinFI FI .tragneuenkursein:IF
+standardmaskenfeld(i*4+53)<>""CAND standardmaskenfeld(i*4+53)<>text(fa,2)+
+text(ke,4)THEN standardmaskenfeld(kzdoppeltbelegt,i*4+53)ELSE
+standardmaskenfeld(text(fa,2)+text(ke,4),i*4+53)FI .altedatenloeschen:
+loescheintrag.altedatenloeschenundneuedateneintragen:IF bearbrow(j)(1)<>fa
+COR bearbrow(j)(4)<>keTHEN loescheintragFI ;neuedateneintragen.loescheintrag:
+faecherbloecke:=kursdaten(text(bearbrow(j)(1),2)+bearbrow(j)(4),kzplbl);IF
+faecherbloecke=leerebloeckeTHEN LEAVE loescheintragFI ;aktplbl:=text(
+faecherbloecke,3);IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+
+aktplbl+trenner);IF i>0THEN i:=iDIV 4+1;IF standardmaskenfeld(i*4+53)=
+kzdoppeltbelegtTHEN traganderenkurseinELSE standardmaskenfeld("",i*4+53)FI
+FI FI ;aktplbl:=subtext(faecherbloecke,4);IF aktplbl<>leererblockTHEN i:=pos(
+pruefbloecke,trenner+aktplbl+trenner);IF i>0THEN i:=iDIV 4+1;IF
+standardmaskenfeld(i*4+53)=kzdoppeltbelegtTHEN traganderenkurseinELSE
+standardmaskenfeld("",i*4+53)FI FI FI .traganderenkursein:neuerkurseintrag:=
+"";FOR zFROM 1UPTO j-1REP f:=standardmaskenfeld(bearbfaecher+z-1);IF f<>""
+THEN k:=standardmaskenfeld(bearbkurse+z-1);IF k<>""THEN var:=text(f,2)+k;var
+:=kursdaten(var,kzplbl);IF text(var,3)=aktplblCOR subtext(var,4)=aktplblTHEN
+IF neuerkurseintrag=""THEN neuerkurseintrag:=text(f,2)+text(k,4)ELSE
+standardmaskenfeld(kzdoppeltbelegt,i*4+53);LEAVE traganderenkurseinFI FI FI
+FI PER ;FOR zFROM j+1UPTO anzbearbeingfelderREP f:=standardmaskenfeld(
+bearbfaecher+z-1);IF f<>""THEN k:=standardmaskenfeld(bearbkurse+z-1);IF k<>""
+THEN var:=text(f,2)+k;var:=kursdaten(var,kzplbl);IF text(var,3)=aktplblCOR
+subtext(var,4)=aktplblTHEN IF neuerkurseintrag=""THEN neuerkurseintrag:=text(
+f,2)+text(k,4)ELSE standardmaskenfeld(kzdoppeltbelegt,i*4+53);LEAVE
+traganderenkurseinFI FI FI FI PER ;IF neuerkurseintrag=""THEN
+standardmaskenfeld("",i*4+53)ELSE tragkursausehemdoppelbeleinFI .
+tragkursausehemdoppelbelein:standardmaskenfeld(neuerkurseintrag,i*4+53).END
+PROC kurszuordnungundumwahlkopierenvorbereiten;PROC
+kurszuordnungundumwahlkopieren:kopierfunktion:=TRUE ;
+kurszuordnungundumwahlkopierenvorbereiten;kopierfunktion:=FALSE ;return(1)
+END PROC kurszuordnungundumwahlkopieren;PROC
+kurszuordnungundumwahlrechtehaelfte:INT VAR blockpos:=aktplblindex*3-2,
+aktfeld:=infeld;IF rechtsscrollenTHEN aktbsseiteINCR 1;
+zeigweiteremoeglichekurseELSE letztesfeld:=infeld;meldungausgeben(
+meldungkeinblaettern,letztesfeld,1)FI .zeigweiteremoeglichekurse:FOR iFROM 1
+UPTO anzbearbzeilenREP aktblock:=subtext(alleplanbloecke,blockpos,blockpos+2)
+;IF aktblock=""THEN standardmaskenfeld("",i*4+54)ELSE ermittlemoeglichekurse;
+blockposINCR 3;FI ;PER ;infeld(1);standardfelderausgeben;infeld(aktfeld);
+return(1).END PROC kurszuordnungundumwahlrechtehaelfte;PROC
+kurszuordnungundumwahllinkehaelfte:INT VAR blockpos:=aktplblindex*3-2,aktfeld
+:=infeld;IF aktbsseite<>1THEN rechtsscrollen:=TRUE ;aktbsseiteDECR 1;
+zeigweiteremoeglichekurseELSE letztesfeld:=infeld;meldungausgeben(
+meldungkeinblaettern,letztesfeld,1)FI .zeigweiteremoeglichekurse:FOR iFROM 1
+UPTO anzbearbzeilenREP aktblock:=subtext(alleplanbloecke,blockpos,blockpos+2)
+;IF aktblock=""THEN standardmaskenfeld("",i*4+54)ELSE ermittlemoeglichekurse;
+blockposINCR 3;FI ;PER ;infeld(1);standardfelderausgeben;infeld(aktfeld);
+return(1).END PROC kurszuordnungundumwahllinkehaelfte;PROC
+kurszuordnungundumwahlvorwaerts:INT VAR aktfeld:=infeld;IF scrollenTHEN
+aktplblindexINCR anzbearbzeilen;zeigbearbdaten(aktplblindex);infeld(aktfeld);
+return(1)ELSE letztesfeld:=infeld;meldungausgeben(meldungkeinblaettern,
+letztesfeld,1)FI END PROC kurszuordnungundumwahlvorwaerts;PROC
+kurszuordnungundumwahlrueckwaerts:INT VAR aktfeld:=infeld;IF aktplblindex>1
+THEN scrollen:=TRUE ;aktplblindexDECR anzbearbzeilen;zeigbearbdaten(
+aktplblindex);infeld(aktfeld);return(1)ELSE letztesfeld:=infeld;
+meldungausgeben(meldungkeinblaettern,letztesfeld,1)FI END PROC
+kurszuordnungundumwahlrueckwaerts;PROC kurszuordnungundumwahlbeenden:
+kurswahlsperrebeenden(kuwa2sperre);IF listenbearbeitungTHEN enter(3)ELSE
+enter(2)FI END PROC kurszuordnungundumwahlbeenden;BOOL PROC datumkorrekt:
+standardpruefe(6,eingangdatum,1,1,"",fstat);fstat=0END PROC datumkorrekt;
+PROC prueffeld2bis5:fstat:=0;IF aktsj="0000"THEN aktsj:=schulkenndatum(
+schuljahr);akthj:=schulkenndatum(halbjahr)FI ;gewjgst:=eingangrow(
+einganggewjgst);gewhj:=eingangrow(einganggewhj);aktjgst:=eingangrow(
+eingangaktjgst);aktneue:=eingangrow(eingangaktneue);prueffeld2;prueffeld3;
+prueffeld4und5;prueffeld4;IF fstat=1THEN LEAVE prueffeld2bis5FI ;prueffeld5.
+prueffeld2:i:=int(gewjgst);IF gewjgst=""THEN meldungausgeben(
+meldungfeldfuellen,einganggewjgst,1);LEAVE prueffeld2bis5ELIF i<11COR i>14
+THEN meldungausgeben(meldungfalschejgst,einganggewjgst,1);LEAVE
+prueffeld2bis5FI .prueffeld3:i:=int(gewhj);IF gewhj=""THEN meldungausgeben(
+meldungfeldfuellen,einganggewhj,1);LEAVE prueffeld2bis5ELIF i<1COR i>2THEN
+meldungausgeben(meldungfalscheshj,einganggewhj,1);LEAVE prueffeld2bis5FI .
+prueffeld4und5:IF aktjgst=""CAND aktneue=""THEN meldungausgeben(
+meldungpraezisieren,eingangaktjgst,1);LEAVE prueffeld2bis5ELIF aktjgst=""
+CAND aktneue<>""THEN schuelergruppe:=kznurneueELIF aktjgst<>""CAND aktneue=""
+THEN schuelergruppe:=kzohneneueELSE schuelergruppe:=kzalleFI .prueffeld4:i:=
+int(aktjgst);IF i<10COR i>14THEN meldungausgeben(meldungfalschejgst,
+einganggewjgst,1)ELIF i>int(gewjgst)THEN meldungausgeben(meldungandereauswahl
+,einganggewjgst,1)ELIF i=int(gewjgst)THEN IF gewhj="1"CAND akthj="2"THEN
+meldungausgeben(meldungandereauswahl,einganggewhj,1)FI FI .prueffeld5:i:=int(
+aktneue);IF aktneue<>""CAND aktjgst<>""THEN IF i-1<>int(aktjgst)THEN
+meldungausgeben(meldungandereauswahl,eingangaktneue,1)FI ELIF aktneue<>""
+CAND aktjgst=""THEN IF i<11COR i>14THEN meldungausgeben(meldungfalschejgst,
+eingangaktneue,1)ELIF i+1>int(gewjgst)THEN meldungausgeben(
+meldungandereauswahl,eingangaktneue,1)ELIF i-1=int(gewjgst)THEN IF gewhj="1"
+CAND akthj="2"THEN meldungausgeben(meldungandereauswahl,einganggewhj,1)FI FI
+FI .END PROC prueffeld2bis5;PROC kurszuordnungundumwahllistezeigen:
+standardmeldung(meldungwarten,"");merkeeingang;prueffeld2bis5;IF fstat<>0
+THEN LEAVE kurszuordnungundumwahllistezeigenELSE standardmeldung(
+meldunglistezeigen,"");kurswahlinitialisieren(aktjgst,gewjgst,gewhj,
+schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0THEN
+meldungausgeben(meldungserverfehler,einganggewjgst,1);LEAVE
+kurszuordnungundumwahllistezeigenELIF letzterschueler<ersterschuelerTHEN
+meldungausgeben(meldungkeineschueler,einganggewjgst,1);LEAVE
+kurszuordnungundumwahllistezeigenFI ;kurswahlsperresetzen(kuwa2sperre,
+sperreok);IF NOT sperreokTHEN letztesfeld:=infeld;meldungausgeben(
+meldungparallelanw,letztesfeld,1);LEAVE kurszuordnungundumwahllistezeigenFI ;
+suchindices;zeigelisteFI .zeigeliste:schuelerliste:=trenner;standardstartproc
+(listenmaske);zeigliste(ersterindex);standardnproc.END PROC
+kurszuordnungundumwahllistezeigen;PROC zeigliste(INT CONST zeilennr):
+aktlistennr:=zeilennr;infeld(ersteslistenfeld);FOR iFROM 1UPTO
+anzlistenfelderREP aktname:=wahldatenzumindex(zeilennr+i-1,kzname);changeall(
+aktname,trenner,namenstrenner);standardmaskenfeld(aktname,i*2+1);IF pos(
+schuelerliste,trenner+text(aktlistennr+i-1,3)+trenner)>0THEN
+standardmaskenfeld("x",i*2);aktliste(i):="x"ELSE standardmaskenfeld("",i*2);
+aktliste(i):=""FI PER ;infeld(1);standardfelderausgeben;infeld(
+ersteslistenfeld).END PROC zeigliste;PROC suchindices:TEXT VAR aktname;
+aktname:=eingangrow(eingangfamname);IF aktname=""THEN ersterindex:=
+ersterschuelerELSE vergleichnamenFI .vergleichnamen:aktname:=text(aktname,
+laengefamname);aktnameCAT trenner;aktnameCAT text(eingangrow(eingangrufname),
+laengevname);aktnameCAT trenner;aktnameCAT text(eingangrow(eingangdatum),
+laengegebdat);aktnameCAT trenner;FOR iFROM ersterschuelerUPTO letzterschueler
+REP IF wahldatenzumindex(i,kzname)>=aktnameTHEN ersterindex:=i;LEAVE
+suchindicesFI PER ;ersterindex:=letzterschueler.END PROC suchindices;PROC
+kurszuordnungundumwahllisteblaettern(INT CONST aktion):INT VAR
+ersterschuelerletzterbs,aktfeld:=infeld;IF aktion=1THEN IF aktlistennr<>
+ersterschuelerTHEN analysierekennzeichnungen;ersterindex:=ersterschueler;
+zeigliste(ersterindex);return(1)ELSE fehlermeldungaktionnichtmöglichFI ELIF
+aktion=2THEN ersterschuelerletzterbs:=letzterschueler-anzlistenfelder+1;IF
+aktlistennr<ersterschuelerletzterbsCOR aktlistennr>ersterschuelerletzterbs
+THEN analysierekennzeichnungen;zeigliste(ersterschuelerletzterbs);return(1)
+ELIF aktlistennr=ersterschuelerletzterbsTHEN fehlermeldungaktionnichtmöglich
+FI ELIF aktion=3THEN IF aktlistennr>=letzterschueler-anzlistenfelder+1THEN
+fehlermeldungaktionnichtmöglichELSE analysierekennzeichnungen;zeigliste(
+aktlistennr+anzlistenfelder);return(1)FI ELIF aktion=4THEN IF aktlistennr=
+ersterindexTHEN fehlermeldungaktionnichtmöglichELSE analysierekennzeichnungen
+;IF (aktlistennr-anzlistenfelder+1)<ersterindexTHEN zeigliste(ersterindex)
+ELSE zeigliste(aktlistennr-anzlistenfelder)FI ;return(1)FI FI .
+fehlermeldungaktionnichtmöglich:meldungausgeben(meldungkeinblaettern,aktfeld,
+1);LEAVE kurszuordnungundumwahllisteblaettern.END PROC
+kurszuordnungundumwahllisteblaettern;PROC analysierekennzeichnungen:FOR i
+FROM 1UPTO anzlistenfelderREP IF standardmaskenfeld(i*2)<>aktliste(i)THEN
+schuelerlisteCAT text(aktlistennr+i-1,3);schuelerlisteCAT trennerFI PER .END
+PROC analysierekennzeichnungen;PROC kurszuordnungundumwahllistebearbeiten:
+listenpos:=1;listenbearbeitung:=TRUE ;kopierfunktion:=FALSE ;
+analysierekennzeichnungen;IF schuelerliste=trennerTHEN kurswahlsperrebeenden(
+kuwa2sperre);enter(2);LEAVE kurszuordnungundumwahllistebearbeitenELSE
+schuelerliste:=subtext(schuelerliste,2)FI ;standardstartproc(bearbmaske);
+standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "+aktjgst+
+" in "+gewjgst+"."+gewhj);aktbsseite:=1;aktplblindex:=1;aktindex:=int(subtext
+(schuelerliste,listenpos,listenpos+2));belegeglobalevariablen(aktindex);
+schuelerbearbeiten;standardnproc;listenposINCR 4.END PROC
+kurszuordnungundumwahllistebearbeiten;PROC belegeglobalevariablen(INT CONST
+index):TEXT VAR iddaten:=wahldatenzumindex(index,kzname);INT VAR trenner1pos
+:=pos(iddaten,trenner),trenner2pos:=pos(iddaten,trenner,trenner1pos+1);IF
+dbstatus=0THEN aktname:=text(iddaten,trenner1pos-1);aktvname:=subtext(iddaten
+,trenner1pos+1,trenner2pos-1);aktgebdatum:=subtext(iddaten,trenner2pos+1);
+ELSE aktname:="";aktvname:="";aktgebdatum:=""FI ;eingangrow(eingangfamname):=
+aktname;eingangrow(eingangrufname):=aktvname;eingangrow(eingangdatum):=
+datumrekonversion(aktgebdatum)END PROC belegeglobalevariablen;PROC
+meldungausgeben(INT CONST meldung,gewfeld,gewruecksprung):fstat:=1;
+standardmeldung(meldung,"");infeld(gewfeld);return(gewruecksprung)END PROC
+meldungausgeben;PROC merkeeingang:FOR iFROM 2UPTO anzfeldereingangREP
+eingangrow(i):=standardmaskenfeld(i)PER END PROC merkeeingang;PROC
+logbucheintragvornehmen:logmeldung:=logtext1;logmeldungCAT gewjgst;logmeldung
+CAT punkt;logmeldungCAT gewhj;logmeldungCAT text1;logmeldungCAT aktname;
+logmeldungCAT komma;logmeldungCAT aktvname;logmeldungCAT komma;logmeldungCAT
+aktgebdatum;logmeldungCAT text2;logeintrag(logmeldung)END PROC
+logbucheintragvornehmen;END PACKET
+kurszuordnungundumwahlfuereinzelneschuelersek2
+
diff --git a/app/schulis/2.2.1/src/2.kw anschr kurslisten sek2 b/app/schulis/2.2.1/src/2.kw anschr kurslisten sek2
new file mode 100644
index 0000000..2f79a1b
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.kw anschr kurslisten sek2
@@ -0,0 +1,90 @@
+PACKET kwanschrkurslistensek2DEFINES kursliauskunfteingang,
+kursliauskunftstarten,kursliauskunftsonderwerte,kursliauskunftscanbedingung,
+kursliauskunftdruckdateibauen:LET swkurs=520,swanrede=521,swlehrer=522,
+swklausur=523,swname=524,swvorname=525,swgebdat=526,maske=
+"ms anschr kwkursli sek2 eingang",fnrjgst=2,fnrfach=3,fnrkennung=4,fnrakthj=5
+,fnrgeplhj=6,fnrausgbs=7,fnrausgdr=8,niltext="",blank=" ",null=0,satztrenner=
+"$",feldtrenner="�",mnrbittewarten=69,mnrbittepraeziser=129,mnrkeinekwdatenda
+=406,mnrjgstfalsch=404;INT VAR mnrallgemein;TEXT CONST dateimitvordruck1:=
+"vordruck1 kursli kopfueb",dateimitvordruck2:="vordruck2 kursli zeile";INT
+VAR index,status,dbstatusgemerkt,fehler,zeilenzahl,zusatzzeilen,
+zeilenhilfszahl,anzahlsaetze,satzanfpos,feldpos1,feldpos2;TEXT VAR hj,
+fuerkwsj,jgst,fachkennung,fach,kennung,kwdaten,kurs,anredetext,lehrer;BOOL
+VAR bestfach,bildschirmausgabe,akthjgewaehlt,hilfsdateida;PROC
+kursliauskunfteingang:standardvproc(maske)END PROC kursliauskunfteingang;
+PROC kursliauskunftstarten:bestfach:=FALSE ;standardpruefe(5,fnrausgbs,
+fnrausgdr,null,niltext,status);IF status<>0THEN infeld(status);return(1)ELSE
+standardpruefe(5,fnrakthj,fnrgeplhj,null,niltext,status);IF status<>0THEN
+infeld(status);return(1)ELSE bildschirmausgabe:=standardmaskenfeld(fnrausgdr)
+=niltext;akthjgewaehlt:=standardmaskenfeld(fnrgeplhj)=niltext;jgst:=
+standardmaskenfeld(fnrjgst);fach:=standardmaskenfeld(fnrfach);kennung:=
+standardmaskenfeld(fnrkennung);IF weiterepruefungenokTHEN startenausfuehren
+ELSE standardmeldung(mnrallgemein,niltext);return(1)FI ;FI ;FI ;.
+weiterepruefungenok:standardpruefe(2,fnrjgst,null,null,niltext,status);IF
+status<>0THEN infeld(fnrjgst);mnrallgemein:=mnrjgstfalsch;LEAVE
+weiterepruefungenokWITH FALSE FI ;IF int(jgst)<11COR int(jgst)>13THEN infeld(
+fnrjgst);mnrallgemein:=mnrjgstfalsch;LEAVE weiterepruefungenokWITH FALSE FI ;
+IF (fach=niltextAND kennung<>niltext)THEN infeld(fnrfach);mnrallgemein:=
+mnrbittepraeziser;LEAVE weiterepruefungenokWITH FALSE FI ;IF (fach<>niltext
+AND kennung=niltext)THEN infeld(fnrkennung);mnrallgemein:=mnrbittepraeziser;
+LEAVE weiterepruefungenokWITH FALSE FI ;IF NOT kwdatenraumokTHEN infeld(
+fnrjgst);mnrallgemein:=mnrkeinekwdatenda;LEAVE weiterepruefungenokWITH FALSE
+FI ;inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,fuerkwsj);putwert(
+fnrlvhj,hj);putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,text(fach,2)+
+kennung);IF fach<>niltextAND kennung<>niltextTHEN bestfach:=TRUE ;search(
+dnrlehrveranstaltungen,TRUE );IF dbstatus<>0THEN mnrallgemein:=
+mnrkeinekwdatenda;LEAVE weiterepruefungenokWITH FALSE FI ;ELSE search(
+dnrlehrveranstaltungen,FALSE );IF dbstatus<>0COR wert(fnrlvjgst)<>jgstCOR
+wert(fnrlvhj)<>hjCOR wert(fnrlvsj)<>fuerkwsjTHEN mnrallgemein:=
+mnrkeinekwdatenda;LEAVE weiterepruefungenokWITH FALSE FI ;FI ;kurs:=text(fach
+,2)+kennung;TRUE .kwdatenraumok:hj:=schulkenndatum("Schulhalbjahr");IF
+akthjgewaehltTHEN kurswahlinitialisieren(jgst,jgst,hj,niltext,fuerkwsj)ELSE
+IF hj="1"THEN hj:="2"ELSE hj:="1";jgst:=text(int(jgst)+1);FI ;
+kurswahlinitialisieren(jgst,jgst,hj,niltext,fuerkwsj)FI ;kurswahlbasisholen(
+fehler);fehler=0.startenausfuehren:setzesonderwerteschulkenndaten;IF bestfach
+THEN index:=ixlvsjhjkennELSE index:=dnrlehrveranstaltungenFI ;standardmeldung
+(mnrbittewarten,niltext);zusammengesetztesanschreiben(index,bildschirmausgabe
+,FALSE ,BOOL PROC kursliauskunftsonderwerte,BOOL PROC
+kursliauskunftscanbedingung,TEXT PROC kursliauskunftdruckdateibauen)END PROC
+kursliauskunftstarten;BOOL PROC kursliauskunftscanbedingung:BOOL VAR ok;IF
+bestfachTHEN ok:=dbstatus=0AND jgst=wert(fnrlvjgst)AND kurs=wert(
+fnrlvfachkennung)ELSE ok:=dbstatus=0AND jgst=wert(fnrlvjgst)FI ;okEND PROC
+kursliauskunftscanbedingung;BOOL PROC kursliauskunftsonderwerte:BOOL VAR
+schuelerda:=FALSE ;initialisieresonderwerte;fachkennung:=wert(
+fnrlvfachkennung);adressat(fachkennung);fach:=subtext(fachkennung,1,2);
+kennung:=subtext(fachkennung,3,6);dbstatusgemerkt:=dbstatus;kwdaten:=
+schuelerundklausur(fach,kennung,niltext);IF length(kwdaten)<>0THEN schuelerda
+:=TRUE ;setzesonderwert(swkurs,wert(fnrlvjgst)+blank+fach+blank+kennung);
+inittupel(dnrlehrer);putwert(fnrlparaphe,wert(fnrlvparaphe));search(dnrlehrer
+,TRUE );IF dbstatus=0THEN lehrer:=wert(fnrlamtsbeztitel);lehrerCAT blank;
+lehrerCAT wert(fnrlzusatz);lehrerCAT blank;lehrerCAT wert(fnrlfamname);IF
+wert(fnrlgeschlecht)="m"THEN anredetext:="Herr "ELSE anredetext:="Frau "FI ;
+FI ;setzesonderwert(swanrede,anredetext);setzesonderwert(swlehrer,lehrer);
+dbstatus(dbstatusgemerkt);FI ;dbstatus=0AND schuelerdaEND PROC
+kursliauskunftsonderwerte;TEXT PROC kursliauskunftdruckdateibauen:LET
+druckdatei="liste.1",hilfsdatei="hilfsdatei";vordruckeholen;
+setzemitseitennummern(TRUE );setzeanzahlderzeichenprozeile(78);
+druckvorbereiten;zeilenzahl:=0;zusatzzeilen:=0;briefalternative(
+dateimitvordruck1,hilfsdatei);hilfsdateiindruckdatei(hilfsdatei);hilfsdateida
+:=FALSE ;satzanfpos:=pos(kwdaten,satztrenner);WHILE satzanfpos<>0AND
+satzanfpos<length(kwdaten)REP feldpos1:=pos(kwdaten,feldtrenner,satzanfpos);
+setzesonderwert(swklausur,subtext(kwdaten,satzanfpos+1,feldpos1-1));feldpos2
+:=pos(kwdaten,feldtrenner,feldpos1+1);setzesonderwert(swname,subtext(kwdaten,
+feldpos1+1,feldpos2-1));feldpos1:=pos(kwdaten,feldtrenner,feldpos2+1);
+setzesonderwert(swvorname,subtext(kwdaten,feldpos2+1,feldpos1-1));satzanfpos
+:=pos(kwdaten,satztrenner,feldpos1);IF satzanfpos=0THEN setzesonderwert(
+swgebdat,subtext(kwdaten,feldpos1+1,length(kwdaten)))ELSE setzesonderwert(
+swgebdat,subtext(kwdaten,feldpos1+1,satzanfpos-1))FI ;briefalternative(
+dateimitvordruck2,hilfsdatei);hilfsdateida:=TRUE ;PER ;IF hilfsdateidaTHEN
+hilfsdateiindruckdatei(hilfsdatei);FI ;drucknachbereitenohneausdrucken;
+vordruckeloeschen;druckdatei.vordruckeholen:fetch(dateimitvordruck1,/
+"anschreiben server");fetch(dateimitvordruck2,/"anschreiben server");.
+vordruckeloeschen:forget(dateimitvordruck1,quiet);forget(dateimitvordruck2,
+quiet);END PROC kursliauskunftdruckdateibauen;PROC hilfsdateiindruckdatei(
+TEXT CONST hilfsdatei):FILE VAR f;INT VAR i;TEXT VAR zeile;f:=sequentialfile(
+input,hilfsdatei);zeilenhilfszahl:=lines(f);IF zeilenzahl+zeilenhilfszahl+
+zusatzzeilen>=drucklaengeTHEN seitenwechsel;zeilenzahl:=0;FI ;FOR iFROM 1
+UPTO zeilenhilfszahlREP getline(f,zeile);druckzeileschreiben(zeile)PER ;
+forget(hilfsdatei,quiet);zeilenzahlINCR zeilenhilfszahlEND PROC
+hilfsdateiindruckdatei;END PACKET kwanschrkurslistensek2;
+
diff --git a/app/schulis/2.2.1/src/2.likw kurskombinationen sek2 b/app/schulis/2.2.1/src/2.likw kurskombinationen sek2
new file mode 100644
index 0000000..35caa9d
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.likw kurskombinationen sek2
@@ -0,0 +1,166 @@
+PACKET likwkurskombinatilonensek2DEFINES kurskombinationmaskebearbeiten,
+kurskombinationggferstellen,kurskombinationzeigen,kurskombinationendrucken:
+LET maske="ms kurskombination auszaehlen sek2 eingang",fnr2fuerjgst=2,
+fnr3fuerhj=3,fnr4jgstls=4,fnr5jgstneu=5,fnr6kurswahl=6,fnr7bestart=7,
+fnr8klausur=8,fnr9bs=9,fnr10dr=10,mnrjgstfalsch=404,mnrjgstfehlt=172,
+mnrhjfalsch=405,mnrkeinekwdatenda=406,mnrkeinedbdatenda=407,
+mnrbearbeitetwerden=352,mnrlistewirdgedruckt=58,mnrbittewarten=69,
+mnrlistewirdaufbereitet=190;INT VAR mnrallgemein;TEXT VAR mnrzusatz;TEXT
+CONST mark:="#";LET niltext="",punkt=".",querstrich="/",blank=" ",
+blankklammer=" )",doppelpunkt=":",null=0,neuangemeldete="N",allederjgst="",
+ohneneuang="O";BOOL VAR bildschirmausgabe,kurswahlen,lsundneue,nurneue,nurls,
+bestimmtekursart;TEXT VAR dbsj,dbhj,dbjgst,fuerkwsj,fuerhj,fuerjgst,jgstls,
+jgstneu,hilfsstring,kursart,klausur,kennung,fachart,lvart,fachkennung1,
+fachkennung2,fachart1,fachart2,kursart1,kursart2;LET maxkurse=200,maxspalten=
+13;TEXT CONST ueberschrift3:="-------:"+13*"----+";TEXT VAR ueberschrift1,
+ueberschrift2,zeile;LET ausgfeldlaenge=1,AUSGFELD =ROW ausgfeldlaengeTEXT ,
+AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;
+AUSGKOPFDRUCK VAR ausgkopfdruck;LET ausgkopflaenge=2,ueberschriftenzeilen=2;
+TEXT CONST kopfueb1teil1:="Wahlergebnis für Jgst. ",kopfueb1teil2:=
+" im Schuljahr ",kopfueb1teil3:=" (Art/Klausur: ",kopfueb2teil1:=
+"Schüler der jetzigen Jgst. ",kopfueb2teil2:=" und der ",kopfueb2teil3:=
+"Neuangemeldeten zur Jgst. ";TEXT VAR textueb1:="",textueb2:="";INT VAR
+status,dbstatusmerker,zaehler,x,y,z,anzangebote,anztabellen,anzspaltenschluss
+,anfang,ende,zeilenzaehler,druckzeilenzahl;LET datenraum="datenraum";LET
+ZEILE =STRUCT (TEXT angebot,ROW maxkurseINT anzahl);BOUND ROW maxkurseZEILE
+VAR zeilespalte;ROW maxspaltenINT VAR summen;PROC
+kurskombinationmaskebearbeiten:standardvproc(maske);END PROC
+kurskombinationmaskebearbeiten;PROC kurskombinationggferstellen:lsundneue:=
+FALSE ;nurls:=FALSE ;nurneue:=FALSE ;standardmeldung(mnrbittewarten,niltext);
+standardpruefe(5,fnr9bs,fnr10dr,null,niltext,status);IF status<>0THEN infeld(
+status);return(1)ELSE fuerjgst:=standardmaskenfeld(fnr2fuerjgst);fuerhj:=
+standardmaskenfeld(fnr3fuerhj);jgstls:=standardmaskenfeld(fnr4jgstls);jgstneu
+:=standardmaskenfeld(fnr5jgstneu);IF NOT eingabenzujgstundhjkorrektTHEN
+standardmeldung(mnrallgemein,niltext);return(1);ELSE kursart:=
+standardmaskenfeld(fnr7bestart);klausur:=standardmaskenfeld(fnr8klausur);
+bestimmtekursart:=kursart<>niltext;kurswahlen:=standardmaskenfeld(
+fnr6kurswahl)<>niltext;bildschirmausgabe:=standardmaskenfeld(fnr10dr)=niltext
+;IF NOT datenraumfürgewaehltessjdaTHEN standardmeldung(mnrkeinekwdatenda,
+niltext);return(1);ELSE IF angebotelvsoderfaecherimrowTHEN
+druckdateifuellenundausgebenELSE standardmeldung(mnrkeinedbdatenda,mnrzusatz+
+mark);return(1)FI ;FI ;FI ;FI ;.eingabenzujgstundhjkorrekt:dbhj:=
+schulkenndatum("Schulhalbjahr");dbsj:=schulkenndatum("Schuljahr");INT VAR
+jgst;standardpruefe(2,fnr2fuerjgst,null,null,niltext,status);IF status<>0
+THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE FI ;jgst:=int(fuerjgst);IF jgst<11COR
+jgst>13THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE FI ;IF fuerhj<>"1"AND fuerhj<>"2"THEN
+mnrallgemein:=mnrhjfalsch;infeld(fnr3fuerhj);LEAVE eingabenzujgstundhjkorrekt
+WITH FALSE FI ;IF jgstls=niltextAND jgstneu=niltextTHEN mnrallgemein:=
+mnrjgstfehlt;infeld(fnr4jgstls);LEAVE eingabenzujgstundhjkorrektWITH FALSE
+FI ;jgst:=int(jgstls);IF jgstls<>niltextTHEN standardpruefe(2,fnr4jgstls,null
+,null,niltext,status);IF status<>0COR (jgst<10COR jgst>13)THEN mnrallgemein:=
+mnrjgstfalsch;infeld(fnr4jgstls);LEAVE eingabenzujgstundhjkorrektWITH FALSE
+FI ;FI ;jgst:=int(jgstneu);IF jgstneu<>niltextTHEN standardpruefe(2,
+fnr5jgstneu,null,null,niltext,status);IF status<>0COR (jgst<11COR jgst>13)
+THEN mnrallgemein:=mnrhjfalsch;infeld(fnr5jgstneu);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE FI ;FI ;IF jgstls<>niltextAND jgstneu<>
+niltextTHEN IF int(jgstls)+1=int(jgstneu)AND jgstneu<=fuerjgstTHEN lsundneue
+:=TRUE ELSE mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE FI ;ELIF jgstls=niltextTHEN IF jgstneu>
+fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE ELSE nurneue:=TRUE FI ;ELSE IF jgstls>
+fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE ELIF (jgstls="10"AND dbhj="1")COR (
+jgstls=fuerjgstAND fuerhj<dbhj)THEN mnrallgemein:=mnrhjfalsch;infeld(
+fnr3fuerhj);LEAVE eingabenzujgstundhjkorrektWITH FALSE ELSE nurls:=TRUE ;FI ;
+FI ;mnrallgemein:=1;TRUE .datenraumfürgewaehltessjda:BOOL VAR ok:=FALSE ;INT
+VAR fehler;IF nurneueTHEN jgstls:=text(int(jgstneu)-1);kurswahlinitialisieren
+(jgstls,fuerjgst,fuerhj,neuangemeldete,fuerkwsj);kurswahlbasisholen(fehler);
+ok:=fehler=0;ELIF lsundneueTHEN kurswahlinitialisieren(jgstls,fuerjgst,fuerhj
+,allederjgst,fuerkwsj);kurswahlbasisholen(fehler);ok:=fehler=0;ELSE
+kurswahlinitialisieren(jgstls,fuerjgst,fuerhj,ohneneuang,fuerkwsj);
+kurswahlbasisholen(fehler);ok:=fehler=0;FI ;okEND PROC
+kurskombinationggferstellen;PROC kurskombinationendrucken(BOOL CONST
+nachbsausgabe):IF nachbsausgabeTHEN rename("Kurskombinationen auszaehlen",
+"liste.1");FILE VAR f:=sequentialfile(output,"liste.1");output(f);
+drucknachbereiten;return(2);ELSE drucknachbereiten;return(1);FI ;
+standardmeldung(mnrlistewirdgedruckt,niltext);forget(datenraum,quiet);forget(
+"liste.1",quiet);END PROC kurskombinationendrucken;PROC kurskombinationzeigen
+:IF exists("liste.1")THEN rename("liste.1","Kurskombinationen auszaehlen")FI
+;zeigedatei("Kurskombinationen auszaehlen","a");forget(datenraum,quiet);END
+PROC kurskombinationzeigen;BOOL PROC angebotelvsoderfaecherimrow:BOOL VAR
+angeboteda;forget("datenraum",quiet);forget("Kurskombinationen auszaehlen",
+quiet);zeilespalte:=new(datenraum);IF (nurlsAND fuerhj=dbhjAND fuerkwsj=dbsj)
+THEN dbjgst:=jgstlsELSE IF nurlsCOR lsundneueTHEN IF dbhj="2"THEN dbjgst:=
+text(int(jgstls)+1)ELSE dbjgst:=jgstlsFI ;ELSE IF dbhj="2"THEN dbjgst:=
+jgstneuELSE dbjgst:=text(int(jgstneu)-1)FI ;FI ;geplanteshjundsjberechnen(
+dbhj,dbsj);FI ;anzangebote:=0;zeilespalte(1).angebot:=niltext;IF kurswahlen
+THEN mnrzusatz:="Datei Lehrveranstaltungen";inittupel(dnrlehrveranstaltungen)
+;putwert(fnrlvjgst,dbjgst);statleseschleife(dnrlehrveranstaltungen,dbsj,dbhj,
+fnrlvsj,fnrlvhj,PROC angebotlvmerken);ELSE mnrzusatz:="Datei Fächerangebot";
+inittupel(dnrfaecherangebot);putwert(fnrfangjgst,dbjgst);statleseschleife(
+dnrfaecherangebot,dbsj,dbhj,fnrfangsj,fnrfanghj,PROC angebotfangmerken);FI ;
+angeboteda:=anzangebote>0;angebotedaEND PROC angebotelvsoderfaecherimrow;
+PROC angebotlvmerken(BOOL VAR ende):IF status<>0COR wert(fnrlvjgst)<>dbjgst
+THEN ende:=TRUE ;ELSE lvart:=wert(fnrlvart);IF (NOT bestimmtekursart)COR
+lvart=kursartTHEN anzangeboteINCR 1;zeilespalte(anzangebote).angebot:=text(
+wert(fnrlvfachkennung),6)+lvart;FI ;FI ;END PROC angebotlvmerken;PROC
+angebotfangmerken(BOOL VAR ende):IF status<>0COR wert(fnrfangjgst)<>dbjgst
+THEN ende:=TRUE ;ELSE fachart:=wert(fnrfangart);IF (NOT bestimmtekursart)COR
+fachart=kursartTHEN anzangeboteINCR 1;zeilespalte(anzangebote).angebot:=text(
+wert(fnrfangfach),2)+fachart;FI ;FI ;END PROC angebotfangmerken;PROC
+druckdateifuellenundausgeben:zeilenzaehler:=0;standardmeldung(
+mnrlistewirdaufbereitet,niltext);wahldatenauskwdatenrauminrowablegen;
+anztabellen:=anzangeboteDIV maxspalten;anzspaltenschluss:=anzangeboteMOD
+maxspalten;ueberschriftenimdruckkopfbauen;variablenfuerdrucksetzen;
+druckvorbereiten;initdruckkopf(textueb1,textueb2);FOR zFROM 1UPTO anztabellen
+REP ende:=z*maxspalten;anfang:=ende-(maxspalten-1);
+tabellevonbisspalteausgeben(maxspalten);IF z<anztabellenTHEN seitenwechselFI
+;PER ;IF anzspaltenschluss<>0THEN IF anztabellen<>0THEN anfang:=ende+1;
+seitenwechselELSE anfang:=1FI ;ende:=anzangebote;tabellevonbisspalteausgeben(
+anzspaltenschluss);FI ;IF bildschirmausgabeTHEN kurskombinationzeigenELSE
+kurskombinationendrucken(FALSE )FI ;.variablenfuerdrucksetzen:druckzeilenzahl
+:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.
+ueberschriftenimdruckkopfbauen:textueb1:=kopfueb1teil1;textueb1CAT fuerjgst;
+textueb1CAT punkt;textueb1CAT fuerhj;textueb1CAT kopfueb1teil2;textueb1CAT
+subtext(fuerkwsj,1,2)+querstrich;textueb1CAT subtext(fuerkwsj,3,4);IF
+bestimmtekursartOR klausur<>niltextTHEN textueb1CAT kopfueb1teil3;textueb1
+CAT kursart+querstrich;textueb1CAT klausur+blankklammer;FI ;IF NOT (fuerhj=
+dbhjAND fuerjgst=jgstls)THEN geplanteshjundsjberechnen(dbhj,dbsj);FI ;IF
+nurneueTHEN textueb2:=kopfueb2teil3;textueb2CAT jgstneu;ELSE textueb2:=
+kopfueb2teil1;textueb2CAT jgstls;IF lsundneueTHEN textueb2CAT kopfueb2teil2;
+textueb2CAT kopfueb2teil3;textueb2CAT jgstneu;FI ;FI ;END PROC
+druckdateifuellenundausgeben;PROC wahldatenauskwdatenrauminrowablegen:FOR x
+FROM 1UPTO anzangeboteREP y:=1;IF kurswahlenTHEN WHILE y<=xREP
+kombiationenlvsmerken(x,y);yINCR 1;PER ;ELSE WHILE y<=xREP
+kombinationenfaechermerken(x,y);yINCR 1;PER ;FI ;PER ;END PROC
+wahldatenauskwdatenrauminrowablegen;PROC kombiationenlvsmerken(INT CONST zeil
+,spal):fachkennung1:=zeilespalte(zeil).angebot;fachkennung2:=zeilespalte(spal
+).angebot;IF NOT bestimmtekursartTHEN kursart1:=subtext(fachkennung1,7,7);
+kursart2:=subtext(fachkennung2,7,7);ELSE kursart1:=kursart;kursart2:=kursart
+FI ;dbstatusmerker:=dbstatus;zeilespalte(zeil).anzahl(spal):=
+anzahlschuelermitwahl(subtext(fachkennung1,1,2),subtext(fachkennung1,3,6),
+kursart1,klausur,subtext(fachkennung2,1,2),subtext(fachkennung2,3,6),kursart2
+,klausur);dbstatus(dbstatusmerker);END PROC kombiationenlvsmerken;PROC
+kombinationenfaechermerken(INT CONST zeil,spal):fachart1:=zeilespalte(zeil).
+angebot;fachart2:=zeilespalte(spal).angebot;IF bestimmtekursartTHEN kursart1
+:=kursart;kursart2:=kursart;ELSE kursart1:=subtext(fachart1,3,3);kursart2:=
+subtext(fachart2,3,3);FI ;kennung:=niltext;dbstatusmerker:=dbstatus;
+zeilespalte(zeil).anzahl(spal):=anzahlschuelermitwahl(subtext(fachart1,1,2),
+kennung,kursart1,klausur,subtext(fachart2,1,2),kennung,kursart2,klausur);
+dbstatus(dbstatusmerker);END PROC kombinationenfaechermerken;PROC
+tabellevonbisspalteausgeben(INT CONST spaltenzahl):INT VAR s,kombinationen;
+FOR sFROM 1UPTO maxspaltenREP summen(s):=0PER ;zeilenzaehler:=0;ueberschrift1
+:=" :";ueberschrift2:=" :";FOR zaehlerFROM anfangUPTO endeREP
+ueberschrift1CAT text(zeilespalte(zaehler).angebot,2)+" :";IF NOT kurswahlen
+THEN ueberschrift2CAT subtext(zeilespalte(zaehler).angebot,3,3)+" :";ELSE
+ueberschrift2CAT subtext(zeilespalte(zaehler).angebot,3,6)+":";FI ;PER ;
+druckkopfschreiben;setzemitseitennummern(TRUE );druckzeileschreiben(
+ueberschrift1);druckzeileschreiben(ueberschrift2);druckzeileschreiben(
+ueberschrift3);zeilenzaehlerINCR 12;FOR zaehlerFROM 1UPTO anzangeboteREP s:=1
+;hilfsstring:=zeilespalte(zaehler).angebot;zeile:=text(hilfsstring,2)+blank;
+IF kurswahlenTHEN zeileCAT subtext(hilfsstring,3,6)+doppelpunkt;ELSE zeile
+CAT subtext(hilfsstring,3,3)+3*blank+doppelpunktFI ;FOR xFROM anfangUPTO ende
+REP IF x<zaehlerTHEN kombinationen:=zeilespalte(zaehler).anzahl(x);zeileCAT
+text(kombinationen,3)+blank+doppelpunkt;summen(s)INCR kombinationen;ELIF x=
+zaehlerTHEN zeileCAT " * :"ELSE kombinationen:=zeilespalte(x).anzahl(zaehler
+);zeileCAT text(kombinationen,3)+" :";summen(s)INCR kombinationen;FI ;sINCR 1
+;PER ;zeilenzaehlerINCR 1;IF drucklaenge-1=zeilenzaehlerTHEN seitenwechsel;
+druckzeileschreiben(ueberschrift1);druckzeileschreiben(ueberschrift2);
+druckzeileschreiben(ueberschrift3);zeilenzaehler:=4;FI ;druckzeileschreiben(
+zeile);PER ;druckzeileschreiben(ueberschrift3);zeile:="Summe :";FOR sFROM 1
+UPTO spaltenzahlREP zeileCAT text(summen(s),3)+blank+doppelpunkt;PER ;
+zeilenzaehlerINCR 2;druckzeileschreiben(zeile);END PROC
+tabellevonbisspalteausgeben;END PACKET likwkurskombinatilonensek2
+
diff --git a/app/schulis/2.2.1/src/2.likw schuelerwahl sek2 b/app/schulis/2.2.1/src/2.likw schuelerwahl sek2
new file mode 100644
index 0000000..7b395a3
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.likw schuelerwahl sek2
@@ -0,0 +1,173 @@
+PACKET likwschuelerwahlsek2DEFINES kurswahlauszaehlenspezielleteile:LET
+AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,
+AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR
+ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;#K onstantenzurM askenbearbeitung#
+LET maskeschuelerwahl="ms schuelerwahl auszaehlen sek2 eingang",fnr2fuerjgst=
+2,fnr3fuerhj=3,fnr4jgstls=4,fnr5jgstneu=5,fnr6kurswahl=6,fnr7bs=7,fnr8dr=8,
+ausgfeldlaenge=1,anzahlobjekteprobildschirm=13,ueberschriftenzeilen=2,#
+imstand.D ruckkopf#ausgkopflaenge=2,spaltentrenner=" :",spaltenbreite1=7,
+spaltenbreite2=6,spaltenbreite3bis13=3,bsanfpos=2,klausurbestand=
+"c02 abitur klausur";TEXT CONST kopfueb1teil1:="Wahlergebnis für Jgst. ",
+kopfueb1teil2:=" im Schuljahr ",kopfueb2teil1:="Schüler der jetzigen Jgst. ",
+kopfueb2teil2:=" und der ",kopfueb2teil3:="Neuangemeldeten zur Jgst. ",
+unterstreichung:="--------+-------+"+11*"----+",tabueb1:="Angebot gewählt ";
+TEXT VAR tabueb2,kwsek2auszaehlenueb:="Wahlergebnis auszählen",klausurkuerzel
+,textueb1:="",textueb2:="";INT VAR bildanfang,druckzeilenzahl,status,
+dbstatusmerker,aktuellerindex,feldnr;LET mnrjgstfalsch=404,mnrjgstfehlt=172,
+mnrhjfalsch=405,mnrkeinekwdatenda=406,mnrkeinekuerzelda=408,
+mnrbearbeitetwerden=352,mnrbittewarten=69;INT VAR mnrallgemein;LET niltext=""
+,punkt=".",querstrich="/",blank=" ",vierblank=" ",null=0,maxkuerzel=11,
+zwoelf=12;ROW zwoelfINT VAR gesamtundeinzelsummen;INT VAR anzkuerzel,x;LET
+neuangemeldete="N",allederjgst="",ohneneuang="O";BOOL VAR bildschirmausgabe,
+kurswahlen,nurls,lsundneue,nurneue;TEXT VAR dbsj,dbhj,dbjgst,fuerkwsj,
+fuerjgst:="",fuerhj:="",jgstls:="",jgstneu:="",fach,art,kennung,klkuerzel;
+BOOL PROC multistop:IF kurswahlenTHEN dbstatus=0AND dbjgst=wert(fnrlvjgst)
+AND dbsj=wert(fnrlvsj)AND dbhj=wert(fnrlvhj)ELSE dbstatus=0AND dbjgst=wert(
+fnrfangjgst)AND dbsj=wert(fnrfangsj)AND dbhj=wert(fnrfanghj)FI END PROC
+multistop;BOOL PROC multistopsim:BOOL VAR b;setzebestandende(FALSE );b:=
+multistop;IF NOT multistopTHEN setzebestandende(TRUE )FI ;bEND PROC
+multistopsim;PROC kurswahlauszaehlenspezielleteile(INT CONST nr):SELECT nrOF
+CASE 1:kwsek2auszaehlendialogvorbereitenCASE 2:
+kwsek2auszaehleneingabenrichtigCASE 3:kwsek2auszaehlenlistenvorbereitenCASE 4
+:kwsek2auszaehlendruckvorbereitenCASE 5:kwsek2auszaehlenseitedruckenCASE 6:
+kwsek2auszaehlenbildschirmvorbereitenCASE 7:kwsek2auszaehlenseitezeigen
+ENDSELECT .END PROC kurswahlauszaehlenspezielleteile;PROC
+kwsek2auszaehlendialogvorbereiten:kwsek2auszaehlenueb:=text(vergleichsknoten)
+;setzeanfangswerte(maskeschuelerwahl,bsanfpos)END PROC
+kwsek2auszaehlendialogvorbereiten;PROC kwsek2auszaehleneingabenrichtig:nurls
+:=FALSE ;lsundneue:=FALSE ;nurneue:=FALSE ;standardmeldung(mnrbittewarten,
+niltext);standardpruefe(5,fnr7bs,fnr8dr,null,niltext,status);IF status<>0
+THEN infeld(status);setzeeingabetest(FALSE )ELSE fuerjgst:=standardmaskenfeld
+(fnr2fuerjgst);fuerhj:=standardmaskenfeld(fnr3fuerhj);jgstls:=
+standardmaskenfeld(fnr4jgstls);jgstneu:=standardmaskenfeld(fnr5jgstneu);IF
+NOT eingabenzujgstundhjkorrektTHEN standardmeldung(mnrallgemein,niltext);
+setzeeingabetest(FALSE )ELSE kurswahlen:=standardmaskenfeld(fnr6kurswahl)<>
+niltext;bildschirmausgabe:=standardmaskenfeld(fnr8dr)=niltext;IF NOT (
+datenraumfürgewaehltessjda)THEN standardmeldung(mnrkeinekwdatenda,niltext);
+setzeeingabetest(FALSE )ELSE IF keineklausurkuerzelvorhandenTHEN
+standardmeldung(mnrkeinekuerzelda,niltext);setzeeingabetest(FALSE )ELSE
+setzeeingabetest(TRUE );setzeausgabedrucker(NOT bildschirmausgabe)FI ;FI ;FI
+;FI ;.keineklausurkuerzelvorhanden:BOOL VAR nix:=TRUE ;klausurkuerzel:=
+niltext;inittupel(dnrschluessel);putwert(fnrschlsachgebiet,klausurbestand);
+search(dnrschluessel,FALSE );anzkuerzel:=0;IF dbstatus<>0COR wert(
+fnrschlsachgebiet)<>klausurbestandTHEN LEAVE keineklausurkuerzelvorhanden
+WITH nixELSE FOR xFROM 1UPTO maxkuerzelREP IF wert(fnrschlsachgebiet)=
+klausurbestandTHEN klausurkuerzelCAT wert(fnrschlschluessel);anzkuerzelINCR 1
+;succ(dnrschluessel)FI ;PER ;FI ;nix:=anzkuerzel=0;nix.
+eingabenzujgstundhjkorrekt:dbhj:=schulkenndatum("Schulhalbjahr");dbsj:=
+schulkenndatum("Schuljahr");INT VAR jgst;standardpruefe(2,fnr2fuerjgst,null,
+null,niltext,status);IF status<>0THEN mnrallgemein:=mnrjgstfalsch;infeld(
+fnr2fuerjgst);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;jgst:=int(
+fuerjgst);IF jgst<11COR jgst>13THEN mnrallgemein:=mnrjgstfalsch;infeld(
+fnr2fuerjgst);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;IF fuerhj<>"1"
+AND fuerhj<>"2"THEN mnrallgemein:=mnrhjfalsch;infeld(fnr3fuerhj);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE FI ;IF jgstls=niltextAND jgstneu=niltext
+THEN mnrallgemein:=mnrjgstfehlt;infeld(fnr4jgstls);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE FI ;jgst:=int(jgstls);IF jgstls<>niltext
+THEN standardpruefe(2,fnr4jgstls,null,null,niltext,status);IF status<>0COR (
+jgst<10COR jgst>13)THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE FI ;FI ;jgst:=int(jgstneu);IF jgstneu<>
+niltextTHEN standardpruefe(2,fnr5jgstneu,null,null,niltext,status);IF status
+<>0COR (jgst<11COR jgst>13)THEN mnrallgemein:=mnrhjfalsch;infeld(fnr5jgstneu)
+;LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;FI ;IF jgstls<>niltextAND
+jgstneu<>niltextTHEN IF int(jgstls)+1=int(jgstneu)AND jgstneu<=fuerjgstTHEN
+lsundneue:=TRUE ELSE mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE FI ;ELIF jgstls=niltextTHEN IF jgstneu>
+fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE ELSE nurneue:=TRUE FI ;ELSE IF jgstls>
+fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE
+eingabenzujgstundhjkorrektWITH FALSE ELIF (jgstls="10"AND dbhj="1")COR (
+jgstls=fuerjgstAND fuerhj<dbhj)THEN mnrallgemein:=mnrhjfalsch;infeld(
+fnr3fuerhj);LEAVE eingabenzujgstundhjkorrektWITH FALSE ELSE nurls:=TRUE ;FI ;
+FI ;mnrallgemein:=1;TRUE .datenraumfürgewaehltessjda:BOOL VAR ok:=FALSE ;INT
+VAR fehler;IF nurneueTHEN jgstls:=text(int(jgstneu)-1);kurswahlinitialisieren
+(jgstls,fuerjgst,fuerhj,neuangemeldete,fuerkwsj);kurswahlbasisholen(fehler);
+ok:=fehler=0;ELIF lsundneueTHEN kurswahlinitialisieren(jgstls,fuerjgst,fuerhj
+,allederjgst,fuerkwsj);kurswahlbasisholen(fehler);ok:=fehler=0;ELSE
+kurswahlinitialisieren(jgstls,fuerjgst,fuerhj,ohneneuang,fuerkwsj);
+kurswahlbasisholen(fehler);ok:=fehler=0;FI ;okEND PROC
+kwsek2auszaehleneingabenrichtig;PROC kwsek2auszaehlenlistenvorbereiten:BOOL
+VAR b;initspalten;setzespaltentrenner(spaltentrenner);textueb1:=kopfueb1teil1
+;textueb1CAT fuerjgst;textueb1CAT punkt;textueb1CAT fuerhj;textueb1CAT
+kopfueb1teil2;textueb1CAT subtext(fuerkwsj,1,2)+querstrich;textueb1CAT
+subtext(fuerkwsj,3,4);IF kurswahlenTHEN tabueb2:="Kurs gesamt";ELSE
+tabueb2:="Fach gesamt";FI ;FOR xFROM 1UPTO anzkuerzelREP tabueb2CAT
+vierblank;tabueb2CAT subtext(klausurkuerzel,x,x);PER ;IF (nurlsAND fuerhj=
+dbhjAND fuerjgst=jgstls)THEN dbjgst:=jgstlsELSE IF nurlsCOR lsundneueTHEN IF
+dbhj="2"THEN dbjgst:=text(int(jgstls)+1)ELSE dbjgst:=jgstlsFI ;ELSE IF dbhj=
+"2"THEN dbjgst:=jgstneuELSE dbjgst:=text(int(jgstneu)-1)FI ;FI ;
+geplanteshjundsjberechnen(dbhj,dbsj);FI ;IF nurneueTHEN textueb2:=
+kopfueb2teil3;textueb2CAT jgstneu;ELSE textueb2:=kopfueb2teil1;textueb2CAT
+jgstls;IF lsundneueTHEN textueb2CAT kopfueb2teil2;textueb2CAT kopfueb2teil3;
+textueb2CAT jgstneu;FI ;FI ;IF kurswahlenTHEN aktuellerindex:=
+dnrlehrveranstaltungen;inittupel(aktuellerindex);feldnr:=fnrlvfachkennung;
+putwert(fnrlvsj,dbsj);putwert(fnrlvhj,dbhj);putwert(fnrlvjgst,dbjgst);
+setzescanendewert("�");ELSE aktuellerindex:=dnrfaecherangebot;inittupel(
+aktuellerindex);feldnr:=fnrfanglfdnr;putwert(fnrfangsj,dbsj);putwert(
+fnrfanghj,dbhj);putwert(fnrfangjgst,dbjgst);setzescanendewert("255");FI ;
+setzeidentiwert("");initobli(anzahlobjekteprobildschirm);objektlistestarten(
+aktuellerindex,dbsj,feldnr,TRUE ,b);setzebestandende(NOT multistopCOR b);END
+PROC kwsek2auszaehlenlistenvorbereiten;PROC
+kwsek2auszaehlenbildschirmvorbereiten:LET fnrausganf=2;
+standardkopfmaskeaktualisieren(kwsek2auszaehlenueb);bildanfang:=fnrausganf;
+setzebildanfangsposition(bildanfang);initspalten;setzespaltenbreite(
+bildbreite);spaltenweise(textueb1);ausgfeld(1):=zeile;ausgfeld(1)IN
+ausgabepos;erhoeheausgabeposumeins;spaltenweise(textueb2);ausgfeld(1):=zeile;
+ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;erhoeheausgabeposumeins;
+spaltenweise(tabueb1);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;
+erhoeheausgabeposumeins;spaltenweise(tabueb2);ausgfeld(1):=zeile;ausgfeld(1)
+IN ausgabepos;erhoeheausgabeposumeins;spaltenweise(unterstreichung);ausgfeld(
+1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;
+setzebildanfangsposition(8);initspalten;spaltendefinierenEND PROC
+kwsek2auszaehlenbildschirmvorbereiten;PROC kwsek2auszaehlenseitezeigen:
+blaettern(PROC (INT CONST )kwwahldatensek2zeigen,aktion,TRUE ,TRUE ,BOOL
+PROC multistop)END PROC kwsek2auszaehlenseitezeigen;PROC
+kwwahldatensek2zeigen(INT CONST x):kwwahldatensek2holen;
+kwwahldatensek2aufbereiten;kwwahldatensek2aufbildschirm;END PROC
+kwwahldatensek2zeigen;PROC kwwahldatensek2aufbildschirm:INT VAR i;FOR iFROM 1
+UPTO ausgfeldlaengeREP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;
+erhoeheausgabeposumeins;PER ;END PROC kwwahldatensek2aufbildschirm;PROC
+kwsek2auszaehlendruckvorbereiten:setzebestandende(FALSE );druckvorbereiten;
+variablenfuerdrucksetzen;IF kurswahlenTHEN inittupel(dnrlehrveranstaltungen);
+putwert(fnrlvsj,dbsj);putwert(fnrlvhj,dbhj);putwert(fnrlvjgst,dbjgst);
+setzescanendewert("�");ELSE inittupel(dnrfaecherangebot);putwert(fnrfangsj,
+dbsj);putwert(fnrfanghj,dbhj);putwert(fnrfangjgst,dbjgst);setzescanendewert(
+"255");FI ;initdruckkopf(textueb1,textueb2);initausgabekopfdruck;
+lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL
+PROC multistopsim);.variablenfuerdrucksetzen:druckzeilenzahl:=drucklaenge(
+ueberschriftenzeilen)-ausgkopflaenge.END PROC
+kwsek2auszaehlendruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck(1):=
+tabueb1;ausgkopfdruck(2):=tabueb2;END PROC initausgabekopfdruck;PROC
+kwsek2auszaehlenseitedrucken:kwwahldatensek2ueberschriftdrucken;initspalten;
+spaltendefinieren;seitedrucken(PROC (INT VAR )kwwahldatensek2drucken,
+druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END
+PROC kwsek2auszaehlenseitedrucken;PROC kwwahldatensek2ueberschriftdrucken:
+INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP
+druckzeileschreiben(ausgkopfdruck(i))PER ;druckzeileschreiben(unterstreichung
+);END PROC kwwahldatensek2ueberschriftdrucken;PROC kwwahldatensek2drucken(
+INT VAR zeilenzaehler):LET markiert="#";kwwahldatensek2holen;standardmeldung(
+mnrbearbeitetwerden,fach+markiert);kwwahldatensek2aufbereiten;ausgfeld(1):=
+zeile;zeilenzaehlerINCR ausgfeldlaenge;kwwahldatensek2indruckdatei;END PROC
+kwwahldatensek2drucken;PROC kwwahldatensek2indruckdatei:INT VAR i;FOR iFROM 1
+UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END PROC
+kwwahldatensek2indruckdatei;PROC spaltendefinieren:INT VAR x;initspalten;
+setzespaltentrenner(spaltentrenner);setzespaltenbreite(spaltenbreite1);
+setzespaltenbreite(spaltenbreite2);FOR xFROM 1UPTO maxkuerzelREP
+setzespaltenbreite(spaltenbreite3bis13)PER ;END PROC spaltendefinieren;PROC
+kwwahldatensek2holen:TEXT VAR hilfstext;dbstatusmerker:=dbstatus;IF
+kurswahlenTHEN hilfstext:=wert(fnrlvfachkennung);fach:=subtext(hilfstext,1,2)
+;kennung:=subtext(hilfstext,3,6);gesamtundeinzelsummen(1):=
+anzahlschuelermitwahl(fach,kennung,niltext,niltext);FOR xFROM 2UPTO
+anzkuerzel+1REP klkuerzel:=subtext(klausurkuerzel,x-1,x-1);
+gesamtundeinzelsummen(x):=anzahlschuelermitwahl(fach,kennung,niltext,
+klkuerzel);PER ;ELSE fach:=text(wert(fnrfangfach),2);art:=wert(fnrfangart);
+gesamtundeinzelsummen(1):=anzahlschuelermitwahl(fach,niltext,art,niltext);
+FOR xFROM 2UPTO anzkuerzel+1REP klkuerzel:=subtext(klausurkuerzel,x-1,x-1);
+gesamtundeinzelsummen(x):=anzahlschuelermitwahl(fach,niltext,art,klkuerzel);
+PER ;FI ;dbstatus(dbstatusmerker);END PROC kwwahldatensek2holen;PROC
+kwwahldatensek2aufbereiten:INT VAR x;IF kurswahlenTHEN spaltenweise(fach+
+blank+kennung);ELSE spaltenweise(fach+blank+art);FI ;FOR xFROM 1UPTO
+anzkuerzel+1REP spaltenweise(text(gesamtundeinzelsummen(x),3));PER ;FOR x
+FROM 1UPTO maxkuerzel-anzkuerzelREP spaltenweise(niltext)PER ;END PROC
+kwwahldatensek2aufbereiten;END PACKET likwschuelerwahlsek2;
+
diff --git a/app/schulis/2.2.1/src/2.likw wahl und kursdaten sek2 b/app/schulis/2.2.1/src/2.likw wahl und kursdaten sek2
new file mode 100644
index 0000000..992c52b
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.likw wahl und kursdaten sek2
@@ -0,0 +1,246 @@
+PACKET likwwahlundkursdatensek2DEFINES wahlundkursdatenmaskebearbeiten,
+wahlundkursdatenggfstarten,wahlundkursdatennaechsteliste,
+wahlundkursdatenabschluss,wahlundkursdatenggfbestandueberankreuzliste,
+wahlundkursdatenblaettern,wahldatenlistenseiteaktualisieren:LET objektmaske=
+"mu objektliste",eingangsmaske="ms wahl und kursdaten sek2 eingang",
+fnr2jgstls=2,fnr3jgstneu=3,fnr4famname=4,fnr5rufname=5,fnr6gebdat=6,fnr7bs=7,
+fnr8dr=8,mnrauswahlnichtsinnvoll=56,mnrlistewirdgedruckt=58,
+mnrdatenexistierennicht=59,mnrbittewarten=69,mnrdruckausgabefuerwirdgedruckt=
+125,mnrschuelernichtimentsprbestand=126,mnralledruckausgabenerstellt=128,
+mnrangabenpraezisieren=129,mnrungueltigesdatum=157,mnrjgstfehlt=172,
+mnrjgstoderschueler=318,mnrjgstfalsch=404,mnrkeinekwdatenda=406,
+mnrkeinedatendain=407,mnrjgstoderbestschueler=422,trenner="�",neuang="N",
+mitneuang="",ohneneuang="O";INT VAR mnrallgemein,egmaskefeldnr,status,erster,
+letzter,aktschueler,zaehler,pos1,pos2;TEXT VAR fach,mnrzusatz,ueb2,hilfstext;
+LET null=0,platzhalter="mehr- fach ",niltext="",punkt=".",blank=" ",dopp=":"
+,doppblank=": ",blanksdopp=" :";LET maxanzfaecher=100,maxanzschulhj=10;ROW
+maxanzfaecherROW maxanzschulhjTEXT VAR faecherschulhj;INT VAR ixfaecher,
+ixschulhj,anzfaecher;TEXT VAR uebsj,uebjgst,faecherstring,faecher,kennungen,
+klausuren,punkte,kursarten,zeile1,zeile2;BOOL VAR ankreuzliste,
+bildschirmausgabe,lsundneue,nurneue,nurls,bestschueler,faecherstringok;TEXT
+VAR sj,hj,kwsj,jgstls,jgstneu,famname,rufname,gebdat;FILE VAR ausgabedatei;
+TEXT CONST ueb1:="Wahl- und Kursdaten von";LET fnrerstesankreuzfeld=2,
+felderprolisteneintrag=2,listeneintraegeproseite=18;LET
+meldungblaetternnichtmöglich=72;LET dummyschueler="",sunamenstrenner=", ",
+sulaengeohnedatum=60,maxankreuzungen=1000,ankreuzung="x",keineankreuzung="",
+kennungnursuname="N",boolvektordatei="Boolvektor";BOOL VAR bearbeitungingang
+:=FALSE ;BOUND ROW maxankreuzungenBOOL VAR boolvektor;INT VAR aktuellezeile;
+PROC wahlundkursdatenmaskebearbeiten:standardvproc(eingangsmaske);
+ankreuzliste:=FALSE ;END PROC wahlundkursdatenmaskebearbeiten;PROC
+wahlundkursdatenggfbestandueberankreuzliste:IF plausisallgemokAND
+plausisspezankreuzokAND kurswahldatenraumdaTHEN ankreuzliste:=TRUE ;
+aktuellezeile:=erster;initboolvektor;standardstartproc(objektmaske);
+listezeigenabzeile(aktuellezeile);wahldatenlistenseiteaktualisieren;ELSE
+standardmeldung(mnrallgemein,niltext);return(1);FI ;.plausisspezankreuzok:
+BOOL VAR ok:=FALSE ;IF bestschuelerTHEN mnrallgemein:=mnrjgstoderbestschueler
+;infeld(fnr4famname);ELSE ok:=TRUE FI ;ok.initboolvektor:boolvektor:=new(
+boolvektordatei);FOR zaehlerFROM ersterUPTO letzterREP boolvektor(zaehler):=
+FALSE PER ;END PROC wahlundkursdatenggfbestandueberankreuzliste;PROC
+wahlundkursdatenggfstarten:bearbeitungingang:=FALSE ;IF ankreuzlisteTHEN
+ersterDECR 1;naechsterindex(erster);startenELSE IF NOT plausisallgemokCOR
+NOT plausisspezokTHEN standardmeldung(mnrallgemein,niltext);return(1);ELSE
+startenFI ;FI ;.plausisspezok:IF bestschuelerTHEN IF NOT bestschuelerkorrekt
+THEN standardmeldung(mnrangabenpraezisieren,niltext);infeld(egmaskefeldnr);
+LEAVE plausisspezokWITH FALSE ELSE erster:=1;letzter:=1;FI ;ELSE IF lsundneue
+THEN IF int(jgstls)<>int(jgstneu)-1THEN mnrallgemein:=mnrjgstfalsch;infeld(
+fnr2jgstls);LEAVE plausisspezokWITH FALSE FI ;FI ;IF NOT kurswahldatenraumda
+THEN infeld(fnr2jgstls);LEAVE plausisspezokWITH FALSE FI ;FI ;TRUE .
+bestschuelerkorrekt:IF rufname=niltextTHEN IF gebdat=niltextTHEN IF
+famnameeindeutigTHEN rufname:=wert(fnrsurufnames);gebdat:=wert(fnrsugebdatums
+);LEAVE bestschuelerkorrektWITH TRUE ELSE LEAVE bestschuelerkorrektWITH
+FALSE ;FI ;ELSE egmaskefeldnr:=fnr5rufname;mnrallgemein:=
+mnrangabenpraezisieren;LEAVE bestschuelerkorrektWITH FALSE ;FI ;ELSE IF
+gebdat<>niltextTHEN hilfstext:=subtext(gebdat,1,2);hilfstextCAT punkt;
+hilfstextCAT subtext(gebdat,3,4);hilfstextCAT punkt;hilfstextCAT subtext(
+gebdat,5,6);gebdat:=hilfstext;IF kompletterschluesselokTHEN LEAVE
+bestschuelerkorrektWITH TRUE ELSE LEAVE bestschuelerkorrektWITH FALSE FI ;
+ELSE IF famnameundrufnameeindeutigTHEN gebdat:=wert(fnrsugebdatums);LEAVE
+bestschuelerkorrektWITH TRUE ELSE LEAVE bestschuelerkorrektWITH FALSE ;FI ;
+FI ;FI ;TRUE END PROC wahlundkursdatenggfstarten;BOOL PROC famnameeindeutig:
+inittupel(dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsurufnames,
+rufname);putwert(fnrsugebdatums,gebdat);putwert(fnrsustatuss,"ls");search(
+dnrschueler,FALSE );IF wert(fnrsufamnames)<>famnameTHEN egmaskefeldnr:=
+fnr4famname;mnrallgemein:=mnrdatenexistierennicht;LEAVE famnameeindeutigWITH
+FALSE ;ELSE succ(dnrschueler);IF wert(fnrsufamnames)=famnameTHEN
+egmaskefeldnr:=fnr5rufname;mnrallgemein:=mnrangabenpraezisieren;LEAVE
+famnameeindeutigWITH FALSE ;ELSE pred(dnrschueler)FI ;FI ;TRUE END PROC
+famnameeindeutig;BOOL PROC famnameundrufnameeindeutig:inittupel(dnrschueler);
+putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);putwert(
+fnrsugebdatums,gebdat);putwert(fnrsustatuss,"ls");search(dnrschueler,FALSE );
+IF wert(fnrsufamnames)<>famnameCOR wert(fnrsurufnames)<>rufnameTHEN
+egmaskefeldnr:=fnr4famname;mnrallgemein:=mnrdatenexistierennicht;LEAVE
+famnameundrufnameeindeutigWITH FALSE ELSE succ(dnrschueler);IF wert(
+fnrsufamnames)=famnameAND wert(fnrsurufnames)=rufnameTHEN egmaskefeldnr:=
+fnr6gebdat;mnrallgemein:=mnrangabenpraezisieren;LEAVE
+famnameundrufnameeindeutigWITH FALSE ELSE pred(dnrschueler)FI ;FI ;TRUE END
+PROC famnameundrufnameeindeutig;BOOL PROC kompletterschluesselok:BOOL VAR
+insek2:=TRUE ;standardpruefe(6,fnr6gebdat,null,null,niltext,status);IF status
+<>0THEN egmaskefeldnr:=fnr6gebdat;mnrallgemein:=mnrungueltigesdatum;LEAVE
+kompletterschluesselokWITH FALSE ;FI ;hilfstext:=subtext(gebdat,1,2);
+hilfstextCAT punkt;hilfstextCAT subtext(gebdat,3,4);hilfstextCAT punkt;
+hilfstextCAT subtext(gebdat,5,6);gebdat:=hilfstext;inittupel(dnrschueler);
+putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);putwert(
+fnrsugebdatums,gebdat);putwert(fnrsustatuss,"ls");search(dnrschueler,TRUE );
+IF dbstatus<>0COR intwert(fnrsusgrpjgst)<11THEN egmaskefeldnr:=fnr4famname;
+mnrallgemein:=mnrschuelernichtimentsprbestand;insek2:=FALSE FI ;insek2END
+PROC kompletterschluesselok;PROC starten:aktschueler:=erster;IF
+bildschirmausgabeTHEN listeaufbereiten;bearbeitungingang:=TRUE ;rename(
+"liste.1","Wahl- und Kursdaten");zeigedatei("Wahl- und Kursdaten","vr");ELSE
+IF ankreuzlisteTHEN WHILE aktschueler<>0REP
+listeaufbereitendruckenundloeschenodermeldung;naechsterindex(aktschueler);
+PER ;ankreuzliste:=FALSE ;bearbeitungingang:=FALSE ;forget(boolvektordatei,
+quiet);standardstartproc(eingangsmaske);egmaskenfelderleerenzurueckundmeldung
+(2);ELSE FOR aktschuelerFROM ersterUPTO letzterREP
+listeaufbereitendruckenundloeschenodermeldung;PER ;
+egmaskenfelderleerenzurueckundmeldung(1);FI ;FI ;END PROC starten;PROC
+listeaufbereitendruckenundloeschenodermeldung:IF NOT schuelervorhandenTHEN
+meldungELSE listemitdatenzumschueleraufbereiten;standardmeldung(
+mnrdruckausgabefuerwirdgedruckt,famname+"#");listedrucken;listeloeschen;FI ;
+END PROC listeaufbereitendruckenundloeschenodermeldung;PROC
+wahlundkursdatennaechsteliste(BOOL CONST drucken):IF druckenTHEN listedrucken
+FI ;listeloeschen;IF ankreuzlisteTHEN naechsterindex(aktschueler);IF
+aktschueler=0THEN forget(boolvektordatei,quiet);ankreuzliste:=FALSE ;
+standardstartproc(eingangsmaske);egmaskenfelderleerenzurueckundmeldung(3);
+ELSE listeaufbereiten;rename("liste.1","Wahl- und Kursdaten");return(1)FI ;
+ELSE IF aktschueler=letzterTHEN egmaskenfelderleerenzurueckundmeldung(2);
+ELSE aktschuelerINCR 1;listeaufbereiten;rename("liste.1",
+"Wahl- und Kursdaten");return(1);FI ;FI ;END PROC
+wahlundkursdatennaechsteliste;PROC listeaufbereiten:IF NOT schuelervorhanden
+THEN listeleeraufbereitenELSE listemitdatenzumschueleraufbereiten;FI ;END
+PROC listeaufbereiten;PROC meldung:mnrzusatz:="Halbjahresdaten";
+standardmeldung(mnrkeinedatendain,mnrzusatz+"#");END PROC meldung;PROC
+schuelerdatenauskwdatenraumholen(INT CONST index):hilfstext:=
+wahldatenzumindex(index,kennungnursuname);pos1:=pos(hilfstext,trenner);pos2:=
+pos(hilfstext,trenner,pos1+1);famname:=subtext(hilfstext,1,pos1-1);rufname:=
+subtext(hilfstext,pos1+1,pos2-1);gebdat:=subtext(hilfstext,pos2+1,length(
+hilfstext));END PROC schuelerdatenauskwdatenraumholen;PROC
+listeleeraufbereiten:dateioeffnenunddruckkopfschreiben;putline(ausgabedatei,
+"Keine Halbjahres-Daten vorhanden für: "+rufname+blank+famname)END PROC
+listeleeraufbereiten;PROC dateioeffnenunddruckkopfschreiben:ausgabedatei:=
+sequentialfile(output,"liste.1");druckvorbereiten;ueb2:=famname;ueb2CAT blank
+;ueb2CAT rufname;ueb2CAT ", geboren am ";ueb2CAT gebdat;initdruckkopf(ueb1,
+ueb2);druckkopfschreiben;END PROC dateioeffnenunddruckkopfschreiben;PROC
+rowinitialisieren:FOR ixfaecherFROM 1UPTO maxanzfaecherREP FOR ixschulhjFROM
+1UPTO maxanzschulhjREP faecherschulhj(ixfaecher)(ixschulhj):=niltextPER ;PER
+;END PROC rowinitialisieren;PROC listemitdatenzumschueleraufbereiten:
+faecherstringok:=FALSE ;rowinitialisieren;dateioeffnenunddruckkopfschreiben;
+uebsj:=5*blank+doppblank;uebjgst:="Fach "+doppblank;ixfaecher:=1;ixschulhj:=0
+;faecherstring:=wert(fnrhjdfach);WHILE dbstatus=0AND wert(fnrhjdfamnames)=
+famnameAND wert(fnrhjdrufnames)=rufnameAND wert(fnrhjdgebdats)=gebdatREP
+shjueberschriftenmerken;IF compress(faecherstring)=niltextTHEN succ(
+dnrhalbjahresdaten);faecherstring:=wert(fnrhjdfach);ELSE
+faecherstringaufbereitenundweiterewertelesen;IF faecherstring=faecherTHEN
+FOR zaehlerFROM 1UPTO anzfaecherREP datenproshjprofachmerken(zaehler);PER ;
+ELSE pos1:=1;zaehler:=1;WHILE pos1<length(faecher)REP fach:=subtext(faecher,
+pos1,pos1+1);pos2:=pos(faecherstring,fach);WHILE pos2<>0AND pos2MOD 2=0REP
+pos2:=pos(faecherstring,fach,pos2+1);PER ;IF pos2=0THEN anzfaecherINCR 1;
+ixfaecher:=anzfaecher;faecherstringCAT fach;ELSE ixfaecher:=(pos2+1)DIV 2FI ;
+datenproshjprofachmerken(ixfaecher);pos1INCR 2;PER ;FI ;succ(
+dnrhalbjahresdaten);FI ;PER ;ausgabederrowmatrixindatei;.
+shjueberschriftenmerken:ixschulhjINCR 1;hilfstext:=wert(fnrhjdsj);uebsjCAT
+subtext(hilfstext,1,2);uebsjCAT "/";uebsjCAT subtext(hilfstext,3,4);uebsjCAT
+doppblank;hilfstext:=text(wert(fnrhjdjgst),2);hilfstextCAT punkt;hilfstext
+CAT wert(fnrhjdhj);uebjgstCAT hilfstext;uebjgstCAT blank+doppblank;.
+faecherstringaufbereitenundweiterewertelesen:IF NOT faecherstringokTHEN
+zaehler:=1;pos1:=1;WHILE zaehler<length(faecherstring)REP pos1:=pos(
+faecherstring,subtext(faecherstring,zaehler,zaehler+1),zaehler+2);WHILE pos1
+<>0AND pos1MOD 2=0REP pos1:=pos(faecherstring,subtext(faecherstring,zaehler,
+zaehler+1),pos1+1)PER ;IF pos1=0THEN zaehlerINCR 2;ELSE IF pos1MOD 2=1THEN
+change(faecherstring,pos1,pos1+1,niltext);FI ;FI ;PER ;anzfaecher:=length(
+faecherstring)DIV 2;faecherstringok:=TRUE ;FI ;faecher:=wert(fnrhjdfach);
+kennungen:=wert(fnrhjdlerngrpkenn);klausuren:=wert(fnrhjdklausurteiln);
+kursarten:=wert(fnrhjdkursart);punkte:=wert(fnrhjdnotepunkte);IF punkte=
+niltextTHEN punkte:=length(faecher)*blankFI ;.ausgabederrowmatrixindatei:
+zeile1:=uebsj;druckzeileschreiben(zeile1);zeile1:=uebjgst;druckzeileschreiben
+(zeile1);zeile1:="-----+"+(10*"------+");druckzeileschreiben(zeile1);INT VAR
+i;i:=1;FOR pos1FROM 1UPTO anzfaecherREP zeile1:=subtext(faecherstring,i,i+1);
+zeile1CAT blanksdopp;zeile2:=2*blank+blanksdopp;FOR zaehlerFROM 1UPTO
+ixschulhjREP IF faecherschulhj(pos1)(zaehler)=niltextTHEN zeile1CAT 3*blank+
+blanksdopp;zeile2CAT 3*blank+blanksdopp;ELSE zeile1CAT subtext(faecherschulhj
+(pos1)(zaehler),1,6);zeile1CAT dopp;zeile2CAT subtext(faecherschulhj(pos1)(
+zaehler),7,12);zeile2CAT dopp;FI ;PER ;iINCR 2;druckzeileschreiben(zeile1);
+druckzeileschreiben(zeile2);PER ;END PROC listemitdatenzumschueleraufbereiten
+;PROC datenproshjprofachmerken(INT CONST rowindex):IF faecherschulhj(rowindex
+)(ixschulhj)<>niltextTHEN faecherschulhj(rowindex)(ixschulhj):=platzhalter
+ELSE faecherschulhj(rowindex)(ixschulhj):=subtext(kennungen,1,4)+blank+
+subtext(klausuren,1,1)+subtext(punkte,1,2)+blank+blank+subtext(kursarten,1,2)
+;FI ;kennungen:=subtext(kennungen,5,length(kennungen));klausuren:=subtext(
+klausuren,2,length(klausuren));punkte:=subtext(punkte,3,length(punkte));
+kursarten:=subtext(kursarten,3,length(kursarten));END PROC
+datenproshjprofachmerken;PROC egmaskenfelderleerenzurueckundmeldung(INT
+CONST stufe):FOR zaehlerFROM 2UPTO 8REP standardmaskenfeld(niltext,zaehler);
+PER ;return(stufe);standardmeldung(mnralledruckausgabenerstellt,niltext);END
+PROC egmaskenfelderleerenzurueckundmeldung;PROC listedrucken:IF exists(
+"Wahl- und Kursdaten")THEN print("Wahl- und Kursdaten")ELSE print("liste.1");
+FI ;END PROC listedrucken;PROC listeloeschen:forget("Wahl- und Kursdaten",
+quiet);forget("liste.1",quiet)END PROC listeloeschen;PROC
+wahlundkursdatenblaettern(INT CONST richtung):SELECT richtungOF CASE 1:
+andenanfangCASE 2:eineseitevorCASE 3:eineseitezurueckCASE 4:andasende
+ENDSELECT ;return(1).andenanfang:aktuellezeile:=erster;listezeigenabzeile(
+aktuellezeile);.andasende:aktuellezeile:=max(1,letzter-
+listeneintraegeproseite+1);listezeigenabzeile(aktuellezeile);.eineseitevor:
+IF aktuellezeile+listeneintraegeproseite>letzterTHEN standardmeldung(
+meldungblaetternnichtmöglich,"")ELSE aktuellezeileINCR
+listeneintraegeproseite;listezeigenabzeile(aktuellezeile)FI ;.
+eineseitezurueck:IF aktuellezeile=ersterTHEN standardmeldung(
+meldungblaetternnichtmöglich,"")ELSE aktuellezeileDECR
+listeneintraegeproseite;aktuellezeile:=max(aktuellezeile,erster);
+listezeigenabzeile(aktuellezeile)FI ;END PROC wahlundkursdatenblaettern;PROC
+wahldatenlistenseiteaktualisieren:INT VAR i,fnr;standardnproc;fnr:=
+fnrerstesankreuzfeld;FOR iFROM aktuellezeileUPTO min(aktuellezeile+
+listeneintraegeproseite,letzter)REP boolvektor(i):=standardmaskenfeld(fnr)<>
+niltext;fnrINCR felderprolisteneintragPER END PROC
+wahldatenlistenseiteaktualisieren;PROC listezeigenabzeile(INT CONST zeile):
+INT VAR i,j1,j2,fnr;TEXT VAR t,t1;fnr:=fnrerstesankreuzfeld;FOR iFROM zeile
+UPTO zeile+listeneintraegeproseiteREP IF i<=letzterTHEN t:=wahldatenzumindex(
+i,kennungnursuname);feldfrei(fnr);IF boolvektor(i)THEN standardmaskenfeld(
+ankreuzung,fnr);ELSE standardmaskenfeld(keineankreuzung,fnr);FI ;
+bereiteschuelerzeileauf;standardmaskenfeld(t1,fnr+1);ELSE standardmaskenfeld(
+niltext,fnr);feldschutz(fnr);standardmaskenfeld(dummyschueler,fnr+1)FI ;fnr
+INCR felderprolisteneintrag;PER ;infeld(fnrerstesankreuzfeld);
+standardfelderausgeben;.bereiteschuelerzeileauf:j1:=pos(t,trenner);j2:=pos(t,
+trenner,j1+1);t1:=text(t,j1-1);t1CAT sunamenstrenner;t1CAT subtext(t,j1+1,j2-
+1);t1:=text(t1,sulaengeohnedatum);t1CAT " ";t1CAT subtext(t,j2+1).END PROC
+listezeigenabzeile;PROC naechsterindex(INT VAR index):indexINCR 1;WHILE index
+<=letzterCAND NOT boolvektor(index)REP indexINCR 1PER ;IF index>letzterTHEN
+index:=0FI END PROC naechsterindex;PROC wahlundkursdatenabschluss:INT VAR
+ruecksprungweite:=1;IF ankreuzlisteTHEN forget(boolvektordatei,quiet);
+ankreuzliste:=FALSE ;ruecksprungweiteINCR 1FI ;IF bearbeitungingangTHEN
+bearbeitungingang:=FALSE ;ruecksprungweiteINCR 1FI ;listeloeschen;enter(
+ruecksprungweite);END PROC wahlundkursdatenabschluss;BOOL PROC
+plausisallgemok:standardmeldung(mnrbittewarten,niltext);ankreuzliste:=FALSE ;
+bestschueler:=FALSE ;lsundneue:=FALSE ;nurneue:=FALSE ;nurls:=FALSE ;
+standardpruefe(5,fnr7bs,fnr8dr,null,niltext,status);IF status<>0THEN infeld(
+fnr7bs);mnrallgemein:=mnrauswahlnichtsinnvoll;LEAVE plausisallgemokWITH
+FALSE FI ;bildschirmausgabe:=standardmaskenfeld(fnr8dr)=niltext;jgstls:=
+standardmaskenfeld(fnr2jgstls);jgstneu:=standardmaskenfeld(fnr3jgstneu);
+famname:=standardmaskenfeld(fnr4famname);rufname:=standardmaskenfeld(
+fnr5rufname);gebdat:=standardmaskenfeld(fnr6gebdat);IF famname<>niltextCOR
+rufname<>niltextCOR gebdat<>niltextTHEN bestschueler:=TRUE ;IF jgstls<>
+niltextCOR jgstneu<>niltextTHEN infeld(fnr4famname);mnrallgemein:=
+mnrjgstoderbestschueler;LEAVE plausisallgemokWITH FALSE FI ;ELSE IF jgstls=
+niltextAND jgstneu=niltextTHEN infeld(fnr2jgstls);mnrallgemein:=mnrjgstfehlt;
+LEAVE plausisallgemokWITH FALSE ;FI ;IF jgstls<>niltextTHEN standardpruefe(2,
+fnr2jgstls,null,null,niltext,status);IF status<>0COR (int(jgstls)<10COR int(
+jgstls)>13)THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2jgstls);LEAVE
+plausisallgemokWITH FALSE ;FI ;FI ;IF jgstneu<>niltextTHEN standardpruefe(2,
+fnr3jgstneu,null,null,niltext,status);IF status<>0COR (int(jgstneu)<11COR int
+(jgstneu)>13)THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr3jgstneu);LEAVE
+plausisallgemokWITH FALSE ;FI ;FI ;IF jgstls=niltextTHEN nurneue:=TRUE ELIF
+jgstneu=niltextTHEN nurls:=TRUE ELSE lsundneue:=TRUE FI ;FI ;TRUE END PROC
+plausisallgemok;BOOL PROC schuelervorhanden:IF NOT bestschuelerTHEN
+schuelerdatenauskwdatenraumholen(aktschueler);FI ;inittupel(
+dnrhalbjahresdaten);putwert(fnrhjdfamnames,famname);putwert(fnrhjdrufnames,
+rufname);putwert(fnrhjdgebdats,gebdat);putwert(fnrhjdsj,niltext);putwert(
+fnrhjdhj,niltext);search(dnrhalbjahresdaten,FALSE );dbstatus=0AND wert(
+fnrhjdfamnames)=famnameAND wert(fnrhjdrufnames)=rufnameAND wert(fnrhjdgebdats
+)=gebdatEND PROC schuelervorhanden;BOOL PROC kurswahldatenraumda:INT VAR
+fehler;sj:=schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr");
+IF nurlsTHEN kurswahlinitialisieren(jgstls,jgstls,hj,ohneneuang,kwsj);ELIF
+nurneueTHEN jgstls:=text(int(jgstneu)-1);kurswahlinitialisieren(jgstls,jgstls
+,hj,neuang,kwsj);ELSE kurswahlinitialisieren(jgstls,jgstls,hj,mitneuang,kwsj)
+FI ;kurswahlbasisholen(fehler);IF fehler<>0THEN mnrallgemein:=
+mnrkeinekwdatenda;infeld(fnr2jgstls);ELSE erster:=ersterschueler;letzter:=
+letzterschuelerFI ;fehler=0END PROC kurswahldatenraumda;END PACKET
+likwwahlundkursdatensek2
+
diff --git a/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen b/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen
new file mode 100644
index 0000000..32187e4
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen
@@ -0,0 +1,384 @@
+PACKET schuelerzukursenzuordnenDEFINES schuelerkursenzuordnenabbruch,
+schuelerkursenzuordnenanfang,schuelerkursenzuordnenpruefuebernahme,
+schuelerkursenzuordnenuebernahme,schuelerkursenzuordnenpruefung,
+schuelerkursenzuordnenspeichern,schuelerkursenzuordnenkopieren,
+schuelerkursenzuordnenlisten:LET server="kurswahl server",kuwa2sperre=
+"Kurswahl-2 ",anzschuelerbs=15,laengefakeartkl=9,laengekurs=6,laengedseintrag
+=15,az="#",trenner1="$",trenner2="�",maskeeingang=
+"ms schueler zu kursen zuordnen eingang",maskebearb=
+"ms schueler zu kursen zuordnen bearb",stdzeigbloecke=
+"1 2 3 4 5 6 7 8 9 10 11 ",leerewahldaten=" ",
+leereweiterewahldaten=" ",kzname="N",kzkurse="K",kznurneue="N",kzohneneue=
+"O",kzalle="A",kennungplanbl="P",kennungfapl="FP",kennungfaartkl="FAk",
+kennungfakeartkl="FKAk",kennungfake="FK",kennungkeinkurs=" - ",
+kennungkeinfach=" * ",meldungbearbwird=352,meldungfeldleeren=390,
+meldungunbeklv=360,meldungfeldfuellen=52,meldungschonkurs=424,
+meldungbittewarten=69,meldungfalscherwert=55,meldungspeicherfehler=364,
+meldungjgstfalsch=404,meldungjgstfehlt=172,meldunghjfalsch=405,meldungpruefen
+=329,meldungspeichern=50,meldungnspeichern=63,meldungandereauswahl=318,
+meldungunzulauswahl=56,meldungserverfehler=376,meldunglistezeigen=7,
+meldungparallelanw=425,meldungkeinedaten=68,meldungkeinekopfunktion=318,
+logtext1="Anw. 2.2.2 ",logtext2=" für akt. ",text1="Kurszuordnung ",text2=
+"Kurse übernehmen ",text3=" nach ",punkt=".",felderstername=7,
+felderstekennung=9,feldletztekennung=65,anzfeldereingang=36;INT VAR i,j,z;
+INT VAR letztepos:=2,ijgst,ihj,fstat,aktpos:=1,aktfeld,pos1,pos2,blockpos,
+suchab,jgst1,jgst2,findpos,feld,blpos,kopzeile,aktzeile,anfpos,anzkurse,
+anzsch,endpos,anzschueler,fapos,saktpos,ssuchab;TEXT VAR aktjgst,akthj:="",
+gewjgst,gewhj,zusjgst,zushj,gewsj,alleplblbez,alleschueler1:="",alleschueler2
+:="",wahl,neuewahldaten,weiterewahldaten,wahldaten,alleschueler:="",
+zeigbloecke,fach:="",art:="",kennungdesschuelers,name,kennungjetzt,
+kennungvorher,planbloecke,aktfeldinh,t,nname,vname,gdat,ausgabe:="",block,
+vorz,blockbez,aktkennung,liste:="",kurse,kurs,kennung,kursliste,fakennung,
+fawahl,sname,logmeldung,klkz,klwahl;ROW anzfeldereingangTEXT VAR eingangrow;
+ROW anzschuelerbsROW 4TEXT VAR schueler;BOOL VAR zusspaltezeigen:=FALSE ,
+belegungpruefen:=FALSE ,sperreok,speicherungsfehler:=FALSE ,bewertung,
+klausurkz:=FALSE ;WINDOW VAR w;PROC schuelerkursenzuordnenpruefuebernahme:IF
+menuedraussenTHEN reorganizescreenFI END PROC
+schuelerkursenzuordnenpruefuebernahme;PROC schuelerkursenzuordnenuebernahme(
+BOOL CONST uebernehmen):merkeeingangbs;IF uebernehmenTHEN standardmeldung(
+meldungbittewarten,"");aktpos:=1;gewjgst:=eingangrow(2);gewhj:=eingangrow(3);
+ijgst:=int(gewjgst);ihj:=int(gewhj);zusjgst:=eingangrow(35);zushj:=eingangrow
+(36);IF akthj=""THEN akthj:=schulkenndatum("Schulhalbjahr")FI ;prueffeld2und3
+;prueffeld4;prueffeld5;prueffeld634;prueffeld3536;datenholen;
+betrachtealleschueler;logmeldung:=text2;logmeldungCAT zusjgst;logmeldungCAT
+punkt;logmeldungCAT zushj;logmeldungCAT text3;logmeldungCAT gewjgst;
+logmeldungCAT punkt;logmeldungCAT gewhj;logbucheintragvornehmen(logmeldung);
+kurswahlsperrebeenden(kuwa2sperre)FI ;enter(2).prueffeld2und3:IF gewjgst=""
+THEN fehlermeldungausgeben(2,meldungjgstfehlt,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF gewhj=""THEN fehlermeldungausgeben(2,
+meldunghjfalsch,1);LEAVE schuelerkursenzuordnenuebernahmeELIF jgstfalsch(
+gewjgst,"11")THEN fehlermeldungausgeben(2,meldungjgstfalsch,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF ihj<1COR ihj>2THEN fehlermeldungausgeben
+(3,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenuebernahmeFI .prueffeld4:
+aktfeldinh:=eingangrow(4);IF aktfeldinh=""THEN IF eingangrow(5)=""THEN
+fehlermeldungausgeben(4,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenuebernahmeELSE LEAVE prueffeld4FI ELIF jgstfalsch(
+gewjgst,aktfeldinh)THEN fehlermeldungausgeben(4,meldungunzulauswahl,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF int(aktfeldinh)=ijgstTHEN pruefhjELIF
+aktfeldinh="10"CAND akthj="1"THEN fehlermeldungausgeben(4,
+meldungandereauswahl,1);LEAVE schuelerkursenzuordnenuebernahmeFI .pruefhj:IF
+gewhj="1"CAND akthj="2"THEN fehlermeldungausgeben(3,meldungandereauswahl,1);
+LEAVE schuelerkursenzuordnenuebernahmeFI .prueffeld5:aktfeldinh:=eingangrow(5
+);IF aktfeldinh=""THEN LEAVE prueffeld5ELIF aktfeldinh<>""CAND eingangrow(4)
+<>""THEN IF int(aktfeldinh)<>int(eingangrow(4))+1THEN fehlermeldungausgeben(5
+,meldungunzulauswahl,1);LEAVE schuelerkursenzuordnenuebernahmeFI ELIF int(
+aktfeldinh)>ijgstTHEN fehlermeldungausgeben(5,meldungunzulauswahl,1);LEAVE
+schuelerkursenzuordnenuebernahmeFI .prueffeld634:FOR iFROM 6UPTO 34REP IF
+standardmaskenfeld(i)<>""THEN fehlermeldungausgeben(i,meldungfeldleeren,1);
+LEAVE schuelerkursenzuordnenuebernahmeFI PER .prueffeld3536:zusjgst:=
+eingangrow(35);zushj:=eingangrow(36);IF zusjgst=""THEN fehlermeldungausgeben(
+35,meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenuebernahmeELIF zushj=""
+THEN fehlermeldungausgeben(36,meldunghjfalsch,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF zusjgst=gewjgstCAND zushj=gewhjTHEN
+fehlermeldungausgeben(35,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF jgstfalsch(zusjgst,"11")THEN
+fehlermeldungausgeben(35,meldungjgstfalsch,1);LEAVE
+schuelerkursenzuordnenuebernahmeELIF zushj<>"1"CAND zushj<>"2"THEN
+fehlermeldungausgeben(36,meldunghjfalsch,1);LEAVE
+schuelerkursenzuordnenuebernahmeFI .datenholen:IF NOT exists(/server)THEN
+fehlermeldungausgeben(letztepos,meldungserverfehler,1);LEAVE
+schuelerkursenzuordnenuebernahmeFI ;IF eingangrow(4)=""THEN t:=kznurneue;
+aktjgst:=text(int(eingangrow(5))-1)ELIF eingangrow(5)=""THEN t:=kzohneneue;
+aktjgst:=eingangrow(4)ELSE t:=kzalle;aktjgst:=eingangrow(4)FI ;
+kurswahlinitialisieren(aktjgst,gewjgst,gewhj,t,gewsj);kurswahlbasisholen(
+fstat);erweitertekurswahlbasisholen(zusjgst,zushj,fstat);kurswahlsperresetzen
+(kuwa2sperre,sperreok);IF NOT sperreokTHEN fehlermeldungausgeben(infeld,
+meldungparallelanw,1);LEAVE schuelerkursenzuordnenuebernahmeFI .
+betrachtealleschueler:FOR iFROM ersterschuelerUPTO letzterschuelerREP
+wahldaten:=wahldatenzumindex(i,kzkurse);name:=wahldatenzumindex(i,kzname);
+pos1:=pos(name,trenner2,1)-1;pos2:=pos(name,trenner2,pos1+2)-1;nname:=subtext
+(name,1,pos1);vname:=subtext(name,pos1+2,pos2);gdat:=subtext(name,pos2+2,pos2
++9);standardmeldung(meldungbearbwird,vname+" "+nname+az);weiterewahldaten:=
+weiterewahldatenzumschueler(nname,vname,gdat,kennungfakeartkl);
+betrachtekennungen;kurswahl2sichern(fstat)PER .betrachtekennungen:pos1:=1;
+neuewahldaten:="";WHILE pos1<length(wahldaten)REP wahl:=subtext(wahldaten,
+pos1,pos1+laengedseintrag-1);kennungjetzt:=subtext(wahl,6,9);fach:=subtext(
+wahl,4,5);art:=subtext(wahl,2,3);kennungvorher:=kennungvonfach(TRUE );IF
+kennungjetzt<>kennungvorherTHEN planbloecke:=kursdaten(fach+kennungvorher,
+kennungplanbl);IF dbstatus=0THEN neuewahldatenCAT text(wahl,1);neuewahldaten
+CAT art;neuewahldatenCAT fach;neuewahldatenCAT kennungvorher;neuewahldaten
+CAT planbloeckeELSE neuewahldatenCAT wahlFI ELSE neuewahldatenCAT wahlFI ;
+pos1INCR laengedseintragPER ;IF wahldaten<>neuewahldatenTHEN
+schuelerwahleintragen(nname,vname,gdat,neuewahldaten)FI .END PROC
+schuelerkursenzuordnenuebernahme;PROC schuelerkursenzuordnenanfang:
+standardstartproc(maskeeingang);gibeingangaus;standardfelderausgeben;infeld(
+letztepos);standardnproc.gibeingangaus:FOR iFROM 2UPTO anzfeldereingangREP
+standardmaskenfeld(eingangrow(i),i);IF eingangrow(i)<>""THEN letztepos:=iFI
+PER .END PROC schuelerkursenzuordnenanfang;PROC
+schuelerkursenzuordnenpruefung:standardmeldung(meldungbittewarten,"");
+merkeeingangbs;aktpos:=1;gewjgst:=eingangrow(2);gewhj:=eingangrow(3);ijgst:=
+int(gewjgst);ihj:=int(gewhj);IF akthj=""THEN akthj:=schulkenndatum(
+"Schulhalbjahr")FI ;prueffeld2und3;prueffeld4;prueffeld5;prueffeld6und7;
+prueffeld8bis13;prueffeld3536;datenholen;betrachtebelegung;
+planblockbezpruefen;schueleraufzeigen.betrachtebelegung:FOR iFROM 14UPTO 23
+REP IF eingangrow(i)<>""THEN planblockvorzpruefen;planblockbez15bis23pruefen;
+belegungpruefen:=TRUE ;LEAVE betrachtebelegungFI ;PER ;belegungpruefen:=
+FALSE .prueffeld2und3:IF gewjgst=""THEN fehlermeldungausgeben(2,
+meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenpruefungELIF gewhj=""THEN
+fehlermeldungausgeben(2,meldunghjfalsch,1);LEAVE
+schuelerkursenzuordnenpruefungELIF jgstfalsch(gewjgst,"11")THEN
+fehlermeldungausgeben(2,meldungjgstfalsch,1);LEAVE
+schuelerkursenzuordnenpruefungELIF ihj<1COR ihj>2THEN fehlermeldungausgeben(3
+,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenpruefungFI .prueffeld4:
+aktfeldinh:=eingangrow(4);IF aktfeldinh=""THEN IF eingangrow(5)=""THEN
+fehlermeldungausgeben(4,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungELSE LEAVE prueffeld4FI ELIF jgstfalsch(gewjgst
+,aktfeldinh)THEN fehlermeldungausgeben(4,meldungunzulauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungELIF int(aktfeldinh)=ijgstTHEN pruefhjELIF
+aktfeldinh="10"CAND akthj="1"THEN fehlermeldungausgeben(4,
+meldungandereauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI .pruefhj:IF
+gewhj="1"CAND akthj="2"THEN fehlermeldungausgeben(3,meldungandereauswahl,1);
+LEAVE schuelerkursenzuordnenpruefungFI .prueffeld5:aktfeldinh:=eingangrow(5);
+IF aktfeldinh=""THEN LEAVE prueffeld5ELIF aktfeldinh<>""CAND eingangrow(4)<>
+""THEN IF int(aktfeldinh)<>int(eingangrow(4))+1THEN fehlermeldungausgeben(5,
+meldungunzulauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI ELIF int(
+aktfeldinh)>ijgstTHEN fehlermeldungausgeben(5,meldungunzulauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungFI .prueffeld6und7:zusjgst:=eingangrow(6);zushj
+:=eingangrow(7);IF zusjgst=""CAND zushj<>""THEN fehlermeldungausgeben(6,
+meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenpruefungELIF zushj=""CAND
+zusjgst<>""THEN fehlermeldungausgeben(7,meldunghjfalsch,1);LEAVE
+schuelerkursenzuordnenpruefungELIF zushj=""CAND zusjgst=""THEN
+zusspaltezeigen:=FALSE ELIF zusjgst=gewjgstCAND zushj=gewhjTHEN
+fehlermeldungausgeben(6,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungELIF jgstfalsch(gewjgst,"11")THEN
+fehlermeldungausgeben(6,meldungjgstfalsch,1);LEAVE
+schuelerkursenzuordnenpruefungELIF ihj<1COR ihj>2THEN fehlermeldungausgeben(7
+,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenpruefungELIF jgstfalsch(
+gewjgst,zusjgst)THEN fehlermeldungausgeben(6,meldungandereauswahl,1);LEAVE
+schuelerkursenzuordnenpruefungELSE zusspaltezeigen:=TRUE FI .prueffeld8bis13:
+klkz:=compress(eingangrow(10));klausurkz:=klkz<>"";FOR iFROM 8UPTO 13REP IF
+eingangrow(i)<>""THEN LEAVE prueffeld8bis13FI PER ;fehlermeldungausgeben(8,
+meldungfeldfuellen,1);LEAVE schuelerkursenzuordnenpruefung.prueffeld3536:IF
+eingangrow(35)<>""COR eingangrow(36)<>""THEN fehlermeldungausgeben(35,
+meldungandereauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI .
+planblockvorzpruefen:IF planblockvorzfalsch(14)COR planblockvorzfalsch(16)
+COR planblockvorzfalsch(18)COR planblockvorzfalsch(20)COR planblockvorzfalsch
+(22)THEN kurswahlsperrebeenden(kuwa2sperre);LEAVE
+schuelerkursenzuordnenpruefungFI .datenholen:IF NOT exists(/server)THEN
+fehlermeldungausgeben(letztepos,meldungserverfehler,1);LEAVE
+schuelerkursenzuordnenpruefungFI ;IF eingangrow(4)=""THEN t:=kznurneue;
+aktjgst:=text(int(eingangrow(5))-1)ELIF eingangrow(5)=""THEN t:=kzohneneue;
+aktjgst:=eingangrow(4)ELSE t:=kzalle;aktjgst:=eingangrow(4)FI ;
+kurswahlinitialisieren(aktjgst,gewjgst,gewhj,t,gewsj);kurswahlbasisholen(
+fstat);IF zusspaltezeigenTHEN erweitertekurswahlbasisholen(zusjgst,zushj,
+fstat);FI ;kurswahlsperresetzen(kuwa2sperre,sperreok);IF sperreokTHEN
+alleplblbez:=alleplanblockbezeichnerELSE fehlermeldungausgeben(infeld,
+meldungparallelanw,1);LEAVE schuelerkursenzuordnenpruefungFI .
+planblockbez15bis23pruefen:IF planblockbezfalsch(eingangrow(15))THEN
+fehlermeldungausgeben(15,meldungfalscherwert,1);kurswahlsperrebeenden(
+kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF planblockbezfalsch(
+eingangrow(17))THEN fehlermeldungausgeben(17,meldungfalscherwert,1);
+kurswahlsperrebeenden(kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF
+planblockbezfalsch(eingangrow(19))THEN fehlermeldungausgeben(19,
+meldungfalscherwert,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE
+schuelerkursenzuordnenpruefungELIF planblockbezfalsch(eingangrow(21))THEN
+fehlermeldungausgeben(21,meldungfalscherwert,1);kurswahlsperrebeenden(
+kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF planblockbezfalsch(
+eingangrow(23))THEN fehlermeldungausgeben(23,meldungfalscherwert,1);
+kurswahlsperrebeenden(kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungFI .
+planblockbezpruefen:zeigbloecke:="";FOR iFROM 24UPTO 34REP IF
+planblockbezfalsch(eingangrow(i))THEN fehlermeldungausgeben(i,
+meldungfalscherwert,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE
+schuelerkursenzuordnenpruefungFI ;IF eingangrow(i)<>""THEN zeigbloeckeCAT
+konvblock(eingangrow(i))FI ;PER .END PROC schuelerkursenzuordnenpruefung;
+BOOL PROC planblockbezfalsch(TEXT CONST anwblock):suchab:=1;IF anwblock=""
+THEN FALSE ELSE block:=text(anwblock,3);WHILE pos(alleplblbez,block,suchab)<>
+0REP j:=pos(alleplblbez,block,suchab);IF jMOD 3=1THEN LEAVE
+planblockbezfalschWITH FALSE ELSE suchab:=j+1FI PER ;TRUE FI END PROC
+planblockbezfalsch;BOOL PROC planblockvorzfalsch(INT CONST feld):t:=(
+eingangrow(feld)SUB 1);IF t<>""THEN IF eingangrow(feld+1)=""THEN
+fehlermeldungausgeben(feld+1,meldungfeldfuellen,1);TRUE ELIF NOT (t="-"COR t=
+"+")THEN fehlermeldungausgeben(feld,meldungfalscherwert,1);TRUE ELSE FALSE
+FI ELIF eingangrow(feld+1)<>""THEN fehlermeldungausgeben(feld,
+meldungfeldfuellen,1);TRUE ELSE FALSE FI END PROC planblockvorzfalsch;PROC
+fehlermeldungausgeben(INT CONST feld,meldung,ruecksprung):infeld(feld);
+standardmeldung(meldung,"");return(ruecksprung)END PROC fehlermeldungausgeben
+;BOOL PROC jgstfalsch(TEXT CONST jgst,abjgst):jgst1:=int(jgst);jgst2:=int(
+abjgst);jgst1<jgst2COR jgst1>13END PROC jgstfalsch;PROC initbspuffer:FOR i
+FROM 1UPTO anzschuelerbsREP schueler(i)(1):="";schueler(i)(2):="";schueler(i)
+(3):="";schueler(i)(4):=""PER END PROC initbspuffer;PROC schueleraufzeigen:
+fach:=text(eingangrow(8),2);art:=text(eingangrow(9),2);holschueler;IF
+alleschueler=""THEN meldungkeineschueler;kurswahlsperrebeenden(kuwa2sperre)
+ELSE zeigbearbschirm;standardnprocFI .zeigbearbschirm:standardstartproc(
+maskebearb);standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "
++aktjgst+" in "+gewjgst+"."+gewhj);ausgabe:=fach;ausgabeCAT art;ausgabeCAT
+text(eingangrow(10),1);IF eingangrow(11)<>""THEN ausgabeCAT "+";ausgabeCAT
+text(eingangrow(11),2);ausgabeCAT text(eingangrow(12),2);ausgabeCAT text(
+eingangrow(13),1);ELSE ausgabeCAT " "FI ;standardmaskenfeld(ausgabe,2);
+ausgabe:=" ";ausgabeCAT text(eingangrow(14),1);ausgabeCAT konvblock(
+eingangrow(15));ausgabeCAT text(eingangrow(16),1);ausgabeCAT konvblock(
+eingangrow(17));ausgabeCAT text(eingangrow(18),1);ausgabeCAT konvblock(
+eingangrow(19));ausgabeCAT text(eingangrow(20),1);ausgabeCAT konvblock(
+eingangrow(21));ausgabeCAT text(eingangrow(22),1);ausgabeCAT konvblock(
+eingangrow(23));standardmaskenfeld(ausgabe,3);IF zusspaltezeigenTHEN
+standardmaskenfeld(eingangrow(6)+"."+eingangrow(7),4);ELSE standardmaskenfeld
+(" ",4);FI ;standardmaskenfeld(fach,5);IF zeigbloecke=""THEN zeigbloecke:=
+stdzeigbloecke;standardmaskenfeld(stdzeigbloecke,6)ELSE standardmaskenfeld(
+text(zeigbloecke,33),6)FI ;zeigschueler.meldungkeineschueler:
+fehlermeldungausgeben(14,meldungkeinedaten,1).holschueler:alleschueler:="";
+alleschueler1:=schuelermitwahl(fach,"",art,eingangrow(10));IF eingangrow(11)
+<>""THEN alleschueler2:=schuelermitwahl(eingangrow(11),"",eingangrow(12),
+eingangrow(13));schuelervergleichELSE alleschueler2:="";IF belegungpruefen
+THEN pruefbelegungallerschuelerELSE alleschueler:=alleschueler1;anzschueler:=
+anzahlschuelermitwahl(fach,"",art,eingangrow(10))FI ;FI .
+pruefbelegungallerschueler:saktpos:=1;ssuchab:=2;alleschueler:="";anzschueler
+:=0;WHILE saktpos<>0REP saktpos:=pos(alleschueler1,trenner1,ssuchab);IF
+saktpos<>0THEN sname:=subtext(alleschueler1,ssuchab,saktpos-1);IF
+richtigebelegung(sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1
+FI ;ssuchab:=saktpos+1FI PER ;sname:=subtext(alleschueler1,ssuchab);IF
+richtigebelegung(sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1
+FI .END PROC schueleraufzeigen;PROC zeigschueler:aktfeld:=felderstername;
+initbspuffer;FOR iFROM 1UPTO anzschuelerbsREP wahldaten:="";weiterewahldaten
+:="";kennungdesschuelers:="";standardmaskenfeld(schuelername,aktfeld);
+standardmaskenfeld(text(wahldaten,22),aktfeld+3);standardmaskenfeld(
+weiterewahldaten,aktfeld+1);IF kennungdesschuelers=leereweiterewahldatenTHEN
+standardmaskenfeld("",aktfeld+2)ELSE standardmaskenfeld(kennungdesschuelers,
+aktfeld+2)FI ;aktfeldINCR 4PER ;infeld(1);standardfelderausgeben;infeld(9).
+END PROC zeigschueler;TEXT PROC schuelername:findpos:=pos(alleschueler,
+trenner1,aktpos+1);IF findpos>0THEN name:=subtext(alleschueler,aktpos+2,
+findpos-1);aktpos:=findposELIF aktpos=length(alleschueler)THEN name:=""ELSE
+name:=subtext(alleschueler,aktpos+2);aktpos:=length(alleschueler)FI ;
+bereitenameauf(name)END PROC schuelername;TEXT PROC bereitenameauf(TEXT
+CONST name):ausgabe:=name;change(ausgabe,trenner2,", ");ausgabe:=text(ausgabe
+,pos(ausgabe,trenner2)-1);wahldatenaufbereiten(name);text(ausgabe,23)END
+PROC bereitenameauf;PROC wahldatenaufbereiten(TEXT CONST name):TEXT VAR
+zblock;IF name=""THEN wahldaten:=leerewahldaten;weiterewahldaten:=
+leereweiterewahldatenELSE pos1:=pos(name,trenner2,1)-1;pos2:=pos(name,
+trenner2,pos1+2)-1;nname:=subtext(name,1,pos1);vname:=subtext(name,pos1+2,
+pos2);gdat:=subtext(name,pos2+2,pos2+9);kennungdesschuelers:=kennungvonfach(
+FALSE );IF kennungdesschuelers=kennungkeinfachCOR kennungdesschuelers=
+kennungkeinkursTHEN kennungdesschuelers:=""FI ;schueler(i)(1):=nname;schueler
+(i)(2):=vname;schueler(i)(3):=gdat;schueler(i)(4):=kennungdesschuelers;
+ermittlewahldaten;ermittleweiterewahldatenFI .ermittlewahldaten:wahl:=
+wahldatenzumschueler(nname,vname,gdat,kennungfake);blockpos:=1;WHILE blockpos
+<length(zeigbloecke)REP zblock:=subtext(zeigbloecke,blockpos,blockpos+2);IF
+schuelerinplanblock(nname,vname,gdat,zblock)THEN wahldatenCAT
+fachvomplanblock(zblock);ELSE wahldatenCAT " "FI ;blockposINCR 3PER .
+ermittleweiterewahldaten:IF zusspaltezeigenTHEN weiterewahldaten:=
+kennungvonfach(TRUE )ELSE weiterewahldaten:=leereweiterewahldatenFI .END
+PROC wahldatenaufbereiten;TEXT PROC kennungvonfach(BOOL CONST inweiterendaten
+):fapos:=1;fawahl:="";IF inweiterendatenTHEN fawahl:=
+weiterewahldatenzumschueler(nname,vname,gdat,kennungfakeartkl)ELSE fawahl:=
+wahldatenzumschueler(nname,vname,gdat,kennungfakeartkl)FI ;IF fawahl=""THEN
+leereweiterewahldatenELSE betrachteallefaecherFI .betrachteallefaecher:WHILE
+fapos<length(fawahl)REP IF subtext(fawahl,fapos,fapos+1)=fachCAND subtext(
+fawahl,fapos+6,fapos+7)=artTHEN fakennung:=subtext(fawahl,fapos+2,fapos+5);
+IF fakennung=leereweiterewahldatenTHEN LEAVE betrachteallefaecherWITH
+kennungkeinkursELSE LEAVE betrachteallefaecherWITH compress(fakennung)FI
+ELSE faposINCR laengefakeartklFI PER ;kennungkeinfach.END PROC kennungvonfach
+;TEXT PROC fachvomplanblock(TEXT CONST block):TEXT VAR plbld:=planblockdaten(
+block,kzkurse),k;blpos:=1;WHILE blpos<LENGTH wahlREP k:=subtext(wahl,blpos,
+blpos+laengekurs-1);IF kurseingetragen(plbld,k)THEN LEAVE fachvomplanblock
+WITH text(k,2)ELSE blposINCR laengekursFI PER ;" "END PROC fachvomplanblock;
+BOOL PROC kurseingetragen(TEXT CONST quelle,teilmuster):INT VAR suchab:=1,
+aktpos;WHILE pos(quelle,teilmuster,suchab)<>0REP aktpos:=pos(quelle,
+teilmuster,suchab);IF aktposMOD laengekurs=1THEN LEAVE kurseingetragenWITH
+TRUE ELSE suchab:=aktpos+1FI PER ;FALSE END PROC kurseingetragen;PROC
+schuelervergleich:saktpos:=1;ssuchab:=2;anzschueler:=0;WHILE saktpos<>0REP
+saktpos:=pos(alleschueler1,trenner1,ssuchab);IF saktpos<>0THEN sname:=subtext
+(alleschueler1,ssuchab,saktpos-1);IF pos(alleschueler2,sname)>0THEN IF
+belegungpruefenTHEN IF richtigebelegung(sname)THEN alleschuelerCAT trenner1+
+sname;anzschuelerINCR 1FI ELSE alleschuelerCAT trenner1+sname;anzschueler
+INCR 1FI FI ;ssuchab:=saktpos+1FI PER ;sname:=subtext(alleschueler1,ssuchab);
+IF pos(alleschueler2,sname)>0THEN IF belegungpruefenTHEN IF richtigebelegung(
+sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1FI ELSE
+alleschuelerCAT trenner1+sname;anzschuelerINCR 1FI FI .END PROC
+schuelervergleich;BOOL PROC richtigebelegung(TEXT CONST name):bewertung:=
+TRUE ;pos1:=pos(name,trenner2,2)-1;pos2:=pos(name,trenner2,pos1+2)-1;nname:=
+subtext(name,2,pos1);vname:=subtext(name,pos1+2,pos2);gdat:=subtext(name,pos2
++2,pos2+9);feld:=12;FOR iFROM 1UPTO 5REP feldINCR 2;vorz:=eingangrow(feld);
+IF vorz<>""THEN blockbez:=eingangrow(feld+1);block:=konvblock(blockbez);IF
+vorz="-"THEN bewertung:=NOT schuelerinplanblock(nname,vname,gdat,block)ELSE
+bewertung:=schuelerinplanblock(nname,vname,gdat,block)FI ;IF NOT bewertung
+THEN LEAVE richtigebelegungWITH FALSE FI FI ;PER ;bewertungEND PROC
+richtigebelegung;PROC schuelerkursenzuordnenspeichern(BOOL CONST speichern):
+speicherungsfehler:=FALSE ;IF speichernTHEN pruefkennungen;speicherkennungen;
+logmeldung:=text1;logmeldungCAT gewjgst;logmeldungCAT punkt;logmeldungCAT
+gewhj;logbucheintragvornehmen(logmeldung);kurswahl2sichern(i);ELSE
+standardmeldung(meldungnspeichern," ")FI ;naechsterbildschirm.pruefkennungen:
+standardmeldung(meldungpruefen," ");j:=felderstekennung;FOR iFROM 1UPTO
+anzschuelerbsREP kennung:=standardmaskenfeld(j);infeld(j);IF kennung<>""THEN
+IF schueler(i)(1)=""THEN fehlermeldungkeinschuelerFI ;planbloecke:=compress(
+kursdaten(fach+kennung,kennungplanbl));IF dbstatus<>0THEN
+fehlermeldungunbekkennungELIF planbloecke<>""CAND kennung<>schueler(i)(4)
+THEN pruefplanbloeckeFI FI ;jINCR 4PER .pruefplanbloecke:prueferstenblock;IF
+length(planbloecke)>3THEN pruefzweitenblockFI .prueferstenblock:IF
+schuelerinplanblock(schueler(i)(1),schueler(i)(2),schueler(i)(3),text(
+planbloecke,3))THEN fehlermeldungschonkursblock1FI .pruefzweitenblock:IF
+schuelerinplanblock(schueler(i)(1),schueler(i)(2),schueler(i)(3),subtext(
+planbloecke,4))THEN fehlermeldungschonkursblock2FI .
+fehlermeldungschonkursblock1:infeld((i-1)*4+9);standardmeldung(
+meldungschonkurs,text(planbloecke,3)+az);return(1);LEAVE
+schuelerkursenzuordnenspeichern.fehlermeldungschonkursblock2:infeld((i-1)*4+9
+);standardmeldung(meldungschonkurs,subtext(planbloecke,4)+az);return(1);
+LEAVE schuelerkursenzuordnenspeichern.fehlermeldungkeinschueler:
+fehlermeldungausgeben((i-1)*4+9,meldungfeldleeren,1);LEAVE
+schuelerkursenzuordnenspeichern.fehlermeldungunbekkennung:infeld((i-1)*4+9);
+standardmeldung(meldungunbeklv,fach+kennung+az);return(1);LEAVE
+schuelerkursenzuordnenspeichern.speicherkennungen:standardmeldung(
+meldungspeichern," ");j:=felderstekennung;FOR iFROM 1UPTO anzschuelerbsREP
+kennung:=standardmaskenfeld(j);infeld(j);IF kennung<>schueler(i)(4)THEN IF
+NOT klausurkzTHEN ermittleklkennzFI ;schuelerwahlaendern(schueler(i)(1),
+schueler(i)(2),schueler(i)(3),fach,schueler(i)(4),art,fach,kennung,art,klkz);
+IF dbstatus<>0THEN speicherungsfehler:=TRUE FI ;FI ;jINCR 4PER ;IF
+speicherungsfehlerTHEN kurswahlserveraktualisieren(aktjgst,gewjgst,gewhj)FI .
+naechsterbildschirm:kurswahl0holen(fstat);kurswahl1holen(fstat);IF aktpos<
+length(alleschueler)CAND NOT speicherungsfehlerTHEN zeigschueler;return(1);
+IF speicherungsfehlerTHEN standardmeldung(meldungspeicherfehler,"");FI ELSE
+kurswahlsperrebeenden(kuwa2sperre);enter(2);IF speicherungsfehlerTHEN
+standardmeldung(meldungspeicherfehler,"");infeld(letztepos)FI FI .END PROC
+schuelerkursenzuordnenspeichern;PROC ermittleklkennz:klwahl:=
+wahldatenzumschueler(schueler(i)(1),schueler(i)(2),schueler(i)(3),
+kennungfaartkl);z:=1;WHILE z<LENGTH (klwahl)REP IF subtext(klwahl,z,z+3)=fach
++artTHEN klkz:=klwahlSUB z+4;LEAVE ermittleklkennzELSE zINCR 5FI PER ;klkz:=
+""END PROC ermittleklkennz;PROC schuelerkursenzuordnenabbruch:
+kurswahlsperrebeenden(kuwa2sperre);enter(2)END PROC
+schuelerkursenzuordnenabbruch;PROC schuelerkursenzuordnenkopieren:kopzeile:=
+infeld;aktzeile:=kopzeile+4;aktkennung:=standardmaskenfeld(kopzeile);IF
+kopzeile=feldletztekennungTHEN fehlermeldungkeinkopELSE WHILE aktzeile<=
+feldletztekennungCAND schueler((aktzeile-5)DIV 4)(1)<>""REP
+standardmaskenfeld(aktkennung,aktzeile);aktzeileINCR 4PER ;infeld(kopzeile+4)
+;standardfelderausgeben;infeld(kopzeile+4);FI ;return(1).fehlermeldungkeinkop
+:standardmeldung(meldungkeinekopfunktion,"").END PROC
+schuelerkursenzuordnenkopieren;PROC schuelerkursenzuordnenlisten:kursliste:=
+"";aktfeld:=infeld;w:=startwindow(35,23,77,1);liste:="";standardmeldung(
+meldunglistezeigen,"");IF menuedraussenTHEN reorganizescreenFI ;fuelleliste;
+infeld(1);standardfelderausgeben;open(w);auskunfterteilung(liste,w,FALSE );
+reorganizescreen;setlasteditvalues;infeld(aktfeld);return(1).fuelleliste:
+listeCAT "Anzahl Schüler wie ausgewählt";listeCAT auskunftstextende;listeCAT
+text(anzschueler);listeCAT auskunftstextende;listeCAT " ";listeCAT
+auskunftstextende;listeCAT "Fach gewählt Kurszahl/-größe";listeCAT
+auskunftstextende;listeCAT fach;listeCAT " ";listeCAT art;listeCAT " ";
+listeCAT gewaehlteschueler;listeCAT " ";listeCAT anzahlkurse;listeCAT
+kursgroesse;listeCAT auskunftstextende;listeCAT " ";listeCAT
+auskunftstextende;listeCAT "Kurse Planblock Schüler";listeCAT
+auskunftstextende;listeallerkurse.listeallerkurse:anfpos:=1;WHILE anfpos<
+length(kursliste)REP listeCAT fach+" ";kennung:=subtext(kursliste,anfpos,
+anfpos+3);listeCAT kennung;listeCAT " ";kurs:=kursdaten(fach+kennung,
+kennungplanbl);IF kurs=""THEN listeCAT " "ELSE listeCAT text(int(
+text(kurs,3)),2);listeCAT " ";listeCAT text(int(subtext(kurs,4)),2);liste
+CAT " ";FI ;listeCAT text(anzahlschuelermitwahl(fach,kennung,"",""));
+listeCAT auskunftstextende;anfposINCR 4PER .gewaehlteschueler:anzsch:=
+anzahlschuelermitwahl(fach,"",art,"");text(text(anzsch),6).kursgroesse:text(
+anzschDIV anzkurse).anzahlkurse:kurse:=allekurse;suchanfang;suchende;IF
+anfpos=0THEN "0 "ELSE kurse:=subtext(kurse,anfpos,endpos);
+betrachtekurse;text(text(anzkurse),10)FI .betrachtekurse:anzkurse:=0;anfpos:=
+1;kursliste:="";WHILE anfpos<length(kurse)REP IF subtext(kurse,anfpos,anfpos+
+1)=fachCAND subtext(kurse,anfpos+8,anfpos+9)=artTHEN anzkurseINCR 1;kursliste
+CAT subtext(kurse,anfpos+2,anfpos+5);FI ;anfposINCR 10PER .suchanfang:anfpos
+:=pos(kurse,fach,1);WHILE anfpos<>0REP IF (anfposMOD 10)=1CAND subtext(kurse,
+anfpos+8,anfpos+9)=artTHEN LEAVE suchanfangELSE anfpos:=pos(kurse,fach,anfpos
++1)FI ;PER .suchende:findpos:=pos(kurse,fach,anfpos+1);IF anfpos<>0THEN
+endpos:=anfpos+9;WHILE findpos<>0REP IF (findposMOD 10)=1CAND subtext(kurse,
+findpos+8,findpos+9)=artTHEN endpos:=findpos+9FI ;findpos:=pos(kurse,fach,
+findpos+1)PER ;ELSE endpos:=0FI .END PROC schuelerkursenzuordnenlisten;TEXT
+PROC konvblock(TEXT CONST blockbez):INT VAR block;IF blockbez<>""THEN block:=
+int(text(blockbez,2));IF block<10THEN "0"+text(block)+text(blockbezSUB 3,1)
+ELSE text(block)+text(blockbezSUB 3,1)FI ELSE " "FI END PROC konvblock;
+PROC initrow:FOR iFROM 2UPTO anzfeldereingangREP eingangrow(i):=""PER END
+PROC initrow;PROC merkeeingangbs:FOR iFROM 2UPTO anzfeldereingangREP
+eingangrow(i):=standardmaskenfeld(i)PER .END PROC merkeeingangbs;PROC
+logbucheintragvornehmen(TEXT CONST escfunktion):logeintrag(logtext1+
+escfunktion+logtext2+aktjgst)END PROC logbucheintragvornehmen;initrow;END
+PACKET schuelerzukursenzuordnen;
+
diff --git a/app/schulis/2.2.1/src/2.stand der kursbildung analysieren b/app/schulis/2.2.1/src/2.stand der kursbildung analysieren
new file mode 100644
index 0000000..f199978
--- /dev/null
+++ b/app/schulis/2.2.1/src/2.stand der kursbildung analysieren
@@ -0,0 +1,132 @@
+PACKET standderkursbildunganalysierenDEFINES
+standderkursbildunganalysierenvorbereiten,
+standderkursbildunganalysierenstarten,standderkursbildunganalysierendrucken:
+LET maskeeingang="ms stand der kursbildung analysieren";LET fnrgewjgst=2,
+fnrhalbjahr=3,fnraktjgst=4,fnrneuanjgst=5,fnralleschueler=6;FILE VAR prot;
+LET protname="Zuordnung von Schülern zu Kursen";LET schulhalbjahr=
+"Schulhalbjahr",schulname="Schulname",schulort="Schulort";LET jgst10=10,
+jgst11=11,jgst13=13,hj1=1,hj2=2;LET meldnrdatenwerdengeprueft=57,
+meldnrbittewarten=69,meldnrbearbeitetwird=102,meldnrbitteangabeergaenzen=129,
+meldnrfalschejgstfolge=410,meldnrfalschebezugsjgst=411,meldnrkurswahlfehler=
+416;LET feldanzmaskeeingang=6;ROW feldanzmaskeeingangTEXT VAR feldbs1;INT
+VAR letztecursorfnr:=fnrgewjgst,pruefstatus,kurswahlstatus;TEXT VAR
+aktuelleshalbjahr:="",aktjgst,gewjgst,gewhalbjahr,neuanjgst,gewschuljahr;
+BOOL VAR alleschueler,fehlerinschuelerwahl;TEXT VAR gewschueler;LET
+nuraktuelleschueler="O",nurneuangemeldete="N";INT VAR ischueler;TEXT VAR
+wahldaten,schuelername,anfangsbuchstabe,kurs,gueltigekurse;INT VAR ikurs;LET
+maxkurse=13;ROW maxkurseSTRUCT (TEXT eintrag,TEXT pb1,TEXT pb2)VAR
+kurshinweis;TEXT VAR planbloecke,belegtebloecke,pbnr,pbkennung,pruefblock;
+LET pbkennunga="a",pbkennungb="b",pbleer=" ";INT VAR poskurs;LET laengekurs
+=6,laengeschuelerkurs=15,laengekursangaben=10,laengeplanblock=3;LET trenner=
+"�",schraegstrich="/",doppelpunkt=":",kennzhell="#";LET kennungname="N",
+kennungkurse="K",kennungplanblock="P";TEXT VAR auszeile,fachzeile,kurszeile,
+fehlerzeile;LET ueberschrift="Zuordnung von Schülern zu Kursen",untertitel1=
+"Jgst. ",erklaerung1="(Fehlende Zuordnungen sind mit ""_"" hervorgehoben,",
+erklaerung2="Überschneidungen in Planblöcken mit ""*"",",erklaerung3=
+"ungültige Kursbezeichnungen mit ""$"" markiert.)",blank=" ",zeilenbeginn=
+" ",leereintrag=" :",ungueltigerkurs="$$$$:",fehlenderkurs="____:",
+gleichzeitigerkurs="****:";initfelderdeseingangsbildschirms;PROC
+standderkursbildunganalysierenvorbereiten:standardstartproc(maskeeingang);
+wertedeseingangsbildschirmsholen;infeld(fnrgewjgst);standardfelderausgeben;
+infeld(letztecursorfnr);standardnprocEND PROC
+standderkursbildunganalysierenvorbereiten;PROC
+standderkursbildunganalysierenstarten:eingangsbehandlung;IF pruefstatus>0
+THEN infeld(pruefstatus);return(1)ELSE wertedeseingangsbildschirmsmerken;
+standardmeldung(meldnrbittewarten,"");kurswahlinitialisieren(aktjgst,gewjgst,
+gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(kurswahlstatus);IF
+kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELSE
+protokollvorbereiten;kurszuordnungenanalysieren;zeigedatei(protname,"")FI FI
+.protokollvorbereiten:forget(protname,quiet);prot:=sequentialfile(output,
+protname);putline(prot,schulkenndatum(schulname));auszeile:=text(
+schulkenndatum(schulort),60);auszeileCAT date;putline(prot,auszeile);line(
+prot,2);putline(prot,20*blank+ueberschrift);auszeile:=22*blank;auszeileCAT
+untertitel1;auszeileCAT aktjgst;auszeileCAT " für ";auszeileCAT gewjgst;
+auszeileCAT ".";auszeileCAT gewhalbjahr;auszeileCAT blank;auszeileCAT
+aufberschuljahr;putline(prot,auszeile);line(prot,2);auszeile:=erklaerung1;
+putline(prot,auszeile);auszeile:=erklaerung2;putline(prot,auszeile);auszeile
+:=erklaerung3;putline(prot,auszeile).END PROC
+standderkursbildunganalysierenstarten;PROC kurswahlfehlerbehandeln:
+standardmeldung(meldnrkurswahlfehler,"");pause(10)END PROC
+kurswahlfehlerbehandeln;TEXT PROC aufberschuljahr:TEXT VAR aufbersj:=subtext(
+gewschuljahr,1,2);aufbersjCAT schraegstrich;aufbersjCAT subtext(gewschuljahr,
+3,4);aufbersjEND PROC aufberschuljahr;PROC kurszuordnungenanalysieren:
+gueltigekurse:=allekurse;anfangsbuchstabe:="";FOR ischuelerFROM
+ersterschuelerUPTO letzterschuelerREP schuelerwahluntersuchenPER .
+schuelerwahluntersuchen:fachzeile:=zeilenbeginn;kurszeile:=zeilenbeginn;
+wahldaten:=wahldatenzumindex(ischueler,kennungkurse);schuelername:=
+wahldatenzumindex(ischueler,kennungname);IF (schuelernameSUB 1)<>
+anfangsbuchstabeTHEN anfangsbuchstabe:=schuelernameSUB 1;standardmeldung(
+meldnrbearbeitetwird,anfangsbuchstabe+kennzhell)FI ;fehlerinschuelerwahl:=
+FALSE ;belegtebloecke:="";poskurs:=1;FOR ikursFROM 1UPTO maxkurseREP kurs:=
+subtext(wahldaten,poskurs+3,poskurs+laengekurs+2);IF kurs<>""THEN
+facheintragen;kurseintragen;kurshinweiseintragenELSE leereintraegeergaenzen
+FI ;poskursINCR laengeschuelerkursPER ;fehlerzeilezusammenstellen;IF
+fehlerinschuelerwahlCOR alleschuelerTHEN line(prot);changeall(schuelername,
+trenner,", ");putline(prot,schuelername);putline(prot,fachzeile);putline(prot
+,kurszeile);putline(prot,fehlerzeile)FI .facheintragen:fachzeileCAT subtext(
+kurs,1,2);fachzeileCAT " :".kurseintragen:IF subtext(kurs,3,6)<>" "THEN
+kurszeileCAT subtext(kurs,3,6)ELSE kurszeileCAT subtext(wahldaten,poskurs+1,
+poskurs+2);kurszeileCAT " "FI ;kurszeileCAT doppelpunkt.kurshinweiseintragen
+:IF subtext(kurs,3,6)=" "THEN kurshinweis(ikurs).eintrag:=fehlenderkurs
+ELIF suchpos(gueltigekurse,kurs,laengekursangaben)=0THEN kurshinweis(ikurs).
+eintrag:=ungueltigerkursELSE kurshinweis(ikurs).eintrag:="";planbloecke:=
+kursdaten(kurs,kennungplanblock);kurshinweis(ikurs).pb1:=subtext(planbloecke,
+1,3);kurshinweis(ikurs).pb2:=subtext(planbloecke,4,6);belegtenblockeintragen(
+kurshinweis(ikurs).pb1);belegtenblockeintragen(kurshinweis(ikurs).pb2)FI .
+fehlerzeilezusammenstellen:fehlerzeile:=zeilenbeginn;FOR ikursFROM 1UPTO
+maxkurseREP IF kurshinweis(ikurs).eintrag=""THEN doppelbelegungpruefen;
+fehlerzeileCAT kurshinweis(ikurs).eintrag;ELIF kurshinweis(ikurs).eintrag=
+leereintragTHEN fehlerzeileCAT leereintragELSE fehlerzeileCAT kurshinweis(
+ikurs).eintrag;fehlerinschuelerwahl:=TRUE FI PER .leereintraegeergaenzen:
+fachzeileCAT leereintrag;kurszeileCAT leereintrag;kurshinweis(ikurs).eintrag
+:=leereintrag.doppelbelegungpruefen:pruefblock:=kurshinweis(ikurs).pb1;IF
+schnittliegtvorTHEN kurshinweis(ikurs).eintrag:=gleichzeitigerkurs;
+fehlerinschuelerwahl:=TRUE ELSE pruefblock:=kurshinweis(ikurs).pb2;IF
+schnittliegtvorTHEN kurshinweis(ikurs).eintrag:=gleichzeitigerkurs;
+fehlerinschuelerwahl:=TRUE ELSE kurshinweis(ikurs).eintrag:=leereintragFI FI
+.schnittliegtvor:IF pruefblock=pbleerTHEN FALSE ELSE pos(belegtebloecke,
+pruefblock,suchpos(belegtebloecke,pruefblock,laengeplanblock)+1)>0FI .END
+PROC kurszuordnungenanalysieren;PROC belegtenblockeintragen(TEXT VAR
+belegterpb):IF belegterpb<>pbleerTHEN pbnr:=subtext(belegterpb,1,2);pbkennung
+:=belegterpbSUB laengeplanblock;belegtebloeckeCAT pbnr;belegtebloeckeCAT
+pbkennung;IF pbkennung=blankTHEN belegtebloeckeCAT pbnr;belegtebloeckeCAT
+pbkennunga;belegtebloeckeCAT pbnr;belegtebloeckeCAT pbkennungb;ELSE
+belegtebloeckeCAT pbnr;belegtebloeckeCAT blankFI ;FI END PROC
+belegtenblockeintragen;PROC standderkursbildunganalysierendrucken(BOOL CONST
+drucken):IF druckenTHEN print(protname)FI ;forget(protname,quiet);enter(2)
+END PROC standderkursbildunganalysierendrucken;PROC eingangsbehandlung:
+pruefstatus:=0;standardmeldung(meldnrdatenwerdengeprueft,"");aktjgst:=
+standardmaskenfeld(fnraktjgst);gewhalbjahr:=standardmaskenfeld(fnrhalbjahr);
+gewjgst:=standardmaskenfeld(fnrgewjgst);neuanjgst:=standardmaskenfeld(
+fnrneuanjgst);alleschueler:=standardmaskenfeld(fnralleschueler)<>"";IF
+aktuelleshalbjahr=""THEN aktuelleshalbjahr:=schulkenndatum(schulhalbjahr)FI ;
+allgemeinefelderpruefen.allgemeinefelderpruefen:standardpruefe(3,fnrgewjgst,
+jgst11,jgst13,"",pruefstatus);IF pruefstatus>0THEN LEAVE
+allgemeinefelderpruefenFI ;standardpruefe(3,fnrhalbjahr,hj1,hj2,"",
+pruefstatus);IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;IF aktjgst
+<>""THEN IF int(aktuelleshalbjahr)=hj2THEN standardpruefe(3,fnraktjgst,jgst10
+,jgst13,"",pruefstatus)ELSE standardpruefe(3,fnraktjgst,jgst11,jgst13,"",
+pruefstatus)FI ;IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ;IF
+neuanjgst<>""THEN standardpruefe(3,fnrneuanjgst,jgst11,jgst13,"",pruefstatus)
+;IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ;IF aktjgst<>""
+THEN IF neuanjgst<>""THEN IF int(neuanjgst)<>int(aktjgst)+1THEN
+standardmeldung(meldnrfalschejgstfolge,"");pruefstatus:=fnraktjgst;LEAVE
+allgemeinefelderpruefenFI ;gewschueler:=""ELSE gewschueler:=
+nuraktuelleschuelerFI ELIF neuanjgst=""THEN standardmeldung(
+meldnrbitteangabeergaenzen,"");pruefstatus:=fnraktjgst;LEAVE
+allgemeinefelderpruefenELSE gewschueler:=nurneuangemeldete;aktjgst:=text(int(
+neuanjgst)-1)FI ;IF aktjgst>gewjgstCOR (aktjgst=gewjgstAND aktuelleshalbjahr>
+gewhalbjahr)THEN standardmeldung(meldnrfalschebezugsjgst,"");pruefstatus:=
+fnrgewjgst;LEAVE allgemeinefelderpruefenFI .END PROC eingangsbehandlung;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;PROC initfelderdeseingangsbildschirms:INT VAR i;FOR i
+FROM 1UPTO feldanzmaskeeingangREP feldbs1(i):=""PER END PROC
+initfelderdeseingangsbildschirms;PROC wertedeseingangsbildschirmsmerken:INT
+VAR i;letztecursorfnr:=infeld;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1(
+i):=standardmaskenfeld(i)PER END PROC wertedeseingangsbildschirmsmerken;PROC
+wertedeseingangsbildschirmsholen:INT VAR i;FOR iFROM 1UPTO
+feldanzmaskeeingangREP standardmaskenfeld(feldbs1(i),i)PER END PROC
+wertedeseingangsbildschirmsholen;END PACKET standderkursbildunganalysieren
+
diff --git a/app/schulis/2.2.1/src/3.anschr.betroffene lehrer b/app/schulis/2.2.1/src/3.anschr.betroffene lehrer
new file mode 100644
index 0000000..453a590
--- /dev/null
+++ b/app/schulis/2.2.1/src/3.anschr.betroffene lehrer
@@ -0,0 +1,174 @@
+PACKET auskunftlehrerDEFINES lehrerauskunfteingang,lehrerauskunftstarten,
+lehrerauskunftsonderwerte:LET anrede=511,nameaufbereitet=513;INT VAR x,index
+:=dnrlehrer,aktuellesfach,aktuelleart,aktuelleartlehrbefaehigunglangtext;LET
+schulj=526,halbj=527,ermaessgrund1langtext=550,ermaessgrund2langtext=551,
+ermaessgrund3langtext=552,ermaessgrund4langtext=553;INT VAR
+aktswklassenlehrer:=580,aktswstellvertreter:=581;LET ganztage=520,ganzgew=521
+,vormtage=522,vormgew=523,nachtage=524,nachgew=525;LET swdatum=520,swzeit=521
+,swart=522,swlv=523;LET maske="ms auskunft lehrer eingang",paraphenfeldnr=2,
+trenner="/",niltext="",blank=" ",strich=" --- ",mnrbittewarten=69,
+mnrkeinegueltigeparaphe=344;TEXT CONST dateimitvordruck1:=
+"vordruck1 auskunft lehrer",dateimitvordruck2:="vordruck2 auskunft lehrer",
+dateimitvordruck3:="vordruck3 auskunft lehrer",dateimitvordruck4:=
+"vordruck4 auskunft lehrer",dateimitvordruck5:="vordruck5 auskunft lehrer",
+dateimitvordruck6:="vordruck6 auskunft lehrer",dateimitvordruck7:=
+"vordruck7 auskunft lehrer",bestandnameartlehrbefaehigung:=
+"c02 art lehrbefaehigung",bestandnamepersoenlermaessigung:=
+"c02 persoenl ermaess";TEXT VAR angegebeneparaphe:="",aktuelleshalbjahr,
+aktuellesschuljahr,geplanteshalbjahr,geplantesschuljahr,schuljahr:="",
+halbjahr:="";INT VAR zeilenzahl,zeilenhilfszahl,zusatzzeilen;BOOL PROC
+paraphevorhanden:putwert(fnrlparaphe,angegebeneparaphe);search(dnrlehrer,
+TRUE );IF dbstatus=0THEN TRUE ELSE FALSE FI END PROC paraphevorhanden;PROC
+lehrerauskunfteingang:standardvproc(maske)END PROC lehrerauskunfteingang;
+PROC lehrerauskunftstarten:angegebeneparaphe:=standardmaskenfeld(
+paraphenfeldnr);IF angegebeneparaphe<>niltextTHEN startenausfuehrenELSE
+meldeeingabefehler;zurueckzumdialogFI ;.meldeeingabefehler:standardmeldung(
+mnrkeinegueltigeparaphe,niltext).zurueckzumdialog:return(1).startenausfuehren
+:IF NOT (paraphevorhanden)THEN meldeeingabefehler;zurueckzumdialogELSE BOOL
+CONST bildschirmausgabe:=FALSE ,einzelbearbeitung:=TRUE ;aktuelleshalbjahr:=
+schulkenndatum("Schulhalbjahr");aktuellesschuljahr:=schulkenndatum(
+"Schuljahr");geplanteshalbjahr:=aktuelleshalbjahr;geplantesschuljahr:=
+aktuellesschuljahr;geplanteshjundsjberechnen(geplanteshalbjahr,
+geplantesschuljahr);setzesonderwerteschulkenndaten;setzewerte;standardmeldung
+(mnrbittewarten,niltext);zusammengesetztesanschreiben(index,bildschirmausgabe
+,einzelbearbeitung,BOOL PROC lehrerauskunftsonderwerte,BOOL PROC
+scanbedingung,TEXT PROC druckdateibauen);FI ;.setzewerte:putwert(fnrlparaphe,
+angegebeneparaphe)END PROC lehrerauskunftstarten;BOOL PROC scanbedingung:IF
+dbstatus=0THEN TRUE ELSE FALSE FI END PROC scanbedingung;BOOL PROC
+lehrerauskunftsonderwerte:LET sechs=6;ROW sechsTEXT VAR artlehrbefaehigung;
+initialisieresonderwerte;adressat(angegebeneparaphe);TEXT VAR anredetext:=
+"Frau";IF wert(fnrlgeschlecht)="m"THEN anredetext:="Herrn"FI ;setzesonderwert
+(anrede,anredetext);setzesonderwert(nameaufbereitet,wert(fnrlrufname)+" "+
+wert(fnrlzusatz)+" "+wert(fnrlfamname));TEXT VAR grund1,grund2,grund3,grund4;
+grund1:=wert(fnrlermgrund1);grund2:=wert(fnrlermgrund2);grund3:=wert(
+fnrlermgrund3);grund4:=wert(fnrlermgrund4);inittupel(dnrlehrbefaehigungen);
+putwert(fnrlbparaphe,angegebeneparaphe);search(ixlbpar,FALSE );aktuellesfach
+:=514;aktuelleart:=515;aktuelleartlehrbefaehigunglangtext:=554;FOR xFROM 1
+UPTO sechsREP IF dbstatus=0AND wert(fnrlbparaphe)=angegebeneparapheTHEN
+setzesonderwert(aktuellesfach,wert(fnrlbfach));artlehrbefaehigung(x):=wert(
+fnrlbart);setzesonderwert(aktuelleart,artlehrbefaehigung(x));ELSE
+setzesonderwert(aktuellesfach,niltext);artlehrbefaehigung(x):=niltext;
+setzesonderwert(aktuelleart,niltext);FI ;succ(ixlbpar);aktuellesfachINCR 2;
+aktuelleartINCR 2PER ;inittupel(dnrschluessel);putwert(fnrschlsachgebiet,
+bestandnamepersoenlermaessigung);putwert(fnrschlschluessel,grund1);search(
+dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert(ermaessgrund1langtext,
+wert(fnrschllangtext))ELSE setzesonderwert(ermaessgrund1langtext,blank)FI ;
+putwert(fnrschlschluessel,grund2);search(dnrschluessel,TRUE );IF dbstatus=0
+THEN setzesonderwert(ermaessgrund2langtext,wert(fnrschllangtext));ELSE
+setzesonderwert(ermaessgrund2langtext,blank);FI ;putwert(fnrschlschluessel,
+grund3);search(dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert(
+ermaessgrund3langtext,wert(fnrschllangtext))ELSE setzesonderwert(
+ermaessgrund3langtext,blank)FI ;putwert(fnrschlschluessel,grund4);search(
+dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert(ermaessgrund4langtext,
+wert(fnrschllangtext))ELSE setzesonderwert(ermaessgrund4langtext,blank)FI ;
+putwert(fnrschlsachgebiet,bestandnameartlehrbefaehigung);FOR xFROM 1UPTO 6
+REP putwert(fnrschlschluessel,artlehrbefaehigung(x));search(dnrschluessel,
+TRUE );IF dbstatus=0THEN setzesonderwert(aktuelleartlehrbefaehigunglangtext,
+wert(fnrschllangtext))ELSE setzesonderwert(aktuelleartlehrbefaehigunglangtext
+,blank)FI ;aktuelleartlehrbefaehigunglangtextINCR 1PER ;TRUE END PROC
+lehrerauskunftsonderwerte;TEXT PROC druckdateibauen:LET druckdatei="liste.1",
+hilfsdatei="hilfsdatei";TEXT VAR zeile;INT VAR i;BOOL VAR mitdatendesgeplhjs
+:=FALSE ;BOOL VAR weiteresaetzeda:=FALSE ;vordruckeholen;
+setzemitseitennummern(TRUE );druckvorbereiten;zeilenzahl:=0;zusatzzeilen:=0;
+briefalternative(dateimitvordruck1,hilfsdatei);hilfsdateiindruckdatei(
+hilfsdatei);zusatzzeilen:=5;sonderwertsjundhjsetzen(aktuellesschuljahr,
+aktuelleshalbjahr);ggfvordruck21malundvordruck3xmalindruckdatei(
+mitdatendesgeplhjs);mitdatendesgeplhjs:=TRUE ;sonderwertsjundhjsetzen(
+geplantesschuljahr,geplanteshalbjahr);
+ggfvordruck21malundvordruck3xmalindruckdatei(mitdatendesgeplhjs);zusatzzeilen
+:=4;vordruck4indruckdatei(aktuellesschuljahr,aktuelleshalbjahr);
+vordruck4indruckdatei(geplantesschuljahr,geplanteshalbjahr);zusatzzeilen:=14;
+vordruck5indruckdatei(aktuellesschuljahr,aktuelleshalbjahr);
+vordruck5indruckdatei(geplantesschuljahr,geplanteshalbjahr);zusatzzeilen:=4;
+ggf1malvordruck6undxmalvordruck7indruckdatei;drucknachbereitenohneausdrucken;
+vordruckeloeschen;druckdatei.vordruckeholen:fetch(dateimitvordruck1,/
+"anschreiben server");fetch(dateimitvordruck2,/"anschreiben server");fetch(
+dateimitvordruck3,/"anschreiben server");fetch(dateimitvordruck4,/
+"anschreiben server");fetch(dateimitvordruck5,/"anschreiben server");fetch(
+dateimitvordruck6,/"anschreiben server");fetch(dateimitvordruck7,/
+"anschreiben server");.vordruckeloeschen:forget(dateimitvordruck1,quiet);
+forget(dateimitvordruck2,quiet);forget(dateimitvordruck3,quiet);forget(
+dateimitvordruck4,quiet);forget(dateimitvordruck5,quiet);forget(
+dateimitvordruck6,quiet);forget(dateimitvordruck7,quiet);.
+ggf1malvordruck6undxmalvordruck7indruckdatei:inittupel(dnrvertretungen);
+putwert(fnrvparaphe,angegebeneparaphe);search(ixvpar,FALSE );IF dbstatus=0
+AND wert(fnrvparaphe)=angegebeneparapheTHEN swvertretungenfuellen;
+briefalternative(dateimitvordruck6,hilfsdatei);hilfsdateiindruckdatei(
+hilfsdatei);weiteresaetzeda:=FALSE ;succ(ixvpar);zusatzzeilen:=1;WHILE
+dbstatus=0AND wert(fnrvparaphe)=angegebeneparapheREP weiteresaetzeda:=TRUE ;
+swvertretungenfuellen;briefalternative(dateimitvordruck7,hilfsdatei);succ(
+ixvpar);PER ;IF weiteresaetzedaTHEN hilfsdateiindruckdatei(hilfsdatei)FI ;FI
+;END PROC druckdateibauen;PROC swvertretungenfuellen:TEXT VAR datum,
+datumaufber,lehrveranstg,lvaufber,zeitaufber;INT VAR zeit,tag,std;
+initialisieresonderwerte;datum:=wert(fnrvdatum);zeit:=intwert(fnrvtagstd);
+lehrveranstg:=wert(fnrvveranstaltung);datumaufber:=subtext(datum,1,2)+".";
+datumaufberCAT subtext(datum,4,5)+".";datumaufberCAT subtext(datum,7,8);tag:=
+(zeit-1)DIV 12;std:=zeitMOD 12;IF tag=0THEN zeitaufber:="Mo "ELIF tag=1THEN
+zeitaufber:="Di "ELIF zeit=2THEN zeitaufber:="Mi "ELIF zeit=3THEN zeitaufber
+:="Do "ELIF zeit=4THEN zeitaufber:="Fr "ELIF zeit=5THEN zeitaufber:="Sa "FI ;
+zeitaufberCAT text(std,2);lvaufber:=subtext(lehrveranstg,1,2)+blank;lvaufber
+CAT subtext(lehrveranstg,3,4)+blank;lvaufberCAT subtext(lehrveranstg,5,8);
+setzesonderwert(swdatum,datumaufber);setzesonderwert(swzeit,zeitaufber);
+setzesonderwert(swart,wert(fnrvanrechnung));setzesonderwert(swlv,lvaufber);
+END PROC swvertretungenfuellen;PROC hilfsdateiindruckdatei(TEXT CONST
+hilfsdatei):FILE VAR f;INT VAR i;TEXT VAR zeile;f:=sequentialfile(input,
+hilfsdatei);zeilenhilfszahl:=lines(f);IF zeilenzahl+zeilenhilfszahl+
+zusatzzeilen>=drucklaengeTHEN seitenwechsel;zeilenzahl:=0;FI ;FOR iFROM 1
+UPTO zeilenhilfszahlREP getline(f,zeile);druckzeileschreiben(zeile)PER ;
+forget(hilfsdatei,quiet);zeilenzahlINCR zeilenhilfszahlEND PROC
+hilfsdateiindruckdatei;PROC sonderwertsjundhjsetzen(TEXT VAR sj,hj):
+setzesonderwert(schulj,subtext(sj,1,2)+trenner+subtext(sj,3,4));
+setzesonderwert(halbj,hj);END PROC sonderwertsjundhjsetzen;PROC
+ggfvordruck21malundvordruck3xmalindruckdatei(BOOL VAR geplhj):LET aktjgst=528
+,aktfach=529,aktkurs=530,aktwochstd=531,hilfsdatei="hilfsdatei";TEXT VAR fach
+,jgst:=blank,kennung;IF geplhjTHEN halbjahr:=geplanteshalbjahr;schuljahr:=
+geplantesschuljahr;ELSE halbjahr:=aktuelleshalbjahr;schuljahr:=
+aktuellesschuljahr;FI ;inittupel(dnrlehrveranstaltungen);putwert(fnrlvparaphe
+,angegebeneparaphe);putwert(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);
+search(ixlvsjhjpar,FALSE );IF dbstatus=0AND (wert(fnrlvparaphe)=
+angegebeneparaphe)AND (wert(fnrlvhj)=halbjahr)AND (wert(fnrlvsj)=schuljahr)
+THEN briefalternative(dateimitvordruck2,hilfsdatei);
+sonderwertesetzenundinhilfsdateischreiben;hilfsdateiindruckdatei(hilfsdatei);
+FI ;.sonderwertesetzenundinhilfsdateischreiben:WHILE dbstatus=0AND (wert(
+fnrlvparaphe)=angegebeneparaphe)AND (wert(fnrlvhj)=halbjahr)AND (wert(fnrlvsj
+)=schuljahr)REP fach:=subtext(wert(fnrlvfachkennung),1,2);setzesonderwert(
+aktfach,fach);kennung:=subtext(wert(fnrlvfachkennung),3,6);setzesonderwert(
+aktkurs,kennung);jgstCAT wert(fnrlvjgst);IF length(jgst)>2THEN
+setzesonderwert(aktjgst,subtext(jgst,2,3));ELSE setzesonderwert(aktjgst,jgst)
+;FI ;jgst:=blank;setzesonderwert(aktwochstd,wert(fnrlvwochenstd));
+briefalternative(dateimitvordruck3,hilfsdatei);succ(ixlvsjhjpar);PER ;END
+PROC ggfvordruck21malundvordruck3xmalindruckdatei;PROC vordruck4indruckdatei(
+TEXT VAR sj,hj):LET hilfsdatei="hilfsdatei";TEXT VAR aufberwert:=niltext;
+BOOL VAR hilfsdateiangelegt:=FALSE ;TEXT VAR ueberschrift:="Schuljahr ";
+initialisieresonderwerte;aktswklassenlehrer:=580;aktswstellvertreter:=581;
+ueberschriftCAT subtext(sj,1,2)+"/"+subtext(sj,3,4);ueberschriftCAT ", "+hj+
+". Halbjahr";setzesonderwert(schulj,ueberschrift);inittupel(
+dnraktschuelergruppen);putwert(fnrsgrpsj,sj);putwert(fnrsgrphj,hj);search(
+dnraktschuelergruppen,FALSE );WHILE dbstatus=0AND wert(fnrsgrphj)=hjREP IF
+wert(fnrsgrplehrer)=angegebeneparapheAND aktswklassenlehrer<590THEN
+aufberwert:=wert(fnrsgrpjgst);aufberwertCAT wert(fnrsgrpkennung);
+setzesonderwert(aktswklassenlehrer,aufberwert);aktswklassenlehrerINCR 2;
+hilfsdateiangelegt:=TRUE ;ELSE IF wert(fnrsgrpstellvlehrer)=angegebeneparaphe
+AND aktswstellvertreter<591THEN aufberwert:=wert(fnrsgrpjgst);aufberwertCAT
+wert(fnrsgrpkennung);setzesonderwert(aktswstellvertreter,aufberwert);
+aktswstellvertreterINCR 2;hilfsdateiangelegt:=TRUE ;FI ;FI ;succ(
+dnraktschuelergruppen)PER ;IF hilfsdateiangelegtTHEN briefalternative(
+dateimitvordruck4,hilfsdatei);hilfsdateiindruckdatei(hilfsdatei);FI ;END
+PROC vordruck4indruckdatei;PROC vordruck5indruckdatei(TEXT VAR sj,hj):LET
+hilfsdatei="hilfsdatei";TEXT VAR zeitwuensche,ueberschrift:="Schuljahr ";
+initialisieresonderwerte;INT VAR aktswzeitwunsch:=531,position:=1,i;
+ueberschriftCAT subtext(sj,1,2)+"/"+subtext(sj,3,4);ueberschriftCAT ", "+hj+
+". Halbjahr";setzesonderwert(schulj,ueberschrift);inittupel(dnrzeitwuensche);
+putwert(fnrzwsj,sj);putwert(fnrzwhj,hj);putwert(fnrzwbezug,"P");putwert(
+fnrzwbezugsobjekt,angegebeneparaphe);search(dnrzeitwuensche,TRUE );IF
+dbstatus=0THEN zeitwuensche:=wert(fnrzwunbestimmtewuensche);setzesonderwert(
+ganztage,zeitwuenscheSUB 1);setzesonderwert(ganzgew,zeitwuenscheSUB 3);
+setzesonderwert(vormtage,zeitwuenscheSUB 4);setzesonderwert(vormgew,
+zeitwuenscheSUB 6);setzesonderwert(nachtage,zeitwuenscheSUB 7);
+setzesonderwert(nachgew,zeitwuenscheSUB 9);zeitwuensche:=wert(
+fnrzwbestimmtewuensche);FOR iFROM 1UPTO 66REP setzesonderwert(aktswzeitwunsch
+,subtext(zeitwuensche,position,position+1));aktswzeitwunschINCR 1;position
+INCR 2PER ;briefalternative(dateimitvordruck5,hilfsdatei);
+hilfsdateiindruckdatei(hilfsdatei);FI ;END PROC vordruck5indruckdatei;END
+PACKET auskunftlehrer;
+
diff --git a/app/schulis/2.2.1/src/3.erf lehrer b/app/schulis/2.2.1/src/3.erf lehrer
new file mode 100644
index 0000000..47846ee
--- /dev/null
+++ b/app/schulis/2.2.1/src/3.erf lehrer
@@ -0,0 +1,134 @@
+PACKET erflehrerDEFINES erfassunglehrer:LET trenner=" = ",komma=", ",leer="",
+trennerfuerimbestand="�",dateinameschluessel="Schlüssel",dateinamefaecher=
+"Fächer",null=0;LET maskenname="ms erf lehrer",fnrletztesfeld=32,fnrparaphe=2
+,fnrfamilienname=3,fnrrufname=4,fnrnamenszusatz=5,fnramtsbezeichnung=6,
+fnrgeschlecht=7,fnrstrasseundnummer=8,fnrplzundort=9,fnrtelefon=10,
+fnrlehrbeffach=11,fnrlehrbefart=12,fnrpflichtstunden=23,fnrermaessigung=24,
+fnrermaessigungsgrund=25,fnrsprechzeiten=32,anzlehrbefprolehrer=6,
+anzermprolehrer=4;LET untergrenze=0,obergrenze=99,paraphenlaenge=4,
+bestandermgrund="c02 persoenl ermaess",bestandartlehrbef=
+"c02 art lehrbefaehigung",meldungparaphezulang=178,meldungzugeschlecht=55,
+meldungzumbestand=55,meldungzusollstunden=175,meldungzulehrbeffach=177,
+meldungzufachdoppelt=176;ROW anzlehrbefprolehrerSTRUCT (TEXT fach,art)VAR
+altelehrbefaehigungen;TEXT VAR alteparaphe;INT VAR sollstunden;PROC
+erfassunglehrer(INT CONST proznr):reinitparsing;SELECT proznrOF CASE 1:
+setzeerfassungsparameterCASE 2:zeigelehrerzurbearbeitungCASE 3:
+pruefeplausibilitaetCASE 4:setzewertefuerdbspeicherungCASE 5:
+setzeidentiobjektfuerobjektlisteCASE 6:lehrerlesenCASE 7:lehreraendernCASE 8:
+lehrereinfuegenCASE 9:lehrerloeschenEND SELECT END PROC erfassunglehrer;PROC
+setzeerfassungsparameter:systemdboff;setzeerfassungsparameter(dnrlehrer,
+maskenname,fnrletztesfeld).END PROC setzeerfassungsparameter;PROC
+zeigelehrerzurbearbeitung:INT VAR i;alteparaphe:=wert(fnrlparaphe);
+setzeerfassungsfeld(wert(fnrlparaphe),fnrparaphe);setzeerfassungsfeld(wert(
+fnrlfamname),fnrfamilienname);setzeerfassungsfeld(wert(fnrlrufname),
+fnrrufname);setzeerfassungsfeld(wert(fnrlzusatz),fnrnamenszusatz);
+setzeerfassungsfeld(wert(fnrlamtsbeztitel),fnramtsbezeichnung);
+setzeerfassungsfeld(wert(fnrlgeschlecht),fnrgeschlecht);setzeerfassungsfeld(
+wert(fnrlpflichtstd),fnrpflichtstunden);FOR iFROM 0UPTO anzermprolehrer-1REP
+setzeerfassungsfeld(wert(fnrlerm1+2*i),fnrermaessigung+2*i);
+setzeerfassungsfeld(wert(fnrlermgrund1+2*i),fnrermaessigungsgrund+2*i)PER ;
+FOR iFROM 0UPTO 5REP setzeerfassungsfeld(altelehrbefaehigungen(i+1).fach,
+fnrlehrbeffach+2*i);setzeerfassungsfeld(altelehrbefaehigungen(i+1).art,
+fnrlehrbefart+2*i)PER ;setzeerfassungsfeld(wert(fnrlsprechzeit),
+fnrsprechzeiten);setzeerfassungsfeld(wert(fnrlstrnr),fnrstrasseundnummer);
+setzeerfassungsfeld(wert(fnrlplzort),fnrplzundort);setzeerfassungsfeld(wert(
+fnrltelnr),fnrtelefon)END PROC zeigelehrerzurbearbeitung;PROC
+pruefeplausibilitaet:INT VAR i,j,fehlerstatus;pruefe(1,erfassungsmaske,PROC
+erfassungswert,fnrparaphe,null,null,leer,fehlerstatus);IF fehlerstatus<>0
+THEN setzefehlerstatus(fehlerstatus);LEAVE pruefeplausibilitaetFI ;IF length(
+erfassungswert(fnrparaphe))>paraphenlaengeTHEN meldeauffaellig(
+erfassungsmaske,meldungparaphezulang);setzefehlerstatus(fnrparaphe);LEAVE
+pruefeplausibilitaetFI ;pruefe(1,erfassungsmaske,PROC erfassungswert,
+fnrfamilienname,null,null,leer,fehlerstatus);IF fehlerstatus<>0THEN
+setzefehlerstatus(fehlerstatus);LEAVE pruefeplausibilitaetFI ;IF
+erfassungswert(fnrgeschlecht)<>"m"AND erfassungswert(fnrgeschlecht)<>"w"THEN
+meldeauffaellig(erfassungsmaske,meldungzugeschlecht);setzefehlerstatus(
+fnrgeschlecht);LEAVE pruefeplausibilitaetFI ;FOR iFROM 0UPTO
+anzlehrbefprolehrer-1REP IF erfassungswert(fnrlehrbefart+2*i)<>""THEN IF
+erfassungswert(fnrlehrbeffach+2*i)=""THEN meldeauffaellig(erfassungsmaske,
+meldungzulehrbeffach);setzefehlerstatus(fnrlehrbeffach+2*i);LEAVE
+pruefeplausibilitaetFI ;IF NOT imbestand(bestandartlehrbef+
+trennerfuerimbestand+erfassungswert(fnrlehrbefart+2*i),dateinameschluessel)
+THEN meldeauffaellig(erfassungsmaske,meldungzumbestand);setzefehlerstatus(
+fnrlehrbefart+2*i);LEAVE pruefeplausibilitaetFI FI ;IF erfassungswert(
+fnrlehrbeffach+2*i)<>""THEN FOR jFROM i+1UPTO anzlehrbefprolehrer-1REP IF
+erfassungswert(fnrlehrbeffach+2*i)=erfassungswert(fnrlehrbeffach+2*j)THEN
+meldeauffaellig(erfassungsmaske,meldungzufachdoppelt);setzefehlerstatus(
+fnrlehrbeffach+2*i);LEAVE pruefeplausibilitaetFI PER ;IF NOT imbestand(
+erfassungswert(fnrlehrbeffach+2*i),dateinamefaecher)THEN meldeauffaellig(
+erfassungsmaske,meldungzumbestand);setzefehlerstatus(fnrlehrbeffach+2*i);
+LEAVE pruefeplausibilitaetFI FI PER ;IF erfassungswert(fnrpflichtstunden)<>""
+THEN pruefe(2,erfassungsmaske,PROC erfassungswert,fnrpflichtstunden,null,null
+,leer,fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);
+LEAVE pruefeplausibilitaetFI ;pruefe(3,erfassungsmaske,PROC erfassungswert,
+fnrpflichtstunden,untergrenze,obergrenze,leer,fehlerstatus);IF fehlerstatus<>
+0THEN setzefehlerstatus(fehlerstatus);LEAVE pruefeplausibilitaetFI ;FI ;
+sollstunden:=int(erfassungswert(fnrpflichtstunden));FOR iFROM 0UPTO
+anzermprolehrer-1REP IF erfassungswert(fnrermaessigung+2*i)<>""THEN pruefe(2,
+erfassungsmaske,PROC erfassungswert,fnrermaessigung+2*i,null,null,leer,
+fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);LEAVE
+pruefeplausibilitaetFI ;pruefe(3,erfassungsmaske,PROC erfassungswert,
+fnrermaessigung+2*i,untergrenze,obergrenze,leer,fehlerstatus);IF fehlerstatus
+<>0THEN setzefehlerstatus(fehlerstatus);LEAVE pruefeplausibilitaetFI ;FI ;
+sollstunden:=sollstunden-int(erfassungswert(fnrermaessigung+2*i));IF
+sollstunden<0THEN meldeauffaellig(erfassungsmaske,meldungzusollstunden);
+setzefehlerstatus(fnrermaessigung+2*i);LEAVE pruefeplausibilitaetFI ;IF
+erfassungswert(fnrermaessigungsgrund+2*i)<>""THEN IF NOT imbestand(
+bestandermgrund+trennerfuerimbestand+erfassungswert(fnrermaessigungsgrund+2*i
+),dateinameschluessel)THEN meldeauffaellig(erfassungsmaske,meldungzumbestand)
+;setzefehlerstatus(fnrermaessigungsgrund+2*i);LEAVE pruefeplausibilitaetFI
+FI PER END PROC pruefeplausibilitaet;PROC setzewertefuerdbspeicherung:INT
+VAR i;putwert(fnrlparaphe,erfassungswert(fnrparaphe));putwert(fnrlfamname,
+erfassungswert(fnrfamilienname));putwert(fnrlrufname,erfassungswert(
+fnrrufname));putwert(fnrlzusatz,erfassungswert(fnrnamenszusatz));putwert(
+fnrlamtsbeztitel,erfassungswert(fnramtsbezeichnung));putwert(fnrlgeschlecht,
+erfassungswert(fnrgeschlecht));putintwert(fnrlsollstd,sollstunden);putwert(
+fnrlpflichtstd,erfassungswert(fnrpflichtstunden));FOR iFROM 0UPTO
+anzermprolehrer-1REP putwert(fnrlerm1+2*i,erfassungswert(fnrermaessigung+2*i)
+);putwert(fnrlermgrund1+2*i,erfassungswert(fnrermaessigungsgrund+2*i))PER ;
+putwert(fnrlsprechzeit,erfassungswert(fnrsprechzeiten));putwert(fnrlstrnr,
+erfassungswert(fnrstrasseundnummer));putwert(fnrlplzort,erfassungswert(
+fnrplzundort));putwert(fnrltelnr,erfassungswert(fnrtelefon))END PROC
+setzewertefuerdbspeicherung;PROC setzeidentiobjektfuerobjektliste:LET
+trennsymbolfuerobli="$";TEXT VAR identizeile;identizeile:=wert(fnrlparaphe)+
+trenner+wert(fnrlfamname)+komma+wert(fnrlrufname);setzeidentiwert(
+identizeilemitschluesselanhang).identizeilemitschluesselanhang:identizeile+
+trennsymbolfuerobli+wert(fnrlparaphe).END PROC
+setzeidentiobjektfuerobjektliste;PROC lehrerlesen:INT VAR i,j;putwert(
+fnrlparaphe,schluessel);search(dnrlehrer,TRUE );IF dbstatus=okTHEN
+saveupdateposition(dnrlehrer);putwert(fnrlbparaphe,schluessel);putwert(
+fnrlbfach,leer);search(ixlbpar);i:=0;WHILE dbstatus=okCAND i<
+anzlehrbefprolehrerCAND wert(fnrlbparaphe)=schluesselREP i:=i+1;
+altelehrbefaehigungen(i).fach:=wert(fnrlbfach);altelehrbefaehigungen(i).art:=
+wert(fnrlbart);succ(ixlbpar);PER ;FOR jFROM i+1UPTO anzlehrbefprolehrerREP
+altelehrbefaehigungen(j).fach:="";altelehrbefaehigungen(j).art:=""PER ;
+dbstatus(ok)FI END PROC lehrerlesen;PROC lehreraendern:INT VAR i;
+restoreupdateposition(dnrlehrer);update(dnrlehrer);logbucheintrag("Änderung")
+;FOR iFROM 0UPTO anzlehrbefprolehrer-1REP IF alteparaphe<>schluesselCOR
+erfassungswert(fnrlehrbeffach+2*i)<>altelehrbefaehigungen(i+1).fachCOR
+erfassungswert(fnrlehrbefart+2*i)<>altelehrbefaehigungen(i+1).artTHEN IF
+altelehrbefaehigungen(i+1).fach=leerCAND erfassungswert(fnrlehrbeffach+2*i)<>
+leerTHEN putwert(fnrlbfach,erfassungswert(fnrlehrbeffach+2*i));putwert(
+fnrlbart,erfassungswert(fnrlehrbefart+2*i));putwert(fnrlbparaphe,schluessel);
+insert(dnrlehrbefaehigungen)ELSE putwert(fnrlbfach,altelehrbefaehigungen(i+1)
+.fach);putwert(fnrlbparaphe,alteparaphe);putwert(fnrlbart,
+altelehrbefaehigungen(i+1).art);IF erfassungswert(fnrlehrbeffach+2*i)=leer
+THEN delete(dnrlehrbefaehigungen)ELSE search(dnrlehrbefaehigungen,TRUE );IF
+dbstatus=okTHEN putwert(fnrlbfach,erfassungswert(fnrlehrbeffach+2*i));putwert
+(fnrlbart,erfassungswert(fnrlehrbefart+2*i));putwert(fnrlbparaphe,schluessel)
+;update(dnrlehrbefaehigungen)FI FI FI ;dbstatus(ok)FI PER END PROC
+lehreraendern;PROC lehrereinfuegen:INT VAR i;insert(dnrlehrer);logbucheintrag
+("Neueinfügen");FOR iFROM 0UPTO anzlehrbefprolehrer-1REP IF erfassungswert(
+fnrlehrbeffach+2*i)<>""THEN putwert(fnrlbfach,erfassungswert(fnrlehrbeffach+2
+*i));putwert(fnrlbart,erfassungswert(fnrlehrbefart+2*i));putwert(fnrlbparaphe
+,schluessel);insert(dnrlehrbefaehigungen)FI PER END PROC lehrereinfuegen;
+PROC lehrerloeschen:delete(dnrlehrer);logbucheintrag("Entfernen");putwert(
+fnrlbparaphe,schluessel);putwert(fnrlbfach,leer);search(ixlbpar);WHILE
+dbstatus=okCAND wert(fnrlbparaphe)=schluesselREP delete(dnrlehrbefaehigungen)
+;succ(ixlbpar);PER ;dbstatus(ok)END PROC lehrerloeschen;PROC logbucheintrag(
+TEXT CONST logergaenzung):TEXT VAR eintrag:="Anw. 3.1.1 ";eintragCAT
+logergaenzung;eintragCAT " """;eintragCAT schluessel;eintragCAT """ """;
+eintragCAT wert(fnrlfamname);eintragCAT """";logeintrag(eintrag)END PROC
+logbucheintrag;TEXT PROC schluessel:erfassungswert(fnrparaphe)END PROC
+schluessel;END PACKET erflehrer
+
diff --git a/app/schulis/2.2.1/src/3.listen.lehrbef faecherweise b/app/schulis/2.2.1/src/3.listen.lehrbef faecherweise
new file mode 100644
index 0000000..d9c03b3
--- /dev/null
+++ b/app/schulis/2.2.1/src/3.listen.lehrbef faecherweise
@@ -0,0 +1,104 @@
+PACKET lehrbefaehigungenfaecherweiselisteDEFINES
+faecherwlehrbeflispezielleteile:LET lehrbefaehigungeingangsmaske=
+"ms liste lehrbefaehigungen faecherweise eingang",
+anzahlderobjekteprobildschirm=17,ausgfeldlaenge=1,lehrbefaehigunganfpos=2,
+spaltenbreite1fach=12,spaltenbreite2art=6,spaltenbreite3paraphe=4,
+spaltentrenner=" ",wochenstdanfpos=2,ueberschriftenzeilen=2,ausgkopflaenge=2,
+strich="-",blank=" ",null=0,niltext="",mnrauswahlnichtsinnvoll=56,
+mnrbearbeitetwerden=352;TEXT CONST spaltentext:=("Fach"+9*blank+"Art"+3*blank
++"Lehrer"),spaltenstrich:=length(spaltentext)*strich;TEXT VAR
+lehrbefaehigungueberschriftbs:="Liste der Lehrbefähigungen",
+lehrbefaehigungueberschriftdr:="Liste der Lehrbefähigungen",alteparahpe:="",
+paraphe:="",alteart:="",art:="",altesfach:="",fach:="",teiltextmeldung:=
+"Fächer mit den Anfangsbuchstaben:",anfbuchstabe:="",neueranfbuchstabe:="";
+INT VAR eingabestatus,bildanfang,druckzeilenzahl;LET AUSGFELD =ROW
+ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW
+ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;
+AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC multistop:TRUE END PROC multistop;
+PROC faecherwlehrbeflispezielleteile(INT CONST nr):SELECT nrOF CASE 1:
+faecherwlehrbefaehigungdialogvorbereitenCASE 2:
+faecherwlehrbefaehigungeingabenrichtigCASE 3:
+faecherwlehrbefaehigunglistenvorbereitenCASE 4:
+faecherwlehrbefaehigungdruckvorbereitenCASE 5:
+faecherwlehrbefaehigungseitedruckenCASE 6:
+faecherwlehrbefaehigungbildschirmvorbereitenCASE 7:
+faecherwlehrbefaehigungseitezeigenENDSELECT .END PROC
+faecherwlehrbeflispezielleteile;PROC faecherwlehrbefaehigungdialogvorbereiten
+:lehrbefaehigungueberschriftbs:=text(vergleichsknoten);setzeanfangswerte(
+lehrbefaehigungeingangsmaske,lehrbefaehigunganfpos)END PROC
+faecherwlehrbefaehigungdialogvorbereiten;PROC
+faecherwlehrbefaehigungeingabenrichtig:LET fnrausgdrucker=2,fnrausgbild=3;
+standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF
+eingabestatus=0THEN setzeeingabetest(TRUE );setzeausgabedrucker(
+standardmaskenfeld(fnrausgbild)=niltext);ELSE meldefehler;setzeeingabetest(
+FALSE )FI ;.meldefehler:standardmeldung(mnrauswahlnichtsinnvoll,niltext).END
+PROC faecherwlehrbefaehigungeingabenrichtig;PROC
+faecherwlehrbefaehigunglistenvorbereiten:BOOL VAR b;initspalten;
+setzespaltentrenner(spaltentrenner);inittupel(dnrlehrbefaehigungen);
+setzeidentiwert("");initobli(anzahlderobjekteprobildschirm);
+objektlistestarten(ixlbart,"",0,TRUE ,b);setzebestandende(b);END PROC
+faecherwlehrbefaehigunglistenvorbereiten;PROC
+faecherwlehrbefaehigungbildschirmvorbereiten:LET fnrausganf=2;
+standardkopfmaskeaktualisieren(lehrbefaehigungueberschriftbs);bildanfang:=
+fnrausganf;setzebildanfangsposition(bildanfang);setzespaltenbreite(bildbreite
+);spaltenweise(spaltentext);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;
+erhoeheausgabeposumeins;spaltenweise(spaltenstrich);ausgfeld(1):=zeile;
+ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;setzebildanfangsposition(4);
+spaltenbreitensetzenEND PROC faecherwlehrbefaehigungbildschirmvorbereiten;
+PROC faecherwlehrbefaehigungseitezeigen:altesfach:=niltext;alteart:=niltext;
+blaettern(PROC (INT CONST )lehrbefdatenfachweisezeigen,aktion,TRUE ,FALSE ,
+BOOL PROC multistop)END PROC faecherwlehrbefaehigungseitezeigen;PROC
+lehrbefdatenfachweisezeigen(INT CONST x):
+datenausdateilehrbefaehigungenfachweiseholen;
+datenausdateilehrbefaehigungenfachweiseaufbereitenbild;
+datenfachweiseaufbildschirmausgebenEND PROC lehrbefdatenfachweisezeigen;PROC
+datenausdateilehrbefaehigungenfachweiseholen:fach:=wert(fnrlbfach);art:=wert(
+fnrlbart);paraphe:=wert(fnrlbparaphe)END PROC
+datenausdateilehrbefaehigungenfachweiseholen;PROC
+datenausdateilehrbefaehigungenfachweiseaufbereitenbild:IF fach<>altesfach
+THEN spaltenweise(fach);spaltenweise(art)ELSE spaltenweise(blank);IF art<>
+alteartTHEN spaltenweise(art)ELSE spaltenweise(blank)FI ;FI ;spaltenweise(
+paraphe);alteparahpe:=paraphe;altesfach:=fach;alteart:=art;END PROC
+datenausdateilehrbefaehigungenfachweiseaufbereitenbild;PROC
+datenfachweiseaufbildschirmausgeben:INT VAR i;FOR iFROM 1UPTO ausgfeldlaenge
+REP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;
+END PROC datenfachweiseaufbildschirmausgeben;PROC
+faecherwlehrbefaehigungdruckvorbereiten:setzebestandende(FALSE );anfbuchstabe
+:=" ";druckvorbereiten;variablenfuerdrucksetzen;lehrbefaehigungueberschriftdr
+CAT " fachweise";initdruckkopf(zentriert(lehrbefaehigungueberschriftdr,
+druckbreite),zentriert(length(lehrbefaehigungueberschriftdr)*"-",druckbreite)
+);spaltenbreitensetzen;initausgabekopfdruck;inittupel(dnrlehrbefaehigungen);
+lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL
+PROC multistop);.variablenfuerdrucksetzen:druckzeilenzahl:=drucklaenge(
+ueberschriftenzeilen)-ausgkopflaenge.END PROC
+faecherwlehrbefaehigungdruckvorbereiten;PROC initausgabekopfdruck:
+ausgkopfdruck(1):=spaltentext;ausgkopfdruck(2):=spaltenstrichEND PROC
+initausgabekopfdruck;PROC faecherwlehrbefaehigungseitedrucken:
+lehrbefaehigungueberschriftdrucken;altesfach:=niltext;alteart:=niltext;
+seitedrucken(PROC (INT VAR )lehrbefaehigungdrucken,druckzeilenzahl,
+ausgfeldlaenge,BOOL PROC multistop);seitenwechselEND PROC
+faecherwlehrbefaehigungseitedrucken;PROC lehrbefaehigungueberschriftdrucken:
+INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP
+druckzeileschreiben(ausgkopfdruck(i))PER END PROC
+lehrbefaehigungueberschriftdrucken;PROC lehrbefaehigungdrucken(INT VAR
+zeilenzaehler):LET markiert="#";datenausdateilehrbefaehigungenfachweiseholen;
+ggflmeldunganfbuchstabe;IF fach<>altesfachTHEN spaltenweise(blank);
+spaltenweise(blank);spaltenweise(blank);ausgfeld(1):=zeile;zeilenzaehlerINCR
+ausgfeldlaenge;lehrerstundendatenindruckdateiFI ;
+lehrerstundendatenaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge;
+lehrerstundendatenindruckdatei.ggflmeldunganfbuchstabe:IF
+anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:
+neueranfbuchstabe:=fachSUB 1;anfbuchstabe<>neueranfbuchstabe.
+meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,teiltextmeldung+
+neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC
+lehrbefaehigungdrucken;PROC lehrerstundendatenaufbereitendruck:
+setzespaltentrenner(spaltentrenner);
+datenausdateilehrbefaehigungenfachweiseaufbereitenbild;ausgfeld(1):=zeile;
+END PROC lehrerstundendatenaufbereitendruck;PROC
+lehrerstundendatenindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP
+druckzeileschreiben(ausgfeld(1))PER END PROC lehrerstundendatenindruckdatei;
+PROC spaltenbreitensetzen:initspalten;setzespaltenbreite(spaltenbreite1fach);
+setzespaltenbreite(spaltenbreite2art);setzespaltenbreite(
+spaltenbreite3paraphe);END PROC spaltenbreitensetzen;END PACKET
+lehrbefaehigungenfaecherweiseliste;
+
diff --git a/app/schulis/2.2.1/src/3.listen.lehrbef lehrerweise b/app/schulis/2.2.1/src/3.listen.lehrbef lehrerweise
new file mode 100644
index 0000000..1c3e172
--- /dev/null
+++ b/app/schulis/2.2.1/src/3.listen.lehrbef lehrerweise
@@ -0,0 +1,100 @@
+PACKET lehrbefaehigungenlehrerweiselisteDEFINES
+lehrerwlehrbeflidruckenoderzeigen:LET datenraum="datenraum",ausgkopflaenge=2,
+ueberschriftenzeilen=2,anzahlparapheninlehrbef=300,neunfelder=9,niltext="",
+blank=" ",null=0,strich="-",mnrbearbeitetwerden=352,mnrlistewirdgedruckt=58,
+mnrauswahlnichtsinnvoll=56,mnrlistewirdaufbereiet=190;INT VAR zeilenzaehler,
+druckzeilenzahl,anzahlparindateilehrbef,anzahlparindateilehrer,x,y,
+eingabestatus;BOUND ROW anzahlparapheninlehrbefROW neunfelderTEXT VAR
+datenauszweidateien;FILE VAR ausgabedatei;TEXT CONST ausgabedateiname:=
+"Liste der Lehrbefähigungen",teiltextmeldung:=
+"Lehrerparaphen mit den Anfangsbuchstaben:",spaltentext:=
+"Lehrer Soll. Pfl. Lehrbefähigung Fach/Art",tasten:="vr",spaltenstrich:=60*
+strich;TEXT VAR neueranfbuchstabe:="",anfbuchstabe:="",ueberschrift:=
+"Liste der Lehrbefähigungen aller Lehrer",paraphe:="",aufbereitetezeile:="";
+BOOL VAR ausgabedrucker:=FALSE ;LET AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;
+AUSGKOPFDRUCK VAR ausgkopfdruck;PROC lehrerwlehrbeflidruckenoderzeigen(INT
+CONST nr):anzahlparindateilehrer:=int(records(dnrlehrer));SELECT nrOF CASE 1:
+druckenoderbildschirmausgabeCASE 2:druckennachbildschirmausgabe;return(2);
+forget(ausgabedateiname,quiet)CASE 3:rowimdatenraumloeschen;enter(2);forget(
+ausgabedateiname,quiet)ENDSELECT .END PROC lehrerwlehrbeflidruckenoderzeigen;
+PROC rowimdatenraumloeschen:forget(datenraum,quiet)END PROC
+rowimdatenraumloeschen;PROC druckennachbildschirmausgabe:
+lehrerwlehrbefdruckenEND PROC druckennachbildschirmausgabe;PROC
+druckenoderbildschirmausgabe:LET fnrausgdrucker=2,fnrausgbild=3;IF
+eingabenrichtigTHEN standardmeldung(mnrlistewirdaufbereiet,niltext);
+datenauszweidateienholenundimrowablegen;ausgabedrucker:=(standardmaskenfeld(
+fnrausgbild)=niltext);IF ausgabedruckerTHEN lehrerwlehrbefdrucken;return(1);
+ELSE ausgabedatei:=sequentialfile(output,"Liste der Lehrbefähigungen");
+lehrerwlehrbefaufbildschirmzeigenFI ;ELSE meldefehler;return(1)FI ;.
+eingabenrichtig:standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
+eingabestatus);IF eingabestatus=0THEN TRUE ELSE FALSE FI .meldefehler:
+standardmeldung(mnrauswahlnichtsinnvoll,niltext)END PROC
+druckenoderbildschirmausgabe;PROC lehrerwlehrbefaufbildschirmzeigen:
+datenausrowinshowdateischreiben;dateiaufbildschirmausgeben;END PROC
+lehrerwlehrbefaufbildschirmzeigen;PROC lehrerwlehrbefdrucken:
+druckdateimitrowdatenfuellendruckenundloeschen;rowimdatenraumloeschenEND
+PROC lehrerwlehrbefdrucken;PROC
+druckdateimitrowdatenfuellendruckenundloeschen:TEXT VAR zeile;INT VAR
+zeilenanz:=1,x:=1;druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(
+ueberschrift);initausgabekopfdruck;druckkopfschreiben;
+spaltenueberschriftdrucken;setzemitseitennummern(TRUE );x:=1;zeilenzaehler:=1
+;WHILE zeilenanz<=anzahlparindateilehrbefREP zeileaufbereiten;
+ggfmeldunganfbuchstabe;neueranfbuchstabe:=anfbuchstabe;IF zeilenzaehler>
+druckzeilenzahlTHEN seitenwechsel;spaltenueberschriftdrucken;zeilenzaehler:=0
+;FI ;druckzeileschreiben(zeile);xINCR 1;zeilenanzINCR 1;zeilenzaehlerINCR 1;
+PER ;standardmeldung(mnrlistewirdgedruckt,niltext);drucknachbereiten;.
+ggfmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .
+anfbuchstabegeaendert:anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe:
+LET markiert="#";standardmeldung(mnrbearbeitetwerden,teiltextmeldung+
+neueranfbuchstabe+markiert);.variablenfuerdrucksetzen:druckzeilenzahl:=
+drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.zeileaufbereiten:y:=1;zeile
+:=text(datenauszweidateien(x)(y),8);FOR yFROM 8UPTO neunfelderREP zeileCAT
+text(datenauszweidateien(x)(y),6)PER ;FOR yFROM 2UPTO 7REP zeileCAT text(
+datenauszweidateien(x)(y),7)PER ;anfbuchstabe:=(datenauszweidateien(x)(1))
+SUB 1;END PROC druckdateimitrowdatenfuellendruckenundloeschen;PROC
+initausgabekopfdruck:ausgkopfdruck(1):=spaltentext;ausgkopfdruck(2):=
+spaltenstrichEND PROC initausgabekopfdruck;PROC spaltenueberschriftdrucken:
+INT VAR l;FOR lFROM 1UPTO ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck
+(l))PER END PROC spaltenueberschriftdrucken;PROC
+datenausrowinshowdateischreiben:putline(ausgabedatei,blank);putline(
+ausgabedatei,spaltentext);putline(ausgabedatei,spaltenstrich);putline(
+ausgabedatei,blank);FOR xFROM 1UPTO anzahlparindateilehrbefREP
+zeileaufbereiten;aufbereitetezeileindateischreibenPER .zeileaufbereiten:y:=1;
+aufbereitetezeile:=text(datenauszweidateien(x)(y),8);FOR yFROM 8UPTO
+neunfelderREP aufbereitetezeileCAT text(datenauszweidateien(x)(y),6)PER ;FOR
+yFROM 2UPTO 7REP aufbereitetezeileCAT text(datenauszweidateien(x)(y),7)PER ;.
+aufbereitetezeileindateischreiben:putline(ausgabedatei,aufbereitetezeile);
+aufbereitetezeile:=niltextEND PROC datenausrowinshowdateischreiben;PROC
+dateiaufbildschirmausgeben:zeigedatei(ausgabedateiname,tasten);END PROC
+dateiaufbildschirmausgeben;PROC datenauszweidateienholenundimrowablegen:
+datenauszweidateien:=new(datenraum);lehrerdatenrowinitialisieren;inittupel(
+ixlbpar);x:=0;y:=1;statleseschleife(ixlbpar,"","",fnrlbparaphe,fnrlbfach,
+PROC holedatenausdateilehrbefaehigungeninsrow);anzahlparindateilehrbef:=x;
+inittupel(dnrlehrer);x:=1;y:=1;statleseschleife(dnrlehrer,"","",fnrlparaphe,
+fnrlfamname,PROC holedatenausdateilehrerinsrow);.lehrerdatenrowinitialisieren
+:FOR xFROM 1UPTO anzahlparindateilehrerREP FOR yFROM 1UPTO neunfelderREP
+datenauszweidateien(x)(y):=niltext;PER ;PER END PROC
+datenauszweidateienholenundimrowablegen;PROC
+holedatenausdateilehrbefaehigungeninsrow(BOOL VAR b):IF dbstatus<>0THEN b:=
+TRUE ELSE IF paraphe<>wert(fnrlbparaphe)THEN xINCR 1;y:=1;paraphe:=wert(
+fnrlbparaphe);datenauszweidateien(x)(y):=paraphe;FI ;yINCR 1;
+datenauszweidateien(x)(y):=text(wert(fnrlbfach),2)+"/"+wert(fnrlbart);FI ;
+END PROC holedatenausdateilehrbefaehigungeninsrow;PROC
+holedatenausdateilehrerinsrow(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE IF
+wert(fnrlparaphe)=datenauszweidateien(x)(1)THEN datenauszweidateien(x)(8):=
+wert(fnrlsollstd);datenauszweidateien(x)(9):=wert(fnrlpflichtstd);xINCR 1;FI
+;FI ;END PROC holedatenausdateilehrerinsrow;PROC statleseschleife(INT CONST
+indexnummer,TEXT CONST startschluessel1,startschluessel2,INT CONST feldnr1,
+feldnr2,PROC (BOOL VAR )stataktion):vorbereitungen;leseschleife.
+vorbereitungen:LET maxleseanzahl=10;BOOL VAR vorzeitigesende:=FALSE ;#INT
+CONST maxblock:=maxfeldDIV zahlderfelder;#INT VAR anzahltupel;#INT CONST
+maxanzahl:=(maxintDIV maxblock)*maxblock#.leseschleife:putwert(feldnr1,
+startschluessel1);putwert(feldnr2,startschluessel2);search(indexnummer);IF
+dbstatus=0THEN einleseschleifeFI .einleseschleife:zaehlen;WHILE NOT schluss
+REP anzahltupel:=maxleseanzahl;multisucc(indexnummer,anzahltupel);
+stackdurchlaufPER ;.stackdurchlauf:IF anzahltupel=0THEN dbstatus(1)ELSE
+WHILE anzahltupel<>0REP lesen;zaehlen;IF vorzeitigesendeTHEN dbstatus(1);
+anzahltupel:=0FI ;PER FI .schluss:dbstatus<>0.zaehlen:stataktion(
+vorzeitigesende).lesen:multisucc;anzahltupelDECR 1;.END PROC statleseschleife
+;END PACKET lehrbefaehigungenlehrerweiseliste;
+
diff --git a/app/schulis/2.2.1/src/3.listen.paraphen b/app/schulis/2.2.1/src/3.listen.paraphen
new file mode 100644
index 0000000..d45d2c7
--- /dev/null
+++ b/app/schulis/2.2.1/src/3.listen.paraphen
@@ -0,0 +1,81 @@
+PACKET lehrerparaphenlistenDEFINES parlispezielleteile:LET parlieingangsmaske
+="ms liste lehrerparaphen eingang",spaltentrenner=" ",parlianfpos=2,
+spalte1breite=7,niltext="",blank=" ",komma=",",null=0,ueberschriftenzeilen=2,
+mnrauswahlnichtsinnvoll=56,mnrbearbeitetwerden=352,ausgkopflaenge=2,
+ausgfeldlaenge=1,anzahlderobjekteprobildschirm=19;TEXT VAR parliueberschrift
+:="Liste der Lehrerparaphen",lehrername,rufname,namenszusatz,amtsbez,anrede,
+geschlecht,paraphe,anfbuchstabe,neueranfbuchstabe:="",lehrernameaufbereitet,
+auswahlnichtsinnvoll,teiltextmeldung:=
+"die Paraphe mit dem Anfangsbuchstaben:";INT VAR aktuelleindexnr,
+eingabestatus,lesestart,bildanfang,spalte2druckbreite,druckzeilenzahl;INT
+CONST indexlehrername:=ixlfamruf,spalte2bildbreite:=bildbreite-spalte1breite-
+1;BOOL VAR sortierungnachparaphen;LET AUSGFELD =ROW ausgfeldlaengeTEXT ,
+AUSGKOPF =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf
+;BOOL PROC multistop:TRUE END PROC multistop;PROC parlispezielleteile(INT
+CONST nr):SELECT nrOF CASE 1:parlidialogvorbereitenCASE 2:
+parlieingabenrichtigCASE 3:parlilistenvorbereitenCASE 4:parlidruckvorbereiten
+CASE 5:parliseitedruckenCASE 6:parlibildschirmvorbereitenCASE 7:
+parliseitezeigenENDSELECT .END PROC parlispezielleteile;PROC
+parlidialogvorbereiten:parliueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(parlieingangsmaske,parlianfpos)END PROC
+parlidialogvorbereiten;PROC parlieingabenrichtig:LET fnrsortparaphen=2,
+fnrsortlehrernamen=3,fnrausgdrucker=4,fnrausgbild=5;standardpruefe(5,
+fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus=0
+THEN standardpruefe(5,fnrsortparaphen,fnrsortlehrernamen,null,niltext,
+eingabestatus);IF eingabestatus=0THEN sortierartmerken;setzeeingabetest(TRUE
+);setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);ELSE
+meldefehler;setzeeingabetest(FALSE )FI ;ELSE meldefehler;setzeeingabetest(
+FALSE )FI .sortierartmerken:sortierungnachparaphen:=standardmaskenfeld(
+fnrsortparaphen)<>niltext.meldefehler:meldungstext(mnrauswahlnichtsinnvoll,
+auswahlnichtsinnvoll);standardmeldung(auswahlnichtsinnvoll,niltext).END PROC
+parlieingabenrichtig;PROC parlilistenvorbereiten:BOOL VAR b;initspalten;
+setzespaltentrenner(spaltentrenner);IF sortierungnachparaphenTHEN
+aktuelleindexnr:=dnrlehrer;lesestart:=fnrlparapheELSE aktuelleindexnr:=
+indexlehrername;lesestart:=0;FI ;inittupel(dnrlehrer);setzeidentiwert("");
+initobli(anzahlderobjekteprobildschirm);parsenooffields(6);objektlistestarten
+(aktuelleindexnr,"",lesestart,TRUE ,b);setzebestandende(NOT multistopCOR b);
+END PROC parlilistenvorbereiten;PROC parlibildschirmvorbereiten:LET
+fnrausganf=2;standardkopfmaskeaktualisieren(parliueberschrift);bildanfang:=
+fnrausganf;setzebildanfangsposition(bildanfang);setzespaltenbreite(
+spalte1breite);setzespaltenbreite(spalte2bildbreite);END PROC
+parlibildschirmvorbereiten;PROC parliseitezeigen:blaettern(PROC (INT CONST )
+lehrerdatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END PROC
+parliseitezeigen;PROC lehrerdatenzeigen(INT CONST x):lehrerdatenholen;
+lehrerdatenaufbereitenbild;lehrerdatenaufbildschirm.END PROC
+lehrerdatenzeigen;PROC lehrerdatenholen:paraphe:=wert(fnrlparaphe);lehrername
+:=wert(fnrlfamname);rufname:=wert(fnrlrufname);namenszusatz:=wert(fnrlzusatz)
+;amtsbez:=wert(fnrlamtsbeztitel);geschlecht:=wert(fnrlgeschlecht);IF
+geschlecht="w"XOR geschlecht="W"THEN anrede:="Fr. "ELSE anrede:="Hr. "FI ;
+lehrernameaufbereitet:=(lehrername+komma+blank+anrede+amtsbezeichnung+rufname
++blank+namenszusatz);.amtsbezeichnung:IF amtsbez<>niltextTHEN amtsbez+blank
+ELSE ""FI .END PROC lehrerdatenholen;PROC lehrerdatenaufbereitenbild:
+spaltenweise(paraphe);spaltenweise(lehrernameaufbereitet);END PROC
+lehrerdatenaufbereitenbild;PROC lehrerdatenaufbildschirm:INT VAR i;FOR iFROM
+1UPTO ausgfeldlaengeREP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;
+erhoeheausgabeposumeins;PER ;END PROC lehrerdatenaufbildschirm;PROC
+parlidruckvorbereiten:setzebestandende(FALSE );anfbuchstabe:=" ";
+druckvorbereiten;variablenfuerdrucksetzen;spalte2druckbreite:=druckbreite-(
+spalte1breite+1);initdruckkopf(zentriert(parliueberschrift,druckbreite),
+zentriert(length(parliueberschrift)*"-",druckbreite));initspalten;
+setzespaltenbreite(spalte1breite);setzespaltenbreite(spalte2druckbreite);
+inittupel(dnrlehrer);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT
+VAR )scanforward,BOOL PROC multistop);.variablenfuerdrucksetzen:
+druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC
+parlidruckvorbereiten;PROC parliseitedrucken:parliueberschriftdrucken;
+seitedrucken(PROC (INT VAR )lehrerdrucken,druckzeilenzahl,ausgfeldlaenge,
+BOOL PROC multistop);seitenwechsel.END PROC parliseitedrucken;PROC
+parliueberschriftdrucken:druckkopfschreiben.END PROC parliueberschriftdrucken
+;PROC lehrerdrucken(INT VAR zeilenzaehler):LET markiert="#";lehrerdatenholen;
+ggflmeldunganfbuchstabe;lehreraufbereitendruck;zeilenzaehlerINCR
+ausgfeldlaenge;lehrerindruckdatei.ggflmeldunganfbuchstabe:IF
+anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:IF
+sortierungnachparaphenTHEN neueranfbuchstabe:=lehrernameSUB 1;ELSE
+neueranfbuchstabe:=parapheSUB 1;FI ;anfbuchstabe<>neueranfbuchstabe.
+meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,teiltextmeldung+
+neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC
+lehrerdrucken;PROC lehreraufbereitendruck:spaltenweise(paraphe);spaltenweise(
+lehrernameaufbereitet);ausgfeld(1):=zeile;END PROC lehreraufbereitendruck;
+PROC lehrerindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP
+druckzeileschreiben(ausgfeld(1))PER .END PROC lehrerindruckdatei;END PACKET
+lehrerparaphenlisten;
+
diff --git a/app/schulis/2.2.1/src/3.listen.sprechzeiten b/app/schulis/2.2.1/src/3.listen.sprechzeiten
new file mode 100644
index 0000000..7f33cb7
--- /dev/null
+++ b/app/schulis/2.2.1/src/3.listen.sprechzeiten
@@ -0,0 +1,99 @@
+PACKET lehrersprechzeitenlisteDEFINES sprechzeitlispezielleteile:LET
+sprechzeingangsmaske="ms liste lehrerparaphen eingang",
+anzahlderobjekteprobildschirm=17,ausgfeldlaenge=1,spalte1breite=46,
+spalte2breite=25,spaltentrenner=": ",sprechzanfpos=2,ueberschriftenzeilen=2,
+strich="-",niltext="",blank=" ",komma=",",null=0,ausgkopflaenge=2,
+mittelstrich="-",teilueb1="Lehrer",teilueb2="Sprechzeiten",
+mnrauswahlnichtsinnvoll=56,mnrbearbeitetwerden=352;TEXT VAR
+sprechzueberschrift:="Liste der Lehrersprechzeiten",paraphe,lehrername,
+lehrernameaufbereitet,lehrernameaufbereitetmitparaphe,rufname,namenszusatz,
+amtsbez,geschlecht,sprechzeit,druckstrich,textueberschrift,teiltextmeldung:=
+"die Lehrer mit den Anfangsbuchstaben:",anfbuchstabe,neueranfbuchstabe:="",
+auswahlnichtsinnvoll;INT VAR aktuelleindexnr,eingabestatus,lesestart,
+bildanfang,druckzeilenzahl;INT CONST indexlehrername:=ixlfamruf,
+maxspaltenlaengepara:=5;BOOL VAR sortierungnachparaphen;LET AUSGFELD =ROW
+ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW
+ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;
+AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC multistop:TRUE END PROC multistop;
+PROC sprechzeitlispezielleteile(INT CONST nr):SELECT nrOF CASE 1:
+sprechzdialogvorbereitenCASE 2:sprechzeingabenrichtigCASE 3:
+sprechzlistenvorbereitenCASE 4:sprechzdruckvorbereitenCASE 5:
+sprechzseitedruckenCASE 6:sprechzbildschirmvorbereitenCASE 7:
+sprechzseitezeigenENDSELECT .END PROC sprechzeitlispezielleteile;PROC
+sprechzdialogvorbereiten:sprechzueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(sprechzeingangsmaske,sprechzanfpos)END PROC
+sprechzdialogvorbereiten;PROC sprechzeingabenrichtig:LET fnrsortparaphen=2,
+fnrsortlehrernamen=3,fnrausgdrucker=4,fnrausgbild=5;standardpruefe(5,
+fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus=0
+THEN standardpruefe(5,fnrsortparaphen,fnrsortlehrernamen,null,niltext,
+eingabestatus);IF eingabestatus=0THEN sortierartmerken;setzeeingabetest(TRUE
+);setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);ELSE
+meldefehler;setzeeingabetest(FALSE )FI ;ELSE meldefehler;setzeeingabetest(
+FALSE )FI .sortierartmerken:sortierungnachparaphen:=standardmaskenfeld(
+fnrsortparaphen)<>niltext.meldefehler:meldungstext(mnrauswahlnichtsinnvoll,
+auswahlnichtsinnvoll);standardmeldung(auswahlnichtsinnvoll,niltext).END PROC
+sprechzeingabenrichtig;PROC sprechzlistenvorbereiten:BOOL VAR b;initspalten;
+setzespaltentrenner(spaltentrenner);IF sortierungnachparaphenTHEN
+aktuelleindexnr:=dnrlehrer;lesestart:=fnrlparapheELSE aktuelleindexnr:=
+indexlehrername;lesestart:=0;FI ;inittupel(dnrlehrer);setzeidentiwert("");
+initobli(anzahlderobjekteprobildschirm);parsenooffields(17);
+objektlistestarten(aktuelleindexnr,"",lesestart,TRUE ,b);setzebestandende(b);
+END PROC sprechzlistenvorbereiten;PROC sprechzbildschirmvorbereiten:LET
+fnrausganf=2;standardkopfmaskeaktualisieren(sprechzueberschrift);bildanfang:=
+fnrausganf;setzebildanfangsposition(bildanfang);INT VAR i;setzespaltenbreite(
+bildbreite);textueberschrift:=teilueb1+((spalte1breite+1)-(length(teilueb1)))
+*blank+teilueb2;spaltenweise(textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)
+IN ausgabepos;erhoeheausgabeposumeins;spaltenweise(bildbreite*strich);
+ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;
+setzebildanfangsposition(4);initspalten;setzespaltenbreite(spalte1breite);
+setzespaltenbreite(spalte2breite);END PROC sprechzbildschirmvorbereiten;PROC
+sprechzseitezeigen:blaettern(PROC (INT CONST )lehrerdatenzeigen,aktion,TRUE ,
+FALSE ,BOOL PROC multistop)END PROC sprechzseitezeigen;PROC lehrerdatenzeigen
+(INT CONST x):lehrerdatenholen;lehrerdatenaufbereitenbild;
+lehrerdatenaufbildschirm.END PROC lehrerdatenzeigen;PROC lehrerdatenholen:
+paraphe:=wert(fnrlparaphe);lehrername:=wert(fnrlfamname);rufname:=wert(
+fnrlrufname);namenszusatz:=wert(fnrlzusatz);amtsbez:=wert(fnrlamtsbeztitel);
+geschlecht:=wert(fnrlgeschlecht);sprechzeit:=wert(fnrlsprechzeit);IF
+geschlecht="w"XOR geschlecht="W"THEN geschlecht:="Fr. "ELSE geschlecht:=
+"Hr. "FI ;lehrernameaufbereitet:=(lehrername+komma+blank+geschlecht+
+amtsbezeichnung+rufname+blank+namenszusatz);IF sortierungnachparaphenTHEN
+lehrernameaufbereitetmitparaphe:=paraphe+(maxspaltenlaengepara-length(paraphe
+))*blank+lehrernameaufbereitetFI .amtsbezeichnung:IF amtsbez<>niltextTHEN
+amtsbez+blankELSE ""FI .END PROC lehrerdatenholen;PROC
+lehrerdatenaufbereitenbild:IF sortierungnachparaphenTHEN spaltenweise(
+lehrernameaufbereitetmitparaphe)ELSE spaltenweise(lehrernameaufbereitet)FI ;
+spaltenweise(sprechzeit);END PROC lehrerdatenaufbereitenbild;PROC
+lehrerdatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP ausgfeld
+(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;END PROC
+lehrerdatenaufbildschirm;PROC sprechzdruckvorbereiten:setzebestandende(FALSE
+);anfbuchstabe:=" ";druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(
+zentriert(sprechzueberschrift,druckbreite),zentriert(length(
+sprechzueberschrift)*"-",druckbreite));initspalten;setzespaltenbreite(
+spalte1breite);setzespaltenbreite(spalte2breite);inittupel(dnrlehrer);
+initausgabekopfdruck;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT
+VAR )scanforward,BOOL PROC multistop);.variablenfuerdrucksetzen:
+druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC
+sprechzdruckvorbereiten;PROC initausgabekopfdruck:druckstrich:=(spalte1breite
+*mittelstrich)+(spaltentrennerSUB 1)+(spalte2breite+1)*mittelstrich;
+textueberschrift:=teilueb1+(spalte1breite-(length(teilueb1)))*blank+
+spaltentrenner+teilueb2;ausgkopfdruck(1):=textueberschrift;ausgkopfdruck(2):=
+druckstrich;END PROC initausgabekopfdruck;PROC sprechzseitedrucken:
+sprechzueberschriftdrucken;seitedrucken(PROC (INT VAR )lehrerdrucken,
+druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistop);seitenwechsel.END PROC
+sprechzseitedrucken;PROC sprechzueberschriftdrucken:INT VAR i;
+druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP druckzeileschreiben(
+ausgkopfdruck(i))PER END PROC sprechzueberschriftdrucken;PROC lehrerdrucken(
+INT VAR zeilenzaehler):LET markiert="#";lehrerdatenholen;
+ggflmeldunganfbuchstabe;lehreraufbereitendruck;zeilenzaehlerINCR
+ausgfeldlaenge;lehrerindruckdatei.ggflmeldunganfbuchstabe:IF
+anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:IF
+sortierungnachparaphenTHEN neueranfbuchstabe:=lehrernameSUB 1;ELSE
+neueranfbuchstabe:=parapheSUB 1;FI ;anfbuchstabe<>neueranfbuchstabe.
+meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,teiltextmeldung+
+neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC
+lehrerdrucken;PROC lehreraufbereitendruck:setzespaltentrenner(spaltentrenner)
+;lehrerdatenaufbereitenbild;ausgfeld(1):=zeile;END PROC
+lehreraufbereitendruck;PROC lehrerindruckdatei:INT VAR i;FOR iFROM 1UPTO
+ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END PROC
+lehrerindruckdatei;END PACKET lehrersprechzeitenliste;
+
diff --git a/app/schulis/2.2.1/src/3.listen.wochenstunden b/app/schulis/2.2.1/src/3.listen.wochenstunden
new file mode 100644
index 0000000..a8cd29c
--- /dev/null
+++ b/app/schulis/2.2.1/src/3.listen.wochenstunden
@@ -0,0 +1,114 @@
+PACKET wochenstundenlisteDEFINES wochenstdlispezielleteile:LET
+wochenstdeingangsmaske="ms liste lehrerparaphen eingang",
+anzahlderobjekteprobildschirm=17,ausgfeldlaenge=1,spalte1breite=5,
+spalte2breite=30,spalte3breite=4,spalte4breite=31,spaltentrenner=" ",
+wochenstdanfpos=2,ueberschriftenzeilen=2,niltext="",blank=" ",komma=",",null=
+0,ausgkopflaenge=2,mittelstrich="-",mnrauswahlnichtsinnvoll=56,
+mnrbearbeitetwerden=352;TEXT CONST blanknull:=" 0/",unterstreichung:=
+bildbreite*mittelstrich,textueberschrift:=("Lehrer"+31*blank+
+"Soll Pfl. Ermäßigung/Grund");TEXT VAR wochenstdueberschrift:=
+"Liste der Wochenstunden und Ermäßigungen",schraegstrich:="/",paraphe,
+lehrername,rufname,namenszusatz,amtsbez,geschlecht,sollstdn,pflichtstdn,
+ermaessigung1,ermaessigung2,ermaessigung3,ermaessigung4,ermgrund1,ermgrund2,
+ermgrund3,ermgrund4,lehrernameaufbereitet,bearbeitetwerden,anfbuchstabe,
+neueranfbuchstabe:="",auswahlnichtsinnvoll,teiltextmeldung:=
+"die Paraphe mit dem Anfangsbuchstaben:";INT VAR aktuelleindexnr,
+eingabestatus,lesestart,bildanfang,druckzeilenzahl;INT CONST indexlehrername
+:=ixlfamruf;BOOL VAR sortierungnachparaphen;LET AUSGFELD =ROW ausgfeldlaenge
+TEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaenge
+TEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;AUSGKOPFDRUCK VAR
+ausgkopfdruck;BOOL PROC multistop:TRUE END PROC multistop;PROC
+wochenstdlispezielleteile(INT CONST nr):SELECT nrOF CASE 1:
+wochenstddialogvorbereitenCASE 2:wochenstdeingabenrichtigCASE 3:
+wochenstdlistenvorbereitenCASE 4:wochenstddruckvorbereitenCASE 5:
+wochenstdseitedruckenCASE 6:wochenstdbildschirmvorbereitenCASE 7:
+wochenstdseitezeigenENDSELECT .END PROC wochenstdlispezielleteile;PROC
+wochenstddialogvorbereiten:wochenstdueberschrift:=text(vergleichsknoten);
+setzeanfangswerte(wochenstdeingangsmaske,wochenstdanfpos)END PROC
+wochenstddialogvorbereiten;PROC wochenstdeingabenrichtig:LET fnrsortparaphen=
+2,fnrsortlehrernamen=3,fnrausgdrucker=4,fnrausgbild=5;standardpruefe(5,
+fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus=0
+THEN standardpruefe(5,fnrsortparaphen,fnrsortlehrernamen,null,niltext,
+eingabestatus);IF eingabestatus=0THEN sortierartmerken;setzeeingabetest(TRUE
+);setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);ELSE
+meldefehler;setzeeingabetest(FALSE )FI ;ELSE meldefehler;setzeeingabetest(
+FALSE )FI .sortierartmerken:sortierungnachparaphen:=standardmaskenfeld(
+fnrsortparaphen)<>niltext;.meldefehler:standardmeldung(
+mnrauswahlnichtsinnvoll,niltext).END PROC wochenstdeingabenrichtig;PROC
+wochenstdlistenvorbereiten:BOOL VAR b;initspalten;setzespaltentrenner(
+spaltentrenner);IF sortierungnachparaphenTHEN aktuelleindexnr:=dnrlehrer;
+lesestart:=fnrlparapheELSE aktuelleindexnr:=indexlehrername;lesestart:=0;FI ;
+inittupel(dnrlehrer);setzeidentiwert("");initobli(
+anzahlderobjekteprobildschirm);parsenooffields(16);objektlistestarten(
+aktuelleindexnr,"",lesestart,TRUE ,b);setzebestandende(b);END PROC
+wochenstdlistenvorbereiten;PROC wochenstdbildschirmvorbereiten:LET fnrausganf
+=2;standardkopfmaskeaktualisieren(wochenstdueberschrift);bildanfang:=
+fnrausganf;setzebildanfangsposition(bildanfang);INT VAR i;setzespaltenbreite(
+bildbreite);spaltenweise(textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)IN
+ausgabepos;erhoeheausgabeposumeins;spaltenweise(unterstreichung);ausgfeld(1)
+:=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;
+setzebildanfangsposition(4);initspalten;setzespaltenbreite(spalte1breite);
+setzespaltenbreite(spalte2breite);setzespaltenbreite(spalte3breite);
+setzespaltenbreite(spalte3breite);setzespaltenbreite(spalte4breite);END PROC
+wochenstdbildschirmvorbereiten;PROC wochenstdseitezeigen:blaettern(PROC (INT
+CONST )stundendatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END PROC
+wochenstdseitezeigen;PROC stundendatenzeigen(INT CONST x):stundendatenholen;
+stundendatenaufbereitenbild;stundendatenaufbildschirm.END PROC
+stundendatenzeigen;PROC stundendatenaufbereitenbild:TEXT VAR ermaessigungen:=
+niltext;spaltenweise(paraphe);spaltenweise(lehrernameaufbereitet);
+spaltenweise(2*blank+sollstdn);spaltenweise(2*blank+pflichtstdn);IF
+ermaessigung1=blanknullTHEN ermaessigung1:=3*blankELSE ermaessigungen:=2*
+blank+ermaessigung1+ermgrund1FI ;IF ermaessigung2=blanknullTHEN ermaessigung2
+:=3*blankELSE ermaessigungenCAT 3*blank+ermaessigung2+ermgrund2FI ;IF
+ermaessigung3=blanknullTHEN ermaessigung3:=3*blankELSE ermaessigungenCAT 3*
+blank+ermaessigung3+ermgrund3FI ;IF ermaessigung4=blanknullTHEN ermaessigung4
+:=blankELSE ermaessigungenCAT 3*blank+ermaessigung4+ermgrund4FI ;spaltenweise
+(ermaessigungen);END PROC stundendatenaufbereitenbild;PROC
+stundendatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP
+ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;END
+PROC stundendatenaufbildschirm;PROC wochenstddruckvorbereiten:
+setzebestandende(FALSE );anfbuchstabe:=" ";druckvorbereiten;
+variablenfuerdrucksetzen;initdruckkopf(zentriert(wochenstdueberschrift,
+druckbreite),zentriert(length(wochenstdueberschrift)*"-",druckbreite));
+initspalten;setzespaltenbreite(spalte1breite);setzespaltenbreite(
+spalte2breite);setzespaltenbreite(spalte3breite);setzespaltenbreite(
+spalte3breite);setzespaltenbreite(spalte4breite);holemeldung;inittupel(
+dnrlehrer);initausgabekopfdruck;lesenvorbereitendruck(PROC (INT CONST ,BOOL
+PROC ,INT VAR )scanforward,BOOL PROC multistop);.holemeldung:meldungstext(
+mnrbearbeitetwerden,bearbeitetwerden).variablenfuerdrucksetzen:
+druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC
+wochenstddruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck(1):=
+textueberschrift;ausgkopfdruck(2):=unterstreichungEND PROC
+initausgabekopfdruck;PROC wochenstdseitedrucken:wochenstdueberschriftdrucken;
+seitedrucken(PROC (INT VAR )wochenstdndrucken,druckzeilenzahl,ausgfeldlaenge,
+BOOL PROC multistop);seitenwechsel.END PROC wochenstdseitedrucken;PROC
+wochenstdueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO
+ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck(i))PER END PROC
+wochenstdueberschriftdrucken;PROC wochenstdndrucken(INT VAR zeilenzaehler):
+LET markiert="#";stundendatenholen;ggflmeldunganfbuchstabe;
+lehrerstundendatenaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge;
+lehrerstundendatenindruckdatei.ggflmeldunganfbuchstabe:IF
+anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:IF
+sortierungnachparaphenTHEN neueranfbuchstabe:=lehrernameSUB 1;ELSE
+neueranfbuchstabe:=parapheSUB 1;FI ;anfbuchstabe<>neueranfbuchstabe.
+meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,teiltextmeldung+
+neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC
+wochenstdndrucken;PROC lehrerstundendatenaufbereitendruck:setzespaltentrenner
+(spaltentrenner);stundendatenaufbereitenbild;ausgfeld(1):=zeile;END PROC
+lehrerstundendatenaufbereitendruck;PROC lehrerstundendatenindruckdatei:INT
+VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER
+END PROC lehrerstundendatenindruckdatei;PROC stundendatenholen:paraphe:=wert(
+fnrlparaphe);lehrername:=wert(fnrlfamname);rufname:=wert(fnrlrufname);
+namenszusatz:=wert(fnrlzusatz);amtsbez:=wert(fnrlamtsbeztitel);geschlecht:=
+wert(fnrlgeschlecht);sollstdn:=text(intwert(fnrlsollstd),2);pflichtstdn:=text
+(intwert(fnrlpflichtstd),2);ermaessigung1:=text(intwert(fnrlerm1),2)+
+schraegstrich;ermgrund1:=text(wert(fnrlermgrund1),2);ermaessigung2:=text(
+intwert(fnrlerm2),2)+schraegstrich;ermgrund2:=text(wert(fnrlermgrund2),2);
+ermaessigung3:=text(intwert(fnrlerm3),2)+schraegstrich;ermgrund3:=text(wert(
+fnrlermgrund3),2);ermaessigung4:=text(intwert(fnrlerm4),2)+schraegstrich;
+ermgrund4:=text(wert(fnrlermgrund4),2);IF geschlecht="w"XOR geschlecht="W"
+THEN geschlecht:="Fr. "ELSE geschlecht:="Hr. "FI ;lehrernameaufbereitet:=(
+lehrername+komma+blank+geschlecht+amtsbezeichnung+rufname+blank+namenszusatz)
+;.amtsbezeichnung:IF amtsbez<>niltextTHEN amtsbez+blankELSE ""FI .END PROC
+stundendatenholen;END PACKET wochenstundenliste;
+
diff --git a/app/schulis/2.2.1/src/3.listenweise lehrer erf b/app/schulis/2.2.1/src/3.listenweise lehrer erf
new file mode 100644
index 0000000..9715e4d
--- /dev/null
+++ b/app/schulis/2.2.1/src/3.listenweise lehrer erf
@@ -0,0 +1,95 @@
+PACKET listenweiselehrererfDEFINES bearbeitunglehrer,lehrerspeichern:LET
+tofather=1,tograndfather=2,niltext="",blank=" ",trennerfuerimbestand="�",
+dateinameschluessel="Schlüssel",null=0;LET maskeerm="ms lehrer erm bearb",
+maskespr="ms lehrer spr bearb",lehrerproseite=18,felderprozeileerm=11,
+felderprozeilespr=3,fnrparapheeingangsmaske=2,fnrersteparaphe=2,fnrersteerm=5
+,fnrersterermgrund=6,fnrerstespr=4,anzermprolehrer=4;LET untergrenze=0,
+obergrenze=99,bestandermgrund="c02 persoenl ermaess",meldungbestleer=59,
+meldungnichtspeichern=63,meldungplausi=57,meldungwarten=69,meldungspeicherung
+=132,meldungspeicherfehler=179,meldungzumbestand=55,meldungzusollstunden=175,
+hell="#";ROW lehrerproseiteSTRUCT (TEXT paraphe,sprechzeiten,pflichtstunden,
+sollstunden,ROW anzermprolehrerTEXT erm,grund)VAR altelehrer;BOOL VAR
+bearbeitungdererm,nochwelcheda;INT VAR lehrerzahl,felderprozeile,
+fnrerstesbearbeitungsfeld;TEXT VAR paraphe,bearbeitungsmaske;LET
+logbucheintragerm="Anw. 3.1.2 Änderungen der Stundenermäßigung",
+logbucheintragspr="Anw. 3.1.3 Änderungen der Sprechzeiten";PROC neuerblock:
+IF lehrerzahl=lehrerproseiteTHEN succ(dnrlehrer);nochwelcheda:=dbstatus=null;
+putwert(fnrlparaphe,paraphe);changeindex;FI ;blocklesenundausgeben;IF
+nochwelchedaTHEN return(tofather)ELSE enter(tograndfather)FI END PROC
+neuerblock;PROC blocklesenundausgeben:IF nochwelchedaTHEN standardmeldung(
+meldungwarten,niltext);lehrerzahl:=null;bildschirmblock(PROC zeilezeigen,
+BOOL PROC (INT CONST )leerepruefung,null);nochwelcheda:=(lehrerzahl>null);IF
+nochwelchedaTHEN paraphe:=wert(fnrlparaphe);restlichefelderloeschen;infeld(1)
+;standardfelderausgeben;infeld(fnrerstesbearbeitungsfeld);FI FI .
+restlichefelderloeschen:INT VAR zeilenfeld;FOR zeilenfeldFROM fnrersteparaphe
++lehrerzahl*felderprozeileUPTO lehrerproseite*felderprozeile+1REP
+standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank,zeilenfeld);
+feldschutz(zeilenfeld)PER .END PROC blocklesenundausgeben;PROC zeilezeigen:
+INT VAR i,aktuellesfeld;aktuellesfeld:=fnrersteparaphe+felderprozeile*
+lehrerzahl;lehrerzahlINCR 1;altelehrer(lehrerzahl).paraphe:=wert(fnrlparaphe)
+;standardmaskenfeld(wert(fnrlparaphe),aktuellesfeld);aktuellesfeldINCR 1;
+standardmaskenfeld(wert(fnrlfamname),aktuellesfeld);aktuellesfeldINCR 1;IF
+bearbeitungderermTHEN altelehrer(lehrerzahl).pflichtstunden:=wert(
+fnrlpflichtstd);standardmaskenfeld(wert(fnrlpflichtstd),aktuellesfeld);
+aktuellesfeldINCR 1;FOR iFROM 1UPTO anzermprolehrerREP altelehrer(lehrerzahl)
+.erm(i):=wert(fnrlerm1+2*(i-1));standardmaskenfeld(wert(fnrlerm1+2*(i-1)),
+aktuellesfeld);aktuellesfeldINCR 1;altelehrer(lehrerzahl).grund(i):=wert(
+fnrlermgrund1+2*(i-1));standardmaskenfeld(wert(fnrlermgrund1+2*(i-1)),
+aktuellesfeld);aktuellesfeldINCR 1;PER ELSE altelehrer(lehrerzahl).
+sprechzeiten:=wert(fnrlsprechzeit);standardmaskenfeld(wert(fnrlsprechzeit),
+aktuellesfeld);aktuellesfeldINCR 1;FI END PROC zeilezeigen;BOOL PROC
+leerepruefung(INT CONST dummy):TRUE END PROC leerepruefung;PROC
+bearbeitunglehrer(INT CONST programm):reinitparsing;
+initialisierungenvornehmen;pruefeobimbestand;IF dbstatus<>nullTHEN
+standardmeldung(meldungbestleer,niltext);return(tofather);LEAVE
+bearbeitunglehrerFI ;nochwelcheda:=TRUE ;standardstartproc(bearbeitungsmaske)
+;startebildschirmblock(dnrlehrer,lehrerproseite-1);blocklesenundausgeben;
+standardnproc.initialisierungenvornehmen:bearbeitungdererm:=programm=1;IF
+bearbeitungderermTHEN bearbeitungsmaske:=maskeerm;felderprozeile:=
+felderprozeileerm;fnrerstesbearbeitungsfeld:=fnrersteerm;ELSE
+bearbeitungsmaske:=maskespr;felderprozeile:=felderprozeilespr;
+fnrerstesbearbeitungsfeld:=fnrerstespr;FI ;standardmeldung(meldungwarten,
+niltext).pruefeobimbestand:inittupel(dnrlehrer);putwert(fnrlparaphe,
+standardmaskenfeld(fnrparapheeingangsmaske));search(dnrlehrer,FALSE ).END
+PROC bearbeitunglehrer;PROC lehrerspeichern(BOOL CONST speichern):INT VAR
+fehlerstatus:=0,i,j,sollstunden;BOOL VAR lehrerdatengeaendert;INT VAR aktfnr;
+IF speichernTHEN pruefeplausibilitaet;IF fehlerstatus<>0THEN infeld(
+fehlerstatus);return(tofather);LEAVE lehrerspeichernELSE
+speicherungdurchführenFI ELSE standardmeldung(meldungnichtspeichern,niltext)
+FI ;putwert(fnrlparaphe,paraphe);changeindex;neuerblock;.pruefeplausibilitaet
+:IF bearbeitungderermTHEN standardmeldung(meldungplausi,niltext);FOR jFROM 1
+UPTO lehrerzahlREP pruefeeinezeilePER FI .pruefeeinezeile:sollstunden:=int(
+altelehrer(j).pflichtstunden);FOR iFROM 0UPTO anzermprolehrer-1REP aktfnr:=
+fnrersteerm+(j-1)*felderprozeile+2*i;IF standardmaskenfeld(aktfnr)<>""THEN
+standardpruefe(2,aktfnr,null,null,niltext,fehlerstatus);IF fehlerstatus<>0
+THEN LEAVE pruefeplausibilitaetFI ;standardpruefe(3,aktfnr,untergrenze,
+obergrenze,niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE
+pruefeplausibilitaetFI ;FI ;sollstunden:=sollstunden-int(standardmaskenfeld(
+aktfnr));IF sollstunden<0THEN standardmeldung(meldungzusollstunden,niltext);
+fehlerstatus:=aktfnr;LEAVE pruefeplausibilitaetELSE altelehrer(j).sollstunden
+:=text(sollstunden)FI ;aktfnr:=fnrersterermgrund+(j-1)*felderprozeile+2*i;IF
+standardmaskenfeld(aktfnr)<>""THEN IF NOT imbestand(bestandermgrund+
+trennerfuerimbestand+standardmaskenfeld(aktfnr),dateinameschluessel)THEN
+standardmeldung(meldungzumbestand,niltext);fehlerstatus:=aktfnr;LEAVE
+pruefeplausibilitaetFI FI PER .speicherungdurchführen:IF bearbeitungdererm
+THEN logeintrag(logbucheintragerm)ELSE logeintrag(logbucheintragspr)FI ;FOR j
+FROM 0UPTO lehrerzahl-1REP IF lehrerdatenwurdengeaendertTHEN putwert(
+fnrlparaphe,altelehrer(j+1).paraphe);search(dnrlehrer,true);
+speicherfehlerabfangen;IF bearbeitungderermTHEN FOR iFROM 0UPTO
+anzermprolehrer-1REP putwert(fnrlerm1+2*i,standardmaskenfeld(fnrersteerm+j*
+felderprozeile+2*i));putwert(fnrlermgrund1+2*i,standardmaskenfeld(
+fnrersterermgrund+j*felderprozeile+2*i));PER ;putwert(fnrlsollstd,altelehrer(
+j+1).sollstunden)ELSE putwert(fnrlsprechzeit,standardmaskenfeld(fnrerstespr+j
+*felderprozeile));FI ;update(dnrlehrer);speicherfehlerabfangen;
+standardmeldung(meldungspeicherung,altelehrer(j+1).paraphe+hell)FI PER .
+lehrerdatenwurdengeaendert:lehrerdatengeaendert:=FALSE ;IF bearbeitungdererm
+THEN i:=0;WHILE NOT lehrerdatengeaendertCAND i<anzermprolehrerREP
+lehrerdatengeaendert:=standardmaskenfeld(fnrersteerm+j*felderprozeile+2*i)<>
+altelehrer(j+1).erm(i+1)COR standardmaskenfeld(fnrersterermgrund+j*
+felderprozeile+2*i)<>altelehrer(j+1).grund(i+1);iINCR 1PER ELSE
+lehrerdatengeaendert:=standardmaskenfeld(fnrerstespr+j*felderprozeile)<>
+altelehrer(j+1).sprechzeitenFI ;lehrerdatengeaendert.speicherfehlerabfangen:
+IF dbstatus<>nullTHEN standardmeldung(meldungspeicherfehler,altelehrer(j+1).
+paraphe+hell);return(tofather);LEAVE lehrerspeichernFI .END PROC
+lehrerspeichern;END PACKET listenweiselehrererf
+
diff --git a/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 2.files b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 2.files
new file mode 100644
index 0000000..f1e4883
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 2.files
@@ -0,0 +1,5 @@
+4.stundenplan schnittstelle
+4.einhaltung zeitwuensche pruefen
+4.daten für intega aufbereiten
+
+
diff --git a/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 3.files b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 3.files
new file mode 100644
index 0000000..34b3d36
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 3.files
@@ -0,0 +1,6 @@
+4.stundenplan schnittstelle
+4.aufsichten erstellen
+4.vertretungen organisieren
+4.stdpluebersichten
+4.einzelstdpl.sek2
+
diff --git a/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN.files b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN.files
new file mode 100644
index 0000000..fe85e58
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN.files
@@ -0,0 +1,11 @@
+4.stundenplan schnittstelle
+4.einzelstdpl.raeume
+4.einzelstdpl.lehrer
+4.einzelstdpl.sek1
+4.stand der stundenplanung analysieren
+4.springstunden lehrer analysieren
+4.springstunden schueler analysieren
+4.raumwuensche pruefen
+4.teilstdpl fach lehrer
+
+
diff --git a/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 2.files b/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 2.files
new file mode 100644
index 0000000..afefca2
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 2.files
@@ -0,0 +1,6 @@
+0.listenweise grundfunktionen
+0.kurswahlbasis bereinigen
+4.faecherangebot planen
+4.lehrveranstaltungen benennen
+4.uv und kopplungen bearbeiten
+
diff --git a/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 3.files b/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 3.files
new file mode 100644
index 0000000..230eb9a
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 3.files
@@ -0,0 +1,7 @@
+0.listenweise grundfunktionen
+4.zeitwuensche bearbeiten
+4.vertretungsdaten bearbeiten
+
+
+
+
diff --git a/app/schulis/2.2.1/src/4.ERFASSUNGEN STUNDENPLAN.files b/app/schulis/2.2.1/src/4.ERFASSUNGEN STUNDENPLAN.files
new file mode 100644
index 0000000..7ca8dae
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.ERFASSUNGEN STUNDENPLAN.files
@@ -0,0 +1,11 @@
+4.stundenplan schnittstelle
+4.stundenplan raumweise erfassen
+4.stundenplan im dialog erstellen
+4.daten für schulis aufbereiten
+4.halbjahreswechsel zum stundenplan
+4.konsistenzpruefung
+4.stundenplan nach zeiten erfassen
+4.stundenplan nach lv erfassen
+4.stundenplan akt halbj uebernehmen
+
+
diff --git a/app/schulis/2.2.1/src/4.anschr.unterrichtsvertlg fuer lehrer b/app/schulis/2.2.1/src/4.anschr.unterrichtsvertlg fuer lehrer
new file mode 100644
index 0000000..9c695d8
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.anschr.unterrichtsvertlg fuer lehrer
@@ -0,0 +1,137 @@
+PACKET anschrunterrichtsvertlgfuerlehrerDEFINES
+unterrichtsvertlgfuerlehrereingang,unterrichtsvertlgfuerlehrerstarten,
+unterrichtsvertlgfuerlehrersonderwerte,unterrichtsvertlgfuerlehrermultistop,
+unterrichtsvertlgfuerlehrerdruckdateibauen:LET maske=
+"ms unterrichtsverteilung fuer lehrer drucken",fnrparaphe=2,fnrzeitwuensche=3
+,fnraktsj=4,fnrbsausgabe=5,fnrdrausgabe=6,mnrbittewarten=69,
+mnrkeinegueltigeparaphe=344,mnrlistewirdaufbereitet=190,trenner="/",blank=" "
+,niltext="";TEXT CONST v1datlehrer:="vordruck1 unterrichtsvertlg fuer lehrer"
+,v2datlehrveranstgn:="vordruck2 unterrichtsvertlg fuer lehrer",
+v3dataktschuelergr:="vordruck4 auskunft lehrer",v4datzeitwuensche:=
+"vordruck5 auskunft lehrer",bestandnamepersoenlermaessigung:=
+"c02 persoenl ermaess";LET swsj=520,swhj=521,swanrede=522,
+swermaessgrund1langtext=530,swermaessgrund2langtext=531,
+swermaessgrund3langtext=532,swermaessgrund4langtext=533,swfach=534,swkennung=
+535,swwstd=536,swdummy=526,ganztage=520,ganzgew=521,vormtage=522,vormgew=523,
+nachtage=524,nachgew=525;BOOL VAR bildschirmausgabe,mitzeitwuenschen,
+einzelbearbeitung,aktsj;TEXT VAR angegebeneparaphe:="",aktparaphe,halbjahr,
+schuljahr,wochstdn,fachkennung;INT VAR gemerkterdbstatus,status,sollstdn,
+differenz,summewochstdn:=0,zeilenhilfszahl,zeilenzahl,zusatzzeilen,
+swaktklassenleiter,swaktstellvertreter;BOOL PROC paraphevorhanden:putwert(
+fnrlparaphe,angegebeneparaphe);search(dnrlehrer,TRUE );IF dbstatus=0THEN
+TRUE ELSE FALSE FI END PROC paraphevorhanden;PROC
+unterrichtsvertlgfuerlehrereingang:standardvproc(maske)END PROC
+unterrichtsvertlgfuerlehrereingang;PROC unterrichtsvertlgfuerlehrerstarten:
+standardpruefe(5,fnrbsausgabe,fnrdrausgabe,0,"",status);IF status<>0THEN
+infeld(status);return(1);ELSE angegebeneparaphe:=standardmaskenfeld(
+fnrparaphe);IF angegebeneparaphe=niltextCOR paraphevorhandenTHEN
+bildschirmausgabe:=standardmaskenfeld(fnrbsausgabe)<>niltext;
+einzelbearbeitung:=standardmaskenfeld(fnrparaphe)<>niltext;mitzeitwuenschen:=
+standardmaskenfeld(fnrzeitwuensche)<>niltext;aktsj:=standardmaskenfeld(
+fnraktsj)<>niltext;aktparaphe:=angegebeneparaphe;startenausfuehrenELSE
+standardmeldung(mnrkeinegueltigeparaphe,niltext);return(1)FI ;FI .
+startenausfuehren:halbjahr:=schulkenndatum("Schulhalbjahr");schuljahr:=
+schulkenndatum("Schuljahr");IF NOT (aktsj)THEN geplanteshjundsjberechnen(
+halbjahr,schuljahr);FI ;setzesonderwerteschulkenndaten;setzewerte;
+standardmeldung(mnrbittewarten,niltext);zusammengesetztesanschreiben(
+dnrlehrer,bildschirmausgabe,einzelbearbeitung,BOOL PROC
+unterrichtsvertlgfuerlehrersonderwerte,BOOL PROC
+unterrichtsvertlgfuerlehrermultistop,TEXT PROC
+unterrichtsvertlgfuerlehrerdruckdateibauen).setzewerte:putwert(fnrlparaphe,
+aktparaphe)END PROC unterrichtsvertlgfuerlehrerstarten;BOOL PROC
+unterrichtsvertlgfuerlehrermultistop:BOOL VAR ok;IF einzelbearbeitungTHEN ok
+:=angegebeneparaphe=wert(fnrlparaphe)AND dbstatus=0ELSE ok:=dbstatus=0FI ;ok
+END PROC unterrichtsvertlgfuerlehrermultistop;BOOL PROC
+unterrichtsvertlgfuerlehrersonderwerte:TEXT VAR grund1,grund2,grund3,grund4;
+initialisieresonderwerte;aktparaphe:=wert(fnrlparaphe);adressat(aktparaphe);
+gemerkterdbstatus:=dbstatus;setzesonderwert(swsj,subtext(schuljahr,1,2)+
+trenner+subtext(schuljahr,3,4));setzesonderwert(swhj,halbjahr);TEXT VAR
+anredetext;IF wert(fnrlgeschlecht)="m"THEN anredetext:="Herrn"ELSE anredetext
+:="Frau";FI ;setzesonderwert(swanrede,anredetext);grund1:=wert(fnrlermgrund1)
+;grund2:=wert(fnrlermgrund2);grund3:=wert(fnrlermgrund3);grund4:=wert(
+fnrlermgrund4);sollstdn:=intwert(fnrlsollstd);inittupel(dnrschluessel);
+putwert(fnrschlsachgebiet,bestandnamepersoenlermaessigung);putwert(
+fnrschlschluessel,grund1);search(dnrschluessel,TRUE );IF dbstatus=0THEN
+setzesonderwert(swermaessgrund1langtext,wert(fnrschllangtext))ELSE
+setzesonderwert(swermaessgrund1langtext,blank)FI ;putwert(fnrschlschluessel,
+grund2);search(dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert(
+swermaessgrund2langtext,wert(fnrschllangtext));ELSE setzesonderwert(
+swermaessgrund2langtext,blank);FI ;putwert(fnrschlschluessel,grund3);search(
+dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert(
+swermaessgrund3langtext,wert(fnrschllangtext))ELSE setzesonderwert(
+swermaessgrund3langtext,blank)FI ;putwert(fnrschlschluessel,grund4);search(
+dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert(
+swermaessgrund4langtext,wert(fnrschllangtext))ELSE setzesonderwert(
+swermaessgrund4langtext,blank)FI ;inittupel(dnrlehrveranstaltungen);putwert(
+fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);putwert(fnrlvparaphe,aktparaphe)
+;search(ixlvsjhjpar,TRUE );IF dbstatus=0THEN fachkennung:=wert(
+fnrlvfachkennung);wochstdn:=wert(fnrlvwochenstd);setzesonderwert(swfach,
+subtext(fachkennung,1,2));setzesonderwert(swkennung,subtext(fachkennung,3,6))
+;setzesonderwert(swwstd,wochstdn);summewochstdn:=int(wochstdn);ELSE
+setzesonderwert(swfach,blank);setzesonderwert(swkennung,blank);
+setzesonderwert(swwstd,blank);summewochstdn:=0;FI ;dbstatus(gemerkterdbstatus
+);TRUE END PROC unterrichtsvertlgfuerlehrersonderwerte;TEXT PROC
+unterrichtsvertlgfuerlehrerdruckdateibauen:LET druckdatei="liste.1",
+hilfsdatei="hilfsdatei";TEXT VAR zeile;zeilenzahl:=0;zusatzzeilen:=0;
+vordruckeholen;setzemitseitennummern(TRUE );druckvorbereiten;standardmeldung(
+mnrlistewirdaufbereitet,niltext);briefalternative(v1datlehrer,hilfsdatei);
+hilfsdateiindruckdatei(hilfsdatei);vordruck2ggfxmalindruckdatei;zeile:=blank;
+druckzeileschreiben(zeile);zeilenzahlINCR 1;zeile:=42*blank+"Wstd. Summe: "+
+text(summewochstdn,2);druckzeileschreiben(zeile);zeilenzahlINCR 1;IF sollstdn
+<>summewochstdnTHEN differenz:=sollstdn-summewochstdn;IF differenz<0THEN
+zeile:=43*blank+"Mehrarbeit: "+text(-differenz,2)+" Std.";ELSE zeile:=24*
+blank+"Sollstunden unterschritten um: "+text(differenz,2)+" Std.";FI ;
+druckzeileschreiben(zeile);zeilenzahlINCR 1;FI ;zeilenzahl:=5;
+vordruck3ggfindruckdatei;IF mitzeitwuenschenTHEN zeilenzahl:=17;
+vordruck4ggfindruckdatei;FI ;drucknachbereitenohneausdrucken;
+vordruckeloeschen;druckdatei.vordruckeholen:fetch(v1datlehrer,/
+"anschreiben server");fetch(v2datlehrveranstgn,/"anschreiben server");fetch(
+v3dataktschuelergr,/"anschreiben server");fetch(v4datzeitwuensche,/
+"anschreiben server");.vordruckeloeschen:forget(v1datlehrer,quiet);forget(
+v2datlehrveranstgn,quiet);forget(v3dataktschuelergr,quiet);forget(
+v4datzeitwuensche,quiet);END PROC unterrichtsvertlgfuerlehrerdruckdateibauen;
+PROC vordruck2ggfxmalindruckdatei:TEXT VAR hilfsdatei:="hilfsdatei";BOOL VAR
+hilfsdateida:=FALSE ;succ(ixlvsjhjpar);WHILE dbstatus=0AND wert(fnrlvparaphe)
+=aktparapheREP fachkennung:=wert(fnrlvfachkennung);wochstdn:=subtext(wert(
+fnrlvwochenstd),1,2);setzesonderwert(swfach,subtext(fachkennung,1,2));
+setzesonderwert(swkennung,subtext(fachkennung,3,6));setzesonderwert(swwstd,
+wochstdn);summewochstdnINCR int(wochstdn);briefalternative(v2datlehrveranstgn
+,hilfsdatei);succ(ixlvsjhjpar);hilfsdateida:=TRUE ;PER ;IF hilfsdateidaTHEN
+hilfsdateiindruckdatei(hilfsdatei)FI ;END PROC vordruck2ggfxmalindruckdatei;
+PROC vordruck3ggfindruckdatei:LET hilfsdatei="hilfsdatei";TEXT VAR aufberwert
+:=niltext;BOOL VAR hilfsdateiangelegt:=FALSE ;setzesonderwert(swdummy,blank);
+swaktklassenleiter:=580;swaktstellvertreter:=581;gemerkterdbstatus:=dbstatus;
+inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,schuljahr);putwert(
+fnrsgrphj,halbjahr);search(dnraktschuelergruppen,FALSE );WHILE dbstatus=0AND
+wert(fnrsgrphj)=halbjahrREP IF wert(fnrsgrplehrer)=aktparapheAND
+swaktklassenleiter<590THEN aufberwert:=wert(fnrsgrpjgst);aufberwertCAT wert(
+fnrsgrpkennung);setzesonderwert(swaktklassenleiter,aufberwert);
+swaktklassenleiterINCR 2;hilfsdateiangelegt:=TRUE ;ELSE IF wert(
+fnrsgrpstellvlehrer)=aktparapheAND swaktstellvertreter<591THEN aufberwert:=
+wert(fnrsgrpjgst);aufberwertCAT wert(fnrsgrpkennung);setzesonderwert(
+swaktstellvertreter,aufberwert);swaktstellvertreterINCR 2;hilfsdateiangelegt
+:=TRUE ;FI ;FI ;succ(dnraktschuelergruppen)PER ;IF hilfsdateiangelegtTHEN
+briefalternative(v3dataktschuelergr,hilfsdatei);hilfsdateiindruckdatei(
+hilfsdatei);FI ;dbstatus(gemerkterdbstatus)END PROC vordruck3ggfindruckdatei;
+PROC vordruck4ggfindruckdatei:gemerkterdbstatus:=dbstatus;LET hilfsdatei=
+"hilfsdatei";TEXT VAR zeitwuensche;initialisieresonderwerte;INT VAR
+aktswzeitwunsch:=531,position:=1,i;setzesonderwert(swdummy,blank);inittupel(
+dnrzeitwuensche);putwert(fnrzwsj,schuljahr);putwert(fnrzwhj,halbjahr);putwert
+(fnrzwbezug,"P");putwert(fnrzwbezugsobjekt,aktparaphe);search(dnrzeitwuensche
+,TRUE );IF dbstatus=0THEN zeitwuensche:=wert(fnrzwunbestimmtewuensche);
+setzesonderwert(ganztage,zeitwuenscheSUB 1);setzesonderwert(ganzgew,
+zeitwuenscheSUB 3);setzesonderwert(vormtage,zeitwuenscheSUB 4);
+setzesonderwert(vormgew,zeitwuenscheSUB 6);setzesonderwert(nachtage,
+zeitwuenscheSUB 7);setzesonderwert(nachgew,zeitwuenscheSUB 9);zeitwuensche:=
+wert(fnrzwbestimmtewuensche);FOR iFROM 1UPTO 66REP setzesonderwert(
+aktswzeitwunsch,subtext(zeitwuensche,position,position+1));aktswzeitwunsch
+INCR 1;positionINCR 2PER ;briefalternative(v4datzeitwuensche,hilfsdatei);
+hilfsdateiindruckdatei(hilfsdatei);FI ;dbstatus(gemerkterdbstatus)END PROC
+vordruck4ggfindruckdatei;PROC hilfsdateiindruckdatei(TEXT CONST hilfsdatei):
+FILE VAR f;INT VAR i;TEXT VAR zeile;f:=sequentialfile(input,hilfsdatei);
+zeilenhilfszahl:=lines(f);IF zeilenzahl+zeilenhilfszahl+zusatzzeilen>=
+drucklaengeTHEN seitenwechsel;zeilenzahl:=0;FI ;FOR iFROM 1UPTO
+zeilenhilfszahlREP getline(f,zeile);druckzeileschreiben(zeile)PER ;forget(
+hilfsdatei,quiet);zeilenzahlINCR zeilenhilfszahlEND PROC
+hilfsdateiindruckdatei;END PACKET anschrunterrichtsvertlgfuerlehrer
+
diff --git a/app/schulis/2.2.1/src/4.anschr.vertretungen b/app/schulis/2.2.1/src/4.anschr.vertretungen
new file mode 100644
index 0000000..d806e14
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.anschr.vertretungen
@@ -0,0 +1,149 @@
+PACKET anschrvertretungenDEFINES vertretungeneingang,vertretungenstarten,
+vertretungensonderwerte,vertretungendruckdateibauen,vertretungenscanbedingung
+,vertretungslistedrucken:LET swnameaufbereitet=550,swdatum=520,swzeit=521,
+swstd=521,swart=522,swlv=523,swlangtext=523;LET maske=
+"ms vertretungen eingang",fnrparaphe=2,fnrvonzeit=3,fnrbiszeit=4,fnrbsausgabe
+=5,fnrdrausgabe=6,niltext="",blank=" ",strich="-----",kreuz="+",klammerauf=
+"(",klammerzu=")",maxvertretungsarten=16,sonstigkuerzel="qq",
+mnrauswahlnichtsinnvoll=56,mnrbittewarten=69,mnrlistewirderstellt=7,
+mnrnichtimbestand=55;LET druckdatei="liste.1";TEXT CONST sonstiges:=
+"Sonstiges",dateimitformularkopf:="vordruck1 vertretungen",
+dateimitvertretungsdaten:="vordruck2 vertretungen";REAL VAR obergrenze,
+untergrenze,aktzeit;INT VAR index:=dnrlehrer,status,zeilenzahl,
+zeilenhilfszahl,zusatzzeilen,zaehler;TEXT VAR angegebeneparaphe:="",
+aktparaphe,letzteparaphe,datum,hilfstext,bestand:="c02 anrechnung vertret",
+vertretungsarten;ROW maxvertretungsartenTEXT VAR vertretungen;BOOL VAR
+bildschirmausgabe,einzelbearbeitung,zeituntergrenze,zeitobergrenze,dateiende,
+ersteraufruf;PROC vertretungslistedrucken(BOOL CONST drucken):IF druckenTHEN
+print(druckdatei);FI ;forget(druckdatei,quiet);IF einzelbearbeitungTHEN
+forget(dateimitformularkopf,quiet);forget(dateimitvertretungsdaten,quiet);
+enter(2)ELIF dateiendeTHEN forget(dateimitformularkopf,quiet);forget(
+dateimitvertretungsdaten,quiet);enter(2)ELSE enter(1)FI ;END PROC
+vertretungslistedrucken;PROC vertretungeneingang:ersteraufruf:=TRUE ;
+standardvproc(maske)END PROC vertretungeneingang;PROC vertretungenstarten:
+TEXT VAR vonzeit,biszeit;IF NOT ersteraufrufTHEN putwert(fnrvparaphe,
+aktparaphe);zusammengesetztesanschreiben(ixvpar,bildschirmausgabe,
+einzelbearbeitung,BOOL PROC vertretungensonderwerte,BOOL PROC
+vertretungenscanbedingung,TEXT PROC vertretungendruckdateibauen);ELSE last(
+ixvpar);letzteparaphe:=wert(fnrvparaphe);standardpruefe(5,fnrbsausgabe,
+fnrdrausgabe,0,"",status);IF status<>0THEN infeld(status);return(1);ELSE
+standardmeldung(mnrbittewarten,niltext);vonzeit:=standardmaskenfeld(
+fnrvonzeit);biszeit:=standardmaskenfeld(fnrbiszeit);zeituntergrenze:=vonzeit
+<>niltext;zeitobergrenze:=biszeit<>niltext;IF datumspruefungenkorrektTHEN
+angegebeneparaphe:=standardmaskenfeld(fnrparaphe);IF
+angabenindateivertretungenvorhandenTHEN ersteraufruf:=FALSE ;
+parametersetzenundstartenELSE standardmeldung(mnrnichtimbestand,niltext);
+return(1)FI ;ELSE return(1)FI ;FI ;FI ;.parametersetzenundstarten:dateiende:=
+FALSE ;datum:=wert(fnrvdatum);vertretungsartenausbestandholen;
+bildschirmausgabe:=standardmaskenfeld(fnrdrausgabe)=niltext;
+setzesonderwerteschulkenndaten;vordruckeholen;standardmeldung(
+mnrlistewirderstellt,niltext);putwert(fnrvparaphe,aktparaphe);disablestop;
+zusammengesetztesanschreiben(ixvpar,bildschirmausgabe,einzelbearbeitung,BOOL
+PROC vertretungensonderwerte,BOOL PROC vertretungenscanbedingung,TEXT PROC
+vertretungendruckdateibauen);IF iserrorTHEN clearerrorFI ;enablestop.
+vordruckeholen:forget(dateimitformularkopf,quiet);forget(
+dateimitvertretungsdaten,quiet);fetch(dateimitformularkopf,/
+"anschreiben server");fetch(dateimitvertretungsdaten,/"anschreiben server");.
+datumspruefungenkorrekt:IF zeituntergrenzeTHEN standardpruefe(6,fnrvonzeit,0,
+0,"",status);IF status<>0THEN infeld(status);LEAVE datumspruefungenkorrekt
+WITH FALSE ELSE datum:=subtext(vonzeit,5,6);datumCAT subtext(vonzeit,3,4);
+datumCAT subtext(vonzeit,1,2);untergrenze:=real(datum);FI ;FI ;IF
+zeitobergrenzeTHEN standardpruefe(6,fnrbiszeit,0,0,"",status);IF status<>0
+THEN infeld(status);LEAVE datumspruefungenkorrektWITH FALSE ELSE datum:=
+subtext(biszeit,5,6);datumCAT subtext(biszeit,3,4);datumCAT subtext(biszeit,1
+,2);obergrenze:=real(datum);FI ;FI ;IF zeituntergrenzeAND zeitobergrenzeTHEN
+IF untergrenze>obergrenzeTHEN infeld(fnrvonzeit);standardmeldung(
+mnrauswahlnichtsinnvoll,niltext);LEAVE datumspruefungenkorrektWITH FALSE FI ;
+FI ;TRUE .vertretungsartenausbestandholen:vertretungsarten:=niltext;inittupel
+(dnrschluessel);putwert(fnrschlsachgebiet,bestand);search(dnrschluessel);
+WHILE wert(fnrschlsachgebiet)=bestandREP vertretungsartenCAT text(wert(
+fnrschlschluessel),2);succ(dnrschluessel);PER ;.
+angabenindateivertretungenvorhanden:BOOL VAR ok:=FALSE ;einzelbearbeitung:=
+angegebeneparaphe<>niltext;inittupel(dnrvertretungen);IF einzelbearbeitung
+THEN putwert(fnrvparaphe,angegebeneparaphe);search(ixvpar,TRUE )ELSE search(
+ixvpar,FALSE )FI ;IF dbstatus<>0THEN ok:=FALSE ELSE aktparaphe:=wert(
+fnrvparaphe);IF einzelbearbeitungTHEN WHILE dbstatus=0AND angegebeneparaphe=
+aktparapheAND obergrenzeokAND NOT untergrenzeokREP succ(ixvpar);aktparaphe:=
+wert(fnrvparaphe);PER ;ok:=dbstatus=0AND obergrenzeokAND untergrenzeokAND
+angegebeneparaphe=aktparapheELSE WHILE dbstatus=0AND (NOT obergrenzeokCOR
+NOT untergrenzeok)REP succ(ixvpar);PER ;aktparaphe:=wert(fnrvparaphe);ok:=
+dbstatus=0AND obergrenzeokAND untergrenzeokFI ;FI ;okEND PROC
+vertretungenstarten;BOOL PROC obergrenzeok:BOOL VAR b:=TRUE ;IF
+zeitobergrenzeTHEN datum:=wert(fnrvdatum);hilfstext:=subtext(datum,7,8);
+hilfstextCAT subtext(datum,4,5);hilfstextCAT subtext(datum,1,2);aktzeit:=real
+(hilfstext);b:=aktzeit<=obergrenze;FI ;bEND PROC obergrenzeok;BOOL PROC
+untergrenzeok:BOOL VAR b:=TRUE ;IF zeituntergrenzeTHEN datum:=wert(fnrvdatum)
+;hilfstext:=subtext(datum,7,8);hilfstextCAT subtext(datum,4,5);hilfstextCAT
+subtext(datum,1,2);aktzeit:=real(hilfstext);b:=aktzeit>=untergrenze;FI ;bEND
+PROC untergrenzeok;BOOL PROC vertretungenscanbedingung:BOOL VAR b;IF
+einzelbearbeitungTHEN b:=aktparaphe=angegebeneparapheAND dbstatus=0ELSE b:=
+dbstatus=0AND NOT dateiendeFI ;bEND PROC vertretungenscanbedingung;BOOL PROC
+vertretungensonderwerte:TEXT VAR hilfsstring1:=niltext,hilfsstring2;INT VAR
+dbstatussave;initialisieresonderwerte;adressat(aktparaphe);dbstatussave:=
+dbstatus;inittupel(dnrlehrer);putwert(fnrlparaphe,aktparaphe);search(
+dnrlehrer,TRUE );IF wert(fnrlgeschlecht)="m"THEN hilfsstring1:="Herrn "ELSE
+hilfsstring1:="Frau ";FI ;hilfsstring2:=wert(fnrlamtsbeztitel);IF
+hilfsstring2<>niltextTHEN hilfsstring1CAT hilfsstring2+blank;FI ;hilfsstring2
+:=wert(fnrlzusatz);IF hilfsstring2<>niltextTHEN hilfsstring1CAT hilfsstring2+
+blank;FI ;hilfsstring1CAT wert(fnrlfamname);setzesonderwert(swnameaufbereitet
+,hilfsstring1);dbstatus(0);TRUE END PROC vertretungensonderwerte;TEXT PROC
+vertretungendruckdateibauen:LET druckdatei="liste.1",hilfsdatei="hilfsdatei";
+TEXT VAR zeile;INT VAR i;BOOL VAR einsatzda:=FALSE ;setzemitseitennummern(
+TRUE );druckvorbereiten;zeilenzahl:=0;zusatzzeilen:=0;briefalternative(
+dateimitformularkopf,hilfsdatei);hilfsdateiindruckdatei(hilfsdatei);FOR
+zaehlerFROM 1UPTO maxvertretungsartenREP vertretungen(zaehler):=niltextPER ;
+vordruck2xmalinhilfsdatei;hilfsdateiindruckdatei(hilfsdatei);IF zeilenzahl+3>
+drucklaengeTHEN seitenwechsel;zeilenzahl:=0FI ;zeile:=blank;
+druckzeileschreiben(zeile);druckzeileschreiben(zeile);zeile:=
+"Summe Stunden Art";druckzeileschreiben(zeile);zeile:=3*strich+kreuz+7*
+strich;druckzeileschreiben(zeile);zeilenzahlINCR 4;setzesonderwert(swdatum,
+niltext);imrowgemerktedatenübervordruck2indruckdatei;
+drucknachbereitenohneausdrucken;druckdateiEND PROC
+vertretungendruckdateibauen;PROC vordruck2xmalinhilfsdatei:LET hilfsdatei=
+"hilfsdatei";INT VAR savedbstatus;savedbstatus:=dbstatus;inittupel(
+dnrvertretungen);statleseschleife(ixvpar,"",aktparaphe,fnrvparaphe,
+fnrvparaphe,PROC saetzezurparapheinvordruck);dbstatus(savedbstatus);IF NOT
+einzelbearbeitungTHEN search(ixvpar,FALSE );WHILE dbstatus=0AND (NOT
+obergrenzeokCOR NOT untergrenzeokCOR aktparaphe=wert(fnrvparaphe))REP succ(
+ixvpar);PER ;dateiende:=letzteparaphe=aktparapheOR dbstatus<>0;aktparaphe:=
+wert(fnrvparaphe);FI ;END PROC vordruck2xmalinhilfsdatei;PROC
+saetzezurparapheinvordruck(BOOL VAR b):LET hilfsdatei="hilfsdatei";b:=FALSE ;
+IF NOT obergrenzeokCOR wert(fnrvparaphe)<>aktparapheCOR dbstatus=3THEN b:=
+TRUE ;ELSE IF untergrenzeokTHEN swvertretungenfuellen;briefalternative(
+dateimitvertretungsdaten,hilfsdatei);FI ;FI ;END PROC
+saetzezurparapheinvordruck;PROC swvertretungenfuellen:TEXT VAR zeitaufber,
+artvertr,lehrveranstg,lvaufber;INT VAR zeit,std,tag,position;zeit:=intwert(
+fnrvtagstd);lehrveranstg:=wert(fnrvveranstaltung);artvertr:=text(wert(
+fnrvanrechnung),2);datum:=wert(fnrvdatum);position:=pos(vertretungsarten,
+artvertr);IF position=0THEN vertretungen(16)CAT sonstigkuerzelELSE WHILE (
+positionMOD 2)=0AND position<>0AND position<32REP position:=pos(
+vertretungsarten,artvertr,position+1);PER ;IF position=0OR (positionMOD 2)=0
+THEN vertretungen(16)CAT sonstigkuerzelELSE vertretungen(position)CAT
+artvertrFI ;FI ;tag:=(zeit-1)DIV 12;std:=zeitMOD 12;IF tag=0THEN zeitaufber:=
+"Mo "ELIF tag=1THEN zeitaufber:="Di "ELIF tag=2THEN zeitaufber:="Mi "ELIF tag
+=3THEN zeitaufber:="Do "ELIF tag=4THEN zeitaufber:="Fr "ELIF tag=5THEN
+zeitaufber:="Sa "FI ;zeitaufberCAT text(std,2);lvaufber:=subtext(lehrveranstg
+,1,2)+blank;lvaufberCAT subtext(lehrveranstg,3,4)+blank;lvaufberCAT subtext(
+lehrveranstg,5,8);setzesonderwert(swdatum,datum);setzesonderwert(swzeit,
+zeitaufber);setzesonderwert(swart,artvertr);setzesonderwert(swlv,lvaufber);
+END PROC swvertretungenfuellen;PROC
+imrowgemerktedatenübervordruck2indruckdatei:BOOL VAR angabeda:=FALSE ;TEXT
+VAR hilfsdatei:="hilfsdatei",kuerzel,langtext;INT VAR savedbstatus;
+savedbstatus:=dbstatus;inittupel(dnrschluessel);putwert(fnrschlsachgebiet,
+bestand);zaehler:=1;WHILE zaehler<=maxvertretungsartenREP kuerzel:=text(
+vertretungen(zaehler),2);IF kuerzel<>" "THEN IF kuerzel=sonstigkuerzelTHEN
+kuerzel:=" ";langtext:=sonstigesELSE putwert(fnrschlschluessel,compress(
+kuerzel));search(dnrschluessel,TRUE );langtext:=wert(fnrschllangtext);FI ;
+setzesonderwert(swstd,text(length(vertretungen(zaehler))DIV 2,2));
+setzesonderwert(swart,kuerzel);setzesonderwert(swlangtext,klammerauf+langtext
++klammerzu);briefalternative(dateimitvertretungsdaten,hilfsdatei);angabeda:=
+TRUE ;FI ;zaehlerINCR 1;PER ;dbstatus(savedbstatus);IF angabedaTHEN
+hilfsdateiindruckdatei(hilfsdatei)FI ;END PROC
+imrowgemerktedatenübervordruck2indruckdatei;PROC hilfsdateiindruckdatei(TEXT
+CONST hilfsdatei):FILE VAR f;INT VAR i;TEXT VAR zeile;f:=sequentialfile(input
+,hilfsdatei);zeilenhilfszahl:=lines(f);IF zeilenzahl+zeilenhilfszahl+
+zusatzzeilen>=drucklaengeTHEN seitenwechsel;zeilenzahl:=0;FI ;FOR iFROM 1
+UPTO zeilenhilfszahlREP getline(f,zeile);druckzeileschreiben(zeile)PER ;
+forget(hilfsdatei,quiet);zeilenzahlINCR zeilenhilfszahlEND PROC
+hilfsdateiindruckdatei;END PACKET anschrvertretungen;
+
diff --git a/app/schulis/2.2.1/src/4.aufsichten erstellen b/app/schulis/2.2.1/src/4.aufsichten erstellen
new file mode 100644
index 0000000..06022bf
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.aufsichten erstellen
@@ -0,0 +1,194 @@
+PACKET aufsichtenerstellenDEFINES aufsichtsplandatenbearbeiten,
+aufsichtsplandatenspeichern,aufsichtsplanlehrerlistezeigen:LET feldeingtag=2,
+feldeingnr=3,feldeingakthj=4,feldbearbtag=2,feldbearbnr=3,feldbearbname=4,
+feldbearbort1=5,feldbearbpar1=6,letztesbearbfeld=38,leerereintrag=" ",
+bestandorte="c02 aufsichtsorte",trenner="�",schuljahr="Schuljahr",halbjahr=
+"Schulhalbjahr",ausgparam="#",bearbmaske="ms aufsichtsplan erstellen bearb",
+kennungparaphe="P",kennunglv="L",kennungraum="R",laengetagbeschr=17,
+laengeparaphe=4,laengeaufsort=4,laengeraumminus=3,maxanzorte=17,
+meldungserverfehler=376,meldungbearbwird=352,meldungkeinstdplan=366,
+meldungkeinesugruppen=334,meldungzuvielesugruppen=356,meldungkeinelv=326,
+meldungzuvielelv=358,meldungbasisinkon=378,meldunglisteerstellen=7,
+meldungfalschertag=385,meldungfalschepar=142,meldungwarten=69,
+meldungzuvieleorte=398,meldungkeinelehrer=337,meldungkeineorte=399,
+meldungkeinedaten=59,meldungschonaufs=401,meldungspeichern=50,
+meldungfalscherwert=54,meldungnichtsp=63,meldungspfehler=364,meldungplausi=57
+;ROW maxanzorteTEXT VAR datenausplan;TEXT VAR alletage:=
+"�01�1� 1�MO�mo�Mo�02�2� 2�DI�di�Di�"+"03�3� 3�MI�mi�Mi�04�4� 4�DO�do�Do�"+
+"05�5� 5�FR�fr�Fr�06�6� 6�SA�sa�Sa��";TEXT VAR tag:="",nr:="",komprpar:="",
+lehrerliste:="",orteliste:="",aufslehrerliste:="",schhj,schj,hjsjanhang:="",
+eintragtag,eintragnr,eintragname;INT VAR i,j,fstat,stdvor,stdnach,rowindex:=1
+,anzaufsorte:=0,hjkennalt:=-1,hjkennneu:=0,anzaufs:=0;BOOL VAR
+aenderungsfehler:=FALSE ,stundenplannichtda:=TRUE ,zuvieleorte:=FALSE ;
+WINDOW VAR w:=startwindow(27,23,77,1);TEXT VAR liste,aktpar,lvvor,lvnach,
+raumvor,raumnach,paraphenvorstd:="",paraphennachstd:="",lvvorstd:="",
+lvnachstd:="",raeumevorstd:="",raeumenachstd:="";PROC
+aufsichtsplandatenbearbeiten:standardmeldung(meldungwarten," ");
+pruefeingabedaten;holedaten;aufsichtsplandatenzeigen.pruefeingabedaten:
+prueftag;pruefnr.prueftag:tag:=standardmaskenfeld(feldeingtag);i:=pos(
+alletage,trenner+tag+trenner);IF i=0THEN return(1);infeld(feldeingtag);
+standardmeldung(meldungfalschertag,"");LEAVE aufsichtsplandatenbearbeiten
+ELSE IF tag=""THEN tag:="1"ELSE tag:=text(iDIV laengetagbeschr+1)FI FI .
+pruefnr:nr:=standardmaskenfeld(feldeingnr);IF nr=""THEN nr:="01"ELSE i:=int(
+nr);IF i<1COR i>15THEN return(1);infeld(feldeingnr);standardmeldung(
+meldungfalscherwert,"");LEAVE aufsichtsplandatenbearbeitenELSE nr:="0"+text(i
+);nr:=subtext(nr,length(nr)-1);FI ;FI .holedaten:IF akthj<>""THEN hjkennneu:=
+0ELSE hjkennneu:=1FI ;IF hjkennneu<>hjkennaltTHEN hjkennalt:=hjkennneu;schj:=
+schulkenndatum(schuljahr);schhj:=schulkenndatum(halbjahr);IF hjkennneu=1THEN
+geplanteshjundsjberechnen(schhj,schj)FI ;stundenplanhalbjahrsetzen(schhj,schj
+);hjsjanhang:=schhj+". "+text(schj,2)+"/"+subtext(schj,3);FI ;IF records(
+dnraufsichtszeiten)=0.0THEN fehlermeldungkeineaufszeitenFI ;IF orteliste=""
+THEN holeorteFI ;holestartzeit;holeparaphenzurstartzeit.akthj:
+standardmaskenfeld(feldeingakthj).fehlermeldungkeineaufszeiten:return(1);
+infeld(feldeingnr);standardmeldung(meldungkeinedaten,"");LEAVE
+aufsichtsplandatenbearbeiten.holeorte:IF records(dnrschluessel)=0.0THEN
+fehlermeldungkeineorteELSE zuvieleorte:=FALSE ;inittupel(dnrschluessel);
+statleseschleife(dnrschluessel,bestandorte,"",dnrschluessel+1,dnrschluessel+2
+,PROC erstelleorteliste);IF orteliste=""THEN fehlermeldungkeineorteELIF
+anzaufsorte>maxanzorteTHEN orteliste:=text(orteliste,maxanzorte*laengeaufsort
+);anzaufsorte:=maxanzorte;zuvieleorte:=TRUE FI FI .fehlermeldungkeineorte:
+return(1);infeld(feldeingtag);standardmeldung(meldungkeineorte,"");LEAVE
+aufsichtsplandatenbearbeiten.holestartzeit:inittupel(dnraufsichtszeiten);
+putwert(fnrazsj,schj);putwert(fnrazhj,schhj);putwert(fnrazaufsichtszeit,tag+
+nr);search(dnraufsichtszeiten,TRUE );IF dbstatus<>0THEN
+fehlermeldungkeineaufszeitenELSE eintragtag:=tagesangabe(tag);eintragnr:=text
+(int(nr),2);eintragname:=wert(fnrazbezeichnung);stdvor:=intwert(
+fnraztagstdvor);stdnach:=intwert(fnraztagstdnach)FI .holeparaphenzurstartzeit
+:IF records(dnraufsichtsplan)=0.0THEN LEAVE holeparaphenzurstartzeitELSE
+inittupel(dnraufsichtsplan);aufslehrerliste:="";putwert(fnrapaufsichtszeit,
+tag+nr);statleseschleife(dnraufsichtsplan,schj,schhj,fnrapsj,fnraphj,PROC
+parderaufsicht)FI .END PROC aufsichtsplandatenbearbeiten;PROC
+aufsichtsplandatenzeigen:standardstartproc(bearbmaske);
+standardkopfmaskeaktualisieren("Aufsichtsplan erstellen für "+hjsjanhang);
+fuellemaske;standardnprocEND PROC aufsichtsplandatenzeigen;PROC fuellemaske:
+INT VAR aktpos,aktfeld;TEXT VAR ort,paraphe;infeld(1);standardmaskenfeld(
+eintragtag,feldbearbtag);standardmaskenfeld(eintragnr,feldbearbnr);
+standardmaskenfeld(eintragname,feldbearbname);gibaufsorteaus;
+standardfelderausgeben;infeld(feldbearbpar1);liste:="";aenderungsfehler:=
+FALSE ;IF zuvieleorteTHEN standardmeldung(meldungzuvieleorte,"");zuvieleorte
+:=FALSE FI .gibaufsorteaus:aktpos:=1;rowindex:=1;aktfeld:=feldbearbort1;
+WHILE aktpos<length(orteliste)REP ort:=subtext(orteliste,aktpos,aktpos+
+laengeaufsort-1);paraphe:=holeaufsicht(ort);datenausplan(rowindex):=paraphe;
+standardmaskenfeld(ort,aktfeld);standardmaskenfeld(paraphe,aktfeld+1);
+rowindexINCR 1;aktposINCR laengeaufsort;aktfeldINCR 2PER ;FOR iFROM aktfeld
+UPTO letztesbearbfeldREP standardmaskenfeld(leerereintrag,i);IF iMOD 2=0THEN
+feldschutz(i)FI PER .END PROC fuellemaske;TEXT PROC holeaufsicht(TEXT CONST
+ort):INT VAR aktpos;aktpos:=pos(aufslehrerliste,trenner+trenner+ort+trenner);
+IF aktpos>0THEN subtext(aufslehrerliste,aktpos+7,pos(aufslehrerliste,trenner,
+aktpos+7)-1)ELSE ""FI END PROC holeaufsicht;PROC aufsichtsplandatenspeichern(
+BOOL CONST speichern):TEXT VAR zeit,eintragort,eintragpar,weiterereintragpar;
+INT VAR aktfeld:=5,feld;aenderungsfehler:=FALSE ;IF speichernTHEN
+aenderungenspeichernELSE standardmeldung(meldungnichtsp,"")FI ;IF
+aenderungsfehlerTHEN fehlermeldungspfehlerFI ;naechstezeit.
+aenderungenspeichern:standardmeldung(meldungplausi,"");aenderungsfehler:=
+FALSE ;aktfeld:=5;FOR iFROM 1UPTO anzaufsorteREP eintragpar:=
+standardmaskenfeld(aktfeld+1);IF eintragpar<>""THEN IF NOT
+bezeichnungzulaessig("P",eintragpar)THEN fehlermeldungfalscheparapheELIF
+eintragpar<>datenausplan(i)THEN pruefanderebseintraegeFI FI ;aktfeldINCR 2
+PER ;standardmeldung(meldungspeichern,"");aktfeld:=5;FOR iFROM 1UPTO
+anzaufsorteREP eintragort:=standardmaskenfeld(aktfeld);eintragpar:=
+standardmaskenfeld(aktfeld+1);IF datenausplan(i)<>eintragparTHEN
+speicheraenderungenFI ;aktfeldINCR 2PER .pruefanderebseintraege:feld:=6;FOR j
+FROM 1UPTO anzaufsorteREP IF feld<>aktfeld+1THEN weiterereintragpar:=
+standardmaskenfeld(feld);IF eintragpar=weiterereintragparTHEN
+fehlermeldungparaphedoppeltFI ;FI ;feldINCR 2PER .fehlermeldungparaphedoppelt
+:standardmeldung(meldungschonaufs,eintragpar+ausgparam+standardmaskenfeld(
+feld-1)+ausgparam);infeld(aktfeld+1);return(1);LEAVE
+aufsichtsplandatenspeichern.fehlermeldungfalscheparaphe:standardmeldung(
+meldungfalschepar,eintragpar+ausgparam);infeld(aktfeld+1);return(1);LEAVE
+aufsichtsplandatenspeichern.fehlermeldungspfehler:standardmeldung(
+meldungspfehler,"");infeld(feldbearbpar1);return(1);LEAVE
+aufsichtsplandatenspeichern.speicheraenderungen:IF datenausplan(i)=""CAND
+eintragpar<>""THEN insertsatzELIF datenausplan(i)<>""CAND eintragpar=""THEN
+deletesatzELSE updatesatzFI .insertsatz:inittupel(dnraufsichtsplan);putwert(
+fnrapsj,schj);putwert(fnraphj,schhj);putwert(fnrapaufsichtszeit,tag+nr);
+putwert(fnrapaufsichtsort,compress(eintragort));putwert(fnrapparaphe,
+eintragpar);insert(dnraufsichtsplan);IF dbstatus<>okTHEN aenderungsfehler:=
+TRUE FI .updatesatz:inittupel(dnraufsichtsplan);putwert(fnrapsj,schj);putwert
+(fnraphj,schhj);putwert(fnrapaufsichtszeit,tag+nr);putwert(fnrapaufsichtsort,
+compress(eintragort));putwert(fnrapparaphe,datenausplan(i));search(
+dnraufsichtsplan,TRUE );IF dbstatus=okTHEN putwert(fnrapparaphe,eintragpar);
+update(dnraufsichtsplan);IF dbstatus<>okTHEN aenderungsfehler:=TRUE FI ELSE
+aenderungsfehler:=TRUE FI .deletesatz:inittupel(dnraufsichtsplan);putwert(
+fnrapsj,schj);putwert(fnraphj,schhj);putwert(fnrapaufsichtszeit,tag+nr);
+putwert(fnrapaufsichtsort,compress(eintragort));putwert(fnrapparaphe,
+datenausplan(i));search(dnraufsichtsplan,TRUE );IF dbstatus=okTHEN delete(
+dnraufsichtsplan);IF dbstatus<>okTHEN aenderungsfehler:=TRUE FI ELSE
+aenderungsfehler:=TRUE FI .naechstezeit:succ(dnraufsichtszeiten);IF wert(
+fnrazsj)<>schjCOR wert(fnrazhj)<>schhjCOR dbstatus<>0THEN verlasseanwendung
+ELSE zeit:=wert(fnrazaufsichtszeit);tag:=text(zeit,1);nr:=subtext(zeit,2);
+eintragtag:=tagesangabe(tag);eintragnr:=text(int(nr),2);eintragname:=wert(
+fnrazbezeichnung);stdvor:=intwert(fnraztagstdvor);stdnach:=intwert(
+fnraztagstdnach);inittupel(dnraufsichtsplan);aufslehrerliste:="";putwert(
+fnrapaufsichtszeit,zeit);statleseschleife(dnraufsichtsplan,schj,schhj,fnrapsj
+,fnraphj,PROC parderaufsicht);fuellemaske;return(1)FI .verlasseanwendung:
+enter(2).END PROC aufsichtsplandatenspeichern;PROC
+aufsichtsplanlehrerlistezeigen:INT VAR parpos,anfpos,aktfeld:=infeld;
+standardmeldung(meldunglisteerstellen,"");IF liste=""THEN IF lehrerliste=""
+THEN holelehrerFI ;IF stundenplannichtdaTHEN
+stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN
+meldungausgeben(fstat);return(1);LEAVE aufsichtsplanlehrerlistezeigenELSE
+stundenplannichtda:=FALSE FI ;FI ;IF stdvor<>0THEN paraphenvorstd:=
+datenderzeit(stdvor,kennungparaphe);lvvorstd:=datenderzeit(stdvor,kennunglv);
+raeumevorstd:=datenderzeit(stdvor,kennungraum)ELSE paraphenvorstd:="";
+lvvorstd:="";raeumevorstd:="";FI ;IF stdnach<>0THEN paraphennachstd:=
+datenderzeit(stdnach,kennungparaphe);lvnachstd:=datenderzeit(stdnach,
+kennunglv);raeumenachstd:=datenderzeit(stdnach,kennungraum)ELSE
+paraphennachstd:="";lvnachstd:="";raeumenachstd:=""FI ;fuelleliste;FI ;IF
+menuedraussenTHEN reorganizescreenFI ;infeld(1);standardfelderausgeben;open(w
+);auskunfterteilung(liste,w,FALSE );reorganizescreen;setlasteditvalues;infeld
+(aktfeld);return(1).fuelleliste:listeCAT "Aufsicht möglich durch:";listeCAT
+auskunftstextende;listeCAT "Paraphe Anz. Unterr. vorher Unterr. nachher";
+listeCAT auskunftstextende;FOR iFROM 1UPTO length(lehrerliste)DIV
+laengeparapheREP lvvor:="";lvnach:="";raumvor:="";raumnach:="";aktpar:=
+subtext(lehrerliste,(i-1)*laengeparaphe+1,i*laengeparaphe);parpos:=suchpos(
+paraphenvorstd,aktpar,laengeparaphe);IF parpos>0THEN anfpos:=(parpos-1)*2;
+lvvor:=subtext(lvvorstd,anfpos+1,anfpos+8);raumvor:=subtext(raeumevorstd,
+parpos,parpos+laengeraumminus)FI ;parpos:=suchpos(paraphennachstd,aktpar,
+laengeparaphe);IF parpos>0THEN anfpos:=(parpos-1)*2;lvnach:=subtext(lvnachstd
+,anfpos+1,anfpos+8);raumnach:=subtext(raeumenachstd,parpos,parpos+
+laengeraumminus)FI ;IF lvvor<>""COR lvnach<>""THEN schreiblisteneintragFI ;
+PER ;listeCAT "*";listeCAT auskunftstextende.holelehrer:IF records(dnrlehrer)
+=0.0THEN fehlermeldungkeinelehrerELSE inittupel(dnrlehrer);statleseschleife(
+dnrlehrer,"","",fnrlparaphe,fnrlfamname,PROC erstellelehrerliste)FI .
+fehlermeldungkeinelehrer:return(1);infeld(feldeingtag);standardmeldung(
+meldungkeinelehrer,"");LEAVE aufsichtsplanlehrerlistezeigen.END PROC
+aufsichtsplanlehrerlistezeigen;PROC schreiblisteneintrag:standardmeldung(
+meldungbearbwird,aktpar+ausgparam);listeCAT text(aktpar,8);komprpar:=compress
+(aktpar);listeCAT text(aufsichtenderparaphe,2);IF lvvor=""THEN listeCAT
+" ";ELSE listeCAT " ";listeCAT text(lvvor,2);listeCAT " ";
+listeCAT subtext(lvvor,3,4);listeCAT " ";listeCAT subtext(lvvor,5);listeCAT
+"/";listeCAT raumvorFI ;IF lvnach=""THEN listeCAT " ";ELSE
+listeCAT " ";listeCAT text(lvnach,2);listeCAT " ";listeCAT subtext(lvnach,3,4
+);listeCAT " ";listeCAT subtext(lvnach,5);listeCAT "/";listeCAT raumnachFI ;
+listeCAT auskunftstextende.END PROC schreiblisteneintrag;INT PROC
+aufsichtenderparaphe:inittupel(dnraufsichtsplan);anzaufs:=0;statleseschleife(
+ixappar,komprpar,"",fnrapparaphe,fnrapsj,PROC anzaufsichtenzaehlen);anzaufs
+END PROC aufsichtenderparaphe;PROC anzaufsichtenzaehlen(BOOL VAR b):IF
+dbstatus<>okCOR wert(fnrapparaphe)>komprparTHEN dbstatus(1);b:=TRUE ELIF wert
+(fnrapsj)=schjCAND wert(fnraphj)=schhjTHEN anzaufsINCR 1FI END PROC
+anzaufsichtenzaehlen;INT PROC suchpos(TEXT CONST quelle,muster,INT CONST
+musterlaenge):INT VAR suchab:=1,aktpos;IF quelle<>""THEN WHILE pos(quelle,
+muster,suchab)>0REP aktpos:=pos(quelle,muster,suchab);IF aktposMOD
+musterlaenge=1THEN LEAVE suchposWITH aktposELSE suchab:=aktpos+1FI ;PER ;FI ;
+0END PROC suchpos;PROC erstellelehrerliste(BOOL VAR b):IF dbstatus<>0THEN b:=
+TRUE ELSE lehrerlisteCAT text(wert(fnrlparaphe),laengeparaphe)FI END PROC
+erstellelehrerliste;PROC erstelleorteliste(BOOL VAR b):IF wert(dnrschluessel+
+1)>bestandorteCOR dbstatus<>0THEN b:=TRUE ELSE ortelisteCAT text(wert(
+dnrschluessel+2),laengeaufsort);anzaufsorteINCR 1FI END PROC
+erstelleorteliste;PROC parderaufsicht(BOOL VAR b):IF wert(fnrapsj)<>schjCOR
+wert(fnraphj)<>schhjCOR wert(fnrapaufsichtszeit)<>tag+nrCOR dbstatus<>0THEN
+dbstatus(1);b:=TRUE ELSE aufslehrerlisteCAT trenner;aufslehrerlisteCAT
+trenner;aufslehrerlisteCAT text(wert(fnrapaufsichtsort),laengeaufsort);
+aufslehrerlisteCAT trenner;aufslehrerlisteCAT wert(fnrapparaphe);
+aufslehrerlisteCAT trennerFI END PROC parderaufsicht;TEXT PROC tagesangabe(
+TEXT CONST tag):IF tag="1"THEN "Mo"ELIF tag="2"THEN "Di"ELIF tag="3"THEN "Mi"
+ELIF tag="4"THEN "Do"ELIF tag="5"THEN "Fr"ELSE "Sa"FI END PROC tagesangabe;
+PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung(
+meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(meldungkeinstdplan,
+"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5
+THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN
+standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(
+meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");
+FI END PROC meldungausgeben;END PACKET aufsichtenerstellen
+
diff --git a/app/schulis/2.2.1/src/4.daten für intega aufbereiten b/app/schulis/2.2.1/src/4.daten für intega aufbereiten
new file mode 100644
index 0000000..008e89e
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.daten für intega aufbereiten
@@ -0,0 +1,462 @@
+PACKET datenfuerintegaaufbereitenDEFINES integastdvproc,integaarchiv,
+integaabfrage,integaaufbereitenoderabfrage,integaentfernen,integaposhalt,
+integaloescheundreturn,integadatenzeigen,integadatendrucken,
+schulisintegatransfer:LET raumkenndaten="c02 raeume",schulkenndaten=
+"c02 schulkenndaten",schulhj="Schulhalbjahr",schulj="Schuljahr",schulname=
+"Schulname",schulort="Schulort",schulstr="Schulstraße",eingmaske=
+"ms eing integaeingabedatei",fldakthj=2,fldfix1=3,fldfix2=4,fldinteganame=5,
+meldg0=69,meldg1=340,meldg2=323,meldg3=324,meldg4=331,meldg5=332,meldg6=333,
+meldg7=334,meldg8=335,meldg9=336,meldg10=337,meldg11=338,meldg13=343,meldg14=
+345,meldg15=346,meldg16=347,meldg17=348,meldg18=349,meldg19=350,meldg20=351,
+meldg21=381,meldg22=56,meldg23=58,meldungbearbwird=352,meldungserverfehler=
+376,meldungkeinstdplan=366,meldungkeinesugruppen=334,meldungzuvielesugruppen=
+356,meldungkeinelv=326,meldungzuvielelv=358,meldungbasisinkon=378,
+meldungstdplauswvorber=384,zeilenende="",erstestde=1,maxstden=66,vormstden=6,
+nachmstden=6,stdenprotag=12,vorm=6,nachm=5,unttage=6,eumelgrenzemaxzeilen=
+4000,ausgparam="#",trenner="�";LET filemodus="file ibm",leererunbestwunsch=
+" ",dateikennung=".DP",dos="DOS",kennpar="P",kennsugrup="S",kennraum=
+"R",kennkoppl="K",kennfach="F",listenname=
+"Liste der Dateien auf der Diskette:";DATASPACE VAR dszeitw,dslverf,dskverf;
+FILE VAR f,g,z,k,l;INT VAR p,i,j,h,fstat,zz:=0,ruecksprung:=1,maxvs:=0,maxns
+:=0,vs:=vormstden,ns:=nachmstden,nulltestd:=0,vm:=vorm,objvm,nm:=nachm,objnm,
+ut:=unttage,objut,jahrende;TEXT VAR sgrdaten:="",sgridaten:="",klgr:=trenner,
+klgrdaten:="",rgrdaten:=trenner,letztepar:="",par:="",objektverf:="",
+lehrerdaten,bearbkopplungen,kartenart,zeitwuensche:=trenner,
+schulverfuegbarkeit:="",dateiname:="SCHULIS.DP",schuldaten:="",zeile:="",
+aktschj:="0",aktschhj:="0",geplschj:="0",geplschhj:="0",schj,schhj,record:=""
+,t1:="",t2:="",zeitdaten:="";BOOL VAR datenfehler,fehler,mindeinraum,
+archivfehler,falschesugrupgefunden:=FALSE ,abbruchwegen4000zeilen:=FALSE ;
+THESAURUS VAR thes;TEXT VAR t:="",leererbestwunsch:=
+" "+
+" ",bestwunsch,
+unbestwunsch;PROC integaposhalt(INT CONST rueck):infeld(fldakthj);return(
+rueck)END PROC integaposhalt;PROC loeschemeldung:INT VAR ankreuzung:=1;FOR i
+FROM fldakthjUPTO fldfix2REP IF standardmaskenfeld(i)<>""THEN ankreuzung:=
+ankreuzung*(2*i-1)FI PER ;standardstartproc(eingmaske);infeld(fldakthj);FOR i
+FROM fldakthjUPTO fldfix2REP IF ankreuzungMOD (2*i-1)=0THEN
+standardmaskenfeld("x",i)FI PER ;standardmaskenfeld(text(dateiname,pos(
+dateiname,".")-1),fldinteganame);standardfelderausgeben;infeld(fldakthj);END
+PROC loeschemeldung;PROC archivanmelden:archivfehler:=FALSE ;commanddialogue(
+FALSE );disablestop;dateiname:=standardmaskenfeld(fldinteganame)+".DP";IF
+standardmaskenfeld(fldinteganame)=""THEN fehlermeldungnamefalschELIF
+falschercode(dateiname)THEN fehlermeldungnamefalschFI ;reserve(filemodus,/dos
+);IF iserrorTHEN archivfehler:=TRUE ;abbruchnachfehler(1);LEAVE
+archivanmeldenFI ;enablestop.fehlermeldungnamefalsch:archivfehler:=TRUE ;
+return(ruecksprung);infeld(fldinteganame);standardmeldung(meldg2,subtext(
+dateiname,i,i)+"#"+dateiname+"#");LEAVE archivanmelden.END PROC
+archivanmelden;PROC integaarchiv(INT CONST wahl):SELECT wahlOF CASE 1:
+archivinitialisierenCASE 2:archivanmelden;IF archivfehlerTHEN LEAVE
+integaarchivFI ;archivlistenCASE 3:archivbeschreibenCASE 4:
+archivueberschreibenEND SELECT .archivinitialisieren:standardmeldung(meldg0,
+" ");disablestop;clear(/dos);IF iserrorTHEN abbruchnachfehler(2);LEAVE
+integaarchivFI ;enablestop;loeschemeldung;return(2).archivlisten:
+standardmeldung(meldg0," ");disablestop;g:=sequentialfile(output,listenname);
+thes:=ALL /dos;IF iserrorTHEN abbruchnachfehler(1);LEAVE integaarchivFI ;
+thesaurusaufbereiten;enablestop;zeigedatei(listenname,"vr").
+thesaurusaufbereiten:t:=" ";i:=0;REP get(thes,t,i);putline(g,t)UNTIL t=""PER
+.archivbeschreiben:standardmeldung(meldg0," ");disablestop;IF exists(
+dateiname,/dos)THEN IF iserrorTHEN abbruchnachfehler(2);LEAVE integaarchiv
+ELSE abfragedateiueberschreibenFI ELSE save(dateiname,/dos);IF iserrorTHEN
+abbruchnachfehler(2);LEAVE integaarchivFI ;enablestop;commanddialogue(TRUE );
+loeschemeldung;return(2);FI .abfragedateiueberschreiben:infeld(1);
+standardmeldung(meldg19,dateiname+"#");standardnproc.archivueberschreiben:
+standardmeldung(meldg0," ");disablestop;commanddialogue(FALSE );erase(
+dateiname,/dos);IF iserrorTHEN abbruchnachfehler(3);LEAVE integaarchivFI ;
+save(dateiname,/dos);IF iserrorTHEN abbruchnachfehler(3);LEAVE integaarchiv
+FI ;enablestop;commanddialogue(TRUE );loeschemeldung;return(3).END PROC
+integaarchiv;PROC integaloescheundreturn(BOOL CONST b):IF bTHEN forget(
+listenname,quiet);FI ;loeschemeldung;return(2)END PROC integaloescheundreturn
+;PROC abbruchnachfehler(INT CONST schritte):standardmeldung(meldg13,
+"Fehler: "+errormessage+" !#");clearerror;infeld(fldakthj);return(schritte);
+release(/dos);commanddialogue(TRUE );enablestopEND PROC abbruchnachfehler;
+PROC integaabfrage(INT CONST wahl):SELECT wahlOF CASE 1:archivanmelden;IF
+archivfehlerTHEN LEAVE integaabfrageFI ;standardmeldung(meldg16,"")CASE 2:
+archivanmelden;IF archivfehlerTHEN LEAVE integaabfrageFI ;standardmeldung(
+meldg17,"")CASE 3:fragevorbereiten;standardmeldung(meldg18,dateiname+"#"+text
+(t2,8)+"#")END SELECT ;infeld(1);standardnproc.fragevorbereiten:dateiname:=
+standardmaskenfeld(fldinteganame)+".DP";IF standardmaskenfeld(fldinteganame)=
+""THEN fehlermeldungnamefalschELIF falschercode(dateiname)THEN
+fehlermeldungnamefalschFI ;IF exists(dateiname)THEN beginlist;REP
+getlistentry(t1,t2);UNTIL t1=dateinameCOR t1=""PER ;ELSE return(1);infeld(
+fldinteganame);standardmeldung(meldg20,dateiname+"#");LEAVE integaabfrageFI .
+fehlermeldungnamefalsch:return(1);infeld(fldinteganame);standardmeldung(
+meldg2,subtext(dateiname,i,i)+"#"+dateiname+"#");LEAVE integaabfrage.END
+PROC integaabfrage;PROC integadatenzeigen:standardmeldung(meldg0," ");
+dateiname:=standardmaskenfeld(fldinteganame)+".DP";IF standardmaskenfeld(
+fldinteganame)=""THEN fehlermeldungnamefalschELIF falschercode(dateiname)
+THEN fehlermeldungnamefalschFI ;IF exists(dateiname)THEN zeigedatenELSE
+return(1);infeld(fldinteganame);standardmeldung(meldg20,dateiname+"#");LEAVE
+integadatenzeigenFI .fehlermeldungnamefalsch:return(1);infeld(fldinteganame);
+standardmeldung(meldg2,subtext(dateiname,i,i)+"#"+dateiname+"#");LEAVE
+integadatenzeigen.zeigedaten:zeigedatei(dateiname,"vr").END PROC
+integadatenzeigen;PROC integadatendrucken:dateiname:=standardmaskenfeld(
+fldinteganame)+".DP";IF exists(dateiname)THEN standardmeldung(meldg23,"");
+print(dateiname)ELSE infeld(fldinteganame);standardmeldung(meldg20,dateiname+
+"#");FI ;return(1).END PROC integadatendrucken;PROC integaentfernen:infeld(
+fldinteganame);dateiname:=standardmaskenfeld(fldinteganame)+".DP";forget(
+dateiname,quiet);infeld(fldakthj);return(2);END PROC integaentfernen;PROC
+integastdvproc:standardstartproc(eingmaske);standardmaskenfeld("SCHULIS",
+fldinteganame);standardfelderausgeben;infeld(fldakthj);standardnprocEND PROC
+integastdvproc;PROC integaaufbereitenoderabfrage:beginlist;REP getlistentry(
+t1,t2);IF pos(t1,dateikennung)>0THEN standardmeldung(meldg18,t1+"#"+text(t2,8
+)+"#");infeld(fldinteganame);standardnproc;ruecksprung:=2;LEAVE
+integaaufbereitenoderabfrageFI ;UNTIL t1=""PER ;ruecksprung:=1;
+schulisintegatransferEND PROC integaaufbereitenoderabfrage;PROC
+schulisintegatransfer:falschesugrupgefunden:=FALSE ;standardmeldung(meldg0,
+" ");forget(t1,quiet);init;pruefeeingmaske;stelledateinamefest;
+stellehalbjahrfest;pruefobintegabezda;holestundenplandaten;melde("A");
+schreibeschulname;stellezeitvarfest;berechneschulverfuegbarkeit;melde("BA");
+schreibefragenkatalog;melde("BB");schreibegewichtungen;melde("BC");
+schreibezeitraster1;melde("BD");schreibezeitraster2;pruefdateigroesse;
+holeallezeitwuensche;melde("C");schreibelehrerdaten;pruefdateigroesse;melde(
+"D und F");schreibeklassen;pruefdateigroesse;melde("G");schreiberaumgruppen;
+pruefdateigroesse;melde("H");schreibeuvdaten;pruefdateigroesse;melde("I");
+schreibeschulverfgbkt;pruefdateigroesse;melde("J");schreibelehrerverfgbkt;
+pruefdateigroesse;melde("K");schreiberaumverfgbkt;pruefdateigroesse;melde("L"
+);schreibeklassenverfgbkt;pruefdateigroesse;melde("M");schreibefachverfgbkt;
+pruefdateigroesse;melde("N");schreibevorbelegungen;pruefdateigroesse;
+gibfertigmeldungaus.pruefdateigroesse:IF zz>eumelgrenzemaxzeilenTHEN
+standardmeldung(meldg14,"");return(ruecksprung);LEAVE schulisintegatransfer
+FI .init:dszeitw:=nilspace;dslverf:=nilspace;dskverf:=nilspace;z:=
+sequentialfile(modify,dszeitw);l:=sequentialfile(modify,dslverf);k:=
+sequentialfile(modify,dskverf);insertrecord(z);insertrecord(l);insertrecord(k
+);zz:=0.pruefeeingmaske:IF standardmaskenfeld(fldfix1)<>""CAND
+standardmaskenfeld(fldfix2)<>""THEN return(ruecksprung);standardmeldung(
+meldg22,"");infeld(fldfix1);LEAVE schulisintegatransferFI ;dateiname:=
+standardmaskenfeld(fldinteganame)+".DP";IF standardmaskenfeld(fldinteganame)=
+""THEN i:=0;fehlermeldungnamefalschELIF falschercode(dateiname)THEN
+fehlermeldungnamefalschFI .fehlermeldungnamefalsch:return(ruecksprung);infeld
+(fldinteganame);standardmeldung(meldg2,subtext(dateiname,i,i)+"#"+dateiname+
+"#");LEAVE schulisintegatransfer.pruefobintegabezda:sgridaten:="";letztepar:=
+"";inittupel(dnraktschuelergruppen);datenfehler:=FALSE ;dbleer(
+dnraktschuelergruppen);IF fehlerTHEN fehlerkeineschuelergruppenFI ;
+statleseschleife(dnraktschuelergruppen,schj,schhj,dnraktschuelergruppen+1,
+dnraktschuelergruppen+2,PROC sgridatenholen);IF datenfehlerTHEN
+fehlermeldungintegaELSE sgridatenCAT trennerFI .fehlerkeineschuelergruppen:
+return(ruecksprung);standardmeldung(meldg7,"");LEAVE schulisintegatransfer.
+fehlermeldungintega:return(ruecksprung);standardmeldung(meldg4,"");LEAVE
+schulisintegatransfer.stelledateinamefest:f:=sequentialfile(output,dateiname)
+.stellehalbjahrfest:holeschuldaten;aktschhj:=holedatum(schuldaten,trenner+
+schulhj+trenner);aktschj:=holedatum(schuldaten,trenner+schulj+trenner);IF
+aktschhj="1"THEN geplschhj:="2";geplschj:=aktschjELSE geplschhj:="1";geplschj
+:=subtext(aktschj,3);jahrende:=int(geplschj)+1;geplschjCAT subtext("0"+text(
+jahrende),LENGTH ("0"+text(jahrende))-1)FI ;IF standardmaskenfeld(fldakthj)<>
+""THEN schj:=aktschj;schhj:=aktschhjELSE schj:=geplschj;schhj:=geplschhjFI .
+holeschuldaten:dbleer(dnrschluessel);IF fehlerTHEN fehlerkeineschuldatenFI ;
+schuldaten:=trenner;inittupel(dnrschluessel);statleseschleife(dnrschluessel,
+schulkenndaten,"",dnrschluessel+1,dnrschluessel+2,PROC schulkennung).
+fehlerkeineschuldaten:return(ruecksprung);standardmeldung(meldg8,"");LEAVE
+schulisintegatransfer.holestundenplandaten:standardmeldung(
+meldungstdplauswvorber,"");stundenplanhalbjahrsetzen(schhj,schj);
+stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN
+meldungausgeben(fstat);return(ruecksprung);LEAVE schulisintegatransferFI .
+stellezeitvarfest:holezeitdaten;IF zeitdaten=trennerTHEN LEAVE
+stellezeitvarfestELSE stelleunttagefestFI .holezeitdaten:zeitdaten:=trenner;
+dbleer(dnrzeitraster);IF fehlerTHEN fehlerkeinezeitdatenFI ;inittupel(
+dnrzeitraster);statleseschleife(dnrzeitraster,schj,schhj,dnrzeitraster+1,
+dnrzeitraster+2,PROC zeitrasterdaten).fehlerkeinezeitdaten:return(ruecksprung
+);standardmeldung(meldg9,"");LEAVE schulisintegatransfer.stelleunttagefest:
+INT VAR akttagv:=0,akttagn:=0;vm:=0;nm:=0;ut:=0;FOR iFROM 1UPTO unttageREP vs
+:=0;ns:=0;nulltestd:=(i-1)*stdenprotag;IF pos(zeitdaten,trenner+text(
+nulltestd+1)+trenner)>0THEN utINCR 1;stellestdenfestELSE LEAVE
+stelleunttagefestFI PER .stellestdenfest:FOR jFROM 1UPTO stdenprotagREP IF
+pos(zeitdaten,trenner+text(nulltestd+j)+trenner)>0THEN holedrittesdatum(
+zeitdaten,trenner+text(nulltestd+j)+trenner);zaehlevunstden;IF akttagv<>i
+CAND t1="v"THEN vmINCR 1;akttagv:=iFI ;IF akttagn<>iCAND t1="n"THEN nmINCR 1;
+akttagn:=iFI ;ELSE LEAVE stellestdenfestFI ;PER ;IF maxvs<vsTHEN maxvs:=vsFI
+;IF maxns<nsTHEN maxns:=nsFI .zaehlevunstden:IF t1="v"THEN vsINCR 1ELIF t1=
+"n"THEN nsINCR 1FI .schreibeschulname:zeile:="";zeileCAT holedatum(schuldaten
+,trenner+schulname+trenner);zeileCAT " "+holedatum(schuldaten,trenner+
+schulort+trenner);zeileCAT " "+holedatum(schuldaten,trenner+schulstr+trenner
+);zeile:=text(zeile,70);zeileCAT "A ";zeileCAT zeilenende;putlinezz(f,zeile);
+zeile:=schhj+". Hj.";zeileCAT " "+text(schj,2)+"/"+subtext(schj,3);zeile:=
+text(zeile,70);zeileCAT "A ";zeileCAT zeilenende;putlinezz(f,zeile).
+berechneschulverfuegbarkeit:schulverfuegbarkeit:="";FOR iFROM 1UPTO unttage
+REP FOR jFROM 1UPTO stdenprotagREP IF pos(zeitdaten,trenner+text((i-1)*
+stdenprotag+j)+trenner)>0THEN holedrittesdatum(zeitdaten,trenner+text((i-1)*
+stdenprotag+j)+trenner);IF t1="x"THEN schulverfuegbarkeitCAT "1"ELSE
+schulverfuegbarkeitCAT " "FI ELSE schulverfuegbarkeitCAT " "FI PER PER ;
+schulverfuegbarkeit:=text(schulverfuegbarkeit,maxstden).schreibeschulverfgbkt
+:putlinezz(f," "+schulverfuegbarkeit+"I"+zeilenende).schreibefragenkatalog
+:vs:=maxvs;ns:=maxns;zeile:="";zeileCAT "FRAGEN ";zeileCAT " N N N 0";IF vs
+<10THEN zeileCAT " "+text(vs)ELSE zeileCAT text(vs)FI ;zeileCAT
+" 0 312 3100 0 ";zeileCAT text(ut);zeileCAT
+"253146 BA";zeileCAT zeilenende;putlinezz(f,zeile
+).schreibegewichtungen:zeile:="";zeileCAT "GEWICHT ";zeileCAT
+" 2 2 2 2 2 2 2 2 2 2 2 0";zeileCAT " ";
+zeileCAT "BB";zeileCAT zeilenende;putlinezz(f,zeile).schreibezeitraster1:IF
+zeitdaten=""THEN LEAVE schreibezeitraster1FI ;zeile:="";zeileCAT "RASTERR";
+zeileCAT " 1 1";IF vs<10THEN zeileCAT " "+text(vs)ELSE zeileCAT text(vs)FI ;
+zeileCAT " ";zeile
+CAT "BC";zeileCAT zeilenende;putlinezz(f,zeile);zeile:="";zeileCAT "RASTERR";
+zeileCAT " 2 1";IF vs<11THEN zeileCAT " "+text(vs-1)ELSE zeileCAT text(vs-1)
+FI ;zeileCAT " ";
+zeileCAT "BC";zeileCAT zeilenende;putlinezz(f,zeile);zeile:="";zeileCAT
+"RASTERB";IF vs<6THEN zeileCAT " 2 1 3 ";ELIF vs<8THEN zeile
+CAT " 2 1 3 5 ";ELIF vs<10THEN zeileCAT
+" 2 1 3 5 7 ";ELIF vs<12THEN zeileCAT " 2 1 3 5 7 9 "
+;ELSE zeileCAT " 2 1 3 5 7 911 ";FI ;zeileCAT
+" ";zeileCAT "BC";zeileCAT zeilenende;
+putlinezz(f,zeile).schreibezeitraster2:IF zeitdaten=""THEN LEAVE
+schreibezeitraster2FI ;FOR iFROM 1UPTO 12REP hole2daten(zeitdaten,trenner+
+text(i)+trenner);IF t1<>""COR t1<>" "THEN IF i<10THEN
+zeitrasterzeilenerstellen(" "+text(i),t1,t2);ELSE zeitrasterzeilenerstellen(
+text(i),t1,t2);FI ;FI ;PER .holeallezeitwuensche:dbleer(dnrzeitwuensche);IF
+NOT fehlerTHEN inittupel(dnrzeitwuensche);statleseschleife(dnrzeitwuensche,
+schj,schhj,dnrzeitwuensche+1,dnrzeitwuensche+2,PROC zeitw)FI .
+schreibelehrerdaten:inittupel(dnrlehrer);fehler:=FALSE ;dbleer(dnrlehrer);IF
+fehlerTHEN fehlerkeinelehrerFI ;fehler:=FALSE ;statleseschleife(dnrlehrer,"",
+"",dnrlehrer+1,dnrlehrer+2,PROC lehrer);IF fehlerTHEN return(ruecksprung);
+standardmeldung(meldg3,"");LEAVE schulisintegatransferFI .fehlerkeinelehrer:
+return(ruecksprung);standardmeldung(meldg10,"");LEAVE schulisintegatransfer.
+schreibeklassen:sgrdaten:="";klgrdaten:="";inittupel(dnraktschuelergruppen);
+statleseschleife(dnraktschuelergruppen,schj,schhj,dnraktschuelergruppen+1,
+dnraktschuelergruppen+2,PROC sgrdatenholen);dbleer(dnrklassengruppen);IF NOT
+fehlerTHEN inittupel(dnrklassengruppen);statleseschleife(dnrklassengruppen,""
+,"",dnrklassengruppen+1,dnrklassengruppen+2,PROC klgrdatenholen);FI ;IF
+sgrdaten<>""THEN schreibeklstELSE fehlermeldungaktschgrfehlenFI ;IF klgrdaten
+<>""THEN schreibeklgrFI .fehlermeldungaktschgrfehlen:return(ruecksprung);
+standardmeldung(meldg5,"");LEAVE schulisintegatransfer.schreibeklst:p:=1;
+WHILE pos(sgrdaten,trenner,p+1)>0REP spput(subtext(sgrdaten,p+1,pos(sgrdaten,
+trenner,p+1)-1));p:=pos(sgrdaten,trenner,p+1)PER ;spput(subtext(sgrdaten,p+1)
+).schreibeklgr:p:=1;WHILE pos(klgrdaten,trenner,p+1)>0REP spiput(subtext(
+klgrdaten,p+1,pos(klgrdaten,trenner,p+1)-1));IF falschesugrupgefundenTHEN
+fehlerunbekanntesugrupgefundenFI ;putlinezz(f,text(t1,64)+" "+text(ut)+text(
+vm)+text(nm)+" F"+zeilenende);p:=pos(klgrdaten,trenner,p+1)PER ;spiput(
+subtext(klgrdaten,p+1));IF falschesugrupgefundenTHEN
+fehlerunbekanntesugrupgefundenFI ;putlinezz(f,text(t1,64)+" "+text(ut)+text(
+vm)+text(nm)+" F"+zeilenende).schreiberaumgruppen:schreibergrkarten;
+schreiberkarten.schreibergrkarten:dbleer(dnrraumgruppen);IF NOT fehlerTHEN
+zeile:="";inittupel(dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",
+dnrraumgruppen+1,dnrraumgruppen+2,PROC raumgr)FI .schreiberkarten:mindeinraum
+:=FALSE ;fehler:=FALSE ;zeile:="";inittupel(dnrschluessel);statleseschleife(
+dnrschluessel,raumkenndaten,"",dnrschluessel+1,dnrschluessel+2,PROC raum);IF
+NOT mindeinraumTHEN return(ruecksprung);standardmeldung(meldg6,"");LEAVE
+schulisintegatransferELIF zeile<>""THEN erstellrestraeumeFI .
+erstellrestraeume:putlinezz(f,"REST"+text(zeile,64)+" G"+zeilenende);IF
+length(zeile)>64THEN zeile:=subtext(zeile,65);h:=length(zeile)DIV 64;FOR i
+FROM 1UPTO hREP schreibekartePER ;IF length(zeile)MOD 64>0THEN
+schreibrestkarteFI FI .schreibekarte:putlinezz(f," "+subtext(zeile,(i-1)*
+64+1,i*64)+" G"+zeilenende).schreibrestkarte:putlinezz(f," "+text(subtext
+(zeile,h*64+1),64)+" G"+zeilenende).schreibeuvdaten:dbleer(
+dnrlehrveranstaltungen);IF fehlerTHEN fehlerkeineuvFI ;inittupel(
+dnrlehrveranstaltungen);statleseschleife(dnrlehrveranstaltungen,schj,schhj,
+dnrlehrveranstaltungen+1,dnrlehrveranstaltungen+2,PROC lvschreiben);IF
+falschesugrupgefundenTHEN fehlerunbekanntesugrupgefundenFI .fehlerkeineuv:
+return(ruecksprung);standardmeldung(meldg11,"");LEAVE schulisintegatransfer.
+fehlerunbekanntesugrupgefunden:return(ruecksprung);standardmeldung(meldg21,
+par+ausgparam+letztepar+ausgparam);LEAVE schulisintegatransfer.
+schreibelehrerverfgbkt:toline(l,1);col(l,1);WHILE NOT eof(l)REP readrecord(l,
+record);putlinezz(f,record);down(l)PER .schreiberaumverfgbkt:dbleer(
+dnrzeitwuensche);IF NOT fehlerTHEN schreibverfkarten(trenner+kennraum+trenner
+)FI .schreibeklassenverfgbkt:toline(k,1);col(k,1);WHILE NOT eof(k)REP
+readrecord(k,record);putlinezz(f,record);down(k)PER .schreibefachverfgbkt:
+dbleer(dnrzeitwuensche);IF NOT fehlerTHEN schreibverfkarten(trenner+kennfach+
+trenner)FI .schreibevorbelegungen:IF standardmaskenfeld(fldfix2)<>""THEN
+dbleer(dnrzeitwuensche);IF NOT fehlerTHEN schreibverfkarten(trenner+kennkoppl
++trenner)FI ELIF standardmaskenfeld(fldfix1)<>""THEN kartenart:="N";
+uebertragdatendesstundenplansFI .gibfertigmeldungaus:forget(dszeitw);forget(
+dslverf);forget(dskverf);standardmeldung(meldg15,dateiname+"#"+text(zz)+"#");
+return(ruecksprung).END PROC schulisintegatransfer;PROC
+uebertragdatendesstundenplans:TEXT VAR kopplungenderzeit:="",aktkopplung;INT
+VAR aktpos;bearbkopplungen:="";FOR iFROM erstestdeUPTO maxstdenREP
+standardmeldung(meldungbearbwird,integatagstd(i)+ausgparam);kopplungenderzeit
+:=datenderzeit(i,kennkoppl);aktpos:=1;WHILE aktpos<length(kopplungenderzeit)
+REP aktkopplung:=subtext(kopplungenderzeit,aktpos,aktpos+7);IF
+nichtbearbeitet(aktkopplung)THEN schreibvorbelegung(aktkopplung,allezeitenvon
+(kennkoppl,aktkopplung))FI ;aktposINCR 8PER ;pruefdateigroessePER .
+pruefdateigroesse:IF zz>eumelgrenzemaxzeilenTHEN standardmeldung(meldg14,"");
+return(ruecksprung);LEAVE uebertragdatendesstundenplansFI .END PROC
+uebertragdatendesstundenplans;PROC schreibvorbelegung(TEXT CONST kopplung,
+allezeiten):INT VAR suchpos:=1,aktpos:=0;TEXT VAR kartenanfang:=text(kopplung
+,8),karte:="";kartenanfangCAT " ";WHILE pos(allezeiten,"1",suchpos)<>0REP
+aktpos:=pos(allezeiten,"1",suchpos);IF aktpos>0THEN karteCAT integatagstd(
+aktpos);suchpos:=aktpos+1FI ;IF length(karte)=40THEN schreibkarte;
+kartenanfang:=" ";karte:=""FI PER ;IF length(karte)<>40THEN
+schreibkarteFI .schreibkarte:objektverf:=kartenanfang+text(karte,61)+
+kartenart+zeilenende;putlinezz(f,objektverf).END PROC schreibvorbelegung;
+BOOL PROC nichtbearbeitet(TEXT CONST kopplung):INT VAR aktpos,suchab:=1;
+WHILE pos(bearbkopplungen,kopplung,suchab)<>0REP aktpos:=pos(bearbkopplungen,
+kopplung,suchab);IF aktposMOD 8=1THEN LEAVE nichtbearbeitetWITH FALSE ELSE
+suchab:=aktpos+1FI ;PER ;bearbkopplungenCAT kopplung;TRUE END PROC
+nichtbearbeitet;PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN
+standardmeldung(meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(
+meldungkeinstdplan,"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen
+,"");ELIF fstat=5THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6
+THEN standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(
+meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");
+FI END PROC meldungausgeben;PROC schreibverfkarten(TEXT CONST kennung):TEXT
+VAR objekt:="";toline(z,1);col(z,1);REP col(z,col(z)+1);downety(z,kennung)
+UNTIL eof(z)COR (col(z)=142)PER ;IF kennung=trenner+kennraum+trennerTHEN
+kartenart:="K"ELIF kennung=trenner+kennfach+trennerTHEN kartenart:="M"ELSE
+kartenart:="N"FI ;IF NOT eof(z)CAND (kartenart<>"N")THEN REP readrecord(z,
+record);IF pos(record,kennung)<>142THEN LEAVE schreibverfkartenFI ;bestwunsch
+:=subtext(record,10,141);objekt:=holedatum(record,kennung);
+uebertragbestwunschinverfkarte(objektverf);objektverf:=text(objekt,4)+
+objektverf+kartenart+zeilenende;putlinezz(f,objektverf);down(z)PER ELIF NOT
+eof(z)THEN REP readrecord(z,record);IF pos(record,kennung)<>142THEN LEAVE
+schreibverfkartenFI ;bestwunsch:=subtext(record,10,141);IF bestwunsch<>
+leererbestwunschTHEN objekt:=holedatum(record,kennung);
+uebertragbestwunschinvorbelegung(objekt)FI ;down(z)PER FI .END PROC
+schreibverfkarten;PROC uebertragbestwunschinvorbelegung(TEXT CONST kopplung):
+INT VAR suchpos:=1,aktpos:=0;TEXT VAR kartenanfang:=text(kopplung,8),karte:=
+"";kartenanfangCAT " ";WHILE pos(bestwunsch,"+3",suchpos)<>0REP aktpos:=pos(
+bestwunsch,"+3",suchpos);IF aktpos>0THEN karteCAT integatagstd((aktpos+1)DIV
+2);suchpos:=aktpos+1FI ;IF length(karte)=40THEN schreibkarte;kartenanfang:=
+" ";karte:=""FI PER ;IF karte<>""THEN schreibkarteFI .schreibkarte:
+objektverf:=kartenanfang+text(karte,61)+kartenart+zeilenende;putlinezz(f,
+objektverf).END PROC uebertragbestwunschinvorbelegung;TEXT PROC integatagstd(
+INT CONST intzeit):TEXT VAR std:="";INT VAR stdnr:=intzeit;std:=text((stdnr-1
+)MOD 12+1,2);SELECT (stdnr-1)DIV 12OF CASE 0:"MO"+stdCASE 1:"DI"+stdCASE 2:
+"MI"+stdCASE 3:"DO"+stdCASE 4:"FR"+stdCASE 5:"SA"+stdOTHERWISE " "END
+SELECT END PROC integatagstd;BOOL PROC falschercode(TEXT CONST t):INT VAR
+zeichencode;FOR iFROM 1UPTO LENGTH t-3REP zeichencode:=code(tSUB i);IF NOT ((
+zeichencode>=48AND zeichencode<=57)OR (zeichencode>=65AND zeichencode<=90)OR
+(zeichencode>=97AND zeichencode<=122))THEN LEAVE falschercodeWITH TRUE FI
+PER ;FALSE END PROC falschercode;PROC zeitrasterzeilenerstellen(TEXT CONST
+std,zeitanfang,zeitende):zeile:="";zeileCAT "ZEIT ";zeileCAT std;zeileCAT
+subtext(zeitanfang,LENGTH zeitanfang-3)+subtext(zeitende,LENGTH zeitende-3);
+zeileCAT " ";zeile:=text(
+zeile,70);zeileCAT "BB";zeileCAT zeilenende;putlinezz(f,zeile)END PROC
+zeitrasterzeilenerstellen;PROC schulkennung(BOOL VAR b):IF wert(dnrschluessel
++1)>schulkenndatenCOR dbstatus<>0THEN b:=TRUE ELSE schuldatenCAT wert(
+dnrschluessel+2)+trenner;schuldatenCAT wert(dnrschluessel+3)+trenner;FI END
+PROC schulkennung;PROC zeitrasterdaten(BOOL VAR b):IF wert(dnrzeitraster+1)<>
+schjCOR wert(dnrzeitraster+2)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE
+zeitdatenCAT wert(dnrzeitraster+3)+trenner;zeitdatenCAT " "+wert(
+dnrzeitraster+5)+trenner;zeitdatenCAT " "+wert(dnrzeitraster+6)+trenner;
+zeitdatenCAT wert(dnrzeitraster+4)+trenner;FI END PROC zeitrasterdaten;PROC
+raumgr(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE schreibkarte;schreibraeume
+FI .schreibkarte:t2:=wert(dnrraumgruppen+2);putlinezz(f,text(wert(
+dnrraumgruppen+1),4)+text(t2,maxstden)+"G"+zeilenende).schreibraeume:FOR i
+FROM 1UPTO (LENGTH t2)DIV 4REP rgrdatenCAT compress(subtext(t2,i*4-3,i*4))+
+trennerPER .END PROC raumgr;PROC raum(BOOL VAR b):IF wert(dnrschluessel+1)>
+raumkenndatenCOR dbstatus<>0THEN b:=TRUE ELSE mindeinraum:=TRUE ;IF pos(
+rgrdaten,trenner+wert(dnrschluessel+2)+trenner)<1THEN schreibrestraeumeFI ;
+FI .schreibrestraeume:zeileCAT text(wert(dnrschluessel+2),4).END PROC raum;
+PROC lvschreiben(BOOL VAR b):IF wert(dnrlehrveranstaltungen+1)<>schjCOR wert(
+dnrlehrveranstaltungen+2)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE schreibkarte
+FI .schreibkarte:zeile:="";zeileCAT text(wert(dnrlehrveranstaltungen+5),8)+
+text(wert(dnrlehrveranstaltungen+4),2)+" "+text(wert(dnrlehrveranstaltungen+
+6),4)+subtext(" "+wert(dnrlehrveranstaltungen+7),length(" "+wert(
+dnrlehrveranstaltungen+7))-1)+" ";FOR iFROM 8UPTO 11REP IF wert(
+dnrlehrveranstaltungen+i)=""CAND i=8THEN pruefrestlklgrELIF wert(
+dnrlehrveranstaltungen+i)=""CAND i<>8THEN zeileCAT " "ELIF
+istschuelergruppeTHEN zeileCAT text(substituiere,4)ELIF istklassengruppeTHEN
+zeileCAT text(wert(dnrlehrveranstaltungen+i),4)ELIF istklassenstufeTHEN zeile
+CAT text(formatjgst(wert(dnrlehrveranstaltungen+i)),4)ELSE
+falschesugrupgefunden:=TRUE ;par:=formatjgst(wert(dnrlehrveranstaltungen+3))+
+wert(dnrlehrveranstaltungen+4);letztepar:=wert(dnrlehrveranstaltungen+i);b:=
+TRUE ;LEAVE lvschreibenFI PER ;zeileCAT " "+text(wert(
+dnrlehrveranstaltungen+12),4)+text(wert(dnrlehrveranstaltungen+13),4)+
+" "+"H"+zeilenende;putlinezz(f,zeile).pruefrestlklgr:IF wert(
+dnrlehrveranstaltungen+9)=""CAND wert(dnrlehrveranstaltungen+10)=""CAND wert(
+dnrlehrveranstaltungen+11)=""THEN zeileCAT text(formatjgst(wert(
+dnrlehrveranstaltungen+3)),4)ELSE zeileCAT " "FI .istschuelergruppe:pos(
+sgridaten,trenner+formatjgst(wert(dnrlehrveranstaltungen+3))+text(wert(
+dnrlehrveranstaltungen+i),4)+trenner)>0.istklassengruppe:pos(klgr,trenner+
+wert(dnrlehrveranstaltungen+i)+trenner)>0.istklassenstufe:intwert(
+dnrlehrveranstaltungen+i)>4CAND intwert(dnrlehrveranstaltungen+i)<14.
+substituiere:subst(text(jgst+wert(dnrlehrveranstaltungen+i),6)).jgst:
+formatjgst(wert(dnrlehrveranstaltungen+3)).END PROC lvschreiben;TEXT PROC
+holedatum(TEXT VAR variable,TEXT CONST suchwort):IF pos(variable,suchwort)>0
+THEN subtext(variable,nachsuchwort,endezeichen)ELSE ""FI .nachsuchwort:pos(
+variable,suchwort)+LENGTH suchwort.endezeichen:pos(variable,trenner,
+nachsuchwort)-1.END PROC holedatum;PROC hole2daten(TEXT VAR variable,TEXT
+CONST suchwort):IF pos(variable,suchwort)>0THEN t1:=subtext(variable,
+nachsuchwort,endezeichen);t2:=subtext(variable,endezeichen+2,
+naechstesendezeichen-1);ELSE t1:="";t2:=""FI .nachsuchwort:pos(variable,
+suchwort)+LENGTH suchwort.endezeichen:pos(variable,trenner,nachsuchwort)-1.
+naechstesendezeichen:pos(variable,trenner,endezeichen+2).END PROC hole2daten;
+PROC holedrittesdatum(TEXT VAR variable,TEXT CONST suchwort):INT VAR p:=pos(
+variable,suchwort),i;FOR iFROM 1UPTO 3REP p:=pos(variable,trenner,p+1);PER ;
+t1:=subtext(variable,p+1,pos(variable,trenner,p+1)-1)END PROC
+holedrittesdatum;PROC spput(TEXT CONST t):TEXT VAR hohlstd:="0 ",
+weiterekarten:="",zeile:="",alleschgr,aktschgr;BOOL VAR jgstausgabe:=TRUE ;
+INT VAR anzschgrprozeile:=0;zeile:=text(t,4);alleschgr:=subtext(t,5);
+weiterekarten:="";FOR iFROM 1UPTO (length(t)-4)DIV 4REP objut:=ut;objvm:=vm;
+objnm:=nm;aktschgr:=subtext(alleschgr,(i-1)*4+1,i*4);suchezeitwunsch;
+schreibeintragPER ;IF anzschgrprozeileMOD 15<>0THEN eintragausgebenFI ;
+schreibschgrmitunbestwunsch.suchezeitwunsch:suchezeitw(trenner+kennsugrup+
+trenner+aktschgr+trenner);IF unbestwunsch<>""CAND unbestwunsch<>
+leererunbestwunschTHEN uebertragunbestwunschinkarte;IF objut<>utCOR objvm<>vm
+COR objnm<>nmTHEN weiterekartenCAT " ";weiterekartenCAT aktschgr;
+weiterekartenCAT hohlstd;weiterekartenCAT text(objut);weiterekartenCAT text(
+objvm);weiterekartenCAT text(objnm)FI FI ;IF bestwunsch<>""CAND bestwunsch<>
+leererbestwunschTHEN uebertragbestwunschinverfkarte(objektverf);objektverf:=
+aktschgr+objektverf+"L"+zeilenende;putds(k,objektverf)FI .schreibeintrag:IF
+keinwunschgefundenTHEN zeileCAT aktschgr;anzschgrprozeileINCR 1;IF
+anzschgrprozeile=15THEN putlinezz(f,zeile+hohlstd+text(ut)+text(vm)+text(nm)+
+" D"+zeilenende);anzschgrprozeile:=0;jgstausgabe:=FALSE ;zeile:=" "FI FI .
+keinwunschgefunden:bestwunsch=""COR (objut=utCAND objvm=vmCAND objnm=nm).
+eintragausgeben:putlinezz(f,text(zeile,64)+hohlstd+text(ut)+text(vm)+text(nm)
++" D"+zeilenende);jgstausgabe:=FALSE .schreibschgrmitunbestwunsch:IF
+weiterekarten<>""THEN FOR jFROM 1UPTO length(weiterekarten)DIV 13REP aktschgr
+:=subtext(weiterekarten,(j-1)*13+1,j*13);IF jgstausgabeTHEN putlinezz(f,zeile
++subtext(aktschgr,5,8)+
+" "+subtext(aktschgr,9
+)+" D"+zeilenende);jgstausgabe:=FALSE ELSE putlinezz(f,text(aktschgr,8)+
+" "+subtext(aktschgr,9
+)+" D"+zeilenende)FI ;PER ;FI .END PROC spput;PROC spiput(TEXT CONST t):t1:=
+text(t,4);FOR iFROM 1UPTO ((LENGTH t)-4)DIV 6REP IF subtext(t,i*6+1,i*6+4)=
+" "THEN t1CAT subtext(t,i*6-1,i*6+2)ELSE t1CAT subst(subtext(t,i*6-1,i*6+4
+));IF falschesugrupgefundenTHEN par:=text(t,4);LEAVE spiputFI ;FI ;PER .END
+PROC spiput;TEXT PROC subst(TEXT CONST t):IF pos(sgridaten,trenner+t+trenner)
+>0THEN subtext(sgridaten,pos(sgridaten,trenner+t+trenner)+8,pos(sgridaten,
+trenner+t+trenner)+11)ELSE letztepar:=t;falschesugrupgefunden:=TRUE ;""FI
+END PROC subst;PROC lehrer(BOOL VAR b):lehrerdaten:="";objut:=ut;objvm:=vm;
+objnm:=nm;IF dbstatus<>0THEN b:=TRUE ELSE lehrerdatenCAT text(wert(dnrlehrer+
+2),20);par:=wert(dnrlehrer+1);lehrerdatenCAT text(wert(dnrlehrer+1),4)+
+" ";lehrerdatenCAT subtext(" "+wert(dnrlehrer+7),length(" "+wert(
+dnrlehrer+7))-1);suchezeitw(trenner+kennpar+trenner+par+trenner);IF
+bestwunsch<>""CAND bestwunsch<>leererbestwunschTHEN schreibverfuegkarteFI ;
+schreiblehrerkarteFI .schreibverfuegkarte:uebertragbestwunschinverfkarte(
+objektverf);objektverf:=text(par,4)+objektverf+"J"+zeilenende;putds(l,
+objektverf).schreiblehrerkarte:IF unbestwunsch<>""CAND unbestwunsch<>
+leererunbestwunschTHEN uebertragunbestwunschinkarteFI ;putlinezz(f,
+lehrerdaten+" "+text(objut)+text(objvm)+text(objnm)+
+" C"+zeilenende).END PROC lehrer;PROC suchezeitw(
+TEXT CONST kennung):toline(z,1);col(z,1);downety(z,kennung);IF eof(z)THEN
+bestwunsch:="";unbestwunsch:=""ELSE readrecord(z,record);unbestwunsch:=text(
+record,9);bestwunsch:=subtext(record,10,141)FI ;END PROC suchezeitw;PROC
+zeitw(BOOL VAR b):IF wert(dnrzeitwuensche+1)<>schjCOR wert(dnrzeitwuensche+2)
+<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE zeitwuensche:="";zeitwuenscheCAT wert
+(dnrzeitwuensche+6);zeitwuenscheCAT wert(dnrzeitwuensche+5);zeitwuenscheCAT
+trenner;zeitwuenscheCAT wert(dnrzeitwuensche+3);zeitwuenscheCAT trenner;IF
+wert(dnrzeitwuensche+3)=kennsugrupTHEN zeitwuenscheCAT holedatum(sgridaten,
+trenner+text(wert(dnrzeitwuensche+4),6)+trenner);ELSE zeitwuenscheCAT wert(
+dnrzeitwuensche+4);FI ;zeitwuenscheCAT trenner;putds(z,zeitwuensche)FI END
+PROC zeitw;PROC uebertragbestwunschinverfkarte(TEXT VAR verf):INT VAR suchpos
+:=1,aktpos:=0;verf:=schulverfuegbarkeit;WHILE pos(bestwunsch,"-3",suchpos)<>0
+REP aktpos:=pos(bestwunsch,"-3",suchpos);IF aktpos>0THEN replace(verf,(aktpos
++1)DIV 2,"1");suchpos:=aktpos+1FI PER END PROC uebertragbestwunschinverfkarte
+;PROC uebertragunbestwunschinkarte:INT VAR tageswunsch:=0;IF (unbestwunsch
+SUB 3)="3"THEN tageswunsch:=int(unbestwunschSUB 1);objutDECR tageswunsch;
+objvmDECR tageswunsch;objnmDECR tageswunsch-1FI ;IF (unbestwunschSUB 6)="3"
+THEN objvmDECR int(unbestwunschSUB 4)FI ;IF (unbestwunschSUB 9)="3"THEN objnm
+DECR int(unbestwunschSUB 7)FI ;END PROC uebertragunbestwunschinkarte;PROC
+sgrdatenholen(BOOL VAR b):IF wert(dnraktschuelergruppen+1)<>schjCOR wert(
+dnraktschuelergruppen+2)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE IF wert(
+dnraktschuelergruppen+3)<>letzteparTHEN zeile:=formatjgst(wert(
+dnraktschuelergruppen+3));sgrdatenCAT trenner+text(zeile,4);letztepar:=wert(
+dnraktschuelergruppen+3)FI ;sgrdatenCAT text(wert(dnraktschuelergruppen+7),4)
+FI ;END PROC sgrdatenholen;PROC klgrdatenholen(BOOL VAR b):IF dbstatus<>0
+THEN b:=TRUE ELSE klgrdatenCAT trenner+text(wert(dnrklassengruppen+1),4);klgr
+CAT wert(dnrklassengruppen+1)+trenner;klgrdatenCAT wert(dnrklassengruppen+2)
+FI END PROC klgrdatenholen;PROC sgridatenholen(BOOL VAR b):IF wert(
+dnraktschuelergruppen+1)<>schjCOR wert(dnraktschuelergruppen+2)<>schhjCOR
+dbstatus<>0THEN b:=TRUE ELSE sgridatenCAT trenner+jgstaufber(wert(
+dnraktschuelergruppen+3));sgridatenCAT text(wert(dnraktschuelergruppen+4),4)+
+trenner;sgridatenCAT text(wert(dnraktschuelergruppen+7),4);IF wert(
+dnraktschuelergruppen+7)=""THEN datenfehler:=TRUE FI FI ;END PROC
+sgridatenholen;PROC putds(FILE VAR file,TEXT CONST t):writerecord(file,t);
+down(file);insertrecord(file)END PROC putds;PROC dbleer(INT CONST dateinr):
+fehler:=FALSE ;IF records(dateinr)<1.0THEN fehler:=TRUE FI END PROC dbleer;
+PROC melde(TEXT CONST meldungsergaenzung):standardmeldung(meldg1,
+meldungsergaenzung+"#")END PROC melde;PROC putlinezz(FILE VAR f,TEXT CONST t)
+:putline(f,t);IF zz>2999THEN abbruchwegen4000zeilen:=TRUE ELSE zzINCR 1FI
+END PROC putlinezz;TEXT PROC formatjgst(TEXT CONST jgst):IF int(jgst)=0THEN
+LEAVE formatjgstWITH "00"ELIF int(jgst)<10THEN LEAVE formatjgstWITH
+jgstaufber(jgst)FI ;jgstEND PROC formatjgst;END PACKET
+datenfuerintegaaufbereiten;
+
diff --git a/app/schulis/2.2.1/src/4.daten für schulis aufbereiten b/app/schulis/2.2.1/src/4.daten für schulis aufbereiten
new file mode 100644
index 0000000..89c96ea
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.daten für schulis aufbereiten
@@ -0,0 +1,184 @@
+PACKET integastundenplanuebernehmenDEFINES integastundenplanarchivlisten,
+integastundenplanstdvproc,integastundenplanuebernehmen,
+integastundenplandatenschreiben:LET integadatei="SCHULIS.PUN",filemodus=
+"file ibm",dos="DOS",anzstdenprotag=12,schulname="Schulname",schulort=
+"Schulort",schuljahr="Schuljahr",halbjahr="Schulhalbjahr",maskeeingang=
+"ms stdplan von intega uebernehmen",listenname=
+"Liste der Dateien auf der Diskette:",protokollname=
+"Stundenplan von INTEGA übernehmen",leerzeile=" ",ueberschrift=
+" Fehlerprotokoll zur Übernahme des Stundenplans ",unterstrich=
+" ------------------------------------------------------------------",
+fehler1kopf="1. Kopplung existiert in schulis nicht für:",fehler2kopf=
+"2. Lehrveranstaltung kann nicht identifiziert werden für:",fehler3kopf1=
+"3. Kopplung und Paraphe passen in schulis auf Lehrveranstaltung, aber",
+fehler3kopf2=" Fach stimmt nicht überein für:",fehler4kopf=
+"4. In INTEGA wurden Zeiten verplant, die in schulis gesperrt sind für:",
+fehlerspalten1=
+" Kopplung Fach Lehrer Klassengruppen Zeit Raum",
+fehlerspalten2=" schulis INTEGA ",fehlerspalten3=
+" Lehrver. Kopplung Fach Lehrer Klassengruppen Zeit Raum",
+spalten3fueller=" ",
+keinfehler=" Kein Fehler dieser Art aufgetreten!",tab1=
+" +--------+--------+----+------+-----------------------+-----+----+",tab2=
+" +--------+----+------+-----------------------+-----+----+",
+feldakthj=2,laengelvkopp=8,laengeindex=4,laengezeitraum=6,beginnkopp=1,
+endekopp=8,beginnfach=9,endefach=12,beginnlvfach=3,endelvfach=4,beginnpar=13,
+endepar=16,beginnklgr=19,endeklgr=42,beginnbelegg=43,fachergaenzung=" ",
+leereraumangabe=" ",leerelv=" ",pseudoraum="PSEU",ausgabeparam="#",
+frageraum="????",kennungkopplung="K",kennungparaphe="P",kennungzulzeit="ZZ",
+kennungmo="Mo ",kennungdi="Di ",kennungmi="Mi ",kennungdo="Do ",kennungfr=
+"Fr ",kennungsa="Sa ",meldungserverfehler=376,meldungkeinstdplan=366,
+meldungkeinesugruppen=334,meldungzuvielesugruppen=356,meldungkeinelv=326,
+meldungzuvielelv=358,meldungstdplanveraltet=377,meldungbasisinkon=378,
+meldwarten=69,melddatenaufber=357,melduebern=374,meldueberschr=372,
+meldaenderungenunvollstaendig=364,meldprotokollaufbereiten=373,
+meldstandderuebern=375,meldarchivfehler=343;FILE VAR g,protokoll,
+integastdplandatei;THESAURUS VAR thes;TEXT VAR gewsj,gewhj,t,integaeintrag,lv
+,leistekoppexistnicht,leistelvnichtident,leistelvfalschesfach,leisteunzzeit,
+integakopplung,integafach,integaparaphe,integabelegg,zeitraumeintrag,
+zeitderlv,raumderlv,stdplaneintrag;INT VAR fstat,i,posanf,posende,
+intzeitderlv;BOOL VAR archivfehler:=FALSE ,transferfehler:=FALSE ,eintragok;
+PROC archivanmelden(INT CONST ruecksprung):archivfehler:=FALSE ;
+commanddialogue(FALSE );disablestop;reserve(filemodus,/dos);IF iserrorTHEN
+archivfehler:=TRUE ;abbruchnachfehler(ruecksprung);LEAVE archivanmeldenFI ;
+enablestopEND PROC archivanmelden;PROC integastundenplanarchivlisten:
+standardmeldung(meldwarten," ");archivanmelden(1);IF archivfehlerTHEN LEAVE
+integastundenplanarchivlistenFI ;disablestop;forget(listenname,quiet);thes:=
+ALL (/dos);IF iserrorTHEN archivfehler:=TRUE ;abbruchnachfehler(1);ELSE
+release(/dos);thesaurusaufbereiten;enablestop;zeigedatei(listenname,"vr")FI .
+thesaurusaufbereiten:g:=sequentialfile(output,listenname);t:=" ";i:=0;REP get
+(thes,t,i);putline(g,t)UNTIL t=""PER .END PROC integastundenplanarchivlisten;
+PROC integastundenplanstdvproc:standardstartproc(maskeeingang);IF
+transferfehlerTHEN standardmeldung(meldaenderungenunvollstaendig,"")FI ;
+transferfehler:=FALSE ;infeld(2);standardnprocEND PROC
+integastundenplanstdvproc;PROC integastundenplanuebernehmen:standardmeldung(
+meldwarten,"");gewsj:=schulkenndatum(schuljahr);gewhj:=schulkenndatum(
+halbjahr);IF standardmaskenfeld(feldakthj)=""THEN geplanteshjundsjberechnen(
+gewhj,gewsj)FI ;stundenplanhalbjahrsetzen(gewhj,gewsj);standardmeldung(
+melddatenaufber,"");stundenplanbasisundstundenplanholen(fstat);IF fstat<>0
+CAND fstat<>8THEN standardmeldung(melduebern,"")ELSE standardmeldung(
+meldueberschr,"")FI ;standardnproc.END PROC integastundenplanuebernehmen;
+PROC integastundenplandatenschreiben:TEXT VAR alteerstellungszeit:="";IF
+fstat<>0CAND fstat<>8THEN standardmeldung(meldwarten,"");
+stundenplanbasisundstundenplanerstellen(fstat);IF fstat<>0THEN return(2);
+meldungausgeben(fstat);LEAVE integastundenplandatenschreibenELSE
+stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN
+return(2);meldungausgeben(fstat);LEAVE integastundenplandatenschreibenFI ;FI
+;FI ;alteerstellungszeit:=erstellungszeitderdatenraeume;stundenplanloeschen(
+fstat);stundenplanerstellen(alteerstellungszeit,fstat);datenvonarchivholen(2)
+;IF archivfehlerTHEN LEAVE integastundenplandatenschreibenFI ;
+dateninstdplanschreibenEND PROC integastundenplandatenschreiben;PROC
+datenvonarchivholen(INT CONST ruecksprung):standardmeldung(meldwarten," ");
+archivanmelden(ruecksprung);IF archivfehlerTHEN LEAVE datenvonarchivholenFI ;
+disablestop;fetch(integadatei,/dos);IF iserrorTHEN archivfehler:=TRUE ;
+abbruchnachfehler(ruecksprung);ELSE release(/dos);enablestop;commanddialogue(
+TRUE );FI END PROC datenvonarchivholen;PROC dateninstdplanschreiben:INT VAR
+zeilennr:=0;TEXT VAR anzzeilen;BOOL VAR lvnichtvermerkt:=TRUE ;
+fehlerprotvorbereiten;datenraumankoppeln;WHILE NOT eof(integastdplandatei)
+REP zeilennrINCR 1;getline(integastdplandatei,integaeintrag);standardmeldung(
+meldstandderuebern,anzzeilen+ausgabeparam+text(zeilennr)+ausgabeparam);
+stundenplaneintraegevornehmenPER ;IF leisteunzzeit<>""COR
+leistekoppexistnicht<>""COR leistelvnichtident<>""COR leistelvfalschesfach<>
+""THEN sicherstdplan;standardmeldung(meldprotokollaufbereiten," ");forget(
+protokollname,quiet);protokoll:=sequentialfile(output,protokollname);
+fuelleprotokoll;infeld(1);standardfelderausgeben;infeld(2);zeigedatei(
+protokollname,"vr")ELSE sicherstdplan;infeld(1);standardfelderausgeben;infeld
+(2);return(2)FI .sicherstdplan:stundenplanreorganisierenundsichern(fstat);IF
+fstat<>0THEN transferfehler:=TRUE FI .fehlerprotvorbereiten:leisteunzzeit:=""
+;leistekoppexistnicht:="";leistelvnichtident:="";leistelvfalschesfach:="".
+datenraumankoppeln:integastdplandatei:=sequentialfile(input,integadatei);
+anzzeilen:=text(lines(integastdplandatei)).stundenplaneintraegevornehmen:
+integakopplung:=text(integaeintrag,laengelvkopp);integafach:=subtext(
+integaeintrag,beginnfach,endefach);integaparaphe:=subtext(integaeintrag,
+beginnpar,endepar);integabelegg:=subtext(integaeintrag,beginnbelegg);t:=
+allelvmit(kennungkopplung,integakopplung);IF t=""THEN leistekoppexistnicht
+CAT text(zeilennr,laengeindex)ELSE IF lvmitgleicherparaphe(t)THEN pruefefach
+ELSE leistelvnichtidentCAT text(zeilennr,laengeindex)FI FI .pruefefach:IF
+integafach<>subtext(lv,beginnlvfach,endelvfach)+fachergaenzungTHEN
+leistelvfalschesfachCAT text(zeilennr,laengeindex);leistelvfalschesfachCAT
+text(lv,laengelvkopp)ELSE tragstundeneinundpruefezeitenFI .
+tragstundeneinundpruefezeiten:stdplaneintrag:=lv+integakopplung+integaparaphe
+;posanf:=1;posende:=length(integabelegg);lvnichtvermerkt:=TRUE ;WHILE posanf<
+posendeREP zeitraumeintrag:=subtext(integabelegg,posanf,posanf+laengezeitraum
+-1);zeitderlv:=text(zeitraumeintrag,2);intzeitderlv:=int(zeitderlv);raumderlv
+:=compress(subtext(zeitraumeintrag,3));IF raumderlv=""COR raumderlv=
+pseudoraumCOR raumderlv=frageraumTHEN raumderlv:=leereraumangabeFI ;IF NOT
+bezeichnungzulaessig(kennungzulzeit,zeitderlv)THEN IF lvnichtvermerktTHEN
+leisteunzzeitCAT text(zeilennr,laengeindex);leisteunzzeitCAT text(lv,
+laengelvkopp);lvnichtvermerkt:=FALSE FI ELSE planeintragvornehmen(
+intzeitderlv,lv,raumderlv,eintragok);IF NOT eintragokTHEN transferfehler:=
+TRUE FI ;FI ;posanfINCR laengezeitraumPER .fuelleprotokoll:putline(protokoll,
+schulkenndatum(schulname));putline(protokoll,text(schulkenndatum(schulort),65
+)+date);putline(protokoll,leerzeile);putline(protokoll,ueberschrift+gewhj+
+". "+text(gewsj,2)+"/"+subtext(gewsj,3)+" von INTEGA");putline(protokoll,
+unterstrich);putline(protokoll,leerzeile);putline(protokoll,fehler1kopf);
+putline(protokoll,leerzeile);IF leistekoppexistnicht=""THEN putline(protokoll
+,keinfehler)ELSE putline(protokoll,fehlerspalten1);putline(protokoll,tab2);
+gibfalschekopplungenausFI ;putline(protokoll,leerzeile);putline(protokoll,
+fehler2kopf);putline(protokoll,leerzeile);IF leistelvnichtident=""THEN
+putline(protokoll,keinfehler)ELSE putline(protokoll,fehlerspalten1);putline(
+protokoll,tab2);gibfalschelvausFI ;putline(protokoll,leerzeile);putline(
+protokoll,fehler3kopf1);putline(protokoll,fehler3kopf2);putline(protokoll,
+leerzeile);IF leistelvnichtident=""THEN putline(protokoll,keinfehler)ELSE
+putline(protokoll,fehlerspalten2);putline(protokoll,fehlerspalten3);putline(
+protokoll,tab1);gibnichtidentlvausFI ;putline(protokoll,leerzeile);putline(
+protokoll,fehler4kopf);putline(protokoll,leerzeile);IF leisteunzzeit=""THEN
+putline(protokoll,keinfehler)ELSE putline(protokoll,fehlerspalten3);putline(
+protokoll,tab1);gibfalschezeitenausFI .gibfalschezeitenaus:gibleisteaus(
+leisteunzzeit,FALSE ,FALSE ).gibfalschekopplungenaus:gibleisteaus(
+leistekoppexistnicht,TRUE ,TRUE ).gibfalschelvaus:gibleisteaus(
+leistelvnichtident,TRUE ,TRUE ).gibnichtidentlvaus:gibleisteaus(
+leistelvfalschesfach,FALSE ,TRUE ).END PROC dateninstdplanschreiben;PROC
+gibleisteaus(TEXT CONST leiste,BOOL CONST ohnelv,allezeiten):INT VAR
+posanfleiste,posendeleiste,posanflv,posanfbelegg,posendebelegg;BOOL VAR
+erstezeilederlv:=TRUE ;posanfleiste:=1;posendeleiste:=length(leiste);modify(
+integastdplandatei);WHILE posanfleiste<posendeleisteREP col(
+integastdplandatei,1);toline(integastdplandatei,int(subtext(leiste,
+posanfleiste,posanfleiste+laengeindex-1)));readrecord(integastdplandatei,
+integaeintrag);integabelegg:=subtext(integaeintrag,beginnbelegg);IF ohnelv
+THEN lv:=leerelv;posanfleisteINCR laengeindexELSE posanflv:=posanfleiste+
+laengeindex;lv:=subtext(leiste,posanflv,posanflv+laengelvkopp-1);posanfleiste
+INCR laengeindex+laengelvkoppFI ;posanfbelegg:=1;posendebelegg:=length(
+integabelegg);zeitraumeintrag:=subtext(integabelegg,posanfbelegg,posanfbelegg
++laengezeitraum-1);zeitderlv:=text(zeitraumeintrag,2);intzeitderlv:=int(
+zeitderlv);raumderlv:=subtext(zeitraumeintrag,3);IF raumderlv=""COR raumderlv
+=pseudoraumCOR raumderlv=frageraumTHEN raumderlv:=leereraumangabeFI ;IF
+allezeitenTHEN putline(protokoll," "+lv+" "+subtext(integaeintrag,
+beginnkopp,endekopp)+" "+subtext(integaeintrag,beginnfach,endefach)+" "+
+subtext(integaeintrag,beginnpar,endepar)+" "+subtext(integaeintrag,
+beginnklgr,endeklgr)+gibtagstd(intzeitderlv)+" "+raumderlv);posanfbeleggINCR
+laengezeitraum;WHILE posanfbelegg<posendebeleggREP zeitraumeintrag:=subtext(
+integabelegg,posanfbelegg,posanfbelegg+laengezeitraum-1);zeitderlv:=text(
+zeitraumeintrag,2);intzeitderlv:=int(zeitderlv);putline(protokoll,
+spalten3fueller+gibtagstd(intzeitderlv)+" "+raumderlv);posanfbeleggINCR
+laengezeitraumPER ELSE erstezeilederlv:=TRUE ;WHILE posanfbelegg<
+posendebeleggREP zeitraumeintrag:=subtext(integabelegg,posanfbelegg,
+posanfbelegg+laengezeitraum-1);zeitderlv:=text(zeitraumeintrag,2);IF NOT
+bezeichnungzulaessig(kennungzulzeit,zeitderlv)THEN intzeitderlv:=int(
+zeitderlv);IF erstezeilederlvTHEN putline(protokoll," "+lv+" "+subtext(
+integaeintrag,beginnkopp,endekopp)+" "+subtext(integaeintrag,beginnfach,
+endefach)+" "+subtext(integaeintrag,beginnpar,endepar)+" "+subtext(
+integaeintrag,beginnklgr,endeklgr)+gibtagstd(intzeitderlv)+" "+raumderlv);
+erstezeilederlv:=FALSE ELSE putline(protokoll,spalten3fueller+gibtagstd(
+intzeitderlv)+" "+raumderlv);FI ;FI ;posanfbeleggINCR laengezeitraum;PER FI
+PER .END PROC gibleisteaus;BOOL PROC lvmitgleicherparaphe(TEXT CONST
+allelvderkopp):posanf:=1;posende:=length(allelvderkopp);WHILE posanf<posende
+REP lv:=subtext(allelvderkopp,posanf,posanf+laengelvkopp-1);IF datenzurlv(
+kennungparaphe,lv)=integaparapheTHEN LEAVE lvmitgleicherparapheWITH TRUE FI ;
+posanfINCR laengelvkoppPER ;FALSE .END PROC lvmitgleicherparaphe;PROC
+abbruchnachfehler(INT CONST ruecksprung):return(ruecksprung);standardmeldung(
+meldarchivfehler,"Fehler: "+errormessage+" !#");clearerror;release(/dos);
+commanddialogue(TRUE );enablestopEND PROC abbruchnachfehler;PROC
+meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung(
+meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(meldungkeinstdplan,
+"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5
+THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN
+standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(
+meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");
+FI END PROC meldungausgeben;TEXT PROC gibtagstd(INT CONST index):INT VAR
+intstd:=(index-1)MOD anzstdenprotag+1;TEXT VAR std:="0";IF intstd<10THEN std
+CAT text(intstd)ELSE std:=text(intstd)FI ;SELECT (index-1)DIV anzstdenprotag
+OF CASE 0:kennungmo+stdCASE 1:kennungdi+stdCASE 2:kennungmi+stdCASE 3:
+kennungdo+stdCASE 4:kennungfr+stdCASE 5:kennungsa+stdOTHERWISE stdEND SELECT
+END PROC gibtagstd;END PACKET integastundenplanuebernehmen;
+
diff --git a/app/schulis/2.2.1/src/4.einhaltung zeitwuensche pruefen b/app/schulis/2.2.1/src/4.einhaltung zeitwuensche pruefen
new file mode 100644
index 0000000..6e953d3
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.einhaltung zeitwuensche pruefen
@@ -0,0 +1,195 @@
+PACKET einhaltungzeitwuenschepruefenDEFINES zeitwuenschepruefenausfuehren:
+LET dateiname="Liste zur Einhaltung der Zeitwünsche",trenner="198",
+letztestunde=66,fldlehrer=2,fldsugrup=3,fldraeume=4,fldfaecher=5,
+fldkopplungen=6,fldakthalbj=7,meldungwarten=69,meldungbearbwird=352,#
+meldungkeinelehrer=337,meldungkeineraeume=365,#meldungkeinefaecher=68,
+meldungkeinzeitraster=336,meldungkeinezeitwuensche=389,meldungserverfehler=
+376,meldungkeinstdplan=366,meldungkeinesugruppen=334,meldungzuvielesugruppen=
+356,meldungkeinelv=326,meldungzuvielelv=358,meldungbasisinkon=378,
+meldungstdplauswvorber=384,posanzut=1,posgewut=3,posanzvm=4,posgewvm=6,
+posanznm=7,posgewnm=9,ausgfreipos=2,ausganzpos=11,ausggewpos=18,ausgnerfpos=
+27,ausgabeparam="#",ausgnerf="*",minus="-",plus="+",leerzeile=" ",kennzlehrer
+="P",kennzsugrup="S",kennzraeume="R",kennzfaecher="F",kennzlv="L",kennzkoppl=
+"K",moeintrag="Mo ",dieintrag="Di ",mieintrag="Mi ",doeintrag="Do ",
+freintrag="Fr ",saeintrag="Sa ",anhangl="Lehrer ",anhangs="Schülergruppen "
+,anhangr="Räume ",anhangf="Fächer ",anhangk="Kopplungen ",ueberschrift=
+"Liste zur Einhaltung der Zeitwünsche für ",unterstrich=
+"-------------------------------------------------",leererunbestwunsch=
+" ",kennungvorm="v",kennungnachm="n",schuljahr="Schuljahr",
+schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort",
+anzgewichte=6,anzunterrichtstage=6,anzvormittage=6,anznachmittage=5,
+anzsamstagstunden=6,anzunterrichtsstunden=12;FILE VAR datei;INT VAR hjkennneu
+:=0,hjkennalt:=-1;INT VAR i,j,fstat,fall,anztage,anzvorm,anznachm;TEXT VAR
+schj,schhj,kenn,plan:="",anhang,faecherkatalog:=trenner;TEXT VAR bestwzeile,
+unbestwtage,unbestwvorm,unbestwnachm,bestwurzeile:=
+" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"+
+" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+
+" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+
+"_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ";TEXT VAR
+moobjeintrag,diobjeintrag,miobjeintrag,doobjeintrag,frobjeintrag,saobjeintrag
+;BOOL VAR keinezeitwuensche:=TRUE ;ROW 4ROW anzgewichteINT VAR
+anzwuenschegesamt;ROW 4ROW anzgewichteINT VAR anznerfwuensche;PROC
+zeitwuenschepruefenausfuehren:keinezeitwuensche:=TRUE ;kenn:="";
+standardmeldung(meldungwarten,"");pruefeeingangsmaske;pruefehalbjahr;
+zeitwuenschevorhanden;IF halbjahrveraendertTHEN hjkennalt:=hjkennneu;
+holestundenplan;erstellezeitrasterFI ;erstelleliste;IF keinezeitwuenscheTHEN
+fehlerkeinezeitwuenscheELSE zeigedatei(dateiname,"vr")FI .halbjahrveraendert:
+hjkennneu<>hjkennalt.pruefeeingangsmaske:standardpruefe(5,2,6,0,"",fstat);IF
+fstat<>0THEN infeld(fstat);return(1);LEAVE zeitwuenschepruefenausfuehrenELIF
+standardmaskenfeld(fldlehrer)<>""THEN fall:=fldlehrer;anhang:=anhangl;kenn:=
+kennzlehrerELIF standardmaskenfeld(fldsugrup)<>""THEN fall:=fldsugrup;anhang
+:=anhangs;kenn:=kennzsugrupELIF standardmaskenfeld(fldraeume)<>""THEN fall:=
+fldraeume;anhang:=anhangr;kenn:=kennzraeume;pruefefaecherELIF
+standardmaskenfeld(fldfaecher)<>""THEN fall:=fldfaecher;anhang:=anhangf;kenn
+:=kennzfaecher;IF faecherkatalog=trennerTHEN holallefaecherFI ;ELIF
+standardmaskenfeld(fldkopplungen)<>""THEN fall:=fldkopplungen;anhang:=anhangk
+;kenn:=kennzkopplFI .holallefaecher:inittupel(dnrfaecher);statleseschleife(
+dnrfaecher,"","",fnrffach,fnrffach,PROC faecher).pruefefaecher:IF records(
+dnrfaecher)=0.0THEN fehlerkeinefaecherFI .pruefehalbjahr:schj:=schulkenndatum
+(schuljahr);schhj:=schulkenndatum(schulhalbjahr);IF standardmaskenfeld(
+fldakthalbj)=""THEN geplanteshjundsjberechnen(schhj,schj);hjkennneu:=1ELSE
+hjkennneu:=0FI .holestundenplan:standardmeldung(meldungstdplauswvorber,"");
+stundenplanhalbjahrsetzen(schhj,schj);stundenplanbasisundstundenplanholen(
+fstat);IF fstat<>0CAND fstat<>8THEN meldungausgeben(fstat);return(1);LEAVE
+zeitwuenschepruefenausfuehrenFI .erstellezeitraster:plan:="";IF records(
+dnrzeitraster)=0.0THEN fehlerzeitrasternichtvollstdELSE inittupel(
+dnrzeitraster);statleseschleife(dnrzeitraster,schj,schhj,fnrzrsj,fnrzrhj,
+PROC zeitrasterdaten)FI ;IF length(plan)<letztestundeTHEN
+fehlerzeitrasternichtvollstdFI .zeitwuenschevorhanden:IF records(
+dnrzeitwuensche)=0.0THEN fehlerkeinezeitwuenscheFI .
+fehlerzeitrasternichtvollstd:standardmeldung(meldungkeinzeitraster,"");return
+(1);LEAVE zeitwuenschepruefenausfuehren.fehlerkeinefaecher:standardmeldung(
+meldungkeinefaecher,"");return(1);LEAVE zeitwuenschepruefenausfuehren.
+fehlerkeinezeitwuensche:standardmeldung(meldungkeinezeitwuensche,"");return(1
+);LEAVE zeitwuenschepruefenausfuehren.END PROC zeitwuenschepruefenausfuehren;
+PROC erstelleliste:bereitedateiauf;initialisiererow;inittupel(dnrzeitwuensche
+);putwert(fnrzwbezug,kenn);statleseschleife(dnrzeitwuensche,schj,schhj,
+fnrzwsj,fnrzwhj,PROC zeitwuenschelisten);bereitestatistikauf.bereitedateiauf:
+forget(dateiname,quiet);datei:=sequentialfile(output,dateiname);putline(datei
+,schulkenndatum(schulname));putline(datei,text(schulkenndatum(schulort),65)+
+date);putline(datei,leerzeile);putline(datei,ueberschrift+anhang+schhj+". "+
+text(schj,2)+"/"+subtext(schj,3));putline(datei,unterstrich+length(anhang)*
+"-");putline(datei,leerzeile).initialisiererow:FOR iFROM 1UPTO 4REP FOR j
+FROM 1UPTO anzgewichteREP anzwuenschegesamt(i)(j):=0;anznerfwuensche(i)(j):=0
+PER ;PER .bereitestatistikauf:putline(datei,"#page#");putline(datei,
+"Endstatistik:");putline(datei,leerzeile);putline(datei,leerzeile);
+gibwerteaus(" Stunden ",1);gibwerteaus(" ganze Tage ",2);gibwerteaus(
+" Vormittage ",3);gibwerteaus(" Nachmittage",4).END PROC erstelleliste;
+PROC gibwerteaus(TEXT CONST objekt,INT CONST row):putline(datei,
+"Anzahl Gewichte Summe ");putline(datei,
+objekt+" -3 -2 -1 +1 +2 +3 ");putline(datei,
+"--------------+-----+-----+-----+-----+-----+-----+------");putline(datei,
+"gesamt "+werte(row,TRUE ));putline(datei,"erfüllt "+erfuelltwerte
+(row));putline(datei,"nicht erfüllt"+werte(row,FALSE ));putline(datei,
+leerzeile);putline(datei,leerzeile).END PROC gibwerteaus;TEXT PROC werte(INT
+CONST row,BOOL CONST allewerte):TEXT VAR ausgabe:="";INT VAR summe:=0,eintrag
+;IF allewerteTHEN FOR iFROM 1UPTO anzgewichteREP eintrag:=anzwuenschegesamt(
+row)(i);summeINCR eintrag;ausgabeCAT text(eintrag,6)PER ELSE FOR iFROM 1UPTO
+anzgewichteREP eintrag:=anznerfwuensche(row)(i);summeINCR eintrag;ausgabeCAT
+text(eintrag,6)PER FI ;ausgabeCAT text(summe,6);ausgabeEND PROC werte;TEXT
+PROC erfuelltwerte(INT CONST row):TEXT VAR ausgabe:="";INT VAR summe:=0,
+gesamt,nerf,erf;FOR iFROM 1UPTO anzgewichteREP gesamt:=anzwuenschegesamt(row)
+(i);nerf:=anznerfwuensche(row)(i);erf:=gesamt-nerf;summeINCR erf;ausgabeCAT
+text(erf,6)PER ;ausgabeCAT text(summe,6);ausgabeEND PROC erfuelltwerte;PROC
+zeitwuenschelisten(BOOL VAR b):IF wert(fnrzwsj)<>schjCOR wert(fnrzwhj)<>schhj
+COR wert(fnrzwbezug)<>kennCOR dbstatus<>0THEN b:=TRUE ELSE IF
+keinezeitwuenscheTHEN keinezeitwuensche:=FALSE FI ;bereiteobjektauf(wert(
+fnrzwbezugsobjekt))FI END PROC zeitwuenschelisten;PROC bereiteobjektauf(TEXT
+CONST objekt):TEXT VAR bestwunsch,unbestwunsch;INT VAR suchpos:=1,freietage,
+freievorm,freienachm,wnerf,wanz;TEXT VAR wunsch:="";standardmeldung(
+meldungbearbwird,objekt+ausgabeparam);IF kenn=kennzfaecherTHEN IF pos(
+faecherkatalog,trenner+objekt+trenner)=0THEN fehlereintragELSE listeneintrag
+FI ELIF bezeichnungzulaessig(kenn,objekt)THEN listeneintragELSE fehlereintrag
+FI .fehlereintrag:putline(datei,objekt+": (ungültige Bezeichnung)");putline
+(datei,leerzeile).listeneintrag:moobjeintrag:=moeintrag;diobjeintrag:=
+dieintrag;miobjeintrag:=mieintrag;doobjeintrag:=doeintrag;frobjeintrag:=
+freintrag;saobjeintrag:=saeintrag;uebertragwuensche;putline(datei,objekt+":")
+;putline(datei,leerzeile);putline(datei,"Wünsche zu festen Zeiten:");putline(
+datei,"(nicht erfüllte sind mit * markiert)");putline(datei,
+" 1 2 3 4 5 6 7 8 9 10 11 12");putline(datei,
+moobjeintrag+text(bestwzeile,48));putline(datei,diobjeintrag+subtext(
+bestwzeile,49,96));putline(datei,miobjeintrag+subtext(bestwzeile,97,144));
+putline(datei,doobjeintrag+subtext(bestwzeile,145,192));putline(datei,
+frobjeintrag+subtext(bestwzeile,193,240));putline(datei,saobjeintrag+subtext(
+bestwzeile,241));putline(datei,leerzeile);putline(datei,
+" im Plan allgemeine Wünsche:");putline(datei,
+" frei Anzahl/Gewicht nicht erfüllt");putline(datei,
+"ganze Tage "+unbestwtage);putline(datei,"zusätzl. Vorm. "+unbestwvorm)
+;putline(datei,"zusätzl. Nachm. "+unbestwnachm);putline(datei,leerzeile);
+putline(datei,leerzeile).uebertragwuensche:bestwunsch:=wert(
+fnrzwbestimmtewuensche);unbestwunsch:=wert(fnrzwunbestimmtewuensche);
+bestwzeile:=bestwurzeile;unbestwtage:=" _ _ _ _ ";
+unbestwvorm:=" _ _ _ _ ";unbestwnachm:=
+" _ _ _ _ ";tragbestwuenscheein;tragunbestwuenscheein.
+tragbestwuenscheein:suchpos:=1;WHILE suchpos<>0REP suchpos:=pos(bestwunsch,
+minus,suchpos);IF suchpos<>0THEN wunsch:=subtext(bestwunsch,suchpos,suchpos+1
+);zaehlebestwunsch(1,wunsch,TRUE );IF unterricht(objekt,suchposDIV 2+1)THEN
+wunschCAT ausgnerf;zaehlebestwunsch(1,wunsch,FALSE )FI ;replace(bestwzeile,
+suchpos*2-1,wunsch);suchposINCR 1FI ;PER ;suchpos:=1;WHILE suchpos<>0REP
+suchpos:=pos(bestwunsch,plus,suchpos);IF suchpos<>0THEN wunsch:=subtext(
+bestwunsch,suchpos,suchpos+1);zaehlebestwunsch(1,wunsch,TRUE );IF NOT (
+unterricht(objekt,suchposDIV 2+1))THEN wunschCAT ausgnerf;zaehlebestwunsch(1,
+wunsch,FALSE )FI ;replace(bestwzeile,suchpos*2-1,wunsch);suchposINCR 1FI ;
+PER .tragunbestwuenscheein:anztage:=0;anzvorm:=0;anznachm:=0;
+ermittleunbestwdaten(objekt);freietage:=anzunterrichtstage-anztage;freievorm
+:=anzvormittage-freietage-anzvorm;freienachm:=anznachmittage-freietage-
+anznachm;replace(unbestwtage,ausgfreipos,text(freietage));replace(unbestwvorm
+,ausgfreipos,text(freievorm));replace(unbestwnachm,ausgfreipos,text(
+freienachm));IF unbestwunsch<>leererunbestwunschTHEN wunsch:=unbestwunschSUB
+posanzut;IF wunsch<>" "THEN replace(unbestwtage,ausganzpos,wunsch)FI ;wanz:=
+int(wunsch);IF freietage<wanzTHEN wnerf:=wanz-freietage;replace(unbestwtage,
+ausgnerfpos,text(wnerf))ELSE wnerf:=0FI ;wunsch:=unbestwunschSUB posgewut;IF
+wunsch<>" "THEN replace(unbestwtage,ausggewpos,wunsch)FI ;zaehleunbestwunsch(
+2,wanz,wnerf,wunsch);wunsch:=unbestwunschSUB posanzvm;IF wunsch<>" "THEN
+replace(unbestwvorm,ausganzpos,wunsch)FI ;wanz:=int(wunsch);IF freievorm<wanz
+THEN wnerf:=wanz-freievorm;replace(unbestwvorm,ausgnerfpos,text(wnerf))ELSE
+wnerf:=0FI ;wunsch:=unbestwunschSUB posgewvm;IF wunsch<>" "THEN replace(
+unbestwvorm,ausggewpos,wunsch)FI ;zaehleunbestwunsch(3,wanz,wnerf,wunsch);
+wunsch:=unbestwunschSUB posanznm;IF wunsch<>" "THEN replace(unbestwnachm,
+ausganzpos,wunsch)FI ;wanz:=int(wunsch);IF freienachm<wanzTHEN wnerf:=wanz-
+freienachm;replace(unbestwnachm,ausgnerfpos,text(wnerf))ELSE wnerf:=0FI ;
+wunsch:=unbestwunschSUB posgewnm;IF wunsch<>" "THEN replace(unbestwnachm,
+ausggewpos,wunsch)FI ;zaehleunbestwunsch(4,wanz,wnerf,wunsch);FI .END PROC
+bereiteobjektauf;PROC ermittleunbestwdaten(TEXT CONST objekt):BOOL VAR
+tagnichtgezaehlt:=TRUE ;INT VAR incr:=0,anz,zeitstd;anz:=
+anzunterrichtsstunden;FOR iFROM 1UPTO anzunterrichtstage-1REP
+tagnichtgezaehlt:=TRUE ;suchevormunterricht;suchenachmunterricht;incrINCR
+anzunterrichtsstundenPER ;anz:=anzsamstagstunden;tagnichtgezaehlt:=TRUE ;
+suchevormunterricht;suchenachmunterricht.suchevormunterricht:FOR jFROM 1UPTO
+anzREP zeitstd:=incr+j;IF (planSUB zeitstd)=kennungvormTHEN IF unterricht(
+objekt,incr+j)THEN anzvormINCR 1;anztageINCR 1;tagnichtgezaehlt:=FALSE ;
+LEAVE suchevormunterrichtFI ;ELIF (planSUB zeitstd)=kennungnachmTHEN LEAVE
+suchevormunterrichtFI ;PER .suchenachmunterricht:FOR jFROM anzDOWNTO 1REP
+zeitstd:=incr+j;IF (planSUB zeitstd)=kennungnachmTHEN IF unterricht(objekt,
+incr+j)THEN anznachmINCR 1;IF tagnichtgezaehltTHEN anztageINCR 1;LEAVE
+suchenachmunterrichtFI ;FI ;ELIF (planSUB zeitstd)=kennungvormTHEN LEAVE
+suchenachmunterrichtFI ;PER .END PROC ermittleunbestwdaten;PROC
+zaehlebestwunsch(INT CONST rowindex,TEXT CONST wunsch,BOOL CONST erfuellt):
+INT VAR gew;IF wunsch="-3"THEN gew:=1ELIF wunsch="-2"THEN gew:=2ELIF wunsch=
+"-1"THEN gew:=3ELIF wunsch="+1"THEN gew:=4ELIF wunsch="+2"THEN gew:=5ELIF
+wunsch="+3"THEN gew:=6FI ;IF erfuelltTHEN anzwuenschegesamt(rowindex)(gew)
+INCR 1ELSE anznerfwuensche(rowindex)(gew)INCR 1FI END PROC zaehlebestwunsch;
+PROC zaehleunbestwunsch(INT CONST rowindex,wanz,wnerf,TEXT CONST wunsch):INT
+VAR gewicht;SELECT int(wunsch)OF CASE 3:gewicht:=1CASE 2:gewicht:=2OTHERWISE
+gewicht:=3END SELECT ;anzwuenschegesamt(rowindex)(gewicht)INCR wanz;IF wnerf
+<>0THEN anznerfwuensche(rowindex)(gewicht)INCR wnerfFI END PROC
+zaehleunbestwunsch;BOOL PROC unterricht(TEXT CONST objekt,INT CONST zeit):
+TEXT VAR lv,ra,par,daten;INT VAR spos,findpos;IF fall=fldsugrupCOR fall=
+fldlehrerCOR fall=fldraeumeTHEN objektunterrichtELSE objektindatenderzeitFI .
+objektunterricht:planeintraglesen(zeit,kenn,objekt,lv,ra,par);lv<>"".
+objektindatenderzeit:IF fall=fldfaecherTHEN daten:=datenderzeit(zeit,kennzlv)
+;findpos:=3ELSE daten:=datenderzeit(zeit,kenn);findpos:=1FI ;IF daten=""THEN
+FALSE ELSE suchindatenFI .suchindaten:spos:=1;WHILE spos<>0REP spos:=pos(
+daten,objekt,spos);IF spos<>0THEN IF (sposMOD 8)=findposTHEN LEAVE unterricht
+WITH TRUE FI ;sposINCR 1FI ;PER ;FALSE .END PROC unterricht;PROC
+zeitrasterdaten(BOOL VAR b):IF wert(fnrzrsj)<>schjCOR wert(fnrzrhj)<>schhj
+COR dbstatus<>0THEN b:=TRUE ELSE planCAT wert(fnrzrkennungteil);FI END PROC
+zeitrasterdaten;PROC faecher(BOOL VAR b):faecherkatalogCAT wert(fnrffach)+
+trennerEND PROC faecher;PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN
+standardmeldung(meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(
+meldungkeinstdplan,"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen
+,"");ELIF fstat=5THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6
+THEN standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(
+meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");
+FI END PROC meldungausgeben;END PACKET einhaltungzeitwuenschepruefen
+
diff --git a/app/schulis/2.2.1/src/4.einzelstdpl.lehrer b/app/schulis/2.2.1/src/4.einzelstdpl.lehrer
new file mode 100644
index 0000000..39067e3
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.einzelstdpl.lehrer
@@ -0,0 +1,113 @@
+PACKET einzelstdpllehrerDEFINES einzelstdpllehrereingang,
+einzelstdpllehrerstarten,einzelstdpllehrersonderwerte,
+einzelstdpllehrermultistop,einzelstdpllehrerdruckdateibauen:LET swanrede=511,
+swlehrername=512,swschuljahr=514,swhalbjahr=515,swtagesstunde=520,
+swklassenleitungen=540,swstellvleitungen=541,swaufsichtszeit=542,
+swaufsichtsort=543,dateimitvordruck1="vordruck1 einzelstdpl lehrer",
+dateimitvordruck2="vordruck2 einzelstdpl raeume",dateimitvordruck3=
+"vordruck2 einzelstdpl lehrer",dateimitvordruck4=
+"vordruck3 einzelstdpl lehrer";TASK VAR vordruckserver;LET
+maxzeichenimvordruck=79;TEXT VAR hj,sj,paraphe:="",anrede,klassenleitung:="",
+stellvleitung:="",l:="",r:="",p:="",geplantezeiten;LET maske=
+"ms einzelstdpl lehrer eingang",fnr2paraphe=2,fnr3akthj=3,fnr4ausgabebs=4,
+fnr5ausgabedr=5,blank=" ",null=0,niltext="",
+meldnrkeinestundenplandatenvorhanden=366,meldnrungueltigeparaphe=344,
+meldnrkeinelehrerdaten=337,meldnrauswahlunsinnig=56,meldnrbittewarten=69;INT
+CONST swzweitezeile:=6,erstestd:=1,letztestd:=12,maxwochstdn:=66,maxwochtage
+:=6;BOOL VAR anschreibenaufbszeigen:=TRUE ,einzelanschreiben:=TRUE ,
+aktuelleshjgewaehlt:=TRUE ;INT VAR eingabestatus,x,meldnr;PROC
+einzelstdpllehrereingang:standardvproc(maske)END PROC
+einzelstdpllehrereingang;PROC einzelstdpllehrerstarten:vordruckserver:=/
+"anschreiben server";IF maskenwerteokTHEN IF stundenplanokTHEN
+startenausfuehrenELSE meldnr:=meldnrkeinestundenplandatenvorhanden;
+meldedenfehler;zurueckzumdialog;FI ;ELSE meldedenfehler;zurueckzumdialogFI ;.
+meldedenfehler:standardmeldung(meldnr,niltext).zurueckzumdialog:return(1).
+startenausfuehren:forget(dateimitvordruck1,quiet);forget(dateimitvordruck2,
+quiet);forget(dateimitvordruck3,quiet);forget(dateimitvordruck4,quiet);fetch(
+dateimitvordruck1,vordruckserver);fetch(dateimitvordruck2,vordruckserver);
+fetch(dateimitvordruck3,vordruckserver);fetch(dateimitvordruck4,
+vordruckserver);inittupel(dnrlehrer);putwert(fnrlparaphe,paraphe);
+standardmeldung(meldnrbittewarten,niltext);zusammengesetztesanschreiben(
+dnrlehrer,anschreibenaufbszeigen,einzelanschreiben,BOOL PROC
+einzelstdpllehrersonderwerte,BOOL PROC einzelstdpllehrermultistop,TEXT PROC
+einzelstdpllehrerdruckdateibauen);END PROC einzelstdpllehrerstarten;BOOL
+PROC stundenplanok:sj:=schulkenndatum("Schuljahr");hj:=schulkenndatum(
+"Schulhalbjahr");IF NOT (aktuelleshjgewaehlt)THEN geplanteshjundsjberechnen(
+hj,sj)FI ;stundenplanhalbjahrsetzen(hj,sj);
+stundenplanbasisundstundenplanholen(eingabestatus);eingabestatus=0OR
+eingabestatus=8END PROC stundenplanok;BOOL PROC maskenwerteok:BOOL VAR ok:=
+FALSE ;standardpruefe(5,fnr4ausgabebs,fnr5ausgabedr,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN meldnr:=meldnrauswahlunsinnig;infeld(
+fnr4ausgabebs);ok:=FALSE ELSE anschreibenaufbszeigen:=standardmaskenfeld(
+fnr5ausgabedr)=niltext;einzelanschreiben:=standardmaskenfeld(fnr2paraphe)<>
+niltext;aktuelleshjgewaehlt:=standardmaskenfeld(fnr3akthj)<>niltext;IF
+einzelanschreibenTHEN IF gueltigeparapheTHEN paraphe:=wert(fnrlparaphe);ok:=
+TRUE ELSE meldnr:=meldnrungueltigeparaphe;infeld(fnr2paraphe);ok:=FALSE FI ;
+ELSE IF dateilehrerleerTHEN meldnr:=meldnrkeinelehrerdaten;infeld(fnr3akthj);
+ok:=FALSE ELSE ok:=TRUE FI ;FI ;FI ;okEND PROC maskenwerteok;BOOL PROC
+gueltigeparaphe:inittupel(dnrlehrer);putwert(fnrlparaphe,standardmaskenfeld(
+fnr2paraphe));search(dnrlehrer,TRUE );dbstatus=0END PROC gueltigeparaphe;
+BOOL PROC dateilehrerleer:inittupel(dnrlehrer);search(dnrlehrer);dbstatus<>0
+END PROC dateilehrerleer;BOOL PROC einzelstdpllehrersonderwerte:INT VAR
+gemerkterdbstatus;paraphe:=wert(fnrlparaphe);initialisieresonderwerte;IF wert
+(fnrlgeschlecht)="m"THEN anrede:="Herrn"ELSE anrede:="Frau"FI ;adressat(wert(
+fnrlfamname));setzesonderwert(swschuljahr,subtext(sj,1,2)+"/"+subtext(sj,3,4)
+);setzesonderwert(swhalbjahr,hj);setzesonderwert(swanrede,anrede);
+setzesonderwert(swlehrername,wert(fnrlfamname));gemerkterdbstatus:=dbstatus;
+inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,sj);putwert(fnrsgrphj,hj);
+search(dnraktschuelergruppen);klassenleitung:=niltext;stellvleitung:=niltext;
+WHILE (dbstatus=0AND wert(fnrsgrphj)=hj)REP IF wert(fnrsgrplehrer)=wert(
+fnrlparaphe)THEN klassenleitungCAT (wert(fnrsgrpjgst)+wert(fnrsgrpkennung)+
+blank)FI ;IF wert(fnrsgrpstellvlehrer)=wert(fnrlparaphe)THEN stellvleitung
+CAT (wert(fnrsgrpjgst)+wert(fnrsgrpkennung)+blank)FI ;succ(
+dnraktschuelergruppen);PER ;setzesonderwert(swklassenleitungen,klassenleitung
+);setzesonderwert(swstellvleitungen,stellvleitung);dbstatus(gemerkterdbstatus
+);TRUE END PROC einzelstdpllehrersonderwerte;BOOL PROC
+einzelstdpllehrermultistop:BOOL VAR b;IF einzelanschreibenTHEN b:=wert(
+fnrlparaphe)=parapheELSE b:=dbstatus=0FI ;bENDPROC einzelstdpllehrermultistop
+;TEXT PROC einzelstdpllehrerdruckdateibauen:INT VAR dbstatusintern;LET
+stddruckdatei="liste.1",hilfsdatei="hilfsdatei";FILE VAR f;TEXT VAR zeile:=""
+,druckdatei:="Lehrer-Einzelplan";TEXT CONST teil1:="---+",teil2:=
+"-----------+",teil3:="-----------: ",teil4:="-------------------",
+normaletrennlinie:=teil1+5*teil2+teil3,abschlusslinie:=4*teil4+blank;
+setzemitseitennummern(TRUE );druckvorbereiten;setzeanzahlderzeichenprozeile(
+maxzeichenimvordruck);briefalternative(dateimitvordruck1,hilfsdatei);
+zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);
+geplantezeiten:=allezeitenvon("P",paraphe);FOR xFROM erstestdUPTO letztestd
+REP datendeszweitenvordrucksindruckdateiPER ;briefalternative(
+dateimitvordruck3,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);
+forget(hilfsdatei,quiet);inittupel(dnraufsichtsplan);putwert(fnrapsj,sj);
+putwert(fnraphj,hj);putwert(fnrapparaphe,paraphe);search(ixappar,TRUE );
+WHILE dbstatus=0AND wert(fnrapsj)=sjAND wert(fnraphj)=hjAND wert(fnrapparaphe
+)=parapheREP setzesonderwert(swaufsichtsort,wert(fnrapaufsichtsort));
+dbstatusintern:=dbstatus;inittupel(dnraufsichtszeiten);putwert(fnrazsj,sj);
+putwert(fnrazhj,hj);putwert(fnrapaufsichtszeit,wert(fnrapaufsichtszeit));
+search(dnraufsichtszeiten,TRUE );IF dbstatus=0THEN setzesonderwert(
+swaufsichtszeit,wert(fnrazbezeichnung))ELSE setzesonderwert(swaufsichtszeit,
+blank)FI ;briefalternative(dateimitvordruck4,hilfsdatei);
+zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);
+dbstatus(dbstatusintern);succ(ixappar);PER ;drucknachbereitenohneausdrucken;
+rename(stddruckdatei,druckdatei);f:=sequentialfile(modify,druckdatei);toline(
+f,1);input(f);druckdatei.datendeszweitenvordrucksindruckdatei:setzesonderwert
+(swtagesstunde,text(x,2));
+planeintraegeprowochenstdenlesenundsonderwertesetzen(x);briefalternative(
+dateimitvordruck2,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);
+IF x<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:=abschlusslinieFI ;
+druckzeileschreiben(zeile);forget(hilfsdatei,quiet);END PROC
+einzelstdpllehrerdruckdateibauen;PROC zeilenweisehilfsdateiindruckdatei(TEXT
+CONST hilfsdatei):INT VAR i;TEXT VAR zeile:="";FILE VAR f;f:=sequentialfile(
+input,hilfsdatei);FOR iFROM 1UPTO lines(f)REP getline(f,zeile);
+druckzeileschreiben(zeile)PER ;END PROC zeilenweisehilfsdateiindruckdatei;
+PROC planeintraegeprowochenstdenlesenundsonderwertesetzen(INT CONST std):INT
+VAR i,wochenstd:=std,sonderwert:=521;TEXT VAR ausgabe;FOR iFROM 1UPTO
+maxwochtageREP IF (geplantezeitenSUB wochenstd)="1"THEN planeintraglesen(
+wochenstd,"P",paraphe,l,r,p);IF wochenstd<=maxwochstdnTHEN ausgabe:=subtext(l
+,1,2);ausgabeCAT blank;ausgabeCAT subtext(l,3,4);ausgabeCAT blank;ausgabeCAT
+subtext(l,5,8);setzesonderwert(sonderwert,ausgabe);setzesonderwert(sonderwert
++swzweitezeile,r);ELSE setzesonderwert(sonderwert,blank);setzesonderwert(
+sonderwert+swzweitezeile,blank);FI ;ELSE setzesonderwert(sonderwert,blank);
+setzesonderwert(sonderwert+swzweitezeile,blank);FI ;ausgabe:=niltext;
+sonderwertINCR 1;wochenstdINCR letztestd;PER ;END PROC
+planeintraegeprowochenstdenlesenundsonderwertesetzen;END PACKET
+einzelstdpllehrer
+
diff --git a/app/schulis/2.2.1/src/4.einzelstdpl.raeume b/app/schulis/2.2.1/src/4.einzelstdpl.raeume
new file mode 100644
index 0000000..aeb0db5
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.einzelstdpl.raeume
@@ -0,0 +1,86 @@
+PACKET einzelstdplraeumeDEFINES einzelstdplraeumeeingang,
+einzelstdplraeumestarten,einzelstdplraeumesonderwerte,
+einzelstdplraeumemultistop,einzelstdplraeumedruckdateibauen:LET maske=
+"ms einzelstdpl raeume eingang",fnr2raum=2,fnr3akthj=3,fnr4ausgabebs=4,
+fnr5ausgabedr=5,blank=" ",null=0,niltext="",
+fehlermeldnrkeinestundenplandatenvorhanden=366,fehlermeldnrungueltigerraum=
+359,fehlermeldnrauswahlunsinnig=56,fehlermeldnrbestandraeumeleer=365,
+meldnrbittewarten=69,swraum=511,swschuljahr=512,swhalbjahr=513,swraumlangtext
+=514,swtagesstunde=520,maxzeichenimvordruck=79;TASK VAR vordruckserver;TEXT
+CONST dateimitvordruck1:="vordruck1 einzelstdpl raeume",dateimitvordruck2:=
+"vordruck2 einzelstdpl raeume",bestandnameraeume:="c02 raeume",strich:="-",
+kreuz:="+",abschlusslinie:=76*strich+blank,normaletrennlinie:=3*strich+kreuz+
+5*(11*strich+kreuz)+11*strich+": ";TEXT VAR hj,sj,raum:="",l:="",r:="",p:="";
+BOOL VAR anschreibenaufbszeigen:=TRUE ,einzelanschreiben:=TRUE ,
+aktuelleshjgewaehlt:=TRUE ;INT VAR eingabestatus,i,x,fehlermeldnr;INT CONST
+aktuellerindex:=dnrschluessel,maxwochstdn:=66,erstestd:=1,letztestd:=12;PROC
+einzelstdplraeumeeingang:standardvproc(maske)END PROC
+einzelstdplraeumeeingang;PROC einzelstdplraeumestarten:IF maskenwerteokTHEN
+IF stundenplanokTHEN startenausfuehrenELSE fehlermeldnr:=
+fehlermeldnrkeinestundenplandatenvorhanden;meldedenfehler;zurueckzumdialog;
+FI ;ELSE meldedenfehler;zurueckzumdialogFI ;.meldedenfehler:standardmeldung(
+fehlermeldnr,niltext).zurueckzumdialog:return(1).startenausfuehren:
+vordruckserver:=/"anschreiben server";forget(dateimitvordruck1,quiet);forget(
+dateimitvordruck2,quiet);fetch(dateimitvordruck1,vordruckserver);fetch(
+dateimitvordruck2,vordruckserver);inittupel(dnrschluessel);putwert(
+fnrschlsachgebiet,bestandnameraeume);putwert(fnrschlschluessel,raum);
+standardmeldung(meldnrbittewarten,niltext);zusammengesetztesanschreiben(
+aktuellerindex,anschreibenaufbszeigen,einzelanschreiben,BOOL PROC
+einzelstdplraeumesonderwerte,BOOL PROC einzelstdplraeumemultistop,TEXT PROC
+einzelstdplraeumedruckdateibauen);END PROC einzelstdplraeumestarten;BOOL
+PROC stundenplanok:stundenplanhalbjahrsetzen(hj,sj);
+stundenplanbasisundstundenplanholen(eingabestatus);eingabestatus=0OR
+eingabestatus=8END PROC stundenplanok;BOOL PROC maskenwerteok:BOOL VAR ok;
+standardpruefe(5,fnr4ausgabebs,fnr5ausgabedr,null,niltext,eingabestatus);IF
+eingabestatus<>0THEN fehlermeldnr:=fehlermeldnrauswahlunsinnig;infeld(
+fnr4ausgabebs);ok:=FALSE ELSE anschreibenaufbszeigen:=standardmaskenfeld(
+fnr5ausgabedr)=niltext;einzelanschreiben:=standardmaskenfeld(fnr2raum)<>
+niltext;aktuelleshjgewaehlt:=standardmaskenfeld(fnr3akthj)<>niltext;sj:=
+schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr");IF NOT (
+aktuelleshjgewaehlt)THEN geplanteshjundsjberechnen(hj,sj)FI ;IF
+einzelanschreibenTHEN IF gueltigerraumTHEN ok:=TRUE ELSE fehlermeldnr:=
+fehlermeldnrungueltigerraum;ok:=FALSE FI ;ELSE IF schluesselbestandleerTHEN
+fehlermeldnr:=fehlermeldnrbestandraeumeleer;infeld(fnr2raum);ok:=FALSE ELSE
+raum:=wert(fnrschlschluessel);ok:=TRUE FI ;FI ;FI ;okEND PROC maskenwerteok;
+BOOL PROC gueltigerraum:raum:=standardmaskenfeld(fnr2raum);inittupel(
+dnrschluessel);putwert(fnrschlsachgebiet,bestandnameraeume);putwert(
+fnrschlschluessel,raum);search(dnrschluessel,TRUE );dbstatus=0END PROC
+gueltigerraum;BOOL PROC schluesselbestandleer:inittupel(dnrschluessel);
+putwert(fnrschlsachgebiet,bestandnameraeume);search(dnrschluessel);raum:=wert
+(fnrschlschluessel);dbstatus<>0COR wert(fnrschlsachgebiet)<>bestandnameraeume
+END PROC schluesselbestandleer;BOOL PROC einzelstdplraeumesonderwerte:
+initialisieresonderwerte;adressat(raum);setzesonderwert(swschuljahr,subtext(
+sj,1,2)+"/"+subtext(sj,3,4));setzesonderwert(swhalbjahr,hj);setzesonderwert(
+swraum,wert(fnrschlschluessel));setzesonderwert(swraumlangtext,wert(
+fnrschllangtext));TRUE END PROC einzelstdplraeumesonderwerte;BOOL PROC
+einzelstdplraeumemultistop:BOOL VAR b;IF einzelanschreibenTHEN b:=wert(
+fnrschlschluessel)=raumELSE b:=wert(fnrschlsachgebiet)=bestandnameraeumeFI ;b
+ENDPROC einzelstdplraeumemultistop;TEXT PROC einzelstdplraeumedruckdateibauen
+:LET stddruckdatei="liste.1",hilfsdatei="hilfsdatei";FILE VAR f;TEXT VAR
+zeile:="",druckdatei:="Raumplan";forget(druckdatei,quiet);druckvorbereiten;
+setzeanzahlderzeichenprozeile(maxzeichenimvordruck);raum:=wert(
+fnrschlschluessel);datendeserstenvordrucksindruckdatei;FOR xFROM erstestd
+UPTO letztestdREP datendeszweitenvordrucksindruckdateiPER ;rename(
+stddruckdatei,druckdatei);f:=sequentialfile(modify,druckdatei);toline(f,1);
+input(f);druckdatei.datendeserstenvordrucksindruckdatei:briefalternative(
+dateimitvordruck1,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);
+forget(hilfsdatei,quiet);.datendeszweitenvordrucksindruckdatei:
+setzesonderwert(swtagesstunde,text(x,2));
+planeintraegeprowochenstdenlesenundsonderwertesetzen(x);briefalternative(
+dateimitvordruck2,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);
+IF x<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:=abschlusslinieFI ;
+druckzeileschreiben(zeile);forget(hilfsdatei,quiet);END PROC
+einzelstdplraeumedruckdateibauen;PROC zeilenweisehilfsdateiindruckdatei(TEXT
+CONST hilfsdatei):TEXT VAR zeile:=niltext;FILE VAR f;f:=sequentialfile(input,
+hilfsdatei);FOR iFROM 1UPTO lines(f)REP getline(f,zeile);druckzeileschreiben(
+zeile)PER ;END PROC zeilenweisehilfsdateiindruckdatei;PROC
+planeintraegeprowochenstdenlesenundsonderwertesetzen(INT CONST std):INT VAR
+wochenstd:=std,sonderwert:=521;TEXT VAR ausgabe;WHILE wochenstd<=maxwochstdn
+REP planeintraglesen(wochenstd,"R",raum,l,r,p);IF r<>""THEN ausgabe:=subtext(
+l,1,2);ausgabeCAT blank;ausgabeCAT subtext(l,3,4);ausgabeCAT blank;ausgabe
+CAT subtext(l,5,8);setzesonderwert(sonderwert,ausgabe);setzesonderwert(
+sonderwert+6,p);ELSE setzesonderwert(sonderwert,blank);setzesonderwert(
+sonderwert+6,blank);FI ;ausgabe:=niltext;sonderwertINCR 1;wochenstdINCR 12;
+PER ;END PROC planeintraegeprowochenstdenlesenundsonderwertesetzen;END
+PACKET einzelstdplraeume;
+
diff --git a/app/schulis/2.2.1/src/4.einzelstdpl.sek1 b/app/schulis/2.2.1/src/4.einzelstdpl.sek1
new file mode 100644
index 0000000..1f72cd0
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.einzelstdpl.sek1
@@ -0,0 +1,233 @@
+PACKET einzelstdplsek1DEFINES einzelstdplsek1eingang,einzelstdplsek1starten,
+einzelstdplsek1sonderwerte,einzelstdplsek1multistop,
+einzelstdplsek1druckdateibauen:LET laengelv=8,geplantestd="1",
+maxlvgnproschuelergr=100,maxwochstdn=66,swschuelergruppe=511,swschuljahr=512,
+swhalbjahr=513,swklassenleiter=514,swstellvertreter=516,swtagesstunde=520,
+sw4fach=518,sw4kopplung=519,sw4fachlangtext=520,sw4erllehrer=521,sw6kopplung=
+530,sw7lv=540,maske="ms einzelstdpl sek1 eingang",fnr2jgst=2,fnr3kennung=3,
+fnr4ohneerlaeuterung=4,fnr5akthj=5,fnr6ausgabebs=6,fnr7ausgabedr=7,blank=" ",
+vierblanks=" ",null=0,niltext="",meldnrauswahlunsinnig=56,
+meldnrbittewarten=69,meldnrkeinestundenplandatenvorhanden=366,
+meldnrkeineentsprechendenschuelerda=127,meldnrungueltigeklassengr=320,
+meldnrungueltigejgst=146,maxzeichenimvordruck=79;TASK VAR vordruckserver;
+TEXT CONST dateimitvordruck1:="vordruck1 einzelstdpl sek1",dateimitvordruck2
+:="vordruck2 einzelstdpl sek1",dateimitvordruck3:=
+"vordruck3 einzelstdpl sek1",dateimitvordruck4:="vordruck4 einzelstdpl sek1",
+dateimitvordruck5:="vordruck5 einzelstdpl sek1",dateimitvordruck6:=
+"vordruck6 einzelstdpl sek1",dateimitvordruck7:="vordruck7 einzelstdpl sek1",
+strich:="-",kreuz:="+",abschlusslinie:=76*strich+blank,normaletrennlinie:=3*
+strich+kreuz+5*(11*strich+kreuz)+11*strich+": ";TEXT VAR kopplg:="",hj,sj,
+sjaufber,jgst:="",kennung:="",stdplanrede,uebfolgeseiten,l:="",r:="",p:="",
+lvgnproschuelgr,lv,paraphezurlv,string,schuelergr,kopplungsbez,hilfstext,
+lehrer:="";BOUND ROW maxlvgnproschuelergrTEXT VAR zeitenzulv;BOUND ROW
+maxwochstdnTEXT VAR kopplungen;BOOL VAR gesamtesek1:=FALSE ,bestjgst:=FALSE ,
+bestschuelergruppe:=FALSE ,korrektewahl:=FALSE ,anschreibenaufbszeigen:=TRUE
+,miterlaeuterung:=TRUE ,einzelanschreiben:=TRUE ,aktuelleshjgewaehlt:=TRUE ;
+INT VAR anzzeilen,eingabestatus,i,x,y,z:=0,anzlvgnprokopplg,
+anzlvgnproschuelergr,meldnr;INT CONST aktuellerindex:=dnraktschuelergruppen,
+erstestd:=1,letztestd:=12,sek1max:=10,sek1min:=5,maxwochtage:=6;PROC
+einzelstdplsek1eingang:standardvproc(maske)END PROC einzelstdplsek1eingang;
+PROC einzelstdplsek1starten:IF maskenwerteokTHEN IF stundenplanokTHEN
+startenausfuehrenELSE meldnr:=meldnrkeinestundenplandatenvorhanden;
+meldedenfehler;zurueckzumdialog;FI ;ELSE meldedenfehler;zurueckzumdialogFI ;.
+meldedenfehler:standardmeldung(meldnr,niltext).zurueckzumdialog:return(1).
+startenausfuehren:vordruckserver:=/"anschreiben server";forget(
+dateimitvordruck1,quiet);forget(dateimitvordruck2,quiet);fetch(
+dateimitvordruck1,vordruckserver);fetch(dateimitvordruck2,vordruckserver);
+forget("datenraum1",quiet);forget("datenraum2",quiet);IF miterlaeuterungTHEN
+forget(dateimitvordruck3,quiet);forget(dateimitvordruck4,quiet);forget(
+dateimitvordruck5,quiet);forget(dateimitvordruck6,quiet);forget(
+dateimitvordruck7,quiet);fetch(dateimitvordruck3,vordruckserver);fetch(
+dateimitvordruck4,vordruckserver);fetch(dateimitvordruck5,vordruckserver);
+fetch(dateimitvordruck6,vordruckserver);fetch(dateimitvordruck7,
+vordruckserver);FI ;setzesonderwerteschulkenndaten;standardmeldung(
+meldnrbittewarten,niltext);zusammengesetztesanschreiben(aktuellerindex,
+anschreibenaufbszeigen,einzelanschreiben,BOOL PROC einzelstdplsek1sonderwerte
+,BOOL PROC einzelstdplsek1multistop,TEXT PROC einzelstdplsek1druckdateibauen)
+;END PROC einzelstdplsek1starten;BOOL PROC maskenwerteok:BOOL VAR ok:=FALSE ;
+standardpruefe(5,fnr6ausgabebs,fnr7ausgabedr,null,niltext,eingabestatus);IF
+eingabestatus<>0THEN meldnr:=meldnrauswahlunsinnig;infeld(fnr6ausgabebs);
+ELSE sortierungsetzen;aktuelleshjgewaehlt:=standardmaskenfeld(fnr5akthj)<>
+niltext;sj:=schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr");
+IF NOT (aktuelleshjgewaehlt)THEN geplanteshjundsjberechnen(hj,sj)FI ;sjaufber
+:=subtext(sj,1,2)+"/"+subtext(sj,3,4);anschreibenaufbszeigen:=
+standardmaskenfeld(fnr7ausgabedr)=niltext;miterlaeuterung:=standardmaskenfeld
+(fnr4ohneerlaeuterung)=niltext;korrektewahl:=FALSE ;inittupel(
+dnraktschuelergruppen);putwert(fnrsgrpsj,sj);putwert(fnrsgrphj,hj);IF
+gesamtesek1THEN IF gueltigesek1THEN einzelanschreiben:=FALSE ;ok:=TRUE ELSE
+meldnr:=meldnrkeineentsprechendenschuelerda;infeld(fnr2jgst)FI ;ELIF bestjgst
+THEN IF gueltigejgstTHEN einzelanschreiben:=FALSE ;ok:=TRUE ELSE meldnr:=
+meldnrungueltigejgst;infeld(fnr2jgst)FI ;ELIF bestschuelergruppeTHEN IF
+gueltigeschuelergrTHEN einzelanschreiben:=TRUE ;ok:=TRUE ELSE meldnr:=
+meldnrungueltigeklassengr;infeld(fnr2jgst)FI ;ELSE meldnr:=
+meldnrauswahlunsinnig;infeld(fnr2jgst);FI ;FI ;ok.sortierungsetzen:IF (
+standardmaskenfeld(fnr2jgst)=niltextAND standardmaskenfeld(fnr3kennung)=
+niltext)THEN gesamtesek1:=TRUE ;ELSE IF (standardmaskenfeld(fnr2jgst)<>
+niltextAND standardmaskenfeld(fnr3kennung)<>niltext)THEN bestschuelergruppe:=
+TRUE ELSE IF standardmaskenfeld(fnr3kennung)=niltextTHEN bestjgst:=TRUE FI ;
+FI ;FI END PROC maskenwerteok;BOOL PROC stundenplanok:
+stundenplanhalbjahrsetzen(hj,sj);stundenplanbasisundstundenplanholen(
+eingabestatus);eingabestatus=0OR eingabestatus=8END PROC stundenplanok;BOOL
+PROC gueltigesek1:search(dnraktschuelergruppen);IF (sek1min<=int(wert(
+fnrsgrpjgst))AND sek1max>=int(wert(fnrsgrpjgst))AND dbstatus=0)THEN IF length
+(wert(fnrsgrpjgst))=1THEN jgst:="0"+wert(fnrsgrpjgst);ELSE jgst:=wert(
+fnrsgrpjgst)FI ;kennung:=wert(fnrsgrpkennung);korrektewahl:=TRUE FI ;
+korrektewahlEND PROC gueltigesek1;BOOL PROC gueltigejgst:IF length(
+standardmaskenfeld(fnr2jgst))=1THEN jgst:="0"+standardmaskenfeld(fnr2jgst)
+ELSE jgst:=standardmaskenfeld(fnr2jgst)FI ;IF int(jgst)<=sek1maxAND int(jgst)
+>=sek1minTHEN putwert(fnrsgrpjgst,jgst);search(dnraktschuelergruppen);IF
+dbstatus=0THEN kennung:=wert(fnrsgrpkennung);korrektewahl:=TRUE FI ;FI ;
+korrektewahlEND PROC gueltigejgst;BOOL PROC gueltigeschuelergr:IF length(
+standardmaskenfeld(fnr2jgst))=1THEN jgst:="0"+standardmaskenfeld(fnr2jgst)
+ELSE jgst:=standardmaskenfeld(fnr2jgst)FI ;kennung:=standardmaskenfeld(
+fnr3kennung);IF int(jgst)<=sek1maxAND int(jgst)>=sek1minTHEN putwert(
+fnrsgrpjgst,jgst);putwert(fnrsgrpkennung,kennung);search(
+dnraktschuelergruppen,TRUE );IF dbstatus=0THEN korrektewahl:=TRUE FI ;FI ;
+korrektewahlEND PROC gueltigeschuelergr;BOOL PROC einzelstdplsek1multistop:
+BOOL VAR b;IF bestschuelergruppeTHEN b:=intwert(fnrsgrpsj)=int(sj)AND intwert
+(fnrsgrphj)=int(hj)AND intwert(fnrsgrpjgst)=int(jgst)AND wert(fnrsgrpkennung)
+=kennungAND dbstatus=okELIF bestjgstTHEN b:=intwert(fnrsgrpsj)=int(sj)AND
+intwert(fnrsgrphj)=int(hj)AND intwert(fnrsgrpjgst)=int(jgst)AND dbstatus=ok
+ELSE b:=intwert(fnrsgrpsj)=int(sj)AND intwert(fnrsgrphj)=int(hj)AND intwert(
+fnrsgrpjgst)<=sek1maxAND intwert(fnrsgrpjgst)>=sek1minAND dbstatus=okFI ;b
+ENDPROC einzelstdplsek1multistop;BOOL PROC einzelstdplsek1sonderwerte:INT
+VAR gemerkterdbstatus;initialisieresonderwerte;setzesonderwert(swschuljahr,
+sjaufber);setzesonderwert(swhalbjahr,hj);IF length(wert(fnrsgrpjgst))=1THEN
+jgst:="0"+wert(fnrsgrpjgst);ELSE jgst:=wert(fnrsgrpjgst)FI ;kennung:=wert(
+fnrsgrpkennung);schuelergr:=jgst+kennung;setzesonderwert(swschuelergruppe,
+jgst+kennung);adressat(schuelergr);gemerkterdbstatus:=dbstatus;inittupel(
+dnrlehrer);putwert(fnrlparaphe,wert(fnrsgrplehrer));search(dnrlehrer,TRUE );
+IF dbstatus=0THEN IF wert(fnrlgeschlecht)="m"THEN lehrer:="Hr. "ELSE lehrer:=
+"Fr. "FI ;hilfstext:=wert(fnrlamtsbeztitel);IF hilfstext<>niltextTHEN lehrer
+CAT hilfstext;lehrerCAT blank;FI ;hilfstext:=wert(fnrlzusatz);IF hilfstext<>
+niltextTHEN lehrerCAT hilfstext;lehrerCAT blank;FI ;lehrerCAT wert(
+fnrlfamname);setzesonderwert(swklassenleiter,lehrer);FI ;inittupel(dnrlehrer)
+;putwert(fnrlparaphe,wert(fnrsgrpstellvlehrer));search(dnrlehrer,TRUE );IF
+dbstatus=0THEN IF wert(fnrlgeschlecht)="m"THEN lehrer:="Hr. "ELSE lehrer:=
+"Fr. "FI ;hilfstext:=wert(fnrlamtsbeztitel);IF hilfstext<>niltextTHEN lehrer
+CAT hilfstext;lehrerCAT blank;FI ;hilfstext:=wert(fnrlzusatz);IF hilfstext<>
+niltextTHEN lehrerCAT hilfstext;lehrerCAT blank;FI ;lehrerCAT wert(
+fnrlfamname);setzesonderwert(swstellvertreter,lehrer);FI ;dbstatus(
+gemerkterdbstatus);TRUE END PROC einzelstdplsek1sonderwerte;TEXT PROC
+einzelstdplsek1druckdateibauen:LET stddruckdatei="liste.1",druckdatei=
+"Stundenplan",hilfsdatei="hilfsdatei";FILE VAR f;IF miterlaeuterungTHEN
+kopplungsmerkrowinitialisieren;setzemitseitennummern(TRUE )FI ;forget(
+druckdatei,quiet);druckvorbereiten;setzeanzahlderzeichenprozeile(
+maxzeichenimvordruck);uebfolgeseiten:="Stundenplan für Klasse "+schuelergr+
+"(Schuljahr "+sjaufber+", "+hj+". Halbjahr)";anzzeilen:=1;briefalternative(
+dateimitvordruck1,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);
+forget(hilfsdatei,quiet);proschuelergruppeallelvgnmitzeitenind2ablegen;FOR x
+FROM erstestdUPTO letztestdREP
+datendeszweitenvordrucksindruckdateiundggfkopplgmerken(x)PER ;IF
+miterlaeuterungTHEN briefalternative(dateimitvordruck3,hilfsdatei);
+zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);FOR x
+FROM 1UPTO anzlvgnproschuelergrREP datendesviertenvordrucksindruckdatei;PER ;
+IF anzzeilen+8>=drucklaengeTHEN seitenwechsel;druckzeileschreiben(
+uebfolgeseiten);druckzeileschreiben(blank);anzzeilen:=3FI ;briefalternative(
+dateimitvordruck5,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);
+forget(hilfsdatei,quiet);FOR xFROM 1UPTO maxwochstdnREP
+datendessechstenundsiebtenvordrucksindruckdatei(x);PER ;FI ;
+drucknachbereitenohneausdrucken;rename(stddruckdatei,druckdatei);f:=
+sequentialfile(modify,druckdatei);toline(f,1);input(f);druckdatei.
+kopplungsmerkrowinitialisieren:forget("datenraum1",quiet);kopplungen:=new(
+"datenraum1");FOR xFROM 1UPTO maxwochstdnREP kopplungen(x):=niltext;PER .
+proschuelergruppeallelvgnmitzeitenind2ablegen:lvgnproschuelgr:=
+lvderschuelergruppe(schuelergr);anzlvgnproschuelergr:=(length(lvgnproschuelgr
+))DIV laengelv;forget("datenraum2",quiet);zeitenzulv:=new("datenraum2");INT
+VAR position:=0;FOR xFROM 1UPTO anzlvgnproschuelergrREP lv:=subtext(
+lvgnproschuelgr,position+1,position+laengelv);string:=allezeitenvon("L",lv);
+stringCAT lv;zeitenzulv(x):=string;positionINCR laengelv;PER ;FOR xFROM
+anzlvgnproschuelergr+1UPTO maxlvgnproschuelergrREP zeitenzulv(x):=niltext;
+PER ;.datendesviertenvordrucksindruckdatei:TEXT VAR fach:=subtext(zeitenzulv(
+x),maxwochstdn+3,maxwochstdn+4);fachCAT blank;setzesonderwert(sw4fach,fach);
+IF length(zeitenzulv(x))>maxwochstdn+laengelvTHEN kopplg:=subtext(zeitenzulv(
+x),maxwochstdn+laengelv+1,maxwochstdn+2*laengelv);setzesonderwert(sw4kopplung
+,"("+kopplg+")");ELSE setzesonderwert(sw4kopplung,10*blank)FI ;inittupel(
+dnrfaecher);putwert(fnrffach,compress(fach));search(dnrfaecher,TRUE );IF
+dbstatus=okTHEN setzesonderwert(sw4fachlangtext,wert(fnrffachbez))ELSE
+setzesonderwert(sw4fachlangtext,blank)FI ;paraphezurlv:=datenzurlv("P",
+subtext(zeitenzulv(x),maxwochstdn+1,maxwochstdn+laengelv));inittupel(
+dnrlehrer);putwert(fnrlparaphe,compress(paraphezurlv));search(dnrlehrer,TRUE
+);IF dbstatus=okTHEN IF wert(fnrlgeschlecht)="w"THEN lehrer:="Fr. "ELSE
+lehrer:="Hr. "FI ;hilfstext:=wert(fnrlamtsbeztitel);IF hilfstext<>niltext
+THEN lehrerCAT hilfstext;lehrerCAT blank;FI ;hilfstext:=wert(fnrlzusatz);IF
+hilfstext<>niltextTHEN lehrerCAT hilfstext;lehrerCAT blank;FI ;lehrerCAT wert
+(fnrlfamname);setzesonderwert(sw4erllehrer,lehrer);ELSE setzesonderwert(
+sw4erllehrer,blank);FI ;briefalternative(dateimitvordruck4,hilfsdatei);
+zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);END
+PROC einzelstdplsek1druckdateibauen;PROC zeilenweisehilfsdateiindruckdatei(
+TEXT CONST hilfsdatei):TEXT VAR zeile:=niltext;FILE VAR f;f:=sequentialfile(
+input,hilfsdatei);FOR iFROM 1UPTO lines(f)REP getline(f,zeile);anzzeilenINCR
+1;IF anzzeilen<drucklaengeTHEN druckzeileschreiben(zeile);ELSE seitenwechsel;
+druckzeileschreiben(uebfolgeseiten);druckzeileschreiben(blank);
+druckzeileschreiben(zeile);anzzeilen:=3;FI ;PER ;END PROC
+zeilenweisehilfsdateiindruckdatei;PROC
+datendeszweitenvordrucksindruckdateiundggfkopplgmerken(INT CONST std):LET
+hilfsdatei="hilfsdatei";TEXT VAR zeile:=niltext;FILE VAR f;setzesonderwert(
+swtagesstunde,text(std,2));IF miterlaeuterungTHEN
+stdplanprowochstdlesenswsetzenunddatenprokopplgmerken(std)ELSE
+stdplanprowochstdlesenundswsetzen(std)FI ;briefalternative(dateimitvordruck2,
+hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);f:=sequentialfile(
+input,hilfsdatei);IF std<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:=
+abschlusslinieFI ;druckzeileschreiben(zeile);anzzeilenINCR 1;forget(
+hilfsdatei,quiet);END PROC
+datendeszweitenvordrucksindruckdateiundggfkopplgmerken;PROC
+datendessechstenundsiebtenvordrucksindruckdatei(INT CONST d1index):LET
+hilfsdatei="hilfsdatei";FILE VAR f;INT VAR y,z,index:=d1index;TEXT VAR tagstd
+,zeiten,altekopplg,fach,allelvsderkopplg;INT CONST maxauszugebendezeiten:=8;
+INT VAR anzzeitenprokopplg,poslv,sonderwert;IF kopplungen(index)<>niltext
+THEN altekopplg:=kopplungen(index);setzesonderwert(sw6kopplung,altekopplg);
+zeiten:=text(index,2);FOR zFROM index+1UPTO maxwochstdnREP IF kopplungen(z)=
+altekopplgTHEN zeitenCAT text(z,2);kopplungen(z):=niltext;FI ;PER ;
+anzzeitenprokopplg:=length(zeiten)DIV 2;poslv:=1;sonderwert:=sw6kopplung+1;
+FOR zFROM 1UPTO 8REP IF anzzeitenprokopplg>=zTHEN tagstd:=subtext(zeiten,
+poslv,poslv+1);setzesonderwert(sonderwert,tagstunde(int(tagstd),TRUE ));ELSE
+setzesonderwert(sonderwert,blank)FI ;poslvINCR 2;sonderwertINCR 1PER ;
+briefalternative(dateimitvordruck6,hilfsdatei);
+zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);
+allelvsderkopplg:=allelvmit("K",altekopplg);anzlvgnprokopplg:=(length(
+allelvsderkopplg)DIV laengelv);poslv:=1;TEXT VAR lvderkopplg;BOOL VAR
+lvmind1malgeplant;FOR yFROM 1UPTO anzlvgnprokopplgREP lvmind1malgeplant:=
+FALSE ;lvderkopplg:=subtext(allelvsderkopplg,poslv,poslv+7);IF pos(
+lvgnproschuelgr,lvderkopplg)<>0THEN
+fuerallezeitenderlvplaneintraegelesenundsonderwertesetzen;FI ;IF
+lvmind1malgeplantTHEN briefalternative(dateimitvordruck7,hilfsdatei);
+zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);FI ;
+poslvINCR laengelv;PER ;TEXT VAR leerzeile:=blank;druckzeileschreiben(
+leerzeile);FI ;.fuerallezeitenderlvplaneintraegelesenundsonderwertesetzen:
+TEXT VAR l,r,p;INT VAR zeit,poszeit;sonderwert:=sw7lv;fach:=subtext(
+lvderkopplg,3,4);setzesonderwert(sonderwert,fach);poszeit:=1;FOR zFROM 1UPTO
+maxauszugebendezeitenREP sonderwertINCR 1;IF anzzeitenprokopplg>=zTHEN zeit:=
+int(subtext(zeiten,poszeit,poszeit+1));IF lvgeplant(zeit,lvderkopplg)THEN
+planeintraglesen(zeit,"L",lvderkopplg,l,r,p);IF r=vierblanksTHEN
+setzesonderwert(sonderwert,"x");ELSE setzesonderwert(sonderwert,r);FI ;
+lvmind1malgeplant:=TRUE ;FI ;ELSE setzesonderwert(sonderwert,blank);FI ;
+poszeitINCR 2PER END PROC datendessechstenundsiebtenvordrucksindruckdatei;
+PROC stdplanprowochstdlesenundswsetzen(INT CONST std):INT VAR x,sonderwert:=
+521;INT VAR wochenstd:=std;FOR iFROM 1UPTO maxwochtageREP IF wochenstd<=
+maxwochstdnTHEN string:="";FOR xFROM 1UPTO anzlvgnproschuelergrREP IF (
+zeitenzulv(x)SUB wochenstd)=geplantestdTHEN stringCAT (subtext(zeitenzulv(x),
+maxwochstdn+1,maxwochstdn+laengelv));FI ;PER ;IF length(string)<=laengelv
+THEN planeintraglesen(wochenstd,"L",string,l,r,p);setzesonderwert(sonderwert,
+subtext(l,3,4)+" "+r)ELSE planeintraglesen(wochenstd,"L",subtext(string,1,8),
+l,r,p);setzesonderwert(sonderwert,"*"+datenzurlv("K",l))FI ;wochenstdINCR
+letztestd;sonderwertINCR 1;ELSE setzesonderwert(sonderwert,blank)FI ;PER ;
+END PROC stdplanprowochstdlesenundswsetzen;PROC
+stdplanprowochstdlesenswsetzenunddatenprokopplgmerken(INT CONST stunde):INT
+VAR x,pos,posstring,sonderwert:=521;INT VAR wochenstd:=stunde;TEXT VAR
+lvposimrow;FOR iFROM 1UPTO maxwochtageREP IF wochenstd<=maxwochstdnTHEN
+string:="";lvposimrow:=niltext;FOR xFROM 1UPTO anzlvgnproschuelergrREP IF (
+zeitenzulv(x)SUB wochenstd)=geplantestdTHEN stringCAT (subtext(zeitenzulv(x),
+maxwochstdn+1,maxwochstdn+laengelv));lvposimrowCAT text(x,3);FI ;PER ;IF
+length(lvposimrow)=3THEN planeintraglesen(wochenstd,"L",string,l,r,p);
+setzesonderwert(sonderwert,subtext(l,3,4)+" "+r);ELIF length(lvposimrow)>3
+THEN kopplungsbez:=datenzurlv("K",subtext(string,1,laengelv));setzesonderwert
+(sonderwert,"*"+kopplungsbez);kopplungen(wochenstd):=kopplungsbez;pos:=1;
+posstring:=1;FOR yFROM 1UPTO (length(lvposimrow)DIV 3)REP IF length(
+zeitenzulv(int(subtext(lvposimrow,pos,pos+2))))=maxwochstdn+laengelvTHEN
+zeitenzulv(int(subtext(lvposimrow,pos,pos+2)))CAT kopplungsbezFI ;posINCR 3;
+posstringINCR 8PER ;ELSE setzesonderwert(sonderwert,blank);FI ;wochenstdINCR
+letztestd;sonderwertINCR 1;ELSE setzesonderwert(sonderwert,blank)FI ;PER ;
+END PROC stdplanprowochstdlesenswsetzenunddatenprokopplgmerken;END PACKET
+einzelstdplsek1;
+
diff --git a/app/schulis/2.2.1/src/4.einzelstdpl.sek2 b/app/schulis/2.2.1/src/4.einzelstdpl.sek2
new file mode 100644
index 0000000..17bc9bd
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.einzelstdpl.sek2
@@ -0,0 +1,197 @@
+PACKET einzelstdplsek2DEFINES einzelstdplsek2eingang,einzelstdplsek2starten,
+einzelstdplsek2sonderwerte,einzelstdplsek2multistop,
+einzelstdplsek2druckdateibauen:LET swrufname=511,swfamname=512,swgebdat=513,
+swschuljahr=514,swhalbjahr=515,swtutorkurs=516,swtagesstunde=520,swmozeile1=
+521,swsazeile1=526,swlv=540,swlehrername=541,maske=
+"ms einzelstdpl sek2 eingang",fnr2jgst=2,fnr3famname=3,fnr4rufname=4,
+fnr5gebdat=5,fnr6ausgbs=6,fnr7ausgdr=7,meldnrauswahlunsinnig=56,
+meldnrdatenexistierennicht=59,meldnrbittewarten=69,
+meldnrschuelernichtimentsprbestand=126,meldnrpraezisieren=129,
+meldnrungueltigesdatum=157,meldnrjgstoderschueler=318,
+meldnrkeinestundenplandatenvorhanden=366,meldnrfalschejgstangabe=404,
+maxwochstdn=66,maxanzfaecher=100;INT CONST maxwochtage:=6,erstestd:=1,
+letztestd:=12;LET blank=" ",null=0,niltext="",punkt=".",maxzeichenimvordruck=
+79;TASK VAR vordruckserver;TEXT CONST dateimitueberschrift:=
+"vordruck1 einzelstdpl sek2",dateimitstdplzeilen:=
+"vordruck2 einzelstdpl raeume",dateimiterlauterungen:=
+"vordruck2 einzelstdpl sek2",strich:="-",kreuz:="+",abschlusslinie:=76*strich
++blank,normaletrennlinie:=3*strich+kreuz+5*(11*strich+kreuz)+11*strich+": ",
+lvnichtimbestand:="nicht in Datei 'Lehrveranstaltungen' enthalten ",
+paraphenichtimbestand:=" nicht in Datei 'Lehrer' enthalten ";TEXT VAR hj,sj,
+sjaufber,uebfolgeseiten,famname,rufname,gebdat,jgst,tutorkurs,tutorkursalt,
+hilfsstring,tupelwerthjd,kennungen,faecher,paraphe,anrede,titel,zusatz,name,
+hilfstext,lv,zeile1,zeile2,l:="",r:="",p:="";ROW maxanzfaecherTEXT VAR
+lehrveranstaltungen;BOOL VAR gesamtesek2,bestjgst,einzelschueler,
+bildschirmausgabe;INT VAR aktuellerindex,gemerkterdbstatus,anzzeilen,
+eingabestatus,i,x,y,z,feldnr,meldnr,zaehler,anzfaecher;PROC
+einzelstdplsek2eingang:standardvproc(maske)END PROC einzelstdplsek2eingang;
+PROC einzelstdplsek2starten:sj:=schulkenndatum("Schuljahr");hj:=
+schulkenndatum("Schulhalbjahr");IF maskenwerteokTHEN IF stundenplanokTHEN
+startenausfuehrenELSE meldnr:=meldnrkeinestundenplandatenvorhanden;
+meldefehlerundzurueckzumdialog;FI ;ELSE meldefehlerundzurueckzumdialog;FI ;.
+startenausfuehren:sjaufber:=subtext(sj,1,2)+"/";sjaufberCAT subtext(sj,3,4);
+vordruckserver:=/"anschreiben server";forget(dateimitueberschrift,quiet);
+forget(dateimitstdplzeilen,quiet);forget(dateimiterlauterungen,quiet);fetch(
+dateimitueberschrift,vordruckserver);fetch(dateimitstdplzeilen,vordruckserver
+);fetch(dateimiterlauterungen,vordruckserver);setzesonderwerteschulkenndaten;
+standardmeldung(meldnrbittewarten,niltext);inittupel(dnrhalbjahresdaten);
+putwert(fnrhjdsj,sj);putwert(fnrhjdhj,hj);putwert(fnrhjdfamnames,famname);
+putwert(fnrhjdrufnames,rufname);putwert(fnrhjdgebdats,gebdat);IF
+einzelschuelerTHEN aktuellerindex:=dnrhalbjahresdaten;ELSE aktuellerindex:=
+ixhjdsjhjjgstkenn;putwert(fnrhjdjgst,jgst);FI ;tutorkursalt:=niltext;
+zusammengesetztesanschreiben(aktuellerindex,bildschirmausgabe,einzelschueler,
+BOOL PROC einzelstdplsek2sonderwerte,BOOL PROC einzelstdplsek2multistop,TEXT
+PROC einzelstdplsek2druckdateibauen);END PROC einzelstdplsek2starten;PROC
+meldefehlerundzurueckzumdialog:standardmeldung(meldnr,niltext);return(1)END
+PROC meldefehlerundzurueckzumdialog;BOOL PROC maskenwerteok:BOOL VAR ok:=
+FALSE ,gesamtesek2:=FALSE ;bestjgst:=FALSE ;einzelschueler:=FALSE ;
+standardpruefe(5,fnr6ausgbs,fnr7ausgdr,null,niltext,eingabestatus);IF
+eingabestatus<>0THEN meldnr:=meldnrauswahlunsinnig;infeld(fnr6ausgbs);ELSE
+bildschirmausgabe:=standardmaskenfeld(fnr7ausgdr)=niltext;jgst:=
+standardmaskenfeld(fnr2jgst);famname:=standardmaskenfeld(fnr3famname);rufname
+:=standardmaskenfeld(fnr4rufname);gebdat:=standardmaskenfeld(fnr5gebdat);IF
+jgst=niltextTHEN IF famname=niltextCAND rufname=niltextCAND gebdat=niltext
+THEN gesamtesek2:=TRUE ;jgst:="11";ok:=TRUE ELSE IF einzelschuelerkorrekt
+THEN einzelschueler:=TRUE ;ok:=TRUE ELSE infeld(feldnr)FI ;FI ;ELSE
+standardpruefe(2,fnr2jgst,null,null,niltext,eingabestatus);IF eingabestatus<>
+0COR int(jgst)<11COR int(jgst)>13THEN meldnr:=meldnrfalschejgstangabe;infeld(
+fnr2jgst);ELSE IF famname<>niltextCOR rufname<>niltextCOR gebdat<>niltext
+THEN meldnr:=meldnrjgstoderschueler;infeld(fnr2jgst)ELSE bestjgst:=TRUE ;ok:=
+TRUE FI ;FI ;FI ;FI ;okEND PROC maskenwerteok;BOOL PROC stundenplanok:
+stundenplanhalbjahrsetzen(hj,sj);stundenplanbasisundstundenplanholen(
+eingabestatus);eingabestatus=0OR eingabestatus=8END PROC stundenplanok;BOOL
+PROC einzelschuelerkorrekt:IF famname=niltextTHEN feldnr:=fnr3famname;meldnr
+:=meldnrpraezisieren;LEAVE einzelschuelerkorrektWITH FALSE ;FI ;IF rufname=
+niltextTHEN IF gebdat=niltextTHEN IF famnameeindeutigTHEN rufname:=wert(
+fnrsurufnames);gebdat:=wert(fnrsugebdatums);LEAVE einzelschuelerkorrektWITH
+TRUE ELSE LEAVE einzelschuelerkorrektWITH FALSE ;FI ;ELSE feldnr:=fnr4rufname
+;meldnr:=meldnrpraezisieren;LEAVE einzelschuelerkorrektWITH FALSE ;FI ;ELSE
+IF gebdat<>niltextTHEN IF kompletterschluesselokundhjddaTHEN LEAVE
+einzelschuelerkorrektWITH TRUE ELSE LEAVE einzelschuelerkorrektWITH FALSE FI
+;ELSE IF famnameundrufnameeindeutigTHEN gebdat:=wert(fnrsugebdatums);LEAVE
+einzelschuelerkorrektWITH TRUE ELSE LEAVE einzelschuelerkorrektWITH FALSE FI
+;FI ;FI ;TRUE END PROC einzelschuelerkorrekt;BOOL PROC famnameeindeutig:
+inittupel(dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsustatuss,
+"ls");search(dnrschueler,FALSE );IF wert(fnrsufamnames)<>famnameTHEN feldnr:=
+fnr3famname;meldnr:=meldnrdatenexistierennicht;LEAVE famnameeindeutigWITH
+FALSE ;ELSE succ(dnrschueler);IF wert(fnrsufamnames)=famnameTHEN feldnr:=
+fnr4rufname;meldnr:=meldnrpraezisieren;LEAVE famnameeindeutigWITH FALSE ;
+ELSE pred(dnrschueler);FI ;FI ;TRUE END PROC famnameeindeutig;BOOL PROC
+famnameundrufnameeindeutig:inittupel(dnrschueler);putwert(fnrsufamnames,
+famname);putwert(fnrsurufnames,rufname);putwert(fnrsustatuss,"ls");search(
+dnrschueler,FALSE );IF wert(fnrsufamnames)<>famnameCOR wert(fnrsurufnames)<>
+rufnameTHEN feldnr:=fnr3famname;meldnr:=meldnrdatenexistierennicht;LEAVE
+famnameundrufnameeindeutigWITH FALSE ELSE succ(dnrschueler);IF wert(
+fnrsufamnames)=famnameAND wert(fnrsurufnames)=rufnameTHEN feldnr:=fnr5gebdat;
+meldnr:=meldnrpraezisieren;LEAVE famnameundrufnameeindeutigWITH FALSE ELSE
+pred(dnrschueler);FI ;FI ;TRUE END PROC famnameundrufnameeindeutig;BOOL PROC
+kompletterschluesselokundhjdda:standardpruefe(6,fnr5gebdat,null,null,niltext,
+eingabestatus);IF eingabestatus<>0THEN feldnr:=fnr5gebdat;meldnr:=
+meldnrungueltigesdatum;LEAVE kompletterschluesselokundhjddaWITH FALSE ;FI ;
+hilfstext:=subtext(gebdat,1,2);hilfstextCAT punkt;hilfstextCAT subtext(gebdat
+,3,4);hilfstextCAT punkt;hilfstextCAT subtext(gebdat,5,6);gebdat:=hilfstext;
+inittupel(dnrhalbjahresdaten);putwert(fnrhjdfamnames,famname);putwert(
+fnrhjdrufnames,rufname);putwert(fnrhjdgebdats,gebdat);putwert(fnrhjdsj,sj);
+putwert(fnrhjdhj,hj);search(dnrhalbjahresdaten,TRUE );IF dbstatus<>0THEN
+feldnr:=fnr3famname;meldnr:=meldnrschuelernichtimentsprbestand;LEAVE
+kompletterschluesselokundhjddaWITH FALSE ;FI ;TRUE END PROC
+kompletterschluesselokundhjdda;BOOL PROC einzelstdplsek2multistop:BOOL VAR b;
+IF einzelschuelerTHEN b:=wert(fnrhjdfamnames)=famnameAND wert(fnrhjdrufnames)
+=rufnameAND intwert(fnrhjdjgst)>10AND schulhalbjahrkorrektAND dbstatus=ok
+ELIF bestjgstTHEN b:=wert(fnrhjdjgst)=jgstAND schulhalbjahrkorrektAND
+dbstatus=okELSE b:=schulhalbjahrkorrektAND dbstatus=okFI ;bENDPROC
+einzelstdplsek2multistop;BOOL PROC schulhalbjahrkorrekt:intwert(fnrhjdsj)=int
+(sj)AND intwert(fnrhjdhj)=int(hj)END PROC schulhalbjahrkorrekt;BOOL PROC
+einzelstdplsek2sonderwerte:initialisieresonderwerte;setzesonderwert(
+swschuljahr,sjaufber);setzesonderwert(swhalbjahr,hj);famname:=wert(
+fnrhjdfamnames);rufname:=wert(fnrhjdrufnames);gebdat:=wert(fnrhjdgebdats);
+jgst:=wert(fnrhjdjgst);adressat(famname);setzesonderwert(swrufname,rufname);
+setzesonderwert(swfamname,famname);setzesonderwert(swgebdat,gebdat);tutorkurs
+:=wert(fnrhjdkennung);IF tutorkurs=niltextTHEN gemerkterdbstatus:=dbstatus;
+inittupel(dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsurufnames,
+rufname);putwert(fnrsugebdatums,gebdat);search(dnrschueler,TRUE );IF dbstatus
+=0THEN tutorkurs:=wert(fnrsusgrpzugtut);FI ;dbstatus(gemerkterdbstatus);FI ;
+gemerkterdbstatus:=dbstatus;inittupel(dnrlehrer);IF tutorkurs<>tutorkursalt
+THEN inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,sj);putwert(fnrsgrphj
+,hj);putwert(fnrsgrpjgst,jgst);putwert(fnrsgrpkennung,tutorkurs);search(
+dnrlehrveranstaltungen,TRUE );paraphe:=wert(fnrsgrplehrer);IF dbstatus<>0COR
+paraphe=niltextTHEN hilfsstring:=jgst+blank+tutorkurs;setzesonderwert(
+swtutorkurs,hilfsstring);ELSE hilfsstring:=jgst+blank;hilfsstringCAT paraphe;
+putwert(fnrlparaphe,paraphe);search(dnrlehrer,TRUE );IF wert(fnrlgeschlecht)=
+"m"THEN hilfsstringCAT " Hr. "ELSE hilfsstringCAT " Fr. "FI ;hilfsstringCAT
+wert(fnrlamtsbeztitel);hilfsstringCAT blank+wert(fnrlzusatz);hilfsstringCAT
+blank+wert(fnrlfamname);setzesonderwert(swtutorkurs,hilfsstring);FI ;
+tutorkursalt:=tutorkurs;ELSE setzesonderwert(swtutorkurs,hilfsstring);FI ;
+dbstatus(gemerkterdbstatus);TRUE END PROC einzelstdplsek2sonderwerte;TEXT
+PROC einzelstdplsek2druckdateibauen:LET stddruckdatei="liste.1",druckdatei=
+"Stundenplan",hilfsdatei="hilfsdatei";FILE VAR f;forget(druckdatei,quiet);
+setzemitseitennummern(TRUE );druckvorbereiten;setzeanzahlderzeichenprozeile(
+maxzeichenimvordruck);jgst:=wert(fnrhjdjgst);faecher:=wert(fnrhjdfach);
+kennungen:=wert(fnrhjdlerngrpkenn);lehrveranstaltungenimrowmerken;
+uebfolgeseiten:="Erläuterungen zum Stundenplan: "+rufname+blank+famname+" ("+
+sjaufber+","+hj+") ";anzzeilen:=1;briefalternative(dateimitueberschrift,
+hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,
+quiet);FOR xFROM erstestdUPTO letztestdREP vordruckzweiindruckdatei(x)PER ;
+ueberschriftenfuererlaeuterungenindruckdatei;FOR zaehlerFROM 1UPTO anzfaecher
+REP IF anzzeilen>drucklaengeTHEN seitenwechsel;druckzeileschreiben(
+uebfolgeseiten);druckzeileschreiben(blank);spaltenueberschriftenindruckdatei;
+anzzeilenINCR 4;FI ;vordruckdreiindruckdatei(zaehler)PER ;
+drucknachbereitenohneausdrucken;rename(stddruckdatei,druckdatei);f:=
+sequentialfile(modify,druckdatei);toline(f,1);input(f);druckdatei.
+lehrveranstaltungenimrowmerken:FOR iFROM 1UPTO maxanzfaecherREP
+lehrveranstaltungen(i):=niltextPER ;anzfaecher:=length(faecher)DIV 2;FOR i
+FROM 1UPTO anzfaecherREP lehrveranstaltungen(i):=jgst+subtext(faecher,1,2)+
+subtext(kennungen,1,4);faecher:=subtext(faecher,3,length(faecher));kennungen
+:=subtext(kennungen,5,length(kennungen));PER ;.
+ueberschriftenfuererlaeuterungenindruckdatei:IF anzzeilen+6>drucklaengeTHEN
+seitenwechsel;druckzeileschreiben(uebfolgeseiten);druckzeileschreiben(blank);
+anzzeilen:=3;FI ;zeile1:=blank;druckzeileschreiben(zeile1);zeile1:=
+"Erläuterungen: ";druckzeileschreiben(zeile1);zeile1:=blank;
+druckzeileschreiben(zeile1);spaltenueberschriftenindruckdatei;anzzeilenINCR 6
+;END PROC einzelstdplsek2druckdateibauen;PROC
+spaltenueberschriftenindruckdatei:zeile1:="Lehrveranstaltung : Lehrer ";
+druckzeileschreiben(zeile1);zeile1:="------------------:"+56*"-"+blank;
+druckzeileschreiben(zeile1);END PROC spaltenueberschriftenindruckdatei;PROC
+zeilenweisehilfsdateiindruckdatei(TEXT CONST hilfsdatei):TEXT VAR zeile:=
+niltext;FILE VAR f;f:=sequentialfile(input,hilfsdatei);FOR iFROM 1UPTO lines(
+f)REP getline(f,zeile);anzzeilenINCR 1;IF anzzeilen<drucklaengeTHEN
+druckzeileschreiben(zeile);ELSE seitenwechsel;druckzeileschreiben(
+uebfolgeseiten);druckzeileschreiben(blank);druckzeileschreiben(zeile);
+anzzeilen:=3;FI ;PER ;END PROC zeilenweisehilfsdateiindruckdatei;PROC
+vordruckzweiindruckdatei(INT CONST std):LET hilfsdatei="hilfsdatei";TEXT VAR
+zeile:=niltext;FILE VAR f;setzesonderwert(swtagesstunde,text(std,2));
+stdplanprowochstdlesenundswsetzen(std);briefalternative(dateimitstdplzeilen,
+hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);f:=sequentialfile(
+input,hilfsdatei);IF std<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:=
+abschlusslinieFI ;druckzeileschreiben(zeile);anzzeilenINCR 1;forget(
+hilfsdatei,quiet);END PROC vordruckzweiindruckdatei;PROC
+vordruckdreiindruckdatei(INT CONST index):LET hilfsdatei="hilfsdatei";TEXT
+VAR zeile:=niltext;FILE VAR f;hilfstext:=lehrveranstaltungen(index);lv:=
+subtext(hilfstext,1,2)+blank;lvCAT subtext(hilfstext,3,4)+blank;lvCAT subtext
+(hilfstext,5,8);setzesonderwert(swlv,lv);gemerkterdbstatus:=dbstatus;
+inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,sj);putwert(fnrlvhj,hj);
+putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,compress(subtext(hilfstext,3
+,8)));search(dnrlehrveranstaltungen,TRUE );IF dbstatus<>0THEN setzesonderwert
+(swlehrername,lvnichtimbestand);ELSE inittupel(dnrlehrer);putwert(fnrlparaphe
+,wert(fnrlvparaphe));search(dnrlehrer,TRUE );IF dbstatus<>0THEN
+setzesonderwert(swlehrername,"Paraphe "+wert(fnrlvparaphe)+
+paraphenichtimbestand)ELSE anredetitelusfzusammensetzten;setzesonderwert(
+swlehrername,anrede+titel+name)FI ;FI ;dbstatus(gemerkterdbstatus);
+briefalternative(dateimiterlauterungen,hilfsdatei);
+zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);.
+anredetitelusfzusammensetzten:IF wert(fnrlgeschlecht)="w"THEN anrede:="Fr. "
+ELSE anrede:="Hr. "FI ;titel:=wert(fnrlamtsbeztitel);zusatz:=wert(fnrlzusatz)
+;name:=blank+wert(fnrlfamname);IF length(titel)>0THEN titelCAT blank;titel
+CAT zusatzELSE titel:=zusatzFI ;END PROC vordruckdreiindruckdatei;PROC
+stdplanprowochstdlesenundswsetzen(INT CONST std):INT VAR sonderwert;INT VAR
+wochenstd:=std;FOR sonderwertFROM swmozeile1UPTO swsazeile1REP zaehler:=1;IF
+wochenstd<=maxwochstdnTHEN WHILE zaehler<=anzfaecherAND NOT lvgeplant(
+wochenstd,lehrveranstaltungen(zaehler))REP zaehlerINCR 1;PER ;IF zaehler>
+anzfaecherTHEN setzesonderwert(sonderwert,niltext);setzesonderwert(sonderwert
++6,niltext);ELSE lv:=lehrveranstaltungen(zaehler);planeintraglesen(wochenstd,
+"L",lv,l,r,p);zeile1:=subtext(lv,1,2)+blank;zeile1CAT subtext(lv,3,8);zeile2
+:=text(r,10);setzesonderwert(sonderwert,zeile1);setzesonderwert(sonderwert+6,
+zeile2);FI ;wochenstdINCR letztestd;ELSE zeile2:=niltext;setzesonderwert(
+sonderwert,zeile2);setzesonderwert(sonderwert+6,zeile2);FI ;PER ;END PROC
+stdplanprowochstdlesenundswsetzen;END PACKET einzelstdplsek2;
+
diff --git a/app/schulis/2.2.1/src/4.faecherangebot drucken b/app/schulis/2.2.1/src/4.faecherangebot drucken
new file mode 100644
index 0000000..f38c047
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.faecherangebot drucken
@@ -0,0 +1,110 @@
+PACKET druckefaecherangebotDEFINES faecherangebotspezielleteile:LET AUSGFELD
+=ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,ausgfeldlaenge=1,
+ausgkopflaenge=2,sj="Schuljahr",hj="Schulhalbjahr",ueberschrzeilen=1,
+ausgabeparam="#",jg="Jgst.",fc="Fach",ar="Art",ws="Wstd.",an=
+"Anz. Lehrveranst.",eingmaske="ms liste faecherangebot",meldungbearb=352,
+meldungpraez=129,fldgeplshj=2,fldaktshj=3,fldsortjgst=4,fldsortfach=5,
+fldaufdr=6,fldaufbs=7,zeilenanzahl=17,jgstbezbreite=5,fachbezbreite=4,
+artbezbreite=3,wstdbezbreite=5,anzbezbreite=17;AUSGFELD VAR ausgfeld;
+AUSGKOPF VAR ausgkopf;INT VAR i,status,index,druckzeilenzahl;TEXT VAR
+geplschj,geplschhj,aktschj,aktschhj,schj,schhj:="0";TEXT VAR meldungaltejgst
+:="",meldungaltesfach:="",altejgst:="",altesfach:="",jgst,fach,art,wstd,anzlv
+,druckstrich,faecherangebotueberschrift;BOOL VAR erstezeile;BOOL PROC
+multistop:IF dbstatus=okTHEN LEAVE multistopWITH wert(fnrfanghj)=schhjCAND
+wert(fnrfangsj)=schjFI ;FALSE END PROC multistop;BOOL PROC multistopsim:IF
+dbstatus=okTHEN IF wert(fnrfanghj)=schhjCAND wert(fnrfangsj)=schjTHEN LEAVE
+multistopsimWITH TRUE ELSE setzebestandende(TRUE );LEAVE multistopsimWITH
+FALSE FI ELSE setzebestandende(TRUE )FI ;FALSE END PROC multistopsim;PROC
+holeakthj:holakthj;holaktj;bergeplhjuj.holakthj:aktschhj:=schulkenndatum(hj).
+holaktj:aktschj:=schulkenndatum(sj).bergeplhjuj:geplschhj:=aktschhj;geplschj
+:=aktschj;geplanteshjundsjberechnen(geplschhj,geplschj).END PROC holeakthj;
+PROC faecherangebotspezielleteile(INT CONST anwahl):SELECT anwahlOF CASE 1:
+faecherangebotdialogvorbereitenCASE 2:faecherangebotrichtigCASE 3:
+faecherangebotlistenvorbereitenCASE 4:faecherangebotdruckvorbereitenCASE 5:
+faecherangebotseitedruckenCASE 6:faecherangebotbsvorbereitenCASE 7:
+faecherangebotseitezeigenEND SELECT .END PROC faecherangebotspezielleteile;
+PROC faecherangebotdialogvorbereiten:holeakthj;faecherangebotueberschrift:=
+text(vergleichsknoten);setzeanfangswerte(eingmaske,fldgeplshj)END PROC
+faecherangebotdialogvorbereiten;PROC faecherangebotrichtig:IF (
+standardmaskenfeld(fldgeplshj)=""CAND standardmaskenfeld(fldaktshj)="")COR (
+standardmaskenfeld(fldsortjgst)=""CAND standardmaskenfeld(fldsortfach)="")
+COR (standardmaskenfeld(fldaufdr)=""CAND standardmaskenfeld(fldaufbs)="")
+THEN standardmeldung(meldungpraez,"");setzeeingabetest(FALSE );infeld(
+fldgeplshj);LEAVE faecherangebotrichtigFI ;standardpruefe(5,fldgeplshj,
+fldaktshj,0,"",status);IF status<>0THEN infeld(status);setzeeingabetest(
+FALSE )ELSE standardpruefe(5,fldsortjgst,fldsortfach,0,"",status);IF status<>
+0THEN infeld(status);setzeeingabetest(FALSE )ELSE standardpruefe(5,fldaufdr,
+fldaufbs,0,"",status);IF status<>0THEN infeld(status);setzeeingabetest(FALSE
+)ELSE IF standardmaskenfeld(fldgeplshj)<>""THEN schj:=geplschj;schhj:=
+geplschhjELSE schj:=aktschj;schhj:=aktschhjFI ;IF standardmaskenfeld(
+fldsortjgst)<>""THEN index:=dnrfaecherangebot;setzescanendewert("255")ELSE
+index:=ixfangsjhjfach;setzescanendewert("�")FI ;setzeausgabedrucker(
+standardmaskenfeld(fldaufdr)<>"");setzeeingabetest(TRUE );FI ;FI ;FI END
+PROC faecherangebotrichtig;PROC faecherangebotlistenvorbereiten:BOOL VAR b;
+inittupel(dnrfaecherangebot);initobli(zeilenanzahl);reinitparsing;
+setzeidentiwert("");setzewerte;objektlistestarten(index,schj,staticfield,
+TRUE ,b);setzebestandende(NOT multistopCOR b).setzewerte:putwert(fnrfangsj,
+schj);putwert(fnrfanghj,schhj).staticfield:IF index=dnrfaecherangebotTHEN
+fnrfangjgstELSE fnrfangfachFI .END PROC faecherangebotlistenvorbereiten;PROC
+faecherangebotbsvorbereiten:standardkopfmaskeaktualisieren(
+faecherangebotueberschrift+" für "+schhj+". "+text(schj,2)+"/"+subtext(schj,3
+));initspalten;setzespaltentrenner(" ");setzespaltenbreiten;
+initausgabekopf(bildbreite*"-");ausgkopf(1)IN 2;ausgkopf(2)IN 3;
+setzebildanfangsposition(4).END PROC faecherangebotbsvorbereiten;PROC
+setzespaltenbreiten:setzespaltenbreite(jgstbezbreite);setzespaltenbreite(
+fachbezbreite);setzespaltenbreite(artbezbreite);setzespaltenbreite(
+wstdbezbreite);setzespaltenbreite(anzbezbreite);END PROC setzespaltenbreiten;
+PROC faecherangebotseitezeigen:altejgst:="";blaettern(PROC (INT CONST )
+faecherangebotzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop);END PROC
+faecherangebotseitezeigen;PROC faecherangebotzeigen(INT CONST procparameter):
+faecherangebotholen;faecherangebotaufbereiten;faecherangebotaufbs;END PROC
+faecherangebotzeigen;PROC faecherangebotholen:jgst:=text(intwert(fnrfangjgst)
+,2);fach:=wert(fnrfangfach);art:=wert(fnrfangart);wstd:=text(intwert(
+fnrfangwochenstd),2);anzlv:=text(intwert(fnrfanganzlv),2);IF NOT multistop
+THEN setzebestandende(TRUE )FI .END PROC faecherangebotholen;PROC
+faecherangebotaufbereiten:IF jgst<>altejgstTHEN spaltenweise(jgst);altejgst:=
+jgstELSE spaltenweise(" ")FI ;spaltenweise(fach);spaltenweise(art);
+spaltenweise(wstd);spaltenweise(anzlv);ausgfeld(1):=zeile.END PROC
+faecherangebotaufbereiten;PROC faecherangebotaufbs:ausgfeld(1)IN ausgabepos;
+erhoeheausgabeposumeinsEND PROC faecherangebotaufbs;PROC initausgabekopf(
+TEXT CONST t):spaltenweise(jg);spaltenweise(fc);spaltenweise(ar);spaltenweise
+(ws);spaltenweise(an);ausgkopf(1):=zeile;ausgkopf(2):=t;END PROC
+initausgabekopf;PROC faecherangebotdruckvorbereiten:druckvorbereiten;
+variablensetzen;initdruckkopf(zentriert(faecherangebotueberschrift+" für "+
+schhj+". "+text(schj,2)+"/"+subtext(schj,3),druckbreite));initspalten;
+setzespaltentrenner(" ");setzespaltenbreiten;initausgabekopf(
+druckbreite*"-");inittupel(index);setzebestandende(FALSE );setzewerte;
+lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL
+PROC multistopsim).variablensetzen:druckstrich:=druckbreite*"-";
+druckzeilenzahl:=drucklaenge(ueberschrzeilen)-ausgkopflaenge.setzewerte:
+putwert(fnrfangsj,schj);putwert(fnrfanghj,schhj).END PROC
+faecherangebotdruckvorbereiten;PROC faecherangebotseitedrucken:altejgst:="";
+altesfach:="";erstezeile:=TRUE ;faecherangebotueberschriftdrucken;
+seitedrucken(PROC (INT VAR )faecherangebotdrucken,druckzeilenzahl,
+ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel;END PROC
+faecherangebotseitedrucken;PROC faecherangebotueberschriftdrucken:
+druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP druckzeileschreiben(
+ausgkopf(i))PER .END PROC faecherangebotueberschriftdrucken;PROC
+faecherangebotdrucken(INT VAR zz):faecherangebotholen;IF index=
+dnrfaecherangebotTHEN IF meldungaltejgst<>jgstTHEN meldungaltejgst:=jgst;
+standardmeldung(meldungbearb,"Jgst. "+jgst+ausgabeparam)FI ;ELSE IF
+meldungaltesfach<>fachTHEN meldungaltesfach:=fach;standardmeldung(
+meldungbearb,"Fach "+fach+ausgabeparam)FI ;FI ;
+faecherangebotaufbereitenmitleerzeile(zz);faecherangebotindruckdatei(zz);IF
+zz>=druckzeilenzahl-1THEN zzINCR ausgfeldlaengeFI .END PROC
+faecherangebotdrucken;PROC faecherangebotaufbereitenmitleerzeile(INT VAR zz):
+IF index=dnrfaecherangebotTHEN IF jgst<>altejgstTHEN gibleerzeileaus;
+spaltenweise(jgst)ELSE spaltenweise(" ")FI ELSE IF fach<>altesfachTHEN
+gibleerzeileaus;altejgst:=""FI ;IF jgst<>altejgstTHEN spaltenweise(jgst)ELSE
+spaltenweise(" ")FI FI ;spaltenweise(fach);spaltenweise(art);spaltenweise(
+wstd);spaltenweise(anzlv);ausgfeld(1):=zeile.gibleerzeileaus:IF NOT
+erstezeileTHEN spaltenweise(" ");spaltenweise(" ");spaltenweise(" ");
+spaltenweise(" ");spaltenweise(" ");ausgfeld(1):=zeile;
+faecherangebotindruckdatei(zz)FI .END PROC
+faecherangebotaufbereitenmitleerzeile;PROC faecherangebotindruckdatei(INT
+VAR zz):zzINCR ausgfeldlaenge;IF jgst<>altejgstTHEN altejgst:=jgstFI ;IF fach
+<>altesfachCAND index=ixfangsjhjfachTHEN altesfach:=fachFI ;IF erstezeile
+THEN erstezeile:=FALSE FI ;FOR iFROM 1UPTO ausgfeldlaengeREP
+druckzeileschreiben(ausgfeld(i))PER END PROC faecherangebotindruckdatei;END
+PACKET druckefaecherangebot
+
diff --git a/app/schulis/2.2.1/src/4.faecherangebot planen b/app/schulis/2.2.1/src/4.faecherangebot planen
new file mode 100644
index 0000000..91d301d
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.faecherangebot planen
@@ -0,0 +1,369 @@
+PACKET planefaecherangebotDEFINES fachangpruefuebern,fachangpruefbearb,
+fachangmodbldsch,fachangstdvproc,fachanguebern,fachangspeichern:LET sj=
+"Schuljahr",hj="Schulhalbjahr",art="c02 art lehrveranstaltung",eingmaske=
+"ms erf faecherangebot",bearbmaske="ms bearb faecherangebot",
+kennzeichnunggeplant="geplant",maxzahl=99,minzahl=0,bearbzl=19,jgstfeldnr=10,
+meldg0=56,meldg1=300,meldg3=302,meldg4=303,meldg5=304,meldg6=305,meldg7=306,
+meldg8=307,meldg9=308,meldg11=310,meldg12=311,meldg10=318,meldg13=315,meldg14
+=312,meldg15=313,meldg16=314,meldg17=69,meldg18=57,meldg19=50,trenner="�";
+ROW 10TEXT VAR eingbldsch;ROW bearbzlINT VAR dbsatzbsnr;ROW bearbzlSTRUCT (
+TEXT fach,TEXT art,TEXT wstd,TEXT anz)VAR bearbbldsch;ROW bearbzlSTRUCT (
+TEXT fach,TEXT art,TEXT wstd,TEXT anz,)VAR dbinh;INT VAR i,j,k,letztepos:=2,
+status,zeignr:=1,z1dbnr:=1,nzaehler:=0,ersteeinfuegezeile:=1,bszeiger:=1,
+dbzeiger:=1,letztejgst:=1,anzbssaetze,anzdbsaetze,letztebearbzeile:=0;TEXT
+VAR fa:="",ar:="",ws:="",an:="",tupel:="",fachkatalog,artkatalog,
+maskenkopferg:="";INT VAR aktzeile:=0;TEXT VAR aktschhj:="0",aktschj:="0",
+geplschhj:="0",geplschj:="0";BOOL VAR okay:=TRUE ,rueck,istfehler,neu:=FALSE
+,dbfa2,bldfa2,f2:=FALSE ,f3:=FALSE ,f6:=FALSE ,modifsatzgeprueft:=FALSE ,
+keinescn:=TRUE ,saetzeunveraendert;PROC holeaktdaten:statleseschleife(
+dnrfaecher,"","",fnrffach,fnrffach,PROC fachcat);statleseschleife(
+dnrschluessel,art,"",fnrschlsachgebiet,fnrschlschluessel,PROC artcat)END
+PROC holeaktdaten;PROC holeakthj:aktschhj:=schulkenndatum(hj);aktschj:=
+schulkenndatum(sj);geplschhj:=aktschhj;geplschj:=aktschj;
+geplanteshjundsjberechnen(geplschhj,geplschj);maskenkopferg:=text(
+vergleichsknoten)+" "+geplschhj+". "+text(geplschj,2)+"/"+subtext(geplschj,3)
+END PROC holeakthj;PROC initrows:fachkatalog:=trenner;artkatalog:=trenner;
+FOR iFROM 1UPTO 10REP eingbldsch(i):=""PER ;FOR iFROM 1UPTO bearbzlREP
+bearbbldsch(i).fach:="";bearbbldsch(i).art:="";bearbbldsch(i).wstd:="";
+bearbbldsch(i).anz:="";dbsatzbsnr(i):=0;dbinh(i).fach:="";dbinh(i).art:="";
+dbinh(i).wstd:="";dbinh(i).anz:="";PER ;END PROC initrows;PROC
+fachangpruefuebern:merkeeingsch;f2:=FALSE ;f3:=FALSE ;f6:=FALSE ;okay:=TRUE ;
+fall1;fall2;fall3;fall6;fall9;IF okayTHEN merkeeingsch;standardmeldung(meldg1
+,"");standardnprocELSE IF NOT rueckTHEN fachangzurueckmitmeldg(meldg0,1,
+letztepos,"")FI FI .fall1:IF eingbldsch(2)=""CAND eingbldsch(3)=""CAND
+eingbldsch(6)=""THEN fachangzurueckmitmeldg(meldg0,1,0,"");LEAVE
+fachangpruefuebernFI .fall2:IF eingbldsch(2)<>""THEN f2:=TRUE ;prueferestFI .
+prueferest:FOR iFROM 3UPTO 10REP IF eingbldsch(i)<>""THEN okay:=FALSE ;
+letztepos:=2;FI PER .fall3:IF eingbldsch(3)<>""CAND okayTHEN f3:=TRUE ;
+pruefandereFI .pruefandere:IF eingbldsch(2)<>""THEN okay:=FALSE FI ;FOR i
+FROM 6UPTO 10REP IF eingbldsch(i)<>""THEN okay:=FALSE FI PER ;IF NOT okay
+THEN fachangzurueckmitmeldg(meldg0,1,0,"");LEAVE fachangpruefuebernFI ;IF
+eingbldsch(4)=""CAND okayTHEN fachangzurueckmitmeldg(meldg5,1,4,"");LEAVE
+fachangpruefuebernFI ;IF eingbldsch(5)=""CAND okayTHEN fachangzurueckmitmeldg
+(meldg5,1,5,"");LEAVE fachangpruefuebernFI ;pruefjgst(4);IF NOT okayTHEN
+LEAVE fachangpruefuebernFI ;pruefjgst(5);IF NOT okayTHEN LEAVE
+fachangpruefuebernFI .fall6:IF eingbldsch(6)<>""CAND okayTHEN f6:=TRUE ;
+pruefnochFI .pruefnoch:FOR iFROM 2UPTO 5REP IF eingbldsch(i)<>""THEN okay:=
+FALSE FI PER ;FOR iFROM 9UPTO 10REP IF eingbldsch(i)<>""THEN okay:=FALSE FI
+PER ;IF NOT okayTHEN fachangzurueckmitmeldg(meldg0,1,0,"");LEAVE
+fachangpruefuebernFI ;IF eingbldsch(7)=""CAND okayTHEN fachangzurueckmitmeldg
+(meldg5,1,7,"");LEAVE fachangpruefuebernFI ;IF eingbldsch(8)=""CAND okayTHEN
+fachangzurueckmitmeldg(meldg5,1,8,"");LEAVE fachangpruefuebernFI ;pruefjgst(7
+);IF NOT okayTHEN LEAVE fachangpruefuebernFI ;pruefjgst(8);IF NOT okayTHEN
+LEAVE fachangpruefuebernFI ;IF eingbldsch(7)=eingbldsch(8)THEN
+fachangzurueckmitmeldg(meldg0,1,7,"");LEAVE fachangpruefuebernFI .fall9:IF
+eingbldsch(9)<>""COR eingbldsch(10)<>""CAND okayTHEN IF NOT rueckTHEN
+fachangzurueckmitmeldg(meldg10,1,letztepos,"")FI ;LEAVE fachangpruefuebernFI
+.END PROC fachangpruefuebern;PROC fachangpruefbearb:standardmeldung(meldg17,
+" ");merkeeingsch;okay:=TRUE ;FOR iFROM 2UPTO 8REP IF eingbldsch(i)<>""THEN
+fachangzurueckmitmeldg(meldg10,1,i,"");LEAVE fachangpruefbearbFI ;PER ;IF
+eingbldsch(9)=""CAND okayTHEN fachangzurueckmitmeldg(meldg0,1,i,"");LEAVE
+fachangpruefbearbFI ;IF eingbldsch(10)=""THEN fachangzurueckmitmeldg(meldg5,1
+,10,"");LEAVE fachangpruefbearbELSE pruefjgst(10);FI ;IF okayCAND eingbldsch(
+10)<>""THEN erfasstefelderausgeben(zeignr);standardnprocELSE IF NOT rueck
+THEN fachangzurueckmitmeldg(meldg0,1,0,"")FI FI .END PROC fachangpruefbearb;
+PROC pruefjgst(INT CONST eingbldschindex):rueck:=FALSE ;IF compress(
+eingbldsch(eingbldschindex))="0"COR eingbldsch(eingbldschindex)="00"THEN
+LEAVE pruefjgstELIF int(eingbldsch(eingbldschindex))>4CAND int(eingbldsch(
+eingbldschindex))<14THEN LEAVE pruefjgstELSE fachangzurueckmitmeldg(meldg6,1,
+0,"");okay:=FALSE ;rueck:=TRUE ;infeld(eingbldschindex);FI END PROC pruefjgst
+;PROC pruefdbfd(TEXT CONST objekt,katalog):IF pos(katalog,trenner+objekt+
+trenner)<1THEN istfehler:=TRUE ;IF katalog=fachkatalogTHEN
+fachangzurueckmitmeldg(meldg11,0,i*4-1,"")ELSE fachangzurueckmitmeldg(meldg12
+,0,i*4,"")FI FI .END PROC pruefdbfd;PROC prueftypfd(INT CONST feld):
+standardpruefe(3,feld,minzahl,maxzahl,"",status);IF status>0THEN istfehler:=
+TRUE ;infeld(feld)FI END PROC prueftypfd;PROC fachangstdvproc:gibeingschaus;
+standardnproc.END PROC fachangstdvproc;PROC gibeingschaus:zeignr:=1;
+standardstartproc(eingmaske);gibeingbldschaus;infeld(2);
+standardfelderausgeben;infeld(letztepos).gibeingbldschaus:FOR iFROM 1UPTO 10
+REP standardmaskenfeld(eingbldsch(i),i);IF eingbldsch(i)<>""THEN letztepos:=i
+FI PER .END PROC gibeingschaus;PROC erfasstefelderausgeben(INT CONST znr):
+ersteeinfuegezeile:=1;keinescn:=TRUE ;IF aktschhj="0"THEN holeakthjFI ;z1dbnr
+:=znr;anzdbsaetze:=0;j:=1;IF znr=1THEN loeschedbinh;standardstartproc(
+bearbmaske);standardkopfmaskeaktualisieren(maskenkopferg);standardmaskenfeld(
+eingbldsch(jgstfeldnr),2);ELSE loeschefelder;FI ;putwert(fnrfangsj,geplschj);
+putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(jgstfeldnr
+)));putintwert(fnrfanglfdnr,znr);search(dnrfaecherangebot,FALSE );IF dbstatus
+<>okTHEN gibleerenbildschirmELIF wert(fnrfangsj)=geplschjCAND intwert(
+fnrfanglfdnr)=znrCAND intwert(fnrfangjgst)=int(eingbldsch(jgstfeldnr))CAND
+wert(fnrfanghj)=geplschhjTHEN z1dbnr:=intwert(fnrfanglfdnr);k:=1;
+startebildschirmblock(dnrfaecherangebot,bearbzl-1);bildschirmblock(PROC
+gibbearbzeileaus,BOOL PROC (INT CONST )pruefung,i);neu:=FALSE ;ELSE
+gibleerenbildschirmFI ;infeld(2);standardfelderausgeben;infeld(k*4-1).
+gibleerenbildschirm:infeld(2);standardfelderausgeben;infeld(3);IF znr=1THEN
+neu:=TRUE ;FI ;LEAVE erfasstefelderausgeben.loeschedbinh:FOR iFROM 1UPTO
+bearbzlREP dbsatzbsnr(i):=0;dbinh(i).fach:="";dbinh(i).art:="";dbinh(i).wstd
+:="";dbinh(i).anz:="";PER .loeschefelder:FOR iFROM 1UPTO bearbzlREP dbinh(i).
+fach:="";dbinh(i).art:="";dbinh(i).wstd:="";dbinh(i).anz:="";PER ;
+standardstartproc(bearbmaske);standardkopfmaskeaktualisieren(maskenkopferg);
+standardmaskenfeld(eingbldsch(jgstfeldnr),2).END PROC erfasstefelderausgeben;
+PROC gibbearbzeileaus:merkdbwerte;standardmaskenfeld(fa,k*4-1);
+standardmaskenfeld(ar,k*4);standardmaskenfeld(ws,k*4+1);standardmaskenfeld(an
+,k*4+2);IF k<bearbzlTHEN kINCR 1FI .merkdbwerte:fa:=wert(fnrfangfach);ar:=
+wert(fnrfangart);ws:=wert(fnrfangwochenstd);an:=wert(fnrfanganzlv);dbinh(k).
+fach:=fa;dbinh(k).art:=ar;dbinh(k).wstd:=ws;dbinh(k).anz:=an;anzdbsaetzeINCR
+1;dbsatzbsnr(k):=k.END PROC gibbearbzeileaus;BOOL PROC pruefung(INT CONST i):
+int(eingbldsch(jgstfeldnr))=intwert(fnrfangjgst)CAND geplschhj=wert(fnrfanghj
+)CAND geplschj=wert(fnrfangsj)END PROC pruefung;PROC merkeeingsch:FOR iFROM 1
+UPTO 10REP eingbldsch(i):=standardmaskenfeld(i)PER ;END PROC merkeeingsch;
+PROC fachcat(BOOL VAR b):fachkatalogCAT wert(fnrffach)+trenner;END PROC
+fachcat;PROC artcat(BOOL VAR b):IF wert(fnrschlsachgebiet)>artCOR dbstatus<>0
+THEN b:=TRUE ELSE artkatalogCAT wert(fnrschlschluessel)+trennerFI END PROC
+artcat;PROC merkebearbsch:anzbssaetze:=0;FOR iFROM 1UPTO letztebearbzeileREP
+bearbbldsch(i).fach:=standardmaskenfeld((i-1)*4+3);bearbbldsch(i).art:=
+standardmaskenfeld((i-1)*4+4);bearbbldsch(i).wstd:=standardmaskenfeld((i-1)*4
++5);bearbbldsch(i).anz:=standardmaskenfeld((i-1)*4+6);IF compress(bearbbldsch
+(i).fach)<>""THEN anzbssaetzeINCR 1FI PER ;IF letztebearbzeile<bearbzlTHEN
+FOR iFROM letztebearbzeile+1UPTO bearbzlREP bearbbldsch(i).fach:="";
+bearbbldsch(i).art:="";bearbbldsch(i).wstd:="";bearbbldsch(i).anz:="";PER FI
+END PROC merkebearbsch;PROC fachangzurueckmitmeldg(INT CONST meldg,
+ruecksprung,feld,TEXT CONST markiert):standardmeldung(meldg,markiert);IF feld
+>0THEN infeld(feld)FI ;IF ruecksprung>0THEN return(ruecksprung)FI END PROC
+fachangzurueckmitmeldg;PROC fachanguebern(BOOL CONST b):IF bTHEN IF aktschhj=
+"0"THEN holeakthjFI ;letztejgst:=1;IF f2THEN uebernaktkompELIF f3THEN
+uebernaktpartELIF f6THEN ueberngeplpartFI ;aenderungsvermerksetzen(
+kennzeichnunggeplant)ELSE standardmeldung(meldg4,"");infeld(2);return(2)FI
+END PROC fachanguebern;PROC uebernaktkomp:putwert(fnrfangsj,aktschj);putwert(
+fnrfanghj,aktschhj);putintwert(fnrfangjgst,0);putintwert(fnrfanglfdnr,1);
+search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
+meldungdatennichtuebernommenELIF wert(fnrfangsj)<>aktschjCAND wert(fnrfanghj)
+<>aktschhjTHEN meldungdatennichtuebernommenELSE savetupel(dnrfaecherangebot,
+tupel);loeschevorhandenesaetze(2);restoretupel(dnrfaecherangebot,tupel);
+schreibtupelFI ;korrtupelindbpuffer;succ(dnrfaecherangebot);WHILE dbstatus=ok
+CAND wert(fnrfanghj)=aktschhjCAND wert(fnrfangsj)=aktschjREP schreibtupel;
+korrtupelindbpuffer;succ(dnrfaecherangebot);PER ;meldungdatenuebernommen.
+meldungdatenuebernommen:return(2);standardmeldung(meldg3,"");LEAVE
+uebernaktkomp.meldungdatennichtuebernommen:return(2);standardmeldung(meldg13,
+"");LEAVE uebernaktkomp.schreibtupel:putwert(fnrfangsj,geplschj);putwert(
+fnrfanghj,geplschhj);putintwert(fnrfangjgst,intwert(fnrfangjgst));putintwert(
+fnrfanglfdnr,intwert(fnrfanglfdnr));putwert(fnrfangfach,wert(fnrfangfach));
+putwert(fnrfangart,wert(fnrfangart));putintwert(fnrfangwochenstd,intwert(
+fnrfangwochenstd));putintwert(fnrfanganzlv,intwert(fnrfanganzlv));IF intwert(
+fnrfangjgst)<>letztejgstTHEN standardmeldung(meldg14,text(intwert(fnrfangjgst
+))+"#");letztejgst:=intwert(fnrfangjgst);FI ;insert(dnrfaecherangebot).
+korrtupelindbpuffer:putwert(fnrfangsj,aktschj);putwert(fnrfanghj,aktschhj).
+END PROC uebernaktkomp;PROC uebernaktpart:putwert(fnrfangsj,aktschj);putwert(
+fnrfanghj,aktschhj);putintwert(fnrfangjgst,int(eingbldsch(4)));putintwert(
+fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
+meldungdatennichtuebernommenELIF intwert(fnrfangjgst)=int(eingbldsch(4))CAND
+wert(fnrfanghj)=aktschhjCAND wert(fnrfangsj)=aktschjTHEN savetupel(
+dnrfaecherangebot,tupel);loeschevorhandenesaetze(5);restoretupel(
+dnrfaecherangebot,tupel);standardmeldung(meldg14,eingbldsch(5)+"#");
+schreibtupelELSE meldungdatennichtuebernommenFI ;korrtupelindbpuffer;succ(
+dnrfaecherangebot);WHILE dbstatus=okCAND intwert(fnrfangjgst)=int(eingbldsch(
+4))CAND wert(fnrfanghj)=aktschhjCAND wert(fnrfangsj)=aktschjREP schreibtupel;
+korrtupelindbpuffer;succ(dnrfaecherangebot);PER ;meldungdatenuebernommen.
+meldungdatenuebernommen:return(2);standardmeldung(meldg3,"");LEAVE
+uebernaktpart.meldungdatennichtuebernommen:return(2);standardmeldung(meldg13,
+"");LEAVE uebernaktpart.schreibtupel:putwert(fnrfangsj,geplschj);putwert(
+fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(5)));putintwert(
+fnrfanglfdnr,intwert(fnrfanglfdnr));putwert(fnrfangfach,wert(fnrfangfach));
+putwert(fnrfangart,wert(fnrfangart));putintwert(fnrfangwochenstd,intwert(
+fnrfangwochenstd));putintwert(fnrfanganzlv,intwert(fnrfanganzlv));insert(
+dnrfaecherangebot).korrtupelindbpuffer:putwert(fnrfangsj,aktschj);putwert(
+fnrfanghj,aktschhj);putintwert(fnrfangjgst,int(eingbldsch(4))).END PROC
+uebernaktpart;PROC ueberngeplpart:putwert(fnrfangsj,geplschj);putwert(
+fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(7)));putintwert(
+fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
+meldungdatennichtuebernommenELIF wert(fnrfangsj)<>geplschjCAND intwert(
+fnrfangjgst)<>int(eingbldsch(7))CAND wert(fnrfanghj)<>geplschhjTHEN
+meldungdatennichtuebernommenELSE savetupel(dnrfaecherangebot,tupel);
+loeschevorhandenesaetze(8);restoretupel(dnrfaecherangebot,tupel);
+standardmeldung(meldg14,eingbldsch(8)+"#");schreibtupelFI ;
+korrtupelindbpuffer;succ(dnrfaecherangebot);WHILE dbstatus=okCAND intwert(
+fnrfangjgst)=int(eingbldsch(7))CAND wert(fnrfanghj)=geplschhjCAND wert(
+fnrfangsj)=geplschjREP schreibtupel;korrtupelindbpuffer;succ(
+dnrfaecherangebot);PER ;meldungdatenuebernommen.meldungdatenuebernommen:
+return(2);standardmeldung(meldg3,"");LEAVE ueberngeplpart.
+meldungdatennichtuebernommen:return(2);standardmeldung(meldg13,"");LEAVE
+ueberngeplpart.schreibtupel:putwert(fnrfangsj,geplschj);putwert(fnrfanghj,
+geplschhj);putintwert(fnrfangjgst,int(eingbldsch(8)));putintwert(fnrfanglfdnr
+,intwert(fnrfanglfdnr));putwert(fnrfangfach,wert(fnrfangfach));putwert(
+fnrfangart,wert(fnrfangart));putintwert(fnrfangwochenstd,intwert(
+fnrfangwochenstd));putintwert(fnrfanganzlv,intwert(fnrfanganzlv));insert(
+dnrfaecherangebot).korrtupelindbpuffer:putintwert(fnrfangjgst,int(eingbldsch(
+7))).END PROC ueberngeplpart;PROC loeschevorhandenesaetze(INT CONST feld):
+inittupel(dnrfaecherangebot);IF feld=2THEN putwert(fnrfangsj,geplschj);
+putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,0);putintwert(
+fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
+letztejgst:=1;LEAVE loeschevorhandenesaetzeELIF wert(fnrfangsj)=geplschjCAND
+wert(fnrfanghj)=geplschhjTHEN standardmeldung(meldg15,text(intwert(
+fnrfangjgst))+"#");letztejgst:=intwert(fnrfangjgst);WHILE wert(fnrfanghj)=
+geplschhjCAND dbstatus=okCAND wert(fnrfangsj)=geplschjREP IF intwert(
+fnrfangjgst)<>letztejgstTHEN standardmeldung(meldg15,text(intwert(fnrfangjgst
+))+"#");letztejgst:=intwert(fnrfangjgst);FI ;delete(dnrfaecherangebot);succ(
+dnrfaecherangebot)PER ;FI ELSE putwert(fnrfangsj,geplschj);putwert(fnrfanghj,
+geplschhj);putintwert(fnrfangjgst,int(eingbldsch(feld)));putintwert(
+fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
+letztejgst:=1;LEAVE loeschevorhandenesaetzeELIF intwert(fnrfangjgst)=int(
+eingbldsch(feld))CAND wert(fnrfangsj)=geplschjCAND wert(fnrfanghj)=geplschhj
+THEN standardmeldung(meldg15,eingbldsch(feld)+"#");WHILE intwert(fnrfangjgst)
+=int(eingbldsch(feld))CAND wert(fnrfanghj)=geplschhjCAND wert(fnrfangsj)=
+geplschjCAND dbstatus=0REP delete(dnrfaecherangebot);succ(dnrfaecherangebot)
+PER ;ELSE letztejgst:=1;LEAVE loeschevorhandenesaetzeFI FI ;END PROC
+loeschevorhandenesaetze;PROC fachangspeichern(BOOL CONST speichern):
+stelleletztebearbzeilefest;merkebearbsch;bestimmenzaehler;IF speichernTHEN
+standardmeldung(meldg18," ");fachleerurest;IF fachkatalog=trennerTHEN
+holeaktdatenFI ;speicherdaten;IF NOT saetzeunveraendertTHEN
+aenderungsvermerksetzen(kennzeichnunggeplant);FI ;standardmeldung(meldg7,"");
+FI ;naechsterbildschirm;nzaehler:=0;.fachleerurest:FOR iFROM 1UPTO bearbzl
+REP IF bearbbldsch(i).fach=""CAND (bearbbldsch(i).art<>""COR bearbbldsch(i).
+wstd<>""COR bearbbldsch(i).anz<>"")THEN fachangzurueckmitmeldg(meldg8,1,(i*4-
+1),"");LEAVE fachangspeichernFI PER .speicherdaten:pruefefachartkombination;
+standardmeldung(meldg19," ");IF NOT neuCAND nzaehler>0CAND anzdbsaetze<
+anzbssaetze+nzaehlerCAND letztebearbzeile>0THEN korrigieredbsaetzerueckwFI ;
+behandlebildschirmsaetze;IF NOT neuCAND anzbssaetze<anzdbsaetze-nzaehlerCAND
+letztebearbzeile>0THEN korrigieredbsaetzevorwFI .bestimmenzaehler:FOR iFROM
+anzdbsaetzeDOWNTO 1REP IF dbsatzbsnr(i)<bearbzl+1THEN nzaehler:=anzdbsaetze-i
+;LEAVE bestimmenzaehlerFI PER .pruefefachartkombination:dbzeiger:=1;
+saetzeunveraendert:=TRUE ;FOR iFROM 1UPTO letztebearbzeileREP istfehler:=
+FALSE ;IF compress(bearbbldsch(i).fach)<>""THEN IF neuTHEN pruefesatz;
+pruefefachart(i,1);IF bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");
+LEAVE fachangspeichernFI ;ELIF NOT neuCAND neuersatzTHEN pruefesatz;
+pruefefachart(i,3);IF bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");
+LEAVE fachangspeichernELIF dbfa2THEN pruefobvorhergeaendert;FI ;ELIF
+geaendertersatzTHEN pruefesatz;IF fachartgeaendertCOR (nzaehler>0CAND i>
+ersteeinfuegezeile)THEN pruefefachart(i,3);FI ;modifsatzgeprueft:=TRUE ;IF
+bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");LEAVE fachangspeichern
+ELIF dbfa2THEN pruefobvorhergeaendert;FI ;IF geaenderteraltersatzTHEN
+dbzeigerINCR 1FI ELIF unveraendertersatzTHEN ueberpruefesonderfall;dbzeiger
+INCR 1FI ;ELSE pruefobgeloeschtersatzFI PER .ueberpruefesonderfall:IF
+nzaehler>0CAND i>ersteeinfuegezeileTHEN pruefefachart(i,3);modifsatzgeprueft
+:=TRUE ;IF bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");LEAVE
+fachangspeichernELIF dbfa2THEN pruefobvorhergeaendert;FI ;FI .
+pruefobgeloeschtersatz:FOR kFROM i+1UPTO bearbzlREP IF bearbbldsch(k).fach<>
+""THEN IF bearbbldsch(k).fach=dbinh(k).fachCAND bearbbldsch(k).art=dbinh(k).
+artCAND bearbbldsch(k).wstd=dbinh(k).wstdCAND bearbbldsch(k).anz=dbinh(k).anz
+THEN dbzeigerINCR 1;LEAVE pruefobgeloeschtersatzFI FI PER .
+geaenderteraltersatz:FOR kFROM i+1UPTO bearbzlREP IF bearbbldsch(k).fach<>""
+CAND dbzeiger<bearbzlTHEN IF bearbbldsch(k).fach=dbinh(dbzeiger).fachCAND
+bearbbldsch(k).art=dbinh(dbzeiger).artCAND bearbbldsch(k).wstd=dbinh(dbzeiger
+).wstdCAND bearbbldsch(k).anz=dbinh(dbzeiger).anzTHEN LEAVE
+geaenderteraltersatzWITH FALSE ELSE LEAVE geaenderteraltersatzWITH TRUE FI
+FI PER ;TRUE .stelleletztebearbzeilefest:letztebearbzeile:=0;FOR iFROM
+bearbzlDOWNTO 1REP IF standardmaskenfeld((i-1)*4+3)<>""COR standardmaskenfeld
+((i-1)*4+4)<>""THEN letztebearbzeile:=i;LEAVE stelleletztebearbzeilefestFI
+PER .neuersatz:i+z1dbnr-1>=z1dbnr+anzdbsaetze-nzaehlerCAND (bearbbldsch(i).
+fach<>dbinh(dbzeiger).fachCAND bearbbldsch(i).art<>dbinh(dbzeiger).artCAND
+bearbbldsch(i).wstd<>dbinh(dbzeiger).wstdCAND bearbbldsch(i).anz<>dbinh(
+dbzeiger).anz).geaendertersatz:bearbbldsch(i).fach<>dbinh(dbzeiger).fachCOR
+bearbbldsch(i).art<>dbinh(dbzeiger).artCOR bearbbldsch(i).wstd<>dbinh(
+dbzeiger).wstdCOR bearbbldsch(i).anz<>dbinh(dbzeiger).anz.fachartgeaendert:
+bearbbldsch(i).fach<>dbinh(dbzeiger).fachCOR bearbbldsch(i).art<>dbinh(
+dbzeiger).art.unveraendertersatz:bearbbldsch(i).fach=dbinh(dbzeiger).fachCOR
+bearbbldsch(i).art=dbinh(dbzeiger).artCOR bearbbldsch(i).wstd=dbinh(dbzeiger)
+.wstdCOR bearbbldsch(i).anz=dbinh(dbzeiger).anz.behandlebildschirmsaetze:
+dbzeiger:=1;FOR bszeigerFROM 1UPTO letztebearbzeileREP infeld((bszeiger-1)*4+
+3);IF compress(bearbbldsch(bszeiger).fach)<>""THEN IF NOT satzgeaendert(
+dbzeiger,bszeiger)THEN dbzeigerINCR 1ELIF dbinh(dbzeiger).fach<>""CAND
+dbsatzbsnr(dbzeiger)<bearbzl+1THEN aenderesatz;dbzeigerINCR 1ELSE
+schreibesatz;FI FI ;PER ;IF dbzeiger<bearbzl+1CAND dbinh(dbzeiger).fach<>""
+CAND anzdbsaetze>anzbssaetze+nzaehlerTHEN FOR iFROM 1UPTO zuloeschendesaetze
+REP loeschesatz;dbzeigerINCR 1PER FI ;dbzeiger:=1;bszeiger:=1.
+zuloeschendesaetze:anzdbsaetze-anzbssaetze-nzaehler.schreibesatz:IF
+saetzeunveraendertTHEN saetzeunveraendert:=FALSE FI ;putwert(fnrfangsj,
+geplschj);putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(
+jgstfeldnr)));putintwert(fnrfanglfdnr,z1dbnr+dbzeiger-1);dbzeigerINCR 1;
+putwert(fnrfangfach,bearbbldsch(bszeiger).fach);putwert(fnrfangart,
+bearbbldsch(bszeiger).art);putintwert(fnrfangwochenstd,int(bearbbldsch(
+bszeiger).wstd));putintwert(fnrfanganzlv,int(bearbbldsch(bszeiger).anz));
+insert(dnrfaecherangebot);neu:=FALSE .aenderesatz:IF saetzeunveraendertTHEN
+saetzeunveraendert:=FALSE FI ;putwert(fnrfangsj,geplschj);putwert(fnrfanghj,
+geplschhj);putintwert(fnrfangjgst,int(eingbldsch(jgstfeldnr)));putintwert(
+fnrfanglfdnr,dbzeiger+z1dbnr-1);search(dnrfaecherangebot,TRUE );putwert(
+fnrfangfach,bearbbldsch(bszeiger).fach);putwert(fnrfangart,bearbbldsch(
+bszeiger).art);putintwert(fnrfangwochenstd,int(bearbbldsch(bszeiger).wstd));
+putintwert(fnrfanganzlv,int(bearbbldsch(bszeiger).anz));update(
+dnrfaecherangebot).loeschesatz:IF saetzeunveraendertTHEN saetzeunveraendert:=
+FALSE FI ;putwert(fnrfangsj,geplschj);putwert(fnrfanghj,geplschhj);putintwert
+(fnrfangjgst,int(eingbldsch(jgstfeldnr)));putintwert(fnrfanglfdnr,dbzeiger+
+z1dbnr-1);search(dnrfaecherangebot,TRUE );IF dbstatus<>okTHEN errorstop(
+"Systemfehler, zu löschenden Satz nicht gefunden !")FI ;delete(
+dnrfaecherangebot).korrigieredbsaetzevorw:IF saetzeunveraendertTHEN
+saetzeunveraendert:=FALSE FI ;suchedbsatz(geplschj,geplschhj,int(eingbldsch(
+jgstfeldnr)),bearbbldsch(letztebearbzeile).fach,bearbbldsch(letztebearbzeile)
+.art,bearbbldsch(letztebearbzeile).wstd,bearbbldsch(letztebearbzeile).anz);
+REP succ(dnrfaecherangebot);IF dbstatus=okCAND intwert(fnrfangjgst)=int(
+eingbldsch(jgstfeldnr))CAND wert(fnrfanghj)=geplschhjCAND wert(fnrfangsj)=
+geplschjTHEN putintwert(fnrfanglfdnr,intwert(fnrfanglfdnr)-zuloeschendesaetze
+);update(dnrfaecherangebot);ELSE LEAVE korrigieredbsaetzevorwFI UNTIL intwert
+(fnrfangjgst)<>int(eingbldsch(jgstfeldnr))PER .korrigieredbsaetzerueckw:IF
+saetzeunveraendertTHEN saetzeunveraendert:=FALSE FI ;putwert(fnrfangsj,
+geplschj);putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(
+jgstfeldnr)));putintwert(fnrfanglfdnr,maxint);search(dnrfaecherangebot,FALSE
+);REP pred(dnrfaecherangebot);IF intwert(fnrfangjgst)=int(eingbldsch(
+jgstfeldnr))CAND wert(fnrfanghj)=geplschhjCAND nichtbssatzCAND wert(fnrfangsj
+)=geplschjTHEN putintwert(fnrfanglfdnr,intwert(fnrfanglfdnr)+anzbssaetze-
+anzdbsaetze+nzaehler);update(dnrfaecherangebot);ELSE LEAVE
+korrigieredbsaetzerueckwFI PER .nichtbssatz:intwert(fnrfanglfdnr)>z1dbnr+
+anzdbsaetze-1-nzaehler.naechsterbildschirm:j:=1;IF speichernTHEN IF
+anzbssaetze=bearbzlCOR anzdbsaetze=bearbzlCOR nzaehler>0THEN zeignrINCR
+anzbssaetze;erfasstefelderausgeben(zeignr);return(1);ELSE zeignr:=1;enter(2);
+FI ELSE IF anzdbsaetze<bearbzlCAND nzaehler=0THEN zeignr:=1;enter(2);ELSE
+zeignrINCR anzdbsaetze-nzaehler;erfasstefelderausgeben(zeignr);return(1);FI
+FI .pruefobvorhergeaendert:IF intwert(fnrfanglfdnr)<z1dbnrCOR intwert(
+fnrfanglfdnr)>z1dbnr+anzdbsaetze-1-nzaehlerTHEN fachangzurueckmitmeldg(meldg9
+,1,i*4-1,"");LEAVE fachangspeichernFI .pruefesatz:pruefdbfd(bearbbldsch(i).
+fach,fachkatalog);raus;pruefdbfd(bearbbldsch(i).art,artkatalog);raus;IF
+bearbbldsch(i).wstd<>""THEN prueftypfd(i*4+1);raus;FI ;IF bearbbldsch(i).anz
+<>""THEN prueftypfd(i*4+2);rausFI .raus:IF istfehlerTHEN return(1);LEAVE
+fachangspeichernFI .END PROC fachangspeichern;PROC suchedbsatz(TEXT CONST
+supsj,supshj,INT CONST supjgst,TEXT CONST fach,art,wstd,anz):putwert(
+fnrfangsj,supsj);putwert(fnrfanghj,supshj);putintwert(fnrfangjgst,supjgst);
+putintwert(fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF NOT (dbstatus=
+okCAND wert(fnrfanghj)=supshjCAND intwert(fnrfangjgst)=supjgstCAND wert(
+fnrfangsj)=supsjCAND wert(fnrfangfach)=fachCAND wert(fnrfangart)=artCAND
+intwert(fnrfangwochenstd)=int(wstd)CAND intwert(fnrfanganzlv)=int(anz))THEN
+REP succ(dnrfaecherangebot);IF dbstatus=okCAND wert(fnrfanghj)=supshjCAND
+intwert(fnrfangjgst)=supjgstCAND wert(fnrfangsj)=supsjCAND wert(fnrfangfach)=
+fachCAND wert(fnrfangart)=artCAND intwert(fnrfangwochenstd)=int(wstd)CAND
+intwert(fnrfanganzlv)=int(anz)THEN LEAVE suchedbsatzFI UNTIL dbstatus<>okPER
+FI .END PROC suchedbsatz;PROC pruefefachart(INT CONST i,p):IF neuTHEN
+pruefbldschELSE pruefbldsch;pruefdbFI .pruefbldsch:bldfa2:=FALSE ;FOR jFROM 1
+UPTO i-1REP IF j<anzdbsaetze+1THEN IF NOT neuCAND NOT (satzgeaendert(j,j)
+CAND modifsatzgeprueft)THEN vergleichesaetzeFI FI PER ;FOR jFROM i+1UPTO
+letztebearbzeileREP IF bearbbldsch(i).fach=bearbbldsch(j).fachCAND
+bearbbldsch(i).art=bearbbldsch(j).artTHEN bldfa2:=TRUE ;LEAVE pruefefachart
+FI PER .vergleichesaetze:IF bearbbldsch(i).fach=bearbbldsch(j).fachCAND
+bearbbldsch(i).art=bearbbldsch(j).artTHEN bldfa2:=TRUE ;LEAVE pruefefachart
+FI .pruefdb:dbfa2:=FALSE ;putwert(fnrfangsj,geplschj);putwert(fnrfanghj,
+geplschhj);putwert(fnrfangfach,bearbbldsch(i).fach);putintwert(fnrfangjgst,
+int(eingbldsch(jgstfeldnr)));putwert(fnrfangart,bearbbldsch(i).art);
+putintwert(fnrfanglfdnr,1);search(ixfangsjhjfach,TRUE );IF dbstatus=okCAND
+wert(fnrfangart)=bearbbldsch(i).artCAND intwert(fnrfangjgst)=int(eingbldsch(
+jgstfeldnr))THEN IF p=1THEN dbfa2:=TRUE ;LEAVE pruefefachartELIF p=3THEN IF
+intwert(fnrfanglfdnr)<>z1dbnr+i-1THEN dbfa2:=TRUE ;LEAVE pruefefachartELIF
+nzaehler>0CAND i>ersteeinfuegezeileTHEN dbfa2:=TRUE ;LEAVE pruefefachartFI
+FI ELSE REP pruefnachfolger;UNTIL nachfolgerfalschPER FI .nachfolgerfalsch:
+dbstatus<>okCOR wert(fnrfangfach)<>bearbbldsch(i).fachCOR wert(fnrfangsj)<>
+geplschjCOR wert(fnrfanghj)<>geplschhjCOR intwert(fnrfangjgst)>int(eingbldsch
+(jgstfeldnr)).pruefnachfolger:succ(ixfangsjhjfach);IF dbstatus=okCAND wert(
+fnrfanghj)=geplschhjCAND intwert(fnrfangjgst)=int(eingbldsch(jgstfeldnr))
+CAND wert(fnrfangfach)=bearbbldsch(i).fachCAND wert(fnrfangart)=bearbbldsch(i
+).artCAND wert(fnrfangsj)=geplschjTHEN IF p=1THEN dbfa2:=TRUE ;LEAVE
+pruefefachartELIF p=3THEN IF intwert(fnrfanglfdnr)<>z1dbnr+i-1THEN dbfa2:=
+TRUE ;LEAVE pruefefachartELIF nzaehler>0CAND i>ersteeinfuegezeileTHEN dbfa2:=
+TRUE ;LEAVE pruefefachartFI FI FI .END PROC pruefefachart;BOOL PROC
+satzgeaendert(INT CONST dbnr,bsnr):NOT (dbinh(dbnr).fach=bearbbldsch(bsnr).
+fachCAND dbinh(dbnr).art=bearbbldsch(bsnr).artCAND dbinh(dbnr).wstd=
+bearbbldsch(bsnr).wstdCAND dbinh(dbnr).anz=bearbbldsch(bsnr).anz)END PROC
+satzgeaendert;PROC fachangmodbldsch(INT CONST iproc):SELECT iprocOF CASE 1:
+zeileneinfuegenCASE 2:zeileloeschenEND SELECT .zeileneinfuegen:aktzeile:=
+bearbfeldzuzeile(infeld);IF keinescnTHEN ersteeinfuegezeile:=aktzeile;
+keinescn:=FALSE FI ;IF aktzeile=bearbzlTHEN fachangzurueckmitmeldg(meldg16,1,
+infeld," ");LEAVE zeileneinfuegenFI ;infeld((aktzeile+1)*4-1);FOR iFROM
+bearbzl-1DOWNTO aktzeile+1REP standardmaskenfeld(standardmaskenfeld(i*4-1),(i
++1)*4-1);standardmaskenfeld(standardmaskenfeld(i*4),(i+1)*4);
+standardmaskenfeld(standardmaskenfeld(i*4+1),(i+1)*4+1);standardmaskenfeld(
+standardmaskenfeld(i*4+2),(i+1)*4+2);PER ;standardmaskenfeld("",(aktzeile+1)*
+4-1);standardmaskenfeld("",(aktzeile+1)*4);standardmaskenfeld("",(aktzeile+1)
+*4+1);standardmaskenfeld("",(aktzeile+1)*4+2);infeld((aktzeile+1)*4-1);
+standardfelderausgeben;FOR iFROM 1UPTO anzdbsaetzeREP IF dbsatzbsnr(i)>
+aktzeileTHEN dbsatzbsnr(i)INCR 1;FI PER ;return(1).zeileloeschen:loeschzeile(
+bearbfeldzuzeile(infeld)).END PROC fachangmodbldsch;INT PROC bearbfeldzuzeile
+(INT CONST feldnr):(feldnr+1)DIV 4END PROC bearbfeldzuzeile;PROC loeschzeile(
+INT CONST zeilennr):INT VAR z:=zeilennr*4;infeld(z-1);standardmaskenfeld("",z
+-1);standardmaskenfeld("",z);standardmaskenfeld("",z+1);standardmaskenfeld(""
+,z+2);standardfelderausgeben;infeld(z-1);return(1)END PROC loeschzeile;
+initrows;END PACKET planefaecherangebot;
+
diff --git a/app/schulis/2.2.1/src/4.halbjahreswechsel zum stundenplan b/app/schulis/2.2.1/src/4.halbjahreswechsel zum stundenplan
new file mode 100644
index 0000000..5955533
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.halbjahreswechsel zum stundenplan
@@ -0,0 +1,120 @@
+PACKET halbjahreswechselzumstundenplanDEFINES
+halbjahreswechselzumstundenplanvorbereiten,
+halbjahreswechselzumstundenplanstarten,halbjahreswechselzumstundenplandrucken
+:LET maske="ms halbjahreswechsel zum stundenplan";INT VAR fnraktsj:=2,
+fnrakthj:=3,fnrgeplsj:=4,fnrgeplhj:=5,fnrauskunft:=6;LET
+meldnrhalbjahreswechsellaeuft=156,meldnrinbearbeitung=352;FILE VAR prot;LET
+protname="Protokoll zum Halbjahreswechsel";LET schuljahr="Schuljahr",
+schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort";LET
+aenderungsvermerk="c02 aenderungsvermerk",wertaktuell="aktuell",wertgeplant=
+"geplant";LET erstessj=1,letztessj=9900,naechstessj=101,ersteshj=1,letzteshj=
+2;TEXT CONST meldtextanfang:="Daten für ",meldtextexist:=" existieren.",
+meldtextexistnicht:=" existierten nicht.",meldtextgeloescht:=
+" wurden gelöscht.",ueberschrift:=
+"Schulhalbjahreswechsel in Daten der Unterrichtsorganisation",untertitel1:=
+"Wechsel von Schuljahr ",untertitel2:=" zum Schuljahr ",halbjahr:=
+". Halbjahr",namestundenplan:="Stundenplan";LET strich="-",schraegstrich="/",
+doppelpunkt=":",kennzhell="#";LET laengedatname=30;TEXT VAR aktsj:="",akthj:=
+"",geplsj,geplhj;INT VAR bearbsj,bearbhj,gelesensj,gelesenhj,intaktsj,
+intakthj,intgeplsj,intgeplhj;INT VAR dateinummer;TEXT VAR auszeile,dateiname;
+LET logbucheintraghjwechsel=
+"Anw. 4.7.1 Halbjahreswechsel z. Unterrichtsorg. ";PROC
+halbjahreswechselzumstundenplanvorbereiten:standardstartproc(maske);IF aktsj=
+""THEN aktsj:=schulkenndatum(schuljahr);akthj:=schulkenndatum(schulhalbjahr)
+FI ;geplsj:=aktsj;geplhj:=akthj;geplanteshjundsjberechnen(geplhj,geplsj);
+standardmaskenfeld(aktsj,fnraktsj);standardmaskenfeld(akthj,fnrakthj);
+standardmaskenfeld(geplsj,fnrgeplsj);standardmaskenfeld(geplhj,fnrgeplhj);
+infeld(fnraktsj);standardfelderausgeben;infeld(fnrauskunft);standardnprocEND
+PROC halbjahreswechselzumstundenplanvorbereiten;PROC
+halbjahreswechselzumstundenplanstarten:standardmeldung(
+meldnrhalbjahreswechsellaeuft,"");logeintrag(logbucheintraghjwechsel+
+"gestartet");protokollvorbereiten;ausgabekopfaufbereiten;
+halbjahreswechselvorbereiten;wechselfuerbestand(dnraktschuelergruppen);
+wechselfuerbestand(dnrzeitraster);wechselfuerbestand(dnraufsichtszeiten);
+wechselfuerbestand(dnrzeitwuensche);wechselfuerbestand(dnrfaecherangebot);
+wechselfuerbestand(dnrlehrveranstaltungen);wechselfuerbestandstundenplan;
+wechselfuerbestand(dnraufsichtsplan);logeintrag(logbucheintraghjwechsel+
+"beendet");aenderungsvermerkfuerstundenplansetzen;zeigedatei(protname,"").
+protokollvorbereiten:forget(protname,quiet);prot:=sequentialfile(output,
+protname).ausgabekopfaufbereiten:putline(prot,schulkenndatum(schulname));
+putline(prot,text(schulkenndatum(schulort),65)+date);line(prot);putline(prot,
+ueberschrift);putline(prot,length(ueberschrift)*strich);line(prot);auszeile:=
+untertitel1;auszeileCAT subtext(aktsj,1,2);auszeileCAT schraegstrich;auszeile
+CAT subtext(aktsj,3,4);auszeileCAT " , ";auszeileCAT akthj;auszeileCAT
+halbjahr;putline(prot,auszeile);auszeile:=untertitel2;auszeileCAT subtext(
+geplsj,1,2);auszeileCAT schraegstrich;auszeileCAT subtext(geplsj,3,4);
+auszeileCAT " , ";auszeileCAT geplhj;auszeileCAT halbjahr;putline(prot,
+auszeile);line(prot).halbjahreswechselvorbereiten:intaktsj:=int(aktsj);
+intakthj:=int(akthj);intgeplsj:=int(geplsj);intgeplhj:=int(geplhj);
+dateinummer:=0.aenderungsvermerkfuerstundenplansetzen:inittupel(dnrschluessel
+);putwert(fnrschlsachgebiet,aenderungsvermerk);putwert(fnrschlschluessel,
+wertaktuell);search(dnrschluessel,TRUE );IF dbstatus=0THEN delete(
+dnrschluessel);FI ;putwert(fnrschlsachgebiet,aenderungsvermerk);putwert(
+fnrschlschluessel,wertgeplant);search(dnrschluessel,TRUE );IF dbstatus=0THEN
+putwert(fnrschlschluessel,wertaktuell);update(dnrschluessel);FI .END PROC
+halbjahreswechselzumstundenplanstarten;PROC wechselfuerbestand(INT CONST
+dateinr):standardmeldung(meldnrinbearbeitung,name(dateinr)+kennzhell);
+dateinamefuerausgabevorbereiten;erstensatzlesen;WHILE
+geleseneshalbjahrkleineraktuelleshalbjahrREP IF wechselliegtvorTHEN
+zeilezuhalbjahrausgeben(meldtextgeloescht,gelesensj,gelesenhj)FI ;
+satzloeschen;satzlesenPER ;IF geleseneshalbjahrgleichaktuelleshalbjahrTHEN
+zeilezuhalbjahrausgeben(meldtextgeloescht,gelesensj,gelesenhj);REP
+satzloeschen;satzlesenUNTIL NOT geleseneshalbjahrgleichaktuelleshalbjahrPER
+ELSE zeilezuhalbjahrausgeben(meldtextexistnicht,intaktsj,intakthj)FI ;IF
+geleseneshalbjahrgleichgeplanteshalbjahrTHEN zeilezuhalbjahrausgeben(
+meldtextexist,intgeplsj,intgeplhj)ELSE zeilezuhalbjahrausgeben(
+meldtextexistnicht,intgeplsj,intgeplhj)FI ;bearbsj:=gelesensj;bearbhj:=
+gelesenhj;WHILE nochsaetzedaREP IF wechselliegtvorTHEN
+zeilezuhalbjahrausgeben(meldtextexist,gelesensj,gelesenhj)FI ;
+naechsteshalbjahrsuchenPER .dateinamefuerausgabevorbereiten:line(prot);
+dateinummerINCR 1;dateiname:=text(dateinummer);dateinameCAT ". ";dateiname
+CAT name(dateinr);dateinameCAT doppelpunkt;dateiname:=text(dateiname,
+laengedatname).geleseneshalbjahrkleineraktuelleshalbjahr:dbstatus=0AND ((
+gelesensj<intaktsj)OR (gelesensj=intaktsjAND gelesenhj<intakthj)).
+geleseneshalbjahrgleichaktuelleshalbjahr:dbstatus=0AND (gelesensj=intaktsj
+AND gelesenhj=intakthj).geleseneshalbjahrgleichgeplanteshalbjahr:dbstatus=0
+AND (gelesensj=intgeplsjAND gelesenhj=intgeplhj).nochsaetzeda:dbstatus=0.
+erstensatzlesen:bearbsj:=0;bearbhj:=-1;first(dateinr);gelesensj:=intwert(
+dateinr+1);gelesenhj:=intwert(dateinr+2).satzlesen:succ(dateinr);gelesensj:=
+intwert(dateinr+1);gelesenhj:=intwert(dateinr+2).satzloeschen:delete(dateinr)
+.naechsteshalbjahrsuchen:putintwert(dateinr+2,bearbhj+1);search(dateinr,
+FALSE );gelesensj:=intwert(dateinr+1);gelesenhj:=intwert(dateinr+2).
+wechselliegtvor:IF bearbsj<>gelesensjOR bearbhj<>gelesenhjTHEN bearbsj:=
+gelesensj;bearbhj:=gelesenhj;TRUE ELSE FALSE FI .END PROC wechselfuerbestand;
+PROC wechselfuerbestandstundenplan:INT VAR fstatusstuplan;standardmeldung(
+meldnrinbearbeitung,namestundenplan+kennzhell);
+dateinamefuerausgabevorbereiten;gelesensj:=erstessj;WHILE gelesensj<=
+letztessjREP FOR gelesenhjFROM ersteshjUPTO letzteshjREP
+stundenplanhalbjahrsetzen(text(gelesenhj),gelesensjaufbereitet);IF
+geleseneshalbjahrkleineraktuelleshalbjahrTHEN IF stundenplandatenvorhanden
+THEN stundenplanbasisundstundenplanloeschen(fstatusstuplan);
+zeilezuhalbjahrausgeben(meldtextgeloescht,gelesensj,gelesenhj)FI ELIF
+geleseneshalbjahrgleichaktuelleshalbjahrTHEN IF stundenplandatenvorhanden
+THEN stundenplanbasisundstundenplanloeschen(fstatusstuplan);
+zeilezuhalbjahrausgeben(meldtextgeloescht,gelesensj,gelesenhj)ELSE
+zeilezuhalbjahrausgeben(meldtextexistnicht,gelesensj,gelesenhj)FI ELIF
+geleseneshalbjahrgleichgeplanteshalbjahrTHEN IF stundenplandatenvorhanden
+THEN zeilezuhalbjahrausgeben(meldtextexist,gelesensj,gelesenhj)ELSE
+zeilezuhalbjahrausgeben(meldtextexistnicht,gelesensj,gelesenhj)FI ELSE IF
+stundenplandatenvorhandenTHEN zeilezuhalbjahrausgeben(meldtextexist,gelesensj
+,gelesenhj)FI FI PER ;gelesensj:=gelesensj+naechstessjPER .
+geleseneshalbjahrkleineraktuelleshalbjahr:(gelesensj<intaktsj)OR (gelesensj=
+intaktsjAND gelesenhj<intakthj).geleseneshalbjahrgleichaktuelleshalbjahr:
+gelesensj=intaktsjAND gelesenhj=intakthj.
+geleseneshalbjahrgleichgeplanteshalbjahr:gelesensj=intgeplsjAND gelesenhj=
+intgeplhj.gelesensjaufbereitet:TEXT VAR ausgabesj:="000"+text(gelesensj);
+subtext(ausgabesj,length(ausgabesj)-3).dateinamefuerausgabevorbereiten:line(
+prot);dateinummerINCR 1;dateiname:=text(dateinummer);dateinameCAT ". ";
+dateinameCAT namestundenplan;dateinameCAT doppelpunkt;dateiname:=text(
+dateiname,laengedatname).END PROC wechselfuerbestandstundenplan;PROC
+zeilezuhalbjahrausgeben(TEXT CONST ergaenzung,INT CONST aussj,aushj):TEXT
+VAR ausgabesj:="000"+text(aussj);ausgabesj:=subtext(ausgabesj,length(
+ausgabesj)-3);auszeile:=dateiname;auszeileCAT meldtextanfang;auszeileCAT
+subtext(ausgabesj,1,2);auszeileCAT schraegstrich;auszeileCAT subtext(
+ausgabesj,3,4);auszeileCAT schraegstrich;auszeileCAT text(aushj);auszeileCAT
+ergaenzung;putline(prot,auszeile);dateiname:=laengedatname*" ".END PROC
+zeilezuhalbjahrausgeben;PROC halbjahreswechselzumstundenplandrucken(BOOL
+CONST drucken):IF druckenTHEN print(protname)FI ;forget(protname,quiet);enter
+(2)END PROC halbjahreswechselzumstundenplandrucken;END PACKET
+halbjahreswechselzumstundenplan
+
diff --git a/app/schulis/2.2.1/src/4.konsistenzpruefung b/app/schulis/2.2.1/src/4.konsistenzpruefung
new file mode 100644
index 0000000..bd95a94
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.konsistenzpruefung
@@ -0,0 +1,274 @@
+PACKET konsistenzpruefungDEFINES konsistenzpruefungstarten,
+konsistenzpruefungprotokolldrucken:INT VAR fnrgeplhj:=2,fnrakthj:=3;LET
+meldnrinbearbeitung=352,meldnrstundenplanwirdaufbereitet=357,meldnrbasisalt=
+377;LET anschreibenserver="anschreiben server";LET fehlerzeilendatei=
+"fehlerliste konsistenzpruefung";FILE VAR fehldat;LET protname=
+"Protokoll zur Konsistenzprüfung";FILE VAR prot;LET sachgebietraum=
+"c02 raeume",sachgebietaufsichtsorte="c02 aufsichtsorte";LET schuljahr=
+"Schuljahr",schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort=
+"Schulort";LET ueberschrift="Konsistenzprüfung zum Stundenplan",untertitel1=
+"Stundenplan zum Schuljahr ",texthalbjahr=". Halbjahr",untertitel2=
+"Prüfung am ",anfangstext="Folgende Inkonsistenzen wurden festgestellt: ";
+LET strich="-",schraegstrich="/",blank=" ",kennzhell="#",fall="Fall ",
+doppelpunkt=":",ersatzzeichen="#",awtrenner="#";LET jgst05="05",jgst13="13";
+LET kennzzeitrastersperrung="x",leerraum=" ";LET laengekennung=4,
+laengeraum=4,laengeklassengruppe=4,laengesugruppe=6,laengeparaphe=4,
+laengefach=2,laengekopplung=8,laengelv=8,laengeorte=4,laengeaufsichtszeit=3;
+LET kennungkopplung="K",kennungparaphe="P",kennunglv="L",kennungraum="R";LET
+maxlehrer=255;LET erstestunde=1,letztestunde=66;LET bezugfach="f",
+bezugsugruppe="s",bezugparaphe="l",bezugraum="r",bezugkopplung="k",
+bezugtextfach="Fach",bezugtextsugruppe="Schülergruppe",bezugtextparaphe=
+"Paraphe",bezugtextraum="Raum",bezugtextkopplung="Kopplung";TEXT VAR aktsj:=
+"",akthj:="",gewsj,gewhj;TEXT VAR auszeile,zeile,suchfall;TEXT VAR
+klassengruppe,raumgruppe,jgst,fach,paraphe,lv,raum,ort,aufsichtszeit,kopplung
+,neuekopplung,neueparaphe;TEXT VAR gueltigeschuelergruppen,
+gueltigeklassengruppen,gueltigeraumgruppen,gueltigeraeume,gueltigefaecher,
+gueltigeparaphen,gueltigelv,gueltigekopplungen,gueltigeaufsichtszeiten,
+gueltigeaufsichtsorte;TEXT VAR fehlerhafteklassengruppen,
+fehlerhafteraumgruppen,fehlerhaftelv;TEXT VAR zeitrasterleiste;INT VAR
+ifehler,ilehrer;ROW maxlehrerINT VAR lehrersollstd;ROW maxlehrerINT VAR
+lehreriststd;INT VAR posraum,poslv,posparaphe;INT VAR izeit;PROC
+konsistenzpruefungstarten:INT VAR fnrfehler:=0;standardpruefe(5,fnrgeplhj,
+fnrakthj,0,"",fnrfehler);IF fnrfehler<>0THEN infeld(fnrfehler);return(1)ELSE
+pruefungstartenFI .pruefungstarten:IF aktsj=""THEN aktsj:=schulkenndatum(
+schuljahr);akthj:=schulkenndatum(schulhalbjahr)FI ;gewsj:=aktsj;gewhj:=akthj;
+IF standardmaskenfeld(fnrgeplhj)<>""THEN geplanteshjundsjberechnen(gewhj,
+gewsj);FI ;protokollvorbereiten;ausgabekopfaufbereiten;
+pruefungklassengruppendurchfuehren;pruefungraumgruppendurchfuehren;
+pruefunglehrveranstaltungendurchfuehren;
+pruefunglehrerstundenzahlendurchfuehren;pruefungzeitwuenschedurchfuehren;
+pruefungstundenplandurchfuehren;pruefungaufsichtsplandurchfuehren;
+ausgabefussaufbereiten;zeigedatei(protname,"").protokollvorbereiten:forget(
+fehlerzeilendatei,quiet);fetch(fehlerzeilendatei,/anschreibenserver);fehldat
+:=sequentialfile(modify,fehlerzeilendatei);forget(protname,quiet);prot:=
+sequentialfile(output,protname);ifehler:=0.ausgabekopfaufbereiten:putline(
+prot,schulkenndatum(schulname));putline(prot,schulkenndatum(schulort));line(
+prot);putline(prot,20*blank+ueberschrift);putline(prot,20*blank+length(
+ueberschrift)*strich);line(prot);auszeile:=untertitel1;auszeileCAT subtext(
+gewsj,1,2);auszeileCAT schraegstrich;auszeileCAT subtext(gewsj,3,4);auszeile
+CAT ", ";auszeileCAT gewhj;auszeileCAT texthalbjahr;putline(prot,auszeile);
+auszeile:=untertitel2;auszeileCAT date;auszeileCAT blank;auszeileCAT
+timeofday;putline(prot,auszeile);line(prot);line(prot);putline(prot,
+anfangstext);line(prot).ausgabefussaufbereiten:line(prot);IF ifehler=0THEN
+putline(prot,20*blank+"keine")ELSE putline(prot,20*blank+20*strich)FI .END
+PROC konsistenzpruefungstarten;PROC pruefungklassengruppendurchfuehren:
+standardmeldung(meldnrinbearbeitung,name(dnrklassengruppen)+kennzhell);
+holegueltigeschuelergruppen;gueltigeklassengruppen:="";
+fehlerhafteklassengruppen:="";inittupel(dnrklassengruppen);statleseschleife(
+dnrklassengruppen,"","",fnrkgklassengrp,fnrkgklassengrp,PROC
+klassengruppelesenundpruefen)END PROC pruefungklassengruppendurchfuehren;
+PROC holegueltigeschuelergruppen:gueltigeschuelergruppen:="";inittupel(
+dnraktschuelergruppen);statleseschleife(dnraktschuelergruppen,gewsj,gewhj,
+fnrsgrpsj,fnrsgrphj,PROC schuelergruppelesen)END PROC
+holegueltigeschuelergruppen;PROC schuelergruppelesen(BOOL VAR b):IF dbstatus
+<>0OR wert(fnrsgrpsj)<>gewsjOR wert(fnrsgrphj)<>gewhjTHEN b:=TRUE ELSE
+gueltigeschuelergruppenCAT jgstzweistellig(intwert(fnrsgrpjgst));
+gueltigeschuelergruppenCAT text(wert(fnrsgrpkennung),laengekennung)FI END
+PROC schuelergruppelesen;PROC klassengruppelesenundpruefen(BOOL VAR b):TEXT
+VAR sugruppe,sugruppen;INT VAR possugruppe,laengesugruppen;IF dbstatus<>0
+THEN b:=TRUE ELSE klassengruppe:=wert(fnrkgklassengrp);gueltigeklassengruppen
+CAT text(klassengruppe,laengeklassengruppe);sugruppen:=wert(fnrkgschuelergrp)
+;laengesugruppen:=length(sugruppen);possugruppe:=1;WHILE possugruppe<
+laengesugruppenREP sugruppe:=subtext(sugruppen,possugruppe,possugruppe+
+laengesugruppe-1);IF suchpos(gueltigeschuelergruppen,sugruppe,laengesugruppe)
+=0AND sugruppeistnichtjgstTHEN fehlerprotokollieren(1,klassengruppe+awtrenner
++sugruppe+awtrenner);fehlerhafteklassengruppenCAT text(klassengruppe,
+laengeklassengruppe)FI ;possugruppeINCR laengesugruppePER ;FI .
+sugruppeistnichtjgst:subtext(sugruppe,3,6)<>" ".END PROC
+klassengruppelesenundpruefen;PROC pruefungraumgruppendurchfuehren:
+standardmeldung(meldnrinbearbeitung,name(dnrraumgruppen)+kennzhell);
+holegueltigeraeume;gueltigeraumgruppen:="";fehlerhafteraumgruppen:="";
+inittupel(dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp,
+fnrrgraumgrp,PROC raumgruppelesenundpruefen)END PROC
+pruefungraumgruppendurchfuehren;PROC holegueltigeraeume:gueltigeraeume:="";
+inittupel(dnrschluessel);statleseschleife(dnrschluessel,sachgebietraum,"",
+fnrschlsachgebiet,fnrschlschluessel,PROC raumlesen);END PROC
+holegueltigeraeume;PROC raumlesen(BOOL VAR b):IF dbstatus<>0COR wert(
+fnrschlsachgebiet)>sachgebietraumTHEN b:=TRUE ELSE gueltigeraeumeCAT text(
+wert(fnrschlschluessel),laengeraum)FI END PROC raumlesen;PROC
+raumgruppelesenundpruefen(BOOL VAR b):TEXT VAR alleraeume;INT VAR
+laengeraeume;IF dbstatus<>0THEN b:=TRUE ELSE raumgruppe:=wert(fnrrgraumgrp);
+gueltigeraumgruppenCAT text(raumgruppe,laengeraum);alleraeume:=wert(
+fnrrgraeume);laengeraeume:=length(alleraeume);posraum:=1;WHILE posraum<
+laengeraeumeREP raum:=subtext(alleraeume,posraum,posraum+laengeraum-1);IF
+suchpos(gueltigeraeume,raum,laengeraum)=0THEN fehlerprotokollieren(2,
+raumgruppe+awtrenner+raum+awtrenner);fehlerhafteraumgruppenCAT text(
+raumgruppe,laengeraum)FI ;posraumINCR laengeraumPER ;FI .END PROC
+raumgruppelesenundpruefen;PROC pruefunglehrveranstaltungendurchfuehren:
+standardmeldung(meldnrinbearbeitung,name(dnrlehrveranstaltungen)+kennzhell);
+holegueltigeparaphen;holegueltigefaecher;gueltigelv:="";fehlerhaftelv:="";
+gueltigekopplungen:="";inittupel(dnrlehrveranstaltungen);statleseschleife(
+dnrlehrveranstaltungen,gewsj,gewhj,fnrlvsj,fnrlvhj,PROC lvlesenundpruefen)
+END PROC pruefunglehrveranstaltungendurchfuehren;PROC holegueltigeparaphen:
+gueltigeparaphen:="";ilehrer:=0;inittupel(dnrlehrer);statleseschleife(
+dnrlehrer,"","",fnrlparaphe,fnrlparaphe,PROC paraphelesen);END PROC
+holegueltigeparaphen;PROC paraphelesen(BOOL VAR b):IF dbstatus<>0THEN b:=
+TRUE ELSE gueltigeparaphenCAT text(wert(fnrlparaphe),laengeparaphe);ilehrer
+INCR 1;lehrersollstd(ilehrer):=intwert(fnrlsollstd);lehreriststd(ilehrer):=0
+FI END PROC paraphelesen;PROC holegueltigefaecher:gueltigefaecher:="";
+inittupel(dnrfaecher);statleseschleife(dnrfaecher,"","",fnrffach,fnrffach,
+PROC fachlesen);END PROC holegueltigefaecher;PROC fachlesen(BOOL VAR b):IF
+dbstatus<>0THEN b:=TRUE ELSE gueltigefaecherCAT text(wert(fnrffach),
+laengefach)FI END PROC fachlesen;PROC lvlesenundpruefen(BOOL VAR b):IF
+dbstatus<>0OR wert(fnrlvhj)<>gewhjOR wert(fnrlvsj)<>gewsjTHEN b:=TRUE ELSE
+lvdatenpruefenFI .lvdatenpruefen:jgst:=jgstzweistellig(intwert(fnrlvjgst));
+paraphe:=text(wert(fnrlvparaphe),laengeparaphe);fach:=subtext(wert(
+fnrlvfachkennung),1,2);lv:=jgst+wert(fnrlvfachkennung);gueltigelvCAT text(lv,
+laengelv);gueltigekopplungenCAT text(wert(fnrlvkopplung),laengekopplung);IF
+suchpos(gueltigefaecher,fach,laengefach)=0THEN fehlerprotokollieren(3,lv+
+awtrenner+fach+awtrenner);fehlerhaftelvCAT text(lv,laengelv)FI ;posparaphe:=
+suchpos(gueltigeparaphen,paraphe,laengeparaphe);IF posparaphe=0THEN
+fehlerprotokollieren(4,lv+awtrenner+paraphe+awtrenner);fehlerhaftelvCAT text(
+lv,laengelv)ELSE lehrerstundenaufsummierenFI ;INT VAR fnrklgrp;FOR fnrklgrp
+FROM fnrlvklgrp1UPTO fnrlvklgrp4REP klassengruppe:=wert(fnrklgrp);IF
+klassengruppe<>""THEN IF suchpos(gueltigeschuelergruppen,jgst+klassengruppe,
+laengesugruppe)=0THEN IF intwert(fnrlvjgst)>0THEN IF jgst<>klassengruppeTHEN
+pruefeobgueltigeklassengruppeFI ELIF klassengruppeistkeinejgstTHEN
+pruefeobgueltigeklassengruppeFI FI ;FI ;PER ;INT VAR fnrraumgrp;FOR
+fnrraumgrpFROM fnrlvraumgrp1UPTO fnrlvraumgrp2REP raum:=wert(fnrraumgrp);IF
+raum<>""THEN raum:=text(raum,laengeraum);IF suchpos(gueltigeraeume,raum,
+laengeraum)=0THEN IF suchpos(gueltigeraumgruppen,raum,laengeraum)=0THEN
+fehlerprotokollieren(7,lv+awtrenner+raum+awtrenner)ELIF suchpos(
+fehlerhafteraumgruppen,raum,laengeraum)>0THEN fehlerprotokollieren(8,lv+
+awtrenner+raum+awtrenner)FI FI ;FI ;PER ;.klassengruppeistkeinejgst:
+jgstaufber(klassengruppe)<jgst05OR jgstaufber(klassengruppe)>jgst13.
+pruefeobgueltigeklassengruppe:IF suchpos(gueltigeklassengruppen,klassengruppe
+,laengeklassengruppe)=0THEN fehlerprotokollieren(5,lv+awtrenner+klassengruppe
++awtrenner)ELIF suchpos(fehlerhafteklassengruppen,klassengruppe,
+laengeklassengruppe)>0THEN fehlerprotokollieren(6,lv+awtrenner+klassengruppe+
+awtrenner)FI .lehrerstundenaufsummieren:ilehrer:=((posparaphe-1)DIV
+laengeparaphe)+1;lehreriststd(ilehrer):=lehreriststd(ilehrer)+intwert(
+fnrlvwochenstd).END PROC lvlesenundpruefen;PROC
+pruefunglehrerstundenzahlendurchfuehren:standardmeldung(meldnrinbearbeitung,
+name(dnrlehrer)+kennzhell);ilehrer:=1;posparaphe:=1;WHILE posparaphe<length(
+gueltigeparaphen)REP IF lehreriststd(ilehrer)>lehrersollstd(ilehrer)THEN
+fehlerprotokollieren(9,subtext(gueltigeparaphen,posparaphe,posparaphe+
+laengeparaphe-1)+awtrenner);FI ;ilehrerINCR 1;posparapheINCR laengeparaphe
+PER .END PROC pruefunglehrerstundenzahlendurchfuehren;PROC
+pruefungzeitwuenschedurchfuehren:standardmeldung(meldnrinbearbeitung,name(
+dnrzeitwuensche)+kennzhell);inittupel(dnrzeitwuensche);statleseschleife(
+dnrzeitwuensche,gewsj,gewhj,fnrzwsj,fnrzwhj,PROC zeitwuenschelesenundpruefen)
+END PROC pruefungzeitwuenschedurchfuehren;PROC zeitwuenschelesenundpruefen(
+BOOL VAR b):IF dbstatus<>0OR wert(fnrzwhj)<>gewhjOR wert(fnrzwsj)<>gewsjTHEN
+b:=TRUE ELSE zeitwunschpruefenFI .zeitwunschpruefen:INT VAR bezuglaenge:=0;
+TEXT VAR bezug,bezugsobjekt,bezugtext,bezugmenge;bezug:=wert(fnrzwbezug);IF
+bezug=bezugfachTHEN bezuglaenge:=laengefach;bezugtext:=bezugtextfach;
+bezugmenge:=gueltigefaecherELIF bezug=bezugsugruppeTHEN bezuglaenge:=
+laengesugruppe;bezugtext:=bezugtextsugruppe;bezugmenge:=
+gueltigeschuelergruppenELIF bezug=bezugparapheTHEN bezuglaenge:=laengeparaphe
+;bezugtext:=bezugtextparaphe;bezugmenge:=gueltigeparaphenELIF bezug=bezugraum
+THEN bezuglaenge:=laengeraum;bezugtext:=bezugtextraum;bezugmenge:=
+gueltigeraeumeELIF bezug=bezugkopplungTHEN bezuglaenge:=laengekopplung;
+bezugtext:=bezugtextkopplung;bezugmenge:=gueltigekopplungenELSE LEAVE
+zeitwunschpruefenFI ;bezugsobjekt:=text(wert(fnrzwbezugsobjekt),bezuglaenge);
+IF suchpos(bezugmenge,bezugsobjekt,bezuglaenge)=0THEN delete(dnrzeitwuensche)
+;fehlerprotokollieren(10,bezugsobjekt+awtrenner+bezugtext+awtrenner)FI END
+PROC zeitwuenschelesenundpruefen;PROC pruefungstundenplandurchfuehren:INT
+VAR fstatusstuplan;BOOL VAR ok;stundenplanhalbjahrsetzen(gewhj,gewsj);
+standardmeldung(meldnrstundenplanwirdaufbereitet,"");
+stundenplanbasisundstundenplanholen(fstatusstuplan);IF fstatusstuplan=8THEN
+standardmeldung(meldnrbasisalt,"")FI ;IF fstatusstuplan=0OR fstatusstuplan=8
+THEN pruefestundenplan;stundenplanreorganisierenundsichern(fstatusstuplan)
+ELSE stundenplanfehlerbehandelnFI .stundenplanfehlerbehandeln:putline(prot,
+"*** Der Stundenplan wurde nicht geprüft. ***").pruefestundenplan:TEXT VAR
+lvderzeit,paraphenderzeit,kopplungenderzeit,raeumederzeit;holezeitraster;
+standardmeldung(meldnrinbearbeitung,"Stundenplan"+kennzhell);FOR izeitFROM
+erstestundeUPTO letztestundeREP lvderzeit:=datenderzeit(izeit,kennunglv);IF
+lvderzeit<>""THEN pruefeallelvderzeitFI PER .pruefeallelvderzeit:IF (
+zeitrasterleisteSUB izeit)=kennzzeitrastersperrungTHEN poslv:=1;WHILE poslv<
+length(lvderzeit)REP lv:=subtext(lvderzeit,poslv,poslv+laengelv-1);
+planeintragloeschen(izeit,lv,ok);fehlerprotokollieren(18,tagstunde(izeit,
+TRUE )+awtrenner+lv+awtrenner);poslvINCR laengelvPER ELSE
+weiterepruefungenzulvFI .weiterepruefungenzulv:paraphenderzeit:=datenderzeit(
+izeit,kennungparaphe);kopplungenderzeit:=datenderzeit(izeit,kennungkopplung);
+raeumederzeit:=datenderzeit(izeit,kennungraum);poslv:=1;WHILE poslv<length(
+lvderzeit)REP lv:=subtext(lvderzeit,poslv,poslv+laengelv-1);IF suchpos(
+gueltigelv,lv,laengelv)=0THEN planeintragloeschen(izeit,lv,ok);
+fehlerprotokollieren(11,paramlvzeit)ELIF suchpos(fehlerhaftelv,lv,laengelv)>0
+THEN fehlerprotokollieren(12,paramlvzeit)ELSE inhaltspruefungzueintragFI ;
+poslvINCR laengelvPER .inhaltspruefungzueintrag:posparaphe:=((poslv-1)DIV 2)+
+1;paraphe:=subtext(paraphenderzeit,posparaphe,posparaphe+laengeparaphe-1);
+neueparaphe:=datenzurlv(kennungparaphe,lv);IF neueparaphe<>parapheTHEN IF
+suchpos(paraphenderzeit,neueparaphe,laengeparaphe)>0THEN fehlerprotokollieren
+(14,paramparaphenwechsel)ELSE fehlerprotokollieren(13,paramparaphenwechsel);
+posraum:=posparaphe;raum:=subtext(raeumederzeit,posraum,posraum+laengeraum-1)
+;IF raum<>leerraumTHEN IF suchpos(gueltigeraeume,raum,laengeraum)=0THEN raum
+:=leerraum;fehlerprotokollieren(15,paramlvzeit)FI ;FI ;planeintragvornehmen(
+izeit,lv,raum,ok);FI ELSE posraum:=posparaphe;raum:=subtext(raeumederzeit,
+posraum,posraum+laengeraum-1);IF raum<>leerraumTHEN IF suchpos(gueltigeraeume
+,raum,laengeraum)=0THEN raum:=leerraum;fehlerprotokollieren(15,paramlvzeit);
+planeintragvornehmen(izeit,lv,raum,ok);FI ;FI ;kopplung:=subtext(
+kopplungenderzeit,poslv,poslv+laengekopplung-1);neuekopplung:=datenzurlv(
+kennungkopplung,lv);IF neuekopplung<>kopplungTHEN fehlerprotokollieren(16,
+paramkopplungswechsel);planeintragvornehmen(izeit,lv,raum,ok);kopplung:=
+neuekopplungFI ;FI ;IF schuelergruppenschnittbeizeit(izeit,kennungkopplung,
+kopplung,"")THEN fehlerprotokollieren(17,paramlvzeit)FI .END PROC
+pruefungstundenplandurchfuehren;TEXT PROC paramlvzeit:TEXT VAR param:=lv;
+paramCAT awtrenner;paramCAT tagstunde(izeit,TRUE );paramCAT awtrenner;param
+END PROC paramlvzeit;TEXT PROC paramparaphenwechsel:TEXT VAR param:=
+paramlvzeit;paramCAT paraphe;paramCAT awtrenner;paramCAT neueparaphe;param
+CAT awtrenner;paramEND PROC paramparaphenwechsel;TEXT PROC
+paramkopplungswechsel:TEXT VAR param:=paramlvzeit;paramCAT kopplung;paramCAT
+awtrenner;paramCAT neuekopplung;paramCAT awtrenner;paramEND PROC
+paramkopplungswechsel;PROC holezeitraster:zeitrasterleiste:=letztestunde*
+blank;inittupel(dnrzeitraster);statleseschleife(dnrzeitraster,gewsj,gewhj,
+fnrzrsj,fnrzrhj,PROC erstellezeitrasterleiste);END PROC holezeitraster;PROC
+erstellezeitrasterleiste(BOOL VAR b):IF wert(fnrzrsj)<>gewsjCOR wert(fnrzrhj)
+<>gewhjCOR dbstatus<>0THEN b:=TRUE ELSE IF wert(fnrzrkennungteil)=
+kennzzeitrastersperrungTHEN replace(zeitrasterleiste,intwert(fnrzrtagstunde),
+kennzzeitrastersperrung)FI FI END PROC erstellezeitrasterleiste;PROC
+pruefungaufsichtsplandurchfuehren:standardmeldung(meldnrinbearbeitung,name(
+dnraufsichtsplan)+kennzhell);holegueltigeaufsichtsorte;
+holegueltigeaufsichtszeiten;inittupel(dnraufsichtsplan);statleseschleife(
+dnraufsichtsplan,gewsj,gewhj,fnrapsj,fnraphj,PROC aufsichtenlesenundpruefen)
+END PROC pruefungaufsichtsplandurchfuehren;PROC holegueltigeaufsichtsorte:
+gueltigeaufsichtsorte:="";inittupel(dnrschluessel);statleseschleife(
+dnrschluessel,sachgebietaufsichtsorte,"",fnrschlsachgebiet,fnrschlschluessel,
+PROC aufsichtsortlesen);END PROC holegueltigeaufsichtsorte;PROC
+aufsichtsortlesen(BOOL VAR b):IF dbstatus<>0COR wert(fnrschlsachgebiet)>
+sachgebietaufsichtsorteTHEN b:=TRUE ELSE gueltigeaufsichtsorteCAT text(wert(
+fnrschlschluessel),laengeorte)FI END PROC aufsichtsortlesen;PROC
+holegueltigeaufsichtszeiten:gueltigeaufsichtszeiten:="";inittupel(
+dnraufsichtszeiten);statleseschleife(dnraufsichtszeiten,gewsj,gewhj,fnrazsj,
+fnrazhj,PROC aufsichtszeitlesen)END PROC holegueltigeaufsichtszeiten;PROC
+aufsichtszeitlesen(BOOL VAR b):IF dbstatus<>0OR wert(fnrazsj)<>gewsjOR wert(
+fnrazhj)<>gewhjTHEN b:=TRUE ELSE gueltigeaufsichtszeitenCAT text(wert(
+fnrazaufsichtszeit),laengeaufsichtszeit)FI END PROC aufsichtszeitlesen;PROC
+aufsichtenlesenundpruefen(BOOL VAR b):IF dbstatus<>0OR wert(fnraphj)<>gewhj
+OR wert(fnrapsj)<>gewsjTHEN b:=TRUE ELSE aufsichtsplandatenpruefenFI .
+aufsichtsplandatenpruefen:aufsichtszeit:=text(wert(fnrapaufsichtszeit),
+laengeaufsichtszeit);IF suchpos(gueltigeaufsichtszeiten,aufsichtszeit,
+laengeaufsichtszeit)=0THEN delete(dnraufsichtsplan);fehlerprotokollieren(19,
+aufsichtszeit+awtrenner)ELSE ort:=text(wert(fnrapaufsichtsort),laengeorte);
+IF suchpos(gueltigeaufsichtsorte,ort,laengeorte)=0THEN fehlerprotokollieren(
+20,aufsichtszeit+awtrenner+ort+awtrenner)FI ;paraphe:=text(wert(fnrapparaphe)
+,laengeparaphe);IF suchpos(gueltigeparaphen,paraphe,laengeparaphe)=0THEN
+fehlerprotokollieren(21,aufsichtszeit+awtrenner+ort+awtrenner)FI ;FI END
+PROC aufsichtenlesenundpruefen;PROC konsistenzpruefungprotokolldrucken(BOOL
+CONST drucken):IF druckenTHEN print(protname)FI ;forget(protname,quiet);enter
+(2)END PROC konsistenzpruefungprotokolldrucken;PROC fehlerprotokollieren(INT
+CONST fallnr,TEXT CONST aktwerte):TEXT VAR aktuellerwert;INT VAR awpos,
+awendepos,epos;LET maxfehler=100;IF ifehler>maxfehlerTHEN LEAVE
+fehlerprotokollierenELIF ifehler=maxfehlerTHEN putline(prot,
+"keine weitere Fehlerprotokollierung");ifehlerINCR 1;LEAVE
+fehlerprotokollierenFI ;suchfall:=fall;suchfallCAT text(fallnr);suchfallCAT
+doppelpunkt;toline(fehldat,1);col(fehldat,1);WHILE NOT eof(fehldat)REP
+downety(fehldat,suchfall);readrecord(fehldat,zeile);IF pos(zeile,suchfall)=1
+THEN down(fehldat);behandlefallELSE col(fehldat,col(fehldat)+1)FI PER .
+behandlefall:ifehlerINCR 1;auszeile:=text(ifehler);auszeileCAT ") ";INT VAR
+praefixlaenge:=length(auszeile);awpos:=1;WHILE NOT eof(fehldat)REP readrecord
+(fehldat,zeile);IF pos(zeile,fall)>0THEN line(prot);LEAVE behandlefallFI ;
+ersetzeevtlersatzzeichendurchaktuellewerte;auszeileCAT zeile;putline(prot,
+auszeile);down(fehldat);auszeile:=praefixlaenge*blankPER .
+ersetzeevtlersatzzeichendurchaktuellewerte:epos:=pos(zeile,ersatzzeichen);
+WHILE epos>0REP awendepos:=pos(aktwerte,awtrenner,awpos);aktuellerwert:=
+subtext(aktwerte,awpos,awendepos-1);awpos:=awendepos+1;change(zeile,
+ersatzzeichen,aktuellerwert);epos:=pos(zeile,ersatzzeichen,epos+length(
+aktuellerwert));PER .END PROC fehlerprotokollieren;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>4
+AND intjgst<10THEN "0"+text(intjgst)ELSE text(intjgst)FI END PROC
+jgstzweistellig;END PACKET konsistenzpruefung
+
diff --git a/app/schulis/2.2.1/src/4.lehrveranstaltungen benennen b/app/schulis/2.2.1/src/4.lehrveranstaltungen benennen
new file mode 100644
index 0000000..7965000
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.lehrveranstaltungen benennen
@@ -0,0 +1,480 @@
+PACKET lehrveranstaltungenbenennenDEFINES lehrveranstaltungenbenennenstart,
+lehrveranstaltungenuebernehmenstart,lehrveranstaltungenuebernehmen,
+bearbeitunglehrveranstaltungen,lehrveranstaltungenzeileeinfuegen,
+lehrveranstaltungenspeichern:LET maskeeingang=
+"ms lehrveranstalt benennen eingang";LET maskebearb=
+"ms lehrveranstalt benennen";LET fnrbearbeiten=2,fnrbearbaktsj=3,
+fnrbearbgeplsj=4,fnrbearbjgst=5,fnrbearbfach=6,fnrfachanguebernehmen=7,
+fnrfachangaktsj=8,fnrfachanggeplsj=9,fnrfachangjgst=10,fnrlehrveruebernehmen=
+11,fnrlehrverjgst=12;LET feldanzmaskeeingang=12;ROW feldanzmaskeeingangTEXT
+VAR feldbs1;LET felderprozeile=9;LET ersteseingabefeld=3;LET
+erstestabellenfeld=2;LET incrfuerkennung=1,incrfuerlvart=2,
+incrfuerklassengranfang=3,incrfuerklassengrende=6,incrfuerwstd=7;LET
+meldnrdatenspeichern=50,meldnrungueltigeauswahl=56,meldnrkennungzulang=60,
+meldnrdatennichtspeichern=63,meldnrbittewarten=69,meldnrbitteangabegenauer=
+129,meldnrungueltigeuebernahmejgst=146,meldnrfragedatenuebernehmen=300,
+meldnrdatenwerdenuebernommen=301,meldnrdatenwurdenuebernommen=302,
+meldnrdatenwurdennichtuebernommen=303,meldnrkeinfachzuanderenangaben=307,
+meldnrungueltigesfach=310,meldnrungueltigeart=311,
+meldnrletztezeilenichteinfuegen=314,meldnrkeinfaecherangebot=315,
+meldnruebernehmenderjgst=316,meldnrlehrveranstaltungloeschen=317,
+meldnrfalschetastezuankreuz=318,meldnrfalscheausfuellung=319,
+meldnrungueltigeklassengruppe=320,meldnrkeinelehrveranstaltungen=321,
+meldnrlehrveranstaltunggibtsschon=322,meldnrfehlerhaftejgst=305;LET kennzhell
+="#";LET textschulj="Schuljahr",texthalbj="Schulhalbjahr",ersteshalbjahr="1",
+zweiteshalbjahr="2";LET wertaktuell="aktuell",wertgeplant="geplant";LET
+artbestand="c02 art lehrveranstaltung";BOOL VAR aktuelleshalbjahrzubearbeiten
+;TEXT VAR gewschulj,gewhalbj,aktschulj:="",akthalbj:="";INT VAR gewjgst,
+startjgst,endejgst;TEXT VAR vgljgst:="",vglfach:="";INT VAR
+jgstdesletztensatzes:=0;LET fachlaenge=2;LET kennunglaenge=4;INT VAR zugriff;
+BOOL VAR eingangsmaskenfehler:=FALSE ;INT VAR pruefstatus:=0,letztecursorfnr
+:=fnrbearbeiten;INT VAR aktzeile;INT VAR ifnr,ijgst;LET trenner="�";TEXT VAR
+geprueftefaecher,gueltigeschuelergruppen:="",gueltigeklassengruppen:="",
+gueltigelvart:="";TEXT VAR pruefklasse;INT VAR pruefjgst,pruefbez;TEXT VAR
+sugruppen,sugruppejgst;INT VAR possugruppe,laengesugruppen;LET
+laengeeinersugruppe=6;LET blankzeichen=" ",trennstrich="/",
+textueberschriftanfang="Lehrveranstaltungen benennen für Halbjahr ";TEXT VAR
+ueberschrift;LET jgst0=0,jgst5=5,jgst10=10,jgst13=13;BOOL VAR gueltigejgst;
+BOOL VAR bearbeitungallerjgst;BOOL VAR leerenbszeigen;LET lvdateiname=
+"LV-Datei";FILE VAR lvdatei;TEXT VAR lvdateizeile;TEXT VAR nfschulj,nfhalbj,
+nfjgst,nffachkennung;INT VAR izeile,anzahlgezeigtezeilen,
+anzahleingegebenezeilen;LET zeilenanzahl=18;ROW zeilenanzahlSTRUCT (TEXT jgst
+,TEXT fach,TEXT kennung,TEXT kopplung,TEXT art,TEXT klasse1,TEXT klasse2,
+TEXT klasse3,TEXT klasse4,TEXT wstd)VAR bszeile;
+initfelderdeseingangsbildschirms;initbszeilepuffer;PROC
+lehrveranstaltungenbenennenstart:standardstartproc(maskeeingang);
+wertedeseingangsbildschirmsholen;infeld(fnrbearbeiten);standardfelderausgeben
+;infeld(letztecursorfnr);standardnprocEND PROC
+lehrveranstaltungenbenennenstart;PROC lehrveranstaltungenuebernehmenstart:
+BOOL VAR ausgangsdatenfehlen:=FALSE ;eingangsbehandlung(1);IF
+eingangsmaskenfehlerTHEN infeld(pruefstatus);return(1)ELSE
+wertedeseingangsbildschirmsmerken;schulhalbjahrbestimmen;IF jgstangabeleer
+THEN startjgst:=jgst0;endejgst:=jgst13ELSE startjgst:=int(vgljgst);endejgst:=
+startjgstFI ;IF standardmaskenfeld(fnrfachanguebernehmen)<>""THEN
+pruefendesfaecherangebots;IF ausgangsdatenfehlenTHEN standardmeldung(
+meldnrkeinfaecherangebot,"");return(1)ELSE standardmeldung(
+meldnrfragedatenuebernehmen,"");eingabefeldersperren(fnrfachanguebernehmen);
+standardnprocFI ELSE pruefenderlehrveranstaltungen;IF ausgangsdatenfehlen
+THEN standardmeldung(meldnrkeinelehrveranstaltungen,"");return(1)ELIF
+gewhalbj=ersteshalbjahrAND startjgst=jgst13THEN standardmeldung(
+meldnrungueltigeuebernahmejgst,"");infeld(fnrlehrverjgst);return(1)ELSE
+standardmeldung(meldnrfragedatenuebernehmen,"");eingabefeldersperren(
+fnrlehrveruebernehmen);standardnprocFI FI FI .pruefendesfaecherangebots:
+ausgangsdatenfehlen:=FALSE ;putwert(fnrfangsj,gewschulj);putwert(fnrfanghj,
+gewhalbj);putintwert(fnrfangjgst,startjgst);putintwert(fnrfanglfdnr,0);search
+(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN ausgangsdatenfehlen:=TRUE
+ELIF wert(fnrfanghj)<>gewhalbjCOR wert(fnrfangsj)<>gewschuljCOR intwert(
+fnrfangjgst)>endejgstTHEN ausgangsdatenfehlen:=TRUE FI .
+pruefenderlehrveranstaltungen:ausgangsdatenfehlen:=FALSE ;putwert(fnrlvsj,
+aktschulj);putwert(fnrlvhj,akthalbj);putintwert(fnrlvjgst,startjgst);putwert(
+fnrlvfachkennung,"");search(dnrlehrveranstaltungen,FALSE );IF dbstatus<>ok
+THEN ausgangsdatenfehlen:=TRUE ELIF wert(fnrlvhj)<>akthalbjCOR wert(fnrlvsj)
+<>aktschuljCOR intwert(fnrlvjgst)>endejgstTHEN ausgangsdatenfehlen:=TRUE FI .
+END PROC lehrveranstaltungenuebernehmenstart;PROC eingabefeldersperren(INT
+CONST fnrfreiesfeld):FOR ifnrFROM fnrbearbeitenUPTO feldanzmaskeeingangREP
+IF ifnr<>fnrfreiesfeldTHEN feldschutz(ifnr)FI PER ;infeld(fnrfreiesfeld)END
+PROC eingabefeldersperren;PROC eingabefelderfreigeben:FOR ifnrFROM
+fnrbearbeitenUPTO feldanzmaskeeingangREP feldfrei(ifnr)PER END PROC
+eingabefelderfreigeben;PROC lehrveranstaltungenuebernehmen(BOOL CONST
+uebernehmen):INT VAR letztejgst:=-1;IF uebernehmenTHEN standardmeldung(
+meldnrdatenwerdenuebernommen,"");IF standardmaskenfeld(fnrfachanguebernehmen)
+<>""THEN evtlvorhandenelehrveranstaltungenloeschen;
+neuelvausfaecherangebotschreibenELSE neuelvauslehrveranstaltungenschreibenFI
+;evtlkurswahldatenbeimuebernehmenaktualisieren;IF
+aktuelleshalbjahrzubearbeitenTHEN aenderungsvermerksetzen(wertaktuell)ELSE
+aenderungsvermerksetzen(wertgeplant)FI ;standardmeldung(
+meldnrdatenwurdenuebernommen,"")ELSE standardmeldung(
+meldnrdatenwurdennichtuebernommen,"")FI ;eingabefelderfreigeben;return(2).
+evtlkurswahldatenbeimuebernehmenaktualisieren:IF
+aktuelleshalbjahrzubearbeitenOR gewhalbj=zweiteshalbjahrTHEN FOR gewjgstFROM
+startjgstUPTO endejgstREP IF gewjgst>jgst10THEN kurswahlserverlvaktualisieren
+(text(gewjgst),text(gewjgst),gewhalbj)FI ;PER ;ELSE FOR gewjgstFROM startjgst
+UPTO endejgstREP IF gewjgst>=jgst10THEN kurswahlserverlvaktualisieren(text(
+gewjgst),text(gewjgst+1),gewhalbj)FI ;PER ;FI .
+evtlvorhandenelehrveranstaltungenloeschen:
+sucheerstelehrveranstaltungzugewhalbj;WHILE lehrveranstaltungzuloeschenREP
+meldungzumloeschenbeijgstwechsel;loeschevorhandenelehrveranstaltung;
+suchenaechstelehrveranstaltungzugewhalbjPER .
+sucheerstelehrveranstaltungzugewhalbj:putwert(fnrlvsj,gewschulj);putwert(
+fnrlvhj,gewhalbj);putintwert(fnrlvjgst,startjgst);putwert(fnrlvfachkennung,""
+);search(dnrlehrveranstaltungen,FALSE );letztejgst:=-1;.
+lehrveranstaltungzuloeschen:dbstatus=okCAND wert(fnrlvsj)=gewschuljCAND wert(
+fnrlvhj)=gewhalbjCAND intwert(fnrlvjgst)<=endejgst.
+loeschevorhandenelehrveranstaltung:delete(dnrlehrveranstaltungen).
+meldungzumloeschenbeijgstwechsel:IF intwert(fnrlvjgst)<>letztejgstTHEN
+letztejgst:=intwert(fnrlvjgst);standardmeldung(
+meldnrlehrveranstaltungloeschen,text(letztejgst)+kennzhell)FI .
+suchenaechstelehrveranstaltungzugewhalbj:succ(dnrlehrveranstaltungen).
+neuelvausfaecherangebotschreiben:letztejgst:=-1;REP
+lehrveranstaltungenzufaecherangebotschreiben;
+suchenaechstesfaecherangebotzugewhalbjUNTIL faecherangebotabgehandeltPER .
+lehrveranstaltungenzufaecherangebotschreiben:INT VAR satzanzahl:=intwert(
+fnrfanganzlv);INT VAR isatz;
+setzefestewerteausfaecherangebotfuerlehrveranstaltung;
+meldungzuruebernahmebeijgstwechsel;FOR isatzFROM 1UPTO satzanzahlREP
+setzevarwerteausfaecherangebotfuerlehrveranstaltung;insert(
+dnrlehrveranstaltungen)PER .meldungzuruebernahmebeijgstwechsel:IF intwert(
+fnrlvjgst)<>letztejgstTHEN letztejgst:=intwert(fnrlvjgst);standardmeldung(
+meldnruebernehmenderjgst,text(letztejgst)+kennzhell)FI .
+setzefestewerteausfaecherangebotfuerlehrveranstaltung:putwert(fnrlvsj,
+gewschulj);putwert(fnrlvhj,gewhalbj);putintwert(fnrlvjgst,intwert(fnrfangjgst
+));putwert(fnrlvparaphe,"");putwert(fnrlvart,wert(fnrfangart));putintwert(
+fnrlvwochenstd,intwert(fnrfangwochenstd));putwert(fnrlvklgrp1,"");putwert(
+fnrlvklgrp2,"");putwert(fnrlvklgrp3,"");putwert(fnrlvklgrp4,"");putwert(
+fnrlvraumgrp1,"");putwert(fnrlvraumgrp2,"");.
+setzevarwerteausfaecherangebotfuerlehrveranstaltung:TEXT VAR lvkennung:=text(
+wert(fnrfangart),2)+textzweistellig(isatz);putwert(fnrlvfachkennung,text(wert
+(fnrfangfach),fachlaenge)+lvkennung);putwert(fnrlvkopplung,textzweistellig(
+intwert(fnrfangjgst))+textzweistellig(intwert(fnrfanglfdnr))+lvkennung);.
+suchenaechstesfaecherangebotzugewhalbj:succ(dnrfaecherangebot).
+faecherangebotabgehandelt:NOT (dbstatus=okCAND intwert(fnrfangjgst)<=endejgst
+CAND wert(fnrfangsj)=gewschuljCAND wert(fnrfanghj)=gewhalbj).
+neuelvauslehrveranstaltungenschreiben:lvsaetzezuaktuellenjgstindateischreiben
+;evtlvorhandenelehrveranstaltungenloeschenvorbereiten;
+evtlvorhandenelehrveranstaltungenloeschen;
+lvsaetzeausdateizugeplantenjgstschreiben.
+lvsaetzezuaktuellenjgstindateischreiben:forget(lvdateiname,quiet);lvdatei:=
+sequentialfile(output,lvdateiname);standardmeldung(meldnrbittewarten,"");
+holegueltigelehrveranstaltungen.
+evtlvorhandenelehrveranstaltungenloeschenvorbereiten:IF gewhalbj=
+ersteshalbjahrAND NOT jgstangabeleerTHEN IF startjgst>=jgst5THEN startjgst
+INCR 1;endejgstINCR 1FI FI .lvsaetzeausdateizugeplantenjgstschreiben:
+letztejgst:=-1;lvdatei:=sequentialfile(input,lvdateiname);WHILE NOT eof(
+lvdatei)REP getline(lvdatei,lvdateizeile);restoretupel(dnrlehrveranstaltungen
+,lvdateizeile);putwert(fnrlvhj,gewhalbj);IF gewhalbj=ersteshalbjahrTHEN
+putwert(fnrlvsj,gewschulj);ijgst:=intwert(fnrlvjgst);IF ijgst>0THEN
+putintwert(fnrlvjgst,ijgst+1);TEXT VAR bearbkopplung:=wert(fnrlvkopplung);IF
+int(subtext(bearbkopplung,1,2))=ijgstTHEN putwert(fnrlvkopplung,
+textzweistellig(ijgst+1)+subtext(bearbkopplung,3))FI ;FI ;FI ;IF intwert(
+fnrlvjgst)>jgst13THEN LEAVE lvsaetzeausdateizugeplantenjgstschreibenELSE
+meldungzuruebernahmebeijgstwechsel;insert(dnrlehrveranstaltungen)FI PER END
+PROC lehrveranstaltungenuebernehmen;PROC holegueltigelehrveranstaltungen:
+inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,aktschulj);putwert(fnrlvhj,
+akthalbj);putintwert(fnrlvjgst,startjgst);search(dnrlehrveranstaltungen,
+FALSE );statleseschleife(dnrlehrveranstaltungen,aktschulj,akthalbj,fnrlvsj,
+fnrlvhj,PROC lehrveranstaltungindateieinlesen)END PROC
+holegueltigelehrveranstaltungen;PROC lehrveranstaltungindateieinlesen(BOOL
+VAR b):IF dbstatus<>0OR wert(fnrlvsj)<>aktschuljOR wert(fnrlvhj)<>akthalbjOR
+intwert(fnrlvjgst)>endejgstTHEN b:=TRUE ELSE savetupel(dnrlehrveranstaltungen
+,lvdateizeile);putline(lvdatei,lvdateizeile)FI END PROC
+lehrveranstaltungindateieinlesen;PROC bearbeitunglehrveranstaltungen:
+eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return(
+1)ELSE wertedeseingangsbildschirmsmerken;schulhalbjahrbestimmen;
+zugriffauflehrveranstaltungenbestimmen;erstensatzlesen;IF
+keinelehrveranstaltungengespeichertCAND bearbeitungallerjgstTHEN
+standardmeldung(meldnrkeinelehrveranstaltungen,"");return(1)ELSE
+standardstartproc(maskebearb);ueberschriftzeilezusammensetzen;
+standardkopfmaskeaktualisieren(ueberschrift);bsfuellen;infeld(
+ersteseingabefeld);standardnprocFI ;FI .
+zugriffauflehrveranstaltungenbestimmen:IF fachangabeleerTHEN zugriff:=
+ixlvsjhjkoppELIF jgstangabeleerTHEN zugriff:=ixlvsjhjkennELSE zugriff:=
+dnrlehrveranstaltungenFI .erstensatzlesen:putwert(fnrlvsj,gewschulj);putwert(
+fnrlvhj,gewhalbj);putintwert(fnrlvjgst,int(vgljgst));IF zugriff=ixlvsjhjkopp
+THEN putwert(fnrlvkopplung,textzweistellig(int(vgljgst)))ELSE putwert(
+fnrlvfachkennung,vglfach)FI ;jgstdesletztensatzes:=int(vgljgst);search(
+zugriff,FALSE );leerenbszeigen:=NOT (dbstatus=okCAND wert(fnrlvhj)=gewhalbj
+CAND wert(fnrlvsj)=gewschuljCAND (jgstangabeleerCOR intwert(fnrlvjgst)=int(
+vgljgst))CAND (fachangabeleerCOR compress(subtext(wert(fnrlvfachkennung),1,
+fachlaenge))=vglfach)).keinelehrveranstaltungengespeichert:dbstatus<>0.
+ueberschriftzeilezusammensetzen:ueberschrift:=textueberschriftanfang;
+ueberschriftCAT gewhalbj;ueberschriftCAT blankzeichen;ueberschriftCAT subtext
+(gewschulj,1,2);ueberschriftCAT trennstrich;ueberschriftCAT subtext(gewschulj
+,3,4).END PROC bearbeitunglehrveranstaltungen;BOOL PROC fachangabeleer:
+vglfach=""END PROC fachangabeleer;BOOL PROC jgstangabeleer:vgljgst=""END
+PROC jgstangabeleer;PROC bsfuellen:izeile:=0;IF NOT leerenbszeigenTHEN
+startebildschirmblock(zugriff,zeilenanzahl-1);bildschirmblock(PROC satzmerken
+,BOOL PROC (INT CONST )satzzubehandeln,0);IF dbstatus=0THEN succ(zugriff);IF
+dbstatus<>0THEN inittupel(dnrlehrveranstaltungen)FI ELSE inittupel(
+dnrlehrveranstaltungen)FI ;merkesatzalsnachfolgerELSE nffachkennung:=""FI ;
+evtlleerzeilenhinzufuegen;werteausbszeileinstandardfeldersetzen;infeld(
+erstestabellenfeld);standardfelderausgeben;.evtlleerzeilenhinzufuegen:
+anzahlgezeigtezeilen:=izeile;WHILE izeile<zeilenanzahlREP izeileINCR 1;
+bszeile(izeile).jgst:=text(jgstdesletztensatzes);bszeile(izeile).fach:="";
+bszeile(izeile).kennung:="";bszeile(izeile).kopplung:="";bszeile(izeile).art
+:="";bszeile(izeile).klasse1:="";bszeile(izeile).klasse2:="";bszeile(izeile).
+klasse3:="";bszeile(izeile).klasse4:="";bszeile(izeile).wstd:=""PER .
+werteausbszeileinstandardfeldersetzen:ifnr:=erstestabellenfeld;TEXT VAR
+letztejgst:="-1";FOR izeileFROM 1UPTO zeilenanzahlREP IF bszeile(izeile).jgst
+=letztejgstTHEN standardmaskenfeld(" ",ifnr);ELSE letztejgst:=bszeile(izeile
+).jgst;standardmaskenfeld(textzweistellig(int(letztejgst)),ifnr);FI ;
+standardmaskenfeld(bszeile(izeile).fach,ifnr+1);standardmaskenfeld(bszeile(
+izeile).kennung,ifnr+2);standardmaskenfeld(bszeile(izeile).art,ifnr+3);
+standardmaskenfeld(bszeile(izeile).klasse1,ifnr+4);standardmaskenfeld(bszeile
+(izeile).klasse2,ifnr+5);standardmaskenfeld(bszeile(izeile).klasse3,ifnr+6);
+standardmaskenfeld(bszeile(izeile).klasse4,ifnr+7);standardmaskenfeld(bszeile
+(izeile).wstd,ifnr+8);ifnrINCR felderprozeilePER .merkesatzalsnachfolger:
+nfschulj:=wert(fnrlvsj);nfhalbj:=wert(fnrlvhj);nfjgst:=wert(fnrlvjgst);
+nffachkennung:=wert(fnrlvfachkennung).END PROC bsfuellen;BOOL PROC
+satzzubehandeln(INT CONST dummynr):IF NOT (izeile<zeilenanzahlCAND dbstatus=
+okCAND wert(fnrlvsj)=gewschuljCAND wert(fnrlvhj)=gewhalbj)THEN LEAVE
+satzzubehandelnWITH FALSE FI ;IF NOT jgstangabeleerCAND intwert(fnrlvjgst)<>
+int(vgljgst)THEN LEAVE satzzubehandelnWITH FALSE FI ;IF NOT fachangabeleer
+CAND compress(subtext(wert(fnrlvfachkennung),1,fachlaenge))<>vglfachTHEN
+LEAVE satzzubehandelnWITH FALSE FI ;TRUE .END PROC satzzubehandeln;PROC
+satzmerken:izeileINCR 1;bszeile(izeile).jgst:=wert(fnrlvjgst);
+jgstdesletztensatzes:=intwert(fnrlvjgst);bszeile(izeile).fach:=compress(
+subtext(wert(fnrlvfachkennung),1,2));bszeile(izeile).kennung:=subtext(wert(
+fnrlvfachkennung),3);bszeile(izeile).kopplung:=wert(fnrlvkopplung);bszeile(
+izeile).art:=wert(fnrlvart);bszeile(izeile).klasse1:=wert(fnrlvklgrp1);
+bszeile(izeile).klasse2:=wert(fnrlvklgrp2);bszeile(izeile).klasse3:=wert(
+fnrlvklgrp3);bszeile(izeile).klasse4:=wert(fnrlvklgrp4);bszeile(izeile).wstd
+:=wert(fnrlvwochenstd);.END PROC satzmerken;PROC lehrveranstaltungenspeichern
+(BOOL CONST speichern):IF speichernTHEN plausipruefung;ELSE pruefstatus:=0FI
+;IF pruefstatus<>0THEN infeld(pruefstatus);return(1)ELSE datenspeichern(
+speichern);IF nachfolgesatzvorhandenTHEN holewertedesnachfolgersatzes;search(
+dnrlehrveranstaltungen,TRUE );IF dbstatus<>0THEN search(
+dnrlehrveranstaltungen,FALSE )FI ;izeile:=0;IF satzzubehandeln(izeile)THEN
+changeindex;leerenbszeigen:=FALSE ;setzejgstfuerneuenbildschirm;
+naechstenbildschirmzeigenELSE enter(2)FI ELIF letzteeingabezeilegefuelltTHEN
+leerenbszeigen:=TRUE ;naechstenbildschirmzeigenELSE enter(2)FI ;FI .
+nachfolgesatzvorhanden:nffachkennung<>"".letzteeingabezeilegefuellt:
+standardmaskenfeld((zeilenanzahl-1)*felderprozeile+ersteseingabefeld)<>"".
+holewertedesnachfolgersatzes:putwert(fnrlvsj,nfschulj);putwert(fnrlvhj,
+nfhalbj);putwert(fnrlvjgst,nfjgst);putwert(fnrlvfachkennung,nffachkennung).
+naechstenbildschirmzeigen:bsfuellen;infeld(ersteseingabefeld);return(1).
+setzejgstfuerneuenbildschirm:izeile:=zeilenanzahl;WHILE
+keinbezugaufletztensatzREP izeileDECR 1PER ;jgstdesletztensatzes:=int(bszeile
+(izeile).jgst);.keinbezugaufletztensatz:bszeile(izeile).fach="".END PROC
+lehrveranstaltungenspeichern;PROC datenspeichern(BOOL CONST speichern):IF
+speichernTHEN standardmeldung(meldnrdatenspeichern,"");
+datenspeicherungdurchfuehren;ELSE standardmeldung(meldnrdatennichtspeichern,
+"");FI ;END PROC datenspeichern;PROC datenspeicherungdurchfuehren:BOOL VAR
+aenderungsvermerkzusetzen:=FALSE ;FOR izeileFROM 1UPTO zeilenanzahlREP
+holevergleichswerte;IF lvzeileloeschenTHEN aenderungszeileanzeigen;
+aenderungsvermerkzusetzen:=TRUE ;altelvloeschenELIF lvzeileeinfuegenTHEN
+aenderungszeileanzeigen;aenderungsvermerkzusetzen:=TRUE ;neuelveinfuegenELIF
+lvzeileueberschreibenTHEN aenderungszeileanzeigen;aenderungsvermerkzusetzen:=
+TRUE ;altelvupdateFI PER ;IF aenderungsvermerkzusetzenTHEN IF
+aktuelleshalbjahrzubearbeitenTHEN aenderungsvermerksetzen(wertaktuell)ELSE
+aenderungsvermerksetzen(wertgeplant)FI FI .holevergleichswerte:INT VAR
+prueffnr:=fachfnrin(izeile);TEXT VAR prueffach:=standardmaskenfeld(prueffnr);
+TEXT VAR altesfach:=bszeile(izeile).fach.lvzeileloeschen:prueffach=""CAND
+altesfach<>"".altelvloeschen:setzealtesuchwerteindbpuffer;search(
+dnrlehrveranstaltungen,TRUE );IF dbstatus=0THEN delete(dnrlehrveranstaltungen
+);evtlkurswahldatenbeimbearbeitenaktualisierenFI .lvzeileeinfuegen:prueffach
+<>""CAND altesfach="".neuelveinfuegen:setzeneuewerteindbpuffer;
+setzenichtsichtbarewerteindbpuffer;insert(dnrlehrveranstaltungen);
+evtlkurswahldatenbeimbearbeitenaktualisieren.lvzeileueberschreiben:NOT (
+standardmaskenfeld(prueffnr)=bszeile(izeile).fachCAND standardmaskenfeld(
+prueffnr+1)=bszeile(izeile).kennungCAND standardmaskenfeld(prueffnr+2)=
+bszeile(izeile).artCAND standardmaskenfeld(prueffnr+3)=bszeile(izeile).
+klasse1CAND standardmaskenfeld(prueffnr+4)=bszeile(izeile).klasse2CAND
+standardmaskenfeld(prueffnr+5)=bszeile(izeile).klasse3CAND standardmaskenfeld
+(prueffnr+6)=bszeile(izeile).klasse4CAND standardmaskenfeld(prueffnr+7)=
+bszeile(izeile).wstd).altelvupdate:setzealtesuchwerteindbpuffer;search(
+dnrlehrveranstaltungen,TRUE );setzeneuewerteindbpuffer;IF standardmaskenfeld(
+prueffnr)<>bszeile(izeile).fachCOR compress(standardmaskenfeld(prueffnr+1))<>
+bszeile(izeile).kennungTHEN setzenichtsichtbarewerteindbpufferFI ;update(
+dnrlehrveranstaltungen);evtlkurswahldatenbeimbearbeitenaktualisieren.
+setzealtesuchwerteindbpuffer:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,
+gewhalbj);putwert(fnrlvjgst,bszeile(izeile).jgst);putwert(fnrlvfachkennung,
+text(altesfach,fachlaenge)+bszeile(izeile).kennung).setzeneuewerteindbpuffer:
+putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,gewhalbj);putwert(fnrlvjgst,
+bszeile(izeile).jgst);putwert(fnrlvfachkennung,neuekennung);putwert(fnrlvart,
+standardmaskenfeld(prueffnr+2));putwert(fnrlvklgrp1,standardmaskenfeld(
+prueffnr+3));putwert(fnrlvklgrp2,standardmaskenfeld(prueffnr+4));putwert(
+fnrlvklgrp3,standardmaskenfeld(prueffnr+5));putwert(fnrlvklgrp4,
+standardmaskenfeld(prueffnr+6));putwert(fnrlvwochenstd,standardmaskenfeld(
+prueffnr+7)).setzenichtsichtbarewerteindbpuffer:putwert(fnrlvkopplung,
+neuekopplung);putwert(fnrlvparaphe,"");putwert(fnrlvraumgrp1,"");putwert(
+fnrlvraumgrp2,"").neuekennung:text(prueffach,fachlaenge)+compress(
+standardmaskenfeld(prueffnr+1)).neuekopplung:textzweistellig(int(bszeile(
+izeile).jgst))+neuekennung.END PROC datenspeicherungdurchfuehren;PROC
+evtlkurswahldatenbeimbearbeitenaktualisieren:IF intwert(fnrlvjgst)>jgst10
+THEN IF aktuelleshalbjahrzubearbeitenOR gewhalbj=zweiteshalbjahrTHEN
+kurswahlserverlvaktualisieren(wert(fnrlvjgst),wert(fnrlvjgst),gewhalbj)ELSE
+kurswahlserverlvaktualisieren(text(intwert(fnrlvjgst)-1),wert(fnrlvjgst),
+gewhalbj)FI FI END PROC evtlkurswahldatenbeimbearbeitenaktualisieren;PROC
+aenderungszeileanzeigen:infeld((izeile-1)*felderprozeile+ersteseingabefeld)
+END PROC aenderungszeileanzeigen;PROC lehrveranstaltungenzeileeinfuegen(BOOL
+CONST zeilerein):INT VAR erstefnr;IF zeilereinTHEN zeileeinfuegenELSE
+zeileloeschenFI ;return(1).zeileeinfuegen:aktzeile:=bearbeitungszeilezufeld(
+infeld);IF aktzeile=zeilenanzahlTHEN standardmeldung(
+meldnrletztezeilenichteinfuegen,"");LEAVE zeileeinfuegenFI ;IF bszeile(
+zeilenanzahl).fach<>""THEN merkeverdraengtensatzalsnachfolgesatz;
+anzahlgezeigtezeilen:=zeilenanzahlFI ;FOR izeileFROM zeilenanzahl-1DOWNTO
+aktzeile+1REP zeileiminternenpufferverschieben;
+wertederzeileaufdembildschirmverschiebenPER ;izeile:=aktzeile+1;
+leerzeileschreiben;jgstineingefuegterzeilevermerken;neuezeilenausgeben.
+merkeverdraengtensatzalsnachfolgesatz:nfschulj:=gewschulj;nfhalbj:=gewhalbj;
+nfjgst:=bszeile(zeilenanzahl).jgst;nffachkennung:=text(bszeile(zeilenanzahl).
+fach,fachlaenge)+bszeile(zeilenanzahl).kennung.
+zeileiminternenpufferverschieben:bszeile(izeile+1).jgst:=bszeile(izeile).jgst
+;bszeile(izeile+1).fach:=bszeile(izeile).fach;bszeile(izeile+1).kennung:=
+bszeile(izeile).kennung;bszeile(izeile+1).kopplung:=bszeile(izeile).kopplung;
+bszeile(izeile+1).art:=bszeile(izeile).art;bszeile(izeile+1).klasse1:=bszeile
+(izeile).klasse1;bszeile(izeile+1).klasse2:=bszeile(izeile).klasse2;bszeile(
+izeile+1).klasse3:=bszeile(izeile).klasse3;bszeile(izeile+1).klasse4:=bszeile
+(izeile).klasse4;bszeile(izeile+1).wstd:=bszeile(izeile).wstd;.
+wertederzeileaufdembildschirmverschieben:FOR ifnrFROM erstesfeldderzeileUPTO
+letztesfeldderzeileREP standardmaskenfeld(standardmaskenfeld(ifnr),ifnr+
+felderprozeile)PER .erstesfeldderzeile:(izeile-1)*felderprozeile+
+erstestabellenfeld.letztesfeldderzeile:erstesfeldderzeile+felderprozeile-1.
+jgstineingefuegterzeilevermerken:bszeile(izeile).jgst:=bszeile(aktzeile).jgst
+;bszeile(izeile).fach:="";bszeile(izeile).kennung:="";bszeile(izeile).
+kopplung:="";bszeile(izeile).art:="";bszeile(izeile).klasse1:="";bszeile(
+izeile).klasse2:="";bszeile(izeile).klasse3:="";bszeile(izeile).klasse4:="";
+bszeile(izeile).wstd:="";standardmaskenfeld(textzweistellig(int(bszeile(
+izeile).jgst)),erstefnr);.zeileloeschen:izeile:=bearbeitungszeilezufeld(
+infeld);leerzeileschreiben;neuezeilenausgeben.leerzeileschreiben:erstefnr:=
+erstesfeldderzeile;standardmaskenfeld(" ",erstefnr);FOR ifnrFROM erstefnr+1
+UPTO letztesfeldderzeileREP standardmaskenfeld("",ifnr)PER .
+neuezeilenausgeben:infeld(erstefnr);standardfelderausgeben;infeld(erstefnr+1)
+.END PROC lehrveranstaltungenzeileeinfuegen;INT PROC bearbeitungszeilezufeld(
+INT CONST feldnr):((feldnr-erstestabellenfeld)DIV felderprozeile)+1END PROC
+bearbeitungszeilezufeld;PROC eingangsbehandlung(INT CONST plausiart):LET
+uebernehmen=1,bearbeiten=2;BOOL VAR ok;reinitparsing;eingangsmaskenfehler:=
+FALSE ;ankreuzfelderpruefen;IF mehralseineauswahlangekreuztTHEN
+standardmeldung(meldnrungueltigeauswahl,"");pruefstatus:=fnrbearbeiten;
+eingangsmaskenfehler:=TRUE ;LEAVE eingangsbehandlungFI ;IF
+uebernehmenpruefungTHEN IF ankreuz1THEN ankreuzfehler(fnrbearbeiten);LEAVE
+eingangsbehandlungFI ELIF bearbeitenpruefungTHEN IF ankreuz2THEN
+ankreuzfehler(fnrfachanguebernehmen);LEAVE eingangsbehandlungELIF ankreuz3
+THEN ankreuzfehler(fnrlehrveruebernehmen);LEAVE eingangsbehandlungFI FI ;IF
+bearbeitenpruefungTHEN standardpruefe(5,fnrbearbaktsj,fnrbearbgeplsj,0,"",
+pruefstatus);IF pruefstatus<>0THEN eingangsmaskenfehler:=TRUE ;LEAVE
+eingangsbehandlungELSE jgstpruefung(fnrbearbjgst,ok);IF NOT okTHEN jgstfehler
+(fnrbearbjgst);LEAVE eingangsbehandlungFI ;vgljgst:=standardmaskenfeld(
+fnrbearbjgst);vglfach:=compress(standardmaskenfeld(fnrbearbfach))FI ELIF
+ankreuz2THEN standardpruefe(5,fnrfachangaktsj,fnrfachanggeplsj,0,"",
+pruefstatus);IF pruefstatus<>0THEN eingangsmaskenfehler:=TRUE ;LEAVE
+eingangsbehandlungELSE jgstpruefung(fnrfachangjgst,ok);IF NOT okTHEN
+jgstfehler(fnrfachangjgst);LEAVE eingangsbehandlungELSE vgljgst:=
+standardmaskenfeld(fnrfachangjgst)FI ;FI ELSE jgstpruefung(fnrlehrverjgst,ok)
+;IF NOT okTHEN jgstfehler(fnrlehrverjgst);LEAVE eingangsbehandlungELSE
+vgljgst:=standardmaskenfeld(fnrlehrverjgst)FI ;FI ;IF ankreuz1THEN FOR ifnr
+FROM fnrfachanguebernehmenUPTO fnrlehrverjgstREP IF standardmaskenfeld(ifnr)
+<>""THEN eintragfehler(ifnr);LEAVE eingangsbehandlungFI PER ELIF ankreuz2
+THEN FOR ifnrFROM fnrbearbeitenUPTO fnrbearbfachREP IF standardmaskenfeld(
+ifnr)<>""THEN eintragfehler(ifnr);LEAVE eingangsbehandlungFI PER ;IF
+standardmaskenfeld(fnrlehrverjgst)<>""THEN eintragfehler(fnrlehrverjgst);
+LEAVE eingangsbehandlungFI ELSE FOR ifnrFROM fnrbearbeitenUPTO fnrfachangjgst
+REP IF standardmaskenfeld(ifnr)<>""THEN eintragfehler(ifnr);LEAVE
+eingangsbehandlungFI PER FI .ankreuzfelderpruefen:INT VAR summe:=0;IF
+ankreuz1THEN summeINCR 1FI ;IF ankreuz2THEN summeINCR 1FI ;IF ankreuz3THEN
+summeINCR 1FI .mehralseineauswahlangekreuzt:summe<>1.ankreuz1:
+standardmaskenfeld(fnrbearbeiten)<>"".ankreuz2:standardmaskenfeld(
+fnrfachanguebernehmen)<>"".ankreuz3:standardmaskenfeld(fnrlehrveruebernehmen)
+<>"".uebernehmenpruefung:plausiart=uebernehmen.bearbeitenpruefung:plausiart=
+bearbeiten.END PROC eingangsbehandlung;PROC ankreuzfehler(INT CONST
+fehlerfeld):pruefstatus:=fehlerfeld;eingangsmaskenfehler:=TRUE ;
+standardmeldung(meldnrfalschetastezuankreuz,"").END PROC ankreuzfehler;PROC
+jgstpruefung(INT CONST fnrpruefjgst,BOOL VAR ok):IF standardmaskenfeld(
+fnrpruefjgst)=""THEN bearbeitungallerjgst:=TRUE ;ok:=TRUE ;ELSE
+bearbeitungallerjgst:=FALSE ;gewjgst:=int(standardmaskenfeld(fnrpruefjgst));
+ok:=lastconversionokCAND (gewjgst=jgst0OR (gewjgst>=jgst5AND gewjgst<=jgst13)
+)FI END PROC jgstpruefung;PROC jgstfehler(INT CONST fehlerfeld):pruefstatus:=
+fehlerfeld;eingangsmaskenfehler:=TRUE ;standardmeldung(meldnrfehlerhaftejgst,
+"").END PROC jgstfehler;PROC eintragfehler(INT CONST fehlerfeld):pruefstatus
+:=fehlerfeld;eingangsmaskenfehler:=TRUE ;standardmeldung(
+meldnrfalscheausfuellung,"").END PROC eintragfehler;PROC plausipruefung:
+pruefstatus:=0;facheintraegepruefen;IF eingabefehlerTHEN LEAVE plausipruefung
+FI ;datenkonsistenzpruefen;IF eingabefehlerTHEN LEAVE plausipruefungFI .
+eingabefehler:pruefstatus<>0.END PROC plausipruefung;PROC
+facheintraegepruefen:anzahleingegebenezeilen:=0;geprueftefaecher:=trenner;IF
+gueltigeschuelergruppen=""THEN holegueltigeschuelergruppenFI ;IF
+gueltigeklassengruppen=""THEN holegueltigeklassengruppenFI ;IF gueltigelvart=
+""THEN holegueltigelvartenFI ;FOR izeileFROM 1UPTO zeilenanzahlREP IF
+fachfehlerTHEN LEAVE facheintraegepruefenFI PER .fachfehler:INT VAR prueffnr
+:=fachfnrin(izeile);TEXT VAR prueffach:=standardmaskenfeld(prueffnr);IF
+prueffachleerTHEN IF eintraginfolgefelderderzeileTHEN pruefstatus:=prueffnr;
+standardmeldung(meldnrkeinfachzuanderenangaben,"");TRUE ELSE FALSE FI ELIF
+prueffachungueltigTHEN pruefstatus:=prueffnr;standardmeldung(
+meldnrungueltigesfach,"");TRUE ELIF length(standardmaskenfeld(prueffnr+
+incrfuerkennung))>kennunglaengeTHEN pruefstatus:=prueffnr+incrfuerkennung;
+standardmeldung(meldnrkennungzulang,"");TRUE ELIF compress(standardmaskenfeld
+(prueffnr+incrfuerkennung))=""THEN pruefstatus:=prueffnr+incrfuerkennung;
+standardmeldung(meldnrbitteangabegenauer,"");TRUE ELIF lvartungueltigTHEN
+TRUE ELIF klassengruppenungueltigTHEN TRUE ELIF wochenstundenungueltigTHEN
+pruefstatus:=prueffnr+incrfuerwstd;TRUE ELSE anzahleingegebenezeilenINCR 1;
+FALSE FI .prueffachleer:prueffach="".eintraginfolgefelderderzeile:
+standardmaskenfeld(prueffnr+1)<>""COR standardmaskenfeld(prueffnr+2)<>""COR
+standardmaskenfeld(prueffnr+3)<>""COR standardmaskenfeld(prueffnr+4)<>""COR
+standardmaskenfeld(prueffnr+5)<>""COR standardmaskenfeld(prueffnr+6)<>""COR
+standardmaskenfeld(prueffnr+7)<>"".prueffachungueltig:IF
+fachkuerzelschongeprueftTHEN FALSE ELIF fachimfachbestandTHEN
+geprueftefaecherCAT prueffach;geprueftefaecherCAT trenner;FALSE ELSE TRUE FI
+.fachkuerzelschongeprueft:pos(geprueftefaecher,trenner+prueffach+trenner)>0.
+fachimfachbestand:putwert(fnrffach,prueffach);search(dnrfaecher,TRUE );
+dbstatus=0.lvartungueltig:IF pos(gueltigelvart,trenner+standardmaskenfeld(
+prueffnr+incrfuerlvart)+trenner)=0THEN standardmeldung(meldnrungueltigeart,""
+);pruefstatus:=prueffnr+incrfuerlvart;TRUE ELSE FALSE FI .
+klassengruppenungueltig:pruefjgst:=int(bszeile(izeile).jgst);FOR ifnrFROM
+prueffnr+incrfuerklassengranfangUPTO prueffnr+incrfuerklassengrendeREP
+pruefklasse:=standardmaskenfeld(ifnr);IF klassengruppeungueltigTHEN
+standardmeldung(meldnrungueltigeklassengruppe,"");pruefstatus:=ifnr;LEAVE
+klassengruppenungueltigWITH TRUE FI PER ;FALSE .klassengruppeungueltig:IF
+pruefklasse=""THEN FALSE ELIF pruefklasseistschuelergruppeTHEN FALSE ELIF
+pruefklasseistklassengruppeTHEN FALSE ELIF pruefklasseistgueltigejgstTHEN
+FALSE ELSE TRUE FI .pruefklasseistschuelergruppe:pos(gueltigeschuelergruppen,
+trenner+bszeile(izeile).jgst+pruefklasse+trenner)>0.
+pruefklasseistklassengruppe:IF pos(gueltigeklassengruppen,trenner+pruefklasse
++trenner)=0THEN FALSE ELIF pruefjgst=jgst0THEN TRUE ELSE putwert(
+fnrkgklassengrp,pruefklasse);search(dnrklassengruppen,TRUE );IF dbstatus<>0
+THEN FALSE ELSE sugruppen:=wert(fnrkgschuelergrp);laengesugruppen:=length(
+sugruppen);possugruppe:=1;WHILE possugruppe<laengesugruppenREP sugruppejgst:=
+subtext(sugruppen,possugruppe,possugruppe+1);IF int(sugruppejgst)<>pruefjgst
+THEN LEAVE pruefklasseistklassengruppeWITH FALSE FI ;possugruppeINCR
+laengeeinersugruppePER ;TRUE FI FI .pruefklasseistgueltigejgst:gueltigejgst:=
+FALSE ;pruefbez:=int(pruefklasse);IF lastconversionokTHEN IF pruefbez>=jgst5
+CAND pruefbez<=jgst13THEN IF pruefjgst=jgst0OR pruefjgst=pruefbezTHEN
+gueltigejgst:=TRUE FI FI FI ;gueltigejgst.wochenstundenungueltig:
+standardpruefe(1,prueffnr+incrfuerwstd,0,0,"",pruefstatus);IF pruefstatus=0
+THEN standardpruefe(2,prueffnr+incrfuerwstd,0,0,"",pruefstatus);pruefstatus<>
+0ELSE TRUE FI .END PROC facheintraegepruefen;INT PROC fachfnrin(INT CONST
+zeilennr):(zeilennr-1)*felderprozeile+ersteseingabefeldEND PROC fachfnrin;
+PROC datenkonsistenzpruefen:FOR izeileFROM 1UPTO zeilenanzahlREP IF
+zeileungueltigTHEN pruefstatus:=prueffnr;standardmeldung(
+meldnrlehrveranstaltunggibtsschon,"");LEAVE datenkonsistenzpruefenFI PER .
+zeileungueltig:IF leerzeileTHEN FALSE ELIF
+zeileistimschluesselunveraendertgebliebenTHEN FALSE ELSE
+ergebnisderpruefungzeileschongespeichertFI .leerzeile:INT VAR prueffnr:=
+fachfnrin(izeile);TEXT VAR prueffach:=standardmaskenfeld(prueffnr);prueffach=
+"".zeileistimschluesselunveraendertgeblieben:standardmaskenfeld(prueffnr)=
+bszeile(izeile).fachCAND compress(standardmaskenfeld(prueffnr+1))=bszeile(
+izeile).kennung.ergebnisderpruefungzeileschongespeichert:
+neuewerteindbpuffersetzen;search(dnrlehrveranstaltungen,TRUE );dbstatus=0.
+neuewerteindbpuffersetzen:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,gewhalbj
+);putwert(fnrlvjgst,bszeile(izeile).jgst);putwert(fnrlvfachkennung,text(
+prueffach,fachlaenge)+compress(standardmaskenfeld(prueffnr+1))).END PROC
+datenkonsistenzpruefen;PROC schulhalbjahrbestimmen:IF akthalbj=""THEN
+akthalbj:=schulkenndatum(texthalbj);aktschulj:=schulkenndatum(textschulj)FI ;
+IF standardmaskenfeld(fnrlehrveruebernehmen)<>""THEN
+aktuelleshalbjahrzubearbeiten:=FALSE ELSE aktuelleshalbjahrzubearbeiten:=
+standardmaskenfeld(fnrbearbaktsj)<>""OR standardmaskenfeld(fnrfachangaktsj)<>
+""FI ;gewhalbj:=akthalbj;gewschulj:=aktschulj;IF NOT
+aktuelleshalbjahrzubearbeitenTHEN geplanteshjundsjberechnen(gewhalbj,
+gewschulj)FI END PROC schulhalbjahrbestimmen;PROC holegueltigeschuelergruppen
+:gueltigeschuelergruppen:=trenner;inittupel(dnraktschuelergruppen);
+statleseschleife(dnraktschuelergruppen,gewschulj,gewhalbj,fnrsgrpsj,fnrsgrphj
+,PROC schuelergruppelesen)END PROC holegueltigeschuelergruppen;PROC
+schuelergruppelesen(BOOL VAR b):IF dbstatus<>0OR wert(fnrsgrpsj)<>gewschulj
+OR wert(fnrsgrphj)<>gewhalbjTHEN b:=TRUE ELSE gueltigeschuelergruppenCAT wert
+(fnrsgrpjgst);gueltigeschuelergruppenCAT wert(fnrsgrpkennung);
+gueltigeschuelergruppenCAT trennerFI END PROC schuelergruppelesen;PROC
+holegueltigeklassengruppen:gueltigeklassengruppen:=trenner;inittupel(
+dnrklassengruppen);statleseschleife(dnrklassengruppen,"","",fnrkgklassengrp,
+fnrkgklassengrp,PROC klassengruppelesen)END PROC holegueltigeklassengruppen;
+PROC klassengruppelesen(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE
+gueltigeklassengruppenCAT wert(fnrkgklassengrp);gueltigeklassengruppenCAT
+trennerFI END PROC klassengruppelesen;PROC holegueltigelvarten:gueltigelvart
+:=trenner;inittupel(dnrschluessel);statleseschleife(dnrschluessel,artbestand,
+"",fnrschlsachgebiet,fnrschlschluessel,PROC holelvart)END PROC
+holegueltigelvarten;PROC holelvart(BOOL VAR b):IF wert(fnrschlsachgebiet)>
+artbestandCOR dbstatus<>0THEN b:=TRUE ELSE gueltigelvartCAT wert(
+fnrschlschluessel);gueltigelvartCAT trennerFI END PROC holelvart;TEXT PROC
+textzweistellig(INT CONST i):IF i<10THEN "0"+text(i)ELSE text(i)FI END PROC
+textzweistellig;PROC initfelderdeseingangsbildschirms:INT VAR i;FOR iFROM 1
+UPTO feldanzmaskeeingangREP feldbs1(i):=""PER END PROC
+initfelderdeseingangsbildschirms;PROC wertedeseingangsbildschirmsmerken:INT
+VAR i;letztecursorfnr:=infeld;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1(
+i):=standardmaskenfeld(i)PER END PROC wertedeseingangsbildschirmsmerken;PROC
+wertedeseingangsbildschirmsholen:INT VAR i;FOR iFROM 1UPTO
+feldanzmaskeeingangREP standardmaskenfeld(feldbs1(i),i)PER END PROC
+wertedeseingangsbildschirmsholen;PROC initbszeilepuffer:FOR izeileFROM 1UPTO
+zeilenanzahlREP bszeile(izeile).jgst:="";bszeile(izeile).fach:="";bszeile(
+izeile).kennung:="";bszeile(izeile).art:="";bszeile(izeile).klasse1:="";
+bszeile(izeile).klasse2:="";bszeile(izeile).klasse3:="";bszeile(izeile).
+klasse4:="";bszeile(izeile).wstd:="";PER END PROC initbszeilepuffer;END
+PACKET lehrveranstaltungenbenennen
+
diff --git a/app/schulis/2.2.1/src/4.liste ausgewaehlter kopplungen drucken b/app/schulis/2.2.1/src/4.liste ausgewaehlter kopplungen drucken
new file mode 100644
index 0000000..3b86dd8
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.liste ausgewaehlter kopplungen drucken
@@ -0,0 +1,72 @@
+PACKET listeausgewaehlterkopplungendruckenDEFINES
+listekopplungenmitanzlverstellen,listekopplungenmitanzlvdrucken:LET feldanzlv
+=2,feldakthj=3,anzkopfzeilen=9,anzzeilen=45,ausgparam="#",leerzeile=" ",
+meldungbearbwird=352,meldunglistedrucken=58,meldunglisteaufbereiten=7,
+meldungwarten=69,meldungkeinedaten=68,meldungfalscherwert=54,meldungkeinelv=
+326,dateiname="Liste der Kopplungen",zwdateiname="zwischenspeicherung",
+praefix=" ",ueberschrift="Liste aller Kopplungen",kopfzeile=
+"Kopplung Anzahl gekoppelter Lehrveranstaltungen",stdkopf=
+" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 >14",
+unterstrich=
+"----------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---",
+spaltentrenner=": : : : : : : : : : : : : : : "
+,spaltentrenner1=
+": x : : : : : : : : : : : : : : ",
+spaltentrennerl=
+": : : : : : : : : : : : : : : x ",schuljahr=
+"Schuljahr",halbjahr="Schulhalbjahr",schulname="Schulname",schulort=
+"Schulort";TEXT VAR schj,schhj,aktkopplung:="",postfix:="",anzseiten,
+ueberschriftanhang,anzahllv:="",neuerkopf:="";INT VAR i,j,anzlv,anwanzlv,
+spaltenindex,anzs;BOOL VAR erstekopplung:=TRUE ;FILE VAR datei,zwdatei;PROC
+listekopplungenmitanzlverstellen:standardmeldung(meldungwarten,"");schj:=
+schulkenndatum(schuljahr);schhj:=schulkenndatum(halbjahr);IF
+standardmaskenfeld(feldakthj)=""THEN geplanteshjundsjberechnen(schhj,schj)FI
+;anzahllv:=standardmaskenfeld(feldanzlv);IF anzahllv<>""THEN anwanzlv:=int(
+anzahllv);IF lastconversionokTHEN IF anwanzlv<1COR anwanzlv>99THEN
+fehlermeldungfalscherwertFI ELSE fehlermeldungfalscherwertFI ;
+ueberschriftanhang:=" ab "+text(anwanzlv)+" Lehrveranstaltungen";ELSE
+anwanzlv:=1;ueberschriftanhang:=""FI ;spaltenindex:=anwanzlv-1;inittupel(
+dnrlehrveranstaltungen);IF records(dnrlehrveranstaltungen)=0.0THEN
+standardmeldung(meldungkeinelv,"");return(1)ELSE bereiteprotokollvor;dbstatus
+(0);erstekopplung:=TRUE ;aktkopplung:="";anzlv:=1;statleseschleife(
+ixlvsjhjkopp,schj,schhj,fnrlvsj,fnrlvhj,PROC holekopplungen);IF lines(datei)=
+anzkopfzeilenTHEN standardmeldung(meldungkeinedaten,"");return(1);ELSE
+zeigedatei(dateiname,"vr")FI FI .fehlermeldungfalscherwert:standardmeldung(
+meldungfalscherwert,"");return(1);LEAVE listekopplungenmitanzlverstellen.
+bereiteprotokollvor:standardmeldung(meldunglisteaufbereiten,"");forget(
+dateiname,quiet);datei:=sequentialfile(output,dateiname);forget(zwdateiname,
+quiet);zwdatei:=sequentialfile(output,zwdateiname);schreibkopf(datei).END
+PROC listekopplungenmitanzlverstellen;PROC schreibkopf(FILE VAR dat):INT VAR
+k;putline(dat,schulkenndatum(schulname));putline(dat,text(schulkenndatum(
+schulort),65)+date);putline(dat,leerzeile);putline(dat,ueberschrift+
+ueberschriftanhang);putline(dat,"Schuljahr 19"+text(schj,2)+"/"+subtext(schj
+,3)+" "+schhj+". Halbjahr");putline(dat,leerzeile);putline(dat,kopfzeile);
+IF anwanzlv=1THEN putline(dat,stdkopf)ELSE neuerkopf:=praefix;FOR kFROM 1
+UPTO 14REP neuerkopfCAT text(anwanzlv-1+k,4)PER ;neuerkopfCAT " >"+text(
+anwanzlv+13);putline(dat,neuerkopf)FI ;putline(dat,unterstrich).END PROC
+schreibkopf;PROC schreibfuss(INT CONST nr):putline(zwdatei,leerzeile);putline
+(zwdatei,leerzeile);putline(zwdatei,text(nr,70)+"/"+anzseiten);putline(
+zwdatei,"#page#")END PROC schreibfuss;PROC holekopplungen(BOOL VAR b):IF wert
+(fnrlvsj)<>schjCOR wert(fnrlvhj)<>schhjCOR dbstatus<>0THEN dbstatus(1);b:=
+TRUE ELIF aktkopplung<>wert(fnrlvkopplung)THEN gibeintragaus;aktkopplung:=
+wert(fnrlvkopplung);standardmeldung(meldungbearbwird,aktkopplung+ausgparam);
+anzlv:=1ELSE anzlvINCR 1FI .gibeintragaus:IF erstekopplungTHEN erstekopplung
+:=FALSE ELIF anzlv=anwanzlvTHEN putline(datei,text(aktkopplung,10)+
+spaltentrenner1)ELIF anzlv>anwanzlv+13THEN putline(datei,text(aktkopplung,10)
++spaltentrennerl)ELIF anzlv>anwanzlvCAND anzlv<anwanzlv+14THEN postfix:=
+spaltentrenner;replace(postfix,(anzlv-spaltenindex)*4-1,"x");putline(datei,
+text(aktkopplung,10)+postfix)FI .END PROC holekopplungen;PROC
+listekopplungenmitanzlvdrucken:INT VAR volleseiten:=0,restzeilen:=0;TEXT VAR
+zeile:="";standardmeldung(meldunglistedrucken,"");modify(datei);
+ermittleseiten;giballeseitenaus.ermittleseiten:i:=lines(datei)-anzkopfzeilen;
+anzs:=iDIV anzzeilen;volleseiten:=anzs;restzeilen:=iMOD anzzeilen;IF
+restzeilen<>0THEN anzsINCR 1FI ;anzseiten:=text(anzs,2).giballeseitenaus:
+toline(datei,anzkopfzeilen+1);FOR iFROM 1UPTO volleseitenREP schreibkopf(
+zwdatei);FOR jFROM 1UPTO anzzeilenREP readrecord(datei,zeile);down(datei);
+putline(zwdatei,zeile)PER ;schreibfuss(i)PER ;IF restzeilen<>0THEN
+schreibkopf(zwdatei);FOR iFROM 1UPTO restzeilenREP readrecord(datei,zeile);
+down(datei);putline(zwdatei,zeile)PER ;FOR iFROM restzeilen+1UPTO anzzeilen
+REP putline(zwdatei,leerzeile)PER ;schreibfuss(anzs)FI ;print(zwdateiname);
+enter(2).END PROC listekopplungenmitanzlvdrucken;END PACKET
+listeausgewaehlterkopplungendrucken;
+
diff --git a/app/schulis/2.2.1/src/4.listen.aufsichtsplan b/app/schulis/2.2.1/src/4.listen.aufsichtsplan
new file mode 100644
index 0000000..ba9c597
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.listen.aufsichtsplan
@@ -0,0 +1,78 @@
+PACKET aufsichtsplandruckenDEFINES aufsichtsplanmaskebearbeiten,
+aufsichtsplanggferstellen,aufsichtsplanzeigen,aufsichtsplandrucken:LET maske=
+"ms aufsichtsplan drucken eingang",mnrlistewirderstellt=7,
+mnrlistewirdgedruckt=58,mnrbittewarten=69,mnrlistewirdaufbereitet=190,
+mnrkeinedatenimbestand=68,blank=" ",sixblanks=" ";INT CONST fnr2aktsj:=2
+,fnr3ausgbs:=3,fnr4ausgdr:=4;INT VAR druckzeilenzahl;TEXT VAR
+gesamtueberschrift,ueberschrift2,halbjahr,schuljahr,sjhjaufber,altertag;TEXT
+CONST ueberschrift1:="Aufsicht Aufsichtsorte ",ueberschrift3:=7*"----------"
++blank,aufsichtsorte:="c02 aufsichtsorte";FILE VAR showdatei,druckdatei;LET
+niltext="",maxaufsichtszeiten=90,maxorteprozeile=10;ROW maxaufsichtszeiten
+TEXT VAR zeiten;ROW maxorteprozeileTEXT VAR ortejezeile;BOOL VAR keinedatenda
+;INT VAR status,zaehler,anzahlzeiten,anzahlorte;BOOL VAR bildschirmausgabe;
+PROC aufsichtsplanmaskebearbeiten:standardvproc(maske);END PROC
+aufsichtsplanmaskebearbeiten;PROC aufsichtsplanggferstellen:standardpruefe(5,
+fnr3ausgbs,fnr4ausgdr,0,niltext,status);IF status<>0THEN infeld(status);
+return(1)ELSE bildschirmausgabe:=standardmaskenfeld(fnr4ausgdr)=niltext;
+standardmeldung(mnrbittewarten,niltext);ggfdatenmerkenundshowdateierstellen;
+IF keinedatendaTHEN standardmeldung(mnrkeinedatenimbestand,niltext);return(1)
+ELSE IF bildschirmausgabeTHEN aufsichtsplanzeigenELSE aufsichtsplandrucken(0)
+FI ;FI ;FI ;.ggfdatenmerkenundshowdateierstellen:halbjahr:=schulkenndatum(
+"Schulhalbjahr");schuljahr:=schulkenndatum("Schuljahr");IF standardmaskenfeld
+(fnr2aktsj)=niltextTHEN geplanteshjundsjberechnen(halbjahr,schuljahr)FI ;
+sjhjaufber:=subtext(schuljahr,1,2)+"/";sjhjaufberCAT subtext(schuljahr,3,4)+
+" ";sjhjaufberCAT halbjahr;zaehler:=0;keinedatenda:=FALSE ;inittupel(
+dnraufsichtszeiten);exactmatch(FALSE );statleseschleife(dnraufsichtszeiten,
+schuljahr,halbjahr,fnrazsj,fnrazhj,PROC aufsichtszeitenmerken);keinedatenda:=
+anzahlzeiten=0;IF NOT keinedatendaTHEN ggfdiezehnerstenortelesenFI ;.
+ggfdiezehnerstenortelesen:zaehler:=0;anzahlorte:=0;inittupel(dnrschluessel);
+putwert(fnrschlsachgebiet,aufsichtsorte);search(dnrschluessel,FALSE );IF
+dbstatus<>0OR wert(fnrschlsachgebiet)<>aufsichtsorteTHEN keinedatenda:=TRUE ;
+ELSE maximalzehnortemerkenundueberschriftenbasteln;standardmeldung(
+mnrlistewirderstellt,niltext);TEXT CONST namedershowdatei:="Aufsichtsplan : "
++sjhjaufber+". Halbj.";forget(namedershowdatei,quiet);showdatei:=
+sequentialfile(output,namedershowdatei);inittupel(dnraufsichtsplan);putwert(
+fnrapsj,schuljahr);putwert(fnraphj,halbjahr);
+prozeitproorteintraegeausaufsichtsplaninshowdatei;IF anzahlorte=
+maxorteprozeileTHEN WHILE wert(fnrschlsachgebiet)=aufsichtsorteAND dbstatus<>
+3REP anzahlorte:=0;zaehler:=0;maximalzehnortemerkenundueberschriftenbasteln;
+prozeitproorteintraegeausaufsichtsplaninshowdatei;PER FI ;FI ;END PROC
+aufsichtsplanggferstellen;PROC maximalzehnortemerkenundueberschriftenbasteln:
+ueberschrift2:="Tag Nr. ";WHILE dbstatus<>3AND wert(fnrschlsachgebiet)=
+aufsichtsorteAND zaehler<maxorteprozeileREP zaehlerINCR 1;ortejezeile(zaehler
+):=wert(fnrschlschluessel);ueberschrift2CAT text(ortejezeile(zaehler),6);succ
+(dnrschluessel);PER ;anzahlorte:=zaehlerEND PROC
+maximalzehnortemerkenundueberschriftenbasteln;PROC aufsichtszeitenmerken(
+BOOL VAR b):IF dbstatus<>0OR wert(fnrazhj)<>halbjahrTHEN b:=TRUE ;ELSE
+zaehlerINCR 1;zeiten(zaehler):=wert(fnrazaufsichtszeit);FI ;anzahlzeiten:=
+zaehlerEND PROC aufsichtszeitenmerken;PROC
+prozeitproorteintraegeausaufsichtsplaninshowdatei:INT VAR hilfszaehler;TEXT
+VAR hilfstext,tag,aufsichtsnr,zeile;putline(showdatei,ueberschrift1);putline(
+showdatei,ueberschrift2);putline(showdatei,ueberschrift3);altertag:="";FOR
+zaehlerFROM 1UPTO anzahlzeitenREP hilfstext:=zeiten(zaehler);putwert(
+fnrapaufsichtszeit,hilfstext);IF length(hilfstext)=2THEN aufsichtsnr:=" ";
+aufsichtsnrCAT subtext(hilfstext,2,2);ELSE aufsichtsnr:=subtext(hilfstext,2,3
+);FI ;tagnummeraufbereiten;FOR hilfszaehlerFROM 1UPTO anzahlorteREP putwert(
+fnrapaufsichtsort,ortejezeile(hilfszaehler));search(dnraufsichtsplan,TRUE );
+IF dbstatus=0THEN hilfstextCAT text(wert(fnrapparaphe),6);ELSE hilfstextCAT
+sixblanksFI ;PER ;zeile:=hilfstext;hilfstext:=sixblanks;putline(showdatei,
+zeile);PER ;putline(showdatei,blank);.tagnummeraufbereiten:tag:=text(
+hilfstext,1);IF tag="1"THEN tag:="Mo "ELIF tag="2"THEN tag:="Di "ELIF tag="3"
+THEN tag:="Mi "ELIF tag="4"THEN tag:="Do "ELIF tag="5"THEN tag:="Fr "ELIF tag
+="6"THEN tag:="Sa "FI ;IF tag=altertagTHEN hilfstext:=3*blankELSE hilfstext:=
+tag;FI ;hilfstextCAT aufsichtsnr+". ";altertag:=tagEND PROC
+prozeitproorteintraegeausaufsichtsplaninshowdatei;PROC aufsichtsplanzeigen:
+zeigedatei("Aufsichtsplan : "+sjhjaufber+". Halbj.","a");END PROC
+aufsichtsplanzeigen;PROC aufsichtsplandrucken(INT CONST ruecksprungregel):
+INT VAR zeilenzaehler:=1;TEXT VAR zeile;gesamtueberschrift:=
+"Aufsichtsplan für Schuljahr ";gesamtueberschriftCAT sjhjaufber;
+gesamtueberschriftCAT ". Halbjahr";druckdatei:=sequentialfile(output,
+"liste.1");input(showdatei);druckvorbereiten;druckzeilenzahl:=drucklaenge(2);
+initdruckkopf(gesamtueberschrift,blank);druckkopfschreiben;
+setzemitseitennummern(TRUE );WHILE NOT eof(showdatei)REP getline(showdatei,
+zeile);druckzeileschreiben(zeile);zeilenzaehlerINCR 1;IF zeilenzaehler>
+druckzeilenzahlTHEN seitenwechsel;zeilenzaehler:=1FI ;PER ;drucknachbereiten;
+IF ruecksprungregel=0THEN return(1)ELSE return(2)FI ;standardmeldung(
+mnrlistewirdgedruckt,niltext);END PROC aufsichtsplandrucken;END PACKET
+aufsichtsplandrucken;
+
diff --git a/app/schulis/2.2.1/src/4.listen.unterrichtsverteilung b/app/schulis/2.2.1/src/4.listen.unterrichtsverteilung
new file mode 100644
index 0000000..39eaee2
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.listen.unterrichtsverteilung
@@ -0,0 +1,252 @@
+PACKET unterrichtsverteilunglistenDEFINES unterrichtsverteilungspezielleteile
+:LET AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,
+AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR
+ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;LET maskeunterrichtsverteilung=
+"ms liste unterrichtsverteilung eingang",ausgfeldlaenge=1,
+anzahlderobjekteprobildschirm=17,ueberschriftenzeilen=2,ausgkopflaenge=2,
+spaltentrenner=" ",zweierspaltenbreite=2,viererspaltenbreite=4,
+fuenferspaltenbreite=5,achterspaltenbreite=8,neunerspaltenbreite=9,
+zehnerspaltenbreite=10,unterrichtsverteilunganfpos=2,niltext="",blank=" ",
+null=0,strich="-",mnrfachfalsch=305,mnrjgstfalsch=305,mnrbearbeitetwerden=352
+,mnrparapheungueltig=344,mnrauswahlnichtsinnvoll=56;TEXT VAR
+neueranfbuchstabe,teiltextmeldung,unterrichtsverteilungueberschrift:="",
+schuljahr,halbjahr,altejahrgangsstufe:="",alteparaphe:="",altekopplung:="",
+altesfach,gewaehltejgst,gewaehlteparaphe,gewaehltesfach,bearbeitungsschuljahr
+,bearbeitungshalbjahr,jahrgangsstufe:="",fach,kennung,kopplung,paraphe,
+wochenstdn,klassengruppe1,klassengruppe2,klassengruppe3,klassengruppe4,
+raumgruppe1,raumgruppe2,anfbuchstabe,auswahlnichtsinnvoll;TEXT CONST
+unterstreichung:=bildbreite*"-",leerzeile:=bildbreite*blank,textueb1:=
+"Jgst. ",textueb2:="Fach Kenng. ",textueb3:="Paraphe ",textueb4:="Kopplung "
+,textueb5:="Wstd. Klassengruppen Räume ";TEXT VAR textueberschrift
+:="";INT VAR eingabestatus,bildanfang,spalte2druckbreite,druckzeilenzahl,
+aktuelleindexnr:=dnrlehrveranstaltungen,feldnr,jgsthilfsvar;INT CONST
+groesstejgst:=13,kleinstejgst:=5;BOOL VAR geplanteshjgewaehlt,erstezeile:=
+FALSE ,sortjgstalle,sortjgstbest,sortparaphenalle,sortparaphebest,
+sortkopplungen,sortfaecher,sortbestfach;BOOL PROC multistop:BOOL VAR b;IF
+dbstatus=okTHEN IF sortjgstalleXOR sortparaphenalleXOR sortkopplungenXOR
+sortfaecherTHEN b:=bearbeitungshalbjahr=wert(fnrlvhj)ELIF sortjgstbestTHEN b
+:=gewaehltejgst=wert(fnrlvjgst)AND bearbeitungshalbjahr=wert(fnrlvhj)ELIF
+sortparaphebestTHEN b:=gewaehlteparaphe=wert(fnrlvparaphe)AND
+bearbeitungshalbjahr=wert(fnrlvhj)ELIF sortbestfachTHEN b:=text(
+gewaehltesfach,2)=text(wert(fnrlvfachkennung),2)AND bearbeitungshalbjahr=wert
+(fnrlvhj)FI ;ELSE b:=FALSE FI ;bEND PROC multistop;BOOL PROC multistopsim:
+setzebestandende(FALSE );BOOL VAR b:=multistop;setzebestandende(NOT b);bEND
+PROC multistopsim;PROC unterrichtsverteilungspezielleteile(INT CONST nr):
+SELECT nrOF CASE 1:unterrichtsverteilungdialogvorbereitenCASE 2:
+unterrichtsverteilungeingabenrichtigCASE 3:
+unterrichtsverteilunglistenvorbereitenCASE 4:
+unterrichtsverteilungdruckvorbereitenCASE 5:unterrichtsverteilungseitedrucken
+CASE 6:unterrichtsverteilungbildschirmvorbereitenCASE 7:
+unterrichtsverteilungseitezeigenENDSELECT .END PROC
+unterrichtsverteilungspezielleteile;PROC
+unterrichtsverteilungdialogvorbereiten:unterrichtsverteilungueberschrift:=
+text(vergleichsknoten);setzeanfangswerte(maskeunterrichtsverteilung,
+unterrichtsverteilunganfpos)END PROC unterrichtsverteilungdialogvorbereiten;
+PROC unterrichtsverteilungeingabenrichtig:LET fnrlehrveranstgn=2,
+fnrlehrveranstgnjgst=3,fnrkopplungen=4,fnrparaphen=5,fnrbestparaphe=6,
+fnrfaecher=7,fnrfach=8,fnraktuelleshj=9,fnrausgbild=10,fnrausgdrucker=11;
+sortjgstalle:=FALSE ;sortjgstbest:=FALSE ;sortparaphenalle:=FALSE ;
+sortparaphebest:=FALSE ;sortkopplungen:=FALSE ;sortfaecher:=FALSE ;
+sortbestfach:=FALSE ;IF ausgabemediumkorrektgewaehltTHEN setzeausgabedrucker(
+standardmaskenfeld(fnrausgbild)=niltext);geplanteshjgewaehlt:=
+standardmaskenfeld(fnraktuelleshj)=niltext;
+sortierartpruefenundmerkenbzwfehlermeldungausgeben;ELSE
+meldefehlerauswahldruckerbildschirm;setzeeingabetest(FALSE )FI .
+ausgabemediumkorrektgewaehlt:standardpruefe(5,fnrausgbild,fnrausgdrucker,null
+,niltext,eingabestatus);eingabestatus=0.
+sortierartpruefenundmerkenbzwfehlermeldungausgeben:IF (standardmaskenfeld(
+fnrkopplungen)=niltextAND standardmaskenfeld(fnrparaphen)=niltextAND
+standardmaskenfeld(fnrbestparaphe)=niltextAND standardmaskenfeld(fnrfaecher)=
+niltextAND standardmaskenfeld(fnrfach)=niltext)THEN IF standardmaskenfeld(
+fnrlehrveranstgn)=niltextTHEN meldefehler;setzeeingabetest(FALSE )ELSE
+sortierungnachlehrveranstaltungenweiterpruefenFI ;ELSE IF NOT (
+standardmaskenfeld(fnrlehrveranstgn)=niltextAND standardmaskenfeld(
+fnrlehrveranstgnjgst)=niltext)THEN meldefehler;setzeeingabetest(FALSE )ELSE
+sortierungnachkopplungenparaphenoderfaechernpruefenFI ;FI .
+sortierungnachlehrveranstaltungenweiterpruefen:IF standardmaskenfeld(
+fnrlehrveranstgnjgst)=niltextTHEN sortjgstalle:=TRUE ;setzeeingabetest(TRUE )
+ELSE IF jgstkorrektTHEN sortjgstbest:=TRUE ;setzeeingabetest(TRUE )ELSE
+meldefehlerjgst;setzeeingabetest(FALSE )FI ;FI ;.
+sortierungnachkopplungenparaphenoderfaechernpruefen:IF standardmaskenfeld(
+fnrkopplungen)<>niltextTHEN IF standardmaskenfeld(fnrparaphen)=niltextAND
+standardmaskenfeld(fnrbestparaphe)=niltextAND standardmaskenfeld(fnrfaecher)=
+niltextAND standardmaskenfeld(fnrfach)=niltextTHEN sortkopplungen:=TRUE ;
+setzeeingabetest(TRUE )ELSE meldefehler;setzeeingabetest(FALSE )FI ;ELSE IF
+standardmaskenfeld(fnrparaphen)<>niltextTHEN IF standardmaskenfeld(fnrfaecher
+)=niltextAND standardmaskenfeld(fnrfach)=niltextTHEN
+weiterepruefungzursortierungparaphenELSE meldefehler;setzeeingabetest(FALSE )
+FI ;ELSE IF standardmaskenfeld(fnrfaecher)<>niltextTHEN IF standardmaskenfeld
+(fnrparaphen)=niltextAND standardmaskenfeld(fnrbestparaphe)=niltextTHEN
+weiterepruefungzursortierungfaecherELSE meldefehler;setzeeingabetest(FALSE )
+FI ;FI ;FI ;FI ;.weiterepruefungzursortierungparaphen:IF standardmaskenfeld(
+fnrbestparaphe)=niltextTHEN sortparaphenalle:=TRUE ;setzeeingabetest(TRUE )
+ELSE gewaehlteparaphe:=standardmaskenfeld(fnrbestparaphe);IF paraphekorrekt
+THEN sortparaphebest:=TRUE ;setzeeingabetest(TRUE )FI ;FI ;.
+weiterepruefungzursortierungfaecher:IF standardmaskenfeld(fnrfach)=niltext
+THEN sortfaecher:=TRUE ;setzeeingabetest(TRUE )ELSE gewaehltesfach:=
+standardmaskenfeld(fnrfach);IF fachkorrektTHEN sortbestfach:=TRUE ;
+setzeeingabetest(TRUE )FI ;FI ;.meldefehlerauswahldruckerbildschirm:infeld(
+fnrausgbild);standardmeldung(mnrauswahlnichtsinnvoll,niltext).meldefehler:
+meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung(
+auswahlnichtsinnvoll,niltext).jgstkorrekt:gewaehltejgst:=standardmaskenfeld(
+fnrlehrveranstgnjgst);jgsthilfsvar:=int(gewaehltejgst);IF NOT
+lastconversionokTHEN LEAVE jgstkorrektWITH FALSE FI ;IF jgsthilfsvar<10THEN
+gewaehltejgst:=text(jgsthilfsvar);FI ;jgsthilfsvar<=groesstejgstAND
+jgsthilfsvar>=kleinstejgst.paraphekorrekt:inittupel(dnrlehrer);putwert(
+fnrlparaphe,gewaehlteparaphe);search(dnrlehrer,TRUE );dbstatus=ok.fachkorrekt
+:inittupel(dnrfaecher);putwert(fnrffach,gewaehltesfach);search(dnrfaecher,
+TRUE );dbstatus=ok.fehlerfalscheparaphe:standardmeldung(mnrparapheungueltig,
+niltext);infeld(fnrbestparaphe);.meldefehlerjgst:standardmeldung(
+mnrjgstfalsch,niltext);infeld(fnrlehrveranstgnjgst);.END PROC
+unterrichtsverteilungeingabenrichtig;PROC
+unterrichtsverteilunglistenvorbereiten:BOOL VAR b;initspalten;
+setzespaltentrenner(spaltentrenner);bearbeitungshalbjahr:=schulkenndatum(
+"Schulhalbjahr");bearbeitungsschuljahr:=schulkenndatum("Schuljahr");IF
+geplanteshjgewaehltTHEN geplanteshjundsjberechnen(bearbeitungshalbjahr,
+bearbeitungsschuljahr);FI ;inittupel(dnrlehrveranstaltungen);setzeidentiwert(
+"");initobli(anzahlderobjekteprobildschirm);putwert(fnrlvsj,
+bearbeitungsschuljahr);putwert(fnrlvhj,bearbeitungshalbjahr);IF sortjgstalle
+XOR sortjgstbestTHEN sortierungnachprimärindexvorbereitenELIF sortkopplungen
+THEN sortierungnachsekindexlvkopplungvorbereitenELIF sortfaecherOR
+sortbestfachTHEN sortierungnachsekindexlvfachvorbereitenELSE
+sortierungnachsekindexlvparaphevorbereitenFI ;objektlistestarten(
+aktuelleindexnr,bearbeitungsschuljahr,feldnr,TRUE ,b);setzebestandende(NOT
+multistopCOR b);.sortierungnachprimärindexvorbereiten:setzescanstartwert("");
+setzescanendewert("�");textueberschrift:=(textueb1+textueb2+textueb4+2*blank+
+textueb3+blank+textueb5);aktuelleindexnr:=dnrlehrveranstaltungen;IF
+sortjgstbestTHEN putwert(fnrlvjgst,gewaehltejgst);feldnr:=fnrlvfachkennung;
+ELSE feldnr:=fnrlvjgst;setzescanendewert("255");FI ;.
+sortierungnachsekindexlvkopplungvorbereiten:textueberschrift:=(textueb4+
+textueb1+textueb2+2*blank+textueb3+2*blank+textueb5);aktuelleindexnr:=
+ixlvsjhjkopp;feldnr:=fnrlvkopplung;.
+sortierungnachsekindexlvparaphevorbereiten:textueberschrift:=(textueb3+
+textueb1+textueb2+textueb4+2*blank+textueb5);aktuelleindexnr:=ixlvsjhjpar;IF
+sortparaphebestTHEN putwert(fnrlvparaphe,gewaehlteparaphe);feldnr:=
+fnrlvfachkennung;ELSE feldnr:=fnrlvparapheFI ;.
+sortierungnachsekindexlvfachvorbereiten:textueberschrift:=(textueb2+textueb1+
+textueb4+textueb3+2*blank+textueb5);aktuelleindexnr:=ixlvsjhjkenn;IF
+sortbestfachTHEN feldnr:=fnrlvfachkennung;putwert(fnrlvfachkennung,
+gewaehltesfach);setzescanstartwert(gewaehltesfach);setzescanendewert(text(
+gewaehltesfach,2)+code(255));ELSE feldnr:=fnrlvfachkennung;FI ;END PROC
+unterrichtsverteilunglistenvorbereiten;PROC
+unterrichtsverteilungbildschirmvorbereiten:LET fnrausganf=2;
+unterrichtsverteilungueberschrift:="Unterrichtsverteilung im Schuljahr "+(
+text(bearbeitungsschuljahr,2)+"/"+text(bearbeitungsschuljahr,2,3)+", "+
+bearbeitungshalbjahr+". Halbjahr");standardkopfmaskeaktualisieren(
+unterrichtsverteilungueberschrift);bildanfang:=fnrausganf;
+setzebildanfangsposition(bildanfang);INT VAR i;setzespaltenbreite(bildbreite)
+;spaltenweise(textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;
+erhoeheausgabeposumeins;spaltenweise(length(textueberschrift)*strich);
+ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;
+setzebildanfangsposition(4);spaltendefinierenEND PROC
+unterrichtsverteilungbildschirmvorbereiten;PROC
+unterrichtsverteilungseitezeigen:altejahrgangsstufe:=niltext;alteparaphe:=
+niltext;altekopplung:=niltext;altesfach:=niltext;blaettern(PROC (INT CONST )
+unterrichtsverteilungzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop)END PROC
+unterrichtsverteilungseitezeigen;PROC unterrichtsverteilungzeigen(INT CONST x
+):unterrichtsverteilungholen;unterrichtsverteilungaufbereitenbild;
+unterrichtsverteilungaufbildschirm;END PROC unterrichtsverteilungzeigen;PROC
+unterrichtsverteilungaufbereitenbild:IF sortkopplungenTHEN kopplungausgeben;
+spaltenweise(jahrgangsstufe);spaltenweise(fach);spaltenweise(kennung);
+spaltenweise(blank);spaltenweise(paraphe);ELIF sortjgstalleXOR sortjgstbest
+THEN jahrgangsstufeausgeben;spaltenweise(fach);spaltenweise(kennung);
+spaltenweise(kopplung);spaltenweise(paraphe);ELIF sortparaphenalleXOR
+sortparaphebestTHEN parapheausgeben;spaltenweise(blank);spaltenweise(
+jahrgangsstufe);spaltenweise(fach);spaltenweise(kennung);spaltenweise(
+kopplung);ELIF sortfaecherXOR sortbestfachTHEN fachausgeben;spaltenweise(
+kennung);spaltenweise(jahrgangsstufe);spaltenweise(kopplung);spaltenweise(
+paraphe);FI ;spaltenweise(wochenstdn);spaltenweise(blank);spaltenweise(
+klassengruppe1);spaltenweise(klassengruppe2);spaltenweise(klassengruppe3);
+spaltenweise(klassengruppe4);spaltenweise(raumgruppe1);spaltenweise(
+raumgruppe2);.jahrgangsstufeausgeben:IF altejahrgangsstufe<>jahrgangsstufe
+THEN spaltenweise(jahrgangsstufe);altejahrgangsstufe:=jahrgangsstufe;ELSE
+spaltenweise(blank)FI ;.parapheausgeben:IF alteparaphe<>parapheTHEN
+spaltenweise(paraphe);alteparaphe:=parapheELSE spaltenweise(blank)FI ;.
+fachausgeben:IF altesfach<>fachTHEN spaltenweise(fach);altesfach:=fachELSE
+spaltenweise(blank)FI ;.kopplungausgeben:IF altekopplung<>kopplungTHEN
+spaltenweise(kopplung);altekopplung:=kopplung;ELSE spaltenweise(blank)FI ;
+END PROC unterrichtsverteilungaufbereitenbild;PROC
+unterrichtsverteilungaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaenge
+REP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;
+END PROC unterrichtsverteilungaufbildschirm;PROC
+unterrichtsverteilungdruckvorbereiten:setzebestandende(FALSE );anfbuchstabe:=
+" ";druckvorbereiten;variablenfuerdrucksetzen;
+unterrichtsverteilungueberschrift:="Unterrichtsverteilung im Schuljahr "+(
+text(bearbeitungsschuljahr,2)+"/"+text(bearbeitungsschuljahr,2,3)+", "+
+bearbeitungshalbjahr+". Halbjahr");initdruckkopf(zentriert(
+unterrichtsverteilungueberschrift,druckbreite),zentriert(length(
+unterrichtsverteilungueberschrift)*strich,druckbreite));spaltendefinieren;
+initausgabekopfdruck;inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,
+bearbeitungsschuljahr);putwert(fnrlvhj,bearbeitungshalbjahr);IF sortjgstbest
+THEN putwert(fnrlvjgst,gewaehltejgst);ELIF sortparaphebestTHEN putwert(
+fnrlvparaphe,gewaehlteparaphe);ELIF sortbestfachTHEN putwert(fnrlvfachkennung
+,gewaehltesfach);FI ;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT
+VAR )scanforward,BOOL PROC multistopsim);.variablenfuerdrucksetzen:
+druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC
+unterrichtsverteilungdruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck
+(1):=textueberschrift;ausgkopfdruck(2):=unterstreichungEND PROC
+initausgabekopfdruck;PROC unterrichtsverteilungseitedrucken:
+unterrichtsverteilungueberschriftdrucken;altejahrgangsstufe:=niltext;
+alteparaphe:=niltext;altekopplung:=niltext;altesfach:=niltext;erstezeile:=
+TRUE ;seitedrucken(PROC (INT VAR )unterrichtsverteilungdrucken,
+druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END
+PROC unterrichtsverteilungseitedrucken;PROC
+unterrichtsverteilungueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR i
+FROM 1UPTO ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck(i))PER END
+PROC unterrichtsverteilungueberschriftdrucken;PROC
+unterrichtsverteilungdrucken(INT VAR zeilenzaehler):LET markiert="#";
+unterrichtsverteilungholen;ggflmeldunganfbuchstabe;IF NOT (erstezeile)AND ((
+sortjgstalleAND altejahrgangsstufe<>jahrgangsstufe)XOR (sortkopplungenAND
+altekopplung<>kopplung)XOR (sortparaphenalleAND alteparaphe<>paraphe)XOR (
+sortfaecherAND altesfach<>fach))THEN leerzeileindruckdateiFI ;
+unterrichtsverteilungaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge;
+unterrichtsverteilungindruckdatei;erstezeile:=FALSE .leerzeileindruckdatei:
+ausgfeld(1):=text(blank,druckbreite);druckzeileschreiben(ausgfeld(1));
+zeilenzaehlerINCR ausgfeldlaenge;.ggflmeldunganfbuchstabe:IF
+anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:IF
+sortjgstalleXOR sortjgstbestTHEN neueranfbuchstabe:=jahrgangsstufeSUB 1;
+teiltextmeldung:="Jgst "ELIF sortparaphenalleXOR sortparaphebestTHEN
+neueranfbuchstabe:=parapheSUB 1;teiltextmeldung:=
+"Paraphen mit Anfangsbuchstaben: "ELIF sortkopplungenTHEN neueranfbuchstabe:=
+kopplungSUB 1;teiltextmeldung:="Kopplungen mit Anfangsbuchstaben: "ELIF
+sortfaecherXOR sortbestfachTHEN neueranfbuchstabe:=fach;teiltextmeldung:=
+"Fach: "FI ;anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe:
+standardmeldung(mnrbearbeitetwerden,teiltextmeldung+neueranfbuchstabe+
+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC
+unterrichtsverteilungdrucken;PROC unterrichtsverteilungaufbereitendruck:
+unterrichtsverteilungaufbereitenbild;ausgfeld(1):=zeile;END PROC
+unterrichtsverteilungaufbereitendruck;PROC unterrichtsverteilungindruckdatei:
+INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))
+PER END PROC unterrichtsverteilungindruckdatei;PROC spaltendefinieren:
+initspalten;setzespaltentrenner(spaltentrenner);IF sortkopplungenTHEN
+setzespaltenbreite(neunerspaltenbreite);setzespaltenbreite(
+fuenferspaltenbreite);setzespaltenbreite(zweierspaltenbreite);
+setzespaltenbreite(achterspaltenbreite);setzespaltenbreite(
+zweierspaltenbreite);setzespaltenbreite(achterspaltenbreite);ELIF
+sortjgstalleXOR sortjgstbestTHEN setzespaltenbreite(fuenferspaltenbreite);
+setzespaltenbreite(zweierspaltenbreite);setzespaltenbreite(
+neunerspaltenbreite);setzespaltenbreite(zehnerspaltenbreite);
+setzespaltenbreite(achterspaltenbreite);ELIF sortparaphenalleXOR
+sortparaphebestTHEN setzespaltenbreite(viererspaltenbreite);
+setzespaltenbreite(zweierspaltenbreite);setzespaltenbreite(
+fuenferspaltenbreite);setzespaltenbreite(zweierspaltenbreite);
+setzespaltenbreite(neunerspaltenbreite);setzespaltenbreite(
+zehnerspaltenbreite);ELIF sortfaecherXOR sortbestfachTHEN setzespaltenbreite(
+viererspaltenbreite);setzespaltenbreite(achterspaltenbreite);
+setzespaltenbreite(viererspaltenbreite);setzespaltenbreite(
+neunerspaltenbreite);setzespaltenbreite(neunerspaltenbreite);FI ;
+setzespaltenbreite(viererspaltenbreite);setzespaltenbreite(
+zweierspaltenbreite);setzespaltenbreite(viererspaltenbreite);
+setzespaltenbreite(viererspaltenbreite);setzespaltenbreite(
+viererspaltenbreite);setzespaltenbreite(fuenferspaltenbreite);
+setzespaltenbreite(viererspaltenbreite);setzespaltenbreite(
+viererspaltenbreite);END PROC spaltendefinieren;PROC
+unterrichtsverteilungholen:TEXT VAR fachkennung;halbjahr:=wert(fnrlvhj);
+jahrgangsstufe:=text(intwert(fnrlvjgst),2);fachkennung:=wert(fnrlvfachkennung
+);fach:=text(fachkennung,2);kennung:=subtext(fachkennung,3,6);kopplung:=wert(
+fnrlvkopplung);paraphe:=wert(fnrlvparaphe);wochenstdn:=text(intwert(
+fnrlvwochenstd),2);klassengruppe1:=wert(fnrlvklgrp1);klassengruppe2:=wert(
+fnrlvklgrp2);klassengruppe3:=wert(fnrlvklgrp3);klassengruppe4:=wert(
+fnrlvklgrp4);raumgruppe1:=wert(fnrlvraumgrp1);raumgruppe2:=wert(fnrlvraumgrp2
+);END PROC unterrichtsverteilungholen;END PACKET unterrichtsverteilunglisten
+
diff --git a/app/schulis/2.2.1/src/4.raumwuensche pruefen b/app/schulis/2.2.1/src/4.raumwuensche pruefen
new file mode 100644
index 0000000..109eace
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.raumwuensche pruefen
@@ -0,0 +1,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;
+
diff --git a/app/schulis/2.2.1/src/4.springstunden lehrer analysieren b/app/schulis/2.2.1/src/4.springstunden lehrer analysieren
new file mode 100644
index 0000000..bd205d2
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.springstunden lehrer analysieren
@@ -0,0 +1,122 @@
+PACKET springstundenlehrerDEFINES springstundenlehrerausfuehren:LET fnrakthj=
+2,fnrohneminiplan=3,minitagestr="!",minivornachmtr=" ",miniunterricht="*",
+minisprstd="o",minifrei=".",ausgabeparam="#",leerzeile=" ",laengeparbez=9,
+tageprowoche=6,stdprotag=12,letztestunde=66,meldungbearbwird=352,
+meldungwarten=69,meldungkeinelehrer=337,meldungkeinzeitraster=336,
+meldungserverfehler=376,meldungkeinstdplan=366,meldungkeinesugruppen=334,
+meldungzuvielesugruppen=356,meldungkeinelv=326,meldungzuvielelv=358,
+meldungbasisinkon=378,meldungstdplauswvorber=384,kennungpar="P",kennunggesp=
+"x",kennungvorm="v",kennungnachm="n",dateiname="Liste der Springstunden",
+ueberschrift="Springstunden der Lehrer für das Schulhalbjahr ",unterstrich=
+"-------------------------------------------------------",legende1=
+"In den Mini-Stundenplänen bedeuten:",legende2=
+""" Unterricht für den Lehrer",legende3=""" Springstunde für den Lehrer",
+legende4=""" andere Zeiten ohne Unterricht",legende5=
+" ""x"" gesperrte Zeiten aufgrund des Zeitrasters",legende6=
+""" Trennzeichen Vor- und Nachmittag",legende7=
+""" Trennzeichen Unterrichtstage",legende8="Zeitraster der Schule:",legende9
+="Mo Di Mi Do Fr Sa",
+ausgabewstd=" Wstd. ",vorgabetage=" 0 Tage (0 v/ 0 n) ",vorgabesprstd1=
+" Springstd. (",vorgabesprstd2=" x1/ ",vorgabesprstd3=" x2/ ",vorgabesprstd4=
+" xgr.)",posunttage=2,posvormtage=10,posnachmtage=15,schuljahr="Schuljahr",
+halbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort";TEXT VAR
+paraphe,schj,schhj,ausgabetage,ausgabesprstd,miniplan:="",iminiplan,
+ausgminiplan,tagesplan,zeile,vormnachmwechsel:="",relzeit,zeichen;INT VAR i,j
+,wstd,stdverschiebung,erstepos,letztepos,anzunttage,anzvormtage,anznachmtage,
+anzsprstd,anzsprstd1,anzsprstd2,anzsprstdx,sprstdlaenge,indextagesanf,mittag,
+fstat;TEXT VAR kvn,kzt,kaktvn;BOOL VAR miniplanausgabe:=FALSE ,
+erstenichtvormstd:=TRUE ,keinmittag:=TRUE ;FILE VAR datei;PROC
+springstundenlehrerausfuehren:standardmeldung(meldungwarten,"");
+miniplanausgabe:=FALSE ;schj:=schulkenndatum(schuljahr);schhj:=schulkenndatum
+(halbjahr);IF standardmaskenfeld(fnrakthj)=""THEN geplanteshjundsjberechnen(
+schhj,schj)FI ;IF standardmaskenfeld(fnrohneminiplan)=""THEN miniplanausgabe
+:=TRUE ;FI ;erstelleminiplan;stundenplanhalbjahrsetzen(schhj,schj);
+standardmeldung(meldungstdplauswvorber,"");
+stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN
+meldungausgeben(fstat);return(1);LEAVE springstundenlehrerausfuehrenFI ;
+inittupel(dnrlehrer);IF records(dnrlehrer)=0.0THEN standardmeldung(
+meldungkeinelehrer,"");return(1);LEAVE springstundenlehrerausfuehrenELSE
+bereiteprotokollvor;statleseschleife(dnrlehrer,"","",dnrlehrer+1,dnrlehrer+2,
+PROC lehrer)FI ;zeigedatei(dateiname,"vr").bereiteprotokollvor:forget(
+dateiname,quiet);datei:=sequentialfile(output,dateiname);putline(datei,
+schulkenndatum(schulname));putline(datei,text(schulkenndatum(schulort),65)+
+date);putline(datei,leerzeile);putline(datei,ueberschrift+schhj+". "+text(
+schj,2)+"/"+subtext(schj,3));putline(datei,unterstrich);putline(datei,
+leerzeile);IF miniplanausgabeTHEN putline(datei,legende1);putline(datei,
+" """+miniunterricht+legende2);putline(datei," """+minisprstd+legende3)
+;putline(datei," """+minifrei+legende4);putline(datei,legende5);putline(
+datei," """+minivornachmtr+legende6);putline(datei," """+minitagestr+
+legende7);putline(datei,leerzeile);putline(datei,legende8);putline(datei,
+legende9);bereiteplanauf(miniplan);putline(datei,ausgminiplan);putline(datei,
+leerzeile)FI .erstelleminiplan:miniplan:="";vormnachmwechsel:="";IF records(
+dnrzeitraster)=0.0THEN standardmeldung(meldungkeinzeitraster,"");return(1);
+LEAVE springstundenlehrerausfuehrenFI ;erstenichtvormstd:=TRUE ;inittupel(
+dnrzeitraster);statleseschleife(dnrzeitraster,schj,schhj,dnrzeitraster+1,
+dnrzeitraster+2,PROC zeitrasterdaten);IF length(miniplan)<letztestundeTHEN
+standardmeldung(meldungkeinzeitraster,"");return(1);LEAVE
+springstundenlehrerausfuehrenFI .END PROC springstundenlehrerausfuehren;PROC
+lehrer(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE paraphe:=wert(fnrlparaphe)
+;standardmeldung(meldungbearbwird,paraphe+ausgabeparam);wstd:=
+anzahlverplstden(paraphe);zeile:=text(paraphe,laengeparbez);zeileCAT text(
+wstd,2);zeileCAT ausgabewstd;untersuchetage;zeileCAT ausgabetage;
+untersuchesprstden;zeileCAT ausgabesprstd;putline(datei,zeile);IF
+miniplanausgabeTHEN bereiteplanauf(iminiplan);changeall(ausgminiplan,
+kennungvorm,minifrei);changeall(ausgminiplan,kennungnachm,minifrei);putline(
+datei,ausgminiplan)FI ;line(datei)FI .untersuchetage:ausgabetage:=vorgabetage
+;IF anzunttage<>0THEN replace(ausgabetage,posunttage,text(anzunttage))FI ;IF
+anzvormtage<>0THEN replace(ausgabetage,posvormtage,text(anzvormtage))FI ;IF
+anznachmtage<>0THEN replace(ausgabetage,posnachmtage,text(anznachmtage))FI .
+untersuchesprstden:anzsprstd:=0;anzsprstd1:=0;anzsprstd2:=0;anzsprstdx:=0;
+FOR iFROM 1UPTO tageprowocheREP erstepos:=0;letztepos:=0;indextagesanf:=(i-1)
+*stdprotag;tagesplan:=subtext(iminiplan,indextagesanf+1,i*stdprotag);
+ermittlerandundsprstdenPER .ermittlerandundsprstden:erstepos:=pos(tagesplan,
+miniunterricht);IF erstepos<>0THEN ermittleletztestd;ermittlevormnachmwechsel
+;ermittlespringstdFI .ermittleletztestd:FOR jFROM stdprotagDOWNTO 1REP IF (
+tagesplanSUB j)=miniunterrichtTHEN letztepos:=j;LEAVE ermittleletztestdFI
+PER .ermittlevormnachmwechsel:mittag:=0;FOR jFROM 12DOWNTO 1REP IF (miniplan
+SUB indextagesanf+j)=kennungvormTHEN mittag:=j;LEAVE ermittlevormnachmwechsel
+FI PER .ermittlespringstd:keinmittag:=TRUE ;FOR jFROM letzteposDOWNTO
+ersteposREP IF (tagesplanSUB j)=kennungvormCOR (tagesplanSUB j)=kennungnachm
+COR (tagesplanSUB j)=kennunggespTHEN anzsprstdINCR 1;sprstdlaengeINCR 1;IF
+miniplanausgabeTHEN replace(iminiplan,indextagesanf+j,minisprstd);FI ;IF j=
+mittag+1COR j=mittagTHEN IF keinmittagTHEN anzsprstdINCR 1;sprstdlaengeINCR 1
+;keinmittag:=FALSE FI FI ELSE IF sprstdlaenge=1THEN anzsprstd1INCR 1ELIF
+sprstdlaenge=2THEN anzsprstd2INCR 1ELIF sprstdlaenge>2THEN anzsprstdxINCR 1
+FI ;sprstdlaenge:=0;FI PER ;IF keinmittagCAND erstepos<=mittagCAND letztepos>
+mittagTHEN anzsprstdINCR 1;anzsprstd1INCR 1FI ;ausgabesprstd:=text(anzsprstd,
+2)+vorgabesprstd1+text(anzsprstd1,2)+vorgabesprstd2+text(anzsprstd2,2)+
+vorgabesprstd3+text(anzsprstdx,2)+vorgabesprstd4.END PROC lehrer;PROC
+bereiteplanauf(TEXT CONST plan):ausgminiplan:=plan;stdverschiebung:=0;FOR i
+FROM 1UPTO length(vormnachmwechsel)DIV 3REP relzeit:=vormnachmwechselSUB i*3-
+2;relzeitCAT (vormnachmwechselSUB i*3-1);zeichen:=vormnachmwechselSUB i*3;
+insertchar(ausgminiplan,zeichen,int(relzeit)+stdverschiebung);stdverschiebung
+INCR 1PER ;END PROC bereiteplanauf;PROC zeitrasterdaten(BOOL VAR b):IF wert(
+fnrzrsj)<>schjCOR wert(fnrzrhj)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE kvn:=
+wert(fnrzrkennungteil);kzt:=text(wert(fnrzrtagstunde),2);miniplanCAT kvn;IF
+kvn<>kennungvormTHEN IF erstenichtvormstdTHEN kaktvn:=kzt;erstenichtvormstd:=
+FALSE FI ELSE erstenichtvormstd:=TRUE FI ;IF int(kzt)MOD stdprotag=1CAND kzt
+<>"1 "THEN IF kaktvn<>""THEN vormnachmwechselCAT kaktvn;vormnachmwechselCAT
+minivornachmtr;kaktvn:=""FI ;vormnachmwechselCAT kzt;vormnachmwechselCAT
+minitagestrFI ;IF kzt=text(letztestunde)THEN IF kaktvn<>""THEN
+vormnachmwechselCAT kaktvn;vormnachmwechselCAT minivornachmtr;kaktvn:=""FI
+FI FI END PROC zeitrasterdaten;INT PROC anzahlverplstden(TEXT CONST paraphe):
+TEXT VAR stundenplan:=allezeitenvon(kennungpar,paraphe),unttage:=tageprowoche
+*"0",vormtage:=tageprowoche*"0",nachmtage:=tageprowoche*"0";INT VAR einspos:=
+1,anzeinsen:=0,wochentag;iminiplan:=miniplan;anzunttage:=0;anzvormtage:=0;
+anznachmtage:=0;WHILE einspos<>0REP einspos:=pos(stundenplan,"1",einspos);IF
+einspos<>0THEN anzeinsenINCR 1;replace(iminiplan,einspos,miniunterricht);
+wochentag:=(einspos-1)DIV stdprotag+1;IF (unttageSUB wochentag)="0"THEN
+replace(unttage,wochentag,"1");anzunttageINCR 1FI ;IF (vormtageSUB wochentag)
+="0"CAND vormittagsunterrichtTHEN replace(vormtage,wochentag,"1");anzvormtage
+INCR 1FI ;IF (nachmtageSUB wochentag)="0"CAND nachmittagsunterrichtTHEN
+replace(nachmtage,wochentag,"1");anznachmtageINCR 1FI ;einsposINCR 1FI PER ;
+anzeinsen.vormittagsunterricht:(miniplanSUB einspos)=kennungvorm.
+nachmittagsunterricht:(miniplanSUB einspos)=kennungnachm.END PROC
+anzahlverplstden;PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN
+standardmeldung(meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(
+meldungkeinstdplan,"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen
+,"");ELIF fstat=5THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6
+THEN standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(
+meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");
+FI END PROC meldungausgeben;END PACKET springstundenlehrer;
+
diff --git a/app/schulis/2.2.1/src/4.springstunden schueler analysieren b/app/schulis/2.2.1/src/4.springstunden schueler analysieren
new file mode 100644
index 0000000..39a9bfc
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.springstunden schueler analysieren
@@ -0,0 +1,137 @@
+PACKET springstundenschuelerDEFINES springstundenschuelerausfuehren:LET
+fnrakthj=3,fnrohneminiplan=4,minitagestr="!",minivornachmtr=" ",
+miniunterricht="*",minisprstd="o",minifrei=".",ausgabeparam="#",leerzeile=" "
+,laengelv=8,laengeschgrbez=9,tageprowoche=6,stdprotag=12,letztestunde=66,
+meldungbearbwird=352,meldungwarten=69,meldungkeineschueler=332,
+meldungkeinzeitraster=336,meldungserverfehler=376,meldungkeinstdplan=366,
+meldungkeinesugruppen=334,meldungzuvielesugruppen=356,meldungkeinelv=326,
+meldungzuvielelv=358,meldungbasisinkon=378,meldungstdplauswvorber=384,
+kennunglv="L",kennunggesp="x",kennungvorm="v",kennungnachm="n",dateiname=
+"Liste der Springstunden",ueberschrift=
+"Springstunden der Schülergruppen Sek.1 für das Schulhalbjahr ",unterstrich=
+"---------------------------------------------------------------------",
+legende1="In den Mini-Stundenplänen bedeuten:",legende2=
+""" Unterricht für die Schülergruppe",legende3=
+""" Springstunde für die Schülergruppe",legende4=
+""" andere Zeiten ohne Unterricht",legende5=
+" ""x"" gesperrte Zeiten aufgrund des Zeitrasters",legende6=
+""" Trennzeichen Vor- und Nachmittag",legende7=
+""" Trennzeichen Unterrichtstage",legende8="Zeitraster der Schule:",legende9
+="Mo Di Mi Do Fr Sa",
+ausgabewstd=" Wstd. ",vorgabetage=" 0 Tage (0 v/ 0 n) ",vorgabesprstd1=
+" Springstd. (",vorgabesprstd2=" x1/ ",vorgabesprstd3=" x2/ ",vorgabesprstd4=
+" xgr.)",posunttage=2,posvormtage=10,posnachmtage=15,schuljahr="Schuljahr",
+halbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort";TEXT VAR
+schgrbez,schj,schhj,ausgabetage,ausgabesprstd,miniplan:="",iminiplan,
+ausgminiplan,tagesplan,zeile,vormnachmwechsel:="",relzeit,zeichen;TEXT VAR
+kvn,kzt,kaktvn;INT VAR i,j,wstd,stdverschiebung,erstepos,letztepos,mittag,
+anzunttage,anzvormtage,anznachmtage,anzsprstd,anzsprstd1,anzsprstd2,
+anzsprstdx,sprstdlaenge,indextagesanf,fstat;BOOL VAR miniplanausgabe:=FALSE ,
+erstenichtvormstd:=TRUE ,keinmittag:=TRUE ,keinschueler:=TRUE ;FILE VAR datei
+;PROC springstundenschuelerausfuehren:standardmeldung(meldungwarten,"");
+miniplanausgabe:=FALSE ;schj:=schulkenndatum(schuljahr);schhj:=schulkenndatum
+(halbjahr);IF standardmaskenfeld(fnrakthj)=""THEN geplanteshjundsjberechnen(
+schhj,schj)FI ;IF standardmaskenfeld(fnrohneminiplan)=""THEN miniplanausgabe
+:=TRUE ;FI ;erstelleminiplan;stundenplanhalbjahrsetzen(schhj,schj);
+standardmeldung(meldungstdplauswvorber,"");
+stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN
+meldungausgeben(fstat);return(1);LEAVE springstundenschuelerausfuehrenFI ;
+inittupel(dnraktschuelergruppen);IF records(dnraktschuelergruppen)=0.0THEN
+standardmeldung(meldungkeineschueler,"");return(1);LEAVE
+springstundenschuelerausfuehrenELSE bereiteprotokollvor;keinschueler:=TRUE ;
+statleseschleife(dnraktschuelergruppen,schj,schhj,fnrsgrpsj,fnrsgrphj,PROC
+schueler);IF keinschuelerTHEN standardmeldung(meldungkeineschueler,"");return
+(1);LEAVE springstundenschuelerausfuehrenFI FI ;zeigedatei(dateiname,"vr").
+bereiteprotokollvor:forget(dateiname,quiet);datei:=sequentialfile(output,
+dateiname);putline(datei,schulkenndatum(schulname));putline(datei,text(
+schulkenndatum(schulort),65)+date);putline(datei,leerzeile);putline(datei,
+ueberschrift+schhj+". "+text(schj,2)+"/"+subtext(schj,3));putline(datei,
+unterstrich);putline(datei,leerzeile);IF miniplanausgabeTHEN putline(datei,
+legende1);putline(datei," """+miniunterricht+legende2);putline(datei,
+" """+minisprstd+legende3);putline(datei," """+minifrei+legende4);
+putline(datei,legende5);putline(datei," """+minivornachmtr+legende6);
+putline(datei," """+minitagestr+legende7);putline(datei,leerzeile);putline
+(datei,legende8);putline(datei,legende9);bereiteplanauf(miniplan);putline(
+datei,ausgminiplan);putline(datei,leerzeile)FI .erstelleminiplan:miniplan:=""
+;vormnachmwechsel:="";IF records(dnrzeitraster)=0.0THEN standardmeldung(
+meldungkeinzeitraster,"");return(1);LEAVE springstundenschuelerausfuehrenFI ;
+erstenichtvormstd:=TRUE ;inittupel(dnrzeitraster);statleseschleife(
+dnrzeitraster,schj,schhj,dnrzeitraster+1,dnrzeitraster+2,PROC zeitrasterdaten
+);IF length(miniplan)<letztestundeTHEN standardmeldung(meldungkeinzeitraster,
+"");return(1);LEAVE springstundenschuelerausfuehrenFI .END PROC
+springstundenschuelerausfuehren;PROC schueler(BOOL VAR b):IF wert(fnrsgrpsj)
+<>schjCOR wert(fnrsgrphj)<>schhjCOR intwert(fnrsgrpjgst)>10COR dbstatus<>0
+THEN b:=TRUE ELSE schgrbez:=jgstaufber(wert(fnrsgrpjgst))+wert(fnrsgrpkennung
+);standardmeldung(meldungbearbwird,schgrbez+ausgabeparam);wstd:=
+anzahlverplstden(schgrbez);zeile:=text(schgrbez,laengeschgrbez);zeileCAT text
+(wstd,2);zeileCAT ausgabewstd;untersuchetage;zeileCAT ausgabetage;
+untersuchesprstden;zeileCAT ausgabesprstd;putline(datei,zeile);IF
+miniplanausgabeTHEN bereiteplanauf(iminiplan);changeall(ausgminiplan,
+kennungvorm,minifrei);changeall(ausgminiplan,kennungnachm,minifrei);putline(
+datei,ausgminiplan)FI ;line(datei);IF keinschuelerTHEN keinschueler:=FALSE
+FI FI .untersuchetage:ausgabetage:=vorgabetage;IF anzunttage<>0THEN replace(
+ausgabetage,posunttage,text(anzunttage))FI ;IF anzvormtage<>0THEN replace(
+ausgabetage,posvormtage,text(anzvormtage))FI ;IF anznachmtage<>0THEN replace(
+ausgabetage,posnachmtage,text(anznachmtage))FI .untersuchesprstden:anzsprstd
+:=0;anzsprstd1:=0;anzsprstd2:=0;anzsprstdx:=0;FOR iFROM 1UPTO tageprowoche
+REP erstepos:=0;letztepos:=0;indextagesanf:=(i-1)*stdprotag;tagesplan:=
+subtext(iminiplan,indextagesanf+1,i*stdprotag);ermittlerandundsprstdenPER .
+ermittlerandundsprstden:erstepos:=pos(tagesplan,miniunterricht);IF erstepos<>
+0THEN ermittleletztestd;ermittlevormnachmwechsel;ermittlespringstdFI .
+ermittleletztestd:FOR jFROM stdprotagDOWNTO 1REP IF (tagesplanSUB j)=
+miniunterrichtTHEN letztepos:=j;LEAVE ermittleletztestdFI PER .
+ermittlevormnachmwechsel:mittag:=0;FOR jFROM 12DOWNTO 1REP IF (miniplanSUB
+indextagesanf+j)=kennungvormTHEN mittag:=j;LEAVE ermittlevormnachmwechselFI
+PER .ermittlespringstd:keinmittag:=TRUE ;FOR jFROM letzteposDOWNTO erstepos
+REP IF (tagesplanSUB j)=kennungvormCOR (tagesplanSUB j)=kennungnachmCOR (
+tagesplanSUB j)=kennunggespTHEN anzsprstdINCR 1;sprstdlaengeINCR 1;IF
+miniplanausgabeTHEN replace(iminiplan,indextagesanf+j,minisprstd);FI ;IF j=
+mittag+1COR j=mittagTHEN IF keinmittagTHEN anzsprstdINCR 1;sprstdlaengeINCR 1
+;keinmittag:=FALSE ;FI FI ELSE IF sprstdlaenge=1THEN anzsprstd1INCR 1ELIF
+sprstdlaenge=2THEN anzsprstd2INCR 1ELIF sprstdlaenge>2THEN anzsprstdxINCR 1
+FI ;sprstdlaenge:=0;FI PER ;IF keinmittagCAND erstepos<=mittagCAND letztepos>
+mittagTHEN anzsprstdINCR 1;anzsprstd1INCR 1FI ;ausgabesprstd:=text(anzsprstd,
+2)+vorgabesprstd1+text(anzsprstd1,2)+vorgabesprstd2+text(anzsprstd2,2)+
+vorgabesprstd3+text(anzsprstdx,2)+vorgabesprstd4.END PROC schueler;PROC
+bereiteplanauf(TEXT CONST plan):ausgminiplan:=plan;stdverschiebung:=0;FOR i
+FROM 1UPTO length(vormnachmwechsel)DIV 3REP relzeit:=vormnachmwechselSUB i*3-
+2;relzeitCAT (vormnachmwechselSUB i*3-1);zeichen:=vormnachmwechselSUB i*3;
+insertchar(ausgminiplan,zeichen,int(relzeit)+stdverschiebung);stdverschiebung
+INCR 1PER ;END PROC bereiteplanauf;PROC zeitrasterdaten(BOOL VAR b):IF wert(
+fnrzrsj)<>schjCOR wert(fnrzrhj)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE kvn:=
+wert(fnrzrkennungteil);kzt:=text(wert(fnrzrtagstunde),2);miniplanCAT kvn;IF
+kvn<>kennungvormTHEN IF erstenichtvormstdTHEN kaktvn:=kzt;erstenichtvormstd:=
+FALSE FI ELSE erstenichtvormstd:=TRUE FI ;IF int(kzt)MOD stdprotag=1CAND kzt
+<>"1 "THEN IF kaktvn<>""THEN vormnachmwechselCAT kaktvn;vormnachmwechselCAT
+minivornachmtr;kaktvn:=""FI ;vormnachmwechselCAT kzt;vormnachmwechselCAT
+minitagestrFI #IF kzt=text(letztestunde)THEN IF kaktvn<>""THEN
+vormnachmwechselCAT kaktvn;vormnachmwechselCAT minivornachmtr;kaktvn:=""FI
+FI #FI END PROC zeitrasterdaten;INT PROC anzahlverplstden(TEXT CONST schgr):
+TEXT VAR stundenplan:=erstelleallezeiten(schgr),unttage:=tageprowoche*"0",
+vormtage:=tageprowoche*"0",nachmtage:=tageprowoche*"0";INT VAR einspos:=1,
+anzeinsen:=0,wochentag;iminiplan:=miniplan;anzunttage:=0;anzvormtage:=0;
+anznachmtage:=0;WHILE einspos<>0REP einspos:=pos(stundenplan,"1",einspos);IF
+einspos<>0THEN anzeinsenINCR 1;replace(iminiplan,einspos,miniunterricht);
+wochentag:=(einspos-1)DIV stdprotag+1;IF (unttageSUB wochentag)="0"THEN
+replace(unttage,wochentag,"1");anzunttageINCR 1FI ;IF (vormtageSUB wochentag)
+="0"CAND vormittagsunterrichtTHEN replace(vormtage,wochentag,"1");anzvormtage
+INCR 1FI ;IF (nachmtageSUB wochentag)="0"CAND nachmittagsunterrichtTHEN
+replace(nachmtage,wochentag,"1");anznachmtageINCR 1FI ;einsposINCR 1FI PER ;
+anzeinsen.vormittagsunterricht:(miniplanSUB einspos)=kennungvorm.
+nachmittagsunterricht:(miniplanSUB einspos)=kennungnachm.END PROC
+anzahlverplstden;TEXT PROC erstelleallezeiten(TEXT CONST schgruppe):TEXT VAR
+allelv:=lvderschuelergruppe(schgruppe),allezeiten,aktzeiten:="",aktlv;INT
+VAR i,einspos:=1;aktlv:=text(allelv,laengelv);allezeiten:=allezeitenvon(
+kennunglv,aktlv);FOR iFROM 2UPTO length(allelv)DIV laengelvREP aktlv:=subtext
+(allelv,(i-1)*laengelv+1,i*laengelv);aktzeiten:=allezeitenvon(kennunglv,aktlv
+);einspos:=1;WHILE einspos<>0REP einspos:=pos(aktzeiten,"1",einspos);IF
+einspos<>0THEN IF (allezeitenSUB einspos)="0"THEN replace(allezeiten,einspos,
+"1");FI ;einsposINCR 1FI ;PER ;PER ;allezeitenEND PROC erstelleallezeiten;
+PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung(
+meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(meldungkeinstdplan,
+"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5
+THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN
+standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(
+meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");
+FI END PROC meldungausgeben;END PACKET springstundenschueler;
+
diff --git a/app/schulis/2.2.1/src/4.stand der stundenplanung analysieren b/app/schulis/2.2.1/src/4.stand der stundenplanung analysieren
new file mode 100644
index 0000000..c505d27
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.stand der stundenplanung analysieren
@@ -0,0 +1,98 @@
+PACKET standderstundenplanunganalysierenDEFINES
+stundenplanstandanalyseausfuehren:LET feldakthj=2,dateiname="Fehlerprotokoll"
+,schulname="Schulname",schulort="Schulort",schuljahr="Schuljahr",halbjahr=
+"Schulhalbjahr",kennunglv="L",kennungkopplg="K",ausgpar="#",anzkopfzeilen=10,
+laengelv=8,laengekopplg=8,laengefachkenn=6,leererraum=" ",leerzeile=" ",
+ueberschrift1="Fehlerprotokoll zum Stand der Stundenplanung",unterstrich1=
+"-----------------------------------------------------",ausgkopp=" "
+,ausgkopplv=" ",ueberschrift2=
+"Kopplung Lehrveranst. Wstd. Anmerkung",ueberschrift3=
+" soll/ist",unterstrich2=
+"---------+------------+-----------+--------------------------------------",
+keinefehler="Keine Fehler aufgetreten (alle Kopplungen korrekt verplant)!",
+zuvielverpl=" Std. zuviel verplant",raumfehlt="Raum fehlt für ",zuverplanen=
+" Std. noch zu verplanen",keinekopplg="Kopplung nicht erhalten (",
+meldungserverfehler=376,meldungkeinstdplan=366,meldungkeinesugruppen=334,
+meldungzuvielesugruppen=356,meldungkeinelv=326,meldungzuvielelv=358,
+meldungbasisinkon=378,meldungwarten=69,meldungstdplauswvorber=384,
+meldungkeinehjdaten=382,meldungbearbeitetwird=352;FILE VAR datei;TEXT VAR
+aktkopplg:="",aktlv:="",sj,hj,ausgzeile,ausgpostfix;BOOL VAR
+kopplungausgegeben:=FALSE ,lvausgegeben:=FALSE ;INT VAR maxwstd:=0,verplstden
+:=0,aktwstd:=0,anzverplstden:=0,fstat:=0,anzleereraumzuw:=0,jgstderlv;PROC
+meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung(
+meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(meldungkeinstdplan,
+"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5
+THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN
+standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(
+meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,"");
+FI ;return(1)END PROC meldungausgeben;PROC stundenplanstandanalyseausfuehren:
+standardmeldung(meldungwarten,"");bestimmehalbjahr;bereiteprotokollvor;
+setzepufferwerte;holeunduntersuchekopplungen;IF lines(datei)=anzkopfzeilen
+THEN putline(datei,keinefehler)FI ;zeigedatei(dateiname,"vr").
+bereiteprotokollvor:forget(dateiname,quiet);datei:=sequentialfile(output,
+dateiname);putline(datei,schulkenndatum(schulname));putline(datei,text(
+schulkenndatum(schulort),65)+date);putline(datei,leerzeile);putline(datei,
+ueberschrift1+" "+hj+". "+text(sj,2)+"/"+subtext(sj,3));putline(datei,
+unterstrich1);putline(datei,leerzeile);putline(datei,ueberschrift2);putline(
+datei,ueberschrift3);putline(datei,unterstrich2);putline(datei,leerzeile).
+bestimmehalbjahr:sj:=schulkenndatum(schuljahr);hj:=schulkenndatum(halbjahr);
+IF standardmaskenfeld(feldakthj)=""THEN geplanteshjundsjberechnen(hj,sj);FI .
+setzepufferwerte:inittupel(dnrlehrveranstaltungen).
+holeunduntersuchekopplungen:IF keinehjdatenTHEN fehlermeldungkeinelvFI ;
+standardmeldung(meldungstdplauswvorber,"");stundenplanhalbjahrsetzen(hj,sj);
+stundenplanbasisundstundenplanholen(fstat);IF fstat=0COR fstat=8THEN
+statleseschleife(ixlvsjhjkopp,sj,hj,fnrlvsj,fnrlvhj,PROC
+kopplungenuntersuchen)ELSE meldungausgeben(fstat);LEAVE
+stundenplanstandanalyseausfuehren;FI .keinehjdaten:records(
+dnrlehrveranstaltungen)=0.0.fehlermeldungkeinelv:standardmeldung(
+meldungkeinehjdaten,"");return(1).END PROC stundenplanstandanalyseausfuehren;
+PROC kopplungenuntersuchen(BOOL VAR b):IF wert(fnrlvsj)<>sjCOR wert(fnrlvhj)
+<>hjCOR dbstatus<>0THEN b:=TRUE ELSE IF aktkopplg<>wert(fnrlvkopplung)THEN
+IF nichterstersatzCAND mehrerelvTHEN ueberpruefeinhaltungderkopplungFI ;
+aktkopplg:=wert(fnrlvkopplung);standardmeldung(meldungbearbeitetwird,
+aktkopplg+ausgpar);maxwstd:=0;IF kopplungausgegebenTHEN putline(datei,
+leerzeile)FI ;kopplungausgegeben:=FALSE ;FI ;lvausgegeben:=FALSE ;jgstderlv:=
+intwert(fnrlvjgst);IF jgstderlv=0THEN aktlv:="00"+text(wert(fnrlvfachkennung)
+,laengefachkenn)ELSE aktlv:=jgstaufber(wert(fnrlvjgst))+text(wert(
+fnrlvfachkennung),laengefachkenn)FI ;aktwstd:=intwert(fnrlvwochenstd);IF
+maxwstd<aktwstdTHEN maxwstd:=aktwstdFI ;ueberpruefanzstdenundleereraumangabe;
+FI .nichterstersatz:aktkopplg<>"".mehrerelv:length(allelvmit(kennungkopplg,
+aktkopplg))>laengelv.ueberpruefanzstdenundleereraumangabe:anzleereraumzuw:=0;
+verplstden:=anzahlverplstden(kennunglv,aktlv);IF verplstden<aktwstdTHEN
+fehlerzuwenigstdenELIF verplstden>aktwstdTHEN fehlerzuvielstdenFI ;IF
+anzleereraumzuw>0THEN ausgzeile:="";ausgpostfix:=raumfehlt+text(
+anzleereraumzuw)+" Std.";IF kopplungausgegebenTHEN IF lvausgegebenTHEN
+ausgzeileCAT ausgkopplv;lvausgegeben:=TRUE ELSE ausgzeileCAT ausgkopp;
+ausgzeileCAT aktlv;ausgzeileCAT text(aktwstd,8);ausgzeileCAT text(verplstden,
+5);ausgzeileCAT " ";FI ;ELSE ausgzeileCAT text(aktkopplg,laengekopplg+2);
+ausgzeileCAT aktlv;ausgzeileCAT text(aktwstd,8);ausgzeileCAT text(verplstden,
+5);ausgzeileCAT " ";kopplungausgegeben:=TRUE ;lvausgegeben:=TRUE FI ;
+ausgzeileCAT ausgpostfix;putline(datei,ausgzeile)FI .fehlerzuwenigstden:
+ausgzeile:="";ausgpostfix:=aktlv;ausgpostfixCAT text(aktwstd,8);ausgpostfix
+CAT text(verplstden,5);ausgpostfixCAT " ";ausgpostfixCAT text(aktwstd-
+verplstden);ausgpostfixCAT zuverplanen;IF kopplungausgegebenTHEN ausgzeile:=
+ausgkopp;ELSE ausgzeile:=text(aktkopplg,laengekopplg+2);kopplungausgegeben:=
+TRUE FI ;ausgzeileCAT ausgpostfix;putline(datei,ausgzeile);lvausgegeben:=
+TRUE .fehlerzuvielstden:ausgzeile:="";ausgpostfix:=aktlv;ausgpostfixCAT text(
+aktwstd,8);ausgpostfixCAT text(verplstden,5);ausgpostfixCAT " ";
+ausgpostfixCAT text(verplstden-aktwstd);ausgpostfixCAT zuvielverpl;IF
+kopplungausgegebenTHEN ausgzeile:=ausgkopp;ELSE ausgzeile:=text(aktkopplg,
+laengekopplg+2);kopplungausgegeben:=TRUE FI ;ausgzeileCAT ausgpostfix;putline
+(datei,ausgzeile);lvausgegeben:=TRUE .ueberpruefeinhaltungderkopplung:
+anzverplstden:=anzahlverplstden(kennungkopplg,aktkopplg);IF anzverplstden>
+maxwstdTHEN ausgpostfix:=keinekopplg;ausgpostfixCAT text(anzverplstden);
+ausgpostfixCAT " Wstd.)";IF kopplungausgegebenTHEN IF lvausgegebenTHEN
+ausgzeile:=ausgkopplv;ELSE ausgzeile:=ausgkopp;ausgzeileCAT aktlv;ausgzeile
+CAT text(aktwstd,8);ausgzeileCAT text(verplstden,5);ausgzeileCAT " ";
+lvausgegeben:=TRUE FI ;ELSE ausgzeile:=text(aktkopplg,laengekopplg+2);
+ausgzeileCAT aktlv;ausgzeileCAT text(aktwstd,8);ausgzeileCAT text(verplstden,
+5);kopplungausgegeben:=TRUE FI ;ausgzeileCAT ausgpostfix;putline(datei,
+ausgzeile)FI .END PROC kopplungenuntersuchen;INT PROC anzahlverplstden(TEXT
+CONST kennung,kennungstext):TEXT VAR stundenplan:=allezeitenvon(kennung,
+kennungstext),plv,praum,ppar;INT VAR einspos:=1,anzeinsen:=0;WHILE einspos<>0
+REP einspos:=pos(stundenplan,"1",einspos);IF einspos<>0THEN anzeinsenINCR 1;
+IF kennung=kennunglvTHEN ueberpruefleererraumFI ;einsposINCR 1FI PER ;
+anzeinsen.ueberpruefleererraum:planeintraglesen(einspos,kennunglv,
+kennungstext,plv,praum,ppar);IF praum=leererraumTHEN anzleereraumzuwINCR 1FI
+.END PROC anzahlverplstden;END PACKET standderstundenplanunganalysieren;
+
diff --git a/app/schulis/2.2.1/src/4.stdpluebersichten b/app/schulis/2.2.1/src/4.stdpluebersichten
new file mode 100644
index 0000000..2c760c7
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.stdpluebersichten
@@ -0,0 +1,425 @@
+PACKET stdpluebersichtenDEFINES merkeartderstdpluebersichtundzeigemaske,
+stdpluebersichterstellenunddruckenggfvorherzeigen,
+stdpluebersichtdruckenundggfnaechsteerstellen:INT VAR
+ausgewaehlteuebersichtsart;LET artlehrer=1,artraeume=2,artsek1=3,artsek2=4,
+artzeiten=5,maskennamefuerlehrer="ms stdpluebersicht fuer lehrer",
+maskennamefuerraeume="ms stdpluebersicht fuer raeume",maskennamefuersek1=
+"ms stdpluebersicht fuer sek1",maskennamefuersek2=
+"ms stdpluebersicht fuer sek2",maskennamefuerzeiten=
+"ms stdpluebersicht fuer zeiten";TEXT VAR sj,hj,kennung,vonobjekt,bisobjekt,
+sek1kennungvon,sek1kennungbis,ueberschrift1,ueberschrift2,tag,
+listeallerobjekte:="";INT VAR laengederlistenobjekte,ptraktobjekt,sek1jgstvon
+,sek1jgstbis,varspbreite,anzahlspalten,vonstd,bisstd,anzahltage;BOOL VAR
+nurdrucken,zweizeilig;LET fnr2geplsj=2,fnr3aktsj=3,fnr4einzeilig=4,
+fnr5zweizeilig=5,fnr6vonobjekt=6,fnr7bisobjekt=7,fnr8vonstd=8,fnr9bisstd=9,
+fnr10spaltenproseite=10,fnr11tageproseite=11,fnr12bildschirm=12,fnr13drucker=
+13,fnrz4vonstd=4,fnrz5bisstd=5,fnrz6anzspalten=6,fnrz7bildschirm=7,
+fnrz8drucker=8;LET erstestd=1,letztestdmofr=12,letztestdsa=6,maxanzstdn=66,
+letztertag=6,erstertag=1,allewochentagsbezeichnungen=
+"MODIMIDOFRSAMoDiMiDoFrSamodimidofrsa";LET konstspbreite=6,
+konstkopplungsbreite=8,maxanzspalten1bis4=9,maxanzspalten5=5,maxanzspalten=9,
+minanzspalten=1,spaltenbreite8=8,spaltenbreite10=10,spaltenbreite12=12,
+spaltenbreite27=27,druckdatei="liste.1",textstdpluebersicht=
+"Stundenplanübersicht für ",textlehrer="Lehrer",textraeume="Räume",textsek1=
+"Klassen der Sek. 1",textsek2="Jgst. ",textzeiten="Zeiten",
+textanfangfuerschulhalbjahr="Schuljahr 19",trennerfuerschuljahr="/",
+textmittefuerschulhalbjahr=", ",textendefuerschulhalbjahr=". Halbjahr",
+ueberschriftenzahl=2,spaltentrenner=":",trennstrichzeichen="-",
+spaltentrennerimstrich="+",textzeiterstespalte="Zeit :",leereerstespalte=
+" :",textmontag="Mo",textdienstag="Di",textmittwoch="Mi",textdonnerstag=
+"Do",textfreitag="Fr",textsamstag="Sa",textkeintag=" ",trennstrichfuerlv="/"
+,ueberschriftspalte2beiart4="Kopplung:",ueberschriftspalte3beiart4=
+" Lehrveranstaltungen",ueberschriftbeiart5="Lv /R /P /Kopplg. ",
+endeposjgstinlv=2,anfposfachinlv=3,endeposfachinlv=4,anfposkennunginlv=5,
+laengeeinerlv=8,laengeeinerkopplung=8,laengeeinerparaphe=4,laengeeinesraumes=
+4,laengeeinersgrp=6,laengeeinerjgst=2,zeilebeianfangneueseite=2,
+maxtabzahljedruckdatei=10;LET meldnrlistewirdaufgebaut=7,
+meldnrbittezahlangeben=53,meldnrzahlausserhalbdergrenzen=54,
+meldnrungueltigeeingabe=55,meldnrauswahlnichtsinnvoll=56,meldnrplausi=57,
+meldnrlistewirdausgedruckt=58,meldnrbittewarten=69,meldnrinbearbeitung=352,
+meldnrkeinegueltigejgst=146,meldnrungueltigeparaphe=344,
+meldnrkeinelehrerdatenda=337,meldnrfalscheraumangabe=359,
+meldnrkeineraumdatenda=365,meldnrkeinestdpldatenda=366,meldnrfalschetagesbez=
+385,meldnrfalschestundenfolge=386,meldnralphabetischefolge=380,
+meldnrkeinehjdatenda=382,meldnrmaxzeichenueberschritten=383,
+meldnrstdpldatenwerdenaufbereitet=384;INT VAR fehlermeldnr:=
+meldnrauswahlnichtsinnvoll,status,aktdnr;BOOL VAR druckenfertig;LET niltext=
+"",blank=" ",null=0,bestandraeume="c02 raeume";LET letztejgstsek1=10,jgst11=
+"11",jgst12="12",jgst13="13";PROC merkeartderstdpluebersichtundzeigemaske(
+INT CONST art):ausgewaehlteuebersichtsart:=art;SELECT artOF CASE artlehrer:
+laengederlistenobjekte:=laengeeinerparaphe;kennung:="P";varspbreite:=
+spaltenbreite10;standardvproc(maskennamefuerlehrer)CASE artraeume:
+laengederlistenobjekte:=laengeeinesraumes;kennung:="R";varspbreite:=
+spaltenbreite10;standardvproc(maskennamefuerraeume)CASE artsek1:
+laengederlistenobjekte:=laengeeinersgrp;kennung:="S";varspbreite:=
+spaltenbreite8;standardvproc(maskennamefuersek1)CASE artsek2:
+laengederlistenobjekte:=laengeeinerjgst;kennung:="L";varspbreite:=
+spaltenbreite12;standardvproc(maskennamefuersek2)CASE artzeiten:varspbreite:=
+spaltenbreite27;standardvproc(maskennamefuerzeiten)END SELECT ;END PROC
+merkeartderstdpluebersichtundzeigemaske;PROC
+stdpluebersichtdruckenundggfnaechsteerstellen(BOOL CONST drucken):FILE VAR f;
+IF druckenTHEN standardmeldung(meldnrlistewirdausgedruckt,niltext);f:=
+sequentialfile(output,druckdatei);drucknachbereiten;ELSE TEXT VAR dateiname:=
+niltext;INT VAR index:=0;THESAURUS VAR t:=allLIKE "liste.*";get(t,dateiname,
+index);WHILE dateiname<>niltextREP forget(dateiname,quiet);get(t,dateiname,
+index)PER ;FI ;IF druckenfertigTHEN enter(2)ELSE IF
+ausgewaehlteuebersichtsart=artzeitenTHEN bereitetabellefuerzeitenaufELSE
+bereitetabelleninderdruckdateiaufFI ;return(1)FI ;END PROC
+stdpluebersichtdruckenundggfnaechsteerstellen;PROC
+stdpluebersichterstellenunddruckenggfvorherzeigen:standardmeldung(
+meldnrplausi,niltext);IF NOT (maskenwerteok)THEN return(1)ELSE IF NOT (
+druckwerteok)THEN fehlermeldnr:=meldnrmaxzeichenueberschritten;
+standardmeldung(fehlermeldnr,niltext);return(1)ELSE IF NOT (datenvorhanden)
+THEN standardmeldung(fehlermeldnr,niltext);return(1)ELSE IF nurdruckenTHEN
+standardmeldung(meldnrbittewarten,niltext)ELSE standardmeldung(
+meldnrlistewirdaufgebaut,niltext)FI ;ueberschrift2:=
+textanfangfuerschulhalbjahr;ueberschrift2CAT text(sj,2);ueberschrift2CAT
+trennerfuerschuljahr;ueberschrift2CAT subtext(sj,3);ueberschrift2CAT
+textmittefuerschulhalbjahr;ueberschrift2CAT hj;ueberschrift2CAT
+textendefuerschulhalbjahr;initdruckkopf(ueberschrift1,ueberschrift2);
+setzemitseitennummern(TRUE );druckenfertig:=FALSE ;ptraktobjekt:=1;IF
+ausgewaehlteuebersichtsart=artzeitenTHEN bereitetabellefuerzeitenaufELSE
+bereitetabelleninderdruckdateiaufFI ;IF nurdruckenTHEN drucknachbereiten;
+WHILE NOT druckenfertigREP IF ausgewaehlteuebersichtsart=artzeitenTHEN
+bereitetabellefuerzeitenaufELSE bereitetabelleninderdruckdateiaufFI ;
+drucknachbereiten;PER ;enter(1)ELSE zeigedatei(druckdatei,"vr");FI ;FI ;FI ;
+FI ;END PROC stdpluebersichterstellenunddruckenggfvorherzeigen;BOOL PROC
+maskenwerteok:standardpruefe(5,fnr2geplsj,fnr3aktsj,null,niltext,status);IF
+status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;sj:=
+schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr");IF
+standardmaskenfeld(fnr3aktsj)=niltextTHEN geplanteshjundsjberechnen(hj,sj)FI
+;stundenplanhalbjahrsetzen(hj,sj);IF ausgewaehlteuebersichtsart<>artzeiten
+THEN IF NOT (druckerbildschirmok(fnr12bildschirm,fnr13drucker))THEN LEAVE
+maskenwerteokWITH FALSE FI ;standardpruefe(5,fnr4einzeilig,fnr5zweizeilig,
+null,niltext,status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH
+FALSE FI ;zweizeilig:=standardmaskenfeld(fnr4einzeilig)=niltext;IF NOT (
+spaltenanzahlok(fnr10spaltenproseite))THEN LEAVE maskenwerteokWITH FALSE FI ;
+IF (standardmaskenfeld(fnr11tageproseite))=niltextTHEN anzahltage:=letztertag
++1ELSE standardpruefe(2,fnr11tageproseite,null,null,niltext,status);IF status
+=0THEN standardpruefe(3,fnr11tageproseite,erstertag,letztertag,niltext,status
+);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE ELSE
+anzahltage:=int(standardmaskenfeld(fnr11tageproseite));FI ;ELSE infeld(status
+);LEAVE maskenwerteokWITH FALSE FI ;FI ;IF standardmaskenfeld(fnr8vonstd)=
+niltextTHEN vonstd:=erstestdELSE standardpruefe(2,fnr8vonstd,null,null,
+niltext,status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH
+FALSE FI ;standardpruefe(3,fnr8vonstd,erstestd,letztestdmofr,niltext,status);
+IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;vonstd:=int
+(standardmaskenfeld(fnr8vonstd))FI ;IF standardmaskenfeld(fnr9bisstd)=niltext
+THEN bisstd:=letztestdmofrELSE standardpruefe(2,fnr9bisstd,null,null,niltext,
+status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;
+standardpruefe(3,fnr9bisstd,erstestd,letztestdmofr,niltext,status);IF status
+<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;bisstd:=int(
+standardmaskenfeld(fnr9bisstd))FI ;IF vonstd>bisstdTHEN infeld(fnr9bisstd);
+fehlermeldnr:=meldnrauswahlnichtsinnvoll;standardmeldung(fehlermeldnr,niltext
+);LEAVE maskenwerteokWITH FALSE ;FI ;vonobjekt:=standardmaskenfeld(
+fnr6vonobjekt);bisobjekt:=standardmaskenfeld(fnr7bisobjekt);ELSE IF NOT (
+druckerbildschirmok(fnrz7bildschirm,fnrz8drucker))THEN LEAVE maskenwerteok
+WITH FALSE ELSE IF NOT anfangsundendzeitokTHEN standardmeldung(fehlermeldnr,
+niltext);LEAVE maskenwerteokWITH FALSE FI ;IF NOT (spaltenanzahlok(
+fnrz6anzspalten))THEN LEAVE maskenwerteokWITH FALSE FI ;FI ;FI ;TRUE .
+anfangsundendzeitok:TEXT VAR hilfstext;INT VAR tag;hilfstext:=
+standardmaskenfeld(fnrz4vonstd);IF hilfstext=niltextTHEN vonstd:=erstestd
+ELSE tag:=pos(allewochentagsbezeichnungen,text(hilfstext,2));IF tag=0THEN
+fehlermeldnr:=meldnrfalschetagesbez;infeld(fnrz4vonstd);LEAVE
+anfangsundendzeitokWITH FALSE FI ;tag:=(tagMOD 12)DIV 2;vonstd:=int(subtext(
+hilfstext,3));IF NOT lastconversionokTHEN fehlermeldnr:=
+meldnrbittezahlangeben;infeld(fnrz4vonstd);LEAVE anfangsundendzeitokWITH
+FALSE FI ;IF vonstd<erstestdCOR (tag<letztertag-1AND vonstd>letztestdmofr)
+COR (tag=letztertag-1AND vonstd>letztestdsa)THEN fehlermeldnr:=
+meldnrzahlausserhalbdergrenzen;infeld(fnrz4vonstd);LEAVE anfangsundendzeitok
+WITH FALSE FI ;vonstd:=vonstd+(tag*letztestdmofr);FI ;hilfstext:=
+standardmaskenfeld(fnrz5bisstd);IF hilfstext=niltextTHEN bisstd:=maxanzstdn
+ELSE tag:=pos(allewochentagsbezeichnungen,text(hilfstext,2));IF tag=0THEN
+fehlermeldnr:=meldnrfalschetagesbez;infeld(fnrz5bisstd);LEAVE
+anfangsundendzeitokWITH FALSE FI ;tag:=(tagMOD 12)DIV 2;bisstd:=int(subtext(
+hilfstext,3));IF NOT lastconversionokTHEN fehlermeldnr:=
+meldnrbittezahlangeben;infeld(fnrz5bisstd);LEAVE anfangsundendzeitokWITH
+FALSE FI ;IF bisstd<erstestdCOR (tag<letztertag-1AND bisstd>letztestdmofr)
+COR (tag=letztertag-1AND bisstd>letztestdsa)THEN fehlermeldnr:=
+meldnrzahlausserhalbdergrenzen;infeld(fnrz4vonstd);LEAVE anfangsundendzeitok
+WITH FALSE FI ;bisstd:=bisstd+(tag*letztestdmofr);FI ;IF vonstd>bisstdTHEN
+fehlermeldnr:=meldnrfalschestundenfolge;infeld(fnrz4vonstd);LEAVE
+anfangsundendzeitokWITH FALSE FI ;TRUE END PROC maskenwerteok;BOOL PROC
+druckerbildschirmok(INT CONST fnrbs,fnrdr):BOOL VAR richtig:=FALSE ;
+standardpruefe(5,fnrbs,fnrdr,null,niltext,status);IF status<>0THEN infeld(
+status);ELSE richtig:=TRUE ;nurdrucken:=standardmaskenfeld(fnrbs)=niltext;FI
+;richtigEND PROC druckerbildschirmok;BOOL PROC spaltenanzahlok(INT CONST
+fnrspaltenanz):BOOL VAR richtig:=FALSE ;INT VAR spaltenmax,spaltenstandard;
+IF ausgewaehlteuebersichtsart=artzeitenTHEN spaltenstandard:=2;spaltenmax:=
+maxanzspalten5;ELIF ausgewaehlteuebersichtsart=artsek2THEN spaltenstandard:=4
+;spaltenmax:=maxanzspalten1bis4ELSE spaltenstandard:=5;spaltenmax:=
+maxanzspalten1bis4FI ;IF standardmaskenfeld(fnrspaltenanz)=niltextTHEN
+anzahlspalten:=spaltenstandard;richtig:=TRUE ELSE standardpruefe(2,
+fnrspaltenanz,null,null,niltext,status);IF status<>0THEN infeld(status);ELSE
+standardpruefe(3,fnrspaltenanz,minanzspalten,spaltenmax,niltext,status);IF
+status<>0THEN infeld(status)ELSE anzahlspalten:=int(standardmaskenfeld(
+fnrspaltenanz));richtig:=TRUE FI ;FI ;FI ;richtigEND PROC spaltenanzahlok;
+BOOL PROC druckwerteok:BOOL VAR richtig;IF ausgewaehlteuebersichtsart=artsek2
+THEN richtig:=konstspbreite+1+konstkopplungsbreite+1+(varspbreite+1)*
+anzahlspalten<=druckbreiteELSE richtig:=konstspbreite+1+(varspbreite+1)*
+anzahlspalten<=druckbreiteFI ;IF NOT richtigTHEN IF
+ausgewaehlteuebersichtsart=artzeitenTHEN infeld(fnrz6anzspalten)ELSE infeld(
+fnr10spaltenproseite)FI ;FI ;richtigEND PROC druckwerteok;BOOL PROC
+datenvorhanden:BOOL VAR richtig:=FALSE ;stundenplanbasisundstundenplanholen(
+status);IF status<>0AND status<>8THEN fehlermeldnr:=meldnrkeinestdpldatenda;
+infeld(fnr2geplsj);ELSE SELECT ausgewaehlteuebersichtsartOF CASE artlehrer:
+aktdnr:=dnrlehrer;IF (datenpruefungok(fnrlparaphe,fnrlfamname))THEN richtig:=
+TRUE ;ueberschrift1:=textstdpluebersicht;ueberschrift1CAT textlehrer;FI ;
+CASE artraeume:aktdnr:=dnrschluessel;IF (datenpruefungok(fnrschlsachgebiet,
+fnrschlschluessel))THEN richtig:=TRUE ;ueberschrift1:=textstdpluebersicht;
+ueberschrift1CAT textraeume;FI ;CASE artsek1:aktdnr:=dnraktschuelergruppen;
+IF (datenpruefungok(fnrsgrpsj,fnrsgrphj))THEN richtig:=TRUE ;ueberschrift1:=
+textstdpluebersicht;ueberschrift1CAT textsek1;FI ;CASE artsek2:IF jgstokTHEN
+richtig:=TRUE ;ueberschrift1:=textstdpluebersicht;ueberschrift1CAT textsek2;
+FI ;CASE artzeiten:richtig:=TRUE ;ueberschrift1:=textstdpluebersicht;
+ueberschrift1CAT textzeiten;END SELECT ;FI ;richtig.jgstok:IF vonobjekt=
+niltextTHEN vonobjekt:=jgst11FI ;IF bisobjekt=niltextTHEN bisobjekt:=jgst13
+FI ;IF vonobjekt<>jgst11AND vonobjekt<>jgst12AND vonobjekt<>jgst13THEN
+fehlermeldnr:=meldnrkeinegueltigejgst;infeld(fnr6vonobjekt);LEAVE jgstokWITH
+FALSE FI ;IF bisobjekt<>jgst11AND bisobjekt<>jgst12AND bisobjekt<>jgst13THEN
+fehlermeldnr:=meldnrkeinegueltigejgst;infeld(fnr7bisobjekt);LEAVE jgstokWITH
+FALSE FI ;IF int(bisobjekt)<int(vonobjekt)THEN fehlermeldnr:=
+meldnrauswahlnichtsinnvoll;infeld(fnr6vonobjekt);LEAVE jgstokWITH FALSE FI ;
+listeallerobjekte:=vonobjekt;IF vonobjekt=jgst11AND bisobjekt=jgst13THEN
+listeallerobjekteCAT jgst12FI ;IF listeallerobjekte<>bisobjektTHEN
+listeallerobjekteCAT bisobjektFI ;TRUE END PROC datenvorhanden;BOOL PROC
+datenpruefungok(INT CONST erstesfeld,zweitesfeld):TEXT VAR ersterparameter,
+zweiterparameter;inittupel(aktdnr);listeallerobjekte:=niltext;IF
+ausgewaehlteuebersichtsart=artlehrerTHEN IF records(aktdnr)=0.0THEN
+fehlermeldnr:=meldnrkeinelehrerdatenda;infeld(fnr6vonobjekt);LEAVE
+datenpruefungokWITH FALSE ;FI ;IF vonobjekt<>niltextTHEN putwert(fnrlparaphe,
+vonobjekt);search(aktdnr,TRUE );IF dbstatus<>0THEN fehlermeldnr:=
+meldnrungueltigeparaphe;infeld(fnr6vonobjekt);LEAVE datenpruefungokWITH
+FALSE ;FI ;FI ;IF bisobjekt<>niltextTHEN putwert(fnrlparaphe,bisobjekt);
+search(aktdnr,TRUE );IF dbstatus<>0THEN fehlermeldnr:=meldnrungueltigeparaphe
+;infeld(fnr7bisobjekt);LEAVE datenpruefungokWITH FALSE ;FI ;FI ;
+ersterparameter:=vonobjekt;zweiterparameter:=niltext;inittupel(aktdnr);ELIF
+ausgewaehlteuebersichtsart=artraeumeTHEN ersterparameter:=bestandraeume;
+zweiterparameter:=vonobjekt;putwert(fnrschlsachgebiet,ersterparameter);
+putwert(fnrschlschluessel,zweiterparameter);search(dnrschluessel,FALSE );IF
+dbstatus<>0OR wert(fnrschlsachgebiet)<>bestandraeumeTHEN IF vonobjekt=niltext
+THEN fehlermeldnr:=meldnrkeineraumdatenda;ELSE fehlermeldnr:=
+meldnrfalscheraumangabe;FI ;infeld(fnr6vonobjekt);LEAVE datenpruefungokWITH
+FALSE FI ;IF vonobjekt<>niltextTHEN search(dnrschluessel,TRUE );IF dbstatus<>
+0THEN fehlermeldnr:=meldnrfalscheraumangabe;infeld(fnr6vonobjekt);LEAVE
+datenpruefungokWITH FALSE FI ;FI ;IF bisobjekt<>niltextTHEN putwert(
+fnrschlschluessel,bisobjekt);search(dnrschluessel,TRUE );IF dbstatus<>0THEN
+fehlermeldnr:=meldnrfalscheraumangabe;infeld(fnr7bisobjekt);LEAVE
+datenpruefungokWITH FALSE FI ;FI ;inittupel(aktdnr);ELSE ersterparameter:=sj;
+zweiterparameter:=hj;putwert(fnrsgrpsj,ersterparameter);putwert(fnrsgrphj,
+zweiterparameter);search(dnrschluessel,FALSE );IF dbstatus<>0OR wert(
+fnrsgrphj)<>hjTHEN infeld(fnr6vonobjekt);fehlermeldnr:=meldnrkeinehjdatenda;
+LEAVE datenpruefungokWITH FALSE FI ;IF vonobjekt<>niltextTHEN sek1kennungvon
+:=subtext(vonobjekt,3,6);sek1jgstvon:=int(subtext(vonobjekt,1,2));IF NOT (
+lastconversionok)THEN infeld(fnr6vonobjekt);fehlermeldnr:=
+meldnrkeinegueltigejgst;LEAVE datenpruefungokWITH FALSE FI ;FI ;IF bisobjekt
+<>niltextTHEN sek1kennungbis:=subtext(bisobjekt,3,6);sek1jgstbis:=int(subtext
+(bisobjekt,1,2));IF NOT lastconversionokCOR sek1jgstvon<5COR sek1jgstvon>11
+COR sek1jgstbis<5COR sek1jgstbis>11THEN infeld(fnr7bisobjekt);fehlermeldnr:=
+meldnrkeinegueltigejgst;LEAVE datenpruefungokWITH FALSE ELSE putintwert(
+fnrsgrpjgst,sek1jgstvon);putwert(fnrsgrpkennung,sek1kennungvon);IF
+sek1jgstvon>sek1jgstbisTHEN infeld(fnr6vonobjekt);fehlermeldnr:=
+meldnrzahlausserhalbdergrenzen;LEAVE datenpruefungokWITH FALSE FI ;IF
+sek1jgstvon=sek1jgstbisTHEN IF sek1kennungvon>sek1kennungbisTHEN infeld(
+fnr6vonobjekt);fehlermeldnr:=meldnralphabetischefolge;LEAVE datenpruefungok
+WITH FALSE FI ;FI ;IF sek1jgstbis<>10THEN bisobjekt:="0"+text(sek1jgstbis)+
+sek1kennungbis;FI ;IF sek1jgstvon<>10THEN vonobjekt:="0"+text(sek1jgstvon)+
+sek1kennungvon;FI ;FI ;FI ;FI ;IF vonanfangbisendeTHEN statleseschleife(
+aktdnr,ersterparameter,zweiterparameter,erstesfeld,zweitesfeld,PROC dateiende
+);ELIF vonanfangbiswertTHEN IF NOT bezeichnungzulaessig(kennung,bisobjekt)
+THEN infeld(fnr7bisobjekt);fehlermeldnr:=meldnrungueltigeeingabe;
+standardmeldung(fehlermeldnr,niltext);LEAVE datenpruefungokWITH FALSE ELSE
+statleseschleife(aktdnr,ersterparameter,zweiterparameter,erstesfeld,
+zweitesfeld,PROC endewert);FI ;ELIF vonwertbisendeTHEN IF NOT
+bezeichnungzulaessig(kennung,vonobjekt)THEN infeld(fnr6vonobjekt);
+fehlermeldnr:=meldnrungueltigeeingabe;standardmeldung(fehlermeldnr,niltext);
+LEAVE datenpruefungokWITH FALSE ELSE statleseschleife(aktdnr,ersterparameter,
+zweiterparameter,erstesfeld,zweitesfeld,PROC dateiende);FI ;ELIF
+vonwertbiswertTHEN IF NOT bezeichnungzulaessig(kennung,vonobjekt)THEN infeld(
+fnr6vonobjekt);fehlermeldnr:=meldnrungueltigeeingabe;standardmeldung(
+fehlermeldnr,niltext);LEAVE datenpruefungokWITH FALSE ELSE IF NOT
+bezeichnungzulaessig(kennung,bisobjekt)THEN infeld(fnr7bisobjekt);
+fehlermeldnr:=meldnrungueltigeeingabe;standardmeldung(fehlermeldnr,niltext);
+LEAVE datenpruefungokWITH FALSE ELSE IF vonobjekt>bisobjektTHEN infeld(
+fnr7bisobjekt);fehlermeldnr:=meldnralphabetischefolge;standardmeldung(
+fehlermeldnr,niltext);LEAVE datenpruefungokWITH FALSE ELSE statleseschleife(
+aktdnr,ersterparameter,zweiterparameter,erstesfeld,zweitesfeld,PROC endewert)
+;FI ;FI ;FI ;ELSE statleseschleife(aktdnr,ersterparameter,zweiterparameter,
+erstesfeld,zweitesfeld,PROC endewert);FI ;TRUE .vonanfangbisende:vonobjekt=
+niltextAND bisobjekt=niltext.vonanfangbiswert:vonobjekt=niltextAND bisobjekt
+<>niltext.vonwertbisende:vonobjekt<>niltextAND bisobjekt=niltext.
+vonwertbiswert:vonobjekt<>niltextAND bisobjekt<>niltextEND PROC
+datenpruefungok;PROC endewert(BOOL VAR letzter):IF ausgewaehlteuebersichtsart
+=artlehrerTHEN IF dbstatus=0AND wert(fnrlparaphe)<=bisobjektTHEN
+listeallerobjekteCAT text(wert(fnrlparaphe),laengederlistenobjekte)ELSE
+letzter:=TRUE ;FI ;ELIF ausgewaehlteuebersichtsart=artraeumeTHEN IF dbstatus=
+0AND wert(fnrschlsachgebiet)=bestandraeumeAND bisobjekt>=wert(
+fnrschlschluessel)THEN listeallerobjekteCAT text(wert(fnrschlschluessel),
+laengederlistenobjekte)ELSE letzter:=TRUE ;FI ;ELSE IF dbstatus=0AND wert(
+fnrsgrpsj)=sjAND wert(fnrsgrphj)=hjAND (sek1jgstbis>intwert(fnrsgrpjgst)OR (
+sek1jgstbis=intwert(fnrsgrpjgst)AND sek1kennungbis>=wert(fnrsgrpkennung)))
+THEN listeallerobjekteCAT text(wert(fnrsgrpjgst),2);listeallerobjekteCAT text
+(wert(fnrsgrpkennung),4);ELSE letzter:=TRUE ;FI ;FI ;END PROC endewert;PROC
+dateiende(BOOL VAR ende):IF ausgewaehlteuebersichtsart=artlehrerTHEN IF
+dbstatus=0THEN listeallerobjekteCAT text(wert(fnrlparaphe),
+laengederlistenobjekte)ELSE ende:=TRUE FI ;ELIF ausgewaehlteuebersichtsart=
+artraeumeTHEN IF dbstatus=0AND wert(fnrschlsachgebiet)=bestandraeumeTHEN
+listeallerobjekteCAT text(wert(fnrschlschluessel),laengederlistenobjekte);
+ELSE ende:=TRUE FI ;ELSE IF dbstatus=0AND wert(fnrsgrpsj)=sjAND wert(
+fnrsgrphj)=hjAND letztejgstsek1>=intwert(fnrsgrpjgst)THEN listeallerobjekte
+CAT text(wert(fnrsgrpjgst),2);listeallerobjekteCAT text(wert(fnrsgrpkennung),
+4);ELSE ende:=TRUE ;FI ;FI ;END PROC dateiende;PROC drucketrennstrich:TEXT
+VAR t:=konstspbreite*trennstrichzeichen;tCAT spaltentrennerimstrich;IF
+ausgewaehlteuebersichtsart=artsek2THEN tCAT konstkopplungsbreite*
+trennstrichzeichen;tCAT spaltentrennerimstrich;FI ;tCAT anzahlspalten*(
+varspbreite*trennstrichzeichen+spaltentrennerimstrich);druckzeileschreiben(t)
+END PROC drucketrennstrich;PROC druckespaltenueberschriften(ROW maxanzspalten
+TEXT CONST spaltenueberschrift):TEXT VAR t:=textzeiterstespalte;INT VAR i;IF
+ausgewaehlteuebersichtsart=artsek2THEN tCAT spaltenueberschrift[1];tCAT
+spaltenueberschrift[2]ELSE FOR iFROM 1UPTO anzahlspaltenREP tCAT text(
+spaltenueberschrift[i],varspbreite);tCAT spaltentrennerPER FI ;tCAT blank;
+druckzeileschreiben(t)END PROC druckespaltenueberschriften;PROC
+bereitetabelleninderdruckdateiauf:TEXT VAR jgstbez,lvsderjgst,aktlv,aktkopplg
+,lvsprozeit,kopplgnprozeit,kopplgundlvs;INT VAR ptraktlv;INT VAR position,
+anfpos,endpos;INT VAR zeilenzaehler,aktstd,spaltenzaehler,stundenzaehler,
+tagzaehler,tabellenzaehler;TEXT VAR t,t1,lv,rm,par;BOOL VAR
+erstezeilederstunde,stundenochnichtfertig;ROW maxanzspaltenTEXT VAR
+spaltenueberschrift,zusatzangabe;druckvorbereiten;FOR tabellenzaehlerFROM 1
+UPTO maxtabzahljedruckdateiREP bestimmespaltenueberschriften;IF
+ausgewaehlteuebersichtsart<>artsek2THEN standardmeldung(meldnrinbearbeitung,
+spaltenueberschrift(1)+"#");FI ;zeilenzaehler:=zeilebeianfangneueseite;
+druckkopfschreiben;druckespaltenueberschriften(spaltenueberschrift);
+drucketrennstrich;FOR tagzaehlerFROM erstertagUPTO letztertagREP IF
+tagzaehler=letztertagTHEN aktstd:=min(bisstd,letztestdsa)ELSE aktstd:=bisstd
+FI ;FOR stundenzaehlerFROM vonstdUPTO aktstdREP bereitezeileneinerstundeauf
+PER ;IF zeilenzaehler>zeilebeianfangneueseiteTHEN drucketrennstrich;
+zeilenzaehlerINCR 1;evtlseitenumbruchwgueberlaenge;FI ;
+evtlseitenumbruchwgtageszahljeseite;PER ;IF zeilenzaehler>
+zeilebeianfangneueseiteTHEN seitenwechsel;zeilenzaehler:=
+zeilebeianfangneueseite;FI ;PER ;druckenfertig:=ptraktobjekt>length(
+listeallerobjekte).bestimmespaltenueberschriften:IF
+ausgewaehlteuebersichtsart=artsek2THEN IF ptraktobjekt>length(
+listeallerobjekte)THEN druckenfertig:=TRUE ;LEAVE
+bereitetabelleninderdruckdateiaufFI ;jgstbez:=subtext(listeallerobjekte,
+ptraktobjekt,ptraktobjekt+laengederlistenobjekte-1);lvsderjgst:=
+lvderschuelergruppe(jgstbez);spaltenueberschrift[1]:=
+ueberschriftspalte2beiart4;spaltenueberschrift[2]:=ueberschriftspalte3beiart4
+;initdruckkopf(ueberschrift1+blank+jgstbez,ueberschrift2);ptraktobjektINCR
+laengederlistenobjekte;ELSE spaltenzaehler:=0;WHILE (spaltenzaehler<
+anzahlspalten)AND (ptraktobjekt<=length(listeallerobjekte))REP spaltenzaehler
+INCR 1;spaltenueberschrift[spaltenzaehler]:=subtext(listeallerobjekte,
+ptraktobjekt,ptraktobjekt+laengederlistenobjekte-1);ptraktobjektINCR
+laengederlistenobjekte;PER ;IF spaltenzaehler=0THEN druckenfertig:=TRUE ;
+LEAVE bereitetabelleninderdruckdateiaufFI ;anzahlspalten:=spaltenzaehlerFI .
+bereitezeileneinerstundeauf:erstezeilederstunde:=TRUE ;stundenochnichtfertig
+:=TRUE ;WHILE stundenochnichtfertigREP IF erstezeilederstundeTHEN IF
+stundenzaehler=vonstdTHEN SELECT tagzaehlerOF CASE 1:t:=textmontag;CASE 2:t:=
+textdienstag;CASE 3:t:=textmittwoch;CASE 4:t:=textdonnerstag;CASE 5:t:=
+textfreitag;CASE 6:t:=textsamstag;END SELECT ;tag:=t;ELSE t:=textkeintagFI ;t
+CAT blank;tCAT text(stundenzaehler,2);tCAT blank;tCAT spaltentrenner;ELSE t:=
+leereerstespalte;FI ;IF ausgewaehlteuebersichtsart=artsek2THEN IF
+erstezeilederstundeTHEN anfpos:=1;endpos:=8;lvsprozeit:=datenderzeit((
+tagzaehler-1)*letztestdmofr+stundenzaehler,"L");kopplgnprozeit:=datenderzeit(
+(tagzaehler-1)*letztestdmofr+stundenzaehler,"K");position:=0;WHILE endpos<=
+length(lvsderjgst)AND positionMOD 8<>1REP aktlv:=subtext(lvsderjgst,anfpos,
+endpos);position:=pos(lvsprozeit,aktlv);anfposINCR 8;endposINCR 8PER ;IF
+position<>0THEN aktkopplg:=subtext(kopplgnprozeit,position,position+7);
+kopplgundlvs:=aktkopplg;anfpos:=1;endpos:=8;position:=pos(kopplgnprozeit,
+aktkopplg);WHILE endpos<=length(kopplgnprozeit)AND position<>0REP IF position
+MOD 8=1THEN aktlv:=subtext(lvsprozeit,position,position+7);IF pos(
+kopplgundlvs,aktlv)=0THEN kopplgundlvsCAT aktlvFI ;anfposINCR 8;endposINCR 8;
+FI ;position:=pos(kopplgnprozeit,aktkopplg,position+1);PER ;ELSE kopplgundlvs
+:=niltextFI ;tCAT text(text(kopplgundlvs,laengeeinerkopplung),
+konstkopplungsbreite);ptraktlv:=laengeeinerkopplung+1;ELSE tCAT
+konstkopplungsbreite*blankFI ;tCAT spaltentrenner;standardmeldung(
+meldnrinbearbeitung,"Jahrgangsstufe: "+jgstbez+" Wochentag: "+tag+"#");FI ;
+aktstd:=(tagzaehler-1)*letztestdmofr+stundenzaehler;FOR spaltenzaehlerFROM 1
+UPTO anzahlspaltenREP IF ausgewaehlteuebersichtsart=artsek2THEN IF ptraktlv<=
+length(kopplgundlvs)THEN lv:=subtext(kopplgundlvs,ptraktlv,ptraktlv+
+laengeeinerlv-1);ptraktlvINCR laengeeinerlv;planeintraglesen(aktstd,kennung,
+lv,lv,rm,par);rm:=8*blank+rm;t1:=subtext(lv,anfposfachinlv,endeposfachinlv);
+t1CAT blank;t1CAT subtext(lv,anfposkennunginlv);t1CAT trennstrichfuerlv;t1
+CAT par;ELSE t1:=niltext;par:=niltext;rm:=niltext;FI ;ELSE planeintraglesen(
+aktstd,kennung,spaltenueberschrift[spaltenzaehler],lv,rm,par);IF lv=niltext
+THEN t1:=niltextELSE IF ausgewaehlteuebersichtsart=artsek1THEN IF length(lv)>
+laengeeinerlvTHEN lv:=text(lv,laengeeinerlv);t1:=datenzurlv("K",lv);rm:=
+niltext;ELSE t1:=blank;t1CAT subtext(lv,anfposfachinlv,endeposfachinlv);t1
+CAT blank;t1CAT par;FI ;rm:=4*blank+rmELSE t1:=text(lv,endeposjgstinlv);t1
+CAT blank;t1CAT subtext(lv,anfposfachinlv,endeposfachinlv);t1CAT blank;t1CAT
+subtext(lv,anfposkennunginlv);FI ;FI ;FI ;tCAT text(t1,varspbreite);tCAT
+spaltentrenner;IF zweizeiligTHEN IF ausgewaehlteuebersichtsart=artraeumeTHEN
+zusatzangabe[spaltenzaehler]:=parELSE zusatzangabe[spaltenzaehler]:=rmFI ;
+zusatzangabe[spaltenzaehler]:=text(zusatzangabe[spaltenzaehler],varspbreite);
+FI ;PER ;druckzeileschreiben(t);zeilenzaehlerINCR 1;IF zeilenzaehler=
+drucklaenge(ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler:=
+zeilebeianfangneueseite;IF zweizeiligCOR tagzaehler<letztertagCOR
+stundenzaehler<min(bisstd,letztestdsa)COR (ausgewaehlteuebersichtsart=artsek2
+AND ptraktlv<=length(kopplgundlvs))THEN druckkopfschreiben;
+druckespaltenueberschriften(spaltenueberschrift);drucketrennstrich;FI ;FI ;
+IF zweizeiligTHEN t:=leereerstespalte;IF ausgewaehlteuebersichtsart=artsek2
+THEN tCAT konstkopplungsbreite*blank;tCAT spaltentrenner;FI ;FOR
+spaltenzaehlerFROM 1UPTO anzahlspaltenREP tCAT zusatzangabe[spaltenzaehler];t
+CAT spaltentrenner;PER ;druckzeileschreiben(t);zeilenzaehlerINCR 1;IF
+zeilenzaehler=drucklaenge(ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler
+:=zeilebeianfangneueseite;IF tagzaehler<letztertagCOR stundenzaehler<min(
+bisstd,letztestdsa)COR (ausgewaehlteuebersichtsart=artsek2AND ptraktlv<=
+length(kopplgundlvs))THEN druckkopfschreiben;druckespaltenueberschriften(
+spaltenueberschrift);drucketrennstrich;FI ;FI ;FI ;IF
+ausgewaehlteuebersichtsart=artsek2THEN stundenochnichtfertig:=ptraktlv<=
+length(kopplgundlvs)ELSE stundenochnichtfertig:=FALSE FI ;erstezeilederstunde
+:=FALSE ;PER .evtlseitenumbruchwgueberlaenge:IF zeilenzaehler=drucklaenge(
+ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler:=zeilebeianfangneueseite;
+IF tagzaehler<letztertagTHEN druckkopfschreiben;druckespaltenueberschriften(
+spaltenueberschrift);drucketrennstrich;FI ;FI .
+evtlseitenumbruchwgtageszahljeseite:IF tagzaehlerMOD anzahltage=0AND
+zeilenzaehler>zeilebeianfangneueseiteTHEN seitenwechsel;zeilenzaehler:=
+zeilebeianfangneueseite;IF tagzaehler<letztertagTHEN druckkopfschreiben;
+druckespaltenueberschriften(spaltenueberschrift);drucketrennstrich;FI ;FI .
+END PROC bereitetabelleninderdruckdateiauf;PROC bereitetabellefuerzeitenauf:
+BOOL VAR erstezeilederstunde:=TRUE ;TEXT VAR stringkopplungen,stringparaphen,
+stringraeume;INT VAR ptraktkopplung,ptraktparaphe,ptraktraum;ROW
+maxanzspaltenTEXT VAR spaltenueberschrift;INT VAR zeilenzaehler,
+stundenzaehler,spaltenzaehler;TEXT VAR t;bestimmespaltenueberschriften;
+druckvorbereiten;druckkopfschreiben;druckespaltenueberschriften(
+spaltenueberschrift);drucketrennstrich;zeilenzaehler:=zeilebeianfangneueseite
+;FOR stundenzaehlerFROM vonstdUPTO bisstdREP IF stundenzaehler=vonstdOR
+stundenzaehlerMOD letztestdmofr=1THEN SELECT (stundenzaehler-1)DIV
+letztestdmofrOF CASE 0:tag:=textmontag;CASE 1:tag:=textdienstag;CASE 2:tag:=
+textmittwoch;CASE 3:tag:=textdonnerstag;CASE 4:tag:=textfreitag;CASE 5:tag:=
+textsamstag;END SELECT ;standardmeldung(meldnrinbearbeitung,"Wochentag : "+
+tag+"#");FI ;bereitezeileneinerstundeauf;evtltrennstrichdrucken;PER ;
+druckenfertig:=TRUE ;.bestimmespaltenueberschriften:FOR spaltenzaehlerFROM 1
+UPTO anzahlspaltenREP spaltenueberschrift[spaltenzaehler]:=
+ueberschriftbeiart5;PER ;.evtltrennstrichdrucken:IF (stundenzaehlerMOD
+letztestdmofr=0OR stundenzaehler=bisstd)AND zeilenzaehler>
+zeilebeianfangneueseiteTHEN drucketrennstrich;zeilenzaehlerINCR 1;IF
+zeilenzaehler=drucklaenge(ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler
+:=zeilebeianfangneueseite;IF stundenzaehler<bisstdTHEN druckkopfschreiben;
+druckespaltenueberschriften(spaltenueberschrift);drucketrennstrich;FI ;FI FI
+;.bereitezeileneinerstundeauf:listeallerobjekte:=datenderzeit(stundenzaehler,
+"L");ptraktobjekt:=1;stringkopplungen:=datenderzeit(stundenzaehler,"K");
+ptraktkopplung:=1;stringparaphen:=datenderzeit(stundenzaehler,"P");
+ptraktparaphe:=1;stringraeume:=datenderzeit(stundenzaehler,"R");ptraktraum:=1
+;erstezeilederstunde:=TRUE ;WHILE ptraktobjekt<=length(listeallerobjekte)OR
+erstezeilederstundeREP IF erstezeilederstundeOR zeilenzaehler=
+zeilebeianfangneueseiteTHEN t:=tag;tCAT blank;tCAT text((stundenzaehler-1)
+MOD letztestdmofr+1,2);tCAT blank;tCAT spaltentrenner;erstezeilederstunde:=
+FALSE ELSE t:=leereerstespalteFI ;FOR spaltenzaehlerFROM 1UPTO anzahlspalten
+REP IF ptraktobjekt>length(listeallerobjekte)THEN tCAT konstkopplungsbreite*
+blank;tCAT trennstrichfuerlv;tCAT 4*blank;tCAT trennstrichfuerlv;tCAT 4*blank
+;tCAT trennstrichfuerlv;tCAT konstkopplungsbreite*blank;tCAT spaltentrenner;
+ELSE tCAT subtext(listeallerobjekte,ptraktobjekt,ptraktobjekt+laengeeinerlv-1
+);tCAT trennstrichfuerlv;ptraktobjektINCR laengeeinerlv;tCAT subtext(
+stringraeume,ptraktraum,ptraktraum+laengeeinesraumes-1);tCAT
+trennstrichfuerlv;ptraktraumINCR laengeeinesraumes;tCAT subtext(
+stringparaphen,ptraktparaphe,ptraktparaphe+laengeeinerparaphe-1);tCAT
+trennstrichfuerlv;ptraktparapheINCR laengeeinerparaphe;tCAT subtext(
+stringkopplungen,ptraktkopplung,ptraktkopplung+laengeeinerkopplung-1);tCAT
+spaltentrenner;ptraktkopplungINCR laengeeinerkopplung;FI ;PER ;
+druckzeileschreiben(t);zeilenzaehlerINCR 1;evtlseitenumbruchwgueberlaenge;
+PER .evtlseitenumbruchwgueberlaenge:IF zeilenzaehler=drucklaenge(
+ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler:=zeilebeianfangneueseite;
+IF stundenzaehler<bisstdCOR listeallerobjekte<>niltextTHEN druckkopfschreiben
+;druckespaltenueberschriften(spaltenueberschrift);drucketrennstrich;FI ;FI ;.
+END PROC bereitetabellefuerzeitenauf;END PACKET stdpluebersichten;
+
diff --git a/app/schulis/2.2.1/src/4.stundenplan akt halbj uebernehmen b/app/schulis/2.2.1/src/4.stundenplan akt halbj uebernehmen
new file mode 100644
index 0000000..0d29a46
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.stundenplan akt halbj uebernehmen
@@ -0,0 +1,141 @@
+PACKET stundenplanakthalbjuebernehmenDEFINES stundenplanuebernehmenpruefen,
+stundenplanuebernehmen:LET feldjgst1=2,feldjgst2=3,maxanzfehler=500,laengelv=
+8,schuljahr="Schuljahr",halbjahr="Schulhalbjahr",schulname="Schulname",
+schulort="Schulort",kennungraum="R",kennungparaphe="P",kennunglv="L",allejgst
+="00050607080910111213",leererraum=" ",ausgabeparam="#",erstestd=1,
+letztestd=66,dateiname="Protokoll zur Stundenplan-Übernahme",zwdatei=
+"Zwischenspeicherung",lvungueltig="Lehrveranstaltung nicht geplant",
+raumungueltig1="Raumbezeichnung ",raumungueltig2=" ungültig",ohneraum=
+" (Übernahme ohne Raum)",schnittschueler="Zeitüberschneidung Schüler durch ",
+schnittlehrer="Zeitüberschneidung Lehrer durch",schnittraum=
+"Zeitüberschneidung Raum ",leerzeile=" ",ueberschrift1=
+"Stundenplan für Jgst. ",ueberschrift2=" übernehmen von ",ueberschrift3=
+" nach ",meldungwirklichuebern=300,meldungfalschejgst=305,meldungabbruch=400,
+meldungbearbwird=352,meldungplausi=57,meldungwarten=69,meldungkeinesugruppen=
+334,meldungzuvielesugruppen=356,meldungkeinelv=326,meldungserverfehler=376,
+meldungbasisinkon=378,meldungjgst13=402,meldungzuvielelv=358;TEXT VAR aktsj,
+akthj,geplsj,geplhj,jgst1,jgst2,allelvderzeit,alleraeumederzeit,eintrag,
+aktzubearbjgst,geplzubearbjgst;INT VAR i,j,fstat,jg1,jg2,jgstpos,anzbearbjgst
+,zz:=0;BOOL VAR geplstundenplanneu:=FALSE ,jgstumzusetzen:=FALSE ,
+erstereintrag:=TRUE ;FILE VAR datei,z;PROC stundenplanreorganisiertverlassen:
+stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(2);
+meldungausgeben(fstat)FI END PROC stundenplanreorganisiertverlassen;PROC
+stundenplanuebernehmenpruefen:standardmeldung(meldungwarten," ");
+holestartdaten;jgst1:=standardmaskenfeld(feldjgst1);jgst2:=standardmaskenfeld
+(feldjgst2);pruefeingaben;gibmeldunguebernahmeaus;standardnproc.
+holestartdaten:aktsj:=schulkenndatum(schuljahr);akthj:=schulkenndatum(
+halbjahr);geplsj:=aktsj;geplhj:=akthj;geplanteshjundsjberechnen(geplhj,geplsj
+).pruefeingaben:standardmeldung(meldungplausi,"");IF jgstrichtig(jgst1,jg1,1)
+THEN IF NOT jgstrichtig(jgst2,jg2,2)THEN infeld(feldjgst2);
+fehlermeldungfalschejgstFI ELSE infeld(feldjgst1);fehlermeldungfalschejgstFI
+;IF jgst1=jgst2THEN aktzubearbjgst:=jgst1;ELSE aktzubearbjgst:=subtext(
+allejgst,pos(allejgst,jgst1),pos(allejgst,jgst2)+1)FI ;anzbearbjgst:=length(
+aktzubearbjgst)DIV 2;IF geplhj="2"THEN geplzubearbjgst:=aktzubearbjgstELIF
+jgst1="13"THEN infeld(feldjgst1);fehlermeldungfalscherwertELIF jgst2="13"
+THEN infeld(feldjgst2);fehlermeldungfalscherwertELSE jgstumzusetzen:=TRUE ;
+berechnegeplzubearbjgstFI .fehlermeldungfalschejgst:standardmeldung(
+meldungfalschejgst,"");return(1);LEAVE stundenplanuebernehmenpruefen.
+fehlermeldungfalscherwert:standardmeldung(meldungjgst13,"");return(1);LEAVE
+stundenplanuebernehmenpruefen.gibmeldunguebernahmeaus:standardmeldung(
+meldungwirklichuebern,"").END PROC stundenplanuebernehmenpruefen;PROC
+berechnegeplzubearbjgst:TEXT VAR jg;jgstpos:=1;geplzubearbjgst:="";FOR iFROM
+1UPTO anzbearbjgstREP jg:=subtext(aktzubearbjgst,jgstpos,jgstpos+1);IF jg=
+"00"THEN geplzubearbjgstCAT "00"ELSE geplzubearbjgstCAT jgstaufber(text(int(
+jg)+1))FI ;jgstposINCR 2PER END PROC berechnegeplzubearbjgst;BOOL PROC
+jgstrichtig(TEXT VAR jgst,INT VAR jg,INT CONST pruefung):IF jgst<>""THEN jg:=
+int(jgst);IF jg=0CAND lastconversionokTHEN jgst:="00";TRUE ELIF
+lastconversionokTHEN IF jg>4CAND jg<14THEN jgst:=jgstaufber(jgst);TRUE ELSE
+FALSE FI ELSE FALSE FI ELIF pruefung=1THEN jgst:="05";jg:=5;TRUE ELIF
+pruefung=2THEN jgst:=jgst1;jg:=jg1;TRUE ELSE FALSE FI .END PROC jgstrichtig;
+PROC stundenplanuebernehmen(BOOL CONST uebernahme):TEXT VAR ueberschrift:="";
+IF uebernahmeTHEN standardmeldung(meldungbearbwird,"Stundenplan "+akthj+". "+
+text(aktsj,2)+"/"+subtext(aktsj,3)+ausgabeparam);stundenplanhalbjahrsetzen(
+akthj,aktsj);stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat
+<>8THEN meldungausgeben(fstat);return(2);LEAVE stundenplanuebernehmenFI ;
+forget(dateiname,quiet);datei:=sequentialfile(output,dateiname);ueberschrift
+:=ueberschrift1+jgst1;IF jgst1<>jgst2THEN ueberschriftCAT " bis "+jgst2FI ;
+ueberschriftCAT ueberschrift2;ueberschriftCAT akthj+". ";ueberschriftCAT text
+(aktsj,2)+"/";ueberschriftCAT subtext(aktsj,3);ueberschriftCAT ueberschrift3;
+ueberschriftCAT geplhj+". ";ueberschriftCAT text(geplsj,2)+"/";ueberschrift
+CAT subtext(geplsj,3);putline(datei,schulkenndatum(schulname));putline(datei,
+text(schulkenndatum(schulort),65)+date);putline(datei,leerzeile);putline(
+datei,ueberschrift);putline(datei,length(ueberschrift)*"-");holalleeintraege;
+fstat:=0;loeschealleeintraege;IF fstat<>0CAND fstat<>8THEN meldungausgeben(
+fstat);return(2);LEAVE stundenplanuebernehmenFI ;uebertragalleeintraege;
+stundenplanreorganisiertverlassen;IF zz>maxanzfehlerTHEN standardmeldung(
+meldungabbruch,text(zz)+ausgabeparam)ELIF zz=0THEN
+eintragkeineuebernahmefehlerFI ;IF fstat=0THEN zeigedatei(dateiname,"vr");FI
+ELSE return(2)FI .eintragkeineuebernahmefehler:putline(datei,leerzeile);
+putline(datei,"Bei der Übernahme traten keine Fehler auf!").END PROC
+stundenplanuebernehmen;PROC loeschealleeintraege:INT VAR jgstpos:=1;
+geplstundenplanneu:=FALSE ;stundenplanhalbjahrsetzen(geplhj,geplsj);
+standardmeldung(meldungbearbwird,"Stundenplan "+geplhj+". "+text(geplsj,2)+
+"/"+subtext(geplsj,3)+ausgabeparam);stundenplanbasisundstundenplanholen(fstat
+);IF fstat<>0CAND fstat<>8THEN stundenplanbasisundstundenplanerstellen(fstat)
+;IF fstat<>0THEN LEAVE loeschealleeintraegeELSE geplstundenplanneu:=TRUE ;
+stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN
+meldungausgeben(fstat);return(2);LEAVE loeschealleeintraegeFI FI FI ;IF
+geplstundenplanneuTHEN LEAVE loeschealleeintraegeFI ;FOR iFROM erstestdUPTO
+letztestdREP standardmeldung(meldungbearbwird,tagstunde(i,FALSE )+
+" (Einträge löschen)"+ausgabeparam);allelvderzeit:=datenderzeit(i,kennunglv);
+jgstpos:=1;FOR jFROM 1UPTO anzbearbjgstREP loeschelv(subtext(geplzubearbjgst,
+jgstpos,jgstpos+1));jgstposINCR 2PER PER .END PROC loeschealleeintraege;PROC
+loeschelv(TEXT CONST jgst):INT VAR suchab:=1,aktpos;BOOL VAR spok:=TRUE ;
+WHILE pos(allelvderzeit,jgst,suchab)>0REP aktpos:=pos(allelvderzeit,jgst,
+suchab);IF aktposMOD laengelv=1THEN planeintragloeschen(i,subtext(
+allelvderzeit,aktpos,aktpos+7),spok)FI ;suchab:=aktpos+7PER .END PROC
+loeschelv;PROC holalleeintraege:forget(zwdatei,quiet);z:=sequentialfile(
+output,zwdatei);FOR iFROM erstestdUPTO letztestdREP standardmeldung(
+meldungbearbwird,tagstunde(i,FALSE )+" (Einträge holen)"+ausgabeparam);
+allelvderzeit:=datenderzeit(i,kennunglv);alleraeumederzeit:=datenderzeit(i,
+kennungraum);jgstpos:=1;eintrag:="";FOR jFROM 1UPTO anzbearbjgstREP holelv(
+subtext(aktzubearbjgst,jgstpos,jgstpos+1));jgstposINCR 2PER ;putline(z,
+eintrag)PER .END PROC holalleeintraege;PROC holelv(TEXT CONST jgst):INT VAR
+suchab:=1,aktpos,ii;TEXT VAR lveintrag;WHILE pos(allelvderzeit,jgst,suchab)>0
+REP aktpos:=pos(allelvderzeit,jgst,suchab);IF aktposMOD laengelv=1THEN ii:=(
+aktpos+1)DIV 2;IF jgstumzusetzenTHEN lveintrag:=lv;IF text(lveintrag,2)<>"00"
+THEN eintragCAT jgstaufber(text(int(text(lveintrag,2))+1));eintragCAT subtext
+(lveintrag,3);ELSE eintragCAT lvFI ;eintragCAT raumELSE eintragCAT lv+raumFI
+FI ;suchab:=aktpos+7PER .lv:subtext(allelvderzeit,aktpos,aktpos+7).raum:
+subtext(alleraeumederzeit,ii,ii+3).END PROC holelv;PROC
+uebertragalleeintraege:zz:=0;modify(z);toline(z,1);col(z,1);FOR iFROM
+erstestdUPTO letztestdREP standardmeldung(meldungbearbwird,tagstunde(i,FALSE
+)+" (Einträge übernehmen)"+ausgabeparam);readrecord(z,eintrag);IF eintrag<>""
+THEN erstereintrag:=TRUE ;schreibeintraegeFI ;down(z);IF zz>maxanzfehlerTHEN
+putline(datei,leerzeile);putline(datei,
+"Abbruch, da bei der Übernahme zuviele Fehler auftraten!");LEAVE
+uebertragalleeintraegeFI PER END PROC uebertragalleeintraege;PROC
+schreibeintraege:TEXT VAR lv,raum,t1,t2;INT VAR lvpos:=1;BOOL VAR ohnefehler;
+WHILE lvpos<length(eintrag)REP ohnefehler:=TRUE ;lv:=subtext(eintrag,lvpos,
+lvpos+7);raum:=subtext(eintrag,lvpos+8,lvpos+11);pruefungundeintrag;lvpos
+INCR 12PER .pruefungundeintrag:prueflv;pruefschnittschueler;
+pruefschnittlehrer;pruefraumundschnitt;IF ohnefehlerTHEN planeintragvornehmen
+(i,lv,raum,ohnefehler)FI .prueflv:IF NOT bezeichnungzulaessig(kennunglv,lv)
+THEN IF erstereintragTHEN putline(datei,leerzeile);erstereintrag:=FALSE FI ;
+putline(datei,jgfake(lv)+": "+tagstunde(i,TRUE )+". : "+lvungueltig);zzINCR 1
+;LEAVE pruefungundeintragFI .pruefschnittschueler:IF schuelerunterrichtTHEN
+IF erstereintragTHEN putline(datei,leerzeile);erstereintrag:=FALSE FI ;
+putline(datei,jgfake(lv)+": "+tagstunde(i,TRUE )+". : "+schnittschueler+
+jgfake(t1));zzINCR 1;ohnefehler:=FALSE FI .schuelerunterricht:
+schuelergruppenschnittbeizeit(i,kennunglv,lv,"",t1,t2).pruefschnittlehrer:t1
+:=datenzurlv(kennungparaphe,lv);IF lehrerunterrichtTHEN IF erstereintragTHEN
+putline(datei,leerzeile);erstereintrag:=FALSE FI ;putline(datei,jgfake(lv)+
+": "+tagstunde(i,TRUE )+". : "+schnittlehrer+jgfake(t2));zzINCR 1;ohnefehler
+:=FALSE FI .lehrerunterricht:t2:=geplantelvfuer(i,kennungparaphe,t1);t2<>lv
+CAND t2<>"".pruefraumundschnitt:IF raum<>leererraumTHEN IF NOT
+bezeichnungzulaessig(kennungraum,raum)THEN IF erstereintragTHEN putline(datei
+,leerzeile);erstereintrag:=FALSE FI ;putline(datei,jgfake(lv)+": "+tagstunde(
+i,TRUE )+". : "+raumungueltig1+raum+raumungueltig2+ohneraum);zzINCR 1;raum:=
+leererraumELIF raumunterrichtTHEN IF erstereintragTHEN putline(datei,
+leerzeile);erstereintrag:=FALSE FI ;putline(datei,jgfake(lv)+": "+tagstunde(i
+,TRUE )+". : "+schnittraum+raum+ohneraum);zzINCR 1;raum:=leererraumFI FI .
+raumunterricht:t1:=geplantelvfuer(i,kennungraum,raum);t1<>lvCAND t1<>"".END
+PROC schreibeintraege;TEXT PROC jgfake(TEXT CONST lv):text(lv,2)+" "+subtext(
+lv,3,4)+" "+subtext(lv,5)END PROC jgfake;PROC meldungausgeben(INT VAR fstat):
+IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF fstat=4THEN
+standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN standardmeldung(
+meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung(meldungkeinelv,""
+)ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF fstat=9THEN
+standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgebenFI END PROC
+meldungausgeben;END PACKET stundenplanakthalbjuebernehmen;
+
diff --git a/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen b/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen
new file mode 100644
index 0000000..634545c
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen
@@ -0,0 +1,382 @@
+PACKET stundenplanimdialogerstellenundaendernDEFINES stupidstart,
+stupidbearbeitendesstundenplans,stupidspeicherndieserzeitenfuerkopplung,
+stupidspeichernderraeumeundzeitenderlv,stupidkopierenderraumangabe,
+stupidnichtaendernweitermitkopplung,
+stupidnichtaendernweitermitnaechsterkopplung,stupidstoerendelvlisten,
+stupidraumbelegunglisten,stupidlistedrucken:LET maskeeingang=
+"ms erf stuplan im dialog 0";LET maskebearb1="ms erf stuplan im dialog 1";
+LET maskebearb2="ms erf stuplan im dialog 2";LET fnrkopplungbs0=2,
+fnrakthalbjahr=3,fnrmitzeitwuenschen=4,fnrkopplungbs1=2,fnrwstdmaxbs1=3,
+felderbistabbeginn=2,fnrersteseingabefeldbs1=4,felderproeintragbs1=2,
+fnrletztesfeldbs1=135,fnrlehrveranstaltbs2=2,fnrwstdbs2=3,fnrparaphebs2=4,
+fnrklassengruppenbeginn=5,fnrraumwunsch=9,felderbistabbeginnbs2=10,
+fnrersterraumbs2=12,fnrletztesfeldbs2=142,felderproeintragbs2=2;INT VAR
+fnrersteseingabefeldbs2;INT VAR ifnr;LET meldnrbittewarten=69,
+meldnrdatenwurdengespeichert=302,meldnrdatenwurdennichtgespeichert=303,
+meldnrungueltigekopplung=325,meldnrkeinelv=326,meldnrkeinesugruppen=334,
+meldnrzuvielesugruppen=356,meldnrdatenaufbereitet=357,meldnrzuvielelv=358,
+meldnrungueltigerraum=359,meldnrzuordnungwegensperrungunmoegl=368,
+meldnrzuvielezuordnungen=369,meldnrraumschonbelegt=370,
+meldnrstundenplanserverfehlt=376,meldnrbasisalt=377,meldnrbasisinkons=378,
+meldnrkeinestoerendenlv=371;FILE VAR ausgabeliste;LET liste1=
+"störende Lehrveranstaltungen",liste2="Raumbelegungen";TEXT VAR zeigdatei;
+LET raumgruppendatei="Datei mit Raumgruppen";FILE VAR datraumgruppen;LET
+wunschraumdatei="Datei mit Raumwünschen";FILE VAR datraumwunsch;LET
+zwdateiname="Datei mit Zeitwünschen";FILE VAR zwdatei;LET laengelv=8,
+laengefachkenn=6,laengekopplung=8,laengeparaphe=4,laengeraum=4,laengewstd=2,
+laengesugruppe=6,laengeklagruppe=4,laengenfaktor=2;LET erstestd=1,letztestd=
+66;LET kennzlehrergesperrt="L",kennzzeitgesperrt="X",kennzraumgesperrt="R",
+kennzschuelergesperrt="S",kennzzeitrastersperrung="x",kennzlehrerwunsch="l",
+kennzraumevtlgesperrt="r",kennzverplant="x",kennzkeinfreierwunschraum="x",
+kennzraumungeprueft="-";LET kennungkopplung="K",kennungparaphe="P",kennunglv=
+"L",kennungraum="R",kennungwunschraum="RW",kennungersatzraum="RE";LET
+stundeverplant="1",stundefrei="0",stundefehlerhaft="$";LET textschulj=
+"Schuljahr",texthalbj="Schulhalbjahr";LET raumkenndaten="c02 raeume";LET
+posraeumeinrgzeile=5;LET raumplatzhalter=" ",lehrerplatzhalter=" ",
+blankzeichen=" ",trennstrich="/",vorschlagzeichen="*",textueberschriftanhang=
+" für Halbjahr ",textueberschriftbs2="Raumzuordnung in Kopplung ";LET zwbezug
+="P";LET minusdrei="-3";INT VAR fstatusstuplan;INT VAR i;INT VAR
+maxwochenstunden;TEXT VAR aktschulj:="",akthalbj:="",gewschulj,gewhalbj,
+behandeltesschulj:="",behandelteshalbj:="";TEXT VAR kopplung,ankreuzung,
+eintrag,lv,paraphe,raum,raumhinweis,raumzeile,raumgruppenzeile,zwdateizeile,
+raumbelegliste,raumsetzliste,alleraeume:="",paraphenmitzeitwuenschen:="",
+sugruppen;INT VAR anzahlraeume,posraum;INT VAR wstdderlv;TEXT VAR
+kopplungszeiten,schuelerschnittzeiten,zeitrasterleiste:="",
+halbjderzeitrasterleiste:="",zeitwunschleiste,halbjderzeitwuensche:="",
+lvliste,paraphenliste;INT VAR ilv,anzahllv;TEXT VAR suchlv,suchraum,
+suchparaphe;TEXT VAR ueberschrift,ueberschriftbs1:="";BOOL VAR
+mitzeitwuenschen,meldungzufehlergezeigt;TEXT VAR wertfeld2:="",wertfeld3:="",
+wertfeld4:="";PROC stupidstart:standardstartproc(maskeeingang);
+wertedeseingangsbildschirmsholen;infeld(fnrkopplungbs0);
+standardfelderausgeben;infeld(fnrkopplungbs0);standardnprocEND PROC
+stupidstart;PROC stupidbearbeitendesstundenplans:
+schulhalbjahrbestimmenundstundenplanholen;IF fstatusstuplan<>0THEN
+stundenplanfehlerbehandeln;return(1)ELSE suchekopplung;IF
+keinegueltigekopplungTHEN standardmeldung(meldnrungueltigekopplung,"");return
+(1)ELSE wertedeseingangsbildschirmsmerken;standardstartproc(maskebearb1);
+kopplungzeigen;standardnprocFI FI .schulhalbjahrbestimmenundstundenplanholen:
+IF akthalbj=""THEN akthalbj:=schulkenndatum(texthalbj);aktschulj:=
+schulkenndatum(textschulj);FI ;gewhalbj:=akthalbj;gewschulj:=aktschulj;IF
+standardmaskenfeld(fnrakthalbjahr)=""THEN geplanteshjundsjberechnen(gewhalbj,
+gewschulj)FI ;mitzeitwuenschen:=standardmaskenfeld(fnrmitzeitwuenschen)<>"";
+IF mitzeitwuenschenTHEN IF paraphenmitzeitwuenschen=""COR gewhalbj<>
+halbjderzeitwuenscheTHEN halbjderzeitwuensche:=gewhalbj;standardmeldung(
+meldnrbittewarten,"");dateimitzeitwuenschenzusammenstellenFI FI ;IF NOT (
+gewhalbj=behandelteshalbjAND gewschulj=behandeltesschulj)THEN
+behandelteshalbj:=gewhalbj;behandeltesschulj:=gewschulj;
+stundenplanhalbjahrsetzen(gewhalbj,gewschulj);standardmeldung(
+meldnrdatenaufbereitet,"");stundenplanbasisundstundenplanholen(fstatusstuplan
+);IF fstatusstuplan=0THEN stundenplanreorganisierenundsichern(fstatusstuplan)
+ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt,"");
+stundenplanreorganisierenundsichern(fstatusstuplan)ELSE
+stundenplanbasisundstundenplanerstellen(fstatusstuplan);IF fstatusstuplan=0
+THEN stundenplanbasissichern(fstatusstuplan);stundenplansichern(
+fstatusstuplan)FI FI 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 .
+suchekopplung:kopplung:=standardmaskenfeld(fnrkopplungbs0);putwert(fnrlvsj,
+gewschulj);putwert(fnrlvhj,gewhalbj);putwert(fnrlvkopplung,kopplung);search(
+ixlvsjhjkopp,FALSE ).END PROC stupidbearbeitendesstundenplans;BOOL PROC
+keinegueltigekopplung:dbstatus<>0OR wert(fnrlvhj)<>gewhalbjOR wert(fnrlvsj)<>
+gewschuljEND PROC keinegueltigekopplung;PROC
+dateimitzeitwuenschenzusammenstellen:forget(zwdateiname,quiet);zwdatei:=
+sequentialfile(output,zwdateiname);paraphenmitzeitwuenschen:="";inittupel(
+dnrzeitwuensche);putwert(fnrzwbezug,zwbezug);statleseschleife(dnrzeitwuensche
+,gewschulj,gewhalbj,fnrzwsj,fnrzwhj,PROC zeitwunschlesen)END PROC
+dateimitzeitwuenschenzusammenstellen;PROC zeitwunschlesen(BOOL VAR b):IF
+dbstatus<>0OR wert(fnrzwsj)<>gewschuljOR wert(fnrzwhj)<>gewhalbjOR wert(
+fnrzwbezug)>zwbezugTHEN b:=TRUE ELSE paraphenmitzeitwuenschenCAT text(wert(
+fnrzwbezugsobjekt),laengeparaphe);zwdateizeile:=wert(fnrzwbestimmtewuensche);
+putline(zwdatei,zwdateizeile)FI END PROC zeitwunschlesen;PROC kopplungzeigen:
+ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift);
+standardmeldung(meldnrbittewarten,"");datenbestimmenundausgeben;infeld(
+fnrersteseingabefeldbs1).ueberschriftzeilezusammensetzen:IF ueberschriftbs1=
+""THEN ueberschriftbs1:=text(vergleichsknoten)FI ;ueberschrift:=
+ueberschriftbs1;ueberschriftCAT textueberschriftanhang;ueberschriftCAT
+gewhalbj;ueberschriftCAT blankzeichen;ueberschriftCAT subtext(gewschulj,1,2);
+ueberschriftCAT trennstrich;ueberschriftCAT subtext(gewschulj,3,4).
+datenbestimmenundausgeben:kopplung:=wert(fnrlvkopplung);
+maxwochenstundenbestimmen;zeitrasterleistefestlegen;kopplungszeitenfestlegen;
+lvlisteholen;paraphenlisteundwunschraumlisteholen;schuelerschnittzeitenholen;
+zeitwunschleistefestlegen;standardmaskenfeld(kopplung,fnrkopplungbs1);
+standardmaskenfeld(text(maxwochenstunden),fnrwstdmaxbs1);
+meldungzufehlergezeigt:=FALSE ;FOR iFROM erstestdUPTO letztestdREP
+fuelleeintrag;standardmaskenfeld(ankreuzung,i*felderproeintragbs1+
+felderbistabbeginn);standardmaskenfeld(text(eintrag,3),i*felderproeintragbs1+
+felderbistabbeginn+1);PER ;IF meldungzufehlergezeigtTHEN infeld(2)ELSE infeld
+(1)FI ;standardfelderausgeben.maxwochenstundenbestimmen:maxwochenstunden:=0;
+putwert(fnrlvkopplung,kopplung);putintwert(fnrlvjgst,0);statleseschleife(
+ixlvsjhjkopp,gewschulj,gewhalbj,fnrlvsj,fnrlvhj,PROC maxwochenstdberechnen).
+fuelleeintrag:IF (kopplungszeitenSUB i)=stundeverplantTHEN ankreuzung:=
+kennzverplantELSE ankreuzung:=""FI ;eintrag:="";IF (zeitrasterleisteSUB i)=
+kennzzeitrastersperrungTHEN eintragCAT kennzzeitgesperrtELSE
+weiterepruefungenzueintragFI .weiterepruefungenzueintrag:IF
+istlehrerzurzeitverplantTHEN eintragCAT kennzlehrergesperrtELSE IF
+mitzeitwuenschenCAND (zeitwunschleisteSUB i)=stundeverplantTHEN eintragCAT
+kennzlehrerwunschFI FI ;IF (schuelerschnittzeitenSUB i)=stundeverplantTHEN
+eintragCAT kennzschuelergesperrtELIF (schuelerschnittzeitenSUB i)=
+stundefehlerhaftCAND NOT meldungzufehlergezeigtTHEN standardmeldung(
+meldnrbasisinkons,"");meldungzufehlergezeigt:=TRUE FI ;IF eintrag=
+kennzlehrergesperrt+kennzschuelergesperrtTHEN eintragCAT kennzraumungeprueft
+ELSE raumhinweis:="";prueferaumbelegung;eintragCAT raumhinweisFI .
+kopplungszeitenfestlegen:kopplungszeiten:=allezeitenvon(kennungkopplung,
+kopplung).lvlisteholen:lvliste:=allelvmit(kennungkopplung,kopplung);anzahllv
+:=length(lvliste)DIV laengelv.schuelerschnittzeitenholen:
+schuelerschnittzeiten:=schuelergruppenschnittallezeiten(kennungkopplung,
+kopplung).paraphenlisteundwunschraumlisteholen:paraphenliste:="";
+raumgruppeninraumgruppendateiauslesen;forget(wunschraumdatei,quiet);
+datraumwunsch:=sequentialfile(output,wunschraumdatei);INT VAR lvpos:=1,iraum;
+FOR ilvFROM 1UPTO anzahllvREP lv:=subtext(lvliste,lvpos,lvpos+laengelv-1);
+paraphenlisteCAT datenzurlv(kennungparaphe,lv);raumzeile:="";raum:=datenzurlv
+(kennungwunschraum,lv);IF bezeichnungzulaessig(kennungraum,compress(raum))
+THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;raum:=
+datenzurlv(kennungersatzraum,lv);IF bezeichnungzulaessig(kennungraum,compress
+(raum))THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;putline
+(datraumwunsch,raumzeile);lvpos:=lvpos+laengelvPER .
+raumgruppeninraumgruppendateiauslesen:IF NOT exists(raumgruppendatei)THEN
+datraumgruppen:=sequentialfile(output,raumgruppendatei);inittupel(
+dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp,
+fnrrgraeume,PROC raumgruppeindateischreiben)FI .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 raeumederraumgruppe
+WITH subtext(raumgruppenzeile,posraeumeinrgzeile)ELSE col(datraumgruppen,col(
+datraumgruppen)+1)FI ;PER ;"".prueferaumbelegung:BOOL VAR vorlaeufiggesetzt;
+raumbelegliste:=datenderzeit(i,kennungraum);IF raumbelegliste<>""THEN
+raumsetzliste:="";datraumwunsch:=sequentialfile(input,wunschraumdatei);ilv:=0
+;WHILE NOT eof(datraumwunsch)REP getline(datraumwunsch,raumzeile);ilv:=ilv+1;
+IF raumzeile<>""THEN anzahlraeume:=length(raumzeile)DIV laengeraum;
+vorlaeufiggesetzt:=FALSE ;posraum:=1;FOR iraumFROM 1UPTO anzahlraeumeREP raum
+:=subtext(raumzeile,posraum,posraum+laengeraum-1);prueferaum;posraum:=posraum
++laengeraumUNTIL vorlaeufiggesetztPER ;IF NOT vorlaeufiggesetztTHEN
+raumhinweis:=kennzraumevtlgesperrtFI ;FI ;PER ;FI .prueferaum:IF suchpos(
+raumbelegliste,raum,laengeraum)>0THEN lv:=subtext(lvliste,(ilv-1)*laengelv+1,
+ilv*laengelv);planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe
+);IF suchlv<>lvTHEN IF iraum=anzahlraeumeTHEN raumhinweis:=kennzraumgesperrt;
+LEAVE prueferaumbelegungFI ELSE vorlaeufiggesetzt:=TRUE FI ELSE IF suchpos(
+raumsetzliste,raum,laengeraum)=0THEN raumsetzliste:=raum;vorlaeufiggesetzt:=
+TRUE FI FI .zeitwunschleistefestlegen:IF mitzeitwuenschenTHEN zwdatei:=
+sequentialfile(modify,zwdateiname);zeitwunschleiste:=letztestd*stundefrei;
+INT VAR fundpos,posparaphe:=1;WHILE posparaphe<length(paraphenliste)REP
+suchparaphe:=subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1);
+fundpos:=suchpos(paraphenmitzeitwuenschen,suchparaphe,laengeparaphe);IF
+fundpos>0THEN zeitwuenschezerlegenFI ;posparapheINCR laengeparaphe;PER ;FI .
+zeitwuenschezerlegen:INT VAR izeile:=(fundpos+3)DIV laengeparaphe;toline(
+zwdatei,izeile);readrecord(zwdatei,zwdateizeile);fundpos:=pos(zwdateizeile,
+minusdrei,1);WHILE fundpos>0REP fundposINCR 1;replace(zeitwunschleiste,
+fundposDIV 2,stundeverplant);fundpos:=pos(zwdateizeile,minusdrei,fundpos)PER
+.END PROC kopplungzeigen;PROC raumgruppeindateischreiben(BOOL VAR b):IF
+dbstatus=0THEN putline(datraumgruppen,text(wert(fnrrgraumgrp),laengeraum)+
+wert(fnrrgraeume))ELSE b:=TRUE FI END PROC raumgruppeindateischreiben;PROC
+maxwochenstdberechnen(BOOL VAR b):IF dbstatus=0CAND wert(fnrlvkopplung)=
+kopplungCAND wert(fnrlvsj)=gewschuljCAND wert(fnrlvhj)=gewhalbjTHEN
+maxwochenstunden:=max(intwert(fnrlvwochenstd),maxwochenstunden)ELSE b:=TRUE
+FI END PROC maxwochenstdberechnen;PROC zeitrasterleistefestlegen:IF gewhalbj
+<>halbjderzeitrasterleisteOR zeitrasterleiste=""THEN zeitrasterleiste:=
+letztestd*blankzeichen;inittupel(dnrzeitraster);statleseschleife(
+dnrzeitraster,gewschulj,gewhalbj,fnrzrsj,fnrzrhj,PROC
+erstellezeitrasterleiste);halbjderzeitrasterleiste:=gewhalbj;FI END PROC
+zeitrasterleistefestlegen;PROC erstellezeitrasterleiste(BOOL VAR b):IF wert(
+fnrzrsj)<>gewschuljCOR wert(fnrzrhj)<>gewhalbjCOR dbstatus<>0THEN b:=TRUE
+ELSE IF wert(fnrzrkennungteil)=kennzzeitrastersperrungTHEN replace(
+zeitrasterleiste,intwert(fnrzrtagstunde),kennzzeitrastersperrung)FI FI END
+PROC erstellezeitrasterleiste;BOOL PROC istlehrerzurzeitverplant:TEXT VAR
+kopplungenderzeit:="";TEXT VAR lehrerderzeit:=datenderzeit(i,kennungparaphe);
+IF lehrerderzeit=""COR paraphenliste=lehrerplatzhalterTHEN LEAVE
+istlehrerzurzeitverplantWITH FALSE FI ;INT VAR posparaphe:=1;INT VAR
+poslehrer,poskopplung;WHILE posparaphe<=length(paraphenliste)REP paraphe:=
+subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1);IF paraphe<>
+lehrerplatzhalterTHEN poslehrer:=suchpos(lehrerderzeit,paraphe,laengeparaphe)
+;IF poslehrer>0THEN IF kopplungenderzeit=""THEN kopplungenderzeit:=
+datenderzeit(i,kennungkopplung)FI ;poskopplung:=(poslehrer-1)*laengenfaktor+1
+;IF subtext(kopplungenderzeit,poskopplung,poskopplung+laengekopplung-1)<>text
+(kopplung,laengekopplung)THEN LEAVE istlehrerzurzeitverplantWITH TRUE FI FI ;
+FI ;posparaphe:=posparaphe+laengeparaphePER ;FALSE END PROC
+istlehrerzurzeitverplant;PROC stupidstoerendelvlisten:TEXT VAR prueflv,
+pruefkopplung,pruefparaphe,lvderzeit,kopplungenderzeit,paraphenderzeit,
+vglkopplung,auszeile;INT VAR feldnr:=infeld;IF
+sperrungderzeitdurchlehreroderschuelerTHEN erstelledateimitstoerendenlv;
+zeigedatei(zeigdatei,"");ELSE standardmeldung(meldnrkeinestoerendenlv,"");
+return(1)FI .sperrungderzeitdurchlehreroderschueler:pos(standardmaskenfeld(
+feldnr+1),kennzlehrergesperrt)>0OR pos(standardmaskenfeld(feldnr+1),
+kennzschuelergesperrt)>0.erstelledateimitstoerendenlv:i:=(feldnr-
+felderbistabbeginn)DIV felderproeintragbs1;zeigdatei:=liste1;forget(zeigdatei
+,quiet);ausgabeliste:=sequentialfile(output,zeigdatei);auszeile:="Kopplung ";
+auszeileCAT kopplung;auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE );
+auszeileCAT ".Stunde verhindert durch:";putline(ausgabeliste,auszeile);line(
+ausgabeliste);auszeile:="Lehrveranst. (Kopplung) Lehrer Klassengruppen";
+putline(ausgabeliste,auszeile);lvderzeit:=datenderzeit(i,kennunglv);
+kopplungenderzeit:=datenderzeit(i,kennungkopplung);paraphenderzeit:=
+datenderzeit(i,kennungparaphe);INT VAR poslv:=1,poskopplung:=1,posparaphe:=1;
+vglkopplung:=text(kopplung,laengekopplung);WHILE poslv<=length(lvderzeit)REP
+pruefkopplung:=subtext(kopplungenderzeit,poskopplung,poskopplung+
+laengekopplung-1);IF pruefkopplung<>vglkopplungTHEN pruefparaphe:=subtext(
+paraphenderzeit,posparaphe,posparaphe+laengeparaphe-1);prueflv:=subtext(
+lvderzeit,poslv,poslv+laengelv-1);IF suchpos(paraphenliste,pruefparaphe,
+laengeparaphe)>0CAND pruefparaphe<>lehrerplatzhalterTHEN vermerkelvELIF
+gemeinsameschuelergruppen(kennungkopplung,kopplung,kennunglv,prueflv)THEN
+vermerkelvFI ;FI ;poskopplung:=poskopplung+laengekopplung;poslv:=poslv+
+laengelv;posparaphe:=posparaphe+laengeparaphe;PER .vermerkelv:auszeile:=
+subtext(prueflv,1,2);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,3,4
+);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,5);auszeileCAT " ";
+auszeileCAT pruefkopplung;auszeileCAT " ";auszeileCAT pruefparaphe;auszeile
+CAT " ";sugruppen:=beteiligteschuelergruppen(kennunglv,prueflv);INT VAR
+possu:=1;WHILE possu<=length(sugruppen)REP auszeileCAT subtext(sugruppen,
+possu,possu+laengesugruppe-1);auszeileCAT blankzeichen;possu:=possu+
+laengesugruppePER ;putline(ausgabeliste,auszeile).END PROC
+stupidstoerendelvlisten;PROC stupidraumbelegunglisten:TEXT VAR auszeile;INT
+VAR feldnr:=infeld;erstelledateimitraumbelegung;zeigedatei(zeigdatei,"").
+erstelledateimitraumbelegung:i:=(feldnr-felderbistabbeginnbs2)DIV
+felderproeintragbs2;zeigdatei:=liste2;forget(zeigdatei,quiet);ausgabeliste:=
+sequentialfile(output,zeigdatei);auszeile:=
+"Raumbelegung für Lehrveranstaltung ";auszeileCAT subtext(lv,1,2);auszeile
+CAT blankzeichen;auszeileCAT subtext(lv,3,4);auszeileCAT blankzeichen;
+auszeileCAT subtext(lv,5);auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE );
+auszeileCAT ".Stunde:";putline(ausgabeliste,auszeile);line(ausgabeliste);
+putline(ausgabeliste,"freie Räume:");line(ausgabeliste);IF alleraeume=""THEN
+alleraeumeholenFI ;posraum:=1;WHILE posraum<=length(alleraeume)REP raum:=
+subtext(alleraeume,posraum,posraum+laengeraum-1);planeintraglesen(i,
+kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum=""THEN putline(
+ausgabeliste,raum)FI ;posraum:=posraum+laengeraumPER ;line(ausgabeliste);line
+(ausgabeliste);putline(ausgabeliste,"Belegung der Wunsch- und Ersatzräume:");
+datraumwunsch:=sequentialfile(modify,wunschraumdatei);toline(datraumwunsch,
+ilv);readrecord(datraumwunsch,raumzeile);posraum:=1;WHILE posraum<=length(
+raumzeile)REP raum:=subtext(raumzeile,posraum,posraum+laengeraum-1);
+planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum
+<>""THEN auszeile:=raum;auszeileCAT " : ";auszeileCAT subtext(suchlv,1,2);
+auszeileCAT blankzeichen;auszeileCAT subtext(suchlv,3,4);auszeileCAT
+blankzeichen;auszeileCAT subtext(suchlv,5);putline(ausgabeliste,auszeile);FI
+;posraum:=posraum+laengeraumPER .alleraeumeholen:inittupel(dnrschluessel);
+statleseschleife(dnrschluessel,raumkenndaten,"",fnrschlsachgebiet,
+fnrschlschluessel,PROC raeumeholen).END PROC stupidraumbelegunglisten;PROC
+raeumeholen(BOOL VAR b):IF wert(fnrschlsachgebiet)>raumkenndatenCOR dbstatus
+<>0THEN b:=TRUE ELSE alleraeumeCAT text(wert(fnrschlschluessel),laengeraum)
+FI END PROC raeumeholen;PROC stupidspeicherndieserzeitenfuerkopplung:BOOL
+VAR plausifehler:=FALSE ;INT VAR anzahlankreuzungen:=0;ifnr:=
+fnrersteseingabefeldbs1;REP IF standardmaskenfeld(ifnr)<>""THEN IF zeitbelegt
+OR lehrerbelegtOR schuelerbelegtTHEN plausifehler:=TRUE ;standardmeldung(
+meldnrzuordnungwegensperrungunmoegl,"");infeld(ifnr)FI ;anzahlankreuzungen
+INCR 1FI ;ifnrINCR felderproeintragbs1UNTIL (ifnr>fnrletztesfeldbs1)OR
+plausifehlerPER ;IF plausifehlerTHEN return(1)ELIF anzahlankreuzungen>
+maxwochenstundenTHEN standardmeldung(meldnrzuvielezuordnungen,"");return(1)
+ELSE speichernderkopplung;standardmeldung(meldnrdatenwurdengespeichert,"");
+stundenplansichern(fstatusstuplan);IF anzahlankreuzungen=0THEN
+stupidnichtaendernweitermitnaechsterkopplungELSE standardstartproc(
+maskebearb2);erstelvzurkopplungnocheinmallesen;ilv:=1;lvzeigen;standardnproc
+FI FI .zeitbelegt:pos(standardmaskenfeld(ifnr+1),kennzzeitgesperrt)>0.
+lehrerbelegt:pos(standardmaskenfeld(ifnr+1),kennzlehrergesperrt)>0.
+schuelerbelegt:pos(standardmaskenfeld(ifnr+1),kennzschuelergesperrt)>0.
+erstelvzurkopplungnocheinmallesen:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,
+gewhalbj);putwert(fnrlvkopplung,kopplung);search(ixlvsjhjkopp,FALSE ).
+speichernderkopplung:INT VAR poslv;ifnr:=fnrersteseingabefeldbs1;FOR iFROM
+erstestdUPTO letztestdREP ankreuzung:=standardmaskenfeld(ifnr);IF (
+kopplungszeitenSUB i)=stundeverplantTHEN IF ankreuzung=""THEN
+kopplungentfernenELSE kopplungueberschreibenFI ELSE IF ankreuzung<>""THEN
+kopplungschreibenFI ;FI ;ifnr:=ifnr+felderproeintragbs1PER .kopplungschreiben
+:BOOL VAR ok;poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste,
+poslv,poslv+laengelv-1);planeintragvornehmen(i,lv,raumplatzhalter,ok);poslv:=
+poslv+laengelvPER ;replace(kopplungszeiten,i,stundeverplant).
+kopplungentfernen:poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(
+lvliste,poslv,poslv+laengelv-1);planeintragloeschen(i,lv,ok);poslv:=poslv+
+laengelvPER ;replace(kopplungszeiten,i,stundefrei).kopplungueberschreiben:
+poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste,poslv,poslv+
+laengelv-1);planeintraglesen(i,kennunglv,lv,suchlv,suchraum,suchparaphe);
+suchraum:=compress(suchraum);IF suchraum=""THEN suchraum:=raumplatzhalterFI ;
+planeintragvornehmen(i,lv,suchraum,ok);poslv:=poslv+laengelvPER .END PROC
+stupidspeicherndieserzeitenfuerkopplung;PROC lvzeigen:
+ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift);
+datenbestimmenundausgeben.ueberschriftzeilezusammensetzen:ueberschrift:=
+textueberschriftbs2;ueberschriftCAT kopplung;ueberschriftCAT
+textueberschriftanhang;ueberschriftCAT gewhalbj;ueberschriftCAT blankzeichen;
+ueberschriftCAT subtext(gewschulj,1,2);ueberschriftCAT trennstrich;
+ueberschriftCAT subtext(gewschulj,3,4).datenbestimmenundausgeben:
+werteauslvsatzholen;ifnr:=felderbistabbeginnbs2;fnrersteseingabefeldbs2:=0;
+FOR iFROM erstestdUPTO letztestdREP IF (kopplungszeitenSUB i)=stundeverplant
+THEN planeintraglesen(i,kennunglv,text(lv,laengelv),suchlv,suchraum,
+suchparaphe);IF compress(suchraum)<>""THEN standardmaskenfeld(blankzeichen,
+ifnr+1);standardmaskenfeld(compress(suchraum),ifnr+2)ELSE standardmaskenfeld(
+vorschlagzeichen,ifnr+1);standardmaskenfeld(compress(wunschraumvorschlag),
+ifnr+2)FI ;IF fnrersteseingabefeldbs2=0THEN fnrersteseingabefeldbs2:=ifnr+2
+FI ELSE standardmaskenfeld(blankzeichen,ifnr+1);standardmaskenfeld(
+raumplatzhalter,ifnr+2);feldschutz(ifnr+2)FI ;ifnr:=ifnr+felderproeintragbs2
+PER ;infeld(1);standardfelderausgeben;infeld(fnrersteseingabefeldbs2).
+werteauslvsatzholen:lv:=jgstzweistellig(intwert(fnrlvjgst))+text(wert(
+fnrlvfachkennung),laengefachkenn);wstdderlv:=intwert(fnrlvwochenstd);paraphe
+:=wert(fnrlvparaphe);standardmaskenfeld(text(lv,laengelv),
+fnrlehrveranstaltbs2);standardmaskenfeld(text(wstdderlv,laengewstd),
+fnrwstdbs2);standardmaskenfeld(text(paraphe,laengeparaphe),fnrparaphebs2);
+standardmaskenfeld(text(wert(fnrlvklgrp1),laengeklagruppe),
+fnrklassengruppenbeginn);standardmaskenfeld(text(wert(fnrlvklgrp2),
+laengeklagruppe),fnrklassengruppenbeginn+1);standardmaskenfeld(text(wert(
+fnrlvklgrp3),laengeklagruppe),fnrklassengruppenbeginn+2);standardmaskenfeld(
+text(wert(fnrlvklgrp4),laengeklagruppe),fnrklassengruppenbeginn+3);
+standardmaskenfeld(text(wert(fnrlvraumgrp1),laengeraum),fnrraumwunsch);
+standardmaskenfeld(text(wert(fnrlvraumgrp2),laengeraum),fnrraumwunsch+1).
+wunschraumvorschlag:datraumwunsch:=sequentialfile(modify,wunschraumdatei);
+toline(datraumwunsch,ilv);readrecord(datraumwunsch,raumzeile);raumbelegliste
+:=datenderzeit(i,kennungraum);posraum:=1;WHILE posraum<=length(raumzeile)REP
+raum:=subtext(raumzeile,posraum,posraum+laengeraum-1);IF suchpos(
+raumbelegliste,raum,laengeraum)=0THEN LEAVE wunschraumvorschlagWITH raumFI ;
+posraum:=posraum+laengeraumPER ;kennzkeinfreierwunschraum.END PROC lvzeigen;
+PROC stupidspeichernderraeumeundzeitenderlv(BOOL CONST speichern):BOOL VAR
+plausifehler,ok;IF speichernTHEN plausifehler:=FALSE ;
+plausipruefungfuerraeumezulv;IF plausifehlerTHEN return(1)ELSE
+raeumezulvspeichern;standardmeldung(meldnrdatenwurdengespeichert,"");
+stundenplansichern(fstatusstuplan);naechstelvzurbearbeitungFI ELSE
+standardmeldung(meldnrdatenwurdennichtgespeichert,"");
+naechstelvzurbearbeitungFI .plausipruefungfuerraeumezulv:INT VAR
+anzahlankreuzungen:=0;ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO letztestd
+REP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress(
+standardmaskenfeld(ifnr));IF raum<>""THEN anzahlankreuzungen:=
+anzahlankreuzungen+1;IF raum<>kennzkeinfreierwunschraumTHEN IF NOT
+bezeichnungzulaessig(kennungraum,raum)THEN standardmeldung(
+meldnrungueltigerraum,"");infeld(ifnr);plausifehler:=TRUE ELIF
+raumdurchanderelvbelegtTHEN standardmeldung(meldnrraumschonbelegt,"");infeld(
+ifnr);plausifehler:=TRUE FI FI FI FI ;ifnr:=ifnr+felderproeintragbs2UNTIL
+plausifehlerPER ;IF NOT plausifehlerTHEN IF anzahlankreuzungen>wstdderlvTHEN
+standardmeldung(meldnrzuvielezuordnungen,"");infeld(fnrersteseingabefeldbs2);
+plausifehler:=TRUE FI FI .raumdurchanderelvbelegt:planeintraglesen(i,
+kennungraum,raum,suchlv,suchraum,suchparaphe);compress(suchraum)<>""AND
+suchlv<>lv.raeumezulvspeichern:ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO
+letztestdREP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress(
+standardmaskenfeld(ifnr));IF raum=""THEN planeintragloeschen(i,lv,ok);ELSE
+IF raum=kennzkeinfreierwunschraumTHEN raum:=raumplatzhalterFI ;
+planeintragvornehmen(i,lv,raum,ok);FI FI ;ifnr:=ifnr+felderproeintragbs2PER .
+naechstelvzurbearbeitung:succ(ixlvsjhjkopp);IF dbstatus=0THEN IF
+weiterelvzukopplungvorhandenTHEN ilv:=ilv+1;lvzeigen;return(1)ELSE
+standardstartproc(maskebearb1);kopplungzeigen;return(2)FI ELSE enter(3)FI .
+weiterelvzukopplungvorhanden:wert(fnrlvkopplung)=kopplungAND wert(fnrlvhj)=
+gewhalbjAND wert(fnrlvsj)=gewschulj.END PROC
+stupidspeichernderraeumeundzeitenderlv;PROC stupidkopierenderraumangabe:INT
+VAR feldnr:=infeld;ifnr:=feldnr;WHILE ifnr<fnrletztesfeldbs2REP ifnrINCR
+felderproeintragbs2;IF standardmaskenfeld(ifnr)<>raumplatzhalterTHEN
+standardmaskenfeld(standardmaskenfeld(feldnr),ifnr)FI PER ;return(1)END PROC
+stupidkopierenderraumangabe;PROC stupidnichtaendernweitermitkopplung:putwert(
+fnrlvkopplung,kopplung+blankzeichen);search(ixlvsjhjkopp,FALSE );IF
+keinegueltigekopplungTHEN enter(3)ELSE standardstartproc(maskebearb1);
+kopplungzeigen;return(2)FI END PROC stupidnichtaendernweitermitkopplung;PROC
+stupidnichtaendernweitermitnaechsterkopplung:putwert(fnrlvkopplung,kopplung+
+blankzeichen);search(ixlvsjhjkopp,FALSE );IF keinegueltigekopplungTHEN enter(
+2)ELSE kopplungzeigen;return(1)FI END PROC
+stupidnichtaendernweitermitnaechsterkopplung;PROC stupidlistedrucken(BOOL
+CONST drucken):IF druckenTHEN print(zeigdatei)FI ;forget(zeigdatei,quiet);
+return(2)END PROC stupidlistedrucken;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
+;PROC wertedeseingangsbildschirmsmerken:wertfeld2:=standardmaskenfeld(
+fnrkopplungbs0);wertfeld3:=standardmaskenfeld(fnrakthalbjahr);wertfeld4:=
+standardmaskenfeld(fnrmitzeitwuenschen)END PROC
+wertedeseingangsbildschirmsmerken;PROC wertedeseingangsbildschirmsholen:
+standardmaskenfeld(wertfeld2,fnrkopplungbs0);standardmaskenfeld(wertfeld3,
+fnrakthalbjahr);standardmaskenfeld(wertfeld4,fnrmitzeitwuenschen)END PROC
+wertedeseingangsbildschirmsholen;END PACKET
+stundenplanimdialogerstellenundaendern
+
diff --git a/app/schulis/2.2.1/src/4.stundenplan nach lv erfassen b/app/schulis/2.2.1/src/4.stundenplan nach lv erfassen
new file mode 100644
index 0000000..376fbac
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.stundenplan nach lv erfassen
@@ -0,0 +1,133 @@
+PACKET stundenplannachlverfassenDEFINES stundenplannachlvspeichern,
+stundenplannachlvreorganisiertverlassen,stundenplannachlvkopieren,
+stundenplannachlvzeigen:LET stdplmaske="ms stdplan nach lv bearb",
+feldeingjgst=2,feldeingfach=3,feldeingkenn=4,feldeingakthj=5,laengelv=8,
+lvmitleeremraum="x",leererraum=" ",leererlehrer=" ",schuljahr=
+"Schuljahr",halbjahr="Schulhalbjahr",kennungwstd="W",kennungraum="R",
+kennungparaphe="P",kennunglv="L",kennungzulzeit="ZZ",ausgabeparam="#",
+maxstunden=66,meldungplausi=57,meldungfeldfuellen=52,meldungfalschejgst=305,
+meldungzuvielewstd=369,meldungjgstergaenzen=304,meldungfalschesfach=310,
+meldungkeinestartlv=68,meldungspeichern=50,meldungwarten=69,
+meldungdatenaufbereitet=357,meldungkeinesugruppen=334,meldungzuvielesugruppen
+=356,meldunglehrerbesetzt=361,meldungraumbesetzt=370,meldungsugrupbesetzt=362
+,meldungzeitgesperrt=363,meldungkeinelv=326,meldungaenderungsfehler=364,
+meldunguvfehler=403,meldungserverfehler=376,meldungbasisinkon=378,
+meldunganderewahl=318,meldungfalscherraum=359,meldungzuvielelv=358;ROW
+maxstundenTEXT VAR lvausstdpl;ROW maxstundenTEXT VAR lvvombs;TEXT VAR schhj,
+schj,aktfachkenn,aktlv,eintraglv,lveintrag,raumeintrag,pareintrag,hjsjanhang
+:="";INT VAR i,fstat,hjkennalt:=-1,aktjgst,uvokfeld:=2,wstdderlv,hjkennneu:=0
+;BOOL VAR spok:=TRUE ,uvok:=TRUE ,aenderungsfehler:=FALSE ;PROC
+stundenplannachlvkopieren:INT VAR aktfeld:=infeld;TEXT VAR feldinhalt:="";IF
+aktfeld=67THEN fehlermeldunganwunzulELSE kopierenFI ;return(1).kopieren:
+feldinhalt:=standardmaskenfeld(aktfeld);standardmaskenfeld(feldinhalt,aktfeld
++1);standardfelderausgeben;infeld(aktfeld).fehlermeldunganwunzul:
+standardmeldung(meldunganderewahl,"").END PROC stundenplannachlvkopieren;
+PROC stundenplannachlvreorganisiertverlassen:
+stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(1);
+meldungausgeben(fstat)ELSE enter(2)FI END PROC
+stundenplannachlvreorganisiertverlassen;PROC stundenplannachlvzeigen:INT VAR
+jgst:=0;TEXT VAR jg:="",fach:="",kennung:="";standardmeldung(meldungwarten,
+" ");jg:=standardmaskenfeld(feldeingjgst);fach:=standardmaskenfeld(
+feldeingfach);kennung:=standardmaskenfeld(feldeingkenn);pruefeeingabe;
+maskeundinitialisierung;holstartlv;stundenplannachlvausgeben.pruefeeingabe:
+IF jg<>""THEN jgst:=int(jg);IF lastconversionokTHEN pruefjgstELSE
+fehlermeldungfalschejgstFI ;FI ;prueffach;pruefkennung.pruefjgst:IF jgst<>0
+THEN IF jgst<5COR jgst>13THEN fehlermeldungfalschejgstFI FI .
+fehlermeldungfalschejgst:standardmeldung(meldungfalschejgst,"");infeld(
+feldeingjgst);return(1);LEAVE stundenplannachlvzeigen.prueffach:IF fach<>""
+THEN IF jg=""THEN standardmeldung(meldungjgstergaenzen,"");infeld(
+feldeingjgst);return(1);LEAVE stundenplannachlvzeigenELSE fach:=compress(fach
+);inittupel(dnrfaecher);putwert(fnrffach,fach);search(dnrfaecher,TRUE );IF
+dbstatus<>okTHEN fehlermeldungfalschesfachFI FI FI .fehlermeldungfalschesfach
+:standardmeldung(meldungfalschesfach,"");infeld(feldeingfach);return(1);
+LEAVE stundenplannachlvzeigen.pruefkennung:IF kennung<>""THEN IF jg=""THEN
+standardmeldung(meldungfeldfuellen,"");infeld(feldeingjgst);return(1);LEAVE
+stundenplannachlvzeigenFI ;IF fach=""THEN standardmeldung(meldungfeldfuellen,
+"");infeld(feldeingfach);return(1);LEAVE stundenplannachlvzeigenFI ;FI .
+maskeundinitialisierung:aktlv:="";aktjgst:=0;aktfachkenn:="";IF akthj<>""
+THEN hjkennneu:=0ELSE hjkennneu:=1FI ;IF hjkennneu<>hjkennaltTHEN hjkennalt:=
+hjkennneu;schj:=schulkenndatum(schuljahr);schhj:=schulkenndatum(halbjahr);IF
+hjkennneu=1THEN geplanteshjundsjberechnen(schhj,schj)FI ;
+stundenplanhalbjahrsetzen(schhj,schj);hjsjanhang:=schhj+". "+text(schj,2)+"/"
++subtext(schj,3);holestdplanFI .akthj:standardmaskenfeld(feldeingakthj).
+holestdplan:standardmeldung(meldungdatenaufbereitet,"");
+stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN
+stundenplanbasisundstundenplanerstellen(fstat);IF fstat<>0THEN return(1);
+meldungausgeben(fstat);LEAVE stundenplannachlvzeigenELSE
+stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN
+return(1);meldungausgeben(fstat);LEAVE stundenplannachlvzeigenFI FI ELIF
+fstat=8THEN meldungausgeben(fstat)FI .holstartlv:fach:=text(fach+" ",2);
+inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj
+);putintwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,fach+kennung);search(
+dnrlehrveranstaltungen,FALSE );IF dbstatus>2THEN fehlermeldungkeinestartlv
+ELSE aktjgst:=intwert(fnrlvjgst);aktfachkenn:=wert(fnrlvfachkennung);aktlv:=
+text(jgstaufbereiten(aktjgst)+aktfachkenn,laengelv)FI .
+fehlermeldungkeinestartlv:standardmeldung(meldungkeinestartlv,"");infeld(
+feldeingjgst);return(1);LEAVE stundenplannachlvzeigen.END PROC
+stundenplannachlvzeigen;PROC stundenplannachlvausgeben:standardstartproc(
+stdplmaske);fuellemaske;IF NOT uvokTHEN infeld(uvokfeld);standardmeldung(
+meldunguvfehler," ")FI ;standardnproc.END PROC stundenplannachlvausgeben;
+PROC fuellemaske:standardkopfmaskeaktualisieren("Stundenplan "+hjsjanhang+
+" für Lehrveranstaltung "+aktlv+"");uvok:=TRUE ;raumeintrag:="";lveintrag:=
+"";pareintrag:="";wstdderlv:=int(datenzurlv(kennungwstd,aktlv));FOR iFROM 1
+UPTO maxstundenREP planeintraglesen(i,kennunglv,aktlv,lveintrag,raumeintrag,
+pareintrag);IF raumeintrag<>""THEN IF raumeintrag=leererraumTHEN raumeintrag
+:=lvmitleeremraumELSE raumeintrag:=compress(raumeintrag)FI ;lvausstdpl(i):=
+raumeintrag;standardmaskenfeld(raumeintrag,i+1);IF pareintrag=leererlehrer
+THEN IF uvokTHEN uvok:=FALSE ;uvokfeld:=i+1;eintraglv:=lveintragFI FI ELSE
+lvausstdpl(i):="";standardmaskenfeld("",i+1);FI PER ;infeld(1);
+standardfelderausgeben;infeld(2).END PROC fuellemaske;PROC meldungausgeben(
+INT VAR fstat):IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF
+fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN
+standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung(
+meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF
+fstat=9THEN standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgeben
+FI END PROC meldungausgeben;PROC stundenplannachlvspeichern(BOOL CONST
+speichern):TEXT VAR raumeintrag,t:="",lv:="";INT VAR bisherigejgst:=0,anzwstd
+;IF speichernTHEN aenderungenvornehmen;FI ;naechstersatz;return(1).
+naechstersatz:succ(dnrlehrveranstaltungen);IF dbstatus>2COR wert(fnrlvsj)<>
+schjCOR wert(fnrlvhj)<>schhjTHEN stundenplannachlvreorganisiertverlassen;
+LEAVE stundenplannachlvspeichernELIF intwert(fnrlvjgst)<>bisherigejgstTHEN
+stundenplanreorganisierenundsichern(fstat);bisherigejgst:=intwert(fnrlvjgst)
+FI ;aktjgst:=intwert(fnrlvjgst);aktfachkenn:=wert(fnrlvfachkennung);aktlv:=
+text(jgstaufbereiten(aktjgst)+aktfachkenn,laengelv);fuellemaske;IF NOT uvok
+THEN infeld(uvokfeld);standardmeldung(meldunguvfehler,eintraglv+ausgabeparam)
+FI .aenderungenvornehmen:standardmeldung(meldungplausi," ");plausipruefung;
+standardmeldung(meldungspeichern," ");aenderungsfehler:=FALSE ;speicherung;
+IF aenderungsfehlerTHEN standardmeldung(meldungaenderungsfehler,"");return(1)
+;LEAVE stundenplannachlvspeichernELSE stundenplansichern(fstat)FI ;IF fstat<>
+0THEN meldungausgeben(fstat);return(1);LEAVE stundenplannachlvspeichernFI .
+plausipruefung:anzwstd:=0;FOR iFROM 1UPTO maxstundenREP infeld(i+1);
+raumeintrag:=standardmaskenfeld(i+1);IF raumeintrag<>""THEN pruefezeit;IF
+raumeintrag<>lvmitleeremraumTHEN prueferaum;lvvombs(i):=raumeintragELSE
+lvvombs(i):=leererraumFI ;schnittraeume;schnittlehrer;schnittsugruppen;
+wstdzahlok;anzwstdINCR 1;ELSE lvvombs(i):=""FI ;PER .pruefezeit:IF NOT
+bezeichnungzulaessig(kennungzulzeit,text(i))THEN standardmeldung(
+meldungzeitgesperrt,tagstunde(i,TRUE )+" Std."+ausgabeparam);return(1);LEAVE
+stundenplannachlvspeichernFI .prueferaum:IF NOT bezeichnungzulaessig(
+kennungraum,raumeintrag)THEN standardmeldung(meldungfalscherraum,"");return(1
+);LEAVE stundenplannachlvspeichernFI .schnittraeume:IF raumunterrichtTHEN
+standardmeldung(meldungraumbesetzt,"");return(1);LEAVE
+stundenplannachlvspeichernFI .raumunterricht:lv:=geplantelvfuer(i,kennungraum
+,raumeintrag);lv<>aktlvCAND lv<>"".schnittlehrer:t:=datenzurlv(kennungparaphe
+,aktlv);IF t<>leererlehrerTHEN IF lehrerunterrichtTHEN standardmeldung(
+meldunglehrerbesetzt,t+ausgabeparam);return(1);LEAVE
+stundenplannachlvspeichernFI FI .lehrerunterricht:lv:=geplantelvfuer(i,
+kennungparaphe,t);lv<>aktlvCAND lv<>"".schnittsugruppen:IF
+sugruppenichtunterrichtsfreiTHEN standardmeldung(meldungsugrupbesetzt,lv+
+ausgabeparam);return(1);LEAVE stundenplannachlvspeichernFI .
+sugruppenichtunterrichtsfrei:schuelergruppenschnittbeizeit(i,kennunglv,aktlv,
+"",lv,t).wstdzahlok:IF anzwstd=wstdderlvTHEN standardmeldung(
+meldungzuvielewstd,"");return(1);LEAVE stundenplannachlvspeichernFI .
+speicherung:FOR iFROM 1UPTO maxstundenREP IF lvausstdpl(i)<>""COR lvvombs(i)
+<>""THEN infeld(i+1);IF loeschenTHEN planeintragentfernenELSE
+planeintragschreibenFI ;FI ;PER .loeschen:lvausstdpl(i)<>""CAND lvvombs(i)=""
+.planeintragentfernen:planeintragloeschen(i,aktlv,spok);IF NOT spokTHEN
+aenderungsfehler:=TRUE FI .planeintragschreiben:IF lvausstdpl(i)<>""THEN
+planeintragloeschen(i,aktlv,spok);IF spokTHEN planeintragvornehmen(i,aktlv,
+lvvombs(i),spok);FI ;ELSE planeintragvornehmen(i,aktlv,lvvombs(i),spok);FI ;
+IF NOT spokTHEN aenderungsfehler:=TRUE FI .END PROC
+stundenplannachlvspeichern;TEXT PROC jgstaufbereiten(INT CONST jgst):TEXT
+VAR lv:="0";lvCAT text(jgst);subtext(lv,length(lv)-1)END PROC jgstaufbereiten
+;END PACKET stundenplannachlverfassen;
+
diff --git a/app/schulis/2.2.1/src/4.stundenplan nach zeiten erfassen b/app/schulis/2.2.1/src/4.stundenplan nach zeiten erfassen
new file mode 100644
index 0000000..51a812d
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.stundenplan nach zeiten erfassen
@@ -0,0 +1,157 @@
+PACKET stundenplannachzeitenerfassenDEFINES stundenplannachzeitenspeichern,
+stundenplannachzeitenzurueckzummenue,stdnraustagstd,
+stundenplannachzeitenzeigen:LET stdplmaske="ms stdplan nach zeit bearb",
+feldeingtag=2,feldeingstd=3,feldeingakt=4,laengelv=8,laengeraum=4,trenner="�"
+,schuljahr="Schuljahr",halbjahr="Schulhalbjahr",kennungraum="R",
+kennungparaphe="P",kennunglv="L",kennungzulzeit="ZZ",leerelv=" ",
+leererraum=" ",leererlehrer=" ",ausgabeparam="#",maxeintraege=60,
+erstestunde=1,letztestunde=66,stdprotag=12,meldungzeitgesperrt=363,
+meldungnichtspeichern=63,meldungraumangloeschen=396,meldungraumbesetzt=370,
+meldungplausi=57,meldungnur60lv=394,meldungspeichern=50,meldungwarten=69,
+meldungdatenaufbereitet=357,meldungfalschertag=385,meldungfalschestd=54,
+meldungfalscherraum=359,meldungkeinesugruppen=334,meldungzuvielesugruppen=356
+,meldungnichtlv=360,meldunglehrerbesetzt=361,meldungsugrupbesetzt=362,
+meldungkeinelv=326,meldungaenderungsfehler=364,meldunguvfehler=403,#
+meldungstdplanveraltet=377,#meldungserverfehler=376,meldungbasisinkon=378,
+meldungzuvielelv=358;ROW maxeintraegeTEXT VAR eintragausstdpl;TEXT VAR
+maskeneintragtag:="",maskeneintragstd:="",gewhj,gewsj,allelv,alleraeume,
+alleparaphen,uvoklv,lveintrag,raumeintrag,hjsjanhang:="",altereintrag:="";
+TEXT VAR alletage:="��01�02�03�04�05�06�1�2�3�4�5�6�MO�DI�MI�DO�FR�SA�"+
+"�mo�di�mi�do�fr�sa�Mo�Di�Mi�Do�Fr�Sa�"+
+"� 1� 2� 3� 4� 5� 6�1 �2 �3 �4 �5 �6 �",allestden:=
+"��01�02�03�04�05�06�07�08�09�10�11�12�13� 1� 2� 3�"+
+"� 4� 5� 6� 7� 8� 9�1 �2 �3 �4 �5 �6 �7 �8 �9 �"+"1�2�3�4�5�6�7�8�9�";INT
+VAR i,fstat,abstd:=0,uvokfeld,hjkennalt:=-1,hjkennneu:=0,letztebearbstd:=66;
+BOOL VAR spok:=TRUE ,uvok:=TRUE ,anzlvok:=TRUE ,stdplzeilegeloescht:=FALSE ,
+aenderungsfehler:=FALSE ;INT PROC stdnraustagstd(TEXT CONST tag,std):INT VAR
+itag:=int(tag),istd;IF lastconversionokTHEN IF itag=0COR itag=1THEN itag:=1
+FI ELSE IF tag="MO"COR tag="mo"COR tag="Mo"COR tag=""THEN itag:=1ELIF tag=
+"DI"COR tag="di"COR tag="Di"THEN itag:=2ELIF tag="MI"COR tag="mi"COR tag="Mi"
+THEN itag:=3ELIF tag="DO"COR tag="do"COR tag="Do"THEN itag:=4ELIF tag="FR"
+COR tag="fr"COR tag="Fr"THEN itag:=5ELSE itag:=6FI FI ;IF std=""THEN istd:=1
+ELSE istd:=int(std)FI ;(itag-1)*stdprotag+istdEND PROC stdnraustagstd;PROC
+stundenplannachzeitenreorganisiertverlassen:
+stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(1);
+meldungausgeben(fstat)ELSE enter(2)FI END PROC
+stundenplannachzeitenreorganisiertverlassen;PROC stundenplannachzeitenzeigen:
+standardmeldung(meldungwarten," ");maskeneintragtag:=standardmaskenfeld(
+feldeingtag);maskeneintragstd:=standardmaskenfeld(feldeingstd);abstd:=
+stdnraustagstd(maskeneintragtag,maskeneintragstd);prueftag;pruefstd;IF akthj
+<>""THEN hjkennneu:=0ELSE hjkennneu:=1FI ;IF hjkennneu<>hjkennaltTHEN
+hjkennalt:=hjkennneu;gewsj:=schulkenndatum(schuljahr);gewhj:=schulkenndatum(
+halbjahr);IF hjkennneu=1THEN geplanteshjundsjberechnen(gewhj,gewsj)FI ;
+stundenplanhalbjahrsetzen(gewhj,gewsj);ermittleletztestunde;hjsjanhang:=" "+
+gewhj+". "+text(gewsj,2)+"/"+subtext(gewsj,3)+", Raum ";holestdplanFI ;
+pruefzeitzulaessig;stundenplannachzeitenausgeben.akthj:standardmaskenfeld(
+feldeingakt).holestdplan:standardmeldung(meldungdatenaufbereitet,"");
+stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN
+stundenplanbasisundstundenplanerstellen(fstat);IF fstat<>0THEN return(1);
+meldungausgeben(fstat);LEAVE stundenplannachzeitenzeigenELSE
+stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN
+return(1);meldungausgeben(fstat);LEAVE stundenplannachzeitenzeigenFI FI ELIF
+fstat=8THEN meldungausgeben(fstat)FI .prueftag:IF pos(alletage,trenner+
+maskeneintragtag+trenner)=0THEN return(1);infeld(feldeingtag);standardmeldung
+(meldungfalschertag,"");LEAVE stundenplannachzeitenzeigenFI .pruefstd:IF pos(
+allestden,trenner+maskeneintragstd+trenner)=0THEN return(1);infeld(
+feldeingstd);standardmeldung(meldungfalschestd,"");LEAVE
+stundenplannachzeitenzeigenELIF abstdDIV stdprotag=6THEN IF abstd-60>6THEN
+return(1);infeld(feldeingstd);standardmeldung(meldungfalschestd,"");LEAVE
+stundenplannachzeitenzeigenFI ;FI .pruefzeitzulaessig:IF NOT
+bezeichnungzulaessig(kennungzulzeit,text(abstd))THEN return(1);infeld(
+feldeingtag);standardmeldung(meldungzeitgesperrt,tagstunde(abstd,FALSE )+"."+
+ausgabeparam);LEAVE stundenplannachzeitenzeigenFI .ermittleletztestunde:FOR i
+FROM letztestundeDOWNTO erstestundeREP IF bezeichnungzulaessig(kennungzulzeit
+,text(i))THEN letztebearbstd:=i;LEAVE ermittleletztestundeFI PER .END PROC
+stundenplannachzeitenzeigen;PROC stundenplannachzeitenausgeben:
+standardstartproc(stdplmaske);fuellemaske;IF NOT anzlvokTHEN standardmeldung(
+meldungnur60lv,tagstunde(abstd,TRUE )+ausgabeparam)ELIF NOT uvokTHEN infeld(
+uvokfeld);standardmeldung(meldunguvfehler," ");FI ;standardnproc.END PROC
+stundenplannachzeitenausgeben;PROC fuellemaske:TEXT VAR lvimstdplan,
+raumimstdplan,parimstdplan;INT VAR poslv,posraum,index;stdplzeilegeloescht:=
+FALSE ;allelv:=datenderzeit(abstd,kennunglv);alleraeume:=datenderzeit(abstd,
+kennungraum);alleparaphen:=datenderzeit(abstd,kennungparaphe);
+standardkopfmaskeaktualisieren("Stundenplan für "+tagstunde(abstd,FALSE )+
+". Stunde");uvok:=TRUE ;anzlvok:=TRUE ;uvokfeld:=2;poslv:=1;posraum:=1;IF
+length(allelv)>maxeintraege*laengelvTHEN allelv:=text(allelv,maxeintraege*
+laengelv);alleraeume:=text(alleraeume,maxeintraege*laengeraum);anzlvok:=
+FALSE FI ;FOR iFROM 1UPTO maxeintraegeREP index:=i*2;IF poslv<length(allelv)
+THEN lvimstdplan:=subtext(allelv,poslv,poslv+7);raumimstdplan:=subtext(
+alleraeume,posraum,posraum+3);parimstdplan:=subtext(alleparaphen,posraum,
+posraum+3);standardmaskenfeld(compress(lvimstdplan),index);standardmaskenfeld
+(compress(raumimstdplan),index+1);eintragausstdpl(i):=lvimstdplan+
+raumimstdplan;IF parimstdplan=leererlehrerCAND uvokTHEN uvokfeld:=index;uvok
+:=FALSE FI ;poslvINCR 8;posraumINCR 4;ELSE standardmaskenfeld("",index);
+standardmaskenfeld("",index+1);eintragausstdpl(i):=""FI ;PER ;infeld(1);
+standardfelderausgeben;infeld(2).END PROC fuellemaske;PROC meldungausgeben(
+INT VAR fstat):IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF
+fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN
+standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung(
+meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF
+fstat=9THEN standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgeben
+FI END PROC meldungausgeben;PROC stundenplannachzeitenspeichern(BOOL CONST
+speichern):TEXT VAR par:="",lv:="",t1:="",t2:="";INT VAR pos:=1;IF abstd=
+letztebearbstdTHEN IF speichernCAND anzlvokTHEN aenderungenvornehmen;ELIF
+stdplzeilegeloeschtTHEN alteeintraegeschreibenFI ;
+stundenplannachzeitenreorganisiertverlassenELSE IF speichernCAND anzlvokTHEN
+aenderungenvornehmen;ELIF stdplzeilegeloeschtTHEN alteeintraegeschreibenFI ;
+IF abstdMOD 12=0THEN stundenplanreorganisierenundsichern(fstat)FI ;
+naechstestd;meldungenbeifehler;return(1)FI .alteeintraegeschreiben:
+standardmeldung(meldungnichtspeichern,"");loescheinhaltaktstundenplanzeile;
+FOR iFROM 1UPTO maxeintraegeREP IF eintragausstdpl(i)<>""THEN
+planeintragvornehmen(abstd,text(eintragausstdpl(i),laengelv),subtext(
+eintragausstdpl(i),laengelv+1),spok)ELSE LEAVE alteeintraegeschreibenFI PER .
+loescheinhaltaktstundenplanzeile:stdplzeilegeloescht:=TRUE ;t1:=datenderzeit(
+abstd,kennunglv);pos:=1;WHILE pos<length(t1)REP planeintragloeschen(abstd,
+subtext(t1,pos,pos+laengelv-1),spok);posINCR laengelvPER .naechstestd:FOR i
+FROM abstd+1UPTO letztebearbstdREP IF bezeichnungzulaessig(kennungzulzeit,
+text(i))THEN abstd:=i;fuellemaske;LEAVE naechstestdELSE abstd:=letztebearbstd
+FI ;PER .meldungenbeifehler:IF NOT anzlvokTHEN standardmeldung(meldungnur60lv
+,tagstunde(abstd,TRUE )+ausgabeparam)ELIF NOT uvokTHEN infeld(uvokfeld);
+standardmeldung(meldunguvfehler," ")FI .aenderungenvornehmen:standardmeldung(
+meldungplausi," ");aenderungsfehler:=FALSE ;plausipruefungundspeicherung;IF
+aenderungsfehlerTHEN standardmeldung(meldungaenderungsfehler,"");return(1);
+LEAVE stundenplannachzeitenspeichernELSE standardmeldung(meldungspeichern," "
+);IF abstdMOD 12=0THEN stundenplannachzeitenreorganisiertverlassenELSE
+stundenplansichern(fstat)FI ;IF fstat<>0THEN meldungausgeben(fstat);return(1)
+;LEAVE stundenplannachzeitenspeichernFI ;FI .plausipruefungundspeicherung:
+loescheinhaltaktstundenplanzeile;FOR iFROM 1UPTO maxeintraegeREP infeld(i*2);
+altereintrag:=eintragausstdpl(i);lveintrag:=standardmaskenfeld(i*2);IF (
+lveintragSUB 1)=" "THEN lveintrag:=jgstaufber(text(lveintrag,2))+subtext(
+lveintrag,3)FI ;lveintrag:=text(lveintrag,laengelv);raumeintrag:=text(
+standardmaskenfeld(i*2+1),laengeraum);IF lveintrag+raumeintrag<>leerelv+
+leererraumTHEN infeld(i*2);pruefelvleerundraum;pruefelvgueltig;
+prueferaumgueltig;pruefelehrerfrei;prueferaumfrei;pruefesugruppenfrei;
+planeintragschreibenFI ;PER .pruefelvleerundraum:IF lveintrag=leerelvCAND
+raumeintrag<>leererraumTHEN standardmeldung(meldungraumangloeschen,"");return
+(1);LEAVE stundenplannachzeitenspeichernFI .pruefelvgueltig:IF NOT
+bezeichnungzulaessig(kennunglv,lveintrag)THEN standardmeldung(meldungnichtlv,
+lveintrag+ausgabeparam);return(1);LEAVE stundenplannachzeitenspeichernFI .
+prueferaumgueltig:IF raumeintrag<>leererraumTHEN IF NOT bezeichnungzulaessig(
+kennungraum,raumeintrag)THEN standardmeldung(meldungfalscherraum,"");infeld(i
+*2+1);return(1);LEAVE stundenplannachzeitenspeichernFI FI .pruefelehrerfrei:
+par:=datenzurlv(kennungparaphe,lveintrag);IF par<>leererlehrerTHEN IF
+lehrerunterrichtTHEN standardmeldung(meldunglehrerbesetzt,par+ausgabeparam);
+return(1);LEAVE stundenplannachzeitenspeichernFI FI .lehrerunterricht:lv:=
+geplantelvfuer(abstd,kennungparaphe,par);lv<>lveintragCAND lv<>"".
+prueferaumfrei:IF raumeintrag<>leererraumTHEN IF inraumunterrichtTHEN
+standardmeldung(meldungraumbesetzt,"");infeld(i*2+1);return(1);LEAVE
+stundenplannachzeitenspeichernFI FI .inraumunterricht:t1:=geplantelvfuer(
+abstd,kennungraum,raumeintrag);t1<>lveintragCAND t1<>"".pruefesugruppenfrei:
+IF sugruppenichtunterrichtsfreiTHEN standardmeldung(meldungsugrupbesetzt,t1+
+ausgabeparam);return(1);LEAVE stundenplannachzeitenspeichernFI .
+sugruppenichtunterrichtsfrei:schuelergruppenschnittbeizeit(abstd,kennunglv,
+lveintrag,text(altereintrag,8),t1,t2).planeintragschreiben:
+planeintragvornehmen(abstd,lveintrag,raumeintrag,spok);IF NOT spokTHEN
+aenderungsfehler:=TRUE FI .END PROC stundenplannachzeitenspeichern;PROC
+stundenplannachzeitenzurueckzummenue:INT VAR pos;TEXT VAR t1;standardmeldung(
+meldungnichtspeichern,"");IF stdplzeilegeloeschtTHEN alteeintraegeschreiben
+FI ;stundenplanreorganisierenundsichern(fstat);enter(2).
+alteeintraegeschreiben:loescheinhaltaktstundenplanzeile;FOR iFROM 1UPTO
+maxeintraegeREP IF eintragausstdpl(i)<>""THEN planeintragvornehmen(abstd,text
+(eintragausstdpl(i),laengelv),subtext(eintragausstdpl(i),laengelv+1),spok)
+ELSE LEAVE alteeintraegeschreibenFI PER .loescheinhaltaktstundenplanzeile:t1
+:=datenderzeit(abstd,kennunglv);pos:=1;WHILE pos<length(t1)REP
+planeintragloeschen(abstd,subtext(t1,pos,pos+laengelv-1),spok);posINCR
+laengelvPER .END PROC stundenplannachzeitenzurueckzummenue;END PACKET
+stundenplannachzeitenerfassen;
+
diff --git a/app/schulis/2.2.1/src/4.stundenplan raumweise erfassen b/app/schulis/2.2.1/src/4.stundenplan raumweise erfassen
new file mode 100644
index 0000000..03f5b9e
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.stundenplan raumweise erfassen
@@ -0,0 +1,135 @@
+PACKET stundenplanraumweiseerfassenDEFINES stundenplanraumweisespeichern,
+stundenplanraumweisekopieren,stundenplanraumweisereorganisiertverlassen,
+stundenplanraumweisezeigen:LET stdplmaske="ms stdplan raumweise bearb",
+feldeingraum=2,feldeingakt=3,laengelv=8,laengeraum=4,laengejgst=2,trenner="�"
+,raumkenndaten="c02 raeume",schuljahr="Schuljahr",halbjahr="Schulhalbjahr",
+kennungraum="R",kennungparaphe="P",kennunglv="L",kennungzulzeit="ZZ",
+ungueltigepar="$$$$",leererlehrer=" ",alleklst=
+"�00�05�06�07�08�09�10�11�12�13�",ausgabeparam="#",maxstunden=66,
+meldungplausi=57,meldungspeichern=50,meldungwarten=69,meldungdatenaufbereitet
+=357,meldungfalscherraum=359,meldungkeinesugruppen=334,
+meldungzuvielesugruppen=356,meldungnichtlv=360,meldunglehrerbesetzt=361,
+meldungsugrupbesetzt=362,meldungzeitgesperrt=363,meldungkeinelv=326,
+meldungaenderungsfehler=364,meldungkeineraeume=365,meldunguvfehler=403,
+meldungstdplanveraltet=377,meldungserverfehler=376,meldungbasisinkon=378,
+meldungunzulaessig=318,meldungzuvielelv=358;ROW maxstundenTEXT VAR lvausstdpl
+;ROW maxstundenTEXT VAR lvvombs;TEXT VAR maskeneintragraum:="",gewhj,gewsj,
+plausiraeume:=trenner+trenner,raumleiste:="",restraumleiste:="",
+stdpleintraglv:="",stdpleintragjgst:="",stdpleintraglvident:="",
+stdpleintraglvraum:="",stdpleintraglvpar:="",eintraglv,hjsjanhang:="";INT
+VAR i,fstat,aktbspos,anzraeume:=0,hjkennalt:=-1,uvokfeld,hjkennneu:=0;BOOL
+VAR spok:=TRUE ,uvok:=TRUE ,aenderungsfehler:=FALSE ;PROC
+stundenplanraumweisekopieren:INT VAR aktfeld:=infeld;TEXT VAR feldinhalt:="";
+IF aktfeld=67THEN fehlermeldunganwunzulELIF aktfeld=66THEN kopieren;infeld(
+aktfeld)ELSE kopieren;infeld(aktfeld+2)FI ;return(1).kopieren:feldinhalt:=
+standardmaskenfeld(aktfeld);standardmaskenfeld(feldinhalt,aktfeld+1);
+standardfelderausgeben.fehlermeldunganwunzul:standardmeldung(
+meldungunzulaessig,"").END PROC stundenplanraumweisekopieren;PROC
+stundenplanraumweisereorganisiertverlassen:
+stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(1);
+meldungausgeben(fstat)ELSE enter(2)FI END PROC
+stundenplanraumweisereorganisiertverlassen;PROC stundenplanraumweisezeigen:
+maskeundinitialisierung;IF maskeneintragraum<>""THEN IF raumfalsch(
+maskeneintragraum)THEN standardmeldung(meldungfalscherraum,"");return(1)ELSE
+restraumleiste:=text(raumleiste,pos(raumleiste,maskeneintragraum)+laengeraum-
+1);anzraeume:=length(restraumleiste)DIV laengeraum;
+stundenplanraumweiseausgeben(letzterraum);FI ;ELSE restraumleiste:=raumleiste
+;anzraeume:=length(restraumleiste)DIV laengeraum;IF anzraeume>=1THEN
+stundenplanraumweiseausgeben(letzterraum)ELSE standardmeldung(
+meldungkeineraeume,"");return(1)FI ;FI .letzterraum:subtext(restraumleiste,(
+anzraeume-1)*laengeraum+1).maskeundinitialisierung:standardmeldung(
+meldungwarten," ");IF akthj<>""THEN hjkennneu:=0ELSE hjkennneu:=1FI ;
+merkeraum;IF hjkennneu<>hjkennaltTHEN hjkennalt:=hjkennneu;gewsj:=
+schulkenndatum(schuljahr);gewhj:=schulkenndatum(halbjahr);IF hjkennneu=1THEN
+geplanteshjundsjberechnen(gewhj,gewsj)FI ;stundenplanhalbjahrsetzen(gewhj,
+gewsj);hjsjanhang:=" "+gewhj+". "+text(gewsj,2)+"/"+subtext(gewsj,3)+
+", Raum ";holestdplanFI ;IF plausiraeume=trenner+trennerTHEN holeplausiraeume
+FI .akthj:standardmaskenfeld(feldeingakt).merkeraum:maskeneintragraum:=
+standardmaskenfeld(feldeingraum).holestdplan:standardmeldung(
+meldungdatenaufbereitet,"");stundenplanbasisundstundenplanholen(fstat);IF
+fstat<>0CAND fstat<>8THEN stundenplanbasisundstundenplanerstellen(fstat);IF
+fstat<>0THEN return(1);meldungausgeben(fstat);LEAVE
+stundenplanraumweisezeigenELSE stundenplanbasissichern(fstat);
+stundenplansichern(fstat);IF fstat<>0THEN return(1);meldungausgeben(fstat);
+LEAVE stundenplanraumweisezeigenFI FI ELIF fstat=8THEN meldungausgeben(fstat)
+FI .holeplausiraeume:inittupel(dnrschluessel);statleseschleife(dnrschluessel,
+raumkenndaten,"",dnrschluessel+1,dnrschluessel+2,PROC raeumeholen).END PROC
+stundenplanraumweisezeigen;PROC stundenplanraumweiseausgeben(TEXT CONST raum)
+:standardstartproc(stdplmaske);fuellemaske(raum);IF NOT uvokTHEN infeld(
+uvokfeld);standardmeldung(meldunguvfehler," ")FI ;standardnproc.END PROC
+stundenplanraumweiseausgeben;PROC fuellemaske(TEXT CONST raum):TEXT VAR
+paraphelvnulleintrag:="";standardkopfmaskeaktualisieren("Stundenplan für"+
+hjsjanhang+raum);maskeneintragraum:=compress(raum);uvok:=TRUE ;uvokfeld:=2;
+FOR iFROM 1UPTO maxstundenREP planeintraglesen(i,kennungraum,raum,
+stdpleintraglvident,stdpleintraglvraum,stdpleintraglvpar);IF
+stdpleintraglvident<>""THEN lvausstdpl(i):=stdpleintraglvident;
+standardmaskenfeld(stdpleintraglvident,i+1);IF stdpleintraglvpar=leererlehrer
+THEN IF uvokTHEN uvok:=FALSE ;uvokfeld:=i+1FI ELSE pruefeparaphestdplanlvnull
+FI ELSE lvausstdpl(i):="";standardmaskenfeld("",i+1);FI PER ;infeld(1);
+standardfelderausgeben;infeld(2).pruefeparaphestdplanlvnull:
+paraphelvnulleintrag:=datenzurlv(kennungparaphe,stdpleintraglvident);IF
+stdpleintraglvpar<>paraphelvnulleintragTHEN planeintragvornehmen(i,
+stdpleintraglvident,paraphelvnulleintrag,spok)FI .END PROC fuellemaske;BOOL
+PROC raumfalsch(TEXT CONST raum):pos(plausiraeume,trenner+raum+trenner)=0END
+PROC raumfalsch;PROC raeumeholen(BOOL VAR b):IF wert(dnrschluessel+1)>
+raumkenndatenCOR dbstatus<>0THEN b:=TRUE ELSE plausiraeumeCAT wert(
+dnrschluessel+2);plausiraeumeCAT trenner;raumleiste:=text(wert(dnrschluessel+
+2),laengeraum)+raumleisteFI END PROC raeumeholen;PROC meldungausgeben(INT
+VAR fstat):IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF fstat=
+4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN
+standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung(
+meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF
+fstat=8THEN standardmeldung(meldungstdplanveraltet,"");ELIF fstat=9THEN
+standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgebenFI END PROC
+meldungausgeben;PROC stundenplanraumweisespeichern(BOOL CONST speichern):
+TEXT VAR t:="",lv:="";INT VAR posrestraumleiste;IF anzraeume=1THEN IF
+speichernTHEN aenderungenvornehmen;FI ;
+stundenplanraumweisereorganisiertverlassenELSE IF speichernTHEN
+aenderungenvornehmen;FI ;anzraeumeDECR 1;IF anzraeumeMOD 10=0THEN
+stundenplanreorganisierenundsichern(fstat)FI ;naechsterraum;return(1)FI .
+naechsterraum:posrestraumleiste:=(anzraeume-1)*laengeraum+1;fuellemaske(
+subtext(restraumleiste,posrestraumleiste,posrestraumleiste+laengeraum-1));IF
+NOT uvokTHEN infeld(uvokfeld);standardmeldung(meldunguvfehler," ")FI .
+aenderungenvornehmen:standardmeldung(meldungplausi," ");plausipruefung;
+standardmeldung(meldungspeichern," ");aenderungsfehler:=FALSE ;speicherung;
+IF aenderungsfehlerTHEN standardmeldung(meldungaenderungsfehler,"");return(1)
+;LEAVE stundenplanraumweisespeichernELSE IF anzraeumeMOD 20=0THEN
+stundenplanraumweisereorganisiertverlassenELSE stundenplansichern(fstat)FI ;
+IF fstat<>0THEN meldungausgeben(fstat);return(1);LEAVE
+stundenplanraumweisespeichernFI ;FI .plausipruefung:FOR iFROM 1UPTO
+maxstundenREP aktbspos:=i+1;infeld(aktbspos);stdpleintraglv:=text(
+standardmaskenfeld(aktbspos),laengelv);stdpleintragjgst:=text(stdpleintraglv,
+laengejgst);IF keinejgstmitfuehrendernullTHEN IF stdpleintragjgst="0 "COR
+stdpleintragjgst=" 0"THEN stdpleintraglv:="00"+subtext(stdpleintraglv,
+laengejgst+1)ELSE stdpleintraglv:=jgstaufber(stdpleintragjgst)+subtext(
+stdpleintraglv,laengejgst+1);IF NOT lastconversionokTHEN standardmeldung(
+meldungnichtlv,standardmaskenfeld(aktbspos)+ausgabeparam);return(1);LEAVE
+stundenplanraumweisespeichernFI ;FI ;FI ;IF compress(stdpleintraglv)<>""THEN
+lvvombs(i):=stdpleintraglv;pruefezeit;pruefelvundpar;pruefesugruppenfreiELSE
+lvvombs(i):="";FI ;PER .speicherung:FOR iFROM 1UPTO maxstundenREP IF
+lvausstdpl(i)<>""COR lvvombs(i)<>""THEN aktbspos:=i+1;infeld(aktbspos);IF
+loeschenTHEN planeintragentfernenELSE planeintragschreibenFI ;FI ;PER .
+keinejgstmitfuehrendernull:keinejgstCAND keinleerereintrag.keinejgst:pos(
+alleklst,trenner+stdpleintragjgst+trenner)=0.keinleerereintrag:compress(
+stdpleintraglv)<>"".pruefelvundpar:t:=datenzurlv(kennungparaphe,
+stdpleintraglv);IF t=ungueltigeparTHEN standardmeldung(meldungnichtlv,
+standardmaskenfeld(aktbspos)+ausgabeparam);return(1);LEAVE
+stundenplanraumweisespeichernELIF t<>leererlehrerTHEN IF lehrerunterricht
+THEN standardmeldung(meldunglehrerbesetzt,t+ausgabeparam);return(1);LEAVE
+stundenplanraumweisespeichernFI FI .lehrerunterricht:lv:=geplantelvfuer(i,
+kennungparaphe,t);lv<>stdpleintraglvCAND lv<>"".pruefesugruppenfrei:IF
+sugruppenichtunterrichtsfreiTHEN standardmeldung(meldungsugrupbesetzt,lv+
+ausgabeparam);return(1);LEAVE stundenplanraumweisespeichernFI .
+sugruppenichtunterrichtsfrei:schuelergruppenschnittbeizeit(i,kennunglv,
+stdpleintraglv,lvausstdpl(i),lv,t).pruefezeit:t:=text(i);IF NOT
+bezeichnungzulaessig(kennungzulzeit,t)THEN standardmeldung(
+meldungzeitgesperrt,tagstunde(i,TRUE )+" Std."+ausgabeparam);return(1);LEAVE
+stundenplanraumweisespeichernFI .loeschen:lvausstdpl(i)<>""CAND lvvombs(i)=""
+.planeintragentfernen:planeintragloeschen(i,lvausstdpl(i),spok);IF NOT spok
+THEN aenderungsfehler:=TRUE FI .planeintragschreiben:IF lvausstdpl(i)<>""
+THEN planeintragloeschen(i,lvausstdpl(i),spok);IF spokTHEN
+planeintragvornehmen(i,lvvombs(i),maskeneintragraum,spok);FI ;ELSE
+planeintragvornehmen(i,lvvombs(i),maskeneintragraum,spok);FI ;IF NOT spok
+THEN aenderungsfehler:=TRUE FI .END PROC stundenplanraumweisespeichern;END
+PACKET stundenplanraumweiseerfassen;
+
diff --git a/app/schulis/2.2.1/src/4.stundenplan schnittstelle b/app/schulis/2.2.1/src/4.stundenplan schnittstelle
new file mode 100644
index 0000000..bc036af
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.stundenplan schnittstelle
@@ -0,0 +1,692 @@
+PACKET stundenplanschnittstelleDEFINES tagstunde,stundenplanhalbjahrsetzen,
+stundenplanbasisundstundenplanerstellen,stundenplanerstellen,
+stundenplanbasisundstundenplanholen,stundenplanbasissichern,
+stundenplansichern,stundenplandatenvorhanden,
+stundenplanbasisundstundenplanloeschen,stundenplanloeschen,
+stundenplanreorganisierenundsichern,bezeichnungzulaessig,datenzurlv,
+beteiligteschuelergruppen,schuelergruppenschnittbeizeit,
+schuelergruppenschnittallezeiten,gemeinsameschuelergruppen,
+lvderschuelergruppe,allelvmit,lvgeplant,geplantelvfuer,allezeitenvon,
+datenderzeit,planeintraglesen,planeintragvornehmen,planeintragloeschen,
+erstellungszeitderdatenraeume:LET maxdatenraumeintraege=4000,
+maxlehrveranstaltungen=2500,erstestunde=1,letztestunde=66,stdprotag=12,
+samstagstd=6,schultage=6,stuplanverwalter="stundenplan server",sgnull=
+"Stundenplan-0 ",sgeins="Stundenplan-1 ",lvnull="Stundenplan-2 ",lveins=
+"Stundenplan-3 ",stuplan="Stundenplan-4 ",aenderungakt="aktuell",
+aenderunggepl="geplant",maxsugruppen=30,laengelv=8,laengekopplung=8,
+laengeparaphe=4,laengeraum=4,laengezeit=2,laengejgst=2,laengefachkennung=6,
+laengesugruppe=6,laengeklagruppe=4,laengewochenstd=2,laengestuplaneintrag=24,
+stuplanposjgst=1,stuplanposkopplung=9,stuplanposparaphe=17,stuplanposraum=21,
+erstellzeittag=1,erstellzeitmonat=4,erstellzeitjahr=7,erstellzeitstdmin=10,
+beginnlvjgst=1,beginnlvbez=1,beginnlvkopplung=9,beginnlvparaphe=17,
+beginnlvwochenstd=21,beginnlvraumgr1=23,beginnlvraumgr2=27;INT CONST
+endelvbez:=beginnlvbez+laengelv-1,endelvkopplung:=beginnlvkopplung+
+laengekopplung-1,endelvparaphe:=beginnlvparaphe+laengeparaphe-1,
+endelvwochenstd:=beginnlvwochenstd+laengewochenstd-1,endelvraumgr1:=
+beginnlvraumgr1+laengeraum-1,endelvraumgr2:=beginnlvraumgr2+laengeraum-1;LET
+leistenlaenge=8,bits=16,jgstnull=0,jgstfuenf=5,jgstdreizehn=13,anzklst=9,
+trenner="�",klstjgst="�05�5�06�6�07�7�08�8�09�9�10�11�12�13�",
+zeitrastersperre="x",dbraeume="c02 raeume",dbaenderung=
+"c02 aenderungsvermerk",dbaenderungakt="aktuell",dbaenderunggepl="geplant",
+halbj="Schulhalbjahr",fehlerzeichen="$",blank=" ",punkt=".",null="0",eins="1"
+,leereraumangabe=" ",kennunglv="L",kennungkopplung="K",kennungparaphe="P",
+kennungraum="R",kennungzeit="ZA",kennungzugelassenezeit="ZZ",kennungsugruppe=
+"S",kennungwochenstd="W",kennungwunschraum="RW",kennungersatzraum="RE";LET
+kennungmo="Mo ",kennungdi="Di ",kennungmi="Mi ",kennungdo="Do ",kennungfr=
+"Fr ",kennungsa="Sa ",kennungmontag="Montag ",kennungdienstag="Dienstag ",
+kennungmittwoch="Mittwoch ",kennungdonnerstag="Donnerstag ",kennungfreitag=
+"Freitag ",kennungsamstag="Samstag ";TYPE BITLEISTE =ROW leistenlaengeINT ;
+BITLEISTE VAR sugrupurleiste,sugrupleiste;BOUND ROW maxlehrveranstaltungen
+BITLEISTE VAR lvbitleisten;BOUND ROW maxdatenraumeintraegeBITLEISTE VAR
+sgbitleisten;ROW maxsugruppenBITLEISTE VAR sugruppenstack;DATASPACE VAR dslv,
+dssugrup,dsstdpl;FILE VAR lvdatei,sugrupdatei,stuplandatei;TEXT VAR gewschulj
+:="",gewhalbj:="",halbjplausizeit:="",dateieintrag,ergebnis,dserstellungszeit
+,behandeltesugruppen:=trenner,letztedbzeit,lvzeile,sugruppeneinerklgr:="",
+plausiparaphen:=trenner,plausizeiten:="",plausiklgr:=trenner,plausiraeume:=
+trenner;INT VAR i,j,k,zz,anzbitleisten:=0,lowbit,anzsugrup,anzsugrupundklgr,
+anzlv,lvjgstnullanfang,lvjgstnullende,lvsugrupjgstanfang,lvsugrupjgstende,
+letzteposstuplanzeile,letzterzugrifflv0:=1;BOOL VAR klgreintrag;TEXT PROC
+tagstunde(INT CONST anwstdnr,BOOL CONST mitkurzform):INT VAR stdnr:=
+konvertierezeit(anwstdnr);TEXT VAR std;IF stdnr<erstestundeCOR stdnr>
+letztestundeTHEN ""ELSE std:=text((stdnr-1)MOD stdprotag+1);IF mitkurzform
+THEN SELECT (stdnr-1)DIV stdprotagOF CASE 0:kennungmo+stdCASE 1:kennungdi+std
+CASE 2:kennungmi+stdCASE 3:kennungdo+stdCASE 4:kennungfr+stdCASE 5:kennungsa+
+stdOTHERWISE ""END SELECT ELSE SELECT (stdnr-1)DIV stdprotagOF CASE 0:
+kennungmontag+stdCASE 1:kennungdienstag+stdCASE 2:kennungmittwoch+stdCASE 3:
+kennungdonnerstag+stdCASE 4:kennungfreitag+stdCASE 5:kennungsamstag+std
+OTHERWISE ""END SELECT FI FI END PROC tagstunde;PROC
+stundenplanhalbjahrsetzen(TEXT CONST anwhalbj,anwschulj):gewschulj:=anwschulj
+;gewhalbj:=anwhalbj;plausizeiten:=""END PROC stundenplanhalbjahrsetzen;PROC
+stundenplanbasisundstundenplanerstellen(INT VAR fehlerstatus):IF gewschulj=""
+THEN fehlerstatus:=1ELSE hilfsdatenerstellen(fehlerstatus);IF fehlerstatus=0
+THEN schreibeerstellungszeitFI ;FI .END PROC
+stundenplanbasisundstundenplanerstellen;PROC stundenplanerstellen(TEXT CONST
+zeit,INT VAR fehlerstatus):commanddialogue(FALSE );IF gewschulj=""THEN
+fehlerstatus:=1;forget(stuplandatenraum)ELSE forget(stuplandatenraum);#
+dsstdpl:=new(stuplandatenraum);forget(dsstdpl);#commanddialogue(TRUE );
+stuplandatei:=sequentialfile(modify,stuplandatenraum);FOR iFROM erstestunde
+UPTO letztestunde+1REP insertrecord(stuplandatei)PER ;schreibzeitinstdpl;
+fehlerstatus:=0FI .schreibzeitinstdpl:toline(stuplandatei,letztestunde+1);
+writerecord(stuplandatei,zeit).END PROC stundenplanerstellen;PROC
+stundenplanbasissichern(INT VAR fehlerstatus):TASK VAR server;disablestop;
+server:=task(stuplanverwalter);IF iserrorTHEN clearerror;fehlerstatus:=2;
+ELIF gewschulj=""THEN fehlerstatus:=1;ELIF NOT exists(lvnulldatenraum)COR
+NOT exists(lveinsdatenraum)COR NOT exists(sgnulldatenraum)COR NOT exists(
+sgeinsdatenraum)THEN fehlerstatus:=3ELSE commanddialogue(FALSE );save(
+lvnulldatenraum,server);save(lveinsdatenraum,server);save(sgnulldatenraum,
+server);save(sgeinsdatenraum,server);commanddialogue(TRUE );fehlerstatus:=0
+FI ;enablestopEND PROC stundenplanbasissichern;PROC stundenplansichern(INT
+VAR fehlerstatus):TASK VAR server;disablestop;server:=task(stuplanverwalter);
+IF iserrorTHEN clearerror;fehlerstatus:=2;ELIF gewschulj=""THEN fehlerstatus
+:=1ELIF NOT exists(stuplandatenraum)THEN fehlerstatus:=3ELSE commanddialogue(
+FALSE );save(stuplandatenraum,server);commanddialogue(TRUE );fehlerstatus:=0;
+FI ;enablestopEND PROC stundenplansichern;PROC
+stundenplanbasisundstundenplanholen(INT VAR fehlerstatus):TASK VAR server;
+disablestop;server:=task(stuplanverwalter);IF iserrorTHEN clearerror;
+fehlerstatus:=2;ELIF gewschulj=""THEN fehlerstatus:=1ELIF NOT exists(
+lvnulldatenraum,server)COR NOT exists(lveinsdatenraum,server)COR NOT exists(
+sgnulldatenraum,server)COR NOT exists(sgeinsdatenraum,server)COR NOT exists(
+stuplandatenraum,server)THEN fehlerstatus:=3;ELSE commanddialogue(FALSE );
+fetch(stuplandatenraum,server);fetch(lvnulldatenraum,server);fetch(
+lveinsdatenraum,server);fetch(sgnulldatenraum,server);fetch(sgeinsdatenraum,
+server);datenraeumeankoppeln;commanddialogue(TRUE );IF
+stundenplanbasisaktuell(fehlerstatus)THEN anzsugrupundklgr:=lines(sugrupdatei
+)-anzklst;anzsugrup:=anzsugrupundklgr-int(records(dnrklassengruppen));anzlv:=
+lines(lvdatei);fehlerstatus:=0;ELSE IF fehlerstatus=9THEN
+aenderungsvermerkderdbsetzen;FI ;stundenplanbasiserstellen(fehlerstatus);IF
+fehlerstatus=0THEN stundenplanbasissichern(fehlerstatus);IF fehlerstatus=0
+THEN stundenplansichern(fehlerstatus);fehlerstatus:=8FI FI FI FI ;enablestop.
+aenderungsvermerkderdbsetzen:IF gewhalbj=schulkenndatum(halbj)THEN
+aenderungsvermerksetzen(aenderungakt)ELSE aenderungsvermerksetzen(
+aenderunggepl)FI .END PROC stundenplanbasisundstundenplanholen;BOOL PROC
+stundenplandatenvorhanden:TASK VAR server;IF NOT existstask(stuplanverwalter)
+THEN FALSE ELIF gewschulj=""THEN FALSE ELSE server:=task(stuplanverwalter);
+exists(lvnulldatenraum,server)COR exists(lveinsdatenraum,server)COR exists(
+sgnulldatenraum,server)COR exists(sgeinsdatenraum,server)COR exists(
+stuplandatenraum,server)FI END PROC stundenplandatenvorhanden;PROC
+stundenplanbasisundstundenplanloeschen(INT VAR fehlerstatus):TASK VAR server;
+IF NOT existstask(stuplanverwalter)THEN fehlerstatus:=2ELIF gewschulj=""THEN
+fehlerstatus:=1;ELSE server:=task(stuplanverwalter);commanddialogue(FALSE );
+erase(stuplandatenraum,server);erase(lvnulldatenraum,server);erase(
+lveinsdatenraum,server);erase(sgnulldatenraum,server);erase(sgeinsdatenraum,
+server);commanddialogue(TRUE );fehlerstatus:=0;FI END PROC
+stundenplanbasisundstundenplanloeschen;PROC stundenplanloeschen(INT VAR
+fehlerstatus):IF gewschulj=""THEN fehlerstatus:=1ELIF NOT exists(
+stuplandatenraum)THEN fehlerstatus:=3;ELSE forget(stuplandatenraum,quiet);
+fehlerstatus:=0FI END PROC stundenplanloeschen;PROC
+stundenplanreorganisierenundsichern(INT VAR fehlerstatus):INT VAR kanal;IF
+gewschulj=""THEN fehlerstatus:=1ELIF NOT exists(stuplandatenraum)THEN
+fehlerstatus:=3ELSE kanal:=channel(myself);break(quiet);reorganize(
+stuplandatenraum);continue(kanal);modify(stuplandatei);stundenplansichern(
+fehlerstatus)FI END PROC stundenplanreorganisierenundsichern;TEXT PROC
+erstellungszeitderdatenraeume:IF exists(stuplandatenraum)THEN toline(
+stuplandatei,letztestunde+1);readrecord(stuplandatei,dserstellungszeit);
+dserstellungszeitELSE fehlerzeichenFI END PROC erstellungszeitderdatenraeume;
+BOOL PROC bezeichnungzulaessig(TEXT CONST kennung,kennungstext):TEXT VAR
+sicherung;INT VAR zeit,alterdbstatus;IF kennung=kennunglvTHEN lv0eintrag(text
+(kennungstext,laengelv))<>""ELIF kennung=kennungkopplungTHEN kopplunginlv0(
+text(kennungstext,laengekopplung))ELIF kennung=kennungparapheTHEN IF
+plausiparaphen=trennerTHEN alterdbstatus:=dbstatus;savetupel(dnrlehrer,
+sicherung);statleseschleife(dnrlehrer,"","",fnrlparaphe,fnrlparaphe,PROC
+paraphencat);restoretupel(dnrlehrer,sicherung);dbstatus(alterdbstatus)FI ;pos
+(plausiparaphen,trenner+text(kennungstext,laengeparaphe)+trenner)>0ELIF
+kennung=kennungsugruppeTHEN sg0eintrag(text(kennungstext,laengesugruppe))
+ELIF kennung=kennungraumTHEN IF plausiraeume=trennerTHEN alterdbstatus:=
+dbstatus;savetupel(dnrschluessel,sicherung);statleseschleife(dnrschluessel,
+dbraeume,"",fnrschlsachgebiet,fnrschlschluessel,PROC raumcat);restoretupel(
+dnrschluessel,sicherung);dbstatus(alterdbstatus)FI ;pos(plausiraeume,trenner+
+text(kennungstext,laengeraum)+trenner)>0ELIF kennung=kennungzeitTHEN IF real(
+kennungstext)<1000.0THEN konvertierezeit(int(kennungstext))<>0ELSE FALSE FI
+ELIF kennung=kennungzugelassenezeitTHEN IF real(kennungstext)>1000.0THEN
+LEAVE bezeichnungzulaessigWITH FALSE FI ;IF plausizeiten=""COR gewhalbj<>
+halbjplausizeitTHEN halbjplausizeit:=gewhalbj;plausizeiten:=letztestunde*"0";
+inittupel(dnrzeitraster);alterdbstatus:=dbstatus;savetupel(dnrzeitraster,
+sicherung);statleseschleife(dnrzeitraster,gewschulj,gewhalbj,fnrzrsj,fnrzrhj,
+PROC erstelleplausizeiten);restoretupel(dnrzeitraster,sicherung);dbstatus(
+alterdbstatus)FI ;zeit:=konvertierezeit(int(kennungstext));IF zeit<>0THEN (
+plausizeitenSUB zeit)="0"ELSE FALSE FI ELSE FALSE FI END PROC
+bezeichnungzulaessig;TEXT PROC datenzurlv(TEXT CONST kennung,
+lehrveranstaltung):lvzeile:=lv0eintrag(text(lehrveranstaltung,laengelv));IF
+lvzeile<>""THEN IF kennung=kennungparapheTHEN paraphederlv(lvzeile)ELIF
+kennung=kennungkopplungTHEN kopplungderlv(lvzeile)ELIF kennung=
+kennungwochenstdTHEN wochenstdderlv(lvzeile)ELIF kennung=kennungwunschraum
+THEN wunschraumderlv(lvzeile)ELIF kennung=kennungersatzraumTHEN
+ersatzraumderlv(lvzeile)ELSE fehlerzeichenFI ELSE ungueltigesergebnis(kennung
+)FI END PROC datenzurlv;TEXT PROC beteiligteschuelergruppen(TEXT CONST
+kennung,kennungstext):BITLEISTE VAR bitleiste;IF kennung=kennunglvTHEN IF
+lv0eintrag(text(kennungstext,laengelv))=""THEN ungueltigesergebnis(
+kennungsugruppe)ELSE sugruppenausbitleiste(lv1eintrag(zugriffszeilelv0))FI
+ELIF kennung=kennungkopplungTHEN sammlebitleisten(text(kennungstext,
+laengekopplung),beginnlvkopplung,bitleiste);sugruppenausbitleiste(bitleiste)
+ELSE ungueltigesergebnis(kennungsugruppe)FI END PROC
+beteiligteschuelergruppen;TEXT PROC schuelergruppenschnittallezeiten(TEXT
+CONST kennung,anwkennungstext1):BITLEISTE VAR bitleiste,stdplbitleiste;TEXT
+VAR allestdpllv:="",gesamtlv:="",jgst:="",kopplung:="",stdpllv:="",stdplkopp
+:="",stdpljgst:="",schuelergruppen:="",jgstzurnull:=trenner,verfplan:="",
+schgrjgst:="",fehler:=letztestunde*fehlerzeichen;TEXT VAR kennungstext1:="";
+INT VAR zeit,anfangeintrag,laengeallestdpllv,ij,schgrindex;BOOL VAR schnitt:=
+FALSE ;IF kennung=kennunglvTHEN kennungstext1:=text(anwkennungstext1,laengelv
+);gesamtlv:=lv0eintrag(kennungstext1);IF gesamtlv=""THEN LEAVE
+schuelergruppenschnittallezeitenWITH fehlerELSE jgst:=text(gesamtlv,
+laengejgst);kopplung:=kopplungderlv(gesamtlv);bitleiste:=lv1eintrag(
+zugriffszeilelv0);FI ELIF kennung=kennungkopplungTHEN kennungstext1:=text(
+anwkennungstext1,laengekopplung);jgst:=jgstzukopplung(kennungstext1);kopplung
+:=kennungstext1;IF jgst=""THEN LEAVE schuelergruppenschnittallezeitenWITH
+fehlerELSE sammlebitleisten(kennungstext1,beginnlvkopplung,bitleiste)FI ELSE
+LEAVE schuelergruppenschnittallezeitenWITH fehlerFI ;IF jgst="00"THEN
+bildejgstzurnullFI ;FOR zeitFROM erstestundeUPTO letztestundeREP allestdpllv
+:=stuplanzeile(zeit);laengeallestdpllv:=length(allestdpllv);IF
+laengeallestdpllv>laengejgstTHEN schnitt:=FALSE ;
+pruefeallestdplanlvaufschnitt;IF schnittTHEN verfplanCAT einsELSE verfplan
+CAT nullFI ;ELSE verfplanCAT nullFI ;PER ;verfplan.bildejgstzurnull:
+schuelergruppen:=beteiligteschuelergruppen(kennung,kennungstext1);FOR ijFROM
+1UPTO length(schuelergruppen)DIV laengesugruppeREP schgrindex:=(ij-1)*
+laengesugruppe;schgrjgst:=subtext(schuelergruppen,schgrindex+1,schgrindex+2);
+IF pos(jgstzurnull,trenner+schgrjgst+trenner)=0THEN jgstzurnullCAT schgrjgst;
+jgstzurnullCAT trennerFI PER ;IF length(jgstzurnull)=4THEN jgst:=subtext(
+jgstzurnull,2,3);jgstzurnull:=""FI .pruefeallestdplanlvaufschnitt:
+anfangeintrag:=0;WHILE anfangeintrag<laengeallestdpllvREP stdpllv:=subtext(
+allestdpllv,anfangeintrag+beginnlvjgst,anfangeintrag+endelvbez);stdpljgst:=
+text(stdpllv,laengejgst);IF kennung=kennunglvTHEN IF jgstgleichCAND stdpllv<>
+kennungstext1THEN stdplkopp:=subtext(allestdpllv,anfangeintrag+
+beginnlvkopplung,anfangeintrag+endelvkopplung);IF kopplungsbezunterschiedlich
+THEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste:=lv1eintrag(
+zugriffszeilelv0);IF bitleistenschnittTHEN schnitt:=TRUE ;LEAVE
+pruefeallestdplanlvaufschnittFI ELSE LEAVE schuelergruppenschnittallezeiten
+WITH fehlerFI ;FI ;FI ;ELSE IF jgstgleichTHEN stdplkopp:=subtext(allestdpllv,
+anfangeintrag+beginnlvkopplung,anfangeintrag+endelvkopplung);IF
+kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste
+:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN schnitt:=TRUE ;LEAVE
+pruefeallestdplanlvaufschnittFI ELSE LEAVE schuelergruppenschnittallezeiten
+WITH fehlerFI ;FI ;FI ;FI ;anfangeintrag:=anfangeintrag+laengestuplaneintrag
+PER .jgstgleich:jgst=stdpljgstCOR stdpljgst="00"COR pos(jgstzurnull,trenner+
+stdpljgst+trenner)>0.kopplungsbezunterschiedlich:kopplung<>stdplkopp.
+bitleistenschnitt:gibtesgemeinsamesugruppen(bitleiste,stdplbitleiste).END
+PROC schuelergruppenschnittallezeiten;BOOL PROC schuelergruppenschnittbeizeit
+(INT CONST anwzeit,TEXT CONST kennung,anwkennungstext1,anwkennungstext2):
+BITLEISTE VAR bitleiste,stdplbitleiste;TEXT VAR allestdpllv:="",gesamtlv:="",
+jgst:="",kopplung:="",stdpllv:="",stdplkopp:="",stdpljgst:="",schgrjgst:="",
+schuelergruppen:="",jgstzurnull:=trenner;TEXT VAR kennungstext1:="",
+kennungstext2:="";INT VAR zeit:=konvertierezeit(anwzeit),anfangeintrag,
+laengeallestdpllv,ij,schgrindex;IF zeit=0THEN LEAVE
+schuelergruppenschnittbeizeitWITH TRUE ELIF kennung=kennunglvTHEN
+kennungstext1:=text(anwkennungstext1,laengelv);IF anwkennungstext2<>""THEN
+kennungstext2:=text(anwkennungstext2,laengelv)FI ;gesamtlv:=lv0eintrag(
+kennungstext1);IF gesamtlv=""THEN LEAVE schuelergruppenschnittbeizeitWITH
+TRUE ELSE jgst:=text(gesamtlv,laengejgst);kopplung:=kopplungderlv(gesamtlv);
+bitleiste:=lv1eintrag(zugriffszeilelv0);FI ELIF kennung=kennungkopplungTHEN
+kennungstext1:=text(anwkennungstext1,laengekopplung);jgst:=jgstzukopplung(
+kennungstext1);kopplung:=kennungstext1;IF jgst=""THEN LEAVE
+schuelergruppenschnittbeizeitWITH TRUE ELSE sammlebitleisten(kennungstext1,
+beginnlvkopplung,bitleiste)FI ELSE LEAVE schuelergruppenschnittbeizeitWITH
+TRUE FI ;allestdpllv:=stuplanzeile(zeit);laengeallestdpllv:=length(
+allestdpllv);IF laengeallestdpllv<laengejgstTHEN LEAVE
+schuelergruppenschnittbeizeitWITH FALSE FI ;IF jgst="00"THEN bildejgstzurnull
+FI ;anfangeintrag:=0;WHILE anfangeintrag<laengeallestdpllvREP stdpllv:=
+subtext(allestdpllv,anfangeintrag+beginnlvjgst,anfangeintrag+endelvbez);
+stdpljgst:=text(stdpllv,laengejgst);IF kennung=kennunglvTHEN IF jgstgleich
+CAND stdpllv<>kennungstext1CAND stdpllv<>kennungstext2THEN stdplkopp:=subtext
+(allestdpllv,anfangeintrag+beginnlvkopplung,anfangeintrag+endelvkopplung);IF
+kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste
+:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN LEAVE
+schuelergruppenschnittbeizeitWITH TRUE FI ELSE LEAVE
+schuelergruppenschnittbeizeitWITH TRUE FI ;FI ;FI ;ELSE IF jgstgleichTHEN
+stdplkopp:=subtext(allestdpllv,anfangeintrag+beginnlvkopplung,anfangeintrag+
+endelvkopplung);IF kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>""
+THEN stdplbitleiste:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN
+LEAVE schuelergruppenschnittbeizeitWITH TRUE FI ELSE LEAVE
+schuelergruppenschnittbeizeitWITH TRUE FI ;FI ;FI ;FI ;anfangeintrag:=
+anfangeintrag+laengestuplaneintragPER ;FALSE .bildejgstzurnull:
+schuelergruppen:=beteiligteschuelergruppen(kennung,kennungstext1);FOR ijFROM
+1UPTO length(schuelergruppen)DIV laengesugruppeREP schgrindex:=(ij-1)*
+laengesugruppe;schgrjgst:=subtext(schuelergruppen,schgrindex+1,schgrindex+2);
+IF pos(jgstzurnull,trenner+schgrjgst+trenner)=0THEN jgstzurnullCAT schgrjgst;
+jgstzurnullCAT trennerFI PER ;IF length(jgstzurnull)=4THEN jgst:=subtext(
+jgstzurnull,2,3);jgstzurnull:=""FI .jgstgleich:jgst=stdpljgstCOR stdpljgst=
+"00"COR pos(jgstzurnull,trenner+stdpljgst+trenner)>0.
+kopplungsbezunterschiedlich:kopplung<>stdplkopp.bitleistenschnitt:
+gibtesgemeinsamesugruppen(bitleiste,stdplbitleiste).END PROC
+schuelergruppenschnittbeizeit;BOOL PROC schuelergruppenschnittbeizeit(INT
+CONST anwzeit,TEXT CONST kennung,anwkennungstext1,anwkennungstext2,TEXT VAR
+lv,sugruppen):BITLEISTE VAR bitleiste,stdplbitleiste;TEXT VAR allestdpllv,
+gesamtlv,jgst,kopplung,stdpllv,stdplkopp,stdpljgst:="",schgrjgst:="",
+schuelergruppen:="",jgstzurnull:=trenner;TEXT VAR kennungstext1:="",
+kennungstext2:="";INT VAR zeit:=konvertierezeit(anwzeit),anfangeintrag,
+laengeallestdpllv,ij,schgrindex;lv:="";sugruppen:="";IF zeit=0THEN LEAVE
+schuelergruppenschnittbeizeitWITH TRUE ELIF kennung=kennunglvTHEN
+kennungstext1:=text(anwkennungstext1,laengelv);IF anwkennungstext2<>""THEN
+kennungstext2:=text(anwkennungstext2,laengelv)FI ;gesamtlv:=lv0eintrag(
+kennungstext1);IF gesamtlv=""THEN LEAVE schuelergruppenschnittbeizeitWITH
+TRUE ELSE jgst:=text(gesamtlv,laengejgst);kopplung:=kopplungderlv(gesamtlv);
+bitleiste:=lv1eintrag(zugriffszeilelv0);FI ELIF kennung=kennungkopplungTHEN
+kennungstext1:=text(anwkennungstext1,laengekopplung);jgst:=jgstzukopplung(
+kennungstext1);kopplung:=kennungstext1;IF jgst=""THEN LEAVE
+schuelergruppenschnittbeizeitWITH TRUE ELSE sammlebitleisten(kennungstext1,
+beginnlvkopplung,bitleiste)FI ELSE LEAVE schuelergruppenschnittbeizeitWITH
+TRUE FI ;allestdpllv:=stuplanzeile(zeit);laengeallestdpllv:=length(
+allestdpllv);IF laengeallestdpllv<laengejgstTHEN LEAVE
+schuelergruppenschnittbeizeitWITH FALSE FI ;IF jgst="00"THEN bildejgstzurnull
+FI ;anfangeintrag:=0;WHILE anfangeintrag<laengeallestdpllvREP stdpllv:=
+subtext(allestdpllv,anfangeintrag+beginnlvjgst,anfangeintrag+endelvbez);
+stdpljgst:=text(stdpllv,laengejgst);IF kennung=kennunglvTHEN IF jgstgleich
+CAND stdpllv<>kennungstext1CAND stdpllv<>kennungstext2THEN stdplkopp:=subtext
+(allestdpllv,anfangeintrag+beginnlvkopplung,anfangeintrag+endelvkopplung);IF
+kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste
+:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN lv:=stdpllv;sugruppen
+:=sugruppenausbitleiste(bitleistegemeinsamesugruppen(stdplbitleiste,bitleiste
+));LEAVE schuelergruppenschnittbeizeitWITH TRUE FI ELSE LEAVE
+schuelergruppenschnittbeizeitWITH TRUE FI ;FI ;FI ;ELSE IF jgstgleichTHEN
+stdplkopp:=subtext(allestdpllv,anfangeintrag+beginnlvkopplung,anfangeintrag+
+endelvkopplung);IF kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>""
+THEN stdplbitleiste:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN lv
+:=stdpllv;sugruppen:=sugruppenausbitleiste(bitleistegemeinsamesugruppen(
+stdplbitleiste,bitleiste));LEAVE schuelergruppenschnittbeizeitWITH TRUE FI
+ELSE LEAVE schuelergruppenschnittbeizeitWITH TRUE FI ;FI ;FI ;FI ;
+anfangeintrag:=anfangeintrag+laengestuplaneintragPER ;FALSE .bildejgstzurnull
+:schuelergruppen:=beteiligteschuelergruppen(kennung,kennungstext1);FOR ij
+FROM 1UPTO length(schuelergruppen)DIV laengesugruppeREP schgrindex:=(ij-1)*
+laengesugruppe;schgrjgst:=subtext(schuelergruppen,schgrindex+1,schgrindex+2);
+IF pos(jgstzurnull,trenner+schgrjgst+trenner)=0THEN jgstzurnullCAT schgrjgst;
+jgstzurnullCAT trennerFI PER ;IF length(jgstzurnull)=4THEN jgst:=subtext(
+jgstzurnull,2,3);jgstzurnull:=""FI .jgstgleich:jgst=stdpljgstCOR stdpljgst=
+"00"COR pos(jgstzurnull,trenner+stdpljgst+trenner)>0.
+kopplungsbezunterschiedlich:kopplung<>stdplkopp.bitleistenschnitt:
+gibtesgemeinsamesugruppen(bitleiste,stdplbitleiste).END PROC
+schuelergruppenschnittbeizeit;BOOL PROC gemeinsameschuelergruppen(TEXT CONST
+kennung1,akennungstext1,kennung2,akennungstext2):BITLEISTE VAR bitleiste1,
+bitleiste2;TEXT VAR kennungstext1:="",kennungstext2:="";IF kennung1=kennunglv
+THEN kennungstext1:=text(akennungstext1,laengelv);IF lv0eintrag(kennungstext1
+)=""THEN LEAVE gemeinsameschuelergruppenWITH TRUE ELSE bitleiste1:=lv1eintrag
+(zugriffszeilelv0)FI ELIF kennung1=kennungkopplungTHEN kennungstext1:=text(
+akennungstext1,laengekopplung);sammlebitleisten(kennungstext1,
+beginnlvkopplung,bitleiste1);ELSE LEAVE gemeinsameschuelergruppenWITH TRUE
+FI ;IF kennung2=kennunglvTHEN kennungstext2:=text(akennungstext2,laengelv);
+IF lv0eintrag(kennungstext2)=""THEN LEAVE gemeinsameschuelergruppenWITH TRUE
+ELSE bitleiste2:=lv1eintrag(zugriffszeilelv0)FI ELIF kennung2=kennungkopplung
+THEN kennungstext2:=text(akennungstext2,laengekopplung);sammlebitleisten(
+kennungstext2,beginnlvkopplung,bitleiste2);ELSE LEAVE
+gemeinsameschuelergruppenWITH TRUE FI ;gibtesgemeinsamesugruppen(bitleiste1,
+bitleiste2)END PROC gemeinsameschuelergruppen;TEXT PROC lvderschuelergruppe(
+TEXT CONST anwsugrup):INT VAR i,folgejgst:=5;TEXT VAR lvmitsugrup:="",
+aufberjgst:=formatjgst(anwsugrup),sugrup:=text(anwsugrup,laengesugruppe);
+BITLEISTE VAR bitleiste:=sugrupurleiste;IF pos(klstjgst,trenner+compress(
+sugrup)+trenner)>0COR aufberjgst="00"COR schuelergruppeTHEN betrachtelvELSE
+ungueltigesergebnis(kennunglv)FI .betrachtelv:bitleiste:=sg1eintrag(sugrup);
+lvjgstnullanfang:=1;lvjgstnullende:=-1;WHILE lvjgstnullende=-1CAND folgejgst<
+14REP lvjgstnullende:=erstezeileindatei(lvdatei,formatjgst(text(folgejgst)),1
+,beginnlvjgst)-1;folgejgstINCR 1PER ;IF formatjgst(anwsugrup)<>"00"THEN
+lvsugrupjgstanfang:=erstezeileindatei(lvdatei,aufberjgst,1,beginnlvjgst);IF
+int(sugrup)=jgstdreizehnTHEN lvsugrupjgstende:=anzlv;ELSE lvsugrupjgstende:=
+erstezeileindatei(lvdatei,formatjgst(text(int(sugrup)+1)),lvsugrupjgstanfang,
+beginnlvjgst);FI ;IF lvsugrupjgstanfang=0THEN lvsugrupjgstanfang:=
+lvsugrupjgstende+1FI ELSE lvsugrupjgstanfang:=1;lvsugrupjgstende:=0FI ;FOR i
+FROM lvjgstnullanfangUPTO lvjgstnullendeREP IF
+bitleistenvergleichgemeinsamesugruppenTHEN lvmitsugrupCAT text(lv0eintrag(i),
+laengelv)FI PER ;FOR iFROM lvsugrupjgstanfangUPTO lvsugrupjgstendeREP IF
+bitleistenvergleichgemeinsamesugruppenTHEN lvmitsugrupCAT text(lv0eintrag(i),
+laengelv)FI PER ;lvmitsugrup.bitleistenvergleichgemeinsamesugruppen:
+gibtesgemeinsamesugruppen(bitleiste,lv1eintrag(i)).schuelergruppe:toline(
+sugrupdatei,1);col(sugrupdatei,1);WHILE NOT eof(sugrupdatei)REP downety(
+sugrupdatei,sugrup);IF col(sugrupdatei)=1THEN LEAVE schuelergruppeWITH TRUE
+ELSE positionierenFI ;PER ;FALSE .positionieren:col(sugrupdatei,col(
+sugrupdatei)+1).END PROC lvderschuelergruppe;TEXT PROC allelvmit(TEXT CONST
+kennung,anwkennungstext):TEXT VAR lvmit:="",lv:="",kennungstext:="";INT VAR
+richtigepos;IF kennung=kennungparapheTHEN kennungstext:=text(anwkennungstext,
+laengeparaphe);richtigepos:=stuplanposparapheELIF kennung=kennungkopplung
+THEN kennungstext:=text(anwkennungstext,laengekopplung);richtigepos:=
+stuplanposkopplungELSE LEAVE allelvmitWITH ungueltigesergebnis(kennunglv)FI ;
+toline(lvdatei,1);col(lvdatei,1);WHILE NOT eof(lvdatei)REP downety(lvdatei,
+kennungstext);IF col(lvdatei)=richtigeposCAND NOT eof(lvdatei)THEN readrecord
+(lvdatei,lv);lvmitCAT text(lv,laengelv)FI ;positionierenPER ;lvmit.
+positionieren:col(lvdatei,col(lvdatei)+1).END PROC allelvmit;BOOL PROC
+lvgeplant(INT CONST zeit,TEXT CONST lehrveranstaltung):INT CONST std:=
+konvertierezeit(zeit);TEXT VAR eintrag:="";IF std=0THEN TRUE ELSE eintrag:=
+stuplanzeile(std);instuplanzeile(eintrag,text(lehrveranstaltung,laengelv),
+stuplanposjgst,letzteposstuplanzeile)FI END PROC lvgeplant;TEXT PROC
+geplantelvfuer(INT CONST zeit,TEXT CONST kennung,anwkennungstext):INT VAR std
+:=konvertierezeit(zeit),poslv,richtigepos;TEXT VAR kennungstext:="";IF std=0
+THEN LEAVE geplantelvfuerWITH ungueltigesergebnis(kennunglv)ELIF kennung=
+kennungparapheTHEN kennungstext:=text(anwkennungstext,laengeparaphe);
+richtigepos:=stuplanposparapheELIF kennung=kennungraumTHEN kennungstext:=text
+(anwkennungstext,laengeraum);richtigepos:=stuplanposraumELSE LEAVE
+geplantelvfuerWITH ungueltigesergebnis(kennunglv)FI ;IF instuplanzeile(
+stuplanzeile(std),kennungstext,richtigepos,letzteposstuplanzeile)THEN
+holentsprlvELSE ""FI .holentsprlv:poslv:=letzteposstuplanzeile-richtigepos+1;
+subtext(stuplanzeile(std),poslv,poslv+laengelv-1).END PROC geplantelvfuer;
+TEXT PROC allezeitenvon(TEXT CONST kennung,anwkennungstext):INT VAR i,
+richtigepos;TEXT VAR verfplan:="",kennungstext:="";IF kennung=kennungparaphe
+THEN kennungstext:=text(anwkennungstext,laengeparaphe);richtigepos:=
+stuplanposparapheELIF kennung=kennunglvTHEN kennungstext:=text(
+anwkennungstext,laengelv);richtigepos:=stuplanposjgstELIF kennung=kennungraum
+THEN kennungstext:=text(anwkennungstext,laengeraum);richtigepos:=
+stuplanposraumELIF kennung=kennungkopplungTHEN kennungstext:=text(
+anwkennungstext,laengekopplung);richtigepos:=stuplanposkopplungELSE LEAVE
+allezeitenvonWITH letztestunde*fehlerzeichenFI ;FOR iFROM erstestundeUPTO
+letztestundeREP IF instuplanzeile(stuplanzeile(i),kennungstext,richtigepos,
+letzteposstuplanzeile)THEN verfplanCAT einsELSE verfplanCAT nullFI PER ;
+verfplanEND PROC allezeitenvon;TEXT PROC datenderzeit(INT CONST zeit,TEXT
+CONST kennung):INT VAR std:=konvertierezeit(zeit),poseintrag,laengeeintrag,
+objektlaenge,objektbeginn;TEXT VAR eintrag:="",ausgabe:="";IF kennung=
+kennunglvTHEN objektlaenge:=laengelv;objektbeginn:=stuplanposjgstELIF kennung
+=kennungkopplungTHEN objektlaenge:=laengekopplung;objektbeginn:=
+stuplanposkopplungELIF kennung=kennungparapheTHEN objektlaenge:=laengeparaphe
+;objektbeginn:=stuplanposparapheELIF kennung=kennungraumTHEN objektlaenge:=
+laengeraum;objektbeginn:=stuplanposraumELSE LEAVE datenderzeitWITH
+fehlerzeichenFI ;IF std=0THEN LEAVE datenderzeitWITH ungueltigesergebnis(
+kennung)FI ;toline(stuplandatei,std);readrecord(stuplandatei,eintrag);ausgabe
+:="";poseintrag:=objektbeginn;laengeeintrag:=length(eintrag);WHILE poseintrag
+<laengeeintragREP ausgabeCAT subtext(eintrag,poseintrag,poseintrag+
+objektlaenge-1);poseintrag:=poseintrag+laengestuplaneintragPER ;ausgabeEND
+PROC datenderzeit;PROC planeintraglesen(INT CONST zeit,TEXT CONST kennung,
+anwkennungstext,TEXT VAR lehrveranstaltung,raum,paraphe):INT VAR std:=
+konvertierezeit(zeit),poslv,richtigepos,stackpos,anfangeintrag,
+laengeallestdpllv;TEXT VAR kennungstext:="",stdpllv,allestdpllv,jgstdersugrup
+,jgstderlv;BITLEISTE VAR sugrupbitleiste,stdplbitleiste;IF std=0THEN
+lehrveranstaltung:=ungueltigesergebnis(kennunglv);raum:="";paraphe:="";LEAVE
+planeintraglesenELIF kennung=kennunglvTHEN kennungstext:=text(anwkennungstext
+,laengelv);richtigepos:=stuplanposjgstELIF kennung=kennungparapheTHEN
+kennungstext:=text(anwkennungstext,laengeparaphe);richtigepos:=
+stuplanposparapheELIF kennung=kennungraumTHEN kennungstext:=text(
+anwkennungstext,laengeraum);richtigepos:=stuplanposraumELIF kennung=
+kennungsugruppeTHEN jgstdersugrup:=jgstaufber(text(anwkennungstext,laengejgst
+));kennungstext:=text(jgstdersugrup+subtext(anwkennungstext,laengejgst+1),
+laengesugruppe)ELSE fehlerbehandlungFI ;lehrveranstaltung:="";raum:="";
+paraphe:="";IF kennung<>kennungsugruppeTHEN IF instuplanzeile(stuplanzeile(
+std),kennungstext,richtigepos,letzteposstuplanzeile)THEN holentsprlvFI ELSE
+holelvderzeit;ermittlebitleiste;vergleichelvmitbitleisteFI .holentsprlv:poslv
+:=letzteposstuplanzeile-richtigepos+1;lehrveranstaltung:=subtext(stuplanzeile
+(std),poslv,poslv+laengestuplaneintrag-1);raum:=subtext(lehrveranstaltung,
+stuplanposraum);paraphe:=subtext(lehrveranstaltung,stuplanposparaphe,
+stuplanposparaphe+laengeparaphe-1);lehrveranstaltung:=text(lehrveranstaltung,
+laengelv).ermittlebitleiste:stackpos:=pos(behandeltesugruppen,trenner+
+kennungstext+trenner);IF bitleistenochzuermittelnTHEN sugrupbitleiste:=
+sg1eintrag(kennungstext);IF anzbitleisten<maxsugruppenTHEN sugruppenstack(
+anzbitleisten+1):=sugrupbitleiste;behandeltesugruppenCAT kennungstext;
+behandeltesugruppenCAT trenner;anzbitleistenINCR 1FI ELSE sugrupbitleiste:=
+sugruppenstack((stackpos+6)DIV 7)FI .bitleistenochzuermitteln:stackpos=0.
+holelvderzeit:allestdpllv:=stuplanzeile(std);laengeallestdpllv:=length(
+allestdpllv);IF laengeallestdpllv<laengejgstTHEN LEAVE planeintraglesenFI .
+vergleichelvmitbitleiste:anfangeintrag:=0;WHILE anfangeintrag<
+laengeallestdpllvREP stdpllv:=subtext(allestdpllv,anfangeintrag+beginnlvjgst,
+anfangeintrag+endelvbez);jgstderlv:=text(stdpllv,laengejgst);IF
+jgstgleichodernullnullTHEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste:=
+lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN lehrveranstaltungCAT
+stdpllv;raumCAT subtext(allestdpllv,anfangeintrag+stuplanposraum,
+anfangeintrag+laengestuplaneintrag);parapheCAT subtext(allestdpllv,
+anfangeintrag+stuplanposparaphe,anfangeintrag+stuplanposraum-1)FI FI ;FI ;
+anfangeintrag:=anfangeintrag+laengestuplaneintragPER .jgstgleichodernullnull:
+jgstdersugrup=jgstderlvCOR jgstderlv="00".bitleistenschnitt:
+gibtesgemeinsamesugruppen(sugrupbitleiste,stdplbitleiste).fehlerbehandlung:
+lehrveranstaltung:=ungueltigesergebnis(kennunglv);raum:="";paraphe:="";LEAVE
+planeintraglesen.END PROC planeintraglesen;PROC planeintragvornehmen(INT
+CONST zeit,TEXT CONST anwlehrveranstaltung,anwraum,BOOL VAR ok):INT VAR std:=
+konvertierezeit(zeit);TEXT VAR lv,eintrag,neuereintrag,lehrveranstaltung:=
+text(anwlehrveranstaltung,laengelv),raum:=text(anwraum,laengeraum);IF std=0
+THEN ok:=FALSE ;LEAVE planeintragvornehmenFI ;IF raum<>leereraumangabeAND (
+NOT bezeichnungzulaessig(kennungraum,raum))THEN ok:=FALSE ;LEAVE
+planeintragvornehmenFI ;lv:=lv0eintrag(lehrveranstaltung);IF lv=""THEN ok:=
+FALSE ;ELIF instuplanzeile(stuplanzeile(std),lehrveranstaltung,stuplanposjgst
+,letzteposstuplanzeile)THEN holstuplaneintrag;substituierelvELSE
+holstuplaneintrag;erweitereumlvFI .holstuplaneintrag:ok:=TRUE ;toline(
+stuplandatei,std);readrecord(stuplandatei,eintrag).erweitereumlv:eintragCAT
+text(lv,laengelv+laengekopplung+laengeparaphe);eintragCAT text(raum,
+laengeraum);writerecord(stuplandatei,eintrag).substituierelv:neuereintrag:=
+text(eintrag,letzteposstuplanzeile-1);neuereintragCAT text(lv,laengelv+
+laengekopplung+laengeparaphe);neuereintragCAT text(raum,laengeraum);
+neuereintragCAT subtext(eintrag,letzteposstuplanzeile+laengestuplaneintrag);
+writerecord(stuplandatei,neuereintrag).END PROC planeintragvornehmen;PROC
+planeintragloeschen(INT CONST zeit,TEXT CONST lehrveranstaltung,BOOL VAR ok):
+INT VAR std:=konvertierezeit(zeit);TEXT VAR eintrag,neuereintrag;IF std=0
+THEN ok:=FALSE ELIF instuplanzeile(stuplanzeile(std),text(lehrveranstaltung,
+laengelv),stuplanposjgst,letzteposstuplanzeile)THEN holstuplaneintrag;
+loescheeintragELSE ok:=FALSE FI .holstuplaneintrag:ok:=TRUE ;toline(
+stuplandatei,std);readrecord(stuplandatei,eintrag).loescheeintrag:
+neuereintrag:=text(eintrag,letzteposstuplanzeile-1);neuereintragCAT subtext(
+eintrag,letzteposstuplanzeile+laengestuplaneintrag);writerecord(stuplandatei,
+neuereintrag).END PROC planeintragloeschen;PROC resetbitleiste(BITLEISTE VAR
+bitleiste):FOR iFROM 1UPTO leistenlaengeREP FOR jFROM 0UPTO bits-1REP
+resetbit(bitleiste(i),j)PER PER ;END PROC resetbitleiste;PROC
+loeschdatenraeume:forget(lvnulldatenraum,quiet);forget(sgnulldatenraum,quiet)
+;forget(lveinsdatenraum,quiet);forget(sgeinsdatenraum,quiet)END PROC
+loeschdatenraeume;OP :=(BITLEISTE VAR eins,BITLEISTE CONST zwei):INT VAR i;
+FOR iFROM 1UPTO leistenlaengeREP eins(i):=zwei(i)PER END OP :=;PROC
+schreibesugrupundklgrinds:zz:=0;positioniersugrup;holsugrupdaten;IF zz=0THEN
+LEAVE schreibesugrupundklgrindsFI ;anzsugrup:=zz;positionierklgr;holklgrdaten
+;IF anzsugrup=-1THEN LEAVE schreibesugrupundklgrindsFI ;anzsugrupundklgr:=zz;
+FOR iFROM jgstfuenfUPTO jgstdreizehnREP toline(sugrupdatei,lines(sugrupdatei)
++1);schreibjgstindateiPER .positioniersugrup:inittupel(dnraktschuelergruppen)
+;putwert(fnrsgrpsj,gewschulj);putwert(fnrsgrphj,gewhalbj);putintwert(
+fnrsgrpjgst,0).positionierklgr:inittupel(dnrklassengruppen);first(
+dnrklassengruppen).holsugrupdaten:IF records(dnraktschuelergruppen)=0.0THEN
+LEAVE schreibesugrupundklgrindsFI ;statleseschleife(dnraktschuelergruppen,
+gewschulj,gewhalbj,fnrsgrpsj,fnrsgrphj,PROC sugrupinds).holklgrdaten:IF
+records(dnrklassengruppen)=0.0THEN LEAVE holklgrdatenFI ;statleseschleife(
+dnrklassengruppen,"","",fnrkgklassengrp,fnrkgschuelergrp,PROC klgrinds).
+schreibjgstindatei:putds(sugrupdatei,text(formatjgst(text(i)),laengesugruppe)
+);schreibbitleisteinds.schreibbitleisteinds:sugrupleiste:=sugrupurleiste;
+ermittlebitleistejgstodersugrupklgr(formatjgst(text(i,laengejgst)));
+sgbitleisten(zz+1):=sugrupleiste;zzINCR 1.END PROC schreibesugrupundklgrinds;
+PROC schreibelvinds:anzlv:=0;sucheerstensatz;schreibsugrupleiste;IF zz<>0
+THEN anzlv:=zz-1FI .sucheerstensatz:IF records(dnrlehrveranstaltungen)=0.0
+THEN LEAVE schreibelvindsFI ;inittupel(dnrlehrveranstaltungen);putwert(
+fnrlvsj,gewschulj);putwert(fnrlvhj,gewhalbj);putintwert(fnrlvjgst,jgstnull);
+putwert(fnrlvfachkennung,"");search(dnrlehrveranstaltungen,FALSE ).
+schreibsugrupleiste:zz:=0;statleseschleife(dnrlehrveranstaltungen,gewschulj,
+gewhalbj,fnrlvsj,fnrlvhj,PROC sugrupleisteinds).END PROC schreibelvinds;PROC
+sugrupleisteinds(BOOL VAR b):IF wert(fnrlvsj)=gewschuljCAND wert(fnrlvhj)=
+gewhalbjCAND dbstatus=0CAND zz<2499THEN klgreintrag:=FALSE ;sugrupleiste:=
+sugrupurleiste;analysiereklgreinerlv(fnrlvklgrp1);IF anzsugrup=-1THEN b:=
+TRUE ;LEAVE sugrupleisteindsELSE analysiereklgreinerlv(fnrlvklgrp2);IF
+anzsugrup=-1THEN b:=TRUE ;LEAVE sugrupleisteindsELSE analysiereklgreinerlv(
+fnrlvklgrp3);IF anzsugrup=-1THEN b:=TRUE ;LEAVE sugrupleisteindsELSE
+analysiereklgreinerlv(fnrlvklgrp4);FI ;FI ;FI ;IF NOT klgreintragTHEN
+ermittlebitleistejgst(wert(fnrlvjgst));FI ;schreiblvindatei;
+schreibsugrupleisteindsELSE b:=TRUE FI .schreiblvindatei:dateieintrag:="";
+dateieintragCAT formatjgst(wert(fnrlvjgst));dateieintragCAT text(wert(
+fnrlvfachkennung),laengefachkennung);dateieintragCAT text(wert(fnrlvkopplung)
+,laengekopplung);dateieintragCAT text(wert(fnrlvparaphe),laengeparaphe);
+dateieintragCAT text(wert(fnrlvwochenstd),laengewochenstd);dateieintragCAT
+text(wert(fnrlvraumgrp1),laengeraum);dateieintragCAT text(wert(fnrlvraumgrp2)
+,laengeraum);putds(lvdatei,dateieintrag).schreibsugrupleisteinds:lvbitleisten
+(zz+1):=sugrupleiste;zzINCR 1;.END PROC sugrupleisteinds;PROC
+analysiereklgreinerlv(INT CONST lvklgrfeld):IF wert(lvklgrfeld)<>""THEN IF
+istjgst(wert(lvklgrfeld))THEN ermittlebitleistejgst(wert(lvklgrfeld));ELIF
+istklgr(wert(lvklgrfeld))THEN ermittlebitleistejgstodersugrupklgr(wert(
+lvklgrfeld));ELSE ermittlebitleistejgstodersugrupklgr(formatjgst(wert(
+fnrlvjgst))+wert(lvklgrfeld));IF anzsugrup=-1THEN LEAVE analysiereklgreinerlv
+FI ;FI ;klgreintrag:=TRUE FI ;END PROC analysiereklgreinerlv;PROC sugrupinds(
+BOOL VAR b):IF wert(fnrsgrpsj)=gewschuljCAND wert(fnrsgrphj)=gewhalbjCAND
+dbstatus=0THEN sugrupleiste:=sugrupurleiste;putds(sugrupdatei,formatjgst(wert
+(fnrsgrpjgst))+text(wert(fnrsgrpkennung),laengeklagruppe));IF zz<127THEN
+schreibesugrupleisteFI ;sgbitleisten(zz+1):=sugrupleiste;zzINCR 1;ELIF wert(
+fnrsgrpsj)>gewschuljCOR wert(fnrsgrphj)>gewhalbjCOR dbstatus<>0COR zz=127
+THEN b:=TRUE FI .schreibesugrupleiste:setzebit(zz).END PROC sugrupinds;PROC
+klgrinds(BOOL VAR b):IF dbstatus=0THEN toline(sugrupdatei,lines(sugrupdatei)+
+1);plausiklgrCAT wert(fnrkgklassengrp)+trenner;putds(sugrupdatei,text(wert(
+fnrkgklassengrp),laengesugruppe));analysieresugrupen;sgbitleisten(zz+1):=
+sugrupleiste;zzINCR 1ELSE b:=TRUE FI .analysieresugrupen:sugrupleiste:=
+sugrupurleiste;sugruppeneinerklgr:=wert(fnrkgschuelergrp);FOR kFROM 1UPTO
+LENGTH sugruppeneinerklgrDIV laengesugruppeREP
+ermittlebitleistejgstodersugrupklgr(subtext(sugruppeneinerklgr,(k-1)*
+laengesugruppe+1,k*laengesugruppe));IF anzsugrup=-1THEN b:=TRUE ;LEAVE
+klgrindsFI ;PER .END PROC klgrinds;PROC ermittlebitleistejgstodersugrupklgr(
+TEXT CONST klgrteil):TEXT VAR compklgrteil:=compress(klgrteil);IF istjgst(
+compklgrteil)THEN stellebitleistenjgstELSE stellebitleistesugrupoderklgrFI .
+stellebitleistesugrupoderklgr:IF istklgr(compklgrteil)THEN toline(sugrupdatei
+,anzsugrup);ELSE toline(sugrupdatei,1);FI ;col(sugrupdatei,1);downety(
+sugrupdatei,compklgrteil);IF NOT eof(sugrupdatei)THEN oderbitleisten;LEAVE
+stellebitleistesugrupoderklgrELSE anzsugrup:=-1;LEAVE
+ermittlebitleistejgstodersugrupklgrFI .stellebitleistenjgst:toline(
+sugrupdatei,1);col(sugrupdatei,1);WHILE NOT eof(sugrupdatei)REP downety(
+sugrupdatei,formatjgst(klgrteil));IF col(sugrupdatei)=1CAND lineno(
+sugrupdatei)<=anzsugrupTHEN oderbitleistenFI ;positionierenPER .positionieren
+:col(sugrupdatei,col(sugrupdatei)+1).oderbitleisten:BITLEISTE VAR bitleiste:=
+sgbitleisten(lineno(sugrupdatei));FOR jFROM 1UPTO leistenlaengeREP
+sugrupleiste(j):=sugrupleiste(j)OR bitleiste(j)PER .END PROC
+ermittlebitleistejgstodersugrupklgr;PROC ermittlebitleistejgst(TEXT CONST
+klgrteil):stellebitleistenjgst.stellebitleistenjgst:toline(sugrupdatei,
+anzsugrupundklgr);col(sugrupdatei,1);WHILE NOT eof(sugrupdatei)REP downety(
+sugrupdatei,formatjgst(klgrteil));IF col(sugrupdatei)=1THEN oderbitleistenFI
+;positionierenPER .positionieren:col(sugrupdatei,col(sugrupdatei)+1).
+oderbitleisten:BITLEISTE VAR bitleiste:=sgbitleisten(lineno(sugrupdatei));
+FOR jFROM 1UPTO leistenlaengeREP sugrupleiste(j):=sugrupleiste(j)OR bitleiste
+(j)PER .END PROC ermittlebitleistejgst;BOOL PROC stundenplanbasisaktuell(INT
+VAR fehlerstatus):dserstellungszeit:="";letztedbzeit:="";ermittledszeit;
+ermittledbzeit;vergleichezeit;IF fehlerstatus=0THEN TRUE ELSE FALSE FI .
+ermittledszeit:dserstellungszeit:=erstellungszeitderdatenraeume.
+ermittledbzeit:IF gewhalbj=schulkenndatum(halbj)THEN inittupel(dnrschluessel)
+;putwert(fnrschlschluessel,dbaenderungakt);ELSE inittupel(dnrschluessel);
+putwert(fnrschlschluessel,dbaenderunggepl);FI ;putwert(fnrschlsachgebiet,
+dbaenderung);search(dnrschluessel,TRUE );IF dbstatus<>okTHEN fehlerstatus:=9;
+LEAVE stundenplanbasisaktuellWITH FALSE ELSE letztedbzeit:=wert(
+fnrschllangtext)FI .vergleichezeit:IF dsjahr=dbjahrTHEN pruefmonatELIF dsjahr
+>dbjahrTHEN fehlerstatus:=0ELSE fehlerstatus:=1FI .pruefmonat:IF dsmonat=
+dbmonatTHEN prueftagELIF dsmonat>dbmonatTHEN fehlerstatus:=0ELSE fehlerstatus
+:=1FI .prueftag:IF dstag=dbtagTHEN pruefzeitELIF dstag>dbtagTHEN fehlerstatus
+:=0ELSE fehlerstatus:=1FI .pruefzeit:IF dszeit>=dbzeitTHEN fehlerstatus:=0
+ELSE fehlerstatus:=1FI .dsjahr:subtext(dserstellungszeit,erstellzeitjahr,
+erstellzeitjahr+1).dbjahr:subtext(letztedbzeit,erstellzeitjahr,
+erstellzeitjahr+1).dsmonat:subtext(dserstellungszeit,erstellzeitmonat,
+erstellzeitmonat+1).dbmonat:subtext(letztedbzeit,erstellzeitmonat,
+erstellzeitmonat+1).dstag:text(dserstellungszeit,erstellzeittag+1).dbtag:text
+(letztedbzeit,erstellzeittag+1).dszeit:subtext(dserstellungszeit,
+erstellzeitstdmin).dbzeit:subtext(letztedbzeit,erstellzeitstdmin).END PROC
+stundenplanbasisaktuell;PROC stundenplanbasiserstellen(INT VAR fehlerstatus):
+hilfsdatenerstellen(fehlerstatus);IF fehlerstatus=0THEN toline(stuplandatei,
+letztestunde+1);writerecord(stuplandatei,date+blank+timeofday);FI .END PROC
+stundenplanbasiserstellen;PROC hilfsdatenerstellen(INT VAR fehlerstatus):
+inithilfsdateien;schreibesugrupundklgrinds;IF anzsugrup=-1THEN fehlerstatus:=
+9;forget(sgnulldatenraum,quiet);forget(sgeinsdatenraum,quiet)ELIF anzsugrup=0
+THEN fehlerstatus:=4ELIF anzsugrup>127THEN fehlerstatus:=5;loeschdatenraeume
+ELSE schreibelvinds;IF anzsugrup=-1THEN fehlerstatus:=9;loeschdatenraeume
+ELIF anzlv=0THEN fehlerstatus:=6;loeschdatenraeumeELIF anzlv>2499THEN
+fehlerstatus:=7;loeschdatenraeumeELSE fehlerstatus:=0FI ;FI .inithilfsdateien
+:commanddialogue(FALSE );loeschdatenraeume;commanddialogue(TRUE );#dslv:=new(
+lvnulldatenraum);dssugrup:=new(sgnulldatenraum);commanddialogue(FALSE );
+forget(dslv);forget(dssugrup);commanddialogue(TRUE );#lvdatei:=sequentialfile
+(modify,lvnulldatenraum);sugrupdatei:=sequentialfile(modify,sgnulldatenraum);
+lvbitleisten:=new(lveinsdatenraum);sgbitleisten:=new(sgeinsdatenraum);
+resetbitleiste(sugrupurleiste).END PROC hilfsdatenerstellen;PROC
+datenraeumeankoppeln:IF exists(lvnulldatenraum)THEN lvdatei:=sequentialfile(
+modify,old(lvnulldatenraum))FI ;IF exists(sgnulldatenraum)THEN sugrupdatei:=
+sequentialfile(modify,old(sgnulldatenraum))FI ;IF exists(stuplandatenraum)
+THEN stuplandatei:=sequentialfile(modify,old(stuplandatenraum))FI ;IF exists(
+lveinsdatenraum)THEN lvbitleisten:=old(lveinsdatenraum);FI ;IF exists(
+sgeinsdatenraum)THEN sgbitleisten:=old(sgeinsdatenraum);FI END PROC
+datenraeumeankoppeln;INT PROC zugriffszeilelv0:letzterzugrifflv0END PROC
+zugriffszeilelv0;TEXT PROC lv0eintrag(TEXT CONST lv):TEXT VAR dateieintrag:=
+"";letzterzugrifflv0:=0;dateieintrag:="";toline(lvdatei,1);col(lvdatei,1);
+WHILE NOT eof(lvdatei)REP downety(lvdatei,lv);IF col(lvdatei)=beginnlvbez
+CAND NOT eof(lvdatei)THEN readrecord(lvdatei,dateieintrag);letzterzugrifflv0
+:=lineno(lvdatei);LEAVE lv0eintragWITH dateieintragELSE positionierenFI ;PER
+;"".positionieren:col(lvdatei,col(lvdatei)+1).END PROC lv0eintrag;TEXT PROC
+lv0eintrag(INT CONST index):TEXT VAR dateieintrag:="";toline(lvdatei,index);
+col(lvdatei,1);IF eof(lvdatei)THEN ""ELSE readrecord(lvdatei,dateieintrag);
+dateieintragFI END PROC lv0eintrag;BOOL PROC kopplunginlv0(TEXT CONST
+kopplung):toline(lvdatei,1);col(lvdatei,1);WHILE NOT eof(lvdatei)REP downety(
+lvdatei,kopplung);IF col(lvdatei)=beginnlvkopplungCAND NOT eof(lvdatei)THEN
+LEAVE kopplunginlv0WITH TRUE ELSE positionierenFI ;PER ;FALSE .positionieren:
+col(lvdatei,col(lvdatei)+1).END PROC kopplunginlv0;BOOL PROC sg0eintrag(TEXT
+CONST sg):toline(sugrupdatei,1);col(sugrupdatei,1);WHILE NOT eof(sugrupdatei)
+REP downety(sugrupdatei,sg);IF col(sugrupdatei)=1CAND NOT eof(sugrupdatei)
+CAND lineno(sugrupdatei)<=anzsugrupTHEN LEAVE sg0eintragWITH TRUE ELSE
+positionierenFI ;PER ;FALSE .positionieren:col(sugrupdatei,col(sugrupdatei)+1
+).END PROC sg0eintrag;TEXT PROC sg0eintrag(INT CONST index):dateieintrag:="";
+toline(sugrupdatei,index);col(sugrupdatei,1);IF eof(sugrupdatei)THEN ""ELSE
+readrecord(sugrupdatei,dateieintrag);text(dateieintrag,laengesugruppe)FI END
+PROC sg0eintrag;BITLEISTE PROC sg1eintrag(TEXT CONST anwsugrup):TEXT VAR
+sugrup:=text(anwsugrup,laengesugruppe);toline(sugrupdatei,1);col(sugrupdatei,
+1);WHILE NOT eof(sugrupdatei)REP downety(sugrupdatei,sugrup);IF col(
+sugrupdatei)=1CAND NOT eof(sugrupdatei)THEN LEAVE sg1eintragWITH sgbitleisten
+(lineno(sugrupdatei))ELSE positionierenFI ;PER ;sugrupurleiste.positionieren:
+col(sugrupdatei,col(sugrupdatei)+1).END PROC sg1eintrag;BITLEISTE PROC
+lv1eintrag(INT CONST index):lvbitleisten(index)END PROC lv1eintrag;TEXT PROC
+sugruppenausbitleiste(BITLEISTE CONST bitleiste):sugruppeneinerklgr:="";FOR j
+FROM 1UPTO leistenlaengeREP lowbit:=lowestset(bitleiste(j));IF lowbit<>-1
+THEN FOR kFROM lowbitUPTO bits-1REP IF bit(bitleiste(j),k)THEN
+sugruppeneinerklgrCAT sg0eintrag(k+(j-1)*bits+1)FI PER ;FI ;PER ;
+sugruppeneinerklgrEND PROC sugruppenausbitleiste;BITLEISTE PROC
+bitleisteallesugruppen(BITLEISTE VAR v,BITLEISTE CONST c):BITLEISTE VAR b:=
+sugrupurleiste;FOR jFROM 1UPTO leistenlaengeREP b(j):=v(j)OR c(j)PER ;bEND
+PROC bitleisteallesugruppen;BITLEISTE PROC bitleistegemeinsamesugruppen(
+BITLEISTE CONST v,c):BITLEISTE VAR b:=sugrupurleiste;FOR jFROM 1UPTO
+leistenlaengeREP b(j):=v(j)AND c(j)PER ;bEND PROC
+bitleistegemeinsamesugruppen;BOOL PROC gibtesgemeinsamesugruppen(BITLEISTE
+CONST v,c):BITLEISTE VAR b:=sugrupurleiste;FOR jFROM 1UPTO leistenlaengeREP b
+(j):=v(j)AND c(j);lowbit:=lowestset(b(j));IF lowbit<>-1THEN LEAVE
+gibtesgemeinsamesugruppenWITH TRUE FI ;PER ;FALSE END PROC
+gibtesgemeinsamesugruppen;BITLEISTE PROC bitleistenichtgemeinsamesugruppen(
+BITLEISTE CONST v,c):BITLEISTE VAR b:=sugrupurleiste;FOR jFROM 1UPTO
+leistenlaengeREP b(j):=v(j)XOR c(j)PER ;bEND PROC
+bitleistenichtgemeinsamesugruppen;PROC sammlebitleisten(TEXT CONST
+kennungstext,INT CONST richtigepos,BITLEISTE VAR bitleiste):resetbitleiste(
+bitleiste);toline(lvdatei,1);col(lvdatei,1);WHILE NOT eof(lvdatei)REP downety
+(lvdatei,kennungstext);IF col(lvdatei)=richtigeposCAND NOT eof(lvdatei)THEN
+bitleiste:=bitleisteallesugruppen(bitleiste,lv1eintrag(lineno(lvdatei)));FI ;
+positionieren;PER .positionieren:col(lvdatei,col(lvdatei)+1).END PROC
+sammlebitleisten;TEXT PROC jgstzukopplung(TEXT CONST kennungstext):TEXT VAR
+lv:="";toline(lvdatei,1);col(lvdatei,1);WHILE NOT eof(lvdatei)REP downety(
+lvdatei,kennungstext);IF col(lvdatei)=beginnlvkopplungCAND NOT eof(lvdatei)
+THEN readrecord(lvdatei,lv);LEAVE jgstzukopplungWITH text(lv,laengejgst)FI ;
+positionieren;PER ;"".positionieren:col(lvdatei,col(lvdatei)+1).END PROC
+jgstzukopplung;TEXT PROC ungueltigesergebnis(TEXT CONST kennung):IF kennung=
+kennunglvTHEN ergebnis:=laengelv*fehlerzeichenELIF kennung=kennungzeitOR
+kennung=kennungzugelassenezeitTHEN ergebnis:=laengezeit*fehlerzeichenELIF
+kennung=kennungparapheTHEN ergebnis:=laengeparaphe*fehlerzeichenELIF kennung=
+kennungkopplungTHEN ergebnis:=laengekopplung*fehlerzeichenELIF kennung=
+kennungsugruppeTHEN ergebnis:=laengesugruppe*fehlerzeichenELIF kennung=
+kennungraumOR kennung=kennungwunschraumOR kennung=kennungersatzraumTHEN
+ergebnis:=laengeraum*fehlerzeichenELIF kennung=kennungwochenstdTHEN ergebnis
+:=laengewochenstd*fehlerzeichenELSE ergebnis:=fehlerzeichenFI ;ergebnisEND
+PROC ungueltigesergebnis;PROC raumcat(BOOL VAR b):IF wert(fnrschlsachgebiet)=
+dbraeumeTHEN plausiraeumeCAT text(wert(fnrschlschluessel),laengeraum)+trenner
+;ELIF wert(fnrschlsachgebiet)>dbraeumeCOR dbstatus<>0THEN b:=TRUE FI END
+PROC raumcat;PROC paraphencat(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE
+plausiparaphenCAT text(wert(dnrlehrer+1),laengeparaphe);plausiparaphenCAT
+trennerFI END PROC paraphencat;PROC erstelleplausizeiten(BOOL VAR b):IF wert(
+fnrzrsj)>gewschuljCOR wert(fnrzrhj)<>gewhalbjCOR dbstatus<>0THEN b:=TRUE
+ELSE IF wert(fnrzrkennungteil)=zeitrastersperreTHEN replace(plausizeiten,
+intwert(fnrzrtagstunde),"1")FI ;FI END PROC erstelleplausizeiten;TEXT PROC
+stuplanzeile(INT CONST zeit):INT VAR std:=konvertierezeit(zeit);TEXT VAR
+eintrag:="";IF std=0THEN laengestuplaneintrag*fehlerzeichenELSE toline(
+stuplandatei,std);eintrag:="";readrecord(stuplandatei,eintrag);eintragFI END
+PROC stuplanzeile;BOOL PROC instuplanzeile(TEXT CONST quelle,muster,INT
+CONST richtigepos,INT VAR findpos):INT VAR suchab:=1,aktpos;WHILE pos(quelle,
+muster,suchab)<>0REP aktpos:=pos(quelle,muster,suchab);IF aktposMOD
+laengestuplaneintrag=richtigeposTHEN findpos:=aktpos;LEAVE instuplanzeile
+WITH TRUE ELSE suchab:=aktpos+1FI PER ;FALSE END PROC instuplanzeile;INT
+PROC erstezeileindatei(FILE VAR datei,TEXT CONST muster,INT CONST suchab,
+richtigepos):toline(datei,suchab);col(datei,1);WHILE NOT eof(datei)REP
+downety(datei,muster);IF col(datei)=richtigeposTHEN LEAVE erstezeileindatei
+WITH lineno(datei)FI ;positionierenPER ;0.positionieren:col(datei,col(datei)+
+1).END PROC erstezeileindatei;PROC schreibeerstellungszeit:INT VAR
+fehlerstatus;IF NOT exists(stuplandatenraum)THEN stundenplanerstellen(date+
+blank+timeofday,fehlerstatus)FI END PROC schreibeerstellungszeit;INT PROC
+konvertierezeit(INT CONST tagstd):IF tagstd<1THEN 0ELIF tagstd<=letztestunde
+THEN tagstdELIF tagstd>schultage*100+samstagstdTHEN 0ELIF tagstdMOD 100>
+stdprotagTHEN 0ELIF tagstdMOD 100=0THEN 0ELSE ((tagstdDIV 100)-1)*stdprotag+(
+tagstdMOD 100)FI END PROC konvertierezeit;PROC setzebit(INT CONST bitnr):IF
+bitnrDIV bits+1>leistenlaengeTHEN LEAVE setzebitFI ;setbit(sugrupleiste(bitnr
+DIV bits+1),bitnrMOD bits)END PROC setzebit;BOOL PROC istjgst(TEXT CONST t):
+pos(klstjgst,trenner+t+trenner)>0END PROC istjgst;BOOL PROC istklgr(TEXT
+CONST t):pos(plausiklgr,trenner+t+trenner)>0END PROC istklgr;PROC putds(FILE
+VAR file,TEXT CONST t):insertrecord(file);writerecord(file,t);down(file);END
+PROC putds;TEXT PROC formatjgst(TEXT CONST t):subtext("0"+compress(text(t,
+laengejgst)),length("0"+compress(text(t,laengejgst)))-1)END PROC formatjgst;
+TEXT PROC lvnulldatenraum:lvnull+gewhalbj+punkt+gewschuljEND PROC
+lvnulldatenraum;TEXT PROC lveinsdatenraum:lveins+gewhalbj+punkt+gewschuljEND
+PROC lveinsdatenraum;TEXT PROC sgnulldatenraum:sgnull+gewhalbj+punkt+
+gewschuljEND PROC sgnulldatenraum;TEXT PROC sgeinsdatenraum:sgeins+gewhalbj+
+punkt+gewschuljEND PROC sgeinsdatenraum;TEXT PROC stuplandatenraum:stuplan+
+gewhalbj+punkt+gewschuljEND PROC stuplandatenraum;TEXT PROC bezderlv(TEXT
+CONST lvzeile):subtext(lvzeile,beginnlvbez,endelvbez)END PROC bezderlv;TEXT
+PROC kopplungderlv(TEXT CONST lvzeile):subtext(lvzeile,beginnlvkopplung,
+endelvkopplung)END PROC kopplungderlv;TEXT PROC paraphederlv(TEXT CONST
+lvzeile):subtext(lvzeile,beginnlvparaphe,endelvparaphe)END PROC paraphederlv;
+TEXT PROC wochenstdderlv(TEXT CONST lvzeile):subtext(lvzeile,
+beginnlvwochenstd,endelvwochenstd)END PROC wochenstdderlv;TEXT PROC
+wunschraumderlv(TEXT CONST lvzeile):subtext(lvzeile,beginnlvraumgr1,
+endelvraumgr1)END PROC wunschraumderlv;TEXT PROC ersatzraumderlv(TEXT CONST
+lvzeile):subtext(lvzeile,beginnlvraumgr2,endelvraumgr2)END PROC
+ersatzraumderlv;END PACKET stundenplanschnittstelle
+
diff --git a/app/schulis/2.2.1/src/4.teilstdpl fach lehrer b/app/schulis/2.2.1/src/4.teilstdpl fach lehrer
new file mode 100644
index 0000000..c9b0972
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.teilstdpl fach lehrer
@@ -0,0 +1,124 @@
+PACKET teilstdplfachlehrerDEFINES stdplfachlehrerspezielleteile:LET
+eingangsmaske="ms teilstdpl fach lehrer",maskenanfpos=2,spaltentrenner=":",
+niltext="",blank=" ",komma=",",null=0,ueberschriftenzeilen=2,ausgkopflaenge=2
+,ausgfeldlaenge=1,anzahlderobjekteprobildschirm=17,spalte1fach=4,
+spalte2paraphe=6,spalte3art=3,spalte4lvs=59,mnrgewaehltezeitenfalsch=397,
+mnrkeinestdplandatenvorhanden=366,mnrauswahlnichtsinnvoll=56,
+mnrbearbeitetwerden=352;TEXT VAR spaltenstrich,stdplfachlehreruebbild,
+stdplfachlehreruebdruck1:=
+"Übersicht über Lehrbefähigte und ihren Stundenplan zu bestimmten Zeiten",
+stdplfachlehreruebdruck2,spaltenueberschrift,anfbuchstabe,neueranfbuchstabe:=
+"",teiltextmeldung1:="die Fächer mit Anfangsbuchstaben: ",teiltextmeldung2:=
+"das Fach: ",angegebenesfach,fach,altesfach,paraphe,art,lehrveranstaltung,
+schuljahr,halbjahr,sjhjaufber;INT VAR status,index:=dnrlehrbefaehigungen,
+eingabestatus,lesestart,bildanfang,druckzeilenzahl,zeit,zaehler;LET
+maxanzahlzeiten=6;ROW maxanzahlzeitenINT VAR zeiten;BOOL VAR
+geplantessjgewaehlt,mitscanner,bestfachgewaehlt;LET AUSGFELD =ROW
+ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;
+AUSGKOPF VAR ausgkopf;BOOL PROC multistop:BOOL VAR a;IF bestfachgewaehltTHEN
+a:=wert(fnrlbfach)=angegebenesfachAND dbstatus=okELSE a:=dbstatus=0FI ;aEND
+PROC multistop;BOOL PROC multistopsim:setzebestandende(FALSE );BOOL VAR b:=
+multistop;setzebestandende(NOT b);bEND PROC multistopsim;PROC
+stdplfachlehrerspezielleteile(INT CONST nr):SELECT nrOF CASE 1:
+stdplfachlehrerdialogvorbereitenCASE 2:stdplfachlehrereingabenrichtigCASE 3:
+stdplfachlehrerlistenvorbereitenCASE 4:stdplfachlehrerdruckvorbereitenCASE 5:
+stdplfachlehrerseitedruckenCASE 6:stdplfachlehrerbildschirmvorbereitenCASE 7:
+stdplfachlehrerseitezeigenENDSELECT .END PROC stdplfachlehrerspezielleteile;
+PROC stdplfachlehrerdialogvorbereiten:stdplfachlehreruebbild:=text(
+vergleichsknoten);setzeanfangswerte(eingangsmaske,maskenanfpos);END PROC
+stdplfachlehrerdialogvorbereiten;PROC stdplfachlehrereingabenrichtig:LET
+fnrfach=2,fnrakthj=69,fnrgeplhj=70,fnrausgbild=71,fnrausgdruck=72;
+standardpruefe(5,fnrausgbild,fnrausgdruck,null,niltext,status);IF status<>0
+THEN infeld(status);setzeeingabetest(FALSE )ELSE standardpruefe(5,fnrakthj,
+fnrgeplhj,null,niltext,status);IF status<>0THEN infeld(status);
+setzeeingabetest(FALSE )ELSE IF NOT anzahldergewaehltenzeitenkorrektTHEN
+infeld(3);standardmeldung(mnrgewaehltezeitenfalsch,niltext);setzeeingabetest(
+FALSE )ELSE spaltenstrich:="----+------+---+";spaltenstrichCAT zeit*
+"--------+";parametersetzen;IF NOT stundenplandatenvorhandenTHEN infeld(
+fnrakthj);standardmeldung(mnrkeinestdplandatenvorhanden,niltext);
+setzeeingabetest(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(
+fnrausgbild)=niltext);setzeeingabetest(TRUE )FI ;FI ;FI ;FI .
+anzahldergewaehltenzeitenkorrekt:INT VAR unterrichtsstd,std;zeit:=0;
+spaltenueberschrift:="Fach Lehrer Art ";FOR stdFROM 3UPTO 68REP IF
+standardmaskenfeld(std)<>niltextTHEN zeitINCR 1;IF zeit<=maxanzahlzeitenTHEN
+unterrichtsstd:=std-2;zeiten(zeit):=unterrichtsstd;
+spaltenueberschriftweiterzusammenbauen(unterrichtsstd);FI ;FI ;PER ;zeit<=
+maxanzahlzeitenAND zeit>0.parametersetzen:angegebenesfach:=standardmaskenfeld
+(fnrfach);bestfachgewaehlt:=angegebenesfach<>niltext;mitscanner:=
+bestfachgewaehlt;geplantessjgewaehlt:=standardmaskenfeld(fnrakthj)=niltext;
+schuljahr:=schulkenndatum("Schuljahr");halbjahr:=schulkenndatum(
+"Schulhalbjahr");IF geplantessjgewaehltTHEN geplanteshjundsjberechnen(
+halbjahr,schuljahr);FI ;sjhjaufber:=subtext(schuljahr,1,2)+"/";sjhjaufberCAT
+subtext(schuljahr,3,4)+komma+blank;sjhjaufberCAT halbjahr;.
+stundenplandatenvorhanden:stundenplanhalbjahrsetzen(halbjahr,schuljahr);
+stundenplanbasisundstundenplanholen(eingabestatus);eingabestatus=0END PROC
+stdplfachlehrereingabenrichtig;PROC spaltenueberschriftweiterzusammenbauen(
+INT VAR unterrichtsstd):INT VAR x;TEXT VAR hilfstext;x:=(unterrichtsstd-1)
+DIV 12;IF x=0THEN hilfstext:="Mo "ELIF x=1THEN hilfstext:="Di "ELIF x=2THEN
+hilfstext:="Mi "ELIF x=3THEN hilfstext:="Do "ELIF x=4THEN hilfstext:="Fr "
+ELSE hilfstext:="Sa "FI ;x:=unterrichtsstdMOD 12;IF x=0THEN hilfstextCAT
+"12 "ELSE hilfstextCAT text(x,2)+4*blankFI ;spaltenueberschriftCAT
+hilfstext;END PROC spaltenueberschriftweiterzusammenbauen;PROC
+stdplfachlehrerlistenvorbereiten:BOOL VAR b;altesfach:=niltext;inittupel(
+dnrlehrbefaehigungen);initspalten;setzeidentiwert("");initobli(
+anzahlderobjekteprobildschirm);putwert(fnrlbfach,angegebenesfach);IF
+bestfachgewaehltTHEN objektlistestarten(index,angegebenesfach,fnrlbparaphe,
+TRUE ,b)ELSE objektlistestarten(index,angegebenesfach,0,TRUE ,b);FI ;
+setzebestandende(NOT multistopCOR b);END PROC
+stdplfachlehrerlistenvorbereiten;PROC stdplfachlehrerbildschirmvorbereiten:
+LET fnrausganf=2;standardkopfmaskeaktualisieren(stdplfachlehreruebbild);
+bildanfang:=fnrausganf;setzebildanfangsposition(bildanfang);
+setzespaltenbreite(bildbreite);spaltenweise(spaltenueberschrift);ausgfeld(1)
+:=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;spaltenweise(
+spaltenstrich);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;
+erhoeheausgabeposumeins;setzebildanfangsposition(4);spaltenbreitensetzen;END
+PROC stdplfachlehrerbildschirmvorbereiten;PROC spaltenbreitensetzen:
+initspalten;setzespaltentrenner(spaltentrenner);setzespaltenbreite(
+spalte1fach);setzespaltenbreite(spalte2paraphe);setzespaltenbreite(spalte3art
+);setzespaltenbreite(spalte4lvs);END PROC spaltenbreitensetzen;PROC
+stdplfachlehrerseitezeigen:altesfach:=niltext;blaettern(PROC (INT CONST )
+teilstdplfachlehrerzeigen,aktion,TRUE ,mitscanner,BOOL PROC multistop);END
+PROC stdplfachlehrerseitezeigen;PROC teilstdplfachlehrerzeigen(INT CONST x):
+datenauslehrbefundstdplholen;datenauslehrbefundstdplaufbereitenbild;
+datenauslehrbefundstdplaufbildschirmEND PROC teilstdplfachlehrerzeigen;PROC
+datenauslehrbefundstdplholen:TEXT VAR lv,raum,par;lehrveranstaltung:=niltext;
+paraphe:=wert(fnrlbparaphe);art:=wert(fnrlbart);fach:=wert(fnrlbfach);FOR
+zaehlerFROM 1UPTO zeitREP planeintraglesen(zeiten(zaehler),"P",paraphe,lv,
+raum,par);lehrveranstaltungCAT text(lv,8)+spaltentrennerPER ;END PROC
+datenauslehrbefundstdplholen;PROC datenauslehrbefundstdplaufbereitenbild:IF
+altesfach<>fachTHEN spaltenweise(fach);altesfach:=fach;ELSE spaltenweise(
+blank);FI ;spaltenweise(paraphe);spaltenweise(art);spaltenweise(
+lehrveranstaltung)END PROC datenauslehrbefundstdplaufbereitenbild;PROC
+datenauslehrbefundstdplaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaenge
+REP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;
+END PROC datenauslehrbefundstdplaufbildschirm;PROC
+stdplfachlehrerdruckvorbereiten:setzebestandende(FALSE );anfbuchstabe:=" ";
+druckvorbereiten;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-
+ausgkopflaenge;stdplfachlehreruebdruck2:="Schulhalbjahr ";
+stdplfachlehreruebdruck2CAT sjhjaufber;stdplfachlehreruebdruck2CAT
+". Halbjahr";initdruckkopf(stdplfachlehreruebdruck1,stdplfachlehreruebdruck2)
+;inittupel(index);putwert(fnrlbfach,angegebenesfach);lesenvorbereitendruck(
+PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistop);
+setzebestandende(NOT multistop)END PROC stdplfachlehrerdruckvorbereiten;PROC
+stdplfachlehrerseitedrucken:druckkopfschreiben;initspalten;setzespaltenbreite
+(bildbreite);spaltenweise(spaltenueberschrift);ausgfeld(1):=zeile;ausgfeld(1)
+IN ausgabepos;druckzeileschreiben(ausgfeld(1));spaltenweise(spaltenstrich);
+ausgfeld(1):=zeile;druckzeileschreiben(ausgfeld(1));spaltenbreitensetzen;
+altesfach:=niltext;seitedrucken(PROC (INT VAR )stdplfachlehrerdrucken,
+druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel;END
+PROC stdplfachlehrerseitedrucken;PROC stdplfachlehrerdrucken(INT VAR
+zeilenzaehler):LET markiert="#";datenauslehrbefundstdplholen;
+ggflmeldunganfbuchstabe;stdplfachlehreraufbereitendruck;zeilenzaehlerINCR
+ausgfeldlaenge;stdplfachlehrerindruckdatei.ggflmeldunganfbuchstabe:IF
+anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:
+neueranfbuchstabe:=fachSUB 1;anfbuchstabe<>neueranfbuchstabe.
+meldunganfbuchstabe:IF bestfachgewaehltTHEN standardmeldung(
+mnrbearbeitetwerden,teiltextmeldung2+fach+markiert);ELSE standardmeldung(
+mnrbearbeitetwerden,teiltextmeldung1+neueranfbuchstabe+markiert);FI ;
+anfbuchstabe:=neueranfbuchstabeEND PROC stdplfachlehrerdrucken;PROC
+stdplfachlehreraufbereitendruck:datenauslehrbefundstdplaufbereitenbild;
+ausgfeld(1):=zeile;END PROC stdplfachlehreraufbereitendruck;PROC
+stdplfachlehrerindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP
+druckzeileschreiben(ausgfeld(1))PER .END PROC stdplfachlehrerindruckdatei;
+END PACKET teilstdplfachlehrer
+
diff --git a/app/schulis/2.2.1/src/4.uv und kopplungen bearbeiten b/app/schulis/2.2.1/src/4.uv und kopplungen bearbeiten
new file mode 100644
index 0000000..2733d0d
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.uv und kopplungen bearbeiten
@@ -0,0 +1,319 @@
+PACKET uvundkopplungenbearbeitenDEFINES uvukstdvproc,uvukspeichern,uvuklisten
+,uvukvorjparaphe,uvukpruefbearb:LET ausknr=746,auskende="*",ra="c02 raeume",
+sj="Schuljahr",hj="Schulhalbjahr",eingmaske="ms eing uv und kopplungen",
+bearbmaske="ms bearb uv und kopplungen",kennzeichnungakt="aktuell",
+kennzeichnunggepl="geplant",ausgparam="#",leereparaphe="",trenner="�",bearbzl
+=18,letztesfld=163,anzeingfld=10,laengekopplung=8,laengejgst=2,laengefach=2,
+krlvjgst=2,fldjgst=3,krlvfa=4,fldfa=5,krlvkopp=6,fldkopp=7,krlvpar=8,fldpar=9
+,fldjahr=10,meldg0=56,meldg1=325,meldg2=326,meldg3=69,meldg4=60,meldg6=305,
+meldg7=355,meldg8=353,meldg9=354,meldg11=149,meldg12=142,meldg13=50,meldg14=
+63,meldg15=327,meldg16=328,meldg17=329,meldg18=360,meldg19=318,meldg20=310,
+meldg21=387,meldg22=388,meldg23=352;ROW anzeingfldTEXT VAR eingbs;ROW bearbzl
+STRUCT (TEXT kopplg,fakenn,lehrer,ROW 4TEXT klgr,ROW 2TEXT rgr)VAR dbinh;INT
+VAR i,k,z,zz,letztepos:=2,index:=0,fall:=0,aktpos,suchpos,anzdbsaetze;INT
+VAR aktzeile,jgst,fachsoll,fachist,lehrersoll,lehrerist,lehrerimfach;TEXT
+VAR lv,sicherungstupel,allefaecher,fachbez,fachgrbez,fach,paraphe,
+lehrbeflehrer,liste;TEXT VAR klgrkatalog,jgstkatalog,rgrkatalog,lehrv:="",
+fachkatalog:="",klgrpruefkatalog,parkatalog,sollstdkatalog,aktschgrkatalog,
+geplschgrkatalog;TEXT VAR schj,schhj:="0",aktschhj:="0",aktschj:="0",
+geplschhj:="0",geplschj:="0",aenderungskennzeichen:="";TEXT VAR plausikopp,
+plausipa,plausilv,jgstsugrp,plausijgst;TEXT VAR kopplung,lvfake,lehrer,sgr1,
+sgr2,sgr3,sgr4,rgr1,rgr2,maskenkopf;BOOL VAR istfehler:=FALSE ,
+koppparnichtgeprueft:=TRUE ,saetzeunveraendert:=TRUE ,ohnefehler:=TRUE ;PROC
+holeakthj:aktschhj:=schulkenndatum(hj);aktschj:=schulkenndatum(sj);geplschhj
+:=aktschhj;geplschj:=aktschj;geplanteshjundsjberechnen(geplschhj,geplschj)
+END PROC holeakthj;PROC holeaktdatenpruefung:i:=100;statleseschleife(
+dnrfaecher,"","",fnrffach,fnrffach,PROC spezcat);i:=103;statleseschleife(
+dnrlehrer,"","",fnrlparaphe,fnrlparaphe,PROC spezcat);END PROC
+holeaktdatenpruefung;PROC holeaktdatenspeicherung:i:=101;statleseschleife(
+dnrklassengruppen,"","",fnrkgklassengrp,fnrkgklassengrp,PROC spezcat);i:=102;
+statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp,fnrrgraumgrp,PROC spezcat)
+;i:=104;statleseschleife(dnrschluessel,ra,"",fnrschlsachgebiet,
+fnrschlschluessel,PROC spezcat);i:=105;statleseschleife(dnraktschuelergruppen
+,"","",fnrsgrpsj,fnrsgrphj,PROC spezcat);i:=106;statleseschleife(
+dnraktschuelergruppen,"","",fnrsgrpsj,fnrsgrphj,PROC spezcat);END PROC
+holeaktdatenspeicherung;PROC initrows:IF fachkatalog=""THEN fachkatalog:=
+trenner;klgrkatalog:=trenner;klgrpruefkatalog:=trenner;jgstkatalog:=
+"�5�05�6�06�7�07�8�08�";jgstkatalogCAT "9�09�10�11�12�13�0�00�";
+aktschgrkatalog:=trenner;geplschgrkatalog:=trenner;rgrkatalog:=trenner;
+parkatalog:=trenner;sollstdkatalog:=trenner;FOR iFROM 1UPTO anzeingfldREP
+eingbs(i):=""PER ;FOR iFROM 1UPTO bearbzlREP dbinh(i).kopplg:="";dbinh(i).
+fakenn:="";dbinh(i).lehrer:="";dbinh(i).klgr(1):="";dbinh(i).klgr(2):="";
+dbinh(i).klgr(3):="";dbinh(i).klgr(4):="";dbinh(i).rgr(1):="";dbinh(i).rgr(2)
+:="";PER ;FI END PROC initrows;PROC uvukpruefbearb:standardmeldung(meldg3," "
+);IF schhj="0"THEN holeakthjFI ;merkeeingsch;istfehler:=FALSE ;gibteskennz;
+stellejahrfest;putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj);putintwert(
+fnrlvjgst,0);putwert(fnrlvfachkennung,"");search(dnrlehrveranstaltungen,
+FALSE );IF dbstatus<>okCAND wert(fnrlvsj)<>schjCAND wert(fnrlvhj)<>schhjTHEN
+dateileerFI ;pruefung;erfasstelvausgeben;standardnproc.gibteskennz:letztepos
+:=2;IF eingbs(krlvjgst)<>""THEN fall:=2;LEAVE gibteskennzELIF eingbs(krlvfa)
+<>""THEN fall:=4;LEAVE gibteskennzELIF eingbs(krlvkopp)<>""THEN fall:=6;
+LEAVE gibteskennzELIF eingbs(krlvpar)<>""THEN fall:=8;LEAVE gibteskennzELSE
+zurueckmitmeldg(meldg0,1,letztepos,"");LEAVE uvukpruefbearbFI ;IF eingbs(fall
++1)<>""THEN letztepos:=fall+1ELSE letztepos:=fallFI .stellejahrfest:IF eingbs
+(fldjahr)=""THEN schhj:=geplschhj;schj:=geplschj;aenderungskennzeichen:=
+kennzeichnunggeplELSE schhj:=aktschhj;schj:=aktschj;aenderungskennzeichen:=
+kennzeichnungaktFI .pruefung:IF fachkatalog=trennerTHEN holeaktdatenpruefung
+FI ;prueferest(fall);IF istfehlerTHEN zurueckmitmeldg(meldg0,1,letztepos,"");
+LEAVE uvukpruefbearbFI ;IF fall=2THEN IF eingbs(fldjgst)<>""THEN pruefejgst;
+FI ;index:=dnrlehrveranstaltungen;ELIF fall=4THEN pruefedbfld(eingbs(fldfa),
+fachkatalog,fldfa);index:=ixlvsjhjkennELIF fall=6THEN pruefekopplungsnr;index
+:=ixlvsjhjkopp;ELSE pruefedbfld(eingbs(fldpar),parkatalog,fldpar);index:=
+ixlvsjhjparFI ;IF istfehlerTHEN LEAVE uvukpruefbearbFI .pruefekopplungsnr:
+putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj);putwert(fnrlvkopplung,eingbs(
+fldkopp));search(ixlvsjhjkopp);IF dbstatus=1COR dbstatus=3THEN
+koppnichtgefundenFI .koppnichtgefunden:zurueckmitmeldg(meldg1,1,fldkopp,"");
+LEAVE uvukpruefbearb.dateileer:zurueckmitmeldg(meldg2,1,letztepos,"");LEAVE
+uvukpruefbearb.END PROC uvukpruefbearb;PROC prueferest(INT CONST feldnr):FOR
+iFROM 2UPTO feldnr-1REP IF eingbs(i)<>""THEN fehlerFI PER ;FOR iFROM feldnr+2
+UPTO 9REP IF eingbs(i)<>""THEN fehlerFI PER .fehler:istfehler:=TRUE ;
+letztepos:=i;LEAVE prueferest.END PROC prueferest;PROC pruefejgst:IF compress
+(eingbs(fldjgst))="0"COR eingbs(fldjgst)="00"THEN LEAVE pruefejgstELIF int(
+eingbs(fldjgst))>4CAND int(eingbs(fldjgst))<14THEN LEAVE pruefejgstELSE
+zurueckmitmeldg(meldg6,1,fldjgst,"");istfehler:=TRUE ;FI .END PROC pruefejgst
+;PROC pruefedbfld(TEXT CONST objekt,katalog,INT CONST feld):plausijgst:=text(
+standardmaskenfeld(i*9-6),2);IF objekt=""THEN LEAVE pruefedbfldELIF katalog=
+jgstkatalogTHEN IF pos(jgstkatalog,trenner+objekt+trenner)=0THEN
+pruefeaufschuelergruppeELSE pruefejgstenFI ;ELIF pos(katalog,trenner+objekt+
+trenner)=0THEN istfehler:=TRUE ;IF katalog=fachkatalogTHEN zurueckmitmeldg(
+meldg11,1,feld,objekt+"#")ELIF katalog=parkatalogTHEN zurueckmitmeldg(meldg12
+,1,feld,objekt+"#")ELIF katalog=rgrkatalogTHEN zurueckmitmeldg(meldg16,1,feld
+,objekt+"#")FI FI .pruefeaufschuelergruppe:IF eingbs(fldjahr)<>""THEN IF pos(
+aktschgrkatalog,trenner+text(int(plausijgst))+objekt+trenner)<>0THEN LEAVE
+pruefedbfldELSE pruefeaufklgrFI ELIF pos(geplschgrkatalog,trenner+text(int(
+plausijgst))+objekt+trenner)<>0THEN LEAVE pruefedbfldELSE pruefeaufklgrFI .
+pruefeaufklgr:IF pos(klgrkatalog,trenner+objekt+trenner)>0THEN IF
+jgstnichtnullTHEN pruefejgstinklgrFI ELSE istfehler:=TRUE ;zurueckmitmeldg(
+meldg15,1,feld,objekt+"#")FI .pruefejgsten:IF int(plausijgst)<>int(objekt)
+CAND int(plausijgst)<>0THEN istfehler:=TRUE ;zurueckmitmeldg(meldg9,1,feld,
+objekt+"#"+plausijgst+"#");FI .jgstnichtnull:plausijgst<>"00".
+pruefejgstinklgr:zz:=0;jgstsugrp:="";zz:=pos(klgrpruefkatalog,trenner+objekt+
+trenner)+length(objekt)+2;jgstsugrp:=subtext(klgrpruefkatalog,zz,pos(
+klgrpruefkatalog,trenner,zz)-1);FOR zzFROM 1UPTO length(jgstsugrp)DIV 2REP
+IF subtext(jgstsugrp,zz*2-1,zz*2)<>plausijgstTHEN istfehler:=TRUE ;
+zurueckmitmeldg(meldg9,1,feld,objekt+"#"+plausijgst+"#");LEAVE pruefedbfldFI
+PER ;END PROC pruefedbfld;PROC pruefekopplgpar(TEXT CONST kopp,lv,pa,INT
+CONST feldnr):plausikopp:=kopp;plausipa:=pa;plausilv:=lv;pruefeindb;
+pruefeaufbs.pruefeindb:istfehler:=FALSE ;inittupel(dnrlehrveranstaltungen);
+putwert(fnrlvkopplung,plausikopp);z:=feldnr;statleseschleife(ixlvsjhjkopp,
+schj,schhj,fnrlvsj,fnrlvhj,PROC suchekopplungen);IF istfehlerTHEN infeld(
+feldnr);LEAVE pruefekopplgparFI .pruefeaufbs:INT VAR z;FOR zFROM 1UPTO i-1
+REP IF plausikopp=standardmaskenfeld(z*9-7)THEN IF plausipa=
+standardmaskenfeld(z*9-5)THEN istfehler:=TRUE ;zurueckmitmeldg(meldg8,1,
+feldnr,plausipa+"#"+plausikopp+"#"+text(standardmaskenfeld(z*9-6),2)+dbinh(z)
+.fakenn+"#");LEAVE pruefekopplgparFI ;FI ;PER ;FOR zFROM i+1UPTO bearbzlREP
+IF plausikopp=standardmaskenfeld(z*9-7)THEN IF plausipa=standardmaskenfeld(z*
+9-5)THEN istfehler:=TRUE ;zurueckmitmeldg(meldg8,1,feldnr,plausipa+"#"+
+plausikopp+"#"+text(standardmaskenfeld(z*9-6),2)+dbinh(z).fakenn+"#");LEAVE
+pruefekopplgparFI ;FI ;PER .END PROC pruefekopplgpar;PROC suchekopplungen(
+BOOL VAR b):IF wert(fnrlvsj)=schjCAND wert(fnrlvhj)=schhjCAND wert(
+fnrlvkopplung)=plausikoppCAND dbstatus=0THEN ueberpruefeparapheELSE b:=TRUE
+FI .ueberpruefeparaphe:IF wert(fnrlvparaphe)=plausipaCAND nichtplausilvTHEN
+istfehler:=TRUE ;zurueckmitmeldg(meldg8,1,z,plausipa+"#"+plausikopp+"#"+
+formattext(wert(fnrlvjgst))+wert(fnrlvfachkennung)+"#");b:=TRUE ;LEAVE
+suchekopplungenFI .nichtplausilv:formattext(wert(fnrlvjgst))<>text(plausilv,2
+)COR wert(fnrlvfachkennung)<>dbinh(i).fakenn.END PROC suchekopplungen;PROC
+zurueckmitmeldg(INT CONST meldg,ruecksprung,feld,TEXT CONST markiert):IF
+ruecksprung>0THEN return(ruecksprung)FI ;standardmeldung(meldg,markiert);IF
+feld>0THEN infeld(feld)FI END PROC zurueckmitmeldg;PROC uvukstdvproc:initrows
+;fachbez:=trenner;fachgrbez:=trenner;gibeingschaus;standardnproc.END PROC
+uvukstdvproc;PROC gibeingschaus:standardstartproc(eingmaske);gibeingbsaus;
+standardfelderausgeben;infeld(letztepos).gibeingbsaus:FOR iFROM 2UPTO
+anzeingfldREP standardmaskenfeld(eingbs(i),i);IF eingbs(i)<>""THEN letztepos
+:=iFI PER .END PROC gibeingschaus;PROC erfasstelvausgeben:anzdbsaetze:=0;k:=1
+;pruefobsaetzevorhanden;loeschefelder;maskenkopf:=text(vergleichsknoten)+" "+
+schhj+"."+" "+subtext(schj,1,2)+"/"+subtext(schj,3);standardstartproc(
+bearbmaske);standardkopfmaskeaktualisieren(maskenkopf);startebildschirmblock(
+index,bearbzl-1);bildschirmblock(PROC gibbearbzeileaus,BOOL PROC (INT CONST )
+pruefung,i);standardfelderausgeben;infeld(2).pruefobsaetzevorhanden:putwert(
+fnrlvsj,schj);putwert(fnrlvhj,schhj);putintwert(fnrlvjgst,int(eingbs(fldjgst)
+));putwert(fnrlvfachkennung,eingbs(fldfa));putwert(fnrlvkopplung,eingbs(
+fldkopp));putwert(fnrlvparaphe,eingbs(fldpar));search(index,FALSE );IF
+dbstatus<>okTHEN zurueckmitmeldg(meldg2,1,letztepos,"");LEAVE
+erfasstelvausgebenELSE pruefobsatzrichtigFI .pruefobsatzrichtig:IF wert(
+fnrlvsj)=schjCAND wert(fnrlvhj)=schhjTHEN IF fall=1CAND eingbs(fldjgst)<>""
+CAND intwert(fnrlvjgst)<>int(eingbs(fldjgst))THEN gibfehlerausELIF fall=2
+CAND eingbs(fldfa)<>""CAND text(wert(fnrlvfachkennung),2)<>eingbs(fldfa)THEN
+gibfehlerausELIF fall=3CAND eingbs(fldkopp)<>""CAND wert(fnrlvkopplung)<>
+eingbs(fldkopp)THEN gibfehlerausELIF fall=4CAND eingbs(fldpar)<>""CAND wert(
+fnrlvparaphe)<>eingbs(fldpar)THEN gibfehlerausFI ELSE gibfehlerausFI .
+gibfehleraus:zurueckmitmeldg(meldg2,1,letztepos,"");LEAVE erfasstelvausgeben.
+END PROC erfasstelvausgeben;PROC loeschefelder:FOR iFROM 1UPTO bearbzlREP
+dbinh(i).kopplg:="";dbinh(i).fakenn:="";dbinh(i).lehrer:="";dbinh(i).klgr(1)
+:="";dbinh(i).klgr(2):="";dbinh(i).klgr(3):="";dbinh(i).klgr(4):="";dbinh(i).
+rgr(1):="";dbinh(i).rgr(2):="";PER ;FOR iFROM 2UPTO letztesfldREP
+standardmaskenfeld("",i)PER .END PROC loeschefelder;PROC gibbearbzeileaus:
+kopplung:=wert(fnrlvkopplung);lvfake:=wert(fnrlvfachkennung);lehrer:=wert(
+fnrlvparaphe);sgr1:=wert(fnrlvklgrp1);sgr2:=wert(fnrlvklgrp2);sgr3:=wert(
+fnrlvklgrp3);sgr4:=wert(fnrlvklgrp4);rgr1:=wert(fnrlvraumgrp1);rgr2:=wert(
+fnrlvraumgrp2);merkdbwerte;lehrv:=formattext(wert(fnrlvjgst))+text(lvfake,2)+
+text(subtext(lvfake,3),4)+text(intwert(fnrlvwochenstd),2);standardmaskenfeld(
+kopplung,k*9-7);standardmaskenfeld(lehrv,k*9-6);standardmaskenfeld(lehrer,k*9
+-5);standardmaskenfeld(sgr1,k*9-4);standardmaskenfeld(sgr2,k*9-3);
+standardmaskenfeld(sgr3,k*9-2);standardmaskenfeld(sgr4,k*9-1);
+standardmaskenfeld(rgr1,k*9);standardmaskenfeld(rgr2,k*9+1);IF k<bearbzlTHEN
+kINCR 1FI .merkdbwerte:dbinh(k).kopplg:=kopplung;dbinh(k).fakenn:=lvfake;
+dbinh(k).lehrer:=lehrer;dbinh(k).klgr(1):=sgr1;dbinh(k).klgr(2):=sgr2;dbinh(k
+).klgr(3):=sgr3;dbinh(k).klgr(4):=sgr4;dbinh(k).rgr(1):=rgr1;dbinh(k).rgr(2)
+:=rgr2;anzdbsaetzeINCR 1.END PROC gibbearbzeileaus;BOOL PROC pruefung(INT
+CONST notwprocparam):schhj=wert(fnrlvhj)CAND schj=wert(fnrlvsj)END PROC
+pruefung;PROC merkeeingsch:FOR iFROM 2UPTO anzeingfldREP eingbs(i):=
+standardmaskenfeld(i)PER ;END PROC merkeeingsch;TEXT PROC formattext(TEXT
+CONST jgst):IF int(jgst)<10CAND jgst<>"00"THEN LEAVE formattextWITH "0"+jgst
+FI ;jgstEND PROC formattext;PROC uvukspeichern(BOOL CONST speichern):IF
+speichernTHEN speicherdaten;naechsterbildschirmELSE zurueckmitmeldg(meldg14,0
+,1,"");naechsterbildschirmFI .speicherdaten:saetzeunveraendert:=TRUE ;IF
+aktschgrkatalog=trennerTHEN holeaktdatenspeicherungFI ;zurueckmitmeldg(
+meldg17,0,1,"");FOR iFROM 1UPTO anzdbsaetzeREP kopplung:=standardmaskenfeld(i
+*9-7);lehrer:=standardmaskenfeld(i*9-5);sgr1:=standardmaskenfeld(i*9-4);sgr2
+:=standardmaskenfeld(i*9-3);sgr3:=standardmaskenfeld(i*9-2);sgr4:=
+standardmaskenfeld(i*9-1);rgr1:=standardmaskenfeld(i*9);rgr2:=
+standardmaskenfeld(i*9+1);IF satzgeaendertTHEN infeld(i*9-7);pruefedaten;FI
+PER ;zurueckmitmeldg(meldg13,0,1,"");FOR iFROM 1UPTO anzdbsaetzeREP kopplung
+:=standardmaskenfeld(i*9-7);lehrer:=standardmaskenfeld(i*9-5);sgr1:=
+standardmaskenfeld(i*9-4);sgr2:=standardmaskenfeld(i*9-3);sgr3:=
+standardmaskenfeld(i*9-2);sgr4:=standardmaskenfeld(i*9-1);rgr1:=
+standardmaskenfeld(i*9);rgr2:=standardmaskenfeld(i*9+1);IF satzgeaendertTHEN
+IF saetzeunveraendertTHEN saetzeunveraendert:=FALSE FI ;infeld(i*9-7);
+speicheraenderungenFI PER ;IF NOT saetzeunveraendertTHEN
+aenderungsvermerksetzen(aenderungskennzeichen)FI .satzgeaendert:kopplung<>
+dbinh(i).kopplgCOR lehrer<>dbinh(i).lehrerCOR sgr1<>dbinh(i).klgr(1)COR sgr2
+<>dbinh(i).klgr(2)COR sgr3<>dbinh(i).klgr(3)COR sgr4<>dbinh(i).klgr(4)COR
+rgr1<>dbinh(i).rgr(1)COR rgr2<>dbinh(i).rgr(2).pruefedaten:istfehler:=FALSE ;
+koppparnichtgeprueft:=TRUE ;IF kopplung<>dbinh(i).kopplgTHEN
+pruefekopplungsnrFI ;IF lehrer<>dbinh(i).lehrerCAND lehrer<>leereparapheTHEN
+pruefelehrerFI ;IF sgr1<>dbinh(i).klgr(1)COR sgr2<>dbinh(i).klgr(2)COR sgr3<>
+dbinh(i).klgr(3)COR sgr4<>dbinh(i).klgr(4)THEN pruefeklassenFI ;IF rgr1<>
+dbinh(i).rgr(1)COR rgr2<>dbinh(i).rgr(2)THEN prueferaeumeFI .
+pruefekopplungsnr:IF kopplung=""THEN istfehler:=TRUE ;zurueckmitmeldg(meldg7,
+1,i*9-7,"");LEAVE uvukspeichernELIF length(kopplung)>laengekopplungTHEN
+istfehler:=TRUE ;zurueckmitmeldg(meldg4,1,i*9-7,"");LEAVE uvukspeichernELSE
+koppparnichtgeprueft:=FALSE ;IF lehrer<>leereparapheTHEN pruefekopplgpar(
+kopplung,standardmaskenfeld(i*9-6),lehrer,i*9-7);abfragefehlerFI FI .
+pruefelehrer:pruefedbfld(lehrer,parkatalog,i*9-5);abfragefehler;IF
+koppparnichtgeprueftTHEN pruefekopplgpar(kopplung,standardmaskenfeld(i*9-6),
+lehrer,i*9-5);abfragefehlerFI .pruefeklassen:IF sgr1<>dbinh(i).klgr(1)THEN
+pruefedbfld(sgr1,jgstkatalog,i*9-4);abfragefehlerFI ;IF sgr2<>dbinh(i).klgr(2
+)THEN pruefedbfld(sgr2,jgstkatalog,i*9-3);abfragefehlerFI ;IF sgr3<>dbinh(i).
+klgr(3)THEN pruefedbfld(sgr3,jgstkatalog,i*9-2);abfragefehlerFI ;IF sgr4<>
+dbinh(i).klgr(4)THEN pruefedbfld(sgr4,jgstkatalog,i*9-1);abfragefehlerFI .
+prueferaeume:pruefedbfld(rgr1,rgrkatalog,i*9);abfragefehler;pruefedbfld(rgr2,
+rgrkatalog,i*9+1);abfragefehler.abfragefehler:IF istfehlerTHEN LEAVE
+uvukspeichernFI .speicheraenderungen:putwert(fnrlvsj,schj);putwert(fnrlvhj,
+schhj);putintwert(fnrlvjgst,int(text(standardmaskenfeld(i*9-6),2)));putwert(
+fnrlvfachkennung,dbinh(i).fakenn);search(dnrlehrveranstaltungen,TRUE );IF
+dbstatus=0THEN aktualisierenFI .aktualisieren:putwert(fnrlvkopplung,kopplung)
+;putwert(fnrlvparaphe,lehrer);putwert(fnrlvklgrp1,sgr1);putwert(fnrlvklgrp2,
+sgr2);putwert(fnrlvklgrp3,sgr3);putwert(fnrlvklgrp4,sgr4);putwert(
+fnrlvraumgrp1,rgr1);putwert(fnrlvraumgrp2,rgr2);update(dnrlehrveranstaltungen
+).naechsterbildschirm:IF anzdbsaetze<bearbzlTHEN enter(2);LEAVE uvukspeichern
+FI ;k:=1;putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj);putintwert(fnrlvjgst,
+int(text(lehrv,2)));putwert(fnrlvfachkennung,dbinh(anzdbsaetze).fakenn);
+search(dnrlehrveranstaltungen,TRUE );changeindex;succ(index);loeschefelder;
+IF dbstatus<>okTHEN enter(2)ELSE anzdbsaetze:=0;
+standardkopfmaskeaktualisieren(maskenkopf);startebildschirmblock(index,
+bearbzl-1);bildschirmblock(PROC gibbearbzeileaus,BOOL PROC (INT CONST )
+pruefung,i);infeld(1);standardfelderausgeben;infeld(2);return(1)FI .END PROC
+uvukspeichern;PROC uvuklisten:INT VAR aktfeld:=infeld;WINDOW VAR w:=
+startwindow(42,23,77,1);liste:="";standardmeldung(meldg3,"");aktzeile:=(
+aktfeld-2)DIV 9+1;jgst:=int(text(standardmaskenfeld(aktzeile*9-6),laengejgst)
+);lv:=text(dbinh(aktzeile).fakenn,laengefach);sicherdbposition;
+berechnefachdaten;bereitelisteauf;giballelehreraus;listeCAT "*";listeCAT
+auskunftstextende;erstelledbposition;IF menuedraussenTHEN reorganizescreenFI
+;open(w);auskunfterteilung(liste,w,FALSE );reorganizescreen;setlasteditvalues
+;return(1).sicherdbposition:savetupel(index,sicherungstupel);.
+erstelledbposition:restoretupel(index,sicherungstupel).berechnefachdaten:
+allefaecher:=trenner;inittupel(dnrfaecher);putwert(fnrffach,compress(lv));
+search(dnrfaecher,TRUE );IF dbstatus<>okTHEN standardmeldung(meldg20,"");
+return(1);LEAVE uvuklistenELSE IF wert(fnrffachgrp)<>""THEN lv:=text(wert(
+fnrffachgrp),laengefach);ermittleanderefaecherELSE allefaecherCAT lv;
+allefaecherCAT trenner;FI ;ermittlestdenFI .ermittleanderefaecher:IF fachbez=
+trennerTHEN IF records(dnrfaecher)=0.0THEN standardmeldung(meldg21,"");return
+(1);LEAVE uvuklistenELSE statleseschleife(dnrfaecher,"","",fnrffach,fnrffach,
+PROC faecherholen)FI ;FI ;holallefaecher.holallefaecher:allefaecher:=
+allefaecherzu(trenner+lv+trenner).ermittlestden:allestdenberechnen.
+bereitelisteauf:listeCAT "Lehrbefähigte mit Stundenzahl:";listeCAT
+auskunftstextende;listeCAT " Soll Ist im Fach Rest";listeCAT
+auskunftstextende;listeCAT "Fach: ----+----+-------+----";listeCAT
+auskunftstextende;listeCAT text(lv,5);listeCAT text(fachsoll,6);listeCAT text
+(fachist,5);listeCAT text(fachsoll-fachist,13);listeCAT auskunftstextende;
+listeCAT " ";listeCAT auskunftstextende.giballelehreraus:IF fachkatalog=
+trennerTHEN holeaktdatenpruefungFI ;lehrbeflehrer:="";inittupel(
+dnrlehrbefaehigungen);statleseschleife(dnrlehrbefaehigungen,compress(lv),"",
+fnrlbfach,fnrlbparaphe,PROC lehrbeflehrerholen);IF lehrbeflehrer=""THEN
+meldungkeinelehrbeflehrerELSE giblehrerausFI .meldungkeinelehrbeflehrer:
+standardmeldung(meldg22,lv+ausgparam);return(1);LEAVE uvuklisten.giblehreraus
+:suchpos:=1;aktpos:=1;listeCAT "Lehrer:";listeCAT auskunftstextende;WHILE
+aktpos>0REP aktpos:=pos(lehrbeflehrer,trenner,suchpos);IF aktpos>0THEN
+paraphe:=subtext(lehrbeflehrer,suchpos,aktpos-1);standardmeldung(meldg23,
+paraphe+ausgparam);ermittlestdenlehrer;IF ohnefehlerTHEN listeCAT text(
+paraphe,5);listeCAT text(lehrersoll,6);listeCAT text(lehrerist,5);listeCAT
+text(lehrerimfach,8);listeCAT text(lehrersoll-lehrerist,5);listeCAT
+auskunftstextendeFI ;suchpos:=aktpos+1FI ;PER ;infeld(1);
+standardfelderausgeben;infeld(aktfeld).END PROC uvuklisten;PROC
+ermittlestdenlehrer:lehrersoll:=0;lehrerist:=0;lehrerimfach:=0;ohnefehler:=
+TRUE ;ermittlelehrersoll;ermittlelehreristundimfach.ermittlelehrersoll:zz:=
+pos(parkatalog,trenner+paraphe+trenner);IF zz>0THEN lehrersoll:=int((
+sollstdkatalogSUB (zz+1))+(sollstdkatalogSUB (zz+2)))ELSE ohnefehler:=FALSE ;
+LEAVE ermittlestdenlehrerFI .ermittlelehreristundimfach:inittupel(
+dnrlehrveranstaltungen);putwert(fnrlvparaphe,paraphe);statleseschleife(
+ixlvsjhjpar,schj,schhj,fnrlvsj,fnrlvhj,PROC holelehrerstden).END PROC
+ermittlestdenlehrer;PROC holelehrerstden(BOOL VAR b):TEXT VAR lvfach:=text(
+wert(fnrlvfachkennung),laengefach);IF wert(fnrlvsj)<>schjCOR wert(fnrlvhj)<>
+schhjCOR wert(fnrlvparaphe)<>parapheTHEN b:=TRUE ELSE IF inallefaecher(lvfach
+)THEN lehrerimfachINCR intwert(fnrlvwochenstd)FI ;lehreristINCR intwert(
+fnrlvwochenstd)FI END PROC holelehrerstden;BOOL PROC inallefaecher(TEXT
+CONST fach):pos(allefaecher,trenner+text(fach,laengefach)+trenner)>0END PROC
+inallefaecher;PROC lehrbeflehrerholen(BOOL VAR b):IF dbstatus<>okCOR text(
+wert(fnrlbfach),laengefach)<>lvTHEN b:=TRUE ELSE lehrbeflehrerCAT wert(
+fnrlbparaphe);lehrbeflehrerCAT trenner;FI END PROC lehrbeflehrerholen;PROC
+allestdenberechnen:INT VAR i;fachsoll:=0;fachist:=0;FOR iFROM 1UPTO length(
+allefaecher)DIV (laengefach+1)REP fach:=(subtext(allefaecher,(i-1)*(
+laengefach+1)+2,i*(laengefach+1)));berechnestdenzufachPER END PROC
+allestdenberechnen;PROC berechnestdenzufach:inittupel(dnrlehrveranstaltungen)
+;putwert(fnrlvfachkennung,fach);statleseschleife(ixlvsjhjkenn,schj,schhj,
+fnrlvsj,fnrlvhj,PROC stdenzufach)END PROC berechnestdenzufach;PROC
+stdenzufach(BOOL VAR b):TEXT VAR lvfach:=text(wert(fnrlvfachkennung),
+laengefach);INT VAR lvstd;IF wert(fnrlvsj)<>schjCOR wert(fnrlvhj)<>schhjCOR
+lvfach>fachTHEN b:=TRUE ELSE IF lvfach=fachTHEN lvstd:=intwert(fnrlvwochenstd
+);fachsollINCR lvstd;IF wert(fnrlvparaphe)<>""THEN fachistINCR lvstdFI FI FI
+END PROC stdenzufach;TEXT PROC allefaecherzu(TEXT CONST bez):suchpos:=1;
+aktpos:=1;WHILE aktpos>0REP aktpos:=pos(fachgrbez,bez,suchpos);IF aktpos>0
+THEN allefaecherCAT (fachbezSUB (aktpos+1));allefaecherCAT (fachbezSUB (
+aktpos+2));allefaecherCAT trenner;suchpos:=aktpos+1;FI PER ;allefaecherEND
+PROC allefaecherzu;PROC uvukvorjparaphe:IF aenderungskennzeichen=
+kennzeichnungaktTHEN standardmeldung(meldg19,"");return(1)ELSE aktzeile:=(
+infeld-2)DIV 9+1;jgst:=int(text(standardmaskenfeld(aktzeile*9-6),laengejgst))
+;lv:=dbinh(aktzeile).fakenn;IF geplschhj="1"CAND jgst=5THEN standardmeldung(
+meldg19,"");return(1);LEAVE uvukvorjparapheFI ;suchedbsatzundausgabeFI .
+suchedbsatzundausgabe:savetupel(index,sicherungstupel);saveupdateposition(
+index);IF index<>dnrlehrveranstaltungenTHEN changeindex;FI ;inittupel(
+dnrlehrveranstaltungen);putwert(fnrlvsj,aktschj);putwert(fnrlvhj,aktschhj);
+IF aktschhj="2"CAND jgst>5THEN putintwert(fnrlvjgst,jgst-1);ELSE putintwert(
+fnrlvjgst,jgst)FI ;putwert(fnrlvfachkennung,lv);search(dnrlehrveranstaltungen
+,TRUE );IF dbstatus<>okTHEN standardmeldung(meldg18,"Schulj. "+aktschhj+". "+
+text(aktschj,2)+"/"+subtext(aktschj,3)+" Lv. "+text(jgst)+lv+ausgparam);
+return(1);LEAVE uvukvorjparapheELSE standardmaskenfeld(wert(fnrlvparaphe),
+aktzeile*9-5);standardfelderausgebenFI ;IF index<>dnrlehrveranstaltungenTHEN
+changeindex;FI ;restoreupdateposition(index);restoretupel(index,
+sicherungstupel);return(1).END PROC uvukvorjparaphe;PROC faecherholen(BOOL
+VAR b):IF dbstatus<>okTHEN b:=TRUE ELSE fachbezCAT text(wert(fnrffach),
+laengefach);fachbezCAT trenner;fachgrbezCAT text(wert(fnrffachgrp),laengefach
+);fachgrbezCAT trennerFI END PROC faecherholen;PROC spezcat(BOOL VAR b):TEXT
+VAR zwsp:="";IF i=100THEN fachkatalogCAT wert(fnrffach)+trenner;ELIF i=101
+THEN jgstsugrp:="";klgrkatalogCAT wert(fnrkgklassengrp)+trenner;
+klgrpruefkatalogCAT wert(fnrkgklassengrp)+trenner;jgstsugrp:=wert(
+fnrkgschuelergrp);stellejgstzurklgrfest;ELIF i=105THEN IF wert(fnrsgrphj)=
+aktschhjCAND dbstatus=okTHEN aktschgrkatalogCAT wert(fnrsgrpjgst)+wert(
+fnrsgrpkennung)+trenner;ELIF dbstatus<>okTHEN b:=TRUE FI ELIF i=106THEN IF
+wert(fnrsgrphj)=geplschhjCAND dbstatus=okTHEN geplschgrkatalogCAT wert(
+fnrsgrpjgst)+wert(fnrsgrpkennung)+trenner;ELIF dbstatus<>okTHEN b:=TRUE FI
+ELIF i=102THEN rgrkatalogCAT wert(fnrrgraumgrp)+trenner;ELIF i=103THEN zwsp:=
+wert(fnrlparaphe)+trenner;parkatalogCAT zwsp;sollstdkatalogCAT text(wert(
+fnrlsollstd),length(zwsp))ELIF i=104THEN IF wert(fnrschlsachgebiet)=raTHEN
+rgrkatalogCAT wert(fnrschlschluessel)+trenner;ELIF wert(fnrschlsachgebiet)>ra
+THEN b:=TRUE FI FI .stellejgstzurklgrfest:FOR zzFROM 1UPTO length(jgstsugrp)
+DIV 6REP klgrpruefkatalogCAT subtext(jgstsugrp,zz*6-5,zz*6-4)PER ;
+klgrpruefkatalogCAT trenner.END PROC spezcat;END PACKET
+uvundkopplungenbearbeiten;
+
diff --git a/app/schulis/2.2.1/src/4.vertretungen organisieren b/app/schulis/2.2.1/src/4.vertretungen organisieren
new file mode 100644
index 0000000..e0cd6ba
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.vertretungen organisieren
@@ -0,0 +1,318 @@
+PACKET vertretungenorganisierenDEFINES vertretungenorgbearbeiten,
+vertretungenorgvertretungsdatenlisten,vertretungenorginlisteblaettern,
+vertretungenorgspeichern,vertretungenorglvauflisten,
+vertretungenorglvauflisteneinlesen,vertretungenorginlvlisteblaettern,
+vertretungenorgangekreuztebearbeiten:LET maskebearb=
+"ms vertretungen organisieren",maskeliste="mu objektliste";LET fnrsuchparaphe
+=2,fnrstartdatum=3,fnrstartstunde=4,fnrendedatum=5,fnrendestunde=6,fnrparaphe
+=2,fnranrechnungart=3,fnrvertretdatum=4,fnrvertrettag=5,fnrvertretstd=6,
+fnrvertretlv=7,fnrvertretparaphe=8,fnrtabellenanfang=9;LET
+meldnrlistewirdaufbereitet=7,meldnrbittefuellen=52,
+meldnrungueltigerschluessel=55,meldnrletzterbehandelt=67,meldnrbittewarten=69
+,meldnrblaetternnichtmoeglich=72,meldnrspeicherungunmoeglich=73,
+meldnrzulangevertretungsdauer=157,meldnrdatenwerdengespeichert=301,
+meldnrdatenwerdennichtgespeichert=303,meldnrungueltigeparaphe=344,
+meldnrstundenplanfehlt=366,meldnrparapheschonzugeteilt=361,
+meldnrzweitesdatumkleiner=386,meldnrkeinunterrichtzurzeit=395;LET schuljahr=
+"Schuljahr",schulhalbjahr="Schulhalbjahr";LET sachgebietanrechnungskennz=
+"c02 anrechnung vertret";LET kennzhell="#";LET kennzfreistunde="f",ankreuzung
+="x",fehlanzeige="-",lehrerbelegt="1",trenner="�";LET erstestunde=1,
+letztestunde=66,samstagstd=6,stundenprotag=12;LET kennungparaphe="P",
+kennunglv="L";LET laengesugruppe=6,laengeparaphe=4,laengelv=8;LET
+logbucheintrag="Anw. 4.6.1 Vertretungen eingegeben oder geändert";INT VAR
+pruefstatus:=0;INT VAR ifnr;TEXT VAR gueltigeanrechnungskennz:="",
+gueltigeparaphen:="";TEXT VAR paraphe,gespeicherteparaphe,startdatum,
+startstunde,endedatum,endestunde,aktschuljahr:="",akthalbjahr:="";TEXT VAR
+auszeile;TEXT VAR liste:="";TEXT VAR lv,letztebehandeltelv:="",
+vertretungsdatum,hinweisfreistunde,hinweisvorherfrei,hinweisnachherfrei,
+hinweislehrerinsugruppe,hinweislehrbefaehigung,hinweislehrbefart;INT VAR std,
+dauer,erstevertretstd,letztevertretstd,idatum;INT VAR ivertret,maxvertret,
+erstevertretaufbildschirm;LET maxvertretaufbildschirm=14;FILE VAR fvertret;
+LET namevertretdatei="Liste der Vertretungsmöglichkeiten";INT VAR ilv,maxlv;
+ROW letztestundeSTRUCT (INT datum,INT std,TEXT lv)VAR vertret;ROW
+letztestundeBOOL VAR listenankreuzung;INT VAR erstelvinliste;INT VAR izeile;
+LET maxlistenzeile=18,erstesfeldinliste=2,felderprozeileinliste=2;TEXT VAR
+zeitendeslehrers,paraphenzursugruppe,allelvdersugruppe,lehrerderzeitvorher,
+lehrerderzeit,lehrerderzeitnachher,freielehrerderzeit,lehrerdesfachs,
+lehrbefartdesfachs,sugruppe,sugruppen,zuletztbehandeltesugruppen:="";TEXT
+VAR fundlv,fundraum,fundparaphe,suchfach,zuletztbehandeltesfach:="";INT VAR
+poslv,posparaphe,posfachlehrer,possugruppe;BOOL VAR vertretungliegtvor,
+bearbeitungueberobjektliste;INT VAR fstatusstuplan;PROC
+vertretungenorgbearbeiten:eingangspruefung;IF pruefstatus<>0THEN infeld(
+pruefstatus);return(1)ELSE standardmeldung(meldnrbittewarten,"");
+vertretungsorganisationvorbereiten;IF zuvertretendelvvorhandenTHEN
+standardstartproc(maskebearb);bearbeitungueberobjektliste:=FALSE ;
+zeigebsmitvertretungsmoeglichkeiten;standardnprocELSE standardmeldung(
+meldnrkeinunterrichtzurzeit,"");infeld(fnrstartdatum);return(1)FI FI .
+zuvertretendelvvorhanden:ilv<=maxlv.END PROC vertretungenorgbearbeiten;PROC
+vertretungsorganisationvorbereiten:zeitendeslehrers:=allezeitenvon(
+kennungparaphe,paraphe);idatum:=datum(startdatum);erstevertretstd:=stundezu(
+startdatum,startstunde);letztevertretstd:=stundezu(endedatum,endestunde);ilv
+:=0;IF erstevertretstd>letztevertretstdTHEN FOR stdFROM erstevertretstdUPTO
+letztestundeREP IF (zeitendeslehrersSUB std)=lehrerbelegtTHEN
+planeintraglesen(std,kennungparaphe,paraphe,fundlv,fundraum,fundparaphe);ilv
+INCR 1;vertret(ilv).datum:=idatum;vertret(ilv).std:=std;vertret(ilv).lv:=
+fundlv;FI ;IF (stdMOD stundenprotag)=0THEN idatumINCR 1FI PER ;idatumINCR 2;
+erstevertretstd:=erstestunde;FI ;std:=erstevertretstd;WHILE std<=
+letztevertretstdREP IF (zeitendeslehrersSUB std)=lehrerbelegtTHEN
+planeintraglesen(std,kennungparaphe,paraphe,fundlv,fundraum,fundparaphe);ilv
+INCR 1;vertret(ilv).datum:=idatum;vertret(ilv).std:=std;vertret(ilv).lv:=
+fundlv;FI ;IF (stdMOD stundenprotag)=0THEN idatumINCR 1FI ;stdINCR 1PER ;
+maxlv:=ilv;ilv:=1END PROC vertretungsorganisationvorbereiten;PROC
+zeigebsmitvertretungsmoeglichkeiten:lv:=vertret(ilv).lv;std:=vertret(ilv).std
+;idatum:=vertret(ilv).datum;vertretungsdatum:=datum(idatum);
+standardmaskenfeld(vertretungsdatum,fnrvertretdatum);standardmaskenfeld(
+namedestags(tagnummer(vertretungsdatum)),fnrvertrettag);standardmaskenfeld(
+stundennummer(std),fnrvertretstd);standardmaskenfeld(lv,fnrvertretlv);
+standardmaskenfeld(text(paraphe,laengeparaphe),fnrvertretparaphe);
+holemoeglichevertretungenzulv;vertretungliegtvor:=FALSE ;inittupel(
+dnrvertretungen);putwert(fnrvdatum,vertretungsdatum);putintwert(fnrvtagstd,
+std);search(dnrvertretungen,FALSE );WHILE dbstatus=0AND wert(fnrvdatum)=
+vertretungsdatumAND intwert(fnrvtagstd)=stdREP IF compress(wert(
+fnrvveranstaltung))=compress(lv)THEN vertretungliegtvor:=TRUE ;
+standardmaskenfeld(wert(fnrvparaphe),fnrparaphe);standardmaskenfeld(wert(
+fnrvanrechnung),fnranrechnungart);FI ;succ(dnrvertretungen);UNTIL
+vertretungliegtvorPER ;IF NOT vertretungliegtvorTHEN standardmaskenfeld("",
+fnrparaphe);standardmaskenfeld("",fnranrechnungart);FI ;gespeicherteparaphe:=
+standardmaskenfeld(fnrparaphe);infeld(1);standardfelderausgeben;infeld(
+fnrparaphe).END PROC zeigebsmitvertretungsmoeglichkeiten;PROC
+holemoeglichevertretungenzulv:moeglichevertretungsdatenzusammenstellen;
+vertretungsdatenzeigen(1).moeglichevertretungsdatenzusammenstellen:ivertret:=
+0;forget(namevertretdatei,quiet);fvertret:=sequentialfile(output,
+namevertretdatei);IF (stdMOD stundenprotag)=0THEN lehrerderzeitnachher:="";
+lehrerderzeitvorher:=datenderzeit(std-1,kennungparaphe)ELIF (stdMOD
+stundenprotag)=1THEN lehrerderzeitvorher:="";lehrerderzeitnachher:=
+datenderzeit(std+1,kennungparaphe)ELSE lehrerderzeitvorher:=datenderzeit(std-
+1,kennungparaphe);lehrerderzeitnachher:=datenderzeit(std+1,kennungparaphe)FI
+;IF lv<>letztebehandeltelvTHEN letztebehandeltelv:=lv;sugruppen:=
+beteiligteschuelergruppen(kennunglv,lv);IF sugruppen<>
+zuletztbehandeltesugruppenTHEN zuletztbehandeltesugruppen:=sugruppen;
+bestimmedieparaphenzursugruppeFI FI ;freielehrerderzeit:="";
+holeallelehrerdesfachs;inittupel(dnrvertretungen);putwert(fnrvdatum,
+vertretungsdatum);putintwert(fnrvtagstd,std);search(dnrvertretungen,FALSE );
+WHILE dbstatus=0AND wert(fnrvdatum)=vertretungsdatumAND intwert(fnrvtagstd)=
+stdREP IF wert(fnrvanrechnung)=kennzfreistundeTHEN fundparaphe:=wert(
+fnrvparaphe);hinweisfreistunde:=ankreuzung;
+weiterehinweisezugefundenerparaphesetzen;
+ausgabezeilezugefundenerparapheindateischreibenFI ;succ(dnrvertretungen);PER
+;lehrerderzeit:=datenderzeit(std,kennungparaphe);posparaphe:=1;WHILE
+posparaphe<length(gueltigeparaphen)REP fundparaphe:=subtext(gueltigeparaphen,
+posparaphe,posparaphe+laengeparaphe-1);IF suchpos(lehrerderzeit,fundparaphe,
+laengeparaphe)=0THEN hinweisfreistunde:=fehlanzeige;
+weiterehinweisezugefundenerparaphesetzen;
+ausgabezeilezugefundenerparapheindateischreibenFI ;posparapheINCR
+laengeparaphePER ;maxvertret:=ivertret.bestimmedieparaphenzursugruppe:
+allelvdersugruppe:="";possugruppe:=1;WHILE possugruppe<length(sugruppen)REP
+sugruppe:=subtext(sugruppen,possugruppe,possugruppe+laengesugruppe-1);
+allelvdersugruppeCAT lvderschuelergruppe(sugruppe);possugruppeINCR
+laengesugruppePER ;paraphenzursugruppe:="";poslv:=1;WHILE poslv<length(
+allelvdersugruppe)REP fundlv:=subtext(allelvdersugruppe,poslv,poslv+laengelv-
+1);paraphenzursugruppeCAT datenzurlv(kennungparaphe,fundlv);poslvINCR
+laengelvPER END PROC holemoeglichevertretungenzulv;PROC
+holeallelehrerdesfachs:suchfach:=compress(subtext(lv,3,4));IF suchfach<>
+zuletztbehandeltesfachTHEN zuletztbehandeltesfach:=suchfach;
+holeallelehrerdesfachsganzneuFI .holeallelehrerdesfachsganzneu:lehrerdesfachs
+:="";lehrbefartdesfachs:="";dbstatus(0);inittupel(dnrlehrbefaehigungen);
+statleseschleife(dnrlehrbefaehigungen,suchfach,suchfach,fnrlbfach,fnrlbfach,
+PROC lehrbefaehigunglesen);inittupel(dnrfaecher);putwert(fnrffach,suchfach);
+search(dnrfaecher,TRUE );IF dbstatus=0AND wert(fnrffachgrp)<>""THEN suchfach
+:=wert(fnrffachgrp);inittupel(dnrlehrbefaehigungen);statleseschleife(
+dnrlehrbefaehigungen,suchfach,suchfach,fnrlbfach,fnrlbfach,PROC
+lehrbefaehigunglesen);FI ;END PROC holeallelehrerdesfachs;PROC
+lehrbefaehigunglesen(BOOL VAR b):IF dbstatus<>0OR suchfach<>wert(fnrlbfach)
+THEN b:=TRUE ELSE lehrerdesfachsCAT text(wert(fnrlbparaphe),laengeparaphe);
+lehrbefartdesfachsCAT text(wert(fnrlbart),1)FI END PROC lehrbefaehigunglesen;
+PROC weiterehinweisezugefundenerparaphesetzen:IF suchpos(lehrerderzeitvorher,
+fundparaphe,laengeparaphe)>0THEN hinweisvorherfrei:=ankreuzungELSE
+hinweisvorherfrei:=fehlanzeigeFI ;IF suchpos(lehrerderzeitnachher,fundparaphe
+,laengeparaphe)>0THEN hinweisnachherfrei:=ankreuzungELSE hinweisnachherfrei:=
+fehlanzeigeFI ;IF suchpos(paraphenzursugruppe,fundparaphe,laengeparaphe)>0
+THEN hinweislehrerinsugruppe:=ankreuzungELSE hinweislehrerinsugruppe:=
+fehlanzeigeFI ;posfachlehrer:=suchpos(lehrerdesfachs,fundparaphe,
+laengeparaphe);IF posfachlehrer>0THEN hinweislehrbefaehigung:=ankreuzung;
+hinweislehrbefart:=lehrbefartdeslehrersELSE hinweislehrbefaehigung:=
+fehlanzeige;hinweislehrbefart:=" "FI .lehrbefartdeslehrers:lehrbefartdesfachs
+SUB ((posfachlehrerDIV laengeparaphe)+1).END PROC
+weiterehinweisezugefundenerparaphesetzen;PROC
+ausgabezeilezugefundenerparapheindateischreiben:auszeile:=text(fundparaphe,
+laengeparaphe);freielehrerderzeitCAT auszeile;auszeileCAT hinweisfreistunde;
+auszeileCAT hinweisvorherfrei;auszeileCAT hinweisnachherfrei;auszeileCAT
+hinweislehrerinsugruppe;auszeileCAT hinweislehrbefaehigung;auszeileCAT
+hinweislehrbefart;putline(fvertret,auszeile);ivertretINCR 1END PROC
+ausgabezeilezugefundenerparapheindateischreiben;PROC vertretungsdatenzeigen(
+INT CONST abzeile):fvertret:=sequentialfile(modify,namevertretdatei);
+erstevertretaufbildschirm:=abzeile;toline(fvertret,abzeile);col(fvertret,1);
+ivertret:=1;ifnr:=fnrtabellenanfang;WHILE ivertret<=maxvertretaufbildschirm
+REP IF NOT eof(fvertret)THEN readrecord(fvertret,auszeile);standardmaskenfeld
+(auszeile,ifnr);down(fvertret)ELSE standardmaskenfeld(" ",ifnr)FI ;
+ifnrINCR 1;ivertretINCR 1PER ;END PROC vertretungsdatenzeigen;PROC
+vertretungenorgvertretungsdatenlisten:WINDOW VAR w:=startwindow(37,24,77,7);
+fundparaphe:=standardmaskenfeld(fnrparaphe);IF parapheungueltigTHEN
+standardmeldung(meldnrungueltigeparaphe,"");return(1)ELSE standardmeldung(
+meldnrlistewirdaufbereitet,"");bereitelistenausgabeauf;IF menuedraussenTHEN
+reorganizescreenFI ;open(w);auskunfterteilung(liste,w,FALSE );
+reorganizescreen;setlasteditvalues;infeld(1);standardfelderausgeben;infeld(
+fnrparaphe);return(1)FI .bereitelistenausgabeauf:liste:=
+"Vertretungsdaten zu Paraphe ";listeCAT fundparaphe;listeCAT
+auskunftstextende;listeCAT "Datum Zeit Art Lehrveranst.";listeCAT
+auskunftstextende;inittupel(dnrvertretungen);dbstatus(0);statleseschleife(
+ixvpar,fundparaphe,fundparaphe,fnrvparaphe,fnrvparaphe,PROC
+vertretdatenzuparapheaufbereiten);listeCAT "*";listeCAT auskunftstextende.
+END PROC vertretungenorgvertretungsdatenlisten;PROC
+vertretdatenzuparapheaufbereiten(BOOL VAR b):IF dbstatus=0AND wert(
+fnrvparaphe)=fundparapheTHEN listeCAT wert(fnrvdatum);listeCAT " ";listeCAT
+namedestags(tagnummer(wert(fnrvdatum)));listeCAT " ";listeCAT stundennummer(
+intwert(fnrvtagstd));listeCAT ". ";listeCAT text(wert(fnrvanrechnung),2);
+listeCAT " ";listeCAT lvaufbereitet;listeCAT auskunftstextendeELSE b:=TRUE
+FI .lvaufbereitet:fundlv:=wert(fnrvveranstaltung);subtext(fundlv,1,2)+" "+
+subtext(fundlv,3,4)+" "+subtext(fundlv,5,8).END PROC
+vertretdatenzuparapheaufbereiten;PROC vertretungenorginlisteblaettern(BOOL
+CONST vor):IF vorTHEN IF erstevertretaufbildschirm+maxvertretaufbildschirm>
+maxvertretTHEN standardmeldung(meldnrblaetternnichtmoeglich,"")ELSE
+vertretungsdatenzeigen(erstevertretaufbildschirm+maxvertretaufbildschirm)FI
+ELSE IF erstevertretaufbildschirm=1THEN standardmeldung(
+meldnrblaetternnichtmoeglich,"")ELSE vertretungsdatenzeigen(
+erstevertretaufbildschirm-maxvertretaufbildschirm)FI FI ;return(1)END PROC
+vertretungenorginlisteblaettern;PROC vertretungenorgspeichern(BOOL CONST
+speichern):IF speichernTHEN fundparaphe:=standardmaskenfeld(fnrparaphe);IF
+plausifehlerTHEN return(1)ELSE vertretungwieangegebenspeichern;logeintrag(
+logbucheintrag);IF dbstatus<>0THEN standardmeldung(
+meldnrspeicherungunmoeglich,"");return(1)ELSE naechstelvzeigenoderzurueckFI
+FI ELSE standardmeldung(meldnrdatenwerdennichtgespeichert,"");
+naechstelvzeigenoderzurueckFI .plausifehler:IF fundparaphe=""THEN
+standardmeldung(meldnrbittefuellen,"");infeld(fnrparaphe);TRUE ELIF
+parapheungueltigTHEN standardmeldung(meldnrungueltigeparaphe,"");infeld(
+fnrparaphe);TRUE ELIF suchpos(freielehrerderzeit,fundparaphe,laengeparaphe)=0
+THEN standardmeldung(meldnrparapheschonzugeteilt,fundparaphe+kennzhell);
+infeld(fnrparaphe);TRUE ELIF standardmaskenfeld(fnranrechnungart)=
+kennzfreistundeTHEN standardmeldung(meldnrungueltigerschluessel,"");infeld(
+fnranrechnungart);TRUE ELIF ungueltigesanrechnungskennz(standardmaskenfeld(
+fnranrechnungart))THEN standardmeldung(meldnrungueltigerschluessel,"");infeld
+(fnranrechnungart);TRUE ELIF vertretungkannsonichtgespeichertwerdenTHEN
+standardmeldung(meldnrparapheschonzugeteilt,fundparaphe+kennzhell);infeld(
+fnrparaphe);TRUE ELSE FALSE FI .vertretungkannsonichtgespeichertwerden:
+inittupel(dnrvertretungen);putwert(fnrvdatum,vertretungsdatum);putintwert(
+fnrvtagstd,std);putwert(fnrvparaphe,fundparaphe);search(dnrvertretungen,TRUE
+);IF dbstatus<>0THEN FALSE ELIF wert(fnrvanrechnung)=kennzfreistundeTHEN
+delete(dnrvertretungen);FALSE ELIF wert(fnrvveranstaltung)=compress(lv)THEN
+FALSE ELSE TRUE FI .vertretungwieangegebenspeichern:standardmeldung(
+meldnrdatenwerdengespeichert,"");putwert(fnrvdatum,vertretungsdatum);
+putintwert(fnrvtagstd,std);IF gespeicherteparaphe=""THEN putwert(fnrvparaphe,
+fundparaphe);putwert(fnrvanrechnung,standardmaskenfeld(fnranrechnungart));
+putwert(fnrvveranstaltung,compress(lv));insert(dnrvertretungen)ELSE putwert(
+fnrvparaphe,gespeicherteparaphe);search(dnrvertretungen,TRUE );IF dbstatus=0
+THEN putwert(fnrvparaphe,fundparaphe);putwert(fnrvanrechnung,
+standardmaskenfeld(fnranrechnungart));putwert(fnrvveranstaltung,compress(lv))
+;update(dnrvertretungen)FI FI .naechstelvzeigenoderzurueck:IF
+bearbeitungueberobjektlisteTHEN naechsteangekreuztelvsetzenELSE ilvINCR 1FI ;
+IF ilv>maxlvTHEN standardmeldung(meldnrletzterbehandelt,"");IF
+bearbeitungueberobjektlisteTHEN enter(3)ELSE enter(2)FI ELSE
+zeigebsmitvertretungsmoeglichkeiten;return(1)FI .naechsteangekreuztelvsetzen:
+ilvINCR 1;WHILE NOT listenankreuzung(ilv)REP ilvINCR 1UNTIL ilv>maxlvPER .
+END PROC vertretungenorgspeichern;PROC vertretungenorglvauflisten:
+eingangspruefung;IF pruefstatus<>0THEN infeld(pruefstatus);return(1)ELSE
+vertretungsorganisationvorbereiten;IF zuvertretendelvvorhandenTHEN
+bearbeitungueberobjektliste:=TRUE ;standardstartproc(maskeliste);
+standardmeldung(meldnrbittewarten,"");initlistenankreuzung;erstelvinliste:=1;
+zeigelvinliste;vertretungenorglvauflisteneinlesenELSE standardmeldung(
+meldnrkeinunterrichtzurzeit,"");infeld(fnrstartdatum);return(1)FI FI .
+zuvertretendelvvorhanden:ilv<=maxlv.initlistenankreuzung:FOR ilvFROM 1UPTO
+letztestundeREP listenankreuzung(ilv):=FALSE PER .END PROC
+vertretungenorglvauflisten;PROC zeigelvinliste:ifnr:=erstesfeldinliste;ilv:=
+erstelvinliste;FOR izeileFROM 1UPTO maxlistenzeileREP IF ilv>maxlvTHEN
+zeigeleerzeileELSE zeigelvzeile;ilvINCR 1FI ;ifnrINCR felderprozeileinliste
+PER ;infeld(1);standardfelderausgeben;infeld(erstesfeldinliste);.
+zeigeleerzeile:feldschutz(ifnr);standardmaskenfeld("",ifnr);
+standardmaskenfeld(" ",ifnr+1).zeigelvzeile:feldfrei(ifnr);IF
+listenankreuzung(ilv)THEN standardmaskenfeld(ankreuzung,ifnr)ELSE
+standardmaskenfeld("",ifnr)FI ;auszeilezusammenbauen;standardmaskenfeld(
+auszeile,ifnr+1).auszeilezusammenbauen:auszeile:=datum(vertret(ilv).datum);
+auszeileCAT " ";auszeileCAT namedestags(tagnummer(datum(vertret(ilv).datum))
+);auszeileCAT " ";auszeileCAT stundennummer(vertret(ilv).std);auszeileCAT
+". ";auszeileCAT " ";auszeileCAT lvaufbereitet.lvaufbereitet:fundlv:=
+vertret(ilv).lv;subtext(fundlv,1,2)+" "+subtext(fundlv,3,4)+" "+subtext(
+fundlv,5,8).END PROC zeigelvinliste;PROC vertretungenorglvauflisteneinlesen:
+infeld(erstesfeldinliste);standardnproc;ilv:=erstelvinliste;ifnr:=
+erstesfeldinliste;FOR izeileFROM 1UPTO maxlistenzeileREP IF ilv<=maxlvTHEN
+IF standardmaskenfeld(ifnr)<>""THEN listenankreuzung(ilv):=TRUE ELSE
+listenankreuzung(ilv):=FALSE FI ;ilvINCR 1FI ;ifnrINCR felderprozeileinliste
+PER END PROC vertretungenorglvauflisteneinlesen;PROC
+vertretungenorginlvlisteblaettern(BOOL CONST vor):IF vorTHEN IF
+erstelvinliste+maxlistenzeile>maxlvTHEN standardmeldung(
+meldnrblaetternnichtmoeglich,"")ELSE erstelvinlisteINCR maxlistenzeile;
+zeigelvinlisteFI ;return(1)ELSE IF erstelvinliste=1THEN standardmeldung(
+meldnrblaetternnichtmoeglich,"")ELSE erstelvinlisteDECR maxlistenzeile;
+zeigelvinlisteFI ;return(1)FI END PROC vertretungenorginlvlisteblaettern;
+PROC vertretungenorgangekreuztebearbeiten:ilv:=1;WHILE NOT listenankreuzung(
+ilv)REP ilvINCR 1UNTIL ilv>maxlvPER ;IF ilv>maxlvTHEN standardmeldung(
+meldnrletzterbehandelt,"");enter(2)ELSE standardstartproc(maskebearb);
+zeigebsmitvertretungsmoeglichkeiten;standardnprocFI END PROC
+vertretungenorgangekreuztebearbeiten;PROC eingangspruefung:IF aktschuljahr=""
+THEN aktschuljahr:=schulkenndatum(schuljahr);akthalbjahr:=schulkenndatum(
+schulhalbjahr)FI ;stundenplanhalbjahrsetzen(akthalbjahr,aktschuljahr);
+stundenplanbasisundstundenplanholen(fstatusstuplan);IF fstatusstuplan<>0AND
+fstatusstuplan<>8THEN standardmeldung(meldnrstundenplanfehlt,"");pruefstatus
+:=fnrsuchparaphe;LEAVE eingangspruefungFI ;standardpruefe(1,fnrsuchparaphe,0,
+0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE eingangspruefungELSE
+fundparaphe:=standardmaskenfeld(fnrsuchparaphe);IF gueltigeparaphen=""THEN
+holegueltigeparaphenFI ;IF parapheungueltigTHEN standardmeldung(
+meldnrungueltigeparaphe,"");pruefstatus:=fnrsuchparaphe;LEAVE
+eingangspruefungELSE paraphe:=fundparapheFI ;standardpruefe(6,fnrstartdatum,0
+,0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE eingangspruefungELSE
+startdatum:=standardmaskenfeld(fnrstartdatum)FI ;INT VAR ug,og,wochentagnr;
+standardpruefe(2,fnrstartstunde,0,0,"",pruefstatus);IF pruefstatus<>0THEN
+LEAVE eingangspruefungELSE wochentagnr:=tagnummer(startdatum);IF wochentagnr=
+6THEN og:=samstagstdELSE og:=stundenprotagFI ;ug:=erstestunde;standardpruefe(
+3,fnrstartstunde,ug,og,"",pruefstatus);IF pruefstatus<>0THEN LEAVE
+eingangspruefungELSE startstunde:=standardmaskenfeld(fnrstartstunde)FI FI ;
+endedatum:=standardmaskenfeld(fnrendedatum);endestunde:=standardmaskenfeld(
+fnrendestunde);IF endedatum=""THEN endedatum:=startdatum;IF endestunde=""
+THEN endestunde:=startstunde;LEAVE eingangspruefungELSE standardpruefe(2,
+fnrendestunde,0,0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE
+eingangspruefungELIF wochentagnr=6THEN og:=samstagstdELSE og:=stundenprotag
+FI ;ug:=int(startstunde);standardpruefe(3,fnrendestunde,ug,og,"",pruefstatus)
+;IF pruefstatus<>0THEN LEAVE eingangspruefungFI FI ;ELSE standardpruefe(6,
+fnrendedatum,0,0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE eingangspruefung
+FI ;standardpruefe(2,fnrendestunde,0,0,"",pruefstatus);IF pruefstatus<>0THEN
+LEAVE eingangspruefungELSE wochentagnr:=tagnummer(endedatum);IF wochentagnr=6
+THEN og:=samstagstdELSE og:=stundenprotagFI ;ug:=erstestunde;standardpruefe(3
+,fnrendestunde,ug,og,"",pruefstatus);IF pruefstatus<>0THEN LEAVE
+eingangspruefungFI ;FI ;dauer:=datum(endedatum)-datum(startdatum);pruefstatus
+:=fnrendedatum;IF dauer<0THEN standardmeldung(meldnrzweitesdatumkleiner,"");
+LEAVE eingangspruefungELIF dauer=0THEN IF int(endestunde)<int(startstunde)
+THEN standardmeldung(meldnrzweitesdatumkleiner,"");LEAVE eingangspruefungFI
+ELIF dauer>7THEN standardmeldung(meldnrzulangevertretungsdauer,"");LEAVE
+eingangspruefungELIF dauer>6THEN IF int(endestunde)>=int(startstunde)THEN
+standardmeldung(meldnrzulangevertretungsdauer,"");LEAVE eingangspruefungFI
+FI ;pruefstatus:=0;FI ;FI ;END PROC eingangspruefung;BOOL PROC
+parapheungueltig:suchpos(gueltigeparaphen,fundparaphe,laengeparaphe)=0END
+PROC parapheungueltig;PROC holegueltigeparaphen:gueltigeparaphen:="";
+inittupel(dnrlehrer);statleseschleife(dnrlehrer,"","",fnrlparaphe,fnrlparaphe
+,PROC paraphelesen)END PROC holegueltigeparaphen;PROC paraphelesen(BOOL VAR b
+):IF dbstatus<>0THEN b:=TRUE ELSE gueltigeparaphenCAT text(wert(fnrlparaphe),
+laengeparaphe)FI END PROC paraphelesen;BOOL PROC ungueltigesanrechnungskennz(
+TEXT CONST kennz):IF gueltigeanrechnungskennz=""THEN
+holegueltigeanrechnungskennzFI ;pos(gueltigeanrechnungskennz,trenner+kennz+
+trenner)=0END PROC ungueltigesanrechnungskennz;PROC
+holegueltigeanrechnungskennz:gueltigeanrechnungskennz:=trenner;inittupel(
+dnrschluessel);statleseschleife(dnrschluessel,sachgebietanrechnungskennz,"",
+fnrschlsachgebiet,fnrschlschluessel,PROC anrechnungskennzlesen)END PROC
+holegueltigeanrechnungskennz;PROC anrechnungskennzlesen(BOOL VAR b):IF
+dbstatus<>0COR wert(fnrschlsachgebiet)<>sachgebietanrechnungskennzTHEN b:=
+TRUE ELSE gueltigeanrechnungskennzCAT wert(fnrschlschluessel);
+gueltigeanrechnungskennzCAT trennerFI END PROC anrechnungskennzlesen;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;INT PROC tagnummer(TEXT CONST
+datumsangabe):(datum(datumsangabe)+5)MOD 7END PROC tagnummer;TEXT PROC
+namedestags(INT CONST tagesnummer):SELECT tagesnummerOF CASE 0:"So"CASE 1:
+"Mo"CASE 2:"Di"CASE 3:"Mi"CASE 4:"Do"CASE 5:"Fr"CASE 6:"Sa"OTHERWISE ""END
+SELECT .END PROC namedestags;TEXT PROC stundennummer(INT CONST istd):IF (istd
+MOD stundenprotag)=0THEN text(stundenprotag)ELSE text(istdMOD stundenprotag,2
+)FI END PROC stundennummer;INT PROC stundezu(TEXT CONST angtag,angstd):(
+tagnummer(angtag)-1)*stundenprotag+int(angstd)END PROC stundezu;END PACKET
+vertretungenorganisieren
+
diff --git a/app/schulis/2.2.1/src/4.vertretungsdaten bearbeiten b/app/schulis/2.2.1/src/4.vertretungsdaten bearbeiten
new file mode 100644
index 0000000..7034ab6
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.vertretungsdaten bearbeiten
@@ -0,0 +1,279 @@
+PACKET vertretungsdatenbearbeitenDEFINES vertretungsdatenbearbeiteneingang,
+vertretungsdatenbearbeitenstart,vertretungsdatenentfernenstart,
+vertretungsdatenentfernen,vertretungsdatenzeileeinfuegen,
+vertretungsdatenspeichern:LET maskeeingang=
+"ms vertretungsdaten bearbeiten eingang";LET maskebearb=
+"ms vertretungsdaten bearbeiten";LET fnrauswahlparaphe=2,fnrstartparaphe=3,
+fnrauswahldatum=4,fnrstartdatum=5,fnrauswahlentfernen=6,fnrentfernendatum=7;
+LET feldanzmaskeeingang=7;ROW feldanzmaskeeingangTEXT VAR feldbs1;LET
+felderprozeile=6;LET ersteseingabefeld=2;LET erstestabellenfeld=2;LET
+meldnrungueltigerschluessel=55,meldnrungueltigeauswahl=56,
+meldnrplausiwirdgeprueft=57,meldnrloeschen=61,meldnrnichtloeschen=62,
+meldnrloeschfrage=65,meldnrloeschenmitdatum=83,meldnrvertretunggibtsschon=88,
+meldnrdatumfehltzurestangaben=129,meldnrungueltigesdatum=157,
+meldnrdatenwerdengespeichert=301,meldnrdatenwerdennichtgespeichert=303,
+meldnrletztezeilenichteinfuegen=314,meldnrfalschetastezuankreuz=318,
+meldnrfalscheausfuellung=319,meldnrungueltigeparaphe=344;LET
+sachgebietanrechnungskennz="c02 anrechnung vertret";LET kennzhell="#";LET
+erstesdatum="01.01.00",erstestunde=1,samstagstd=6,stundenprotag=12;LET
+trenner="�",punkt=".";LET logbucheintrag=
+"Anw. 4.6.2 Vertretungen eingegeben oder geändert";INT VAR zugriff;BOOL VAR
+eingangsmaskenfehler:=FALSE ;INT VAR pruefstatus:=0,letztecursorfnr:=
+fnrauswahlparaphe;INT VAR aktzeile;INT VAR ifnr;TEXT VAR startparaphe,
+startdatum,entfernendatum;TEXT VAR nfparaphe,nfdatum,nftagstd;TEXT VAR
+gueltigeanrechnungskennz:="",gueltigeparaphen:="";INT VAR izeile,
+anzahlgezeigtezeilen,anzahleingegebenezeilen;LET zeilenanzahl=18;ROW
+zeilenanzahlSTRUCT (TEXT datum,TEXT tag,TEXT stunde,TEXT paraphe,TEXT art,
+TEXT lv,TEXT tagstd)VAR bszeile;BOOL VAR leerenbszeigen;
+initfelderdeseingangsbildschirms;initbszeilepuffer;PROC
+vertretungsdatenbearbeiteneingang:standardstartproc(maskeeingang);
+wertedeseingangsbildschirmsholen;infeld(fnrauswahlparaphe);
+standardfelderausgeben;infeld(letztecursorfnr);standardnprocEND PROC
+vertretungsdatenbearbeiteneingang;PROC vertretungsdatenbearbeitenstart:
+eingangsbehandlung(1);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return(
+1)ELSE wertedeseingangsbildschirmsmerken;zugriffaufvertretungsdatenbestimmen;
+erstensatzlesen;standardstartproc(maskebearb);bsfuellen;infeld(
+ersteseingabefeld);standardnprocFI .zugriffaufvertretungsdatenbestimmen:IF
+standardmaskenfeld(fnrauswahlparaphe)=""THEN zugriff:=dnrvertretungenELSE
+zugriff:=ixvparFI .erstensatzlesen:inittupel(dnrvertretungen);IF zugriff=
+ixvparTHEN putwert(fnrvparaphe,startparaphe)ELSE putwert(fnrvdatum,startdatum
+)FI ;search(zugriff,FALSE );leerenbszeigen:=dbstatus<>ok;IF dbstatus=0THEN
+IF zugriff=dnrvertretungenTHEN IF startdatum<>erstesdatumAND startdatum<>wert
+(fnrvdatum)THEN pred(zugriff)FI ELIF zugriff=ixvparTHEN IF startparaphe<>""
+AND startparaphe<>wert(fnrvparaphe)THEN pred(zugriff)FI FI FI .END PROC
+vertretungsdatenbearbeitenstart;PROC bsfuellen:izeile:=0;IF NOT
+leerenbszeigenTHEN startebildschirmblock(zugriff,zeilenanzahl-1);
+bildschirmblock(PROC satzmerken,BOOL PROC (INT CONST )satzzubehandeln,0);IF
+dbstatus=0THEN succ(zugriff);IF dbstatus<>0THEN inittupel(dnrvertretungen);
+FI ELSE inittupel(dnrvertretungen);FI ;merkesatzalsnachfolgerELSE nfdatum:=
+erstesdatumFI ;evtlleerzeilenhinzufuegen;
+werteausbszeileinstandardfeldersetzen;infeld(1);standardfelderausgeben;.
+evtlleerzeilenhinzufuegen:anzahlgezeigtezeilen:=izeile;WHILE izeile<
+zeilenanzahlREP izeileINCR 1;bszeile(izeile).datum:="";bszeile(izeile).tag:=
+" ";bszeile(izeile).stunde:="";bszeile(izeile).paraphe:="";bszeile(izeile).
+art:="";bszeile(izeile).lv:="";bszeile(izeile).tagstd:="";PER .
+werteausbszeileinstandardfeldersetzen:ifnr:=erstestabellenfeld;FOR izeile
+FROM 1UPTO zeilenanzahlREP standardmaskenfeld(bszeile(izeile).datum,ifnr);
+standardmaskenfeld(bszeile(izeile).tag,ifnr+1);standardmaskenfeld(bszeile(
+izeile).stunde,ifnr+2);standardmaskenfeld(bszeile(izeile).paraphe,ifnr+3);
+standardmaskenfeld(bszeile(izeile).art,ifnr+4);standardmaskenfeld(bszeile(
+izeile).lv,ifnr+5);ifnrINCR felderprozeilePER .merkesatzalsnachfolger:nfdatum
+:=wert(fnrvdatum);nftagstd:=wert(fnrvtagstd);nfparaphe:=wert(fnrvparaphe).
+END PROC bsfuellen;BOOL PROC satzzubehandeln(INT CONST dummynr):IF NOT (
+izeile<zeilenanzahlCAND dbstatus=ok)THEN LEAVE satzzubehandelnWITH FALSE FI ;
+TRUE .END PROC satzzubehandeln;PROC satzmerken:izeileINCR 1;bszeile(izeile).
+datum:=ausgabedatum;bszeile(izeile).tag:=namedestags(tagnummer(wert(fnrvdatum
+)));bszeile(izeile).stunde:=text(ausgabestd);bszeile(izeile).paraphe:=wert(
+fnrvparaphe);bszeile(izeile).art:=wert(fnrvanrechnung);bszeile(izeile).lv:=
+wert(fnrvveranstaltung);bszeile(izeile).tagstd:=wert(fnrvtagstd).ausgabedatum
+:subtext(wert(fnrvdatum),1,2)+subtext(wert(fnrvdatum),4,5)+subtext(wert(
+fnrvdatum),7,8).ausgabestd:INT VAR ausgabezeit:=intwert(fnrvtagstd)MOD
+stundenprotag;IF ausgabezeit=0THEN stundenprotagELSE ausgabezeitFI .END PROC
+satzmerken;PROC vertretungsdatenentfernenstart:eingangsbehandlung(2);IF
+eingangsmaskenfehlerTHEN infeld(pruefstatus);return(1)ELSE
+wertedeseingangsbildschirmsmerken;FOR ifnrFROM fnrauswahlparapheUPTO
+fnrstartdatumREP feldschutz(ifnr)PER ;feldschutz(fnrentfernendatum);infeld(
+fnrauswahlentfernen);standardmeldung(meldnrloeschfrage,"");standardnprocFI
+END PROC vertretungsdatenentfernenstart;PROC vertretungsdatenentfernen(BOOL
+CONST entfernen):IF entfernenTHEN standardmeldung(meldnrloeschen,"");
+entfernendervertretungsdatenvornehmenELSE standardmeldung(meldnrnichtloeschen
+,"")FI ;enter(2).entfernendervertretungsdatenvornehmen:TEXT VAR
+gelesenesdatum,datuminmeldung:="";INT VAR stichdatum:=datum(entfernendatum);
+first(dnrvertretungen);gelesenesdatum:=wert(fnrvdatum);WHILE dbstatus=0CAND
+datum(gelesenesdatum)<stichdatumREP delete(dnrvertretungen);IF gelesenesdatum
+<>datuminmeldungTHEN datuminmeldung:=gelesenesdatum;standardmeldung(
+meldnrloeschenmitdatum,datuminmeldung+kennzhell)FI ;succ(dnrvertretungen);
+gelesenesdatum:=wert(fnrvdatum)PER END PROC vertretungsdatenentfernen;PROC
+vertretungsdatenzeileeinfuegen(BOOL CONST einfuegen):INT VAR erstefnr;IF
+einfuegenTHEN zeileeinfuegenELSE zeileloeschenFI ;return(1).zeileeinfuegen:
+aktzeile:=bearbeitungszeilezufeld(infeld);IF aktzeile=zeilenanzahlTHEN
+standardmeldung(meldnrletztezeilenichteinfuegen,"");LEAVE zeileeinfuegenFI ;
+IF bszeile(zeilenanzahl).datum<>""THEN merkeverdraengtensatzalsnachfolgesatz;
+anzahlgezeigtezeilen:=zeilenanzahlFI ;FOR izeileFROM zeilenanzahl-1DOWNTO
+aktzeile+1REP zeileiminternenpufferverschieben;
+wertederzeileaufdembildschirmverschiebenPER ;izeile:=aktzeile+1;
+leerzeileschreiben;werteineingefuegterzeilevermerken;neuezeilenausgeben.
+merkeverdraengtensatzalsnachfolgesatz:startdatum:=bszeile(zeilenanzahl).datum
+;nfdatum:=subtext(startdatum,1,2)+punkt+subtext(startdatum,3,4)+punkt+subtext
+(startdatum,5,6);nfparaphe:=bszeile(zeilenanzahl).paraphe;nftagstd:=bszeile(
+zeilenanzahl).tagstd.zeileiminternenpufferverschieben:bszeile(izeile+1).datum
+:=bszeile(izeile).datum;bszeile(izeile+1).tag:=bszeile(izeile).tag;bszeile(
+izeile+1).stunde:=bszeile(izeile).stunde;bszeile(izeile+1).paraphe:=bszeile(
+izeile).paraphe;bszeile(izeile+1).art:=bszeile(izeile).art;bszeile(izeile+1).
+lv:=bszeile(izeile).lv;bszeile(izeile+1).tagstd:=bszeile(izeile).tagstd;.
+wertederzeileaufdembildschirmverschieben:FOR ifnrFROM erstesfeldderzeileUPTO
+letztesfeldderzeileREP standardmaskenfeld(standardmaskenfeld(ifnr),ifnr+
+felderprozeile)PER .erstesfeldderzeile:(izeile-1)*felderprozeile+
+erstestabellenfeld.letztesfeldderzeile:erstesfeldderzeile+felderprozeile-1.
+werteineingefuegterzeilevermerken:bszeile(izeile).datum:="";bszeile(izeile).
+tag:=" ";bszeile(izeile).stunde:="";bszeile(izeile).paraphe:="";bszeile(
+izeile).art:="";bszeile(izeile).lv:="";bszeile(izeile).tagstd:="";.
+zeileloeschen:izeile:=bearbeitungszeilezufeld(infeld);leerzeileschreiben;
+neuezeilenausgeben.leerzeileschreiben:erstefnr:=erstesfeldderzeile;
+standardmaskenfeld("",erstefnr);standardmaskenfeld(" ",erstefnr+1);FOR ifnr
+FROM erstefnr+2UPTO letztesfeldderzeileREP standardmaskenfeld("",ifnr)PER .
+neuezeilenausgeben:infeld(erstefnr);standardfelderausgeben;infeld(erstefnr).
+END PROC vertretungsdatenzeileeinfuegen;INT PROC bearbeitungszeilezufeld(INT
+CONST feldnr):((feldnr-erstestabellenfeld)DIV felderprozeile)+1END PROC
+bearbeitungszeilezufeld;PROC vertretungsdatenspeichern(BOOL CONST speichern):
+IF speichernTHEN standardmeldung(meldnrplausiwirdgeprueft,"");plausipruefung
+ELSE pruefstatus:=0FI ;IF pruefstatus<>0THEN infeld(pruefstatus);return(1)
+ELSE datenspeichern(speichern);IF nachfolgesatzvorhandenTHEN
+holewertedesnachfolgersatzes;search(dnrvertretungen,TRUE );IF dbstatus<>0
+THEN search(dnrvertretungen,FALSE )FI ;izeile:=0;IF satzzubehandeln(izeile)
+THEN changeindex;leerenbszeigen:=FALSE ;naechstenbildschirmzeigenELSE enter(2
+)FI ELIF letzteeingabezeilegefuelltTHEN leerenbszeigen:=TRUE ;
+naechstenbildschirmzeigenELSE enter(2)FI ;FI .nachfolgesatzvorhanden:nfdatum
+<>erstesdatum.letzteeingabezeilegefuellt:standardmaskenfeld((zeilenanzahl-1)*
+felderprozeile+ersteseingabefeld)<>"".holewertedesnachfolgersatzes:putwert(
+fnrvdatum,nfdatum);putwert(fnrvtagstd,nftagstd);putwert(fnrvparaphe,nfparaphe
+).naechstenbildschirmzeigen:bsfuellen;infeld(ersteseingabefeld);return(1).
+END PROC vertretungsdatenspeichern;PROC datenspeichern(BOOL CONST speichern):
+IF speichernTHEN standardmeldung(meldnrdatenwerdengespeichert,"");
+datenspeicherungdurchfuehrenELSE standardmeldung(
+meldnrdatenwerdennichtgespeichert,"")FI END PROC datenspeichern;PROC
+datenspeicherungdurchfuehren:FOR izeileFROM 1UPTO zeilenanzahlREP
+holevergleichswerte;IF vertretungseintragloeschenTHEN aenderungszeileanzeigen
+;altevertretungloeschenELIF vertretungseintrageinfuegenTHEN
+aenderungszeileanzeigen;neuevertretungeinfuegenELIF
+vertretungseintragueberschreibenTHEN aenderungszeileanzeigen;
+altevertretungupdateFI PER ;logeintrag(logbucheintrag).holevergleichswerte:
+INT VAR prueffnr:=datumfnrin(izeile);TEXT VAR pruefdatum:=standardmaskenfeld(
+prueffnr);TEXT VAR altesdatum:=bszeile(izeile).datum.
+vertretungseintragloeschen:pruefdatum=""CAND altesdatum<>"".
+altevertretungloeschen:setzealtesuchwerteindbpuffer;search(dnrvertretungen,
+TRUE );IF dbstatus=0THEN delete(dnrvertretungen)FI .
+vertretungseintrageinfuegen:pruefdatum<>""CAND altesdatum="".
+neuevertretungeinfuegen:setzeneuewerteindbpuffer;insert(dnrvertretungen).
+vertretungseintragueberschreiben:NOT (standardmaskenfeld(prueffnr)=bszeile(
+izeile).datumCAND standardmaskenfeld(prueffnr+2)=bszeile(izeile).stundeCAND
+standardmaskenfeld(prueffnr+3)=bszeile(izeile).parapheCAND standardmaskenfeld
+(prueffnr+4)=bszeile(izeile).artCAND standardmaskenfeld(prueffnr+5)=bszeile(
+izeile).lv).altevertretungupdate:setzealtesuchwerteindbpuffer;search(
+dnrvertretungen,TRUE );setzeneuewerteindbpuffer;update(dnrvertretungen).
+setzealtesuchwerteindbpuffer:pruefdatum:=bszeile(izeile).datum;pruefdatum:=
+subtext(pruefdatum,1,2)+punkt+subtext(pruefdatum,3,4)+punkt+subtext(
+pruefdatum,5,6);putwert(fnrvdatum,pruefdatum);putwert(fnrvtagstd,bszeile(
+izeile).tagstd);putwert(fnrvparaphe,bszeile(izeile).paraphe).
+setzeneuewerteindbpuffer:pruefdatum:=standardmaskenfeld(prueffnr);pruefdatum
+:=subtext(pruefdatum,1,2)+punkt+subtext(pruefdatum,3,4)+punkt+subtext(
+pruefdatum,5,6);putwert(fnrvdatum,pruefdatum);putintwert(fnrvtagstd,
+wochenstunde);putwert(fnrvparaphe,standardmaskenfeld(prueffnr+3));putwert(
+fnrvanrechnung,standardmaskenfeld(prueffnr+4));putwert(fnrvveranstaltung,
+standardmaskenfeld(prueffnr+5));.wochenstunde:(tagnummer(pruefdatum)-1)*
+stundenprotag+int(standardmaskenfeld(prueffnr+2)).END PROC
+datenspeicherungdurchfuehren;PROC aenderungszeileanzeigen:infeld((izeile-1)*
+felderprozeile+ersteseingabefeld)END PROC aenderungszeileanzeigen;INT PROC
+datumfnrin(INT CONST zeilennr):(zeilennr-1)*felderprozeile+ersteseingabefeld
+END PROC datumfnrin;INT PROC tagnummer(TEXT CONST datumsangabe):(datum(
+datumsangabe)+5)MOD 7END PROC tagnummer;TEXT PROC namedestags(INT CONST
+tagesnummer):SELECT tagesnummerOF CASE 0:"So"CASE 1:"Mo"CASE 2:"Di"CASE 3:
+"Mi"CASE 4:"Do"CASE 5:"Fr"CASE 6:"Sa"OTHERWISE ""END SELECT .END PROC
+namedestags;PROC eingangsbehandlung(INT CONST art):LET bearbeiten=1,entfernen
+=2;reinitparsing;eingangsmaskenfehler:=FALSE ;ankreuzfelderpruefen;IF
+mehralseineauswahlangekreuztTHEN standardmeldung(meldnrungueltigeauswahl,"");
+pruefstatus:=fnrauswahlparaphe;eingangsmaskenfehler:=TRUE ;LEAVE
+eingangsbehandlungFI ;IF entfernenpruefungTHEN IF ankreuz1THEN ankreuzfehler(
+fnrauswahlparaphe);LEAVE eingangsbehandlungELIF ankreuz2THEN ankreuzfehler(
+fnrauswahldatum);LEAVE eingangsbehandlungFI ELIF bearbeitenpruefungTHEN IF
+ankreuz3THEN ankreuzfehler(fnrauswahlentfernen);LEAVE eingangsbehandlungFI
+FI ;IF bearbeitenpruefungTHEN IF ankreuz1THEN IF standardmaskenfeld(
+fnrstartdatum)<>""THEN eintragfehler(fnrstartdatum);LEAVE eingangsbehandlung
+ELIF standardmaskenfeld(fnrentfernendatum)<>""THEN eintragfehler(
+fnrentfernendatum);LEAVE eingangsbehandlungFI ;startparaphe:=
+standardmaskenfeld(fnrstartparaphe);ELIF ankreuz2THEN IF standardmaskenfeld(
+fnrstartparaphe)<>""THEN eintragfehler(fnrstartparaphe);LEAVE
+eingangsbehandlungELIF standardmaskenfeld(fnrentfernendatum)<>""THEN
+eintragfehler(fnrentfernendatum);LEAVE eingangsbehandlungFI ;IF
+standardmaskenfeld(fnrstartdatum)=""THEN startdatum:=erstesdatum;ELSE
+standardpruefe(6,fnrstartdatum,0,0,"",pruefstatus);IF pruefstatus<>0THEN
+eingangsmaskenfehler:=TRUE ;LEAVE eingangsbehandlungELSE startdatum:=
+standardmaskenfeld(fnrstartdatum);startdatum:=subtext(startdatum,1,2)+punkt+
+subtext(startdatum,3,4)+punkt+subtext(startdatum,5,6)FI ;FI ;FI ;FI ;IF
+entfernenpruefungTHEN IF standardmaskenfeld(fnrstartparaphe)<>""THEN
+eintragfehler(fnrstartparaphe);LEAVE eingangsbehandlungELIF
+standardmaskenfeld(fnrstartdatum)<>""THEN eintragfehler(fnrstartdatum);LEAVE
+eingangsbehandlungFI ;standardpruefe(6,fnrentfernendatum,0,0,"",pruefstatus);
+IF pruefstatus<>0THEN eingangsmaskenfehler:=TRUE ELSE entfernendatum:=
+standardmaskenfeld(fnrentfernendatum);entfernendatum:=subtext(entfernendatum,
+1,2)+punkt+subtext(entfernendatum,3,4)+punkt+subtext(entfernendatum,5,6)FI ;
+FI ;.ankreuzfelderpruefen:INT VAR summe:=0;IF ankreuz1THEN summeINCR 1FI ;IF
+ankreuz2THEN summeINCR 1FI ;IF ankreuz3THEN summeINCR 1FI .
+mehralseineauswahlangekreuzt:summe<>1.ankreuz1:standardmaskenfeld(
+fnrauswahlparaphe)<>"".ankreuz2:standardmaskenfeld(fnrauswahldatum)<>"".
+ankreuz3:standardmaskenfeld(fnrauswahlentfernen)<>"".bearbeitenpruefung:art=
+bearbeiten.entfernenpruefung:art=entfernen.END PROC eingangsbehandlung;PROC
+ankreuzfehler(INT CONST fehlerfeld):pruefstatus:=fehlerfeld;
+eingangsmaskenfehler:=TRUE ;standardmeldung(meldnrfalschetastezuankreuz,"").
+END PROC ankreuzfehler;PROC eintragfehler(INT CONST fehlerfeld):pruefstatus:=
+fehlerfeld;eingangsmaskenfehler:=TRUE ;standardmeldung(
+meldnrfalscheausfuellung,"").END PROC eintragfehler;PROC plausipruefung:
+pruefstatus:=0;vertretungseintraegepruefen;IF eingabefehlerTHEN LEAVE
+plausipruefungFI ;datenkonsistenzpruefen;IF eingabefehlerTHEN LEAVE
+plausipruefungFI .eingabefehler:pruefstatus<>0.END PROC plausipruefung;PROC
+vertretungseintraegepruefen:anzahleingegebenezeilen:=0;IF gueltigeparaphen=""
+THEN holegueltigeparaphenFI ;IF gueltigeanrechnungskennz=""THEN
+holegueltigeanrechnungskennzFI ;FOR izeileFROM 1UPTO zeilenanzahlREP IF
+datumsfehlerTHEN LEAVE vertretungseintraegepruefenFI PER .datumsfehler:INT
+VAR prueffnr:=datumfnrin(izeile);TEXT VAR pruefdatum:=standardmaskenfeld(
+prueffnr);IF pruefdatumleerTHEN IF eintraginfolgefelderderzeileTHEN
+pruefstatus:=prueffnr;standardmeldung(meldnrdatumfehltzurestangaben,"");TRUE
+ELSE FALSE FI ELSE standardpruefe(6,prueffnr,0,0,"",pruefstatus);IF
+pruefstatus<>0THEN TRUE ELSE pruefdatum:=subtext(pruefdatum,1,2)+punkt+
+subtext(pruefdatum,3,4)+punkt+subtext(pruefdatum,5,6);IF tagnummer(pruefdatum
+)=0THEN pruefstatus:=prueffnr;standardmeldung(meldnrungueltigesdatum,"");
+TRUE ELIF stundeungueltigTHEN TRUE ELIF parapheungueltigTHEN standardmeldung(
+meldnrungueltigeparaphe,"");pruefstatus:=prueffnr+3;TRUE ELIF
+anrechnungskennzungueltigTHEN standardmeldung(meldnrungueltigerschluessel,"")
+;pruefstatus:=prueffnr+4;TRUE ELSE anzahleingegebenezeilenINCR 1;FALSE FI FI
+FI .pruefdatumleer:pruefdatum="".eintraginfolgefelderderzeile:
+standardmaskenfeld(prueffnr+2)<>""COR standardmaskenfeld(prueffnr+3)<>""COR
+standardmaskenfeld(prueffnr+4)<>""COR standardmaskenfeld(prueffnr+5)<>"".
+stundeungueltig:INT VAR ug,og,wochentagnr;standardpruefe(2,prueffnr+2,0,0,"",
+pruefstatus);IF pruefstatus<>0THEN TRUE ELSE wochentagnr:=tagnummer(
+pruefdatum);IF wochentagnr=6THEN og:=samstagstdELSE og:=stundenprotagFI ;ug:=
+erstestunde;standardpruefe(3,prueffnr+2,ug,og,"",pruefstatus);pruefstatus<>0
+FI .parapheungueltig:pos(gueltigeparaphen,trenner+standardmaskenfeld(prueffnr
++3)+trenner)=0.anrechnungskennzungueltig:pos(gueltigeanrechnungskennz,trenner
++standardmaskenfeld(prueffnr+4)+trenner)=0.END PROC
+vertretungseintraegepruefen;PROC datenkonsistenzpruefen:FOR izeileFROM 1UPTO
+zeilenanzahlREP IF zeileungueltigTHEN pruefstatus:=prueffnr;standardmeldung(
+meldnrvertretunggibtsschon,"");LEAVE datenkonsistenzpruefenFI PER .
+zeileungueltig:IF leerzeileTHEN FALSE ELIF
+zeileistimschluesselunveraendertgebliebenTHEN FALSE ELSE
+ergebnisderpruefungzeileschongespeichertFI .leerzeile:INT VAR prueffnr:=
+datumfnrin(izeile);TEXT VAR pruefdatum:=standardmaskenfeld(prueffnr);
+pruefdatum="".zeileistimschluesselunveraendertgeblieben:standardmaskenfeld(
+prueffnr)=bszeile(izeile).datumCAND standardmaskenfeld(prueffnr+2)=bszeile(
+izeile).stundeCAND standardmaskenfeld(prueffnr+3)=bszeile(izeile).paraphe.
+ergebnisderpruefungzeileschongespeichert:neuewerteindbpuffersetzen;search(
+dnrvertretungen,TRUE );dbstatus=0.neuewerteindbpuffersetzen:pruefdatum:=
+subtext(pruefdatum,1,2)+punkt+subtext(pruefdatum,3,4)+punkt+subtext(
+pruefdatum,5,6);putwert(fnrvdatum,pruefdatum);putintwert(fnrvtagstd,
+wochenstunde);putwert(fnrvparaphe,standardmaskenfeld(prueffnr+3)).
+wochenstunde:(tagnummer(pruefdatum)-1)*stundenprotag+int(standardmaskenfeld(
+prueffnr+2)).END PROC datenkonsistenzpruefen;PROC holegueltigeparaphen:
+gueltigeparaphen:=trenner;inittupel(dnrlehrer);statleseschleife(dnrlehrer,"",
+"",fnrlparaphe,fnrlparaphe,PROC paraphelesen)END PROC holegueltigeparaphen;
+PROC paraphelesen(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE
+gueltigeparaphenCAT wert(fnrlparaphe);gueltigeparaphenCAT trennerFI END PROC
+paraphelesen;PROC holegueltigeanrechnungskennz:gueltigeanrechnungskennz:=
+trenner;inittupel(dnrschluessel);statleseschleife(dnrschluessel,
+sachgebietanrechnungskennz,"",fnrschlsachgebiet,fnrschlschluessel,PROC
+anrechnungskennzlesen)END PROC holegueltigeanrechnungskennz;PROC
+anrechnungskennzlesen(BOOL VAR b):IF dbstatus<>0COR wert(fnrschlsachgebiet)<>
+sachgebietanrechnungskennzTHEN b:=TRUE ELSE gueltigeanrechnungskennzCAT wert(
+fnrschlschluessel);gueltigeanrechnungskennzCAT trennerFI END PROC
+anrechnungskennzlesen;PROC initfelderdeseingangsbildschirms:INT VAR i;FOR i
+FROM 1UPTO feldanzmaskeeingangREP feldbs1(i):=""PER END PROC
+initfelderdeseingangsbildschirms;PROC wertedeseingangsbildschirmsmerken:INT
+VAR i;letztecursorfnr:=infeld;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1(
+i):=standardmaskenfeld(i)PER END PROC wertedeseingangsbildschirmsmerken;PROC
+wertedeseingangsbildschirmsholen:INT VAR i;FOR iFROM 1UPTO
+feldanzmaskeeingangREP standardmaskenfeld(feldbs1(i),i)PER END PROC
+wertedeseingangsbildschirmsholen;PROC initbszeilepuffer:FOR izeileFROM 1UPTO
+zeilenanzahlREP bszeile(izeile).datum:="";bszeile(izeile).tag:="";bszeile(
+izeile).stunde:="";bszeile(izeile).paraphe:="";bszeile(izeile).art:="";
+bszeile(izeile).lv:="";bszeile(izeile).tagstd:="";PER END PROC
+initbszeilepuffer;END PACKET vertretungsdatenbearbeiten
+
diff --git a/app/schulis/2.2.1/src/4.zeitwuensche bearbeiten b/app/schulis/2.2.1/src/4.zeitwuensche bearbeiten
new file mode 100644
index 0000000..c52a4a9
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.zeitwuensche bearbeiten
@@ -0,0 +1,243 @@
+PACKET zeitwuenschebearbeitenDEFINES zeitwuenschebearbeiten,
+zeitwuenschekopieren,zeitwuenschespeichern:LET bearbmaske=
+"ms zeitwuensche bearb",zulgewichte="�-3�-2�-1�-0�+0�+1�+2�+3�",fldkzlehrer=2
+,fldparaphe=3,fldkzsugrup=4,fldjgst=5,fldkenn=6,fldkzraeume=7,fldraeume=8,
+fldkzfaecher=9,fldfaecher=10,fldkzkopp=11,fldkopp=12,fldhjkz=13,bearbfldbez=2
+,bearbfldmo1=3,bearbfldmo12=14,bearbflddi12=26,bearbfldmi12=38,bearbflddo12=
+50,bearbfldfr12=62,bearbfldsa6=68,bearbfldutanz=69,bearbfldutgew=70,
+bearbfldvmanz=71,bearbfldvmgew=72,bearbfldnmanz=73,bearbfldnmgew=74,posanzut=
+1,posgewut=3,posanzvm=4,posgewvm=6,posanznm=7,posgewnm=9,laengeallezeitw=132,
+laengejgst=2,laengeparaphe=4,laengefach=2,laengesugrup=6,laengesugrupkenn=4,
+laengeraum=4,laengebezfeld=22,meldungwarten=69,meldungobjektunbek=55,
+meldungfalschekz=56,meldungkeinelehrer=337,meldungkeinelv=321,
+meldungkeinefaecher=68,meldungkeinesugrup=332,meldungkeineraeume=365,
+meldungwertfalsch=34,meldungwertfehlt=129,meldungpruefen=329,meldungspeichern
+=50,meldungnichtsp=63,trenner="�",leererunbestwunsch=" ",
+raumkenndaten="c02 raeume",schuljahr="Schuljahr",halbjahr="Schulhalbjahr",
+kennpar="P",kennsugrup="S",kennraum="R",kennfach="F",kennkopp="K",minus="-",
+plus="+";INT VAR i;INT VAR prueffeld:=2,fall,objektlaenge:=0,anztage,anzvm,
+anznm,dbstatusbeimholen,hjkenn:=-1;TEXT VAR schj:="",schhj:="",hjkennz:="",
+startobjekt,allefaecher:=trenner,alleraeume:=trenner,alleparaphen:=trenner,
+allesugruppen:=trenner;TEXT VAR bearbfolge:="",bezug,bsbestzw:="",bsunbestzw
+:="",dbbestzw:="",dbunbestzw:="";TEXT VAR leererbestwunsch:=
+" "+
+" ";LET
+logbucheintrag="Anw. 4.1.4 Zeitwünsche Lehrer geändert";PROC
+zeitwuenschebearbeiten:standardmeldung(meldungwarten,"");
+pruefeingmaskeundsetzewerte;standardstartproc(bearbmaske);
+standardkopfmaskeaktualisieren(text(vergleichsknoten)+" "+schhj+"."+" "+text(
+schj,2)+"/"+subtext(schj,3));zeitwuenscheausgeben(startobjekt,bezug);
+standardnproc.pruefeingmaskeundsetzewerte:hjkennz:=standardmaskenfeld(fldhjkz
+);IF (hjkenn=0CAND hjkennz="")COR (hjkenn=1CAND hjkennz<>"")COR hjkenn=-1
+THEN ermittlehalbjahrFI ;IF standardmaskenfeld(fldkzlehrer)<>""THEN fall:=
+fldkzlehrer;bezug:=kennpar;IF restleer(fall)THEN startobjekt:=
+standardmaskenfeld(fldparaphe);IF startobjekt<>""THEN startobjekt:=text(
+startobjekt,laengeparaphe);IF bestandsfehlerTHEN IF alleparaphen<>trenner
+THEN standardmeldung(meldungobjektunbek,"");infeld(fall+1);return(1)FI ;
+LEAVE zeitwuenschebearbeitenELSE bearbfolge:=subtext(alleparaphen,pos(
+alleparaphen,trenner+startobjekt+trenner)+laengeparaphe+2);FI ;ELSE IF
+alleparaphen=trennerTHEN holalleparaphenFI ;IF alleparaphen=trennerTHEN
+standardmeldung(meldungkeinelehrer,"");infeld(fall+1);return(1);LEAVE
+zeitwuenschebearbeitenELSE bearbfolge:=subtext(alleparaphen,laengeparaphe+3);
+startobjekt:=subtext(alleparaphen,2,2+laengeparaphe-1)FI ;FI ;objektlaenge:=
+laengeparaphe;ELSE standardmeldung(meldungfalschekz,"");infeld(prueffeld);
+return(1);LEAVE zeitwuenschebearbeitenFI ELIF standardmaskenfeld(fldkzsugrup)
+<>""THEN fall:=fldkzsugrup;bezug:=kennsugrup;IF restleer(fall)THEN
+objektlaenge:=laengejgst+laengesugrupkenn;startobjekt:=standardmaskenfeld(
+fldjgst);IF startobjekt<>""THEN startobjekt:=jgstaufber(startobjekt);
+startobjektCAT text(standardmaskenfeld(fldkenn),laengesugrupkenn);IF
+bestandsfehlerTHEN IF allesugruppen<>trennerTHEN standardmeldung(
+meldungobjektunbek,"");infeld(fall+1);return(1)FI ;LEAVE
+zeitwuenschebearbeitenELSE bearbfolge:=subtext(allesugruppen,pos(
+allesugruppen,trenner+startobjekt+trenner)+objektlaenge+2);FI ;ELSE IF
+allesugruppen=trennerTHEN holallesugruppen;FI ;IF allesugruppen=trennerTHEN
+standardmeldung(meldungobjektunbek,"");infeld(fall+1);return(1);LEAVE
+zeitwuenschebearbeitenELSE bearbfolge:=subtext(allesugruppen,laengesugrup+3);
+startobjekt:=subtext(allesugruppen,2,2+laengesugrup-1)FI ;FI ;ELSE
+standardmeldung(meldungfalschekz,"");infeld(prueffeld);return(1);LEAVE
+zeitwuenschebearbeitenFI ELIF standardmaskenfeld(fldkzraeume)<>""THEN fall:=
+fldkzraeume;bezug:=kennraum;IF restleer(fall)THEN startobjekt:=
+standardmaskenfeld(fldraeume);IF startobjekt<>""THEN startobjekt:=text(
+startobjekt,laengeraum);IF bestandsfehlerTHEN IF alleraeume<>trennerTHEN
+standardmeldung(meldungobjektunbek,"");infeld(fall+1);return(1)FI ;LEAVE
+zeitwuenschebearbeitenELSE bearbfolge:=subtext(alleraeume,pos(alleraeume,
+trenner+startobjekt+trenner)+laengeraum+2);FI ;ELSE IF alleraeume=trenner
+THEN holalleraeumeFI ;IF alleraeume=trennerTHEN standardmeldung(
+meldungkeineraeume,"");infeld(fall+1);return(1);LEAVE zeitwuenschebearbeiten
+ELSE bearbfolge:=subtext(alleraeume,laengeraum+3);startobjekt:=subtext(
+alleraeume,2,2+laengeraum-1)FI ;FI ;objektlaenge:=laengeraum;ELSE
+standardmeldung(meldungfalschekz,"");infeld(prueffeld);return(1);LEAVE
+zeitwuenschebearbeitenFI ELIF standardmaskenfeld(fldkzfaecher)<>""THEN fall:=
+fldkzfaecher;bezug:=kennfach;IF restleer(fall)THEN startobjekt:=
+standardmaskenfeld(fldfaecher);IF startobjekt<>""THEN startobjekt:=text(
+startobjekt,laengefach);IF bestandsfehlerTHEN IF allefaecher<>trennerTHEN
+standardmeldung(meldungobjektunbek,"");infeld(fall+1);return(1);FI ;LEAVE
+zeitwuenschebearbeitenELSE bearbfolge:=subtext(allefaecher,pos(allefaecher,
+trenner+startobjekt+trenner)+laengefach+2);FI ;ELSE IF allefaecher=trenner
+THEN holallefaecherFI ;IF allefaecher=trennerTHEN standardmeldung(
+meldungkeinefaecher,"");infeld(fall+1);return(1);LEAVE zeitwuenschebearbeiten
+ELSE bearbfolge:=subtext(allefaecher,laengefach+3);startobjekt:=subtext(
+allefaecher,2,2+laengefach-1)FI ;FI ;objektlaenge:=laengefach;ELSE
+standardmeldung(meldungfalschekz,"");infeld(prueffeld);return(1);LEAVE
+zeitwuenschebearbeitenFI ELIF standardmaskenfeld(fldkzkopp)<>""THEN fall:=
+fldkzkopp;bezug:=kennkopp;IF restleer(fall)THEN startobjekt:=
+standardmaskenfeld(fldkopp);IF startobjekt<>""THEN IF bestandsfehlerTHEN IF
+wert(fnrlvsj)=schjCAND wert(fnrlvhj)=schhjTHEN standardmeldung(
+meldungobjektunbek,"");infeld(fall+1);return(1)FI ;LEAVE
+zeitwuenschebearbeitenFI ;ELSE holestartobjektFI ;ELSE standardmeldung(
+meldungfalschekz,"");infeld(prueffeld);return(1);LEAVE zeitwuenschebearbeiten
+FI ELSE standardmeldung(meldungwertfehlt,"");infeld(fldkzlehrer);return(1);
+LEAVE zeitwuenschebearbeitenFI .ermittlehalbjahr:allesugruppen:=trenner;schhj
+:=schulkenndatum(halbjahr);schj:=schulkenndatum(schuljahr);IF hjkennz=""THEN
+geplanteshjundsjberechnen(schhj,schj);hjkenn:=1ELSE hjkenn:=0FI .
+holestartobjekt:inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,schj);
+putwert(fnrlvhj,schhj);putwert(fnrlvkopplung,"");search(ixlvsjhjkopp,FALSE );
+IF wert(fnrlvsj)=schjCAND wert(fnrlvhj)=schhjCAND dbstatus<2THEN startobjekt
+:=wert(fnrlvkopplung)ELSE standardmeldung(meldungkeinelv,"");infeld(fall);
+return(1);LEAVE zeitwuenschebearbeitenFI .END PROC zeitwuenschebearbeiten;
+PROC zeitwuenscheausgeben(TEXT CONST objekt,bez):IF fall=fldkzlehrerTHEN
+standardmaskenfeld(text("Lehrer: "+objekt,laengebezfeld),bearbfldbez)ELIF
+fall=fldkzsugrupTHEN standardmaskenfeld(text("Schülergruppe: "+startobjekt,
+laengebezfeld),bearbfldbez)ELIF fall=fldkzraeumeTHEN standardmaskenfeld(text(
+"Raum: "+objekt,laengebezfeld),bearbfldbez)ELIF fall=fldkzfaecherTHEN
+standardmaskenfeld(text("Fach: "+objekt,laengebezfeld),bearbfldbez)ELSE
+standardmaskenfeld(text("Kopplung: "+objekt,laengebezfeld),bearbfldbez)FI ;
+infeld(1);loeschebildschirm;zeitwunschholen;IF dbstatus=0THEN
+zeitwunschausgebenELSE setzedbwerteFI ;standardfelderausgeben;infeld(
+bearbfldmo1).loeschebildschirm:FOR iFROM bearbfldmo1UPTO bearbfldnmgewREP
+standardmaskenfeld("",i)PER .zeitwunschholen:inittupel(dnrzeitwuensche);
+putwert(fnrzwsj,schj);putwert(fnrzwhj,schhj);putwert(fnrzwbezug,bez);putwert(
+fnrzwbezugsobjekt,compress(objekt));search(dnrzeitwuensche,TRUE );
+dbstatusbeimholen:=dbstatus.zeitwunschausgeben:dbbestzw:=wert(
+fnrzwbestimmtewuensche);dbunbestzw:=wert(fnrzwunbestimmtewuensche);
+gibbestwuenscheaus(dbbestzw);gibunbestwuenscheaus(dbunbestzw).setzedbwerte:
+dbbestzw:=leererbestwunsch;dbunbestzw:=leererunbestwunsch.END PROC
+zeitwuenscheausgeben;PROC gibbestwuenscheaus(TEXT CONST bestwunsch):INT VAR
+suchpos:=1;TEXT VAR wunsch:="";WHILE suchpos<>0REP suchpos:=pos(bestwunsch,
+minus,suchpos);IF suchpos<>0THEN wunsch:=subtext(bestwunsch,suchpos,suchpos+1
+);standardmaskenfeld(wunsch,suchposDIV 2+3);suchposINCR 1FI ;PER ;suchpos:=1;
+WHILE suchpos<>0REP suchpos:=pos(bestwunsch,plus,suchpos);IF suchpos<>0THEN
+wunsch:=subtext(bestwunsch,suchpos,suchpos+1);standardmaskenfeld(wunsch,
+suchposDIV 2+3);suchposINCR 1FI ;PER .END PROC gibbestwuenscheaus;PROC
+gibunbestwuenscheaus(TEXT CONST unbestwunsch):TEXT VAR datum;IF unbestwunsch
+<>leererunbestwunschTHEN datum:=unbestwunschSUB posanzut;IF datum<>" "THEN
+standardmaskenfeld(datum,bearbfldutanz);FI ;datum:=unbestwunschSUB posgewut;
+IF datum<>" "THEN standardmaskenfeld(datum,bearbfldutgew);FI ;datum:=
+unbestwunschSUB posanzvm;IF datum<>" "THEN standardmaskenfeld(datum,
+bearbfldvmanz)FI ;datum:=unbestwunschSUB posgewvm;IF datum<>" "THEN
+standardmaskenfeld(datum,bearbfldvmgew)FI ;datum:=unbestwunschSUB posanznm;
+IF datum<>" "THEN standardmaskenfeld(datum,bearbfldnmanz)FI ;datum:=
+unbestwunschSUB posgewnm;IF datum<>" "THEN standardmaskenfeld(datum,
+bearbfldnmgew)FI ;FI END PROC gibunbestwuenscheaus;BOOL PROC bestandsfehler:
+IF fall=fldkzlehrerTHEN pruefparapheELIF fall=fldkzsugrupTHEN pruefsugrup
+ELIF fall=fldkzraeumeTHEN pruefraumELIF fall=fldkzfaecherTHEN prueffachELIF
+fall=fldkzkoppTHEN pruefkoppELSE FALSE FI .pruefparaphe:IF alleparaphen=
+trennerTHEN holalleparaphen;IF alleparaphen=trennerTHEN standardmeldung(
+meldungkeinelehrer,"");return(1);LEAVE bestandsfehlerWITH TRUE FI FI ;pos(
+alleparaphen,trenner+startobjekt+trenner)=0.pruefsugrup:IF allesugruppen=
+trennerTHEN holallesugruppen;IF allesugruppen=trennerTHEN standardmeldung(
+meldungkeinesugrup,"");return(1);LEAVE bestandsfehlerWITH TRUE FI FI ;pos(
+allesugruppen,trenner+startobjekt+trenner)=0.pruefraum:IF alleraeume=trenner
+THEN holalleraeume;IF alleraeume=trennerTHEN standardmeldung(
+meldungkeineraeume,"");return(1);LEAVE bestandsfehlerWITH TRUE FI FI ;pos(
+alleraeume,trenner+startobjekt+trenner)=0.prueffach:IF allefaecher=trenner
+THEN holallefaecher;IF allefaecher=trennerTHEN standardmeldung(
+meldungkeinefaecher,"");return(1);LEAVE bestandsfehlerWITH TRUE FI FI ;pos(
+allefaecher,trenner+startobjekt+trenner)=0.pruefkopp:inittupel(
+dnrlehrveranstaltungen);putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj);putwert(
+fnrlvkopplung,startobjekt);search(ixlvsjhjkopp,TRUE );dbstatus<>ok.END PROC
+bestandsfehler;PROC holalleparaphen:inittupel(dnrlehrer);statleseschleife(
+dnrlehrer,"","",fnrlparaphe,fnrlfamname,PROC lehrer).END PROC holalleparaphen
+;PROC holalleraeume:inittupel(dnrschluessel);statleseschleife(dnrschluessel,
+raumkenndaten,"",fnrschlsachgebiet,fnrschlschluessel,PROC raeume).END PROC
+holalleraeume;PROC holallesugruppen:inittupel(dnraktschuelergruppen);
+statleseschleife(dnraktschuelergruppen,schj,schhj,fnrsgrpsj,fnrsgrphj,PROC
+sugruppen).END PROC holallesugruppen;PROC holallefaecher:inittupel(dnrfaecher
+);statleseschleife(dnrfaecher,"","",fnrffach,fnrffachbez,PROC faecher).END
+PROC holallefaecher;PROC lehrer(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE
+alleparaphenCAT text(wert(fnrlparaphe),laengeparaphe);alleparaphenCAT trenner
+FI END PROC lehrer;PROC sugruppen(BOOL VAR b):IF dbstatus<>0COR wert(
+fnrsgrpsj)<>schjCOR wert(fnrsgrphj)<>schhjTHEN b:=TRUE ELSE allesugruppenCAT
+jgstaufber(wert(fnrsgrpjgst));allesugruppenCAT text(wert(fnrsgrpkennung),
+laengesugrupkenn);allesugruppenCAT trennerFI END PROC sugruppen;PROC raeume(
+BOOL VAR b):IF dbstatus<>0COR wert(fnrschlsachgebiet)>raumkenndatenTHEN b:=
+TRUE ELSE alleraeumeCAT text(wert(fnrschlschluessel),laengeraum);alleraeume
+CAT trennerFI END PROC raeume;PROC faecher(BOOL VAR b):IF dbstatus<>0THEN b:=
+TRUE ELSE allefaecherCAT text(wert(fnrffach),laengefach);allefaecherCAT
+trennerFI END PROC faecher;BOOL PROC restleer(INT CONST fall):IF fall=
+fldkzlehrerTHEN FOR iFROM fldkzsugrupUPTO fldkoppREP IF standardmaskenfeld(i)
+<>""THEN prueffeld:=i;LEAVE restleerWITH FALSE FI PER ELIF fall=fldkzsugrup
+THEN IF standardmaskenfeld(fldkzlehrer)<>""THEN prueffeld:=fldkzlehrer;LEAVE
+restleerWITH FALSE FI ;IF standardmaskenfeld(fldparaphe)<>""THEN prueffeld:=
+fldparaphe;LEAVE restleerWITH FALSE FI ;FOR iFROM fldkzraeumeUPTO fldkoppREP
+IF standardmaskenfeld(i)<>""THEN prueffeld:=i;LEAVE restleerWITH FALSE FI
+PER ELIF fall=fldkzraeumeCOR fall=fldkzfaecherTHEN FOR iFROM fldkzlehrerUPTO
+fall-1REP IF standardmaskenfeld(i)<>""THEN prueffeld:=i;LEAVE restleerWITH
+FALSE FI PER ;FOR iFROM fall+2UPTO fldkoppREP IF standardmaskenfeld(i)<>""
+THEN prueffeld:=i;LEAVE restleerWITH FALSE FI PER ;ELIF fall=fldkzkoppTHEN
+FOR iFROM fldkzlehrerUPTO fldfaecherREP IF standardmaskenfeld(i)<>""THEN
+prueffeld:=i;LEAVE restleerWITH FALSE FI PER ;FI ;TRUE END PROC restleer;
+PROC zeitwuenschekopieren:INT VAR aktfld:=infeld;TEXT VAR wunsch;IF aktfld>=
+bearbfldmo1CAND aktfld<=bearbfldsa6THEN kopierfeldinhaltaufrestzeileFI ;
+return(1).kopierfeldinhaltaufrestzeile:wunsch:=standardmaskenfeld(aktfld);IF
+aktfld<=bearbfldmo12THEN FOR iFROM aktfldUPTO bearbfldmo12REP
+standardmaskenfeld(wunsch,i)PER ELIF aktfld<=bearbflddi12THEN FOR iFROM
+aktfldUPTO bearbflddi12REP standardmaskenfeld(wunsch,i)PER ELIF aktfld<=
+bearbfldmi12THEN FOR iFROM aktfldUPTO bearbfldmi12REP standardmaskenfeld(
+wunsch,i)PER ELIF aktfld<=bearbflddo12THEN FOR iFROM aktfldUPTO bearbflddo12
+REP standardmaskenfeld(wunsch,i)PER ELIF aktfld<=bearbfldfr12THEN FOR iFROM
+aktfldUPTO bearbfldfr12REP standardmaskenfeld(wunsch,i)PER ELSE FOR iFROM
+aktfldUPTO bearbfldsa6REP standardmaskenfeld(wunsch,i)PER FI ;
+standardfelderausgeben;infeld(aktfld).END PROC zeitwuenschekopieren;PROC
+zeitwuenschespeichern(BOOL CONST speichern):TEXT VAR zw:="";BOOL VAR
+aenderung:=FALSE ;IF speichernTHEN standardmeldung(meldungpruefen,"");anztage
+:=0;anzvm:=0;anznm:=0;bsbestzw:="";bsunbestzw:="";FOR iFROM bearbfldmo1UPTO
+bearbfldsa6REP zw:=standardmaskenfeld(i);IF zw=""THEN bsbestzwCAT " "ELIF zw
+="-0"THEN bsbestzwCAT " "ELIF zw="+0"THEN bsbestzwCAT " "ELSE bsbestzwCAT
+zwFI PER ;FOR iFROM bearbfldutanzUPTO bearbfldnmgewREP zw:=standardmaskenfeld
+(i);IF length(zw)>1THEN infeld(i);fehlermeldungFI ;IF iMOD 2=0THEN
+bearbeitegewichtELSE bearbeiteanzahlFI PER ;IF dbbestzw<>bsbestzwTHEN
+aenderung:=TRUE ;pruefebestzwFI ;IF dbunbestzw<>bsunbestzwTHEN aenderung:=
+TRUE ;pruefeunbestzwFI ;IF aenderungTHEN standardmeldung(meldungspeichern,"")
+;logeintrag(logbucheintrag);datenspeichernFI ;ELSE standardmeldung(
+meldungnichtsp,"")FI ;naechsterbildschirm.bearbeitegewicht:IF zw=""THEN
+bsunbestzwCAT " "ELSE bsunbestzwCAT "-";bsunbestzwCAT zwFI .bearbeiteanzahl:
+IF zw=""THEN bsunbestzwCAT " "ELSE bsunbestzwCAT zwFI .pruefebestzw:i:=1;
+WHILE i<laengeallezeitwREP zw:=subtext(bsbestzw,i,i+1);IF subtext(dbbestzw,i,
+i+1)<>zwTHEN pruefeeintragFI ;iINCR 2PER .pruefeeintrag:IF zw=" "THEN LEAVE
+pruefeeintragFI ;IF pos(zulgewichte,trenner+zw+trenner)=0THEN infeld(iDIV 2+3
+);fehlermeldungFI .pruefeunbestzw:IF eingabefalsch(1,1,5)THEN infeld(
+bearbfldutanz);fehlermeldungFI ;IF eingabefalsch(4,1,6)THEN infeld(
+bearbfldvmanz);fehlermeldungFI ;IF eingabefalsch(7,1,5)THEN infeld(
+bearbfldnmanz);fehlermeldungFI ;IF eingabefalsch(3,1,3)THEN infeld(
+bearbfldutgew);fehlermeldungFI ;IF eingabefalsch(6,1,3)THEN infeld(
+bearbfldvmgew);fehlermeldungFI ;IF eingabefalsch(9,1,3)THEN infeld(
+bearbfldnmgew);fehlermeldungFI ;IF anztage+anzvm>6THEN infeld(bearbfldutanz);
+fehlermeldungnichtmöglichELIF anztage+anznm>6THEN infeld(bearbfldutanz);
+fehlermeldungnichtmöglichELIF anztage*2+anzvm+anznm>11THEN infeld(
+bearbfldutanz);fehlermeldungnichtmöglichFI ;FOR iFROM 1UPTO 3REP IF (
+bsunbestzwSUB (i*3-2))=" "CAND (bsunbestzwSUB (i*3))<>" "THEN infeld(
+bearbfldutanz+((i-1)*2));fehlermeldungfehlenderwertELIF (bsunbestzwSUB (i*3-2
+))<>" "CAND (bsunbestzwSUB (i*3))=" "THEN infeld(bearbfldutgew+((i-1)*2));
+fehlermeldungfehlenderwertFI PER .fehlermeldungnichtmöglich:return(1);
+standardmeldung(meldungfalschekz,"");LEAVE zeitwuenschespeichern.
+fehlermeldungfehlenderwert:return(1);standardmeldung(meldungwertfehlt,"");
+LEAVE zeitwuenschespeichern.fehlermeldung:return(1);standardmeldung(
+meldungwertfalsch,"");LEAVE zeitwuenschespeichern.naechsterbildschirm:IF fall
+=fldkzkoppTHEN WHILE wert(fnrlvkopplung)=startobjektCAND dbstatus<>3REP succ(
+ixlvsjhjkopp);PER ;IF wert(fnrlvsj)=schjCAND wert(fnrlvhj)=schhjCAND dbstatus
+<>3THEN startobjekt:=wert(fnrlvkopplung);zeitwuenscheausgeben(startobjekt,
+bezug);return(1)ELSE enter(2)FI ELIF bearbfolge=""THEN enter(2)ELSE
+startobjekt:=text(bearbfolge,objektlaenge);bearbfolge:=subtext(bearbfolge,
+objektlaenge+2);zeitwuenscheausgeben(startobjekt,bezug);return(1)FI .
+datenspeichern:putwert(fnrzwbestimmtewuensche,bsbestzw);putwert(
+fnrzwunbestimmtewuensche,bsunbestzw);IF dbstatusbeimholen=0THEN update(
+dnrzeitwuensche)ELSE insert(dnrzeitwuensche)FI ;IF dbstatus<>0THEN
+fehlermeldungbeimspeichernFI .fehlermeldungbeimspeichern:return(1);
+standardmeldung(meldungnichtsp,"");LEAVE zeitwuenschespeichern.END PROC
+zeitwuenschespeichern;BOOL PROC eingabefalsch(INT CONST charpos,ugr,ogr):
+TEXT VAR datum:=bsunbestzwSUB charpos;INT VAR dat;IF datum=" "THEN FALSE
+ELSE dat:=int(datum);IF charpos=1THEN anztage:=datELIF charpos=4THEN anzvm:=
+datELIF charpos=7THEN anznm:=datFI ;IF lastconversionokTHEN dat<ugrCOR dat>
+ogrELSE TRUE FI FI END PROC eingabefalsch;END PACKET zeitwuenschebearbeiten
+
diff --git a/app/schulis/2.2.1/src/4.zeitwuensche drucken b/app/schulis/2.2.1/src/4.zeitwuensche drucken
new file mode 100644
index 0000000..521ab2b
--- /dev/null
+++ b/app/schulis/2.2.1/src/4.zeitwuensche drucken
@@ -0,0 +1,129 @@
+PACKET zeitwuenschedruckenDEFINES zeitwuenschespezielleteile:LET AUSGFELD =
+ROW ausgfeldlaengeTEXT ,ausgfeldlaenge=18,zeilenbreite=60,zeilenanzahl=1,sj=
+"Schuljahr",hj="Schulhalbjahr",ueberschrzeilen=0,ausgabeparam="#",eingmaske=
+"ms liste zeitwuensche",meldungbearb=352,meldungpraez=129,fldsortlehrer=2,
+fldsortsugrup=3,fldsortraeume=4,fldsortfaecher=5,fldsortkopplg=6,fldakthj=7,
+fldaufdr=9,fldaufbs=8,posanzut=1,posgewut=3,posanzvm=4,posgewvm=6,posanznm=7,
+posgewnm=9,ausganzpos=11,ausggewpos=18,minus="-",plus="+",leerzeile=" ",
+kennzlehrer="P",kennzsugrup="S",kennzraeume="R",kennzfaecher="F",kennzkoppl=
+"K",moeintrag="Mo ",dieintrag="Di ",mieintrag="Mi ",doeintrag="Do ",
+freintrag="Fr ",saeintrag="Sa ",anhangl="Lehrer ",anhangs="Schülergruppen "
+,anhangr="Räume ",anhangf="Fächer ",anhangk="Kopplungen ",ueberschrift=
+"Liste der Zeitwünsche für ",leererunbestwunsch=" ";AUSGFELD VAR
+ausgfeld;INT VAR i,status,druckzeilenzahl,fall;TEXT VAR bezug,objekt,
+objektbez,druckstrich;TEXT VAR sjahr,hjahr;INT VAR schj,schhj:=0;TEXT VAR
+bestwunsch,unbestwunsch,zeitwuenscheueberschrift:="";TEXT VAR bestwzeile,
+unbestwtage,unbestwvorm,unbestwnachm,bestwurzeile:=
+" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"+
+" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+
+" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+
+"_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ";TEXT VAR
+moobjeintrag,diobjeintrag,miobjeintrag,doobjeintrag,frobjeintrag,saobjeintrag
+;BOOL PROC multistop:dbstatus=okCAND wert(fnrzwbezug)=bezugCAND intwert(
+fnrzwhj)=schhjCAND intwert(fnrzwsj)=schjEND PROC multistop;BOOL PROC
+multistopsim:IF dbstatus=okTHEN IF intwert(fnrzwhj)=schhjCAND intwert(fnrzwsj
+)=schjCAND wert(fnrzwbezug)=bezugTHEN LEAVE multistopsimWITH TRUE ELSE
+setzebestandende(TRUE );LEAVE multistopsimWITH FALSE FI ELSE setzebestandende
+(TRUE )FI ;FALSE END PROC multistopsim;PROC holeakthj:holakthj;holaktj;IF
+standardmaskenfeld(fldakthj)=""THEN bergeplhjujFI .holakthj:hjahr:=
+schulkenndatum(hj);schhj:=int(hjahr).holaktj:sjahr:=schulkenndatum(sj);schj:=
+int(sjahr).bergeplhjuj:geplanteshjundsjberechnen(hjahr,sjahr);schj:=int(sjahr
+);schhj:=int(hjahr).END PROC holeakthj;PROC zeitwuenschespezielleteile(INT
+CONST anwahl):SELECT anwahlOF CASE 1:zeitwuenschedialogvorbereitenCASE 2:
+zeitwuenscherichtigCASE 3:zeitwuenschelistenvorbereitenCASE 4:
+zeitwuenschedruckvorbereitenCASE 5:zeitwuenscheseitedruckenCASE 6:
+zeitwuenschebsvorbereitenCASE 7:zeitwuenscheseitezeigenEND SELECT .END PROC
+zeitwuenschespezielleteile;PROC zeitwuenschedialogvorbereiten:
+setzeanfangswerte(eingmaske,fldsortlehrer)END PROC
+zeitwuenschedialogvorbereiten;PROC zeitwuenscherichtig:IF standardmaskenfeld(
+fldsortlehrer)=""CAND standardmaskenfeld(fldsortsugrup)=""CAND
+standardmaskenfeld(fldsortraeume)=""CAND standardmaskenfeld(fldsortfaecher)=
+""CAND standardmaskenfeld(fldsortkopplg)=""THEN standardmeldung(meldungpraez,
+"");setzeeingabetest(FALSE );infeld(fldsortlehrer);LEAVE zeitwuenscherichtig
+ELIF standardmaskenfeld(fldaufdr)=""CAND standardmaskenfeld(fldaufbs)=""THEN
+standardmeldung(meldungpraez,"");setzeeingabetest(FALSE );infeld(
+fldsortlehrer);LEAVE zeitwuenscherichtigFI ;standardpruefe(5,fldsortlehrer,
+fldsortkopplg,0,"",status);IF status<>0THEN infeld(status);setzeeingabetest(
+FALSE )ELSE standardpruefe(5,fldaufdr,fldaufbs,0,"",status);IF status<>0THEN
+infeld(status);setzeeingabetest(FALSE )ELSE IF standardmaskenfeld(
+fldsortlehrer)<>""THEN fall:=fldsortlehrer;objektbez:=anhangl;bezug:=
+kennzlehrerELIF standardmaskenfeld(fldsortsugrup)<>""THEN fall:=fldsortsugrup
+;objektbez:=anhangs;bezug:=kennzsugrupELIF standardmaskenfeld(fldsortraeume)
+<>""THEN fall:=fldsortraeume;objektbez:=anhangr;bezug:=kennzraeumeELIF
+standardmaskenfeld(fldsortfaecher)<>""THEN fall:=fldsortfaecher;objektbez:=
+anhangf;bezug:=kennzfaecherELIF standardmaskenfeld(fldsortkopplg)<>""THEN
+fall:=fldsortkopplg;objektbez:=anhangk;bezug:=kennzkopplFI ;
+setzeausgabedrucker(standardmaskenfeld(fldaufdr)<>"");setzeeingabetest(TRUE )
+;holeakthj;zeitwuenscheueberschrift:=ueberschrift+objektbez+hjahr+". "+text(
+sjahr,2)+"/"+subtext(sjahr,3)FI ;FI END PROC zeitwuenscherichtig;PROC
+zeitwuenschelistenvorbereiten:BOOL VAR b;inittupel(dnrzeitwuensche);initobli(
+zeilenanzahl);setzeidentiwert("");setzewerte;objektlistestarten(
+dnrzeitwuensche,sjahr,fnrzwbezugsobjekt,TRUE ,b);setzebestandende(NOT
+multistopCOR b).setzewerte:putintwert(fnrzwsj,schj);putintwert(fnrzwhj,schhj)
+;putwert(fnrzwbezug,bezug).END PROC zeitwuenschelistenvorbereiten;PROC
+zeitwuenschebsvorbereiten:standardkopfmaskeaktualisieren(zentriert(
+zeitwuenscheueberschrift,51));setzebildanfangsposition(3)END PROC
+zeitwuenschebsvorbereiten;PROC zeitwuenscheseitezeigen:blaettern(PROC (INT
+CONST )zeitwuenschezeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop);END PROC
+zeitwuenscheseitezeigen;PROC zeitwuenschezeigen(INT CONST procparameter):
+zeitwuenscheholen;zeitwuenscheaufbereiten;zeitwuenscheaufbs;END PROC
+zeitwuenschezeigen;PROC zeitwuenscheholen:objekt:=wert(fnrzwbezugsobjekt);
+bestwunsch:=wert(fnrzwbestimmtewuensche);unbestwunsch:=wert(
+fnrzwunbestimmtewuensche);IF NOT multistopTHEN setzebestandende(TRUE )FI .
+END PROC zeitwuenscheholen;PROC zeitwuenscheaufbereiten:bereiteobjektauf(
+objekt)END PROC zeitwuenscheaufbereiten;PROC zeitwuenscheaufbs:FOR iFROM 1
+UPTO ausgfeldlaengeREP ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsPER
+END PROC zeitwuenscheaufbs;PROC zeitwuenschedruckvorbereiten:druckvorbereiten
+;variablensetzen;initdruckkopf(zentriert(zeitwuenscheueberschrift,druckbreite
+));inittupel(dnrzeitwuensche);setzebestandende(FALSE );setzewerte;
+lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL
+PROC multistopsim).variablensetzen:druckstrich:=druckbreite*"-";
+druckzeilenzahl:=drucklaenge(ueberschrzeilen).setzewerte:putintwert(fnrzwsj,
+schj);putintwert(fnrzwhj,schhj);putwert(fnrzwbezug,bezug).END PROC
+zeitwuenschedruckvorbereiten;PROC zeitwuenscheseitedrucken:
+zeitwuenscheueberschriftdrucken;seitedrucken(PROC (INT VAR )
+zeitwuenschedrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);
+seitenwechselEND PROC zeitwuenscheseitedrucken;PROC
+zeitwuenscheueberschriftdrucken:druckkopfschreibenEND PROC
+zeitwuenscheueberschriftdrucken;PROC zeitwuenschedrucken(INT VAR zz):
+zeitwuenscheholen;standardmeldung(meldungbearb,objektbez+objekt+ausgabeparam)
+;zeitwuenscheaufbereiten(zz);zeitwuenscheindruckdatei(zz)END PROC
+zeitwuenschedrucken;PROC zeitwuenscheaufbereiten(INT VAR zz):bereiteobjektauf
+(objekt)END PROC zeitwuenscheaufbereiten;PROC zeitwuenscheindruckdatei(INT
+VAR zz):FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(i));zz
+INCR 1PER ;druckzeileschreiben(leerzeile);zzINCR 1;druckzeileschreiben(
+leerzeile);zzINCR 1END PROC zeitwuenscheindruckdatei;PROC bereiteobjektauf(
+TEXT CONST objekt):INT VAR suchpos:=1;TEXT VAR wunsch:="";moobjeintrag:=
+moeintrag;diobjeintrag:=dieintrag;miobjeintrag:=mieintrag;doobjeintrag:=
+doeintrag;frobjeintrag:=freintrag;saobjeintrag:=saeintrag;uebertragwuensche;
+ausgfeld(1):=(objekt+":");ausgfeld(2):=leerzeile;ausgfeld(3):=(
+"Wünsche zu festen Zeiten:");ausgfeld(4):=(leerzeile);ausgfeld(5):=(
+" 1 2 3 4 5 6 7 8 9 10 11 12");ausgfeld(6):=(
+moobjeintrag+text(bestwzeile,48));ausgfeld(7):=(diobjeintrag+subtext(
+bestwzeile,49,96));ausgfeld(8):=(miobjeintrag+subtext(bestwzeile,97,144));
+ausgfeld(9):=(doobjeintrag+subtext(bestwzeile,145,192));ausgfeld(10):=(
+frobjeintrag+subtext(bestwzeile,193,240));ausgfeld(11):=(saobjeintrag+subtext
+(bestwzeile,241));ausgfeld(12):=(leerzeile);ausgfeld(13):=(
+" allgemeine Wünsche:");ausgfeld(14):=(
+" Anzahl/Gewicht ");ausgfeld(15):=("ganze Tage "
++unbestwtage);ausgfeld(16):=("zusätzl. Vorm. "+unbestwvorm);ausgfeld(17):=(
+"zusätzl. Nachm. "+unbestwnachm);ausgfeld(18):=(leerzeile).uebertragwuensche:
+bestwzeile:=bestwurzeile;unbestwtage:=" _ _ ";unbestwvorm:=
+" _ _ ";unbestwnachm:=" _ _ ";tragbestwuenscheein
+;tragunbestwuenscheein.tragbestwuenscheein:suchpos:=1;WHILE suchpos<>0REP
+suchpos:=pos(bestwunsch,minus,suchpos);IF suchpos<>0THEN wunsch:=subtext(
+bestwunsch,suchpos,suchpos+1);replace(bestwzeile,suchpos*2-1,wunsch);suchpos
+INCR 1FI ;PER ;suchpos:=1;WHILE suchpos<>0REP suchpos:=pos(bestwunsch,plus,
+suchpos);IF suchpos<>0THEN wunsch:=subtext(bestwunsch,suchpos,suchpos+1);
+replace(bestwzeile,suchpos*2-1,wunsch);suchposINCR 1FI ;PER .
+tragunbestwuenscheein:IF unbestwunsch<>leererunbestwunschTHEN wunsch:=
+unbestwunschSUB posanzut;IF wunsch<>" "THEN replace(unbestwtage,ausganzpos,
+wunsch)FI ;wunsch:=unbestwunschSUB posgewut;IF wunsch<>" "THEN replace(
+unbestwtage,ausggewpos,wunsch)FI ;wunsch:=unbestwunschSUB posanzvm;IF wunsch
+<>" "THEN replace(unbestwvorm,ausganzpos,wunsch)FI ;wunsch:=unbestwunschSUB
+posgewvm;IF wunsch<>" "THEN replace(unbestwvorm,ausggewpos,wunsch)FI ;wunsch
+:=unbestwunschSUB posanznm;IF wunsch<>" "THEN replace(unbestwnachm,ausganzpos
+,wunsch)FI ;wunsch:=unbestwunschSUB posgewnm;IF wunsch<>" "THEN replace(
+unbestwnachm,ausggewpos,wunsch)FI FI .END PROC bereiteobjektauf;END PACKET
+zeitwuenschedrucken
+
diff --git a/app/schulis/2.2.1/src/5.STATISTIK SERVER.files b/app/schulis/2.2.1/src/5.STATISTIK SERVER.files
new file mode 100644
index 0000000..c813089
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.STATISTIK SERVER.files
@@ -0,0 +1,2 @@
+5.manager
+
diff --git a/app/schulis/2.2.1/src/5.STATISTIK.files b/app/schulis/2.2.1/src/5.STATISTIK.files
new file mode 100644
index 0000000..26554d2
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.STATISTIK.files
@@ -0,0 +1,9 @@
+5.thesaurus
+5.statistik liste
+5.merkmale
+5.datenbasis
+5.erstellen
+5.benennen
+5.felder
+5.drucken
+
diff --git a/app/schulis/2.2.1/src/5.benennen b/app/schulis/2.2.1/src/5.benennen
new file mode 100644
index 0000000..6f67e8a
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.benennen
@@ -0,0 +1,116 @@
+PACKET benennenDEFINES statbenennen:LET statistikdatei="STATISTIK.",
+statistikserver="statistik server",maskebenennen="mst statistik benennen",
+statistikvorzeilen=3,maxstatistiken=200,maxzeilen=75,maxspalten=50,
+minspaltenbreite=4,niltext="",space=" ",meldungzusatz="+",meldungback=
+"��������������",alt="alt",meldungrestore=" ",mgibtesnicht=477,
+mgibtesschon=485,mspeichern=486,mnichtspeichern=487,mentfernenfrage=488,
+mgeloescht=489,mnichtgeloescht=490,fstatnr=2,fbezeichnung=3,fzeilen=4,
+fspalten=5,fentfernen=6,pruefeimintervall=3,pruefeobwert=1;TEXT VAR
+statistiknummer;FILE VAR stat;PROC statbenennen(INT CONST was):SELECT wasOF
+CASE 1:benennenstartprocCASE 2:benennennprocCASE 3:
+benennenbearbeitenstartprocCASE 4:benennenbearbeitenspeichernCASE 5:
+benennenneustartprocCASE 6:benennenentfernenstartprocCASE 7:
+benennenentfernenexec;leave(2)CASE 8:statlistezeigen(int(standardmaskenfeld(
+fstatnr)))CASE 9:benennenlistebearbeitenstartprocCASE 10:
+benennenlistebearbeitenspeichernCASE 11:benennenlisteentfernenstartprocCASE
+12:benennenentfernenexec;enter(1)CASE 13:benennenbearbeitennichtspeichern
+CASE 14:benennenentfernennichtloeschen;leave(2)CASE 15:
+benennenentfernennichtloeschen;enter(1)CASE 16:benennenentfernennichtloeschen
+;leave(3)END SELECT .benennenstartproc:standardstartproc(maskebenennen);
+standardmaskenfeld(niltext,fstatnr);benennennproc.benennennproc:
+standardmaskenfeld(niltext,fbezeichnung);feldschutz(fbezeichnung);
+standardmaskenfeld(niltext,fzeilen);feldschutz(fzeilen);standardmaskenfeld(
+niltext,fspalten);feldschutz(fspalten);feldschutz(fentfernen);feldfrei(
+fstatnr);infeld(fstatnr);standardnproc.benennenbearbeitenstartproc:IF NOT
+nummerokTHEN leave(1);ELIF NOT statistikexistiert(statnummer)THEN statmeldung
+(mgibtesnicht);infeld(fstatnr);leave(1);ELSE benennenfreigebenundnproc;FI .
+benennenbearbeitenspeichern:IF NOT eingabenokTHEN leave(1);ELIF NOT (
+statistiknummer=statnummer)AND statistikexistiert(statnummer)THEN statmeldung
+(mgibtesschon);infeld(fstatnr);leave(1);ELSE statmeldung(mspeichern);
+statistikspeichern(statistiknummer,statnummer);standardmaskenfeld(niltext,
+fstatnr);leave(2);FI .benennenneustartproc:IF NOT nummerokTHEN leave(1);ELIF
+statistikexistiert(statnummer)THEN statmeldung(mgibtesschon);infeld(fstatnr);
+leave(1);ELSE benennenfreigeben;statistiknummer:=statnummer;standardnprocFI .
+benennenentfernenstartproc:IF NOT nummerokTHEN leave(1);ELIF NOT
+statistikexistiert(statnummer)THEN statmeldung(mgibtesnicht);infeld(fstatnr);
+leave(1);ELSE benennenschuetzenundnproc;FI .benennenschuetzenundnproc:
+benennenausfuellen(statnummer);feldschutz(fstatnr);feldschutz(fbezeichnung);
+feldschutz(fzeilen);feldschutz(fspalten);infeld(fstatnr);
+standardfelderausgeben;statmeldung(mentfernenfrage);infeld(fentfernen);
+standardnproc.benennenfreigebenundnproc:benennenausfuellen(statnummer);
+benennenfreigeben;statistiknummer:=statnummer;standardnproc.benennenfreigeben
+:feldfrei(fbezeichnung);feldfrei(fzeilen);feldfrei(fspalten);feldschutz(
+fentfernen);statnummerIN fstatnr;infeld(fbezeichnung).benennenentfernenexec:
+statistikloeschen(statnummer);statmeldung(mgeloescht);standardmaskenfeld(
+niltext,fstatnr).benennenlistebearbeitenstartproc:statlistebearbeiten(
+maskebenennen);IF statlisteeintrag>niltextTHEN standardmaskenfeld(
+statlisteeintrag,fstatnr);benennenfreigebenundnproc;ELSE standardmaskenfeld(
+niltext,fstatnr);leave(2);FI .benennenlistebearbeitenspeichern:IF NOT
+eingabenokTHEN leave(1);ELIF NOT (statistiknummer=statnummer)AND
+statistikexistiert(statnummer)THEN statmeldung(mgibtesschon);infeld(fstatnr);
+leave(1);ELSE statmeldung(mspeichern);statistikspeichern(statistiknummer,
+statnummer);enter(1);FI .benennenlisteentfernenstartproc:statlistebearbeiten(
+maskebenennen);IF statlisteeintrag>niltextTHEN standardmaskenfeld(
+statlisteeintrag,fstatnr);benennenschuetzenundnproc;ELSE standardmaskenfeld(
+niltext,fstatnr);leave(2);FI .benennenbearbeitennichtspeichern:statmeldung(
+mnichtspeichern);standardmaskenfeld(niltext,fstatnr);leave(2).
+benennenentfernennichtloeschen:statmeldung(mnichtgeloescht);
+standardmaskenfeld(niltext,fstatnr).nummerok:INT VAR status;standardpruefe(
+pruefeimintervall,fstatnr,1,maxstatistiken,niltext,status);IF status>0THEN
+infeld(status)FI ;status=0.eingabenok:IF nummerokTHEN standardpruefe(
+pruefeobwert,fbezeichnung,0,0,niltext,status);FI ;IF status=0THEN
+standardpruefe(pruefeimintervall,fzeilen,1,maxzeilen,niltext,status);FI ;IF
+status=0THEN standardpruefe(pruefeimintervall,fspalten,1,maxspalten,niltext,
+status);FI ;IF status>0THEN infeld(status);FI ;status=0.statnummer:text(int(
+standardmaskenfeld(fstatnr))).END PROC statbenennen;PROC statmeldung(INT
+CONST meldungnummer):standardmeldung(meldungnummer,standardmaskenfeld(fstatnr
+)+meldungzusatz);END PROC statmeldung;PROC benennenausfuellen(TEXT CONST
+statnummer):TEXT VAR bezeichnung;INT VAR wert;forget(statistikdatei+
+statnummer,quiet);fetch(statistikdatei+statnummer,task(statistikserver));stat
+:=sequentialfile(input,statistikdatei+statnummer);standardmaskenfeld(
+statnummer,fstatnr);getline(stat,bezeichnung);standardmaskenfeld(bezeichnung,
+fbezeichnung);get(stat,wert);standardmaskenfeld(text(wert),fzeilen);get(stat,
+wert);standardmaskenfeld(text(wert),fspalten);forget(statistikdatei+
+statnummer,quiet);END PROC benennenausfuellen;BOOL PROC statistikexistiert(
+TEXT CONST statnummer):exists(statistikdatei+statnummer,task(statistikserver)
+)END PROC statistikexistiert;PROC statistikloeschen(TEXT CONST statnummer):
+IF statistikexistiert(statnummer)THEN commanddialogue(FALSE );erase(
+statistikdatei+statnummer,task(statistikserver));commanddialogue(TRUE );FI ;
+END PROC statistikloeschen;PROC statistikspeichern(TEXT CONST altername,
+neuername):INT VAR zeilenneu:=int(standardmaskenfeld(fzeilen)),spaltenneu:=
+int(standardmaskenfeld(fspalten)),benennenneu:=zeilenneu*spaltenneu,zeilenalt
+,spaltenalt,benennenalt,zaehl,zeile,spalte;TEXT VAR dateizeile;FILE VAR
+statalt;forget(statistikdatei+altername,quiet);forget(statistikdatei+
+neuername,quiet);IF NOT statistikexistiert(altername)THEN
+erzeugeneuestatistikELSE aenderealtestatistik;statistikloeschen(altername);
+FI ;sichereneuestatistik.erzeugeneuestatistik:erzeugestatistikmitneuemnamen;
+display(meldungback);FOR zaehlFROM benennenneuDOWNTO 1REP line(stat);cout(
+zaehl);PER ;display(meldungrestore).erzeugestatistikmitneuemnamen:stat:=
+sequentialfile(output,statistikdatei+neuername);putline(stat,
+standardmaskenfeld(fbezeichnung));dateizeile:=text(zeilenneu)+space+text(
+spaltenneu)+space;FOR zaehlFROM 1UPTO spaltenneuREP dateizeileCAT text(
+minspaltenbreite);dateizeileCAT space;PER ;putline(stat,dateizeile);line(stat
+).sichereneuestatistik:save(statistikdatei+neuername,task(statistikserver));
+forget(statistikdatei+neuername,quiet).aenderealtestatistik:forget(
+statistikdatei+alt,quiet);fetch(statistikdatei+altername,task(statistikserver
+));rename(statistikdatei+altername,statistikdatei+alt);statalt:=
+sequentialfile(input,statistikdatei+alt);getline(statalt,dateizeile);get(
+statalt,zeilenalt);get(statalt,spaltenalt);benennenalt:=zeilenalt*spaltenalt;
+IF zeilenalt<>zeilenneuOR spaltenalt<>spaltenneuTHEN aenderedieganzestatistik
+ELIF dateizeile<>standardmaskenfeld(fbezeichnung)THEN aenderediedateizeile
+ELSE rename(statistikdatei+alt,statistikdatei+neuername);FI .
+aenderediedateizeile:modify(statalt);tofirstrecord(statalt);writerecord(
+statalt,standardmaskenfeld(fbezeichnung));rename(statistikdatei+alt,
+statistikdatei+neuername).aenderedieganzestatistik:
+erzeugestatistikmitneuemnamen;modify(statalt);zaehl:=benennenneu;display(
+meldungback);FOR zeileFROM 1UPTO min(zeilenalt,zeilenneu)REP
+uebertrageeinezeileausaltinneu;PER ;FOR zeileFROM zeilenalt+1UPTO zeilenneu
+REP schreibeeineleerezeile;PER ;display(meldungrestore);forget(statistikdatei
++alt,quiet).uebertrageeinezeileausaltinneu:toline(statalt,statistikvorzeilen+
+(zeile-1)*spaltenalt+1);FOR spalteFROM 1UPTO min(spaltenalt,spaltenneu)REP
+readrecord(statalt,dateizeile);putline(stat,dateizeile);down(statalt);zaehlen
+PER ;FOR spalteFROM spaltenalt+1UPTO spaltenneuREP line(stat);zaehlenPER .
+schreibeeineleerezeile:FOR spalteFROM 1UPTO spaltenneuREP line(stat);zaehlen
+PER .zaehlen:cout(zaehl);zaehlDECR 1.END PROC statistikspeichern;END PACKET
+benennen;
+
diff --git a/app/schulis/2.2.1/src/5.datenbasis b/app/schulis/2.2.1/src/5.datenbasis
new file mode 100644
index 0000000..4d28ff7
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.datenbasis
@@ -0,0 +1,62 @@
+PACKET datenbasisDEFINES statdatenbasisstartproc,statdatenbasisnproc,
+statdatenbasisaufbereiten,statdatenbasisentfernen,
+statdatenbasisentfernenmeldung,statdatenbasisnichtentfernen,
+statdatenbasisermitteln,statdatenbasisvorhanden:LET datenbasisname=
+"STATISTIK.basis",statistikserver="statistik server",maskedatenbasis=
+"mst datenbasis bereitstellen",niltext="",meldungzusatz="+",meldungstichtag=
+"zum Stichtag ",meldungnichtda="nicht ",mnichts="+ +",
+mstart="�����������",mkeinedaten=68,mentfernenfrage=470,mkeinebasis=471,
+mbasisentfernt=472,mbasisnichtentfernt=473,maufbereitung=474,mabbruch=475,
+mbasisfertig=476,fstatnr=2,fcursor=3,filesize=4000,tupelstackgroesse=5;FILE
+VAR basis;BOOL VAR datenbasisda;TEXT VAR datenbasisstichtag;PROC
+statdatenbasisstartproc:enablestop;standardstartproc(maskedatenbasis);
+statdatenbasisermitteln(fstatnr);statdatenbasisnproc;END PROC
+statdatenbasisstartproc;PROC statdatenbasisnproc:infeld(fstatnr);
+standardfelderausgeben;infeld(fcursor);standardnproc;END PROC
+statdatenbasisnproc;PROC statdatenbasisermitteln(INT CONST feldnr):forget(
+datenbasisname,quiet);datenbasisda:=existstask(statistikserver)CAND exists(
+datenbasisname,task(statistikserver));IF datenbasisdaTHEN fetch(
+datenbasisname,task(statistikserver));basis:=sequentialfile(modify,
+datenbasisname);tofirstrecord(basis);readrecord(basis,datenbasisstichtag);
+datenbasisstichtag:=meldungstichtag+datenbasisstichtag;forget(datenbasisname,
+quiet);ELSE datenbasisstichtag:=meldungnichtdaFI ;standardmaskenfeld(
+datenbasisstichtag,feldnr);END PROC statdatenbasisermitteln;BOOL PROC
+statdatenbasisvorhanden:datenbasisdaEND PROC statdatenbasisvorhanden;PROC
+statdatenbasisentfernenmeldung:IF datenbasisdaTHEN standardmeldung(
+mentfernenfrage,niltext);infeld(fcursor);ELSE standardmeldung(mkeinebasis,
+niltext);leave(1);FI END PROC statdatenbasisentfernenmeldung;PROC
+statdatenbasisentfernen:datenbasisloeschen;standardmeldung(mbasisentfernt,
+datenbasisstichtag+meldungzusatz);statdatenbasisermitteln(fstatnr);leave(2);
+END PROC statdatenbasisentfernen;PROC statdatenbasisnichtentfernen:
+standardmeldung(mbasisnichtentfernt,datenbasisstichtag+meldungzusatz);leave(2
+);END PROC statdatenbasisnichtentfernen;PROC datenbasisloeschen:BOOL CONST
+comdia:=commanddialogue;IF datenbasisdaCAND exists(datenbasisname,task(
+statistikserver))THEN commanddialogue(FALSE );erase(datenbasisname,task(
+statistikserver));commanddialogue(comdia);FI ;END PROC datenbasisloeschen;
+PROC statdatenbasisaufbereiten:BOOL VAR schuelerda,abbruch:=FALSE ;INT VAR
+anzahltupel:=tupelstackgroesse,bearbeitetetupel:=tupelstackgroesse,
+schuelerzahl:=0;IF datenbasisdaTHEN standardmeldung(mbasisentfernt,
+datenbasisstichtag+meldungzusatz);ELSE standardmeldung(maufbereitung,date+
+meldungzusatz);FI ;schuelerlesenvorbereiten;IF schuelerdaTHEN
+datenbasisaufbereiten;FI ;IF NOT schuelerdaTHEN standardmeldung(mkeinedaten,
+niltext);ELIF abbruchTHEN standardmeldung(mabbruch,niltext);forget(
+datenbasisname,quiet);ELSE datenbasisloeschen;datenbasissichern;
+statdatenbasisermitteln(fstatnr);standardmeldung(mbasisfertig,niltext);FI ;
+leave(1).datenbasisaufbereiten:forget(datenbasisname,quiet);basis:=
+sequentialfile(output,datenbasisname);putline(basis,date);standardmeldung(
+maufbereitung,date+meldungzusatz);out(mstart);REP putline(basis,
+statdatenbasiszeile);schuelerzahlINCR 1;cout(schuelerzahl);naechsterschueler;
+UNTIL bestandendePER .schuelerindex:ixsustatfamrufgeb.
+schuelerlesenvorbereiten:inittupel(dnrdiffdaten);inittupel(dnrhalbjahresdaten
+);inittupel(dnrschulen);inittupel(dnrschueler);parsenooffields(50);
+systemdboff;search(schuelerindex,FALSE );schuelerda:=dbstatus=ok;
+setzebestandende(NOT schuelerda).naechsterschueler:IF bearbeitetetupel=
+anzahltupelTHEN IF anzahltupel<>tupelstackgroesseTHEN setzebestandende(TRUE )
+;ELIF NOT abbruchgewuenschtTHEN einpaarschuelerholen;FI ;ELSE multisucc;
+bearbeitetetupelINCR 1;FI .einpaarschuelerholen:anzahltupel:=
+tupelstackgroesse;scanstatus(ok);multisucc(schuelerindex,anzahltupel);IF
+anzahltupel>0THEN multisucc;bearbeitetetupel:=1;ELSE setzebestandende(TRUE )
+FI .abbruchgewuenscht:abbruch:=lines(basis)>=filesize;abbruch.
+datenbasissichern:save(datenbasisname,task(statistikserver)).END PROC
+statdatenbasisaufbereiten;END PACKET datenbasis;
+
diff --git a/app/schulis/2.2.1/src/5.drucken b/app/schulis/2.2.1/src/5.drucken
new file mode 100644
index 0000000..9b775ff
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.drucken
@@ -0,0 +1,153 @@
+PACKET druckenDEFINES statdrucken:LET statistikdatei="STATISTIK.",
+statistikserver="statistik server",erstedruckdatei="liste.1",druckdatei=
+"liste.",maxstatistiken=200,statistikvorzeilen=3,niltext="",space=" ",quote=
+"""",edittasten="vr",statistiktext="Statistik Nr. ",stichtagtext="Stichtag: "
+,definitiontext="Definition der Statistik Nr. ",groessetext=
+"Größe: Zeilen, Spalten",tabellentext=
+"Feld Z / Sp Art Länge Definition",tabellenlinie=
+"----+--------+----+------+----------",tabelleleer=
+" ",prozenttext=" %",meldungzusatz="+",mgibtesnicht
+=477,fstatnr=2,fmini=3,fstd=4,fscreen=5,fprinter=6,tsenkrecht=":",twaagerecht
+="-",tkreuz="+",tschraeg="/",pruefeimintervall=3,pruefenureinkreuz=5,
+minspaltenbreite=4,maxspalten=50,KONST =STRUCT (BOOL def,TEXT maske,INT
+mvorbereiten,mdrucken,mnichtdrucken);KONST VAR druck;BOOL VAR
+ausgabebildschirm,ausgabeminimal;TEXT VAR druckstatistik;ROW maxspaltenINT
+VAR breiten;INT VAR zeilen,spalten,felder;FILE VAR stat;PROC statdrucken(
+BOOL CONST defdrucken,INT CONST was):INT VAR status:=0;IF defdruckenTHEN
+druck:=KONST :(TRUE ,"mst statistik drucken",484,498,499);ELSE druck:=KONST :
+(FALSE ,"mst statistik ausgeben",481,482,483);FI ;SELECT wasOF CASE 1:
+druckenexecCASE 2:druckenlistezeigenCASE 3:druckenlisteexecCASE 4:ausdrucken;
+enter(1)CASE 5:ausdrucken;leave(2)CASE 6:nichtdrucken;enter(1);CASE 7:
+nichtdrucken;leave(2);END SELECT .druckenexec:standardpruefe(
+pruefeimintervall,fstatnr,1,maxstatistiken,niltext,status);IF NOT
+alleeingabenkorrektTHEN leave(1);ELIF NOT exists(gewaehltestatistik,task(
+statistikserver))THEN standardmeldung(mgibtesnicht,standardmaskenfeld(2)+
+meldungzusatz);infeld(fstatnr);leave(1);ELSE drucken(text(int(
+standardmaskenfeld(fstatnr))));IF NOT ausgabebildschirmTHEN leave(1);FI ;FI .
+gewaehltestatistik:statistikdatei+text(int(standardmaskenfeld(fstatnr))).
+druckenlistezeigen:status:=0;IF alleeingabenkorrektTHEN statlistezeigen(int(
+standardmaskenfeld(fstatnr)));ELSE leave(1);FI .druckenlisteexec:IF
+ausgabebildschirmTHEN statlistebearbeiten(druck.maske);IF statlisteeintrag>
+niltextTHEN drucken(statlisteeintrag);ELSE leave(2);FI ;ELSE
+statlistebearbeiten(druck.maske);WHILE statlisteeintrag>niltextREP drucken(
+statlisteeintrag);statlistebearbeiten(druck.maske);PER ;leave(2);FI .
+alleeingabenkorrekt:IF status=0THEN standardpruefe(pruefenureinkreuz,fmini,
+fstd,0,niltext,status);FI ;IF druck.defTHEN ausgabebildschirm:=
+standardmaskenfeld(fmini)<>niltext;ELSE IF status=0THEN standardpruefe(
+pruefenureinkreuz,fscreen,fprinter,0,niltext,status);FI ;ausgabeminimal:=
+standardmaskenfeld(fmini)<>niltext;ausgabebildschirm:=standardmaskenfeld(
+fscreen)<>niltext;FI ;IF status>0THEN infeld(status)FI ;status=0.ausdrucken:
+standardmeldung(druck.mdrucken,druckstatistik+meldungzusatz);
+druckdateibehandeln(PROC (TEXT CONST )print);druckdateibehandeln(PROC (TEXT
+CONST )forget).nichtdrucken:infeld(fstatnr);standardmaskenfeld(niltext,
+fstatnr);standardmeldung(druck.mnichtdrucken,druckstatistik+meldungzusatz);
+druckdateibehandeln(PROC (TEXT CONST )forget).END PROC statdrucken;PROC
+drucken(TEXT CONST statistiknummer):statistiknummerIN fstatnr;infeld(fstatnr)
+;standardmaskenfeld(niltext,fstatnr);erstellediedruckdatei;IF
+ausgabebildschirmTHEN druckstatistik:=statistiknummer;standardmeldung(niltext
+,meldungzusatz);zeigedatei(erstedruckdatei,edittasten);ELSE standardmeldung(
+druck.mdrucken,statistiknummer+meldungzusatz);druckdateibehandeln(PROC (TEXT
+CONST )print);druckdateibehandeln(PROC (TEXT CONST )forget);FI .
+erstellediedruckdatei:standardmeldung(druck.mvorbereiten,statistiknummer+
+meldungzusatz+meldungzusatz);druckdateibehandeln(PROC (TEXT CONST )forget);
+statistikladen(statistiknummer);druckvorbereiten;IF druck.defTHEN
+druckestatdef(statistiknummer);ELSE druckestatistik(statistiknummer);FI ;
+drucknachbereitenohneausdrucken;forget(statistikdatei+statistiknummer,quiet).
+END PROC drucken;PROC druckestatistik(TEXT CONST statistiknummer):TEXT VAR
+kopf1,kopf2,linie,dateizeile;BOOL VAR inhalt;INT VAR gedrucktespalten:=0,
+spaltendieseseite:=0,aktspalte,aktzeile,aktbreite,zeilenbisseitenende,
+gedrucktefelder:=0;seitenkopffestlegen;evtlspaltenbreitenverkuerzen;REP
+ermittlespaltendieseseite;druckeallezeilenbiszudieserspalte;gedrucktespalten
+INCR spaltendieseseite;UNTIL gedrucktespalten=spaltenPER .seitenkopffestlegen
+:toline(stat,1);readrecord(stat,kopf1);kopf1:=statistiktext+statistiknummer+
+space+kopf1;toline(stat,statistikvorzeilen);readrecord(stat,kopf2);kopf2:=
+compress(kopf2);IF kopf2>niltextTHEN kopf2:=stichtagtext+kopf2FI ;inhalt:=
+kopf2>niltext;setzemitseitennummern(FALSE );initdruckkopf(kopf1,kopf2).
+evtlspaltenbreitenverkuerzen:IF ausgabeminimalTHEN FOR aktspalteFROM 1UPTO
+spaltenREP breiten[aktspalte]:=minspaltenbreite;PER FI .
+ermittlespaltendieseseite:initspalten;setzespaltentrenner(tsenkrecht);
+setzespaltenbreite(2);aktbreite:=3;spaltendieseseite:=0;REP spaltendieseseite
+INCR 1;aktbreiteINCR breiten[letztespalte];aktbreiteINCR 1;setzespaltenbreite
+(breiten[letztespalte]);UNTIL letztespalte>=spaltenCOR aktbreite+breiten[
+letztespalte+1]>=druckbreitePER .letztespalte:gedrucktespalten+
+spaltendieseseite.druckeallezeilenbiszudieserspalte:aktzeile:=0;erzeugelinie;
+WHILE aktzeile<zeilenREP druckeeineseitebiszudieserspaltePER .erzeugelinie:
+linie:=twaagerecht+twaagerecht+tkreuz;FOR aktspalteFROM gedrucktespalten+1
+UPTO letztespalteREP linieCAT (breiten[aktspalte]*twaagerecht);linieCAT
+tkreuz;PER .druckeeineseitebiszudieserspalte:zeilenbisseitenende:=drucklaenge
+(anzahlkopfzeilen);druckkopfschreiben;spaltenkopfschreiben;WHILE
+zeilenbisseitenende>=benoetigtezeilenREP aktzeileINCR 1;einezeileschreiben;
+IF aktzeileMOD 2=0THEN gibstandaus(statistiknummer,gedrucktefelder,felder);
+FI ;UNTIL aktzeile>=zeilenPER ;seitenwechsel.anzahlkopfzeilen:IF inhaltTHEN 2
+ELSE 1FI .benoetigtezeilen:IF ausgabeminimalTHEN 1ELSE 2FI .
+spaltenkopfschreiben:spaltenweise(niltext);FOR aktspalteFROM gedrucktespalten
++1UPTO letztespalteREP spaltenweise(text(aktspalte,3));PER ;
+druckzeileschreiben(zeile+tsenkrecht);zeilenbisseitenendeDECR 1.
+einezeileschreiben:IF NOT ausgabeminimalTHEN druckzeileschreiben(linie);
+zeilenbisseitenendeDECR 1;FI ;spaltenweise(text(aktzeile,2));FOR aktspalte
+FROM gedrucktespalten+1UPTO letztespalteREP tragefeldinhalteinPER ;
+gedrucktefelderINCR spaltendieseseite;druckzeileschreiben(zeile+tsenkrecht);
+zeilenbisseitenendeDECR 1.tragefeldinhaltein:toline(stat,((aktzeile-1)*
+spalten)+aktspalte+3);readrecord(stat,dateizeile);IF (dateizeileSUB 5)="t"
+THEN dateizeile:=subtext(dateizeile,7,length(dateizeile)-1);changeall(
+dateizeile,quote+quote,quote);spaltenweise(dateizeile);ELIF inhaltTHEN
+spaltenweise(subtext(dateizeile,1,4));ELSE spaltenweise(niltext);FI .END
+PROC druckestatistik;PROC druckestatdef(TEXT CONST statistiknummer):TEXT VAR
+kopfname,kopfgroesse,kopflinie,dateizeile;INT VAR zeilenbisseitenende,aktfeld
+:=0,deffeldbreite,benoetigtezeilen,zeilenende;seitenkopffestlegen;
+tabellefestlegen;liesnaechstesfeld;REP druckeeineseiteUNTIL aktfeld>felder
+PER .seitenkopffestlegen:toline(stat,1);readrecord(stat,kopfname);kopfgroesse
+:=groessetext;replace(kopfgroesse,8,text(zeilen,2));replace(kopfgroesse,19,
+text(spalten,2));setzemitseitennummern(FALSE );initdruckkopf(definitiontext+
+statistiknummer,kopfname).tabellefestlegen:kopflinie:=tabellenlinie;WHILE
+length(kopflinie)<druckbreiteREP kopflinieCAT twaagerecht;PER ;initspalten;
+setzespaltentrenner(tsenkrecht);setzespaltenbreite(4);setzespaltenbreite(8);
+setzespaltenbreite(4);setzespaltenbreite(6);deffeldbreite:=druckbreite-length
+(tabelleleer).druckeeineseite:zeilenbisseitenende:=drucklaenge(
+anzahlkopfzeilen);druckkopfschreiben;tabellenkopfschreiben;WHILE
+zeilenbisseitenende>=benoetigtezeilenREP schreibedasfeld;IF aktfeldMOD 15=0
+THEN gibstandaus(statistiknummer,aktfeld,felder);FI ;liesnaechstesfeld;UNTIL
+aktfeld>felderPER ;seitenwechsel.anzahlkopfzeilen:IF kopfname=niltextTHEN 1
+ELSE 2FI .tabellenkopfschreiben:IF aktfeld<=1THEN druckzeileschreiben(
+kopfgroesse);druckzeileschreiben(niltext);zeilenbisseitenendeDECR 2;FI ;
+druckzeileschreiben(tabellentext);druckzeileschreiben(kopflinie);
+zeilenbisseitenendeDECR 2.liesnaechstesfeld:aktfeldINCR 1;IF aktfeld<=felder
+THEN toline(stat,aktfeld+3);readrecord(stat,dateizeile);spaltenweise(text(
+aktfeld,4));spaltenweise(zeileundspalte);spaltenweise(space+space+(dateizeile
+SUB 5));spaltenweise(text(breiten[aktspalte],5));benoetigtezeilen:=1;IF
+length(dateizeile)-5>deffeldbreiteTHEN zaehlebenoetigtezeilenFI ;FI .
+zeileundspalte:text(aktzeile,3)+tschraeg+text(aktspalte,3).aktzeile:(aktfeld-
+1)DIV spalten+1.aktspalte:(aktfeld-1)MOD spalten+1.zaehlebenoetigtezeilen:
+zeilenende:=5+deffeldbreite;gehezurueckzumwortende(dateizeile,zeilenende);
+WHILE zeilenende<length(dateizeile)REP benoetigtezeilenINCR 1;
+gehezurueckzumwortende(dateizeile,zeilenende);zeilenendeINCR deffeldbreite+1;
+PER .schreibedasfeld:zeilenende:=5+deffeldbreite;gehezurueckzumwortende(
+dateizeile,zeilenende);druckzeileschreiben(zeile+tsenkrecht+space+subtext(
+dateizeile,6,zeilenende));zeilenbisseitenendeDECR 1;WHILE zeilenende<length(
+dateizeile)REP dateizeile:=subtext(dateizeile,zeilenende+2);zeilenende:=
+deffeldbreite;gehezurueckzumwortende(dateizeile,zeilenende);
+druckzeileschreiben(tabelleleer+subtext(dateizeile,1,zeilenende));
+zeilenbisseitenendeDECR 1;PER .END PROC druckestatdef;PROC
+gehezurueckzumwortende(TEXT CONST dateizeile,INT VAR zeilenende):INT VAR
+naechsteszeichen;IF zeilenende<length(dateizeile)CAND NOT amwortendeTHEN REP
+findewortende;UNTIL NOT hieristeinsamesquotePER ;zeilenende:=max(15,
+zeilenende);FI .findewortende:REP zeilenendeDECR 1;UNTIL amwortendeOR
+zeilenende<1PER .amwortende:(dateizeileSUB zeilenende)<>spaceAND (dateizeile
+SUB (zeilenende+1))=space.hieristeinsamesquote:naechsteszeichen:=pos(
+dateizeile,"!","�",zeilenende+1);naechsteszeichen>0CAND (dateizeileSUB
+naechsteszeichen)=quote.END PROC gehezurueckzumwortende;PROC gibstandaus(
+TEXT CONST nummer,INT CONST wert,hundert):disablestop;INT VAR proz:=(wert*100
+)DIV hundert;IF iserrorTHEN clearerror;proz:=int((real(wert)*100.0)/real(
+hundert));FI ;standardmeldung(druck.mvorbereiten,nummer+meldungzusatz+text(
+proz)+prozenttext+meldungzusatz);END PROC gibstandaus;PROC statistikladen(
+TEXT CONST statnummer):TEXT VAR dummy;INT VAR spaltenzaehler;forget(
+statistikdatei+statnummer,quiet);fetch(statistikdatei+statnummer,task(
+statistikserver));stat:=sequentialfile(input,statistikdatei+statnummer);
+getline(stat,dummy);get(stat,zeilen);get(stat,spalten);FOR spaltenzaehler
+FROM 1UPTO spaltenREP get(stat,breiten[spaltenzaehler]);PER ;modify(stat);
+felder:=zeilen*spalten;END PROC statistikladen;PROC druckdateibehandeln(PROC
+(TEXT CONST )machwas):INT VAR i;TEXT VAR name;commanddialogue(FALSE );get(all
+,name,i);WHILE i>0REP IF subtext(name,1,length(druckdatei))=druckdateiTHEN
+machwas(name);FI ;get(all,name,i);PER ;commanddialogue(TRUE ).END PROC
+druckdateibehandeln;END PACKET drucken;
+
diff --git a/app/schulis/2.2.1/src/5.erstellen b/app/schulis/2.2.1/src/5.erstellen
new file mode 100644
index 0000000..902729d
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.erstellen
@@ -0,0 +1,146 @@
+PACKET erstellenDEFINES staterstellen:LET datenbasisname="STATISTIK.basis",
+statistikdatei="STATISTIK.",statistikserver="statistik server",maskeerstellen
+="mst statistik erstellen",niltext="",space=" ",meldungzusatz="+",spaces=
+" ",sjoker="*",squote="""",sklammerzu=")",adate=2,erstedatenzeile=2,
+defvorzeilen=3,fstatnr=2,fstichtag=3,datepos=14,mkeinebasis=471,mzahleingeben
+=53,mgibtesnicht=477,mstatprozent=479,mstaterstellt=480,ogleich=1,ogroesser=2
+,okleiner=3,ogroessergleich=4,okleinergleich=5,oungleich=6,oenthalten=7,olike
+=8,maxvergleiche=25,ende=0,VERGLEICH =STRUCT (BOOL kursvergleich,INT operator
+,von,bis,INT undvergleich,odervergleich,INT zweiterkursvergleich,TEXT text);
+ROW maxvergleicheVERGLEICH VAR vergleiche;INT VAR anzahlvergleiche,verglpos;
+TEXT VAR vergl,basiszeile;PROC staterstellen(INT CONST was):SELECT wasOF
+CASE 1:erstellenstartprocCASE 2:erstellenexecCASE 3:statlistezeigen(int(
+standardmaskenfeld(fstatnr)))CASE 4:erstellenlisteexecEND SELECT .
+erstellenstartproc:standardstartproc(maskeerstellen);statdatenbasisermitteln(
+fstichtag);standardnproc.erstellenexec:IF NOT statdatenbasisvorhandenTHEN
+standardmeldung(mkeinebasis,niltext);ELIF int(standardmaskenfeld(fstatnr))<=0
+THEN standardmaskenfeld(niltext,fstatnr);standardmeldung(mzahleingeben,
+niltext);ELSE holedatenbasis;erstellen(standardmaskenfeld(fstatnr));
+loeschedatenbasis;FI ;leave(1).erstellenlisteexec:statlistebearbeiten(
+maskeerstellen);statdatenbasisermitteln(fstichtag);standardfelderausgeben;IF
+NOT statdatenbasisvorhandenTHEN standardmeldung(mkeinebasis,niltext);ELSE
+holedatenbasis;WHILE statlisteeintrag>niltextREP erstellen(statlisteeintrag);
+statlistebearbeiten(maskeerstellen);PER ;loeschedatenbasis;FI ;
+standardmaskenfeld(niltext,fstatnr);leave(2).END PROC staterstellen;PROC
+erstellen(TEXT CONST statistiknummer):BOOL VAR abbruch:=FALSE ;IF NOT exists(
+gewaehltestatistik,task(statistikserver))THEN standardmeldung(mgibtesnicht,
+statistiknummer+meldungzusatz);ELSE erstellestatistik;FI .erstellestatistik:
+statistiknummerIN fstatnr;standardmaskenfeld(niltext,fstatnr);standardmeldung
+(mstaterstellt,statistiknummer+meldungzusatz+"wird"+meldungzusatz);forget(
+gewaehltestatistik,quiet);fetch(gewaehltestatistik,task(statistikserver));
+fuelleallefelderaus;IF abbruchTHEN standardmeldung(mstaterstellt,
+statistiknummer+meldungzusatz+"nicht"+meldungzusatz);ELSE commanddialogue(
+FALSE );save(gewaehltestatistik,task(statistikserver));commanddialogue(TRUE )
+;standardmeldung(mstaterstellt,statistiknummer+meldungzusatz+
+standardmaskenfeld(fstichtag)+meldungzusatz);FI ;forget(gewaehltestatistik,
+quiet).fuelleallefelderaus:FILE VAR basis:=sequentialfile(modify,
+datenbasisname),stat:=sequentialfile(modify,gewaehltestatistik);INT VAR
+aktfeld,bearbeitetefelder:=0,felder:=lines(stat)-defvorzeilen;TEXT VAR
+dateizeile;fuellebedingungfelder;fuellesummenfelder;toline(stat,defvorzeilen)
+;writerecord(stat,subtext(standardmaskenfeld(fstichtag),datepos)).
+fuellebedingungfelder:toline(stat,defvorzeilen+1);col(stat,1);WHILE NOT eof(
+stat)REP readrecord(stat,dateizeile);SELECT pos("bst",dateizeileSUB 5)OF
+CASE 1:wertebedingungausCASE 2:replace(dateizeile,1," ")OTHERWISE
+bearbeitetefelderINCR 1END SELECT ;writerecord(stat,dateizeile);down(stat);
+UNTIL abbruchPER .fuellesummenfelder:toline(stat,defvorzeilen+1);WHILE NOT
+eof(stat)REP readrecord(stat,dateizeile);IF (dateizeileSUB 5)="s"THEN
+wertesummeausFI ;writerecord(stat,dateizeile);down(stat);UNTIL abbruchPER .
+wertebedingungaus:replace(dateizeile,1,text(anzahlschueler(basis,subtext(
+dateizeile,6)),4));gibprozentmeldungaus.wertesummeaus:aktfeld:=lineno(stat);
+replace(dateizeile,1,text(summe(stat,subtext(dateizeile,6)),4));toline(stat,
+aktfeld);gibprozentmeldungaus.gibprozentmeldungaus:bearbeitetefelderINCR 1;
+disablestop;INT VAR proz:=(bearbeitetefelder*100)DIV felder;IF iserrorTHEN
+clearerror;proz:=int((real(bearbeitetefelder)*100.0)/real(felder));FI ;
+enablestop;standardmeldung(mstatprozent,statistiknummer+meldungzusatz+text(
+proz)+meldungzusatz);.gewaehltestatistik:statistikdatei+statistiknummer.END
+PROC erstellen;PROC holedatenbasis:forget(datenbasisname,quiet);fetch(
+datenbasisname,task(statistikserver));END PROC holedatenbasis;PROC
+loeschedatenbasis:forget(datenbasisname,quiet);END PROC loeschedatenbasis;
+INT PROC summe(FILE VAR stat,TEXT CONST formel):INT VAR summe:=0,posi:=1,
+feldnr,faktor;REP faktor:=pos("+-",formelSUB posi);IF faktor>0THEN posiINCR 2
+;FI ;feldnr:=int(subtext(formel,posi+1,posi+4));toline(stat,feldnr+3);IF
+faktor=2THEN summeDECR int(subtext(stat,1,4));ELSE summeINCR int(subtext(stat
+,1,4));FI ;posi:=pos(formel,space,posi)+1;UNTIL posi<=1PER ;max(summe,0).END
+PROC summe;INT PROC anzahlschueler(FILE VAR basis,TEXT CONST bedingung):INT
+VAR erstervergleich,anzahl;liesallevergleiche;zaehledieschueler;anzahl.
+liesallevergleiche:anzahlvergleiche:=0;verglpos:=1;vergl:=bedingung;
+erstervergleich:=liesvergleich.zaehledieschueler:anzahl:=0;toline(basis,
+erstedatenzeile);col(basis,1);WHILE NOT eof(basis)REP readrecord(basis,
+basiszeile);IF vergleichpositiv(erstervergleich)THEN anzahlINCR 1;FI ;down(
+basis);PER .END PROC anzahlschueler;INT PROC liesvergleich:INT VAR wurzel,
+knoten;BOOL VAR opand;wurzel:=naechstervergleich;verglposINCR 1;WHILE
+nochmehrvergleicheREP liesboolop;knoten:=naechstervergleich;IF opandTHEN
+verknuepfeand(wurzel,knoten);ELSE verknuepfeor(wurzel,knoten);FI ;verglpos
+INCR 1;PER ;wurzel.naechstervergleich:SELECT pos("(mk",verglSUB verglpos)OF
+CASE 1:behandleklammerCASE 2:liesmerkmalCASE 3:lieskursOTHERWISE errorstop(
+"unzulässiger Vergleich");0END SELECT .behandleklammer:verglposINCR 1;
+liesvergleich.nochmehrvergleiche:(verglSUB verglpos-1)<>sklammerzuAND
+verglpos<length(vergl).liesboolop:SELECT pos(vergl," ",verglpos)-verglposOF
+CASE 2:verglposINCR 3;opand:=FALSE ;CASE 4:verglposINCR 5;opand:=FALSE ;
+OTHERWISE verglposINCR 4;opand:=TRUE ;END SELECT .END PROC liesvergleich;INT
+PROC liesmerkmal:INT VAR merkmal:=int(subtext(vergl,verglpos+1,verglpos+2)),
+operator:=pos("=><",verglSUB verglpos+4)+pos(".=>",verglSUB verglpos+5),von,
+bis,jokerpos;TEXT VAR vergltext:=niltext;IF operator>okleinerTHEN verglpos
+INCR 7;ELSE verglposINCR 6;FI ;IF (verglSUB verglpos)=sjokerTHEN operator:=
+ogroesser;vergltext:=subtext(spaces,1,statfeldlaenge(merkmal));verglposINCR 1
+;ELSE liestext(vergltext);FI ;erzeugemerkmalvergleich.erzeugemerkmalvergleich
+:von:=statfeldpos(merkmal);bis:=von-1+statfeldlaenge(merkmal);jokerpos:=pos(
+vergltext,sjoker);IF jokerpos>0THEN aenderevergleichsmerkmale;ELIF
+statfeldart(merkmal)=adateTHEN vergltext:=vergleichbaresdatum(vergltext);FI ;
+anzahlvergleicheINCR 1;vergleiche[anzahlvergleiche]:=VERGLEICH :(FALSE ,
+operator,von,bis,ende,ende,ende,vergltext);anzahlvergleiche.
+aenderevergleichsmerkmale:IF jokerpos=1AND pos(vergltext,sjoker,2)=length(
+vergltext)THEN operator:=oenthalten;vergltext:=subtext(vergltext,2,length(
+vergltext)-1);ELIF pos(vergltext,sjoker,jokerpos+1)>0THEN operator:=olike;
+ELIF jokerpos=1THEN vergltext:=subtext(vergltext,2);vonINCR (bis-von-length(
+vergltext)+1);ELIF jokerpos=length(vergltext)THEN vergltext:=subtext(
+vergltext,1,length(vergltext)-1);bisDECR (bis-von-length(vergltext)+1);ELSE
+operator:=olike;FI .END PROC liesmerkmal;PROC liestext(TEXT VAR vergltext):
+INT VAR beginn;verglposINCR 1;REP beginn:=verglpos;verglpos:=pos(vergl,squote
+,beginn+1);vergltextCAT subtext(vergl,beginn,verglpos-1);verglposINCR 1;
+UNTIL (verglSUB verglpos)<>squotePER END PROC liestext;INT PROC lieskurs:
+TEXT VAR vergl1:=niltext,vergl2:=niltext;INT VAR von1:=1,bis1:=0,von2,bis2,
+teilfeld,operator:=ogleich;BOOL VAR zweivergleiche:=FALSE ;ROW 4INT CONST
+laenge:=ROW 4INT :(2,2,4,1);verglposINCR 6;FOR teilfeldFROM 1UPTO 4REP
+liesnaechstenteiltext;PER ;erzeugekursvergleich.liesnaechstenteiltext:
+verglposINCR 1;IF (verglSUB verglpos)=sjokerTHEN verglposINCR 1;
+leererteiltext;ELIF zweivergleicheTHEN liestext(vergl2);bis2INCR laenge[
+teilfeld];ELSE liestext(vergl1);bis1INCR laenge[teilfeld];FI .leererteiltext:
+IF zweivergleicheTHEN IF von2>bis2THEN von2INCR laenge[teilfeld];bis2INCR
+laenge[teilfeld];FI ;ELIF von1>bis1THEN von1INCR laenge[teilfeld];bis1INCR
+laenge[teilfeld];ELSE zweivergleiche:=TRUE ;von2:=bis1+laenge[teilfeld]+1;
+bis2:=bis1+laenge[teilfeld];FI .erzeugekursvergleich:IF von1>bis1THEN
+operator:=ogroesser;ELIF zweivergleicheAND von2>bis2THEN zweivergleiche:=
+FALSE ;FI ;anzahlvergleicheINCR 1;vergleiche[anzahlvergleiche]:=VERGLEICH :(
+TRUE ,operator,von1,bis1,ende,ende,evtlvergl2,vergl1);IF zweivergleicheTHEN
+anzahlvergleicheINCR 1;vergleiche[anzahlvergleiche]:=VERGLEICH :(TRUE ,
+ogleich,von2,bis2,ende,ende,ende,vergl2);anzahlvergleiche-1ELSE
+anzahlvergleicheFI .evtlvergl2:IF zweivergleicheTHEN anzahlvergleiche+1ELSE
+endeFI .END PROC lieskurs;PROC verknuepfeand(INT CONST wurzel,knoten):IF
+vergleiche[wurzel].undvergleich<>endeTHEN verknuepfeand(vergleiche[wurzel].
+undvergleich,knoten);ELIF wurzel<>knotenTHEN vergleiche[wurzel].undvergleich
+:=knoten;FI ;IF vergleiche[wurzel].odervergleich<>endeTHEN verknuepfeand(
+vergleiche[wurzel].odervergleich,knoten);FI ;END PROC verknuepfeand;PROC
+verknuepfeor(INT CONST wurzel,knoten):IF vergleiche[wurzel].odervergleich=
+endeTHEN vergleiche[wurzel].odervergleich:=knotenELSE verknuepfeor(vergleiche
+[wurzel].odervergleich,knoten);FI ;END PROC verknuepfeor;BOOL PROC
+vergleichpositiv(INT CONST wurzel):(wurzelbedingungerfuelltCAND
+undbedingungenerfuellt)COR oderbedingungenerfuellt.undbedingungenerfuellt:(v.
+undvergleich=endeOR vergleichpositiv(v.undvergleich)).oderbedingungenerfuellt
+:(v.odervergleich<>endeAND vergleichpositiv(v.odervergleich)).
+wurzelbedingungerfuellt:IF v.kursvergleichTHEN kursvergleichpositiv(wurzel)
+ELSE SELECT v.operatorOF CASE ogleich:basistext=v.textCASE ogroesser:
+basistext>v.textCASE okleiner:basistext<v.textCASE ogroessergleich:basistext
+>=v.textCASE okleinergleich:basistext<=v.textCASE oungleich:basistext<>v.text
+CASE oenthalten:pos(basistext,v.text)>0OTHERWISE basistextLIKE v.textEND
+SELECT FI .basistext:subtext(basiszeile,v.von,v.bis).v:vergleiche[wurzel].
+END PROC vergleichpositiv;BOOL PROC kursvergleichpositiv(INT CONST wurzel):
+INT VAR kurspos:=122;IF v.operator=ogroesserTHEN stellefestobkursebelegtELSE
+REP kurspos:=pos(basiszeile,v.text,kurspos+1);UNTIL kurspos=0COR (
+kursposstimmtCAND zweitervergleichok)PER ;kurspos>0FI .
+stellefestobkursebelegt:pos(basiszeile,"!","�",kurspos+1)>0.kursposstimmt:((
+kurspos-6)MOD 9)=v.von-1.zweitervergleichok:v.zweiterkursvergleich=endeCOR v2
+.text=subtext(basiszeile,beginn+v2.von,beginn+v2.bis).v:vergleiche[wurzel].v2
+:vergleiche[v.zweiterkursvergleich].beginn:kurspos-v.von.END PROC
+kursvergleichpositiv;END PACKET erstellen;
+
diff --git a/app/schulis/2.2.1/src/5.felder b/app/schulis/2.2.1/src/5.felder
new file mode 100644
index 0000000..3fd6225
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.felder
@@ -0,0 +1,263 @@
+PACKET felderDEFINES statfelder:LET statistikdatei="STATISTIK.",
+statistikserver="statistik server",maskefelderdefinieren=
+"mst statistik felder definieren",maskefelderbearbeiten=
+"mst statistik felder bearbeiten",maskefelderstandarddruck=
+"mst statistik felder standarddruck",statistikvorzeilen=3,maxstatistiken=200,
+maxspalten=50,minbreite=4,maxbreite=30,niltext="",space=" ",meldungzusatz="+"
+,pruefeimintervall=3,fwarten=1,fstatnr=2,fuebertragen=3,ffeldnr=3,fzeile=4,
+fspalte=5,fart=6,fdef=7,fkopieren=8,fnaechstes=9,mnichterlaubt=34,
+mgibtesnicht=477,martangeben=478,mmussleerbleiben=491,mnureineauswahl=492,
+mspeichern=486,mnichtspeichern=487,muebernehmenfrage=493,mnichtgleichgross=
+494,muebernehmen=495,msyntaxfehler=496,mdefzulang=497;FILE VAR stat;TEXT VAR
+statistikname;BOOL VAR statgeaendert;INT VAR zeilen,spalten,felder,
+letztemeldung,verlassentiefe;ROW maxspaltenINT VAR breiten;LET normalesende=
+FALSE ,klammeramende=TRUE ,fvergleicherwartet=1,fmerkmalerwartet=2,
+fvergleichsoperwartet=3,fkommaerwartet=4,ftexterwartet=5,fklammerzuerwartet=6
+,fbooloperwartet=7,ftextfeldsummiert=8,fdatumfalsch=9,fhierkeinjoker=10,
+frechenoperwartet=11,ffeldnrerwartet=12,ffeldnrzuhoch=13,fzubreit=14,
+fpatternzulang=15,fzahlfalsch=16,tendedestextes=7,tname=1,ttext=4,atext=1,
+adate=2,azahl=3,akurs=4,squote="""",snull="0",skomma=",",sgleich="=",sspace=
+" ",sgroesser=">",sklammerauf="(",skleiner="<",sklammerzu=")",sgroessergleich
+=">=",sfeld="f",skleinergleich="<=",skurs="kurs",sungleich="<>",smerkmal="m",
+sand="AND",sjoker="*",sor="OR",splus="+",sund="UND",sminus="-",soder="ODER";
+TEXT VAR symbol;INT VAR type,fehlernr;BOOL VAR ok;PROC statfelder(INT CONST
+was):TEXT VAR bezeichnung,liste;INT VAR breite,hoehe,zaehler,status;SELECT
+wasOF CASE 1:felderbearbeitenstartprocCASE 2:felderbearbeitenspeichernCASE 3:
+felderbearbeitennaechstesfeldCASE 4:felderbearbeitenzumbeginnCASE 5:
+felderbearbeitenmerkmalslisteCASE 6:felderbearbeitendefinitionkopierenCASE 7:
+felderlistezeigenCASE 8:felderlistebearbeitenstartprocCASE 9:
+felderstandarddruckstartprocCASE 10:felderstandarddruckspeichernCASE 11:
+felderstandarddrucknichtspeichernCASE 12:felderlistestandarddruckstartproc
+CASE 13:felderlistestandarddruckspeichernCASE 14:
+felderlistestandarddrucknichtspeichernCASE 15:
+felderlistestandarddruckzumbeginnCASE 16:felderuebernehmenstartprocCASE 17:
+felderuebernehmenexecCASE 18:allefelderspeichernEND SELECT .
+felderbearbeitenstartproc:IF NOT statnummerokTHEN leave(1);ELIF
+standardmaskenfeld(fuebertragen)>niltextTHEN standardmeldung(mmussleerbleiben
+,niltext);infeld(fuebertragen);leave(1);ELSE statistikladen(statnummer);
+standardstartproc(maskefelderbearbeiten);verlassentiefe:=0;feldbearbeiten(1);
+standardnproc;FI .felderbearbeitenspeichern:IF NOT feldeingabenokTHEN leave(1
+);ELSE speicherefeldab;felderbearbeitennaechstesfeld;FI .
+felderbearbeitennaechstesfeld:IF NOT naechstefeldnummerokTHEN leave(1);ELIF
+compress(standardmaskenfeld(fnaechstes))=niltextTHEN
+felderbearbeitenzumbeginnELSE feldbearbeiten(int(standardmaskenfeld(
+fnaechstes)));leave(1);FI .felderbearbeitenzumbeginn:statistiksichern;
+standardstartproc(maskefelderdefinieren);standardmaskenfeld(statistikname,
+fstatnr);leave(2+verlassentiefe).allefelderspeichern:WHILE feldeingabenok
+CAND naechstefeldnummerokREP speicherefeldab;IF standardmaskenfeld(fnaechstes
+)=niltextTHEN felderbearbeitenzumbeginn;LEAVE allefelderspeichernELSE
+feldbearbeiten(int(standardmaskenfeld(fnaechstes)));FI ;PER ;leave(1).
+felderbearbeitenmerkmalsliste:WINDOW VAR w:=startwindow(40,23,77,1);open(w);
+bereitelisteauf;listeCAT "*";listeCAT auskunftstextende;auskunfterteilung(
+liste,w,FALSE );reorganizescreen;setlasteditvalues;leave(1).bereitelisteauf:
+liste:="Bez. Feld Länge";listeCAT auskunftstextende;FOR
+zaehlerFROM 1UPTO 50REP IF zaehler=39THEN listeCAT
+" davon Art 2";listeCAT auskunftstextende;listeCAT
+" Fach 2";listeCAT auskunftstextende;listeCAT
+" Kennung 4";listeCAT auskunftstextende;listeCAT
+" Klausur 1";listeCAT auskunftstextende;FI ;IF zaehler<
+10THEN listeCAT "m0"ELSE listeCAT "m"FI ;listeCAT text(zaehler);listeCAT
+" = ";listeCAT text(statfeldname(zaehler),24);listeCAT text(statfeldlaenge(
+zaehler));listeCAT auskunftstextende;PER .felderbearbeitendefinitionkopieren:
+standardpruefe(pruefeimintervall,fkopieren,1,felder,niltext,status);IF status
+>0THEN infeld(status)ELSE felddefinitionzeigen(int(standardmaskenfeld(
+fkopieren)))FI ;leave(1).felderlistezeigen:letztemeldung:=0;statlistezeigen(
+int(standardmaskenfeld(fstatnr))).felderlistebearbeitenstartproc:IF
+highestentry(thesaurusauswahl)=1THEN statlistebearbeiten(
+maskefelderbearbeiten);statistikladen(statlisteeintrag);verlassentiefe:=1;
+feldbearbeiten(1);standardnproc;ELSE standardstartproc(maskefelderdefinieren)
+;IF highestentry(thesaurusauswahl)>1THEN standardmeldung(mnureineauswahl,
+niltext);FI ;leave(2);FI .felderstandarddruckstartproc:IF NOT statnummerok
+THEN leave(1);ELIF standardmaskenfeld(fuebertragen)>niltextTHEN
+standardmeldung(mmussleerbleiben,niltext);infeld(fuebertragen);leave(1);ELSE
+statistikladen(statnummer);standardstartproc(maskefelderstandarddruck);
+spaltenbreiteneintragen;standardnproc;FI .felderstandarddruckspeichern:IF
+NOT spaltenbreitenokTHEN leave(1);ELSE spaltenbreitenspeichern;
+standardstartproc(maskefelderdefinieren);standardmeldung(mspeichern,
+statistikname+meldungzusatz);statistiksichern;standardmaskenfeld(
+statistikname,fstatnr);leave(2);FI .felderstandarddrucknichtspeichern:
+standardstartproc(maskefelderdefinieren);standardmeldung(mnichtspeichern,
+statistikname+meldungzusatz);statistikvergessen;standardmaskenfeld(
+statistikname,fstatnr);leave(2).felderlistestandarddruckstartproc:
+statlistebearbeiten(maskefelderstandarddruck);IF statlisteeintrag>niltext
+THEN statistikladen(statlisteeintrag);spaltenbreiteneintragen;standardnproc;
+ELSE standardstartproc(maskefelderdefinieren);IF letztemeldung=mspeichernOR
+letztemeldung=mnichtspeichernTHEN standardmeldung(letztemeldung,statistikname
++meldungzusatz);FI ;leave(2);FI .felderlistestandarddruckspeichern:IF NOT
+spaltenbreitenokTHEN leave(1);ELSE standardmeldung(mspeichern,statistikname+
+meldungzusatz);letztemeldung:=mspeichern;spaltenbreitenspeichern;
+statistiksichern;standardmaskenfeld(statistikname,fstatnr);enter(1);FI .
+felderlistestandarddrucknichtspeichern:standardmeldung(mnichtspeichern,
+statistikname+meldungzusatz);letztemeldung:=mnichtspeichern;
+statistikvergessen;enter(1).felderlistestandarddruckzumbeginn:
+statistikvergessen;enter(3).felderuebernehmenstartproc:standardpruefe(
+pruefeimintervall,fuebertragen,1,maxstatistiken,niltext,status);IF status>0
+THEN infeld(status);leave(1);ELIF NOT statistikexistiert(uebernehmennummer)
+THEN standardmeldung(mgibtesnicht,uebernehmennummer+meldungzusatz);infeld(
+fuebertragen);leave(1);ELIF NOT statnummerokTHEN leave(1);ELIF
+diedefinitionensindnichtgleichgrossTHEN standardmeldung(mnichtgleichgross,
+niltext);leave(1);ELSE standardmeldung(muebernehmenfrage,niltext);feldschutz(
+fwarten);feldschutz(fstatnr);feldschutz(fuebertragen);infeld(fwarten);
+standardnproc;FI .diedefinitionensindnichtgleichgross:statistikladen(
+statnummer);hoehe:=zeilen;breite:=spalten;statistikvergessen;statistikladen(
+uebernehmennummer);statistikvergessen;hoehe<>zeilenOR breite<>spalten.
+felderuebernehmenexec:statistikladen(statnummer);tofirstrecord(stat);
+readrecord(stat,bezeichnung);statistikvergessen;statistikladen(
+uebernehmennummer);tofirstrecord(stat);writerecord(stat,bezeichnung);toline(
+stat,statistikvorzeilen);writerecord(stat,niltext);rename(statistikdatei+
+uebernehmennummer,statistikdatei+statnummer);statistikname:=statnummer;
+statistiksichern;standardmeldung(muebernehmen,uebernehmennummer+meldungzusatz
+);feldfrei(fstatnr);feldfrei(fuebertragen);standardmaskenfeld(niltext,
+fuebertragen);infeld(fstatnr);leave(2).naechstefeldnummerok:IF compress(
+standardmaskenfeld(fnaechstes))=niltextTHEN standardmaskenfeld(niltext,
+fnaechstes);status:=0;ELSE standardpruefe(pruefeimintervall,fnaechstes,1,
+felder,niltext,status);FI ;IF status>0THEN infeld(status)FI ;status=0.
+feldeingabenok:status:=0;IF art=0THEN standardmeldung(mnichterlaubt,niltext);
+status:=fart;ELIF NOT definitionokTHEN status:=fdef;ELIF standardmaskenfeld(
+fkopieren)>niltextTHEN standardmeldung(mmussleerbleiben,niltext);status:=
+fkopieren;ELIF NOT naechstefeldnummerokTHEN status:=fnaechstes;FI ;IF status>
+0THEN infeld(status);FI ;status=0.definitionok:SELECT artOF CASE 1:
+bedingungok(fdef)CASE 2:summeok(fdef)CASE 3:textok(fdef,breiten[int(
+standardmaskenfeld(fspalte))])OTHERWISE leerokEND SELECT .leerok:IF
+standardmaskenfeld(fdef)>niltextTHEN standardmeldung(martangeben,niltext);
+FALSE ELSE TRUE FI .art:IF standardmaskenfeld(fart)=niltextTHEN 4ELSE pos(
+"bst ",standardmaskenfeld(fart))FI .spaltenbreiteneintragen:input(stat);
+getline(stat,bezeichnung);get(stat,hoehe);get(stat,breite);standardmaskenfeld
+(text(statistikname,3),fstatnr);FOR zaehlerFROM 1UPTO spaltenREP
+tragespaltenwertein;feldfrei(breitenfeld+1);PER ;FOR zaehlerFROM spalten+1
+UPTO maxspaltenREP standardmaskenfeld(space+space,breitenfeld);
+standardmaskenfeld(space+space,breitenfeld+1);feldschutz(breitenfeld+1);PER ;
+modify(stat);infeld(2);standardfelderausgeben;infeld(4).tragespaltenwertein:
+get(stat,breite);standardmaskenfeld(text(zaehler,2),breitenfeld);
+standardmaskenfeld(text(breite),breitenfeld+1).breitenfeld:(zaehler-1)MOD 10*
+10+(zaehler-1)DIV 10*2+3.spaltenbreitenok:FOR zaehlerFROM 1UPTO spaltenREP
+standardpruefe(pruefeimintervall,breitenfeld+1,minbreite,maxbreite,niltext,
+status);UNTIL status>0PER ;IF status>0THEN infeld(status)FI ;status=0.
+spaltenbreitenspeichern:bezeichnung:=text(zeilen)+space+text(spalten)+space;
+FOR zaehlerFROM 1UPTO spaltenREP bezeichnungCAT text(int(standardmaskenfeld(
+breitenfeld+1)));bezeichnungCAT space;PER ;toline(stat,2);writerecord(stat,
+bezeichnung).statnummerok:standardpruefe(pruefeimintervall,fstatnr,1,
+maxstatistiken,niltext,status);IF status>0THEN infeld(status)ELIF NOT
+statistikexistiert(statnummer)THEN standardmeldung(mgibtesnicht,statnummer+
+meldungzusatz);infeld(fstatnr);status:=fstatnrFI ;status=0.statnummer:text(
+int(standardmaskenfeld(fstatnr))).uebernehmennummer:text(int(
+standardmaskenfeld(fuebertragen))).END PROC statfelder;PROC statistikladen(
+TEXT CONST statnummer):INT VAR spaltenzaehler;forget(statistikdatei+
+statnummer,quiet);fetch(statistikdatei+statnummer,task(statistikserver));stat
+:=sequentialfile(input,statistikdatei+statnummer);getline(stat,statistikname)
+;get(stat,zeilen);get(stat,spalten);FOR spaltenzaehlerFROM 1UPTO spaltenREP
+get(stat,breiten[spaltenzaehler]);PER ;modify(stat);felder:=zeilen*spalten;
+statistikname:=statnummer;statgeaendert:=FALSE ;END PROC statistikladen;PROC
+statistiksichern:IF statgeaendertTHEN toline(stat,statistikvorzeilen);
+writerecord(stat,niltext);FI ;commanddialogue(FALSE );save(statistikdatei+
+statistikname,task(statistikserver));commanddialogue(TRUE );
+statistikvergessen;END PROC statistiksichern;PROC statistikvergessen:forget(
+statistikdatei+statistikname,quiet);END PROC statistikvergessen;BOOL PROC
+statistikexistiert(TEXT CONST statnummer):exists(statistikdatei+statnummer,
+task(statistikserver))END PROC statistikexistiert;PROC feldbearbeiten(INT
+CONST feldnummer):standardmaskenfeld(text(statistikname,3),fstatnr);
+standardmaskenfeld(text(feldnummer,4),ffeldnr);standardmaskenfeld(text((
+feldnummer-1)DIV spalten+1,2),fzeile);standardmaskenfeld(text((feldnummer-1)
+MOD spalten+1,2),fspalte);IF feldnummer<felderTHEN standardmaskenfeld(text(
+feldnummer+1),fnaechstes);ELSE standardmaskenfeld(niltext,fnaechstes);FI ;
+felddefinitionzeigen(feldnummer);END PROC feldbearbeiten;PROC
+felddefinitionzeigen(INT CONST feldnummer):TEXT VAR felddefinition;toline(
+stat,statistikvorzeilen+feldnummer);readrecord(stat,felddefinition);
+standardmaskenfeld(felddefinitionSUB 5,fart);standardmaskenfeld(subtext(
+felddefinition,6),fdef);standardmaskenfeld(niltext,fkopieren);infeld(fstatnr)
+;standardfelderausgeben;infeld(fart);END PROC felddefinitionzeigen;PROC
+speicherefeldab:TEXT VAR felddefinition;IF standardmaskenfeld(fart)=niltext
+OR standardmaskenfeld(fart)=spaceTHEN felddefinition:=niltextELSE
+felddefinition:=minbreite*space;felddefinitionCAT standardmaskenfeld(fart);
+felddefinitionCAT standardmaskenfeld(fdef);FI ;toline(stat,statistikvorzeilen
++int(standardmaskenfeld(ffeldnr)));writerecord(stat,felddefinition);
+statgeaendert:=TRUE ;END PROC speicherefeldab;BOOL PROC bedingungok(INT
+CONST maskenfeld):TEXT VAR bedingung;ok:=TRUE ;fehlernr:=0;scan(
+standardmaskenfeld(maskenfeld));naechstessymbol;bedingung:=normbedingung(
+normalesende);IF NOT okTHEN standardmeldung(msyntaxfehler,fehlermeldung+
+meldungzusatz);ELIF length(bedingung)>250THEN standardmaskenfeld(bedingung,
+maskenfeld);standardmeldung(mdefzulang,niltext);ELSE standardmaskenfeld(
+bedingung,maskenfeld);bedingungIN maskenfeld;FI ;okEND PROC bedingungok;TEXT
+PROC normbedingung(BOOL CONST endeklammerzu):TEXT VAR bedingung:=niltext,
+operator;INT VAR merkmal;IF type=tendedestextesTHEN fehler(fvergleicherwartet
+);ELIF symbol=sklammeraufTHEN behandleklammerELIF symbol=skursTHEN
+behandlekursELSE behandlemerkmalFI ;IF NOT okTHEN ELIF type<>tendedestextes
+THEN liesverknuepfungoderklammerzuELIF endeklammerzuTHEN fehler(
+fklammerzuerwartet);FI ;bedingung.behandleklammer:naechstessymbol;bedingung:=
+sklammerauf+normbedingung(klammeramende)+sklammerzu.behandlemerkmal:
+liesmerkmal;liesoperator;IF okTHEN bedingungCAT textderlaenge(statfeldlaenge(
+merkmal),statfeldart(merkmal),operator);FI .liesmerkmal:merkmal:=int(subtext(
+symbol,2,3));IF type=tnameAND length(symbol)=3AND (symbolSUB 1)=smerkmalAND
+merkmal>=1AND merkmal<=50AND lastconversionokTHEN bedingungCAT symbol;
+naechstessymbol;ELSE fehler(fmerkmalerwartet);FI .liesoperator:IF symbol=
+sgleichOR symbol=sgroesserOR symbol=sgroessergleichOR symbol=sungleichOR
+symbol=skleinerOR symbol=skleinergleichTHEN bedingungCAT sspace;bedingungCAT
+symbol;bedingungCAT sspace;operator:=symbol;ELIF okTHEN fehler(
+fvergleichsoperwartet);FI .behandlekurs:naechstessymbol;IF symbol=sgleich
+THEN bedingungCAT skurs+sspace+sgleich+sspace;bedingungCAT textderlaenge(2,
+akurs,sgleich);lieskomma;bedingungCAT textderlaenge(2,akurs,sgleich);
+lieskomma;bedingungCAT textderlaenge(4,akurs,sgleich);lieskomma;bedingungCAT
+textderlaenge(1,akurs,sgleich);ELSE fehler(fvergleichsoperwartet)FI .
+lieskomma:IF symbol=skommaTHEN bedingungCAT symbol;ELIF okTHEN fehler(
+fkommaerwartet);FI .liesverknuepfungoderklammerzu:IF endeklammerzuAND symbol=
+sklammerzuTHEN naechstessymbol;ELIF symbol=sandOR symbol=sundOR symbol=sorOR
+symbol=soderTHEN bedingungCAT sspace;bedingungCAT symbol;bedingungCAT sspace;
+naechstessymbol;bedingungCAT normbedingung(endeklammerzu);ELSE fehler(
+fbooloperwartet);FI .END PROC normbedingung;TEXT PROC textderlaenge(INT
+CONST laenge,art,TEXT CONST operator):TEXT VAR textsammler:=niltext;IF ok
+THEN sammletextteile;normieretext;textanhaengen;FI ;textsammler.
+sammletextteile:REP naechstessymbol;IF type=ttextTHEN textsammlerCAT symbol
+ELIF symbol=sjokerTHEN textsammlerCAT symbolELSE fehler(ftexterwartet);FI ;
+naechstessymbol;UNTIL NOT okOR symbol<>splusPER .normieretext:SELECT artOF
+CASE atext:textbehandelnCASE adate:datumbehandelnCASE azahl:zahlbehandeln
+CASE akurs:kursbehandelnEND SELECT .textbehandeln:WHILE pos(textsammler,
+sjoker+sjoker)>0REP change(textsammler,sjoker+sjoker,sjoker);PER ;IF pos(
+textsammler,sjoker)=0THEN textsammler:=text(textsammler,laenge);ELIF operator
+<>sgleichTHEN fehler(fhierkeinjoker);ELIF length(textsammler)>laengeTHEN
+fehler(fpatternzulang);FI .datumbehandeln:textsammler:=datum(datum(
+textsammler));IF textsammler=niltextTHEN fehler(fdatumfalsch);FI .
+zahlbehandeln:textsammler:=text(int(subtext(textsammler,1,4)));IF length(
+textsammler)>laengeOR textsammler=niltextOR NOT lastconversionokTHEN fehler(
+fzahlfalsch)ELSE textsammler:=(laenge-length(textsammler))*snull+textsammler;
+FI .kursbehandeln:IF pos(textsammler,sjoker)=0THEN textsammler:=text(
+textsammler,laenge);ELIF length(textsammler)<>1THEN fehler(fhierkeinjoker);
+FI .textanhaengen:IF textsammler<>sjokerTHEN changeall(textsammler,squote,
+squote+squote);textsammler:=squote+textsammler+squote;FI .END PROC
+textderlaenge;BOOL PROC summeok(INT CONST maskenfeld):TEXT VAR summe:=niltext
+;ok:=TRUE ;fehlernr:=0;scan(standardmaskenfeld(maskenfeld));summenormieren;
+IF NOT okTHEN standardmeldung(msyntaxfehler,fehlermeldung+meldungzusatz);
+ELIF length(summe)>250THEN standardmaskenfeld(summe,maskenfeld);
+standardmeldung(mdefzulang,niltext);ELSE standardmaskenfeld(summe,maskenfeld)
+;summeIN maskenfeld;FI ;ok.summenormieren:naechstessymbol;REP IF symbol=splus
+OR symbol=sminusTHEN summeCAT sspace;summeCAT symbol;naechstessymbol;ELIF
+summe>niltextTHEN fehler(frechenoperwartet);FI ;INT CONST feldnr:=int(subtext
+(symbol,2,5));IF okTHEN IF type=tnameCAND lastconversionokCAND (symbolSUB 1)=
+sfeldCAND (symbolSUB 2)<>snullCAND feldnr>=1CAND feldnr<=felderCAND NOT
+isttextfeldTHEN summeCAT sspace;summeCAT symbol;naechstessymbol;ELIF feldnr>
+felderTHEN fehler(ffeldnrzuhoch);ELIF isttextfeldTHEN fehler(
+ftextfeldsummiert);ELIF okTHEN fehler(ffeldnrerwartet);FI ;FI ;UNTIL type=
+tendedestextesOR NOT okPER ;summe:=subtext(summe,2).isttextfeld:toline(stat,
+statistikvorzeilen+feldnr);subtext(stat,minbreite+1,minbreite+1)="t".END
+PROC summeok;BOOL PROC textok(INT CONST maskenfeld,feldbreite):TEXT VAR tex:=
+compress(standardmaskenfeld(maskenfeld));fehlernr:=0;ok:=TRUE ;scan(tex);
+naechstessymbol;IF type=tendedestextesTHEN tex:=squote+squoteELIF pos(symbol,
+sjoker)>0THEN fehler(fhierkeinjoker)ELIF type<>ttextTHEN fehler(ftexterwartet
+);ELIF length(symbol)>feldbreiteTHEN fehler(fzubreit);ELSE naechstessymbol;
+IF type<>tendedestextesTHEN fehler(ftexterwartet);FI ;FI ;IF NOT okTHEN
+standardmeldung(msyntaxfehler,fehlermeldung+meldungzusatz);ELSE
+standardmaskenfeld(tex,maskenfeld);texIN maskenfeld;FI ;ok.END PROC textok;
+PROC naechstessymbol:nextsymbol(symbol,type);END PROC naechstessymbol;PROC
+fehler(INT CONST nummer):ok:=FALSE ;fehlernr:=nummer;END PROC fehler;TEXT
+PROC fehlermeldung:SELECT fehlernrOF CASE fvergleicherwartet:
+"Vergleich erwartet"CASE fmerkmalerwartet:"Merkmal m01 bis m50 erwartet"CASE
+fvergleichsoperwartet:"=, >, <, >=, <= oder <> erwartet"CASE fkommaerwartet:
+"Komma erwartet"CASE ftexterwartet:"""Text"" erwartet"CASE fklammerzuerwartet
+:"')' erwartet"CASE fbooloperwartet:"'UND' oder 'ODER' erwartet"CASE
+ftextfeldsummiert:"Text-Feld in der Summenformel"CASE fdatumfalsch:
+"Datum nicht zulässig"CASE fhierkeinjoker:"'*' nicht zulässig"CASE
+frechenoperwartet:"'+' oder '-' erwartet"CASE ffeldnrerwartet:
+"Feldnummer (z.B. f17) erwartet"CASE ffeldnrzuhoch:"Feldnummer zu hoch"CASE
+fzubreit:"Text länger als Spaltenbreite"CASE fpatternzulang:
+"Pattern für das Merkmal zu lang"CASE fzahlfalsch:"Zahl falsch angegeben"
+OTHERWISE niltextEND SELECT END PROC fehlermeldung;END PACKET felder;
+
diff --git a/app/schulis/2.2.1/src/5.manager b/app/schulis/2.2.1/src/5.manager
new file mode 100644
index 0000000..c7fb1e4
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.manager
@@ -0,0 +1,47 @@
+PACKET statistikmanagerDEFINES statistikmanager:LET statistikdatei=
+"STATISTIK.",statistikbasis="STATISTIK.basis",statistikverzeichnis=
+"statistik verzeichnis",maxstatistiken=200,maxtheslaenge=80,niltext="",
+trenner=" ",stichtag="Stichtag ",keinstichtag=" ";LET ack=0,
+fetchcode=11,savecode=12,erasecode=14,continuecode=100;THESAURUS VAR
+statliste,statbezeichnungen;TEXT VAR filename;BOUND STRUCT (TEXT name,
+writepass,readpass)VAR msg;PROC statmanager(DATASPACE VAR ds,INT CONST order,
+phase,TASK CONST ordertask):disablestop;IF order>continuecodeTHEN
+yterminaldialogELIF order=fetchcodeTHEN ylisteschickenELIF order=savecode
+THEN yeintraghinzufuegenELIF order=erasecodeTHEN yeintragloeschenELSE
+freemanager(ds,order,phase,ordertask)FI .yeintraghinzufuegen:IF phase=1THEN
+getfilename;freemanager(ds,order,phase,ordertask);ELSE freemanager(ds,order,
+phase,ordertask);IF NOT iserrorAND exists(filename)THEN eintragloeschen(
+filename);eintraghinzufuegen(filename);FI FI .yeintragloeschen:getfilename;
+freemanager(ds,order,phase,ordertask);IF NOT iserrorAND phase<>1AND NOT
+exists(filename)THEN eintragloeschen(filename);FI .ylisteschicken:getfilename
+;IF filename=statistikverzeichnisTHEN schickedenthesaurusELSE freemanager(ds,
+order,phase,ordertask)FI .schickedenthesaurus:forget(ds);ds:=nilspace;BOUND
+THESAURUS VAR allestatistiken:=ds;allestatistiken:=statbezeichnungen;send(
+ordertask,ack,ds);forget(ds).yterminaldialog:freemanager(ds,order,phase,
+ordertask);clearerror;statlisteerstellen.getfilename:msg:=ds;filename:=msg.
+name.END PROC statmanager;PROC eintragloeschen(TEXT CONST filename):
+enablestop;INT VAR index:=link(statliste,filename);IF index>0AND iststatistik
+(filename)THEN delete(statliste,index);delete(statbezeichnungen,index);FI
+END PROC eintragloeschen;PROC eintraghinzufuegen(TEXT CONST filename):
+disablestop;IF iststatistik(filename)THEN eintragbearbeiten(filename);IF
+iserrorTHEN clearerror;forget(filename,quiet);FI ;ELIF NOT (filename=
+statistikbasis)THEN forget(filename,quiet);FI .END PROC eintraghinzufuegen;
+PROC eintragbearbeiten(TEXT CONST filename):enablestop;FILE VAR f:=
+sequentialfile(modify,filename);TEXT VAR eintrag,dateizeile;eintrag:=text(int
+(statistiknummer),3);eintragCAT trenner;eintragCAT stichtagtext;eintragCAT
+trenner;eintragCAT bezeichnung;insert(statliste,filename);insert(
+statbezeichnungen,subtext(eintrag,1,maxtheslaenge)).statistiknummer:subtext(
+filename,length(statistikdatei)+1).stichtagtext:toline(f,3);readrecord(f,
+dateizeile);IF dateizeile>niltextTHEN stichtag+dateizeileELSE keinstichtagFI
+.bezeichnung:toline(f,1);readrecord(f,dateizeile);dateizeile.END PROC
+eintragbearbeiten;PROC statlisteerstellen:enablestop;INT VAR index:=0;TEXT
+VAR eintrag;statliste:=emptythesaurus;statbezeichnungen:=emptythesaurus;get(
+all,eintrag,index);WHILE index>0REP eintraghinzufuegen(eintrag);get(all,
+eintrag,index);PER ;END PROC statlisteerstellen;BOOL PROC iststatistik(TEXT
+CONST filename):enablestop;TEXT CONST zahltext:=subtext(filename,length(
+statistikdatei)+1);INT CONST zahl:=int(zahltext);subtext(filename,1,length(
+statistikdatei))=statistikdateiAND zahl>=1AND zahl<=maxstatistikenAND text(
+zahl)=zahltext.END PROC iststatistik;PROC statistikmanager:statlisteerstellen
+;globalmanager(PROC (DATASPACE VAR ,INT CONST ,INT CONST ,TASK CONST )
+statmanager)END PROC statistikmanager;END PACKET statistikmanager;
+
diff --git a/app/schulis/2.2.1/src/5.merkmale b/app/schulis/2.2.1/src/5.merkmale
new file mode 100644
index 0000000..f41709f
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.merkmale
@@ -0,0 +1,52 @@
+PACKET merkmaleDEFINES statfeldname,statfeldlaenge,statfeldpos,statfeldart,
+statdatenbasiszeile,vergleichbaresdatum:LET niltext="",space=" ",null="0",
+arttext=1,artdate=2,artzahl=3;ROW 50INT CONST feldnr:=ROW 50INT :(5,6,7,8,10,
+12,13,0,16,17,18,0,27,35,36,38,39,42,43,44,45,46,47,48,49,50,55,56,58,59,61,
+62,64,65,67,68,69,0,0,0,0,0,0,0,0,0,0,0,0,0);ROW 50INT CONST feldlaenge:=ROW
+50INT :(8,3,2,4,1,1,2,2,8,1,1,2,3,3,1,1,3,2,8,4,4,4,4,4,4,4,2,3,2,3,2,3,2,3,2
+,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9);ROW 50INT CONST feldpos:=ROW 50INT :(1,9,12,
+14,18,19,20,22,24,32,33,34,36,39,42,43,44,47,49,57,61,65,69,73,77,81,85,87,90
+,92,95,97,100,102,105,107,115,123,132,141,150,159,168,177,186,195,204,213,222
+,231);ROW 50INT CONST feldart:=ROW 50INT :(2,1,3,1,1,1,3,1,2,1,1,1,1,1,1,1,1,
+3,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1);TEXT
+CONST leerezeile:=(feldpos[38]-1)*space,leerekurse:=(feldlaenge[38]*(50-37))*
+space;TEXT PROC statfeldname(INT CONST merkmal):INT CONST feldnum:=feldnr[
+merkmal];IF feldnum>0THEN name(feldnum)ELIF merkmal=8THEN
+"Schulart letzte Schule"ELIF merkmal=12THEN "Schulart neue Schule"ELSE text(
+merkmal-37)+". Kurs"FI .END PROC statfeldname;INT PROC statfeldlaenge(INT
+CONST merkmal):feldlaenge[merkmal]END PROC statfeldlaenge;INT PROC
+statfeldpos(INT CONST merkmal):feldpos[merkmal]END PROC statfeldpos;INT PROC
+statfeldart(INT CONST merkmal):feldart[merkmal]END PROC statfeldart;TEXT
+PROC statdatenbasiszeile:TEXT VAR zeile:=leerezeile,kurse:=leerekurse,kennung
+,schule;INT VAR feldzaehler;holediffdaten;uebertragestandardfelder;
+uebertrageschularten;IF hjdatendaTHEN uebertragehjdatenFI ;zeileCAT kurse;
+zeile.uebertragestandardfelder:FOR feldzaehlerFROM 1UPTO 38REP IF feldnr[
+feldzaehler]>0THEN replace(zeile,feldpos[feldzaehler],feldinhalt);FI ;PER .
+feldinhalt:SELECT feldart[feldzaehler]OF CASE arttext:feldwertCASE artdate:
+vergleichbaresdatum(feldwert)CASE artzahl:kennung:=compress(feldwert);(
+feldlaenge[feldzaehler]-length(kennung))*null+kennungOTHERWISE niltextEND
+SELECT .feldwert:subtext(wert(feldnr[feldzaehler]),1,feldlaenge[feldzaehler])
+.holediffdaten:IF wert(fnrsutiddiffdaten)=niltextTHEN errorstop(
+"Keine Diffdaten zu Schüler "+wert(fnrsufamnames));ELSE readtid(dnrdiffdaten,
+wert(fnrsutiddiffdaten));FI .uebertrageschularten:schule:=wert(
+fnrsuskennlschule);IF schule>niltextTHEN putwert(fnrschkennung,schule);search
+(dnrschulen);IF dbstatus=okTHEN replace(zeile,feldpos[8],wert(fnrschart));FI
+;FI ;schule:=wert(fnrsuskennnschule);IF schule>niltextTHEN putwert(
+fnrschkennung,schule);search(dnrschulen);IF dbstatus=okTHEN replace(zeile,
+feldpos[12],wert(fnrschart));FI ;FI .hjdatenda:wert(fnrsutidakthjd)>niltext.
+uebertragehjdaten:readtid(dnrhalbjahresdaten,wert(fnrsutidakthjd));kennung:=
+wert(fnrhjdkursart);FOR feldzaehlerFROM 0UPTO length(kennung)DIV 2-1REP
+replace(kurse,feldzaehler*9+1,diesekurskennung);PER ;kennung:=wert(fnrhjdfach
+);FOR feldzaehlerFROM 0UPTO length(kennung)DIV 2-1REP replace(kurse,
+feldzaehler*9+3,diesefachkennung);PER ;kennung:=wert(fnrhjdlerngrpkenn);FOR
+feldzaehlerFROM 0UPTO length(kennung)DIV 2-1REP replace(kurse,feldzaehler*9+5
+,dieselernkennung);PER ;kennung:=wert(fnrhjdklausurteiln);FOR feldzaehler
+FROM 1UPTO length(kennung)REP replace(kurse,feldzaehler*9,dieseklsrkennung);
+PER .diesekurskennung:subtext(kennung,feldzaehler*2+1,feldzaehler*2+2).
+diesefachkennung:subtext(kennung,feldzaehler*2+1,feldzaehler*2+2).
+dieselernkennung:subtext(kennung,feldzaehler*4+1,feldzaehler*4+4).
+dieseklsrkennung:kennungSUB feldzaehler.END PROC statdatenbasiszeile;TEXT
+PROC vergleichbaresdatum(TEXT CONST dat):INT CONST datzahl:=datum(dat);IF
+datzahl<0THEN " 0"+text(datzahl-minint,5)ELSE " 1"+text(datzahl,5)FI END
+PROC vergleichbaresdatum;END PACKET merkmale;
+
diff --git a/app/schulis/2.2.1/src/5.statistik liste b/app/schulis/2.2.1/src/5.statistik liste
new file mode 100644
index 0000000..f7c00ca
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.statistik liste
@@ -0,0 +1,27 @@
+PACKET statistiklisteDEFINES statlistezeigen,statlistebearbeiten,
+statlisteeintrag:LET statistikserver="statistik server",niltext="",
+maxstatistiken=200,null="�",eins="�",maxi="�",mlistewirderstellt=7,
+mkeinedaten=68;THESAURUS VAR thesauswahl;TEXT VAR theseintrag;INT VAR
+thesindex;BOOL VAR theszeigen;PROC statlistezeigen(INT CONST abnr):BOOL VAR
+istleer;standardmeldung(mlistewirderstellt,niltext);
+thesauruszeigenvorbereiten(allestatistikensortiert(abnr),istleer);IF istleer
+THEN standardmeldung(mkeinedaten,niltext);leave(1);ELSE theszeigen:=TRUE ;
+thesauruszeigen;FI .END PROC statlistezeigen;PROC statlistebearbeiten(TEXT
+CONST standardmaskenname):IF theszeigenTHEN theszeigen:=FALSE ;thesauswahl:=
+thesaurusauswahl;thesindex:=0;standardstartproc(standardmaskenname);FI ;get(
+thesauswahl,theseintrag,thesindex);IF thesindex=0THEN theseintrag:=niltext;
+ELSE theseintrag:=text(int(theseintrag));FI ;END PROC statlistebearbeiten;
+TEXT PROC statlisteeintrag:theseintragEND PROC statlisteeintrag;THESAURUS
+PROC allestatistikensortiert(INT CONST abnr):THESAURUS VAR verzeichnis:=
+allestatistiken(task(statistikserver)),sortiert:=emptythesaurus;INT VAR index
+:=0;TEXT VAR eintrag,sorter:=maxstatistiken*null;get(verzeichnis,eintrag,
+index);WHILE index>0REP replace(sorter,int(eintrag),code(index));get(
+verzeichnis,eintrag,index);PER ;index:=pos(sorter,eins,maxi,max(1,abnr));
+WHILE index>0REP insert(sortiert,name(verzeichnis,code(sorterSUB index)));
+index:=pos(sorter,eins,maxi,index+1);PER ;sortiert.END PROC
+allestatistikensortiert;LET statistikverzeichnis="statistik verzeichnis";
+DATASPACE VAR ds;THESAURUS PROC allestatistiken(TASK CONST statmanager):
+disablestop;forget(ds);fetch(ds,statistikverzeichnis,statmanager);BOUND
+THESAURUS VAR res:=ds;THESAURUS VAR result:=CONCR (res);forget(ds);resultEND
+PROC allestatistiken;END PACKET statistikliste;
+
diff --git a/app/schulis/2.2.1/src/5.thesaurus b/app/schulis/2.2.1/src/5.thesaurus
new file mode 100644
index 0000000..571edf9
--- /dev/null
+++ b/app/schulis/2.2.1/src/5.thesaurus
@@ -0,0 +1,38 @@
+PACKET thesauruszeigenDEFINES thesauruszeigenvorbereiten,thesauruszeigen,
+thesaurusblaettern,thesaurusauswahl:LET listenmaskenname="mu objektliste";
+LET niltext="",markoff=" ",markon="x";LET andenanfang=1,andasende=2,vorwaerts
+=3,rueckwaerts=4;LET zeileninliste=18,ausgabelaenge=71;THESAURUS VAR
+dateiliste;TEXT VAR markmerker;INT VAR erstezeile,letztezeile;PROC
+thesauruszeigenvorbereiten(THESAURUS CONST th,BOOL VAR istleer):dateiliste:=
+COMPR th;letztezeile:=highestentry(dateiliste);markmerker:=letztezeile*
+markoff;erstezeile:=1;istleer:=letztezeile=0;END PROC
+thesauruszeigenvorbereiten;PROC thesauruszeigen:standardstartproc(
+listenmaskenname);eineseitezeigen;standardnproc;END PROC thesauruszeigen;
+PROC thesaurusblaettern(INT CONST wohin):INT VAR merkeerstezeile:=erstezeile;
+SELECT wohinOF CASE andenanfang:andendateianfangCASE andasende:andasdateiende
+CASE vorwaerts:vorwaertsblaetternindateiCASE rueckwaerts:
+rueckwaertsblaetternindateiEND SELECT ;IF merkeerstezeile<>erstezeileTHEN
+speicheremarkierungen(merkeerstezeile);eineseitezeigen;ELSE standardmeldung(
+72,niltext);FI ;leave(1).andendateianfang:IF erstezeile<>1THEN erstezeile:=1;
+FI .andasdateiende:IF erstezeile<letztezeile-zeileninliste+1THEN erstezeile:=
+letztezeile-zeileninliste+1;FI .vorwaertsblaetternindatei:IF erstezeile<
+letztezeile-zeileninliste+1THEN erstezeileINCR zeileninliste;FI .
+rueckwaertsblaetternindatei:erstezeile:=max(1,erstezeile-zeileninliste).END
+PROC thesaurusblaettern;THESAURUS PROC thesaurusauswahl:THESAURUS VAR auswahl
+:=emptythesaurus;INT VAR i;speicheremarkierungen(erstezeile);FOR iFROM 1UPTO
+letztezeileREP IF (markmerkerSUB i)=markonTHEN insert(auswahl,name(dateiliste
+,i));FI ;PER ;auswahlEND PROC thesaurusauswahl;PROC speicheremarkierungen(
+INT CONST erstezeile):INT VAR i;FOR iFROM 1UPTO zeileninlisteREP IF
+standardmaskenfeld(2*i)<>niltextTHEN replace(markmerker,erstezeile+i-1,markon
+);ELSE replace(markmerker,erstezeile+i-1,markoff);FI PER END PROC
+speicheremarkierungen;PROC eineseitezeigen:INT VAR i;FOR iFROM 1UPTO
+zeileninlisteREP IF aktzeile<=letztezeileTHEN standardmaskenfeld(eintrag,i*2+
+1);standardmaskenfeld(markiert,i*2);ELSE standardmaskenfeld(spaces,i*2+1);
+standardmaskenfeld(niltext,i*2);feldschutz(i*2);FI PER ;infeld(2).markiert:
+IF (markmerkerSUB (aktzeile))=markonTHEN markonELSE niltextFI .aktzeile:
+erstezeile+i-1.eintrag:text(name(dateiliste,aktzeile),ausgabelaenge).spaces:
+text(niltext,ausgabelaenge).END PROC eineseitezeigen;THESAURUS OP COMPR (
+THESAURUS CONST th):THESAURUS VAR res:=emptythesaurus;TEXT VAR eintrag;INT
+VAR index:=0;get(th,eintrag,index);WHILE index>0REP insert(res,eintrag);get(
+th,eintrag,index);PER ;resEND OP COMPR ;END PACKET thesauruszeigen;
+
diff --git a/app/schulis/2.2.1/src/6.IDA.files b/app/schulis/2.2.1/src/6.IDA.files
new file mode 100644
index 0000000..b901335
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.IDA.files
@@ -0,0 +1,17 @@
+6.db ref.sc
+6.db sel.sc
+6.db q.sc
+6.db snd query.sc
+0.ida.data
+6.ida.gen
+6.ida.druck
+0.ida.form
+6.ida.def.druck
+6.ida.grund
+6.ida.check
+6.ida.plausi
+6.ida.definieren
+6.ida.auswahl
+6.ida.eingang
+
+
diff --git a/app/schulis/2.2.1/src/6.db q.sc b/app/schulis/2.2.1/src/6.db q.sc
new file mode 100644
index 0000000..4b3c2b2
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.db q.sc
@@ -0,0 +1,222 @@
+#$IF mitinternerqueryTHEN #PACKET queryparserDEFINES QUERY ,query,
+getscanbedingung,getdnr,getinr,getanzahlverbunde,getselpointer,
+getstopbedpointer,getquery,putquery,setzeschluessel,getanzahltupel,
+getswanzfld,getswnachfld,getswvonfld,getswallefelder,getswfwert,getsohnverb,
+getbruderverb,geterstestupel,puterstestupel,selektionerfuellt,initquery,:=,
+baumdurchlauf,listeschluessel,putletzterverbund,getletzterverbund,puttid,
+gettid,getbruder,putbruder,tidfeld,updatefnr,updateausdruck,queryart,
+anzupdatefelder:TYPE UPDSTACK =STRUCT (INT uuuuuv,TEXT uuuuuw);BOUND ROW 100
+UPDSTACK VAR uuuuux;TYPE VERBELEMENT =STRUCT (TEXT uuuuuy,uuuuuz,BOOL uuuuvu,
+INT uuuuvv,uuuuvw,uuuuvx,uuuuvy,uuuuvz,uuuuwu);TYPE VERBUND =ROW uuuuwv
+VERBELEMENT ;TYPE QUERY =STRUCT (INT uuuuww,uuuuwx,uuuuwy,TEXT uuuuwz,uuuuxu,
+SELEKTION uuuuxv,VERBUND uuuuxw,SCHLUESSEL uuuuxx);TYPE SWERT =STRUCT (INT
+uuuuxy,uuuuxz,TEXT wert);TYPE SCHLUESSELWERTE =STRUCT (BOOL uuuuyu,INT uuuuyv
+,ROW uuuuywSWERT uuuuyx);TYPE SCHLUESSEL =ROW uuuuwvSCHLUESSELWERTE ;LET
+uuuuyz=0,uuuuzu=1,uuuuzv=2,uuuuzw=3,uuuuzx=6,uuuuzy=5,uuuuzz=7,uuuvuu=7,
+uuuvuv=4,uuuvuw="BY",uuuvux="UPDATE",uuuvuy="DELETE",uuuvuz=".query",uuuvvu=
+";",uuuvvv="(",uuuvvw=")",#uuuvvx=",",uuuvvy="=",uuuvvz=">=",uuuvwu="<=",#
+uuuvwv="/",uuuvww="""",uuuvwx=".",uuuvwy=":",uuuvwz=" ",uuuvxu=":=",uuuvxv=
+"<",uuuuwv=10,uuuvxx=20,uuuuyw=10,uuuvxz=80,uuuvyu=1,uuuvyv=2,uuuvyw=3;INT
+VAR uuuvyx:=-5,uuuvyy:=-33,uuuvyz;DATASPACE VAR uuuvzu:=nilspace;INT VAR
+uuuvzv:=0;INT PROC tidfeld:uuuvyyENDPROC tidfeld;FILE VAR uuuvzz;TEXT VAR
+uuuwuu:="",uuuwuv:="",uuuwuw:="",uuuwux:="";INT VAR uuuwuy,uuuwuz,uuuwvu;
+BOOL VAR uuuwvv,uuuwvw;INT VAR uuuwvx:=0,uuuwvy,uuuwvz;ROW uuuvxxTEXT VAR
+uuuwwv;OP :=(QUERY VAR uuuwww,QUERY CONST uuuwwx):CONCR (uuuwww):=CONCR (
+uuuwwx)ENDOP :=;OP :=(VERBELEMENT VAR uuuwww,VERBELEMENT CONST uuuwwx):CONCR
+(uuuwww):=CONCR (uuuwwx)ENDOP :=;OP :=(VERBUND VAR uuuwww,VERBUND CONST
+uuuwwx):CONCR (uuuwww):=CONCR (uuuwwx)ENDOP :=;INT PROC updatefnr(INT CONST
+uuuwyx):uuuuux[uuuwyx].uuuuuvENDPROC updatefnr;TEXT PROC updateausdruck(INT
+CONST uuuwyx):uuuuux[uuuwyx].uuuuuwENDPROC updateausdruck;INT PROC queryart:
+uuuvzvENDPROC queryart;PROC queryart(INT CONST uuuxvu):uuuvzv:=uuuxvuENDPROC
+queryart;INT PROC anzupdatefelder:uuuvyzENDPROC anzupdatefelder;PROC
+initquery(QUERY VAR uuuxww):uuuxwx;uuuxww.uuuuww:=0;uuuxww.uuuuwx:=0;uuuxww.
+uuuuwz:="";uuuxww.uuuuxu:="";initselektionen(uuuxww.uuuuxv);uuuxyw(uuuxww.
+uuuuxw);uuuxyz(uuuxww.uuuuxx)ENDPROC initquery;PROC uuuxwx:forget(uuuvzu);
+uuuvzu:=nilspace;uuuuux:=uuuvzuENDPROC uuuxwx;initquery(uuuyuy);PROC uuuxyw(
+VERBUND VAR uuuyvu):FOR uuuwvyFROM 1UPTO uuuuwvREP uuuyvx(uuuyvu[uuuwvy])PER
+ENDPROC uuuxyw;PROC uuuyvx(VERBELEMENT VAR uuuyww):uuuyww.uuuuuy:="";uuuyww.
+uuuuuz:=""ENDPROC uuuyvx;#BOUND QUERY VAR uuuyuy;#QUERY VAR uuuyuy;PROC
+getquery(QUERY VAR uuuxww):CONCR (uuuxww):=CONCR (uuuyuy)ENDPROC getquery;
+PROC putquery(QUERY CONST uuuxww):CONCR (uuuyuy):=CONCR (uuuxww)ENDPROC
+putquery;PROC query:query(lastparam)ENDPROC query;PROC uuuyzz(TEXT CONST
+uuuzuu):TEXT VAR uuuzuv:="",uuuzuw:="",uuuzux:="",uuuwuv:="";INT VAR uuuzuz;
+uuuxwx;uuuzvv;nextsymbol;queryparser(uuuzvx);uuuzvy;uuuzvz;uuuzwu;uuuzwv;
+baumdurchlauf;.uuuzvy:nextsymbol;WHILE uuuwuy<>uuuuzzREP uuuzxu;nextsymbol
+PER .uuuzxu:uuuzuw:="";IF uuuwuy<>uuuuzuTHEN uuuzxz(
+"Refinementname erwartet: "+uuuwuu)ELSE uuuzuv:=uuuwuu;nextsymbol;IF uuuwuu<>
+uuuvwyTHEN uuuzxz(uuuvww+uuuvwy+uuuvww+" erwartet: "+uuuwuu)ELSE uuuzzy;
+putref(uuuzuv,uuuzuw)FI FI .uuuzzy:nextsymbol;WHILE uuuwuy<>uuuuzzCAND uuuwuu
+<>uuuvwxREP uuuzuw:=uuuzuw+uuvuvw;nextsymbolPER ;IF uuuwuy=uuuuzzTHEN uuuzxz(
+"Refinement nicht mit ""."" abgeschlossen")FI .uuuzvv:enablestop;uuuvzz:=
+sequentialfile(input,uuuzuu);IF exists(uuuzuu+uuuvuz)THEN forget(uuuzuu+
+uuuvuz,quiet)FI ;#uuuyuy:=new(uuuzuu+uuuvuz);#lastparam(uuuzuu);uuvuxz(0);
+uuuwvx:=0;clearrefs;scan(uuuvzz);.uuuzwu:FOR uuuzuzFROM 1UPTO uuuwvxREP
+uuuzux:="";uuuwuv:=uuvuzv(uuuzuz);scan(uuuwuv);nextsymbol(uuuwuu,uuuwuy);
+WHILE uuuwuy<>uuuuzzREP IF uuuwuy=uuuuzuTHEN uuuzux:=uuuzux+getreftext(uuuwuu
+)ELSE uuuzux:=uuuzux+uuvuvwFI ;nextsymbol(uuuwuu,uuuwuy)PER ;uuvvwu(uuuzux,
+uuuzuz)PER .uuuzwv:INT VAR uuvvwy;initsel(uuuyuy.uuuuxv);FOR uuuzuzFROM 1
+UPTO getanzahlverbundeREP uuvvxx;uuvvxyPER .uuvvxx:uuvvwy:=getstopbedpointer(
+uuuzuz);IF uuvvwy>uuuuyzTHEN uuuwuv:=uuvuzv(uuvvwy);uuvvzw(baueselektionauf(
+uuuyuy.uuuuxv,uuuwuv),uuuzuz)FI .uuvvxy:uuvvwy:=getselpointer(uuuzuz);IF
+uuvvwy>uuuuyzTHEN uuuwuv:=uuvuzv(uuvvwy);uuvwvy(baueselektionauf(uuuyuy.
+uuuuxv,uuuwuv),uuuzuz)FI .ENDPROC uuuyzz;PROC uuuzvz:INT VAR uuuzuz:=1;BOOL
+VAR uuvwxu:=FALSE ;TEXT VAR uuuzux:="";WHILE uuuzuz<=getanzahlverbundeREP
+uuuzux:="";uuuwuv:=getscanbedingung(uuuzuz);scan(uuuwuv);nextsymbol(uuuwuu,
+uuuwuy);WHILE uuuwuy<>uuuuzzREP IF uuuwuy=uuuuzuTHEN uuuzux:=uuuzux+
+getreftext(uuuwuu)ELSE uuuzux:=uuuzux+uuvuvwFI ;nextsymbol(uuuwuu,uuuwuy)PER
+;IF getdnr(uuuzuz)=uuuvyxTHEN queryparser(uuuzux,uuuzuz);uuvwxu:=TRUE ELSE
+uuvxwu(uuuzux,uuuzuz)FI ;uuuzuzINCR 1PER ;IF uuvwxuTHEN uuuzvzFI ENDPROC
+uuuzvz;PROC queryparser(TEXT CONST uuuwuv,INT CONST uuvxxx):INT VAR uuvxxy;
+scan(uuuwuv);nextsymbol;uuvxyu;queryparser(uuvxxx);uuvxyx.uuvxyu:uuvxxy:=
+getbruderverb(uuvxxx);.uuvxyx:uuvxzx(uuvxxy,uuvxxx).ENDPROC queryparser;PROC
+queryparser(INT CONST uuvxxx):TEXT VAR uuvyux:="";BOOL VAR uuvyuy:=FALSE ;
+uuuvzv:=0;REP uuvyvu;UNTIL uuvyuyPER ;uuvyvw;uuvyvx;uuvyvy;uuvyvz;SELECT
+uuuvzvOF CASE uuuvyv,uuuvyu:uuvywx;IF uuvxxx=1THEN uuvywzFI CASE uuuvyw:
+uuvyxvENDSELECT .uuvyvu:IF uuuwuy=uuuvuvTHEN uuvyxz(dateinr(uuuwuu),uuvxxx);
+IF uuuvzv<1THEN uuuvzv:=uuuvyuFI ;uuvyuy:=TRUE ELSE IF uuuwuy=uuuuzvTHEN IF
+uuuwuu=uuuvuxTHEN nextsymbol;uuuvzv:=uuuvywELIF uuuwuu=uuuvuyTHEN nextsymbol;
+uuuvzv:=uuuvyvELSE uuuzxz("Dateiname nicht gefunden: "+uuuwuu)FI FI FI .
+uuvyvw:nextsymbol;IF uuuwuy=uuuuzvCAND uuuwuu=uuuvuwTHEN uuvzvz;uuvzwuELSE
+IF uuuwuy=uuuuzxCAND uuuwuu=uuuvvvTHEN uuvzwz(#getdnr(uuvxxx)#0,uuvxxx)ELSE
+uuuzxz("Indexname bzw. ""("" fehlt")FI FI .uuvzvz:nextsymbol;IF uuuwuy=uuuvuv
+THEN uuvzwz(indexnr(uuuwuu),uuvxxx)ELSE uuuzxz("Indexname nicht gefunden: "+
+uuuwuu)FI .uuvzwu:nextsymbol;IF NOT (uuuwuy=uuuuzxCAND uuuwuu=uuuvvv)THEN
+uuuzxz(uuuvww+uuuvvv+uuuvww+" erwartet")FI .uuvyvx:uuwuuy(uuuwuv);uuvxwu(
+uuuwuv,uuvxxx);.uuvyvy:BOOL VAR stop:=TRUE ;uuwuvy.uuvyvz:stop:=FALSE ;uuwuvy
+.uuwuvy:INT VAR uuvvwy;uuuwuw:="";IF NOT uuuwvvTHEN uuwuuy(uuuwuw);IF uuuwuw=
+""THEN IF stopTHEN uuvvzw(uuuuyz,uuvxxx)ELSE uuvwvy(uuuuyz,uuvxxx)FI ELSE
+uuvvwy:=uuwuyx;IF stopTHEN uuvvzw(uuvvwy,uuvxxx)ELSE uuvwvy(uuvvwy,uuvxxx)FI
+;uuvvwu(uuuwuw,uuvvwy)FI ELSE uuvwvy(uuuuyz,uuvxxx)FI .uuvywx:INT VAR uuwvuz;
+IF NOT uuuwvvTHEN uuwvvv(uuvxxx,uuwvuz);uuwvvy(uuwvuz,uuvxxx);uuvxzx(uuuuyz,
+uuvxxx)FI .uuvywz:nextsymbol;IF uuuwuy=uuuuzxOR uuuwuy=uuuuzzOR uuuwuy=uuuuzy
+THEN IF uuuwuu<>uuuvwvTHEN uuwvyvFI ;uuuuwx;uuwvyxELSE uuuzxz(uuuvww+uuuvwv+
+uuuvww+" bzw. "+uuuvww+uuuvvu+uuuvww+uuuvwv+uuuvww+uuuvwx+uuuvww+" erwartet")
+FI .uuwvyv:IF uuuwuu=uuuvvuOR uuuwuu=uuuvwxOR uuuwuy=uuuuzzTHEN uuwwvy(0);
+LEAVE uuvywzELSE uuuzxz("Falscher Tupelzahl-Operator: "+uuuwuu)FI .uuuuwx:
+nextsymbol;IF uuuwuy=uuuuzwTHEN uuwwvy(int(uuuwuu));ELSE uuuzxz(
+"Keine Zahlenangabe: "+uuuwuu)FI .uuwvyx:nextsymbol;IF uuuwuy<>uuuuzzCAND (
+NOT (uuuwuu=uuuvvuCOR uuuwuu=uuuvwx))THEN uuuzxz("""."" oder "";"" erwartet")
+FI .uuvyxv:uuuvyz:=0;nextsymbol;WHILE NOT uuuwvvREP uuuvyzINCR 1;uuwwzx;
+uuwwzy;uuwwzz;PER .uuwwzx:IF uuuwuy=uuuuzuTHEN uuwxuxELSE uuwxuyFI .uuwxux:
+uuuzxz("Zur Zeit keine Refinements in Update-Liste erlaubt!").uuwxuy:uuuuux[
+uuuvyz].uuuuuv:=feldnr(uuuwuu);IF uuuuux[uuuvyz].uuuuuv<3THEN uuuzxz(
+"Falscher Feldname: "+uuuwuu)FI ;nextsymbol.uuwwzy:IF NOT (uuuwuy=uuuuzyCAND
+uuuwuu=uuuvxu)THEN uuuzxz("Keine Zuweisung: "+uuuwuu)FI .uuwwzz:uuwxyv(uuvyux
+);uuuuux[uuuvyz].uuuuuw:=uuvyux;nextsymbol.ENDPROC queryparser;PROC uuwxyv(
+TEXT VAR uuwxzx):INT VAR uuwxzy:=0,uuwxzz:=0;uuwxzx:="";uuuwuu:="";uuuwuy:=0;
+REP uuwxzx:=uuwxzx+uuvuvw;uuwxzy:=uuuwuy;nextsymbolUNTIL uuwyvwPER .uuwyvw:
+IF (uuuwuy=uuuuzxCAND (uuuwuu=uuuvvuCOR (uuuwuu=uuuvvwCAND uuwxzz=0)))THEN
+uuuwvv:=uuuwuu=uuuvvw;TRUE ELSE IF uuuwuy=uuuuzzTHEN uuuzxz(
+"Vorzeitiges END OF FILE!");FALSE ELSE IF uuuwuy=uuuuzxTHEN IF uuuwuu=uuuvvv
+THEN uuwxzzINCR 1FI ;IF uuuwuu=uuuvvwTHEN uuwxzzDECR 1FI ;FI ;FALSE FI FI .
+ENDPROC uuwxyv;PROC uuwvvv(INT CONST uuvxxx,INT VAR uuwvuz):INT VAR uuwyzz:=
+uuuuyz;uuwvuz:=uuuuyz;nextsymbol;IF uuuwuy=uuuuzxCAND uuuwuu=uuuvvwTHEN
+uuuwvv:=TRUE ;LEAVE uuwvvvELIF uuuwuy=uuuuzuTHEN uuwvuz:=uuuzvx;uuvxwu(uuuwuu
+,uuwvuz);uuvwvy(uuuuyz,uuwvuz);uuvyxz(uuuvyx,uuwvuz);uuwvvv(uuwvuz,uuwyzz);
+uuvxzx(uuwyzz,uuwvuz)ELIF uuuwuy=uuuvuvTHEN uuwvuz:=uuuzvx;queryparser(uuwvuz
+);uuuwvv:=FALSE ;uuwvvv(uuwvuz,uuwyzz);uuvxzx(uuwyzz,uuwvuz)ELIF (uuuwuy=
+uuuuzxCAND uuuwuu=uuuvvu)THEN uuwvvv(uuvxxx,uuwvuz)ELSE uuuzxz(
+"Verbund-Fehler bei : "+uuuwuu)FI ENDPROC uuwvvv;PROC uuwuuy(TEXT VAR uuwxzx)
+:INT VAR uuwxzy:=0;uuwxzx:="";uuuwuu:="";uuuwuy:=0;uuuwvv:=FALSE ;REP uuwxzx
+:=uuwxzx+uuvuvw;uuwxzy:=uuuwuy;nextsymbolUNTIL uuxuyxPER .uuxuyx:IF (uuuwuy=
+uuuuzyCAND uuuwuu=uuuvwv)THEN TRUE ELSE IF uuuwuy=uuuuzzTHEN uuuzxz(uuuvww+
+uuuvwv+uuuvww+" fehlt");FALSE ELSE FALSE FI FI .ENDPROC uuwuuy;TEXT PROC
+uuvuvw:IF uuuwuy=uuuvuvTHEN uuuvww+uuuwuu+uuuvwwELIF uuuwuy=uuuuzvTHEN uuuvwz
++uuuwuu+uuuvwzELSE uuuwuuFI ENDPROC uuvuvw;PROC nextsymbol:nextsymbol(uuuvzz,
+uuuwuu,uuuwuy);ENDPROC nextsymbol;PROC uuuzxz(TEXT CONST uuxvxx):errorstop(
+"Zeile "+text(lineno(uuuvzz))+" : "+uuxvxx)ENDPROC uuuzxz;PROC puterstestupel
+(TEXT CONST uuxvyw):uuuyuy.uuuuwz:=uuxvywENDPROC puterstestupel;TEXT PROC
+geterstestupel:uuuyuy.uuuuwzENDPROC geterstestupel;PROC uuxvzz(TEXT CONST
+uuxvyw):uuuyuy.uuuuxu:=uuxvywENDPROC uuxvzz;TEXT PROC uuxwuz:uuuyuy.uuuuxu
+ENDPROC uuxwuz;PROC uuwwvy(INT CONST uuxwvy):uuuyuy.uuuuwx:=uuxwvyENDPROC
+uuwwvy;INT PROC getanzahltupel:uuuyuy.uuuuwxENDPROC getanzahltupel;PROC
+putletzterverbund(INT CONST uuxwxw):uuuyuy.uuuuwy:=uuxwxwENDPROC
+putletzterverbund;INT PROC getletzterverbund:uuuyuy.uuuuwyENDPROC
+getletzterverbund;PROC puttid(INT CONST uuxwzu,TEXT CONST uuxwzv):uuuyuy.
+uuuuxw[uuxwzu].uuuuuz:=uuxwzvENDPROC puttid;TEXT PROC gettid(INT CONST uuxwzu
+):uuuyuy.uuuuxw[uuxwzu].uuuuuzENDPROC gettid;PROC putbruder(INT CONST uuxwzu,
+BOOL CONST uuxxvz):uuuyuy.uuuuxw[uuxwzu].uuuuvu:=uuxxvzENDPROC putbruder;
+BOOL PROC getbruder(INT CONST uuxwzu):uuuyuy.uuuuxw[uuxwzu].uuuuvuENDPROC
+getbruder;PROC uuvxwu(TEXT CONST uuxxyw,INT CONST uuuzuz):uuuyuy.uuuuxw[
+uuuzuz].uuuuuy:=uuxxywENDPROC uuvxwu;TEXT PROC getscanbedingung(INT CONST
+uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuuyENDPROC getscanbedingung;PROC uuvyxz(INT
+CONST uuxyvu,uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvv:=uuxyvuENDPROC uuvyxz;PROC
+uuvzwz(INT CONST uuxywx,uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvw:=uuxywxENDPROC
+uuvzwz;INT PROC getdnr(INT CONST uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvvENDPROC
+getdnr;INT PROC getinr(INT CONST uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvwENDPROC
+getinr;PROC uuvwvy(INT CONST uuxzuw,uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvx:=
+uuxzuwENDPROC uuvwvy;INT PROC getselpointer(INT CONST uuuzuz):uuuyuy.uuuuxw[
+uuuzuz].uuuuvxENDPROC getselpointer;PROC uuvvzw(INT CONST uuxzuw,uuuzuz):
+uuuyuy.uuuuxw[uuuzuz].uuuuvy:=uuxzuwENDPROC uuvvzw;INT PROC getstopbedpointer
+(INT CONST uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvyENDPROC getstopbedpointer;
+PROC uuvxzx(INT CONST uuxzuw,uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvz:=uuxzuw
+ENDPROC uuvxzx;INT PROC getbruderverb(INT CONST uuuzuz):uuuyuy.uuuuxw[uuuzuz]
+.uuuuvzENDPROC getbruderverb;PROC uuwvvy(INT CONST uuxzuw,uuuzuz):uuuyuy.
+uuuuxw[uuuzuz].uuuuwu:=uuxzuwENDPROC uuwvvy;INT PROC getsohnverb(INT CONST
+uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuwuENDPROC getsohnverb;PROC uuvuxz(INT
+CONST uuyuzu):uuuyuy.uuuuww:=uuyuzuENDPROC uuvuxz;INT PROC getanzahlverbunde:
+uuuyuy.uuuuwwENDPROC getanzahlverbunde;INT PROC uuuzvx:INT VAR uuyuzu:=
+getanzahlverbunde+1;uuvuxz(uuyuzu);uuvxzx(uuuuyz,uuyuzu);uuwvvy(uuuuyz,uuyuzu
+);uuvxwu("",uuyuzu);uuyuzuENDPROC uuuzvx;INT PROC uuwuyx:uuuwvxINCR 1;uuuwvx
+ENDPROC uuwuyx;PROC uuvvwu(TEXT CONST uuuwuw,INT CONST uuvvwy):uuuwwv[uuvvwy]
+:=uuuwuwENDPROC uuvvwu;TEXT PROC uuvuzv(INT CONST uuvvwy):uuuwwv[uuvvwy]
+ENDPROC uuvuzv;PROC baumdurchlauf:IF mittestausgabenTHEN uuyvzzFI .uuyvzz:
+INT VAR uuywuv;FOR uuywuvFROM 1UPTO getanzahlverbundeREP note("Verbund : "+
+text(uuywuv));noteline;note(" Datei : "+text(getdnr(uuywuv)));noteline;note
+(" Index : "+text(getinr(uuywuv)));noteline;note(" Scan : "+
+getscanbedingung(uuywuv));noteline;note(" Bruder: "+text(getbruderverb(
+uuywuv)));noteline;note(" Sohn : "+text(getsohnverb(uuywuv)));noteline;
+note(" SelPoi: "+text(getselpointer(uuywuv)));noteline;noteline;PER ;
+checkselektion(uuuyuy.uuuuxv).ENDPROC baumdurchlauf;PROC setzeschluessel(INT
+CONST uuxwzu):TEXT VAR uuywxy:=getscanbedingung(uuxwzu);scan(uuywxy);
+nextsymbol;uuywyw;uuywyx;uuywyy;uuywyz;WHILE uuuwuy<>uuuvuuREP IF uuuwuu=
+uuuvxvTHEN nextsymbol;uuywzy(uuxwzu,uuyxuu,uuuwuu);uuyxuw(uuxwzu,uuyxuu,
+uuyxuz);uuyxvu(uuxwzu,uuyxuu,0);ELIF uuuwuy=uuuvuvTHEN uuywzy(uuxwzu,uuyxuu,
+"");uuyxuw(uuxwzu,uuyxuu,uuyxuz);uuyxvu(uuxwzu,uuyxuu,feldnr(uuuwuu));ELIF
+uuuwuu=uuuvvuTHEN uuyxyuFI ;nextsymbolPER ;uuyxyv.uuywyx:IF uuuwuy=uuuvuv
+CAND feldtyp(feldnr(uuuwuu))=uuuvxzTHEN uuywzy(uuxwzu,1,"");uuyxuw(uuxwzu,1,
+tidfeld);uuyxvu(uuxwzu,1,feldnr(uuuwuu));uuyyux(uuxwzu,TRUE );uuyyuz(uuxwzu,1
+);LEAVE setzeschluesselFI ;.uuywyz:uuywzy(uuxwzu,1,"");uuyxuw(uuxwzu,1,0);
+uuyxvu(uuxwzu,1,0).uuyxyu:IF uuuwvwTHEN uuyxuzINCR 1ELSE uuuwuz:=uuuwvu+1;
+uuuwvu:=pos(uuuwux,uuuvvu,uuuwuz);uuyxuz:=uuxyvu+int(subtext(uuuwux,uuuwuz,
+uuuwvu-1))FI ;uuyxuuINCR 1.uuywyw:INT VAR uuyyzv:=getinr(uuxwzu),uuxyvu:=
+getdnr(uuxwzu),uuyxuz;IF uuyyzv=0THEN uuuwvw:=TRUE ;uuyxuz:=uuxyvu+1ELSE
+uuuwux:=zugriff(uuyyzv);uuuwvu:=pos(uuuwux,uuuvvu);uuyxuz:=int(subtext(uuuwux
+,1,uuuwvu-1))+uuxyvu;uuuwvw:=FALSE FI .uuyzwy:IF uuuwvwTHEN (uuyxuz-uuxyvu)=
+anzkey(uuxyvu)ELSE uuuwvu=length(uuuwux)FI .uuywyy:INT VAR uuyxuu:=1;IF
+uuuwuy=uuuvuuTHEN uuyxuu:=0FI .uuyxyv:uuyyux(uuxwzu,uuyzwyCAND (uuyxuu>0));
+uuyyuz(uuxwzu,uuyxuu).ENDPROC setzeschluessel;PROC uuyxvu(INT CONST uuxwzu,
+uuzuux,uuyxuz):uuuyuy.uuuuxx[uuxwzu].uuuuyx[uuzuux].uuuuxy:=uuyxuzENDPROC
+uuyxvu;PROC uuyxuw(INT CONST uuxwzu,uuzuux,uuyxuz):uuuyuy.uuuuxx[uuxwzu].
+uuuuyx[uuzuux].uuuuxz:=uuyxuzENDPROC uuyxuw;INT PROC getswvonfld(INT CONST
+uuxwzu,uuzuux):uuuyuy.uuuuxx[uuxwzu].uuuuyx[uuzuux].uuuuxyENDPROC getswvonfld
+;INT PROC getswnachfld(INT CONST uuxwzu,uuzuux):uuuyuy.uuuuxx[uuxwzu].uuuuyx[
+uuzuux].uuuuxzENDPROC getswnachfld;PROC uuywzy(INT CONST uuxwzu,uuzuux,TEXT
+CONST uuzvwu):uuuyuy.uuuuxx[uuxwzu].uuuuyx[uuzuux].wert:=uuzvwuENDPROC uuywzy
+;TEXT PROC getswfwert(INT CONST uuxwzu,uuzuux):uuuyuy.uuuuxx[uuxwzu].uuuuyx[
+uuzuux].wertENDPROC getswfwert;PROC uuyyux(INT CONST uuxwzu,BOOL CONST uuzvzv
+):uuuyuy.uuuuxx[uuxwzu].uuuuyu:=uuzvzvENDPROC uuyyux;BOOL PROC
+getswallefelder(INT CONST uuxwzu):uuuyuy.uuuuxx[uuxwzu].uuuuyuENDPROC
+getswallefelder;PROC uuyyuz(INT CONST uuxwzu,uuzwvz):uuuyuy.uuuuxx[uuxwzu].
+uuuuyv:=uuzwvzENDPROC uuyyuz;INT PROC getswanzfld(INT CONST uuxwzu):uuuyuy.
+uuuuxx[uuxwzu].uuuuyvENDPROC getswanzfld;PROC query(TEXT CONST uuzwyw):INT
+VAR uuuzuz;uuuyzz(uuzwyw);FOR uuuzuzFROM 1UPTO getanzahlverbundeREP
+setzeschluessel(uuuzuz)PER ;listeschluesselENDPROC query;OP :=(
+SCHLUESSELWERTE VAR uuuwww,SCHLUESSELWERTE CONST uuuwwx):CONCR (uuuwww):=
+CONCR (uuuwwx)ENDOP :=;OP :=(SWERT VAR uuuwww,SWERT CONST uuuwwx):CONCR (
+uuuwww):=CONCR (uuuwwx)ENDOP :=;OP :=(SCHLUESSEL VAR uuuwww,SCHLUESSEL CONST
+uuuwwx):CONCR (uuuwww):=CONCR (uuuwwx)ENDOP :=;PROC listeschluessel:IF NOT
+mittestausgabenTHEN LEAVE listeschluesselFI ;INT VAR uuuzuz,uuywuv;FOR uuuzuz
+FROM 1UPTO getanzahlverbundeREP noteline;note("Verbund : "+text(uuuzuz));
+noteline;note("=============");noteline;noteline;note("ANZAHL FLD: "+text(
+getswanzfld(uuuzuz)));noteline;note("ALLE : "+uuzxxx);noteline;noteline;
+FOR uuywuvFROM 1UPTO getswanzfld(uuuzuz)REP note(" VON : "+text(getswvonfld
+(uuuzuz,uuywuv)));noteline;note(" NACH: "+text(getswnachfld(uuuzuz,uuywuv))
+);noteline;note(" WERT: "+getswfwert(uuuzuz,uuywuv));noteline;PER PER .
+uuzxxx:IF getswallefelder(uuuzuz)THEN "vollständiger Schlüssel"ELSE
+"unvollständiger Schlüssel"FI .ENDPROC listeschluessel;BOOL PROC
+selektionerfuellt(INT CONST uuzyux):werteselektionaus(uuuyuy.uuuuxv,uuzyux)
+ENDPROC selektionerfuellt;PROC uuuxyz(SCHLUESSEL VAR uuzyvx):FOR uuuwvyFROM 1
+UPTO uuuuwvREP FOR uuuwvzFROM 1UPTO uuuuywREP uuzyvx[uuuwvy].uuuuyx[uuuwvz].
+wert:=""PER PER ENDPROC uuuxyz;ENDPACKET queryparser;#$FI #
+
diff --git a/app/schulis/2.2.1/src/6.db ref.sc b/app/schulis/2.2.1/src/6.db ref.sc
new file mode 100644
index 0000000..58b059b
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.db ref.sc
@@ -0,0 +1,20 @@
+#$IF mitinternerqueryTHEN #PACKET queryrefDEFINES putref,getreftext,
+anzahlrefs,listerefs,clearrefs:LET uuuuuv=50,uuuuuw=1,uuuuux=2;LET
+REFELEMENT =ROW 2TEXT ;TYPE REFINEMENT =STRUCT (INT uuuuuy,ROW uuuuuv
+REFELEMENT uuuuvu);REFINEMENT VAR uuuuvv;PROC putref(TEXT CONST uuuuvw,uuuuvx
+):INT VAR uuuuvy;FOR uuuuvyFROM 1UPTO uuuuvv.uuuuuyREP IF uuuuvv.uuuuvu[
+uuuuvy][uuuuuw]=uuuuvwTHEN uuuuvv.uuuuvu[uuuuvy][uuuuuw]:=uuuuvx;LEAVE putref
+FI PER ;IF uuuuvv.uuuuuy=uuuuuvTHEN errorstop("Zuviele Refinements!")FI ;
+uuuuvv.uuuuuyINCR 1;uuuuvv.uuuuvu[uuuuvv.uuuuuy][uuuuuw]:=uuuuvw;uuuuvv.
+uuuuvu[uuuuvv.uuuuuy][uuuuux]:=uuuuvxENDPROC putref;TEXT PROC getreftext(
+TEXT CONST uuuuvw):INT VAR uuuuvy;FOR uuuuvyFROM 1UPTO uuuuvv.uuuuuyREP IF
+uuuuvv.uuuuvu[uuuuvy][uuuuuw]=uuuuvwTHEN LEAVE getreftextWITH uuuuvv.uuuuvu[
+uuuuvy][uuuuux]FI PER ;uuuuvwENDPROC getreftext;PROC clearrefs:INT VAR uuuuvy
+;FOR uuuuvyFROM 1UPTO uuuuvv.uuuuuyREP uuuuvv.uuuuvu[uuuuvy][uuuuuw]:="";
+uuuuvv.uuuuvu[uuuuvy][uuuuux]:=""PER ;uuuuvv.uuuuuy:=0ENDPROC clearrefs;INT
+PROC anzahlrefs:uuuuvv.uuuuuyENDPROC anzahlrefs;PROC listerefs:INT VAR uuuwuu
+;note("Liste der Refinements :");noteline;note("=======================");
+noteline;noteline;FOR uuuwuuFROM 1UPTO anzahlrefsREP note(text(uuuuvv.uuuuvu[
+uuuwuu][uuuuuw],30)+":"+uuuuvv.uuuuvu[uuuwuu][uuuuux]);notelinePER ENDPROC
+listerefs;ENDPACKET queryref;#$FI #
+
diff --git a/app/schulis/2.2.1/src/6.db sel.sc b/app/schulis/2.2.1/src/6.db sel.sc
new file mode 100644
index 0000000..4577620
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.db sel.sc
@@ -0,0 +1,127 @@
+PACKET queryselektionDEFINES SELEKTION ,#putoptyp,putrechts,putlinks,
+putselwert,#optyp,rechts,links,selwert,fnrlinks,fnrrechts,#allocselelement,#
+:=,checkselektion,baueselektionauf,werteselektionaus,mittestausgaben,
+initselektionen,initsel,initialisiereselektion,lex,lexon,lexoff:LET uuuuuv=0,
+uuuuuw=1,uuuuux=2,uuuuuy=6,uuuuuz=7,uuuuvu=8,uuuuvv=9,#uuuuvw=1,uuuuvx=3,#
+uuuuvy=2,uuuuvz=4,uuuuwu=5,uuuuwv=10,uuuuww=11,uuuuwx=12,uuuuwy=13,uuuuwz=14,
+uuuuxu=15,uuuuxv=16,uuuuxw=17,uuuuxx=18,uuuuxy=19,uuuuxz=20,uuuuyu=30,uuuuyv=
+73,uuuuyw=82,uuuuyx=68,uuuuyy=84;TYPE NODE =STRUCT (INT uuuuyz,uuuuzu,uuuuzv,
+TEXT selwert);TYPE SELEKTION =STRUCT (INT uuuuzx,ROW uuuuyuNODE exp);INT VAR
+uuuuzz,uuuvuu,uuuvuv;REAL VAR uuuvuw,uuuvux;TEXT VAR uuuvuy,uuuvuz;INT VAR
+uuuvvu;TEXT VAR uuuvvv:="";BOOL VAR uuuvvw:=FALSE ,lexsort:=FALSE ;BOOL PROC
+lex:lexsortENDPROC lex;PROC lexon:lexsort:=TRUE ENDPROC lexon;PROC lexoff:
+lexsort:=FALSE ENDPROC lexoff;PROC mittestausgaben(BOOL CONST uuuvwy):uuuvvw
+:=uuuvwyENDPROC mittestausgaben;BOOL PROC mittestausgaben:uuuvvwENDPROC
+mittestausgaben;OP :=(NODE VAR uuuvxz,NODE CONST uuuvyu):CONCR (uuuvxz):=
+CONCR (uuuvyu)ENDOP :=;OP :=(SELEKTION VAR uuuvxz,SELEKTION CONST uuuvyu):
+CONCR (uuuvxz):=CONCR (uuuvyu)ENDOP :=;PROC initsel(SELEKTION VAR uuuvzw):
+uuuvzw.uuuuzx:=0ENDPROC initsel;PROC initselektionen(SELEKTION VAR uuuwuv):
+INT VAR uuuwuw;FOR uuuwuwFROM 1UPTO uuuuyuREP uuuwuv.exp[uuuwuw].selwert:=""
+PER ENDPROC initselektionen;PROC initialisiereselektion(SELEKTION VAR uuuvzw)
+:initsel(uuuvzw);initselektionen(uuuvzw)ENDPROC initialisiereselektion;PROC
+uuuwwy(SELEKTION VAR uuuvzw,INT CONST uuuwxu):uuuvzw.exp[uuuwxu].uuuuyz:=
+uuuuxy;uuuvzw.exp[uuuwxu].uuuuzv:=0;uuuvzw.exp[uuuwxu].uuuuzu:=0;uuuvzw.exp[
+uuuwxu].selwert:=""ENDPROC uuuwwy;INT PROC allocselelement(SELEKTION VAR
+uuuvzw):uuuvzw.uuuuzxINCR 1;uuuwwy(uuuvzw,uuuvzw.uuuuzx);uuuvzw.uuuuzx
+ENDPROC allocselelement;PROC putoptyp(SELEKTION VAR uuuvzw,INT CONST uuuxvy,
+optyp):uuuvzw.exp[uuuxvy].uuuuyz:=optypENDPROC putoptyp;PROC uuuxwz(
+SELEKTION VAR uuuvzw,INT CONST uuuxvy,uuuxxw):uuuvzw.exp[uuuxvy].uuuuzv:=
+uuuxxwENDPROC uuuxwz;PROC putrechts(SELEKTION VAR uuuvzw,INT CONST uuuxvy,
+uuuxyz):uuuvzw.exp[uuuxvy].uuuuzv:=uuuxyzENDPROC putrechts;PROC uuuxzz(
+SELEKTION VAR uuuvzw,INT CONST uuuxvy,uuuxxw):uuuvzw.exp[uuuxvy].uuuuzu:=
+uuuxxwENDPROC uuuxzz;PROC putlinks(SELEKTION VAR uuuvzw,INT CONST uuuxvy,
+uuuwuw):uuuvzw.exp[uuuxvy].uuuuzu:=uuuwuwENDPROC putlinks;PROC putselwert(
+SELEKTION VAR uuuvzw,INT CONST uuuxvy,TEXT CONST uuuyxw):uuuvzw.exp[uuuxvy].
+selwert:=uuuyxwENDPROC putselwert;INT PROC optyp(SELEKTION VAR uuuvzw,INT
+CONST uuuxvy):uuuvzw.exp[uuuxvy].uuuuyzENDPROC optyp;INT PROC fnrrechts(
+SELEKTION VAR uuuvzw,INT CONST uuuxvy):uuuvzw.exp[uuuxvy].uuuuzvENDPROC
+fnrrechts;INT PROC fnrlinks(SELEKTION VAR uuuvzw,INT CONST uuuxvy):uuuvzw.exp
+[uuuxvy].uuuuzuENDPROC fnrlinks;INT PROC rechts(SELEKTION CONST uuuvzw,INT
+CONST uuuxvy):uuuvzw.exp[uuuxvy].uuuuzvENDPROC rechts;INT PROC links(
+SELEKTION CONST uuuvzw,INT CONST uuuxvy):uuuvzw.exp[uuuxvy].uuuuzuENDPROC
+links;TEXT PROC selwert(SELEKTION VAR uuuvzw,INT CONST uuuxvy):uuuvzw.exp[
+uuuxvy].selwertENDPROC selwert;INT PROC baueselektionauf(SELEKTION VAR uuuzzx
+,TEXT CONST uuuzzy):IF compress(uuuzzy)<>""THEN scan(uuuzzy);uuvuuv(uuuzzx)
+ELSE 0FI ENDPROC baueselektionauf;INT PROC uuvuuv(SELEKTION VAR uuuzzx):INT
+VAR uuuwuw,uuvuvv;uuuwuw:=uuvuvx(uuuzzx);nextsymbol;IF uuvuvz=uuuuxxOR uuvuvz
+=uuuuxvTHEN uuvuvv:=allocselelement(uuuzzx);putoptyp(uuuzzx,uuvuvv,uuvuvz);
+putlinks(uuuzzx,uuvuvv,uuuwuw);putrechts(uuuzzx,uuvuvv,uuvuuv(uuuzzx));uuvuvv
+ELSE uuuwuwFI ENDPROC uuvuuv;INT PROC uuvuvx(SELEKTION VAR uuuzzx):INT VAR
+uuvvuu;nextsymbol;SELECT uuvuvzOF CASE uuuuuw:uuvvuu:=uuvuuv(uuuzzx);#
+nextsymbol;#IF uuvuvz<>uuuuuxTHEN errorstop("Klammer zu fehlt! Gefunden: "+
+uuuvvv)FI ;CASE uuuuxw:uuvvuu:=allocselelement(uuuzzx);putoptyp(uuuzzx,uuvvuu
+,uuvuvz);putlinks(uuuzzx,uuvvuu,uuvuvx(uuuzzx));CASE uuuuuy:CASE uuuuvu:
+uuvvuu:=allocselelement(uuuzzx);uuvvyx;uuvvyy;nextsymbol;uuvvyzCASE uuuuvv:
+uuvvuu:=allocselelement(uuuzzx);uuvvzy;uuvvzz;uuvwuuCASE uuuuuz:OTHERWISE :
+errorstop("Falsches Symbol: "+uuuvvv+text(uuuvvu))ENDSELECT ;uuvvuu.uuvvyx:
+nextsymbol;IF uuuvvu<>uuuuvzTHEN uuvwvw("Falsche Wertangabe")ELSE putselwert(
+uuuzzx,uuvvuu,uuuvvv);nextsymbol;IF uuuvvu<>uuuuwuCAND uuuvvv<>">"THEN uuvwvw
+(""">"" bei Wertangabe fehlt!")FI FI .uuvvzz:nextsymbol;IF uuuvvu<>uuuuwu
+THEN uuvwvw("Falscher Operator: "+uuuvvv)FI ;putoptyp(uuuzzx,uuvvuu,uuvwyv).
+uuvvyy:nextsymbol;IF (uuuvvu=uuuuwu)COR (uuuvvu=uuuuvyCAND uuuvvv="IN")THEN
+putoptyp(uuuzzx,uuvvuu,uuvwyv)ELSE uuvwvw("Falscher Operator: "+uuuvvv)FI ;.
+uuvvyz:uuuxwz(uuuzzx,uuvvuu,feldnr(uuuvvv)).uuvvzy:uuuxzz(uuuzzx,uuvvuu,
+feldnr(uuuvvv)).uuvwuu:nextsymbol;IF uuvuvz=uuuuvuTHEN uuvvyxELSE uuvvyzFI .
+ENDPROC uuvuvx;INT PROC uuvwyv:IF uuuvvv=">"THEN uuuuwzELIF uuuvvv="<"THEN
+uuuuxuELIF uuuvvv="="THEN uuuuwvELIF uuuvvv=">="THEN uuuuwyELIF uuuvvv="<="
+THEN uuuuwxELIF uuuvvv="<>"THEN uuuuwwELIF uuuvvv="IN"THEN uuuuxzELSE uuuuxy
+FI ENDPROC uuvwyv;PROC nextsymbol:nextsymbol(uuuvvv,uuuvvu)ENDPROC nextsymbol
+;INT PROC uuvuvz:IF uuuvvv="("THEN uuuuuwELIF uuuvvv=")"THEN uuuuuxELIF
+uuuvvv="NOT"OR uuuvvv="NICHT"THEN uuuuxwELIF uuuvvv="AND"OR uuuvvv="UND"THEN
+uuuuxvELIF uuuvvv="OR"OR uuuvvv="ODER"THEN uuuuxxELIF uuuvvu=13THEN uuuuuy
+ELIF uuuvvu=uuuuwuCAND uuuvvv="<"THEN uuuuvuELIF uuuvvu=uuuuvzTHEN uuuuvv
+ELIF uuuvvu=7THEN uuuuuzELSE uuuuuvFI ENDPROC uuvuvz;PROC uuvwvw(TEXT CONST
+uuvyyz):errorstop("FEHLERHAFTER AUSDRUCK: "+uuvyyz)ENDPROC uuvwvw;PROC
+checkselektion(SELEKTION CONST uuuzzx):INT VAR uuvyzy,uuvyzz:=uuuzzx.uuuuzx;
+note("Anzahl Knoten: "+text(text(uuvyzz),5));noteline;noteline;noteline;FOR
+uuvyzyFROM 1UPTO uuvyzzREP note("Knoten: "+text(uuvyzy));noteline;note(
+" Operat: "+uuvzvu(uuuzzx.exp[uuvyzy]));noteline;note(" links : "+
+text(links(uuuzzx,uuvyzy)));noteline;note(" rechts: "+text(rechts(uuuzzx,
+uuvyzy)));noteline;note(" Wert : "+">"+uuuzzx.exp[uuvyzy].selwert+"<");
+notelinePER ENDPROC checkselektion;TEXT PROC uuvzvu(NODE CONST uuuvzw):
+SELECT uuuvzw.uuuuyzOF CASE uuuuwv:"="CASE uuuuww:"<>"CASE uuuuwx:"<="CASE
+uuuuwy:">="CASE uuuuwz:">"CASE uuuuxu:"<"CASE uuuuxw:"NOT"CASE uuuuxv:"AND"
+CASE uuuuxx:"OR"CASE uuuuxz:"IN"OTHERWISE :"UNDEFINED OPERATOR"ENDSELECT
+ENDPROC uuvzvu;BOOL PROC werteselektionaus(SELEKTION VAR uuuvzw,INT CONST
+uuvyzy):IF uuvyzy=0THEN LEAVE werteselektionausWITH TRUE FI ;uuwuux;SELECT
+uuwuuyOF CASE uuuuxx:uuwuvuOR uuwuvvCASE uuuuxv:uuwuvuAND uuwuvvCASE uuuuxw:
+NOT uuwuvuCASE uuuuwx:uuwuwwCASE uuuuwy:uuwuwyCASE uuuuww:uuwuxuCASE uuuuwv:
+uuwuxwCASE uuuuxu:uuwuxyCASE uuuuwz:uuwuyuCASE uuuuxz:uuwuywOTHERWISE :FALSE
+ENDSELECT .uuwuvu:werteselektionaus(uuuvzw,links(uuuvzw,uuvyzy)).uuwuvv:
+werteselektionaus(uuuvzw,rechts(uuuvzw,uuvyzy)).uuwuux:IF uuwuuy=uuuuxxCOR
+uuwuuy=uuuuxvCOR uuwuuy=uuuuxwTHEN LEAVE uuwuuxELSE uuwvvz;uuwvwuFI .uuwvvz:
+IF fnrlinks(uuuvzw,uuvyzy)=0THEN SELECT uuwvwzOF CASE uuuuyv:uuuvuu:=int(
+selwert(uuuvzw,uuvyzy));uuuuzz:=uuuuyvCASE uuuuyw:uuuvuw:=real(selwert(uuuvzw
+,uuvyzy));uuuuzz:=uuuuywCASE uuuuyx:uuuvuw:=date(selwert(uuuvzw,uuvyzy));
+uuuuzz:=uuuuywOTHERWISE :uuuvuy:=selwert(uuuvzw,uuvyzy);uuuuzz:=uuuuyy
+ENDSELECT ELSE SELECT feldtyp(fnrlinks(uuuvzw,uuvyzy))OF CASE uuuuyv:uuuvuu:=
+intwert(fnrlinks(uuuvzw,uuvyzy));uuuuzz:=uuuuyvCASE uuuuyw:uuuvuw:=realwert(
+fnrlinks(uuuvzw,uuvyzy));uuuuzz:=uuuuywCASE uuuuyx:uuuvuw:=date(datumwert(
+fnrlinks(uuuvzw,uuvyzy)));uuuuzz:=uuuuywOTHERWISE :uuuvuy:=wert(fnrlinks(
+uuuvzw,uuvyzy));uuuuzz:=uuuuyyENDSELECT FI .uuwvwu:IF fnrrechts(uuuvzw,uuvyzy
+)=0THEN SELECT uuwxvvOF CASE uuuuyv:uuuvuv:=int(selwert(uuuvzw,uuvyzy))CASE
+uuuuyw:uuuvux:=real(selwert(uuuvzw,uuvyzy))CASE uuuuyx:uuuvux:=date(selwert(
+uuuvzw,uuvyzy))OTHERWISE :uuuvuz:=selwert(uuuvzw,uuvyzy)ENDSELECT ELSE
+SELECT feldtyp(fnrrechts(uuuvzw,uuvyzy))OF CASE uuuuyv:uuuvuv:=intwert(
+fnrrechts(uuuvzw,uuvyzy))CASE uuuuyw:uuuvux:=realwert(fnrrechts(uuuvzw,uuvyzy
+))CASE uuuuyx:uuuvux:=date(datumwert(fnrrechts(uuuvzw,uuvyzy)))OTHERWISE :
+uuuvuz:=wert(fnrrechts(uuuvzw,uuvyzy))ENDSELECT FI .uuwxvv:IF fnrlinks(uuuvzw
+,uuvyzy)=0THEN uuuuyyELSE feldtyp(fnrlinks(uuuvzw,uuvyzy))FI .uuwvwz:IF
+fnrrechts(uuuvzw,uuvyzy)=0THEN uuuuyyELSE feldtyp(fnrrechts(uuuvzw,uuvyzy))
+FI .uuwuuy:optyp(uuuvzw,uuvyzy).ENDPROC werteselektionaus;BOOL PROC uuwuww:
+SELECT uuuuzzOF CASE uuuuyv:uuuvuu<=uuuvuvCASE uuuuyw:uuuvuw<=uuuvux
+OTHERWISE :uuuvuy<=uuuvuzENDSELECT ENDPROC uuwuww;BOOL PROC uuwuwy:SELECT
+uuuuzzOF CASE uuuuyv:uuuvuu>=uuuvuvCASE uuuuyw:uuuvuw>=uuuvuxOTHERWISE :
+uuuvuy>=uuuvuzENDSELECT ENDPROC uuwuwy;BOOL PROC uuwuxy:SELECT uuuuzzOF CASE
+uuuuyv:uuuvuu<uuuvuvCASE uuuuyw:uuuvuw<uuuvuxOTHERWISE :IF lexsortTHEN NOT (
+uuuvuyLEXGREATEREQUAL uuuvuz)ELSE uuuvuy<uuuvuzFI ENDSELECT ENDPROC uuwuxy;
+BOOL PROC uuwuyu:SELECT uuuuzzOF CASE uuuuyv:uuuvuu>uuuvuvCASE uuuuyw:uuuvuw>
+uuuvuxOTHERWISE :IF lexsortTHEN uuuvuyLEXGREATER uuuvuzELSE uuuvuy>uuuvuzFI
+ENDSELECT ENDPROC uuwuyu;BOOL PROC uuwuxw:SELECT uuuuzzOF CASE uuuuyv:uuuvuu=
+uuuvuvCASE uuuuyw:uuuvuw=uuuvuxOTHERWISE :IF lexsortTHEN uuuvuyLEXEQUAL
+uuuvuzELSE uuuvuy=uuuvuzFI ENDSELECT ENDPROC uuwuxw;BOOL PROC uuwuxu:SELECT
+uuuuzzOF CASE uuuuyv:uuuvuu<>uuuvuvCASE uuuuyw:uuuvuw<>uuuvuxOTHERWISE :IF
+lexsortTHEN NOT (uuuvuyLEXEQUAL uuuvuz)ELSE uuuvuy<>uuuvuzFI ENDSELECT
+ENDPROC uuwuxu;BOOL PROC uuwuyw:IF uuuuzz=uuuuyyTHEN pos(uuuvuz,uuuvuy)>0
+ELSE FALSE FI ENDPROC uuwuyw;ENDPACKET queryselektion;
+
diff --git a/app/schulis/2.2.1/src/6.db snd query.sc b/app/schulis/2.2.1/src/6.db snd query.sc
new file mode 100644
index 0000000..dbf9cf5
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.db snd query.sc
@@ -0,0 +1,39 @@
+#$IF mitinternerqueryTHEN #PACKET dbsndqueryDEFINES auswertung,
+auswertungfortsetzen,qsucc,endofscan,ordernewstack,puttiefennr,gettiefennr,
+endqueryserver:LET uuuuuv=25,uuuuuw=0,uuuuux=1,uuuuuy=2,uuuuuz=2,uuuuvu=37,
+uuuuvv=10,uuuuvw=39,uuuuvx=40,uuuuvy=41,uuuuvz=1;INT CONST endofscan:=8,
+ordernewstack:=9;INT VAR uuuuwu,uuuuwv;DATASPACE VAR uuuuww;BOUND QUERY VAR
+uuuuwx;BOUND TEXT VAR uuuuwy;ROW uuuuvvINT VAR uuuuxu;TYPE TUPEL =STRUCT (
+INT uuuuxv,uuuuxw,uuuuxx,TEXT uuuuxy);TYPE QUERYSTACK =STRUCT (INT uuuuxz,
+TASK uuuuyu,ROW uuuuuvTUPEL uuuuyw);INT VAR uuuuyx:=getanzahltupel,uuuuyy;
+TEXT VAR uuuuyz:="",uuuuzu:="";PROC endqueryserver:forget(uuuuww);uuuuww:=
+nilspace;send(uuuuzy,uuuuvx,uuuuww)ENDPROC endqueryserver;TASK VAR uuuuzy;
+BOUND QUERYSTACK VAR uuuvux;OP :=(TUPEL VAR uuuvuy,TUPEL CONST uuuvuz):CONCR
+(uuuvuy):=CONCR (uuuvuz)ENDOP :=;OP :=(QUERYSTACK VAR uuuvuy,QUERYSTACK
+CONST uuuvuz):CONCR (uuuvuy):=CONCR (uuuvuz)ENDOP :=;INT PROC gettiefennr(
+INT CONST uuuvwv):IF uuuvwv=0THEN 0ELSE uuuuxu[uuuvwv]FI ENDPROC gettiefennr;
+PROC puttiefennr(INT CONST uuuvwv,uuuvxw):uuuuxu[uuuvwv]:=uuuvxwENDPROC
+puttiefennr;PROC auswertung(TEXT CONST uuuvyv):uuuuyy:=0;query(uuuvyv);IF
+queryart=uuuuvzTHEN uuuvyzELSE uuuvzuFI .uuuvyz:uuuvzw;forget(uuuuww);uuuuww
+:=nilspace;uuuuwx:=uuuuww;getquery(uuuuwx);call(/name(1),uuuuvu,uuuuww,uuuuwu
+);uuuwuz;uuuvux:=uuuuww;uuuuzy:=uuuvux.uuuuyu.uuuvzu:forget(uuuuww);uuuuww:=
+old(uuuvyv);call(/name(1),uuuuvy,uuuuww,uuuuwu);uuuwuz.ENDPROC auswertung;
+PROC uuuvzw:uuuuwv:=0;uuuwxx(1)ENDPROC uuuvzw;PROC uuuwxx(INT CONST uuuwyu):
+uuuuwvINCR 1;puttiefennr(uuuwyu,uuuuwv);IF getsohnverb(uuuwyu)<>uuuuuwTHEN
+uuuwxx(getsohnverb(uuuwyu))FI ;IF getbruderverb(uuuwyu)<>uuuuuwTHEN uuuwxx(
+getbruderverb(uuuwyu))FI ENDPROC uuuwxx;PROC auswertung(QUERY VAR uuuvyv):
+queryart(uuuuvz);uuuvzw;uuuuyy:=0;forget(uuuuww);uuuuww:=nilspace;uuuuwx:=
+uuuuww;uuuuwx:=uuuvyv;call(/name(1),uuuuvu,uuuuww,uuuuwu);uuuwuz;uuuvux:=
+uuuuww;uuuuzy:=uuuvux.uuuuyuENDPROC auswertung;PROC auswertungfortsetzen:
+uuuuyy:=0;forget(uuuuww);uuuuww:=nilspace;call(uuuuzy,uuuuvw,uuuuww,uuuuwu);
+uuuwuz;uuuvux:=uuuuwwENDPROC auswertungfortsetzen;PROC uuuwuz:IF uuuuwu=
+uuuuuzTHEN dbstatus(dberror);uuuuwy:=uuuuww;forget(uuuuww);errorstop(uuuuwy)
+ELSE dbstatus(uuuuwu)FI ENDPROC uuuwuz;PROC qsucc(INT VAR uuuwyu,uuuyuz):
+uuuuyyINCR 1;IF uuuuyy>uuuvux.uuuuxzTHEN uuuwyu:=0;uuuyuz:=0;dbstatus(
+endoffile)ELSE uuuyuz:=uuuvux.uuuuyw[uuuuyy].uuuuxw;#uuuywz(uuuvux.uuuuyw[
+uuuuyy].uuuuxy[uuuuux]);uuuyxz(uuuvux.uuuuyw[uuuuyy].uuuuxy[uuuuuy]);#
+parsetupel(uuuyuz,uuuyzu);IF uuuyzvTHEN dbstatus(endofscan)ELSE dbstatus(ok)
+FI FI .uuuyzu:uuuvux.uuuuyw[uuuuyy].uuuuxy.uuuyzv:uuuwyu:=uuuvux.uuuuyw[
+uuuuyy].uuuuxv;IF uuuwyu<0THEN uuuwyu:=abs(uuuwyu);TRUE ELSE FALSE FI .
+ENDPROC qsucc;ENDPACKET dbsndquery;#$FI #
+
diff --git a/app/schulis/2.2.1/src/6.ida.auswahl b/app/schulis/2.2.1/src/6.ida.auswahl
new file mode 100644
index 0000000..be92224
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.ida.auswahl
@@ -0,0 +1,23 @@
+PACKET idaauswahlDEFINES idaauswahleinlesenundbearbeiten,idaauswahleinlesen,
+pruefungidaauswahl:LET niltext="";LET anzahlzeilen=18,erstesausgabefeld=2,
+vorwaerts=3;INT VAR anfang,ende,lv;TAG VAR maske;PROC
+idaauswahleinlesenundbearbeiten(INT CONST nr):BOOL VAR listeexistiertnicht:=
+FALSE ;anfang:=(nr-1)*10+1;ende:=anfang+9;putintwert(fnridanummer,anfang);
+objektlistestarten(dnrida,text(anfang),fnridanummer,TRUE ,listeexistiertnicht
+);IF listeexistiertnichtOR NOT pruefungidaauswahlTHEN return(1)ELSE
+datensatzlistenausgabe(PROC (INT CONST )erfassungdruckausgabe,TRUE ,BOOL
+PROC pruefungidaauswahl);FI END PROC idaauswahleinlesenundbearbeiten;PROC
+idaauswahleinlesen:feldersperren;infeld(erstesausgabefeld);standardnproc;END
+PROC idaauswahleinlesen;BOOL PROC pruefungidaauswahl:intwert(fnridanummer)>=
+anfangCAND intwert(fnridanummer)<=endeEND PROC pruefungidaauswahl;PROC
+datensatzlistenausgabe(PROC (INT CONST )erfassungspeziell,BOOL CONST scanja,
+BOOL PROC pruefungspeziell):BOOL VAR rs:=ruecksprung;initobli;
+listenmaskeholenundausgeben;inlisteblaettern(PROC erfassungspeziell,vorwaerts
+,TRUE ,scanja,BOOL PROC pruefungspeziell);idaauswahleinlesenENDPROC
+datensatzlistenausgabe;PROC listenmaskeholenundausgeben:LET listenmaskenname=
+"mu objektliste";initmaske(maske,listenmaskenname);setzeaktuellemaske(maske);
+standardstartproc(listenmaskenname)END PROC listenmaskeholenundausgeben;PROC
+feldersperren:FOR lvFROM 1UPTO anzahlzeilenREP IF standardmaskenfeld(lv*2+1)=
+niltextTHEN protect(maske,lv*2,TRUE )FI PER END PROC feldersperren;END
+PACKET idaauswahl;
+
diff --git a/app/schulis/2.2.1/src/6.ida.check b/app/schulis/2.2.1/src/6.ida.check
new file mode 100644
index 0000000..34d7616
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.ida.check
@@ -0,0 +1,162 @@
+PACKET ispidacheckDEFINES fehlerinformular,formfehlermelden,
+fehlerindruckvariable,ausdruckwardruckvariable:LET okkenner="k",kennnormal=
+"+",kennauffaellig="#",linkeklammer="<",rechteklammer=">";FILE VAR formtext;
+TEXT VAR zeile:="",blockstruktur:="",zugriffsreihenfolge:="";INT VAR errormld
+:=0,errorline:=0;BOOL VAR fehlerfrei;LET mldplatzhalter=230,mldschachtelung=
+231,mldtextkosmetik=232,mldnichtverfuegbar=233,mldregelunbekannt=234,
+mldvarunbekannt=235,mldfeldunbekannt=236,mlddateiunbekannt=237,
+mldmussleitobjekt=238,laengeblockkey=6,kzkosmetik="#";LET mldkeinevar=239,
+mldvarfehler=240,mldkeinbegrenzer=241,mldtypkonflikt=242,mldkeinezeichenkette
+=243,mldrestunbekannt=244,mldklammerfehlt=245;LET parametergrenze="%",
+parametertrennzeichen="#",otherwise="*",textbegrenzer="""";BOOL VAR
+wardruckvar:=TRUE ;PROC fehlersetzen(INT CONST nr):errormld:=nr;errorline:=
+max(lineno(formtext)-1,1);fehlerfrei:=FALSE ;ENDPROC fehlersetzen;PROC
+formfehlermelden:TEXT VAR zusatz:=" in Zeile ";IF errormld>0THEN zusatzCAT
+text(errorline);standardmeldung(errormld,zusatz+kennnormal+" <CR> "+
+kennauffaellig);pause;FI ;errormld:=0ENDPROC formfehlermelden;PROC
+zugriffmerken(INT CONST objklasse):INT CONST dnr:=dateinr(getobjektklasse(
+objklasse));IF dnr=0THEN fehlersetzen(mlddateiunbekannt)ELSE
+zugriffsreihenfolgeCAT "!"+text(dnr)+"!"FI ENDPROC zugriffmerken;BOOL PROC
+dateischonimzugriff(INT CONST datei):pos(zugriffsreihenfolge,"!"+text(datei)+
+"!")>0ENDPROC dateischonimzugriff;TEXT PROC blockkey(INT CONST objklasse,
+regel):"!"+text(objklasse,2)+text(regel,2)+"!"ENDPROC blockkey;BOOL PROC
+blockschliessen(INT CONST objklasse,regel):INT CONST p:=pos(blockstruktur,
+blockkey(objklasse,regel));IF p>0CAND fehlerfreiTHEN
+pruefeobregelmehrfachauftritt;IF fehlerfreiTHEN pruefeobrichtiggeklammertFI
+FI ;p>0.pruefeobregelmehrfachauftritt:IF pos(subtext(blockstruktur,p+
+laengeblockkey),blockkey(objklasse,regel))>0THEN fehlersetzen(mldschachtelung
+)FI .pruefeobrichtiggeklammert:TEXT VAR bs:=subtext(blockstruktur,p+
+laengeblockkey),kr:="";INT VAR pp;WHILE length(bs)>1REP kr:=text(bs,
+laengeblockkey);bs:=subtext(bs,laengeblockkey+1);pp:=pos(bs,kr);IF pp=0THEN
+fehlersetzen(mldschachtelung);LEAVE pruefeobrichtiggeklammertELSE change(bs,
+pp,pp+laengeblockkey-1,"")FI PER .ENDPROC blockschliessen;PROC
+pruefeaufdisjunkteobjektklassen(INT CONST objkl):TEXT VAR bs:=blockstruktur,
+kr:="";TEXT CONST objklkey:="!"+text(objkl,2);INT VAR p:=pos(bs,objklkey);
+WHILE p>0REP kr:=subtext(bs,p,p+laengeblockkey-1);change(bs,p,p+
+laengeblockkey-1,"");p:=pos(bs,kr);IF p=0THEN fehlersetzen(mldschachtelung);
+LEAVE pruefeaufdisjunkteobjektklassenELSE change(bs,p,p+laengeblockkey-1,"");
+p:=pos(bs,objklkey)FI PER ENDPROC pruefeaufdisjunkteobjektklassen;PROC
+pruefeobverbundfelderverfuegbar(INT CONST regelnummer):INT VAR i,fnr,datei;
+TEXT VAR vglwert:="";FOR iFROM 1UPTO getanzahlregelfelder(regelnummer)REP
+vglwert:=getvergleichswert(regelnummer,i);IF feldnameTHEN fnr:=feldnr(vglwert
+);IF fnr=0THEN fehlersetzen(mldfeldunbekannt);LEAVE
+pruefeobverbundfelderverfuegbarFI ;datei:=dateinrzufeld(fnr);IF NOT
+dateischonimzugriff(datei)THEN fehlersetzen(mldnichtverfuegbar);LEAVE
+pruefeobverbundfelderverfuegbarFI FI PER .feldname:(vglwertSUB 1)<>"""".
+ENDPROC pruefeobverbundfelderverfuegbar;PROC pruefeobdatenbereitsverfuegbar(
+TEXT CONST ausdruck):LET parametergrenze="%";TEXT VAR evtlfeldname:=ausdruck;
+INT VAR fnr,dnr;IF pos(evtlfeldname,parametergrenze)>0THEN evtlfeldname:=text
+(evtlfeldname,pos(evtlfeldname,parametergrenze)-1);FI ;fnr:=feldnr(
+evtlfeldname);IF fnr>0THEN dnr:=dateinrzufeld(fnr);IF NOT dateischonimzugriff
+(dnr)THEN fehlersetzen(mldnichtverfuegbar);FI FI ENDPROC
+pruefeobdatenbereitsverfuegbar;PROC blockkeymerken(INT CONST objklasse,regel)
+:IF blockstruktur=""CAND objklasse<>1CAND fehlerfreiTHEN fehlersetzen(
+mldmussleitobjekt)ELSE blockstrukturCAT blockkey(objklasse,regel);FI ENDPROC
+blockkeymerken;BOOL PROC textkommando(TEXT CONST ausdruck):TEXT VAR parameter
+:="";IF pos("!page!head!bottom!end!","!"+ausdruck+"!")>0THEN LEAVE
+textkommandoWITH TRUE FI ;IF pos(ausdruck,"on")=1THEN parameter:=compress(
+subtext(ausdruck,3));pruefeparameterELIF pos(ausdruck,"off")=1THEN parameter
+:=compress(subtext(ausdruck,4));pruefeparameterELSE FALSE FI .pruefeparameter
+:IF text(parameter,2)<>"("""COR subtext(parameter,length(parameter)-1)<>""")"
+THEN LEAVE pruefeparameterWITH FALSE FI ;parameter:=subtext(parameter,3,
+length(parameter)-2);pos("!bold!b!underline!u!","!"+parameter+"!")>0.ENDPROC
+textkommando;PROC zeileueberpruefen(TEXT CONST zeile):TEXT VAR textzeile:=
+zeile,ausdruck:="";INT VAR vonp,bisp,stcodenr,ausglaenge;BOOL VAR rbuendig,
+druckvar;IF fehlerfreiTHEN druckvariablenpruefen;textkosmetikpruefenFI .
+druckvariablenpruefen:vonp:=pos(textzeile,linkeklammer);WHILE vonp>0REP bisp
+:=pos(textzeile,rechteklammer,vonp+1);IF bisp=0THEN fehlersetzen(
+mldplatzhalter);LEAVE zeileueberpruefenFI ;disablestop;stcodenr:=int(subtext(
+textzeile,vonp+1,bisp-1));clearerror;enablestop;getsteuercode(stcodenr,
+ausdruck,ausglaenge,rbuendig,druckvar);IF ausdruck=""COR NOT lastconversionok
+THEN fehlersetzen(mldvarunbekannt);LEAVE zeileueberpruefenELSE
+pruefeobdatenbereitsverfuegbar(ausdruck);FI ;change(textzeile,vonp,bisp,"");
+vonp:=pos(textzeile,linkeklammer);PER .textkosmetikpruefen:textzeile:=zeile;
+vonp:=pos(textzeile,kzkosmetik);WHILE vonp>0REP bisp:=pos(textzeile,
+kzkosmetik,vonp+1);IF bisp=0THEN fehlersetzen(mldtextkosmetik);LEAVE
+zeileueberpruefenFI ;ausdruck:=compress(subtext(textzeile,vonp+1,bisp-1));IF
+NOT textkommando(ausdruck)THEN fehlersetzen(mldtextkosmetik);LEAVE
+zeileueberpruefenFI ;change(textzeile,vonp,bisp,"");vonp:=pos(textzeile,
+kzkosmetik);PER .ENDPROC zeileueberpruefen;PROC bearbeiteblock:INT VAR p,bis,
+objklasse,regel;BOOL VAR eoformtext:=FALSE ;WHILE NOT eoformtextCAND
+fehlerfreiREP IF zugriffsregelgefundenTHEN okundregelbestimmen;IF
+blockschliessen(objklasse,regel)THEN blockkeymerken(objklasse,regel);LEAVE
+bearbeiteblockELSE pruefeaufdisjunkteobjektklassen(objklasse);IF NOT
+fehlerfreiTHEN LEAVE bearbeiteblockFI ;IF objklasse>1CAND fehlerfreiTHEN
+pruefeobverbundfelderverfuegbar(getregelnummer(objklasse,regel));FI ;
+blockkeymerken(objklasse,regel);zugriffmerken(objklasse);IF NOT fehlerfrei
+THEN LEAVE bearbeiteblockFI ;IF compress(zeile)=""CAND NOT eoformtextTHEN
+getline(formtext,zeile);FI ;bearbeiteblockFI ;ELSE zeileueberpruefen(zeile)
+FI ;IF eof(formtext)THEN eoformtext:=TRUE ELSE getline(formtext,zeile);FI ;
+PER ;.zugriffsregelgefunden:p:=pos(zeile,linkeklammer+okkenner);p>0.
+okundregelbestimmen:bis:=p+2;objklasse:=int(zeileSUB bis);bisINCR 1;IF
+istziffer(zeileSUB bis)THEN objklasse:=objklasse*10+int(zeileSUB bis);bis
+INCR 1;FI ;IF objklasse<1COR objklasse>10THEN fehlersetzen(mldplatzhalter);
+LEAVE bearbeiteblockFI ;IF (zeileSUB bis)=rechteklammerTHEN regel:=1ELSE
+regel:=int(zeileSUB bis+1);bisINCR 2;IF istziffer(zeileSUB bis)THEN regel:=
+regel*10+int(zeileSUB bis);bisINCR 1;FI ;FI ;change(zeile,p,bis,"");IF
+objklasse>1CAND getregelnummer(objklasse,regel)=0THEN fehlersetzen(
+mldregelunbekannt);LEAVE bearbeiteblockFI ;.ENDPROC bearbeiteblock;BOOL PROC
+fehlerinformular:#openformular(nr);#fehlerfrei:=TRUE ;stopbeifalschemnamen(
+FALSE );blockstruktur:="";zugriffsreihenfolge:="";zeile:="";errormld:=0;
+errorline:=0;formtext:=sequentialfile(input,getformtextname);IF NOT eof(
+formtext)THEN getline(formtext,zeile)FI ;IF eof(formtext)CAND zeile=""THEN
+ELSE bearbeiteblockFI ;IF fehlerfreiCAND length(blockstruktur)<=
+laengeblockkeyTHEN fehlersetzen(mldschachtelung)FI ;stopbeifalschemnamen(
+TRUE );NOT fehlerfreiENDPROC fehlerinformular;BOOL PROC istziffer(TEXT CONST
+t):pos("0123456789",t)>0END PROC istziffer;BOOL PROC istsonderfunktion(TEXT
+CONST ausdruck):TEXT CONST liste:="#tagesdatum#tag#monat#jahr#zeit#tt#mm#jj#"
+;pos(liste,"#"+ausdruck+"#")>0ENDPROC istsonderfunktion;BOOL PROC istdbfeld(
+TEXT CONST feldname):feldnr(feldname)>0ENDPROC istdbfeld;BOOL PROC
+falscherdenotertyp(TEXT CONST vglswert,INT CONST aktfeldtyp):BOOL VAR fehler
+:=FALSE ;INT VAR i;REAL VAR r;disablestop;IF aktfeldtyp=intfeldTHEN i:=int(
+vglswert);fehler:=NOT lastconversionokCOR iserrorELIF aktfeldtyp=realfeld
+THEN r:=real(vglswert);fehler:=NOT lastconversionokCOR iserrorELIF aktfeldtyp
+=datumfeldTHEN r:=date(vglswert);fehler:=iserrorFI ;clearerror;enablestop;
+fehlerEND PROC falscherdenotertyp;BOOL PROC ausdruckwardruckvariable:
+wardruckvarENDPROC ausdruckwardruckvariable;BOOL PROC fehlerindruckvariable(
+TEXT CONST origausdruck):BOOL VAR fehlerhaft:=FALSE ;INT VAR p;TEXT VAR
+ausdruck:=compress(origausdruck),feldname:="";stopbeifalschemnamen(FALSE );
+wardruckvar:=TRUE ;liesfeldname;IF NOT istdbfeld(feldname)THEN IF
+istsonderfunktion(feldname)THEN IF ausdruck=""THEN wardruckvar:=FALSE ELSE
+standardmeldung(mldvarfehler,ausdruck);fehlerhaft:=TRUE ;FI ELSE
+standardmeldung(mldkeinevar,feldname);fehlerhaft:=TRUE ;FI ;leaveprocFI ;IF
+ausdruck>""THEN fehlerhaft:=zusammengesetzterausdruck(feldname,ausdruck)FI ;
+stopbeifalschemnamen(TRUE );fehlerhaft.liesfeldname:p:=pos(ausdruck,
+parametergrenze);IF p>0THEN feldname:=text(ausdruck,p-1);ausdruck:=subtext(
+ausdruck,p+1)ELSE feldname:=ausdruck;ausdruck:=""FI .leaveproc:
+stopbeifalschemnamen(TRUE );LEAVE fehlerindruckvariableWITH fehlerhaft.
+ENDPROC fehlerindruckvariable;BOOL PROC zusammengesetzterausdruck(TEXT CONST
+aktfeld,TEXT VAR ausdruck):TEXT VAR feldname:="",vglswert:="";INT CONST
+aktfeldtyp:=feldtyp(feldnr(aktfeld));INT VAR p;BOOL VAR fehlerhaft:=FALSE ;
+WHILE ausdruck>""CAND (ausdruckSUB 1)<>rechteklammerREP
+pruefefallunterscheidung;PER ;fehlerhaft.pruefefallunterscheidung:p:=pos(
+ausdruck,parametertrennzeichen);IF p=0THEN standardmeldung(mldkeinbegrenzer,
+ausdruck);LEAVE zusammengesetzterausdruckWITH TRUE FI ;vglswert:=text(
+ausdruck,p-1);ausdruck:=subtext(ausdruck,p+1);IF falscherdenotertyp(vglswert,
+aktfeldtyp)THEN standardmeldung(mldtypkonflikt,vglswert);LEAVE
+zusammengesetzterausdruckWITH TRUE FI ;pruefesequenz;IF (ausdruckSUB 1)=
+otherwiseTHEN deletechar(ausdruck,1);pruefesequenzELIF (ausdruckSUB 1)=
+parametertrennzeichenTHEN deletechar(ausdruck,1)ELIF ausdruck>""THEN IF (
+ausdruckSUB 1)=parametertrennzeichenTHEN ELIF (ausdruckSUB 1)=rechteklammer
+THEN deletechar(ausdruck,1);LEAVE zusammengesetzterausdruckWITH fehlerhaft
+ELSE standardmeldung(mldrestunbekannt,ausdruck);LEAVE
+zusammengesetzterausdruckWITH TRUE FI FI .pruefesequenz:
+zeichenketteueberlesen;IF (ausdruckSUB 1)=linkeklammerTHEN deletechar(
+ausdruck,1);IF postext(ausdruck,rechteklammer,1)=0THEN standardmeldung(
+mldklammerfehlt,ausdruck);LEAVE zusammengesetzterausdruckWITH TRUE FI ;
+liesfeldname;IF (ausdruckSUB 1)=parametergrenzeTHEN deletechar(ausdruck,1);
+fehlerhaft:=zusammengesetzterausdruck(feldname,ausdruck);IF fehlerhaftTHEN
+LEAVE zusammengesetzterausdruckWITH TRUE FI ;ELSE deletechar(ausdruck,1);FI
+FI .liesfeldname:p:=1;WHILE (ausdruckSUB p)<>rechteklammerCAND (ausdruckSUB p
+)<>parametergrenzeREP pINCR 1PER ;feldname:=text(ausdruck,p-1);ausdruck:=
+subtext(ausdruck,p);IF NOT istdbfeld(feldname)THEN standardmeldung(
+mldfeldunbekannt,feldname);LEAVE zusammengesetzterausdruckWITH TRUE FI .
+zeichenketteueberlesen:IF (ausdruckSUB 1)<>textbegrenzerTHEN standardmeldung(
+mldkeinezeichenkette,ausdruck);LEAVE zusammengesetzterausdruckWITH TRUE FI ;p
+:=2;WHILE (ausdruckSUB p)<>textbegrenzerREP pINCR 1;IF (ausdruckSUB p)=
+textbegrenzerCAND (ausdruckSUB p+1)=textbegrenzerTHEN pINCR 2;FI ;UNTIL p>
+length(ausdruck)PER ;IF p>length(ausdruck)THEN standardmeldung(
+mldkeinezeichenkette,ausdruck);LEAVE zusammengesetzterausdruckWITH TRUE FI ;
+ausdruck:=compress(subtext(ausdruck,p+1)).ENDPROC zusammengesetzterausdruck;
+END PACKET ispidacheck
+
diff --git a/app/schulis/2.2.1/src/6.ida.def.druck b/app/schulis/2.2.1/src/6.ida.def.druck
new file mode 100644
index 0000000..81d218d
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.ida.def.druck
@@ -0,0 +1,64 @@
+PACKET ispidadefinitiondruckenDEFINES druckdefinitionzusammenstellen,
+benoetigteregel,idaankreuzfelderpruefen:LET druckfile="Hilfsdatei.Druck",
+filenamezug="Hilfsdatei.Zugriff",niltext="";LET maxobjektklassen=10,
+maxvariablen=100,zobjklasse=2;BOOL VAR ba,bb;INT VAR ia,ib,ic,id,ie,lva,lvb,
+regelnummer;REAL VAR ra,rb,rc;TEXT VAR ta,tb,tc;FILE VAR f,g;PROC
+druckdefinitionzusammenstellen(PROC (INT CONST )indatei,ROW 100TEXT VAR feld)
+:forget(druckfile,quiet);f:=sequentialfile(output,druckfile);
+nameundtypindateischreiben;objektklassenindateischreiben;
+zugriffsregelnindateischreiben(PROC (INT CONST )indatei,feld);
+selektionenindateischreiben(PROC (INT CONST )indatei);
+druckformularindateischreiben;druckvariablenindateischreiben;
+wertefuerdruckindateischreiben;print(druckfile);END PROC
+druckdefinitionzusammenstellen;PROC nameundtypindateischreiben:putline(f,
+niltext);getformularinfo(ta,ia,ba);putline(f,"Nummer: "+text(ia));putline(f,
+" Name: "+ta);END PROC nameundtypindateischreiben;PROC
+objektklassenindateischreiben:putline(f,niltext);putline(f,"Objektklassen");
+putline(f,niltext);FOR iaFROM 1UPTO maxobjektklassenREP ta:=getobjektklasse(
+ia);IF ta<>niltextTHEN putline(f,"k"+text(ia)+": "+ta);ELSE LEAVE
+objektklassenindateischreibenFI PER ;END PROC objektklassenindateischreiben;
+PROC zugriffsregelnindateischreiben(PROC (INT CONST )indatei,ROW 100TEXT VAR
+feld):putline(f,niltext);putline(f,"Zugriffsregeln");putline(f,niltext);FOR
+lvaFROM 1UPTO getanzahlregelnREP bb:=TRUE ;getzugriffsregel(lva,ib,ic,id,ie);
+regelnummer:=lva;IF getobjektklasse(ib)<>niltextTHEN feld[zobjklasse]:=text(
+ib);indatei(4);g:=sequentialfile(modify,filenamezug);FOR lvbFROM 1UPTO lines(
+g)REP toline(g,lvb);readrecord(g,tb);IF pos(tb,"</>")>0THEN
+zeilezusammensetzen;putline(f,ta);bb:=FALSE FI PER ;FI PER .
+zeilezusammensetzen:IF bbTHEN ta:="k"+text(ib,2)+"r"+text(ic,2)+" : ";ELSE ta
+:=9*" "FI ;taCAT text(subtext(tb,pos(tb,"<#>")+3,pos(tb,"<!>")-1),25);taCAT
+" : ";taCAT subtext(tb,pos(tb,"</>")+3).END PROC
+zugriffsregelnindateischreiben;PROC selektionenindateischreiben(PROC (INT
+CONST )indatei):putline(f,niltext);putline(f,"Selektionen");putline(f,niltext
+);FOR lvaFROM 1UPTO getanzahlselfelderREP getselektion(lva,ta,tb);IF subtext(
+tb,pos(tb,"</>")+3)<>niltextTHEN zeilezusammensetzen;putline(f,tc)FI PER .
+zeilezusammensetzen:tc:=text(ta,25);tcCAT " : ";tcCAT tb.END PROC
+selektionenindateischreiben;PROC druckformularindateischreiben:putline(f,
+niltext);putline(f,"Druckformular");putline(f,niltext);g:=sequentialfile(
+modify,getformtextname);FOR iaFROM 1UPTO lines(g)REP toline(g,ia);readrecord(
+g,ta);changeall(ta,"#","\#");putline(f,ta);PER ;END PROC
+druckformularindateischreiben;PROC druckvariablenindateischreiben:putline(f,
+niltext);putline(f,"Druckvariablen");putline(f,niltext);FOR iaFROM 1UPTO
+maxvariablenREP getsteuercode(ia,ta,ib,ba,bb);IF ta<>niltextTHEN changeall(ta
+,"#","\#");putline(f,text(ia,3)+": "+ta);put(f," Länge: "+text(ib,2)+
+" rechts-/linksbündig: ");IF baTHEN putline(f,"rechtsbündig")ELSE putline(f,
+"linksbündig")FI FI PER END PROC druckvariablenindateischreiben;PROC
+wertefuerdruckindateischreiben:putline(f,niltext);putline(f,
+"Werte für die Druckaufbereitung");putline(f,niltext);getdruckaufbereitung(ta
+,ra,rb,ia,rc);putline(f," Schrifttyp: "+ta);putline(f,
+" linker oberer Rand: "+text(rb,4,1)+" cm von oben");putline(f,
+" : "+text(ra,4,1)+" cm von links");putline(f,
+" Anzahl der Zeilen pro Seite: "+text(ia));putline(f,
+"Anzahl der Zeichen pro Zeile: "+subtext(text(rc),1,pos(text(rc),".")-1));
+END PROC wertefuerdruckindateischreiben;INT PROC benoetigteregel:regelnummer
+END PROC benoetigteregel;BOOL PROC idaankreuzfelderpruefen:LET
+meldungalternative=56,zeileninobjektliste=18;LET niltext="";BOOL VAR
+angekreuzt:=FALSE ;INT VAR lva,lvi;IF NOT richtigangekreuztTHEN
+standardmeldung(meldungalternative,niltext);return(1);FALSE ELSE TRUE FI .
+richtigangekreuzt:FOR lvaFROM 1UPTO anzahlderbelegtenzeilen-1REP IF
+standardmaskenfeld(lva*2)<>niltextTHEN IF angekreuztTHEN infeld(lva*2);LEAVE
+richtigangekreuztWITH FALSE ELSE angekreuzt:=TRUE FI FI PER ;angekreuzt.
+anzahlderbelegtenzeilen:FOR lviFROM 1UPTO zeileninobjektlisteREP IF
+standardmaskenfeld(lvi*2+1)=niltextTHEN LEAVE anzahlderbelegtenzeilenWITH lvi
+FI PER ;0.END PROC idaankreuzfelderpruefen;END PACKET ispidadefinitiondrucken
+;
+
diff --git a/app/schulis/2.2.1/src/6.ida.definieren b/app/schulis/2.2.1/src/6.ida.definieren
new file mode 100644
index 0000000..696409b
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.ida.definieren
@@ -0,0 +1,516 @@
+PACKET ispidadefinierenDEFINES druckausgabeeingangaufbauenundeinlesen,
+druckausgabeeingangeinlesen,druckausgabeaufbauenundeinlesen,
+druckausgabeeinlesen,druckausgabeausgebenundbearbeiten,druckausgabespeichern,
+druckausgabeneueinfuegen,druckausgabeloeschenvorbereiten,
+druckausgabeloeschfrage,druckausgabeloeschen,
+druckausgabelisteaufbauenundeinlesen,druckausgabelisteeinlesen,
+ausgesuchtedruckausgabeausgebenundbearbeiten,ausgesuchtedruckausgabeeinlesen,
+ausgesuchtedruckausgabeloeschenvorbereiten,ausgesuchtedruckausgabeloeschfrage
+,listederdruckausgabenzeigen,listederdruckausgabeneinlesen,
+indruckausgabenblaettern,inselektionenzurdruckausgabeblaettern,
+inregelzurdruckausgabeblaettern,zurueckzurbearbeitung,formularausdrucken,
+setzenummerderdruckausgabe,nochmeldungauszugeben,pruefungida,:LET filenamezug
+="Hilfsdatei.Zugriff",filenamesel="Hilfsdatei.Selektion",#filenamedruck=
+"Hilfsdatei.Druck",#filenameform="FORMTEXT.",filenamedata="FORMDATA.";LET
+maskenzusatz=" für Druckausgabe ";LET nameundtyp=1,objektklassen=2,#
+datenvorrat=3,#zugriffsregeln=4,selektion=5,druckformular=6,druckvariablen=7,
+druckwerte=8,druckdefinition=9;LET ntnummer=2,ntname=3;LET oleitobjekt=2;LET
+zobjklasse=2,zregelnr=3,zobjklname=4,znummer=5,zersterzugriff=6,
+zerstervergleich=7;LET sersteselektion=2,serstervergleich=3;LET dvnummer=2,
+dvdefinition=3,dvlaenge=4,dvrechtsbuendig=5;LET dwschriftart=2,
+dwlinkerrandoben=3,dwlinkerrandlinks=4,dwzeilenproseite=5,dwzeichenprozeile=6
+;LET minanfang=1.0,maxanfang=10.0;LET ankreuzzeichen="x",anzahltrenner="<?>",
+namentrenner="<#>",zeilennrtrenner="<!>",vergleichtrenner="</>",vartrenner=
+"%",trenner=". ",leitobjektschueler="Schüler",leitobjektlehrer="Lehrer",#
+gueltigerstatus="nw",#niltext="",semikolon=";"#oblitrenner="$"#;LET
+leitobjekt=1,vorwaerts=1#rueckwaerts=2#;LET tl=3,maxzugriffe=16,
+maxselektionen=17,maxobjektklassen=10;LET fnrerstesausgabefeld=2,
+anzmaskeneing=2,anzmaskenbearb=9,anzmaskentitel=9;LET meldunglistenerstellung
+=7,meldungalternative=56,meldungplausipruefung=57,meldungloeschfrage=65,
+meldungkeineliste=68,meldungkeinblaettern=72,meldungformdrucken=219,
+meldungfalscheeingabe=204,meldungdgibtesschon=205,meldungdgibtesnicht=206,
+meldungfalschenummer=207,meldungfalschesobjekt=208,meldungsammelndruckdef=209
+,meldungdruckendruckdef=210,meldungrgibtesschon=211,meldungrgibtesnicht=212,
+meldungvgibtesschon=213,meldungvgibtesnicht=214,meldungkeinleitobjekt=215,
+meldungfalscheregel=217,meldungfalschevariable=218,meldungkeinefonttabelle=
+250,meldungkeineobjektklasse=251;BOOL VAR loeschenderdruckausgabe:=FALSE ,
+neuedruckausgabe:=FALSE ,neuedruckvariable:=FALSE ,neuezugriffsregel:=FALSE ,
+druckenderdefinition:=FALSE ,druckvariablegibtesbereits:=FALSE ,
+zugriffsregelgibtesbereits:=FALSE ;BOOL VAR drvrechtsbuendig,drvdruckvar;
+FILE VAR f;INT VAR fnrletztesausgabefeld:=100,fehlseite:=0,fehlzeile:=0,
+fehlmeld:=0;INT VAR startpos,datenseite,merkzeile,anzahlderdateizeilen,
+leseanfangindatei,fnummer,zeilennr,nrdruckausgabe,anzfelder,dnr,zuwas;INT
+VAR regelnr,regnr,objklasse;INT VAR zrregel,zrobjekt,zrindex,zranzahl;INT
+VAR drvlaenge;ROW anzmaskenbearbINT VAR letztesmaskenfeld:=ROW anzmaskenbearb
+INT :(3,11,100,52,35,100,5,6,100);ROW anzmaskeneingTEXT VAR eingangsmaske:=
+ROW anzmaskeneingTEXT :("mdr name und typ der druckausgabe",
+"mdr objektklasse waehlen eingang");ROW anzmaskenbearbTEXT VAR bearbmaske:=
+ROW anzmaskenbearbTEXT :("mdr name und typ der druckausgabe",
+"mdr objektklasse waehlen bearb","","mdr zugriffsregeln bearb",
+"mdr selektionsbedingung bearb","","mdr variablen definieren bearb",
+"mdr werte fuer druckausgabe festlegen bearb",
+"mdr objektklasse waehlen eingang");ROW anzmaskentitelTEXT VAR
+maskentiteleingang:=ROW anzmaskentitelTEXT :("Name und Nummer definieren",
+"Objektklassen wählen","Datenvorrat festlegen","Zugriffsregeln bearbeiten",
+"Selektionsbedingungen angeben","Druckformular editieren",
+"Druckvariablen definieren","Werte für Druckaufbereitung",
+"Definition ausdrucken");ROW 100TEXT VAR erfassungsfeld;TAG VAR maske;BOOL
+VAR gespeichert:=FALSE ;TEXT VAR sfeldname,svergleichswert;TEXT VAR
+filenameformtp:="DUMMY";TEXT VAR meldungstext:="",nummerderdruckausgabe:="",
+pattern,zeile,programmname;PROC druckausgabeeingangaufbauenundeinlesen(INT
+CONST was):systemdboff;drvdruckvar:=ruecksprung;loeschenderdruckausgabe:=
+FALSE ;setzedruckausgabelistenauswahl(FALSE );
+setzelistederdruckausgabengezeigt(FALSE );fehlseite:=1;fehlzeile:=1;fehlmeld
+:=0;init(erfassungsfeld);startpos:=fnrerstesausgabefeld;zuwas:=was;
+programmname:=maskentiteleingang[zuwas];eingangsmaskeinitialisieren;
+felderausgebenundeinlesen;.eingangsmaskeinitialisieren:IF zuwas=1THEN
+initmaske(maske,eingangsmaske[1])ELSE initmaske(maske,eingangsmaske[2])FI ;
+nummerderdruckausgabe:=niltext;setzeaktuellemaske(maske).
+felderausgebenundeinlesen:IF zuwas=1THEN standardstartproc(eingangsmaske[1])
+ELSE standardstartproc(eingangsmaske[2])FI ;fnrletztesausgabefeld:=
+letztesmaskenfeld[zuwas];feldschutzfestlegen(fnrerstesausgabefeld+1);
+loeschfeldverdecken;eventuellmeldungausgeben;get(maske,erfassungsfeld,
+startpos);nummerderdruckausgabe:=erfassungsfeld[fnrerstesausgabefeld];
+standardmaskenfeld(nummerderdruckausgabe,fnrerstesausgabefeld).END PROC
+druckausgabeeingangaufbauenundeinlesen;PROC druckausgabeeingangeinlesen(INT
+CONST was):putget(maske,nummerderdruckausgabe,fnrerstesausgabefeld);END PROC
+druckausgabeeingangeinlesen;PROC druckausgabeaufbauenundeinlesen(INT CONST
+was):IF ruecksprungTHEN bearbeitungsbildschirmausgeben(PROC
+erneuteeingabeerforderlich)ELSE eingangsbildschirmueberpruefen(PROC
+erneuteeingabeerforderlich)FI END PROC druckausgabeaufbauenundeinlesen;PROC
+druckausgabeeinlesen(INT CONST was):IF was=druckformularTHEN editiere(
+filenameformtp,FALSE )ELSE get(maske,erfassungsfeld,startpos);
+standardfelderfuellen;FI END PROC druckausgabeeinlesen;PROC
+druckausgabeausgebenundbearbeiten(INT CONST was):zuwas:=was;loeschemeldung(
+aktuellemaske);loeschenderdruckausgabe:=FALSE ;neuedruckausgabe:=FALSE ;
+SELECT wasOF CASE zugriffsregeln:neuezugriffsregel:=FALSE ;
+zugriffsregelueberpruefenCASE druckvariablen:neuedruckvariable:=FALSE ;
+druckvariableueberpruefenCASE druckdefinition:eingangsbildschirmueberpruefen(
+PROC druckdefinitiondrucken)OTHERWISE :zurueck;eingangsbildschirmueberpruefen
+(PROC maskenwertezeigenundbearbeiten)END SELECT ;.END PROC
+druckausgabeausgebenundbearbeiten;PROC druckausgabespeichern(BOOL CONST
+speichern,INT CONST was):IF speichernTHEN angabenabspeichern(was);gespeichert
+:=TRUE ELSE gespeichert:=FALSE ;meldungstext:=("Die Angaben "+
+meldungseinschub+" wurden nicht gespeichert ");hilfsfilesloeschen;IF NOT
+druckausgabelistenauswahl#dr01.08.88#THEN forget(getformtextname,quiet);
+forget(filenameformtp,quiet)FI ;eventuellmeldungbeilistenabarbeitungFI ;
+stopbeifalschemnamen(TRUE )END PROC druckausgabespeichern;PROC
+druckausgabeneueinfuegen(INT CONST was):loeschemeldung(aktuellemaske);
+loeschenderdruckausgabe:=FALSE ;SELECT wasOF CASE nameundtyp:neuedruckausgabe
+:=TRUE ;eingangsbildschirmueberpruefen(PROC maskenwertezeigenundbearbeiten)
+CASE zugriffsregeln:neuezugriffsregel:=TRUE ;zugriffsregelueberpruefenCASE
+druckvariablen:neuedruckvariable:=TRUE ;druckvariableueberpruefenOTHERWISE :
+rueckschrittevorproc(2)END SELECT END PROC druckausgabeneueinfuegen;PROC
+druckausgabeloeschenvorbereiten(INT CONST was):loeschemeldung(aktuellemaske);
+loeschenderdruckausgabe:=TRUE ;SELECT wasOF CASE nameundtyp:neuedruckausgabe
+:=FALSE ;eingangsbildschirmueberpruefen(PROC maskenwertezeigenundbearbeiten)
+CASE zugriffsregeln:neuezugriffsregel:=FALSE ;zugriffsregelueberpruefenCASE
+druckvariablen:neuedruckvariable:=FALSE ;druckvariableueberpruefenOTHERWISE :
+rueckschrittevorproc(2)END SELECT ;END PROC druckausgabeloeschenvorbereiten;
+PROC druckausgabeloeschfrage:TEXT VAR xy;meldeauffaellig(aktuellemaske,
+meldungloeschfrage);startpos:=letztesmaskenfeld[zuwas]+1;get(maske,xy,
+startpos).END PROC druckausgabeloeschfrage;PROC druckausgabeloeschen(BOOL
+CONST loeschen,INT CONST was):IF loeschenTHEN meldungstext:=("Die Angaben "+
+meldungseinschub+" wurden gelöscht ");angabenloeschen(was);ELSE meldungstext
+:=("Die Angaben "+meldungseinschub+" wurden nicht gelöscht ");
+hilfsfilesloeschen;FI ;loeschenderdruckausgabe:=FALSE ;
+eventuellmeldungbeilistenabarbeitung;END PROC druckausgabeloeschen;PROC
+druckausgabelisteaufbauenundeinlesen(INT CONST was):
+setzedruckausgabelistenauswahl(FALSE );SELECT wasOF CASE nameundtyp:
+druckausgabenlistezeigenCASE zugriffsregeln:listederregelnzeigenCASE
+druckvariablen:listederdruckvariablenzeigenEND SELECT ;IF (was=nameundtypAND
+listederdruckausgabengezeigt)OR ((was=zugriffsregelnOR was=druckvariablen)
+AND druckausgabelistenauswahl)THEN druckausgabelisteeinlesen(was);FI .
+listederregelnzeigen:loeschemeldung(aktuellemaske);IF erlaubteregeleingabeOR
+regelleerTHEN regellistezeigenELSE meldeauffaellig(aktuellemaske,
+meldungfalscheregel);return(1);LEAVE druckausgabelisteaufbauenundeinlesenFI .
+regelleer:erfassungsfeld[zobjklasse]=niltextAND erfassungsfeld[zregelnr]=
+niltext.listederdruckvariablenzeigen:loeschemeldung(aktuellemaske);IF
+erlaubtevariableneingabeOR druckvariableleerTHEN variablenlistezeigenELSE
+meldeauffaellig(aktuellemaske,meldungfalschevariable);return(1);LEAVE
+druckausgabelisteaufbauenundeinlesenFI .druckvariableleer:erfassungsfeld[
+dvnummer]=niltext.END PROC druckausgabelisteaufbauenundeinlesen;PROC
+druckausgabelisteeinlesen(INT CONST was):infeld(fnrerstesausgabefeld);
+standardnproc;maskenwertesichern;END PROC druckausgabelisteeinlesen;PROC
+ausgesuchtedruckausgabeausgebenundbearbeiten(INT CONST was):
+behandlungderausgesuchten(PROC (INT CONST )druckausgabeausgebenundbearbeiten,
+erfassungsfeld,was);END PROC ausgesuchtedruckausgabeausgebenundbearbeiten;
+PROC ausgesuchtedruckausgabeeinlesen(INT CONST welche):druckausgabeeinlesen(
+welche)END PROC ausgesuchtedruckausgabeeinlesen;PROC
+ausgesuchtedruckausgabeloeschenvorbereiten(INT CONST was):
+behandlungderausgesuchten(PROC (INT CONST )druckausgabeloeschenvorbereiten,
+erfassungsfeld,was);END PROC ausgesuchtedruckausgabeloeschenvorbereiten;PROC
+ausgesuchtedruckausgabeloeschfrage:druckausgabeloeschfrageEND PROC
+ausgesuchtedruckausgabeloeschfrage;PROC listederdruckausgabenzeigen:BOOL VAR
+listeexistiertnicht:=FALSE ;loeschemeldung(aktuellemaske);
+nummerderdruckausgabe:=erfassungsfeld[fnrerstesausgabefeld];
+standardmaskenfeld(nummerderdruckausgabe,fnrerstesausgabefeld);IF
+nummerinrichtigengrenzen(nummerderdruckausgabe)OR nummerderdruckausgabe=
+niltextTHEN #putkeypart(niltext);putdatapart(niltext);##vorläufig14.03.88#
+pruefenobdruckausgabenexistierenELSE meldeauffaellig(aktuellemaske,
+meldungfalschenummer);rueckschrittenachproc(1)FI .
+pruefenobdruckausgabenexistieren:meldeauffaellig(aktuellemaske,
+meldunglistenerstellung);putwert(fnridanummer,nummerderdruckausgabe);
+objektlistestarten(dnrida,standardmaskenfeld(fnrerstesausgabefeld),
+fnridanummer,TRUE ,listeexistiertnicht);IF listeexistiertnichtTHEN
+meldeauffaellig(aktuellemaske,meldungkeineliste);rueckschrittenachproc(1)
+ELSE druckausgabelisteaufbauenundeinlesen(nameundtyp)FI .END PROC
+listederdruckausgabenzeigen;PROC listederdruckausgabeneinlesen:
+druckausgabelisteeinlesen(nameundtyp)END PROC listederdruckausgabeneinlesen;
+PROC indruckausgabenblaettern(INT CONST wie,worin):inlisteblaettern(wie);IF
+ruecksprungTHEN meldeauffaellig(aktuellemaske,meldungkeinblaettern);FI ;
+return(1)END PROC indruckausgabenblaettern;PROC
+inselektionenzurdruckausgabeblaettern(INT CONST wie):loeschemeldung(
+aktuellemaske);selektionenindateieintragen(leseanfangindatei,erfassungsfeld);
+datenseiteraufoderrunter(wie);IF maxselektionen*(datenseite-1)>=
+anzahlderdateizeilenOR datenseite=0THEN meldeauffaellig(aktuellemaske,
+meldungkeinblaettern);datenseiterunteroderrauf(wie)ELSE
+selektionenzeigenvorbereiten(datenseite);FI ;put(maske,erfassungsfeld,
+letztesmaskenfeld[zuwas]);startpos:=serstervergleich;rueckschrittenachproc(1)
+;END PROC inselektionenzurdruckausgabeblaettern;PROC
+inregelzurdruckausgabeblaettern(INT CONST wie):loeschemeldung(aktuellemaske);
+zugriffsregelnindateieintragen(leseanfangindatei,erfassungsfeld);
+datenseiteraufoderrunter(wie);IF maxzugriffe*(datenseite-1)>=
+anzahlderdateizeilenOR datenseite=0THEN meldeauffaellig(aktuellemaske,
+meldungkeinblaettern);datenseiterunteroderrauf(wie)ELSE
+zugriffezeigenvorbereiten(datenseite)FI ;put(maske,erfassungsfeld,
+letztesmaskenfeld[zuwas]);startpos:=zerstervergleich;rueckschrittenachproc(1)
+END PROC inregelzurdruckausgabeblaettern;INT PROC nochmeldungauszugeben:IF
+meldungstext=niltextTHEN 0ELSE meldungstext:=niltext;IF gespeichertTHEN 191
+ELSE 195FI FI END PROC nochmeldungauszugeben;PROC setzenummerderdruckausgabe(
+TEXT CONST nr):nummerderdruckausgabe:=nrEND PROC setzenummerderdruckausgabe;
+BOOL PROC pruefungida:FALSE END PROC pruefungida;PROC zurueckzurbearbeitung(
+INT CONST anzahl):zurueck;setzedruckausgabelistenauswahl(FALSE );init(
+erfassungsfeld);enter(anzahl)END PROC zurueckzurbearbeitung;PROC
+formularausdrucken:standardmeldung(meldungformdrucken,niltext);changeinfile(
+filenameformtp,"#","\#");print(filenameformtp);changeinfile(filenameformtp,"\#"
+,"#");rueckschrittenachproc(1)END PROC formularausdrucken;PROC
+druckvariableueberpruefen:IF erlaubtevariableneingabeTHEN
+standardkopfmaskeaktualisieren(programmname);IF druckausgabelistenauswahl
+THEN initmaske(maske,bearbmaske[zuwas]);setzeaktuellemaske(maske);show(
+aktuellemaske);loeschfeldverdecken;FI ;IF existenzdervariablennotwendigTHEN
+fehlerbehandlung;rueckschrittenachproc(1)ELSE maskenwertezeigenundbearbeiten;
+FI ELSE meldeauffaellig(aktuellemaske,meldungfalschevariable);startpos:=
+fnrerstesausgabefeld;rueckschrittenachproc(1)FI .
+existenzdervariablennotwendig:(neuedruckvariableAND
+druckvariableexistiertschon)OR (NOT neuedruckvariableAND NOT
+druckvariableexistiertschon).druckvariableexistiertschon:getsteuercode(int(
+erfassungsfeld[dvnummer]),erfassungsfeld[dvdefinition],drvlaenge,
+drvrechtsbuendig,drvdruckvar);druckvariablegibtesbereits:=erfassungsfeld[
+dvdefinition]<>niltext;erfassungsfeld[dvdefinition]<>niltext.fehlerbehandlung
+:IF neuedruckvariableAND druckvariableexistiertschonTHEN meldeauffaellig(
+aktuellemaske,meldungvgibtesschon)ELSE meldeauffaellig(aktuellemaske,
+meldungvgibtesnicht)FI .END PROC druckvariableueberpruefen;PROC
+eingangsbildschirmueberpruefen(PROC wasweiter):BOOL VAR
+druckausgabegibtesschon:=druckausgabeexistiertbereits;IF eingangsbildschirmok
+THEN IF listederdruckausgabengezeigtTHEN nummerderdruckausgabesetzen(
+nummerderdruckausgabe);druckausgabegibtesschon:=druckausgabeexistiertbereits
+FI ;getform(int(nummerderdruckausgabe));openformular(int(
+nummerderdruckausgabe));init(erfassungsfeld);angegebenedruckausgabebearbeiten
+ELSE fehlerbehandlung1;rueckschrittenachproc(1)FI .eingangsbildschirmok:IF
+listederdruckausgabengezeigtTHEN nureinedruckausgabeangekreuztELSE
+nummerinrichtigengrenzen(nummerderdruckausgabe)FI .fehlerbehandlung1:IF
+listederdruckausgabengezeigtTHEN meldeauffaellig(aktuellemaske,
+meldungalternative)ELSE meldeauffaellig(aktuellemaske,meldungfalschenummer)
+FI .angegebenedruckausgabebearbeiten:IF existenzderdruckausgabenoetigTHEN IF
+zuwas=druckdefinitionTHEN #wasweiterersetztdr16.12.87#
+bearbeitungsbildschirmausgeben(PROC wasweiter);ELIF zuwas=selektionAND
+getobjektklasse(leitobjekt)=niltextTHEN meldeauffaellig(aktuellemaske,
+meldungkeinleitobjekt);rueckschrittenachproc(1)ELSE saveupdateposition(dnrida
+);bearbeitungsbildschirmausgeben(PROC wasweiter);FI ELSE fehlerbehandlung2;
+rueckschrittenachproc(1)FI .existenzderdruckausgabenoetig:(
+druckausgabegibtesschonAND NOT neuedruckausgabe)OR (NOT
+druckausgabegibtesschonAND neuedruckausgabe).fehlerbehandlung2:IF NOT
+druckausgabegibtesschonAND NOT neuedruckausgabeTHEN meldeauffaellig(
+aktuellemaske,meldungdgibtesnicht);forget(filenameform+text(getactivformular)
+,quiet);forget(filenamedata+text(getactivformular),quiet)ELIF
+druckausgabegibtesschonAND neuedruckausgabeTHEN meldeauffaellig(aktuellemaske
+,meldungdgibtesschon)FI ;.END PROC eingangsbildschirmueberpruefen;BOOL PROC
+druckausgabeexistiertbereits:#putkeypart(niltext);putdatapart(niltext);##
+vorläufig14.03.88#inittupel(dnrida);putwert(fnridanummer,
+nummerderdruckausgabe);search(dnrida,TRUE );dbstatus=okEND PROC
+druckausgabeexistiertbereits;PROC bearbeitungsbildschirmausgeben(PROC
+wasweiter):programmname:=maskentiteleingang[zuwas]+maskenzusatz+
+nummerderdruckausgabe;standardkopfmaskeaktualisieren(programmname);
+bearbeitungsmaskeausgeben;eventuellmeldungausgeben;wasweiter.
+bearbeitungsmaskeausgeben:initmaske(maske,bearbmaske[zuwas]);
+setzeaktuellemaske(maske);fnrletztesausgabefeld:=letztesmaskenfeld[zuwas];
+show(aktuellemaske);loeschfeldverdecken;getform(int(nummerderdruckausgabe));
+openformular(int(nummerderdruckausgabe)).END PROC
+bearbeitungsbildschirmausgeben;PROC zugriffsregelueberpruefen:IF
+erlaubteregeleingabeTHEN standardkopfmaskeaktualisieren(programmname);IF
+druckausgabelistenauswahlTHEN initmaske(maske,bearbmaske[zuwas]);
+setzeaktuellemaske(maske);show(aktuellemaske);loeschfeldverdeckenFI ;IF
+existenzderregelnotwendigTHEN fehlerbehandlung;rueckschrittenachproc(1)ELSE
+maskenwertezeigenundbearbeiten;FI ELSE #dr02.05.88#IF falscheregelTHEN
+meldeauffaellig(aktuellemaske,meldungfalscheregel)ELIF
+esexistiertkeineobjektklasseTHEN meldeauffaellig(aktuellemaske,
+meldungkeineobjektklasse)FI ;startpos:=fnrerstesausgabefeld;
+rueckschrittenachproc(1)FI .existenzderregelnotwendig:(neuezugriffsregelAND
+zugriffsregelexistiertschon)OR (NOT neuezugriffsregelAND NOT
+zugriffsregelexistiertschon).zugriffsregelexistiertschon:objklasse:=int(
+erfassungsfeld[zobjklasse]);regnr:=int(erfassungsfeld[zregelnr]);regelnr:=
+getregelnummer(objklasse,regnr);zugriffsregelgibtesbereits:=regelnr>0;regelnr
+>0.fehlerbehandlung:IF neuezugriffsregelAND zugriffsregelexistiertschonTHEN
+meldeauffaellig(aktuellemaske,meldungrgibtesschon)ELSE meldeauffaellig(
+aktuellemaske,meldungrgibtesnicht)FI .falscheregel:erfassungsfeld[zobjklasse]
+=niltextCOR erfassungsfeld[zregelnr]=niltext.esexistiertkeineobjektklasse:
+erfassungsfeld[zobjklasse]<>niltext#dr02.05.88#CAND int(erfassungsfeld[
+zobjklasse])<=10CAND getobjektklasse(int(erfassungsfeld[zobjklasse]))=niltext
+.END PROC zugriffsregelueberpruefen;PROC erneuteeingabeerforderlich:
+allefeldersperren(FALSE );feldschutzfuerbearbeitungfestlegen(zuwas);startpos
+:=fnrerstesausgabefeld;put(maske,erfassungsfeld,letztesmaskenfeld[zuwas]);
+druckausgabeeinlesen(zuwas)END PROC erneuteeingabeerforderlich;PROC
+angabenabspeichern(INT CONST was):INT VAR lvf;TEXT VAR txt;fehlseite:=1;
+fehlzeile:=1;fehlmeld:=0;SELECT wasOF CASE nameundtyp:nameundtypspeichern
+CASE objektklassen:objektklassenspeichernCASE zugriffsregeln:
+zugriffsregelspeichernCASE selektion:selektionspeichernCASE druckformular:
+druckformularspeichernCASE druckvariablen:druckvariablespeichernCASE
+druckwerte:druckwertespeichernEND SELECT ;meldungstext:=("Die Angaben "+
+meldungseinschub+" wurden gespeichert ");eventuellmeldungbeilistenabarbeitung
+#dr01.08.88#.nameundtypspeichern:meldeauffaellig(aktuellemaske,
+meldungplausipruefung);IF nameundtypok(erfassungsfeld,fnummer)THEN
+putformularinfo(erfassungsfeld[ntname],int(erfassungsfeld[ntnummer]),FALSE );
+nameundtypindbeintragen;sichernundhilfsfilesloeschenELSE
+meldefehlernameundtyp;startpos:=fnummer;rueckschrittenachproc(1);LEAVE
+angabenabspeichernFI .nameundtypindbeintragen:putwert(fnridanummer,
+erfassungsfeld[ntnummer]);putwert(fnridaname,erfassungsfeld[ntname]);IF
+neuedruckausgabeTHEN insert(dnrida)ELSE restoreupdateposition(dnrida);update(
+dnrida)FI .objektklassenspeichern:meldeauffaellig(aktuellemaske,
+meldungplausipruefung);IF objektklassenzugelassenTHEN FOR lvfFROM 1UPTO
+maxobjektklassenREP putobjektklasse(lvf,erfassungsfeld[lvf+1])PER ;
+sichernundhilfsfilesloeschenELSE meldeauffaellig(aktuellemaske,
+meldungfalschesobjekt);startpos:=lvf+1;rueckschrittenachproc(1);LEAVE
+angabenabspeichernFI .objektklassenzugelassen:IF
+leitobjektklasseleeroderungueltigTHEN lvf:=1;LEAVE objektklassenzugelassen
+WITH FALSE FI ;stopbeifalschemnamen(FALSE );FOR lvfFROM 1UPTO
+maxobjektklassenREP IF erfassungsfeld[lvf+1]<>niltextTHEN IF
+objektklassekeindateinameTHEN LEAVE objektklassenzugelassenWITH FALSE FI FI
+PER ;stopbeifalschemnamen(TRUE );TRUE .leitobjektklasseleeroderungueltig:
+erfassungsfeld[oleitobjekt]=niltextCOR (pos(leitobjektschueler,erfassungsfeld
+[oleitobjekt])=0AND pos(leitobjektlehrer,erfassungsfeld[oleitobjekt])=0).
+objektklassekeindateiname:dateinr(erfassungsfeld[lvf+1])=0.
+zugriffsregelspeichern:zugriffsregelnindateieintragen(leseanfangindatei,
+erfassungsfeld);meldeauffaellig(aktuellemaske,meldungplausipruefung);IF
+zugriffsregelnok(fehlseite,fehlzeile,fehlmeld)THEN zugriffsregelnabspeichern;
+sichernundhilfsfilesloeschenELSE stopbeifalschemnamen(TRUE );datenseite:=
+fehlseite;zugriffezeigenvorbereiten(datenseite);put(maske,erfassungsfeld,
+letztesmaskenfeld[zuwas]);meldeauffaellig(aktuellemaske,fehlmeld);startpos:=
+fehlzeile+((fehlzeile+2)*2);rueckschrittenachproc(1);LEAVE angabenabspeichern
+FI .zugriffsregelnabspeichern:wertesetzenbeineuerzugriffsregel;
+erstenvergleichsuchenundindexsetzen;zugriffsregelundvergleichswertespeichern.
+wertesetzenbeineuerzugriffsregel:IF neuezugriffsregelTHEN regelnr:=
+getanzahlregeln+1;zrobjekt:=objklasse;zrregel:=regnr;ELSE FI .
+erstenvergleichsuchenundindexsetzen:pattern:=vergleichtrenner;toline(f,1);
+readrecord(f,zeile);IF pos(zeile,pattern)=0THEN down(f,pattern);readrecord(f,
+zeile);FI ;zrindex:=int(subtext(zeile,1,pos(zeile,anzahltrenner)-1)).
+zugriffsregelundvergleichswertespeichern:putzugriffsregel(regelnr,zrobjekt,
+zrregel,zrindex,0);WHILE pos(zeile,vergleichtrenner)>0REP putvergleichswert(
+regelnr,subtext(zeile,pos(zeile,vergleichtrenner)+tl));toline(f,lineno(f)+1);
+readrecord(f,zeile);PER .selektionspeichern:selektionenindateieintragen(
+leseanfangindatei,erfassungsfeld);meldeauffaellig(aktuellemaske,
+meldungplausipruefung);IF selektionswerteok(dnr,fehlseite,fehlzeile,fehlmeld)
+THEN selektionenabspeichern;sichernundhilfsfilesloeschenELSE datenseite:=
+fehlseite;selektionenzeigenvorbereiten(datenseite);put(maske,erfassungsfeld,
+letztesmaskenfeld[zuwas]);meldeauffaellig(aktuellemaske,fehlmeld);startpos:=(
+fehlzeile*2)+1;rueckschrittenachproc(1);LEAVE angabenabspeichernFI .
+selektionenabspeichern:putanzahlselfelder(0);FOR lvfFROM 1UPTO anzattr(dnr)
+REP toline(f,lvf);readrecord(f,zeile);sfeldname:=subtext(zeile,1,pos(zeile,
+zeilennrtrenner)-1);svergleichswert:=subtext(zeile,pos(zeile,vergleichtrenner
+)+tl);putselektion(sfeldname,svergleichswert)PER .druckformularspeichern:
+standardmeldung(meldungplausipruefung,niltext);forget(getformtextname,quiet);
+copy(filenameformtp,getformtextname);IF fehlerinformularTHEN formfehlermelden
+;rueckschrittenachproc(1);LEAVE angabenabspeichernELSE forget(filenameformtp,
+quiet);sichernundhilfsfilesloeschenFI .druckvariablespeichern:meldeauffaellig
+(aktuellemaske,meldungplausipruefung);IF fehlerindruckvariable(erfassungsfeld
+[dvdefinition])THEN rueckschrittenachproc(1);LEAVE angabenabspeichernELSE
+drvdruckvar:=ausdruckwardruckvariable;putsteuercode(int(erfassungsfeld[
+dvnummer]),erfassungsfeld[dvdefinition],int(erfassungsfeld[dvlaenge]),
+erfassungsfeld[dvrechtsbuendig]<>niltext,drvdruckvar);
+sichernundhilfsfilesloeschenFI .druckwertespeichern:meldeauffaellig(
+aktuellemaske,meldungplausipruefung);IF druckwerteokTHEN startpos:=
+fnrerstesausgabefeld;putdruckaufbereitung(erfassungsfeld[dwschriftart],real(
+erfassungsfeld[dwlinkerrandlinks]),real(erfassungsfeld[dwlinkerrandoben]),int
+(erfassungsfeld[dwzeilenproseite]),real(erfassungsfeld[dwzeichenprozeile]));
+sichernundhilfsfilesloeschenELSE IF lvf=0THEN meldeauffaellig(aktuellemaske,
+meldungfalscheeingabe);ELSE meldeauffaellig(aktuellemaske,
+meldungkeinefonttabelle);FI ;rueckschrittenachproc(1);LEAVE
+angabenabspeichernFI .druckwerteok:lvf:=0;fonttabelleeingestelltCAND
+fontexistiertauchCAND linkerrandrichtigCAND rechterrandrichtig.
+linkerrandrichtig:startpos:=dwlinkerrandlinks;real(erfassungsfeld[
+dwlinkerrandlinks])>=minanfangCAND real(erfassungsfeld[dwlinkerrandlinks])<=
+maxanfang.rechterrandrichtig:startpos:=dwlinkerrandoben;real(erfassungsfeld[
+dwlinkerrandoben])>=minanfangCAND real(erfassungsfeld[dwlinkerrandoben])<=
+maxanfang.fonttabelleeingestellt:startpos:=dwschriftart;disablestop;txt:=font
+(1);IF iserrorTHEN clearerror;lvf:=1FI ;enablestop;lvf=0.fontexistiertauch:
+startpos:=dwschriftart;font(erfassungsfeld[dwschriftart])>0.END PROC
+angabenabspeichern;PROC maskenwertezeigenundbearbeiten:IF
+loeschenderdruckausgabeTHEN allefeldersperren(TRUE );
+maskenwerteholenundausgeben(zuwas);druckausgabeloeschfrageELSE
+allefeldersperren(FALSE );maskenwerteholenundausgeben(zuwas);
+druckausgabeeinlesen(zuwas)FI ;END PROC maskenwertezeigenundbearbeiten;PROC
+maskenwerteholenundausgeben(INT CONST wozu):LET maxanzobjektklassen=10;INT
+VAR feld,nrindex,lvf,lvi;TEXT VAR z,datname;datenseite:=1;SELECT wozuOF CASE
+nameundtyp:nameundtypzeigenCASE objektklassen:objektklassenzeigenCASE
+zugriffsregeln:zugriffsregelzeigenCASE selektion:selektionzeigenCASE
+druckformular:druckformularzeigenCASE druckvariablen:druckvariablezeigenCASE
+druckwerte:druckwertezeigenEND SELECT ;IF wozu<>druckformularTHEN put(maske,
+erfassungsfeld,letztesmaskenfeld[zuwas]);FI .nameundtypzeigen:BOOL VAR
+ausgabelistenweise;erfassungsfeld[ntnummer]:=nummerderdruckausgabe;IF NOT
+neuedruckausgabeTHEN ausgabelistenweise:=FALSE ;getformularinfo(
+erfassungsfeld[ntname],nrdruckausgabe,ausgabelistenweise);FI ;IF
+neuedruckausgabeTHEN protect(maske,fnrerstesausgabefeld,TRUE )FI ;startpos:=
+fnrerstesausgabefeld+1;.objektklassenzeigen:FOR lvfFROM 1UPTO
+maxanzobjektklassenREP erfassungsfeld[lvf+1]:=getobjektklasse(lvf)PER ;.
+zugriffsregelzeigen:objektklasseholen;moeglichezugriffezeigen;
+anzahlderdateizeilen:=lines(f);IF zugriffsregelgibtesbereitsTHEN
+gespeichertezugriffezeigen;FI ;zugriffezeigenvorbereiten(datenseite);startpos
+:=zerstervergleich.moeglichezugriffezeigen:primaerzugriffholen;IF firstindex>
+0THEN sekundaerzugriffeholen;FI ;.primaerzugriffholen:forget(filenamezug,
+quiet);f:=sequentialfile(modify,filenamezug);datname:=erfassungsfeld[
+zobjklname];dnr:=dateinr(datname);anzfelder:=anzkey(dnr);zeilennr:=1;nrindex
+:=0;FOR lvfFROM 1UPTO anzfelderREP feld:=dnr+lvf;zeileindateischreiben;PER ;.
+sekundaerzugriffeholen:FOR lviFROM firstindexUPTO firstfree-1REP IF dateinr(
+primdatid(lvi))=dnrTHEN anzahlderfelderbestimmen;nrindexINCR 1;FOR lvfFROM 1
+UPTO anzfelderREP feld:=dnr+int(subtext(z,1,pos(z,semikolon)-1));z:=subtext(z
+,pos(z,semikolon)+1);zeileindateischreiben;PER ;FI ;PER ;.
+anzahlderfelderbestimmen:z:=zugriff(lvi);INT VAR posi;anzfelder:=0;posi:=pos(
+z,semikolon);WHILE posi>0REP anzfelderINCR 1;posi:=pos(z,semikolon,posi+1)
+PER ;.zeileindateischreiben:zeilezusammensetzen;toline(f,zeilennr);
+insertrecord(f);writerecord(f,zeile);zeilennrINCR 1;.zeilezusammensetzen:IF
+lvf=1THEN zeile:=text(nrindex)+anzahltrenner;zeileCAT text(anzfelder);zeile
+CAT namentrenner;ELSE zeile:=namentrennerFI ;zeileCAT name(feld);zeileCAT
+zeilennrtrenner;zeileCAT text(zeilennr);.gespeichertezugriffezeigen:
+gespeichertezugriffeholen;gespeichertezugriffeindateieintragen.
+gespeichertezugriffeholen:IF druckenderdefinitionTHEN regelnr:=
+benoetigteregelFI ;getzugriffsregel(regelnr,zrobjekt,zrregel,zrindex,zranzahl
+);.gespeichertezugriffeindateieintragen:pattern:=text(zrindex)+anzahltrenner;
+toline(f,1);readrecord(f,zeile);IF pos(zeile,pattern)>0THEN zugriffeeintragen
+ELSE down(f,pattern);IF patternfoundTHEN zugriffeeintragenFI FI .
+zugriffeeintragen:zeilennr:=lineno(f);FOR lvfFROM 1UPTO zranzahlREP toline(f,
+zeilennr);readrecord(f,zeile);zeileCAT vergleichtrenner;zeileCAT
+getvergleichswert(regelnr,lvf);writerecord(f,zeile);zeilennrINCR 1;PER .
+selektionzeigen:forget(filenamesel,quiet);f:=sequentialfile(modify,
+filenamesel);dnr:=dateinr(getobjektklasse(leitobjekt));
+feldnamenindateischreiben;anzahlderdateizeilen:=lines(f);
+gespeicherteselektionenindateischreiben;selektionenzeigenvorbereiten(
+datenseite);startpos:=serstervergleich.feldnamenindateischreiben:FOR lvfFROM
+1UPTO anzattr(dnr)REP toline(f,lvf);insertrecord(f);zeile:=name(dnr+lvf)+
+zeilennrtrenner+text(lvf)+vergleichtrenner;writerecord(f,zeile);PER .
+gespeicherteselektionenindateischreiben:IF getanzahlselfelder<>0THEN FOR lvf
+FROM 1UPTO getanzahlselfelderREP toline(f,lvf);readrecord(f,zeile);
+getselektion(lvf,sfeldname,svergleichswert);zeileCAT svergleichswert;
+writerecord(f,zeile);PER FI .druckformularzeigen:filenameformtp:=wert(
+fnridanummer)+trenner+wert(fnridaname);forget(filenameformtp,quiet);IF exists
+(getformtextname)THEN copy(getformtextname,filenameformtp)FI ;startpos:=
+fnrerstesausgabefeld.druckvariablezeigen:IF druckvariablegibtesbereitsTHEN
+protect(maske,dvnummer,TRUE );IF drvlaenge=0THEN erfassungsfeld[dvlaenge]:=
+niltextELSE erfassungsfeld[dvlaenge]:=text(drvlaenge)FI ;IF drvrechtsbuendig
+THEN erfassungsfeld[dvrechtsbuendig]:=ankreuzzeichenELSE erfassungsfeld[
+dvrechtsbuendig]:=niltextFI FI ;startpos:=dvdefinition.druckwertezeigen:REAL
+VAR linksoben,linkslinks,spalten;INT VAR zeilen;zurueck;getdruckaufbereitung(
+erfassungsfeld[dwschriftart],linkslinks,linksoben,zeilen,spalten);
+erfassungsfeld[dwlinkerrandlinks]:=text(linkslinks);erfassungsfeld[
+dwlinkerrandoben]:=text(linksoben);erfassungsfeld[dwzeilenproseite]:=text(
+zeilen);erfassungsfeld[dwzeichenprozeile]:=subtext(text(spalten),1,pos(text(
+spalten),".")-1);.END PROC maskenwerteholenundausgeben;PROC objektklasseholen
+:erfassungsfeld[zobjklname]:=getobjektklasse(int(erfassungsfeld[zobjklasse]))
+;END PROC objektklasseholen;PROC selektionenzeigenvorbereiten(INT CONST
+seitennr):bildschirmausgabenselektionsammeln(seitennr);
+selektionsfeldersperren;freizeilenselektionloeschenEND PROC
+selektionenzeigenvorbereiten;PROC bildschirmausgabenselektionsammeln(INT
+CONST seitennr):INT VAR lvf;merkzeile:=maxselektionen+1;leseanfangindatei:=(
+seitennr-1)*maxselektionen+1;FOR lvfFROM 1UPTO maxselektionenREP IF lvf+
+leseanfangindatei-1<=anzahlderdateizeilenTHEN toline(f,lvf+leseanfangindatei-
+1);readrecord(f,zeile);erfassungsfeld[sersteselektion+(lvf-1)*2]:=subtext(
+zeile,1,pos(zeile,zeilennrtrenner)-1);IF pos(zeile,vergleichtrenner)>0THEN
+erfassungsfeld[serstervergleich+(lvf-1)*2]:=subtext(zeile,pos(zeile,
+vergleichtrenner)+tl);FI ;ELSE merkzeile:=lvf;LEAVE
+bildschirmausgabenselektionsammelnFI PER ;END PROC
+bildschirmausgabenselektionsammeln;PROC selektionsfeldersperren:INT VAR lvf;
+allefeldersperren(TRUE );FOR lvfFROM 1UPTO maxselektionenREP protect(maske,
+serstervergleich+(lvf-1)*2,FALSE )PER END PROC selektionsfeldersperren;PROC
+freizeilenselektionloeschen:INT VAR lv;FOR lvFROM merkzeileUPTO
+maxselektionenREP erfassungsfeld[sersteselektion+(lv-1)*2]:=niltext;
+erfassungsfeld[serstervergleich+(lv-1)*2]:=niltext;protect(maske,
+serstervergleich+(lv-1)*2,TRUE )PER END PROC freizeilenselektionloeschen;
+PROC zugriffezeigenvorbereiten(INT CONST seitennr):
+bildschirmausgabenzugriffsammeln(seitennr);zugriffsfeldersperren;
+freizeilenzugriffloeschenEND PROC zugriffezeigenvorbereiten;PROC
+bildschirmausgabenzugriffsammeln(INT CONST seitennr):INT VAR lvf;merkzeile:=
+maxzugriffe+1;leseanfangindatei:=(seitennr-1)*maxzugriffe+1;FOR lvfFROM 1
+UPTO maxzugriffeREP IF lvf+leseanfangindatei-1<=anzahlderdateizeilenTHEN
+toline(f,lvf+leseanfangindatei-1);readrecord(f,zeile);erfassungsfeld[znummer+
+(lvf-1)*3]:=subtext(zeile,1,pos(zeile,anzahltrenner)-1);erfassungsfeld[
+zersterzugriff+(lvf-1)*3]:=subtext(zeile,pos(zeile,namentrenner)+tl,pos(zeile
+,zeilennrtrenner)-1);IF pos(zeile,vergleichtrenner)>0THEN erfassungsfeld[
+zerstervergleich+(lvf-1)*3]:=subtext(zeile,pos(zeile,vergleichtrenner)+tl);
+ELSE erfassungsfeld[zerstervergleich+(lvf-1)*3]:=niltextFI ;ELSE merkzeile:=
+lvf;LEAVE bildschirmausgabenzugriffsammelnFI PER ;.END PROC
+bildschirmausgabenzugriffsammeln;PROC zugriffsfeldersperren:INT VAR lvf;
+allefeldersperren(TRUE );FOR lvfFROM 1UPTO maxzugriffeREP protect(maske,
+zerstervergleich+(lvf-1)*3,FALSE )PER END PROC zugriffsfeldersperren;PROC
+freizeilenzugriffloeschen:INT VAR lv;FOR lvFROM merkzeileUPTO maxzugriffeREP
+erfassungsfeld[znummer+(lv-1)*3]:=niltext;erfassungsfeld[zersterzugriff+(lv-1
+)*3]:=niltext;erfassungsfeld[zerstervergleich+(lv-1)*3]:=niltext;protect(
+maske,zerstervergleich+(lv-1)*3,TRUE )PER END PROC freizeilenzugriffloeschen;
+PROC datenseiteraufoderrunter(INT CONST wie):IF wie=vorwaertsTHEN datenseite
+INCR 1ELSE datenseiteDECR 1FI ;END PROC datenseiteraufoderrunter;PROC
+datenseiterunteroderrauf(INT CONST wie):IF wie=vorwaertsTHEN datenseiteDECR 1
+ELSE datenseiteINCR 1FI END PROC datenseiterunteroderrauf;PROC
+angabenloeschen(INT CONST was):SELECT wasOF CASE nameundtyp:
+nameundtyploeschenCASE zugriffsregeln:zugriffsregelloeschenCASE
+druckvariablen:druckvariableloeschenEND SELECT .nameundtyploeschen:delform(
+getactivformular);forget(getformtextname,quiet);forget(filenamedata+text(
+getactivformular),quiet);delete(dnrida).zugriffsregelloeschen:deleteregel(
+regelnr);sichernundhilfsfilesloeschen;.druckvariableloeschen:putsteuercode(
+int(erfassungsfeld[dvnummer]),niltext,0,FALSE ,FALSE );
+sichernundhilfsfilesloeschen.END PROC angabenloeschen;PROC allefeldersperren(
+BOOL CONST freigabe):INT VAR lv;FOR lvFROM fnrerstesausgabefeldUPTO
+letztesmaskenfeld[zuwas]+5REP protect(maske,lv,freigabe)PER ;protect(maske,
+letztesmaskenfeld[zuwas]+1,TRUE );startpos:=fnrerstesausgabefeld;END PROC
+allefeldersperren;PROC changeinfile(TEXT CONST fname,vorher,nachher):INT VAR
+lv;f:=sequentialfile(modify,fname);FOR lvFROM 1UPTO lines(f)REP toline(f,lv);
+readrecord(f,zeile);changeall(zeile,vorher,nachher);writerecord(f,zeile)PER ;
+toline(f,1)END PROC changeinfile;PROC druckdefinitiondrucken:
+druckenderdefinition:=TRUE ;zugriffsregelgibtesbereits:=TRUE ;meldeauffaellig
+(aktuellemaske,meldungsammelndruckdef);druckdefinitionzusammenstellen(PROC (
+INT CONST )maskenwerteholenundausgeben,erfassungsfeld);meldeauffaellig(
+aktuellemaske,meldungdruckendruckdef);sichernundhilfsfilesloeschen;
+nummerderdruckausgabe:=niltext;druckenderdefinition:=FALSE ;
+zugriffsregelgibtesbereits:=FALSE ;rueckschrittevorproc(1)#dr16.12.87#END
+PROC druckdefinitiondrucken;BOOL PROC erlaubteregeleingabe:LET maxeingabe=10;
+(nummernummerisch(erfassungsfeld[zobjklasse])CAND int(erfassungsfeld[
+zobjklasse])>1CAND int(erfassungsfeld[zobjklasse])<=maxeingabeCAND
+getobjektklasse(int(erfassungsfeld[zobjklasse]))<>niltext)CAND (
+nummernummerisch(erfassungsfeld[zregelnr])CAND int(erfassungsfeld[zregelnr])>
+0CAND int(erfassungsfeld[zregelnr])<=maxeingabe)END PROC erlaubteregeleingabe
+;BOOL PROC erlaubtevariableneingabe:LET maxeingabe=100;(nummernummerisch(
+erfassungsfeld[dvnummer])CAND int(erfassungsfeld[dvnummer])>0CAND int(
+erfassungsfeld[dvnummer])<=maxeingabe)END PROC erlaubtevariableneingabe;PROC
+eventuellmeldungausgeben:IF meldungstext<>niltextTHEN meldeauffaellig(
+aktuellemaske,meldungstext);meldungstext:=niltext;FI END PROC
+eventuellmeldungausgeben;PROC eventuellmeldungbeilistenabarbeitung:IF
+druckausgabelistenauswahlTHEN meldeauffaellig(aktuellemaske,meldungstext);
+kurzepause;meldungstext:=niltext;enter(1)ELSE IF listederdruckausgabengezeigt
+CAND (zuwas=zugriffsregelnOR zuwas=druckvariablen)CAND NOT (
+druckausgabelistenauswahl)THEN zurueckzurbearbeitung(2)ELSE
+rueckschrittevorproc(2)FI ;FI .kurzepause:pause(10).END PROC
+eventuellmeldungbeilistenabarbeitung;PROC feldschutzfestlegen(INT CONST abwo)
+:INT VAR lv;protect(maske,1,TRUE );FOR lvFROM abwoUPTO letztesmaskenfeld[
+zuwas]REP protect(maske,lv,TRUE )PER END PROC feldschutzfestlegen;PROC
+feldschutzfuerbearbeitungfestlegen(INT CONST wozu):protect(maske,1,TRUE );
+SELECT wozuOF CASE zugriffsregeln:feldschutzfestlegen(fnrerstesausgabefeld+2)
+CASE druckvariablen:feldschutzfestlegen(fnrerstesausgabefeld+1)OTHERWISE :
+allefeldersperren(FALSE )END SELECT ;END PROC
+feldschutzfuerbearbeitungfestlegen;PROC loeschfeldverdecken:LET rahmenzeichen
+="=";put(aktuellemaske,rahmenzeichen,letztesmaskenfeld[zuwas]+1);END PROC
+loeschfeldverdecken;TEXT PROC meldungseinschub:TEXT VAR t;SELECT zuwasOF
+CASE zugriffsregeln:t:="zur Regel k"+compress(erfassungsfeld[zobjklasse])+"r"
++compress(erfassungsfeld[zregelnr])CASE druckvariablen:t:=
+"zur Druckvariablen "+erfassungsfeld[dvnummer]OTHERWISE :t:=
+"zur Druckausgabe "+text(getactivformular)END SELECT ;tEND PROC
+meldungseinschub;PROC standardfelderfuellen:INT VAR lv;FOR lvFROM 1UPTO
+letztesmaskenfeld[zuwas]REP standardmaskenfeld(erfassungsfeld[lv],(lv))PER
+END PROC standardfelderfuellen;END PACKET ispidadefinieren;
+
diff --git a/app/schulis/2.2.1/src/6.ida.druck b/app/schulis/2.2.1/src/6.ida.druck
new file mode 100644
index 0000000..d24c0cd
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.ida.druck
@@ -0,0 +1,261 @@
+PACKET idadruckDEFINES listendruck,ausdruckauswerten,bschirm,drucker,
+namederdruckausgabe,namederdruckausgabeohne,druckausgabeausgeben,ruecksprung,
+zurueck,postext,seitenweise:LET linkeklammer="<",rechteklammer=">",
+platzhalter="�",linefeed=" ",trenner=" ",kzkosmetik="#",kzseitenzahl="%",
+ddrucker=1,dbschirm=2,mlddrucken=58,mldaufb=190;TEXT VAR filename:=
+"ISP-Liste";INT CONST drucker:=ddrucker,bschirm:=dbschirm;FILE VAR ausgfile;
+INT VAR dbauswertung,anzzeilen,zeilenzaehler:=0,fusszeilen:=0,kopfzeilen:=0,
+aktuelleseite:=0,aktuellerds:=0,zeilenlaenge,verbund;BOOL VAR tupelbearbeitet
+,isppageform:=FALSE ;TEXT VAR restderletztenzeile:="";TEXT VAR schriftart:=""
+,kopfbereich:="",fussbereich:="",kosmetikbereich:="zzzz";REAL VAR links,oben;
+#nurtest!!!!!!PROC standardmeldung(INT CONST mldaufb,TEXT CONST t):fehler(
+"MELDUNG: "+text(mldaufb)+" "+t)ENDPROC standardmeldung;PROC editiere(TEXT
+CONST fname,BOOL CONST f):edit(fname)ENDPROC editiere;PROC enter(INT CONST i)
+:ENDPROC enter;#PROC seitenweise(BOOL CONST jn):isppageform:=jnENDPROC
+seitenweise;BOOL PROC seitenweise:isppageformENDPROC seitenweise;TEXT PROC
+rechtscompress(TEXT CONST zeile):TEXT VAR z:=zeile;INT VAR p:=length(zeile);
+WHILE p>0CAND (zSUB p)=trennerREP pDECR 1PER ;z:=text(z,p);zENDPROC
+rechtscompress;INT PROC bestimmevorhandeneblanks(TEXT CONST zeile):INT VAR
+vorhandeneblanks:=0,i;FOR iFROM 1UPTO length(zeile)REP IF (zeileSUB i)=
+trennerTHEN vorhandeneblanksINCR 1FI UNTIL (zeileSUB i)<>trennerPER ;
+vorhandeneblanksENDPROC bestimmevorhandeneblanks;TEXT PROC
+textmitfuehrendenblanks(TEXT CONST z,INT CONST anzblanks):INT VAR
+vorhandeneblanks:=0;TEXT VAR zeile:=z;vorhandeneblanks:=
+bestimmevorhandeneblanks(zeile);IF vorhandeneblanks>anzblanksTHEN
+zeilekuerzenELSE mitblanksauffuellenFI ;zeile.zeilekuerzen:zeile:=subtext(
+zeile,vorhandeneblanks-anzblanks).mitblanksauffuellen:zeile:=(anzblanks-
+vorhandeneblanks)*trenner+zeile.ENDPROC textmitfuehrendenblanks;TEXT PROC
+aktfilename:IF aktuellerds=0THEN filenameELSE filename+"."+text(aktuellerds)
+FI ENDPROC aktfilename;PROC schreibebereich(TEXT CONST bereich,BOOL CONST
+kopf):INT VAR von:=0,bis;TEXT VAR zeile:="";bis:=pos(bereich,linefeed);WHILE
+bis>0REP zeile:=subtext(bereich,von+1,bis-1);IF kopfTHEN changeall(zeile,
+kzseitenzahl,text(aktuelleseite));zeilenzaehlerINCR 1FI ;putline(ausgfile,
+zeile);von:=bis;bis:=pos(bereich,linefeed,von+1);PER ENDPROC schreibebereich;
+PROC schreibekopf:schreibebereich(kopfbereich,TRUE )ENDPROC schreibekopf;
+PROC schreibefuss:schreibebereich(fussbereich,FALSE )ENDPROC schreibefuss;
+PROC seitenvorschub:schreibefuss;IF filefastvollTHEN ausgabedateianlegenELSE
+putline(ausgfile,"#page#")FI ;zeilenzaehler:=0;aktuelleseiteINCR 1;
+schreibekopf.filefastvoll:lines(ausgfile)>=3000COR storage(old(aktfilename))>
+700.ENDPROC seitenvorschub;PROC pageeinfuegen:putline(ausgfile,"#page#");
+zeilenzaehler:=0;ENDPROC pageeinfuegen;PROC zeilenvorschubundfussdrucken:
+WHILE zeilenzaehler<anzzeilen-fusszeilenREP putline(ausgfile,"");
+zeilenzaehlerINCR 1PER ;schreibefussENDPROC zeilenvorschubundfussdrucken;
+PROC putlein(TEXT CONST zeile,BOOL CONST nurkosmetik):IF seitenweiseTHEN IF
+NOT nurkosmetikCAND zeilenzaehler=anzzeilen-fusszeilenTHEN seitenvorschubFI
+ELSE IF zeilenzaehler=anzzeilen-fusszeilen-kopfzeilenTHEN pageeinfuegenFI FI
+;putline(ausgfile,zeile);zeilenzaehlerINCR 1ENDPROC putlein;PROC putzeile(
+TEXT CONST zeile):TEXT VAR auszeile:="";BOOL CONST blocksatz:=(zeileSUB
+length(zeile))=trenner;INT VAR trennpos,linkerrand;IF length(
+restderletztenzeile)>0THEN auszeile:=restderletztenzeile;IF
+keintrennerzwischenzeilenTHEN auszeileCAT trennerFI FI ;auszeileCAT zeile;
+restderletztenzeile:="";IF length(auszeile)<=zeilenlaengeTHEN putlein(
+auszeile,FALSE )ELSE bestimmelinkenrand;WHILE length(auszeile)>zeilenlaenge
+REP trennpositionbestimmen;zeileausgebenundkürzen;PER ;IF length(auszeile)>0
+THEN IF blocksatzTHEN putlein(auszeile,FALSE )ELSE restderletztenzeile:=
+textmitfuehrendenblanks(auszeile,linkerrand)FI FI FI .
+keintrennerzwischenzeilen:(restderletztenzeileSUB length(restderletztenzeile)
+)<>trennerCAND (zeileSUB 1)<>trenner.bestimmelinkenrand:linkerrand:=
+bestimmevorhandeneblanks(auszeile);.trennpositionbestimmen:trennpos:=
+zeilenlaenge;WHILE trennpos>linkerrandCAND (auszeileSUB trennpos)<>trenner
+REP trennposDECR 1PER ;IF trennpos<=linkerrandTHEN trennpos:=max(zeilenlaenge
+,linkerrand+1);WHILE trennpos<=length(auszeile)CAND (auszeileSUB trennpos)<>
+trennerREP trennposINCR 1PER ;FI .zeileausgebenundkürzen:putlein(
+rechtscompress(text(auszeile,trennpos-1)),FALSE );auszeile:=compress(subtext(
+auszeile,trennpos+1));IF length(auszeile)>0THEN auszeile:=
+textmitfuehrendenblanks(auszeile,linkerrand)FI .ENDPROC putzeile;PROC
+nextergebnistupel:INT VAR dnr;qsucc(verbund,dnr);tupelbearbeitet:=FALSE ;
+verbund:=gettiefennr(verbund);IF dbstatus=endoffileCAND dbauswertung=
+ordernewstackTHEN auswertungfortsetzen;dbauswertung:=dbstatus;qsucc(verbund,
+dnr);verbund:=gettiefennr(verbund);FI ENDPROC nextergebnistupel;TEXT PROC
+sonderfunktion(TEXT CONST stcode):TEXT VAR t:=stcode,ausdruck:=stcode;IF (
+ausdruckSUB 1)=linkeklammerTHEN deletechar(ausdruck,1)FI ;IF (ausdruckSUB
+length(ausdruck))=rechteklammerTHEN deletechar(ausdruck,length(ausdruck))FI ;
+IF ausdruck="tagesdatum"THEN t:=dateELIF ausdruck="tag"THEN t:=day(date(date)
+)ELIF ausdruck="monat"THEN t:=month(date(date))ELIF ausdruck="jahr"THEN t:=
+year(date(date))ELIF ausdruck="zeit"THEN t:=timeofdayELIF ausdruck="tt"THEN t
+:=text(date,2)ELIF ausdruck="mm"THEN t:=subtext(date,4,5)ELIF ausdruck="jj"
+THEN t:=subtext(date,7)FI ;tENDPROC sonderfunktion;TEXT PROC
+aufbereitetezeile(TEXT CONST zeile,einfuegstellen):TEXT VAR auszeile:="",
+auswert:="",ausdruck:="";INT VAR p:=1,pp,ppalt:=1,ix,laenge;BOOL VAR rbuendig
+,druckvar;pp:=pos(zeile,platzhalter,ppalt);WHILE pp>0REP auszeileCAT subtext(
+zeile,ppalt,pp-1);ix:=decodezahl(einfuegstellen,p);IF ix>0THEN getsteuercode(
+ix,ausdruck,laenge,rbuendig,druckvar);IF druckvarTHEN auswert:=
+ausdruckauswerten(ausdruck);aufbereitenundschreiben;ELSE auswert:=
+sonderfunktion(ausdruck);aufbereitenundschreiben;FI FI ;ppalt:=pp+1;pp:=pos(
+zeile,platzhalter,ppalt);PER ;auszeileCAT subtext(zeile,ppalt);auszeile.
+aufbereitenundschreiben:IF laenge>0THEN IF length(auswert)>=laengeCOR NOT
+rbuendigTHEN auswert:=text(auswert,laenge)ELSE auswert:=((laenge-length(
+auswert))*" ")+auswertFI ;FI ;auszeileCAT auswert.ENDPROC aufbereitetezeile;
+PROC druckezeile(TEXT CONST zeile,einfuegstellen):putzeile(aufbereitetezeile(
+zeile,einfuegstellen))ENDPROC druckezeile;PROC druckeblock(INT CONST blocknr)
+:INT VAR aktzeile:=1,pb,pz,nextblock,nextblockvorzeile;REP IF aktzeile=1CAND
+verbund=blocknrTHEN tupelbearbeitet:=TRUE FI ;pb:=1;pz:=1;bestimmeunterblock;
+WHILE aktzeile<=getzeilenanzahl(blocknr)COR aktzeile=nextblockvorzeileREP IF
+aktzeile=nextblockvorzeileTHEN IF verbund<nextblockCAND tupelbearbeitetTHEN
+nextergebnistupelFI ;IF verbund=nextblockTHEN druckeblock(nextblock);FI ;
+bestimmeunterblock;ELSE IF NOT (seitenweiseCAND innerhalbkosmetikbereich)
+THEN druckezeile(getzeile(blocknr,aktzeile),geteinfuegstellen(blocknr,
+aktzeile));IF innerhalbkosmetikbereichTHEN zeilenzaehlerDECR 1FI FI ;aktzeile
+INCR 1;FI ;PER ;aktzeile:=1;IF tupelbearbeitetTHEN nextergebnistupel;IF
+verbund<>blocknrTHEN LEAVE druckeblockFI ELIF verbund<>blocknrTHEN LEAVE
+druckeblockFI UNTIL blocknr=0PER .innerhalbkosmetikbereich:(blocknr=0)CAND ((
+aktzeile>=code(kosmetikbereichSUB 1)CAND aktzeile<=code(kosmetikbereichSUB 2)
+)COR (aktzeile>=code(kosmetikbereichSUB 3)CAND aktzeile<=code(kosmetikbereich
+SUB 4))).bestimmeunterblock:nextblock:=decodezahl(getunterbloecke(blocknr),pb
+);nextblockvorzeile:=decodezahl(getvorzeilennr(blocknr),pz);.ENDPROC
+druckeblock;PROC listendruck(INT CONST nr):listendruck(nr,bschirm)ENDPROC
+listendruck;PROC ausgabedateianlegen:aktuellerdsINCR 1;forget(aktfilename,
+quiet);ausgfile:=sequentialfile(output,aktfilename);putlein(schrifttyp,TRUE )
+;putlein(startanweisung,TRUE );zeilenzaehler:=0.schrifttyp:IF schriftart=""
+THEN ""ELSE "#type ("""+schriftart+""")#"FI .startanweisung:"#start("+text(
+links)+","+text(oben)+")# ".ENDPROC ausgabedateianlegen;PROC
+headundbottommerken:#block(0)nachheadundbottomuntersuchen#INT VAR aktzeile:=1
+,p;TEXT VAR ausdruck:="",zeile:="";kopfzeilen:=0;fusszeilen:=0;kopfbereich:=
+"";fussbereich:="";kosmetikbereich:="zzzz";WHILE aktzeile<=getzeilenanzahl(0)
+REP zeile:=getzeile(0,aktzeile);aktzeileINCR 1;p:=pos(zeile,kzkosmetik);IF p>
+0THEN ausdruckeinlesen;IF ausdruck="head"THEN kopfeinlesenELIF ausdruck=
+"bottom"THEN fusseinlesenFI ;FI ;PER .ausdruckeinlesen:ausdruck:=compress(
+subtext(zeile,p+1,pos(zeile,kzkosmetik,p+1)-1)).bereichsende:p:=pos(zeile,
+kzkosmetik);IF p>0THEN ausdruckeinlesen;pos(";head;bottom;end;",";"+ausdruck+
+";")>0ELSE FALSE FI .kopfeinlesen:replace(kosmetikbereich,1,code(aktzeile-1))
+;REP zeile:=getzeile(0,aktzeile);aktzeileINCR 1;IF bereichsendeTHEN replace(
+kosmetikbereich,2,code(aktzeile-1));LEAVE kopfeinlesenELSE kopfzeilenINCR 1;
+zeile:=aufbereitetezeile(zeile,geteinfuegstellen(0,aktzeile-1));kopfbereich
+CAT (zeile+linefeed)FI PER .fusseinlesen:replace(kosmetikbereich,3,code(
+aktzeile-1));REP zeile:=getzeile(0,aktzeile);aktzeileINCR 1;IF bereichsende
+THEN replace(kosmetikbereich,4,code(aktzeile-1));LEAVE fusseinlesenELSE
+fusszeilenINCR 1;zeile:=aufbereitetezeile(zeile,geteinfuegstellen(0,aktzeile-
+1));fussbereichCAT (zeile+linefeed)FI PER .ENDPROC headundbottommerken;PROC
+listendruck(INT CONST nr,INT CONST medium):REAL VAR limit;INT VAR fontnr:=0;
+getdruckaufbereitung(schriftart,links,oben,anzzeilen,limit);schriftartpruefen
+;zeilenlaenge:=int(limit);#IF seitenweiseTHEN #headundbottommerken;
+aktuelleseite:=1;aktuellerds:=-1;ausgabedateianlegen;IF seitenweiseTHEN
+schreibekopfFI ;auswertung("QUERY."+text(nr));dbauswertung:=dbstatus;
+restderletztenzeile:="";verbund:=-1;tupelbearbeitet:=TRUE ;druckeblock(0);IF
+length(restderletztenzeile)>0THEN putzeile("")FI ;IF seitenweiseCAND
+fusszeilen>0THEN zeilenvorschubundfussdruckenFI ;druckegesamtliste.
+schriftartpruefen:disablestop;fontnr:=font(schriftart);IF iserrorTHEN
+schriftart:="";clearerror;ELIF fontnr=0THEN schriftart:=font(1)FI ;enablestop
+.druckegesamtliste:BOOL VAR cd:=commanddialogue;INT VAR i;IF seitenweiseCOR
+schriftart=""THEN druckausgabeausgeben(filename,medium);IF seitenweiseCAND
+aktuellerds>0CAND medium=druckerTHEN FOR iFROM 1UPTO aktuellerdsREP
+druckausgabeausgeben(filename,medium);PER FI ELSE sysout("dummy");
+commanddialogue(FALSE );standardmeldung(mldaufb,"");autopageform(filename);
+forget(filename,quiet);sysout("");forget("dummy",quiet);commanddialogue(cd);
+druckausgabeausgeben(filename+".p",medium)FI .ENDPROC listendruck;TEXT PROC
+namederdruckausgabeohne:filenameENDPROC namederdruckausgabeohne;TEXT PROC
+namederdruckausgabe:filename+".p"ENDPROC namederdruckausgabe;PROC
+namederdruckausgabe(TEXT CONST fname):filename:=fnameENDPROC
+namederdruckausgabe;PROC druckausgabeausgeben(TEXT CONST fname,INT CONST
+medium):SELECT mediumOF CASE dbschirm:caufanfang;editiere(fname,FALSE );CASE
+ddrucker:standardmeldung(mlddrucken,"");print(fname);enter(1)OTHERWISE :
+errorstop("Falscher Druck-Code")ENDSELECT ;zurueck.caufanfang:FILE VAR f:=
+sequentialfile(modify,fname);toline(f,1).ENDPROC druckausgabeausgeben;BOOL
+VAR rueck:=FALSE ;PROC zurueck:rueck:=TRUE ENDPROC zurueck;BOOL PROC
+ruecksprung:BOOL VAR b:=rueck;rueck:=FALSE ;bENDPROC ruecksprung;LET
+parametergrenze="%",parametertrennzeichen="#",otherwise="*",niltext="",
+textbegrenzer="""";INT PROC postextende(TEXT CONST ausgabe,INT CONST
+aktuelleposition):INT VAR neupos:=aktuelleposition+1;WHILE (ausgabeSUB neupos
+)<>textbegrenzerREP neuposINCR 1;IF (ausgabeSUB neupos)=textbegrenzerCAND (
+ausgabeSUB neupos+1)=textbegrenzerTHEN neuposINCR 2;FI ;UNTIL neupos>length(
+ausgabe)PER ;neupos+1ENDPROC postextende;INT PROC postext(TEXT CONST source,
+pattern,INT CONST from):INT VAR p:=from;WHILE (sourceSUB p)<>patternREP
+nextcharUNTIL p>length(source)PER ;#9.12.87#IF p>length(source)THEN 0ELSE p
+FI .nextchar:IF (sourceSUB p)=textbegrenzerTHEN p:=postextende(source,p)ELSE
+pINCR 1;#9.12.87#FI .ENDPROC postext;TEXT PROC dbwert(TEXT CONST feldname,
+BOOL VAR textvergleich):LET null="0",nulldatum="01.01.00";TEXT VAR ausgabe:=
+"";INT CONST fnr:=feldnr(compress(feldname));IF fnr>0THEN ausgabe:=wert(fnr);
+IF ((feldtyp(fnr)=intfeld)CAND (ausgabe=null))COR ((feldtyp(fnr)=datumfeld)
+CAND (ausgabe=nulldatum))THEN ausgabe:=""FI ;textvergleich:=NOT (feldtyp(fnr)
+=realfeldCOR feldtyp(fnr)=intfeld)ELSE textvergleich:=TRUE FI ;ausgabeEND
+PROC dbwert;TEXT PROC auswerten(TEXT CONST eingabe):INT VAR
+positionlinkeklammer:=1,positionrechteklammer:=1,positionlinkeskreuz,
+positionrechteskreuz,positionmittlereskreuz,positionparametergrenze,
+aktuelleposition:=1,positionotherwise,anzahldergeoeffnetenklammern;BOOL VAR
+ausdruckvorhanden,caseaufruf,linkeseitevariabel,rechteseitevariabel,
+textvergleich;TEXT VAR puffer,vergleichswert,aktuellessymbol,parameter1,
+ausgabe:=compress(eingabe);REP zeichenketteueberlesen;
+auffindeneinesspitzgeklammertenausdrucks;IF ausdruckvorhandenTHEN
+bestimmungdesfeldnamensfuerdieprozedurdbwert;aufrufderprozedurdbwert;IF
+caseaufrufTHEN bestimmungderrichtigenalternativeFI ;
+einsetzendesfeldwertsoderderalternative;FI ;UNTIL NOT ausdruckvorhandenPER ;
+ausgabe.zeichenketteueberlesen:INT VAR p:=aktuelleposition;#1#BOOL VAR
+innerhalbzeichenkette:=TRUE ;IF (ausgabeSUB p)=linkeklammerTHEN pINCR 1;FI ;
+IF aktuelleszeichenisttextbegrenzerTHEN WHILE innerhalbzeichenketteREP REP
+UNTIL textendeCOR aktuelleszeichenisttextbegrenzerPER ;IF NOT textendeCAND (
+ausgabeSUB p)=textbegrenzerTHEN innerhalbzeichenkette:=TRUE ;pINCR 1ELSE
+innerhalbzeichenkette:=FALSE ;FI PER ;pDECR 1;aktuelleposition:=p;
+leerzeichenentfernen;FI .aktuelleszeichenisttextbegrenzer:IF (ausgabeSUB p)=
+textbegrenzerTHEN deletechar(ausgabe,p);TRUE ELSE pINCR 1;FALSE FI .textende:
+p>length(ausgabe).leerzeichenentfernen:WHILE (ausgabeSUB p)=" "REP deletechar
+(ausgabe,p)PER .auffindeneinesspitzgeklammertenausdrucks:#aktuelleposition:=0
+;#linkeseitevariabel:=FALSE ;rechteseitevariabel:=FALSE ;aktuelleposition:=
+pos(ausgabe,linkeklammer,aktuelleposition);ausdruckvorhanden:=
+aktuelleposition<>0;positionlinkeklammer:=aktuelleposition.
+bestimmungdesfeldnamensfuerdieprozedurdbwert:
+ueberpruefeoblinkeseitedoppeltgeklammert;bestimmedenfeldnamen;IF
+aktuellessymbol=rechteklammerTHEN caseaufruf:=FALSE ;fuehreleseoperationaus;
+ueberpruefeobrechteseitedoppeltgeklammertELSE caseaufruf:=TRUE ;
+positionparametergrenze:=aktuellepositionFI .fuehreleseoperationaus:
+aktuellepositionINCR 1;IF aktuelleposition>length(ausgabe)THEN
+aktuellessymbol:=rechteklammerELSE aktuellessymbol:=ausgabeSUB
+aktuelleposition;FI ;IF aktuellessymbol=linkeklammerTHEN
+anzahldergeoeffnetenklammernINCR 1ELIF aktuellessymbol=rechteklammerTHEN
+anzahldergeoeffnetenklammernDECR 1FI .fuehreleseoperationausmittextueberlesen
+:aktuellepositionINCR 1;IF (ausgabeSUB aktuelleposition)=textbegrenzerTHEN
+aktuelleposition:=postextende(ausgabe,aktuelleposition)FI ;IF
+aktuelleposition>length(ausgabe)THEN aktuellessymbol:=rechteklammerELSE
+aktuellessymbol:=ausgabeSUB aktuelleposition;FI ;IF aktuellessymbol=
+linkeklammerTHEN anzahldergeoeffnetenklammernINCR 1ELIF aktuellessymbol=
+rechteklammerTHEN anzahldergeoeffnetenklammernDECR 1FI .
+ueberpruefeoblinkeseitedoppeltgeklammert:fuehreleseoperationaus;
+linkeseitevariabel:=aktuellessymbol=linkeklammer.bestimmedenfeldnamen:WHILE
+NOT (aktuellessymbol=parametertrennzeichenOR aktuellessymbol=parametergrenze
+OR aktuellessymbol=rechteklammer)REP fuehreleseoperationausPER ;IF
+linkeseitevariabelTHEN parameter1:=(subtext(ausgabe,positionlinkeklammer+2,
+aktuelleposition-1))ELSE parameter1:=(subtext(ausgabe,positionlinkeklammer+1,
+aktuelleposition-1))FI .ueberpruefeobrechteseitedoppeltgeklammert:IF
+aktuellessymbol=rechteklammerTHEN rechteseitevariabel:=TRUE ;
+positionrechteklammer:=aktuellepositionELSE positionrechteklammer:=
+aktuelleposition-1FI .aufrufderprozedurdbwert:puffer:=dbwert(parameter1,
+textvergleich).bestimmungderrichtigenalternative:
+bestimmungdeserstenvergleichswertes;WHILE
+vergleichswertstimmtnichtuebereinundeinweiterervorhandenREP
+suchenaechstenvergleichswertPER ;positionrechteklammerbeicaseaufrufbestimmen;
+IF vergleichswertstimmtmitdemergebnisausdemdbwertaufrufuebereinTHEN
+bereitstellenderentsprechendenalternativeELIF (ausgabeSUB positionotherwise)=
+otherwiseTHEN puffer:=auswerten(subtext(ausgabe,positionotherwise+1,
+positionrechteklammer-1))ELSE bereitstelleneinerleerenalternativeFI .
+bestimmungdeserstenvergleichswertes:positionlinkeskreuz:=
+positionparametergrenze;positionmittlereskreuz:=postext(ausgabe,
+parametertrennzeichen,positionlinkeskreuz+1);vergleichswert:=subtext(ausgabe,
+positionlinkeskreuz+1,positionmittlereskreuz-1);rechteskreuzbestimmen.
+suchenaechstenvergleichswert:positionlinkeskreuz:=positionrechteskreuz;
+positionmittlereskreuz:=postext(ausgabe,parametertrennzeichen,
+positionlinkeskreuz+1);vergleichswert:=subtext(ausgabe,positionlinkeskreuz+1,
+positionmittlereskreuz-1);rechteskreuzbestimmen.rechteskreuzbestimmen:
+aktuelleposition:=positionmittlereskreuz;anzahldergeoeffnetenklammern:=0;REP
+fuehreleseoperationausmittextueberlesenUNTIL (anzahldergeoeffnetenklammern=0
+AND (aktuellessymbol=parametertrennzeichenOR aktuellessymbol=otherwise))OR
+anzahldergeoeffnetenklammern<0PER ;positionrechteskreuz:=aktuelleposition;
+positionotherwise:=aktuelleposition.
+vergleichswertstimmtmitdemergebnisausdemdbwertaufrufueberein:IF textvergleich
+THEN vergleichswert=pufferELSE real(vergleichswert)=real(puffer)FI .
+bereitstellenderentsprechendenalternative:puffer:=auswerten(subtext(ausgabe,
+positionmittlereskreuz+1,positionrechteskreuz-1)).
+bereitstelleneinerleerenalternative:puffer:=niltext.
+vergleichswertstimmtnichtuebereinundeinweiterervorhanden:NOT
+vergleichswertstimmtmitdemergebnisausdemdbwertaufrufuebereinAND
+einweiterervergleichswertistvorhanden.einweiterervergleichswertistvorhanden:
+aktuellessymbol=parametertrennzeichen.
+positionrechteklammerbeicaseaufrufbestimmen:anzahldergeoeffnetenklammern:=0;
+IF aktuellessymbol<>rechteklammerTHEN WHILE NOT (anzahldergeoeffnetenklammern
+<0AND aktuellessymbol=rechteklammer)REP
+fuehreleseoperationausmittextueberlesenPER FI ;positionrechteklammer:=
+aktuelleposition.einsetzendesfeldwertsoderderalternative:change(ausgabe,
+positionlinkeklammer,positionrechteklammer,puffer).ENDPROC auswerten;TEXT
+PROC ausdruckauswerten(TEXT CONST ausdruck):TEXT VAR eingabe:=ausdruck;IF (
+eingabeSUB 1)<>linkeklammerTHEN insertchar(eingabe,linkeklammer,1)FI ;IF (
+eingabeSUB (length(eingabe)))<>rechteklammerTHEN eingabeCAT rechteklammerFI ;
+auswerten(eingabe)ENDPROC ausdruckauswerten;ENDPACKET idadruck;
+
diff --git a/app/schulis/2.2.1/src/6.ida.eingang b/app/schulis/2.2.1/src/6.ida.eingang
new file mode 100644
index 0000000..c4de3f7
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.ida.eingang
@@ -0,0 +1,87 @@
+PACKET idaeingangsbildschirmDEFINES generieredruckausgabe,
+eingangsbildschirmdarstellen#,putdrucktyp,putdruckindex#:LET maskennamelehrer
+="mdr lehrerweise dr eingang",maskennameeinzeln=
+"mdr einzelobjekt druckausgabe eingang";LET maxfeld=8,wartemeldnr=69,
+auswahlnichtkorrekt=188,auswahlnichteind=189,niltext="",mldnrformnichtda=262;
+LET markiert="#";LET lehrer="Lehrer",schueler="Schüler";TEXT VAR
+leitobjektklasse,scanwertlehrer;INT CONST primindex:=2;#(ROW maxfeldINT :(246
+,255,247,246,246,246,246,0),ROW maxfeldINT :(246,255,247,246,246,246,246,246)
+);#ROW maxfeldINT VAR indicesschueler:=ROW maxfeldINT :(ixsustatfamrufgeb,
+ixsustatjgst,ixsustatjgstzug,ixsustatfamrufgeb,ixsustatfamrufgeb,
+ixsustatfamrufgeb,ixsustatfamrufgeb,ixsustatfamrufgeb);TEXT VAR maskenname:=
+"";INT VAR letztenummerderdruckausgabe:=0;INT VAR druckinx,ankreuzfeld;INT
+PROC druckindex:druckinxENDPROC druckindex;PROC putdruckindex(INT CONST dinx)
+:druckinx:=dinxENDPROC putdruckindex;PROC eingangsbildschirmdarstellen:TEXT
+VAR fname:="";INT VAR findex:=0,nochmeld;BOOL VAR ftyp;
+setzelistederdruckausgabengezeigt(FALSE );IF ruecksprungTHEN ohnepruefung
+ELSE mitpruefungFI .mitpruefung:IF listenweiseauswahlkorrektTHEN
+letztenummerderdruckausgabe:=nummerderdruckausgabe;putdruckindex(
+letztenummerderdruckausgabe);holeformular;namederdruckausgabe(getformularname
+);#standardkopfmaskeaktualisieren(namederdruckausgabe);#maskedarstellen;FI .
+ohnepruefung:putdruckindex(letztenummerderdruckausgabe);holeformular;
+maskedarstellen.holeformular:setzenummerderdruckausgabe(text(
+letztenummerderdruckausgabe));IF formexists(druckinx)THEN getform(druckinx)
+ELSE formunvollstaendigFI ;#openformular(druckinx);bereitsinformularzerlegen!
+#formularzerlegen(druckinx);IF getblockanzahl<1THEN formunvollstaendigFI ;
+getformularinfo(fname,findex,ftyp);systemdboff.formunvollstaendig:
+standardmeldung(mldnrformnichtda,niltext);return(1);LEAVE
+eingangsbildschirmdarstellen.listenweiseauswahlkorrekt:
+idaankreuzfelderpruefen.maskedarstellen:leitobjektklasse:=getobjektklasse(1);
+IF leitobjektklasse=schuelerTHEN maskenname:=maskennameeinzelnELIF
+leitobjektklasse=lehrerTHEN maskenname:=maskennamelehrerFI ;standardstartproc
+(maskenname);standardkopfmaskeaktualisieren(namederdruckausgabeohne);nochmeld
+:=nochmeldungauszugeben;IF nochmeld<>0THEN TEXT VAR drinx:=text(druckindex)+
+markiert;standardmeldung(nochmeld,drinx)FI ;standardnproc.END PROC
+eingangsbildschirmdarstellen;PROC generieredruckausgabe(INT CONST medium):
+INT VAR leitinx;generieredruck.generieredruck:IF leitobjektklasse=schueler
+THEN leitinx:=leitindexschueler;ueberpruefeleitinx;putleitindex(
+leitindexschueler);ELSE leitinx:=leitindexlehrer;ueberpruefeleitinx;
+putleitindex(leitindexlehrer)FI ;putobjektklasse(1,leitobjektklasse);IF
+leitobjektklasse=schuelerTHEN putscan(erzeugescan)ELSE putscan(scanwertlehrer
+)FI ;erzeugequery(druckindex);standardmeldung(wartemeldnr,niltext);
+listendruck(druckindex,medium).ueberpruefeleitinx:IF leitinx<=0THEN #return(1
+);#LEAVE generieredruckausgabeFI ;ENDPROC generieredruckausgabe;INT PROC
+leitindexschueler:INT VAR wievielter;INT VAR i,leitinx,offset:=1;ankreuzfeld
+:=0;pruefeeindeutigkeit;bestimmeindex;bestimmewievielterindex.
+pruefeeindeutigkeit:FOR iFROM 2UPTO maxfeld+offsetREP IF standardmaskenfeld(i
+)<>""THEN IF ankreuzfeld>0THEN #note("Feld : "+text(i)+" Inhalt : "+
+standardmaskenfeld(i));noteline;note("Ankreuzfeld : "+text(ankreuzfeld));
+noteline;#standardmeldung(auswahlnichteind,niltext);return(1);LEAVE
+leitindexschuelerWITH (-1)ELSE ankreuzfeld:=iFI FI PER ;IF ankreuzfeld<=0
+THEN #note("Feld : "+text(i)+" Inhalt : "+standardmaskenfeld(i));noteline;
+note("Ankreuzfeld : "+text(ankreuzfeld));noteline;#standardmeldung(
+auswahlnichtkorrekt,niltext);return(1);LEAVE leitindexschuelerWITH (-2)FI .
+bestimmeindex:leitinx:=indicesschueler[ankreuzfeld-1];.
+bestimmewievielterindex:wievielter:=0;FOR iFROM firstindexUPTO firstfree-1
+REP IF dateinr(primdatid(i))=primindexTHEN wievielterINCR 1;IF i=leitinxTHEN
+LEAVE leitindexschuelerWITH wievielterFI FI PER ;0ENDPROC leitindexschueler;
+INT PROC leitindexlehrer:INT VAR status,leitinx;scanwertlehrer:="";
+standardpruefe(5,2,4,0,"",status);IF status<>0THEN standardmeldung(
+auswahlnichtkorrekt,niltext);return(1);leitinx:=-1;ELSE IF standardmaskenfeld
+(5)=""THEN IF standardmaskenfeld(2)<>""THEN leitinx:=dnrlehrerELIF
+standardmaskenfeld(3)<>""THEN leitinx:=ixlfamrufELIF standardmaskenfeld(4)<>
+""THEN infeld(5);standardmeldung(auswahlnichteind,niltext);return(1);leitinx
+:=-1FI ;ELSE IF standardmaskenfeld(4)<>""THEN leitinx:=dnrlehrer;
+scanwertlehrer:="<""";scanwertlehrerCAT standardmaskenfeld(5);scanwertlehrer
+CAT """>";ELSE standardmeldung(auswahlnichtkorrekt,niltext);return(1);leitinx
+:=-1;FI ;FI ;FI ;leitinxEND PROC leitindexlehrer;TEXT PROC erzeugescan:INT
+VAR i,evteinzel:=0;evteinzel:=1;scanfuereinzel.scanfuereinzel:SELECT
+ankreuzfeldOF CASE 2:"<""ls"">"CASE 3:statusjgstCASE 4:statusjgstzugCASE 5:
+"<""ls"">"+evtschuelerCASE 6:"<""n05"">"+evtschuelerCASE 7:"<""n11"">"+
+evtschuelerCASE 8:"<""nso"">"+evtschuelerCASE 9:"<""abg"">"+evtschueler
+OTHERWISE :""ENDSELECT .evtschueler:scantxt:="";FOR iFROM 12UPTO 14REP IF
+standardmaskenfeld(i)<>""THEN scantxt:=scantxt+";"+"<"""+evtdatum+""">"ELSE
+LEAVE evtschuelerWITH scantxtFI PER ;scantxt.evtdatum:IF i=14THEN
+datumskonversion(standardmaskenfeld(i))ELSE standardmaskenfeld(i)FI .
+statusjgst:IF standardmaskenfeld(9+evteinzel)<>""THEN "<""ls"">;<"""+
+jgstaufber(standardmaskenfeld(9+evteinzel))+""">"ELSE "<""ls"">"FI .
+statusjgstzug:TEXT VAR scantxt:="";IF standardmaskenfeld(9+evteinzel)<>""
+THEN scantxt:="<""ls"">;<"""+jgstaufber(standardmaskenfeld(9+evteinzel))+
+""">";IF standardmaskenfeld(10+evteinzel)<>""THEN scantxt:=scantxt+";<"""+
+standardmaskenfeld(10+evteinzel)+""">"FI ;scantxtELSE "<""ls"">"FI .ENDPROC
+erzeugescan;INT PROC nummerderdruckausgabe:TEXT VAR t;INT VAR i,lv;FOR lv
+FROM 1UPTO 10REP IF standardmaskenfeld(lv*2#+1#)<>""THEN nummerermittelnFI
+PER ;0.nummerermitteln:t:=standardmaskenfeld(lv*2+1);t:=subtext(t,1,pos(t,
+" = ")-1);i:=int(t);LEAVE nummerderdruckausgabeWITH i.END PROC
+nummerderdruckausgabe;ENDPACKET idaeingangsbildschirm;
+
diff --git a/app/schulis/2.2.1/src/6.ida.gen b/app/schulis/2.2.1/src/6.ida.gen
new file mode 100644
index 0000000..c4d4eeb
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.ida.gen
@@ -0,0 +1,79 @@
+PACKET idagenDEFINES formularzerlegen,erzeugequery:LET platzhalter="�",
+okkenner="k",linkeklammer="<",rechteklammer=">";FILE VAR formtext;TEXT VAR
+zeile:="",blockstruktur:="";INT VAR lastblock:=0;TEXT PROC blockcode(INT
+CONST objklasse,regel):"!"+text(objklasse)+"."+text(regel)+"!"ENDPROC
+blockcode;BOOL PROC blockende(INT CONST objklasse,regel):pos(blockstruktur,
+blockcode(objklasse,regel))>0ENDPROC blockende;PROC blockmerken(INT CONST
+objklasse,regel):blockstrukturCAT blockcode(objklasse,regel)ENDPROC
+blockmerken;PROC unterblockeintragen(INT CONST blocknr,unterblock):TEXT VAR
+ub:=getunterbloecke(blocknr),vz:=getvorzeilennr(blocknr);INT VAR zeilennr:=
+getzeilenanzahl(blocknr);ubCAT text(unterblock)+";";vzCAT text(zeilennr+1)+
+";";putunterbloecke(blocknr,ub);putvorzeilennr(blocknr,vz);ENDPROC
+unterblockeintragen;PROC inaktuellenblockuebernehmen(TEXT CONST zeile,INT
+CONST blocknr):TEXT VAR textzeile:=zeile,einfuegstellen:="";INT VAR zeilennr
+:=getzeilenanzahl(blocknr)+1,vonp,bisp,stcodenr;druckvariablenersetzen;
+putzeilenanzahl(blocknr,zeilennr);putzeile(blocknr,zeilennr,textzeile);
+puteinfuegstellen(blocknr,zeilennr,einfuegstellen);.druckvariablenersetzen:
+vonp:=pos(textzeile,linkeklammer);WHILE vonp>0REP bisp:=pos(textzeile,
+rechteklammer,vonp+1);IF bisp=0THEN bisp:=length(textzeile)FI ;stcodenr:=int(
+subtext(textzeile,vonp+1,bisp-1));einfuegstellenCAT text(stcodenr)+";";change
+(textzeile,vonp,bisp,platzhalter);vonp:=pos(textzeile,linkeklammer);PER .
+ENDPROC inaktuellenblockuebernehmen;PROC bearbeiteblock(INT CONST b):INT
+CONST blocknr:=b;INT VAR p,bis,objklasse,regel;BOOL VAR eoformtext:=FALSE ;
+putzeilenanzahl(blocknr,0);putunterbloecke(blocknr,"");putvorzeilennr(blocknr
+,"");WHILE NOT eoformtextREP IF zugriffsregelgefundenTHEN okundregelbestimmen
+;IF blockende(objklasse,regel)THEN LEAVE bearbeiteblockELSE blockmerken(
+objklasse,regel);IF compress(zeile)=""CAND NOT eof(formtext)THEN getline(
+formtext,zeile);FI ;lastblockINCR 1;unterblockeintragen(blocknr,lastblock);
+putblockregelnummer(lastblock,getregelnummer(objklasse,regel));bearbeiteblock
+(lastblock)FI ;ELSE inaktuellenblockuebernehmen(zeile,blocknr)FI ;IF eof(
+formtext)THEN eoformtext:=TRUE ELSE getline(formtext,zeile);FI ;PER ;.
+zugriffsregelgefunden:p:=pos(zeile,linkeklammer+okkenner);p>0.
+okundregelbestimmen:bis:=p+2;objklasse:=int(zeileSUB bis);bisINCR 1;IF
+istziffer(zeileSUB bis)THEN objklasse:=objklasse*10+int(zeileSUB bis);bis
+INCR 1;FI ;IF (zeileSUB bis)=rechteklammerTHEN regel:=1ELSE regel:=int(zeile
+SUB bis+1);bisINCR 2;IF istziffer(zeileSUB bis)THEN regel:=regel*10+int(zeile
+SUB bis);bisINCR 1;FI ;FI ;change(zeile,p,bis,"").ENDPROC bearbeiteblock;
+PROC formularzerlegen(INT CONST nr):openformular(nr);lastblock:=0;
+blockstruktur:="";zeile:="";formtext:=sequentialfile(input,getformtextname);
+IF NOT eof(formtext)THEN getline(formtext,zeile)FI ;IF eof(formtext)CAND
+zeile=""THEN putzeilenanzahl(0,0);putunterbloecke(0,"");putvorzeilennr(0,"");
+ELSE bearbeiteblock(0)FI ENDPROC formularzerlegen;BOOL PROC istziffer(TEXT
+CONST t):pos("0123456789",t)>0END PROC istziffer;LET textbegrenzer="""",
+klammerauf=" ( ",klammerzu=" ).",trenner=" / ",refinementname="verbund";FILE
+VAR queryfile;TEXT PROC alstext(TEXT CONST t):textbegrenzer+t+textbegrenzer
+ENDPROC alstext;TEXT PROC bestimmeindexname(TEXT CONST dateiname,INT CONST nr
+):TEXT VAR n:=alstext(dateiname);INT VAR i,treffer:=0;IF nr>0CAND firstindex>
+0THEN FOR iFROM firstindexUPTO firstfree-1REP IF name(dateinr(primdatid(i)))=
+dateinameTHEN trefferINCR 1FI ;IF treffer=nrTHEN n:=n+" BY "+alstext(name(i))
+;FI UNTIL treffer=nrPER FI ;nENDPROC bestimmeindexname;TEXT PROC
+bestimmeverbunde(INT CONST blocknr):TEXT VAR v:="";INT VAR nr,p:=1;REP nr:=
+decodezahl(getunterbloecke(blocknr),p);IF nr>0THEN IF v=""THEN vCAT
+refinementname+text(nr)ELSE vCAT ";"+refinementname+text(nr)FI FI UNTIL nr=0
+PER ;vENDPROC bestimmeverbunde;TEXT PROC bestimmescanbedingung(INT CONST
+regel,anzkeyfelder):TEXT VAR scan:="",vgl:="";INT VAR f;FOR fFROM 1UPTO
+anzkeyfelderREP vgl:=getvergleichswert(regel,f);vergleichswertcodieren;IF
+scan=""THEN scanCAT vglELSE scanCAT ";"+vglFI PER ;scan.
+vergleichswertcodieren:IF konstanteTHEN vgl:=linkeklammer+vgl+rechteklammer
+ELSE vgl:=textbegrenzer+vgl+textbegrenzerFI .konstante:(vglSUB 1)=
+textbegrenzer.ENDPROC bestimmescanbedingung;PROC verbund(INT CONST blocknr):
+TEXT VAR string:="";INT CONST regelnr:=getblockregelnummer(blocknr);INT VAR k
+,r,index,anzfelder;IF regelnr>0THEN getzugriffsregel(regelnr,k,r,index,
+anzfelder)FI ;line(queryfile);putline(queryfile,refinementname+text(blocknr)+
+":");IF regelnr>0THEN string:=bestimmeindexname(getobjektklasse(k),index);
+stringCAT klammerauf;stringCAT bestimmescanbedingung(regelnr,anzfelder);
+stringCAT trenner;stringCAT trenner;stringCAT trenner;stringCAT
+bestimmeverbunde(blocknr);stringCAT klammerzu;putline(queryfile,string)ELSE
+putline(queryfile,".")FI ENDPROC verbund;PROC erzeugequery(INT CONST nr):INT
+VAR b;TEXT VAR string:="";forget(queryfilename,quiet);queryfile:=
+sequentialfile(output,queryfilename);FOR bFROM 1UPTO getblockanzahlREP IF b=1
+THEN initqueryELSE verbund(b)FI PER ;.queryfilename:"QUERY."+text(nr).
+initquery:string:=bestimmeindexname(getobjektklasse(1),getleitindex);string
+CAT klammerauf;stringCAT getscan;stringCAT trenner;stringCAT trenner;putline(
+queryfile,string);string:="";IF getselektion>""THEN stringCAT "selektion"FI ;
+stringCAT trenner;putline(queryfile,string);string:="";stringCAT
+bestimmeverbunde(1);stringCAT klammerzu;putline(queryfile,string);IF
+getselektion>""THEN line(queryfile);string:="selektion: ";stringCAT
+getselektion;stringCAT ".";putline(queryfile,string);FI .ENDPROC erzeugequery
+;ENDPACKET idagen
+
diff --git a/app/schulis/2.2.1/src/6.ida.grund b/app/schulis/2.2.1/src/6.ida.grund
new file mode 100644
index 0000000..b298b95
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.ida.grund
@@ -0,0 +1,182 @@
+PACKET ispidagrundfunktionenDEFINES selektionenindateieintragen,
+zugriffsregelnindateieintragen,druckausgabenlistezeigen,regellistezeigen,
+variablenlistezeigen,behandlungderausgesuchten,inlisteblaettern,
+maskenwertesichern,nummerderdruckausgabesetzen,nureinedruckausgabeangekreuzt,
+rueckschrittevorproc,rueckschrittenachproc,sichernundhilfsfilesloeschen,
+hilfsfilesloeschen,erfassungdruckausgabe,init,put,
+setzedruckausgabelistenauswahl,druckausgabelistenauswahl,
+setzelistederdruckausgabengezeigt,listederdruckausgabengezeigt,
+setzeaktuellemaske,aktuellemaske:LET filenamezug="Hilfsdatei.Zugriff",
+filenamesel="Hilfsdatei.Selektion",filenamedruck="Hilfsdatei.Druck",
+filenamedliste="Druckausgaben",filenamezliste="Zugriffe",filenamevliste=
+"Variablen";LET meldunglistenerstellung=7,meldungletzterwert=67,
+meldungkeineliste=68,meldungkeinblaettern=72,meldungkeinezugriffe=200,
+meldungkeinevariablen=201;LET maxselektionen=17,maxzugriffe=16,zeileninliste=
+18,ausgabelaenge=71,maxvariablen=100;LET zugriffsregeln=4,druckvariablen=7;
+LET serstervergleich=3,zobjkl=2,zregnr=3,zerstervergleich=7,lt=3,dnummer=2,
+vnummer=2;LET vergleichtrenner="</>",trenner=" = ",oblitrenner="$",blank=" ",
+kleinr="r",kleink="k",niltext="";LET andenanfang=1,andasende=2,vorwaerts=3,
+rueckwaerts=4;BOOL VAR listenauswahl,listegezeigt;BOOL VAR dvrrechts,
+dvrdruckvar,listeeinmalgezeigt:=FALSE ;INT VAR lvi,lvf,posi,zeilennr,
+dvrlaenge,zobjekt,zregel,zindex,zanzahl,startzeile,zeilenindatei,schritte;
+FILE VAR f,g;TAG VAR aktmaske;TEXT VAR zeile,dvrname,wert1,wert2,datname;
+PROC selektionenindateieintragen(INT CONST leseanfangindatei,ROW 100TEXT
+CONST erfassungsfeld):f:=sequentialfile(modify,filenamesel);zeilennr:=
+leseanfangindatei;lvi:=serstervergleich;FOR lvfFROM leseanfangindateiUPTO
+leseanfangindatei+maxselektionen-1REP IF zeilennr<=lines(f)THEN
+vergleichswerteanhaengenFI PER ;.vergleichswerteanhaengen:toline(f,lvf);
+readrecord(f,zeile);posi:=pos(zeile,vergleichtrenner);IF posi>0THEN zeile:=
+subtext(zeile,1,posi-1)FI ;zeileCAT vergleichtrenner;zeileCAT erfassungsfeld[
+lvi];writerecord(f,zeile);lviINCR 2;zeilennrINCR 1;.END PROC
+selektionenindateieintragen;PROC zugriffsregelnindateieintragen(INT CONST
+leseanfangindatei,ROW 100TEXT CONST erfassungsfeld):f:=sequentialfile(modify,
+filenamezug);zeilennr:=leseanfangindatei;lvi:=zerstervergleich;FOR lvfFROM
+leseanfangindateiUPTO leseanfangindatei+maxzugriffe-1REP IF zeilennr<=lines(f
+)THEN vergleichswerteanhaengenFI PER ;.vergleichswerteanhaengen:toline(f,lvf)
+;readrecord(f,zeile);posi:=pos(zeile,vergleichtrenner);IF posi>0THEN zeile:=
+subtext(zeile,1,posi-1);FI ;IF erfassungsfeld[lvi]<>niltextTHEN zeileCAT
+vergleichtrenner;zeileCAT erfassungsfeld[lvi];FI ;writerecord(f,zeile);lvi
+INCR 3;zeilennrINCR 1;.END PROC zugriffsregelnindateieintragen;PROC
+druckausgabenlistezeigen:forget(filenamedliste,quiet);datname:=filenamedliste
+;f:=sequentialfile(output,datname);first(dnrida);WHILE dbstatus=okREP
+zeilezusammensetzen;putline(f,text(zeile,ausgabelaenge));succ(dnrida)PER ;
+startzeiledruckausgabenlistebestimmen(datname);IF startzeile=0THEN
+meldeauffaellig(aktuellemaske,meldungkeineliste);return(1)ELSE
+setzelistederdruckausgabengezeigt(TRUE );listeeinmalgezeigt:=TRUE ;
+listezeigen(datname)FI .zeilezusammensetzen:zeile:=wert(fnridanummer)+trenner
++wert(fnridaname);.END PROC druckausgabenlistezeigen;PROC
+startzeiledruckausgabenlistebestimmen(TEXT VAR fname):INT VAR lv;f:=
+sequentialfile(modify,fname);FOR lvFROM 1UPTO lines(f)REP toline(f,lv);
+readrecord(f,zeile);IF int(subtext(zeile,1,pos(zeile,trenner)-1))>=int(
+standardmaskenfeld(dnummer))THEN startzeile:=lv;LEAVE
+startzeiledruckausgabenlistebestimmenFI PER ;startzeile:=0END PROC
+startzeiledruckausgabenlistebestimmen;PROC regellistezeigen:forget(
+filenamezliste,quiet);datname:=filenamezliste;f:=sequentialfile(output,
+datname);IF getanzahlregeln=0THEN meldeauffaellig(aktuellemaske,
+meldungkeinezugriffe);return(1)ELSE meldeauffaellig(aktuellemaske,
+meldunglistenerstellung);listeeinmalgezeigt:=FALSE ;
+listederregelnzusammenstellen;startzeileregellistebestimmen(datname);IF
+startzeile=0THEN meldeauffaellig(aktuellemaske,meldungkeineliste);return(1)
+ELSE setzedruckausgabelistenauswahl(TRUE );listezeigen(datname)FI FI ;END
+PROC regellistezeigen;PROC listederregelnzusammenstellen:FOR lvfFROM 1UPTO
+getanzahlregelnREP getzugriffsregel(lvf,zobjekt,zregel,zindex,zanzahl);zeile
+:=kleink+text(zobjekt)+kleinr+text(zregel);putline(f,text(zeile,ausgabelaenge
+))PER END PROC listederregelnzusammenstellen;PROC
+startzeileregellistebestimmen(TEXT VAR fname):INT VAR lv,lvi,anzahl;f:=
+sequentialfile(modify,fname);regelnsortieren;anzahl:=lines(f);FOR lvFROM 1
+UPTO anzahlREP toline(f,lv);readrecord(f,zeile);IF objektindatei=
+objektinmaskeTHEN lvi:=lv;WHILE regelindatei<regelinmaskeREP
+pruefenobdateiendesonstnaechstenlesenUNTIL objektindatei>objektinmaskePER ;
+startzeile:=lvi;LEAVE startzeileregellistebestimmenFI ;IF objektindatei>
+objektinmaskeTHEN startzeile:=lv;LEAVE startzeileregellistebestimmenFI PER ;
+startzeile:=0.objektindatei:int(subtext(zeile,2,pos(zeile,kleinr)-1)).
+objektinmaske:int(standardmaskenfeld(zobjkl)).regelindatei:int(subtext(zeile,
+pos(zeile,kleinr)+1)).regelinmaske:int(standardmaskenfeld(zregnr)).
+pruefenobdateiendesonstnaechstenlesen:IF lvi=anzahlTHEN startzeile:=0;LEAVE
+startzeileregellistebestimmenELSE lviINCR 1;toline(f,lvi);readrecord(f,zeile)
+;FI .END PROC startzeileregellistebestimmen;PROC variablenlistezeigen:forget(
+filenamevliste,quiet);datname:=filenamevliste;f:=sequentialfile(output,
+datname);FOR lvfFROM 1UPTO maxvariablenREP getsteuercode(lvf,dvrname,
+dvrlaenge,dvrrechts,dvrdruckvar);IF dvrname<>niltextTHEN
+listedervariablenzusammenstellen;FI PER ;IF lines(f)=0THEN meldeauffaellig(
+aktuellemaske,meldungkeinevariablen);return(1)ELSE meldeauffaellig(
+aktuellemaske,meldunglistenerstellung);listeeinmalgezeigt:=FALSE ;
+startzeilevariablenlistebestimmen(datname);IF startzeile=0THEN
+meldeauffaellig(aktuellemaske,meldungkeineliste);return(1)ELSE
+setzedruckausgabelistenauswahl(TRUE );listezeigen(datname)FI FI END PROC
+variablenlistezeigen;PROC listedervariablenzusammenstellen:zeile:=text(lvf);
+zeileCAT trenner;zeileCAT dvrname;putline(f,text(zeile,ausgabelaenge))END
+PROC listedervariablenzusammenstellen;PROC startzeilevariablenlistebestimmen(
+TEXT VAR fname):INT VAR lv;f:=sequentialfile(modify,fname);FOR lvFROM 1UPTO
+lines(f)REP toline(f,lv);readrecord(f,zeile);IF int(subtext(zeile,1,pos(zeile
+,trenner)-1))>=int(standardmaskenfeld(vnummer))THEN startzeile:=lv;LEAVE
+startzeilevariablenlistebestimmenFI PER ;startzeile:=0END PROC
+startzeilevariablenlistebestimmen;PROC listezeigen(TEXT CONST dateiname):LET
+listenmaskenname="mu objektliste";initobli;initmaske(aktmaske,
+listenmaskenname);standardstartproc(listenmaskenname);f:=sequentialfile(
+modify,dateiname);zeilenindatei:=lines(f);seitezeigenEND PROC listezeigen;
+PROC inlisteblaettern(INT CONST wohin):SELECT wohinOF CASE andenanfang:
+andendateianfangCASE andasende:andasdateiendeCASE vorwaerts:
+vorwaertsblaetternindateiCASE rueckwaerts:rueckwaertsblaetternindateiEND
+SELECT ;.andendateianfang:IF startzeile<>1THEN startzeile:=1;seitezeigenELSE
+zurueck;FI .andasdateiende:IF startzeile<zeilenindatei-zeileninliste+1THEN
+startzeile:=zeilenindatei-zeileninliste+1;seitezeigenELSE zurueck;FI .
+vorwaertsblaetternindatei:IF startzeile<zeilenindatei-zeileninliste+1THEN
+startzeileINCR zeileninliste;seitezeigenELSE zurueck;FI .
+rueckwaertsblaetternindatei:IF startzeile>zeileninlisteTHEN startzeileDECR
+zeileninliste;seitezeigenELSE andendateianfangFI .END PROC inlisteblaettern;
+PROC seitezeigen:FOR lvfFROM 1UPTO zeileninlisteREP IF startzeile+lvf-1<=
+zeilenindateiTHEN toline(f,startzeile+lvf-1);readrecord(f,zeile);posi:=pos(
+zeile,vergleichtrenner);IF posi>0THEN standardmaskenfeld(subtext(zeile,1,posi
+-1),lvf*2+1);standardmaskenfeld(subtext(zeile,posi+lt),lvf*2);ELSE
+standardmaskenfeld(zeile,lvf*2+1);standardmaskenfeld(niltext,lvf*2);FI ;
+feldfrei(lvf*2)ELSE standardmaskenfeld(text(niltext,ausgabelaenge),lvf*2+1);
+standardmaskenfeld(niltext,lvf*2);feldschutz(lvf*2)FI PER ;END PROC
+seitezeigen;PROC maskenwertesichern:FOR lvfFROM 1UPTO zeileninlisteREP IF
+standardmaskenfeld(lvf*2+1)<>ausgabelaenge*blankTHEN zeile:=
+standardmaskenfeld(lvf*2+1);zeileCAT vergleichtrenner;zeileCAT
+standardmaskenfeld(lvf*2);toline(f,startzeile+lvf-1);writerecord(f,zeile)FI
+PER END PROC maskenwertesichern;PROC behandlungderausgesuchten(PROC (INT
+CONST )wastun,ROW 100TEXT VAR feld,INT CONST womit):BOOL VAR ok:=FALSE ;init(
+feld);wertholen(womit,ok);IF okTHEN feldervorbelegen;wastun(womit);ELSE
+meldeauffaellig(aktuellemaske,meldungletzterwert);zurueck;
+setzedruckausgabelistenauswahl(FALSE );forget(datname,quiet);
+listeeinmalgezeigt:=FALSE ;enter(2)#rueckschrittevorproc(2)dr01.08.88#FI .
+feldervorbelegen:SELECT womitOF CASE zugriffsregeln:feld[zobjkl]:=wert1;feld[
+zregnr]:=wert2;CASE druckvariablen:feld[vnummer]:=wert1END SELECT .END PROC
+behandlungderausgesuchten;PROC wertholen(INT CONST wozu,BOOL VAR nochda):g:=
+sequentialfile(modify,datname);#dr01.08.88#nochda:=lines(g)>0;IF NOT nochda
+THEN LEAVE wertholenELSE toline(g,1);WHILE lines(g)>0REP readrecord(g,zeile);
+posi:=pos(zeile,vergleichtrenner);deleterecord(g);UNTIL posi>0CAND subtext(
+zeile,posi+lt)<>niltextPER ;IF lines(g)>0THEN werteermittelnELIF posi>0CAND
+subtext(zeile,posi+lt)<>niltextTHEN werteermittelnELSE nochda:=FALSE FI FI .
+werteermitteln:SELECT wozuOF CASE zugriffsregeln:objektundregelermittelnCASE
+druckvariablen:variablennummerermittelnEND SELECT .objektundregelermitteln:
+wert1:=subtext(zeile,pos(zeile,kleink)+1,pos(zeile,kleinr)-1);wert2:=subtext(
+zeile,pos(zeile,kleinr)+1,pos(zeile,blank)-1).variablennummerermitteln:wert1
+:=subtext(zeile,1,pos(zeile,trenner)-1);wert2:=niltext.END PROC wertholen;
+PROC rueckschrittevorproc(INT CONST wieviele):BOOL VAR b:=TRUE ;schritte:=
+wieviele;WHILE bREP IF listeeinmalgezeigtTHEN schritteINCR 1;b:=FALSE ELSE #
+dr01.08.88#b:=listederdruckausgabengezeigt;listeeinmalgezeigt:=TRUE FI PER ;
+listeeinmalgezeigt:=listederdruckausgabengezeigt;enter(schritte)END PROC
+rueckschrittevorproc;PROC rueckschrittenachproc(INT CONST wieviele):return(
+wieviele);END PROC rueckschrittenachproc;PROC nummerderdruckausgabesetzen(
+TEXT VAR nr):FOR lvfFROM 1UPTO lines(f)REP toline(f,lvf);readrecord(f,zeile);
+posi:=pos(zeile,vergleichtrenner);IF posi>0CAND subtext(zeile,posi+lt)<>
+niltextTHEN nr:=subtext(zeile,1,pos(zeile," = ")-1);LEAVE
+nummerderdruckausgabesetzenFI ;PER END PROC nummerderdruckausgabesetzen;BOOL
+PROC nureinedruckausgabeangekreuzt:BOOL VAR angekreuzt:=FALSE ;f:=
+sequentialfile(modify,filenamedliste);FOR lvfFROM 1UPTO lines(f)REP toline(f,
+lvf);readrecord(f,zeile);posi:=pos(zeile,vergleichtrenner);IF posi>0CAND
+subtext(zeile,posi+lt)<>niltextTHEN IF angekreuztTHEN LEAVE
+nureinedruckausgabeangekreuztWITH FALSE ELSE angekreuzt:=TRUE FI FI PER ;
+angekreuztEND PROC nureinedruckausgabeangekreuzt;PROC
+sichernundhilfsfilesloeschen:putform;hilfsfilesloeschenEND PROC
+sichernundhilfsfilesloeschen;PROC hilfsfilesloeschen:forget(filenamezug,quiet
+);forget(filenamesel,quiet);forget(filenamedruck,quiet);forget(filenamedliste
+,quiet)END PROC hilfsfilesloeschen;PROC erfassungdruckausgabe(INT CONST n):
+LET trenner=" = ";LET laengezeile=71;TEXT VAR identizeile;identizeile:=wert(
+fnridanummer)+trenner+wert(fnridaname);identizeile:=text(identizeile,
+laengezeile);setzeidentiwert(identizeilemitschluesselanhang).
+identizeilemitschluesselanhang:identizeile+oblitrenner+wert(fnridanummer).
+END PROC erfassungdruckausgabe;PROC init(ROW 100TEXT VAR feld):INT VAR i;FOR
+iFROM 1UPTO 100REP feld(i):=""PER END PROC init;PROC put(TAG CONST maske,ROW
+100TEXT CONST feld,INT CONST letztesfeld):INT VAR lv;FOR lvFROM 2UPTO
+letztesfeldREP IF fieldexists(maske,lv)THEN put(maske,feld[lv],lv)FI PER END
+PROC put;PROC setzeaktuellemaske(TAG CONST welchemaske):aktmaske:=welchemaske
+END PROC setzeaktuellemaske;TAG PROC aktuellemaske:aktmaskeEND PROC
+aktuellemaske;PROC setzedruckausgabelistenauswahl(BOOL CONST b):listenauswahl
+:=bEND PROC setzedruckausgabelistenauswahl;BOOL PROC
+listederdruckausgabengezeigt:listegezeigtEND PROC
+listederdruckausgabengezeigt;PROC setzelistederdruckausgabengezeigt(BOOL
+CONST b):listegezeigt:=bEND PROC setzelistederdruckausgabengezeigt;BOOL PROC
+druckausgabelistenauswahl:listenauswahlEND PROC druckausgabelistenauswahl;
+PROC regelnsortieren:INT VAR lv,anzahl;anzahl:=lines(f);blanksentfernen;sort(
+filenamezliste);moeglicherweisenachsortieren.blanksentfernen:FOR lvFROM 1
+UPTO anzahlREP toline(f,lv);readrecord(f,zeile);changeall(zeile," ","");
+writerecord(f,text(zeile,ausgabelaenge))PER .moeglicherweisenachsortieren:
+FOR lvFROM 1UPTO anzahlREP toline(f,1);readrecord(f,zeile);IF subtext(zeile,2
+,2)="1"THEN deleterecord(f);toline(f,anzahl);insertrecord(f);writerecord(f,
+text(zeile,ausgabelaenge))ELSE LEAVE regelnsortierenFI PER .END PROC
+regelnsortieren;END PACKET ispidagrundfunktionen;
+
diff --git a/app/schulis/2.2.1/src/6.ida.plausi b/app/schulis/2.2.1/src/6.ida.plausi
new file mode 100644
index 0000000..b25272d
--- /dev/null
+++ b/app/schulis/2.2.1/src/6.ida.plausi
@@ -0,0 +1,114 @@
+PACKET ispidaplausiDEFINES nameundtypok,selektionswerteok,zugriffsregelnok,
+meldefehlernameundtyp,nummerinrichtigengrenzen,nummernummerisch,checktyp:LET
+filenamesel="Hilfsdatei.Selektion",filenamezug="Hilfsdatei.Zugriff",
+filenamedata="FORMDATA.",filenameform="FORMTEXT.";LET meldungalternative=56,
+meldungungueltigeangaben=204,meldungdgibtesschon=205,meldungfalschenummer=207
+,meldungnamezulang=216,meldungnichterstezeile=252,meldungkeingeschlindex=253,
+meldungkeinfeldname=254,meldungkeinanfuehrzeichen=255,meldungfalscherfeldtypn
+=256,meldungfalscherfeldtypw=257,meldungletzterkeinvgl=258,
+meldungfalschervergleich=259,meldungfalscheroperator=260,
+meldungfalscheverkettung=261;LET ntnummer=2,ntname=3,ntliste=4,nteinzel=5;
+LET vergleichtrenner="</>",namentrenner="<#>",zeilennrtrenner="<!>",
+anzahltrenner="<?>",gueltigeziffern="0123456789",anfuehrung="""",niltext="";
+LET namenlaenge=46,kleinstedruckausgabe=1,groesstedruckausgabe=100,tl=3;LET
+anzzeilenregeln=16,anzzeilenselektionen=17;FILE VAR f;INT VAR
+fehlermldnametyp:=0;INT VAR zeilennr;TEXT VAR zeile,pattern;BOOL PROC
+nameundtypok(ROW 100TEXT CONST feld,INT VAR fnr):IF
+nummerderdruckausgabegeaendertTHEN ausstiegbeifalschernummer;
+ausstiegfallsschonvorhandenFI ;ausstiegbeizulangemnamen;TRUE .
+nummerderdruckausgabegeaendert:getactivformular<>int(feld[ntnummer]).
+ausstiegbeifalschernummer:IF NOT nummerinrichtigengrenzen(feld[ntnummer])
+THEN fehlermldnametyp:=meldungfalschenummer;fnr:=ntnummer;LEAVE nameundtypok
+WITH FALSE FI .ausstiegfallsschonvorhanden:IF formexists(int(feld[ntnummer]))
+THEN fehlermldnametyp:=meldungdgibtesschon;fnr:=ntnummer;LEAVE nameundtypok
+WITH FALSE ELSE rename(filenamedata+text(getactivformular),filenamedata+feld[
+ntnummer]);rename(filenameform+text(getactivformular),filenameform+feld[
+ntnummer]);delform(getactivformular);openformular(int(feld[ntnummer]))FI .
+ausstiegbeizulangemnamen:IF length(feld[ntname])>namenlaengeTHEN
+fehlermldnametyp:=meldungnamezulang;fnr:=ntname;LEAVE nameundtypokWITH FALSE
+FI .END PROC nameundtypok;BOOL PROC nummerinrichtigengrenzen(TEXT CONST nr):
+nummernummerisch(nr)CAND int(nr)>=kleinstedruckausgabeCAND int(nr)<=
+groesstedruckausgabeEND PROC nummerinrichtigengrenzen;BOOL PROC
+nummernummerisch(TEXT CONST nr):INT VAR lv;IF length(nr)=0#dr02.05.88#THEN
+LEAVE nummernummerischWITH FALSE ELSE FOR lvFROM 1UPTO length(nr)REP IF pos(
+gueltigeziffern,nrSUB lv)=0THEN LEAVE nummernummerischWITH FALSE FI PER ;FI ;
+TRUE END PROC nummernummerisch;PROC meldefehlernameundtyp:meldeauffaellig(
+aktuellemaske,fehlermldnametyp);fehlermldnametyp:=0END PROC
+meldefehlernameundtyp;BOOL PROC selektionswerteok(INT CONST dnr,INT VAR fehls
+,fehlz,fehlm):INT VAR lvf;TEXT VAR sfeldname,svergleichswert;BOOL VAR ok;f:=
+sequentialfile(modify,filenamesel);FOR lvfFROM 1UPTO anzattr(dnr)REP toline(f
+,lvf);readrecord(f,zeile);sfeldname:=subtext(zeile,1,pos(zeile,
+zeilennrtrenner)-1);svergleichswert:=subtext(zeile,pos(zeile,vergleichtrenner
+)+tl);IF svergleichswert<>niltextTHEN IF NOT vergleichswertokTHEN fehls:=lvf
+DIV anzzeilenselektionen+1;fehlz:=lvfMOD anzzeilenselektionen;LEAVE
+selektionswerteokWITH FALSE FI FI PER ;TRUE .vergleichswertok:
+pruefeselektionswert(sfeldname,svergleichswert,ok,fehlm);ok.END PROC
+selektionswerteok;PROC pruefeselektionswert(TEXT CONST vglname,vglwert,BOOL
+VAR bool,INT VAR fehlm):LET bold=2,textstring=4,operator=5,scanende=7,
+gueltigeoperatoren="<$<=$<>$>$>=$=",gueltigeverkettung="$UND$ODER$";BOOL VAR
+op:=FALSE ,vgl:=FALSE ,vkt:=TRUE ;INT VAR type:=0,typesich:=0;TEXT VAR symbol
+:="",twert:=compress(vglwert),tname:=compress(vglname);IF
+keineanfuehrungszeichenTHEN fehlm:=meldungkeinanfuehrzeichen;ausstiegmitfalse
+ELSE pruefendervergleiche;IF typesich<>textstringTHEN fehlm:=
+meldungletzterkeinvgl;ausstiegmitfalseELSE bool:=TRUE FI FI .
+keineanfuehrungszeichen:pos(twert,anfuehrung)=0.pruefendervergleiche:scan(
+twert);WHILE type<>scanendeREP nextsymbol(symbol,type);SELECT typeOF CASE
+bold:verkettungueberpruefenCASE textstring:textueberpruefenCASE operator:
+operatorueberpruefenCASE scanende:LEAVE pruefendervergleicheOTHERWISE :fehlm
+:=meldungungueltigeangaben;ausstiegmitfalseEND SELECT ;typesich:=typePER .
+operatorueberpruefen:IF opOR NOT vktOR (NOT opAND pos(gueltigeoperatoren,
+symbol)=0)THEN fehlm:=meldungfalscheroperator;ausstiegmitfalseELSE op:=TRUE ;
+FI .textueberpruefen:IF vglOR NOT opOR NOT checktyp(tname,symbol)THEN fehlm:=
+meldungfalschervergleich;ausstiegmitfalseELSE vgl:=TRUE ;vkt:=FALSE FI .
+verkettungueberpruefen:INT VAR posi:=pos(gueltigeverkettung,symbol);IF vktOR
+NOT opOR NOT vglOR posi=0OR (posi<>0AND (((gueltigeverkettungSUB posi-1)<>"$"
+)OR ((gueltigeverkettungSUB posi+length(symbol))<>"$")))THEN fehlm:=
+meldungfalscheverkettung;ausstiegmitfalseELSE vkt:=TRUE ;op:=FALSE ;vgl:=
+FALSE FI .ausstiegmitfalse:bool:=FALSE ;LEAVE pruefeselektionswert.END PROC
+pruefeselektionswert;BOOL PROC zugriffsregelnok(INT VAR fehlseite,fehlzeile,
+fehlmeld):f:=sequentialfile(modify,filenamezug);toline(f,1);pattern:=
+vergleichtrenner;readrecord(f,zeile);zeilennr:=1;IF pos(zeile,pattern)>0THEN
+diesesistersteindexzeileCAND nurfelderausdiesemindexgewaehlt(fehlseite,
+fehlzeile,fehlmeld)ELSE down(f,pattern);IF patternfoundTHEN zeilennr:=lineno(
+f);readrecord(f,zeile);diesesistersteindexzeileCAND
+nurfelderausdiesemindexgewaehlt(fehlseite,fehlzeile,fehlmeld)ELSE TRUE FI FI
+.diesesistersteindexzeile:fehlseite:=zeilennrDIV anzzeilenregeln+1;fehlzeile
+:=zeilennrMOD anzzeilenregeln;fehlmeld:=meldungnichterstezeile;pos(zeile,
+anzahltrenner)<>0.END PROC zugriffsregelnok;BOOL PROC
+nurfelderausdiesemindexgewaehlt(INT VAR fehls,fehlz,fehlm):INT VAR merker:=0,
+lv,anzfelder;TEXT VAR twert:="",tname:="";anzfelder:=int(subtext(zeile,pos(
+zeile,anzahltrenner)+tl,pos(zeile,namentrenner)-1));FOR lvFROM zeilennrUPTO
+zeilennr+anzfelder-1REP toline(f,lv);readrecord(f,zeile);IF pos(zeile,pattern
+)>0THEN IF merker=1THEN fehls:=((lv-1)DIV anzzeilenregeln)+1;fehlz:=(lv-1)
+MOD anzzeilenregeln;fehlm:=meldungkeingeschlindex;LEAVE
+nurfelderausdiesemindexgewaehltWITH FALSE ELSE vergleichswertpruefenFI ELSE
+merker:=1;FI PER ;IF lines(f)=1OR lines(f)=lineno(f)THEN LEAVE
+nurfelderausdiesemindexgewaehltWITH TRUE ELSE down(f);down(f,pattern)FI ;
+fehls:=lineno(f)DIV anzzeilenregeln+1;fehlz:=lineno(f)MOD anzzeilenregeln;
+fehlm:=meldungkeingeschlindex;NOT patternfound.vergleichswertpruefen:twert:=
+compress(subtext(zeile,pos(zeile,pattern)+tl));tname:=compress(subtext(zeile,
+pos(zeile,namentrenner)+tl,pos(zeile,zeilennrtrenner)-1));IF
+ersteszeichenkeinanfuehrungszeichenTHEN stopbeifalschemnamen(FALSE );IF
+eingabekeinfeldnameTHEN fehls:=lvDIV anzzeilenregeln+1;fehlz:=lvMOD
+anzzeilenregeln;fehlm:=meldungkeinfeldname;LEAVE
+nurfelderausdiesemindexgewaehltWITH FALSE ELSE feldtypueberpruefenFI ;
+stopbeifalschemnamen(TRUE );ELSE IF letzteszeichenkeinanfuehrungszeichenTHEN
+fehls:=lvDIV anzzeilenregeln+1;fehlz:=lvMOD anzzeilenregeln;fehlm:=
+meldungkeinanfuehrzeichen;LEAVE nurfelderausdiesemindexgewaehltWITH FALSE
+ELSE eingabemitfeldtypvergleichenFI ;FI .ersteszeichenkeinanfuehrungszeichen:
+(twertSUB 1)<>anfuehrung.eingabekeinfeldname:feldnr(twert)=0.
+feldtypueberpruefen:IF feldtyp(feldnr(twert))<>feldtyp(feldnr(tname))THEN
+fehls:=lvDIV anzzeilenregeln+1;fehlz:=lvMOD anzzeilenregeln;fehlm:=
+meldungfalscherfeldtypn;LEAVE nurfelderausdiesemindexgewaehltWITH FALSE FI .
+letzteszeichenkeinanfuehrungszeichen:(twertSUB length(twert))<>anfuehrung.
+eingabemitfeldtypvergleichen:twert:=subtext(twert,2,length(twert)-1);IF NOT
+checktyp(tname,twert)THEN fehls:=lvDIV anzzeilenregeln+1;fehlz:=lvMOD
+anzzeilenregeln;fehlm:=meldungfalscherfeldtypw;LEAVE
+nurfelderausdiesemindexgewaehltWITH FALSE FI .END PROC
+nurfelderausdiesemindexgewaehlt;BOOL PROC checktyp(TEXT CONST fname,
+fvergleich):LET integer=73,realwert=82,datum=68;disablestop;SELECT feldtyp(
+feldnr(fname))OF CASE integer:INT VAR i:=int(fvergleich)CASE realwert:REAL
+VAR r:=real(fvergleich)CASE datum:REAL VAR d:=date(fvergleich)END SELECT ;IF
+iserrorCOR NOT lastconversionokTHEN clearerror;enablestop;LEAVE checktypWITH
+FALSE FI ;enablestop;TRUE END PROC checktyp;END PACKET ispidaplausi;
+
diff --git a/app/schulis/2.2.1/src/insert schulis b/app/schulis/2.2.1/src/insert schulis
new file mode 100644
index 0000000..a28c829
--- /dev/null
+++ b/app/schulis/2.2.1/src/insert schulis
@@ -0,0 +1,472 @@
+LET versionsnummer=" 2.2.1";INT VAR kanal:=0,meinestation:=0;ROW 2TEXT VAR
+ausbaustufe;ausbaustufe(1):="0,1,6,";ausbaustufe(2):="0,1,6,3,4,2,5,";INT
+VAR ausbaustufenr:=1;LET teilsystem4="4",teilsystem6="6",teilsystem2="2",
+teilsystem5="5";LET praefixtrenner=".",teilsystemtrenner=",",allgemeinedatei=
+"0";TEXT VAR gueltigepraefixe:=",";TEXT VAR installverzeichnis:="";TASK VAR
+tasksourcequelle,testtask;BOOL VAR fehlerbeiinsert:=FALSE ,
+idanichtinstallierbar:=FALSE ;LET stundenplanpraefix="Stundenplan-*";LET
+kurswahlpraefix="Kurswahl-*";TEXT VAR qtt:="SCHULIS-Quellen";page;TEXT VAR
+procaufruf1:="setze schulis zeichensatz(""",procaufruf2:=
+"setze ida zeichensatz(""",procaufrufende:=""")",gewzeichensatz:="";BOOL VAR
+exists:=TRUE ;disablestop;gewzeichensatz:=font(1);IF iserrorTHEN clearerror;
+line;putline("Vor Installation bitte Fonttabelle in "+
+"Task 'configurator' laden!");enablestop;ELSE enablestop;WHILE existsREP page
+;cursor(10,10);put("Bitte gewünschten Schrifttyp für Listen und andere");
+cursor(10,11);put("Druckausgaben angeben : ");editget(gewzeichensatz);exists
+:=NOT fontexists(gewzeichensatz)PER ;procaufruf1CAT gewzeichensatz;
+procaufruf1CAT procaufrufende;procaufruf2CAT gewzeichensatz;procaufruf2CAT
+procaufrufende;startinsertinggesamtsystem;commanddialogue(FALSE );forget(all)
+;commanddialogue(TRUE );FI ;BOOL PROC einzurichten(TEXT CONST teilsystemnr):
+pos(gueltigepraefixe,teilsystemtrenner+teilsystemnr+teilsystemtrenner)>0END
+PROC einzurichten;TEXT PROC inv(TEXT CONST txt):""+txt+"�"ENDPROC inv;PROC
+startinsertinggesamtsystem:TASK VAR t;INT VAR msgcode;DATASPACE VAR ds:=
+nilspace;maske;maskentexteinitialisieren;maskentexte;IF NOT maskeeditiert
+THEN LEAVE startinsertinggesamtsystemFI ;line;kanal:=channel;taskpassword(
+taskpasswort);beginpassword(beginnpasswort);fetch((ALL sourcetaskbaisydb)
+LIKE "*BAISY-0",sourcetaskbaisydb);INT VAR pospraefixende;THESAURUS VAR thes
+:=allLIKE "*.BAISY-0";TEXT VAR datenraumname;INT VAR indexthes:=0;get(thes,
+datenraumname,indexthes);WHILE indexthes>0REP pospraefixende:=pos(
+datenraumname,praefixtrenner);ausbaustufenr:=int(subtext(datenraumname,1,
+pospraefixende-1));forget(datenraumname,quiet);get(thes,datenraumname,
+indexthes)PER ;gueltigepraefixeCAT ausbaustufe(ausbaustufenr);
+tasksourcequelle:=sourcetaskbaisy;checkoff;fetchundinsert("BASIS.files");
+break(quiet);disablestop;IF NOT fehlerbeiinsertTHEN begin("ACCESS",PROC
+startinsertingaccess,t);call(t,0,ds,msgcode);IF msgcode=0THEN fehlerbeiinsert
+:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin("baisy server",PROC
+startinsertingbaisyserver,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin("ida server",
+PROC startinsertingidaserver,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin(
+"anschreiben server",PROC startinsertinganschreibenserver,t);call(t,0,ds,
+msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT
+fehlerbeiinsertTHEN begin("statistik server",PROC
+startinsertingstatistikserver,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin(
+"kurswahl server",PROC startinsertingkurswahlserver,t);call(t,0,ds,msgcode);
+IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN
+begin("stundenplan server",PROC startinsertingstundenplanserver,t);call(t,0,
+ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT
+fehlerbeiinsertTHEN begin("DB.kom",PROC startinsertingdbkom,t);call(t,0,ds,
+msgcode);IF msgcodeMOD 2=0THEN fehlerbeiinsert:=TRUE FI ;IF msgcode>=2THEN
+idanichtinstallierbar:=TRUE FI FI ;clearerror;enablestop;continue(kanal);
+putline("Hier ist wieder "+name(myself));putline("SCHULIS ist "+fehler+
+" eingerichtet !");IF idanichtinstallierbarTHEN putline(
+"Das Modul ""Anwenderspezifische Druckausgaben"" wurde nicht eingerichtet,");
+putline("da die EUMEL-Textverarbeitung fehlt !");lineFI ;IF NOT
+fehlerbeiinsertTHEN putline(
+"Bitte Task ""isp.archive"" unter SYSUR einrichten!");putline(
+"Bitte Task ""LOG"" unter SYSUR einrichten! <RETURN>")ELSE putline(
+"Bitte beliebige Taste (außer STOP und SV) drücken !")FI ;pause;
+freeglobalmanager.fehler:IF fehlerbeiinsertTHEN "FEHLERHAFT"ELSE
+"ordnungsgemäß"FI .END PROC startinsertinggesamtsystem;PROC
+startinsertingbaisyserver:TASK VAR ruftask;INT VAR msgcodert;DATASPACE VAR
+dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline(name
+(myself));tasksourcequelle:=sourcetaskbaisy;line;IF taskpasswort=""THEN
+taskpassword("-")ELSE taskpassword(taskpasswort)FI ;beginpassword(
+beginnpasswort);disablestop;fetch((ALL sourcetaskbaisydb)LIKE "*BAISY-*",
+sourcetaskbaisydb);INT VAR pospraefixende;THESAURUS VAR thes:=allLIKE (text(
+ausbaustufenr)+".BAISY-*");TEXT VAR datenraumname,neuername;INT VAR indexthes
+:=0;get(thes,datenraumname,indexthes);WHILE indexthes>0REP pospraefixende:=
+pos(datenraumname,praefixtrenner);neuername:=subtext(datenraumname,
+pospraefixende+1);rename(datenraumname,neuername);get(thes,datenraumname,
+indexthes)PER ;fetchundinsert("BAISY SERVER.files");IF iserrorTHEN putline(
+errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;putline(name(
+myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0
+ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do("baisy server")END PROC
+startinsertingbaisyserver;PROC startinsertingidaserver:TASK VAR ruftask;INT
+VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);
+continue(kanal);line;putline(name(myself));tasksourcequelle:=
+sourcetaskschulis;#fehlerbeiinsert:=FALSE ;#line;IF taskpasswort=""THEN
+taskpassword("-")ELSE taskpassword(taskpasswort)FI ;beginpassword(
+beginnpasswort);disablestop;fetchundinsert("0.IDA SERVER.files");IF iserror
+THEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;
+putline(name(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN
+msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do("ida server"
+)END PROC startinsertingidaserver;PROC startinsertingstundenplanserver:TASK
+VAR ruftask;INT VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,
+msgcodert,ruftask);continue(kanal);line;putline(name(myself));#
+fehlerbeiinsert:=FALSE ;#line;taskpassword("-");beginpassword("-");fetch((
+ALL sourcetaskschulisdb)LIKE stundenplanpraefix,sourcetaskschulisdb);putline(
+name(myself)+" ist komplett.");break(quiet);msgcodert:=1;send(ruftask,
+msgcodert,dsrt);freeglobalmanager;END PROC startinsertingstundenplanserver;
+PROC startinsertingstatistikserver:TASK VAR ruftask;INT VAR msgcodert;
+DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);
+line;putline(name(myself));tasksourcequelle:=sourcetaskschulis;#
+fehlerbeiinsert:=FALSE ;#line;IF taskpasswort=""THEN taskpassword("-")ELSE
+taskpassword(taskpasswort)FI ;beginpassword(beginnpasswort);disablestop;
+fetchundinsert("5.STATISTIK SERVER.files");IF iserrorTHEN putline(
+errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;putline(name(
+myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0
+ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do("statistik manager")END
+PROC startinsertingstatistikserver;PROC startinsertingkurswahlserver:TASK
+VAR ruftask;INT VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,
+msgcodert,ruftask);continue(kanal);line;putline(name(myself));#
+fehlerbeiinsert:=FALSE ;#line;taskpassword("-");beginpassword("-");fetch((
+ALL sourcetaskschulisdb)LIKE kurswahlpraefix,sourcetaskschulisdb);putline(
+name(myself)+" ist komplett.");break(quiet);msgcodert:=1;send(ruftask,
+msgcodert,dsrt);freeglobalmanager;END PROC startinsertingkurswahlserver;PROC
+startinsertinganschreibenserver:TASK VAR ruftask;INT VAR msgcodert;DATASPACE
+VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline(
+name(myself));#fehlerbeiinsert:=FALSE ;#line;taskpassword(taskpasswort);
+beginpassword(beginnpasswort);disablestop;fetch("VORDRUCKE.files",
+sourcetaskvordrucke);fetch(ALL "VORDRUCKE.files",sourcetaskvordrucke);
+clearerror;enablestop;putline(name(myself)+" ist komplett.");break(quiet);
+msgcodert:=1;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC
+startinsertinganschreibenserver;PROC startinsertingdbdd:TASK VAR t,ruftask;
+INT VAR msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt
+,msgcodert,ruftask);continue(kanal);line;putline(name(myself));line;
+taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop;
+tasksourcequelle:=sourcetaskschulis;fetchundinsert("0.IDA SICHERUNG.files");
+tasksourcequelle:=sourcetaskbaisy;fetchundinsert("SICHERUNG.files");do(
+"postfix ("""")");do("ausgabe namen");do("kf (TRUE)");IF iserrorTHEN putline(
+errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;IF NOT
+fehlerbeiinsertTHEN erzeugeeumelbasebaisy;erzeugeeumelbaseschulis;FI ;break(
+quiet);IF NOT fehlerbeiinsertTHEN begin("statistik sicherung",PROC
+startinsertingstatistiksich,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin(
+"schulis sicherung",PROC startinsertingschulissich,t);call(t,0,ds,msgcode);
+IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN
+begin("baisy sicherung",PROC startinsertingbaisysich,t);call(t,0,ds,msgcode);
+IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN
+begin("ida sicherung",PROC startinsertingidasich,t);call(t,0,ds,msgcode);IF
+msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF fehlerbeiinsertTHEN msgcodert
+:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanagerEND
+PROC startinsertingdbdd;PROC startinsertingstatistiksich:TASK VAR ruftask;
+INT VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);
+continue(kanal);line;putline(name(myself));line;taskpassword(taskpasswort);
+beginpassword(beginnpasswort);break(quiet);msgcodert:=1;send(ruftask,
+msgcodert,dsrt);do("statistik(TRUE)");do(" postfix ("""") ");commanddialogue(
+FALSE );do("isp monitor sicherungstask(""Statistik"")")END PROC
+startinsertingstatistiksich;PROC startinsertingidasich:TASK VAR ruftask;INT
+VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);
+continue(kanal);line;putline(name(myself));line;taskpassword(taskpasswort);
+beginpassword(beginnpasswort);break(quiet);msgcodert:=1;send(ruftask,
+msgcodert,dsrt);do("ida(TRUE)");do("open mit loeschen (FALSE)");do(
+" postfix ("""") ");do(" fetch dd (""EUMELbase.schulis"") ");do(
+" BOOL VAR b:: db open (""EUMELbase.schulis"") ");commanddialogue(FALSE );do(
+"isp monitor sicherungstask(""EUMELbase.schulis"")")ENDPROC
+startinsertingidasich;PROC startinsertingschulissich:TASK VAR ruftask;INT
+VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);
+continue(kanal);line;putline(name(myself));line;taskpassword(taskpasswort);
+beginpassword(beginnpasswort);tasksourcequelle:=sourcetaskschulisdb;fetch((
+ALL tasksourcequelle)LIKE "EUMELbase.schulis*",tasksourcequelle);break(quiet)
+;msgcodert:=1;send(ruftask,msgcodert,dsrt);do(
+"isp monitor sicherungstask(""EUMELbase.schulis"")")ENDPROC
+startinsertingschulissich;PROC startinsertingbaisysich:TASK VAR ruftask;INT
+VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);
+continue(kanal);line;putline(name(myself));line;taskpassword(taskpasswort);
+beginpassword(beginnpasswort);tasksourcequelle:=sourcetaskbaisydb;fetch((ALL
+tasksourcequelle)LIKE "EUMELbase.baisy*",tasksourcequelle);fetch((ALL
+tasksourcequelle)LIKE "*BAISY-*",tasksourcequelle);rename(text(ausbaustufenr)
++".BAISY-0","BAISY-0");rename(text(ausbaustufenr)+".BAISY-1","BAISY-1");break
+(quiet);msgcodert:=1;send(ruftask,msgcodert,dsrt);do(
+"isp monitor sicherungstask(""EUMELbase.baisy"")")ENDPROC
+startinsertingbaisysich;PROC startinsertingdbkom:TASK VAR t,ruftask;INT VAR
+msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt,
+msgcodert,ruftask);continue(kanal);line;putline(name(myself));
+tasksourcequelle:=sourcetaskbaisy;#fehlerbeiinsert:=FALSE ;#
+idanichtinstallierbar:=FALSE ;line;taskpassword(taskpasswort);beginpassword(
+beginnpasswort);disablestop;fetch("EUMELbase.schulis",sourcetaskschulisdb);
+fetchundinsert("DB.files");IF iserrorTHEN putline(errormessage);clearerror;
+fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN
+begin("DB.dd",PROC startinsertingdbdd,t);call(t,0,ds,msgcode);IF msgcode=0
+THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin(
+"standard",PROC startinsertingstandard,t);call(t,0,ds,msgcode);IF msgcodeMOD
+2=0THEN fehlerbeiinsert:=TRUE FI ;IF msgcode>=2THEN idanichtinstallierbar:=
+TRUE FI FI ;continue(kanal);putline(name(myself)+" ist komplett.");break(
+quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE msgcodert:=1FI ;IF
+idanichtinstallierbarTHEN msgcodert:=msgcodert+2FI ;send(ruftask,msgcodert,
+dsrt);freeglobalmanager;END PROC startinsertingdbkom;PROC
+startinsertingstandard:TASK VAR t,ruftask;INT VAR msgcodert,msgcode;
+DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt,msgcodert,ruftask);
+continue(kanal);line;putline(name(myself));tasksourcequelle:=sourcetaskbaisy;
+#fehlerbeiinsert:=FALSE ;#idanichtinstallierbar:=FALSE ;line;taskpassword(
+taskpasswort);beginpassword(beginnpasswort);disablestop;fetchundinsert(
+"STANDARD.files");IF iserrorTHEN putline(errormessage);clearerror;
+fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF einzurichten(teilsystem6
+)THEN IF NOT fehlerbeiinsertTHEN IF procexists("autopageform")THEN begin(
+"ida",PROC startinsertingida,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ELSE idanichtinstallierbar:=TRUE FI FI ;FI ;
+fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN begin(
+"anschrlist werkzeuge",PROC startinsertinganschrlistwerkzeuge,t);call(t,0,ds,
+msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=
+FALSE ;IF NOT fehlerbeiinsertTHEN begin("erfassungen",PROC
+startinsertingerfassungen,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsert
+THEN begin("anwendung",PROC startinsertinganwendung,t);call(t,0,ds,msgcode);
+IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;continue(kanal);putline(name(
+myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0
+ELSE msgcodert:=1FI ;IF idanichtinstallierbarTHEN msgcodert:=msgcodert+2FI ;
+send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC
+startinsertingstandard;PROC startinsertingaccess:TASK VAR t,ruftask;INT VAR
+msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt,
+msgcodert,ruftask);continue(kanal);line;putline(name(myself));
+tasksourcequelle:=sourcetaskeumelbase;#fehlerbeiinsert:=FALSE ;#line;
+taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop;
+fetchundinsert("ACCESS.files");IF iserrorTHEN putline(errormessage);
+clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF NOT
+fehlerbeiinsertTHEN begin("LOCAL",PROC startinsertinglocal,t);call(t,0,ds,
+msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT
+fehlerbeiinsertTHEN begin("DB REORG",PROC startinsertingdbreorg,t);call(t,0,
+ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;continue(kanal);
+putline(name(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN
+msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);
+freeglobalmanagerEND PROC startinsertingaccess;PROC startinsertinglocal:TASK
+VAR t,ruftask;INT VAR msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=
+nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline(name(
+myself));tasksourcequelle:=sourcetaskschulis;line;taskpassword(taskpasswort);
+beginpassword(beginnpasswort);disablestop;fetchundinsert("0.LOCAL.files");IF
+iserrorTHEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;
+enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN begin("MM",PROC
+startinsertingmm,t);call(t,0,ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:=
+TRUE FI ;FI ;continue(kanal);putline(name(myself)+" ist komplett.");break(
+quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask,
+msgcodert,dsrt);freeglobalmanagerEND PROC startinsertinglocal;PROC
+startinsertingdbreorg:TASK VAR t,ruftask;INT VAR msgcodert,msgcode;DATASPACE
+VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);
+line;putline(name(myself));tasksourcequelle:=sourcetaskbaisy;line;
+taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop;
+fetchundinsert("DB REORG.files");IF iserrorTHEN putline(errormessage);
+clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;putline(name(myself)+
+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE
+msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do("db reorganisation manager")
+END PROC startinsertingdbreorg;PROC startinsertingmm:TASK VAR ruftask;INT
+VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);
+continue(kanal);line;putline(name(myself));tasksourcequelle:=
+sourcetaskeumelbase;line;taskpassword(taskpasswort);beginpassword(
+beginnpasswort);disablestop;fetchundinsert("MM BAISY.files");IF iserrorTHEN
+fehlerbeiinsert:=TRUE ;putline(errormessage);clearerrorFI ;enablestop;putline
+(name(myself)+" ist komplett.");enablestop;break(quiet);IF fehlerbeiinsert
+THEN msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do(
+"generate db manager")END PROC startinsertingmm;PROC erzeugeeumelbasebaisy:
+disablestop;testtask:=/"EUMELbase.baisy";IF iserrorTHEN clearerror;
+tasksourcequelle:=sourcetaskbaisydb;fetch((ALL tasksourcequelle)LIKE
+"EUMELbase.baisy*",tasksourcequelle);do(
+"BOOL VAR b:: create db (""EUMELbase.baisy"")");do(
+"restore db (""EUMELbase.baisy"")");commanddialogue(FALSE );forget(all);
+commanddialogue(TRUE );FI ;enablestopENDPROC erzeugeeumelbasebaisy;PROC
+erzeugeeumelbaseschulis:disablestop;testtask:=/"EUMELbase.schulis";IF iserror
+THEN clearerror;tasksourcequelle:=sourcetaskschulisdb;fetch((ALL
+tasksourcequelle)LIKE "EUMELbase.schulis*",tasksourcequelle);do(
+"BOOL VAR b:: create db (""EUMELbase.schulis"")");do(
+"restore db (""EUMELbase.schulis"")");commanddialogue(FALSE );forget(all);
+commanddialogue(TRUE );FI ;enablestopENDPROC erzeugeeumelbaseschulis;PROC
+startinsertinganwendung:TASK VAR ruftask,t;INT VAR msgcodert,i;DATASPACE VAR
+dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline(name
+(myself));tasksourcequelle:=sourcetaskschulis;line;taskpassword(taskpasswort)
+;beginpassword(beginnpasswort);disablestop;tasksourcequelle:=sourcetaskbaisy;
+checkoff;fetchundinsert("ANWENDUNG.files");IF iserrorTHEN putline(
+errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);
+FOR iFROM 1UPTO anzahlschulistasksREP IF NOT fehlerbeiinsertTHEN begin(
+"schulis"+text(i),PROC startschulis1,t);FI ;PER ;continue(kanal);putline(name
+(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0
+ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC
+startinsertinganwendung;PROC startinsertinganschrlistwerkzeuge:TASK VAR
+ruftask,t;INT VAR msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace
+;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline(name(myself));
+tasksourcequelle:=sourcetaskschulis;#fehlerbeiinsert:=FALSE ;#line;
+taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop;
+fetchundinsert("0.ANSCHRLISTWERKZEUGE.files");do(procaufruf1);fetchundinsert(
+"0.ANSCHRLISTWERKZEUGE TEIL2.files");IF iserrorTHEN putline(errormessage);
+clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF einzurichten(
+teilsystem5)THEN fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN
+installverzeichnis:="5.STATISTIK.files";begin("statistik",PROC
+startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;FI ;IF einzurichten(teilsystem2)THEN
+fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:=
+"2.AUSWERTUNGEN KURSWAHL.files";begin("auswertungen kurswahl",PROC
+startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;FI ;IF einzurichten(teilsystem4)THEN
+fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:=
+"4.AUSWERTUNGEN STUNDENPLAN 3.files";begin("auswertungen stundenplan 3",PROC
+startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsert
+THEN installverzeichnis:="4.AUSWERTUNGEN STUNDENPLAN 2.files";begin(
+"auswertungen stundenplan 2",PROC startinsertinganwendungstask,t);call(t,0,ds
+,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=
+FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:=
+"4.AUSWERTUNGEN STUNDENPLAN.files";begin("auswertungen stundenplan",PROC
+startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT
+fehlerbeiinsertTHEN installverzeichnis:="0.ANSCHREIBEN.files";begin(
+"anschreiben",PROC startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF
+msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT
+fehlerbeiinsertTHEN installverzeichnis:="0.LISTEN 2.files";begin("listen 2",
+PROC startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsert
+THEN installverzeichnis:="0.LISTEN.files";begin("listen",PROC
+startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;continue(kanal);putline(name(myself)+
+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE
+msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC
+startinsertinganschrlistwerkzeuge;PROC startinsertinganwendungstask:TASK VAR
+ruftask,t;INT VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,
+ruftask);continue(kanal);line;putline(name(myself));tasksourcequelle:=
+sourcetaskschulis;#fehlerbeiinsert:=FALSE ;#line;taskpassword(taskpasswort);
+beginpassword(beginnpasswort);disablestop;fetchundinsert(installverzeichnis);
+IF iserrorTHEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;
+enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN begin(name(myself)+
+" manager",PROC starteaufrufmanager,t);FI ;continue(kanal);putline(name(
+myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0
+ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC
+startinsertinganwendungstask;PROC startinsertingerfassungen:TASK VAR ruftask,
+t;INT VAR msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait(
+dsrt,msgcodert,ruftask);continue(kanal);line;putline(name(myself));
+tasksourcequelle:=sourcetaskschulis;#fehlerbeiinsert:=FALSE ;#line;
+taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop;
+fetchundinsert("0.ERFASSUNGEN.files");IF iserrorTHEN putline(errormessage);
+clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF einzurichten(
+teilsystem2)THEN fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN
+installverzeichnis:="2.ERFASSUNGEN KURSWAHL 2.files";begin(
+"erfassungen kurswahl 2",PROC startinsertinganwendungstask,t);call(t,0,ds,
+msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=
+FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:=
+"2.ERFASSUNGEN KURSWAHL.files";begin("erfassungen kurswahl",PROC
+startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;FI ;IF einzurichten(teilsystem4)THEN IF NOT
+fehlerbeiinsertTHEN installverzeichnis:="4.ERFASSUNGEN STUNDENPLAN.files";
+begin("erfassungen stundenplan",PROC startinsertingerfassungenstundenplan,t);
+call(t,0,ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;FI ;
+fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:=
+"0.ERFASSUNGEN EINZELN 2.files";begin("erfassungen einzeln 2",PROC
+startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsert
+THEN installverzeichnis:="0.ERFASSUNGEN EINZELN.files";begin(
+"erfassungen einzeln",PROC startinsertinganwendungstask,t);call(t,0,ds,
+msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=
+FALSE ;IF einzurichten(teilsystem4)THEN IF NOT fehlerbeiinsertTHEN
+installverzeichnis:="4.ERFASSUNGEN LISTENWEISE 3.files";begin(
+"erfassungen listenweise 3",PROC startinsertinganwendungstask,t);call(t,0,ds,
+msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=
+FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:=
+"4.ERFASSUNGEN LISTENWEISE 2.files";begin("erfassungen listenweise 2",PROC
+startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN
+fehlerbeiinsert:=TRUE FI ;FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT
+fehlerbeiinsertTHEN installverzeichnis:="0.ERFASSUNGEN LISTENWEISE.files";
+begin("erfassungen listenweise",PROC startinsertinganwendungstask,t);call(t,0
+,ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;continue(kanal);
+putline(name(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN
+msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);
+freeglobalmanager;END PROC startinsertingerfassungen;PROC
+startinsertingerfassungenstundenplan:TASK VAR ruftask,t;INT VAR msgcodert;
+DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);
+line;putline(name(myself));tasksourcequelle:=sourcetaskschulis;#
+fehlerbeiinsert:=FALSE ;#line;taskpassword(taskpasswort);beginpassword(
+beginnpasswort);disablestop;fetchundinsert("4.ERFASSUNGEN STUNDENPLAN.files")
+;IF iserrorTHEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;
+enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN begin(name(myself)+
+" manager",PROC starteaufrufmanagersingletask,t);FI ;continue(kanal);putline(
+name(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert
+:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END
+PROC startinsertingerfassungenstundenplan;PROC starteaufrufmanager:do(
+"starte aufruf manager")ENDPROC starteaufrufmanager;PROC
+starteaufrufmanagersingletask:do("starte aufruf manager(1)")ENDPROC
+starteaufrufmanagersingletask;PROC startinsertingida:TASK VAR ruftask,t;INT
+VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);
+continue(kanal);line;putline(name(myself));tasksourcequelle:=
+sourcetaskschulis;line;taskpassword(taskpasswort);beginpassword(
+beginnpasswort);disablestop;fetchundinsert("6.IDA.files");do(procaufruf2);IF
+iserrorTHEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;
+enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN begin("ida manager",PROC
+starteaufrufmanager,t);FI ;continue(kanal);putline(name(myself)+
+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE
+msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC
+startinsertingida;PROC startbaisy1:do("monitor")END PROC startbaisy1;PROC
+startschulis1:disablestop;startschulisunterdisablestop;IF iserrorTHEN
+clearerrorFI ;enablestop;do("monitor")END PROC startschulis1;PROC
+startschulisunterdisablestop:enablestop;do(
+"oeffne datenbank (""EUMELbase.schulis"")");do("starte schulis");END PROC
+startschulisunterdisablestop;PROC fetchundinsert(TEXT CONST datname):IF
+fehlerbeiinsertTHEN LEAVE fetchundinsertFI ;disablestop;fetch(datname,
+tasksourcequelle);putline("Task "+name(myself)+" wird eingerichtet !");INT
+VAR indexnr:=0;TEXT VAR thesname;THESAURUS VAR thes:=ALL datname;get(thes,
+thesname,indexnr);WHILE indexnr>0REP IF dateizuberuecksichtigen(thesname)
+THEN fetch(thesname,tasksourcequelle);putline(thesname);INT VAR taskkanal:=
+channel;break(quiet);insert(thesname);continue(taskkanal);IF iserrorTHEN
+fehlerbeiinsert:=TRUE ;put(errormessage);clearerrorFI ;forget(thesname,quiet)
+FI ;get(thes,thesname,indexnr);PER ;commanddialogue(FALSE );forget(datname,
+quiet);commanddialogue(TRUE );enablestop.END PROC fetchundinsert;BOOL PROC
+dateizuberuecksichtigen(TEXT CONST dateiname):INT VAR pospraefixende:=pos(
+dateiname,praefixtrenner);TEXT VAR dateipraefix:=subtext(dateiname,1,
+pospraefixende-1);IF dateipraefix=""THEN TRUE ELIF dateipraefix=
+allgemeinedateiTHEN TRUE ELIF dateipraefix>"9"THEN TRUE ELSE pos(
+gueltigepraefixe,teilsystemtrenner+dateipraefix+teilsystemtrenner)>0FI END
+PROC dateizuberuecksichtigen;LET invers="",inversoff="",cdown=10,cup=3,esc=
+27,hop=1,zeilenlaenge=80,strichelement="=",maxiofelder=15;TYPE MASKENTEXTE =
+STRUCT (INT x,y,l,TEXT t,BOOL lfest);ROW maxiofelderMASKENTEXTE VAR mt;TASK
+PROC sourcetask(INT CONST i):IF int(mt[i+1].t)<>meinestationTHEN int(mt[i+1].
+t)/mt[i].tELSE /mt[i].tFI ENDPROC sourcetask;TASK PROC sourcetaskbaisy:
+sourcetask(1)ENDPROC sourcetaskbaisy;TASK PROC sourcetaskschulis:sourcetask(3
+)ENDPROC sourcetaskschulis;TASK PROC sourcetaskeumelbase:sourcetask(5)
+ENDPROC sourcetaskeumelbase;TASK PROC sourcetaskvordrucke:sourcetask(7)
+ENDPROC sourcetaskvordrucke;TASK PROC sourcetaskbaisydb:sourcetask(9)ENDPROC
+sourcetaskbaisydb;TASK PROC sourcetaskschulisdb:sourcetask(11)ENDPROC
+sourcetaskschulisdb;INT PROC anzahlschulistasks:int(mt[13].t)ENDPROC
+anzahlschulistasks;TEXT PROC taskpasswort:mt[14].tENDPROC taskpasswort;TEXT
+PROC beginnpasswort:mt[15].tENDPROC beginnpasswort;PROC writexytext(INT
+CONST x,y,TEXT CONST t):cursor(x,y);write(t)ENDPROC writexytext;PROC
+writexyinvers(INT CONST x,y,TEXT CONST t):cursor(x,y);write(invers+t+
+inversoff)ENDPROC writexyinvers;PROC strich(INT CONST zeile):writexytext(1,
+zeile,zeilenlaenge*strichelement)ENDPROC strich;PROC kosmetik:page;strich(1);
+strich(4);strich(23);kopf.kopf:writexyinvers(27,2," S C H U L I S ");
+writexytext(10,3,"Installationsprogramm für SCHULIS Version "+versionsnummer)
+.ENDPROC kosmetik;PROC maske:kosmetik;fuss;rumpf.fuss:writexyinvers(2,24,
+"ESC HOP = Start CURSOR UP/DOWN = nächstes/voriges Feld ESC ESC = Abbruch"
+);.rumpf:writexytext(3,5,
+"BAISY-Quelltexte in Task : auf Station:");
+writexytext(3,7,
+"SCHULIS-Quelltexte in Task : auf Station:");
+writexytext(3,9,
+"EUMELbase-Quelltexte in Task: auf Station:");
+writexytext(3,11,
+"Vordrucke in Task : auf Station:");
+writexytext(3,13,
+"BAISY-Datenbank in Task : auf Station:");
+writexytext(3,15,
+"SCHULIS-Datenbank in Task : auf Station:");
+writexytext(3,20,"Anzahl der Arbeitsplätze für SCHULIS:");writexytext(3,22,
+"Task-Password: Beginn-Password:").ENDPROC maske;
+TEXT PROC mystation:text(station(myself))ENDPROC mystation;PROC
+maskentexteinitialisieren:setmt(1,33,5,27,"BAISY-Quellen");setmt(2,75,5,3,
+mystation,TRUE );setmt(3,33,7,27,"SCHULIS-Quellen");setmt(4,75,7,3,mystation,
+TRUE );setmt(5,33,9,27,"EUMELbase-Quellen");setmt(6,75,9,3,mystation,TRUE );
+setmt(7,33,11,27,"VORDRUCKE");setmt(8,75,11,3,mystation,TRUE );setmt(9,33,13,
+27,"BAISY-SCHULIS-DB");setmt(10,75,13,3,mystation,TRUE );setmt(11,33,15,27,
+"BAISY-SCHULIS-DB");setmt(12,75,15,3,mystation,TRUE );setmt(13,45,20,3,"1",
+TRUE );setmt(14,18,22,21,"");setmt(15,60,22,21,"");ENDPROC
+maskentexteinitialisieren;PROC setmt(INT CONST i,px,py,pl,TEXT CONST pt):
+setmt(i,px,py,pl,pt,FALSE )ENDPROC setmt;PROC setmt(INT CONST i,px,py,pl,
+TEXT CONST pt,BOOL CONST pf):mt[i].x:=px;mt[i].y:=py;mt[i].l:=pl;mt[i].t:=pt;
+mt[i].lfest:=pfENDPROC setmt;PROC maskentexte:INT VAR i;FOR iFROM 1UPTO
+maxiofelderREP writexytext(mt[i].x,mt[i].y,text(mt[i].t,mt[i].l))PER ENDPROC
+maskentexte;BOOL PROC maskeeditiert:INT VAR fnr:=1,editl;TEXT VAR exitchar:=
+"";REP cursor(mt[fnr].x,mt[fnr].y);bestimmeeditlaenge;editget(mt[fnr].t,editl
+,mt[fnr].l,"�
+","��?",exitchar);exitchar:=exitcharSUB length(exitchar);
+SELECT code(exitchar)OF CASE cup:vorigesfeldCASE cdown:naechstesfeldCASE esc:
+kosmetik;cursor(8,10);IF yes(
+"Soll die Installation tatsächlich abgebrochen werden")THEN LEAVE
+maskeeditiertWITH FALSE ELSE restorescreenFI CASE hop:kosmetik;cursor(1,10);
+IF yes("Soll mit der Installation von SCHULIS begonnen werden")THEN page;
+LEAVE maskeeditiertWITH TRUE ELSE restorescreenFI OTHERWISE :naechstesfeld
+ENDSELECT PER ;FALSE .restorescreen:maske;maskentexte.naechstesfeld:fnr:=(fnr
+MOD maxiofelder)+1.vorigesfeld:IF fnr=1THEN fnr:=maxiofelderELSE fnrDECR 1FI
+.bestimmeeditlaenge:IF mt[fnr].lfestTHEN editl:=mt[fnr].lELSE editl:=maxint-1
+FI .ENDPROC maskeeditiert;LET endofpermanenttable=32767;DATASPACE VAR
+bulletinds:=nilspace;FILE VAR bulletinfile;TEXT VAR buffer,objectname,pattern
+;INT VAR packetlink,linenumber;BOOL VAR found:=TRUE ;BOOL PROC procexists(
+TEXT CONST procname):prepbulletin;objectname:=compress(procname);scan(
+objectname);nextsymbol(pattern);packetlink:=endofpermanenttable;standardhelp.
+prepbulletin:forget(bulletinds);bulletinds:=nilspace;bulletinfile:=
+sequentialfile(output,bulletinds);linenumber:=0;buffer:="".standardhelp:
+toobject(pattern);found.END PROC procexists;PROC toobject(TEXT CONST
+searchedobject):LET endofhashtable=1023;INT VAR permanentpointer,index,ntlink
+;ntlink:=0;FOR indexFROM 1UPTO LENGTH searchedobjectREP ntlinkINCR ntlink;IF
+ntlink>endofhashtableTHEN ntlinkDECR endofhashtableFI ;ntlink:=(ntlink+code(
+searchedobjectSUB index))MOD 1024PER ;found:=FALSE ;WHILE yetanotherntentry
+REP permanentpointer:=cdbint(ntlink+1);objectname:=cdbtext(ntlink+2);IF
+objectname=searchedobjectTHEN found:=TRUE ;LEAVE toobjectFI PER .
+yetanotherntentry:ntlink:=cdbint(ntlink);ntlink<>0.END PROC toobject;INT
+PROC cdbint(INT CONST index):EXTERNAL 116END PROC cdbint;TEXT PROC cdbtext(
+INT CONST index):EXTERNAL 117END PROC cdbtext;
+