summaryrefslogtreecommitdiff
path: root/app/schulis-simulationssystem
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-simulationssystem
downloadeumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.gz
eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.bz2
eumel-src-04e68443040c7abad84d66477e98f93bed701760.zip
Initial import
Diffstat (limited to 'app/schulis-simulationssystem')
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologiebin0 -> 69632 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 code info dsbin0 -> 4608 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 10 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 11 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 12 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 13 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 14 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 code info dsbin0 -> 4608 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 originalkurve dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 vergleichskurve dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 code info dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 originalkurve dsbin0 -> 5632 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 originalkurve dsbin0 -> 5632 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 8 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 9 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetikbin0 -> 60928 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 code info dsbin0 -> 84480 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 originalkurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 vergleichskurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 code info dsbin0 -> 79360 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 originalkurve dsbin0 -> 8704 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 vergleichskurve dsbin0 -> 8704 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 3 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 4 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfallbin0 -> 66048 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 code info dsbin0 -> 99328 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 10 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 originalkurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 vergleichskurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 originalkurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 vergleichskurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 originalkurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 vergleichskurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 originalkurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 vergleichskurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 6 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 7 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 8 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 9 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik Ibin0 -> 61952 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 originalkurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 vergleichskurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 4 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 5 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 6 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik IIbin0 -> 69120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 10 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 11 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 12 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 13 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 14 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 originalkurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 vergleichskurve dsbin0 -> 7680 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 originalkurve dsbin0 -> 7680 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 vergleichskurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 8 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 9 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeldbin0 -> 65536 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 code info dsbin0 -> 4608 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 originalkurve dsbin0 -> 16896 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 vergleichskurve dsbin0 -> 16896 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 code info dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 originalkurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 vergleichskurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 code info dsbin0 -> 4608 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 originalkurve dsbin0 -> 8704 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 vergleichskurve dsbin0 -> 8704 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 5 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 6 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 7 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 8 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungenbin0 -> 61952 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 vergleichskurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 4 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 5 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 6 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldernbin0 -> 67584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 originalkurve dsbin0 -> 12800 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 vergleichskurve dsbin0 -> 8704 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 10 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 originalkurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 vergleichskurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 originalkurve dsbin0 -> 26112 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 vergleichskurve dsbin0 -> 16384 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 originalkurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 vergleichskurve dsbin0 -> 7680 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 code info dsbin0 -> 4608 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 originalkurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 vergleichskurve dsbin0 -> 8704 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 6 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 7 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 8 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 9 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungenbin0 -> 67072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 10 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 11 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 12 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 13 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 14 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 vergleichskurve dsbin0 -> 10752 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 code info dsbin0 -> 3584 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 vergleichskurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 code info dsbin0 -> 4608 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 vergleichskurve dsbin0 -> 5632 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 originalkurve dsbin0 -> 5120 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 vergleichskurve dsbin0 -> 5632 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 originalkurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 vergleichskurve dsbin0 -> 6144 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 8 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 9 code info dsbin0 -> 2560 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungenbin0 -> 62976 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 originalkurve dsbin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 vergleichskurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 originalkurve dsbin0 -> 7680 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 vergleichskurve dsbin0 -> 7680 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 code info dsbin0 -> 4096 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 originalkurve dsbin0 -> 8704 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 vergleichskurve dsbin0 -> 7168 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 4 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 5 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 6 code info dsbin0 -> 3072 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/source-disk4
-rw-r--r--app/schulis-simulationssystem/3.0/src/TEXTE deutschbin0 -> 115200 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/src/ZEICHEN 6*10bin0 -> 11264 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/src/ZEICHEN 8*14bin0 -> 9216 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/src/ZEICHEN 8*16bin0 -> 9728 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/src/ZEICHEN 8*19bin0 -> 9728 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/src/ZEICHEN 8*8bin0 -> 8192 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/src/ZEICHEN 9*14bin0 -> 11264 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/src/bs2
-rw-r--r--app/schulis-simulationssystem/3.0/src/dp210
-rw-r--r--app/schulis-simulationssystem/3.0/src/e2
-rw-r--r--app/schulis-simulationssystem/3.0/src/g4
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls bildschirmeingaben5
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls co routinen und co11
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls dateiscroll5
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls demonstration4
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls dialoghilfen9
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls dp14
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls kombination3
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls simsel.masken4
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls simselstarter11
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls simulation5
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls starte bearbeitung2
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls zustaende parameter kurve6
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls-DIALOG 1.korrektur4
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls-DIALOG 2.simsel9
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls-DIALOG 3.korrektur3
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls-DIALOG 4.wd6
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls-DIALOG 5.korrektur12
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls-DIALOG 5.simsel12
-rw-r--r--app/schulis-simulationssystem/3.0/src/ls-MENUKARTE:Simselbin0 -> 97792 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/src/ltbearb8
-rw-r--r--app/schulis-simulationssystem/3.0/src/m3
-rw-r--r--app/schulis-simulationssystem/3.0/src/mat.binder plot5
-rw-r--r--app/schulis-simulationssystem/3.0/src/mat.epson-fx plot4
-rw-r--r--app/schulis-simulationssystem/3.0/src/mat.epson-sq plot4
-rw-r--r--app/schulis-simulationssystem/3.0/src/mat.hp72xx plot3
-rw-r--r--app/schulis-simulationssystem/3.0/src/mat.hp74xx plot3
-rw-r--r--app/schulis-simulationssystem/3.0/src/mat.kyocera plot3
-rw-r--r--app/schulis-simulationssystem/3.0/src/mat.laserjet plot3
-rw-r--r--app/schulis-simulationssystem/3.0/src/mat.xerox4045 plot4
-rw-r--r--app/schulis-simulationssystem/3.0/src/modellbasis dialog24
-rw-r--r--app/schulis-simulationssystem/3.0/src/modellbasis geraet9
-rw-r--r--app/schulis-simulationssystem/3.0/src/modellwerte3
-rw-r--r--app/schulis-simulationssystem/3.0/src/neue startschl3
-rw-r--r--app/schulis-simulationssystem/3.0/src/o2
-rw-r--r--app/schulis-simulationssystem/3.0/src/op14
-rw-r--r--app/schulis-simulationssystem/3.0/src/op211
-rw-r--r--app/schulis-simulationssystem/3.0/src/output7
-rw-r--r--app/schulis-simulationssystem/3.0/src/output test5
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel basis plot4
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel cga plot3
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel ega plot3
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel formularebin0 -> 38912 bytes
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel hercules plot3
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel picture3
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel vga plot3
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel.druckermenu2
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel.text als row2
-rw-r--r--app/schulis-simulationssystem/3.0/src/simsel.verwaltung7
-rw-r--r--app/schulis-simulationssystem/3.0/src/spool cmd3
-rw-r--r--app/schulis-simulationssystem/3.0/src/steuerung6
256 files changed, 284 insertions, 0 deletions
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie
new file mode 100644
index 0000000..e2ef232
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 code info ds
new file mode 100644
index 0000000..c754ba3
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 originalkurve ds
new file mode 100644
index 0000000..ff1a5a1
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 vergleichskurve ds
new file mode 100644
index 0000000..1d35616
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 10 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 10 code info ds
new file mode 100644
index 0000000..e542599
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 10 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 11 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 11 code info ds
new file mode 100644
index 0000000..00f3658
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 11 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 12 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 12 code info ds
new file mode 100644
index 0000000..0b56808
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 12 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 13 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 13 code info ds
new file mode 100644
index 0000000..2b7b5c9
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 13 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 14 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 14 code info ds
new file mode 100644
index 0000000..18005f1
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 14 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 code info ds
new file mode 100644
index 0000000..f9cf1eb
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 originalkurve ds
new file mode 100644
index 0000000..c8a90e9
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 vergleichskurve ds
new file mode 100644
index 0000000..6cb6376
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 code info ds
new file mode 100644
index 0000000..ebfbf3d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 originalkurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 originalkurve ds
new file mode 100644
index 0000000..718d2fd
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 vergleichskurve ds
new file mode 100644
index 0000000..a0101f3
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 3 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 code info ds
new file mode 100644
index 0000000..9fdce06
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 originalkurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 originalkurve ds
new file mode 100644
index 0000000..15e7407
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 vergleichskurve ds
new file mode 100644
index 0000000..165f8d9
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 4 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 code info ds
new file mode 100644
index 0000000..4870f1a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 originalkurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 originalkurve ds
new file mode 100644
index 0000000..e568313
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 vergleichskurve ds
new file mode 100644
index 0000000..b0487d1
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 5 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 code info ds
new file mode 100644
index 0000000..00410ea
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 originalkurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 originalkurve ds
new file mode 100644
index 0000000..c7c0891
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 vergleichskurve ds
new file mode 100644
index 0000000..7924b84
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 6 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 code info ds
new file mode 100644
index 0000000..8bfc365
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 originalkurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 originalkurve ds
new file mode 100644
index 0000000..136a763
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 vergleichskurve ds
new file mode 100644
index 0000000..0360f1e
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 7 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 8 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 8 code info ds
new file mode 100644
index 0000000..f489af2
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 8 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 9 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 9 code info ds
new file mode 100644
index 0000000..e89f437
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 1: Populationsökologie 9 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik
new file mode 100644
index 0000000..3e04b6f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 code info ds
new file mode 100644
index 0000000..8b0d00a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 originalkurve ds
new file mode 100644
index 0000000..9dce7dc
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 vergleichskurve ds
new file mode 100644
index 0000000..bd49cc8
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 code info ds
new file mode 100644
index 0000000..26dd66c
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 originalkurve ds
new file mode 100644
index 0000000..1836f9f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 vergleichskurve ds
new file mode 100644
index 0000000..cc48114
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 3 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 3 code info ds
new file mode 100644
index 0000000..c6e9603
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 4 code info ds b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 4 code info ds
new file mode 100644
index 0000000..6a36c07
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/biology/Biologie 2: Enzymkinetik 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall
new file mode 100644
index 0000000..5297fb8
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 code info ds
new file mode 100644
index 0000000..f6bbe2c
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 originalkurve ds
new file mode 100644
index 0000000..1fbd808
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 vergleichskurve ds
new file mode 100644
index 0000000..1090174
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 10 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 10 code info ds
new file mode 100644
index 0000000..1d797c1
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 10 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 code info ds
new file mode 100644
index 0000000..dc0df36
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 originalkurve ds
new file mode 100644
index 0000000..9a8dc0d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 vergleichskurve ds
new file mode 100644
index 0000000..8aa32d2
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 code info ds
new file mode 100644
index 0000000..a9d16e8
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 originalkurve ds
new file mode 100644
index 0000000..40e4655
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 vergleichskurve ds
new file mode 100644
index 0000000..02d1eff
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 3 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 code info ds
new file mode 100644
index 0000000..709b811
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 originalkurve ds
new file mode 100644
index 0000000..828b9d4
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 vergleichskurve ds
new file mode 100644
index 0000000..013aed8
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 4 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 code info ds
new file mode 100644
index 0000000..4faa893
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 originalkurve ds
new file mode 100644
index 0000000..fc98ea6
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 vergleichskurve ds
new file mode 100644
index 0000000..c7f314e
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 5 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 6 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 6 code info ds
new file mode 100644
index 0000000..e220e44
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 6 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 7 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 7 code info ds
new file mode 100644
index 0000000..cf64601
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 7 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 8 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 8 code info ds
new file mode 100644
index 0000000..ad5d290
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 8 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 9 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 9 code info ds
new file mode 100644
index 0000000..f04cb25
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie - Physik: Radioaktiver Zerfall 9 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I
new file mode 100644
index 0000000..47a1b43
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 code info ds
new file mode 100644
index 0000000..283c544
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 originalkurve ds
new file mode 100644
index 0000000..570d5ba
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 vergleichskurve ds
new file mode 100644
index 0000000..05334a2
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 code info ds
new file mode 100644
index 0000000..da9189a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 originalkurve ds
new file mode 100644
index 0000000..4fed8cf
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 vergleichskurve ds
new file mode 100644
index 0000000..7f60ffe
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 code info ds
new file mode 100644
index 0000000..e74f5e9
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 originalkurve ds
new file mode 100644
index 0000000..2addd88
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 vergleichskurve ds
new file mode 100644
index 0000000..29e37d9
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 3 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 4 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 4 code info ds
new file mode 100644
index 0000000..c5b70f6
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 5 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 5 code info ds
new file mode 100644
index 0000000..8fb5b48
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 5 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 6 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 6 code info ds
new file mode 100644
index 0000000..58e62c6
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 1: Reaktionskinetik I 6 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II
new file mode 100644
index 0000000..5b87476
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 code info ds
new file mode 100644
index 0000000..cb2d987
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 originalkurve ds
new file mode 100644
index 0000000..fc951fe
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 vergleichskurve ds
new file mode 100644
index 0000000..4653751
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 10 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 10 code info ds
new file mode 100644
index 0000000..a97b17f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 10 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 11 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 11 code info ds
new file mode 100644
index 0000000..cbc3b0f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 11 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 12 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 12 code info ds
new file mode 100644
index 0000000..54dfcb7
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 12 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 13 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 13 code info ds
new file mode 100644
index 0000000..295d3d7
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 13 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 14 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 14 code info ds
new file mode 100644
index 0000000..87c3018
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 14 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 code info ds
new file mode 100644
index 0000000..63d2732
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 originalkurve ds
new file mode 100644
index 0000000..8f55a2b
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 vergleichskurve ds
new file mode 100644
index 0000000..25716cc
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 code info ds
new file mode 100644
index 0000000..035b736
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 originalkurve ds
new file mode 100644
index 0000000..06f7413
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 vergleichskurve ds
new file mode 100644
index 0000000..e16c385
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 3 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 code info ds
new file mode 100644
index 0000000..d2fc78b
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 originalkurve ds
new file mode 100644
index 0000000..b9a35d7
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 vergleichskurve ds
new file mode 100644
index 0000000..e58437e
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 4 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 code info ds
new file mode 100644
index 0000000..423d615
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 originalkurve ds
new file mode 100644
index 0000000..d181d07
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 vergleichskurve ds
new file mode 100644
index 0000000..3ff5fac
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 5 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 code info ds
new file mode 100644
index 0000000..9253113
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 originalkurve ds
new file mode 100644
index 0000000..66d5c63
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 vergleichskurve ds
new file mode 100644
index 0000000..177253b
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 6 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 code info ds
new file mode 100644
index 0000000..0c946cc
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 originalkurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 originalkurve ds
new file mode 100644
index 0000000..0934e00
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 vergleichskurve ds
new file mode 100644
index 0000000..c0119a7
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 7 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 8 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 8 code info ds
new file mode 100644
index 0000000..d5ed310
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 8 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 9 code info ds b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 9 code info ds
new file mode 100644
index 0000000..c18fb36
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/chemistry/Chemie 2: Reaktionskinetik II 9 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld
new file mode 100644
index 0000000..e06a384
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 code info ds
new file mode 100644
index 0000000..f629a5a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 originalkurve ds
new file mode 100644
index 0000000..e7b91fb
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 vergleichskurve ds
new file mode 100644
index 0000000..a9137ed
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 code info ds
new file mode 100644
index 0000000..f57e3a3
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 originalkurve ds
new file mode 100644
index 0000000..3f9f40b
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 vergleichskurve ds
new file mode 100644
index 0000000..08eec77
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 code info ds
new file mode 100644
index 0000000..0f99938
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 originalkurve ds
new file mode 100644
index 0000000..45d0365
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 vergleichskurve ds
new file mode 100644
index 0000000..09c3d4c
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 3 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 code info ds
new file mode 100644
index 0000000..dc4c950
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 originalkurve ds
new file mode 100644
index 0000000..657df6d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 vergleichskurve ds
new file mode 100644
index 0000000..b636a09
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 4 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 5 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 5 code info ds
new file mode 100644
index 0000000..51b2221
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 5 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 6 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 6 code info ds
new file mode 100644
index 0000000..c245d8f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 6 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 7 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 7 code info ds
new file mode 100644
index 0000000..a3d59ad
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 7 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 8 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 8 code info ds
new file mode 100644
index 0000000..c8c84b8
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 1: Bewegungen im Gravitationsfeld 8 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen
new file mode 100644
index 0000000..217bfdc
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 code info ds
new file mode 100644
index 0000000..458a4b8
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 originalkurve ds
new file mode 100644
index 0000000..36d0bb8
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 vergleichskurve ds
new file mode 100644
index 0000000..7117015
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 code info ds
new file mode 100644
index 0000000..d8cc452
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 originalkurve ds
new file mode 100644
index 0000000..a719225
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 vergleichskurve ds
new file mode 100644
index 0000000..44b86db
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 code info ds
new file mode 100644
index 0000000..638820a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 originalkurve ds
new file mode 100644
index 0000000..f5f626d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 vergleichskurve ds
new file mode 100644
index 0000000..7f84ec1
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 3 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 4 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 4 code info ds
new file mode 100644
index 0000000..23017d4
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 5 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 5 code info ds
new file mode 100644
index 0000000..9c708b1
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 5 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 6 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 6 code info ds
new file mode 100644
index 0000000..2173675
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 2: Mechanische Schwingungen 6 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern
new file mode 100644
index 0000000..b3a005a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 code info ds
new file mode 100644
index 0000000..da668bc
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 originalkurve ds
new file mode 100644
index 0000000..ab2524c
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 vergleichskurve ds
new file mode 100644
index 0000000..d61fcce
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 10 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 10 code info ds
new file mode 100644
index 0000000..7188064
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 10 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 code info ds
new file mode 100644
index 0000000..10ae13f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 originalkurve ds
new file mode 100644
index 0000000..8cb0350
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 vergleichskurve ds
new file mode 100644
index 0000000..25047b5
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 code info ds
new file mode 100644
index 0000000..bca8bc0
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 originalkurve ds
new file mode 100644
index 0000000..ebfee05
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 vergleichskurve ds
new file mode 100644
index 0000000..bfdc85a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 3 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 code info ds
new file mode 100644
index 0000000..7e51cda
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 originalkurve ds
new file mode 100644
index 0000000..6b95da2
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 vergleichskurve ds
new file mode 100644
index 0000000..cf3a9bc
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 4 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 code info ds
new file mode 100644
index 0000000..5824c74
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 originalkurve ds
new file mode 100644
index 0000000..bec3fdd
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 vergleichskurve ds
new file mode 100644
index 0000000..9afdb18
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 5 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 6 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 6 code info ds
new file mode 100644
index 0000000..7c57776
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 6 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 7 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 7 code info ds
new file mode 100644
index 0000000..f20f4c7
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 7 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 8 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 8 code info ds
new file mode 100644
index 0000000..86f7138
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 8 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 9 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 9 code info ds
new file mode 100644
index 0000000..152400e
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 3: Ladungen in elektr. und magnet. Feldern 9 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen
new file mode 100644
index 0000000..800d852
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 code info ds
new file mode 100644
index 0000000..dd1bf34
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 originalkurve ds
new file mode 100644
index 0000000..e247d03
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 vergleichskurve ds
new file mode 100644
index 0000000..fd28612
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 10 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 10 code info ds
new file mode 100644
index 0000000..3213b89
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 10 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 11 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 11 code info ds
new file mode 100644
index 0000000..d727472
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 11 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 12 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 12 code info ds
new file mode 100644
index 0000000..d90d730
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 12 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 13 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 13 code info ds
new file mode 100644
index 0000000..2d8e131
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 13 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 14 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 14 code info ds
new file mode 100644
index 0000000..8fc92c9
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 14 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 code info ds
new file mode 100644
index 0000000..5b45740
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 originalkurve ds
new file mode 100644
index 0000000..b95226d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 vergleichskurve ds
new file mode 100644
index 0000000..56add2a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 code info ds
new file mode 100644
index 0000000..17f584c
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 originalkurve ds
new file mode 100644
index 0000000..2f9dadf
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 vergleichskurve ds
new file mode 100644
index 0000000..b09599a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 3 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 code info ds
new file mode 100644
index 0000000..5042dc5
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 originalkurve ds
new file mode 100644
index 0000000..e7969e2
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 vergleichskurve ds
new file mode 100644
index 0000000..c057670
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 4 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 code info ds
new file mode 100644
index 0000000..6f83eb0
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 originalkurve ds
new file mode 100644
index 0000000..2ae1122
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 vergleichskurve ds
new file mode 100644
index 0000000..a43b502
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 5 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 code info ds
new file mode 100644
index 0000000..38232c1
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 originalkurve ds
new file mode 100644
index 0000000..ea08e21
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 vergleichskurve ds
new file mode 100644
index 0000000..030b66f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 6 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 code info ds
new file mode 100644
index 0000000..9a4739c
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 originalkurve ds
new file mode 100644
index 0000000..44d1712
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 vergleichskurve ds
new file mode 100644
index 0000000..813c12d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 7 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 8 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 8 code info ds
new file mode 100644
index 0000000..db2af96
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 8 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 9 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 9 code info ds
new file mode 100644
index 0000000..87ded51
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 4: RLC-Schaltungen 9 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen
new file mode 100644
index 0000000..770bc44
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 code info ds
new file mode 100644
index 0000000..172cd62
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 originalkurve ds
new file mode 100644
index 0000000..01b19cf
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 vergleichskurve ds
new file mode 100644
index 0000000..25c11d3
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 1 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 code info ds
new file mode 100644
index 0000000..1ef5fa5
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 originalkurve ds
new file mode 100644
index 0000000..7b11c58
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 vergleichskurve ds
new file mode 100644
index 0000000..059ddcd
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 2 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 code info ds
new file mode 100644
index 0000000..2b9d6df
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 originalkurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 originalkurve ds
new file mode 100644
index 0000000..ab1c8c5
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 originalkurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 vergleichskurve ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 vergleichskurve ds
new file mode 100644
index 0000000..5132825
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 3 vergleichskurve ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 4 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 4 code info ds
new file mode 100644
index 0000000..0ea6486
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 4 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 5 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 5 code info ds
new file mode 100644
index 0000000..f75da5e
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 5 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 6 code info ds b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 6 code info ds
new file mode 100644
index 0000000..0af2e7c
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/data/physics/Physik 5: Relativistische Bewegungen 6 code info ds
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/source-disk b/app/schulis-simulationssystem/3.0/source-disk
new file mode 100644
index 0000000..cfd911d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/source-disk
@@ -0,0 +1,4 @@
+schulis-simulationssystem-3.0/04_simulationssystem-startdiskette.img
+schulis-simulationssystem-3.0/05_modelldatenbank-biologie.img
+schulis-simulationssystem-3.0/06_modelldatenbank-chemie.img
+schulis-simulationssystem-3.0/07_modelldatenbank-physik.img
diff --git a/app/schulis-simulationssystem/3.0/src/TEXTE deutsch b/app/schulis-simulationssystem/3.0/src/TEXTE deutsch
new file mode 100644
index 0000000..2f6bd23
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/TEXTE deutsch
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/src/ZEICHEN 6*10 b/app/schulis-simulationssystem/3.0/src/ZEICHEN 6*10
new file mode 100644
index 0000000..373245e
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ZEICHEN 6*10
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*14 b/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*14
new file mode 100644
index 0000000..cdb76cb
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*14
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*16 b/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*16
new file mode 100644
index 0000000..49b821a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*16
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*19 b/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*19
new file mode 100644
index 0000000..caff4ba
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*19
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*8 b/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*8
new file mode 100644
index 0000000..5a455fa
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ZEICHEN 8*8
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/src/ZEICHEN 9*14 b/app/schulis-simulationssystem/3.0/src/ZEICHEN 9*14
new file mode 100644
index 0000000..46e2f95
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ZEICHEN 9*14
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/src/bs b/app/schulis-simulationssystem/3.0/src/bs
new file mode 100644
index 0000000..8cd5e0a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/bs
@@ -0,0 +1,2 @@
+PACKETbildschirmspeicherDEFINESgibdiagrammausschnitt,newout,lineout,zwischenraumohnebox,inboxspeicher,bsspeicherinit,bsspeicherlesen:LETblank=" ",stdlaenge=80,linealzeile=22;LET BILDSCHIRMSPEICHER=STRUCT(ROW24TEXTboxspeicher,bildspeicher);DATASPACE VARbsds;BOUND BILDSCHIRMSPEICHER VARbs;BOOL VARlinealein:=TRUE;WINDOW VARfenster:=standardfenster;OP:=(BILDSCHIRMSPEICHER VARleft,BILDSCHIRMSPEICHER CONSTright):left:=rightEND OP:=;PROCbsspeicherinit:bsspeicherinit(TRUE)END PROCbsspeicherinit;PROCbsspeicherinit(BOOL CONSTmitbildschirmausgabe):INT VARi;TEXT VARblank:=stdlaenge*" ";forget(bsds);bsds:=nilspace;bs:=bsds;zeileninitialisieren;linealinitialisieren.zeileninitialisieren:FORiFROM1UPTO24REPbs.boxspeicher(i):=blank;bs.bildspeicher(i):=blankPER;bs.bildspeicher(linealzeile):=(stdlaenge-1)*waagerecht.linealinitialisieren:linealausgeben(mitbildschirmausgabe).END PROCbsspeicherinit;PROCbsspeicherlesen(AREA CONSTa):INT VARi,ax,axs;ax:=areax(a);axs:=ax+areaxsize(a)-1;FORiFROMareay(a)UPTOareay(a)+areaysize(a)-1REPcursor(ax,i);outsubtext(bs.bildspeicher(i),ax,axs)PER;END PROCbsspeicherlesen;PROCbsspeicherlesen(WINDOW CONSTw):AREA VARareazuw;fill(areazuw,areax(w)-1,areay(w)-1,areaxsize(w)+2,areaysize(w)+2);bsspeicherlesen(areazuw);END PROCbsspeicherlesen;PROCgibdiagrammausschnitt(FILE VARf):modify(f);insertrecord(f);writerecord(f,blank);bsspeicherinfile;unterkantedesrahmens.zwischenstueck:(stdlaenge-1)*waagerecht.bsspeicherinfile:INT VARi;TEXT VARzeile;FORiFROM2UPTOlinealzeile-1REPzeile:=bs.bildspeicher(i);IF(zeileSUB1)=blankTHENreplace(zeile,1,senkrecht)FI;neuedateizeile(f,zeile)PER.unterkantedesrahmens:neuedateizeile(f,eckeuntenlinks+subtext(bs.bildspeicher(linealzeile),2,stdlaenge)).END PROCgibdiagrammausschnitt;PROCneuedateizeile(FILE VARf,TEXT CONSTt):down(f);insertrecord(f);writerecord(f,compress(t))END PROCneuedateizeile;PROCnewout(WINDOW VARw,INT CONSTi,j,TEXT CONSTt):cursor(w,i,j);out(t);replace(bs.bildspeicher(areay(w)+j-1),areax(w)+i-1,t);replace(bs.boxspeicher(areay(w)+j-1),areax(w)+i-1,t)END PROCnewout;PROClineout(WINDOW VARw,INT CONSTi,j,TEXT CONSTt):INT VARbi,bj;TEXT VARb,char:=t;bi:=areax(w)+i-1;bj:=areay(w)+j-1;b:=(bs.bildspeicher(bj)SUBbi);IF(t=senkrechtANDwaagerechtaufbs)OR(t=waagerechtANDsenkrechtaufbs)THENchar:=kreuzFI;cursor(bi,bj);out(char);replace(bs.bildspeicher(bj),bi,char).waagerechtaufbs:b=waagerechtORb=kreuz.senkrechtaufbs:b=senkrechtORb=kreuz.END PROClineout;BOOL PROCzwischenraumohnebox(INT CONSTzeile,spaltevon,spaltebis):compress(subtext(bs.boxspeicher(zeile),spaltevon,spaltebis))=""END PROCzwischenraumohnebox;TEXT PROCinboxspeicher(INT CONSTzeile,spalte):bs.boxspeicher(zeile)SUBspalteEND PROCinboxspeicher;PROClinealausgeben(BOOL CONSTmitbildschirmausgabe):zeigewaagerechteslineal;zeigesenkrechteslineal.zeigewaagerechteslineal:INT VARi;FORiFROM1UPTOigittersizeREPreplace(bs.bildspeicher(linealzeile),waagerechteposition,zahlinderwaagerechten)PER;IFmitbildschirmausgabeTHENcursor(1,linealzeile);out(bs.bildspeicher(linealzeile))FI.zahlinderwaagerechten:INT VARzahl:=impos(gitterstart)+i-1;anfang+text(zahl).anfang:IFzahleinstelligTHENwaagerechtELSE""FI.zahleinstellig:zahl<10.waagerechteposition:areax(fenster)+iwindowpos(gpos(i,1))+4.zeigesenkrechteslineal:FORiFROM1UPTOjgittersizeREPreplace(bs.bildspeicher(senkrechteposition),1,zahlindersenkrechten);IFmitbildschirmausgabeTHENcursor(1,senkrechteposition);outsubtext(bs.bildspeicher(senkrechteposition),1,2)FI PER.zahlindersenkrechten:zahl:=jmpos(gitterstart)+i-1;text(zahl)+rest.rest:IFzahleinstelligTHENblankELSE""FI.senkrechteposition:areay(fenster)+jwindowpos(gpos(1,i)).END PROClinealausgeben;END PACKETbildschirmspeicher;
+
diff --git a/app/schulis-simulationssystem/3.0/src/dp2 b/app/schulis-simulationssystem/3.0/src/dp2
new file mode 100644
index 0000000..68b919c
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/dp2
@@ -0,0 +1,10 @@
+PACKETdiagrammpraesentation2DEFINESwderfassen,erfassenamenundwd,copywd:LETtop1=""84""85""86""87""88""89"",top2=""90""91"",auskunftseite1=""28"",fehlerbeiformel=""78""79"",grenzwerte=""80"",fehlerhaftenamen=""81""82"",fehlerhafterausdruck=""83"",esc=""27"",return=""13"",piep=""7"",blank=" ";
+LETneuepositionwaehlen=502,zumzielobjekt=505,pfeilbeginnamboxrand=506,pfeilendeamboxrand=504,pfeilamboxrand=590,ausschnittgedruckt=508,singularmodellgroesse=511,singularergebnis=512,singularparameter=513,singularformel=514,singularzeit=515,zeitnichtbeinflussen=521,parameternichtbeinflussen=522,auswahlobjekttyp=540,zyklischeverknuepfung=541,ausgangbeiformel=548,ausgangbeiergebnissen=549,zuvielevariablenundergebnisse=552,zuvieleparameter=553,isoliert=562,formelohneausgang=564,syntaxfehler=565,pruefunglaeuft=567,inkonsistenz=568,speichern=572,pruefungsinnlos=579,allesbelegt=581,nichtsbelegt=582,aktionenfuerzeit=587,aktionensonst=585,tastenfuerzeit=588,tastensonst=586,ueberschriftaktionen=589,wdkopfzeile=509,wdfusszeile=501,wdfusszeilenachpruefung=591,aenderungengespeichert=592,cancel=584,hinweisleerername=523,hinweissyntaxfehler=524,hinweisdoppeltername=525,hinweislangername=526,hinweisformalerfehler=527,hinweisfalscheranfang=529,hinweisleererausdruck=539;LETmaxi=20,maxj=10,maxlink=8,maxvar=20,maxpar=20,maxmodellnamelang=30,maxmodellnamekurz=15,stmenuoderweiter=33,fehlertaste=4,fragehierabspeichern=96,fehlerlangname=80,fehlerkurzname=81,fehlerlangnamefehlt=82,fehlerkurznamefehlt=83,fehlermodellnamedoppelt=92,info="i",drucken="d",bildaufbauen="n",abbruch="a",abbruchmenu="m",abbrechen="a",auskunftstaste="i",auskunftsloeschtaste1="z",abspeichern="s",weitertaste="w",simulation="w",eingabe="z",ueberpruefung="p",janein="JjYyNn",ja="JjYy";LETtag=1,delimiter=6;WINDOW VARmenuwindow:=window(1,1,79,24);WINDOW CONSTzeichenflaeche:=window(2,3,77,19);BOOL VARletzteaenderunggespeichert:=TRUE;BOOL CONSTls:=TRUE;PROCallesspeichern(TEXT CONSTlang,INT VARreturncode):TEXT VARtaste;returncode:=0;doublefootnote(anwendungstext(speichern));REPinchar(taste)UNTILpos(janein,taste)>0PER;IFpos(ja,taste)>0THENaenderungenspeichern(dsname);ELSEreturncode:=1FI.dsname:name(wddsnamen,link(wdmodelle,lang)).END PROCallesspeichern;GPOS VARgp;PROCletzteaenderungnochnichtgespeichert:letzteaenderunggespeichert:=FALSE END PROCletzteaenderungnochnichtgespeichert;PROCeditieren(TEXT VARtaste):CELL VARactualcell;OBJEKT VARaktuellesobjekt;gp:=getgcursor;taste:="";REPbewegecursor(gp,taste,PROCgibbildaus);actualcell:=cell(gp);aktuellesobjekt:=objekt(actualcell);IFtaste=returnTHEN IFpositionbesetztTHENaktionenanbietenundausfuehrenELSEneueselementeinfuegenundzeigenFI;olddoublefootnoteELIFtaste=escTHEN ELSEout(piep)FI UNTILtaste=escPER.positionbesetzt:INT VARi:=impos(mpos(gp)),j:=jmpos(mpos(gp));belegt(i,j).neueselementeinfuegenundzeigen:neuesobjekteditieren(mpos(gp));taste:="".aktionenanbietenundausfuehren:doublefootnote("");INT VARaktion:=boxalternative(menuwindow,info,liste,buchstaben,5,FALSE,FALSE,PROC(AREA CONST)bsspeicherlesen)MOD100;aktionausfuehren.info:anwendungstext(ueberschriftaktionen).liste:anwendungstext(aktionen).buchstaben:anwendungstext(tasten).aktionen:IFtyp(aktuellesobjekt)=zeitTHENaktionenfuerzeitELSEaktionensonstFI.tasten:IFtyp(aktuellesobjekt)=zeitTHENtastenfuerzeitELSEtastensonstFI.aktionausfuehren:IFtyp(aktuellesobjekt)=zeitANDaktion>2THENaktionINCR1FI;SELECTaktionOF CASE1:elementwegnehmenCASE2:elementmerken;zielpositionfestlegen;IF NOTabbruchgewuenschtTHENactualcell:=cell(gp);aktuellesobjekt:=objekt(actualcell);IFtaste=returnAND(NOTpositionbesetzt)THENelementanalterpositionloeschen;elementanneuerpositioneintragenELSEout(piep)FI FI CASE3:alteselementeditierenCASE5:verbindungaufbauen(gp)CASE6:verbindungloesen(gp)END SELECT.alteselementeditieren:objekteditieren(mpos(gp));boxohnerahmen(objekt(mpos(gp)),gp);taste:="".elementwegnehmen:verbindungenloesen;deletecell(mpos(gp));letzteaenderungnochnichtgespeichert;IFalteverbindungenvorhandenTHENgibbildausELSEbox(aktuellesobjekt,gp,FALSE)FI.alteverbindungenvorhanden:z>0.verbindungenloesen:INT VARnr,z:=0;FORnrFROM1UPTOmaxlinkREP IF(actualcellAUSGANGnr)OR(actualcellEINGANGnr)THENzINCR1;loeschelink(mpos(gp),nr)FI PER.abbruchgewuenscht:taste=esc.elementmerken:MPOS VARaltmp:=mpos(gp);INT VARialt:=impos(mpos(gp)),jalt:=
+jmpos(mpos(gp)).zielpositionfestlegen:doublefootnote(anwendungstext(neuepositionwaehlen));bewegecursor(gp,taste,PROCgibbildaus).elementanalterpositionloeschen:CELL VARcellalt:=cell(altmp),cellneu;deletecell(altmp);IFimgitter(altmp)THENbox(ialt,jalt)FI.elementanneuerpositioneintragen:newcell(objekt(cellalt),newposition);cellneu:=cellalt;letzteaenderungnochnichtgespeichert;verbindungenaktualisieren;IFalteverbindungenvorhandenTHENgibbildausELSEbox(i,j)FI.verbindungenaktualisieren:z:=0;FORnrFROM1UPTOmaxlinkREP IF NOT((cellneuUEBERnr)=null)THENzINCR1;ggfverweisaufsichselbstaendern;IFcellneuAUSGANGnrTHENlink(newposition,nr,cellneuUEBERnr,cellneuNRnr)ELIFcellneuEINGANGnrTHENlink(cellneuUEBERnr,cellneuNRnr,newposition,nr)FI FI PER.newposition:mpos(gp).ggfverweisaufsichselbstaendern:IF(cellneuAUSGANGnr)AND((cellneuUEBERnr)=altmp)THENlink(newposition,nr,newposition,cellneuNRnr)FI.END PROCeditieren;PROCobjekteditieren(MPOS CONSTmp):OBJEKT CONSTobj:=objekt(mp);BOOL VARgespeichert:=FALSE;fehlercode:=0;fehlermeldung:="";IFtyp(obj)=variableORtyp(obj)=ergebnisTHENvariableeditieren(startcell,gespeichert,fehlercode,fehlermeldung)ELIFtyp(obj)=parameterTHENparametereditieren(startcell,gespeichert,fehlercode,fehlermeldung)ELIFtyp(obj)=formelTHENformeleditieren(startcell,gespeichert,fehlercode,fehlermeldung)FI;IFgespeichertTHENletzteaenderungnochnichtgespeichertFI.startcell:cell(mp).END PROCobjekteditieren;PROCneuesobjekteditieren(MPOS CONSTmp):ROW5INT VARobjekttyp;INT VARi:=0;vorls;erfragetypdesobjektes;IFeingabedestypszulaessigTHENlegecellan;editiereggfobjektFI.erfragetypdesobjektes:doublefootnote("");TEXT VARtasten:="";INT VAReingabedestyps:=boxalternative(menuwindow,info,liste,tasten,position,FALSE,FALSE,PROC(AREA CONST)bsspeicherlesen)MOD100;.eingabedestypszulaessig:eingabedestyps>0ANDeingabedestyps<6.legecellan:newcell(neuesobjekt,mp).neuesobjekt:new(neuertyp).neuertyp:SELECTobjekttyp(eingabedestyps)OF CASE1:variableCASE2:ergebnisCASE3:parameterCASE4:formelCASE5:zeitOTHERWISEnilEND SELECT.editiereggfobjekt:BOOL VARgespeichert:=FALSE;disablestop;fehlercode:=0;fehlermeldung:="";SELECTobjekttyp(eingabedestyps)OF CASE1,2:variableeditieren(startcell,gespeichert,fehlercode,fehlermeldung)CASE3:parametereditieren(startcell,gespeichert,fehlercode,fehlermeldung)CASE4:formeleditieren(startcell,gespeichert,fehlercode,fehlermeldung)CASE5:gespeichert:=TRUE END SELECT;IFiserrorTHENclearerror;gespeichert:=FALSE FI;enablestop;IFgespeichertTHENletzteaenderungnochnichtgespeichert;box(objekt(startcell),gpos(mp),TRUE)ELSEdeletecell(mp)FI.startcell:cell(mp).info:anwendungstext(auswahlobjekttyp).liste:evtlmodellvariable+evtlparameter+evtlevariable+fktzusammenhang+immerzeit+schluss.evtlmodellvariable:IFanzahlmpos(variablenthesaurus)+anzahlmpos(ergebnisthesaurus)>=maxvarTHEN""ELSEiINCR1;objekttyp(i):=1;tastenCAT"v";anwendungstext(singularmodellgroesse)+returnFI.evtlparameter:IFanzahlmpos(parameterthesaurus)>=maxparTHEN""ELSEiINCR1;objekttyp(i):=3;tastenCAT"p";anwendungstext(singularparameter)+returnFI.evtlevariable:iINCR1;objekttyp(i):=2;IFanzahlmpos(variablenthesaurus)+anzahlmpos(ergebnisthesaurus)>=maxvarTHEN""ELSEtastenCAT"e";anwendungstext(singularergebnis)+returnFI.fktzusammenhang:iINCR1;objekttyp(i):=4;tastenCAT"f";anwendungstext(singularformel)+return.immerzeit:iINCR1;objekttyp(i):=5;tastenCAT"z";anwendungstext(singularzeit)+return.schluss:tastenCAT"-c";blank+return+anwendungstext(cancel).position:4.END PROCneuesobjekteditieren;PROCverbindungaufbauen(GPOS CONSTpos):GPOS VARfrompos:=pos,topos;MPOS VARfrom,to;TEXT VARtaste:="";untersuchesourcecell;bestimmetargetcell;merkeverbindung;letzteaenderungnochnichtgespeichert;zeigeneueverbindung.untersuchesourcecell:from:=mpos(frompos);IFstartobjektergebnisTHENweiseaufungeeignetesobjekthin(ausgangbeiergebnissen);leaveELIFalleverknuepfungspunkteamstartbelegtTHENweiseaufungeeignetesobjekthin(allesbelegt);leaveELSEverarbeitestartobjektFI.startobjektergebnis:typ(objekt(sourcecell))=ergebnis.
+alleverknuepfungspunkteamstartbelegt:TEXT VARfreiepunkte:=freieverknuepfungspunkte(sourcecell);length(freiepunkte)=0.verarbeitestartobjekt:schreibehinweisstartposition;INT VARvon:=bewegecursorauflinkpositionen(frompos,freiepunkte);gcursor(frompos);IFvon=0THENleaveELIF NOTbeginnfreiTHENout(piep);leaveFI;LEAVEuntersuchesourcecell.bestimmetargetcell:REPschreibehinweistargetcell;gcursor(frompos);bewegecursor(topos,taste,PROCgibbildaus);to:=mpos(topos);IFtaste=escTHENleaveELIFtaste=returnANDbelegt(targetcell)THEN IFzielobjektzeitTHENweiseaufungeeignetesobjekthin(zeitnichtbeinflussen)ELIFzielobjektparameterTHENweiseaufungeeignetesobjekthin(parameternichtbeinflussen)ELIFalleverknuepfungspunkteamzielbelegtTHENweiseaufungeeignetesobjekthin(allesbelegt)ELIFzielobjektformelundnureingaengeTHENweiseaufungeeignetesobjekthin(ausgangbeiformel)ELIFzielobjektformelundrekursionTHENweiseaufungeeignetesobjekthin(zyklischeverknuepfung)ELSEverarbeitezielobjektFI ELSEout(piep)FI;PER.alleverknuepfungspunkteamzielbelegt:freiepunkte:=freieverknuepfungspunkte(targetcell);IFfrom=toTHENchange(freiepunkte,text(von,1),"")FI;length(freiepunkte)=0.zielobjektzeit:typ(aktuellesobjekt)=zeit.zielobjektparameter:typ(aktuellesobjekt)=parameter.zielobjektformelundnureingaenge:IF NOT(typ(aktuellesobjekt)=formel)THEN FALSE ELSE INT VARi,anzahleingaenge:=0;FORiFROM1UPTOmaxlinkREP IFtargetcellEINGANGiTHENanzahleingaengeINCR1FI PER;anzahleingaenge=maxlink-1FI.zielobjektformelundrekursion:(typ(aktuellesobjekt)=formelANDto=from)OR(typ(aktuellesobjekt)=formelANDtyp(startobjekt)=formelAND(fromREKURSIVto)).startobjekt:objekt(sourcecell).aktuellesobjekt:objekt(targetcell).verarbeitezielobjekt:schreibehinweisendposition;INT VARzu:=bewegecursorauflinkpositionen(topos,freiepunkte);gcursor(topos);IFzu=0THENleaveELIF(NOTendefrei)ORanfanggleichendeTHENout(piep);leaveFI;LEAVEbestimmetargetcell.beginnfrei:(sourcecellUEBERvon)=null.endefrei:(targetcellUEBERzu)=null.anfanggleichende:from=toANDvon=zu.sourcecell:cell(from).targetcell:cell(to).merkeverbindung:link(from,von,to,zu).zeigeneueverbindung:zeichneverbindung(from,von,to,zu).schreibehinweistargetcell:doublefootnote(anwendungstext(zumzielobjekt)).schreibehinweisstartposition:doublefootnote(anwendungstext(pfeilbeginnamboxrand)).schreibehinweisendposition:doublefootnote(anwendungstext(pfeilendeamboxrand)).leave:LEAVEverbindungaufbauen.END PROCverbindungaufbauen;BOOL OP REKURSIV(MPOS CONSTstart,ziel):pruefetyp;zielZUstart.pruefetyp:IF NOT(typ(objekt(start))=formel)THEN LEAVE REKURSIV WITH FALSE FI.END OP REKURSIV;BOOL OP ZU(MPOS CONSTstart,ziel):INT VARi;CELL CONSTactualcell:=cell(start);FORiFROM1UPTOmaxlinkREP IF(actualcellAUSGANGi)THEN MPOS CONSTnachbarposition:=(actualcellUEBERi);IFtyp(nachbarobjekt)=formelTHENbehandlebenachbarteformelFI FI PER;FALSE.behandlebenachbarteformel:IFnachbarposition=zielTHEN LEAVE ZU WITH TRUE ELIFnachbarpositionZUzielTHEN LEAVE ZU WITH TRUE FI.nachbarobjekt:objekt(nachbarcell).nachbarcell:cell(nachbarposition).END OP ZU;PROCverbindungloesen(GPOS CONSTfrompos):MPOS VARfrommpos;untersuchesourcecell;loescheverbindung;letzteaenderungnochnichtgespeichert;gcursor(frompos);.untersuchesourcecell:frommpos:=mpos(frompos);pruefeundverarbeiteggfdieangeklicktecell.pruefeundverarbeiteggfdieangeklicktecell:IFallesfreiTHENweiseaufungeeignetesobjekthin(nichtsbelegt)ELSEschreibehinweisstartposition;INT VARvon:=bewegecursorauflinkpositionen(frompos,belegtepunkte);gcursor(frompos);IFkeinelinkpositiongewaehltTHENleaveFI;LEAVEuntersuchesourcecellFI.allesfrei:TEXT VARbelegtepunkte:=belegteverknuepfungspunkte(clickedcell);length(belegtepunkte)=0.keinelinkpositiongewaehlt:von=0.loescheverbindung:loeschelink(frommpos,von);gibbildaus.clickedcell:cell(frommpos).schreibehinweisstartposition:doublefootnote(anwendungstext(pfeilamboxrand)).leave:LEAVEverbindungloesen.END PROCverbindungloesen;PROCdiagrammausschnittdrucken:DATASPACE VARds:=nilspace;FILE VARf:=sequentialfile(modify,ds);diagrammausschnitterzeugen;formelnauflisten;
+fileversenden;meldunganbenutzerabsetzen.diagrammausschnitterzeugen:gibdiagrammausschnitt(f).formelnauflisten:INT VARi,j,starti:=impos(gitterstart),endi:=starti+igittersize-1,startj:=jmpos(gitterstart),endj:=startj+jgittersize-1;output(f);line(f,2);FORiFROMstartiUPTOendiREP FORjFROMstartjUPTOendjREP IFbelegt(actualcell)ANDtyp(objekt(actualcell))=formelTHENobjekttext(f,newmpos(i,j))FI PER PER.actualcell:cell(i,j).fileversenden:save(ds,"Diagrammausschnitt",printer);forget(ds).meldunganbenutzerabsetzen:doublefootnote(anwendungstext(ausschnittgedruckt));pause(10);olddoublefootnote.END PROCdiagrammausschnittdrucken;INT VARfehlercode:=0;MPOS VARfehlerposition:=null;TEXT VARfehlermeldung:="";PROCpruefung:initialisierungen;IFpruefungsinnvollTHENcellmatrixabarbeitenELSEfehlerposition:=newmpos(1,1);LEAVEpruefungFI;olddoublefootnote.initialisierungen:TEXT VARbezeichnerliste:=listeallerbezeichner(null);doublefootnote(anwendungstext(pruefunglaeuft));fehlercode:=0;fehlerposition:=null;fehlermeldung:="";.pruefungsinnvoll:IF NOT(anzahlmpos(variablenthesaurus)+anzahlmpos(ergebnisthesaurus)=0)ANDboxvorhandenTHEN TRUE ELSEfehlercode:=pruefungsinnlos;FALSE FI.cellmatrixabarbeiten:INT VARi,j;FORiFROM1UPTOmaxiREP FORjFROM1UPTOmaxjREP IFbelegt(cell(i,j))THENpruefecellFI PER PER.pruefecell:CELL CONSTactualcell:=cell(i,j);OBJEKT CONSTaktuellesobjekt:=objekt(actualcell);testeaufisolierung;IFtyp(aktuellesobjekt)=formelTHENtesteformel;zaehleausgaengederformel;sucheimtermunberuecksichtigteeingaenge;FI;.testeaufisolierung:INT VARverbindungszaehler,anzahlverbindungen:=0;FORverbindungszaehlerFROM1UPTOmaxlinkREP IF(actualcellEINGANGverbindungszaehler)OR(actualcellAUSGANGverbindungszaehler)THENanzahlverbindungenINCR1FI PER;IFobjektisoliertTHENfehlerposition:=mpos(actualcell);fehlercode:=isoliert;LEAVEpruefungFI.objektisoliert:anzahlverbindungen=0.testeformel:IFsyntaktischerfehlerTHENfehlercode:=syntaxfehler;fehlerposition:=mpos(actualcell);LEAVEpruefungFI.syntaktischerfehler:NOTtermistkorrekt(actualcell,ausdruck(aktuellesobjekt),bezeichnerliste,fehlermeldung).sucheimtermunberuecksichtigteeingaenge:THESAURUS VAReingaenge,internenamen,nichtverwendetenamen;eingaenge:=elannamenallereinlaufendenflusslinien;internenamen:=scanneformelundsucheinternenamen;nichtverwendetenamen:=eingaenge-(internenamen/eingaenge);schreibewarnungenfuernichtverwendetenamen.elannamenallereinlaufendenflusslinien:THESAURUS VARt:=emptythesaurus;FORverbindungszaehlerFROM1UPTOmaxlinkREP IF(actualcellEINGANGverbindungszaehler)THENinsert(t,elanname(objekt(cell(actualcellUEBERverbindungszaehler))))FI PER;t.scanneformelundsucheinternenamen:t:=emptythesaurus;TEXT VARterm:=ausdruck(aktuellesobjekt),symbol;INT VARtype;scan(term);nextsymbol(symbol,type);WHILE NOTendeerreichtREPverarbeitesymbol;nextsymbol(symbol,type)PER;t.endeerreicht:type>delimiter.verarbeitesymbol:IFtype=tagTHENinsert(t,symbol)FI.schreibewarnungenfuernichtverwendetenamen:INT VARzaehler:=0;IFhighestentry(nichtverwendetenamen)>0THENfehlercode:=inkonsistenz;fehlerposition:=mpos(actualcell);get(nichtverwendetenamen,fehlermeldung,zaehler);LEAVEpruefungFI.zaehleausgaengederformel:anzahlverbindungen:=0;FORverbindungszaehlerFROM1UPTOmaxlinkREP IF(actualcellAUSGANGverbindungszaehler)THENanzahlverbindungenINCR1FI PER;IFobjektohneausgangTHENfehlercode:=formelohneausgang;fehlerposition:=mpos(actualcell);LEAVEpruefungFI.objektohneausgang:anzahlverbindungen=0.END PROCpruefung;PROCwderfassen(TEXT CONSTlang,INT VARreturncode):TEXT VARtaste:="";letzteaenderunggespeichert:=TRUE;returncode:=0;bildschirmaufbauen;gcursor(gpos(newmpos(1,1)));wdeditieren;IF NOTletzteaenderunggespeichertTHENallesspeichern(lang,returncode)FI.bildschirmaufbauen:gitterfenster(newmpos(1,1));page;writehead(anwendungstext(wdkopfzeile));writepermanentdoublefootnote(anwendungstext(wdfusszeile));gibbildaus.wdeditieren:REPwdlauffaehig(FALSE);editieren(taste);verarbeiteescsequenzUNTILabbruchgewuenschtPER.verarbeiteescsequenz:inchar(taste);IFtaste=infoTHENwdinfoausgebenELIFtaste=
+ueberpruefungTHEN IF(NOTboxvorhanden)THENdoublefootnote(anwendungstext(pruefungsinnlos));pause(20);olddoublefootnoteELSEwdpruefenFI;ELIFtaste=abspeichernTHEN IF(NOTboxvorhanden)THENdoublefootnote("Keine Eingaben! Speichern sinnlos");pause(20);olddoublefootnoteELSEwdspeichernFI;ELIFtaste=druckenTHENwddruckenELIFtaste=bildaufbauenTHENwdneuausgebenELIFtaste=abbruchTHENletzteaenderunggespeichert:=FALSE;ELSEout(piep)FI.abbruchgewuenscht:taste=abbruch.wdinfoausgeben:infotextauswahl(auskunftzumfehler,compilermeldung,top1,top2);writehead(anwendungstext(wdkopfzeile));writepermanentdoublefootnote(anwendungstext(wdfusszeile));bsspeicherlesen(zeichenflaeche).auskunftzumfehler:IFsyntaktischerfehlerTHENauskunftzumsyntaxfehler(fehlermeldung)ELIFfehlerbeimfunktionalenzusammenhangTHENfehlerbeiformelELIFgrenzenverletztTHENgrenzwerteELIFfehlerbeibenennungTHENfehlerhaftenamenELIFfehlerbeiausdruckTHENfehlerhafterausdruckELSE""FI.syntaktischerfehler:fehlercode=syntaxfehlerORfehlercode=hinweissyntaxfehler.fehlerbeimfunktionalenzusammenhang:fehlercode=zyklischeverknuepfungORfehlercode=ausgangbeiformelORfehlercode=formelohneausgangORfehlercode=inkonsistenz.grenzenverletzt:fehlercode=zuvielevariablenundergebnisseORfehlercode=zuvieleparameterORfehlercode=isoliert.fehlerbeibenennung:fehlercode=hinweisleerernameORfehlercode=hinweisdoppelternameORfehlercode=hinweislangernameORfehlercode=hinweisformalerfehlerORfehlercode=hinweisfalscheranfang.fehlerbeiausdruck:fehlercode=hinweisleererausdruck.compilermeldung:IFsyntaktischerfehlerTHENfehlermeldungELIFfehlergefundenTHENanwendungstext(fehlercode)ELSE""FI.wdpruefen:pruefung;IFfehlergefundenTHENpositioniereauffehlerhaftesobjekt;ELSEweitereverarbeitungFI.fehlergefunden:fehlercode>0.positioniereauffehlerhaftesobjekt:neueposition;doublefootnote(meldung);gcursor(gpos(fehlerposition)).meldung:IFfehlermeldung=""THENanwendungstext(fehlercode)ELSEanwendungstext(fehlercode)+return+fehlermeldungFI.neueposition:IFimgitter(fehlerposition)THENgitterfenster(gitterstart)ELSEgitterfenster(newmpos(i,j));gibbildausFI.i:min(maxi-igittersize+1,impos(fehlerposition)).j:min(maxj-jgittersize+1,jmpos(fehlerposition)).weitereverarbeitung:writepermanentdoublefootnote(anwendungstext(wdfusszeilenachpruefung));wdlauffaehig(TRUE);REP REPbewegecursoraufgitterUNTILtaste=escPER;inchar(taste);IFtaste=simulationTHENwdsimulationELIFtaste=eingabeTHENwritepermanentdoublefootnote(anwendungstext(wdfusszeile));LEAVEweitereverarbeitungELIFtaste=druckenTHENwddruckenELIFtaste=abspeichernTHENwdspeichernELIFtaste=abbrechenTHEN LEAVEwdeditierenELSEout(piep)FI PER.bewegecursoraufgitter:GPOS VARgp:=getgcursor;bewegecursor(gp,taste,PROCgibbildaus).wdsimulation:transformierewirkungsdiagrammundstartesimulation(NOTls,returncode);page;writehead(anwendungstext(wdkopfzeile));olddoublefootnote;bsspeicherlesen(zeichenflaeche).wddrucken:diagrammausschnittdrucken.wdspeichern:aenderungenspeichern(dsname);letzteaenderunggespeichert:=TRUE;doublefootnote(anwendungstext(aenderungengespeichert));pause(10);olddoublefootnote.wdspeichernundverlassen:aenderungenspeichern(dsname);doublefootnote(anwendungstext(aenderungengespeichert));pause(10);returncode:=0;LEAVEwderfassen.dsname:name(wddsnamen,link(wdmodelle,lang)).wdneuausgeben:gibbildaus.END PROCwderfassen;PROCweiseaufungeeignetesobjekthin(INT CONSTnr):out(piep);fehlercode:=nr;doublefootnote(anwendungstext(nr));pause(20)END PROCweiseaufungeeignetesobjekthin;LETauskcompilunbekkomm="\",auskcompilparameter="]",auskcompilsymbole="^",auskfalschertyp="_",auskcompilungueltzw="AB",auskcompilmehrfdekl="C",auskcompilsonstiges="D";LETunbekkommdo="unbekanntes Kommando",undefdyadischop="undefinierter dyadischer",undefmonadop="undefinierter monadischer",paramsindfalsch="Typen der Parameter sind falsch",nurletzteanweisg="nur die letzte Anweisung",anstelledessymb="anstelle des letzten Symbols",unzulselektsymb="unzulaessiges Selektor-Symbol",konstdarfnicht="die Konstante darf nicht veraendert",klammerauffehlt="'(' fehlt",klammerzufehlt=
+"')' fehlt",operatorfehlt="';' oder Operator ('+',",ungueltigzwischen="ungueltig zwischen Anweisungen",istmehrfachdekl="ist mehrfach deklariert",falschertypdesresultats="falscher Typ des Resultats";TEXT PROCauskunftzumsyntaxfehler(TEXT CONSTmessage):IFpos(message,unbekkommdo)<>0THENauskcompilunbekkommELIFpos(message,undefdyadischop)<>0CORpos(message,undefmonadop)<>0CORpos(message,paramsindfalsch)<>0THENauskcompilparameterELIFpos(message,nurletzteanweisg)<>0CORpos(message,anstelledessymb)<>0CORpos(message,unzulselektsymb)<>0CORpos(message,konstdarfnicht)<>0THENauskcompilsymboleELIFpos(message,klammerauffehlt)<>0CORpos(message,klammerzufehlt)<>0CORpos(message,operatorfehlt)<>0CORpos(message,ungueltigzwischen)<>0THENauskcompilungueltzwELIFpos(message,istmehrfachdekl)<>0THENauskcompilmehrfdeklELIFpos(message,falschertypdesresultats)<>0THENauskfalschertypELSEauskcompilsonstigesFI.END PROCauskunftzumsyntaxfehler;DATASPACE VARfeldds;BOUND ROW100TEXT VARfeld;INT CONSTseite1:=18;INT VARcursorfeld;TEXT CONSTleeresfeld:=77*" ";PROCerfassenamenundwd(TEXT CONSTmbname,INT CONSTmodellnr,INT VARreturncode):enablestop;BOOL VARfalscheeingaben;TEXT VARinfotext:="",taste:="",lang:="",kurz:="";returncode:=0;forget(feldds);feldds:=nilspace;feld:=feldds;REPkernvonwderfassungPER.kernvonwderfassung:maskefuernamenausgeben;REPputgetformular1(feld,cursorfeld,taste);IFtaste=abbruchmenuTHENeingabendeserstenformularspruefen(lang,kurz,modellnr,falscheeingaben);IF(NOTfalscheeingaben)CANDabspeicherngewuenschtTHEN IFmodellneuTHENwdeinfuegen(mbname,lang,kurz)ELSEwdumbenennen(lang,kurz,modellnr)FI;aenderungenspeichern(dsname);leavewderfassungFI;returncode:=1;leavewderfassungELIFtaste=auskunftstasteTHENinfotext:=auskunftseite1;fehlermeldung:="";auskunftsdienst(infotext,fehlermeldung,auskunftsloeschtaste1);show(formular(seite1));cursorfeld:=2;feld(1):=leeresfeld;footnote(steuerleiste(stmenuoderweiter));ELIFtaste=weitertasteTHENeingabendeserstenformularspruefen(lang,kurz,modellnr,falscheeingaben);IF NOTfalscheeingabenTHEN IFmodellneuTHENwdeinfuegen(mbname,lang,kurz)ELSEwdumbenennen(lang,kurz,modellnr)FI;wderfassen(lang,returncode);IFreturncode=1THENbeseitigedsundpflegethesauri;FI;leavewderfassung;FI;ELSEfeld(1):=meldungstext(fehlertaste)FI PER.beseitigedsundpflegethesauri:loesche((link(wdmodelle,lang)+20),mbname);.maskefuernamenausgeben:lang:=aktuellermodellname;kurz:=aktuellermodellkurzname;maskezurmodellinitialisierungausgeben(lang,kurz).modellneu:modellnr=0.abspeicherngewuenscht:put(formular(seite1),"",1);cursor(3,20);yes(compress(meldungstext(fragehierabspeichern))).dsname:name(wddsnamen,link(wdmodelle,lang)).leavewderfassung:forget(feldds);LEAVEerfassenamenundwd.END PROCerfassenamenundwd;PROCmaskezurmodellinitialisierungausgeben(TEXT CONSTlang,kurz):show(formular(seite1));footnote(steuerleiste(stmenuoderweiter));cursorfeld:=2;feld(1):=leeresfeld;feld(2):=lang+(maxmodellnamelang-length(lang))*"_";feld(3):=kurz+(maxmodellnamekurz-length(kurz))*"_";feld(4):="";feld(5):="";.END PROCmaskezurmodellinitialisierungausgeben;PROCeingabendeserstenformularspruefen(TEXT VARlang,kurz,INT CONSTmodellinbearbeitung,BOOL VARfalscheeingaben):ROW5TEXT VARhilfsfeld;feld(1):=leeresfeld;put(formular(seite1),feld(1),1);langnamenpruefen;aufnamensgleichheitpruefen;kurznamenpruefen;eingabenablegen;falscheeingaben:=FALSE.verlasseeingabendeserstenformularspruefen:falscheeingaben:=TRUE;LEAVEeingabendeserstenformularspruefen.langnamenpruefen:hilfsfeld(2):=feld(2);hilfsfeld(2):=komprimiere(hilfsfeld(2));IFlength(hilfsfeld(2))=0THENfeld(1):=meldungstext(fehlerlangnamefehlt);cursorfeld:=2;verlasseeingabendeserstenformularspruefenELIFlength(hilfsfeld(2))>maxmodellnamelangTHENfeld(1):=meldungstext(fehlerlangname);cursorfeld:=2;verlasseeingabendeserstenformularspruefenFI.kurznamenpruefen:hilfsfeld(3):=feld(3);hilfsfeld(3):=komprimiere(hilfsfeld(3));IFlength(hilfsfeld(3))=0THENfeld(1):=meldungstext(fehlerkurznamefehlt);cursorfeld:=3;verlasseeingabendeserstenformularspruefenELIFlength(hilfsfeld(3))>
+maxmodellnamekurzTHENfeld(1):=meldungstext(fehlerkurzname);cursorfeld:=3;verlasseeingabendeserstenformularspruefenFI.aufnamensgleichheitpruefen:IFmodellinbearbeitung<>link(wdmodelle,hilfsfeld(2))CAND(wdmodelleCONTAINShilfsfeld(2))THENfeld(1):=meldungstext(fehlermodellnamedoppelt);cursorfeld:=2;verlasseeingabendeserstenformularspruefenFI.eingabenablegen:lang:=hilfsfeld(2);kurz:=hilfsfeld(3).END PROCeingabendeserstenformularspruefen;DATASPACE VARmodellds;PROCcopywd(INT CONSTnr,TEXT CONSTmodellbank,INT VARreturncode):datenraumkopieren;wdkopieeditieren.datenraumkopieren:forget(modellds);modellds:=old(name(wddsnamen,nr)).wdkopieeditieren:diagrammankoppeln(modellds);erfassenamenundwd(modellbank,0,returncode).END PROCcopywd;END PACKETdiagrammpraesentation2;
+
+
diff --git a/app/schulis-simulationssystem/3.0/src/e b/app/schulis-simulationssystem/3.0/src/e
new file mode 100644
index 0000000..f36f65f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/e
@@ -0,0 +1,2 @@
+PACKETergaenzungenzurbenutzerschnittstelleDEFINESvorls,nachls,doublefootnote,olddoublefootnote,writepermanentdoublefootnote:TEXT VARpermanentfootnote:="";PROCvorls:doublefootnote(" ")END PROCvorls;PROCnachls:doublefootnote(" ")END PROCnachls;PROCdoublefootnote(TEXT CONSTt):INT VARx,y;getcursor(x,y);ersterteil;zweiterteil;cursor(x,y).ersterteil:INT VARumbruch:=pos(t," ");cursor(1,23);IFumbruch>0THENout(invers(text(subtext(t,1,umbruch-1),76)))ELSEout(invers(text(t,76)))FI.zweiterteil:cursor(1,24);IFumbruch>0THENout(invers(text(subtext(t,umbruch+1,LENGTHt),76)))ELSEout(invers(76*" "))FI.END PROCdoublefootnote;PROColddoublefootnote:doublefootnote(permanentfootnote)END PROColddoublefootnote;PROCwritepermanentdoublefootnote(TEXT CONSTt):permanentfootnote:=t;doublefootnote(t)END PROCwritepermanentdoublefootnote;END PACKETergaenzungenzurbenutzerschnittstelle;
+
diff --git a/app/schulis-simulationssystem/3.0/src/g b/app/schulis-simulationssystem/3.0/src/g
new file mode 100644
index 0000000..5964efc
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/g
@@ -0,0 +1,4 @@
+PACKETkoordinatenDEFINES GPOS,MPOS,null,:=,=,igpos,jgpos,impos,jmpos,iwindowpos,jwindowpos,gpos,mpos,newmpos,gcursor,getgcursor,bewegecursor,standardfenster,imgitter,igittersize,jgittersize,gitterfenster,gitterstart,:LETmaxlength=9,maxheight=1,habstand=4,vabstand=2,xsize=77,ysize=20,maxi=20,maxj=10;TEXT CONSTcursorbewegungen:="���
+��"+return+rubin+rubout;LETreturn=" ",rubin="�",rubout="�",hop="�",piep="�";WINDOW VARfenster:=window(2,2,xsize,ysize);WINDOW PROCstandardfenster:fensterEND PROCstandardfenster;TYPE GITTERFENSTER=STRUCT(MPOSstart,INTisize,jsize);TYPE GPOS=STRUCT(INTi,j);TYPE MPOS=STRUCT(INTi,j);GPOS PROCgpos(INT CONSTi,j):GPOS VARg;g.i:=i;g.j:=j;gENDPROCgpos;OP:=(GPOS VARl,GPOS CONSTr):CONCR(l):=CONCR(r)ENDOP:=;INT PROCigpos(GPOS CONSTg):g.iEND PROCigpos;INT PROCjgpos(GPOS CONSTg):g.jEND PROCjgpos;BOOL OP=(GPOS CONSTl,r):(l.i=r.i)AND(l.j=r.j)END OP=;MPOS PROCnewmpos(INT CONSTi,j):MPOS VARm;m.i:=i;m.j:=j;mEND PROCnewmpos;MPOS PROCnull:MPOS VARm;m.i:=0;m.j:=0;mEND PROCnull;BOOL OP=(MPOS CONSTl,r):(l.i=r.i)AND(l.j=r.j)END OP=;OP:=(MPOS VARl,MPOS CONSTr):CONCR(l):=CONCR(r)ENDOP:=;INT PROCimpos(MPOS CONSTm):m.iEND PROCimpos;INT PROCjmpos(MPOS CONSTm):m.jEND PROCjmpos;MPOS PROCmpos(GPOS CONSTg):newmpos(standardgitter.start.i+g.i-1,standardgitter.start.j+g.j-1)ENDPROCmpos;GPOS PROCgpos(MPOS CONSTm):GPOS VARg;IF NOTimgitter(m)THENg.i:=0;g.j:=0;ELSEg.i:=m.i-standardgitter.start.i+1;g.j:=m.j-standardgitter.start.j+1FI;gENDPROCgpos;INT PROCiwindowpos(GPOS CONSTgitterpos):(gitterpos.i-1)*(maxlength+2+habstand)+3END PROCiwindowpos;INT PROCjwindowpos(GPOS CONSTgitterpos):(gitterpos.j-1)*(maxheight+2+vabstand)+2END PROCjwindowpos;BOOL PROCimgitter(MPOS CONSTmp):standardgitter.start.i<=mp.iANDstandardgitter.start.j<=mp.jANDmp.i-standardgitter.start.i<igittersizeANDmp.j-standardgitter.start.j<jgittersizeEND PROCimgitter;BOOL PROCimgitter(GPOS CONSTgp):1<=igpos(gp)AND1<=jgpos(gp)ANDigpos(gp)<=igittersizeANDjgpos(gp)<=jgittersizeEND PROCimgitter;GITTERFENSTER VARstandardgitter;gitterfenster(newmpos(1,1));INT PROCigittersize:standardgitter.isizeEND PROCigittersize;INT PROCjgittersize:standardgitter.jsizeEND PROCjgittersize;MPOS PROCgitterstart:standardgitter.startEND PROCgitterstart;PROCgitterfenster(MPOS CONSTstart):INT VARxsize:=areaxsize(fenster),ysize:=areaysize(fenster);berechneisizeundjsize;.startpunktunzulaessig:start.i<1ORstart.i>maxiORstart.j<1ORstart.j>maxj.berechneisizeundjsize:standardgitter.start:=start;standardgitter.isize:=(xsize+1)DIVxsizeeinerboxsamtumgebung;standardgitter.jsize:=(ysize+1)DIVysizeeinerboxsamtumgebung.xsizeeinerboxsamtumgebung:(maxlength+habstand+2).ysizeeinerboxsamtumgebung:(maxheight+vabstand+2).END PROCgitterfenster;PROCverschiebegitter(INT CONSThor,vert,PROCkonstruierediagrammimneuengitterfenster):MPOS VARstartmp:=mpos(gpos(1,1));gitterfenster(newmpos(imp,jmp));konstruierediagrammimneuengitterfenster.imp:max(1,min(maxi-igittersize+1,impos(startmp)+hor)).jmp:max(1,min(maxj-jgittersize+1,jmpos(startmp)+vert)).END PROCverschiebegitter;GPOS VARgittercursor;gittercursor.i:=1;gittercursor.j:=1;PROCgcursor(GPOS CONSTg):WINDOW VARw:=fenster;IFimgitter(g)THENgittercursor:=g;cursor(w,iwindowpos(g),jwindowpos(g))FI END PROCgcursor;GPOS PROCgetgcursor:gittercursorEND PROCgetgcursor;PROCbewegecursor(GPOS VARgp,TEXT VARtaste,PROCneuesbild):INT VARsooftwie,schritte;MPOS VARaktuellempos;gcursor(gp);REPgp:=getgcursor;inchar(taste);IFtaste=hopTHENlieshopsequenzELSEsooftwie:=1+clearbufferandcount(taste)FI;SELECTpos(cursorbewegungen,taste)OF CASE1:geheevtlnachrechtsCASE2:geheevtlnachlinksCASE3:geheevtlnachobenCASE4:geheevtlnachuntenOTHERWISEverlasseprozedurENDSELECT PER.geheevtlnachrechts:WHILEsooftwie>0REPgp:=getgcursor;aktuellempos:=mpos(gp);IF NOT(impos(aktuellempos)<maxi)THENout(piep);sooftwie:=0ELIFigpos(gp)<igittersizeTHENschritte:=min(igittersize-igpos(gp),sooftwie);gcursor(gpos(igpos(gp)+schritte,jgpos(gp)));sooftwieDECRschritteELSEverschiebegitter(sooftwie,0,PROCneuesbild);gcursor(gp);sooftwie:=0FI PER.
+geheevtlnachlinks:WHILEsooftwie>0REPgp:=getgcursor;aktuellempos:=mpos(gp);IF NOT(1<impos(aktuellempos))THENout(piep);sooftwie:=0ELIF1<igpos(gp)THENschritte:=min(igpos(gp)-1,sooftwie);gcursor(gpos(igpos(gp)-schritte,jgpos(gp)));sooftwieDECRschritteELSEverschiebegitter(-sooftwie,0,PROCneuesbild);gcursor(gp);sooftwie:=0FI PER.geheevtlnachoben:WHILEsooftwie>0REPgp:=getgcursor;aktuellempos:=mpos(gp);IF NOT(1<jmpos(aktuellempos))THENout(piep);sooftwie:=0ELIF1<jgpos(gp)THENschritte:=min(jgpos(gp)-1,sooftwie);gcursor(gpos(igpos(gp),jgpos(gp)-schritte));sooftwieDECRschritteELSEverschiebegitter(0,-sooftwie,PROCneuesbild);gcursor(gp);sooftwie:=0FI PER.geheevtlnachunten:WHILEsooftwie>0REPgp:=getgcursor;aktuellempos:=mpos(gp);IF NOT(jmpos(aktuellempos)<maxj)THENout(piep);sooftwie:=0ELIFjgpos(gp)<jgittersizeTHENschritte:=min(jgittersize-jgpos(gp),sooftwie);gcursor(gpos(igpos(gp),jgpos(gp)+schritte));sooftwieDECRschritteELSEverschiebegitter(0,+sooftwie,PROCneuesbild);gcursor(gp);sooftwie:=0FI PER.lieshopsequenz:REPinchar(taste);SELECTpos(cursorbewegungen,taste)OF CASE1:hoprechts;LEAVElieshopsequenzCASE2:hoplinks;LEAVElieshopsequenzCASE3:hophoch;LEAVElieshopsequenzCASE4:hoprunter;LEAVElieshopsequenzCASE6,7,8,9:verlasseprozedurOTHERWISEout(piep)END SELECT PER.hoprechts:IFigpos(gp)=igittersizeTHENsooftwie:=igittersizeELSEsooftwie:=igittersize-igpos(gp)FI.hoplinks:IFigpos(gp)=1THENsooftwie:=igittersizeELSEsooftwie:=igpos(gp)-1FI.hophoch:IFjgpos(gp)=1THENsooftwie:=jgittersizeELSEsooftwie:=jgpos(gp)-1FI.hoprunter:IFjgpos(gp)=jgittersizeTHENsooftwie:=jgittersizeELSEsooftwie:=jgittersize-jgpos(gp)FI.verlasseprozedur:LEAVEbewegecursor.END PROCbewegecursor;END PACKETkoordinaten;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls bildschirmeingaben b/app/schulis-simulationssystem/3.0/src/ls bildschirmeingaben
new file mode 100644
index 0000000..f710a8f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls bildschirmeingaben
@@ -0,0 +1,5 @@
+PACKETlseingabenDEFINESeingabemodellgroessen,gibberechnungsstandzeileaus,warteaufesc,tastelesen,forgetlogischemaske:LETdsname="log bs",headvar=62,headpar=63,headzeit=64,headvonbis=65,headdefbereich=66,anfangszeitpunktbezeichner=69,beobachtungsdauerbezeichner=70,auskberechnungsstand=71,blank=" ",cleop="�",cleol="�",beep="�",down="
+",up="�",esc="�",markon="",markoff="",abbrechen="m",escseq="19m";LETistleer=0,istueberschrift=1,istvariable=2,istparameter=3,istzeit=4;LETbuchsteingabespalte=78,spaltevon=1,ueberschriftsoffset=0,namensoffset=2,eingabenoffset=33,linienoffset=43,modellvonoffset=45,modellbisoffset=60,vonbisoffset=50,zeilenlaenge=79;LETanfangszeile=5,anzahlzeilen=19;LETlaenge=10,fracs=4;LETmaxdimension=42;BOUND STRUCT(INTzeilenanzahl,erstevarzeile,ersteparzeile,erstezeitzeile,ROWmaxdimensionTEXTzeile,ROWmaxdimensionINTzustand,ROWmaxdimensionREALmodellwert,modellvon,modellbis)VARbildschirmmaske;INT VARerstezeile,index;TEXT VARhead,foot;PROCforgetlogischemaske:forget(dsname,quiet)END PROCforgetlogischemaske;PROCinitbildschirmmaske(LOESUNG VARloesung):ZUSTAND VARvariable:=STARTWERTloesung;PARAMETER VARparameter:=PARAMETERSATZloesung;REAL VARanfangszeitpunkt:=STARTZEITloesung,beobachtungsdauer:=DAUERloesung;INT VARzaehler,aktzeile:=1;IFexists(dsname)THENbelegemodellwerteneuELSEerzeugeneuemaskeEND IF.belegemodellwerteneu:bildschirmmaske:=old(dsname);aktzeile:=bildschirmmaske.erstevarzeile+1;FORzaehlerFROM1UPTOdimensionREPbildschirmmaske.modellwert[aktzeile]:=variableSUBzaehler;aktzeileINCR1PER;aktzeile:=bildschirmmaske.ersteparzeile+1;FORzaehlerFROM1UPTOparameteranzahlREPbildschirmmaske.modellwert[aktzeile]:=parameterSUBzaehler;aktzeileINCR1PER;aktzeile:=bildschirmmaske.erstezeitzeile+1;bildschirmmaske.modellwert[aktzeile]:=anfangszeitpunkt;bildschirmmaske.modellwert[aktzeile+1]:=beobachtungsdauer;aenderetexte.aenderetexte:FORzaehlerFROM1UPTObildschirmmaske.zeilenanzahlREP IFbildschirmmaske.zustand[zaehler]>=istvariableTHENmodifizieretext;END IF END REP.modifizieretext:replace(bildschirmmaske.zeile[zaehler],eingabenoffset,wandle(bildschirmmaske.modellwert[zaehler],laenge,fracs)).erzeugeneuemaske:ZUSTAND VARvaruntergrenze:=zustandunteregrenze,varobergrenze:=zustandoberegrenze;PARAMETER VARparuntergrenze:=parameterunteregrenze,parobergrenze:=parameteroberegrenze;REAL VARdaueruntergrenze:=minbeobachtungsdauer,dauerobergrenze:=maxbeobachtungsdauer,anfanguntergrenze:=minanfangszeitpunkt,anfangobergrenze:=maxanfangszeitpunkt;aktzeile:=1;bildschirmmaske:=new(dsname);bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(TRUE,meldungstext(headvar),0.0,0.0,0.0);bildschirmmaske.zustand[aktzeile]:=istueberschrift;bildschirmmaske.erstevarzeile:=aktzeile;aktzeileINCR1;FORzaehlerFROM1UPTOdimensionREPbildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(FALSE,variablenname(zaehler),variableSUBzaehler,varuntergrenzeSUBzaehler,varobergrenzeSUBzaehler);bildschirmmaske.zustand[aktzeile]:=istvariable;bildschirmmaske.modellwert[aktzeile]:=variableSUBzaehler;bildschirmmaske.modellvon[aktzeile]:=varuntergrenzeSUBzaehler;bildschirmmaske.modellbis[aktzeile]:=varobergrenzeSUBzaehler;aktzeileINCR1PER;bildschirmmaske.zeile[aktzeile]:=(linienoffset-ueberschriftsoffset)*blank+senkrecht+cleol;bildschirmmaske.zustand[aktzeile]:=istleer;aktzeileINCR1;bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(TRUE,meldungstext(headpar),0.0,0.0,0.0);bildschirmmaske.zustand[aktzeile]:=istueberschrift;bildschirmmaske.ersteparzeile:=aktzeile;aktzeileINCR1;FORzaehlerFROM1UPTOparameteranzahlREPbildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(FALSE,parametername(zaehler),parameterSUBzaehler,paruntergrenzeSUBzaehler,parobergrenzeSUBzaehler);bildschirmmaske.zustand[aktzeile]:=istparameter;bildschirmmaske.modellwert[aktzeile]:=parameterSUBzaehler;bildschirmmaske.modellvon[aktzeile]:=paruntergrenzeSUBzaehler;bildschirmmaske.modellbis[aktzeile]:=parobergrenzeSUBzaehler;aktzeileINCR1PER;bildschirmmaske.zeile[aktzeile]:=(linienoffset-ueberschriftsoffset)*blank+senkrecht+
+cleol;bildschirmmaske.zustand[aktzeile]:=istleer;aktzeileINCR1;bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(TRUE,meldungstext(headzeit),0.0,0.0,0.0);bildschirmmaske.zustand[aktzeile]:=istueberschrift;bildschirmmaske.erstezeitzeile:=aktzeile;aktzeileINCR1;bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(FALSE,meldungstext(anfangszeitpunktbezeichner),anfangszeitpunkt,anfanguntergrenze,anfangobergrenze);bildschirmmaske.zustand[aktzeile]:=istzeit;bildschirmmaske.modellwert[aktzeile]:=anfangszeitpunkt;bildschirmmaske.modellvon[aktzeile]:=anfanguntergrenze;bildschirmmaske.modellbis[aktzeile]:=anfangobergrenze;aktzeileINCR1;bildschirmmaske.zeile[aktzeile]:=zeilezusammenstellen(FALSE,meldungstext(beobachtungsdauerbezeichner),beobachtungsdauer,daueruntergrenze,dauerobergrenze);bildschirmmaske.zustand[aktzeile]:=istzeit;bildschirmmaske.modellwert[aktzeile]:=beobachtungsdauer;bildschirmmaske.modellvon[aktzeile]:=daueruntergrenze;bildschirmmaske.modellbis[aktzeile]:=dauerobergrenze;bildschirmmaske.zeilenanzahl:=aktzeileEND PROCinitbildschirmmaske;TEXT PROCzeilezusammenstellen(BOOL CONSTistueberschrift,TEXT CONSTname,REAL CONSTwert,min,max):TEXT VARt;IFistueberschriftTHENt:=ueberschriftsoffset*blank;tCATcompress(name);tCAT(linienoffset-LENGTHt)*blank;tCATsenkrecht+cleolELSEt:=namensoffset*blank;tCATcompress(name);tCAT(eingabenoffset-LENGTHt-1)*blank;tCATwandle(wert,laenge,fracs);tCAT(linienoffset-LENGTHt)*blank;tCATsenkrecht;tCAT(modellvonoffset-linienoffset-1)*blank;tCATwandle(min,laenge,fracs);tCAT(modellbisoffset-modellvonoffset-laenge)*blank;tCATwandle(max,laenge,fracs);tCATcleolEND IF;tEND PROCzeilezusammenstellen;PROCbauebildschirmauf:errechneletztezeile;gibzeilenaus;loeschedenbildschirmrest.errechneletztezeile:INT VARletztezeile;letztezeile:=min(bildschirmmaske.zeilenanzahl,erstezeile+anzahlzeilen-1);WHILEbildschirmmaske.zustand[letztezeile]<istvariableREPletztezeileDECR1PER.gibzeilenaus:INT VARi,zeilenposition:=anfangszeile;FORiFROMerstezeileUPTOletztezeileREPcursor(spaltevon,zeilenposition);out(bildschirmmaske.zeile[i]);zeilenpositionINCR1PER.loeschedenbildschirmrest:FORiFROMzeilenpositionUPTOanfangszeile+anzahlzeilen-1REPcursor(spaltevon,i);out(cleol)PER.END PROCbauebildschirmauf;PROCeingabemodellgroessen(LOESUNG VARloesung,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)fkt,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cofkt,TEXT CONSTtextfuerkopfzeile,textfuerfusszeile,TEXT VARtaste,TEXT CONSTzeichenkette,INT VARfehler):initbildschirmmaske(loesung);erstezeile:=1;head:=textfuerkopfzeile;foot:=textfuerfusszeile;gibstdkopfaus;bauebildschirmauf;lasseeingeben(zeichenkette,taste);IFtaste<>abbrechenTHENberechnekurve;END IF;forgetlogischemaske;cursor(1,anfangszeile-3);out(cleop).berechnekurve:gibberechnungsstandzeileaus;speicheremodellwerte(loesung);loesungLOESUNGSABSCHNITTkurve1(PROCfkt,PROCcofkt,STARTWERTloesung,zustandunteregrenze,zustandoberegrenze,STARTZEITloesung,DAUERloesung,PARAMETERSATZloesung,anzahlbeobachtungspunkte,codimension," neue kurve",fehler);loesungDAUER(max(0.0,letztezeit(LOESUNGSABSCHNITTloesung)-(STARTZEITloesung))).END PROCeingabemodellgroessen;PROCgibstdkopfaus:cursor(spaltevon,anfangszeile-3);out(meldungstext(headdefbereich)+cleol);cursor(spaltevon,anfangszeile-2);out((linienoffset-ueberschriftsoffset)*waagerecht+kreuz+(zeilenlaenge-linienoffset-1)*waagerecht);cursor(spaltevon,anfangszeile-1);out((linienoffset-ueberschriftsoffset)*blank+senkrecht+(vonbisoffset-linienoffset-1)*blank+meldungstext(headvonbis)+cleol);footnote(foot)END PROCgibstdkopfaus;PROCcursorup:INT VARi:=index;IFi=2THEN IFerstezeile=1THENout(beep)ELSEerstezeile:=1;bauebildschirmauf;END IF ELSEloeschecursor;REPiDECR1UNTILbildschirmmaske.zustand[i]>=istvariablePER;index:=i;IFi<erstezeileTHENscrollupEND IF;END IF.scrollup:IFbildschirmmaske.zustand[i-1]=istueberschriftTHENerstezeile:=i-1ELSEerstezeile:=iEND IF;bauebildschirmaufEND PROCcursorup;PROCcursordown:INT VARi:=index;IFi=bildschirmmaske.zeilenanzahlTHENout(beep)
+ELSEloeschecursor;REPiINCR1UNTILbildschirmmaske.zustand[i]>=istvariablePER;index:=i;IFi>erstezeile+anzahlzeilen-1THENscrolldownEND IF END IF.scrolldown:INT VARoberstezeile:=i-anzahlzeilen+1;WHILEbildschirmmaske.zustand[oberstezeile]=istleerREPoberstezeileINCR1PER;erstezeile:=oberstezeile;bauebildschirmaufEND PROCcursordown;PROCloeschecursor:cursor(spaltevon+eingabenoffset-2,index-erstezeile+anfangszeile);out(wandle(bildschirmmaske.modellwert[index],laenge+1,fracs))END PROCloeschecursor;PROClasseeingeben(TEXT CONSTzeichenkette,TEXT VARendetaste):BOOL VARendegewuenscht:=FALSE;TEXT VAReingabe,allezeichen:="",endestring:=escseq+zeichenkette,exitchar;initallezeichen;bestimmeersteseingabefeld;REPlassefeldeditierenUNTILendegewuenschtPER.initallezeichen:INT VARi;FORiFROM1UPTO255REPallezeichenCATcode(i)PER.bestimmeersteseingabefeld:index:=1;REPindexINCR1;UNTILbildschirmmaske.zustand[index]>=istvariablePER;.lassefeldeditieren:eingabe:=markon+wandle(bildschirmmaske.modellwert[index],laenge,fracs);cursor(spaltevon+eingabenoffset-marksize-1,index-erstezeile+anfangszeile);editget(eingabe,laenge+1,laenge+1,up+down,allezeichen,exitchar);out(markoff);IFeingabeokTHENinterpretiereexitcharELSEfehlermeldungEND IF.fehlermeldung:footnote("Ungültige Eingabe! Weiter mit Taste");pause;footnote(foot).eingabeok:eingabespeichern(eingabe).interpretiereexitchar:IF(exitcharSUB1)=escTHENinterpretiereescsequenzELIFexitchar=upTHENcursorupELIF NOT(index=bildschirmmaske.zeilenanzahlANDexitchar<>down)THENcursordownEND IF.interpretiereescsequenz:INT VARstelle:=pos(endestring,exitcharSUB2),alteerstezeile;IFstelle>=3THENendegewuenscht:=TRUE;endetaste:=exitcharSUB2ELIFstelle<>0THENalteerstezeile:=erstezeile;loeschecursor;behandleesc1undesc9;ELSEout(beep)END IF.behandleesc1undesc9:IFstelle=1THENindex:=2;erstezeile:=1ELSEindex:=bildschirmmaske.zeilenanzahl;erstezeile:=max(1,bildschirmmaske.zeilenanzahl-anzahlzeilen+1);WHILEbildschirmmaske.zustand[erstezeile]=istleerREPerstezeileINCR1PER END IF;IFerstezeile<>alteerstezeileTHENbauebildschirmaufEND IF END PROClasseeingeben;BOOL PROCeingabespeichern(TEXT CONSTeingabe):TEXT VARohnesteuerzeichen;REAL VARwert;IF(eingabeSUB1)=markonTHENohnesteuerzeichen:=subtext(eingabe,2)ELSEohnesteuerzeichen:=eingabeEND IF;pruefedefbereich;speicherewertab;TRUE.pruefedefbereich:wert:=real(ohnesteuerzeichen);IF NOTlastconversionokTHEN LEAVEeingabespeichernWITH FALSE END IF;IFwert>bildschirmmaske.modellbis[index]ORwert<bildschirmmaske.modellvon[index]THEN LEAVEeingabespeichernWITH FALSE END IF.speicherewertab:bildschirmmaske.modellwert[index]:=wert;replace(bildschirmmaske.zeile[index],eingabenoffset,wandle(wert,laenge,fracs))END PROCeingabespeichern;PROCspeicheremodellwerte(LOESUNG VARloesung):ZUSTAND VARzustand:=neuerzustand(dimension);PARAMETER VARparam:=neuerparameter(parameteranzahl);REAL VARanfangszeitpunkt,beobachtungsdauer;INT VARi;FORiFROM1UPTOdimensionREPreplace(zustand,i,bildschirmmaske.modellwert[i+bildschirmmaske.erstevarzeile])END REP;FORiFROM1UPTOparameteranzahlREPreplace(param,i,bildschirmmaske.modellwert[i+bildschirmmaske.ersteparzeile])END REP;anfangszeitpunkt:=bildschirmmaske.modellwert[bildschirmmaske.erstezeitzeile+1];beobachtungsdauer:=bildschirmmaske.modellwert[bildschirmmaske.erstezeitzeile+2];loesungSTARTWERTzustand;loesungPARAMETERSATZparam;loesungSTARTZEITanfangszeitpunkt;loesungDAUERbeobachtungsdauerEND PROCspeicheremodellwerte;PROCgibberechnungsstandzeileaus:cursor(1,24);out(invers(compress(auskunftstext(auskberechnungsstand))));cursor(40,24);END PROCgibberechnungsstandzeileaus;PROCtastelesen(TEXT VARtaste):warteaufesc;inchar(taste);END PROCtastelesen;PROCwarteaufesc:TEXT VARt:="";cursor(1,24);inchar(t);WHILE NOTescbeginnREPout(beep);inchar(t)PER;cursor(buchsteingabespalte,24).escbeginn:t=esc.END PROCwarteaufesc;END PACKETlseingaben;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls co routinen und co b/app/schulis-simulationssystem/3.0/src/ls co routinen und co
new file mode 100644
index 0000000..2f03286
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls co routinen und co
@@ -0,0 +1,11 @@
+PACKETcoroutinenundcoDEFINEScoroutinedummy,coroutinezeit,coroutinephase,coroutinehisto,skalierung,kreuzzeitvergleich,kreuzphasevergleich,kreuzhistovergleich,tabelle:LETerstekurve=74,zweitekurve=75,legendentext=73,auskoberbegriff=5,normaleanzahlvonausgegebenenpunkten=21,laengevarkurzform=7,laengebeibeschriftung=8,nachkommastellen=2,vorkomma=5,penanzahl=5,epsilon=0.5,abstand=0.1,achsenabstand=0.05,histogrammkennzeichen="h",zeitdiagrammkennzeichen="z",phasendiagrammkennzeichen="p",gepunktet=2,durchgezogen=1,standarddicke=0,loeschstift=0,standardstift=1;BOOL VARmitskalierung;skalierung(TRUE);REAL CONSTstandardhoehe:=stdhoehe,standardbreite:=stdbreite;LETinitialisieren=0,kreuzerzeugen=1,erstersatz=2,folgendersatz=3,anfpunktloeschen=4,plotten=5,abschluss=6,erstersatzneu=7,hminhisto=0.0,hzwihisto=3.0,hmaxhisto=12.0,maxkurven=20,maxanzvarproloesung=4;PROCskalierung(BOOL CONSTx):mitskalierung:=x;setzerahmen(x)END PROCskalierung;PROCcoroutinedummy(OUTPUT VARseite,INT CONSTfenster,KURVE VARkurve,REAL VARzeit,ZUSTAND VARmuster,ZUSTAND VARzustand,DATASPACE VARds1,INT VARwas,REAL VARxmin,xmax,ymin,ymax,BOOL VARdummy):END PROCcoroutinedummy;PROCcoroutinehisto(OUTPUT VARseite,INT CONSTfenster,KURVE VARkurve,REAL VARzeit,ZUSTAND VARmuster,ZUSTAND VARzustand,DATASPACE VARds1,INT VARwas,REAL VARxmin,xmax,ymin,ymax,BOOL VARdummy):REAL VARabbzeit,hakt,hmin,hzwi;INT VARz1;REAL VARalt,neu;BOUND STRUCT(REALt,dicke,ZUSTANDz,erster,ROWmaxanzvarproloesungINTp,ROW2PICTUREgraph,ROW4REALvpk,ROW5ROW5REALkoord,INTanz,REALnmin,nmax,tmin,tmax)VARl:=ds1;was:=wasMOD10;SELECTwasOF CASEinitialisieren:coroutineinitialisieren;was:=erstersatzCASEkreuzerzeugen:kreuzerzeugenundmalen;was:=erstersatzCASEerstersatz:erstenausgeben;was:=folgendersatzCASEfolgendersatz:folgendenausgebenCASEanfpunktloeschen:anfangspunktloeschen;was:=erstersatzneuCASEplotten:bildschirminhaltplotten;CASEabschluss:CASEerstersatzneu:putparameter(l.koord);erstenneuausgeben;was:=folgendersatzENDSELECT.coroutineinitialisieren:l.dicke:=balkendickebestimmen;l.t:=0.0;l.z:=neuerzustand(dimension+codimension);FORz1FROM1UPTOdimension+codimensionREPreplace(l.z,z1,-maxreal)PER;l.tmin:=xmin;l.tmax:=xmax;l.nmin:=ymin;l.nmax:=ymax;FORz1FROM1UPTOdimension+codimensionREPreplace(l.z,z1,l.nmin-0.1)PER;bestimmevariablenanzahl(l.p,l.anz,muster,dummy);legefensterfest(seite,l.vpk(1),l.vpk(2),l.vpk(3),l.vpk(4),fenster).kreuzerzeugenundmalen:nildiagramm(seite,fenster);beginplot;viewport(l.vpk(1),l.vpk(2),l.vpk(3),l.vpk(4));bestimmeextrema(histogrammkennzeichen,kurve,l.p,l.anz,l.tmin,l.tmax,l.nmin,l.nmax);window(seite,fenster,l.nmin,l.nmax,hminhisto,hmaxhisto);window(l.nmin,l.nmax,hminhisto,hmaxhisto);setzeundschreibekoordinatenkreuz;hmin:=hminhisto;hzwi:=hzwihisto;beschrifte(histogrammkennzeichen,seite,fenster,l.p,l.anz,l.nmin,l.nmax,hmin,hzwi);endplot.erstenausgeben:viewport(l.vpk(1),l.vpk(2),l.vpk(3),l.vpk(4));window(l.nmin,l.nmax,hminhisto,hmaxhisto);getparameter(l.koord);erstenneuausgeben.folgendenausgeben:beginplot;putparameter(l.koord);move(l.t,hminhisto+1.0);abbzeit:=abbildungtbeihistogramm(l.tmin,l.tmax,l.nmin,l.nmax,zeit);IFl.t<abbzeitTHENpen(loeschstift,standardstift,standarddicke,gepunktet)ELSEpen(loeschstift,loeschstift,standarddicke,durchgezogen)FI;draw(abbzeit,hminhisto+1.0);FORz1FROM1UPTOl.anzREPbalkenfortfuehrenPER;endplot;l.t:=abbzeit;l.z:=zustand.anfangspunktloeschen:beginplot;putparameter(l.koord);FORz1FROM1UPTOl.anzREPhakt:=hzwihisto+2.1*real(z1)+0.5*standardhoehe-0.2;alt:=zustandSUBl.p(z1);linksoffenerkasten(l.nmin,min(alt,l.nmax),l.dicke,hakt,loeschstift)PER;endplot.erstenneuausgeben:FORz1FROM1UPTOdimension+codimensionREPreplace(l.z,z1,l.nmin-0.1)PER;beginplot;FORz1FROM1UPTOl.anzREPbalkenfortfuehrenPER;endplot;abbzeit:=abbildungtbeihistogramm(l.tmin,l.tmax,l.nmin,l.nmax,zeit);l.t:=abbzeit;l.erster:=zustand;l.z:=zustand.bildschirminhaltplotten:richtepicturesein;ordnepenszu;tragebalkeninpicture1ein;tragezeitinpicture2ein;schreibepictures.balkendickebestimmen:IFfenster=1THEN2.0*standardhoeheELSE
+standardhoeheFI.setzeundschreibekoordinatenkreuz:putkreuz(seite,fenster,kreuzerzeugenundzeichnen(l.tmin,l.tmax,l.nmin,l.nmax,histogrammkennzeichen)).balkenfortfuehren:hakt:=hzwihisto+2.1*real(z1)+0.5*standardhoehe-0.2;alt:=l.zSUBl.p(z1);neu:=zustandSUBl.p(z1);IFalt<neuTHEN IFalt<l.nminTHEN IFneu<l.nminTHEN LEAVEbalkenfortfuehrenELSElinksoffenerkasten(l.nmin,min(neu,l.nmax),l.dicke,hakt,standardstift)FI ELIFalt=l.nminTHENstrichsenkrecht(l.nmin,l.dicke,hakt,loeschstift);zweistriche(l.nmin,min(neu,l.nmax),l.dicke,hakt,standardstift)ELIFalt>l.nminCANDalt<=l.nmaxTHEN IFneu>l.nminCANDneu<=l.nmaxTHENstrichsenkrecht(alt,l.dicke,hakt,loeschstift);linksoffenerkasten(alt,neu,l.dicke,hakt,standardstift)ELIFneu>l.nmaxTHENstrichsenkrecht(alt,l.dicke,hakt,loeschstift);zweistriche(alt,l.nmax,l.dicke,hakt,standardstift)FI ELIFalt>l.nmaxTHEN LEAVEbalkenfortfuehrenFI ELIFalt=neuTHEN LEAVEbalkenfortfuehrenELIFalt>neuTHEN IFalt<l.nminTHEN LEAVEbalkenfortfuehrenELIFalt=l.nminTHENstrichsenkrecht(alt,l.dicke,hakt,loeschstift);ELIFalt>l.nminCANDalt<=l.nmaxTHENlinksoffenerkasten(max(neu,l.nmin),alt,l.dicke,hakt,loeschstift);IFneu>=l.nminCANDneu<l.nmaxTHENstrichsenkrecht(neu,l.dicke,hakt,standardstift)FI ELIFalt>l.nmaxTHEN IFneu<l.nminTHENzweistriche(l.nmin,l.nmax,l.dicke,hakt,loeschstift)ELIFneu>=l.nminCANDneu<l.nmaxTHENzweistriche(neu,l.nmax,l.dicke,hakt,loeschstift);strichsenkrecht(neu,l.dicke,hakt,standardstift)ELIFneu=l.nmaxTHENstrichsenkrecht(neu,l.dicke,hakt,standardstift)ELIFneu>l.nmaxTHEN LEAVEbalkenfortfuehrenFI FI FI.richtepicturesein:l.graph(1):=nilpicture;l.graph(2):=nilpicture.ordnepenszu:pen(l.graph(1),durchgezogen);pen(l.graph(2),gepunktet).tragebalkeninpicture1ein:FORz1FROM1UPTOl.anzREPalt:=l.ersterSUBl.p(z1);neu:=zustandSUBl.p(z1);hakt:=hzwihisto+2.1*real(z1)+0.5*standardhoehe-0.2;IFneu>l.nmaxTHENzweistrichepic(l.nmin,l.nmax,l.dicke,hakt,l.graph(1))ELSElinksoffenerkastenpic(l.nmin,neu,l.dicke,hakt,l.graph(1))FI;IFalt=l.nminTHENstrichsenkrechtpic(l.nmin,l.dicke,hakt,l.graph(1))FI;PER.tragezeitinpicture2ein:move(l.graph(2),abbildungtbeihistogramm(l.tmin,l.tmax,l.nmin,l.nmax,l.tmin),hminhisto+1.0);draw(l.graph(2),abbildungtbeihistogramm(l.tmin,l.tmax,l.nmin,l.nmax,zeit),hminhisto+1.0).schreibepictures:putpicture(seite,fenster,l.graph(1));putpicture(seite,fenster,l.graph(2)).END PROCcoroutinehisto;PROCzweistriche(REAL CONSTmin,max,dicke,hoehe,INT CONSTstift):REAL VARhalbedicke:=0.5*dicke;pen(loeschstift,stift,standarddicke,durchgezogen);move(min,hoehe-halbedicke);draw(max,hoehe-halbedicke);move(min,hoehe+halbedicke);draw(max,hoehe+halbedicke).END PROCzweistriche;PROCzweistrichepic(REAL CONSTmin,max,dicke,hoehe,PICTURE VARgraph):REAL VARhalbedicke:=0.5*dicke;move(graph,min,hoehe-halbedicke);draw(graph,max,hoehe-halbedicke);move(graph,min,hoehe+halbedicke);draw(graph,max,hoehe+halbedicke).END PROCzweistrichepic;PROCstrichsenkrecht(REAL CONSTpos,dicke,hoehe,INT CONSTstift):REAL VARhalbedicke:=0.5*dicke;pen(loeschstift,stift,standarddicke,durchgezogen);move(pos,hoehe-halbedicke);draw(pos,hoehe+halbedicke).END PROCstrichsenkrecht;PROCstrichsenkrechtpic(REAL CONSTpos,dicke,hoehe,PICTURE VARgraph):REAL VARhalbedicke:=0.5*dicke;move(graph,pos,hoehe-halbedicke);draw(graph,pos,hoehe+halbedicke).END PROCstrichsenkrechtpic;PROClinksoffenerkasten(REAL CONSTmin,max,dicke,hoehe,INT CONSTstift):REAL VARhalbedicke:=0.5*dicke;pen(loeschstift,stift,standarddicke,durchgezogen);move(min,hoehe-halbedicke);draw(max,hoehe-halbedicke);draw(max,hoehe+halbedicke);draw(min,hoehe+halbedicke).END PROClinksoffenerkasten;PROClinksoffenerkastenpic(REAL CONSTmin,max,dicke,hoehe,PICTURE VARgraph):REAL VARhalbedicke:=0.5*dicke;move(graph,min,hoehe-halbedicke);draw(graph,max,hoehe-halbedicke);draw(graph,max,hoehe+halbedicke);draw(graph,min,hoehe+halbedicke).END PROClinksoffenerkastenpic;PROCcoroutinezeit(OUTPUT VARseite,INT CONSTfenster,KURVE VARkurve,REAL VARzeit,ZUSTAND VARmuster,ZUSTAND VARzustand,DATASPACE VARds1,INT VARwas,REAL VARxmin,xmax,ymin,ymax,BOOL VARdummy):BOUND
+ STRUCT(REALt,dicke,ZUSTANDz,ROWmaxanzvarproloesungINTp,ROWmaxanzvarproloesungPICTUREgraph,ROW4REALvpk,ROW5ROW5REALkoord,INTanz,REALxmin,xmax,ymin,ymax)VARl:=ds1;INT VARz1;was:=wasMOD10;SELECTwasOF CASEinitialisieren:coroutineinitialisieren;was:=erstersatzCASEkreuzerzeugen:kreuzerzeugenundmalen;was:=erstersatzCASEerstersatz:erstenausgeben;was:=folgendersatzCASEfolgendersatz:folgendenausgebenCASEanfpunktloeschen:was:=erstersatzneuCASEplotten:bildschirminhaltplottenCASEabschluss:CASEerstersatzneu:putparameter(l.koord);erstenneuausgeben;was:=folgendersatzENDSELECT.coroutineinitialisieren:l.t:=0.0;l.z:=neuerzustand(dimension+codimension);l.xmin:=xmin;l.xmax:=xmax;l.ymin:=ymin;l.ymax:=ymax;richtepicturesein;bestimmevariablenanzahl(l.p,l.anz,muster,dummy);ordnepenszu;legefensterfest(seite,l.vpk(1),l.vpk(2),l.vpk(3),l.vpk(4),fenster).kreuzerzeugenundmalen:nildiagramm(seite,fenster);beginplot;viewport(l.vpk(1),l.vpk(2),l.vpk(3),l.vpk(4));bestimmeextrema(zeitdiagrammkennzeichen,kurve,l.p,l.anz,l.xmin,l.xmax,l.ymin,l.ymax);window(seite,fenster,l.xmin,l.xmax,l.ymin,l.ymax);window(l.xmin,l.xmax,l.ymin,l.ymax);setzeundschreibekoordinatenkreuz;beschrifte(zeitdiagrammkennzeichen,seite,fenster,l.p,l.anz,l.xmin,l.xmax,l.ymin,l.ymax);endplot.erstenausgeben:erstenneuausgeben;viewport(l.vpk(1),l.vpk(2),l.vpk(3),l.vpk(4));window(l.xmin,l.xmax,l.ymin,l.ymax);getparameter(l.koord).folgendenausgeben:beginplot;putparameter(l.koord);FORz1FROM1UPTOl.anzREPverbindepunkteimzeitdiagramm;PER;endplot;l.t:=zeit;l.z:=zustand.bildschirminhaltplotten:REAL VARstopzeit:=zeit;nildiagrammmitkreuz(seite,fenster);FORz1FROM1UPTOl.anzREPlesekomplettekurvePER;schreibepictures;l.t:=zeit;l.z:=zustand;.erstenneuausgeben:l.t:=zeit;l.z:=zustand.lesekomplettekurve:leseersten(kurve,zeit,zustand);REPleseabschnittmitpunktenausserhalbdessichtbarenbereiches;leseabschnittmitpunkteninnerhalbdessichtbarenbereiches;PER.leseabschnittmitpunktenausserhalbdessichtbarenbereiches:REP IF NOT(zeit<stopzeit)THEN LEAVElesekomplettekurveELIFimausgabefenster(zustand,l.p(z1),l.ymin,l.ymax)THEN LEAVEleseabschnittmitpunktenausserhalbdessichtbarenbereichesFI;lesenaechsten(kurve,zeit,zustand);PER.leseabschnittmitpunkteninnerhalbdessichtbarenbereiches:move(l.graph(z1),zeit,zustandSUBl.p(z1));REPlesenaechsten(kurve,zeit,zustand);IF NOT(zeit<=stopzeit)THEN LEAVElesekomplettekurveELIF NOTimausgabefenster(zustand,l.p(z1),l.ymin,l.ymax)THEN LEAVEleseabschnittmitpunkteninnerhalbdessichtbarenbereichesFI;draw(l.graph(z1),zeit,zustandSUBl.p(z1));IF NOT(zeit<stopzeit)THEN LEAVElesekomplettekurveFI PER.setzeundschreibekoordinatenkreuz:putkreuz(seite,fenster,kreuzerzeugenundzeichnen(l.xmin,l.xmax,l.ymin,l.ymax,zeitdiagrammkennzeichen)).richtepicturesein:FORz1FROM1UPTOmaxanzvarproloesungREPl.graph(z1):=nilpicturePER.ordnepenszu:INT VARstiftenr:=1;FORz1FROM1UPTOl.anzREPordnepenzuPER.ordnepenzu:pen(l.graph(z1),stiftenr);IFstiftenr=penanzahlTHENstiftenr:=1ELSEstiftenrINCR1FI.verbindepunkteimzeitdiagramm:BOOL VARaltimbereich:=imausgabefenster(l.z,l.p(z1),l.ymin,l.ymax),neuimbereich:=imausgabefenster(zustand,l.p(z1),l.ymin,l.ymax);IFneuimbereichCANDaltimbereichTHENmalenbzwloeschennormalFI.malenbzwloeschennormal:IFzeit<l.tTHENpen(loeschstift,loeschstift,standarddicke,durchgezogen);move(zeit,zustandSUBl.p(z1));draw(l.t,l.zSUBl.p(z1))ELSEpen(loeschstift,standardstift,standarddicke,pen(l.graph(z1)));move(l.t,l.zSUBl.p(z1));draw(zeit,zustandSUBl.p(z1))FI.schreibepictures:FORz1FROM1UPTOl.anzREPputpicture(seite,fenster,l.graph(z1))PER.END PROCcoroutinezeit;PROCcoroutinephase(OUTPUT VARseite,INT CONSTfenster,KURVE VARkurve,REAL VARzeit,ZUSTAND VARmuster,ZUSTAND VARzustand,DATASPACE VARds1,INT VARwas,REAL VARxmin,xmax,ymin,ymax,BOOL VARautomatik):LETanzahlloesung=2;BOUND STRUCT(REALt,ZUSTANDz,ROWmaxanzvarproloesungINTp,ROW4REALvpk,ROW5ROW5REALkoord,PICTUREgraph,BOOLaufbildschirm,REALxmin,xmax,ymin,ymax,BOOLanfpunkt)VARl:=ds1;INT VARdummy:=0;REAL VARxwert,ywert;BOOL VARvergleich;vergleich:=was<>(wasMOD10);was:=wasMOD10;SELECTwasOF
+ CASEinitialisieren:coroutineinitialisieren;was:=erstersatzCASEkreuzerzeugen:kreuzerzeugenundmalen;was:=erstersatzCASEerstersatz:erstenausgeben;was:=folgendersatzCASEfolgendersatz:folgendenausgebenCASEanfpunktloeschen:anfangspunktloeschen;was:=erstersatzneuCASEplotten:bildschirminhaltplotten;was:=folgendersatzCASEabschluss:CASEerstersatzneu:putparameter(l.koord);erstenneuausgeben;was:=folgendersatzENDSELECT.coroutineinitialisieren:l.t:=0.0;l.z:=neuerzustand(dimension+codimension);l.aufbildschirm:=TRUE;l.anfpunkt:=FALSE;l.xmin:=xmin;l.xmax:=xmax;l.ymin:=ymin;l.ymax:=ymax;richtepictureein;ordnepenzu;bestimmevariablenanzahl(l.p,dummy,muster,automatik);IFautomatikTHENvertauscheevtlvariablen(muster,l.xmin,l.xmax,l.ymin,l.ymax);bestimmevariablenanzahl(l.p,dummy,muster,automatik);FI;legefensterfest(seite,l.vpk(1),l.vpk(2),l.vpk(3),l.vpk(4),fenster).kreuzerzeugenundmalen:nildiagramm(seite,fenster);beginplot;viewport(l.vpk(1),l.vpk(2),l.vpk(3),l.vpk(4));bestimmeextrema(phasendiagrammkennzeichen,kurve,l.p,anzahlloesung,l.xmin,l.xmax,l.ymin,l.ymax);IFautomatikTHENvertauscheevtlvariablen(muster,l.xmin,l.xmax,l.ymin,l.ymax);bestimmevariablenanzahl(l.p,dummy,muster,automatik);FI;window(seite,fenster,l.xmin,l.xmax,l.ymin,l.ymax);window(l.xmin,l.xmax,l.ymin,l.ymax);setzeundschreibekoordinatenkreuz;beschrifte(phasendiagrammkennzeichen,seite,fenster,l.p,0,l.xmin,l.xmax,l.ymin,l.ymax);endplot.erstenausgeben:viewport(l.vpk(1),l.vpk(2),l.vpk(3),l.vpk(4));window(l.xmin,l.xmax,l.ymin,l.ymax);getparameter(l.koord);erstenneuausgeben.folgendenausgeben:putparameter(l.koord);beginplot;pen(loeschstift,standardstift,standarddicke,durchgezogen);verbindepunkteimphasendiagramm;endplot;l.t:=zeit;l.z:=zustand.anfangspunktloeschen:IFl.anfpunktTHENxwert:=zustandSUBl.p(1);ywert:=zustandSUBl.p(2);beginplot;pen(loeschstift,loeschstift,standarddicke,durchgezogen);move(xwert,ywert);zeichnefadenkreuz;endplot;l.anfpunkt:=FALSE FI.bildschirminhaltplotten:REAL VARstopzeit:=zeit;l.aufbildschirm:=FALSE;leseersten(kurve,zeit,zustand);trageanfangspunktein;lesekomplettekurve;schreibepicture;l.t:=zeit;l.z:=zustand;l.aufbildschirm:=TRUE.erstenneuausgeben:beginplot;pen(loeschstift,standardstift,standarddicke,durchgezogen);trageanfangspunktein;l.t:=zeit;l.z:=zustand;endplot.richtepictureein:l.graph:=nilpicture.ordnepenzu:IFvergleichTHENpen(l.graph,gepunktet)ELSEpen(l.graph,durchgezogen)FI.setzeundschreibekoordinatenkreuz:putkreuz(seite,fenster,kreuzerzeugenundzeichnen(l.xmin,l.xmax,l.ymin,l.ymax,phasendiagrammkennzeichen)).trageanfangspunktein:IF(imausgabefenster(zustand,l.p(1),l.xmin,l.xmax)ANDimausgabefenster(zustand,l.p(2),l.ymin,l.ymax))THENxwert:=zustandSUBl.p(1);ywert:=zustandSUBl.p(2);IFl.aufbildschirmTHENmove(xwert,ywert);zeichnefadenkreuz;l.anfpunkt:=TRUE ELSEmove(l.graph,xwert,ywert);zeichnefadenkreuzimpicFI;FI.zeichnefadenkreuz:drawcmr(0.2,0.0);move(xwert,ywert);drawcmr(-0.2,0.0);move(xwert,ywert);drawcmr(0.0,0.2);move(xwert,ywert);drawcmr(0.0,-0.2);move(xwert,ywert).zeichnefadenkreuzimpic:drawcmr(l.graph,0.2,0.0);move(l.graph,xwert,ywert);drawcmr(l.graph,-0.2,0.0);move(l.graph,xwert,ywert);drawcmr(l.graph,0.0,0.2);move(l.graph,xwert,ywert);drawcmr(l.graph,0.0,-0.2);move(l.graph,xwert,ywert).lesekomplettekurve:REPleseabschnittmitpunktenausserhalbdessichtbarenbereiches;leseabschnittmitpunkteninnerhalbdessichtbarenbereiches;PER.leseabschnittmitpunktenausserhalbdessichtbarenbereiches:REP IF NOT(zeit<stopzeit)THEN LEAVElesekomplettekurveELIFimausgabefenster(zustand,l.p(1),l.xmin,l.xmax)ANDimausgabefenster(zustand,l.p(2),l.ymin,l.ymax)THEN LEAVEleseabschnittmitpunktenausserhalbdessichtbarenbereichesFI;lesenaechsten(kurve,zeit,zustand);PER.leseabschnittmitpunkteninnerhalbdessichtbarenbereiches:move(l.graph,zustandSUBl.p(1),zustandSUBl.p(2));REPlesenaechsten(kurve,zeit,zustand);IF NOT(zeit<=stopzeit)THEN LEAVElesekomplettekurveELIF NOT(imausgabefenster(zustand,l.p(1),l.xmin,l.xmax)ANDimausgabefenster(zustand,l.p(2),l.ymin,l.ymax))THEN LEAVE
+leseabschnittmitpunkteninnerhalbdessichtbarenbereichesFI;draw(l.graph,zustandSUBl.p(1),zustandSUBl.p(2));IF(zeit=letztezeit(kurve))THENcircle(l.graph,0.3,0.0,360.0,0)FI;IF NOT(zeit<stopzeit)THEN LEAVElesekomplettekurveFI PER.verbindepunkteimphasendiagramm:BOOL VARaltimbereich:=imausgabefenster(l.z,l.p(1),l.xmin,l.xmax)CANDimausgabefenster(l.z,l.p(2),l.ymin,l.ymax),neuimbereich:=imausgabefenster(zustand,l.p(1),l.xmin,l.xmax)CANDimausgabefenster(zustand,l.p(2),l.ymin,l.ymax);IFneuimbereichCANDaltimbereichTHENmalenbzwloeschenFI.malenbzwloeschen:IFzeit<l.tTHENpen(loeschstift,loeschstift,standarddicke,durchgezogen);IF(l.t=letztezeit(kurve))THENmove(l.zSUBl.p(1),l.zSUBl.p(2));circle(0.3,0.0,360.0,0);FI;move(zustandSUBl.p(1),zustandSUBl.p(2));draw(l.zSUBl.p(1),l.zSUBl.p(2));ELSEpen(loeschstift,standardstift,standarddicke,pen(l.graph));move(l.zSUBl.p(1),l.zSUBl.p(2));draw(zustandSUBl.p(1),zustandSUBl.p(2));IF(zeit=letztezeit(kurve))THENcircle(0.3,0.0,360.0,0);FI;FI;.schreibepicture:putpicture(seite,fenster,l.graph).END PROCcoroutinephase;PROCvertauscheevtlvariablen(ZUSTAND VARmaske,REAL VARxmin,xmax,ymin,ymax):INT VARi;REAL VARpuffer;IFvertauschennotwendigTHENsucheindexinmaskemit1;setze2fuerdiesenindex;vertauschexundyFI.vertauschennotwendig:(xmax-xmin)<(ymax-ymin).sucheindexinmaskemit1:i:=1;WHILE(maskeSUBi)<>1.0CANDi<=dimension+codimensionREPiINCR1PER.setze2fuerdiesenindex:IFi<=dimension+codimensionTHENreplace(maske,i,2.0)FI.vertauschexundy:puffer:=ymin;ymin:=xmin;xmin:=puffer;puffer:=ymax;ymax:=xmax;xmax:=puffer;.END PROCvertauscheevtlvariablen;PROCkreuzzeitvergleich(OUTPUT VARseite,KURVE VARk1,k2,ZUSTAND VARmaske,INT CONSTfenster1,fenster2,ROWmaxanzvarproloesungINT VARpos,REAL VARxmin,xmax,x1min,x1max,ymin,ymax,BOOL VARdummy):ROW4REAL VARvpk1,vpk2;REAL VARy1min,y1max;PICTURE VARkreuz;INT VARanzahl;bestimmevariablenanzahl(pos,anzahl,maske,dummy);bestimmeextrema(zeitdiagrammkennzeichen,k1,pos,anzahl,xmin,xmax,ymin,ymax);bestimmeextrema(zeitdiagrammkennzeichen,k2,pos,anzahl,x1min,x1max,y1min,y1max);bestimmegemeinsamenwertebereich;beginplot;zeichneersteskreuzimzeitvergleich;zeichnezweiteskreuzimzeitvergleich;endplot.bestimmegemeinsamenwertebereich:IFy1min<yminTHENymin:=y1minFI;IFy1max>ymaxTHENymax:=y1maxFI.zeichneersteskreuzimzeitvergleich:nildiagramm(seite,fenster1);legefensterfest(seite,vpk1(1),vpk1(2),vpk1(3),vpk1(4),fenster1);viewport(vpk1(1),vpk1(2),vpk1(3),vpk1(4));window(seite,fenster1,xmin,xmax,ymin,ymax);window(xmin,xmax,ymin,ymax);kreuz:=nilpicture;kreuz:=kreuzerzeugenundzeichnen(xmin,xmax,ymin,ymax,zeitdiagrammkennzeichen);putkreuz(seite,fenster1,kreuz);beschrifte(zeitdiagrammkennzeichen,seite,fenster1,pos,anzahl,xmin,xmax,ymin,ymax).zeichnezweiteskreuzimzeitvergleich:nildiagramm(seite,fenster2);legefensterfest(seite,vpk2(1),vpk2(2),vpk2(3),vpk2(4),fenster2);viewport(vpk2(1),vpk2(2),vpk2(3),vpk2(4));window(seite,fenster2,x1min,x1max,ymin,ymax);window(x1min,x1max,ymin,ymax);kreuz:=nilpicture;kreuz:=kreuzerzeugenundzeichnen(x1min,x1max,ymin,ymax,zeitdiagrammkennzeichen);putkreuz(seite,fenster2,kreuz);beschrifte(zeitdiagrammkennzeichen,seite,fenster2,pos,anzahl,x1min,x1max,ymin,ymax).END PROCkreuzzeitvergleich;PROCkreuzphasevergleich(OUTPUT VARseite,KURVE VARk1,k2,ZUSTAND VARmaske,INT CONSTfenster1,fenster2,ROWmaxanzvarproloesungINT VARpos,REAL VARxmin,xmax,x1min,x1max,ymin,ymax,BOOL VARautomatik):ROW4REAL VARvpk;REAL VARy1min,y1max;PICTURE VARkreuz;INT VARanzahl;bestimmevariablenanzahl(pos,anzahl,maske,automatik);bestimmeextrema(phasendiagrammkennzeichen,k1,pos,anzahl,xmin,xmax,ymin,ymax);bestimmeextrema(phasendiagrammkennzeichen,k2,pos,anzahl,x1min,x1max,y1min,y1max);bestimmegemeinsamebereiche;IFautomatikTHENvertauscheevtlvariablen(maske,xmin,xmax,ymin,ymax)FI;x1min:=xmin;x1max:=xmax;beginplot;schreibeundbeschriftekreuz;endplot.bestimmegemeinsamebereiche:IFx1min<xminTHENxmin:=x1minFI;IFx1max>xmaxTHENxmax:=x1maxFI;IFy1min<yminTHENymin:=y1minFI;IFy1max>ymaxTHENymax:=y1maxFI.schreibelegende:REAL VARa,b,abstand;TEXT VARname;INT
+ VARlaenge;PICTURE VARlegende:=nilpicture,linie1:=nilpicture,linie2:=nilpicture;a:=real(laengebeibeschriftung)*standardbreite;b:=2.0*standardhoehe+0.2;abstand:=9.0*standardbreite;move(legende,xmin,ymin);movecmr(legende,-1.0*a,-1.0*b);draw(legende,meldungstext(legendentext),0.0,standardhoehe,standardbreite);movecmr(legende,abstand,0.0);name:=meldungstext(erstekurve);laenge:=length(name);draw(legende,name,0.0,standardhoehe,standardbreite);movecmr(legende,(real(laenge)+0.5)*standardbreite,0.0);pen(linie1,durchgezogen);move(linie1,xmin,ymin);movecmr(linie1,(-1.0)*a+abstand,((-1.0)*b-0.1));drawcmr(linie1,real(laenge)*standardbreite,0.0);abstand:=abstand+(real(laenge)+0.5)*standardbreite;pen(loeschstift,standardstift,standarddicke,pen(linie1));plot(linie1);name:=meldungstext(zweitekurve);laenge:=length(name);draw(legende,name,0.0,standardhoehe,standardbreite);pen(linie2,gepunktet);move(linie2,xmin,ymin);movecmr(linie2,(-1.0)*a+abstand,((-1.0)*b-0.1));drawcmr(linie2,real(laenge)*standardbreite,0.0);pen(loeschstift,standardstift,standarddicke,pen(linie2));plot(linie2);pen(legende,durchgezogen);pen(loeschstift,standardstift,standarddicke,pen(legende));plot(legende);putkreuz(seite,fenster1,legende);putkreuz(seite,fenster1,linie1);putkreuz(seite,fenster1,linie2).schreibeundbeschriftekreuz:nildiagramm(seite,fenster1);legefensterfest(seite,vpk(1),vpk(2),vpk(3),vpk(4),fenster1);viewport(vpk(1),vpk(2),vpk(3),vpk(4));window(seite,fenster1,xmin,xmax,ymin,ymax);window(xmin,xmax,ymin,ymax);kreuz:=nilpicture;kreuz:=kreuzerzeugenundzeichnen(xmin,xmax,ymin,ymax,phasendiagrammkennzeichen);putkreuz(seite,fenster1,kreuz);beschrifte(phasendiagrammkennzeichen,seite,fenster1,pos,anzahl,xmin,xmax,ymin,ymax);schreibelegende.END PROCkreuzphasevergleich;PROCkreuzhistovergleich(OUTPUT VARseite,KURVE VARk1,k2,ZUSTAND VARmaske,INT CONSTfenster1,fenster2,ROWmaxanzvarproloesungINT VARpos,REAL VARxmin,xmax,x1min,x1max,ymin,ymax,BOOL VARdummy):ROW4REAL VARvpk1,vpk2;REAL VARy1min,y1max,hmin,hzwi,hmax;PICTURE VARkreuz;INT VARanzahl;bestimmevariablenanzahl(pos,anzahl,maske,dummy);bestimmeextrema(histogrammkennzeichen,k1,pos,anzahl,xmin,xmax,ymin,ymax);bestimmeextrema(histogrammkennzeichen,k2,pos,anzahl,x1min,x1max,y1min,y1max);bestimmegemeinsamenwertebereich;beginplot;zeichneersteskreuzimhistogrammvergleich;zeichnezweiteskreuzimhistogrammvergleich;endplot.bestimmegemeinsamenwertebereich:IFy1min<yminTHENymin:=y1minFI;IFy1max>ymaxTHENymax:=y1maxFI.zeichneersteskreuzimhistogrammvergleich:nildiagramm(seite,fenster1);legefensterfest(seite,vpk1(1),vpk1(2),vpk1(3),vpk1(4),fenster1);viewport(vpk1(1),vpk1(2),vpk1(3),vpk1(4));hmin:=hminhisto;hzwi:=hzwihisto;hmax:=hmaxhisto;window(seite,fenster1,ymin,ymax,hmin,hmax);window(ymin,ymax,hmin,hmax);kreuz:=nilpicture;kreuz:=kreuzerzeugenundzeichnen(xmin,xmax,ymin,ymax,histogrammkennzeichen);putkreuz(seite,fenster1,kreuz);beschrifte(histogrammkennzeichen,seite,fenster1,pos,anzahl,ymin,ymax,hmin,hzwi).zeichnezweiteskreuzimhistogrammvergleich:nildiagramm(seite,fenster2);legefensterfest(seite,vpk2(1),vpk2(2),vpk2(3),vpk2(4),fenster2);viewport(vpk2(1),vpk2(2),vpk2(3),vpk2(4));window(seite,fenster2,ymin,ymax,hmin,hmax);window(ymin,ymax,hmin,hmax);kreuz:=nilpicture;kreuz:=kreuzerzeugenundzeichnen(x1min,x1max,ymin,ymax,histogrammkennzeichen);putkreuz(seite,fenster2,kreuz);beschrifte(histogrammkennzeichen,seite,fenster2,pos,anzahl,ymin,ymax,hmin,hzwi).END PROCkreuzhistovergleich;PROCbestimmevariablenanzahl(ROWmaxanzvarproloesungINT VARpos,INT VARanzahl,ZUSTAND CONSTmuster,BOOL VARautomatik):INT VARz1,z2;FORz1FROM1UPTOmaxanzvarproloesungREPpos(z1):=0PER;z2:=0;automatik:=TRUE;FORz1FROM1UPTOdimension+codimensionREP IF(musterSUBz1)<>0.0THENz2INCR1;IF(musterSUBz1)=1.0THENpos(z2):=z1ELSEpos(2):=z1;z2:=0;automatik:=FALSE FI;FI;PER;anzahl:=z2.END PROCbestimmevariablenanzahl;PROCbestimmeextrema(TEXT CONSTwas,KURVE VARkurve,ROWmaxanzvarproloesungINT CONSTpos,INT CONSTanzahl,REAL VARxmin,xmax,ymin,ymax):INT VARi;ZUSTAND VARzustand:=neuerzustand(dimension
++codimension);IFwas=phasendiagrammkennzeichenTHENeinfacherandwertebestimmenELSErandwerteausmehrerenloesungenbestimmenFI;IFxmin>xmaxTHEN REAL VARhelpx:=xmin;xmin:=xmax;xmax:=helpx;ELIFxmax=xminTHENxmax:=xmin+epsilon;xmin:=xmin-epsilon;FI;IFymin>ymaxTHEN REAL VARhelp:=ymin;ymin:=ymax;ymax:=help;ELIFymax=yminTHENymax:=ymin+epsilon;ymin:=ymin-epsilon;FI.einfacherandwertebestimmen:ymin:=max(minimalwerte(kurve)SUBpos(2),randuntenSUBpos(2));ymax:=min(maximalwerte(kurve)SUBpos(2),randobenSUBpos(2));xmin:=max(minimalwerte(kurve)SUBpos(1),randuntenSUBpos(1));xmax:=min(maximalwerte(kurve)SUBpos(1),randobenSUBpos(1));ymin:=ymin-achsenabstand*(ymax-ymin);xmin:=xmin-achsenabstand*(xmax-xmin).randwerteausmehrerenloesungenbestimmen:ymin:=max(minimalwerte(kurve)SUBpos(1),randuntenSUBpos(1));ymax:=min(maximalwerte(kurve)SUBpos(1),randobenSUBpos(1));FORiFROM2UPTOanzahlREP IFmax(minimalwerte(kurve)SUBpos(i),randuntenSUBpos(i))<yminTHENymin:=max(minimalwerte(kurve)SUBpos(i),randuntenSUBpos(i));FI;IFmin(maximalwerte(kurve)SUBpos(i),randobenSUBpos(i))>ymaxTHENymax:=min(maximalwerte(kurve)SUBpos(i),randobenSUBpos(i));FI;PER;IFwas=zeitdiagrammkennzeichenTHENymin:=ymin-achsenabstand*(ymax-ymin)FI;xmax:=letztezeit(kurve);leseersten(kurve,xmin,zustand).END PROCbestimmeextrema;PICTURE PROCkreuzerzeugenundzeichnen(REAL CONSTxmin,xmax,ymin,ymax,TEXT CONSTzeichen):PICTURE VARtransfer;BOUND PICTURE VARkreuz;REAL VARhoehe,stelle;ROW3REAL VARschoenezahl;INT VARpos;BOOL VARzeitachsehisto;IFexists("KREUZ")THENforget("KREUZ",quiet)FI;kreuz:=new("KREUZ");kreuz:=nilpicture;ordnestiftzu;IFzeichen=histogrammkennzeichenTHENzeichnetachse;zeichnenachse;IFmitskalierungTHENtskalierung;nskalierungFI;ELSEzeichnexachse;zeichneyachse;IFmitskalierungTHENxskalierung;yskalierungFI;FI;lieferekreuz.ordnestiftzu:pen(loeschstift,standardstift,standarddicke,durchgezogen);pen(kreuz,durchgezogen).zeichnetachse:move(ymin,hminhisto);draw(ymax,hminhisto);move(kreuz,ymin,hminhisto);draw(kreuz,ymax,hminhisto);zeichnetspitze.zeichnetspitze:move(ymax,hminhisto);drawcmr(-0.2,0.2);move(ymax,hminhisto);drawcmr(-0.2,-0.2);move(kreuz,ymax,hminhisto);drawcmr(kreuz,-0.2,0.2);move(kreuz,ymax,hminhisto);drawcmr(kreuz,-0.2,-0.2).zeichnenachse:move(ymin,hzwihisto);draw(ymax,hzwihisto);move(kreuz,ymin,hzwihisto);draw(kreuz,ymax,hzwihisto);zeichnenspitze.zeichnenspitze:drawcmr(-0.2,0.2);move(ymax,hzwihisto);drawcmr(-0.2,-0.2);drawcmr(kreuz,-0.2,0.2);move(kreuz,ymax,hzwihisto);drawcmr(kreuz,-0.2,-0.2).tskalierung:stelle:=xmin;zahlen(xmin,0.9*(xmax-xmin)+xmin,schoenezahl);zeitachsehisto:=TRUE;hoehe:=hminhisto;histoskalierung.nskalierung:stelle:=ymin;zahlen(ymin,0.9*(ymax-ymin)+ymin,schoenezahl);zeitachsehisto:=FALSE;hoehe:=hzwihisto;histoskalierung.histoskalierung:stelle:=schoenezahl(1);move(abbildungstelle,hoehe);movecmr(0.0,0.2);drawcmr(0.0,-0.3);move(kreuz,abbildungstelle,hoehe);movecmr(kreuz,0.0,0.2);drawcmr(kreuz,0.0,-0.3);beschrifte;FORposFROM2UPTO3REPstelle:=schoenezahl(pos);zeichnehistostrich;zeichnegegenstrich;beschriftePER.zeichnehistostrich:move(abbildungstelle,hoehe);drawcmr(0.0,0.1);move(kreuz,abbildungstelle,hoehe);drawcmr(kreuz,0.0,0.1).zeichnexachse:move(xmin,ymin);draw(xmax,ymin);move(kreuz,xmin,ymin);draw(kreuz,xmax,ymin);zeichnexspitze.zeichnexspitze:drawcmr(-0.2,0.2);move(xmax,ymin);drawcmr(-0.2,-0.2);drawcmr(kreuz,-0.2,0.2);move(kreuz,xmax,ymin);drawcmr(kreuz,-0.2,-0.2).zeichneyachse:move(xmin,ymin);draw(xmin,ymax);move(kreuz,xmin,ymin);draw(kreuz,xmin,ymax);zeichneyspitze.zeichneyspitze:drawcmr(0.0,standardhoehe);drawcmr(0.2,-0.2);move(xmin,ymax);movecmr(0.0,standardhoehe);drawcmr(-0.2,-0.2);drawcmr(kreuz,0.0,standardhoehe);drawcmr(kreuz,0.2,-0.2);move(kreuz,xmin,ymax);movecmr(kreuz,0.0,standardhoehe);drawcmr(kreuz,-0.2,-0.2).xskalierung:stelle:=xmin;zahlen(xmin,0.9*(xmax-xmin)+xmin,schoenezahl);IFzeichen=zeitdiagrammkennzeichenTHENstelle:=schoenezahl(1);beschrifteersten;FI;stelle:=schoenezahl(1);IFzeichen=phasendiagrammkennzeichenTHENmove(stelle,ymin);movecmr(0.0,0.2);drawcmr(0.0,-0.3)
+;move(kreuz,stelle,ymin);movecmr(kreuz,0.0,0.2);drawcmr(kreuz,0.0,-0.3);beschrifte;FI;FORposFROM2UPTO3REPstelle:=schoenezahl(pos);zeichnexstrich;zeichnegegenstrich;beschriftePER.zeichnexstrich:move(stelle,ymin);drawcmr(0.0,0.1);move(kreuz,stelle,ymin);drawcmr(kreuz,0.0,0.1).zeichnegegenstrich:drawcmr(0.0,0.1);drawcmr(0.0,-0.3);drawcmr(kreuz,0.0,0.1);drawcmr(kreuz,0.0,-0.3).beschrifteersten:move(stelle,ymin);movecmr(0.0,-1.0*standardhoehe-abstand);draw(compress(wandle(stelle,laengebeibeschriftung,nachkommastellen)),0.0,standardhoehe,standardbreite);move(kreuz,stelle,ymin);movecmr(kreuz,0.0,-1.0*standardhoehe-abstand);draw(kreuz,compress(wandle(stelle,laengebeibeschriftung,nachkommastellen)),0.0,standardhoehe,standardbreite).beschrifte:IFzeichen=histogrammkennzeichenTHENmove(abbildungstelle,hoehe)ELSEmove(stelle,ymin)FI;movecmr(((-1.0)*real(vorkomma))*standardbreite,-1.0*standardhoehe-abstand);draw(wandle(stelle,laengebeibeschriftung,nachkommastellen),0.0,standardhoehe,standardbreite);IFzeichen=histogrammkennzeichenTHENmove(kreuz,abbildungstelle,hoehe)ELSEmove(kreuz,stelle,ymin)FI;movecmr(kreuz,((-1.0)*real(vorkomma))*standardbreite,-1.0*standardhoehe-abstand);draw(kreuz,wandle(stelle,laengebeibeschriftung,nachkommastellen),0.0,standardhoehe,standardbreite).yskalierung:zahlen(ymin,0.9*(ymax-ymin)+ymin,schoenezahl);FORposFROM1UPTO3REPstelle:=schoenezahl(pos);zeichneystrich;zeichneygegenstrich;beschrifteyPER.zeichneystrich:move(xmin,stelle);drawcmr(0.1,0.0);move(kreuz,xmin,stelle);drawcmr(kreuz,0.1,0.0).zeichneygegenstrich:drawcmr(0.1,0.0);drawcmr(kreuz,0.1,0.0).beschriftey:move(xmin,stelle);movecmr((-1.0)*(real(laengebeibeschriftung)+0.5)*standardbreite,-0.5*standardhoehe);draw(wandle(stelle,laengebeibeschriftung,nachkommastellen),0.0,standardhoehe,standardbreite);move(kreuz,xmin,stelle);movecmr(kreuz,(-1.0)*(real(laengebeibeschriftung)+0.5)*standardbreite,-0.5*standardhoehe);draw(kreuz,wandle(stelle,laengebeibeschriftung,nachkommastellen),0.0,standardhoehe,standardbreite).lieferekreuz:transfer:=kreuz;forget("KREUZ",quiet);transfer.abbildungstelle:IFzeitachsehistoTHENabbildungtbeihistogramm(xmin,xmax,ymin,ymax,stelle)ELSEstelleFI.END PROCkreuzerzeugenundzeichnen;PROCbeschrifte(TEXT CONSTwas,OUTPUT VARseite,INT CONSTfenster,ROWmaxanzvarproloesungINT CONSTpos,INT CONSTanzahl,REAL VARxmin,xmax,ymin,ymax):LETbeschriftungzeitxachse="t";INT VARz1;PICTURE VARbeschriftung:=nilpicture;TEXT VARname,varoberbegriff;IFanzahl=1THEN IFpos(1)<=dimensionTHENvaroberbegriff:=variablenkurzform(pos(1));ELSEvaroberbegriff:=covariablenkurzform(pos(1)-dimension);FI;ELIFlength(compress(variablenoberbegriffkurzform))=0THENvaroberbegriff:=compress(auskunftstext(auskoberbegriff))ELSEvaroberbegriff:=variablenoberbegriffkurzform;FI;IFwas=phasendiagrammkennzeichenTHENbeschriftephaseELIFwas=histogrammkennzeichenTHENbeschriftehistoELSEbeschriftezeitFI.beschriftephase:IFpos(1)<=dimensionTHENname:=variablenkurzform(pos(1));ELSEname:=covariablenkurzform(pos(1)-dimension);FI;move(beschriftung,xmax,ymin);movecmr(beschriftung,real((-1)*laengevarkurzform)*standardbreite,-2.0*standardhoehe-0.2);draw(beschriftung,name,0.0,standardhoehe,standardbreite);IFpos(2)<=dimensionTHENname:=variablenkurzform(pos(2));ELSEname:=covariablenkurzform(pos(2)-dimension);FI;move(beschriftung,xmin,ymax);movecmr(beschriftung,real((-1)*laengevarkurzform)*standardbreite-0.1,0.0);draw(beschriftung,name,0.0,standardhoehe,standardbreite);pen(beschriftung,durchgezogen);pen(loeschstift,standardstift,standarddicke,pen(beschriftung));plot(beschriftung);putkreuz(seite,fenster,beschriftung).beschriftehisto:pen(beschriftung,durchgezogen);pen(loeschstift,standardstift,standarddicke,pen(beschriftung));move(xmin,ymin);movecmr(-(real(length(beschriftungzeitxachse))+1.0)*standardbreite,-0.2);draw(beschriftungzeitxachse,0.0,standardhoehe,standardbreite);move(xmin,ymax);movecmr(-(real(length(varoberbegriff))+1.0)*standardbreite,-0.2);draw(varoberbegriff,0.0,standardhoehe,standardbreite);move(beschriftung,xmin,
+ymin);movecmr(beschriftung,-(real(length(beschriftungzeitxachse))+1.0)*standardbreite,-0.2);draw(beschriftung,beschriftungzeitxachse,0.0,standardhoehe,standardbreite);move(beschriftung,xmin,ymax);movecmr(beschriftung,-(real(length(varoberbegriff))+1.0)*standardbreite,-0.2);draw(beschriftung,varoberbegriff,0.0,standardhoehe,standardbreite);FORz1FROM1UPTOanzahlREP IFpos(z1)<=dimensionTHENname:=variablenkurzform(pos(z1));ELSEname:=covariablenkurzform(pos(z1)-dimension);FI;move(xmin,ymax);mover(0.0,2.1*real(z1));movecmr(-(real(length(name))+1.0)*standardbreite,-0.2);draw(name,0.0,standardhoehe,standardbreite);move(beschriftung,xmin,ymax);mover(beschriftung,0.0,2.1*real(z1));movecmr(beschriftung,-(real(length(name))+1.0)*standardbreite,-0.2);draw(beschriftung,name,0.0,standardhoehe,standardbreite)PER;putkreuz(seite,fenster,beschriftung).beschriftezeit:REAL VARa,b,abstand;INT VARi,wortlaenge;ROWmaxanzvarproloesungPICTURE VARlinie;FORiFROM1UPTOmaxanzvarproloesungREPlinie(i):=nilpicturePER;INT VARstiftenr:=1;FORiFROM1UPTOanzahlREPpen(linie(i),stiftenr);IFstiftenr=penanzahlTHENstiftenr:=1ELSEstiftenrINCR1FI;PER;a:=real(laengebeibeschriftung)*standardbreite;b:=2.0*standardhoehe+0.2;abstand:=9.0*standardbreite;move(beschriftung,xmin,ymin);movecmr(beschriftung,-1.0*a,-1.0*b);draw(beschriftung,meldungstext(legendentext),0.0,standardhoehe,standardbreite);movecmr(beschriftung,abstand,0.0);FORiFROM1UPTOanzahlREPschreibenamen;unterstreichePER;beschrifteachsen;pen(beschriftung,durchgezogen);pen(loeschstift,standardstift,standarddicke,pen(beschriftung));plot(beschriftung);putkreuz(seite,fenster,beschriftung).schreibenamen:IFpos(i)<=dimensionTHENname:=variablenkurzform(pos(i));ELSEname:=covariablenkurzform(pos(i)-dimension);FI;wortlaenge:=length(name);draw(beschriftung,name,0.0,standardhoehe,standardbreite);movecmr(beschriftung,(real(wortlaenge)+0.5)*standardbreite,0.0).unterstreiche:stiftenr:=pen(linie(i));pen(linie(i),stiftenr);move(linie(i),xmin,ymin);movecmr(linie(i),(-1.0)*a+abstand,((-1.0)*b-0.1));drawcmr(linie(i),real(wortlaenge)*standardbreite,0.0);abstand:=abstand+(real(wortlaenge)+0.5)*standardbreite;pen(loeschstift,standardstift,standarddicke,pen(linie(i)));plot(linie(i));putkreuz(seite,fenster,linie(i)).beschrifteachsen:move(beschriftung,xmin,ymax);movecmr(beschriftung,(-1.0)*real(min(laengevarkurzform,length(varoberbegriff)))*standardbreite-0.1,0.0);draw(beschriftung,varoberbegriff,0.0,standardhoehe,standardbreite);name:=beschriftungzeitxachse;move(beschriftung,xmax,ymin);movecmr(beschriftung,-1.0*standardbreite,0.2);draw(beschriftung,name,0.0,standardhoehe,standardbreite).END PROCbeschrifte;REAL PROCabbildungtbeihistogramm(REAL CONSTtmin,tmax,nmin,nmax,takt):IFtmax=tminTHENnminELSEnmin+((takt-tmin)*(nmax-nmin)/(tmax-tmin))FI.END PROCabbildungtbeihistogramm;REAL PROCberechnetestbeizeitdiagramm(REAL CONSTx1,x2,y1,y2,yzw):IFy1=y2THENx1ELSEx1+((x2-x1)*(yzw-y1))/(y2-y1)FI.END PROCberechnetestbeizeitdiagramm;BOOL PROCimausgabefenster(ZUSTAND CONSTz,INT CONSTi,REAL CONSTmin,max):((zSUBi)<=max)CAND((zSUBi)>=min)END PROCimausgabefenster;FILE PROCtabelle(KURVE VARkurve,ZUSTAND CONSTmuster,BOOL CONSTmusterzeit):LETtabellenname=" tabelle",fracs=4,spaltenbreite=13,laenge=13,zeitbeschr=76,DARSTELLUNG=STRUCT(INTanzahlkurven,ROWmaxkurvenINTindex);REAL VARzeit,zeitdifferenz;ZUSTAND VARz:=neuerzustand(DSUBmuster);INT VARi:=0;ROWmaxkurvenSTRUCT(TEXTzraum,strich)VARspalte;INT VARspaltenanzahl,spaltenzaehler,punktzaehler:=0;TEXT CONSTtrennstrichfuerleerezeit:=(laenge+1)*" "+"!";waehlekurvenaus;richtedateiein;schreibeueberschrift;verarbeiteerstenpunkt;WHILE NOTendedestabspeichers(kurve)REPverarbeitenaechstenpunktPER;WHILE NOTanzahlmoeglicherpunkteerreichtCANDmusterzeitREPverarbeiteleerezeilePER;lieferedatei.waehlekurvenaus:DARSTELLUNG VARtabelle;tabelle.anzahlkurven:=0;FORiFROM1UPTO(DSUBmuster)REP IF(musterSUBi)=1.0THENtabelle.anzahlkurvenINCR1;tabelle.index(tabelle.anzahlkurven):=i;IFtabelle.anzahlkurven=maxkurvenTHEN LEAVEwaehlekurvenausFI FI PER.
+richtedateiein:IFexists(tabellenname)THENforget(tabellenname,quiet)FI;FILE VARtab:=sequentialfile(output,tabellenname).schreibeueberschrift:bestimmespaltenanzahl;schreibeerstezeile;schreibeunterstreichung.bestimmespaltenanzahl:spaltenanzahl:=tabelle.anzahlkurven+1;setzetabelle.setzetabelle:FORiFROM1UPTOspaltenanzahlREPspalte(i).zraum:="";spalte(i).strich:=" |"PER.schreibeerstezeile:spaltenzaehler:=1;schreibeevtlzeit;FORiFROM1UPTOtabelle.anzahlkurvenREPschreibekoordinatenueberschriftPER;schreibezeileindatei;setzetabelle.schreibeevtlzeit:TEXT VARzeittext:=meldungstext(zeitbeschr);IFlength(zeittext)<laengevarkurzformTHENzeittextCAT((laengevarkurzform-length(zeittext))*" ");ELSEzeittext:=subtext(zeittext,1,laengevarkurzform);FI;spalte(spaltenzaehler).zraum:=((spaltenbreite-laengevarkurzform)*" ")+zeittext;spaltenzaehlerINCR1.schreibekoordinatenueberschrift:TEXT VARbezeichnung;INT VARblankanzahl;IFtabelle.index(i)<=dimensionTHENbezeichnung:=variablenkurzform(tabelle.index(i));ELSEbezeichnung:=covariablenkurzform(tabelle.index(i)-dimension);FI;blankanzahl:=spaltenbreite-length(bezeichnung);spalte(spaltenzaehler).zraum:=((blankanzahlDIV2)*" "+bezeichnung)+(((blankanzahlDIV2)+(blankanzahlMOD2))*" ");spaltenzaehlerINCR1.schreibeunterstreichung:TEXT VARzeile:="",textspalte:="";textspalte:=(laenge+1)*"-"+"+";zeile:=(spaltenzaehler-1)*textspalte;putline(tab,zeile).verarbeiteerstenpunkt:REAL VARzahl;punktzaehlerINCR1;leseerstenbeobachtungspunkt(kurve,zeit,z);schreibepunktinspalten;schreibezeileindatei.schreibepunktinspalten:spaltenzaehler:=1;schreibezeitinspalte;FORiFROM1UPTOtabelle.anzahlkurvenREPschreibekoordinateinspaltePER.schreibezeitinspalte:zahl:=zeit;spalte(spaltenzaehler).zraum:=wandle(zahl,laenge,fracs);spaltenzaehlerINCR1.schreibekoordinateinspalte:zahl:=(zSUBtabelle.index(i));IFergebnisganzzahligTHENzahl:=floor(zSUBtabelle.index(i))ELSEzahl:=zSUBtabelle.index(i)FI;spalte(spaltenzaehler).zraum:=wandle(zahl,laenge,fracs);spaltenzaehlerINCR1.schreibezeileindatei:zeile:="";FORiFROM1UPTOspaltenanzahlREPzeileCATspalte(i).zraum;zeileCATspalte(i).strichPER;putline(tab,zeile).verarbeitenaechstenpunkt:lesenaechstenbeobachtungspunkt(kurve,zeit,z);punktzaehlerINCR1;IFpunktzaehler=2THENzeitdifferenz:=zeit;FI;schreibepunktinspalten;schreibezeileindatei.lieferedatei:tab.anzahlmoeglicherpunkteerreicht:punktzaehler>=normaleanzahlvonausgegebenenpunkten.verarbeiteleerezeile:IFzeitdifferenz=0.0THENspalte(1).zraum:=trennstrichfuerleerezeit;ELSEzeit:=real(punktzaehler)*zeitdifferenz;spalte(1).zraum:=wandle(zeit,laenge,fracs);FI;putline(tab,spalte(1).zraum);punktzaehlerINCR1;.ENDPROCtabelle;END PACKETcoroutinenundco;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls dateiscroll b/app/schulis-simulationssystem/3.0/src/ls dateiscroll
new file mode 100644
index 0000000..fa923cf
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls dateiscroll
@@ -0,0 +1,5 @@
+PACKETlsscrollDEFINESscroll,grossesrahmenfenster,tabellenfensteroben,tabellenfensterunten,scrollfenster:LETniltext="",bell="�",left="�",right="�",runter="
+",hoch="�",hop="�",esc="�";PROCscroll(WINDOW VARw,TEXT CONSTdatname,INT CONSTxscroll,yscroll,horizontalscroll,INT VARerstersatz,erstespalte,TEXT CONSTsonderzeichen,TEXT VARausstiegzeichen):FILE VARf:=sequentialfile(input,datname);scroll(w,f,xscroll,yscroll,horizontalscroll,erstersatz,erstespalte,sonderzeichen,ausstiegzeichen)END PROCscroll;PROCscroll(WINDOW VARw,FILE VARf,INT CONSTxscroll,yscroll,horizontalscroll,INT VARerstersatz,erstespalte,TEXT CONSTsonderzeichen,TEXT VARausstiegzeichen):BOOL VARveraenderungderkopfzeilen:=TRUE,veraenderungdervariablenspalte:=TRUE;bestimmemaximalwertederdatei;bereiteausgabevor;REPzeigedateiausschnitt;IFsonderzeichen=niltextTHEN LEAVEscrollEND IF;werteeingabezeichenaus;veraenderungdervariablenspalte:=NOTveraenderungderkopfzeilenEND REP.bestimmemaximalwertederdatei:TEXT VARzeile;input(f);INT VARmaxspalten:=0,maxzeilen:=lines(f);WHILE NOTeof(f)REPgetline(f,zeile);IFlength(zeile)>maxspaltenTHENmaxspalten:=length(zeile)END IF END REP.bereiteausgabevor:INT CONSTbreite:=areaxsize(w),laenge:=areaysize(w),xbeginn:=areax(w),ybeginn:=areay(w),letzterzeilenanfang:=maxzeilen-laenge+yscroll,ausgabebreite:=breite-xscroll-1,ausgabelaenge:=laenge-yscroll+1,letzterspaltenanfang:=jenachdem;modify(f).jenachdem:IFhorizontalscroll>1THENmaxspalten-horizontalscroll+2ELSEmaxspalten-ausgabebreiteEND IF.zeigedateiausschnitt:TEXT VARsatz,ausgabezeile;INT VARi,ypos;IFveraenderungderkopfzeilenTHENypos:=ybeginn;FORiFROM1UPTOyscroll-1REPtoline(f,i);readrecord(f,satz);ausgabezeile:=subtext(satz,1,xscroll-1);ausgabezeileCATsubtext(satz,erstespalte,erstespalte+ausgabebreite+1);cursor(xbeginn,ypos);out(text(ausgabezeile,breite));yposINCR1END REP ELSEypos:=ybeginn+yscroll-1END IF;i:=erstersatz;REPtoline(f,i);readrecord(f,satz);IFveraenderungdervariablenspalteTHENcursor(xbeginn,ypos);out(text(satz,xscroll-1,1))END IF;cursor(xbeginn+xscroll-1,ypos);out(text(satz,breite-xscroll+1,erstespalte));yposINCR1;iINCR1UNTILypos-ybeginn>laenge-1END REP.werteeingabezeichenaus:TEXT VARch;REPinchar(ch);IFch=leftTHEN IFerstespalte>xscrollTHENscrollelinksEND IF ELIFch=rightTHEN IFerstespalte<letzterspaltenanfangTHENscrollerechtsEND IF ELIFch=hochTHEN IFerstersatz>yscrollTHENscrollezurueckEND IF ELIFch=runterTHEN IFerstersatz<letzterzeilenanfangTHENscrollevorEND IF ELIFch=hopTHENinchar(ch);IFch=leftTHEN IFerstespalte>xscrollTHENblaetterelinksEND IF ELIFch=rightTHEN IFerstespalte<letzterspaltenanfangTHENblaettererechtsEND IF ELIFch=hochTHEN IFerstersatz>yscrollTHENblaetterezurueckEND IF ELIFch=runterTHEN IFerstersatz<letzterzeilenanfangTHENblaetterevorEND IF ELSEout(bell)END IF ELIFch=escTHENinchar(ausstiegzeichen);IFausstiegzeichen="1"CANDerstersatz>yscrollTHENspringeandenanfangELIFausstiegzeichen="9"CANDerstersatz<letzterzeilenanfangTHENspringeandasendeELIFpos(sonderzeichen,ausstiegzeichen)<>0THEN LEAVEscrollEND IF END IF END REP.scrollelinks:erstespalteDECRhorizontalscroll;erstespalte:=max(erstespalte,xscroll);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.scrollerechts:erstespalteINCRhorizontalscroll;erstespalte:=min(erstespalte,letzterspaltenanfang);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.scrollezurueck:erstersatzDECR1;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.scrollevor:erstersatzINCR1;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.blaetterelinks:erstespalteDECRausgabebreite;erstespalte:=max(erstespalte,xscroll);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.blaettererechts:erstespalteINCRausgabebreite;erstespalte:=min(erstespalte,letzterspaltenanfang);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.blaetterezurueck:erstersatzDECRausgabelaenge;erstersatz:=max(erstersatz,yscroll);veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.blaetterevor:erstersatzINCRausgabelaenge;erstersatz:=min(
+erstersatz,letzterzeilenanfang);veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.springeandenanfang:erstersatz:=yscroll;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.springeandasende:erstersatz:=max(yscroll,letzterzeilenanfang);veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenausEND PROCscroll;PROCscroll(WINDOW VARwo,wu,TEXT CONSTdatnameo,datnameu,INT CONSTxscroll,yscroll,horizontalscroll,INT VARerstersatzo,erstespalte,erstersatzu,TEXT CONSTsonderzeichen,TEXT VARausstiegzeichen):BOOL VARveraenderungderkopfzeilen:=TRUE,veraenderungdervariablenspalte:=TRUE;bestimmemaximalwertederdatei;bereiteausgabevor;REPzeigedateiausschnittoben;zeigedateiausschnittunten;IFsonderzeichen=niltextTHEN LEAVEscrollEND IF;werteeingabezeichenaus;veraenderungdervariablenspalte:=NOTveraenderungderkopfzeilenEND REP.bestimmemaximalwertederdatei:TEXT VARzeile;FILE VARfo:=sequentialfile(input,datnameo),fu:=sequentialfile(input,datnameu);INT VARmaxspalten:=0,maxzeileno:=lines(fo),maxzeilenu:=lines(fu);WHILE NOTeof(fo)REPgetline(fo,zeile);IFlength(zeile)>maxspaltenTHENmaxspalten:=length(zeile)END IF END REP.bereiteausgabevor:INT CONSTbreite:=areaxsize(wo),laenge:=areaysize(wo),xbeginn:=areax(wo),ybeginno:=areay(wo),ybeginnu:=areay(wu),letzterzeilenanfango:=maxzeileno-laenge+yscroll,letzterzeilenanfangu:=maxzeilenu-laenge+yscroll,ausgabebreite:=breite-xscroll-1,ausgabelaenge:=laenge-yscroll+1,letzterspaltenanfang:=jenachdem;modify(fo);modify(fu);.jenachdem:IFhorizontalscroll>1THENmaxspalten-horizontalscroll+2ELSEmaxspalten-ausgabebreiteEND IF.zeigedateiausschnittoben:TEXT VARsatz,ausgabezeile;INT VARi,ypos;IFveraenderungderkopfzeilenTHENypos:=ybeginno;FORiFROM1UPTOyscroll-1REPtoline(fo,i);readrecord(fo,satz);ausgabezeile:=subtext(satz,1,xscroll-1);ausgabezeileCATsubtext(satz,erstespalte,erstespalte+ausgabebreite+1);cursor(xbeginn,ypos);out(text(ausgabezeile,breite));yposINCR1END REP ELSEypos:=ybeginno+yscroll-1END IF;i:=erstersatzo;REPtoline(fo,i);readrecord(fo,satz);IFveraenderungdervariablenspalteTHENcursor(xbeginn,ypos);out(text(satz,xscroll-1,1))END IF;cursor(xbeginn+xscroll-1,ypos);out(text(satz,breite-xscroll+1,erstespalte));yposINCR1;iINCR1UNTILypos-ybeginno>laenge-1END REP.zeigedateiausschnittunten:IFveraenderungderkopfzeilenTHENypos:=ybeginnu;FORiFROM1UPTOyscroll-1REPtoline(fu,i);readrecord(fu,satz);ausgabezeile:=subtext(satz,1,xscroll-1);ausgabezeileCATsubtext(satz,erstespalte,erstespalte+ausgabebreite+1);cursor(xbeginn,ypos);out(text(ausgabezeile,breite));yposINCR1END REP ELSEypos:=ybeginnu+yscroll-1END IF;i:=erstersatzu;REPtoline(fu,i);readrecord(fu,satz);IFveraenderungdervariablenspalteTHENcursor(xbeginn,ypos);out(text(satz,xscroll-1,1))END IF;cursor(xbeginn+xscroll-1,ypos);out(text(satz,breite-xscroll+1,erstespalte));yposINCR1;iINCR1UNTILypos-ybeginnu>laenge-1END REP.werteeingabezeichenaus:TEXT VARch;REPinchar(ch);IFch=leftTHEN IFerstespalte>xscrollTHENscrollelinksEND IF ELIFch=rightTHEN IFerstespalte<letzterspaltenanfangTHENscrollerechtsEND IF ELIFch=hochTHEN IFerstersatzo>yscrollCORerstersatzu>yscrollTHENscrollezurueckEND IF ELIFch=runterTHEN IFerstersatzo<letzterzeilenanfangoCORerstersatzu<letzterzeilenanfanguTHENscrollevorEND IF ELIFch=hopTHENinchar(ch);IFch=leftTHEN IFerstespalte>xscrollTHENblaetterelinksEND IF ELIFch=rightTHEN IFerstespalte<letzterspaltenanfangTHENblaettererechtsEND IF ELIFch=hochTHEN IFerstersatzo>yscrollORerstersatzu>yscrollTHENblaetterezurueckEND IF ELIFch=runterTHEN IFerstersatzo<letzterzeilenanfangoORerstersatzu<letzterzeilenanfanguTHENblaetterevorEND IF ELSEout(bell)END IF ELIFch=escTHENinchar(ausstiegzeichen);IFausstiegzeichen="1"CAND(erstersatzo>yscrollORerstersatzu>yscroll)THENspringeandenanfangELIFausstiegzeichen="9"CAND(erstersatzo<letzterzeilenanfangoORerstersatzu<letzterzeilenanfangu)THENspringeandasendeELIFpos(sonderzeichen,ausstiegzeichen)<>0THEN LEAVEscrollEND IF END IF END REP.scrollelinks:erstespalteDECRhorizontalscroll;erstespalte:=max(erstespalte,xscroll);
+veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.scrollerechts:erstespalteINCRhorizontalscroll;erstespalte:=min(erstespalte,letzterspaltenanfang);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.scrollezurueck:IFerstersatzo>yscrollTHENerstersatzoDECR1;FI;IFerstersatzu>yscrollTHENerstersatzuDECR1;FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.scrollevor:IFerstersatzo<letzterzeilenanfangoTHENerstersatzoINCR1;FI;IFerstersatzu<letzterzeilenanfanguTHENerstersatzuINCR1;FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.blaetterelinks:erstespalteDECRausgabebreite;erstespalte:=max(erstespalte,xscroll);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.blaettererechts:erstespalteINCRausgabebreite;erstespalte:=min(erstespalte,letzterspaltenanfang);veraenderungderkopfzeilen:=TRUE;LEAVEwerteeingabezeichenaus.blaetterezurueck:IFerstersatzo>yscrollTHENerstersatzoDECRausgabelaenge;erstersatzo:=max(erstersatzo,yscroll);FI;IFerstersatzu>yscrollTHENerstersatzuDECRausgabelaenge;erstersatzu:=max(erstersatzu,yscroll);FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.blaetterevor:IFerstersatzo<letzterzeilenanfangoTHENerstersatzoINCRausgabelaenge;erstersatzo:=min(erstersatzo,letzterzeilenanfango);FI;IFerstersatzu<letzterzeilenanfanguTHENerstersatzuINCRausgabelaenge;erstersatzu:=min(erstersatzu,letzterzeilenanfangu);FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.springeandenanfang:IF(erstersatzo>yscroll)THENerstersatzo:=yscroll;FI;IF(erstersatzu>yscroll)THENerstersatzu:=yscroll;FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.springeandasende:IFerstersatzo<letzterzeilenanfangoTHENerstersatzo:=max(yscroll,letzterzeilenanfango);FI;IFerstersatzu<letzterzeilenanfanguTHENerstersatzu:=max(yscroll,letzterzeilenanfangu);FI;veraenderungderkopfzeilen:=FALSE;LEAVEwerteeingabezeichenaus.END PROCscroll;WINDOW PROCgrossesrahmenfenster:WINDOW VARfsingle:=window(2,5,77,17);fsingle.END PROCgrossesrahmenfenster;WINDOW PROCscrollfenster:WINDOW VARfshow:=window(4,5,74,17);fshow.END PROCscrollfenster;WINDOW PROCtabellenfensteroben:WINDOW VARw1:=window(2,5,76,8);w1.END PROCtabellenfensteroben;WINDOW PROCtabellenfensterunten:WINDOW VARw2:=window(2,15,76,8);w2.END PROCtabellenfensterunten;END PACKETlsscroll;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls demonstration b/app/schulis-simulationssystem/3.0/src/ls demonstration
new file mode 100644
index 0000000..a23b3a6
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls demonstration
@@ -0,0 +1,4 @@
+PACKETdemonstrationDEFINESdemonstration:LETfalschetaste=13,auskdiagrammarten=1,auskdiagrammartenohnephasendiagr=3,auskunftzusatzdarst=25,auskletzteseite=27,weiter="w",sendetaste="",blaettern="b",blaetternoben="o",blaetternunten="u",abbrechen="a",stvergleichzeit=2,stinfo=3,stmodellgroessen=7,stkombinationzeitphasen=8,stkombinationzeittabelle=13,stgraphik=20,stvergleichphasen=32,stmitbeliebigertaste=35,zeilenbreite=76,spaltenbreite=0,scrollsp1=1,scrollzeile=1,scrollzeile1tab=3,scrollsp1tab=16,scrollbreitetab=15;TEXT CONSTscrollausstiegohnedrucken:="aw";LEToutputmodellgroessen="output modellgroessen",outputaus="output aus",outputinfo="output info",dateimitinfo="temporaer",dateimodellwerte=" modellwerte",erzeugtetabelle=" tabelle",dateitab=" tabelle.p",dateimitwerten="teiltextname",outputausdiagr="output aus diagr";LETstrukt1fenster=1,strukt2diagramme1text=3,strukt4fenster=4,strukttabelleunten=5,fensterdummy=0,fensterganz=1,fensterunten=3,fensterlinksoben=4,fensterlinksunten=5,fensterrechtsoben=6,fensterrechtsunten=7,fensterrechts=8;LET MODELLAUF=STRUCT(LOESUNGoriginal,fortsetzung,vergleich);KURVE VARhilfskurve;OUTPUT VARausdiagr;WINDOW VARfshow;PROCdemonstration(PROC(LOESUNG VAR,BOOL VAR,TEXT VAR)darst4):TEXT VARtaste:="";TEXT VARausstieg:="";INT VARerstersatz1:=3,erstespalte1:=1;TEXT CONSTausstiegszeichen:=abbrechen+weiter;LOESUNG VARloesung;loesung:=originalwerte;BOOL VARindemo:=TRUE;FILE VARmdlinfo;enablestop;REPkernvondemonstration;PER.kernvondemonstration:initialisieren;zeigemodellgroessen;IFtaste=abbrechenTHENleavedemonstrationELIFtaste=weiterTHENinformationFI;.leavedemonstration:forgetdemooutput;plotend;LEAVEdemonstration.initialisieren:MODELLAUF VARmodellauf;modellauf.original:=originalwerte;modellauf.vergleich:=vergleichswerte.zeigemodellgroessen:fshow:=window(2,3,76,20);mdlinfo:=modellwerteausgeben(modellauf.original);page;cursor(1,1);out(invers(kopfzeilezusammenstellen(kopfzeile(14),modellkurzbezeichnung,zeilenbreite)));footnote(steuerleiste(stmodellgroessen));erstersatz1:=scrollzeile;erstespalte1:=scrollsp1;scroll(fshow,dateimodellwerte,1,scrollzeile,spaltenbreite,erstersatz1,erstespalte1,ausstiegszeichen,taste);.information:plotend;fshow:=scrollfenster;cursor(1,1);out(invers(kopfzeilezusammenstellen(kopfzeile(15),modellkurzbezeichnung,zeilenbreite)));IFcodimension+dimension>1CANDmitphasendiagrammTHENmdlinfo:=auskunftindatei(auskdiagrammarten);ELSEmdlinfo:=auskunftindatei(auskdiagrammartenohnephasendiagr)FI;footnote(steuerleiste(stinfo));erstersatz1:=scrollzeile;erstespalte1:=scrollsp1;scroll(fshow,dateimitinfo,1,scrollzeile,spaltenbreite,erstersatz1,erstespalte1,ausstiegszeichen,taste);IFtaste=abbrechenTHENleavedemonstrationELSEzeigezeitdiagrammFI.zeigezeitdiagramm:zeitdiagrammausgeben;REP IFtaste=abbrechenTHENleavedemonstrationELIFtaste=weiterTHENzeigehistogrammELSEgibmeldungaus(falschetaste);tastelesen(taste);FI PER.zeitdiagrammausgeben:ausdiagr:=niloutput(strukt1fenster,outputausdiagr);hilfskurve:=LOESUNGSABSCHNITTmodellauf.original;steuerprozessfuereineloesung(ausdiagr,hilfskurve,demomuster,neuerzustand(dimension+codimension),fensterganz,fensterdummy,16,stgraphik,sendetaste,weiter+abbrechen,taste,PROCcoroutinezeit,PROCcoroutinedummy);.zeigehistogramm:histogrammausgeben;REP IFtaste=abbrechenTHENleavedemonstrationELIFtaste=weiterTHEN IFcodimension+dimension>1CANDmitphasendiagrammTHENzeigephasendiagrammELSEzeigetabelleFI ELSEgibmeldungaus(falschetaste);tastelesen(taste);FI PER.histogrammausgeben:ausdiagr:=niloutput(strukt1fenster,outputausdiagr);hilfskurve:=LOESUNGSABSCHNITTmodellauf.original;steuerprozessfuereineloesung(ausdiagr,hilfskurve,demomuster,neuerzustand(dimension+codimension),fensterganz,fensterdummy,27,stgraphik,sendetaste,weiter+abbrechen,taste,PROCcoroutinehisto,PROCcoroutinedummy).zeigephasendiagramm:phasendiagrammausgeben;REP IFtaste=abbrechenTHENleavedemonstrationELIFtaste=weiterTHENzeigetabelleELSEgibmeldungaus(falschetaste)FI PER.phasendiagrammausgeben:ausdiagr:=niloutput(strukt1fenster,
+outputausdiagr);ZUSTAND VARdemomusterphase:=neuerzustand(dimension+codimension);hilfskurve:=LOESUNGSABSCHNITTmodellauf.original;replace(demomusterphase,demoxindex,1.0);IFdemoautomatikTHENreplace(demomusterphase,demoyindex,1.0)ELSEreplace(demomusterphase,demoyindex,2.0)FI;steuerprozessfuereineloesung(ausdiagr,hilfskurve,demomusterphase,neuerzustand(dimension+codimension),fensterganz,fensterdummy,17,stgraphik,sendetaste,weiter+abbrechen,taste,PROCcoroutinephase,PROCcoroutinedummy).zeigetabelle:tabelleausgeben;IFtaste=abbrechenTHENleavedemonstrationELIFtaste=weiterTHENinformation2FI.tabelleausgeben:WINDOW VARtabwindow:=grossesrahmenfenster;plotend;hilfskurve:=LOESUNGSABSCHNITTmodellauf.original;mdlinfo:=tabelle(hilfskurve,demomuster,TRUE);forget(dateitab,quiet);rename(erzeugtetabelle,dateitab);outframe(tabwindow);cursor(1,1);out(invers(kopfzeilezusammenstellen(kopfzeile(18),modellkurzbezeichnung,zeilenbreite)));footnote(steuerleiste(stmodellgroessen));erstersatz1:=scrollzeile1tab;erstespalte1:=scrollsp1tab;scroll(tabwindow,dateitab,scrollsp1tab,scrollzeile1tab,scrollbreitetab,erstersatz1,erstespalte1,scrollausstiegohnedrucken,taste);erase(tabwindow);.information2:plotend;IFcodimension+dimension>1CANDmitphasendiagrammTHENmdlinfo:=auskunftindatei(2)ELSEmdlinfo:=auskunftindatei(4);FI;cursor(1,1);out(invers(kopfzeilezusammenstellen(kopfzeile(13),modellkurzbezeichnung,zeilenbreite)));footnote(steuerleiste(stinfo));erstersatz1:=scrollzeile;erstespalte1:=scrollsp1;scroll(fshow,dateimitinfo,1,scrollzeile,spaltenbreite,erstersatz1,erstespalte1,ausstiegszeichen,taste);IFtaste=abbrechenTHENleavedemonstrationELSEzeigekombiniertedarstellungFI.zeigekombiniertedarstellung:kombiniertedarstellungausgeben;REP IFtaste=abbrechenTHENleavedemonstrationELIFtaste=weiterTHENzeigevergleichskurveELSEgibmeldungaus(falschetaste);tastelesen(taste);FI PER.kombiniertedarstellungausgeben:IFcodimension+dimension>1CANDmitphasendiagrammTHENausdiagr:=niloutput(strukt2diagramme1text,outputausdiagr);replace(ausdiagr,fensterrechts,modellwerteausgeben(modellauf.original));steuerprozessfuereineloesung(ausdiagr,hilfskurve,demomuster,demomusterphase,fensterlinksoben,fensterlinksunten,19,stkombinationzeitphasen,sendetaste+blaettern,weiter+abbrechen,taste,PROCcoroutinezeit,PROCcoroutinephase)ELSEausdiagr:=niloutput(strukttabelleunten,outputausdiagr);replace(ausdiagr,fensterunten,tabelle(hilfskurve,demomuster,TRUE));replace(ausdiagr,fensterrechtsoben,modellwerteausgeben(modellauf.original));steuerprozessfuereineloesung(ausdiagr,hilfskurve,demomuster,neuerzustand(dimension+codimension),fensterlinksoben,fensterlinksunten,19,stkombinationzeittabelle,sendetaste+blaetternoben+blaetternunten,weiter+abbrechen,taste,PROCcoroutinezeit,PROCcoroutinedummy)FI.zeigevergleichskurve:vergleichskurveausgeben;REP IFtaste=abbrechenTHENleavedemonstrationELIFtaste=weiterCANDmitphasendiagrammCAND(dimension+codimension>1)THENzeigevergleichskurveimphasendiagrammELIFtaste=weiterCANDmitzusatzdarstellungTHENinformation3ELIFtaste=weiterTHENzeigeletzteseiteELSEgibmeldungaus(falschetaste);tastelesen(taste);FI PER.vergleichskurveausgeben:ausdiagr:=niloutput(strukt4fenster,outputausdiagr);KURVE VARkurve1,kurve2;replace(ausdiagr,fensterrechtsoben,modellwerteausgeben(modellauf.original));replace(ausdiagr,fensterrechtsunten,modellwerteausgeben(modellauf.vergleich));kurve2:=LOESUNGSABSCHNITTmodellauf.vergleich;kurve1:=LOESUNGSABSCHNITTmodellauf.original;steuerprozessfuerzweiloesungen(ausdiagr,kurve1,kurve2,demomuster,fensterlinksoben,fensterlinksunten,20,stvergleichzeit,sendetaste+blaetternoben+blaetternunten,weiter+abbrechen,taste,PROCcoroutinezeit,PROCkreuzzeitvergleich).zeigevergleichskurveimphasendiagramm:vergleichskurveimphasendiagrammausgeben;REP IFtaste=abbrechenTHENleavedemonstrationELIFtaste=weiterCANDmitzusatzdarstellungTHENinformation3ELIFtaste=weiterTHENzeigeletzteseiteELSEgibmeldungaus(falschetaste);tastelesen(taste);FI PER.vergleichskurveimphasendiagrammausgeben:ausdiagr:=niloutput(strukt1fenster,
+outputausdiagr);kurve2:=LOESUNGSABSCHNITTmodellauf.vergleich;kurve1:=LOESUNGSABSCHNITTmodellauf.original;steuerprozessfuerzweiloesungen(ausdiagr,kurve1,kurve2,demomusterphase,fensterganz,fensterganz,20,stvergleichphasen,sendetaste,weiter+abbrechen,taste,PROCcoroutinephase,PROCkreuzphasevergleich);.information3:plotend;mdlinfo:=auskunftindatei(auskunftzusatzdarst);cursor(1,1);out(invers(kopfzeilezusammenstellen(kopfzeile(13),modellkurzbezeichnung,zeilenbreite)));footnote(steuerleiste(stinfo));erstersatz1:=scrollzeile;erstespalte1:=scrollsp1;scroll(fshow,dateimitinfo,1,scrollzeile,spaltenbreite,erstersatz1,erstespalte1,ausstiegszeichen,taste);IFtaste=abbrechenTHENleavedemonstrationELSEzeigezusatzdarstFI.zeigezusatzdarst:darst4(loesung,indemo,taste);IFtaste=abbrechenTHENleavedemonstrationELIFtaste=weiterTHENzeigeletzteseiteFI;.zeigeletzteseite:plotend;mdlinfo:=auskunftindatei(auskletzteseite);cursor(1,1);out(invers(kopfzeilezusammenstellen(kopfzeile(13),modellkurzbezeichnung,zeilenbreite)));footnote(steuerleiste(stmitbeliebigertaste));erstersatz1:=scrollzeile;erstespalte1:=scrollsp1;scroll(fshow,dateimitinfo,1,scrollzeile,spaltenbreite,erstersatz1,erstespalte1,"",taste);inchar(taste);leavedemonstration.END PROCdemonstration;PROCforgetdemooutput:forget(dateimitwerten,quiet);forget(dateimitinfo,quiet);forget(outputmodellgroessen,quiet);forget(outputaus,quiet);forget(outputinfo,quiet);forget(outputausdiagr,quiet);forget(dateitab,quiet);forget(dateimodellwerte,quiet);forget(erzeugtetabelle,quiet);END PROCforgetdemooutput;END PACKETdemonstration;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls dialoghilfen b/app/schulis-simulationssystem/3.0/src/ls dialoghilfen
new file mode 100644
index 0000000..086d78d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls dialoghilfen
@@ -0,0 +1,9 @@
+PACKETlsdialoghilfenDEFINESreturn,gibmeldungaus,meldungaufbildschirm,zeigeauskunft,auskunftindatei,texteankoppeln,meldungstext,auskunftstext,kopfzeile,steuerleiste,loescheaktuellemeldung,zeigemeldung:LETdatenraumnamed="TEXTE deutsch",maxsize=100,editorfenster=79,eol=""254"",stop=""223"",simseltask="ls-MENUKARTEN",error=1110,sendetexte=1119,umbruch=""223"",untenletztezeile=22,dateiname="temporaer";LETnegmldzeile1mbankdialog=17,negmldzeile1simuldialog=16,posmldzeile1=20,zeilenlaengemld=75,simulationsmenu=1;INITFLAG VARinthistask:=FALSE;LET DIRFILE=STRUCT ( ROWmaxsizeTEXTmeldung,ROWmaxsizeTEXTauskunft,ROWmaxsizeTEXTueberschrift,ROWmaxsizeTEXTleiste,ROWmaxsizeTEXTmenuezeile);BOUND DIRFILE VARtexte;BOOL VARmeldunggezeigt::FALSE;AREA VARallgmld;fill(allgmld,3,negmldzeile1mbankdialog,zeilenlaengemld,3);PROCtexteankoppeln:IF NOTinitialized(inthistask)THEN TEXT VARtextdatenraum:=sprachversionbestimmen;IF NOTexists(textdatenraum)THEN IF NOTexists(textdatenraum,/simseltask)THENerrorstop("TEXTE fehlen!")ELSEfetch(textdatenraum,/simseltask);kopplean;FI;ELSEkopplean;FI;FI;.sprachversionbestimmen:datenraumnamed.kopplean:DATASPACE VARtextds:=old(textdatenraum);texte:=textds;forget(textdatenraum,quiet);END PROCtexteankoppeln;TEXT PROCmeldungstext(INT CONSTindex):texte.meldung(index)END PROCmeldungstext;TEXT PROCauskunftstext(INT CONSTindex):texte.auskunft(index)END PROCauskunftstext;TEXT PROCsteuerleiste(INT CONSTindex):texte.leiste(index)END PROCsteuerleiste;TEXT PROCkopfzeile(INT CONSTindex):texte.ueberschrift(index)END PROCkopfzeile;TEXT PROCmenuezeile(INT CONSTindex):texte.menuezeile(index)END PROCmenuezeile;PROCgibmeldungaus(INT CONSTmeldungsnr):gibmeldungaus(meldungstext(meldungsnr));END PROCgibmeldungaus;PROCgibmeldungaus(TEXT CONSTmeldungstxt):TEXT VARtxt:=meldungstxt;INT CONSTgrenzelinks:=4,grenzerechts:=79;loeschealtemeldung;IFcompress(meldungstxt)<>""THENschreibemeldungFI.loeschealtemeldung:textout(grenzelinks,untenletztezeile-1,(grenzerechts-grenzelinks+1)*" ");textout(grenzelinks,untenletztezeile,(grenzerechts-grenzelinks+1)*" ");.schreibemeldung:IFeinezeileTHENgibinvorletzterzeileausELSEgibinvorvorletzterzeileausFI;.einezeile:length(txt)<=(grenzerechts-grenzelinks)CANDkeineumbruchstelle.gibinvorletzterzeileaus:textout(grenzelinks,untenletztezeile,txt).gibinvorvorletzterzeileaus:textout(grenzelinks,untenletztezeile-1,subtext(txt,1,pos(txt,umbruch)-1));txt:=subtext(txt,pos(txt,umbruch)+1);textout(grenzelinks,untenletztezeile,subtext(txt,1,grenzerechts-grenzelinks+1)).keineumbruchstelle:pos(txt,umbruch)=0.END PROCgibmeldungaus;PROCmeldungaufbildschirm(BOOL CONSTausgegeben):IFausgegebenTHENmeldunggezeigt:=TRUE ELSEmeldunggezeigt:=FALSE FI;END PROCmeldungaufbildschirm;BOOL PROCmeldungaufbildschirm:meldunggezeigt.END PROCmeldungaufbildschirm;PROCzeigeauskunft(TEXT CONSTatext,INT CONSTvonzeile,biszeile,abspalte):TEXT CONSTleerzeile:=75*" ";INT VARi,i1:=vonzeile,i2:=75;INT CONSTlaenge:=length(atext);WHILEi2<=laengeREPsubstringausgebenUNTILi1>biszeilePER;FORiFROMi1UPTObiszeileREPleerzeileausgebenPER.substringausgeben:textout(abspalte,i1,subtext(atext,i2-75+1,i2));i2INCR75;i1INCR1.leerzeileausgeben:cursor(abspalte,i);out(leerzeile).END PROCzeigeauskunft;FILE PROCauskunftindatei(INT CONSTauskunftsnr):IFexists(dateiname)THENforget(dateiname,quiet)FI;TEXT CONSTte:=auskunftstext(auskunftsnr);FILE VARdat:=sequentialfile(output,dateiname);INT VARbottom:=1,top:=1;TEXT VARzeile,auskunft:=te;INT VARl:=length(auskunft);formatierezeile;REPschreibe;formatierezeile;UNTILzeile=""PER;dat.formatierezeile:zeile:="";IFbottom>=lTHENzeile:=""ELSEtop:=min(bottom+editorfenster-1,l);zeile:=subtext(auskunft,bottom,top,eol,stop,FALSE);topINCR1;bottom:=topFI.schreibe:putline(dat,zeile).END PROCauskunftindatei;TEXT PROCsubtext(TEXT VARauskunft,INT CONSTbottom,INT VARtop,TEXT CONSTloe,TEXT CONSTstp,BOOL CONSTinfenster):LETb=" ";TEXT VARoberster;INT VARlastblank;INT VARi;TEXT
+VARt,vergleich;konstruieret;t.konstruieret:FORiFROMbottomUPTOtopREPvergleich:=subtext(auskunft,i,i);IF vergleich=loeTHEN IF NOTinfensterTHENt:=subtext(auskunft,bottom,i-1);top:=i;LEAVEkonstruieretFI;replace(auskunft,i,b);lastblank:=iELIFvergleich=stpTHENt:=subtext(auskunft,bottom,i-1);IF NOTinfensterTHENt:=t+bFI;top:=i;LEAVEkonstruieretELIFvergleich=bTHENlastblank:=iFI;PER;oberster:=subtext(auskunft,top+1,top+1);IF(lastblank<>top)CAND((oberster<>b)CAND(oberster<>loe)CAND(oberster<>stp))THENtop:=lastblankFI;t:=subtext(auskunft,bottom,top).END PROCsubtext;PROCtextout(INT CONSTsp,z,TEXT CONSTausg):cursor(sp,z);out(ausg);END PROCtextout;TEXT PROCreturn:code(13).END PROCreturn;PROCzeigemeldung(TEXT CONSTmld,BOOL CONSTposmeldung,INT CONSTdialogsituation):TEXT VARt1:="";IFposmeldungTHENfill(allgmld,3,posmldzeile1,zeilenlaengemld,3);ELIFdialogsituation=simulationsmenuTHENfill(allgmld,3,negmldzeile1simuldialog,zeilenlaengemld,3);ELSEfill(allgmld,3,negmldzeile1mbankdialog,zeilenlaengemld,3);FI;pageup(allgmld);outframe(areax(allgmld),areay(allgmld),areaxsize(allgmld),areaysize(allgmld));t1:=invers(center(areaxsize(allgmld)-5,mld));out(allgmld,2,2,t1);.END PROCzeigemeldung;PROCzeigemeldung(TEXT CONSTmld,BOOL CONSTposmeldung):zeigemeldung(mld,posmeldung,simulationsmenu);END PROCzeigemeldung;PROCloescheaktuellemeldung(INT CONSTdialogsituation):IFdialogsituation=simulationsmenuTHENfill(allgmld,3,negmldzeile1simuldialog,zeilenlaengemld,3);ELSEfill(allgmld,3,negmldzeile1mbankdialog,zeilenlaengemld,3);FI;pageup(allgmld);END PROCloescheaktuellemeldung;PROCloescheaktuellemeldung:pageup(allgmld);END PROCloescheaktuellemeldung;END PACKETlsdialoghilfen;
+
+
+
+
+
+
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls dp1 b/app/schulis-simulationssystem/3.0/src/ls dp1
new file mode 100644
index 0000000..6c82b94
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls dp1
@@ -0,0 +1,4 @@
+PACKETdiagrammpraesentation1DEFINESgibbildaus,transformierewirkungsdiagrammundstartesimulation,modellinfo:LETbitteumgeduld=576,prozedurdeklarationfuerdgl=616,realconst=602,parameter=604,dquotientdeklaration=605,replacefuerzustand=606,dquotientliefern=607,prozedurfussfuerdgl=617,prozedurdeklarationfueregl=618,prozedurfussfueregl=619,prozedurkopfzusatzdarst=620,prozedurfusszusatzdarst=621,evektor=611,replacefuerergebnis=612,evektorliefern=613,startwert=614,singularmodellgroesse=511,singularergebnis=512,singularparameter=513,singularformel=514,pluralformel=538,simulationneustarten=10,terminaltaskname="ARBEITSPLATZ";LETnull="0.0",maxlink=8,standardkanal=1;PROCgibbildaus:INT VARi,j,k,starti:=impos(gitterstart),endi:=starti+igittersize-1,startj:=jmpos(gitterstart),endj:=startj+jgittersize-1;initialisierezeichenflaeche;zeichnealleboxen;zeichnealleverbindungen.initialisierezeichenflaeche:page(area(standardfenster));bsspeicherinit.zeichnealleboxen:FORiFROMstartiUPTOendiREP FORjFROMstartjUPTOendjREP IFbelegt(actualcell)THENbox(i,j)FI PER PER.zeichnealleverbindungen:FORiFROMstartiUPTOendiREP FORjFROMstartjUPTOendjREP IFbelegt(actualcell)THENbearbeiteausgehendeundankommendelinien;FI PER PER.actualcell:cell(i,j).bearbeiteausgehendeundankommendelinien:FORkFROM1UPTOmaxlinkREP IFactualcellAUSGANGkTHENausgehendelinie;ELIFeineliniekommtanANDliniekommtvonaussenTHENvonaussenankommendelinieFI PER.ausgehendelinie:zeichneverbindung(mpos(actualcell),k,actualcellUEBERk,actualcellNRk).vonaussenankommendelinie:zeichneverbindung(actualcellUEBERk,actualcellNRk,mpos(actualcell),k).eineliniekommtan:actualcellEINGANGk.liniekommtvonaussen:NOTimgitter(actualcellUEBERk).END PROCgibbildaus;PROCmodellinfo(FILE VARf):allevariablen;alleergaenzungsvariablen;alleparameter;alleformeln.allevariablen:IFanzahlmpos(variablenthesaurus)=1THENputline(f,anwendungstext(singularmodellgroesse)+":");line(f);objekttexte(f,variablenthesaurus)ELIFanzahlmpos(variablenthesaurus)>1THENputline(f,anwendungstext(singularmodellgroesse)+"n:");line(f);objekttexte(f,variablenthesaurus)FI.alleergaenzungsvariablen:IFanzahlmpos(ergebnisthesaurus)=1THENputline(f,anwendungstext(singularergebnis)+":");line(f);objekttexte(f,ergebnisthesaurus);line(f)ELIFanzahlmpos(ergebnisthesaurus)>1THENputline(f,anwendungstext(singularergebnis)+"n:");line(f);objekttexte(f,ergebnisthesaurus);line(f)FI.alleparameter:IFanzahlmpos(parameterthesaurus)>0THENputline(f,anwendungstext(singularparameter)+":");line(f);objekttexte(f,parameterthesaurus);line(f)FI.alleformeln:IFanzahlmpos(formelthesaurus)=1THENputline(f,anwendungstext(singularformel)+":");line(f);objekttexte(f,formelthesaurus);line(f)ELIFanzahlmpos(formelthesaurus)>1THENputline(f,anwendungstext(pluralformel)+":");line(f);objekttexte(f,formelthesaurus);line(f)FI.END PROCmodellinfo;PROCobjekttexte(FILE VARf,THESAURUS CONSTt):INT VARi:=0;MPOS VARmp;WHILEi<highestentry(t)REPgetmpos(t,mp,i);objekttext(f,mp)PER END PROCobjekttexte;FILE VARq;MPOS VARmp;INT VARdimensiondesmodells,codimensiondesmodells;PROCtransformierewirkungsdiagrammundstartesimulation(BOOL CONSTls,INT VARreturncode):DATASPACE VARmodellds,codeds;BOUND MODELLDGL VARtemporaeresmodell;INT VARinternerretcode:=0;schreibehinweis;initmodellds;initmodell;fuelletemporaeresmodell;versendemodellundstartesimulation(modellds,codeds,ls,internerretcode);IFiserrorTHENclearerror;returncode:=1ELSEreturncode:=internerretcode;FI.schreibehinweis:IF NOTlsTHENdoublefootnote(anwendungstext(bitteumgeduld))ELSEfootnote(anwendungstext(bitteumgeduld))FI.initmodellds:forget(modellds);modellds:=nilspace;.initmodell:temporaeresmodell:=modellds;nilmodell(temporaeresmodell).fuelletemporaeresmodell:erzeugequelltext(codeds);vthesaurus;ethesaurus;pthesaurus;modellmitdatenfuellen(temporaeresmodell,vnamenlang,vnamenkurz,enamenlang,enamenkurz,pnamen).vthesaurus:THESAURUS VARvnamenlang:=emptythesaurus,vnamenkurz:=emptythesaurus;INT VARi:=0;MPOS VARmp;WHILEi<highestentry(variablenthesaurus)REPgetmpos(variablenthesaurus,mp,i);insert(
+vnamenlang,langname(objekt(mp)));insert(vnamenkurz,kurzname(objekt(mp)))PER.ethesaurus:THESAURUS VARenamenlang:=emptythesaurus,enamenkurz:=emptythesaurus;i:=0;WHILEi<highestentry(ergebnisthesaurus)REPgetmpos(ergebnisthesaurus,mp,i);insert(enamenlang,langname(objekt(mp)));insert(enamenkurz,kurzname(objekt(mp)))PER.pthesaurus:THESAURUS VARpnamen:=emptythesaurus;i:=0;WHILEi<highestentry(parameterthesaurus)REPgetmpos(parameterthesaurus,mp,i);insert(pnamen,langname(objekt(mp)))PER.END PROCtransformierewirkungsdiagrammundstartesimulation;LETbtsimulationnichtmoeglichbittetaste=64,btwartenallgemein=44,btmodell=106;INT CONSTexistiertnicht:=-1,nichtempfangsbereit:=-2;PROCversendemodellundstartesimulation(DATASPACE VARmodellds,codeds,BOOL CONSTls,INT VARretcode):retcode:=0;TEXT VARo:="";DATASPACE VARtransportdsp,infodsp:=nilspace;disablestop;REPmodellbearbeiten;UNTILordnungsgemaessbeendetodertasknichtempfangsbereitPER;IFokTHEN ELSE IF NOTlsTHENpage;doublefootnote(anwendungstext(btsimulationnichtmoeglichbittetaste));clearbuffer;inchar(o);ELSE FI FI;forget(codeds);forget(modellds);.ok:retcode=0.ordnungsgemaessbeendetodertasknichtempfangsbereit:retcode<>simulationneustarten.bereiteinformationstextvor:FILE VARinfofile:=sequentialfile(output,infodsp);putline(infofile,anwendungstext(btmodell)+aktuellermodellname);putline(infofile,length(anwendungstext(btmodell)+aktuellermodellname)*"=");line(infofile);modellinfo(infofile);.modellbearbeiten:IFretcode=simulationneustartenTHENpage;footnote(anwendungstext(btwartenallgemein));FI;bereiteinformationstextvor;retcode:=0;schickemodelldaten;IFokTHENschickemodellinfos;IFokTHENstartesimulationFI;FI;forget(infodsp);continue(standardkanal);.schickemodelldaten:transportdsp:=modellds;schickezumanager(transportdsp,2,retcode);forget(transportdsp);.schickemodellinfos:transportdsp:=infodsp;schickezumanager(transportdsp,7,retcode);forget(transportdsp);.startesimulation:transportdsp:=codeds;break(quiet);schickezumanager(transportdsp,9,retcode);forget(transportdsp);.END PROCversendemodellundstartesimulation;PROCschickezumanager(DATASPACE VARdatenraum,INT CONSTverarbeitung,INT VARmesscode):INT CONSTeingabevomkanal:=-4;TASK VARmanagertask:=/terminaltaskname,kontrolltask:=/terminaltaskname;enablestop;REPkernvonschickezumanagerPER.kernvonschickezumanager:managertask:=kontrolltask;send(managertask,verarbeitung,datenraum,messcode);forget(datenraum);REP IFmesscode=existiertnichtTHENleaveschickezumanager;ELIFmesscode=nichtempfangsbereitTHENleaveschickezumanager;ELSEwarteaufquittungFI PER.warteaufquittung:managertask:=/terminaltaskname;wait(datenraum,messcode,managertask);forget(datenraum);IFquerschlaegersendungTHEN IFcontinueversuchTHENleaveschickezumanager;ELSE IFmesscode=eingabevomkanalTHEN REP UNTILincharety=""PER;forget(datenraum);FI;FI ELSEleaveschickezumanager;FI.querschlaegersendung:NOT(managertask=kontrolltask).continueversuch:managertask=supervisorAND((task(messcodeMOD100)=niltask)OR(task(messcodeMOD100)=myself)).leaveschickezumanager:LEAVEschickezumanager;END PROCschickezumanager;PROCerzeugequelltext(DATASPACE VARds):ds:=nilspace;q:=sequentialfile(output,ds);erzeugedgl;erzeugeegl;erzeugepseudozusatzdarstellung;END PROCerzeugequelltext;PROCerzeugedgl:dimensiondesmodells:=anzahlvariablen;schreibeprozedurkopffuerdgl;schreibeprozedurrumpffuerdgl;schreibeprozedurfussfuerdgl;.schreibeprozedurkopffuerdgl:putline(q,anwendungstext(prozedurdeklarationfuerdgl)).schreibeprozedurrumpffuerdgl:deklariereundinitialisierestartwerte;deklariereundinitialisiereparameter;berechnedifferentialquotienten;listerefinementsfuerformeln.schreibeprozedurfussfuerdgl:putline(q,anwendungstext(prozedurfussfuerdgl)).berechnedifferentialquotienten:INT VARi:=0,j:=0;TEXT VARzeile:=anwendungstext(dquotientdeklaration)+text(dimensiondesmodells)+");";;putline(q,zeile);WHILEi<highestentry(variablenthesaurus)REPjINCR1;getmpos(variablenthesaurus,mp,i);zeile:=replacestatement+text(j)+","+summedereinlaufendenpfeile+");";putline(q,zeile);PER;putline(q,
+ergebniszeile);.replacestatement:anwendungstext(replacefuerzustand).ergebniszeile:anwendungstext(dquotientliefern).END PROCerzeugedgl;PROCerzeugeegl:codimensiondesmodells:=anzahlergaenzungsvariablen;schreibeprozedurkopffueregl;schreibeprozedurrumpffueregl;schreibeprozedurfussfueregl.schreibeprozedurkopffueregl:putline(q,anwendungstext(prozedurdeklarationfueregl)).schreibeprozedurrumpffueregl:deklariereundinitialisierestartwerte;deklariereundinitialisiereparameter;deklariereundberechneergebnisse;listerefinementsfuerformeln.schreibeprozedurfussfueregl:putline(q,anwendungstext(prozedurfussfueregl)).deklariereundberechneergebnisse:INT VARi:=0,j:=0;TEXT VARzeile:=anwendungstext(evektor)+text(codimensiondesmodells)+");";putline(q,zeile);WHILEi<highestentry(ergebnisthesaurus)REPjINCR1;getmpos(ergebnisthesaurus,mp,i);zeile:=replacestatement+text(j)+","+summedereinlaufendenpfeile+");";putline(q,zeile);PER;putline(q,ergebniszeile);.replacestatement:anwendungstext(replacefuerergebnis).ergebniszeile:anwendungstext(evektorliefern).END PROCerzeugeegl;PROCerzeugepseudozusatzdarstellung:putline(q,anwendungstext(prozedurkopfzusatzdarst));putline(q,anwendungstext(prozedurfusszusatzdarst))END PROCerzeugepseudozusatzdarstellung;PROCdeklariereundinitialisierestartwerte:INT VARi:=0,j:=0;TEXT VARzeile:=anwendungstext(realconst);WHILEi<highestentry(variablenthesaurus)REPjINCR1;getmpos(variablenthesaurus,mp,i);zeileCATelanname(objekt(mp));zeileCAT"::";zeileCAT(anwendungstext(startwert)+"SUB"+text(j)+",")PER;IFvariablenvorhandenTHENreplace(zeile,LENGTHzeile,";");putline(q,zeile)FI.variablenvorhanden:j>0.END PROCdeklariereundinitialisierestartwerte;PROCdeklariereundinitialisiereparameter:INT VARi:=0,j:=0;TEXT VARzeile:=anwendungstext(realconst);WHILEi<highestentry(parameterthesaurus)REPjINCR1;getmpos(parameterthesaurus,mp,i);zeileCATelanname(objekt(mp));zeileCAT"::";zeileCAT(anwendungstext(parameter)+"SUB"+text(j)+",");PER;IFparametervorhandenTHENreplace(zeile,LENGTHzeile,";");putline(q,zeile)FI.parametervorhanden:j>0.END PROCdeklariereundinitialisiereparameter;PROClisterefinementsfuerformeln:INT VARi:=0;WHILEi<highestentry(formelthesaurus)REPgetmpos(formelthesaurus,mp,i);putline(q,elanname(objekt(mp))+":"+ausdruck(objekt(mp))+".")PER END PROClisterefinementsfuerformeln;TEXT PROCsummedereinlaufendenpfeile:INT VARk;TEXT VARsumme:="";FORkFROM1UPTOmaxlinkREP IF(cell(mp)EINGANGk)THENsummeCATelanname(objekt(cell(mp)UEBERk))+"+"FI PER;IFlength(summe)>0THENreplace(summe,length(summe)," ");ELSEsumme:=nullFI;summeEND PROCsummedereinlaufendenpfeile;INT PROCanzahlvariablen:anzahlmpos(variablenthesaurus)END PROCanzahlvariablen;INT PROCanzahlergaenzungsvariablen:anzahlmpos(ergebnisthesaurus)END PROCanzahlergaenzungsvariablen;END PACKETdiagrammpraesentation1;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls kombination b/app/schulis-simulationssystem/3.0/src/ls kombination
new file mode 100644
index 0000000..c2b8162
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls kombination
@@ -0,0 +1,3 @@
+PACKETlskombinationDEFINESzeigekombiniertedarstellung:LETsendetaste="p",abbruchtaste="m",outputkombination=" kombination",blaettern="b",blaetternoben="o",blaetternunten="u",mitzeitdiagramm=1,mitphasen=2,mittabelle=3,mithistogramm=4;LETdruckdateitab=" tabelle.p",erzeugtetabelle=" tabelle",steuerlgraphiktabelle=24,steuerlgraphikgraphik=25,steuerleistetabelle=28,steuerleistewarten=31,scrollsp1=16,scrollzeile1=3,scrollbreitetab=15;TEXT CONSTscrollausstiegohnedrucken:="m"+sendetaste;LETstrukt2diagramme1text=3,strukttabelleunten=5,strukttabelleoben=6,fensterdummy=0,fensteroben=2,fensterunten=3,fensterlinksoben=4,fensterlinksunten=5,fensterrechtsoben=6,fensterrechtsunten=7,fensterrechts=8;TEXT CONSTsendenundblaettern:=sendetaste+blaettern,sendenblaetternobenundunten:=sendetaste+blaetternoben+blaetternunten;INT VARsteuerzeilenschluessel,kopfzeilenschluessel;PROCzeigekombiniertedarstellung(TEXT VARtaste,LOESUNG VARloesung,INT CONSTdarstellung1,INT CONSTdarstellung2,ZUSTAND VARmuster1,muster2):OUTPUT VARbskombination;KURVE VARhilfskurve:=LOESUNGSABSCHNITTloesung;TEXT VARtastenraus:=abbruchtaste;IFdarstellung1=mittabelleTHENzeigekombinationtabelle(taste,loesung,darstellung2,muster1,muster2);ELSEzeigeanderedarstellungenFI;.zeigeanderedarstellungen:IFdarstellung2=mitzeitdiagrammCORdarstellung2=mithistogrammTHENkombinieremitzeitdiagrammoderhistogrammELIF(codimension+dimension>=2)CANDmitphasendiagrammCAND(darstellung2=mitphasen)THENkombinieremitphasendiagrammELIFdarstellung2=mittabelleTHENkombinieremittabelleFI.leavezeigekombiniertedarstellung:forget(outputkombination,quiet);LEAVEzeigekombiniertedarstellung.kombinieremitphasendiagramm:bskombination:=niloutput(strukt2diagramme1text,outputkombination);replace(bskombination,fensterrechts,modellwerteausgeben(loesung));kopfzeilenschluessel:=5;steuerzeilenschluessel:=steuerlgraphikgraphik;SELECTdarstellung1OF CASE1:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,muster2,fensterlinksoben,fensterlinksunten,kopfzeilenschluessel,steuerzeilenschluessel,sendenundblaettern,tastenraus,taste,PROCcoroutinezeit,PROCcoroutinephase)CASE2:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,muster2,fensterlinksoben,fensterlinksunten,kopfzeilenschluessel,steuerzeilenschluessel,sendenundblaettern,tastenraus,taste,PROCcoroutinephase,PROCcoroutinephase)CASE4:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,muster2,fensterlinksoben,fensterlinksunten,kopfzeilenschluessel,steuerzeilenschluessel,sendenundblaettern,tastenraus,taste,PROCcoroutinehisto,PROCcoroutinephase)ENDSELECT.kombinieremittabelle:FILE VARtabaktuell:=tabelle(hilfskurve,muster2,TRUE);bskombination:=niloutput(strukttabelleunten,outputkombination);replace(bskombination,fensterunten,tabaktuell);replace(bskombination,fensterrechtsoben,modellwerteausgeben(loesung));kopfzeilenschluessel:=5;steuerzeilenschluessel:=steuerlgraphiktabelle;SELECTdarstellung1OF CASE1:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,neuerzustand(dimension+codimension),fensterlinksoben,fensterdummy,kopfzeilenschluessel,steuerzeilenschluessel,sendenblaetternobenundunten,tastenraus,taste,PROCcoroutinezeit,PROCcoroutinedummy)CASE2:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,neuerzustand(dimension+codimension),fensterlinksoben,fensterdummy,kopfzeilenschluessel,steuerzeilenschluessel,sendenblaetternobenundunten,tastenraus,taste,PROCcoroutinephase,PROCcoroutinedummy)CASE4:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,neuerzustand(dimension+codimension),fensterlinksoben,fensterdummy,kopfzeilenschluessel,steuerzeilenschluessel,sendenblaetternobenundunten,tastenraus,taste,PROCcoroutinehisto,PROCcoroutinedummy)ENDSELECT.kombinieremitzeitdiagrammoderhistogramm:bskombination:=niloutput(strukt2diagramme1text,outputkombination);replace(bskombination,fensterrechts,modellwerteausgeben(loesung));kopfzeilenschluessel:=5;steuerzeilenschluessel:=steuerlgraphikgraphik;IFdarstellung2=mitzeitdiagrammTHEN SELECTdarstellung1
+OF CASE1:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,muster2,fensterlinksoben,fensterlinksunten,kopfzeilenschluessel,steuerzeilenschluessel,sendenundblaettern,tastenraus,taste,PROCcoroutinezeit,PROCcoroutinezeit)CASE2:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,muster2,fensterlinksoben,fensterlinksunten,kopfzeilenschluessel,steuerzeilenschluessel,sendenundblaettern,tastenraus,taste,PROCcoroutinephase,PROCcoroutinezeit)CASE4:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,muster2,fensterlinksoben,fensterlinksunten,kopfzeilenschluessel,steuerzeilenschluessel,sendenundblaettern,tastenraus,taste,PROCcoroutinehisto,PROCcoroutinezeit)ENDSELECT;ELSE SELECTdarstellung1OF CASE1:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,muster2,fensterlinksoben,fensterlinksunten,kopfzeilenschluessel,steuerzeilenschluessel,sendenundblaettern,tastenraus,taste,PROCcoroutinezeit,PROCcoroutinehisto)CASE2:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,muster2,fensterlinksoben,fensterlinksunten,kopfzeilenschluessel,steuerzeilenschluessel,sendenundblaettern,tastenraus,taste,PROCcoroutinephase,PROCcoroutinehisto)CASE4:steuerprozessfuereineloesung(bskombination,hilfskurve,muster1,muster2,fensterlinksoben,fensterlinksunten,kopfzeilenschluessel,steuerzeilenschluessel,sendenundblaettern,tastenraus,taste,PROCcoroutinehisto,PROCcoroutinehisto)ENDSELECT;FI.END PROCzeigekombiniertedarstellung;PROCzeigekombinationtabelle(TEXT VARtaste,LOESUNG VARloesung,INT CONSTdarstellung2,ZUSTAND VARmuster1,muster2):OUTPUT VARbskombination;KURVE VARhilfskurve:=LOESUNGSABSCHNITTloesung;TEXT CONSTtastenraus:=abbruchtaste;IFdarstellung2=mitzeitdiagrammCORdarstellung2=mithistogrammTHENkombinieremitdiagrammELIF(codimension+dimension>=2)CANDmitphasendiagrammCANDdarstellung2=mitphasenTHENkombinieremitphasendiagrammELIFdarstellung2=mittabelleTHENkombinieremittabelleFI.kombinieremitphasendiagramm:bskombination:=niloutput(strukttabelleoben,outputkombination);replace(bskombination,fensteroben,tabelle(hilfskurve,muster1,TRUE));replace(bskombination,fensterrechtsunten,modellwerteausgeben(loesung));kopfzeilenschluessel:=5;steuerzeilenschluessel:=steuerlgraphiktabelle;steuerprozessfuereineloesung(bskombination,hilfskurve,muster2,neuerzustand(dimension+codimension),fensterlinksunten,fensterdummy,kopfzeilenschluessel,steuerzeilenschluessel,sendenblaetternobenundunten,tastenraus,taste,PROCcoroutinephase,PROCcoroutinedummy).kombinieremittabelle:FILE VARtbl:=tabelle(hilfskurve,muster1,TRUE);WINDOW VARtabwindow:=grossesrahmenfenster;INT VARerstersatz1:=3,erstespalte1:=scrollsp1;forget(druckdateitab,quiet);rename(erzeugtetabelle,druckdateitab);outframe(tabwindow);footnote(steuerleiste(steuerleistetabelle));scroll(tabwindow,druckdateitab,scrollsp1,scrollzeile1,scrollbreitetab,erstersatz1,erstespalte1,scrollausstiegohnedrucken,taste);erase(tabwindow);.kombinieremitdiagramm:bskombination:=niloutput(strukttabelleoben,outputkombination);replace(bskombination,fensteroben,tabelle(hilfskurve,muster1,TRUE));replace(bskombination,fensterrechtsunten,modellwerteausgeben(loesung));kopfzeilenschluessel:=5;steuerzeilenschluessel:=steuerlgraphiktabelle;IFdarstellung2=mitzeitdiagrammTHENsteuerprozessfuereineloesung(bskombination,hilfskurve,muster2,neuerzustand(dimension+codimension),fensterlinksunten,fensterdummy,kopfzeilenschluessel,steuerzeilenschluessel,sendenblaetternobenundunten,tastenraus,taste,PROCcoroutinezeit,PROCcoroutinedummy)ELSEsteuerprozessfuereineloesung(bskombination,hilfskurve,muster2,neuerzustand(dimension+codimension),fensterlinksunten,fensterdummy,kopfzeilenschluessel,steuerzeilenschluessel,sendenblaetternobenundunten,tastenraus,taste,PROCcoroutinehisto,PROCcoroutinedummy)FI.END PROCzeigekombinationtabelle;END PACKETlskombination;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls simsel.masken b/app/schulis-simulationssystem/3.0/src/ls simsel.masken
new file mode 100644
index 0000000..e343284
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls simsel.masken
@@ -0,0 +1,4 @@
+PACKETsimselmaskenDEFINES TAG,:=,nil,tagsankoppeln,formular,show,put,get,putget,leavingcode,fieldexists,cursor,fieldinfos,setfieldinfos:LETbeginmark="",endmark="",chop=1,chome=1,cvor=2,cfeldende=18,crueck=8,cfeldanf=20,choch=3,cfeldrueck=19,crunter=10,ctab=9,csettab=21,ceinf=11,caufbrech=22,causf=12,clearn=26,cfeldvor=13,cloeschende=24,cmark=16,cneu=17,cesc=27,cseiterueck=15,cseitevor=14;LETright="�",left="�",home="�";LETsimseltask="ls-MENUKARTEN",error=1110,sendetags=1120;INITFLAG VARinthistask:=FALSE;TEXT VARabc:="";INT VARi;FORiFROM33UPTO126REPabcCATcode(i);PER;FORiFROM214UPTO222REPabcCATcode(i);PER;abcCATcode(251);LEThoptasten="?aouAOUBb§</>(!)-k'= #",hopcodes="�äöüÄÖÜßßß[\]{|}­k^~ \#";LETtaglines=24,maxfields=100;BOOL VARbeimletztenrausfallen:=FALSE;BOOL VARclosedbit,protectbit,darstbit,tabbit,leftbit,exitbit,rollbit,normal:=TRUE;INT VARworkint;PROCxoutsubtext(TEXT CONSTwas,INT CONSTvon,bis):out(subtext(was,von,bis))END PROCxoutsubtext;TYPE TAG=STRUCT(TEXTerstel,darst,diainfo,dbnam,ausknam,feld,x,y,len,tab,ROWtaglinesTEXTformblatt,INTxmax,ymax,xs,ys,dbp,ver,durchs,art);OP:=(TAG VARa,TAG CONSTb):CONCR(a):=CONCR(b)END OP:=;PROCnil(TAG VARt):t.formblatt:=ROWtaglinesTEXT:("","","","","","","","","","","","","","","","","","","","","","","","");t.xmax:=0;t.ymax:=0;t.xs:=1;t.ys:=1;t.dbp:=0;t.ver:=1;t.durchs:=0;t.art:=0;t.darst:="";t.erstel:="";t.diainfo:="";t.dbnam:="";t.ausknam:="";t.feld:="";t.x:="";t.y:="";t.tab:="";t.len:="";END PROCnil;BOOL PROCfieldexists(TAG CONSTa,INT CONSTfeldnr):(a.erstelVSUBfeldnr)>0END PROCfieldexists;PROCsetinfo(TEXT CONSTstring,INT CONSTpos):workint:=stringVSUBpos;IFworkint>0THENsetallvaluesELSEnormal:=TRUE FI.setallvalues:closedbit:=hbit;protectbit:=hbit;darstbit:=hbit;tabbit:=hbit;leftbit:=hbit;exitbit:=hbit;rollbit:=hbit;normal:=FALSE.hbit:workint:=workint*2;IFworkint>255THENworkintDECR256;TRUE ELSE FALSE FI.END PROCsetinfo;PROCfieldinfos(TAG CONSTt,INT CONSTfeld,INT VARgeheimcode,BOOL VARclosed,protected,secret,special,left):geheimcode:=code(t.darstSUBfeld);setinfo(t.diainfo,feld);IFnormalTHENclosed:=FALSE;protected:=FALSE;secret:=FALSE;special:=FALSE;left:=FALSE;ELSEclosed:=closedbit;protected:=protectbit;secret:=darstbit;special:=tabbit;left:=leftbit;FI END PROCfieldinfos;PROCsetfieldinfos(TAG VARt,INT CONSTfeld,BOOL CONSTclosed,protected,secret):INT VARcd:=(t.diainfoVSUBfeld)MOD32;IFsecretTHENcdINCR32FI;IFprotectedTHENcdINCR64FI;IFclosedTHENcdINCR128FI;replaceiac(t.diainfo,feld,code(cd))END PROCsetfieldinfos;INT VARafeld,ax,ay,al,ael,tlen,tout;PROCeput(TAG CONSTff,TEXT CONSTt,INT CONSTelfeld):eput(ff,t,elfeld,1)END PROCeput;PROCeput(TAG CONSTff,TEXT CONSTt,INT CONSTelfeld,INT CONSTabwo):zumerstenelementarfeld;WHILEnochgenugtextdaREPfuelleelementarfeld;elementarfeldweiterzaehlen;IFgehoertzumnaechstenfeldTHEN LEAVEeputFI;zumelementarfeld;PER;gibrestaus;REPelementarfeldweiterzaehlen;IFgehoertzumnaechstenfeldTHEN LEAVEeputFI;zumelementarfeld;gibhintergrundausPER.zumerstenelementarfeld:tlen:=LENGTHt;tout:=abwo-1;afeld:=ff.feldVSUBelfeld;ael:=elfeld;positionieren(ff).fuelleelementarfeld:xoutsubtext(t,tout+1,tout+al);toutINCRal.nochgenugtextda:tout+al<tlen.elementarfeldweiterzaehlen:aelINCR1.zumelementarfeld:positionieren(ff).gehoertzumnaechstenfeld:(ff.feldVSUBael)<>afeld.gibrestaus:xoutsubtext(t,tout+1,tlen);IFtout+al>tlenTHENxoutsubtext(grund,ax+tlen-tout,ax+al-1)FI.gibhintergrundaus:xoutsubtext(grund,ax,ax+al-1).grund:ff.formblatt(ay).END PROCeput;PROCpositionieren(TAG CONSTff):al:=ff.lenVSUBael;ax:=ff.xVSUBael;ay:=ff.yVSUBael;cursor(ax,ay).END PROCpositionieren;PROCcursor(TAG CONSTff,INT CONSTfeld):ael:=ff.erstelVSUBfeld;positionieren(ff)END PROCcursor;INT PROClength(TAG CONSTff,INT CONSTfeld):zumerstenelementarfeld;IFael<1THEN LEAVElengthWITH0FI;INT VARlen:=0;REPlenINCRfeldlaenge;zumnaechstenelementarfeld;UNTILgehoertzumnaechstenfeldPER;len.zumerstenelementarfeld:ael:=ff.erstelVSUBfeld.zumnaechstenelementarfeld:aelINCR1.gehoertzumnaechstenfeld:(ff.feldVSUBael)<>feld.feldlaenge:ff.lenVSUBael
+.END PROClength;PROCshow(TAG CONSTff):INT VARi;out(home);out(ff.formblatt(1));FORiFROM2UPTOff.ymaxREPline;out(ff.formblatt(i))PER.END PROCshow;INT VARcharcode:=0,lastx,lasty;PROCtranslatecode:charcode:=code(char);SELECTcharcodeOF CASEchop:charcode:=chomeCASEcvor:charcode:=cfeldendeCASEcrueck:charcode:=cfeldanfCASEchoch:charcode:=cseiterueckCASEcrunter:charcode:=cseitevorCASEctab:charcode:=csettabCASEceinf:charcode:=caufbrechCASEcausf:charcode:=cloeschendeCASEcfeldvor:charcode:=cfeldrueckCASEcmark:charcode:=cneuCASEcesc:charcode:=clearnOTHERWISEcharcode:=pos(hoptasten,char);IFcharcode=0THEN IFischarTHEN FI ELSEchar:=hopcodesSUBcharcode;charcode:=code(char)FI END SELECT END PROCtranslatecode;TEXT VARchar;BOOL PROCischar:inchar(char);charcode:=code(char);IFcharcode>31THEN TRUE ELIFcharcode=chopTHENinchar(char);translatecode;charcode>31ELSE FALSE FI END PROCischar;INT VARaktbegin,aktfeld,aktline,aktlen,aktanf,aktel,wo;PROCsetfieldvalues(TAG CONSTta):aktlen:=ta.lenVSUBaktel;aktanf:=ta.xVSUBaktel;aktline:=ta.yVSUBaktelEND PROCsetfieldvalues;INT VARnextfeld,nextel,nextwo,nextbegin;PROCsetlasteditvalues:preset:=TRUE END PROCsetlasteditvalues;PROCsetneweditvalues:aktfeld:=nextfeld;aktbegin:=nextbegin;aktel:=nextel;wo:=nextwo;preset:=TRUE END PROCsetneweditvalues;BOOL VARpreset:=FALSE;PROCsearchfield(TAG CONSTt,INT CONSTx,y,BOOL VARerfolg):erfolg:=FALSE;nextel:=0;REPsucheelementinrichtigerzeileUNTILkeinsmehrdaCORxposstimmtPER;IFerfolgTHENnextfeld:=t.feldVSUBnextel;nextbegin:=1;INT VARi:=t.erstelVSUBnextfeld;WHILEi<nextelREPnextbeginINCR(t.lenVSUBi);iINCR1PER;nextwo:=nextbegin+x-anfangFI.sucheelementinrichtigerzeile:nextel:=pos(t.y,code(y),nextel+1).keinsmehrda:nextel=0.xposstimmt:erfolg:=anfang<=xANDende>x;erfolg.anfang:t.xVSUBnextel.ende:(t.xVSUBnextel)+(t.lenVSUBnextel).END PROCsearchfield;PROCput(TAG CONSTff,TEXT CONSTv,INT CONSTfeld):setinfo(ff.diainfo,feld);INT VARerstelem:=ff.erstelVSUBfeld;IFerstelem>0THEN IFnormalCOR NOTdarstbitTHENeput(ff,v,erstelem)ELSEeput(ff,LENGTHv*(ff.darstSUBfeld),erstelem)FI FI END PROCput;INT PROCleavingcode:charcodeEND PROCleavingcode;PROCputget(TAG CONSTff,ROWmaxfieldsTEXT VARv,INT VAReinstieg,TEXT VARtaste):put(ff,v);get(ff,v,einstieg,taste)END PROCputget;PROCput(TAG CONSTff,ROWmaxfieldsTEXT VARfieldvalues):INT VARiFORiFROM1UPTO LENGTHff.erstelREP IFfieldexists(ff,i)THENput(ff,fieldvalues(i),i)FI PER END PROCput;PROCget(TAG CONSTff,TEXT VAReingabe,INT CONSTfeld,TEXT VARexittaste):setinfo(ff.diainfo,feld);editieren.editieren:cursor(ff,feld);getcursor(lastx,lasty);out(beginmark);cursor(lastx,lasty);editget(eingabe,length(eingabe),length(ff,feld),code(cfeldvor)+code(choch)+code(crunter),abc+right+left,exittaste);out(endmark);cursor(lastx,lasty);put(ff,eingabe,feld);IFlength(exittaste)>1THENexittaste:=subtext(exittaste,2,2);FI.END PROCget;PROCputget(TAG CONSTff,TEXT VAReingabe,INT CONSTfeld,TEXT VARtaste):get(ff,eingabe,feld,taste)END PROCputget;PROCget(TAG CONSTff,ROWmaxfieldsTEXT VARfieldvalues,INT VARfeld,TEXT VARtaste):TEXT VARexittaste:="";INT VARaltesfeld;IF NOTfieldexists(ff,feld)THENerrorstop("startfeld nicht im tag")ELSE REPEATaltesfeld:=feld;setinfo(ff.diainfo,feld);IF NOTgeschuetztTHENeingabefeldELSEgeschuetztesfeldFI;charcode:=code(subtext(exittaste,1,1));IFcharcode=ctabTHENcharcode:=cfeldrueckELIFcharcode=cescTHEN IFsubtext(exittaste,2,2)=leftTHENcharcode:=cfeldrueckELIFsubtext(exittaste,2,2)=rightTHENcharcode:=cfeldvorFI;FI;executecommandcode(ff,feld);IFfeld=1THENfeld:=2FI;UNTILcharcode=cescPER;FI;.geschuetzt:INT VARgeheim;BOOL VARcl,protect,s,sp,l;fieldinfos(ff,feld,geheim,cl,protect,s,sp,l);protect.ankreuzen:cl.geschuetztesfeld:cursor(ff,feld);getcursor(lastx,lasty);REPinchar(exittaste)UNTILexittaste="�"PER;inchar(taste);.eingabefeld:cursor(ff,feld);getcursor(lastx,lasty);out(beginmark);cursor(lastx,lasty);editget(fieldvalues(feld),length(fieldvalues(feld)),length(ff,feld),code(cfeldvor)+code(choch)+code(crunter),abc+right+left,exittaste);out(endmark);IFankreuzenTHENankreuzfeldbehandlung;
+FI;cursor(lastx,lasty);put(ff,fieldvalues(feld),feld);IFlength(exittaste)>1THENtaste:=subtext(exittaste,2,2);FI;.ankreuzfeldbehandlung:IFlength(fieldvalues(feld))>0THENfieldvalues(feld):=subtext(fieldvalues(feld),1,1)ELSEfieldvalues(feld):="_"FI;IFpos("_ ",fieldvalues(feld))>0THENfieldvalues(feld):="_"ELSEfieldvalues(feld):="X"FI;.END PROCget;PROCexecutecommandcode(TAG CONSTff,INT VARfeld):SELECTcharcodeOF CASEcfeldrueck:topriorfieldCASEcfeldvor:tonextfieldCASEchoch:goupifpossibleCASEcrunter:godownifpossibleCASEchome:tohomefieldCASEctab:setlasteditvaluesEND SELECT.topriorfield:REPEATfeld:=priorfield(ff,feld)UNTILwarerstesCORnichtgesperrtPER;IFwarerstesTHENtohomefieldFI.tonextfield:INT VARoldfeld:=feld;REPfeld:=nextfield(ff,feld)UNTILwarletztesCORnichtgesperrtPER;IFwarletztesTHENfeld:=oldfeld;IFbeimletztenrausfallenTHENcharcode:=cesc;beimletztenrausfallen:=FALSE FI FI.tohomefield:feld:=firstfield(ff);WHILEgesperrtREPfeld:=nextfield(ff,feld)PER.goupifpossible:BOOL VARerfolg;searchfield(ff,lastx,lasty-1,erfolg);IFerfolgANDnextnichtgesperrtTHENsetneweditvalues;feld:=nextfeldELSEsetlasteditvaluesFI.godownifpossible:searchfield(ff,lastx,lasty+1,erfolg);IFerfolgANDnextnichtgesperrtTHENsetneweditvalues;feld:=nextfeldELSEsetlasteditvaluesFI.nichtgesperrt:INT VARgeheim;BOOL VARcl,protect,s,sp,l;fieldinfos(ff,feld,geheim,cl,protect,s,sp,l);NOTprotect.nextnichtgesperrt:fieldinfos(ff,nextfeld,geheim,cl,protect,s,sp,l);NOTprotect.gesperrt:NOTnichtgesperrt.warletztes:feld<1.warerstes:feld<1.END PROCexecutecommandcode;INT PROCfirstfield(TAG CONSTt):t.feldVSUB1END PROCfirstfield;INT PROCnextfield(TAG CONSTt,INT CONSTfeld):INT VARel:=(t.erstelVSUBfeld)+1;WHILE(t.feldVSUBel)=feldREPelINCR1PER;t.feldVSUBelEND PROCnextfield;INT PROCpriorfield(TAG CONSTt,INT CONSTfeld):t.feldVSUB((t.erstelVSUBfeld)-1)END PROCpriorfield;LETmaxtags=20,dsname="simsel formulare";BOUND ROWmaxtagsTAG VARsimselformulare;PROCtagsankoppeln:IF NOTinitialized(inthistask)THEN IF NOTexists(dsname)THEN IF NOTexists(dsname,/simseltask)THENerrorstop("TAGs fehlen!")ELSEfetch(dsname,/simseltask);kopplean;FI;ELSEkopplean;FI;FI;.kopplean:DATASPACE VARtagds:=old(dsname);simselformulare:=tagds;forget(dsname,quiet);.END PROCtagsankoppeln;TAG PROCformular(INT CONSTi):IFi>maxtagsTHENerrorstop("So viele TAGs gibt es nicht: "+text(i))FI;simselformulare(i)END PROCformular;END PACKETsimselmasken;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls simselstarter b/app/schulis-simulationssystem/3.0/src/ls simselstarter
new file mode 100644
index 0000000..9a56405
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls simselstarter
@@ -0,0 +1,11 @@
+PACKETlssimselDEFINESmodellnamenderbank,startoperationen,initbankmenu,initmodellmenu,deactivatemodellfkt,bankenauflisten,initialisierebank,ladebanken,sicherebanken,loeschebanken,modelleauflisten,bankzumarbeitenwaehlen,modellwaehlen,modellbearbeiten,modellerzeugen,modellveraendern,wirkungsdiagrammerzeugen,modellkopieren,modellloeschen,modellinformationen:LETstandardkanal=1;WINDOW VARfsingle:=grossesrahmenfenster;WINDOW VARfshow:=scrollfenster;LETsinglesp1=1,zl1=4,singlebr=78,hoe=19,scrollzeile=3;LETmodellbanktyp=1199,typnrwdausfuehrbar=1207,letztemenuwindowzeile=19,erstezeile=3,erstespalte=1,scrollbreite=0,ls=TRUE,negativemld=FALSE,modellbankdialog=2,ok=0,simulationneustarten=10,floppyname="simselmodelle",return=" ",abbruch="m",showverlasszeichen="m",nichtdefiniert="",stleistefileverlassen=28,fktbankinitial=1,fktbankladen=2,fktbanksichern=3,fktbankloeschen=4,fktbankinhaltzeigen=7,fktbankwaehlen=1,fktmodellbearbeiten=3,fktmodellerfassen=4,fktwirkdgerfassen=5,fktmodellaendern=6,fktmodellkopieren=7,fktmodellloeschen=8,fktmodelleauflisten=10,fktmodellinfos=12;LETbtueberschriftloeschen=1,btbanknameneingeben=2,btbankengeloescht=4,btkeinebankzumarbeiten=6,btkeinebankenenthalten=7,btkeingueltigerbankname=8,btbankeingerichtet=9,btkeinebankgeloescht=10,btkeinebankgewaehlt=11,btkeinmodellinbank=12,btbankgewaehlt=13,btbittemodellbankdiskette=14,btwartenformatieren=16,btbittedisketteeinlegen=18,btaufdiskueberschreiben=19,btbankenschreiben=20,btdiskettevoll=21,btbankgesichert=22,btsicherungabgebrochen=23,btwartenbeisichern=24,btintaskueberschreiben=25,btnichtueberschriebenladen=26,btwartenbeipruefen=27,btarchivnichtfrei=28,btkannnichtgesichert=29,btbankenladen=30,btwartenbeiladen=31,btmodellveraendertabgelegt=32,btkannnichtgeladen=33,btladenfehlerhaft=34,btbankgeladen=35,btkeinmodellgewaehlt=36,btkeinmodellgeloescht=37,btmodellgeloescht=38,btmodellnichtabgelegt=39,btmodellabgelegt=40,btsimulationbeendet=41,btmodellunveraendertabgelegt=42,btfragemodellloeschen=43,btwartenallgemein=44,btmodellnichtablauffaehig1=45,btmodellnichtablauffaehig2=46,btmodellnichtablauffaehig3=47,btmodellnichtablauffaehig4=48,btmodellnichtablauffaehig5=49,btmodellablauffaehig=105,btmodell=106,btmodellverzeichnis=50,btfrageloeschen=51,btbankexistiert=52,btdateiexistiert=104,btbanknamezulang=53,btmodellbankenverzeichnis=54,btnichtueberschriebensichern=55,btbanknichtgeladen=56,btueberschriftsicherungsaltn=58,btsicherungsalternativen=59,btsimulationunmoeglich=63,bteinrichtenabgebrochen=66,btbitte1bankwaehlen=67,btbittemodellwaehlen=68,btdisketteeinlundweiter=71,btverzeichnisaufarchiv=72,btbittegewuenschtebanken=73,btladevorgangabgebrochen=74,btformatwahlueberschrift=75,btformatwahlbeschreibung=76,btformatwahlbuchstaben=77,btkeinformatgewaehlt=78,btbankevtgeloescht1=79,btbankevtgeloescht2=80,btbankenimsystemwaehlen=81,btbankenankreuzensichern=82,btbankenankreuzenloeschen=83,btbankloeschenabgebrochen=84,btmodellbankvolldgl=85,btmodellbankvollwd=86,maxmodelle=40,maxdglmodelle=20,maxwdmodelle=20,maxnamenlaengeselbsterfasstebank=40,maxmusslaengebankname=50;LETcleararchiv=1,allarchiv=2,schreiben=3,loeschen=4,ladenhauptds=5,laden=6,formatarchiv=7;LETmenuformatieren=2,menuclear=3,menusichern=1,menusichernabbrechen=5;LETmodellcodeds=" code info ds",originalkurve=" originalkurve ds",vergleichskurve=" vergleichskurve ds";INT CONSTexistiertnicht:=-1,nichtempfangsbereit:=-2;INT VARi,anzahldermodelle:=0,anzahlbankenintask:=0;THESAURUS VARbankenintask;WINDOW VARaktuelleswindow;BOOL VARsubmenuvorprozedurausfuehren:=FALSE,submenuaufgeklappt:=FALSE;TEXT VARletztebank:="";PROCstartoperationen:texteankoppeln;tagsankoppeln;letztebank:="";submenuaufgeklappt:=FALSE;submenuvorprozedurausfuehren:=TRUE;initmodellmenu;submenuaufgeklappt:=TRUE;submenuvorprozedurausfuehren:=FALSE;END PROCstartoperationen;PROCinitmodellmenu:IFsubmenuvorprozedurausfuehrenTHENloescheaktuellemeldung;taskstatusbzgbanken;letztebank:="";activatemodellfkt;FI;IF NOTbankintaskANDsubmenuaufgeklapptTHENzeigemeldung(
+anwendungstext(btkeinebankzumarbeiten),negativemld,modellbankdialog)FI;submenuvorprozedurausfuehren:=TRUE END PROCinitmodellmenu;PROCinitbankmenu:loescheaktuellemeldung;activatebankfktEND PROCinitbankmenu;PROCactivatemodellfkt:INT VARveraenderbare,ablauffaehige;IFbankintaskTHENactivate(fktbankwaehlen);ELSEdeactivate(fktbankwaehlen);FI;IFletztebank=""THENdeactivatemodellfkt;ELSEactivaterestlichefkt;FI;.activaterestlichefkt:listedermodelle(veraenderbare,ablauffaehige);activate(fktmodelleauflisten);IFmodellbankvolldglTHENdeactivate(fktmodellerfassen)ELSEactivate(fktmodellerfassen);FI;IFmodellbankvollwdTHENdeactivate(fktwirkdgerfassen);ELSEactivate(fktwirkdgerfassen);FI;IFanzahldglmodelle+anzahlwdmodelle>=1THENactivate(fktmodellinfos);ELSEdeactivate(fktmodellinfos);FI;IFablauffaehige>=1THENactivate(fktmodellbearbeiten);ELSEdeactivate(fktmodellbearbeiten);FI;IFveraenderbare>=1THENactivate(fktmodellaendern);activate(fktmodellloeschen);ELSEdeactivate(fktmodellaendern);deactivate(fktmodellloeschen);FI;IFveraenderbare>=1CAND(NOTmodellbankvoll)THENactivate(fktmodellkopieren);ELSEdeactivate(fktmodellkopieren);FI;END PROCactivatemodellfkt;PROCdeactivatemodellfkt:deactivate(fktmodellbearbeiten);deactivate(fktmodellerfassen);deactivate(fktwirkdgerfassen);deactivate(fktmodellaendern);deactivate(fktmodellkopieren);deactivate(fktmodellloeschen);deactivate(fktmodelleauflisten);deactivate(fktmodellinfos);deactivate(fktmodellloeschen);END PROCdeactivatemodellfkt;PROCactivatebankfkt:IFbankintaskTHENactivate(fktbanksichern);activate(fktbankloeschen);activate(fktbankinhaltzeigen);ELSEdeactivate(fktbanksichern);deactivate(fktbankloeschen);deactivate(fktbankinhaltzeigen);FI;activate(fktbankinitial);activate(fktbankladen);END PROCactivatebankfkt;PROCinitialisierebank:TEXT VARbankname:="";BOOL VARnameok:=FALSE;loescheaktuellemeldung;liesneuennamenein;kontrolliereneuennamen;richteggfbankein;.liesneuennamenein:bankname:=menuanswer(anwendungstext(btbanknameneingeben)+((10+maxnamenlaengeselbsterfasstebank-length(anwendungstext(btbanknameneingeben)))*" "),"",5);.kontrolliereneuennamen:IFlsexitkey=abbruchTHENzeigemeldung(anwendungstext(bteinrichtenabgebrochen),negativemld,modellbankdialog);LEAVEinitialisierebankELIFcompress(bankname)=""THENzeigemeldung(anwendungstext(btkeingueltigerbankname),negativemld,modellbankdialog);LEAVEinitialisierebankELIFlength(bankname)>maxnamenlaengeselbsterfasstebankTHENzeigemeldung(anwendungstext(btbanknamezulang),negativemld,modellbankdialog)ELSE IFexists(bankname)THEN IFtype(old(bankname))=modellbanktypTHENzeigemeldung(anwendungstext(btbankexistiert),negativemld,modellbankdialog)ELSEzeigemeldung(anwendungstext(btdateiexistiert),negativemld,modellbankdialog)FI ELSEnameok:=TRUE;FI;FI;.richteggfbankein:IFnameokTHENletztebank:=bankname;neuebank(letztebank);zeigemeldung(anwendungstext(btbankeingerichtet),NOTnegativemld,modellbankdialog);taskstatusbzgbanken;activatebankfktFI.END PROCinitialisierebank;PROCladebanken:THESAURUS VARausgewaehlte,archivliste,inhaltderbank;TEXT VARfehlertext:="",bankname;BOOL VARerfolgreich:=FALSE,ladenok;INT VARbanknr,modellnr,currentx,currenty;loescheaktuellemeldung;erstellelistederbankenaufarchiv;modellbankenwaehlen(ausgewaehlte,anwendungstext(btverzeichnisaufarchiv),anwendungstext(btbittegewuenschtebanken),TRUE);IFnotempty(ausgewaehlte)THENladediegewaehltenELSEzeigemeldung(anwendungstext(btladevorgangabgebrochen),negativemld,modellbankdialog);oldfootnote;refreshsubmenu;FI;.erstellelistederbankenaufarchiv:menuinfo(anwendungstext(btdisketteeinlundweiter),5);archivanmelden(fehlertext);IFarchivnichtfreiTHENzeigemeldung(fehlertext,negativemld,modellbankdialog);refreshsubmenu;leaveladebanken;ELSEfootnote(anwendungstext(btwartenbeipruefen));archivoperation(allarchiv,"",archivliste,erfolgreich);IF NOTerfolgreichTHENzeigemeldung(anwendungstext(btbittemodellbankdiskette),negativemld,modellbankdialog);refreshsubmenu;leaveladebanken;ELSEsortierebankenausarchivlisteheraus;FI;FI;.sortierebankenausarchivlisteheraus:
+banknr:=0;ausgewaehlte:=emptythesaurus;get(archivliste,bankname,banknr);WHILEbankname<>""REP IFlength(bankname)<=maxmusslaengebanknameCANDdskeinmodelldatenraum(bankname)THENinsert(ausgewaehlte,bankname);FI;get(archivliste,bankname,banknr)PER.bildschirmleeren:showmenuwindow.ladediegewaehlten:bildschirmleeren;bildeschnittmengetaskarchiv;IFbankendoppeltTHENfragewelcheueberschreibenFI;ladelistebearbeiten.bildeschnittmengetaskarchiv:THESAURUS VARschnittmenge:=bankenintask;schnittmenge:=schnittmenge/ausgewaehlte;.bankendoppelt:notempty(schnittmenge).fragewelcheueberschreiben:menuwindowcursor(2,2);menuwindowout(anwendungstext(btintaskueberschreiben));menuwindowline(2);banknr:=0;get(schnittmenge,bankname,banknr);WHILEbankname<>""REP IFmenuwindowno(" "+code(34)+bankname+code(34)+" ")THENausgewaehlte:=ausgewaehlte-bankname;FI;get(schnittmenge,bankname,banknr);PER;menuwindowline(2);IFkeinezuueberschreibendeTHENloescheaktuellesfenster;zeigemeldung(anwendungstext(btnichtueberschriebenladen),negativemld,modellbankdialog);LEAVEladebanken;ELSEmenuwindowpage;FI;.keinezuueberschreibende:NOTnotempty(ausgewaehlte).archivnichtfrei:fehlertext<>"".ladelistebearbeiten:ueberschriftfuergeladenebanken;archivanmelden(fehlertext);IFarchivnichtfreiTHENloescheaktuellesfenster;zeigemeldung(fehlertext,negativemld,modellbankdialog);LEAVEladebanken;ELSEladenok:=TRUE;banknr:=0;get(ausgewaehlte,bankname,banknr);WHILEbankenzuladenCANDladenokREPladenaechstebank;get(ausgewaehlte,bankname,banknr);PER;ladenauswerten;FI;.bankenzuladen:banknr>0.ladenaechstebank:menuwindowout("--> "+bankname);getmenuwindowcursor(currentx,currenty);archivoperation(ladenhauptds,bankname,erfolgreich);IFerfolgreichTHEN IFtype(old(bankname))=modellbanktypTHENstelledatenraeumederbankzusammen;archivoperation(laden,"",inhaltderbank,erfolgreich);IFerfolgreichTHENmeldungeinebankgeladenFI;ELSEforget(bankname,quiet);meldungbanknichtgeladen;FI;FI;ladenok:=erfolgreich;.stelledatenraeumederbankzusammen:kopplean(bankname);inhaltderbank:=emptythesaurus;FORmodellnrFROM1UPTOanzahldglmodelleREPkopplean(modellnr);IFarchivlisteCONTAINSmodelldatenraumTHENinsert(inhaltderbank,modelldatenraum);FI;IFarchivlisteCONTAINSvorgabekurveTHENinsert(inhaltderbank,vorgabekurve);FI;IFarchivlisteCONTAINSvorgabevergleichskurveTHENinsert(inhaltderbank,vorgabevergleichskurve);FI;PER;inhaltderbank:=inhaltderbank+wddsnamen.ladenauswerten:IFladenokTHENloeschewartehinweis;menuwindowcursor(1,currenty);clearbuffer;taskstatusbzgbanken;menuwindowstop;activatebankfkt;loescheaktuellesfenster;ELSEloeschewartehinweis;menuwindowcursor(1,currenty);menuwindowout(" ");currentx:=7;currentyINCR1;menuwindowcursor(currentx,currenty);menuwindowout(anwendungstext(btkannnichtgeladen));clearbuffer;menuwindowstop;loescheaktuellesfenster;zeigemeldung(anwendungstext(btladenfehlerhaft),negativemld,modellbankdialog);FI;LEAVEladebanken;.ueberschriftfuergeladenebanken:menuwindowcursor(1,1);menuwindowout(menuwindowcenter(anwendungstext(btbankenladen)));menuwindowcursor(1,letztemenuwindowzeile);menuwindowout(anwendungstext(btwartenbeiladen));menuwindowcursor(1,3);.meldungeinebankgeladen:menuwindowcursor(1,currenty);menuwindowout(" ");menuwindowcursor(currentx,currenty);menuwindowout(anwendungstext(btbankgeladen));menuwindowline;.meldungbanknichtgeladen:menuwindowcursor(1,currenty);menuwindowout(" ");currentx:=7;currentyINCR1;menuwindowcursor(currentx,currenty);menuwindowout(anwendungstext(btbanknichtgeladen));menuwindowline;.loeschewartehinweis:menuwindowcursor(1,letztemenuwindowzeile);menuwindowout(71*" ");.leaveladebanken:oldfootnote;LEAVEladebanken;.END PROCladebanken;PROCloeschebanken:BOOL VARmindestenseinegeloescht:=FALSE;INT VARz;THESAURUS VARauswahlbanken:=bankenintask;loescheaktuellemeldung;modellbankenwaehlen(auswahlbanken,anwendungstext(btbankenimsystemwaehlen),anwendungstext(btbankenankreuzenloeschen),TRUE);IFnotempty(auswahlbanken)THENloeschegewaehltebanken;ELSEzeigemeldung(anwendungstext(btbankloeschenabgebrochen),negativemld,
+modellbankdialog);refreshsubmenu;FI;oldfootnote;.loeschegewaehltebanken:showmenuwindow;menuwindowout(menuwindowcenter(invers(anwendungstext(btueberschriftloeschen))));menuwindowline(2);loeschederreihenach;zeigeabschlusskommentar;.loeschederreihenach:FORzFROM1UPTOhighestentry(auswahlbanken)REP IFname(auswahlbanken,z)<>""ANDexists(name(auswahlbanken,z))ANDmenuwindowyes(" "+code(34)+name(auswahlbanken,z)+code(34)+" "+anwendungstext(btfrageloeschen))THENmindestenseinegeloescht:=TRUE;loesche(name(auswahlbanken,z));FI;PER.zeigeabschlusskommentar:loescheaktuellesfenster;IFmindestenseinegeloeschtTHENtaskstatusbzgbanken;activatebankfkt;zeigemeldung(anwendungstext(btbankengeloescht),NOTnegativemld,modellbankdialog);refreshsubmenu;ELSEzeigemeldung(anwendungstext(btkeinebankgeloescht),negativemld,modellbankdialog);FI.END PROCloeschebanken;PROCsicherebanken:TEXT VARfehlertext:="",bankname;BOOL VARerfolgreich:=FALSE,sichernok;INT VARbanknr,modellnr,format:=0,currentx,currenty;THESAURUS VARausgewaehlte:=bankenintask,archivliste,inhaltderbank;loescheaktuellemeldung;modellbankenwaehlen(ausgewaehlte,anwendungstext(btbankenimsystemwaehlen),anwendungstext(btbankenankreuzensichern),TRUE);IFnotempty(ausgewaehlte)THENsicherediegewaehltenELSErefreshsubmenu;zeigemeldung(anwendungstext(btsicherungabgebrochen),negativemld,modellbankdialog);leavesicherebanken;FI.sicherediegewaehlten:REPkernvonsichernPER.kernvonsichern:WINDOW VARfenster:=window(4,4,75,18);TEXT CONSTinfo:=anwendungstext(btueberschriftsicherungsaltn)+return,liste:=anwendungstext(btsicherungsalternativen),tasten:=" - ";INT VARauswahl;auswahl:=boxalternative(fenster,info,liste,tasten,1,FALSE)MOD100;loescheaktuellemeldung;IFauswahl=menusichernabbrechenTHENrefreshsubmenu;zeigemeldung(anwendungstext(btsicherungabgebrochen),negativemld,modellbankdialog);leavesicherebanken;ELSE IFauswahl=menuformatierenTHENformatierearchiv;ELIFauswahl=menuclearTHENloeschearchiv;FI;startesicherung;FI;.loeschearchiv:footnote(anwendungstext(btwartenallgemein));archivanmelden(fehlertext);IFarchivnichtfreiTHENzeigemeldung(fehlertext,negativemld,modellbankdialog);refreshsubmenu;leavesicherebanken;ELSEarchivoperation(cleararchiv,"",erfolgreich);oldfootnote;IF NOTerfolgreichTHENzeigemeldung(anwendungstext(btbittedisketteeinlegen),negativemld,modellbankdialog);reentersichern;FI;FI.formatierearchiv:footnote(anwendungstext(btwartenallgemein));archivanmelden(fehlertext);IFarchivnichtfreiTHENzeigemeldung(fehlertext,negativemld,modellbankdialog);refreshsubmenu;leavesicherebanken;ELSEwaehleformataus;IF NOTformatausgewaehltTHENzeigemeldung(anwendungstext(btkeinformatgewaehlt),negativemld,modellbankdialog);refreshsubmenu;leavesicherebanken;ELSEfootnote(anwendungstext(btwartenformatieren));archivoperation(formatarchiv,text(format),erfolgreich);IF NOTerfolgreichTHENoldfootnote;zeigemeldung(anwendungstext(btbittedisketteeinlegen),negativemld,modellbankdialog);reentersichern;FI FI FI.waehleformataus:cursor(1,4);out("�");format:=boxalternative(fenster,anwendungstext(btformatwahlueberschrift),anwendungstext(btformatwahlbeschreibung),anwendungstext(btformatwahlbuchstaben),5,FALSE)MOD100.formatausgewaehlt:format<>5.startesicherung:archivanmelden(fehlertext);IFarchivnichtfreiTHENrefreshsubmenu;zeigemeldung(fehlertext,negativemld,modellbankdialog);leavesicherebanken;ELSElistedesarchivserstellen;IF NOTerfolgreichTHENloescheaktuellesfenster;IFauswahl=menusichernTHENzeigemeldung(anwendungstext(btbittemodellbankdiskette),negativemld,modellbankdialog);ELSEzeigemeldung(anwendungstext(btbittedisketteeinlegen),negativemld,modellbankdialog);FI;reentersichern;ELSEerstellesicherungsliste;FI;FI;.listedesarchivserstellen:bildschirmleeren;menuwindowcursor(2,letztemenuwindowzeile);menuwindowout(anwendungstext(btwartenbeipruefen));archivoperation(allarchiv,"",archivliste,erfolgreich);.erstellesicherungsliste:bildeschnittmenge;IFbankendoppeltTHENfragewelcheueberschreiben;FI;sicherungslistebearbeiten;.bildschirmleeren:showmenuwindow;.bildeschnittmenge:
+THESAURUS VARschnittmenge:=archivliste/ausgewaehlte;.bankendoppelt:notempty(schnittmenge).fragewelcheueberschreiben:loeschewartehinweis;menuwindowcursor(2,2);menuwindowout(anwendungstext(btaufdiskueberschreiben));menuwindowline(2);banknr:=0;WHILEbanknr<highestentry(schnittmenge)REPget(schnittmenge,bankname,banknr);IFmenuwindowno(" "+code(34)+bankname+code(34)+" ")THENausgewaehlte:=ausgewaehlte-bankname;FI PER;menuwindowline(2);IFkeinezuueberschreibendeTHENloescheaktuellesfenster;zeigemeldung(anwendungstext(btnichtueberschriebensichern),negativemld,modellbankdialog);LEAVEsicherebanken;ELSEmenuwindowpage;FI;.keinezuueberschreibende:NOTnotempty(ausgewaehlte).archivnichtfrei:fehlertext<>"".sicherungslistebearbeiten:ueberschriftfuergesichertebanken;archivanmelden(fehlertext);IFarchivnichtfreiTHENloescheaktuellesfenster;zeigemeldung(fehlertext,negativemld,modellbankdialog);LEAVEsicherebanken;ELSEsichernok:=TRUE;banknr:=0;WHILEbankenzusichernCANDsichernokREPget(ausgewaehlte,bankname,banknr);sicherenaechstebank;PER;sichernauswerten;FI;.bankenzusichern:banknr<highestentry(ausgewaehlte).sicherenaechstebank:stelledatenraeumederbankzusammen;menuwindowout("--> "+bankname);getmenuwindowcursor(currentx,currenty);archivoperation(schreiben,"",inhaltderbank,erfolgreich);IFerfolgreichTHENmeldungeinebankgesichertFI;sichernok:=erfolgreich;.stelledatenraeumederbankzusammen:kopplean(bankname);inhaltderbank:=emptythesaurus;insert(inhaltderbank,bankname);FORmodellnrFROM1UPTOanzahldglmodelleREPkopplean(modellnr);IFexists(modelldatenraum)THENinsert(inhaltderbank,modelldatenraum);FI;IFexists(vorgabekurve)THENinsert(inhaltderbank,vorgabekurve);FI;IFexists(vorgabevergleichskurve)THENinsert(inhaltderbank,vorgabevergleichskurve);FI;PER;inhaltderbank:=inhaltderbank+wddsnamen.sichernauswerten:IFsichernokTHENloeschewartehinweis;menuwindowcursor(1,currenty);clearbuffer;menuwindowstop;loescheaktuellesfenster;ELSEloescheggfdatenraeume;loeschewartehinweis;menuwindowcursor(1,currenty);menuwindowout(" ");currentx:=7;currentyINCR1;menuwindowcursor(currentx,currenty);menuwindowout(anwendungstext(btkannnichtgesichert));IFbankendoppeltTHENmenuwindowcursor(3,currenty+2);menuwindowout(anwendungstext(btbankevtgeloescht1));menuwindowcursor(3,currenty+3);menuwindowout(anwendungstext(btbankevtgeloescht2));FI;clearbuffer;menuwindowstop;loescheaktuellesfenster;zeigemeldung(anwendungstext(btdiskettevoll),negativemld,modellbankdialog);FI;LEAVEsicherebanken;.ueberschriftfuergesichertebanken:menuwindowcursor(1,1);menuwindowout(menuwindowcenter(anwendungstext(btbankenschreiben)));menuwindowcursor(1,letztemenuwindowzeile);menuwindowout(anwendungstext(btwartenbeisichern));menuwindowcursor(1,3);.meldungeinebankgesichert:menuwindowcursor(1,currenty);menuwindowout(" ");menuwindowcursor(currentx,currenty);menuwindowout(anwendungstext(btbankgesichert));menuwindowline;.loescheggfdatenraeume:inhaltderbank:=(inhaltderbank-remainder)+(remainder/archivliste);IFnotempty(inhaltderbank)THENarchivoperation(loeschen,"",inhaltderbank,erfolgreich);IF NOTerfolgreichTHENloescheaktuellesfenster;zeigemeldung(anwendungstext(btbittedisketteeinlegen),negativemld,modellbankdialog);LEAVEsicherebanken;FI;FI;.leavesicherebanken:oldfootnote;LEAVEsicherebanken;.reentersichern:LEAVEkernvonsichern.END PROCsicherebanken;PROCmodellbankenwaehlen(THESAURUS VARgewaehlt,TEXT CONSTt1,t2,BOOL CONSTbildrekonstruieren):waehlebankenaus;.waehlebankenaus:gewaehlt:=some(singlesp1,zl1,singlebr,hoe,gewaehlt,t1,t2);IFbildrekonstruierenTHENerase(fsingle);FI;.END PROCmodellbankenwaehlen;PROCmodellbankwaehlen(TEXT VARgewaehlt):gewaehlt:="";waehlebankaus;koppleggfbankan;.waehlebankaus:gewaehlt:=one(singlesp1,zl1,singlebr,hoe,bankenintask,anwendungstext(btmodellbankenverzeichnis),anwendungstext(btbitte1bankwaehlen));erase(fsingle).koppleggfbankan:IFcompress(gewaehlt)<>""THENkopplean(gewaehlt);letztebank:=gewaehlt;FI.END PROCmodellbankwaehlen;PROCbankenauflisten:FILE VARbankliste;TEXT VARausstieg:="";INT VARerstersatz1:=3,
+erstespalte1:=1;loescheaktuellemeldung;forget(listends);listends:=nilspace;bankliste:=sequentialfile(output,listends);line(bankliste);putline(bankliste,anwendungstext(btmodellbankenverzeichnis));line(bankliste);IFbankintaskTHENbanklisteFILLBYbankenintask;ELSEputline(bankliste,anwendungstext(btkeinebankenenthalten));FI;footnote(steuerleiste(stleistefileverlassen));erase(fsingle);outframe(fsingle);scroll(fshow,bankliste,erstespalte,erstezeile,scrollbreite,erstersatz1,erstespalte1,showverlasszeichen,ausstieg);forget(listends);loescheaktuellesfenster;.END PROCbankenauflisten;DATASPACE VARlistends;PROCmodelleauflisten(BOOL CONSTmitauswahlderbank):ROWmaxmodelleINT VARmodellnummern;FILE VARmodelliste;TEXT VARbankinbearbeitung;TEXT VARausstieg:="";INT VARerstersatz1:=3,erstespalte1:=1;loescheaktuellemeldung;IFmitauswahlderbankTHENmodellbankwaehlen(bankinbearbeitung);ELSEbankinbearbeitung:=letztebank;FI;IFbankinbearbeitung<>""THENletztebank:=bankinbearbeitung;holemodellnamenderbank;zeigemodellnamen;loescheaktuellesfenster;ELSEloescheaktuellesfenster;zeigemeldung(anwendungstext(btkeinebankgewaehlt),NOTnegativemld,modellbankdialog);FI;.holemodellnamenderbank:forget(listends);listends:=nilspace;modelliste:=sequentialfile(output,listends);line(modelliste);putline(modelliste,anwendungstext(btmodellverzeichnis)+evtverkuerzterbankname(letztebank));line(modelliste);modellisteFILLBYmodellnamenderbank(allemodelle,modellnummern,anzahldermodelle);IFanzahldermodelle<=0THENputline(modelliste,anwendungstext(btkeinmodellinbank))FI.zeigemodellnamen:footnote(steuerleiste(stleistefileverlassen));outframe(fsingle);scroll(fshow,modelliste,erstespalte,erstezeile,scrollbreite,erstersatz1,erstespalte1,showverlasszeichen,ausstieg);forget(listends).END PROCmodelleauflisten;PROCbankzumarbeitenwaehlen:TEXT VARbankinbearbeitung:="";loescheaktuellemeldung;modellbankwaehlen(bankinbearbeitung);IFbankinbearbeitung<>""THENzeigemeldung(anwendungstext(btbankgewaehlt),NOTnegativemld,modellbankdialog);activatemodellfkt;refreshsubmenu;ELSErefreshsubmenu;zeigemeldung(anwendungstext(btkeinebankgewaehlt),negativemld,modellbankdialog);FI;oldfootnote;.END PROCbankzumarbeitenwaehlen;PROCmodellwaehlen(INT VARgewaehlt,KRITERIUM CONSTkriterium):ROWmaxmodelleINT VARmodellnummern;TEXT VARgewaehltesmodell;THESAURUS VARmengedermodelle:=emptythesaurus;holemodellnamenderbank;waehlenamenaus.holemodellnamenderbank:mengedermodelle:=modellnamenderbank(kriterium,modellnummern,anzahldermodelle).waehlenamenaus:gewaehltesmodell:=one(singlesp1,zl1,singlebr,hoe,mengedermodelle,anwendungstext(btmodellverzeichnis)+evtverkuerzterbankname(letztebank),anwendungstext(btbittemodellwaehlen));IFcompress(gewaehltesmodell)<>""THENgewaehlt:=modellnummern(link(mengedermodelle,gewaehltesmodell));ELSEloescheaktuellesfenster;gewaehlt:=0FI.END PROCmodellwaehlen;BOOL PROCbankgewaehlt:NOT(letztebank=nichtdefiniert).END PROCbankgewaehlt;PROCmodellbearbeiten:BOUND MODELLDGL VARaktmodell;DATASPACE VARtransportdsp;INT CONSTursprungstask:=standardkanal;INT VARnr,retcode:=0;loescheaktuellemeldung;modellwaehlen(nr,allelauffaehigen);IFnr=0THENzeigemeldung(anwendungstext(btkeinmodellgewaehlt),negativemld,modellbankdialog);LEAVEmodellbearbeitenELSE IFdglmodellTHENsimulieremitdglmodell;ELSEforget(transportdsp);transportdsp:=old(name(wddsnamen,nr-maxdglmodelle));diagrammankoppeln(transportdsp);transformierewirkungsdiagrammundstartesimulation(ls,retcode);forget(transportdsp)FI;FI;continue(ursprungstask);IFokTHENregeneratemenuscreen;zeigemeldung(anwendungstext(btsimulationbeendet),NOTnegativemld,modellbankdialog);ELSEloescheaktuellesfenster;zeigemeldung(anwendungstext(btsimulationunmoeglich),negativemld,modellbankdialog);FI;.dglmodell:nr<=maxdglmodelle.simulieremitdglmodell:REPversendeundbearbeite;UNTILordnungsgemaessbeendetodertasknichtempfangsbereitPER;.ordnungsgemaessbeendetodertasknichtempfangsbereit:retcode<>simulationneustarten.versendeundbearbeite:continue(ursprungstask);IFretcode=simulationneustartenTHEN
+regeneratemenuscreen;FI;footnote(anwendungstext(btwartenallgemein));kopplean(nr);retcode:=0;schickemodelldaten;IFokTHENschickeoriginalkurve;FI;IFokTHENschickevergleichskurve;FI;IFokTHENschickegleichungen;IFokTHENstartesimulationFI;FI;.ok:retcode=0.schickemodelldaten:transportdsp:=nilspace;aktmodell:=transportdsp;aktmodell:=modellaktuell(nr);schickeanmanagertask(transportdsp,2,retcode);forget(transportdsp);.schickeoriginalkurve:IFexists(vorgabekurve)THENtransportdsp:=old(vorgabekurve);schickeanmanagertask(transportdsp,3,retcode);forget(transportdsp);FI;.schickevergleichskurve:IFexists(vorgabevergleichskurve)THENtransportdsp:=old(vorgabevergleichskurve);schickeanmanagertask(transportdsp,4,retcode);forget(transportdsp);FI;.schickegleichungen:IFexists(modelldatenraum)THENtransportdsp:=old(modelldatenraum);schickeanmanagertask(transportdsp,5,retcode);forget(transportdsp);ELSEretcode:=99;FI.startesimulation:break(quiet);transportdsp:=nilspace;schickeanmanagertask(transportdsp,6,retcode);END PROCmodellbearbeiten;PROCmodellerzeugen:INT VARreturncode;loescheaktuellemeldung;richteneuesmodellein;.richteneuesmodellein:cursoron;fuegeein(aufgeblaehtername(letztebank),returncode);cursoroff;IF NOT(returncode=ok)THENregeneratemenuscreen;zeigemeldung(anwendungstext(btmodellnichtabgelegt),negativemld,modellbankdialog);ELSEactivatemodellfkt;regeneratemenuscreen;zeigemeldung(anwendungstext(btmodellabgelegt),NOTnegativemld,modellbankdialog);FI;.END PROCmodellerzeugen;PROCwirkungsdiagrammerzeugen:INT VARreturncode;loescheaktuellemeldung;richteneuesmodellein;.richteneuesmodellein:initcellmatrix;cursoron;erfassenamenundwd(aufgeblaehtername(letztebank),0,returncode);cursoroff;IF NOT(returncode=ok)THENregeneratemenuscreen;zeigemeldung(anwendungstext(btmodellnichtabgelegt),negativemld,modellbankdialog);ELSEactivatemodellfkt;regeneratemenuscreen;zeigemeldung(anwendungstext(btmodellabgelegt),NOTnegativemld,modellbankdialog);FI.END PROCwirkungsdiagrammerzeugen;PROCmodellkopieren:INT VARnr,returncode;loescheaktuellemeldung;modellwaehlen(nr,alleaenderbaren);IFnr=0THENzeigemeldung(anwendungstext(btkeinmodellgewaehlt),negativemld,modellbankdialog);ELSEkopiervorgangFI;.kopiervorgang:IFdglmodellTHEN IFmodellbankvolldglTHENloescheaktuellesfenster;zeigemeldung(anwendungstext(btmodellbankvolldgl),negativemld,modellbankdialog);LEAVEmodellkopierenELSEkopplean(nr);cursoron;copy(nr,aufgeblaehtername(letztebank),returncode);cursoroffFI;ELIFwdmodellTHEN IFmodellbankvollwdTHENloescheaktuellesfenster;zeigemeldung(anwendungstext(btmodellbankvollwd),negativemld,modellbankdialog);LEAVEmodellkopierenELSEcursoron;copywd(nr-maxdglmodelle,aufgeblaehtername(letztebank),returncode);cursoroffFI;FI;IF NOT(returncode=ok)THENregeneratemenuscreen;zeigemeldung(anwendungstext(btmodellnichtabgelegt),negativemld,modellbankdialog);ELSEactivatemodellfkt;regeneratemenuscreen;zeigemeldung(anwendungstext(btmodellabgelegt),NOTnegativemld,modellbankdialog);FI.dglmodell:nr<=maxdglmodelle.wdmodell:nr>maxdglmodelle.END PROCmodellkopieren;PROCmodellloeschen:INT VARnr;loescheaktuellemeldung;modellwaehlen(nr,alleaenderbaren);IFnr=0THENzeigemeldung(anwendungstext(btkeinmodellgewaehlt),negativemld,modellbankdialog);ELSEkopplean(nr);loescheaktuellesfenster;IFmenuyes(modellname+anwendungstext(btfragemodellloeschen),5)THENloesche(nr,aufgeblaehtername(letztebank));zeigemeldung(anwendungstext(btmodellgeloescht),NOTnegativemld,modellbankdialog);activatemodellfkt;ELSEzeigemeldung(anwendungstext(btkeinmodellgeloescht),negativemld,modellbankdialog)FI;FI.modellname:IFdglmodellTHENkopplean(nr);modellbezeichnungELSEname(wdmodelle,nr-maxdglmodelle)FI.dglmodell:nr<=maxdglmodelle.END PROCmodellloeschen;PROCmodellveraendern:DATASPACE VARtransportdsp;BOOL VARerfassenok:=FALSE;INT VARnr,returncode:=0;loescheaktuellemeldung;modellwaehlen(nr,alleaenderbaren);IFnr=0THENzeigemeldung(anwendungstext(btkeinmodellgewaehlt),negativemld,modellbankdialog);ELSEcursoron;IFdglmodellTHENmodellerfassung(nr,aufgeblaehtername(letztebank),
+erfassenok);IF NOTerfassenokTHENloesche(nr,aufgeblaehtername(letztebank))FI;
+ELSEforget(transportdsp);transportdsp:=old(name(wddsnamen,modellindex));diagrammankoppeln(transportdsp);erfassenamenundwd(aufgeblaehtername(letztebank),modellindex,returncode);erfassenok:=(returncode=0);forget(transportdsp)FI;cursoroff;IFerfassenokTHENactivatemodellfkt;regeneratemenuscreen;zeigemeldung(anwendungstext(btmodellveraendertabgelegt),NOTnegativemld,modellbankdialog);ELSEregeneratemenuscreen;zeigemeldung(anwendungstext(btmodellnichtabgelegt),negativemld,modellbankdialog);FI FI.modellindex:nr-maxdglmodelle.dglmodell:nr<=maxdglmodelle.END PROCmodellveraendern;PROCmodellinformationen:DATASPACE VARmodellds;FILE VARmdlinfo;TEXT VARausstieg:="";INT VARerstersatz1:=3,erstespalte1:=1,nr;forget(listends);listends:=nilspace;mdlinfo:=sequentialfile(output,listends);loescheaktuellemeldung;modellwaehlen(nr,allemodelle);IFnr=0THENzeigemeldung(anwendungstext(btkeinmodellgewaehlt),negativemld,modellbankdialog);LEAVEmodellinformationenELIFdglmodellTHENkopplean(nr);putline(mdlinfo,anwendungstext(btmodell)+modellbezeichnung);IF NOTexists(modelldatenraum)THENputline(mdlinfo,modellbezeichnung+":");line(mdlinfo,2);putline(mdlinfo,anwendungstext(btmodellnichtablauffaehig5));ELSEforget(listends);informationstext(mdlinfo);IF NOTcompilierbaregleichungenTHENinfofuerfehlerhaftesmodell(mdlinfo)ELSEinfofuerfehlerfreiesmodell(mdlinfo)FI FI ELIFwdmodellTHENforget(modellds);modellds:=old(name(wddsnamen,modellindex));diagrammankoppeln(modellds);putline(mdlinfo,anwendungstext(btmodell)+wdmodellname);putline(mdlinfo,length(anwendungstext(btmodell)+wdmodellname)*"=");line(mdlinfo);IF NOTwdmodelllauffaehigTHENinfofuerfehlerhaftesmodell(mdlinfo)ELSEinfofuerfehlerfreiesmodell(mdlinfo)FI;line(mdlinfo);modellinfo(mdlinfo);forget(modellds)FI;footnote(steuerleiste(stleistefileverlassen));erase(fsingle);outframe(fsingle);scroll(fshow,mdlinfo,1,scrollzeile,1,erstersatz1,erstespalte1,showverlasszeichen,ausstieg);forget(listends);loescheaktuellesfenster.modellindex:nr-maxdglmodelle.dglmodell:nr<=maxdglmodelle.wdmodell:NOTdglmodell.wdmodelllauffaehig:type(old(name(wddsnamen,nr-maxdglmodelle)))=typnrwdausfuehrbar.wdmodellname:name(wdmodelle,nr-maxdglmodelle).END PROCmodellinformationen;PROCinfofuerfehlerhaftesmodell(FILE VARmdlinfo):putline(mdlinfo,anwendungstext(btmodellnichtablauffaehig1));putline(mdlinfo,anwendungstext(btmodellnichtablauffaehig2));putline(mdlinfo,anwendungstext(btmodellnichtablauffaehig3));putline(mdlinfo,anwendungstext(btmodellnichtablauffaehig4))END PROCinfofuerfehlerhaftesmodell;PROCinfofuerfehlerfreiesmodell(FILE VARmdlinfo):putline(mdlinfo,anwendungstext(btmodellablauffaehig))END PROCinfofuerfehlerfreiesmodell;BOOL PROCbankintask:anzahlbankenintask>0END PROCbankintask;PROCtaskstatusbzgbanken:bankenintask:=infixnamen(all,modellbanktyp);anzahlbankenintask:=highestentry(bankenintask)END PROCtaskstatusbzgbanken;THESAURUS PROCmodellnamenderbank(KRITERIUM CONSTkriterium,ROWmaxmodelleINT VARmodellnummern,INT VARanzahldermodelle):THESAURUS VARbankliste:=emptythesaurus;ROWmaxmodelleTEXT VARmodellnamen;listedermodelle(modellnamen,modellnummern,kriterium,anzahldermodelle);IFanzahldermodelle>0THENschreibenameninverzeichnisFI;bankliste.schreibenameninverzeichnis:FORiFROM1UPTOanzahldermodelleREPinsert(bankliste,modellnamen(i))PER.END PROCmodellnamenderbank;PROCarchivanmelden(TEXT VARarchivfehler):disablestop;archive(floppyname);IFiserrorTHENarchivfehler:=errormessage;clearerror;enablestop;IFlength(archivfehler)<=62THENarchivfehler:=archivfehler;ELSEarchivfehler:=anwendungstext(btarchivnichtfrei);FI;ELSEenablestop;archivfehler:="";FI.END PROCarchivanmelden;PROCarchivoperation(INT CONSToperation,TEXT CONSTdatenraum,BOOL VARmiterfolg):THESAURUS VARarchivinhalt;archivoperation(operation,datenraum,archivinhalt,miterfolg);END PROCarchivoperation;PROCarchivoperation(INT CONSToperation,TEXT CONSTtextparam,THESAURUS VARarchivliste,BOOL VARmiterfolg):disablestop;archive(floppyname);commanddialogue(FALSE);SELECToperationOF CASE1:clear(archive)CASE2:
+archivliste:=ALLarchive;CASE3:menuwindowcursor(length(anwendungstext(btwartenbeisichern))+3,letztemenuwindowzeile);save(archivliste,archive);CASE4:menuwindowcursor(length(anwendungstext(btwartenbeisichern))+3,letztemenuwindowzeile);erase(archivliste,archive);CASE5:menuwindowcursor(length(anwendungstext(btwartenbeiladen))+3,letztemenuwindowzeile);fetch(textparam,archive);CASE6:menuwindowcursor(length(anwendungstext(btwartenbeiladen))+3,letztemenuwindowzeile);fetch(archivliste,archive);CASE7:format(int(textparam),archive)END SELECT;IFiserrorTHENclearerror;enablestop;miterfolg:=FALSE;ELSEenablestop;miterfolg:=TRUE;FI;commanddialogue(TRUE);release(archive);.END PROCarchivoperation;BOOL PROCdskeinmodelldatenraum(TEXT CONSTdataspacename):pos(dataspacename,originalkurve)=0CANDpos(dataspacename,vergleichskurve)=0CANDpos(dataspacename,modellcodeds)=0.END PROCdskeinmodelldatenraum;PROCloeschewartehinweis:menuwindowcursor(1,letztemenuwindowzeile);menuwindowout(71*" ");END PROCloeschewartehinweis;PROCloescheaktuellesfenster:aktuelleswindow:=currentmenuwindow;erase(aktuelleswindow);refreshsubmenu;oldfootnote;END PROCloescheaktuellesfenster;TEXT PROCevtverkuerzterbankname(TEXT CONSTbankname):TEXT CONSTbn:=compress(bankname);IFlength(bn)>maxnamenlaengeselbsterfasstebankTHENverkuerzternameELSEbnFI.verkuerztername:IFpos(bn,":")>0THENsubtext(bn,abdoppelpunkt)ELSEsubtext(bn,1,maxnamenlaengeselbsterfasstebank)FI.abdoppelpunkt:pos(bn,":")+2.END PROCevtverkuerzterbankname;TEXT PROCaufgeblaehtername(TEXT CONSTbankname):text(bankname,maxmusslaengebankname).END PROCaufgeblaehtername;END PACKETlssimsel;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls simulation b/app/schulis-simulationssystem/3.0/src/ls simulation
new file mode 100644
index 0000000..c673fa0
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls simulation
@@ -0,0 +1,5 @@
+PACKETlssimulationDEFINESberechne,berechnefortfuehrung,forgetmodellauf,zeigediagramm,zeigephasendiagramm,zeigevergleichskurve,zeigevergleichfuertabelle,zeigevergleichskurvefuerphasendiagramm:LETabbruch=36,mldruckertaskexistiertnicht=37,mldrucktasknichtempfangsbereit=38,mldruckunmoeglich=39,druckok=0,printertaskname="PRINTER",kurveleer=99,oueberschrift=67,vueberschrift=68,steuerleisteberechnung=26,steuerleistegraphik=27,steuerleistevergleichgraphik=29,steuerleistetabelle=30,steuerleistewarten=31,produktname=21,sendetaste="p",vglbeendenz="z",vglbeendent="t",vglbeendenh="h",lsabbruch="m",lsabbrucheingabe="m",blaetternoben="o",blaetternunten="u",weiter="w",druckdateitab=" tabelle.p",druckdateitab2=" tabelle.p.2",dateimodellwerte=" modellwerte",erzeugtetabelle=" tabelle";LETstrukt1fenster=1,strukt4fenster=4,fensterdummy=0,fensterganz=1,fensterlinksoben=4,fensterrechtsoben=6,fensterrechtsunten=7,fensterlinksunten=5;TEXT CONSTscrollausstiegmitdrucken:="md";INT VARfehlercode:=0,fehlernummer;LETscrollsp1=16,scrollzeile1=3,scrollbreitetab=15;LETniltext="",seitenvorschub="#page#",headanfang="#head#",nummerierung="#right# Seite: ",center="#center#",headende="#end#",druckbreite=78,drucklaenge=60;LETpausendauer=30;TEXT CONSTsendenblaetternuntenundoben:=sendetaste+blaetternunten+blaetternoben;INT VARsteuerzeilennr,kopfzeilennr;PROCberechne(LOESUNG VARergebnis,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof,TEXT VARtaste):enablestop;taste:="";forgetlogischemaske;REPkernvonberechne;PER.kernvonberechne:forgetmodellauf;eingabemodellgroessen(ergebnis,PROCf,PROCcof,kopfzeilezusammenstellen(kopfzeile(21),modellkurzbezeichnung,77),steuerleiste(steuerleisteberechnung),taste,zeichenkette,fehlercode);IFfehlercode=abbruchCORfehlercode=kurveleerTHENpausebeifehlern;reenterberechneELSEpausebeifehlernFI;IFtaste=lsabbrucheingabeCORtaste=weiterTHENleaveberechneFI;.zeichenkette:weiter.leaveberechne:LEAVEberechne.reenterberechne:forget("aus",quiet);LEAVEkernvonberechne.END PROCberechne;PROCforgetmodellauf:forget(dateimodellwerte,quiet);forget("aus",quiet);forget("aus diagramm",quiet);forget(" neue kurve",quiet);forget(druckdateitab,quiet);END PROCforgetmodellauf;PROCzeigediagramm(TEXT CONSTart,LOESUNG VARdieloesung,ZUSTAND VARmuster,BOOL CONSTinfortsetzung,TEXT VARtaste):TEXT VARdiagrammart:=art;OUTPUT VARausdiagramm;fehlernummer:=0;gibdiagrammaus(ausdiagramm,muster,dieloesung,infortsetzung,diagrammart,taste);.END PROCzeigediagramm;PROCgibdiagrammaus(OUTPUT VARausdiagramm,ZUSTAND CONSTmuster,LOESUNG VARloesungx,BOOL CONSTinfortsetzung,TEXT CONSTdiagrammart,TEXT VARtaste):KURVE VARhilfskurve:=LOESUNGSABSCHNITTloesungx;TEXT CONSTtastenraus:=lsabbruch;;ausdiagramm:=niloutput(strukt1fenster,"aus diagramm");IFdiagrammart=vglbeendenzTHENgibzeitdiagrammausELIFdiagrammart=vglbeendentTHENgibtabelleausELIFdiagrammart=vglbeendenhTHENgibhistogrammausFI.gibzeitdiagrammaus:IFinfortsetzungTHENkopfzeilennr:=4ELSEkopfzeilennr:=3FI;steuerzeilennr:=steuerleistegraphik;pausebeifehlern;steuerprozessfuereineloesung(ausdiagramm,hilfskurve,muster,neuerzustand(dimension+codimension),fensterganz,fensterdummy,kopfzeilennr,steuerzeilennr,sendetaste,tastenraus,taste,PROCcoroutinezeit,PROCcoroutinedummy).gibtabelleaus:FILE VARtbl:=tabelle(hilfskurve,muster,TRUE);WINDOW VARtabwindow:=grossesrahmenfenster;INT VARerstersatz1:=3,erstespalte1:=scrollsp1,seitenzaehler:=1;INT VARok:=0;forget(druckdateitab,quiet);rename(erzeugtetabelle,druckdateitab);outframe(tabwindow);footnote(steuerleiste(steuerleistetabelle));scroll(tabwindow,druckdateitab,scrollsp1,scrollzeile1,scrollbreitetab,erstersatz1,erstespalte1,scrollausstiegmitdrucken,taste);WHILEtaste<>lsabbruchREPdruckeevt;scroll(tabwindow,druckdateitab,scrollsp1,scrollzeile1,scrollbreitetab,erstersatz1,erstespalte1,scrollausstiegmitdrucken,taste);PER;erase(tabwindow);.druckeevt:footnote(steuerleiste(steuerleistewarten));seitenzaehler:=1;druckemodellwerteaus(originalwerte,seitenzaehler
+,ok);IFok=druckokTHENtabelleaufbereitetdrucken(druckdateitab,scrollsp1,scrollzeile1,scrollbreitetab,seitenzaehler,ok);FI;IFok=druckokTHENfootnote(steuerleiste(steuerleistetabelle));ELSEfootnote(meldungstext(ok));pause;footnote(steuerleiste(steuerleistetabelle));FI;.gibhistogrammaus:IFinfortsetzungTHENkopfzeilennr:=29ELSEkopfzeilennr:=28FI;steuerzeilennr:=steuerleistegraphik;pausebeifehlern;steuerprozessfuereineloesung(ausdiagramm,hilfskurve,muster,neuerzustand(dimension+codimension),fensterganz,fensterdummy,kopfzeilennr,steuerzeilennr,sendetaste,tastenraus,taste,PROCcoroutinehisto,PROCcoroutinedummy).END PROCgibdiagrammaus;PROCpausebeifehlern:IFfehlercode>0THENzeigemeldung(meldungstext(fehlercode),FALSE);pause(pausendauer);fehlercode:=0;loescheaktuellemeldung;FI.END PROCpausebeifehlern;PROCzeigephasendiagramm(LOESUNG VARdieloesung,ZUSTAND VARmuster,BOOL CONSTinfortsetzung,TEXT VARtaste):TEXT CONSTtastenraus:=lsabbruch;gibphasendiagrammaus;.gibphasendiagrammaus:KURVE VARhilfskurve:=LOESUNGSABSCHNITTdieloesung;OUTPUT VARausphasen:=niloutput(strukt1fenster,"aus phasen");kopfzeilennr:=kopf;steuerzeilennr:=steuerleistegraphik;steuerprozessfuereineloesung(ausphasen,hilfskurve,muster,neuerzustand(dimension+codimension),fensterganz,fensterdummy,kopfzeilennr,steuerzeilennr,sendetaste,tastenraus,taste,PROCcoroutinephase,PROCcoroutinedummy).kopf:IFinfortsetzungTHEN9ELSE8FI.END PROCzeigephasendiagramm;PROCzeigevergleichskurve(TEXT VARtaste,LOESUNG VARlsga,lsgb,ZUSTAND CONSTmuster,TEXT CONSTwas):KURVE VARkurvea,kurveb;TEXT VARtastenraus:=lsabbruch;originalundvergleichskurveausgeben.originalundvergleichskurveausgeben:OUTPUT VARausvergl2:=niloutput(strukt4fenster,"ausvergl2");kurvea:=LOESUNGSABSCHNITTlsga;kurveb:=LOESUNGSABSCHNITTlsgb;modellwertefuervergleich(ausvergl2,fensterrechtsoben,lsga,fensterrechtsunten,lsgb);kopfzeilennr:=6;steuerzeilennr:=steuerleistevergleichgraphik;aufrufvergleichhistogrammodervergleichzeit.aufrufvergleichhistogrammodervergleichzeit:IFwas=vglbeendenzTHENsteuerprozessfuerzweiloesungen(ausvergl2,kurvea,kurveb,muster,fensterlinksoben,fensterlinksunten,kopfzeilennr,steuerzeilennr,sendenblaetternuntenundoben,tastenraus,taste,PROCcoroutinezeit,PROCkreuzzeitvergleich)ELSEsteuerprozessfuerzweiloesungen(ausvergl2,kurvea,kurveb,muster,fensterlinksoben,fensterlinksunten,kopfzeilennr,steuerzeilennr,sendenblaetternuntenundoben,tastenraus,taste,PROCcoroutinehisto,PROCkreuzhistovergleich)FI.ENDPROCzeigevergleichskurve;PROCzeigevergleichfuertabelle(TEXT VARtaste,LOESUNG VARla,lb,ZUSTAND CONSTmuster):KURVE VARkurvea:=LOESUNGSABSCHNITTla,kurveb:=LOESUNGSABSCHNITTlb;WINDOW VARtabwindowo:=tabellenfensteroben,tabwindowu:=tabellenfensterunten;INT VARerstersatz1:=3,erstersatz2:=3,erstespalte1:=scrollsp1,seitenzaehler:=1;INT VARok:=0;originalundvergleichausgeben;forget(druckdateitab2,quiet);forget(druckdateitab,quiet);.originalundvergleichausgeben:FILE VARtbl;kopfzeilennr:=6;steuerzeilennr:=steuerleistetabelle;forget(druckdateitab2,quiet);forget(druckdateitab,quiet);tbl:=tabelle(kurvea,muster,TRUE);rename(erzeugtetabelle,druckdateitab);tbl:=tabelle(kurveb,muster,TRUE);rename(erzeugtetabelle,druckdateitab2);footnote(steuerleiste(steuerzeilennr));outframe(tabwindowo);outframe(tabwindowu);scroll(tabwindowo,tabwindowu,druckdateitab,druckdateitab2,scrollsp1,scrollzeile1,scrollbreitetab,erstersatz1,erstespalte1,erstersatz2,scrollausstiegmitdrucken,taste);WHILEtaste<>lsabbruchREPdruckeevt;scroll(tabwindowo,tabwindowu,druckdateitab,druckdateitab2,scrollsp1,scrollzeile1,scrollbreitetab,erstersatz1,erstespalte1,erstersatz2,scrollausstiegmitdrucken,taste);PER;erase(tabwindowo);erase(tabwindowu);.druckeevt:footnote(steuerleiste(steuerleistewarten));seitenzaehler:=1;druckemodellwerteaus(la,seitenzaehler,ok);IFok=druckokTHENtabelleaufbereitetdrucken(druckdateitab,scrollsp1,scrollzeile1,scrollbreitetab,seitenzaehler,ok);IFok=druckokTHENdruckemodellwerteaus(lb,seitenzaehler,ok);IFok=druckokTHENtabelleaufbereitetdrucken(druckdateitab2,scrollsp1,
+scrollzeile1,scrollbreitetab,seitenzaehler,ok);FI;FI;FI;IFok=druckokTHENfootnote(steuerleiste(steuerleistetabelle));ELSEfootnote(meldungstext(ok));pause;footnote(steuerleiste(steuerleistetabelle));FI;.ENDPROCzeigevergleichfuertabelle;PROCzeigevergleichskurvefuerphasendiagramm(TEXT VARtaste,KURVE CONSTkva,kvb,ZUSTAND VARmuster):TEXT VARtastenraus:=lsabbruch;originalundvergleichskurveausgeben;.originalundvergleichskurveausgeben:OUTPUT VARausvergl2:=niloutput(strukt1fenster,"ausvergl2");KURVE VARkurvea,kurveb;kurvea:=kva;kurveb:=kvb;steuerprozessfuerzweiloesungenaufrufen.steuerprozessfuerzweiloesungenaufrufen:kopfzeilennr:=6;steuerzeilennr:=steuerleistegraphik;steuerprozessfuerzweiloesungen(ausvergl2,kurvea,kurveb,muster,fensterganz,fensterganz,kopfzeilennr,steuerzeilennr,sendetaste,tastenraus,taste,PROCcoroutinephase,PROCkreuzphasevergleich).ENDPROCzeigevergleichskurvefuerphasendiagramm;PROCmodellwertefuervergleich(OUTPUT VARseite,INT CONSToben,LOESUNG CONSToriginal,INT CONSTunten,LOESUNG CONSTvergleich):FILE VARzfile;zfile:=modellwerteausgeben(original);modify(zfile);toline(zfile,1);insertrecord(zfile);writerecord(zfile,meldungstext(oueberschrift));toline(zfile,2);insertrecord(zfile);writerecord(zfile," ");replace(seite,oben,zfile);zfile:=modellwerteausgeben(vergleich);modify(zfile);toline(zfile,1);insertrecord(zfile);writerecord(zfile,meldungstext(vueberschrift));toline(zfile,2);insertrecord(zfile);writerecord(zfile," ");replace(seite,unten,zfile);END PROCmodellwertefuervergleich;PROCforgetds:forget("groessen vergl",quiet);forget("ausvergl",quiet);forget("ausvergl2",quiet);END PROCforgetds;PROCberechnefortfuehrung(LOESUNG VARoriginal,gesamtloesung,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof):ZUSTAND VARstartwert:=neuerzustand(dimension),letzterpunkt:=letzterwert(LOESUNGSABSCHNITTgesamtloesung);INT VARi;FORiFROM1UPTOdimensionREPreplace(startwert,i,(letzterpunktSUBi));PER KURVE VARzkurve1,zkurve2;gibberechnungsstandzeileaus;zkurve1:=kurve1(PROCf,PROCcof,startwert,zustandunteregrenze,zustandoberegrenze,letztezeit(LOESUNGSABSCHNITTgesamtloesung),DAUERoriginal,PARAMETERSATZgesamtloesung,anzahlbeobachtungspunkte,codimension,"fortfuehrung",fehlercode);zkurve2:=LOESUNGSABSCHNITTgesamtloesung;zkurve2CATzkurve1;forget("fortfuehrung",quiet);gesamtloesungLOESUNGSABSCHNITTzkurve2;gesamtloesungDAUER(letztezeit(LOESUNGSABSCHNITTgesamtloesung)-(STARTZEIToriginal));pausebeifehlern;END PROCberechnefortfuehrung;PROCtabelleaufbereitetdrucken(TEXT CONSTfname,INT CONSTspaltenbeginn,zeilenbeginn,spaltenbreite,INT VARseitenzahl,INT VARret):FILE VARf,fdruck;INT VARdateibreite,dateilaenge,i,j,verfuegbarerplatz,zulaessigebreite;TEXT CONSTneuername:=fname+"."+timeofday+text(seitenzahl);TEXT VARzeile,druckzeile;testeumfangderzudruckendendatei;bereitedateiauf;ret:=erfolgreicherdruckversuch(neuername);IFret=druckokTHENforget(neuername,quiet);ELSE END IF.testeumfangderzudruckendendatei:f:=sequentialfile(input,fname);dateilaenge:=lines(f);dateibreite:=0;WHILE NOTeof(f)REPgetline(f,zeile);IFlength(zeile)>dateibreiteTHENdateibreite:=length(zeile)END IF END REP;verfuegbarerplatz:=drucklaenge-zeilenbeginn+1;verfuegbarerplatzDECR5;zulaessigebreite:=0;REPzulaessigebreiteINCRspaltenbreiteUNTILzulaessigebreite>druckbreite-spaltenbeginn+1END REP;zulaessigebreiteDECRspaltenbreite.bereitedateiauf:INT VARspaltenpointer,zeilenpointer;modify(f);fdruck:=sequentialfile(output,neuername);spaltenpointer:=spaltenbeginn;WHILEspaltenpointer<dateibreiteREPschreibeseiten;seitenzahlINCR1;spaltenpointerINCRzulaessigebreiteEND REP.schreibeseiten:zeilenpointer:=zeilenbeginn;REPschreibekopfzeilen;schreiberumpfzeilenEND REP;.schreibekopfzeilen:putline(fdruck,seitenvorschub);putline(fdruck,headanfang);putline(fdruck,auskunftstext(produktname)+nummerierung+text(seitenzahl));line(fdruck);putline(fdruck,center+modellbezeichnung);putline(fdruck,headende);line(fdruck,2);FORjFROM1UPTOzeilenbeginn-1REP
+druckzeile:=niltext;toline(f,j);readrecord(f,zeile);druckzeileCATsubtext(zeile,1,spaltenbeginn-1);druckzeileCATsubtext(zeile,spaltenpointer,spaltenpointer+zulaessigebreite);putline(fdruck,druckzeile)END REP.schreiberumpfzeilen:FORiFROM1UPTOverfuegbarerplatzREPdruckzeile:=niltext;toline(f,zeilenpointer);readrecord(f,zeile);druckzeileCATsubtext(zeile,1,spaltenbeginn-1);druckzeileCATsubtext(zeile,spaltenpointer,spaltenpointer+zulaessigebreite);putline(fdruck,druckzeile);zeilenpointerINCR1;IFzeilenpointer>dateilaengeTHEN LEAVEschreibeseitenEND IF END REP.END PROCtabelleaufbereitetdrucken;PROCdruckemodellwerteaus(LOESUNG CONSTloesungx,INT VARseitenzahl,INT VARret):FILE VARmdw,fdruck;TEXT VARzeilentext,eindeutigerwertname;initialisieredruckdateimitueberschrift;lesemodellwertdateiein;druckemodellwerte;.initialisieredruckdateimitueberschrift:mdw:=modellwerteausgeben(loesungx);eindeutigerwertname:=dateimodellwerte+"."+timeofday+text(seitenzahl);IFexists(eindeutigerwertname)THENforget(eindeutigerwertname,quiet);FI;fdruck:=sequentialfile(output,eindeutigerwertname);putline(fdruck,seitenvorschub);putline(fdruck,headanfang);putline(fdruck,auskunftstext(produktname)+nummerierung+text(seitenzahl));line(fdruck);putline(fdruck,center+modellbezeichnung);putline(fdruck,headende);line(fdruck,2);.lesemodellwertdateiein:input(mdw);WHILE NOTeof(mdw)REPgetline(mdw,zeilentext);putline(fdruck,zeilentext);PER;.druckemodellwerte:seitenzahlINCR1;ret:=erfolgreicherdruckversuch(eindeutigerwertname);IFret=druckokTHENforget(dateimodellwerte,quiet);forget(eindeutigerwertname,quiet);FI;.END PROCdruckemodellwerteaus;INT PROCerfolgreicherdruckversuch(TEXT CONSTdatname):disablestop;IFexiststask(printertaskname)THEN IFstatus(/printertaskname)=2THENsicherezuprinterELSEenablestop;mldrucktasknichtempfangsbereitFI ELSEenablestop;mldruckertaskexistiertnichtFI.sicherezuprinter:commanddialogue(FALSE);save(datname,/printertaskname);commanddialogue(TRUE);IFiserrorTHENclearerror;enablestop;mldruckunmoeglichELSEenablestop;druckokEND IF.END PROCerfolgreicherdruckversuch;END PACKETlssimulation;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls starte bearbeitung b/app/schulis-simulationssystem/3.0/src/ls starte bearbeitung
new file mode 100644
index 0000000..f8cf9d4
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls starte bearbeitung
@@ -0,0 +1,2 @@
+PACKETlsstartebearbeitungDEFINESwahlderbearbeitung:PROCwahlderbearbeitung(ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof,PROC(LOESUNG VAR,BOOL VAR,TEXT VAR)zusatzdarst):enablestop;LETabbruch=0,btbuchstabenmitdemo=57,btauswahlhead=60,btalternmitdemo=61,btalternohnedemo=62,btbuchstabenohnedemo=70;TEXT CONSTreturn:=code(13),info:=" "+modellbezeichnung+return+return;INT VARauswahl;WINDOW VARfenster:=grossesrahmenfenster;page;show(fenster);REPclearbuffer;IFexists(vorgabekurve)ANDexists(vorgabevergleichskurve)THENauswahlmitangebotdemoELSEauswahlohneangebotdemoFI;UNTILauswahl=abbruchPER;.auswahlmitangebotdemo:auswahl:=boxalternative(fenster,info,anwendungstext(btalternmitdemo),anwendungstext(btbuchstabenmitdemo),5,FALSE);SELECTauswahlOF CASE1,101,106:handlemenu("Simulation",PROCf,PROCcof,PROCzusatzdarst);page;show(fenster);CASE2,102,107:demonstration(PROCzusatzdarst);page;show(fenster);CASE3,103,108:infoszummodell;page(fenster);CASE5,105,110:auswahl:=abbruch;OTHERWISE END SELECT;.auswahlohneangebotdemo:auswahl:=boxalternative(fenster,info,anwendungstext(btalternohnedemo),anwendungstext(btbuchstabenohnedemo),5,FALSE);SELECTauswahlOF CASE1,101,105:handlemenu("Simulation",PROCf,PROCcof,PROCzusatzdarst);page;show(fenster);CASE2,102,106:infoszummodell;page(fenster);CASE4,104,108:auswahl:=abbruch;OTHERWISE END SELECT;.END PROCwahlderbearbeitung;END PACKETlsstartebearbeitung;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls zustaende parameter kurve b/app/schulis-simulationssystem/3.0/src/ls zustaende parameter kurve
new file mode 100644
index 0000000..4b16b2a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls zustaende parameter kurve
@@ -0,0 +1,6 @@
+PACKETzustaendeparameterkurveDEFINESneuekurve,neuerzustand,text,neuerparameter,platz,replace,SUB,schreibe,schreibebeobachtungspunkt,minimalwerte,maximalwerte,leseerstenbeobachtungspunkt,lesenaechstenbeobachtungspunkt,leseersten,lesenaechsten,lesevorherigen,naechstezeit,vorherigezeit,KURVE,ZUSTAND,PARAMETER,DSUB,:=,CAT,copy,zustand,parameter,endederloesung,anfangderloesung,endedestabspeichers,letzterwert,letztezeit,PLUS,kurve1,epsilon,imdefbereich:LETmaxdimension=20;LETmaxpunktspeicher=1000,maxbpunktspeicher=1000;LETreallaenge=8;LETtypnrkurve=1088;REAL CONSTdelta:=0.001;REAL CONSTminusdelta:=-0.001;LETstoptaste="a",abbruch=36,kurveleer=99;TYPE ZUSTAND=STRUCT(ROWmaxdimensionREALkoordinate,INTdimension);TYPE PARAMETER=STRUCT(ZUSTANDvektor);LET PUNKT=STRUCT(TEXTvektor,REALzeit);LET PUNKTE=STRUCT(INTzeilen,INTzeilenposition,ROWmaxpunktspeicherPUNKTtupel);LET BEOBACHTUNGSPUNKTE=STRUCT(INTzeilen,INTzeilenposition,ROWmaxbpunktspeicherPUNKTtupel);TYPE KURVE=BOUND STRUCT(INTinternedimension,PUNKTEpunkte,TEXTdsname,BEOBACHTUNGSPUNKTEbpunkte,ZUSTANDminimum,maximum);REAL VAReps:=0.0000000005;LETminh=0.00005;REAL CONSTnull:=1.0/1.0e60;PROCepsilon(REAL CONSTepseingabe):eps:=epseingabeEND PROCepsilon;ZUSTAND OP+(ZUSTAND CONSTa,ZUSTAND CONSTb):INT VARi;ZUSTAND VARz;FORiFROM1UPTOa.dimensionREPz.koordinate(i):=a.koordinate(i)+b.koordinate(i)PER;z.dimension:=a.dimension;z.END OP+;ZUSTAND OP PLUS(ZUSTAND CONSTa,ZUSTAND CONSTb):INT VARi;ZUSTAND VARz;FORiFROM1UPTOa.dimensionREPz.koordinate(i):=a.koordinate(i)PER;FORiFROMa.dimension+1UPTOa.dimension+b.dimensionREPz.koordinate(i):=b.koordinate(i-a.dimension)PER;z.dimension:=a.dimension+b.dimension;z.END OP PLUS;ZUSTAND OP*(REAL CONSTzahl,ZUSTAND CONSTb):INT VARi;ZUSTAND VARz;z.dimension:=b.dimension;FORiFROM1UPTOb.dimensionREPz.koordinate(i):=zahl*b.koordinate(i)PER;z.END OP*;ZUSTAND OP-(ZUSTAND CONSTa,ZUSTAND CONSTb):a+((-1.0)*b)END OP-;INT OP DSUB(ZUSTAND CONSTz):z.dimensionEND OP DSUB;ZUSTAND PROCneuerzustand(INT CONSTdimension):ZUSTAND VARz;INT VARi;FORiFROM1UPTOdimensionREPz.koordinate(i):=0.0PER;z.dimension:=dimension;zEND PROCneuerzustand;PARAMETER PROCneuerparameter(INT CONSTdimension):PARAMETER VARp;p.vektor:=neuerzustand(dimension);pEND PROCneuerparameter;PROCreplace(ZUSTAND VARzustand,INT CONSTi,REAL CONSTwert):IFdecimalexponent(wert)<-126THENzustand.koordinate(i):=0.0ELSEzustand.koordinate(i):=wertFI END PROCreplace;PROCreplace(PARAMETER VARparameter,INT CONSTindex,REAL CONSTwert):replace(parameter.vektor,index,wert);END PROCreplace;REAL OP SUB(ZUSTAND CONSTzustand,INT CONSTi):zustand.koordinate(i)ENDOP SUB;REAL OP SUB(PARAMETER CONSTparameter,INT CONSTi):parameter.vektorSUBiENDOP SUB;TEXT PROCtext(ZUSTAND CONSTz):INT VARi;TEXT VARt:=(z.dimension*reallaenge)*"�";FORiFROM1UPTOz.dimensionREP IFdecimalexponent(z.koordinate(i))<-126THENreplace(t,i,0.0)ELSEreplace(t,i,z.koordinate(i))FI PER;tEND PROCtext;TEXT PROCtext(PARAMETER CONSTparameter):text(parameter.vektor)END PROCtext;ZUSTAND PROCzustand(TEXT CONSTt):INT VARi;ZUSTAND VARz:=neuerzustand(length(t)DIVreallaenge);FORiFROM1UPTOz.dimensionREPz.koordinate(i):=tRSUBiPER;zEND PROCzustand;PARAMETER PROCparameter(TEXT CONSTt):PARAMETER VARp;p.vektor:=zustand(t);pEND PROCparameter;OP:=(KURVE VARkurve,DATASPACE CONSTspace):CONCR(kurve):=spaceENDOP:=;DATASPACE PROCneuekurve(INT CONSTdimension,TEXT CONSTdsname):KURVE VARkurve;forget(dsname,quiet);kurve:=new(dsname);kurve.dsname:=dsname;kurve.minimum:=neuerzustand(dimension);kurve.maximum:=neuerzustand(dimension);kurve.internedimension:=dimension+1;kurve.punkte.zeilenposition:=1;kurve.punkte.zeilen:=0;kurve.bpunkte.zeilenposition:=1;kurve.bpunkte.zeilen:=0;type(old(dsname),typnrkurve);old(dsname).ENDPROCneuekurve;PROCschreibe(KURVE VARkurve,REAL CONSTzeit,ZUSTAND CONSTz):IFnochplatzda(kurve)THEN IFkurve.punkte.zeilenposition=1THENkurve.minimum:=z;kurve.maximum:=z;ELSEpruefeobkomponentenminimalodermaximalFI;kurve.punkte.tupel(kurve.punkte.zeilenposition).vektor:=text(z);IFdecimalexponent(zeit)<-126
+THENkurve.punkte.tupel(kurve.punkte.zeilenposition).zeit:=0.0ELSEkurve.punkte.tupel(kurve.punkte.zeilenposition).zeit:=zeit;FI;kurve.punkte.zeilenpositionINCR1;kurve.punkte.zeilenINCR1FI.pruefeobkomponentenminimalodermaximal:INT VARi;FORiFROM1UPTOz.dimensionREP IFz.koordinate(i)<kurve.minimum.koordinate(i)THENkurve.minimum.koordinate(i):=z.koordinate(i)ELIFz.koordinate(i)>kurve.maximum.koordinate(i)THENkurve.maximum.koordinate(i):=z.koordinate(i)FI PER.ENDPROCschreibe;PROCschreibebeobachtungspunkt(KURVE VARkurve,REAL CONSTzeit,ZUSTAND CONSTz):IFnochtabplatzda(kurve)CANDnochplatzda(kurve)THENschreibe(kurve,zeit,z);schreibeintabspeicherFI.schreibeintabspeicher:kurve.bpunkte.tupel(kurve.bpunkte.zeilenposition).vektor:=text(z);kurve.bpunkte.tupel(kurve.bpunkte.zeilenposition).zeit:=zeit;kurve.bpunkte.zeilenpositionINCR1;kurve.bpunkte.zeilenINCR1.ENDPROCschreibebeobachtungspunkt;ZUSTAND PROCminimalwerte(KURVE CONSTkurve):kurve.minimumENDPROCminimalwerte;ZUSTAND PROCmaximalwerte(KURVE CONSTkurve):kurve.maximumENDPROCmaximalwerte;BOOL PROCnochplatzda(KURVE VARkurve):NOT(kurve.punkte.zeilenposition>maxpunktspeicher)END PROCnochplatzda;BOOL PROCnochtabplatzda(KURVE VARkurve):NOT(kurve.bpunkte.zeilenposition>maxbpunktspeicher)END PROCnochtabplatzda;BOOL PROCplatz(KURVE CONSTkurve):NOT(kurve.punkte.zeilenposition>maxpunktspeicher)END PROCplatz;PROCleseersten(KURVE VARkurve,REAL VARzeit,ZUSTAND VARz):kurve.punkte.zeilenposition:=1;lieszeit;lieskoordinaten.lieszeit:zeit:=kurve.punkte.tupel(kurve.punkte.zeilenposition).zeit.lieskoordinaten:z:=zustand(kurve.punkte.tupel(kurve.punkte.zeilenposition).vektor).END PROCleseersten;PROClesenaechsten(KURVE VARkurve,REAL VARzeit,ZUSTAND VARz):IF NOTendederloesung(kurve)THENkurve.punkte.zeilenpositionINCR1;lieszeit;lieskoordinaten;ELSEz:=neuerzustand(kurve.internedimension-1)FI.lieszeit:zeit:=kurve.punkte.tupel(kurve.punkte.zeilenposition).zeit.lieskoordinaten:z:=zustand(kurve.punkte.tupel(kurve.punkte.zeilenposition).vektor).END PROClesenaechsten;PROClesevorherigen(KURVE VARkurve,REAL VARzeit,ZUSTAND VARz):IF NOTanfangderloesung(kurve)THENkurve.punkte.zeilenpositionDECR1;lieszeit;lieskoordinaten;ELSEz:=neuerzustand(kurve.internedimension-1)FI.lieszeit:zeit:=kurve.punkte.tupel(kurve.punkte.zeilenposition).zeit.lieskoordinaten:z:=zustand(kurve.punkte.tupel(kurve.punkte.zeilenposition).vektor).END PROClesevorherigen;PROCvorherigezeit(KURVE VARkurve,REAL VARzeit):IF NOTanfangderloesung(kurve)THENlieszeit;FI.lieszeit:zeit:=kurve.punkte.tupel(kurve.punkte.zeilenposition-1).zeit.END PROCvorherigezeit;PROCnaechstezeit(KURVE VARkurve,REAL VARzeit):IF NOTendederloesung(kurve)THENlieszeit;FI.lieszeit:zeit:=kurve.punkte.tupel(kurve.punkte.zeilenposition+1).zeit.END PROCnaechstezeit;PROCleseerstenbeobachtungspunkt(KURVE VARkurve,REAL VARzeit,ZUSTAND VARz):kurve.bpunkte.zeilenposition:=1;lieszeit;lieskoordinaten;kurve.bpunkte.zeilenpositionINCR1.lieszeit:zeit:=kurve.bpunkte.tupel(kurve.bpunkte.zeilenposition).zeit.lieskoordinaten:z:=zustand(kurve.bpunkte.tupel(kurve.bpunkte.zeilenposition).vektor).END PROCleseerstenbeobachtungspunkt;PROClesenaechstenbeobachtungspunkt(KURVE VARkurve,REAL VARzeit,ZUSTAND VARz):IF NOTendedestabspeichers(kurve)THENzeitlesen;koordinatenlesen;kurve.bpunkte.zeilenpositionINCR1ELSEz:=neuerzustand(kurve.internedimension-1)FI.zeitlesen:zeit:=kurve.bpunkte.tupel(kurve.bpunkte.zeilenposition).zeit.koordinatenlesen:z:=zustand(kurve.bpunkte.tupel(kurve.bpunkte.zeilenposition).vektor).END PROClesenaechstenbeobachtungspunkt;BOOL PROCendederloesung(KURVE VARkurve):kurve.punkte.zeilenposition>=kurve.punkte.zeilenEND PROCendederloesung;BOOL PROCanfangderloesung(KURVE VARkurve):kurve.punkte.zeilenposition<=1END PROCanfangderloesung;BOOL PROCendedestabspeichers(KURVE CONSTkurve):kurve.bpunkte.zeilenposition>kurve.bpunkte.zeilenEND PROCendedestabspeichers;OP:=(KURVE VARa,KURVE CONSTb):CONCR(a):=old(b.dsname)END OP:=;PROCcopy(KURVE VARa,TEXT CONSTdsname,KURVE CONSTb):IFexists(dsname)THENforget(dsname,
+quiet)FI;copy(b.dsname,dsname);CONCR(a):=old(dsname);a.dsname:=dsname;ENDPROCcopy;OP:=(ZUSTAND VARa,ZUSTAND CONSTb):a.dimension:=b.dimension;INT VARi;FORiFROM1UPTOb.dimensionREP IFdecimalexponent(b.koordinate(i))<-126THENa.koordinate(i):=0.0ELSEa.koordinate(i):=b.koordinate(i)FI PER END OP:=;OP:=(PARAMETER VARa,PARAMETER CONSTb):a.vektor:=b.vektorEND OP:=;OP CAT(KURVE VARa,b):ersterpunkt;ersterbpunkt;WHILEnochplatzda(a)CAND NOTendederloesung(b)REPfuegenaechstenpunktanPER;WHILEnochtabplatzda(a)CAND NOTendedestabspeichers(b)REPfuegenaechstenbeobachtungspunktanPER.ersterpunkt:REAL VARt;ZUSTAND VARz;leseersten(b,t,z);a.punkte.zeilenposition:=a.punkte.zeilen+1.ersterbpunkt:leseerstenbeobachtungspunkt(b,t,z);a.bpunkte.zeilenposition:=a.bpunkte.zeilen+1.fuegenaechstenpunktan:lesenaechsten(b,t,z);schreibe(a,t,z).fuegenaechstenbeobachtungspunktan:lesenaechstenbeobachtungspunkt(b,t,z);a.bpunkte.tupel(a.bpunkte.zeilenposition).vektor:=text(z);a.bpunkte.tupel(a.bpunkte.zeilenposition).zeit:=t;a.bpunkte.zeilenpositionINCR1;a.bpunkte.zeilenINCR1.END OP CAT;ZUSTAND PROCletzterwert(KURVE CONSTkurve):zustand(kurve.punkte.tupel(kurve.punkte.zeilen).vektor)END PROCletzterwert;REAL PROCletztezeit(KURVE CONSTkurve):IFkurve.punkte.zeilen=0THEN0.0ELSEkurve.punkte.tupel(kurve.punkte.zeilen).zeitFI END PROCletztezeit;REAL CONSTsechzehnneuntel:=16.0/9.0,vierundsechzigneuntel:=64.0/9.0,zweihundertsechsundfuenfzigneuntel:=256.0/9.0,neunviertel:=9.0/4.0;PROCdiffsys(REAL VARx,h0,zwischenzeit,ZUSTAND VARy,s,zwischenzustand,PARAMETER CONSTp,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)funk):REAL VARa,b,b1,c,g,u,v,ta,fc;INT VARi,j,k,kk,jj,l,m,r,sr,n,kplus1,jplus1,jjplus1;ZUSTAND VARya,yl,ym,dy,dz;BOOL VARkonv,bo,bh;ROW7ZUSTAND VARdt;ROW7REAL VARd;ROW8ZUSTAND VARyg,yh;enablestop;initialisierungen;berechneschrittweitefallsnoetig;REPa:=h0+x;fc:=1.5;bo:=FALSE;m:=1;r:=2;sr:=3;jj:=-1;FORjFROM0UPTO9REPabbruchfallsgewuenscht;jplus1:=j+1;IFboTHENd(2):=sechzehnneuntel;d(4):=vierundsechzigneuntel;d(6):=zweihundertsechsundfuenfzigneuntelELSEd(2):=neunviertel;d(4):=9.0;d(6):=36.0FI;konv:=(j>2);IFj>6THENl:=6;d(7):=64.0;fc:=0.6*fcELSEl:=j;d(jplus1):=real(m*m)FI;m:=m+m;g:=h0/real(m);b:=g+g;IFbhCANDj<8THEN FORiFROM1UPTOnREPym.koordinate(i):=yh(jplus1).koordinate(i);yl.koordinate(i):=yg(jplus1).koordinate(i)PER ELSEkk:=(m-2)DIV2;m:=m-1;FORiFROM1UPTOnREPyl.koordinate(i):=ya.koordinate(i);ym.koordinate(i):=ya.koordinate(i)+(g*dz.koordinate(i));PER;FORkFROM1UPTOmREPdy:=funk(x+(real(k)*g),ym,p);FORiFROM1UPTOnREPu:=(yl.koordinate(i))+b*(dy.koordinate(i));yl.koordinate(i):=ym.koordinate(i);ym.koordinate(i):=u;u:=abs(u);IFu>s.koordinate(i)THENs.koordinate(i):=uFI PER;IFk=kkCANDk<>2THENjj:=1+jj;jjplus1:=jj+1;yh(jjplus1).koordinate:=ym.koordinate;zwischenzustand.koordinate:=ym.koordinate;yg(jjplus1).koordinate:=yl.koordinate;zwischenzeit:=x+(real(k+1)*g);FI PER FI;dy:=funk(a,ym,p);FORiFROM1UPTOnREPv:=dt(1).koordinate(i);dt(1).koordinate(i):=(ym.koordinate(i)+yl.koordinate(i)+g*dy.koordinate(i))/2.0;c:=dt(1).koordinate(i);ta:=c;FORkFROM1UPTOlREPkplus1:=k+1;b1:=d(kplus1)*v;b:=b1-c;u:=v;IFabs(b)>0.0THENb:=(c-v)/b;u:=c*b;c:=b1*b;FI;v:=dt(kplus1).koordinate(i);dt(kplus1).koordinate(i):=u;ta:=u+taPER;IFabs(y.koordinate(i)-ta)>eps*s.koordinate(i)THENkonv:=FALSE FI;y.koordinate(i):=taPER;IFkonvTHENendeFI;d(3):=4.0;d(5):=16.0;bo:=NOTbo;m:=r;r:=sr;sr:=m+mPER;bh:=NOTbh;IFdecimalexponent(h0)>-120THENh0:=(h0/2.0);IFkleinstmoeglicheschrittweite(x,h0)>h0THENh0:=h0+h0;endeFI;ELSEendeFI PER.abbruchfallsgewuenscht:IFincharety=stoptasteTHENerrorstop(abbruch,"");FI;.initialisierungen:n:=y.dimension;IFn=0THENzwischenzeit:=x+h0/2.0;x:=x+h0;LEAVEdiffsys;FI;ya.dimension:=n;yl.dimension:=n;ym.dimension:=n;dy.dimension:=n;dz.dimension:=n;FORiFROM1UPTOnREPya.koordinate(i):=0.0;yl.koordinate(i):=0.0;ym.koordinate(i):=0.0;dy.koordinate(i):=0.0;dz.koordinate(i):=0.0;PER;FORiFROM1UPTO7REP FORjFROM1UPTOnREPdt(i).koordinate(j):=0.0PER;d(i):=0.0;dt(i).dimension:=n;PER;FORiFROM1UPTO8REP FORjFROM1UPTOnREPyg(i).
+koordinate(j):=0.0;yh(i).koordinate(j):=0.0PER;yg(i).dimension:=n;yh(i).dimension:=n;PER;dz:=funk(x,y,p);bh:=FALSE;ya.koordinate:=y.koordinate;.berechneschrittweitefallsnoetig:IFkomponentennahe0THENberechneschrittweite(y,dz,x,h0)FI.komponentennahe0:FORiFROM1UPTOnREP IFabs(ySUBi)<minhCORabs(dzSUBi)<minhTHEN LEAVEkomponentennahe0WITH TRUE FI;PER;FALSE.ende:h0:=fc*h0;x:=a;LEAVEdiffsys.ENDPROCdiffsys;PROCberechneschrittweite(ZUSTAND CONSTy,dz,REAL CONSTt,REAL VARh0):INT CONSTn:=y.dimension;INT VARi;REAL CONSTh:=h0;FORiFROM1UPTOnREP IFabs(dzSUBi)>0.0CANDabs(ySUBi)>0.0THENh0:=min(h0,abs((ySUBi)/(dzSUBi)));FI;PER;IFh0=0.0THENh0:=hFI;h0:=max(h0,kleinstmoeglicheschrittweite(t,h0));.END PROCberechneschrittweite;REAL PROCkleinstmoeglicheschrittweite(REAL CONSTt,h0):REAL VARzw:=5.0;INT CONSTexponentvont:=decimalexponent(t);IFt=0.0THENh0ELIF(exponentvont-decimalexponent(h0))>12THENsetexp(exponentvont-12,zw);zwELSEh0FI.END PROCkleinstmoeglicheschrittweite;KURVE PROCkurve1(ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)fkt,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cofkt,ZUSTAND CONSTanfangswert,ZUSTAND CONSTunteregrenze,oberegrenze,REAL CONSTanfangszeitpunkt,REAL CONSTbeobachtungsdauer,PARAMETER CONSTparameter,INT CONSTbeo,codimension,TEXT CONSTdsname,INT VARfehler):KURVE VARkurve:=neuekurve(codimension+anfangswert.dimension,dsname);bereiteanfangvor;bearbeiteerstenpunkt;bearbeiteallenaechstenpunkte;kurve.bereiteanfangvor:INT VARm,n:=anfangswert.dimension;REAL VARbeobachtungszeitpunkt,beobachtungsabstand:=0.0,t,h0,h,hmax,zwischenzeit;ZUSTAND VARx:=neuerzustand(n),zwischenzustand:=neuerzustand(n),s:=neuerzustand(n);beobachtungsabstand:=beobachtungsdauer/real(beo-1);beobachtungsabstand:=max(kleinstmoeglicheschrittweite(anfangszeitpunkt,beobachtungsabstand),beobachtungsabstand);h0:=beobachtungsabstand;hmax:=h0;x:=anfangswert;t:=anfangszeitpunkt;berechneschrittweitemittest;beobachtungszeitpunkt:=anfangszeitpunkt;fehler:=0.berechneschrittweitemittest:disablestop;berechneschrittweite(x,fkt(t,x,parameter),t,h0);IFerrorda(fehler)CORbeobachtungsdauer=0.0THENfehler:=kurveleer;LEAVEkurve1WITHkurveFI.bearbeiteerstenpunkt:schreibeundtestebeomitcof(PROCcofkt,kurve,anfangszeitpunkt,anfangswert,parameter,fehler);IFaufgetreten(fehler)CORbeobachtungsdauer=0.0THENfehler:=kurveleer;LEAVEkurve1WITHkurveFI.bearbeiteallenaechstenpunkte:INT VARcursx:=0,cursy:=0;getcursor(cursx,cursy);FORmFROM1UPTObeo-1REPcursor(cursx,cursy);out(text(m));beobachtungszeitpunkt:=beobachtungszeitpunkt+beobachtungsabstand;verarbeitenaechstepunkte;IFaufgetreten(fehler)THEN LEAVEbearbeiteallenaechstenpunkteFI;schreibeundtestepunktmitcof(PROCcofkt,kurve,zwischenzeit,zwischenzustand,parameter,fehler);IF NOTaufgetreten(fehler)THENschreibeundtestebeomitcof(PROCcofkt,kurve,t,x,parameter,fehler);FI;IFaufgetreten(fehler)THEN LEAVEkurve1WITHkurveFI;PER.verarbeitenaechstepunkte:REP IFh0>hmaxTHENh0:=hmaxFI;IFt+h0>beobachtungszeitpunktTHENh:=h0;h0:=beobachtungszeitpunkt-t;IFh0>=kleinstmoeglicheschrittweite(t,h0)THENerhaltenaechstenpunkt;ELSE LEAVEverarbeitenaechstepunkteFI;h0:=hELSEerhaltenaechstenpunktFI;IFabs(t-beobachtungszeitpunkt)<nullTHEN LEAVEverarbeitenaechstepunkteELIFt>beobachtungszeitpunktTHEN LEAVEverarbeitenaechstepunkteFI;schreibepunktinkurvePER.erhaltenaechstenpunkt:disablestop;diffsys(t,h0,zwischenzeit,x,s,zwischenzustand,parameter,PROCfkt);IF NOTerrorda(fehler)THENfehler:=imdefbereich(x,unteregrenze,oberegrenze);FI;IFaufgetreten(fehler)THEN LEAVEverarbeitenaechstepunkteFI;.schreibepunktinkurve:schreibeundtestepunktmitcof(PROCcofkt,kurve,zwischenzeit,zwischenzustand,parameter,fehler);IFaufgetreten(fehler)THEN LEAVEkurve1WITHkurveFI.END PROCkurve1;BOOL PROCaufgetreten(INT CONSTfehler):fehler<>0.END PROCaufgetreten;PROCschreibeundtestepunktmitcof(ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cofkt,KURVE VARkurve,REAL CONSTzwischenzeit,ZUSTAND CONSTzwischenzustand,PARAMETER CONSTparamliste,INT VARfehlernr):ZUSTAND VARhilfsvar;disablestop;hilfsvar:=cofkt(
+zwischenzeit,zwischenzustand,paramliste);IF NOTerrorda(fehlernr)THENschreibe(kurve,zwischenzeit,zwischenzustandPLUShilfsvar);FI;END PROCschreibeundtestepunktmitcof;PROCschreibeundtestebeomitcof(ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cofkt,KURVE VARkurve,REAL CONSTzeitpunkt,ZUSTAND CONSTzwischenzustand,PARAMETER CONSTparamliste,INT VARfehlernr):ZUSTAND VARhilfsvar;disablestop;hilfsvar:=cofkt(zeitpunkt,zwischenzustand,paramliste);IF NOTerrorda(fehlernr)THENschreibebeobachtungspunkt(kurve,zeitpunkt,zwischenzustandPLUShilfsvar);FI;.END PROCschreibeundtestebeomitcof;BOOL PROCerrorda(INT VARerrornr):IFiserrorTHENsetzeerrornr;clearerror;enablestop;TRUE ELSEerrornr:=0;FALSE FI.setzeerrornr:IFerrorcode=abbruchTHENerrornr:=abbruchELSEerrornr:=1FI.END PROCerrorda;INT PROCimdefbereich(ZUSTAND CONSTz,zug,zog):INT CONSTn:=z.dimension;INT VARi,fehler:=0;FORiFROM1UPTOnREPpruefekomponentePER;fehler.pruefekomponente:IF(z.koordinate(i)-zug.koordinate(i)<minusdelta)COR(z.koordinate(i)-zog.koordinate(i)>delta)THENfehler:=2FI.END PROCimdefbereich;END PACKETzustaendeparameterkurve;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls-DIALOG 1.korrektur b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 1.korrektur
new file mode 100644
index 0000000..7ef9540
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 1.korrektur
@@ -0,0 +1,4 @@
+PACKETlsdialog1DEFINESeckeobenlinks,balkenoben,eckeobenrechts,balkenrechts,eckeuntenlinks,balkenlinks,eckeuntenrechts,balkenunten,waagerecht,senkrecht,kreuz,cursoron,cursoroff,clearbuffer,clearbufferandcount,center,invers,page,pageup,outframe,outmenuframe,eraseframe,stdgraphicchar,ft20graphicchar,ibmgraphicchar,AREA,:=,fill,areax,areay,areaxsize,areaysize,cursor,getcursor,out,outinvers,outwithbeam,outinverswithbeam,erase,eraseinvers,erasewithbeam,writepermanentfootnote,oldfootnote,footnote:TYPE AREA=STRUCT(INTx,y,xsize,ysize);LETblank=" ",markein="",markaus="",cleol="�";TEXT CONSTfehlermeldung:="Unzulässige Größen!";TEXT VAReol:="+",eor:="+",eul:="+",eur:="+",bo:="+",br:="+",bl:="+",bu:="+",waa:="-",sen:="|",kr:="+",cursorsichtbar:="",cursorunsichtbar:="";TEXT VARpermanentefusszeile:="";PROCwritepermanentfootnote(TEXT CONSTt):permanentefusszeile:=t;footnote(t)END PROCwritepermanentfootnote;PROColdfootnote:footnote(permanentefusszeile)END PROColdfootnote;PROCfootnote(TEXT CONSTt):INT VARx,y;getcursor(x,y);cursor(1,24);out(invers(text(t,76)));cursor(x,y)END PROCfootnote;TEXT PROCeckeobenlinks:eolEND PROCeckeobenlinks;TEXT PROCeckeobenrechts:eorEND PROCeckeobenrechts;TEXT PROCeckeuntenlinks:eulEND PROCeckeuntenlinks;TEXT PROCeckeuntenrechts:eurEND PROCeckeuntenrechts;TEXT PROCbalkenoben:boEND PROCbalkenoben;TEXT PROCbalkenlinks:blEND PROCbalkenlinks;TEXT PROCbalkenrechts:brEND PROCbalkenrechts;TEXT PROCbalkenunten:buEND PROCbalkenunten;TEXT PROCwaagerecht:waaEND PROCwaagerecht;TEXT PROCsenkrecht:senEND PROCsenkrecht;TEXT PROCkreuz:krEND PROCkreuz;PROCeckeobenlinks(TEXT CONSTt):eol:=tEND PROCeckeobenlinks;PROCeckeobenrechts(TEXT CONSTt):eor:=tEND PROCeckeobenrechts;PROCeckeuntenlinks(TEXT CONSTt):eul:=tEND PROCeckeuntenlinks;PROCeckeuntenrechts(TEXT CONSTt):eur:=tEND PROCeckeuntenrechts;PROCbalkenoben(TEXT CONSTt):bo:=tEND PROCbalkenoben;PROCbalkenlinks(TEXT CONSTt):bl:=tEND PROCbalkenlinks;PROCbalkenrechts(TEXT CONSTt):br:=tEND PROCbalkenrechts;PROCbalkenunten(TEXT CONSTt):bu:=tEND PROCbalkenunten;PROCwaagerecht(TEXT CONSTt):waa:=tEND PROCwaagerecht;PROCsenkrecht(TEXT CONSTt):sen:=tEND PROCsenkrecht;PROCkreuz(TEXT CONSTt):kr:=tEND PROCkreuz;PROCstdgraphicchar:eckeobenlinks("+");eckeobenrechts("+");eckeuntenlinks("+");eckeuntenrechts("+");balkenoben("+");balkenrechts("+");balkenlinks("+");balkenunten("+");waagerecht("-");senkrecht("|");kreuz("+");cursorsichtbar:="";cursorunsichtbar:=""END PROCstdgraphicchar;PROCft20graphicchar:eckeobenlinks("�R��S");eckeobenrechts("�RD�S");eckeuntenlinks("�RH�S");eckeuntenrechts("�RL�S");balkenoben("�RP�S");balkenrechts("�RT�S");balkenlinks("�RX�S");balkenunten("�R\�S");waagerecht("�R`�S");senkrecht("�Rd�S");kreuz("�Rh�S");cursorsichtbar:="�-1";cursorunsichtbar:="�-0";ft20statuszeilenausEND PROCft20graphicchar;PROCft20statuszeilenaus:out("�.A")END PROCft20statuszeilenaus;PROCft20statuszeilenan:out("�.�")END PROCft20statuszeilenan;PROCibmgraphicchar:eckeobenlinks("�");eckeobenrechts("�");eckeuntenlinks("̈");eckeuntenrechts("�");balkenoben("̗");balkenrechts("ω");balkenlinks("�");balkenunten("̊");waagerecht("̊");senkrecht("�");kreuz("�");cursorsichtbar:="";cursorunsichtbar:=""END PROCibmgraphicchar;PROCcursoron:out(cursorsichtbar)END PROCcursoron;PROCcursoroff:out(cursorunsichtbar)END PROCcursoroff;PROCcursoron(TEXT CONSTt):cursorsichtbar:=tEND PROCcursoron;PROCcursoroff(TEXT CONSTt):cursorunsichtbar:=tEND PROCcursoroff;PROCclearbuffer:REP UNTILincharety=""PER END PROCclearbuffer;INT PROCclearbufferandcount(TEXT CONSTzeichen):INT VARzaehler:=0;TEXT VARzeichenkette:="",ch;IFzeichen=""THENclearbuffer;LEAVEclearbufferandcountWITH0FI;ermittlediezeichenkette;untersucheaufvorhandenezeichen;zaehler.ermittlediezeichenkette:REPch:=incharety(1);zeichenketteCATchUNTILch=""PER.untersucheaufvorhandenezeichen:INT VARi;FORiFROM1UPTOlength(zeichenkette)REP IFpos(subtext(zeichenkette,i),zeichen)=1THENzaehlerINCR1FI PER.END PROCclearbufferandcount;TEXT PROCcenter(INT CONSTxsize,TEXT CONSTt):TEXT VARzeile:=compress(t
+);zeile:=((xsize-length(zeile))DIV2)*blank+zeile;zeileCAT(xsize-length(zeile))*blank;zeileEND PROCcenter;TEXT PROCcenter(TEXT CONSTt):center(79,t)END PROCcenter;TEXT PROCinvers(TEXT CONSTt):TEXT VARneu:=markein;neuCATt;neuCAT" ";neuCATmarkaus;neuEND PROCinvers;PROCpage(INT CONSTx,y,xsize,ysize):INT VARzeiger;IFx+xsize=80THENineinemstreichELSEputzevorsichtigFI;cursor(x,y).ineinemstreich:FORzeigerFROMyUPTOy+ysize-1REPcursor(x,zeiger);out(cleol)PER.putzevorsichtig:TEXT VARleerzeile:=xsize*blank;FORzeigerFROMyUPTOy+ysize-1REPcursor(x,zeiger);out(leerzeile)PER.END PROCpage;PROCpage(AREA CONSTa):page(a.x,a.y,a.xsize,a.ysize)END PROCpage;PROCpageup(INT CONSTx,y,xsize,ysize):INT VARzeiger;IFx+xsize=80THENineinemstreichELSEputzevorsichtigFI.ineinemstreich:FORzeigerFROMy+ysize-1DOWNTOyREPcursor(x,zeiger);out(cleol)PER.putzevorsichtig:TEXT VARleerzeile:=xsize*blank;FORzeigerFROMy+ysize-1DOWNTOyREPcursor(x,zeiger);out(leerzeile)PER.END PROCpageup;PROCpageup(AREA CONSTa):pageup(a.x,a.y,a.xsize,a.ysize)END PROCpageup;PROCoutframe(INT CONSTx,y,xsize,ysize):TEXT VARlinie:=(xsize-2)*waagerecht;INT VARzeiger;IFx<1CORy<1CORxsize<8CORysize<3CORx+xsize>80CORy+ysize>25THEN LEAVEoutframeFI;maleoben;maleseiten;maleunten.maleoben:cursor(x,y);out(eckeobenlinks);out(linie);out(eckeobenrechts).maleseiten:FORzeigerFROM1UPTOysize-2REPcursor(x,y+zeiger);out(senkrecht);cursor(x+xsize-1,y+zeiger);out(senkrecht)PER.maleunten:cursor(x,y+ysize-1);out(eckeuntenlinks);out(linie);out(eckeuntenrechts)END PROCoutframe;PROCoutframe(AREA CONSTa):IFa.x-1<1ORa.y-1<1ORa.xsize+2>79ORa.ysize+2>24ORa.x+a.xsize+1>80ORa.y+a.ysize+1>25THEN LEAVEoutframeFI;outframe(a.x-1,a.y-1,a.xsize+2,a.ysize+2)END PROCoutframe;PROCoutmenuframe(INT CONSTx,y,xsize,ysize):INT VARi;TEXT VARlinie;untersucheangaben;schreiberahmen.untersucheangaben:IFx<0CORy<0CORx+xsize>81CORy+ysize>26THEN LEAVEoutmenuframeFI.schreiberahmen:IFx=0CORy=0CORxsize=81CORysize=26THENlinie:=xsize*waagerecht;zeichnereduziertenrahmenELSElinie:=(xsize-2)*waagerecht;zeichnevollenrahmenFI.zeichnereduziertenrahmen:zeichneoberlinie;zeichneunterlinie.zeichneoberlinie:cursor(1,2);out(linie).zeichneunterlinie:cursor(1,23);out(linie).zeichnevollenrahmen:schreibekopf;schreiberumpf;schreibefuss;schreibekopfleiste;schreibefussleiste.schreibekopf:cursor(x,y);out(eckeobenlinks);out(linie);out(eckeobenrechts).schreiberumpf:FORiFROMy+1UPTOy+ysize-2REPcursor(x,i);out(senkrecht);cursor(x+xsize-1,i);out(senkrecht)PER.schreibefuss:cursor(x,y+ysize-1);out(eckeuntenlinks);out(linie);out(eckeuntenrechts).schreibekopfleiste:cursor(x,y+2);schreibebalkenlinie.schreibefussleiste:cursor(x,y+ysize-3);schreibebalkenlinie.schreibebalkenlinie:out(balkenlinks);out(linie);out(balkenrechts).END PROCoutmenuframe;PROCoutmenuframe(AREA CONSTa):outmenuframe(a.x-1,a.y-1,a.xsize+2,a.ysize+2)END PROCoutmenuframe;PROCeraseframe(INT CONSTx,y,xsize,ysize):INT VARzeiger;TEXT VARleerzeile:=xsize*blank;loescheoben;loescheseiten;loescheunten.loescheoben:cursor(x,y);out(leerzeile).loescheseiten:FORzeigerFROM1UPTOysize-2REPcursor(x,y+zeiger);out(blank);cursor(x+xsize-1,y+zeiger);out(blank)PER.loescheunten:cursor(x,y+ysize-1);out(leerzeile).END PROCeraseframe;OP:=(AREA VARziel,AREA CONSTquelle):CONCR(ziel):=CONCR(quelle)END OP:=;PROCfill(AREA VARziel,INT CONSTa,b,c,d):IFa<1CORb<1CORa>79CORb>24CORc<8CORd<1CORc>79CORd>24CORa+c>80CORb+d>25THENerrorstop(fehlermeldung)FI;ziel.x:=a;ziel.y:=b;ziel.xsize:=c;ziel.ysize:=dEND PROCfill;INT PROCareax(AREA CONSTa):a.xEND PROCareax;INT PROCareay(AREA CONSTa):a.yEND PROCareay;INT PROCareaxsize(AREA CONSTa):a.xsizeEND PROCareaxsize;INT PROCareaysize(AREA CONSTa):a.ysizeEND PROCareaysize;PROCout(TEXT CONSTt,INT CONSTbreite):outtext(t,1,breite)END PROCout;PROCerase(INT CONSTbreite):out(breite*blank)END PROCerase;PROCcursor(AREA CONSTa,INT CONSTspa,zei):cursor(a.x+spa-1,a.y+zei-1)END PROCcursor;PROCgetcursor(AREA CONSTa,INT VARspalte,zeile):INT VARx,y;getcursor(x,y);spalte:=x-a.x+1;zeile:=y-a.y+1END PROCgetcursor;PROCout(AREA CONSTa,INT CONST
+spa,zei,TEXT CONSTt):out(a,spa,zei,t,LENGTHt)END PROCout;PROCout(AREA CONSTa,INT CONSTspa,zei,TEXT CONSTt,INT CONSTlaenge):ueberpruefecursorangaben;positionierecursor;IFlaengeistzugrossTHENverkuerzteausgabeELSEouttext(t,1,laenge)FI.ueberpruefecursorangaben:IFspa>a.xsizeCORzei>a.ysizeCORspa<1CORzei<1THEN LEAVEoutFI.positionierecursor:cursor(a.x+spa-1,a.y+zei-1).laengeistzugross:laenge>a.xsize-spa+1.verkuerzteausgabe:outtext(t,1,a.xsize-spa+1)END PROCout;PROCerase(AREA CONSTa,INT CONSTspa,zei,INT CONSTlaenge):out(a,spa,zei,laenge*blank,laenge)END PROCerase;PROCoutinvers(AREA CONSTa,INT CONSTspa,zei,TEXT CONSTt):outinvers(a,spa,zei,t,LENGTHt)END PROCoutinvers;PROCoutinvers(AREA CONSTa,INT CONSTspa,zei,TEXT CONSTt,INT CONSTlaenge):ueberpruefecursorangaben;positionierecursor;TEXT VARhilf:=markein;IFlaengeistzugrossTHENhilfCATsubtext(t,1,a.xsize-spa-1);ELSEhilfCATtext(t,laenge)FI;hilfCATblank;hilfCATmarkaus;out(hilf).ueberpruefecursorangaben:IFspa>(a.xsize-4)CORzei>a.ysizeCORspa<2CORzei<1THEN LEAVEoutinversFI.positionierecursor:cursor(a.x+spa-2,a.y+zei-1).laengeistzugross:laenge>a.xsize-spa-1.END PROCoutinvers;PROCeraseinvers(AREA CONSTa,INT CONSTspa,zei,INT CONSTlaenge):ueberpruefecursorangaben;positionierecursor;IFlaengeistzugrossTHENverkuerzteausgabeELSEerase(laenge+3)FI.ueberpruefecursorangaben:IFspa>(a.xsize-4)CORzei>a.ysizeCORspa<2CORzei<1THEN LEAVEeraseinversFI.positionierecursor:cursor(a.x+spa-2,a.y+zei-1).laengeistzugross:laenge>a.xsize-spa-1.verkuerzteausgabe:erase(a.xsize-spa+2).END PROCeraseinvers;PROCoutwithbeam(AREA CONSTa,INT CONSTspa,zei,TEXT CONSTt):outwithbeam(a,spa,zei,t,LENGTHt)END PROCoutwithbeam;PROCoutwithbeam(AREA CONSTa,INT CONSTspa,zei,TEXT CONSTt,INT CONSTlaenge):ueberpruefecursorangaben;positionierecursor;TEXT VARhilf:=senkrecht;hilfCAT" ";IFlaengeistzugrossTHENhilfCATsubtext(t,1,a.xsize-spa-2)ELSEhilfCATtext(t,laenge)FI;hilfCAT" ";hilfCATsenkrecht;out(hilf).ueberpruefecursorangaben:IFspa>a.xsize-7CORzei>a.ysizeCORspa<4CORzei<1THEN LEAVEoutwithbeamFI.positionierecursor:cursor(a.x+spa-4,a.y+zei-1).laengeistzugross:laenge>a.xsize-spa-2.END PROCoutwithbeam;PROCerasewithbeam(AREA CONSTa,INT CONSTspa,zei,INT CONSTlaenge):ueberpruefecursorangaben;positionierecursor;IFlaengeistzugrossTHENverkuerzteausgabeELSEerase(laenge+6)FI.ueberpruefecursorangaben:IFspa>a.xsize-7CORzei>a.ysizeCORspa<4CORzei<1THEN LEAVEerasewithbeamFI.positionierecursor:cursor(a.x+spa-4,a.y+zei-1).laengeistzugross:laenge>a.xsize-spa-2.verkuerzteausgabe:erase(a.xsize-spa+4).END PROCerasewithbeam;PROCoutinverswithbeam(AREA CONSTa,INT CONSTspa,zei,TEXT CONSTt):outinverswithbeam(a,spa,zei,t,LENGTHt)END PROCoutinverswithbeam;PROCoutinverswithbeam(AREA CONSTa,INT CONSTspa,zei,TEXT CONSTt,INT CONSTlaenge):ueberpruefecursorangaben;positionierecursor;TEXT VARhilf:=senkrecht;hilfCATblank;hilfCATmarkein;IFlaengeistzugrossTHENhilfCATsubtext(t,1,a.xsize-spa-2)ELSEhilfCATtext(t,laenge)FI;hilfCATblank;hilfCATmarkaus;hilfCATsenkrecht;out(hilf).ueberpruefecursorangaben:IFspa>a.xsize-7CORzei>a.ysizeCORspa<4CORzei<1THEN LEAVEoutinverswithbeamFI.positionierecursor:cursor(a.x+spa-4,a.y+zei-1).laengeistzugross:laenge>a.xsize-spa-2.END PROCoutinverswithbeam;END PACKETlsdialog1;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls-DIALOG 2.simsel b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 2.simsel
new file mode 100644
index 0000000..b2a5323
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 2.simsel
@@ -0,0 +1,9 @@
+PACKETls dialog 2DEFINES some, one,ls exit key,some with max, some exactly,double some,infix namen,ohne praefix,not empty:LET maxentries=200;LET zeichenstring= ""1""27""3""10""13""12""8""2"o ?",oben untenreturnruboutkringelblank=""3""10""13""12"o ",qeinsneunh="w19m";LETzurueck=""8"",piep=""7"",hop=1,esc=2,oben=3,unten=4,return=5,rubout=6,links=7,rechts=8,kringel=9,leertaste=10,fragezeichen=11,letztes zeichen=11;LET punkt = ".",blank = " ";LET zwei thesauri = TRUE;
+INT VARx,y,xsize,ysize,maxeintraege,anzahl:=0,ersteauswahlzeile,virtuellercursor,reellercursor,ausgewaehlte,aufbauzaehler,minsel,maxsel;TEXT VARkennzeile1,kennzeile2,registrierkette:="",exitkey:="",hopmoeglichkeiten,eingabemoeglichkeiten;BOOL VARabbruch,auswahlende,wechsel,linkerth,info,parallelauswahl;THESAURUS VARthes1,thes2;DATASPACE VARds;BOUND ROWmaxentriesTEXT VAReintrag;ROW2TEXT CONSTfehlermeldung:=ROW2TEXT:("Unzulässige Cursorwerte bei der Auswahl","Fenster für Auswahl zu klein (x < 56 / y < 15)");ROW18TEXT CONSThinweis:=ROW18TEXT:(" Bitte warten...!"," Info: <?> Weiter: <ESC><w> Menü: <ESC><m>","Weitere Einträge"," Info: <?> Menü: <ESC><m>"," INFORMATIONEN ZUR AUSWAHL AUS DER LISTE"," Positionierung der Schreibmarke:"," Pfeil auf/ab : eine Position nach oben/unten"," HOP Pfeil auf/ab : auf erste/letzte Pos. der Seite"," ESC 1/ESC 9 : auf erste/letzte Pos. der Liste"," Ankreuzen und Löschen von Kreuzen:"," RETURN/x : den Eintrag ankreuzen"," RUBOUT/o/Leertaste: Kreuz vor dem Eintrag löschen"," HOP RETURN/HOP x : alle folgenden Eintr. ankreuzen"," HOP RUBOUT/HOP o : alle folgenden Kreuze löschen"," /HOP Leertaste","Die Anzahl der ausgewählten Einträge ist falsch. Weiter mit beliebiger Taste"," Weiter mit beliebiger Taste!"," Pfeil links/rechts: zwischen den beiden Listen wechseln");TEXT PROClsexitkey:exitkeyEND PROClsexitkey;PROClsexitkey(TEXT CONSTausgang):exitkey:=ausgang;END PROClsexitkey;PROCauswahl(THESAURUS CONSTt,TEXT CONSTtext1,text2,TEXT VARmarkers):IFaufbauzaehler>0THENwerteinitialisieren;namenbesorgen;bildschirmaufbauen;wechsel:=TRUE END IF;IFparallelauswahlTHENaufbauzaehlerDECR1ELSEaufbauzaehlerDECR2END IF;IFaufbauzaehler<0THENauswaehlenlassenEND IF.werteinitialisieren:eintrag:=ds;kennzeile1:=text1;kennzeile2:=text2;abbruch:=FALSE;wechsel:=FALSE;virtuellercursor:=1;reellercursor:=1;ersteauswahlzeile:=y+4;anzahl:=0;eingabemoeglichkeiten:=zeichenstring+markers;hopmoeglichkeiten:=obenuntenreturnruboutkringelblank+markers;ausgewaehlte:=0;maxeintraege:=ysize-6.namenbesorgen:fischedienamenausdemthesaurus;registrierkette:=anzahl*"o";IFkeineintragvorhandenTHENabbruch:=TRUE;auswahlende:=TRUE;LEAVEauswahlFI.bildschirmaufbauen:gibhinweisaus(kennzeile1,kennzeile2);bauebildschirmauf(1).auswaehlenlassen:kreuzean.fischedienamenausdemthesaurus:INT VARzeiger;FORzeigerFROM1UPTOhighestentry(t)REP IFname(t,zeiger)<>""THENanzahlINCR1;eintrag[anzahl]:=name(t,zeiger)FI PER.keineintragvorhanden:anzahl=0.END PROCauswahl;PROCreellencursorsetzen:INT CONSTmaxlaenge:=min(65,xsize-9);TEXT VARhilf:=marke(virtuellercursor);hilfCATzurueck;hilfCATinvers(subtext(eintrag(virtuellercursor),1,maxlaenge));cursor(x+1,ersteauswahlzeile+reellercursor-1);out(hilf)END PROCreellencursorsetzen;PROCbauebildschirmauf(INT CONSTanfang):gibkopfzeileaus;gibnamenstabelleaus;gibfusszeileaus;loescheggfrestbereich.gibkopfzeileaus:cursor(x+1,ersteauswahlzeile-1);IFreellercursor=virtuellercursorTHENout((xsize-2)*punkt)ELSEout((xsize-length(hinweis[3])-5)*punkt);out(invers(hinweis[3]))FI;line.gibnamenstabelleaus:INT VARzeiger,zaehler:=-1;FORzeigerFROManfangUPTOgrenzeREPzaehlerINCR1;cursor(x+1,ersteauswahlzeile+zaehler);outtext(marke(zeiger)+subtext(eintrag[zeiger],1,65),1,xsize-4);out(" ");PER.gibfusszeileaus:cursor(x+1,ersteauswahlzeile+zaehler+1);IF NOT((virtuellercursor+maxeintraege-reellercursor)<anzahl)THENout((xsize-2)*punkt)ELSEout((xsize-length(hinweis[3])-5)*punkt+invers(hinweis[3]));FI.loescheggfrestbereich:IFzaehler+1<maxeintraegeTHENloeschebildschirmrestFI.loeschebildschirmrest:TEXT VARzeile:=(xsize-2)*blank;FORzeigerFROMrestanfangUPTOrestendeREPcursor(x+1,zeiger);out(zeile)PER.restanfang:ersteauswahlzeile+zaehler+2.restende:ersteauswahlzeile+maxeintraege.grenze:min(anzahl,anfang+maxeintraege-1).END PROCbauebildschirmauf;TEXT PROCmarke(INT CONSTzeiger):" "+(registrierketteSUBzeiger)+" ".END PROCmarke;BOOL PROCangekreuzt(INT CONSTzeiger):(registrierketteSUBzeiger)<>"o"END PROC
+angekreuzt;PROCkreuzean:auswahlende:=FALSE;wechsel:=FALSE;reellencursorsetzen;REPzeichenlesen;zeicheninterpretierenUNTILauswahlendePER.zeichenlesen:TEXT VARzeichen;inchar(zeichen).zeicheninterpretieren:SELECTpos(eingabemoeglichkeiten,zeichen)OF CASEhop:hopkommandoverarbeitenCASEesc:esckommandoverarbeitenCASEoben:nachobenCASEunten:nachuntenCASEreturn:ankreuzenweiter;evtlaufhoerenCASErubout:auskreuzenweiterCASEkringel,leertaste:auskreuzen(virtuellercursor,TRUE)CASElinks:nachlinkswennerlaubtCASErechts:nachrechtswennerlaubtCASEfragezeichen:info:=TRUE;auswahlende:=TRUE CASE0:out(piep)OTHERWISEankreuzen(virtuellercursor,zeichen,TRUE);evtlaufhoerenEND SELECT.evtlaufhoeren:IFmaxsel=1THENauswahlende:=TRUE;IFparallelauswahlTHENwechsel:=TRUE END IF;loeschecursor;LEAVEkreuzeanFI.END PROCkreuzean;PROChopkommandoverarbeiten:zweiteszeichenlesen;zeicheninterpretieren.zweiteszeichenlesen:TEXT VARzweiteszeichen;inchar(zweiteszeichen).zeicheninterpretieren:SELECTpos(hopmoeglichkeiten,zweiteszeichen)OF CASE0:out(piep)CASE1:hopnachobenCASE2:hopnachuntenCASE3:zweiteszeichen:=eingabemoeglichkeitenSUB(letzteszeichen+1);alledarunterankreuzenCASE4,5,6:alledarunterloeschenOTHERWISEalledarunterankreuzenEND SELECT.alledarunterankreuzen:INT VARi;FORiFROMvirtuellercursorUPTOanzahlREPankreuzen(i,zweiteszeichen,FALSE)PER;bildaktualisieren;reellencursorsetzen.alledarunterloeschen:INT VARj;FORjFROMvirtuellercursorUPTOanzahlREPauskreuzen(j,FALSE)PER;bildaktualisieren;reellencursorsetzen.hopnachoben:IFganzobenTHENout(piep)ELIFobenaufderseiteTHENraufblaetternELSEtopofpageFI.ganzoben:virtuellercursor=1.obenaufderseite:reellercursor=1.raufblaettern:virtuellercursorDECRmaxeintraege;virtuellercursor:=max(virtuellercursor,1);bauebildschirmauf(virtuellercursor);reellencursorsetzen.topofpage:loeschecursor;virtuellercursorDECR(reellercursor-1);reellercursor:=1;reellencursorsetzen.hopnachunten:IFganzuntenTHENout(piep)ELIFuntenaufderseiteTHENrunterblaetternELSEbottomofpageFI.ganzunten:virtuellercursor=anzahl.untenaufderseite:reellercursor>maxeintraege-1.runterblaettern:INT VARaltervirtuellercursor:=virtuellercursor;virtuellercursorINCRmaxeintraege;virtuellercursor:=min(virtuellercursor,anzahl);reellercursor:=virtuellercursor-altervirtuellercursor;bauebildschirmauf(altervirtuellercursor+1);reellencursorsetzen.bottomofpage:loeschecursor;altervirtuellercursor:=virtuellercursor;virtuellercursorINCR(maxeintraege-reellercursor);virtuellercursor:=min(anzahl,virtuellercursor);reellercursorINCR(virtuellercursor-altervirtuellercursor);reellencursorsetzen.END PROChopkommandoverarbeiten;PROCesckommandoverarbeiten:TEXT VARzweiteszeichen;inchar(zweiteszeichen);SELECTpos(qeinsneunh,zweiteszeichen)OF CASE1:pruefeobausstiegerlaubtCASE2:zeigeanfangCASE3:zeigeendeCASE4:loeschecursor;abbruch:=TRUE;auswahlende:=TRUE;registrierkette:=""OTHERWISEout(piep)END SELECT.zeigeanfang:IFvirtuellercursor=1THENout(piep)ELIFvirtuellercursor=reellercursorTHENloeschecursor;virtuellercursor:=1;reellercursor:=1;reellencursorsetzenELSEvirtuellercursor:=1;reellercursor:=1;bauebildschirmauf(1);reellencursorsetzenFI.zeigeende:IFvirtuellercursor=anzahlTHENout(piep)ELIFendeaufbildschirmTHENloeschecursor;reellercursorINCR(anzahl-virtuellercursor);virtuellercursor:=anzahl;reellencursorsetzenELSEvirtuellercursor:=anzahl;reellercursor:=maxeintraege;bauebildschirmauf(anzahl-(maxeintraege-1));reellencursorsetzenFI.endeaufbildschirm:(reellercursor+anzahl-virtuellercursor)<maxeintraege+1.pruefeobausstiegerlaubt:IFausgewaehlte>=minselANDausgewaehlte<=maxselTHENloeschecursor;auswahlende:=TRUE ELSEout(piep);footnote(hinweis[16]);pause;IFmaxsel>1THENfootnote(hinweis[2])ELSEfootnote(hinweis[16])END IF END IF END PROCesckommandoverarbeiten;PROCankreuzen(INT CONSTeintrag,TEXT CONSTzeichen,BOOL CONSTcursorsetzen):IF NOTangekreuzt(eintrag)THENausgewaehlteINCR1END IF;replace(registrierkette,eintrag,zeichen);IFcursorsetzenTHENreellencursorsetzen;END IF END PROCankreuzen;PROCankreuzenweiter:ankreuzen(virtuellercursor,
+eingabemoeglichkeitenSUB(letzteszeichen+1),FALSE);IFvirtuellercursor<anzahlTHENnachuntenFI;IFvirtuellercursor=anzahlTHENreellencursorsetzenFI END PROCankreuzenweiter;PROCauskreuzenweiter:IF NOTangekreuzt(virtuellercursor)THENout(piep);LEAVEauskreuzenweiterFI;auskreuzen(virtuellercursor,FALSE);IFvirtuellercursor<anzahlTHENnachuntenELSEloeschecursorFI;reellencursorsetzen.END PROCauskreuzenweiter;PROCauskreuzen(INT CONSTeintrag,BOOL CONSTcursorsetzen):IFcursorsetzenTHEN IF NOTangekreuzt(eintrag)THENout(piep);LEAVEauskreuzenELSEreplace(registrierkette,eintrag,"o");ausgewaehlteDECR1;reellencursorsetzen;END IF ELSE IFangekreuzt(eintrag)THENausgewaehlteDECR1END IF;replace(registrierkette,eintrag,"o")END IF END PROCauskreuzen;PROCbildaktualisieren:INT VARob,un,i,zaehler:=-1;ob:=virtuellercursor-reellercursor+1;un:=min(ob+maxeintraege-1,anzahl);FORiFROMobUPTOunREPzaehlerINCR1;cursor(x+1,ersteauswahlzeile+zaehler);out(marke(i))PER END PROCbildaktualisieren;PROCnachoben:IFnochnichtobenTHENgehenachobenELSEout(piep)FI.nochnichtoben:virtuellercursor>1.gehenachoben:IFreellercursor=1THENscrolldownELSEcursorupFI.scrolldown:virtuellercursorDECR1;bauebildschirmauf(virtuellercursor);reellencursorsetzen.cursorup:loeschecursor;virtuellercursorDECR1;reellercursorDECR1;reellencursorsetzenEND PROCnachoben;PROCnachunten:IFnochnichtuntenTHENgehenachuntenELSEout(piep)FI.nochnichtunten:virtuellercursor<anzahl.gehenachunten:IFreellercursor>maxeintraege-1THENscrollupELSEcursordownFI.scrollup:virtuellercursorINCR1;bauebildschirmauf(virtuellercursor-(maxeintraege-1));reellencursorsetzen.cursordown:loeschecursor;virtuellercursorINCR1;reellercursorINCR1;reellencursorsetzenEND PROCnachunten;PROCnachlinkswennerlaubt:IFparallelauswahlAND NOTlinkerthTHENwechsel:=TRUE;auswahlende:=TRUE;loeschecursorELSEout(piep)END IF END PROCnachlinkswennerlaubt;PROCnachrechtswennerlaubt:IFparallelauswahlANDlinkerthTHENwechsel:=TRUE;auswahlende:=TRUE;loeschecursorELSEout(piep)END IF END PROCnachrechtswennerlaubt;PROCloeschecursor:cursor(x+1,ersteauswahlzeile+reellercursor-1);outtext(marke(virtuellercursor)+subtext(eintrag(virtuellercursor),1,65),1,xsize-4);out(" ");END PROCloeschecursor;PROCgibhinweisaus(TEXT CONSTt1,t2):cursor(x+1,y+1);out(center(xsize-2,invers(t1)));cursor(x+1,y+2);out(center(xsize-2,t2));END PROCgibhinweisaus;PROCuntersuchebildschirmmasszahlen(TEXT CONSTt1,t2):IFunzulaessigecursorwerteTHENerrorstop(fehlermeldung[1])ELIFfensteristzukleinTHENerrorstop(fehlermeldung[2])FI.unzulaessigecursorwerte:(x+xsize)>80COR(y+ysize)>25CORx<1CORy<1CORxsize>79CORysize>24.fensteristzuklein:(xsize)<39COR(ysize)<15CORlength(t1)>(xsize-5)CORlength(t2)>(xsize-5)COR(xsize<39AND NOTparallelauswahl)END PROCuntersuchebildschirmmasszahlen;TEXT PROCggfgekuerztertext(TEXT CONSTtext):IFlength(text)>(xsize-8)THENsubtext(text,1,xsize-10)+".."ELSEtextFI END PROCggfgekuerztertext;PROCzeigebedieninfo(INT CONSTspalte,zeile,breite,hoehe):INT VARi,extrazeile:=0;IFparallelauswahlTHENextrazeile:=1END IF;notierehinweisueberschrift;notierepositionierhinweise;IFnochplatzvorhandenTHENnotiereauswahlmoeglichkeitenaufalterseiteELSEwechsleaufnaechsteseite;notierehinweisueberschrift;notiereauswahlmoeglichkeitenaufneuerseiteFI;stellealtenbildschirmzustandwiederher.notierehinweisueberschrift:cursor(spalte+1,zeile+1);out(center(breite-2,hinweis[5]));cursor(spalte+1,zeile+2);out("",breite-2).notierepositionierhinweise:cursor(spalte+1,zeile+3);out(hinweis[6],breite-2);cursor(spalte+1,zeile+4);out("",breite-2);IFparallelauswahlTHENcursor(spalte+1,zeile+5);out(hinweis[18],breite-2)END IF;FORiFROM5UPTO7REPcursor(spalte+1,zeile+i+extrazeile);out(hinweis[i+2],breite-2)PER.notiereauswahlmoeglichkeitenaufalterseite:cursor(spalte+1,zeile+8+extrazeile);out("",breite-2);cursor(spalte+1,zeile+9+extrazeile);out(hinweis[10],breite-2);cursor(spalte+1,zeile+10+extrazeile);out("",breite-2);FORiFROM11UPTO15REPcursor(spalte+1,zeile+i+extrazeile);out(hinweis[i],breite-2)PER;loeschedierestlichenzeilen;footnote(hinweis[17]);
+cursorinruhestellung;clearbuffer.loeschedierestlichenzeilen:FORiFROMzeile+16+extrazeileUPTOzeile+hoehe-2REPcursor(spalte+1,i);out("",breite-2)PER.wechsleaufnaechsteseite:loescheseitenrest;footnote(hinweis[17]);cursorinruhestellung;clearbuffer;pause.loescheseitenrest:INT VARzaehler;FORzaehlerFROM8+extrazeileUPTOhoehe-2REPcursor(spalte+1,zeile+zaehler);out("",breite-2)PER.notiereauswahlmoeglichkeitenaufneuerseite:cursor(spalte+1,zeile+3);out(hinweis[10],breite-2);cursor(spalte+1,zeile+4);out("",breite-2);FORiFROM5UPTO9REPcursor(spalte+1,zeile+i);out(hinweis[i+6],breite-2)PER;FORzaehlerFROM10UPTOhoehe-2REPcursor(spalte+1,zeile+zaehler);out("",breite-2)PER.cursorinruhestellung:cursor(spalte+1,zeile+hoehe-1).stellealtenbildschirmzustandwiederher:clearbuffer;pause;IFparallelauswahlORmaxsel>1THENfootnote(hinweis[2])ELSEfootnote(hinweis[4])END IF.nochplatzvorhanden:hoehe>16+extrazeileEND PROCzeigebedieninfo;THESAURUS PROCinit(INT CONSTspalte,zeile,breite,hoehe,lminauswahl,lmaxauswahl,rminauswahl,rmaxauswahl,THESAURUS CONSTth1,th2,BOOL CONSTzweith,TEXT CONSTt1,t2,t3,t4,TEXT VARlmarkers,rmarkers):INT VARlx,rx,lxsize,rxsize,lvirtcursor,rvirtcursor,lsel:=0,rsel:=0,lanzahl:=0,ranzahl:=0;TEXT VARlregistrierkette,rregistrierkette,lhopmoeglichkeiten,leingabemoeglichkeiten,rhopmoeglichkeiten,reingabemoeglichkeiten,text1,text2,text3,text4;DATASPACE VARlds,rds;AREA VARa;ueberpruefegroesse;IFzweithTHENsteuerezweithesaurusauswahlenELSEsteuereeinethesaurusauswahlEND IF.ueberpruefegroesse:fill(a,spalte,zeile,breite,hoehe+1).steuerezweithesaurusauswahlen:doppelinit;REPEATbearbeitelinkenthesaurus;wechslevonlinksnachrechts;bearbeiterechtenthesaurus;wechslevonrechtsnachlinks;PER;emptythesaurus.steuereeinethesaurusauswahl:einzelinit;minsel:=lminauswahl;maxsel:=lmaxauswahl;REPauswahl(th1,text1,text2,lmarkers);IFinfoTHENzeigebedieninfo(spalte,zeile,breite,hoehe);info:=FALSE;auswahlende:=FALSE;gibhinweisaus(text1,text2);bauebildschirmauf(virtuellercursor-reellercursor+1)END IF UNTILauswahlendeEND REPEAT;einzelaufraeumen.einzelinit:aufbauzaehler:=1;x:=spalte;y:=zeile;xsize:=breite;ysize:=hoehe;info:=FALSE;auswahlende:=FALSE;parallelauswahl:=FALSE;ds:=nilspace;text1:=ggfgekuerztertext(t1);text2:=ggfgekuerztertext(t2);untersuchebildschirmmasszahlen(text1,text2);zeichneeinzelkasten;setzestdfussnote.zeichneeinzelkasten:fill(a,x+1,y+1,xsize-2,ysize-2);outframe(a).einzelaufraeumen:footnote(hinweis[1]);thes1:=emptythesaurus;lmarkers:="";IF NOTabbruchTHENthes1:=erzeugeausgabe(registrierkette,lmarkers);END IF;forget(lds);forget(rds);forget(ds);thes1.doppelinit:aufbauzaehler:=2;lx:=spalte;lxsize:=(breite+1)DIV2;rx:=spalte+lxsize-1;rxsize:=lxsize;lvirtcursor:=1;rvirtcursor:=1;lregistrierkette:="";rregistrierkette:="";leingabemoeglichkeiten:="";lhopmoeglichkeiten:="";reingabemoeglichkeiten:="";rhopmoeglichkeiten:="";lanzahl:=1;ranzahl:=1;lds:=nilspace;rds:=nilspace;thes1:=emptythesaurus;thes2:=emptythesaurus;y:=zeile;ysize:=hoehe;x:=lx;xsize:=lxsize;forget(ds);ds:=lds;parallelauswahl:=TRUE;text1:=ggfgekuerztertext(t1);text2:=ggfgekuerztertext(t2);text3:=ggfgekuerztertext(t3);text4:=ggfgekuerztertext(t4);untersuchebildschirmmasszahlen(text1,text2);schreibedoppelkasten;footnote(hinweis[2]).bearbeitelinkenthesaurus:linkerth:=TRUE;auswahl(th1,text1,text2,lmarkers);lsel:=ausgewaehlte;IFabbruchTHENbearbeiteabbruchELIFinfoTHENzeigebedieninfo(spalte,zeile,breite,hoehe);schreibemittellinie;gibhinweisaus(text1,text2);bauebildschirmauf(virtuellercursor-reellercursor+1)ELIF NOTwechselTHEN IFrsel>=rminauswahlANDrsel<=rmaxauswahlTHENforget(lds);lds:=ds;lregistrierkette:=registrierkette;lanzahl:=anzahl;abganginordnungELSEauswahlendeungueltigEND IF END IF.wechslevonlinksnachrechts:x:=rx;xsize:=rxsize;wechsel:=FALSE;lanzahl:=anzahl;anzahl:=ranzahl;auswahlende:=FALSE;lvirtcursor:=virtuellercursor-reellercursor+1;virtuellercursor:=rvirtcursor;reellercursor:=1;lregistrierkette:=registrierkette;registrierkette:=rregistrierkette;lhopmoeglichkeiten:=hopmoeglichkeiten;hopmoeglichkeiten:=
+rhopmoeglichkeiten;leingabemoeglichkeiten:=eingabemoeglichkeiten;eingabemoeglichkeiten:=reingabemoeglichkeiten;ausgewaehlte:=rsel;forget(lds);lds:=ds;forget(ds);ds:=rds;forget(rds);minsel:=rminauswahl;maxsel:=rmaxauswahl;linkerth:=FALSE;IFinfoTHENinfo:=FALSE;auswahlende:=FALSE;gibhinweisaus(text3,text4);bauebildschirmauf(virtuellercursor-reellercursor+1)END IF.bearbeiterechtenthesaurus:auswahl(th2,text3,text4,rmarkers);rsel:=ausgewaehlte;IFabbruchTHENbearbeiteabbruchELIFinfoTHENzeigebedieninfo(spalte,zeile,breite,hoehe);schreibemittellinie;gibhinweisaus(text3,text4);bauebildschirmauf(virtuellercursor-reellercursor+1)ELIF NOTwechselTHEN IFlsel>=lminauswahlANDlsel<=lmaxauswahlTHENforget(rds);rds:=ds;rregistrierkette:=registrierkette;ranzahl:=anzahl;abganginordnungELSEauswahlendeungueltigEND IF END IF.wechslevonrechtsnachlinks:x:=lx;xsize:=lxsize;wechsel:=FALSE;auswahlende:=FALSE;rvirtcursor:=virtuellercursor-reellercursor+1;virtuellercursor:=lvirtcursor;reellercursor:=1;rregistrierkette:=registrierkette;registrierkette:=lregistrierkette;rhopmoeglichkeiten:=hopmoeglichkeiten;hopmoeglichkeiten:=lhopmoeglichkeiten;reingabemoeglichkeiten:=eingabemoeglichkeiten;eingabemoeglichkeiten:=leingabemoeglichkeiten;ausgewaehlte:=lsel;forget(rds);rds:=ds;forget(ds);ds:=lds;forget(lds);minsel:=lminauswahl;maxsel:=lmaxauswahl;ranzahl:=anzahl;anzahl:=lanzahl;IFinfoTHENinfo:=FALSE;auswahlende:=FALSE;gibhinweisaus(text1,text2);bauebildschirmauf(virtuellercursor-reellercursor+1)END IF.abganginordnung:footnote(hinweis[1]);eintrag:=lds;anzahl:=lanzahl;thes1:=erzeugeausgabe(lregistrierkette,lmarkers);eintrag:=rds;anzahl:=ranzahl;thes2:=erzeugeausgabe(rregistrierkette,rmarkers);forget(lds);forget(rds);forget(ds);LEAVEinitWITHemptythesaurus.bearbeiteabbruch:footnote(hinweis[1]);lmarkers:="";rmarkers:="";forget(lds);forget(rds);forget(ds);LEAVEinitWITHemptythesaurus.auswahlendeungueltig:out(piep);footnote(hinweis[16]);pause;footnote(hinweis[2]).setzestdfussnote:IFlmaxauswahl>1THENfootnote(hinweis[2])ELSEfootnote(hinweis[4])END IF.schreibedoppelkasten:fill(a,spalte+1,zeile+1,breite-2,hoehe-2);outframe(a);cursor(rx,zeile);out(balkenoben);schreibemittellinie;cursor(rx,zeile+hoehe-1);out(balkenunten).schreibemittellinie:INT VARi;FORiFROMzeile+1UPTOzeile+hoehe-2REPcursor(rx,i);out(senkrecht)PER END PROCinit;THESAURUS PROCerzeugeausgabe(TEXT CONSTkette,TEXT VARmarkers):INT VARi;THESAURUS VARausgabe:=emptythesaurus;markers:="";FORiFROM1UPTOanzahlREPEAT IF(ketteSUBi)<>"o"THENinsert(ausgabe,eintrag[i]);markersCAT(ketteSUBi);END IF PER;ausgabeEND PROCerzeugeausgabe;THESAURUS PROCinfixnamen(THESAURUS CONSTt,TEXT CONSTinfix):THESAURUS VARtt:=emptythesaurus;INT VARi;FORiFROM1UPTOhighestentry(t)REP TEXT VAReintrag:=name(t,i);IFeintragenthaeltinfixTHENinsert(tt,eintrag)FI PER;tt.eintragenthaeltinfix:pos(eintrag,infix)<>0END PROCinfixnamen;THESAURUS PROCinfixnamen(THESAURUS CONSTt,INT CONSTdateityp):THESAURUS VARtt:=emptythesaurus;INT VARi;FORiFROM1UPTOhighestentry(t)REP TEXT VAReintrag:=name(t,i);IFeintragenthaeltinfixTHENinsert(tt,eintrag)FI PER;tt.eintragenthaeltinfix:eintrag<>""CANDtype(old(eintrag))=dateityp.END PROCinfixnamen;THESAURUS PROCinfixnamen(THESAURUS CONSTt,TEXT CONSTinfix1,INT CONSTdateityp):THESAURUS VARtt:=emptythesaurus;INT VARi;FORiFROM1UPTOhighestentry(t)REP TEXT VAReintrag:=name(t,i);IFeintragenthaeltinfixTHENinsert(tt,eintrag)FI PER;tt.eintragenthaeltinfix:(pos(eintrag,infix1)<>0)AND(type(old(eintrag))=dateityp).END PROCinfixnamen;THESAURUS PROCinfixnamen(THESAURUS CONSTt,TEXT CONSTinfix1,infix2):THESAURUS VARtt:=emptythesaurus;INT VARi;FORiFROM1UPTOhighestentry(t)REP TEXT VAReintrag:=name(t,i);IFeintragenthaeltinfixTHENinsert(tt,eintrag)FI PER;tt.eintragenthaeltinfix:(pos(eintrag,infix1)<>0)OR(pos(eintrag,infix2)<>0)END PROCinfixnamen;THESAURUS PROCinfixnamen(TEXT CONSTinfix):infixnamen(ALLmyself,infix)END PROCinfixnamen;THESAURUS PROCinfixnamen(TEXT CONSTinfix1,infix2):infixnamen(ALLmyself,infix1,infix2)END PROCinfixnamen;THESAURUS PROC
+ohnepraefix(THESAURUS CONSTthesaurus,TEXT CONSTpraefix):THESAURUS VARt:=emptythesaurus;INT VARzaehler;FORzaehlerFROM1UPTOhighestentry(thesaurus)REP IFname(thesaurus,zaehler)<>""ANDpos(name(thesaurus,zaehler),praefix)=1THENinsert(t,subtext(name(thesaurus,zaehler),length(praefix)+1))FI;PER;tEND PROCohnepraefix;BOOL PROCnotempty(THESAURUS CONSTt):INT VARi;FORiFROM1UPTOhighestentry(t)REP IFname(t,i)<>""THEN LEAVEnotemptyWITH TRUE FI PER;FALSE END PROCnotempty;THESAURUS PROCsome(INT CONSTspalte,zeile,breite,hoehe,THESAURUS CONSTth,TEXT CONSTt1,t2):TEXT VARreturn:="x";init(spalte,zeile,breite,hoehe,0,maxentries,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",return,return)END PROCsome;THESAURUS PROCsome(INT CONSTspalte,zeile,THESAURUS CONSTt,TEXT CONSTt1,t2):some(spalte,zeile,79-spalte+1,24-zeile,t,t1,t2)END PROCsome;THESAURUS PROCsome(THESAURUS CONSTth,TEXT CONSTt1,t2):TEXT VARreturn:="x";init(1,1,79,23,0,maxentries,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",return,return)END PROCsome;TEXT PROCone(INT CONSTspalte,zeile,breite,hoehe,THESAURUS CONSTth,TEXT CONSTt1,t2):TEXT VARreturn:="x";name(init(spalte,zeile,breite,hoehe,0,1,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",return,return),1)END PROCone;TEXT PROCone(INT CONSTspalte,zeile,THESAURUS CONSTt,TEXT CONSTt1,t2):one(spalte,zeile,79-spalte+1,24-zeile,t,t1,t2)END PROCone;TEXT PROCone(THESAURUS CONSTth,TEXT CONSTt1,t2):TEXT VARreturn:="x";name(init(1,1,79,23,0,1,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",return,return),1)END PROCone;PROCdoublesome(INT CONSTzeile,hoehe,leftmin,leftmax,rightmin,rightmax,THESAURUS VARth1,th2,TEXT CONSTt1,t2,t3,t4):TEXT VARreturn:="x";th1:=init(1,zeile,79,hoehe,leftmin,leftmax,rightmin,rightmax,th1,th2,zweithesauri,t1,t2,t3,t4,return,return);th1:=thes1;th2:=thes2;END PROCdoublesome;PROCdoublesome(INT CONSTleftmin,leftmax,rightmin,rightmax,THESAURUS VARth1,th2,TEXT CONSTt1,t2,t3,t4):TEXT VARreturn:="x";th1:=init(1,1,79,23,leftmin,leftmax,rightmin,rightmax,th1,th2,zweithesauri,t1,t2,t3,t4,return,return);th1:=thes1;th2:=thes2;END PROCdoublesome;PROCdoublesome(INT CONSTzeile,hoehe,leftmin,leftmax,rightmin,rightmax,THESAURUS VARth1,th2,TEXT CONSTt1,t2,t3,t4,TEXT VARlmarkers,rmarkers):th1:=init(1,zeile,79,hoehe,leftmin,leftmax,rightmin,rightmax,th1,th2,zweithesauri,t1,t2,t3,t4,lmarkers,rmarkers);th1:=thes1;th2:=thes2;END PROCdoublesome;PROCdoublesome(INT CONSTleftmin,leftmax,rightmin,rightmax,THESAURUS VARth1,th2,TEXT CONSTt1,t2,t3,t4,TEXT VARlmarkers,rmarkers):th1:=init(1,1,79,23,leftmin,leftmax,rightmin,rightmax,th1,th2,zweithesauri,t1,t2,t3,t4,lmarkers,rmarkers);th1:=thes1;th2:=thes2;END PROCdoublesome;THESAURUS PROCsomewithmax(INT CONSTspalte,zeile,breite,hoehe,THESAURUS CONSTth,INT CONSTmax,TEXT CONSTt1,t2,TEXT VARmarkers):init(spalte,zeile,breite,hoehe,0,max,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",markers,markers)END PROCsomewithmax;THESAURUS PROCsomewithmax(THESAURUS CONSTth,INT CONSTmax,TEXT CONSTt1,t2,TEXT VARmarkers):init(1,1,79,23,0,max,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",markers,markers)END PROCsomewithmax;THESAURUS PROCsomewithmax(INT CONSTspalte,zeile,breite,hoehe,THESAURUS CONSTth,INT CONSTmax,TEXT CONSTt1,t2):TEXT VARmarker:="x";init(spalte,zeile,breite,hoehe,0,max,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",marker,marker)END PROCsomewithmax;THESAURUS PROCsomewithmax(THESAURUS CONSTth,INT CONSTmax,TEXT CONSTt1,t2):TEXT VARmarker:="x";init(1,1,79,23,0,max,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",marker,marker)END PROCsomewithmax;THESAURUS PROCsomeexactly(INT CONSTspalte,zeile,breite,hoehe,THESAURUS CONSTth,INT CONSTanzahl,TEXT CONSTt1,t2):TEXT VARtx:="x";init(spalte,zeile,breite,hoehe,anzahl,anzahl,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",tx,tx)END PROCsomeexactly;THESAURUS PROCsomeexactly(THESAURUS CONSTth,INT CONSTanzahl,TEXT CONSTt1,t2):TEXT VARtx:="x";init(1,1,79,23,anzahl,anzahl,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",tx,tx)END PROCsomeexactly;THESAURUS PROC
+someexactly(INT CONSTspalte,zeile,breite,hoehe,THESAURUS CONSTth,INT CONSTanzahl,TEXT CONSTt1,t2,TEXT VARmarkers):init(spalte,zeile,breite,hoehe,anzahl,anzahl,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",markers,markers)END PROCsomeexactly;THESAURUS PROCsomeexactly(THESAURUS CONSTth,INT CONSTanzahl,TEXT CONSTt1,t2,TEXT VARmarkers):init(1,1,79,23,anzahl,anzahl,0,0,th,emptythesaurus,NOTzweithesauri,t1,t2,"","",markers,markers)END PROCsomeexactly;END PACKETlsdialog2;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls-DIALOG 3.korrektur b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 3.korrektur
new file mode 100644
index 0000000..3408f21
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 3.korrektur
@@ -0,0 +1,3 @@
+PACKETlsdialog3DEFINES WINDOW,:=,window,show,page,erase,line,remaininglines,cursor,getcursor,outframe,outmenuframe,out,put,putline,get,getline,yes,no,edit,center,stop,area,areax,areay,areaxsize,areaysize:LETpiep="�",cr=" ";LETjaneinkette="jJyYnN",blank=" ",niltext="";TYPE WINDOW=STRUCT(AREAfenster,INTcspalte,czeile,belegbarezeilen,BOOLfensterendeerreicht);ROW3TEXT CONSTaussage:=ROW3TEXT:(" 'Window' ungültig!"," (j/n) ?"," Weiter mit beliebiger Taste!");TEXT VARnumberword,exitchar;OP:=(WINDOW VARlinks,WINDOW CONSTrechts):CONCR(links):=CONCR(rechts)END OP:=;WINDOW PROCwindow(INT CONSTx,y,xsize,ysize):WINDOW VARw;fill(w.fenster,x,y,xsize,ysize);initialize(w);wEND PROCwindow;PROCinitialize(WINDOW VARw):w.czeile:=1;w.cspalte:=1;w.fensterendeerreicht:=FALSE;w.belegbarezeilen:=areaysize(w.fenster)END PROCinitialize;PROCshow(WINDOW VARw):zeigerahmen;fensterputzen.zeigerahmen:outframe(w.fenster).fensterputzen:page(w).END PROCshow;PROCpage(WINDOW VARw):initialize(w);page(w,FALSE)END PROCpage;PROCpage(WINDOW CONSTw,BOOL CONSTmitrahmen):IFareax(w)=1ANDareay(w)=1ANDareaxsize(w)=79ANDareaysize(w)=24THENpage;ELSEloeschebereichFI.loeschebereich:IFmitrahmenTHENpage(areax(w)-1,areay(w)-1,areaxsize(w)+2,areaysize(w)+2)ELSEpage(area(w))FI END PROCpage;PROCerase(WINDOW VARw):page(w,TRUE)END PROCerase;PROCline(WINDOW VARw):w.cspalte:=1;IFw.czeile<w.belegbarezeilenTHENw.czeileINCR1;ELSEw.czeile:=1;w.fensterendeerreicht:=TRUE FI;cursor(w,w.cspalte,w.czeile)END PROCline;PROCline(WINDOW VARw,INT CONSTanzahl):INT VARi;FORiFROM1UPTOanzahlREPline(w)PER END PROCline;INT PROCremaininglines(WINDOW CONSTw):INT VARspalte,zeile;getcursor(w,spalte,zeile);IFspalte=0ORzeile=0THEN0ELSEw.belegbarezeilen-w.czeileFI END PROCremaininglines;PROCcursor(WINDOW VARw,INT CONSTspalte,zeile):IFspalte<1ORzeile<1ORspalte>areaxsize(w)ORzeile>areaysize(w)THENpage(w);ELSEw.cspalte:=spalte;w.czeile:=zeile;FI;cursor(w.fenster,w.cspalte,w.czeile)END PROCcursor;PROCgetcursor(WINDOW CONSTw,INT VARspalte,zeile):IF(w.cspalte<1)OR(w.cspalte>areaxsize(w.fenster))OR(w.czeile<1)OR(w.czeile>areaysize(w.fenster))THENspalte:=0;zeile:=0ELSEspalte:=w.cspalte;zeile:=w.czeileFI END PROCgetcursor;PROCout(WINDOW VARw,TEXT CONSTtext):INT VARrestlaenge;IF(w.cspalte>=1)AND(w.cspalte<=areaxsize(w.fenster))AND(w.czeile>=1)AND(w.czeile<=w.belegbarezeilen)THENputzeggffenster;cursor(w.fenster,w.cspalte,w.czeile);outtext(text,1,textende);setzefenstercursorneu;setzeausgabeggfinnaechsterzeilefortFI.putzeggffenster:IFw.fensterendeerreichtTHENpage(w);w.fensterendeerreicht:=FALSE FI.textende:restlaenge:=areaxsize(w.fenster)-w.cspalte+1;min(length(text),restlaenge).setzefenstercursorneu:IFlength(text)>=restlaengeTHENw.cspalte:=1;w.czeileINCR1;schlageggfneueseiteaufELSEw.cspalteINCRlength(text)FI.schlageggfneueseiteauf:IFw.czeile>w.belegbarezeilenTHENw.fensterendeerreicht:=TRUE;w.czeile:=1;w.cspalte:=1FI.setzeausgabeggfinnaechsterzeilefort:IFlength(text)>restlaengeTHENout(w,subtext(text,restlaenge+1))FI.END PROCout;PROCoutframe(WINDOW VARw):outframe(area(w))END PROCoutframe;PROCoutmenuframe(WINDOW VARw):outmenuframe(area(w))END PROCoutmenuframe;PROCput(WINDOW VARw,TEXT CONSTword):out(w,word);out(w,blank)END PROCput;PROCput(WINDOW VARw,INT CONSTnumber):put(w,text(number))END PROCput;PROCput(WINDOW VARw,REAL VARnumber):put(w,text(number))END PROCput;PROCputline(WINDOW VARw,TEXT CONSTtextline):out(w,textline);line(w)END PROCputline;PROCprivateget(WINDOW VARw,TEXT VARword,TEXT CONSTseparator,INT CONSTlength):INT VARx,y;INT VARrestlaenge:=areaxsize(w.fenster)-w.cspalte-1;ggfzurnaechstenzeile;getcursor(x,y);cursoron;cursor(x,y);REPword:="";editget(word,laenge,laenge,separator,"",exitchar);out(w,word);echoeexitchar(w)UNTILword<>niltextANDword<>blankPER;cursoroff;deleteleadingblanks.ggfzurnaechstenzeile:IFrestlaenge<5THENline(w);restlaenge:=areaxsize(w.fenster)-2FI.deleteleadingblanks:WHILE(wordSUB1)=blankREPword:=subtext(word,2)PER.laenge:min(length,restlaenge).END PROCprivateget;PROCget(WINDOW VARw,TEXT VARword):
+privateget(w,word," ",maxtextlength)END PROCget;PROCget(WINDOW VARw,TEXT VARword,TEXT CONSTseparator):privateget(w,word,separator,maxtextlength)END PROCget;PROCget(WINDOW VARw,TEXT VARword,INT CONSTlength):privateget(w,word,"",length)END PROCget;PROCget(WINDOW VARw,INT VARnumber):get(w,numberword);number:=int(numberword)END PROCget;PROCget(WINDOW VARw,REAL VARnumber):get(w,numberword);number:=real(numberword)END PROCget;PROCgetline(WINDOW VARw,TEXT VARtextline):privateget(w,textline,"",maxtextlength)END PROCgetline;PROCechoeexitchar(WINDOW VARfenster):IFexitchar=crTHENline(fenster)ELSEout(fenster,exitchar)FI END PROCechoeexitchar;TEXT PROCcenter(WINDOW CONSTw,TEXT CONSTtext):IFlength(text)>=areaxsize(w.fenster)THENsubtext(text,1,areaxsize(w.fenster))ELSEcenter(areaxsize(w.fenster),text)FI END PROCcenter;BOOL PROCyes(WINDOW VARw,TEXT CONSTfrage):TEXT VARzeichen,internefrage:=frage;internefrageCATaussage[2];wechselggfaufneueseite;out(w,internefrage);holeeingabezeichen;wertezeichenaus.wechselggfaufneueseite:IFremaininglines(w)<1THENpage(w)FI.holeeingabezeichen:cursoron;clearbuffer;REPinchar(zeichen);piepseggfUNTILpos(janeinkette,zeichen)>0PER;out(w,blank+zeichen);cursoroff;line(w).piepseggf:IFpos(janeinkette,zeichen)=0THENout(piep)FI.wertezeichenaus:IFpos(janeinkette,zeichen)<5THEN TRUE ELSE FALSE FI.END PROCyes;PROCedit(WINDOW VARw,FILE VARf):outframe(w.fenster);loescherechtespalten(w);cursoron;edit(f,areax(w.fenster),areay(w.fenster),areaxsize(w.fenster)-1,areaysize(w.fenster));cursoroffEND PROCedit;PROCedit(WINDOW VARw,TEXT CONSTdateiname):FILE VARf:=sequentialfile(modify,dateiname);toline(f,1);edit(w,f)END PROCedit;PROCshow(WINDOW VARw,FILE VARf):outframe(w.fenster);loescherechtespalten(w);openeditor(groesstereditor+1,f,FALSE,areax(w.fenster),areay(w.fenster),areaxsize(w.fenster)-1,areaysize(w.fenster));cursoron;edit(groesstereditor,"eqvw19dpgn�",PROC(TEXT CONST)stdkommandointerpreter);cursoroffEND PROCshow;PROCshow(WINDOW VARw,TEXT CONSTdateiname):FILE VARf:=sequentialfile(modify,dateiname);toline(f,1);show(w,f)END PROCshow;PROCloescherechtespalten(WINDOW VARw):INT VARi;FORiFROM1UPTOareaysize(w.fenster)REPcursor(w,areaxsize(w.fenster)-2,i);out(" ")PER END PROCloescherechtespalten;BOOL PROCno(WINDOW VARw,TEXT CONSTfrage):NOTyes(w,frage)END PROCno;PROCstop(WINDOW VARw):stop(w,2)END PROCstop;PROCstop(WINDOW VARw,INT CONSTzeilenzahl):INT VARi;FORiFROM1UPTOzeilenzahlREPline(w)PER;out(w,aussage[3]);pauseEND PROCstop;AREA PROCarea(WINDOW CONSTw):w.fensterEND PROCarea;INT PROCareax(WINDOW CONSTw):areax(w.fenster)END PROCareax;INT PROCareay(WINDOW CONSTw):areay(w.fenster)END PROCareay;INT PROCareaxsize(WINDOW CONSTw):areaxsize(w.fenster)END PROCareaxsize;INT PROCareaysize(WINDOW CONSTw):areaysize(w.fenster)END PROCareaysize;END PACKETlsdialog3
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls-DIALOG 4.wd b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 4.wd
new file mode 100644
index 0000000..a320e06
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 4.wd
@@ -0,0 +1,6 @@
+PACKETlsdialog4DEFINESboxinfo,boxnotice,boxalternative,boxyes,boxno,boxanswer,boxone,boxanswerone,boxsome,boxanswersome:LETmarkein=""15"",markaus=""14"",delimiter=""13"",piep=""7"",cleol=""5"",rechtslinksescreturn=""2""8""27""13"",rechtslinksnullreturn=""2""8""0""13"" ,gueltigezeichen=""10""3""13"",esc=""27"",auswahl="z",abbruch="m",
+trennliniensymbol="-",blank=" ",niltext="",janeintasten="jn";ROW8TEXT CONSTaussage:=ROW8TEXT:(" Weiter mit beliebiger Taste!"," Wählen: <Pfeile> Bestätigen: <RETURN> Menü: <ESC><m>"," Wählen: <Pfeile> Bestätigen: <RETURN> Ja: <j> Nein: <n>"," Wählen: <Pfeile> Bestätigen: <RETURN>"," Bestätigen: <RETURN> Zeigen: <ESC><z> Menü: <ESC><m>"," Bestätigen: <RETURN> Menü: <ESC><m>","Ja Nein"," Eingabe: ");PROCboxinfo(WINDOW VARw,TEXT CONSTt,INT CONSTposition,timelimit,INT VARx,y,xsize,ysize):INT VARspa,zei;getcursor(w,spa,zei);schreibebox(w,t,position,timelimit,x,y,xsize,ysize);oldfootnote;cursor(w,spa,zei);END PROCboxinfo;PROCboxinfo(WINDOW VARw,TEXT CONSTt,INT CONSTposition,timelimit,BOOL CONSTtrennlinieweg):INT VARx,y,xsize,ysize,spa,zei;getcursor(w,spa,zei);schreibebox(w,t,position,timelimit,x,y,xsize,ysize);pageup(x,y,xsize,ysize);oldfootnote;cursor(spa,zei);END PROCboxinfo;PROCboxinfo(WINDOW VARw,TEXT CONSTt,INT CONSTposition,timelimit,BOOL CONSTtrennlinieweg,PROC(AREA CONST)restore):INT VARx,y,xsize,ysize,spa,zei;AREA VARboxarea;getcursor(w,spa,zei);schreibebox(w,t,position,timelimit,x,y,xsize,ysize);fill(boxarea,x,y,xsize,ysize);restore(boxarea);oldfootnote;cursor(w,spa,zei)END PROCboxinfo;PROCboxinfo(WINDOW VARw,TEXT CONSTt,INT CONSTposition,timelimit):boxinfo(w,t,position,timelimit,TRUE)END PROCboxinfo;PROCboxinfo(WINDOW VARw,TEXT CONSTt):boxinfo(w,t,5,maxint,TRUE)END PROCboxinfo;PROCboxinfo(WINDOW VARw,TEXT CONSTt,PROC(AREA CONST)restore):boxinfo(w,t,5,maxint,TRUE,PROCrestore)END PROCboxinfo;PROCboxnotice(WINDOW VARw,TEXT CONSTt,INT CONSTposition,INT VARx,y,xsize,ysize):INT VARspa,zei;getcursor(w,spa,zei);schreibenotiz(w,t,position,x,y,xsize,ysize);oldfootnote;cursor(w,spa,zei)END PROCboxnotice;INT PROCboxalternative(WINDOW VARw,TEXT CONSTt,auswahlliste,zusatztasten,INT CONSTposition,BOOL CONSTmitabbruch,INT VARx,y,xsize,ysize):INT VARergebnis,spa,zei;getcursor(w,spa,zei);schreibealternativen(w,t,auswahlliste,zusatztasten,position,mitabbruch,x,y,xsize,ysize,ergebnis);oldfootnote;cursor(w,spa,zei);ergebnisEND PROCboxalternative;INT PROCboxalternative(WINDOW VARw,TEXT CONSTt,auswahlliste,zusatztasten,INT CONSTposition,BOOL CONSTmitabbruch,trennlinieweg):INT VARx,y,xsize,ysize,ergebnis,spa,zei;getcursor(w,spa,zei);ergebnis:=boxalternative(w,t,auswahlliste,zusatztasten,position,mitabbruch,x,y,xsize,ysize);pageup(x,y,xsize,ysize);oldfootnote;cursor(w,spa,zei);ergebnisEND PROCboxalternative;INT PROCboxalternative(WINDOW VARw,TEXT CONSTt,auswahlliste,zusatztasten,INT CONSTposition,BOOL CONSTmitabbruch,trennlinieweg,PROC(AREA CONST)restore):INT VARx,y,xsize,ysize,ergebnis,spa,zei;AREA VARboxarea;getcursor(w,spa,zei);ergebnis:=boxalternative(w,t,auswahlliste,zusatztasten,position,mitabbruch,x,y,xsize,ysize);fill(boxarea,x,y,xsize,ysize);restore(boxarea);oldfootnote;cursor(w,spa,zei);ergebnisEND PROCboxalternative;INT PROCboxalternative(WINDOW VARw,TEXT CONSTt,auswahlliste,zusatztasten,INT CONSTposition,BOOL CONSTmitabbruch):boxalternative(w,t,auswahlliste,zusatztasten,position,mitabbruch,TRUE)END PROCboxalternative;BOOL PROCboxyes(WINDOW VARw,TEXT CONSTt,INT CONSTposition,INT VARx,y,xsize,ysize):INT VARspa,zei;getcursor(w,spa,zei);BOOL CONSTwert:=ja(w,t,position,x,y,xsize,ysize);oldfootnote;cursor(w,spa,zei);wertEND PROCboxyes;BOOL PROCboxyes(WINDOW VARw,TEXT CONSTt,INT CONSTposition,BOOL CONSTtrennlinieweg):INT VARx,y,xsize,ysize,spa,zei;getcursor(w,spa,zei);BOOL VARwert:=ja(w,t,position,x,y,xsize,ysize);pageup(x,y,xsize,ysize);oldfootnote;cursor(w,spa,zei);wertEND PROCboxyes;BOOL PROCboxyes(WINDOW VARw,TEXT CONSTt,INT CONSTposition,BOOL CONSTtrennlinieweg,PROC(AREA CONST)restore):INT VARx,y,xsize,ysize,spa,zei;AREA VARboxarea;getcursor(w,spa,zei);BOOL VARwert:=ja(w,t,position,x,y,xsize,ysize);fill(boxarea,x,y,xsize,ysize);restore(boxarea);oldfootnote;cursor(w,spa,zei);wertEND PROCboxyes;BOOL PROCboxyes(WINDOW VARw,TEXT CONSTt,INT CONSTposition):boxyes(w,t,position,TRUE)END PROCboxyes;BOOL PROCboxno(WINDOW VARw,TEXT CONSTt
+,INT CONSTposition,INT VARx,y,xsize,ysize):NOTboxyes(w,t,position,x,y,xsize,ysize)END PROCboxno;BOOL PROCboxno(WINDOW VARw,TEXT CONSTt,INT CONSTposition,BOOL CONSTtrennlinieweg):NOTboxyes(w,t,position,trennlinieweg)END PROCboxno;BOOL PROCboxno(WINDOW VARw,TEXT CONSTt,INT CONSTposition):NOTboxyes(w,t,position)END PROCboxno;TEXT PROCboxanswer(WINDOW VARw,TEXT CONSTt,vorgabe,INT CONSTposition,INT VARx,y,xsize,ysize):INT VARspa,zei;TEXT VARwert;getcursor(w,spa,zei);wert:=holeantwort(w,t,vorgabe,position,FALSE,x,y,xsize,ysize);oldfootnote;cursor(spa,zei);wertEND PROCboxanswer;TEXT PROCboxanswer(WINDOW VARw,TEXT CONSTt,vorgabe,INT CONSTposition,BOOL CONSTtrennlinieweg):INT VARx,y,xsize,ysize,spa,zei;getcursor(w,spa,zei);TEXT VARwert:=holeantwort(w,t,vorgabe,position,FALSE,x,y,xsize,ysize);pageup(x,y,xsize,ysize);oldfootnote;cursor(w,spa,zei);wertEND PROCboxanswer;TEXT PROCboxanswer(WINDOW VARw,TEXT CONSTt,vorgabe,INT CONSTposition):boxanswer(w,t,vorgabe,position,TRUE)END PROCboxanswer;TEXT PROCboxone(WINDOW VARw,THESAURUS CONSTthesaurus,TEXT CONSTtext1,text2,BOOL CONSTmitreinigung):INT VARspa,zei;getcursor(w,spa,zei);TEXT VARwert:=one(areax(w),areay(w),areaxsize(w),areaysize(w),thesaurus,text1,text2);IFmitreinigungTHENpageup(areax(w),areay(w),areaxsize(w),areaysize(w));FI;oldfootnote;cursor(w,spa,zei);wertEND PROCboxone;TEXT PROCboxanswerone(WINDOW VARw,TEXT CONSTtext,vorgabe,THESAURUS CONSTthesaurus,TEXT CONSTt1,t2,BOOL CONSTmitreinigung,trennlinieweg):INT VARx,y,xsize,ysize,spa,zei;getcursor(w,spa,zei);TEXT VARwert:=holeantwort(w,text,vorgabe,5,TRUE,x,y,xsize,ysize);IFwert=esc+auswahlTHENlasseauswaehlenELSEuebernimmdenwertFI;cursor(w,spa,zei);wert.lasseauswaehlen:IFmitreinigungTHENwert:=boxone(w,thesaurus,t1,t2,TRUE)ELSEwert:=boxone(w,thesaurus,t1,t2,FALSE)FI.uebernimmdenwert:IFmitreinigungTHENpageup(x,y,xsize,ysize);oldfootnoteFI.END PROCboxanswerone;TEXT PROCboxanswerone(WINDOW VARw,TEXT CONSTtext,vorgabe,THESAURUS CONSTthesaurus,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):boxanswerone(w,text,vorgabe,thesaurus,t1,t2,mitreinigung,TRUE)END PROCboxanswerone;THESAURUS PROCboxsome(WINDOW VARw,THESAURUS CONSTthesaurus,TEXT CONSTtext1,text2,BOOL CONSTmitreinigung):INT VARspa,zei;getcursor(w,spa,zei);THESAURUS VARwert:=some(areax(w),areay(w),areaxsize(w),areaysize(w),thesaurus,text1,text2);IFmitreinigungTHENpageup(areax(w),areay(w),areaxsize(w),areaysize(w));oldfootnoteFI;cursor(w,spa,zei);wertEND PROCboxsome;THESAURUS PROCboxanswersome(WINDOW VARw,TEXT CONSTtext,vorgabe,THESAURUS CONSTthesaurus,TEXT CONSTt1,t2,BOOL CONSTmitreinigung,trennlinieweg):THESAURUS VARergebnis:=emptythesaurus;INT VARx,y,xsize,ysize,spa,zei;getcursor(w,spa,zei);TEXT VARwert:=holeantwort(w,text,vorgabe,5,TRUE,x,y,xsize,ysize);IFwert=esc+auswahlTHENlasseauswaehlenELSEuebernimmdenwertFI;cursor(w,spa,zei);ergebnis.lasseauswaehlen:IFmitreinigungTHENergebnis:=boxsome(w,thesaurus,t1,t2,TRUE)ELSEergebnis:=boxsome(w,thesaurus,t1,t2,FALSE)FI.uebernimmdenwert:IFwert<>niltextTHENinsert(ergebnis,wert)FI;IFmitreinigungTHENpageup(x,y,xsize,ysize);oldfootnoteFI.END PROCboxanswersome;THESAURUS PROCboxanswersome(WINDOW VARw,TEXT CONSTtext,vorgabe,THESAURUS CONSTthesaurus,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):boxanswersome(w,text,vorgabe,thesaurus,t1,t2,mitreinigung,TRUE)END PROCboxanswersome;PROCzerteiletexte(TEXT CONSTt,ROW24TEXT VARtexte,INT VARbelegt):TEXT VARintern:=t;INT VARende:=0;belegt:=0;entfernefuehrendedelimiter;WHILEende<>maxint-1REPende:=pos(intern,delimiter);belegtINCR1;IFende=0THENende:=maxint-1END IF;texte(belegt):=subtext(intern,1,ende-1);intern:=subtext(intern,ende+1)PER.entfernefuehrendedelimiter:WHILE(internSUB1)=delimiterREPintern:=subtext(intern,2)PER END PROCzerteiletexte;PROCermittleboxgroesse(WINDOW VARw,INT CONSTposition,zusatzlaenge,minbreite,minhoehe,belegt,ROW24TEXT CONSTtexte,INT VARx,y,xsize,ysize):ermittleboxbreiteundboxhoehe;ermittlerahmenwerte.ermittleboxbreiteundboxhoehe:xsize:=0;FORysizeFROM1UPTObelegtREPEATxsize:=max(xsize,LENGTHtexte(ysize))
+PER;ysize:=belegt.ermittlerahmenwerte:schlagenotwendigegroessenauf;killueberlaengen;legebildschirmpositionenfest.schlagenotwendigegroessenauf:xsize:=max(xsize,minbreite);ysize:=max(ysize,minhoehe);ysizeINCRzusatzlaenge;ysizeINCR2;xsizeINCR2.killueberlaengen:ysize:=min(ysize,areaysize(w)-4);xsize:=min(xsize,areaxsize(w)-4).legebildschirmpositionenfest:SELECTpositionOF CASE1:plazierunglinksobenCASE2:plazierungrechtsobenCASE3:plazierunglinksuntenCASE4:plazierungrechtsuntenOTHERWISEplazierungimzentrumEND SELECT.plazierunglinksoben:x:=areax(w)+2;y:=areay(w)+2.plazierungrechtsoben:x:=areax(w)+areaxsize(w)-xsize-2;y:=areay(w)+2.plazierunglinksunten:x:=areax(w)+2;y:=areay(w)+areaysize(w)-ysize-2.plazierungrechtsunten:x:=areax(w)+areaxsize(w)-xsize-2;y:=areay(w)+areaysize(w)-ysize-2.plazierungimzentrum:x:=areax(w)+((areaxsize(w)-(xsize+2))DIV2)+1;y:=areay(w)+((areaysize(w)-ysize)DIV2)END PROCermittleboxgroesse;PROCschreibeboxtext(WINDOW VARw,TEXT CONSTt,INT CONSTposition,zusatzlaenge,mindestbreite,mindesthoehe,INT VARx,y,xsize,ysize):ROW24TEXT VARtexte;INT VARanzahltexte;INT VARi;zerteiletexte(t,texte,anzahltexte);FORiFROManzahltexte+1UPTO24REPEATtexte(i):=""PER;ermittleboxgroesse(w,position,zusatzlaenge,mindestbreite,mindesthoehe,anzahltexte,texte,x,y,xsize,ysize);schreibeboxkopf;schreibeboxrumpf.schreibeboxkopf:cursor(x,y);out(eckeobenlinks);out((xsize-2)*waagerecht);out(eckeobenrechts).schreibeboxrumpf:FORiFROM1UPTOysize-zusatzlaenge-2REPcursor(x,y+i);out(senkrecht+text(texte(i),xsize-2)+senkrecht)PER.END PROCschreibeboxtext;PROCschreibeboxfuss(WINDOW VARw,INT CONSTx,y,xsize,ysize,limit):schreibeabschlusszeile;footnote(aussage[1]);cursorinpositionundwarten.schreibeabschlusszeile:cursor(x,y+ysize-1);out(eckeuntenlinks);out((xsize-2)*waagerecht);out(eckeuntenrechts).cursorinpositionundwarten:cursorparken(w);clearbuffer;pause(limit)END PROCschreibeboxfuss;PROCcursorparken(WINDOW VARw):cursor(w,1,2)END PROCcursorparken;PROCschreibebox(WINDOW VARw,TEXT CONSTt,INT CONSTposition,timelimit,INT VARx,y,xsize,ysize):schreibeboxtext(w,t,position,0,0,0,x,y,xsize,ysize);schreibeboxfuss(w,x,y,xsize,ysize,timelimit)END PROCschreibebox;PROCschreibenotizfuss(WINDOW VARw,INT CONSTx,y,xsize,ysize):schreibeabschlusszeile;cursorparken(w).schreibeabschlusszeile:cursor(x,y+ysize-1);out(eckeuntenlinks);out((xsize-2)*waagerecht);out(eckeuntenrechts).END PROCschreibenotizfuss;PROCschreibenotiz(WINDOW VARw,TEXT CONSTt,INT CONSTposition,INT VARx,y,xsize,ysize):schreibeboxtext(w,t,position,0,0,0,x,y,xsize,ysize);schreibenotizfuss(w,x,y,xsize,ysize)END PROCschreibenotiz;PROCschreibealternativen(WINDOW VARw,TEXT CONSTt,altzeile,sonst,INT CONSTposition,BOOL CONSTmitabbruch,INT VARx,y,xsize,ysize,ergebnis):ROW24TEXT VARtexte;TEXT VARtasten:=gueltigezeichen+sonst;INT VARbelegt,obersteauswahlzeile,untersteauswahlzeile,maxlaenge,kommando,aktpos;BOOL VARausgewaehlt:=FALSE;IFmitabbruchTHENtastenCATescFI;zerteiletexte(altzeile,texte,belegt);errechnemaximalelaengederalternativen;cursoroff;schreibeboxtext(w,t,position,belegt,maxlaenge+9,0,x,y,xsize,ysize);schreibepraefixintexte;obersteauswahlzeile:=ysize-belegt;untersteauswahlzeile:=ysize;schreibealternativenaufbildschirm;schreibefusszeile;lasseauswaehlen;cursoron.errechnemaximalelaengederalternativen:INT VARi;maxlaenge:=0;FORiFROM1UPTObelegtREPEATmaxlaenge:=max(maxlaenge,LENGTHtexte(i))PER.schreibepraefixintexte:FORiFROM1UPTObelegtREPEAT IF(sonstSUBi)=trennliniensymbolTHENtexte(i):=(xsize-2)*trennliniensymbolELSEtexte(i):=(sonstSUBi)+" "+texte(i)END IF PER.schreibealternativenaufbildschirm:WINDOW VARhilf:=window(x,y,xsize,ysize);markiere(hilf,texte(1),obersteauswahlzeile);FORiFROM2UPTObelegtREPEATdemarkiere(hilf,texte(i),obersteauswahlzeile+i-1)PER.schreibefusszeile:cursor(x,y+ysize-1);out(eckeuntenlinks+(xsize-2)*waagerecht+eckeuntenrechts);IFmitabbruchTHENfootnote(aussage[2])ELSEberuecksichtigejaneinhinweisFI.beruecksichtigejaneinhinweis:IFsonst=janeintastenTHENfootnote(aussage[3])ELSEfootnote(aussage[4])FI.
+lasseauswaehlen:aktpos:=1;REPlieszeichen;interpretierezeichenUNTILausgewaehltEND REP;ergebnis:=aktpos.lieszeichen:TEXT VARzeichen;REPinchar(zeichen)UNTILzeichengueltigEND REP.zeichengueltig:kommando:=pos(tasten,zeichen);IFkommando=0THENout(piep);FALSE ELSE TRUE FI.interpretierezeichen:demarkiere(hilf,texte(aktpos),obersteauswahlzeile+aktpos-1);IFzeichen=escTHENpruefeaufescabbruchELSE SELECTkommandoOF CASE1:einsnachuntenCASE2:einsnachobenCASE3:ausgewaehlt:=TRUE OTHERWISEmittasteausgewaehltEND SELECT;IF NOTausgewaehltTHENmarkiere(hilf,texte(aktpos),obersteauswahlzeile+aktpos-1);END IF END IF.einsnachunten:REPaktpos:=aktposMODbelegt+1UNTIL(sonstSUBaktpos)<>trennliniensymbolEND REPEAT.einsnachoben:REPaktpos:=(aktpos+belegt-2)MODbelegt+1UNTIL(sonstSUBaktpos)<>trennliniensymbolEND REPEAT.mittasteausgewaehlt:IFzeichen=trennliniensymbolTHENout(piep)ELSEaktpos:=kommando-3+100;ausgewaehlt:=TRUE END IF.pruefeaufescabbruch:inchar(zeichen);IFzeichen=abbruchTHENausgewaehlt:=TRUE;aktpos:=0ELSEout(piep)FI END PROCschreibealternativen;PROCmarkiere(WINDOW VARw,TEXT CONSTt,INT CONSTzeile):outinverswithbeam(area(w),4,zeile,t,areaxsize(w)-6)END PROCmarkiere;PROCdemarkiere(WINDOW VARw,TEXT CONSTt,INT CONSTzeile):outwithbeam(area(w),4,zeile,t,areaxsize(w)-6)END PROCdemarkiere;BOOL PROCja(WINDOW VARw,TEXT CONSTt,INT CONSTposition,INT VARx,y,xsize,ysize):INT VARergebnis;schreibealternativen(w,t+"?",aussage[7],janeintasten,position,FALSE,x,y,xsize,ysize,ergebnis);ergebnis=1ORergebnis=101END PROCja;TEXT PROCholeantwort(WINDOW VARw,TEXT CONSTt,vorgabe,INT CONSTposition,BOOL CONSTmitauswahl,INT VARx,y,xsize,ysize):TEXT VAReingabe:=compress(vorgabe);schreibeboxtext(w,t,position,2,length(aussage[8])+12,2,x,y,xsize,ysize);schreibeantwortfuss;clearbuffer;REP IFeingabe="break"THENeingabe:=""FI;lasseeintragenUNTILeingabe<>"break"PER;liefereergebnis.schreibeantwortfuss:schreibeleerzeile;schreibeeingabezeile;schreibeabschlusszeile;IFmitauswahlTHENfootnote(aussage[5])ELSEfootnote(aussage[6])FI.schreibeleerzeile:cursor(x,y+ysize-3);out(senkrecht);out((xsize-2)*blank);out(senkrecht).schreibeeingabezeile:cursor(x,y+ysize-2);out(senkrecht);out(aussage[8]);out((xsize-2-length(aussage[8]))*blank);out(senkrecht).schreibeabschlusszeile:cursor(x,y+ysize-1);out(eckeuntenlinks);out((xsize-2)*waagerecht);out(eckeuntenrechts).lasseeintragen:TEXT VARexit:="";cursoron;cursor(x+length(aussage[8])+1,y+ysize-2);IFmitauswahlTHENeditget(eingabe,maxtextlength,textlaenge,"",abbruch+auswahl,exit)ELSEeditget(eingabe,maxtextlength,textlaenge,"",abbruch,exit)FI;cursoroff;IFexit=esc+abbruchTHENeingabe:=""ELIFmitauswahlAND(exit=esc+auswahl)THENeingabe:=esc+auswahlELSEeingabe:=compress(eingabe)FI.textlaenge:xsize-2-length(aussage[8]).liefereergebnis:eingabe.END PROCholeantwort;END PACKETlsdialog4;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls-DIALOG 5.korrektur b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 5.korrektur
new file mode 100644
index 0000000..8cee148
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 5.korrektur
@@ -0,0 +1,12 @@
+PACKETlsdialog5DEFINESwritehead,restorehead,setwindow2,menuinfo,menualternative,menuyes,menuno,menuone,menusome,menuanswer,menuanswerone,menuanswersome,installmenu,handlemenu,refreshsubmenu,deactivate,regeneratemenuscreen,activate,writemenunotice,erasemenunotice,menubasistext,anwendungstext,showmenuwindow,menuwindowpage,menuwindowout,menuwindowget,menuwindoweditget,menuwindowedit,menuwindowshow,menuwindowline,menuwindowyes,menuwindowno,menuwindowcursor,getmenuwindowcursor,remainingmenuwindowlines,menuwindowcenter,menuwindowstop,editorinformationen,stdinfoedit,menukartenname,currentmenuwindow,resetdialog,onlyintern,ausstieg,direktstart:LETsystemkuerzel="ls-DIALOG",menutafeltaskname="ls-MENUKARTEN",menutafeltype=1954,menutafelpraefix="ls-MENUKARTE:",stdmenukartenname="ls-MENUKARTE:Archiv",versionsnummer="1.1",copyright1=" (C) 1987/88 Eva Latta-Weber",copyright2=" (C) 1988 ERGOS GmbH";LETmaxmenus=6,maxmenutexte=300,maxinfotexte=2000,maxhauptmenupunkte=10,maxuntermenupunkte=15,ersteuntermenuzeile=3;LETblank=" ",verlassen="q",piep="�",cleol="�",cleop="�",trennzeilensymbol="###",bleibtleersymbol="***",hauptmenuluecke=" ";LETauswahlstring1="��
+� �?";TYPE MENUPUNKT=STRUCT(TEXTpunktkuerzel,punktname,procname,boxtext,BOOLaktiv,angewaehlt),EINZELMENU=STRUCT(INTbelegt,TEXTueberschrift,INTanfangsposition,maxlaenge,ROWmaxuntermenupunkteMENUPUNKTmenupunkt,INTaktuelleruntermenupunkt,TEXTstartprozedurname,leaveprozedurname),MENU=STRUCT(TEXTmenuname,kopfzeile,INTanzahlhauptmenupunkte,ROWmaxhauptmenupunkteEINZELMENUeinzelmenu,TEXTmenueingangsprozedur,menuausgangsprozedur,menuinfo,lizenznummer,versionsnummer,INThauptmenuzeiger,untermenuanfang,untermenuzeiger),INFOTEXT=STRUCT(INTanzahlinfotexte,ROWmaxinfotexteTEXTstelle),MENUTEXT=STRUCT(INTanzahlmenutexte,ROWmaxmenutexteTEXTplatz),MENULEISTE=STRUCT(INTbelegt,zeigeraktuell,zeigerhintergrund,ROWmaxmenusMENUmenu,MENUTEXTmenutext,INFOTEXTinfotext);BOUND MENULEISTE VARmenuleiste;DATASPACE VARds;WINDOW VARmenuwindow,schreibfenster,editorinfofenster;WINDOW VARzweitesmenu:=window(6,5,73,19);INITFLAG VARinthistask:=FALSE;INT VARanzahloffenermenus:=0;INT VARmenunotizx,menunotizxsize,menunotizy,menunotizysize,menunotizposition;TEXT VARangekoppeltemenutafel:="",menunotiztext;BOOL VARmenunotizistgesetzt:=FALSE,nurinterneverwendung:=FALSE,mitausstieg:=FALSE,hochruntererlaubt:=TRUE,activationchanged:=FALSE;REAL VARzeitpunkt:=clock(1);ROW13TEXT CONSTfehlermeldung:=ROW13TEXT:("Die Task '"+menutafeltaskname+"' existiert nicht!","Die Menükarte '","' existiert nicht in der Task '"+menutafeltaskname+"'!","' hat falschen Typ/Bezeichnung (keine 'MENÜKARTE')!","Das Menü '","' ist nicht in der angekoppelten Menükarte!","Zu viele geöffnete Menüs ( > 2 )!","Kein Menü geöffnet!","Menü enthält keine Menüpunkte!","Menüpunkt ist nicht im Menü enthalten!","Kein Text vorhanden!","Zugriff unmöglich!","Einschränkung unzulässig!");ROW1TEXT CONSTvergleichstext:=ROW1TEXT:("gibt es nicht");ROW3TEXT CONSThinweis:=ROW3TEXT:(" Info:<ESC><?>/<?> Wählen:<Pfeile> Bestätigen:<RETURN> Verlassen:<ESC><q>"," Weiter mit beliebiger Taste!"," Bitte warten...!");ROW3TEXT CONSTinfotext:=ROW3TEXT:(" Für diesen Menüpunkt ist (noch) keine Funktion eingetragen!"," Möchten Sie dieses Menü tatsächlich verlassen"," Leider ist zu diesem Menüpunkt kein Info - Text eingetragen!");PROCinstallmenu(TEXT CONSTmenutafelname):installmenu(menutafelname,TRUE)END PROCinstallmenu;PROCinstallmenu(TEXT CONSTmenutafelname,BOOL CONSTmitkennung):TEXT VARletzterparameter;IFmitkennungTHENzeigemenukennungFI;initialisieremenuggf;IFmenutafelnochnichtangekoppeltTHENletzterparameter:=std;holemenutafel;kopplemenutafelan;lastparam(letzterparameter)FI.initialisieremenuggf:IF NOTinitialized(inthistask)THENangekoppeltemenutafel:="";anzahloffenermenus:=0;menunotizistgesetzt:=FALSE;nurinterneverwendung:=FALSE FI.menutafelnochnichtangekoppelt:menutafelname<>angekoppeltemenutafel.holemenutafel:IF NOTexiststask(menutafeltaskname)THENbereinigesituation;cursoron;errorstop(
+fehlermeldung[1])FI;disablestop;fetch(menutafelname,/menutafeltaskname);IFiserrorANDpos(errormessage,vergleichstext[1])>0THENclearerror;enablestop;bereinigesituation;cursoron;errorstop(fehlermeldung[2]+menutafelname+fehlermeldung[3])ELIFiserrorTHENclearerror;enablestop;bereinigesituation;cursoron;errorstop(errormessage)ELSEenablestopFI.kopplemenutafelan:IFtype(old(menutafelname))=menutafeltypeANDpos(menutafelname,menutafelpraefix)=1THENforget(ds);ds:=old(menutafelname);menuleiste:=ds;angekoppeltemenutafel:=menutafelname;forget(menutafelname,quiet)ELSEbereinigesituation;cursoron;errorstop("'"+menutafelname+fehlermeldung[4])FI.END PROCinstallmenu;PROConlyintern(BOOL CONSTwert):nurinterneverwendung:=wertEND PROConlyintern;PROCausstieg(BOOL CONSTwert):mitausstieg:=wertEND PROCausstieg;TEXT PROCmenukartenname:IF NOTinitialized(inthistask)THENangekoppeltemenutafel:="";anzahloffenermenus:=0;menunotizistgesetzt:=FALSE;FI;angekoppeltemenutafelEND PROCmenukartenname;PROChandlemenu(TEXT CONSTmenuname):nurinterneverwendung:=FALSE;mitausstieg:=TRUE;handlemenu(menuname,"")END PROChandlemenu;PROChandlemenu(TEXT CONSTmenuname,ausstiegsproc):cursoroff;IFnurinterneverwendungTHENoeffnemenu(menuname)ELSEbietemenuanFI;lassemenupunkteauswaehlen;IFnurinterneverwendungTHENdo(ausstiegsproc);anzahloffenermenusDECR1;IFanzahloffenermenus<1THENerasemenunoticeFI;menuleiste.zeigeraktuell:=menuleiste.zeigerhintergrund;menuwindow:=window(1,2,79,23);nurinterneverwendung:=FALSE;mitausstieg:=TRUE;cursoronELSEschliessemenu;leereggfdenbildschirmFI.bietemenuan:REAL VARzwischenzeit:=clock(1)-zeitpunkt;IFzwischenzeit<2.0THENpause(20-int(10.0*zwischenzeit))FI;oeffnemenu(menuname).leereggfdenbildschirm:IFanzahloffenermenus<1THENerasemenunotice;page;cursoronFI.lassemenupunkteauswaehlen:TEXT VARkuerzelkette:="";starteaktuelleuntermenuoperationen;disablestop;REPcursorinwarteposition;ermittleaktuellekuerzelkette(kuerzelkette);nimmzeichenauf;interpretierezeichenUNTILmenuverlassengewuenschtPER.nimmzeichenauf:TEXT CONSTerlaubtezeichen:=auswahlstring1+kuerzelkette;TEXT VAReingabezeichen;INT VARzeichenposition;REPinchar(eingabezeichen);pruefeobfehler;zeichenposition:=pos(erlaubtezeichen,eingabezeichen);piepseggfUNTILzeichenposition>0PER.piepseggf:IFzeichenposition=0THENout(piep)FI.menuverlassengewuenscht:zeichenposition=6AND(zweiteszeichen=verlassen).interpretierezeichen:SELECTzeichenpositionOF CASE1:geheeinenhauptmenupunktnachlinksCASE2:geheeinenhauptmenupunktnachrechtsCASE3:geheeinenuntermenupunktnachuntenCASE4:geheeinenuntermenupunktnachobenCASE5:fuehreaktuellenmenupunktausCASE6:holeescsequenzCASE7:zeigeerklaerungstextimmenuanOTHERWISEwertekuerzeleingabeausEND SELECT.pruefeobfehler:IFiserrorTHENclearerror;regeneratemenuscreen;menuinfo(errormessage)END IF.geheeinenhauptmenupunktnachlinks:INT VARanzahlschritte:=1;beendeaktuelleuntermenuoperationen;loescheaktuellesuntermenuaufbildschirm;loeschealtehauptmenumarkierung;anzahlschritteINCRclearbufferandcount("�");ermittlelinkemenuposition;stelleaktuellenhauptmenupunktinversdar;starteaktuelleuntermenuoperationen;schreibeaktuellesuntermenuaufbildschirm.geheeinenhauptmenupunktnachrechts:anzahlschritte:=1;beendeaktuelleuntermenuoperationen;loescheaktuellesuntermenuaufbildschirm;loeschealtehauptmenumarkierung;anzahlschritteINCRclearbufferandcount("�");ermittlerechtemenuposition;stelleaktuellenhauptmenupunktinversdar;starteaktuelleuntermenuoperationen;schreibeaktuellesuntermenuaufbildschirm.loeschealtehauptmenumarkierung:eraseinvers(area(menuwindow),startpos,1,ueberschriftlaenge);out(area(menuwindow),startpos,1,ueberschrifttext).startpos:aktuellesuntermenu.anfangsposition.ueberschriftlaenge:length(ueberschrifttext).ueberschrifttext:aktuellesuntermenu.ueberschrift.ermittlelinkemenuposition:INT VARpositionszaehler;FORpositionszaehlerFROM1UPTOanzahlschritteREPdrehediemenupositionumeinenwertrunterPER.ermittlerechtemenuposition:FORpositionszaehlerFROM1UPTOanzahlschritteREPdrehediemenupositionumeinenwerthochPER.
+drehediemenupositionumeinenwertrunter:IFaktuellesmenu.hauptmenuzeiger>1THENaktuellesmenu.hauptmenuzeigerDECR1ELSEaktuellesmenu.hauptmenuzeiger:=aktuellesmenu.anzahlhauptmenupunkteFI.drehediemenupositionumeinenwerthoch:IFaktuellesmenu.hauptmenuzeiger<aktuellesmenu.anzahlhauptmenupunkteTHENaktuellesmenu.hauptmenuzeigerINCR1ELSEaktuellesmenu.hauptmenuzeiger:=1FI.geheeinenuntermenupunktnachunten:IF NOThochruntererlaubtTHENout(piep);LEAVEgeheeinenuntermenupunktnachuntenEND IF;INT VARnaechsteraktiver:=folgenderaktiveruntermenupunkt;nimmummarkierungvor.geheeinenuntermenupunktnachoben:IF NOThochruntererlaubtTHENout(piep);LEAVEgeheeinenuntermenupunktnachobenEND IF;naechsteraktiver:=vorausgehenderaktiveruntermenupunkt;nimmummarkierungvor.nimmummarkierungvor:IFueberhauptaktivemenupunktevorhandenTHENdemarkiereaktuellenuntermenupunkt;gehezumfolgendenuntermenupunkt;markiereaktuellenuntermenupunktFI.ueberhauptaktivemenupunktevorhanden:(aktuellesuntermenu.belegt>0)CAND(naechsteraktiver>0).gehezumfolgendenuntermenupunkt:aktuellesmenu.untermenuzeiger:=naechsteraktiver.stelleaktuellenhauptmenupunktinversdar:outinvers(area(menuwindow),startpos,1,ueberschrifttext).fuehreaktuellenmenupunktaus:IFaktuellesmenu.untermenuzeiger<>0THEN IFnurinterneverwendungANDmitausstiegTHENkennzeichnealsangetickt;disablestop;do(ausstiegsproc);do(menuanweisung);aktuellermenupunkt.angewaehlt:=FALSE;IFiserrorTHENputerror;clearerrorFI;enablestop;anzahloffenermenusDECR1;menuleiste.zeigeraktuell:=menuleiste.zeigerhintergrund;menuwindow:=window(1,2,79,23);nurinterneverwendung:=FALSE;cursoron;LEAVEhandlemenuELSEkennzeichnealsangetickt;fuehreoperationaus(menuanweisung);IFactivationchangedTHENactivationchanged:=FALSE;refreshsubmenu;IFfolgenderaktiveruntermenupunkt=0THENhochruntererlaubt:=FALSE ELSEhochruntererlaubt:=TRUE END IF END IF;nimmkennzeichnungzurueckFI ELSEout(piep)FI.kennzeichnealsangetickt:aktuellermenupunkt.angewaehlt:=TRUE;markiereaktuellenuntermenupunkt.nimmkennzeichnungzurueck:IFaktuellesmenu.untermenuzeiger<>0THENaktuellermenupunkt.angewaehlt:=FALSE;markiereaktuellenuntermenupunktEND IF.menuanweisung:compress(aktuellermenupunkt.procname).aktuellermenupunkt:aktuellesuntermenu.menupunkt[aktuellesmenu.untermenuzeiger].holeescsequenz:TEXT VARzweiteszeichen;inchar(zweiteszeichen);SELECTpos(verlassen+"?$",zweiteszeichen)OF CASE1:CASE2:menuinfo(menuleiste.menutext.platz[4],5,maxint)CASE3:gibinfoausOTHERWISEout(piep)END SELECT.wertekuerzeleingabeaus:naechsteraktiver:=pos(kuerzelkette,eingabezeichen);nimmummarkierungvor;fuehreaktuellenmenupunktaus.gibinfoaus:menuinfo(menuleiste.menutext.platz[20]).zeigeerklaerungstextimmenuan:IFaktuellesmenu.untermenuzeiger>0THEN IFcompress(erklaerungstext)=""THENmenuinfo(infotext[3])ELSEmenuinfo(erklaerungstext)FI FI.erklaerungstext:aktuellermenupunkt.boxtext.beendeaktuelleuntermenuoperationen:kuerzelkette:="".starteaktuelleuntermenuoperationen:ermittleaktuellekuerzelkette(kuerzelkette);IFstartoperation<>""THENfuehreoperationaus(startoperation)FI.startoperation:compress(aktuellesuntermenu.startprozedurname).END PROChandlemenu;PROCermittleaktuellekuerzelkette(TEXT VARkuerzelkette):kuerzelkette:="";INT VARkuerzelzeiger;FORkuerzelzeigerFROM1UPTOaktuellesuntermenu.belegtREP IFcompress(aktuellespunktkuerzel)=""THENkuerzelketteCAT"�"ELSEhaengeggfkuerzelanFI PER.aktuellespunktkuerzel:aktuellesuntermenu.menupunkt[kuerzelzeiger].punktkuerzel.haengeggfkuerzelan:IFbetrachteterpunktistaktivTHENkuerzelketteCATaktuellespunktkuerzelELSEkuerzelketteCAT"�"FI.betrachteterpunktistaktiv:aktuellesuntermenu.menupunkt[kuerzelzeiger].aktivEND PROCermittleaktuellekuerzelkette;PROCoeffnemenu(TEXT CONSTmenuname):cursoroff;sucheeingestelltesmenu;IFmenuexistiertnichtTHENcursoron;page;errorstop(fehlermeldung[5]+menuname+fehlermeldung[6])FI;anzahloffenermenusINCR1;ggfneueseiteaufschlagen;ueberpruefeanzahloffenermenus;legeggfaktuellesmenuaufeis;initialisieredenmenubildschirm;IF NOTnurinterneverwendungTHENaktuellesmenu.hauptmenuzeiger:=1;aktuellesmenu.untermenuzeiger:=
+0;aktuellesmenu.untermenuanfang:=0;FI;fuehreggfmenueingangsprozeduraus;showmenu;zeigeggfmenukenndatenan.sucheeingestelltesmenu:INT VARi,suchzeiger;BOOL VARgefunden:=FALSE;FORiFROM1UPTOmenuleiste.belegtREP IFmenuleiste.menu[i].menuname=menunameTHENgefunden:=TRUE;suchzeiger:=i;FI UNTILmenuleiste.menu[i].menuname=menunamePER.menuexistiertnicht:NOTgefunden.ueberpruefeanzahloffenermenus:IFanzahloffenermenus>2THENanzahloffenermenus:=0;cursoron;errorstop(fehlermeldung[7])FI.legeggfaktuellesmenuaufeis:IFanzahloffenermenus=2THENmenuleiste.zeigerhintergrund:=menuleiste.zeigeraktuellFI;menuleiste.zeigeraktuell:=suchzeiger.initialisieredenmenubildschirm:hochruntererlaubt:=TRUE;IFanzahloffenermenus=2THENmenuwindow:=zweitesmenu;ELSEmenuwindow:=window(1,2,79,23);FI.fuehreggfmenueingangsprozeduraus:IFaktuellesmenu.menueingangsprozedur<>""THENfuehreoperationaus(aktuellesmenu.menueingangsprozedur)FI.ggfneueseiteaufschlagen:IFanzahloffenermenus=1THENpageFI.zeigeggfmenukenndatenan:IFanzahloffenermenus=1ANDaktuellesmenu.menuinfo<>bleibtleersymbolTHENwritemenunotice(vollstaendigerinfotext,4);pause(100);erasemenunoticeFI.vollstaendigerinfotext:aktuellesmenu.menuinfo+aktuellesmenu.lizenznummer+aktuellesmenu.versionsnummerEND PROCoeffnemenu;PROCshowmenu:ueberpruefemenudaten;page(menuwindow,FALSE);schreibekopfzeile;zeigeinformationszeilean;stellehauptmenuleistezusammen;zeigehauptmenuan;stelleaktuellenhauptmenupunktinversdar;schreibeaktuellesuntermenuaufbildschirm.ueberpruefemenudaten:IFanzahloffenermenus=0THENerrorstop(fehlermeldung[8])ELIFaktuellesmenu.anzahlhauptmenupunkte<1THENerrorstop(fehlermeldung[9])FI.schreibekopfzeile:IFaktuellesmenu.kopfzeile<>""THENcursor(1,1);out(invers(text(aktuellesmenu.kopfzeile,77)))END IF.stellehauptmenuleistezusammen:TEXT VARhauptmenuzeile:=aktuellesmenu.menuname;INT VARzeiger;hauptmenuzeileCAT":";FORzeigerFROM1UPTOaktuellesmenu.anzahlhauptmenupunkteREPhaengehauptmenupunktanPER.haengehauptmenupunktan:hauptmenuzeileCAThauptmenuluecke;hauptmenuzeileCAThauptmenupunktname.hauptmenupunktname:aktuellesmenu.einzelmenu[zeiger].ueberschrift.zeigehauptmenuan:cursor(menuwindow,1,1);out(menuwindow,hauptmenuzeile);cursor(menuwindow,1,2);out(areaxsize(menuwindow)*waagerecht).stelleaktuellenhauptmenupunktinversdar:cursor(menuwindow,startposition,1);out(menuwindow,invers(ueberschrifttext)).startposition:aktuellesuntermenu.anfangsposition-1.ueberschrifttext:aktuellesuntermenu.ueberschrift.zeigeinformationszeilean:writepermanentfootnote(hinweis[1])END PROCshowmenu;PROCschreibeaktuellesuntermenuaufbildschirm:ermittlelinkeobereeckedesuntermenukastens;zeichnequerlinieneu;wirfuntermenuaus;showmenunotice;cursorinwarteposition.ermittlelinkeobereeckedesuntermenukastens:aktuellesmenu.untermenuanfang:=menumitte-halbemenubreite;achteaufrandextrema.menumitte:startposition+(length(ueberschrifttext)DIV2)-1.startposition:aktuellesuntermenu.anfangsposition.ueberschrifttext:aktuellesuntermenu.ueberschrift.halbemenubreite:aktuellesuntermenu.maxlaengeDIV2.achteaufrandextrema:gleicheggflinkenrandaus;gleicheggfrechtenrandaus.zeichnequerlinieneu:cursor(1,3);out(79*waagerecht).gleicheggflinkenrandaus:IFaktuellesmenu.untermenuanfang<4THENaktuellesmenu.untermenuanfang:=4FI.gleicheggfrechtenrandaus:IF(aktuellesmenu.untermenuanfang+aktuellesuntermenu.maxlaenge)>(areaxsize(menuwindow)-3)THENaktuellesmenu.untermenuanfang:=areaxsize(menuwindow)-aktuellesuntermenu.maxlaenge-3FI.wirfuntermenuaus:TEXT VARlinie:=(aktuellesuntermenu.maxlaenge+5)*waagerecht;IFaktuellesmenu.untermenuzeiger=0THENaktuellesmenu.untermenuzeiger:=folgenderaktiveruntermenupunktFI;wirfuntermenukopfzeileaus;wirfuntermenurumpfaus;wirfuntermenufusszeileaus;markiereaktuellenuntermenupunkt.wirfuntermenukopfzeileaus:cursor(menuwindow,spalte,anfangszeile);out(balkenoben);out(linie);out(balkenoben).wirfuntermenufusszeileaus:cursor(menuwindow,spalte,endezeile);out(eckeuntenlinks);out(linie);out(eckeuntenrechts).spalte:aktuellesmenu.untermenuanfang-3.anfangszeile:ersteuntermenuzeile-1.endezeile:
+ersteuntermenuzeile+aktuellesuntermenu.belegt.wirfuntermenurumpfaus:INT VARlaufvar;INT CONSTaktuellepunktlaenge:=aktuellesuntermenu.maxlaenge+1;FORlaufvarFROM1UPTOaktuellesuntermenu.belegtREPwirfeineeinzelnemenuzeileausPER.wirfeineeinzelnemenuzeileaus:outwithbeam(area(menuwindow),menuspalte,menuzeile,aktuellerpunktname,laenge).menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile+laufvar-1.aktuellerpunktname:untermenubezeichnung(laufvar).laenge:aktuellepunktlaengeEND PROCschreibeaktuellesuntermenuaufbildschirm;PROCloescheaktuellesuntermenuaufbildschirm:beendeaktuelleuntermenuoperationen;loescheuntermenuaufbildschirm;schreibebalkenwiederhin;aktuellesmenu.untermenuzeiger:=1.beendeaktuelleuntermenuoperationen:IFleaveoperation<>""THENfuehreoperationaus(leaveoperation)FI.leaveoperation:compress(aktuellesuntermenu.leaveprozedurname).loescheuntermenuaufbildschirm:INT VARlaufvar;FORlaufvarFROMaktuellesuntermenu.belegt+1DOWNTO1REPloescheeineeinzelnemenuzeilePER.loescheeineeinzelnemenuzeile:erasewithbeam(area(menuwindow),menuspalte,menuzeile,laenge).menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile+laufvar-1.laenge:aktuellesuntermenu.maxlaenge+1.schreibebalkenwiederhin:cursor(menuwindow,spalte,anfangszeile);out((aktuellesuntermenu.maxlaenge+7)*waagerecht).spalte:aktuellesmenu.untermenuanfang-3.anfangszeile:ersteuntermenuzeile-1.END PROCloescheaktuellesuntermenuaufbildschirm;PROCmarkiereaktuellenuntermenupunkt:IFaktuellesmenu.untermenuzeiger<>0THENlaufeggfzumnaechstenaktivenmenupunkt;IFaktuellesmenu.untermenuzeiger<>0THENoutinverswithbeam(area(menuwindow),menuspalte,menuzeile,aktuellerpunktname,laenge)FI;IFfolgenderaktiveruntermenupunkt=0THENhochruntererlaubt:=FALSE ELSEhochruntererlaubt:=TRUE END IF ELSEhochruntererlaubt:=FALSE FI.laufeggfzumnaechstenaktivenmenupunkt:IF NOTaktuellesuntermenu.menupunkt[aktuellesmenu.untermenuzeiger].aktivTHENaktuellesmenu.untermenuzeiger:=folgenderaktiveruntermenupunktFI.menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile-1+aktuellesmenu.untermenuzeiger.aktuellerpunktname:untermenubezeichnung(aktuellesmenu.untermenuzeiger).laenge:aktuellesuntermenu.maxlaenge+1END PROCmarkiereaktuellenuntermenupunkt;PROCdemarkiereaktuellenuntermenupunkt:IFaktuellesmenu.untermenuzeiger<>0THENeraseinvers(area(menuwindow),menuspalte,menuzeile,laenge);out(area(menuwindow),menuspalte,menuzeile,aktuellerpunktname,laenge)FI.menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile-1+aktuellesmenu.untermenuzeiger.aktuellerpunktname:untermenubezeichnung(aktuellesmenu.untermenuzeiger).laenge:aktuellesuntermenu.maxlaenge+1END PROCdemarkiereaktuellenuntermenupunkt;INT PROCfolgenderaktiveruntermenupunkt:INT VARnaechster,aktueller,anzahl,zeiger;zeiger:=aktuellesmenu.untermenuzeiger;IFzeiger=0THEN IFaktuellesuntermenu.menupunkt[1].aktivTHEN LEAVEfolgenderaktiveruntermenupunktWITH 1 ELSEaktueller:=1END IF ELSEaktueller:=zeigerEND IF;naechster:=aktueller;anzahl:=aktuellesuntermenu.belegt;REPerzeugenachfolger;IFnaechster=aktuellerTHENaktuellesmenu.untermenuzeiger:=zeiger;LEAVEfolgenderaktiveruntermenupunktWITH0ELIFaktuellesuntermenu.menupunkt[naechster].aktivTHENaktuellesmenu.untermenuzeiger:=zeiger;LEAVEfolgenderaktiveruntermenupunktWITHnaechsterEND IF PER;0.erzeugenachfolger:naechster:=(naechsterMODanzahl)+1END PROCfolgenderaktiveruntermenupunkt;INT PROCvorausgehenderaktiveruntermenupunkt:INT VARvoriger,aktueller,anzahl;aktueller:=aktuellesmenu.untermenuzeiger;voriger:=aktueller;anzahl:=aktuellesuntermenu.belegt;REPerzeugevorgaenger;IFvoriger=aktuellerTHEN LEAVEvorausgehenderaktiveruntermenupunktWITH0ELIFaktuellesuntermenu.menupunkt[voriger].aktivTHEN LEAVEvorausgehenderaktiveruntermenupunktWITHvorigerEND IF PER;0.erzeugevorgaenger:voriger:=((voriger+anzahl-2)MODanzahl)+1END PROCvorausgehenderaktiveruntermenupunkt;PROCcursorinwarteposition:cursor(areax(menuwindow),areay(menuwindow)+1)END PROCcursorinwarteposition;TEXT PROCuntermenubezeichnung(INT CONSTposition):TEXT
+VAR bezeichnung:="";bezeichnungCATkennzeichnung;bezeichnungCATpunktkennung;bezeichnung.kennzeichnung:IFaktuellermenupunkt.aktivTHEN IFaktuellermenupunkt.angewaehltTHEN"*"ELIFaktuellermenupunkt.punktkuerzel<>""THENaktuellermenupunkt.punktkuerzelELIFaktuellermenupunkt.punktkuerzel=""THENblankELSE"-"FI ELSE"-"FI.punktkennung:IFmenupunktisttrennzeileTHENstrichellinieELSEaktuellermenupunkt.punktnameFI.menupunktisttrennzeile:aktuellermenupunkt.punktname=(blank+trennzeilensymbol).strichellinie:(aktuellesuntermenu.maxlaenge+1)*"-".aktuellermenupunkt:aktuellesuntermenu.menupunkt[position]END PROCuntermenubezeichnung;PROCfuehreoperationaus(TEXT CONSToperation):disablestop;IFoperation=""THENmenuinfo(infotext[1]);LEAVEfuehreoperationausFI;do(operation);IFiserrorTHENclearerror;oldfootnote;regeneratemenuscreen;menuinfo(errormessage,5)FI;enablestop;cursoroffEND PROCfuehreoperationaus;PROCveraendereaktivierung(TEXT CONSTunterpunkt,BOOL CONSTeintrag):INT VARunterpunktposition:=0,zeiger;sucheunterpunkt;aendereaktivierung.sucheunterpunkt:FORzeigerFROM1UPTOuntermenuendeREP IFuntermenupunkt=blank+compress(unterpunkt)THENunterpunktposition:=zeiger;LEAVEsucheunterpunktFI PER;LEAVEveraendereaktivierung.untermenuende:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].belegt.untermenupunkt:aktuellesuntermenu.menupunkt[zeiger].punktname.aendereaktivierung:veraendereaktivierung(unterpunktposition,eintrag)END PROCveraendereaktivierung;PROCveraendereaktivierung(INT CONSTpunktnummer,BOOL CONSTeintrag):IFpunktnummer>=1ANDpunktnummer<=untermenuendeTHENaktuellesuntermenu.menupunkt[punktnummer].angewaehlt:=FALSE;aktuellesuntermenu.menupunkt[punktnummer].aktiv:=eintrag;activationchanged:=TRUE;FI.untermenuende:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].belegtEND PROCveraendereaktivierung;PROCveraendereanwahl(TEXT CONSTunterpunkt,BOOL CONSTeintrag):INT VARunterpunktposition:=0,zeiger;sucheunterpunkt;aendereanwahl.sucheunterpunkt:FORzeigerFROM1UPTOuntermenuendeREP IFuntermenupunkt=blank+compress(unterpunkt)THENunterpunktposition:=zeiger;LEAVEsucheunterpunktFI PER;enablestop;errorstop(fehlermeldung[10]).untermenuende:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].belegt.untermenupunkt:aktuellesuntermenu.menupunkt[zeiger].punktname.aendereanwahl:aktuellesuntermenu.menupunkt[unterpunktposition].angewaehlt:=eintragEND PROCveraendereanwahl;PROCactivate(TEXT CONSTunterpunkt):enablestop;veraendereaktivierung(unterpunkt,TRUE)END PROCactivate;PROCactivate(INT CONSTpunktnummer):enablestop;veraendereaktivierung(punktnummer,TRUE)END PROCactivate;PROCdeactivate(TEXT CONSTunterpunkt):enablestop;veraendereaktivierung(unterpunkt,FALSE)END PROCdeactivate;PROCdeactivate(INT CONSTpunktnummer):enablestop;veraendereaktivierung(punktnummer,FALSE)END PROCdeactivate;PROCselect(TEXT CONSTunterpunkt):enablestop;veraendereanwahl(unterpunkt,TRUE)END PROCselect;PROCdeselect(TEXT CONSTunterpunkt):enablestop;veraendereanwahl(unterpunkt,FALSE)END PROCdeselect;PROCschliessemenu:IFaktuellesmenu.menuausgangsprozedur<>""THENfootnote(hinweis[3]);fuehreoperationaus(aktuellesmenu.menuausgangsprozedur)FI;anzahloffenermenusDECR1;IFanzahloffenermenus=1THENaktivieredasaufeisgelegtemenuFI.aktivieredasaufeisgelegtemenu:hochruntererlaubt:=TRUE;menuleiste.zeigeraktuell:=menuleiste.zeigerhintergrund;menuwindow:=window(1,2,79,23);showmenuEND PROCschliessemenu;PROCrefreshsubmenu:schreibeaktuellesuntermenuaufbildschirm;showmenunotice;activationchanged:=FALSE END PROCrefreshsubmenu;PROCregeneratemenuscreen:IFanzahloffenermenus=0THENerrorstop(fehlermeldung[8])ELIFanzahloffenermenus=1THENpage;showmenu;showmenunoticeELSEzeigeerstesmenuan;zeigezweitesmenuan;showmenunoticeFI;activationchanged:=FALSE.zeigeerstesmenuan:INT VARmenuzeiger:=menuleiste.zeigeraktuell;menuleiste.zeigeraktuell:=menuleiste.zeigerhintergrund;menuwindow:=window(1,2,79,23);anzahloffenermenus:=1;showmenu.zeigezweitesmenuan:menuleiste.zeigeraktuell:=menuzeiger;menuwindow:=zweitesmenu;anzahloffenermenus:=2;showmenu.END PROC
+regeneratemenuscreen;PROCmenuinfo(TEXT CONSTt,INT CONSTposition,timelimit):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);boxinfo(w,t,position,timelimit,FALSE);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;END PROCmenuinfo;PROCmenuinfo(TEXT CONSTt,INT CONSTposition):menuinfo(t,position,maxint)END PROCmenuinfo;PROCmenuinfo(TEXT CONSTt):menuinfo(t,5,maxint)END PROCmenuinfo;INT PROCmenualternative(TEXT CONSTt,auswahlliste,zusatztasten,INT CONSTposition,BOOL CONSTmitabbruch):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);INT VARergebnis:=boxalternative(w,t,auswahlliste,zusatztasten,position,mitabbruch,FALSE);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;ergebnisEND PROCmenualternative;BOOL PROCmenuyes(TEXT CONSTfrage,INT CONSTposition):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);BOOL VARwert:=boxyes(w,frage,position,FALSE);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;wertEND PROCmenuyes;BOOL PROCmenuno(TEXT CONSTfrage,INT CONSTposition):NOTmenuyes(frage,position)END PROCmenuno;TEXT PROCmenuone(THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);TEXT CONSTwert:=boxone(w,thes,t1,t2,mitreinigung);IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;wertEND PROCmenuone;THESAURUS PROCmenusome(THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);THESAURUS CONSTthesaurus:=boxsome(w,thes,t1,t2,mitreinigung);IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;thesaurusEND PROCmenusome;TEXT PROCmenuanswer(TEXT CONSTt,vorgabe,INT CONSTposition):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);TEXT VARwert:=boxanswer(w,t,vorgabe,position,FALSE);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;wertEND PROCmenuanswer;TEXT PROCmenuanswerone(TEXT CONSTt,vorgabe,THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);TEXT VARwert:=boxanswerone(w,t,vorgabe,thes,t1,t2,mitreinigung,FALSE)IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;wertEND PROCmenuanswerone;THESAURUS PROCmenuanswersome(TEXT CONSTt,vorgabe,THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);THESAURUS VARwert:=boxanswersome(w,t,vorgabe,thes,t1,t2,mitreinigung,FALSE)IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;wertEND PROCmenuanswersome;TEXT PROCmenubasistext(INT CONSTnummer):IFnummer<=20THENfehlermeldung[12]ELIFnummer>menuleiste.menutext.anzahlmenutexteTHENfehlermeldung[11]ELSEmenuleiste.menutext.platz[nummer]FI END PROCmenubasistext;TEXT PROCanwendungstext(INT CONSTnummer):IFnummer>menuleiste.infotext.anzahlinfotexteTHENfehlermeldung[11]ELSEmenuleiste.infotext.stelle[nummer]FI END PROCanwendungstext;PROCzeigemenukennung:IFanzahloffenermenus=0THENzeigeangabenundemblem;FI.zeigeangabenundemblem:ROW5WINDOW VARw;w[1]:=window(40,4,30,9);w[2]:=window(36,6,30,9);w[3]:=window(30,8,30,9);w[4]:=window(22,10,30,9);w[5]:=window(12,12,30,9);page;show(w[1]);out(w[1],center(w[1],invers(systemkuerzel)));show(w[2]);out(w[2]," Version "+versionsnummer);show(w[3]);out(w[3],copyright1);show(w[4]);out(w[4],copyright2);show(w[5]);cursor(w[5],1,2);out(w[5]," lll sssssssss ");cursor(w[5],1,3);out(w[5]," lll sss sss ");cursor(w[5],1,4);out(w[5]," lll sss ");cursor(w[5],1,5);out(w[5]," lll sssssssss ");cursor(w[5],1,6);out(w[5]," lll sss ");cursor(w[5],1,7);out(w[
+5]," lll latta soft sss ");cursor(w[5],1,8);out(w[5]," lllllllll sssssssss ");cursor(79,24);zeitpunkt:=clock(1);END PROCzeigemenukennung;PROCresetdialog:angekoppeltemenutafel:="";anzahloffenermenus:=0END PROCresetdialog;PROCwritemenunotice(TEXT CONSTt,INT CONSTposition):erasemenunotice;boxnotice(menuwindow,t,position,menunotizx,menunotizy,menunotizxsize,menunotizysize);menunotiztext:=t;menunotizposition:=position;menunotizistgesetzt:=TRUE END PROCwritemenunotice;PROCshowmenunotice:IFmenunotizistgesetztTHENboxnotice(menuwindow,menunotiztext,menunotizposition,menunotizx,menunotizy,menunotizxsize,menunotizysize);FI END PROCshowmenunotice;PROCerasemenunotice:INT VARspa,zei;getcursor(spa,zei);IFmenunotizistgesetztTHENpageup(menunotizx,menunotizy,menunotizxsize,menunotizysize);menunotizistgesetzt:=FALSE;cursor(spa,zei)FI END PROCerasemenunotice;PROCinitializemenuwindow:schreibfenster:=window(areax(menuwindow)+1,areay(menuwindow)+3,areaxsize(menuwindow)-2,areaysize(menuwindow)-4)END PROCinitializemenuwindow;PROCshowmenuwindow:initializemenuwindow;show(schreibfenster);END PROCshowmenuwindow;PROCmenuwindowpage:initializemenuwindow;page(schreibfenster)END PROCmenuwindowpage;PROCmenuwindowout(TEXT CONSTtext):out(schreibfenster,text)END PROCmenuwindowout;PROCmenuwindowget(TEXT VARtext):get(schreibfenster,text)END PROCmenuwindowget;PROCmenuwindoweditget(TEXT VARtext):edit(schreibfenster,text)END PROCmenuwindoweditget;PROCmenuwindowedit(TEXT CONSTdateiname):initializemenuwindow;edit(schreibfenster,dateiname)END PROCmenuwindowedit;PROCmenuwindowedit(FILE VARf):initializemenuwindow;edit(schreibfenster,f)END PROCmenuwindowedit;PROCmenuwindowshow(TEXT CONSTdateiname):initializemenuwindow;show(schreibfenster,dateiname)END PROCmenuwindowshow;PROCmenuwindowshow(FILE VARf):initializemenuwindow;show(schreibfenster,f)END PROCmenuwindowshow;BOOL PROCmenuwindowyes(TEXT CONSTfrage):yes(schreibfenster,frage)END PROCmenuwindowyes;BOOL PROCmenuwindowno(TEXT CONSTfrage):no(schreibfenster,frage)END PROCmenuwindowno;PROCmenuwindowline:menuwindowline(1)END PROCmenuwindowline;PROCmenuwindowline(INT CONSTanzahl):line(schreibfenster,anzahl)END PROCmenuwindowline;PROCmenuwindowcursor(INT CONSTspa,zei):cursor(schreibfenster,spa,zei)END PROCmenuwindowcursor;PROCgetmenuwindowcursor(INT VARspa,zei):getcursor(schreibfenster,spa,zei)END PROCgetmenuwindowcursor;INT PROCremainingmenuwindowlines:remaininglines(schreibfenster)END PROCremainingmenuwindowlines;TEXT PROCmenuwindowcenter(TEXT CONSTt):center(schreibfenster,t)END PROCmenuwindowcenter;PROCmenuwindowstop:menuwindowstop(2)END PROCmenuwindowstop;PROCmenuwindowstop(INT CONSTanzahl):stop(schreibfenster,anzahl)END PROCmenuwindowstop;WINDOW PROCcurrentmenuwindow:initializemenuwindow;schreibfensterEND PROCcurrentmenuwindow;PROCstdinfoedit(FILE VARf,INT CONSToberstezeile):IFoberstezeile<1ORoberstezeile>3THENerrorstop(fehlermeldung[13]);FI;garantieremenukarte;cursor(1,oberstezeile);out(cleop);cursor(1,24);out(invers(text(menubasistext(141),76)));editorinfofenster:=window(1,oberstezeile+2,79,24-oberstezeile);kommandoauftastelegen("?","editorinformationen");commanddialogue(FALSE);cursoron;edit(f,1,oberstezeile+1,79,23-oberstezeile);commanddialogue(TRUE);kommandoauftastelegen("?","").garantieremenukarte:TEXT VARname:=compress(menukartenname);IFname=""THENinstallmenu(stdmenukartenname,FALSE)FI.END PROCstdinfoedit;PROCstdinfoedit(FILE VARf):stdinfoedit(f,1)END PROCstdinfoedit;PROCstdinfoedit(TEXT CONSTdateiname,INT CONSToberstezeile):FILE VARf:=sequentialfile(modify,dateiname);stdinfoedit(f,oberstezeile);END PROCstdinfoedit;PROCstdinfoedit(TEXT CONSTdateiname):stdinfoedit(dateiname,1)END PROCstdinfoedit;PROCeditorinformationen:BOOL VARendegewuenscht:=FALSE;INT VARz;FORzFROMstartwertUPTO22REPcursor(1,z);out(cleol);PER;REP INT VARerg:=boxalternative(editorinfofenster,menubasistext(149),menubasistext(150),menubasistext(151),5,FALSE,FALSE);erfuelledenwunschUNTILendegewuenschtPER;cursor(1,24);out(invers(text(menubasistext(
+141),76))).startwert:areay(editorinfofenster)+1.erfuelledenwunsch:IFerg>100THENergDECR100END IF;SELECTergOF CASE1,9:boxinfo(editorinfofenster,menubasistext(142),5,maxint,FALSE)CASE2,10:boxinfo(editorinfofenster,menubasistext(143),5,maxint,FALSE)CASE3,11:boxinfo(editorinfofenster,menubasistext(144),5,maxint,FALSE)CASE4,12:boxinfo(editorinfofenster,menubasistext(145),5,maxint,FALSE)CASE5,13:boxinfo(editorinfofenster,menubasistext(146),5,maxint,FALSE)CASE6,14:boxinfo(editorinfofenster,menubasistext(147),5,maxint,FALSE)CASE7,15:boxinfo(editorinfofenster,menubasistext(148),5,maxint,FALSE)CASE8,16:endegewuenscht:=TRUE END SELECT END PROCeditorinformationen;PROCbereinigesituation:page;forget(ds);resetdialogEND PROCbereinigesituation;PROCdirektstart(TEXT CONSTprocname,BOOL CONSTautoloeschen):TEXT VARdatname:="Selbststartergenerierungsdatei",letzter:=std;kopplearchivmenukartean;schreibeprogramm;insertiereprogramm;abkoppeln.kopplearchivmenukartean:installmenu(stdmenukartenname,FALSE).schreibeprogramm:forget(datname,quiet);FILE VARf:=sequentialfile(output,datname);putline(f,menubasistext(191));putline(f,"do ("+code(34)+"reset dialog; erase menunotice; "+procname+code(34)+");");putline(f,menubasistext(192));IFautoloeschenTHENputline(f,menubasistext(193))ELSEputline(f,menubasistext(194))FI;putline(f,menubasistext(195));putline(f,menubasistext(196)).insertiereprogramm:TEXT VARt:="insert ("+code(34)+datname+code(34)+")";do(t).abkoppeln:forget(datname,quiet);lastparam(letzter);resetdialog;globalmanager.END PROCdirektstart;PROCwritehead(TEXT CONSTt):INT VARx,y;getcursor(x,y);IFt<>""THENcursor(1,1);out(invers(text(t,77)))END IF;cursor(x,y)END PROCwritehead;PROCrestorehead:TEXT VARkopf:=menuleiste.menu[menuleiste.zeigeraktuell].kopfzeile;writehead(kopf)END PROCrestorehead;PROCsetwindow2(INT CONSTx2,y2,xsize2,ysize2):IFy2<2THENerrorstop("Kopfzeile wird überschrieben")END IF;zweitesmenu:=window(x2,y2,xsize2,ysize2);END PROCsetwindow2;.aktuellesuntermenu:aktmenu.einzelmenu[aktmenu.hauptmenuzeiger].aktmenu:menuleiste.menu[menuleiste.zeigeraktuell].aktuellesmenu:menuleiste.menu[menuleiste.zeigeraktuell].;END PACKETlsdialog5;
+
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls-DIALOG 5.simsel b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 5.simsel
new file mode 100644
index 0000000..c6bed08
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls-DIALOG 5.simsel
@@ -0,0 +1,12 @@
+PACKETlsdialog5DEFINESwritehead,restorehead,setwindow2,menuinfo,menualternative,menuyes,menuno,menuone,menusome,menuanswer,menuanswerone,menuanswersome,installmenu,handlemenu,refreshsubmenu,deactivate,regeneratemenuscreen,activate,writemenunotice,erasemenunotice,menubasistext,anwendungstext,showmenuwindow,menuwindowpage,menuwindowout,menuwindowget,menuwindoweditget,menuwindowedit,menuwindowshow,menuwindowline,menuwindowyes,menuwindowno,menuwindowcursor,getmenuwindowcursor,remainingmenuwindowlines,menuwindowcenter,menuwindowstop,editorinformationen,stdinfoedit,menukartenname,currentmenuwindow,resetdialog,onlyintern,ausstieg,direktstart:LETsystemkuerzel="ls-DIALOG",menutafeltaskname="ls-MENUKARTEN",menutafeltype=1954,menutafelpraefix="ls-MENUKARTE:",stdmenukartenname="ls-MENUKARTE:Archiv",versionsnummer="1.1",copyright1=" (C) 1987/88 Eva Latta-Weber",copyright2=" (C) 1988 ERGOS GmbH";LETmaxmenus=6,maxmenutexte=300,maxinfotexte=2000,maxhauptmenupunkte=10,maxuntermenupunkte=15,ersteuntermenuzeile=3;LETblank=" ",verlassen="q",piep="�",cleol="�",cleop="�",trennzeilensymbol="###",bleibtleersymbol="***",headzeilenlaenge=77,headproduktname="schulis Simulationssystem",hauptmenuluecke=" ";LETauswahlstring1="��
+� �?";TYPE MENUPUNKT=STRUCT(TEXTpunktkuerzel,punktname,procname,boxtext,BOOLaktiv,angewaehlt),EINZELMENU=STRUCT(INTbelegt,TEXTueberschrift,INTanfangsposition,maxlaenge,ROWmaxuntermenupunkteMENUPUNKTmenupunkt,INTaktuelleruntermenupunkt,TEXTstartprozedurname,leaveprozedurname),MENU=STRUCT(TEXTmenuname,kopfzeile,INTanzahlhauptmenupunkte,ROWmaxhauptmenupunkteEINZELMENUeinzelmenu,TEXTmenueingangsprozedur,menuausgangsprozedur,menuinfo,lizenznummer,versionsnummer,INThauptmenuzeiger,untermenuanfang,untermenuzeiger),INFOTEXT=STRUCT(INTanzahlinfotexte,ROWmaxinfotexteTEXTstelle),MENUTEXT=STRUCT(INTanzahlmenutexte,ROWmaxmenutexteTEXTplatz),MENULEISTE=STRUCT(INTbelegt,zeigeraktuell,zeigerhintergrund,ROWmaxmenusMENUmenu,MENUTEXTmenutext,INFOTEXTinfotext);BOUND MENULEISTE VARmenuleiste;DATASPACE VARds;WINDOW VARmenuwindow,schreibfenster,editorinfofenster;WINDOW VARzweitesmenu:=window(6,5,73,19);INITFLAG VARinthistask:=FALSE;INT VARanzahloffenermenus:=0;INT VARmenunotizx,menunotizxsize,menunotizy,menunotizysize,menunotizposition;TEXT VARangekoppeltemenutafel:="",menunotiztext;BOOL VARmenunotizistgesetzt:=FALSE,nurinterneverwendung:=FALSE,mitausstieg:=FALSE,hochruntererlaubt:=TRUE,activationchanged:=FALSE;REAL VARzeitpunkt:=clock(1);ROW13TEXT CONSTfehlermeldung:=ROW13TEXT:("Die Task '"+menutafeltaskname+"' existiert nicht!","Die Menükarte '","' existiert nicht in der Task '"+menutafeltaskname+"'!","' hat falschen Typ/Bezeichnung (keine 'MENÜKARTE')!","Das Menü '","' ist nicht in der angekoppelten Menükarte!","Zu viele geöffnete Menüs ( > 2 )!","Kein Menü geöffnet!","Menü enthält keine Menüpunkte!","Menüpunkt ist nicht im Menü enthalten!","Kein Text vorhanden!","Zugriff unmöglich!","Einschränkung unzulässig!");ROW1TEXT CONSTvergleichstext:=ROW1TEXT:("gibt es nicht");ROW3TEXT CONSThinweis:=ROW3TEXT:(" Info:<ESC><?>/<?> Wählen:<Pfeile> Bestätigen:<RETURN> Verlassen:<ESC><q>"," Weiter mit beliebiger Taste!"," Bitte warten...!");ROW3TEXT CONSTinfotext:=ROW3TEXT:(" Für diesen Menüpunkt ist (noch) keine Funktion eingetragen!"," Möchten Sie dieses Menü tatsächlich verlassen"," Leider ist zu diesem Menüpunkt kein Info - Text eingetragen!");PROCinstallmenu(TEXT CONSTmenutafelname):installmenu(menutafelname,TRUE)END PROCinstallmenu;PROCinstallmenu(TEXT CONSTmenutafelname,BOOL CONSTmitkennung):TEXT VARletzterparameter;IFmitkennungTHENzeigemenukennungFI;initialisieremenuggf;IFmenutafelnochnichtangekoppeltTHENletzterparameter:=std;holemenutafel;kopplemenutafelan;lastparam(letzterparameter)FI.initialisieremenuggf:IF NOTinitialized(inthistask)THENangekoppeltemenutafel:="";anzahloffenermenus:=0;menunotizistgesetzt:=FALSE;nurinterneverwendung:=FALSE FI.menutafelnochnichtangekoppelt:menutafelname<>angekoppeltemenutafel.holemenutafel:IF NOTexiststask
+(menutafeltaskname)THENbereinigesituation;cursoron;errorstop(fehlermeldung[1])FI;disablestop;fetch(menutafelname,/menutafeltaskname);IFiserrorANDpos(errormessage,vergleichstext[1])>0THENclearerror;enablestop;bereinigesituation;cursoron;errorstop(fehlermeldung[2]+menutafelname+fehlermeldung[3])ELIFiserrorTHENclearerror;enablestop;bereinigesituation;cursoron;errorstop(errormessage)ELSEenablestopFI.kopplemenutafelan:IFtype(old(menutafelname))=menutafeltypeANDpos(menutafelname,menutafelpraefix)=1THENforget(ds);ds:=old(menutafelname);menuleiste:=ds;angekoppeltemenutafel:=menutafelname;forget(menutafelname,quiet)ELSEbereinigesituation;cursoron;errorstop("'"+menutafelname+fehlermeldung[4])FI.END PROCinstallmenu;PROConlyintern(BOOL CONSTwert):nurinterneverwendung:=wertEND PROConlyintern;PROCausstieg(BOOL CONSTwert):mitausstieg:=wertEND PROCausstieg;TEXT PROCmenukartenname:IF NOTinitialized(inthistask)THENangekoppeltemenutafel:="";anzahloffenermenus:=0;menunotizistgesetzt:=FALSE;FI;angekoppeltemenutafelEND PROCmenukartenname;PROChandlemenu(TEXT CONSTmenuname,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof,PROC(LOESUNG VAR,BOOL VAR,TEXT VAR)zusatzdarst):nurinterneverwendung:=FALSE;mitausstieg:=TRUE;handlemenu(menuname,"",PROCf,PROCcof,PROCzusatzdarst)END PROChandlemenu;PROChandlemenu(TEXT CONSTmenuname,ausstiegsproc,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof,PROC(LOESUNG VAR,BOOL VAR,TEXT VAR)zusatzdarst):cursoroff;IFnurinterneverwendungTHENoeffnemenu(menuname)ELSEbietemenuanFI;lassemenupunkteauswaehlen;IFnurinterneverwendungTHENdo(ausstiegsproc);anzahloffenermenusDECR1;IFanzahloffenermenus<1THENerasemenunoticeFI;menuleiste.zeigeraktuell:=menuleiste.zeigerhintergrund;menuwindow:=window(1,2,79,23);nurinterneverwendung:=FALSE;mitausstieg:=TRUE;cursoronELSEschliessemenu;leereggfdenbildschirmFI.bietemenuan:REAL VARzwischenzeit:=clock(1)-zeitpunkt;IFzwischenzeit<2.0THENpause(20-int(10.0*zwischenzeit))FI;oeffnemenu(menuname).leereggfdenbildschirm:IFanzahloffenermenus<1THENerasemenunotice;page;cursoronFI.lassemenupunkteauswaehlen:TEXT VARkuerzelkette:="";starteaktuelleuntermenuoperationen;disablestop;REPcursorinwarteposition;ermittleaktuellekuerzelkette(kuerzelkette);nimmzeichenauf;interpretierezeichenUNTILmenuverlassengewuenschtPER.nimmzeichenauf:TEXT CONSTerlaubtezeichen:=auswahlstring1+kuerzelkette;TEXT VAReingabezeichen;INT VARzeichenposition;REPinchar(eingabezeichen);pruefeobfehler;zeichenposition:=pos(erlaubtezeichen,eingabezeichen);piepseggfUNTILzeichenposition>0PER.piepseggf:IFzeichenposition=0THENout(piep)FI.menuverlassengewuenscht:zeichenposition=6AND(zweiteszeichen=verlassen).pruefeobfehler:IFiserrorTHENregeneratemenuscreen;menuinfo(errormessage);clearerrorEND IF.interpretierezeichen:SELECTzeichenpositionOF CASE1:geheeinenhauptmenupunktnachlinksCASE2:geheeinenhauptmenupunktnachrechtsCASE3:geheeinenuntermenupunktnachuntenCASE4:geheeinenuntermenupunktnachobenCASE5:fuehreaktuellenmenupunktausCASE6:holeescsequenzCASE7:zeigeerklaerungstextimmenuanOTHERWISEwertekuerzeleingabeausEND SELECT.geheeinenhauptmenupunktnachlinks:INT VARanzahlschritte:=1;beendeaktuelleuntermenuoperationen;loescheaktuellesuntermenuaufbildschirm;loeschealtehauptmenumarkierung;anzahlschritteINCRclearbufferandcount("�");ermittlelinkemenuposition;stelleaktuellenhauptmenupunktinversdar;starteaktuelleuntermenuoperationen;schreibeaktuellesuntermenuaufbildschirm.geheeinenhauptmenupunktnachrechts:anzahlschritte:=1;beendeaktuelleuntermenuoperationen;loescheaktuellesuntermenuaufbildschirm;loeschealtehauptmenumarkierung;anzahlschritteINCRclearbufferandcount("�");ermittlerechtemenuposition;stelleaktuellenhauptmenupunktinversdar;starteaktuelleuntermenuoperationen;schreibeaktuellesuntermenuaufbildschirm.loeschealtehauptmenumarkierung:eraseinvers(area(menuwindow),startpos,1,ueberschriftlaenge);out(area(menuwindow),startpos,1,ueberschrifttext).
+startpos:aktuellesuntermenu.anfangsposition.ueberschriftlaenge:length(ueberschrifttext).ueberschrifttext:aktuellesuntermenu.ueberschrift.ermittlelinkemenuposition:INT VARpositionszaehler;FORpositionszaehlerFROM1UPTOanzahlschritteREPdrehediemenupositionumeinenwertrunterPER.ermittlerechtemenuposition:FORpositionszaehlerFROM1UPTOanzahlschritteREPdrehediemenupositionumeinenwerthochPER.drehediemenupositionumeinenwertrunter:IFaktuellesmenu.hauptmenuzeiger>1THENaktuellesmenu.hauptmenuzeigerDECR1ELSEaktuellesmenu.hauptmenuzeiger:=aktuellesmenu.anzahlhauptmenupunkteFI.drehediemenupositionumeinenwerthoch:IFaktuellesmenu.hauptmenuzeiger<aktuellesmenu.anzahlhauptmenupunkteTHENaktuellesmenu.hauptmenuzeigerINCR1ELSEaktuellesmenu.hauptmenuzeiger:=1FI.geheeinenuntermenupunktnachunten:IF NOThochruntererlaubtTHENout(piep);LEAVEgeheeinenuntermenupunktnachuntenEND IF;INT VARnaechsteraktiver:=folgenderaktiveruntermenupunkt;nimmummarkierungvor.geheeinenuntermenupunktnachoben:IF NOThochruntererlaubtTHENout(piep);LEAVEgeheeinenuntermenupunktnachobenEND IF;naechsteraktiver:=vorausgehenderaktiveruntermenupunkt;nimmummarkierungvor.nimmummarkierungvor:IFueberhauptaktivemenupunktevorhandenTHENdemarkiereaktuellenuntermenupunkt;gehezumfolgendenuntermenupunkt;markiereaktuellenuntermenupunktFI.ueberhauptaktivemenupunktevorhanden:(aktuellesuntermenu.belegt>0)CAND(naechsteraktiver>0).gehezumfolgendenuntermenupunkt:aktuellesmenu.untermenuzeiger:=naechsteraktiver.stelleaktuellenhauptmenupunktinversdar:outinvers(area(menuwindow),startpos,1,ueberschrifttext).fuehreaktuellenmenupunktaus:IFaktuellesmenu.untermenuzeiger>0THEN IFnurinterneverwendungANDmitausstiegTHENkennzeichnealsangetickt;disablestop;do(ausstiegsproc);do(menuanweisung);aktuellermenupunkt.angewaehlt:=FALSE;IFiserrorTHENputerror;clearerrorFI;enablestop;anzahloffenermenusDECR1;menuleiste.zeigeraktuell:=menuleiste.zeigerhintergrund;menuwindow:=window(1,2,79,23);nurinterneverwendung:=FALSE;cursoron;LEAVEhandlemenuELSEkennzeichnealsangetickt;IFmenuanweisung=""THENverteiler(aktuellesmenu.hauptmenuzeiger,aktuellesmenu.untermenuzeiger,PROCf,PROCcof,PROCzusatzdarst);ELSEfuehreoperationaus(menuanweisung);FI;IFactivationchangedTHENactivationchanged:=FALSE;refreshsubmenu;IFfolgenderaktiveruntermenupunkt=0THENhochruntererlaubt:=FALSE ELSEhochruntererlaubt:=TRUE END IF END IF;nimmkennzeichnungzurueckFI ELSEout(piep)FI.kennzeichnealsangetickt:aktuellermenupunkt.angewaehlt:=TRUE;markiereaktuellenuntermenupunkt.nimmkennzeichnungzurueck:IFaktuellesmenu.untermenuzeiger<>0THENaktuellermenupunkt.angewaehlt:=FALSE;markiereaktuellenuntermenupunktEND IF.menuanweisung:compress(aktuellermenupunkt.procname).aktuellermenupunkt:aktuellesuntermenu.menupunkt[aktuellesmenu.untermenuzeiger].holeescsequenz:TEXT VARzweiteszeichen;inchar(zweiteszeichen);SELECTpos(verlassen+"?$",zweiteszeichen)OF CASE1:CASE2:menuinfo(menuleiste.menutext.platz[4],5,maxint)CASE3:gibinfoausOTHERWISEout(piep)END SELECT.gibinfoaus:menuinfo(menuleiste.menutext.platz[20]).zeigeerklaerungstextimmenuan:IFaktuellesmenu.untermenuzeiger>0THEN IFcompress(erklaerungstext)=""THENmenuinfo(infotext[3])ELSEmenuinfo(erklaerungstext)FI FI.erklaerungstext:aktuellermenupunkt.boxtext.wertekuerzeleingabeaus:naechsteraktiver:=pos(kuerzelkette,eingabezeichen);nimmummarkierungvor;fuehreaktuellenmenupunktaus.starteaktuelleuntermenuoperationen:ermittleaktuellekuerzelkette(kuerzelkette);IFstartoperation<>""THENfuehreoperationaus(startoperation)FI.startoperation:compress(aktuellesuntermenu.startprozedurname).beendeaktuelleuntermenuoperationen:kuerzelkette:="".END PROChandlemenu;PROCermittleaktuellekuerzelkette(TEXT VARkuerzelkette):kuerzelkette:="";INT VARkuerzelzeiger;FORkuerzelzeigerFROM1UPTOaktuellesuntermenu.belegtREP IFcompress(aktuellespunktkuerzel)=""THENkuerzelketteCAT"�"ELSEhaengeggfkuerzelanFI PER.aktuellespunktkuerzel:aktuellesuntermenu.menupunkt[kuerzelzeiger].punktkuerzel.haengeggfkuerzelan:IFbetrachteterpunktistaktivTHENkuerzelketteCATaktuellespunktkuerzelELSEkuerzelkette
+CAT"�"FI.betrachteterpunktistaktiv:aktuellesuntermenu.menupunkt[kuerzelzeiger].aktivEND PROCermittleaktuellekuerzelkette;PROCoeffnemenu(TEXT CONSTmenuname):cursoroff;sucheeingestelltesmenu;IFmenuexistiertnichtTHENcursoron;page;errorstop(fehlermeldung[5]+menuname+fehlermeldung[6])FI;anzahloffenermenusINCR1;ggfneueseiteaufschlagen;ueberpruefeanzahloffenermenus;legeggfaktuellesmenuaufeis;initialisieredenmenubildschirm;IF NOTnurinterneverwendungTHENaktuellesmenu.hauptmenuzeiger:=1;aktuellesmenu.untermenuzeiger:=0;aktuellesmenu.untermenuanfang:=0;FI;fuehreggfmenueingangsprozeduraus;showmenu;zeigeggfmenukenndatenan.sucheeingestelltesmenu:INT VARi,suchzeiger;BOOL VARgefunden:=FALSE;FORiFROM1UPTOmenuleiste.belegtREP IFmenuleiste.menu[i].menuname=menunameTHENgefunden:=TRUE;suchzeiger:=i;FI UNTILmenuleiste.menu[i].menuname=menunamePER.menuexistiertnicht:NOTgefunden.ueberpruefeanzahloffenermenus:IFanzahloffenermenus>2THENanzahloffenermenus:=0;cursoron;errorstop(fehlermeldung[7])FI.legeggfaktuellesmenuaufeis:IFanzahloffenermenus=2THENmenuleiste.zeigerhintergrund:=menuleiste.zeigeraktuellFI;menuleiste.zeigeraktuell:=suchzeiger.initialisieredenmenubildschirm:hochruntererlaubt:=TRUE;IFanzahloffenermenus=2THENmenuwindow:=zweitesmenu;ELSEmenuwindow:=window(1,2,79,23);FI.fuehreggfmenueingangsprozeduraus:IFaktuellesmenu.menueingangsprozedur<>""THENfuehreoperationaus(aktuellesmenu.menueingangsprozedur)FI.ggfneueseiteaufschlagen:IFanzahloffenermenus=1THENpageFI.zeigeggfmenukenndatenan:IFanzahloffenermenus=1ANDaktuellesmenu.menuinfo<>bleibtleersymbolTHENwritemenunotice(vollstaendigerinfotext,4);pause(100);erasemenunoticeFI.vollstaendigerinfotext:aktuellesmenu.menuinfo+aktuellesmenu.lizenznummer+aktuellesmenu.versionsnummerEND PROCoeffnemenu;PROCshowmenu:ueberpruefemenudaten;page(menuwindow,FALSE);schreibekopfzeile;zeigeinformationszeilean;stellehauptmenuleistezusammen;zeigehauptmenuan;stelleaktuellenhauptmenupunktinversdar;schreibeaktuellesuntermenuaufbildschirm.ueberpruefemenudaten:IFanzahloffenermenus=0THENerrorstop(fehlermeldung[8])ELIFaktuellesmenu.anzahlhauptmenupunkte<1THENerrorstop(fehlermeldung[9])FI.schreibekopfzeile:zeigekopfbalken;.stellehauptmenuleistezusammen:TEXT VARhauptmenuzeile:=aktuellesmenu.menuname;INT VARzeiger;hauptmenuzeileCAT":";FORzeigerFROM1UPTOaktuellesmenu.anzahlhauptmenupunkteREPhaengehauptmenupunktanPER.haengehauptmenupunktan:hauptmenuzeileCAThauptmenuluecke;hauptmenuzeileCAThauptmenupunktname.hauptmenupunktname:aktuellesmenu.einzelmenu[zeiger].ueberschrift.zeigehauptmenuan:cursor(menuwindow,1,1);out(menuwindow,hauptmenuzeile);cursor(menuwindow,1,2);out(areaxsize(menuwindow)*waagerecht).stelleaktuellenhauptmenupunktinversdar:cursor(menuwindow,startposition,1);out(menuwindow,invers(ueberschrifttext)).startposition:aktuellesuntermenu.anfangsposition-1.ueberschrifttext:aktuellesuntermenu.ueberschrift.zeigeinformationszeilean:writepermanentfootnote(hinweis[1])END PROCshowmenu;PROCschreibeaktuellesuntermenuaufbildschirm:ermittlelinkeobereeckedesuntermenukastens;zeichnequerlinieneu;wirfuntermenuaus;showmenunotice;cursorinwarteposition.ermittlelinkeobereeckedesuntermenukastens:aktuellesmenu.untermenuanfang:=menumitte-halbemenubreite;achteaufrandextrema.menumitte:startposition+(length(ueberschrifttext)DIV2)-1.startposition:aktuellesuntermenu.anfangsposition.ueberschrifttext:aktuellesuntermenu.ueberschrift.halbemenubreite:aktuellesuntermenu.maxlaengeDIV2.achteaufrandextrema:gleicheggflinkenrandaus;gleicheggfrechtenrandaus.zeichnequerlinieneu:cursor(1,3);out(79*waagerecht).gleicheggflinkenrandaus:IFaktuellesmenu.untermenuanfang<4THENaktuellesmenu.untermenuanfang:=4FI.gleicheggfrechtenrandaus:IF(aktuellesmenu.untermenuanfang+aktuellesuntermenu.maxlaenge)>(areaxsize(menuwindow)-3)THENaktuellesmenu.untermenuanfang:=areaxsize(menuwindow)-aktuellesuntermenu.maxlaenge-3FI.wirfuntermenuaus:TEXT VARlinie:=(aktuellesuntermenu.maxlaenge+5)*waagerecht;IFaktuellesmenu.untermenuzeiger=0THENaktuellesmenu.untermenuzeiger:=
+folgenderaktiveruntermenupunktFI;wirfuntermenukopfzeileaus;wirfuntermenurumpfaus;wirfuntermenufusszeileaus;markiereaktuellenuntermenupunkt.wirfuntermenukopfzeileaus:cursor(menuwindow,spalte,anfangszeile);out(balkenoben);out(linie);out(balkenoben).wirfuntermenufusszeileaus:cursor(menuwindow,spalte,endezeile);out(eckeuntenlinks);out(linie);out(eckeuntenrechts).spalte:aktuellesmenu.untermenuanfang-3.anfangszeile:ersteuntermenuzeile-1.endezeile:ersteuntermenuzeile+aktuellesuntermenu.belegt.wirfuntermenurumpfaus:INT VARlaufvar;INT CONSTaktuellepunktlaenge:=aktuellesuntermenu.maxlaenge+1;FORlaufvarFROM1UPTOaktuellesuntermenu.belegtREPwirfeineeinzelnemenuzeileausPER.wirfeineeinzelnemenuzeileaus:outwithbeam(area(menuwindow),menuspalte,menuzeile,aktuellerpunktname,laenge).menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile+laufvar-1.aktuellerpunktname:untermenubezeichnung(laufvar).laenge:aktuellepunktlaengeEND PROCschreibeaktuellesuntermenuaufbildschirm;PROCloescheaktuellesuntermenuaufbildschirm:beendeaktuelleuntermenuoperationen;loescheuntermenuaufbildschirm;schreibebalkenwiederhin;aktuellesmenu.untermenuzeiger:=1.beendeaktuelleuntermenuoperationen:IFleaveoperation<>""THENfuehreoperationaus(leaveoperation)FI.leaveoperation:compress(aktuellesuntermenu.leaveprozedurname).loescheuntermenuaufbildschirm:INT VARlaufvar;FORlaufvarFROMaktuellesuntermenu.belegt+1DOWNTO1REPloescheeineeinzelnemenuzeilePER.loescheeineeinzelnemenuzeile:erasewithbeam(area(menuwindow),menuspalte,menuzeile,laenge).menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile+laufvar-1.laenge:aktuellesuntermenu.maxlaenge+1.schreibebalkenwiederhin:cursor(menuwindow,spalte,anfangszeile);out((aktuellesuntermenu.maxlaenge+7)*waagerecht).spalte:aktuellesmenu.untermenuanfang-3.anfangszeile:ersteuntermenuzeile-1.END PROCloescheaktuellesuntermenuaufbildschirm;PROCmarkiereaktuellenuntermenupunkt:IFaktuellesmenu.untermenuzeiger<>0THENlaufeggfzumnaechstenaktivenmenupunkt;IFaktuellesmenu.untermenuzeiger<>0THENoutinverswithbeam(area(menuwindow),menuspalte,menuzeile,aktuellerpunktname,laenge)FI;IFfolgenderaktiveruntermenupunkt=0THENhochruntererlaubt:=FALSE ELSEhochruntererlaubt:=TRUE END IF ELSEhochruntererlaubt:=FALSE FI.laufeggfzumnaechstenaktivenmenupunkt:IF NOTaktuellesuntermenu.menupunkt[aktuellesmenu.untermenuzeiger].aktivTHENaktuellesmenu.untermenuzeiger:=folgenderaktiveruntermenupunktFI.menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile-1+aktuellesmenu.untermenuzeiger.aktuellerpunktname:untermenubezeichnung(aktuellesmenu.untermenuzeiger).laenge:aktuellesuntermenu.maxlaenge+1END PROCmarkiereaktuellenuntermenupunkt;PROCdemarkiereaktuellenuntermenupunkt:IFaktuellesmenu.untermenuzeiger<>0THENeraseinvers(area(menuwindow),menuspalte,menuzeile,laenge);out(area(menuwindow),menuspalte,menuzeile,aktuellerpunktname,laenge)FI.menuspalte:aktuellesmenu.untermenuanfang.menuzeile:ersteuntermenuzeile-1+aktuellesmenu.untermenuzeiger.aktuellerpunktname:untermenubezeichnung(aktuellesmenu.untermenuzeiger).laenge:aktuellesuntermenu.maxlaenge+1END PROCdemarkiereaktuellenuntermenupunkt;INT PROCfolgenderaktiveruntermenupunkt:INT VARnaechster,aktueller,anzahl,zeiger;zeiger:=aktuellesmenu.untermenuzeiger;IFzeiger=0THEN IFaktuellesuntermenu.menupunkt[1].aktivTHEN LEAVEfolgenderaktiveruntermenupunktWITH1ELSEaktueller:=1END IF ELSEaktueller:=zeigerEND IF;naechster:=aktueller;anzahl:=aktuellesuntermenu.belegt;REPerzeugenachfolger;IFnaechster=aktuellerTHENaktuellesmenu.untermenuzeiger:=zeiger;LEAVEfolgenderaktiveruntermenupunktWITH0ELIFaktuellesuntermenu.menupunkt[naechster].aktivTHENaktuellesmenu.untermenuzeiger:=zeiger;LEAVEfolgenderaktiveruntermenupunktWITHnaechsterEND IF PER;0.erzeugenachfolger:naechster:=(naechsterMODanzahl)+1END PROCfolgenderaktiveruntermenupunkt;INT PROCvorausgehenderaktiveruntermenupunkt:INT
+VARvoriger,aktueller,anzahl;aktueller:=aktuellesmenu.untermenuzeiger;voriger:=aktueller;anzahl:=aktuellesuntermenu.belegt;REPerzeugevorgaenger;IF
+voriger=aktuellerTHEN LEAVEvorausgehenderaktiveruntermenupunktWITH0ELIFaktuellesuntermenu.menupunkt[voriger].aktivTHEN LEAVEvorausgehenderaktiveruntermenupunktWITHvorigerEND IF PER;0.erzeugevorgaenger:voriger:=((voriger+anzahl-2)MODanzahl)+1END PROCvorausgehenderaktiveruntermenupunkt;PROCcursorinwarteposition:cursor(areax(menuwindow),areay(menuwindow)+1)END PROCcursorinwarteposition;TEXT PROCuntermenubezeichnung(INT CONSTposition):TEXT VARbezeichnung:="";bezeichnungCATkennzeichnung;bezeichnungCATpunktkennung;bezeichnung.kennzeichnung:IFaktuellermenupunkt.aktivTHEN IFaktuellermenupunkt.angewaehltTHEN"*"ELIFaktuellermenupunkt.punktkuerzel<>""THENaktuellermenupunkt.punktkuerzelELIFaktuellermenupunkt.punktkuerzel=""THENblankELSE"-"FI ELSE"-"FI.punktkennung:IFmenupunktisttrennzeileTHENstrichellinieELSEaktuellermenupunkt.punktnameFI.menupunktisttrennzeile:aktuellermenupunkt.punktname=(blank+trennzeilensymbol).strichellinie:(aktuellesuntermenu.maxlaenge+1)*"-".aktuellermenupunkt:aktuellesuntermenu.menupunkt[position]END PROCuntermenubezeichnung;PROCfuehreoperationaus(TEXT CONSToperation):disablestop;IFoperation=""THENmenuinfo(infotext[1]);LEAVEfuehreoperationausFI;do(operation);IFiserrorTHENclearerror;regeneratemenuscreen;menuinfo(errormessage,5);activationchanged:=TRUE;FI;enablestop;cursoroffEND PROCfuehreoperationaus;PROCveraendereaktivierung(TEXT CONSTunterpunkt,BOOL CONSTeintrag):INT VARunterpunktposition:=0,zeiger;sucheunterpunkt;aendereaktivierung.sucheunterpunkt:FORzeigerFROM1UPTOuntermenuendeREP IFuntermenupunkt=blank+compress(unterpunkt)THENunterpunktposition:=zeiger;LEAVEsucheunterpunktFI PER;LEAVEveraendereaktivierung.untermenuende:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].belegt.untermenupunkt:aktuellesuntermenu.menupunkt[zeiger].punktname.aendereaktivierung:veraendereaktivierung(unterpunktposition,eintrag)END PROCveraendereaktivierung;PROCveraendereaktivierung(INT CONSTpunktnummer,BOOL CONSTeintrag):IFpunktnummer>=1ANDpunktnummer<=untermenuendeTHENaktuellesuntermenu.menupunkt[punktnummer].angewaehlt:=FALSE;aktuellesuntermenu.menupunkt[punktnummer].aktiv:=eintrag;activationchanged:=TRUE;FI.untermenuende:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].belegtEND PROCveraendereaktivierung;PROCveraendereanwahl(TEXT CONSTunterpunkt,BOOL CONSTeintrag):INT VARunterpunktposition:=0,zeiger;sucheunterpunkt;aendereanwahl.sucheunterpunkt:FORzeigerFROM1UPTOuntermenuendeREP IFuntermenupunkt=blank+compress(unterpunkt)THENunterpunktposition:=zeiger;LEAVEsucheunterpunktFI PER;enablestop;errorstop(fehlermeldung[10]).untermenuende:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].belegt.untermenupunkt:aktuellesuntermenu.menupunkt[zeiger].punktname.aendereanwahl:aktuellesuntermenu.menupunkt[unterpunktposition].angewaehlt:=eintragEND PROCveraendereanwahl;PROCactivate(TEXT CONSTunterpunkt):enablestop;veraendereaktivierung(unterpunkt,TRUE)END PROCactivate;PROCactivate(INT CONSTpunktnummer):enablestop;veraendereaktivierung(punktnummer,TRUE)END PROCactivate;PROCdeactivate(TEXT CONSTunterpunkt):enablestop;veraendereaktivierung(unterpunkt,FALSE)END PROCdeactivate;PROCdeactivate(INT CONSTpunktnummer):enablestop;veraendereaktivierung(punktnummer,FALSE)END PROCdeactivate;PROCselect(TEXT CONSTunterpunkt):enablestop;veraendereanwahl(unterpunkt,TRUE)END PROCselect;PROCdeselect(TEXT CONSTunterpunkt):enablestop;veraendereanwahl(unterpunkt,FALSE)END PROCdeselect;PROCschliessemenu:IFaktuellesmenu.menuausgangsprozedur<>""THENfootnote(hinweis[3]);fuehreoperationaus(aktuellesmenu.menuausgangsprozedur)FI;anzahloffenermenusDECR1;IFanzahloffenermenus=1THENaktivieredasaufeisgelegtemenuFI.aktivieredasaufeisgelegtemenu:hochruntererlaubt:=TRUE;menuleiste.zeigeraktuell:=menuleiste.zeigerhintergrund;menuwindow:=window(1,2,79,23);showmenuEND PROCschliessemenu;PROCrefreshsubmenu:schreibeaktuellesuntermenuaufbildschirm;showmenunotice;activationchanged:=FALSE END PROCrefreshsubmenu;PROCregeneratemenuscreen:IFanzahloffenermenus=0THENerrorstop(
+fehlermeldung[8])ELIFanzahloffenermenus=1THENplotend;showmenu;showmenunoticeELSEzeigeerstesmenuan;zeigezweitesmenuan;showmenunoticeFI;activationchanged:=FALSE.zeigeerstesmenuan:INT VARmenuzeiger:=menuleiste.zeigeraktuell;menuleiste.zeigeraktuell:=menuleiste.zeigerhintergrund;menuwindow:=window(1,2,79,23);anzahloffenermenus:=1;showmenu.zeigezweitesmenuan:menuleiste.zeigeraktuell:=menuzeiger;menuwindow:=zweitesmenu;anzahloffenermenus:=2;showmenu.END PROCregeneratemenuscreen;PROCmenuinfo(TEXT CONSTt,INT CONSTposition,timelimit):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);boxinfo(w,t,position,timelimit,FALSE);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;END PROCmenuinfo;PROCmenuinfo(TEXT CONSTt,INT CONSTposition):menuinfo(t,position,maxint)END PROCmenuinfo;PROCmenuinfo(TEXT CONSTt):menuinfo(t,5,maxint)END PROCmenuinfo;INT PROCmenualternative(TEXT CONSTt,auswahlliste,zusatztasten,INT CONSTposition,BOOL CONSTmitabbruch):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);INT VARergebnis:=boxalternative(w,t,auswahlliste,zusatztasten,position,mitabbruch,FALSE);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;ergebnisEND PROCmenualternative;BOOL PROCmenuyes(TEXT CONSTfrage,INT CONSTposition):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);BOOL VARwert:=boxyes(w,frage,position,FALSE);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;wertEND PROCmenuyes;BOOL PROCmenuno(TEXT CONSTfrage,INT CONSTposition):NOTmenuyes(frage,position)END PROCmenuno;TEXT PROCmenuone(THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);TEXT CONSTwert:=boxone(w,thes,t1,t2,mitreinigung);IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;wertEND PROCmenuone;THESAURUS PROCmenusome(THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);THESAURUS CONSTthesaurus:=boxsome(w,thes,t1,t2,mitreinigung);IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;thesaurusEND PROCmenusome;TEXT PROCmenuanswer(TEXT CONSTt,vorgabe,INT CONSTposition):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);TEXT VARwert:=boxanswer(w,t,vorgabe,position,FALSE);oldfootnote;schreibeaktuellesuntermenuaufbildschirm;wertEND PROCmenuanswer;TEXT PROCmenuanswerone(TEXT CONSTt,vorgabe,THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);TEXT VARwert:=boxanswerone(w,t,vorgabe,thes,t1,t2,mitreinigung,FALSE)IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;wertEND PROCmenuanswerone;THESAURUS PROCmenuanswersome(TEXT CONSTt,vorgabe,THESAURUS CONSTthes,TEXT CONSTt1,t2,BOOL CONSTmitreinigung):WINDOW VARw:=window(areax(menuwindow),areay(menuwindow)+1,areaxsize(menuwindow),areaysize(menuwindow)-2);THESAURUS VARwert:=boxanswersome(w,t,vorgabe,thes,t1,t2,mitreinigung,FALSE)IFmitreinigungTHENoldfootnote;schreibeaktuellesuntermenuaufbildschirmFI;wertEND PROCmenuanswersome;TEXT PROCmenubasistext(INT CONSTnummer):IFnummer<=20THENfehlermeldung[12]ELIFnummer>menuleiste.menutext.anzahlmenutexteTHENfehlermeldung[11]ELSEmenuleiste.menutext.platz[nummer]FI END PROCmenubasistext;TEXT PROCanwendungstext(INT CONSTnummer):IFnummer>menuleiste.infotext.anzahlinfotexteTHENfehlermeldung[11]ELSEmenuleiste.infotext.stelle[nummer]FI END PROCanwendungstext;PROCzeigemenukennung:page;END PROCzeigemenukennung;PROCresetdialog:angekoppeltemenutafel:="";anzahloffenermenus:=0END PROCresetdialog;PROCwritemenunotice(TEXT CONSTt,INT CONSTposition):erasemenunotice;boxnotice(menuwindow,t,position,menunotizx,menunotizy,
+menunotizxsize,menunotizysize);menunotiztext:=t;menunotizposition:=position;menunotizistgesetzt:=TRUE END PROCwritemenunotice;PROCshowmenunotice:IFmenunotizistgesetztTHENboxnotice(menuwindow,menunotiztext,menunotizposition,menunotizx,menunotizy,menunotizxsize,menunotizysize);FI END PROCshowmenunotice;PROCerasemenunotice:INT VARspa,zei;getcursor(spa,zei);IFmenunotizistgesetztTHENpageup(menunotizx,menunotizy,menunotizxsize,menunotizysize);menunotizistgesetzt:=FALSE;cursor(spa,zei)FI END PROCerasemenunotice;PROCinitializemenuwindow:schreibfenster:=window(areax(menuwindow)+1,areay(menuwindow)+3,areaxsize(menuwindow)-2,areaysize(menuwindow)-4)END PROCinitializemenuwindow;PROCshowmenuwindow:initializemenuwindow;show(schreibfenster);END PROCshowmenuwindow;PROCmenuwindowpage:initializemenuwindow;page(schreibfenster)END PROCmenuwindowpage;PROCmenuwindowout(TEXT CONSTtext):out(schreibfenster,text)END PROCmenuwindowout;PROCmenuwindowget(TEXT VARtext):get(schreibfenster,text)END PROCmenuwindowget;PROCmenuwindoweditget(TEXT VARtext):edit(schreibfenster,text)END PROCmenuwindoweditget;PROCmenuwindowedit(TEXT CONSTdateiname):initializemenuwindow;edit(schreibfenster,dateiname)END PROCmenuwindowedit;PROCmenuwindowedit(FILE VARf):initializemenuwindow;edit(schreibfenster,f)END PROCmenuwindowedit;PROCmenuwindowshow(TEXT CONSTdateiname):initializemenuwindow;show(schreibfenster,dateiname)END PROCmenuwindowshow;PROCmenuwindowshow(FILE VARf):initializemenuwindow;show(schreibfenster,f)END PROCmenuwindowshow;BOOL PROCmenuwindowyes(TEXT CONSTfrage):yes(schreibfenster,frage)END PROCmenuwindowyes;BOOL PROCmenuwindowno(TEXT CONSTfrage):no(schreibfenster,frage)END PROCmenuwindowno;PROCmenuwindowline:menuwindowline(1)END PROCmenuwindowline;PROCmenuwindowline(INT CONSTanzahl):line(schreibfenster,anzahl)END PROCmenuwindowline;PROCmenuwindowcursor(INT CONSTspa,zei):cursor(schreibfenster,spa,zei)END PROCmenuwindowcursor;PROCgetmenuwindowcursor(INT VARspa,zei):getcursor(schreibfenster,spa,zei)END PROCgetmenuwindowcursor;INT PROCremainingmenuwindowlines:remaininglines(schreibfenster)END PROCremainingmenuwindowlines;TEXT PROCmenuwindowcenter(TEXT CONSTt):center(schreibfenster,t)END PROCmenuwindowcenter;PROCmenuwindowstop:menuwindowstop(2)END PROCmenuwindowstop;PROCmenuwindowstop(INT CONSTanzahl):stop(schreibfenster,anzahl)END PROCmenuwindowstop;WINDOW PROCcurrentmenuwindow:initializemenuwindow;schreibfensterEND PROCcurrentmenuwindow;PROCstdinfoedit(FILE VARf,INT CONSToberstezeile):IFoberstezeile<1ORoberstezeile>3THENerrorstop(fehlermeldung[13]);FI;garantieremenukarte;cursor(1,oberstezeile);out(cleop);cursor(1,24);out(invers(text(menubasistext(141),76)));editorinfofenster:=window(1,oberstezeile+2,79,24-oberstezeile);kommandoauftastelegen("?","editorinformationen");commanddialogue(FALSE);cursoron;edit(f,1,oberstezeile+1,79,23-oberstezeile);commanddialogue(TRUE);kommandoauftastelegen("?","").garantieremenukarte:TEXT VARname:=compress(menukartenname);IFname=""THENinstallmenu(stdmenukartenname,FALSE)FI.END PROCstdinfoedit;PROCstdinfoedit(FILE VARf):stdinfoedit(f,1)END PROCstdinfoedit;PROCstdinfoedit(TEXT CONSTdateiname,INT CONSToberstezeile):FILE VARf:=sequentialfile(modify,dateiname);stdinfoedit(f,oberstezeile);END PROCstdinfoedit;PROCstdinfoedit(TEXT CONSTdateiname):stdinfoedit(dateiname,1)END PROCstdinfoedit;PROCeditorinformationen:BOOL VARendegewuenscht:=FALSE;INT VARz;FORzFROMstartwertUPTO22REPcursor(1,z);out(cleol);PER;REP INT VARerg:=boxalternative(editorinfofenster,menubasistext(149),menubasistext(150),menubasistext(151),5,FALSE,FALSE);erfuelledenwunschUNTILendegewuenschtPER;cursor(1,24);out(invers(text(menubasistext(141),76))).startwert:areay(editorinfofenster)+1.erfuelledenwunsch:IFerg>100THENergDECR100END IF;SELECTergOF CASE1,9:boxinfo(editorinfofenster,menubasistext(142),5,maxint,FALSE)CASE2,10:boxinfo(editorinfofenster,menubasistext(143),5,maxint,FALSE)CASE3,11:boxinfo(editorinfofenster,menubasistext(144),5,maxint,FALSE)CASE4,12:boxinfo(editorinfofenster,
+menubasistext(145),5,maxint,FALSE)CASE5,13:boxinfo(editorinfofenster,menubasistext(146),5,maxint,FALSE)CASE6,14:boxinfo(editorinfofenster,menubasistext(147),5,maxint,FALSE)CASE7,15:boxinfo(editorinfofenster,menubasistext(148),5,maxint,FALSE)CASE8,16:endegewuenscht:=TRUE END SELECT END PROCeditorinformationen;PROCbereinigesituation:page;forget(ds);resetdialogEND PROCbereinigesituation;PROCdirektstart(TEXT CONSTprocname,BOOL CONSTautoloeschen):TEXT VARdatname:="Selbststartergenerierungsdatei",letzter:=std;kopplearchivmenukartean;schreibeprogramm;insertiereprogramm;abkoppeln.kopplearchivmenukartean:installmenu(stdmenukartenname,FALSE).schreibeprogramm:forget(datname,quiet);FILE VARf:=sequentialfile(output,datname);putline(f,menubasistext(191));putline(f,"do ("+code(34)+"reset dialog; erase menunotice; "+procname+code(34)+");");putline(f,menubasistext(192));IFautoloeschenTHENputline(f,menubasistext(193))ELSEputline(f,menubasistext(194))FI;putline(f,menubasistext(195));putline(f,menubasistext(196)).insertiereprogramm:TEXT VARt:="insert ("+code(34)+datname+code(34)+")";do(t).abkoppeln:forget(datname,quiet);lastparam(letzter);resetdialog;globalmanager.END PROCdirektstart;PROCwritehead(TEXT CONSTt):INT VARx,y;getcursor(x,y);IFt<>""THENcursor(1,1);out(invers(text(t,77)))END IF;cursor(x,y)END PROCwritehead;PROCrestorehead:INT VARx,y;TEXT VARkopf:=menuleiste.menu[menuleiste.zeigeraktuell].kopfzeile;writehead(kopf)END PROCrestorehead;PROCsetwindow2(INT CONSTx2,y2,xsize2,ysize2):IFy2<2THENerrorstop("Kopfzeile wird überschrieben")END IF;zweitesmenu:=window(x2,y2,xsize2,ysize2);END PROCsetwindow2;PROCverteiler(INT CONSTmenunr,menuzeile,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof,PROC(LOESUNG VAR,BOOL VAR,TEXT VAR)zusatzdarst):IFmenunr=1THEN IFmenuzeile=1THENlsgberechnen(PROCf,PROCcof);ELIFmenuzeile=2THENftsberechnen(PROCf,PROCcof);FI;ELIFmenunr=2THEN IFmenuzeile=5THENdisablestop;ausgabezusatzdarstellung(PROCzusatzdarst);IFiserrorTHENclearerror;oldfootnote;regeneratemenuscreen;menuinfo(errormessage,5)FI;enablestop;cursoroffFI FI;END PROCverteiler;.aktuellesuntermenu:aktuellesmenu.einzelmenu[aktuellesmenu.hauptmenuzeiger].aktuellesmenu:menuleiste.menu[menuleiste.zeigeraktuell].;END PACKETlsdialog5;
+
diff --git a/app/schulis-simulationssystem/3.0/src/ls-MENUKARTE:Simsel b/app/schulis-simulationssystem/3.0/src/ls-MENUKARTE:Simsel
new file mode 100644
index 0000000..3a954c0
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ls-MENUKARTE:Simsel
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/src/ltbearb b/app/schulis-simulationssystem/3.0/src/ltbearb
new file mode 100644
index 0000000..f21741e
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/ltbearb
@@ -0,0 +1,8 @@
+PACKETlsbearbeitungsmenuDEFINESzeigekopfbalken,initialisieresimulation,anfangsaktivierungloesungen,lsgberechnen,ftsberechnen,lsgumschalten,wechselezu,anfangsaktivierungdarstellung,ausgabezeitdiagramm,ausgabephasendiagramm,ausgabehistogramm,ausgabetabelle,ausgabezusatzdarstellung,anfangsaktivierungkombination,kombinationzusammenstellen,parameterkombination,anfangsaktivierungvergleich,endprocvergleich,ausgabevergleichzeitdiagramm,ausgabevergleichphasendiagramm,ausgabevergleichhistogramm,ausgabevergleichtabelle,uebergebeinfotextfuerwd,infoszummodell:LETnichtseingegeben="m";LETausknichtgraphikfaehig=72,auskkeinelsgberechnet=73,ausknureinelsgberechnet=74,showverlasszeichen="m",stleistefileverlassen=28,kopfmax4variablen=50,kopfbeliebigvielevar=51,kopfgenaueinexykombin=52,kopfxyeingabe=53,headzeilenlaenge=77,headproduktname="schulis Simulationssystem",dialogsituationsimulation=1;LETmodellauforiginal="modellauf.original",modellauffortsetzung="modellauf.fortsetzung",anzahlloesungen=2;LET LSG=STRUCT(TEXTname,LOESUNGanfang,BOOLberechnet,LOESUNGgesamt,BOOLftsberechnet);ROWanzahlloesungenLSG VARlsg;INT VARlsgaktuell:=0;LETmax=20,negativemld=FALSE;LETloesungsmenu=1,darstellungsmenu=2,kombmenu=3,vergleichsmenu=4;LETloesungenberechnen=0,einfach=1,komb1=2;LETzeitdg=1,phasdg=2,tabdg=3,histdg=4,zusdg=5;LETzuebers="Zeitdiagramm",puebers="Phasendiagramm",tuebers="Tabelle",huebers="Histogramm";WINDOW VARfsingle:=grossesrahmenfenster;LETsinglesp1=1,zl1=4,singlebr=78,hoe=19,scrollzeile=3;LETbw="";ROW2BOOL VARkombgewaehlt;ROW2TEXT VARdarstname1,darstname2;ROW2INT VARdarstnrkomb1,darstnrkomb2;TEXT VARlsgnrtext1:="",lsgnrtext2:="";INT VARsubmenu1lsgnr:=1;BOOL VARaktivierunggeaendert:=FALSE;ROW4ROW8BOOL VARaktivierung;ROW8BOOL VARaktivaktuell;ROW4BOOL VARerstesaufklappen;DATASPACE VARinfofuerwd:=nilspace;TEXT VARkopfbalken:="";PROCinitialisieresimulation:kopfbalken:=headproduktname+(headzeilenlaenge-length(modellkurzbezeichnung)-length(headproduktname))*" "+modellkurzbezeichnung;zeigekopfbalken;INT VARi,j;FORiFROM1UPTOanzahlloesungenREPlsg(i).berechnet:=FALSE;lsg(i).ftsberechnet:=FALSE;lsg(i).name:="Lösung "+text(i);lsg(i).anfangVONoriginalwerte;lsg(i).gesamtVONoriginalwerte;PER;lsgaktuell:=1;kombgewaehlt(1):=FALSE;kombgewaehlt(2):=FALSE;darstnrkomb1(1):=0;darstnrkomb2(1):=0;darstnrkomb1(2):=0;darstnrkomb2(2):=0;aktivierunggeaendert:=FALSE;submenu1lsgnr:=0;lsgnrtext1:="Voreinstellung auf:";lsgnrtext2:=""+lsg(lsgaktuell).name+" "+code(14);FORiFROM1UPTO4REP FORjFROM1UPTO8REPaktivierung(i)(j):=FALSE;aktivaktuell(j):=FALSE;PER;PER;FORiFROM1UPTO4REPerstesaufklappen(i):=TRUE;PER;do("deactivate (2);");do("deactivate (3);");aktivierung(1)(2):=FALSE;aktivierung(1)(3):=FALSE;END PROCinitialisieresimulation;PROCanfangsaktivierungloesungen:loescheaktuellemeldung(dialogsituationsimulation);IFerstesaufklappen(loesungsmenu)THENdo("activate (1);");do("activate (5);");do("activate (6);");aktivierung(loesungsmenu)(1):=TRUE;aktivierung(loesungsmenu)(5):=TRUE;aktivierung(loesungsmenu)(6):=TRUE;FI;IFlsgaktuell<>submenu1lsgnrTHENaktivaktuell:=aktivierung(loesungsmenu);IFlsg(lsgaktuell).berechnetTHENaktivaktuell(2):=TRUE;ELSEaktivaktuell(2):=FALSE;FI;IFlsg(lsgaktuell).ftsberechnetTHENaktivaktuell(3):=TRUE;ELSEaktivaktuell(3):=FALSE;FI;evtneueaktivierungausgeben(loesungsmenu);IFsubmenu1lsgnr=0THENgiblsgnraus;FI;submenu1lsgnr:=lsgaktuell;FI;END PROCanfangsaktivierungloesungen;PROClsgberechnen(ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof):INT VARlg:=lsgaktuell;TEXT VARtaste:="";LOESUNG VARergebnis;KURVE VARzkurve;ergebnisVONlsg(lg).anfang;berechne(ergebnis,PROCf,PROCcof,taste);trageergebnisalsneuelsgein;do("regenerate menuscreen;");giblsgnraus;.trageergebnisalsneuelsgein:IFtaste<>nichtseingegebenTHEN IFvorhernichtberechnetTHENaktivierung(loesungsmenu)(2):=TRUE;do("activate(2)");ELIFfortsetzberechnetTHENaktivierung(loesungsmenu)(3):=FALSE;do("deactivate (3)");FI;lsg(lg).anfang:=ergebnis;copy(zkurve,
+modellauforiginal+lsgindex,LOESUNGSABSCHNITTergebnis);lsg(lg).anfangLOESUNGSABSCHNITTzkurve;lsg(lg).gesamt:=ergebnis;copy(zkurve,modellauffortsetzung+lsgindex,LOESUNGSABSCHNITTergebnis);lsg(lg).gesamtLOESUNGSABSCHNITTzkurve;lsg(lg).berechnet:=TRUE;lsg(lg).ftsberechnet:=FALSE;FI;.vorhernichtberechnet:NOTlsg(lg).berechnet.fortsetzberechnet:lsg(lg).ftsberechnet.lsgindex:"."+text(lg).END PROClsgberechnen;PROCftsberechnen(ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)f,ZUSTAND PROC(REAL CONST,ZUSTAND CONST,PARAMETER CONST)cof):INT CONSTlg:=lsgaktuell;berechnefortfuehrung(lsg(lg).anfang,lsg(lg).gesamt,PROCf,PROCcof);IF NOTlsg(lg).ftsberechnetTHENaktivierung(loesungsmenu)(3):=TRUE;do("activate (3);");FI;lsg(lg).ftsberechnet:=TRUE;oldfootnote;.END PROCftsberechnen;PROClsgumschalten:INT CONSTi:=lsgaktuell;KURVE VARzkurve;lsg(i).ftsberechnet:=FALSE;lsg(i).gesamt:=lsg(i).anfang;copy(zkurve,modellauffortsetzung+lsgindex,LOESUNGSABSCHNITTlsg(i).anfang);lsg(i).gesamtLOESUNGSABSCHNITTzkurve;aktivierung(loesungsmenu)(3):=FALSE;do("deactivate (3);");.lsgindex:"."+text(i).END PROClsgumschalten;PROCwechselezu(INT CONSTneuelsgnr,darstellungsform):IFlsgaktuell<>neuelsgnrTHEN IFdarstellungsform=loesungenberechnenTHENlsgaktuell:=neuelsgnr;anfangsaktivierungloesungen;lsgnrtext1:="Momentan aktiv:";lsgnrtext2:=code(15)+lsg(lsgaktuell).name+" "+code(14);ELIFlsg(neuelsgnr).berechnetTHENlsgaktuell:=neuelsgnr;lsgnrtext1:="Momentan aktiv:";lsgnrtext2:=code(15)+lsg(lsgaktuell).name+" "+code(14);IFdarstellungsform=einfachTHENanfangsaktivierungdarstellung;ELIFdarstellungsform=komb1THENaktivierungkombination(TRUE);FI;FI;IF NOTaktivierunggeaendertTHENdo("refresh submenu;");ELSE FI;giblsgnraus;FI;END PROCwechselezu;PROCanfangsaktivierungdarstellung:INT VARi;loescheaktuellemeldung;aktivaktuell:=aktivierung(darstellungsmenu);IF NOTeinelsgberechnetTHENdeaktivieredarstellungen;aktivaktuell(7):=FALSE;aktivaktuell(8):=FALSE;zeigemeldung(auskunftstext(auskkeinelsgberechnet),negativemld);ELIFlsg(lsgaktuell).berechnetTHENaktivieredarstellungen;aktivierelsgwechsel;ELSEdeaktivieredarstellungen;aktivierelsgwechsel;FI;evtneueaktivierungausgeben(darstellungsmenu);IFaktivierunggeaendertTHENdo("refresh submenu")FI;.aktivieredarstellungen:FORiFROM1UPTO5REPaktivaktuell(i):=darstellungzugelassen(i);PER;.aktivierelsgwechsel:aktivaktuell(7):=lsg(1).berechnet;aktivaktuell(8):=lsg(2).berechnet;.deaktivieredarstellungen:FORiFROM1UPTO5REPaktivaktuell(i):=FALSE;PER;END PROCanfangsaktivierungdarstellung;PROCausgabezeitdiagramm:BOOL VARvariablengewaehlt:=FALSE;ZUSTAND VARvariablenmuster;TEXT VARtaste:="";variableneinstellensingle(variablenmuster,zeitdg,variablengewaehlt,zuebers);IFvariablengewaehltTHENzeigediagramm("z",lsg(lsgaktuell).gesamt,variablenmuster,lsg(lsgaktuell).ftsberechnet,taste);fehlerbehandlungnachgraphik(TRUE);ELSEerase(fsingle);refreshundnrausgabe;oldfootnote;FI;END PROCausgabezeitdiagramm;PROCausgabephasendiagramm:BOOL VARvariablengewaehlt:=FALSE;ZUSTAND VARvariablenmuster;TEXT VARtaste:="";variableneinstellensingle(variablenmuster,phasdg,variablengewaehlt,puebers);IFvariablengewaehltTHENzeigephasendiagramm(lsg(lsgaktuell).gesamt,variablenmuster,lsg(lsgaktuell).ftsberechnet,taste);fehlerbehandlungnachgraphik(TRUE);ELSEerase(fsingle);refreshundnrausgabe;oldfootnote;FI;END PROCausgabephasendiagramm;PROCausgabehistogramm:BOOL VARvariablengewaehlt:=FALSE;ZUSTAND VARvariablenmuster;TEXT VARtaste:="";variableneinstellensingle(variablenmuster,histdg,variablengewaehlt,huebers);IFvariablengewaehltTHENzeigediagramm("h",lsg(lsgaktuell).gesamt,variablenmuster,lsg(lsgaktuell).ftsberechnet,taste);fehlerbehandlungnachgraphik(TRUE);ELSEerase(fsingle);refreshundnrausgabe;oldfootnote;FI;END PROCausgabehistogramm;PROCausgabetabelle:BOOL VARvariablengewaehlt:=FALSE;ZUSTAND VARvariablenmuster;TEXT VARtaste:="";variableneinstellensingle(variablenmuster,tabdg,variablengewaehlt,tuebers);IFvariablengewaehltTHENzeigediagramm("t",lsg(lsgaktuell).gesamt,variablenmuster,lsg(lsgaktuell).
+ftsberechnet,taste);FI;erase(fsingle);refreshundnrausgabe;oldfootnote;END PROCausgabetabelle;PROCausgabezusatzdarstellung(PROC(LOESUNG VAR,BOOL VAR,TEXT VAR)zusatzdarstellung):BOOL VARnichtindemo:=FALSE;TEXT VARtaste:="";zusatzdarstellung(lsg(lsgaktuell).gesamt,nichtindemo,taste);fehlerbehandlungnachgraphik(TRUE);END PROCausgabezusatzdarstellung;PROCanfangsaktivierungkombination(BOOL CONSTmldloeschen):darstname1(lsgaktuell):="";darstname2(lsgaktuell):="";kombgewaehlt(1):=FALSE;kombgewaehlt(2):=FALSE;aktivierungkombination(mldloeschen);END PROCanfangsaktivierungkombination;PROCaktivierungkombination(BOOL CONSTmldloeschen):INT VARi;IFmldloeschenTHENloescheaktuellemeldung;FI;aktivaktuell:=aktivierung(kombmenu);IFeinelsgberechnetTHENaktivieredarstellungenELSEzeigemeldung(auskunftstext(auskkeinelsgberechnet),negativemld);deaktivieredarstellungenFI;evtneueaktivierungausgeben(kombmenu);.aktivieredarstellungen:aktivaktuell(1):=lsg(lsgaktuell).berechnet;aktivaktuell(3):=kombgewaehlt(lsgaktuell);aktivaktuell(5):=lsg(1).berechnet;aktivaktuell(6):=lsg(2).berechnet;.deaktivieredarstellungen:FORiFROM1UPTO6REP IFi<>4CANDi<>2THENaktivaktuell(i):=FALSE;FI;PER;.END PROCaktivierungkombination;PROCkombinationzusammenstellen:TEXT VARtaste:="";ZUSTAND VARmusterkomb1,musterkomb2;BOOL VARkombvarblgewaehlt:=FALSE,mldloeschen:=TRUE;musterkomb1:=neuerzustand(dimension+codimension);musterkomb2:=neuerzustand(dimension+codimension);waehledarstellungkombaus;waehlevariablenfuerdarstellungkombaus;gebekombiniertedarstellungaus;.waehledarstellungkombaus:THESAURUS VARangebot1:=emptythesaurus,auswahl1:=emptythesaurus,auswahl2:=emptythesaurus;INT VARi:=0;insert(angebot1,zuebers,i);IFmitphasendiagrammCAND(dimension+codimension>=2)THENinsert(angebot1,puebers,i);FI;insert(angebot1,tuebers,i);insert(angebot1,huebers,i);auswahl1:=angebot1;auswahl2:=angebot1;doublesome(zl1,hoe,1,1,1,1,auswahl1,auswahl2,"Darstellung 1",bw,"Darstellung 2",bw);IFnotempty(auswahl1)ANDnotempty(auswahl2)THENkombgewaehlt(lsgaktuell):=TRUE;i:=0;get(auswahl1,darstname1(lsgaktuell),i);darstnrkomb1(lsgaktuell):=darstellungsart(darstname1(lsgaktuell));i:=0;get(auswahl2,darstname2(lsgaktuell),i);darstnrkomb2(lsgaktuell):=darstellungsart(darstname2(lsgaktuell));do("activate (3)");aktivaktuell(3):=TRUE;ELSEleavekombinationzusammenstellen;FI;.waehlevariablenfuerdarstellungkombaus:variableneinstellendouble(musterkomb1,musterkomb2,darstnrkomb1(lsgaktuell),darstnrkomb2(lsgaktuell),kombvarblgewaehlt,darstname1(lsgaktuell),darstname2(lsgaktuell));IF NOTkombvarblgewaehltTHENleavekombinationzusammenstellen;FI;.gebekombiniertedarstellungaus:zeigekombiniertedarstellung(taste,lsg(lsgaktuell).gesamt,darstnrkomb1(lsgaktuell),darstnrkomb2(lsgaktuell),musterkomb1,musterkomb2);IFdarstname1(lsgaktuell)=tuebersANDdarstname2(lsgaktuell)=tuebersTHENaktivierungkombination(mldloeschen);oldfootnote;giblsgnraus;ELSEaktivierungkombination(NOTmldloeschen);fehlerbehandlungnachgraphik(TRUE);FI;.leavekombinationzusammenstellen:erase(fsingle);aktivierungkombination(FALSE);refreshundnrausgabe;oldfootnote;LEAVEkombinationzusammenstellen;.END PROCkombinationzusammenstellen;PROCparameterkombination:ZUSTAND VARmusterkomb1,musterkomb2;TEXT VARtaste;BOOL VARkombvarblgewaehlt:=FALSE;musterkomb1:=neuerzustand(dimension+codimension);musterkomb2:=neuerzustand(dimension+codimension);variableneinstellendouble(musterkomb1,musterkomb2,darstnrkomb1(lsgaktuell),darstnrkomb2(lsgaktuell),kombvarblgewaehlt,darstname1(lsgaktuell),darstname2(lsgaktuell));IFkombvarblgewaehltTHENzeigekombiniertedarstellung(taste,lsg(lsgaktuell).gesamt,darstnrkomb1(lsgaktuell),darstnrkomb2(lsgaktuell),musterkomb1,musterkomb2);IFdarstname1(lsgaktuell)=tuebersANDdarstname2(lsgaktuell)=tuebersTHENoldfootnote;ELSEfehlerbehandlungnachgraphik(TRUE);FI;ELSEerase(fsingle);refreshundnrausgabe;oldfootnote;FI;.END PROCparameterkombination;PROCanfangsaktivierungvergleich:INT VARi;loescheaktuellemeldung;erase(lsgwindow);aktivaktuell:=aktivierung(vergleichsmenu);IF NOTeinelsgberechnet
+THENzeigemeldung(auskunftstext(auskkeinelsgberechnet),negativemld);deaktivieredarstellungenELIF NOTmindzweilsgberechnetTHENzeigemeldung(auskunftstext(ausknureinelsgberechnet),negativemld);deaktivieredarstellungenELSEaktivieredarstellungenFI;evtneueaktivierungausgeben(vergleichsmenu);.aktivieredarstellungen:FORiFROM1UPTO4REPaktivaktuell(i):=darstellungzugelassen(i);PER;.deaktivieredarstellungen:FORiFROM1UPTO4REPaktivaktuell(i):=FALSE;PER;END PROCanfangsaktivierungvergleich;PROCendprocvergleich:giblsgnraus;END PROCendprocvergleich;PROCausgabevergleichzeitdiagramm:ZUSTAND VARvariablenmuster;TEXT VARtaste:="";BOOL VARvariablengewaehlt:=FALSE;variableneinstellensingle(variablenmuster,zeitdg,variablengewaehlt,zuebers);IFvariablengewaehltTHENzeigevergleichskurve(taste,lsg(1).gesamt,lsg(2).gesamt,variablenmuster,"z");fehlerbehandlungnachgraphik(FALSE);ELSEerase(fsingle);do("refresh submenu");oldfootnote;FI;END PROCausgabevergleichzeitdiagramm;PROCausgabevergleichphasendiagramm:ZUSTAND VARvariablenmuster;TEXT VARtaste:="";BOOL VARvariablengewaehlt:=FALSE;variableneinstellensingle(variablenmuster,phasdg,variablengewaehlt,puebers);IFvariablengewaehltTHENzeigevergleichskurvefuerphasendiagramm(taste,LOESUNGSABSCHNITTlsg(1).gesamt,LOESUNGSABSCHNITTlsg(2).gesamt,variablenmuster);fehlerbehandlungnachgraphik(FALSE);ELSEerase(fsingle);do("refresh submenu");oldfootnote;FI;END PROCausgabevergleichphasendiagramm;PROCausgabevergleichhistogramm:BOOL VARvariablengewaehlt:=FALSE;ZUSTAND VARvariablenmuster;TEXT VARtaste:="";variableneinstellensingle(variablenmuster,histdg,variablengewaehlt,huebers);IFvariablengewaehltTHENzeigevergleichskurve(taste,lsg(1).gesamt,lsg(2).gesamt,variablenmuster,"h");fehlerbehandlungnachgraphik(FALSE);ELSEerase(fsingle);do("refresh submenu");oldfootnote;FI;END PROCausgabevergleichhistogramm;PROCausgabevergleichtabelle:BOOL VARvariablengewaehlt:=FALSE;ZUSTAND VARvariablenmuster;TEXT VARtaste:="";variableneinstellensingle(variablenmuster,tabdg,variablengewaehlt,tuebers);IFvariablengewaehltTHENzeigevergleichfuertabelle(taste,lsg(1).gesamt,lsg(2).gesamt,variablenmuster);FI;erase(fsingle);do("refresh submenu");oldfootnote;END PROCausgabevergleichtabelle;PROCinfoszummodell:LETdateienname="liste",spaltenbreite=0;WINDOW VARfshow:=scrollfenster;FILE VARmdlinfo;TEXT VARausstieg:="";INT VARerstersatz1:=3,erstespalte1:=1;TEXT CONSTausstiegszeichen:=showverlasszeichen;IFwirkungsdgrTHENmdlinfo:=sequentialfile(output,infofuerwd);zeigeinfo;ELSEforget(dateienname,quiet);mdlinfo:=sequentialfile(output,dateienname);mdlinfo:=informationstext(dateienname);zeigeinfo;forget(dateienname,quiet);FI;.zeigeinfo:footnote(steuerleiste(stleistefileverlassen));scroll(fshow,mdlinfo,1,scrollzeile,spaltenbreite,erstersatz1,erstespalte1,ausstiegszeichen,ausstieg);.END PROCinfoszummodell;BOOL PROCeinelsgberechnet:(lsg(1).berechnet)COR(lsg(2).berechnet).END PROCeinelsgberechnet;BOOL PROCdarstellungzugelassen(INT CONSTdarst):SELECTdarstOF CASEzeitdg:TRUE CASEphasdg:mitphasendiagrammCANDdimension+codimension>=2CASEtabdg:TRUE CASEhistdg:TRUE CASEzusdg:mitzusatzdarstellungOTHERWISE FALSE END SELECT.END PROCdarstellungzugelassen;BOOL PROCmindzweilsgberechnet:(lsg(1).berechnetCANDlsg(2).berechnet).END PROCmindzweilsgberechnet;PROCvariableneinstellensingle(ZUSTAND VARmuster1,INT CONSTart1,BOOL VARgewaehlt,TEXT CONSTueberschr1):TEXT VARkombinationsname:="";ROWmaxTEXT VARkombnamen;INT VARanzahlkombinationen:=0,stelle1,stelle2,knr:=0;BOOL VARautomatik:=FALSE;TEXT VARmarkers1:="";THESAURUS VARangebot1:=emptythesaurus,auswahl1:=emptythesaurus;muster1:=neuerzustand(dimension+codimension);IFart1=phasdgANDmitkombinationenTHENermittlevariablenpkELIFart1=phasdgAND NOTmitkombinationenTHENermittlevariablenpELIFart1=tabdgTHENermittlevariablentELIFwiezeitdiagramm(art1)THENermittlevariablenzFI;.ermittlevariablent:ermittlevariablenliste(angebot1);auswahl1:=somewithmax(singlesp1,zl1,singlebr,hoe,angebot1,dimension+codimension,ueberschr1,kopfzeile(kopfbeliebigvielevar));gewaehlt:=
+notempty(auswahl1);IFgewaehltTHENbelegemuster(auswahl1,angebot1,muster1);FI;.ermittlevariablenz:ermittlevariablenliste(angebot1);auswahl1:=somewithmax(singlesp1,zl1,singlebr,hoe,angebot1,max4variablen,ueberschr1,kopfzeile(kopfmax4variablen));gewaehlt:=notempty(auswahl1);IFgewaehltTHENbelegemuster(auswahl1,angebot1,muster1);FI;.ermittlevariablenpk:listekombinationen(kombnamen,anzahlkombinationen);IFanzahlkombinationen=1THENknr:=1;gewaehlt:=TRUE;ELSEangebot1:=mengederkombinationen(kombnamen,anzahlkombinationen);kombinationsname:=one(singlesp1,zl1,singlebr,hoe,angebot1,ueberschr1,kopfzeile(kopfgenaueinexykombin));gewaehlt:=kombinationsname<>"";IFgewaehltTHENknr:=link(angebot1,kombinationsname);FI;FI;IFgewaehltTHENindiceskombinationen(knr,stelle1,stelle2,automatik);belegemuster(muster1,stelle1,stelle2,automatik);FI;.ermittlevariablenp:markers1:="xy";ermittlevariablenliste(angebot1);auswahl1:=someexactly(singlesp1,zl1,singlebr,hoe,angebot1,2,ueberschr1,kopfzeile(kopfxyeingabe),markers1);gewaehlt:=notempty(auswahl1);IFgewaehltTHENbelegemuster(auswahl1,angebot1,muster1,markers1);FI;.max4variablen:min(4,dimension+codimension).END PROCvariableneinstellensingle;PROCvariableneinstellendouble(ZUSTAND VARmuster1,muster2,INT CONSTart1,art2,BOOL VARgewaehlt,TEXT CONSTueberschr1,ueberschr2):TEXT VARkombinationsname:="";ROWmaxTEXT VARkombnamen;INT VARanzahlkombinationen:=0,stelle1,stelle2,knr:=0;BOOL VARautomatik:=FALSE;TEXT VARmarkers1:="",markers2:="";THESAURUS VARangebot1:=emptythesaurus,auswahl1:=emptythesaurus,angebot2:=emptythesaurus,auswahl2:=emptythesaurus;IFart1=phasdgANDwiezeitdiagramm(art2)AND NOTmitkombinationenTHENermittlevariablenpundzELIFwiezeitdiagramm(art1)ANDart2=phasdgAND NOTmitkombinationenTHENermittlevariablenzundpELIFart1=phasdgANDwiezeitdiagramm(art2)ANDmitkombinationenTHENermittlevariablenpkundzELIFwiezeitdiagramm(art1)ANDart2=phasdgANDmitkombinationenTHENermittlevariablenzundpkELIFart1=phasdgANDart2=phasdgANDmitkombinationenTHENermittlevariablenpkundpkELIFart1=phasdgANDart2=phasdgAND NOTmitkombinationenTHENermittlevariablenpundpELIFwiezeitdiagramm(art1)ANDwiezeitdiagramm(art1)THENermittlevariablenzundzFI;.ermittlevariablenpundz:ermittlevariablenliste(angebot1);markers1:="xy";markers2:="x";auswahl1:=angebot1;auswahl2:=angebot1;doublesome(zl1,hoe,2,2,1,4,auswahl1,auswahl2,ueberschr1,kopfzeile(kopfxyeingabe),ueberschr2,kopfzeile(kopfmax4variablen),markers1,markers2);gewaehlt:=notempty(auswahl1)ANDnotempty(auswahl2);IFgewaehltTHENbelegemuster(auswahl1,angebot1,muster1,markers1);belegemuster(auswahl2,angebot1,muster2);FI;.ermittlevariablenzundp:ermittlevariablenliste(angebot1);markers1:="x";markers2:="xy";auswahl1:=angebot1;auswahl2:=angebot1;doublesome(zl1,hoe,1,4,2,2,auswahl1,auswahl2,ueberschr1,kopfzeile(kopfmax4variablen),ueberschr2,kopfzeile(kopfxyeingabe),markers1,markers2);gewaehlt:=notempty(auswahl1)ANDnotempty(auswahl2);IFgewaehltTHENbelegemuster(auswahl1,angebot1,muster1);belegemuster(auswahl2,angebot1,muster2,markers2);FI;.ermittlevariablenpkundz:ermittlevariablenliste(angebot2);listekombinationen(kombnamen,anzahlkombinationen);IFanzahlkombinationen=1THENknr:=1;auswahl2:=somewithmax(singlesp1,zl1,singlebr,hoe,angebot2,4,ueberschr1,kopfzeile(kopfmax4variablen));gewaehlt:=notempty(auswahl2);ELSEangebot1:=mengederkombinationen(kombnamen,anzahlkombinationen);auswahl1:=angebot1;auswahl2:=angebot2;doublesome(zl1,hoe,1,1,1,4,auswahl1,auswahl2,ueberschr1,kopfzeile(kopfgenaueinexykombin),ueberschr2,kopfzeile(kopfmax4variablen));gewaehlt:=notempty(auswahl1)ANDnotempty(auswahl2);IFgewaehltTHENknr:=0;get(auswahl1,kombinationsname,knr);knr:=link(angebot1,kombinationsname);FI;FI;IFgewaehltTHENindiceskombinationen(knr,stelle1,stelle2,automatik);belegemuster(muster1,stelle1,stelle2,automatik);belegemuster(auswahl2,angebot2,muster2);FI;.ermittlevariablenzundpk:ermittlevariablenliste(angebot1);listekombinationen(kombnamen,anzahlkombinationen);IFanzahlkombinationen=1THENknr:=1;auswahl1:=somewithmax(singlesp1,zl1,singlebr,hoe,
+angebot1,4,ueberschr1,kopfzeile(kopfmax4variablen));gewaehlt:=notempty(auswahl1);ELSEangebot2:=mengederkombinationen(kombnamen,anzahlkombinationen);auswahl1:=angebot1;auswahl2:=angebot2;doublesome(zl1,hoe,1,4,1,1,auswahl1,auswahl2,ueberschr1,kopfzeile(kopfmax4variablen),ueberschr2,kopfzeile(kopfgenaueinexykombin));gewaehlt:=notempty(auswahl1)ANDnotempty(auswahl2);IFgewaehltTHENknr:=0;get(auswahl2,kombinationsname,knr);knr:=link(angebot2,kombinationsname);FI;FI;IFgewaehltTHENindiceskombinationen(knr,stelle1,stelle2,automatik);belegemuster(auswahl1,angebot1,muster1);belegemuster(muster2,stelle1,stelle2,automatik);FI;.ermittlevariablenpkundpk:INT VARknr2:=0;listekombinationen(kombnamen,anzahlkombinationen);IFanzahlkombinationen=1THENknr:=1;knr2:=1;gewaehlt:=TRUE;ELSEangebot1:=mengederkombinationen(kombnamen,anzahlkombinationen);auswahl1:=angebot1;auswahl2:=angebot1;doublesome(zl1,hoe,1,1,1,1,auswahl1,auswahl2,ueberschr1,kopfzeile(kopfgenaueinexykombin),ueberschr2,kopfzeile(kopfgenaueinexykombin));gewaehlt:=notempty(auswahl1)ANDnotempty(auswahl2);IFgewaehltTHENknr:=0;get(auswahl1,kombinationsname,knr);knr:=link(angebot1,kombinationsname);knr2:=0;get(auswahl2,kombinationsname,knr2);knr2:=link(angebot1,kombinationsname);FI;FI;IFgewaehltTHENindiceskombinationen(knr,stelle1,stelle2,automatik);belegemuster(muster1,stelle1,stelle2,automatik);indiceskombinationen(knr2,stelle1,stelle2,automatik);belegemuster(muster2,stelle1,stelle2,automatik);FI;.ermittlevariablenpundp:markers1:="xy";markers2:="xy";ermittlevariablenliste(angebot1);auswahl1:=angebot1;auswahl2:=angebot1;doublesome(zl1,hoe,2,2,2,2,auswahl1,auswahl2,ueberschr1,kopfzeile(kopfxyeingabe),ueberschr2,kopfzeile(kopfxyeingabe),markers1,markers2);gewaehlt:=notempty(auswahl1)ANDnotempty(auswahl2);IFgewaehltTHENbelegemuster(auswahl1,angebot1,muster1,markers1);belegemuster(auswahl2,angebot1,muster2,markers2);FI;.ermittlevariablenzundz:ermittlevariablenliste(angebot1);auswahl1:=angebot1;auswahl2:=angebot1;doublesome(zl1,hoe,1,4,1,4,auswahl1,auswahl2,ueberschr1,kopfzeile(kopfmax4variablen),ueberschr2,kopfzeile(kopfmax4variablen));gewaehlt:=notempty(auswahl1)ANDnotempty(auswahl2);IFgewaehltTHENbelegemuster(auswahl1,angebot1,muster1);belegemuster(auswahl2,angebot1,muster2);FI;.END PROCvariableneinstellendouble;PROCbelegemuster(ZUSTAND VARmuster,INT VARplace1,place2,BOOL CONSTvertauschbar):replace(muster,place1,1.0);IFvertauschbarTHENreplace(muster,place2,1.0)ELSEreplace(muster,place2,2.0)FI;END PROCbelegemuster;PROCbelegemuster(THESAURUS CONSTauswahl,angebot,ZUSTAND VARmuster,TEXT CONSTmarkers):TEXT VARname1:="",name2:="";INT VARplacea:=0,placeb:=1;get(auswahl,name1,placea);get(auswahl,name2,placeb);placea:=link(angebot,name1);placeb:=link(angebot,name2);IF(markersSUB1)=(markersSUB2)THENreplace(muster,placea,1.0);replace(muster,placeb,1.0);ELIF(markersSUB1)="x"THENreplace(muster,placea,1.0);replace(muster,placeb,2.0);ELSEreplace(muster,placeb,1.0);replace(muster,placea,2.0);FI;END PROCbelegemuster;PROCbelegemuster(THESAURUS CONSTauswahl,angebot,ZUSTAND VARmuster):TEXT VARvname;INT VARzeiger;get(auswahl,vname,zeiger);WHILEvname<>""REPreplace(muster,link(angebot,vname),1.0);get(auswahl,vname,zeiger);PER;END PROCbelegemuster;PROCermittlevariablenliste(THESAURUS VARangebot):INT VARi;FORiFROM1UPTOdimensionREPinsert(angebot,variablenname(i));PER;FORiFROM1UPTOcodimensionREPinsert(angebot,covariablenname(i));PER;.END PROCermittlevariablenliste;THESAURUS PROCmengederkombinationen(ROWmaxTEXT CONSTkombnamen,INT CONSTanzahlkombinationen):THESAURUS VARangebot:=emptythesaurus;INT VARi;FORiFROM1UPTOanzahlkombinationenREPinsert(angebot,kombnamen(i));PER;angebot.END PROCmengederkombinationen;BOOL PROCwiezeitdiagramm(INT CONSTart):art=zeitdgORart=histdgORart=tabdg.END PROCwiezeitdiagramm;INT PROCdarstellungsart(TEXT CONSTdarstellungsname):IFdarstellungsname=zuebersTHENzeitdgELIFdarstellungsname=puebersTHENphasdgELIFdarstellungsname=huebersTHENhistdgELIFdarstellungsname=tuebersTHENtabdgELSE0FI.END PROC
+darstellungsart;PROCrefreshundnrausgabe:giblsgnraus;do("refresh submenu");END PROCrefreshundnrausgabe;PROCplotendundregenerate:plotendundregenerate(TRUE);END PROCplotendundregenerate;PROCplotendundregenerate(BOOL CONSTmitlsgnrausgabe):plotend;do("regenerate menuscreen;");IFmitlsgnrausgabeTHENgiblsgnraus;FI;END PROCplotendundregenerate;PROCfehlerbehandlungnachgraphik(BOOL CONSTmitlsgnr):enablestop;IF NOTiserrorTHENplotendundregenerate(mitlsgnr)ELSEzeigekopfbalken;FI;END PROCfehlerbehandlungnachgraphik;LETlsgwindowy=20,lsgwindowx=3,lsgwindowb=30,lsgwindowh=2;WINDOW VARlsgwindow:=window(lsgwindowx,lsgwindowy,lsgwindowb,lsgwindowh);PROCgiblsgnraus:erase(lsgwindow);outframe(lsgwindow);cursor(lsgwindow,1,1);putline(lsgwindow,lsgnrtext1);put(lsgwindow,lsgnrtext2);.END PROCgiblsgnraus;PROCevtneueaktivierungausgeben(INT CONSTsubmenu):INT VARi;aktivierunggeaendert:=FALSE;FORiFROM1UPTO8REP IF(aktivierung(submenu)(i)XORaktivaktuell(i))ORerstesaufklappen(submenu)THENaktivierunggeaendert:=TRUE;aktivierung(submenu)(i):=aktivaktuell(i);IFaktivaktuell(i)THENdo("activate ("+text(i)+")");ELSEdo("deactivate ("+text(i)+")");FI;FI;PER;erstesaufklappen(submenu):=FALSE;.END PROCevtneueaktivierungausgeben;PROCuebergebeinfotextfuerwd(DATASPACE CONSTwdinfo):infofuerwd:=wdinfo;END PROCuebergebeinfotextfuerwd;PROCzeigekopfbalken:cursor(1,1);out(invers(subtext(kopfbalken,1,headzeilenlaenge)));END PROCzeigekopfbalken;END PACKETlsbearbeitungsmenu;
+
diff --git a/app/schulis-simulationssystem/3.0/src/m b/app/schulis-simulationssystem/3.0/src/m
new file mode 100644
index 0000000..5825df6
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/m
@@ -0,0 +1,3 @@
+PACKETmatrixDEFINESdiagrammankoppeln,aenderungenspeichern,initcellmatrix,WRITE,NR,AUSGANG,EINGANG,UEBER,CELL,newcell,deletecell,cell,:=,mpos,objekt,typbezeichner,belegt,freieverknuepfungspunkte,belegteverknuepfungspunkte,link,loeschelink,variablenthesaurus,ergebnisthesaurus,formelthesaurus,parameterthesaurus,diagrammnameneintragen,aktuellermodellname,aktuellermodellkurzname,wdlauffaehig,anzahlmpos,getmpos:LETmaxi=20,maxj=10,maxlink=8,matrixtyp1=1107,matrixtyp2=1207,lengthfuerintimtext=2,to=1,from=2;TYPE LINK=STRUCT(INTrichtung,MPOSmpos,INTnr);TYPE CELL=STRUCT(BOOLstatus,MPOSmpos,ROWmaxlinkLINKfromorto,OBJEKTobj);TYPE MATRIX=STRUCT(ROWmaxiROWmaxjCELLmat,THESAURUSvthesaurus,ethesaurus,pthesaurus,fthesaurus,TEXTmodellname,modellkurzname,BOOLlauffaehig);BOUND MATRIX VARmatrix;DATASPACE VARds,nilwd;INITFLAG VARnilwdeingerichtet:=FALSE;PROCdiagrammankoppeln(DATASPACE VARmodellds):forget(ds);ds:=modellds;IFmatrixtyp1=type(ds)CORmatrixtyp2=type(ds)THENmatrix:=dsELSEerrorstop("Datenraum hat falschen Typ!")FI;forget(modellds)END PROCdiagrammankoppeln;PROCdiagrammnameneintragen(TEXT CONSTlangname,kurzname):matrix.modellname:=langname;matrix.modellkurzname:=kurznameEND PROCdiagrammnameneintragen;PROCaenderungenspeichern(TEXT CONSTdsname):IFmatrix.lauffaehigTHENtype(ds,matrixtyp2)ELSEtype(ds,matrixtyp1)FI;forget(dsname,quiet);copy(ds,dsname)END PROCaenderungenspeichern;PROCinitcellmatrix:INT VARi,j,l;forget(ds);IF NOTinitialized(nilwdeingerichtet)THENnilwd:=nilspace;felderinitialisieren;type(nilwd,matrixtyp1)FI;ds:=nilwd;matrix:=ds.felderinitialisieren:matrix:=nilwd;FORiFROM1UPTOmaxiREP FORjFROM1UPTOmaxjREPcell.obj:=new(nil);cell.mpos:=newmpos(i,j);cell.status:=FALSE;FORlFROM1UPTOmaxlinkREPcell.fromorto(l).richtung:=0;cell.fromorto(l).mpos:=null;cell.fromorto(l).nr:=0PER PER PER;matrix.vthesaurus:=emptythesaurus;matrix.ethesaurus:=emptythesaurus;matrix.pthesaurus:=emptythesaurus;matrix.fthesaurus:=emptythesaurus;matrix.modellname:="";matrix.modellkurzname:="";matrix.lauffaehig:=FALSE.cell:matrix.mat(i)(j).END PROCinitcellmatrix;OP:=(LINK VARl,LINK CONSTr):l.richtung:=r.richtung;l.mpos:=r.mpos;l.nr:=r.nrEND OP:=;CELL PROCcell(MPOS CONSTmpos):matrix.mat(impos(mpos))(jmpos(mpos))END PROCcell;CELL PROCcell(GPOS CONSTgpos):cell(mpos(gpos))END PROCcell;CELL PROCcell(INT CONSTi,j):matrix.mat(i)(j)END PROCcell;THESAURUS PROCvariablenthesaurus:matrix.vthesaurusEND PROCvariablenthesaurus;THESAURUS PROCergebnisthesaurus:matrix.ethesaurusEND PROCergebnisthesaurus;THESAURUS PROCparameterthesaurus:matrix.pthesaurusEND PROCparameterthesaurus;THESAURUS PROCformelthesaurus:matrix.fthesaurusEND PROCformelthesaurus;TEXT PROCaktuellermodellname:matrix.modellnameEND PROCaktuellermodellname;TEXT PROCaktuellermodellkurzname:matrix.modellkurznameEND PROCaktuellermodellkurzname;BOOL PROCwdlauffaehig:matrix.lauffaehigEND PROCwdlauffaehig;PROCwdlauffaehig(BOOL CONSTwert):matrix.lauffaehig:=wertEND PROCwdlauffaehig;PROCnewcell(OBJEKT CONSTobj,MPOS CONSTpos):initialisieren;verbindungen;inthesauruseinordnen.initialisieren:cell.obj:=obj;cell.mpos:=pos;cell.status:=TRUE;.verbindungen:INT VARi;FORiFROM1UPTOmaxlinkREPcell.fromorto(i).richtung:=0;cell.fromorto(i).mpos:=null;cell.fromorto(i).nr:=0PER.inthesauruseinordnen:i:=0;TEXT VARmposimtext:=text(impos(pos),lengthfuerintimtext)+text(jmpos(pos),lengthfuerintimtext);IFtyp(obj)=variableTHENinsert(matrix.vthesaurus,mposimtext,i)ELIFtyp(obj)=ergebnisTHENinsert(matrix.ethesaurus,mposimtext,i)ELIFtyp(obj)=parameterTHENinsert(matrix.pthesaurus,mposimtext,i)ELIFtyp(obj)=formelTHENinsert(matrix.fthesaurus,mposimtext,i)FI.cell:matrix.mat(impos(pos))(jmpos(pos)).END PROCnewcell;OP:=(CELL VARl,CELL CONSTr):CONCR(l):=CONCR(r)END OP:=;PROCdeletecell(MPOS CONSTm):deletecell(impos(m),jmpos(m))END PROCdeletecell;PROCdeletecell(INT CONSTi,j):matrix.mat(i)(j).status:=FALSE;INT VARd:=0;TEXT VARmposimtext:=text(i,lengthfuerintimtext)+text(j,lengthfuerintimtext);IFtyp(obj)=variableTHENdelete(matrix.vthesaurus,mposimtext,d)ELIFtyp(obj)=ergebnis
+THENdelete(matrix.ethesaurus,mposimtext,d)ELIFtyp(obj)=parameterTHENdelete(matrix.pthesaurus,mposimtext,d)ELIFtyp(obj)=formelTHENdelete(matrix.fthesaurus,mposimtext,d)FI.obj:matrix.mat(i)(j).obj.END PROCdeletecell;BOOL OP AUSGANG(CELL CONSTc,INT CONSTi):c.fromorto(i).richtung=toEND OP AUSGANG;BOOL OP EINGANG(CELL CONSTc,INT CONSTi):c.fromorto(i).richtung=fromEND OP EINGANG;MPOS OP UEBER(CELL CONSTc,INT CONSTi):c.fromorto(i).mposEND OP UEBER;INT OP NR(CELL CONSTc,INT CONSTi):c.fromorto(i).nrEND OP NR;TEXT PROCfreieverknuepfungspunkte(CELL CONSTc):TEXT VARfreiepunkte:="";INT VARi;FORiFROM1UPTOmaxlinkREP IF(c.fromorto(i).mpos=null)THENfreiepunkteCATtext(i,1)FI PER;freiepunkteEND PROCfreieverknuepfungspunkte;TEXT PROCbelegteverknuepfungspunkte(CELL CONSTc):TEXT VARfreiepunkte:="";INT VARi;FORiFROM1UPTOmaxlinkREP IF NOT(c.fromorto(i).mpos=null)THENfreiepunkteCATtext(i,1)FI PER;freiepunkteEND PROCbelegteverknuepfungspunkte;PROClink(MPOS CONSTsourcepos,INT CONSTsourcelinkpos,MPOS CONSTtargetpos,INT CONSTtargetlinkpos):source.fromorto(sourcelinkpos).richtung:=to;source.fromorto(sourcelinkpos).mpos:=targetpos;source.fromorto(sourcelinkpos).nr:=targetlinkpos;target.fromorto(targetlinkpos).richtung:=from;target.fromorto(targetlinkpos).mpos:=sourcepos;target.fromorto(targetlinkpos).nr:=sourcelinkpos.source:matrix.mat(impos(sourcepos))(jmpos(sourcepos)).target:matrix.mat(impos(targetpos))(jmpos(targetpos)).END PROClink;PROCloeschelink(MPOS CONSTactualmpos,INT CONSTnr):IFactualcellissourceTHENtarget.fromorto(targetlinkpos).richtung:=0;target.fromorto(targetlinkpos).mpos:=null;target.fromorto(targetlinkpos).nr:=0;source.fromorto(nr).richtung:=0;source.fromorto(nr).mpos:=null;source.fromorto(nr).nr:=0;ELIFactualcellistargetTHENsource.fromorto(sourcelinkpos).richtung:=0;source.fromorto(sourcelinkpos).mpos:=null;source.fromorto(sourcelinkpos).nr:=0;target.fromorto(nr).richtung:=0;target.fromorto(nr).mpos:=null;target.fromorto(nr).nr:=0FI.actualcell:matrix.mat(impos(actualmpos))(jmpos(actualmpos)).actualcellissource:INT VARsi:=impos(actualmpos),sj:=jmpos(actualmpos),ti:=impos(othermpos),tj:=jmpos(othermpos);actualcell.fromorto(nr).richtung=to.actualcellistarget:ti:=impos(actualmpos);tj:=jmpos(actualmpos);si:=impos(othermpos);sj:=jmpos(othermpos);actualcell.fromorto(nr).richtung=from.othermpos:actualcell.fromorto(nr).mpos.source:matrix.mat(si)(sj).target:matrix.mat(ti)(tj).targetlinkpos:source.fromorto(nr).nr.sourcelinkpos:target.fromorto(nr).nr.END PROCloeschelink;BOOL PROCbelegt(CELL CONSTc):c.statusENDPROCbelegt;BOOL PROCbelegt(MPOS CONSTm):matrix.mat(impos(m))(jmpos(m)).statusENDPROCbelegt;BOOL PROCbelegt(INT CONSTi,j):matrix.mat(i)(j).statusENDPROCbelegt;OBJEKT PROCobjekt(CELL CONSTc):c.objEND PROCobjekt;OBJEKT PROCobjekt(MPOS CONSTm):matrix.mat(impos(m))(jmpos(m)).objEND PROCobjekt;TEXT PROCtypbezeichner(CELL CONSTc):typbezeichner(objekt(c))END PROCtypbezeichner;OP WRITE(OBJEKT CONSTo,MPOS CONSTm):matrix.mat(impos(m))(jmpos(m)).obj:=oEND OP WRITE;MPOS PROCmpos(CELL CONSTc):c.mposEND PROCmpos;PROCgetmpos(THESAURUS CONSTt,MPOS VARm,INT VARi):TEXT VARmposimtext:="";get(t,mposimtext,i);IFmposimtext<>""THENm:=newmpos(int(subtext(mposimtext,1,lengthfuerintimtext)),int(subtext(mposimtext,1+lengthfuerintimtext,2*lengthfuerintimtext)))FI END PROCgetmpos;INT PROCanzahlmpos(THESAURUS CONSTt):INT VARi:=0,anzahl:=0;TEXT VARmposimtext:="";WHILEi<highestentry(t)REPget(t,mposimtext,i);IFmposimtext<>""THENanzahlINCR1FI PER;anzahlEND PROCanzahlmpos;END PACKETmatrix;
+
diff --git a/app/schulis-simulationssystem/3.0/src/mat.binder plot b/app/schulis-simulationssystem/3.0/src/mat.binder plot
new file mode 100644
index 0000000..b5c8b10
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/mat.binder plot
@@ -0,0 +1,5 @@
+PACKETbinderplotDEFINESdrawingarea,beginplot,endplot,plotend,stdhoehe,stdbreite,clear,pen,move,draw,zeichensatz,plotterkanal:LEThorpixelmaxdurch16=85,bit14=16384,nameofspooltask="PRINTER",namederbitmap="Plotter",esc=""27"",unterstreichenaus="Y",fettdruckaus="""",zeilenabstand="T15",druckrichtung=">",druckart="I",schrifttyp="H",formfeed=""12"",linefeed=""10"",cr=""13"";;INT VARhorpixel,verpixel,ausgewaehlt,groesstexkoord,groessteykoord,anzahldernadelspalten,i,printerchannel:=15;REAL VARhorfaktor,vertfaktor,faktor;horpixel:=1360;verpixel:=900;anzahldernadelspalten:=900;horfaktor:=50.3937;vertfaktor:=47.24409;REAL VARbuchstabenhoehe:=0.762,buchstabenbreite:=0.3373438;BOUND ROWhorpixelmaxdurch16TEXT VARbitmap;INT VARplotterchannel:=15,xpos,ypos,xfak,yfak,nextpointnr,linienraster,linientyp;BOOL VARloeschstift,characterdefined:=FALSE;LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);ROW3ZEICHENSATZ VARzeichen;PROCdrawingarea(REAL VARxcm,ycm,INT VARxpixel,ypixel):xcm:=26.9875;ycm:=19.05;xpixel:=horpixel-1;ypixel:=verpixel-1;END PROCdrawingarea;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCstdhoehe(REAL CONSThoehe):buchstabenhoehe:=hoeheEND PROCstdhoehe;PROCstdbreite(REAL CONSTbreite):buchstabenbreite:=breiteEND PROCstdbreite;PROCbeginplot:xpos:=0;ypos:=0;pen(0,1,0,1).ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCdrucken:INT VARspaltenzaehler;bitmap:=old(namederbitmap);druckerkanalankoppeln;druckervoreinstellen;bitmapdrucken;seitenvorschub;gibdruckerkanalfrei.druckerkanalankoppeln:spoolcontrolpassword("");waitforhalt(/nameofspooltask);continue(plotterchannel).druckervoreinstellen:out(esc+unterstreichenaus);out(esc+fettdruckaus);out(esc+zeilenabstand);out(esc+druckrichtung);out(esc+schrifttyp).seitenvorschub:out(formfeed).gibdruckerkanalfrei:break(quiet);spoolcontrolpassword("");startspool(/nameofspooltask,plotterchannel).bitmapdrucken:FORspaltenzaehlerFROM(groesstexkoordDIV16)+1DOWNTO1REPbefehlssequenzschickenPER.zeilenbeginn:groessteykoord+1.befehlssequenzschicken:out(esc+druckart+neueanzahldernadelspalten);teilzeileausgeben;out(cr+linefeed).neueanzahldernadelspalten:nullen+text(zeilenbeginn).nullen:(4-LENGTHtext(zeilenbeginn))*"0".teilzeileausgeben:outsubtext(bitmap(spaltenzaehler),vontextpos,bistextpos).vontextpos:2*(anzahldernadelspalten-zeilenbeginn)+1.bistextpos:2*anzahldernadelspaltenEND PROCdrucken;PROCplotend:drucken;forget(namederbitmap,quiet)END PROCplotend;PROCclear:forget(namederbitmap,quiet);bitmap:=new(namederbitmap);xpos:=0;ypos:=0;pen(0,1,0,1);INT VARj;TEXT VARleerespalte:=(2*verpixel)*"�";FORjFROM1UPTOhorpixelmaxdurch16REPbitmap(j):=leerespaltePER;groesstexkoord:=0;groessteykoord:=0END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):linientyp:=linetype;linienraster:=neueslinienraster;nextpointnr:=0;loeschstift:=foreground=0.neueslinienraster:SELECTlinientypOF CASE2:1365CASE3:975CASE4:255CASE5:639OTHERWISE0END SELECT.END PROCpen;PROCmove(INT CONSTx,y):xpos:=x;ypos:=yEND PROCmove;PROCdraw(INT CONSTgoalx,goaly):ueberpruefeaktuellekoordinatenmitbishergroessten;IFlinientyp<>0THENzeichnelinieFI;xpos:=goalx;ypos:=goaly;ueberpruefeaktuellekoordinatenmitbishergroessten;korrigierenextpointnr.ueberpruefeaktuellekoordinatenmitbishergroessten:IFxpos>groesstexkoordTHENgroesstexkoord:=xposFI;IFypos>groessteykoordTHENgroessteykoord:=yposFI.zeichnelinie:bereitezeichnenvor;verteilegeradeundschraegeschrittemoeglichstgleichmaessig.bereitezeichnenvor:INT VARdx:=goalx-xpos,dy:=goaly-ypos,xdir:=sign(dx),ydir:=sign(dy),xsteps:=abs(dx),ysteps:=abs(dy),totalsteps,biassteps,horstep,verstep;IFxsteps>ystepsTHENtotalsteps:=xsteps;biassteps:=ysteps;horstep:=xdir;verstep:=0ELSEtotalsteps:=ysteps;biassteps:=xsteps;horstep:=0;verstep:=ydirFI.verteilegeradeundschraegeschrittemoeglichstgleichmaessig:INT VARs:=totalstepsDIV2,x:=xpos,y:=ypos;INT
+VARi;FORiFROM0UPTOtotalstepsREPzeichneaktuellenpunktderlinie;sINCRbiassteps;IFs<totalstepsTHENmachegeradenschrittELSE
+macheschraegenschritt;sDECRtotalstepsFI PER.zeichneaktuellenpunktderlinie:IFlinienraster=0THENplotpixel(x,y)ELSEzeichnepunktnurwennerwuenschtFI.zeichnepunktnurwennerwuenscht:IFbit(linienraster,nextpointnr)THENplot(x,y)FI;nextpointnr:=(nextpointnr+1)MOD12.machegeradenschritt:xINCRhorstep;yINCRverstep.macheschraegenschritt:xINCRxdir;yINCRydir.korrigierenextpointnr:IFnextpointnr=0THENnextpointnr:=11ELSEnextpointnrDECR1FI.END PROCdraw;PROCzeichensatz(INT CONSTnr,TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARneuerzeichensatz:=old(name);zeichen(nr):=neuerzeichensatz;characterdefined:=TRUE ELSEerrorstop("Der Zeichensatz '"+name+"' existiert nicht")FI END PROCzeichensatz;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):REAL VARdiff:=0.0;setcharacterheightandwidth;zeichensatzauswaehlen;IFlinientyp<>0ANDcharacterdefinedTHENdrawgraphiccharacterFI.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen(2).width;yfak:=zeichen(2).heightELSExfak:=int(horfaktor*width);yfak:=int(vertfaktor*height)FI.zeichensatzauswaehlen:beurteilenutzenderzeichensaetze;IFqualitaet(1)<qualitaet(2)THEN IFqualitaet(1)<=qualitaet(3)THENausgewaehlt:=1ELSEausgewaehlt:=3FI ELIFqualitaet(2)<=qualitaet(3)THENausgewaehlt:=2ELSEausgewaehlt:=3FI;faktor:=matrixfaktor(ausgewaehlt).beurteilenutzenderzeichensaetze:ROW6INT CONSTdimens:=ROW6INT:(6,10,8,8,8,16);ROW3INT VARqualitaet:=ROW3INT:(100,100,100);ROW3REAL VARmatrixfaktor:=ROW3REAL:(1.0,1.0,1.0);INT VARmatrixbreite,matrixhoehe;FORiFROM1UPTO3REPn:=1;matrixbreite:=dimens(2*i-1);matrixhoehe:=dimens(2*i)-freizeilen;WHILExfakDIV(n*matrixbreite)>0CANDyfakDIV(n*matrixhoehe)>0REPqualitaet(i):=(xfak-n*matrixbreite)+(yfak-n*matrixhoehe);nINCR1PER;matrixfaktor(i):=real(n-1);IFn=1THENmatrixfaktor(i):=verkleinerungsfaktorEND IF PER.verkleinerungsfaktor:IF(matrixbreite-xfak)>(matrixhoehe-yfak)THENreal(xfak)/real(matrixbreite)ELSEreal(yfak)/real(matrixhoehe)FI.freizeilen:SELECTiOF CASE1:0CASE2:0CASE3:1OTHERWISE0END SELECT.drawgraphiccharacter:INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxposition:=xpos,yposition:=ypos,i,n,x,y;BOOL VARmoveorder;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;move(xpos,ypos).characterxstep:REAL VARrundungsfehler:=0.0;IFwidth<>0.0THENrundungsfehler:=frac(cosd(angle)*horfaktor*width);int(cosd(angle)*horfaktor*width)ELSEint(cosd(angle)*real(zeichen(ausgewaehlt).width))FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height)ELSEint(sind(angle)*real(zeichen(ausgewaehlt).height))FI.drawcharacteri:TEXT CONSTchar:=zeichen(ausgewaehlt).char[code(recordSUBi)];FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENmove(xposition+x,yposition+y)ELSEdraw(xposition+x,yposition+y)FI PER;diffINCRrundungsfehler;xpositionINCRxstep;IFdiff>1.0THENxpositionINCR1;diffDECR1.0FI;ypositionINCRystepEND PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=int(real(x)*faktor);y:=int(real(y)*faktor)END PROCvalue;PROCplotpixel(INT CONSTx,y):IFgueltigerpunktTHEN IFloeschstiftTHENunplot(x,y)ELSEplot(x,y)FI FI.gueltigerpunkt:x<horpixelANDy<verpixel.END PROCplotpixel;PROCplot(INT CONSTx,y):INT VARintausrow;intausrow:=bitmap(xDIV16+1)ISUB(verpixel-y);setbit(intausrow,15-xMOD16);replace(bitmap(xDIV16+1),verpixel-y,intausrow)END PROCplot;PROCunplot(INT CONSTx,y):INT VARintausrow;intausrow:=bitmap(xDIV16+1)ISUB(verpixel-y);resetbit(intausrow,15-xMOD16);replace(bitmap(xDIV16+1),verpixel-y,intausrow)END PROCunplot;INT PROCplotterkanal:plotterchannelEND PROCplotterkanal;PROCplotterkanal(INT CONSTnr):plotterchannel:=nr;END PROCplotterkanal;END PACKETbinderplot;plotterkanal(15);zeichensatz(1,"ZEICHEN 6*10");zeichensatz(2,"ZEICHEN 8*8");zeichensatz(3,"ZEICHEN 8*16");
+
+
diff --git a/app/schulis-simulationssystem/3.0/src/mat.epson-fx plot b/app/schulis-simulationssystem/3.0/src/mat.epson-fx plot
new file mode 100644
index 0000000..7595ed3
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/mat.epson-fx plot
@@ -0,0 +1,4 @@
+PACKETepsonfxplotDEFINESdrawingarea,beginplot,clear,endplot,plotend,stdhoehe,stdbreite,move,draw,pen,zeichensatz,plotterkanal:LEThorpixelmaxdurch24=97,bit14=16384,nameofspooltask="PRINTER",namederbitmap="Plotter",esc="�",modus="L",schrifttyp="P",formfeed="�",zeilenvorschub="J�",minivorschub="J�",cr=" ";INT VARhorpixel,verpixel,horpixeldurch24,ausgewaehlt,groesstexkoord,groessteykoord;TEXT VARneueanzahldernadelspalten;REAL VARhorfaktor,vertfaktor,faktor;INT VARi,plotterchannel:=15;horpixel:=2328;verpixel:=905;horfaktor:=85.03937;vertfaktor:=47.24409;horpixeldurch24:=horpixelDIV24;neueanzahldernadelspalten:=code(verpixelMOD256)+code(verpixelDIV256);LET GRUPPE=STRUCT(ROW3TEXTspalte);BOUND ROWhorpixelmaxdurch24GRUPPE VARbitmap;INT VARprinterchannel:=15,xpos,ypos,xfak,yfak,nextpointnr,linienraster,linientyp;REAL VARbuchstabenhoehe:=0.7662334,buchstabenbreite:=0.3421944;BOOL VARloeschstift,characterdefined:=FALSE;LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);ROW3ZEICHENSATZ VARzeichen;PROCdrawingarea(REAL VARxcm,ycm,INT VARxpixel,ypixel):xcm:=real(horpixel)/horfaktor;ycm:=real(verpixel)/vertfaktor;xpixel:=horpixel-1;ypixel:=verpixel-1;END PROCdrawingarea;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCstdhoehe(REAL CONSThoehe):buchstabenhoehe:=hoeheEND PROCstdhoehe;PROCstdbreite(REAL CONSTbreite):buchstabenbreite:=breiteEND PROCstdbreite;PROCbeginplot:xpos:=0;ypos:=0;pen(0,1,0,1)ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCdrucken:INT CONSTmeinkanal:=channel;INT VARi,j;bitmap:=old("Plotter");druckerkanalankoppeln;druckervoreinstellen;bitmapdrucken;seitenvorschub;gibdruckerkanalfrei.druckerkanalankoppeln:spoolcontrolpassword("");waitforhalt(/nameofspooltask);continue(plotterchannel).druckervoreinstellen:out(esc+schrifttyp).seitenvorschub:out(formfeed+cr).gibdruckerkanalfrei:break(quiet);spoolcontrolpassword("");startspool(/nameofspooltask).bitmapdrucken:neueanzahldernadelspalten:=code(zeilenbeginnMOD256)+code(zeilenbeginnDIV256);FORiFROM(groesstexkoordDIV24)+1DOWNTO1REP FORjFROM3DOWNTO1REPdruckeeinespalteeinergruppe;PER;vorschubPER.druckeeinespalteeinergruppe:out(esc+modus+neueanzahldernadelspalten);teilzeileausgeben;out(esc+minivorschub+cr).zeilenbeginn:groessteykoord+1.anzahldernadelspalten:verpixel.teilzeileausgeben:outsubtext(bitmap(i).spalte(j),vontextpos,bistextpos).vontextpos:(anzahldernadelspalten-zeilenbeginn)+1.bistextpos:anzahldernadelspalten.vorschub:out(esc+zeilenvorschub+cr).END PROCdrucken;PROCplotend:drucken;forget(namederbitmap,quiet);END PROCplotend;PROCclear:richtebitmapein;loeschebitmap;.richtebitmapein:forget(namederbitmap,quiet);bitmap:=new(namederbitmap);groesstexkoord:=0;groessteykoord:=0.loeschebitmap:INT VARi,j;TEXT CONSTleer:=verpixel*"�";FORiFROM1UPTOhorpixeldurch24REP FORjFROM1UPTO3REPbitmap(i).spalte(j):=leerPER PER.END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):linientyp:=linetype;linienraster:=neueslinienraster;nextpointnr:=0;loeschstift:=foreground=0.neueslinienraster:SELECTlinientypOF CASE2:819CASE3:975CASE4:255CASE5:3711OTHERWISE0END SELECT.END PROCpen;PROCmove(INT CONSTx,y):xpos:=x;ypos:=yEND PROCmove;PROCdraw(INT CONSTgoalx,goaly):ueberpruefeaktuellekoordinatenmitbishergroessten;IFlinientyp<>0THENzeichnelinieFI;xpos:=goalx;ypos:=goaly;ueberpruefeaktuellekoordinatenmitbishergroessten;korrigierenextpointnr.ueberpruefeaktuellekoordinatenmitbishergroessten:IFxpos>groesstexkoordTHENgroesstexkoord:=xposFI;IFypos>groessteykoordTHENgroessteykoord:=yposFI.zeichnelinie:bereitezeichnenvor;verteilegeradeundschraegeschrittemoeglichstgleichmaessig.bereitezeichnenvor:INT VARdx:=goalx-xpos,dy:=goaly-ypos,xdir:=sign(dx),ydir:=sign(dy),xsteps:=abs(dx),ysteps:=abs(dy),totalsteps,biassteps,horstep,verstep;IFxsteps>ystepsTHENtotalsteps:=xsteps;biassteps:=ysteps;horstep:=xdir;verstep:=0ELSEtotalsteps:=ysteps;biassteps:=xsteps;horstep:=0;verstep:=ydirFI.verteilegeradeundschraegeschrittemoeglichstgleichmaessig:INT VARs:=
+totalstepsDIV2,x:=xpos,y:=ypos;INT VARi;FORiFROM0UPTOtotalstepsREPzeichneaktuellenpunktderlinie;sINCRbiassteps;IFs<totalstepsTHENmachegeradenschrittELSEmacheschraegenschritt;sDECRtotalstepsFI PER.zeichneaktuellenpunktderlinie:IFlinienraster=0THENplotpixel(x,y)ELSEzeichnepunktnurwennerwuenschtFI.zeichnepunktnurwennerwuenscht:IFbit(linienraster,nextpointnr)THENplot(x,y,TRUE)FI;nextpointnr:=(nextpointnr+1)MOD12.machegeradenschritt:xINCRhorstep;yINCRverstep.macheschraegenschritt:xINCRxdir;yINCRydir.korrigierenextpointnr:IFnextpointnr=0THENnextpointnr:=11ELSEnextpointnrDECR1FI.END PROCdraw;PROCzeichensatz(INT CONSTnr,TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARneuerzeichensatz:=old(name);zeichen(nr):=neuerzeichensatz;characterdefined:=TRUE ELSEerrorstop("Der Zeichensatz ""+name+"" existiert nicht")FI END PROCzeichensatz;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):IFlinientyp<>0ANDcharacterdefinedTHENdrawgraphiccharacterFI.drawgraphiccharacter:INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxposition:=xpos,yposition:=ypos,i,n,x,y;BOOL VARmoveorder;setcharacterheightandwidth;zeichensatzauswaehlen;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;move(xpos,ypos).characterxstep:REAL VARrundungsfehler:=0.0;IFwidth<>0.0THENrundungsfehler:=frac(cosd(angle)*horfaktor*width);int(cosd(angle)*horfaktor*width)ELSEint(cosd(angle)*real(zeichen(ausgewaehlt).width))FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height)ELSEint(sind(angle)*real(zeichen(ausgewaehlt).height))FI.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen(2).width;yfak:=zeichen(2).heightELSExfak:=int(horfaktor*width);yfak:=int(vertfaktor*height)FI.zeichensatzauswaehlen:beurteilenutzenderzeichensaetze;IFqualitaet(1)<qualitaet(2)THEN IFqualitaet(1)<=qualitaet(3)THENausgewaehlt:=1;faktor:=matrixfaktor(1)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI ELIFqualitaet(2)<=qualitaet(3)THENausgewaehlt:=2;faktor:=matrixfaktor(2)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI.beurteilenutzenderzeichensaetze:ROW6INT CONSTdimens:=ROW6INT:(6,10,8,8,8,16);ROW3INT VARqualitaet:=ROW3INT:(100,100,100);ROW3REAL VARmatrixfaktor:=ROW3REAL:(1.0,1.0,1.0);INT VARmatrixbreite,matrixhoehe;FORiFROM1UPTO3REPn:=1;matrixbreite:=dimens(2*i-1);matrixhoehe:=dimens(2*i)-freizeilen;WHILExfakDIV(n*matrixbreite)>0CANDyfakDIV(n*matrixhoehe)>0REPqualitaet(i):=(xfak-n*matrixbreite)+(yfak-n*matrixhoehe);nINCR1PER;matrixfaktor(i):=real(n-1);IFn=1THENmatrixfaktor(i):=verkleinerungsfaktorFI PER.verkleinerungsfaktor:IF(matrixbreite-xfak)>(matrixhoehe-yfak)THENreal(xfak)/real(matrixbreite)ELSEreal(yfak)/real(matrixhoehe)FI.freizeilen:SELECTiOF CASE1:0CASE2:0CASE3:1OTHERWISE0END SELECT.drawcharacteri:REAL VARdiff:=0.0;TEXT CONSTchar:=zeichen(ausgewaehlt).char[code(recordSUBi)];FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENmove(xposition+x,yposition+y)ELSEdraw(xposition+x,yposition+y)FI PER;diffINCRrundungsfehler;xpositionINCRxstep;IFdiff>1.0THENxpositionINCR1;diffDECR1.0FI;ypositionINCRystep.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=int(real(x)*faktor);y:=int(real(y)*faktor)END PROCvalue;PROCplotpixel(INT CONSTx,y):IFgueltigerpunktTHEN IFloeschstiftTHENplot(x,y,FALSE)ELSEplot(x,y,TRUE)FI FI.gueltigerpunkt:x<horpixelANDy<verpixel.END PROCplotpixel;PROCplot(INT CONSTx,y,BOOL CONSTwert):INT CONSTxmod24:=xMOD24,xdiv24:=xDIV24;replace(bitmap(1+xdiv24).spalte(1+(xmod24MOD3)),verpixel-y,setzebitintext(byte,xmod24DIV3,wert)).byte:subtext(bitmap(1+xdiv24).spalte(1+(xmod24MOD3)),verpixel-y,verpixel-y).END PROCplot;TEXT PROCsetzebitintext(TEXT CONSTbyte,INT CONSTstelle,BOOL CONSTwert):INT VARintwert;TEXT VARrechtesbyte:=2*"�";intwert:=code(subtext(byte,1,1));IFwertTHENsetbit(
+intwert,stelle);ELSEresetbit(intwert,stelle);FI;rechtesbyte:=code(intwert);rechtesbyte.ENDPROCsetzebitintext;INT PROCplotterkanal:plotterchannelEND PROCplotterkanal;PROCplotterkanal(INT CONSTnr):plotterchannel:=nr;END PROCplotterkanal;END PACKETepsonfxplot;plotterkanal(15);zeichensatz(1,"ZEICHEN 6*10");zeichensatz(2,"ZEICHEN 8*8");zeichensatz(3,"ZEICHEN 8*16")
+
diff --git a/app/schulis-simulationssystem/3.0/src/mat.epson-sq plot b/app/schulis-simulationssystem/3.0/src/mat.epson-sq plot
new file mode 100644
index 0000000..c591208
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/mat.epson-sq plot
@@ -0,0 +1,4 @@
+PACKETepsonsqplotDEFINESdrawingarea,beginplot,clear,endplot,plotend,stdhoehe,stdbreite,move,draw,pen,zeichensatz,plotterkanal:LEThorpixelmaxdurch24=97,bit14=16384,nameofspooltask="PRINTER",namederbitmap="Plotter",abstand=100,esc="�",modus="*'",schrifttyp="P",unidirektional="U�",formfeed="�",zeilenvorschub="J�",cr=" ";INT VARhorpixel,verpixel,horpixeldurch24,ausgewaehlt,groesstexkoord,groessteykoord;TEXT VARneueanzahldernadelspalten;REAL VARhorfaktor,vertfaktor,faktor;INT VARi,plotterchannel:=15;horpixel:=1968;verpixel:=1346;horfaktor:=70.86614;vertfaktor:=70.86614;horpixeldurch24:=horpixelDIV24;neueanzahldernadelspalten:=code(verpixelMOD256)+code(verpixelDIV256);BOUND ROWhorpixelmaxdurch24TEXT VARbitmap;INT VARprinterchannel:=15,xpos,ypos,xfak,yfak,nextpointnr,linienraster,linientyp;REAL VARbuchstabenhoehe:=0.7597422,buchstabenbreite:=0.3471333;BOOL VARloeschstift,characterdefined:=FALSE;LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);ROW3ZEICHENSATZ VARzeichen;PROCdrawingarea(REAL VARxcm,ycm,INT VARxpixel,ypixel):xcm:=real(horpixel)/horfaktor;ycm:=real(verpixel)/vertfaktor;xpixel:=horpixel-1;ypixel:=verpixel-1;END PROCdrawingarea;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCstdhoehe(REAL CONSThoehe):buchstabenhoehe:=hoeheEND PROCstdhoehe;PROCstdbreite(REAL CONSTbreite):buchstabenbreite:=breiteEND PROCstdbreite;PROCbeginplot:xpos:=0;ypos:=0;pen(0,1,0,1)ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCdrucken:INT CONSTmeinkanal:=channel;INT VARi,j;INT CONSTvontextpos:=3*(anzahldernadelspalten-zeilenbeginn)+1,bistextpos:=3*anzahldernadelspalten;TEXT CONSTrand:=(3*abstand)*"�";bitmap:=old("Plotter");druckerkanalankoppeln;druckervoreinstellen;bitmapdrucken;seitenvorschub;gibdruckerkanalfrei.druckerkanalankoppeln:spoolcontrolpassword("");waitforhalt(/nameofspooltask);continue(plotterchannel).druckervoreinstellen:out(esc+schrifttyp);out(esc+unidirektional).seitenvorschub:out(formfeed+cr).gibdruckerkanalfrei:break(quiet);spoolcontrolpassword("");startspool(/nameofspooltask).bitmapdrucken:neueanzahldernadelspalten:=code((abstand+zeilenbeginn)MOD256)+code((abstand+zeilenbeginn)DIV256);FORiFROM(groesstexkoordDIV24)+1DOWNTO1REPdruckeeinespalte;PER.druckeeinespalte:out(esc+modus+neueanzahldernadelspalten);out(rand);teilzeileausgeben;out(esc+zeilenvorschub+cr).zeilenbeginn:groessteykoord+1.anzahldernadelspalten:verpixel.teilzeileausgeben:outsubtext(bitmap(i),vontextpos,bistextpos).END PROCdrucken;PROCplotend:drucken;forget(namederbitmap,quiet);END PROCplotend;PROCclear:richtebitmapein;loeschebitmap;.richtebitmapein:forget(namederbitmap,quiet);bitmap:=new(namederbitmap);groesstexkoord:=0;groessteykoord:=0.loeschebitmap:INT VARi,j;TEXT CONSTleer:=3*verpixel*"�";FORiFROM1UPTOhorpixeldurch24REPbitmap(i):=leerPER END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):linientyp:=linetype;linienraster:=neueslinienraster;nextpointnr:=0;loeschstift:=foreground=0.neueslinienraster:SELECTlinientypOF CASE2:819CASE3:975CASE4:255CASE5:3711OTHERWISE0END SELECT.END PROCpen;PROCmove(INT CONSTx,y):xpos:=x;ypos:=yEND PROCmove;PROCdraw(INT CONSTgoalx,goaly):ueberpruefeaktuellekoordinatenmitbishergroessten;IFlinientyp<>0THENzeichnelinieFI;xpos:=goalx;ypos:=goaly;ueberpruefeaktuellekoordinatenmitbishergroessten;korrigierenextpointnr.ueberpruefeaktuellekoordinatenmitbishergroessten:IFxpos>groesstexkoordTHENgroesstexkoord:=xposFI;IFypos>groessteykoordTHENgroessteykoord:=yposFI.zeichnelinie:bereitezeichnenvor;verteilegeradeundschraegeschrittemoeglichstgleichmaessig.bereitezeichnenvor:INT VARdx:=goalx-xpos,dy:=goaly-ypos,xdir:=sign(dx),ydir:=sign(dy),xsteps:=abs(dx),ysteps:=abs(dy),totalsteps,biassteps,horstep,verstep;IFxsteps>ystepsTHENtotalsteps:=xsteps;biassteps:=ysteps;horstep:=xdir;verstep:=0ELSEtotalsteps:=ysteps;biassteps:=xsteps;horstep:=0;verstep:=ydirFI.verteilegeradeundschraegeschrittemoeglichstgleichmaessig:INT VARs:=totalstepsDIV2,x:=xpos,y:=ypos;INT VARi;FORiFROM0
+UPTOtotalstepsREPzeichneaktuellenpunktderlinie;sINCRbiassteps;IFs<totalstepsTHENmachegeradenschrittELSEmacheschraegenschritt;sDECRtotalstepsFI PER.zeichneaktuellenpunktderlinie:IFlinienraster=0THENplotpixel(x,y)ELSEzeichnepunktnurwennerwuenschtFI.zeichnepunktnurwennerwuenscht:IFbit(linienraster,nextpointnr)THENplot(x,y,TRUE)FI;nextpointnr:=(nextpointnr+1)MOD12.machegeradenschritt:xINCRhorstep;yINCRverstep.macheschraegenschritt:xINCRxdir;yINCRydir.korrigierenextpointnr:IFnextpointnr=0THENnextpointnr:=11ELSEnextpointnrDECR1FI.END PROCdraw;PROCzeichensatz(INT CONSTnr,TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARneuerzeichensatz:=old(name);zeichen(nr):=neuerzeichensatz;characterdefined:=TRUE ELSEerrorstop("Der Zeichensatz ""+name+"" existiert nicht")FI END PROCzeichensatz;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):IFlinientyp<>0ANDcharacterdefinedTHENdrawgraphiccharacterFI.drawgraphiccharacter:INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxposition:=xpos,yposition:=ypos,i,n,x,y;BOOL VARmoveorder;setcharacterheightandwidth;zeichensatzauswaehlen;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;move(xpos,ypos).characterxstep:REAL VARrundungsfehler:=0.0;IFwidth<>0.0THENrundungsfehler:=frac(cosd(angle)*horfaktor*width);int(cosd(angle)*horfaktor*width)ELSEint(cosd(angle)*real(zeichen(ausgewaehlt).width))FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height)ELSEint(sind(angle)*real(zeichen(ausgewaehlt).height))FI.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen(2).width;yfak:=zeichen(2).heightELSExfak:=int(horfaktor*width);yfak:=int(vertfaktor*height)FI.zeichensatzauswaehlen:beurteilenutzenderzeichensaetze;IFqualitaet(1)<qualitaet(2)THEN IFqualitaet(1)<=qualitaet(3)THENausgewaehlt:=1;faktor:=matrixfaktor(1)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI ELIFqualitaet(2)<=qualitaet(3)THENausgewaehlt:=2;faktor:=matrixfaktor(2)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI.beurteilenutzenderzeichensaetze:ROW6INT CONSTdimens:=ROW6INT:(6,10,8,8,8,16);ROW3INT VARqualitaet:=ROW3INT:(100,100,100);ROW3REAL VARmatrixfaktor:=ROW3REAL:(1.0,1.0,1.0);INT VARmatrixbreite,matrixhoehe;FORiFROM1UPTO3REPn:=1;matrixbreite:=dimens(2*i-1);matrixhoehe:=dimens(2*i)-freizeilen;WHILExfakDIV(n*matrixbreite)>0CANDyfakDIV(n*matrixhoehe)>0REPqualitaet(i):=(xfak-n*matrixbreite)+(yfak-n*matrixhoehe);nINCR1PER;matrixfaktor(i):=real(n-1);IFn=1THENmatrixfaktor(i):=verkleinerungsfaktorFI PER.verkleinerungsfaktor:IF(matrixbreite-xfak)>(matrixhoehe-yfak)THENreal(xfak)/real(matrixbreite)ELSEreal(yfak)/real(matrixhoehe)FI.freizeilen:SELECTiOF CASE1:0CASE2:0CASE3:1OTHERWISE0END SELECT.drawcharacteri:REAL VARdiff:=0.0;TEXT CONSTchar:=zeichen(ausgewaehlt).char[code(recordSUBi)];FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENmove(xposition+x,yposition+y)ELSEdraw(xposition+x,yposition+y)FI PER;diffINCRrundungsfehler;xpositionINCRxstep;IFdiff>1.0THENxpositionINCR1;diffDECR1.0FI;ypositionINCRystep.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=int(real(x)*faktor);y:=int(real(y)*faktor)END PROCvalue;PROCplotpixel(INT CONSTx,y):IFgueltigerpunktTHEN IFloeschstiftTHENplot(x,y,FALSE)ELSEplot(x,y,TRUE)FI FI.gueltigerpunkt:x<horpixelANDy<verpixel.END PROCplotpixel;PROCplot(INT CONSTx,y,BOOL CONSTwert):INT CONSTxdiv24:=xDIV24,xdiv8:=xDIV8;replace(bitmap(1+xdiv24),posnrder3ergruppe+bytenrinnerhalbdernadelspalte,setzebitintext(byte,xMOD8,wert)).posnrder3ergruppe:(verpixel-y-1)*3+1.bytenrinnerhalbdernadelspalte:2-(xMOD24)DIV8.byte:bitmap(1+xdiv24)SUB(posnrder3ergruppe+bytenrinnerhalbdernadelspalte).END PROCplot;TEXT PROCsetzebitintext(TEXT CONSTbyte,INT CONSTstelle,BOOL CONSTwert):INT VARintwert;TEXT VARrechtesbyte:=2*"�";intwert:=code(
+subtext(byte,1,1));IFwertTHENsetbit(intwert,stelle);ELSEresetbit(intwert,stelle);FI;rechtesbyte:=code(intwert);rechtesbyte.ENDPROCsetzebitintext;INT PROCplotterkanal:plotterchannelEND PROCplotterkanal;PROCplotterkanal(INT CONSTnr):plotterchannel:=nr;END PROCplotterkanal;END PACKETepsonsqplot;plotterkanal(15);zeichensatz(1,"ZEICHEN 6*10");zeichensatz(2,"ZEICHEN 8*8");zeichensatz(3,"ZEICHEN 8*16")
+
diff --git a/app/schulis-simulationssystem/3.0/src/mat.hp72xx plot b/app/schulis-simulationssystem/3.0/src/mat.hp72xx plot
new file mode 100644
index 0000000..d197007
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/mat.hp72xx plot
@@ -0,0 +1,3 @@
+PACKEThpplotDEFINESdrawingarea,plotterkanal,beginplot,endplot,plotend,stdhoehe,stdbreite,geschwindigkeit,clear,pen,move,draw:LETxcm=37.0,ycm=27.7,papierx1=1200,papierx2=16000,papiery1=320,papiery2=11400,plotterunitspercm=100.0;TEXT CONSTschlange:=code(126),terminator:=code(125);INT CONSTxunits:=int(xcm*plotterunitspercm),yunits:=int(ycm*plotterunitspercm);BOUND TEXT VARpicture;INT VARterminalchannel,plotterchannel:=5;LET POS=STRUCT(INTx,y);POS VARposition:=POS:(0,0);REAL VARbuchstabenhoehe:=1.108,buchstabenbreite:=0.4625;INT VARvelocity:=10;LETbackspace="�",alt="",stand="",pktklein="}",pktgross="{";PROCdrawingarea(REAL VARx1,y1,INT VARxpixel,ypixel):x1:=xcm;y1:=ycm;xpixel:=xunits;ypixel:=yunits;END PROCdrawingarea;PROCgeschwindigkeit(INT CONSTx):IFx>0ANDx<37THENvelocity:=xFI END PROCgeschwindigkeit;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCstdhoehe(REAL CONSThoehe):buchstabenhoehe:=hoeheEND PROCstdhoehe;PROCstdbreite(REAL CONSTbreite):buchstabenbreite:=breiteEND PROCstdbreite;PROCbeginplot:ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCplotend:TEXT VARhp:="";move(0,0);sendepicture;hpCAT("v"+sbn(0));hpCAT"�"+".)";toplotterchannel;out(hp);toterminalchannel;ENDPROCplotend;PROCclear:terminalchannel:=channel;forget("picture ds",quiet);picture:=new("picture ds");picture:="";TEXT VARhp;hp:="�.(";hpout(hp);hp:="�.M:";hpout(hp);hp:="�.I1000;17;13:";hpout(hp);hp:=schlange;hpCAT"W";hpCATplotput(papierx1,papiery1);hpCATplotput(papierx2,papiery2);hpCATterminator;hpout(hp);hp:=schlange;hpCAT"S";hpCATplotput(xunits,yunits);hpCATterminator;hpout(hp);hpout("vA");hpout(schlange+"Q");hpout(schlange+"V"+sbn(velocity)+terminator);hpout(schlange+"P"+plotput(0,3));END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):linetypesenden;verifypen;switchtopen;.verifypen:INT VARpen;pen:=max(0,foreground);pen:=min(4,pen).switchtopen:TEXT VARhp;hp:=("v"+sbn(pen));hpout(hp).linetypesenden:hp:=schlange+"Q";hpCATlinetypecode;hpout(hp).linetypecode:TEXT VARtt;tt:="";IFlinetype=0THENtt:=terminator;ELIFlinetype=1THENtt:=terminator;ELIFlinetype=2THENtt:=sbn(32+0)+sbn(1)+mbn(15)+terminator;ELIFlinetype=3THENtt:=sbn(32+1)+sbn(2)+mbn(15)+terminator;ELIFlinetype=4THENtt:=sbn(32+1)+sbn(2)+mbn(30)+terminator;ELIFlinetype=5THENtt:=sbn(32+1)+sbn(2)+sbn(32+2)+sbn(2)+mbn(28)+terminator;ELSEtt:=terminatorFI;ttEND PROCpen;PROCmove(INT CONSTx,y):verifyxy;movetoxy.verifyxy:INT VARxx,yy;xx:=max(0,x);xx:=min(xunits,xx);yy:=max(0,y);yy:=min(yunits,yy).movetoxy:TEXT VARhp:="";hpCAT"p";hpCAT(plotput(xx,yy)+terminator);hpout(hp);position:=POS:(x,y)END PROCmove;PROCdraw(INT CONSTx,y):verifyxy;drawtoxy.verifyxy:INT VARxx,yy;xx:=max(0,x);xx:=min(xunits,xx);yy:=max(0,y);yy:=min(yunits,yy).drawtoxy:TEXT VARhp:="";hpCAT"q";hpCAT(plotput(xx,yy)+terminator);hpout(hp);position:=POS:(x,y)END PROCdraw;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):TEXT VARhp;INT VARspace:=int(width*plotterunitspercm),size:=int(height*plotterunitspercm*1.5);hp:=schlange+"%";hpCATplotput(space,size);hpout(hp);hp:=schlange+"'";ersetzeumlaute;hpCATumgesetztertext;hpCATcode(3);hpout(hp);move(position.x,position.y).ersetzeumlaute:TEXT VARumgesetztertext:="";INT VARi;FORiFROM1UPTO LENGTHrecordREPbildeneuentextPER.bildeneuentext:IF(pos("äöüÄÖÜß",(recordSUBi)))=0THENumgesetztertextCAT(recordSUBi)ELSEumgesetztertextCATersetzterumlautFI.ersetzterumlaut:IF"ä"=(recordSUBi)THENalt+"a"+pktklein+standELIF"ö"=(recordSUBi)THENalt+"o"+pktklein+standELIF"ü"=(recordSUBi)THENalt+"u"+pktklein+standELIF"Ä"=(recordSUBi)THENalt+"A"+pktgross+standELIF"Ö"=(recordSUBi)THENalt+"O"+pktgross+standELIF"Ü"=(recordSUBi)THENalt+"U"+pktgross+standELIF"ß"=(recordSUBi)THEN"P"+backspace+"p"ELSE""FI.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,stdhoehe,stdbreite)END PROCdraw;TEXT PROCplotput(INT CONSTnx,ny):INT VARn,nx1,nx2,nx3,ny2,ny3,ny4,ny5,nxr,nyr;TEXT VARmbpformat;INT VARnp1,np2,np3,np4,np5;n:=nx;IF NOT(nx>ny)THENn:=ny;FI;IFn<256THEN IFn>31
+THENthreebyteformatELIFn>3THENtwobyteformatELSEonebyteformatFI;ELSE IFn<2048THENfourbyteformatELIFn<16384THENfivebyteformatELSEerrorstop("out of range: "+text(n));FI;FI;mbpformat.onebyteformat:np1:=ny+96+4*nx;mbpformat:=code(np1);.twobyteformat:nx1:=nxDIV2;nx2:=nx-2*nx1;np1:=nx1+96;np2:=ny+32*nx2;IF NOT(np2>31)THENnp2:=np2+64;FI;mbpformat:=code(np1)+code(np2);.threebyteformat:nx1:=nxDIV16;nx2:=nx-16*nx1;ny2:=nyDIV64;ny3:=ny-64*ny2;np1:=nx1+96;np2:=ny2+4*nx2;IF NOT(np2>31)THENnp2:=np2+64;FI;np3:=ny3;IF NOT(np3>31)THENnp3:=np3+64;FI;mbpformat:=code(np1)+code(np2)+code(np3);.fourbyteformat:nx1:=nxDIV128;nxr:=nx-128*nx1;nx2:=nxrDIV2;nx3:=nxr-2*nx2;ny3:=nyDIV64;ny4:=ny-64*ny3;np1:=96+nx1;np2:=nx2;IF NOT(np2>31)THENnp2:=np2+64;FI;np3:=ny3+32*nx3;IF NOT(np3>31)THENnp3:=np3+64;FI;np4:=ny4;IF NOT(np4>31)THENnp4:=np4+64;FI;mbpformat:=code(np1)+code(np2)+code(np3)+code(np4);.fivebyteformat:nx1:=nxDIV1024;nxr:=nx-1024*nx1;nx2:=nxrDIV16;nx3:=nxr-16*nx2;ny3:=nyDIV4096;nyr:=ny-4096*ny3;ny4:=nyrDIV64;ny5:=nyr-64*ny4;np1:=96+nx1;np2:=nx2;IF NOT(np2>31)THENnp2:=np2+64;FI;np3:=ny3+4*nx3;IF NOT(np3>31)THENnp3:=np3+64;FI;np4:=ny4;IF NOT(np4>31)THENnp4:=np4+64;FI;np5:=ny5;IF NOT(np5>31)THENnp5:=np5+64;FI;mbpformat:=code(np1)+code(np2)+code(np3)+code(np4)+code(np5);.END PROCplotput;TEXT PROCmbn(INT CONSTnn):TEXT VARmbnformat;INT VARnp1,np2,np3,nn1,nn2,nn3,nr;IFnn<16THENonebyteformatELIFnn<1024THENtwobyteformatELIFnn<=32767THENthreebyteformatELSEerrorstop("out of range: "+text(nn));FI;mbnformat.onebyteformat:np1:=nn+96;mbnformat:=code(np1).twobyteformat:nn1:=nnDIV64;nn2:=nn-64*nn1;assemble2;mbnformat:=code(np1)+code(np2);.threebyteformat:nn1:=nnDIV4096;nr:=nn-nn1*4096;nn2:=nrDIV64;nn3:=nr-64*nn2;assemble1;assemble2;mbnformat:=code(np1)+code(np2)+code(np3);.assemble1:np3:=nn3;IF NOT(np3>31)THENnp3:=np3+64;FI;.assemble2:np2:=nn2;IF NOT(np2>31)THENnp2:=np2+64;FI;np1:=nn1+96;.END PROCmbn;TEXT PROCsbn(INT CONSTnn):INT VARnp;np:=nn;IF NOT(np>31)THENnp:=np+64;FI;code(np).END PROCsbn;PROChpout(TEXT CONSTplotcommand):pictureCATplotcommand;IFlength(picture)>800THENsendepictureFI END PROChpout;PROCsendepicture:getlen;toplotterchannel;out(text(picture,len));picture:="";getacknowledge.getlen:INT VARlen:=min(1000,length(picture)).getacknowledge:clearinputbuffer;out("�");readhandshakechar.clearinputbuffer:WHILEincharety<>""REP PER.readhandshakechar:TEXT VARchar:="";INT VARsession;WHILEchar<>" "REPinchar(char)PER;toterminalchannel.END PROCsendepicture;PROCtoplotterchannel:continue(plotterchannel);END PROCtoplotterchannel;PROCtoterminalchannel:END PROCtoterminalchannel;INT PROCplotterkanal:plotterchannelEND PROCplotterkanal;PROCplotterkanal(INT CONSTnr):plotterchannel:=nr;END PROCplotterkanal;END PACKEThpplot;plotterkanal(7)
+
diff --git a/app/schulis-simulationssystem/3.0/src/mat.hp74xx plot b/app/schulis-simulationssystem/3.0/src/mat.hp74xx plot
new file mode 100644
index 0000000..137f6c6
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/mat.hp74xx plot
@@ -0,0 +1,3 @@
+PACKEThpplotDEFINESdrawingarea,plotterkanal,beginplot,endplot,plotend,stdhoehe,stdbreite,geschwindigkeit,clear,pen,move,draw:LETxcm=40.19,ycm=27.46,plotterunitspercm=402.0,buffersize=1024;LETinitcmd="IN",textcmd="LB",separator=",",terminator=";",outputterminator=" ",movecmd="PU",drawcmd="PD",pencmd="SP",charsizecmd="SI",linetypecmd="LT",plotabscmd="PA",askbuffersize="�.B",stdcharpre="�CS33;LB",stdcharpost="�SS;LB",etx="�";ROW22TEXT CONSTnichtasciizeichen:=ROW22TEXT:(stdcharpre+"["+stdcharpost,stdcharpre+"\"+stdcharpost,stdcharpre+"]"+stdcharpost,stdcharpre+"{"+stdcharpost,stdcharpre+"|"+stdcharpost,stdcharpre+"}"+stdcharpost,"k","-","#"," ",stdcharpre+"~"+stdcharpost,"�UC3,0,99,0,16,-99,0,-8,99,-3,0;LB","�UC3,0,99,0,16;LB","�UC3,0,99,0,8,-4,0;LB","�UC0,8,99,3,0,0,8;LB","�UC3,16,99,0,-8,3,0;LB","�UC3,0,99,0,8,3,0;LB","�UC0,8,99,6,0,-99,-3,0,99,0,8;LB","�UC0,8,99,6,0,-99,-3,0,99,0,-8;LB","�UC3,0,99,0,16,-99,0,-8,99,3,0;LB","�UC0,8,99,6,0;LB","�UC0,8,99,6,0,-99,-3,-8,99,0,16;LB");INT CONSTxunits:=int(xcm*plotterunitspercm),yunits:=int(ycm*plotterunitspercm);INT VARterminalchannel,plotterchannel:=5;INT VARfreebytes;REAL VARbuchstabenhoehe:=ycm/25.0,buchstabenbreite:=xcm/80.0;PROCdrawingarea(REAL VARx1,y1,INT VARxpixel,ypixel):x1:=xcm;y1:=ycm;xpixel:=xunits;ypixel:=yunits;END PROCdrawingarea;PROCgeschwindigkeit(INT CONSTx):END PROCgeschwindigkeit;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCstdhoehe(REAL CONSThoehe):buchstabenhoehe:=hoehe;END PROCstdhoehe;PROCstdbreite(REAL CONSTbreite):buchstabenbreite:=breite;END PROCstdbreite;PROCbeginplot:freebytes:=9;toplotterchannel;clear;TEXT VARhp:=pencmd;hpCAT"1";hpCATterminator;sendtoplotter(hp)ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCplotend:clear;TEXT VARhp:=pencmd;hpCAT"0";hpCATterminator;hpCATinitcmd;hpCATterminator;sendtoplotter(hp);toterminalchannelENDPROCplotend;PROCclear:TEXT VARhp:=initcmd;hpCATterminator;hpCATplotabscmd;hpCATterminator;sendtoplotter(hp);END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):TEXT VARhp:=pencmd;IFforeground>6ORforeground<1THENhpCAT"1"ELSEhpCATtext(foreground)END IF;hpCATterminator;hpCATlinetypecmd;IFlinetype>1ANDlinetype<6THENhpCATtext(linetype-1);hpCATseparator;hpCAT"0.75";END IF;hpCATterminator;sendtoplotter(hp)END PROCpen;PROCmove(INT CONSTx,y):verifyxy;movetoxy.verifyxy:INT VARxx,yy;xx:=max(0,x);xx:=min(xunits,xx);yy:=max(0,y);yy:=min(yunits,yy).movetoxy:TEXT VARhp:=movecmd;hpCATtext(xx);hpCATseparator;hpCATtext(yy);hpCATterminator;sendtoplotter(hp)END PROCmove;PROCdraw(INT CONSTx,y):verifyxy;drawtoxy.verifyxy:INT VARxx,yy;xx:=max(0,x);xx:=min(xunits,xx);yy:=max(0,y);yy:=min(yunits,yy).drawtoxy:TEXT VARhp:=drawcmd;hpCATtext(xx);hpCATseparator;hpCATtext(yy);hpCATterminator;sendtoplotter(hp)END PROCdraw;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):TEXT VARhp:=charsizecmd,konvertiertertext:="";konvertieretext;hpCATtext(width*0.66666667,8,4);hpCATseparator;hpCATtext(height*0.5,8,4);hpCATterminator;hpCATtextcmd;hpCATkonvertiertertext;hpCATetx;sendtoplotter(hp).konvertieretext:INT VARstelle;INT VARzeichen;FORstelleFROM1UPTO LENGTHrecordREPEATzeichen:=code(recordSUBstelle);IFzeichen=251THENkonvertiertertextCATnichtasciizeichen[11]ELIFzeichen>=185ANDzeichen<=188THENkonvertiertertextCATnichtasciizeichen[zeichen-173]ELIFzeichen>=200ANDzeichen<=206THENkonvertiertertextCATnichtasciizeichen[zeichen-184]ELIFzeichen>=214ANDzeichen<=223THENkonvertiertertextCATnichtasciizeichen[zeichen-213]ELSEkonvertiertertextCATcode(zeichen)END IF END REPEAT END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,stdhoehe,stdbreite)END PROCdraw;PROCtoplotterchannel:terminalchannel:=channel(myself);continue(plotterchannel);END PROCtoplotterchannel;PROCtoterminalchannel:END PROCtoterminalchannel;INT PROCplotterkanal:plotterchannelEND PROCplotterkanal;PROCplotterkanal(INT CONSTnr):plotterchannel:=nr;END PROCplotterkanal;PROCsendtoplotter(TEXT CONSTstring):INT VARlaenge;laenge:=
+LENGTHstring;IFfreebytes<buffersizeDIV2ORfreebytes-9<laengeTHENwarteaufgenugfreienpufferEND IF;out(string);freebytesDECRlaenge;checkforerror.warteaufgenugfreienpuffer:TEXT VARplotteroutput,char;INT VARdelay:=0;REPplotteroutput:="";pause(delay);REP UNTILincharety=""PER;out(askbuffersize);freebytesDECR3;REPinchar(char);plotteroutputCATcharUNTILchar=outputterminatorPER;plotteroutput:=subtext(plotteroutput,1,LENGTHplotteroutput-1);freebytes:=int(plotteroutput);delay:=1;UNTILfreebytes>buffersizeDIV2ANDfreebytes-9>=laengePER.checkforerror:out("OE;");TEXT VARc,t;inchar(c);inchar(t);IFc<>"0"THENtoterminalchannel;errorstop("Fehler durch String: "+string+" Nr.: "+c)FI;out("�.E");inchar(c);inchar(t);IFt<>outputterminatorTHENcCATt;inchar(t);END IF;IFc<>"0"THENtoterminalchannel;errorstop("Fehler durch String: "+string+" Nr.: "+c)END IF;freebytesDECR6END PROCsendtoplotter;END PACKEThpplot;plotterkanal(7)
+
diff --git a/app/schulis-simulationssystem/3.0/src/mat.kyocera plot b/app/schulis-simulationssystem/3.0/src/mat.kyocera plot
new file mode 100644
index 0000000..6e75223
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/mat.kyocera plot
@@ -0,0 +1,3 @@
+PACKETkyoceraplotDEFINESdrawingarea,plotterkanal,beginplot,endplot,plotend,stdhoehe,stdbreite,clear,pen,move,draw,zeichensatz:LETxcm=29.7,ycm=19.7,bit14=16384,plotterunitspercm=118.1102;LETinitcmd="!R! UNIT d; SPO L;";LETleavecmd="SPO P; EXIT;",separator=",",terminator=";",movecmd="MZP ",drawcmd="DZP ";INT CONSTxunits:=int(xcm*plotterunitspercm),yunits:=int(ycm*plotterunitspercm);INT VARterminalchannel,plotterchannel:=15;REAL VARbuchstabenhoehe:=ycm/25.0,buchstabenbreite:=xcm/80.0;INT VARhorpixel,verpixel,ausgewaehlt,groesstexkoord,groessteykoord;REAL VARhorfaktor,vertfaktor,faktor;INT VARi,printerchannel:=15;horpixel:=3507;verpixel:=2330;horfaktor:=300.0/2.54;vertfaktor:=300.0/2.54;INT VARxpos,ypos,xfak,yfak,nextpointnr,linienraster,linientyp;BOOL VARloeschstift,characterdefined:=FALSE;LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);ROW3ZEICHENSATZ VARzeichen;PROCdrawingarea(REAL VARx1,y1,INT VARxpixel,ypixel):x1:=xcm;y1:=ycm;xpixel:=xunits;ypixel:=yunits;END PROCdrawingarea;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCstdhoehe(REAL CONSThoehe):buchstabenhoehe:=hoeheEND PROCstdhoehe;PROCstdbreite(REAL CONSTbreite):buchstabenbreite:=breiteEND PROCstdbreite;PROCbeginplot:toplotterchannel;out(initcmd)ENDPROCbeginplot;PROCendplot:plotendENDPROCendplot;PROCplotend:IFchannel=plotterchannelTHENout(leavecmd);toterminalchannelEND IF ENDPROCplotend;PROCclear:END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):END PROCpen;PROCmove(INT CONSTx,y):verifyxy;movetoxy.verifyxy:INT VARxx,yy;xx:=max(0,x);xx:=min(xunits,xx);yy:=max(0,y);yy:=min(yunits,yy);IFxx<>xTHENout(" x out of range ")END IF;IFyy<>yTHENout(" y out of range ")FI.movetoxy:xpos:=xx;ypos:=yy;TEXT VARky:=movecmd;kyCATtext(xx);kyCATseparator;kyCATtext(verpixel-yy);kyCATterminator;out(ky)END PROCmove;PROCdraw(INT CONSTx,y):verifyxy;drawtoxy.verifyxy:INT VARxx,yy;xx:=max(0,x);xx:=min(xunits,xx);yy:=max(0,y);yy:=min(yunits,yy);IFxx<>xTHENout(" x out of range ")END IF;IFyy<>yTHENout(" y out of range ")FI.drawtoxy:xpos:=xx;ypos:=yy;TEXT VARky:=drawcmd;kyCATtext(xx);kyCATseparator;kyCATtext(verpixel-yy);kyCATterminator;out(ky)END PROCdraw;PROCzeichensatz(INT CONSTnr,TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARneuerzeichensatz:=old(name);zeichen(nr):=neuerzeichensatz;characterdefined:=TRUE ELSEerrorstop("Der Zeichensatz ""+name+"" existiert nicht")FI END PROCzeichensatz;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):REAL VARdiff:=0.0;setcharacterheightandwidth;zeichensatzauswaehlen;IFlinientyp<>0ANDcharacterdefinedTHENdrawgraphiccharacterFI.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen(2).width;yfak:=zeichen(2).heightELSExfak:=int(horfaktor*width);yfak:=int(vertfaktor*height)FI.zeichensatzauswaehlen:beurteilenutzenderzeichensaetze;IFqualitaet(1)<qualitaet(2)THEN IFqualitaet(1)<=qualitaet(3)THENausgewaehlt:=1;faktor:=matrixfaktor(1)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI ELIFqualitaet(2)<=qualitaet(3)THENausgewaehlt:=2;faktor:=matrixfaktor(2)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI.beurteilenutzenderzeichensaetze:ROW6INT CONSTdimens:=ROW6INT:(6,10,8,8,8,16);ROW3INT VARqualitaet:=ROW3INT:(100,100,100);ROW3REAL VARmatrixfaktor:=ROW3REAL:(1.0,1.0,1.0);INT VARmatrixbreite,matrixhoehe;FORiFROM1UPTO3REPn:=1;matrixbreite:=dimens(2*i-1);matrixhoehe:=dimens(2*i)-freizeilen;WHILExfakDIV(n*matrixbreite)>0CANDyfakDIV(n*matrixhoehe)>0REPqualitaet(i):=(xfak-n*matrixbreite)+(yfak-n*matrixhoehe);nINCR1PER;matrixfaktor(i):=real(n-1);IFn=1THENmatrixfaktor(i):=verkleinerungsfaktorFI PER.freizeilen:SELECTiOF CASE1:0CASE2:0CASE3:1OTHERWISE0END SELECT.verkleinerungsfaktor:IF(matrixbreite-xfak)>(matrixhoehe-yfak)THENreal(xfak)/real(matrixbreite)ELSEreal(yfak)/real(matrixhoehe)FI.drawgraphiccharacter:INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxposition:=xpos,yposition:=ypos,i,n,x,y;BOOL VARmoveorder;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;move(
+xpos,ypos).characterxstep:REAL VARrundungsfehler:=0.0;IFwidth<>0.0THENrundungsfehler:=frac(cosd(angle)*horfaktor*width);int(cosd(angle)*horfaktor*width)ELSEint(cosd(angle)*real(zeichen(ausgewaehlt).width))FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height)ELSEint(sind(angle)*real(zeichen(ausgewaehlt).height))FI.drawcharacteri:TEXT CONSTchar:=zeichen(ausgewaehlt).char[code(recordSUBi)];FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENmove(xposition+x,yposition+y)ELSEdraw(xposition+x,yposition+y)FI PER;diffINCRrundungsfehler;xpositionINCRxstep;IFdiff>1.0THENxpositionINCR1;diffDECR1.0FI;ypositionINCRystep.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=int(real(x)*faktor);y:=int(real(y)*faktor)END PROCvalue;PROCtoplotterchannel:terminalchannel:=channel(myself);continue(plotterchannel);END PROCtoplotterchannel;PROCtoterminalchannel:disablestop;continue(terminalchannel);IFiserrorTHENclearerror;break(quiet)END IF;enablestopEND PROCtoterminalchannel;INT PROCplotterkanal:plotterchannelEND PROCplotterkanal;PROCplotterkanal(INT CONSTnr):plotterchannel:=nr;END PROCplotterkanal;END PACKETkyoceraplot;plotterkanal(15);zeichensatz(1,"ZEICHEN 6*10");zeichensatz(2,"ZEICHEN 8*8");zeichensatz(3,"ZEICHEN 8*16");
+
diff --git a/app/schulis-simulationssystem/3.0/src/mat.laserjet plot b/app/schulis-simulationssystem/3.0/src/mat.laserjet plot
new file mode 100644
index 0000000..0f5360b
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/mat.laserjet plot
@@ -0,0 +1,3 @@
+PACKETlaserjetplotDEFINESdrawingarea,beginplot,endplot,plotend,stdhoehe,stdbreite,clear,pen,move,zeichensatz,draw,plotterkanal:LETesc="�",reset="�E",graphicsresolution="�*t75R",formfeed="�",landscape="�&I1O",horpixel=800,verpixel=560,intsperscanline=50,horfaktor=29.52756,vertfaktor=29.52756,bit14=16384,namederbitmap="Plotter",nameofspooltask="PRINTER",datenraumtypfuerbitmap=1055;BOUND ROWverpixelROWintsperscanlineINT VARbitmap;INT VARxpos,ypos,xfak,yfak,plotterchannel,groesstexkoord,groessteykoord,ausgewaehlt,nextpointnr,linienraster,linientyp;REAL VARbuchstabenhoehe:=0.76,buchstabenbreite:=0.3375,faktor;BOOL VARloeschstift,characterdefined:=FALSE;LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);ROW3ZEICHENSATZ VARzeichen;PROCdrawingarea(REAL VARxcm,ycm,INT VARxpixel,ypixel):xcm:=27.0;ycm:=19.0;xpixel:=horpixel-1;ypixel:=verpixel-1;END PROCdrawingarea;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCstdhoehe(REAL CONSThoehe):buchstabenhoehe:=hoeheEND PROCstdhoehe;PROCstdbreite(REAL CONSTbreite):buchstabenbreite:=breiteEND PROCstdbreite;PROCbeginplot:xpos:=0;ypos:=0;pen(0,1,0,1)ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCplotend:INT VARspaltenbeginn:=(groesstexkoordDIV16)+1,zeilenbeginn:=groessteykoord+1;TEXT VARdoppelbyte:="xx";druckerkanalankoppeln;bereitedruckeraufgrafikausgabevor;gibdiebitmapaus;druckedieseite;gibdruckerkanalfrei.druckerkanalankoppeln:spoolcontrolpassword("");waitforhalt(/nameofspooltask);continue(plotterchannel).gibdruckerkanalfrei:break(quiet);spoolcontrolpassword("");startspool(/nameofspooltask).bereitedruckeraufgrafikausgabevor:out(reset);out(landscape);out(graphicsresolution);out("�*r1A").gibdiebitmapaus:INT VARzeilenzaehler;FORzeilenzaehlerFROMzeilenbeginnDOWNTO1REPbefehlssequenzschickenPER.befehlssequenzschicken:out(esc+"*b"+text(neueanzahlderbytes)+"W");gibteilzeileaus.neueanzahlderbytes:(spaltenbeginnDIV8)+1.gibteilzeileaus:INT VARspaltenzaehler;FORspaltenzaehlerFROM1UPTOneueanzahlderbytesDIV2REPreplace(doppelbyte,1,bitmap(zeilenzaehler)(spaltenzaehler));out(doppelbyte)PER.druckedieseite:out("�*rB");out("�E").END PROCplotend;PROCclear:richtebitmapein;loeschebitmap;beginplot.richtebitmapein:IFexists(namederbitmap)THENforget(namederbitmap,quiet)FI;bitmap:=new(namederbitmap);type(old(namederbitmap),datenraumtypfuerbitmap).loeschebitmap:INT VARi,j;FORiFROM1UPTOverpixelREP FORjFROM1UPTOintsperscanlineREPbitmap(i)(j):=0PER PER.END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):linientyp:=linetype;linienraster:=neueslinienraster;nextpointnr:=0;loeschstift:=foreground=0.neueslinienraster:SELECTlinientypOF CASE2:1365CASE3:975CASE4:255CASE5:639OTHERWISE0END SELECT.END PROCpen;PROCmove(INT CONSTx,y):xpos:=x;ypos:=yEND PROCmove;PROCdraw(INT CONSTgoalx,goaly):ueberpruefeaktuellekoordinatenmitbishergroessten;IFlinientyp<>0THENzeichnelinieFI;xpos:=goalx;ypos:=goaly;ueberpruefeaktuellekoordinatenmitbishergroessten;korrigierenextpointnr.ueberpruefeaktuellekoordinatenmitbishergroessten:IFxpos>groesstexkoordTHENgroesstexkoord:=xposFI;IFypos>groessteykoordTHENgroessteykoord:=yposFI.zeichnelinie:bereitezeichnenvor;verteilegeradeundschraegeschrittemoeglichstgleichmaessig.bereitezeichnenvor:INT VARdx:=goalx-xpos,dy:=goaly-ypos,xdir:=sign(dx),ydir:=sign(dy),xsteps:=abs(dx),ysteps:=abs(dy),totalsteps,biassteps,horstep,verstep;IFxsteps>ystepsTHENtotalsteps:=xsteps;biassteps:=ysteps;horstep:=xdir;verstep:=0ELSEtotalsteps:=ysteps;biassteps:=xsteps;horstep:=0;verstep:=ydirFI.verteilegeradeundschraegeschrittemoeglichstgleichmaessig:INT VARs:=totalstepsDIV2,x:=xpos,y:=ypos;INT VARi;FORiFROM0UPTOtotalstepsREPzeichneaktuellenpunktderlinie;sINCRbiassteps;IFs<totalstepsTHENmachegeradenschrittELSEmacheschraegenschritt;sDECRtotalstepsFI PER.zeichneaktuellenpunktderlinie:IFlinienraster=0THENplotpixel(x,y)ELSEzeichnepunktnurwennerwuenschtFI.zeichnepunktnurwennerwuenscht:IFbit(linienraster,nextpointnr)THENplot(x,y)FI;nextpointnr:=(nextpointnr+1)MOD
+12.machegeradenschritt:xINCRhorstep;yINCRverstep.macheschraegenschritt:xINCRxdir;yINCRydir.korrigierenextpointnr:IFnextpointnr=0THENnextpointnr:=11ELSEnextpointnrDECR1FI.END PROCdraw;PROCzeichensatz(INT CONSTi,TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARneuerzeichensatz:=old(name);zeichen(i):=neuerzeichensatz;characterdefined:=TRUE ELSEerrorstop("Der Zeichensatz ""+name+"" existiert nicht")FI END PROCzeichensatz;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):REAL VARdiff:=0.0;setcharacterheightandwidth;zeichensatzauswaehlen;IFlinientyp<>0ANDcharacterdefinedTHENdrawgraphiccharacterFI.drawgraphiccharacter:INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxposition:=xpos,yposition:=ypos,i,n,x,y;BOOL VARmoveorder;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;move(xpos,ypos).characterxstep:REAL VARrundungsfehler:=0.0;IFwidth<>0.0THENrundungsfehler:=frac(cosd(angle)*horfaktor*width);int(cosd(angle)*horfaktor*width)ELSEint(cosd(angle)*real(zeichen(ausgewaehlt).width))FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height)ELSEint(sind(angle)*real(zeichen(ausgewaehlt).height))FI.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen(2).width;yfak:=zeichen(2).heightELSExfak:=int(horfaktor*width);yfak:=int(vertfaktor*height)FI.zeichensatzauswaehlen:beurteilenutzenderzeichensaetze;IFqualitaet(1)<qualitaet(2)THEN IFqualitaet(1)<=qualitaet(3)THENausgewaehlt:=1;faktor:=matrixfaktor(1)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI ELIFqualitaet(2)<=qualitaet(3)THENausgewaehlt:=2;faktor:=matrixfaktor(2)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI.beurteilenutzenderzeichensaetze:ROW6INT CONSTdimens:=ROW6INT:(6,10,8,8,8,16);ROW3INT VARqualitaet:=ROW3INT:(100,100,100);ROW3REAL VARmatrixfaktor:=ROW3REAL:(1.0,1.0,1.0);INT VARmatrixbreite,matrixhoehe;FORiFROM1UPTO3REPn:=1;matrixbreite:=dimens(2*i-1);matrixhoehe:=dimens(2*i)-freizeilen;WHILExfakDIV(n*matrixbreite)>0CANDyfakDIV(n*matrixhoehe)>0REPqualitaet(i):=(xfak-n*matrixbreite)+(yfak-n*matrixhoehe);nINCR1PER;matrixfaktor(i):=real(n-1);IFn=1THENmatrixfaktor(i):=verkleinerungsfaktorFI PER.verkleinerungsfaktor:IF(matrixbreite-xfak)>(matrixhoehe-yfak)THENreal(xfak)/real(matrixbreite)ELSEreal(yfak)/real(matrixhoehe)FI.freizeilen:SELECTiOF CASE1:0CASE2:0CASE3:1OTHERWISE0END SELECT.drawcharacteri:TEXT CONSTchar:=zeichen(ausgewaehlt).char[code(recordSUBi)];FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENmove(xposition+x,yposition+y)ELSEdraw(xposition+x,yposition+y)FI PER;diffINCRrundungsfehler;xpositionINCRxstep;IFdiff>1.0THENxpositionINCR1;diffDECR1.0FI;ypositionINCRystep.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=int(real(x)*faktor);y:=int(real(y)*faktor)END PROCvalue;PROCplotpixel(INT CONSTx,y):IFgueltigerpunktTHEN IFloeschstiftTHENunplot(x,y)ELSEplot(x,y)FI FI.gueltigerpunkt:x<horpixelANDy<verpixel.END PROCplotpixel;PROCplot(INT CONSTx,y):setbit(bitmap(y+1)(xDIV16+1),15-xMOD16)END PROCplot;PROCunplot(INT CONSTx,y):resetbit(bitmap(y+1)(xDIV16+1),15-xMOD16)END PROCunplot;INT PROCplotterkanal:plotterchannelEND PROCplotterkanal;PROCplotterkanal(INT CONSTnr):plotterchannel:=nr;END PROCplotterkanal;END PACKETlaserjetplot;plotterkanal(15);zeichensatz(1,"ZEICHEN 6*10");zeichensatz(2,"ZEICHEN 8*8");zeichensatz(3,"ZEICHEN 8*16");
+
diff --git a/app/schulis-simulationssystem/3.0/src/mat.xerox4045 plot b/app/schulis-simulationssystem/3.0/src/mat.xerox4045 plot
new file mode 100644
index 0000000..d78d2ca
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/mat.xerox4045 plot
@@ -0,0 +1,4 @@
+PACKETxeroxplotDEFINESdrawingarea,beginplot,endplot,plotend,stdhoehe,stdbreite,clear,pen,move,zeichensatz,draw,plotterkanal:LEThorpixel=720,verpixel=532,intsperscanline=45,horfaktor=29.528,vertfaktor=29.528,bit14=16384,namederbitmap="Plotter",nameofspooltask="PRINTER",datenraumtypfuerbitmap=1055;BOUND ROWverpixelROWintsperscanlineINT VARbitmap;INT VARanzahlgleichersixel,altessixel,plotterchannel:=15;INT VARxpos,ypos,xfak,yfak,ausgewaehlt,nextpointnr,linienraster,linientyp;REAL VARbuchstabenhoehe:=0.75,buchstabenbreite:=0.305,faktor;BOOL VARloeschstift,characterdefined:=FALSE;LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);ROW3ZEICHENSATZ VARzeichen;PROCdrawingarea(REAL VARxcm,ycm,INT VARxpixel,ypixel):xcm:=24.4;ycm:=18.0;xpixel:=horpixel-1;ypixel:=verpixel-1;END PROCdrawingarea;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCstdhoehe(REAL CONSThoehe):buchstabenhoehe:=hoeheEND PROCstdhoehe;PROCstdbreite(REAL CONSTbreite):buchstabenbreite:=breiteEND PROCstdbreite;PROCbeginplot:xpos:=0;ypos:=0;pen(0,1,0,1)ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCplotend:INT VARbitsleft:=0,bits,hilfsvariable,buffer;anzahlgleichersixel:=1;druckerkanalankoppeln;bereitedruckeraufgrafikausgabevor;gibdiebitmapaus;druckedieseite;gibdruckerkanalfrei.druckerkanalankoppeln:spoolcontrolpassword("");waitforhalt(/nameofspooltask);continue(plotterkanal).gibdruckerkanalfrei:break(quiet);spoolcontrolpassword("");startspool(/nameofspooltask).bereitedruckeraufgrafikausgabevor:out("�+X �+0XCP12.5iso-L �0"+"�+P �m2480,0,0,0,3508 �gw");magnification4;out(";236,312,"+text(horpixel)+","+text(verpixel)+" ");altessixel:=-53.magnification4:out("4").gibdiebitmapaus:INT VARi;FORiFROMverpixelDOWNTO1REPgibeinezeilederbitmapausPER.gibeinezeilederbitmapaus:INT VARj;FORjFROM1UPTOintsperscanlineREPbits:=bitmap(i)(j);gibdie16bitsalssixelausPER.gibdie16bitsalssixelaus:SELECTbitsleftOF CASE0:sendemitshift0CASE2:sendemitshift2CASE4:sendemitshift4END SELECT.sendemitshift0:sixelsend(firstsixbits);sixelsend((bitsAND1008)DIV16);buffer:=((bitsAND15)*4);bitsleft:=4.firstsixbits:hilfsvariable:=bits;rotate(hilfsvariable,6);hilfsvariableAND63.sendemitshift2:sixelsend(buffer+firstfourbits);sixelsend((bitsAND4032)DIV64);sixelsend(bitsAND63);bitsleft:=0.firstfourbits:hilfsvariable:=bits;rotate(hilfsvariable,4);hilfsvariableAND15.sendemitshift4:sixelsend(buffer+firsttwobits);sixelsend((bitsAND16128)DIV256);sixelsend((bitsAND252)DIV4);buffer:=((bitsAND3)*16);bitsleft:=2.firsttwobits:hilfsvariable:=bits;rotate(hilfsvariable,2);hilfsvariableAND3.druckedieseite:sendeletztessixel;out("��+P ").sendeletztessixel:sixelsend(-1).END PROCplotend;PROCclear:richtebitmapein;loeschebitmap;beginplot.richtebitmapein:IFexists(namederbitmap)THENforget(namederbitmap,quiet)FI;bitmap:=new(namederbitmap);type(old(namederbitmap),datenraumtypfuerbitmap).loeschebitmap:INT VARi,j;FORiFROM1UPTOverpixelREP FORjFROM1UPTOintsperscanlineREPbitmap(i)(j):=0PER PER.END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):linientyp:=linetype;linienraster:=neueslinienraster;nextpointnr:=0;loeschstift:=foreground=0.neueslinienraster:SELECTlinientypOF CASE2:1365CASE3:975CASE4:255CASE5:639OTHERWISE0END SELECT.END PROCpen;PROCmove(INT CONSTx,y):xpos:=x;ypos:=yEND PROCmove;PROCdraw(INT CONSTgoalx,goaly):IFlinientyp<>0THENzeichnelinieFI;xpos:=goalx;ypos:=goaly;korrigierenextpointnr.zeichnelinie:bereitezeichnenvor;verteilegeradeundschraegeschrittemoeglichstgleichmaessig.bereitezeichnenvor:INT VARdx:=goalx-xpos,dy:=goaly-ypos,xdir:=sign(dx),ydir:=sign(dy),xsteps:=abs(dx),ysteps:=abs(dy),totalsteps,biassteps,horstep,verstep;IFxsteps>ystepsTHENtotalsteps:=xsteps;biassteps:=ysteps;horstep:=xdir;verstep:=0ELSEtotalsteps:=ysteps;biassteps:=xsteps;horstep:=0;verstep:=ydirFI.verteilegeradeundschraegeschrittemoeglichstgleichmaessig:INT VARs:=totalstepsDIV2,x:=xpos,y:=ypos;INT VARi;FORiFROM0UPTOtotalstepsREPzeichneaktuellenpunktderlinie;sINCRbiassteps;IFs<
+totalstepsTHENmachegeradenschrittELSEmacheschraegenschritt;sDECRtotalstepsFI PER.zeichneaktuellenpunktderlinie:IFlinienraster=0THENplotpixel(x,y)ELSEzeichnepunktnurwennerwuenschtFI.zeichnepunktnurwennerwuenscht:IFbit(linienraster,nextpointnr)THENplot(x,y)FI;nextpointnr:=(nextpointnr+1)MOD12.machegeradenschritt:xINCRhorstep;yINCRverstep.macheschraegenschritt:xINCRxdir;yINCRydir.korrigierenextpointnr:IFnextpointnr=0THENnextpointnr:=11ELSEnextpointnrDECR1FI.END PROCdraw;PROCzeichensatz(INT CONSTi,TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARneuerzeichensatz:=old(name);zeichen(i):=neuerzeichensatz;characterdefined:=TRUE ELSEerrorstop("Der Zeichensatz ""+name+"" existiert nicht")FI END PROCzeichensatz;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):REAL VARdiff:=0.0;setcharacterheightandwidth;zeichensatzauswaehlen;IFlinientyp<>0ANDcharacterdefinedTHENdrawgraphiccharacterFI.drawgraphiccharacter:INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxposition:=xpos,yposition:=ypos,i,n,x,y;BOOL VARmoveorder;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;move(xpos,ypos).characterxstep:REAL VARrundungsfehler:=0.0;IFwidth<>0.0THENrundungsfehler:=frac(cosd(angle)*horfaktor*width);int(cosd(angle)*horfaktor*width)ELSEint(cosd(angle)*real(zeichen(ausgewaehlt).width))FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height)ELSEint(sind(angle)*real(zeichen(ausgewaehlt).height))FI.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen(2).width;yfak:=zeichen(2).heightELSExfak:=int(horfaktor*width);yfak:=int(vertfaktor*height)FI.zeichensatzauswaehlen:beurteilenutzenderzeichensaetze;IFqualitaet(1)<qualitaet(2)THEN IFqualitaet(1)<=qualitaet(3)THENausgewaehlt:=1;faktor:=matrixfaktor(1)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI ELIFqualitaet(2)<=qualitaet(3)THENausgewaehlt:=2;faktor:=matrixfaktor(2)ELSEausgewaehlt:=3;faktor:=matrixfaktor(3)FI.beurteilenutzenderzeichensaetze:ROW6INT CONSTdimens:=ROW6INT:(6,10,8,8,8,16);ROW3INT VARqualitaet:=ROW3INT:(100,100,100);ROW3REAL VARmatrixfaktor:=ROW3REAL:(1.0,1.0,1.0);INT VARmatrixbreite,matrixhoehe;FORiFROM1UPTO3REPn:=1;matrixbreite:=dimens(2*i-1);matrixhoehe:=dimens(2*i)-freizeilen;WHILExfakDIV(n*matrixbreite)>0CANDyfakDIV(n*matrixhoehe)>0REPqualitaet(i):=(xfak-n*matrixbreite)+(yfak-n*matrixhoehe);nINCR1PER;matrixfaktor(i):=real(n-1);IFn=1THENmatrixfaktor(i):=verkleinerungsfaktorFI PER.verkleinerungsfaktor:IF(matrixbreite-xfak)>(matrixhoehe-yfak)THENreal(xfak)/real(matrixbreite)ELSEreal(yfak)/real(matrixhoehe)FI.freizeilen:SELECTiOF CASE1:0CASE2:0CASE3:1OTHERWISE0END SELECT.drawcharacteri:TEXT CONSTchar:=zeichen(ausgewaehlt).char[code(recordSUBi)];FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENmove(xposition+x,yposition+y)ELSEdraw(xposition+x,yposition+y)FI PER;diffINCRrundungsfehler;xpositionINCRxstep;IFdiff>1.0THENxpositionINCR1;diffDECR1.0FI;ypositionINCRystep.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=int(real(x)*faktor);y:=int(real(y)*faktor)END PROCvalue;PROCplotpixel(INT CONSTx,y):IFgueltigerpunktTHEN IFloeschstiftTHENunplot(x,y)ELSEplot(x,y)FI FI.gueltigerpunkt:x<horpixelANDy<verpixel.END PROCplotpixel;PROCplot(INT CONSTx,y):setbit(bitmap(y+1)(xDIV16+1),15-xMOD16)END PROCplot;PROCunplot(INT CONSTx,y):resetbit(bitmap(y+1)(xDIV16+1),15-xMOD16)END PROCunplot;PROCsixelsend(INT CONSTneuessixel):IFneuessixel<>altessixelTHENsendealtessixel;altessixel:=neuessixelELIFanzahlgleichersixel<32000THENanzahlgleichersixelINCR1ELSEsendealtessixel;altessixel:=neuessixelFI.sendealtessixel:IFanzahlgleichersixel=1THENout(code(altessixel+63))ELSEout(text(anzahlgleichersixel)+code(altessixel+63));anzahlgleichersixel:=1FI.END PROCsixelsend;INT PROCplotterkanal:plotterchannel
+END PROCplotterkanal;PROCplotterkanal(INT CONSTnr):plotterchannel:=nr;END PROCplotterkanal;END PACKETxeroxplot;plotterkanal(15);zeichensatz(1,"ZEICHEN 6*10");zeichensatz(2,"ZEICHEN 8*8");zeichensatz(3,"ZEICHEN 8*16");
+
diff --git a/app/schulis-simulationssystem/3.0/src/modellbasis dialog b/app/schulis-simulationssystem/3.0/src/modellbasis dialog
new file mode 100644
index 0000000..17202fe
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/modellbasis dialog
@@ -0,0 +1,24 @@
+PACKETmodellbasisDEFINESinfotextauswahl,auskunftsdienst,modellmitdatenfuellen,listemodellbanken,anzahlmodellbanken,listedermodelle,anzahldglmodelle,anzahlwdmodelle,anzahlausfuehrbarerwdmodelle,fuegeein,loesche,modelldatenraum,neuebank,modellbankvolldgl,modellbankvollwd,modellbankvoll,copy,modellaktuell,MODELLDGL,compilierbaregleichungen,modellname,modellbezeichnung,informationstext,vorgabekurve,vorgabevergleichskurve,:=,modellerfassung,nilmodell,kopplean,wdmodelle,wddsnamen,wdeinfuegen,wdumbenennen,komprimiere,KRITERIUM,allemodelle,alleaenderbaren,allelauffaehigen,schickeanmanagertask,putgetformular1:
+LETesc=""27"",return=""13"",rechts=""2"",links=""8"",hoch=""3"",runter=""10"",tab=""9"",dsname="Modell Infodatei",auskunftseite1=""28"",allgemeineauskunftseite2=""29""30""31"",auskeingabebeispiel=""42"",auskdatenkorrekt=""43"",auskfehlerfestgestellt=""44"",auskgleichungunvollstaendig=""45"",ausklabelzulang=""46"",ausklabeldoppelt=""47""48"",auskcompilunbekkomm=""49"" ,auskcompilparameter=""50"" ,auskcompilsymbole=""51""52"" ,auskkeinegleichungen=""53"",auskunftzummodellerfassenseite2=""54""56"",auskvariablen=59,auskmodell=62,auskgleichungen=63,auskparameter=64,auskcompilungueltzw=""65""66"" ,auskcompilmehrfdekl=""67"" ,auskcompilsonstiges=""68"" ;
+LETmaxmodelle=40,maxdglmodelle=20,maxwdmodelle=20,maxdialogpkt=20,maxinterpretlaenge=2000,terminaltaskname="ARBEITSPLATZ",geraetekanal=1,simulationneustarten=10,typnrmodellbank=1199,typnrwdausfuehrbar=1207,dglsuffix="(DGL)",wdsuffix=" (WD)",maxdimension=20,maxparameter=20,typnrmodell=1077,maxvarlaenge=30,maxinfo=50,maxgleichungen=50,maxdarstellungszeilen=500,uebersetzbar=0,notuebersetzbar=1,endezeichen="zZz",sp=" ",praefix="d ",modellcode=" code info ds",originalkurve=" originalkurve ds",vergleichskurve=" vergleichskurve ds",darstellungskopf=" PROC darstellung 4 (LOESUNG VAR lsg, BOOL VAR in demo, TEXT VAR taste):",darstellungsende=" END PROC darstellung 4 ;";LETbtsimulationunmoeglich=63,btwartenallgemein=44,btwartenwaehrendspeichern=87,btwartenwaehrenddrucken=88;INT CONSTexistiertnicht:=-1,nichtempfangsbereit:=-2;LETabbruchtaste="a",abbruchtastemenu="m",auskunftstaste="i",auskunftsloeschtaste1="z",auskunftsloeschtaste2="l",weitertaste="w",blaettertaste="b",speichertaste="s",zuruecktaste="z",simulationstaste="w",prueftaste="p",drucktaste="d",dupliziertaste="k",loeschtaste="-",wiedergabetaste="+",spalte3=3,infozeilenanfang=19,ersteseingabefeld=2,beginnseite1=1,endeseite1=10,beginnseite2=11,endeseite2=20,bildschirmzeilen=10,maxzeileneingabe=20,maxvarparaanzahl=61,maxvariablenlaenge=7,maxparlaenge=30,maxmodellnamelang=30,maxmodellnamelangaufgeblaeht=40,maxmodellnamekurz=15,stmenuoderweiter=33,auskihrfehler=7,auskpruefung=13,auskgespeichert=14,auskinfogedruckt=15;LETunbekkommdo="unbekanntes Kommando",undefdyadischop="undefinierter dyadischer",undefmonadop="undefinierter monadischer",paramsindfalsch="Typen der Parameter sind falsch",nurletzteanweisg="nur die letzte Anweisung",anstelledessymb="anstelle des letzten Symbols",unzulselektsymb="unzulaessiges Selektor-Symbol",konstdarfnicht="die Konstante darf nicht veraendert",klammerauffehlt="'(' fehlt",klammerzufehlt="')' fehlt",operatorfehlt="';' oder Operator ('+',",ungueltigzwischen="ungueltig zwischen Anweisungen",istmehrfachdekl="ist mehrfach deklariert";LETfehlertaste=4,fehlerparameterzulang=28,fehlerkopierposition=29,fehlerlangname=80,fehlerkurzname=81,fehlerlangnamefehlt=82,fehlerkurznamefehlt=83,fehlergleichungsart=85,fehlergleichungsartfehlt=86,fehlergleichungfehlt=87,fehlervariable=88,fehlervariablefehlt=89,fehlervariablezulang=90,fehlerdoppeldeklaration=91,fehlermodellnamedoppelt=92,fragenochmalspeichern=93,fehlervundgdoppelt=94,fehlerzeitvariabledoppelt=95,fragehierabspeichern=96,mldcursorbenutzung=97,mldnichtablauffaehig=98;TEXT CONSTgleichungsunterstriche:=60*"_"+140*" ",variablenunterstriche:=maxvariablenlaenge*"_",parameterunterstriche:=8*"_"+22*" ",leeresfeld:=77*" ",unterstrichfeld:=77*"-";TYPE KRITERIUM=INT;KRITERIUM CONSTallemodelle:=0,alleaenderbaren:=1,allelauffaehigen:=2;OP:=(KRITERIUM VARt,INT CONSTi):CONCR(t):=iENDOP:=;BOOL OP=(KRITERIUM CONSTlinks,rechts):CONCR(links)=CONCR(rechts)END OP=;LET ZEILE=STRUCT(TEXTgleichungsart,gleichung,variable,INTnummer);TYPE MODELLBANK=STRUCT(INTanzahldglmodelle,ROWmaxdglmodelleMODELLDGLmodelle,THESAURUSwdmodelle,wddsnamen);TYPE DEMOLAUF=STRUCT(VORGABEoriginal,vergleich,INTxindex,yindex,BOOLautomatisch,TEXTvariablenwahl);TYPE VORGABE=STRUCT(TEXTstartwert,parameter,REALanfangszeitpunkt,beobachtungsdauer,TEXTkurve);TYPE LOESUNG=STRUCT(ZUSTANDstartwert,PARAMETERparameter,REALanfangszeitpunkt,beobachtungsdauer,KURVEkurve);TYPE NAMEN=STRUCT(TEXTelan,lang,kurz);TYPE ZUSTANDSDATEN=STRUCT(INTanzahl,TEXToberbegriff,oberbegriffkurzform,ROWmaxdimensionTEXTnamelang,namekurz,TEXTunteregrenze,oberegrenze,randoben,randunten);TYPE COVARIABLENDATEN=STRUCT(INTanzahl,ROWmaxdimensionTEXTnamelang,namekurz);TYPE KOMBINATION=STRUCT(TEXTname,INTxindex,yindex,BOOLautomatisch);TYPE KOMBINATIONSANGEBOT=STRUCT(BOOLmitkombinationen,INTanzahl,ROWmaxdimensionKOMBINATIONpaar);TYPE PARAMETERDATEN=STRUCT(INTanzahl,ROWmaxparameterTEXTnamelang,nameelan,TEXTunteregrenze,oberegrenze);TYPE DARSTELLUNGSDATEN=STRUCT(BOOLimmodell,TEXTname);TYPE BESCHRAENKUNG=STRUCT(
+REALminbeobachtungsdauer,maxbeobachtungsdauer,minanfangszeitpunkt,maxanfangszeitpunkt,INTanzahlbeobachtungspunkte);LET TEXTDATEN=BOUND STRUCT(ROWmaxinfoTEXTinfo,ROWmaxgleichungenTEXTgleichungen,cogleichungen,ROWmaxdarstellungszeilenTEXTdarstellungscode);TYPE MODELLDGL=STRUCT(NAMENname,ZUSTANDSDATENvariablen,COVARIABLENDATENcovariablen,PARAMETERDATENparameter,DARSTELLUNGSDATENdarstellung,BOOLmitphasendiagramm,BOOLganzzahlig,KOMBINATIONSANGEBOTkombinationen,TEXTcodeundinfo,BESCHRAENKUNGbeschraenkung,DEMOLAUFdemolauf,INTmodellzustand,BOOLgeschuetzt);BOUND MODELLBANK VARmb;MODELLDGL VARmodell;TEXTDATEN VARtextdaten;TEXT PROCmodellbezeichnung:modell.name.lang.END PROCmodellbezeichnung;TEXT PROCmodellkurzbezeichnung:modell.name.kurz.END PROCmodellkurzbezeichnung;TEXT PROCmodellname:modell.name.elan.END PROCmodellname;TEXT PROCmodelldatenraum:modell.codeundinfo.END PROCmodelldatenraum;BOOL PROCcompilierbaregleichungen:modell.modellzustand=uebersetzbarEND PROCcompilierbaregleichungen;INT PROCdimension:modell.variablen.anzahl.END PROCdimension;INT PROCcodimension:modell.covariablen.anzahl.END PROCcodimension;INT PROCparameteranzahl:modell.parameter.anzahl.END PROCparameteranzahl;BOOL PROCmitzusatzdarstellung:modell.darstellung.immodell.END PROCmitzusatzdarstellung;BOOL PROCmitphasendiagramm:modell.mitphasendiagramm.END PROCmitphasendiagramm;BOOL PROCergebnisganzzahlig:modell.ganzzahlig.END PROCergebnisganzzahlig;DATASPACE VARtextds;PROCinformationstext(FILE VARtexte):forget(textds);textds:=nilspace;texte:=sequentialfile(output,textds);holeinformationstext.holeinformationstext:TEXT VARsatz:="";INT VARi;IFmodell.geschuetztTHENputline(texte," "+modellbezeichnung);putline(texte," "+(areaxsize(grossesrahmenfenster)-2)*waagerecht);FI;FORiFROM1UPTOmaxinfoWHILEtextdaten.info(i)<>endezeichenREPsatz:=textdaten.info(i);putline(texte,satz);PER;.END PROCinformationstext;TEXT PROCvariablenname(INT CONSTi):TEXT CONSTt:=(modell.variablen.namelang(i));t+(maxvarlaenge-LENGTH(t))*" ".END PROCvariablenname;TEXT PROCvariablenkurzform(INT CONSTi):modell.variablen.namekurz(i).END PROCvariablenkurzform;TEXT PROCcovariablenname(INT CONSTi):TEXT CONSTt:=modell.covariablen.namelang(i);t+(maxvarlaenge-LENGTH(t))*" ".END PROCcovariablenname;TEXT PROCcovariablenkurzform(INT CONSTi):modell.covariablen.namekurz(i).END PROCcovariablenkurzform;TEXT PROCparametername(INT CONSTi):modell.parameter.namelang(i).END PROCparametername;TEXT PROCparameterkurzform(INT CONSTi):modell.parameter.nameelan(i).END PROCparameterkurzform;TEXT PROCdarstellungsname:modell.darstellung.name.END PROCdarstellungsname;PARAMETER PROCvorgabeparameter:parameter(modell.demolauf.original.parameter).END PROCvorgabeparameter;REAL PROCvorgabeanfangszeitpunkt:modell.demolauf.original.anfangszeitpunkt.END PROCvorgabeanfangszeitpunkt;ZUSTAND PROCvorgabevergleichssystemzustand:zustand(modell.demolauf.vergleich.startwert).END PROCvorgabevergleichssystemzustand;PARAMETER PROCvorgabevergleichsparameter:parameter(modell.demolauf.vergleich.parameter).END PROCvorgabevergleichsparameter;ZUSTAND PROCzustandunteregrenze:zustand(modell.variablen.unteregrenze).END PROCzustandunteregrenze;ZUSTAND PROCzustandoberegrenze:zustand(modell.variablen.oberegrenze).END PROCzustandoberegrenze;PARAMETER PROCparameteroberegrenze:parameter(modell.parameter.oberegrenze).END PROCparameteroberegrenze;PARAMETER PROCparameterunteregrenze:parameter(modell.parameter.unteregrenze).END PROCparameterunteregrenze;ZUSTAND PROCrandoben:zustand(modell.variablen.randoben).END PROCrandoben;ZUSTAND PROCrandunten:zustand(modell.variablen.randunten).END PROCrandunten;REAL PROCminbeobachtungsdauer:modell.beschraenkung.minbeobachtungsdauer.END PROCminbeobachtungsdauer;REAL PROCmaxbeobachtungsdauer:modell.beschraenkung.maxbeobachtungsdauer.END PROCmaxbeobachtungsdauer;REAL PROCminanfangszeitpunkt:modell.beschraenkung.minanfangszeitpunkt.END PROCminanfangszeitpunkt;REAL PROCmaxanfangszeitpunkt:modell.beschraenkung.maxanfangszeitpunkt.END PROC
+maxanfangszeitpunkt;INT PROCanzahlbeobachtungspunkte:modell.beschraenkung.anzahlbeobachtungspunkte.END PROCanzahlbeobachtungspunkte;BOOL PROCmitkombinationen:modell.kombinationen.mitkombinationen.END PROCmitkombinationen;PROClistekombinationen(ROWmaxdimensionTEXT VARnamen,INT VARanzahl):INT VARi;anzahl:=modell.kombinationen.anzahl;FORiFROM1UPTOanzahlREPnamen(i):=modell.kombinationen.paar(i).name;PER;END PROClistekombinationen;PROCindiceskombinationen(INT CONSTkombnr,INT VARxachse,yachse,BOOL VARvertauschbar):xachse:=modell.kombinationen.paar(kombnr).xindex;yachse:=modell.kombinationen.paar(kombnr).yindex;vertauschbar:=modell.kombinationen.paar(kombnr).automatisch;END PROCindiceskombinationen;ZUSTAND PROCvorgabesystemzustand:zustand(modell.demolauf.original.startwert).END PROCvorgabesystemzustand;REAL PROCvorgabebeobachtungsdauer:modell.demolauf.original.beobachtungsdauer.END PROCvorgabebeobachtungsdauer;TEXT PROCvorgabekurve:modell.demolauf.original.kurve.END PROCvorgabekurve;REAL PROCvorgabevergleichsanfangszeitpunkt:modell.demolauf.vergleich.anfangszeitpunkt.END PROCvorgabevergleichsanfangszeitpunkt;REAL PROCvorgabevergleichsbeobachtungsdauer:modell.demolauf.vergleich.beobachtungsdauer.END PROCvorgabevergleichsbeobachtungsdauer;TEXT PROCvorgabevergleichskurve:modell.demolauf.vergleich.kurve.END PROCvorgabevergleichskurve;ZUSTAND PROCdemomuster:zustand(modell.demolauf.variablenwahl).END PROCdemomuster;BOOL PROCdemoautomatik:modell.demolauf.automatisch.END PROCdemoautomatik;INT PROCdemoxindex:modell.demolauf.xindexEND PROCdemoxindex;INT PROCdemoyindex:modell.demolauf.yindexEND PROCdemoyindex;TEXT PROCgleichung(INT CONSTi):textdaten.gleichungen(i)END PROCgleichung;TEXT PROCcogleichung(INT CONSTi):textdaten.cogleichungen(i)END PROCcogleichung;TEXT PROCdarstellungszeile(INT CONSTi):textdaten.darstellungscode(i)END PROCdarstellungszeile;PROCkopplean(MODELLDGL VARaktuellesmodell):modell:=aktuellesmodell;IFexists(modell.codeundinfo)THENtextdaten:=old(modell.codeundinfo);FI END PROCkopplean;PROCkopplean(INT CONSTaktuellesmodell):IFdglmodellTHENmodell:=mb.modelle(aktuellesmodell);IFexists(modell.codeundinfo)THENtextdaten:=old(modell.codeundinfo)FI FI.dglmodell:aktuellesmodell<=maxdglmodelle.END PROCkopplean;MODELLDGL PROCmodellaktuell(INT CONSTaktuellesmodell):mb.modelle(aktuellesmodell).END PROCmodellaktuell;PROCnilmodell(MODELLDGL VARmod):initialisieremodell.initialisieremodell:INT VARi;mod.name.elan:="";mod.name.lang:="";mod.name.kurz:="";mod.variablen.anzahl:=0;mod.variablen.oberbegriff:="";mod.variablen.oberbegriffkurzform:="";FORiFROM1UPTOmaxdimensionREPmod.variablen.namelang(i):="";mod.variablen.namekurz(i):="";PER;mod.variablen.unteregrenze:="";mod.variablen.oberegrenze:="";mod.variablen.randoben:="";mod.variablen.randunten:="";mod.covariablen.anzahl:=0;FORiFROM1UPTOmaxdimensionREPmod.covariablen.namelang(i):="";mod.covariablen.namekurz(i):="";PER;mod.parameter.anzahl:=0;FORiFROM1UPTOmaxparameterREPmod.parameter.namelang(i):="";mod.parameter.nameelan(i):="";PER;mod.parameter.unteregrenze:="";mod.parameter.oberegrenze:="";mod.darstellung.immodell:=FALSE;mod.darstellung.name:="";mod.mitphasendiagramm:=FALSE;mod.ganzzahlig:=FALSE;mod.demolauf.vergleich.startwert:="";mod.demolauf.vergleich.parameter:="";mod.demolauf.vergleich.beobachtungsdauer:=0.0;mod.demolauf.vergleich.anfangszeitpunkt:=0.0;mod.demolauf.vergleich.kurve:="";mod.demolauf.original.startwert:="";mod.demolauf.original.parameter:="";mod.demolauf.original.anfangszeitpunkt:=0.0;mod.demolauf.original.beobachtungsdauer:=0.0;mod.demolauf.original.kurve:="";mod.demolauf.xindex:=0;mod.demolauf.yindex:=0;mod.demolauf.automatisch:=FALSE;mod.demolauf.variablenwahl:="";mod.kombinationen.mitkombinationen:=FALSE;mod.kombinationen.anzahl:=0;FORiFROM1UPTOmaxdimensionREPmod.kombinationen.paar(i).xindex:=0;mod.kombinationen.paar(i).yindex:=0;mod.kombinationen.paar(i).automatisch:=FALSE;mod.kombinationen.paar(i).name:="";PER;mod.beschraenkung.minbeobachtungsdauer:=0.0;mod.beschraenkung
+.maxbeobachtungsdauer:=0.0;mod.beschraenkung.minanfangszeitpunkt:=0.0;mod.beschraenkung.maxanfangszeitpunkt:=0.0;mod.beschraenkung.anzahlbeobachtungspunkte:=0;mod.modellzustand:=notuebersetzbar;mod.geschuetzt:=FALSE;END PROCnilmodell;PROCbildedsnamenneu(MODELLDGL VARmod,TEXT CONSTmodellbank,INT CONSTmodellnr):mod.codeundinfo:=modellbank+sp+text(modellnr)+modellcode;mod.demolauf.original.kurve:=modellbank+sp+text(modellnr)+originalkurve;mod.demolauf.vergleich.kurve:=modellbank+sp+text(modellnr)+vergleichskurve;END PROCbildedsnamenneu;PROCgleichungsprozeduren(TEXT CONSTdateiname):forget(dateiname,quiet);FILE VARprog:=sequentialfile(output,dateiname);schreibegleichungsproz;schreibecogleichungsproz;schreibedarstellung4;.schreibegleichungsproz:putline(prog,"ZUSTAND PROC f (REAL CONST zeit, "+" ZUSTAND CONST alter zustand, "+" PARAMETER CONST alle parameter):");deklarationen;gleichungen;ergebnis;putline(prog,"END PROC f;");.schreibecogleichungsproz:putline(prog,"ZUSTAND PROC co f (REAL CONST zeit, "+" ZUSTAND CONST alter zustand, "+" PARAMETER CONST alle parameter):");deklarationenvoncof;cogleichungen;cofergebnis;putline(prog,"END PROC co f;").gleichungen:FORiFROM1UPTOmaxgleichungenWHILEgleichung(i)<>endezeichenREPputline(prog,gleichung(i));PER.cogleichungen:INT VARi;FORiFROM1UPTOmaxgleichungenWHILEcogleichung(i)<>endezeichenREPputline(prog,cogleichung(i));PER;.deklarationen:putline(prog,"ZUSTAND VAR dvektorxyx"+" := neuer zustand (DSUB alter zustand);");IFdimension>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOdimensionREPput(prog,elan(variablenkurzform(i))+" :: ");IFi=dimensionTHENputline(prog,"alter zustand SUB "+text(i)+" ;");ELSEputline(prog,"alter zustand SUB "+text(i)+" ,");FI PER FI;IFparameteranzahl>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOparameteranzahlREPput(prog,elan(parameterkurzform(i))+" :: ");IFi=parameteranzahlTHENputline(prog,"alle parameter SUB "+text(i)+" ;");ELSEputline(prog,"alle parameter SUB "+text(i)+" ,");FI;PER;FI;IFdimension>0THENput(prog,"REAL VAR ");FORiFROM1UPTOdimensionREPput(prog,praefix+elan(variablenkurzform(i)));IFi=dimensionTHENputline(prog,";")ELSEputline(prog,",")FI;PER;FI;.ergebnis:putline(prog,"ergebnisxyx .");putline(prog,"ergebnisxyx : ");FORiFROM1UPTOdimensionREPputline(prog,"replace (dvektorxyx ,"+text(i)+","+praefix+elan(variablenkurzform(i))+" );");PER;putline(prog,"dvektorxyx.");.deklarationenvoncof:putline(prog,"ZUSTAND VAR dvektorxyx"+" := neuer zustand ( co dimension);");IFdimension>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOdimensionREPput(prog,elan(variablenkurzform(i))+" :: ");IFi=dimensionTHENputline(prog,"alter zustand SUB "+text(i)+" ;");ELSEputline(prog,"alter zustand SUB "+text(i)+" ,");FI;PER;FI;IFparameteranzahl>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOparameteranzahlREPput(prog,elan(parameterkurzform(i))+" :: ");IFi=parameteranzahlTHENputline(prog,"alle parameter SUB "+text(i)+" ;");ELSEputline(prog,"alle parameter SUB "+text(i)+" ,");FI;PER;FI;IFcodimension>0THENput(prog,"REAL VAR ");FORiFROM1UPTOcodimensionREPput(prog,elan(covariablenkurzform(i)));IFi=codimensionTHENputline(prog,";")ELSEputline(prog,",")FI;PER;FI;.cofergebnis:putline(prog,"ergebnisxyx .");putline(prog,"ergebnisxyx : ");FORiFROM1UPTOcodimensionREPputline(prog,"replace (dvektorxyx ,"+text(i)+","+elan(covariablenkurzform(i))+" );");PER;putline(prog,"dvektorxyx.");.schreibedarstellung4:IFmitzusatzdarstellungTHENschreibedarstellungscodeELSEschreibeleerenprozedurkopfFI.schreibeleerenprozedurkopf:putline(prog,darstellungskopf);putline(prog,darstellungsende);.schreibedarstellungscode:FORiFROM1UPTOmaxdarstellungszeilenWHILEdarstellungszeile(i)<>endezeichenREPputline(prog,darstellungszeile(i));PER.END PROCgleichungsprozeduren;TEXT PROCelan(TEXT CONSTalt):INT VARi:=1;TEXT VARt:="";FORiFROM1UPTO(LENGTHalt)REP IF(tanderstellei>=97CANDtanderstellei<=122)COR(tanderstellei>216CANDtanderstellei<=219)COR(tanderstellei>=48CANDtanderstellei<=57)THENtCATsubtext(alt,i,i)ELIF(tanderstellei>=65CANDtanderstellei<=
+90)THENtCATcode(tanderstellei+32)ELIF(tanderstellei>=214CANDtanderstellei<=216)THENtCATcode(tanderstellei+3)ELSEtCAT" "FI PER;t.tanderstellei:code(subtext(alt,i,i))END PROCelan;OP:=(MODELLDGL VARmod,MODELLDGL CONSTm):CONCR(mod.name):=CONCR(m.name);CONCR(mod.variablen):=CONCR(m.variablen);CONCR(mod.covariablen):=CONCR(m.covariablen);CONCR(mod.parameter):=CONCR(m.parameter);CONCR(mod.darstellung):=CONCR(m.darstellung);mod.mitphasendiagramm:=m.mitphasendiagramm;mod.ganzzahlig:=m.ganzzahlig;mod.kombinationen.mitkombinationen:=m.kombinationen.mitkombinationen;mod.kombinationen.anzahl:=m.kombinationen.anzahl;INT VARi;FORiFROM1UPTOmaxdimensionREP CONCR(mod.kombinationen.paar(i)):=CONCR(m.kombinationen.paar(i))PER;mod.codeundinfo:=m.codeundinfo;CONCR(mod.beschraenkung):=CONCR(m.beschraenkung);CONCR(mod.demolauf.original):=CONCR(m.demolauf.original);CONCR(mod.demolauf.vergleich):=CONCR(m.demolauf.vergleich);mod.demolauf.xindex:=m.demolauf.xindex;mod.demolauf.yindex:=m.demolauf.yindex;mod.demolauf.automatisch:=m.demolauf.automatisch;mod.demolauf.variablenwahl:=m.demolauf.variablenwahl;mod.modellzustand:=m.modellzustand;mod.geschuetzt:=m.geschuetztEND OP:=;PROCloesche(INT CONSTmodellnr,TEXT CONSTmodellbankname):INT VARi;disablestop;IFdglmodellTHENforget(mb.modelle(modellnr).demolauf.original.kurve,quiet);forget(mb.modelle(modellnr).demolauf.vergleich.kurve,quiet);forget(mb.modelle(modellnr).codeundinfo,quiet);rueckedieanderenmodelleaufELSEforget(name(wddsnamen,modellindex),quiet);delete(mb.wddsnamen,modellindex);delete(mb.wdmodelle,modellindex);FI;enablestop.dglmodell:modellnr<=maxdglmodelle.modellindex:modellnr-maxdglmodelle.rueckedieanderenmodelleauf:FORiFROMmodellnr+1UPTOmb.anzahldglmodelleREPmb.modelle(i-1):=mb.modelle(i);bildedsnamenneu(mb.modelle(i-1),modellbankname,i-1);IFexists(mb.modelle(i).codeundinfo)THENrename(mb.modelle(i).codeundinfo,mb.modelle(i-1).codeundinfo);FI;KURVE VARkurvezurumbenennung,altekurve;IFexists(mb.modelle(i).demolauf.original.kurve)THENaltekurve:=old(mb.modelle(i).demolauf.original.kurve);copy(kurvezurumbenennung,mb.modelle(i-1).demolauf.original.kurve,altekurve);forget(mb.modelle(i).demolauf.original.kurve,quiet);FI;IFexists(mb.modelle(i).demolauf.vergleich.kurve)THENaltekurve:=old(mb.modelle(i).demolauf.vergleich.kurve);copy(kurvezurumbenennung,mb.modelle(i-1).demolauf.vergleich.kurve,altekurve);forget(mb.modelle(i).demolauf.vergleich.kurve,quiet);FI;PER;mb.anzahldglmodelleDECR1;.END PROCloesche;PROCneuebank(TEXT CONSTmodellbankname):INT VARi;IF NOTexists(modellbankname)CAND NOT(modellbankname="")THENmb:=new(modellbankname);type(old(modellbankname),typnrmodellbank);initialisierebank;FI.initialisierebank:mb.anzahldglmodelle:=0;FORiFROM1UPTOmaxdglmodelleREPnilmodell(mb.modelle(i));PER;mb.wdmodelle:=emptythesaurus;mb.wddsnamen:=emptythesaurus.END PROCneuebank;PROCkopplean(TEXT CONSTmodellbankname):IFexists(modellbankname)THENmb:=old(modellbankname)FI END PROCkopplean;PROClistemodellbanken(ROWmaxdialogpktTEXT VARnamensliste,INT VARanzahlbanken):suchedateienmitrichtigemtyp;.suchedateienmitrichtigemtyp:anzahlbanken:=0;TEXT VARname,d;beginlist;getlistentry(name,d);WHILEname<>""REP IFtype(old(name))=typnrmodellbankTHENanzahlbankenINCR1;namensliste(anzahlbanken):=name;FI;getlistentry(name,d);PER.END PROClistemodellbanken;INT PROCanzahlmodellbanken:INT VARanzahlbanken;suchedateienmitrichtigemtyp;anzahlbanken.suchedateienmitrichtigemtyp:anzahlbanken:=0;TEXT VARname,d;beginlist;getlistentry(name,d);WHILEname<>""REP IFtype(old(name))=typnrmodellbankTHENanzahlbankenINCR1;FI;getlistentry(name,d);PER;.END PROCanzahlmodellbanken;PROCloesche(TEXT CONSTmbname):kopplean(mbname);INT VARi;FORiFROM1UPTOmb.anzahldglmodelleREPforget(mb.modelle(i).demolauf.original.kurve,quiet);forget(mb.modelle(i).demolauf.vergleich.kurve,quiet);forget(mb.modelle(i).codeundinfo,quiet)PER;doquiet(PROC(TEXT CONST,QUIET CONST)forget,mb.wddsnamen);forget(mbname,quiet);END PROCloesche;PROCdoquiet(PROC(TEXT CONST,QUIET CONST)f,THESAURUS CONSTt):INT
+ VARi:=0;TEXT VARname;WHILEi<highestentry(t)REPget(t,name,i);IFname<>""THENf(name,quiet)FI PER;END PROCdoquiet;PROClistedermodelle(ROWmaxmodelleTEXT VARnamensliste,ROWmaxmodelleINT VARmodelliste,KRITERIUM CONSTkriterium,INT VARmodellzaehler):INT VARmodnr;holemodellnamen.holemodellnamen:modellzaehler:=0;FORmodnrFROM1UPTOmb.anzahldglmodelleREPholedglnamen;PER;modnr:=0;WHILEmodnr<highestentry(mb.wdmodelle)REPholewdnamenPER.holewdnamen:TEXT VARmodellname;get(mb.wdmodelle,modellname,modnr);IFwdmodellerfuelltdaskriteriumTHENmodellzaehlerINCR1;namensliste(modellzaehler):=text(modellname,maxmodellnamelangaufgeblaeht)+sp+wdsuffix;modelliste(modellzaehler):=modnr+maxdglmodelle;FI.holedglnamen:IFdglmodellerfuelltdaskriteriumTHENmodellzaehlerINCR1;namensliste(modellzaehler):=text(mb.modelle(modnr).name.lang,maxmodellnamelangaufgeblaeht)+sp+dglsuffix;modelliste(modellzaehler):=modnrFI.wdmodellerfuelltdaskriterium:kriterium=allemodelleCORkriterium=alleaenderbarenCOR(kriterium=allelauffaehigenCANDwdmodelllauffaehig).wdmodelllauffaehig:type(old(name(mb.wddsnamen,modnr)))=typnrwdausfuehrbar.dglmodellerfuelltdaskriterium:kriterium=allemodelleCOR(kriterium=alleaenderbarenCANDdglmodellaenderbar)COR(kriterium=allelauffaehigenCANDdglmodelllauffaehig).dglmodellaenderbar:NOTmb.modelle(modnr).geschuetzt.dglmodelllauffaehig:mb.modelle(modnr).modellzustand=uebersetzbar.END PROClistedermodelle;PROClistedermodelle(INT VARanzahlveraenderbar,anzahlausfuehrbar):INT VARmodnr;anzahlveraenderbar:=0;anzahlausfuehrbar:=0;FORmodnrFROM1UPTOmb.anzahldglmodelleREPzaehlehochPER;anzahlveraenderbarINCRanzahlwdmodelle;anzahlausfuehrbarINCRanzahlausfuehrbarerwdmodelle.zaehlehoch:IF NOT(mb.modelle(modnr).geschuetzt)THENanzahlveraenderbarINCR1FI;IFmb.modelle(modnr).modellzustand=uebersetzbarTHENanzahlausfuehrbarINCR1FI.END PROClistedermodelle;INT PROCanzahldglmodelle:mb.anzahldglmodelleEND PROCanzahldglmodelle;BOOL PROCmodellbankvoll:(mb.anzahldglmodelle+anzahlwdmodelle)>=maxmodelleEND PROCmodellbankvoll;BOOL PROCmodellbankvolldgl:mb.anzahldglmodelle>=maxdglmodelleEND PROCmodellbankvolldgl;BOOL PROCmodellbankvollwd:anzahlwdmodelle>=maxwdmodelleEND PROCmodellbankvollwd;PROCfuegeein(TEXT CONSTmodellbank):INT VARreturncode;fuegeein(modellbank,returncode)END PROCfuegeein;PROCwdeinfuegen(TEXT CONSTmodellbank,TEXT CONSTlangname,kurzname):INT VARneuerindex:=0;THESAURUS VARt1:=mb.wdmodelle,t2:=mb.wddsnamen;disablestop;insert(mb.wdmodelle,langname,neuerindex);insert(mb.wddsnamen,modellbank+sp+text(neuerindex+maxdglmodelle)+sp+wdsuffix);diagrammnameneintragen(langname,kurzname);forget(name(mb.wddsnamen,neuerindex),quiet);aenderungenspeichern(name(mb.wddsnamen,neuerindex));IFiserrorTHENkonsistenzherstellenFI;.konsistenzherstellen:forget(name(mb.wddsnamen,neuerindex),quiet);mb.wdmodelle:=t1;mb.wddsnamen:=t2.END PROCwdeinfuegen;PROCwdumbenennen(TEXT CONSTlangname,kurzname,INT CONSTmodellnr):THESAURUS VARt:=mb.wdmodelle;disablestop;diagrammnameneintragen(langname,kurzname);rename(mb.wdmodelle,modellnr,langname);IFiserrorTHENclearerror;konsistenzherstellenFI;enablestop;.konsistenzherstellen:mb.wdmodelle:=t.END PROCwdumbenennen;PROCfuegeein(TEXT CONSTmodellbank,INT VARreturncode):INT VARneuesmodell;returncode:=1;BOOL VARmodellabgelegt:=FALSE;IF NOTmodellbankvolldglTHENmb.anzahldglmodelleINCR1;neuesmodell:=mb.anzahldglmodelle;nilmodell(mb.modelle(neuesmodell));bildedsnamenneu(mb.modelle(neuesmodell),modellbank,neuesmodell);loescheleereds;initgleichungsds;disablestop;modellerfassung(neuesmodell,modellbank,modellabgelegt);IFiserrorTHENclearerror;enablestop;loesche(neuesmodell,modellbank);errorstop(errormessage);ELIFlength(compress(mb.modelle(neuesmodell).name.lang))=0THENloesche(neuesmodell,modellbank);ELSE IFmodellabgelegtTHENreturncode:=0;FI;enablestop;FI FI.loescheleereds:forget(mb.modelle(neuesmodell).codeundinfo,quiet);forget(mb.modelle(neuesmodell).demolauf.original.kurve,quiet);forget(mb.modelle(neuesmodell).demolauf.vergleich.kurve,quiet);.initgleichungsds:textdaten:=new(mb.modelle(
+neuesmodell).codeundinfo);type(old(mb.modelle(neuesmodell).codeundinfo),typnrmodell);textdaten.info(1):=endezeichen;textdaten.gleichungen(1):=endezeichen;textdaten.cogleichungen(1):=endezeichen;textdaten.darstellungscode(1):=endezeichen;.END PROCfuegeein;PROCcopy(INT CONSTaltesmodell,TEXT CONSTmodellbank):INT VARreturncode;copy(altesmodell,modellbank,returncode);END PROCcopy;PROCcopy(INT CONSTaltesmodell,TEXT CONSTmodellbank,INT VARreturncode):INT VARneuesmodell;returncode:=1;IF NOTmodellbankvolldglTHENmb.anzahldglmodelleINCR1;neuesmodell:=mb.anzahldglmodelle;mb.modelle(neuesmodell):=mb.modelle(altesmodell);bildedsnamenneu(mb.modelle(neuesmodell),modellbank,neuesmodell);IF(mb.modelle(altesmodell).codeundinfo)<>(mb.modelle(neuesmodell).codeundinfo)THENforget(mb.modelle(neuesmodell).codeundinfo,quiet);IFexists(mb.modelle(altesmodell).codeundinfo)THENcopy(mb.modelle(altesmodell).codeundinfo,mb.modelle(neuesmodell).codeundinfo);FI;disablestop;modellerfassung(neuesmodell,modellbank);IFiserrorTHENclearerror;enablestop;loesche(neuesmodell,modellbank);errorstop(errormessage);ELIFlength(compress(mb.modelle(neuesmodell).name.lang))=0CORmb.modelle(neuesmodell).name.lang=mb.modelle(altesmodell).name.langTHENloesche(neuesmodell,modellbank);ELSEreturncode:=0;FI;enablestop;FI;FI;END PROCcopy;THESAURUS PROCwdmodelle:mb.wdmodelleEND PROCwdmodelle;THESAURUS PROCwddsnamen:mb.wddsnamenEND PROCwddsnamen;INT PROCanzahlwdmodelle:INT VARi:=0,anzahl:=0;TEXT VARwdname:="";WHILEi<highestentry(mb.wdmodelle)REPget(mb.wdmodelle,wdname,i);IFwdname<>""THENanzahlINCR1FI PER;anzahlEND PROCanzahlwdmodelle;INT PROCanzahlausfuehrbarerwdmodelle:INT VARi:=0,anzahl:=0;TEXT VARwdname:="";WHILEi<highestentry(mb.wddsnamen)REPget(mb.wddsnamen,wdname,i);IFwdname<>""CANDausfuehrbarTHENanzahlINCR1FI PER;anzahl.ausfuehrbar:type(old(wdname))=typnrwdausfuehrbar.END PROCanzahlausfuehrbarerwdmodelle;DATASPACE VARfeldds,glzeileds,eingabeparameternameds;BOUND ROW100TEXT VARfeld;BOUND ROWmaxzeileneingabeZEILE VARglzeile;BOUND ROWmaxzeileneingabeTEXT VAReingabeparametername;TEXTDATEN VARgleichungsraum;TAG VARzweiteseite;INT VARzeilenzaehler,cursorfeld,pmerker,zmerker,anzahlparameter,gleichungsanzahl,egleichungsanzahl,dgleichungsanzahl;TEXT VARfehlertext,fehlermeldung,taste;INT CONSTseite1:=18,seite2:=2,infowahllang:=3,steuerzseite2:=4,steuerzseite3:=5,infoseite:=6,teilfeld:=7,infowahlkurz:=8;PROCmodellerfassung(INT VARmodellnr,TEXT CONSTmodellbank):enablestop;BOOL VARmodellabgelegt:=FALSE;modellerfassung(modellnr,modellbank,modellabgelegt);END PROCmodellerfassung;PROCmodellerfassung(INT VARmodellnr,TEXT CONSTmodellbank,BOOL VARmodellabgelegt):enablestop;MODELLDGL VARvorabmodell:=mb.modelle(modellnr);ZEILE VARzeilenmerker;INT VARfeldart,altefeldart;TEXT VARfeldmerker,modellcodeinfo,infotext,infos,lang:="",kurz:="",meldungsmerker;BOOL VARfalscheeingaben:=FALSE,tastenfehleralsletztes:=FALSE,explizitgespeichertaufseitezwei:=FALSE,explizitgespeichert:=FALSE;modellabgelegt:=FALSE;forget(feldds);feldds:=nilspace;feld:=feldds;fehlertext:="";initialisierungenfuermodelldatenerfassung;allefelderfreigeben;REPkernvonmodellerfassungPER.kernvonmodellerfassung:maskezurmodellinitialisierungausgeben(vorabmodell.name.lang,vorabmodell.name.kurz);REPexplizitgespeichert:=FALSE;putgetformular1(feld,cursorfeld,taste);IFtaste=abbruchtastemenuTHEN IFabspeicherngewuenschtTHENeingabendeserstenformularspruefen(lang,kurz,modellnr,falscheeingaben);IF NOTfalscheeingabenTHENvorabmodell.name.lang:=lang;vorabmodell.name.kurz:=kurz;vorabmodell.name.elan:=elan(kurz);speichereaufseiteeins;leavemodellerfassungFI;ELSEleavemodellerfassungFI ELIFtaste=auskunftstasteTHENinfotext:=auskunftseite1;fehlermeldung:="";auskunftsdienst(infotext,fehlermeldung,auskunftsloeschtaste1);show(formular(seite1));cursorfeld:=2;feld(1):=leeresfeld;footnote(steuerleiste(stmenuoderweiter));ELIFtaste=weitertasteTHENeingabendeserstenformularspruefen(lang,kurz,modellnr,falscheeingaben);IF NOTfalscheeingabenTHENvorabmodell.name.lang:=lang;
+vorabmodell.name.kurz:=kurz;vorabmodell.name.elan:=elan(kurz);modelldatenerfassungFI ELSEfeld(1):=meldungstext(fehlertaste)FI;PER.speichereaufseiteeins:mb.modelle(modellnr):=vorabmodell;modellabgelegt:=TRUE;.leavemodellerfassung:forget(feldds);forget(glzeileds);forget(eingabeparameternameds);LEAVEmodellerfassung.modelldatenerfassung:REPkernvonmodelldatenerfassungPER.initialisierungenfuermodelldatenerfassung:forget(glzeileds);forget(eingabeparameternameds);glzeileds:=nilspace;eingabeparameternameds:=nilspace;glzeile:=glzeileds;eingabeparametername:=eingabeparameternameds;zweiteseite:=formular(seite2);bildedsnamenneu(vorabmodell,modellbank,modellnr);modellcodeinfo:=vorabmodell.codeundinfo;zwischenspeichermitmodelldatenfuellen(vorabmodell);.kernvonmodelldatenerfassung:maskezurmodelldatenerfassungausgeben(infos);meldungsmerker:=meldungstext(mldcursorbenutzung);tastenfehleralsletztes:=FALSE;explizitgespeichertaufseitezwei:=FALSE;REPexplizitgespeichert:=FALSE;vorabmodell.modellzustand:=notuebersetzbar;put(formular(teilfeld),infos,2);IFtastenfehleralsletztesTHENtastenfehleralsletztes:=FALSE;ELSEfeld(1):=meldungsmerker;FI;putget(zweiteseite,feld,cursorfeld,taste);feld(1):=meldungstext(mldcursorbenutzung);IFtaste=abbruchtasteTHEN IFabspeicherngewuenschtTHENspeichereaufseitezweiFI;leavemodellerfassungELIFtaste=blaettertasteTHENnaechsteseitezeigen;ELIFtaste=dupliziertasteTHENzeilebzwfeldkopierenELIFtaste=loeschtasteTHENzeilebzwfeldmerkenundloeschenELIFtaste=wiedergabetasteTHENspeicherinhaltaufaktuellepositionuebertragenELIFtaste=auskunftstasteTHENinfotextauswahl(fehlertext,fehlermeldung);show(zweiteseite);show(formular(teilfeld));show(formular(steuerzseite2));cursorfeld:=2;infos:=auskunftstext(code(auskeingabebeispiel))ELIFtaste=speichertasteTHENfeld(1):=anwendungstext(btwartenwaehrendspeichern);put(zweiteseite,feld(1),1);speichereaufseitezwei;explizitgespeichertaufseitezwei:=TRUE;ELIFtaste=drucktasteTHENfeld(1):=anwendungstext(btwartenwaehrenddrucken);put(zweiteseite,feld(1),1);druckeinfotextaufseitezwei;ELIFtaste=prueftasteTHENfeld(1):=auskunftstext(auskpruefung);put(zweiteseite,feld(1),1);eingabenzwischenspeichern;eingabendeszweitenformularsordnen;eingabendeszweitenformularspruefen(falscheeingaben);IF NOTfalscheeingabenTHENinfos:=auskunftstext(code(auskdatenkorrekt));weiterebearbeitungdesmodellsELIFfehlertext=""THENinfos:=auskunftstext(code(auskkeinegleichungen));ELSEinfos:=auskunftstext(code(auskfehlerfestgestellt))FI;meldungsmerker:=feld(1);ELSEfeld(1):=meldungstext(fehlertaste);tastenfehleralsletztes:=TRUE;FI PER.speichereaufseitezwei:eingabenzwischenspeichern;eingabendeszweitenformularsordnen;gleichungenundparameterzaehlen(falscheeingaben);forget(vorabmodell.codeundinfo,quiet);bildedsnamenneu(vorabmodell,modellbank,modellnr);modellmitdatenfuellen(vorabmodell);infotextablegen(vorabmodell);mb.modelle(modellnr):=vorabmodell;modellabgelegt:=TRUE.druckeinfotextaufseitezwei:eingabenzwischenspeichern;eingabendeszweitenformularsordnen;gleichungenundparameterzaehlen(falscheeingaben);forget(vorabmodell.codeundinfo,quiet);bildedsnamenneu(vorabmodell,modellbank,modellnr);modellmitdatenfuellen(vorabmodell);infodateiausdrucken(vorabmodell,modellbank);.naechsteseitezeigen:cursorfeld:=2;IFzeilenzaehler=endeseite1THENzwischenspeichern(beginnseite1,endeseite1);formularfuellen(beginnseite2,endeseite2);ELSEzwischenspeichern(beginnseite2,endeseite2);formularfuellen(beginnseite1,endeseite1)FI.zeilebzwfeldkopieren:altefeldart:=cursorfeldMOD4;IFaltefeldart=2THENzeilenmerkerfuellenELSEfeldmerker:=feld(cursorfeld)FI.zeilenmerkerfuellen:zeilenmerker.gleichungsart:=feld(cursorfeld);zeilenmerker.gleichung:=feld(cursorfeld+1);zeilenmerker.variable:=feld(cursorfeld+2).zeilebzwfeldmerkenundloeschen:altefeldart:=cursorfeldMOD4;IFaltefeldart=2THENzeilenmerkerfuellen;feld(cursorfeld):="_";feld(cursorfeld+1):=gleichungsunterstriche;feld(cursorfeld+2):=variablenunterstriche;ELSEfeldmerker:=feld(cursorfeld);IFaltefeldart=3THENfeld(cursorfeld):=gleichungsunterstriche
+ELIFaltefeldart=0THENfeld(cursorfeld):=variablenunterstricheELSEfeld(cursorfeld):=parameterunterstricheFI FI.speicherinhaltaufaktuellepositionuebertragen:feldart:=cursorfeldMOD4;IFaltefeldart=feldartTHEN IFfeldart=2THENfeld(cursorfeld):=zeilenmerker.gleichungsart;feld(cursorfeld+1):=zeilenmerker.gleichung;feld(cursorfeld+2):=zeilenmerker.variableELSEfeld(cursorfeld):=feldmerkerFI ELSEfeld(1):=meldungstext(fehlerkopierposition);tastenfehleralsletztes:=TRUE;FI.eingabenzwischenspeichern:IFzeilenzaehler=endeseite1THENzwischenspeichern(beginnseite1,endeseite1)ELSEzwischenspeichern(beginnseite2,endeseite2)FI.weiterebearbeitungdesmodells:REPkernvonweiterebearbeitungdesmodellsPER.kernvonweiterebearbeitungdesmodells:put(zweiteseite,feld);vorabmodell.modellzustand:=uebersetzbar;put(formular(teilfeld),infos,2);show(formular(steuerzseite3));REPfeld(1):=leeresfeld;cursor(77,23);warteaufesc;tasteeinlesen(taste);IFtaste=zuruecktasteTHENallefelderfreigeben;cursorfeld:=2;show(formular(steuerzseite2));infos:=auskunftstext(code(auskeingabebeispiel));feld(1):=meldungstext(mldcursorbenutzung);leaveweiterebearbeitungdesmodellsELIFtaste=speichertasteTHENspeichereaufseitedrei;feld(1):=auskunftstext(auskgespeichert);put(zweiteseite,feld(1),1);explizitgespeichert:=TRUE;ELIFtaste=abbruchtasteTHEN IF NOTexplizitgespeichertCANDabspeicherngewuenschtTHENspeichereaufseitedreiFI;leavemodellerfassungELIFtaste=simulationstasteTHENfuehreggfdiesimulationaus;ELIFtaste=drucktasteTHENinfodateiausdrucken(vorabmodell,modellbank);put(zweiteseite,feld(1),1)ELSEfeld(1):=meldungstext(fehlertaste);put(zweiteseite,feld(1),1)FI PER.speichereaufseitedrei:vorabmodell.codeundinfo:=modellcodeinfo;forget(vorabmodell.codeundinfo,quiet);modellmitdatenfuellen(vorabmodell);infotextablegen(vorabmodell);mb.modelle(modellnr):=vorabmodell;modellabgelegt:=TRUE;.leaveweiterebearbeitungdesmodells:LEAVEweiterebearbeitungdesmodells.reenterweiterebearbeitungdesmodells:show(zweiteseite);LEAVEkernvonweiterebearbeitungdesmodells.fuehreggfdiesimulationaus:feld(1):=anwendungstext(btwartenallgemein);put(zweiteseite,feld(1),1);simulieremitdglmodell;IFokTHENfeld(1):="";put(zweiteseite,feld(1),1);reenterweiterebearbeitungdesmodellsELSEfeld(1):=anwendungstext(btsimulationunmoeglich);put(zweiteseite,feld(1),1)FI.ok:retcode=0.simulieremitdglmodell:DATASPACE VARdsp;BOUND INT VARkanalnummer;BOUND MODELLDGL VARaktmodell;INT VARretcode:=0;vorabmodell.codeundinfo:=modellbank+sp+"X"+sp+"hilfscode";forget(vorabmodell.codeundinfo,quiet);modellmitdatenfuellen(vorabmodell);vorabmodell.modellzustand:=uebersetzbar;infotextablegen(vorabmodell);kopplean(vorabmodell);REPmodellbearbeiten;UNTILordnungsgemaessbeendetodertasknichtempfangsbereitPER;forget(vorabmodell.codeundinfo,quiet);enablestop;.ordnungsgemaessbeendetodertasknichtempfangsbereit:retcode<>simulationneustarten.modellbearbeiten:IFretcode=simulationneustartenTHENshow(zweiteseite);feld(1):=anwendungstext(btwartenallgemein);put(zweiteseite,feld(1),1);FI;retcode:=0;schickemodelldaten;IFokTHENschickegleichungen;IFokTHENstartesimulationFI FI;continue(geraetekanal);.schickemodelldaten:dsp:=nilspace;aktmodell:=dsp;aktmodell:=vorabmodell;schickeanmanagertask(dsp,2,retcode);.schickegleichungen:IFexists(modelldatenraum)THENdsp:=old(modelldatenraum);schickeanmanagertask(dsp,5,retcode);ELSEretcode:=99;FI.startesimulation:break(quiet);dsp:=nilspace;schickeanmanagertask(dsp,6,retcode);.abspeicherngewuenscht:IFvorabmodell.modellzustand=notuebersetzbarTHEN IFexplizitgespeichertaufseitezweiTHENput(formular(seite2),meldungstext(fragenochmalspeichern),1);cursor(51,21);ELSEput(formular(seite2),meldungstext(mldnichtablauffaehig),1);cursor(63,21);FI;yes(" ")ELSEput(formular(seite2),"",1);cursor(spalte3,20);yes(compress(meldungstext(fragehierabspeichern)))FI.ENDPROCmodellerfassung;PROCschickeanmanagertask(DATASPACE VARdatenraum,INT CONSTverarbeitung,INT VARmesscode):INT CONSTeingabevomkanal:=-4;TASK VARmanagertask:=/terminaltaskname,kontrolltask:=/terminaltaskname;REPmanagertask:=
+kontrolltask;send(managertask,verarbeitung,datenraum,messcode);forget(datenraum);IFmesscode<>existiertnichtCANDmesscode<>nichtempfangsbereitTHENwarteaufquittungELSE LEAVEschickeanmanagertaskFI PER.warteaufquittung:managertask:=/terminaltaskname;wait(datenraum,messcode,managertask);forget(datenraum);IFquerschlaegersendungTHEN IFcontinueversuchTHEN LEAVEschickeanmanagertask;ELSE IFmesscode=eingabevomkanalTHEN REP UNTILincharety=""PER;forget(datenraum);FI;FI ELSE LEAVEschickeanmanagertask;FI.querschlaegersendung:NOT(managertask=kontrolltask).continueversuch:managertask=supervisorAND((task(messcodeMOD100)=niltask)OR(task(messcodeMOD100)=myself))END PROCschickeanmanagertask;PROCzwischenspeichermitmodelldatenfuellen(MODELLDGL VARzwmodell):INT VARi;IFexists(zwmodell.codeundinfo)THENgleichungsraum:=old(zwmodell.codeundinfo);FORiFROM1UPTOzwmodell.variablen.anzahlREPglzeile(i).gleichungsart:="d";glzeile(i).variable:=zwmodell.variablen.namelang(i);glzeile(i).gleichung:=gleichungsraum.gleichungen(i)PER;FORiFROMzwmodell.variablen.anzahl+1UPTOzwmodell.variablen.anzahl+zwmodell.covariablen.anzahlREPglzeile(i).gleichungsart:="e";glzeile(i).variable:=zwmodell.covariablen.namelang(i-zwmodell.variablen.anzahl);glzeile(i).gleichung:=gleichungsraum.cogleichungen(i-zwmodell.variablen.anzahl)PER;FORiFROMzwmodell.variablen.anzahl+zwmodell.covariablen.anzahl+1UPTOmaxzeileneingabeREPglzeile(i).gleichungsart:="_";glzeile(i).gleichung:="";glzeile(i).variable:=""PER;FORiFROM1UPTOzwmodell.parameter.anzahlREPeingabeparametername(i):=zwmodell.parameter.namelang(i)PER;FORiFROMzwmodell.parameter.anzahl+1UPTOmaxzeileneingabeREPeingabeparametername(i):=""PER ELSE FORiFROM1UPTOmaxzeileneingabeREPglzeile(i).gleichungsart:="_";glzeile(i).variable:="";glzeile(i).gleichung:="";eingabeparametername(i):=""PER FI.END PROCzwischenspeichermitmodelldatenfuellen;PROCallefelderfreigeben:INT VARfeldzaehler;FORfeldzaehlerFROM2UPTO4*bildschirmzeilenREPprotect(zweiteseite,feldzaehler,FALSE)PER.END PROCallefelderfreigeben;PROCmaskezurmodellinitialisierungausgeben(TEXT CONSTlang,kurz):show(formular(seite1));footnote(steuerleiste(stmenuoderweiter));cursorfeld:=2;feld(1):=leeresfeld;feld(2):=lang+(maxmodellnamelang-length(lang))*"_";feld(3):=kurz+(maxmodellnamekurz-length(kurz))*"_";feld(4):="";feld(5):="";.END PROCmaskezurmodellinitialisierungausgeben;PROCeingabendeserstenformularspruefen(TEXT VARlang,kurz,INT CONSTmodellinbearbeitung,BOOL VARfalscheeingaben):INT VARi;ROW5TEXT VARhilfsfeld;feld(1):=leeresfeld;put(formular(seite1),feld(1),1);langnamenpruefen;aufnamensgleichheitpruefen;kurznamenpruefen;eingabenablegen;falscheeingaben:=FALSE.verlasseeingabendeserstenformularspruefen:falscheeingaben:=TRUE;LEAVEeingabendeserstenformularspruefen.langnamenpruefen:hilfsfeld(2):=feld(2);hilfsfeld(2):=komprimiere(hilfsfeld(2));IFlength(hilfsfeld(2))=0THENfeld(1):=meldungstext(fehlerlangnamefehlt);cursorfeld:=2;verlasseeingabendeserstenformularspruefenELIFlength(hilfsfeld(2))>maxmodellnamelangTHENfeld(1):=meldungstext(fehlerlangname);cursorfeld:=2;verlasseeingabendeserstenformularspruefenFI.kurznamenpruefen:hilfsfeld(3):=feld(3);hilfsfeld(3):=komprimiere(hilfsfeld(3));IFlength(hilfsfeld(3))=0THENfeld(1):=meldungstext(fehlerkurznamefehlt);cursorfeld:=3;verlasseeingabendeserstenformularspruefenELIFlength(hilfsfeld(3))>maxmodellnamekurzTHENfeld(1):=meldungstext(fehlerkurzname);cursorfeld:=3;verlasseeingabendeserstenformularspruefenFI.aufnamensgleichheitpruefen:FORiFROM1UPTOmb.anzahldglmodelleREP IFi<>modellinbearbeitungCANDhilfsfeld(2)=mb.modelle(i).name.langTHENfeld(1):=meldungstext(fehlermodellnamedoppelt);cursorfeld:=2;verlasseeingabendeserstenformularspruefenFI;PER;.eingabenablegen:lang:=hilfsfeld(2);kurz:=hilfsfeld(3).END PROCeingabendeserstenformularspruefen;PROCmaskezurmodelldatenerfassungausgeben(TEXT VARinformation):show(zweiteseite);show(formular(steuerzseite2));cursorfeld:=2;formularfuellen(beginnseite1,endeseite1);information:=auskunftstext(code(auskeingabebeispiel)).END PROC
+maskezurmodelldatenerfassungausgeben;PROCformularfuellen(INT CONSTseitenbeginn,seitenende):INT VARfeldzaehler;feldzaehlerauferstesfeldsetzen;FORzeilenzaehlerFROMseitenbeginnUPTOseitenendeREPformularzeilefuellenPER;zeilenzaehler:=seitenende.feldzaehlerauferstesfeldsetzen:feldzaehler:=ersteseingabefeld.formularzeilefuellen:feld(feldzaehler):="_";replace(feld(feldzaehler),1,glzeile(zeilenzaehler).gleichungsart);feldzaehlerINCR1;feld(feldzaehler):=gleichungsunterstriche;IFlength(glzeile(zeilenzaehler).gleichung)>length(gleichungsunterstriche)THENfeld(feldzaehler):=glzeile(zeilenzaehler).gleichungELSEreplace(feld(feldzaehler),1,glzeile(zeilenzaehler).gleichung);FI;feldzaehlerINCR1;feld(feldzaehler):=variablenunterstriche;replace(feld(feldzaehler),1,glzeile(zeilenzaehler).variable);feldzaehlerINCR1;feld(feldzaehler):=parameterunterstriche;replace(feld(feldzaehler),1,eingabeparametername(zeilenzaehler));feldzaehlerINCR1.END PROCformularfuellen;PROCzwischenspeichern(INT CONSTseitenbeginn,seitenende):INT VARfeldzaehler;feldzaehlerauferstesfeldsetzen;FORzeilenzaehlerFROMseitenbeginnUPTOseitenendeREPzwischenspeicherfuellenPER;zeilenzaehler:=seitenende.feldzaehlerauferstesfeldsetzen:feldzaehler:=ersteseingabefeld.zwischenspeicherfuellen:glzeile(zeilenzaehler).gleichungsart:=subtext(feld(feldzaehler),1,1);feldzaehlerINCR1;glzeile(zeilenzaehler).gleichung:=feld(feldzaehler);glzeile(zeilenzaehler).gleichung:=komprimiere(glzeile(zeilenzaehler).gleichung);ohneumlauteundeszet(glzeile(zeilenzaehler).gleichung);IFlength(glzeile(zeilenzaehler).gleichung)>0CANDsubtext(glzeile(zeilenzaehler).gleichung,length(glzeile(zeilenzaehler).gleichung))<>";"THENglzeile(zeilenzaehler).gleichungCAT";"FI;feldzaehlerINCR1;glzeile(zeilenzaehler).variable:=feld(feldzaehler);glzeile(zeilenzaehler).variable:=komprimiere(glzeile(zeilenzaehler).variable);ohneumlauteundeszet(glzeile(zeilenzaehler).variable);feldzaehlerINCR1;eingabeparametername(zeilenzaehler):=feld(feldzaehler);eingabeparametername(zeilenzaehler):=komprimiere(eingabeparametername(zeilenzaehler));ohneumlauteundeszet(eingabeparametername(zeilenzaehler));feldzaehlerINCR1;END PROCzwischenspeichern;PROCeingabendeszweitenformularsordnen:INT VARi,zzaehler;FORzzaehlerFROM1UPTOmaxzeileneingabeREPohneumlauteundeszet(glzeile(zzaehler).variable);glzeile(zzaehler).nummer:=zzaehlerPER;zmerkerundpmerkerbestimmen;glzeilenordnen(1,zmerker);parameterordnen;formularfuellen(beginnseite1,endeseite1).zmerkerundpmerkerbestimmen:i:=maxzeileneingabe+1;REPiDECR1;zmerker:=iUNTILi=0CORzeilenichtleerPER;i:=maxzeileneingabe+1;REPiDECR1;pmerker:=iUNTILi=0CORlength(eingabeparametername(i))>0PER.zeilenichtleer:NOT(length(glzeile(i).gleichungsart)=0CANDlength(glzeile(i).gleichung)=0CANDlength(glzeile(i).variable)=0).END PROCeingabendeszweitenformularsordnen;PROCglzeilenordnen(INT CONSTanfang,ende):INT VARpivotadresse,zeigeroben,zeigerunten,adrgroesserpivot,adrkleinerpivot;ZEILE VARpivotzeile;IFanfang<endeTHENermittlepivotelement;initialisiereoberenundunterenvergleichszeiger;ordnedieelementemithilfevonpivot;sortiereteillistenwennsiemehralseinelemententhaltenFI.ermittlepivotelement:pivotadresse:=(ende+anfang)DIV2;pivotzeile:=glzeile(pivotadresse).initialisiereoberenundunterenvergleichszeiger:zeigeroben:=anfang;zeigerunten:=ende.ordnedieelementemithilfevonpivot:glzeile(pivotadresse):=glzeile(anfang);WHILEzeigeroben<zeigeruntenREPsuchevonobenechtgroesserpivot;suchevonuntenkleinergleichpivotwennnoetigPER.suchevonobenechtgroesserpivot:adrgroesserpivot:=zeigeroben+1;WHILEadrgroesserpivot<=zeigeruntenCANDprioritaet(pivotzeile)>=prioritaet(glzeile(adrgroesserpivot))REPadrgroesserpivotINCR1PER.suchevonuntenkleinergleichpivotwennnoetig:IFadrgroesserpivot>zeigeruntenTHENmacheletztenplatzfreiundsetzepivotdahin;zeigeroben:=zeigeruntenELSEsuchevonuntenelementkleinergleichpivotundvertauscheesmitdemgroesserenFI.macheletztenplatzfreiundsetzepivotdahin:glzeile(zeigeroben):=glzeile(zeigerunten);glzeile(zeigerunten):=pivotzeile.
+suchevonuntenelementkleinergleichpivotundvertauscheesmitdemgroesseren:adrkleinerpivot:=zeigerunten;WHILEadrkleinerpivot>=adrgroesserpivotCANDprioritaet(glzeile(adrkleinerpivot))>prioritaet(pivotzeile)REPadrkleinerpivotDECR1PER;IFadrkleinerpivot<adrgroesserpivotTHENbringepivotoberhalbvonadrgroesserpivotunterELSEglzeile(zeigeroben):=glzeile(adrkleinerpivot);glzeile(adrkleinerpivot):=glzeile(adrgroesserpivot);glzeile(adrgroesserpivot):=pivotzeile;zeigeroben:=adrgroesserpivot;zeigerunten:=adrkleinerpivot-1FI.bringepivotoberhalbvonadrgroesserpivotunter:glzeile(zeigeroben):=glzeile(adrgroesserpivot-1);glzeile(adrgroesserpivot-1):=pivotzeile;zeigeroben:=adrgroesserpivot-1;zeigerunten:=zeigeroben.sortiereteillistenwennsiemehralseinelemententhalten:IFende-anfang>1THENpruefeobsortierbereichveraendert;glzeilenordnen(anfang,zeigeroben);glzeilenordnen(zeigeroben+1,ende)FI.pruefeobsortierbereichveraendert:IFzeigeroben=endeTHENzeigeroben:=zeigeroben-1FI.END PROCglzeilenordnen;INT PROCprioritaet(ZEILE CONSTgleichungszeile):INT VARnummer:=gleichungszeile.nummer;TEXT VARart:=gleichungszeile.gleichungsart;IFart=" "THENchange(art," ","_")FI;IFart="d"THENnummerELIFart="e"THENnummer+maxzeileneingabeELIFart<>"_"THENnummer+(2*maxzeileneingabe)ELIFleeresgleichungsfeldCANDleeresvariablenfeldTHENnummer+(4*maxzeileneingabe)ELSEnummer+(3*maxzeileneingabe)FI.leeresgleichungsfeld:length(gleichungszeile.gleichung)=0.leeresvariablenfeld:length(gleichungszeile.variable)=0.END PROCprioritaet;PROCparameterordnen:ROWmaxzeileneingabeTEXT VARsortierhilfe;INT VARzzaehler,leerzeilenmerker:=0;FORzzaehlerFROM1UPTOpmerkerREPohneumlauteundeszet(eingabeparametername(zzaehler));parametersortierenPER;FORzzaehlerFROM(pmerker-leerzeilenmerker)+1UPTOpmerkerREPsortierhilfe(zzaehler):="";PER;FORzzaehlerFROM1UPTOpmerkerREPeingabeparametername(zzaehler):=sortierhilfe(zzaehler)PER.parametersortieren:IFlength(eingabeparametername(zzaehler))>0THENsortierhilfe(zzaehler-leerzeilenmerker):=eingabeparametername(zzaehler)ELSEleerzeilenmerkerINCR1FI.END PROCparameterordnen;PROCgleichungenundparameterzaehlen(BOOL VARfalscheeingaben):INT VARi:=1;WHILEi<=maxzeileneingabeCANDglzeile(i).gleichungsart="d"REPiINCR1PER;dgleichungsanzahl:=i-1;WHILEi<=maxzeileneingabeCANDglzeile(i).gleichungsart="e"REPiINCR1PER;egleichungsanzahl:=i-dgleichungsanzahl-1;gleichungsanzahl:=i-1;i:=1;WHILEi<=maxzeileneingabeCANDlength(eingabeparametername(i))>0REPiINCR1PER;anzahlparameter:=i-1;IFgleichungsanzahl=0THENfeld(1):=meldungstext(mldcursorbenutzung);fehlertext:="";falscheeingaben:=TRUE FI.END PROCgleichungenundparameterzaehlen;PROCeingabendeszweitenformularspruefen(BOOL VARfalscheeingaben):INT VARzzaehler,i,pruefling,fehlerfeldvariable,feldzaehler;TEXT VARprozeduranfangd,deklarationend,prozedurended,prozeduranfange,deklarationene,prozedurendee,procd,proce,prozedurd,prozedure;BOOL VARdoppeltdeklariert:=FALSE,vorherigefelderleer:=FALSE;falscheeingaben:=FALSE;FORzzaehlerFROM1UPTOmaxzeileneingabeREPgleichungsartpruefen;gleichungpruefen;variablepruefen;parameterpruefenPER;gleichungenundparameterzaehlen(falscheeingaben);IFfalscheeingabenTHENfehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);verlasseeingabendeszweitenformularspruefenFI;variableundparametereinzelnaufuebersetzbarkeitpruefen;doppeltdeklariert:=FALSE;aufdoppeldeklarationenpruefen(doppeltdeklariert);IFdoppeltdeklariertTHEN IFcursorfeld>41THENcursorfeldDECR40;formularfuellen(beginnseite2,endeseite2)FI;fehlertext:=ausklabeldoppelt;fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);verlasseeingabendeszweitenformularspruefenFI;gleichungenpruefen;fehlertext:="";fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);feld(1):=leeresfeld;put(zweiteseite,feld(1),1);allefeldersperren.cursorpositionierenundggfformularfuellen:IFzzaehler>endeseite1THENcursorfeld:=(zzaehler-endeseite1)*4+fehlerfeldvariable;formularfuellen(beginnseite2,endeseite2)ELSEcursorfeld:=(zzaehler*4)+fehlerfeldvariable;FI;verlasseeingabendeszweitenformularspruefen.
+verlasseeingabendeszweitenformularspruefen:falscheeingaben:=TRUE;LEAVEeingabendeszweitenformularspruefen.gleichungsartpruefen:IFglzeile(zzaehler).gleichungsart=""THENglzeile(zzaehler).gleichungsart:="_"FI;IFpos("de_",glzeile(zzaehler).gleichungsart)=0THENfehlerfeldvariable:=-2;fehlertext:=auskgleichungunvollstaendig;feld(1):=meldungstext(fehlergleichungsart);fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenELSEvorherigefelderleer:=(glzeile(zzaehler).gleichungsart="_")FI.gleichungpruefen:IFlength(glzeile(zzaehler).gleichung)=0CAND NOTvorherigefelderleerTHENfehlerfeldvariable:=-1;fehlertext:=auskgleichungunvollstaendig;feld(1):=meldungstext(fehlergleichungfehlt);fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenELIFlength(glzeile(zzaehler).gleichung)>0CANDvorherigefelderleerTHENfehlerfeldvariable:=-2;fehlertext:=auskgleichungunvollstaendig;feld(1):=meldungstext(fehlergleichungsartfehlt);fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenFI.variablepruefen:IFvorherigefelderleerTHEN IFlength(glzeile(zzaehler).variable)>0THENfehlerfeldvariable:=0;fehlertext:=auskgleichungunvollstaendig;feld(1):=meldungstext(fehlervariable);fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenFI ELIFlength(glzeile(zzaehler).variable)=0THENfehlerfeldvariable:=0;fehlertext:=auskgleichungunvollstaendig;feld(1):=meldungstext(fehlervariablefehlt);fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenELIFlength(glzeile(zzaehler).variable)>maxvariablenlaengeTHENfehlerfeldvariable:=0;fehlertext:=ausklabelzulang;feld(1):=meldungstext(fehlervariablezulang);fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenFI.parameterpruefen:IFlength(eingabeparametername(zzaehler))>maxparlaengeTHENfehlerfeldvariable:=1;fehlertext:=ausklabelzulang;feld(1):=meldungstext(fehlerparameterzulang);fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenFI.variableundparametereinzelnaufuebersetzbarkeitpruefen:allevariableneinzelnaufuebersetzbarkeitpruefen;alleparametereinzelnaufuebersetzbarkeitpruefen.allevariableneinzelnaufuebersetzbarkeitpruefen:FORiFROM1UPTOgleichungsanzahlREP IFnichtuebersetzbar("REAL VAR"+elan(glzeile(i).variable)+";")THENzzaehler:=i;fehlerfeldvariable:=0;fehlertext:=ausklabelzulang;feld(1):=errormessage;fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenFI PER.alleparametereinzelnaufuebersetzbarkeitpruefen:FORiFROM1UPTOanzahlparameterREP IFnichtuebersetzbar("REAL VAR"+elan(eingabeparametername(i))+";")THENzzaehler:=i;fehlerfeldvariable:=1;fehlertext:=ausklabelzulang;feld(1):=errormessage;fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenFI PER.gleichungenpruefen:IFdgleichungsanzahl>0THENprozeduranfangderzeugen;prozedurendederzeugen;alledgleichungeneinzelnpruefen;alledgleichungenzusammenpruefenFI;IFegleichungsanzahl>0THENprozeduranfangeerzeugen;prozedurendeeerzeugen;alleegleichungeneinzelnpruefen;alleegleichungenzusammenpruefenFI.prozeduranfangderzeugen:prozedurkopfderzeugen;deklarationenderzeugen.prozedurkopfderzeugen:prozeduranfangd:="PROC diff gleichungen:".prozedurendederzeugen:prozedurended:="END PROC diff gleichungen;".deklarationenderzeugen:deklarationend:="REAL CONST";FORiFROM1UPTOdgleichungsanzahlREPdeklarationendCAT(elan(glzeile(i).variable)+":= 0.0,")PER;FORiFROM1UPTOanzahlparameterREPdeklarationendCAT(elan(eingabeparametername(i))+":= 0.0,")PER;deklarationendCAT"zeit:= 0.0;";prozeduranfangdCATdeklarationend.alledgleichungeneinzelnpruefen:FORiFROM1UPTOdgleichungsanzahlREPprocd:="";procdCATprozeduranfangd;procdCAT("REAL VAR d"+elan(glzeile(i).variable)+";");procdCATglzeile(i).gleichung;procdCATprozedurended;IFnichtuebersetzbar(procd)THENzzaehler:=i;
+fehlerfeldvariable:=-1;fehlertext:=errorauswertung(errormessage);feld(1):=errormessage;fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenFI PER.alledgleichungenzusammenpruefen:prozedurd:="";prozedurdCATprozeduranfangd;prozedurdCAT("REAL VAR d"+elan(glzeile(1).variable));FORiFROM2UPTOdgleichungsanzahlREPprozedurdCAT(", d"+elan(glzeile(i).variable))PER;prozedurdCAT";";FORiFROM1UPTOdgleichungsanzahlREPprozedurdCATglzeile(i).gleichungPER;prozedurdCATprozedurended;IFlength(compress(prozedurd))<=maxinterpretlaengeCANDnichtuebersetzbar(prozedurd)THENfeld(1):=errormessage;fehlertext:=errorauswertung(errormessage);fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorfeld:=ersteseingabefeld;verlasseeingabendeszweitenformularspruefenFI.prozeduranfangeerzeugen:prozedurkopfeerzeugen;deklarationeneerzeugen.prozedurkopfeerzeugen:prozeduranfange:="PROC ergaenzungsgleichungen:".prozedurendeeerzeugen:prozedurendee:="END PROC ergaenzungsgleichungen;".deklarationeneerzeugen:deklarationene:="REAL CONST";FORiFROM1UPTOdgleichungsanzahlREPdeklarationeneCAT(elan(glzeile(i).variable)+":= 0.0,")PER;FORiFROM1UPTOanzahlparameterREPdeklarationeneCAT(elan(eingabeparametername(i))+":= 0.0,")PER;deklarationeneCAT("zeit:= 0.0;");prozeduranfangeCATdeklarationene.alleegleichungeneinzelnpruefen:FORprueflingFROMdgleichungsanzahl+1UPTOgleichungsanzahlREPproce:="";proceCATprozeduranfange;objektealskonstanten;proceCATglzeile(pruefling).gleichung;proceCATprozedurendee;IFnichtuebersetzbar(proce)THENzzaehler:=pruefling;fehlerfeldvariable:=-1;fehlertext:=errorauswertung(errormessage);feld(1):=errormessage;fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorpositionierenundggfformularfuellenFI PER.objektealskonstanten:proceCAT"REAL VAR"+elan(glzeile(pruefling).variable)+";";IFegleichungsanzahl>1THENproceCAT"REAL CONST";IFpruefling=dgleichungsanzahl+1THENi:=dgleichungsanzahl+2;ELSEi:=dgleichungsanzahl+1;FI;proceCAT(elan(glzeile(i).variable))+":= 0.0";iINCR1;WHILEi<=gleichungsanzahlREP IFi<>prueflingTHENproceCAT(","+elan(glzeile(i).variable))+":= 0.0"FI;iINCR1;PER;proceCAT";";FI;.alleegleichungenzusammenpruefen:prozedure:="";prozedureCATprozeduranfange;objektealsvariablen;FORiFROMdgleichungsanzahl+1UPTOgleichungsanzahlREPprozedureCATglzeile(i).gleichungPER;prozedureCATprozedurendee;IFlength(compress(prozedure))<=maxinterpretlaengeCANDnichtuebersetzbar(prozedure)THENfeld(1):=errormessage;fehlertext:=errorauswertung(errormessage);fehlermeldung:=auskunftstext(auskihrfehler)+" "+feld(1);cursorfeld:=ersteseingabefeld;verlasseeingabendeszweitenformularspruefenFI.objektealsvariablen:prozedureCAT"REAL VAR";prozedureCAT(elan(glzeile(dgleichungsanzahl+1).variable));FORiFROMdgleichungsanzahl+2UPTOgleichungsanzahlREPprozedureCAT(","+elan(glzeile(i).variable))PER;prozedureCAT";";.allefeldersperren:FORfeldzaehlerFROM2UPTO4*bildschirmzeilenREPprotect(zweiteseite,feldzaehler,TRUE)PER.END PROCeingabendeszweitenformularspruefen;PROCaufdoppeldeklarationenpruefen(BOOL VARdoppeltdeklariert):ROWmaxvarparaanzahlTEXT VARpruefung;INT VARzaehler,counter:=1,sortierende:=gleichungsanzahl+dgleichungsanzahl+anzahlparameter+1;zupruefenderowmitwertenfuellen;pruefung(sortierende):="00"+"z"+"zeit";quicksort(pruefung,1,sortierende);zaehler:=1;WHILEzaehler<sortierendeREP IFnameohneblanks(pruefung(zaehler))=nameohneblanks(pruefung(zaehler+1))THENcursoraufdiefalscheeingabepositionierenundfehlermelden;FI;zaehlerINCR1PER.zupruefenderowmitwertenfuellen:FORzaehlerFROM1UPTOgleichungsanzahlREPpruefung(zaehler):=zweistelligezahl(counter)+"v"+elan(glzeile(counter).variable);counterINCR1PER;counter:=1;FORzaehlerFROMgleichungsanzahl+1UPTOgleichungsanzahl+anzahlparameterREPpruefung(zaehler):=zweistelligezahl(counter)+"p"+elan(eingabeparametername(counter));counterINCR1PER;counter:=1;FORzaehlerFROMgleichungsanzahl+anzahlparameter+1UPTOsortierende-1REPpruefung(zaehler):=zweistelligezahl(counter)+"g"+"d"+elan(glzeile(counter).variable);counterINCR1PER.
+cursoraufdiefalscheeingabepositionierenundfehlermelden:IFaufeinanderfolgendekennzeichengundvodergundpTHENcursoraufvariablebzwparameterpositionieren;feld(1):=meldungstext(fehlervundgdoppelt);doppeltdeklariert:=TRUE;LEAVEaufdoppeldeklarationenpruefenFI;IFaufeinanderfolgendekennzeichenzundvoderzundpTHENcursoraufvariablebzwparameterpositionieren;feld(1):=meldungstext(fehlerzeitvariabledoppelt);doppeltdeklariert:=TRUE;LEAVEaufdoppeldeklarationenpruefenFI;IFsubtext(pruefung(zaehler),3,3)="v"THENcursorfeld:=lfdnummer(pruefung(zaehler))*4;feld(1):=meldungstext(fehlerdoppeldeklaration);doppeltdeklariert:=TRUE;LEAVEaufdoppeldeklarationenpruefenELIFsubtext(pruefung(zaehler),3,3)="p"THENcursorfeld:=lfdnummer(pruefung(zaehler))*4+1;feld(1):=meldungstext(fehlerdoppeldeklaration);doppeltdeklariert:=TRUE;LEAVEaufdoppeldeklarationenpruefenFI.aufeinanderfolgendekennzeichengundvodergundp:(subtext(pruefung(zaehler),3,3)="g"CANDsubtext(pruefung(zaehler+1),3,3)="v")COR(subtext(pruefung(zaehler),3,3)="v"CANDsubtext(pruefung(zaehler+1),3,3)="g")COR(subtext(pruefung(zaehler),3,3)="g"CANDsubtext(pruefung(zaehler+1),3,3)="p")COR(subtext(pruefung(zaehler),3,3)="p"CANDsubtext(pruefung(zaehler+1),3,3)="g").aufeinanderfolgendekennzeichenzundvoderzundp:(subtext(pruefung(zaehler),3,3)="z"CANDsubtext(pruefung(zaehler+1),3,3)="v")COR(subtext(pruefung(zaehler),3,3)="v"CANDsubtext(pruefung(zaehler+1),3,3)="z")COR(subtext(pruefung(zaehler),3,3)="z"CANDsubtext(pruefung(zaehler+1),3,3)="p")COR(subtext(pruefung(zaehler),3,3)="p"CANDsubtext(pruefung(zaehler+1),3,3)="z").cursoraufvariablebzwparameterpositionieren:IFsubtext(pruefung(zaehler),3,3)="v"THENcursorfeld:=lfdnummer(pruefung(zaehler))*4ELIFsubtext(pruefung(zaehler+1),3,3)="v"THENcursorfeld:=lfdnummer(pruefung(zaehler+1))*4ELIFsubtext(pruefung(zaehler),3,3)="p"THENcursorfeld:=lfdnummer(pruefung(zaehler))*4+1ELIFsubtext(pruefung(zaehler+1),3,3)="p"THENcursorfeld:=lfdnummer(pruefung(zaehler+1))*4+1FI.END PROCaufdoppeldeklarationenpruefen;TEXT PROCerrorauswertung(TEXT CONSTmessage):IFpos(message,unbekkommdo)<>0THENauskcompilunbekkommELIFpos(message,undefdyadischop)<>0CORpos(message,undefmonadop)<>0CORpos(message,paramsindfalsch)<>0THENauskcompilparameterELIFpos(message,nurletzteanweisg)<>0CORpos(message,anstelledessymb)<>0CORpos(message,unzulselektsymb)<>0CORpos(message,konstdarfnicht)<>0THENauskcompilsymboleELIFpos(message,klammerauffehlt)<>0CORpos(message,klammerzufehlt)<>0CORpos(message,operatorfehlt)<>0CORpos(message,ungueltigzwischen)<>0THENauskcompilungueltzwELIFpos(message,istmehrfachdekl)<>0THENauskcompilmehrfdeklELSEauskcompilsonstigesFI.END PROCerrorauswertung;PROCquicksort(ROWmaxvarparaanzahlTEXT VARpruefung,INT CONSTanfang,ende):INT VARpivotadresse,zeigeroben,zeigerunten,adrgroesserpivot,adrkleinerpivot;TEXT VARpivot;IFanfang<endeTHENermittlepivotelement;initialisiereoberenundunterenvergleichszeiger;ordnedieelementemithilfevonpivot;sortiereteillistenwennsiemehralseinelemententhaltenFI.ermittlepivotelement:pivotadresse:=(ende+anfang)DIV2;pivot:=pruefung(pivotadresse).initialisiereoberenundunterenvergleichszeiger:zeigeroben:=anfang;zeigerunten:=ende.ordnedieelementemithilfevonpivot:pruefung(pivotadresse):=pruefung(anfang);WHILEzeigeroben<zeigeruntenREPsuchevonobenechtgroesserpivot;suchevonuntenkleinergleichpivotwennnoetigPER.suchevonobenechtgroesserpivot:adrgroesserpivot:=zeigeroben+1;WHILEadrgroesserpivot<=zeigeruntenCANDname(pivot)>=name(pruefung(adrgroesserpivot))REPadrgroesserpivotINCR1PER.suchevonuntenkleinergleichpivotwennnoetig:IFadrgroesserpivot>zeigeruntenTHENmacheletztenplatzfreiundsetzepivotdahin;zeigeroben:=zeigeruntenELSEsuchevonuntenelementkleinergleichpivotundvertauscheesmitdemgroesserenFI.macheletztenplatzfreiundsetzepivotdahin:pruefung(zeigeroben):=pruefung(zeigerunten);pruefung(zeigerunten):=pivot.suchevonuntenelementkleinergleichpivotundvertauscheesmitdemgroesseren:adrkleinerpivot:=zeigerunten;WHILEadrkleinerpivot>=adrgroesserpivotCANDname(pruefung(adrkleinerpivot))>name(pivot)REP
+adrkleinerpivotDECR1PER;IFadrkleinerpivot<adrgroesserpivotTHENbringepivotoberhalbvonadrgroesserpivotunterELSEpruefung(zeigeroben):=pruefung(adrkleinerpivot);pruefung(adrkleinerpivot):=pruefung(adrgroesserpivot);pruefung(adrgroesserpivot):=pivot;zeigeroben:=adrgroesserpivot;zeigerunten:=adrkleinerpivot-1FI.bringepivotoberhalbvonadrgroesserpivotunter:pruefung(zeigeroben):=pruefung(adrgroesserpivot-1);pruefung(adrgroesserpivot-1):=pivot;zeigeroben:=adrgroesserpivot-1;zeigerunten:=zeigeroben.sortiereteillistenwennsiemehralseinelemententhalten:IFende-anfang>1THENpruefeobsortierbereichveraendert;quicksort(pruefung,anfang,zeigeroben);quicksort(pruefung,zeigeroben+1,ende)FI.pruefeobsortierbereichveraendert:IFzeigeroben=endeTHENzeigeroben:=zeigeroben-1FI.END PROCquicksort;PROCmodellmitdatenfuellen(MODELLDGL VARzwmodell):INT VARvz,i;ZUSTAND VARz1:=neuerzustand(dgleichungsanzahl),z2:=z1;PARAMETER VARp1:=neuerparameter(anzahlparameter),p2:=p1;FORvzFROM1UPTOdgleichungsanzahlREPreplace(z1,vz,0.0)PER;zwmodell.demolauf.original.startwert:=text(z1);zwmodell.demolauf.vergleich.startwert:=text(z1);FORvzFROM1UPTOdgleichungsanzahlREPreplace(z1,vz,-1.0e+126);replace(z2,vz,1.0e+126)PER;zwmodell.variablen.unteregrenze:=text(z1);zwmodell.variablen.oberegrenze:=text(z2);z1:=neuerzustand(gleichungsanzahl);z2:=z1;FORvzFROM1UPTOgleichungsanzahlREPreplace(z1,vz,-1.0e+126);replace(z2,vz,1.0e+126)PER;zwmodell.variablen.randoben:=text(z2);zwmodell.variablen.randunten:=text(z1);FORvzFROM1UPTOanzahlparameterREPreplace(p1,vz,0.0)PER;zwmodell.demolauf.original.parameter:=text(p1);zwmodell.demolauf.vergleich.parameter:=text(p1);FORvzFROM1UPTOanzahlparameterREPreplace(p1,vz,-1.0e+126);replace(p2,vz,1.0e+126)PER;zwmodell.parameter.unteregrenze:=text(p1);zwmodell.parameter.oberegrenze:=text(p2);zwmodell.demolauf.original.anfangszeitpunkt:=0.0;zwmodell.demolauf.original.beobachtungsdauer:=0.0;zwmodell.demolauf.vergleich.anfangszeitpunkt:=0.0;zwmodell.demolauf.vergleich.beobachtungsdauer:=0.0;zwmodell.beschraenkung.minbeobachtungsdauer:=0.0;zwmodell.beschraenkung.maxbeobachtungsdauer:=1.0e+126;zwmodell.beschraenkung.minanfangszeitpunkt:=-1.0e+126;zwmodell.beschraenkung.maxanfangszeitpunkt:=1.0e+126;zwmodell.beschraenkung.anzahlbeobachtungspunkte:=21;forget(zwmodell.codeundinfo,quiet);gleichungsraum:=new(zwmodell.codeundinfo);FORiFROM1UPTOdgleichungsanzahlREPzwmodell.variablen.namelang(i):=glzeile(i).variable;zwmodell.variablen.namekurz(i):=glzeile(i).variable;gleichungsraum.gleichungen(i):=glzeile(i).gleichungPER;gleichungsraum.gleichungen(dgleichungsanzahl+1):=endezeichen;FORiFROMdgleichungsanzahl+1UPTOgleichungsanzahlREPzwmodell.covariablen.namelang(i-dgleichungsanzahl):=glzeile(i).variable;zwmodell.covariablen.namekurz(i-dgleichungsanzahl):=glzeile(i).variable;gleichungsraum.cogleichungen(i-dgleichungsanzahl):=glzeile(i).gleichungPER;gleichungsraum.cogleichungen(egleichungsanzahl+1):=endezeichen;FORiFROM1UPTOanzahlparameterREPzwmodell.parameter.namelang(i):=eingabeparametername(i);zwmodell.parameter.nameelan(i):=elan(eingabeparametername(i))PER;zwmodell.variablen.anzahl:=dgleichungsanzahl;zwmodell.covariablen.anzahl:=egleichungsanzahl;zwmodell.parameter.anzahl:=anzahlparameter;zwmodell.mitphasendiagramm:=TRUE;zwmodell.geschuetzt:=FALSE;.END PROCmodellmitdatenfuellen;PROCmodellmitdatenfuellen(MODELLDGL VARzwmodell,THESAURUS CONSTvnamenlang,vnamenkurz,enamenlang,enamenkurz,pnamen):INT VARvz,i;ZUSTAND VARz1:=neuerzustand(dgleichungsanzahl),z2:=z1;PARAMETER VARp1:=neuerparameter(anzahlparameter),p2:=p1;zwmodell.name.lang:=aktuellermodellname;zwmodell.name.kurz:=aktuellermodellkurzname;zwmodell.name.elan:=elan(aktuellermodellkurzname);FORvzFROM1UPTOdgleichungsanzahlREPreplace(z1,vz,0.0)PER;zwmodell.demolauf.original.startwert:=text(z1);zwmodell.demolauf.vergleich.startwert:=text(z1);FORvzFROM1UPTOdgleichungsanzahlREPreplace(z1,vz,-1.0e+126);replace(z2,vz,1.0e+126)PER;zwmodell.variablen.unteregrenze:=text(z1);zwmodell.variablen.oberegrenze:=text(z2);z1:=neuerzustand(
+gleichungsanzahl);z2:=z1;FORvzFROM1UPTOgleichungsanzahlREPreplace(z1,vz,-1.0e+126);replace(z2,vz,1.0e+126)PER;zwmodell.variablen.randoben:=text(z2);zwmodell.variablen.randunten:=text(z1);FORvzFROM1UPTOanzahlparameterREPreplace(p1,vz,0.0)PER;zwmodell.demolauf.original.parameter:=text(p1);zwmodell.demolauf.vergleich.parameter:=text(p1);FORvzFROM1UPTOanzahlparameterREPreplace(p1,vz,-1.0e+126);replace(p2,vz,1.0e+126)PER;zwmodell.parameter.unteregrenze:=text(p1);zwmodell.parameter.oberegrenze:=text(p2);zwmodell.demolauf.original.anfangszeitpunkt:=0.0;zwmodell.demolauf.original.beobachtungsdauer:=0.0;zwmodell.demolauf.vergleich.anfangszeitpunkt:=0.0;zwmodell.demolauf.vergleich.beobachtungsdauer:=0.0;zwmodell.beschraenkung.minbeobachtungsdauer:=0.0;zwmodell.beschraenkung.maxbeobachtungsdauer:=1.0e+126;zwmodell.beschraenkung.minanfangszeitpunkt:=-1.0e+126;zwmodell.beschraenkung.maxanfangszeitpunkt:=1.0e+126;zwmodell.beschraenkung.anzahlbeobachtungspunkte:=21;zwmodell.variablen.namelang:=vnamenlang;zwmodell.variablen.namekurz:=vnamenkurz;zwmodell.covariablen.namelang:=enamenlang;zwmodell.covariablen.namekurz:=enamenkurz;zwmodell.parameter.namelang:=pnamen;FORiFROM1UPTOanzahlparameterREPzwmodell.parameter.nameelan(i):=""PER;zwmodell.variablen.anzahl:=dgleichungsanzahl;zwmodell.covariablen.anzahl:=egleichungsanzahl;zwmodell.parameter.anzahl:=anzahlparameter;zwmodell.mitphasendiagramm:=TRUE;zwmodell.geschuetzt:=FALSE;zwmodell.modellzustand:=uebersetzbar;zwmodell.codeundinfo:="";.dgleichungsanzahl:highestentry(vnamenlang).egleichungsanzahl:highestentry(enamenlang).anzahlparameter:highestentry(pnamen).gleichungsanzahl:egleichungsanzahl+dgleichungsanzahl.END PROCmodellmitdatenfuellen;OP:=(ROWmaxdimensionTEXT VARrow,THESAURUS CONSTthes):TEXT VARname;INT VARi:=0;WHILEi<highestentry(thes)ANDi<=maxdimensionREPget(thes,name,i);row(i):=namePER END OP:=;PROCauskunftsdienst(TEXT CONSTinfotext,fehler,loeschtaste):TEXT VARerstesfeld,zweitesfeld,drittesfeld;INT VARseitenzahl;maskezumauskunftsdienstausgeben;REPkernvonauskunftsdienstPER.kernvonauskunftsdienst:infotextundsteuerzeileausgeben;REPwarteaufesc;tasteeinlesen(taste);IFtaste=blaettertasteTHENseitenzahlINCR1;IFseitenzahl>length(infotext)THENseitenzahl:=1FI;reenterauskunftsdienst;ELIFtaste=loeschtasteTHENleaveauskunftsdienstELSEput(formular(infoseite),meldungstext(fehlertaste),1);FI PER.maskezumauskunftsdienstausgeben:show(formular(infoseite));seitenzahl:=1;erstesfeld:=fehler.reenterauskunftsdienst:LEAVEkernvonauskunftsdienst.leaveauskunftsdienst:LEAVEauskunftsdienst.infotextundsteuerzeileausgeben:IFlength(infotext)>seitenzahlTHENdrittesfeld:=steuerleiste(17)ELIFlength(infotext)>1THENdrittesfeld:=steuerleiste(16)ELIFloeschtaste=auskunftsloeschtaste2THENdrittesfeld:=steuerleiste(18)ELSEdrittesfeld:=steuerleiste(15)FI;IFinfotext=""THENzweitesfeld:=""ELSEzweitesfeld:=auskunftstext(code(infotextSUBseitenzahl))FI;put(formular(infoseite),zweitesfeld,2);put(formular(infoseite),erstesfeld,1);put(formular(infoseite),drittesfeld,3);erstesfeld:=fehler;.END PROCauskunftsdienst;PROCinfotextauswahl(TEXT CONSTfehlertext,fehler):infotextauswahl(fehlertext,fehler,allgemeineauskunftseite2,auskunftzummodellerfassenseite2)END PROCinfotextauswahl;PROCinfotextauswahl(TEXT CONSTfehlertext,fehler,top1,top2):INT VARformularnr,eingabezeile;TEXT VARerstesfeld,auskunftzufehler,auskunft;BOOL VARfalscheeingaben;IFfehlertext=""THENformularnr:=infowahlkurz;eingabezeile:=15;ELSEformularnr:=infowahllang;eingabezeile:=17;FI;REPkernvoninfotextauswahlPER.kernvoninfotextauswahl:maskezurinfotextauswahlausgeben;REPput(formular(formularnr),erstesfeld,1);falscheeingaben:=FALSE;cursor(60,eingabezeile);tasteeinlesen(taste);IFtaste="1"THENauskunft:=top1;fehlermeldung:=""ELIFtaste="2"THENauskunft:=top2;fehlermeldung:=""ELIFtaste="3"CANDfehlertext<>""THEN TEXT VARtt:=compress(fehlermeldung);changeall(tt," ","");auskunft:=fehlertext;fehlermeldung:=tt;ELIFtaste=auskunftsloeschtaste1THENleaveinfotextauswahlELSEerstesfeld:=meldungstext(fehlertaste
+);falscheeingaben:=TRUE FI;IF NOTfalscheeingabenTHEN IFauskunft=""THENerstesfeld:="Hierzu existiert noch keine Auskunft!"ELSEauskunftsdienst(auskunft,fehlermeldung,auskunftsloeschtaste2);reenterinfotextauswahlFI FI PER.maskezurinfotextauswahlausgeben:show(formular(formularnr));erstesfeld:=leeresfeld.reenterinfotextauswahl:LEAVEkernvoninfotextauswahl.leaveinfotextauswahl:LEAVEinfotextauswahl.END PROCinfotextauswahl;PROCwarteaufesc:TEXT VAReingabe;REPeingabe:=incharetyUNTILeingabe=escPER.END PROCwarteaufesc;PROCinfotextablegen(MODELLDGL VARzwmodell):FILE VARinformation;INT VARz;TEXT VARzeile;IF NOTexists(zwmodell.codeundinfo)THENgleichungsraum:=new(zwmodell.codeundinfo);FI;information:=modellinfo(zwmodell,dsname);infotextimdatenraumablegen;forget(dsname,quiet).infotextimdatenraumablegen:input(information);z:=1;WHILE NOTeof(information)REPgetline(information,zeile);IFz>maxinfo-1THENgleichungsraum.info(z):=endezeichen;LEAVEinfotextimdatenraumablegenFI;gleichungsraum.info(z):=zeile;zINCR1PER;gleichungsraum.info(z):=endezeichen.END PROCinfotextablegen;PROCtasteeinlesen(TEXT VAReinlesetaste):REPeinlesetaste:=incharetyUNTILeinlesetaste<>""PER END PROCtasteeinlesen;INT PROClfdnummer(TEXT CONSTtext):int(subtext(text,1,2))END PROClfdnummer;TEXT PROCzweistelligezahl(INT CONSTzahl):IFlength(text(zahl))=1THEN"0"+text(zahl)ELSEtext(zahl)FI END PROCzweistelligezahl;TEXT PROCnameohneblanks(TEXT VARtext):changeall(text," ","");subtext(text,4)END PROCnameohneblanks;TEXT PROCname(TEXT CONSTtext):subtext(text,4)END PROCname;TEXT PROCkomprimiere(TEXT CONSTt):TEXT VARergebnis,z;INT VARi,l;suchevonvorne;suchevonhinten;ersetzekern;ergebnis.suchevonvorne:l:=LENGTHt;FORiFROM1UPTOlREPz:=(tSUBi)UNTIL NOT(z=" "CORz="_")PER;IFi>lTHENergebnis:=""ELSEergebnis:=subtext(t,i,l);FI.suchevonhinten:l:=LENGTHergebnis;FORiFROMlDOWNTO1REPz:=(ergebnisSUBi)UNTIL NOT(z=" "CORz="_")PER;IFi<1THENergebnis:=""ELSEergebnis:=subtext(ergebnis,1,i);FI.ersetzekern:changeall(ergebnis,"_"," ").END PROCkomprimiere;PROCohneumlauteundeszet(TEXT VARtext):changeall(text,"ß","ss");END PROCohneumlauteundeszet;BOOL PROCnichtuebersetzbar(TEXT CONSTtext):BOOL VARergebnis;disablestop;do(text);ergebnis:=iserror;IFiserrorTHENclearerrorFI;enablestop;ergebnisEND PROCnichtuebersetzbar;PROCprotect(TAG VARt,INT CONSTfeld,BOOL CONSTprneu):INT VARdummy;BOOL VARcl,se,sp,le,pr;fieldinfos(t,feld,dummy,cl,pr,se,sp,le);setfieldinfos(t,feld,cl,prneu,se)END PROCprotect;PROCvertauschezeilen(ZEILE VARzeile1,zeile2):ZEILE VARhilfe;hilfe:=zeile1;zeile1:=zeile2;zeile2:=hilfeEND PROCvertauschezeilen;LETtrennzeichen=6,klammerauf="(",semikolon=";",thenwort="THEN",elsewort="ELSE",repwort="REP";FILE PROCmodellinfo(MODELLDGL VARzwmodell,TEXT CONSTdatenraum):forget(datenraum,quiet);FILE VARinfo:=sequentialfile(output,datenraum);INT VARz,typ1,typ2,zeilenanfang,filler;TEXT VARersteszeichen,zweiteszeichen;TEXT VARggfluecke:="";modellnameangeben;putline(info,auskunftstext(auskgleichungen));putline(info,unterstrichfeld);IFdgleichungsanzahl>0THEN FORzFROM1UPTOdgleichungsanzahlREPdgleichungausgeben;PER FI;IFegleichungsanzahl>0THEN FORzFROM1UPTOegleichungsanzahlREPegleichungausgeben;PER FI;line(info);IFanzahlparameter>0THENputline(info,compress(auskunftstext(auskvariablen))+10*" "+compress(auskunftstext(auskparameter)));putline(info,unterstrichfeld);FORzFROM1UPTOmax(anzahlparameter,gleichungsanzahl)REPvariableundparameterausgeben;line(info)PER;ELSEputline(info,compress(auskunftstext(auskvariablen)));putline(info,unterstrichfeld);FORzFROM1UPTOdgleichungsanzahlREPputline(info,zwmodell.variablen.namekurz(z))PER;FORzFROM1UPTOegleichungsanzahlREPputline(info,zwmodell.covariablen.namekurz(z))PER FI;info.modellnameangeben:putline(info,compress(auskunftstext(auskmodell))+" "+zwmodell.name.lang);putline(info,length(unterstrichfeld)*"=");line(info,2).dgleichungausgeben:zeilenanfang:=1;scan(gleichungsraum.gleichungen(z));nextsymbol(ersteszeichen,typ1);dasnaechstezeichenschreibenmitruecksichtaufdaszeilenende;WHILEtyp1<7REP
+dasnaechstezeichenschreibenmitruecksichtaufdaszeilenendePER.egleichungausgeben:zeilenanfang:=1;scan(gleichungsraum.cogleichungen(z));nextsymbol(ersteszeichen,typ1);dasnaechstezeichenschreibenmitruecksichtaufdaszeilenende;WHILEtyp1<7REPdasnaechstezeichenschreibenmitruecksichtaufdaszeilenendePER.dasnaechstezeichenschreibenmitruecksichtaufdaszeilenende:IF(zeilenanfang+length(ersteszeichen)+1)>=77THENzeilenanfang:=1;FI;zeilenanfangINCRlength(ersteszeichen);nextsymbol(zweiteszeichen,typ2);SELECTtyp2OF CASEtrennzeichen:IFzweiteszeichen=klammeraufCANDtyp1<>trennzeichenTHENggfluecke:=" "ELSEggfluecke:=""FI;OTHERWISEggfluecke:=" "END SELECT;SELECTtyp1OF CASE1:write(info,ersteszeichen+ggfluecke);CASE2:IFersteszeichen=thenwortCORersteszeichen=elsewortTHENline(info);put(info,ersteszeichen);ELIFersteszeichen=repwortTHENput(info,ersteszeichen);line(info)ELSEput(info,ersteszeichen);FI;CASE3:write(info,ersteszeichen+ggfluecke);CASE4:write(info,ersteszeichen+ggfluecke);CASE5:put(info,ersteszeichen);CASE6:write(info,ersteszeichen);IFersteszeichen=semikolonTHENline(info);ggfluecke:=""ELIFersteszeichen=klammeraufTHENggfluecke:=""FI;write(info,ggfluecke);ENDSELECT;IFggfluecke=" "THENzeilenanfangINCR1;FI;ersteszeichen:=zweiteszeichen;typ1:=typ2.variableundparameterausgeben:IFz<=dgleichungsanzahlTHENgebevariableausELIFz<=gleichungsanzahlTHENgebecovariableausFI;IFz<=anzahlparameterTHENgebeparameterausFI;.gebevariableaus:put(info,zwmodell.variablen.namekurz(z));IFz<=anzahlparameterTHENfiller:=infozeilenanfang-length(compress(zwmodell.variablen.namekurz(z)));IFfiller=infozeilenanfangTHENfillerINCR1FI;FI.gebecovariableaus:put(info,zwmodell.covariablen.namekurz(z-dgleichungsanzahl));IFz<=anzahlparameterTHENfiller:=infozeilenanfang-length(compress(zwmodell.covariablen.namekurz(z-dgleichungsanzahl)));IFfiller=infozeilenanfangTHENfillerINCR1FI;FI.gebeparameteraus:IFz>gleichungsanzahlTHENfiller:=infozeilenanfang+1;FI;write(info,filler*" ");put(info,zwmodell.parameter.namelang(z));.END PROCmodellinfo;PROCinfodateiausdrucken(MODELLDGL VARzwmodell,TEXT CONSTmodellbank):INT VARi;TEXT CONSTdsnameaktuell:=dsname+"."+timeofday;gleichungsraummitdatenfuellen;infodateifuellen;print(dsnameaktuell);feld(1):=auskunftstext(auskinfogedruckt);forget(dsnameaktuell,quiet);forget(zwmodell.codeundinfo,quiet).gleichungsraummitdatenfuellen:zwmodell.codeundinfo:=modellbank+sp+"X"+sp+"hilfscode";forget(zwmodell.codeundinfo,quiet);gleichungsraum:=new(zwmodell.codeundinfo);FORiFROM1UPTOdgleichungsanzahlREPgleichungsraum.gleichungen(i):=glzeile(i).gleichungPER;gleichungsraum.gleichungen(dgleichungsanzahl+1):=endezeichen;FORiFROMdgleichungsanzahl+1UPTOgleichungsanzahlREPgleichungsraum.cogleichungen(i-dgleichungsanzahl):=glzeile(i).gleichungPER;gleichungsraum.cogleichungen(egleichungsanzahl+1):=endezeichen.infodateifuellen:forget(dsnameaktuell,quiet);FILE VARinfo:=sequentialfile(output,dsnameaktuell);INT VARz,typ1,typ2,zeilenanfang,filler;TEXT VARersteszeichen,zweiteszeichen;TEXT VARggfluecke:="";modellnameangeben;putline(info,auskunftstext(auskgleichungen));putline(info,unterstrichfeld);FORzFROM1UPTOdgleichungsanzahlREPdgleichungausgeben;PER;FORzFROM1UPTOegleichungsanzahlREPegleichungausgeben;PER;line(info);IFanzahlparameter>0THENueberschriftschreiben;FORzFROM1UPTOmax(anzahlparameter,gleichungsanzahl)REPvariableundparameterausgeben;line(info)PER;ELSEputline(info,compress(auskunftstext(auskvariablen)));putline(info,unterstrichfeld);FORzFROM1UPTOgleichungsanzahlREPgebevariableaus;line(info)PER;FI;.modellnameangeben:putline(info,compress(auskunftstext(auskmodell))+" "+zwmodell.name.lang);putline(info,length(unterstrichfeld)*"=");line(info,2).ueberschriftschreiben:putline(info,compress(auskunftstext(auskvariablen))+10*" "+compress(auskunftstext(auskparameter)));putline(info,unterstrichfeld);.dgleichungausgeben:zeilenanfang:=1;scan(gleichungsraum.gleichungen(z));nextsymbol(ersteszeichen,typ1);dasnaechstezeichenschreibenmitruecksichtaufdaszeilenende;WHILEtyp1<7REP
+dasnaechstezeichenschreibenmitruecksichtaufdaszeilenendePER.egleichungausgeben:zeilenanfang:=1;scan(gleichungsraum.cogleichungen(z));nextsymbol(ersteszeichen,typ1);dasnaechstezeichenschreibenmitruecksichtaufdaszeilenende;WHILEtyp1<7REPdasnaechstezeichenschreibenmitruecksichtaufdaszeilenendePER.dasnaechstezeichenschreibenmitruecksichtaufdaszeilenende:IF(zeilenanfang+length(ersteszeichen)+1)>=77THENzeilenanfang:=1;FI;zeilenanfangINCRlength(ersteszeichen);nextsymbol(zweiteszeichen,typ2);SELECTtyp2OF CASEtrennzeichen:IFzweiteszeichen=klammeraufCANDtyp1<>trennzeichenTHENggfluecke:=" "ELSEggfluecke:=""FI;OTHERWISEggfluecke:=" "END SELECT;SELECTtyp1OF CASE1:write(info,ersteszeichen+ggfluecke);CASE2:IFersteszeichen=thenwortCORersteszeichen=elsewortTHENline(info);put(info,ersteszeichen);ELIFersteszeichen=repwortTHENput(info,ersteszeichen);line(info)ELSEput(info,ersteszeichen);FI;CASE3:write(info,ersteszeichen+ggfluecke);CASE4:write(info,ersteszeichen+ggfluecke);CASE5:put(info,ersteszeichen);CASE6:write(info,ersteszeichen);IFersteszeichen=semikolonTHENline(info);ggfluecke:=""ELIFersteszeichen=klammeraufTHENggfluecke:=""FI;write(info,ggfluecke);ENDSELECT;IFggfluecke=" "THENzeilenanfangINCR1;FI;ersteszeichen:=zweiteszeichen;typ1:=typ2;.variableundparameterausgeben:IFz<=gleichungsanzahlTHENgebevariableaus;FI;IFz<=anzahlparameterTHENgebeparameterausFI;.gebevariableaus:put(info,glzeile(z).variable);IFz<=anzahlparameterTHENfiller:=infozeilenanfang-length(compress(glzeile(z).variable));IFfiller=infozeilenanfangTHENfillerINCR1FI;FI;.gebeparameteraus:IFz>gleichungsanzahlTHENfiller:=infozeilenanfang+1;FI;write(info,filler*" ");put(info,eingabeparametername(z)).END PROCinfodateiausdrucken;PROCputgetformular1(ROW100TEXT VARfeld,INT VARcursorfeld,TEXT VARtaste):TEXT CONSTinternetasten:=return+hoch+runter+tab;put(formular(seite1),feld);REPput(formular(seite1),feld(cursorfeld),cursorfeld);get(formular(seite1),feld(cursorfeld),cursorfeld,taste);IFtaste=runterTHENcursorfeld:=3FI;IFtaste=hochTHENcursorfeld:=2FI;IFtaste=returnTHEN IFcursorfeld=2THENcursorfeld:=3ELSEcursorfeld:=2FI FI UNTILpos(internetasten,taste)=0PER END PROCputgetformular1;END PACKETmodellbasis;
+
+
diff --git a/app/schulis-simulationssystem/3.0/src/modellbasis geraet b/app/schulis-simulationssystem/3.0/src/modellbasis geraet
new file mode 100644
index 0000000..2a0a82a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/modellbasis geraet
@@ -0,0 +1,9 @@
+PACKETmodellbasisDEFINESmodelldatenraum,compilierbaregleichungen,MODELLDGL,modellname,modellbezeichnung,modellkurzbezeichnung,dimension,codimension,parameteranzahl,mitzusatzdarstellung,mitphasendiagramm,informationstext,variablenoberbegriff,variablenoberbegriffkurzform,variablenname,variablenkurzform,covariablenname,covariablenkurzform,parametername,parameterkurzform,darstellungsname,zustandunteregrenze,zustandoberegrenze,parameterunteregrenze,parameteroberegrenze,randoben,randunten,vorgabesystemzustand,vorgabeparameter,vorgabebeobachtungsdauer,vorgabeanfangszeitpunkt,vorgabekurve,vorgabevergleichssystemzustand,vorgabevergleichsparameter,vorgabevergleichsbeobachtungsdauer,vorgabevergleichsanfangszeitpunkt,vorgabevergleichskurve,demomuster,demoxindex,demoyindex,demoautomatik,minbeobachtungsdauer,maxbeobachtungsdauer,minanfangszeitpunkt,maxanfangszeitpunkt,anzahlbeobachtungspunkte,mitkombinationen,listekombinationen,indiceskombinationen,ergebnisganzzahlig,:=,VON,LOESUNG,STARTZEIT,DAUER,STARTWERT,PARAMETERSATZ,LOESUNGSABSCHNITT,KURVENDIMENSION,vergleichswerte,originalwerte,gleichungsprozeduren,setzemodelltyp,wirkungsdgr,kopplean:LETmaxdimension=20,maxparameter=20,typnrmodell=1077,maxvarlaenge=30,maxinfo=50,maxgleichungen=50,maxdarstellungszeilen=500,uebersetzbar=0,notuebersetzbar=1,initialisierungds="x",endezeichen="zZz",sp=" ",praefix="d ",modellcode=" code info ds",originalkurve=" originalkurve ds",vergleichskurve=" vergleichskurve ds",uebersetzungsfile="uebersetzungsdatei",darstellungskopf=" PROC darstellung 4 (LOESUNG VAR lsg, BOOL VAR in demo, TEXT VAR taste):",darstellungsende=" END PROC darstellung 4 ;";LETabbruchtaste="a",auskunftstaste="i",auskunftsloeschtaste1="z",auskunftsloeschtaste2="l",weitertaste="w",blaettertaste="b",speichertaste="s",zuruecktaste="z",simulationstaste="w",drucktaste="d",esc="�";LET ZEILE=STRUCT(TEXTgleichungsart,gleichung,variable,INTnummer);TYPE DEMOLAUF=STRUCT(VORGABEoriginal,vergleich,INTxindex,yindex,BOOLautomatisch,TEXTvariablenwahl);TYPE VORGABE=STRUCT(TEXTstartwert,parameter,REALanfangszeitpunkt,beobachtungsdauer,TEXTkurve);TYPE LOESUNG=STRUCT(ZUSTANDstartwert,PARAMETERparameter,REALanfangszeitpunkt,beobachtungsdauer,KURVEkurve);TYPE NAMEN=STRUCT(TEXTelan,ohneumlaute,kurz);TYPE ZUSTANDSDATEN=STRUCT(INTanzahl,TEXToberbegriff,oberbegriffkurzform,ROWmaxdimensionTEXTnamelang,namekurz,TEXTunteregrenze,oberegrenze,randoben,randunten);TYPE COVARIABLENDATEN=STRUCT(INTanzahl,ROWmaxdimensionTEXTnamelang,namekurz);TYPE KOMBINATION=STRUCT(TEXTname,INTxindex,yindex,BOOLautomatisch);TYPE KOMBINATIONSANGEBOT=STRUCT(BOOLmitkombinationen,INTanzahl,ROWmaxdimensionKOMBINATIONpaar);TYPE PARAMETERDATEN=STRUCT(INTanzahl,ROWmaxparameterTEXTnamelang,nameelan,TEXTunteregrenze,oberegrenze);TYPE DARSTELLUNGSDATEN=STRUCT(BOOLimmodell,TEXTname);TYPE BESCHRAENKUNG=STRUCT(REALminbeobachtungsdauer,maxbeobachtungsdauer,minanfangszeitpunkt,maxanfangszeitpunkt,INTanzahlbeobachtungspunkte);LET TEXTDATEN=BOUND STRUCT(ROWmaxinfoTEXTinfo,ROWmaxgleichungenTEXTgleichungen,cogleichungen,ROWmaxdarstellungszeilenTEXTdarstellungscode);TYPE MODELLDGL=STRUCT(NAMENname,ZUSTANDSDATENvariablen,COVARIABLENDATENcovariablen,PARAMETERDATENparameter,DARSTELLUNGSDATENdarstellung,BOOLmitphasendiagramm,BOOLganzzahlig,KOMBINATIONSANGEBOTkombinationen,TEXTcodeundinfo,BESCHRAENKUNGbeschraenkung,DEMOLAUFdemolauf,INTmodellzustand,BOOLgeschuetzt);MODELLDGL VARmodell;TEXTDATEN VARtextdaten;BOOL VARwd:=FALSE;OP:=(LOESUNG VARlinks,LOESUNG CONSTrechts):links.startwert:=rechts.startwert;links.parameter:=rechts.parameter;links.anfangszeitpunkt:=rechts.anfangszeitpunkt;links.beobachtungsdauer:=rechts.beobachtungsdauer;links.kurve:=rechts.kurve;END OP:=;OP VON(LOESUNG VARlinks,LOESUNG CONSTrechts):links.startwert:=rechts.startwert;links.parameter:=rechts.parameter;links.anfangszeitpunkt:=rechts.anfangszeitpunkt;links.beobachtungsdauer:=rechts.beobachtungsdauer;END OP VON;LOESUNG PROCvergleichswerte:LOESUNG VARlsg;lsg.startwert:=vorgabevergleichssystemzustand;
+lsg.parameter:=vorgabevergleichsparameter;lsg.anfangszeitpunkt:=vorgabevergleichsanfangszeitpunkt;lsg.beobachtungsdauer:=vorgabevergleichsbeobachtungsdauer;lsg.kurve:=old(vorgabevergleichskurve);lsg.END PROCvergleichswerte;LOESUNG PROCoriginalwerte:LOESUNG VARlsg;lsg.startwert:=vorgabesystemzustand;lsg.parameter:=vorgabeparameter;lsg.anfangszeitpunkt:=vorgabeanfangszeitpunkt;lsg.beobachtungsdauer:=vorgabebeobachtungsdauer;IFexists(vorgabekurve)THENlsg.kurve:=old(vorgabekurve);FI;lsg.END PROCoriginalwerte;OP STARTZEIT(LOESUNG VARlsg,REAL CONSTstartzeit):lsg.anfangszeitpunkt:=startzeitEND OP STARTZEIT;REAL OP STARTZEIT(LOESUNG CONSTlsg):lsg.anfangszeitpunktEND OP STARTZEIT;OP DAUER(LOESUNG VARlsg,REAL CONSTdauer):lsg.beobachtungsdauer:=dauerEND OP DAUER;REAL OP DAUER(LOESUNG CONSTlsg):lsg.beobachtungsdauerEND OP DAUER;OP STARTWERT(LOESUNG VARlsg,ZUSTAND CONSTstartwert):lsg.startwert:=startwertEND OP STARTWERT;ZUSTAND OP STARTWERT(LOESUNG CONSTlsg):lsg.startwertEND OP STARTWERT;OP PARAMETERSATZ(LOESUNG VARlsg,PARAMETER CONSTparameter):lsg.parameter:=parameterEND OP PARAMETERSATZ;PARAMETER OP PARAMETERSATZ(LOESUNG CONSTlsg):lsg.parameterEND OP PARAMETERSATZ;OP LOESUNGSABSCHNITT(LOESUNG VARlsg,KURVE CONSTkurve):lsg.kurve:=kurveEND OP LOESUNGSABSCHNITT;KURVE OP LOESUNGSABSCHNITT(LOESUNG CONSTlsg):lsg.kurveEND OP LOESUNGSABSCHNITT;INT OP KURVENDIMENSION(KURVE CONSTkurve):dimension+codimension+1.END OP KURVENDIMENSION;TEXT PROCmodellbezeichnung:modell.name.ohneumlaute.END PROCmodellbezeichnung;TEXT PROCmodellkurzbezeichnung:modell.name.kurzEND PROCmodellkurzbezeichnung;TEXT PROCmodellname:modell.name.elanEND PROCmodellname;TEXT PROCmodelldatenraum:modell.codeundinfoEND PROCmodelldatenraum;BOOL PROCcompilierbaregleichungen:modell.modellzustand=uebersetzbarEND PROCcompilierbaregleichungen;INT PROCdimension:modell.variablen.anzahlEND PROCdimension;INT PROCcodimension:modell.covariablen.anzahlEND PROCcodimension;INT PROCparameteranzahl:modell.parameter.anzahlEND PROCparameteranzahl;BOOL PROCmitzusatzdarstellung:modell.darstellung.immodellEND PROCmitzusatzdarstellung;BOOL PROCmitphasendiagramm:modell.mitphasendiagrammEND PROCmitphasendiagramm;BOOL PROCergebnisganzzahlig:modell.ganzzahligEND PROCergebnisganzzahlig;FILE PROCinformationstext(TEXT CONSTdateiname):forget(dateiname,quiet);FILE VARtexte:=sequentialfile(output,dateiname);holeinformationstext;texte.holeinformationstext:TEXT VARsatz:="";INT VARi;IFmodell.geschuetztTHENputline(texte," "+modellbezeichnung);putline(texte," "+(areaxsize(grossesrahmenfenster)-2)*waagerecht);FI;FORiFROM1UPTOmaxinfoWHILEtextdaten.info(i)<>endezeichenREPsatz:=textdaten.info(i);putline(texte,satz);PER;.END PROCinformationstext;TEXT PROCvariablenoberbegriff:modell.variablen.oberbegriff.END PROCvariablenoberbegriff;TEXT PROCvariablenoberbegriffkurzform:modell.variablen.oberbegriffkurzform.END PROCvariablenoberbegriffkurzform;TEXT PROCvariablenname(INT CONSTi):TEXT CONSTt:=(modell.variablen.namelang(i));t+(maxvarlaenge-LENGTH(t))*" ".END PROCvariablenname;TEXT PROCvariablenkurzform(INT CONSTi):modell.variablen.namekurz(i).END PROCvariablenkurzform;TEXT PROCcovariablenname(INT CONSTi):TEXT CONSTt:=modell.covariablen.namelang(i);t+(maxvarlaenge-LENGTH(t))*" ".END PROCcovariablenname;TEXT PROCcovariablenkurzform(INT CONSTi):modell.covariablen.namekurz(i).END PROCcovariablenkurzform;TEXT PROCparametername(INT CONSTi):modell.parameter.namelang(i).END PROCparametername;TEXT PROCparameterkurzform(INT CONSTi):modell.parameter.nameelan(i).END PROCparameterkurzform;TEXT PROCdarstellungsname:modell.darstellung.name.END PROCdarstellungsname;PARAMETER PROCvorgabeparameter:parameter(modell.demolauf.original.parameter).END PROCvorgabeparameter;REAL PROCvorgabeanfangszeitpunkt:modell.demolauf.original.anfangszeitpunkt.END PROCvorgabeanfangszeitpunkt;ZUSTAND PROCvorgabevergleichssystemzustand:zustand(modell.demolauf.vergleich.startwert).END PROCvorgabevergleichssystemzustand;PARAMETER PROCvorgabevergleichsparameter:parameter(
+modell.demolauf.vergleich.parameter).END PROCvorgabevergleichsparameter;ZUSTAND PROCzustandunteregrenze:zustand(modell.variablen.unteregrenze).END PROCzustandunteregrenze;ZUSTAND PROCzustandoberegrenze:zustand(modell.variablen.oberegrenze).END PROCzustandoberegrenze;PARAMETER PROCparameteroberegrenze:parameter(modell.parameter.oberegrenze).END PROCparameteroberegrenze;PARAMETER PROCparameterunteregrenze:parameter(modell.parameter.unteregrenze).END PROCparameterunteregrenze;ZUSTAND PROCrandoben:zustand(modell.variablen.randoben).END PROCrandoben;ZUSTAND PROCrandunten:zustand(modell.variablen.randunten).END PROCrandunten;REAL PROCminbeobachtungsdauer:modell.beschraenkung.minbeobachtungsdauer.END PROCminbeobachtungsdauer;REAL PROCmaxbeobachtungsdauer:modell.beschraenkung.maxbeobachtungsdauer.END PROCmaxbeobachtungsdauer;REAL PROCminanfangszeitpunkt:modell.beschraenkung.minanfangszeitpunkt.END PROCminanfangszeitpunkt;REAL PROCmaxanfangszeitpunkt:modell.beschraenkung.maxanfangszeitpunkt.END PROCmaxanfangszeitpunkt;INT PROCanzahlbeobachtungspunkte:modell.beschraenkung.anzahlbeobachtungspunkte.END PROCanzahlbeobachtungspunkte;BOOL PROCmitkombinationen:modell.kombinationen.mitkombinationen.END PROCmitkombinationen;PROClistekombinationen(ROWmaxdimensionTEXT VARnamen,INT VARanzahl):INT VARi;anzahl:=modell.kombinationen.anzahl;FORiFROM1UPTOanzahlREPnamen(i):=modell.kombinationen.paar(i).name;PER;END PROClistekombinationen;PROCindiceskombinationen(INT CONSTkombnr,INT VARxachse,yachse,BOOL VARvertauschbar):xachse:=modell.kombinationen.paar(kombnr).xindex;yachse:=modell.kombinationen.paar(kombnr).yindex;vertauschbar:=modell.kombinationen.paar(kombnr).automatisch;END PROCindiceskombinationen;ZUSTAND PROCvorgabesystemzustand:zustand(modell.demolauf.original.startwert).END PROCvorgabesystemzustand;REAL PROCvorgabebeobachtungsdauer:modell.demolauf.original.beobachtungsdauer.END PROCvorgabebeobachtungsdauer;TEXT PROCvorgabekurve:modell.demolauf.original.kurve.END PROCvorgabekurve;REAL PROCvorgabevergleichsanfangszeitpunkt:modell.demolauf.vergleich.anfangszeitpunkt.END PROCvorgabevergleichsanfangszeitpunkt;REAL PROCvorgabevergleichsbeobachtungsdauer:modell.demolauf.vergleich.beobachtungsdauer.END PROCvorgabevergleichsbeobachtungsdauer;TEXT PROCvorgabevergleichskurve:modell.demolauf.vergleich.kurve.END PROCvorgabevergleichskurve;ZUSTAND PROCdemomuster:zustand(modell.demolauf.variablenwahl).END PROCdemomuster;BOOL PROCdemoautomatik:modell.demolauf.automatisch.END PROCdemoautomatik;INT PROCdemoxindex:modell.demolauf.xindex.END PROCdemoxindex;INT PROCdemoyindex:modell.demolauf.yindex.END PROCdemoyindex;TEXT PROCgleichung(INT CONSTi):TEXT VARt:=textdaten.gleichungen(i);t.END PROCgleichung;TEXT PROCcogleichung(INT CONSTi):TEXT VARt:=textdaten.cogleichungen(i);t.END PROCcogleichung;TEXT PROCdarstellungszeile(INT CONSTi):TEXT VARt:=textdaten.darstellungscode(i);t.END PROCdarstellungszeile;PROCkopplean(MODELLDGL VARaktuellesmodell):modell:=aktuellesmodell;IFexists(modell.codeundinfo)THENtextdaten:=old(modell.codeundinfo);FI;END PROCkopplean;PROCgleichungsprozeduren(TEXT CONSTdateiname):forget(dateiname,quiet);FILE VARprog:=sequentialfile(output,dateiname);schreibegleichungsproz;schreibecogleichungsproz;schreibedarstellung4;.schreibegleichungsproz:putline(prog,"ZUSTAND PROC f (REAL CONST zeit, "+" ZUSTAND CONST alter zustand, "+" PARAMETER CONST alle parameter):");deklarationen;gleichungen;ergebnis;putline(prog,"END PROC f;");.schreibecogleichungsproz:putline(prog,"ZUSTAND PROC co f (REAL CONST zeit, "+" ZUSTAND CONST alter zustand, "+" PARAMETER CONST alle parameter):");deklarationenvoncof;cogleichungen;cofergebnis;putline(prog,"END PROC co f;");.gleichungen:FORiFROM1UPTOmaxgleichungenWHILEgleichung(i)<>endezeichenREPputline(prog,gleichung(i));PER;.cogleichungen:INT VARi;FORiFROM1UPTOmaxgleichungenWHILEcogleichung(i)<>endezeichenREPputline(prog,cogleichung(i));PER;.deklarationen:putline(prog,"ZUSTAND VAR dvektorxyx"+
+" := neuer zustand (DSUB alter zustand);");IFdimension>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOdimensionREPput(prog,elan(variablenkurzform(i))+" :: ");IFi=dimensionTHENputline(prog,"alter zustand SUB "+text(i)+" ;");ELSEputline(prog,"alter zustand SUB "+text(i)+" ,");FI;PER;FI;IFparameteranzahl>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOparameteranzahlREPput(prog,elan(parameterkurzform(i))+" :: ");IFi=parameteranzahlTHENputline(prog,"alle parameter SUB "+text(i)+" ;");ELSEputline(prog,"alle parameter SUB "+text(i)+" ,");FI;PER;FI;IFdimension>0THENput(prog,"REAL VAR ");FORiFROM1UPTOdimensionREPput(prog,praefix+elan(variablenkurzform(i)));IFi=dimensionTHENputline(prog,";")ELSEputline(prog,",")FI;PER;FI;.ergebnis:putline(prog,"ergebnisxyx .");putline(prog,"ergebnisxyx : ");FORiFROM1UPTOdimensionREPputline(prog,"replace (dvektorxyx ,"+text(i)+","+praefix+elan(variablenkurzform(i))+" );");PER;putline(prog,"dvektorxyx.");.deklarationenvoncof:putline(prog,"ZUSTAND VAR dvektorxyx"+" := neuer zustand ( co dimension);");IFdimension>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOdimensionREPput(prog,elan(variablenkurzform(i))+" :: ");IFi=dimensionTHENputline(prog,"alter zustand SUB "+text(i)+" ;");ELSEputline(prog,"alter zustand SUB "+text(i)+" ,");FI;PER;FI;IFparameteranzahl>0THENputline(prog,"REAL CONST ");FORiFROM1UPTOparameteranzahlREPput(prog,elan(parameterkurzform(i))+" :: ");IFi=parameteranzahlTHENputline(prog,"alle parameter SUB "+text(i)+" ;");ELSEputline(prog,"alle parameter SUB "+text(i)+" ,");FI;PER;FI;IFcodimension>0THENput(prog,"REAL VAR ");FORiFROM1UPTOcodimensionREPput(prog,elan(covariablenkurzform(i)));IFi=codimensionTHENputline(prog,";")ELSEputline(prog,",")FI;PER;FI;.cofergebnis:putline(prog,"ergebnisxyx .");putline(prog,"ergebnisxyx : ");FORiFROM1UPTOcodimensionREPputline(prog,"replace (dvektorxyx ,"+text(i)+","+elan(covariablenkurzform(i))+" );");PER;putline(prog,"dvektorxyx.");.schreibedarstellung4:IFmitzusatzdarstellungTHENschreibedarstellungscodeELSEschreibeleerenprozedurkopfFI;.schreibeleerenprozedurkopf:putline(prog,darstellungskopf);putline(prog,darstellungsende);.schreibedarstellungscode:FORiFROM1UPTOmaxdarstellungszeilenWHILEdarstellungszeile(i)<>endezeichenREPputline(prog,darstellungszeile(i));PER;.END PROCgleichungsprozeduren;
+TEXT PROCelan(TEXT CONSTalt):INT VARi:=1;TEXT VARt:="";FORiFROM1UPTO(LENGTHalt)REP IF(tanderstellei>=97CANDtanderstellei<=122)COR(tanderstellei>216CANDtanderstellei<=219)COR(tanderstellei>=48CANDtanderstellei<=57)THENtCATsubtext(alt,i,i)ELIF(tanderstellei>=65CANDtanderstellei<=
+90)THENtCATcode(tanderstellei+32)ELIF(tanderstellei>=214CANDtanderstellei<=216)THENtCATcode(tanderstellei+3)ELSEtCAT" "FI PER;t.tanderstellei:code(subtext(alt,i,i))END PROCelan;
+;OP:=(MODELLDGL VARmod,MODELLDGL CONSTm):CONCR(mod.name):=CONCR(m.name);CONCR(mod.variablen):=CONCR(m.variablen);CONCR(mod.covariablen):=CONCR(m.covariablen);CONCR(mod.parameter):=CONCR(m.parameter);CONCR(mod.darstellung):=CONCR(m.darstellung);mod.mitphasendiagramm:=m.mitphasendiagramm;mod.ganzzahlig:=m.ganzzahlig;mod.kombinationen.mitkombinationen:=m.kombinationen.mitkombinationen;mod.kombinationen.anzahl:=m.kombinationen.anzahl;INT VARi;FORiFROM1UPTOmaxdimensionREP CONCR(mod.kombinationen.paar(i)):=CONCR(m.kombinationen.paar(i))PER;mod.codeundinfo:=m.codeundinfo;CONCR(mod.beschraenkung):=CONCR(m.beschraenkung);CONCR(mod.demolauf.original):=CONCR(m.demolauf.original);CONCR(mod.demolauf.vergleich):=CONCR(m.demolauf.vergleich);mod.demolauf.xindex:=m.demolauf.xindex;mod.demolauf.yindex:=m.demolauf.yindex;mod.demolauf.automatisch:=m.demolauf.automatisch;mod.demolauf.variablenwahl:=m.demolauf.variablenwahl;mod.modellzustand:=m.modellzustand;mod.geschuetzt:=m.geschuetztEND OP:=;PROCwarteaufesc:TEXT VAReingabe;REPeingabe:=incharetyUNTILeingabe=escPER.END PROCwarteaufesc;PROCtasteeinlesen(TEXT VAReinlesetaste):REPeinlesetaste:=incharetyUNTIL
+einlesetaste<>""PER END PROCtasteeinlesen;TEXT PROCkomprimiere(TEXT CONSTt):TEXT VARergebnis,z;INT VARi,l;suchevonvorne;suchevonhinten;ersetzekern;ergebnis.suchevonvorne:l:=LENGTHt;FORiFROM1UPTOlREPz:=(tSUBi)UNTIL NOT(z=" "CORz="_")PER;IFi>lTHENergebnis:=""ELSEergebnis:=subtext(t,i,l);FI.suchevonhinten:l:=LENGTHergebnis;FORiFROMlDOWNTO1REPz:=(ergebnisSUBi)UNTIL NOT(z=" "CORz="_")PER;IFi<1THENergebnis:=""ELSEergebnis:=subtext(ergebnis,1,i);FI.ersetzekern:changeall(ergebnis,"_"," ").END PROCkomprimiere;BOOL PROCnichtuebersetzbar(TEXT CONSTtext):BOOL VARergebnis;disablestop;do(text);ergebnis:=iserror;IFiserrorTHENclearerrorFI;enablestop;ergebnisEND PROCnichtuebersetzbar;PROCsetzemodelltyp(BOOL CONSTwirkungsdiagramm):wd:=wirkungsdiagramm;END PROCsetzemodelltyp;BOOL PROCwirkungsdgr:wdEND PROCwirkungsdgr;END PACKETmodellbasis;
+
diff --git a/app/schulis-simulationssystem/3.0/src/modellwerte b/app/schulis-simulationssystem/3.0/src/modellwerte
new file mode 100644
index 0000000..931df75
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/modellwerte
@@ -0,0 +1,3 @@
+PACKETmodellwerteDEFINESwandle,modellwerteausgeben,delta,zahlen:LETheadvar=49,headpar=50,headzeit=51,headanfpkt=52,headbeob=53,headblanks=" ";LETintervallaenge=0.25;TEXT PROCwandle(REAL CONSTx,INT CONSTlaenge,frac):TEXT VARausgabe:="";INT VARi:=0;xgleichnull;xindezimaldarstellung;IFxzugrossTHENausgabe:=text(x,laenge);LEAVEwandleWITHausgabe;ELSE FORiFROMfrac+1UPTOlaenge-2REP IFxnichtzukleinTHENausgabe:=text(x,laenge,i);nullenstreichenmitverschieben(ausgabe);LEAVEwandleWITHausgabeFI;PER;ausgabe:=text(x,laenge);FI;ausgabe.xnichtzuklein:abs(x)>=10.0**(-i).xzugross:abs(x)>(10.0**(laenge-2))-10.0**(-1).ximnormalbereich:abs(x)<=(10.0**(laenge-frac+i-2))-10.0**(-frac+i-1)CANDabs(x)>=(10.0**(-frac+i)).xindezimaldarstellung:FORiFROM0UPTOfracREP IFximnormalbereichTHENausgabe:=text(x,laenge,frac-i);nullenstreichenohneverschieben(ausgabe);LEAVEwandleWITHausgabeFI;PER.xgleichnull:IFx=0.0THENausgabe:=text(0.0,laenge,frac);nullenstreichenohneverschieben(ausgabe);replace(ausgabe,laenge-frac+1,"0");LEAVEwandleWITHausgabe;FI.ENDPROCwandle;PROCnullenstreichenohneverschieben(TEXT VARausgabe):INT VARi;FORiFROMlength(ausgabe)DOWNTO1REP IFsubtext(ausgabe,i,i)="0"THENreplace(ausgabe,i," ")ELSE LEAVEnullenstreichenohneverschiebenFI;PER;ENDPROCnullenstreichenohneverschieben;PROCnullenstreichenmitverschieben(TEXT VARausgabe):INT VARi;FORiFROMlength(ausgabe)DOWNTO1REP IFsubtext(ausgabe,length(ausgabe),length(ausgabe))="0"THENausgabe:=" "+subtext(ausgabe,1,length(ausgabe)-1)ELSE LEAVEnullenstreichenmitverschiebenFI;PER;ENDPROCnullenstreichenmitverschieben;FILE PROCmodellwerteausgeben(LOESUNG CONSTloesung):LETdateiname=" modellwerte";ZUSTAND CONSTzustand:=STARTWERTloesung;PARAMETER CONSTparameter:=PARAMETERSATZloesung;REAL CONSTzeitpunkt:=STARTZEITloesung,beobachtungsdauer:=DAUERloesung;IFexists(dateiname)THENforget(dateiname,quiet)FI;FILE VARausgabe:=sequentialfile(output,dateiname);TEXT VARueberschrift,zahl;STRUCT(TEXTbezeichnung,REALmodellwert)VARzeile;INT VARi,laenge:=8,fracs:=2;IFdimension>0THENschreibevariablen;FI;IFparameteranzahl>0THENschreibeparameter;FI;schreibezeitangaben;ausgabe.schreibevariablen:ueberschrift:=headblanks+compress(meldungstext(headvar));putline(ausgabe,ueberschrift);FORiFROM1UPTOdimensionREPvariablenzeileausgebenPER.variablenzeileausgeben:zeile.bezeichnung:=(variablenname(i)+(30-(length(variablenname(i))))*" ");zeile.modellwert:=zustandSUBi;zahl:=wandle(zeile.modellwert,laenge,fracs);putline(ausgabe,zeile.bezeichnung+zahl).schreibeparameter:putline(ausgabe," ");ueberschrift:=headblanks+compress(meldungstext(headpar));putline(ausgabe,ueberschrift);FORiFROM1UPTOparameteranzahlREPparameterzeileausgebenPER.parameterzeileausgeben:zeile.bezeichnung:=(parametername(i)+(30-(length(parametername(i))))*" ");zeile.modellwert:=parameterSUBi;zahl:=wandle(zeile.modellwert,laenge,fracs);putline(ausgabe,zeile.bezeichnung+zahl).schreibezeitangaben:putline(ausgabe," ");ueberschrift:=headblanks+compress(meldungstext(headzeit));putline(ausgabe,ueberschrift);zeile.bezeichnung:=meldungstext(headanfpkt);zeile.bezeichnung:=zeile.bezeichnung+(30-length(zeile.bezeichnung))*" ";zeile.modellwert:=zeitpunkt;zahl:=wandle(zeile.modellwert,laenge,fracs);putline(ausgabe,zeile.bezeichnung+zahl);zeile.bezeichnung:=meldungstext(headbeob);zeile.bezeichnung:=zeile.bezeichnung+(30-length(zeile.bezeichnung))*" ";zeile.modellwert:=beobachtungsdauer;zahl:=wandle(zeile.modellwert,laenge,fracs);putline(ausgabe,zeile.bezeichnung+zahl).ENDPROCmodellwerteausgeben;PROCzahlen(REAL CONSTmin,max,ROW3REAL VARschoenezahlen):REAL VARmi,ma,g1,g2,g3;bildenderteilintervalle;ermittelnschoenerzahlen.bildenderteilintervalle:g1:=(min+(max-min)*intervallaenge/2.0);g2:=(((max-min)*(intervallaenge/2.0)));g3:=(max-(max-min)*intervallaenge/2.0);.intervall1:mi:=min;ma:=g1.intervall2:mi:=((min+max)/2.0)-g2;ma:=((min+max)/2.0)+g2.intervall3:mi:=g3;ma:=max.ermittelnschoenerzahlen:intervall1;schoenezahlen(1):=schoenezahl(mi,ma);intervall2;schoenezahlen(2):=schoenezahl(mi,ma);intervall3;
+schoenezahlen(3):=schoenezahl(mi,ma).END PROCzahlen;REAL PROCschoenezahl(REAL CONSTminimum,maximum,):INT VARschalter:=0;REAL VARz,a;IFnullimintervallTHENa:=0.0ELSE IFminimum>=0.0THENmax:=maximum;min:=minimum;a:=positivesintervallELIFmaximum<=0.0THEN REAL VARmax:=ABSminimum;REAL VARmin:=ABSmaximum;schalter:=1;a:=positivesintervallELSEa:=0.0FI;FI;a.nullimintervall:0.0>=minimumAND0.0<=minimum.positivesintervall:exponentenermitteln;zahlermitteln.exponentenermitteln:INT VARi:=decimalexponent(max);.zahlermitteln:REAL VARd:=0.0,zplus5;REPd:=10.0**(i);z:=floor(max/d)*(d);zplus5:=z+5.0*10.0**(i-1);IFmin<=zANDz<=maxTHEN IFschalter=1THENz:=-zFI;LEAVEzahlermittelnWITHzELIFmin<=zplus5ANDzplus5<=maxTHENz:=zplus5;IFschalter=1THENz:=-zFI;LEAVEzahlermittelnWITHzELSEiDECR1FI PER;0.0.END PROCschoenezahl;LETcaschritte=5.0;REAL PROCdelta(REAL CONSTminimum,maximum):REAL VARlaenge:=(maximum-minimum)/caschritte;exponentenermitteln;zahlermitteln.exponentenermitteln:INT VARi:=decimalexponent(laenge);.zahlermitteln:REAL VARd,z,fuenfmald;d:=10.0**i;z:=floor(laenge/d)*d;fuenfmald:=5.0*d;IFfuenfmald<=laengeTHENfuenfmaldELSEzFI END PROCdelta;ENDPACKETmodellwerte;
+
diff --git a/app/schulis-simulationssystem/3.0/src/neue startschl b/app/schulis-simulationssystem/3.0/src/neue startschl
new file mode 100644
index 0000000..850f251
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/neue startschl
@@ -0,0 +1,3 @@
+PACKETstartinmanagergrafiktaskDEFINESmanagerschleife:INT CONSTeingabevomkanal:=-4,existiertnicht:=-1,nichtempfangsbereit:=-2;LETuebersetzungsfile="uebersetzungsdatei",kanalgeraetetask=1,modellbankverwaltung="MODELLBANKVERWALTUNG",menukarteinstallieren="installmenu(""ls-MENUKARTE:Simsel"",FALSE)",dglmodell=1,wdmodell=2,okcode=0,tasknamefuersohn="-",msgmodelldaten=2,msgoriginalkurve=3,msgvergleichskurve=4,msggleichungen=5,msgdglsimulation=6,msgwdinfotext=7,msgwdsimulation=9,wiederaufsetzen=10,aufruf="wahl der bearbeitung (PROC f , PROC co f, PROC darstellung 4) ;";TASK VARsohntask:=niltask;TEXT VARfehlertext:="";PROCmanagerschleife:DATASPACE VARtransportds;INT VARmesscode,retcode;INT VARinfoint:=0;TASK VARauftraggeber,kontrolltask:=/modellbankverwaltung;disablestop;break(quiet);REPkernvonmanagerschleifePER.kernvonmanagerschleife:retcode:=0;wait(transportds,messcode,auftraggeber);IFauftraggeber=kontrolltaskTHEN IFmesscode=msgmodelldatenTHENrichtesohneinundsendemodelldaten;ELIFmesscode=msgoriginalkurveTHENsendeaktuellenmesscode;ELIFmesscode=msgvergleichskurveTHENsendeaktuellenmesscode;ELIFmesscode=msggleichungenTHENsendeaktuellenmesscode;ELIFmesscode=msgdglsimulationTHENstartedglsimulationinsohntask;ELIFmesscode=msgwdinfotextTHENsendeaktuellenmesscode;ELIFmesscode=msgwdsimulationTHENstartewdsimulationinsohntask;FI;transportds:=nilspace;auftraggeber:=kontrolltask;infoint:=0;send(auftraggeber,retcode,transportds,infoint);forget(transportds);FI;fehlerbehandlung.fehlerbehandlung:IFiserrorTHENclearerrorFI.richtesohneinundsendemodelldaten:IFexists(son(myself))THENend(son(myself));FI;begin(tasknamefuersohn,PROCstartprocfuersimulationstask,sohntask);REP UNTILexists(sohntask)CANDstatus(sohntask)=2PER;schickeansohntask(transportds,messcode,retcode);.sendeaktuellenmesscode:schickeansohntask(transportds,messcode,retcode);.startedglsimulationinsohntask:schickeansohntask(transportds,messcode,retcode);end(son(myself));.startewdsimulationinsohntask:schickeansohntask(transportds,messcode,retcode);end(son(myself));.END PROCmanagerschleife;PROCschickeansohntask(DATASPACE VARdatenraum,INT CONSTverarbeitung,INT VARret):TASK VARzieltask:=sohntask,kontrolltask:=sohntask;ret:=okcode;REP REP UNTILstatus(zieltask)=2PER;zieltask:=sohntask;send(zieltask,verarbeitung,datenraum,ret);forget(datenraum);IFret<>existiertnichtCANDret<>nichtempfangsbereitTHENzieltask:=kontrolltask;wait(datenraum,ret,zieltask);forget(datenraum);FI;LEAVEschickeansohntask;PER;END PROCschickeansohntask;PROCstartprocfuersimulationstask:disablestop;bearbeiteauftrag;IFiserrorTHENclearerror;DATASPACE VARtransporter:=nilspace;INT VARnachricht:=wiederaufsetzen,return:=0;TASK VARdestinationtask:=father;REP UNTILstatus(destinationtask)=2PER;send(destinationtask,nachricht,transporter,return);FI;.END PROCstartprocfuersimulationstask;PROCbearbeiteauftrag:FILE VARfx;BOUND TEXT VARtx;DATASPACE VARtransportdatenraum;INT VARmsgtype;TASK VARsourcetask:=father,destinationtask:=father;enablestop;REPwait(transportdatenraum,msgtype,sourcetask);verarbeitebotschaft;UNTILinstallationfertigPER;.installationfertig:msgtype=msgdglsimulationORmsgtype=msgwdsimulation.verarbeitebotschaft:IFsourcetask=fatherTHEN IFmsgtype=msgmodelldatenTHENkopieremodelldaten;ELIFmsgtype=msgoriginalkurveTHENkopiereoriginalkurve;ELIFmsgtype=msgvergleichskurveTHENkopierevergleichskurve;ELIFmsgtype=msggleichungenTHENkopieregleichungen;ELIFmsgtype=msgdglsimulationTHENstartedglsimulation;ELIFmsgtype=msgwdinfotextTHENkopiereinfotextwd;ELIFmsgtype=msgwdsimulationTHENstartewdsimulation;ELIFmsgtype=eingabevomkanalTHEN REP UNTILincharety=""PER;forget(transportdatenraum);LEAVEverarbeitebotschaftELSEforget(transportdatenraum);LEAVEverarbeitebotschaftFI;ELSE IFmsgtype=eingabevomkanalTHEN REP UNTILincharety=""PER;FI;forget(transportdatenraum);LEAVEverarbeitebotschaftFI;sendeantwort;.kopieremodelldaten:BOUND MODELLDGL VARmodelltransporter;MODELLDGL VARaktuellesmodell;texteankoppeln;modelltransporter:=transportdatenraum;aktuellesmodell:=
+modelltransporter;kopplean(aktuellesmodell);.kopiereoriginalkurve:forget(vorgabekurve,quiet);copy(transportdatenraum,vorgabekurve);.kopierevergleichskurve:forget(vorgabevergleichskurve,quiet);copy(transportdatenraum,vorgabevergleichskurve);.kopieregleichungen:forget(modelldatenraum,quiet);copy(transportdatenraum,modelldatenraum);kopplean(aktuellesmodell);.kopiereinfotextwd:uebergebeinfotextfuerwd(transportdatenraum);.startedglsimulation:startesimulation(dglmodell,transportdatenraum);forget(vorgabekurve,quiet);forget(vorgabevergleichskurve,quiet);forget(modelldatenraum,quiet);.startewdsimulation:startesimulation(wdmodell,transportdatenraum);.sendeantwort:transportdatenraum:=nilspace;msgtype:=okcode;destinationtask:=father;REP UNTILstatus(destinationtask)=2PER;send(destinationtask,msgtype,transportdatenraum).END PROCbearbeiteauftrag;PROCstartesimulation(INT CONSTmodelltyp,DATASPACE VARwddsfertigegleichungen):FILE VARrundatei;enablestop;continue(kanalgeraetetask);setzemodelltyp(modelltyp=wdmodell);forget(uebersetzungsfile,quiet);IFmodelltyp=dglmodellTHENgleichungsprozeduren(uebersetzungsfile)ELIFmodelltyp=wdmodellTHENcopy(wddsfertigegleichungen,uebersetzungsfile)FI;rundatei:=sequentialfile(output,uebersetzungsfile);putline(rundatei,"continue ( "+text(kanalgeraetetask)+");");putline(rundatei,aufruf);do(menukarteinstallieren);break(quiet);uebersetze;break(quiet);.uebersetze:run(uebersetzungsfile);forget(uebersetzungsfile,quiet);.END PROCstartesimulation;END PACKETstartinmanagergrafiktask;
+
diff --git a/app/schulis-simulationssystem/3.0/src/o b/app/schulis-simulationssystem/3.0/src/o
new file mode 100644
index 0000000..b5ca640
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/o
@@ -0,0 +1,2 @@
+PACKETobjektDEFINES OBJEKT,variable,ergebnis,parameter,formel,zeit,nil,:=,=,typ,typbezeichner,typkennzeichen,new,name,variablenname,ergaenzungsvariablenname,parametername,formelname,langname,kurzname,ausdruck,elanname:LETtypbezeichnervariable=511,typbezeichnerergebnis=512,typbezeichnerparameter=513,typbezeichnerformel=514,typbezeichnerzeit=515;LETelannamederzeit="zeit";TYPE TYP=INT;TYPE OBJEKT=STRUCT(TYPtyp,TEXTlangname,kurzname,elanname);TYP CONSTnil:=0,variable:=1,ergebnis:=2,parameter:=3,formel:=4,zeit:=5;OP:=(TYP VARt,INT CONSTi):CONCR(t):=iENDOP:=;OP:=(TYP VARl,TYP CONSTr):CONCR(l):=CONCR(r)ENDOP:=;BOOL OP=(TYP CONSTl,TYP CONSTr):CONCR(l)=CONCR(r)ENDOP=;TEXT PROCtypbezeichner(OBJEKT CONSTobj):TYP VARobjekttyp:=obj.typ;IFobjekttyp=variableTHENanwendungstext(typbezeichnervariable)ELIFobjekttyp=ergebnisTHENanwendungstext(typbezeichnerergebnis)ELIFobjekttyp=parameterTHENanwendungstext(typbezeichnerparameter)ELIFobjekttyp=formelTHENanwendungstext(typbezeichnerformel)ELIFobjekttyp=zeitTHENanwendungstext(typbezeichnerzeit)ELSE""FI END PROCtypbezeichner;TEXT PROCtypkennzeichen(OBJEKT CONSTobj):TYP VARobjekttyp:=obj.typ;IFobjekttyp=variableTHEN"v"ELIFobjekttyp=ergebnisTHEN"e"ELIFobjekttyp=parameterTHEN"p"ELIFobjekttyp=formelTHEN"f"ELIFobjekttyp=zeitTHEN"z"ELSEwaagerechtFI END PROCtypkennzeichen;OBJEKT PROCnew(TYP CONSTtyp):OBJEKT VARo;IFtyp=zeitTHENnewtimeELSE CONCR(o.typ):=CONCR(typ);o.langname:="";o.kurzname:="";o.elanname:="";oFI END PROCnew;OBJEKT PROCnewtime:OBJEKT VARo;CONCR(o.typ):=CONCR(zeit);o.langname:=anwendungstext(typbezeichnerzeit);o.kurzname:=o.langname;o.elanname:=elannamederzeit;oEND PROCnewtime;OP:=(OBJEKT VARl,OBJEKT CONSTr):CONCR(l):=CONCR(r);END OP:=;TEXT PROCname(OBJEKT CONSTo):o.langnameEND PROCname;TYP PROCtyp(OBJEKT CONSTo):o.typEND PROCtyp;TEXT PROClangname(OBJEKT CONSTo):o.langnameEND PROClangname;TEXT PROCkurzname(OBJEKT CONSTo):o.kurznameEND PROCkurzname;TEXT PROCausdruck(OBJEKT CONSTo):o.kurznameEND PROCausdruck;TEXT PROCelanname(OBJEKT CONSTo):o.elannameEND PROCelanname;PROCname(OBJEKT VARo,TEXT CONSTt):o.langname:=tEND PROCname;PROCvariablenname(OBJEKT VARo,TEXT CONSTl,k,e):IFo.typ=variableTHENo.langname:=l;o.kurzname:=k;o.elanname:=eFI END PROCvariablenname;PROCergaenzungsvariablenname(OBJEKT VARo,TEXT CONSTl,k,e):IFo.typ=ergebnisTHENo.langname:=l;o.kurzname:=k;o.elanname:=eFI END PROCergaenzungsvariablenname;PROCparametername(OBJEKT VARo,TEXT CONSTl,e):IFo.typ=parameterTHENo.langname:=l;o.elanname:=eFI END PROCparametername;PROCformelname(OBJEKT VARo,TEXT CONSTl,e,a):IFo.typ=formelTHENo.langname:=l;o.elanname:=e;o.kurzname:=aFI END PROCformelname;END PACKETobjekt;
+
diff --git a/app/schulis-simulationssystem/3.0/src/op1 b/app/schulis-simulationssystem/3.0/src/op1
new file mode 100644
index 0000000..1874496
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/op1
@@ -0,0 +1,4 @@
+PACKETobjektrepraesentation1DEFINESbewegecursorauflinkpositionen,zeichneverbindung,gibinformation,box,boxohnerahmen,objekttext:LETmaxlink=8;LETrechts=1,links=2,oben=3,unten=4,stern="*",blank=" ",maxlength=9,plus=" + ",differentialzeichen="d ",rand=" ",zuweisung=" = ";WINDOW VARfenster:=standardfenster;PROCboxaufbs(OBJEKT CONSTobj,INT CONSTi,j,BOOL CONSTbelegt):IFbelegtTHENschreibevolleboxaufbs;ELSEschreibeleereboxaufbs;FI.schreibevolleboxaufbs:newout(fenster,i,j,eckeobenlinks+typkennzeichen(obj)+((maxlength-1)*waagerecht)+eckeobenrechts);newout(fenster,i,j+1,senkrecht+objektname(obj)+senkrecht);newout(fenster,i,j+2,eckeuntenlinks+(maxlength*waagerecht)+eckeuntenrechts);.schreibeleereboxaufbs:TEXT CONSTleer:=(maxlength+2)*blank;newout(fenster,i,j,leer);newout(fenster,i,j+1,leer);newout(fenster,i,j+2,leer).END PROCboxaufbs;PROCbox(INT CONSTi,j):CELL CONSTc:=cell(i,j);box(objekt(c),gpos(mpos(c)),belegt(c))END PROCbox;PROCbox(OBJEKT CONSTobj,GPOS CONSTgitterpos,BOOL CONSTstatus):IFimgitter(gitterpos)THENboxaufbs(obj,iwindowpos(gitterpos),jwindowpos(gitterpos),status)FI END PROCbox;TEXT PROCobjektname(OBJEKT CONSTobj):blank+text(name(obj),maxlength-2)+ggfstern.ggfstern:IFlength(name(obj))>(maxlength-2)THENsternELSEblankFI.END PROCobjektname;PROCboxohnerahmen(OBJEKT CONSTobj,GPOS CONSTgitterpos):IFimgitter(gitterpos)THENboxohnerahmenaufbs(obj,iwindowpos(gitterpos),jwindowpos(gitterpos))FI END PROCboxohnerahmen;PROCboxohnerahmenaufbs(OBJEKT CONSTobj,INT CONSTi,j):newout(fenster,i+1,j+1,objektname(obj))END PROCboxohnerahmenaufbs;PROCnewout(TEXT CONSTt):INT VARi,j;getcursor(fenster,i,j);newout(fenster,i,j,t)END PROCnewout;PROClineout(TEXT CONSTt):INT VARi,j;getcursor(fenster,i,j);lineout(fenster,i,j,t)END PROClineout;INT PROCbewegecursorauflinkpositionen(GPOS CONSTgp,TEXT CONSTzulaessigepositionen):bewegebscursorauflinkpositionen(i,j,zulaessigepositionen).i:iwindowpos(gp).j:jwindowpos(gp).END PROCbewegecursorauflinkpositionen;INT PROCbewegebscursorauflinkpositionen(INT CONSTi,j,TEXT CONSTzulaessigepositionen):LETesc="�",return=" ";TEXT CONSTcursorbewegungen:="��";INT VARergebnis:=1;startpositioneinnehmen;REPlesetaste;bewegeggfcursorUNTILabbruchgewuenschtPER;behandleabbruch.startpositioneinnehmen:setzelinkposition(position,i,j).position:int(zulaessigepositionenSUBergebnis).lesetaste:TEXT VARtaste;inchar(taste).bewegeggfcursor:SELECTpos(cursorbewegungen,taste)OF CASE1:rechtsCASE2:linksEND SELECT.rechts:IFergebnis=length(zulaessigepositionen)THENergebnis:=1ELSEergebnisINCR1FI;setzelinkposition(position,i,j).links:IFergebnis=1THENergebnis:=length(zulaessigepositionen)ELSEergebnisDECR1FI;setzelinkposition(position,i,j).abbruchgewuenscht:taste=escORtaste=return.behandleabbruch:IFtaste=escTHEN0ELSEpositionFI.END PROCbewegebscursorauflinkpositionen;PROCsetzelinkposition(INT CONSTergebnis,i,j):SELECTergebnisOF CASE1,2,3:cursor(fenster,i+2*ergebnis+1,j)CASE4:cursor(fenster,i+maxlength+1,j+1)CASE5,6,7:cursor(fenster,i+2*(maxlink-ergebnis)+1,j+2)CASE8:cursor(fenster,i,j+1)ENDSELECT END PROCsetzelinkposition;PROCsetzelinkposition(INT CONSTergebnis,GPOS CONSTgp):setzelinkposition(ergebnis,i,j).i:iwindowpos(gp).j:jwindowpos(gp).END PROCsetzelinkposition;PROCsetzestartposition(INT CONSTergebnis,INT VARi,j):SELECTergebnisOF CASE1,2,3:i:=i+2*ergebnis+1;jDECR1CASE4:i:=i+maxlength+2;jINCR1CASE5,6,7:i:=i+2*(maxlink-ergebnis)+1;jINCR3CASE8:iDECR1;jINCR1ENDSELECT END PROCsetzestartposition;PROCzeichneverbindung(MPOS CONSTvon,INT CONSTvonnr,MPOS CONSTbis,INT CONSTbisnr):INT VARvi,vj,bi,bj,ai,aj,alterichtung,neuerichtung;GPOS VARgvon,gbis;IF NOT(imgitter(von)ORimgitter(bis))THEN LEAVEzeichneverbindungFI;bestimmeviundvj;bestimmebiundbj;gehevonspalteviinzeilevjnachzeilebj;gehenachspaltebi;IFimgitter(bis)THENschreibeendsymbolFI.bestimmeviundvj:IFimgitter(von)THENgvon:=gpos(von);vi:=iwindowpos(gvon);vj:=jwindowpos(gvon);setzelinkposition(vonnr,gvon);schreibestartsymbol;setzestartposition(vonnr,vi,vj);IF NOTimgitter(bis)THENbi:=randwertfuerbi;bj:=randwertfuerbj
+FI;FI.bestimmebiundbj:IFimgitter(bis)THENgbis:=gpos(bis);bi:=iwindowpos(gbis);bj:=jwindowpos(gbis);setzestartposition(bisnr,bi,bj);IF NOTimgitter(von)THENvi:=randwertfuervi;vj:=randwertfuervjFI;FI.randwertfuerbi:IFimpos(bis)=impos(von)THENviELIFimpos(bis)<impos(gitterstart)THEN1ELIFimpos(bis)<=impos(gitterstart)+igittersize-1THENiwindowpos(gpos(newmpos(impos(bis),jmpos(von))))ELSEareaxsize(standardfenster)FI.randwertfuerbj:IFjmpos(bis)=jmpos(von)THENvjELIFjmpos(bis)<jmpos(gitterstart)THEN1ELIFjmpos(bis)<=jmpos(gitterstart)+jgittersize-1THENjwindowpos(gpos(newmpos(impos(von),jmpos(bis))))ELSEareaysize(standardfenster)FI.randwertfuervi:IFimpos(von)=impos(bis)THENbiELIFimpos(von)<impos(gitterstart)THEN1ELIFimpos(von)<=impos(gitterstart)+igittersize-1THENiwindowpos(gpos(newmpos(impos(von),jmpos(bis))))ELSEareaxsize(standardfenster)FI.randwertfuervj:IFjmpos(bis)=jmpos(von)THENbjELIFjmpos(von)<jmpos(gitterstart)THEN1ELIFjmpos(von)<=jmpos(gitterstart)+jgittersize-1THENjwindowpos(gpos(newmpos(impos(bis),jmpos(von))))ELSEareaysize(standardfenster)FI.gehevonspalteviinzeilevjnachzeilebj:ai:=vi;aj:=vj;neuerichtung:=anfangsrichtung;IFsuedostTHENgehetendenziellnachsuedostELIFsuedwestTHENgehetendenziellnachsuedwestELIFnordostTHENgehetendenziellnachnordostELSEgehetendenziellnachnordwestFI.suedost:aj<bjANDai<bi.suedwest:aj<bjANDai>=bi.nordost:aj>=bjANDai<bi.gehetendenziellnachsuedost:WHILE(aj<bj)OR(NOTzeilefrei)REP IFuntenplatzTHENgeheevtlnachuntenELIFrechtsplatzTHENnachrechts(alterichtung,neuerichtung,ai,aj)FI PER.gehetendenziellnachsuedwest:WHILE(aj<bj)OR(NOTzeilefrei)REP IFuntenplatzTHENgeheevtlnachuntenELIFlinksplatzTHENnachlinks(alterichtung,neuerichtung,ai,aj)FI PER.gehetendenziellnachnordost:WHILE(aj>bj)OR(NOTzeilefrei)REP IFobenplatzTHENgeheevtlnachobenELIFrechtsplatzTHENnachrechts(alterichtung,neuerichtung,ai,aj)FI PER.gehetendenziellnachnordwest:WHILE(aj>bj)OR(NOTzeilefrei)REP IFobenplatzTHENgeheevtlnachobenELIFlinksplatzTHENnachlinks(alterichtung,neuerichtung,ai,aj)FI PER.gehenachspaltebi:IFai<biTHEN WHILE NOT(ai=bi)REPnachrechts(alterichtung,neuerichtung,ai,aj)PER ELIFai>biTHEN WHILE NOT(ai=bi)REPnachlinks(alterichtung,neuerichtung,ai,aj)PER FI;IFaj<bjTHEN WHILE NOT(aj=bj)REPnachunten(alterichtung,neuerichtung,ai,aj)PER ELIFaj>bjTHEN WHILE NOT(aj=bj)REPnachoben(alterichtung,neuerichtung,ai,aj)PER FI.geheevtlnachunten:IFobjektenichtingleichergitterspalteANDletzterichtunglinksoderrechtsANDstartpunktuntenoderobenanderboxTHENfuehreeinenschrittindieletzterichtungausFI;nachunten(alterichtung,neuerichtung,ai,aj).objektenichtingleichergitterspalte:igpos(gvon)<>igpos(gbis).letzterichtunglinksoderrechts:neuerichtung=rechtsORneuerichtung=links.startpunktuntenoderobenanderbox:vonnr<4OR(vonnr>4ANDvonnr<8).geheevtlnachoben:IFobjektenichtingleichergitterspalteANDletzterichtunglinksoderrechtsANDstartpunktuntenoderobenanderboxTHENfuehreeinenschrittindieletzterichtungausFI;nachoben(alterichtung,neuerichtung,ai,aj).fuehreeinenschrittindieletzterichtungaus:IFneuerichtung=rechtsTHENnachrechts(alterichtung,neuerichtung,ai,aj)ELSEnachlinks(alterichtung,neuerichtung,ai,aj)FI.zeilefrei:INT VARax:=areax(fenster);zwischenraumohnebox(areay(fenster)+aj-1,min(ax+ai-1,ax+bi-1),max(ax+ai-1,ax+bi-1)).anfangsrichtung:SELECTvonnrOF CASE1,2,3:lineout(fenster,ai,aj,senkrecht);obenCASE4:lineout(fenster,ai,aj,waagerecht);rechtsCASE5,6,7:lineout(fenster,ai,aj,senkrecht);untenCASE8:lineout(fenster,ai,aj,waagerecht);linksOTHERWISE0END SELECT.obenplatz:NOTinbox(ai,aj-1).untenplatz:NOTinbox(ai,aj+1).rechtsplatz:NOTinbox(ai+1,aj).linksplatz:NOTinbox(ai-1,aj).schreibestartsymbol:lineout(startsymbol).startsymbol:SELECTvonnrOF CASE1,2,3:"^"CASE4:">"CASE5,6,7:"v"CASE8:"<"OTHERWISE""END SELECT.schreibeendsymbol:TEXT VARendsymbol:=pfeil;setzelinkposition(bisnr,gbis);lineout(endsymbol).pfeil:SELECTbisnrOF CASE1,2,3:lineout(fenster,bi,bj,ecksymbol(neuerichtung,unten));"v"CASE4:lineout(fenster,bi,bj,ecksymbol(neuerichtung,links));"<"CASE5,6,7:lineout(fenster,bi,bj,ecksymbol(
+neuerichtung,oben));"^"CASE8:lineout(fenster,bi,bj,ecksymbol(neuerichtung,rechts));">"OTHERWISE""END SELECT.END PROCzeichneverbindung;PROCnachrechts(INT VARalterichtung,neuerichtung,ai,aj):alterichtung:=neuerichtung;neuerichtung:=rechts;richtungswechsel(alterichtung,neuerichtung,ai,aj);aiINCR1;lineout(fenster,ai,aj,waagerecht)END PROCnachrechts;PROCnachlinks(INT VARalterichtung,neuerichtung,ai,aj):alterichtung:=neuerichtung;neuerichtung:=links;richtungswechsel(alterichtung,neuerichtung,ai,aj);aiDECR1;lineout(fenster,ai,aj,waagerecht)END PROCnachlinks;PROCnachoben(INT VARalterichtung,neuerichtung,ai,aj):alterichtung:=neuerichtung;neuerichtung:=oben;richtungswechsel(alterichtung,neuerichtung,ai,aj);ajDECR1;lineout(fenster,ai,aj,senkrecht)END PROCnachoben;PROCnachunten(INT VARalterichtung,neuerichtung,ai,aj):alterichtung:=neuerichtung;neuerichtung:=unten;richtungswechsel(alterichtung,neuerichtung,ai,aj);ajINCR1;lineout(fenster,ai,aj,senkrecht)END PROCnachunten;PROCrichtungswechsel(INT CONSTalterichtung,neuerichtung,ai,aj):IFalterichtung<>neuerichtungTHEN TEXT VARecke:=ecksymbol(alterichtung,neuerichtung);IFecke<>""THENlineout(fenster,ai,aj,ecke)FI FI END PROCrichtungswechsel;TEXT PROCecksymbol(INT CONSTalt,neu):SELECTaltOF CASEunten:altuntenCASEoben:altobenCASErechts:altrechtsCASElinks:altlinksOTHERWISE""END SELECT.altunten:SELECTneuOF CASErechts:eckeuntenlinksCASElinks:eckeuntenrechtsOTHERWISE""END SELECT.altrechts:SELECTneuOF CASEunten:eckeobenrechtsCASEoben:eckeuntenrechtsOTHERWISE""END SELECT.altoben:SELECTneuOF CASErechts:eckeobenlinksCASElinks:eckeobenrechtsOTHERWISE""END SELECT.altlinks:SELECTneuOF CASEunten:eckeobenlinksCASEoben:eckeuntenlinksOTHERWISE""END SELECT.END PROCecksymbol;BOOL PROCinbox(INT CONSTi,j):inboxspeicher(areay(fenster)+j-1,areax(fenster)+i-1)<>blankEND PROCinbox;PROCgibinformation(INT CONSTnr):IFnr>0THEN WINDOW VARw:=window(1,2,79,23);boxinfo(w,anwendungstext(nr))FI END PROCgibinformation;PROCobjekttext(FILE VARf,MPOS CONSTmp):IFtyp(objekt(mp))=variableTHENstelledifferentialquotientenzusammenELIFtyp(objekt(mp))=ergebnisTHENstellesummezusammenELIFtyp(objekt(mp))=parameterTHENzeigenamenELIFtyp(objekt(mp))=formelTHENinformiereueberarithmetischenausdruckFI.zeigenamen:putline(f,rand+elanname(objekt(mp)));line(f).stelledifferentialquotientenzusammen:stellelinkeseitederdglzusammen;schreibenenner;schreibebruchstrichundrechteseite;schreibezaehler;line(f).stellesummezusammen:putline(f,rand+elanname(objekt(mp))+zuweisung+summederankommendenpfeile);line(f).stellelinkeseitederdglzusammen:TEXT VARnenner:=differentialzeichen+elanname(objekt(mp)),zaehler:=differentialzeichen+elanname(new(zeit)),strich:=max(LENGTHnenner,LENGTHzaehler)*"-".schreibenenner:putline(f,rand+(abs((LENGTHstrich)-(LENGTHnenner))DIV2)*blank+nenner).schreibebruchstrichundrechteseite:putline(f,rand+strich+zuweisung+summederankommendenpfeile).schreibezaehler:putline(f,rand+(abs((LENGTHstrich)-(LENGTHzaehler))DIV2)*blank+zaehler).summederankommendenpfeile:IFkeineverbindungvonanderenobjektenaufgebautTHEN"0.0"ELSE TEXT VARterm:="";FORiFROM1UPTOmaxlinkREPnotiereeinquellobjektPER;subtext(term,1,(LENGTHterm)-(LENGTHplus))FI.notiereeinquellobjekt:IFcEINGANGiTHENtermCATnamederquelle;termCATplusFI.namederquelle:elanname(objekt(quelle)).quelle:quellenposition.quellenposition:cUEBERi.keineverbindungvonanderenobjektenaufgebaut:INT VARi,z:=0;FORiFROM1UPTOmaxlinkREP IFcEINGANGiTHENzINCR1FI PER;z=0.c:cell(mp).informiereueberarithmetischenausdruck:putline(f,rand+elanname(objekt(mp))+zuweisung+ausdruck(objekt(mp)));line(f).END PROCobjekttext;END PACKETobjektrepraesentation1;
+
diff --git a/app/schulis-simulationssystem/3.0/src/op2 b/app/schulis-simulationssystem/3.0/src/op2
new file mode 100644
index 0000000..861939f
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/op2
@@ -0,0 +1,11 @@
+PACKETobjektrepraesentation2DEFINESvariableeditieren,parametereditieren,formeleditieren,termistkorrekt,listeallerbezeichner,boxvorhanden:LETzeitnichtalsvariable=520,leerebezeichnerlisteteil1=532,leerebezeichnerlisteteil2=533,leerebezeichnerlisteteil3=534,nurdieseelannamen=551,quithinweis=519,singularmodellgroesse=511,singularergebnis=512,singularparameter=513,singularformel=514,pluralformel=538,listedernamen=536,nochkeinenamenvergeben=537,tabellenkopf1=543,tabellenkopf2=550,tabellenkopf3=545,tabellenrumpf=546,tabellenfuss=547,hinweisleerername=523,hinweissyntaxfehler=524,hinweisdoppeltername=525,hinweislangername=526,hinweisformalerfehler=527,standardhinweis=528,hinweisfalscheranfang=529,ueberschriftfuervariable=530,ueberschriftfuerergaenzungsvariable=531,hinweisleererausdruck=539;LETlang=3,elan=4,kurz=5,aus=5,maxi=20,maxj=10,maxlink=8,maxlaengefuerdo=2000,hoch="�",runter="
+",return=" ",blank=" ",underscore="_",stern="*",info="?",pruefen="p",halt="v",zurueck="z",vtag=9,ptag=10,ftag=11,laengefuerformeln=300,laengefuernamen=30,laengefuerkurznamen=7,realvar="REAL VAR ",tag=1,delimiter=6;ROW100TEXT VARfeld;INT VARi;FORiFROM1UPTO100REPfeld(i):=""PER;ROWmaxlinkTEXT VARname;TEXT VARtaste;INT VARfeldnummer;BOOL VARboxaufgebaut:=FALSE;BOOL PROCboxvorhanden:boxaufgebautEND PROCboxvorhanden;PROCvariableeditieren(CELL CONSTactualcell,BOOL VARgespeichert,INT VARfehlercode,TEXT VARfehlermeldung):enablestop;TEXT VARzwischenspeicher:="",zwischenspeicherl:="",zwischenspeichere:="",zwischenspeicherk:="";taste:="";boxaufgebaut:=FALSE;BOOL VARlangnameok,elannameok,kurznameok;OBJEKT VARaktuellesobjekt:=objekt(actualcell);MPOS CONSTmp:=mpos(actualcell);gespeichert:=FALSE;pruefedentyp;baueboxumeingabefelderauf;repeatwechslezwischendeneingabefeldern;raeumebildschirmauf.pruefedentyp:.baueboxumeingabefelderauf:WINDOW VAReingabefenster:=window(6,3,32,8);TAG VARvariablentag:=formular(vtag);show(variablentag);outframe(eingabefenster);feld(2):=anwendungstext(ueberschrift);put(variablentag,feld(2),2);zeigealleeingabefelder;doublefootnote(anwendungstext(standardhinweis));setzecursoraufersteseingabefeld.ueberschrift:IFtyp(aktuellesobjekt)=variableTHENueberschriftfuervariableELSEueberschriftfuerergaenzungsvariableFI.zeigealleeingabefelder:belegefeld(langname(aktuellesobjekt),feld(lang),zwischenspeicherl,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerelannamen,feld(elan),zwischenspeichere,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerkurznamen,feld(kurz),zwischenspeicherk,laengefuerkurznamen);langnameok:=(length(langname(aktuellesobjekt))>0);elannameok:=(length(elanname(aktuellesobjekt))>0);kurznameok:=(length(kurzname(aktuellesobjekt))>0);BOOL VARersteeingabefuerkurznamen:=TRUE,ersteeingabefuerelannamen:=TRUE;put(variablentag,feld);.vorschlagoderletzteeingabefuerelannamen:elanname(aktuellesobjekt).vorschlagoderletzteeingabefuerkurznamen:kurzname(aktuellesobjekt).setzecursoraufersteseingabefeld:feldnummer:=lang;get(variablentag,feld(feldnummer),feldnummer,taste).repeatwechslezwischendeneingabefeldern:REP IFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=pruefenANDpruefenunsinnigTHENmeldeleerenausdruck(fehlercode)FI;wechslezwischendeneingabefeldernPER.pruefenunsinnig:NOTboxaufgebautANDfeld(lang)="".wechslezwischendeneingabefeldern:boxaufgebaut:=TRUE;SELECTfeldnummerOF CASElang:pruefelangnameCASEelan:pruefeelannameCASEkurz:pruefekurznameEND SELECT;behandletaste;gibggfstandardhinweisaus;gibggfvorgabefuerelannamenundkurznamen;putget(variablentag,feld(feldnummer),feldnummer,taste);.gibggfstandardhinweisaus:IFeingabenohnefehlundtadelTHENdoublefootnote(anwendungstext(standardhinweis));FI.gibggfvorgabefuerelannamenundkurznamen:IFkurznamebisherleerTHENersteeingabefuerkurznamen:=FALSE;belegefeld(letzteeingabefuerlangnamen,feld(kurz),zwischenspeicherk,laengefuerkurznamen);ELIFelannamebisherleerTHENersteeingabefuerelannamen:=FALSE;belegefeld(elanname(letzteeingabefuerlangnamen),feld(elan),zwischenspeichere,laengefuernamen);FI.
+kurznamebisherleer:ersteeingabefuerkurznamenAND(NOTkurznameok)ANDfeldnummer=kurz.elannamebisherleer:ersteeingabefuerelannamenAND(NOTelannameok)ANDfeldnummer=elan.letzteeingabefuerlangnamen:bereinigt(zwischenspeicherl).pruefelangname:IFlangnamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(lang));langnameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFlangnamegleichzeitTHENmeldezeitunzulaessig(fehlercode,fehlermeldung)ELIFlangnamezulangTHENmeldezulangennamen(fehlercode)ELIFlangnamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELSElangnameok:=TRUE;zwischenspeicherl:=feld(lang);vsetzeneuenfeldindexFI ELSEvsetzeneuenfeldindexFI.langnamemussgeprueftwerden:(zwischenspeicherl<>feld(lang))ORlangnamegleichzeitOR((zwischenspeicherl=feld(lang))AND NOTlangnameok).langnamegleichzeit:TEXT VARx:=zwischenspeicher;changeall(x," ","");(((xSUB1)="z")COR((xSUB1)="Z"))CAND(((xSUB2)="e")COR((xSUB2)="E"))CAND(((xSUB3)="i")COR((xSUB3)="I"))CAND(((xSUB4)="t")COR((xSUB4)="T"))AND(length(x)=4).pruefeelanname:IFelannamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(elan));elannameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFelannamemitfalschemanfangTHENmeldefalschenanfang(fehlercode)ELIFelannamemitfalschenzeichenTHENmeldeformalenfehler(fehlercode)ELIFelannamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELIFeingabeentsprichtnichtelannotationTHENmeldesyntaxverletzung(fehlercode,fehlermeldung)ELSEelannameok:=TRUE;zwischenspeichere:=feld(elan);vsetzeneuenfeldindexFI ELSEvsetzeneuenfeldindexFI.elannamemussgeprueftwerden:(zwischenspeichere<>feld(elan))OR((zwischenspeichere=feld(elan))AND NOTelannameok).pruefekurzname:IFkurznamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(kurz));kurznameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFkurznamezulangTHENmeldezulangennamen(fehlercode)ELIFkurznamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELSEzwischenspeicherk:=feld(kurz);kurznameok:=TRUE;vsetzeneuenfeldindexFI ELSEvsetzeneuenfeldindexFI.kurznamemussgeprueftwerden:(zwischenspeicherk<>feld(kurz))OR((zwischenspeicherk=feld(kurz))AND NOTkurznameok).behandletaste:IFtaste=pruefenANDeingabenohnefehlundtadelTHENschreibeeditiertesobjektzurueck;LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=infoTHENgibeditierhilfeFI.eingabenohnefehlundtadel:langnameokANDelannameokANDkurznameok.schreibeeditiertesobjektzurueck:zwischenspeichere:=bereinigt(zwischenspeichere);changeall(zwischenspeichere," ","");IFzwischenspeichere<>elanname(aktuellesobjekt)ANDelanname(aktuellesobjekt)<>""THENfuehrenamensaenderunginallenabhaengigenformelnaus(actualcell,zwischenspeichere)FI;IFtyp(aktuellesobjekt)=variableTHENvariablenname(aktuellesobjekt,bereinigt(zwischenspeicherl),bereinigt(zwischenspeicherk),zwischenspeichere);ELSEergaenzungsvariablenname(aktuellesobjekt,bereinigt(zwischenspeicherl),bereinigt(zwischenspeicherk),zwischenspeichere);FI;gespeichert:=TRUE;aktuellesobjektWRITEmp.nameleer:zwischenspeicher="".langnamenichteindeutig:NOTlangnameeindeutig(zwischenspeicher,mpos(actualcell)).elannamenichteindeutig:NOTelannameeindeutig(zwischenspeicher,mpos(actualcell)).elannamemitfalschemanfang:NOTimkleinenalphabet(zwischenspeicherSUB1).elannamemitfalschenzeichen:NOTelannamealphabetisch(zwischenspeicher).eingabeentsprichtnichtelannotation:fehlermeldung:="";NOTelannameistelanbezeichner(zwischenspeicher,fehlermeldung).kurznamenichteindeutig:NOTkurznameeindeutig(zwischenspeicher,mpos(actualcell)).langnamezulang:length(zwischenspeicher)>laengefuernamen.kurznamezulang:length(zwischenspeicher)>laengefuerkurznamen.raeumebildschirmauf:bsspeicherlesen(eingabefenster);raeumeeditierhilfeweg.END PROCvariableeditieren;PROCvsetzeneuenfeldindex:IFtaste=hochTHENfeldnummerDECR1ELIFtaste=runterORtaste=returnTHENfeldnummerINCR1FI;IFfeldnummer<langTHENfeldnummer:=kurzELIFfeldnummer>kurzTHENfeldnummer:=langFI END PROCvsetzeneuenfeldindex;PROCformeleditieren(CELL CONSTactualcell,BOOL VAR
+gespeichert,INT VARfehlercode,TEXT VARfehlermeldung):enablestop;TEXT VARzwischenspeicher:="",zwischenspeicherl:="",zwischenspeichere:="",zwischenspeicherf:="";taste:="";BOOL VARlangnameok,elannameok,formelok;OBJEKT VARaktuellesobjekt:=objekt(actualcell);MPOS CONSTmp:=mpos(actualcell);gespeichert:=FALSE;pruefedentyp;baueboxumeingabefelderauf;repeatwechslezwischendeneingabefeldern;raeumebildschirmauf.pruefedentyp:.baueboxumeingabefelderauf:WINDOW VAReingabefenster:=window(6,3,32,8);TAG VARformeltag:=formular(ftag);show(formeltag);outframe(eingabefenster);zulaessigebezeichnerzeigen;zeigealleeingabefelder;doublefootnote(anwendungstext(standardhinweis));setzecursoraufersteseingabefeld.zulaessigebezeichnerzeigen:INT VARi,k:=0,j:=0;TEXT VARzw:="";WINDOW VARbezeichnerfenster:=window(40,3,36,8);outframe(bezeichnerfenster);page(bezeichnerfenster);FORiFROM1UPTOmaxlinkREP IF(actualcellEINGANGi)THENzw:=compress(elanname(objekt(actualcellUEBERi)));name(i):=zw;changeall(name(i)," ","");IFname(i)<>""AND(NOTschondagewesen)THENschreibeggfueberschrift;out(bezeichnerfenster,ausgabevonzw);line(bezeichnerfenster)FI;kINCR1ELSEname(i):=""FI PER;IFkeinbezeichnervorhandenTHENputline(bezeichnerfenster,anwendungstext(leerebezeichnerlisteteil1));putline(bezeichnerfenster,anwendungstext(leerebezeichnerlisteteil2));putline(bezeichnerfenster,anwendungstext(leerebezeichnerlisteteil3))FI.schreibeggfueberschrift:IFersterbezeichnerTHENout(bezeichnerfenster,ueberschrift)FI.ersterbezeichner:k=0.keinbezeichnervorhanden:k=0.ueberschrift:center(bezeichnerfenster,invers(anwendungstext(nurdieseelannamen))).ausgabevonzw:IFlength(zw)>30THENsubtext(zw,1,30)+sternELSEzwFI.schondagewesen:FORjFROM1UPTOi-1REP IFname(j)=name(i)THEN LEAVEschondagewesenWITH TRUE FI PER;FALSE.zeigealleeingabefelder:belegefeld(langname(aktuellesobjekt),feld(lang),zwischenspeicherl,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerelannamen,feld(elan),zwischenspeichere,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerausdruck,feld(aus),zwischenspeicherf,max(laengefuerformeln,length(feld(aus))));langnameok:=(length(langname(aktuellesobjekt))>0);elannameok:=(length(elanname(aktuellesobjekt))>0);formelok:=arithmetischerausdruckistkorrekt(actualcell,bereinigt(zwischenspeicherf),fehlermeldung);BOOL VARersteeingabefuerelannamen:=TRUE;put(formeltag,feld);.vorschlagoderletzteeingabefuerelannamen:elanname(aktuellesobjekt).vorschlagoderletzteeingabefuerausdruck:BOOL VARfeldfuerausdruckgesperrt:=FALSE;IFausdruck(aktuellesobjekt)=""THENfeldfuerausdruckgesperrt:=TRUE;"0.0"ELSEausdruck(aktuellesobjekt)FI.setzecursoraufersteseingabefeld:IF NOTformelokTHENmeldesyntaxverletzung(fehlercode,fehlermeldung);feldnummer:=ausELSEfeldnummer:=langFI;get(formeltag,feld(feldnummer),feldnummer,taste).repeatwechslezwischendeneingabefeldern:REP IFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernFI;wechslezwischendeneingabefeldernPER.wechslezwischendeneingabefeldern:boxaufgebaut:=TRUE;SELECTfeldnummerOF CASElang:pruefelangnameCASEelan:pruefeelannameCASEaus:pruefeausdruckEND SELECT;behandletaste;gibggfstandardhinweisaus;gibggfvorgabefuerelannamen;putget(formeltag,feld(feldnummer),feldnummer,taste);.gibggfstandardhinweisaus:IFeingabenohnefehlundtadelTHENdoublefootnote(anwendungstext(standardhinweis))FI.gibggfvorgabefuerelannamen:IFelannamebisherleerTHENersteeingabefuerelannamen:=FALSE;belegefeld(elanname(letzteeingabefuerlangnamen),feld(elan),zwischenspeichere,laengefuernamen);FI.elannamebisherleer:ersteeingabefuerelannamenAND(NOTelannameok)ANDfeldnummer=elan.letzteeingabefuerlangnamen:bereinigt(zwischenspeicherl).pruefelangname:IFlangnamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(lang));langnameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFlangnamezulangTHENmeldezulangennamen(fehlercode)ELIFlangnamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELSElangnameok:=TRUE;zwischenspeicherl:=feld(lang);fsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI ELSEfsetzeneuenfeldindex(
+feldfuerausdruckgesperrt)FI.langnamemussgeprueftwerden:(zwischenspeicherl<>feld(lang))OR((zwischenspeicherl=feld(lang))AND NOTlangnameok).pruefeelanname:IFelannamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(elan));elannameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFelannamemitfalschemanfangTHENmeldefalschenanfang(fehlercode)ELIFelannamemitfalschenzeichenTHENmeldeformalenfehler(fehlercode)ELIFelannamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELIFeingabeentsprichtnichtelannotationTHENmeldesyntaxverletzung(fehlercode,fehlermeldung)ELSEelannameok:=TRUE;zwischenspeichere:=feld(elan);fsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI ELSEfsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI.elannamemussgeprueftwerden:(zwischenspeichere<>feld(elan))OR((zwischenspeichere=feld(elan))AND NOTelannameok).pruefeausdruck:IFausdruckmussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(aus));formelok:=FALSE;IFausdruckleerTHENmeldeleerenausdruck(fehlercode)ELIFcompilermeldetfehlerTHENmeldesyntaxverletzung(fehlercode,fehlermeldung)ELSEzwischenspeicherf:=feld(aus);formelok:=TRUE;fsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI ELSEfsetzeneuenfeldindex(feldfuerausdruckgesperrt)FI.ausdruckmussgeprueftwerden:(zwischenspeicherf<>feld(aus))OR((zwischenspeicherf=feld(aus))AND NOTformelok).behandletaste:IFtaste=pruefenANDeingabenohnefehlundtadelTHENschreibeeditiertesobjektzurueck;LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=infoTHENgibeditierhilfeFI.eingabenohnefehlundtadel:(langnameokANDelannameokANDformelok)OR(feldfuerausdruckgesperrtANDlangnameokANDelannameok).schreibeeditiertesobjektzurueck:zwischenspeichere:=bereinigt(zwischenspeichere);changeall(zwischenspeichere," ","");IFzwischenspeichere<>elanname(aktuellesobjekt)ANDelanname(aktuellesobjekt)<>""THENfuehrenamensaenderunginallenabhaengigenformelnaus(actualcell,zwischenspeichere)FI;formelname(aktuellesobjekt,bereinigt(zwischenspeicherl),zwischenspeichere,bereinigt(zwischenspeicherf));gespeichert:=TRUE;aktuellesobjektWRITEmp.ausdruckleer:zwischenspeicher="".nameleer:zwischenspeicher="".langnamenichteindeutig:NOTlangnameeindeutig(zwischenspeicher,mpos(actualcell)).elannamenichteindeutig:NOTelannameeindeutig(zwischenspeicher,mpos(actualcell)).elannamemitfalschemanfang:NOTimkleinenalphabet(zwischenspeicherSUB1).elannamemitfalschenzeichen:NOTelannamealphabetisch(zwischenspeicher).eingabeentsprichtnichtelannotation:fehlermeldung:="";NOTelannameistelanbezeichner(zwischenspeicher,fehlermeldung).compilermeldetfehler:fehlermeldung:="";NOTarithmetischerausdruckistkorrekt(actualcell,zwischenspeicher,fehlermeldung).langnamezulang:length(zwischenspeicher)>laengefuernamen.raeumebildschirmauf:bsspeicherlesen(eingabefenster);bsspeicherlesen(bezeichnerfenster);raeumeeditierhilfeweg.END PROCformeleditieren;PROCfsetzeneuenfeldindex(BOOL CONSTfeldfuerausdruckgesperrt):IFtaste=hochTHENfeldnummerDECR1ELIFtaste=runterORtaste=returnTHENfeldnummerINCR1FI;IFfeldfuerausdruckgesperrtTHEN IFfeldnummer<langTHENfeldnummer:=elanELIFfeldnummer>elanTHENfeldnummer:=langFI ELSE IFfeldnummer<langTHENfeldnummer:=ausELIFfeldnummer>ausTHENfeldnummer:=langFI FI END PROCfsetzeneuenfeldindex;PROCparametereditieren(CELL CONSTactualcell,BOOL VARgespeichert,INT VARfehlercode,TEXT VARfehlermeldung):enablestop;TEXT VARzwischenspeicher:="",zwischenspeicherl:="",zwischenspeichere:="";taste:="";BOOL VARlangnameok,elannameok;OBJEKT VARaktuellesobjekt:=objekt(actualcell);MPOS CONSTmp:=mpos(actualcell);gespeichert:=FALSE;pruefedentyp;baueboxumeingabefelderauf;repeatwechslezwischendeneingabefeldern;raeumebildschirmauf.pruefedentyp:.baueboxumeingabefelderauf:WINDOW VAReingabefenster:=window(6,3,32,6);TAG VARvariablentag:=formular(ptag);show(variablentag);outframe(eingabefenster);zeigealleeingabefelder;doublefootnote(anwendungstext(standardhinweis));setzecursoraufersteseingabefeld.zeigealleeingabefelder:belegefeld(langname(aktuellesobjekt),feld(lang),
+zwischenspeicherl,laengefuernamen);belegefeld(vorschlagoderletzteeingabefuerelannamen,feld(elan),zwischenspeichere,laengefuernamen);langnameok:=(length(langname(aktuellesobjekt))>0);elannameok:=(length(elanname(aktuellesobjekt))>0);BOOL VARersteeingabefuerelannamen:=TRUE;put(variablentag,feld);.vorschlagoderletzteeingabefuerelannamen:elanname(aktuellesobjekt).setzecursoraufersteseingabefeld:feldnummer:=lang;get(variablentag,feld(feldnummer),feldnummer,taste).repeatwechslezwischendeneingabefeldern:REP IFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernFI;wechslezwischendeneingabefeldernPER.wechslezwischendeneingabefeldern:boxaufgebaut:=TRUE;SELECTfeldnummerOF CASElang:pruefelangnameCASEelan:pruefeelannameEND SELECT;behandletaste;gibggfstandardhinweisaus;gibggfvorgabefuerelannamen;putget(variablentag,feld(feldnummer),feldnummer,taste);.gibggfstandardhinweisaus:IFeingabenohnefehlundtadelTHENdoublefootnote(anwendungstext(standardhinweis))FI.gibggfvorgabefuerelannamen:IFelannamebisherleerTHENersteeingabefuerelannamen:=FALSE;belegefeld(elanname(letzteeingabefuerlangnamen),feld(elan),zwischenspeichere,laengefuernamen);FI.elannamebisherleer:ersteeingabefuerelannamenAND(NOTelannameok)ANDfeldnummer=elan.letzteeingabefuerlangnamen:bereinigt(zwischenspeicherl).pruefelangname:IFlangnamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(lang));langnameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFlangnamezulangTHENmeldezulangennamen(fehlercode)ELIFlangnamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELSElangnameok:=TRUE;zwischenspeicherl:=feld(lang);psetzeneuenfeldindexFI ELSEpsetzeneuenfeldindexFI.langnamemussgeprueftwerden:(zwischenspeicherl<>feld(lang))OR((zwischenspeicherl=feld(lang))AND NOTlangnameok).pruefeelanname:IFelannamemussgeprueftwerdenTHENzwischenspeicher:=bereinigt(feld(elan));elannameok:=FALSE;IFnameleerTHENmeldeleerennamen(fehlercode)ELIFelannamemitfalschemanfangTHENmeldefalschenanfang(fehlercode)ELIFelannamemitfalschenzeichenTHENmeldeformalenfehler(fehlercode)ELIFelannamenichteindeutigTHENmeldedoppeltennamen(fehlercode)ELIFeingabeentsprichtnichtelannotationTHENmeldesyntaxverletzung(fehlercode,fehlermeldung)ELSEelannameok:=TRUE;zwischenspeichere:=feld(elan);psetzeneuenfeldindexFI ELSEpsetzeneuenfeldindexFI.elannamemussgeprueftwerden:(zwischenspeichere<>feld(elan))OR((zwischenspeichere=feld(elan))AND NOTelannameok).behandletaste:IFtaste=pruefenANDeingabenohnefehlundtadelTHENschreibeeditiertesobjektzurueck;LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=haltTHEN LEAVErepeatwechslezwischendeneingabefeldernELIFtaste=infoTHENgibeditierhilfeFI.eingabenohnefehlundtadel:langnameokANDelannameok.schreibeeditiertesobjektzurueck:zwischenspeichere:=bereinigt(zwischenspeichere);changeall(zwischenspeichere," ","");IFzwischenspeichere<>elanname(aktuellesobjekt)ANDelanname(aktuellesobjekt)<>""THENfuehrenamensaenderunginallenabhaengigenformelnaus(actualcell,zwischenspeichere)FI;parametername(aktuellesobjekt,bereinigt(zwischenspeicherl),zwischenspeichere);gespeichert:=TRUE;aktuellesobjektWRITEmp.nameleer:zwischenspeicher="".langnamenichteindeutig:NOTlangnameeindeutig(zwischenspeicher,mpos(actualcell)).elannamenichteindeutig:NOTelannameeindeutig(zwischenspeicher,mpos(actualcell)).elannamemitfalschemanfang:NOTimkleinenalphabet(zwischenspeicherSUB1).elannamemitfalschenzeichen:NOTelannamealphabetisch(zwischenspeicher).eingabeentsprichtnichtelannotation:fehlermeldung:="";NOTelannameistelanbezeichner(zwischenspeicher,fehlermeldung).langnamezulang:length(zwischenspeicher)>laengefuernamen.raeumebildschirmauf:bsspeicherlesen(eingabefenster);raeumeeditierhilfeweg.END PROCparametereditieren;PROCpsetzeneuenfeldindex:IFtaste=hochTHENfeldnummerDECR1ELIFtaste=runterORtaste=returnTHENfeldnummerINCR1FI;IFfeldnummer<langTHENfeldnummer:=elanELIFfeldnummer>elanTHENfeldnummer:=langFI END PROCpsetzeneuenfeldindex;TEXT PROCtextfuereingabefeld(TEXT CONSTfeld,INT CONSTlaenge):TEXT VARergebnis:=text(feld,laenge);changeall(ergebnis," ",
+"_");ergebnisEND PROCtextfuereingabefeld;TEXT PROCbereinigt(TEXT CONSTfeld):TEXT VARergebnis:=feld;changeall(ergebnis,underscore,blank);compress(ergebnis)END PROCbereinigt;PROCbelegefeld(TEXT CONSToriginal,TEXT VARfuerfeld,fuerzwischenspeicher,INT CONSTlaenge):fuerfeld:=textfuereingabefeld(original,laenge);fuerzwischenspeicher:=fuerfeld;END PROCbelegefeld;BOOL PROCelannamealphabetisch(TEXT CONSTname):INT VARi;IFersterbuchstabenichtimkleinenalphabetTHEN FALSE ELSE FORiFROM1UPTOlength(name)REP IFiteszeichennichtimkleinenalphabetodernumerischoderblankTHEN LEAVEelannamealphabetischWITH FALSE FI PER;TRUE FI.ersterbuchstabenichtimkleinenalphabet:NOTimkleinenalphabet(nameSUB1).iteszeichennichtimkleinenalphabetodernumerischoderblank:NOT(imkleinenalphabet(nameSUBi)ORnumerisch(nameSUBi)ORblank=(nameSUBi)).END PROCelannamealphabetisch;TEXT PROCelanname(TEXT CONSTname):INT VARi;TEXT VARneuername:="";FORiFROM1UPTOlength(name)REP IFiteszeichenimgrossenalphabetTHENneuernameCATcode(code(nameSUBi)+32)ELIFiteszeichenimkleinenalphabetodernumerischTHENneuernameCAT(nameSUBi)ELIFiteszeichenszTHENneuernameCAT"ss"FI PER;neuername.iteszeichenimgrossenalphabet:imgrossenalphabet(nameSUBi).iteszeichenimkleinenalphabetodernumerisch:imkleinenalphabet(nameSUBi)ORnumerisch(nameSUBi).iteszeichensz:(nameSUBi)="ß".END PROCelanname;BOOL PROCimgrossenalphabet(TEXT CONSTc):(code("A")<=code(c)ANDcode(c)<=code("Z"))ORpos("ÄÖÜ",c)>0END PROCimgrossenalphabet;BOOL PROCimkleinenalphabet(TEXT CONSTc):(code("a")<=code(c)ANDcode(c)<=code("z"))ORpos("äöü",c)>0END PROCimkleinenalphabet;BOOL PROCnumerisch(TEXT CONSTc):(code("0")<=code(c)ANDcode(c)<=code("9"))END PROCnumerisch;BOOL PROClangnameeindeutig(TEXT CONSTbezeichner,MPOS CONSTmp):INT VARimp:=impos(mp),jmp:=jmpos(mp),i,j;FORiFROM1UPTOmaxiREP FORjFROM1UPTOmaxjREP IFpositionbelegtCANDijnichtaktuellepositionTHEN IFlangname(objekt(cell(i,j)))=bezeichnerTHEN LEAVElangnameeindeutigWITH FALSE FI FI PER PER;TRUE.ijnichtaktuelleposition:NOT(i=impANDj=jmp).positionbelegt:belegt(cell(i,j)).END PROClangnameeindeutig;BOOL PROCelannameeindeutig(TEXT CONSTbezeichner,MPOS CONSTmp):INT VARimp:=impos(mp),jmp:=jmpos(mp),i,j;FORiFROM1UPTOmaxiREP FORjFROM1UPTOmaxjREP IFpositionbelegtANDijnichtaktuellepositionTHEN IFelanname(objekt(cell(i,j)))=bezeichnerTHEN LEAVEelannameeindeutigWITH FALSE FI FI PER PER;TRUE.ijnichtaktuelleposition:NOT(i=impANDj=jmp).positionbelegt:belegt(cell(i,j)).END PROCelannameeindeutig;BOOL PROCkurznameeindeutig(TEXT CONSTbezeichner,MPOS CONSTmp):INT VARimp:=impos(mp),jmp:=jmpos(mp),i,j;FORiFROM1UPTOmaxiREP FORjFROM1UPTOmaxjREP IFpositionbelegtANDijnichtaktuellepositionTHEN IFkurzname(objekt(cell(i,j)))=bezeichnerTHEN LEAVEkurznameeindeutigWITH FALSE FI FI PER PER;TRUE.ijnichtaktuelleposition:NOT(i=impANDj=jmp).positionbelegt:CELL CONSTc:=cell(i,j);belegt(c)AND NOT(typ(objekt(c))=parameter).END PROCkurznameeindeutig;BOOL PROCelannameistelanbezeichner(TEXT CONSTzwischenspeicher,TEXT VARfehlermeldung):TEXT CONSTvariablendefinition:=realvar+zwischenspeicher+";";ergebnisdescompilers(variablendefinition,fehlermeldung)END PROCelannameistelanbezeichner;BOOL PROCergebnisdescompilers(TEXT CONSTausdruck,TEXT VARfehlermeldung):BOOL VARfehler;fehlermeldung:="";IFausdruckzulangTHEN TRUE ELSEdisablestop;do(ausdruck);fehler:=iserror;IFiserrorTHENclearerror;enablestop;fehlermeldung:=errormessageELSEenablestopFI;NOTfehlerFI.ausdruckzulang:length(ausdruck)>maxlaengefuerdo.END PROCergebnisdescompilers;BOOL PROCarithmetischerausdruckistkorrekt(CELL CONSTactualcell,TEXT CONSTeingabe,TEXT VARfehlermeldung):TEXT CONSTrefinementname:="abcdefghijklmnopqrstuvwxyz0123456789";INT VARi,j;erstertestmitlokalenbezeichnern;zweitertestmitallenbezeichnern;TRUE.erstertestmitlokalenbezeichnern:kleinevariablenlistezusammenstellen;variablenlistemiteingabeverknuepfen;ausdruckpruefen.zweitertestmitallenbezeichnern:grossevariablenlistezusammenstellen;variablenlistemiteingabeverknuepfen;ausdruckpruefen.kleinevariablenlistezusammenstellen:TEXT VARausdruck:="";
+FORiFROM1UPTOmaxlinkREP IFname(i)<>""CAND(NOTschondagewesen)THENausdruckCAT(realvar+name(i)+";")FI PER.grossevariablenlistezusammenstellen:ausdruck:=listeallerbezeichner(mpos(actualcell)).schondagewesen:FORjFROM1UPTOi-1REP IFname(j)=name(i)THEN LEAVEschondagewesenWITH TRUE FI PER;FALSE.variablenlistemiteingabeverknuepfen:ausdruckCAT("REAL "+procname+":"+refinementname+"."+refinementname+":"+eingabe+"END "+procname).procname:"PROC proc "+refinementname.ausdruckpruefen:IF NOTergebnisdescompilers(ausdruck,fehlermeldung)THEN LEAVEarithmetischerausdruckistkorrektWITH FALSE FI.END PROCarithmetischerausdruckistkorrekt;BOOL PROCtermistkorrekt(CELL CONSTactualcell,TEXT CONSTeingabe,liste,TEXT VARfehlermeldung):INT VARi,j;TEXT CONSTrefinementname:="abcdefghijklmnopqrstuvwxyz0123456789";erstertestmitlokalenbezeichnern;zweitertestmitallenbezeichnern;TRUE.erstertestmitlokalenbezeichnern:kleinevariablenlistezusammenstellen;variablenlistemiteingabeverknuepfen;ausdruckpruefen.zweitertestmitallenbezeichnern:grossevariablenlistezusammenstellen;variablenlistemiteingabeverknuepfen;ausdruckpruefen.kleinevariablenlistezusammenstellen:zulaessigebezeichnerzusammenstellen(actualcell);TEXT VARausdruck:="";FORiFROM1UPTOmaxlinkREP IFname(i)<>""CAND(NOTschondagewesen)THENausdruckCAT(realvar+name(i)+";")FI PER.grossevariablenlistezusammenstellen:ausdruck:=liste.schondagewesen:FORjFROM1UPTOi-1REP IFname(j)=name(i)THEN LEAVEschondagewesenWITH TRUE FI PER;FALSE.variablenlistemiteingabeverknuepfen:ausdruckCAT("REAL "+procname+":"+refinementname+"."+refinementname+":"+eingabe+"END "+procname).procname:"PROC proc "+refinementname.ausdruckpruefen:IF NOTergebnisdescompilers(ausdruck,fehlermeldung)THEN LEAVEtermistkorrektWITH FALSE FI.END PROCtermistkorrekt;PROCzulaessigebezeichnerzusammenstellen(CELL CONSTactualcell):INT VARi;FORiFROM1UPTOmaxlinkREP IF(actualcellEINGANGi)THENname(i):=compress(elanname(objekt(actualcellUEBERi)));changeall(name(i)," ","");ELSEname(i):=""FI PER END PROCzulaessigebezeichnerzusammenstellen;PROCfuehrenamensaenderunginallenabhaengigenformelnaus(CELL CONSTactualcell,TEXT CONSTneuername):OBJEKT CONSTaktuellesobjekt:=objekt(actualcell);INT VARi;FORiFROM1UPTOmaxlinkREP IFiterpfeilweistaufformelTHENaendereelannameninnachbarformelFI PER.iterpfeilweistaufformel:(actualcellAUSGANGi)AND(typ(objekt(actualcellUEBERi))=formel).aendereelannameninnachbarformel:TEXT CONSTaltername:=elanname(aktuellesobjekt);MPOS CONSTzielposition:=(actualcellUEBERi);OBJEKT VARzielformel:=objekt(zielposition);TEXT CONSTterm:=ausdruck(zielformel);TEXT VARneuerterm:="";scanneterminzielformel;schreibeneuentermzurueck.scanneterminzielformel:TEXT VARsymbol:="";INT VARtype:=0,lasttype:=0;scan(term);nextsymbol(symbol,type);WHILE NOTendeerreichtREPverarbeitesymbol;nextsymbol(symbol,type)PER.endeerreicht:type>delimiter.verarbeitesymbol:SELECTtypeOF CASEtag:neuertermCAT(ggfneuername+" ")CASEdelimiter:verarbeitedelimiterOTHERWISEneuertermCAT(symbol+" ")ENDSELECT;lasttype:=type.ggfneuername:IFsymbol=alternameTHENneuernameELSEsymbolFI.verarbeitedelimiter:IFletzteszeichenimneuentermblankAND(lasttype=delimiterORsymbol=")")THENneuerterm:=subtext(neuerterm,1,length(neuerterm)-1)FI;neuertermCATsymbol.letzteszeichenimneuentermblank:(neuertermSUBlength(neuerterm))=" ".schreibeneuentermzurueck:formelname(zielformel,namederformel,elannamederformel,neuerterm);zielformelWRITEzielposition.namederformel:langname(zielformel).elannamederformel:elanname(zielformel).END PROCfuehrenamensaenderunginallenabhaengigenformelnaus;TEXT PROClisteallerbezeichner(MPOS CONSTmp):TEXT VARdeklarationen:=realvar+"zeit";variablenanhaengen;ergebnisseanhaengen;parameteranhaengen;formelnanhaengen;listeabschliessen.variablenanhaengen:deklarationenCATteilliste(variablenthesaurus).ergebnisseanhaengen:deklarationenCATteilliste(ergebnisthesaurus).parameteranhaengen:deklarationenCATteilliste(parameterthesaurus).formelnanhaengen:deklarationenCATteilliste(formelthesaurus,mp).listeabschliessen:deklarationenCAT";";deklarationen.
+END PROClisteallerbezeichner;TEXT PROCteilliste(THESAURUS CONSTpositionen):INT VARi:=0;MPOS VARmp;TEXT VARliste:="";WHILEi<highestentry(positionen)REPgetmpos(positionen,mp,i);listeCAT(","+elanname(objekt(mp)))PER;listeEND PROCteilliste;TEXT PROCteilliste(THESAURUS CONSTpositionen,MPOS CONSTactualmp):INT VARi:=0;MPOS VARmp;TEXT VARliste:="";WHILEi<highestentry(positionen)REPgetmpos(positionen,mp,i);IF NOT(mp=actualmp)THENlisteCAT(","+elanname(objekt(mp)))FI PER;listeEND PROCteilliste;WINDOW VARw:=window(6,12,69,10);BOOL VARhilfeschoneingeblendet:=FALSE;DATASPACE VARds;FILE VARhf;INT VARerstezeile:=3,erstespalte:=1;PROCraeumeeditierhilfeweg:IFhilfeschoneingeblendetTHENbsspeicherlesen(w);hilfeschoneingeblendet:=FALSE FI END PROCraeumeeditierhilfeweg;PROCgibeditierhilfe:MPOS VARmp;TEXT VARtaste:="";IF NOThilfeschoneingeblendetTHENstellehilfezusammen;erstezeile:=3;erstespalte:=1;outframe(w);FI;wechsleinfenstermithilfe.wechsleinfenstermithilfe:doublefootnote(anwendungstext(quithinweis));scroll(w,hf,1,3,0,erstezeile,erstespalte,zurueck,taste);doublefootnote(anwendungstext(standardhinweis)).stellehilfezusammen:forget(ds);ds:=nilspace;hf:=sequentialfile(output,ds);INT VARi,v:=0,e:=0,p:=0,f:=0;erstezeile:=1;erstespalte:=1;fischevariablenundihrenamenausmatrix;fischeergaenzungsvariablenundihrenamenausmatrix;fischeparameterundihrenamenausmatrix;fischeformelnundihrenamenausmatrix;ggfueberschrifttfuerleereliste;hilfeschoneingeblendet:=TRUE.ggfueberschrifttfuerleereliste:IFv+e+f+p=0THENputline(hf,anwendungstext(nochkeinenamenvergeben))FI.fischevariablenundihrenamenausmatrix:i:=0;WHILEi<highestentry(variablenthesaurus)REPgetmpos(variablenthesaurus,mp,i);behandlevariablePER;IFv>0THENputline(hf,anwendungstext(tabellenfuss));line(hf)FI.behandlevariable:IFv=0THENschreibeueberschriftfuernichtleerevlisteFI;vINCR1;neuezeile(langname(objekt(mp)),elanname(objekt(mp)),kurzname(objekt(mp)));.fischeergaenzungsvariablenundihrenamenausmatrix:i:=0;WHILEi<highestentry(ergebnisthesaurus)REPgetmpos(ergebnisthesaurus,mp,i);behandleergebnisPER;IFe>0THENputline(hf,anwendungstext(tabellenfuss));line(hf)FI.behandleergebnis:IFe=0THENschreibeueberschriftfuernichtleereelisteFI;eINCR1;neuezeile(langname(objekt(mp)),elanname(objekt(mp)),kurzname(objekt(mp))).fischeparameterundihrenamenausmatrix:i:=0;WHILEi<highestentry(parameterthesaurus)REPgetmpos(parameterthesaurus,mp,i);behandleparameterPER;IFp>0THENputline(hf,anwendungstext(tabellenfuss));line(hf)FI.behandleparameter:IFp=0THENschreibeueberschriftfuernichtleereplisteFI;pINCR1;neuezeile(langname(objekt(mp)),elanname(objekt(mp)),3*"-").fischeformelnundihrenamenausmatrix:i:=0;WHILEi<highestentry(formelthesaurus)REPgetmpos(formelthesaurus,mp,i);behandleformelPER;IFf>0THENputline(hf,anwendungstext(tabellenfuss));line(hf)FI.behandleformel:IFf=0THENschreibeueberschriftfuernichtleereflisteFI;fINCR1;neuezeile(langname(objekt(mp)),elanname(objekt(mp)),3*"-");.schreibeueberschriftfuernichtleerevliste:ggfueberschrift;putline(hf,anwendungstext(singularmodellgroesse)+"n");ueberschrift.schreibeueberschriftfuernichtleereeliste:ggfueberschrift;putline(hf,anwendungstext(singularergebnis)+"n");ueberschrift.schreibeueberschriftfuernichtleerepliste:ggfueberschrift;putline(hf,anwendungstext(singularparameter));ueberschrift.schreibeueberschriftfuernichtleerefliste:ggfueberschrift;putline(hf,anwendungstext(ueberschriftfuerformel));ueberschrift.ueberschriftfuerformel:IFf=1THENsingularformelELSEpluralformelFI.ggfueberschrift:IFv+e+f+p=0THENputline(hf,anwendungstext(listedernamen));putline(hf,length(anwendungstext(listedernamen))*waagerecht);line(hf)FI.END PROCgibeditierhilfe;PROCueberschrift:putline(hf,anwendungstext(tabellenkopf1));putline(hf,anwendungstext(tabellenkopf2));putline(hf,anwendungstext(tabellenkopf3));END PROCueberschrift;PROCneuezeile(TEXT CONSTl,e,k):TEXT VARzeile:=anwendungstext(tabellenrumpf);replace(zeile,3,l);replace(zeile,35,ausgabefuerelannamen);replace(zeile,56,k);putline(hf,zeile).ausgabefuerelannamen:IFlength(e)>17THEN
+subtext(e,1,17)+"*"ELSEeFI.END PROCneuezeile;PROCmeldeleerennamen(INT VARfehlercode):fehlercode:=hinweisleerername;outfehler(fehlercode)END PROCmeldeleerennamen;PROCmeldeleerenausdruck(INT VARfehlercode):fehlercode:=hinweisleererausdruck;outfehler(fehlercode)END PROCmeldeleerenausdruck;PROCmeldefalschenanfang(INT VARfehlercode):fehlercode:=hinweisfalscheranfang;outfehler(fehlercode)END PROCmeldefalschenanfang;PROCmeldeformalenfehler(INT VARfehlercode):fehlercode:=hinweisformalerfehler;outfehler(fehlercode)END PROCmeldeformalenfehler;PROCmeldesyntaxverletzung(INT VARfehlercode,TEXT CONSTfehlermeldung):fehlercode:=hinweissyntaxfehler;doublefootnote(anwendungstext(hinweissyntaxfehler)+return+fehlermeldung)END PROCmeldesyntaxverletzung;PROCmeldezeitunzulaessig(INT VARfehlercode,TEXT CONSTfehlermeldung):fehlercode:=zeitnichtalsvariable;doublefootnote(anwendungstext(zeitnichtalsvariable)+return+fehlermeldung)END PROCmeldezeitunzulaessig;PROCmeldedoppeltennamen(INT VARfehlercode):fehlercode:=hinweisdoppeltername;outfehler(fehlercode)END PROCmeldedoppeltennamen;PROCmeldezulangennamen(INT VARfehlercode):fehlercode:=hinweislangername;outfehler(fehlercode)END PROCmeldezulangennamen;PROCoutfehler(INT CONSTfehlercode):doublefootnote(anwendungstext(fehlercode))END PROCoutfehler;END PACKETobjektrepraesentation2;
+
diff --git a/app/schulis-simulationssystem/3.0/src/output b/app/schulis-simulationssystem/3.0/src/output
new file mode 100644
index 0000000..79fb6f5
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/output
@@ -0,0 +1,7 @@
+PACKEToutputDEFINES OUTPUT,:=,niloutput,replace,FILESUB,gebeaufbildschirmaus,plotterahmendoppelt,plottefusszeile,blaettere,blaetternoben,blaetternunten,blaettern,putpicture,putkreuz,nildiagramm,nildiagrammmitkreuz,nilkreuz,window,legefensterfest,versendeoutput,setzerahmen,kopfzeilezusammenstellen,forget:LETstrukt1fenster=1,strukt2texte=2,strukt2diagramme1text=3,strukt4fenster=4,strukttabelleunten=5,strukttabelleoben=6,fensterganz=1,fensteroben=2,fensterunten=3,fensterlinksoben=4,fensterlinksunten=5,fensterrechtsoben=6,fensterrechtsunten=7,fensterrechts=8,stdfarbe=1,stddicke=0,durchgezogen=1,hintergrund=0,vordergrund=1,maxpictures=10,blockstartwerte=9,neuerplottertaskname="SIMSEL-PRINTERDEPOT",alterplottertaskname="simsel plotter",maxplotobjekteinplottertask=25,mlplottertaskzuvoll=31,mlplottertaskexistiertnicht=40,mlplottertasknichtempfangsbereit=41,mlplotunmoeglich=43,plotok=0,produktname=21,zwischenraum=" ",maxfilezeilen=500,teilfenster="teiltextname",anfangszeile=1,typnummer=1055,lkszeilenanfang=4,rtszeilenanfang=42,rtszeilenende=79,obenerstezeile=3,obenletztezeile=12,untenerstezeile=14,untenletztezeile=23;REAL VARhorcm,vertcm;INT VARpixhor,pixvert;drawingarea(horcm,vertcm,pixhor,pixvert);REAL CONSTbuchsthoehe:=stdhoehe,buchstbreite:=stdbreite,minyabstand:=0.1,minxabstand:=buchstbreite/3.0;REAL CONSThoehe:=buchsthoehe+3.0*minyabstand,links:=0.0,rechts:=horcm,spaltenmitte:=(vertcm)/2.0,oben:=vertcm-hoehe,unten:=hoehe,zeilenmitte:=horcm/2.0,rahmenoben:=vertcm,rahmenunten:=0.0,abstand:=0.1;REAL VARverkleinerunghoehe:=2.5,verkleinerungbreite:=1.5;ROW6PICTURE VARrahmenmitkreuz;erstellerahmen;TYPE OUTPUT=BOUND STRUCT(INTaufbau,TEXTkopfzeilentext,INTschluesselfusszeile,BOOLmitrahmen,REALstandardhoehe,standardbreite,sourcewidth,sourceheight,TEXTmodellbezeichner,dsname,ROW2DIAGRAMMdiag,NURTEXTtext1,text2,startwerte,PICTURErahmen);TYPE NURTEXT=STRUCT(BOOLbelegt,INTaktzeile,naechsteseite,SIMSELFILEinhalt);TYPE DIAGRAMM=STRUCT(BOOLbelegt,INTanzahlpictures,anzahlpicfuerkreuz,REALxmin,xmax,ymin,ymax,ROWmaxpicturesPICTUREkreuz,ROWmaxpicturesPICTUREinhalt);TYPE SIMSELFILE=STRUCT(ROWmaxfilezeilenTEXTfilezeile,INTzeilenanzahl);PROCversendeoutput(OUTPUT VARobjekt,TEXT CONSTmodellbezeichner,kopfzeilentext,INT CONSTsteuerzeilennr,TEXT CONSTziel):INT VARret;TEXT VARdsname:=kopfzeilentext+"."+modellbezeichner+". "+timeofday;changeall(dsname,":",".");changeall(dsname," ","");change(dsname,"Demonstration","D");forget(dsname,quiet);copy(objekt.dsname,dsname);OUTPUT VARkopie;CONCR(kopie):=old(dsname);kopie.dsname:=dsname;kopie.modellbezeichner:=modellbezeichner;kopie.kopfzeilentext:=kopfzeilentext;kopie.schluesselfusszeile:=steuerzeilennr;IF NOTframeTHENkopie.mitrahmen:=FALSE;kopie.sourceheight:=kopie.sourceheight-2.0*hoeheeinerrandzeileELSEplotteallerandzeilen(kopie);FI;ret:=erfolgreicherplotversuch(kopie.dsname,ziel);IFret=plotokTHENforget(kopie.dsname,quiet);ELSEforget(kopie.dsname,quiet);plotend;errorstop(meldungstext(ret));FI;.hoeheeinerrandzeile:kopie.standardhoehe+3.0*minyabstand.END PROCversendeoutput;PROCversendeoutput(OUTPUT VARobjekt,TEXT CONSTmodellbezeichner,INT CONSTkopfzeilennr,steuerzeilennr,TEXT CONSTziel):versendeoutput(objekt,modellbezeichner,kopfzeile(kopfzeilennr),steuerzeilennr,ziel);END PROCversendeoutput;INT PROCerfolgreicherplotversuch(TEXT CONSTdatname,TEXT CONSTdestination):TEXT VARzieltask:="";disablestop;IFdestination=alterplottertasknameTHENzieltask:=neuerplottertasknameELSEzieltask:=destinationFI;IFexiststask(zieltask)THEN IFstatus(/zieltask)=2THEN IFplottertaskzuvoll(/zieltask)THENenablestop;mlplottertaskzuvollELSEsicherezuplotterFI ELSEenablestop;mlplottertasknichtempfangsbereitFI ELSEenablestop;mlplottertaskexistiertnichtFI.sicherezuplotter:commanddialogue(FALSE);save(datname,/zieltask);commanddialogue(TRUE);IFiserrorTHENclearerror;enablestop;mlplotunmoeglichELSEenablestop;plotokEND IF.END PROCerfolgreicherplotversuch;BOOL PROCplottertaskzuvoll(TASK CONSTziel):THESAURUS VARth:=ALLziel;INT VARi:=0,anzahl:=0;TEXT VARt;
+WHILEi<=highestentry(th)REPget(th,t,i);IFt<>""THENanzahlINCR1;FI;UNTILi=0PER;anzahl>=maxplotobjekteinplottertask.END PROCplottertaskzuvoll;PROCplotohneclear(DIAGRAMM VARp):INT VARi;PICTURE VARpic;beginplot;FORiFROM1UPTOp.anzahlpicfuerkreuzREPpic:=p.kreuz(i);plottepic;PER;FORiFROM1UPTOp.anzahlpicturesREPpic:=p.inhalt(i);plottepic;PER;endplot.plottepic:IFpen(pic)<>0THENpen(0,stdfarbe,stddicke,pen(pic));plot(pic)FI.END PROCplotohneclear;OP:=(OUTPUT VARneu,DATASPACE CONSTspace):CONCR(neu):=space;END OP:=;PROCforget(OUTPUT VARalt):forget(alt.dsname,quiet);END PROCforget;DATASPACE PROCniloutput(INT CONSTbildaufbau,TEXT CONSTspacename):OUTPUT VARneu;forget(spacename,quiet);neu:=new(spacename);type(old(spacename),typnummer);neu.aufbau:=bildaufbau;neu.dsname:=spacename;neu.text1.belegt:=FALSE;neu.text1.aktzeile:=anfangszeile;simselfile(neu.text1.inhalt);neu.text1.naechsteseite:=anfangszeile;neu.text2.belegt:=FALSE;neu.text2.aktzeile:=anfangszeile;simselfile(neu.text2.inhalt);neu.text2.naechsteseite:=anfangszeile;neu.startwerte.belegt:=FALSE;neu.startwerte.aktzeile:=anfangszeile;simselfile(neu.startwerte.inhalt);neu.startwerte.naechsteseite:=anfangszeile;neu.standardhoehe:=stdhoehe;neu.standardbreite:=stdbreite;neu.sourcewidth:=horcm;neu.sourceheight:=vertcm;neu.diag(1).belegt:=FALSE;neu.diag(1).anzahlpictures:=0;neu.diag(2).anzahlpictures:=0;neu.diag(1).anzahlpicfuerkreuz:=0;neu.diag(2).anzahlpicfuerkreuz:=0;neu.diag(2).belegt:=FALSE;neu.mitrahmen:=TRUE;neu.rahmen:=rahmenmitkreuz(bildaufbau);old(neu.dsname).END PROCniloutput;PROCerstellerahmen:INT VARi;PICTURE VARgrenzen;FORiFROM1UPTO6REPgrenzen:=nilpicture;plrahmenunten;plrahmenlinks;plrahmenoben;plrahmenrechts;innererrahmenoben;innererrahmenunten;erstellekreuz;rahmenmitkreuz(i):=grenzen;PER;.plrahmenunten:movecm(grenzen,links,rahmenunten);drawcm(grenzen,rechts,rahmenunten).plrahmenlinks:movecm(grenzen,links,rahmenunten);drawcm(grenzen,links,rahmenoben).plrahmenoben:movecm(grenzen,links,rahmenoben);drawcm(grenzen,rechts,rahmenoben).plrahmenrechts:movecm(grenzen,rechts,rahmenoben);drawcm(grenzen,rechts,rahmenunten).innererrahmenoben:movecm(grenzen,links,oben);drawcm(grenzen,rechts,oben).innererrahmenunten:movecm(grenzen,links,unten);drawcm(grenzen,rechts,unten).erstellekreuz:SELECTiOF CASEstrukt2texte:waagerechtlks;waagerechtrts;CASEstrukttabelleunten:waagerechtlks;waagerechtrts;senkrechtoben;CASEstrukt4fenster:waagerechtlks;waagerechtrts;senkrechtoben;senkrechtunten;CASEstrukttabelleoben:waagerechtlks;waagerechtrts;senkrechtunten;CASEstrukt2diagramme1text:waagerechtlks;senkrechtoben;senkrechtunten;END SELECT;.waagerechtlks:movecm(grenzen,links,spaltenmitte);drawcm(grenzen,zeilenmitte,spaltenmitte).waagerechtrts:movecm(grenzen,zeilenmitte,spaltenmitte);drawcm(grenzen,rechts,spaltenmitte).senkrechtoben:movecm(grenzen,zeilenmitte,spaltenmitte);drawcm(grenzen,zeilenmitte,oben).senkrechtunten:movecm(grenzen,zeilenmitte,spaltenmitte);drawcm(grenzen,zeilenmitte,unten).END PROCerstellerahmen;PROCplotterahmen(OUTPUT VARoutput):beginplot;clear;pen(hintergrund,vordergrund,stddicke,durchgezogen);viewport(links,rechts,rahmenunten,rahmenoben);window(0.0,1.0,0.0,1.0);plot(output.rahmen);endplot;.END PROCplotterahmen;PROCplotterahmendoppelt(OUTPUT VARoutput):viewport(links,rechts,rahmenunten,rahmenoben);window(0.0,1.0,0.0,1.0);beginplot;pen(hintergrund,vordergrund,stddicke,durchgezogen);plot(output.rahmen);endplot;.END PROCplotterahmendoppelt;PROCgebeaufbildschirmaus(OUTPUT VARobjekt,TEXT CONSTbezeichnung,textkopfzeile,INT CONSTsteuerzeilennr):objekt.modellbezeichner:=bezeichnung;objekt.kopfzeilentext:=textkopfzeile;objekt.schluesselfusszeile:=steuerzeilennr;plotterahmen(objekt);plottekopfzeile(objekt.kopfzeilentext,objekt.modellbezeichner);plottedarstellung;plotterahmendoppelt(objekt);loescheeingabepuffer;beginplot;plottefusszeile(objekt,objekt.schluesselfusszeile);endplot;.loescheeingabepuffer:TEXT VARt:="";REPt:=incharetyUNTILt=""PER.plottedarstellung:SELECTobjekt.aufbauOF CASEstrukt1fenster:IF
+objekt.text1.belegtTHENplot(fensterganz,objekt.text1)ELIFobjekt.diag(1).belegtTHENplot(fensterganz,objekt)FI;CASEstrukt2texte:IFobjekt.text1.belegtTHENplot(fensteroben,objekt.text1);FI;IFobjekt.text2.belegtTHENplot(fensterunten,objekt.text2)FI;CASEstrukt2diagramme1text:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text1.belegtTHENplot(fensterrechts,objekt.text1);FI;CASEstrukt4fenster:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text1.belegtTHENplot(fensterrechtsoben,objekt.text1);FI;IFobjekt.text2.belegtTHENplot(fensterrechtsunten,objekt.text2);FI;CASEstrukttabelleunten:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.text1.belegtTHENplot(fensterrechtsoben,objekt.text1);FI;IFobjekt.text2.belegtTHENplot(fensterunten,objekt.text2);FI;CASEstrukttabelleoben:IFobjekt.text1.belegtTHENplot(fensteroben,objekt.text1);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text2.belegtTHENplot(fensterrechtsunten,objekt.text2);FI;END SELECT.END PROCgebeaufbildschirmaus;PROCgebeaufbildschirmaus(OUTPUT VARobjekt,TEXT CONSTbezeichnung,INT CONSTkopfzeilennr,steuerzeilennr):IFkopfzeilennr=0THENgebeaufbildschirmaus(objekt,bezeichnung," ",steuerzeilennr);ELSEgebeaufbildschirmaus(objekt,bezeichnung,kopfzeile(kopfzeilennr),steuerzeilennr);FI;END PROCgebeaufbildschirmaus;PROCplotteallerandzeilen(OUTPUT VARobjekt):PICTURE VARrandzeilen:=nilpicture;REAL CONSTgrenzeunten:=2.0*minyabstand+rahmenunten,grenzeoben:=oben+2.0*minyabstand,textende:=rechts-2.0*minyabstand,textanfang:=2.0*minyabstand+links;erstellekopfzeile;erstellesteuerleiste;objekt.rahmenCATrandzeilen;.erstellekopfzeile:TEXT VARzeilentext:=kopfzeilezusammenstellen(objekt.kopfzeilentext,objekt.modellbezeichner,int((textende-textanfang)/buchstbreite));steckekopfzeileinpicture;.steckekopfzeileinpicture:movecm(randzeilen,textanfang,grenzeoben);draw(randzeilen,zeilentext,0.0,buchsthoehe,buchstbreite);.erstellesteuerleiste:IFobjekt.schluesselfusszeile<>0THENmovecm(randzeilen,textanfang,grenzeunten);draw(randzeilen,steuerleiste(objekt.schluesselfusszeile),0.0,buchsthoehe,buchstbreite)FI.END PROCplotteallerandzeilen;PROCplottekopfzeile(TEXT CONSTkopfzeilentext,namedesmodells):REAL CONSTgrenzeoben:=oben+2.0*minyabstand,textende:=rechts-minyabstand,textanfang:=((2.0*minxabstand)+links);erstellekopfzeile;.erstellekopfzeile:TEXT VARzeilentext:=kopfzeilezusammenstellen(kopfzeilentext,namedesmodells,int((textende-textanfang)/buchstbreite));steckekopfzeileinpicture;.steckekopfzeileinpicture:beginplot;viewport(links,rechts,rahmenunten,rahmenoben);pen(0,1,0,1);movecm(textanfang,grenzeoben);draw(zeilentext,0.0,buchsthoehe,buchstbreite);endplot;.END PROCplottekopfzeile;PROCplottefusszeile(OUTPUT VARobjekt,INT CONSTtextnr):REAL CONSTgrenzeunten:=2.0*minyabstand+rahmenunten,textanfang:=((2.0*minxabstand)+links);objekt.schluesselfusszeile:=textnr;erstellesteuerleiste;.erstellesteuerleiste:IFtextnr<>0THENviewport(links,rechts,rahmenunten,rahmenoben);pen(0,1,0,1);movecm(textanfang,grenzeunten);draw(steuerleiste(textnr),0.0,buchsthoehe,buchstbreite)FI.END PROCplottefusszeile;PROCgibzeileaus(PICTURE VARrandzeile):viewport(links,rechts,rahmenunten,rahmenoben);beginplot;plot(randzeile);endplot;END PROCgibzeileaus;OP:=(OUTPUT VARneu,OUTPUT VARalt):CONCR(neu):=old(alt.dsname)END OP:=;PROCdraw(INT CONSTfenster,OUTPUT VARobjekt):SIMSELFILE VARtxt;IF(fenster=fensterganz)COR(fenster=fensteroben)COR(fenster=fensterrechtsoben)COR(fenster=fensterrechts)THENtxt:=objekt.text1.inhaltELIF(fenster=fensterrechtsunten)COR(fenster=fensterunten)THENtxt:=objekt.text2.inhaltFI;setzefensterdaten;schreibeintextfenster;plottetextfenster;.setzefensterdaten:REAL VARlks,rts,un,ob;legefensterfest(objekt,lks,rts,un,ob,fenster);ob:=ob-stdhoehe;INT VARzeilenlaenge:=int((rts-lks)/(stdbreite/verkleinerungbreite));.schreibeintextfenster:PICTURE
+ VARplotobj:=nilpicture;REAL VARzeile:=ob;INT VARzeiger;TEXT VARzeilentext;zeiger:=1;WHILEzeile>unCAND NOTeof(txt,zeiger)REPgetline(txt,zeiger,zeilentext);movecm(plotobj,lks,zeile);draw(plotobj,subtext(zeilentext,1,zeilenlaenge),0.0,stdhoehe/verkleinerunghoehe+abstand,stdbreite/verkleinerungbreite);zeigerINCR1;zeile:=zeile-(stdhoehe/verkleinerunghoehe)-abstand;PER;.plottetextfenster:viewport(lks,rts,un,ob);window(0.0,1.0,0.0,1.0);beginplot;plot(plotobj);endplot;.END PROCdraw;PROCplot(INT CONSTfenster,OUTPUT VARobj):DIAGRAMM VARdiagramm;IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENdiagramm:=obj.diag(1)ELSEdiagramm:=obj.diag(2)FI;REAL VARx1,x2,y1,y2;IFdiagramm.belegtTHENplottediagr;FI;.plottediagr:legefensterfest(obj,x1,x2,y1,y2,fenster);window(diagramm.xmin,diagramm.xmax,diagramm.ymin,diagramm.ymax);viewport(x1,x2,y1,y2);plotohneclear(diagramm);.END PROCplot;PROClegefensterfest(OUTPUT VARobj,REAL VARlks,rts,un,ob,INT CONSTfensterlage):SELECTfensterlageOF CASEfensterganz:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=horcm-2.0*abstand;un:=hoehe+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=vertcm-hoehe-abstand-obj.standardhoehe;CASEfensteroben:lks:=(3.0*abstand)+2.0*obj.standardbreite;rts:=horcm-abstand;un:=(vertcm/2.0)+(3.0*abstand);ob:=vertcm-hoehe-2.0*abstand;CASEfensterunten:lks:=(3.0*abstand)+2.0*obj.standardbreite;rts:=horcm-abstand;un:=hoehe+(3.0*abstand);ob:=(vertcm/2.0)-2.0*abstand;CASEfensterlinksoben:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=(horcm/2.0)-2.0*abstand;un:=(vertcm/2.0)+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=vertcm-hoehe-abstand-obj.standardhoehe;CASEfensterlinksunten:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=(horcm/2.0)-2.0*abstand;un:=hoehe+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=(vertcm/2.0)-abstand-obj.standardhoehe;CASEfensterrechts:lks:=horcm/2.0+(3.0*abstand)+obj.standardbreite;rts:=horcm-abstand;un:=hoehe+(2.0*abstand);ob:=vertcm-hoehe-2.0*abstand;CASEfensterrechtsoben:lks:=horcm/2.0+(2.0*abstand);rts:=horcm-abstand;un:=(vertcm/2.0)+(2.0*abstand);ob:=vertcm-hoehe-2.0*abstand;CASEfensterrechtsunten:lks:=horcm/2.0+(2.0*abstand);rts:=horcm-abstand;un:=hoehe+(2.0*abstand);ob:=(vertcm/2.0)-2.0*abstand;END SELECT;END PROClegefensterfest;PROClegefensterfest(INT VARlks,rts,un,ob,INT CONSTfensterlage,):SELECTfensterlageOF CASEfensterganz:lks:=lkszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=obenerstezeile;CASEfensteroben:lks:=lkszeilenanfang;rts:=rtszeilenende;un:=obenletztezeile;ob:=obenerstezeile;CASEfensterunten:lks:=lkszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=untenerstezeile;CASEfensterrechtsoben:lks:=rtszeilenanfang;rts:=rtszeilenende;un:=obenletztezeile;ob:=obenerstezeile;CASEfensterrechtsunten:lks:=rtszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=untenerstezeile;CASEfensterrechts:lks:=rtszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=obenerstezeile;CASEblockstartwerte:lks:=40+1;rts:=78;un:=12;ob:=3;END SELECT;END PROClegefensterfest;OP:=(DIAGRAMM VARa,DIAGRAMM CONSTb):INT VARi;FORiFROM1UPTOb.anzahlpicturesREPa.inhalt(i):=b.inhalt(i)PER;FORiFROMb.anzahlpictures+1UPTOmaxpicturesREPa.inhalt(i):=nilpicture;PER;FORiFROM1UPTOb.anzahlpicfuerkreuzREPa.kreuz(i):=b.kreuz(i)PER;FORiFROMb.anzahlpicfuerkreuz+1UPTOmaxpicturesREPa.kreuz(i):=nilpicture;PER;a.belegt:=b.belegt;a.anzahlpictures:=b.anzahlpictures;a.anzahlpicfuerkreuz:=b.anzahlpicfuerkreuz;a.xmin:=b.xmin;a.xmax:=b.xmax;a.ymin:=b.ymin;a.ymax:=b.ymax;END OP:=;PROCnilkreuz(OUTPUT VARa,INT CONSTfenster):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENa.diag(1).anzahlpicfuerkreuz:=0;ELSEa.diag(2).anzahlpicfuerkreuz:=0;FI;END PROCnilkreuz;PROCnildiagramm(OUTPUT VARa,INT CONSTfenster):nildiagrammmitkreuz(a,fenster);nilkreuz(a,fenster);END PROCnildiagramm;PROCnildiagrammmitkreuz(OUTPUT VARa,INT CONSTfenster):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENa.diag(1).anzahlpictures:=0;a.diag(1).belegt:=TRUE;IFa.aufbau=strukt1fensterTHENa.text1.belegt:=FALSE FI;ELSEa.diag(2)
+.anzahlpictures:=0;a.diag(2).belegt:=TRUE;FI;END PROCnildiagrammmitkreuz;PROCputpicture(OUTPUT VARa,INT CONSTfenster,PICTURE CONSTpic):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THEN IFa.diag(1).anzahlpictures<maxpicturesTHENa.diag(1).anzahlpicturesINCR1;a.diag(1).inhalt(a.diag(1).anzahlpictures):=pic;FI;ELSE IFa.diag(2).anzahlpictures<maxpicturesTHENa.diag(2).anzahlpicturesINCR1;a.diag(2).inhalt(a.diag(2).anzahlpictures):=pic;FI;FI;END PROCputpicture;PROCputkreuz(OUTPUT VARa,INT CONSTfenster,PICTURE CONSTpic):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THEN IFa.diag(1).anzahlpicfuerkreuz<maxpicturesTHENa.diag(1).anzahlpicfuerkreuzINCR1;a.diag(1).kreuz(a.diag(1).anzahlpicfuerkreuz):=pic;FI;ELSE IFa.diag(2).anzahlpicfuerkreuz<maxpicturesTHENa.diag(2).anzahlpicfuerkreuzINCR1;a.diag(2).kreuz(a.diag(2).anzahlpicfuerkreuz):=pic;FI;FI;END PROCputkreuz;PROCwindow(OUTPUT VARa,INT CONSTfenster,REAL CONSTx1,x2,y1,y2):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENa.diag(1).xmin:=x1;a.diag(1).xmax:=x2;a.diag(1).ymin:=y1;a.diag(1).ymax:=y2;ELSEa.diag(2).xmin:=x1;a.diag(2).xmax:=x2;a.diag(2).ymin:=y1;a.diag(2).ymax:=y2;FI;END PROCwindow;PROCwindow(OUTPUT VARa,INT CONSTfenster,REAL CONSTy1,y2):IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENa.diag(1).ymin:=y1;a.diag(1).ymax:=y2;ELSEa.diag(2).ymin:=y1;a.diag(2).ymax:=y2;FI;END PROCwindow;PROCreplace(OUTPUT VARoutput,FILE CONSTfenstertext):FILE VARzwischenfile:=fenstertext;output.startwerte.belegt:=TRUE;output.startwerte.inhalt:=zwischenfile;output.startwerte.aktzeile:=anfangszeile;output.startwerte.naechsteseite:=anfangszeile;END PROCreplace;PROCreplace(OUTPUT VARoutput,INT CONSTfenster,FILE CONSTfenstertext):FILE VARzwischenfile:=fenstertext;IF(fenster=fensterganz)COR(fenster=fensteroben)COR(fenster=fensterrechtsoben)COR(fenster=fensterrechts)THENoutput.text1.belegt:=TRUE;output.text1.inhalt:=zwischenfile;output.text1.aktzeile:=anfangszeile;output.text1.naechsteseite:=anfangszeile;IFoutput.aufbau=strukt1fensterTHENoutput.diag(1).belegt:=FALSE;FI;ELIF(fenster=fensterrechtsunten)COR(fenster=fensterunten)THENoutput.text2.belegt:=TRUE;output.text2.inhalt:=zwischenfile;output.text2.aktzeile:=anfangszeile;output.text2.naechsteseite:=anfangszeile;FI;END PROCreplace;PROCplot(INT CONSTfenster,NURTEXT VARobj):setzefensterdaten;schreibe;.setzefensterdaten:INT VARlks,rts,un,ob;legefensterfest(lks,rts,un,ob,fenster);INT VARzeilenlaenge:=rts-lks+1;.schreibe:INT VARzeile:=ob,zeiger;TEXT VARzeilentext,ausgabezeile,leerzeile:=zeilenlaenge*" ";zeiger:=obj.aktzeile;FORzeileFROMobUPTOunWHILE NOTeof(obj.inhalt,zeiger)REPgetline(obj.inhalt,zeiger,zeilentext);ausgabezeile:=leerzeile;replace(ausgabezeile,1,zeilentext);cursor(lks,zeile);out(ausgabezeile);zeigerINCR1;PER;ob:=zeile;FORzeileFROMobUPTOunREPcursor(lks,zeile);loeschezeile;PER;IFeof(obj.inhalt,zeiger)THENobj.naechsteseite:=anfangszeileELSEobj.naechsteseite:=zeigerFI;.loeschezeile:out(leerzeile);.END PROCplot;FILE OP FILESUB(OUTPUT VARobjekt,INT CONSTfenster):TEXT VARfiletext;INT VARi;IFexists(teilfenster)THENforget(teilfenster,quiet)FI;FILE VARf:=sequentialfile(output,teilfenster);IF(fenster=fensterganz)COR(fenster=fensteroben)COR(fenster=fensterrechtsoben)COR(fenster=fensterrechts)THENholetext1ELSEholetext2FI;f.holetext1:FORiFROM1UPTOzeilenanzahl(objekt.text1.inhalt)REPgetline(objekt.text1.inhalt,i,filetext);putline(f,filetext);PER;.holetext2:FORiFROM1UPTOzeilenanzahl(objekt.text2.inhalt)REPgetline(objekt.text2.inhalt,i,filetext);putline(f,filetext);PER;.END OP FILESUB;PROCblaettere(OUTPUT VARobjekt,INT CONSTfenster):plottenaechsteseite;IF NOT(fenster=blockstartwerte)THENplotterahmendoppelt(objekt);FI.plottenaechsteseite:IF(fenster=fensterganz)COR(fenster=fensteroben)COR(fenster=fensterrechtsoben)COR(fenster=fensterrechts)THENobjekt.text1.aktzeile:=objekt.text1.naechsteseite;ELIFfenster=blockstartwerteTHENobjekt.startwerte.aktzeile:=objekt.startwerte.naechsteseite;ELSEobjekt.text2.aktzeile:=objekt.text2.naechsteseite;FI;
+SELECTfensterOF CASEfensterganz:plot(fensterganz,objekt.text1)CASEfensteroben:plot(fensteroben,objekt.text1)CASEfensterunten:plot(fensterunten,objekt.text2)CASEfensterrechts:plot(fensterrechts,objekt.text1)CASEfensterrechtsoben:plot(fensterrechtsoben,objekt.text1)CASEfensterrechtsunten:plot(fensterrechtsunten,objekt.text2)CASEblockstartwerte:plot(blockstartwerte,objekt.startwerte)END SELECT.END PROCblaettere;PROCblaettern(OUTPUT VARobjekt):SELECTobjekt.aufbauOF CASEstrukt1fenster:blaettere(objekt,fensterganz)CASEstrukt2diagramme1text:blaettere(objekt,fensterrechts)OTHERWISEerrorstop("falsches Fenster");END SELECT;plotterahmendoppelt(objekt);END PROCblaettern;PROCblaetternoben(OUTPUT VARobjekt):SELECTobjekt.aufbauOF CASEstrukt2texte:blaettere(objekt,fensteroben)CASEstrukt4fenster:blaettere(objekt,fensterrechtsoben)CASEstrukttabelleunten:blaettere(objekt,fensterrechtsoben)CASEstrukttabelleoben:blaettere(objekt,fensteroben)OTHERWISEerrorstop("falsches Fenster");END SELECT;plotterahmendoppelt(objekt);END PROCblaetternoben;PROCblaetternunten(OUTPUT VARobjekt):SELECTobjekt.aufbauOF CASEstrukt2texte:blaettere(objekt,fensterunten)CASEstrukt4fenster:blaettere(objekt,fensterrechtsunten)CASEstrukttabelleunten:blaettere(objekt,fensterunten)CASEstrukttabelleoben:blaettere(objekt,fensterrechtsunten)OTHERWISEerrorstop("falsches Fenster");END SELECT;plotterahmendoppelt(objekt);END PROCblaetternunten;BOOL PROCeof(SIMSELFILE VARn,INT CONSTaktuellezeile):aktuellezeile>zeilenanzahl(n).END PROCeof;OP:=(SIMSELFILE VARa,FILE VARb):INT VARi;input(b);FORiFROM1UPTOmaxfilezeilenWHILE NOTeof(b)REPgetline(b,a.filezeile(i));PER;a.zeilenanzahl:=i-1;END OP:=;OP:=(SIMSELFILE VARa,SIMSELFILE VARb):INT VARi;FORiFROM1UPTOb.zeilenanzahlREPa.filezeile(i):=b.filezeile(i);PER;a.zeilenanzahl:=b.zeilenanzahl;END OP:=;PROCsimselfile(SIMSELFILE VARsf):sf.zeilenanzahl:=0;END PROCsimselfile;PROCgetline(SIMSELFILE VARsf,INT CONSTzeiger,TEXT VARinhalt):IFzeiger<=sf.zeilenanzahlTHENinhalt:=sf.filezeile(zeiger);FI;END PROCgetline;INT PROCzeilenanzahl(SIMSELFILE VARsf):sf.zeilenanzahl.END PROCzeilenanzahl;BOOL VARframe:=TRUE;PROCsetzerahmen(BOOL CONSTx):frame:=xEND PROCsetzerahmen;TEXT PROCkopfzeilezusammenstellen(TEXT CONSTkopfzeilentext,namedesmodells,INT CONSTlaenge):TEXT VARzeilenanfang:=compress(auskunftstext(produktname))+zwischenraum,produktn:=compress(auskunftstext(produktname)),zeilenende:="";IFlength(namedesmodells)<length(produktn)THENzeilenende:=(length(produktn)-length(namedesmodells))*" ";FI;zeilenende:=zeilenende+zwischenraum+namedesmodells;INT VARzeilenrest:=laenge-length(zeilenanfang+zeilenende),blanks:=0;IFzeilenrest<length(kopfzeilentext)THENunterdrueckemodellnameFI;lieferekopfzeile.unterdrueckemodellname:zeilenanfang:=compress(auskunftstext(produktname));zeilenende:="";zeilenrest:=laenge-length(zeilenanfang);.lieferekopfzeile:zeilenrest:=zeilenrest-length(kopfzeilentext);blanks:=zeilenrestDIV2;zeilenanfang+(blanks*" ")+kopfzeilentext+(blanks*" ")+zeilenende.END PROCkopfzeilezusammenstellen;END PACKEToutput;
+
diff --git a/app/schulis-simulationssystem/3.0/src/output test b/app/schulis-simulationssystem/3.0/src/output test
new file mode 100644
index 0000000..5e286ad
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/output test
@@ -0,0 +1,5 @@
+PACKEToutputDEFINES OUTPUT,:=,niloutput,legefensterfest,plotteoutput,realarea,endgeraetbreite,graphikbreite,forget,:LETstrukt1fenster=1,strukt2texte=2,strukt2diagramme1text=3,strukt4fenster=4,strukttabelleunten=5,strukttabelleoben=6,fensterganz=1,fensteroben=2,fensterunten=3,fensterlinksoben=4,fensterlinksunten=5,fensterrechtsoben=6,fensterrechtsunten=7,fensterrechts=8,stdfarbe=1,stddicke=0,durchgezogen=1,hintergrund=0,vordergrund=1,maxpictures=10,blockstartwerte=9,maxfilezeilen=500,anfangszeile=1,typnummer=1055,lkszeilenanfang=4,rtszeilenanfang=42,rtszeilenende=79,obenerstezeile=3,obenletztezeile=12,untenerstezeile=14,untenletztezeile=23;REAL VARdruckerfaktor:=1.0,horcm,vertcm,width,height;INT VARpixhor,pixvert;drawingarea(horcm,vertcm,pixhor,pixvert);width:=horcm;height:=vertcm;REAL VARbuchsthoehe:=stdhoehe,buchstbreite:=stdbreite,minyabstand:=0.1,minxabstand:=buchstbreite/3.0;REAL VARhoehe:=buchsthoehe+3.0*minyabstand,links:=0.0,rechts:=horcm,spaltenmitte:=(vertcm)/2.0,oben:=vertcm-hoehe,unten:=hoehe,zeilenmitte:=horcm/2.0,rahmenoben:=vertcm,rahmenunten:=0.0,abstand:=0.1;REAL VARverkleinerunghoehe:=1.57,verkleinerungbreite:=1.2;ROW6PICTURE VARrahmenmitkreuz;erstellerahmen;TYPE OUTPUT=BOUND STRUCT(INTaufbau,TEXTkopfzeilentext,INTschluesselfusszeile,BOOLmitrahmen,REALstandardhoehe,standardbreite,sourcewidth,sourceheight,TEXTmodellbezeichner,dsname,ROW2DIAGRAMMdiag,NURTEXTtext1,text2,startwerte,PICTURErahmen);TYPE NURTEXT=STRUCT(BOOLbelegt,INTaktzeile,naechsteseite,SIMSELFILEinhalt);TYPE DIAGRAMM=STRUCT(BOOLbelegt,INTanzahlpictures,anzahlpicfuerkreuz,REALxmin,xmax,ymin,ymax,ROWmaxpicturesPICTUREkreuz,ROWmaxpicturesPICTUREinhalt);TYPE SIMSELFILE=STRUCT(ROWmaxfilezeilenTEXTfilezeile,INTzeilenanzahl);PROCplotohneclear(DIAGRAMM VARp):INT VARi;PICTURE VARpic;beginplot;FORiFROM1UPTOp.anzahlpicfuerkreuzREPpic:=p.kreuz(i);plottepic;PER;FORiFROM1UPTOp.anzahlpicturesREPpic:=p.inhalt(i);plottepic;PER;endplot.plottepic:IFpen(pic)<>0THENpen(0,stdfarbe,stddicke,pen(pic));plot(pic)FI.END PROCplotohneclear;OP:=(OUTPUT VARneu,DATASPACE CONSTspace):CONCR(neu):=space;END OP:=;PROCforget(OUTPUT VARalt):forget(alt.dsname,quiet);END PROCforget;DATASPACE PROCniloutput(INT CONSTbildaufbau,TEXT CONSTspacename):OUTPUT VARneu;forget(spacename,quiet);neu:=new(spacename);type(old(spacename),typnummer);neu.aufbau:=bildaufbau;neu.dsname:=spacename;neu.text1.belegt:=FALSE;neu.text1.aktzeile:=anfangszeile;simselfile(neu.text1.inhalt);neu.text1.naechsteseite:=anfangszeile;neu.text2.belegt:=FALSE;neu.text2.aktzeile:=anfangszeile;simselfile(neu.text2.inhalt);neu.text2.naechsteseite:=anfangszeile;neu.startwerte.belegt:=FALSE;neu.startwerte.aktzeile:=anfangszeile;simselfile(neu.startwerte.inhalt);neu.startwerte.naechsteseite:=anfangszeile;neu.standardhoehe:=stdhoehe;neu.standardbreite:=stdbreite;neu.sourcewidth:=horcm;neu.sourceheight:=vertcm;neu.diag(1).belegt:=FALSE;neu.diag(1).anzahlpictures:=0;neu.diag(2).anzahlpictures:=0;neu.diag(1).anzahlpicfuerkreuz:=0;neu.diag(2).anzahlpicfuerkreuz:=0;neu.diag(2).belegt:=FALSE;neu.mitrahmen:=TRUE;neu.rahmen:=rahmenmitkreuz(bildaufbau);old(neu.dsname).END PROCniloutput;PROCerstellerahmen:INT VARi;FORiFROM1UPTO6REPrahmenmitkreuz(i):=erstellerahmen(i)PER;END PROCerstellerahmen;PICTURE PROCerstellerahmen(INT CONSTi):PICTURE VARgrenzen;grenzen:=nilpicture;plrahmenunten;plrahmenlinks;plrahmenoben;plrahmenrechts;innererrahmenoben;innererrahmenunten;erstellekreuz;grenzen.plrahmenunten:movecm(grenzen,links,rahmenunten);drawcm(grenzen,rechts,rahmenunten).plrahmenlinks:movecm(grenzen,links,rahmenunten);drawcm(grenzen,links,rahmenoben).plrahmenoben:movecm(grenzen,links,rahmenoben);drawcm(grenzen,rechts,rahmenoben).plrahmenrechts:movecm(grenzen,rechts,rahmenoben);drawcm(grenzen,rechts,rahmenunten).innererrahmenoben:movecm(grenzen,links,oben);drawcm(grenzen,rechts,oben).innererrahmenunten:movecm(grenzen,links,unten);drawcm(grenzen,rechts,unten).erstellekreuz:SELECTiOF CASEstrukt2texte:waagerechtlks;waagerechtrts;CASEstrukttabelleunten:
+waagerechtlks;waagerechtrts;senkrechtoben;CASEstrukt4fenster:waagerechtlks;waagerechtrts;senkrechtoben;senkrechtunten;CASEstrukttabelleoben:waagerechtlks;waagerechtrts;senkrechtunten;CASEstrukt2diagramme1text:waagerechtlks;senkrechtoben;senkrechtunten;END SELECT;.waagerechtlks:movecm(grenzen,links,spaltenmitte);drawcm(grenzen,zeilenmitte,spaltenmitte).waagerechtrts:movecm(grenzen,zeilenmitte,spaltenmitte);drawcm(grenzen,rechts,spaltenmitte).senkrechtoben:movecm(grenzen,zeilenmitte,spaltenmitte);drawcm(grenzen,zeilenmitte,oben).senkrechtunten:movecm(grenzen,zeilenmitte,spaltenmitte);drawcm(grenzen,zeilenmitte,unten).END PROCerstellerahmen;PROCplotterahmen(OUTPUT VARoutput):beginplot;clear;pen(hintergrund,vordergrund,stddicke,durchgezogen);viewport(druckerfaktor*links,druckerfaktor*rechts,druckerfaktor*rahmenunten,druckerfaktor*rahmenoben);window(0.0,1.0,0.0,1.0);plot(output.rahmen);endplot;END PROCplotterahmen;PROCplotteoutput(THESAURUS CONSTth):do(PROC(TEXT CONST)plotteoutput,th)END PROCplotteoutput;PROCplotteoutput(TEXT CONSTdsname):enablestop;IFexists(dsname)THEN OUTPUT VARobjekt:=old(dsname)IF NOT(type(old(dsname))=typnummer)THENputline("Datenraum hat falschen Typ!");LEAVEplotteoutput;FI;ELSEputline("Datenraum existiert nicht!");LEAVEplotteoutputFI;setzeabmessungenbezueglichendgeraet;beginplot;clear;viewport(druckerfaktor*links,druckerfaktor*rechts,druckerfaktor*rahmenunten,druckerfaktor*rahmenoben);window(0.0,1.0,0.0,1.0);pen(0,1,0,1);IFobjekt.mitrahmenTHENplot(objekt.rahmen)FI;plottedarstellung;plotend;.setzeabmessungenbezueglichendgeraet:IFwidth>horcmTHENwidth:=horcmFI;height:=(width/objekt.sourcewidth)*objekt.sourceheight;IFheight>vertcmTHENheight:=vertcm;width:=(height/objekt.sourceheight)*objekt.sourcewidthFI;IFobjekt.mitrahmenTHENhoehe:=objekt.standardhoehe+3.0*minyabstandELSEhoehe:=0.0FI;rechts:=objekt.sourcewidth;spaltenmitte:=objekt.sourceheight/2.0;oben:=objekt.sourceheight-hoehe;unten:=hoehe;zeilenmitte:=objekt.sourcewidth/2.0;rahmenoben:=objekt.sourceheight;rahmenunten:=0.0;abstand:=0.1;druckerfaktor:=width/objekt.sourcewidth;cmfaktor(druckerfaktor).plottedarstellung:SELECTobjekt.aufbauOF CASEstrukt1fenster:IFobjekt.text1.belegtTHENdraw(fensterganz,objekt)ELIFobjekt.diag(1).belegtTHENplot(fensterganz,objekt)FI;CASEstrukt2texte:IFobjekt.text1.belegtTHENdraw(fensteroben,objekt);FI;IFobjekt.text2.belegtTHENdraw(fensterunten,objekt);FI;CASEstrukt2diagramme1text:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text1.belegtTHENdraw(fensterrechts,objekt);FI;CASEstrukt4fenster:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text1.belegtTHENdraw(fensterrechtsoben,objekt);FI;IFobjekt.text2.belegtTHENdraw(fensterrechtsunten,objekt);FI;CASEstrukttabelleunten:IFobjekt.diag(1).belegtTHENplot(fensterlinksoben,objekt);FI;IFobjekt.text1.belegtTHENdraw(fensterrechtsoben,objekt);FI;IFobjekt.text2.belegtTHENdraw(fensterunten,objekt);FI;CASEstrukttabelleoben:IFobjekt.text1.belegtTHENdraw(fensteroben,objekt);FI;IFobjekt.diag(2).belegtTHENplot(fensterlinksunten,objekt);FI;IFobjekt.text2.belegtTHENdraw(fensterrechtsunten,objekt);FI;END SELECT.END PROCplotteoutput;PROCendgeraetbreite(REAL CONSTbreite):width:=min(breite,horcm)END PROCendgeraetbreite;REAL PROCendgeraetbreite:widthEND PROCendgeraetbreite;PROCgraphikbreite(OUTPUT CONSTobj,REAL VARpapierbreite,endbreite):papierbreite:=min(vertcm,papierbreite);endbreite:=papierbreite/obj.sourceheight*obj.sourcewidth;IFendbreite>horcmTHENendbreite:=horcm;papierbreite:=endbreite/obj.sourcewidth*obj.sourceheightFI END PROCgraphikbreite;PROCrealarea(TEXT CONSToutputname,REAL VARquellbreite,quellhoehe):OUTPUT VARobj:=old(outputname);quellbreite:=obj.sourcewidth;quellhoehe:=obj.sourceheightEND PROCrealarea;PROCgibzeileaus(PICTURE VARrandzeile):viewport(druckerfaktor*links,druckerfaktor*rechts,druckerfaktor*rahmenunten,druckerfaktor*
+rahmenoben);beginplot;plot(randzeile);endplot;END PROCgibzeileaus;OP:=(OUTPUT VARneu,OUTPUT VARalt):CONCR(neu):=old(alt.dsname)END OP:=;PROCdraw(INT CONSTfenster,OUTPUT VARobjekt):SIMSELFILE VARtxt;IF(fenster=fensterganz)COR(fenster=fensteroben)COR(fenster=fensterrechtsoben)COR(fenster=fensterrechts)THENtxt:=objekt.text1.inhaltELIF(fenster=fensterrechtsunten)COR(fenster=fensterunten)THENtxt:=objekt.text2.inhaltFI;setzefensterdaten;schreibeintextfenster;plottetextfenster;.setzefensterdaten:REAL VARlks,rts,un,ob;legefensterfest(objekt,lks,rts,un,ob,fenster);ob:=ob-objekt.standardhoehe;INT VARzeilenlaenge:=int((rts-lks)/(objekt.standardbreite/verkleinerungbreite));.schreibeintextfenster:PICTURE VARplotobj:=nilpicture;REAL VARzeile:=ob;INT VARzeiger;TEXT VARzeilentext;zeiger:=1;WHILEzeile>unCAND NOTeof(txt,zeiger)REPgetline(txt,zeiger,zeilentext);movecm(plotobj,lks,zeile);draw(plotobj,subtext(zeilentext,1,zeilenlaenge),0.0,objekt.standardhoehe/verkleinerunghoehe,objekt.standardbreite/verkleinerungbreite);zeigerINCR1;zeile:=zeile-(objekt.standardhoehe/verkleinerunghoehe)-abstand;PER;.plottetextfenster:viewport(druckerfaktor*lks,druckerfaktor*rts,druckerfaktor*un,druckerfaktor*ob);window(0.0,1.0,0.0,1.0);beginplot;pen(0,stdfarbe,stddicke,durchgezogen);plot(plotobj);endplot;.END PROCdraw;PROCplot(INT CONSTfenster,OUTPUT VARobj):DIAGRAMM VARdiagramm;IF(fenster=fensterganz)COR(fenster=fensterlinksoben)THENdiagramm:=obj.diag(1)ELSEdiagramm:=obj.diag(2)FI;REAL VARx1,x2,y1,y2;IFdiagramm.belegtTHENplottediagr;FI;.plottediagr:legefensterfest(obj,x1,x2,y1,y2,fenster);window(diagramm.xmin,diagramm.xmax,diagramm.ymin,diagramm.ymax);viewport(druckerfaktor*x1,druckerfaktor*x2,druckerfaktor*y1,druckerfaktor*y2);plotohneclear(diagramm);.END PROCplot;PROClegefensterfest(OUTPUT VARobj,REAL VARlks,rts,un,ob,INT CONSTfensterlage):SELECTfensterlageOF CASEfensterganz:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=obj.sourcewidth-2.0*abstand;un:=hoehe+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=obj.sourceheight-hoehe-abstand-obj.standardhoehe;CASEfensteroben:lks:=(3.0*abstand)+2.0*obj.standardbreite;rts:=obj.sourcewidth-abstand;un:=(obj.sourceheight/2.0)+(3.0*abstand);ob:=obj.sourceheight-hoehe-2.0*abstand;CASEfensterunten:lks:=(3.0*abstand)+2.0*obj.standardbreite;rts:=obj.sourcewidth-abstand;un:=hoehe+(3.0*abstand);ob:=(obj.sourceheight/2.0)-2.0*abstand;CASEfensterlinksoben:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=(obj.sourcewidth/2.0)-2.0*abstand;un:=(obj.sourceheight/2.0)+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=obj.sourceheight-hoehe-abstand-obj.standardhoehe;CASEfensterlinksunten:lks:=(3.0*abstand)+(8.5*obj.standardbreite);rts:=(obj.sourcewidth/2.0)-2.0*abstand;un:=hoehe+(2.0*obj.standardhoehe)+(4.0*abstand);ob:=(obj.sourceheight/2.0)-abstand-obj.standardhoehe;CASEfensterrechts:lks:=obj.sourcewidth/2.0+(3.0*abstand)+obj.standardbreite;rts:=obj.sourcewidth-abstand;un:=hoehe+(2.0*abstand);ob:=obj.sourceheight-hoehe-2.0*abstand;CASEfensterrechtsoben:lks:=obj.sourcewidth/2.0+(2.0*abstand);rts:=obj.sourcewidth-abstand;un:=(obj.sourceheight/2.0)+(2.0*abstand);ob:=obj.sourceheight-hoehe-2.0*abstand;CASEfensterrechtsunten:lks:=obj.sourcewidth/2.0+(2.0*abstand);rts:=obj.sourcewidth-abstand;un:=hoehe+(2.0*abstand);ob:=(obj.sourceheight/2.0)-2.0*abstand;END SELECT;END PROClegefensterfest;PROClegefensterfest(INT VARlks,rts,un,ob,INT CONSTfensterlage,):SELECTfensterlageOF CASEfensterganz:lks:=lkszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=obenerstezeile;CASEfensteroben:lks:=lkszeilenanfang;rts:=rtszeilenende;un:=obenletztezeile;ob:=obenerstezeile;CASEfensterunten:lks:=lkszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=untenerstezeile;CASEfensterrechtsoben:lks:=rtszeilenanfang;rts:=rtszeilenende;un:=obenletztezeile;ob:=obenerstezeile;CASEfensterrechtsunten:lks:=rtszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=untenerstezeile;CASEfensterrechts:lks:=rtszeilenanfang;rts:=rtszeilenende;un:=untenletztezeile;ob:=obenerstezeile;
+CASEblockstartwerte:lks:=40+1;rts:=78;un:=12;ob:=3;END SELECT;END PROClegefensterfest;OP:=(DIAGRAMM VARa,DIAGRAMM CONSTb):INT VARi;FORiFROM1UPTOb.anzahlpicturesREPa.inhalt(i):=b.inhalt(i)PER;FORiFROMb.anzahlpictures+1UPTOmaxpicturesREPa.inhalt(i):=nilpicture;PER;FORiFROM1UPTOb.anzahlpicfuerkreuzREPa.kreuz(i):=b.kreuz(i)PER;FORiFROMb.anzahlpicfuerkreuz+1UPTOmaxpicturesREPa.kreuz(i):=nilpicture;PER;a.belegt:=b.belegt;a.anzahlpictures:=b.anzahlpictures;a.anzahlpicfuerkreuz:=b.anzahlpicfuerkreuz;a.xmin:=b.xmin;a.xmax:=b.xmax;a.ymin:=b.ymin;a.ymax:=b.ymax;END OP:=;BOOL PROCeof(SIMSELFILE VARn,INT CONSTaktuellezeile):aktuellezeile>zeilenanzahl(n).END PROCeof;OP:=(SIMSELFILE VARa,FILE VARb):INT VARi;input(b);FORiFROM1UPTOmaxfilezeilenWHILE NOTeof(b)REPgetline(b,a.filezeile(i));PER;a.zeilenanzahl:=i-1;END OP:=;OP:=(SIMSELFILE VARa,SIMSELFILE VARb):INT VARi;FORiFROM1UPTOb.zeilenanzahlREPa.filezeile(i):=b.filezeile(i);PER;a.zeilenanzahl:=b.zeilenanzahl;END OP:=;PROCsimselfile(SIMSELFILE VARsf):sf.zeilenanzahl:=0;END PROCsimselfile;PROCgetline(SIMSELFILE VARsf,INT CONSTzeiger,TEXT VARinhalt):IFzeiger<=sf.zeilenanzahlTHENinhalt:=sf.filezeile(zeiger);FI;END PROCgetline;INT PROCzeilenanzahl(SIMSELFILE VARsf):sf.zeilenanzahl.END PROCzeilenanzahl;END PACKEToutput;
+
diff --git a/app/schulis-simulationssystem/3.0/src/simsel basis plot b/app/schulis-simulationssystem/3.0/src/simsel basis plot
new file mode 100644
index 0000000..a4bf17d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel basis plot
@@ -0,0 +1,4 @@
+PACKETsimselbasisplotDEFINEStransform,setvalues,getvalues,getparameter,putparameter,newvalues,drawingarea,window,viewport,view,box,move,draw,mover,drawr,movecm,drawcm,movecmr,drawcmr,kreispunkte,circle,where:BOOL VARnewlimits:=TRUE,valuesnew:=TRUE,perspectiveprojektion:=FALSE;INT VARpixelhor,pixelvert;REAL VARdisplayhor,displayvert,sizehor,sizevert;drawingarea(sizehor,sizevert,pixelhor,pixelvert);displayhor:=real(pixelhor);displayvert:=real(pixelvert);REAL VARhminlimit:=0.0,hmaxlimit:=displayhor,vminlimit:=0.0,vmaxlimit:=displayvert,hmin:=0.0,hmax:=sizehor,vmin:=0.0,vmax:=sizevert,horrelation:=displayhor/sizehor,vertrelation:=displayvert/sizevert,relation:=sizehor/sizevert;ROW5ROW5REAL VARp:=ROW5ROW5REAL:(ROW5REAL:(1.0,0.0,0.0,0.0,0.0),ROW5REAL:(0.0,1.0,0.0,0.0,0.0),ROW5REAL:(0.0,0.0,1.0,0.0,0.0),ROW5REAL:(0.0,0.0,0.0,1.0,0.0),ROW5REAL:(0.0,0.0,0.0,0.0,1.0));ROW3ROW2REAL VARsized:=ROW3ROW2REAL:(ROW2REAL:(0.0,1.0),ROW2REAL:(0.0,1.0),ROW2REAL:(0.0,1.0));ROW2ROW2REAL VARlimitsd:=ROW2ROW2REAL:(ROW2REAL:(0.0,relation),ROW2REAL:(0.0,1.0));ROW4REAL VARanglesd:=ROW4REAL:(0.0,0.0,0.0,0.0);ROW2REAL VARobliqued:=ROW2REAL:(0.0,0.0);ROW3REAL VARperspectived:=ROW3REAL:(0.0,0.0,0.0);REAL VARsizehord:=sizehor,sizevertd:=sizevert;INT VARpixelhord:=pixelhor,pixelvertd:=pixelvert;INT VARi,j;REAL VARkreisschritt:=18.0;PROCkreispunkte(INT CONSTp):kreisschritt:=360.0/real(p)END PROCkreispunkte;BOOL OP=(ROW3ROW2REAL CONSTl,r):FORiFROM1UPTO3REP IFl[i][1]<>r[i][1]ORl[i][2]<>r[i][2]THEN LEAVE=WITH FALSE FI PER;TRUE END OP=;BOOL OP=(ROW2ROW2REAL CONSTl,r):FORiFROM1UPTO2REP IFl[i][1]<>r[i][1]ORl[i][2]<>r[i][2]THEN LEAVE=WITH FALSE FI PER;TRUE END OP=;BOOL OP=(ROW2REAL CONSTl,r):l[1]=r[1]ANDl[2]=r[2]END OP=;BOOL OP=(ROW3REAL CONSTl,r):l[1]=r[1]ANDl[2]=r[2]ANDl[3]=r[3]END OP=;BOOL OP=(ROW4REAL CONSTl,r):l[1]=r[1]ANDl[2]=r[2]ANDl[3]=r[3]ANDl[4]=r[4]END OP=;PROCwindow(BOOL CONSTdev):newlimits:=devEND PROCwindow;PROCwindow(REAL CONSTxmin,xmax,ymin,ymax):window(xmin,xmax,ymin,ymax,0.0,1.0)END PROCwindow;PROCwindow(REAL CONSTxmin,xmax,ymin,ymax,zmin,zmax):setvalues(ROW3ROW2REAL:(ROW2REAL:(xmin,xmax),ROW2REAL:(ymin,ymax),ROW2REAL:(zmin,zmax)),limitsd,anglesd,obliqued,perspectived)END PROCwindow;PROCviewport(REAL CONSThmin,hmax,vmin,vmax):setvalues(sized,ROW2ROW2REAL:(ROW2REAL:(hmin,hmax),ROW2REAL:(vmin,vmax)),anglesd,obliqued,perspectived)END PROCviewport;PROCview(REAL CONSTalpha):setvalues(sized,limitsd,ROW4REAL:(alpha,anglesd(2),anglesd(3),anglesd(4)),obliqued,perspectived)END PROCview;PROCview(REAL CONSTphi,theta):setvalues(sized,limitsd,ROW4REAL:(anglesd(1),sind(theta)*cosd(phi),sind(theta)*sind(phi),cosd(theta)),obliqued,perspectived)END PROCview;PROCview(REAL CONSTx,y,z):setvalues(sized,limitsd,ROW4REAL:(anglesd(1),x,y,z),obliqued,perspectived)END PROCview;setvalues(sized,limitsd,anglesd,obliqued,perspectived);PROCdrawingarea(REAL VARminh,maxh,minv,maxv):minh:=hminlimit;maxh:=hmaxlimit;minv:=vminlimit;maxv:=vmaxlimitEND PROCdrawingarea;BOOL PROCnewvalues:IFvaluesnewTHENvaluesnew:=FALSE;TRUE ELSE FALSE FI END PROCnewvalues;PROCgetparameter(ROW5ROW5REAL VARvalues):values:=p;END PROCgetparameter;PROCputparameter(ROW5ROW5REAL CONSTvalues):p:=values;END PROCputparameter;PROCgetvalues(ROW3ROW2REAL VARsize,ROW2ROW2REAL VARlimits,ROW4REAL VARangles,ROW2REAL VARoblique,ROW3REAL VARperspective):size:=sized;limits:=limitsd;angles:=anglesd;oblique:=obliqued;perspective:=perspectived;END PROCgetvalues;PROCsetvalues(ROW3ROW2REAL CONSTsize,ROW2ROW2REAL CONSTlimits,ROW4REAL CONSTangles,ROW2REAL CONSToblique,ROW3REAL CONSTperspective):drawingarea(sizehor,sizevert,pixelhor,pixelvert);displayhor:=real(pixelhor);displayvert:=real(pixelvert);IF NOTsamevaluesTHENvaluesnew:=TRUE;copyvalues;setviews;checkperspectiveprojektion;calclimits;changeprojektionFI.samevalues:sizehord=sizehorANDsizevertd=sizevertANDpixelhord=pixelhorANDpixelvertd=pixelvertANDsized=sizeANDlimitsd=limitsANDanglesd=anglesANDobliqued=obliqueANDperspectived=perspective.copyvalues:sizehord:=sizehor;sizevertd:=
+sizevert;pixelhord:=pixelhor;pixelvertd:=pixelvert;hmaxlimit:=displayhor;vmaxlimit:=displayvert;hmax:=sizehor;vmax:=sizevert;horrelation:=displayhor/sizehor;vertrelation:=displayvert/sizevert;relation:=sizehor/sizevert;sized:=size;limitsd:=limits;anglesd:=angles;obliqued:=oblique;perspectived:=perspective.setviews:REAL VARdiagonale:=sqrt(angles[2]*angles[2]+angles[3]*angles[3]+angles[4]*angles[4]),projektion:=sqrt(angles[2]*angles[2]+angles[4]*angles[4]),sinp,cosp,sint,cost,sina,cosa;IFdiagonale=0.0THENsinp:=0.0;cosp:=1.0;sint:=0.0;cost:=1.0ELIFprojektion=0.0THENsinp:=angles[3]/diagonale;cosp:=projektion/diagonale;sint:=0.0;cost:=1.0ELSEsinp:=angles[3]/diagonale;cosp:=projektion/diagonale;sint:=angles[2]/projektion;cost:=angles[4]/projektionFI;REAL VARsinpsint:=sinp*sint,sinpcost:=sinp*cost,cospsint:=cosp*sint,cospcost:=cosp*cost,dx:=size[1][2]-size[1][1],dy:=size[2][2]-size[2][1],dz:=size[3][2]-size[3][1],normaz:=oblique[1],normbz:=oblique[2],normcx:=perspective[1]/dx,normcy:=perspective[2]/dy,normcz:=perspective[3]/dz;p:=ROW5ROW5REAL:(ROW5REAL:(cost/dx-cospsint/dx*normaz,-sinpsint/dx-cospsint/dx*normbz,0.0,-cospsint/dx*normcz,0.0),ROW5REAL:(-sinp/dy*normaz,cosp/dy-sinp/dy*normbz,0.0,-sinp/dy*normcz,0.0),ROW5REAL:(sint/dz+cospcost/dz*normaz,+sinpcost/dz+cospcost/dz*normbz,0.0,cospcost/dz*normcz,0.0),ROW5REAL:(-normcx,-normcy,0.0,1.0,0.0),ROW5REAL:(0.0,0.0,0.0,0.0,1.0));IFangles(1)=0.0THENsetalphaasyverticalELSEsina:=sind(angles(1));cosa:=cosd(angles(1))FI;FORjFROM1UPTO5REP REAL CONSTpj1:=p(j)(1);p(j)(1):=pj1*cosa-p(j)(2)*sina;p(j)(2):=pj1*sina+p(j)(2)*cosaPER.setalphaasyvertical:REAL VARr:=sqrt(p(2)(1)**2+p(2)(2)**2);IFr=0.0THENsina:=0.0;cosa:=1.0ELSEsina:=-p(2)(1)/r;cosa:=p(2)(2)/rFI.checkperspectiveprojektion:perspectiveprojektion:=perspective[3]<>0.0.calclimits:IFnewlimitsTHENcalctwodimextrema;IFalllimitssmallerthan2THENprozenteELSEzentimeterFI FI.calctwodimextrema:hmin:=maxreal;hmax:=-maxreal;vmin:=maxreal;vmax:=-maxreal;extrema(size[1][1],size[2][1],size[3][1],hmin,hmax,vmin,vmax);extrema(size[1][2],size[2][1],size[3][1],hmin,hmax,vmin,vmax);extrema(size[1][2],size[2][2],size[3][1],hmin,hmax,vmin,vmax);extrema(size[1][1],size[2][2],size[3][1],hmin,hmax,vmin,vmax);extrema(size[1][1],size[2][1],size[3][2],hmin,hmax,vmin,vmax);extrema(size[1][2],size[2][1],size[3][2],hmin,hmax,vmin,vmax);extrema(size[1][2],size[2][2],size[3][2],hmin,hmax,vmin,vmax);extrema(size[1][1],size[2][2],size[3][2],hmin,hmax,vmin,vmax).alllimitssmallerthan2:limits(1)(2)<2.0ANDlimits(2)(2)<2.0.prozente:hminlimit:=displayhor*limits(1)(1)/relation;hmaxlimit:=displayhor*limits(1)(2)/relation;vminlimit:=limits(2)(1)*displayvert;vmaxlimit:=limits(2)(2)*displayvert.zentimeter:hminlimit:=displayhor*(limits(1)(1)/sizehor);hmaxlimit:=displayhor*(limits(1)(2)/sizehor);vminlimit:=displayvert*(limits(2)(1)/sizevert);vmaxlimit:=displayvert*(limits(2)(2)/sizevert).changeprojektion:REAL VARsh:=(hmaxlimit-hminlimit)/(hmax-hmin),sv:=(vmaxlimit-vminlimit)/(vmax-vmin),dh:=hminlimit-hmin*sh,dv:=vminlimit-vmin*sv;FORjFROM1UPTO5REPp(j)(1):=p(j)(1)*sh;p(j)(2):=p(j)(2)*svPER;p(5)(1):=dh;p(5)(2):=dv.END PROCsetvalues;PROCtransform(REAL CONSTx,y,z,INT VARh,v):disablestop;IFperspectiveprojektionTHEN REAL CONSTw:=1.0/(x*p(1)(4)+y*p(2)(4)+z*p(3)(4)+1.0);h:=int((x*p(1)(1)+y*p(2)(1)+z*p(3)(1)+p(4)(1))*w+p(5)(1));v:=int((x*p(1)(2)+y*p(2)(2)+z*p(3)(2)+p(4)(2))*w+p(5)(2))ELSEh:=int(x*p(1)(1)+y*p(2)(1)+z*p(3)(1)+p(5)(1));v:=int(x*p(1)(2)+y*p(2)(2)+z*p(3)(2)+p(5)(2));FI;IFiserrorTHENh:=-1;v:=-1;clearerror;FI;enablestop;END PROCtransform;PROCextrema(REAL CONSTx,y,z,REAL VARhmin,hmax,vmin,vmax):REAL VARh,v;IFperspectiveprojektionTHEN REAL CONSTw:=1.0/(x*p(1)(4)+y*p(2)(4)+z*p(3)(4)+1.0);h:=(x*p(1)(1)+y*p(2)(1)+z*p(3)(1)+p(4)(1))*w;v:=(x*p(1)(2)+y*p(2)(2)+z*p(3)(2)+p(4)(2))*wELSEh:=(x*p(1)(1)+y*p(2)(1)+z*p(3)(1));v:=(x*p(1)(2)+y*p(2)(2)+z*p(3)(2))FI;IFh<hminTHENhmin:=hELIFh>hmaxTHENhmax:=hFI;IFv<vminTHENvmin:=vELIFv>vmaxTHENvmax:=vFI END PROCextrema;LET POS=STRUCT(REALx,y,z);POS VARpos:=POS
+:(0.0,0.0,0.0);INT VARh:=0,v:=0;PROCbox:move(int(hminlimit+0.5),int(vminlimit+0.5));draw(int(hmaxlimit+0.5),int(vminlimit+0.5));draw(int(hmaxlimit+0.5),int(vmaxlimit+0.5));draw(int(hminlimit+0.5),int(vmaxlimit+0.5));draw(int(hminlimit+0.5),int(vminlimit+0.5))END PROCbox;PROCmove(REAL CONSTx,y):transform(x,y,0.0,h,v);move(h,v);pos:=POS:(x,y,0.0)END PROCmove;PROCdraw(REAL CONSTx,y):transform(x,y,0.0,h,v);draw(h,v);pos:=POS:(x,y,0.0)END PROCdraw;PROCmover(REAL CONSTx,y):transform(pos.x+x,pos.y+y,pos.z,h,v);move(h,v);pos:=POS:(pos.x+x,pos.y+y,pos.z)END PROCmover;PROCdrawr(REAL CONSTx,y):transform(pos.x+x,pos.y+y,pos.z,h,v);draw(h,v);pos:=POS:(pos.x+x,pos.y+y,pos.z)END PROCdrawr;PROCmovecm(REAL CONSTxcm,ycm):h:=int(xcm*horrelation+0.5);v:=int(ycm*vertrelation+0.5);move(h,v)END PROCmovecm;PROCdrawcm(REAL CONSTxcm,ycm):h:=int(xcm*horrelation+0.5);v:=int(ycm*vertrelation+0.5);draw(h,v);END PROCdrawcm;PROCmovecmr(REAL CONSTxcm,ycm):hINCRint(xcm*horrelation+0.5);vINCRint(ycm*vertrelation+0.5);move(h,v)END PROCmovecmr;PROCdrawcmr(REAL CONSTxcm,ycm):hINCRint(xcm*horrelation+0.5);vINCRint(ycm*vertrelation+0.5);draw(h,v)END PROCdrawcmr;PROCwhere(REAL VARx,y):x:=pos.x;y:=pos.yEND PROCwhere;PROCcircle(REAL CONSTr,from,to,INT CONSTpattern):REAL VARt:=from;INT VARi,j;transform(pos.x,pos.y,0.0,h,v);i:=h;j:=v;h:=i+int(horrelation*r*cosd(t));v:=j+int(vertrelation*r*sind(t));WHILEt<=toREPh:=i+int(horrelation*r*cosd(t));v:=j+int(vertrelation*r*sind(t));draw(h,v);tINCRkreisschrittPER;draw(h,v).END PROCcircle;ENDPACKETsimselbasisplot;
+
diff --git a/app/schulis-simulationssystem/3.0/src/simsel cga plot b/app/schulis-simulationssystem/3.0/src/simsel cga plot
new file mode 100644
index 0000000..03b2685
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel cga plot
@@ -0,0 +1,3 @@
+PACKEToldproceduresDEFINESoldout,oldcursor,oldgetcursor:PROColdcursor(INT CONSTa,b):cursor(a,b)END PROColdcursor;PROColdgetcursor(INT VARa,b):getcursor(a,b)END PROColdgetcursor;PROColdout(TEXT CONSTtext):out(text)END PROColdoutEND PACKEToldprocedures;PACKETcgaplotDEFINESdrawingarea,beginplot,endplot,plotend,stdhoehe,stdbreite,terminalkorrekt,clear,pen,move,draw,out,cursor,getcursor,zeichensatz:LEThorfaktor=29.09091,vertfaktor=14.59854,delete=0,nothing=0,durchgehend=1,gepunktet=2,kurzgestrichelt=3,langgestrichelt=4,strichpunkt=5,colourcode=256,anzahlx=640,anzahly=200,bit14=16384;LET POS=STRUCT(INTx,y);LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);ZEICHENSATZ VARzeichen;INT VARactthick:=0,dummy;POS VARpos:=POS:(0,0);REAL VARbuchstabenhoehe:=0.525167,buchstabenbreite:=0.275;PROCout(TEXT CONSTtext):TEXT VARtextcopy:=text;IF NOTgraphiconTHENoldout(text)ELSEneuesoutFI.neuesout:INT CONSTxpos:=(spalte-1)*zeichen.width,ypos:=anzahly-(zeile*zeichen.height);pruefetext;loeschealtentext;gibneuentextaus.pruefetext:IFspalte+(LENGTHtext)-1>anzahlxDIVzeichen.widthTHENtextcopy:=subtext(text,1,anzahlxDIVzeichen.width-spalte+1)FI.loeschealtentext:IF(textcopySUB1)>code(31)THENclearFI.clear:INT CONSTxbis:=xpos+(LENGTHtextcopy)*zeichen.width-1;INT VARi;pen(0,0,0,1);FORiFROM0UPTOzeichen.height-1REPmove(xpos,ypos+i);draw(xbis,ypos+i)PER;move(xpos,ypos);pen(0,1,0,1).gibneuentextaus:draw(textcopy);cursor(spalte+(LENGTHtextcopy),zeile)END PROCout;BOOL PROCterminalkorrekt:page;putline("Mit Ihrer Task können Sie nur an Graphik-Bildschirmen");putline("arbeiten, die durch die CGA-Karte (oder eine kompatible");putline("Karte, z.B. EGA-Karte) unterstützt werden.");line;yes("Ist Ihr Bildschirm von diesem Typ")END PROCterminalkorrekt;PROCzeichensatz(TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARnewzeichen:=old(name);zeichen:=newzeichen;ELSEerrorstop("Der Zeichensatz ""+name+"" existiert nicht")FI END PROCzeichensatz;PROCdrawingarea(REAL VARxcm,ycm,INT VARxpixel,ypixel):xcm:=22.0;ycm:=13.7;xpixel:=anzahlx-1;ypixel:=anzahly-1;END PROCdrawingarea;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCbeginplot:graphicon:=TRUE;ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCplotend:control(-5,3,0,dummy);graphicon:=FALSE;ENDPROCplotend;PROCclear:control(-5,6,0,dummy);control(-4,0,colourcode,dummy);actthick:=0;END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):actthick:=thickness;control(-8,linetypecode,foregroundcode,dummy).linetypecode:SELECTlinetypeOF CASEnothing:0CASEdurchgehend:-1CASEgepunktet:21845CASEkurzgestrichelt:3855CASElanggestrichelt:255CASEstrichpunkt:4351OTHERWISElinetypeEND SELECT.foregroundcode:IFforeground=deleteTHEN0ELIFforeground<0THEN128ELSEforegroundFI.END PROCpen;PROCmove(INT CONSTx,y):xMOVEy;pos:=POS:(x,y)END PROCmove;PROCdraw(INT CONSTx,y):pos.xDRAWpos.y;control(-6,x,anzahly-1-y,dummy);pos:=POS:(x,y).END PROCdraw;INT VARxfak:=zeichen.width,yfak:=zeichen.height;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxpos:=pos.x,ypos:=pos.y,i,n,x,y;BOOL VARmoveorder;setcharacterheightandwidth;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;pos.xMOVEpos.y.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen.width;yfak:=zeichen.heightELSExfak:=int(horfaktor*width+0.5);yfak:=int(vertfaktor*height+0.5)FI.characterxstep:IFwidth<>0.0THENint(cosd(angle)*horfaktor*width+0.5)ELSEint(cosd(angle)*real(zeichen.width)+0.5)FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height+0.5)ELSEint(sind(angle)*real(zeichen.height)+0.5)FI.drawcharacteri:IFcode(recordSUBi)<32THENsteuerzeichenELSEnormalezeichenFI.steuerzeichen:IFcode(recordSUBi)=7THENoldout("�")FI.normalezeichen:TEXT CONSTchar:=zeichen.char[code(recordSUBi)];INT VARxold:=xpos,yold:=ypos;FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENxpos+xMOVEypos+y;ELSExoldDRAWyold;xpos+xDRAWypos+yFI;xold:=xpos+x;
+yold:=ypos+y;PER;xposINCRxstep;yposINCRystep.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=(x*xfak)DIVzeichen.width;y:=(y*yfak)DIVzeichen.heightEND PROCvalue;OP MOVE(INT CONSTx,y):INT VARxwert:=x,ywert:=y;grenzkontrolle(xwert,ywert);control(-7,xwert,anzahly-1-ywert,dummy)END OP MOVE;OP DRAW(INT CONSTx,y):INT VARxwert:=x,ywert:=y;grenzkontrolle(xwert,ywert);control(-6,xwert,anzahly-1-ywert,dummy)END OP DRAW;PROCgrenzkontrolle(INT VARx,y):INT VARxwert,ywert;IFx>anzahlx-1THENxwert:=anzahlx-1ELIFx<0THENxwert:=0ELSExwert:=xFI;IFy>anzahly-1THENywert:=anzahly-1ELIFy<0THENywert:=0ELSEywert:=yFI;x:=xwert;y:=ywert;END PROCgrenzkontrolle;INT VARzeile:=1,spalte:=1;BOOL VARgraphicon:=FALSE;PROCgetcursor(INT VARa,b):IFgraphiconTHENa:=spalte;b:=zeileELSEoldgetcursor(a,b)FI END PROCgetcursor;PROCcursor(INT CONSTa,b):IFgraphiconTHEN IFa>anzahlxDIVzeichen.widthTHENspalte:=anzahlxDIVzeichen.widthELIFa<=0THENspalte:=1ELSEspalte:=aFI;IFb>anzahlyDIVzeichen.heightTHENzeile:=anzahlyDIVzeichen.heightELIFb<=0THENzeile:=1ELSEzeile:=bFI ELSEoldcursor(a,b)FI END PROCcursor;END PACKETcgaplot;zeichensatz("ZEICHEN 8*8")
+
diff --git a/app/schulis-simulationssystem/3.0/src/simsel ega plot b/app/schulis-simulationssystem/3.0/src/simsel ega plot
new file mode 100644
index 0000000..07f7fe3
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel ega plot
@@ -0,0 +1,3 @@
+PACKEToldproceduresDEFINESoldcursor,oldgetcursor,oldout:PROColdcursor(INT CONSTa,b):cursor(a,b)END PROColdcursor;PROColdgetcursor(INT VARa,b):getcursor(a,b)END PROColdgetcursor;PROColdout(TEXT CONSTtext):out(text)END PROColdoutEND PACKEToldprocedures;PACKETegaplotDEFINESdrawingarea,beginplot,endplot,plotend,stdhoehe,stdbreite,terminalkorrekt,clear,pen,move,draw,cursor,getcursor,out,zeichensatz:LEThorfaktor=29.09091,vertfaktor=25.54745,delete=0,nothing=0,durchgehend=1,gepunktet=2,kurzgestrichelt=3,langgestrichelt=4,strichpunkt=5,colourcode=256,xpixel=640,ypixel=350,bit14=16384;LET POS=STRUCT(INTx,y);LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);ZEICHENSATZ VARzeichen;INT VARactthick:=0,dummy;POS VARpos:=POS:(0,0);REAL VARbuchstabenhoehe:=0.5422916,buchstabenbreite:=0.275;BOOL PROCterminalkorrekt:page;putline("Mit Ihrer Task können Sie nur an Graphik-Bildschirmen");putline("arbeiten, die durch die EGA-Karte (oder eine kompatible");putline("Karte) unterstützt werden.");line;yes("Ist Ihr Bildschirm von diesem Typ")END PROCterminalkorrekt;PROCzeichensatz(TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARnewzeichen:=old(name);zeichen:=newzeichen;ELSEerrorstop("Der Zeichensatz ""+name+"" existiert nicht")FI END PROCzeichensatz;PROCdrawingarea(REAL VARxcm,ycm,INT VARx,y):xcm:=22.0;ycm:=13.7;x:=xpixel-1;y:=ypixel-1;END PROCdrawingarea;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCbeginplot:graphicon:=TRUE ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCplotend:control(-5,3,0,dummy);graphicon:=FALSE ENDPROCplotend;PROCclear:control(-5,16,0,dummy);actthick:=0;END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):actthick:=thickness;control(-8,-1,foregroundcode,dummy).foregroundcode:IFforeground=deleteTHEN0ELSElinetypecodeFI.linetypecode:SELECTlinetypeOF CASEnothing:0CASEdurchgehend:15CASEgepunktet:1CASEkurzgestrichelt:2CASElanggestrichelt:3CASEstrichpunkt:4OTHERWISElinetypeEND SELECT.END PROCpen;PROCmove(INT CONSTx,y):xMOVEy;pos:=POS:(x,y)END PROCmove;PROCdraw(INT CONSTx,y):xDRAWy;pos:=POS:(x,y).END PROCdraw;INT VARxfak:=zeichen.width,yfak:=zeichen.height;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxpos:=pos.x,ypos:=pos.y,i,n,x,y,xold:=xpos,yold:=ypos;BOOL VARmoveorder;setcharacterheightandwidth;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;xoldMOVEyold;pos.x:=xold;pos.y:=yold;.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen.width;yfak:=zeichen.heightELSExfak:=int(horfaktor*width+0.5);yfak:=int(vertfaktor*height+0.5)FI.characterxstep:IFwidth<>0.0THENint(cosd(angle)*horfaktor*width+0.5)ELSEint(cosd(angle)*real(zeichen.width)+0.5)FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height+0.5)ELSEint(sind(angle)*real(zeichen.height)+0.5)FI.drawcharacteri:IFcode(recordSUBi)<32THENsteuerzeichenELSEnormalezeichenFI.steuerzeichen:IFcode(recordSUBi)=7THENoldout("�")FI.normalezeichen:TEXT CONSTchar:=zeichen.char[code(recordSUBi)];pos.xMOVEpos.y;FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENxpos+xMOVEypos+y;ELSExpos+xDRAWypos+yFI;pos.x:=xpos+x;pos.y:=ypos+y;PER;xposINCRxstep;yposINCRystep;pos.x:=xpos;pos.y:=ypos;.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=(x*xfak)DIVzeichen.width;y:=(y*yfak)DIVzeichen.heightEND PROCvalue;OP MOVE(INT CONSTx,y):INT VARxwert:=x,ywert:=y;grenzkontrolle(xwert,ywert);control(-7,xwert,ypixel-1-ywert,dummy)END OP MOVE;OP DRAW(INT CONSTx,y):INT VARxwert:=x,ywert:=y;grenzkontrolle(xwert,ywert);control(-6,xwert,ypixel-1-ywert,dummy);control(-6,pos.x,ypixel-1-pos.y,dummy);control(-7,xwert,ypixel-1-ywert,dummy)END OP DRAW;PROC
+grenzkontrolle(INT VARx,y):INT VARxwert,ywert;IFx>xpixel-1THENxwert:=xpixel-1ELIFx<0THENxwert:=0ELSExwert:=xFI;IFy>ypixel-1THENywert:=ypixel-1ELIFy<0THENywert:=0ELSEywert:=yFI;x:=xwert;y:=ywert;END PROCgrenzkontrolle;PROCout(TEXT CONSTtext):TEXT VARtextcopy:=text;IF NOTgraphiconTHENoldout(text)ELSEneuesoutFI.neuesout:INT CONSTxpos:=(spalte-1)*zeichen.width,ypos:=ypixel-(zeile*zeichen.height);pruefetext;loeschealtentext;gibneuentextaus.pruefetext:IFspalte+(LENGTHtext)-1>xpixelDIVzeichen.widthTHENtextcopy:=subtext(text,1,xpixelDIVzeichen.width-spalte+1)FI.loeschealtentext:IFcode(textcopySUB1)>31THENclearFI.clear:INT CONSTxbis:=xpos+(LENGTHtextcopy)*zeichen.width-1;INT VARi;pen(0,0,0,1);FORiFROM0UPTOzeichen.height-1REPmove(xpos,ypos+i);draw(xbis,ypos+i)PER;move(xpos,ypos);pen(0,1,0,1).gibneuentextaus:draw(textcopy);cursor(spalte+(LENGTHtextcopy),zeile)END PROCout;INT VARzeile:=1,spalte:=1;BOOL VARgraphicon:=FALSE;PROCgetcursor(INT VARa,b):IFgraphiconTHENa:=spalte;b:=zeileELSEoldgetcursor(a,b)FI END PROCgetcursor;PROCcursor(INT CONSTa,b):IFgraphiconTHEN IFa>xpixelDIVzeichen.widthTHENspalte:=xpixelDIVzeichen.widthELIFa<=0THENspalte:=1ELSEspalte:=aFI;IFb>ypixelDIVzeichen.heightTHENzeile:=ypixelDIVzeichen.heightELIFb<=0THENzeile:=1ELSEzeile:=bFI ELSEoldcursor(a,b)FI END PROCcursor;END PACKETegaplot;zeichensatz("ZEICHEN 8*14")
+
diff --git a/app/schulis-simulationssystem/3.0/src/simsel formulare b/app/schulis-simulationssystem/3.0/src/simsel formulare
new file mode 100644
index 0000000..b7a1377
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel formulare
Binary files differ
diff --git a/app/schulis-simulationssystem/3.0/src/simsel hercules plot b/app/schulis-simulationssystem/3.0/src/simsel hercules plot
new file mode 100644
index 0000000..b0b61a3
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel hercules plot
@@ -0,0 +1,3 @@
+PACKEToldproceduresDEFINESoldcursor,oldgetcursor,oldout:PROColdcursor(INT CONSTa,b):cursor(a,b)END PROColdcursor;PROColdgetcursor(INT VARa,b):getcursor(a,b)END PROColdgetcursor;PROColdout(TEXT CONSTtext):out(text)END PROColdoutEND PACKEToldprocedures;PACKETsimselherculesplotDEFINESbeginplot,endplot,clear,move,draw,stdhoehe,stdbreite,pen,plotend,zeichensatz,cursor,getcursor,out,terminalkorrekt,drawingarea:LEThorfaktor=30.6383,vertfaktor=19.33333,bit14=16384,anzahlx=720,anzahly=348;INT VARxalt,yalt;ROW5INT VARzaehler:=ROW5INT:(0,0,0,0,0),i:=zaehler;INT VARlinientyp:=0,foreground:=0,background:=0;INT VARdummy;LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);PROCdrawingarea(REAL VARxcm,ycm,INT VARxpixel,ypixel):xcm:=23.5;ycm:=18.0;xpixel:=anzahlx-1;ypixel:=anzahly-1;END PROCdrawingarea;REAL PROCstdhoehe:0.72END PROCstdhoehe;REAL PROCstdbreite:0.29375END PROCstdbreite;PROCbeginplot:xalt:=0;yalt:=0;graphicon:=TRUE END PROCbeginplot;PROCendplot:END PROCendplot;PROCclear:control(-5,512,0,dummy);pen(0,1,0,1);move(0,0);END PROCclear;PROCplotend:control(-5,2,0,dummy);graphicon:=FALSE END PROCplotend;PROCpen(INT CONSTb,f,t,l):IF NOT(f=0)THENforeground:=1ELSEforeground:=0;FI;linientyp:=l;SELECTfOF CASE0:loeschstift;CASE1:sichtbarelinien;ENDSELECT.loeschstift:control(-9,0,0,dummy);control(-10,0,0,dummy).sichtbarelinien:SELECTlOF CASE0:CASE1:control(-9,4369,4369,dummy);control(-10,4369,4369,dummy);CASE2:control(-9,257,257,dummy);control(-10,257,257,dummy);CASE3:control(-9,17,17,dummy);control(-10,17,17,dummy);CASE4:control(-9,0,4369,dummy);control(-10,0,4369,dummy);CASE5:control(-9,256,4369,dummy);control(-10,256,4369,dummy);OTHERWISE:control(-9,4369,4369,dummy);control(-10,4369,4369,dummy);ENDSELECT.END PROCpen;PROCmove(INT CONSTx,y):xMOVEyEND PROCmove;PROCdraw(INT CONSTx,y):xDRAWyEND PROCdraw;ZEICHENSATZ VARzeichen;INT VARxfak,yfak;PROCzeichensatz(TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARnewzeichen:=old(name);zeichen:=newzeichenELSEerrorstop("Der Zeichensatz ""+name+"" existiert nicht")FI END PROCzeichensatz;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxpos:=xalt,ypos:=yalt,x0:=xalt,y0:=yalt,i,n,x,y;BOOL VARmoveorder;setcharacterheightandwidth;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;x0MOVEy0.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen.width;yfak:=zeichen.heightELSExfak:=int(horfaktor*width+0.5);yfak:=int(vertfaktor*height+0.5)FI.characterxstep:IFwidth<>0.0THENint(cosd(angle)*horfaktor*width+0.5)ELSEint(cosd(angle)*real(zeichen.width)+0.5)FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height+0.5)ELSEint(sind(angle)*real(zeichen.height)+0.5)FI.drawcharacteri:IFcode(recordSUBi)<32THENsteuerzeichenELSEnormalezeichenFI.steuerzeichen:IFcode(recordSUBi)=7THENoldout("�")FI.normalezeichen:TEXT CONSTchar:=zeichen.char[code(recordSUBi)];FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENxpos+xMOVEypos+yELSExpos+xDRAWypos+yFI PER;xposINCRxstep;yposINCRystep.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=(x*xfak)DIVzeichen.width;y:=(y*yfak)DIVzeichen.heightEND PROCvalue;OP MOVE(INT CONSTx,y):control(-7,x,347-y,dummy);xalt:=x;yalt:=y;END OP MOVE;OP DRAW(INT CONSTx,y):IFlinientyp>0THENcontrol(-11,foreground,zaehler(linientyp),i(linientyp));control(-6,xalt,347-yalt,dummy);control(-6,x,347-y,dummy);control(-11,foreground,zaehler(linientyp),i(linientyp));zaehler(linientyp):=((i(linientyp)-2)MOD16);FI;xalt:=x;yalt:=y;END OP DRAW;INT VARzeile:=1,spalte:=1;BOOL VARgraphicon:=FALSE;PROCgetcursor(INT VARa,b):IFgraphiconTHENa:=spalte;b:=zeileELSEoldgetcursor(a,b)FI END PROCgetcursor;PROCcursor(INT CONSTa,b):IFgraphiconTHEN IFa>anzahlxDIV
+zeichen.widthTHENspalte:=anzahlxDIVzeichen.widthELIFa<=0THENspalte:=1ELSEspalte:=aFI;IFb>anzahlyDIVzeichen.heightTHENzeile:=anzahlyDIVzeichen.heightELIFb<=0THENzeile:=1ELSEzeile:=bFI ELSEoldcursor(a,b)FI END PROCcursor;PROCout(TEXT CONSTtext):TEXT VARtextcopy:=text;IF NOTgraphiconTHENoldout(text)ELSEneuesoutFI.neuesout:INT CONSTxpos:=(spalte-1)*zeichen.width,ypos:=anzahly-(zeile*zeichen.height);pruefetext;loeschealtentext;gibneuentextaus.pruefetext:IFspalte+(LENGTHtext)-1>anzahlxDIVzeichen.widthTHENtextcopy:=subtext(text,1,anzahlxDIVzeichen.width-spalte+1)FI.loeschealtentext:IFcode(textcopySUB1)>31THENclearFI.clear:INT CONSTxbis:=xpos+(LENGTHtextcopy)*zeichen.width-1;INT VARi;pen(0,0,0,1);FORiFROM0UPTOzeichen.height-1REPmove(xpos,ypos+i);draw(xbis,ypos+i)PER;move(xpos,ypos);pen(0,1,0,1).gibneuentextaus:draw(textcopy);cursor(spalte+(LENGTHtextcopy),zeile)END PROCout;BOOL PROCterminalkorrekt:page;putline("Mit Ihrer Task können Sie nur an ");putline("Bildschirmen mit HERCULES-Karte arbeiten.");line;yes("Ist Ihr Bildschirm von diesem Typ")END PROCterminalkorrekt;END PACKETsimselherculesplot;zeichensatz("ZEICHEN 9*14")
+
diff --git a/app/schulis-simulationssystem/3.0/src/simsel picture b/app/schulis-simulationssystem/3.0/src/simsel picture
new file mode 100644
index 0000000..52ee52d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel picture
@@ -0,0 +1,3 @@
+PACKETsimselpictureDEFINES PICTURE,:=,CAT,nilpicture,cmfaktor,draw,drawr,drawcm,drawcmr,move,mover,movecm,movecmr,circle,length,dim,pen,where,extrema,rotate,stretch,translate,text,picture,plot:LETdrawkey=1,movekey=2,textkey=3,moverkey=4,drawrkey=5,movecmkey=6,drawcmkey=7,movecmrkey=8,drawcmrkey=9,circlekey=11,max2dim=31983,maxtext=31974,maxbar=31982,maxcircle=31974,maxlength=32000;TYPE PICTURE=STRUCT(INTdim,pen,TEXTpoints);INT VARreadpos;REAL VARx,y,z,fak:=1.0;TEXT VARr2:=16*"�",r3:=24*"�",i1:="��",i2:="����";OP:=(PICTURE VARl,PICTURE CONSTr):CONCR(l):=CONCR(r)END OP:=;OP CAT(PICTURE VARl,PICTURE CONSTr):IFl.dim<>r.dimTHENerrorstop("OP CAT : left dimension <> right dimension")ELIFlength(l.points)>maxlength-length(r.points)THENerrorstop("OP CAT : Picture overflow")FI;l.pointsCATr.pointsEND OP CAT;PICTURE PROCnilpicture:PICTURE:(2,1,"")END PROCnilpicture;PROCdraw(PICTURE VARp,TEXT CONSTtext):draw(p,text,0.0,0.0,0.0)END PROCdraw;PROCcmfaktor(REAL CONSTn):fak:=nEND PROCcmfaktor;PROCdraw(PICTURE VARp,TEXT CONSTtext,REAL CONSTangle,height,bright):write(p,text,angle,height,bright,textkey)END PROCdraw;PROCdraw(PICTURE VARp,REAL CONSTx,y):write(p,x,y,drawkey)END PROCdraw;PROCdrawr(PICTURE VARp,REAL CONSTx,y):write(p,x,y,drawrkey)END PROCdrawr;PROCdrawcm(PICTURE VARp,REAL CONSTx,y):write(p,x,y,drawcmkey)END PROCdrawcm;PROCdrawcmr(PICTURE VARp,REAL CONSTx,y):write(p,x,y,drawcmrkey)END PROCdrawcmr;PROCmove(PICTURE VARp,REAL CONSTx,y):write(p,x,y,movekey)END PROCmove;PROCmover(PICTURE VARp,REAL CONSTx,y):write(p,x,y,moverkey)END PROCmover;PROCmovecm(PICTURE VARp,REAL CONSTx,y):write(p,x,y,movecmkey)END PROCmovecm;PROCmovecmr(PICTURE VARp,REAL CONSTx,y):write(p,x,y,movecmrkey)END PROCmovecmr;PROCcircle(PICTURE VARp,REAL CONSTradius,from,to,INT CONSTpattern):write(p,radius,from,to,pattern,circlekey)END PROCcircle;PROCwrite(PICTURE VARp,REAL CONSTx,y,INT CONSTkey):IFlength(p.points)<max2dimTHENp.pointsCATcode(key);replace(r2,1,x);replace(r2,2,y);p.pointsCATr2ELSEerrorstop("Picture overflow")FI END PROCwrite;PROCwrite(PICTURE VARp,REAL CONSTx,y,INT CONSTn,key):IFlength(p.points)<maxbarTHENp.pointsCATcode(key);replace(r2,1,x);replace(r2,2,y);p.pointsCATr2;replace(i1,1,n);p.pointsCATi1ELSEerrorstop("Picture overflow")FI END PROCwrite;PROCwrite(PICTURE VARp,REAL CONSTx,y,z,INT CONSTn,key):IFlength(p.points)<maxcircleTHENp.pointsCATcode(key);replace(r3,1,x);replace(r3,2,y);replace(r3,3,z);p.pointsCATr3;replace(i1,1,n);p.pointsCATi1ELSEerrorstop("Picture overflow")FI END PROCwrite;PROCwrite(PICTURE VARp,TEXT CONSTt,REAL CONSTangle,height,bright,INT CONSTkey):IFmaxtext-length(p.points)>=length(t)THENp.pointsCATcode(key);replace(i1,1,length(t));p.pointsCATi1;p.pointsCATt;replace(r3,1,angle);replace(r3,2,height);replace(r3,3,bright);p.pointsCATr3FI;END PROCwrite;INT PROClength(PICTURE CONSTp):length(p.points)END PROClength;INT PROCdim(PICTURE CONSTpic):pic.dimEND PROCdim;PROCpen(PICTURE VARp,INT CONSTpen):IFpen<0ORpen>16THENerrorstop("pen out of range [0-16]")FI;p.pen:=penEND PROCpen;INT PROCpen(PICTURE CONSTp):p.penEND PROCpen;PROCwhere(PICTURE CONSTp,REAL VARx,y):IFp.dim=0THENx:=0.0;y:=0.0ELIFp.dim=3THENerrorstop("Picture is 3 dimensional")ELSEx:=subtext(p.points,length(p.points)-15,length(p.points)-8)RSUB1;y:=subtext(p.points,length(p.points)-7,length(p.points))RSUB1FI END PROCwhere;PROCextrema(PICTURE CONSTp,REAL VARxmin,xmax,ymin,ymax):xmin:=maxreal;xmax:=-maxreal;ymin:=maxreal;ymax:=-maxreal;readpos:=0;INT CONSTpiclength:=length(p.points);WHILEreadpos<piclengthREPcheckpositionPER.checkposition:readposINCR1;SELECTcode(p.pointsSUBreadpos)OF CASEdrawkey:calcextremaCASEmovekey:calcextremaCASEmoverkey:calcrelextremaCASEdrawrkey:calcrelextremaCASEmovecmkey:readposINCR16CASEdrawcmkey:readposINCR16CASEmovecmrkey:readposINCR16CASEdrawcmrkey:readposINCR16CASEtextkey:readposINCRnextint+24CASEcirclekey:readposINCR26OTHERWISEerrorstop("wrong key code")END SELECT.calcextrema:x:=nextreal;y:=nextreal;xmin:=min(xmin,x);xmax:=max(xmax,x);ymin:=min(ymin,y);ymax:=
+max(ymax,y).calcrelextrema:xINCRnextreal;yINCRnextreal;xmin:=min(xmin,x);xmax:=max(xmax,x);ymin:=min(ymin,y);ymax:=max(ymax,y).nextreal:readposINCR8;subtext(p.points,readpos-7,readpos)RSUB1.nextint:readposINCR2;subtext(p.points,readpos-1,readpos)ISUB1.END PROCextrema;PROCrotate(PICTURE VARp,REAL CONSTangle):REAL CONSTs:=sind(angle),c:=cosd(angle);transform(p,ROW4ROW3REAL:(ROW3REAL:(1.0,0.0,0.0),ROW3REAL:(0.0,c,s),ROW3REAL:(0.0,-s,c),ROW3REAL:(0.0,0.0,0.0)))END PROCrotate;PROCstretch(PICTURE VARpic,REAL CONSTsx,sy):stretch(pic,sx,sy,1.0)END PROCstretch;PROCstretch(PICTURE VARp,REAL CONSTsx,sy,sz):transform(p,ROW4ROW3REAL:(ROW3REAL:(sx,0.0,0.0),ROW3REAL:(0.0,sy,0.0),ROW3REAL:(0.0,0.0,sz),ROW3REAL:(0.0,0.0,0.0)))END PROCstretch;PROCtranslate(PICTURE VARp,REAL CONSTdx,dy):translate(p,dx,dy,0.0)END PROCtranslate;PROCtranslate(PICTURE VARp,REAL CONSTdx,dy,dz):transform(p,ROW4ROW3REAL:(ROW3REAL:(1.0,0.0,0.0),ROW3REAL:(0.0,1.0,0.0),ROW3REAL:(0.0,0.0,1.0),ROW3REAL:(dx,dy,dz)))END PROCtranslate;PROCtransform(PICTURE VARp,ROW4ROW3REAL CONSTa):INT CONSTpiclength:=length(p.points);INT VARbeginpos;readpos:=0;x:=0.0;y:=0.0;z:=0.0;transform2dimpic.transform2dimpic:WHILEreadpos<piclengthREPtransform2dimpositionPER.transform2dimposition:readposINCR1;SELECTcode(p.pointsSUBreadpos)OF CASEdrawkey:transform2dimpointCASEmovekey:transform2dimpointCASEmoverkey:transform2dimpointCASEdrawrkey:transform2dimpointCASEmovecmkey:readposINCR16CASEdrawcmkey:readposINCR16CASEmovecmrkey:readposINCR16CASEdrawcmrkey:readposINCR16CASEtextkey:readposINCRnextint+24CASEcirclekey:readposINCR26OTHERWISEerrorstop("wrong key code")END SELECT.transform2dimpoint:beginpos:=readpos+1;x:=nextreal;y:=nextreal;transform(a,x,y,z);replace(r2,1,x);replace(r2,2,y);replace(p.points,beginpos,r2).nextreal:readposINCR8;subtext(p.points,readpos-7,readpos)RSUB1.nextint:readposINCR2;subtext(p.points,readpos-1,readpos)ISUB1.END PROCtransform;PROCtransform(ROW4ROW3REAL CONSTa,REAL VARx,y,z):REAL CONSTox:=x,oy:=y,oz:=z;x:=ox*a(1)(1)+oy*a(2)(1)+oz*a(3)(1)+a(4)(1);y:=ox*a(1)(2)+oy*a(2)(2)+oz*a(3)(2)+a(4)(2);z:=ox*a(1)(3)+oy*a(2)(3)+oz*a(3)(3)+a(4)(3)END PROCtransform;TEXT PROCtext(PICTURE CONSTpic):replace(i2,1,pic.dim);replace(i2,2,pic.pen);i2+pic.pointsEND PROCtext;PICTURE PROCpicture(TEXT CONSTtext):PICTURE:(textISUB1,textISUB2,subtext(text,5))END PROCpicture;PROCplot(PICTURE CONSTp):INT CONSTpiclength:=length(p.points);readpos:=0;plottwodimpic.plottwodimpic:WHILEreadpos<piclengthREPplottwodimpositionPER.plottwodimposition:readposINCR1;SELECTcode(p.pointsSUBreadpos)OF CASEdrawkey:draw(nextreal,nextreal)CASEmovekey:move(nextreal,nextreal)CASEmoverkey:mover(nextreal,nextreal)CASEdrawrkey:drawr(nextreal,nextreal)CASEmovecmkey:movecm(fak*nextreal,fak*nextreal)CASEdrawcmkey:drawcm(fak*nextreal,fak*nextreal)CASEmovecmrkey:movecmr(fak*nextreal,fak*nextreal)CASEdrawcmrkey:drawcmr(fak*nextreal,fak*nextreal)CASEtextkey:draw(nexttext,nextreal,fak*nextreal,fak*nextreal)CASEcirclekey:circle(fak*nextreal,nextreal,nextreal,nextint)OTHERWISEerrorstop("wrong key code")END SELECT.nextreal:readposINCR8;subtext(p.points,readpos-7,readpos)RSUB1.nextint:readposINCR2;subtext(p.points,readpos-1,readpos)ISUB1.nexttext:INT CONSTtextlength:=nextint;readposINCRtextlength;subtext(p.points,readpos-textlength+1,readpos).END PROCplot;END PACKETsimselpicture;
+
diff --git a/app/schulis-simulationssystem/3.0/src/simsel vga plot b/app/schulis-simulationssystem/3.0/src/simsel vga plot
new file mode 100644
index 0000000..c222eb7
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel vga plot
@@ -0,0 +1,3 @@
+PACKEToldproceduresDEFINESoldcursor,oldgetcursor,oldout:PROColdcursor(INT CONSTa,b):cursor(a,b)END PROColdcursor;PROColdgetcursor(INT VARa,b):getcursor(a,b)END PROColdgetcursor;PROColdout(TEXT CONSTtext):out(text)END PROColdoutEND PACKEToldprocedures;PACKETvgaplotDEFINESdrawingarea,beginplot,endplot,plotend,stdhoehe,stdbreite,terminalkorrekt,clear,pen,move,draw,cursor,getcursor,out,zeichensatz:LEThorfaktor=29.09091,vertfaktor=35.0365,anzahlx=640,anzahly=480,delete=0,nothing=0,durchgehend=1,gepunktet=2,kurzgestrichelt=3,langgestrichelt=4,strichpunkt=5,colourcode=256,xpixel=640,ypixel=480,bit14=16384;LET POS=STRUCT(INTx,y);LET ZEICHENSATZ=STRUCT(ROW255TEXTchar,INTwidth,height);ZEICHENSATZ VARzeichen;INT VARactthick:=0,dummy;POS VARpos:=POS:(0,0);REAL VARbuchstabenhoehe:=0.5422916,buchstabenbreite:=0.275;BOOL PROCterminalkorrekt:page;putline("Mit Ihrer Task können Sie nur an Graphik-Bildschirmen");putline("arbeiten, die durch die VGA-Karte (oder eine kompatible");putline("Karte) unterstützt werden.");line;yes("Ist Ihr Bildschirm von diesem Typ")END PROCterminalkorrekt;PROCzeichensatz(TEXT CONSTname):IFexists(name)THEN BOUND ZEICHENSATZ VARnewzeichen:=old(name);zeichen:=newzeichen;ELSEerrorstop("Der Zeichensatz ""+name+"" existiert nicht")FI END PROCzeichensatz;PROCdrawingarea(REAL VARxcm,ycm,INT VARxpixel,ypixel):xcm:=22.0;ycm:=13.7;xpixel:=anzahlx-1;ypixel:=anzahly-1;END PROCdrawingarea;REAL PROCstdhoehe:buchstabenhoeheEND PROCstdhoehe;REAL PROCstdbreite:buchstabenbreiteEND PROCstdbreite;PROCbeginplot:graphicon:=TRUE ENDPROCbeginplot;PROCendplot:ENDPROCendplot;PROCplotend:control(-5,3,0,dummy);graphicon:=FALSE ENDPROCplotend;PROCclear:control(-5,17,0,dummy);control(-4,0,colourcode,dummy);actthick:=0;END PROCclear;PROCpen(INT CONSTbackground,foreground,thickness,linetype):actthick:=thickness;control(-8,linetypecode,foregroundcode,dummy).linetypecode:SELECTlinetypeOF CASEnothing:0CASEdurchgehend:-1CASEgepunktet:21845CASEkurzgestrichelt:3855CASElanggestrichelt:255CASEstrichpunkt:4351OTHERWISElinetypeEND SELECT.foregroundcode:IFforeground=deleteTHEN0ELIFforeground<0THEN128ELSEforegroundFI.END PROCpen;PROCmove(INT CONSTx,y):xMOVEy;pos:=POS:(x,y)END PROCmove;PROCdraw(INT CONSTx,y):INT VARxx:=x,yy:=y;pos.xDRAWpos.y;grenzkontrolle(xx,yy);control(-6,xx,ypixel-1-yy,dummy);pos:=POS:(x,y).END PROCdraw;INT VARxfak:=zeichen.width,yfak:=zeichen.height;PROCdraw(TEXT CONSTrecord,REAL CONSTangle,height,width):INT CONSTxstep:=characterxstep,ystep:=characterystep;INT VARxpos:=pos.x,ypos:=pos.y,i,n,x,y;BOOL VARmoveorder;setcharacterheightandwidth;FORiFROM1UPTOlength(record)REPdrawcharacteriPER;pos.xMOVEpos.y.setcharacterheightandwidth:IFwidth=0.0ANDheight=0.0THENxfak:=zeichen.width;yfak:=zeichen.heightELSExfak:=int(horfaktor*width+0.5);yfak:=int(vertfaktor*height+0.5)FI.characterxstep:IFwidth<>0.0THENint(cosd(angle)*horfaktor*width+0.5)ELSEint(cosd(angle)*real(zeichen.width)+0.5)FI.characterystep:IFheight<>0.0THENint(sind(angle)*vertfaktor*height+0.5)ELSEint(sind(angle)*real(zeichen.height)+0.5)FI.drawcharacteri:IFcode(recordSUBi)<32THENsteuerzeichenELSEnormalezeichenFI.steuerzeichen:IFcode(recordSUBi)=7THENoldout("�")FI.normalezeichen:TEXT CONSTchar:=zeichen.char[code(recordSUBi)];INT VARxold:=xpos,yold:=ypos;FORnFROM1UPTOlength(char)DIV4REPvalue(char,n,x,y,moveorder);IFmoveorderTHENxpos+xMOVEypos+y;ELSExoldDRAWyold;xpos+xDRAWypos+yFI;xold:=xpos+x;yold:=ypos+y;PER;xposINCRxstep;yposINCRystep.END PROCdraw;PROCdraw(TEXT CONSTrecord):draw(record,0.0,0.0,0.0)END PROCdraw;PROCvalue(TEXT CONSTchar,INT CONSTn,INT VARx,y,BOOL VARmove):x:=charISUBn+n-1;y:=charISUBn+n;IFx<0THEN IF(xANDbit14)<>0THENmove:=FALSE ELSEmove:=TRUE;x:=xXORbit14FI ELSE IF(xANDbit14)<>0THENmove:=TRUE;x:=xXORbit14ELSEmove:=FALSE FI FI;x:=(x*xfak)DIVzeichen.width;y:=(y*yfak)DIVzeichen.heightEND PROCvalue;OP MOVE(INT CONSTx,y):INT VARxwert:=x,ywert:=y;grenzkontrolle(xwert,ywert);control(-7,xwert,ypixel-1-ywert,dummy)END OP MOVE;OP DRAW(INT CONSTx,y):INT VARxwert:=x,ywert:=y;
+grenzkontrolle(xwert,ywert);control(-6,xwert,ypixel-1-ywert,dummy)END OP DRAW;PROCgrenzkontrolle(INT VARx,y):INT VARxwert,ywert;IFx>xpixel-1THENxwert:=xpixel-1ELIFx<0THENxwert:=0ELSExwert:=xFI;IFy>ypixel-1THENywert:=ypixel-1ELIFy<0THENywert:=0ELSEywert:=yFI;x:=xwert;y:=ywert;END PROCgrenzkontrolle;PROCout(TEXT CONSTtext):TEXT VARtextcopy:=text;IF NOTgraphiconTHENoldout(text)ELSEneuesoutFI.neuesout:INT CONSTxpos:=(spalte-1)*zeichen.width,ypos:=anzahly-(zeile*zeichen.height);pruefetext;loeschealtentext;gibneuentextaus.pruefetext:IFspalte+(LENGTHtext)-1>anzahlxDIVzeichen.widthTHENtextcopy:=subtext(text,1,anzahlxDIVzeichen.width-spalte+1)FI.loeschealtentext:IFcode(textcopySUB1)>31THENclearFI.clear:INT CONSTxbis:=xpos+(LENGTHtextcopy)*zeichen.width-1;INT VARi;pen(0,0,0,1);FORiFROM0UPTOzeichen.height-1REPmove(xpos,ypos+i);draw(xbis,ypos+i)PER;move(xpos,ypos);pen(0,1,0,1).gibneuentextaus:draw(textcopy);cursor(spalte+(LENGTHtextcopy),zeile)END PROCout;INT VARzeile:=1,spalte:=1;BOOL VARgraphicon:=FALSE;PROCgetcursor(INT VARa,b):IFgraphiconTHENa:=spalte;b:=zeileELSEoldgetcursor(a,b)FI END PROCgetcursor;PROCcursor(INT CONSTa,b):IFgraphiconTHEN IFa>anzahlxDIVzeichen.widthTHENspalte:=anzahlxDIVzeichen.widthELIFa<=0THENspalte:=1ELSEspalte:=aFI;IFb>anzahlyDIVzeichen.heightTHENzeile:=anzahlyDIVzeichen.heightELIFb<=0THENzeile:=1ELSEzeile:=bFI ELSEoldcursor(a,b)FI END PROCcursor;END PACKETvgaplot;zeichensatz("ZEICHEN 8*19")
+
diff --git a/app/schulis-simulationssystem/3.0/src/simsel.druckermenu b/app/schulis-simulationssystem/3.0/src/simsel.druckermenu
new file mode 100644
index 0000000..16f983e
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel.druckermenu
@@ -0,0 +1,2 @@
+PACKETdruckermenuDEFINESdruckeingang,druckezeichnungen,loeschezeichnungen,stellezeichenbreiteein,definieredruckerkanal,stoppedrucker,plottereingestellt:LETdepottaskname="SIMSEL-PRINTERDEPOT",druckprocindex=1,loeschprocindex=2,untenlinks=3,zentral=5,bell="�",abbruch="!",niltext="",arbeitertaskname="workertask",minimalekanalnr=2,maximalekanalnr=32,text1="Bitte warten bis der letzte Druckauftrag bearbeitet ist.",text2="Drucken von Zeichnungen",text3="Auswahl der Zeichnungen durch ankreuzen",text4="Löschen von Zeichnungen",text5="Sollen die ausgewählten Zeichnungen gelöscht werden",text6="Die Zeichnungen werden gelöscht: ",text7=" Wert zwischen 5.0 cm und ",text8=" cm eingeben! ",text9=" Bitte Zahl zwischen 2 und 32 für Kanalnummer des Druckers eingeben! ",text10="Speicher für Zeichnungen ist nicht eingerichtet.",text11="Ist für die nächste Zeichnung Papier eingelegt",text12="Auswahl einer Zeichnung durch ankreuzen";TEXT VARzeichnungsname;TASK VARarbeitertask,depottask;BOOL VARplotteraktiv:=TRUE;THESAURUS VARauswahl;PROCdruckeingang:IF NOTexiststask(depottaskname)THENerrorstop(text10)END IF;depottask:=/depottaskname;IFhighestentry(ALLdepottask)=0THENdeactivate(druckprocindex);deactivate(loeschprocindex)ELSEactivate(druckprocindex);activate(loeschprocindex)END IF END PROCdruckeingang;PROCdruckezeichnungen:IFexiststask(arbeitertaskname)THENmenuinfo(text(text1,76),untenlinks);LEAVEdruckezeichnungenEND IF;IF NOTplottereingestelltTHENauswahl:=menusome(ALLdepottask,text2,text3,TRUE);IFnotempty(auswahl)THENbegin(arbeitertaskname,PROCzeichnungendrucken,arbeitertask)END IF ELSEzeichnungsname:=menuone(ALLdepottask,text2,text12,TRUE);IFzeichnungsname<>niltextCANDmenuyes(text11,zentral)THENbegin(arbeitertaskname,PROCdruckeeinezeichnung,arbeitertask)END IF END IF END PROCdruckezeichnungen;PROCzeichnungendrucken:disablestop;fetch(auswahl,depottask);plotteoutput(auswahl);end(myself)END PROCzeichnungendrucken;PROCdruckeeinezeichnung:disablestop;fetch(zeichnungsname,depottask);plotteoutput(zeichnungsname);end(myself)END PROCdruckeeinezeichnung;PROCloeschezeichnungen:IFexiststask(arbeitertaskname)THENmenuinfo(text(text1,76),untenlinks);LEAVEloeschezeichnungenEND IF;auswahl:=menusome(ALLdepottask,text4,text3,TRUE);IF NOTnotempty(auswahl)THEN LEAVEloeschezeichnungenEND IF;IFmenuyes(text5,zentral)THENcommanddialogue(FALSE);footnote(text6);cursor(36,24);erase(auswahl,depottask);commanddialogue(TRUE);oldfootnote;druckeingangEND IF END PROCloeschezeichnungen;PROCstellezeichenbreiteein:LETminimum=5.0;REAL VARmaximum,maxlaenge,breite;INT VARxpixel,ypixel;TEXT VAReingabe;drawingarea(maximum,maxlaenge,xpixel,ypixel);maximum:=floor(maximum);IFendgeraetbreite>maximumTHENendgeraetbreite(maximum)END IF;REPeingabe:=menuanswer(text7+text(maximum)+text8,text(endgeraetbreite),zentral);IFcompress(eingabe)=niltextTHEN LEAVEstellezeichenbreiteeinEND IF;breite:=real(eingabe);IFlastconversionokCANDbreite>=minimumCANDbreite<=maximumTHENendgeraetbreite(breite);LEAVEstellezeichenbreiteeinEND IF;out(bell)END REP END PROCstellezeichenbreiteein;PROCdefinieredruckerkanal:TEXT VAReingabe;INT VARnr;REPeingabe:=menuanswer(text9,text(plotterkanal),zentral);IFcompress(eingabe)=niltextTHEN LEAVEdefinieredruckerkanalEND IF;nr:=int(eingabe);IFlastconversionokCANDnr>=minimalekanalnrCANDnr<=maximalekanalnrTHENplotterkanal(nr);LEAVEdefinieredruckerkanalEND IF;out(bell)END REP END PROCdefinieredruckerkanal;PROCstoppedrucker:IFexiststask(arbeitertaskname)THENend(/arbeitertaskname)END IF END PROCstoppedrucker;PROCplottereingestellt(BOOL CONSTwert):plotteraktiv:=wertEND PROCplottereingestellt;BOOL PROCplottereingestellt:plotteraktivEND PROCplottereingestellt;END PACKETdruckermenu;
+
diff --git a/app/schulis-simulationssystem/3.0/src/simsel.text als row b/app/schulis-simulationssystem/3.0/src/simsel.text als row
new file mode 100644
index 0000000..0bdc52d
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel.text als row
@@ -0,0 +1,2 @@
+PACKETtextalsrowDEFINESins,del,CAT,ipos,dump,replaceiac,VSUB,VISUB:LETnil13byte="�������������",nil4byte="����",nilbyte="�";TEXT VARg1,code2:="��";PROCins(TEXT VARrow,INT CONSTwo,was):replace(code2,1,was);g1:=subtext(row,2*wo-1);row:=subtext(row,1,2*wo-2);rowCATcode2;rowCATg1END PROCins;PROCdel(TEXT VARrow,INT CONSTwo):g1:=subtext(row,2*wo+1);row:=subtext(row,1,2*wo-2);rowCATg1END PROCdel;OP CAT(TEXT VARrow,INT CONSTwas):replace(code2,1,was);rowCATcode2END OP CAT;INT PROCipos(TEXT CONSTrow,INT CONSTwas):INT VARstart:=0;replace(code2,1,was);REPstart:=pos(row,code2,start+1)UNTILstartMOD2=1ORstart=0PER;(start+1)DIV2END PROCipos;PROCdump(TEXT VARrow):INT VARi;FORiFROM1UPTOlength(row)DIV2REPput(rowISUBi)PER END PROCdump;PROCreplaceiac(TEXT VARstring,INT CONSTwo,TEXT CONSTwas):IF LENGTHstring<=LENGTHwas+wo-1THENstretch(string,LENGTHwas+wo-1)FI;replace(string,wo,was)END PROCreplaceiac;PROCstretch(TEXT VARt,INT CONSTwo):WHILE LENGTHt<=wo-13REPtCATnil13bytePER;WHILE LENGTHt<=wo-4REPtCATnil4bytePER;WHILE LENGTHt<woREPtCATnilbytePER END PROCstretch;PROCreplaceiac(TEXT VARstring,INT CONSTwo,INT CONSTwas):IF LENGTHstring<=2*(wo+1)THENstretch(string,2*(wo+1))FI;replace(string,wo,was)END PROCreplaceiac;INT OP VSUB(TEXT CONSTstring,INT CONSTpos):code(stringSUBpos)END OP VSUB;INT OP VISUB(TEXT CONSTstring,INT CONSTpos):IFpos*2<=LENGTHstringTHENstringISUBposELSE0FI END OP VISUB;END PACKETtextalsrow;
+
diff --git a/app/schulis-simulationssystem/3.0/src/simsel.verwaltung b/app/schulis-simulationssystem/3.0/src/simsel.verwaltung
new file mode 100644
index 0000000..f77604a
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/simsel.verwaltung
@@ -0,0 +1,7 @@
+PACKETsimselverwaltungDEFINESsimsel,installieresimselsystem:LETsystemname="s c h u l i s - Simulationssystem Version 3.0",titel1="Systemverwaltung",titel2="Installation",titel3="Installation: Drucker",meldung1="Das Simulationssystem ist noch nicht installiert.",meldung2="Kein Druckertreiber für Graphiken installiert.",meldung3="1 ... Simulationssystem",meldung5="2 ... Zeichnungen drucken",meldung6="---------------------------------------",meldung7="3 ... Neuinstallation: Simulationssystem",meldung8="4 ... Neuinstallation: Graphikdrucker",meldung9="q ... Simulationssystem verlassen",meldung10="Gewünschte Funktion:",meldung11="Bitte wählen Sie unter folgenden Anpassungen eine",meldung12="für Ihr Terminal und die zugehörige Grafikkarte",meldung13="angemessene heraus:",meldung14=" hercules-Anpassung",meldung15=" cga-Anpassung",meldung16=" ega-Anpassung",meldung17=" vga-Anpassung",meldung18="Solange vorgeschlagene Anpassung verneinen <n/N>",meldung19="bis passende genannt wird.",meldung20="Diese bejahen <j/J/y/Y>.",meldung21="Installation korrekt beendet",meldung22="Installation wegen Systemfehler gestoppt",meldung23="Verfügt das Terminal über den IBM-Zeichensatz",meldung24="Soll das vorhandene Simulationssystem gelöscht werden",meldung25="Soll der vorhandene Druckertreiber gelöscht werden",meldung26="Weiter mit beliebiger Taste",meldung27="Geladen wird Datei Nr. ",meldung28="Die benötigten Dateien sind vollständig geladen.",meldung29="Sie können die Diskette aus dem Laufwerk nehmen.",meldung30="Bitte warten - das Simulationssystem wird installiert.",meldung31="Installiert wird Datei von ",meldung32="Fehler bei der Übersetzung der Programme.",meldung33=" richtige Anpassung",meldung34="für Ihren Drucker geeigenete aus:",meldung35=" DRUCKER PLOTTER",meldung36=" xerox 4045 hp 72xx",meldung37=" epson sq hp 74xx",meldung38=" epson fx",meldung39=" binder 8600",meldung40=" kyocera",meldung41=" hp laserjet",meldung42="Bitte warten - der Druckertreiber wird installiert",meldung43="Bitte zunächst das Simulationssystem installieren.",meldung44="Zunächst müssen die erforderlichen Dateien geladen werden.",meldung45="Passwort: ",meldung46="Soll das System mit einem Passwort geschützt werden",meldung47="Fehler: Die Diskette ist ungültig oder nicht korrekt eingelegt!",meldung49="Installation vorzeitig abgebrochen",meldung50="Bitte legen sie eine Diskette der Anwendung",meldung51="in das Laufwerk und schließen es.",meldung52="Installation fortsetzen: <w>",meldung53="Installation abbrechen : <ESC>",meldung54="Bitte legen Sie eine weitere Diskette der Anwendung",menutasten="1234q",zeilenmenu1=9,zeilenmenu2=12,zeilenmenu3=14,menuankoppeln="installmenu(""ls-MENUKARTE:Simsel"",FALSE)",startschleifeaufrufen="managerschleife",ebenembvhandle="handlemenu(""Modellbankverwaltung"")",druckmenuhandle="handlemenu(""Drucken"")",ibmzeichensatz="ibmgraphicchar",stdsatzzeichen="stdgraphicchar",plotterein="plotter eingestellt (TRUE)",plotteraus="plotter eingestellt (FALSE)",depottaskname="simsel depot",lsmktaskname="ls-MENUKARTEN",lstaskname="LS-ANWENDUNG",simulationstaskname="ARBEITSPLATZ",mbverwtaskname="MODELLBANKVERWALTUNG",printertaskname="SIMSEL-PRINTER",pridepottaskname="SIMSEL-PRINTERDEPOT",umstelltaskname="DRUCKERANPASSUNGEN",archivname="simsel",menukarte="ls-MENUKARTE:Simsel",maskenname="simsel formulare",textdsname="TEXTE deutsch",mathekuerzel="simsel ",plotkuerzel=" plot",anzahlgesamt=39,anzahlsimprocs=18,anzahllsprocs=5,anzahlmbverwprocs=16,anzahlpriprocs=8,anzahldruckerds=18,ok=1111,fehler=9999,insertieren=2525,druckererzeugen=3260,drucker1erzeugen=3261,drucker8erzeugen=3268,systemstarten=4444,ebenembvbehandeln=4445,arbeitskanal=1,del="�",delpage="�",bell="�",left="�",beginmark="",endmark="",weiter="w",abbruch="�",niltext="";TASK VARdepottask,lsmktask,simulationstask,mbverwtask,lstask,pridepottask,printertask,ordertask,umstelltask;THESAURUS VAR
+archivinhalt;TEXT VARgraphicart,installationspassword:=niltext;INT VARdruckerindex;BOOL VARibmsatz;INT VARinstallationszaehler,antwort,ordercode;DATASPACE VARmessageds;BOOL VARsimselsysteminstalliert:=FALSE,graphikdruckerinstalliert:=FALSE;ROWanzahllsprocsTEXT CONSTvorlaufdatei:=ROWanzahllsprocsTEXT:("ls-DIALOG 1.korrektur","ls-DIALOG 2.simsel","ls-DIALOG 3.korrektur","ls-DIALOG 4.wd","ls zustaende parameter kurve");ROWanzahldruckerdsTEXT CONSTdruckerdatei:=ROWanzahldruckerdsTEXT:("ZEICHEN 8*8","ZEICHEN 6*10","ZEICHEN 8*16","spool cmd","mat.xerox4045 plot","mat.epson-sq plot","mat.epson-fx plot","mat.binder plot","mat.kyocera plot","mat.laserjet plot","mat.hp72xx plot","mat.hp74xx plot","simsel basis plot","simsel picture","ls dialoghilfen","output test","ls-DIALOG 5.korrektur","simsel.druckermenu");ROWzeilenmenu1TEXT CONSTmenu1:=ROWzeilenmenu1TEXT:(meldung3,meldung5,meldung6,meldung7,meldung8,niltext,meldung9,niltext,meldung10);ROWzeilenmenu2TEXT CONSTmenu2:=ROWzeilenmenu2TEXT:(meldung11,meldung12,meldung13,niltext,meldung14,meldung15,meldung16,meldung17,niltext,meldung18,meldung19,meldung20);ROWzeilenmenu3TEXT CONSTmenu3:=ROWzeilenmenu3TEXT:(meldung11,meldung34,niltext,meldung35,meldung36,meldung37,meldung38,meldung39,meldung40,meldung41,niltext,meldung18,meldung19,meldung20);PROCsimsel:disablestop;zeigekopierhinweis;startsystem;IFiserrorTHENclearerror;commanddialogue(FALSE);forget(all);commanddialogue(TRUE);zeigetitelzeile(titel1);gibmeldung(errormessage);startsystemEND IF END PROCsimsel;PROCzeigekopierhinweis:LETz1="schulis - Simulationssystem (SIMSEL)",z2="Lizenzfreie Software der",z3="Gesellschaft für Mathematik und Datenverarbeitung mbH",z4="Die Nutzung der Software ist nur im Schul- und Hochschulbereich",z5="für nichtkommerzielle Zwecke gestattet.",z6="Gewährleistung und Haftung werden ausgeschlossen.",z7="Weiter mit beliebiger Taste";page;cursor(26,3);out(z1);cursor(27,8);out(z2);cursor(13,10);out(z3);cursor(8,14);out(z4);cursor(20,15);out(z5);cursor(16,17);out(z6);cursor(26,23);out(z7);pause(100)END PROCzeigekopierhinweis;PROCstartsystem:TEXT VARch;INT VARrang,zeile,xpos,ypos;grundeinstellungen;REPzeigeverwaltungsmenu;warteaufkorrekteeingabe;werteeingabeausEND REP.grundeinstellungen:enablestop;checkoff;warningsoff.zeigeverwaltungsmenu:zeigetitelzeile(titel1);FORzeileFROM7UPTO15REPcursor(24,zeile);out(menu1(zeile-6))END REP;clearbuffer.warteaufkorrekteeingabe:getcursor(xpos,ypos);REPinchar(ch);rang:=pos(menutasten,ch);IFrang=0THENout(bell)ELSEcursor(xpos+1,ypos);out(ch);END IF UNTILrang<>0END REP.werteeingabeaus:SELECTrangOF CASE1:fuehresimselsystemausCASE2:fuehredruckermenuausCASE3:installieresimselsystemCASE4:installieredruckeranpassungOTHERWISE LEAVEstartsystemEND SELECT.fuehresimselsystemaus:IF NOTsimselsysteminstalliertTHENout(bell);gibmeldung(meldung1);LEAVEfuehresimselsystemausEND IF;uebergibbildschirm(mbverwtask,ebenembvbehandeln).fuehredruckermenuaus:IF NOTgraphikdruckerinstalliertTHENout(bell);gibmeldung(meldung2);LEAVEfuehredruckermenuausEND IF;uebergibbildschirm(/printertaskname,systemstarten).installieredruckeranpassung:IF NOTsimselsysteminstalliertTHENout(bell);gibmeldung(meldung43);LEAVEinstallieredruckeranpassungEND IF;IFgraphikdruckerinstalliertCAND NOTja(meldung25)THEN LEAVEinstallieredruckeranpassungEND IF;startprinterinstallation;IFiserrorTHENclearerror;gibmeldung(errormessage);ELSEzeigeinstallationsergebnis(titel3,graphikdruckerinstalliert)END IF END PROCstartsystem;PROCinstallieresimselsystem:IF NOTkorrektespasswordTHEN LEAVEinstallieresimselsystemEND IF;IFsimselsysteminstalliertCAND NOTja(meldung24)THEN LEAVEinstallieresimselsystemEND IF;startsimselinstallation;zeigeinstallationsergebnis(titel2,simselsysteminstalliert);IFsimselsysteminstalliertTHENdefinierepasswordEND IF;graphikdruckerinstalliert:=FALSE.END PROCinstallieresimselsystem;PROCstartsimselinstallation:INT VARi;bestimmegraphicundhalbgraphic;IF NOTerforderlichesystemdateieneingelesenTHENerrorstop(meldung49)END IF;
+loescheggfvorhandenetasks;stellebeziehungzulsmenukartenher;richtesicherungstasksein;sicheredateien;meldeinstallationsbeginn;richtelstaskein;richtesimulationstaskein;richtembverwtaskein;loeschedepottask.bestimmegraphicundhalbgraphic:graphicart:=graphikkarte;ibmsatz:=ja(meldung23).loescheggfvorhandenetasks:IFexiststask(depottaskname)THENend(/depottaskname)END IF;IFexiststask(lstaskname)THENend(/lstaskname)END IF.stellebeziehungzulsmenukartenher:IF NOTexiststask(lsmktaskname)THENerrorstop(meldung49)ELSElsmktask:=/lsmktasknameEND IF.richtesicherungstasksein:begin(depottaskname,PROCfreeglobalmanager,depottask);IF NOTexiststask(umstelltaskname)THENerrorstop(meldung49)ELSEumstelltask:=/umstelltasknameEND IF.sicheredateien:commanddialogue(FALSE);save(menukarte,lsmktask);save(maskenname,lsmktask);save(textdsname,lsmktask);save(archivinhalt,depottask);FORiFROM1UPTOanzahldruckerdsREP IF NOTexists(druckerdatei(i),umstelltask)THENsave(druckerdatei(i),umstelltask)END IF END REP;forget(archivinhalt).meldeinstallationsbeginn:zeigetitelzeile(titel2);cursor(15,10);out(meldung30);cursor(15,12);out(meldung31+text(anzahlgesamt)+" Dateien");installationszaehler:=0.richtelstaskein:begin(lstaskname,PROCinstallls,lstask);FORiFROM1UPTOanzahllsprocsREPinsertiereprogramme(lstask)END REP.richtesimulationstaskein:REP UNTILexiststask(simulationstaskname)CANDstatus(/simulationstaskname)=2END REP;simulationstask:=/simulationstaskname;FORiFROM1UPTOanzahlsimprocsREPinsertiereprogramme(simulationstask)END REP.richtembverwtaskein:REP UNTILexiststask(mbverwtaskname)CANDstatus(/mbverwtaskname)=2END REP;mbverwtask:=/mbverwtaskname;FORiFROM1UPTOanzahlmbverwprocsREPinsertiereprogramme(mbverwtask)END REP.loeschedepottask:end(depottask)END PROCstartsimselinstallation;BOOL PROCerforderlichesystemdateieneingelesen:LETdateien=60,nichtgeladen="0",geladen="1";ROWdateienTEXT CONSTsystemdatei:=ROWdateienTEXT:("simsel cga plot","simsel ega plot","simsel vga plot","simsel hercules plot","ZEICHEN 8*8","ZEICHEN 9*14","ZEICHEN 8*19","ZEICHEN 8*14","ZEICHEN 6*10","ZEICHEN 8*16","simsel formulare","TEXTE deutsch","ls-MENUKARTE:Simsel","ls-DIALOG 1.korrektur","ls-DIALOG 2.simsel","ls-DIALOG 3.korrektur","ls-DIALOG 4.wd","ls-DIALOG 5.korrektur","ls-DIALOG 5.simsel","spool cmd","mat.xerox4045 plot","mat.epson-sq plot","mat.epson-fx plot","mat.binder plot","mat.kyocera plot","mat.laserjet plot","mat.hp72xx plot","mat.hp74xx plot","simsel.druckermenu","ls zustaende parameter kurve","ls dateiscroll","modellbasis geraet","modellwerte","ls bildschirmeingaben","simsel basis plot","simsel picture","ls dialoghilfen","output","output test","ls co routinen und co","steuerung","ls demonstration","ls kombination","ls simulation","ltbearb","neue startschl","ls starte bearbeitung","simsel.text als row","ls simsel.masken","e","g","bs","o","m","op1","op2","modellbasis dialog","ls dp1","dp2","ls simselstarter");TEXT VARanweisung:=meldung50,pruefleiste:=dateien*nichtgeladen;TEXT CONSTziel:=dateien*geladen,anpassung:=mathekuerzel+graphicart+plotkuerzel;INT VARi,zaehler:=1;THESAURUS VARdiskinhalt;zeigetitelzeile(titel2);archivinhalt:=emptythesaurus;FORiFROM1UPTO4REP IFsystemdatei(i)<>anpassungTHENreplace(pruefleiste,i,geladen)END IF END REP;REPwarteaufeingabe;FORiFROM1UPTOdateienREP IF(pruefleisteSUBi)=nichtgeladenCAND(diskinhaltCONTAINSsystemdatei(i))THENladediedateiEND IF END REP;anweisung:=meldung54UNTILpruefleiste=zielEND REP;abschlussaktivitaeten;TRUE.zeigetexte:cursor(8,8);out(meldung44);cursor(8,9);out(anweisung);cursor(8,10);out(meldung51);cursor(8,12);out(meldung52);cursor(8,13);out(meldung53).warteaufeingabe:TEXT VARch;REPzeigetexte;inchar(ch);IFch=abbruchTHENrelease(archive);LEAVEerforderlichesystemdateieneingelesenWITH FALSE ELIFch=weiterTHENdisablestop;cursor(8,9);out(del);cursor(8,10);out(del);cursor(8,12);out(del);cursor(8,13);out(del);cursor(8,15);out(del);archive(archivname);diskinhalt:=ALLtestarchive;IFiserrorTHENclearerror;cursor(8,15);out(meldung47);enablestop;ELSEenablestop;LEAVE
+warteaufeingabeEND IF ELSEout(bell)END IF END REP.ladediedatei:cursor(8,9);out(meldung27+text(zaehler)+" von "+text(dateien-3)+" Dateien");fetch(systemdatei(i),testarchive);replace(pruefleiste,i,geladen);insert(archivinhalt,systemdatei(i));zaehlerINCR1.abschlussaktivitaeten:release(archive);cursor(8,8);out(meldung28+del);cursor(8,9);out(meldung29+del);pause(50).testarchive:archive.END PROCerforderlichesystemdateieneingelesen;PROCinstallls:INT VARi;FORiFROM1UPTOanzahllsprocsREPinsertiere(vorlaufdatei(i),depottask)END REP;IFibmsatzTHENdo(ibmzeichensatz)ELSEdo(stdsatzzeichen)END IF;begin(simulationstaskname,PROCinstallsimulationstask,simulationstask);begin(mbverwtaskname,PROCinstallmodellbankverwaltung,mbverwtask);disablestop;REP REPwarteaufauftragUNTILordercode>=drucker1erzeugenCANDordercode<=drucker8erzeugenEND REP;druckerindex:=ordercode-druckererzeugen;begin(printertaskname,PROCinstallprinter,printertask);gibantwort(ok)END REP END PROCinstallls;PROCinstallsimulationstask:ROWanzahlsimprocsTEXT CONSTsimproc:=ROWanzahlsimprocsTEXT:("ls dateiscroll",mathekuerzel+graphicart+plotkuerzel,"ls dialoghilfen","modellbasis geraet","modellwerte","ls bildschirmeingaben","simsel basis plot","simsel picture","output","ls co routinen und co","steuerung","ls demonstration","ls kombination","ls simulation","ltbearb","ls-DIALOG 5.simsel","neue startschl","ls starte bearbeitung");TEXT CONSTzugehoerendezeichen:=passenderzeichensatz;holenotfalls(zugehoerendezeichen,depottask);INT VARi;FORiFROM1UPTOanzahlsimprocsREPinsertiere(simproc(i),depottask)END REP;forget(zugehoerendezeichen,quiet);do(startschleifeaufrufen);.passenderzeichensatz:IFgraphicart="vga"THEN"ZEICHEN 8*19"ELIFgraphicart="ega"THEN"ZEICHEN 8*14"ELIFgraphicart="cga"THEN"ZEICHEN 8*8"ELSE"ZEICHEN 9*14"END IF.END PROCinstallsimulationstask;PROCinstallmodellbankverwaltung:ROWanzahlmbverwprocsTEXT CONSTdname:=ROWanzahlmbverwprocsTEXT:("ls dateiscroll","ls-DIALOG 5.korrektur","ls dialoghilfen","simsel.text als row","ls simsel.masken","e","g","bs","o","m","op1","op2","modellbasis dialog","ls dp1","dp2","ls simselstarter");INT VARi;insertierembverwsystem;beendeinstallation.insertierembverwsystem:FORiFROM1UPTOanzahlmbverwprocsREPinsertiere(dname(i),depottask)PER;do(menuankoppeln);.beendeinstallation:commanddialogue(FALSE);forget(all-textdsname-maskenname);commanddialogue(TRUE);disablestop;REP REPwarteaufauftragUNTILordercode=ebenembvbehandelnEND REP;continue(arbeitskanal);do(ebenembvhandle);gibbildschirmfrei(ok)END REP;END PROCinstallmodellbankverwaltung;PROCstartprinterinstallation:loescheggfvorhandenetask;bestimmedruckeranpassung;meldeinstallationsbeginn;richtedruckertasksein.loescheggfvorhandenetask:IFexiststask(printertaskname)THENend(/printertaskname)END IF.bestimmedruckeranpassung:druckerindex:=druckertreiber.meldeinstallationsbeginn:INT VARende:=anzahlpriprocs;IFdruckerindex>6THENendeDECR1END IF;zeigetitelzeile(titel2);cursor(15,10);out(meldung42);cursor(15,12);out(meldung31+text(ende)+" Dateien");installationszaehler:=0.richtedruckertasksein:INT VARi;IF NOTexiststask(pridepottaskname)THENbegin(pridepottaskname,PROCfreeglobalmanager,pridepottask)END IF;lstask:=/lstaskname;rufe(lstask,druckererzeugen+druckerindex);REP UNTILexiststask(printertaskname)CANDstatus(/printertaskname)=2END REP;printertask:=/printertaskname;FORiFROM1UPTOendeREPinsertiereprogramme(printertask)END REP END PROCstartprinterinstallation;PROCinstallprinter:LETanzahlzeichensaetze=3;ROWanzahlpriprocsTEXT CONSTprogramm:=ROWanzahlpriprocsTEXT:(druckerdatei(4),druckerdatei(4+druckerindex),druckerdatei(13),druckerdatei(14),druckerdatei(15),druckerdatei(16),druckerdatei(17),druckerdatei(18));INT VARi;BOOL VARplotterwirdinstalliert:=druckerindex>6;IF NOTplotterwirdinstalliertTHENholezeichensaetzeEND IF;insertieredieeinzelnenprogramme;do(menuankoppeln);abschlussaktivitaet.holezeichensaetze:FORiFROM1UPTOanzahlzeichensaetzeREPholenotfalls(druckerdatei(i),/umstelltaskname)PER.insertieredieeinzelnenprogramme:INT VARanfang:=1;IF
+plotterwirdinstalliertTHENanfang:=2END IF;FORiFROManfangUPTOanzahlpriprocsREPinsertiere(programm(i),/umstelltaskname)END REP.abschlussaktivitaet:IF NOTplotterwirdinstalliertTHEN FORiFROM1UPTOanzahlzeichensaetzeREPforget(druckerdatei(i),quiet)END REP END IF;IFplotterwirdinstalliertTHENdo(plotterein)ELSEdo(plotteraus)END IF;disablestop;REP REPwarteaufauftragUNTILordercode=systemstartenEND REP;continue(arbeitskanal);do(druckmenuhandle);gibbildschirmfrei(ok)END REP END PROCinstallprinter;PROCinsertiereprogramme(TASK VARzieltask):installationszaehlerINCR1;cursor(40,12);out(text(installationszaehler));rufe(zieltask,insertieren);IFantwort<>okTHENerrorstop(meldung32)END IF END PROCinsertiereprogramme;PROCinsertiere(TEXT CONSTname,TASK CONSTherkunft):REPwarteaufauftragUNTILordercode=insertierenEND REP;disablestop;holenotfalls(name,herkunft);insert(name);forget(name,quiet);IFiserrorTHENclearerror;gibantwort(fehler)ELSEgibantwort(ok)END IF;enablestopEND PROCinsertiere;PROCholenotfalls(TEXT CONSTname,TASK CONSTherkunft):IF NOTexists(name)THENfetch(name,herkunft)END IF END PROCholenotfalls;PROCrufe(TASK CONSTzieltask,INT CONSTauftrag):messageds:=nilspace;call(zieltask,auftrag,messageds,antwort);forget(messageds)END PROCrufe;PROCwarteaufauftrag:wait(messageds,ordercode,ordertask);forget(messageds)END PROCwarteaufauftrag;PROCgibantwort(INT CONSTantwortcode):messageds:=nilspace;send(ordertask,antwortcode,messageds);END PROCgibantwort;PROCuebergibbildschirm(TASK CONSTt,INT CONSTauftrag):break(quiet);rufe(t,auftrag);continue(arbeitskanal)END PROCuebergibbildschirm;PROCgibbildschirmfrei(INT CONSTantwortcode):break(quiet);gibantwort(antwortcode)END PROCgibbildschirmfrei;TEXT PROCgraphikkarte:LETanzahlplotprocs=4;ROWanzahlplotprocsTEXT CONSTplotname:=ROWanzahlplotprocsTEXT:("hercules","cga","ega","vga");INT VARi:=1,zeile;commanddialogue(TRUE);zeigetitelzeile(titel2);FORzeileFROM6UPTO17REPcursor(16,zeile);out(menu2(zeile-5))END REP;REPcursor(16,20);out(invers(text(plotname(i),11)));IFyes(meldung33)THENcommanddialogue(FALSE);LEAVEgraphikkarteWITHplotname(i)END IF;i:=iMODanzahlplotprocs+1END REP;plotname(i)END PROCgraphikkarte;INT PROCdruckertreiber:LETanzahlplotterprocs=8;ROWanzahlplotterprocsTEXT CONSTplotname:=ROWanzahlplotterprocsTEXT:("xerox4045","epson-sq","epson-fx","binder","kyocera","laserjet","hp72xx","hp74xx");INT VARi,zeile;commanddialogue(TRUE);zeigetitelzeile(titel3);FORzeileFROM3UPTO16REPcursor(16,zeile);out(menu3(zeile-2))END REP;i:=1;REPcursor(16,20);out(invers(text(plotname(i),11)));IFyes(meldung33)THENcommanddialogue(FALSE);LEAVEdruckertreiberWITHiEND IF;i:=iMODanzahlplotterprocs+1END REP;iEND PROCdruckertreiber;PROCzeigetitelzeile(TEXT CONSTfktbezeichner):TEXT CONSTzeile:=text(systemname,78-length(fktbezeichner))+fktbezeichner;page;cursor(1,1);out(invers(text(zeile,79)))END PROCzeigetitelzeile;PROCzeigeinstallationsergebnis(TEXT CONSTziel,BOOL VARerfolg):zeigetitelzeile(ziel);IFiserrorTHENclearerror;gibmeldung(meldung22);erfolg:=FALSE ELSEgibmeldung(meldung21);erfolg:=TRUE END IF END PROCzeigeinstallationsergebnis;PROCgibmeldung(TEXT CONSTmeldungstext):cursor(1,23);out(meldungstext);cursor(1,24);out(invers(text(meldung26,77)));clearbuffer;pauseEND PROCgibmeldung;PROCclearbuffer:REP UNTILincharety=niltextPER END PROCclearbuffer;BOOL PROCja(TEXT CONSTfrage):BOOL VARantwort;commanddialogue(TRUE);cursor(1,22);antwort:=yes(frage);cursor(1,22);out(del);commanddialogue(FALSE);antwortEND PROCja;TEXT PROCinvers(TEXT CONSTt):beginmark+t+endmarkEND PROCinvers;BOOL PROCkorrektespassword:installationspassword=niltextCORpasswordgetroffen.passwordgetroffen:TEXT VAReingabe;cursor(24,18);out(meldung45+del);getsecretline(eingabe);IFeingabe=installationspasswordTHENcursor(24,18);out(del);LEAVEpasswordgetroffenWITH TRUE END IF;out(bell);FALSE END PROCkorrektespassword;PROCdefinierepassword:installationspassword:=niltext;cursor(1,23);out(delpage);IFja(meldung46)THENcursor(1,23);out(meldung45+beginmark+left);editget(installationspassword,40,20);out(
+endmark)END IF END PROCdefinierepassword;END PACKETsimselverwaltung;
+
diff --git a/app/schulis-simulationssystem/3.0/src/spool cmd b/app/schulis-simulationssystem/3.0/src/spool cmd
new file mode 100644
index 0000000..966ab79
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/spool cmd
@@ -0,0 +1,3 @@
+PACKETspoolcmdDEFINESspoolcontrolpassword,killspool,firstspool,startspool,stopspool,haltspool,waitforhalt:LETerrornak=2,entrylinecode=23,killercode=24,firstcode=25,startcode=26,stopcode=27,haltcode=28,waitforhaltcode=29;DATASPACE VARds;BOUND STRUCT(TEXTentryline,INTindex,TEXTactualentries,password)VARcontrolmsg;BOUND TEXT VARerrormsg;INT VARreply;INITFLAG VARinthistask:=FALSE;BOOL VARdialogue;TEXT VARcontrolpassword,password;controlpassword:="";PROCspoolcontrolpassword(TEXT CONSTnewpassword):IFonlineTHENsay("� �")FI;disablestop;do("enterspoolcontrolpassword(""+newpassword+"")");clearerror;nodoagain;covertracks;covertracks(controlpassword);controlpassword:=newpassword;END PROCspoolcontrolpassword;PROCcallspool(INT CONSTopcode,TEXT CONSTname,TASK CONSTspool):dialogue:=commanddialogue;password:=writepassword;passwordCAT"/";passwordCATreadpassword;disablestop;commanddialogue(FALSE);enterpassword(controlpassword);commanddialogue(dialogue);call(opcode,name,spool);commanddialogue(FALSE);enterpassword(password);commanddialogue(dialogue);END PROCcallspool;PROCstartspool(TASK CONSTspool):enablestop;callspool(haltcode,"",spool);callspool(startcode,"",spool);END PROCstartspool;PROCstartspool(TASK CONSTspool,INT CONSTnewchannel):enablestop;callspool(haltcode,"",spool);callspool(startcode,text(newchannel),spool);END PROCstartspool;PROCstopspool(TASK CONSTspool):callspool(stopcode,"",spool);END PROCstopspool;PROCstopspool(TASK CONSTspool,TEXT CONSTdeactivemsg):callspool(stopcode,deactivemsg,spool);END PROCstopspool;PROChaltspool(TASK CONSTspool):callspool(haltcode,"",spool);END PROChaltspool;PROChaltspool(TASK CONSTspool,TEXT CONSTdeactivemsg):callspool(haltcode,deactivemsg,spool);END PROChaltspool;PROCwaitforhalt(TASK CONSTspool):callspool(waitforhaltcode,"",spool);END PROCwaitforhalt;PROCwaitforhalt(TASK CONSTspool,TEXT CONSTdeactivemsg):callspool(waitforhaltcode,deactivemsg,spool);END PROCwaitforhalt;PROCcontrolspool(TASK CONSTspool,INT CONSTcontrolcode,TEXT CONSTquestion,BOOL CONSTleave):enablestop;initializecontrolmsg;WHILEvalidspoolentryREP IFcontrolquestionTHENcontrolspoolentryFI PER;.initializecontrolmsg:IF NOTinitialized(inthistask)THENds:=nilspaceFI;forget(ds);ds:=nilspace;controlmsg:=ds;controlmsg.entryline:="";controlmsg.password:=controlpassword;controlmsg.index:=0;say("
+");.validspoolentry:call(spool,entrylinecode,ds,reply);IFreply=errornakTHENerrormsg:=ds;errorstop(errormsg);FI;controlmsg.index<>0.controlquestion:say(controlmsg.entryline);yes(question).controlspoolentry:call(spool,controlcode,ds,reply);IFreply=errornakTHENerrormsg:=ds;errorstop(errormsg);FI;IFleaveTHEN LEAVEcontrolspoolFI;END PROCcontrolspool;PROCkillspool(TASK CONSTspool):controlspool(spool,killercode," loeschen",FALSE)END PROCkillspool;PROCfirstspool(TASK CONSTspool):controlspool(spool,firstcode," als erstes",TRUE)END PROCfirstspool;END PACKETspoolcmd;
+
diff --git a/app/schulis-simulationssystem/3.0/src/steuerung b/app/schulis-simulationssystem/3.0/src/steuerung
new file mode 100644
index 0000000..94e029c
--- /dev/null
+++ b/app/schulis-simulationssystem/3.0/src/steuerung
@@ -0,0 +1,6 @@
+PACKETsteuerungDEFINESsteuerprozessfuereineloesung,steuerprozessfuerzweiloesungen:LETesc="�",hop="�",rechts="�",links="�",plotten="p",tasteblaettern="b",tasteblaetternoben="o",tasteblaetternunten="u",piepton="�",plottask="SIMSEL-PRINTERDEPOT",initialisieren=0,kreuzerzeugen=1,anfpunktloeschen=4,bildschirminhaltplotten=5,abschluss=6,warten1=0,warten2=1;LETfusszeileleer=0;DATASPACE VARdsco1,dsco2;KURVE VARk1,k2;REAL VARzeitt1,zeitt2;ZUSTAND VARzustand1,zustand2;PROCsteuerprozessfuereineloesung(OUTPUT VARseite,KURVE VARk,ZUSTAND CONSTmaske1,maske2,INT CONSTfenster1,fenster2,kopfzeile,steuerzeile,TEXT CONSTtasteninnen,tastenraus,TEXT VARabbruchtaste,PROC(OUTPUT VAR,INT CONST,KURVE VAR,REAL VAR,ZUSTAND VAR,ZUSTAND VAR,DATASPACE VAR,INT VAR,REAL VAR,REAL VAR,REAL VAR,REAL VAR,BOOL VAR)coroutine1,PROC(OUTPUT VAR,INT CONST,KURVE VAR,REAL VAR,ZUSTAND VAR,ZUSTAND VAR,DATASPACE VAR,INT VAR,REAL VAR,REAL VAR,REAL VAR,REAL VAR,BOOL VAR)coroutine2):TEXT VARtaste;REAL VARzeitt,null:=0.0;BOOL VARauto1,auto2,vorwaertslesen,richtungswechsel;ZUSTAND VARzustand,maske1intern,maske2intern;INT VARmerker,co1wastun,co1wastunalt,co2wastun,co2wastunalt;vorwaertsundrueckwaerts;fuehreabschlussarbeitenaus.vorwaertsundrueckwaerts:INT VARinternerzustand:=0;initialisieredensteuerprozess;initialisierecoroutine1;initialisierecoroutine2;leseersten(k,zeitt,zustand);internerzustand:=4;REPvorwaerts;rueckwaertsPER.fuehreabschlussarbeitenaus:schliessecoroutine1ab;schliessecoroutine2ab.initialisieredensteuerprozess:forget(dsco1);forget(dsco2);dsco1:=nilspace;dsco2:=nilspace;auto1:=FALSE;auto2:=FALSE;vorwaertslesen:=TRUE;maske1intern:=maske1;maske2intern:=maske2;merker:=warten1;gebeaufbildschirmaus(seite,modellkurzbezeichnung,kopfzeile,fusszeileleer);beginplot;plottefusszeile(seite,steuerzeile);endplot.initialisierecoroutine1:co1wastun:=initialisieren;coroutine1(seite,fenster1,k,zeitt,maske1intern,zustand,dsco1,co1wastun,null,null,null,null,auto1);co1wastun:=kreuzerzeugen;coroutine1(seite,fenster1,k,zeitt,maske1intern,zustand,dsco1,co1wastun,null,null,null,null,auto1).initialisierecoroutine2:co2wastun:=initialisieren;coroutine2(seite,fenster2,k,zeitt,maske2intern,zustand,dsco2,co2wastun,null,null,null,null,auto2);co2wastun:=kreuzerzeugen;coroutine2(seite,fenster2,k,zeitt,maske2intern,zustand,dsco2,co2wastun,null,null,null,null,auto2).vorwaerts:REP SELECTinternerzustandOF CASE4:vorwaerts4CASE9:vorwaerts9CASE13:vorwaerts13ENDSELECT;liesoderwarteaufbenutzereingaben;IFrichtungswechselTHEN LEAVEvorwaertsFI;internerzustand:=neuervzustand;PER.rueckwaerts:REP SELECTinternerzustandOF CASE4:rueckwaerts4CASE9:rueckwaerts9CASE13:rueckwaerts13ENDSELECT;liesoderwarteaufbenutzereingaben;IFrichtungswechselTHEN LEAVErueckwaertsFI;internerzustand:=neuerrzustand;PER.vorwaerts4:uebergibpunktancoroutine1;uebergibpunktancoroutine2.vorwaerts9:lesenaechsten(k,zeitt,zustand);uebergibpunktancoroutine1;uebergibpunktancoroutine2.vorwaerts13:merker:=warten2.rueckwaerts4:uebergibpunktancoroutine1;uebergibpunktancoroutine2;merker:=warten2.rueckwaerts9:lesevorherigen(k,zeitt,zustand);uebergibpunktancoroutine1;uebergibpunktancoroutine2.rueckwaerts13:.uebergibpunktancoroutine1:coroutine1(seite,fenster1,k,zeitt,maske1intern,zustand,dsco1,co1wastun,null,null,null,null,auto1).uebergibpunktancoroutine2:coroutine2(seite,fenster2,k,zeitt,maske2intern,zustand,dsco2,co2wastun,null,null,null,null,auto2).neuervzustand:SELECTinternerzustandOF CASE4:iznach4vCASE9:iznach9vCASE13:13OTHERWISE0ENDSELECT.neuerrzustand:SELECTinternerzustandOF CASE4:4CASE9:iznach9rCASE13:iznach13rOTHERWISE0ENDSELECT.iznach4v:IFendederloesung(k)THEN13ELSE9FI.iznach9v:iznach4v.iznach9r:IFanfangderloesung(k)THEN4ELSE9FI.iznach13r:9.liesoderwarteaufbenutzereingaben:REPliesbenutzereingaben(taste,tasteninnen,tastenraus,merker);IFtaste<>""THENinterpretieretasteundfuehreaktionausELSErichtungswechsel:=FALSE;LEAVEliesoderwarteaufbenutzereingabenFI;PER.interpretieretasteundfuehreaktionaus:IF(pos(tastenraus,taste)>0)THENabbruchtaste:=taste;LEAVE
+vorwaertsundrueckwaertsFI;IFtaste=rechtsTHENrichtungswechsel:=NOTvorwaertslesen;vorwaertslesen:=TRUE;LEAVEliesoderwarteaufbenutzereingabenELIFtaste=linksTHENrichtungswechsel:=vorwaertslesen;vorwaertslesen:=FALSE;LEAVEliesoderwarteaufbenutzereingabenELIFtaste=plottenTHENplotteloesungskurveELIFtaste=tasteblaetternTHENblaettern(seite);out(hop)ELIFtaste=tasteblaetternobenTHENblaetternoben(seite);out(hop)ELIFtaste=tasteblaetternuntenTHENblaetternunten(seite);out(hop)FI.plotteloesungskurve:nildiagrammmitkreuz(seite,fenster1);nildiagrammmitkreuz(seite,fenster2);co1wastunalt:=co1wastun;co1wastun:=bildschirminhaltplotten;coroutine1(seite,fenster1,k,zeitt,maske1intern,zustand,dsco1,co1wastun,null,null,null,null,auto1);co1wastun:=co1wastunalt;co2wastunalt:=co2wastun;co2wastun:=bildschirminhaltplotten;coroutine2(seite,fenster2,k,zeitt,maske2intern,zustand,dsco2,co2wastun,null,null,null,null,auto2);co2wastun:=co2wastunalt;versendeoutput(seite,modellkurzbezeichnung,kopfzeile,steuerzeile,plottask);piep.piep:out(piepton).schliessecoroutine1ab:co1wastun:=abschluss;coroutine1(seite,fenster1,k,zeitt,maske1intern,zustand,dsco1,co1wastun,null,null,null,null,auto1).schliessecoroutine2ab:co2wastun:=abschluss;coroutine2(seite,fenster2,k,zeitt,maske2intern,zustand,dsco2,co2wastun,null,null,null,null,auto2).END PROCsteuerprozessfuereineloesung;PROCsteuerprozessfuerzweiloesungen(OUTPUT VARseite,KURVE VARkurve1,kurve2,ZUSTAND CONSTmaske,INT CONSTfenster1,fenster2,kopfzeile,steuerzeile,TEXT CONSTtasteninnen,tastenraus,TEXT VARabbruchtaste,PROC(OUTPUT VAR,INT CONST,KURVE VAR,REAL VAR,ZUSTAND VAR,ZUSTAND VAR,DATASPACE VAR,INT VAR,REAL VAR,REAL VAR,REAL VAR,REAL VAR,BOOL VAR)coroutine,PROC(OUTPUT VAR,KURVE VAR,KURVE VAR,ZUSTAND VAR,INT CONST,INT CONST,ROW4INT VAR,REAL VAR,REAL VAR,REAL VAR,REAL VAR,REAL VAR,REAL VAR,BOOL VAR)kreuzvergleich):LETmaxloe=4;ROWmaxloeINT VARposition;TEXT VARtaste;BOOL VARautomatik,vorwaertslesen,richtungswechsel;ZUSTAND VARmaskeintern;INT VARco1wastun,co1wastunalt,co2wastun,co2wastunalt,merker;REAL VARx1min,x1max,x2min,x2max,ymin,ymax;k1:=kurve1;k2:=kurve2;vorwaertsundrueckwaerts.vorwaertsundrueckwaerts:INT VARinternerzustand:=0;initialisieredensteuerprozess;initialisierediecoroutinedoppelt;leseersten(k1,zeitt1,zustand1);leseersten(k2,zeitt2,zustand2);internerzustand:=internerzustandnach0v;REPvorwaerts;rueckwaertsPER.initialisieredensteuerprozess:forget(dsco1);forget(dsco2);dsco1:=nilspace;dsco2:=nilspace;automatik:=FALSE;merker:=warten1;vorwaertslesen:=TRUE;maskeintern:=maske;gebeaufbildschirmaus(seite,modellkurzbezeichnung,kopfzeile,fusszeileleer);beginplot;plottefusszeile(seite,steuerzeile);kreuzvergleich(seite,k1,k2,maskeintern,fenster1,fenster2,position,x1min,x1max,x2min,x2max,ymin,ymax,automatik);endplot.initialisierediecoroutinedoppelt:co1wastun:=initialisieren;coroutine(seite,fenster1,k1,zeitt1,maskeintern,zustand1,dsco1,co1wastun,x1min,x1max,ymin,ymax,automatik);co2wastun:=initialisieren+10;coroutine(seite,fenster2,k2,zeitt2,maskeintern,zustand2,dsco2,co2wastun,x2min,x2max,ymin,ymax,automatik).vorwaerts:REP SELECTinternerzustandOF CASE1:vorwaerts1CASE2:vorwaerts2CASE3:vorwaerts3CASE4:vorwaerts4CASE5:vorwaerts5CASE6:vorwaerts6CASE7:vorwaerts7CASE8:vorwaerts8CASE9:vorwaerts9CASE10:vorwaerts10CASE11:vorwaerts11CASE12:vorwaerts12CASE13:vorwaerts13ENDSELECT;liesoderwarteaufbenutzereingaben;IFrichtungswechselTHEN LEAVEvorwaertsFI;internerzustand:=neuervzustand;PER.rueckwaerts:REP SELECTinternerzustandOF CASE1:rueckwaerts1CASE2:rueckwaerts2CASE3:rueckwaerts3CASE4:rueckwaerts4CASE5:rueckwaerts5CASE6:rueckwaerts6CASE7:rueckwaerts7CASE8:rueckwaerts8CASE9:rueckwaerts9CASE10:rueckwaerts10CASE11:rueckwaerts11CASE12:rueckwaerts12CASE13:rueckwaerts13ENDSELECT;liesoderwarteaufbenutzereingaben;IFrichtungswechselTHEN LEAVErueckwaertsFI;loescheggfanfpunkteinerkurve;internerzustand:=neuerrzustand;PER.neuervzustand:SELECTinternerzustandOF CASE1:internerzustandnach1vCASE2:internerzustandnach2vCASE3:internerzustandnach3vCASE4:
+internerzustandnach4vCASE5:internerzustandnach5vCASE6:internerzustandnach6vCASE7:internerzustandnach7vCASE8:internerzustandnach8vCASE9:internerzustandnach9vCASE10:internerzustandnach10vCASE11:internerzustandnach11vCASE12:internerzustandnach12vCASE13:13OTHERWISE0ENDSELECT.neuerrzustand:SELECTinternerzustandOF CASE1:1CASE2:internerzustandnach2rCASE3:internerzustandnach3rCASE4:4CASE5:5CASE6:internerzustandnach6rCASE7:internerzustandnach7rCASE8:internerzustandnach8rCASE9:internerzustandnach9rCASE10:internerzustandnach10rCASE11:internerzustandnach11rCASE12:internerzustandnach12rCASE13:internerzustandnach13rOTHERWISE0ENDSELECT.loescheggfanfpunkteinerkurve:SELECTinternerzustandOF CASE3:loescheerstenfuerkurve2CASE7:loescheerstenfuerkurve1ENDSELECT.vorwaerts1:zeichnefuerkurve1.vorwaerts2:lesenaechsten(k1,zeitt1,zustand1);zeichnefuerkurve1.vorwaerts3:zeichnefuerkurve2.vorwaerts4:zeichnefuerkurve1;zeichnefuerkurve2.vorwaerts5:zeichnefuerkurve2.vorwaerts6:lesenaechsten(k2,zeitt2,zustand2);zeichnefuerkurve2.vorwaerts7:zeichnefuerkurve1.vorwaerts8:lesenaechsten(k1,zeitt1,zustand1);zeichnefuerkurve1.vorwaerts9:lesenaechsten(k1,zeitt1,zustand1);lesenaechsten(k2,zeitt2,zustand2);zeichnefuerkurve1;zeichnefuerkurve2.vorwaerts10:lesenaechsten(k2,zeitt2,zustand2);zeichnefuerkurve2.vorwaerts11:lesenaechsten(k2,zeitt2,zustand2);zeichnefuerkurve2.vorwaerts12:lesenaechsten(k1,zeitt1,zustand1);zeichnefuerkurve1.vorwaerts13:merker:=warten2.rueckwaerts1:zeichnefuerkurve1;merker:=warten2.rueckwaerts2:lesevorherigen(k1,zeitt1,zustand1);zeichnefuerkurve1.rueckwaerts3:zeichnefuerkurve2.rueckwaerts4:zeichnefuerkurve1;zeichnefuerkurve2;merker:=warten2.rueckwaerts5:zeichnefuerkurve2;merker:=warten2.rueckwaerts6:lesevorherigen(k2,zeitt2,zustand2);zeichnefuerkurve2.rueckwaerts7:zeichnefuerkurve1.rueckwaerts8:lesevorherigen(k1,zeitt1,zustand1);zeichnefuerkurve1.rueckwaerts9:lesevorherigen(k1,zeitt1,zustand1);zeichnefuerkurve1;lesevorherigen(k2,zeitt2,zustand2);zeichnefuerkurve2.rueckwaerts10:lesevorherigen(k2,zeitt2,zustand2);zeichnefuerkurve2.rueckwaerts11:lesevorherigen(k2,zeitt2,zustand2);zeichnefuerkurve2.rueckwaerts12:lesevorherigen(k1,zeitt1,zustand1);zeichnefuerkurve1.rueckwaerts13:.zeichnefuerkurve1:uebergibpunktdererstenkurveancoroutine.zeichnefuerkurve2:uebergibpunktderzweitenkurveancoroutine.loescheerstenfuerkurve1:co1wastun:=anfpunktloeschen;uebergibpunktdererstenkurveancoroutine.loescheerstenfuerkurve2:co2wastun:=anfpunktloeschen;uebergibpunktderzweitenkurveancoroutine.uebergibpunktdererstenkurveancoroutine:coroutine(seite,fenster1,k1,zeitt1,maskeintern,zustand1,dsco1,co1wastun,x1min,x1max,ymin,ymax,automatik).uebergibpunktderzweitenkurveancoroutine:coroutine(seite,fenster2,k2,zeitt2,maskeintern,zustand2,dsco2,co2wastun,x2min,x2max,ymin,ymax,automatik).liesoderwarteaufbenutzereingaben:REPliesbenutzereingaben(taste,tasteninnen,tastenraus,merker);IFtaste<>""THENinterpretieretasteundfuehreaktionausELSErichtungswechsel:=FALSE;LEAVEliesoderwarteaufbenutzereingabenFI;PER.interpretieretasteundfuehreaktionaus:IF(pos(tastenraus,taste)>0)THENabbruchtaste:=taste;LEAVEvorwaertsundrueckwaertsFI;IFtaste=rechtsTHENrichtungswechsel:=NOTvorwaertslesen;vorwaertslesen:=TRUE;LEAVEliesoderwarteaufbenutzereingabenELIFtaste=linksTHENrichtungswechsel:=vorwaertslesen;vorwaertslesen:=FALSE;LEAVEliesoderwarteaufbenutzereingabenELIFtaste=plottenTHENplotteloesungskurveELIFtaste=tasteblaetternTHENblaettern(seite);out(hop)ELIFtaste=tasteblaetternobenTHENblaetternoben(seite);out(hop)ELIFtaste=tasteblaetternuntenTHENblaetternunten(seite);out(hop)FI.plotteloesungskurve:nildiagrammmitkreuz(seite,fenster1);nildiagrammmitkreuz(seite,fenster2);co1wastunalt:=co1wastun;co1wastun:=bildschirminhaltplotten;coroutine(seite,fenster1,k1,zeitt1,maskeintern,zustand1,dsco1,co1wastun,x1min,x1max,ymin,ymax,automatik);co1wastun:=co1wastunalt;co2wastunalt:=co2wastun;co2wastun:=bildschirminhaltplotten;coroutine(seite,fenster2,k2,zeitt2,maskeintern,zustand2,dsco2,co2wastun,x2min,x2max,ymin,ymax,automatik)
+;co2wastun:=co2wastunalt;versendeoutput(seite,modellkurzbezeichnung,kopfzeile,steuerzeile,plottask);piep.piep:out(piepton).END PROCsteuerprozessfuerzweiloesungen;PROCliesbenutzereingaben(TEXT VARtaste,TEXT CONSTtasteninnen,tastenraus,INT VARmerker):SELECTmerkerOF CASEwarten1:erkenneescCASEwarten2:warteaufnaechstetasteEND SELECT.erkenneesc:taste:=incharety;IFtaste=escTHENwarteaufnaechstetasteELSEtaste:=""FI.warteaufnaechstetaste:inchar(taste);WHILE NOTtastezulaessigREP IFtaste<>escTHENpiepFI;inchar(taste);PER;IF(pos(tastenraus,taste)>0)THEN LEAVEliesbenutzereingabenELIFtaste=hopTHENrichtungfestlegenELSEmerker:=warten2FI.tastezulaessig:(pos(tasteninnen+tastenraus,taste)>0)COR(taste=hop)COR(taste=rechts)COR(taste=links).richtungfestlegen:inchar(taste);WHILE NOT((taste=rechts)COR(taste=links))REPpiep;inchar(taste);PER;merker:=warten1.piep:out(code(7)).END PROCliesbenutzereingaben;INT PROCinternerzustandnach0v:IFzeitt1<zeitt2THEN1ELIFzeitt1>zeitt2THEN5ELSE4FI.END PROCinternerzustandnach0v;INT PROCinternerzustandnach1v:IFendederloesung(k1)THEN3ELSEnaechstezeit(k1,zeitt1);IFzeitt1<=zeitt2THEN2ELSE3FI FI.END PROCinternerzustandnach1v;INT PROCinternerzustandnach2v:internerzustandnach1vEND PROCinternerzustandnach2v;INT PROCinternerzustandnach3v:IFendederloesung(k1)CANDendederloesung(k2)THEN13ELIFendederloesung(k1)THEN11ELIFendederloesung(k2)THEN12ELSEnaechstezeit(k1,zeitt1);naechstezeit(k2,zeitt2);IFzeitt1<zeitt2THEN8ELIFzeitt1>zeitt2THEN10ELSE9FI FI.END PROCinternerzustandnach3v;INT PROCinternerzustandnach4v:internerzustandnach3vEND PROCinternerzustandnach4v;INT PROCinternerzustandnach5v:IFendederloesung(k2)THEN7ELSEnaechstezeit(k2,zeitt2);IFzeitt2<=zeitt1THEN6ELSE7FI FI.END PROCinternerzustandnach5v;INT PROCinternerzustandnach6v:internerzustandnach5vEND PROCinternerzustandnach6v;INT PROCinternerzustandnach7v:internerzustandnach3vEND PROCinternerzustandnach7v;INT PROCinternerzustandnach8v:IFendederloesung(k1)THEN11ELSEnaechstezeit(k1,zeitt1);IFzeitt1<zeitt2THEN8ELIFzeitt1>zeitt2THEN10ELSE9FI FI.END PROCinternerzustandnach8v;INT PROCinternerzustandnach9v:internerzustandnach3v.END PROCinternerzustandnach9v;INT PROCinternerzustandnach10v:IFendederloesung(k2)THEN12ELSEnaechstezeit(k2,zeitt2);IFzeitt1<zeitt2THEN8ELIFzeitt1>zeitt2THEN10ELSE9FI FI.END PROCinternerzustandnach10v;INT PROCinternerzustandnach11v:IFendederloesung(k2)THEN13ELSE11FI.END PROCinternerzustandnach11v;INT PROCinternerzustandnach12v:IFendederloesung(k1)THEN13ELSE12FI.END PROCinternerzustandnach12v;INT PROCinternerzustandnach2r:IFanfangderloesung(k1)THEN1ELSE2FI.END PROCinternerzustandnach2r;INT PROCinternerzustandnach3r:internerzustandnach2r.END PROCinternerzustandnach3r;INT PROCinternerzustandnach6r:IFanfangderloesung(k2)THEN5ELSE6FI.END PROCinternerzustandnach6r;INT PROCinternerzustandnach7r:internerzustandnach6r.END PROCinternerzustandnach7r;INT PROCinternerzustandnach8r:IFanfangderloesung(k1)CANDanfangderloesung(k2)THEN IFzeitt1>zeitt2THEN7ELIFzeitt1<zeitt2THEN3ELSE4FI ELIFanfangderloesung(k1)THEN IFzeitt1>=zeitt2THEN7ELSE10FI ELIFanfangderloesung(k2)THEN IFzeitt1>zeitt2THEN8ELSE3FI ELIFzeitt1>zeitt2THEN8ELIFzeitt1<zeitt2THEN10ELSE9FI.END PROCinternerzustandnach8r;INT PROCinternerzustandnach9r:internerzustandnach8r.END PROCinternerzustandnach9r;INT PROCinternerzustandnach10r:internerzustandnach8r.END PROCinternerzustandnach10r;INT PROCinternerzustandnach11r:IFanfangderloesung(k1)CANDanfangderloesung(k2)THEN IFzeitt1>zeitt2THEN7ELIFzeitt1<zeitt2THEN3ELSE4FI ELIFanfangderloesung(k1)THEN IFzeitt1>=zeitt2THEN7ELSE11FI ELIFanfangderloesung(k2)THEN IFzeitt1>zeitt2THEN8ELSE3FI ELIFzeitt1>zeitt2THEN8ELIFzeitt1<zeitt2THEN11ELSE9FI.END PROCinternerzustandnach11r;INT PROCinternerzustandnach12r:IFanfangderloesung(k1)CANDanfangderloesung(k2)THEN IFzeitt1>zeitt2THEN7ELIFzeitt1<zeitt2THEN3ELSE4FI ELIFanfangderloesung(k1)THEN IFzeitt1>=zeitt2THEN7ELSE10FI ELIFanfangderloesung(k2)THEN IFzeitt1>zeitt2THEN12ELSE3FI ELIFzeitt1>zeitt2THEN12ELIFzeitt1<zeitt2THEN10ELSE9FI.END PROC
+internerzustandnach12r;INT PROCinternerzustandnach13r:IFanfangderloesung(k1)CANDanfangderloesung(k2)THEN IFzeitt1>zeitt2THEN7ELIFzeitt1<zeitt2THEN3ELSE4FI ELIFanfangderloesung(k1)THEN IFzeitt1>=zeitt2THEN7ELSE11FI ELIFanfangderloesung(k2)THEN IFzeitt1>zeitt2THEN12ELSE3FI ELIFzeitt1>zeitt2THEN12ELIFzeitt1<zeitt2THEN11ELSE9FI.END PROCinternerzustandnach13r;END PACKETsteuerung;
+