summaryrefslogtreecommitdiff
path: root/app/eudas/4.3
diff options
context:
space:
mode:
Diffstat (limited to 'app/eudas/4.3')
-rw-r--r--app/eudas/4.3/doc/abb.1-194
-rw-r--r--app/eudas/4.3/doc/abb.4-143
-rw-r--r--app/eudas/4.3/doc/abb.4-246
-rw-r--r--app/eudas/4.3/doc/abb.6-175
-rw-r--r--app/eudas/4.3/doc/abb.6-277
-rw-r--r--app/eudas/4.3/doc/abb.7-146
-rw-r--r--app/eudas/4.3/doc/abb.9-141
-rw-r--r--app/eudas/4.3/doc/abb.9-296
-rw-r--r--app/eudas/4.3/doc/abb.9-3113
-rw-r--r--app/eudas/4.3/doc/abb.9-498
-rw-r--r--app/eudas/4.3/doc/abb.9-551
-rw-r--r--app/eudas/4.3/doc/bildergenerator25
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.1267
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.10510
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.11674
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.12446
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.13757
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.14724
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.15286
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.16350
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.2178
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.3515
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.5386
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.6394
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.7687
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.8211
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.9556
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.inhalt133
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.macros80
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.titel99
-rw-r--r--app/eudas/4.3/doc/eudas.hdb.vorwort89
-rw-r--r--app/eudas/4.3/doc/eudas.ref.1326
-rw-r--r--app/eudas/4.3/doc/eudas.ref.10406
-rw-r--r--app/eudas/4.3/doc/eudas.ref.11347
-rw-r--r--app/eudas/4.3/doc/eudas.ref.2830
-rw-r--r--app/eudas/4.3/doc/eudas.ref.3270
-rw-r--r--app/eudas/4.3/doc/eudas.ref.4441
-rw-r--r--app/eudas/4.3/doc/eudas.ref.5432
-rw-r--r--app/eudas/4.3/doc/eudas.ref.6399
-rw-r--r--app/eudas/4.3/doc/eudas.ref.7447
-rw-r--r--app/eudas/4.3/doc/eudas.ref.8454
-rw-r--r--app/eudas/4.3/doc/eudas.ref.9194
-rw-r--r--app/eudas/4.3/doc/eudas.ref.fehler139
-rw-r--r--app/eudas/4.3/doc/eudas.ref.inhalt120
-rw-r--r--app/eudas/4.3/doc/eudas.ref.macros73
-rw-r--r--app/eudas/4.3/doc/eudas.ref.proz205
-rw-r--r--app/eudas/4.3/doc/eudas.ref.reg436
-rw-r--r--app/eudas/4.3/doc/eudas.ref.titel91
-rw-r--r--app/eudas/4.3/doc/eudas.ref.vorwort81
-rw-r--r--app/eudas/4.3/doc/ref.abb.1-142
-rw-r--r--app/eudas/4.3/doc/register490
-rw-r--r--app/eudas/4.3/doc/uedas.hdb.4686
-rw-r--r--app/eudas/4.3/src/Adressenbin0 -> 3584 bytes
-rw-r--r--app/eudas/4.3/src/dummy.text14
-rw-r--r--app/eudas/4.3/src/eudas.152
-rw-r--r--app/eudas/4.3/src/eudas.262
-rw-r--r--app/eudas/4.3/src/eudas.358
-rw-r--r--app/eudas/4.3/src/eudas.4150
-rw-r--r--app/eudas/4.3/src/eudas.generator86
-rw-r--r--app/eudas/4.3/src/eudas.init1463
-rw-r--r--app/eudas/4.3/src/pos.17319
61 files changed, 16960 insertions, 0 deletions
diff --git a/app/eudas/4.3/doc/abb.1-1 b/app/eudas/4.3/doc/abb.1-1
new file mode 100644
index 0000000..06c27fd
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.1-1
@@ -0,0 +1,94 @@
+init dgs;
+window (0.0, 0.0, 13.5, 7.1); (*viewport (0.0,0.0,13.5,7.1); *)
+scale (1.0,1.0,0.0,0.0);
+(*clear pixels;*)
+
+karteikasten (1.0, 3.5, "Kartei A", "Wegner", "Herbert");
+karteikasten (5.0, 0.5, "Kartei B", "Regmann", "Karin");
+
+LET myname = "abb.1-1";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (10000);
+*)
+PROC karteikasten (REAL CONST x, y, TEXT CONST name, t name, t vorname) :
+
+ move (x - 0.1, y);
+ draw (x + 3.6, y);
+ draw (x + 3.6, y + 1.0);
+ draw (x - 0.1, y + 1.0);
+ draw (x - 0.1, y);
+
+ move (x + 0.1, y + 1.1);
+ draw (x + 0.5, y + 1.5);
+ move (x + 0.1, y + 1.1);
+ draw (x + 3.6, y + 1.1);
+ move (x - 0.1, y + 1.0);
+ draw (x + 0.5, y + 1.6);
+
+ move (x + 3.6, y);
+ draw (x + 5.2, y + 1.6);
+ draw (x + 5.2, y + 2.6);
+ draw (x + 3.6, y + 1.0);
+ move (x + 3.6, y + 1.1); draw (x + 5.0, y + 2.5);
+ move (x + 5.2, y + 2.6); draw (x + 5.0, y + 2.6);
+
+ move (x + 0.5, y + 1.1);
+ draw (x + 0.5, y + 2.5);
+ draw (x + 4.0, y + 2.5);
+ draw (x + 4.0, y + 1.5);
+ move (x + 0.5, y + 2.5);
+ draw (x + 1.5, y + 3.5);
+ draw (x + 5.0, y + 3.5);
+ draw (x + 5.0, y + 2.5);
+ move (x + 5.0, y + 3.5);
+ draw (x + 4.0, y + 2.5);
+ REAL VAR x off := 0.1;
+ WHILE x off < 1.0 REP
+ move (x + 0.5 + xoff, y + 2.5 + x off);
+ draw (x + 4.0 + xoff, y + 2.5 + xoff);
+ draw (x + 4.0 + xoff, y + 1.5 + xoff);
+ x off INCR 0.1
+ END REP;
+ font size (0.5);
+ font expansion (1.5);
+ move (x + 0.5, y + 0.2); draw (name);
+ font size (0.25);
+ move (x + 0.7, y + 2.10); draw ("Name");
+ move (x + 0.7, y + 1.65); draw ("Vorname");
+ move (x + 0.7, y + 1.20); draw ("Strasse");
+ move (x + 2.1, y + 2.10); draw (": " + t name);
+ move (x + 2.1, y + 1.65); draw (": " + t vorname);
+ move (x + 2.1, y + 1.20); draw (":");
+
+END PROC karteikasten;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/eudas/4.3/doc/abb.4-1 b/app/eudas/4.3/doc/abb.4-1
new file mode 100644
index 0000000..439e052
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.4-1
@@ -0,0 +1,43 @@
+init dgs;
+window (0.0, 0.0, 13.5, 3.2); viewport (0.0,0.0,13.5,3.2);
+(* scale (2.0,2.0,0.0,0.0); *)
+(*clear pixels;*)
+
+font size (0.25);
+font expansion (1.5);
+
+INT VAR i;
+FOR i FROM 0 UPTO 4 REP
+ move (2.0, real (i) * 0.5);
+ draw (10.0, real (i) * 0.5);
+ move (2.1, real (i) * 0.5 + 0.1);
+ draw ("Feld " + code (code ("E") - i));
+END REP;
+move (2.0, 2.5);
+draw (10.0, 2.5);
+move (2.0, 2.5);
+draw (2.0, 0.0);
+move (3.5, 3.0);
+draw (10.0, 3.0);
+FOR i FROM 1 UPTO 4 REP
+ move (2.0 + real (i) * 1.5, 3.0);
+ draw (2.0 + real (i) * 1.5, 0.0);
+ move (2.2 + real (i) * 1.5, 2.6);
+ draw ("Satz " + text (i))
+END REP;
+move (9.5, 3.0);
+draw (9.5, 0.0);
+(*
+pause (1000);
+*)
+
+LET myname = "abb.4-1";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+
+
diff --git a/app/eudas/4.3/doc/abb.4-2 b/app/eudas/4.3/doc/abb.4-2
new file mode 100644
index 0000000..a836def
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.4-2
@@ -0,0 +1,46 @@
+init dgs;
+window (0.0, 0.0, 13.5, 2.0); viewport (0.0,0.0,13.5,2.0);
+(*scale (1.7,1.7,-1.6,0.0);*)
+(*
+clear pixels;
+*)
+
+kasten (1.0, 0.0, 3.0, 1.5);
+kasten (7.0, 0.0, 3.0, 1.5);
+font size (0.4); font expansion (1.5);
+move (1.8, 0.6); draw ("Menü");
+move (7.9, 0.6); draw ("Hilfe");
+move (4.5, 1.0); draw (6.5, 1.0);
+ draw (6.25, 1.25); move (6.5, 1.0); draw (6.25, 0.75);
+move (6.5, 0.5); draw (4.5, 0.5);
+ draw (4.75, 0.75); move (4.5, 0.5); draw (4.75, 0.25);
+font size (0.25);
+move (5.0, 1.1); draw ("ESC '?'");
+move (5.0, 0.6); draw ("ESC 'q'");
+move (10.5, 1.0); draw (11.5, 1.0); draw (11.5, 0.5); draw (10.5, 0.5);
+ draw (10.75, 0.75); move (10.5, 0.5); draw (10.75, 0.25);
+move (11.8, 0.9); draw ("ESC 'w'");
+move (11.8, 0.4); draw ("ESC 'z'");
+
+
+LET myname = "abb.4-2";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (9000);
+*)
+PROC kasten (REAL CONST x anf, y anf, x l, y l) :
+
+ move (x anf, y anf);
+ draw (x anf, y anf + y l);
+ draw (x anf + x l, y anf + y l);
+ draw (x anf + x l, y anf);
+ draw (x anf, y anf)
+
+END PROC kasten;
+
diff --git a/app/eudas/4.3/doc/abb.6-1 b/app/eudas/4.3/doc/abb.6-1
new file mode 100644
index 0000000..fb83242
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.6-1
@@ -0,0 +1,75 @@
+init dgs;
+window (0.0, 0.0, 13.5, 4.0); viewport (0.0,0.0,13.5,4.0);
+(*scale (1.0,1.0, 0.0,0.0);*)
+(*
+clear pixels;
+*)
+
+move (2.25, 1.0); draw (4.75, 1.0);
+move (2.25, 3.0); draw (4.75, 3.0);
+ move (2.5, 1.0); draw (2.5, 3.3);
+ move (3.0, 1.0); draw (3.0, 3.3);
+ move (3.5, 1.0); draw (3.5, 3.3);
+ move (4.0, 1.0); draw (4.0, 3.3);
+ move (4.5, 1.0); draw (4.5, 3.3);
+font size (0.30); font expansion (1.5);
+move (2.6, 3.1); draw ("4");
+move (2.6, 2.0); draw ("M");
+move (3.1, 3.1); draw ("5");
+move (3.1, 2.0); draw ("N");
+move (3.6, 3.1); draw ("6");
+move (3.6, 2.0); draw ("O");
+move (4.1, 3.1); draw ("7");
+move (4.1, 2.0); draw ("P");
+ pfeil (3.75, 0.75);
+
+move (5.0, 2.0); draw (7.0, 2.0); draw (6.75, 2.25);
+ move (7.0, 2.0); draw (6.75, 1.75);
+move (5.0, 2.1); draw ("Einfügen");
+
+move (7.25, 1.0); draw (8.5, 1.0); move (9.0, 1.0); draw (10.25, 1.0);
+move (7.25, 3.0); draw (8.5, 3.0); move (9.0, 3.0); draw (10.25, 3.0);
+ move (7.5, 1.0); draw (7.5, 3.3);
+ move (8.0, 1.0); draw (8.0, 3.3);
+ move (8.5, 1.0); draw (8.5, 3.3);
+ move (9.0, 1.0); draw (9.0, 3.3);
+ move (9.5, 1.0); draw (9.5, 3.3);
+ move (10.0, 1.0); draw (10.0, 3.3);
+move (7.6, 3.1); draw ("4");
+move (7.6, 2.0); draw ("M");
+move (8.1, 3.1); draw ("5");
+move (8.1, 2.0); draw ("N");
+move (8.6, 3.1); draw ("6");
+move (9.1, 3.1); draw ("7");
+move (9.1, 2.0); draw ("O");
+move (9.6, 3.1); draw ("8");
+move (9.6, 2.0); draw ("P");
+
+pfeil (8.75, 0.75);
+
+PROC pfeil (REAL CONST x spitze, y spitze) :
+
+ move (x spitze, y spitze);
+ draw (x spitze + 0.25, y spitze - 0.25);
+ draw (x spitze + 0.1, y spitze - 0.25);
+ draw (x spitze + 0.1, y spitze - 0.5);
+ draw (x spitze - 0.1, y spitze - 0.5);
+ draw (x spitze - 0.1, y spitze - 0.25);
+ draw (x spitze - 0.25, y spitze - 0.25);
+ draw (x spitze, y spitze)
+
+END PROC pfeil;
+
+
+LET myname = "abb.6-1";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (9000)
+*)
+
diff --git a/app/eudas/4.3/doc/abb.6-2 b/app/eudas/4.3/doc/abb.6-2
new file mode 100644
index 0000000..7771a29
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.6-2
@@ -0,0 +1,77 @@
+init dgs;
+window (0.0, 0.0, 13.5, 5.0); viewport (0.0,0.0,13.5,5.0);
+(*scale (1.4,1.4, 0.0,0.0);*)
+(*clear pixels;*)
+
+move (2.5, 4.5); draw (12.4, 4.5); draw (12.4, 4.0); draw (11.0, 4.0);
+ draw (11.0, 3.5); move (10.5, 3.5); draw (10.5, 4.0); draw (2.5, 4.0);
+move (13.5, 4.5); draw (12.5, 4.5); draw (12.5, 3.5); move (13.0, 3.5);
+ draw (13.0, 4.0); draw (13.5, 4.0);
+move (2.5, 3.5); draw (13.5, 3.5); move (13.5, 3.0); draw (10.0, 3.0);
+ draw (10.0, 2.5); move (9.5, 2.5); draw (9.5, 3.0); draw (2.5, 3.0);
+move (10.5, 3.0); draw (10.5, 2.5); move (11.0, 2.5); draw (11.0, 3.0);
+move (12.5, 2.5); draw (12.5, 3.0); move (13.0, 3.0); draw (13.0, 2.5);
+move (2.5, 2.5); draw (6.4, 2.5); draw (6.4, 2.0); draw (4.0, 2.0);
+ draw (4.0, 1.5); draw (6.5, 1.5); draw (6.5, 2.5); draw (13.5, 2.5);
+ move (13.5, 2.0); draw (7.0, 2.0); draw (7.0, 1.5); draw (9.0, 1.5);
+ draw (9.0, 1.0); draw (3.5, 1.0); draw (3.5, 2.0); draw (2.5, 2.0);
+move (9.5, 2.0); draw (9.5, 1.0); draw (10.4, 1.0); draw (10.4, 1.5);
+ draw (10.0, 1.5); draw (10.0, 2.0);
+move (10.5, 2.0); draw (10.5, 1.0); draw (13.0, 1.0); draw (13.0, 2.0);
+ move (11.0, 2.0); draw (11.0, 1.5); draw (12.5, 1.5); draw (12.5, 2.0);
+move (4.5, 1.5); draw (4.75, 1.25); draw (4.5, 1.0);
+move (5.5, 1.5); draw (5.75, 1.25); draw (5.5, 1.0);
+move (7.5, 1.5); draw (7.75, 1.25); draw (7.5, 1.0);
+move (11.5, 1.5); draw (11.75, 1.25); draw (11.5, 1.0);
+
+font size (0.25); font expansion (1.4);
+move (2.5, 4.1); draw ("K0");
+move (2.5, 3.1); draw ("N0");
+move (2.5, 2.1); draw ("A0");
+
+move (0.0, 4.1); draw ("'Kalender'");
+move (0.0, 3.1); draw ("'Namen'");
+move (0.0, 2.1); draw ("'Adressen'");
+move (0.0, 1.1); draw ("Arbeitskopie");
+
+move (4.9, 1.1); draw ("A1");
+move (5.9, 1.1); draw ("A2");
+move (7.9, 1.1); draw ("A3");
+move (11.9, 1.1); draw ("K1");
+
+x alignment (right);
+move (13.5, 4.1); draw ("K1");
+move (13.5, 3.1); draw ("N0");
+move (13.5, 2.1); draw ("A2");
+
+x alignment (normal);
+font size (0.2);
+INT VAR i;
+FOR i FROM 0 UPTO 10 REP
+ time (2.5 + real (i) * 1.0, i)
+END REP;
+
+PROC time (REAL CONST x pos, INT CONST nr) :
+
+ move (x pos, 4.9); draw (x pos, 4.6);
+ move (x pos, 3.9); draw (x pos, 3.6);
+ move (x pos, 2.9); draw (x pos, 2.6);
+ move (x pos, 1.9); draw (x pos, 1.6);
+ move (x pos, 0.9); draw (x pos, 0.6);
+ move (x pos + 0.1, 0.6); draw (text (nr))
+
+END PROC time;
+
+
+LET myname = "abb.6-2";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (9000);
+*)
+
diff --git a/app/eudas/4.3/doc/abb.7-1 b/app/eudas/4.3/doc/abb.7-1
new file mode 100644
index 0000000..3536ad9
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.7-1
@@ -0,0 +1,46 @@
+init dgs;
+window (0.0, 0.0, 13.5, 6.0); viewport (0.0,0.0,13.5,6.0);
+(*scale (1.7,1.7, 0.0,0.0);*)
+(*clear pixels;*)
+
+kasten (5.0, 4.5, 3.0, 1.0);
+kasten (5.0, 1.5, 3.0, 1.0);
+kasten (1.5, 3.0, 3.0, 1.0);
+font size (0.35); font expansion (1.5);
+x alignment (center);
+move (6.5, 4.8); draw ("Druckmuster");
+move (6.5, 1.8); draw ("Druckdatei");
+move (3.0, 3.3); draw ("EUDAS-Datei");
+move (6.5, 0.0); draw ("Drucker");
+
+move (6.5, 4.25); draw (6.5, 2.75); draw (6.25, 3.0);
+ move (6.5, 2.75); draw (6.75, 3.0);
+move (4.75, 3.5); draw (6.25, 3.5); draw (6.0, 3.75);
+ move (6.25, 3.5); draw (6.0, 3.25);
+move (6.5, 1.25); draw (6.5, 0.5); draw (6.75, 0.75);
+ move (6.5, 0.5); draw (6.25, 0.75);
+
+
+PROC kasten (REAL CONST x anf, y anf, x l, y l) :
+
+ move (x anf, y anf);
+ draw (x anf, y anf + y l);
+ draw (x anf + x l, y anf + y l);
+ draw (x anf + x l, y anf);
+ draw (x anf, y anf)
+
+END PROC kasten;
+
+
+LET myname = "abb.7-1";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (9000);
+*)
+
diff --git a/app/eudas/4.3/doc/abb.9-1 b/app/eudas/4.3/doc/abb.9-1
new file mode 100644
index 0000000..774b78b
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.9-1
@@ -0,0 +1,41 @@
+init dgs;
+window (0.0, 0.0, 13.5, 4.0); viewport (0.0,0.0,13.5,4.0);
+(*scale (1.7,1.7, 0.0,0.0);*)
+(*clear pixels;*)
+
+move (1.5, 1.0); draw (8.75, 1.0);
+move (1.5, 3.5); draw (8.75, 3.5);
+INT VAR i;
+FOR i FROM 0 UPTO 9 REP
+ move (1.75 + real (i) * 0.75, 3.7);
+ draw (1.75 + real (i) * 0.75, 1.0);
+END REP;
+
+move (4.7, 3.7); draw (4.7, 1.0);
+
+font size (0.25); font expansion (1.5);
+x alignment (center);
+FOR i FROM 0 UPTO 8 REP
+ move (2.125 + real (i) * 0.75, 3.6); draw (text (i + 110))
+END REP;
+FOR i FROM 1 UPTO 5 REP
+ move (2.125 + real (i + 3) * 0.75, 0.6); draw ("(" + text (i) + ")")
+END REP;
+
+font size (0.35); x alignment (left);
+move (2.0, 0.0); draw ("Datei A");
+move (5.0, 0.0); draw ("Datei B");
+
+
+LET myname = "abb.9-1";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (9000)
+*)
+
diff --git a/app/eudas/4.3/doc/abb.9-2 b/app/eudas/4.3/doc/abb.9-2
new file mode 100644
index 0000000..4e9444d
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.9-2
@@ -0,0 +1,96 @@
+init dgs;
+window (0.0, 0.0, 13.5, 6.5); viewport (0.0,0.0,13.5,6.5);
+(*scale (1.7,1.7, 0.0,0.0);*)
+(*clear pixels;*)
+
+INT VAR i;
+move (4.0, 0.0); draw (4.0, 2.0);
+move (5.5, 0.0); draw (5.5, 2.0);
+FOR i FROM 0 UPTO 4 REP
+ move (4.0, real (i) * 0.5);
+ draw (5.5, real (i) * 0.5)
+END REP;
+
+move (4.0, 3.0); draw (4.0, 6.0);
+move (5.5, 3.0); draw (5.5, 6.0);
+FOR i FROM 0 UPTO 6 REP
+ move (4.0, real (i) * 0.5 + 3.0);
+ draw (5.5, real (i) * 0.5 + 3.0)
+END REP;
+
+move (7.5, 2.0); draw (7.5, 6.0);
+move (9.0, 2.0); draw (9.0, 6.0);
+FOR i FROM 0 UPTO 8 REP
+ move (7.5, real (i) * 0.5 + 2.0);
+ draw (9.0, real (i) * 0.5 + 2.0)
+END REP;
+
+strichel (5.5, 6.0, 7.5, 6.0);
+strichel (5.5, 3.0, 7.5, 3.0);
+strichel (5.5, 1.0, 7.5, 3.0);
+strichel (5.5, 0.0, 7.5, 2.0);
+
+move (5.5, 4.75); draw (6.0, 4.75);
+ draw (6.0, 1.75); draw (5.5, 1.75);
+move (4.0, 3.75); draw (3.5, 3.75);
+ draw (3.5, 1.25); draw (4.0, 1.25);
+
+font size (0.4); font expansion (1.5);
+move (0.0, 0.8); draw ("Koppeldatei");
+move (0.0, 4.3); draw ("Hauptdatei");
+move (10.0, 4.3); draw ("virtuelle");
+move (10.0, 3.4); draw ("Datei");
+
+font size (0.3);
+move (4.5, 0.1); draw ("H2");
+move (4.5, 0.6); draw ("H1");
+move (4.5, 1.1); draw ("B");
+move (4.5, 1.6); draw ("A");
+move (4.5, 3.1); draw ("F4");
+move (4.5, 3.6); draw ("B");
+move (4.5, 4.1); draw ("F3");
+move (4.5, 4.6); draw ("A");
+move (4.5, 5.1); draw ("F2");
+move (4.5, 5.6); draw ("F1");
+move (8.0, 5.6); draw ("F1");
+move (8.0, 5.1); draw ("F2");
+move (8.0, 4.6); draw ("A");
+move (8.0, 4.1); draw ("F3");
+move (8.0, 3.6); draw ("B");
+move (8.0, 3.1); draw ("F4");
+move (8.0, 2.6); draw ("H1");
+move (8.0, 2.1); draw ("H2");
+
+PROC strichel (REAL CONST x anf, y anf, x end, y end) :
+
+ REAL VAR laenge := x end - x anf;
+ INT VAR teile := int (abstand/ 0.4);
+ REAL VAR verhaeltnis := (y end - y anf) / laenge;
+ laenge := laenge / (real (2 * teile + 1));
+ INT VAR i;
+ FOR i FROM 0 UPTO teile REP
+ move (x anf + real (i + i) * laenge,
+ y anf + verhaeltnis * real (i + i) * laenge);
+ draw (x anf + real (i + i + 1) * laenge,
+ y anf + verhaeltnis * real (i + i + 1) * laenge)
+ END REP .
+
+abstand :
+ sqrt ((y end - y anf) + (y end - y anf) +
+ (x end - x anf) * (x end - x anf)) .
+
+END PROC strichel;
+
+
+LET myname = "abb.9-2";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (9000);
+*)
+
diff --git a/app/eudas/4.3/doc/abb.9-3 b/app/eudas/4.3/doc/abb.9-3
new file mode 100644
index 0000000..9b190ab
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.9-3
@@ -0,0 +1,113 @@
+init dgs;
+window (0.0, 0.0, 13.5, 7.0); viewport (0.0,0.0,13.5,7.0);
+(*scale (1.7,1.7, 0.0,0.0);*)
+(*clear pixels;*)
+
+x alignment (center);
+font size (0.3); font expansion (1.2);
+kasten (1.5, 5.0, 2.0, 1.5);
+move (2.5, 5.9); draw ("EUDAS-");
+move (2.5, 5.3); draw ("Datei 1");
+move (3.5, 5.75); draw (4.0, 5.75);
+kasten (4.0, 5.0, 2.0, 1.5);
+move (5.0, 5.9); draw ("gekettete");
+move (5.0, 5.3); draw ("Datei A");
+move (6.0, 5.75); draw (6.5, 5.75);
+kasten (6.5, 5.0, 2.0, 1.5);
+move (7.5, 5.9); draw ("gekettete");
+move (7.5, 5.3); draw ("Datei B");
+kasten (1.5, 2.0, 2.0, 1.5);
+move (2.5, 2.9); draw ("gekoppelte");
+move (2.5, 2.3); draw ("Datei C");
+kasten (4.0, 0.0, 2.0, 1.5);
+move (5.0, 0.9); draw ("gekoppelte");
+move (5.0, 0.3); draw ("Datei D");
+
+punkt (9.0, 5.75);
+punkt (9.25, 5.75);
+punkt (9.5, 5.75);
+
+strichel (1.0, 4.5, 10.0, 4.5);
+strichel (1.0, 7.0, 10.0, 7.0);
+strichel (1.0, 4.5, 1.0, 7.0);
+x alignment (right); font size (0.4);
+move (10.0, 3.9);
+draw ("Hauptdatei");
+
+punkt (2.5, 3.75);
+punkt (2.5, 4.0);
+punkt (2.5, 4.25);
+
+punkt (5.0, 1.75);
+punkt (5.0, 2.0);
+punkt (5.0, 2.25);
+punkt (5.0, 2.5);
+punkt (5.0, 2.75);
+punkt (5.0, 3.0);
+punkt (5.0, 3.25);
+punkt (5.0, 3.5);
+punkt (5.0, 3.75);
+punkt (5.0, 4.0);
+punkt (5.0, 4.25);
+
+PROC punkt (REAL CONST x pos, y pos) :
+
+ LET p size = 0.025;
+ move (x pos, y pos + p size);
+ draw (x pos + p size, y pos);
+ draw (x pos, y pos - p size);
+ draw (x pos - p size, y pos);
+ draw (x pos, y pos + p size)
+
+END PROC punkt;
+
+
+PROC strichel (REAL CONST x anf, y anf, x end, y end) :
+
+ REAL VAR laenge := x end - x anf;
+ INT VAR teile := int (abstand/ 0.4);
+ REAL VAR senkrecht, verhaeltnis;
+ IF laenge <> 0.0 THEN
+ verhaeltnis := (y end - y anf) / laenge; senkrecht := 1.0
+ ELSE
+ verhaeltnis := 1.0; senkrecht := 0.0 ;
+ laenge := y end - y anf
+ END IF;
+ laenge := laenge / (real (2 * teile + 1));
+ INT VAR i;
+ FOR i FROM 0 UPTO teile REP
+ move (x anf + real (i + i) * laenge * senkrecht,
+ y anf + verhaeltnis * real (i + i) * laenge);
+ draw (x anf + real (i + i + 1) * laenge * senkrecht,
+ y anf + verhaeltnis * real (i + i + 1) * laenge)
+ END REP .
+
+abstand :
+ sqrt ((y end - y anf) * (y end - y anf) +
+ (x end - x anf) * (x end - x anf)) .
+
+END PROC strichel;
+
+PROC kasten (REAL CONST x anf, y anf, x l, y l) :
+
+ move (x anf, y anf);
+ draw (x anf, y anf + y l);
+ draw (x anf + x l, y anf + y l);
+ draw (x anf + x l, y anf);
+ draw (x anf, y anf)
+
+END PROC kasten;
+
+
+LET myname = "abb.9-3";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (9000)
+*)
+
diff --git a/app/eudas/4.3/doc/abb.9-4 b/app/eudas/4.3/doc/abb.9-4
new file mode 100644
index 0000000..e243265
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.9-4
@@ -0,0 +1,98 @@
+init dgs;
+window (0.0, 0.0, 13.5, 6.0); viewport (0.0,0.0,13.5,6.0);
+(*scale (1.7,1.7, 0.0,0.0);*)
+(*clear pixels;*)
+
+kasten (2.0, 1.0, 1.4, 2.0);
+kasten (3.5, 1.0, 1.4, 2.0);
+kasten (6.5, 1.0, 1.4, 2.0);
+kasten (2.0, 3.4, 1.4, 2.0);
+kasten (5.0, 3.4, 1.4, 2.0);
+kasten (6.5, 3.4, 1.4, 2.0);
+ strichel (3.5, 3.4, 3.5, 5.4);
+ strichel (3.5, 5.4, 4.9, 5.4);
+ strichel (4.9, 5.4, 4.9, 3.4);
+ strichel (4.9, 3.4, 3.5, 3.4);
+move (1.9, 2.7); draw (1.5, 2.7);
+draw (1.5, 4.6); draw (1.9, 4.6);
+
+x alignment (center);
+font size (0.3); font expansion (1.4);
+
+move (2.7, 5.6); draw ("22-1");
+move (2.7, 4.9); draw ("X");
+move (2.7, 4.4); draw ("K");
+move (2.7, 2.5); draw ("K");
+move (2.7, 2.0); draw ("N1");
+move (2.7, 0.4); draw ("(114)");
+
+move (4.2, 5.6); draw ("22-2");
+move (4.2, 4.9); draw ("X");
+move (4.2, 4.4); draw ("K");
+move (4.2, 2.5); draw ("K");
+move (4.2, 2.0); draw ("N2");
+move (4.2, 0.4); draw ("(209)");
+
+move (5.7, 5.6); draw ("23-1");
+move (5.7, 4.9); draw ("Y");
+move (5.7, 4.4); draw ("L");
+
+move (7.2, 5.6); draw ("24-1");
+move (7.2, 4.9); draw ("Z");
+move (7.2, 4.4); draw ("M");
+move (7.2, 2.5); draw ("M");
+move (7.2, 0.4); draw ("(17)");
+
+font size (0.4); x alignment (normal);
+move (8.5, 2.0); draw ("Koppeldatei");
+move (8.5, 4.4); draw ("Hauptdatei");
+
+PROC strichel (REAL CONST x anf, y anf, x end, y end) :
+
+ REAL VAR laenge := x end - x anf;
+ INT VAR teile := int (abstand/ 0.4);
+ REAL VAR senkrecht, verhaeltnis;
+ IF laenge <> 0.0 THEN
+ verhaeltnis := (y end - y anf) / laenge; senkrecht := 1.0
+ ELSE
+ verhaeltnis := 1.0; senkrecht := 0.0 ;
+ laenge := y end - y anf
+ END IF;
+ laenge := laenge / (real (2 * teile + 1));
+ INT VAR i;
+ FOR i FROM 0 UPTO teile REP
+ move (x anf + real (i + i) * laenge * senkrecht,
+ y anf + verhaeltnis * real (i + i) * laenge);
+ draw (x anf + real (i + i + 1) * laenge * senkrecht,
+ y anf + verhaeltnis * real (i + i + 1) * laenge)
+ END REP .
+
+abstand :
+ sqrt ((y end - y anf) * (y end - y anf) +
+ (x end - x anf) * (x end - x anf)) .
+
+END PROC strichel;
+
+PROC kasten (REAL CONST x anf, y anf, x l, y l) :
+
+ move (x anf, y anf);
+ draw (x anf, y anf + y l);
+ draw (x anf + x l, y anf + y l);
+ draw (x anf + x l, y anf);
+ draw (x anf, y anf)
+
+END PROC kasten;
+
+
+LET myname = "abb.9-4";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (9000)
+*)
+
diff --git a/app/eudas/4.3/doc/abb.9-5 b/app/eudas/4.3/doc/abb.9-5
new file mode 100644
index 0000000..c00655c
--- /dev/null
+++ b/app/eudas/4.3/doc/abb.9-5
@@ -0,0 +1,51 @@
+init dgs;
+window (0.0, 0.0, 13.5, 7.0); viewport (0.0,0.0,13.5,7.0);
+(*scale (1.7,1.7, 0.0,0.0);*)
+(*clear pixels;*)
+
+kasten (1.5, 0.0, 3.5, 2.0);
+kasten (7.0, 0.0, 3.5, 2.0);
+kasten (4.0, 4.0, 4.0, 3.0);
+ kasten (5.0, 5.5, 2.0, 1.0);
+
+move (3.25, 2.25); draw (4.75, 3.75);
+ draw (4.5, 3.75); move (4.75, 3.75); draw (4.75, 3.5);
+ move (3.25, 2.25); draw (3.5, 2.25);
+ move (3.25, 2.25); draw (3.25, 2.5);
+move (8.75, 2.25); draw (7.25, 3.75);
+ draw (7.5, 3.75); move (7.25, 3.75); draw (7.25, 3.5);
+ move (8.75, 2.25); draw (8.5, 2.25);
+ move (8.75, 2.25); draw (8.75, 2.5);
+
+x alignment (center);
+font size (0.4); font expansion (1.4);
+
+move (3.25, 0.2); draw ("Benutzer A");
+move (8.75, 0.2); draw ("Benutzer B");
+move (6.0, 4.3); draw ("Manager");
+font size (0.3);
+move (6.0, 5.6); draw ("Kunden");
+
+PROC kasten (REAL CONST x anf, y anf, x l, y l) :
+
+ move (x anf, y anf);
+ draw (x anf, y anf + y l);
+ draw (x anf + x l, y anf + y l);
+ draw (x anf + x l, y anf);
+ draw (x anf, y anf)
+
+END PROC kasten;
+
+
+LET myname = "abb.9-5";
+save pixels (myname + ".p");
+FILE VAR f := sequential file (modify, myname + ".p");
+to line (f, 1); insert record (f);
+write record (f, "#linefeed (0.8)#");
+insert record (f); write record (f, myname);
+to eof (f); insert record (f); write record (f, myname);
+to line (f, 1);
+(*
+pause (9000)
+*)
+
diff --git a/app/eudas/4.3/doc/bildergenerator b/app/eudas/4.3/doc/bildergenerator
new file mode 100644
index 0000000..8129476
--- /dev/null
+++ b/app/eudas/4.3/doc/bildergenerator
@@ -0,0 +1,25 @@
+PROC starten :
+
+ command dialogue (FALSE);
+ disable stop;
+ fetch (name, /"DGS NEC");
+ run (name);
+ save (name + ".p", /"DGS NEC");
+ end (myself)
+
+END PROC starten;
+
+TEXT VAR name;
+
+PROC gen (TEXT CONST t) :
+
+ name := t;
+ begin ("p", PROC starten, a);
+ TASK VAR a;
+ WHILE exists (a) REP pause (100) END REP
+
+END PROC gen;
+
+gen ("abb.4-2");
+gen ("abb.6-1");
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.1 b/app/eudas/4.3/doc/eudas.hdb.1
new file mode 100644
index 0000000..40b5a84
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.1
@@ -0,0 +1,267 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (3)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+#center##on("b")#"Was kann EUDAS ?
+
+
+
+In diesem Kapitel wollen wir Ihnen erklären, was EUDAS Ihnen ei­
+gentlich bringen soll. Sie arbeiten sicher nicht nur aus Spaß am
+Computer, sondern wollen ihn für bestimmte Aufgaben einsetzen. Ein
+Computer kann bestimmte Aufgaben nur dann bearbeiten, wenn er
+dafür programmiert worden ist.
+ EUDAS ist nun ein Programm, das allgemein Aufgaben der Da­
+tenverwaltung lösen kann. Zunächst wollen wir Ihnen erläutern,
+wodurch dieses Anwendungsgebiet genau charakterisiert wird.
+
+
+1.1 Textverarbeitung und Datenverwaltung
+
+Es gibt zwei Einsatzbereiche des Computers, die von fast jedem An­
+wender benötigt werden, egal auf welchem Spezialgebiet er tätig ist:
+nämlich die #on("i")#Textverarbeitung#off("i")# und die #on("i")#Datenverwaltung#off("i")#. Durch die
+Unterscheidung dieser beiden Bereiche werden die charakteristi­
+schen Merkmale der Datenverwaltung abgegrenzt.
+
+#on("b")#Textverarbeitung#off("b")# Die Textverarbeitung befaßt sich damit,
+einen beliebigen Text auf einem Rechner zu erfassen und anschließend
+über einen Drucker wieder auszugeben. Der Sinn dieser Arbeit liegt
+darin, daß man einen einmal eingegebenen Text sehr einfach ändern
+kann. Außerdem kann der Computer einige unangenehme Aufgaben
+übernehmen, die beim Schreiben von Texten auftreten: die Auftei­
+lung auf Zeilen und Seiten, die Seitennumerierung und vieles mehr.
+ Charakteristisch für die Textverarbeitung ist, daß der Einfluß
+des Computers sich auf kosmetische Details beschränkt. Die Spei­
+cherung und eventuelle Aufbereitung zum Drucken haben praktisch
+nichts mit dem Inhalt des Textes zu tun. Dies wäre für den Rechner
+auch sehr schwierig, da die im Text enthaltenen Informationen in
+menschlicher Sprache vorliegen, die für einen Rechner nicht ver­
+ständlich ist.
+
+#on("b")#Datenverwaltung#off("b")# Bei der Datenverwaltung werden ebenfalls
+textuelle Informationen gespeichert, diese liegen aber in einer aufberei­
+teten Form vor, die einen Teil des Inhalts für den Computer ver­
+ständlich macht. Bei der Datenverwaltung werden Objekte betrach­
+tet, die verschiedene Eigenschaften haben können. Ein solches
+Objekt kann z.B. eine Person sein. Als Eigenschaften werden mit
+dieser Person zusammenhängende Informationen betrachetet, die für
+die jeweilige Anwendung wichtig sind.
+ Ein Beispiel für eine solche Betrachtungsweise ist der Arbeit­
+nehmer im Betrieb. Einige der typischerweise erfaßten Daten sind
+Name, Adresse, Telefon, Geburtsdatum und Geschlecht. Alle diese
+Daten sind Eigenschaften oder #on("i")#Attribute#off("i")#, die einem bestimmten
+Menschen mehr oder weniger fest zugeordnet sind.
+ Die Betonung inhaltlicher Beziehungen erleichtert es dem Com­
+puter, die gespeicherten Daten in verschiedenen Variationen aus­
+zuwerten.
+
+#on("b")#Beispiel#off("b")# Um die Unterscheidung zwischen Textverarbeitung
+und
+Datenverwaltung deutlicher zu machen, werden im folgenden Bei­
+spiel die Informationen über eine Person in zwei unterschiedlichen
+Formen dargeboten, die für den Menschen die gleiche Aussagekraft
+haben:
+
+ 1. Frau Magdalene Kant, geb. Hagedorn, wurde am 12. Januar
+ 1946 geboren. Sie wohnt in Bonn in der Meckenheimer Allee
+ 112. Seit 1977 arbeitet sie in unserer Firma. Sie ist tele­
+ fonisch erreichbar unter der Nummer 0228/356782.
+
+ 2. Name: Magdalene
+ Vorname: Kant
+ Geburtsname: Hagedorn
+ Geburtsdatum: 12.01.46
+ Geschlecht: weiblich
+ Strasse: Meckenheimer Allee 112
+ PLZ: 5200
+ Wohnort: Bonn 1
+ Vorwahl: 0228
+ Telefon: 356782
+ beschäftigt seit: 1977
+
+Die Form der Darstellung wie in der ersten Alternative eignet sich
+nur für den Menschen, da die gleiche Information auf viele ver­
+schiedene Weisen ausgedrückt werden könnte (z.B. unterschiedlicher
+Satzbau). Die zweite Alternative beschränkt sich auf die für die
+bestimmte Anwendung wesentlichen Zusammenhänge; der Computer
+kann die Aufteilung der Information in einzelne Attribute ausnut­
+zen.
+ In dieser zweiten Form können Sie Daten mit EUDAS erfassen
+und auch auswerten. Die Attribute können Sie jeweils passend zu
+den erfaßten Daten selbst bestimmen.
+ Für Daten in der ersten Form steht Ihnen die EUMEL-Textver­
+arbeitung zur Verfügung. EUDAS wurde so entwickelt, daß Sie auch
+Daten an die Textverarbeitung übergeben können.
+ Es ist nämlich möglich, einen freien Text aus der Attributdar­
+stellung automatisch zu erzeugen, indem Sie dem Computer den
+Satzbau mit entsprechenden Platzhaltern vorgeben. Der Rechner
+setzt die einzelnen Attribute dann an die angegebenen Stellen.
+Diese Funktion ist ein Kernstück von EUDAS und wird in Abschnitt
+1.3 näher erläutert.
+
+
+1.2 EUDAS als Karteikasten
+
+Wie Sie vielleicht schon bemerkt haben, ähnelt die zweite Form der
+Darstellung einer Karteikarte, auf der Platz für bestimmte Einträge
+freigehalten wird. Anhand dieses Modells können Sie sich in vielen
+Fällen die Arbeitsweise von EUDAS veranschaulichen. Sie sollten die
+Analogie allerdings nicht zu weit treiben: EUDAS schaufelt ja nicht
+wirklich mit Karteikarten herum. Manche Funktionen sind eben
+computerspezifisch und ließen sich mit Karteikarten gar nicht
+durchführen.
+ Mit EUDAS können Sie die möglichen Einträge auf den Karteikar­
+ten (also die Attribute) völlig frei bestimmen; die einzige Beschrän­
+kung besteht darin, daß Sie in einem Karteikasten nur Karten mit
+völlig gleichem Aufbau verwenden können. Wenn Sie eine neue Kar­
+teikarte entwerfen wollen, brauchen Sie nur Namen für die einzel­
+nen Einträge anzugeben. EUDAS zeigt Ihnen dann quasi eine Karte
+am Bildschirm, in der diese Einträge aufgeführt sind.
+ Sie können nun am Bildschirm Daten auf diese Karteikarten
+schreiben. Dabei dürfen die Einträge fast beliebig lang sein; wenn
+der Platz auf dem Bildschirm nicht reicht, können Sie sich Ihre
+überdimensionale Karteikarte in Ausschnitten ansehen.
+ Die einmal eingegebenen Daten bleiben nun so lange gespei­
+chert, wie Sie wollen (bzw. bis Ihr Rechner zusammenfällt). Haben
+Sie beim Eintragen Fehler gemacht, können Sie diese jederzeit kor­
+rigieren oder später noch weitere Informationen ergänzen.
+
+#free (7.5)#
+
+#center#Abb. 1-1 EUDAS als Karteikasten
+
+
+#on("b")#Anwendungen#off("b")# Mit den gespeicherten Daten können Sie nun
+ver­
+schiedene Dinge anstellen (bzw. vom Rechner anstellen lassen). Das
+Einfachste ist natürlich das, was Sie mit einer Kartei auch machen
+würden, sich nämlich einzelne Karteikarten anzuschauen.
+ Um eine bestimmte Karteikarte herauszufinden, geben Sie
+EUDAS einfach den Inhalt vor, nach dem gesucht werden soll. Hier
+zeigt sich bereits der erste Vorteil eines Computers: Die Suche in
+der EUDAS-Kartei ist viel schneller, als Sie es von Hand könnten.
+Außerdem kann der Rechner keine Karte zufällig übersehen.
+ EUDAS zeigt sich auch dann überlegen, wenn Sie einen ganz
+bestimmten Teil der Kartei durchforsten müssen. Eine Bücherei muß
+z.B. regelmäßig alle Bücher heraussuchen, deren Leihfrist über­
+schritten ist. Der Computer durchsucht in solchen Fällen ermü­
+dungsfrei auch große Datenmengen.
+ Wenn Sie die Karteikarten in einer bestimmten Reihenfolge
+haben wollen, kann EUDAS auch das Sortieren übernehmen. Weitere
+automatische Vorgänge betreffen z.B. das Rauswerfen überflüssiger
+oder veralteter Karten. Die Einträge können auch nach einer be­
+stimmten Vorschrift alle geändert werden. Solche Aufgaben treten
+z.B. in der Schule auf, wo die Schüler jedes Jahr versetzt werden
+müssen (natürlich bis auf Ausnahmen).
+ Auch Beziehungen zwischen verschiedenen Karteien kann
+EUDAS herstellen. Dies kann man noch einmal an dem Beispiel der
+Bücherei illustrieren. Wenn ein Buch gefunden wurde, dessen Leih­
+frist überschritten ist, muß der zugehörige Ausleiher gefunden und
+angeschrieben werden. Das Heraussuchen beider Karten kann EUDAS
+in einem Arbeitsgang durchführen.
+
+
+1.3 Drucken
+
+Eine besondere Stärke von EUDAS ist die Möglichkeit, die gespei­
+cherten Daten in schriftlicher Form auszuwerten. Dadurch, daß die
+Daten in einer Form gespeichert sind, die den Inhalt widerspiegelt,
+können die gleichen Daten in vielen verschiedenen Formen auf
+Papier ausgegeben werden.
+
+
+
+
+ Karl Eudas
+ An Poltersdorf
+ XXXXXXXXXXX
+ XXXXXXXXXXX
+
+ XXXX XXXXXXXXXXXX
+
+ Lieber XXXXXXX !
+
+ Dies ist ein Beispiel für ein
+ Druckmuster.
+
+ Viele Grüße
+
+
+
+#center#Abb. 1-2 Muster für die Druckausgabe
+
+
+Zu diesem Zweck geben Sie EUDAS ein Muster des gewünschten Aus­
+drucks vor. Der Rechner setzt dann an entsprechend markierten
+Leerstellen die gespeicherten Informationen ein und druckt das
+Ergebnis aus. Auf diese Weise ersparen Sie sich die umfangreiche
+Schreibarbeit, die anfällt, wenn die Informationen auf den Kartei­
+karten in anderer Form benötigt werden.
+ Natürlich müssen Sie zum Entwerfen des Formulars kein ge­
+wiefter Programmierer sein. Wenn Sie einen Rundbrief verschicken
+wollen, schreiben Sie den Brief, als wollten Sie Ihn nur einmal
+schicken. Lediglich im Adressfeld müssen Sie Platzhalter an den
+Stellen vorsehen, an denen später die wirklichen Adressen stehen
+sollen.
+
+#on("b")#Verwendungsmöglichkeiten#off("b")# Die Möglichkeiten für solche
+Formulare
+sind unbegrenzt. Beispiele sind Briefe, Adreßaufkleber, Überwei­
+sungsaufträge und sortierte Listen. Mit den Inhalten einer Kartei
+können Sie beliebig viele verschiedene Ausgaben erzeugen. Bei dem
+obigen Beispiel der Leihbücherei könnten Sie EUDAS dazu einsetzen,
+nicht nur die säumigen Ausleiher herauszufinden, sondern die Mah­
+nung gleich fertig für einen Fensterbriefumschlag herzustellen. Für
+den Bediener bliebe die einzige Tätigkeit, diesen Vorgang anzuwer­
+fen.
+ Wie weiter oben schon erwähnt, können Sie diese Ausgaben von
+EUDAS auch zur Textverarbeitung übernehmen. So können Sie zum
+Beispiel die Literaturliste für ein Buch mit EUDAS führen und Aus­
+züge später jeweils an die passenden Stellen einfügen.
+
+#on("b")#Berechnungen#off("b")# Die Druckfunktion von EUDAS kann jedoch nicht
+nur
+zum Ausfüllen von Formularen verwendet werden. Wenn Sie Berech­
+nungen anstellen oder Auswertungen vornehmen wollen, können Sie
+im Druckmuster auch Anweisungen der Sprache ELAN verwenden.
+Damit haben Sie eine komplette Programmiersprache für Ihre Muster
+zur Verfügung.
+ Ehe Sie einen Schreck bekommen: Selbst für komplizierte Muster
+brauchen Sie nur einen ganz kleinen Teil von ELAN zu beherrschen,
+da die meiste Arbeit immer von EUDAS übernommen wird (Sie müssen
+also nicht etwa selber ein ganzes Programm schreiben).
+ Anwendungen für diese Möglichkeit gibt es genug. Angefangen
+von einfachen Zählungen bis hin zu statistischen Auswertungen,
+von einfachen Summen bis zum kompletten Rechnungsschreiben.
+Immer nimmt Ihnen EUDAS alles das ab, was automatisch ablaufen
+kann. Sie versorgen EUDAS nur noch mit den passenden Formeln für
+Ihre Anwendung.
+
+
+1.4 Grenzen
+
+Natürlich können Sie nicht alle Probleme mit EUDAS gleichermaßen
+gut lösen. EUDAS verwendet ein einfaches Modell (Karteikasten) und
+versucht, mit möglichst wenig Informationen von Ihrer Seite auszu­
+kommen. Kompliziertere Sachverhalte verlangen auch kompliziertere
+Strukturen, die Sie dann selbst entwerfen müssen. Eine einfache
+Lösung mit EUDAS kann in solchen Fällen zu langsam oder zu um­
+ständlich sein.
+ Wenn Sie jedoch die wenigen Strukturprinzipien von EUDAS
+verstanden haben, werden Sie sehr schnell viele Probleme mit
+EUDAS lösen können. Zuerst erfassen Sie einfach alle Daten, die Sie
+brauchen und überlegen sich erst dann, in welcher Form Sie diese
+Daten haben wollen. Auch nachträglich können Sie jederzeit noch
+neue Daten und Formulare hinzufügen, so daß Sie mit der Zeit
+EUDAS gewinnbringend für viele Routineaufgaben benutzen werden.
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.10 b/app/eudas/4.3/doc/eudas.hdb.10
new file mode 100644
index 0000000..442f575
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.10
@@ -0,0 +1,510 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (97)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+10 Datenabfrage am Bildschirm
+
+
+
+10.1 Feldauswahl
+
+Da die Anzahl der möglichen Felder bei EUDAS-Dateien viel größer
+ist als die Anzahl der zur Verfügung stehenden Zeilen auf dem
+Bildschirm (255 gegenüber 22), muß es eine Möglichkeit geben, auch
+die übrigen Felder anzusehen.
+
+#on("b")#Rollen#off("b")# Dazu kann man den Bildschirmausschnitt in
+vertikaler
+Richtung #on("i")#rollen#off("i")#. Sie müssen sich die Bildschirmanzeige als einen
+Ausschnitt des wirklichen Satzes vorstellen. Um weitere Inhalte des
+Satzes zu sehen, verschieben Sie den Ausschnitt einfach.
+ Dazu dienen die beiden Tastenkombinationen ESC OBEN und ESC
+UNTEN. Diese Kombinationen wirken nur im Menü "Einzelsatz". An
+der Bildschirmanzeige ändert sich natürlich nur dann etwas, wenn
+es noch weitere Felder zum Anzeigen gibt.
+ Ob dies der Fall ist, können Sie an zwei Indikatoren ablesen.
+Zum einen wird hinter dem letzten Feld eine markierte Abschluß­
+zeile ausgegeben. Ist diese nicht sichtbar, gibt es noch Felder, die
+Sie mit ESC UNTEN hochholen können. Zum anderen steht die Num­
+mer der ersten Zeile in der Überschrift. Ist diese Nummer größer als
+1, können Sie mit ESC OBEN noch Felder sichtbar machen.
+ Das Rollen ist oft auch dann notwendig, wenn sich ein Feld
+über mehrere Zeilen erstreckt. In diesem Fall kann es passieren,
+daß die erste Zeile des Feldes nicht mehr sichtbar ist, da sie ober­
+halb des Anzeigebereichs liegen würde.
+
+#on("b")#Feldauswahl#off("b")# Eine weitere Möglichkeit bei zu vielen Feldern
+be­
+steht darin, nur die interessanten Felder zur Anzeige auszuwählen.
+Dies geschieht mit der Funktion
+#free (0.2)#
+
+ F Feldauswahl
+
+#free (0.2)#
+Ihnen werden alle Felder zur Auswahl angeboten. Kreuzen Sie die
+Felder an, die Sie sehen wollen und denken Sie daran, daß die Rei­
+henfolge des Ankreuzens beachtet wird. Anschließend werden Ihnen
+nur die ausgewählten Felder angezeigt. Falls Sie kein Feld ankreu­
+zen, bleibt die alte Feldauswahl bestehen.
+ Wollen Sie wieder alle Felder sehen, müssen Sie diese nicht alle
+einzeln ankreuzen. Mit HOP 'x' in der Auswahl werden alle Felder
+angekreuzt (die noch nicht angekreuzt waren). Diese Tastenkombi­
+nation können Sie allgemein bei einer Auswahl verwenden. Sie
+können die Kreuzchen mit 'o' auch wieder löschen, um zum Beispiel
+"alle außer einem" auszuwählen.
+ Beachten Sie, daß die Auswahl der anzuzeigenden Felder nichts
+mit der eigentlichen Dateistruktur zu tun hat, sondern nur für die
+Anzeige gilt. Den Verarbeitungsfunktionen (zum Beispiel Drucken)
+stehen natürlich nach wie vor alle Felder zur Verfügung.
+ Unvermutete Effekte können dann entstehen, wenn Sie bei
+einer eingestellten Feldauswahl ändern oder einfügen. Die nicht
+ausgewählten Felder werden beim Ändern natürlich nicht geändert
+und beim Einfügen einfach leer gelassen.
+
+
+10.2 Satzeditor
+
+An dieser Stelle sollen noch einige weitere Funktionen des Satz­
+editors vorgestellt werden, die Sie noch nicht kennengelernt haben.
+
+#on("b")#Rollen im Satzeditor#off("b")# Sie können auch rollen, wenn Sie sich
+im
+Satzeditor befinden (also beim Suchen, Einfügen und Ändern). Den­
+ken Sie daran, daß Sie die Einzelsatzanzeige immer mit ESC OBEN
+und ESC UNTEN rollen, während sonst (Editor, Auswahl von Datei­
+namen) immer mit HOP OBEN und HOP UNTEN gerollt wird.
+ Diese Diskrepanz hat technische Gründe und läßt sich leider
+nicht vermeiden. Wie Sie sich vielleicht erinnern, führt das Blättern
+mit HOP OBEN und HOP UNTEN im Satzeditor dazu, daß die Korre­
+spondenz zwischen Feldnamen und Feldinhalt verlorengeht. Daher
+muß an dieser Stelle mit ESC statt HOP gearbeitet werden.
+
+#on("b")#Ähnliche Sätze#off("b")# Wenn Sie mehrere ähnliche Sätze eintragen
+müssen,
+bietet Ihnen EUDAS eine Erleichterung an. Sie können nämlich beim
+Einfügen die Daten eines anderen Satzes übernehmen.
+ Dazu müssen Sie beim Ändern oder Einfügen des anderen Satzes
+ESC 'p' drücken. Der Inhalt des Satzes wird dann in einen Zwischen­
+speicher gebracht. Beachten Sie, daß im Gegensatz zum EUMEL-
+Editor kein Text markiert sein muß, sondern immer der ganze Satz
+transportiert wird.
+ Beim Einfügen eines neuen Satzes können Sie diesen Satz dann
+mit ESC 'g' in den Satzeditor übernehmen. Alle vorherigen Inhalte
+werden überschrieben. Anschließend können Sie die Daten nach
+Wunsch abändern.
+ Der Inhalt des Zwischenspeichers kann beliebig oft auf diese
+Weise kopiert werden. Der Inhalt des Zwischenspeichers wird bei
+Ändern der Feldauswahl oder beim Öffnen einer neuen Datei ge­
+löscht.
+
+#on("b")#Tagesdatum#off("b")# Im Satzeditor können Sie mit ESC 'D' das
+aktuelle
+Tagesdatum abfragen. Es wird an der aktuellen Cursorposition ein­
+getragen, als ob Sie es selbst getippt hätten.
+ Auf diese Weise können Sie Sätze einfach mit Datum versehen
+oder nach Sätzen suchen, die mit dem Tagesdatum in Beziehung
+stehen (zum Beispiel 'Fälligkeit = Heute').
+
+
+10.3 Suchmuster
+
+Die bisher genannten Möglichkeiten des Suchmusters sind noch
+etwas beschränkt. Eine Bedingung in unserer Adressendatei, die wir
+im Suchmuster noch nicht ausdrücken können, wäre zum Beispiel:
+Suche alle Adressen der Personen, die Wegner oder Simmern heißen.
+ Diese Alternative, Wegner ODER Simmern, kann nun in EUDAS
+durch ein Komma ausgedrückt werden:
+
+
+ Name Wegner,Simmern
+ Vorname
+
+
+Beachten Sie, daß hinter dem Komma kein Leerzeichen folgen darf,
+wie Sie es vielleicht gewohnt sind, in einem Text zu schreiben.
+EUDAS kann nämlich nicht unterscheiden, ob Sie das Leerzeichen
+nur aus optischen Gründen geschrieben haben, oder ob Sie danach
+suchen wollen.
+
+#on("b")#Lokale Alternative#off("b")# Die eben beschriebene
+Konstruktionsmethode
+heißt #on("i")#lokale Alternative#off("i")#. Lokal deshalb, weil Sie nur innerhalb
+eines Feldes gilt. Was das bedeuten soll, sehen Sie, wenn Sie die
+Bedingung mit einer weiteren Bedingung für ein anderes Feld kom­
+binieren:
+
+
+ Name Wegner,Simmern
+ Vorname
+ Strasse
+ PLZ 5*
+ Ort
+
+
+Dieses Muster hat die Bedeutung: Wähle alle Personen namens Weg­
+ner oder Simmern aus, die im PLZ-Bereich 5 wohnen. Die beiden
+Bedingungen für den Namen sind mit der Bedingung für die PLZ mit
+UND verknüpft - das heißt, eine der beiden ersten Bedingungen muß
+zutreffen #on("i")#und#off("i")# die untere Bedingung. Dieses UND ist global, da es
+Bedingungen für verschiedene Felder miteinander verbindet.
+ Natürlich können Sie für mehrere Felder gleichzeitig lokale
+Alternativen angeben. Eine anderes Suchmuster könnte zum Beispiel
+so aussehen:
+
+
+ Name Wegner,Simmern
+ Vorname
+ Strasse
+ PLZ 5,5000
+ Ort
+
+
+In diesem Fall muß eine ausgewählte Person Wegner oder Simmern
+heißen und in Köln wohnen.
+
+#on("b")#Globale Alternative#off("b")# Es wird nun aber für bestimmte
+Situationen
+noch eine andere Art von Alternativen benötigt. Als Beispiel soll
+ein Suchmuster dienen, das folgende Bedingung ausdrückt. Gesucht
+ist eine weibliche Person mit Namen Simmern oder eine männliche
+Person mit Namen Wegner.
+ Dieser Fall läßt sich mit unseren bisherigen Mitteln nicht lö­
+sen. Es wird nämlich eine Alternative zwischen zwei zusammen­
+gesetzten Bedingungen gefordert. Als Ausweg bietet sich an, prak­
+tisch mehrere Suchmuster anzugeben, die dann mit ODER verknüpft
+werden.
+ Um diese verschiedenen Suchmuster optisch am Bildschirm zu
+kennzeichnen, wird ein Semikolon als sogenannte #on("i")#globale Alternati­
+ve#off("i")# verwendet. Das Semikolon trennt das Suchmuster quasi in ver­
+schiedene Spalten auf, die jeweils eine eigene Bedingung enthalten
+können. Unser gewünschtes Suchmuster würde also so aussehen:
+
+
+ Name Wegner;Simmern
+ Vorname
+ Strasse
+ PLZ
+ Ort
+ m/w m;w
+
+
+Ebenso wie bei lokalen Alternativen darf hinter dem Semikolon kein
+Leerzeichen folgen. Daher kann das zweite Semikolon auch nicht
+direkt unter dem ersten stehen. Die Spalten werden also einfach nur
+durchgezählt: nach dem ersten Semikolon beginnt die zweite Spal­
+te, nach dem zweiten Semikolon die dritte usw.
+ In Zeilen, in denen keine Bedingungen stehen, kann auch das
+Semikolon weggelassen werden. Es kann ebenfalls weggelassen wer­
+den, wenn die weiteren Spalten leer sind. Steht ein Semikolon direkt
+am Anfang der Zeile, so ist die erste Spalte leer.
+ Um dies zu illustrieren, sei hier noch ein weiteres Beispiel
+angegeben:
+
+
+ Name Wegner
+ Vorname ;Anna-Maria
+ Strasse
+
+
+In diesem Fall muß eine ausgewählte Person mit Nachnamen Wegner
+oder mit Vornamen Anna-Maria heißen.
+
+#on("b")#Stern#off("b")# Bis jetzt haben Sie hauptsächlich Bedingungen
+betrachtet,
+die exakt zutreffen mußten. Sie wissen aber bereits, daß man auch
+Bedingungen angeben kann, bei denen nur ein Teil des zu suchen­
+den Feldes bekannt ist, nämlich indem der unbekannte Teil mit
+einem Stern markiert wird.
+ In Kapitel 5 haben Sie gelernt, daß der Stern nur am Anfang
+und Ende des Musters stehen kann. Dies trifft nicht ganz zu, denn
+Sie können den Stern auch inmitten eines Textes anwenden. So
+trifft die Bedingung 'Si*n' auf alle Namen zu, die mit 'Si' beginnen
+und mit 'n' enden.
+ Beachten Sie hier das "und" in der Formulierung der Bedingung.
+Das Muster ist eigentlich eine Schreibweise für zwei Bedingungen
+für ein Feld, die mit UND verknüpft sind.
+ Sie können auch noch weitere Sterne in das Muster aufnehmen.
+Dabei gibt es jedoch eine Kleinigkeit zu beachten. Das Muster
+'*x*y*' bedeutet: das Feld muß ein 'x' und ein 'y' enthalten. Über
+die Reihenfolge der beiden Zeichen ist jedoch in dieser Bedingung
+nichts gesagt, obwohl es vielleicht vom Aussehen suggeriert wird.
+ Denken Sie daran, keine zwei Sterne nebeneinander zu schrei­
+ben - eine solche Bedingung hätte keinen Sinn.
+ Es gibt eine weitere spezielle Bedingung, die mit Hilfe des
+Sterns formuliert wird. Ein einzelner Stern bedeutet nämlich: Das
+Feld ist nicht leer. Beachten Sie den kleinen Unterschied: ein Stern
+in einem Muster kann für einen beliebigen Text stehen, der auch
+leer sein kann. Ein einzelner Stern jedoch steht für einen beliebigen
+Text, der nicht leer ist.
+ Damit Sie ein Gefühl für die Verwendung des Sterns bekommen,
+hier noch ein paar Beispiele:
+
+
+Mei*r*
+
+ Der Name beginnt mit 'Mei' und enthält ein 'r'. Trifft zu auf
+ 'Meier', 'Meiring', aber nicht auf 'Meiling' oder 'Merzei'.
+
+
+Donau*dampf*schiff*schaft
+
+ Feld beginnt mit 'Donau', endet mit 'schaft' und enthält
+ 'dampf' und 'schiff'. Trifft zu auf 'Donaudampfschiffahrtsge­
+ sellschaft', aber auch auf 'Donaugesellschiffdampffahrtschaft'.
+
+
+Roller*erfahren
+
+ Dieses Muster muß man ganz genau interpretieren. Es bedeutet:
+ der Inhalt beginnt mit 'Roller' und endet mit 'erfahren'. Das
+ Muster trifft nicht nur auf 'Roller erfahren' sondern auch auf
+ 'Rollerfahren' zu. Der Stern verliert also in diesem Fall seine
+ symbolische Bedeutung als Platzhalter für einen bestimmten
+ Text.
+
+#on("b")#Vergleiche#off("b")# Es gibt in EUDAS noch weitere Muster, die
+einen gan­
+zen Bereich von Werten auswählen. Diese betreffen Bedingungen der
+Art "größer als" und "kleiner als". Solche Vergleichsbeziehungen
+werden durch zwei Punkte dargestellt.
+ So wählt das Muster 'K..' alle Felder aus, die in der alphabe­
+tischen Reihenfolge hinter 'K' liegen, wobei das 'K' selbst mit ein­
+geschlossen ist. Umgekehrt trifft '..K' auf alle Felder zu, die davor
+liegen.
+ Sie können beide Bedingungen auch kombinieren. So trifft die
+Bedingung 'A..K' auf alle Felder zu, die im Lexikon unter 'A' bis
+'J' erscheinen (die Felder mit 'K' sind hier ausgeschlossen). Beach­
+ten Sie, daß die direkte Kombination wieder die Verknüpfung zweier
+einzelner Bedingungen mit UND darstellt.
+
+#on("b")#Negation#off("b")# Um den Bereich möglicher Suchmuster noch zu
+erweitern,
+können Sie einzelne Bedingungen auch noch verneinen. Dies ge­
+schieht durch Voranstellen zweier Minuszeichen. So bedeutet das
+Muster '--Meier', daß alle Personen ausgewählt werden, die nicht
+Meier heißen.
+ Die Verneinung bezieht sich immer auf das unmittelbar folgende
+Muster (bis zum nächsten Komma, Semikolon oder dem Zeilenende)
+und nicht etwa auf eine ganze Zeile. Sie umfaßt jedoch die UND-
+Verknüpfung der kombinierten Bedingungen. So sind zum Beispiel die
+Muster '--E..M', '--E..,--..M' und '..E,M..' völlig gleichbedeu­
+tend.
+
+#on("b")#Feldvergleich#off("b")# Als letztes haben Sie im Suchmuster auch
+noch die
+Möglichkeit, ein Feld mit anderen Feldern des gleichen Satzes zu
+vergleichen. Bisher hatten Sie ein Feld ja immer nur mit konstanten
+Texten verglichen.
+ Um dies zu erreichen, geben Sie statt eines Vergleichstextes
+den Feldnamen des Feldes an, mit dem Sie vergleichen wollen. Zur
+Kennzeichnung müssen Sie dem Namen noch ein '&' voranstellen.
+Diese Konstruktion funktioniert mit allen bisher besprochenen Ver­
+gleichen. Beispielsweise trifft
+
+
+ Feld1 ..&Feld2
+
+
+auf alle Sätze zu, in denen der Inhalt von Feld1 kleiner ist als der
+Inhalt von Feld2.
+ Im Gegensatz zum Druckmuster dürfen in den Feldnamen zwar
+Leerzeichen enthalten sein, nicht jedoch
+#free (0.2)#
+
+ .. * , ;
+
+#free (0.2)#
+da diese Zeichen als reservierte Zeichen gelten und jeweils als
+Begrenzer wirken. Die gleiche Beschränkung gilt dementsprechend
+auch für konstante Vergleichstexte.
+ Beachten Sie, daß hinter dem '&' bis zum nächsten Begrenzer­
+zeichen ein gültiger (vorhandener) Feldname stehen muß. Anderen­
+falls wird der Text als konstantes Muster betrachtet.
+ Wie schon oben gesagt, kann der Feldvergleich mit allen Ver­
+gleichen verwendet werden. Auch gemischte Konstruktionen sind
+zulässig, beispielsweise
+
+
+ Feld1 A..&Feld3,*&Feld9*
+
+
+Diese Bedingung trifft zu, wenn Feld1 größer oder gleich 'A', aber
+kleiner als der Inhalt von Feld3 ist, oder wenn der Inhalt von Feld9
+darin vorkommt.
+
+#on("b")#Optimierung#off("b")# Hier noch eine Bemerkung zur Geschwindigkeit
+des
+Suchens. Je mehr Bedingungen Sie angeben, desto mehr Vergleiche
+müssen beim Suchen angestellt werden und desto länger dauert es.
+ Das erste Feld einer Datei erfährt jedoch eine Sonderbehand­
+lung. Wenn Sie für dieses Feld ein Muster für Übereinstimmung
+angeben, kann der Suchvorgang enorm beschleunigt werden, da das
+erste Feld einer Datei intern speziell verwaltet wird. Damit das
+Verfahren funktioniert, dürfen keine globalen Alternativen oder
+lokale Alternativen für das erste Feld verwendet werden.
+ Diese Suchoptimierung sollten Sie bereits beim Einrichten einer
+Datei berücksichtigen. Geben Sie als erstes Feld das an, nach dem
+am ehesten direkt gesucht wird. Typisches Beispiel hierfür ist der
+Nachname, aber auch Artikelnummern sind sinnvoll. Wichtig ist, daß
+das erste Feld nicht zu oft identisch ist und auch mehr als zwei
+Buchstaben enthält, damit die Optimierung ihre volle Wirksamkeit
+entfaltet.
+ Denken Sie daran, daß durch die Feldauswahl ein beliebiges
+Feld als erstes auf dem Bildschirm stehen kann. Für die Optimierung
+wird jedoch immer das Feld betrachtet, das beim Einrichten der
+Datei als erstes angegeben wurde.
+
+
+10.4 Markieren
+
+Manchmal entsteht die Situation, daß Sie eine Reihe von Sätzen
+bearbeiten wollen, aber keine Suchbedingung formulieren können,
+die auf alle diese Sätze zutrifft. In diesem Fall bietet EUDAS Ihnen
+die Möglichkeit, solche Sätze von Hand zu markieren.
+ Ein Beispiel: Sie haben eine ganze Reihe von Sätzen geändert
+und wollen diese Änderungen als Protokoll ausdrucken. Es läßt sich
+aber nicht mit Hilfe eines Suchmusters feststellen, welche Sätze
+geändert wurden.
+ Als Abhilfe wählen Sie bei jedem geänderten Satz die Funktion
+#free (0.2)#
+
+ M Markierung
+
+#free (0.2)#
+Dadurch wird der bisher unmarkierte Satz markiert. Dies wird
+kenntlich an der Anzeige 'MARK+' in der Überschrift. Sobald Sie den
+ersten Satz markiert haben, erscheint bei jedem Satz, ob er markiert
+ist oder nicht.
+ Haben Sie einen Satz irrtümlich markiert, können Sie die Mar­
+kierung mit der gleichen Funktion auch wieder entfernen.
+ Alle Funktionen, die bisher die durch das Suchmuster ausge­
+wählten Sätze bearbeitet haben, arbeiten nun nur noch auf den
+markierten Sätzen. Somit können Sie anschließend mit der Druck­
+funktion die gewünschten Sätze drucken. Die Markierung hat also
+Priorität über die eingestellte Suchbedingung. Lediglich die Bewe­
+gung am Bildschirm beachtet immer nur die Suchbedingung.
+ Sie können alle Markierungen der Datei mit der Funktion
+#free (0.2)#
+
+ Alle Markier.
+ L Löschen
+
+#free (0.2)#
+im Menü 'Gesamtdatei' wieder entfernen. Anschließend wird beim
+Drucken wieder das Suchmuster beachtet. Die Markierungen ver­
+schwinden auch, wenn eine neue Datei geöffnet wird. Die Markie­
+rungen sind also nicht permanent in einer Datei gespeichert, son­
+dern existieren nur, während die Datei geöffnet ist.
+ Bei Koppeldateien können Sie aus technischen Gründen immer
+nur alle Kombinationen auf einmal markieren. Die Markierung einer
+Kombination markiert auch alle anderen Kombinationen des gleichen
+Satzes.
+
+
+10.5 Übersicht
+
+Wie Sie bisher gesehen haben, zeigte EUDAS immer einen einzigen
+Satz in dem Standardformular auf dem Bildschirm. Es gibt jedoch
+auch eine Möglichkeit, mehrere Sätze gleichzeitig zu betrachten.
+Dazu dient die Funktion
+#free (0.2)#
+
+ U Übersicht
+
+#free (0.2)#
+im Menü 'Gesamtdatei'.
+ In der Übersicht nimmt jeder Satz nur eine Bildschirmzeile in
+Anspruch. Die Feldinhalte werden, durch Komma getrennt, in der
+Zeile nacheinander aufgezählt, bis kein Platz mehr vorhanden ist.
+Am Anfang jeder Zeile steht die Satznummer und ob der jeweilige
+Satz markiert ist (entweder '+' für markiert oder '-'). In der Über­
+schrift stehen in gleicher Weise die Feldnamen angegeben.
+ Der aktuelle Satz wird innerhalb der Übersichtsanzeige immer
+durch eine inverse Satznummer dargestellt. Es werden nur die durch
+das eingestellte Suchmuster ausgewählten Sätze gezeigt. Trifft die
+Selektionsbedingung nicht auf den aktuellen Satz zu, wird an seiner
+Stelle zur Information ein leerer Platzhalter angezeigt. Hinter dem
+letzten Satz wird auch das Dateiende als besonders gekennzeichne­
+ter Satz angegeben.
+
+___________________________________________________________________________________________
+
+ ÜBERSICHT: Blättern: HOP OBEN, HOP UNTEN Ende: ESC q Hilfe: ESC ?
+ Satznr. Name, Vorname, PLZ, Ort, Strasse, m/w,
+ 1 - Wegner, Herbert, Krämergasse 12, 5000, Köln, m,
+ 2 - Sandmann, Helga, Willicher Weg 109, 5300, Bonn 1, w,
+ 3 - Katani, Albert, Lindenstr. 3, 5210, Troisdorf, m,
+ 4 - Ulmen, Peter, Mozartstraße 17, 5, Köln 60, m,
+ 5 - Regmann, Karin, Grengelweg 44, 5000, Köln 90, w,
+ 6 - Arken, Hubert, Talweg 12, 5200, Siegburg, m,
+ 7 - Simmern, Anna-Maria, Platanenweg 67, 5, Köln 3, w,
+ 8 - Kaufmann-Drescher, Angelika, Hauptstr. 123, 53, Bonn 2, w,
+ 9 - Fuhrmann, Harald, Glockengasse 44, 5000, Köln 1, m,
+ 10 - Seefeld, Friedrich, Kabelgasse, 5000, Köln-Ehrenfeld, m,
+ 11 - << DATEIENDE >>
+
+___________________________________________________________________________________________
+
+
+#center#Abb. 10-1 Übersicht
+
+
+#on("b")#Feldauswahl#off("b")# Wenn Sie die Funktion aufrufen, haben Sie
+zuerst
+noch die Möglichkeit, nur einen Teil der vorhandenen Felder zur
+Anzeige auszuwählen. Dazu bejahen Sie die Frage und können dann
+die Felder in der gewünschten Reihenfolge ankreuzen. Analog zur
+Funktion 'Feldauswahl' wird auch hier die zuletzt für die Übersicht
+verwendete Feldauswahl beibehalten, wenn Sie die Frage verneinen
+oder kein Feld ankreuzen. Die Feldauswahl für die Übersicht ist
+unabhängig von der Feldauswahl für die normale Satzanzeige.
+ Von der Möglichkeit zur Feldauswahl sollten Sie Gebrauch ma­
+chen, denn durch die komprimierte Darstellung der Übersicht kann
+meistens nur ein kleiner Teil eines Satzes dargestellt werden.
+
+#on("b")#Rollen#off("b")# Nachdem die Sätze auf dem Bildschirm erschienen
+sind,
+haben Sie wieder die Möglichkeit, die Darstellung zu rollen. Dazu
+können Sie die Pfeiltasten OBEN und UNTEN sowie die Tastenkombi­
+nationen HOP OBEN und HOP UNTEN verwenden. Diese Funktionen
+verschieben den invers dargestellten aktuellen Satz und funktio­
+nieren wie im Editor. Beachten Sie auch hier wieder den Unterschied
+zum Rollen in der Einzelsatzanzeige.
+ Das Rollen wirkt wie ein Positionieren mit 'Weiter' oder 'Zu­
+rück'. Nach der Rückkehr aus der Übersicht können Sie sich also an
+einer ganz anderen Stelle in der Datei befinden.
+ Es stehen Ihnen zum Rollen auch noch die folgenden Tasten­
+kombinationen zur Verfügung (wie im Editor): HOP RETURN macht
+den aktuellen Satz zum ersten auf der Seite. ESC '1' zeigt den er­
+sten Satz der Datei, ESC '9' analog dazu den letzten.
+ Wenn Sie eine komplizierte Suchbedingung eingestellt haben
+und EUDAS viele Sätze erfolglos überprüfen muß, dauert der Bild­
+aufbau natürlich entsprechend lange. EUDAS gibt zu Ihrer Informa­
+tion aber immer die Nummer des Satzes aus, der gerade überprüft
+wird. Außerdem werden Tastenbefehle nach jeder Zeile angenommen,
+so daß Sie schon weiterblättern können, wenn Sie den ersten Satz
+gesehen haben.
+
+#on("b")#Markieren#off("b")# In der Übersicht können Sie auch Sätze
+markieren. Mit
+'+' markieren Sie den aktuellen Satz; mit '-' entfernen Sie die Mar­
+kierung wieder. So können Sie einfach die Sätze ankreuzen, die Sie
+später bearbeiten wollen.
+
+#on("b")#Verlassen#off("b")# Mit ESC 'q' können Sie die Übersicht wieder
+verlassen,
+auch mitten beim Aufbau des Bildes. Haben Sie erkannt, daß EUDAS
+sinnlos mit einer falschen Suchbedingung sucht, können Sie die
+Funktion auch mit ESC 'h' (Halt) abbrechen und gegebenenfalls ein
+neues Suchmuster einstellen.
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.11 b/app/eudas/4.3/doc/eudas.hdb.11
new file mode 100644
index 0000000..6a59847
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.11
@@ -0,0 +1,674 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (109)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+11 Funktionen zur Bearbeitung
+
+
+
+11.1 Sortieren
+
+Wenn Sie die Sätze in Ihrer EUDAS-Datei in einer bestimmten Rei­
+henfolge haben wollen (dies wird in vielen Fällen zum Drucken
+verlangt), müssen Sie die Datei sortieren. Sie können EUDAS ange­
+ben, in welcher Reihenfolge die Sortierung erfolgen soll. Um die
+aktuelle Datei zu sortieren, rufen Sie die Funktion
+#free (0.2)#
+
+ Akt. Datei
+ S Sortieren
+
+#free (0.2)#
+auf. Falls die Datei noch nie sortiert wurde, wird Ihnen auf jeden
+Fall die Sortierreihenfolge zum Auswählen angeboten. Anderenfalls
+werden Sie gefragt, ob Sie die vorherige Sortierreihenfolge ändern
+wollen.
+ Das Sortieren wird als Veränderung betrachtet und nur auf der
+Arbeitskopie durchgeführt!
+
+#on("b")#Sortierreihenfolge#off("b")# Die Sortierreihenfolge gibt an, welche
+Felder in
+welcher Reihenfolge beim Vergleichen zweier Sätze benutzt werden
+sollen. Zuerst wird das an erster Stelle angegebene Feld verglichen.
+Sind die Inhalte hier unterschiedlich, wird die Einordnung der Sätze
+nach diesem Feld bestimmt.
+ Sind die Inhalte in diesem Feld aber gleich, so wird nach dem
+nächsten Feld verglichen. Ist kein weiteres Feld in der Sortierrei­
+henfolge angegeben, wird der Vergleich an dieser Stelle mit einem
+zufälligen Ergebnis abgebrochen, das heißt, es kann nicht vorher­
+gesagt werden, welcher der beiden Sätze zuerst kommt.
+ Die Sortierreihenfolge können Sie in einer Menüauswahl einge­
+ben. Kreuzen Sie die Felder an, die Sie vergleichen wollen und ach­
+ten Sie auf die richtige Reihenfolge. Die eingegebene Reihenfolge
+wird in der Datei gespeichert, um beim nächsten Sortiervorgang
+wiederverwendet zu werden.
+ Nachdem Sie alle bei der Sortierung zu berücksichtigenden
+angekreuzt haben, werden Sie für jedes dieser Felder gefragt, ob
+nach dem Feld aufsteigend oder absteigend sortiert werden soll.
+
+#on("b")#Ablauf#off("b")# Der Ablauf des Sortierens wird durch Ausgabe von
+Satz­
+nummern dargestellt. Bis zur ausgegebenen Satznummer sind alle
+Sätze richtig sortiert. Bei Bedarf kann der Vorgang durch SV und
+dann 'halt' abgebrochen werden. Die Datei bleibt dabei auf jeden
+Fall intakt.
+
+#on("b")#Optimierung#off("b")# Die gespeicherte Sortierreihenfolge wird auch
+noch zu
+einer weiteren Optimierung benutzt. Wenn eine Datei sortiert war
+und nur wenige Änderungen stattgefunden haben, brauchen beim
+nächsten Sortiervorgang nur die wenigen veränderten Sätze einzeln
+einsortiert zu werden. Das funktioniert natürlich nur unter der
+Voraussetzung, daß die gleiche Sortierreihenfolge gewählt wird. Das
+Sortieren braucht in diesem Fall erheblich weniger Zeit.
+
+#on("b")#Probleme#off("b")# Normalerweise werden die einzelnen Felder nach
+dem
+EUMEL-Zeichencode verglichen. Das bedeutet, daß sich die Reihen­
+folge der Zeichen nach dem EUMEL-Zeichencode richtet. Ein Zeichen
+mit einem höheren Code wird also vor einem Zeichen mit einem
+niedrigeren Code einsortiert.
+ In manchen Fällen ergeben sich mit diesem Vergleichsverfahren
+aber auch Schwierigkeiten. Wenn in einem Feld Zahlen oder DM-
+Beträge stehen, führt die Methode zu falschen Ergebnissen. Die '10'
+wird zum Beispiel vor der '2' einsortiert. Warum? Texte werden
+immer linksbündig geschrieben und verglichen. Bei Zahlen richtet
+sich die Wertigkeit jedoch nach dem Abstand vom Komma.
+ Da bei Texten zuerst das erste Zeichen verglichen wird, ent­
+steht hier durch Vergleich von '1' und '2' der Eindruck, die '10'
+käme vor der '2'. Korrigieren könnte man dies, indem man ein Leer­
+zeichen vor die '2' schreibt. Wenn also die (nicht geschriebenen)
+Dezimalkommata direkt untereinanderstehen, werden Zahlen richtig
+verglichen.
+
+#on("b")#Typ ZAHL#off("b")# EUDAS hat jedoch eine bequemere Art, dieses
+Problem zu
+behandeln. Ein Feld, das Zahlen enthalten soll, bekommt einen spe­
+ziellen Typ ZAHL zugewiesen, der zu einer richtigen Sortierung
+führt.
+ Bei Feldern vom Typ ZAHL ignoriert EUDAS bei Vergleichen alle
+nichtnumerischen Zeichen und vergleicht den Wert der Zahl. So
+können Sie zum Beispiel in einem Satz '2,50 DM' und im anderen
+Satz '10 DM' eintragen - EUDAS kann jetzt die richtige Reihenfolge
+feststellen.
+ Übrigens: falls Sie numerische Werte lieber mit einem Dezi­
+malpunkt statt einem Dezimalkomma schreiben, können Sie EUDAS
+das mit dem ELAN-Kommando
+
+
+ dezimalkomma (".")
+
+
+mitteilen. Wenn Sie ein solches Kommando eingeben wollen, können
+Sie im EUDAS-Menü ESC ESC drücken. In der Statuszeile erscheint
+dann die Aufforderung:
+
+
+ Gib Kommando:
+
+
+Hier können Sie wie im Editor oder im EUMEL-Monitor ein beliebiges
+Kommando eingeben und ausführen.
+ Die Normaleinstellung für das Dezimalkomma erreichen Sie
+wieder durch das Kommando
+
+
+ dezimalkomma (",")
+
+
+
+#on("b")#Typ ändern#off("b")# Die Feldtypen sind eine permanente Eigenschaft
+einer
+EUDAS-Datei. Beim Einrichten einer neuen Datei wird zunächst der
+Standardtyp für alle Felder genommen. Sie erhalten jedoch Gelegen­
+heit, abweichende Feldtypen zu vergeben, wenn Sie die Frage
+
+___________________________________________________________________________________________
+
+ Feldnamen oder Feldtypen ändern (j/n) ?
+___________________________________________________________________________________________
+
+
+bejahen.
+ Auch nachträglich können Sie die Feldtypen noch ändern. Dies
+geschieht mit der Funktion
+#free (0.2)#
+
+ F Feldstrukt.
+
+#free (0.2)#
+im Menü 'Öffnen'. Zunächst werden Sie gefragt, ob Sie noch weitere
+Feldnamen anfügen wollen. So könnten Sie die Datei um weitere
+Felder ergänzen, die bei allen Sätzen zunächst leer sind. Die neuen
+Felder müssen Sie wie beim Einrichten der Datei untereinander im
+Editor schreiben.
+ Als zweites erscheint dann die gleiche Frage wie oben. Wenn
+Sie diese bejahen, wird Ihnen eine Auswahl der zu ändernden Fel­
+der mit Feldnamen und den zugehörigen Feldtypen angeboten. Kreu­
+zen Sie hier die Felder an, deren Feldtypen Sie ändern möchten.
+ Da Sie mit dieser Funktion sowohl Feldnamen als auch Feld­
+typen verändern können, wird Ihnen für jedes Feld zunächst der
+Name zum Ändern angeboten. Sie können den Namen korrigieren oder
+überschreiben. Die Namensänderung hat jedoch keine Auswirkung
+auf den Feldinhalt!
+ Wenn Sie den Namen nicht ändern wollen, drücken Sie einfach
+RETURN. Anschließend können Sie für das Feld den neuen Feldtyp
+angeben. Tippen Sie einen der vier Feldtypen als Text ein und
+drücken Sie RETURN. Anschließend hat das Feld einen neuen Typ.
+Die verschiedenen möglichen Typen werden jetzt genau erklärt.
+
+#on("b")#Feldtypen#off("b")# TEXT ist der Standardtyp, der die Feldinhalte
+nach
+EUMEL-Zeichencode vergleicht. Den Typ ZAHL hatten wir schon
+weiter oben kennengelernt. Daneben gibt es noch den Typ DATUM.
+ Dieser Typ vergleicht Daten der Form 'tt.mm.jj'. Soll ein sol­
+ches Datum richtig einsortiert werden, müßte es anderenfalls in der
+Reihenfolge umgedreht werden (also 'jj.mm.tt'). Dies ist aber nicht
+nötig, wenn das Feld den Typ DATUM bekommt. Beachten Sie, daß
+alle Inhalte, die nicht die beschriebene Form haben, als gleich be­
+trachtet werden.
+ Der letzte Typ ist DIN. Dabei werden Texte nach DIN 5007 ver­
+glichen. Das bedeutet, daß Groß- und Kleinbuchstaben als gleich
+angesehen werden, daß alle nichtalphabetischen Zeichen ignoriert
+werden und die Umlaute ihren richtigen Platz bekommen (Umlaute
+werden in normalen Texten hinter allen anderen Zeichen einsor­
+tiert). Da hierfür ein relativ großer Zeitaufwand notwendig ist,
+sollte dieser Typ nur dann gewählt werden, wenn er erforderlich ist.
+Den schnellsten Vergleich ermöglicht der Typ TEXT.
+
+#on("b")#Hinweis#off("b")# Beachten Sie, daß mit der Vergabe von Feldtypen
+keine
+Überprüfung der Eingabe verbunden ist. Insbesondere beim Datum
+wird nicht geprüft, ob die Form 'tt.mm.jj' eingehalten wurde. Wollen
+Sie solche Überprüfungen vornehmen, lesen Sie bitte Abschnitt 11.3.
+
+
+11.2 Kopieren
+
+In diesem Abschnitt sollen Sie erfahren, wie Sie eine EUDAS-Datei
+#on("i")#kopieren#off("i")# können. Diese Funktion kann nicht nur ein inhaltsgleiches
+Duplikat einer EUDAS-Datei herstellen (dies könnten Sie einfacher
+durch eine logische Kopie bewerkstelligen, s. 16.1), sondern auch
+komplizierte Umstrukturierungen vornehmen.
+
+#on("b")#Kopiermuster#off("b")# Der Schlüssel zu dieser Leistungsfähigkeit
+ist das
+#on("i")#Kopiermuster#off("i")#. Wie beim Druckmuster legen Sie dadurch die genauen
+Auswirkungen der Funktion fest.
+ Für jedes Feld in der Zieldatei, in die kopiert werden soll,
+enthält das Kopiermuster die Angabe, woraus der Inhalt dieses
+Feldes entstehen soll. Durch Auswahl und Reihenfolge dieser Anga­
+ben bestimmen Sie die Struktur der Zieldatei.
+ Im einfachsten Fall sieht die Kopieranweisung für ein Feld wie
+folgt aus:
+
+
+ "Feldname" K f ("Feldname");
+
+
+Das 'K' dient zur Festlegung der Kopierfunktion. Auf der linken
+Seite steht in Anführungsstrichen der Name des Zielfeldes. Der
+Ausdruck auf der rechten Seite gibt den zukünftigen Inhalt des
+Feldes an. Der Ausdruck im obigen Beispiel steht einfach für den
+Inhalt des Feldes 'Feldname' in der aktuellen Datei. Das Semikolon
+am Ende dient zur Abgrenzung, da der ganze Ausdruck auch mehrere
+Zeilen lang sein darf.
+ In der oben genannten Form würde das Feld 'Feldname' iden­
+tisch in die Zieldatei kopiert. Weitere Möglichkeiten besprechen wir
+später.
+
+#on("b")#Feldreihenfolge#off("b")# Zunächst wollen wir uns damit befassen,
+wie Sie
+die Feldreihenfolge in der Zieldatei beeinflussen können. Dies ge­
+schieht einfach dadurch, daß Sie die Kopieranweisungen in der ge­
+wünschten Reihenfolge aufschreiben. Damit können wir bereits ein
+erstes komplettes Beispiel betrachten:
+
+
+ "Name" K f ("Name");
+ "Vorname" K f ("Vorname");
+ "PLZ" K f ("PLZ");
+ "Ort" K f ("Ort");
+ "Strasse" K f ("Strasse");
+ "m/w" K f ("m/w");
+
+
+Dieses Kopiermuster würde die bereits beschriebene Adressendatei
+identisch kopieren, da alle Felder in der gleichen Reihenfolge vor­
+kommen.
+ Wenn Sie jedoch die Feldreihenfolge ändern wollen (um zum
+Beispiel ein anderes Feld als erstes zu optimieren), brauchen Sie
+bloß die Reihenfolge im Kopiermuster zu verändern:
+
+
+ "Ort" K f ("Ort");
+ "Name" K f ("Name");
+ "Vorname" K f ("Vorname");
+ "PLZ" K f ("PLZ");
+ "Strasse" K f ("Strasse");
+ "m/w" K f ("m/w");
+
+
+Im Gegensatz zur Auswahl der Feldreihenfolge für die Anzeige än­
+dern Sie so die Feldreihenfolge für die Zieldatei permanent.
+
+#on("b")#Felder anfügen#off("b")# Die beiden angegebenen Kopiermuster haben
+jedoch
+nur dann die beschriebene Wirkung, wenn die Zieldatei noch nicht
+existert. Bei einer existierenden Datei kann die Feldreihenfolge
+nicht mehr geändert werden; daher hat die Reihenfolge der Kopier­
+anweisungen dann keine Wirkung.
+ Sie können jedoch zu einer existierenden Zieldatei noch Felder
+hinzufügen. EUDAS verwendet nämlich folgende einfache Vorschrift:
+
+#limit (12.0)#
+ Wenn als Zielfeld in einer Kopieranweisung ein Feld
+ genannt wird, das in der Zieldatei noch nicht vorkommt,
+ wird es als weiteres Feld der Zieldatei hinzugefügt.
+#limit (13.5)#
+
+Diese Strategie hat im Fall der nicht existierenden Datei zur Folge,
+daß alle Felder neu sind und in der Reihenfolge ihres Auftretens
+eingerichtet werden. Existiert die Datei schon, werden zusätzliche
+Felder am Ende angefügt.
+ Beachten Sie, daß zusätzliche Felder für eine existierende
+Datei nur in den neu hinzukopierten Sätzen gefüllt sind. In den
+alten Sätzen bleiben alle neuen Felder einfach leer.
+
+#on("b")#Satzauswahl#off("b")# An dieser Stelle sollte erwähnt werden, daß
+wie bei
+allen Funktionen, die die gesamte Datei betreffen, nur die durch die
+Suchbedingung ausgewählten Sätze kopiert werden. Ist mindestens
+ein Satz markiert, werden nur die markierten Sätze kopiert und die
+Suchbedingung ignoriert.
+
+#on("b")#Teildatei#off("b")# Jetzt können Sie auch die zweite wichtige
+Aufgabe des
+Kopierens verstehen. Sie können aus einer Datei einen Teil der
+Sätze und einen Teil der Felder #on("i")#herausziehen#off("i")#. Danach haben Sie
+unter Umständen eine wesentlich kleinere Datei, die sich auch
+schneller bearbeiten läßt. Gerade wenn Sie nicht den allerneuesten
+64-Bit-Supercomputer haben, können Sie so viel Zeit sparen, wenn
+Sie wiederholt nur mit einem Teil der Datei arbeiten müssen.
+ Die Auswahl der Sätze für einen solchen Zweck erfolgt über ein
+Suchmuster; im Kopiermuster geben Sie dann nur die gewünschten
+Felder an.
+
+#on("b")#Aufruf#off("b")# An dieser Stelle wollen wir jetzt endlich
+behandeln, wie
+Sie die Kopierfunktion aufrufen. Dazu gibt es die Auswahl
+#free (0.2)#
+
+ Satzauswahl
+ K Kopieren
+
+#free (0.2)#
+im Menü "Gesamtdatei". Als erstes werden Sie nach dem Namen der
+Zieldatei gefragt. Existiert die Zieldatei schon und war sie vorher
+sortiert, werden Sie gefragt, ob Sie die Datei zum Schluß wieder
+sortieren wollen. Wie immer beim Sortieren werden auch hier gege­
+benenfalls nur die neu hinzugekommenen Sätze einsortiert.
+ Als nächstes müssen Sie den Namen des Kopiermusters angeben.
+Da das Kopiermuster eine normale Textdatei ist, können Sie sich
+einen beliebigen Namen ausdenken, unter dem das Muster dann
+gespeichert wird.
+ Wollen Sie das Kopiermuster nicht aufbewahren, sondern nur
+einmal verwenden, brauchen Sie keinen Namen anzugeben. Drücken
+Sie einfach RETURN und für die Dauer des Kopierens wird das
+Kopiermuster als unbenannte Datei eingerichtet.
+ Nachdem Sie den Namen des Kopiermusters eingegeben haben,
+gelangen Sie in den Editor, wo Sie das Muster ändern können. Damit
+Sie beim ersten Mal nicht so viel tippen müssen, bietet EUDAS Ihnen
+bei einer neuen Musterdatei ein #on("i")#Standard-Kopiermuster#off("i")# zum Ändern
+an. Das Aussehen des Standard-Kopiermusters richtet sich danach,
+ob die Zieldatei schon existiert oder nicht.
+ Existiert die Zieldatei noch nicht, so werden im Standard-
+Kopiermuster alle Felder der Ausgangsdatei in ihrer originalen Rei­
+henfolge angegeben. Wenn Sie dieses Muster nicht noch ändern, wird
+die aktuelle Datei identisch kopiert.
+ Sie können jedoch die Feldreihenfolge verändern oder Felder
+weglassen, indem Sie einfach die entsprechenden Zeilen vertauschen
+oder löschen. Für Umbenennungen überschreiben Sie einfach den
+Namen auf der linken Seite der Kopieranweisung. So können Sie das
+Kopiermuster mit geringstem Aufwand erstellen.
+ Existiert die Zieldatei jedoch schon, werden Ihnen im Kopier­
+muster alle Felder der Zieldatei angeboten. Bei Feldern, die in der
+aktuellen Datei nicht vorkommen, erscheint folgende Anweisung:
+
+
+ "Anrede" K "";
+
+
+Obwohl die Anweisung in diesem Fall keine Wirkung hat (wenn man
+sie wegließe, würde das Feld ebenfalls leer bleiben), ist sie dennoch
+aufgeführt, damit Sie auf der rechten Seite einen entsprechenden
+Ausdruck einsetzen können.
+ Bei den angebotenen Anweisungen hat eine Änderung der Rei­
+henfolge oder eines Feldnamens keinen Sinn, da diese Felder ja alle
+bereits existieren. Jedoch können Sie die Ausdrücke auf der rechten
+Seite variieren und neue Anweisungen (Felder) hinzufügen.
+
+#on("b")#Ablauf#off("b")# Wenn Sie die Eingabe des Kopiermusters mit ESC 'q'
+verlas­
+sen, wird das Kopiermuster übersetzt. Dabei können Fehlermeldun­
+gen auftreten. Sie können dann die Fehler korrigieren, wobei Sie die
+Fehlermeldungen gleichzeitig auf dem Bildschirm sehen können. War
+das Kopiermuster korrekt, werden alle ausgewählten (bzw. markier­
+ten) Sätze der aktuellen Datei in die Zieldatei kopiert und diese
+anschließend gegebenenfalls noch sortiert.
+ Die kopierten Sätze werden jeweils am Ende der Zieldatei ange­
+fügt. War die Zieldatei vorher schon sortiert, können Sie angeben,
+daß die neuen Sätze zum Schluß noch einsortiert werden. Anderen­
+falls können Sie die Datei anschließend mit der Funktion 'Sortieren'
+sortieren.
+
+#on("b")#ELAN-Ausdrücke#off("b")# Wenn Sie schon einmal programmiert haben,
+wird
+Ihnen vielleicht aufgefallen sein, daß ein Kopiermuster einem
+ELAN-Programm verdächtig ähnlich sieht. Diese Vermutung trügt Sie
+nicht. Dies läßt den Schluß zu, daß Sie noch mehr ELAN hier an­
+bringen können.
+ Haben Sie noch nie programmiert, sollten Sie jetzt nicht in
+Panik geraten, denn das Wichtigste dieses Abschnitts haben Sie
+bereits gelernt. Vielleicht sind Ihnen die folgenden Beispiele bereits
+ganz nützlich. Um alle Möglichkeiten auszunutzen, sollten Sie sich
+aber irgendwann (später!) mit den Kapiteln 14 und 15 befassen, in
+denen Sie Genaueres erfahren.
+ Zunächst sei festgestellt, daß der rechte Teil einer Kopieran­
+weisung ein beliebiger ELAN-Ausdruck sein kann, der einen TEXT
+liefert. Den wichtigsten Ausdruck kennen Sie bereits:
+
+
+ f ("Feldname")
+
+
+liefert den Inhalt des Feldes 'Feldname' des aktuellen Satzes der
+aktuellen Datei. Gibt es das Feld nicht, erscheint eine Fehlermel­
+dung bei der Ausführung.
+ Sie können jedoch auch einen konstanten Text angeben, der
+dann für alle Sätze gleich ist. Dazu schließen Sie den Text einfach
+in Anführungsstriche ein. Die folgende Kopieranweisung dient dazu,
+ein neues Feld einzurichten, das aber vorläufig noch leer bleiben
+soll:
+
+
+ "Feldname" K "";
+
+
+Ebenso können Sie mehrere Felder zu einem neuen verbinden, zum
+Beispiel:
+
+
+ "Wohnort" K f ("PLZ") + " " + f ("Ort");
+
+
+Das Pluszeichen kennzeichnet die Aneinanderreihung von zwei Tex­
+ten. Denken Sie auch immer an das Semikolon am Ende. In gleicher
+Weise können Sie viele andere Textfunktionen verwenden, die in
+Kapitel 14 beschrieben sind.
+ Prinzipiell können Sie auch Bedingungen mit IF abfragen, wie
+zum Beispiel in der folgenden Übersetzung:
+
+
+ IF f ("m/w") = "w" THEN
+ "Anrede" K "Frau"
+ ELSE
+ "Anrede" K "Herr"
+ END IF;
+
+
+Auf diese Weise können Sie Kodierungen verschiedenster Art auto­
+matisch umsetzen. Sie müssen hierbei jedoch unbedingt darauf ach­
+ten, daß innerhalb der IF-Konstruktion immer eine Kopieranweisung
+ausgeführt wird. Falls nämlich kein Fall zutrifft und für ein Feld
+keine Kopieranweisung ausgeführt wird, wird das Feld bei einer
+neuen Datei auch nicht richtig eingerichtet.
+
+
+11.3 Tragen
+
+In Kapitel 6 hatten Sie gesehen, wie man einzelne Sätze aus der
+aktuellen Datei in eine andere trägt, und auch, wie man sie wieder
+zurückholen kann. Diese Funktion diente im wesentlichen dazu,
+nicht mehr benötigte Sätze zu entfernen.
+ Sie haben aber auch die Möglichkeit, eine ganze Reihe von
+Sätzen in einem Arbeitsgang zu tragen, nämlich alle durch das
+Suchmuster ausgewählten beziehungsweise alle markierten Sätze.
+Diese Funktion dient ebenfalls dazu, Sätze zu entfernen, beispiels­
+weise alle Sätze, die vor einem gewissen Stichtag liegen. Als wei­
+tere Anwendung können Sie beim Tragen aber auch Bedingungen
+überprüfen.
+ Diese #on("i")#Prüfbedingungen#off("i")# sollen sicherstellen, daß die Daten in
+einer Datei ganz bestimmten Richtlinien entsprechen. Zum Beispiel
+kann geprüft werden, ob ein eingegebenen Datum stimmen kann, ob
+ein Satz doppelt aufgenommen wurde oder ob eine Artikelnummer die
+richtige Anzahl von Stellen hat.
+ Die Prüfbedingungen werden einer Datei fest zugeordnet. Sie
+können mit der Funktion
+#free (0.2)#
+
+ P Prüfbed.
+
+#free (0.2)#
+im Menü 'Öffnen' eingegeben oder geändert werden. Die Prüfbedin­
+gungen werden als Text im Editor geschrieben.
+
+#on("b")#Ablauf#off("b")# Das ganze Verfahren läuft nun so ab: Sie fügen neue
+Sätze
+immer erst in eine Zwischendatei ein, die die gleiche Struktur wie
+die eigentliche Datei hat. Wenn Sie alle Sätze fertig eingegeben
+haben, tragen Sie diese Datei komplett in die gewünschte Datei.
+Dabei werden die Prüfbedingungen getestet.
+ Erfüllt ein Satz die Bedingungen, wird er anstandslos getragen.
+Trifft eine Bedingung aber nicht zu, bleibt der Satz in der Zwi­
+schendatei und eine entsprechende Meldung wird ausgegeben. Die
+Meldungen werden gespeichert, um Sie später nochmal abrufen zu
+können.
+ Sie müssen jetzt in der Zwischendatei die notwendigen Ände­
+rungen durchführen, damit die Prüfbedingungen erfüllt werden. Beim
+Aufruf der Funktion
+#free (0.2)#
+
+ A Ändern
+
+#free (0.2)#
+können Sie mit Hilfe der Tastenkombination ESC 'P' (großes P) die
+Datei mit den Fehlermeldungen in einem kleinen Teilfenster editie­
+ren. Anhand dieser Hinweise können Sie dann den Satz korrigieren.
+Die Meldungen bleiben bis zum nächsten Öffnen oder Tragen erhal­
+ten.
+ Nach der Korrektur können Sie den gleichen Vorgang erneut
+aufrufen - es sind ja nur noch die zuerst fehlerhaften Sätze in der
+Zwischendatei. Bei Bedarf können Sie diesen Vorgang wiederholen,
+bis alle Sätze korrekt übernommen worden sind.
+
+#on("b")#Aufruf#off("b")# Das Tragen wird aufgerufen durch die Funktion
+#free (0.2)#
+
+ Satzauswahl
+ T Tragen
+
+#free (0.2)#
+Nach Eingabe des Zieldateinamens müssen Sie noch angeben, ob Sie
+die Prüfbedingungen testen wollen.
+
+#on("b")#Prüfbedingungen#off("b")# Zu diskutieren bleibt noch die Form der
+Prüfbe­
+dingungen. Diese stellen ein kleines ELAN-Programm dar, in dem
+einige spezielle Prozeduren zum Prüfen enthalten sind. Wenn Sie
+nicht ELAN programmieren können, sollte Sie diese Bemerkung nicht
+erschrecken: die Prüfbedingungen sind einfach genug.
+ Sie schreiben also die Prüfbedingungen jeweils untereinander.
+Eine mögliche Bedingung ist
+
+
+ wertemenge ("Feldname", "Wert1,Wert2,Wert3,Wert4");
+
+
+Diese Bedingung gibt an, daß das Feld einen der angegebenen Werte
+haben muß. Die Werte werden untereinander durch Komma getrennt.
+Es gibt jedoch keine Möglichkeit, Werte mit Komma darzustellen, da
+das Komma immer als Trennung wirkt. Leerzeichen dürfen in den
+Werten vorkommen, sie müssen dann aber auch genau so im Feld
+stehen.
+ Wir könnten zum Beispiel eine Bedingung für unser Feld 'm/w'
+wie folgt formulieren
+
+
+ wertemenge ("m/w", "m,w");
+
+
+EUDAS würde sich dann beschweren, wenn das Feld leer wäre (ir­
+gendein Geschlecht muß die Person ja wohl haben). Wenn das Feld
+auch leer sein darf, geben Sie einfach zwei Kommata hintereinander
+oder ein Komma am Anfang an:
+
+
+ wertemenge ("m/w", ",m,w");
+
+
+Eine andere Möglichkeit der Prüfbedingung besteht darin, eine
+Maske für ein Feld zu definieren. Diese Maske gibt an, daß an be­
+stimmten Stellen des Feldes nur bestimmte Zeichen stehen dürfen.
+So könnte man zum Beispiel folgende Maske für ein Datumsfeld
+angeben:
+
+
+ feldmaske ("Datum", "99.99.99");
+
+
+Die Neunen haben hier eine spezielle Bedeutung und und stehen für
+eine beliebige Ziffer. Es gibt noch einige weitere Zeichen, die eine
+reservierte Bedeutung haben, nämlich:
+
+
+ '9' für jede Ziffer (wie schon erwähnt)
+ 'X' für jedes Zeichen
+ 'A' für jeden Großbuchstaben
+ 'a' für jeden Kleinbuchstaben
+ '*' für eine Folge beliebiger Zeichen
+
+
+Alle anderen Zeichen im Muster stehen für sich selbst. Eine Sonder­
+stellung besitzt der Stern; er sollte sparsam verwendet werden, da
+seine Benutzung etwas aufwendiger ist. Der Stern kann auch für
+eine leere Zeichenfolge stehen. Als weiteres Beispiel könnte man
+definieren
+
+
+ feldmaske ("Name", "A*");
+
+
+damit immer ein Name angegeben ist, der noch dazu mit einem Groß­
+buchstaben beginnt.
+ Für Bedingungen, die sich nicht mit diesen beiden Prozeduren
+formulieren lassen, gibt es noch
+
+
+ pruefe ("Feldname", Bedingung);
+
+
+Diese Prozedur erhält einen logischen (booleschen) Wert als Parame­
+ter, der einen Vergleich darstellt. Ist dieser Parameter falsch
+(FALSE), wird eine entsprechende Fehlermeldung protokolliert. So
+könnte man folgende Bedingung angeben:
+
+
+ pruefe ("Alter", wert ("Alter") > 18.0);
+
+
+Diese Bedingung würde sicherstellen, daß alle Personen in der Datei
+volljährig sind ('wert' ist eine von EUDAS definierte Funktion, die
+den Inhalt eines Feldes als REAL-Zahl liefert - denken Sie auch
+daran, daß der ELAN-Compiler Zahlen mit Dezimalpunkt geschrieben
+haben möchte).
+ Da die Prüfbedingungen ein ELAN-Programm sind, können Sie
+natürlich sämtliche ELAN-Anweisungen verwenden.
+ Weiterhin haben Sie die Möglichkeit, Doppeleinträge zu verhin­
+dern. Dazu geben Sie mit Hilfe der Prozedur
+
+
+ eindeutige felder (n);
+
+
+wieviele Felder vom ersten an eindeutig sein sollen. Ein zu tragen­
+der Satz, der mit irgendeinem anderen Satz in diesen Feldern über­
+einstimmt, wird als fehlerhaft zurückgewiesen. In unserer Adressen­
+datei könnte man
+
+
+ eindeutige felder (2);
+
+
+angeben. Damit würde ein neuer Satz mit bereits vorhandenem Na­
+men und Vornamen abgelehnt.
+
+#on("b")#Limit#off("b")# Aus technischen Gründen können die Prüfbedingungen
+einer
+Datei nur 2000 Zeichen umfassen. Wollen Sie aufwendigere Bedin­
+gungen konstruieren, sollten Sie sich diese als Prozedur definieren
+und insertieren. In den Prüfbedingungen müssen Sie dann nur diese
+Prozedur aufrufen.
+
+
+11.4 Automatische Änderungen
+
+Mit EUDAS können Sie die geöffnete Datei nicht nur satzweise von
+Hand ändern, sondern auch automatisch die ganze Datei. Dazu müs­
+sen Sie dem Rechner eine Vorschrift geben, nach der er handeln
+kann. Ein solches #on("i")#Änderungsmuster#off("i")# stellt im Prinzip schon ein klei­
+nes Programm dar. Der Änderungsvorgang wird durch die Auswahl
+#free (0.2)#
+
+ V Verändern
+
+#free (0.2)#
+aufgerufen. Dabei wird der Name des Änderungsmusters erfragt. Dies
+ist eine normale Textdatei. Existiert das Muster noch nicht, können
+Sie den Inhalt an dieser Stelle im Editor angeben. Anschließend
+werden alle ausgewählten Sätze nach der Vorschrift bearbeitet.
+Dabei wird jeweils die aktuelle Satznummer ausgegeben.
+
+#on("b")#Änderungsmuster#off("b")# Da auch ein Kopiermuster ein Programm ist,
+ist
+es nicht erstaunlich, daß Änderungsmuster ganz ähnlich aussehen.
+Eine typische Zeile sieht etwa so aus:
+
+
+ "Feldname" V "neuer Inhalt";
+
+
+Diese Zeile bedeutet: Ersetze den Inhalt des Feldes 'Feldname'
+durch den Text 'neuer Inhalt'. Anstelle des neuen Textes kann
+wieder ein beliebiger ELAN-Ausdruck stehen. Ein Beispiel, in dem
+ein Feld einen Stern angehängt bekommt, sieht dann so aus:
+
+
+ "Feldname" V f ("Feldname") + "*";
+
+
+Beachten Sie, daß Sie den Ausdruck auf der rechten Seite eventuell
+in Klammern setzen müssen (obwohl der Operator 'V' die niedrigste
+Priorität hat). Wenn Sie sich nicht sicher sind, können Sie den Aus­
+druck immer in Klammern einschließen.
+ Ebenso wie im Kopiermuster können Sie hier beliebige ELAN-
+Ausdrücke verwenden. Auch IF-Abfragen und ähnliche Konstruktio­
+nen sind möglich, im Gegensatz zum Kopiermuster sogar ohne Be­
+schränkungen.
+ Im Vergleich zu einem separat geschriebenen ELAN-Programm
+hat das Änderungsmuster den Vorteil, daß Sie nur die eigentlichen
+Veränderungsanweisungen kodieren müssen. Die wiederholte Anwen­
+dung auf die ausgewählten Sätze erledigt EUDAS automatisch. Wol­
+len Sie eine solche Änderungsanweisung fest insertieren, so brau­
+chen Sie das Muster nur in eine Prozedur zu verpacken und EUDAS
+zu übergeben (Näheres s. Referenzhandbuch).
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.12 b/app/eudas/4.3/doc/eudas.hdb.12
new file mode 100644
index 0000000..fba5ca5
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.12
@@ -0,0 +1,446 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (123)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+12 Weitere Möglichkeiten zum Drucken
+
+
+
+12.1 Anschluß an die Textverarbeitung
+
+Auf zweierlei Art und Weise kann der EUDAS-Druckgenerator mit
+den Programmen der EUMEL-Textverarbeitung zusammenarbeiten.
+Zum ersten können Ausgabedateien des Druckprozesses anschließend
+mit den Textkosmetik-Werkzeugen bearbeitet werden. Zum anderen
+kann EUDAS im Editor direkt Daten aus einer EUDAS-Datei in die
+editierte Datei importieren.
+
+#on("b")#Druckrichtung#off("b")# Wie Sie schon in Kapitel 7 gesehen haben,
+kann
+man die Ausgabe des Druckgenerators statt auf den Drucker in eine
+Datei umleiten. Die Datei erhält dann einen automatisch generierten
+Namen. Sie können jedoch auch festlegen, daß die Ausgabe in eine
+ganz bestimmte Datei geschrieben werden soll. Dazu wählen Sie die
+Funktion
+
+
+ Ausgabe
+ R Richtung
+
+
+im Druckmenü. Es erscheint die Frage
+
+___________________________________________________________________________________________
+
+ Ausgabe automatisch zum Drucker (j/n) ?
+___________________________________________________________________________________________
+
+
+Verneinen Sie die Frage und es erscheint
+
+___________________________________________________________________________________________
+
+ Ausgabe in bestimmte Datei (j/n) ?
+___________________________________________________________________________________________
+
+
+Wenn Sie diese Frage auch verneinen, erhält die Ausgabedatei einen
+automatisch generierten Namen. Wenn Sie die Frage aber bejahen,
+können Sie anschließend den Namen der Ausgabedatei angeben.
+ Existiert die angegebene Datei schon, wird der Ausdruck am
+Ende der Datei angefügt. Anderenfalls wird die Datei neu eingerich­
+tet.
+ Die Angabe der Ausgabedatei gilt jedoch nur für den folgenden
+Druckvorgang. Wenn Sie mehrmals in die gleiche Datei drucken wol­
+len, müssen Sie den Namen immer wieder neu angeben. Falls Sie dies
+vergessen, wird die folgenden Male wieder ein Name automatisch
+generiert.
+
+#on("b")#Begrenzung der Dateigröße#off("b")# Für kleinere Systeme ist es
+vorteilhaft,
+wenn die Druckausgabe nicht in einer großen Datei gesammelt wird,
+sondern sich auf mehrere kleine Dateien verteilt. Da die Ausgabe­
+datei nach dem Drucken gelöscht wird, kann man auf diese Weise
+einen Hintergrundengpaß vermeiden. Es besteht die Möglichkeit, die
+maximale Größe der Ausgabedatei mit dem ELAN-Kommando
+
+
+ maxdruckzeilen (1000)
+
+
+auf eine bestimmte Zeilenzahl (maximal 4000) zu beschränken. Wenn
+der Druckgenerator nach der Bearbeitung eines Satzes feststellt,
+daß diese Maximalzahl überschritten wurde, wird die Ausgabedatei
+direkt gedruckt (falls durch 'Richtung' eingestellt) und eine neue
+Ausgabedatei eröffnet.
+
+#on("b")#Initialisierungsteil#off("b")# Dabei ist jedoch zu beachten, daß
+Drucker­
+steuerungsanweisungen, die im Vorspann eingestellt wurden, jetzt in
+der neuen Datei nicht mehr vorhanden sind. In einem solchen Fall
+würden die folgenden Teile der Ausgabe mit einer anderen Einstel­
+lung gedruckt.
+ Um dies zu vermeiden, können Sie solche Anweisungen in den
+#on("i")#Initialisierungsteil#off("i")# schreiben. Der Initialisierungsteil umfaßt alle
+Zeilen des Druckmusters bis zum ersten Abschnitt, also bis zur
+ersten Anweisung. Zeilen im Initialisierungsteil werden beim Eröff­
+nen einer neuen Ausgabedatei an den Anfang dieser Datei ge­
+schrieben.
+ Druckersteuerungsanweisungen, die ein bestimmtes Schriftbild
+der Ausgabe erzeugen ('type', 'limit', 'linefeed', 'start' usw.), sollten
+also in den Initialisierungsteil vor Beginn aller Abschnitte ge­
+schrieben werden.
+
+#on("b")#Nachbearbeitung#off("b")# Wenn Sie in der Druckausgabe verschiedene
+Schriften oder Proportionalschrift verwenden wollen, sollten Sie die
+folgenden Hinweise beachten. Da EUDAS keine Informationen über
+die Schriftbreiten und -größen hat, werden alle Schrifttypen gleich
+behandelt. Dies gilt insbesondere für die Zeilenbreite, die ja durch
+das Dateilimit des Druckmusters festgelegt ist.
+ So kann es passieren, daß Zeilen mit kleinen Schrifttypen zu
+früh abgeschnitten werden, während Zeilen mit großen Schriften
+nicht mehr auf das Blatt passen. Für diesen Fall sollten Sie das
+größte benötigte Limit einstellen (zum Beispiel 135 bei Schmal­
+schrift auf DIN A 4) und die Ausgabedatei anschließend mit 'line­
+form' bearbeiten.
+ 'lineform' verteilt zu langen Text auf mehrere Zeilen. Außerdem
+werden gegebenenfalls Trennungen durchgeführt.
+ 'lineform' benötigt zur Information Absatzmarken. Fehlt an
+einer Zeile die Absatzmarke, wird die nächste Zeile so weit wie
+möglich direkt angehängt. Die Absatzmarken in der Ausgabedatei
+werden direkt aus dem Druckmuster übernommen (es ist nicht mög­
+lich, Absatzzeilen durch eingesetzte Leerzeichen zu erzeugen). Im
+Normalfall sollten alle Zeilen im Druckmuster eine Absatzmarke
+haben.
+ Wenn Sie seitenorientierte Überschriften haben möchten, kön­
+nen Sie auch 'pageform' einsetzen. Die gewünschten Überschrift­
+anweisungen können Sie im Initialisierungsteil angeben.
+ Die beiden Funktionen wählen Sie über den Menüpunkt
+
+
+ N Nachbearb.
+
+
+im Druckmenü. Dort können Sie den Namen der Ausgabedatei ange­
+ben, die Sie bearbeiten möchten. Es wird jeweils gefragt, ob Sie
+'lineform' und 'pageform' anwenden wollen. Das Ergebnis der Bear­
+beitung können Sie danach ausdrucken.
+
+#on("b")#EUDAS im Editor#off("b")# Wenn Sie sich im Editor zum Zweck der
+Textver­
+arbeitung befinden, können Sie Daten aus einer EUDAS-Datei direkt
+in die editierte Datei übernehmen. Dazu wählen Sie zunächst die
+gewünschten Sätze aus - danach geben Sie den Namen eines Druck­
+musters an. EUDAS druckt die gewählten Sätze unter Beachtung des
+Druckmusters direkt in die editierte Datei.
+ Wenn Sie das Kommando
+
+
+ eudas
+
+
+im Editor geben (nach ESC ESC), gelangen Sie in ein spezielles
+Kurzprogramm, das alle notwendigen Information von Ihnen erfragt.
+ Zunächst müssen Sie den Namen der gewünschten EUDAS-Datei
+angeben. Diese Datei wird dann automatisch geöffnet. Vorher geöff­
+nete Dateien werden nach Anfrage gesichert. Beachten Sie, daß
+keine Datei mehr geöffnet ist, wenn Sie später EUDAS wieder normal
+aufrufen.
+ Danach wird Ihnen eine Übersicht aller Sätze gezeigt - in einer
+Form, die Sie aus der Funktion 'Übersicht' bereits kennen. Wie dort
+wird Ihnen zunächst eine Auswahl der Felder angeboten, um die
+Anzeige übersichtlich zu halten. Anschließend können Sie noch ein
+Suchmuster angeben.
+ In der Übersicht können Sie sich dann zu einem bestimmten
+Satz bewegen oder mehrere Sätze markieren. Nach dem Verlassen der
+Übersicht können Sie den aktuellen Satz oder alle ausgewählten
+(bzw. markierten) Sätze drucken. Natürlich können Sie auch beide
+Fragen verneinen.
+ Zum Drucken wird der Name des Druckmusters erfragt. Dieses
+muß bereits existieren. Die Ausgabe wird an der Stelle eingefügt, an
+der der Cursor in der editierten Datei steht - die Zeile wird bei
+Bedarf aufgesplittet.
+ Nach dem Drucken können Sie den Vorgang wiederholen, wenn
+Sie zum Beispiel einen weiteren Satz drucken wollen. Dazu können
+Sie auch ein neues Suchmuster angeben. Markierungen von Sätzen
+werden nach dem Drucken gelöscht.
+
+
+12.2 Spaltendruck
+
+Für manche Anwendungen reicht es nicht aus, wenn die bearbeite­
+ten Sätze jeweils untereinander in der Ausgabe erscheinen. Häufig­
+stes Beispiel dafür ist der Etikettendruck. Hierfür werden vielfach
+mehrbahnige Formulare eingesetzt.
+ In diesem Fall müssen die Sätze bis zur gewünschten Anzahl
+von Spalten nebeneinander gesetzt werden - erst danach wird die
+nächste Reihe angefangen.
+ EUDAS unterstützt diese Anwendung. Dazu wird hinter der
+'%WIEDERHOLUNG'-Anweisung die Anzahl der Spalten als Parameter
+geschrieben (durch Leerzeichen getrennt). Der Wiederholungsteil
+wird dann mit der angegebenen Anzahl von Spalten gedruckt. Zu
+beachten ist, daß Vorspann und Nachspann diese Spaltenanordnung
+durchbrechen, also immer hinter dem bisher Gedruckten beginnen.
+ Die Spaltenbreite wird vom Dateilimit des Druckmusters be­
+stimmt. Die Zeilen eines Wiederholungsteils werden bis zum Limit
+mit Leerzeichen aufgefüllt, wenn der nächste Wiederholungsteil
+danebengesetzt wird.
+ Alternativ kann die Spaltenbreite in Zeichen auch als zweiter
+Parameter angegeben werden. Der Wert gilt jedoch nur für den Wie­
+derholungsteil - Vor- und Nachspann richten sich immer nur nach
+dem Dateilimit.
+ Es spielt keine Rolle, ob die nebeneinandergesetzten Wieder­
+holungsteile unterschiedliche Längen haben. Die kürzeren Teile
+werden einfach bei Bedarf durch Leerzeilen ergänzt. Es ist jedoch zu
+beachten, daß sich auf diese Weise unterschiedliche Längen für die
+einzelnen Reihen ergeben können.
+ Beispiel: Das Ergebnis für Satz 1, 3, 4 und 5 sei vier Zeilen
+lang, für Satz 2 aber fünf Zeilen. Bei zweispaltigem Druck wird die
+erste Reihe eine Zeile länger als die folgenden (s. dazu Abb. 12-1).
+
+
+ Satz 1 Satz 2
+ braucht braucht
+ vier Zeilen. ausnahmsweise
+ ---------------- fünf Zeilen.
+ ----------------
+ Satz 3 Satz 4
+ braucht braucht
+ vier Zeilen. vier Zeilen.
+ ---------------- ----------------
+ Satz 5
+ braucht
+ vier Zeilen.
+ ----------------
+
+#center#Abb. 12-1 Seitenaufteilung beim Spaltendruck
+
+
+#on("b")#Beispiel#off("b")# Zum Abschluß noch als Beispiel ein Druckmuster
+für ein
+dreibahniges Etikettenformular. Die Spaltenbreite und die Länge des
+Wiederholungsteils richten sich natürlich nach dem verwendeten
+Formular und müssen im Einzelfall ausprobiert werden.
+
+
+ % VORSPANN
+ \#start (1.0, 0.8)\#
+ % WIEDERHOLUNG 3 40
+
+ &Vorname %Name
+ &Strasse
+
+ &PLZ %Ort
+ \#free (1.693)\#
+
+
+
+12.3 Modi
+
+Gesetzt der Fall, Sie wollen eine Tabelle drucken, deren Einträge
+auf jeden Fall in voller Länge erscheinen sollen, auch wenn sie die
+Spaltenbreite überschreiten. Dies würde bedeuten, daß Tabellenein­
+träge nach rechts geschoben werden, wenn vorhergehende Einträge
+länger sind. Für diesen Fall können also nur Feldmuster variabler
+Position (mit '%') eingesetzt werden. Diese werden jedoch auch nach
+links geschoben, wenn vorher kürzere Inhalte auftreten.
+
+#on("b")#Tabellenmodus#off("b")# Um dieses Linksschieben zu unterdrücken,
+können
+Sie mit folgender Anweisung im Musterteil in den #on("i")#Tabellenmodus#off("i")#
+umschalten:
+
+
+ % MODUS 2
+
+
+Der so eingestellte Modus gilt bis zum Ende des jeweiligen Ab­
+schnitts. Zu Beginn eines Abschnitts ist der Modus 1 (Normalmodus)
+eingestellt.
+
+#on("b")#Beispiel#off("b")# Um diese Anweisung auszuprobieren, sollten Sie
+folgendes Druckmuster auf unsere Beispieldatei anwenden:
+
+
+ % WIEDERHOLUNG
+ % MODUS 2
+ &Vorname %Name
+
+
+In der Ausgabe können Sie sehen, daß der Nachname nicht nach
+links geschoben wird, so daß eine Tabelle entsteht. Ist der Vorname
+jedoch zu lang, wird die Tabelleneinteilung durchbrochen und der
+Nachname nach rechts geschoben, um den Vornamen nicht abschnei­
+den zu müssen:
+
+
+ Herbert Wegner
+ Helga Sandmann
+ Albert Katani
+ Peter Ulmen
+ Karin Regmann
+ Hubert Arken
+ Anna-Maria Simmern
+ Angelika Kaufmann-Drescher
+ Harald Fuhrmann
+ Friedrich Seefeld
+
+
+#on("b")#Zeilenfortsetzung#off("b")# Eine weitere Möglichkeit, überlange
+Feldinhalte
+einzusetzen, besteht darin, daß der Rest des Inhaltes, der nicht
+mehr in den reservierten Raum paßt, in der nächsten Zeile fortge­
+setzt wird. Dies wird im Modus 3 erreicht. Falls ein Feldinhalt ab­
+geschnitten werden müßte, wird in diesem Modus die gleiche Mu­
+sterzeile nochmal mit den restlichen Inhalten gedruckt. Dies wird
+fortgesetzt, bis alle Inhalte abgearbeitet sind.
+ Damit die Fortsetzung sinnvoll ist, wird das letzte Wort ganz in
+die nächste Zeile übernommen, falls es zerschnitten würde (ähnlich
+wie im Editor). Der dadurch freiwerdende Raum in der vorigen Zeile
+wird mit Leerzeichen gefüllt. Ist rechtsbündiges Einsetzen verlangt,
+werden die einzelnen Teile jeweils rechtsbündig in ihrem reservier­
+ten Platz justiert.
+ Dieser Modus ist besonders interessant, wenn Sie längere Kom­
+mentare in eine EUDAS-Datei eintragen, die Sie dann natürlich auch
+wieder drucken wollen. Den Text tragen Sie bereits in mehreren
+Zeilen in die EUDAS-Datei ein. Beachten Sie, daß der Umbruch des
+Textes im Druck nicht mit dem Umbruch des Textes am Bildschirm
+übereinstimmt. Wollen Sie dies verhindern, müssen Sie jeden Absatz
+des Textes in ein eigenes Feld schreiben.
+ Wie zu Anfang des Kapitels bereits angedeutet, kann der Um­
+bruch bei Proportionalschrift nicht korrekt sein, da EUDAS die Zei­
+chenbreiten nicht kennt. Um die nachfolgende Bearbeitung mit
+'lineform' zu ermöglichen, werden bei fortgesetzten Feldern grund­
+sätzlich keine Absatzmarken an die Zeilen geschrieben. Lediglich die
+letzte Fortsetzungszeile erhält eine Absatzmarke.
+ In den Fortsetzungszeilen, werden die Feldmuster, deren Inhalte
+bereits abgearbeitet sind, leer eingesetzt. Die Mustertexte zwischen
+den Feldmustern werden in den Fortsetzungszeilen durch Leerzei­
+chen ersetzt.
+ Die Anzahl der Fortsetzungszeilen kann durch die Anweisung
+
+
+ % MEHR n
+
+
+auf eine bestimmte Zahl 'n' festgelegt werden. Wenn alle Inhalte
+abgearbeitet wurden, aber die Anzahl der Zeilen noch nicht erreicht
+ist, werden entsprechend viele Zeilen mit leeren Inhalten erzeugt.
+ Die Zeilenwiederholung kann auch mit dem Tabellenmodus kom­
+biniert werden. Dies wird im Modus 4 erreicht. Felder variabler
+Position werden auch in diesem Modus nicht nach links geschoben.
+Außerdem werden aber in Fortsetzungszeilen die Mustertexte zwi­
+schen den Feldmustern wiederholt, um z.B. Tabellenbegrenzungen zu
+erzeugen.
+
+#on("b")#Beispiele#off("b")# Zur Verdeutlichung hier noch einige Beispiele.
+Das folgende Druckmuster:
+
+
+ % WIEDERHOLUNG
+ % MODUS 3
+ Kommentar: &Kommentar
+ ----------
+
+
+könnte folgende Ausgabe bewirken:
+
+
+ Kommentar: Dies ist ein längerer Kommentar aus
+ einer EUDAS-Datei, der zum Drucken
+ auf eine Breite von 48 Zeichen
+ umbrochen worden ist. Nur die letzte
+ Zeile hat eine Absatzmarke.
+ ----------
+
+
+Soll die Anzahl der Zeilen immer gleich bleiben, könnte man folgen­
+des Druckmuster verwenden:
+
+
+ % WIEDERHOLUNG
+ % MODUS 3
+ % MEHR 5
+ Kommentar: &Kommentar
+ ----------
+
+
+Mit einem kürzeren Text ergäbe sich folgendes Bild:
+
+
+ Kommentar: Nur ein kurzer Text.
+
+
+
+
+ ----------
+
+
+Für eine Tabelle würde man den Modus 4 benutzen:
+
+
+ % VORSPANN
+ --------------------------------------------------------
+ ! Abk. ! Kommentar !
+ !---------+--------------------------------------------!
+ % WIEDERHOLUNG
+ % MODUS 4
+ ! &abk ! &Kommentar&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& !
+ ----------+---------------------------------------------
+
+
+Als Ausgabe könnte folgender Text erscheinen:
+
+
+ --------------------------------------------------------
+ ! Abk. ! Kommentar !
+ !---------+--------------------------------------------!
+ ! MA11 ! Dieser Kurs hat eine Menge an besonderen !
+ ! ! Eigenschaften, die ihn für jüngere !
+ ! ! Teilnehmer geeignet erscheinen lassen. !
+ !---------+--------------------------------------------!
+ ! TD04 ! Stellt keine besonderen Anforderungen. !
+ !---------+--------------------------------------------!
+ ! PM01 ! Seit dem 01.01. eingerichtet und noch !
+ ! ! nicht voll besetzt. !
+ ----------+---------------------------------------------
+
+
+Beachten Sie hier, daß Tabelleneinträge hier nicht wie im Modus 2
+geschoben, sondern auf weitere Zeilen verteilt werden, wenn sie zu
+lang sind. Außerdem werden die Tabellenbegrenzungen mit wieder­
+holt. Das Feldmuster für Kommentar muß jedoch mit fester Länge
+angegeben werden, da sonst die rechte Tabellenbegrenzung bis zum
+Dateilimit geschoben würde.
+
+#on("b")#Zusammenfassung#off("b")# Zum Abschluß dieses Abschnitts eine
+Zusammenfassung aller möglichen Modi:
+
+ Modus Effekt
+
+ 1 Normalmodus.
+ '%'-Feldmuster werden auch nach links geschoben.
+ Keine Zeilenwiederholung.
+
+ 2 Tabellenmodus.
+ '%'-Feldmuster werden nicht nach links geschoben.
+ Keine Zeilenwiederholung.
+
+ 3 Normalmodus mit Zeilenwiederholung.
+ '%'-Feldmuster werden auch nach links geschoben.
+ Zeilenwiederholung ohne Zwischentexte.
+
+ 4 Tabellenmodus mit Zeilenwiederholung.
+ '%'-Feldmuster werden nicht nach links geschoben.
+ Zeilenwiederholung mit Zwischentexten.
+
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.13 b/app/eudas/4.3/doc/eudas.hdb.13
new file mode 100644
index 0000000..435fbfc
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.13
@@ -0,0 +1,757 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (133)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+13 Programmierung von Druckmustern
+
+
+
+13.1 Abkürzungen
+
+In den vorigen Kapiteln haben Sie erfahren, daß man Feldmuster
+von ganz bestimmter Länge definieren kann, deren Inhalt in genau
+dieser Länge eingesetzt und bei Bedarf abgeschnitten wird. Bei der
+Angabe dieser Länge spielt jedoch die Länge des Feldnamens eine
+ganz entscheidende Rolle. Das kürzeste Feldmuster fester Länge, das
+Sie definieren können, ist nämlich zwei Zeichen länger als der Feld­
+name (ein Musterzeichen vorher und eins nachher).
+ Hätte das Feld 'PLZ' den Namen 'Postleitzahl' bekommen, so
+müßte ein solches Feldmuster mindestens eine Länge von 14 Zeichen
+haben. Damit Sie mit diesem Feldnamen auch ein Feldmuster der
+Länge 4 bekommen können (Postleitzahlen haben in den seltensten
+Fällen mehr als 4 Stellen), haben Sie die Möglichkeit, den Namen
+'Postleitzahl' für die Verwendung im Druckmuster geeignet abzu­
+kürzen.
+ Abkürzungen haben jedoch noch eine viel weitreichendere
+Bedeutung. Mit ihnen ist es möglich, nicht nur die Feldinhalte einer
+EUDAS-Datei einzusetzen, sondern auch jeden anderen Text, den Sie
+mit einem ELAN-Programm erzeugen können.
+ Die einfachsten zusätzlichen Daten, die Sie verwenden können,
+sind z.B. Datum und Uhrzeit. Für weitergehende Zwecke können Sie
+die Inhalte der EUDAS-Datei auch für Berechnungen verwenden und
+damit so umfangreiche Probleme wie das Schreiben von Rechnungen
+oder statistische Auswertungen unter Verwendung eines Druck­
+musters lösen.
+
+#on("b")#Abkürzungsteil#off("b")# Abkürzungen werden in einem speziellen
+Abkür­
+zungsteil am Ende eines Abschnittes angegeben. Der Abkürzungsteil
+wird durch die Anweisung
+
+
+ % ABKUERZUNGEN
+
+
+eingeleitet. Eine Abkürzungsdefinition hat eine ähnliche Form wie
+ein Refinement (Falls Sie nicht wissen, was das ist, vergessen Sie
+es). Zu Beginn steht der Name der Abkürzung in Form eines Feld­
+musters, beginnend in der ersten Spalte. Danach folgt, durch Leer­
+zeichen getrennt, ein Doppelpunkt in der gleichen Zeile. Daran
+schließt sich ein beliebiger ELAN-Ausdruck an, der sich in freiem
+Format über beliebig viele Zeilen erstrecken kann und mit einem
+Punkt abgeschlossen werden muß. Dieser ELAN-Ausdruck muß ein
+TEXT-Objekt liefern.
+
+#on("b")#Feldinhalt#off("b")# Für die Abfrage von Inhalten aus einer
+EUDAS-Datei ist der Ausdruck
+
+
+ f ("Feldname")
+
+
+vordefiniert. Die Abkürzung des Feldes 'Postleitzahl' würde also als
+Ausschnitt folgendermaßen aussehen:
+
+
+ % ABKUERZUNGEN
+ &p : f ("Postleitzahl") .
+
+
+Mit dieser Definition kann man im Muster so verfahren, als ob das
+Feld 'Postleitzahl' auch 'p' hieße. Diese einfachste Form der Ab­
+kürzung können Sie natürlich variieren, indem Sie für 'p' und
+'Postleitzahl' Ihre eigenen Namen einsetzen.
+
+#on("b")#Übersetzung#off("b")# Beachten Sie, daß das Druckmuster in ein
+ELAN-Pro­
+gramm umgeformt werden muß, da ELAN-Ausdrücke in ihm vorkom­
+men. Das automatisch erzeugte ELAN-Programm wird dann vom
+ELAN-Compiler übersetzt und ausgeführt. Fehler in den ELAN-Aus­
+drücken im Abkürzungsteil können erst vom ELAN-Compiler ent­
+deckt werden. Dieser kennt jedoch das Druckmuster nicht und mel­
+det die Fehler anhand des generierten Programms. Sie müssen in
+einem solchen Fall aufpassen, daß Sie die Fehlerquelle an der rich­
+tigen Stelle im Druckmuster lokalisieren (Hilfestellungen dazu sind
+im Kapitel über die Übersetzung von Druckmustern zu finden).
+
+#on("b")#Beispiel#off("b")# Um die Verwendung von Abkürzungen zu
+demonstrieren, wollen wir folgendes Druckmuster betrachten:
+
+
+ % VORSPANN
+ Adressenliste als Beispiel für Abkürzungen
+ Stand: &Datum
+ ------------------------------------------
+ % ABKUERZUNGEN
+ &Datum : date .
+
+ % WIEDERHOLUNG
+ &&l : &Vorname %Name
+ &Strasse
+ &&p& &Ort
+ ------------------------------------------
+ % ABKUERZUNGEN
+ &l : lfd nr .
+ &p : f ("PLZ") .
+
+ % NACHSPANN
+ &l Adressen gedruckt.
+
+
+Dieses Beispiel enthält eine ganze Reihe interessanter Details. Als
+erstes sollten Sie registrieren, daß auch im Vorspann oder Nach­
+spann Feldmuster verwendet werden können. Soll in diesem Fall ein
+Feldinhalt aus der EUDAS-Datei eingesetzt werden, so werden beim
+Vorspann die Inhalte des ersten und beim Nachspann die Inhalte des
+letzten durch Suchmuster ausgewählten Satzes verwendet. Daher
+kann auch jeder Abschnitt einen Abkürzungsteil haben. Abkürzun­
+gen gelten jedoch für alle Abschnitte (s. '&l'); die Aufteilung in
+mehrere Abkürzungsteile fördert im wesentlichen die Übersichtlich­
+keit.
+ Versuchen Sie, an diesem Beispiel die wichtigsten Unterschiede
+zwischen dem #on("i")#Musterteil#off("i")# und dem #on("i")#Abkürzungsteil#off("i")# eines Abschnittes
+zu verstehen. Das Format des Musterteiles soll in die Ausgabe
+übernommen werden; daher ist dort die Stellung jedes Wortes wich­
+tig. Im Abkürzungsteil definieren Sie Abkürzungen ohne bestimm­
+tes Format - mit der einzigen Ausnahme, daß eine Abkürzungs­
+definition mit einem '&' in der ersten Spalte anfangen und ein
+Leerzeichen vor dem Doppelpunkt haben muß. Wie Sie sehen, dürfen
+dort Leerzeilen zur besseren Lesbarkeit eingefügt werden.
+Sie sollten bei unserem Beispiel folgende Ausgabe erhalten:
+
+
+ Adressenliste als Beispiel für Abkürzungen
+ Stand: 28.12.84
+ ------------------------------------------
+ 1 : Herbert Wegner
+ Krämergasse 12
+ 5000 Köln
+ ------------------------------------------
+ 2 : Helga Sandmann
+ Willicher Weg 109
+ 5300 Bonn 1
+ ------------------------------------------
+ 3 : Albert Katani
+ Lindenstr. 3
+ 5210 Troisdorf
+ ------------------------------------------
+ 4 : Peter Ulmen
+ Mozartstraße 17
+ 5 Köln 60
+ ------------------------------------------
+ 5 : Karin Regmann
+ Grengelweg 44
+ 5000 Köln 90
+ ------------------------------------------
+ 6 : Hubert Arken
+ Talweg 12
+ 5200 Siegburg
+ ------------------------------------------
+ 7 : Anna-Maria Simmern
+ Platanenweg 67
+ 5 Köln 3
+ ------------------------------------------
+ 8 : Angelika Kaufmann-Drescher
+ Hauptstr. 123
+ 53 Bonn 2
+ ------------------------------------------
+ 9 : Harald Fuhrmann
+ Glockengasse 44
+ 5000 Köln 1
+ ------------------------------------------
+ 10 : Friedrich Seefeld
+ Kabelgasse
+ 5000 Köln-Ehrenfeld
+ ------------------------------------------
+ 10 Adressen gedruckt.
+
+
+Nun zu den Abkürzungen im einzelnen. Das Feld 'PLZ' muß abge­
+kürzt werden, damit es rechtsbündig vor den Ort gedruckt werden
+kann. Die Abkürzung 'p' benutzt die im vorigen Kapitel beschriebe­
+ne Form zur Abfrage des Feldinhaltes.
+ 'Datum' wird als Abkürzung für das aktuelle Datum definiert,
+ein häufig benötigter Fall. 'date' ist der ELAN-Ausdruck, der das
+Datum liefert. (Bemerkung für ELAN-Programmierer: der Name der
+Abkürzung gehorcht nicht der ELAN-Syntax für Bezeichner).
+ Eine für Tabellen sinnvolle Funktion wird bei der Definition
+von 'l' verwendet. Der von EUDAS definierte Ausdruck 'lfd nr' lie­
+fert die laufende Nummer des gerade gedruckten Satzes als Text.
+Dabei ist zu beachten, daß die laufende Nummer nicht mit der Satz­
+nummer übereinstimmt, sondern nur während des Druckvorganges
+von 1 an bei jedem gedruckten Satz hochgezählt wird. Diese Funk­
+tion dient dazu, die Sätze in der Liste durchzunumerieren.
+ Die laufende Nummer soll in der Liste rechtsbündig mit Doppel­
+punkt vor dem Namen stehen. Dazu wird das Feldmuster '&&l' be­
+nutzt, eine Form, die eigentlich keinen Sinn hat (die Kombination
+'variable Länge' und 'rechtsbündig' gibt es nicht). Um ein möglichst
+kurzes Feldmuster schreiben zu können, wird in diesem Fall jedoch
+feste Länge unterstellt (auch ohne folgendes '&'). Damit hat das
+kürzeste Feldmuster fester Länge drei Zeichen sowohl im linksbün­
+digen ('&l&') wie auch im rechtsbündigen Fall ('&&l').
+
+#on("b")#Auswertungen#off("b")# Die Verwendung der Abkürzung 'l' im Nachspann
+kann als erstes Beispiel für eine Auswertungsfunktion gelten. Da
+für den Nachspann die Daten des letzten Satzes verwendet werden,
+erscheint hier die laufende Nummer des letzten Satzes und somit die
+Anzahl der Sätze, die gedruckt wurden. Das kann dazu benutzt
+werden, die Sätze zu zählen, die eine bestimmte Suchbedingung
+erfüllen. Folgendes Druckmuster zählt die Anzahl der Frauen oder
+Männer in der Datei:
+
+
+ % NACHSPANN
+ &l Personen mit dem Geschlecht '%<m/w>' vorhanden.
+ % ABKUERZUNGEN
+ &l : lfd nr .
+
+
+Wenn Sie vor dem Drucken jetzt die Suchbedingung 'm' für das Feld
+'m/w' einstellen, werden alle Männer ausgewählt. Das Drucken be­
+steht in diesem Fall nur aus dem Hochzählen der laufenden Nummer
+für jeden Mann. Im Nachspann kann das Ergebnis dann ausgegeben
+werden; zugleich soll der aktuelle Wert des Feldes 'm/w' gedruckt
+werden, damit das Druckmuster auch für das Zählen der Frauen
+verwendet werden kann.
+ Die beiden möglichen Ausgaben würden dann so aussehen:
+
+
+ 6 Personen mit dem Geschlecht 'm' vorhanden.
+
+ 4 Personen mit dem Geschlecht 'w' vorhanden.
+
+
+#on("b")#Zusammenfassung#off("b")# Wir können die Erkenntnisse dieses
+Abschnittes wie folgt zusammenfassen:
+
+* Feldmuster können auch im Vorspann und Nachspann verwendet
+ werden. Im Vorspann werden die Daten des ersten, im Nachspann
+ die Daten des letzten ausgewählten Satzes verwendet.
+
+* Der Musterteil eines Abschnittes definiert ein Format; der Ab­
+ kürzungsteil ist formatfrei.
+
+* 'lfd nr' dient zum Durchnumerieren aller gedruckten Sätze.
+
+* Ein rechtsbündiges Feldmuster hat immer auch feste Länge.
+
+#on("b")#Komplexe Abkürzungen#off("b")# Mit Hilfe von Abkürzungen können wir
+jetzt auch bessere Musterbriefe schreiben. Ein Problem, das bereits
+angesprochen wurde, besteht darin, daß in der Anrede je nach Ge­
+schlecht 'Herr' oder 'Frau' stehen soll. Um dieses Problem zu lösen,
+wird der Inhalt des Feldes 'm/w' benötigt.
+ Da in einer Abkürzung jede ELAN-Anweisung erlaubt ist, die
+einen Text liefert, können natürlich auch #on("i")#IF-Anweisungen#off("i")# verwen­
+det werden. Mit diesen Informationen können wir jetzt die Abkür­
+zung 'Anrede' definieren:
+
+
+ % ABKUERZUNGEN
+ &Anrede :
+ IF f ("m/w") = "w" THEN
+ "Frau"
+ ELSE
+ "Herr"
+ END IF .
+
+
+Für Nicht-Programmierer: Die IF-Anweisung besteht aus einer Ab­
+frage und zwei Alternativen. Die Abfrage steht zwischen dem IF und
+dem THEN und besteht in der Regel aus einer Abfrage, ob zwei
+Dinge gleich oder ungleich (<>), größer oder kleiner sind. Außerdem
+können mehrere Abfragen mit AND (und) und OR (oder) kombiniert
+werden. Näheres dazu im Kapitel 14.
+ Die Alternative hinter dem THEN wird ausgewählt, wenn die
+Abfrage zutrifft. An dieser Stelle sind wieder beliebige Ausdrücke
+erlaubt, die einen Text liefern, einschließlich erneuter IF-Anwei­
+sungen (Schachtelung). Die Alternative zwischen ELSE und END IF
+wird ausgewählt, wenn die Abfrage nicht zutrifft.
+
+#on("b")#Textkonstanten#off("b")# Bisher wurden nur ELAN-Funktionen als
+Textlie­
+feranten betrachtet ('date', 'lfd nr', 'f'). In unserem Fall werden
+aber #on("i")#Textkonstanten#off("i")# in den Alternativen der IF-Anweisung benö­
+tigt. Textkonstanten werden in ELAN in Anführungsstriche einge­
+schlossen, die aber nicht zum Text gehören. Innerhalb einer Text­
+konstanten werden Leerzeichen wie alle anderen Zeichen angesehen
+(erscheinen also auch nachher in der Ausgabe).
+ Bei solchen Abkürzungen, die längere Anweisungen umfassen,
+sollten Sie das freie Format ausnutzen und eine möglichst über­
+sichtliche Darstellung wählen. Wie Sie sehen, muß nur der Doppel­
+punkt noch in der ersten Zeile stehen, der Rest kann sich beliebig
+auf die folgenden Zeilen erstrecken.
+
+#on("b")#Beispiel#off("b")# Ein typischer Einsatz einer IF-Anweisung für die
+Anrede sieht so aus:
+
+
+ % WIEDERHOLUNG
+
+ Sehr geehrte&Anrede %<Name>!
+
+ ...
+ % ABKUERZUNGEN
+ &Anrede :
+ IF f ("m/w") = "m" THEN
+ "r Herr"
+ ELSE
+ " Frau"
+ END IF .
+
+
+Sie sollten jetzt diese Konstruktion in einen Musterbrief einfügen
+können. Probieren Sie ihn dann als Beispiel aus !
+
+#on("b")#Weitere Möglichkeiten#off("b")# Durch Verwendung von Abkürzungen ist
+es
+auch möglich, rechtsbündige Felder mit einer Länge von weniger als
+3 Zeichen zu simulieren. Dies geschieht mit Hilfe der Textoperatio­
+nen von ELAN. Ohne ELAN-Vorkenntnisse können Sie dieses Bei­
+spiel überlesen. In unserer Liste im obigen Beispiel sind die laufen­
+den Nummern höchstens zweistellig und sollten deshalb auch nur
+zwei Stellen belegen. Dies würde folgende Abkürzung ermöglichen:
+
+
+ % ABKUERZUNGEN
+ &l : text (lfd nr als zahl, 2) .
+ lfd nr als zahl : int (lfd nr) .
+
+
+Die Prozedur 'text' wird dazu benutzt, eine Zahl rechtsbündig auf
+zwei Stellen zu formatieren (s. EUMEL-Benutzerhandbuch). Da die
+Abkürzung immer eine Länge von zwei Zeichen hat, kann sie auch in
+einem Feldmuster variabler Länge eingesetzt werden. Die Attribute
+'feste Länge' und 'rechtsbündig' werden in diesem Fall also nicht
+durch das Feldmuster, sondern durch die Abkürzung selbst erzeugt.
+ Um die Prozedur 'text' anwenden zu können, muß die laufende
+Nummer als Zahl (sprich: INT-Objekt) vorliegen. Diese Umwandlung
+wird mit der Prozedur 'int' vorgenommen, die einen Text in eine
+Zahl umwandelt. Obwohl man 'int (lfd nr)' direkt in den Aufruf von
+'text' hätte schreiben können, wird hier als Demonstration dafür ein
+Refinement verwendet.
+ Refinements können in einem Abkürzungsteil neben Abkürzun­
+gen stehen und von allen Abkürzungen benutzt werden. Sie werden
+ähnlich geschrieben wie Abkürzungen, nur ihr Name muß in Klein­
+buchstaben geschrieben werden, dafür muß er nicht in der ersten
+Spalte anfangen und kann Leerzeichen enthalten. Bei komplizierte­
+ren Ausdrücken sollten Refinements zur besseren Lesbarkeit einge­
+setzt werden.
+ Sie können die IF-Anweisung auch mit beliebig vielen ELIF-
+Teilen versehen. Achten Sie jedoch darauf, daß die IF-Anweisung
+#on("i")#immer#off("i")# irgendeinen Wert liefern muß. Sie dürfen also den ELSE-Teil
+nicht weglassen. Statt einer IF-Anweisung können Sie natürlich
+auch eine SELECT-Anweisung verwenden. Es stehen Ihnen im Prin­
+zip alle werteliefernden Anweisungen von ELAN zur Verfügung.
+ Die Programmiersprache ELAN bietet Ihnen noch weit mehr
+Möglichkeiten, als hier beschrieben werden können. So können Sie
+sich eigene Prozeduren definieren und diese dann in Abkürzungen
+verwenden. In Kapitel 14 und 15 finden Sie eine Einführung in die
+wichtigsten Konstrukte, die für EUDAS gebraucht werden.
+
+
+13.2 Bedingte Musterteile
+
+Wenn größere Teile des Druckmusters in Abhängigkeit von bestimm­
+ten Daten unterschiedlich ausfallen sollen, werden die dazu benö­
+tigten Abkürzungen sehr umfangreich. Für solche Fälle kann man
+IF-Anweisungen auch im Musterteil eines Abschnitts verwenden. In
+diesem Fall werden die Alternativen der IF-Anweisung durch
+Musterzeilen dargestellt.
+ Im Musterteil müssen jedoch die Zeilen, die Teil der IF-An­
+weisung sind, von den Musterzeilen unterschieden werden. Deshalb
+werden die Anweisungszeilen durch ein '%'-Zeichen in der ersten
+#on("i")#und#off("i")# zweiten Spalte gekennzeichnet. Das zweite '%'-Zeichen dient
+zur Unterscheidung von Anweisungen an den Druckgenerator, die
+nicht an den ELAN-Compiler übergeben werden sollen.
+ Mit einer IF-Anweisung im Musterteil kann man das Anredepro­
+blem auch folgendermaßen lösen:
+
+
+ % WIEDERHOLUNG
+ %% IF f ("m/w") = "w" THEN
+ Sehr geehrte Frau &<Name>!
+ %% ELSE
+ Sehr geehrter Herr &<Name>!
+ %% END IF;
+
+
+Beachten Sie den Unterschied, daß die IF-Anweisung hier mit einem
+Semikolon abgeschlossen werden muß - in Abkürzungen mußte ja ein
+Punkt danach folgen. Außerdem darf hier der ELSE-Teil (die zweite
+Alternative) fehlen, während in einer Abkürzung in jeder Alternati­
+ve etwas stehen muß (zumindest der leere Text "").
+ Falls sich der IF-THEN-Teil über mehr als eine Zeile erstrek­
+ken soll, muß jede dieser Zeilen mit '%%' beginnen, da die Folgezei­
+len sonst als Musterzeilen gedruckt würden. Benutzen Sie in einem
+solchen Fall jedoch besser ein Refinement, das Sie im Abkürzungs­
+teil definieren müssen.
+ Sie können im Musterteil auch andere ELAN-Anweisungen
+verwenden. Der Unterschied zu Abkürzungen liegt darin, daß die
+Musterzeilen nicht als Werte angesehen werden, die die Anweisung
+liefern muß, sondern als Anweisungen, die dort aufgeführten Mu­
+sterzeilen einzusetzen und zu drucken. Daher kann im Musterteil
+auch eine FOR-Schleife sinnvoll sein, wenn in Abhängigkeit eines
+Wertes eine bestimmte Anzahl von Zeilen gedruckt werden soll.
+
+
+13.3 Übersetzung
+
+Wenn Sie bis jetzt auch als ELAN-Programmierer immer noch nicht
+ganz durchblicken, wie Sie welche ELAN-Anweisungen verwenden
+können, dann ist das noch kein Anlaß zur Sorge. Es ist kaum mög­
+lich, die genauen Auswirkungen beliebiger Anweisungen zu be­
+schreiben, ohne den Übersetzungsprozeß zu schildern, der diese
+Anweisungen zu einem ELAN-Programm zusammenbindet. Daher soll
+diese Übersetzung jetzt genauer erklärt werden.
+
+#on("b")#Übersetzungsmechanismus#off("b")# Alle Zeilen eines Abkürzungsteils
+wer­
+den direkt in das Programm übernommen, wobei der Name einer Ab­
+kürzung durch einen beliebig gewählten Refinementnamen ersetzt
+wird ('abk' + eine laufende Nummer). Alle Abkürzungen und Re­
+finements werden als globale Refinements definiert, also außerhalb
+von Prozeduren. Dadurch wird erreicht, daß sie an jeder Stelle
+verwendet werden können.
+ Damit eine Abkürzung richtig als Refinement übersetzt wird,
+muß sie ein TEXT-Objekt als Wert liefern. Die anderen Refinements
+sind beliebig, da Sie nur in selbstdefinierten Anweisungen verwen­
+det werden. Die Refinements der Abkürzungen werden in einer Zu­
+weisung an eine TEXT-Variable verwendet, damit der Druckgenera­
+tor auf den entsprechenden Wert zugreifen kann.
+ Jeder Abschnitt wird dagegen als eine Prozedur übersetzt. Jede
+Folge von Musterzeilen wird in eine Anweisung übersetzt, diese
+Musterzeilen einzusetzen und zu drucken. Jede '%%'-Anweisung
+wird einfach unverändert dazwischen geschrieben. Die Vorspann-
+Prozedur wird einmal zu Anfang aufgerufen, die Prozedur für den
+Wiederholungsteil einmal für jeden ausgewählten Satz und die Nach­
+spann-Prozedur einmal am Schluß.
+ Bei Fehlern im ELAN-Teil zeigt der Compiler das erzeugte Pro­
+gramm zusammen mit seinen Fehlermeldungen im Paralleleditor. Sie
+müssen nun die Fehlermeldung lokalisieren und anhand der eben
+gegebenen Hinweise in das ursprüngliche Druckmuster zurücküber­
+setzen, damit Sie dort den Fehler korrigieren können.
+
+#on("b")#Beispiel#off("b")# Nun müßten Sie genug Informationen haben, um
+beliebige
+ELAN-Anweisungen in das Druckmuster einfügen zu können. Als
+Beispiel wollen wir versuchen, alle Männer und Frauen in der
+Adressendatei zu zählen, ohne ein Suchmuster einstellen zu müssen
+und ohne den Druckvorgang zweimal ablaufen zu lassen (wie dies
+bei dem obigen Beispiel der Fall war). Ein erster Versuch könnte so
+aussehen:
+
+
+ % VORSPANN
+ %% INT VAR maenner, frauen;
+ %% maenner := 0;
+ %% frauen := 0;
+ % WIEDERHOLUNG
+ %% IF f ("m/w") = "m" THEN
+ %% maenner INCR 1
+ %% ELSE
+ %% frauen INCR 1
+ %% END IF
+ % NACHSPANN
+ &maenner Männer und %frauen Frauen vorhanden.
+
+
+Aber Vorsicht! In diesem Beispiel sind mehrere Fehler eingebaut.
+Finden Sie sie!
+
+#on("b")#Fehler im Beispiel#off("b")# Der erste Fehler befindet sich im
+Nachspann.
+Hier wird versucht, die Namen der beiden Variablen 'maenner' und
+'frauen' direkt in einem Feldmuster zu verwenden. Diese beiden
+Namen sind dem Druckgenerator nicht bekannt, sondern nur dem
+ELAN-Compiler. Um die Werte der beiden Variablen einsetzen zu
+können, müssen Sie also zwei geeignete Abkürzungen definieren.
+ Der zweite Fehler ist schwieriger zu finden. Wie oben gesagt,
+wird jeder Abschnitt in eine Prozedur übersetzt. Die in einem Ab­
+schnitt definierten Variablen können also nur in diesem Abschnitt
+verwendet werden (sie sind lokal) und auch nicht im Abkürzungs­
+teil, da dieser wieder global vereinbart wird. Die beiden im Vor­
+spann definierten Variablen stehen also im Wiederholungsteil und im
+Nachspann nicht zur Verfügung.
+
+#on("b")#Anweisungen im Initialisierungsteil#off("b")# Für diesen Fall gibt
+es die
+Möglichkeit, ELAN-Anweisungen vor allen Abschnitten im Initiali­
+sierungsteil zu definieren. Diese Anweisungen sind dann ebenfalls
+global. Das richtige Druckmuster finden Sie auf der nächsten Seite.
+ Natürlich könnten Sie die Initialisierung der beiden Variablen
+auch noch aus dem Vorspann herausnehmen. Denken Sie daran, daß
+Sie aus INT-Variablen erst einen Text machen müssen, ehe Sie sie
+in eine Musterzeile einsetzen können. Beachten Sie Schreibweise der
+Variablen: in ELAN können die Umlaute nicht in Bezeichnern ver­
+wendet werden, daher muß die Variable mit 'ae' geschrieben wer­
+den. Im Mustertext und in Abkürzungs- und Feldnamen können die
+Umlaute jedoch frei verwendet werden.
+
+
+ %% INT VAR maenner, frauen;
+ % VORSPANN
+ %% maenner := 0;
+ %% frauen := 0;
+ % WIEDERHOLUNG
+ %% IF f ("m/w") = "m" THEN
+ %% maenner INCR 1
+ %% ELSE
+ %% frauen INCR 1
+ %% END IF
+ % NACHSPANN
+ &m Männer und %f Frauen vorhanden .
+ % ABKUERZUNGEN
+ &m : text (maenner) .
+ &f : text (frauen) .
+
+
+
+13.4 Gruppen
+
+Der Druckgenerator bietet die Möglichkeit, Vorspann und Nachspann
+nicht nur am Anfang und am Ende, sondern auch an bestimmten
+Stellen zwischen Sätzen zu drucken. Diese Stellen sind dadurch
+bestimmt, daß ein bestimmtes Merkmal (z.B. ein Feldinhalt) seinen
+Wert ändert. Ein solches Merkmal wird im Druckmuster #on("i")#Gruppe#off("i")# ge­
+nannt.
+ Ein Beispiel für die Verwendung von Gruppen ist eine Schüler­
+datei, die nach Klassen geordnet ist. Definiert man das Feld 'Klas­
+se' als Gruppe, so wird jeweils am Ende einer Klasse ein Nachspann
+und am Beginn einer Klasse ein Vorspann gedruckt.
+ Dieses Verfahren ist eine Erweiterung der bisher beschriebenen
+Methode, indem eine Datei quasi in mehrere Dateien untergliedert
+wird, die jedoch in einem Arbeitsgang gedruckt werden können.
+Voraussetzung dafür ist jedoch, daß die Datei nach dem Gruppen­
+merkmal geordnet ist - der Druckgenerator sammelt nicht erst alle
+Schüler einer Klasse aus der Datei, sondern erwartet sie hinter­
+einander.
+
+#on("b")#Gruppendefinition#off("b")# Eine Gruppe wird im Initialisierungsteil
+des
+Druckmusters (also vor allen Abschnitten) definiert. Notwendige
+Daten sind eine Nummer zur Identifizierung und das Merkmal. Die
+Nummer sollte am sinnvollsten von 1 an vergeben werden; die mög­
+lichen Werte sind nach oben hin beschränkt. Das Merkmal ist ein
+beliebiger ELAN-Ausdruck, der einen Text liefert. Sinnvollerweise
+wird er den Inhalt eines Feldes enthalten.
+ Gruppendefinitionen müssen nach allen ELAN-Anweisungen im
+Initialisierungsteil folgen, und zwar, weil die Gruppendefinitionen
+alle in einer Prozedur zusammengefaßt werden, die bei jedem neuen
+Satz auf Gruppenwechsel testet.
+ Unter der Annahme, daß die oben erwähnte Schülerdatei ein
+Feld 'Klasse' besitzt, würde die Gruppe wie folgt definiert:
+
+
+ % GRUPPE 1 f ("Klasse")
+
+
+Nach der Anweisung 'GRUPPE' folgt die Gruppennummer und dann
+ein ELAN-Ausdruck. Die ganze Definition muß in einer Zeile stehen;
+reicht der Platz nicht aus, müssen Sie in einem Abkürzungsteil ein
+Refinement definieren.
+
+#on("b")#Klassenliste#off("b")# Das komplette Druckmuster für die
+Klassenliste könn­
+te folgendes Aussehen haben, wenn außer 'Klasse' auch noch die
+Felder 'Name' und 'Vorname' vorhanden sind:
+
+
+ % GRUPPE 1 f ("Klasse")
+ % VORSPANN
+ Klassenliste für Klasse &Klasse
+ ----------------------------
+ % WIEDERHOLUNG
+ &Vorname %Name
+ % NACHSPANN
+ \#page\#
+
+
+Wenn eine Gruppe definiert ist, werden im Nachspann immer die
+Feldinhalte des letzten Satzes vor dem Gruppenwechsel gedruckt, im
+Vorspann die Inhalte des ersten Satzes nach dem Wechsel. Daher
+kann hier im Vorspann die Klasse gedruckt werden, da sie sich erst
+ändert, wenn schon wieder der nächste Vorspann gedruckt wird.
+
+#on("b")#Mehrere Gruppen#off("b")# Wie die Identifikation über eine
+Gruppennummer
+vermuten läßt, können Sie mehrere Gruppen definieren. Nachspann
+und Vorspann werden jeweils gedruckt, wenn sich das Merkmal ir­
+gendeiner Gruppe ändert. Ob eine bestimmte Gruppe gewechselt hat,
+kann mit der Abfrage
+
+
+ BOOL PROC gruppenwechsel (INT CONST gruppennummer)
+
+
+in einer IF-Anweisung ermittelt werden. Vor dem ersten und nach
+dem letzten Satz wechseln automatisch alle Gruppen.
+ Die ganze Datei bildet eine Quasi-Gruppe mit der Nummer 0.
+Sie ist immer definiert und wechselt nur vor dem ersten und nach
+dem letzten Satz. Sie ist es, die bewirkt, daß Vorspann und Nach­
+spann in ihrer normalen Weise gedruckt werden.
+
+#on("b")#Anwendungsbeispiel#off("b")# Um einige der Möglichkeiten zu
+illustrieren,
+die durch Gruppen geschaffen werden, wollen wir als Beispiel eine
+Anwendung betrachten, die neue Wege für die Benutzung von EUDAS
+aufzeigt.
+ Aus einer Datei, in der für jede Bestellung der Kunde, der Ar­
+tikel, die bestellte Menge und der Einzelpreis des Artikels einge­
+tragen werden, sollen anschließend Rechnungen gedruckt werden.
+Die Datei soll folgende Felder haben:
+
+
+ 'Kundennummer'
+ 'Artikelnummer'
+ 'Einzelpreis'
+ 'Menge'
+
+
+Als Voraussetzung müssen die Bestellungen in der Datei jeweils
+nach Kunden geordnet vorliegen. Die Kundennummer wird als Gruppe
+definiert, so daß die Bestellungen eines Kunden zu einer Rechnung
+zusammengefaßt werden können. Das Druckmuster rechnet dann die
+einzelnen Preise zusammen und gibt eine Endsumme aus.
+ Damit in der Rechnung Name und Adresse des Kunden auftau­
+chen können, wird zu der Bestellungsdatei die Kundendatei gekop­
+pelt, die folgende Felder haben soll:
+
+
+ 'Kundennummer'
+ 'Name'
+ 'Vorname'
+ 'Strasse'
+ 'PLZ'
+ 'Ort'
+
+
+Stellen Sie sich zum Ausprobieren des folgenden Druckmusters ge­
+gebenenfalls eigene Daten zusammen. Hier nun das Druckmuster:
+
+
+ %% REAL VAR gesamtpreis, summe;
+ % GRUPPE 1 f ("Kundennummer")
+ % VORSPANN
+ %% summe := 0.0;
+ Fa. Kraus & Sohn
+ Schotterstr. 10
+
+ 5000 Köln 1
+ &Vorname %Name
+ &Strasse
+
+ &PLZ &Ort &Datum
+
+ R E C H N U N G
+ ===============
+
+ Menge Artikelnr. Einzelpreis Gesamtpreis
+ ------------------------------------------------
+ % ABKUERZUNGEN
+ &Datum : date .
+
+ % WIEDERHOLUNG
+ %% gesamtpreis := round
+ %% (wert ("Einzelpreis") * wert ("Menge"), 2);
+ %% summe INCR gesamtpreis;
+ &Menge &Artikelnummer &&&&epr&& &&&&gpr&&
+ % ABKUERZUNGEN
+ &epr : f ("Einzelpreis") .
+ &gpr : zahltext (gesamtpreis, 2) .
+
+ % NACHSPANN
+ ------------------------------------------------
+ Summe: &&&&sum&&
+ + 14% MWSt. &&&Mwst&&
+ =========
+ Endbetrag &&&&end&&
+ \#page\#
+ % ABKUERZUNGEN
+ &sum : zahltext (summe, 2) .
+ &Mwst : zahltext (mwst, 2) .
+ &end : zahltext (summe + mwst, 2) .
+ mwst : round (summe * 0.14, 2) .
+
+
+Im Initialisierungsteil dieses Druckmusters wird die Kundennummer
+als Gruppe definiert. Dies hat zur Folge, daß für jeden neuen Kun­
+den eine neue Rechnung begonnen wird, nachdem vorher im Nach­
+spann die Rechnungssumme des vorherigen Kunden berechnet und
+ausgedruckt wurde. Vor dieser Gruppendefinition sind 'gesamtpreis'
+und 'summe' definiert, die später als globale Variablen zur Verfü­
+gung stehen sollen. Diese Zeile darf nicht nach der Gruppendefini­
+tion stehen.
+ Im Vorspann wird der Kopf der Rechnung angegeben. Dieser
+enthält neben den Daten des Kunden (aus der gekoppelten Kun­
+dendatei) noch das Datum. Die Kundennummer wird nur zum Kop­
+peln und als Gruppenmerkmal benötigt, erscheint also nicht auf der
+Rechnung.
+ Es fällt auf, daß im Firmennamen ein '&'-Zeichen auftaucht,
+das doch für die Markierung von Feldmustern reserviert ist. Die
+beiden Musterzeichen können jedoch im normalen Text auftauchen,
+wenn ihnen direkt ein Leerzeichen folgt. In diesem Fall werden Sie
+nicht als Beginn eines Feldmusters interpretiert, sondern unverän­
+dert gedruckt. Der gleiche Fall taucht noch mit '%' im Nachspann
+auf.
+ Im Wiederholungsteil wird zunächst aus dem Einzelpreis und der
+Menge des jeweiligen Artikels der Gesamtpreis für diesen Artikel
+berechnet. Für die Abfrage der Feldinhalte wird die Funktion 'wert'
+verwendet, die wie 'f' funktioniert, jedoch gleich einen REAL-Wert
+liefert.
+ Zu beachten ist, daß 'wert' wie beim Sortieren von Zahl alle
+Sonderzeichen ignoriert. Weiterhin müssen die Zahlen mit dem ein­
+gestellten Dezimalkomma geschrieben werden (also normalerweise
+mit Komma), damit ihr Wert richtig erkannt wird. Anderenfalls soll­
+ten Sie den Dezimalpunkt einstellen (s. 11.1).
+ Damit kaufmännisch richtig gerechnet wird, wird der Gesamt­
+preis auf 2 Nachkommastellen gerundet und erst dann aufsummiert.
+Würde der Gesamtpreis nur zum Einsetzen gerundet, könnten bei der
+anschließenden Addition der nicht gerundeten Werte eine falsche
+Gesamtsumme entstehen.
+ Erst nach diesen Berechnungen kann die Musterzeile folgen, in
+die die Werte dann eingesetzt werden. Um eine Ausgabe mit zwei
+Nachkommastellen zu erzeugen, wird die von EUDAS definierte
+Funktion 'zahltext' benutzt. Diese erzeugt aus einem REAL-Wert
+einen Text mit der angegebenen Anzahl von Kommastellen und setzt
+das korrekte Dezimalkomma ein. Das Ergebnis dieser Funktion wird
+dann rechtsbündig eingesetzt.
+ Im Nachspann wird dann der summierte Wert mit aufgeschlage­
+ner Mehrwertsteuer gedruckt. Die Mehrwertsteuer muß ebenfalls auf
+zwei Nachkommastellen gerundet werden.
+
+#on("b")#Erweiterung#off("b")# Zur Erweiterung könnten Sie die Bestelldatei
+noch mit
+einer Artikeldatei koppeln, die etwa folgende Struktur haben würde:
+
+
+ 'Artikelnummer'
+ 'Bezeichnung'
+ 'Einzelpreis'
+
+
+In diesem Fall könnten Sie noch jeweils die Artikelbezeichnung in
+eine Rechnungszeile drucken. Außerdem würde der Preis zentral
+gespeichert. Eine entsprechende Änderung des Druckmusters sollte
+Ihnen keine Schwierigkeiten bereiten.
+
+
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.14 b/app/eudas/4.3/doc/eudas.hdb.14
new file mode 100644
index 0000000..1aa3c87
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.14
@@ -0,0 +1,724 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (151)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+14 Ausdrücke in ELAN
+
+
+
+14.1 Was sind Ausdrücke ?
+
+In diesem Kapitel wollen wir uns mit ELAN-Ausdrücken beschäfti­
+gen, wie sie für EUDAS gebraucht werden. Natürlich kann dies keine
+ernsthafte Einführung für ELAN-Programmierer sein - mit solchen
+Ambitionen halten Sie sich am besten an die entsprechende ELAN-
+Literatur.
+ Dieser Text richtet sich eher an den Benutzer, der kaum Erfah­
+rung mit ELAN hat, aber die Möglichkeiten von EUDAS optimal nut­
+zen will. Viele fortgeschrittene Fähigkeiten von EUDAS laufen ja
+über ELAN-Programme.
+
+#on("b")#Vorkommen#off("b")# Sie haben ELAN-Ausdrücke bereits an
+verschiedenen
+Stellen eingesetzt, wenn Sie sich mit den vorhergehenden Kapiteln
+befaßt haben. ELAN-Ausdrücke werden in nahezu allen Verarbei­
+tungsfunktionen benötigt.
+ Im Druckmuster dienen sie dazu, den Inhalt eines Feldmusters
+festzulegen. Die Definition einer Abkürzung besteht immer aus dem
+Namen der Abkürzung und einem Ausdruck. Ebenso wird in einer
+Gruppendefinition ein Ausdruck angegeben.
+ Beim Kopiermuster und beim Änderungsmuster besteht jeweils
+die rechte Seite einer Anweisung aus einem Ausdruck. Weiterhin
+werden Ausdrücke auch in anderen ELAN-Konstruktionen benötigt,
+wie zum Beispiel direkt am Anfang einer IF-Anweisung.
+
+#on("b")#Bedeutung#off("b")# Ein Ausdruck steht allgemein für einen Wert. Im
+ein­
+fachsten Fall kann dies eine Konstante sein, der Wert des Aus­
+drucks ändert sich also nicht. Anderenfalls spricht man von einem
+zusammengesetzten Ausdruck. Dessen Wert ergibt sich dann durch
+die Ausführung der im Ausdruck angegebenen Operationen. Dieser
+Wert kann je nach dem aktuellen Zustand des Systems verschieden
+sein, da er jedes Mal neu berechnet wird, wenn er gebraucht wird.
+ Ein Beispiel für einen zusammengesetzten Ausdruck ist 2+2
+Dieser Ausdruck steht für den Wert 4.
+ Der Wert eines Ausdrucks ist das, was uns eigentlich interes­
+siert. Beim Druckvorgang wird dieser Wert dann gedruckt, beim
+Kopieren und Verändern in ein Feld eingetragen.
+
+#on("b")#Zusammensetzung#off("b")# Ausdrücke lassen sich aus verschiedenen
+Ele­
+menten zusammensetzen. Grundlage bilden die Konstanten. Konstan­
+ten können durch #on("i")#Operatoren#off("i")# miteinander verknüpft werden. So ist
+in dem Ausdruck 2+3 das '+' ein Operator, der die Konstanten 2
+und 3 verknüpft. Das Ergebnis der Verknüpfung hängt natürlich vom
+jeweiligen Operator ab.
+ Wie Sie schon in der Schule gelernt haben ("Punktrechnung vor
+Strichrechnung"), muß man die Reihenfolge der Operatoren festlegen,
+wenn mehrere Operatoren im Spiel sind. Ähnliche Regeln gibt es für
+alle Operatoren in ELAN.
+ Wenn eine andere Reihenfolge der Operatoren erwünscht ist,
+können Sie diese durch Einsatz von Klammern verändern. Auch dies
+dürfte Ihnen aus der Schule noch in Erinnerung sein. Der Unter­
+schied in ELAN ist lediglich, daß es dort einige zusätzliche Opera­
+toren gibt, die Ihnen nicht aus der Mathematik vertraut sind.
+ Ein weiteres Konstruktionselement von Ausdrücken sind #on("i")#Funk­
+tionen#off("i")#. Auch diese kennen Sie aus der Schule. Lediglich die
+Schreibweise muß für den "dummen" Computer etwas ausführlicher
+gehalten werden (Beispiel: sin (3.14 * x)).
+ Die Argumente der Funktion hinter dem Funktionsnamen müssen
+auf jeden Fall in Klammern stehen. In der Terminologie der Pro­
+grammiersprachen spricht man von #on("i")#Parametern#off("i")#. Parameter können
+wieder komplexe Ausdrücke sein. Bei Funktionen mit mehreren
+Parametern werden diese durch Komma getrennt:
+
+
+ min (2.5 * x, x + 1.25)
+
+
+
+14.2 Datentypen
+
+Bevor wir beginnen, konkrete Ausdrücke zu behandeln, müssen wir
+erst das Konzept der #on("i")#Datentypen#off("i")# einführen. Grundidee dabei ist,
+daß es verschiedene Klassen von Werten gibt, die nicht einfach
+untereinander gemischt werden können.
+ So gibt es in ELAN einen grundlegenden Unterschied zwischen
+#on("i")#Zahlen#off("i")# und #on("i")#Texten#off("i")#. Texte bestehen aus einer beliebigen Aneinan­
+derreihung von Zeichen, die im Normalfall nur für den betrachten­
+den Menschen eine Bedeutung haben. Mit Zahlen kann man dagegen
+Berechnungen anstellen.
+ Der tiefere Grund für die Trennung in verschiedene Typen ist
+also, daß für jeden Typ gewisse Operationen definiert snd, die nur
+für diesen Typ sinnvoll sind. So ist zum Beispiel die Addition der
+beiden Texte "abc" und "-/-" völlig sinnlos.
+ Aber nicht nur die Operationen sind verschieden, sondern auch
+die interne Darstellung im Rechner. So werden der Text "1234" und
+die Zahl 1234 völlig anders gespeichert, obwohl man ihnen die glei­
+che Bedeutung beimessen könnte.
+
+#on("b")#Grundtypen#off("b")# In ELAN gibt es vier verschiedene Grundtypen,
+die für
+uns wichtig sind. Sie können sich in ELAN auch eigene Typen
+schaffen, dies geht jedoch weit über unsere Bedürfnisse hinaus.
+ Der in EUDAS am meisten verwendete Typ heißt #on("i")#TEXT#off("i")#. TEXT-
+Objekte bestehen aus einer Folge von 0 bis 32000 Zeichen. Die Zei­
+chen entstammen einem Satz von 256 verschiedenen Symbolen, die
+jeweils eine andere Darstellung haben. Einige der Zeichen lassen
+sich überhaupt nicht darstellen, sondern führen bestimmte Funktio­
+nen aus (zum Beispiel Bildschirm löschen).
+ Sämtliche Feldinhalte einer EUDAS-Datei sind TEXTe, ebenso
+die Zeilen von Textdateien. Auch Datei- und Feldnamen sind
+TEXTe. Von daher besteht eigentlich kein Grund, warum Sie sich
+außer zur Programmierung noch mit anderen Datentypen beschäfti­
+gen sollten.
+ Neben den Texten gibt es noch die Zahlen. Diese sind in ihrer
+internen Darstellung so beschaffen, daß ein effizientes Rechnen mit
+ihnen möglich ist. Andererseits können sie nicht mehr beliebige
+Informationen darstellen, sondern haben eine sehr eingeschränkte
+Bedeutung.
+ Um unterschiedichen Bedürfnissen gerecht zu werden, gibt es in
+ELAN zwei verschiedene Zahltypen. Der Typ #on("i")#INT#off("i")# umfaßt nur ganze
+Zahlen ohne Kommastellen. Damit die Zahl möglichst wenig Spei­
+cherplatz belegt, ist der Wertebereich bei den meisten Rechnern auf
+-32768..32767 beschränkt (die krummen Zahlen ergeben sich wegen
+der Binärarithmetik des Rechners). Dieser Typ eignet sich am besten
+zum Abzählen und zum Auswählen aus einer festen Anzahl von
+Objekten (zum Beispiel Feld 1 bis Feld 255).
+ Zum eigentlichen Rechnen gibt es den Typ #on("i")#REAL#off("i")#. Dieser umfaßt
+auch Kommazahlen. Genauigkeit, Wertebereich und Darstellung sind
+nahezu identisch mit den Möglichkeiten eines Taschenrechners. der
+Typ REAL wird immer dann verwendet, wenn mit realen Größen
+(Geldbeträge, physikalische Werte) gerechnet werden muß.
+ Zuletzt gibt es noch den Typ #on("i")#BOOL#off("i")#. Er hat nur zwei mögliche
+Werte, nämlich TRUE (wahr) und FALSE (falsch). Er wird dazu benö­
+tigt, Ausdrücke zu schreiben, die den Zweig einer IF-Anweisung
+bestimmen.
+
+#on("b")#Denotation#off("b")# ELAN verfügt über einen strengen Typenschutz;
+das
+heißt, Objekte verschiedenen Typs dürfen nicht gemischt werden.
+Daher muß schon bei der Schreibweise der Konstanten festgelegt
+sein, welchen Typ die Konstante hat.
+ Bei Texten geschieht dies durch den Einschluß in Anführungs­
+striche. Die Anführungsstriche sorgen gleichzeitig auch für eine
+Abgrenzung der Zeichen des Textes und des umgebenden Programms.
+Sie kennen diese Schreibweise bereits von vielen Stellen in EUDAS.
+ Ebenfalls keine Probleme bereitet der Typ BOOL, da die
+Schreibweise der beiden möglichen Werte TRUE und FALSE eindeutig
+ist.
+ Problematisch wird es bei den Zahlen. Da die ganzen Zahlen in
+den rationalen Zahlen enthalten sind, muß für die ganzen Zahlen
+durch die Schreibweise festgelegt werden, zu welchem der beiden
+Typen sie gehören. Man hat festgelegt, daß REAL-Zahlen immer mit
+Komma geschrieben werden müssen, während Zahlen ohne Komma den
+Typ INT haben (das Komma wird in ELAN bei den REAL-Zahlen in
+internationaler Schreibweise als Punkt notiert).
+ So ist 4 eine INT-Zahl, während 4.0 den Typ REAL besitzt.
+Denken Sie in Zukunft immer daran, welcher Zahltyp jeweils ver­
+langt wird und richten Sie die Schreibweise danach.
+
+#on("b")#Unterschied zu Feldtypen#off("b")# Verwechseln Sie die hier
+vorgestellten
+Datentypen nicht mit den Feldtypen einer EUDAS-Datei. Die Feld­
+typen beziehen sich immer auf den gleichen Datentyp, nämlich
+TEXT. Die Feldtypen bestimmen lediglich die spezielle Behandlung
+des Feldes beim Suchen und Sortieren, während Datentypen tat­
+sächlich Unterschiede in der Speicherung und den anwendbaren
+Operationen bedeuten.
+ Daher können Sie Feldtypen auch nach Bedarf ändern, während
+der Datentyp eines Objekts ein für alle Mal feststeht. Merken Sie
+sich, daß Feldinhalte in EUDAS immer den Typ TEXT haben.
+
+#on("b")#Umwandlungen#off("b")# Obwohl verschiedene Datentypen nicht
+miteinander
+gemischt werden dürfen, können sie mit speziellen Funktionen in­
+einander umgewandelt werden. So ist zum Beispiel die Addition von
+1 und 1.5 verboten, aber der folgende Ausdruck
+
+
+ real (1) + 1.5
+
+
+liefert den Wert 2.5 mit dem Typ REAL. Umgekehrt geht die Um­
+wandlung mit der Funktion 'int', dabei werden jedoch die Nachkom­
+mastellen abgeschnitten. Weitere Hinweise dazu erhalten Sie im
+Abschnitt 14.4.
+ Wichtiger jedoch ist die Umwandlung von Zahlen in TEXT-Ob­
+jekte. Was Sie auf Ihrem Bildschirm oder Ausdruck sehen, sind ja
+immer nur Zeichenfolgen und damit Texte. Zahlen (INT oder REAL)
+in ihrer internen Darstellung können Sie prinzipiell nicht sehen. Sie
+müssen zur Darstellung immer in Texte umgewandelt werden.
+ Auch beim Rechnen mit Werten aus EUDAS-Dateien müssen
+mehrere Umwandlungen stattfinden. Der Feldinhalt, der ja ein TEXT
+ist, muß zunächst in eine Zahl umgewandelt werden. Dann wird mit
+dieser Zahl gerechnet. Wenn das Ergebnis wieder in ein Feld einge­
+tragen oder gedruckt werden soll, muß eine Rückumwandlung in
+einen Text vorgenommen werden.
+ Die zum Umwandeln benötigten Funktionen werden ebenfalls im
+Abschnitt 14.4 besprochen.
+
+#on("b")#Funktionsbeschreibung#off("b")# In den zwei folgenden Abschnitten
+sollen
+die wichtigsten Funktionen und Operatoren anhand von Beispielen
+beschrieben werden. Da jede Funktion nur auf bestimmte Datentypen
+angewendet werden kann, gibt es eine Notation, die genau die Form
+eines Funktionsaufrufs festlegt.
+
+
+ INT PROC min (INT CONST a, b)
+
+
+Die obige Schreibweise hat folgende Bedeutung: Spezifiziert wird die
+Funktion 'min', die als Ergebnis einen INT-Wert liefert (das INT
+ganz links). Die Bezeichnung PROC gibt an, daß es sich um eine
+Funktion handelt. In Klammern ist dann angegeben, welche Parame­
+ter verwendet werden müssen. Die Funktion hat zwei Parameter,
+beide vom Typ INT. Die Bezeichnung CONST gibt an, daß auch Kon­
+stanten verwendet werden dürfen (Normalfall).
+ Zu beachten ist, daß bei jedem Aufruf beide Parameter vorhan­
+den und vom Typ INT sein müssen. Anderenfalls gibt es eine Feh­
+lermeldung.
+ Die gleiche Schreibweise wird auch zur Spezifikation von Ope­
+ratoren verwendet:
+
+
+ INT OP + (INT CONST a, b)
+
+
+Jedoch dürfen Operatoren nicht mit Parametern in Klammern ge­
+schrieben werden, sondern der Operator wird zwischen die Parameter
+geschrieben.
+ Eine Besonderheit von ELAN ist es, daß es verschiedene Opera­
+toren und Funktionen mit gleichem Namen geben kann. Die Funktio­
+nen werden nur unterschieden nach dem Typ ihrer Parameter. So
+gibt es nicht nur den oben genannten Operator '+', sondern auch
+den folgenden:
+
+
+ REAL OP + (REAL CONST a, b)
+
+
+Obwohl im Aussehen gleich, handelt es sich doch um verschiedene
+Operatoren mit möglicherweise völlig verschiedener Wirkung. Dies
+sieht man an diesem Beispiel:
+
+
+ TEXT OP + (TEXT CONST a, b)
+
+
+Dieser Operator führt nun keine Addition aus, sondern eine #on("i")#Verket­
+tung#off("i")# zweier Texte. Je nach Typ der Parameter wird der entspre­
+chende Operator ausgesucht.
+
+
+14.3 TEXT-Funktionen
+
+In diesem Abschnitt wollen wir die wichtigsten Funktionen und
+Operatoren zur Behandlung von Texten beschreiben. Wie Sie noch
+sehen werden, spielt dabei aber auch der Typ INT eine gewisse
+Rolle.
+
+#on("b")#EUDAS-Abfragen#off("b")# Die wichtigste Funktion zur Abfrage von
+Inhal­
+ten der aktuellen Datei sollten Sie bereits kennen:
+
+
+ TEXT PROC f (TEXT CONST feldname)
+
+
+Neu ist eigentlich nur die Schreibweise der Spezifikation. Sie sollten
+aber in der Lage sein, daraus einen konkreten Ausdruck zu kon­
+struieren. Bisher haben wir immer die Schreibweise
+
+
+ f ("Feldname")
+
+
+verwendet. Dies ist jedoch nur ein Beispiel. Die korrekte Angabe
+finden Sie oben.
+ Die Funktion 'f' darf natürlich nicht angewendet werden, wenn
+keine Datei geöffnet ist. In die Verlegenheit kommen Sie aber nur
+beim Ausprobieren, denn alle gefährlichen EUDAS-Funktionen sind
+sonst gesperrt.
+ Falls das angegebene Feld nicht existiert, wird mit einer Feh­
+lermeldung abgebrochen. Beachten Sie, daß dies immer erst bei der
+Ausführung festgestellt werden kann. Bei der Eingabe, zum Beispiel
+eines Druckmusters, kann dies noch nicht überprüft werden.
+ Eine weitere Abfrage, die EUDAS während des Druckens ermög­
+licht, ist die Funktion
+
+
+ TEXT PROC lfd nr
+
+
+Diese hat keine Parameter und liefert die laufende Nummer des
+gedruckten Satzes.
+ Diese beiden Funktionen können als Ausgangsbasis dienen zur
+Manipulation mit weiteren Funktionen.
+
+#on("b")#Verkettung#off("b")# Zur Verkettung von Teiltexten gibt es den oben
+schon
+beschriebenen Operator '+'. Wenn Sie mehr als zwei Texte verketten
+wollen, können Sie den Operator beliebig hintereinander verwenden:
+
+
+ f ("PLZ") + " " + f ("Ort")
+
+
+Wie in diesem Beispiel können Sie sowohl Konstanten als auch Tex­
+te, die von anderen Funktionen geliefert werden, verketten. Beach­
+ten Sie, daß die Texte immer ohne Zwischenraum aneinandergehängt
+werden; daher wird im obigen Beispiel ein Leerzeichen extra ange­
+geben.
+ Wenn Sie eine bestimmte Anzahl von gleichen Zeichen haben
+möchten (zum Beispiel für horizontale Linien oder große Zwischen­
+räume), können Sie dafür folgenden Operator verwenden:
+
+
+ TEXT OP * (INT CONST anzahl, TEXT CONST einzeltext)
+
+
+Hier sehen Sie als Beispiel einen Operator, der mit verschiedenen
+Datentypen arbeitet. Sie müssen die Parameter jedoch immer in der
+angegebenen Reihenfolge benutzen. Das folgende Beispiel ist kor­
+rekt:
+
+
+ 20 * "-"
+
+
+während dies nicht erlaubt ist:
+
+
+ "-" * 20
+
+
+Wieder können Sie diesen Operator mit anderen Funktionen verknü­
+pfen:
+
+
+ "!" + 10 * " " + "!" + 5 * "-" + "!"
+
+
+Da der Multiplikationsoperator Vorrang vor der Addition hat, kom­
+men Sie hier sogar ohne Klammern aus (überlegen Sie sich, wo ein
+Fehler auftreten würde, wenn dies nicht so wäre). Als Ergebnis
+dieses komplexen Ausdrucks ergäbe sich der folgende Text:
+
+
+ "! !-----!"
+
+
+#on("b")#Teiltexte#off("b")# Um auch Teile von Texten bearbeiten zu können,
+werden
+die Zeichen eines Textes von 1 an (mit INT-Zahlen) durchnumeriert.
+Anhand dieser Positionen können Sie Teiltexte extrahieren.
+ Damit Sie die Position des letztes Zeichens (und damit die An­
+zahl der Zeichen) erfragen können, gibt es die Funktion
+
+
+ INT PROC length (TEXT CONST text)
+
+
+Wieviel Zeichen in einem Feld stehen, können Sie also mit
+
+
+ length (f ("Feldname"))
+
+
+erfahren.
+ Einen Teiltext bekommen Sie mit der Funktion 'subtext'. Diese
+gibt es in zwei Ausführungen.
+
+
+ TEXT PROC subtext (TEXT CONST text, INT CONST anfang)
+
+
+liefert den Teiltext von einer bestimmten Position an (einschließ­
+lich) bis zum Textende. Mit
+
+
+ TEXT PROC subtext (TEXT CONST t, INT CONST anf, ende)
+
+
+können Sie auch die Position des letzten Zeichens (einschließlich)
+angeben. Daher würden die beiden folgenden Aufrufe
+
+
+ subtext (f ("Feldname"), 1)
+ subtext (f ("Feldname"), 1, length (f ("Feldname")))
+
+
+den Feldinhalt unverändert liefern. Ein weiteres Beispiel:
+
+
+ subtext ("Ein Text als Beispiel", 5, 8)
+
+
+liefert als Ergebnis "Text".
+ Es gibt noch den Operator 'SUB', der jeweils nur ein Zeichen
+aus dem Text liefert:
+
+
+ TEXT OP SUB (TEXT CONST text, INT CONST stelle)
+
+
+Der Aufruf ist gleichwertig zu einem Aufruf von 'subtext', in dem
+beide Stellen gleich sind.
+ Bei beiden Funktionen wird nicht vorhandener Text einfach
+ignoriert. So liefert
+
+
+ subtext ("Hallo", 4, 8)
+
+
+das Ergebnis "lo" und
+
+
+ "Hallo" SUB 10
+
+
+den leeren Text "".
+
+#on("b")#Verschachtelte Ausdrücke#off("b")# Wie Sie bereits gesehen haben,
+kann
+man Ausdrücke ineinander verschachteln. Dies ist in unserem Fall
+sehr nützlich, wenn Teiltexte bestimmt werden sollen, deren Posi­
+tion nicht konstant ist. Ein Beispiel, in dem 'length' bei der Fest­
+legung der Endposition verwendet wird, haben Sie weiter oben
+bereits gesehen.
+ Als weitere Möglichkeit können Sie mit Positionen, die ja INT-
+Zahlen sind, ganz normal rechnen. Folgender Ausdruck liefert zum
+Beispiel die letzten drei Zeichen eines Feldes:
+
+
+ subtext (f ("Feldname"), length (f ("Feldname")) - 2)
+
+
+Wichtig ist, daß ein Ausdruck, der wieder als Parameter für einen
+anderen Ausdruck verwendet werden soll, den richtigen Typ hat,
+der von dem anderen Ausdruck verlangt wird.
+ In dem obigen Beispiel muß als Position ein INT verwendet
+werden. Diese Position wird vom Operator '-' berechnet. Es gibt
+aber nur einen Subtraktionsoperator, der einen INT liefert, nämlich
+den, der wiederum zwei INTs subtrahiert. Glücklicherweise sind
+sowohl 'length' als auch die 2 vom Typ INT, anderenfalls wäre der
+Ausdruck fehlerhaft. 'length' wiederum benötigt einen TEXT als
+Parameter, der von der Funktion 'f' stammt, die als Parameter eben­
+falls einen TEXT verlangt.
+ Wie Sie sehen, kann es durchaus verwickelt zugehen, wenn ein
+Ausdruck aus den verschiedensten Teilausdrücken unterschiedlichen
+Typs zusammengesetzt ist. Die gleiche Überprüfung wie eben ge­
+schildert sollten Sie bei jedem Ausdruck vornehmen, damit keine
+Fehlermeldung erscheint.
+
+#on("b")#Variable Positionen#off("b")# Zur Berechnung von Positionen gibt es
+noch eine weitere nützliche Prozedur, nämlich
+
+
+ INT PROC pos (TEXT CONST text, teiltext)
+
+
+Sie liefert die Position, an der der angegebene Teiltext zum ersten
+Mal in dem Text vorkommt, oder 0, wenn der Teiltext nicht darin
+vorkommt. So ist
+
+
+ pos ("Hallo", "l") = 3
+
+
+und
+
+
+ pos ("Hallo", "lo") = 4
+
+
+und
+
+
+ pos ("Hallo", "xx") = 0
+
+
+Diese Funktion kann zum Beispiel dazu verwendet werden, ein Feld
+in mehrere Teile aufzuspalten. Sind zum Beispiel Name und Vorname
+in einem Feld durch Leerzeichen getrennt hintereinandergeschrie­
+ben, liefert
+
+
+ subtext (f ("Name"), 1, pos (f ("Name"), " ") - 1)
+
+
+den Vornamen und entsprechend
+
+
+ subtext (f ("Name"), pos (f ("Name"), " ") + 1)
+
+
+den Nachnamen. Soll die Position erst ab einer gewissen Stelle ge­
+sucht werden, gibt es noch die folgende Variation der Funktion:
+
+
+ INT PROC pos (TEXT CONST text, teiltext, INT CONST ab)
+
+
+Bei dieser Funktion wird erst ab der angegebenen Stelle einschließ­
+lich gesucht.
+
+
+14.4 Rechenfunktionen
+
+#on("b")#Umwandlungen#off("b")# Bevor mit dem Inhalt eines Feldes gerechnet
+wer­
+den kann (auch wenn das Feld den Feldtyp ZAHL hat), muß der Wert
+des Feldinhaltes als REAL-Zahl berechnet werden. Dazu gibt es die
+Funktion
+
+
+ REAL PROC wert (TEXT CONST feldname)
+
+
+Die Funktion 'wert' ignoriert alle Sonderzeichen in dem Feld außer
+dem Minuszeichen (als Vorzeichen) und dem eingestellten Dezimal­
+komma. Wenn das Feld 'Summe' beispielsweise "-***20,09 DM" ent­
+hält, ergibt sich
+
+
+ wert ("Summe") = 20.09
+
+
+Zum kaufmännischen Rechnen ist es manchmal erforderlich, den Wert
+auf eine bestimmte Anzahl von Nachkommastellen zu runden. Diese
+Anzahl kann man bei einer Variante von 'wert' als Parameter ange­
+ben:
+
+
+ REAL PROC wert (TEXT CONST feldname,
+ INT CONST kommastellen)
+
+
+Mit den so erhaltenen Werten können Sie dann die weiter unten
+beschriebenen Berechnungen durchführen. Bevor Sie das Ergebnis
+jedoch drucken oder in ein Feld eintragen können, müssen Sie den
+REAL-Wert wieder in einen TEXT verwandeln. Dazu dient die Funk­
+tion
+
+
+ TEXT PROC zahltext (REAL CONST wert,
+ INT CONST kommastellen)
+
+
+Der übergebene Wert wird mit der gewünschten Anzahl von Komma­
+stellen als Text formatiert. Dazu wird der Wert gerundet. Außerdem
+wird statt eines Punktes das eingestellte Dezimalkomma eingesetzt.
+Die Länge des Textes richtet sich nach der Anzahl von benötigten
+Stellen, es werden also keine führenden Nullen oder Leerzeichen
+eingesetzt (dafür kann man den Text beim Drucken ja rechtsbündig
+einsetzen).
+ Wird 0 als Kommastellen angegeben, wird auch kein Dezimal­
+komma erzeugt (Darstellung wie ein INT). Als Abkürzung können Sie
+auch
+
+
+ TEXT PROC zahltext (TEXT CONST feldname,
+ INT CONST kommastellen)
+
+
+als Ersatz für
+
+
+ zahltext (wert ("Feldname"), kommastellen)
+
+
+verwenden. So kann ein Feld einheitlich zum Drucken formatiert
+werden.
+
+#on("b")#Arithmetik#off("b")# Sowohl mit INT- als auch mit REAL-Zahlen
+(jedoch
+nicht gemischt) können Sie die üblichen Rechenoperatoren '+', '-'
+und '*' verwenden. Auch Minimum ('min') und Maximum ('max') sind
+für zwei Parameter dieser Typen definiert.
+ Lediglich die Division wird bei beiden Typen unterschiedlich
+gehandhabt. Für REAL-Zahlen gibt es den Operator '/' für die
+übliche Division. Da die ganzzahlige Division eine andere Bedeutung
+hat, wird dafür der Operator 'DIV' verwendet. Den Rest der ganz­
+zahligen Division liefert 'MOD'.
+ 'abs' liefert den Wert eines REAL oder INT ohne das Vorzeichen.
+Die Umwandlungsfunktionen 'int' und 'real' hatten wir ja bereits
+weiter oben erwähnt.
+ Für REAL-Zahlen gibt es noch weitere mathematische Funktio­
+nen (Exponentialfunktion, Trigonometrie), die Sie am besten im
+EUMEL-Benutzerhandbuch nachschlagen, wenn Bedarf dafür besteht.
+
+
+14.5 Abfragen
+
+#on("b")#IF-Abfragen#off("b")# Wie Sie schon im vorigen Kapitel gesehen
+haben,
+kann man in Druckmustern auch IF-Abfragen als Ausdrücke ver­
+wenden. Die IF-Abfragen können zwar auch ineinander verschach­
+telt werden, sie dürfen jedoch nicht mehr innerhalb eines normalen
+Ausdrucks angewendet werden.
+ Eine IF-Abfrage enthält 3 Teilausdrücke in folgender Form:
+
+
+ IF 'BOOL-Ausdruck' THEN
+ 'Ausdruck1'
+ ELSE
+ 'Ausdruck2'
+ END IF
+
+
+Der erste Ausdruck muß einen Wert vom Typ BOOL liefern, der ent­
+scheidet, welcher der beiden Teilausdrücke ausgewertet wird. Wir
+werden gleich noch sehen, was für Möglichkeiten es da gibt.
+ Die beiden Teilausdrücke dürfen auch wieder IF-Abfragen sein,
+sind sie es jedoch nicht, dürfen in ihnen dann keine IF-Abfragen
+mehr vorkommen. Die IF-Abfragen liegen also immer auf der äußer­
+sten Ebene.
+ Die beiden Teilausdrücke dürfen einen beliebigen Typ haben, er
+muß jedoch für beide gleich sein.
+ Als Ergebnis der IF-Abfrage wird 'Ausdruck1' geliefert, wenn
+der BOOL-Ausdruck wahr ist, sonst 'Ausdruck2'.
+
+#on("b")#Vergleiche#off("b")# Die wesentlichen Operationen, die boolesche
+Ausdrücke
+zur Verwendung in IF-Abfragen bilden, sind die Vergleichsoperato­
+ren:
+
+
+ = <> <= >= < >
+
+
+Sie vergleichen jeweils zwei Elemente vom Typ TEXT, INT oder REAL
+und liefern TRUE (wahr) oder FALSE (falsch). Selbstverständlich
+können auch sie zwei zusammengesetzte Teilausdrücke vergleichen.
+ Eine Anwendung ist zum Beispiel der Test, ob ein Text in einem
+anderen enthalten ist:
+
+
+ IF pos (f ("Betrag"), "DM") > 0 THEN
+ "deutsches Geld"
+ ELSE
+ "ausländisches Geld"
+ END IF
+
+
+Die Funktion 'pos' wird hier dazu benutzt, festzustellen, ob es sich
+um deutsches oder ausländisches Geld handelt.
+ Oft müssen jedoch mehrere Vergleiche miteinander kombiniert
+werden. Zu diesem Zweck gibt es die beiden Operatoren AND (und)
+und OR (oder). Damit AND das Ergebnis TRUE liefert, müssen beide
+Vergleiche wahr sein, bei OR muß mindestens einer der beiden wahl
+sein.
+ Die Reihenfolge aller dieser Operatoren ist so gewählt, daß
+normalerweise keine Klammern benötigt werden. Funktionen haben
+immer Vorrang vor Operatoren, bei den Operatoren kommt die Multi­
+plikation vor der Addition, dann kommen die Vergleiche, danach das
+AND und danach das OR. Alle anderen Operatoren (#on("i")#insbesondere
+SUB#off("i")#) teilen sich den letzten Rang.
+ Wenn Sie also in einem Ausdruck mehrere Vergleiche mit AND
+und OR verknüpfen, und das OR soll stärker binden als das AND,
+müssen Sie dies durch Klammern ausdrücken.
+ Den oben besprochenen Operator SUB sollten Sie immer in
+Klammern setzen, wenn Sie ihn in einem Vergleich benutzen. Da er
+die niedrigste Priorität hat, gäbe es sonst mit Sicherheit Fehler:
+
+
+ IF (f ("Name") SUB 1) = "M" THEN
+ "vielleicht Müller"
+ ELSE
+ "bestimmt nicht"
+ END IF
+
+
+#on("b")#Refinements#off("b")# Bisher hatten wir gesagt, daß IF-Abfragen
+nicht
+innerhalb von anderen Ausdrücken verwendet werden dürfen. Diese
+Einschränkung kann man umgehen, indem man #on("i")#Refinements#off("i")# verwen­
+det.
+ Ein Refinement hat im Druckmuster eine ähnliche Wirkung wie
+eine Abkürzung, lediglich der Name darf nur mit Kleinbuchstaben
+und Ziffern geschrieben sein und kann nicht als Feldmuster ver­
+wendet werden.
+
+
+ &abk :
+ subtext (f ("Name"), namensanfang) .
+ namensanfang :
+ IF pos (f ("Name"), " ") > 0 THEN
+ pos (f ("Name"), " ") + 1
+ ELSE
+ length (f ("Name"))
+ END IF .
+
+
+Innerhalb von Refinements dürfen auch wieder andere Refinements
+verwendet werden.
+ Auch in Kopier- und Änderungsmustern können Sie Refinements
+verwenden. Hier müssen Sie jedoch darauf achten, daß alle Refine­
+ments am Ende gesammelt werden und vor dem ersten Refinement
+ein Punkt stehen muß. Ebenso müssen die Refinements wie im
+Druckmuster durch Punkte voneinander getrennt sein:
+
+
+ "Anrede" K anrede;
+ .
+ anrede :
+ IF f ("m/w") = "w" THEN
+ "Frau"
+ ELSE
+ "Herr"
+ END IF .
+
+
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.15 b/app/eudas/4.3/doc/eudas.hdb.15
new file mode 100644
index 0000000..c0a22cf
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.15
@@ -0,0 +1,286 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (165)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+15 Anweisungen in ELAN
+
+
+
+15.1 Variablen und Zuweisungen
+
+Im vorigen Kapitel haben wir Ausdrücke in ELAN kennengelernt. Der
+Wert eines Ausdrucks wird bei jeder Verwendung erneut berechnet.
+Wenn wir den Wert eines Ausdrucks aufbewahren wollen, müssen wir
+ihn schon in eine EUDAS-Datei schreiben.
+ Oft tritt jedoch die Notwendigkeit auf, Werte zu merken, ohne
+sie in einer Datei zu speichern. Beispiel dafür ist ein Zählvorgang im
+Druckmuster. In jedem Wiederholungsteil muß der dazukommende
+Wert zum bisherigen, aufsummierten und aufbewahrten Wert addiert
+werden. Das Zwischenergebnis der Zählung muß also irgendwo ge­
+speichert werden.
+
+#on("b")#Variablen#off("b")# Zu diesem Zweck gibt es Variablen. Sie sind
+ähnlich wie
+Felder in einer Datei. Ihre Existenz ist jedoch unabhängig von einer
+Datei. Außerdem sind sie zu Anfang nicht einfach leer, sondern
+haben einen undefinierten Wert.
+ Variablen müssen im Programm definiert werden. Sie existieren
+dann während der Ausführung dieses Programms und gehen an­
+schließend verloren. Zu Beginn des Programms sind sie, wie schon
+gesagt, undefiniert.
+ Eine Variable muß immer einen Typ haben. Dieser Typ ist für
+die Lebensdauer der Variable unveränderlich. Die Variable kann
+natürlich nur Werte dieses Typs annehmen.
+ Eine Variablendefinition (oder auch -deklaration) besteht aus
+der Angabe eines Typs, dem Schlüsselwort VAR und einem freige­
+wählten Namen. Wie schon bei den Refinements darf ein solcher
+Name nur aus Kleinbuchstaben (keine Umlaute) und eventuell Zif­
+fern bestehen. Dagegen darf der Name Leerzeichen enthalten.
+Beispiel:
+
+
+ INT VAR zaehler;
+ TEXT VAR feldname;
+ REAL VAR mein ergebnis 1;
+
+
+Das Semikolon am Ende beschließt die Definition.
+ Die Lebensdauer einer Variablen hängt davon ab, an welcher
+Stelle sie definiert ist. Eine Variable, die im Druckmuster im Initia­
+lisierungsteil definiert ist, behält ihren Wert für die gesamte Dauer
+des Druckvorgangs. Eine Variable in einem Abschnitt lebt dagegen
+nur für eine Abarbeitung dieses Abschnitts. Bei der nächsten Abar­
+beitung ist sie wieder undefiniert.
+ Das gleiche gilt für Kopier- und Änderungsmuster. Auch hier
+sind Variablen nur für die Dauer der Bearbeitung eines Satzes
+gültig.
+
+#on("b")#Zuweisung#off("b")# Um einer Variablen einen Wert zu geben, führt
+man eine
+#on ("i")#Zuweisung#off("i")# aus. Die Zuweisung wird durch Doppelpunkt und Gleich­
+heitszeichen aneinandergeschrieben gekennzeichnet. Auf der linken
+Seite steht die Variable, auf der rechten Seite eine Ausdruck:
+
+
+ zaehler := 1;
+
+
+Wie oben schließt das Semikolon die Anweisung ab. Nach der Aus­
+führung hat die Variable den Wert 1. Der Wert vorher ist für die
+Zuweisung egal, er kann definiert oder undefiniert sein.
+ Eine Variable kann in einem Ausdruck verwendet werden, indem
+man einfach den Namen hinschreibt. Der Ausdruck
+
+
+ zaehler + 1
+
+
+hat nach der obigen Zuweisung den Wert 2. Eine Variable muß bei
+der Verwendung definiert sein, sonst können beliebige Fehler ent­
+stehen. Es muß also vor der ersten Verwendung ausdrücklich eine
+Zuweisung erfolgt sein.
+ Da Variablen in Ausdrücken verwendet werden können und
+Ausdrücke auf der rechten Seite einer Zuweisung stehen, ist folgen­
+de Konstruktion möglich:
+
+
+ zaehler := zaehler + 1;
+
+
+Diese Zeile bewirkt, daß der Wert der Variable um 1 erhöht wird.
+Zuerst wird bei der Zuweisung der Wert des Ausdrucks auf der rech­
+ten Seite bestimmt. Zu diesem Zeitpunkt habe die Variable bei­
+spielsweise den Wert 1. Der Ausdruck hat dann den Wert 2 (1+1).
+Dieser Wert wird der neue Wert der Variablen.
+ Bei der nächsten Ausführung würde sich der gleiche Vorgang
+wiederholen, so daß die Variable anschließend den Wert 3 hat.
+ Auch bei der Zuweisung gilt natürlich, daß die Variable auf der
+linken Seite den gleichen Datentyp haben muß wie der Ausdruck auf
+der rechten Seite.
+
+#on("b")#Initialisierung#off("b")# Sie können Variablendeklaration und
+Zuweisung
+auch miteinander verknüpfen, so daß die Variable gleich zu Anfang
+einen Wert erhält:
+
+
+ INT VAR zaehler := 0;
+
+
+Dieses Verfahren ist eine gute Vorsichtsmaßregel, damit Sie keine
+undefinierten Variablen verwenden.
+
+#on("b")#Inkrement#off("b")# Da der Fall so häufig auftritt, daß der Wert
+einer Vari­
+ablen um einen bestimmten Wert erhöht wird (bei allen Zählvorgän­
+gen), gibt es auch dafür eine Abkürzung, und zwar die beiden Ope­
+ratoren INCR und DECR.
+
+
+ zaehler INCR 1;
+ mein ergebnis 1 DECR 24.4;
+
+
+Die Operatoren sind für REALs und INTs definiert. INCR erhöht um
+einen Betrag, DECR erniedrigt. Auf der rechten Seite darf wieder ein
+beliebiger Ausdruck stehen.
+ Für TEXTe gibt es eine ähnliche Abkürzung, allerdings nur für
+die Addition (Verkettung). Hier heißt der Operator CAT. Die beiden
+folgenden Zeilen haben die gleiche Bedeutung:
+
+
+ feldname := feldname + ".";
+ feldname CAT ".";
+
+
+
+15.2 Weitere Konstruktionen
+
+#on("b")#IF#off("b")# Die Ihnen bereits bekannte IF-Konstruktion dient nicht
+nur
+dazu, Werte zu liefern, sondern steuert auch die Abarbeitung von
+beliebigen Anweisungen. Diese Anweisungen können Kopier- und
+Änderungsanweisungen sein (s. Kapitel 11), oder die oben beschrie­
+benen Zuweisungen.
+ In einem Teil der IF-Konstruktion können auch mehrere Anwei­
+sungen stehen. Diese müssen dann jedoch unbedingt durch Semiko­
+lon getrennt sein. Mehrere Anweisungen hintereinander haben ein­
+fach die Bedeutung der Ausführung in der notierten Reihenfolge.
+ Als drittes kann auch der ELSE-Teil weggelassen, da nicht in
+jedem Fall ein Ergebnis erwartet wird. Falls die Bedingung nicht
+zutrifft, muß nicht unbedingt etwas ausgeführt werden.
+
+
+ IF zaehler > 0 THEN
+ zaehler DECR 1;
+ mein ergebnis 1 INCR wert ("zaehlfeld")
+ END IF;
+
+
+Auch diese IF-Konstruktion kann wieder geschachtelt werden. Für
+viele Fälle gibt es jedoch einen ELIF-Teil, der die Verschachtelung
+erspart:
+
+
+ IF f ("m/w") = "m" THEN
+ maenner INCR 1
+ ELIF f ("m/w") = "w" THEN
+ frauen INCR 1
+ ELSE
+ zweifelhaft INCR 1
+ END IF;
+
+
+Der ELIF-Teil beinhaltet noch einmal einen Test. Dieser Test wird
+jedoch nur dann durchgeführt, wenn die erste Bedingung falsch war.
+Gibt es noch mehr Wahlmöglichkeiten, können Sie beliebig viele
+ELIF-Teile benutzen.
+ Beachten Sie, daß die letzte Anweisung in einem Teil der IF-
+Konstruktion nicht unbedingt ein folgendes Semikolon haben muß
+(das Semikolon soll nur trennen). Ein Semikolon an dieser Stelle
+kann aber auch nicht schaden.
+
+#on("b")#Werteliefernde Programme#off("b")# Nicht nur Ausdrücke können Werte
+lie­
+fern, sondern auch ganze Anweisungsfolgen. Dies ist eine Erweite­
+rung der werteliefernden IF-Konstruktion. Sie können dies für Ab­
+kürzungen oder Refinements ausnutzen.
+
+
+ endergebnis :
+ gesammelte zeichen CAT ".";
+ gesammelte zeichen .
+
+
+In diesem Beispiel werden in einer Textvariable bestimmte Zeichen
+gesammelt. Zum Schluß soll ein Punkt angefügt werden und dieser
+Text dann als Ergebnis des Refinements geliefert werden.
+ Damit eine Anweisungsfolge einen Wert liefert, muß am Ende
+der Anweisungsfolge ein Ausdruck stehen. Der Wert des Ausdrucks
+nach Abarbeitung der Anweisungen ist dann der Wert der Anwei­
+sungsfolge.
+ Allerdings kann man den gleichen Wert oft verschieden aus­
+drücken. Folgendes Refinement hat die gleiche Wirkung wie oben:
+
+
+ endergebnis :
+ gesammelte zeichen + "." .
+
+
+In manchen Fällen ist eine Formulierung als werteliefernde Anwei­
+sungsfolge jedoch übersichtlicher.
+
+#on("b")#Beispiel#off("b")# Zum Abschluß dieses Kapitels wollen wir als
+Beispiel eine
+statistische Auswertung einer Zahlenreihe als Druckmuster formu­
+lieren.
+ Gegeben sei eine Datei mit folgenden Feldern:
+
+
+ "Meßwert 1"
+ "Meßwert 2"
+
+
+Wir wollen als Ergebnis Mittelwert und Standardabweichung der
+beiden Meßwerte ausdrucken. Dazu dient das Druckmuster auf der
+folgenden Seite.
+ Im Initialisierungsteil des Druckmusters werden die notwendi­
+gen Variablen definiert und initialisiert. Beachten Sie hier, daß in
+einer Definition mehrere Variablen durch Komma getrennt aufgeführt
+werden können, wenn sie den gleichen Typ haben.
+ Im Wiederholungsteil müssen dann jeweils die Zwischensummen
+aktualisiert werden. Da mit der Funktion 'wert' eine relativ auf­
+wendige Umwandlung verbunden ist, wird der Wert des jeweiligen
+Feldes erst einmal in einer Variable zwischengespeichert, da er
+mehrmals benötigt wird. Diese Zwischenspeicherungsvariable muß
+nicht initialisiert werden
+ Im Nachspann werden dann die Ergebnisse gedruckt. Die Formeln
+sind jeweils als Abkürzungen definiert. Die Funktion 'zahltext' sorgt
+dafür, daß die Werte mit drei Nachkommastellen (gerundet) aufge­
+führt werden.
+ Da die Formeln relativ komplex sind, werden sie auf mehrere
+Zeilen verteilt (in ELAN hat das Zeilenende keine Bedeutung).
+
+
+ %% REAL VAR
+ %% messwert,
+ %% summe 1 := 0.0, quadratsumme 1 := 0.0,
+ %% summe 2 := 0.0, quadratsumme 2 := 0.0;
+ %% INT VAR anzahl := 0;
+ % WIEDERHOLUNG
+ %% anzahl INCR 1;
+ %% messwert := wert ("Meßwert 1");
+ %% summe 1 INCR messwert;
+ %% quadratsumme 1 INCR messwert * messwert;
+ %% messwert := wert ("Meßwert 2");
+ %% summe 2 INCR messwert;
+ %% quadratsumme 2 INCR messwert * messwert;
+ % NACHSPANN
+ &anz Meßwerte.
+ Meßwert 1 Meßwert 2
+ Mittelwert &&mw1&&&& &&mw2&&&&
+ Standardabweichung &&st1&&&& &&st2&&&&
+ % ABKUERZUNGEN
+ &mw1 : zahltext (summe 1 / real (anzahl), 3) .
+ &mw2 : zahltext (summe 2 / real (anzahl), 3) .
+ &st1 : zahltext
+ (sqrt ((quadratsumme 1 - summe 1 * summe 1 /
+ real (anzahl)) / real (anzahl - 1)), 3) .
+ &st2 : zahltext
+ (sqrt ((quadratsumme 2 - summe 2 * summe 2 /
+ real (anzahl)) / real (anzahl - 1)), 3) .
+
+
+Mit entsprechenden Formeln können Sie dieses Beispiel für Ihre
+eigenen Statistiken erweitern. Die Beispiele der letzten beiden Ka­
+pitel sollten Ihnen genügend Anregungen dafür gegeben haben.
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.16 b/app/eudas/4.3/doc/eudas.hdb.16
new file mode 100644
index 0000000..5f5d575
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.16
@@ -0,0 +1,350 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (171)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+16 Dateiverwaltung mit EUDAS
+
+
+
+16.1 Dateien im System
+
+Zum Bearbeiten von Dateien innerhalb des Systems gibt es das Menü
+'Dateien', das Sie bereits in Kapitel 4 kurz kennengelernt haben.
+An dieser Stelle sollen die übrigen Funktionen dieses Menüs be­
+sprochen werden.
+
+
+ --------------
+ Dateien System
+ U Übersicht
+ --------------
+ Datei
+ L Löschen
+ N Umbenennen
+ K Kopieren
+ P Platzbedarf
+ A Aufräumen
+ --------------
+
+#center#Abb. 16-1 Menü 'Dateien'
+
+
+Beachten Sie, daß alle Funktionen in diesem Menü mit Dateien
+beliebiger Struktur arbeiten können, also sowohl mit Textdateien
+als auch EUDAS-Dateien (und anderen). Dies liegt daran, daß
+Dateien an dieser Stelle einfach als "schwarze Kästen" mit beliebi­
+gem Inhalt betrachtet werden.
+
+#on("b")#Übersicht#off("b")# Die Funktion 'Übersicht' haben Sie bereits
+ausprobiert.
+Sie zeigt in einem Editorfenster an der rechten Seite alle Dateien,
+die sich in Ihrer Task befinden. Falls nicht alle Dateien auf den
+Bildschirm passen, können Sie das Fenster mit HOP OBEN und HOP
+UNTEN rollen. Sie verlassen die Übersicht wie üblich mit ESC 'q'.
+
+#on("b")#Löschen#off("b")# Auch die Funktion 'Löschen' sollten Sie schon
+kennen.
+Mit dieser Funktion verschwindet eine Datei auf Nimmerwieder­
+sehen. Daher werden Sie sicherheitshalber immer gefragt, ob Sie die
+Datei wirklich löschen wollen. Sie können in einer Auswahl auch
+alle zu löschenden Dateien ankreuzen (dann wird trotzdem nochmal
+gefragt).
+ Eine EUDAS-Datei, die gerade geöffnet ist, können Sie nicht
+löschen (sonst würde EUDAS zumindest durcheinanderkommen). Sie
+müssen die Datei zuerst sichern - oder nicht sichern, aber die
+Arbeitskopien löschen.
+
+#on("b")#Umbenennen#off("b")# Mit der Funktion 'Umbenennen' können Sie einer
+Datei
+einen neuen Namen geben. Sie werden zuerst aufgefordert, den alten
+Namen der Datei einzugeben. Alternativ können Sie hier wieder die
+umzubenennenden Dateien auswählen. Danach wird Ihnen (für jede
+ausgewählte Datei) der alte Dateiname zum Überschreiben angebo­
+ten.
+ Sie können diesen Namen mit den üblichen Editierfunktionen
+verändern oder mit HOP RUBOUT löschen und ganz neu eingeben.
+Auf diese Weise sparen Sie sich erheblichen Tippaufwand, wenn Sie
+einen langen Dateinamen an nur einer Stelle verändern wollen.
+
+#on("b")#Kopieren#off("b")# Wie in Abschnitt 11.2 bereits angedeutet, gibt es
+eine
+Funktion zum logischen Kopieren von Dateien. Dies ist eine Funk­
+tion, die sich auf spezielle Eigenschaften des EUMEL-Systems
+stützt. Wenn Sie eine Datei #on("i")#logisch#off("i")# kopieren, wird lediglich ein
+Verweis kopiert. Die Daten werden zunächst nur einmal für beide
+Dateien gespeichert.
+ Natürlich hätte das Ganze wenig Sinn, wenn danach bei Ände­
+rungen immer beide Dateien geändert würden. Bei Änderungen an
+einer Datei werden jedoch nur die geänderten Daten getrennt ange­
+legt, der Rest wird weiterhin gemeinsam benutzt. Die beiden Dateien
+sind also nach außen hin komplett unabhängig, intern werden je­
+doch gemeinsame Daten so weit wie möglich geteilt. Auf diese Weise
+wird sowohl Zeit als auch Speicherplatz gespart.
+ Dieses Verfahren ist besonders dann sinnvoll, wenn Sie sich
+einen bestimmten Stand einer Datei aufbewahren wollen. In diesem
+Fall stellen Sie sich eine logische Kopie her und arbeiten mit dem
+Original weiter. Es werden dann nur die Daten zusätzlich angelegt,
+die Sie seit der Kopie verändert haben.
+ EUDAS benutzt die gleiche Funktion auch für die Arbeitskopie.
+Die Arbeitskopie teilt ebenfalls ihre Daten mit dem Original. Ande­
+renfalls wäre es ja auch zeitlich gar nicht möglich, beim Öffnen eine
+Arbeitskopie anzufertigen.
+ Beim Aufruf der Funktion 'Kopieren' werden Sie zunächst nach
+dem Namen der Datei gefragt (wie üblich mit Auswahlmöglichkeit).
+Dann können Sie einen neuen Namen für die Kopie angeben. Dieser
+neue Name darf jedoch nicht für eine andere Datei vergeben sein.
+Wollen Sie eine andere Datei überkopieren, müssen Sie diese zu­
+nächst löschen.
+ Denken Sie daran, daß die hier beschriebene Funktion sich
+wesentlich vom Kopieren im Menü 'Gesamtdatei' unterscheidet. Dort
+wird nämlich eine tatsächliche Kopie durchgeführt, dafür können Sie
+sich dann auch selektiv bestimmte Daten herausgreifen. Außerdem
+gilt die dortige Funktion nur für EUDAS-Dateien.
+
+#on("b")#Platzbedarf#off("b")# Zu Ihrer Information können Sie sich auch den
+Platz­
+bedarf anzeigen lassen, den eine Datei auf dem Speichermedium hat.
+Wenn Sie den Namen der Datei angegeben haben, wird Ihnen die
+Größe in "Kilobyte" (KB) angegeben. Ein KB entspricht etwa 1000
+Zeichen, also einer halben vollgeschriebenen Bildschirmseite.
+ Bei logisch kopierten Dateien wird für jede Datei der benötigte
+Platz separat angegeben. Sie können die Zahlen also nicht einfach
+addieren, um den Gesamtspeicherbedarf zu ermitteln, da Sie dann
+die gemeinsam benutzten Bereiche doppelt zählen würden.
+
+#on("b")#Aufräumen#off("b")# Wenn eine Datei viel geändert wurde, führen zwei
+Effekte zu einer langsameren Verarbeitung dieser Datei. Zum einen
+wird durch Textleichen der Platzbedarf größer. Dies tritt vor allem
+dann auf, wenn zu einzelnen Sätzen immer etwas hinzugefügt wurde
+(eine Folge der Flexibilität, mit variablen Textlängen operieren zu
+dürfen).
+ Da der Platzbedarf der Datei also wächst, sind mehr Speicher­
+zugriffe notwendig, als es dem Inhalt entspricht. Doch nicht nur der
+Platz, sondern auch die Verteilung der Sätze machen sich unange­
+nehm bemerkbar. Da vergrößerte Sätze intern am Ende der Datei
+gespeichert werden, werden logisch aufeinanderfolgende Sätze phy­
+sikalisch weit verstreut.
+ Der gleiche Effekt ensteht auch durch Umsortieren oder Ein­
+fügen von Sätzen. Um die Datei sequentiell zu bearbeiten, sind also
+ständig wechselnde Speicherzugriffe erforderlich.
+ Die beiden beschriebenen Effekte führen zur Geschwindigkeits­
+verringerung. Dies kann verhindert werden, indem die Datei in eine
+frische Datei umkopiert wird. Diesen Vorgang nennt man #on("i")#Reorgani­
+sieren#off("i")#. Dafür gibt es die Funktion 'Aufräumen'.
+ Während des Umkopierens werden die Satznummern ausgegeben.
+Achten Sie darauf, daß zum Reorganisieren genügend Platz auf dem
+System vorhanden ist, um eine komplette Kopie der zu reorganisie­
+renden Datei aufzunehmen.
+ Zum Reorganisieren muß nämlich tatsächlich eine physikalische
+Kopie angefertigt werden. Eine logische Kopie oder das Schreiben
+auf das Archiv reorganisieren eine Datei dagegen nicht, wohl aber
+die Funktion 'Kopieren' im Menü 'Gesamtdatei'.
+ Da der Inhalt gelesen werden muß, funktioniert die Funktion
+'Aufräumen' im Gegensatz zu den oben gemachten Versprechungen
+nur für Textdateien oder EUDAS-Dateien, nicht aber für andere
+Dateitypen. Die Unterscheidung der Dateitypen wird automatisch
+vorgenommen.
+
+
+16.2 Dateien auf dem Archiv
+
+Mit den Funktionen im Menü 'Archiv' können Sie nicht nur Dateien
+auf dem Archiv behandeln, sondern auch in anderen Tasks oder per
+EUMEL-Netz sogar auf anderen Rechnern.
+
+
+ --------------
+ Dateien Archiv
+ U Übersicht
+ D Üb. Drucken
+ --------------
+ Datei
+ K Kopieren
+ vom Archiv
+ S Schreiben
+ auf Archiv
+ L Löschen
+ auf Archiv
+ --------------
+ Archivdiskette
+ I Init
+ --------------
+ Z Zielarchiv
+ P Paßwort
+ R Reservieren
+ --------------
+
+#center#Abb. 16-2 Menue 'Archiv'
+
+
+#on("b")#Zielarchiv#off("b")# Dazu können Sie die Task einstellen, mit der
+Sie arbei­
+ten möchten. Normaleinstellung ist die Task 'ARCHIVE', die Ihre
+Archivdiskette bedient. Dies wird auch in der untersten Bildschirm­
+zeile angezeigt.
+ Die Task stellen Sie mit der Funktion 'Zielarchiv' ein. Sie
+werden dann nach dem Namen der Task gefragt. Diese Task muß
+eine Managertask sein (also unabhängig vom Bildschirm arbeiten)
+und sie muß bereits existieren.
+ Wenn Sie auf Ihrem Rechner das EUMEL-Netz installiert haben,
+werden Sie auch nach der Nummer der Zielstation gefragt, also der
+Nummer des Rechners, auf dem die gewünschte Task arbeitet. Durch
+Drücken von RETURN wird automatisch Ihre eigene Stationsnummer
+verwendet.
+ Nun gibt es zwei Arten von Managertasks, mit denen EUDAS
+zusammenarbeiten kann, #on("i")#Archivmanager#off("i")# und normale Dateimanager.
+Der Unterschied besteht darin, daß ein Archivmanager für einen
+Benutzer reserviert werden muß, damit man nicht auf Disketten
+eines anderen Benutzers zugreifen kann. Normale Dateimanager
+können und sollen dagegen von mehreren Benutzern in beliebiger
+Reihenfolge angesprochen werden.
+ Manche Rechner haben mehrere Archivmanager für mehrere
+Diskettenlaufwerke. Durch das Einstellen des Zielarchivs können Sie
+auf verschiedenen Laufwerken archivieren. Ein Archivmanager kann
+sich natürlich auch auf einem anderen Rechner befinden. Sie benut­
+zen dann dessen Diskettenlaufwerk.
+ Beim Einstellen des Zielarchivs wird als letztes gefragt, ob die
+Zieltask ein Archivmanager ist oder nicht. Im Normalfall sollten Sie
+die Frage bejahen, wenn Sie 'ARCHIVE' einstellen, und ansonsten
+verneinen (s. die obigen Ausnahmefälle).
+ Das eingestellte Zielarchiv wird jeweils in der untersten Bild­
+schirmzeile angezeigt.
+ Die Reservierung eines Archivmanagers findet beim ersten Zu­
+griff statt. Beim Umschalten des Zielarchivs oder Verlassen des
+Menüs wird die Reservierung automatisch wieder aufgehoben.
+
+#on("b")#Übersicht#off("b")# Mit der Funktion 'Übersicht' können Sie eine
+Auflistung
+aller Dateien abrufen, die sich auf der Archivdiskette (bzw. in dem
+eingestellten Manager) befinden. Wie die Dateiübersicht im System
+können Sie die Darstellung wie im Editor rollen und mit ESC 'q'
+verlassen.
+ Wollen Sie die Übersicht gedruckt haben, rufen Sie die Funktion
+'Übersicht drucken' auf. Die Übersicht wird dann nochmals zusam­
+mengestellt und gleich gedruckt.
+
+#on("b")#Schreiben und Lesen#off("b")# Mit den Funktionen 'Kopieren vom
+Archiv'
+und 'Schreiben auf Archiv' können Sie Dateien zwischen dem Archiv
+und Ihrer Task hin und her transportieren. Es wird jeweils eine
+Kopie angefertigt, das heißt das Original auf der Diskette oder in
+Ihrer Task wird nicht verändert.
+ Wenn die transportierte Datei an ihrem Ziel schon existiert,
+wird gefragt, ob die vorher existierende Datei gelöscht (überschrie­
+ben) werden soll. Überschreiben aus Versehen ist nicht möglich,
+wenn Sie die Frage sorgfältig beantworten.
+ Beim Aufruf der Funktionen können Sie den gewünschten Da­
+teinamen angeben oder in der Auswahl ankreuzen. Die Auswahl ist
+hier besonders sinnvoll, wenn Sie mehrere Dateien (eventuell sogar
+in einer bestimmten Reihenfolge) sichern müssen. Außerdem können
+Sie ja keine Datei transportieren, die nicht existiert; alle Möglich­
+keiten werden Ihnen also durch Ankreuzen angeboten.
+ Beachten Sie, daß beim Überschreiben einer Datei auf einer
+Archivdiskette der Speicherplatz der alten (überschriebenen) Ver­
+sion im allgemeinen nicht wiederverwendet werden kann. In diesem
+Fall kann das Archiv voll werden, obwohl eigentlich genügend Platz
+da wäre.
+
+#on("b")#Löschen#off("b")# Das gleiche Problem tritt auf beim Löschen einer
+Datei
+auf dem Archiv. Mit der Funktion 'Löschen auf Archiv' können Sie
+zwar die Datei auf der Diskette ungültig machen, der Platz wird
+jedoch nur dann wiederverwendet, wenn es die letzte Datei auf der
+Diskette war. Anderenfalls bleiben "Leichen" übrig, die Sie in der
+Archivübersicht als Striche erkennen können.
+ Diese Probleme treten jedoch mit anderen Managern nicht auf,
+da diese Ihren Speicherplatz intelligenter verwalten können.
+
+#on("b")#Initialisieren#off("b")# Als Abhilfe bei einem übergelaufenen Archiv
+müssen
+Sie das ganze Archiv initialisieren und neu beschreiben. Dazu gibt
+es die Funktion 'Init'.
+ Diese Funktion müssen Sie auch dann verwenden, wenn Sie eine
+Archivdiskette zum ersten Mal verwenden. Auf dem Archiv muß
+nämlich als erstes der Archivname eingetragen werden, ehe es be­
+nutzt werden kann. Diesen Namen müssen Sie hier angeben.
+ Alle alten Daten des Archivs werden komplett gelöscht. Daher
+müssen Sie vorher die noch gültigen Daten vom Archiv ins System
+kopiert haben. Wenn das Archiv vorher schon beschrieben war,
+werden Sie anhand des Namens gefragt, ob Sie die richtige Diskette
+zum Überschreiben eingelegt haben.
+ Wenn Sie eine fabrikneue Diskette aus der Verpackung nehmen,
+müssen Sie diese vor der Initialisierung #on("i")#formatieren#off("i")#. Dabei wird die
+Diskette auf ein bestimmtes physikalisches Format eingestellt. Ohne
+diese Operation ist weder Schreiben noch Lesen überhaupt möglich.
+ In der Regel muß eine Diskette nur einmal formatiert werden.
+Sie können sie jedoch jederzeit wieder formatieren (wenn Sie zum
+Beispiel nicht wissen, was Ihnen da für eine alte Diskette in die
+Finger geraten ist).
+ Am Anfang des Initialisierens werden Sie gefragt, ob Sie die
+Diskette formatieren wollen. Manche Rechner unterstützen diese
+Operation innerhalb des EUMEL-Systems nicht. In diesem Fall (und
+natürlich auch sonst normalerweise) müssen Sie die Frage vernei­
+nen. Das Formatieren muß dann vorher irgendwie außerhalb des
+Systems geschehen sein.
+ Das Initialisieren funktioniert natürlich nur bei Archivmana­
+gern. Bei einer anderen Zieltask ist diese Funktion gesperrt.
+
+#on("b")#Paßwort#off("b")# Dateien in einem allgemeinen Dateimanager (nicht
+jedoch
+auf dem Archiv) können Sie mit einem Paßwort gegen unbefugten
+Zugriff sichern. Sinnvolle Voraussetzung dafür ist, daß der Datei­
+manager selbst mit einem anderen Paßwort gegen Betreten gesichert
+ist.
+ Das von Ihnen verwendete Paßwort geben Sie mit der Funktion
+'Paßwort' ein. Damit Ihnen niemand über die Schulter schauen
+kann, werden alle Zeichen auf dem Bildschirm als Punkte darge­
+stellt. Anschließend müssen Sie das Paßwort noch einmal eingeben,
+damit sich kein unbemerkter Schreibfehler eingeschlichen hat.
+ Das Paßwort wird dann bei allen Transport- und Löschopera­
+tionen abgefragt. Eine Datei im Manager erhält Ihr Paßwort zuge­
+wiesen, wenn Sie sie das erste Mal im Manager ablegen. Bei allen
+folgenden Zugriffen muß das gleiche Paßwort eingestellt sein, sonst
+wird der Zugriff verweigert.
+ Natürlich können Sie für verschiedene Dateien verschiedene
+Paßwörter einstellen. Trotz Einstellung eines Paßworts können auch
+andere Benutzer ihre Dateien im gleichen Manager ablegen.
+ Sie können auch für Schreiben (und Löschen) sowie Lesen
+unterschiedliche Paßwörter einstellen. Dazu benutzen Sie einfach
+einen Trennstrich in der Form
+
+
+ Schreibpaßwort/Lesepaßwort
+
+
+Soll eine Datei überhaupt nicht überschrieben oder gelöscht werden
+können, können Sie '-' als Schreibpaßwort verwenden:
+
+
+ -/Lesepaßwort
+
+
+Die Datei kann dann nur beim direkten Betreten der Managertask
+verändert werden.
+ Wollen Sie die Paßworteinstellung wieder aufheben, drücken Sie
+bei der Paßworteingabe nur RETURN, da der leere Text als "kein
+Paßwort" interpretiert wird.
+
+#on("b")#Reservieren#off("b")# Wollen Sie eine Task als Zieltask verwenden,
+die zwar
+kein Archivmanager ist, aber reserviert werden muß (zum Beispiel
+'DOS' zum Ansprechen fremder Diskettenformate) müssen Sie die
+Reservierung mit der Funktion 'Reservieren' selbst vornehmen. Die
+Zieltask darf nicht als Archivmanager gekennzeichnet sein (dann ist
+die Funktion 'Reservieren' nämlich gesperrt).
+ Bei der Reservierung müssen Sie den Reservierungsparameter
+(abhängig von der Art der Zieltask - bei 'DOS' beispielsweise den
+Modus) als Text eingeben. Nach der Reservierung können Sie die
+anderen Funktionen des Archivmenüs verwenden.
+ Die Freigabe der Zieltask erfolgt automatisch beim Verlassen
+des Menüs oder beim Einstellen einer neuen Zieltask.
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.2 b/app/eudas/4.3/doc/eudas.hdb.2
new file mode 100644
index 0000000..f3f14e1
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.2
@@ -0,0 +1,178 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (11)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+2 Installation des Programms
+
+
+
+Bevor Sie EUDAS auf Ihrem System benutzen können, müssen Sie das
+Programm zuvor installieren. Wenn EUDAS schon auf Ihrem System
+zur Verfügung steht, können Sie dieses Kapitel getrost überlesen.
+
+
+2.1 Lieferumfang
+
+EUDAS wird auf einer Diskette geliefert, die alle notwendigen Pro­
+gramme enthält. Um den Inhalt der Diskette feststellen zu können,
+starten Sie Ihr System und bringen es dazu, daß 'gib kommando:'
+erscheint. Dann legen Sie die Diskette ein und geben das Kommando
+
+
+ archive ("EUDAS"); list (archive); release (archive)
+
+
+Anschließend erscheint eine Übersicht der auf dem Archiv vorhan­
+denen Programmteile. Folgende Namen sollten sich in dieser Über­
+sicht wiederfinden:
+
+
+ "eudas.1"
+ "eudas.2"
+ "eudas.3"
+ "eudas.4"
+ "eudas.init"
+ "eudas.generator"
+ "Adressen"
+
+
+Eventuell können noch weitere Namen in der Übersicht auftauchen.
+Sollte einer der angegebenen Namen nicht vorhanden sein, rekla­
+mieren Sie die Diskette. Falls Sie statt der Übersicht eine Fehler­
+meldung erhalten, sollten Sie überprüfen, ob die Diskette das rich­
+tige Format besitzt oder Ihr Diskettenlaufwerk Probleme bereitet.
+ Wenn Sie so den Inhalt der Diskette kontrolliert haben, können
+Sie EUDAS installieren. Je nachdem, ob Sie ein Single-User oder ein
+Multi-User System benutzen, sind die Anweisungen unterschiedlich.
+Sie brauchen nur den Sie betreffenden der beiden folgenden Ab­
+schnitte zu lesen. Falls Sie nicht wissen, welches System Sie benut­
+zen: ein Multi-User System wird auf der Systemdiskette und am
+Bildschirm durch die Kennzeichnung 'EUMEL x.y.z/M' identifiziert,
+bei einem Single-User System steht als letztes Zeichen ein 'S'.
+
+
+2.2 Single-User
+
+Dieser Abschnitt betrifft Sie nur, wenn Sie EUDAS auf einem
+Single-User System installieren wollen.
+ Sie können EUDAS immer nur auf einer bestimmten Hinter­
+grunddiskette installieren. Auf dieser Diskette sollten noch min­
+destens 250 KB frei sein (stellen Sie dies durch das Kommando
+'storage info' sicher). EUDAS kann anschließend auch nur auf dieser
+Diskette verwendet werden.
+ Starten Sie nun die gewünschte Diskette. Dann legen Sie die
+Diskette, auf der EUDAS sich befindet, in das Archivlaufwerk. Geben
+Sie dann das Kommando
+
+
+ archive ("EUDAS"); fetch ("eudas.generator", archive); run
+
+
+Sie haben damit das Generatorprogramm gestartet, das die Installa­
+tion automatisch durchführt. Lassen Sie während dieses Vorganges
+das EUDAS-Archiv eingelegt. Sie werden benachrichtigt, wenn die
+Generierung abgeschlossen ist.
+ Wenn Sie EUDAS auf allen Ihren Hintergrunddisketten haben
+möchten, können Sie das so erzeugte System als Muttersystem
+sichern. Mit dem Kommando 'save system' können Sie den Hinter­
+grund komprimiert auf eine leere Archivdiskette schreiben. Mit
+dieser Sicherung können Sie dann jederzeit neue Systemdisketten
+wie von Ihrem Originalsystem herstellen.
+
+#on("b")#Einschränkungen#off("b")# Aus Platzgründen hat die
+Single-User-Version von EUDAS folgende Einschränkungen:
+#free (0.2)#
+ Sie können die Funktionen Ketten und Koppeln nicht verwenden.
+#free (0.2)#
+ Sie können im Druckmuster keine ELAN-Anweisungen und -Aus­
+ drücke verwenden.
+#free (0.2)#
+ Es stehen nur einige allgemeine Hilfstexte zur Verfügung.
+#free (0.2)#
+ Funktionen, die mehrere Tasks vorausssetzen, sind ebenfalls
+ gesperrt.
+#free (0.2)#
+Die betreffenden Funktionen sind zwar gegebenenfalls im Menü
+enthalten, lassen sich aber nicht aufrufen.
+
+
+2.3 Multi-User
+
+Dieser Abschnitt betrifft Sie nur, wenn Sie EUDAS auf einem Mul­
+ti-User System installieren wollen.
+ EUDAS muß in einer bestimmten Task installiert werden. Alle
+neuen Söhne und Enkel dieser Task können dann EUDAS aufrufen.
+Im Normalfall wird diese Task 'PUBLIC' sein.
+ Zum Installieren müssen Sie in diese Task gehen (in diesem
+Beispiel 'PUBLIC'). Dazu rufen Sie durch Tippen der SV-Taste den
+Supervisor und geben das Kommando
+
+
+ continue ("PUBLIC")
+
+
+Stelle Sie mit Hilfe des 'storage info'-Kommandos fest, ob auf Ihrem
+Hintergrund noch mindestens 300 KB frei sind (dieser Platz wird zur
+Generierung benötigt). Dann legen Sie die EUDAS-Archivdiskette ein
+und geben folgendes Kommando
+
+
+ archive ("EUDAS"); fetch ("eudas.generator", archive); run
+
+
+Falls die Task 'PUBLIC' Söhne besitzt, werden Sie gefragt, ob Sie
+diese löschen wollen. EUDAS steht nämlich nur in den Söhnen zur
+Verfügung, die #on("i")#nach#off("i")# der Installation eingerichtet wurden. Antworten
+Sie auf die Frage durch einfaches Tippen von 'j' oder 'n'. wenn Sie
+die Frage verneinen, können Sie die Generierung zu diesem Zeit­
+punkt auch noch abbrechen und zunächst die Söhne aufräumen.
+ Es erscheint die Frage
+
+
+ Ausführliche Hilfstexte installieren ? (j/n)
+
+
+Verneinen Sie die Frage, wenn in Ihrem System der Speicherplatz
+kritisch ist (zum Beispiel wenn Sie keine Festplatte haben). Es
+werden dann nur die wichtigsten allgemeinen Hilfstexte installiert
+(Ersparnis etwa 40 KByte).
+ Anschließend wird die automatische Generierung gestartet.
+Lassen Sie die EUDAS-Archivdiskette eingelegt. Die Generierung ist
+beendet, wenn das EUMEL-Bild erscheint. Die Task, in der die
+Generierung stattfindet, wird automatisch zu einer Managertask, das
+heißt, daß man von ihr Söhne einrichten kann.
+ Sie können das so erweiterte System auch mit 'save system' auf
+einer oder mehreren Archivdiskette sichern. Lesen Sie dazu die
+Hinweise zur Systemsicherung im EUMEL-Systemhandbuch.
+
+#on("b")#Korrekturversionen#off("b")# Falls Sie später einmal eine
+Korrekturversion
+von EUDAS bekommen, sollten Sie vor der neuen Generierung die
+Task, in der EUDAS vorher generiert war, löschen (Vorsicht: alle
+Söhne werden mitgelöscht) und wieder neu einrichten. Anderenfalls
+bleibt die alte Version als unzugängliche "Leiche" auf Ihrem System
+liegen.
+ In diesem Fall und auch, wenn Sie mehrere Programme in der
+gleichen Task installieren, kann es zum Überlauf der internen Über­
+setzertabellen kommen. Für größere Installationen oder wenn Sie
+viele verschiedene Programme benutzen, empfiehlt es sich, zur
+Generierung eine eigene Task 'EUDAS' als Sohn von 'PUBLIC' zu
+verwenden. Sie dürfen dann aber in 'PUBLIC' nicht zu viel insertie­
+ren, da 'EUDAS' ja alle Programme von 'PUBLIC' erbt. Denken Sie
+daran, daß Sie EUDAS nur in Tasks benutzen können, die unter der
+Task 'EUDAS' eingerichtet wurden.
+
+
+
+
+
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.3 b/app/eudas/4.3/doc/eudas.hdb.3
new file mode 100644
index 0000000..e89ff4f
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.3
@@ -0,0 +1,515 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (15)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+3 Ein Beispiel zum Ausprobieren
+
+
+
+Bevor Sie in die tieferen Geheimnisse von EUDAS einsteigen, sollen
+Sie in diesem Kapitel erst einige Erfahrungen mit der Bedienung
+sammeln. Dadurch erhalten Sie Sicherheit im Umgang mit dem Pro­
+gramm und haben bereits einen Eindruck dessen, was Sie anschlie­
+ßend erwartet.
+ Das Durchlesen dieses Kapitels ist nur dann sinnvoll, wenn Sie
+die Anweisungen selbst am Rechner ausprobieren. Anderenfalls
+beginnen Sie besser mit dem nächsten Kapitel.
+ Im folgenden sind die Eingaben, die Sie machen sollen, kursiv
+gedruckt, während Ausgaben des Rechners normal erscheinen.
+Außerdem erscheinen spezielle Tasten in spitzen Klammern:
+
+
+ <RET>
+
+
+Bitte tippen Sie nicht die eckigen Klammern oder Großbuchstaben,
+sondern die entsprechende Taste. Oft haben die Sondertasten auch
+etwas andere Bezeichnungen (die obige zum Beispiel 'CR', 'Carriage
+Return', 'RETURN', 'ENTER'). Bitte fragen Sie bei Unklarheiten Ihren
+Systemlieferanten oder -betreuer.
+
+
+3.1 Start
+
+Die Anweisungen zum Starten von EUDAS sind unterschiedlich, je
+nachdem wie Ihr System eingerichtet ist. Bitte beachten Sie daher
+die verschiedenen Fälle.
+
+1. Falls Sie EUDAS nicht selbst installiert haben, fragen Sie am
+ besten Ihren Systembetreuer. Ansonsten verhalten Sie sich wie
+ unter 2.
+
+2. Falls Sie EUDAS nach den Anweisungen von Kapitel 2 in einem
+ Multi-User-System eingerichtet haben, müssen Sie zunächst eine
+ Arbeitstask (Arbeitsbereich) einrichten. Dazu tippen Sie die
+ SV-Taste (diese trägt häufig die unterschiedlichsten Bezeich­
+ nungen). Es erscheint
+
+
+ EUMEL x.y.z/M
+
+ gib supervisor kommando :
+
+
+ Sie tippen nun folgendes Kommando:
+
+
+ #on("i")#begin ("arbeit")#off("i")#<RET>
+
+
+ Vergessen Sie nicht die RETURN-Taste am Schluß. Machen Sie
+ jetzt weiter bei Punkt 4.
+
+3. Falls Sie ein Single-User-System besitzen, starten Sie die
+ Systemdiskette und geben das Datum ein. Dann machen Sie wei­
+ ter mit Punkt 4.
+
+4. Danach erscheint:
+
+
+ gib kommando :
+
+
+ und Sie tippen:
+
+
+ #on("i")#eudas#off("i")#<RET>
+
+
+ Als Ergebnis wird das EUDAS-Eingangsmenü angezeigt (s. Abb.
+ 3-1 auf der nächsten Seite).
+
+
+3.2 Daten eintragen
+
+Als Beispiel sollen Sie eine kleine Adressenkartei einrichten. Der
+Fachausdruck für eine elektronische Kartei ist #on("i")#Datei#off("i")#.
+
+___________________________________________________________________________________________
+
+ EUDAS: Öffnen Einzelsatz Gesamtdatei Drucken Dateien Archiv
+ --------------:
+ EUDAS-Datei :
+ O Öffnen :
+ - Ketten :
+ - Koppeln : EEEEE U U DDDD A SSSS
+ --------------: E U U D D A A S
+ Arbeitskopie : EEE U U D D AAAAA SSS
+ - Sichern : E U U D D A A S
+ --------------: EEEEE UUU DDDD A A SSSS
+ Aktuelle Datei:
+ - Notizen : Version 4.3
+ - Feldstrukt. : Stand: 14.07.87
+ - Prüfbeding. :
+ --------------: (C) Copyright
+ Mehrbenutzer : Thomas Berlage
+ M Manager : Software-Systeme
+ --------------:
+ :
+ :
+ :
+ :
+ :
+ Akt.Datei: Manager: Datum: 22.07.87
+___________________________________________________________________________________________
+
+
+#center#Abb. 3-1 EUDAS-Eingangsmenü
+
+
+ Zunächst müssen Sie eine neue Datei einrichten. Dazu tippen
+Sie die Leertaste. Dadurch wird die invers dargestellte Funktion
+'Öffnen' ausgeführt. Folgen Sie bitte dem nachstehenden Dialog auf
+der rechten Bildschirmseite:
+
+
+ Name der Datei: #on ("i")#Mitglieder#off("i")#<RET>
+ "Mitglieder" neu einrichten ? (j/n) #on("i")#j#off("i")#
+
+
+Unter der Überschrift 'Neue Feldnamen' tippen Sie jetzt folgendes
+(bitte keine Leerstellen vor den Namen tippen):
+
+
+ #on("i")#Name#off("i")#<RET>
+ #on("i")#Vorname#off("i")#<RET>
+ #on("i")#PLZ#off("i")#<RET>
+ #on("i")#Ort#off("i")#<RET>
+ #on("i")#Strasse#off("i")#<RET>
+ #on("i")#m/w#off("i")#<ESC>#on("i")#q#off("i")#
+
+
+Zum Schluß beantworten Sie noch eine Frage:
+
+
+ Feldnamen oder Feldtypen aendern ? (j/n) #on("i")#n#off("i")#
+
+
+Damit ist die neue Datei eingerichtet.
+ Nun tippen Sie die Pfeiltaste <RECHTS>. Es erscheint ein neues
+Menübild (s. Abb. 3-2).
+
+___________________________________________________________________________________________
+
+ EUDAS: Öffnen Einzelsatz Gesamtdatei Drucken Dateien Archiv
+ --------------: Satz 1 .........ENDE... Mitglieder .......... Feld 1
+ Positionieren : Name
+ W Weiter : Vorname
+ Z Zurück : PLZ
+ N Satz.Nr : Ort
+ --------------: Strasse
+ Suchbedingung : m/w
+ S Setzen : ...........................................................
+ L Löschen :
+ M Markierung :
+ --------------:
+ Datensatz :
+ E Einfügen :
+ A Ändern :
+ T Tragen :
+ H Holen :
+ --------------:
+ F Feldauswahl :
+ --------------:
+ :
+ :
+ :
+
+___________________________________________________________________________________________
+
+
+#center#Abb. 3-2 Menü 'Einzelsatz'
+
+
+Nun tippen Sie so lange die Pfeiltaste <UNTEN>, bis die Funktion
+'Einfügen' invers markiert ist. Dann tippen Sie die Leertaste zum Aus­
+führen dieser Funktion. Die Schreibmarke springt nach rechts ins
+Datenfeld zum Eingeben. Geben Sie jetzt den ersten Datensatz wie
+folgt ein:
+
+
+ #on("i")#Wegner#off("i")#<RET>
+ #on("i")#Herbert#off("i")#<RET>
+ #on("i")#5000#off("i")#<RET>
+ #on("i")#Köln#off("i")#<RET>
+ #on("i")#Krämergasse 12#off("i")#<RET>
+ #on("i")#m#off("i")#<ESC>#on("i")#w#off("i")#
+
+
+Anschließend wird das Datenfeld wieder freigemacht, so daß Sie
+gleich den zweiten Datensatz eingeben können. Dies tun Sie auf die
+gleiche Weise, nur mit anderen Daten:
+
+
+ #on("i")#Sandmann#off("i")#<RET>
+ #on("i")#Helga#off("i")#<RET>
+ #on("i")#5300#off("i")#<RET>
+ #on("i")#Bonn 1#off("i")#<RET>
+ #on("i")#Willicher Weg 109#off("i")#<RET>
+ #on("i")#w#off("i")#<ESC>#on("i")#w#off("i")#
+
+
+Ebenso verfahren Sie dann weiter mit den folgenden Daten. Falls Sie
+sich vertippt haben, können Sie mit den vier Pfeiltasten an die
+entsprechende Stelle gehen und die falschen Buchstaben über­
+schreiben.
+
+
+ #on("i")#Katani#off("i")#<RET>
+ #on("i")#Albert#off("i")#<RET>
+ #on("i")#5210#off("i")#<RET>
+ #on("i")#Troisdorf#off("i")#<RET>
+ #on("i")#Lindenstr. 3#off("i")#<RET>
+ #on("i")#m#off("i")#<ESC>#on("i")#w#off("i")#
+
+ #on("i")#Ulmen#off("i")#<RET>
+ #on("i")#Peter#off("i")#<RET>
+ #on("i")#5#off("i")#<RET>
+ #on("i")#Köln 60#off("i")#<RET>
+ #on("i")#Mozartstraße 17#off("i")#<RET>
+ #on("i")#m#off("i")#<ESC>#on("i")#w#off("i")#
+
+ #on("i")#Regmann#off("i")#<RET>
+ #on("i")#Karin#off("i")#<RET>
+ #on("i")#5000#off("i")#<RET>
+ #on("i")#Köln 90#off("i")#<RET>
+ #on("i")#Grengelweg 44#off("i")#<RET>
+ #on("i")#w#off("i")#<ESC>#on("i")#w#off("i")#
+
+ #on("i")#Arken#off("i")#<RET>
+ #on("i")#Hubert#off("i")#<RET>
+ #on("i")#5200#off("i")#<RET>
+ #on("i")#Siegburg#off("i")#<RET>
+ #on("i")#Talweg 12#off("i")#<RET>
+ #on("i")#m#off("i")#<ESC>#on("i")#w#off("i")#
+
+ #on("i")#Simmern#off("i")#<RET>
+ #on("i")#Anna-Maria#off("i")#<RET>
+ #on("i")#5#off("i")#<RET>
+ #on("i")#Köln 3#off("i")#<RET>
+ #on("i")#Platanenweg 67#off("i")#<RET>
+ #on("i")#w#off("i")#<ESC>#on("i")#w#off("i")#
+
+ #on("i")#Kaufmann-Drescher#off("i")#<RET>
+ #on("i")#Angelika#off("i")#<RET>
+ #on("i")#53#off("i")#<RET>
+ #on("i")#Bonn#off("i")#<RET>
+ #on("i")#Hauptstr. 123#off("i")#<RET>
+ #on("i")#w#off("i")#<ESC>#on("i")#w#off("i")#
+
+ #on("i")#Fuhrmann#off("i")#<RET>
+ #on("i")#Harald#off("i")#<RET>
+ #on("i")#5000#off("i")#<RET>
+ #on("i")#Köln 1#off("i")#<RET>
+ #on("i")#Glockengasse 44#off("i")#<RET>
+ #on("i")#m#off("i")#<ESC>#on("i")#w#off("i")#
+
+
+Bei der letzten Adresse ist die letzte Taste unterschiedlich, da Sie
+keine weiteren Daten mehr eintragen wollen. Bitte beachten Sie dies.
+
+
+ #on("i")#Seefeld#off("i")#<RET>
+ #on("i")#Friedrich#off("i")#<RET>
+ #on("i")#5000#off("i")#<RET>
+ #on("i")#Köln-Ehrenfeld#off("i")#<RET>
+ #on("i")#Kabelgasse#off("i")#<RET>
+ #on("i")#m#off("i")#<ESC>#on("i")#q#off("i")#
+
+
+Damit die neu eingetragenen Daten permanent gespeichert sind,
+müssen Sie sie #on("i")#sichern#off("i")#. Dazu kehren Sie durch Tippen von <LINKS>
+in das erste Menü zurück. Dort tippen Sie wieder so lange <UNTEN>,
+bis die Funktion 'Sichern' markiert ist. Tippen Sie dann die Leer­
+taste zum Ausführen und folgen dem nachstehenden Dialog:
+
+
+ Arbeitskopie "Mitglieder" veraendert! Sichern ? (j/n) #on("i")#j#off("i")#
+ Alte Version ueberschreiben ? (j/n) #on("i")#j#off("i")#
+ Interne Arbeitskopien loeschen ? (j/n) #on("i")#j#off("i")#
+
+
+Damit steht Ihnen nun eine Mitgliederdatei mit 10 Einträgen zur
+weiteren Verfügung.
+
+
+3.3 Daten abfragen
+
+Um Daten abzufragen, müssen Sie die Datei zunächst wieder öffnen.
+Dazu bewegen Sie die inverse Markierung durch mehrmaliges Tippen
+von <OBEN> nach oben bis zur Funktion 'Öffnen' und tippen Sie die
+Leertaste. Danach ergibt sich folgender Dialog:
+
+
+ Name der Datei: #on("i")#Mitglieder#off("i")#<RET>
+ Wollen Sie etwas aendern (eine Arbeitskopie einrichten)
+ ? (j/n) #on("i")#n#off("i")#
+
+
+Danach gehen Sie durch Tippen von <RECHTS> in das zweite Menü.
+Dort erscheint jetzt die zehnte Adresse.
+ Zunächst sollen Sie an den Anfang gehen. Dazu schieben Sie
+die Markierung auf die Funktion 'Satz.Nr' mit Hilfe der Pfeiltasten
+und tippen dann die Leertaste. Nach folgender Angabe
+
+
+ Neue Satznummer: #on("i")#1#off("i")#<RET>
+
+
+erscheint die erste Adresse. Nun sollen Sie nach der Adresse von
+Harald Fuhrmann suchen. Dazu bringen Sie die Markierung auf die
+Funktion 'Suchbedingung Setzen' und tippen die Leertaste. Die
+Schreibmarke springt wieder in das Datenfeld. Dort geben Sie ein:
+
+
+ #on("i")#Fuhrmann#off("i")#<ESC>#on("i")#q#off("i")#
+
+
+In der markierten Überschrift erscheint 'SUCH-' zum Zeichen, daß
+eine Suchbedingung eingestellt ist. Dann schieben Sie die Markie­
+rung auf die Funktion 'Weiter' und tippen die Leertaste. Kurz da­
+nach erscheint die Adresse von Herrn Fuhrmann mit dem Hinweis
+'SUCH+' (gefunden).
+ Führen Sie dann die Funktion 'Zurück' aus (Verschieben der
+Markierung und Tippen der Leertaste). Es erscheint wieder die erste
+Adresse mit dem Hinweis 'SUCH-' (kein weiterer Fuhrmann gefun­
+den). Führen Sie dann die Funktion `Suchbedingung Löschen' aus.
+Der 'SUCH'-Hinweis verschwindet wieder.
+ Als nächstes sollen Sie die Daten nach allen weiblichen Mit­
+gliedern durchsuchen. Dazu führen Sie wieder die Funktion 'Such­
+bedingung Setzen' aus. Diesmal tippen Sie im Datenfeld fünfmal die
+Pfeiltaste <UNTEN>, bis die Schreibmarke neben der Bezeichnung
+'m/w' steht. Dort tippen Sie
+
+
+ #on("i")#w#off("i")#<ESC>#on("i")#q#off("i")#
+
+
+Wenn Sie jetzt die Funktion 'Weiter' ausführen, erscheint das erste
+weibliche Mitglied, Frau Sandmann. Da aber noch weitere Frauen in
+der Datei vorkommen, führen Sie erneut 'Weiter' aus und es erschei­
+nen die nächsten weiblichen Mitglieder.
+ Wenn kein gesuchtes Mitglied mehr gefunden wurde, erscheint
+ein leeres Datenfeld mit den Bezeichnungen 'ENDE' und 'SUCH-' in
+der Überschrift. Durch mehrmaliges Ausführen von 'Zurück' können
+Sie die weiblichen Mitglieder wieder in der umgekehrten Reihenfolge
+ansehen, bis Sie an den Anfang der Datei kommen.
+ Bitte lassen Sie die Suchbedingung eingestellt, denn im näch­
+sten Abschnitt wollen wir alle weiblichen Mitglieder ausdrucken.
+
+
+3.4 Drucken
+
+Zuerst begeben Sie sich durch zweimaliges Tippen von <RECHTS> in
+das Druckmenü, das in Abb. 3-3 gezeigt wird.
+
+___________________________________________________________________________________________
+
+ EUDAS: Öffnen Einzelsatz Gesamtdatei Drucken Dateien Archiv
+ --------------:
+ Satzauswahl :
+ D Drucken :
+ --------------:
+ Druckausgabe :
+ R Richtung :
+ --------------:
+ Textdatei :
+ E Editieren :
+ A Ausdrucken :
+ N Nachbearb. :
+ --------------:
+ :
+ :
+ :
+ :
+ :
+ :
+ :
+ :
+ :
+ :
+ Akt.Datei: "Mitglieder" Datum: 22.07.87
+___________________________________________________________________________________________
+
+
+#center#Abb. 3-3 Menü 'Drucken'
+
+
+Zunächst müssen Sie ein Druckmuster erstellen, das angibt, wie der
+Druck aussehen soll. Dazu führen Sie die Funktion 'Textdatei Edi­
+tieren' aus. Es erscheint die Aufforderung:
+
+
+ Name der Datei: #on("i")#liste#off("i")#<RET>
+
+
+Dann wird der Bildschirm gelöscht und Sie können folgendes einge­
+ben:
+
+
+ #on("i")#% VORSPANN#off ("i")#<RET>
+ #on("i")#Liste der weiblichen Mitglieder#off ("i")#<RET>
+ #on("i")#-------------------------------#off ("i")#<RET>
+ #on("i")#% WIEDERHOLUNG#off ("i")#<RET>
+ #on("i")#&Vorname %Name#off ("i")#<ESC>#on("i")#q#off("i")#
+
+
+Ebenso wie beim Eingeben von Daten können Sie hier mit den Pfeil­
+tasten auf fehlerhafte Stellen zurückgehen und dort korrigieren.
+ Nun sollten Sie sich vergewissern, ob Ihr Drucker eingeschaltet
+und bereit (Ready) ist. Falls Sie keinen Drucker haben, folgen Sie
+bitte den Anweisungen unter 2. Anderenfalls gehen Sie wie folgt
+vor.
+
+1. Rufen Sie die Funktion 'Richtung' auf und beantworten Sie
+ folgende Frage:
+
+
+ Ausgabe automatisch zum Drucker ? (j/n) #on("i")#j#off("i")#
+
+
+ Dann rufen Sie die Funktion 'Drucken' auf und geben den Namen
+ des Druckmusters an:
+
+
+ Name des Druckmusters: #on("i")#liste#off ("i")#<RET>
+
+
+ Als Ergebnis sollte folgende Liste auf Ihrem Drucker erscheinen:
+
+
+ Liste der weiblichen Mitglieder
+ -------------------------------
+ Helga Sandmann
+ Karin Regmann
+ Anna-Maria Simmern
+ Angelika Kaufmann-Drescher
+
+
+2. Rufen Sie die Funktion 'Richtung' auf und beantworten Sie
+ folgende Fragen:
+
+
+ Ausgabe automatisch zum Drucker ? (j/n) #on("i")#n#off("i")#
+ Ausgabe in bestimmte Datei ? (j/n) #on("i")#n#off("i")#
+
+
+ Dann rufen Sie die Funktion 'Drucken' auf und geben den Namen
+ des Druckmusters an:
+
+
+ Name des Druckmusters: #on("i")#liste#off ("i")#<RET>
+
+
+ Nach dem Ende des Druckprozesses (wenn das Sternchen vor
+ 'Drucken' wieder durch ein 'D' ersetzt worden ist), rufen Sie
+ wieder die Funktion 'Textdatei Editieren' auf und geben folgen­
+ den Namen an:
+
+
+ Name der Datei: #on("i")#liste.a$1#off("i")#<RET>
+
+
+ Es erscheint die gleiche Ausgabe wie unter 1 beschrieben auf
+ dem Bildschirm. Wenn Sie die Ausgabe genug gesehen haben,
+ kehren Sie durch
+
+
+ <ESC>#on("i")#q#off("i")#
+
+
+ wieder in das Menü zurück.
+
+
+3.5 Ergebnis
+
+Da Sie sich wieder im Menü befinden, könne Sie EUDAS durch
+
+ <ESC>#on("i")#q#off("i")#
+
+wieder verlassen. Danach können Sie Ihre Sitzung beenden, etwas
+Anderes tun oder EUDAS erneut aufrufen.
+
+ Sie haben nun selbst ausprobiert, wie Sie unter EUDAS Daten
+eingeben können, wie Sie diese Daten abrufen und in ihnen suchen
+können. Sie haben die Daten auch schon ausgedruckt.
+ Damit Sie besser verstehen, was Sie soeben gemacht haben,
+werden Sie in den folgenden vier Kapiteln die Grundfunktionen von
+EUDAS mit den dazugehörigen Erläuterungen kennenlernen.
+ Danach können Sie dann selber Ihre eigene Anwendung entwer­
+fen und EUDAS zu Ihrer Arbeitserleichterung einsetzen.
+
+
+
+
+
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.5 b/app/eudas/4.3/doc/eudas.hdb.5
new file mode 100644
index 0000000..b5927ea
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.5
@@ -0,0 +1,386 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (43)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+5 Gespeicherte Daten abfragen
+
+
+
+5.1 Öffnen
+
+Als letzte Vorbereitung, bevor Sie mit der Adreßdatei spielen kön­
+nen, müssen Sie die Datei wie einen Karteikasten #on("i")#öffnen#off("i")#. Nach dem
+Öffnen beziehen sich alle weiteren Funktionen auf die gerade ge­
+öffnete Datei. Aus diesem Grund darf auch immer nur eine einzige
+Datei geöffnet sein - als hätte auf Ihrem Schreibtisch nur ein Kar­
+teikasten Platz.
+ Dazu wählen Sie jetzt wieder das erste Menü an. Dort finden
+Sie die Funktion
+#free (0.2)#
+
+ O Öffnen
+
+#free (0.2)#
+Wählen Sie diese Funktion aus. Dann drücken Sie die Leertaste, um
+die Funktion auszuführen. Als erstes erscheint im unteren Teil des
+Bildschirms eine Frage:
+
+___________________________________________________________________________________________
+
+ Wollen Sie etwas aendern (eine Arbeitskopie anlegen) (j/n) ?
+___________________________________________________________________________________________
+
+
+Der Cursor bleibt hinter der Frage stehen. Sie kennen diesen Frage­
+zustand ja schon.
+ In diesem Fall wollen Sie an der Spieldatei nichts verändern,
+Sie beantworten die Frage also mit einem 'n'. Als nächstes werden
+Sie nach dem Namen gefragt (Beachten Sie auch hier wieder die
+Statuszeile).
+ Tippen Sie nun 'Adressen' und beenden Sie die Eingabe mit
+RETURN. EUDAS öffnet die Datei und kehrt zum Menü zurück. Alter­
+nativ können Sie die Datei auch in einer Auswahl ankreuzen, wenn
+Sie ESC 'z' tippen.
+
+#on("b")#Fußzeile#off("b")# Nach der Ausführung dieser Funktion sollten Sie
+Ihre
+Aufmerksamkeit auf die letzte Zeile des Bildschirms richten. Hier
+finden Sie jetzt folgendes vor:
+
+___________________________________________________________________________________________
+
+ Akt.Datei: "Adressen" Manager: Datum: 22.07.87
+___________________________________________________________________________________________
+
+
+Neben dem Datum und dem eingestellten Manager (dies kommt viel
+später) sehen Sie hier, welche Datei Sie geöffnet haben und nun
+bearbeiten können. Diese Fußzeile finden Sie auch in den ande­
+ren Menüs. Lediglich die mittlere Angabe ändert sich bei den ande­
+ren Menüs (eine Erläuterung dazu finden Sie in späteren Kapiteln).
+
+#on("b")#Anzeige#off("b")# Zum Anzeigen der Daten in der Adreßdatei müssen Sie
+das
+zweite Menü 'Einzelsatz' anwählen (durch Drücken der Pfeiltaste
+RECHTS). Am linken Rand erscheint das neue Menü mit den Anzei­
+gefunktionen. Der Rest des Bildschirms enthält das Formular für die
+Adreßdatei mit den Daten des ersten Satzes. Abbildung 5-1 zeigt
+das Bild, das sich dann ergibt.
+
+___________________________________________________________________________________________
+
+ EUDAS: Öffnen Einzelsatz Gesamtdatei Drucken Dateien Archiv
+ --------------: Satz 1 ................... Adressen ....... Zeile 1
+ Positionieren : Name Wegner
+ W Weiter : Vorname Herbert
+ Z Zurück : PLZ 5000
+ N Satz.Nr : Ort Köln
+ --------------: Strasse Krämergasse 12
+ Suchbedingung : m/w m
+ S Setzen : ...........................................................
+ L Löschen :
+ M Markierung :
+ --------------:
+ Datensatz :
+ - Einfügen :
+ - Ändern :
+ - Tragen :
+ - Holen :
+ --------------:
+ F Feldauswahl :
+ --------------:
+ :
+ :
+ :
+
+___________________________________________________________________________________________
+
+
+#center#Abb. 5-1 Menü 'Einzelsatz'
+
+
+Das automatisch generierte Formular zeigt immer genau einen Satz.
+Das Formular besteht aus drei Teilen: der Überschrift, dem Feldteil
+und der Abschlußzeile. In der #on("i")#Überschrift#off("i")# steht der Name der Datei
+("Adressen"), die Satznummer (1) und die Nummer der ersten ange­
+zeigten Zeile (immer 1, außer wenn die Datei mehr Felder hat, als
+auf den Bildschirm passen). In manchen Fällen können auch noch
+weitere Informationen dort auftauchen, wie wir später sehen wer­
+den.
+ Im #on("i")#Feldteil#off("i")# befindet sich der eigentliche Inhalt, und zwar sind
+links markiert die Feldnamen zu sehen, während rechts die zugehö­
+rigen Inhalte des betreffenden Satzes stehen. Dieses Bild ähnelt
+einer Karteikarte mit einem festen Format.
+ Die #on("i")#Abschlußzeile#off("i")# am Ende gibt an, daß für diesen Satz keine
+weiteren Informationen mehr vorhanden sind. Wir werden aber spä­
+ter noch sehen, wie man anderenfalls die restlichen Informatio­
+nen sichtbar machen kann.
+
+
+5.2 Bewegen
+
+Nun wollen Sie nicht immer nur einen Satz betrachten (das wäre ja
+furchtbar langweilig). Daher müssen Sie die Möglichkeit haben, sich
+in der Datei zu "bewegen". Dies geschieht mit Hilfe der beiden
+Funktionen
+#free (0.2)#
+
+ W Weiter
+
+#free (0.2)#
+und
+#free (0.2)#
+
+ Z Zurück
+
+#free (0.2)#
+Sie haben die Wirkung, daß der Satz mit der nächsthöheren bzw.
+nächstniedrigeren Satznummer angezeigt wird. Natürlich funktioniert
+dies nur, wenn noch ein Satz vorhanden ist: am Anfang (Satz 1)
+können Sie nicht zurückgehen. In diesem Fall ignoriert EUDAS Ihren
+Befehl einfach.
+ Wenn Sie bis zum Ende der Datei gehen (keine Angst - diese
+Datei enthält nur 10 Sätze), werden Sie feststellen, daß zum Schluß
+ein ganz leerer Satz erscheint. Dieser Satz ist eine Art Endemarkie­
+rung; er informiert Sie, daß keine weiteren Sätze vorhanden sind.
+Dieser Satz ist aber kein richtiger Satz, daher wird in der Über­
+schrift 'ENDE' angezeigt. (Wenn Ihnen diese Art Endemarkierung
+merkwürdig erscheint: sie hat schon einen triftigen Grund, s.6.2).
+ Um einen Satz mit bekannter Satznummer gezielt anzuwählen,
+können Sie die Funktion
+#free (0.2)#
+
+ N Satz.Nr
+
+#free (0.2)#
+verwenden. Sie müssen anschließend die Satznummer eingeben (Bitte
+mit RETURN beenden). Ist der Satz vorhanden, erscheint dieser,
+ansonsten stehen Sie am Ende der Datei.
+
+#on("b")#Aufruf über Buchstaben#off("b")# Vielleicht ist Ihnen inzwischen
+schon
+aufgefallen, daß vor jeder Funktion in einem Menü ein Buchstabe
+steht. Damit hat es folgendes auf sich: da das Positionieren des
+Cursors zum Auswählen einer Funktion mehrere Tastendrücke erfor­
+dern kann, haben Sie die Möglichkeit, jede Funktion auch über
+einen Buchstaben auszuführen.
+ Dies ist besonders dann sinnvoll, wenn Sie mit den eben be­
+sprochenen Funktionen schnell in der Datei "blättern" wollen. An­
+dererseits müssen Sie sich aber für eine schnelle Reaktion auch
+einige der Tasten merken. Für die Praxis empfiehlt sich folgender
+Kompromiß: die meistgebrauchten Funktionen über Buchstaben und
+der Rest durch Positionieren im Menü.
+
+
+5.3 Suchen
+
+Stellen Sie sich vor, die Datei wäre größer und Sie müßten eine
+bestimmte Adresse heraussuchen. Dazu würden Sie durch die ganze
+Datei durchgehen, bis die gewünschte Adresse erscheint. Das wäre
+natürlich bei vielen Adressen eine ungeheuer mühselige Arbeit, die
+mit einem Karteikasten wahrscheinlich schneller zu erledigen wäre.
+ EUDAS bietet Ihnen jedoch die Möglichkeit, nach bestimmten
+Sätzen zu suchen. Dazu müssen Sie angeben, wonach gesucht werden
+soll. Als Beispiel wollen wir die Adresse von Frau Simmern su­
+chen. Bewegen Sie sich zunächst zurück bis auf den ersten Satz.
+Dann wählen Sie die Funktion
+#free (0.2)#
+
+ Suchbedingung
+ S Setzen
+
+#free (0.2)#
+Auf dem Bildschirm verschwinden die Feldinhalte und der Cursor
+steht hinter dem ersten Feldnamen. Dies bedeutet, daß Sie neben
+die Feldnamen etwas schreiben können. Auch in der Statuszeile
+erscheint statt der Anzeige der Menünamen ein Hinweis auf die
+Eingabemöglichkeit (s. Abb. 5-2). Sie befinden sich jetzt in einem
+Zustand, in dem Sie hinter die Feldnamen etwas schreiben können
+(dem sogenannten #on("i")#Satzeditor#off("i")#).
+ Als Angabe, was gesucht werden soll, schreiben Sie jetzt in der
+ersten Zeile neben 'Name' die Bedingung 'Simmern'. Sie haben jetzt
+ein einfaches #on("i")#Suchmuster#off("i")# angegeben. Ein Suchmuster besteht aus
+Bedingungen, die neben die Feldnamen geschrieben werden. Unser
+einfaches Suchmuster lautet übersetzt:
+
+ Wähle alle Sätze aus, bei denen 'Simmern' im Feld 'Name'
+ steht.
+
+Beenden Sie die Eingabe des Suchmusters mit ESC 'q'. Es erscheint
+wieder das vorherige Bild, mit dem Unterschied, daß jetzt in der
+Überschrift ein 'SUCH-' auftaucht. EUDAS steht immer noch auf dem
+ersten Satz.
+ Die Anzeige 'SUCH' gibt an, daß ein Suchmuster eingestellt
+wurde. Das Minuszeichen bedeutet, daß der aktuelle Satz die Such­
+bedingung jedoch #on("i")#nicht#off("i")# erfüllt.
+
+___________________________________________________________________________________________
+
+ SUCHMUSTER EINGEBEN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?
+ --------------: Satz 1 .................... ............... Zeile 1
+ Positionieren : Name Simmern
+ W Weiter : Vorname
+ Z Zurück : PLZ
+ N Satz.Nr : Ort
+ --------------: Strasse
+ Suchbedingung : m/w
+ * Setzen : ...........................................................
+ L Löschen :
+ M Markierung :
+ --------------:
+ Datensatz :
+ - Einfügen :
+ - Ändern :
+ - Tragen :
+ - Holen :
+ --------------:
+ F Feldauswahl :
+ --------------:
+ :
+ :
+___________________________________________________________________________________________
+
+
+#center#Abb. 5-2 Eingabe eines Suchmusters
+
+
+#on("b")#Positionierung#off("b")# Das Suchen beginnt erst, wenn Sie sich in
+der Datei
+bewegen. In diesem Fall erhalten die Funktionen 'Satz weiter' und
+'Satz zurück' eine etwas geänderte Bedeutung. Sie gehen nämlich
+nicht einfach zum nächsten bzw. vorigen Satz, sondern zum näch­
+sten bzw. vorigen Satz.
+ Als Indikator, daß Sie sich auf dem gesuchten Satz befinden,
+dient die Anzeige 'SUCH+'. Probieren Sie dies jetzt aus, indem Sie
+weitergehen. Als nächster Satz erscheint der gewünschte Satz 7. Die
+nicht ausgewählten Sätze wurden also übersprungen. Das gleiche
+passiert, wenn Sie noch weiter gehen. Da kein passender Satz mehr
+vorhanden ist, erscheint der leere Endesatz.
+
+#limit (12.0)#
+ Denken Sie daran, daß das Einstellen der Suchbedingung
+ noch keine Suche bewirkt. Diese müssen Sie selbst
+ durch Positionieren mit 'Weiter' oder 'Zurück' auslösen.
+#limit (13.5)#
+
+Sollten Sie sich nicht am Anfang der Datei befinden, wenn Sie eine
+Suchbedingung einstellen, kann es sein, daß sich der gesuchte Satz
+vor oder hinter der aktuellen Position befindet. In diesem Fall
+müssen Sie entscheiden, ob Sie vorwärts oder rückwärts gehen.
+Wenn Sie rückwärts gehen und der Satz ist nicht in diesem Ab­
+schnitt, erscheint der erste Satz mit der Anzeige 'SUCH-'. Gehen Sie
+dann wieder vorwärts, finden Sie den Satz auf jeden Fall.
+ Die Funktion 'Satz.Nr' richtet sich natürlich nicht nach der
+eingestellten Bedingung, da Sie ja eine bestimmte Satznummer wün­
+schen. Aus der 'SUCH'-Anzeige können Sie jedoch entnehmen, ob
+die Suchbedingung auf diesen Satz zutrifft.
+
+#on("b")#Suchbedingung löschen#off("b")# Wollen Sie wieder alle Sätze sehen,
+müssen Sie die Funktion
+#free (0.2)#
+
+ Suchbedingung
+ L Löschen
+
+#free (0.2)#
+auswählen. Die Anzeige 'SUCH' verschwindet wieder, um anzudeu­
+ten, daß keine Suchbedingung mehr eingestellt ist.
+
+#on("b")#Beispiel#off("b")# Um den Charakter einer Selektion nochmal deutlich
+zu
+machen, sollen Sie jetzt eine Bedingung einstellen, die auf mehrere
+Sätze zutrifft. Dies hätte uns auch eben passieren können, wenn es
+mehrere Simmern gegeben hätte. Wir können zum Beispiel alle weib­
+lichen Personen auswählen.
+ Als erstes löschen Sie die alte Suchbedingung. Tun Sie dies
+nicht, wird Ihnen beim nächsten Eingeben das alte Suchmuster zum
+Ändern angeboten. Dies ist praktisch, wenn ein Suchmuster nicht
+den erhofften Erfolg brachte und Sie es modifizieren wollen.
+ Danach wählen Sie erneut die Funktion 'Suchbedingung setzen'.
+Nun bewegen Sie den Cursor mit der Pfeiltaste UNTEN neben den
+Feldnamen 'm/w'. Dort tragen Sie die Bedingung 'w' ein. Verlassen
+Sie die Eingabe mit ESC 'q'.
+ Wenn Sie sich jetzt in der Datei bewegen, sehen Sie, daß immer
+nur weibliche Personen angezeigt werden - die männlichen werden
+unterdrückt (in Umkehrung der Realität).
+
+
+ ! 1 ! ! 3 ! 4 ! ! 6 !
+ +-----+-----+-----+-----+-----+-----+-----+
+ !Name ! .. ! ! .. ! .. ! ! .. !
+ ! ! ! ! ! ! ! !
+ : : : : :
+ ! ! ! ! ! ! ! !
+ !m/w ! w ! ! w ! w ! ! w !
+ +-----+-----+ +-----+-----+ +-----+
+
+#center#Abb. 5-3 Wirkung einer Selektion
+
+
+
+5.4 Suchbedingungen
+
+Im letzten Abschnitt haben Sie gesehen, wie das Einstellen einer
+Suchbedingung funktioniert. In diesem Abschnitt sollen Sie weitere
+Möglichkeiten zur Formulierung von Suchmustern kennenlernen.
+ Die erste Möglichkeit kennen Sie schon. Wenn neben einen
+Feldnamen ein Text geschrieben wird, bedeutet dies, daß ausge­
+wählte Sätze im Inhalt dieses Feldes mit dem Text übereinstimmen
+müssen.
+
+#on("b")#Kombination#off("b")# Nun kann es sein, daß mehrere Bedingungen
+gelten
+müssen. Im ersten Beispiel des vorigen Abschnitts hätten wir zum
+Beispiel auch noch den Vornamen 'Anna-Maria' angeben können, um
+bei mehreren Simmern die richtige auszuwählen. Wird also in mehre­
+re Felder eine Bedingung geschrieben, müssen alle diese Bedingun­
+gen gleichzeitig zutreffen.
+ Würden Sie in unserem Beispiel noch als dritte Bedingung 'm'
+für das Feld 'm/w' angeben, würde gar kein Satz mehr ausgewählt,
+da Anna-Maria Simmern natürlich nicht männlich ist. Auch das
+kann also passieren.
+
+
+ Name Simmern
+ Vorname Anna-Maria
+ ..
+ ..
+ m/w m
+
+#center#Abb. 5-4 Kombination von Bedingungen
+
+
+#on("b")#Stern#off("b")# Die Bedingungen, die wir bis jetzt kennengelernt
+haben,
+müssen alle ganz exakt zutreffen. Häufig tritt aber der Fall auf,
+daß der gesuchte Name nicht genau bekannt ist. In diesem Fall
+kann der Name im Suchmuster auch teilweise eingegeben werden.
+Der unbekannte Teil am Anfang oder am Ende wird einfach durch
+einen Stern markiert.
+ Wenn Sie also als Bedingung 'Sim*' für den Namen angeben, so
+würde dies auf den Namen Simmern zutreffen, aber zum Beispiel
+auch auf Simmerath oder Simon. Die Bedingung '*mern' würde nicht
+nur auf Simmern zutreffen, sondern auch auf Pommern.
+ Der Stern kann aber auch für einen leeren Text stehen. So
+trifft 'Simmern*' auf Simmern zu, aber auch auf Doppelnamen. die
+mit Simmern beginnen. Wissen Sie jetzt nicht, ob Simmern in dem
+Doppelnamen vorne oder hinten erscheint, können Sie auch an bei­
+den Seiten einen Stern machen. Die Bedingung '*Simmern*' trifft
+nicht nur auf Simmern, sondern sowohl auf Deckerath-Simmern als
+auch auf Simmern-Jakob zu.
+ Es gibt noch eine Reihe von weiteren Möglichkeiten, Bedingun­
+gen im Suchmuster zu formulieren. Auch komplexe Kombinationen
+von Bedingungen sind möglich. Mit dem bisher Besprochenen sollten
+Sie aber in vielen Fällen auskommen. Die übrigen Möglichkeiten
+werden in Abschnitt 10.2 erklärt. Schauen Sie bei Bedarf dort nach.
+
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.6 b/app/eudas/4.3/doc/eudas.hdb.6
new file mode 100644
index 0000000..e617881
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.6
@@ -0,0 +1,394 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (51)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+6 Daten eingeben und ändern
+
+
+
+6.1 Neue Datei einrichten
+
+Nachdem Sie sich bis jetzt an einer existierenden Datei erprobt
+haben, können Sie nun dazu übergehen, eine eigene neue Datei
+einzurichten. Als Beispiel sollen Sie ein kleines Telefonregister
+erstellen.
+ Dazu gehen Sie wieder in das Menü 'Öffnen' zurück und wäh­
+len erneut die Funktion
+#free (0.2)#
+
+ O Öffnen
+
+#free (0.2)#
+indem Sie mehrmals OBEN tippen, bis die Funktion markiert. Dann
+tippen Sie die Lerrtaste zum Ausführen. Als Dateinamen geben Sie
+'Telefonnummern' an.
+ Da die Datei 'Telefonnummern' noch nicht existiert, werden Sie
+gefragt:
+
+
+ "Telefonnummern" neu einrichten ? (j/n) #on("i")#j#off("i")#
+
+
+Es kann ja sein, daß Sie sich vertippt haben und eine andere,
+existierende Datei meinten. In unserem Fall wird die Datei aber
+wirklich neu eingerichtet, daher bejahen Sie die Frage.
+
+#on("b")#Feldnamen eingeben#off("b")# Wenn Sie beim Öffnen eine Datei neu
+einrich­
+ten, müssen Sie zuerst die Feldnamen festlegen, zum Beispiel diese:
+
+
+ 'Name'
+ 'Vorname'
+ 'Strasse'
+ 'PLZ'
+ 'Ort'
+ 'Telefon'
+ 'Bemerkungen'
+
+
+Ihnen wird jetzt Gelegenheit gegeben, die Feldnamen untereinander
+einzugeben. Zur Korrektur können Sie die gleichen Tasten verwen­
+den wie im Editor (beachten Sie dazu die Statuszeile am oberen
+Bildschirmrand.
+ Geben Sie die Namen in dieser Reihenfolge ein. Tippen Sie nach
+jedem Namen die RETURN-Taste, damit der nächste Name in eine
+neue Zeile kommt. Beenden Sie die Eingabe mit ESC 'q'.
+ Die folgende Frage ermöglicht es Ihnen, noch weitere Eigen­
+schaften der Felder festzulegen. Dies ist jedoch im Normalfall nicht
+nötig. Beantworten Sie also die Frage mit 'n'. Ihre Datei ist nun
+eingerichtet.
+ Wie Sie sehen, besteht das Einrichten einer Datei eigentlich
+nur aus der Eingabe der Feldnamen. Wenn Sie später noch Felder
+anfügen wollen, ist dies ohne weiteres möglich.
+
+
+6.2 Sätze Einfügen
+
+Nachdem die Datei nun eingerichtet worden ist, sollen Sie zunächst
+einige Sätze eingeben. Wenn Sie wieder das Menü 'Einzelsatz' an­
+wählen, sehen Sie nur den leeren Satz mit der Anzeige 'ENDE', der
+das Dateiende markiert. Um neue Sätze aufzunehmen, gibt es die
+Funktion
+#free (0.2)#
+
+ E Einfügen
+
+#free (0.2)#
+Wenn Sie diese Funktion aufrufen, geschieht etwas Ähnliches wie
+beim Eingeben des Suchmusters. Der Cursor wandert wieder hinter
+den ersten Feldnamen und in der Statuszeile erscheint die Auffor­
+derung
+
+___________________________________________________________________________________________
+
+ SATZ EINFUEGEN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?
+___________________________________________________________________________________________
+
+
+Sie können nun die Feldinhalte der einzelnen Felder neben die
+entsprechenden Feldnamen schreiben. Mit der RETURN-Taste schlie­
+ßen Sie eine Zeile ab und gelangen in die nächste.
+ Um eventuelle falsche Eingaben zu korrigieren, können Sie
+ähnlich wie im Editor mit den Pfeiltasten herumfahren und falsche
+Eingaben überschreiben. Die Taste RUBOUT löscht falsche Zeichen.
+Sie beenden die Eingabe mit ESC 'q'. Anschließend ist der neue Satz
+vorhanden.
+
+
+#free (4.5)#
+
+#center#Abb. 6-1 Einfügen
+
+
+#on("b")#Wirkung#off("b")# Die Wirkungsweise der Funktion 'Einfügen'
+verdeutlicht
+die Abb. 6-1. Dargestellt ist ein Ausschnitt aus einer Datei mit den
+Sätzen 4 bis 7 und durch Buchstaben dargestellten, beliebigen In­
+halten. Satz 6 sei der aktuelle Satz.
+ Beim Einfügen wird nun vor dem aktuellen Satz eine Lücke für
+den neuen Satz geschaffen, die zunächst noch leer ist und dann von
+Ihnen ausgefüllt werden muß. Die Satznummern aller folgenden Sätze
+erhöhen sich um 1.
+ Die Leerstelle bleibt nur dann erhalten, wenn Sie Daten für den
+neuen Satz eingeben. Anderenfalls wird nach ESC 'q' wieder der alte
+Zustand hergestellt.
+ Dieses Verfahren erklärt auch, warum das Ende der Datei ein
+leerer Pseudosatz ist. Um nämlich am Ende der Datei einen neuen
+Satz anzufügen, muß man vor dem Endesatz einen Satz einfügen.
+ Nachdem Sie also jetzt den ersten Satz eingegeben haben,
+müssen Sie sich wieder zum Ende bewegen, damit der nächste Satz
+hinter dem ersten steht. Für diesen häufig benötigten Vorgang gibt
+es eine Abkürzung: Wenn Sie die Eingabe mit ESC 'w' (Weiter) statt
+ESC 'q' beenden, geht EUDAS nach dem Einfügen des Satzes weiter
+zum nächsten und fügt dort wieder einen Satz ein.
+ Auf diese Weise können Sie also schnell eine ganze Reihe von
+Sätzen nacheinander eingeben. Nachdem Sie einen Satz eingegeben
+haben, tippen Sie ESC 'w' und können gleich anschließend schon mit
+der Eingabe des nächsten Satzes beginnen. Alle so eingegebenen
+Sätze erscheinen nachher in der Reihenfolge der Eingabe.
+
+#on("b")#Satzeditor#off("b")# Bei der Eingabe eines neuen Satzes haben Sie
+nahezu
+alle Möglichkeiten, die auch der EUMEL-Editor bietet. Der be­
+schreibbare Bereich ist jedoch kleiner. Er umfaßt das ganze Gebiet,
+in dem sonst die Feldinhalte erscheinen.
+ Wie beim Editor können Sie den Cursor mit den Cursortasten
+(Pfeiltasten) bewegen. Mit der Taste RUBOUT können Sie ein Zeichen
+löschen. Die restlichen Zeichen der Zeile rücken dann nach. Mit
+RUBIN dagegen schalten Sie in einen Einfügemodus um. Alle einge­
+gebenen Zeichen werden dann eingefügt - der Rest der Zeile rückt
+entsprechend nach rechts. Nochmaliges Tippen von RUBIN schaltet
+wieder in den alten Modus. Welcher Modus eingeschaltet ist, steht
+in der Überschriftzeile.
+ Mit der Kombination ESC RUBOUT können Sie den Rest einer
+Zeile ab der Cursorposition löschen. Steht der Cursor in der ersten
+Spalte, wird dementsprechend die ganze Zeile gelöscht. Im Unter­
+schied zum EUMEL-Editor rücken die folgenden Zeilen jedoch nicht
+herauf.
+ Entsprechend fügen Sie mit der Funktion ESC RUBIN eine neue
+Zeile ein. Dies ist immer dann erforderlich, wenn ein Feldinhalt
+nicht auf eine Zeile paßt. Der Teil der Zeile, der hinter dem Cursor
+steht, wird bei ESC RUBIN in die neue Zeile mitgenommen.
+ Normalerweise tippen Sie ESC RUBIN, wenn Sie an das Ende
+einer Zeile kommen. Wenn Sie aber weiterschreiben, wird die Zeile
+einfach gerollt. Dies ist nicht weiter schlimm, aber Sie können den
+ganzen Feldinhalt nicht auf einmal sehen.
+ In der normalen Anzeige wird ein überlanger Inhalt auf jeden
+Fall auf mehrere Zeilen verteilt.
+
+#on("b")#Warnung#off("b")# Ein Hinweis für alle, die sich mit der
+Editorbedienung
+schon auskennen: EUDAS benutzt den Editor als Unterprogramm.
+Jedoch haben einige Editorfunktionen unliebsame Auswirkungen.
+Besonders gefährlich sind hier HOP RUBOUT und HOP RUBIN. Diese
+Funktion zerstören die Korrespondenz zwischen Feldnamen und
+Feldinhalten, das heißt der Feldinhalt steht nicht mehr neben dem
+Feldnamen.
+ Weiterhin können Sie das Editorbild rollen, ohne daß die Feld­
+namen mitrollen (zum Beispiel wenn Sie in der untersten Zeile
+RETURN drücken). In diesem Fall ist die Korrespondenz auch nicht
+erhalten, das heißt die Inhalte stehen falsch, sind aber eigentlich
+richtig.
+ In solchen Fällen erscheint am oberen oder unteren Rand der
+Hinweis "Bitte ESC '1' druecken". Wenn das Editorbild nur gerollt
+wurde, verschwindet durch ESC '1' der Hinweis wieder und das Bild
+ist in Ordnung. Wenn jedoch Zeilen gelöscht oder eingefügt wurden,
+müssen Sie diese Änderungen von Hand wieder rückgängig machen,
+bis der Hinweis verschwindet. Sie sollten also HOP RUBOUT und HOP
+RUBIN im Satzeditor nicht verwenden.
+ Im Zweifelsfall, wenn Sie meinen, den Satz durcheinanderge­
+bracht zu haben, können Sie immer mit ESC 'h' abbrechen. Es steht
+dann der vorherige Zustand für einen neuen Versuch zur Verfügung.
+
+
+6.3 Daten ändern
+
+Wenn Sie nachträglich noch eingegebene Daten ändern wollen, kön­
+nen Sie die Funktion
+#free (0.2)#
+
+ A Ändern
+
+#free (0.2)#
+verwenden. Sie haben anschließend wie beim Einfügen Gelegenheit,
+neue Daten einzugeben. Allerdings werden Ihnen die bisherigen
+Daten gleich mit angeboten, so daß Sie nur die Änderungen ein­
+geben müssen. Alles andere kann unverändert bleiben. Auch diese
+Funktion wird mit ESC 'q' verlassen. ESC 'w' funktioniert beim
+Ändern ebenfalls (der nächste Satz wird zum Ändern angeboten).
+ Stellen Sie beim Ändern oder Einfügen fest, daß Sie irgendeinen
+krassen Fehler gemacht haben, können Sie die Operation mit ESC 'h'
+abbrechen. Beim Ändern bleibt dann der alte Zustand unverändert,
+beim Einfügen wird kein Satz eingefügt.
+
+#on("b")#Löschen#off("b")# Für den Fall, daß Sie einen Satz wieder ganz aus
+der
+Datei löschen wollen, hat EUDAS eine besondere Vorsichtsmaßnahme
+vorgesehen. Damit der Satz nicht gleich unwiederbringlich verloren­
+geht, müssen Sie ihn zunächst in eine andere Datei #on("i")#tragen#off("i")#. Falls
+das Löschen ein Irrtum war, können Sie den Satz von dort noch
+wiederholen. In vielen Fällen besteht ohnehin die Anforderung, daß
+auch die nicht mehr aktuellen Daten noch eine gewisse Zeit aufge­
+hoben werden müssen.
+ Zum Tragen gibt es die Funktion
+
+
+ Datensatz
+ T Tragen
+
+
+Sie werden nach einem Dateinamen gefragt. Geben Sie hier zum
+Beispiel 'müll' an. Da diese Datei noch nicht existiert, werden Sie
+gefragt, ob Sie sie neu einrichten wollen (falls Sie sich vielleicht
+verschrieben haben). Danach wird der aktuelle Satz in die Datei
+'müll' transportiert. Am Bildschirm erscheint der nächste Satz. Der
+getragene Satz kommt an das Ende der Zieldatei.
+ Eine Bedingung beim Tragen ist, daß die Zieldatei immer die
+gleichen Felder haben muß wie die aktuelle Datei. Sie können also
+nicht aus verschieden strukturierten Dateien in die gleiche Datei
+tragen.
+ Zum Zurückholen eines Satzes benutzen Sie die Funktion
+
+
+ Datensatz
+ H Holen
+
+
+Der letzte Satz der Datei, die Sie angeben, wird vor dem aktuellen
+Satz eingefügt. Dadurch wird der Effekt des letzten Tragens wieder
+aufgehoben.
+ Um die getragenen Sätze endgültig zu vernichten, müssen Sie
+die Zieldatei als Ganzes löschen. Die dazu notwendige Funktion aus
+dem Menü 'Dateien' haben Sie bereits in Abschnitt 4.4 kennenge­
+lernt.
+
+
+6.4 Arbeitskopie sichern
+
+Wenn Sie eine Datei zum Ändern öffnen oder sie gerade neu einge­
+richtet haben, wird von dieser Datei intern eine Arbeitskopie ange­
+legt, die dann geändert wird. Sie müssen diese Arbeitskopie nach
+den Änderungen sichern, damit die Änderungen wirksam werden.
+ In unserem Beispiel ist die Datei "Telefonnummern" immer noch
+leer. Die Änderungen sind momentan nur in der internen Kopie
+vorhanden. Wenn Sie die Datei zum Beispiel auf eine Archivdiskette
+schreiben wollten, würden Sie eine leere Datei auf der Diskette
+haben.
+ Zum Sichern rufen Sie die Funktion
+#free (0.2)#
+
+ S Sichern
+
+#free (0.2)#
+im ersten Menü auf. Es erscheint dann folgende Frage:
+
+___________________________________________________________________________________________
+
+ Arbeitskopie "Telefonnummern" veraendert! Sichern (j/n) ?
+___________________________________________________________________________________________
+
+
+Beantworten Sie diese Frage mit 'j'. Als nächstes wird gefragt:
+
+___________________________________________________________________________________________
+
+ Alte Version überschreiben (j/n) ?
+___________________________________________________________________________________________
+
+
+Beantworten Sie auch diese Frage mit 'j'. Die Arbeitskopie über­
+schreibt dann die (leere) Version vor dem Ändern.
+ Wenn Sie die Frage verneint hätten, könnten Sie anschließend
+einen neuen Namen für die Arbeitskopie angeben. Dies wäre dann
+sinnvoll, wenn Sie den Stand vor den Änderungen noch aufbewahren
+wollen. In diesem Fall ist es jedoch nutzlos, die alte leere Datei
+noch behalten zu wollen.
+ Abschließend wird gefragt, ob Sie die Arbeitskopien löschen
+wollen. Wenn Sie noch weiter mit der Datei arbeiten wollen, vernei­
+nen Sie diese Frage. Die Datei bleibt dann geöffnet. Anderenfalls
+müßten Sie die Datei neu öffnen, wenn Sie sie wieder ansehen wol­
+len.
+
+#on("b")#Arbeitskopien#off("b")# Es ist sehr wichtig, daß Sie sich die
+Funktionsweise
+mit der Arbeitskopie immer vor Augen halten, damit Sie später bei
+der Arbeit mit EUDAS nicht überrascht werden.
+ Eine Arbeitskopie wird immer dann angelegt, wenn Sie beim
+Öffnen einer EUDAS-Datei angeben, daß Sie diese Datei ändern
+wollen. In dem Beispiel haben Sie eine neue Datei eingerichtet.
+EUDAS nimmt dann automatisch an, daß Sie ändern wollen. Öffnen
+Sie eine existierende Datei, werden Sie gefragt
+
+___________________________________________________________________________________________
+
+ Wollen Sie etwas ändern (Arbeitskopie anlegen) (j/n) ?
+___________________________________________________________________________________________
+
+
+Wenn Sie diese Frage verneinen, wird keine Arbeitskopie angelegt;
+alle Änderungsfunktionen werden jedoch gesperrt. Daran können Sie
+auch erkennen, daß keine Arbeitskopie vorliegt.
+ Die Arbeitskopie, die EUDAS sich anlegt, ist anonym. Wenn Sie
+sich also im Menü 'Dateien' eine Übersicht zeigen lassen, erscheint
+nur das Original. Bevor Sie mit diesem Original etwas anstellen
+(zum Beispiel auf Archiv schreiben), sollten Sie sich vergewissern,
+daß Sie die Arbeitskopie gesichert haben, da das Original sonst
+nicht auf dem neuesten Stand ist.
+ Um Sie in diesem Fall zu warnen, erscheint vor einer geöffneten
+Datei in einer Dateiauswahl das Symbol <!>, zum Beispiel:
+
+
+ o <!> "Telefonnummern"
+ o "Mitglieder"
+
+
+Wenn Sie dieses Symbol sehen, sollten Sie die Datei lieber erst
+sichern, bevor Sie etwas mit ihr anstellen.
+
+#on("b")#Beispiel#off("b")# Um die Arbeitsweise von EUDAS noch besser zu
+verstehen,
+betrachten Sie das Beispiel in Abb. 6-2. Nehmen Sie an, Sie haben
+drei EUDAS-Dateien 'Kalender', 'Namen' und 'Adressen' mit ihren
+Anfangsinhalten K0, N0 und A0 (symbolisch). In dem Diagramm sind
+die Vorgänge zu den Zeitpunkten 0 bis 10 mit ihren Auswirkungen
+auf die Inhalte der Dateien und der Arbeitskopie dargestellt.
+
+
+#free (5.5)#
+#center#Abb. 6-2 Beispiel zur Arbeitskopie
+
+
+Zu den einzelnen Zeitpunkten passiere folgendes:
+
+0: Anfangszustand. Es wurde noch keine Datei geöffnet, also ist
+ keine Arbeitskopie vorhanden. Es könnte aber auch eine
+ beliebige Datei ohne Änderungserlaubnis geöffnet sein.
+#free (0.2)#
+1: Die Datei 'Adressen' wird geöffnet zum Ändern. Der momen­
+ tane Zustand der Datei wird als Arbeitskopie übernommen.
+#free (0.2)#
+2: Es wird eine Änderung vorgenommen (zum Beispiel) ein Satz
+ eingefügt). Diese Änderung betrifft aber nur die Kopie - die
+ Datei 'Adressen' als Original bleibt unverändert.
+#free (0.2)#
+3: Eine weitere Änderung führt zum Inhalt A2 der Arbeitsko­
+ pie.
+#free (0.2)#
+4: Aufruf von 'Sichern'. Die alte Version von 'Adressen' wird
+ überschrieben und durch den Inhalt A2 ersetzt. Die Frage
+ nach dem Löschen der Arbeitskopie wird verneint; daher bleibt
+ die Kopie auch erhalten.
+#free (0.2)#
+5: Die Kopie wird erneut verändert.
+#free (0.2)#
+6: Aufruf von 'Sichern'. Die Frage, ob die Kopie gesichert wer­
+ den soll, wird verneint. Die Arbeitskopie soll jedoch gelöscht
+ werden. Als Ergebnis geht die Änderung A3 verloren (viel­
+ leicht war diese Änderung ein Irrtum). Die Datei 'Adressen'
+ wird nicht verändert. Es ist keine Arbeitskopie mehr vor­
+ handen.
+#free (0.2)#
+7: Die Datei 'Namen' wird zum Ändern geöffnet.
+#free (0.2)#
+8: Die Datei 'Kalender' wird zum Ändern geöffnet. Da an der
+ vorigen Arbeitskopie keine Änderungen vorgenommen wurden,
+ kann die Kopie einfach überschrieben werden. Anderenfalls
+ wäre an dieser Stelle die Möglichkeit zum Sichern angeboten
+ worden.
+#free (0.2)#
+9: Es wird eine Änderung durchgeführt.
+#free (0.2)#
+10: Die geänderte Arbeitskopie wird gesichert, das Original über­
+ schrieben und die Arbeitskopie gelöscht (Normalfall).
+
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.7 b/app/eudas/4.3/doc/eudas.hdb.7
new file mode 100644
index 0000000..d6f1bf3
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.7
@@ -0,0 +1,687 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (61)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+7 Ausdrucken der Daten
+
+
+
+7.1 Druckmuster
+
+Nachdem Sie sich die Inhalte der EUDAS-Datei ausgiebig am Bild­
+schirm angesehen haben, möchten Sie die gespeicherten Daten sicher
+auch in gedruckter Form auf Papier sehen. Sie können eine
+EUDAS-Datei jedoch nicht ohne weiteres ausdrucken, da sie eine
+andere Struktur als normale Textdateien hat.
+ Vor dem Drucken müssen also die Inhalte der EUDAS-Datei
+zunächst in lesbarer Form in eine Textdatei geschrieben werden.
+EUDAS kann diese Aufgabe jedoch ohne Ihre Hilfe nicht alleine be­
+wältigen.
+ Es taucht nämlich das Problem auf, daß die Dateiinhalte in
+vielen verschiedenen Formen dargestellt werden können (Sie erin­
+nern sich sicher noch an das erste Kapitel). Vielleicht wollen Sie
+bestimmte Überschriften haben oder die Daten müssen auf ein be­
+stimmtes Formular passen.
+ Um die Ausgabe nach Ihren Wünschen zu gestalten, müssen Sie
+also dem Rechner genau angeben, an welcher Stelle welche Felder
+gedruckt werden sollen usw. Dies geht am einfachsten, indem Sie
+dem Rechner ein Muster vorsetzen, nach dem er dann die richtigen
+Ausdrucke erstellen kann. Dieses Muster schreiben Sie in eine eige­
+ne Textdatei, die #on("i")#Druckmuster#off("i")# genannt wird. Aus den Daten der
+EUDAS-Datei und der Form, die im Druckmuster angegeben ist, wird
+dann eine weitere Textdatei erzeugt, die die Daten in der ge­
+wünschten Form enthält und die anschließend automatisch gedruckt
+werden kann.
+ Durch ein Druckmuster erhalten Sie fast völlige Freiheit in der
+Gestaltung Ihrer Ausdrucke. Zum Beispiel können aus einer einzigen
+Adressendatei einfache Listen, Einladungskarten oder Rundbriefe
+erzeugt werden. Für eine einfache Adressenliste entspricht das
+Druckmuster einer Zeile der Liste, wobei angegeben wird, in welche
+Spalten die Inhalte gedruckt werden. Zum Drucken von Einladungs­
+karten wird als Druckmuster eine Einladungskarte verwendet, in der
+die Stellen markiert sind, an denen die Adresse erscheinen soll. Das
+gleiche kann man mit einem Brief machen, der dann mit jeder
+Adresse einmal ausgedruckt wird.
+
+#on("b")#Druckverfahren#off("b")# Man kann sich diesen Druckprozeß wie folgt
+vorstellen:
+
+
+#free (6.5)#
+
+#center#Abb. 7-1 Druckverfahren
+
+
+Vereinfacht gesagt (das genaue Verfahren wird später beschrieben)
+wird für jeden Satz der EUDAS-Datei das Druckmuster einmal in die
+Druckdatei übernommen. Dabei werden die Inhalte aus der EUDAS-
+Datei in einer noch anzugebenden Weise an den gewünschten Stellen
+eingefügt.
+ Im weiteren sollen Sie erfahren, wie ein Druckmuster genau
+aussieht und wie daraus ein Ausdruck entsteht.
+
+#on("b")#Beispiel#off("b")# Im folgenden sollen Sie zur Demonstration die
+bereits in
+Kapitel 3 und 4 beschriebene Beispieldatei verwenden. Nach Mög­
+lichkeit sollten Sie die angegebenen Beispiele mit dieser Datei
+selbst am Rechner ausprobieren.
+
+Folgende Sätze befinden sich in der Datei:
+
+
+ Vorname Name, Strasse, PLZ Ort, m/w
+ -------------------------------------------------------
+ Herbert Wegner, Krämergasse 12, 5000 Köln, m
+ Helga Sandmann, Willicher Weg 109, 5300 Bonn 1, w
+ Albert Katani, Lindenstr. 3, 5210 Troisdorf, m
+ Peter Ulmen, Mozartstraße 17, 5 Köln 60, m
+ Karin Regmann, Grengelweg 44, 5000 Köln 90, w
+ Hubert Arken, Talweg 12, 5200 Siegburg, m
+ Anna-Maria Simmern, Platanenweg 67, 5 Köln 3, w
+ Angelika Kaufmann-Drescher, Hauptstr. 123, 53 Bonn 2, w
+ Harald Fuhrmann, Glockengasse 44, 5000 Köln 1, m
+ Friedrich Seefeld, Kabelgasse, 5000 Köln-Ehrenfeld, m
+
+
+Wie Sie sehen, wurde die Reihenfolge der Felder gegenüber der Datei
+teilweise verändert und Name und Vorname ohne Komma hinterein­
+andergeschrieben, während die anderen Feldinhalte durch Komma
+getrennt sind. Diese Liste wurde unter Verwendung eines Druck­
+musters erzeugt.
+ Da dieses Druckmuster jedoch vorerst noch zu kompliziert ist,
+sollen Sie erst einmal ein einfacheres Druckmuster erstellen und
+versuchen, nur die Namen aus der Datei in Tabellenform auszuge­
+ben.
+ Das dafür nötige Druckmuster hat folgendes Aussehen:
+
+
+ % WIEDERHOLUNG
+ ! &Name ! &Vorname !
+
+
+Das Druckmuster besteht nur aus zwei Zeilen, von der die zwei­
+te das eigentliche Muster darstellt. Die erste Zeile ist eine #on("i")# Anwei­
+sung#off("i")# an den Druckgenerator. 'WIEDERHOLUNG' gibt an, daß die
+folgenden Zeilen für jeden Satz wiederholt werden sollen (warum
+diese Angabe notwendig ist, werden Sie später einsehen). Das Pro­
+zentzeichen kennzeichnet eine Anweisung und muß unbedingt in der
+ersten Spalte des Druckmusters stehen, also ganz am linken Rand.
+ In der zweiten Zeile ist zu sehen, daß das Zeichen '&' dazu
+benutzt wird, die Stellen zu markieren, an denen nachher Feldin­
+halte eingesetzt werden sollen. Hinter dem '&'-Zeichen folgt der
+Name des Feldes, das an dieser Stelle eingesetzt werden soll. Eine
+solche Konstruktion wird #on("i")#Feldmuster#off("i")# genannt. Beachten Sie, daß
+Feldnamen hier immer ohne Anführungsstriche geschrieben werden
+müssen. Die Ausrufungszeichen bilden den eigentlichen Mustertext
+und werden unverändert als Tabellenbegrenzung in die Ausgabe
+übernommen.
+ Als Ergebnis des Druckprozesses sollte folgende Ausgabe auf
+dem Drucker erscheinen:
+
+
+ ! Wegner ! Herbert !
+ ! Sandmann ! Helga !
+ ! Katani ! Albert !
+ ! Ulmen ! Peter !
+ ! Regmann ! Karin !
+ ! Arken ! Hubert !
+ ! Simmern ! Anna-Maria !
+ ! Kaufmann-Drescher ! Angelika !
+ ! Fuhrmann ! Harald !
+ ! Seefeld ! Friedrich !
+
+
+Sie können erkennen, daß die Feldmuster in der Ausgabe jeweils
+durch den Inhalt des zugehörigen Feldes ersetzt worden sind. Der
+übrige Text in der Musterzeile ist unverändert geblieben. Beachten
+Sie, daß das '&' ein reserviertes Zeichen ist, das ein Feldmuster im
+umgebenden Text kennzeichnet und daher (vorerst) nicht gedruckt
+werden kann.
+
+
+7.2 Aufruf
+
+In diesem Abschnitt sollen Sie erfahren, wie Sie diese Ausgabe
+selbst erzeugen können. Damit der Druckgenerator arbeiten kann,
+müssen Sie die Datei 'Adressen' erst einmal öffnen. Anschließend
+wählen Sie das Menü 'Drucken' an.
+
+#on("b")#Druckmuster erstellen#off("b")# Als nächstes müssen Sie das
+Druckmuster erstellen. Hierfür gibt es die Funktion
+#free (0.2)#
+
+ Textdatei
+ E Editieren
+
+#free (0.2)#
+da das Druckmuster eine normale Textdatei ist.
+ Wählen Sie diese Funktion. Sie werden dann nach einem Namen
+für das Druckmuster gefragt. Wir wollen das Druckmuster 'Namens­
+liste' nennen - Sie können aber auch einen beliebigen anderen
+Namen wählen. Denken Sie daran, die Anführungsstriche nicht mit
+einzugeben.
+ Es erscheint anschließend das gewohnte Editorbild mit einer
+entsprechenden Statuszeile. Geben Sie die zwei Zeilen des Druck­
+musters ein und beenden Sie den Editor mit ESC 'q'. Damit ist das
+Druckmuster fertig.
+
+ Die hier beschriebene Funktion können Sie nicht nur zum Er­
+stellen, sondern auch zum Ändern und einfachen Ansehen eines
+Druckmusters bzw. einer Textdatei allgemein verwenden. Es wird
+Ihnen immer der jeweilige Inhalt präsentiert, den Sie dann nach
+Belieben abändern können oder nicht.
+
+___________________________________________________________________________________________
+
+ EUDAS: Öffnen Einzelsatz Gesamtdatei Drucken Dateien Archiv
+ --------------:
+ Satzauswahl :
+ D Drucken :
+ --------------:
+ Druckausgabe :
+ R Richtung :
+ --------------:
+ Textdatei :
+ E Editieren :
+ A Ausdrucken :
+ N Nachbearb. :
+ --------------:
+
+___________________________________________________________________________________________
+
+#center#Abb. 7-2 Menü "Drucken"
+
+
+#on("b")#Ausgaberichtung#off("b")# Bevor Sie jetzt weitermachen, sollten Sie
+über­
+prüfen, ob an Ihrem System ein Drucker angeschlossen ist. Der
+Drucker sollte bei den folgenden Versuchen betriebsbereit sein.
+ Ist kein Drucker angeschlossen oder wollen Sie kein Papier
+verschwenden, haben Sie die Möglichkeit, den Ausdruck als Text­
+datei zu erhalten. Dazu wählen Sie die Funktion
+#free (0.2)#
+
+ Ausgabe
+ R Richtung
+
+#free (0.2)#
+an. Beantworten Sie beide Fragen, die Ihnen gestellt werden, mit
+'n'. Die Ausgaben stehen dann nachher in Dateien mit einem Namen
+der Form
+#free (0.2)#
+
+ Namensliste.a$n
+
+#free (0.2)#
+die Sie sich mit der oben beschriebenen Funktion dann genau wie
+ein Druckmuster anschauen können. Der Name besteht also aus dem
+Namen des Druckmusters, dem ein '.a$' angehängt wird. Die Nummer
+'n' dient zur Unterscheidung bei mehreren aufeinanderfolgenden
+Ausgaben. Um Verwirrung zu vermeiden, sollten Sie die Datei nach
+dem Anschauen löschen (im Menü 'Dateien').
+
+#on("b")#Druckaufruf#off("b")# Wenn Sie diese Hinweise beachtet haben, können
+Sie den Druckvorgang mit der Auswahl
+#free (0.2)#
+
+ Satzauswahl
+ D Drucken
+
+#free (0.2)#
+starten. Sie werden hier nach dem Namen des Druckmusters gefragt,
+das Sie verwenden wollen (Sie können ja durchaus eine ganze Reihe
+von verschiedenen Druckmustern haben).
+ Sie können den Ablauf des Druckvorganges daran verfolgen,
+daß jeweils die Nummer des Satzes ausgegeben wird, der gerade
+bearbeitet wird. Probieren Sie eventuell auch kleine Abwandlungen
+des Druckmusters aus, indem Sie die Tabellenspalten schmaler oder
+breiter machen oder die Ausrufungszeichen durch ein anderes Zei­
+chen ersetzen (je nach Geschmack).
+
+#on("b")#Ausgabedatei#off("b")# Wollen Sie die erzeugte Ausgabe (die in der
+Datei
+'Namensliste.a$1' steht) irgendwann tatsächlich ausdrucken, ver­
+wenden Sie die Funktion
+#free (0.2)#
+
+ A Ausdrucken
+
+#free (0.2)#
+Sie werden dann nach dem Namen der Textdatei gefragt. Beachten
+Sie, daß Sie diese Funktion #on("i")#nicht#off("i")# zum Drucken von EUDAS-Dateien
+verwenden können, da aus einer EUDAS-Datei erst eine Druckdatei
+erzeugt werden muß.
+ Auch wenn Sie angegeben haben, daß die Ausgabe des Druck­
+prozesses direkt ausgedruckt werden soll, startet Ihr Drucker erst,
+wenn EUDAS die ganze Datei durchgegangen ist und der Vorgang für
+Sie beendet ist. Dies liegt am EUMEL-System, das nur vollständige
+Druckaufträge entgegennimmt, damit sich mehrere Benutzer nicht in
+die Quere kommen können. In einem Multi-User-System können Sie
+weiterarbeiten, während der Drucker beschäftig ist.
+
+#on("b")#Fehler#off("b")# Bevor der eigentliche Druckprozeß gestartet wird,
+wird das
+Druckmuster auf unsinnige oder unverständliche Konstruktionen
+überprüft. Ist dem Druckgenerator etwas suspekt, gibt er eine Feh­
+lermeldung aus, in der die fragliche Situation von seiner Seite aus
+beschrieben wird. Er kann natürlich nicht Ihren Fehler "verstehen".
+Daher müssen Sie unter Umständen eine Fehlermeldung erst inter­
+pretieren, ehe Sie die wahre Ursache erkennen können.
+ Damit Sie einen aufgetretenen Fehler gleich korrigieren können,
+werden Ihnen das Druckmuster und die Fehlermeldungen parallel auf
+dem Bildschirm zum Ändern und Anschauen angeboten. Sie können
+mit dem Editor das Druckmuster ändern und in den Fehlermeldungen
+blättern. Diese Konfiguration wird Paralleleditor genannt. Mit ESC
+'w' wechseln Sie zwischen den beiden Bildschirmhälften.
+
+#on("b")#Suchbedingung#off("b")# Wollen Sie nicht alle Namen ausdrucken, so
+können
+Sie vorher ein Suchmuster einstellen, das nur auf die gewünschten
+Namen zutrifft (wie im Kapitel 5 beschrieben). Der Druckgenerator
+richtet sich immer nach dem aktuell eingestellten Suchmuster und
+druckt nur die ausgewählten Sätze. Wenn Sie zum Beispiel die Na­
+men aller Frauen ausdrucken wollen, stellen Sie im Tastenmodus ein
+Suchmuster ein (das sollten Sie können), das für das Feld 'm/w' die
+Bedingung 'w' enthält. Danach können Sie den Druckgenerator auf­
+rufen. Vergessen Sie nicht, das Suchmuster anschließend wieder zu
+löschen.
+
+#on("b")#Feldnamen abfragen#off("b")# Wenn Sie selber ein Druckmuster
+erstellen,
+wird es häufiger vorkommen, daß Sie die genaue Schreibweise der
+Feldnamen nicht im Kopf haben. Für diesen Zweck definiert EUDAS
+im Editor eine spezielle Tastenkombination.
+ Wenn Sie dort ESC 'F' tippen (großes 'F'), erhalten Sie eine
+Auswahl aller Felder der gerade geöffneten Datei. Sie können sich
+die Namen einfach ansehen, aber auch direkt in den Text des
+Druckmusters übernehmen.
+ Wenn Sie nämlich vor dem Verlassen der Auswahl mit ESC 'q'
+ein Feld ankreuzen, wird anschließend der Name in Anführungs­
+strichen an die Position geschrieben, an der vor dem Aufruf der
+Cursor stand. Auf diese Weise können Sie sich auch das Tippen
+langer Feldnamen vereinfachen.
+ Beachten Sie, daß Sie im Normalfall im Druckmuster die Anfüh­
+rungsstriche wieder entfernen müssen. Die Anführungsstriche dienen
+zur Abgrenzung, wie weit der Feldname geht. Falls der Name Leer­
+zeichen enthält, beachten Sie bitte den Absatz 'Abgrenzung der
+Feldnamen' in Abschnitt 7.4.
+
+
+7.3 Abschnitte
+
+Die Tabellen, die Sie bis jetzt erzeugen können, sehen optisch noch
+nicht sehr gut aus. Es fehlt auf jeden Fall eine vernünftige Über­
+schrift. Um eine Überschrift zu erzeugen, können Sie im Druckmuster
+einen #on("i")#Vorspann#off("i")# definieren, der ganz zu Anfang einmal gedruckt
+wird.
+ Dieser Vorspann wird durch die Anweisung
+
+
+ % VORSPANN
+
+
+eingeleitet (bitte nicht vergessen, daß das '%'-Zeichen für eine
+Anweisung in der ersten Spalte stehen muß). Die folgenden Zeilen
+bis zur 'WIEDERHOLUNG'-Anweisung gehören zum Vorspann. Ein
+Druckmuster für unsere Namensliste mit Überschrift könnte dann so
+aussehen:
+
+
+ % VORSPANN
+ Alle Namen aus der EUDAS-Datei 'adressen'
+ -----------------------------------------
+ % WIEDERHOLUNG
+ ! &Name ! &Vorname !
+
+
+Der Druckgenerator erzeugt mit diesem Druckmuster die gewünschte
+Liste mit Überschrift. Sie können als Vorspann natürlich auch einen
+beliebigen anderen Text verwenden.
+ In einer analogen Weise können Sie die Liste noch durch eine
+waagerechte Linie abschließen, indem Sie einen #on("i")#Nachspann#off("i")# definie­
+ren. Die dafür notwendige Anweisung heißt
+
+
+ % NACHSPANN
+
+
+Die Zeilen nach dieser Anweisung werden gedruckt, nachdem alle
+Sätze bearbeitet worden sind. Das folgende Druckmuster erzeugt
+schon eine sehr schöne Liste:
+
+
+ % VORSPANN
+ Alle Namen aus der EUDAS-Datei 'adressen'
+ -----------------------------------------
+ % WIEDERHOLUNG
+ ! &Name ! &Vorname !
+ % NACHSPANN
+ -----------------------------------------
+
+
+nämlich:
+
+
+ Alle Namen aus der EUDAS-Datei 'adressen'
+ -----------------------------------------
+ ! Wegner ! Herbert !
+ ! Sandmann ! Helga !
+ ! Katani ! Albert !
+ ! Ulmen ! Peter !
+ ! Regmann ! Karin !
+ ! Arken ! Hubert !
+ ! Simmern ! Anna-Maria !
+ ! Kaufmann-Drescher ! Angelika !
+ ! Fuhrmann ! Harald !
+ ! Seefeld ! Friedrich !
+ -----------------------------------------
+
+
+Die drei Teile, aus denen ein Druckmuster bestehen kann (Vorspann,
+Nachspann und Wiederholungsteil), werden #on("i")#Abschnitte#off("i")# genannt. Wie
+Sie später noch sehen werden, haben Abschnitte eine Reihe von
+gemeinsamen Eigenschaften. Ein Abschnitt wird durch eine eigene
+Anweisung eingeleitet und endet, wenn ein anderer Abschnitt be­
+ginnt oder das Druckmuster zu Ende ist. Alle Abschnitte können
+auch weggelassen werden, irgendein Abschnitt muß aber immer
+vorhanden sein. So ist es zum Beispiel möglich, ein Druckmuster zu
+bauen, das nur aus einem Nachspann besteht (Sie werden allerdings
+jetzt noch nicht verstehen können, warum so etwas sinnvoll sein
+kann).
+ Zum Abschluß dieses Kapitels hier noch einmal eine Übersicht
+der bisher vorgestellten Anweisungen:
+
+
+ Anweisung ! Bedeutung
+ ---------------+----------------------------------
+ % VORSPANN ! leitet Vorspann ein
+ % WIEDERHOLUNG ! leitet Wiederholungsteil ein
+ % NACHSPANN ! leitet Nachspann ein
+
+
+
+7.4 Feldmuster
+
+Mit den bis jetzt beschriebenen Möglichkeiten des Druckgenerators
+können Sie schon sehr viel anfangen. Es fehlt aber noch die Mög­
+lichkeit, mehrere Feldinhalte direkt hintereinander zu schreiben,
+egal wie lang diese Inhalte sind. Diese Fähigkeit wird zum Beispiel
+für die anfangs vorgestellte Liste benötigt.
+
+#on("b")#Variable Position#off("b")# Die Feldmuster, die Sie bis jetzt
+kennen, begin­
+nen mit einem '&'-Zeichen und werden immer genau an der Stelle
+gedruckt, an der sie stehen (feste Position). Sie können ein Feld­
+muster aber auch mit '%' beginnen lassen. In diesem Fall kann der
+Inhalt verschoben werden (variable Position), je nachdem, ob vorhe­
+rige Inhalte kürzer oder länger sind.
+ '%' ist wie '&' ein reserviertes Zeichen, kann also nicht direkt
+gedruckt werden. Da '&' und '%' Feldmuster einleiten, heißen sie
+#on("i")#Musterzeichen#off("i")#.
+ Um Feldmuster variabler Position einmal auszuprobieren, soll­
+ten Sie unser bisheriges Druckmuster in der folgenden Weise um­
+schreiben:
+
+
+ % WIEDERHOLUNG
+ &Vorname %Name
+
+
+(Vorspann und Nachspann der Einfachheit halber mal weggelassen).
+Als Ergebnis erhalten wir:
+
+
+ Herbert Wegner
+ Helga Sandmann
+ Albert Katani
+ Peter Ulmen
+ Karin Regmann
+ Hubert Arken
+ Anna-Maria Simmern
+ Angelika Kaufmann-Drescher
+ Harald Fuhrmann
+ Friedrich Seefeld
+
+
+Das Feldmuster '%Name' ist also entsprechend der Länge des Vor­
+namens nach links oder nach rechts gerutscht. Zu beachten ist, daß
+ein Feldmuster mit '%' nicht in der ersten Spalte stehen darf, denn
+dann würde die Zeile als Anweisung angesehen. Ein Feldmuster
+variabler Position wäre ja auch in der ersten Spalte wenig sinnvoll.
+
+#on("b")#Feste Länge#off("b")# Außer den beiden bisher besprochenen einfachen
+Arten (mit '&' oder '%') gibt es noch weitere Ausprägungen von
+Feldmustern für besondere Fälle. Wird ein Feldmuster noch von
+weiteren Musterzeichen gefolgt, dann wird dieses Feldmuster immer
+in der reservierten Länge eingesetzt. Die reservierte Länge reicht
+vom ersten bis zum letzten Musterzeichen. Durch die zusätzlichen
+Musterzeichen wird also ein bestimmter Platz freigehalten.
+ Ersetzt man im obigen Druckmuster '&Vorname' durch
+'&Vorname&&', wird der Effekt des folgenden '%'-Feldes wieder
+aufgehoben, da jetzt für alle Vornamen die gleiche Länge verwendet
+wird (Probieren Sie dies aus).
+ Bei einem solchen Feldmuster mit fester Länge wird der Inhalt
+abgeschnitten, falls er diese Länge überschreitet; ist der Inhalt
+kürzer, wird rechts mit Leerstellen aufgefüllt. Aber auch bei Feld­
+mustern mit variabler Länge (also ohne folgende Musterzeichen)
+kann abgeschnitten werden, nämlich genau dann, wenn der Inhalt so
+lang ist, daß ein folgendes Feld mit fester Position (mit '&' anfan­
+gend) überschrieben würde. Hätten wir also in unserem ersten
+Druckmuster nicht genügend Platz für die Spalten vorgesehen,
+wären einige Namen abgeschnitten worden (probieren Sie es nochmal
+aus, falls es Ihnen nicht schon passiert ist).
+ In einem weiteren Fall werden Feldmuster variabler Länge
+abgeschnitten, nämlich wenn die generierte Zeile die maximale
+Zeilenlänge überschreitet. Die maximale Zeilenlänge richtet sich
+nach dem Dateilimit, das für das Druckmuster eingestellt ist. Nor­
+malerweise ist dies 77, so daß Sie in Normalschrift die Zeilenbreite
+auf einem DIN A4-Blatt nicht überschreiten.
+ Benutzen Sie jedoch breites Papier oder eine schmale Schrift,
+sollten Sie während der Eingabe des Druckmusters ESC ESC tippen
+und das Kommando
+
+
+ limit (135)
+
+
+eingeben. EUDAS nutzt dann die volle Zeilenbreite aus.
+
+#on("b")#Rechtsbündig#off("b")# Sie sind jetzt aber noch nicht zu Ende mit
+den
+Feldmustervariationen. Eine letzte Möglichkeit besteht darin, den
+Inhalt rechtsbündig in ein Feldmuster einzusetzen. Dies hat natür­
+lich nur Sinn bei fester Länge. Man erreicht dies dadurch, daß man
+das Feldmuster mit mehreren Musterzeichen beginnen läßt. So ist
+
+
+ %%Vorname%
+
+
+die rechtsbündige Version von
+
+
+ %Vorname%%
+
+
+Beide Feldmuster sind gleich lang, beim ersten wird jedoch am lin­
+ken Rand aufgefüllt oder abgeschnitten, beim zweiten dagegen am
+rechten Rand.
+
+#on("b")#Zusammenfassung#off("b")# Hier noch einmal eine Zusammenstellung
+aller möglichen Feldmustertypen:
+
+
+ Typ ! Beispiel ! Position ! Länge ! bündig
+ ----+-----------+------------------------------
+ 1 ! &Name ! fest ! variabel ! links
+ 2 ! %Name ! variabel ! variabel ! links
+ 3 ! &Name&&& ! fest ! fest ! links
+ 4 ! %Name%%% ! variabel ! fest ! links
+ 5 ! &&&Name& ! fest ! fest ! rechts
+ 6 ! %%%Name% ! variabel ! fest ! rechts
+
+
+Wir können zusammenfassen:
+#free (0.2)#
+* Feldmuster dienen im Druckmuster dazu, Stellen zu markieren, an
+ denen Inhalte eingesetzt werden sollen.
+#free (0.2)#
+* Feldmuster beginnen mit einem Musterzeichen ('&' oder '%');
+ darauf folgt der Feldname.
+#free (0.2)#
+* Durch '&' wird feste und durch '%' variable Position festgelegt.
+#free (0.2)#
+* Durch zusätzliche Musterzeichen kann eine feste Länge angege­
+ ben werden; mehrere Musterzeichen am Anfang führen zu rechts­
+ bündigem Einsetzen.
+
+#on("b")#Abgrenzung der Feldnamen#off("b")# Als nächstes sollen Sie den Fall
+be­
+trachten, daß Sie einen Namen in der oft auftretenden Form
+
+
+ Name, Vorname
+
+
+schreiben wollen. Die Schwierigkeit liegt in dem Komma, das direkt
+hinter dem Namen folgen soll. Sie könnten versuchen, diese Situa­
+tion im Druckmuster folgendermaßen darzustellen:
+
+
+ % WIEDERHOLUNG
+ &Name, %Vorname
+
+
+In diesem Fall erhalten Sie aber die Fehlermeldung
+
+
+ FEHLER in Zeile 2 bei >>Name,<<
+ diese Abkuerzung ist nicht definiert
+
+
+Wenn Sie sich nicht genau vorstellen können, wie der Druckgenera­
+tor ein Feldmuster liest, wird Ihnen dieser Fehler mysteriös er­
+scheinen, denn 'Name' ist doch als Feld definiert (was eine Abkür­
+zung ist, werden Sie in Kapitel 13 lernen). Den entscheidenden
+Hinweis liefert jedoch das Komma. Offensichtlich hat der Druck­
+generator das Komma als Teil des Feldnamens angesehen.
+ Dies liegt daran, daß ja irgendwann der Feldname in einem
+Feldmuster beendet sein muß. Normalerweise interpretiert der
+Druckgenerator ein Leerzeichen oder Musterzeichen als Ende des
+Namens, alle vorherigen Zeichen gehören mit zum Feldnamen. Wenn
+nun aber nach dem Feldmuster kein Leerzeichen folgen soll (wie in
+unserem Beispiel) oder der Feldname selbst Leerzeichen enthält
+(dies ist ja erlaubt, könnte aber im Druckmuster nie erkannt wer­
+den), muß noch eine zusätzliche Angabe erfolgen.
+ In solchen Fällen kann der Feldname in spitze Klammern einge­
+schlossen werden. Der Druckgenerator sieht den Feldnamen dann bei
+der ersten schließenden Klammer als beendet an, wobei die Klam­
+mern natürlich nicht zum Feldnamen gehören, aber auch nicht ge­
+druckt werden.
+ Das obige Beispiel müßte also richtig so formuliert werden:
+
+
+ % WIEDERHOLUNG
+ &<Name>, %Vorname
+
+
+Wenn Sie dieses Druckmuster ausprobieren, werden Sie sehen, daß
+die Namen tatsächlich in der gewünschten Form erscheinen.
+
+#on("b")#Leerautomatik#off("b")# Es gibt noch eine trickreiche Automatik in
+EUDAS,
+die in manchen Fällen ganz nützlich ist - und zwar in Fällen, in
+denen Sie mehrere Felder als Aufzählung durch Leerzeichen ge­
+trennt drucken wollen. Nehmen wir an, unsere Adreßdatei hätte
+noch ein Feld 'Titel', in das Sie bei Bedarf 'Dr.' oder 'Prof. Dr.'
+eintragen. In der Adresse würden Sie dann angeben:
+
+
+ &Titel %Vorname %Name
+
+
+Wenn der Titel jedoch leer ist, würde ein störendes Leerzeichen vor
+dem Namen bleiben. In einem solchen Fall entfernt EUDAS das Leer­
+zeichen automatisch. Vorbedingung für diese Automatik ist, daß es
+sich um ein Feld variabler Länge handelt und vor dem Feld noch ein
+Leerzeichen steht (außer in Spalte 1).
+
+#on("b")#Aufgabe#off("b")# Sie sollten jetzt die Möglichkeiten des
+Druckgenerators
+soweit kennengelernt haben, daß Sie ein Druckmuster für die zu
+Anfang des Kapitels erwähnte Liste aller Dateiinhalte erstellen
+können. Versuchen Sie dies zunächst allein, ehe Sie die Lösung
+nachschauen.
+
+
+Hier nun die Lösung:
+
+
+ % VORSPANN
+ Vorname Name, Strasse, PLZ Ort, m/w
+ -------------------------------------------------------
+ % WIEDERHOLUNG
+ &Vorname %<Name>, %<Strasse>, %PLZ %<Ort>, %m/w
+
+
+Beachten Sie die spitzen Klammern, die nötig sind, um das Kom­
+ma ohne Zwischenraum anzuschließen.
+
+#on("b")#Beispiel#off("b")# Als letztes Beispiel sollen Sie einen Fall
+betrachten, bei
+dem pro Satz mehr als eine einzelne Listenzeile gedruckt werden
+soll, und zwar sollen Sie einen Brief schreiben, in den der Druck­
+generator die Adressen verschiedener Leute einfügen soll. Die Er­
+stellung von Formbriefen ist eine sehr häufige Anwendung von
+EUDAS. Mit den bisher beschriebenen Konstrukten kann man etwa
+folgendes Druckmuster schreiben:
+
+
+ % WIEDERHOLUNG
+ &Vorname %Name
+ &Strasse
+ &PLZ %Ort
+
+ Lieber &Vorname !
+
+ Ich lade Dich mit diesem Brief zu
+ meiner nächsten Party ein.
+ Bring gute Laune und was zu Essen mit.
+
+ Viele Grüße
+ \#page\#
+
+
+Die letzte Zeile zeigt eine Möglichkeit, von der Sie wahrscheinlich
+öfter Gebrauch machen werden, nämlich Druckersteuerungsanwei­
+sungen in das Druckmuster einzufügen. Die Anweisung '\#page\#'
+wird an den Drucker weitergereicht und bewirkt, daß nach jedem
+Brief eine neue Seite angefangen wird (Sie wollen sicher nicht
+mehrere Briefe auf ein Blatt drucken). Sie können auch andere An­
+weisungen verwenden, z.B. neue Schrifttypen einstellen. Informieren
+Sie sich gegebenenfalls, welche Anweisungen die Textkosmetik zur
+Verfügung stellt.
+
+#on("b")#Ausblick#off("b")# Sie kennen jetzt bereits einen großen Teil der
+Möglich­
+keiten des Druckgenerators. Einige wünschenswerte Fähigkeiten
+fehlen jedoch noch. So wäre es vorteilhaft, wenn abhängig vom
+Inhalt des Feldes 'm/w' die Anrede 'Sehr geehrter Herr' oder 'Sehr
+geehrte Frau' erzeugt werden könnte. Außerdem könnte das im
+Rechner vorhandene Datum automatisch in den Brief übernommen
+werden. Diese Möglichkeiten werden den Kapiteln 12 und 13 be­
+schrieben.
+ Sie sollten diese jedoch erst dann durchlesen, wenn Sie eine
+gewisse Sicherheit im Umgang mit Druckmustern erlangt haben.
+Zuvor sollten Sie die Inhalte dieses Kapitels beherrschen, damit Sie
+EUDAS gut nutzen können.
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.8 b/app/eudas/4.3/doc/eudas.hdb.8
new file mode 100644
index 0000000..83246e9
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.8
@@ -0,0 +1,211 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (75)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+8 Was war und was noch kommt
+
+
+
+8.1 Rückblick
+
+So! Wenn Sie bis hierhin gut mitgearbeitet haben, haben Sie die
+erste und wichtigste Etappe beim Erlernen von EUDAS schon ge­
+schafft. Bevor Sie kennenlernen, was für Möglichkeiten Ihnen EUDAS
+sonst noch bietet, wollen wir die wichtigsten Dinge rekapitulieren,
+die Sie gelernt haben sollten.
+
+#on("b")#EUDAS-Dateien#off("b")# Sie sollten wissen, wie EUDAS-Dateien
+aussehen,
+und daß sie sich von normalen Textdateien unterscheiden. Diese
+Unterscheidung sollten Sie immer beachten, denn es gibt Funktio­
+nen, die nur EUDAS-Dateien annehmen (zum Beispiel 'Öffnen'),
+andere, die nur Textdateien annehmen (zum Beispiel 'Textdatei
+erstellen') und solche, die mit beliebigen Arten von Dateien "ohne
+Ansehen der Person" funktionieren (zum Beispiel 'Kopieren vom
+Archiv').
+
+#on("b")#Bedienung#off("b")# Sie sollten wissen, wie man eine Funktion im
+Menü
+aufruft; wie Sie EUDAS die notwendigen Informationen (zum Beispiel
+Dateinamen) mitgeben und wie Sie in besonderen Situationen (Feh­
+ler, Abbruch) reagieren können. Zur problemlosen Bedienung sollten
+Sie auch die jeweilige Statuszeile interpretieren können.
+
+#on("b")#Dateiverwaltung#off("b")# Sie sollten wissen, wie Sie Dateien von
+Archiv­
+disketten holen und dort auch wieder abspeichern können. Dazu ist
+die Dateiauswahl durch Ankreuzen sehr hilfreich. Sie sollten von
+Anfang an darauf achten, daß Sie Ihre Dateien regelmäßig auf dem
+Archiv sichern, damit Sie bei etwaigen Problemen mit Ihrem Rechner
+die Daten nicht verlieren.
+
+#on("b")#Öffnen#off("b")# Sie sollten wissen, daß Sie eine EUDAS-Datei vor
+dem
+Bearbeiten erst öffnen müssen. Weiterhin sollten Sie mit der Ar­
+beitskopie umgehen können, die EUDAS bei Änderungen anlegt.
+Denken Sie daran, Ihre Datei nach Änderungen zu sichern. Sie soll­
+ten auch neue EUDAS-Dateien mit eigener Struktur anlegen können.
+
+#on("b")#Ansehen und Ändern#off("b")# Sie sollten wissen, wie Sie die Daten
+Ihrer
+EUDAS-Dateien am Bildschirm abrufen können - entweder manuell
+oder mit Hilfe eines Suchmusters. Sie sollten Änderungen und Ein­
+fügungen durchführen können.
+
+#on("b")#Drucken#off("b")# Sie sollten wissen, wie Sie die Daten einer
+EUDAS-Datei
+mit Hilfe eines Druckmusters ausdrucken können. Denken Sie daran,
+daß dies ein zweistufiger Vorgang ist (Generierung der Druckdatei -
+Ausgeben an Drucker), den Sie an verschiedenen Stellen beeinflus­
+sen können.
+
+Lesen Sie das entsprechende Kapitel erneut durch, wenn Sie sich bei
+einem Punkt dieser Aufzählung nicht sicher sind. Wichtig ist auch,
+daß Sie die bschriebenen Funktionen selbst am Rechner ausprobiert
+haben.
+ Wenn Sie dies alles geduldig absolviert haben, sind Sie in der
+Lage, EUDAS sinnvoll für Ihre eigenen Probleme einzusetzen. Sie
+sollten jetzt ruhig versuchen, eigene Lösungen zu realisieren. Sicher
+werden Sie dabei erkennen, daß Ihnen noch einige Möglichkeiten
+fehlen. Die Chancen sind aber gut, daß EUDAS Ihnen diese Möglich­
+keiten bietet.
+ Im nächsten Abschnitt erhalten Sie einen Überblick darüber,
+was EUDAS noch zur Verfügung stellt. Dort können Sie sich orien­
+tieren, welche Kapitel Sie lesen sollten, wenn Sie bestimmte Fragen
+haben.
+
+
+8.2 Ausblick
+
+Im zweiten Teil dieses Handbuchs erwarten Sie eine ganze Reihe
+interessanter Themen. Dort werden Erweiterungen und Verallgemei­
+nerungen von Funktionen beschreiben, die Sie bereits kennen. Viele
+Funktionen sind jedoch ganz neu und manchmal auch nicht ganz
+einfach zu beherrschen.
+
+#on("b")#Kapitel 9#off("b")# Das neunte Kapitel befaßt sich mit der
+grundsätzlichen
+Struktur der geöffneten Datei. Sie erfahren, daß Sie mehr als eine
+Datei gleichzeitig öffnen und bearbeiten können. Zum einen können
+Sie gleichartige Dateien verketten oder Dateien über Beziehungen
+koppeln. Insbesondere das Koppeln ist eine wichtige Grundlage für
+viele fortgeschrittene Anwendungen von EUDAS.
+ In diesem Kapitel wird auch beschrieben, wie Sie auf einem
+Mehrplatzsystem von mehreren Plätzen aus auf die gleichen EUDAS-
+Dateien zugreifen können. Die Fähigkeiten von EUDAS auf diesem
+Gebiet erreichen nicht das Niveau von großen Datenbanksystemen,
+sind jedoch einfach anzuwenden und in vielen Fällen nützlich.
+
+#on("b")#Kapitel 10#off("b")# Im zehnten Kapitel erfahren Sie, wie Sie den
+Bildschirm
+übersichtlicher gestalten können, wenn Sie Dateien mit zahlreichen
+Feldern benötigen. Sie können bestimmte Felder auswählen, aber
+auch die Sätze einfach ausschnittweise ansehen.
+ Das Suchmuster besitzt noch viele Fähigkeiten, die im ersten
+Teil nicht zur Sprache gekommen sind. Sie können mehrere Bedin­
+gungen auf verschiedene Weisen miteinander kombinieren. Auch
+einige neue Vergleiche treten auf. Außerdem können Sie mehrere
+Felder eines Satzes miteinander vergleichen.
+ Zum schnellen Überblick steht Ihnen eine Funktion bereit, die
+jeweils einen Satz pro Bildschirmzeile anzeigt. In dieser Übersicht
+können Sie blättern und auch Sätze markieren (ankreuzen), um Sie
+später zu bearbeiten.
+
+#on("b")#Kapitel 11#off("b")# Das elfte Kapitel ist den Funktionen zur
+Bearbeitung
+gewidmet. Dort erfahren Sie, wie Sie eine Datei sortieren können.
+Außerdem können Sie eine Datei ausschnittweise kopieren, wobei Sie
+noch eine Vielzahl von Manipulationsmöglichkeiten haben.
+ Auch das Tragen von mehreren Sätzen in einem Arbeitsgang ist
+möglich. Dabei können Konsistenzbedingungen einer Datei überprüft
+werden.
+ Als letztes erfahren Sie, wie man eine EUDAS-Datei automa­
+tisch nach einer beliebigen Vorschrift ändern kann. Hier, wie bei
+den vorherigen Funktionen, werden Sie zum ersten Mal erkennen,
+wieviel man mit der Programmiersprache ELAN innerhalb von EUDAS
+ohne viel Aufwand machen kann.
+
+#on("b")#Kapitel 12#off("b")# Das nächste Kapitel zeigt Ihnen weitere
+Möglichkeiten
+zum Drucken. Sie können die Druckausgabe vor dem Drucken noch
+mit den Programmen der EUMEL-Textverarbeitung aufbereiten. Auch
+innerhalb der EUMEL-Textverarbeitung können Sie EUDAS aufrufen,
+um Daten aus einer EUDAS-Datei in den Text einzufügen.
+ EUDAS kann auch in mehreren Spalten drucken (zum Beispiel
+für Etiketten). Schließlich wird noch beschrieben, wie Sie lange
+Felder auf mehrere Zeilen aufteilen können und welche speziellen
+Möglichkeiten Sie zur Erzeugung von Tabellen haben.
+
+#on("b")#Kapitel 13#off("b")# Ab hier beginnt die Beschreibung dessen, was
+die
+Ausgabe des Druckgenerators so ungeheuer anpassungsfähig macht:
+die Verwendung der Programmiersprache ELAN.
+ Mit einfachsten ELAN-Elementen können Sie komplizierte For­
+matierungswünsche erfüllen. Dazu können Sie den Inhalt von Feld­
+mustern durch vorherige Bearbeitung und durch die Abfrage von
+Bedingungen manipulieren. Ganze Musterteile können in Abhängig­
+keit von Bedingungen variabel gestaltet werden.
+ Auch der Ablauf von Druckvorgängen kann von Bedingungen
+abhängig gemacht werden. So lassen sich gesteuert Vorspann und
+Nachspann innerhalb des Ausdrucks einfügen und Zwischenüber­
+schriften oder -summen bilden (Gruppenverarbeitung).
+
+#on("b")#Kapitel 14 und 15#off("b")# Für denjenigen, der noch nie mit ELAN zu
+tun
+hatte, werden diese Möglichkeiten sicher nicht ganz einfach zu
+verstehen sein. Obwohl die vorherigen Kapitel viele benutzbare
+Beispiele enthalten, ist zur vollen Ausnutzung ein gewisses Ver­
+ständnis von ELAN notwendig.
+ Dies soll in den Kapitel 14 und 15 vermittelt werden, und zwar
+in dem Umfang, in dem es in EUDAS nötig ist (Sie sollen hier nicht
+zum ELAN-Programmierer ausgebildet werden). Für den ELAN-
+Kenner bieten diese Kapitel sicher nichts Neues, aber sie enthalten
+viele Beispiele und Beschreibungen der Funktionen, die für EUDAS
+wichtig sind.
+ Dabei geht Kapitel 15 weiter auf die Sprachmittel für Zählvor­
+gänge, Auswertungen und statistische Anwendungen ein, während in
+Kapitel 14 die grundlegenden Ausdrücke zur Formulierung von
+Manipulationen besprochen werden.
+
+#on("b")#Kapitel 16#off("b")# Im letzten Kapitel geht es dann wieder
+harmloser zu.
+Hier werden die Funktionen beschrieben, die unter EUDAS zur
+allgemeinen Dateiverwaltung zur Verfügung stehen. Im Grunde sind
+dies alles Funktionen, die vom EUMEL-System zur Verfügung ge­
+stellt werden. EUDAS integriert sie lediglich in ein Menüsystem,
+damit Sie als Benutzer die Funktionen möglichst einfach aufrufen
+können.
+ Aber auch dem erfahrenen EUMEL-Benutzer bieten die Funktio­
+nen einen zusätzlichen Komfort, da auch hier die praktische Aus­
+wahl durch Ankreuzen in allen Funktionen vertreten ist. Außerdem
+wird die Anzahl von Tastendrücken zum Erreichen eines Ziels ver­
+ringert. Daher besteht auch für den "Profi" keine Notwendigkeit,
+grundsätzlich mit einer Kommandoschnittstelle weiterzuarbeiten.
+
+#on("b")#Referenzhandbuch#off("b")# Im Referenzhandbuch sind alle hier
+besproche­
+nen Funktionen noch einmal in einer sehr kurzen, zusammenfassen­
+den und abstrakten Form aufgeführt. Dort sollen Sie nachschlagen,
+wenn Sie eine ganz bestimmte Information suchen und sich mit
+EUDAS bereits auskennen.
+ Sie können jedoch auch ohne das Referenzhandbuch auskommen,
+denn alles, was Sie wissen müssen, steht auch hier im Benutzer­
+handbuch.
+ Das Referenzhandbuch enthält auch einen Teil, der sich spe­
+ziell an den ELAN-Programmierer wendet, der besondere Anwendun­
+gen mit EUDAS realisieren will. Allerdings sollten alle dort be­
+schriebenen Möglichkeiten mit Vorsicht betrachtet werden, da sie im
+Normalfall nicht so abgesichert sind, wie die hier beschriebenen
+Fähigkeiten. Auch sollten Sie mit den Einsatzmöglichkeiten von
+ELAN, wie sie in den Kapitel 11 und 13 beschrieben sind, wirklich
+alle praktischen Probleme erledigen können.
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.9 b/app/eudas/4.3/doc/eudas.hdb.9
new file mode 100644
index 0000000..341feca
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.9
@@ -0,0 +1,556 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (83)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+9 Das virtuelle Dateikonzept
+
+
+
+9.1 Konzept
+
+Bisher haben Sie zu einem Zeitpunkt immer nur eine EUDAS-Datei
+bearbeiten können. Wenn Sie zu einer anderen Datei wechseln woll­
+ten, mußten Sie die eine Datei sichern und die andere Datei wieder
+öffnen. Es gibt jedoch Fälle, in denen Beziehungen zwischen mehre­
+ren Dateien bestehen. Daher kann EUDAS auch mit mehreren Dateien
+gleichzeitig umgehen.
+ Es hat jedoch Vorteile, wenn man nur mit einer Datei arbeitet.
+Sie müssen dann nicht immer den Namen der gewünschten Datei
+angeben, wenn Sie eine Funktion ausführen. Dies brauchen Sie nur
+einmal beim Öffnen zu tun - danach ist eindeutig festgelegt, wel­
+che Datei gemeint ist.
+ EUDAS versucht diese Vorteile auch bei mehreren Dateien zu
+erhalten. Die verschiedenen Dateien werden so kombiniert, daß eine
+neue Datei entsteht. Sie arbeiten dann nur mit dieser Datei, die alle
+Daten der Einzeldateien enthält.
+ Damit Sie aber nicht so lange warten müssen, geschieht dieser
+Kombinationsvorgang erst beim Ansehen. Die kombinierte Datei ist
+also nicht wirklich vorhanden, sondern ihre Einzelsätze werden nur
+bei Bedarf erzeugt. Daher heißt diese Gesamtdatei auch #on("i")#virtuelle#off("i")#
+(scheinbare) Datei.
+ Eine Kombination von Dateien ist auf zwei Arten möglich. Sie
+können gleichartige Dateien hintereinander#on("i")#ketten#off("i")#, oder Sie können
+Dateien über gemeinsame Felder #on("i")#koppeln#off("i")#. Beide Methoden können
+auch kombiniert werden.
+
+#on("b")#Änderungen#off("b")# Die virtuelle Datei kann auch verändert werden.
+Die
+Veränderungen werden dann in den entsprechenden Ursprungsda­
+teien vorgenommen. Es ist jedoch nicht immer eindeutig, wie diese
+Änderungen aussehen sollen. Achten Sie daher auf die speziellen
+Regeln, die bei solchen Änderungen gelten, damit Sie die Auswir­
+kungen einer Änderung abschätzen können.
+ Wenn Sie Veränderungen vorgenommen haben, müssen Sie die
+Arbeitskopien anschließend wieder sichern. Denken Sie daran, daß
+EUDAS immer auf unbenannten Kopien arbeitet, wenn Sie ändern
+wollen. Beim Sichern von mehreren Dateien wird Ihnen zu jeder
+Datei einzeln angezeigt, ob sie tatsächlich verändert wurde. Sie
+können dann ebenfalls einzeln entscheiden, ob Sie die Datei sichern
+wollen oder nicht.
+
+
+9.2 Ketten
+
+Wenn Sie einmal EUDAS-Dateien mit mehreren tausend Sätzen er­
+stellen, werden Sie feststellen, daß deren Handhabung recht um­
+ständlich sein kann. Da die Datei sehr groß ist, dauern zum Beispiel
+Kopiervorgänge aufs Archiv viel länger als bei kleinen Dateien.
+ Wenn Sie nun auch noch für jede kleine Änderung die Datei
+vom Archiv holen und anschließend wieder zurückschreiben müssen,
+werden Sie einen Weg suchen, diese Arbeit zu erleichtern. Die ein­
+fachste Möglichkeit wäre, einen schnelleren Rechner zu kaufen. Dies
+ist gleichzeitig aber auch die teuerste.
+
+
+#free (4.5)#
+
+#center#Abb. 9-1 Verkettung von A und B
+
+
+EUDAS ermöglicht es Ihnen nun, die große Datei in mehrere kleine
+aufzuspalten. In der Regel gibt es bei solch großen Dateien ein
+Kriterium, nach dem die Sätze in verschiedene Dateien verteilt
+werden können. Jede einzelne Datei kann nun bequem geändert
+werden.
+ Ein Problem entsteht jedoch, wenn alle Dateien zusammen ver­
+arbeitet werden müssen (zum Beispiel beim Drucken). Für einen
+solchen Vorgang können Sie die kleineren Dateien logisch aneinan­
+derketten.
+ Dies bedeutet für Sie, daß alle kleinen Dateien wie eine große
+Datei wirken. Wenn Sie beim Bewegen in der Datei das Ende einer
+einzelnen Datei erreichen, kommen Sie automatisch an den Anfang
+der nächsten Datei.
+
+#on("b")#Aufruf#off("b")# Damit dies funktioniert, müssen die Dateien
+natürlich
+gleiche Feldstruktur haben. Außerdem ist die Zahl der verkettbaren
+Dateien aus technischen Gründen auf 10 beschränkt.
+ Sie können die Dateien verketten, indem Sie die Funktion
+#free (0.2)#
+
+ K Ketten
+
+#free (0.2)#
+im Menü 'Öffnen' aufrufen.
+
+#on("b")#Änderungen#off("b")# In der virtuellen Datei ist sowohl Einfügen als
+auch
+Ändern erlaubt. Beim Einfügen ist jedoch zu beachten, daß am Ende
+einer Datei nicht angefügt werden kann. Dies liegt daran, daß Sie
+entweder vor dem letzten Satz der einen Datei oder vor dem ersten
+Satz der anderen Datei einfügen. Der Endesatz der einen Datei, der
+normalerweise sichtbar wäre, wird übersprungen.
+ Am Ende der letzten Datei können Sie natürlich anfügen, da
+deren Endemarkierung als Ende der ganzen Datei ja wieder sichtbar
+ist.
+
+
+9.3 Koppeln
+
+Nachdem das Verketten von Dateien noch ganz einfach zu verstehen
+war, kommt jetzt eine Funktion auf Sie zu, die kompliziertere Mög­
+lichkeiten in sich birgt: nämlich das Koppeln.
+ Es kommt häufiger vor, daß sich ein Feld einer Datei auf einen
+bestimmten Satz in einer anderen Datei bezieht. So könnten zum
+Beispiel die Ausleihen einer Bücherei in folgender Datei gespeichert
+sein:
+
+
+ 'Name'
+ 'Vorname'
+ 'Datum'
+ 'Buch-Nr.'
+
+
+Wenn jetzt ein Ausleiher sein Rückgabedatum überschritten hat,
+möchte die Bücherei dem Kunden ein Mahnschreiben schicken. Auf
+diesem Schreiben soll aber nicht die Buch-Nr. erscheinen, sondern
+Autor und Titel des Buches.
+ Diese Sekundärinformationen sind in einer anderen Datei ge­
+speichert, der Bestandskartei:
+
+
+ 'Buch-Nr.'
+ 'Autor'
+ 'Titel'
+ 'Verlag'
+
+
+Alle Dateistrukturen hier sind natürlich zwecks größerer Übersicht­
+lichkeit vereinfacht. Um jetzt dem Kunden das Mahnschreiben zu
+schicken, müssen die Informationen in den beiden Dateien korreliert
+werden.
+
+#on("b")#Aufruf#off("b")# Zuerst wird die Ausleihdatei normal geöffnet. Dazu
+wird dann die Bestandsdatei mit Hilfe der Funktion
+#free (0.2)#
+
+ K Koppeln
+
+#free (0.2)#
+gekoppelt. Dies hat folgenden Effekt:
+ Die Sätze erscheinen normal so, wie sie in der Ausleihdatei
+auftauchen, also für jede Ausleihe genau ein Satz. Dazu erscheint
+aber jeweils die Beschreibung des ausgeliehenen Buches aus der
+Bestandsdatei: die beiden Dateien wurden über das Feld "Buch-Nr."
+gekoppelt.
+ Als Struktur ergibt sich für die kombinierte Datei:
+
+
+ 'Name'
+ 'Vorname'
+ 'Datum'
+ 'Buch-Nr.'
+ 'Titel'
+ 'Autor'
+ 'Verlag'
+
+
+Die Felder der Koppeldatei wurden also noch hinzugefügt.
+
+#on("b")#Koppelfelder#off("b")# Zwei Dinge sind in diesem Zusammenhang
+wichtig:
+Damit der Koppelvorgang ohne allzuviele Vorgaben auskommen kann,
+müssen Felder, über die gekoppelt wird, den gleichen Namen haben
+- und zwar exakt Zeichen für Zeichen. Zum zweiten muß ein solches
+#on("i")#Koppelfeld#off("i")# am Anfang der gekoppelten Datei (in unserem Fall der
+Bestandsdatei) stehen. Dies ist aus technischen Gründen notwendig,
+damit der Koppelvorgang in vernünftiger Geschwindigkeit ablaufen
+kann.
+
+
+#free (7.0)#
+
+#center#Abb. 9-2 Schema des Koppelvorgangs
+
+
+#on("b")#Mehrere Dateien#off("b")# Genau wie beim Ketten ist die Kombination
+der
+Dateien nicht physikalisch, sondern nur scheinbar vollzogen worden.
+Bis zum Limit der maximal geöffneten Dateien (10) können Sie auch
+weitere Dateien dazukoppeln. Die Koppelfelder dieser Dateien kön­
+nen sich jedoch immer nur auf die erste Datei beziehen, also nicht
+auf eine andere Koppeldatei.
+ Dies könnte man in unserem Beispiel ausnutzen. Die Bücherei
+hat sicher auch eine Datei ihrer Mitglieder. Diese könnte etwa so
+aussehen:
+
+
+ 'Name'
+ 'Vorname'
+ 'm/w'
+ 'Strasse'
+ 'PLZ'
+ 'Ort'
+
+
+Diese Datei können wir ebenfalls zur Ausleihdatei dazukoppeln.
+Damit haben wir auch gleich die Quelle gewonnen, aus der wir die
+Anschrift für das Mahnschreiben gewinnen können.
+ Die Kopplung geschieht in diesem Fall über zwei Felder, näm­
+lich 'Name' und 'Vorname'. Damit ein Mitglied eindeutig identifi­
+ziert wird, werden beide Namen gebraucht. Dies berücksichtigt auch
+das Koppelverfahren. Wiederum müssen die Namen exakt mit Namen
+der ersten Datei übereinstimmen.
+ Wenn mehrere Koppelfelder für eine Koppeldatei notwendig sind,
+müssen Sie alle hintereinander stehen. Wäre die Struktur der Mit­
+gliederdatei etwa
+
+
+ 'Name'
+ 'Titel'
+ 'Vorname'
+ 'm/w'
+ 'Strasse'
+ 'PLZ'
+ 'Ort'
+
+
+würde nur über 'Name' gekoppelt, da 'Titel' in der ersten Datei
+nicht vorkommt. Alle weiteren Felder können dann keine Koppelfel­
+der mehr werden. Durch Umstellen der Feldreihenfolge der Koppel­
+datei (durch Umkopieren) oder durch entsprechende Benennung von
+Feldern können Sie immer den gewünschten Effekt erzielen.
+
+
+#free (8.0)#
+
+#center#Abb. 9-3 Aufbau der virtuellen Datei
+
+
+#on("b")#Zusammenfassung#off("b")# An dieser Stelle wollen wir die Ergebnisse
+dieses Abschnitts als Regel zusammenfassen:
+
+#limit (12.0)#
+ Die ersten Felder der Koppeldatei, die wörtlich an be­
+ liebiger Stelle auch in der ersten Datei auftauchen,
+ werden Koppelfelder genannt. Zu einem Satz der ersten
+ Datei wird ein Satz der Koppeldatei gezeigt, der im In­
+ halt der Koppelfelder übereinstimmt.
+#limit (13.5)#
+
+Übersetzt in unser Beispiel heißt dies: 'Buch-Nr.' bzw. 'Name' und
+'Vorname' sind Koppelfelder. Zu einer bestimmten Ausleihe erschei­
+nen die Daten des Buches mit der angegebenen Buch-Nr. bzw. die
+Adresse des Mitgliedes mit den angegebenen Namen.
+
+
+9.4 Auswirkungen des Koppelns
+
+Nachdem Sie nun das Grundprinzip des Koppelns kennen, sollen Sie
+einige Auswirkungen dieses Verfahrens kennenlernen.
+ Ein Beispiel dazu finden Sie in Abb. 9-4. Dargestellt sind je­
+weils die Satznummern und einige Inhalte. Die zweite Zeile in der
+Hauptdatei und die erste in der Koppeldatei stellen das Koppelfeld
+dar.
+
+
+#free (6.5)#
+
+#center#Abb. 9-4 Kombinationen
+
+
+#on("b")#Kombinationen#off("b")# Zuerst muß geklärt werden, was passiert,
+wenn es
+keinen passenden Satz in der Koppeldatei gibt. Zum Beispiel könnte
+eine Buchnummer eingegeben worden sein, die in der Bestandsdatei
+nicht existiert. In diesem Fall zeigt EUDAS für die Felder der Kop­
+peldatei einfach einen leeren Inhalt an (siehe Satz 23 der Haupt­
+datei, es gibt keinen Satz mit 'L' in der Koppeldatei).
+ Wenn umgekehrt zu einem bestimmten Buch keine Ausleihe
+existiert, macht das natürlich nichts - das Buch erscheint nur
+dann, wenn Sie die Bestandsdatei alleine öffnen.
+ Weiterhin kann es passieren, daß es zwei passende Sätze in der
+Koppeldatei gibt. Dies kommt dann vor, wenn zwei Mitglieder glei­
+chen Namen und gleichen Vornamen haben (was gar nicht so selten
+ist). In diesem Fall zeigt EUDAS beide Kombinationen an (siehe
+Satz 23 der Hauptdatei). Die Ausleihe erscheint also zweimal, je­
+weils mit einem anderen Mitglied.
+ Damit man diesen Fall ohne weiteres erkennen kann, führt
+EUDAS bei Kopplungen zwei Nummern: zum einen die normale Satz­
+nummer und zum anderen eine Kombinationsnummer. In dem eben
+besprochenen Fall würde die Satznummer gleichbleiben, die Kombi­
+nationsnummer aber hochgezählt werden. Am Bildschirm wird die
+Kombinationsnummer durch Bindestrich getrennt hinter die Satz­
+nummer geschrieben, wenn Sie Dateien koppeln.
+ Das Durchgehen aller Kombinationen zu einem Satz der Haupt­
+datei passiert aber nur dann, wenn Sie sich mit der Funktion 'Satz
+weiter' in der Datei bewegen. Wenn Sie rückwärts gehen oder auf
+einen bestimmten Satz positionieren, wird immer nur die erste Kom­
+bination angezeigt (Dies hat zum Teil technische Gründe). Beim
+Zurückgehen von Satz 23-1 in dem Beispiel würde also auf Satz
+22-1 positioniert und die Kombination 22-2 übersprungen.
+
+#on("b")#Änderungen#off("b")# Auch wenn Sie Dateien gekoppelt haben, können
+Sie
+immer noch Sätze ändern und einfügen (wenn Sie dies beim Öffnen
+erlaubt haben). Die Auswirkungen der Veränderungen sind jedoch
+nicht mehr ganz so einfach wie bei geketteten Dateien, wo sich die
+Änderungen ja einfach auf den aktuellen Satz bezogen.
+ Als Grundregel gilt, daß Änderungen möglichst wenig Auswir­
+kungen auf die Koppeldateien haben sollen. Das führt dazu, daß
+beim Einfügen eines neuen Satzes oder beim Entfernen eines Satzes
+durch Tragen keine Aktion in der Koppeldatei durchgeführt wird.
+Dies ist auch nicht nötig, denn wenn zum Beispiel ein neuer (zu­
+nächst leerer) Satz eingefügt wird, existiert sowieso noch kein
+passender Satz in der Koppeldatei und die entsprechenden Felder
+bleiben leer. Hingegen darf beim Entfernen eines Satzes der Satz in
+der Koppeldatei nicht entfernt werden, da er ja noch zu einem an­
+deren Satz gehören könnte.
+ Änderungen an den Koppelfeldern können nun zu drei verschie­
+denen Reaktionen führen:
+
+1. Es wird kein Satz der Koppeldatei geändert, sondern nur ein
+ neuer passender Satz gesucht. Dies geschieht immer dann, wenn
+ außer den Koppelfeldern nur leere Inhalte für die Felder der
+ Koppeldatei angegeben sind. Nach dem Ändern oder Einfügen
+ werden dann die Inhalte des neuen Koppelsatzes angezeigt.
+
+ Beispiel: Bei einer Ausleihe geben Sie Name und Vorname des
+ Ausleihers an, nicht aber seine Adresse. Wenn Sie den Satzedi­
+ tor beim Einfügen mit ESC 'q' verlassen, wird die zugehörige
+ Adresse angezeigt (falls der entsprechende Name in der Kop­
+ peldatei vorhanden ist).
+
+2. Es wird ein neuer Satz in der Koppeldatei angefügt. Dies ge­
+ schieht immer dann, wenn die Koppelfelder verändert wurden
+ und die anderen Felder der Koppeldatei nicht leer sind. Da­
+ durch soll verhindert werden, daß die Koppelfelder in einem
+ Satz verändert werden, der vielleicht noch zu einem anderen
+ Satz paßt.
+
+ Beispiel: Sie geben bei einer Ausleihe auch die Adresse mit
+ an. Wenn eine Person mit gleichem Namen und Vornamen bereits
+ existiert, wird die dort gespeicherte Adresse nicht überschrie­
+ ben. Stattdessen wird die zweite Adresse auch in die Koppel­
+ datei eingetragen. Beim nächsten Ansehen bekommen Sie dann
+ zwei Adressen angezeigt. So wird verhindert, daß Sie ungewollt
+ die erste Adresse vernichten.
+
+3. Der Satz in der Koppeldatei wird verändert. Dies geschieht nur
+ dann, wenn die Koppelfelder unverändert geblieben sind, der
+ Rest sich aber geändert hat.
+
+ Beispiel: Sie ändern eine Ausleihe mit der zugehörigen
+ Adresse. Sie geben nur eine neue Straße an und lassen Name
+ und Vorname unverändert. Der Satz in der Koppeldatei enthält
+ anschließend die neue Straße.
+
+Da Koppeldateien keine Sortierung besitzen müssen, werden neue
+Sätze der Koppeldatei immer am Ende angefügt. Dies ist zu beach­
+ten, wenn die Koppeldatei auch allein verwendet werden soll. Ge­
+gebenenfalls müssen Sie die Koppeldatei dann erst sortieren.
+
+
+9.5 Umschalten auf Koppeldatei
+
+Häufig kommt es vor, daß Sie beim Einfügen eines neuen Satzes mit
+gekoppelten Dateien die Verbindung mit einem existierenden Satz
+der Koppeldatei erreichen wollen, aber den notwendigen Inhalt der
+Koppelfelder nicht auswendig wissen.
+ So wollen Sie beim Eingeben einer Ausleihe Name und Vorname
+des Entleihers nicht immer wieder abtippen. Dabei ist auch die
+Gefahr von Eingabefehlern sehr groß. Stattdessen wollen Sie lieber
+erst den Entleiher in der Mitgliederdatei suchen und dessen Namen
+dann automatisch in den Entleihsatz übernehmen.
+ Hierfür bietet Ihnen EUDAS eine Unterstützung an.
+
+#on("b")#Ausführung#off("b")# Während Sie sich in der virtuellen Datei
+befinden,
+können Sie auf eine bestimmte Koppeldatei umschalten, die Sie dann
+wie eine Einzeldatei bearbeiten können. Beim Zurückschalten haben
+Sie dann die Möglichkeit, die Koppelfelder des gefundenen Satzes zu
+übernehmen.
+ Das Umschalten bewirken Sie durch die Tastenkombination ESC
+'K' (großes K) nur im Menü 'Einzelsatz' sowie im Satzeditor beim
+Einfügen und Ändern. An anderen Stellen hat dieser Befehl keine
+Wirkung. Bei mehreren Koppeldateien werden Ihnen die Dateien der
+Reihenfolge nach angeboten. Durch Verneinung aller Fragen können
+Sie die Funktion ohne Wirkung beenden.
+ Haben Sie nun umgeschaltet, wird Ihnen die Koppeldatei dar­
+geboten, als hätten Sie sie allein geöffnet. Sie können die Datei
+auch beliebig ändern (wenn Sie dies beim Öffnen angegeben haben).
+Nur die Anzeige <KOPPEL> in der Bildüberschrift zeigt an, daß Sie
+sich in einer Koppeldatei befinden. Sie können auch Funktionen in
+anderen Menüs aufrufen.
+ Das Zurückschalten geschieht im Menü 'Einzelsatz' mit der
+gleichen Tastenkombination. Alle Einstellungen der virtuellen Datei
+von vorher bis auf die Feldauswahl bleiben erhalten.
+ Wenn Sie nicht im Menü, sondern im Satzeditor (also beim
+Ändern oder Einfügen) umschalten, werden Sie zunächst wieder aus
+dem Satzeditor rausgeworfen. Sie können dann in der Koppeldatei
+den gewünschten Satz aufsuchen (oder neu eintragen). Beim Zurück­
+schalten werden Sie gefragt, ob Sie die Koppelfelder übernehmen
+wollen oder nicht. Danach kehren Sie automatisch wieder in den
+Satzeditor zurück, wobei jetzt die Koppelfelder gegebenenfalls aus­
+gefüllt oder überschrieben sind.
+ Durch erneutes Umschalten können Sie den Vorgang auch für
+weitere Koppeldateien wiederholen.
+ Die Position, die Sie beim Umschalten in der Koppeldatei einge­
+nommen haben, wird bis zum nächsten Umschalten gespeichert. Sie
+kommen dann zunächst wieder auf den gleichen Satz. So können Sie
+die gleichen Koppelfelder wie beim letzten Mal übernehmen, indem
+Sie einfach zweimal ESC 'K' tippen.
+
+#on("b")#Beispiel#off("b")# Der typische Vorgang beim Entleihen würde dann
+wie folgt
+aussehen. Zunächst öffnen Sie die Entleihdatei mit Änderungser­
+laubnis; dann koppeln Sie die Mitgliederdatei und die Bestandsdatei
+dazu.
+ Für eine neue Ausleihe rufen Sie zunächst die Funktion 'Ein­
+fügen' auf. Dann tippen Sie ESC 'K' und schalten auf die Mitglie­
+derdatei um. Dort suchen Sie das Mitglied und schalten wieder zu­
+rück. Existierte das Mitglied noch nicht, können Sie es gleich ein­
+tragen. Beim Zurückschalten übernehmen Sie den Namen des Mit­
+glieds.
+ Dann tragen Sie die Nummer des Buches ein (die müssen Sie nur
+dann suchen, wenn Sie nicht auf dem Buch steht). Das Entleihdatum
+erhalten Sie mit Hilfe der Tastenkombination ESC 'D' (wird im näch­
+sten Kapitel beschrieben).
+ Wollen Sie mehrere Ausleihen für ein Mitglied eintragen, so
+tippen Sie beim nächsten Einfügen einfach zweimal ESC 'K', ohne
+dazwischen eine Positionierung vorzunehmen.
+
+
+9.6 Mehrfachbenutzung
+
+EUDAS ermöglicht es mehreren Benutzern an einem Rechner, mit den
+gleichen Dateien zu arbeiten. Dies ist eigentlich nichts Besonderes,
+denn das EUMEL-System ist ja bereits von Haus aus dazu geeignet.
+Es müssen jedoch einige Schutzvorkehrungen getroffen werden,
+damit dadurch keine Probleme entstehen.
+ Als Grundvoraussetzung für die Mehrfachbenutzung müssen
+EUDAS-Dateien in einer unabhängigen #on("i")#Managertask#off("i")# gespeichert
+sein. Eine Managertask kann man sich durch das Kommando 'global
+manager' einrichten. In dieser Task sollte dann nicht mehr gearbei­
+tet werden.
+ Stattdessen kann sich der Benutzer Dateien aus dieser Mana­
+gertask kopieren und auch wieder dorthin zurückschreiben. Wie Sie
+dies im EUDAS-Menü bewerkstelligen können, wird im Kapitel 16
+beschrieben. Es sei nochmal betont, daß dies eine Methode ist, die
+Sie für beliebige Dateien verwenden können.
+ Im Kapitel 16 ist weiterhin auch beschrieben, wie Sie solche
+Dateien mit #on("i")#Passworten#off("i")# schützen können, so daß sie nicht jeder
+benutzen kann. Schauen Sie bei Bedarf dort nach.
+
+
+#free (7.7)#
+
+#center#Abb. 9-5 Mehrfachbenutzung
+
+
+#on("b")#Konflikte#off("b")# Wir wollen uns jedoch jetzt um ein Problem
+kümmern, das
+bei dieser Art von Mehrfachbenutzung auftritt. Nehmen wir an,
+unsere Bücherei habe zwei Plätze, an denen Entleihen durchgeführt
+werden können. Beide Plätze sollen mit der gleichen Entleihdatei
+arbeiten (wie Sie gleich noch sehen werden und aus anderen Grün­
+den würde man EUDAS für eine solche Bücherei nicht einsetzen -
+wir wollen hier nur das Prinzip illustrieren).
+ Der Ablauf wäre dann folgendermaßen. Jeder Platz kopiert sich
+für eine Entleihe die gemeinsame Datei aus der Managertask, öffnet
+sie, trägt die Entleihe ein und sichert die Datei wieder. Dann wird
+die Datei in die Managertask zurückgeschrieben, wo sie die alte
+Entleihdatei ersetzt.
+ Abgesehen von dem viel zu hohen manuellen Aufwand kann der
+Fall eintreten, daß beide gleichzeitig eine Entleihe bearbeiten.
+Nehmen wir an, beide benutzen die Entleihdatei mit dem symboli­
+schen Inhalt A. Auf Platz 1 kommt noch die Entleihe B, auf Platz 2
+die Entleihe C dazu. Platz 1 will anschließend den Inhalt AB zu­
+rückschreiben, Platz 2 den Inhalt AC.
+ Je nach der zeitlichen Reihenfolge wird nur eine der beiden
+Versionen übrigbleiben, da derjenige, der später zurücksichert, die
+vorherige Version überschreibt. Richtig sollte die endgültige Version
+ABC herauskommen. Unser Beispiel führt jedoch auf jeden Fall zu
+einer fehlerhaften Datei.
+ Grund dafür ist, daß beim Zurückschreiben der ganzen Datei ein
+Platz gesperrt werden muß, während der andere Platz eine Datei
+zum Ändern angefordert hat. Man könnte auch dazu übergehen, nur
+einzelne Sätze zu übertragen; diese Methode wird jedoch von EUDAS
+wegen des hohen Aufwandes nicht unterstützt (daher würde man
+EUDAS eben auch nicht für eine Mehrplatz-Bücherei nehmen).
+ In vielen Fällen reicht das Sperren ganzer Dateien jedoch aus,
+besonders, wenn nicht ganz so häufig an einzelnen Sätzen geändert
+wird. EUDAS bietet dafür neben der notwendigen Sperre auch noch
+eine automatische Versendung der Dateien an.
+
+#on("b")#Manager#off("b")# Es bietet sich an, dieses Kopieren der Dateien
+beim Öff­
+nen (auch Koppeln und Ketten) und Sichern automatisch durchzu­
+führen. Als Voraussetzung dafür müssen Sie EUDAS angeben, mit
+welcher Managertask Sie arbeiten wollen. Dazu dient die Funktion
+#free (0.2)#
+
+ M Manager
+
+#free (0.2)#
+im Menü 'Öffnen'. Sie werden dann nach dem Namen der Task ge­
+fragt. Geben Sie keinen Namen an, wird der Managermodus wieder
+ausgeschaltet. Welche Task als Manager eingestellt ist, sehen Sie in
+der untersten Bildschirmzeile.
+ In der Task, die Sie angeben, muß EUDAS insertiert sein (oder
+in einem Vater), da sonst die Sperre nicht funktioniert.
+ Wenn Sie nun einen solchen Manager angegeben haben, können
+Sie beim Öffnen Dateinamen aus dieser Task angeben. Auch bei ESC
+'z' werden Ihnen alle Namen aus dem Manager mit angeboten. Wenn
+Sie einen solchen Namen angeben, der nicht aus Ihrer eigenen Task
+stammt, wird die Datei vor dem Öffnen automatisch kopiert. Wenn
+Sie angegeben haben, daß Sie die Datei verändern wollen, wird in
+der Managertask eine entsprechende Sperre gesetzt.
+ Wenn Sie die Datei nach Änderungen dann sichern, wird die
+geänderte Kopie zurückgeschrieben. Die Sperre wird jedoch erst
+dann aufgehoben, wenn Sie die Arbeitskopien endgültig löschen.
+ Möchte nun ein anderer Benutzer diese Datei öffnen, während
+Sie sie ändern, kann er dies nur, wenn er sie nicht ändern will.
+Natürlich wird die Datei dann auch nicht wieder zurückgeschickt.
+Will er sie ändern, erhält er eine Fehlermeldung und kann den
+Versuch später wiederholen.
+
+#on("b")#Vorsichtsmaßregeln#off("b")# Bedenken Sie, daß der Schutz nur
+wirksam sein
+kann, wenn Sie diesen Vorgang nicht unter Umgehung der Menü­
+steuerung ausführen. Würden Sie sich zum Beispiel eine Datei vom
+Manager holen (s. Kapitel 16), ohne daß Sie ein Änderungsvorhaben
+anmelden können, können Sie diese Datei ja trotzdem ändern und
+wieder zurückschicken. In diesem Fall hat EUDAS keine Kontrolle
+mehr über die Datei.
+ Aus dem gleichen Grund sollten Sie sich die Managertask auch
+nicht an Ihren Bildschirm holen, denn auch dann könnten Sie ohne
+Kontrolle Änderungen durchführen (zudem kann der Manager wäh­
+rend dieser Zeit nicht auf andere Benutzer reagieren).
+ Nur wenn Sie eine neue Datei im Manager anlegen, müssen Sie
+dies von Hand tun. Dazu erstellen Sie die Datei ganz normal und
+schreiben Sie mit der in Kapitel 16 beschriebenen Funktion zum
+Manager. Sie sollten jedoch darauf achten, daß dort nicht schon
+eine Datei gleichen Namens liegt (EUDAS fragt ja dann, ob über­
+schrieben werden soll).
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.inhalt b/app/eudas/4.3/doc/eudas.hdb.inhalt
new file mode 100644
index 0000000..62134f8
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.inhalt
@@ -0,0 +1,133 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+Inhalt
+
+
+
+ Vorwort . . . . . . . . . . . . . . . . . . . i
+ Inhalt . . . . . . . . . . . . . . . . . . . . iii
+
+
+I. Die ersten Schritte
+
+#on("b")#1 Was kann EUDAS ?#off("b")#
+#free (0.2)#
+1.1 Textverarbeitung und Datenverwaltung . . . . . 3
+1.2 EUDAS als Karteikasten . . . . . . . . . . . . 5
+1.3 Drucken . . . . . . . . . . . . . . . . . . . 7
+1.4 Grenzen . . . . . . . . . . . . . . . . . . . 9
+
+#on("b")#2 Installation#off("b")#
+#free (0.2)#
+2.1 Lieferumfang . . . . . . . . . . . . . . . . . 11
+2.2 Single-User . . . . . . . . . . . . . . . . . 12
+2.3 Multi-User . . . . . . . . . . . . . . . . . . 13
+
+#on("b")#3 Ein Beispiel zum Ausprobieren#off("b")#
+#free (0.2)#
+3.1 Start . . . . . . . . . . . . . . . . . . . . 15
+3.2 Daten eintragen . . . . . . . . . . . . . . . 16
+3.3 Daten abfragen . . . . . . . . . . . . . . . . 21
+3.4 Drucken . . . . . . . . . . . . . . . . . . . 22
+3.5 Ergebnis . . . . . . . . . . . . . . . . . . . 24
+
+
+II. Einführung in die Benutzung
+
+#on("b")#4 Umgang mit Dateien und Menüs#off("b")#
+#free (0.2)#
+4.1 EUDAS-Dateien . . . . . . . . . . . . . . . . 27
+4.2 EUDAS-Menüs . . . . . . . . . . . . . . . . . 29
+4.3 Archivmenü . . . . . . . . . . . . . . . . . . 32
+4.4 Dateiverwaltung . . . . . . . . . . . . . . . 37
+4.5 Bedienungsregeln . . . . . . . . . . . . . . . 39
+
+#on("b")#5 Gespeicherte Daten abfragen#off("b")#
+#free (0.2)#
+5.1 Öffnen . . . . . . . . . . . . . . . . . . . . 43
+5.2 Bewegen . . . . . . . . . . . . . . . . . . . 45
+5.3 Suchen . . . . . . . . . . . . . . . . . . . . 46
+5.4 Suchbedingungen . . . . . . . . . . . . . . . 49
+
+#on("b")#6 Daten eingeben und ändern#off("b")#
+#free (0.2)#
+6.1 Neue Datei einrichten . . . . . . . . . . . . 51
+6.2 Sätze einfügen . . . . . . . . . . . . . . . . 52
+6.3 Daten ändern . . . . . . . . . . . . . . . . . 55
+6.4 Arbeitskopie sichern . . . . . . . . . . . . . 56
+
+#on("b")#7 Ausdrucken der Daten#off("b")#
+#free (0.2)#
+7.1 Druckmuster . . . . . . . . . . . . . . . . . 61
+7.2 Aufruf . . . . . . . . . . . . . . . . . . . . 64
+7.3 Abschnitte . . . . . . . . . . . . . . . . . . 67
+7.4 Feldmuster . . . . . . . . . . . . . . . . . . 69
+
+#on("b")#8 Was war und was noch kommt#off("b")#
+#free (0.2)#
+8.1 Rückblick . . . . . . . . . . . . . . . . . . 75
+8.2 Ausblick . . . . . . . . . . . . . . . . . . . 76
+
+
+III. Weitere Möglichkeiten
+
+#on("b")#9 Das virtuelle Dateikonzept#off("b")#
+#free (0.2)#
+9.1 Konzept . . . . . . . . . . . . . . . . . . . 83
+9.2 Ketten . . . . . . . . . . . . . . . . . . . . 84
+9.3 Koppeln . . . . . . . . . . . . . . . . . . . 85
+9.4 Auswirkungen des Koppelns . . . . . . . . . . 89
+9.5 Umschalten auf Koppeldatei . . . . . . . . . . 92
+9.6 Mehrfachbenutzung . . . . . . . . . . . . . . 93
+
+#on("b")#10 Datenabfrage am Bildschirm#off("b")#
+#free (0.2)#
+10.1 Feldauswahl . . . . . . . . . . . . . . . . . 97
+10.2 Satzeditor . . . . . . . . . . . . . . . . . . 98
+10.3 Suchmuster . . . . . . . . . . . . . . . . . . 99
+10.4 Markieren . . . . . . . . . . . . . . . . . . 104
+10.5 Übersicht . . . . . . . . . . . . . . . . . . 105
+
+#on("b")#11 Funktionen zur Bearbeitung#off("b")#
+#free (0.2)#
+11.1 Sortieren . . . . . . . . . . . . . . . . . . 109
+11.2 Kopieren . . . . . . . . . . . . . . . . . . . 112
+11.3 Tragen . . . . . . . . . . . . . . . . . . . . 118
+11.4 Automatische Änderungen . . . . . . . . . . . 121
+
+#on("b")#12 Weitere Möglichkeiten zum Drucken#off("b")#
+#free (0.2)#
+12.1 Anschluß an die Textverarbeitung . . . . . . . 123
+12.2 Spaltendruck . . . . . . . . . . . . . . . . . 126
+12.3 Modi . . . . . . . . . . . . . . . . . . . . . 128
+
+#on("b")#13 Programmierung von Druckmustern#off("b")#
+#free (0.2)#
+13.1 Abkürzungen . . . . . . . . . . . . . . . . . 133
+13.2 Bedingte Musterteile . . . . . . . . . . . . . 141
+13.3 Übersetzung . . . . . . . . . . . . . . . . . 142
+13.4 Gruppen . . . . . . . . . . . . . . . . . . . 144
+
+#on("b")#14 Ausdrücke in ELAN#off("b")#
+#free (0.2)#
+14.1 Was sind Ausdrücke ? . . . . . . . . . . . . . 151
+14.2 Datentypen . . . . . . . . . . . . . . . . . . 152
+14.3 TEXT-Funktionen . . . . . . . . . . . . . . . 156
+14.4 Rechenfunktionen . . . . . . . . . . . . . . . 160
+14.5 Abfragen . . . . . . . . . . . . . . . . . . . 161
+
+#on("b")#15 Anweisungen in ELAN#off("b")#
+#free (0.2)#
+15.1 Variablen und Zuweisungen . . . . . . . . . . 165
+15.2 Weitere Konstruktionen . . . . . . . . . . . . 168
+
+#on("b")#16 Dateiverwaltung mit EUDAS#off("b")#
+#free (0.2)#
+16.1 Dateien im System . . . . . . . . . . . . . . 171
+16.2 Dateien auf dem Archiv . . . . . . . . . . . . 174
+
+
+IV. Anhang
+
+ Register . . . . . . . . . . . . . . . . . . . 181
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.macros b/app/eudas/4.3/doc/eudas.hdb.macros
new file mode 100644
index 0000000..d06e6d1
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.macros
@@ -0,0 +1,80 @@
+#*format#
+#limit (13.5)##start (3.5,2.5)##pagelength (21.0)##block#
+#:firsthead (false)#
+#linefeed (1.07)#
+#*macro end#
+#*text#
+#type ("prop10")#
+#linefeed (1.07)#
+#*macro end#
+#*beispiel#
+#type ("12")#
+#linefeed (0.97)#
+#*macro end#
+#*bildschirm#
+#type ("17")#
+#linefeed(0.83)#
+#*macro end#
+#*proc#
+#type ("12")#
+#*macro end#
+#*endproc#
+#free (0.1)#
+#type ("prop10")#
+#linefeed (1.0)#
+#*macro end#
+#*abschnitt ($1,$2,$3)#
+#headodd#
+#on("b")#$1#right#$3 %#off("b")#
+#free (1.0)#
+#end#
+#on("b")##ib(9)#$1#ie(9,"   $3")# $2#off("b")#
+#*macro end#
+#*char($1)#
+$1
+#*macro end#
+#*kapitel ($1,$2,$3,$4)#
+#free (1.3)#
+#"nlq"#
+#type("roman.24")#
+#on("b")##center#$1#off("b")#
+#free (0.2)#
+#type ("roman.18")#
+#on("b")##center#$2 #off("b")#
+#on("b")##center# $3#off("b")#
+#on("b")##center#$4#off("b")#
+#type ("prop10")#
+#free (0.6)#
+#headeven#
+#on("b")#% $2 $3 $4#off("b")#
+#free (1.0)#
+#end#
+#headodd#
+#right##on("b")#%#off("b")#
+#free (1.0)#
+#end#
+#*macro end#
+#*f2#
+#free (0.2)#
+#*macro end#
+#*a ($1)#
+#on("b")#$1.#off("b")# 
+#*macro end#
+#*bsp ($1)#
+#type("12")#$1#type("prop")#
+#*macro end#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.titel b/app/eudas/4.3/doc/eudas.hdb.titel
new file mode 100644
index 0000000..b8cc805
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.titel
@@ -0,0 +1,99 @@
+#limit (14.0)#
+____________________________________________________________________________
+
+
+#on("b")##on ("u")#
+#center#Betriebssystem E U M E L
+#off ("u")#
+
+
+#center#E U D A S
+
+
+
+
+#off("b")#
+#center#Lizenzfreie Software der
+#on ("b")#
+
+#center#Gesellschaft für Mathematik und Datenverarbeitung mbH,
+#center#5205 Sankt Augustin
+
+
+#off("b")#
+#center#Die Nutzung der Software ist nur im Schul- und Hochschulbereich für
+#center#nichtkommerzielle Zwecke gestattet.
+
+#center#Gewährleistung und Haftung werden ausgeschlossen
+
+
+____________________________________________________________________________
+#page#
+
+#free (6.0)#
+#on("b")#EUDAS#off("b")#
+#free (1.0)#
+#on("b")#Anwender-#off("b")#
+#on("b")#Datenverwaltungssystem#off("b")#
+#free (2.0)#
+#on ("b")#VERSION 4#off("b")#
+#free(1.0)#
+#on("u")#                                                    #off("u")#
+#free (0.5)#
+#on("b")#BENUTZERHANDBUCH#off("b")#
+#block#
+#page#
+#free (12.0)#
+Ausgabe Juli 1987
+
+Dieses Handbuch und das zugehörige Programm sind urheberrechtlich
+geschützt. Die dadurch begründeten Rechte, insbesondere der Ver­
+vielfältigung in irgendeiner Form, bleiben dem Autor vorbehalten.
+
+Es kann keine Garantie dafür übernommen werden, daß das Pro­
+gramm für eine bestimmte Anwendung geeignet ist. Die Verantwor­
+tung dafür liegt beim Kunden.
+
+Das Handbuch wurde mit größter Sorgfalt erstellt. Für die Korrekt­
+heit und Vollständigkeit der Angaben wird aber keine Gewähr über­
+nommen. Das Handbuch kann jederzeit ohne Ankündigung geändert
+werden.
+
+(c) Copyright 1987 Thomas Berlage
+ Software-Systeme
+ Im alten Keller 3
+#free (0.1)#
+ D-5205 Sankt Augustin 1
+#page#
+#free (7.0)#
+#center##on("b")#I.#off("b")#
+#free (1.0)#
+#center##on("b")#DIE#off("b")#
+#center##on("b")#ERSTEN#off ("b")#
+#center##on("b")#SCHRITTE#off("b")#
+#page#
+#free (7.0)#
+#center##on("b")#II.#off("b")#
+#free (1.0)#
+#center##on("b")#EINFÜHRUNG#off("b")#
+#center##on("b")#IN DIE#off ("b")#
+#center##on("b")#BENUTZUNG#off("b")#
+#page#
+#free (7.0)#
+#center##on("b")#III.#off("b")#
+#free (1.0)#
+#center##on("b")#WEITERE#off("b")#
+#center##on("b")#MÖGLICHKEITEN#off("b")#
+#page#
+#free (7.0)#
+#center##on("b")#IV.#off("b")#
+#free (1.0)#
+#center##on("b")#ANHANG#off("b")#
+
+
+
+
+
+
+
+
diff --git a/app/eudas/4.3/doc/eudas.hdb.vorwort b/app/eudas/4.3/doc/eudas.hdb.vorwort
new file mode 100644
index 0000000..6f7f17c
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.hdb.vorwort
@@ -0,0 +1,89 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+____________________________________________________________________________
+
+
+#on("b")##on ("u")#
+#center#Betriebssystem E U M E L
+#off ("u")#
+
+
+#center#EUDAS
+
+
+
+
+#off("b")#
+#center#Lizenzfreie Software der
+#on ("b")#
+
+#center#Gesellschaft für Mathematik und Datenverarbeitung mbH,
+#center#5205 Sankt Augustin
+
+
+#off("b")#
+#center#Die Nutzung der Software ist nur im Schul- und Hochschulbereich für
+#center#nichtkommerzielle Zwecke gestattet.
+
+#center#Gewährleistung und Haftung werden ausgeschlossen
+
+
+____________________________________________________________________________
+#page#
+Vorwort
+
+
+
+Lieber EUDAS-Benutzer !
+
+Dieses Handbuch soll Sie bei Ihrer Arbeit mit EUDAS begleiten. Ob­
+wohl EUDAS nicht schwierig zu bedienen ist, gibt es doch eine Reihe
+von Dingen zu lernen, ehe Sie ein EUDAS-Spezialist geworden sind.
+ Um Ihnen diesen Weg möglichst einfach zu machen, ist die
+EUDAS-Dokumentation in zwei Handbücher aufgeteilt. Dies ist das
+#on("b")#Benutzerhandbuch#off("b")#, das Ihnen eine gut lesbare Einführung in alle
+Fähigkeiten von EUDAS bieten soll. Außerdem gibt es noch das
+#on("b")#Referenzhandbuch#off("b")#, das Ihnen zum Nachschlagen und als Hilfe beim
+Programmieren dienen soll.
+
+ Bis Sie EUDAS gut beherrschen, sollten Sie sich also mit dem
+Benutzerhandbuch beschäftigen. Das Benutzerhandbuch ist nochmal
+in drei Teile aufgeteilt, um Ihnen das Lernen zu erleichtern. In
+jedem Teil werden die vorher behandelten Dinge zyklisch wieder
+aufgenommen und auf höherem Niveau erweitert.
+ Der allererste Teil des Handbuchs umfaßt nur drei Kapitel und
+soll Ihnen über den ersten Tag mit EUDAS hinweghelfen. Dort finden
+Sie eine Übersicht, was Sie mit EUDAS anfangen können, wie Sie das
+Programm auf Ihrem Rechner installieren und ein kurzes Beispiel
+zum Ausprobieren.
+ Im zweiten Teil lernen Sie dann die Grundkonzepte von EUDAS
+anhand von zahlreichen Beispielen kennen. Sie sollten die Beispiele
+am Rechner ausprobieren und ihre Bedeutung verstehen. Nach dem
+Durcharbeiten dieses Teils (was höchstens wenige Tage in Anspruch
+nimmt) sind Sie dann in der Lage, EUDAS für eigene Zwecke anzu­
+wenden.
+ Wenn Ihre Ansprüche dann wachsen, sollten Sie sich mit dem
+dritten Teil befassen. Hier erhalten Sie Einblick in weitergehende
+Möglichkeiten von EUDAS. Die einzelnen Kapitel sind relativ unab­
+hängig voneinander, so daß Sie nur die für Sie interessanten
+genauer durchlesen müssen.
+ In Kapitel 8 finden Sie als Orientierung nicht nur eine Wieder­
+holung dessen, was Sie im zweiten Teil gelernt haben sollten, son­
+dern auch eine Übersicht, welche weiteren Möglichkeiten im dritten
+Teil noch beschrieben werden.
+
+ Im Referenzhandbuch finden Sie später, wenn Sie einige Erfah­
+rung gesammelt haben, eine genaue Beschreibung der Wirkungsweise
+aller Funktionen. Um diese zu verstehen, sollten Sie jedoch bereits
+eine grobe Ahnung der Wirkungsweise haben.
+ Als zweites finden Sie im Referenzhandbuch Informationen für
+Programmierer, die EUDAS-Funktionen in eigenen Programmen ver­
+wenden wollen. Dies sollte jedoch in den meisten Fällen nicht not­
+wendig sein, so daß dieser Teil für Spezialisten reserviert bleibt.
+
+ Trotz größter Bemühungen kann das Handbuch natürlich nicht
+frei von Unklarheiten und Fehlern sein. Anregungen und Kritik sind
+daher dringend erwünscht, um diese Dokumentation zu verbessern.
+
+Und nun viel Spaß bei Ihrer Arbeit mit EUDAS !
+
diff --git a/app/eudas/4.3/doc/eudas.ref.1 b/app/eudas/4.3/doc/eudas.ref.1
new file mode 100644
index 0000000..7c66368
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.1
@@ -0,0 +1,326 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (3)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+Zustände und Bedienung
+
+
+
+1.1 Zustände
+
+EUDAS befindet sich zu jeder Zeit in einem von 11 verschiedenen
+Zuständen. Für jeden Zustand ist festgelegt, welche Eingabetasten
+benutzt werden können und welche Wirkung sie haben. Bestimmte
+Tastenfunktionen führen in einen anderen Zustand. Obwohl für
+jeden Zustand andere Tastenkombinationen gültig sind, wird für die
+gleiche Funktion in jedem Zustand auch die gleiche Taste oder
+Tastenkombination verwendet.
+ Die wichtigsten Tastenfunktionen eines Zustandes werden in
+der #on("i")#Statuszeile#off("i")# am oberen Bildschirmrand angezeigt.
+ Im folgenden sind alle möglichen Zustände als Übersicht be­
+schrieben. Eine Übersicht der Zustandsübergänge enthält Abb. 1-1.
+ Zu jedem Zustand wird die entsprechende Statuszeile darge­
+stellt sowie alle möglichen Tastenfunktionen und ihre Bedeutung.
+
+EUDAS: Öffnen Einzelsatz Gesamtdatei Drucken Dateien Archiv
+
+_____________________________________________________
+
+OBEN Anwahl der nächsthöheren Funktion
+UNTEN Anwahl der nächsttieferen Funktion
+RECHTS Anwahl des nächsten Menüs zur Rechten
+LINKS Anwahl des nächsten Menüs zur Linken
+HOP OBEN Anwahl der ersten Funktion
+HOP UNTEN Anwahl der letzten Funktion
+'1' .. '6' Anwahl des entsprechenden Menüs
+LEER Ausführen der gewählten Funktion
+'Buchstabe' Ausführen der Funktion mit 'Buchstabe' davor
+ESC '?' Hilfestellung zur gewählten Funktion
+ESC ESC Eingabe von ELAN-Kommandos
+
+
+HILFE: Beenden: ESC q Seite weiter: ESC w Seite zurueck: ESC z
+
+_____________________________________________________
+
+ESC 'w' Blättern zur nächsten Seite
+ESC 'z' Blättern zur vorigen Seite
+ESC 'q' Verlassen (Rückkehr in alten Zustand)
+
+
+AUSWAHL: Ankreuzen: 'x' Durchstreichen: 'o' Beenden: ESC q Hilfe: ESC ?
+
+_____________________________________________________
+
+'x' Auswahl ankreuzen
+'o' Ankreuzen rückgängig machen
+LEER Ankreuzen und Auswahl sofort verlassen
+OBEN Zur nächsten Auswahl nach oben
+UNTEN Zur nächsten Auswahl nach unten
+HOP OBEN Zur obersten Auswahl bzw. eine Seite zurück
+HOP UNTEN Zur untersten Auswahl bzw. eine Seite weiter
+HOP RETURN Aktuelle Auswahl wird erste auf der Seite
+ESC '1' zur ersten Auswahl
+ESC '9' zur letzten Auswahl
+ESC 'q' Auswahl verlassen und weitermachen
+ESC '?' Hilfe zur Auswahl
+HOP 'x' alle freien Wahlen ankreuzen
+HOP 'o' alle Kreuze entfernen
+ESC 'h' Auswahl und Funktion abbrechen
+
+
+EINGABE: Bestätigen: RETURN Zeigen: ESC z Abbrechen: ESC h Hilfe: ESC ?
+
+_____________________________________________________
+
+RECHTS zum nächsten Zeichen
+LINKS zum vorigen Zeichen
+HOP RECHTS zum letzten Zeichen
+HOP LINKS zum ersten Zeichen
+RUBOUT Zeichen löschen
+RUBIN Einfügemodus umschalten
+HOP RUBOUT Rest der Zeile löschen
+'Zeichen' Zeichen überschreiben oder einfügen
+RETURN Eingabe abschließen und weitermachen
+ESC '?' Hilfe zur Eingabe
+ESC 'h' Eingabe und Funktion abbrechen
+ESC 'z' Auswahl zeigen (falls in Statuszeile aufgeführt)
+
+
+FRAGE: Bejahen: j,J Verneinen: n,N Abbrechen: ESC h Hilfe: ESC ?
+
+_____________________________________________________
+
+'j', 'J' Frage bejahen
+'n', 'N' Frage verneinen
+ESC '?' Hilfe zur Frage
+ESC 'h' Frage und Funktion abbrechen
+
+
+!!! FEHLER !!! Quittieren: ESC q Hilfe zur Meldung: ESC ?
+
+_____________________________________________________
+
+ESC '?' Hilfe zum Fehler
+ESC 'Taste' Fehler quittieren
+'Taste' Fehler quittieren
+
+
+SATZ ÄNDERN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?
+SATZ EINFÜGEN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?
+SUCHMUSTER EINGEBEN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?
+
+_____________________________________________________
+
+ESC OBEN eine Seite zurück blättern
+ESC UNTEN eine Seite vor blättern
+ESC '?' Hilfe zum Satzeditor
+ESC 'p' ganzen Satz merken (nicht bei Suchmuster)
+ESC 'g' Satz durch gemerkten ersetzen (nicht bei Such­
+ muster)
+ESC 'h' Abbruch der Funktion
+ESC 'D' Tagesdatum schreiben
+ESC 'F' Prüffehler nach Tragen editieren
+ESC 'w' Verlassen und mit nächstem Satz erneut aufrufen
+ (nicht im Suchmuster)
+ESC 'z' Verlassen und mit vorigem Satz erneut aufrufen
+ (nicht im Suchmuster)
+ESC RUBIN Rest der Zeile in neue Zeile umbrechen
+ESC RUBOUT Rest der Zeile löschen
+HOP RUBIN nicht verwenden!
+HOP RUBOUT nicht verwenden!
+
+Weitere Tasten siehe EUMEL-Benutzerhandbuch (Editor).
+
+
+Bitte warten..
+
+_____________________________________________________
+
+keine Tasten erlaubt (außer SV)
+
+
+ZEIGEN: Blättern: HOP OBEN, HOP UNTEN Ende: ESC q Hilfe: ESC ?
+
+_____________________________________________________
+
+HOP OBEN auf erste Zeile bzw. eine Seite zurück
+HOP UNTEN auf letzte Zeile bzw. eine Seite vor
+ESC '?' Hilfe zur Übersicht
+ESC 'h' Abbruch der Funktion
+ESC 'q' Verlassen
+
+
+EDITIEREN: Abbruch: ESC h Verlassen: ESC q Hilfe: ESC ?
+
+_____________________________________________________
+
+ESC 'F' Feldnamen anzeigen und auswählen
+ESC 'h' Abbruch der Funktion
+
+Weitere Tasten siehe EUMEL-Benutzerhandbuch (Editor).
+
+
+Gib Kommando:
+
+_____________________________________________________
+
+Tasten siehe EINGABE.
+
+
+#free (18.5)#
+
+#center#Abb. 1-1 Zustandsübergänge
+
+
+
+
+1.2 Menüs
+
+Menüs dienen zur Auswahl von Funktionen. Sie werden am linken
+Rand des Bildschirms angezeigt. Welches Menü aktiv ist, wird durch
+Markierung des Menünamens in der obersten Bildschirmzeile unter
+allen zur Verfügung stehenden Menüs angezeigt. In jedem Menü ist
+die zuletzt ausgeführte Funktion ebenfalls markiert.
+
+#on("b")#Ausführen von Funktionen#off("b")# Zum Ausführen einer bestimmten
+Funk­
+tion wird mit Hilfe der Cursortasten ein bestimmtes Menü und die
+gewünschte Funktion angewählt. Die Funktion wird dann durch
+Drücken der Leertaste ausgeführt. Alternativ kann auch der vor der
+Funktion stehende Buchstabe gedrückt werden.
+ Die einzelnen Menüs können auch durch Nummern (1 bis 6)
+angewählt werden (absolute Positionierung).
+ Soll eine andere Taste als die Leertaste zum Ausführen ver­
+wendet werden, so kann dies durch die Prozedur 'ausfuehrtaste'
+angegeben werden (s. Abschnitt 10.3).
+ Funktionen, deren Ausführung augenblicklich nicht möglich
+oder nicht sinnvoll ist, werden durch ein vorangestelltes Minuszei­
+chen gekennzeichnet. Sie können zwar angewählt, nicht aber ausge­
+führt werden.
+ Durch ESC '?' wird ein erläuternder Hilfstext zur gerade ange­
+wählten Funktion angezeigt. Näheres dazu s. Abschnitt 1.4.
+ Durch ESC ESC kann ein beliebiges ELAN-Kommando eingegeben
+und ausgeführt werden. Die Eingabe des Kommandos erfolgt in der
+Statuszeile.
+
+
+1.3 Auswahl
+
+Die Auswahlfunktion dient dazu, aus vorhandenen Datei- oder
+Feldnamen in bestimmter Reihenfolge auszuwählen. Die einzelnen
+Namen werden untereinander aufgelistet.
+ Vor jedem Namen ist ein 'o' zum Ankreuzen angegeben. Mit den
+Cursortasten kann der Cursor vor einen bestimmten Namen positio­
+niert werden. Mit 'x' kann dieser Name dann angekreuzt werden. Das
+Ankreuzen kann durch 'o' wieder rückgängig gemacht werden.
+ Die Reihenfolge des Ankreuzens wird durch vorangestellte
+Nummern gekennzeichnet. Die Namen werden von der entsprechenden
+Funktion später in genau dieser Reihenfolge verwendet.
+ Wenn nicht alle Namen auf den Bildschirm passen, kann die
+Darstellung gerollt werden. Ein Teil der Überschrift bleibt dabei
+stehen; am Anfang und am Ende wird jeweils eine Abschlußzeile zur
+Kennzeichnung mitgerollt.
+ Mit ESC '?' kann eine Hilfestellung abgerufen werden. Mit ESC
+'q' wird die Auswahl beendet. Mit ESC 'h' können die Auswahl und
+die in Ausführung befindliche Operation abgebrochen werden.
+
+
+1.4 Hilfe und Dialog
+
+In den meisten Situationen kann durch ESC '?' eine spezifische
+Hilfestellung abgerufen werden. Die Anzeige der Hilfsinformation
+geschieht im rechten Bildschirmteil.
+ Die Texte sind seitenweise aufgebaut. Es wird immer eine Seite
+angezeigt. Mit ESC 'w' bzw. ESC 'z' kann auf die nächste bzw, vorige
+Seite umgeblättert werden. Mit ESC 'q' wird die Hilfestellung wieder
+verlassen und die Situation wiederhergestellt, in der die Hilfe auf­
+gerufen wurde.
+
+#on("b")#Fragen#off("b")# Die meisten Funktionen wickeln zur Eingabe von
+zusätz­
+lichen Parametern oder zum Stellen von Fragen einen Dialog in der
+unteren Schirmhälfte ab. Es gibt zwei Möglichkeiten des Dialogs:
+eine Frage oder die Eingabe eines Textes.
+ Bei einer Frage kann man mit 'j' oder 'n' antworten. Sowohl
+große als auch kleine Buchstaben werden akzeptiert. Mit ESC '?'
+kann eine Hilfsinformation zu der Frage abgerufen werden. ESC 'h'
+bricht die fragende Funktion ab.
+
+#on("b")#Eingabe#off("b")# Bei der Eingabe eines Textes können die üblichen
+Opera­
+tionen zum Editieren in einer Zeile verwendet werden. Die Eingabe
+wird durch RETURN beendet. Auch hier kann durch ESC '?' eine
+Hilfsinformation abgerufen werden. ESC 'h' bricht ebenfalls die fra­
+gende Funktion ab. In einigen Fällen (ersichtlich aus der Statuszei­
+le) kann durch ESC 'z' eine Auswahl der verfügbaren Namen abgeru­
+fen werden.
+
+
+1.5 Editor
+
+Der EUMEL-Editor wird in EUDAS auf zweierlei Weise aufgerufen.
+Zum einen dient er im Satzformular zum Eingeben von Daten und
+Suchmustern. Dort wird er als #on("i")#Satzeditor#off("i")# bezeichnet. Da hier die
+Feldnamen mit berücksichtigt werden müssen, gibt es einige Unter­
+schiede zum normalen Editor.
+ An anderen Stellen wird der Editor ohne Änderungen eingesetzt
+zum Eingeben von Feldnamen oder Mustern. In diesem Fall finden
+Sie die Bedienungshinweise im EUMEL-Benutzerhandbuch.
+
+#on("b")#Satzeditor#off("b")# Beim Ändern, Einfügen und Eingeben des
+Suchmusters
+wird im EUDAS-Formular der Editor aufgerufen. Das Editorfenster
+beschränkt sich auf den rechten Teil des Formulars, der einen Teil
+der Überschrift und die Feldinhalte umfaßt. Im Satzeditor können
+dann die entsprechenden Inhalte eingegeben bzw. verändert werden.
+ Rollen unter Beibehaltung der Korrespondenz ist durch ESC
+OBEN und ESC UNTEN möglich. Diese Funktionen wirken wie bei der
+Anzeige - das Editorfenster wird ebenfalls entsprechend mitgerollt.
+Mit ESC '1' kann wie üblich auf die erste, mit ESC '9' auf die letzte
+Zeile gesprungen werden. Auch diese Funktionen passen die Feld­
+namen entsprechend an.
+ Falls die für ein Feld vorgesehenen Zeilen nicht für den Inhalt
+ausreichen, kann durch ESC RUBIN eine weitere Zeile für dieses Feld
+bereitgestellt werden. ESC RUBIN wirkt wie zweimal HOP RUBIN, die
+Korrespondenz mit den Feldnamen bleibt jedoch gewahrt.
+ Zum Löschen steht ESC RUBOUT zur Verfügung. Es löscht eine
+ganze Zeile, aber nur, wenn für dieses Feld noch andere Zeilen zur
+Verfügung stehen, wird die Zeile tatsächlich vom Bildschirm ent­
+fernt. Im Normalfall bleibt sonst eine Leerzeile für dieses Feld ste­
+hen.
+ Ist die Information für ein Feld auf mehrere Zeilen verteilt, so
+werden diese Zeilen zur Verarbeitung aneinandergehängt. Gegebe­
+nenfalls wird zwischen zwei Zeilen noch ein Leerzeichen eingefügt.
+ Der Editor kann wie üblich mit ESC 'q' verlassen werden. ESC
+'h' bricht die Funktion ab, ohne die erfolgten Änderungen und Ein­
+gaben zu berücksichtigen. Mit ESC 'w' und ESC 'z' kann das Bearbei­
+ten von mehreren Sätzen beschleunigt werden. Durch diese Tasten­
+kombinationen wird der Editor verlassen und die gleiche Operation
+(Ändern/Einfügen) beim nächsten bzw. vorigen Satz wiederholt.
+
+#on("b")#Hinweis#off("b")# Aus technischen Gründen kann das Editorfenster
+gegen­
+über den Feldnamen verschoben werden (durch Rollen mit HOP
+UNTEN zum Beispiel). Dabei geht die sichtbare Korrespondenz zwi­
+schen Feldnamen und Feldinhalten verloren. Ein solcher Fall wird
+durch einen markierten Balken mit entsprechender Meldung ange­
+zeigt. Durch ESC '1' wird das Fenster aber wieder zurechtgerückt.
+ Aus diesem Grund sollte im Satzeditor auf HOP OBEN und HOP
+UNTEN sowie auf RETURN am Ende des Fensters verzichtet werden.
+Auch HOP RUBIN und HOP RUBOUT sollten nicht verwendet werden,
+weil auf diese Weise die Anzahl der Zeilen verändert wird. Eine
+solche Störung kann nicht durch ESC '1' beseitigt werden. Von Hand
+müssen die entsprechenden Zeilen wieder gelöscht oder eingefügt
+werden.
+
+
diff --git a/app/eudas/4.3/doc/eudas.ref.10 b/app/eudas/4.3/doc/eudas.ref.10
new file mode 100644
index 0000000..fbfcf7e
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.10
@@ -0,0 +1,406 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (97)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+10 Programmierung der Menüs
+
+
+
+10.1 Menüformat
+
+EUDAS verwendet drei verschiedene Strukturen zur Benutzerunter­
+stützung: Menü, Auswahl und Hilfestellung. Ein Menü dient zur
+Auswahl von Funktionen, eine Auswahl bietet Feld- oder Datei­
+namen an und eine Hilfestellung zeigt einen Informationstext.
+ Alle diese Strukturen werden aus einer Initialisierungsdatei
+eingelesen. Die Initialisierungsdatei ist eine normale Textdatei. Ihr
+Format soll in diesem Abschnitt beschrieben werden.
+ Die Strukturen können in beliebiger Reihenfolge in der Initiali­
+sierungsdatei stehen. Jede Struktur wird durch eine spezielle
+Anweisung eingeleitet. Anweisungen beginnen ähnlich wie im
+Druckmuster mit einem Prozentzeichen. Dementsprechend gibt es die
+drei Anweisungen
+
+
+ % MENUE "Name"
+ % AUSWAHL "Name"
+ % HILFE "Gebiet/Name"
+
+
+die jeweils eine Struktur einleiten. Beendet wird eine Definition
+immer mit
+
+
+ % ENDE
+
+
+#on("b")#Menü#off("b")# Für ein Menü wird noch der Text angegeben, der auf
+dem
+Bildschirm erscheinen soll. Er wird durch die Anweisung
+
+
+ % BILD
+
+
+eingeleitet. Danach folgen Zeilen mit dem Bildschirminhalt in der
+gewünschten Größe (die tatsächliche Anzeigegröße wird erst beim
+Aufruf angegeben). Dabei werden die Auswahlpositionen, auf denen
+der Cursor sich bewegen kann, durch ein geschütztes Leerzeichen in
+Spalte 2 festgelegt.
+ Nach der Angabe des Bildes muß für jede mögliche Auswahl­
+position noch eine weitere Angabe gemacht werden. Die Auswahl­
+positionen (oder Felder) werden dabei von oben nach unten durch­
+gezählt. Begonnen wird mit der Nummer 1.
+ Eine Felddefinition hat das Format
+
+
+ % FELD nr "Hilfstext" "Tasten"
+
+
+Die Nummer identifiziert das Feld. Der Hilfstext gibt den Namen der
+Hilfestellung an, die gezeigt werden soll, wenn auf diesem Feld ESC
+'?' gedrückt wird. Die Tasten sind alle Zeichen, die gedrückt werden
+können, um dieses Feld direkt auszuführen.
+ Anschließend an die Felddefinition kann in weiteren Zeilen
+noch ein ELAN-Programm folgen, das bei Auswahl des Feldes aus­
+geführt wird.
+
+#on("b")#Auswahl#off("b")# Für eine Auswahl muß zuerst ein Vorspann angegeben
+werden, der immer in den ersten Bildschirmzeilen der Auswahl an­
+gezeigt wird. Dieser wird durch
+
+
+ % VORSPANN
+
+
+eingeleitet. Danach folgt das Bild. Das Bild setzt sich aus drei Tei­
+len zusammen. Die erste Zeile, in der ein geschütztes Leerzeichen
+vorkommt, bildet den Wiederholungsteil. Diese Zeile wird nachher so
+oft wie nötig mit entsprechenden Inhalten wiederholt, wobei das
+geschützte Leerzeichen als Bindestrich dargestellt wird, auf dem
+sich der Cursor bewegen kann. Die Teile davor und danach werden
+jeweils bei Bedarf mitgerollt.
+ Die Wiederholungszeile darf mehrere geschützte Leerzeichen
+enthalten. Die Inhalte werden dann in mehreren Spalten angezeigt.
+Zu beachten ist, daß vor einem Trennstrich noch mindestens fünf
+Zeichen Platz für eine laufende Nummer bleiben müssen.
+
+#on("b")#Hilfe#off("b")# Der Name einer Hilfestellung setzt sich aus zwei
+Teilen
+zusammen, die durch einen Schrägstrich getrennt werden. Der erste
+Name gibt die Kategorie der Hilfestellung an, der zweite Name den
+Einzeltext. Dies dient dazu, die relativ große Zahl der Hilfstexte
+überschaubar zu machen. Als Beispiel
+
+
+ % HILFE "JA/Allgemein"
+
+
+Eine Hilfestellung besteht einfach aus mehreren Seiten Text. Jede
+Seite wird durch die AnweisungQ
+
+
+Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q
+
+
+Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈
+Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈
+Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈
+Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈
+Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q
+
+
+Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q
+
+
+Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q
+Q̈Q̈Q̈Q̈Q̈Q̈Q̈estellung, wobei die Seiten einfach von 1 an durch­
+gezählt werden. Anschließend darf für diese Seite natürlich kein
+Text folgen.
+
+
+10.2 Verwaltung der Menüs
+
+Alle Menüdaten werden intern in Datenräumen gehalten. Dabei sind
+die einzelnen Strukturen getrennt. Mit 'menuedaten einlesen' kön­
+nen Menüdaten aus einer Struktur gelesen und abgespeichert wer­
+den. Existierende Strukturen werden dabei überschrieben, neue
+hinzugefügt.
+ Mit 'menuenamen' können die vorhandenen Strukturen abgefragt
+werden. Mit 'menue loeschen' werden einzelne Strukturen oder alle
+Menüdaten gelöscht. Damit die Datenräume mit den Menüdaten auch
+an Söhne übergeben werden, ist der 'global manager' entsprechend
+geändert. Dies wird im einzelnen durch 'menue manager' bewirkt.
+Der neue Global Manager akzeptiert auch Anfragen von Tasks, die
+nicht Söhne oder Enkel sind.
+
+
+PROC menuedaten einlesen (TEXT CONST dateiname)
+
+ Die in der Datei enthaltenen Strukturen werden eingelesen und
+ abgespeichert. Treten bei diesem Prozeß Fehler auf, so wird
+ eine entsprechende Meldung ins EUMEL-Notizbuch geschrieben
+ und nachher im Paralleleditor angezeigt.
+
+
+THESAURUS PROC menuenamen (INT CONST index)
+
+ Liefert die Namen der Strukturen. Der Index hat folgende Be­
+ deutung:
+ 1: Hilfskategorien
+ 2: Menüs
+ 3: Auswahlen
+ Ist der Index negativ, so werden die Hilfsnamen der entspre­
+ chenden Hilfskategorie geliefert, die im Thesaurus den Index
+ mit umgekehrtem Vorzeichen hat.
+
+
+PROC menue loeschen (TEXT CONST name, INT CONST index)
+
+ Löscht den Namen in dem Thesaurus mit dem angegebenen In­
+ dex, falls dort der Name vorhanden ist.
+
+
+PROC menue loeschen (BOOL CONST hilfen reduzieren)
+
+ Löscht alle Menüdaten. Ist 'hilfen reduzieren' verlangt, wird
+ beim späteren Einlesen der Hilfstexte jeweils nur der erste
+ Text einer Kategorie gespeichert, um Platz zu sparen.
+
+
+PROC global manager
+
+ Geänderter Manager, der die Menüdatenräume in Söhne trans­
+ portiert und Sperren setzen kann. Ersetzt den normalen 'free
+ global manager'. Nur im Multi-User-System vorhanden.
+
+
+PROC menue manager (DATASPACE VAR ds,
+ INT CONST order, phase,
+ TASK CONST order task)
+
+ Eigentliche Manager-Routine. Kann dazu dienen, Managererwei­
+ terungen vorzunehmen. Nur im Multi-User-System vorhanden.
+ Beispiel: der Manager soll nur Aufträge von Söhnen annehmen.
+
+
+ PROC new manager (DATASPACE VAR ds,
+ INT CONST order, phase,
+ TASK CONST order task):
+
+ LET begin code = 4;
+ IF order task < myself OR order = begin code OR
+ order task = supervisor THEN
+ menue manager (ds, order, phase, order task)
+ ELSE
+ errorstop ("kein Sohn")
+ END IF
+
+ END PROC new manager;
+
+ global manager (PROC new manager)
+ (* startet den Manager *)
+
+
+
+10.3 Aufruf
+
+Menüs werden mit der Prozedur 'menue anbieten' aufgerufen. Dabei
+muß neben den Namen ein Fenster übergeben werden, in dem die
+Menüs dann angezeigt werden. Es ist darauf zu achten, daß das
+Fenster groß genug ist, um wenigstens die Auswahlpositionen im
+Bild zu haben.
+ Außerdem muß eine Prozedur übergeben werden, die die einzel­
+nen Funktionen ausführt. Diese Prozedur erhält als Parameter die
+Nummer der ausgewählten Funktion.
+ Mit 'waehlbar' können Auswahlen gesperrt werden. Diese Anga­
+be kann jedoch nicht vor Aufruf von 'menue anbieten' erfolgen, da
+dann alle Sperren erstmal gelöscht werden. Zum Setzen der Sperren
+beim Betreten eines Menüs dient ein besonderer Code, mit dem die
+übergebene Prozedur aufgerufen wird.
+ Eine Auswahl wird mit der Prozedur 'auswahl anbieten' aufge­
+rufen. Diese bekommt ebenfalls ein Fenster übergeben, außerdem
+den Namen einer Hilfestellung, die bei Bedarf aufgerufen werden
+kann. Weiterhin muß eine Prozedur übergeben werden, die die aus­
+zuwählenden Texte erzeugt. Die gewählten Texte können anschlie­
+ßend mit der Prozedur 'wahl' abgefragt werden.
+ Eine Hilfestellung wird durch die Prozedur 'hilfe anbieten'
+ausgegeben. Dabei muß außer dem Namen auch noch ein Fenster
+übergeben werden.
+ Mit 'status anzeigen' kann ein Text in der Statuszeile ausge­
+geben werden. Die Menüprogramme tun dies für ihren Bereich jedoch
+selbst.
+
+
+PROC menue anbieten (ROW 6 TEXT CONST menuenamen,
+ FENSTER VAR f,
+ BOOL CONST esc erlaubt,
+ PROC (INT CONST, INT CONST) interpreter)
+
+ Die angegebenen Menüs werden in dem Fenster 'f' angezeigt.
+ Das Fenster wird nach Beendigung des Menüs als verändert
+ gekennzeichnet. Die Namen der 6 Menüs werden in die Titelzeile
+ aufgenommen. Die Menünamen sollten mit einer Menüidentifika­
+ tion versehen sein, zum Beispiel "EUDAS.Öffnen". Der Text vor
+ dem Punkt wird an den Anfang der Titelzeile gestellt und bei
+ den einzelnen Menünamen unterdrückt. Nicht benötigte Menüs
+ müssen als "" angegeben werden.
+
+ 'esc erlaubt' gibt an, ob mit ESC ESC ein Kommandodialog ge­
+ führt werden kann. Die übergebene Prozedur muß die einzelnen
+ Funktionen ausführen, die als Zahl übergeben werden. Der
+ Interpreter wird im 'disable stop' aufgerufen, daher ist in der
+ Regel ein 'enable stop' erforderlich.
+
+ Die Parameter für 'interpreter' haben folgende Bedeutung:
+ Par. 1: 0 Aufruf zur Initialisierung der Sperren
+ oder anderen Initialisierungen zu Beginn
+ 1..6 Angabe des aktuellen Menüs
+ Par. 2: 1..23 Aufruf der entsprechenden Funktion
+ 0 Eintritt in ein neues Menü (wird vor der
+ Ausgabe dieses Menüs aufgerufen)
+ -1 Verlassen des Menüs
+ -2 Bildschirmupdate (nach Eintritt in das
+ Menü, wenn das Menü ganz ausgegeben ist,
+ oder wenn der Bildschirm nach 'Gib
+ Kommando:' zerstört worden ist)
+
+ FEHLER:
+
+ #on("i")#"Name" existiert nicht.#off("i")#
+ Das angegebene Menü ist nicht vorhanden.
+
+
+PROC waehlbar (INT CONST menuenr, funktionsnr
+ BOOL CONST moeglich)
+
+ Setzt die Funktionssperre der angegebenen Funktion. Muß in­
+ nerhalb von 'menue anbieten' aufgerufen werden. Zu Beginn von
+ 'menue anbieten' sind jeweils alle Funktionen erlaubt.
+
+
+PROC ausfuehrtaste (TEXT CONST taste)
+
+ Setzt die Taste, die Funktionen ausführt. Ist standardmäßig die
+ Leertaste.
+
+ FEHLER:
+
+ #on("i")#falsche Ausfuehrtaste#off("i")#
+ Es muß ein einzelnes Zeichen angegeben werden, das nicht
+ bereits anderweitig verwendet wird.
+
+
+PROC auswahl anbieten (TEXT CONST name, FENSTER CONST f,
+ TEXT CONST hilfe,
+ PROC (TEXT VAR, INT CONST) inhalt)
+
+ Ruft die Auswahl in dem angegebenen Fenster auf. 'hilfe' wird
+ als Hilfestellung verwendet. Die Prozedur 'inhalt' liefert den
+ Text, der an der n-ten Position stehen soll. Wenn keine wei­
+ teren Texte vorhanden sind, muß für alle weiteren Positionen
+ "" geliefert werden.
+
+ FEHLER:
+
+ #on("i")#"Name" existiert nicht.#off("i")#
+ Die angegebene Auswahl ist nicht vorhanden.
+
+
+INT PROC wahl (INT CONST stelle)
+
+ Liefert die Nummer des Textes, der an der n-ten Stelle ausge­
+ wählt wurde. Wurde kein weiterer Text mehr gewählt, so wird 0
+ geliefert.
+
+
+PROC hilfe anbieten (TEXT CONST name, FENSTER CONST f)
+
+ Bietet den Hilfstext in dem angegebenen Fenster an. Existiert
+ die Hilfe innerhalb der angegebenen Kategorie nicht, wird die
+ erste Hilfe der Kategorie angezeigt.
+
+ FEHLER:
+
+ #on("i")#Hilfe existiert nicht#off("i")#
+ Die angegebene Hilfskategorie ist nicht vorhanden.
+
+
+PROC status anzeigen (TEXT CONST zeile)
+
+ Zeigt den angegebenen Text in der obersten Bildschirmzeile an.
+
+
+10.4 Dialog
+
+EUDAS führt den Benutzerdialog in einem Fenster, dessen Größe
+durch 'dialogfenster' eingestellt wird. Das Dialogfenster wird zei­
+lenweise belegt. 'dialog' reserviert eine neue Zeile für eine beliebi­
+ge Ausgabe. Wenn das Fenster voll ist oder überschrieben wurde,
+wird in der ersten Zeile wieder angefangen. Den gleichen Effekt
+kann man mit 'neuer dialog' erreichen.
+ Mit 'ja' kann man im Dialogfenster eine Frage stellen. Als Ant­
+wort kann auch eine Hilfestellung angefordert werden oder die
+Funktion abgebrochen werden. Mit 'editget' kann man nach Auffor­
+derung einen Text eingeben lassen. Dabei stehen die gleichen
+zusätzlichen Möglichkeiten zur Verfügung.
+ Mit 'fehler ausgeben' kann eine durch 'errorstop' erzeugte Feh­
+lermeldung im Dialogfenster angezeigt werden. Der Benutzer muß
+erst eine Taste drücken, ehe er weitermachen kann. Auch hier kann
+eine Hilfestellung zu der Fehlermeldung abgerufen werden.
+
+
+PROC dialogfenster (INT CONST x, y, xl, yl)
+
+ Gibt die Fenstergröße und -position des Dialogfensters an. Für
+ den ganzen Bildschirm müßte (1, 1, 79, 24) angegeben werden.
+
+
+PROC dialog
+
+ Positioniert den Cursor auf die nächste Dialogzeile im Dialog­
+ fenster. Wurde das Fenster verändert, wird das Fenster ge­
+ löscht und auf die erste Zeile positioniert.
+
+
+PROC neuer dialog
+
+ Sorgt dafür, daß der nächste Aufruf von 'dialog' wieder in
+ einem leeren Fenster beginnt.
+
+
+BOOL PROC ja (TEXT CONST frage, hilfe)
+
+ Stellt die angegebene Frage. Es kann die angegebene Hilfsin­
+ formation abgerufen werden. Außerdem wird durch ESC 'h' ein
+ Abbruch (errorstop ("")) erzeugt.
+
+
+PROC editget (TEXT CONST prompt, TEXT VAR eingabe,
+ TEXT CONST res, hilfe)
+
+ Gibt den Text 'prompt' aus und editiert dahinter 'eingabe'. Es
+ kann die angegebene Hilfsinformation abgerufen werden. 'res'
+ gibt an, bei welchen ESC-Folgetasten das Editieren beendet
+ werden soll. In einem solchen Fall wird als Eingabe (ESC + die
+ gedrückte Taste) zurückgeliefert.
+
+
+PROC fehler ausgeben
+
+ Im Dialogfenster wird die letzte Fehlermeldung ausgegeben.
+ Gleichzeitig wird der Fehlerzustand gelöscht. Der Benutzer muß
+ eine Taste drücken, um weiterzumachen. Alternativ kann die
+ Hilfsinformation "FEHLER/" + text (errorcode) abgerufen wer­
+ den.
+
+
diff --git a/app/eudas/4.3/doc/eudas.ref.11 b/app/eudas/4.3/doc/eudas.ref.11
new file mode 100644
index 0000000..48d36c3
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.11
@@ -0,0 +1,347 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (105)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+11 Programmierung von Anwendungen
+
+
+
+Zur Realisierung eigener EUDAS-Anwendungen mit Hilfe von ELAN-
+Programmen gibt es mehrere Möglichkeiten mit zunehmender Lei­
+stungsfähigkeit, aber auch steigender Komplexität und Fehleranfäl­
+ligkeit. In den folgenden Abschnitten werden die drei wesentlichen
+Methoden vorgestellt. Sie sollten erst dann eine kompliziertere
+Methode in Angriff nehmen, wenn Sie die einfachere beherrschen.
+
+
+11.1 Musterprogramme
+
+Die bevorzugte Methode zur Erstellung eigener Anwendungen unter
+EUDAS ist die Programmierung von Mustern. EUDAS läßt dies bei
+Druckmustern, Kopiermustern und Änderungsmustern zu.
+ In diesem Fall steuert EUDAS den Ablauf des Programms im
+groben automatisch. Die jeweils unterschiedlichen Anweisungen, was
+im einzelnen zu tun ist, werden in ELAN programmiert. Aus dem
+Muster mit diesen zusätzlichen Anweisungen generiert EUDAS dann
+das Programm und führt es mit Hilfe des ELAN-Compilers aus.
+
+#on("b")#Vorteile#off("b")# Diese Methode hat den Vorteil, daß nur die
+minimal not­
+wendigen Anweisungen tatsächlich selbst programmiert werden
+müssen. Dafür reichen bereits geringe ELAN-Kenntnisse vollkommen
+aus. Ein Muster kann relativ schnell erstellt und getestet werden.
+Durch den einfachen Aufbau ist auch die Fehlerwahrscheinlichkeit
+beim Entwickeln geringer als bei anderen Methoden.
+ Daneben lassen sich die Musterprogramme jeweils bequem im
+Menü durch Angabe des Namens oder durch Ankreuzen ausführen,
+also auch durch unbedarfte Benutzer.
+
+#on("b")#Nachteile#off("b")# Nachteil dieser Methode ist, daß jeweils beim
+Aufruf das
+Programm nochmal neu erzeugt und übersetzt werden muß, da die
+Übersetzung auch von der gerade geöffneten Datei abhängt. Dies
+stört besonders bei umfangreichen Druckmustern (auf langsamen
+Rechnern).
+ Zum zweiten wird ein umfangreiches Druckmuster auch bald
+unübersichtlich, da Strukturierungshilfen für größere Programme
+fehlen. Der eigentliche Mustertext ist dann schwer von den zahlrei­
+chen Abkürzungen zu trennen.
+ Als Abhilfe für diese beiden Nachteile bietet es sich an, um­
+fangreichere Abkürzungen bzw. Ausdrücke eingebettet in ein
+ELAN-Paket aus dem Muster herauszunehmen und vorher zu in­
+sertieren.
+ Dadurch fällt zum einen die ständige Neuübersetzung dieser
+Ausdrücke weg, zum anderen ist das eigentliche Muster wieder
+überschaubar. Voraussetzung zur Anwendung eines solchen Musters
+ist dann jedoch, daß das zugehörige Paket in der jeweiligen Task
+bereits vorher übersetzt wurde.
+ Die nachfolgenden Beispiele zeigen, wie dieses Verfahren in der
+Realität aussehen kann.
+
+#on("b")#Beispiel 1#off("b")# In der Schulverwaltung soll ein Kopier- oder
+Ände­
+rungsmuster erstellt werden, das die Versetzung am Schuljahresende
+realisiert. Angenommen wird eine Datei, die alle Schüler enthält.
+Schüler, die nicht versetzt werden, sind vorher im Feld 'Versetzung'
+mit einem beliebigen Text gekennzeichnet worden (zum Beispiel
+'Nachprüfung' o.ä.).
+ Die Versetzung kann auf zweierlei Weise erfolgen: zum einen
+durch automatische Änderung, wenn die alte Version noch auf einer
+Archivdiskette aufgehoben wird, oder durch Kopieren in eine neue
+Datei.
+ Bei beiden Mustern ist die einzige Änderung die Angabe der
+neuen Klasse. Daher bietet es sich an, eine Prozedur 'neue klasse'
+zu definieren, die als Ergebnis die neue Klasse eines Schülers lie­
+fert. Diese Prozedur kann dann im Änderungsmuster wie folgt ver­
+wendet werden:
+
+
+ "Klasse" V neue klasse;
+
+
+Entsprechend läuft die Verwendung im Kopiermuster:
+
+
+ "Name" K f ("Name");
+ "Vorname" K f ("Vorname");
+ "Klasse" K neue klasse;
+ ...
+
+
+Die Prozedur 'neue klasse' muß dann in einem Paket definiert wer­
+den, das etwa folgendes Aussehen haben könnte (spezifische Ände­
+rungen natürlich möglich):
+
+
+ PACKET klassenwechsel DEFINES neue klasse:
+
+ TEXT PROC neue klasse :
+
+ IF f ("Versetzung") = "" THEN
+ klasse um 1 erhoeht
+ ELSE
+ alte klasse ohne zusatz
+ END IF .
+
+ klasse um 1 erhoeht :
+ INT CONST alte klasse := int (f ("Klasse"));
+ IF alte klasse < 9 THEN
+ "0" + text (alte klasse + 1) + zusatz
+ ELSE
+ text (alte klasse + 1) + zusatz
+ END IF .
+
+ zusatz :
+ f ("Klasse") SUB 3.
+
+ alte klasse ohne zusatz :
+ subtext (f ("Klasse"), 1, 2) .
+
+ END PROC neue klasse;
+
+ END PACKET klassenwechsel;
+
+
+Schüler, die versetzt werden, erhalten ihre neue Jahrgangsstufe mit
+dem alten Klassenzusatz zugeteilt. Dabei ist darauf zu achten, daß
+die Klassen 5 bis 9 eine '0' vorangestellt bekommen, damit die
+Sortierung funktioniert.
+ Schüler, die nicht versetzt werden, behalten ihre alte Jahr­
+gangsstufe, allerdings ohne einen Klassenzusatz, der ihnen an­
+schließend manuell zugewiesen werden muß.
+ Zur Benutzung muß das oben angegebene Paket in eine Text­
+datei geschrieben und mit dem Kommando 'insert' fest insertiert
+werden.
+
+#on("b")#Beispiel 2#off("b")# Aus einer Datei mit bibliographischen Einträgen
+sollen
+bestimmte Literaturhinweise gedruckt werden. Der Literaturhinweis
+soll jeweils als Endlostext umbrochen werden. Dafür müssen in einer
+Abkürzung alle Daten verkettet werden. Es sei das folgende ein­
+fache Druckmuster vorgegeben:
+
+
+ % WIEDERHOLUNG
+ % MODUS 3
+ [&<krz>] &titel
+
+ % ABKUERZUNGEN
+ &krz : f ("Kurzbez") . (* z.B. "Lew84" *)
+ &titel : titel lang .
+
+
+Die Prozedur 'titel lang' wird in folgendem Paket definiert:
+
+
+ PACKET bibliographie DEFINES titel lang :
+
+ TEXT VAR puffer; (* verringert Heap-Belastung *)
+
+ TEXT PROC titel lang :
+
+ puffer := f ("Name 1");
+ puffer CAT ", ";
+ puffer CAT f ("Vorname 1");
+ ggf weitere namen;
+ titel kursiv;
+ enthalten in;
+ erscheinungsort und jahr;
+ puffer .
+
+ ggf weitere namen:
+ IF f ("Name 2") <> "" THEN
+ puffer CAT "; ";
+ puffer CAT f ("Name 2")
+ END IF .
+
+ titel kursiv :
+ puffer CAT " \#on (""i"")\#";
+ puffer CAT f ("Titel");
+ puffer CAT "\#off (""i"")\#, " .
+
+ enthalten in :
+ IF f ("in") <> "" THEN
+ puffer CAT " in: ";
+ puffer CAT f ("in");
+ puffer CAT ", "
+ END IF .
+
+ erscheinungsort und jahr :
+ puffer CAT f ("Ort");
+ puffer CAT ", ";
+ puffer CAT f ("Jahr") .
+
+ END PROC titel lang;
+
+ END PACKET bibliographie;
+
+
+Die Puffervariable wird verwendet, um die bei Verwendung des
+Operators '+' entstehende Heapbelastung zu verringern. An diese
+Variable werden nacheinander alle notwendigen Daten mit den ent­
+sprechenden Trennzeichen angehängt.
+ Im Druckmuster wird dieser lange Text dann im Modus 3 auf
+mehrere Zeilen umbrochen, wobei die Einrückung erhalten bleibt. Die
+Druckausgabe kann dann bei Bedarf noch mit 'lineform' bearbeitet
+werden, um einen noch besseren Umbruch zu erzielen.
+
+
+11.2 Dateianwendungen
+
+Die zweite Möglichkeit der Programmierung unter EUDAS besteht
+darin, ELAN-Programme zu schreiben, die EUDAS-Dateien mit Hilfe
+des in Kapitel 6 beschriebenen Datentyps EUDAT manipulieren. Die
+Programmierung gestaltet sich ähnlich wie mit FILEs.
+
+#on("b")#Vorteile#off("b")# Durch dieses Verfahren haben Sie volle Freiheit
+der Pro­
+grammierung. Da lediglich die Struktur der EUDAS-Dateien als
+Datenspeicher verwendet wird, sind sehr viele Anwendungen denk­
+bar.
+ Außerdem können so beliebig viele Dateien gleichzeitig bear­
+beitet werden. Da die Programme nicht auf die virtuelle Datei zu­
+greifen, ist ein Konflikt mit dem aktuellen Zustand von EUDAS
+nahezu ausgeschlossen.
+
+#on("b")#Nachteile#off("b")# Der Nachteil dieses Verfahrens ist, daß viele
+Dinge
+selbst programmiert werden müssen, so zum Beispiel das Durchgehen
+einer Datei. Auch die Hilfsmittel der virtuellen Datei wie Such­
+muster, Koppeln und alle Anwendungen, die auf die virtuelle Datei
+zugreifen, stehen nicht zur Verfügung.
+
+#on("b")#Beispiel 1#off("b")# Die in Abschnitt 6.6 vorgestellte Anwendung als
+Asso­
+ziativspeicher kann als Beispiel für diese Methode dienen.
+
+#on("b")#Beispiel 2#off("b")# Eine EUDAS-Datei (zum Beispiel eine
+Schülerdatei) soll
+in mehrere Dateien aufgespalten werden (zum Beispiel klassen­
+weise). Dies kann durch das folgende Beispielprogramm bewirkt
+werden:
+
+
+ LET
+ klassenfeld = 3,
+ quellname = "Schüler",
+ zielname = "Jahrgang ";
+ ROW 9 EUDAT VAR ziel;
+ EUDAT VAR quelle;
+ SATZ VAR feldnamen;
+
+ quelle oeffnen;
+ zieldateien einrichten;
+ auf satz (quelle, 1);
+ WHILE NOT dateiende (quelle) REP
+ aktuellen satz kopieren;
+ weiter (quelle)
+ END REP .
+
+ quelle oeffnen :
+ oeffne (quelle, quellname);
+ feldnamen lesen (quelle, feldnamen) .
+
+ zieldateien einrichten :
+ INT VAR i;
+ FOR i FROM 1 UPTO 9 REP
+ oeffne (ziel (i), zielname + text (i + 4));
+ feldnamen aendern (ziel (i), feldnamen)
+ END REP .
+
+ aktuellen satz kopieren :
+ SATZ VAR satz;
+ satz lesen (quelle, satz);
+ satz einfuegen (ziel (stufe), satz);
+ weiter (ziel (stufe)) .
+
+ stufe :
+ TEXT VAR klasse;
+ feld lesen (satz, klassenfeld, klasse);
+ int (klasse) - 4 .
+
+
+
+11.3 Integrierte Anwendungen
+
+Die schwierigste Möglichkeit, Anwendungen unter EUDAS zu reali­
+sieren, ist ihre Integration. Ein solches Programm greift selbst auf
+die virtuelle Datei zu, nutzt die Funktionen von EUDAS so weit wie
+möglich und definiert vielleicht sogar ein eigenes Menü.
+
+#on("b")#Vorteile#off("b")# Auf diese Weise können natürlich alle
+Möglichkeiten
+ausgeschöpft werden. Sie können Programme erstellen, die als eine
+natürliche Erweiterung von EUDAS wirken oder EUDAS ganz erset­
+zen.
+
+#on("b")#Nachteile#off("b")# Eine solche Integration ist aber besonders
+schwierig,
+wenn EUDAS und die Erweiterung nebeneinander benutzt werden
+sollen. In diesem Fall hat EUDAS keine komplette Kontrolle der
+Interaktion, so daß leicht undefinierte Zustände möglich sind.
+ Weniger Probleme treten auf, wenn sichergestellt ist, daß nur
+die Anwendung selbst verwendet wird. Auch in diesem Fall ist zu
+beachten, daß EUDAS nicht als Programmierumgebung für Anwen­
+dungssysteme konzipiert wurde und daher nicht immer leicht zu
+benutzen ist.
+ Am einfachsten ist es noch, nur eigene Menüs für eine andere
+Anwendung zu verwenden, da die Menüprozeduren relativ unabhän­
+gig vom Rest sind.
+
+#on("b")#Richtlinien#off("b")# Bei Erweiterungen von EUDAS sind folgende
+Richtlinien zu beachten:
+
+1. Ein Programm, das selber Dateien für die virtuelle Datei öffnen
+ will, sollte vorher prüfen, ob noch eine Datei geöffnet ist und in
+ diesem Fall abbrechen. Beim Multi-User-Betrieb ist nämlich
+ sonst nicht gewährleistet, daß alle Sperren wieder entfernt
+ werden.
+
+2. Ein solches Programm sollte seine eigenen Dateien vor dem
+ Wechsel zu EUDAS selbst wieder sichern und die Arbeitskopien
+ löschen, damit der Ausgangszustand zu Beginn des Programms
+ wiederhergestellt wird.
+
+3. Programme, die Menüs benutzen, sollten nicht unter EUDAS auf­
+ gerufen werden, da sonst eine Beeinflussung der EUDAS-Menüs
+ möglich ist.
+
+An dieser Stelle soll noch einmal von der Erstellung integrierter
+Anwendungen abgeraten werden, wenn es auch andere Möglichkeiten
+gibt, das gegebene Problem mit EUDAS zu lösen. Der hohe Aufwand
+dieser Methode rechtfertigt sich nur in wenigen Fällen.
+ Experimentierfreudige Anwender werden sich durch diese War­
+nung sowieso nicht abhalten lassen. Ihnen sollte aber bewußt sein,
+daß ein solches Vorgehen auf eigene Gefahr stattfindet und kein
+Anspruch auf Beratung oder Fehlerbeseitigung in einem solchen Fall
+besteht.
+
diff --git a/app/eudas/4.3/doc/eudas.ref.2 b/app/eudas/4.3/doc/eudas.ref.2
new file mode 100644
index 0000000..2447897
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.2
@@ -0,0 +1,830 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (13)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+2 Zusammenstellung der Funktionen
+
+
+
+Im folgenden finden Sie eine Übersicht über alle Menüfunktionen. Zu
+jeder Funktion ist aufgeführt, welche Parameter angegeben werden
+müssen. Die Parameter werden als Text erfragt. Bei einigen Funk­
+tionen können alle möglichen Parameterwerte mit ESC 'z' (Zeigen)
+als Auswahl abgerufen werden. Bei manchen können in der Auswahl
+mehrere Werte angekreuzt werden, die dann nacheinander abgear­
+beitet werden. Welcher Fall zutrifft, ist jeweils aufgeführt.
+
+
+2.1 Menü 'Öffnen'
+
+
+#linefeed (0.5)#
+#on ("b")#O EUDAS-Datei Öffnen#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: EUDAS-Dateiname, mit Zeigen, eine Wahl
+
+Zweck: Stellt eine EUDAS-Datei als aktuelle Arbeitsdatei ein.
+ Falls eine vorher geöffnete Datei verändert wurde,
+ wird sie nach Anfrage gesichert. Falls die zu öffnende
+ Datei noch nicht existiert, kann sie nach Anfrage
+ eingerichtet werden. Dabei müssen dann die Feld­
+ namen angegeben werden.
+
+ Es wird gefragt, ob die Datei geändert werden soll. In
+ diesem Fall wird eine Arbeitskopie hergestellt. Fast
+ alle EUDAS-Funktionen beziehen sich nachher auf die
+ so eingestellte Datei.
+
+ Ist ein Mehrbenutzer-Manager eingestellt, kann auch
+ eine Datei aus dieser Managertask als Parameter
+ angegeben werden. Die Datei wird dann automatisch
+ von dort kopiert und eine Sperre im Manager gesetzt,
+ falls Änderungen vorgenommen werden sollen.
+
+Verweise: Abschnitt 3.2
+ Benutzerhandbuch Abschnitt 5.1 und 9.1
+
+
+#linefeed (0.5)#
+#on("b")#E EUDAS-Datei Ketten#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: EUDAS-Dateiname, mit Zeigen, mehrfache Wahl
+
+Zweck: Falls bereits eine EUDAS-Datei geöffnet ist, kann eine
+ weitere Datei gleicher Struktur logisch angekettet
+ werden. Bei der Bearbeitung werden dann beide Datei­
+ en wie eine zusammenhängende Datei behandelt.
+
+ Die gekettete Datei kann ebenfalls verändert werden,
+ wenn dies beim Öffnen der ersten Datei angegeben
+ wurde. Die angegebene Datei kann auch aus einem
+ Manager stammen.
+
+Verweise: Abschnitt 3.2
+ Benutzerhandbuch Abschnitt 9.2
+
+
+#linefeed (0.5)#
+#on("b")#K EUDAS-Datei Koppeln#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: EUDAS-Dateiname, mit Zeigen, mehrfache Wahl
+
+Zweck: Falls bereits eine Datei geöffnet ist, kann eine andere
+ EUDAS-Datei dazugekoppelt werden. Dazu muß min­
+ destens das erste Feld der zu koppelnden Datei in der
+ bereits geöffneten Datei vorkommen.
+
+ Nach dem Koppeln erscheinen beide Dateien wie eine
+ Datei. Zu jedem Satz der ersten Datei erscheinen je­
+ weils alle Sätze der Koppeldatei, die in dem Koppelfeld
+ übereinstimmen.
+
+ Die gekoppelte Datei kann ebenfalls verändert werden,
+ wenn dies beim Öffnen der ersten Datei angegeben
+ wurde. Die angegebene Datei kann auch aus einem
+ Manager stammen.
+
+Verweise: Abschnitt 3.3
+ Benutzerhandbuch Abschnitt 9.3 und 9.4
+
+
+#linefeed (0.5)#
+#on("b")#S Arbeitskopie Sichern#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Wurde eine EUDAS-Datei geöffnet und verändert, muß
+ zum Schluß die veränderte Arbeitskopie wieder ge­
+ sichert werden. Die Arbeitskopie kann entweder ge­
+ löscht werden, die alte Version ersetzen oder unter
+ einem neuen Namen registriert werden.
+
+ Für jede veränderte Datei wird zunächst erfragt, ob
+ die alte Version überschrieben werden soll. Dies ist
+ der Normalfall. Bei Verneinung dieser Frage muß ein
+ neuer Name für die Arbeitskopie angegeben werden.
+
+ Zum Schluß wird erfragt, ob alle Arbeitskopien ge­
+ löscht werden sollen (Normalfall: ja). Anderenfalls
+ bleiben die Dateien weiter geöffnet.
+
+Verweise: Abschnitt 3.5
+ Benutzerhandbuch Abschnitt 6.4
+
+
+#linefeed (0.5)#
+#on("b")#N Notizen ansehen/ändern#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Zu jeder EUDAS-Datei kann als Notiz ein beliebiger
+ Text gespeichert werden. Dieser Text der aktuellen
+ Datei wird mit dieser Funktion im Editor angezeigt
+ und kann verändert werden, wenn eine Arbeitskopie
+ angelegt wurde. Anderenfalls werden etwaige Verän­
+ derungen einfach ignoriert.
+
+Verweise: Abschnitt 3.1
+
+
+#linefeed (0.5)#
+#on("b")#F Feldstruktur ändern#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Mit dieser Funktion können neue Felder an die aktu­
+ elle Datei angefügt werden. Außerdem lassen sich
+ Feldnamen und Feldtypen ändern. Die Feldtypen be­
+ stimmen die Behandlung eines Feldes beim Suchen oder
+ Sortieren (z.B. von Zahlen).
+
+ Zunächst wird erfragt, ob neue Feldnamen angefügt
+ werden sollen. Diese können dann im Editor eingege­
+ ben werden. Danach wird gefragt, ob Feldnamen oder
+ Feldtypen geändert werden sollen (neu angefügte
+ Felder erhalten erst einmal den Typ TEXT). Falls die
+ Frage bejaht wird, können in einer Auswahl die zu
+ ändernden Felder angekreuzt werden. Für jedes ange­
+ kreuzte Feld werden dann der Name und der Typ zum
+ Überschreiben angeboten.
+
+Verweise: Abschnitt 3.1
+ Benutzerhandbuch Abschnitt 11.1
+
+
+#linefeed (0.5)#
+#on("b")#P Prüfbedingungen ansehen/ändern#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Beim Tragen in eine EUDAS-Datei können Bedingungen
+ für die zu tragenden Sätze überprüft werden. Diese
+ Bedingungen für die aktuelle Datei können mit dieser
+ Funktion angezeigt und, falls erlaubt, auch geändert
+ werden.
+
+Verweise: Abschnitt 3.1 und 4.4
+ Benutzerhandbuch Abschnitt 11.3
+
+
+#linefeed (0.5)#
+#on("b")#M Mehrbenutzer Manager einstellen#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Managertaskname, kein Zeigen
+
+Zweck: EUDAS kann beim Öffnen eine Datei von einer anderen
+ Task des Systems kopieren. Dadurch können mehrere
+ Benutzer kontrolliert auf die gleiche Datei zugreifen.
+ Wenn diese Möglichkeit verwendet werden soll, muß
+ mit dieser Funktion zunächst die in Frage kommende
+ Managertask angegeben werden.
+
+Verweise: Abschnitt 3.7
+ Benutzerhandbuch Abschnitt 9.6
+
+
+2.2 Menü 'Einzelsatz'
+
+
+#linefeed (0.5)#
+#on("b")#W Weiter#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Geht einen Satz weiter in der aktuellen Datei - falls
+ eine Suchbedingung eingestellt ist, weiter zum näch­
+ sten ausgewählten Satz.
+
+Verweise: Abschnitt 4.2
+ Benutzerhandbuch Abschnitt 5.2
+
+
+#linefeed (0.5)#
+#on("b")#Z Zurück#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Geht einen Satz zurück in der aktuellen Datei - falls
+ eine Suchbedingung eingestellt ist, zurück zum vori­
+ gen ausgewählten Satz.
+
+Verweise: Abschnitt 4.2
+ Benutzerhandbuch Abschnitt 5.2
+
+
+#linefeed (0.5)#
+#on("b")#N Auf Satz Nr. ..#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Positioniert auf einen bestimmten Satz der aktuellen
+ Datei, dessen Satznummer eingegeben werden muß, und
+ zwar unabhängig, ob der Satz durch die Suchbedingung
+ ausgewählt wird oder nicht. Trifft die eingestellte
+ Suchbedingung nicht auf den Satz zu, erscheint
+ 'SUCH-' in der Überschrift. Existiert die eingegebene
+ Satznummer nicht, positioniert EUDAS hinter den
+ letzten Satz der Datei.
+
+Verweise: Benutzerhandbuch Abschnitt 5.2
+
+
+#linefeed (0.5)#
+#on("b")#S Suchbedingung Setzen#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Es kann eine neue Suchbedingung für die aktuelle
+ Datei eingegeben werden, bzw. eine vorher eingestellte
+ Suchbedingung wird zum Ändern angeboten. Die Such­
+ bedingung wird in Form eines Suchmusters in das
+ Satzformular geschrieben.
+
+ Die eingestellte Suchbedingung wird beim Positionieren
+ und bei allen Bearbeitungsfunktionen beachtet.
+
+Verweise: Abschnitt 4.2
+ Benutzerhandbuch Abschnitt 5.3, 5.4 und 10.3
+
+
+#linefeed (0.5)#
+#on("b")#L Suchbedingung Löschen#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Die eingestellte Suchbedingung wird wieder gelöscht.
+
+Verweise: Abschnitt 4.2
+ Benutzerhandbuch Abschnitt 5.3
+
+
+#linefeed (0.5)#
+#on ("b")#M Markierung umkehren#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Mit dieser Funktion können einzelne Sätze zur späte­
+ ren Bearbeitung markiert werden. Falls der aktuelle
+ Satz bereits markiert ist, wird die Markierung wieder
+ entfernt, ansonsten wird er markiert.
+
+ Wenn mindestens ein Satz markiert ist, beachten die
+ Bearbeitungsfunktionen nur die markierten Sätze. So
+ kann eine manuelle Auswahl durchgeführt werden. Die
+ Markierung bleibt nur bis zum Sichern bestehen. Sie
+ ist keine permanente Eigenschaft einer EUDAS-Datei.
+
+Verweise: Abschnitt 4.2
+ Benutzerhandbuch Abschnitt 10.4
+
+
+#linefeed (0.5)#
+#on ("b")#E Datensatz Einfügen#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Mit dieser Funktion wird vor dem aktuellen Satz ein
+ leerer Satz eingefügt, für den anschließend die Feld­
+ inhalte im Satzformular eingetragen werden können.
+
+Verweise: Abschnitt 3.4
+ Benutzerhandbuch Abschnitt 6.2 und 10.2
+
+
+#linefeed (0.5)#
+#on ("b")#A Datensatz Ändern#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Die Inhalte des aktuellen Satzes werden im Satzformu­
+ lar zum Ändern angeboten.
+
+Verweise: Abschnitt 3.4
+ Benutzerhandbuch Abschnitt 6.3 und 10.2
+
+
+#linefeed (0.5)#
+#on ("b")#T Datensatz Tragen#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: EUDAS-Dateiname, mit Zeigen, eine Wahl
+
+Zweck: Mit dieser Funktion kann der aktuelle Satz in eine
+ anderen EUDAS-Datei gleicher Struktur transportiert
+ werden. In der Zieldatei wird er am Ende angefügt.
+
+Verweise: Abschnitt 4.4
+ Benutzerhandbuch Abschnitt 6.3
+
+
+#linefeed (0.5)#
+#on ("b")#H Datensatz Holen#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: EUDAS-Dateiname, mit Zeigen, eine Wahl
+
+Zweck: Mit dieser Funktion kann der letzte Satz einer ande­
+ ren Datei vor dem aktuellen Satz eingefügt werden,
+ sofern die Struktur gleich ist. Damit kann ein vorher­
+ gegangenes Tragen rückgängig gemacht werden.
+
+Verweise: Abschnitt 4.4
+ Benutzerhandbuch Abschnitt 6.3
+
+
+#linefeed (0.5)#
+#on ("b")#F Feldauswahl#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Die Felder der aktuellen Datei werden in einer Aus­
+ wahl angeboten. Am Bildschirm werden danach nur die
+ ausgewählten Felder in der gewählten Reihenfolge
+ dargestellt. Die Auswahl hat jedoch nur Auswirkung
+ auf die Darstellung am Bildschirm, anderen Funktionen
+ stehen nach wie vor alle Felder zur Verfügung. Die
+ Auswahl gilt bis zum Sichern, sie wird also nicht mit
+ der Datei abgespeichert.
+
+Verweise: Abschnitt 4.1
+ Benutzerhandbuch Abschnitt 10.1
+
+
+2.3 Menü 'Gesamtdatei'
+
+
+#linefeed (0.5)#
+#on ("b")#K Satzauswahl Kopieren#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: EUDAS-Dateiname, mit Zeigen, eine Wahl
+ Name Kopiermuster, ohne Zeigen
+
+Zweck: Mit dieser Funktion werden die ausgewählten bzw.
+ markierten Sätze der aktuellen Datei in eine andere
+ Datei kopiert. Welche Felder kopiert werden sollen und
+ in welcher Reihenfolge, wird durch ein Kopiermuster
+ festgelegt. Dieses Kopiermuster kann benannt werden
+ oder unbenannt nur für ein Mal erstellt werden. Wird
+ das Kopiermuster neu erstellt, wird ein Standard-
+ Kopiermuster zum Ändern angeboten.
+
+Verweise: Abschnitt 4.4
+ Benutzerhandbuch Abschnitt 11.2
+
+
+#linefeed (0.5)#
+#on ("b")#T Satzauswahl Tragen#off("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: EUDAS-Dateiname, mit Zeigen, eine Wahl
+
+Zweck: Transportieren der ausgewählten bzw. markierten
+ Sätze in eine andere Datei gleicher Struktur. Die Sätze
+ werden in der Zieldatei am Ende eingefügt.
+
+Verweise: Abschnitt 4.4
+ Benutzerhandbuch Abschnitt 11.3
+
+
+#linefeed (0.5)#
+#on ("b")#V Satzauswahl Verändern#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Name Änderungsmuster, mit Zeigen, mehrfache Wahl
+
+Zweck: Bearbeiten der ausgewählten bzw. markierten Sätze
+ der aktuellen Datei nach Vorgabe einer Änderungs­
+ vorschrift.
+
+Verweise: Abschnitt 4.4
+ Benutzerhandbuch Abschnitt 11.4
+
+
+#linefeed (0.5)#
+#on ("b")#U Übersicht Satzauswahl#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Anzeige aller ausgewählten Sätze in einem Über­
+ sichtsformat mit einem Satz pro Bildschirmzeile. Die
+ Felder, die in der Übersicht angezeigt werden sollen,
+ können vorher ausgewählt werden. In der Übersicht ist
+ Blättern und Markieren von Sätzen möglich.
+
+Verweise: Abschnitt 4.1
+ Benutzerhandbuch Abschnitt 10.5
+
+
+#linefeed (0.5)#
+#on ("b")#S Aktuelle Datei Sortieren#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Sortieren der aktuellen Datei in beliebiger Reihenfolge
+ auf- oder absteigend. Zum Sortieren muß eine Ar­
+ beitskopie angelegt sein. Die Feldreihenfolge, in der
+ sortiert werden soll, wird vorher erfragt.
+
+Verweise: Abschnitt 4.3
+ Benutzerhandbuch Abschnitt 11.1
+
+
+#linefeed (0.5)#
+#on ("b")#L Alle Markierungen Löschen#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Löschen aller Markierungen der aktuellen Datei.
+
+Verweise: Abschnitt 4.2
+ Benutzerhandbuch Abschnitt 10.4
+
+
+2.4 Menü 'Drucken'
+
+
+#linefeed (0.5)#
+#on ("b")#D Satzauswahl Drucken#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Name Druckmuster, mit Zeigen, mehrfache Wahl
+
+Zweck: Ausdruck des Inhalts der ausgewählten oder markier­
+ ten Sätze in druckbarer Form nach Vorgabe eines
+ Druckmusters. Die Ausgabe kann automatisch zum
+ Drucker geschickt werden oder erst in einer Datei
+ zwischengespeichert werden.
+
+Verweise: Kapitel 5
+ Benutzerhandbuch Abschnitt 7.1 und 7.2
+
+
+#linefeed (0.5)#
+#on ("b")#R Richtung Druckausgabe#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Mit dieser Funktion kann festgelegt werden, ob die
+ Druckausgabe automatisch zum Drucker geschickt wird,
+ in eine bestimmte Datei oder in eine automatisch
+ eingerichtete Datei geschrieben wird.
+
+ Die Angabe einer bestimmten Datei gilt nur für den
+ nächsten Druckvorgang. Sie muß also gegebenenfalls
+ wieder neu eingestellt werden.
+
+Verweise: Abschnitt 5.2
+ Benutzerhandbuch Abschnitt 7.2 und 12.1
+
+
+#linefeed (0.5)#
+#on ("b")#E Textdatei Editieren#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Name Textdatei, mit Zeigen, mehrfache Wahl
+
+Zweck: Aufruf des EUMEL-Editors zum Erstellen und Ändern
+ von Druckmustern und Änderungsmustern sowie zum
+ Ansehen der Druckausgabe.
+
+Verweise: Benutzerhandbuch Abschnitt 7.2
+
+
+#linefeed (0.5)#
+#on ("b")#A Textdatei Ausdrucken#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Name Textdatei, mit Zeigen, mehrfache Wahl
+
+Zweck: Mit dieser Funktion kann eine Textdatei oder die
+ zwischengespeicherte Ausgabe des Druckens einer
+ EUDAS-Datei zum Drucker geschickt werden.
+
+Verweise: Benutzerhandbuch Abschnitt 7.2
+
+
+#linefeed (0.5)#
+#on ("b")#N Textdatei Nachbearbeiten#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Name Textdatei, mit Zeigen, mehrfache Wahl
+
+Zweck: Mit dieser Funktion kann die zwischengespeicherte
+ Ausgabe des Druckens einer EUDAS-Datei mit den
+ Textkosmetikprogrammen 'lineform' und 'pageform'
+ bearbeitet werden.
+
+Verweise: Benutzerhandbuch Abschnitt 12.1
+
+
+2.5 Menü 'Dateien'
+
+
+#linefeed (0.5)#
+#on ("b")#U Übersicht Dateien System#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Übersicht über die Dateien im System in der aktuellen
+ Benutzertask.
+
+Verweise: Benutzerhandbuch Abschnitt 16.1
+
+
+#linefeed (0.5)#
+#on ("b")#L Datei Löschen#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Dateiname, mit Zeigen, mehrfache Wahl
+
+Zweck: Löschen einer beliebigen Datei in der aktuellen Be­
+ nutzertask nach Anfrage.
+
+Verweise: Benutzerhandbuch Abschnitt 16.1
+
+
+#linefeed (0.5)#
+#on ("b")#N Datei Umbenennen#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Dateiname, mit Zeigen, mehrfache Wahl
+ Neuer Name, ohne Zeigen
+
+Zweck: Umbenennen einer beliebigen Datei in der aktuellen
+ Benutzertask.
+
+Verweise: Benutzerhandbuch Abschnitt 16.1
+
+
+#linefeed (0.5)#
+#on ("b")#K Datei Kopieren#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Dateiname, mit Zeigen, mehrfache Wahl
+ Zieldateiname, ohne Zeigen
+
+Zweck: Anfertigen einer logischen Kopie einer beliebigen
+ Datei in der aktuellen Benutzertask.
+
+Verweise: Benutzerhandbuch Abschnitt 16.1
+
+
+#linefeed (0.5)#
+#on ("b")#P Platzbedarf einer Datei#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Dateiname, mit Zeigen, mehrfache Wahl
+
+Zweck: Zeigt den belegten Speicherplatz einer beliebigen
+ Datei in der aktuellen Benutzertask.
+
+Verweise: Benutzerhandbuch Abschnitt 16.1
+
+
+#linefeed (0.5)#
+#on ("b")#A Datei Aufräumen#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Dateiname, mit Zeigen, mehrfache Wahl
+
+Zweck: Reorganisieren einer Textdatei oder einer EUDAS-
+ Datei, um Platz zu sparen oder den Zugriff zu be­
+ schleunigen. Empfiehlt sich bei stark veränderten
+ oder umsortierten Dateien.
+
+Verweise: Benutzerhandbuch Abschnitt 16.1
+
+
+2.6 Menü 'Archiv'
+
+
+#linefeed (0.5)#
+#on ("b")#U Übersicht Dateien Archiv#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Übersicht aller Dateien auf der eingelegten Archivdis­
+ kette.
+
+Verweise: Benutzerhandbuch Abschnitt 16.2
+
+
+#linefeed (0.5)#
+#on ("b")#D Archivübersicht Drucken#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Die Archivübersicht wird direkt zum Drucker ge­
+ schickt.
+
+Verweise: Benutzerhandbuch Abschnitt 16.2
+
+
+#linefeed (0.5)#
+#on ("b")#K Datei Kopieren vom Archiv#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Dateiname, mit Zeigen, mehrfache Wahl
+
+Zweck: Eine Datei auf der Archivdiskette wird in die aktuelle
+ Benutzertask kopiert.
+
+Verweise: Benutzerhandbuch Abschnitt 16.2
+
+
+#linefeed (0.5)#
+#on ("b")#S Datei Schreiben auf Archiv#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Archivname
+ Dateiname, mit Zeigen, mehrfache Wahl
+
+Zweck: Eine Datei aus der aktuellen Benutzertask wird auf
+ die eingelegte Archivdiskette geschrieben.
+
+Verweise: Benutzerhandbuch Abschnitt 16.2
+
+
+#linefeed (0.5)#
+#on ("b")#L Datei Löschen auf Archiv#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Archivname
+ Dateiname, mit Zeigen, mehrfache Wahl
+
+Zweck: Löschen einer Datei auf der eingelegten Archivdisket­
+ te. Der Platz kann jedoch nicht immer wiederverwendet
+ werden.
+
+Verweis: Benutzerhandbuch Abschnitt 16.2
+
+
+#linefeed (0.5)#
+#on ("b")#I Archivdiskette Initialisieren#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: keine
+
+Zweck: Mit dieser Funktion kann eine Archivdiskette komplett
+ gelöscht werden. Die Diskette kann dabei auch gleich­
+ zeitig formatiert werden, falls der Rechner dies zu­
+ läßt. Das Initialisieren ist notwendig, bevor eine neue
+ Diskette als Archiv verwendet werden kann.
+
+Verweise: Benutzerhandbuch Abschnitt 16.2
+
+
+#linefeed (0.5)#
+#on ("b")#Z Zielarchiv einstellen#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Managertaskname, ohne Zeigen
+
+Zweck: Mit dieser Funktion kann eine Managertask angegeben
+ werden, die als Ziel der Archivoperationen dient.
+ Damit können Dateien auch in beliebigen Managertasks
+ oder über das EUMEL-Netz gesichert werden.
+
+ Es wird erfragt, ob die angegebene Task ein Archiv­
+ manager oder ein gewöhnlicher Dateimanager ist.
+
+Verweise: Benutzerhandbuch Abschnitt 16.2
+
+
+#linefeed (0.5)#
+#on ("b")#P Paßwort einstellen#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Paßwort
+
+Zweck: Mit dieser Funktion kann ein Paßwort eingestellt
+ werden, das bei der Kommunikation mit allgemeinen
+ Managertasks überprüft wird.
+
+Verweise: Benutzerhandbuch Abschnitt 16.2
+
+
+#linefeed (0.5)#
+#on ("b")#R Archivmanager Reservieren#off ("b")#
+#linefeed (1.07)#
+_____________________________________________________
+
+Parameter: Reservierungstext
+
+Zweck: Falls als Zielarchiv eine Managertask eingestellt ist,
+ die zwar kein Archivmanager ist, aber reserviert
+ werden muß (z.B. 'DOS'), kann die Reservierung mit
+ dieser Funktion ausgeführt werden. Die Freigabe
+ erfolgt automatisch beim Verlassen des Menüs.
+
+Verweise: Benutzerhandbuch Abschnitt 16.2
+
+
+
+2.7 Kurzabfrage
+
+Wird 'eudas' innerhalb des EUMEL-Editors aufgerufen, so wird eine
+spezielle Kurzabfrage gestartet. Diese ermöglicht die Übernahme von
+Druckdaten direkt in die editierte Datei.
+ Zunächst wird der Dateiname der zu verwendenden EUDAS-
+Datei erfragt. Diese Datei wird dann geöffnet. Vorher geöffnete und
+veränderte Dateien werden nach Anfrage gesichert.
+ Als nächstes kann für die folgende Übersicht eine Feldauswahl
+eingestellt werden, damit die relevanten Felder auch auf dem Bild­
+schirm erscheinen.
+ Danach beginnt ein wiederholbarer Prozeß mit der Eingabe
+eines Suchmusters nach Anfrage. Die ausgewählten Sätze werden
+dann in einer Übersicht gezeigt. In der Übersicht können auch Sätze
+markiert werden.
+ Nach Verlassen der Übersicht bestehen drei Möglichkeiten zum
+Drucken: Falls mindestens ein Satz markiert wurde, können nach
+Anfrage alle markierten Sätze gedruckt werden. Wurde kein Satz
+markiert, können nach Anfrage alle ausgewählten (bzw. vorher
+angezeigten) Sätze gedruckt werden. Wird diese Frage jeweils ver­
+neint, kann nach Anfrage auch der aktuelle Satz als einziger ge­
+druckt werden.
+ Wurde eine der Fragen bejaht, wird der Name des Druckmusters
+erfragt, das bereits existieren muß. Das Ergebnis der Druckausgabe
+wird dann an der aktuellen Cursorposition in der editierten Datei
+eingefügt.
+ Der Prozeß kann danach mit einem anderen Suchmuster wieder­
+holt werden. Dabei werden alle Markierungen wieder gelöscht.
+
diff --git a/app/eudas/4.3/doc/eudas.ref.3 b/app/eudas/4.3/doc/eudas.ref.3
new file mode 100644
index 0000000..9b58b9b
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.3
@@ -0,0 +1,270 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (31)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+3 Das virtuelle Dateimodell
+
+
+
+3.1 Dateistruktur
+
+Eine EUDAS-Datei hat folgende Bestandteile:
+
+- 0 bis 5000 #on("i")#Sätze#off("i")#, von 1 an durchnumeriert. Jeder Satz enthält für
+ jedes Feld einen variabel langen Text als Inhalt, der standard­
+ mäßig leer ist.
+
+- 1 bis 256 #on("i")#Felder#off("i")#, die die Sätze aufteilen. Jedes Feld besitzt einen
+ #on("i")#Feldnamen#off("i")# als Text und einen von vier #on("i")#Feldtypen#off("i")# (TEXT, ZAHL,
+ DATUM oder DIN). Der Feldname dient zur Identifizierung des
+ Feldes, der Feldtyp spezifiziert die Art der Behandlung beim Ver­
+ gleichen von Feldern.
+
+- Drei Zusatztexte. Der erste nimmt die #on("i")#Prüfbedingungen#off("i")# auf, der
+ zweite speichert das Datum der letzten Veränderung und der
+ dritte kann allgemeine #on("i")#Notizen#off("i")# aufnehmen.
+
+- Einen #on("i")#Satzzeiger#off("i")#, der einen bestimmten Satz als aktuellen Satz
+ auszeichnet. Der Satzzeiger kann durch Positionierungsoperatio­
+ nen verändert werden.
+
+- Eine #on("i")#Sortierreihenfolge#off("i")#, die angibt, in welcher Feldreihenfolge die
+ Datei zuletzt sortiert worden ist. Dazu für jeden Satz eine Anga­
+ be, ob er entsprechend dieser Reihenfolge an der richtigen Posi­
+ tion steht.
+
+- Eine interne Datenstruktur, die beschleunigten Zugriff auf eine
+ Satz nach dem Inhalt des ersten Feldes ermöglicht. Diese Struktur
+ steht ganz unter Kontrolle von EUDAS und kann nicht von außen
+ manipuliert werden.
+
+
+3.2 Öffnen
+
+#on("b")#Virtuelle Datei#off("b")# Die meisten EUDAS-Funktionen arbeiten
+nicht
+direkt auf einer EUDAS-Datei, sondern auf der sogenannten #on("i")#vir­
+tuellen Datei#off("i")#, die aus mehreren realen Dateien bestehen kann. Die
+virtuelle Datei erscheint nach außen hin wie eine einzelne
+EUDAS-Datei. Die Operationen auf der virtuellen Datei werden je­
+weils auf die einzelnen Bestandteile abgebildet.
+ Damit eine EUDAS-Datei Bestandteil der virtuellen Datei wird,
+muß sie geöffnet werden. Dieses Öffnen kann auf dreierlei Art und
+Weise geschehen.
+ Das Öffnen der ersten Datei stellt eine neue virtuelle Datei
+her. Die Feldnamen und Feldeigenschaften der ersten Datei werden
+in der virtuellen Datei übernommen. Dies ist der Normalfall, in dem
+sich die virtuelle Datei noch nicht von der zugrundeliegenden Datei
+unterscheidet.
+ Bei diesem ersten Öffnen muß angegeben werden, ob die vir­
+tuelle Datei verändert werden soll oder nicht. Falls die virtuelle
+Datei verändert werden soll, wird eine Arbeitskopie aller geöffneten
+Dateien angelegt. Die Ursprungsdateien können erst am Ende der
+Arbeit mit den geänderten Kopien überschrieben werden.
+
+#on("b")#Weitere Dateien#off("b")# Weitere Dateien können gekettet oder
+gekoppelt
+werden. Gekettete Dateien werden logisch an die zuerst geöffnete
+Datei angehängt. Ihre Dateistruktur wird ignoriert, sollte aber mit
+der ersten Datei übereinstimmen. Die Folge aneinander geketteter
+EUDAS-Dateien wird als #on("i")#Hauptdatei#off("i")# bezeichnet.
+ In der Hauptdatei werden die Sätze von 1 an durchnumeriert;
+die Aufeinanderfolge der Sätze wird durch die Anordnung der Sätze
+in den einzelnen Dateien und die Reihenfolge bestimmt, in der die
+Dateien gekettet wurden.
+ Die gekoppelten Dateien werden der Hauptdatei untergeordnet.
+Die in ihnen enthaltenen Informationen werden nur angezeigt, wenn
+sie mit einem Satzinhalt der Hauptdatei korrespondieren. Der
+Mechanismus dieser Satzkopplung wird im nächsten Abschnitt
+beschrieben.
+
+
+#free (8.0)#
+
+#center#Abb. 3-1 Schematischer Aufbau der virtuellen Datei
+
+
+
+3.3 Koppeln
+
+ Die Sätze der gekoppelten Dateien werden in Relation zu den
+Sätzen in der Hauptdatei gesetzt. Zu jedem Satz in der Hauptdatei
+kann eine Anzahl von Sätzen aus jeder Koppeldatei gehören. Diese
+Sätze müssen in den Inhalten der sogenannten #on("i")#Koppelfelder#off("i")# über­
+einstimmen.
+ Welche Felder Koppelfelder sind, richtet sich nach den Feld­
+namen. Die ersten Felder der Koppeldatei, die auch in der Haupt­
+datei vorhanden sind, werden als Koppelfelder betrachtet. Die Kop­
+pelfelder müssen also bei der Koppeldatei am Anfang stehen - in
+der Hauptdatei kann jedes beliebige Feld ein Koppelfeld sein.
+ Wenn eine Datei zur virtuellen Datei gekoppelt wird, werden
+alle Felder, die nicht Koppelfelder sind, in die virtuelle Datei auf­
+genommen. Die Koppelfelder brauchen nicht noch mal wiederholt zu
+werden, da ihr Inhalt ja immer identisch ist.
+ Zu beachten ist, daß bei diesem Verfahren auch Namenskonflik­
+te entstehen können, wenn nach den Koppelfeldern später wieder
+ein Feldname vorkommt, der auch in der Hauptdatei vorhanden ist.
+In den Fällen, in denen Felder durch ihren Namen angesprochen
+werden, ist dann das zweite Feld gleichen Namens nicht verfügbar.
+
+
+#free (7.0)#
+
+#center#Abb. 3-2 Schema des Koppelvorgangs
+
+
+#on("b")#Kombinationen#off("b")# Beim Vorwärtsgehen in der virtuellen Datei
+werden
+zu jedem Satz der Hauptdatei nacheinander alle möglichen Kombina­
+tionen der zugehörigen Koppelsätze angezeigt, denn es können
+mehrere passende Koppelsätze vorhanden sein. Die Satznummer
+bleibt dabei gleich; die einzelnen Kombinationen werden von 1 an
+durchgezählt. Beim Rückwärtsgehen wird aus technischen Gründen
+immer nur die erste Kombination angezeigt.
+ Existiert zu einem Satz kein passender Koppelsatz, so bleiben
+die entsprechenden Felder leer. Die Koppelsätze müssen in der
+ganzen Koppeldatei gesucht werden, daher ist bei großen Koppel­
+dateien die Suchzeit zu berücksichtigen.
+
+
+3.4 Änderungen
+
+In der virtuellen Datei kann auch geändert werden. Dabei ist jedoch
+Vorsicht angebracht. Es muß festgelegt sein, wie Änderungen der
+einzelnen Felder auf die beteiligten Dateien abgebildet werden.
+ Falls die virtuelle Datei keine Koppeldateien enthält, werden
+Änderungen am aktuellen Satz an der zugehörigen Datei durchge­
+führt. Das Löschen eines Satzes wird auch direkt in der Datei
+durchgeführt. Ein neuer Satz wird immer in der Datei eingefügt, zu
+der der aktuelle Satz gehört - am Ende der ersten Datei kann also
+kein Satz eingefügt werden, wenn noch weitere Dateien folgen.
+ Enthält die virtuelle Datei Koppeldateien, werden die Änderun­
+gen in der Hauptdatei wie oben beschrieben durchgeführt. Änderun­
+gen, die Felder in den Koppeldateien betreffen, werden nach folgen­
+der Entscheidungstabelle behandelt:
+
+ 1 2 3 4 5
+ ---------------
+ Koppelfelder verändert N J J N N
+ Übrige Felder verändert N - - J J
+ Übrige Felder leer - J N - N
+ Vorher Koppelsatz vorhanden - - - J N
+ ---------------
+ Neuen Satz einfügen x x
+ Koppelsatz ändern x
+ Kopplung aktualisieren x
+
+Fall 1: Es wurden keine Veränderungen an den Feldern des Kop­
+ pelsatzes vorgenommen, daher ist auch keine Aktion not­
+ wendig.
+
+Fall 2: Eines der Koppelfelder wurde verändert. Die Änderung wird
+ in der Hauptdatei durchgeführt. Die übrigen Felder des
+ Koppelsatzes sind jedoch als leer angegeben. In diesem Fall
+ wird der Koppelsatz nicht verändert, sondern nur eine
+ neue Korrespondenz gesucht.
+
+Fall 3: Eines der Koppelfelder wurde verändert, gleichzeitig ent­
+ halten aber auch die anderen Felder Informationen. In
+ diesem Fall wird ein neuer Satz in der Koppeldatei ange­
+ fügt, der die neuen Inhalte enthält. So wird vermieden,
+ daß an anderer Stelle plötzlich kein passender Koppelsatz
+ mehr vorhanden ist.
+
+Fall 4: Nur Felder der Koppeldatei, die nicht Koppelfelder sind,
+ wurden verändert, außerdem existierte ein korrespondie­
+ render Satz in der Koppeldatei. In diesem Fall werden die
+ Informationen im Koppelsatz abgeändert.
+
+Fall 5: Wie 4, nur war vorher noch kein Koppelsatz vorhanden
+ (Felder waren leer). In diesem Fall muß ein neuer Satz in
+ die Koppeldatei eingefügt werden. Einfügungen in die
+ Koppeldatei geschehen immer am Dateiende.
+
+#on("b")#Einfügen/Löschen#off("b")# Beim Löschen eines Satzes der virtuellen
+Datei
+durch Tragen bleiben die Koppeldateien unverändert. Nach dem
+Einfügen eines neuen Satzes wird nur dann ein Satz in einer Kop­
+peldatei eingefügt, wenn dieser Satz nicht nur Koppelfelder enthal­
+ten würde. Falls beim Einfügen nur die Koppelfelder angegeben
+werden, wird ein korrespondierender Satz in der Koppeldatei ge­
+sucht. Vergleichen Sie hierzu die Regeln beim Ändern.
+
+
+3.5 Sichern
+
+Falls Änderungen der virtuellen Datei erlaubt sind, arbeitet EUDAS
+immer auf Sicherheitskopien der beteiligten Dateien. Eine Datei, die
+wirklich verändert wurde, muß vor dem Aufbau einer neuen virtuel­
+len Datei gesichert oder explizit gelöscht werden.
+ Für jede einzelne Datei kann festgelegt werden, ob sie gesi­
+chert werden soll oder nicht. Als Hilfe wird dazu für jede Datei
+angegeben, ob sie tatsächlich verändert wurde oder nicht. Die
+Arbeitskopie kann beim Sichern die alte Version überschreiben oder
+unter einem neuen Namen gesichert werden.
+ Am Ende des Sicherns können die Arbeitskopien gelöscht wer­
+den. Anderenfalls werden die Dateien so betrachtet, als ob sie di­
+rekt nach dem Sichern wieder geöffnet worden wären und stehen
+weiterhin zur Verfügung.
+ Falls alle Dateien entweder gesichert oder nicht verändert
+sind, werden beim nächsten Öffnen einer neuen virtuellen Datei die
+vorherigen Arbeitskopien gelöscht.
+
+
+3.6 Umschalten auf Koppeldatei
+
+Falls eine Datei gekoppelt ist, kann man die virtuelle Datei auf
+diese Koppeldatei umschalten. Dadurch verhält sich die virtuelle
+Datei so, als ob nur diese Koppeldatei geöffnet wäre. Die Einstel­
+lungen der Hauptdatei wie Markierungen und Suchbedingung bleiben
+jedoch erhalten und stehen beim Zurückschalten wieder zur Verfü­
+gung.
+ Die Satzposition der Koppeldatei beim letzten Umschalten wird
+ebenfalls gespeichert und wird beim nächsten Umschalten wieder
+eingenommen, unabhängig von der tatsächlichen Satzposition der
+Koppeldatei zu diesem Zeitpunkt.
+ Für die Koppeldatei können eigene Markierungen vergeben
+werden, die auch nach dem Umschalten gespeichert bleiben. Auch
+ein Suchmuster kann für die Koppeldatei eingestellt werden, dies
+geht jedoch beim Zurückschalten wieder verloren. Die eingestellte
+Feldauswahl für die Bildschirmanzeige geht leider bei jedem Um­
+schalten verloren.
+ Das Umschalten kann entweder im Menü 'Einzelsatz' oder beim
+Einfügen und Ändern durch ESC 'K' bewirkt werden, ebenso das
+Zurückschalten nur im Menü 'Einzelsatz'. Beim Umschalten aus Ein­
+fügen oder Ändern erfolgt beim Zurückschalten eine Rückkehr in
+diesen Zustand. Dabei können nach Anfrage die Koppelfelder des
+aktuellen Satzes der Koppeldatei in die Hauptdatei übernommen und
+damit eine bestimmte Kopplung bewirkt werden.
+
+
+3.7 Mehrbenutzerbetrieb
+
+Durch Einstellen einer Managertask für den Mehrbenutzerbetrieb
+können auch Dateien dieser Managertask beim Öffnen direkt ver­
+wendet werden. Die Datei wird automatisch aus der Managertask
+kopiert und geöffnet.
+ Falls die Datei geändert werden soll, wird eine Sperre in der
+Managertask gesetzt, die verhindert, daß auch ein anderer Benutzer
+diese Datei zum Ändern öffnet. Beim Sichern erfolgt dann ein Rück­
+schreiben der Arbeitskopie. Die Sperre wird jedoch erst dann zu­
+rückgesetzt, wenn alle Arbeitskopien gelöscht werden, da erst dann
+keine Möglichkeit des Rückschreibens mehr besteht.
+ Alle Dateien der Managertask werden bei der Dateiauswahl zum
+Öffnen mit angeboten. Falls eine Datei in beiden Tasks existiert,
+wird die Datei in der Managertask genommen, die Datei der eigenen
+Task jedoch erst nach Anfrage überschrieben.
+ Damit die Sperre funktionieren kann, muß EUDAS in der Mana­
+gertask zur Verfügung stehen und die Task muß #on("i")#nach#off("i")# dem Insertie­
+ren von EUDAS als 'global manager' definiert werden (nicht 'free
+global manager' verwenden).
+
diff --git a/app/eudas/4.3/doc/eudas.ref.4 b/app/eudas/4.3/doc/eudas.ref.4
new file mode 100644
index 0000000..cfd6daf
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.4
@@ -0,0 +1,441 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (39)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+4 Ansehen und Bearbeiten
+
+
+
+4.1 Anzeige
+
+Die Anzeige und Eingabe von Einzelsätzen sowie die Eingabe von
+Suchmustern geschieht in einem Standardformular in einem recht­
+eckigen Fenster. Dieses Fenster befindet sich in der rechten Bild­
+schirmhälfte.
+ Das Formular besteht aus vier Teilen: der Überschrift, den
+Feldnamen, den Feldinhalten und der Abschlußzeile (s. Abbildung).
+
+ Überschrift
+#free (0.3)#
+ Satz 33 ..SUCH+..MARK-... datei ............... Feld 1
+ Feld 1
+ Feld 2
+ Feld 3 Feldinhalte
+
+ Feld 4
+ ..............................................................
+#free (0.3)#
+ Feldnamen Abschlußzeile
+
+
+
+#on("b")#Überschrift#off("b")# Die Überschrift zeigt folgende Informationen
+an:
+
+ Satz n[-m]
+ Die Satznummer des aktuellen Satzes, bei gekoppelten Dateien
+ auch die Satzkombination.
+
+ SUCH+/-
+ Zeigt an, ob der aktuelle Satz die eingestellte Suchbedingung
+ erfüllt oder nicht (wird während Eintragungen nicht angezeigt).
+ Wenn keine Suchbedingung eingestellt ist, erscheint diese An­
+ zeige nicht.
+
+ MARK+/-
+ Zeigt an, ob der aktuelle Satz markiert ist oder nicht (Wird
+ während Eintragungen nicht angezeigt). Wenn kein Satz mar­
+ kiert ist, erscheint diese Anzeige nicht.
+
+ ENDE
+ Wird hinter dem letzten Satz der Datei als Kennzeichnung des
+ Endesatzes ausgegeben.
+
+ 'Dateiname'
+ Gibt den Namen der ersten geöffneten Datei an.
+
+ <KOPPPEL>
+ Erscheint statt des Dateinamens, wenn auf eine Koppeldatei
+ umgeschaltet wurde.
+
+ Feld n/Zeile n
+ Zeilennummer des obersten angezeigten Feldes (bei Anzeige)
+ bzw. der aktuellen Cursorzeile (während Eintragungen).
+
+#on("b")#Feldteil#off("b")# Die Feldnamen sind zur Unterscheidung von den
+Feld­
+inhalten invers dargestellt. Die Breite der Feldnamen richtet sich
+nach der Länge des längsten Feldnamens. Ist dieser zu lang, um
+noch eine ordentliche Anzeige zu ermöglichen, wird bei einer be­
+stimmten Länge der Rest des Namens abgeschnitten.
+ Zwischen dem Feldnamen an der linken Seite und dem dane­
+benstehenden Feldinhalt besteht immer eine Korrespondenz, d.h. der
+Inhalt eines Feldes wird direkt neben dem Namen dargestellt. In der
+Regel wird pro Feld eine Bildschirmzeile reserviert. Kann der Feld­
+inhalt jedoch nicht mehr in einer Zeile untergebracht werden, wer­
+den weitere Zeilen zur Darstellung dieses Feldes herangezogen. In
+diesen Zeilen steht statt des Feldnamens nur ein markierter Leer­
+raum.
+ Alle folgenden Zeilen ohne Namen gehören zu dem gleichen
+Feld. Der Inhalt wird auf diese Zeilen umbrochen, d.h. wenn ein
+Wort nicht mehr auf die Zeile paßt, wird es komplett in die nächste
+Zeile geschrieben (wie beim Editor). Wörter werden nur dann zer­
+schnitten, wenn sie nicht als Ganzes auf eine Zeile passen. Wörter
+werden untereinander durch Leerzeichen getrennt.
+ Aus Effizienzgründen werden in bestimmten Fällen auch mehr
+Folgezeilen als nötig angezeigt. Hat nämlich ein neuer Satz einen
+kürzeren Inhalt als der vorige, so werden die Feldnamen nur dann
+wieder zusammengerückt, wenn das ganze Bild neugeschrieben wer­
+den muß. Anderenfalls werden nur die Feldinhalte aktualisiert.
+ Die Bildausgabe wird unterbrochen, wenn 'w' oder 'z' gedrückt
+wurde, da dann die Inhalte des aktuellen Satzes nicht mehr inter­
+essieren.
+
+#on("b")#Rollen#off("b")# Da nicht alle Felder auf den Bildschirm passen
+müssen, kann das Bild gerollt werden.
+ Mit ESC UNTEN wird um eine Seite nach unten geblättert, mit
+ESC OBEN wieder zurück. Hinter dem letzten Feld erscheint ein
+markierter Balken als Abschlußzeile. Weiter als bis zum Erscheinen
+dieses Balken kann nicht gerollt werden. Mit ESC '1' wird ganz an
+den Anfang gerollt, mit ESC '9' ganz ans Ende.
+ Bei Feldern, die sich über mehrere Zeilen erstrecken, kann es
+passieren, daß nach dem Rollen die erste Bildschirmzeile nicht die
+erste Zeile eines Feldes ist, also der erste Teil eines Feldes nicht
+dargestellt wird. Trotzdem wird in diesem Fall in der ersten Anzei­
+gezeile der Feldname angezeigt.
+
+#on("b")#Feldauswahl#off("b")# Man kann auswählen, welche Felder in welcher
+Rei­
+henfolge angezeigt werden sollen. Dies dient der besseren Übersicht.
+Von der Anzeige werden nur die ausgewählten Felder behandelt, die
+anderen Felder bleiben leer, werden nicht verändert oder berück­
+sichtigt. Die Anzeigeauswahl ändert jedoch nichts an der Datei­
+struktur.
+ Die Feldauswahl ist keine permanente Eigenschaft einer
+EUDAS-Datei. Sie geht daher bei einem neuen Öffnen oder beim
+Umschalten auf eine Koppeldatei verloren.
+
+#on("b")#Übersicht#off("b")# Im Gegensatz zur normalen Anzeige, bei der ein
+Satz pro
+Bildschirm dargestellt wird, können in der Übersicht mehrere Sätze
+gleichzeitig überschaut werden. Dabei wird jeder Satz in einer Zeile
+untergebracht. Die Auswahl der Felder, die in der Übersicht er­
+scheinen sollen, wird vor Beginn der Funktion erfragt.
+ In jeder Zeile steht die Nummer des jeweiligen Satzes, eine
+Anzeige, ob er markiert ist (+) oder nicht (-) und die Feldinhalte
+in der gewählten Reihenfolge und Auswahl, jeweils duch Komma und
+Leerzeichen getrennt. Inhalte, die nicht mehr auf die Zeile passen,
+werden abgeschnitten.
+ Es werden nur durch das Suchmuster ausgewählte Sätze ange­
+zeigt. Ist der aktuelle Satz nicht ausgewählt, so erscheint an seiner
+Stelle '<< >>' als Hinweis. In der Überschrift sind die Feldnamen
+angegeben - durch Komma getrennt, so viele wie hinpassen.
+ Die Satznummer des aktuellen Satzes ist jeweils markiert. In
+der Übersicht kann geblättert werden. HOP OBEN und HOP UNTEN,
+OBEN und UNTEN wirken wie im Editor.
+ Durch '+' oder '-' kann auch die Markierung des aktuellen
+Satzes verändert werden.
+
+
+4.2 Satzauswahl
+
+Die Auswahl der Sätze, die gedruckt oder mit den Funktionen aus
+Abschnitt 4.4 bearbeitet werden sollen, kann entweder durch eine
+Suchbedingung oder durch Markierung vorgenommen werden. Wenn
+mindestens ein Satz markiert ist, werden von den Bearbeitungs­
+funktionen nur die markierten Sätze behandelt. Anderenfalls wird
+die eingestellte Suchbedingung beachtet.
+ Die Bildschirmanzeige richtet sich immer nur nach der einge­
+stellten Suchbedingung.
+
+#on("b")#Suchmuster#off("b")# Ein Suchmuster gibt für jedes Feld bestimmte
+Bedin­
+gungen an. Es wird im Standardformular mit Hilfe des Satzeditors
+eingegeben. Dabei stehen neben jedem Feld die Bedingungen für
+dieses Feld in einer intuitiv verständlichen Form. Folgende Einzel­
+bedingungen sind möglich:
+
+ Muster Inhalt ist gleich Muster
+ Muster.. Inhalt ist größergleich Muster
+ ..Muster Inhalt ist kleiner Muster
+ Muster1..Muster2 Inhalt liegt dazwischen
+ *Muster Inhalt endet mit Muster
+ Muster* Inhalt beginnt mit Muster
+ *Muster* Inhalt enthält Muster
+ * Inhalt ist nicht leer
+ ++ Satz markiert (unabhängig vom Feldinhalt)
+
+Die ersten vier Einzelbedingungen beachten auch den Typ eines
+Feldes (wie er bei der Feldstruktur eingegeben werden kann und
+beim Sortieren beachtet wird). So werden z.B. bei der Gleichheit von
+Zahlen alle nicht-numerischen Zeichen ignoriert (s. Sortieren).
+ Die drei Bedingungen mit Stern können auch miteinander ver­
+knüpft werden. Die Einzelbedingungen müssen dann alle zutreffen,
+damit der Satz ausgewählt wird. So bedeutet zum Beispiel das
+Muster 'M1*M2*M3*M4', daß das Feld mit 'M1' beginnen und mit 'M4'
+enden muß. Außerdem muß es 'M2' und 'M3' enthalten, jedoch nicht
+unbedingt in der angegebenen Reihenfolge.
+ Wird der Mustertext durch '&' und einen gültigen Feldnamen der
+aktuellen Datei ersetzt, findet der Vergleich nicht mit einem
+Mustertext, sondern mit dem Inhalt des angegebenen Feldes statt.
+Als Feldtyp für den Vergleich wird in diesem Fall der Typ des Fel­
+des genommen, in dem der Vergleich steht.
+
+#on("b")#Verknüpfung#off("b")# Einzelbedingungen können durch Voranstellen
+von
+'--' verneint werden. Einzelbedingungen für verschiedene Felder
+werden mit UND verknüpft.
+ Es gibt zwei Arten der ODER-Verknüpfung: die lokale und die
+globale. Die lokale ODER-Verknüpfung wird durch ein Komma zwi­
+schen Einzelbedingungen realisiert. Sie hat eine höhere Priorität als
+das UND zwischen verschiedenen Feldern. So hat folgendes Such­
+muster
+
+
+ Feld1 Bed1,Bed2
+ Feld2 Bed3
+
+
+die Bedeutung
+
+
+ ( Bed1 (Feld1) ODER Bed2 (Feld2) ) UND Bed3 (Feld3)
+
+
+Die globale ODER-Verknüpfung wird durch ein Semikolon repräsen­
+tiert. Alle Einzelbedingungen nach dem n-ten Semikolon aller Zeilen
+werden zu einer Alternative zusammengefaßt. Damit hat das Such­
+muster
+
+
+ Feld1 Bed1;Bed2
+ Feld2 Bed3
+
+
+die Bedeutung
+
+
+ ( Bed1 (Feld1) UND Bed3 (Feld2) ) ODER Bed2 (Feld1)
+
+
+Damit ergibt sich für die Priorität der einzelnen Konstruktionen
+folgende Reihenfolge:
+
+ höchste Einzelbedingung
+ Verkettung von Einzelbedingungen (UND)
+ Verneinung
+ lokales ODER
+ UND zwischen Feldern
+ niedrigste globales ODER
+
+#on("b")#Optimierung#off("b")# Wenn für das erste Feld einer Datei eine
+Gleich-
+Bedingung angegeben wurde und keine globale Alternative vorhan­
+den ist, kann der Suchvorgang wegen der Dateistruktur optimiert
+werden, indem nur Sätze untersucht werden müssen, die im ersten
+Feld den gesuchten Text enthalten.
+
+#on("b")#Reservierte Zeichen#off("b")# Im Rahmen der Analyse einer
+Musterzeile
+wirken folgende Zeichenfolgen als unbeschränkt reservierte Zeichen:
+
+
+ , ; .. *
+
+
+Sie dürfen daher in keinem Mustertext oder Feldnamen vorkommen,
+da sie als Separator wirken. Die beiden folgenden Zeichenfolgen
+werden nur zu Anfang eines durch die vorstehenden Separatoren
+gebildeten Abschnitts erkannt:
+
+
+ -- & ++
+
+
+Sie dürfen daher prinzipiell an weiterer Stelle vorkommen, ohne als
+Sonderzeichen erkannt zu werden. Alle anderen Zeichen in der Zeile
+werden dem Mustertext bzw. Feldnamen ohne weitere Interpretation
+zugeordnet.
+
+
+4.3 Sortieren und Reorganisieren
+
+Eine EUDAS-Datei kann in einer beliebigen Feldreihenfolge sortiert
+werden. Mit dieser Angabe kann man bestimmen, welche Felder beim
+Vergleich zweier Sätze berücksichtigt werden sollen und in welcher
+Reihenfolge.
+ Die Sortierreihenfolge wird in der Datei gespeichert und wird
+anschließend immer wieder verwendet, wenn keine anderen Angaben
+gemacht wurden.
+ Der Sortierzustand einer Datei wird ebenfalls gespeichert. Wenn
+nur wenige Sätze seit der letzten Sortierung verändert wurden,
+müssen auch nur diese Sätze einsortiert werden.
+
+#on("b")#Feldtypen#off("b")# Um eine korrekte Sortierung auch von Zahlen oder
+Daten sicherzustellen, wird jedem Feld einer EUDAS-Datei ein Feld­
+typ zugeordnet, der beim Sortieren (und auch beim Suchen) berück­
+sichtigt wird.
+ Es gibt folgende Feldtypen (als Standard wird der Typ TEXT
+verwendet):
+
+ TEXT Vergleich von Texten nach dem EUMEL-Code der einzel­
+ nen Zeichen. Dies ist Standard und sorgt für schnellst­
+ möglichen Vergleich. Die weiteren Typen brauchen erheb­
+ lich mehr Zeit.
+
+ DIN Vergleich nach DIN 5007 (s. EUMEL-Benutzerhandbuch).
+ Umlaute werden korrekt eingeordnet, Groß- und Klein­
+ buchstaben werden gleichbehandelt, Sonderzeichen werden
+ ignoriert.
+
+ ZAHL Der Wert einer Zahl wird verglichen. Außer den Ziffern,
+ dem Dezimalkomma und dem Minuszeichen vor der ersten
+ Ziffer werden alle anderen Zeichen ignoriert. Das Dezi­
+ malkomma ist standardmäßig auf ',' eingestellt, kann aber
+ verändert werden (s. Abschnitt 6.5). Die nicht ignorierten
+ Zeichen werden in eine REAL-Zahl umgewandelt und dann
+ verglichen.
+
+ DATUM Es werden Daten der Form 'tt.mm.jj' verglichen. In diesem
+ Fall werden Tag und Jahr vertauscht und dann vergli­
+ chen. Texte mit einer anderen Länge als 8 werden alle
+ als gleich betrachtet.
+
+#on("b")#Reorganisieren#off("b")# Wenn viele Änderungen an einer EUDAS-Datei
+vorgenommen worden sind, steigt ihr Platzbedarf durch viele Text­
+leichen an. In diesem Fall empfiehlt es sich, die Datei zu reorgani­
+sieren. Auch wenn beim Sortieren viele Sätze vertauscht wurden,
+sollte die Datei reorganisiert werden, da beim Sortieren die physi­
+kalische Reihenfolge der Sätze nicht verändert wird. In diesem Fall
+ergibt sich nach dem Reorganisieren ein Geschwindigkeitsvorteil.
+
+
+4.4 Bearbeiten
+
+#on("b")#Kopieren#off("b")# Durch Kopieren kann ein Ausschnitt aus der
+virtuellen
+Datei in eine andere EUDAS-Datei kopiert werden. Es werden alle
+ausgewählten Sätze kopiert. Wenn mindestens ein Satz markiert ist,
+werden alle markierten Sätze als ausgewählt betrachtet, ansonsten
+alle, die durch die Suchbedingung angegeben sind. Die kopierten
+Sätze werden am Ende der Zieldatei angefügt.
+ Welche Felder kopiert werden sollen, wird durch das Kopier­
+muster angegeben. Hierbei können auch mehrere Felder zu einem
+verschmolzen werden. Allgemein ergeben sich die Felder der Ziel­
+datei aus einem beliebigen ELAN-Ausdruck.
+ Das Kopiermuster ist ein ELAN-Programm und enthält im we­
+sentlichen Ausdrücke der Form
+
+
+ "Feldname" K Ausdruck ;
+
+
+Durch diese Anweisung wird der Ausdruck in das Feld der Zieldatei
+mit dem angegebenen Namen kopiert. Existiert dieses Feld in der
+Zieldatei noch nicht, so wird es als letztes angefügt. Falls die
+Zieldatei noch nicht existiert, wird sie eingerichtet. In diesem Fall
+bestimmt also die Reihenfolge der 'K'-Ausdrücke die Reihenfolge der
+Feldnamen in der Zieldatei.
+ Da die Reihenfolge der 'K'-Ausdrücke wichtig ist, dürfen diese
+nicht in einer IF-Anweisung stehen, sondern müssen für jeden Satz
+komplett in der gleichen Reihenfolge ausgeführt werden.
+
+#on("b")#Standard-Kopiermuster#off("b")# Vor dem Kopieren wird ein Standard-
+Kopiermuster zum Editieren angeboten, das sich nach der Zieldatei
+richtet. Existiert die Zieldatei noch nicht, wird das Muster so kon­
+struiert, daß alle Felder der virtuellen Datei unverändert kopiert
+werden. Wollen Sie einige Felder nicht kopieren, brauchen Sie nur
+die entsprechenden Zeilen zu löschen; wollen Sie die Felder in eine
+andere Reihenfolge bringen, müssen Sie die Zeilen umordnen.
+ Existiert die Zieldatei bereits, gibt das Standard-Kopiermuster
+an, daß alle Felder der Zieldatei einen Wert erhalten. Ist ein Feld
+der Zieldatei in der virtuellen Datei enthalten, so wird dieses ko­
+piert, ansonsten erhält das Feld einen leeren Inhalt. Sie können in
+diesem Fall weitere Felder angeben oder für die leeren Felder Aus­
+drücke formulieren.
+
+#on("b")#Tragen#off("b")# Durch Tragen werden alle ausgewählten Sätze der
+virtuel­
+len Datei in eine andere Datei transportiert. Sie sind in der vir­
+tuellen Datei dann nicht mehr vorhanden. Damit bei diesem Vorgang
+keine Informationen verlorengehen können, muß die Zieldatei so
+viele Felder haben wie die virtuelle Datei. Normalerweise sollte sie
+in der Feldstruktur mit der virtuellen Datei übereinstimmen.
+ Die getragenen Sätze werden jeweils am Ende der Datei ange­
+fügt.
+ Beim Tragen können zusätzlich noch Konsistenzbedingungen
+überprüft werden. Die Prüfbedingungen sind in der Zieldatei gespei­
+chert und können beim Ändern der Feldstruktur angegeben werden.
+ Die Prüfbedingung ist ein ELAN-Programm, das vor dem Tragen
+des jeweiligen Satzes ausgeführt wird. Durch spezielle Testprozedu­
+ren kann das Tragen des Satzes verhindert werden, wenn diese
+Prozeduren ein negatives Ergebnis liefern. Gleichzeitig wird eine
+Meldung in eine Protokolldatei geschrieben, die dann zur Identifi­
+zierung der fehlerhaften Sätze dienen kann.
+ Folgende Prüfprozeduren stehen zur Verfügung (siehe auch
+Abschnitt 8.3):
+
+
+ pruefe ("Feldname", Bedingung)
+
+ Hiermit kann eine beliebige Bedingung (BOOL-Ausdruck in
+ ELAN) überprüft werden.
+
+
+ wertemenge ("Feldname", "Wert1,Wert2,...,Wertn")
+
+ Das Feld muß einen in der angegebenen Liste enthaltenen
+ Werte annehmen.
+
+
+ feldmaske ("Feldname", "Maske")
+
+ Das Feld wird auf Übereinstimmung mit der Maske geprüft.
+ Fünf spezielle Zeichen in der Maske können dabei auf
+ mehrere Zeichen zutreffen:
+ '9' alle Ziffern
+ 'a' alle Kleinbuchstaben, Umlaute, 'ß'
+ 'A' alle Großbuchstaben, Umlaute
+ 'X' alle Zeichen
+ '*' Folge von beliebigen Zeichen
+ Der Stern sollte sparsam angewendet werden, da er verar­
+ beitungsaufwendig ist.
+
+
+ eindeutige felder (n)
+
+ Die Zahl 'n' gibt an, die wieviel ersten Felder der Zieldatei
+ eindeutig sein müssen. Stimmt der zu tragende Satz mit
+ einem Satz der Zieldatei in diesen Feldern überein, wird
+ eine Fehlermeldung erzeugt.
+
+Es können auch einzelne Sätze manuell getragen werden. In diesem
+Fall wird die Prüfbedingung nicht getestet. Ebenso kann der Satz
+wieder zurückgeholt und in der aktuellen Datei eingefügt werden.
+
+#on("b")#Nach Vorschrift ändern#off("b")# Die ausgewählten Sätze der
+virtuellen
+Datei können automatisch nach einer Verarbeitungsvorchrift geän­
+dert werden. Die Verarbeitungsvorschrift ist ein ELAN-Programm, in
+dem mit Hilfe des Operators 'V' Änderungen angegeben werden:
+
+
+ "Feldname" V TEXT-Ausdruck ;
+
+
+Das angegebene Feld erhält den Inhalt, der durch den Ausdruck
+angegeben ist. Änderungen an Koppeldateien werden wie im Dialog
+behandelt (s. Abschnitt 3.4).
+
+
+
+
diff --git a/app/eudas/4.3/doc/eudas.ref.5 b/app/eudas/4.3/doc/eudas.ref.5
new file mode 100644
index 0000000..02971ea
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.5
@@ -0,0 +1,432 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (49)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+5 Drucken und Druckmuster
+
+
+
+5.1 Druckmustersyntax
+
+Ein Druckmuster ist eine Beschreibung für die Form, in der die In­
+halte einer EUDAS-Datei ausgedruckt werden sollen. Der syntakti­
+sche Aufbau des Druckmusters ist zeilenorientiert und gehorcht
+folgender Syntax:
+
+ Druckmuster :
+ [ Initialisierungsteil ]
+ [ Vorspann ]
+ [ Wiederholungsteil ]
+ [ Nachspann ]
+
+ Initialisierungsteil :
+ ( Kommandozeile #char (""124"")# Textzeile )*
+ ( GRUPPE-Anweisung #char(""124"")# Textzeile )*
+
+ Vorspann :
+ VORSPANN-Anweisung Abschnitt
+
+ Wiederholungsteil :
+ WIEDERHOLUNG-Anweisung Abschnitt
+
+ Nachspann :
+ NACHSPANN-Anweisung Abschnitt
+
+ Abschnitt :
+ Musterteil
+ [ ABKUERZUNGEN-Anweisung Abkürzungsteil ]
+
+ Musterteil :
+ ( Musterzeile #char(""124"")# Kommandozeile #char(""124"")#
+ MODUS-Anweisung #char (""124"")# MEHR-Anweisung )*
+
+Zur Notation: [] bedeutet optional, ()* beliebig häufige Wiederho­
+lung, #char(""124"")# Alternative und keine Angabe einfache Aneinanderreihung.
+Die verschiedenen Zeilentypen werden weiter unten beschrieben.
+ Zusätzlich gilt die Bedingung, daß von Vorspann, Wiederho­
+lungsteil und Nachspann mindestens einer vorhanden sein muß.
+
+#on("b")#Zeilentypen#off("b")# Im Druckmuster gibt es 6 verschiedene
+Zeilentypen:
+
+#on("i")#Kommandozeilen#off("i")#
+ Eine Kommandozeile beginnt mit '%%' in der ersten und zweiten
+ Spalte. Der Inhalt der Zeile ab Spalte 3 wird dem ELAN-Compi­
+ ler übergeben. Die Bedeutung dieser Zeilen ergibt sich aus dem
+ in 5.4 beschriebenen Übersetzungsmechanismus.
+
+#on("i")#Anweisungen#off("i")#
+ Anweisungen beginnen mit '%' in der ersten Spalte und dienen
+ zur Steuerung des Druckgenerators. Der Name der Anweisung
+ muß in Großbuchstaben und ohne Leerzeichen geschrieben
+ werden. Davor dürfen sich noch Leerzeichen befinden. An­
+ schließend können noch Parameter folgen, die nur durch Leer­
+ zeichen getrennt aneinander gereiht werden. Die Syntax einer
+ Anweisung ähnelt der eines Operators in ELAN.
+
+#on("i")#Textzeilen#off("i")#
+ Textzeilen sind die nicht anderweitig markierten Zeilen im
+ Initialisierungsteil. Sie werden unverändert an den Anfang
+ jeder Druckdatei gestellt.
+
+#on("i")#Musterzeilen#off("i")#
+ Musterzeilen sind nicht besonders gekennzeichnete Zeilen im
+ Musterteil. Sie enthalten Feldmuster und werden nach dem
+ Einsetzen von Inhalten in die Ausgabedatei übernommen. Die
+ Interpretation der Musterzeilen wird in Abschnitt 5.3 beschrie­
+ ben.
+
+#on("i")#Abkürzungszeilen#off("i")#
+ Abkürzungszeilen markieren den Beginn einer Abkürzung im
+ Abkürzungsteil eines Abschnittes. Sie werden durch '&' in der
+ ersten Spalte gekennzeichnet. Darauf folgt ohne Zwischenraum
+ der Name einer Abkürzung (ohne Leerzeichen) und danach
+ durch Leerzeichen getrennt ein Semikolon. Der Name der Ab­
+ kürzung wird bei der Übersetzung durch einen Refinementnamen
+ ersetzt und die Zeile dem ELAN-Compiler übergeben. Der Rest
+ der Zeile kann also den Beginn eines werteliefernden Refine­
+ ments enthalten.
+
+#on("i")#Programmzeilen#off("i")#
+ Programmzeilen sind die nicht durch '&' markierten Zeilen im
+ Abkürzungsteil. Sie werden unverändert an den ELAN-Compiler
+ übergeben. Der erlaubte Inhalt richtet sich nach dem Überset­
+ zungsmechanismus (5.4).
+
+
+5.2 Der Druckvorgang
+
+Der Druckvorgang besteht im wesentlichen darin, daß für alle zu
+bearbeitenden Sätze der Wiederholungsteil einmal interpretiert wird
+und das Ergebnis in eine Ausgabedatei geschrieben wird, die dann
+gedruckt werden kann. Wenn mindestens ein Satz markiert ist, wer­
+den alle markierten Sätze der virtuellen Datei bearbeitet, ansonsten
+alle durch die Suchbedingung erfaßten.
+
+#on("b")#Gruppen#off("b")# Eine #on("i")#Gruppe#off("i")# ist eine Folge von Sätzen, die in einem be­
+stimmten Merkmal übereinstimmen. Durch eine GRUPPE-Anweisung
+der Form
+
+
+ % GRUPPE n Ausdruck
+
+
+werden aufeinanderfolgende Sätze mit gleichem Wert des angegebe­
+nen Ausdrucks gruppiert. Über die Nummer 'n' kann festgestellt
+werden, ob sich das angegebene Merkmal verändert hat. Dies ge­
+schieht mit der Prozedur
+
+
+ BOOL PROC gruppenwechsel (INT CONST gruppennr)
+
+
+Immer wenn zwischen zwei Sätzen ein Gruppenwechsel stattfindet,
+wird beim vorigen Satz der Nachspann und beim folgenden Satz der
+Vorspann einmal interpretiert. Dies führt dazu, daß entsprechende
+Vorspann- bzw. Nachspannzeilen gedruckt werden.
+ Vor dem ersten und nach dem letzten zu bearbeitenden Satz
+wechseln alle Gruppen, d.h. dort wird immer ein Vorspann bzw.
+Nachspann erzeugt.
+ Ist ein zu interpretierender Abschnitt nicht vorhanden, so wird
+an dieser Stelle keine Ausgabe erzeugt. Die Textzeilen des Initali­
+sierungsteils werden auf jeden Fall bei Beginn des Druckvorganges
+in die Ausgabedatei geschrieben. Falls die Ausgabedatei voll ist,
+wird eine neue Datei angefangen und die Zeilen des Initialisie­
+rungsteils erneut an den Anfang gestellt.
+
+
+ Satz- Gruppen- Ausgabe
+ nummer merkmal
+#free (0.1)#
+ Initialisierungsteil
+ -------------------------------------------------
+ 1 x Vorspann
+ WDH-Teil
+ 2 x WDH-Teil
+ Nachspann
+ -------------------------------------------------
+ 3 y Vorspann
+ WDH-Teil
+ 4 y WDH-Teil
+ 5 y WDH-Teil
+ Nachspann
+ -------------------------------------------------
+ ENDE
+
+#center#Abb. 5-1 Ablauf des Druckvorganges mit Gruppen
+
+
+#on("b")#Spaltendruck#off("b")# Normalerweise werden die Ausgaben der
+einzelnen
+Abschnitte hintereinander in der Ausgabedatei plaziert. Durch An­
+gabe einer Nummer als Parameter in der WIEDERHOLUNG-Anweisung
+können auch soviel Spalten wie angegeben nebeneinander gedruckt
+werden. Die Spaltenbreite wird dabei durch das Dateilimit (Komman­
+do 'limit' im Editor) festgelegt. Alternativ kann die Spaltenbreite
+auch als zweiter Parameter durch Leerzeichen getrennt angegeben
+werden.
+ Vorspann und Nachspann werden jedoch auf jeden Fall wieder
+in eine eigene Zeile geschrieben, der Spaltendruck also unterbro­
+chen.
+
+
+5.3 Interpretation von Musterzeilen
+
+Musterzeilen können Feldmuster enthalten, die bei der Interpreta­
+tion durch entsprechende Inhalte ersetzt werden, ehe die Muster­
+zeile in die Ausgabedatei übernommen wird. Der Beginn eines Feld­
+musters wird durch ein Musterzeichen ('&' oder '%') markiert. Wo
+und wie der Inhalt eingesetzt wird, kann durch folgende Variationen
+angegeben werden:
+
+
+ Typ ! Beispiel ! Position ! Länge ! bündig
+ ----+-----------+------------------------------
+ 1 ! &Name ! fest ! variabel ! links
+ 2 ! %Name ! variabel ! variabel ! links
+ 3 ! &Name&&& ! fest ! fest ! links
+ 4 ! %Name%%% ! variabel ! fest ! links
+ 5 ! &&&Name& ! fest ! fest ! rechts
+ 6 ! %%%Name% ! variabel ! fest ! rechts
+
+
+Der in dem Feldmuster angegebene Name muß Name einer Abkür­
+zung in irgendeinem Abkürzungsteil oder eines Feldes sein. Der
+Name darf kein Leerzeichen oder Musterzeichen enthalten. Falls dies
+doch der Fall ist, muß der Name in spitze Klammern eingeschlossen
+werden.
+ Bei fester Länge wird bei zu kurzem Inhalt mit Leerzeichen
+aufgefüllt, bei zu langem Inhalt abgeschnitten. Bei linksbündigem
+Einsetzen geschieht dies an der rechten, sonst an der linken Seite.
+ Feldmuster variabler Länge können je nach Inhalt dazu führen,
+daß der folgende Teil der Musterzeile verschoben wird. Für diesen
+Einsetzprozeß gelten die folgenden Regeln:
+
+#on("b")#Position#off("b")# Feldmuster fester Position (mit '&' beginnend)
+werden
+immer in der Position eingesetzt, in der sie stehen. Feldmuster
+variabler Position (mit '%' beginnen) können nach rechts verschoben
+werden, wenn vorherige Inhalte länger als ihre Muster sind, und
+nach links, wenn Modus 1 oder 3 eingestellt ist und vorherige In­
+halte kürzer sind.
+
+#on("b")#Länge#off("b")# Feldmuster variabler Länge erhalten auf jeden Fall
+den
+Platz, der durch die Länge des Feldmusters reserviert ist. Sind die
+Inhalte kürzer, kann der gewonnene Platz als Reserve für andere
+Feldmuster verwendet werden; sind die Inhalte länger, so wird der
+Inhalt so weit eingesetzt, wie noch Reserve vorhanden ist und der
+Rest abgeschnitten.
+ Muß in ein Feldmuster variabler Länge ein leerer Inhalt einge­
+setzt werden, so werden beim Drucken auch die auf das Feldmuster
+folgenden Leerzeichen unterdrückt, falls vor dem Feldmuster noch
+ein Leerzeichen steht oder das Feldmuster in Spalte 1 beginnt.
+ Feldmuster fester Länge werden immer in ihrer reservierten
+Länge eingesetzt. Sie werden im folgenden behandelt wie Feldmuster
+variabler Länge, deren Inhalt so lang ist wie das Feldmuster.
+
+#on("b")#Verteilung#off("b")# Die Verteilung der verschiebbaren Feldmuster
+auf der
+Zeile geschieht jeweils in dem Abschnitt zwischen zwei Feldmustern
+fester Position bzw. Zeilenanfang oder Zeilenende. Für jeden Ab­
+schnitt wird festgestellt, wieviel Stellen die Inhalte insgesamt mehr
+oder weniger als ihre Muster benötigen.
+ Der Längenausgleich geschieht zwischen dem letzten Feldmuster
+und dem Ende des Abschnitts. Dort wird ein Pufferplatz bestimmt,
+der bei Überlänge bis auf ein Leerzeichen verkleinert werden kann
+und an dem bei Unterlänge zusätzliche Leerzeichen eingefügt wer­
+den.
+ Außer am Pufferplatz wird an keinem Mustertext des Abschnitts
+etwas geändert. Zwischentexte zwischen den Feldmustern werden
+unverändert übertragen und mit den umgebenden Feldmustern ver­
+schoben.
+ Als Pufferplatz wird die erste Lücke hinter dem letzten Feld­
+muster eines Abschnittes verwendet, die mehr als ein Leerzeichen
+enthält. Ist keine solche Lücke vorhanden, wird das Ende des Ab­
+schnitts verwendet, falls dort ein Leerzeichen steht, und sonst das
+Ende des letzten Feldmusters.
+ Die durch den Pufferplatz und kürzere Inhalte gewonnene Re­
+serve wird von links an die Feldmuster mit Überlänge verteilt, bis
+die Reserve verbraucht ist.
+
+#on("b")#Zeilende#off("b")# Das Zeilenende wird als ein Quasi-Feldmuster mit
+fester
+Position aufgefaßt, das am Limit der Druckmusterdatei steht. Es
+sind also keine Einsetzungen möglich, die über das Limit der Datei
+hinausgehen. Als Pufferplatz wird hier jedoch die erste Blanklücke
+vom Zeilenende her verwendet, damit Mustertexte am Zeilenende
+gegebenenfalls stehenbleiben. Ist keine solche Lücke vorhanden, so
+wird das Zeilenende als Pufferplatz verwendet.
+ Obwohl nicht als Pufferplatz ausgewiesen, kann der Raum zwi­
+schen Zeilenende und Dateilimit als Reserve verwendet werden.
+
+#on("b")#Modi#off("b")# Der Einsetzmechanismus kann durch die MODUS-Anweisung
+mit einem Parameter verändert werden. Folgende Modi stehen zur
+Verfügung:
+
+
+ Modus ! Effekt
+ ------+----------------------------------------
+ 1 ! Normalmodus.
+ ! '%'-Feldmuster werden auch
+ ! nach links geschoben.
+ ! Keine Zeilenwiederholung.
+ ------+----------------------------------------
+ 2 ! Tabellenmodus.
+ ! '%'-Feldmuster werden nicht
+ ! nach links geschoben.
+ ! Keine Zeilenwiederholung.
+ ------+----------------------------------------
+ 3 ! Normalmodus mit Zeilenwiederholung.
+ ! '%'-Feldmuster werden auch
+ ! nach links geschoben.
+ ! Zeilenwiederholung ohne Zwischentexte.
+ ------+----------------------------------------
+ 4 ! Tabellenmodus mit Zeilenwiederholung.
+ ! '%'-Feldmuster werden nicht
+ ! nach links geschoben.
+ ! Zeilenwiederholung mit Zwischentexten.
+ ------+----------------------------------------
+
+
+Bei Zeilenwiederholung werden Inhalte in einer folgenden Zeile
+fortgesetzt, falls sie in der ersten Zeile nicht untergebracht werden
+konnten. Dazu wird die Musterzeile mit den Restinhalten erneut
+interpretiert. Je nach Modus werden auch die Zwischentexte noch
+wiederholt. Der Restinhalt umfaßt immer noch das ganze letzte Wort,
+das nicht mehr auf die vorige Zeile paßte. Es findet also ein Um­
+bruch statt. Die Positionen, die in der vorigen Zeile vom Anfang des
+Wortes eingenommen würden, werden durch Leerzeichen ersetzt.
+ Durch die MEHR-Anweisung mit einem Parameter kann die Zahl
+der Zeilenwiederholungen für die nächste Musterzeile festgesetzt
+werden. Dies hat jedoch nur eine Auswirkung, falls Zeilenwieder­
+holung zugelassen ist. Stehen zur Interpretation keine Restinhalte
+mehr zur Verfügung, wird mit leeren Inhalten weitergearbeitet. Kann
+ein Inhalt bei der vorgegebenen Anzahl von Zeilen nicht ganz dar­
+gestellt werden, wird der Rest nicht ausgegeben.
+
+
+5.4 Anschluß zum ELAN-Compiler
+
+Falls in einem Druckmuster Abkürzungen, Kommandozeilen oder
+Gruppendefinitionen vorkommen, wird das Druckmuster in ein
+ELAN-Programm umgewandelt, das dann vom ELAN-Compiler über­
+setzt wird.
+ Alle Zeilen eines Abkürzungsteils werden direkt in das Pro­
+gramm übernommen, wobei der Name einer Abkürzung durch einen
+beliebig gewählten Refinementnamen ersetzt wird ('abk' + eine lau­
+fende Nummer). Alle Abkürzungen und Refinements werden als glo­
+bale Refinements definiert, also außerhalb von Prozeduren. Dadurch
+wird erreicht, daß sie an jeder Stelle verwendet werden können.
+ Damit eine Abkürzung richtig als Refinement übersetzt wird,
+muß sie ein TEXT-Objekt als Wert liefern. Die anderen Refinements
+sind beliebig, da sie nur in selbstdefinierten Anweisungen verwen­
+det werden. Die Refinements der Abkürzungen werden in einer Zu­
+weisung an eine TEXT-Variable verwendet, damit der Druckgenera­
+tor auf den entsprechenden Wert zugreifen kann.
+ Jeder Abschnitt wird dagegen als eine Prozedur übersetzt. Eine
+Folge von Musterzeilen wird in eine Anweisung übersetzt, diese
+Musterzeilen einzusetzen und zu drucken. Eine '%%'-Anweisung wird
+einfach unverändert dazwischengeschrieben. Die Prozedur für den
+Wiederholungsteil wird einmal für jeden ausgewählten Satz aufgeru­
+fen, die Vorspann- und die Nachspann-Prozedur einmal bei jedem
+Gruppenwechsel.
+ Anweisungen im Initialisierungsteil werden an den Anfang des
+Programms als globale Definitionen gestellt.
+
+#on("b")#Fehler#off("b")# Findet sich in dem erzeugten ELAN-Programm ein
+Fehler,
+der durch den Druckgenerator nicht erkannt werden konnte (z.B.
+eine Abkürzung liefert keinen Wert), so muß der ELAN-Compiler
+diesen Fehler erkennen. Anschließend zeigt er das erzeugte Pro­
+gramm zusammen mit seinen Fehlermeldungen im Paralleleditor. Sie
+müssen nun die Fehlermeldung lokalisieren und anhand der eben
+gegebenen Hinweise in das ursprüngliche Druckmuster zurücküber­
+setzen, damit Sie dort den Fehler korrigieren können.
+
+
+5.5 Fehlermeldungen
+
+Folgende Fehlermeldungen können bei der Übersetzung eines Druck­
+musters auftreten:
+
+#on("i")#keine schliessende Klammer in Feldmuster#off("i")#
+ Wenn der Name in einem Feldmuster in spitze Klammern einge­
+ schlossen werden soll, muß noch in der gleichen Zeile eine
+ schließende Klammer vorhanden sein.
+
+#on("i")#kein Kommando in Kommandozeile#off("i")#
+ Eine Zeile, die mit '%' beginnt, enthält keinen weiteren Text.
+
+#on("i")#unbekanntes Kommando#off("i")#
+ Das erste Wort in einer Kommandozeile ist kein bekanntes Kom­
+ mando.
+
+#on("i")#kein % WIEDERHOLUNG gefunden#off("i")#
+ Das Druckmuster enthält keine Anweisung, die den Beginn eines
+ Abschnittes markiert. Es muß aber mindestens ein Abschnitt
+ vorhanden sein.
+
+#on("i")#nur GRUPPE-Anweisung erlaubt#off("i")#
+ Im Initialisierungsteil ist nur die GRUPPE-Anweisung erlaubt.
+
+#on("i")#keine ELAN-Anweisung im Initialisierungsteil nach Gruppen­
+definition#off("i")#
+ Sobald im Initialisierungsteil eine GRUPPE-Anweisung aufgetreten
+ ist, ist keine Kommandozeile mehr möglich.
+
+#on("i")#illegale Gruppennummer#off("i")#
+ In einer GRUPPE-Anweisung wurde eine zu große Nummer angege­
+ ben. Gruppen sollten von 1 an durchnumeriert werden.
+
+#on("i")#diese Gruppe wurde schon definiert#off("i")#
+ Eine Gruppennummer wurde mehrfach verwendet.
+
+#on("i")#diese Abkürzung ist nicht definiert#off("i")#
+ Ein Name in einem Feldmuster tritt nicht als Feld-oder Abkür­
+ zungsname auf. Eventuell enthält er ein Leerzeichen!
+
+#on("i")#dieser Abschnitt wurde schon einmal definiert#off("i")#
+ Kein Abschnitt kann mehrmals angegeben werden.
+
+#on("i")#falscher Modus#off("i")#
+ In einer MODUS-Anweisung wurde ein nicht definierter Modus als
+ Parameter angegeben.
+
+#on("i")#diese Anweisung darf im Musterteil nicht vorkommen#off("i")#
+
+#on("i")#im Abkürzungsteil darf keine Anweisung auftreten#off("i")#
+
+#on("i")#in dieser Zeile stehen zu viele Feldmuster#off("i")#
+ Es können maximal 24 Feldmuster in einer Zeile stehen. Abhilfe:
+ mehrere Feldmuster durch eine Abkürzung zusammenfassen.
+
+#on("i")#das Druckmuster enthält zu viele Feldmuster#off("i")#
+ Die Gesamtanzahl der Feldmuster ist begrenzt. Abhilfe: mehrere
+ Feldmuster durch eine Abkürzung zusammenfassen.
+
+#on("i")#nach dem "&" soll direkt der Name einer Abkürzung folgen#off("i")#
+ In einer Abkürzungszeile stehen Leerzeichen hinter dem '&'.
+
+#on("i")#kein Doppelpunkt nach Abkürzung#off("i")#
+ Nach dem Abkürzungsnamen in einer Abkürzungszeile muß durch
+ ein Leerzeichen getrennt ein Doppelpunkt folgen.
+
+#on("i")#Abkürzung mehrfach definiert#off("i")#
+ Die Abkürzung wurde unter dem gleichen Namen schon einmal,
+ vielleicht in einem anderen Abschnitt, definiert.
+
+#on("i")#das Druckmuster enthält zu viele Abkürzungen#off("i")#
+ Abhilfe: mehrere Abkürzungen zu einem Ausdruck zusammenfas­
+ sen.
+
+
diff --git a/app/eudas/4.3/doc/eudas.ref.6 b/app/eudas/4.3/doc/eudas.ref.6
new file mode 100644
index 0000000..7c8ada6
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.6
@@ -0,0 +1,399 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (61)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+6 Struktur von EUDAS-Dateien
+
+
+
+EUDAS-Dateien können unabhängig von EUDAS über den Daten­
+typ EUDAT manipuliert werden. Die zur Verfügung stehenden Zu­
+griffsoperationen sind in diesem Kapitel beschrieben.
+ Der Datentyp EUDAT ist analog zum Datentyp FILE. Jede
+EUDAT-Variable kann an eine EUDAS-Datei angekoppelt werden.
+Dadurch lassen sich beliebig viele EUDAS-Dateien gleichzeitig be­
+arbeiten. Wie der Abschnitt 6.6 zeigt, sind so auch ganz andere
+Anwendungen realisierbar.
+ Die wesentlichen EUDAS-Funktionen (Ansehen, Suchen, Druk­
+ken) können jedoch nicht direkt auf EUDAT-Variablen angewendet
+werden, sondern greifen auf die virtuelle Datei zu, die im nächsten
+Kapitel beschreiben wird.
+
+
+6.1 Der Datentyp SATZ
+
+Der Datentyp SATZ stellt einen einzelnen EUDAS-Satz dar, der
+intern als TEXT realisiert ist. Ein SATZ besteht aus bis zu 256
+Feldern, die jeweils einen TEXT enthalten können. Nach dem Initi­
+alisieren sind alle Felder mit "" vorbelegt. Die Felder können über
+Nummern von 1 bis 256 angesprochen werden.
+ Damit kann man sich einen SATZ als dynamisches ROW n TEXT
+vorstellen, das bis zu 256 Elemente haben kann. Anders als ein
+entsprechendes ROW belegt ein leerer SATZ praktisch keinen Spei­
+cherplatz.
+ Folgende Zugriffsprozeduren stehen zur Verfügung:
+
+TYPE SATZ
+
+OP := (SATZ VAR, SATZ CONST)
+
+PROC satz initialisieren (SATZ VAR)
+ Jeder SATZ muß vor Benutzung initialisiert werden.
+
+INT PROC felderzahl (SATZ CONST)
+ Liefert die Nummer des höchsten belegten Feldes.
+
+PROC feld lesen (SATZ CONST, INT CONST feldnr,
+ TEXT VAR inhalt)
+ Liest den Inhalt des Feldes 'feldnr' in 'inhalt'.
+
+ FEHLER:
+
+ #on("i")#n ist keine Feldnummer#off("i")#
+ 'n' liegt außerhalb des Bereiches 1..256.
+
+PROC feld bearbeiten (SATZ CONST, INT CONST feldnr,
+ PROC (TEXT CONST, INT CONST, INT CONST) bearbeite)
+ Ruft 'bearbeite' auf, wobei 'bearbeite' ein Text und zwei Posi­
+ tionen in diesem Text übergeben werden. Die Positionen geben
+ das erste und das letzte Zeichen des durch 'feldnr' ausgewähl­
+ ten Feldes an. Ist der Anfang größer als das Ende, so ist das
+ Feld leer.
+
+ FEHLER:
+
+ #on("i")#n ist keine Feldnummer#off("i")#
+ 'n' liegt außerhalb des Bereiches 1..256.
+
+PROC feld aendern (SATZ VAR, INT CONST feldnr,
+ TEXT CONST inhalt)
+ Schreibt 'inhalt' in das Feld mit der Nummer 'feldnr'
+
+ FEHLER:
+
+ #on("i")#n ist keine Feldnummer#off("i")#
+ 'n' liegt außerhalb des Bereiches 1..256.
+
+INT PROC feldindex (SATZ CONST, TEXT CONST muster)
+ Falls eines der Felder 'muster' enthält, wird die Nummer dieses
+ Feldes geliefert, sonst 0.
+
+
+6.2 Der Datentyp EUDAT
+
+Der Datentyp EUDAT muß ähnlich wie ein FILE an einen benann­
+ten oder unbenannten Datenraum angekoppelt werden. Der Daten­
+raum hat anschließend den Typ 3243. Weitere Zugriffe auf eine
+EUDAT-Variable sind erst nach erfolgtem Ankoppeln zulässig. An­
+derenfalls können undefinierte Fehler entstehen.
+
+TYPE EUDAT
+
+PROC oeffne (EUDAT VAR, TEXT CONST dateiname)
+ Koppelt die EUDAT-Variable an die EUDAS-Datei mit dem
+ Namen 'dateiname' an. Die Datei wird eingerichtet, falls sie
+ noch nicht existiert.
+
+ FEHLER:
+
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Die angegebene Datei hat nicht den Typ 3243.
+
+PROC oeffne (EUDAT VAR, DATASPACE CONST ds)
+ Koppelt die EUDAT-Variable an den Datenraum 'ds'.
+
+ FEHLER:
+
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Der Datenraum wurde bereits verwendet und hat nicht den Typ
+ 3243.
+
+Eine EUDAS-Datei ist in Felder und Sätze unterteilt. Die Felder
+werden beim Zugriff über Nummern angesprochen. Jedem Feld ist
+jedoch zur Identifikation ein TEXT als Feldname zugeordnet. Die
+Feldnamen werden als SATZ gespeichert, wobei jedes Feld seinen
+zugeordneten Namen enthält.
+
+INT PROC felderzahl (EUDAT CONST)
+ Liefert Anzahl der benannten Felder. Ist zu Anfang 0.
+
+PROC feldnamen aendern (EUDAT VAR,
+ SATZ CONST neue namen)
+ Setzt die Feldnamen einer Datei. Ist 'felderzahl (neue namen)'
+ größer als die Felderzahl der Datei, so wird die Felderzahl der
+ Datei entsprechend heraufgesetzt.
+
+PROC feldnamen lesen (EUDAT CONST, SATZ VAR namen)
+ Liefert alle Feldnamen in einer SATZ-Variablen.
+
+Eine EUDAS-Datei enthält drei zusätzliche Notiztexte. Zwei davon
+sind bereits reserviert, und zwar:
+#free (0.2)#
+ 1: Prüfbedingungen
+ 2: Datum der letzten Änderung
+
+Der dritte kann für freie Notizen verwendet werden.
+
+PROC notizen lesen (EUDAT CONST, INT CONST notiz nr,
+ TEXT VAR notizen)
+ Schreibt die Notizen der EUDAS-Datei in 'notizen' ('notiz nr' =
+ 1,2,3).
+
+PROC notizen aendern (EUDAT VAR, INT CONST notiz nr,
+ TEXT CONST notizen)
+ Ändert die Notizen. Alte Notizen werden dabei überschrieben
+ ('notiz nr' = 1,2,3).
+
+
+6.3 Satzposition
+
+Eine EUDAS-Datei läßt sich sequentiell vorwärts und rückwärts
+bearbeiten. Dazu gibt es eine aktuelle Satzposition. Ein bestimmter
+Satz kann auch direkt angesprungen werden. Die Prozeduren, die
+nach dem Inhalt des ersten Feldes suchen, arbeiten besonders
+schnell, da die entsprechenden Sätze über eine Hashmethode gefun­
+den werden.
+
+INT PROC satznr (EUDAT CONST)
+ Liefert aktuelle Satzposition.
+
+INT PROC saetze (EUDAT CONST)
+ Liefert Anzahl der Sätze.
+
+BOOL PROC dateiende (EUDAT CONST)
+ Liefert TRUE, wenn 'satznr' groesser als 'saetze' ist. Die letzte
+ erreichbare Satzposition liegt um eins hinter dem letzten Satz
+ (um auch am Ende anfügen zu können).
+
+PROC auf satz (EUDAT VAR, INT CONST satznr)
+ Positioniert auf den gewünschten Satz. Bei nicht existierenden
+ Sätzen wird auf den ersten bzw. hinter den letzten Satz ge­
+ sprungen.
+
+PROC weiter (EUDAT VAR)
+ Geht einen Satz weiter, jedoch nicht über das Dateiende hinaus.
+
+PROC zurueck (EUDAT VAR)
+ Geht einen Satz zurück, falls der erste Satz noch nicht erreicht
+ ist.
+
+PROC auf satz (EUDAT VAR, TEXT CONST muster)
+ Positioniert auf den ersten Satz, der als erstes Feld 'muster'
+ enthält, anderenfalls hinter den letzten Satz.
+
+PROC weiter (EUDAT VAR, TEXT CONST muster)
+ Geht weiter, bis das erste Feld 'muster' enthält, bzw. bis hinter
+ den letzten Satz.
+
+PROC zurueck (EUDAT VAR, TEXT CONST muster)
+ Geht zurück, bis das erste Feld 'muster' enthält, bzw. auf den
+ ersten Satz der EUDAS-Datei.
+
+
+6.4 Satzzugriffe
+
+Der aktuelle Satz ist ein SATZ-Objekt. Auf die Felder des aktuellen
+Satzes kann direkt zugegriffen werden.
+
+PROC feld lesen (EUDAT CONST, INT CONST feldnr,
+ TEXT VAR inhalt)
+ Wirkt wie 'feld lesen' auf den aktuellen Satz.
+
+PROC feld aendern (EUDAT VAR, INT CONST feldnr,
+ TEXT CONST inhalt)
+ Wirkt wie 'feld aendern' auf den aktuellen Satz.
+
+PROC feld bearbeiten (EUDAT CONST, INT CONST feldnr,
+ PROC (TEXT CONST, INT CONST, INT CONST) bearbeite)
+ Wirkt wie 'feld bearbeiten' auf den aktuellen Satz.
+
+Der aktuelle Satz kann auch als Ganzes bearbeitet werden.
+
+PROC satz lesen (EUDAT CONST, SATZ VAR satz)
+ Liefert den aktuellen Satz.
+
+PROC satz aendern (EUDAT VAR, SATZ CONST satz)
+ Ersetzt den aktuellen Satz durch 'satz'.
+
+PROC satz einfuegen (EUDAT VAR, SATZ CONST satz)
+ Fügt 'satz' vor dem aktuellen Satz ein.
+
+ FEHLER:
+
+ #on("i")#EUDAS-Datei voll#off("i")#
+ Eine EUDAS-Datei faßt mindestens 5000 Sätze.
+
+PROC satz loeschen (EUDAT VAR)
+ Löscht den aktuellen Satz.
+
+
+6.5 Sortieren und Reorganisieren
+
+Zum Sortieren können für die einzelnen Felder Typen angegeben
+werden, damit auch Zahlen und Daten richtig sortiert werden kön­
+nen. Außerdem kann die Feldreihenfolge angegeben werden, nach
+der sortiert werden soll.
+
+PROC feldinfo (EUDAT VAR, INT CONST feldnr, info)
+ Setzt den Feldtyp des Feldes 'feldnr'. Es bedeuten
+ -1 : normaler Text (Standard)
+ 0 : Text nach DIN. Ziffern und Sonderzeichen werden igno­
+ riert. Groß-und Kleinbuchstaben gelten gleich. Umlaute
+ werden beachtet.
+ 1 : Zahl (beim Vergleich werden alle Zeichen außer Zif­
+ fern ignoriert).
+ 2 : Datum. Es werden Daten der Form "tt.mm.jj" vergli­
+ chen.
+
+INT PROC feldinfo (EUDAT CONST, INT CONST feldnr)
+ Der Feldtyp des angegebenen Feldes wird geliefert. Zu Anfang
+ ist -1 voreingestellt.
+
+INT PROC unsortierte saetze (EUDAT CONST)
+ Liefert die Anzahl von Sätzen, die seit dem letzten Sortiervor­
+ gang geändert wurden. Bei einer neuen Datei, die noch nie
+ sortiert wurde, wird immer 0 geliefert.
+
+PROC dezimalkomma (TEXT CONST komma)
+ Stellt das Dezimalkomma ein, das beim Vergleich von Zahlen
+ gelten soll.
+
+ FEHLER:
+
+ #on("i")#Nicht erlaubtes Dezimalkomma#off("i")#
+ Nur Texte der Länge 1 sind zugelassen.
+
+TEXT PROC dezimalkomma
+ Liefert das eingestellte Dezimalkomma ("," ist voreingestellt).
+
+PROC sortiere (EUDAT VAR, TEXT CONST reihenfolge)
+ Sortiert die Datei in der von 'reihenfolge' angegebenen Reihen­
+ folge. Dabei enthält 'reihenfolge' an der Stelle 2*i+1 den Code
+ der Feldnummer, die als i-te in der Sortierung berücksichtigt
+ werden soll. Das Zeichen an der Stelle 2*i gibt an, ob das Feld
+ mit der davorstehenden Feldnummer aufsteigend ('+') oder
+ absteigend ('-') sortiert werden soll.
+
+PROC sortiere (EUDAT VAR)
+ Sortiert die Datei in der zuletzt eingestellten Reihenfolge.
+ Wurde noch keine Reihenfolge angegeben, wird die Datei in der
+ Feldreihenfolge sortiert.
+
+TEXT PROC sortierreihenfolge (EUDAT CONST)
+ Liefert die zuletzt eingestellte Reihenfolge. Wurde noch nicht
+ sortiert, so wird "" geliefert.
+
+Nach umfangreichen Änderungen an einer EUDAS-Datei ist eine
+Reorganisation sinnvoll, um "Textleichen" zu beseitigen.
+
+PROC reorganisiere (TEXT CONST dateiname)
+ Die EUDAS-Datei mit dem Namen 'dateiname' wird reorgani­
+ siert.
+
+
+6.6 EUDAS-Dateien als Assoziativspeicher
+
+In diesem Abschnitt soll ein Beispiel erläutert werden, in dem
+EUDAS-Dateien unabhängig von EUDAS für einen ganz anderen
+Zweck benutzt werden. Das folgende kurze Paket soll ein Abkür­
+zungsverzeichnis realisieren, das auf einer EUDAS-Datei basiert.
+
+
+ PACKET abkuerzungsverzeichnis
+ DEFINES
+ verzeichnis laden,
+ abkuerzung einfuegen,
+ abkuerzung aendern,
+ abkuerzung loeschen,
+ langform :
+
+ EUDAT VAR verz;
+ SATZ VAR satz;
+ TEXT VAR inhalt;
+
+ PROC verzeichnis laden (TEXT CONST dateiname) :
+
+ oeffne (verz, dateiname)
+
+ END PROC verzeichnis laden;
+
+ PROC abkuerzung einfuegen (TEXT CONST abk, lang) :
+
+ auf satz (verz, abk);
+ IF NOT dateiende (verz) THEN
+ errorstop ("Abkürzung existiert bereits")
+ ELSE
+ satz initialisieren (satz);
+ feld aendern (satz, 1, abk);
+ feld aendern (satz, 2, lang);
+ satz einfuegen (satz)
+ END IF
+
+ END PROC abkuerzung einfuegen;
+
+ PROC abkuerzung aendern (TEXT CONST abk, lang) :
+
+ auf satz (verz, abk);
+ IF dateiende (verz) THEN
+ errorstop ("Abkürzung existiert nicht")
+ ELSE
+ feld aendern (verz, 2, lang)
+ END IF
+
+ END PROC abkuerzung aendern;
+
+ PROC abkuerzung loeschen (TEXT CONST abk) :
+
+ auf satz (verz, abk);
+ IF NOT dateiende (verz) THEN
+ satz loeschen (verz)
+ END IF
+
+ END PROC abkuerzung loeschen;
+
+ TEXT PROC langform (TEXT CONST abk) :
+
+ auf satz (verz, abk);
+ IF dateiende (verz) THEN
+ inhalt := "";
+ errorstop ("Abkürzung nicht vorhanden")
+ ELSE
+ feld lesen (verz, 2, inhalt)
+ END IF;
+ inhalt
+
+ END PROC langform;
+
+ END PACKET abkuerzungsverzeichnis;
+
+
+Die Prozedur 'verzeichnis laden' koppelt die interne EUDAT-Vari­
+able 'verz' an eine benannte EUDAS-Datei, die eventuell vorher mit
+EUDAS erstellt wurde. In diesem Beispiel sind die Feldnamen egal;
+falls die übergebene EUDAS-Datei noch nicht existiert, wird sie mit
+0 Feldern eingerichtet, was aber nur für eine spätere Anzeige mit
+EUDAS störend wäre.
+ Grundlage für das Aufsuchen einer bestimmten Abkürzung bil­
+det immer die Prozedur 'auf satz', die nach dem Inhalt des ersten
+Feldes optimiert sucht. Falls die Abkürzung nicht gefunden wurde,
+wird auf das Dateiende positioniert, daher wird jeweils 'dateiende'
+abgefragt.
+ Beim Einfügen eines neuen Satzes muß eine komplette Satz­
+variable angegeben werden, die bereits mit den Inhalten gefüllt ist.
+Beim späteren Ändern kann jedoch direkt auf ein Feld zugegriffen
+werden, ohne die Satzvariable explizit rauszuholen.
+ Die Abfrage einer bestimmten Abkürzung bereitet dann keine
+Schwierigkeiten mehr.
+ Für die Verwendung von EUDAS-Dateien in diesem Beispiel
+spricht zum einen die einfache Programmierung, zum anderen aber
+auch die Möglichkeit, das erstellte Verzeichnis mit den Hilfsmitteln
+
diff --git a/app/eudas/4.3/doc/eudas.ref.7 b/app/eudas/4.3/doc/eudas.ref.7
new file mode 100644
index 0000000..31b3031
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.7
@@ -0,0 +1,447 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (71)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+7 Verwaltung der offenen Dateien
+
+
+Die in diesem Kapitel beschriebene Schnittstelle verbindet mehrere
+EUDAS-Dateien zu einem großen Dateimodell. Diese virtuelle Datei
+dient als Grundlage für die meisten EUDAS-Funktionen. Zuerst muß
+eine Datei als Bestandteil der virtuellen Datei geöffnet werden, ehe
+sie bearbeitet werden kann. Es ist so bei den Funktionen keine
+Angabe mehr nötig, welche Datei gemeint ist.
+ Diese Schnittstelle ist in vielen Teilen für die interne
+EUDAS-Anwendung ausgelegt. Bei einigen Prozeduren werden aus
+Effizienzgründen keinerlei Überprüfungen auf illegale Aufrufe oder
+Parameter durchgeführt. Wollen Sie eine solche Prozedur dennoch
+verwenden, sollten Sie die Einhaltung der angegebenen Bedingungen
+sorgfältig überprüfen.
+
+
+7.1 Dateiverwaltung
+
+Mit 'oeffne' wird eine Datei zum Bearbeiten geöffnet. Mit 'kette' und
+'kopple' können weitere Dateien dazugekettet bzw. dazugekoppelt
+werden. Durch 'sichere' können veränderte Kopien zurückgeschrie­
+ben werden. Durch 'dateien loeschen' werden die internen Kopien
+gelöscht.
+ Mit 'anzahl dateien' kann die Anzahl der vorhandenen Dateien
+erfragt werden. 'anzahl koppeldateien' gibt Auskunft darüber, wie­
+viel Dateien davon gekoppelt sind. 'aendern erlaubt' gibt den Status
+wieder, der beim Öffnen der ersten Datei angegeben wurde. 'inhalt
+veraendert' gibt an, ob die angegebene Datei verändert wurde. Mit
+'eudas dateiname' können die Namen der geöffneten Dateien erfragt
+werden. Bei jedem 'oeffne' wird 'dateiversion' um 1 erhöht. Dies
+dient dazu, ein erfolgtes neues Öffnen von anderen Stellen aus zu
+entdecken.
+ Mit 'auf koppeldatei' kann die virtuelle Datei auf eine Koppel­
+datei umgeschaltet werden, so daß der Eindruck entsteht, nur diese
+Datei wäre geöffnet worden.
+
+PROC oeffne (TEXT CONST dateiname,
+ BOOL CONST aendern erlaubt)
+ Falls Ändern erlaubt sein soll, wird eine Kopie der angegebenen
+ Datei zur Bearbeitung für EUDAS angelegt. Vorher geöffnete
+ Dateien werden gelöscht. Die Änderungserlaubnis wird entspre­
+ chend gesetzt. Es wird die Satzposition der EUDAS-Datei ange­
+ nommen (Ausnahme: steht die EUDAS-Datei hinter dem letzten
+ Satz, wird auf Satz 1 positioniert). 'dateiversion' sowie 'anzahl
+ dateien' werden um 1 erhöht.
+
+ FEHLER:
+#f1#
+ #on("i")#Datei nicht gesichert#off("i")#
+ Eine vorher geöffnete Datei war verändert, aber nicht gesi­
+ chert.
+#f1#
+ #on("i")#Datei existiert nicht#off("i")#
+ Die angegebene Datei ist nicht vorhanden.
+#f1#
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Die angegebene Datei hat nicht den für EUDAS-Dateien festge­
+ legten Typ.
+
+PROC kopple (TEXT CONST dateiname)
+ Die angegebene Datei wird zu den bereits geöffneten Dateien
+ dazugekoppelt. Falls Ändern erlaubt ist, wird eine Kopie dieser
+ Datei verwendet. Dabei werden die ersten Felder der Datei, die
+ bereits in der Hauptdatei vorhanden sind, als Koppelfelder
+ festgelegt. Alle weiteren Felder werden zusätzlich zu den bis­
+ herigen angelegt. 'dateiversion', 'anzahl dateien' und 'anzahl 
+ koppeldateien' werden um 1 erhöht.
+
+ FEHLER:
+#f1#
+ #on("i")#keine Datei geoeffnet#off("i")#
+ Es muß vorher eine Datei geöffnet werden.
+#f1#
+ #on("i")#Zuviel Dateien geoeffnet#off("i")#
+ Die Anzahl der gleichzeitig geöffneten Dateien ist begrenzt.
+#f1#
+ #on("i")#Datei existiert nicht#off("i")#
+ Die angegebene Datei ist nicht vorhanden.
+#f1#
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Die angegebene Datei hat nicht den für EUDAS-Dateien festge­
+ legten Typ.
+#f1#
+ #on("i")#Zu viele Felder#off("i")#
+ Die Anzahl der Felder insgesamt ist begrenzt.
+#f1#
+ #on("i")#Zu viele Koppelfelder#off("i")#
+ Die Anzahl der Koppelfelder ist begrenzt.
+#f1#
+ #on("i")#keine Koppelfelder vorhanden#off("i")#
+ Das erste Feld der zu koppelnden Datei ist in der Hauptdatei
+ nicht vorhanden (unterschiedliche Feldnamen).
+
+PROC kette (TEXT CONST dateiname)
+ Die angegebene Datei wird an die Hauptdatei angekettet, d.h.
+ die Sätze der neuen Datei werden am bisherigen Dateiende
+ angefügt. Falls Ändern erlaubt ist, wird eine Kopie dieser Datei
+ verwendet. Die zu kettende Datei muß in der Feldstruktur nicht
+ mit der Hauptdatei übereinstimmen. Die aktuelle Satzposition
+ wird beibehalten. 'dateiversion' und 'anzahl dateien' werden um
+ 1 erhöht.
+
+ FEHLER:
+#f1#
+ #on("i")#keine Datei geoeffnet#off("i")#
+ Es muß vorher eine Datei geöffnet werden.
+#f1#
+ #on("i")#Zuviel Dateien geoeffnet#off("i")#
+ Die Anzahl der gleichzeitig geöffneten Dateien ist begrenzt.
+#f1#
+ #on("i")#Datei existiert nicht#off("i")#
+ Die angegebene Datei ist nicht vorhanden.
+#f1#
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Die angegebene Datei hat nicht den für EUDAS-Dateien festge­
+ legten Typ.
+
+PROC sichere (INT CONST dateinr, TEXT CONST dateiname)
+ Die geöffneten Dateien werden in der Reihenfolge ihres Öffnens
+ durchnumeriert (von 1 an). Die Arbeitskopie mit der angegebe­
+ nen Nummer wird unter dem angegebenen Namen gesichert, aber
+ selbst nicht verändert. Die vorher unter diesem Namen vorhan­
+ dene Datei wird gelöscht. War die zu sichernde Arbeitskopie
+ verändert worden, so wird sie anschließend als nicht verändert
+ angesehen.
+ Bedingungen:
+ 1 <= dateinr <= anzahl dateien
+
+PROC dateien loeschen (BOOL CONST auch geaenderte)
+ Es werden alle geöffneten Arbeitskopien gelöscht. EUDAS wird
+ wieder in den Anfangszustand versetzt. Wird 'auch geaenderte'
+ angegeben, wird bei geänderten, aber nicht gesicherten Dateien
+ die Fehlermeldung unterdrückt.
+
+ FEHLER:
+#f1#
+ #on("i")#Datei nicht gesichert#off("i")#
+ Eine vorher geöffnete Datei war verändert, aber nicht gesi­
+ chert.
+
+BOOL PROC auf koppeldatei
+ Liefert TRUE, wenn auf eine Koppeldatei umgeschaltet wurde.
+
+PROC auf koppeldatei (INT CONST nr)
+ Umschalten auf Koppeldatei 'nr'. Ist bereits umgeschaltet, wird
+ wieder zurückgeschaltet. In diesem Fall werden bei 'nr' = 1 die
+ Koppelfelder übernommen, anderenfalls nicht. Beim Umschalten
+ bleiben Satzposition, Markierungen und Suchmuster gespeichert.
+ In der Koppeldatei wird die beim letzten Umschalten eingestell­
+ te Position wieder eingenommen. 'dateiversion' wird um 1 er­
+ höht.
+
+INT PROC anzahl dateien
+ Gibt die Anzahl der insgesamt geöffneten Dateien an.
+
+INT PROC anzahl koppeldateien
+ Gibt die Anzahl der gekoppelten Dateien an.
+
+BOOL PROC aendern erlaubt
+ Reflektiert den Status, der bei 'oeffne' gesetzt wurde.
+
+BOOL PROC inhalt veraendert (INT CONST dateinr)
+ Gibt an, ob die geöffnete Datei mit der angegebenen Nummer
+ verändert wurde. Wird ggf. von 'sichere' zurückgesetzt.
+ Bedingung:
+ 1 <= dateinr <= anzahl dateien
+
+TEXT PROC eudas dateiname (INT CONST dateinr)
+ Liefert den Namen, unter dem die entsprechende Datei geöffnet
+ wurde.
+ Bedingung:
+ 1 <= dateinr <= anzahl dateien
+
+INT PROC dateiversion
+ Wird bei jedem 'oeffne', 'kette' und 'kopple' zyklisch erhöht.
+
+INT PROC folgedatei (INT CONST dateinr)
+ Eine geöffnete EUDAS-Datei wird in eine von zwei Listen auf­
+ genommen, die der geketteten Dateien und die der gekoppelten.
+ Diese Prozedur liefert jeweils die Nummer der nächsten Datei in
+ der Liste, am Ende aber 0. Die Liste der geketteten Dateien
+ beginnt immer mit 1, mit 'folgedatei (0)' erhält man die erste
+ gekoppelte Datei.
+ Bedingung:
+ 0 <= dateinr <= anzahl dateien
+
+
+7.2 Feldstruktur
+
+Die einzelnen Sätze der kombinierten EUDAS-Datei sind in Felder
+unterteilt. Diese setzen sich zusammen aus den Feldern der Haupt­
+datei und der einzelnen Koppeldateien, wobei die Koppelfelder je­
+weils nur einmal auftauchen.
+ 'anzahl felder' liefert die Anzahl der vorhanden Felder. Mit
+'feldnamen lesen' und 'feldnamen bearbeiten' können die Feldnamen
+abgefragt werden. 'feldnummer' liefert einen Index für einen vor­
+gegebenen Feldnamen, da die Felder immer über Nummern angespro­
+chen werden.
+ Die Prozeduren 'feld lesen' und 'feld bearbeiten' ermöglichen
+den Zugriff auf den Feldinhalt des aktuellen Satzes; durch 'feld
+aendern' kann dieser Inhalt abgeändert werden.
+
+INT PROC anzahl felder
+ Liefert die Anzahl der vorhanden Felder.
+
+PROC feldnamen lesen (INT CONST feldnr,
+ TEXT VAR feldname)
+ Liefert in 'feldname' den Namen des Feldes mit der Nummer
+ 'feldnr'.
+ Bedingung:
+ 1 <= feldnr <= anzahl felder
+
+PROC feldnamen bearbeiten (INT CONST feldnr,
+ PROC (TEXT CONST, INT CONST, INT CONST) bearbeite)
+ Die Prozedur 'bearbeite' wird aufgerufen. Als Parameter werden
+ ein Text und Anfangs- und Endposition des gewünschten Feld­
+ namens in diesem Text übergeben. Verhindert unnötiges Kopie­
+ ren des Feldnamens in eine TEXT-Variable. Der übergebene
+ Text darf nicht verändert werden!
+ Bedingung:
+ 1 <= feldnr <= anzahl felder
+
+INT PROC feldnummer (TEXT CONST feldname)
+ Liefert den index zu dem angegebenen Feldnamen. Falls ein
+ solcher Name nicht existiert, wird 0 geliefert.
+
+PROC feld lesen (INT CONST feldnr, TEXT VAR inhalt)
+ Liefert den Inhalt des angegebenen Feldes.
+ Bedingung:
+ 1 <= feldnr <= anzahl felder
+
+PROC feld bearbeiten (INT CONST feldnr,
+ PROC (TEXT CONST, INT CONST, INT CONST) bearbeite)
+ Die Prozedur 'bearbeite' wird aufgerufen. Der Feldinhalt des
+ angegebenen Feldes steht im übergebenen Text innerhalb der
+ Grenzen. Ist die Obergrenze kleiner als die Untergrenze, so ist
+ das Feld leer.
+ Bedingung:
+ 1 <= feldnr <= anzahl felder
+
+PROC feld aendern (INT CONST feldnr, TEXT CONST inhalt)
+ Ändert den Inhalt des angegebenen Feldes.
+ Bedingung:
+ NOT ende der datei
+ 1 <= feldnr <= anzahl felder
+
+INT PROC feldinfo (INT CONST feldnummer)
+ Liefert den Typ des angegebenen Feldes.
+ Bedingung:
+ 1 <= feldnummer <= anzahl felder
+
+PROC notizen lesen (INT CONST nr, TEXT VAR inhalt)
+ Liest die angegebenen Notizen ('nr' = 1,2,3) aus der ersten
+ Datei oder der umgeschalteten Koppeldatei.
+
+PROC notizen aendern (INT CONST nr, TEXT CONST inhalt)
+ Ändert die Notizen ('nr' = 1,2,3) der ersten Datei oder der um­
+ geschalteten Koppeldatei.
+
+
+7.3 Positionierung
+
+Das virtuelle Dateimodell von EUDAS verfügt ebenfalls über eine
+Satzposition, die verändert werden kann.
+ Durch 'satznummer' wird die aktuelle Satznummer geliefert,
+beim Koppeln kann über 'satzkombination' die Reihenfolge der Kop­
+pelkombinationen bestimmt werden. 'dateiende' zeigt an, ob die
+Satzposition hinter dem letzten Satz liegt. Mit 'weiter' und 'zurueck'
+erfolgt die eigentliche Positionierung. Hier kann außer der Positio­
+nierung um Einzelsätze auch die Positionierung auf den nächsten
+ausgewählten oder markierten Satz angefordert werden. Mit 'auf 
+satz' schließlich kann ein bestimmter Satz angesprungen werden.
+
+INT PROC satznummer
+ Liefert die Nummer des aktuellen Satzes. Die Sätze werden von
+ 1 an durchnumeriert, wobei über die geketteten Dateien wei­
+ tergezählt wird.
+ Bedingung:
+ anzahl dateien > 0
+
+INT PROC satzkombination
+ Liefert die laufende Nummer der Koppelkombination des aktuel­
+ len Satzes. Wird nur durch 'weiter' im Einzelsatzmodus erhöht.
+ Normalerweise 1.
+ Bedingung:
+ anzahl dateien > 0
+
+BOOL PROC dateiende
+ Gibt an, ob die Satzposition hinter dem letzten Satz liegt.
+
+PROC weiter (INT CONST modus)
+ Erhöht die aktuelle Satzposition. Für 'modus' gibt es 3 Möglich­
+ keiten:
+ 1: Falls eine weitere Satzkombination besteht, wird diese ein­
+ genommen, sonst zum nächsten Satz.
+ 2: Zum nächsten durch Suchbedingung ausgewählten Satz. Wird
+ optimiert.
+ 3: Zum nächsten markierten Satz. Wird optimiert.
+ Ist kein Satz mehr vorhanden, wird die Satzposition hinter dem
+ letzten Satz eingenommen.
+ Bedingung:
+ anzahl dateien > 0
+
+PROC zurueck (INT CONST modus)
+ Geht um einen Satz zurück. Die Modusangabe ist wie bei 'wei­
+ ter', jedoch wird im Modus 1 keine weitere Satzkombination
+ ausprobiert. Die Positionierung endet bei Satz 1.
+ Bedingung:
+ anzahl dateien > 0
+
+PROC auf satz (INT CONST satznr)
+ Geht auf den angegebenen Satz. Ist 'satznr' < 1, wird auf Satz 1
+ positioniert, ist der angegebene Satz nicht vorhanden, wird
+ hinter den letzten Satz positioniert. Es wird jeweils die erste
+ Satzkombination eingenommen.
+ Bedingung:
+ anzahl dateien > 0
+
+
+7.4 Änderungen
+
+Sätze des Dateimodells können eingefügt oder gelöscht werden.
+Durch das Einfügen entsteht ein leerer Satz vor dem aktuellen Satz;
+alle weiteren Sätze rücken eine Stelle weiter. Beim Löschen wird
+dieser Vorgang wieder rückgängig gemacht.
+ Durch 'satz einfuegen' wird ein Leersatz eingefügt; durch
+'satz loeschen' wird der aktuelle Satz gelöscht.
+ Sätze in gekoppelten Dateien werden grundsätzlich nicht ge­
+löscht; auch beim Einfügen entsteht nicht automatisch ein Leersatz
+in den gekoppelten Dateien. Änderungen in den Koppeldateien
+(durch 'feld aendern') werden gepuffert. Durch 'aenderungen ein­
+tragen' werden die Änderungen dann in die Koppeldateien eingetra­
+gen. Dabei kann auch ein neuer Satz in die Koppeldatei eingefügt
+werden. Bei Positionierungen wird diese Prozedur automatisch auf­
+gerufen.
+
+PROC satz einfuegen
+ Fügt vor dem aktuellen Satz einen Leersatz ein.
+ Bedingung:
+ anzahl dateien > 0
+
+PROC satz loeschen
+ Löscht den aktuellen Satz. Hat hinter dem letzten Satz keine
+ Wirkung.
+ Bedingung:
+ anzahl dateien > 0
+
+PROC aenderungen eintragen
+ Trägt die gepufferten Änderungen in die Koppeldateien ein.
+ Dabei können die folgenden Fälle auftreten:
+ 1. Der Satz in der Koppeldatei wird geändert.
+ Dies geschieht dann, wenn vorher ein passender Satz in der
+ Koppeldatei vorhanden war und die Koppelfelder nicht ver­
+ ändert wurden.
+ 2. In der Koppeldatei wird ein neuer Satz eingefügt.
+ Wenn die Koppelfelder und noch andere Felder einer Datei
+ geändert wurden, wird in dieser Datei ein neuer Satz einge­
+ fügt.
+ 3. Es wird neu gekoppelt.
+ Wurden nur die Koppelfelder einer Datei geändert, wird ein
+ neuer, zu diesen Feldern passender Satz gesucht. Nach
+ 'aenderungen eintragen' erscheinen unter den Feldern der
+ Datei die neuen Inhalte.
+
+
+7.5 Suchbedingungen
+
+Über 'suchbedingung' kann eine Suchbedingung eingetragen werden,
+die für jeden Satz geprüft werden soll. Mit 'satz ausgewaehlt' wird
+erfragt, ob der aktuelle Satz die Suchbedingung erfüllt. Die Such­
+bedingung kann mit 'suchbedingung loeschen' wieder ausgeschaltet
+werden.
+ Einzelne Sätze können auch markiert werden. Nach einem Öff­
+nen ist zunächst kein Satz markiert. Durch 'markierung  aendern'
+kann die Markierung eines Satzes geändert werden. 'satz markiert'
+fragt ab, ob der aktuelle Satz markiert ist. 'markierte saetze' liefert
+die Anzahl der markierten Sätze. Mit 'markierungen loeschen' wer­
+den alle Markierungen entfernt.
+
+PROC suchbedingung (INT CONST feldnr,
+ TEXT CONST bedingung)
+ Stellt für das angegebene Feld die im Text als Muster angege­
+ bene Suchbedingung ein. Weitere Aufrufe verknüpfen die Be­
+ dingungen mit UND (auch wenn das gleiche Feld erneut angege­
+ ben wird).
+ Bedingung:
+ anzahl dateien > 0
+ 1 <= feldnr <= anzahl felder
+
+ FEHLER:
+#f1#
+ #on("i")#Suchmuster zu umfangreich#off("i")#
+ Es wurden zu viele Vergleiche gefordert.
+
+BOOL PROC satz ausgewaehlt
+ Gibt an, ob die Suchbedingung auf den aktuellen Satz zutrifft.
+ Hinter dem letzten Satz wird immer FALSE geliefert.
+ Bedingung:
+ anzahl dateien > 0
+
+PROC suchbedingung lesen (INT CONST feldnr, TEXT VAR bedingung)
+ Liefert die zuletzt für das angegebene Feld eingestellte Bedin­
+ gung, falls die Suchbedingung nicht gelöscht und keine Datei
+ neu geöffnet wurde.
+ Bedingung:
+ 1 <= feldnr <= anzahl felder
+
+PROC suchbedingung loeschen
+ Löscht die eingestellte Suchbedingung wieder. Anschließend
+ sind alle Sätze ausgewählt.
+ Bedingung:
+ anzahl dateien > 0
+
+PROC markierung aendern
+ Ändert die Markierung des aktuellen Satzes ins Gegenteil.
+ Bedingung:
+ anzahl dateien > 0
+
+BOOL PROC satz markiert
+ Gibt an, ob der aktuelle Satz markiert ist.
+ Bedingung:
+ anzahl dateien > 0
+
+INT PROC markierte saetze
+ Gibt an, wieviel Sätze insgesamt markiert sind.
+ Bedingung:
+ anzahl dateien > 0
+
+PROC markierungen loeschen
+ Löscht alle Markierungen.
+ Bedingung:
+ anzahl dateien > 0
+
diff --git a/app/eudas/4.3/doc/eudas.ref.8 b/app/eudas/4.3/doc/eudas.ref.8
new file mode 100644
index 0000000..fc2b3bc
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.8
@@ -0,0 +1,454 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (83)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+8 Funktionen zur Bearbeitung
+
+
+
+Die Verarbeitungsfunktionen arbeiten jeweils auf der aktuell geöff­
+neten Datei. Falls mindestens ein Satz markiert ist, werden nur
+markierte Sätze bearbeitet, anderenfalls die durch die Suchbedin­
+gung ausgewählten Sätze.
+
+
+8.1 Drucken
+
+Zum Drucken wird ein Druckmuster als Textdatei benötigt. Dessen
+Name muß beim Aufruf der Prozedur 'drucke' angegeben werden.
+Werden beim Übersetzen des Druckmusters Fehler entdeckt, so wird
+der Paralleleditor aufgerufen und kein Druckvorgang durchgeführt.
+ Normalerweise sendet der Druckgenerator die Ausgabe direkt
+zum Drucker. Alternativ kann die Ausgabe auch in eine Datei ge­
+schrieben werden. Dieses Verfahren kann mit 'direkt drucken' umge­
+stellt werden. Der Aufruf
+
+
+ direkt drucken (TRUE)
+
+
+sendet alle Dateien direkt zum Drucker, mit
+
+
+ direkt drucken (FALSE)
+
+
+wird die Ausgabe in Dateien abgelegt. Diese Dateien erhalten Namen
+der Form
+
+
+ "Druckmustername.a$n"
+
+
+wobei 'n' eine laufende Nummer zur Unterscheidung ist.
+ Soll die Druckausgabe in eine ganz bestimmte Datei geleitet
+werden, so kann vor dem Aufruf von 'drucke' die Prozedur 'druck­
+datei' aufgerufen werden, die als Parameter den Namen der Ausga­
+bedatei erhält. Existiert die Datei noch nicht, wird sie eingerichtet,
+ansonsten wird die Ausgabe am Ende angehängt.
+ Die Einstellung der Ausgabedatei gilt nur für einen Druckvor­
+gang und überschreibt für diesen Druckvorgang 'direkt drucken'.
+Beim nächsten Druckvorgang wird wieder die durch 'direkt drucken'
+festgelegte Einstellung verwendet.
+ Wenn beim Drucken ein großes Ausgabevolumen anfällt, kann es
+sinnvoll sein, die Ausgabe in mehrere kleine Dateien aufzuteilen.
+Dies gilt auch, wenn direkt gedruckt werden soll, da auch in diesem
+Fall eine Zwischendatei erzeugt werden muß. Die maximale Anzahl
+von Zeilen pro Datei wird durch 'max druckzeilen' angegeben.
+ Der dort angegeben Wert gilt nur ungefähr - ein Wechsel der
+Ausgabedatei findet dann statt, wenn die Ausgabedatei nach Bear­
+beitung eines Satzes die Maximalanzahl überschritten hat. In die
+neue Datei wird anschließend zuerst der Initialisierungsteil des
+Druckmusters kopiert, ehe mit der Ausgabe des nächsten Satzes
+fortgefahren wird.
+
+Die Prozeduren im einzelnen:
+
+
+PROC drucke (TEXT CONST druckmuster)
+
+ Die aktuell geöffnete Datei wird nach dem angegebenen Druck­
+ muster gedruckt.
+
+ FEHLER:
+#f1#
+ #on("i")#Datei "druckmuster" existiert nicht#off("i")#
+ Das angegebene Druckmuster ist nicht vorhanden.
+#f1#
+ #on("i")#keine Datei geoeffnet#off("i")#
+ Zum Drucken muß eine Datei geöffnet sein.
+#f1#
+ #on("i")#direkt Drucken nicht möglich#off("i")#
+ Es ist kein Druckprogramm installiert oder der Spooler läßt sich
+ mit 'print' nicht ansprechen. Der Druck wird abgebrochen, die
+ Ausgabedatei ist noch vorhanden.
+
+
+PROC direkt drucken (BOOL CONST ja)
+
+ Gibt an, ob die Druckausgaben direkt gedruckt oder in einer
+ Datei gesammelt werden sollen.
+
+
+PROC druckdatei (TEXT CONST ausgabedatei)
+
+ Leitet die Druckausgabe des nächsten Druckvorgangs in die
+ Datei 'ausgabedatei'. Die Einstellung von 'direkt drucken' wird
+ für diesen Druckvorgang überschrieben. Die Ausgabe wird am
+ Ende der Datei angehängt, falls nötig, wird die Ausgabedatei
+ vorher eingerichtet.
+
+
+PROC maxdruckzeilen (INT CONST zeilen)
+
+ Stellt die maximale Anzahl von Zeilen für die Ausgabedatei ein.
+ Beim Überschreiten dieses Wertes wird eine neue Datei ange­
+ fangen. Standardwert ist 4000.
+
+
+TEXT PROC lfd nr
+
+ Liefert während des Druckens die laufende Nummer des gerade
+ gedruckten Satzes als Text.
+
+
+BOOL PROC gruppenwechsel (INT CONST gruppennr)
+
+ Kann innerhalb eines Vor- oder Nachspanns beim Drucken ab­
+ gefragt werden, um festzustellen, ob die angegebene Gruppe
+ gewechselt und damit den Vor- bzw. Nachspann mitverursacht
+ hat (es können zu einem Zeitpunkt mehrere Gruppen wechseln).
+ Die Gruppennummer 0 gibt die Standardgruppe an, die nur vor
+ dem ersten und nach dem letzten Satz wechselt.
+
+
+8.2 Kopieren
+
+Zum selektiven Kopieren von EUDAS-Dateien wird ein Kopiermuster
+benötigt. Dieses gibt die Zuordnung zwischen Feldern der Ziel- und
+der Quelldatei an. Die Quelldatei ist immer die aktuell geöffnete
+Datei.
+ Die Kopierfunktion wird durch 'kopiere' aufgerufen. Parameter
+sind der Name der Zieldatei und das Kopiermuster als FILE. Alter­
+nativ kann statt des Kopiermusters eine Prozedur übergeben wer­
+den, die die Kopieranweisungen erhält.
+ Der eigentliche Kopiervorgang wird durch den Operator 'K'
+bewirkt. Dieser erhält den Zielfeldnamen und einen TEXT-Aus­
+druck als Parameter. Der Wert des TEXT-Ausdrucks wird in das
+jeweilige Feld der Zieldatei geschrieben.
+ Existiert die Zieldatei noch nicht, so wird sie mit den Feldern
+eingerichtet, die in den einzelnen 'K'-Ausdrücken angegeben sind
+und zwar in der angeführten Reihenfolge. Existiert die Zieldatei, so
+werden gegebenenfalls noch nicht vorhandene Felder am Ende ange­
+fügt.
+ Die Prozedur 'std kopiermuster' liefert zu einer gegebenen
+Zieldatei ein Standard-Muster, das als Auswahlgrundlage dienen
+kann. Existiert die Zieldatei nicht, werden alle Felder der Quell­
+datei 1 : 1 kopiert, anderenfalls wird zu jedem Feld der Zieldatei
+ein passendes Feld der Quelldatei gesucht - die Feldreihenfolge
+richtet sich in diesem Fall nach der Zieldatei.
+
+
+PROC kopiere (TEXT CONST dateiname,
+ FILE VAR kopiermuster)
+
+ Die aktuell geöffnete Datei wird nach den Angaben in 'kopier­
+ muster' in die Datei 'dateiname' kopiert. Das Kopiermuster wird
+ dem ELAN-Compiler übergeben. Tritt bei der Übersetzung ein
+ Fehler auf, wird der Paralleleditor aufgerufen.
+
+ FEHLER:
+#f1#
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Zieldatei existiert, ist aber keine EUDAS-Datei.
+#f1#
+ #on("i")#keine Datei geoeffnet#off("i")#
+ Es muß eine virtuelle Datei vorhanden sein.
+
+
+PROC kopiere (TEXT CONST dateiname, PROC kopierfunktion)
+
+ Wie oben, nur ist die Kopierfunktion gleich als Prozedur vor­
+ handen.
+
+ FEHLER:
+#f1#
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Zieldatei existiert, ist aber keine EUDAS-Datei.
+#f1#
+ #on("i")#keine Datei geoeffnet#off("i")#
+ Es muß eine virtuelle Datei vorhanden sein.
+
+
+OP K (TEXT CONST feldname, ausdruck)
+
+ Kopiert den Ausdruck in das Feld 'feldname' der Zieldatei.
+ Dieses Feld wird eingerichtet, falls es noch nicht existiert.
+ Dieser Operator ist nur während eines Kopiervorganges de­
+ finiert (also in einem Kopiermuster oder einer Kopierfunktion).
+ Er darf nicht in einer IF-Klausel stehen, sondern muß bei
+ jedem Satz mit gleichem Feldnamen an der gleichen Stelle auf­
+ gerufen werden.
+
+
+PROC std kopiermuster (TEXT CONST dateiname,
+ FILE VAR kopiermuster)
+
+ Liefert ein Standard-Kopiermuster, abhängig von der Zieldatei
+ 'dateiname'. Existiert diese nicht, wird die Quelldatei unverän­
+ dert kopiert, ansonsten richtet sich das Kopiermuster nach der
+ Zieldatei.
+
+
+8.3 Tragen
+
+Durch Tragen können Sätze komplett in eine Zieldatei transportiert
+werden. In der Quelldatei sind sie anschließend nicht mehr vorhan­
+den. Eine ganze Auswahl von Sätzen kann mit 'trage' transportiert
+werden. 'trage satz' transportiert nur den aktuellen Satz. Mit
+'hole satz' kann der letzte Satz der Zieldatei wieder zurückgeholt
+werden, so daß eine EUDAS-Datei auch als Zwischenspeicher für
+Einzelsätze verwendet werden kann.
+ Existiert die Zieldatei bereits, muß sie mindestens so viele
+Felder wie die Quelldatei besitzen, damit keine Informationen ver­
+lorengehen können. Die Feldnamen müssen nicht übereinstimmen.
+Existiert die Zieldatei noch nicht, wird sie mit den Feldern der
+Quelldatei eingerichtet.
+ Die Tragefunktion kann um eine gleichzeitige Prüfung erweitert
+werden. Dabei werden Bedingungen überprüft, die bei der Zieldatei
+gespeichert sind. Sätze, die diese Bedingungen verletzen, werden
+nicht getragen. Eine entsprechende Meldung wird in eine Protokoll­
+datei geschrieben, die als Parameter übergeben werden muß.
+ Die Prüfbedingungen stehen als ausführbares Programm in den
+Notizen der Zieldatei. Prüfbedingungen können mit mehreren Proze­
+duren formuliert werden. 'pruefe' nimmt eine beliebige Bedingung als
+Parameter und gibt bei Mißerfolg eine Meldung aus. 'wertemenge'
+prüft auf Übereinstimmung mit einem der angegebenen Werte. 'feld­
+maske' legt eine Maske für ein Feld fest, die auf den Inhalt zutref­
+fen muß.
+ Mit Hilfe der Prozedur 'eindeutige felder' können Satzduplikate
+erkannt werden. Auch diese werden nicht getragen.
+ Die bei den Prüfbedingungen angegebenen Feldnamen müssen in
+der Quelldatei vorhanden sein. Falls eine Prüfprozedur außerhalb
+von 'trage' aufgerufen wird, führt eine Verletzung der Prüfbedin­
+gung zu einem 'errorstop'.
+
+
+PROC trage (TEXT CONST dateiname,
+ FILE VAR protokoll, BOOL CONST test)
+
+ Alle ausgewählten Sätze werden in die Datei 'dateiname' getra­
+ gen. Diese wird gegebenenfalls eingerichtet. Falls 'test' ange­
+ geben ist, werden die in den Notizen der Zieldatei enthaltenen
+ Bedingungen geprüft. Nur in diesem Fall muß 'protokoll' initial­
+ isiert sein.
+
+ FEHLER:
+#f1#
+ #on("i")#kein Satz zum Tragen vorhanden#off("i")#
+ Die Quelldatei ist leer oder es ist keine Datei geöffnet.
+#f1#
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Zieldatei existiert, ist aber keine EUDAS-Datei.
+#f1#
+ #on("i")#Zieldatei hat falsche Felderzahl#off("i")#
+ Zu wenig Felder in der Zieldatei.
+
+
+PROC trage satz (TEXT CONST dateiname)
+
+ Der aktuelle Satz wird in die Datei 'dateiname' getragen.
+
+ FEHLER:
+#f1#
+ #on("i")#kein Satz zum Tragen vorhanden#off("i")#
+ Keine Datei geöffnet oder Datei ist am Ende.
+#f1#
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Zieldatei existiert, ist aber keine EUDAS-Datei.
+#f1#
+ #on("i")#Zieldatei hat falsche Felderzahl#off("i")#
+ Zu wenig Felder in der Zieldatei.
+
+
+PROC pruefe (TEXT CONST feldname, BOOL CONST bedingung)
+
+ Wenn die angegebene Bedingung FALSE liefert, wird eine Mel­
+ dung in die Protokolldatei geschrieben und der jeweilige Satz
+ nicht getragen.
+
+
+PROC wertemenge (TEXT CONST feldname. menge)
+
+ Es wird geprüft, ob das angegebene Feld in der Wertemenge
+ enthalten ist. Die einzelnen Werte in der Wertemenge werden
+ dabei durch Komma getrennt. Leerzeichen sind signifikant.
+
+
+PROC feldmaske (TEXT CONST feldname, maske)
+
+ Es wird geprüft, ob das angegebene Feld zu der Maske paßt. Die
+ Zeichen in der Maske haben dabei folgende Bedeutung:
+ '9' trifft auf jede Ziffer zu
+ 'X' trifft auf jedes Zeichen zu
+ 'A' trifft auf jeden Großbuchstaben zu (einschließlich
+ Umlaute)
+ 'a' trifft auf jeden Kleinbuchstaben zu (einschließlich
+ Umlaute und 'ß')
+ '*' trifft auf eine Folge beliebiger Zeichen zu (auch die
+ leere Folge). Eine sparsame Verwendung wird empfoh­
+ len, da die Bearbeitung sehr aufwendig ist.
+ Alle anderen Zeichen treffen nur auf ein gleiches Zeichen zu.
+
+
+PROC eindeutige felder (INT CONST anzahl)
+
+ Gibt an, die wieviel ersten Felder einen Satz eindeutig identifi­
+ zieren sollen. Ein Satz, der mit einem Satz der Datei in diesen
+ Feldern übereinstimmt, wird nicht getragen. Ohne diese Angabe
+ wird keine derartige Prüfung vorgenommen.
+
+
+PROC hole satz (TEXT CONST dateiname)
+
+ Holt den letzten Satz der angegebenen Datei und fügt ihn vor
+ dem aktuellen Satz ein.
+
+ FEHLER:
+#f1#
+ #on("i")#"dateiname" existiert nicht#off("i")#
+#f1#
+ #on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Zieldatei existiert, ist aber keine EUDAS-Datei.
+#f1#
+ #on("i")#Zieldatei hat falsche Felderzahl#off("i")#
+ Zu viele Felder in der angegebenen Datei.
+#f1#
+ #on("i")#Kein Satz zum Tragen vorhanden#off("i")#
+ Die angegebene Datei ist leer.
+#f1#
+ #on("i")#keine Datei geoeffnet#off("i")#
+ Es muß eine virtuelle Datei vorhanden sein.
+
+
+8.4 Verarbeitung
+
+Die ausgewählten Sätze der aktuellen Datei können nach einer
+Verarbeitungsvorschrift verändert oder geprüft werden. Dies ge­
+schieht durch die Prozedur 'verarbeite'. Als Parameter kann ent­
+weder ein Verarbeitungsmuster als FILE oder die Verarbeitungs­
+funktion direkt als Prozedur übergeben werden.
+ Die Vorschrift wird durch den Operator 'V' realisiert.
+
+
+PROC verarbeite (FILE VAR verarbeitungsmuster)
+
+ Die aktuelle Datei wird nach dem angegebenen Muster bearbei­
+ tet. Enthält die Vorschrift, die dem ELAN-Compiler übergeben
+ wird, einen Fehler, wird der Paralleleditor aufgerufen.
+
+ FEHLER:
+#f1#
+ #on("i")#keine Datei geoeffnet#off("i")#
+ Es muß eine virtuelle Datei vorhanden sein.
+
+
+PROC verarbeite (PROC verarbeitungsfunktion)
+
+ Wie oben, nur wird die Vorschrift direkt als Prozedur überge­
+ ben.
+
+ FEHLER:
+#f1#
+ #on("i")#keine Datei geoeffnet#off("i")#
+ Es muß eine virtuelle Datei vorhanden sein.
+
+
+OP V (TEXT CONST feldname, ausdruck)
+
+ Das angegebene Feld des aktuellen Satzes wird durch den Aus­
+ druck ersetzt.
+
+ FEHLER:
+#f1#
+ #on("i")#Das Feld "feldname" ist nicht definiert.#off("i")#
+ Das angegebene Feld ist nicht vorhanden.
+
+
+8.5 Funktionen in Ausdrücken
+
+Für Ausdrücke bei den in diesem Kapitel beschriebenen Prozeduren
+sind einfache Funktionen zur Abfrage von Feldinhalten vorhanden.
+Mit 'f' kann der Inhalt eines benannten Feldes erfragt werden, bei
+'wert' wird der Inhalt erst in eine REAL-Zahl umgewandelt, wobei
+nichtnumerische Zeichen ignoriert werden.
+ Die Prozedur 'textdarstellung' kann dazu verwendet werden,
+den Wert einer TEXT-Variablen als TEXT-Denoter in ELAN-Syntax
+darzustellen.
+ Die Prozedur 'zahltext' kann dazu verwendet werden, aus einer
+REAL-Zahl einen mit der richtigen Zahl von Nachkommastellen ver­
+sehenen, variabel langen Text zu machen.
+
+
+TEXT PROC f (TEXT CONST feldname)
+
+ Liefert den Inhalt des angegebenen Feldes.
+
+ FEHLER:
+#f1#
+ #on("i")#Das Feld "feldname" ist nicht definiert.#off("i")#
+
+
+REAL PROC wert (TEXT CONST feldname)
+
+ Liefert den Inhalt des angegebenen Feldes als REAL. Dabei
+ werden nichtnumerische Zeichen ignoriert, ausgenommen das
+ Minuszeichen und das eingestellte Dezimalkomma (s. 'dezimal­
+ komma'). Tritt kein numerisches Zeichen auf, wird der Wert 0.0
+ geliefert.
+
+ FEHLER:
+#f1#
+ #on("i")#Das Feld "feldname" ist nicht definiert.#off("i")#
+
+
+REAL PROC wert (TEXT CONST feldname, INT CONST kommastellen)
+
+ Wie 'wert' mit einem Parameter, nur daß das Ergebnis auf die
+ angegebene Anzahl von Nachkommastellen gerundet wird.
+
+ FEHLER:
+#f1#
+ #on("i")#Das Feld "feldname" ist nicht definiert.#off("i")#
+
+
+TEXT PROC textdarstellung (TEXT CONST anzeigetext)
+
+ Liefert 'anzeigetext' als TEXT-Denoter, also in Anführungs­
+ strichen. Anführungsstriche im Text werden dabei verdoppelt.
+ Steuerzeichen von 0 bis 31 werden in lesbare Form gebracht.
+
+
+TEXT PROC zahltext (REAL CONST wert, INT CONST kommastellen)
+
+ Liefert den Text des angegebenen Werts mit dem eingestellten
+ Dezimalkomma und mit der angegebenen Zahl von Nachkomma­
+ stellen. Sind die Kommastellen 0, wird auch das Komma unter­
+ drückt. Der Text erhält soviel Stellen, wie zur Darstellung
+ benötigt werden.
+
+
+TEXT PROC zahltext (TEXT CONST feldname,
+ INT CONST kommastellen)
+
+ Wirkt wie 'zahltext (wert (feldname), kommastellen)'.
+
diff --git a/app/eudas/4.3/doc/eudas.ref.9 b/app/eudas/4.3/doc/eudas.ref.9
new file mode 100644
index 0000000..dc2dd0d
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.9
@@ -0,0 +1,194 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (93)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+9 Anzeige
+
+
+
+9.1 Fensterverwalter
+
+Funktionen, die einen Teil des Bildschirms in einem rechteckigen
+Fenster beschreiben, werden über den Fensterverwalter untereinan­
+der koordiniert. Jede Funktion fordert für ihren Fensterbereich eine
+Variable vom Typ FENSTER an. Vor jedem Bildschirmzugriff kann die
+Funktion erfahren, ob andere Programme den Bildschirm im Fenster­
+bereich überschrieben haben. Gleichzeitig meldet sie damit Verän­
+derungen an anderen Fenstern an, die sich mit dem eigenen über­
+schneiden.
+
+
+PROC fenster initialisieren (FENSTER VAR neu)
+
+ Jede Fenstervariable muß vor Benutzung initialisiert werden.
+
+
+PROC fenstergroesse setzen (FENSTER VAR fenster,
+ INT CONST x anf, y anf,
+ x laenge, y laenge)
+
+ Die Fenstergröße des Fensters wird gesetzt. 'x anf' und 'y anf'
+ werden von 1..n gezählt. Die Größe eines 24x80-Bildschirms
+ entspricht den Angaben (1, 1, 79, 24). Da das letzte Zeichen
+ einer Zeile wegen Rollgefahr nicht benutzt werden kann, werden
+ nur 79 Spalten angegeben.
+
+ FEHLER:
+
+ #on("i")#zu viele Fenster#off("i")#
+ Es sind nur 16 verschiedene Fenstergrößen möglich.
+
+
+PROC fenstergroesse (FENSTER CONST fenster,
+ INT VAR x anf, y anf,
+ x laenge, y laenge)
+
+ Meldet die eingestellte Größe des Fensters.
+
+
+PROC fensterzugriff (FENSTER CONST mein fenster,
+ BOOL VAR veraendert)
+
+ Ein Zugriff auf 'mein fenster' wird angemeldet. 'veraendert' gibt
+ an, ob das Fenster seit dem letzten Zugriff durch einen über­
+ schneidenden Zugriff verändert wurde. Beim ersten Zugriff ist
+ 'veraendert' immer TRUE.
+
+
+PROC fenster veraendert (FENSTER CONST fenster)
+
+ Falls ein Unterprogramm eine FENSTER-Variable des Hauptpro­
+ grammes benutzt, kennzeichnet das Unterprogramm das Fenster
+ mit dieser Prozedur als benutzt, damit das Hauptprogramm das
+ Bild neu ausgibt.
+
+
+PROC bildschirm neu
+
+ Gibt an, daß der Bildschirm von einer Funktion benutzt wurde,
+ die ihre Zugriffe nicht über den Fensterverwalter anmeldet.
+ Alle Fenster werden als verändert gekennzeichnet.
+
+
+9.2 Anzeigegrundfunktionen
+
+Sämtliche Anzeigefunktionen werden in einem Fenster abgewickelt,
+dessen Größe durch 'anzeigefenster' bestimmt wird.
+ Die Funktion 'bildausgeben' übernimmt die eigentliche Ausgabe.
+Dabei kann durch Parameter mitgeteilt werden, ob sich an der Datei
+außer der Markierung etwas geändert hat. Hat sich nichts geändert,
+wird zur Optimierung unter Umständen nur die Markierung neu
+ausgegeben. Das Bild wird jedoch auf jeden Fall ganz ausgegeben,
+wenn das Fenster von anderer Seite verändert wurde. Auch das
+Öffnen einer neuen Datei wird automatisch erkannt und richtig
+behandelt.
+ Welche Felder dargestellt werden sollen, kann durch 'feldaus­
+wahl' angegeben werden. Dabei ist für jeden Anzeigemodus eine
+eigene Feldauswahl möglich. Die Darstellung kann durch 'rollen' in
+vertikaler Richtung verschoben werden.
+ Mit 'uebersicht' kann die Übersicht ausgegeben werden. Ihre
+Größe wird durch 'uebersichtsfenster' angegeben.
+
+
+PROC anzeigefenster (INT CONST x anf, y anf,
+ x laenge, y laenge)
+
+ Das Anzeigefenster wird in der entsprechenden Größe reser­
+ viert.
+
+ FEHLER:
+
+ #on("i")#Anzeigefenster zu klein#off("i")#
+ Das Fenster ist zu schmal (< 40 Zeichen), um eine sinnvolle
+ Anzeige zuzulassen.
+
+
+PROC bild ausgeben (BOOL CONST datei veraendert)
+
+ Im Anzeigefenster wird das Bild je nach eingestelltem Modus
+ ausgegeben, wenn das Fenster verändert wurde oder 'satz ver­
+ aendert' TRUE ist. 'satz veraendert' muß immer dann angegeben
+ werden, wenn am Inhalt der virtuellen Datei etwas verändert
+ wurde.
+
+
+PROC feldauswahl (TEXT CONST feldcode)
+
+ Die im aktuellen Modus anzuzeigenden Felder und ihre Reihen­
+ folge werden ausgewählt. Dabei enthält 'feldcodes' an der i-ten
+ Stelle den Code der Feldnummer des Feldes, das an i-ter Posi­
+ tion erscheinen soll.
+
+
+PROC rollen (INT CONST anzahl)
+
+ Die Darstellung wird um die angegebene Anzahl von Zeilen
+ gerollt. Bei einer positiven Angabe wird zu höheren Feld- bzw.
+ Satznummern gerollt (Bild bewegt sich umgekehrt). Beim ersten
+ bzw. letzten Feld bzw. Satz hört das Rollen automatisch auf.
+
+
+PROC uebersichtsfenster (INT CONST x anf, y anf,
+ x laenge, y laenge)
+
+ Legt die Größe des Übersichtsfensters fest.
+
+
+PROC uebersicht (TEXT CONST feldauswahl)
+
+ Ruft eine Übersicht der aktuellen Datei auf, in der geblättert
+ und markiert werden kann. In 'feldauswahl' steht an der Stelle
+ i der Code der Feldnummer, die als i-tes in der Aufzählung
+ erscheinen soll.
+
+
+9.3 Editorfunktionen
+
+Es stehen drei Funktionen zur Verfügung, die den Editor im Anzei­
+gemodus benutzen. Sie dienen zum Einfügen und Ändern sowie zum
+Eingeben eines Suchmusters.
+ Der Editor wird durch ESC 'q' verlassen. Weitere ESC-Funk­
+tionen, die zum Verlassen führen sollen, können durch 'exit zeichen'
+angegegeben und nach Funktionsausführung mit 'exit durch' abge­
+fragt werden.
+
+
+PROC aendern (PROC hilfe)
+
+ Bietet den aktuellen Satz zum Ändern an. Steht die virtuelle
+ Datei am Ende, wird automatisch 'einfuegen' durchgeführt. Bei
+ ESC '?' wird 'hilfe' aufgerufen.
+
+
+PROC einfuegen (PROC hilfe)
+
+ Fügt vor dem aktuellen Satz einen Satz ein, dessen Inhalt im
+ Editor angegeben wird. Bei ESC '?' wird 'hilfe' aufgerufen.
+
+
+PROC suchen (PROC hilfe)
+
+ Im Editor wird eine neue Suchbedingung eingegeben. Bei ESC '?'
+ wird 'hilfe' aufgerufen.
+
+
+PROC exit durch (TEXT CONST zeichenkette)
+
+ Gibt die Zeichen an, die beim Drücken nach ESC zum Verlassen
+ des Editors führen sollen. Die eingegebenen Daten werden je­
+ doch vorher auf jeden Fall noch verarbeitet.
+
+
+TEXT PROC exit durch
+
+ Gibt an, durch welches Zeichen der Editor verlassen wurde.
+
diff --git a/app/eudas/4.3/doc/eudas.ref.fehler b/app/eudas/4.3/doc/eudas.ref.fehler
new file mode 100644
index 0000000..736d009
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.fehler
@@ -0,0 +1,139 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (115)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+Fehlermeldungen
+
+
+
+In diesem Kapitel sind alle Fehlermeldungen aufgeführt, die von
+EUDAS erzeugt werden und zum Abbruch einer Funktion führen
+können.
+
+#on("i")#'n' ist keine Feldnummer#off("i")#
+ Es wurde eine Nummer als Feldnummer angegeben, die nicht er­
+ laubt ist.
+
+#on("i")#Datei ist keine EUDAS-Datei#off("i")#
+ Es wurde versucht, eine andere Datei als EUDAS-Datei zu bear­
+ beiten.
+
+#on("i")#inkonsistente EUDAS-Datei#off("i")#
+ Die interne Struktur der Datei ist zerstört. Kann durch Hardware­
+ probleme (Archiv-Lesefehler) oder EUDAS-interne Fehler ent­
+ standen sein.
+
+#on("i")#EUDAS-Datei voll#off("i")#
+ Eine EUDAS-Datei kann nur eine bestimmte Anzahl von Sätzen
+ aufnehmen (mindestens 5000).
+
+#on("i")#Nicht erlaubtes Dezimalkomma#off("i")#
+ Als Dezimalkomma kann nur ein einzelnes Zeichen angegeben
+ werden.
+
+#on("i")#Zuviel Dateien geoeffnet#off("i")#
+ Es können nicht mehr als 10 Dateien gleichzeitig geöffnet, geket­
+ tet und gekoppelt sein.
+
+#on("i")#Zu viele Felder#off("i")#
+ Alle geöffneten Dateien zusammen dürfen nicht mehr als 256
+ Felder der virtuellen Datei ergeben.
+
+#on("i")#Zu viele Koppelfelder#off("i")#
+ Es dürfen insgesamt nicht mehr als 32 Koppelfelder entstehen.
+
+#on("i")#keine Koppelfelder vorhanden#off("i")#
+ Eine Datei kann nicht gekoppelt werden, wenn Sie kein Koppelfeld
+ besitzt.
+
+#on("i")#keine Datei geoeffnet#off("i")#
+ Es kann nicht gekettet oder gekoppelt werden, wenn noch keine
+ Datei geöffnet wurde. Ebenfalls sind keine Verarbeitungsproze­
+ duren möglich.
+
+#on("i")#Nicht möglich, wenn auf Koppeldatei geschaltet#off("i")#
+ Wenn auf eine Koppeldatei umgeschaltet wurde, ist Öffnen, Ketten
+ und Koppeln nicht möglich.
+
+#on("i")#kein direkter Dateizugriff bei geketteten oder gekoppelten Dateien#off("i")#
+ Wenn Dateien gekettet oder gekoppelt sind, ist Sortieren und
+ Ändern der Feldstruktur nicht möglich.
+
+#on("i")#Datei nicht gesichert#off("i")#
+ Eine vorher geöffnete Datei ist verändert und nicht gesichert.
+
+#on("i")#Datei wird von anderer Task geändert#off("i")#
+ Das Öffnen der Datei zum Ändern ist im Moment nicht möglich, da
+ ein anderer Benutzer sie bereits ändert.
+
+#on("i")#Suchmuster zu umfangreich#off("i")#
+ Ein Suchmuster darf nicht mehr als 100 Vergleiche erfordern.
+
+#on("i")#direkt Drucken nicht moeglich#off("i")#
+ Entweder ist kein Druckprogramm installiert oder die Spooltask
+ reagiert nicht.
+
+#on("i")#Das Feld "Feldname" ist nicht definiert#off("i")#
+ Sie haben einen falschen Namen angegeben.
+
+#on("i")#Kein Satz zum Tragen vorhanden#off("i")#
+ Es wurde versucht, aus einer leeren Datei oder am Dateiende zu
+ tragen.
+
+#on("i")#Zieldatei hat falsche Felderzahl#off("i")#
+ Eine Zieldatei beim Tragen hat weniger Felder als die aktuelle
+ Datei. Daher würden beim Tragen Informationen verlorengehen.
+
+#on("i")#Zieldatei darf nicht geöffnet sein#off("i")#
+ Eine geöffnete Datei ist als Zieldatei nicht zulässig.
+
+#on("i")#Das Feld "Feldname" verletzt die Pruefbedingung#off("i")#
+ Eine Prüfprozedur wurde außerhalb des Tragens aufgerufen und
+ die Bedingung war nicht erfüllt.
+
+#on("i")#Das Feld "Feldname" ist nicht in der Wertemenge#off("i")#
+ Eine Prüfprozedur wurde außerhalb des Tragens aufgerufen und
+ die Bedingung war nicht erfüllt.
+
+#on("i")#Das Feld "Feldname" stimmt nicht mit der Maske ueberein#off("i")#
+ Eine Prüfprozedur wurde außerhalb des Tragens aufgerufen und
+ die Bedingung war nicht erfüllt.
+
+#on("i")#Zu viele Fenster#off("i")#
+ Es sind nicht mehr als 16 verschiedene Größen von Fenstern
+ möglich.
+
+#on("i")#Fenster zu klein#off("i")#
+ Ein Menü wurde in einem zu kleinen Fenster aufgerufen.
+
+#on("i")#Hilfe existiert nicht#off("i")#
+ Es wurde versucht, eine nicht vorhandene Hilfestellung aufzu­
+ rufen.
+
+#on("i")#Hilfe ist leer#off("i")#
+ Die angewählte Hilfestellung enthält keinen Text.
+
+#on("i")#Anzeigefenster zu klein#off("i")#
+ Das Anzeigefenster muß mindestens 40 Zeichen breit sein.
+
+#on("i")#Ungueltige Satznummer#off("i")#
+ Der angegebene Text stellt keine Satznummer dar.
+
+#on("i")#kein rekursiver Aufruf#off("i")#
+ Innerhalb von EUDAS darf 'eudas' nicht erneut aufgerufen wer­
+ den.
+
+#on("i")#Task existiert nicht#off("i")#
+ Es wurde versucht, eine nicht existente Task als Manager einzu­
+ stellen.
+
+
diff --git a/app/eudas/4.3/doc/eudas.ref.inhalt b/app/eudas/4.3/doc/eudas.ref.inhalt
new file mode 100644
index 0000000..ae997cb
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.inhalt
@@ -0,0 +1,120 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (3)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+Inhalt
+
+
+
+ Vorwort . . . . . . . . . . . . . . . . . . . i
+ Inhalt . . . . . . . . . . . . . . . . . . . . iii
+
+
+I. Funktionen zum Nachschlagen
+
+#on("b")#1 Zustände und Bedienung#off("b")#
+#free (0.2)#
+1.1 Zustände . . . . . . . . . . . . . . . . . . . 3
+1.2 Menüs . . . . . . . . . . . . . . . . . . . . 8
+1.3 Auswahl . . . . . . . . . . . . . . . . . . . 8
+1.4 Hilfe und Dialog . . . . . . . . . . . . . . . 9
+1.5 Editor . . . . . . . . . . . . . . . . . . . . 9
+
+#on("b")#2 Zusammenstellung der Funktionen#off("b")#
+#free (0.2)#
+2.1 Menü 'Öffnen' . . . . . . . . . . . . . . . . 13
+2.2 Menü 'Einzelsatz' . . . . . . . . . . . . . . 17
+2.3 Menü 'Gesamtdatei' . . . . . . . . . . . . . . 21
+2.4 Menü 'Drucken' . . . . . . . . . . . . . . . . 23
+2.5 Menü 'Dateien' . . . . . . . . . . . . . . . . 25
+2.6 Menü 'Archiv' . . . . . . . . . . . . . . . . 27
+2.7 Kurzabfrage . . . . . . . . . . . . . . . . . 29
+
+#on("b")#3 Das virtuelle Dateimodell#off("b")#
+#free (0.2)#
+3.1 Dateistruktur . . . . . . . . . . . . . . . . 31
+3.2 Öffnen . . . . . . . . . . . . . . . . . . . . 32
+3.3 Koppeln . . . . . . . . . . . . . . . . . . . 33
+3.4 Änderungen . . . . . . . . . . . . . . . . . . 34
+3.5 Sichern . . . . . . . . . . . . . . . . . . . 36
+3.6 Umschalten auf Koppeldatei . . . . . . . . . . 36
+3.7 Mehrbenutzerbetrieb . . . . . . . . . . . . . 37
+
+#on("b")#4 Ansehen und Bearbeiten#off("b")#
+#free (0.2)#
+4.1 Anzeige . . . . . . . . . . . . . . . . . . . 39
+4.2 Satzauswahl . . . . . . . . . . . . . . . . . 42
+4.3 Sortieren und Reorganisieren . . . . . . . . . 44
+4.4 Bearbeiten . . . . . . . . . . . . . . . . . . 46
+
+#on("b")#5 Drucken und Druckmuster#off("b")#
+#free (0.2)#
+5.1 Druckmustersyntax . . . . . . . . . . . . . . 49
+5.2 Der Druckvorgang . . . . . . . . . . . . . . . 51
+5.3 Interpretation von Musterzeilen . . . . . . . 52
+5.4 Anschluß zum ELAN-Compiler . . . . . . . . . . 56
+5.5 Fehlermeldungen . . . . . . . . . . . . . . . 57
+
+
+II. EUDAS für Programmierer
+
+#on("b")#6 Struktur von EUDAS-Dateien#off("b")#
+#free (0.2)#
+6.1 Der Datentyp SATZ . . . . . . . . . . . . . . 61
+6.2 Der Datentyp EUDAT . . . . . . . . . . . . . . 63
+6.3 Satzposition . . . . . . . . . . . . . . . . . 64
+6.4 Satzzugriffe . . . . . . . . . . . . . . . . . 65
+6.5 Sortieren und Reorganisieren . . . . . . . . . 66
+6.6 EUDAS-Dateien als Assoziativspeicher . . . . . 68
+
+#on("b")#7 Verwaltung der offenen Dateien#off("b")#
+#free (0.2)#
+7.1 Dateiverwaltung . . . . . . . . . . . . . . . 71
+7.2 Feldstruktur . . . . . . . . . . . . . . . . . 75
+7.3 Positionierung . . . . . . . . . . . . . . . . 77
+7.4 Änderungen . . . . . . . . . . . . . . . . . . 78
+7.5 Suchbedingungen . . . . . . . . . . . . . . . 79
+
+#on("b")#8 Funktionen zur Bearbeitung#off("b")#
+#free (0.2)#
+8.1 Drucken . . . . . . . . . . . . . . . . . . . 83
+8.2 Kopieren . . . . . . . . . . . . . . . . . . . 85
+8.3 Tragen . . . . . . . . . . . . . . . . . . . . 87
+8.4 Verarbeitung . . . . . . . . . . . . . . . . . 89
+8.5 Funktionen in Ausdrücken . . . . . . . . . . . 90
+
+#on("b")#9 Anzeige#off("b")#
+#free (0.2)#
+9.1 Fensterverwalter . . . . . . . . . . . . . . . 93
+9.2 Anzeigegrundfunktionen . . . . . . . . . . . . 94
+9.3 Editorfunktionen . . . . . . . . . . . . . . . 95
+
+#on("b")#10 Programmierung der Menüs#off("b")#
+#free (0.2)#
+10.1 Menüformat . . . . . . . . . . . . . . . . . . 97
+10.2 Verwaltung der Menüs . . . . . . . . . . . . . 99
+10.3 Aufruf . . . . . . . . . . . . . . . . . . . . 101
+10.4 Dialog . . . . . . . . . . . . . . . . . . . . 103
+
+#on("b")#11 Programmierung von Anwendungen#off("b")#
+#free (0.2)#
+11.1 Musterprogramme . . . . . . . . . . . . . . . 105
+11.2 Dateianwendungen . . . . . . . . . . . . . . . 109
+11.3 Integrierte Anwendungen . . . . . . . . . . . 111
+
+
+III. Anhang
+
+ Fehlermeldungen . . . . . . . . . . . . . . . 115
+ Prozeduren mit Parametern . . . . . . . . . . 119
+ Register . . . . . . . . . . . . . . . . . . . 125
+
diff --git a/app/eudas/4.3/doc/eudas.ref.macros b/app/eudas/4.3/doc/eudas.ref.macros
new file mode 100644
index 0000000..1d24468
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.macros
@@ -0,0 +1,73 @@
+#*format#
+#limit (13.5)##start (3.5,2.5)##pagelength (21.0)##block#
+#:firsthead (false)#
+#linefeed (1.07)#
+#*macro end#
+#*text#
+#type ("prop10")#
+#linefeed (1.07)#
+#*macro end#
+#*beispiel#
+#type ("12")#
+#linefeed (0.97)#
+#*macro end#
+#*bildschirm#
+#type ("15")#
+#linefeed(0.83)#
+#*macro end#
+#*proc#
+#type ("12")#
+#*macro end#
+#*endproc#
+#free (0.1)#
+#type ("prop10")#
+#linefeed (1.07)#
+#*macro end#
+#*abschnitt ($1,$2,$3)#
+#headodd#
+#on("b")#$1#right#$3 %#off("b")#
+#free (1.0)#
+#end#
+#on("b")##ib(9)#$1#ie(9,"   $3")# $2#off("b")#
+#*macro end#
+#*char($1)#
+$1
+#*macro end#
+#*kapitel ($1,$2,$3,$4)#
+#free (1.3)#
+#"nlq"#
+#type("roman.24")#
+#on("b")##center#$1#off("b")#
+#free (0.2)#
+#type ("roman.18")#
+#on("b")##center#$2 #off("b")#
+#on("b")##center# $3#off("b")#
+#on("b")##center#$4#off("b")#
+#type ("prop10")#
+#free (0.6)#
+#headeven#
+#on("b")#% $2 $3 $4#off("b")#
+#free (1.0)#
+#end#
+#headodd#
+#right##on("b")#%#off("b")#
+#free (1.0)#
+#end#
+#*macro end#
+#*f2#
+#free (0.2)#
+#*macro end#
+#*a ($1)#
+#on("b")#$1.#off("b")# 
+#*macro end#
+#*bsp ($1)#
+#type("12")#$1#type("prop")#
+#*macro end#
+#*f1#
+#free (0.1)#
+#*macro end#
+
+
+
+
+
diff --git a/app/eudas/4.3/doc/eudas.ref.proz b/app/eudas/4.3/doc/eudas.ref.proz
new file mode 100644
index 0000000..2007bc1
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.proz
@@ -0,0 +1,205 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (119)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+Prozeduren mit Parametern
+
+
+
+
+:= (SATZ VAR, SATZ CONST) 6.1
+
+aendern (PROC hilfe) 9.3
+aendern erlaubt : BOOL 7.1
+aenderungen eintragen 7.4
+anzahl dateien : INT 7.1
+anzahl felder : INT 7.2
+anzahl koppeldateien : INT 7.1
+anzeigefenster (INT CONST x anf, y anf,
+ x laenge, y laenge) 9.2
+auf satz (EUDAT VAR, INT CONST satznr) 6.3
+auf satz (EUDAT VAR, TEXT CONST muster) 6.3
+auf satz (INT CONST satznr) 7.3
+ausfuehrtaste (TEXT CONST taste) 10.3
+auswahl anbieten (TEXT CONST name, FENSTER CONST f,
+ TEXT CONST hilfe,
+ PROC (TEXT VAR, INT CONST) inhalt) 10.3
+
+bild ausgeben (BOOL CONST datei veraendert) 9.2
+bildschirm neu 9.1
+
+dateiende (EUDAT CONST) : BOOL 6.3
+dateiende : BOOL 7.3
+dateien loeschen (BOOL CONST auch geaenderte) 7.1
+dateiversion : INT 7.1
+dezimalkomma (TEXT CONST komma) 6.5
+dezimalkomma : TEXT 6.5
+dialog 10.4
+dialogfenster (INT CONST x anf, y anf,
+ x laenge, y laenge) 10.4
+direkt drucken (BOOL CONST ja) 8.1
+druckdatei (TEXT CONST dateiname) 8.1
+drucke (TEXT CONST mustername) 8.1
+
+editget (TEXT CONST prompt, TEXT VAR eingabe,
+ TEXT CONST res, hilfe) 10.4
+eindeutige felder (INT CONST anzahl) 8.3
+einfuegen (PROC hilfe) 9.3
+eudas dateiname (INT CONST dateinr) : TEXT 7.1
+EUDAT 6.2
+exit durch (TEXT CONST exit zeichen) 9.3
+exit durch : TEXT 9.3
+
+f (TEXT CONST feldname) : TEXT 8.5
+fehler ausgeben 10.4
+feld aendern (SATZ VAR, INT CONST feldnr,
+ TEXT CONST inhalt) 6.1
+feld aendern (EUDAT VAR, INT CONST feldnr,
+ TEXT CONST inhalt) 6.4
+feld aendern (INT CONST feldnr, TEXT CONST inhalt) 7.2
+feldauswahl (TEXT CONST feldcodes) 9.2
+feld bearbeiten (SATZ CONST, INT CONST feldnr,
+ PROC (TEXT CONST, INT CONST, INT CONST) bearbeite) 6.1
+feld bearbeiten (EUDAT CONST, INT CONST feldnr,
+ PROC (TEXT CONST, INT CONST, INT CONST) bearbeite) 6.4
+feld bearbeiten (INT CONST feldnr,
+ PROC (TEXT CONST, INT CONST, INT CONST) bearbeite) 7.2
+felderzahl (SATZ CONST) : INT 6.1
+felderzahl (EUDAT CONST) : INT 6.2
+feldindex (SATZ CONST, TEXT CONST muster) : INT 6.1
+feldinfo (EUDAT VAR, INT CONST feldnr, info) 6.5
+feldinfo (EUDAT CONST, INT CONST feldnr) : INT 6.5
+feld lesen (SATZ CONST, INT CONST feldnr,
+ TEXT VAR inhalt) 6.1
+feld lesen (EUDAT CONST, INT CONST feldnr,
+ TEXT VAR inhalt) 6.4
+feld lesen (INT CONST feldnr, TEXT VAR inhalt) 7.2
+feldmaske (TEXT CONST feldname, maske) 8.3
+feldnamen aendern (EUDAT VAR, SATZ CONST namen) 6.2
+feldnamen bearbeiten (INT CONST feldnr,
+ PROC (TEXT CONST, INT CONST, INT CONST) bearbeite) 7.2
+feldnamen lesen (EUDAT CONST, SATZ VAR namen) 6.2
+feldnamen lesen (INT CONST feldnr, TEXT VAR name) 7.2
+feldnummer (TEXT CONST feldname) : INT 7.2
+FENSTER 9.1
+fenstergroesse (FENSTER CONST f,
+ INT VAR x anf, y anf,
+ x laenge, y laenge) 9.1
+fenstergroesse setzen (FENSTER VAR fenster,
+ INT CONST x anf, y anf,
+ x laenge, y laenge) 9.1
+fenster initialisieren (FENSTER VAR fenster) 9.1
+fenster veraendert (FENSTER CONST fenster) 9.1
+fensterzugriff (FENSTER CONST fenster,
+ BOOL VAR veraendert) 9.1
+
+global manager 10.2
+gruppenwechsel (INT CONST gruppennr) : BOOL 8.1
+
+hilfe anbieten (TEXT CONST name, FENSTER CONST f) 10.3
+hole satz (TEXT CONST dateiname) 8.3
+
+inhalt veraendert (INT CONST dateinr) : BOOL 7.1
+ja (TEXT CONST frage, hilfe) : BOOL 10.4
+
+K (TEXT CONST feldname, ausdruck) 8.2
+kette (TEXT CONST dateiname) 7.1
+kopiere (TEXT CONST dateiname, FILE VAR muster) 8.2
+kopiere (TEXT CONST dateiname, PROC kopierfunktion) 8.2
+kopple (TEXT CONST dateiname) 7.1
+
+lfd nr : TEXT 8.1
+
+markierte saetze : INT 7.5
+markierung aendern 7.5
+markierungen loeschen 7.5
+maxdruckzeilen (INT CONST anzahl zeilen) 8.1
+menue anbieten (ROW 6 TEXT CONST menuenamen,
+ FENSTER VAR f,
+ BOOL CONST esc erlaubt,
+ PROC (INT CONST, INT CONST) interpreter) 10.3
+menuedaten einlesen (TEXT CONST dateiname) 10.2
+menue loeschen (TEXT CONST name, INT CONST index) 10.2
+menue loeschen (BOOL CONST hilfen reduzieren) 10.2
+menue manager (DATASPACE VAR ds,
+ INT CONST order, phase,
+ TASK CONST order task) 10.2
+menuenamen (INT CONST index) : THESAURUS 10.2
+
+neuer dialog 10.4
+notizen aendern (EUDAT VAR, INT CONST notiz nr,
+ TEXT CONST notizen) 6.2
+notizen lesen (EUDAT CONST, INT CONST notiz nr,
+ TEXT VAR notizen) 6.2
+
+oeffne (EUDAT VAR, TEXT CONST dateiname) 6.2
+oeffne (TEXT CONST dateiname,
+ BOOL CONST aendern erlaubt) 7.1
+
+pruefe (TEXT CONST feldname, BOOL CONST bedingung) 8.3
+
+reorganisiere (TEXT CONST dateiname) 6.5
+rollen (INT CONST anzahl) 9.2
+
+saetze (EUDAT CONST) : INT 6.3
+SATZ 6.1
+satz aendern (EUDAT VAR, SATZ CONST neuer satz) 6.4
+satz ausgewaehlt : BOOL 7.5
+satz einfuegen (EUDAT VAR, SATZ CONST satz) 6.4
+satz einfuegen 7.4
+satz initialisieren (SATZ VAR satz) 6.1
+satzkombination : INT 7.3
+satz lesen (EUDAT CONST, SATZ VAR satz) 6.4
+satz loeschen (EUDAT VAR) 6.4
+satz loeschen 7.4
+satz markiert : BOOL 7.5
+satznr (EUDAT CONST) : INT 6.3
+satznummer : INT 7.3
+sichere (INT CONST dateinr, TEXT CONST dateiname) 7.1
+sortiere (EUDAT VAR, TEXT CONST reihenfolge) 6.5
+sortiere (EUDAT VAR) 6.5
+sortierreihenfolge (EUDAT CONST) : TEXT 6.5
+status anzeigen (TEXT CONST zeile) 10.3
+std kopiermuster (TEXT CONST dateiname, FILE VAR f) 8.2
+suchbedingung (INT CONST feldnr,
+ TEXT CONST bedingung) 7.5
+suchbedingung loeschen 7.5
+suchen (PROC hilfe) 9.3
+
+textdarstellung (TEXT CONST text) : TEXT 8.5
+trage (TEXT CONST dateiname, FILE VAR protokoll,
+ BOOL CONST test) 8.3
+trage satz (TEXT CONST dateiname) 8.3
+
+unsortierte saetze (EUDAT CONST) : INT 6.5
+
+V (TEXT CONST feldname, ausdruck) 8.4
+verarbeite (FILE VAR verarbeitungsmuster) 8.4
+verarbeite (PROC verarbeitungsfunktion) 8.4
+
+waehlbar (INT CONST menuenr, funktionsnr,
+ BOOL CONST moeglich) 10.3
+wahl (INT CONST stelle) : INT 10.3
+weiter (EUDAT VAR) 6.3
+weiter (EUDAT VAR, TEXT CONST muster) 6.3
+weiter (INT CONST modus) 7.3
+wert (TEXT CONST feldname) : REAL 8.5
+wert (TEXT CONST feldname, INT CONST kommastellen) : REAL 8.5
+wertemenge (TEXT CONST feldname, menge) 8.3
+
+zahltext (REAL CONST wert, INT CONST kommastellen) : TEXT 8.5
+zahltext (TEXT CONST feldname,
+ INT CONST kommastellen) : TEXT 8.5
+zurueck (EUDAT VAR) 6.3
+zurueck (EUDAT VAR, TEXT CONST muster) 6.3
+zurueck (INT CONST modus) 7.3
+
diff --git a/app/eudas/4.3/doc/eudas.ref.reg b/app/eudas/4.3/doc/eudas.ref.reg
new file mode 100644
index 0000000..a34307a
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.reg
@@ -0,0 +1,436 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (125)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+Register
+
+
+
+#columns (2, 0.5)#
+#limit (6.5)#
+ABKUERZUNGEN-Anweisung 49
+Abkürzungsteil 49
+Abkürzungsverzeichnis 68
+Abkürzungszeile 50
+Abschlußzeile 39
+aendern 96
+Ändern 10, 19
+ -, nach Vorschrift 48
+aendern erlaubt 74
+Änderungen 34
+aenderungen eintragen 79
+Änderungsmuster 21
+Alternative 43
+Ankreuzen 8
+anzahl dateien 74
+anzahl felder 75
+anzahl koppeldateien 74
+Anzeige 39, 93
+anzeigefenster 95
+Arbeitskopie 13, 32
+ -, löschen 15, 36
+ -, sichern 15, 36
+Archivmanager 28
+ -, reservieren 29
+Archiv (Menü) 27
+Archivübersicht drucken 27
+Assoziativspeicher 68
+auf koppeldatei 74
+Aufräumen 26
+auf satz 65, 78
+Auf Satz Nr. 17
+Ausdrucken 24
+Ausführen 8
+ausfuehrtaste 8, 102
+AUSWAHL 97
+AUSWAHL: 4
+Auswahl 8
+ -, Format 98
+auswahl anbieten 103
+
+Bearbeiten 46
+BILD 97
+bild ausgeben 95
+bildschirm neu 94
+
+Datei, aufräumen 26
+ -, kopieren (logisch) 25
+ -, kopieren vom Archiv 27
+ -, löschen 25
+ -, löschen auf Archiv 28
+ -, Platzbedarf 26
+ -, reorganisieren 26
+ -, schreiben auf Archiv 27
+ -, umbenennen 25
+ -, virtuelle 32, 71
+Dateianwendungen 109
+Dateien Archiv, Übersicht 27
+dateiende 64, 78
+dateien loeschen 74
+Dateien (Menü) 25
+Dateien System, Übersicht 25
+Dateilimit 52
+Dateimanager 28
+Dateiname 40
+dateiversion 75
+DATUM 45
+Dezimalkomma 45
+dezimalkomma 67
+dialog 104
+Dialog 9, 103
+dialogfenster 104
+DIN 45
+direkt drucken 83f.
+Druckausgabe, Richtung 23
+druckdatei 85
+drucke 84
+Drucken 23, 49, 83
+ -, Archivübersicht 27
+Drucken (Menü) 23
+Druckmuster 23, 49, 83
+ -, Fehler 56
+Druckvorgang 51
+
+editget 104
+EDITIEREN: 6
+Editieren 23
+ -, Zeile 9
+Editor 9, 29
+eindeutige felder 47, 89
+einfuegen 96
+Einfügen 10, 19
+ -, Satz 36
+ -, Zeile 10
+EINGABE: 4
+Eingabe 9
+Einzelsatz (Menü) 17
+ELAN-Compiler 56
+ELAN-Kommandos 8
+ENDE 97
+Endekennzeichnung 40
+ESC '?' 6
+ESC '9' 4
+ESC '1' 4
+ESC '?' 4
+ESC '?' 3
+ESC 'D' 5
+ESC ESC 3
+ESC 'F' 5f.
+ESC 'g' 5
+ESC 'h' 4ff.
+ESC 'K' 36
+ESC OBEN 5
+ESC 'p' 5
+ESC 'q' 4, 6
+ESC RUBIN 5
+ESC RUBOUT 5
+ESC UNTEN 5
+ESC 'w' 4f.
+ESC 'z' 4f.
+eudas 29
+EUDAS: 3
+EUDAS-Datei, aufspalten 110
+ -, drucken 23, 49, 83
+ -, einrichten 13
+ -, ketten 14, 32
+ -, kopieren 21, 46, 85
+ -, koppeln 14, 32
+ -, nach Vorschrift ändern 48
+ -, öffnen 13, 32
+ -, reorganisieren 67
+ -, sortieren 22
+ -, Struktur 31, 61
+ -, tragen 46, 87
+ -, Übersicht 22
+ -, verändern 21
+eudas dateiname 75
+EUDAT 61, 63, 109
+EUMEL-Netz 28
+exit durch 96
+
+f 91
+FEHLER 5
+fehler ausgeben 104
+Feld 31
+FELD 98
+feld aendern 62, 65, 76
+Feldauswahl 20, 41, 95
+feld bearbeiten 62, 65, 76
+felderzahl 62, 63
+feldindex 62
+feldinfo 66, 77
+Feldinhalt 31, 39
+feld lesen 65, 76
+feldmaske 47, 89
+Feldmuster 53
+Feldname 31, 39
+ -, ändern 16
+ -, anfügen 16
+feldnamen aendern 63
+feldnamen bearbeiten 76
+feldnamen lesen 64, 76
+feldnummer 76
+Feldstruktur 15
+Feldtyp 31, 42
+Feldtypen 45, 66
+ -, ändern 16
+Feldvergleich 43
+Fenster 93
+fenstergroesse 94
+fenstergroesse setzen 93
+fenster initialisieren 93
+fenster veraendert 94
+fensterzugriff 94
+folgedatei 75
+Folgezeilen 41
+Formular 39
+FRAGE: 5
+Fragen 9
+Funktion, ausführen 8
+ -, gesperrte 8
+
+Gesamtdatei (Menü) 21
+Gib Kommando: 6
+global manager 36, 100
+Gruppe 51
+GRUPPE-Anweisung 49
+gruppenwechsel 51, 85
+
+Hauptdatei 32
+HILFE: 4
+HILFE 97, 99
+Hilfe 9
+ -, Format 98
+hilfe anbieten 103
+Holen 19
+hole satz 89
+HOP LINKS 4
+HOP 'o' 4
+HOP OBEN 3ff.
+HOP RECHTS 4
+HOP RETURN 4
+HOP RUBOUT 4
+HOP UNTEN 3ff.
+HOP 'x' 4
+
+inhalt veraendert 74
+Initialisieren 28
+Initialisierungsteil 49
+
+ja 104
+
+K 46, 86
+kette 73
+Ketten 14, 32
+Klassenwechsel 106
+Kombinationen 34
+Kommandos 8
+Kommandozeile 50
+kopiere 86
+Kopieren 21, 46, 85
+Kopieren (logisch) 25
+Kopieren vom Archiv 27
+Kopiermuster 21, 46
+KOPPEL 40
+Koppeldatei, umschalten auf 36
+Koppelfelder 33
+Koppeln 14, 32f.
+kopple 72
+Kurzabfrage 29
+
+LEER 3f.
+Leertaste 8
+lfd nr 85
+lineform 24
+LINKS 3f.
+Literaturangaben 108
+Löschen 25
+ -, Satz 36
+ -, Zeile 10
+Löschen auf Archiv 28
+
+Manager 13
+Manager (Mehrbenutzer) 16, 36
+markierte saetze 81
+Markierung 18, 40, 42
+markierung aendern 81
+Markierungen löschen 22
+markierungen loeschen 81
+maxdruckzeilen 85
+MEHR-Anweisung 50
+MENUE 97
+Menü 8
+ -, Aufruf 101
+ -, Verwaltung 99
+menue anbieten 101
+menuedaten einlesen 99
+Menüformat 97
+menue loeschen 100
+menue manager 100
+menuenamen 100
+Modi 55
+MODUS-Anweisung 50
+Musterprogramme 105
+Musterteil 50
+Musterzeichen 53
+Musterzeile 50
+ -, Interpretation 52
+
+Nachbearbeiten 24
+Nachspann 49
+NACHSPANN-Anweisung 49
+Namenskonflikte 33
+neuer dialog 104
+Normalmodus 55
+Notizen 15, 31, 64
+notizen aendern 64, 77
+notizen lesen 64, 77
+
+'o' 4
+OBEN 3f.
+ODER-Verknüpfung 43
+oeffne 63, 72
+Öffnen 32
+Öffnen (Menü) 13
+
+pageform 24
+Paralleleditor 56, 83
+Paßwort 29
+Platzbedarf 26
+Positionieren 17, 31, 64, 77
+Priorität 44
+Programmzeile 51
+Protokolldatei 47
+Prüfbedingungen 16, 31, 47, 64,
+ 87
+pruefe 47, 88
+Pufferplatz 54
+
+RECHTS 3f.
+Refinement 56
+reorganisiere 67
+Reorganisieren 26, 45, 67
+Reservieren 29
+RETURN 4
+Richtung Druckausgabe 23
+rollen 95
+Rollen 41
+RUBIN 4
+RUBOUT 4
+
+saetze 64
+SATZ 61
+Satz 31
+satz aendern 66
+satz ausgewaehlt 80
+Satzauswahl 42
+Satzeditor 9
+satz einfuegen 66, 79
+Satzformular 39
+satz initialisieren 62
+satzkombination 77
+satz lesen 66
+satz loeschen 66, 79
+satz markiert 81
+satznr 64
+satznummer 77
+Satznummer 39
+Satzposition 64
+Satzzeiger 31
+Satzzugriffe 65
+Schreiben auf Archiv 27
+SEITE 99
+sichere 73
+Sichern 15, 36
+sortiere 67
+Sortieren 22, 31, 44, 66
+Sortierreihenfolge 31, 44
+sortierreihenfolge 67
+Sortierzustand 45
+Spaltendruck 52
+Sperre 36
+Standard-Kopiermuster 21, 46
+status anzeigen 103
+Statuszeile 3
+std kopiermuster 87
+Suchbedingung 17, 39, 42
+ -, löschen 18
+ -, setzen 18
+suchbedingung 80
+suchbedingung lesen 80
+suchbedingung loeschen 80
+suchen 96
+Suchen, Optimierung 44
+Suchmuster 42
+ -, eingeben 10
+
+Tabellenmodus 55
+Tasten 3
+Tastenfunktionen 3
+TEXT 45
+textdarstellung 91
+Textdatei, ausdrucken 24
+ -, editieren 23
+ -, nachbearbeiten 24
+Textzeile 49f.
+trage 88
+Tragen 16, 19, 21, 46, 87
+trage satz 88
+
+uebersicht 95
+uebersichtsfenster 95
+Umbenennen 25
+Umbruch 40, 55
+Umschalten auf Koppeldatei 36
+UND-Verknüpfung 43
+unsortierte saetze 67
+UNTEN 3f.
+Überschrift 39
+Übersicht 22, 41
+Übersicht Dateien Archiv 27
+Übersicht Dateien System 25
+
+V 48, 90
+Verändern 21
+verarbeite 90
+Verarbeitung 89
+Verknüpfung von Bedingungen
+43
+virtuelle Datei 32, 71
+VORSPANN 98
+Vorspann 49
+VORSPANN-Anweisung 49
+
+waehlbar 102
+wahl 103
+Warten 6
+weiter 65, 78
+Weiter 17
+wert 91
+wertemenge 47, 88
+WIEDERHOLUNG-Anweisung 49
+Wiederholungsteil 49
+
+'x' 4
+
+ZAHL 45
+zahltext 91
+Zeichen, reservierte 44
+ZEIGEN: 6
+Zeilenende 54
+Zeilenwiederholung 55
+Zielarchiv 28
+Zurück 17
+zurueck 65, 78
+Zustand 3
+Zustandsübergänge 7
+
diff --git a/app/eudas/4.3/doc/eudas.ref.titel b/app/eudas/4.3/doc/eudas.ref.titel
new file mode 100644
index 0000000..223a839
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.titel
@@ -0,0 +1,91 @@
+#limit (14.0)#
+____________________________________________________________________________
+
+
+#on("b")##on ("u")#
+#center#Betriebssystem E U M E L
+#off ("u")#
+
+
+#center#gs-MP BAP
+
+
+
+
+#off("b")#
+#center#Lizenzfreie Software der
+#on ("b")#
+
+#center#Gesellschaft für Mathematik und Datenverarbeitung mbH,
+#center#5205 Sankt Augustin
+
+
+#off("b")#
+#center#Die Nutzung der Software ist nur im Schul- und Hochschulbereich für
+#center#nichtkommerzielle Zwecke gestattet.
+
+#center#Gewährleistung und Haftung werden ausgeschlossen
+
+
+____________________________________________________________________________
+#page#
+#free (6.0)#
+#on("b")#EUDAS#off("b")#
+#free (1.0)#
+#on("b")#Anwender-#off("b")#
+#on("b")#Datenverwaltungssystem#off("b")#
+#free (2.0)#
+#on ("b")#VERSION 4#off("b")#
+#free(1.0)#
+#on("u")#                                                    #off("u")#
+#free (0.5)#
+#on("b")#REFERENZHANDBUCH#off("b")#
+#block#
+#page#
+#free (9.5)#
+Hergestellt mit Hilfe der EUMEL-Textverarbeitung und des Pro­
+gramms FontMaster der Martin Schönbeck GmbH.
+#free (1.7)#
+Ausgabe September 1987
+
+Dieses Handbuch und das zugehörige Programm sind urheberrechtlich
+geschützt. Die dadurch begründeten Rechte, insbesondere der Ver­
+vielfältigung in irgendeiner Form, bleiben dem Autor vorbehalten.
+
+Es kann keine Garantie dafür übernommen werden, daß das Pro­
+gramm für eine bestimmte Anwendung geeignet ist. Die Verantwor­
+tung dafür liegt beim Kunden.
+
+Das Handbuch wurde mit größter Sorgfalt erstellt. Für die Korrekt­
+heit und Vollständigkeit der Angaben wird aber keine Gewähr über­
+nommen. Das Handbuch kann jederzeit ohne Ankündigung geändert
+werden.
+
+(c) Copyright 1987 Thomas Berlage
+ Software-Systeme
+ Im alten Keller 3
+#free (0.1)#
+ D-5205 Sankt Augustin 1
+#page#
+#free (7.0)#
+#center##on("b")#I.#off("b")#
+#free (1.0)#
+#center##on("b")#FUNKTIONEN#off("b")#
+#center##on("b")#ZUM#off ("b")#
+#center##on("b")#NACHSCHLAGEN#off("b")#
+#page#
+#free (7.0)#
+#center##on("b")#II.#off("b")#
+#free (1.0)#
+#center##on("b")#EUDAS#off("b")#
+#center##on("b")#FÜR#off ("b")#
+#center##on("b")#PROGRAMMIERER#off("b")#
+#page#
+#free (7.0)#
+#center##on("b")#III.#off("b")#
+#free (1.0)#
+#center##on("b")#ANHANG#off("b")#
+
+
+
+
diff --git a/app/eudas/4.3/doc/eudas.ref.vorwort b/app/eudas/4.3/doc/eudas.ref.vorwort
new file mode 100644
index 0000000..f911be8
--- /dev/null
+++ b/app/eudas/4.3/doc/eudas.ref.vorwort
@@ -0,0 +1,81 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (1)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+____________________________________________________________________________
+
+
+#on("b")##on ("u")#
+#center#Betriebssystem E U M E L
+#off ("u")#
+
+
+#center#EUDAS
+
+
+
+
+#off("b")#
+#center#Lizenzfreie Software der
+#on ("b")#
+
+#center#Gesellschaft für Mathematik und Datenverarbeitung mbH,
+#center#5205 Sankt Augustin
+
+
+#off("b")#
+#center#Die Nutzung der Software ist nur im Schul- und Hochschulbereich für
+#center#nichtkommerzielle Zwecke gestattet.
+
+#center#Gewährleistung und Haftung werden ausgeschlossen
+
+
+____________________________________________________________________________
+#page#
+#center#1
+
+Vorwort
+
+
+
+Lieber EUDAS-Benutzer!
+
+Dies ist das zweite Handbuch, das Sie zu EUDAS bekommen. Wenn
+Sie sich mit EUDAS noch nicht auskennen, sollten Sie zunächst das
+#on("i")#Benutzerhandbuch#off("i")# zu Rate ziehen, ehe Sie in dieses Handbuch
+schauen.
+
+ Das #on("i")#Referenzhandbuch#off("i")# ist in zwei Teile geteilt. Im ersten Teil
+finden Sie eine Übersicht über alle EUDAS-Funktionen (im Kapitel
+2) sowie zusammengefaßte Informationen über die Bedienung (Kapi­
+tel 1) und die genaue Wirkung der einzelnen Funktionen (Kapitel 3
+bis 5). Dieser Teil soll Ihnen zum Nachschlagen dienen, wenn Sie
+eine bestimmte Information suchen.
+ Im zweiten Teil sind alle Informationen zusammengefaßt, die
+ein Programmierer zur Benutzung der EUDAS-Funktionen braucht. Es
+sei an dieser Stelle jedoch davon abgeraten, sofort eigene Program­
+me zu schreiben, da sich in vielen Fällen die gleiche Wirkung auch
+durch Programmierung innerhalb von EUDAS-Funktionen erreichen
+läßt (zum Beispiel in Druck- und Änderungsmustern).
+ Im Zweifelsfall orientieren Sie sich anhand von Kapitel 11, wie
+Sie Ihr Problem am besten lösen können.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/eudas/4.3/doc/ref.abb.1-1 b/app/eudas/4.3/doc/ref.abb.1-1
new file mode 100644
index 0000000..d3b3217
--- /dev/null
+++ b/app/eudas/4.3/doc/ref.abb.1-1
@@ -0,0 +1,42 @@
+#limit (13.5)#
+#start (3.5, 5.0)#
+#lpos (0.5)##c pos (3.5)##c pos (4.7)##cpos (7.0)##c pos (10.5)#
+#table#
+      eudas   ESC q  
+
+    ESC ESC   ESC h
+#free (0.2)#
+GIB KDO:     EUDAS  
+#free (0.2)#
+    ESC h    
+    RET        LEER  'Buchst.'  
+
+        ESC q          
+
+        FEHLER
+
+
+  WARTEN      
+      n, j  
+        FRAGE
+
+      RET  
+        EINGABE
+#linefeed (0.5)#
+
+
+        ESC z          
+      ESC q  
+#linefeed (1.0)#
+        AUSWAHL
+
+      ESC q  
+        EDITIEREN
+
+      ESC q  
+        SATZEDITOR
+ESC ?   ESC q        
+      ESC q  
+HILFE       ZEIGEN
+
+
diff --git a/app/eudas/4.3/doc/register b/app/eudas/4.3/doc/register
new file mode 100644
index 0000000..9cca0fc
--- /dev/null
+++ b/app/eudas/4.3/doc/register
@@ -0,0 +1,490 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (181)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+Register
+
+
+
+#columns (2, 0.5)#
+#limit (6.5)#
+% 63, 69, 148
+%% 141
+& 63, 69, 103, 148
+<!> 57
+-- 103
+.. 102
+.a$ 65
+'+' 107
+'-' 107
+
+Abbruch 35
+Abkürzungen 133
+Abkürzungsteil 134, 140
+Absatzmarken 125, 129
+Abschlußzeile 45
+Abschneiden 71
+Abschnitt 67, 69, 134
+Alternative 99
+ -, globale 100
+ -, lokale 99
+AND 162
+Ändern 55
+Änderungen 83, 85, 90, 95
+ -, automatisch 121
+Änderungsmuster 121, 166
+Anführungsstrich 27, 34
+Ankreuzen 36, 40
+Anrede 138
+Anweisung 63
+ -, Textkosmetik 74
+Anzeige 44
+ -, rollen 97
+Arbeitsbereich 16
+Arbeitskopie 56, 84, 173
+ -, Beispiel 58
+ -, löschen 57
+Arbeitstask 16
+Archiv 32
+ -, anmelden 34
+ -diskette 36
+ -, lesen 34
+ -, löschen 176
+ -manager 175, 177
+ -menü 33, 174
+ -name 34, 36
+ -, schreiben 36
+ -übersicht 175
+Arithmetik 161
+Attribut 4, 29
+Aufräumen 173
+Ausdrucken 66
+Ausdrücke 116, 151
+ -, Zusammensetzung 152
+Ausgabedatei 66
+Ausgaberichtung 65
+Auswahlzustand 36, 40
+Automatische Änderungen 121
+
+Bedienungsregeln 39
+begin 16
+Benutzerhandbuch i
+Berechnungen 8
+Bewegen 45
+Bildschirmaufbau 45
+Bitte warten 34, 40
+blättern 46
+BOOL 154, 162
+
+Carriage Return 15
+CAT 167
+CONST 155
+CR 15
+Cursor 35, 46
+ -tasten 54
+
+date 137
+Datei 27
+ -arten 27
+ -, aufräumen 173
+ -auswahl 36
+ -größe, Begrenzung 124
+ -, kopieren 172
+ -limit 71
+ -, löschen 38, 172
+ -namen 172
+ -, Platzbedarf 173
+ -, reorganisieren 174
+ -sperre 95
+ -, umbenennen 172
+ -verwaltung 37
+ -, virtuelle 83
+Dateien, Archiv 174
+ - (Menü) 38, 171
+ -, System 171
+DATEIENDE 106
+Daten, ändern 55
+ -, anzeigen 44
+ -, sichern 33
+ -typen 152
+ -typen, umwandeln 154
+ -verwaltung 3
+Datum 44, 99, 133, 137
+DATUM 112
+DECR 167
+Denotation 154
+Dezimalkomma 111, 161
+Dezimalpunkt 148
+DIN 112
+Diskette 28, 32
+ -, formatieren 176
+ -, initialisieren 176
+Diskettenlaufwerk 175
+Doppeleinträge 121
+DOS 178
+Druckausgabe, Bearbeitung 125
+Drucken 7, 61
+ -, Ablauf 66
+ -, Aufruf 64, 66
+ - (Menü) 22, 65
+ -, Übersicht 175
+Druckersteuerungsanweisungen
+ 74, 124
+Druckmuster 13, 23, 61, 166
+ -, Fehler 134
+ -, Übersetzung 134, 142
+ -, Zeilenlänge 71
+Druckrichtung 123
+Druckverfahren 62
+
+Editieren 64
+Editor 34, 41, 52, 125
+eindeutige felder 121
+Einfügen 18, 52
+Eingabe, Daten 52
+ -, Suchmuster 46
+Eingabeüberprüfung 112
+Eingabezustand 35, 40
+Eingangsmenü 17
+Einzelsatz (Menü) 18, 44, 92, 97
+ELAN-Anweisungen 141
+ELAN-Ausdrücke 116, 151
+ELAN-Compiler 134
+ELIF 168
+ELSE 139
+ENDE 45
+Endesatz 45, 48, 53, 85
+ENTER 15
+ESC '1' 107
+ESC '?' 31, 39, 40
+ESC '9' 107
+ESC 'D' 99
+ESC ESC 41, 111
+ESC 'F' 67
+ESC 'g' 99
+ESC 'h' 35, 39, 40, 55, 107
+ESC 'K' 92
+ESC OBEN 97
+ESC 'p' 99
+ESC 'P' 118
+ESC 'q' 32ff.,40 , 47, 65, 107
+ESC RUBIN 54
+ESC RUBOUT 54
+ESC UNTEN 97
+ESC 'w' 32, 40, 53
+ESC 'z' 32, 36, 40, 95
+Etiketten 126
+eudas 30, 125
+EUDAS-Archivdiskette 11, 29
+EUDAS-Datei 27, 61, 171
+ -, drucken 61
+ -, einrichten 17, 51
+ -, Grenzen 29
+ -, kopieren 113
+ -, Mehrfachbenutzung 93
+ -, Struktur 28
+EUDAS, Aufruf 30
+ -, Installation 11
+ -, Start 15
+ -, Verlassen 24, 32
+EUMEL-Netz 175
+EUMEL-Textverarbeitung 5
+EUMEL-Zeichencode 110
+
+f 117, 134, 156
+FALSE 154
+Fehler, Druckmuster 66
+ -, quittieren 36
+ -zustand 35, 40
+Feld 29
+Feldauswahl 97, 106
+Felder, anfügen 111, 114
+Feldinhalt 29, 156, 160
+feldmaske 120
+Feldmuster 63, 69
+Feldmustertypen 71
+Feldnamen 29, 67
+ -, abfragen 67
+ -, Abgrenzung 72
+ -, ändern 112
+ -, eingeben 51
+ -, Länge 133
+Feldreihenfolge 113
+Feldstruktur 111
+Feldteil 45
+Feldtypen 110, 154
+ -, ändern 111
+Feldvergleich 103
+Formatieren 177
+Formbrief 74
+Formular 8, 44
+Fragezustand 38, 40
+Funktionen 152
+ -, ausführen 31, 46
+ -, auswählen 30
+ -, gesperrt 31
+Fußzeile 44
+
+Gib Kommando 41, 11
+global manager 93
+GRUPPE 145
+Gruppen 144
+ -definition 145
+ -, mehrere 145
+ -wechsel 145
+gruppenwechsel 145
+
+halt 39, 110
+Hardwarefehler 33
+Hauptdatei 87ff.
+Hilfe 31
+Hilfezustand 31, 40
+Hilfstexte 13, 31
+Hintergrunddiskette 12
+Hintergrundengpaß 124
+Holen 56
+HOP OBEN 40, 98, 106
+HOP RETURN 106
+HOP RUBIN 54
+HOP RUBOUT 54
+HOP UNTEN 40, 98, 106
+HOP 'x' 98
+
+IF 117
+IF-Abfragen 161, 168
+IF-Anweisungen 138
+INCR 167
+Init 176
+Initialisierungsteil 124, 143
+Installation 11
+int 140
+INT 153
+
+K 113
+Karteikarten 5
+KB 173
+Ketten 13, 83, 85, 95
+Kilobyte 173
+Klammern 163
+ -, spitze 72
+Kombination 89
+Kombinationsnummer 90
+Kopieren, logisch 172
+ -, EUDAS-Datei 112
+ - (vom Archiv) 34, 176
+Kopieranweisung 113
+Kopiermuster 113, 115, 166
+ -, Übersetzung 116
+KOPPEL 92
+Koppeldatei, Markierung 105
+ -, Position 93
+ -, umschalten 92
+Koppelfeld 86, 89
+ -, übernehmen 92
+Koppeln 13, 83, 85, 95
+ -, mehrere Dateien 87
+Koppelvorgang, Schema 87
+Korrekturversion 14
+
+Länge, feste 70, 137
+ -, variable 70
+Leerautomatik 73
+Leertaste 17, 31
+length 158
+lfd nr 137, 157
+limit 71, 125
+lineform 125, 129
+LINKS 31, 35
+linksbündig 71
+Linksschieben 128
+list (archive) 34
+Löschen 55
+ - (auf Archiv) 176
+ - (Datei) 172
+
+Manager 93, 95
+Managertask 175
+MARK 104
+Markieren 104
+ -, in Übersicht 107
+Markierung 104
+ -, löschen 105
+maxdruckzeilen 124
+MEHR 129
+Mehrfachbenutzung 93
+Menü 30
+Menüzustand 31, 40
+min 155
+Modi 128
+Multi-User 12
+Multi-User-System 16
+Musterbrief 139
+Musterteil 135
+Musterzeichen 70
+
+Nachbearbeitung 125
+Nachspann 68, 144
+NACHSPANN 68
+Negation 103
+Netz 175
+Numerieren 137
+
+'o' 40, 98
+OBEN 30, 106
+ODER 100
+Öffnen 17, 21, 43, 51, 57, 83, 95
+ - (Menü) 30
+Operatoren 152, 155
+ -, Priorität 163
+OR 163
+
+pageform 125
+Paralleleditor 67, 142
+Parameter 152
+Paßwort 94, 177
+Pfeiltasten 54
+Platzbedarf, Datei 173
+pos 159
+Position, feste 69
+ -, variable 69
+Positionierung 48
+Proportionalschrift 129
+Prüfbedingungen 118
+pruefe 120
+PUBLIC 13
+
+REAL 153
+real 155
+RECHTS 31, 55
+rechtsbündig 71, 137
+Referenzhandbuch i, 79
+Refinement 134, 140, 163
+Reorganisieren 174
+Reservieren 178
+RET 15
+RETURN 15
+Richtung, Druckausgabe 65, 123
+Rollen 97, 106
+RUBIN 35, 54
+RUBOUT 35, 54
+Runden 160
+
+Satz 29
+ -, anwählen 46
+ -editor 41, 47, 53, 92, 98
+ -, einfügen 52
+ -, holen 56
+ -, löschen 55
+ -, tragen 55
+Satz.Nr 46, 48
+Satznummer 45, 90
+Satzauswahl, kopieren 114
+Schreiben (auf Archiv) 36, 176
+Schreibmarke 35
+Schrifttypen 125
+Selektion 48
+Sichern 20, 56, 84, 95
+Single-User 12
+Single-User-System 16
+Sortieren 109
+ -, Optimierung 110
+ -, Zieldatei 115
+Sortierreihenfolge 109
+Spaltenbreite 126
+Spaltendruck 126
+Speicherplatz 14, 38, 176
+ -, Datei 173
+Sperren von Dateien 95
+Standard-Kopiermuster 115
+Stationsnummer 175
+Statistik 169
+Statuszeile 31, 39
+Stern 50, 101
+SUB 158, 163
+subtext 158
+SUCH 47
+Suchbedingung f. Drucken 67
+Suchbedingung, Kombination 49
+Suchbedingung löschen 48
+Suchbedingung setzen 46
+Suchen 21, 46
+ -, Optimierung 104
+Suchmuster 47, 99
+ -, Eingabe 47
+SV-Taste 16, 39
+System 32
+
+Tabellenmodus 128
+Tagesdatum 99
+Task, Manager 93
+Tasks 13
+Teildatei 114
+Teiltexte 158
+TEXT 112, 153
+text 140
+Textdatei 28, 61, 171
+ -, ändern 65
+ -, ansehen 65
+ -, ausdrucken 66
+ -, editieren 64
+Texte, verketten 156
+Text-Funktionen 156
+Textkonstanten 139
+Text, konstanter 117
+Text, Länge 158
+Textverarbeitung 3, 123
+THEN 139
+Tragen 55, 118
+TRUE 154
+
+Uhrzeit 133
+Umbruch 129
+Umlaute 143
+Umschalten auf Koppeldatei 92
+UND 100ff.
+UNTEN 30, 106
+Überschrift 45, 68
+Übersicht (Archiv) 34, 175
+ - (Dateien) 37, 171
+ - (Sätze) 105
+
+V 122
+VAR 165
+Variablen 165
+ -, Initialisierung 143, 167
+ -, Lebensdauer 166
+ -, Typ 165
+Verändern 121
+Vergleiche 102, 162
+virtuelle Datei 83
+Vorspann 68, 144
+VORSPANN 68
+
+Weiter 45, 48, 90
+wert 148, 160
+wertemenge 119
+WIEDERHOLUNG 63, 126
+
+'x' 36, 40
+
+ZAHL 110
+zahltext 148, 160
+Zeichen, reservierte 64, 69, 103
+Zeigen 40
+Zeile einfügen 54
+Zeilenfortsetzung 129
+Zeilenlänge 71
+Zielarchiv 175
+Zieldatei, Struktur 113
+Zurück 45, 48, 90
+Zustand 31, 40
+Zuweisung 166
+
+
diff --git a/app/eudas/4.3/doc/uedas.hdb.4 b/app/eudas/4.3/doc/uedas.hdb.4
new file mode 100644
index 0000000..ecbfd58
--- /dev/null
+++ b/app/eudas/4.3/doc/uedas.hdb.4
@@ -0,0 +1,686 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (27)#
+#headodd#
+#center#EUDAS#right#%
+
+#end#
+#headeven#
+%#center#EUDAS
+
+#end#
+#center#1
+
+4 Umgang mit Dateien und Menüs
+
+
+
+Zu Anfang dieses Teils sollen Sie zunächst die Terminologie von
+EUDAS kennenlernen. Das Karteikartenmodell des ersten Kapitels
+muß ja auf einem Rechner realisiert werden. Dazu müssen erst eini­
+ge Ausdrücke erklärt werden.
+
+
+4.1 EUDAS-Dateien
+
+Der wichtigste Ausdruck, der Ihnen noch sehr häufig begegnen wird,
+ist #on("i")#Datei#off("i")#. Eine Datei ist eine Sammlung von Informationen in einem
+Computer, die als ein Objekt transportiert und behandelt werden
+können. Dieser Name wurde analog zu "Kartei" gebildet, mit dem
+Unterschied, daß eine "Daten-Kartei" gemeint ist.
+ Jede Datei hat einen eigenen Namen, durch den sie identifiziert
+wird. Der Name ist oft in Anführungsstriche eingeschlossen - die
+Anführungsstriche gehören jedoch nicht zum Namen, sondern dienen
+nur zur Abgrenzung, welche Zeichen zum Namen gehören. Der Name
+ist also wie die Aufschrift auf einem Aktenordner. Wenn alle Ordner
+im Schrank stehen, können Sie anhand des Namens den richtigen
+Ordner finden, anderenfalls müßten Sie alle Ordner öffnen.
+
+#on("b")#Dateiarten#off("b")# Dateien werden nun für viele verschiedene Arten
+von
+Informationen benutzt. Sie können einerseits Texte enthalten oder
+auch Karteien, Grafiken, Formeln oder Zahlenkolonnen. Sie haben
+bereits im ersten Kapitel den Unterschied zwischen Datenverwaltung
+und Textverarbeitung kennengelernt. In diesem Zusammenhang sind
+die beiden ersten Verwendungsweisen wichtig.
+
+#limit (12.0)#
+ #on("i")#Textdateien#off("i")#
+ sind Dateien, die normale Texte enthalten, die mit
+ dem Editor verändert und einfach ausgedruckt
+ werden können. In ihnen werden also Informationen
+ gespeichert, wie die Textverarbeitung sie benötigt.
+
+ #on("i")#EUDAS-Dateien#off("i")#
+ sind dagegen Dateien, die Informationen in der
+ Form von Karteikarten enthalten. Sie haben also
+ die Struktur, wie sie von der Datenverwaltung be­
+ nötigt wird.
+#limit (13.5)#
+
+ Der Computer kann aber auch alle Arten von Dateien gleich­
+behandeln, und zwar dann, wenn der Inhalt der Dateien nicht be­
+trachtet werden muß.
+ Ein häufiger Fall ist zum Beispiel, wenn Dateien zur Sicherung
+auf eine Diskette geschrieben werden sollen. In diesem Fall genügt
+die Angabe des Namens; dem Rechner ist es egal, welchen Inhalt die
+Datei hat.
+ Anders ist es aber, wenn Sie den Inhalt betrachten wollen.
+Dazu brauchen Sie dann ein Programm, das die innere Struktur der
+Datei kennt. Textdateien können Sie zum Beispiel mit dem Editor
+ansehen. EUDAS-Dateien müssen Sie jedoch mit EUDAS ansehen, da
+der Editor die EUDAS-Struktur nicht kennt. Es ist in vielen Fällen
+sinnvoll, durch einen Zusatz im Dateinamen zu kennzeichnen, ob es
+sich um eine Textdatei oder eine EUDAS-Datei handelt.
+
+
+#free (3.7)#
+
+#center#Abb. 4-1 Struktur einer EUDAS-Datei
+
+
+#on("b")#Terminologie#off("b")# EUDAS verwendet bestimmte Ausdrücke, um die
+Strukturelemente einer EUDAS-Datei zu kennzeichnen. Die Struktur
+einer EUDAS-Datei ist schematisch in Abb. 4-1 dargestellt. Die
+Ausdrücke wurden nun nicht direkt aus dem Karteikartenmodell
+übernommen, da es auch noch andere Modelle gibt und keine fal­
+schen Assoziationen auftreten sollen.
+ EUDAS verwendet die Bezeichnung #on("i")#Satz#off("i")# für eine Karteikarte.
+Eine EUDAS-Datei besteht also aus einer Anzahl von gleichartigen
+Sätzen. Zur Veranschaulichung kann man sich diese nebeneinander­
+gelegt vorstellen.
+ Jeder Satz ist unterteilt in sogenannte #on("i")#Felder#off("i")#. Ein Feld ent­
+spricht einem Attribut bzw. einem Eintrag auf der Karteikarte. Ein
+Feld ist wiederum unterteilt in einen #on("i")#Feldnamen#off("i")# und einen #on("i")#Feldin­
+halt#off("i")#.
+ Der Feldname identifiziert ein bestimmtes Feld innerhalb eines
+Satzes. Die Feldnamen sind natürlich für alle Sätze gleich. Die
+Feldnamen einer EUDAS-Datei sind beliebig und können von Ihnen
+selbst festgelegt werden.
+ Der Feldinhalt enthält die eigentliche Information des entspre­
+chenden Attributs. Der Feldinhalt darf ebenfalls aus beliebig vielen
+Zeichen bestehen. Die Feldinhalte sind natürlich für jeden Satz
+verschieden und stellen die eigentliche gespeicherte Information
+dar.
+
+#on("b")#Grenzen#off("b")# Aus technischen Gründen gibt es natürlich auch
+einige
+Beschränkungen, die hier nicht verschwiegen werden sollen. Eine
+Datei kann maximal etwa 5000 Sätze enthalten, ein Satz darf aus
+maximal 255 Feldern bestehen. Insgesamt kann ein Satz etwa 32000
+Zeichen umfassen. Die einzelnen Sätze in der EUDAS-Datei werden
+durch ihre jeweilige Positionsnummer identifiziert, also quasi von 1
+bis 5000 durchnumeriert.
+
+
+4.2 EUDAS-Menüs
+
+In den folgenden Abschnitten sollen Sie lernen, wie die Bedienung
+von EUDAS funktioniert. Dazu sollen Sie eine EUDAS-Beispieldatei
+von der EUDAS-Diskette in Ihr System holen. Diese Datei brauchen
+Sie dann später, um die Funktionen von EUDAS zu kennenzulernen.
+ Die Beispieldatei hat den gleichen Inhalt wie die in Kapitel 3
+von Ihnen erstellte Datei. Falls Ihnen also die EUDAS-Archiv­
+diskette nicht zur Verfügung steht, können Sie in diesem Kapitel
+auch jede andere Archivdiskette verwenden.
+ Bitte beachten Sie im folgenden, daß Sie einfache Anführungs­
+striche nicht mit eingeben, doppelte Anführungsstriche aber wohl.
+
+#on("b")#EUDAS-Aufruf#off("b")# Zuerst müssen Sie EUDAS aufrufen. Dazu
+begeben
+Sie sich in die in Kapitel 3 eingerichtete Task ('continue ("arbeit")')
+und geben bei 'gib kommando:' das Kommando 'eudas':
+
+
+ gib kommando:
+ #on("i")#eudas#off("i")#<RET>
+
+
+Falls Ihr System über Menüs gesteuert wird, müssen Sie eine ent­
+sprechende Funktion wählen. Anschließend erscheint folgendes
+Menü:
+
+___________________________________________________________________________________________
+
+ EUDAS: Öffnen Einzelsatz Gesamtdatei Drucken Dateien Archiv
+ --------------:
+ EUDAS-Datei :
+ O Öffnen :
+ - Ketten :
+ - Koppeln :
+ --------------:
+ Arbeitskopie :
+ - Sichern :
+ --------------:
+ Aktuelle Datei:
+ - Notizen :
+ - Feldstrukt. :
+ - Prüfbeding. :
+ --------------:
+ Mehrbenutzer :
+ M Manager :
+ --------------:
+ :
+ :
+ :
+ :
+ :
+ Akt.Datei: Manager: Datum: 22.07.87
+___________________________________________________________________________________________
+
+
+#on("b")#Menüs#off("b")# Ein #on("i")#Menü#off("i")# ist eine Auswahl für einige verschiedene Funk­
+tionen. Die Funktionen sind jeweils benannt und werden durch einen
+davorstehenden Buchstaben oder ein Minuszeichen gekennzeichnet.
+Eine der Funktionen ist immer durch inverse Darstellung markiert.
+ Diese Markierung können Sie nun mit Hilfe der Pfeiltasten OBEN
+und UNTEN verschieben. Auf diese Weise können Sie sich die ge­
+wünschte Funktion auswählen. Die Funktionen werden jedoch durch
+das Markieren nicht ausgeführt. Sie können also beliebig mit den
+Pfeiltasten herumexperimentieren.
+ Ausgeführt wird die markierte Funktion, wenn Sie die Leertaste
+drücken. Sofort erscheint ein Stern vor dem Funktionsnamen, um
+anzuzeigen, daß die Ausführung beginnt. Probieren Sie dies jetzt
+nicht aus, dazu ist später Gelegenheit.
+ Funktionen mit einem Minuszeichen davor können Sie zwar
+anwählen (markieren), aber nicht ausführen. Solche Funktionen sind
+momentan gesperrt, weil ihre Ausführung keinen Sinn hat oder sogar
+Fehler erzeugen würde.
+ Mit den Pfeiltasten LINKS und RECHTS können Sie im Menüzu­
+stand weitere EUDAS-Menüs abrufen. Welche Menüs zur Verfügung
+stehen, zeigt Ihnen die oberste Bildschirmzeile. Das aktuelle Menü
+ist jeweils invers dargestellt.
+
+#on("b")#Hilfe#off("b")# Wenn Sie nun wissen möchten, welche Bedeutung die
+mar­
+kierte Funktion hat (die Funktionsbezeichnungen sind aus Platz­
+gründen sehr kurz gehalten), können Sie einen #on("i")#Hilfstext#off("i")# zu dieser
+Funktion abrufen. Dies erfolgt durch die Betätigung der Tasten ESC
+und '?' hintereinander. Diese doppelten Tastenkombinationen mit der
+ESC-Taste am Anfang werden Ihnen noch sehr häufig begegnen -
+denken Sie immer daran, die Tasten hintereinander und nicht
+gleichzeitig zu tippen. Der zeitliche Abstand zwischen den Tasten­
+drücken kann beliebig lang sein; hingegen sollten Sie eine Taste
+nicht zu lange drücken, da sonst eventuell eine automatische Wie­
+derholfunktion Ihrer Tastatur startet.
+ Probieren Sie nun die Tastenkombination ESC '?' aus. Als Reak­
+tion erscheint in der rechten Hälfte des Bildschirms ein Text. Dieser
+sollte Ihnen die gewünschten Informationen bieten.
+ Gleichzeitig hat sich aber auch die oberste Bildschirmzeile
+verändert. Sie zeigt jetzt folgendes Bild:
+
+___________________________________________________________________________________________
+
+ HILFE: Beenden: ESC q Seite weiter: ESC w Seite zurueck: ESC z
+___________________________________________________________________________________________
+
+
+#on("b")#Zustände#off("b")# Wenn Sie sich nicht im Menü befinden, fungiert
+die ober­
+ste Zeile als sogenannte #on("i")#Statuszeile#off("i")#. Diese Zeile zeigt immer an, in
+welchem #on("i")#Zustand#off("i")# das Programm sich befindet. Der Zustand des Pro­
+gramms hat nämlich Einfluß darauf, welche Tasten Sie drücken
+können und wie das Programm darauf reagiert. Die Statuszeile zeigt
+daher außer dem Zustand auch die wichtigsten Tastenfunktionen.
+ Sie kennen jetzt also schon zwei Zustände von EUDAS: den
+Menüzustand und den Hilfe-Zustand.
+
+#on("b")#Hilfe-Zustand#off("b")# Vom Menüzustand kommen Sie über die
+Tastenkom­
+bination ESC '?' in den Hilfe-Zustand. Im Hilfe-Zustand haben die
+Pfeiltasten OBEN und UNTEN keine Wirkung mehr (probieren Sie dies
+aus).
+ Ein Hilfstext besteht im allgemeinen aus mehreren Seiten. Die
+erste Seite enthält dabei die speziellen Informationen, danach
+folgen dann allgemeine Informationen. Mit den Tastenkombinationen
+ESC 'w' und ESC 'z' können Sie zwischen den Seiten umschalten
+(denken Sie daran, was oben über Tastenkombinationen gesagt
+wurde). Wenn Sie dies ausprobieren, werden Sie auf der zweiten
+Seite allgemeine Hinweise zur Menübedienung finden. Auf der letz­
+ten Seite wird ESC 'w' ignoriert, ebenso ESC 'z' auf der ersten Seite.
+ Mit der Tastenkombination ESC 'q' (quit) kehren Sie aus dem
+Hilfezustand in den vorherigen Zustand zurück. Diese Tastenkombi­
+nation löst allgemein in EUDAS die Rückkehr in den alten Zustand
+aus. Wenn Sie ESC 'q' getippt haben, erscheint die alte Menüzeile
+und Sie können wieder Funktionen auswählen.
+ Der Hilfszustand läßt sich von nahezu allen (noch zu bespre­
+chenden) Zuständen mit ESC '?' aufrufen. Es wird jeweils ein zum
+aktuellen Zustand passender Hilfstext ausgegeben.
+ Die möglichen Zustandsübergange sind nochmal in Abb. 4-2
+zusammengefaßt.
+
+
+#free (2.5)#
+
+#center#Abb. 4-2 Menü- und Hilfezustand
+
+
+#on("b")#EUDAS verlassen#off("b")# Im Menüzustand können Sie EUDAS jederzeit
+durch Tippen von ESC 'q' verlassen. Sie landen dann wieder bei 'gib
+kommando:'.
+
+
+4.3 Archivmenü
+
+#on("b")#System/Archiv#off("b")# An dieser Stelle müssen Sie sich die Begriffe #on("i")#Archiv#off("i")#
+und #on("i")#System#off("i")# klarmachen. Als Archiv bezeichnet man die Möglichkeit,
+bei Bedarf Disketten in Ihren Rechner einlegen können, um Dateien
+(und Programme) von anderen Rechnern zu übernehmen. Um diese
+Dateien bearbeiten zu können, müssen Sie sie in das System (Ihre
+Festplatte oder Hintergrunddiskette) kopieren.
+ Die wichtigste Aufgabe des Archivs ist es, Daten vor Beschädi­
+gung zu sichern. Durch Fehlbedienung oder Systemfehler kann es
+nämlich leicht geschehen, daß die Daten in Ihrem System verloren
+gehen oder zerstört werden. Wenn Sie die Daten jedoch auf einer
+Diskette gesichert und die Diskette sicher verwahrt haben, können
+Sie die Daten wiederherstellen.
+ Es ist sehr wichtig, daß Sie Ihre Dateien auf Archivdisketten
+sichern, denn ein einziger Hardwarefehler kann die Arbeit von
+Jahren vernichten (Sagen Sie nicht: "Mir passiert so etwas nicht" -
+bis jetzt hat es noch jeden erwischt).
+
+___________________________________________________________________________________________
+
+ EUDAS: Öffnen Einzelsatz Gesamtdatei Drucken Dateien Archiv
+ --------------:
+ Dateien Archiv:
+ U Übersicht :
+ D Üb. Drucken :
+ --------------:
+ Datei :
+ K Kopieren :
+ vom Archiv :
+ S Schreiben :
+ auf Archiv :
+ L Löschen :
+ auf Archiv :
+ --------------:
+ Archivdiskette:
+ I Init :
+ --------------:
+ Z Zielarchiv :
+ P Paßwort :
+ - Reservieren :
+ --------------:
+ :
+ :
+ Akt.Datei: Ziel: "ARCHIVE" Datum: 22.07.87
+___________________________________________________________________________________________
+
+
+#center#Abb. 4-3 Archivmenü
+
+
+#on("b")#Archivmenü#off("b")# Wenn Sie EUDAS aufrufen, befinden Sie sich
+immer im
+ersten Menü. Sie benötigen jedoch jetzt Funktionen aus dem sech­
+sten Menü 'Archiv'. Wählen Sie dieses Menü jetzt an. Es erscheint
+das in Abb. 4-3 dargestellte Bild. Die Funktionen in diesem Menü
+befassen sich mit beliebigen Dateien auf dem Archiv.
+ Für den Versuch legen Sie bitte die EUDAS-Archivdiskette ein.
+Dann wählen Sie die Funktion 'Übersicht' in dem Menü an, wenn sie
+nicht schon markiert ist. Sie können nun die ausgewählte Funktion
+durch Tippen der Leertaste ausführen.
+ In der obersten Zeile erscheint nun der Hinweis 'Bitte war­
+ten..'. Er zeigt an, daß nun eine Funktion ausgeführt wird, bei der
+Sie zunächst nichts tun können. Sie sollten in diesem Zustand keine
+Tasten drücken, denn EUDAS kann nicht darauf reagieren.
+
+#on("b")#Archivübersicht#off("b")# Nach einer mehr oder minder langen
+Aktivitäts­
+phase Ihres Diskettenlaufwerks erscheint dann die Archivübersicht.
+Das Erscheinungsbild mit dem markierten Editorbalken in der ober­
+sten Zeile kommt Ihnen vielleicht bekannt vor. Sie haben nämlich
+nichts anderes als das EUMEL-Kommando 'list (archive)' ausgeführt.
+Neu ist lediglich die Statuszeile:
+
+___________________________________________________________________________________________
+
+ ZEIGEN: Blättern: HOP OBEN, HOP UNTEN Beenden: ESC q Hilfe: ESC ?
+___________________________________________________________________________________________
+
+
+Wenn Sie sich die Übersicht angeschaut haben, verlassen Sie den
+Editor wieder mit ESC 'q'.
+ Beachten Sie, daß Sie unter EUDAS das Archiv nicht extra an­
+melden müssen; dies geschieht automatisch, wenn Sie eine Funktion
+aufrufen. Bei Leseoperationen müssen Sie nicht einmal den Archiv­
+namen wissen. Das Archiv wird automatisch wieder abgemeldet,
+wenn Sie das Archivmenü verlassen.
+
+#on("b")#Archiv lesen#off("b")# Unter den in der Übersicht aufgelisteten
+Dateien
+sollten Sie auch die Datei finden, die Sie brauchen. Sie heißt
+'Adressen'. An dieser Stelle ein kleiner Hinweis: An vielen Stellen
+werden Sie sehen, daß Dateinamen in Anführungsstriche einge­
+schlossen sind. Die Anführungsstriche gehören jedoch #on("i")#nicht#off("i")# zum
+Namen. Sie dienen nur zur Abgrenzung, da in Dateinamen beliebige
+Zeichen erlaubt sind. Wenn Sie aufgefordert werden, einen Datei­
+namen einzugeben, müssen Sie dies immer ohne Anführungsstriche
+tun.
+ Hoffentlich haben Sie in der ganzen Diskussion nicht das Ziel
+aus den Augen verloren: Sie sollten eine Datei ins System holen, um
+nachher mit ihr zu experimentieren. Zu diesem Zweck gibt es im
+Archivmenü die Funktion
+#free (0.2)#
+
+ K Kopieren
+ (vom Archiv)
+
+#free (0.2)#
+Wählen Sie diese Funktion jetzt mit den Pfeiltasten aus und drücken
+Sie zum Ausführen die Leertaste.
+
+#on("b")#Eingabezustand#off("b")# Nach kurzem 'Bitte warten..'-Zustand werden
+Sie
+im rechten Bildschirmteil nach dem Namen der Datei gefragt. Gleich­
+zeitig erscheint eine neue Statuszeile. Es ergibt sich folgendes Bild:
+
+___________________________________________________________________________________________
+
+ EINGABE: Bestätigen: RETURN Zeigen: ESC z Abbrechen: ESC h Hilfe: ESC ?
+ --------------:Dateiname:
+ Dateien Archiv:
+ U Übersicht :
+ D Üb. drucken :
+ --------------:
+ Datei :
+ * Kopieren :
+ vom Archiv :
+ ...
+
+___________________________________________________________________________________________
+
+
+Sie können in diesem Zustand den Namen der gewünschten Datei
+eingeben. Außer den in der Statuszeile genannten Funktionen kön­
+nen Sie die aus dem Editor bekannten Tasten benutzen, um den
+Text in der Zeile gegebenenfalls zu korrigieren (Pfeiltasten LINKS
+und RECHTS, RUBOUT, RUBIN). Die Schreibmarke (Cursor) zeigt Ihnen
+an, wo das nächste Zeichen plaziert wird.
+
+#on("b")#Abbruch#off("b")# Eine Tastenkombination verdient noch besondere
+Beach­
+tung: Mit ESC 'h' können Sie in vielen Situationen eine Funktion
+noch abbrechen - zum Beispiel wenn Sie irrtümlich die falsche
+Funktion gewählt haben.
+ Im Gegensatz zu ESC 'q' erfolgt hier die sofortige Rückkehr aus
+der Funktion ins Menü, möglichst ohne daß die Funktion Auswir­
+kungen hinterläßt. Bei einem Abbruch bleibt also in der Regel das
+System unverändert.
+
+#on("b")#Fehlerzustand#off("b")# Um auch die Fehlerbehandlung von EUDAS
+auszu­
+probieren, sollten Sie hier einen falschen Namen eingeben, zum
+Beispiel:
+#free (0.2)#
+
+ Dateiname: #on("i")#Adresen#off("i")#<RET>
+
+#free (0.2)#
+EUDAS sucht jetzt auf der Diskette nach einer Datei dieses Namens,
+findet sie aber nicht. Als Reaktion erscheint dann die Meldung:
+
+___________________________________________________________________________________________
+
+ !!! FEHLER !!! Quittieren: ESC q Hilfe zur Meldung: ESC ?
+ --------------:Dateiname: Adresen
+ Dateien Archiv:>>> "Adresen" gibt es nicht
+ U Übersicht :
+ D Üb. drucken :
+ --------------:
+ ...
+
+___________________________________________________________________________________________
+
+
+Im Normalfall sollten Sie die Fehlermeldung mit ESC 'q' quittieren,
+damit Sie den Befehl erneut versuchen können. Auch hier haben Sie
+die Möglichkeit, eine besondere Information zu dem Fehler abzurufen
+(es liegen jedoch nicht für alle möglichen Fehler spezielle Texte
+vor).
+ Nach dem Quittieren des Fehlers befinden Sie sich wieder im
+Menüzustand. Wiederholen Sie jetzt die Funktion, indem Sie die
+Leertaste tippen. Sie werden dann erneut nach dem Namen gefragt.
+
+#on("b")#Auswahlzustand#off("b")# Um endlich ans Ziel zu kommen, benutzen Sie
+diesmal eine sehr komfortable Abkürzung, die EUDAS Ihnen bietet.
+Durch Drücken von ESC 'z' können Sie sich nämlich alle möglichen
+Namen anzeigen lassen und den gewünschten einfach ankreuzen.
+ Anschließend sieht der Bildschirm wie in Abb. 4-4 aus. In die­
+sem Zustand können Sie mit den Pfeiltasten den Cursor zur ge­
+wünschten Datei bewegen und diese ankreuzen. Da Sie auch meh­
+rere Dateien in beliebiger Folge ankreuzen können, erscheint eine
+'1' vor der Datei zur Anzeige der Reihenfolge. Sie wollen aber nur
+diese eine Datei 'Adressen' holen und beenden die Auswahl daher
+mit ESC 'q'. Wenn alles glattgeht, wird jetzt die Datei vom Archiv
+ins System kopiert.
+
+#on("b")#Archiv schreiben#off("b")# Auf nahezu gleiche Weise können Sie mit
+der Funktion
+
+
+ S Schreiben
+ auf Archiv
+
+
+eine Datei wieder auf die Diskette schreiben. Als erstes müssen Sie
+dann den Namen der Archivdiskette eingeben, damit Sie nicht aus
+Versehen auf eine falsche Archivdiskette schreiben.
+ Auch hier können Sie die gewünschten Dateien ankreuzen (na­
+türlich bietet EUDAS dann die Dateien des Systems an). Sie brau­
+chen keine Angst zu haben, aus Versehen eine Datei mit gleichem
+Namen zu überschreiben - EUDAS fragt in solchen Fällen immer
+nochmal an.
+
+___________________________________________________________________________________________
+
+ AUSWAHL: Ankreuzen: 'x' Durchstreichen: 'o' Beenden: ESC q Hilfe: ESC ?
+ --------------:--------------------------------------------------------------
+ Dateien Archiv: Auswahl der Dateien auf dem Archiv.
+ U Übersicht : Gewuenschte Datei(en) bitte ankreuzen:
+ D Üb. Drucken :--------------------------------------------------------------
+ --------------: o "eudas.1"
+ Datei : o "eudas.2"
+ * Kopieren : o "eudas.3"
+ vom Archiv : o "eudas.4"
+ S Schreiben : o "eudas.init"
+ auf Archiv : o "eudas.generator"
+ L Löschen : o "Adressen"
+ auf Archiv :--------------------------------------------------------------
+ --------------:
+ Archivdiskette:
+ I Init :
+ --------------:
+ Z Zielarchiv :
+ P Paßwort :
+ - Reservieren :
+ --------------:
+ :
+ :
+ Akt.Datei: Ziel: "ARCHIVE" Datum: 22.07.87
+___________________________________________________________________________________________
+
+
+#center#Abb. 4-4 Dateiauswahl
+
+
+
+4.4 Dateiverwaltung
+
+So: nach dieser anstrengenden Arbeit sollen Sie sich überzeugen,
+daß die Datei 'Adressen' nun wirklich im System zur Verfügung
+steht. Dazu gehen Sie mit LINKS ein Menü zurück. Dieses Menü
+beschäftigt sich mit Dateien im System und ist in Abb. 4-5 gezeigt.
+ Auch hier finden Sie eine Funktion "Übersicht". Rufen Sie diese
+auf. Ganz analog zum Archiv erscheint eine Übersicht aller Dateien
+im Editor. Verlassen Sie die Übersicht wieder mit ESC 'q'.
+
+___________________________________________________________________________________________
+
+ EUDAS: Öffnen Einzelsatz Gesamtdatei Drucken Dateien Archiv
+ --------------:
+ Dateien System:
+ U Übersicht :
+ --------------:
+ Datei :
+ L Löschen :
+ N Umbenennen :
+ K Kopieren :
+ P Platzbedarf :
+ A Aufräumen :
+ --------------:
+ :
+ :
+ :
+ :
+ :
+ :
+ :
+ :
+ :
+ :
+ :
+ Akt.Datei: Task: "arbeit" Datum: 22.07.87
+___________________________________________________________________________________________
+
+
+#center#Abb. 4-5 Menü 'Dateien'
+
+
+#on("b")#Datei löschen#off("b")# Eine weitere Funktion aus diesem Menü werden
+Sie ebenfalls noch öfter brauchen, nämlich
+#free (0.2)#
+
+ L Löschen
+
+#free (0.2)#
+Mit dieser Funktion können Sie eine Datei wieder aus dem System
+entfernen - zum Beispiel wenn Sie sich die Adressen angesehen
+haben und danach den Speicherplatz nicht weiter verschwenden
+wollen. Als letztes Beispiel sollen Sie auch diese Funktion aufrufen
+(keine Angst, wir löschen die Datei nicht wirklich, es gibt vorher
+noch eine Notbremse).
+
+#on("b")#Fragezustand#off("b")# Als erstes werden Sie wieder nach dem
+Dateinamen
+gefragt (dies ist Ihnen schon bekannt). Hier haben Sie jetzt die
+Wahl, ob Sie den Namen eingeben oder mit ESC 'z' ankreuzen. Da das
+Löschen unwiederbringlich ist, werden Sie anschließend zur Sicher­
+heit gefragt, ob Sie die Datei wirklich löschen wollen:
+
+___________________________________________________________________________________________
+
+ FRAGE: Bejahen: j,J Verneinen: n,N Abbrechen: ESC h Hilfe: ESC ?
+ --------------:Dateiname: Adressen
+ Dateien System:"Adressen" im System loeschen (j/n) ?
+ U Übersicht :
+ --------------:
+ ...
+
+___________________________________________________________________________________________
+
+
+Diese Frage können Sie bejahen oder verneinen (oder die Funktion
+ohne Auswirkungen abbrechen). In diesem Fall sollten Sie die Frage
+verneinen - es sei denn, Ihnen hat das Spielen mit EUDAS so gut
+gefallen, daß Sie die ganze Prozedur wiederholen und die Datei
+nochmal vom Archiv holen wollen.
+
+
+4.5 Bedienungsregeln
+
+Mit dieser letzten Demonstration haben Sie jetzt schon fast alle
+Arten des Umgangs mit EUDAS kennengelernt. Sicher ist dies beim
+ersten Mal sehr verwirrend. Mit vier Regeln können Sie jedoch
+EUDAS immer bedienen:
+
+#limit (12.0)#
+ 1. Achten Sie darauf, welche möglichen Tastendrücke
+ in der Statuszeile stehen. Richten Sie sich danach!
+#free (0.2)#
+ 2. Sind Sie sich unsicher, rufen Sie Hilfsfunktion mit
+ ESC '?' auf. Damit erhalten Sie weitere Informatio­
+ nen.
+#free (0.2)#
+ 3. Funktioniert diese Tastenkombination nicht (geben
+ Sie dem Rechner eine kurze Zeit zum Reagieren),
+ versuchen Sie die Tastenkombinationen ESC 'h' (Ab­
+ bruch) oder ESC 'q' (Verlassen). Falls sich daraufhin
+ etwas verändert, fangen Sie wieder mit 1. an.
+#free (0.2)#
+ 4. Erfolgt darauf keine Reaktion, drücken Sie die SV-
+ Taste und versuchen Sie das Programm mit 'halt' zu
+ stoppen. Führt auch das nicht zum Erfolg, hat sich
+ Ihr Rechner "aufgehängt". Sie müssen den Rechner
+ dann neu starten. Wenn Sie keine Erfahrung mit
+ einer solchen Situation haben, wenden Sie sich an
+ Ihren Händler oder Systembetreuer.
+#limit (13.5)#
+
+Im Zusammenhang mit dem letzten Punkt sei nochmal auf die Wich­
+tigkeit einer regelmäßigen Datensicherung auf Archivdisketten
+hingewiesen. Im Normalfall sollten Sie aber mit den Punkten 1 bis 3
+zurechtkommen.
+
+#on("b")#Zustände#off("b")# Im letzten Abschnitt haben Sie eine ganze Reihe
+von
+Zuständen kennengelernt, die EUDAS einnehmen kann. In jedem
+Zustand haben Sie verschiedene Möglichkeiten zur Reaktion. Glück­
+licherweise erscheinen diese Möglichkeiten zum großen Teil in der
+Statuszeile.
+ Damit Sie die verwirrenden Erfahrungen des letzten Abschnitts
+etwas ordnen können, wollen wir an dieser Stelle die verschiedenen
+Zustände noch einmal zusammenfassen. Der Beschreibung vorange­
+stellt ist die jeweilige Kennzeichnung am Beginn der Statuszeile.
+
+EUDAS: #on("b")# Sie können mit ESC 'w' und ESC 'z' im Hilfstext blättern. Mit
+ ESC 'q' kommen Sie in den alten Zustand.
+
+AUSWAHL: Hier können Sie die gewünschten Namen mit 'x' ankreuzen
+ und mit 'o' wieder entfernen. Normales Beenden mit ESC 'q'.
+ Hilfestellung durch ESC '?'. Abbruch der gesamten Funktion mit
+ ESC 'h'.
+
+EINGABE: Hier können Sie eine einzelne Zeile eingeben oder ändern
+ (wie im Editor). Einfügen und Löschen mit RUBIN und RUBOUT.
+ Abbruch und Hilfestellung möglich.
+
+FRAGE: Beantworten Sie die gestellte Frage mit 'j' oder 'n'. Abbruch
+ (ESC 'h') und Hilfestellung (ESC '?') möglich.
+
+ZEIGEN: Mit HOP OBEN und HOP UNTEN können Sie in der Übersicht
+ blättern. Ende der Übersicht mit ESC 'q'. Hilfestellung möglich.
+
+!!! FEHLER !!! Quittieren Sie die Meldung mit ESC 'q'. Hilfestellung
+ möglich.
+
+Bitte warten.. In diesem Zustand keine Taste drücken, der Rechner
+ ist beschäftigt.
+
+Drei weitere Zustände, die Sie noch nicht kennengelernt haben, sind
+hier schon mal der Vollständigkeit halber aufgeführt:
+
+SATZ ÄNDERN:
+SATZ EINFÜGEN:
+SUCHMUSTER EINGEBEN: Satzeditor zum Eingeben von Feldinhalten.
+ Normales Verlassen mit ESC 'q'. Abbruch und Hilfestellung mög­
+ lich. Beschreibung s. 6.2.
+
+EDITIEREN: EUMEL-Editor mit Änderungsmöglichkeit für beliebige
+ Texte. Normales Verlassen mit ESC 'q'. Hilfestellung möglich.
+ Beschreibung der Möglichkeiten siehe EUMEL-Benutzerhand­
+ buch.
+
+Gib Kommando: Hier können Sie ein beliebiges ELAN-Kommando ein­
+ geben und mit RETURN bestätigen. Abbruch und Hilfestellung
+ möglich. Kann im Menü durch ESC ESC aufgerufen werden.
+
+Wie Sie sehen, werden auch hier wieder die gleichen Tastenkombi­
+nationen verwendet, die Sie schon kennen.
+ In dieser Übersicht sind jeweils nur die wichtigsten Tastenkom­
+binationen aufgeführt. Informieren Sie sich gegebenenfalls mit ESC
+'?'. Einige weitere Tastenfunktionen werden Sie im folgenden noch
+kennenlernen. Eine vollständige Übersicht finden Sie im Referenz­
+handbuch.
+
diff --git a/app/eudas/4.3/src/Adressen b/app/eudas/4.3/src/Adressen
new file mode 100644
index 0000000..74f0e3d
--- /dev/null
+++ b/app/eudas/4.3/src/Adressen
Binary files differ
diff --git a/app/eudas/4.3/src/dummy.text b/app/eudas/4.3/src/dummy.text
new file mode 100644
index 0000000..0eb03b0
--- /dev/null
+++ b/app/eudas/4.3/src/dummy.text
@@ -0,0 +1,14 @@
+PACKET dummy text DEFINES
+ lineform, pageform, autoform, autopageform :
+
+PROC lineform (TEXT CONST datei) : fehler END PROC lineform;
+PROC pageform (TEXT CONST datei) : fehler END PROC pageform;
+PROC autoform (TEXT CONST datei) : fehler END PROC autoform;
+PROC autopageform (TEXT CONST datei) : fehler END PROC autopageform;
+
+PROC fehler :
+ errorstop ("Keine Textverarbeitung installiert")
+END PROC fehler;
+
+END PACKET dummy text;
+
diff --git a/app/eudas/4.3/src/eudas.1 b/app/eudas/4.3/src/eudas.1
new file mode 100644
index 0000000..18607c4
--- /dev/null
+++ b/app/eudas/4.3/src/eudas.1
@@ -0,0 +1,52 @@
+PACKETeudassatzzugriffeDEFINES SATZ,:=,satzinitialisieren,felderzahl,feldlesen,feldbearbeiten,feldaendern,feldindex:LETb0=256,c0=2;LETd0=" ",e0="";LETf0=#101
+#" ist keine Feldnummer";TEXT VARg0:=c0*d0;TYPE SATZ=TEXT;OP:=(SATZ VARh0,SATZ CONSTi0):CONCR(h0):=CONCR(i0)END OP:=;PROCsatzinitialisieren(SATZ VARj0):satzinitialisieren(j0,0)END PROCsatzinitialisieren;PROCsatzinitialisieren(SATZ VARj0,INT CONSTk0):replace(g0,1,2*k0+3);INT VARl0;CONCR(j0):=e0;FORl0FROM1UPTOk0+1REP CONCR(j0)CATg0END REP END PROCsatzinitialisieren;INT PROCfelderzahl(SATZ CONSTj0):INT VARm0:=(CONCR(j0)ISUB1)DIV2;INT CONSTn0:=CONCR(j0)ISUBm0;REPm0DECR1UNTILm0<=0CORo0END REP;m0.o0:(CONCR(j0)ISUBm0)<>n0.END PROCfelderzahl;PROCfeldlesen(SATZ CONSTj0,INT CONSTp0,TEXT VARq0):r0(CONCR(j0),p0);IF NOTiserrorTHENq0:=subtext(CONCR(j0),s0,t0)END IF END PROCfeldlesen;PROCfeldbearbeiten(SATZ CONSTj0,INT CONSTp0,PROC(TEXT CONST,INT CONST,INT CONST)u0):r0(CONCR(j0),p0);IF NOTiserrorTHENu0(CONCR(j0),s0,t0)END IF END PROCfeldbearbeiten;INT VARs0,t0;PROCr0(TEXT CONSTj0,INT CONSTp0):IFv0THENerrorstop(text(p0)+f0)ELIFw0THENs0:=j0ISUBp0;t0:=(j0ISUBp0+1)-1ELSEs0:=1;t0:=0END IF.v0:p0<=0ORp0>b0.
+w0:p0+p0<(j0ISUB1)-1.END PROCr0;TEXT VARx0;PROCfeldaendern(SATZ VARj0,INT CONSTp0,TEXT CONSTq0):INT VARy0;INT CONSTz0:=((CONCR(j0)ISUB1)-2)DIV2;IFa1THENb1ELSEerrorstop(text(p0)+f0)END IF.a1:p0>0ANDp0<=b0.b1:INT CONSTc1:=p0-z0;IFc1<=0THENd1ELIFq0<>e0THENe1END IF.e1:INT CONSTf1:=CONCR(j0)ISUB(z0+1);x0:=subtext(CONCR(j0),g1,f1-1);CONCR(j0):=subtext(CONCR(j0),1,z0+z0);h1(CONCR(j0),1,z0,i1);j1;k1;CONCR(j0)CATx0;CONCR(j0)CATq0.i1:c1+c1.j1:INT CONSTl1:=f1+i1;FORy0FROMz0+1UPTOp0REPm1(CONCR(j0),l1)END REP.k1:m1(CONCR(j0),l1+length(q0)).g1:CONCR(j0)ISUB1.d1:INT CONSTs0:=CONCR(j0)ISUBp0,n1:=CONCR(j0)ISUB(p0+1);IFs0>length(CONCR(j0))THENo1ELSEp1END IF.o1:h1(CONCR(j0),p0+1,z0+1,length(q0));CONCR(j0)CATq0.p1:x0:=subtext(CONCR(j0),n1);CONCR(j0):=subtext(CONCR(j0),1,s0-1);h1(CONCR(j0),p0+1,z0+1,q1);CONCR(j0)CATq0;CONCR(j0)CATx0.q1:length(q0)-r1.r1:n1-s0.END PROCfeldaendern;PROCm1(TEXT VARj0,INT CONSTs1):replace(g0,1,s1);j0CATg0END PROCm1;PROCh1(TEXT VARj0,INT CONSTt1,u1,v1):INT VARy0;FORy0FROMt1UPTOu1
+REPreplace(j0,y0,w1+v1)END REP.w1:j0ISUBy0.END PROCh1;INT PROCfeldindex(SATZ CONSTj0,TEXT CONSTx1):INT VARt1:=(CONCR(j0)ISUB1)-1,y0:=1;REPt1:=pos(CONCR(j0),x1,t1+1);IFt1=0THEN LEAVEfeldindexWITH0END IF;y1UNTILz1CANDa2END REP;y0.y1:WHILE(CONCR(j0)ISUBy0)<t1REPy0INCR1END REP.z1:(CONCR(j0)ISUBy0)=t1.a2:(CONCR(j0)ISUB(y0+1))=t1+length(x1).END PROCfeldindex;END PACKETeudassatzzugriffe;
+PACKETeudasdateienDEFINES EUDAT,oeffne,satznr,dateiende,saetze,aufsatz,weiter,zurueck,satzlesen,satzaendern,satzloeschen,satzeinfuegen,feldlesen,feldaendern,feldbearbeiten,felderzahl,feldnamenlesen,feldnamenaendern,notizenlesen,notizenaendern,feldinfo,automatischerschluessel,dezimalkomma,wertberechnen,reorganisiere,sortiere,sortierreihenfolge,unsortiertesaetze:LETb0=531,c0=121,d0=5000,e0=3243,f0=64,g0=48;LET INTVEC=TEXT,INDEX=STRUCT(INTh0,i0,INTj0,k0,INTVECl0),EINTRAG=STRUCT(INTh0,i0,m0,n0,SATZo0),DATEI=STRUCT(INTfelderzahl,SATZp0,INTVECfeldinfo,TEXTq0,INTr0,s0,t0,INTu0,v0,INTw0,satznr,INTx0,y0,z0,INTa1,b1,ROW3TEXTc1,ROWb0INTd1,ROWc0INDEXindex,ROWd0EINTRAGe1);TYPE EUDAT=BOUND DATEI;LETf1="";LETg1=#201
+#"Datei ist keine EUDAS-Datei",h1=#202
+#"inkonsistente EUDAS-Datei",i1=#203
+#"EUDAS-Datei voll",j1=#204
+#"Nicht erlaubtes Dezimalkomma";TEXT VARk1;TEXT VARl1:=" ";INTVEC CONSTm1:=n1(f0,1);LETo1="";TEXT VARp1;INTVEC PROCn1(INT CONSTlength,q1):replace(l1,1,q1);length*l1END PROCn1;PROCinsert(INTVEC VARr1,INT CONSTpos,q1):INT CONSTbegin:=pos+pos-1;IFbegin<1THENs1ELIFbegin>length(r1)+1THENt1ELSEreplace(l1,1,q1);p1:=subtext(r1,begin);r1:=subtext(r1,1,begin-1);r1CATl1;r1CATp1END IF END PROCinsert;PROCdelete(INTVEC VARr1,INT CONSTpos):INT CONSTbegin:=pos+pos-1;IFbegin<1THENs1ELIFbegin>=length(r1)THENt1ELSEp1:=subtext(r1,begin+2);r1:=subtext(r1,1,begin-1);r1CATp1END IF END PROCdelete;INT PROCpos(INTVEC CONSTr1,INT CONSTq1):replace(l1,1,q1);INT VARbegin:=1;REPbegin:=pos(r1,l1,begin)+1UNTIL(beginAND1)=0ORbegin=1END REP;beginDIV2END PROCpos;PROCu1(INTVEC VARv1,w1,INT CONSTpos):INT CONSTbegin:=pos+pos-1;IFbegin<1THENs1ELIFbegin>length(v1)+1THENt1ELSEw1:=subtext(v1,begin);v1:=subtext(v1,1,begin-1)END IF END PROCu1;PROCx1(INTVEC VARv1,w1,INT CONSTpos):INT CONSTbegin:=pos+pos-1;IFbegin<1THENs1ELIFbegin
+>length(v1)+1THENt1ELSEw1:=subtext(v1,1,begin-1);v1:=subtext(v1,begin)END IF END PROCx1;.t1:errorstop(9,f1).s1:errorstop(10,f1).PROCy1(DATEI VARz1):z1.felderzahl:=0;z1.feldinfo:=o1;satzinitialisieren(z1.p0);z1.q0:=f1;z1.r0:=1;z1.s0:=1;z1.u0:=0;z1.t0:=0;z1.w0:=0;z1.v0:=1;z1.a1:=0;z1.c1(1):=f1;z1.c1(2):=f1;z1.c1(3):=f1;z1.satznr:=1;z1.x0:=1;z1.y0:=1;z1.z0:=1;z1.index(1).l0:=m1;z1.index(1):=INDEX:(0,0,1,1,n1(1,1));INT VARa2;FORa2FROM1UPTOb0REPz1.d1(a2):=0END REP;z1.e1(1):=EINTRAG:(0,0,1,0,b2).b2:z1.p0.END PROCy1;PROCoeffne(EUDAT VARz1,TEXT CONSTc2):enablestop;IF NOTexists(c2)THEN CONCR(z1):=new(c2);y1(CONCR(z1));type(old(c2),e0)ELIFtype(old(c2))=e0THEN CONCR(z1):=old(c2)ELSEerrorstop(g1)ENDIF END PROCoeffne;PROCoeffne(EUDAT VARz1,DATASPACE CONSTd2):IFtype(d2)<0THEN CONCR(z1):=d2;y1(CONCR(z1));type(d2,e0)ELIFtype(d2)=e0THEN CONCR(z1):=d2ELSEerrorstop(g1)END IF END PROCoeffne;PROCfeldlesen(EUDAT CONSTz1,INT CONSTe2,TEXT VARf2):feldlesen(g2,e2,f2).g2:z1.e1(z1.z0).o0.END PROCfeldlesen;PROC
+feldaendern(EUDAT VARz1,INT CONSTe2,TEXT CONSTh2):IFi2THENj2(CONCR(z1));k2;feldaendern(g2,e2,h2)END IF.i2:z1.z0<>1.k2:IFe2=1THENdisablestop;l2(CONCR(z1),m2(h2))END IF.g2:z1.e1(z1.z0).o0.END PROCfeldaendern;INT PROCfelderzahl(EUDAT CONSTz1):z1.felderzahlEND PROCfelderzahl;PROCfeldbearbeiten(EUDAT CONSTz1,INT CONSTe2,PROC(TEXT CONST,INT CONST,INT CONST)n2):feldbearbeiten(g2,e2,PROC(TEXT CONST,INT CONST,INT CONST)n2).g2:z1.e1(z1.z0).o0.END PROCfeldbearbeiten;PROCfeldnamenlesen(EUDAT CONSTz1,SATZ VARo2):o2:=z1.p0END PROCfeldnamenlesen;PROCfeldnamenaendern(EUDAT VARz1,SATZ CONSTp2):z1.p0:=p2;INT CONSTq2:=felderzahl(p2);IFq2>z1.felderzahlTHENr2;z1.felderzahl:=q2END IF.r2:z1.feldinfoCATn1(s2,-1).s2:q2-length(z1.feldinfo)DIV2.END PROCfeldnamenaendern;INT PROCfeldinfo(EUDAT CONSTz1,INT CONSTe2):z1.feldinfoISUBe2END PROCfeldinfo;PROCfeldinfo(EUDAT VARz1,INT CONSTe2,t2):replace(z1.feldinfo,e2,t2);IFpos(z1.q0,code(e2))>0THENz1.a1:=z1.w0END IF END PROCfeldinfo;INT PROCsatznr(EUDAT CONSTz1):z1.
+satznrEND PROCsatznr;BOOL PROCdateiende(EUDAT CONSTz1):z1.satznr>z1.w0END PROCdateiende;INT PROCsaetze(EUDAT CONSTz1):z1.w0END PROCsaetze;PROCu2(DATEI VARz1,INT CONSTx0,k0,satznr):IFx0<1ORx0>z1.s0CORk0<1ORk0>z1.index(x0).j0THENerrorstop(h1)END IF;disablestop;z1.x0:=x0;z1.y0:=k0;z1.satznr:=satznr;z1.z0:=z1.index(x0).l0ISUBk0END PROCu2;PROCaufsatz(EUDAT VARz1,INT CONSTv2):INT VARsatznr;IFv2<1THENsatznr:=1ELIFv2>z1.w0THENsatznr:=z1.w0+1ELSEsatznr:=v2END IF;w2(CONCR(z1),satznr)END PROCaufsatz;PROCaufsatz(EUDAT VARz1,TEXT CONSTx2):aufsatz(z1,1);IFy2THENweiter(z1,x2)END IF.y2:feldlesen(z1,1,k1);k1<>x2.END PROCaufsatz;PROCw2(DATEI VARz1,INT CONSTsatznr):IFz2THENu2(z1,1,1,1)END IF;INT VARx0:=z1.x0,a3:=z1.satznr-z1.y0;IFsatznr>z1.satznrTHENb3ELSEc3END IF;u2(z1,x0,k0,satznr).z2:satznr+satznr<z1.satznr.b3:WHILEd3REPa3INCRj0;x0:=z1.index(x0).i0END REP.d3:INT CONSTj0:=z1.index(x0).j0;a3+j0<satznr.c3:WHILEe3REPx0:=z1.index(x0).h0;a3DECRz1.index(x0).j0END REP.e3:a3>=satznr.k0:satznr-a3.END PROCw2;
+PROCweiter(EUDAT VARz1):f3(CONCR(z1))END PROCweiter;PROCf3(DATEI VARz1):IFg3THENh3END IF.g3:z1.z0<>1.h3:INT VARx0:=z1.x0,k0:=z1.y0;IFk0=index.j0THENx0:=index.i0;k0:=1ELSEk0INCR1END IF;u2(z1,x0,k0,z1.satznr+1).index:z1.index(x0).END PROCf3;PROCzurueck(EUDAT VARz1):i3(CONCR(z1))END PROCzurueck;PROCi3(DATEI VARz1):IFj3THENk3END IF.j3:z1.satznr<>1.k3:INT VARx0:=z1.x0,k0:=z1.y0;IFk0=1THENx0:=m0.h0;k0:=m0.j0ELSEk0DECR1END IF;u2(z1,x0,k0,z1.satznr-1).m0:z1.index(x0).END PROCi3;PROCweiter(EUDAT VARz1,TEXT CONSTx2):f3(CONCR(z1),x2)END PROCweiter;PROCf3(DATEI VARz1,TEXT CONSTx2):l3;WHILEm3CANDn3REPo3END REP;IFm3THENp3(z1,k0)ELSEw2(z1,z1.w0+1)END IF.l3:INT VARq3,k0:=z1.z0;IFn3THENr3(z1,m2(x2),k0,q3)ELSEo3END IF.m3:k0<>0.n3:feldlesen(g2,1,k1);k1<>x2.g2:z1.e1(k0).o0.o3:k0:=z1.e1(k0).i0.END PROCf3;PROCzurueck(EUDAT VARz1,TEXT CONSTx2):i3(CONCR(z1),x2)END PROCzurueck;PROCi3(DATEI VARz1,TEXT CONSTx2):l3;WHILEm3CANDn3REPs3END REP;IFm3THENp3(z1,k0)ELSEw2(z1,1)END IF.l3:INT VARk0:=z1.z0,q3;IFk0=1ORt3THEN
+r3(z1,m2(x2),q3,k0)END IF.m3:k0<>0.n3:k0=z1.z0ORt3.t3:feldlesen(g2,1,k1);k1<>x2.g2:z1.e1(k0).o0.s3:k0:=z1.e1(k0).h0.END PROCi3;PROCp3(DATEI VARz1,INT CONSTk0):INT CONSTu3:=z1.e1(k0).m0;INT VARy0:=1,satznr:=0;WHILEy0<>u3REPsatznrINCRz1.index(y0).j0;y0:=z1.index(y0).i0END REP;y0:=pos(z1.index(u3).l0,k0);satznrINCRy0;u2(z1,u3,y0,satznr).END PROCp3;INT VARindex;PROCv3(TEXT CONSTw3,INT CONSTx3,y3):INT VARz3:=x3;index:=0;IFy3-x3<4THENa4ELSEb4END IF;index:=indexMODb0+1.a4:WHILEz3<=y3REPindex:=index*4;indexINCRcode(w3SUBz3);z3INCR1END REP.b4:WHILEz3<=y3REPindexINCRindex;indexINCRcode(w3SUBz3);IFindex>16000THENindex:=indexMODb0END IF;z3INCR1END REP.END PROCv3;INT PROCm2(TEXT CONSTw3):v3(w3,1,length(w3));indexEND PROCm2;INT PROCm2(SATZ CONSTo0):feldbearbeiten(o0,1,PROC(TEXT CONST,INT CONST,INT CONST)v3);indexEND PROCm2;PROCr3(DATEI CONSTz1,INT CONSTm2,INT VARk0,c4):INT VARx0:=z1.r0;c4:=z1.d1(m2);k0:=0;BOOL VARd4:=TRUE;WHILEd4ANDc4<>0REPe4;o3END REP.e4:IFf4THENg4ELSEh4END IF.f4:z1.e1(c4).m0=z1.x0
+.g4:x0:=z1.x0;INT CONSTi4:=pos(l0,c4);IFi4=0THENerrorstop(h1)ELIFi4<=j4THENd4:=FALSE END IF.l0:z1.index(x0).l0.j4:z1.y0.h4:WHILEx0<>z1.e1(c4).m0REP IFx0=z1.x0THENd4:=FALSE;LEAVEe4ELSEx0:=z1.index(x0).h0END IF END REP.o3:IFd4THENk0:=c4;c4:=z1.e1(k0).h0END IF.END PROCr3;PROCk4(DATEI VARz1,INT CONSTm2):disablestop;INT CONSTk0:=z1.z0,h0:=z1.e1(k0).h0,i0:=z1.e1(k0).i0;IFi0<>0THENz1.e1(i0).h0:=h0ELSEz1.d1(m2):=h0END IF;IFh0<>0THENz1.e1(h0).i0:=i0END IF.END PROCk4;PROCl4(DATEI VARz1,INT CONSTm2,i0,h0):disablestop;INT CONSTk0:=z1.z0;z1.e1(k0).h0:=h0;z1.e1(k0).i0:=i0;IFh0<>0THENz1.e1(h0).i0:=k0END IF;IFi0<>0THENz1.e1(i0).h0:=k0ELSEz1.d1(m2):=k0END IF END PROCl4;PROCsatzlesen(EUDAT CONSTz1,SATZ VARo0):o0:=z1.e1(z1.z0).o0END PROCsatzlesen;PROCsatzaendern(EUDAT VARz1,SATZ CONSTm4):IF NOTdateiende(z1)THENn4END IF.n4:j2(CONCR(z1));disablestop;l2(CONCR(z1),m2(m4));g2:=m4.g2:z1.e1(z1.z0).o0.END PROCsatzaendern;PROCl2(DATEI VARz1,INT CONSTo4):IFp4THENq4END IF.p4:INT CONSTr4:=m2(g2);r4<>o4.q4:s4;t4.s4:
+k4(z1,r4).t4:INT VARh0,i0;r3(z1,o4,h0,i0);l4(z1,o4,h0,i0).g2:z1.e1(z1.z0).o0.END PROCl2;PROCsatzloeschen(EUDAT VARz1):IF NOTdateiende(z1)THENu4END IF.u4:disablestop;v4(CONCR(z1));w4(CONCR(z1));z1.w0DECR1.END PROCsatzloeschen;PROCv4(DATEI VARz1):x4(z1);INT CONSTk0:=z1.z0;k4(z1,m2(g2));z1.e1(k0).i0:=z1.u0;z1.u0:=k0.g2:z1.e1(k0).o0.END PROCv4;PROCsatzeinfuegen(EUDAT VARz1,SATZ CONSTm4):y4(CONCR(z1),m4)END PROCsatzeinfuegen;PROCy4(DATEI VARz1,SATZ CONSTm4):INT VARk0,h0,i0;enablestop;z4;a5;disablestop;z1.w0INCR1;b5(z1,k0);INT CONSTc5:=m2(k1);r3(z1,c5,i0,h0);l4(z1,c5,i0,h0);j2(z1).z4:IFz1.u0<>0THENk0:=z1.u0;z1.u0:=z1.e1(k0).i0ELIFz1.v0=d0THENerrorstop(i1)ELSEz1.v0INCR1;k0:=z1.v0END IF;z1.e1(k0).n0:=0;z1.e1(k0).o0:=m4.a5:feldlesen(m4,1,k1);IFz1.b1>0THEN IFk1=""THENd5;feldaendern(z1.e1(k0).o0,1,k1)END IF END IF.d5:k1:=text(z1.b1);k1:=e5+k1;IFz1.b1>32000THENz1.b1:=1ELSEz1.b1INCR1END IF.e5:(4-length(k1))*"0".END PROCy4;PROCautomatischerschluessel(EUDAT VARf5,BOOL CONSTg5):IFg5ANDf5.b1<0OR NOTg5
+ANDf5.b1>0THENf5.b1:=-f5.b1END IF END PROCautomatischerschluessel;BOOL PROCautomatischerschluessel(EUDAT CONSTf5):f5.b1>0END PROCautomatischerschluessel;INTVEC VARh5;PROCw4(DATEI VARz1):INT CONSTx0:=z1.x0,h0:=index.h0,i0:=index.i0;BOOL VARi5;delete(index.l0,z1.y0);index.j0DECR1;j5(z1,x0,i0,i5);IF NOTi5THENj5(z1,h0,x0,i5)END IF;k5(z1).index:z1.index(x0).END PROCw4;PROCj5(DATEI VARz1,INT CONSTz3,l5,BOOL VARi5):i5:=FALSE;IFz3<>0ANDl5<>0THENm5END IF.m5:INT CONSTn5:=index.j0,o5:=p5.j0;IFq5THENr5;i5:=TRUE END IF.q5:n5+o5<=g0ORn5=0ORo5=0.r5:index.j0INCRp5.j0;s5(z1,p5.l0,z3);index.l0CATp5.l0;t5.t5:index.i0:=p5.i0;IFindex.i0<>0THENz1.index(index.i0).h0:=z3ELSEz1.r0:=z3END IF;p5.i0:=z1.t0;z1.t0:=l5.index:z1.index(z3).p5:z1.index(l5).END PROCj5;PROCk5(DATEI VARz1):INT CONSTg2:=z1.satznr;u2(z1,1,1,1);w2(z1,g2)END PROCk5;PROCs5(DATEI VARz1,INTVEC CONSTl0,INT CONSTz3):INT VARa2;FORa2FROM1UPTOlength(l0)DIV2REPz1.e1(l0ISUBa2).m0:=z3END REP END PROCs5;PROCb5(DATEI VARz1,INT CONSTu5):INT VARx0:=z1.x0;IF
+index.j0>=f0THENv5END IF;index.j0INCR1;insert(index.l0,z1.y0,u5);z1.z0:=u5;z1.e1(u5).m0:=x0.v5:INT VARc5:=0;w5;IFc5<>0THENx5ELSEy5(z1)END IF;k5(z1);x0:=z1.x0.w5:IFz1.t0<>0THENc5:=z1.t0;z1.t0:=p5.i0ELIFz1.s0<c0THENz1.s0INCR1;c5:=z1.s0;p5.l0:=m1END IF.x5:z5;a6;p5.j0:=index.j0-b6;u1(index.l0,p5.l0,b6+1);index.j0:=b6;s5(z1,p5.l0,c5).z5:INT CONSTc6:=index.i0;IFc6<>0THENz1.index(c6).h0:=c5ELSEz1.r0:=c5END IF;p5.i0:=c6;p5.h0:=x0;index.i0:=c5.a6:INT VARb6;IFd6THENb6:=g0ELSEb6:=index.j0DIV2+1END IF.d6:c6=0.index:z1.index(x0).p5:z1.index(c5).END PROCb5;PROCy5(DATEI VARz1):INT VARx0:=1;REPe6;f6END REP.e6:BOOL VARi5;REP INT CONSTi0:=index.i0;j5(z1,x0,i0,i5)UNTIL NOTi5END REP;IFi0=0THEN LEAVEy5ELIFg6THENh6END IF.g6:INT CONSTi6:=g0-index.j0;i6>0.h6:x1(p5.l0,h5,i6+1);p5.j0DECRi6;s5(z1,h5,x0);index.l0CATh5;index.j0:=g0.f6:x0:=i0.index:z1.index(x0).p5:z1.index(i0).END PROCy5;TEXT VARj6:=",";LETk6=1;TEXT PROCdezimalkomma:j6END PROCdezimalkomma;PROCdezimalkomma(TEXT CONSTl6):IFlength(l6)<>1THENerrorstop(
+j1)ELSEj6:=l6ENDIF END PROCdezimalkomma;INT PROCunsortiertesaetze(EUDAT CONSTz1):z1.a1END PROCunsortiertesaetze;TEXT PROCsortierreihenfolge(EUDAT CONSTz1):z1.q0END PROCsortierreihenfolge;PROCj2(DATEI VARz1):IFm6(z1)THENdisablestop;z1.e1(z1.z0).n0INCRk6;z1.a1INCR1END IF END PROCj2;PROCx4(DATEI VARz1):IF NOTm6(z1)THENdisablestop;z1.e1(z1.z0).n0DECRk6;z1.a1DECR1END IF END PROCx4;BOOL PROCm6(DATEI CONSTz1,INT CONSTk0):(z1.e1(k0).n0ANDk6)=0END PROCm6;BOOL PROCm6(DATEI CONSTz1):m6(z1,z1.z0)END PROCm6;INTVEC VARn6;TEXT VARq0;TEXT VARo6,p6;PROCsortiere(EUDAT VARz1):q0:=z1.q0;IFq0=f1THENq6END IF;r6(CONCR(z1)).q6:INT VARa2;FORa2FROM1UPTOz1.felderzahlREPq0CATcode(a2)END REP.END PROCsortiere;PROCsortiere(EUDAT VARz1,TEXT CONSTs6):q0:=s6;r6(CONCR(z1))END PROCsortiere;PROCr6(DATEI VARz1):IFz1.q0<>q0THENz1.q0:=q0;z1.a1:=z1.w0+1ELIFz1.a1=0THEN LEAVEr6END IF;n6:=z1.feldinfo;IFt6THENu6(z1);z1.a1:=0ELSEv6(z1)END IF;w2(z1,1).t6:z1.w0DIVz1.a1<3.END PROCr6;PROCu6(DATEI VARz1):INT VARz0,o0:=1,w6;w2(z1,1);x4(
+z1);z0:=z1.z0;WHILEx6REPy6;z6;cout(o0)END REP;disablestop;y5(z1);u2(z1,1,1,1).x6:o0<z1.w0.y6:o0INCR1;w2(z1,o0);w6:=z0;z0:=z1.z0.z6:IFa7THENb7(z1,o0,z0);z0:=w6ELSEx4(z1)END IF.a7:z1.e1(w6).o0GROESSERz1.e1(z0).o0.END PROCu6;PROCv6(DATEI VARz1):INT VARa2;FORa2FROM1UPTOz1.v0REP IF NOTm6(z1,a2)THENb7(z1,z1.w0+1,a2);cout(a2)END IF END REP END PROCv6;PROCb7(DATEI VARz1,INT CONSTsatznr,z0):c7;d7.c7:INT VARe7:=1,f7:=satznr-1,g7;WHILEh7REPi7;j7END REP.h7:e7<=f7.i7:g7:=(e7+f7)DIV2;INT VARk7;w2(z1,g7);IF NOTm6(z1)THENl7END IF;k7:=z1.z0.l7:WHILEz1.satznr<f7REPf3(z1);IFm7THEN LEAVEl7END IF END REP;WHILEz1.satznr>e7REPi3(z1);IFm7THEN LEAVEl7END IF END REP;LEAVEc7.m7:m6(z1).j7:IFn7GROESSERz1.e1(z0).o0THENf7:=g7-1ELSEe7:=g7+1END IF.n7:z1.e1(k7).o0.d7:p3(z1,z0);IFz1.satznr<e7THENe7DECR1END IF;disablestop;x4(z1);o7;w4(z1);w2(z1,e7);b5(z1,z0);p7.o7:INT CONSTq7:=m2(g2);k4(z1,q7).p7:INT VARh0,i0;r3(z1,q7,h0,i0);l4(z1,q7,h0,i0).g2:z1.e1(z0).o0.END PROCb7;BOOL OP GROESSER(SATZ CONSTr7,s7):t7;u7;SELECTn6ISUBv7
+OF CASE0:w7CASE1:x7CASE2:y7OTHERWISEz7END SELECT.t7:INT VARa8:=1;WHILEa8<length(q0)REP INT CONSTv7:=code(q0SUBa8);feldlesen(r7,v7,o6);feldlesen(s7,v7,p6);SELECTn6ISUBv7OF CASE0:b8CASE1:c8OTHERWISEd8END SELECT;a8INCR2END REP;LEAVE GROESSER WITH FALSE.u7:BOOL VARe8;IF(q0SUB(a8+1))="-"THENe8:=FALSE ELSEe8:=TRUE END IF.c8:REAL VARf8,g8;wertberechnen(o6,f8);wertberechnen(p6,g8);IFf8<>g8THEN LEAVEt7END IF.b8:IF NOT(o6LEXEQUALp6)THEN LEAVEt7END IF.d8:IFo6<>p6THEN LEAVEt7END IF.x7:IFe8THENf8>g8ELSEf8<g8END IF.w7:IFe8THENo6LEXGREATERp6ELSEp6LEXGREATERo6END IF.y7:h8(o6);h8(p6);IFe8THENo6>p6ELSEo6<p6END IF.z7:IFe8THENo6>p6ELSEo6<p6END IF.END OP GROESSER;PROCwertberechnen(TEXT CONSTi8,REAL VARwert):LETj8="0123456789";TEXT VARk8:=j6,text;INT VARk0;INT CONSTl8:=length(i8);m8;WHILEk0<=l8REPn8;k0INCR1END REP;wert:=real(text).m8:k0:=pos(i8,"0","9",1);IFk0=0THENwert:=0.0;LEAVEwertberechnenELIFpos(i8,"-",1,k0)>0THENtext:="-"ELSEtext:=f1END IF;.n8:TEXT CONSTo8:=i8SUBk0;IFpos(j8,o8)>0THENtextCATo8ELIFo8=k8
+THENtextCAT".";k8:=f1END IF.END PROCwertberechnen;PROCh8(TEXT VARp8):IFlength(p8)<>8THENp8:=f1ELSEp8:=subtext(p8,7)+subtext(p8,4,5)+subtext(p8,1,2)END IF END PROCh8;PROCreorganisiere(TEXT CONSTc2):EUDAT VARq8,r8;oeffne(q8,c2);disablestop;DATASPACE VARd2:=nilspace;oeffne(r8,d2);s8(CONCR(q8),r8);IF NOTiserrorTHENforget(c2,quiet);copy(d2,c2)END IF;forget(d2)END PROCreorganisiere;PROCs8(DATEI VARq8,EUDAT VARr8):enablestop;t8;u8(q8,CONCR(r8)).t8:w2(q8,1);aufsatz(r8,1);WHILE NOTdateiendeREPsatzeinfuegen(r8,v8);cout(q8.satznr);f3(q8);weiter(r8)END REP.dateiende:q8.satznr>q8.w0.v8:q8.e1(q8.z0).o0.END PROCs8;PROCu8(DATEI VARq8,r8):r8.felderzahl:=q8.felderzahl;r8.p0:=q8.p0;r8.feldinfo:=q8.feldinfo;r8.q0:=q8.q0;r8.c1(1):=q8.c1(1);r8.c1(2):=q8.c1(2);r8.c1(3):=q8.c1(3)END PROCu8;PROCnotizenlesen(EUDAT CONSTz1,INT CONSTv2,TEXT VARw8):w8:=z1.c1(v2)END PROCnotizenlesen;PROCnotizenaendern(EUDAT VARz1,INT CONSTv2,TEXT CONSTw8):z1.c1(v2):=w8END PROCnotizenaendern;END PACKETeudasdateien;
+PACKETdatenverwaltungDEFINESoeffne,kopple,kette,zugriff,sichere,dateienloeschen,aufkoppeldatei,anzahlkoppeldateien,anzahldateien,aendernerlaubt,inhaltveraendert,eudasdateiname,folgedatei,dateiversion,anzahlfelder,feldnamenlesen,feldnamenbearbeiten,feldnummer,feldinfo,notizenlesen,notizenaendern,feldlesen,feldbearbeiten,feldaendern,satznummer,satzkombination,dateiende,weiter,zurueck,aufsatz,satzeinfuegen,satzloeschen,aenderungeneintragen,suchbedingung,suchbedingunglesen,suchbedingungloeschen,suchversion,satzausgewaehlt,markierungaendern,satzmarkiert,markierungenloeschen,markiertesaetze:LET INTVEC=TEXT,DATEI=STRUCT(TEXTname,SATZb0,INTVECc0,INTd0,INTe0,INTf0,DATASPACEg0,EUDATh0,SATZi0,BOOLj0,BOOLk0,l0,m0,TEXTn0,INTVECo0,INTp0),VERWEIS=STRUCT(INTq0,r0);LETs0="",t0="";LETmaxint=32767,u0=10,v0=256,w0=32;ROWu0DATEI VARx0;INT VARy0:=0,z0:=0,a1,b1:=0,c1,d1:=0,e1,f1,g1,h1:=0;BOOL VARi1:=TRUE,j1,k1;TEXT VARl1;ROWv0VERWEIS VARm1;ROWw0VERWEIS VARn1;INT VARo1;LETp1=#301
+#"Zuviel Dateien geoeffnet",q1=#302
+#"Datei existiert nicht",r1=#303
+#"Nicht moeglich, wenn auf Koppeldatei geschaltet",s1=#304
+#"Zu viele Felder",t1=#305
+#"Zu viele Koppelfelder",u1=#306
+#"keine Koppelfelder vorhanden",v1=#307
+#"kein direkter Dateizugriff bei geketteten oder gekoppelten Dateien",w1=#308
+#"keine Datei geoeffnet",x1=#309
+#"Datei nicht gesichert",y1=#310
+#"Suchmuster zu umfangreich";TEXT VARz1;TEXT VARa2:=" ";INTVEC VARb2;OP CAT(INTVEC VARtext,INT CONSTwert):replace(a2,1,wert);textCATa2END OP CAT;PROCinsert(INTVEC VARc2,INT CONSTd2,wert):INT CONSTe2:=d2+d2-2;b2:=subtext(c2,e2+1);c2:=subtext(c2,1,e2);c2CATwert;c2CATb2END PROCinsert;PROCdelete(INTVEC VARc2,INT CONSTd2):INT CONSTe2:=d2+d2-2;b2:=subtext(c2,e2+3);c2:=subtext(c2,1,e2);c2CATb2END PROCdelete;PROCf2(INTVEC VARc2,INT CONSTg2,h2):INT VARi2;FORi2FROMg2UPTOlength(c2)DIV2-1REPreplace(c2,i2,(c2ISUBi2)+h2)END REP END PROCf2;EUDAT VARj2;SATZ VARk2;PROCl2(TEXT CONSTm2):IFy0=u0THENerrorstop(p1)END IF;IF NOTexists(m2)THENerrorstop(q1)END IF;IFn2THENerrorstop(r1)END IF;oeffne(j2,m2)END PROCl2;PROCo2(DATEI VARq0,TEXT CONSTm2):IFj1THENq0.g0:=old(m2);oeffne(q0.h0,q0.g0)ELSEoeffne(q0.h0,m2)END IF;q0.e0:=0;q0.k0:=FALSE;q0.l0:=FALSE;q0.name:=m2;p2(q0)END PROCo2;PROCq2(INT CONSTr2):INT VARs2:=r2;WHILEx0(s2).e0<>0REPs2:=x0(s2).e0END REP;x0(s2).e0:=y0END PROCq2;PROCt2:IFdateiende(x0(1).h0)THEN
+aufsatz(1)ELSEaufsatz(satznr(x0(1).h0))END IF END PROCt2;PROCu2:c1:=felderzahl(x0(1).h0);d1:=c1;feldnamenlesen(x0(1).h0,x0(1).b0);o1:=0;INT VARi2;FORi2FROM1UPTOd1REPm1(i2).q0:=0END REP END PROCu2;PROCv2:h1INCR1;IFh1>32000THENh1:=-32000END IF END PROCv2;PROCoeffne(TEXT CONSTm2,BOOL CONSTw2):enablestop;dateienloeschen(FALSE);suchbedingungloeschen;l2(m2);j1:=w2;x2;o2(x0(y0),m2);t2;u2.x2:y0:=1;v2;g1:=0.END PROCoeffne;PROCkopple(TEXT CONSTm2):enablestop;IFy0=0THENerrorstop(w1)END IF;l2(m2);y2;z2;a3;o2(x0(y0),m2);b3.y2:feldnamenlesen(j2,k2);INT VARc0:=0;INTVEC VARc3:=t0;WHILEc0<felderzahl(j2)REPfeldlesen(k2,c0+1,z1);INT CONSTindex:=feldindex(x0(1).b0,z1);IFindex>0THENc0INCR1;c3CATindexEND IF UNTILindex=0END REP.z2:IFd1+felderzahl(j2)-c0>v0THENerrorstop(s1)ELIFo1+c0>w0THENerrorstop(t1)ELIFc0=0THENerrorstop(u1)END IF;y0INCR1;x0(y0).b0:=k2;x0(y0).c0:=c3;x0(y0).d0:=c0;INT VARd3:=c0;WHILEd3<felderzahl(j2)REPd1INCR1;d3INCR1;m1(d1).q0:=y0;m1(d1).r0:=d3END REP;FORd3FROM1UPTOc0REPe3END REP.e3:INT
+CONSTf3:=c3ISUBd3;IFm1(f3).q0=0THENg3ELSEh3END IF.g3:o1INCR1;n1(o1).q0:=y0;n1(o1).r0:=d3;m1(f3).q0:=o1;m1(f3).r0:=1.h3:INT CONSTi3:=m1(f3).q0+m1(f3).r0;j3;m1(f3).r0INCR1;n1(i3).q0:=y0;n1(i3).r0:=d3.j3:INT VARk3;FORk3FROMo1DOWNTOi3REPn1(k3+1):=n1(k3)END REP;o1INCR1;FORk3FROM1UPTOc1REP IFm1(k3).q0>=i3THENm1(k3).q0INCR1END IF END REP.a3:z0INCR1;IFb1=0THENb1:=y0ELSEq2(b1)END IF.b3:v2;x0(y0).j0:=FALSE;x0(y0).m0:=FALSE;x0(y0).f0:=satznr(j2);l3(x0(y0)).END PROCkopple;PROCkette(TEXT CONSTm2):enablestop;IFy0=0THENerrorstop(w1)END IF;l2(m2);y0INCR1;o2(x0(y0),m2);q2(1);IFi1THENaufsatz(satznummer)END IF END PROCkette;PROCzugriff(PROC(EUDAT VAR)m3):IFy0>1ORn2THENerrorstop(v1)ELSEaenderungeneintragen;m3(x0(1).h0);v2;t2;u2;x0(1).l0:=TRUE ENDIF END PROCzugriff;PROCsichere(INT CONSTn3,TEXT CONSTm2):aenderungeneintragen;notizenaendern(x0(n3).h0,2,date);IFj1THENforget(m2,quiet);copy(x0(n3).g0,m2)END IF;x0(n3).l0:=FALSE END PROCsichere;PROCdateienloeschen(BOOL CONSTo3):aenderungeneintragen;IFn2THEN
+aufkoppeldatei(0)END IF;p3;q3.p3:z0:=0;b1:=0;x0(1).e0:=0;d1:=0;i1:=TRUE.q3:WHILEy0>0REP IFr3AND NOTo3THENerrorstop(x1);LEAVEdateienloeschenEND IF;forget(x0(y0).g0);y0DECR1END REP.r3:j1ANDx0(y0).l0.END PROCdateienloeschen;INT VARs3,t3,u3,v3,w3,x3,y3,z3;BOOL VARa4;INTVEC VARb4;SATZ VARc4;BOOL VARn2:=FALSE;INT VARd4:=0,e4:=1;BOOL PROCaufkoppeldatei:n2END PROCaufkoppeldatei;PROCaufkoppeldatei(INT CONSTf4):disablestop;v2;IFn2THENg4;n2:=FALSE;h4;i4ELSEj4;n2:=TRUE;k4 END IF.g4:a1:=s3;c1:=t3;d1:=u3;e1:=v3;g1:=x3;b1:=y3;x0(e4).e0:=z3;l4:=d4;k1:=a4;m4:=b4;n4:=c4;IFl4>0THENk8:=1ELSEk8:=-1END IF.
+i4:d4:=0;e4:=1;enablestop;aufsatz(satznummer);WHILEf1<>w3REPweiter(1)END REP.h4:x0(e4).f0:=satznr(x0(e4).h0);IFf4=1AND NOTdateiende(x0(a1).h0)THENo4END IF.o4:INT VARp4;FORp4FROM1UPTOx0(e4).d0REPfeldaendern(x0(a1).h0,q4,r4)END REP;w3:=1.q4:x0(e4).c0ISUBp4.r4:feldlesen(x0(e4).h0,p4,z1);z1.j4:s3:=a1;t3:=c1;u3:=d1;v3:=e1;w3:=f1;x3:=g1;y3:=b1;z3:=x0(f4).e0;a4:=k1;b4:=m4;c4:=n4.k4:a1:=f4;d4:=l4;e4:=f4;c1:=felderzahl(x0(f4).h0);d1:=c1;e1:=0;g1
+:=(length(x0(f4).o0)-1)DIV2;b1:=0;x0(f4).e0:=0;suchbedingungloeschen;aufsatz(x0(f4).f0).END PROCaufkoppeldatei;INT PROCanzahlkoppeldateien:z0END PROCanzahlkoppeldateien;INT PROCanzahldateien:y0END PROCanzahldateien;BOOL PROCaendernerlaubt:j1END PROCaendernerlaubt;BOOL PROCinhaltveraendert(INT CONSTs4):aenderungeneintragen;x0(s4).l0END PROCinhaltveraendert;TEXT PROCeudasdateiname(INT CONSTs4):x0(s4).nameEND PROCeudasdateiname;INT PROCfolgedatei(INT CONSTs4):IFs4=0THENb1ELSEx0(s4).e0END IF END PROCfolgedatei;INT PROCdateiversion:h1END PROCdateiversion;INT PROCanzahlfelder:d1END PROCanzahlfelder;PROCfeldnamenlesen(INT CONSTd3,TEXT VARname):IFd3<=c1THENfeldlesen(x0(e4).b0,d3,name)ELSEfeldlesen(t4,u4,name)END IF.t4:x0(m1(d3).q0).b0.u4:m1(d3).r0.END PROCfeldnamenlesen;PROCfeldnamenbearbeiten(INT CONSTd3,PROC(TEXT CONST,INT CONST,INT CONST)v4):IFd3<=c1THENfeldbearbeiten(x0(e4).b0,d3,PROC(TEXT CONST,INT CONST,INT CONST)v4)ELSEfeldbearbeiten(t4,u4,PROC(TEXT CONST,INT CONST,INT CONST)v4)END IF.
+t4:x0(m1(d3).q0).b0.u4:m1(d3).r0.END PROCfeldnamenbearbeiten;INT PROCfeldnummer(TEXT CONSTw4):INT VARx4:=c1,f4:=feldindex(x0(e4).b0,w4),s2:=b1;WHILEf4=0ANDs2<>0REPf4:=feldindex(x0(s2).b0,w4);y4;s2:=x0(s2).e0END REP;f4.y4:INT CONSTz4:=x0(s2).d0;IFf4=0THENx4INCRfelderzahl(x0(s2).h0);x4DECRz4ELSEf4INCRx4;f4DECRz4END IF.END PROCfeldnummer;INT PROCfeldinfo(INT CONSTd3):IFd3<=c1THENfeldinfo(x0(e4).h0,d3)ELSEfeldinfo(x0(t4).h0,u4)END IF.t4:m1(d3).q0.u4:m1(d3).r0.END PROCfeldinfo;PROCnotizenlesen(INT CONSTf4,TEXT VARa5):notizenlesen(x0(e4).h0,f4,a5)END PROCnotizenlesen;PROCnotizenaendern(INT CONSTf4,TEXT CONSTa5):notizenaendern(x0(e4).h0,f4,a5)END PROCnotizenaendern;PROCfeldlesen(INT CONSTd3,TEXT VARa5):IFd3<=c1THENfeldlesen(x0(a1).h0,d3,a5)ELSEb5END IF.b5:INT CONSTt4:=m1(d3).q0;IFx0(t4).j0THENfeldlesen(x0(t4).i0,u4,a5)ELSEfeldlesen(x0(t4).h0,u4,a5)END IF.u4:m1(d3).r0.END PROCfeldlesen;PROCfeldbearbeiten(INT CONSTd3,PROC(TEXT CONST,INT CONST,INT CONST)v4):IFd3<=c1THENfeldbearbeiten(x0(a1).h0,
+d3,PROC(TEXT CONST,INT CONST,INT CONST)v4)ELSEc5END IF.c5:INT CONSTt4:=m1(d3).q0;IFx0(t4).j0THENfeldbearbeiten(x0(t4).i0,u4,PROC(TEXT CONST,INT CONST,INT CONST)v4)ELSEfeldbearbeiten(x0(t4).h0,u4,PROC(TEXT CONST,INT CONST,INT CONST)v4)END IF.u4:m1(d3).r0.END PROCfeldbearbeiten;PROCfeldaendern(INT CONSTd3,TEXT CONSTa5):INT CONSTt4:=m1(d3).q0;IFd3<=c1THENd5ELSEe5END IF.d5:x0(a1).l0:=TRUE;IFf5CANDg5THENh5END IF;feldaendern(x0(a1).h0,d3,a5).f5:NOTn2CANDt4>0.g5:feldlesen(x0(a1).h0,d3,z1);z1<>a5.h5:INT VARi5:=u4,j5:=t4;REPk5(x0(l5));x0(l5).m0:=TRUE;feldaendern(x0(l5).i0,f3,a5);j5INCR1;i5DECR1UNTILi5=0END REP.e5:k5(x0(t4));IFm5THENx0(t4).k0:=TRUE;feldaendern(x0(t4).i0,u4,a5)END IF.m5:feldlesen(x0(t4).i0,u4,z1);z1<>a5.u4:m1(d3).r0.l5:n1(j5).q0.f3:n1(j5).r0.END PROCfeldaendern;PROCk5(DATEI VARq0):IF NOTq0.j0THENq0.j0:=TRUE;n5END IF.n5:IFdateiende(q0.h0)THENsatzinitialisieren(q0.i0,q0.d0);o5ELSEsatzlesen(q0.h0,q0.i0)END IF.o5:INT VARi2;FORi2FROM1UPTOq0.d0REPfeldlesen(q0.c0ISUBi2,z1);feldaendern(
+q0.i0,i2,z1)END REP.END PROCk5;PROCl3(DATEI VARq0):p5;q5.p5:feldlesen(x0(a1).h0,r5,n0).r5:q0.c0ISUB1.n0:q0.n0.q5:aufsatz(q0.h0,n0);WHILE NOTs5(q0)REPweiter(q0.h0,n0)END REP;IFdateiende(q0.h0)THENk5(q0)ELSEq0.j0:=FALSE END IF.END PROCl3;PROCt5:INT VARs2:=b1;WHILEs2<>0REPl3(x0(s2));s2:=x0(s2).e0END REP;f1:=1END PROCt5;BOOL PROCs5(DATEI CONSTq0):IF NOTdateiende(q0.h0)THENu5END IF;TRUE.u5:INT VARv5;FORv5FROM2UPTOq0.d0REPfeldlesen(x0(a1).h0,c0ISUBv5,z1);feldbearbeiten(q0.h0,v5,PROC(TEXT CONST,INT CONST,INT CONST)w5);IF NOTx5THEN LEAVEs5WITH FALSE END IF END REP.c0:q0.c0.END PROCs5;BOOL VARx5;PROCw5(TEXT CONSTy5,INT CONSTr2,z5):x5:=length(z1)+r2=z5+1CANDpos(y5,z1,r2,z5+1)=r2END PROCw5;LETa6=22101,b6="h",c6=""27"";BOOL VARd6;PROCe6:TEXT VARf6;d6:=FALSE;REPf6:=incharety;type(f6)UNTILf6=s0END REP END PROCe6;PROCg6:IFd6THENtype(c6)END IF END PROCg6;BOOL PROCh6:TEXT VARf6;REPf6:=incharety;IFf6=s0THEN LEAVEh6WITH FALSE ELSEi6END IF END REP;FALSE.i6:IFd6THENd6:=FALSE;j6ELSEk6END IF.j6:IFf6=b6THENl6
+;errorstop(a6,s0);LEAVEh6WITH TRUE ELSEtype(c6);type(f6)END IF.k6:IFf6=c6THENd6:=TRUE ELSEtype(f6)END IF.l6:REP UNTILgetcharety=s0END REP.END PROCh6;PROCweiter(INT CONSTm6):IF NOTi1THENaenderungeneintragen;n6END IF.n6:SELECTm6OF CASE1:o6CASE2:p6CASE3:q6END SELECT.o6:r6(FALSE).p6:e6;REPr6(k1);cout(satznummer)UNTILsatzausgewaehltORi1ORh6END REP;g6.q6:INT VARs6:=satznr(x0(a1).h0);WHILEt6ANDe0<>0REPu6;s6:=1END REP;aufsatz(x0(a1).h0,v6);cout(satznummer);t5;i1:=dateiende(x0(a1).h0);w6.t6:x6(x0(a1),s6+1);INT CONSTv6:=x0(a1).o0ISUBx0(a1).p0;v6<>maxint.e0:x0(a1).e0.END PROCweiter;PROCzurueck(INT CONSTm6):IFsatznummer>1THENaenderungeneintragen;y6END IF.y6:SELECTm6OF CASE1:z6CASE2:a7CASE3:b7END SELECT.z6:c7(FALSE).a7:e6;REPc7(k1);cout(satznummer)UNTILsatzausgewaehltORsatznummer=1ORh6END REP;g6.b7:INT VARs6:=satznr(x0(a1).h0);WHILEt6ANDa1<>1REPd7;s6:=maxint-1END REP;aufsatz(x0(a1).h0,e7);cout(satznummer);t5;i1:=FALSE;w6.t6:INT VARe7;x6(x0(a1),s6);IFx0(a1).p0=1THENe7:=1;TRUE ELSEe7:=x0(a1).o0ISUB(
+x0(a1).p0-1);FALSE END IF.END PROCzurueck;PROCr6(BOOL CONSTf7):g7;IFh7THENo6;t5ELSEf1INCR1END IF;w6.g7:INT VARs2:=b1;WHILEs2>0REPi7;s2:=x0(s2).e0END REP.i7:BOOL VARj7;k7(x0(s2),j7);IFj7THEN LEAVEg7END IF.h7:s2=0.o6:IFf7THENweiter(x0(a1).h0,l1)ELSEweiter(x0(a1).h0)END IF;WHILEdateiende(x0(a1).h0)REPl7UNTILi1END REP.l7:IFx0(a1).e0<>0THENu6;m7ELSEi1:=TRUE END IF.m7:aufsatz(x0(a1).h0,1).END PROCr6;PROCk7(DATEI VARq0,BOOL VARj7):IFdateiende(q0.h0)THENj7:=FALSE ELSEn7END IF.n7:j7:=TRUE;REPweiter(q0.h0,q0.n0);IFdateiende(q0.h0)THENj7:=FALSE;aufsatz(q0.h0,q0.n0)END IF UNTILs5(q0)END REP.END PROCk7;PROCc7(BOOL CONSTf7):WHILEsatznr(x0(a1).h0)=1CANDsatznummer>1REPd7;o7(x0(a1).h0)END REP;IFf7THENzurueck(x0(a1).h0,l1)ELSEzurueck(x0(a1).h0)END IF;i1:=FALSE;t5;w6END PROCc7;PROCu6:e1INCRsaetze(x0(a1).h0);a1:=x0(a1).e0END PROCu6;PROCd7:INT VARp7:=1;WHILEx0(p7).e0<>a1REPp7:=x0(p7).e0END REP;e1DECRsaetze(x0(p7).h0);a1:=p7END PROCd7;PROCaenderungeneintragen:INT VARs2:=b1;WHILEs2<>0REPq7;s2:=x0(s2).e0END
+REP.q7:IFx0(s2).j0THENr7(x0(s2))END IF.END PROCaenderungeneintragen;PROCr7(DATEI VARq0):IFs7AND NOTt7THENu7ELIFv7ANDw7THENx7ELIFt7THENl3(q0)END IF;y7;k0:=FALSE;t7:=FALSE.s7:NOTdateiende(q0.h0)ANDk0.v7:felderzahl(i0)>q0.d0.w7:t7ORk0.x7:l0:=TRUE;feldlesen(i0,1,q0.n0);satzeinfuegen(q0.h0,i0).y7:q0.j0:=FALSE.u7:l0:=TRUE;satzaendern(q0.h0,i0).k0:q0.k0.t7:q0.m0.i0:q0.i0.l0:q0.l0.END PROCr7;PROCo7(EUDAT VARh0):aufsatz(h0,saetze(h0)+1)END PROCo7;PROCaufsatz(INT CONSTsatznr):aenderungeneintragen;a1:=e4;e1:=0;WHILEz7ANDa8REPu6END REP;aufsatz(x0(a1).h0,satznr-e1);t5;i1:=dateiende(x0(a1).h0);w6.z7:satznr-e1>saetze(x0(a1).h0).a8:x0(a1).e0<>0.END PROCaufsatz;INT PROCsatznummer:e1+satznr(x0(a1).h0)END PROCsatznummer;INT PROCsatzkombination:f1END PROCsatzkombination;BOOL PROCdateiende:i1END PROCdateiende;SATZ VARb8;satzinitialisieren(b8);PROCsatzeinfuegen:aenderungeneintragen;c8;satzeinfuegen(x0(a1).h0,b8);x0(a1).l0:=TRUE;d8;i1:=FALSE;w6.c8:x6(x0(a1),satznr(x0(a1).h0));f2(x0(a1).o0,x0(a1).p0,1).d8:f1
+:=1;INT VARs2:=b1;WHILEs2<>0REPo7(x0(s2).h0);s2:=x0(s2).e0END REP.END PROCsatzeinfuegen;PROCsatzloeschen:IF NOTi1THENaenderungeneintragen;e8;satzloeschen(x0(a1).h0);x0(a1).l0:=TRUE;aufsatz(satznummer)END IF.e8:IFsatzmarkiertTHENdelete(x0(a1).o0,x0(a1).p0);g1DECR1END IF;f2(x0(a1).o0,x0(a1).p0,-1).END PROCsatzloeschen;LETf8=100;ROWf8STRUCT(INTr0,g8,h8,i8,TEXTn0)VARj8;SATZ VARn4;INT VARl4,k8,l8:=1;BOOL VARm8,n8;suchbedingungloeschen;INT VARo8;LETp8=1,q8=2,r8=3,s8=4,t8=5,u8=6,v8=7,w8=8,x8=9;PROCw6:IFi1THENn8:=FALSE ELSEy8;n8:=z8END IF.y8:o8:=k8;WHILEo8>0REPa9;feldbearbeiten(b9,PROC(TEXT CONST,INT CONST,INT CONST)c9)END REP.a9:INT VARd9:=j8(o8).g8;IFd9>=256THENe9;f9END IF.e9:feldlesen((d9AND255)+1,z1).f9:IFg9=2THENh9END IF;j8(o8).n0:=z1.b9:j8(o8).r0.z8:o8<0.END PROCw6;PROCc9(TEXT CONSTy5,INT CONSTi9,j9):INT VARd9:=j8(o8).g8;IFd9>=256THENd9:=d9DIV256END IF;IFk9THENo8:=j8(o8).h8ELSEo8:=j8(o8).i8END IF.k9:SELECTd9OF CASEp8:l9CASEq8:m9CASEr8:n9CASEs8:o9CASEt8:p9CASEu8:q9CASEv8:r9CASEw8:s9CASEx8
+:t9OTHERWISE FALSE END SELECT.l9:SELECTg9OF CASE0:u9;z1LEXEQUALn0CASE1:u9;v9=w9OTHERWISElength(n0)=j9-i9+1ANDx9END SELECT.x9:i9>j9CORm9.m9:pos(y5,n0,i9,j9)=i9.n9:pos(y5,n0,j9+1-length(n0),j9)>0.o9:pos(y5,n0,i9,j9)>0.p9:u9;SELECTg9OF CASE0:n0LEXGREATERz1CASE1:v9<w9CASE2:h9;z1<n0OTHERWISEz1<n0END SELECT.q9:u9;SELECTg9OF CASE0:z1LEXGREATEREQUALn0CASE1:v9>=w9CASE2:h9;z1>=n0OTHERWISEz1>=n0END SELECT.r9:i9<=j9.s9:satzmarkiert.t9:TRUE.u9:z1:=subtext(y5,i9,j9).END PROCc9;TEXT PROCn0:j8(o8).n0END PROCn0;PROCh9:IFlength(z1)=8THEN TEXT CONSTy9:=subtext(z1,7,8);replace(z1,7,subtext(z1,1,2));replace(z1,1,y9)ELSEz1:=s0END IF END PROCh9;INT PROCg9:feldinfo(j8(o8).r0)END PROCg9;REAL PROCv9:REAL VARz9;wertberechnen(z1,z9);z9END PROCv9;REAL PROCw9:REAL VARz9;wertberechnen(n0,z9);z9END PROCw9;LETa10=";",b10=",",c10="..",d10="++",e10="--",f10="*";BOOL VARg10,h10,i10;INT VARj10,k10,l10,m10,n10;INTVEC VARm4;PROCsuchbedingung(INT CONSTd3,TEXT CONSTj8):INT VARr2:=1,o10:=0;INT CONSTp10:=length(j8)+1;k10:=0;n10
+:=d3;j10:=l4+1;WHILEr2<p10REPq10;r10;r2:=z5+2END REP;feldaendern(n4,d3,j8).q10:INT VARs10:=pos(j8,b10,r2);IFs10=0THENs10:=p10END IF;IFo10<r2THENt10END IF;INT CONSTz5:=min(s10,o10)-1.t10:k10INCR1;g10:=TRUE;IFk10>1THENk1:=FALSE END IF;o10:=pos(j8,a10,r2);IFo10=0THENo10:=p10END IF.r10:u10;h10:=TRUE;INT CONSTv10:=pos(j8,c10,r2,z5+1);IFw10THENx10(s0,x8,-k10)ELIFv10=0THENy10ELSEz10END IF.u10:IFsubtext(j8,r2,r2+1)=e10THENr2INCR2;i10:=TRUE ELSEi10:=FALSE END IF.w10:r2>z5.y10:IFa11THENb11ELSEc11END IF.a11:r2+1=z5CANDsubtext(j8,r2,z5)=d10.b11:x10(s0,w8,-k10).c11:INT VARd11:=pos(j8,f10,r2,z5+1);IFd11=0THENe11ELIFr2=z5THENf11ELSEg11;REPh11END REP END IF.e11:IFi11THENk1:=TRUE;l1:=j8END IF;x10(subtext(j8,r2,z5),p8,-k10).i11:d3=1ANDr2=1ANDz5=p10-1ANDj11AND NOTn2AND(j8SUB1)<>"&".j11:length(m4)<=2.f11:x10(s0,v8,-k10).g11:INT VARg8;IFd11=r2THENg8:=p8ELSEg8:=q8END IF.h11:IFg8<>p8THENk11END IF;r2:=d11+1;d11:=pos(j8,f10,r2,z5+1);IFd11=0THENd11:=z5+1;g8:=r8ELSEg8:=s8END IF.k11:TEXT CONSTn0:=subtext(j8,r2,
+d11-1);IFi10ORl11THEN IFi10THENh10:=TRUE END IF;x10(n0,g8,-k10);IFl11THEN LEAVEc11END IF ELSEx10(n0,g8,l4+2)END IF.l11:d11>=z5.z10:TEXT CONSTm11:=subtext(j8,r2,v10-1),n11:=subtext(j8,v10+2,z5);IFv10=r2THENx10(n11,t8,-k10)ELIFv10=z5-1THENx10(m11,u8,-k10)ELSEo11END IF.o11:IFi10THENx10(m11,u8,-k10);h10:=TRUE ELSEx10(m11,u8,l4+2)END IF;x10(n11,t8,-k10).END PROCsuchbedingung;PROCx10(TEXT CONSTp11,INT CONSTg8,h8):q11;r11;IFg10THENs11;t11;m10:=l4ELIFh10THENu11END IF;v11;w11.q11:m8:=FALSE;IFl4=d4THENl8INCR1;IFl8>32000THENl8:=1END IF END IF.r11:IFl4=f8THENsuchbedingungloeschen;errorstop(y1)ELSEl4INCR1;k8:=d4+1END IF.s11:IFk10>length(m4)DIV2THENm4CATl4;x11(k8,0,l4)END IF;IFk10=length(m4)DIV2THENl10:=0ELSEl10:=m4ISUB(k10+1)END IF.t11:x11(k8,-k10,l4);g10:=FALSE;h10:=FALSE.u11:x11(m10,l10,l4);m10:=l4;h10:=FALSE.v11:j8(l4).g8:=g8;j8(l4).r0:=n10;IFi10THENj8(l4).h8:=l10;j8(l4).i8:=h8ELSEj8(l4).h8:=h8;j8(l4).i8:=l10END IF.w11:IFy11THENz11ELSEa12END IF.y11:(p11SUB1)="&"CANDb12.b12:INT
+CONSTc12:=feldnummer
+(subtext(p11,2));c12>0.z11:j8(l4).g8:=c12-1+256*g8.a12:INT CONSTd12:=feldinfo(n10);IFd12=2AND(g8=t8ORg8=u8)THENz1:=p11;h9;j8(l4).n0:=z1ELSEj8(l4).n0:=p11END IF.END PROCx10;PROCx11(INT CONSTi9,wert,e12):INT VARi2;FORi2FROMi9UPTOl4-1REP IFj8(i2).h8=wertTHENj8(i2).h8:=e12ELIFj8(i2).i8=wertTHENj8(i2).i8:=e12END IF END REP END PROCx11;PROCsuchbedingunglesen(INT CONSTd3,TEXT VARj8):feldlesen(n4,d3,j8)END PROCsuchbedingunglesen;PROCsuchbedingungloeschen:disablestop;IFn2THENl4:=d4ELSEd4:=0;l4:=0END IF;k8:=-1;m4:=t0;satzinitialisieren(n4);k1:=FALSE;m8:=TRUE;n8:=NOTi1END PROCsuchbedingungloeschen;BOOL PROCsatzausgewaehlt:IF NOTm8THENw6;m8:=TRUE END IF;n8END PROCsatzausgewaehlt;INT PROCsuchversion:IFl4=d4THEN0ELSEl8END IF END PROCsuchversion;PROCx6(DATEI VARq0,INT CONSTy5):IF(q0.o0ISUBq0.p0)<y5THENf12ELSEg12END IF.f12:REPq0.p0INCR1UNTIL(q0.o0ISUBq0.p0)>=y5END REP.g12:WHILEq0.p0>1CAND(q0.o0ISUB(q0.p0-1))>=y5REPq0.p0DECR1END REP.END PROCx6;PROCmarkierungaendern:disablestop;IFsatzmarkiertTHENdelete(
+x0(a1).o0,x0(a1).p0);g1DECR1ELSEinsert(x0(a1).o0,x0(a1).p0,satznr(x0(a1).h0));g1INCR1END IF END PROCmarkierungaendern;BOOL PROCsatzmarkiert:INT CONSTy5:=satznr(x0(a1).h0);x6(x0(a1),y5);y5=(x0(a1).o0ISUBx0(a1).p0)END PROCsatzmarkiert;INT PROCmarkiertesaetze:g1END PROCmarkiertesaetze;PROCmarkierungenloeschen:disablestop;IFn2THENp2(x0(a1))ELSEh12END IF;g1:=0.h12:INT VARs2:=1;REPp2(x0(s2));s2:=x0(s2).e0UNTILs2=0END REP.END PROCmarkierungenloeschen;PROCp2(DATEI VARq0):q0.o0:=s0;q0.o0CATmaxint;q0.p0:=1END PROCp2;END PACKETdatenverwaltung;
+
diff --git a/app/eudas/4.3/src/eudas.2 b/app/eudas/4.3/src/eudas.2
new file mode 100644
index 0000000..0048409
--- /dev/null
+++ b/app/eudas/4.3/src/eudas.2
@@ -0,0 +1,62 @@
+PACKETverarbeitungDEFINESkopiere,stdkopiermuster,verarbeite,trage,eindeutigefelder,pruefe,wertemenge,feldmaske,tragesatz,holesatz,K,V,f,wert,zahltext,textdarstellung:SATZ VARb0,c0,d0;INT VARe0;BOOL VARf0;LETg0="",INTVEC=TEXT;INTVEC VARh0;TEXT VARi0:=" ";OP CAT(INTVEC VARj0,INT CONSTk0):replace(i0,1,k0);j0CATi0END OP CAT;PROCstdkopiermuster(TEXT CONSTl0,FILE VARm0):n0;INT VARo0;p0;q0;INT VARr0;FORr0FROM1UPTOo0REPs0;IFt0THENu0ELSEv0END IF END REP.p0:output(m0);EUDAT VARw0;IFexists(l0)THENoeffne(w0,l0)END IF.q0:IFexists(l0)CANDfelderzahl(w0)>0THENfeldnamenlesen(w0,b0);o0:=felderzahl(w0)ELSEx0;o0:=anzahlfelderEND IF.x0:TEXT VARy0;satzinitialisieren(b0);FORr0FROM1UPTOanzahlfelderREPfeldnamenlesen(r0,y0);feldaendern(b0,r0,y0)END REP.t0:feldnummer(y0)>0.s0:feldlesen(b0,r0,y0);put(m0,textdarstellung(y0)).u0:write(m0,"K f(");write(m0,textdarstellung(y0));putline(m0,");").v0:putline(m0,"K """";").END PROCstdkopiermuster;PROCkopiere(TEXT CONSTl0,FILE VARm0):z0(a1,m0).a1:"kopiere ("+
+textdarstellung(l0)+", ".END PROCkopiere;PROCz0(TEXT CONSTb1,FILE VARc1):d1;write(e1,b1);putline(e1,"PROC programmfunktion);");putline(e1,"PROC programmfunktion:");f1;putline(e1,"END PROC programmfunktion");g1;forget(h1,quiet).d1:TEXT VARh1;INT VARi1:=0;REPi1INCR1;h1:=text(i1)UNTIL NOTexists(h1)END REP;disablestop;FILE VARe1:=sequentialfile(output,h1);headline(e1,j1).f1:TEXT VARk1;input(c1);WHILE NOTeof(c1)REPgetline(c1,k1);putline(e1,k1)END REP.g1:TEXT CONSTl1:=std;run(h1);lastparam(l1).END PROCz0;PROCkopiere(TEXT CONSTl0,PROCm1):enablestop;INT VARn1;o1(n1);IFdateiendeTHENaufsatz(1);LEAVEkopiereELSEp1END IF;WHILE NOTdateiendeREPsatzinitialisieren(d0);e0:=1;m1;q1;satzeinfuegen(w0,d0);weiter(w0);weiter(n1)END REP;aufsatz(1).p1:f0:=TRUE;EUDAT VARw0;oeffne(w0,l0);aufsatz(w0,saetze(w0)+1);feldnamenlesen(w0,c0);h0:=g0.q1:IFf0THENfeldnamenaendern(w0,c0);f0:=FALSE END IF END PROCkopiere;OP K(TEXT CONSTy0,r1):IFf0THENs1;END IF;feldaendern(d0,h0ISUBe0,r1);e0INCR1.s1:INT VARt1:=feldindex(c0,y0);
+IFt1=0THENt1:=felderzahl(c0)+1;feldaendern(c0,t1,y0);END IF;h0CATt1.END OP K;PROCverarbeite(FILE VARu1):z0("verarbeite (",u1)END PROCverarbeite;PROCverarbeite(PROCv1):enablestop;INT VARn1;o1(n1);WHILE NOTdateiendeREPv1;weiter(n1)END REP;aufsatz(1)END PROCverarbeite;OP V(TEXT CONSTy0,r1):INT CONSTw1:=feldnummer(y0);IFw1=0THENx1(y0)ELSEfeldaendern(w1,r1)END IF END OP V;PROCo1(INT VARn1):n0;aufsatz(1);IFmarkiertesaetze>0THENn1:=3;IF NOTsatzmarkiertTHENweiter(n1)END IF ELSEn1:=2;IF NOTsatzausgewaehltTHENweiter(n1)END IF END IF END PROCo1;PROCn0:IFanzahldateien=0THENerrorstop(y1)END IF.END PROCn0;TEXT VARz1,a2;LETb2="""";TEXT PROCf(TEXT CONSTy0):INT CONSTw1:=feldnummer(y0);IFw1=0THENx1(y0);z1:=g0ELSEfeldlesen(w1,z1)END IF;z1END PROCf;REAL PROCwert(TEXT CONSTy0):INT CONSTw1:=feldnummer(y0);IFw1=0THENx1(y0);0.0ELSEfeldlesen(w1,z1);REAL VARc2;wertberechnen(z1,c2);c2END IF END PROCwert;REAL PROCwert(TEXT CONSTy0,INT CONSTd2):round(wert(y0),d2)END PROCwert;TEXT PROCzahltext(REAL CONSTe2,INT
+CONSTd2):REAL CONSTf2:=round(abs(e2),d2);INT VARg2:=h2+d2+2;IFe2<0.0THENa2:="-"ELSEa2:=g0END IF;IFf2<1.0ANDf2<>0.0THENa2CAT"0";g2DECR1ENDIF;a2CATtext(f2,g2,d2);IFd2>0THENchange(a2,".",dezimalkomma)ELSEchange(a2,".",g0)END IF;a2.h2:max(0,decimalexponent(f2)).END PROCzahltext;TEXT PROCzahltext(TEXT CONSTy0,INT CONSTd2):zahltext(wert(y0),d2)END PROCzahltext;TEXT PROCtextdarstellung(TEXT CONSTi2):z1:=i2;changeall(z1,b2,b2+b2);j2;insertchar(z1,b2,1);z1CATb2;z1.j2:INT VARk2:=1;WHILEl2REPchange(z1,k2,k2,m2)END REP.l2:k2:=pos(z1,""0"",""31"",k2);k2>0.m2:b2+text(code(z1SUBk2))+b2.END PROCtextdarstellung;PROCx1(TEXT CONSTy0):errorstop(n2+textdarstellung(y0)+o2)END PROCx1;SATZ VARp2;EUDAT VARq2;LETj1=#501
+#"erzeugtes Programm",y1=#502
+#"keine Datei geoeffnet",r2=#503
+#"Kein Satz zum Tragen vorhanden",s2=#504
+#"Zieldatei hat falsche Felderzahl",t2=#505
+#" existiert nicht",u2=#506
+#" verletzt die Pruefbedingung.",v2=#507
+#" ist in der Zieldatei bereits vorhanden.",o2=#508
+#" ist nicht definiert.",w2=#509
+#" ist nicht in der Wertemenge.",x2=#510
+#" stimmt nicht mit der Maske ueberein.",y2=#511
+#"Satz ",n2=#512
+#"Das Feld ";INT VARz2;FILE VARa3;BOOL VARb3:=FALSE,c3,d3;TEXT VARe3;PROCtrage(TEXT CONSTl0,FILE VARf3,BOOL CONSTg3):disablestop;b3:=g3;IFb3THENa3:=f3;output(a3)END IF;h3(l0);b3:=FALSE END PROCtrage;PROCh3(TEXT CONSTl0):enablestop;INT VARn1;o1(n1);i3(l0);INT VARj3:=0;REP IF NOTk3THENweiter(n1)ELSEcout(satznummer+j3)END IF;IFdateiendeTHENaufsatz(1);LEAVEh3END IF;l3END REP.k3:IFn1=3THENsatzmarkiertELSEsatzausgewaehltEND IF.l3:c3:=TRUE;IFb3THENnotizenlesen(q2,1,e3);do(e3)END IF;IFc3THENm3;IFc3THENsatzloeschen;j3INCR1END IF END IF;IF NOTc3THENweiter(n1)END IF.END PROCh3;PROCi3(TEXT CONSTl0):IFdateiendeTHENerrorstop(r2)END IF;oeffne(q2,l0);z2:=0;IFfelderzahl(q2)=0THENp1ELIFfelderzahl(q2)<>anzahlfelderTHENerrorstop(s2)END IF;aufsatz(q2,saetze(q2)+1).p1:satzinitialisieren(p2,anzahlfelder);INT VARr0;FORr0FROM1UPTOanzahlfelderREPfeldnamenlesen(r0,z1);feldaendern(p2,r0,z1)END REP;feldnamenaendern(q2,p2).END PROCi3;PROCm3:IFz2>0CANDn3THENo3("",v2)ELSEp3;satzeinfuegen(q2,p2);weiter(q2)END IF.p3:
+satzinitialisieren(p2,anzahlfelder);INT VARr0;FORr0FROM1UPTOanzahlfelderREPfeldlesen(r0,z1);feldaendern(p2,r0,z1)END REP.n3:TEXT VARc1;INT CONSTq3:=satznr(q2);feldlesen(1,c1);d3:=FALSE;aufsatz(q2,c1);WHILE NOTdateiende(q2)REPr3;weiter(q2,c1)UNTILd3END REP;aufsatz(q2,q3);d3.r3:INT VARi1;d3:=TRUE;FORi1FROM2UPTOz2REPfeldlesen(q2,i1,z1);feldbearbeiten(i1,PROC(TEXT CONST,INT CONST,INT CONST)s3);IF NOTd3THEN LEAVEr3END IF END REP.END PROCm3;PROCs3(TEXT CONSTt3,INT CONSTu3,v3):IFw3COR(length(z1)>0CANDx3)THENd3:=FALSE END IF.w3:(v3-u3+1)<>length(z1).x3:pos(t3,z1,u3,v3+1)<>u3.END PROCs3;PROCo3(TEXT CONSTy3,z3):IFb3THENa4ELSEerrorstop(z3)END IF.a4:put(a3,y2);put(a3,satznummer);IFy3<>""THENwrite(a3,n2);write(a3,textdarstellung(y3))END IF;putline(a3,z3);c3:=FALSE.END PROCo3;PROCeindeutigefelder(INT CONSTb4):z2:=b4END PROCeindeutigefelder;PROCpruefe(TEXT CONSTy3,BOOL CONSTc4):IF NOTc4THENo3(y3,u2)END IF END PROCpruefe;PROCwertemenge(TEXT CONSTy3,d4):INT CONSTw1:=feldnummer(y3);IFw1=0THENo3(y3,o2)
+ELSEe4END IF.e4:INT VARk2:=0;LETf4=",";feldlesen(w1,z1);IFg4THEN LEAVEe4END IF;z1CATf4;REPk2:=pos(d4,z1,k2+1);IFk2=1ORk2>1CAND(d4SUBk2-1)=f4THEN LEAVEe4END IF UNTILk2=0END REP;o3(y3,w2).g4:INT CONSTh4:=length(d4)-length(z1);(d4SUBh4)=f4ANDpos(d4,z1,h4+1)>0.END PROCwertemenge;PROCfeldmaske(TEXT CONSTy3,i4):INT CONSTw1:=feldnummer(y3);IFw1=0THENo3(y3,o2)ELSEfeldlesen(w1,z1);j4END IF.j4:INT VARk2;TEXT CONSTk4:=code(length(i4)+1);TEXT VARl4:=""1"";FORk2FROM1UPTOlength(z1)REP TEXT CONSTm4:=z1SUBk2;n4UNTILl4=""END REP;IFo4THENo3(y3,x2)END IF.n4:INT VARp4:=1;WHILEp4<=length(l4)REP INT CONSTq4:=code(l4SUBp4);IF(i4SUBq4)="*"THENr4ELIFs4THENreplace(l4,p4,code(q4+1));p4INCR1ELSEdeletechar(l4,p4)END IF END REP.r4:IFq4=length(i4)THEN LEAVEfeldmaskeEND IF;p4INCR1;IFpos(l4,code(q4+1))=0THENinsertchar(l4,code(q4+1),p4)END IF.s4:SELECTpos("9XAa",i4SUBq4)OF CASE1:pos("0123456789",m4)>0CASE2:TRUE CASE3:pos("ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ",m4)>0CASE4:pos("abcdefghijklmnopqrstuvwxyzäöüß",m4)>0OTHERWISE(i4
+SUBq4)=m4END SELECT.o4:(l4=""CORpos(l4,k4)=0)ANDt4.t4:(i4SUBlength(i4))<>"*"ORpos(l4,code(length(i4)))=0.END PROCfeldmaske;PROCtragesatz(TEXT CONSTl0):i3(l0);INT CONSTu4:=satznr(q2);m3;satzloeschen;aufsatz(q2,u4)END PROCtragesatz;PROCholesatz(TEXT CONSTl0):n0;IF NOTexists(l0)THENerrorstop(textdarstellung(l0)+t2)END IF;oeffne(q2,l0);IFfelderzahl(q2)<>anzahlfelderTHENerrorstop(s2)ELIFsaetze(q2)=0THENerrorstop(r2)END IF;aufsatz(q2,saetze(q2));satzlesen(q2,p2);v4;satzloeschen(q2).v4:satzeinfuegen;INT VARr0;FORr0FROM1UPTOfelderzahl(p2)REPfeldlesen(p2,r0,z1);feldaendern(r0,z1)END REP.END PROCholesatz;END PACKETverarbeitung;
+PACKETeudasdruckenDEFINESdrucke,interpretiere,gruppentest,druckdatei,direktdrucken,maxdruckzeilen,gruppenwechsel,lfdnr:LETb0=25,SPEICHER=STRUCT(INTc0,d0,e0,f0,TEXTg0);ROWb0SPEICHER VARh0;INT VARi0;LETj0="",k0=" ",l0=" ";TEXT VARm0;PROCinterpretiere(INT CONSTn0,o0,PROC(INT CONST,TEXT VAR)p0):INT VARq0,r0:=0,s0:=0,t0:=o0;u0(n0);WHILE NOTv0REPw0;IFx0THENr0INCR1ELSEy0;z0END IF END REP.z0:IFa1(q0)THENb1ELSEc1;s0:=0END IF.b1:SELECTq0OF CASEd1:e1CASEf1:g1OTHERWISE LEAVEinterpretiereEND SELECT.y0:WHILEr0>0REPh1(k0);r0DECR1END REP.e1:i1(i0).g1:i1(s0).x0:j1=j0ORj1=k0.c1:INT VARk1:=0,l1:=0;BOOL VARm1:=FALSE;REPn1;k1INCR1;IFi0=3THENm1:=TRUE END IF UNTILo1END REP.o1:IFi0<=2THEN TRUE ELIFs0<>0THENk1=s0ELSEl1=0END IF.n1:INT VARp1:=1,q1:=0,r1:=0,s1:=1,t1:=1;m0:=j0;REP IFu1THENv1END IF;IFw1THENx1END IF;y1;s1INCR1END REP.u1:k1=0.v1:z1(a2.c0,a2.d0,a2.e0);IF NOTb2THENc2END IF.b2:a2.c0>length(j1).c2:INT CONSTd2:=e2(t0);IFd2>0THENfeldlesen(d2,a2.g0)ELSEp0(-d2,a2.g0)END IF;t0INCR1;a2.f0:=0;IFa2.g0<>j0THENl1
+INCR1END IF.w1:a2.e0>=4.a2:h0(s1).y1:INT CONSTreserve:=f2(a2);IFreserve>0THENg2ELSEr1DECRreserveEND IF.g2:q1INCRreserve;IFh2ANDq1>r1THENq1:=r1END IF;IFi2ANDj2THENk2END IF.h2:i0=2ORi0=4.i2:reserve=a2.d0.j2:(a2.e0AND1)=0.k2:IFa2.c0=1COR(j1SUB(a2.c0-1))=k0THEN INT VARl2:=m2(s1);WHILE(j1SUBl2)=k0REPl2INCR1;a2.d0INCR1;q1INCR1END REP END IF.x1:IFs1=1THEN IFb2THENn2END IF ELSEo2END IF.n2:IFm1THENh1(k0)ELSEh1(j1)END IF;LEAVEn1.o2:INT VARp2:=0,q2:=a2.c0;INT CONSTr2:=q2-length(j1);s2;t2;u2;v2.s2:IFr2>0THENq1INCRr2;q2DECR(r2-1)END IF;w2.w2:INT CONSTx2:=m2(s1-1),y2:=pos(j1,l0,x2,q2);IFy2>0THENq2:=y2;z2ELIFr2<0AND(j1SUB(q2-1))<>k0THENq2:=x2END IF.z2:INT VARa3:=q2+1;REPp2INCR1;a3INCR1UNTIL(j1SUBa3)<>k0END REP;q1INCRp2.t2:INT VARb3:=0;WHILEt1<s1REPc3;d3;e3;t1INCR1END REP.c3:INT CONSTc0:=f3.c0,d0:=f3.d0,e0:=f3.e0.d3:g3(p1,c0,m1);p1:=c0+d0.f3:h0(t1).e3:INT CONSTh3:=-f2(f3);IFh3=-d0ANDi3THENj3ELIFh3<=0THENk3ELIFi3ANDl3THENm3ELSEn3END IF.j3:b3INCRh3;IFh2THENo3END IF.o3:IFb3<0THENp3(-b3);b3:=0END IF.k3:IF
+q3THENp3(-h3)END IF;r3(f3);l1DECR1;IFs3THENt3ELSEb3INCRh3;u3END IF.q3:(e0AND2)=2.s3:(e0AND1)=1.t3:IF NOTq3THENp3(-h3)END IF.u3:IFh2ANDb3<0THENp3(-b3);b3:=0END IF.i3:NOTs3.l3:h3<=q1.m3:r3(f3);l1DECR1;b3INCRh3;q1DECRh3.n3:INT VARv3:=0,w3:=f3.f0+1,x3:=w3+d0-1;IFi3THENx3INCRq1END IF;IFq3ANDy3THENz3ELIFa4THENb4END IF;c4;IFi3THENb3INCRq1;q1:=0END IF.z3:INT CONSTd4:=length(f3.g0)-x3;w3INCRd4;x3INCRd4.a4:i0>=3.y3:NOTa4.c4:IFq3THENp3(v3)END IF;e4(f3.g0,w3,x3);IFf4THENp3(v3)END IF.f4:NOTq3.b4:IFpos(f3.g0,k0,w3,x3)>0THENg4END IF;INT CONSTh4:=pos(f3.g0,"!","�",x3+1);IFh4=0THENf3.f0:=length(f3.g0);l1DECR1ELSEf3.f0:=h4-1END IF.g4:x3INCR1;v3DECR1;WHILE(f3.g0SUBx3)<>k0REPx3DECR1;v3INCR1END REP;WHILE(f3.g0SUBx3)=k0REPx3DECR1;v3INCR1UNTILl2<w3END REP.u2:g3(p1,q2,m1);IFb3<0THEN IFq2<=length(j1)THENp3(-b3)END IF;p1:=q2ELSEp1:=q2+min(b3,p2)END IF.v2:IFr2>0THENi4;j4;LEAVEn1ELSEk4END IF.i4:IF NOTm1THENe4(j1,p1,length(j1))END IF.j4:INT VARl4:=length(m0);IF(m0SUBl4)=k0THEN REPl4DECR1UNTIL(m0SUBl4)<>k0END REP;
+m0:=subtext(m0,1,l4)END IF;IFm4THENm0CATk0END IF;h1(m0).m4:(j1SUB LENGTHj1)=k0AND(i0<>3ORl1=0).k4:q1:=0;r1:=0.END PROCinterpretiere;INT PROCm2(INT CONSTn4):h0(n4).c0+h0(n4).d0END PROCm2;INT PROCf2(SPEICHER CONSTo4):o4.d0-length(o4.g0)+o4.f0END PROCf2;LETp4=" ";PROCp3(INT CONSTq4):INT VARr4:=q4;WHILEr4>=10REPm0CATp4;r4DECR10END REP;WHILEr4>0REPm0CATk0;r4DECR1END REP END PROCp3;PROCr3(SPEICHER VARo4):IFo4.f0=0THENm0CATo4.g0ELSEe4(o4.g0,o4.f0+1,length(o4.g0))END IF;o4.f0:=length(o4.g0)END PROCr3;PROCg3(INT CONSTs4,t4,BOOL CONSTm1):IFm1THENp3(t4-s4)ELSEe4(j1,s4,t4-1)END IF END PROCg3;TEXT VARu4;PROCe4(TEXT CONSTv4,INT CONSTs4,t4):u4:=subtext(v4,s4,t4);m0CATu4END PROCe4;FILE VARw4;TEXT VARj1;INT VARx4;LETy4=#401
+#"keine schliessende Klammer in Feldmuster",z4=#402
+#"kein Kommando in Kommandozeile",a5=#403
+#"unbekanntes Kommando";LETb5="&",c5="%",d5="%",e5="<",f5=">";LETg5=#404
+#" "1"VOR "1"VORSPANN "2"WDH "2"WIEDERHOLUNG "3"NACH "3"NACHSPANN "4"ABK "4"ABKUERZUNGEN "5"GRUPPE "6"MODUS "7"MEHR "LETh5=1,i5=2,j5=3,k5=4,l5=5,d1=6,f1=7,m5=100;INT VARn5,o5,p5;BOOL VARv0,q5;.r5:lineno(w4).s5:n5:=maxlinelength(w4).PROCt5(TEXT CONSTu5):REPx4INCR1UNTIL(j1SUBx4)<>u5END REP END PROCt5;PROCz1(INT VARw3,v5,e0):w5;IFb2THENw3:=max(n5,length(j1))+1;v5:=0;e0:=5ELSEw3:=x4;x5END IF.w5:y5(b5,c5).b2:x4>length(j1).x5:TEXT CONSTz5:=j1SUBx4;IFz5=c5THENe0:=0ELSEe0:=4END IF;a6;feldnamenlesen;b6.a6:t5(z5);IFx4-1>w3THENc6END IF.c6:e0INCR3.feldnamenlesen:IF(j1SUBx4)=e5THENd6ELSEe6END IF;IFf6THENz1(w3,v5,e0);LEAVEz1END IF.f6:o5>p5.d6:o5:=x4+1;p5:=pos(j1,f5,o5);IFp5=0THENg6(y4,subtext(j1,x4));p5:=length(j1)ELSEp5DECR1END IF;x4:=p5+2.e6:o5:=x4;y5(k0,c5);INT CONSTh6:=pos(j1,b5,o5,x4);IFh6>0THENx4:=h6END IF;p5:=x4-1.b6:IFi6THENj6;t5(z5)END IF;v5:=x4-w3.i6:(j1SUBx4)=z5.j6:e0:=e0OR1.END PROCz1;PROCz1(TEXT VARname):INT VARk6,v5,l6;z1(k6,v5,l6);IFv5>0THENname:=subtext(j1,o5,p5)ELSEname:=j0END IF
+END PROCz1;PROCy5(TEXT CONSTm6,n6):INT CONSTo6:=pos(j1,m6,x4),p6:=pos(j1,n6,x4);x4:=length(j1)+1;IFo6>0THENx4:=o6END IF;IFp6>0ANDp6<x4THENx4:=p6END IF END PROCy5;PROCu0(INT CONSTq6):toline(w4,q6);q5:=FALSE;v0:=eof(w4)END PROCu0;PROCw0:IFq5THENdown(w4)ELSEq5:=TRUE END IF;readrecord(w4,j1);x4:=1;v0:=lineno(w4)>=lines(w4)END PROCw0;BOOL PROCa1(INT VARq0):x4:=1;IF(j1SUB1)<>d5THEN FALSE ELIF(j1SUB2)<>d5THENr6;s6;TRUE ELSEq0:=m5;TRUE END IF.r6:TEXT VARt6;t5(k0);IFx4>length(j1)THENg6(z4,j1);q0:=0;LEAVEa1WITH TRUE END IF;INT CONSTu6:=pos(j1,k0,x4);IFu6=0THENt6:=subtext(j1,x4);t6CATk0;x4:=length(j1)+1ELSEt6:=subtext(j1,x4,u6);x4:=u6END IF.s6:INT CONSTv6:=pos(g5,t6);IFv6>0CAND(g5SUB(v6-2))=k0THENq0:=code(g5SUB(v6-1))ELSEq0:=0;g6(a5,t6);END IF.END PROCa1;PROCi1(INT VARw6):t5(k0);INT CONSTx6:=x4;WHILEy6REPx4INCR1END REP;IFx4>x6THENw6:=int(subtext(j1,x6,x4-1))ELSEw6:=-1END IF.y6:pos("0123456789",j1SUBx4)>0.END PROCi1;FILE VARz6;TEXT VARa7;BOOL VARb7;PROCc7(TEXT CONSTname):a7:=name;d7("PROC ",name,
+" :")END PROCc7;PROCe7:d7("END PROC ",a7,";")END PROCe7;PROCf7(TEXT CONSTg7):b7:=TRUE;putline(z6,g7)END PROCf7;PROCf7(TEXT CONSTh7,i7,j7):b7:=TRUE;d7(h7,i7,j7)END PROCf7;PROCd7(TEXT CONSTh7,i7,j7):write(z6,h7);write(z6,i7);write(z6,j7);line(z6)END PROCd7;TEXT VARk7;PROCf7(TEXT CONSTh7,INT CONSTl7,TEXT CONSTj7):k7:=subtext(j1,l7);f7(h7,k7,j7)END PROCf7;PROCm7(INT CONSTq6,n7):d7("; interpretiere (",text(q6)+", "+text(n7),", PROC (INT CONST, TEXT VAR) abk);")END PROCm7;LETo7=#405
+#"kein % WIEDERHOLUNG gefunden",p7=#406
+#"Nur GRUPPE-Anweisung erlaubt",q7=#407
+#"keine ELAN-Anweisung im Initialisierungsteil nach Gruppendefinition",r7=#408
+#"illegale Gruppennummer",s7=#409
+#"diese Gruppe wurde schon definiert",t7=#410
+#"diese Abkuerzung ist nicht definiert",u7=#411
+#"dieser Abschnitt wurde schon einmal definiert",v7=#412
+#"falscher Modus",w7=#413
+#"diese Anweisung darf im Musterteil nicht vorkommen",x7=#414
+#"im Abkuerzungsteil darf keine Anweisung auftreten",y7=#415
+#"in dieser Zeile stehen zu viele Feldmuster",z7=#416
+#"das Druckmuster enthaelt zu viele Feldmuster",a8=#417
+#"nach dem ""&"" soll direkt der Name einer Abkuerzung folgen",b8=#418
+#"kein Doppelpunkt nach Abkuerzung",c8=#419
+#"Abkuerzung mehrfach definiert",d8=#420
+#"das Druckmuster enthaelt zu viele Abkuerzungen";LETe8=200,f8=4,g8=250,GRUPPE=STRUCT(BOOLh8,i8,TEXTg0),ABSCHNITT=STRUCT(INTo0,n0,TEXTc7);ROWe8INT VARe2;INT VARj8;ROWf8GRUPPE VARk8;ROW3ABSCHNITT VARl8;SATZ VARp0;TEXT VARm8;INT VARn8;OP CAT(TEXT VARo8,INT CONSTwert):TEXT VARp8:=" ";replace(p8,1,wert);o8CATp8END OP CAT;PROCq8:enablestop;u0(1);r8;s8;WHILE NOTv0REPt8END REP;u8.r8:INT VARq0;INT VARv8;n8:=0;satzinitialisieren(p0);m8:=j0;j8:=0;b7:=FALSE;l8(1):=ABSCHNITT:(0,0,"vorspann");l8(2):=ABSCHNITT:(0,0,"wdh");l8(3):=ABSCHNITT:(0,0,"nachspann");FORv8FROM1UPTOf8REPk8(v8).i8:=FALSE END REP.s8:BOOL VARw8:=FALSE;REP IFv0THENg6(o7);LEAVEq8END IF;w0;IFa1(q0)THENx8END IF END REP.x8:SELECTq0OF CASEm5:y8CASEl5:z8CASEh5,i5,j5:IF NOTw8THENc7("gruppen")END IF;e7;LEAVEs8OTHERWISE IFq0>0THENg6(p7)END IF END SELECT.y8:IFw8THENg6(q7,j1)ELSEreplace(j1,1," ");f7(j1)END IF.z8:IF NOTw8THENc7("gruppen");w8:=TRUE END IF;INT VARa9;i1(a9);IFa9<1ORa9>f8THENg6(r7,j1)ELIFk8(a9).i8THENg6(s7,j1)ELSEk8(a9).i8:=TRUE
+;b9END IF.b9:f7("gruppentest (",text(a9),", ");f7(" ",x4,");").t8:SELECTq0OF CASEh5:c9CASEi5:d9CASEj5:e9END SELECT.c9:f9(l8(1),q0).d9:i1(g9);i1(h9);f9(l8(2),q0).e9:f9(l8(3),q0).u8:IFb7THENi9;j9END IF;k9;IFb7THENl9;m9END IF.k9:FORv8FROM1UPTOn8REP IF(m8ISUBv8)>0THENg6(t7,n9,m8ISUBv8)ELSEo9END IF END REP.n9:TEXT VARp9;feldlesen(p0,v8,p9);p9.i9:FORv8FROM1UPTO3REP IFl8(v8).n0=0THENq9END IF END REP.q9:c7(l8(v8).c7);e7.j9:f7("PROC abk (INT CONST nr, TEXT VAR inhalt) :");IFn8>0THENf7("SELECT nr OF")ELSEf7("inhalt := text (nr)")END IF.o9:TEXT CONSTr9:=text(v8);f7("CASE "+r9," : inhalt := abk",r9).l9:IFn8>0THENf7("END SELECT")END IF;f7("END PROC abk;").m9:f7("drucke (PROC gruppen, PROC vorspann, PROC wdh, PROC nachspann)").END PROCq8;PROCf9(ABSCHNITT VARs9,INT VARq0):BOOL VARt9:=TRUE;c7(s9.c7);u9;v9;w9.u9:IFs9.n0<>0THENg6(u7,j1)END IF;s9.n0:=r5+1;s9.o0:=j8+1.v9:WHILE NOTv0REPw0;IFa1(q0)THENx9ELSEy9;z9END IF END REP;a10;LEAVEf9.x9:SELECTq0OF CASEm5:replace(j1,1," ");f7(j1);t9:=TRUE
+CASEh5,i5,j5:a10;LEAVEf9CASEk5:a10;LEAVEv9CASEd1:y9;INT VARb10;i1(b10);IFb10<1ORb10>4THENg6(v7,j1)END IF CASEf1:y9OTHERWISE IFq0>0THENg6(w7)END IF END SELECT.y9:IFt9THENm7(r5,j8+1);t9:=FALSE END IF.a10:e7.z9:TEXT VARname;INT VARc10:=0;REPz1(name);IFname=j0THEN LEAVEz9END IF;c10INCR1;d10END REP.d10:IFc10>=b0THENg6(y7)END IF;IFj8=e8THENg6(z7)ELSEj8INCR1END IF;e10.e10:INT VARf10:=feldnummer(name);IFf10=0THENf10:=feldindex(p0,name);IFf10=0THENg10(name,r5);e2(j8):=-n8ELSEe2(j8):=-f10END IF ELSEe2(j8):=f10END IF.w9:BOOL VARh10:=TRUE;WHILE NOTv0REPw0;IFa1(q0)THENi10ELIFj10THENk10END IF END REP.i10:SELECTq0OF CASEh5,i5,j5:LEAVEw9OTHERWISE IFq0>0THENg6(x7)END IF END SELECT.k10:IFh10THENf7(".");h10:=FALSE END IF;IFl10THENm10ELSEf7(j1)END IF.l10:(j1SUB1)=b5.m10:TEXT VARn10;z1(n10);IFn10=j0THENg6(a8,j1);LEAVEm10END IF;o10;p10.o10:LETq10=":";x4DECR1;t5(k0);IF(j1SUBx4)=q10THENx4INCR1ELSEg6(b8,j1)END IF.p10:g10(n10,0);f7(r10,x4-1,"").r10:"abk"+text(feldindex(p0,n10)).j10:j1<>j0ANDj1<>k0.END PROCf9;
+PROCg10(TEXT CONSTname,INT CONSTq6):INT CONSTs10:=feldindex(p0,name);IFs10>0THENt10ELSEu10END IF.t10:IF(m8ISUBs10)>0THENreplace(m8,s10,q6)ELIFq6=0THENg6(c8,name)END IF.u10:IFn8=g8THENg6(d8)ELSEn8INCR1END IF;m8CATq6;feldaendern(p0,n8,name).END PROCg10;LETv10=#421
+#"FEHLER in Zeile ",w10=#422
+#" bei >>",x10=#423
+#"<<";PROCg6(TEXT CONSTy10,z10,INT CONSTq6):LETa11=" ";TEXT VARb11:=v10;b11CATtext(q6);IFz10<>j0THENb11CATw10;b11CATz10;b11CATx10END IF;note(b11);noteline;note(a11);note(y10);noteline;IFonlineANDcommanddialogueTHENline;putline(b11);put(a11);putline(y10)END IF END PROCg6;PROCg6(TEXT CONSTy10):g6(y10,j0,r5)END PROCg6;PROCg6(TEXT CONSTy10,z10):g6(y10,z10,r5)END PROCg6;LETc11=#424
+#"erzeugtes Programm",d11=#425
+#"keine Datei geoeffnet",e11=#426
+#"interner Fehler",f11=#427
+#"Druckausgabe steht in",g11=#428
+#"zum Drucker geschickt.",h11=#429
+#"direkt Drucken nicht moeglich",i11=#430
+#".a$";TEXT VARj11,k11;BOOL VARl11,m11,n11,o11;FILE VARp11;INT VARg9,h9,q11,r11,s11,t11:=4000,u11;PROCdrucke:drucke(lastparam)END PROCdrucke;PROCdrucke(TEXT CONSTv11):enablestop;lastparam(v11);w4:=sequentialfile(input,v11);modify(w4);IFanzahldateien=0THENerrorstop(d11)END IF;disablestop;w11;q8;IFanythingnotedTHENnoteedit(w4)ELIFb7THENx11ELSEdrucke(PROCy11,PROCz11,PROCa12,PROCb12)END IF;forget(c12,quiet).w11:TEXT VARc12;INT VARv8:=0;REPv8INCR1;c12:=text(v8)UNTIL NOTexists(c12)END REP;z6:=sequentialfile(output,c12);headline(z6,c11).x11:run(c12);lastparam(v11).END PROCdrucke;PROCy11:END PROCy11;PROCz11:d12(1)END PROCz11;PROCa12:d12(2)END PROCa12;PROCb12:d12(3)END PROCb12;PROCd12(INT CONSTe12):IFl8(e12).n0>0THENinterpretiere(l8(e12).n0,l8(e12).o0,PROC(INT CONST,TEXT VAR)f12)END IF END PROCd12;PROCf12(INT CONSTe12,TEXT VARg0):errorstop(e11);g0:=code(e12)END PROCf12;PROCdrucke(PROCg12,PROCh12,PROCi12,PROCj12):INT VARk12,l12,m12;enablestop;n12;o12;p12;u11:=1;WHILE NOTdateiendeREPq12;cout(
+satznummer);r12;weiter(k12);s12END REP;t12;u12;aufsatz(1).o12:l12:=0;aufsatz(1);IFmarkiertesaetze>0THENk12:=3;IF NOTsatzmarkiertTHENweiter(k12)END IF ELSEk12:=2;IF NOTsatzausgewaehltTHENweiter(k12)END IF END IF.p12:INT VARv8;FORv8FROM1UPTOf8REPk8(v8).g0:=j0END REP.q12:IFl12=0THENg12;v12;w12(PROCh12)ELSEm11:=FALSE;x12;y12END IF;l12:=satznummer;m12:=satzkombination.x12:l11:=FALSE;g12.y12:IFl11THENz12(l12,m12,PROCj12)END IF;u11INCR1;IFl11THENw12(PROCh12)END IF.r12:IFh9<1THENs5ELSEn5:=h9END IF;IFq11<g9THENtoline(p11,r11)ELSEtoline(p11,s11+1);r11:=s11+1;q11:=0END IF;i0:=1;i12;q11INCR1.s12:IFs11>t11THENu12;n12END IF.t12:v12;IFl12=0THENw12(PROCj12)ELSEz12(l12,m12,PROCj12)END IF;u0(1).END PROCdrucke;PROCv12:INT VARv8;FORv8FROM1UPTOf8REPk8(v8).h8:=TRUE END REP;m11:=TRUE;l11:=TRUE END PROCv12;PROCw12(PROCs9):q11:=g9;toline(p11,s11+1);s5;i0:=1;s9END PROCw12;PROCz12(INT CONSTl12,m12,PROCj12):INT CONSTa13:=satznummer,b13:=satzkombination;aufsatz(l12);WHILEsatzkombination<>m12REPweiter(1)END REP;w12
+(PROCj12);aufsatz(a13);WHILEsatzkombination<>b13REPweiter(1)END REP END PROCz12;PROCn12:IFaktuellereditor>0THENc13ELSEd13END IF;e13.c13:p11:=editfile;IFcol>1THENsplitline(p11,col,FALSE);down(p11);col(p11,1)END IF;s11:=lineno(p11)-1.d13:IF NOTn11THENf13END IF;p11:=sequentialfile(modify,k11);maxlinelength(p11,maxlinelength(w4));s11:=lines(p11).f13:INT VARr4:=0;REPr4INCR1;k11:=headline(w4)+i11+text(r4);UNTIL NOTexists(k11)END REP.e13:u0(1);WHILE NOTv0REPg13END REP.g13:w0;INT VARq0;IFa1(q0)THENh13ELSEh1(j1)END IF.h13:IFq0<>m5ANDq0<>l5THEN LEAVEe13END IF.END PROCn12;PROCu12:IFaktuellereditor>0THEN ELIFn11THENn11:=FALSE;ELIFo11THENdisablestop;i13ELSEline;put(f11);putline(textdarstellung(k11));pause(40)END IF.i13:TEXT CONSTw6:=std;lastparam(k11);do("print (std)");IFiserrorTHENclearerror;errorstop(h11)ELSEline;put(textdarstellung(k11));putline(g11);forget(k11,quiet);pause(40)END IF;lastparam(w6).END PROCu12;PROCh1(TEXT CONSTq6):IFq11>=g9ORq11=0THENinsertrecord(p11);writerecord(p11,q6);s11INCR1
+ELSEj13END IF;down(p11).j13:IFeof(p11)THENj11:=j0;insertrecord(p11);s11INCR1ELSEreadrecord(p11,j11)END IF;k13;writerecord(p11,j11).k13:INT CONSTl13:=n5*q11;WHILElength(j11)<l13REPj11CATk0END REP;j11CATq6.END PROCh1;PROCdirektdrucken(BOOL CONSTk12):o11:=k12END PROCdirektdrucken;BOOL PROCdirektdrucken:o11END PROCdirektdrucken;PROCdruckdatei(TEXT CONSTv11):k11:=v11;n11:=TRUE END PROCdruckdatei;TEXT PROCdruckdatei:k11END PROCdruckdatei;PROCmaxdruckzeilen(INT CONSTm13):t11:=m13END PROCmaxdruckzeilen;PROCgruppentest(INT CONSTa9,TEXT CONSTn13):IFn13<>k8(a9).g0THENk8(a9).g0:=n13;k8(a9).h8:=TRUE;l11:=TRUE ELSEk8(a9).h8:=FALSE END IF END PROCgruppentest;BOOL PROCgruppenwechsel(INT CONSTa9):IFa9>0THENk8(a9).h8ELSEm11END IF END PROCgruppenwechsel;TEXT PROClfdnr:text(u11)END PROClfdnr;END PACKETeudasdrucken;
+
diff --git a/app/eudas/4.3/src/eudas.3 b/app/eudas/4.3/src/eudas.3
new file mode 100644
index 0000000..98f0fae
--- /dev/null
+++ b/app/eudas/4.3/src/eudas.3
@@ -0,0 +1,58 @@
+PACKETfensterDEFINES FENSTER,fensterinitialisieren,fenstergroessesetzen,fenstergroesse,fensterveraendert,fensterzugriff,bildschirmneu:TYPE FENSTER=STRUCT(INTb0,c0);LETd0=16,BITVEKTOR=INT,GROESSE=STRUCT(INTe0,f0,g0,h0);ROWd0STRUCT(INTi0,j0,BITVEKTORk0,GROESSEl0)VARm0;INT VARn0:=1;BITVEKTOR VARo0;INT VARp0;FORp0FROM2UPTOd0REPm0(p0).i0:=0END REP;m0(1).i0:=1;m0(1).j0:=0;m0(1).k0:=0;m0(1).l0:=GROESSE:(1,1,79,24);PROCfensterinitialisieren(FENSTER VARf):f.b0:=1;m0(1).i0INCR1;f.c0:=n0;n0INCR1;IFn0>=32000THENn0:=-32000END IF END PROCfensterinitialisieren;PROCfenstergroessesetzen(FENSTER VARf,INT CONSTe0,f0,g0,h0):INT VARq0;r0;IFq0>d0THENs0;t0;u0END IF;v0.r0:q0:=1;WHILEq0<=d0REP IFw0THEN LEAVEr0END IF;q0INCR1END REP.w0:x0.e0=e0ANDx0.f0=f0ANDx0.g0=g0ANDx0.h0=h0.x0:m0(q0).l0.s0:q0:=1;WHILEq0<=d0REP IFm0(q0).i0=0THEN LEAVEs0END IF;q0INCR1END REP;errorstop("zu viele Fenstergroessen");LEAVEfenstergroessesetzen.t0:m0(q0).i0:=0;m0(q0).j0:=0;m0(q0).l0:=GROESSE:(e0,f0,g0,h0);m0(q0).k0:=0.u0:INT VARy0;FOR
+y0FROM1UPTOd0REP IFm0(y0).i0>0THENz0END IF END REP.z0:IFa1(b1,c1)THENsetbit(m0(q0).k0,y0);setbit(m0(y0).k0,q0)ELSEresetbit(m0(y0).k0,q0)END IF.b1:m0(q0).l0.c1:m0(y0).l0.v0:m0(f.b0).i0DECR1;f.b0:=q0;m0(q0).i0INCR1.END PROCfenstergroessesetzen;BOOL PROCa1(GROESSE CONSTa,d1):e1ANDf1.e1:IFa.e0<=d1.e0THENd1.e0<a.e0+a.g0ELSEa.e0<d1.e0+d1.g0END IF.f1:IFa.f0<=d1.f0THENd1.f0<a.f0+a.h0ELSEa.f0<d1.f0+d1.h0END IF.END PROCa1;PROCfenstergroesse(FENSTER CONSTf,INT VARe0,f0,g0,h0):e0:=x0.e0;f0:=x0.f0;g0:=x0.g0;h0:=x0.h0.x0:m0(f.b0).l0.END PROCfenstergroesse;PROCfensterveraendert(FENSTER CONSTf):m0(f.b0).j0:=0;o0:=o0ORg1.g1:m0(f.b0).k0.END PROCfensterveraendert;PROCfensterzugriff(FENSTER CONSTf,BOOL VARh1):h1:=bit(o0,f.b0);IFm0(f.b0).j0<>f.c0THENm0(f.b0).j0:=f.c0;h1:=TRUE END IF;o0:=o0ORg1;resetbit(o0,f.b0).g1:m0(f.b0).k0.END PROCfensterzugriff;PROCbildschirmneu:o0:=-1END PROCbildschirmneu;ROW16INT VARi1:=ROW16INT:(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,-32767-1);PROCsetbit(BITVEKTOR
+VARj1,INT CONSTq0):j1:=j1ORi1(q0)END PROCsetbit;PROCresetbit(BITVEKTOR VARj1,INT CONSTq0):j1:=j1AND(-1-i1(q0))END PROCresetbit;BOOL PROCbit(BITVEKTOR CONSTj1,INT CONSTq0):(j1ANDi1(q0))<>0END PROCbit;END PACKETfenster;
+PACKETeudasmenuesDEFINES
+##globalmanager,menuemanager,
+##lock,free,menuedateneinlesen,menuenamen,menueloeschen,waehlbar,ausfuehrtaste,menueanbieten,auswahlanbieten,wahl,eschopausfuehren,hilfeanbieten,statusanzeigen,dialogfenster,dialogfensterloeschen,dialog,neuerdialog,ja,editget,fehlerausgeben:ROW8TEXT VARb0:=ROW8TEXT:("MENUE","BILD","FELD","ENDE","AUSWAHL","VORSPANN","HILFE","SEITE");LETc0=1,d0=2,e0=3,f0=4,g0=5,h0=6,i0=7,j0=8;LETk0=2,integer=3,l0=4,m0=7;LETn0=#701
+#"FEHLER in Zeile ";FILE VARo0;TEXT VARp0,q0;PROCr0:IFeof(o0)THENp0:="%DUMMY"ELSEreadrecord(o0,p0);IFp0=s0THENp0:=t0END IF;cout(lineno(o0));down(o0)END IF END PROCr0;BOOL PROCu0:IF(p0SUB1)=v0THENw0ELSE FALSE END IF.w0:INT VARx0;replace(p0,1,t0);scan(p0);replace(p0,1,v0);nextsymbol(q0,x0);IFx0<>k0THENy0(z0);FALSE ELSE TRUE END IF.END PROCu0;BOOL PROCa1(INT CONSTb1):b0(b1)=q0END PROCa1;INT PROCc1:TEXT VARd1;INT VARx0;nextsymbol(d1,x0);IFx0=integerTHENint(d1)ELSE IFx0<>m0THENy0(e1)END IF;-1END IF END PROCc1;TEXT PROCf1:TEXT VARd1;INT VARx0;nextsymbol(d1,x0);IFx0=l0THENd1ELSE IFx0<>m0THENy0(g1)END IF;s0END IF END PROCf1;PROCy0(TEXT CONSTh1):note(n0);note(lineno(o0)-1);noteline;note(h1);noteline;line;putline(h1)END PROCy0;INT VARi1,j1,k1,l1;PROCm1(INT CONSTn1,o1):cursor(k1+n1-1,l1+o1-1)END PROCm1;LETp1=#702
+#"Zeile ist ohne Zusammenhang",q1=#703
+#"K Menuedaten im Speicher";PROCmenuedateneinlesen(TEXT CONSTr1):s1;o0:=sequentialfile(input,r1);modify(o0);toline(o0,1);WHILE NOTeof(o0)REPr0;IFu0THENt1ELIF NOTanythingnotedTHENy0(p1)END IF END REP;u1;IFanythingnotedTHENnoteedit(o0)END IF.t1:IFa1(c0)THENv1ELIFa1(g0)THENw1ELIFa1(i0)THENx1ELIF NOTanythingnotedTHENy0(p1)END IF.u1:IFonlineTHENline;put(y1DIV2);putline(q1)END IF.y1:dspages(z1(1))+dspages(z1(2))+dspages(z1(3)).END PROCmenuedateneinlesen;TYPE MENUE=STRUCT(SATZa2,b2,c2,TEXTd2,e2);BOUND ROW200MENUE VARf2;TEXT VARg2,h2;SATZ VARi2,j2;LETs0="",t0=" ",k2=" ",l2=2,v0="%",m2=""7"",n2=""27"",o2=""5"";LETp2=#704
+#"% BILD erwartet",q2=#705
+#"Feldnummer beim %FELD-Kommando fehlt",r2=#706
+#"% ENDE erwartet",s2=#707
+#"Name fehlt",z0=#708
+#"Kommandozeile enthaelt kein Kommando",e1=#709
+#"Parameter soll eine Zahl sein",g1=#710
+#"Parameter soll ein TEXT sein",t2=#711
+#"Wiederholungszeile fehlt";PROCv1:TEXT VARname:=f1;IFname=s0THENy0(s2)ELSE INT VARindex;u2;v1(f2(index))END IF.u2:index:=link(v2(2),name);IFindex=0THENinsert(v2(2),name,index)END IF.END PROCv1;PROCv1(MENUE VARw2):x2;y2;z2;a3;b3.x2:satzinitialisieren(w2.a2);satzinitialisieren(i2);satzinitialisieren(j2);h2:=s0;g2:=s0.y2:c3;INT VARd3:=1;REPr0;IFu0THEN LEAVEy2ELSEe3;d3INCR1END IF END REP.c3:r0;IF NOT(u0CANDa1(d0))THENy0(p2)END IF.e3:IF(p0SUBl2)=k2THENg2CATcode(d3);replace(p0,l2,t0)END IF;feldaendern(w2.a2,d3,p0).z2:WHILEa1(e0)REPf3END REP.f3:INT VARg3:=c1;IFg3=-1THENy0(q2);g3:=100END IF;h3;i3;j3.h3:feldaendern(i2,g3,f1).i3:TEXT CONSTk3:=f1;INT VARl3;FORl3FROM1UPTOlength(k3)REPh2CATcode(g3);h2CAT(k3SUBl3)END REP.j3:TEXT VARm3:=s0;r0;WHILE NOTu0REPm3CATp0;r0END REP;feldaendern(j2,g3,m3).a3:IF NOTa1(f0)THENy0(r2)END IF.b3:w2.b2:=i2;w2.c2:=j2;w2.d2:=h2;w2.e2:=g2.END PROCv1;LETn3=#712
+#"Kommando wird ausgeführt ..",o3=#713
+#""15"Gib Kommando: ",p3=#714
+#"falsche Ausfuehrtaste",q3=#715
+#" existiert nicht.";LETr3=" ",s3=""15"",t3=""14"",u3="*"8"";INT VARv3:=0,w3,x3;BOOL VARy3,z3;TEXT VARa4,b4,c4:=" "1""2""3""8""10""13""27"",d4,e4:=s0;ROW6TEXT VARf4;FENSTER VARg4;fensterinitialisieren(g4);fenstergroessesetzen(g4,1,1,79,1);PROCwaehlbar(INT CONSTh4,i4,BOOL CONSTj4):IFj4THENk4ELSEl4END IF;y3:=TRUE.k4:IFlength(f4(h4))>=i4THENreplace(f4(h4),i4," ")END IF.l4:WHILElength(f4(h4))<i4REPf4(h4)CAT" "END REP;replace(f4(h4),i4,"-").END PROCwaehlbar;PROCausfuehrtaste(TEXT CONSTm4):IFlength(m4)<>1CORn4THENerrorstop(p3)ELSEreplace(c4,1,m4)END IF.n4:m4<>""13""ANDpos(c4,m4,2)>0.END PROCausfuehrtaste;PROCmenueanbieten(ROW6TEXT CONSTmenuenamen,FENSTER VARf,BOOL CONSTo4,PROC(INT CONST,INT CONST)p4):ROW6INT VARq4,r4,s4;INT VARt4,u4:=0,v4:=1,w4:=0,x4;TEXT VARy4;ROW6TEXT VARz4;s1;a5;b5;disablestop;REPc5;d5;e5END REP.a5:v3INCR1;INT CONSTf5:=v3;y4:=""6""0""0"";g5;h5;y4CATo2.g5:INT VARi5:=pos(menuenamen(1),".");IFi5>0THENy4CATsubtext(menuenamen(1),1,i5-1)END IF;y4CAT": "
+.h5:x4:=0;WHILEx4<6CANDj5REPx4INCR1;k5;s4(x4):=1END REP.j5:menuenamen(x4+1)<>s0.k5:q4(x4):=length(y4);i5:=pos(menuenamen(x4),".");IFi5=0THENy4CATmenuenamen(x4)ELSEy4CATsubtext(menuenamen(x4),i5+1)END IF;y4CAT" ";r4(x4):=length(y4)-1.b5:INT VARl5;FORl5FROM1UPTO6REPf4(l5):=s0END REP;y3:=TRUE;p4(0,0).c5:IFv4>0THENm5;n5;u4:=v4;v4:=0;o5ELIFv3<>f5THENa4:=y4;f4:=z4;v3:=f5ELIFy3THENz4:=f4END IF.m5:IFu4>0THENreplace(y4,q4(u4)," ");replace(y4,r4(u4)," ");IFz3THENp4(u4,-1)END IF END IF.n5:replace(y4,q4(v4),s3);replace(y4,r4(v4),t3);fensterveraendert(g4);a4:=y4;p5.o5:t4:=link(v2(2),menuenamen(u4));IFt4=0THENq5(menuenamen(u4));LEAVEmenueanbietenEND IF;z3:=FALSE;y3:=TRUE;fensterveraendert(f).d5:w4:=u4;r5(f2(t4),f,w4,s4(u4),PROC(INT CONST,INT CONST)p4).e5:SELECTw4OF CASE0:s5CASE1:t5CASE2:u5CASE3:v5CASE4:w5OTHERWISEx5END SELECT.u5:IFu4<x4THENv4:=u4+1ELSEv4:=1END IF.v5:IFu4>1THENv4:=u4-1ELSEv4:=x4END IF.x5:w4:=w4-10;IFw4<=x4THENv4:=w4END IF.t5:IFo4THEN BOOL VARy5:=FALSE;REPz5;a6UNTILb6END REP;IFy5
+THENbildschirmneu;dialogfensterloeschen;p4(u4,-2)END IF END IF.a6:IFc6THENy5:=TRUE;statusanzeigen(n3);cursor(1,2);out(d6);do(d4)END IF.c6:pos(d4,"!","�",1)>0.b6:NOTiserror.s5:IFz3THENp4(u4,-1)END IF;fensterveraendert(f);LEAVEmenueanbieten.w5:IFs4(u4)>0THENp4(t4,s4(u4))ELSEs4(u4):=-s4(u4)END IF.END PROCmenueanbieten;PROCp5:BOOL VARe6;fensterzugriff(g4,e6);IFe6THENout(a4)END IF END PROCp5;PROCr5(MENUE CONSTw2,FENSTER VARf,INT VARf6,wahl,PROC(INT CONST,INT CONST)p4):INT VARg6:=0;h6;i6(f);IFx3=0THENw3:=0END IF;neuerdialog;j6;REPp5;k6;l6END REP.h6:IFwahl>length(w2.e2)THENwahl:=w3;ELIFiserrorTHENfehlerausgeben;p4(f6,-2);END IF.j6:IFy3THENm6;n6;y3:=FALSE END IF.m6:b4:=r3;INT VARl5;FORl5FROM1UPTOlength(f4(f6))REPreplace(b4,code(w2.e2SUBl5),f4(f6)SUBl5)END REP.n6:INT VARo6;FORo6FROM1UPTOlength(w2.e2)REP INT CONSTp6:=code(w2.e2SUBo6);IFp6>x3THEN LEAVEn6END IF;q6(w2.a2,p6)END REP.k6:REPr6;IFiserrorTHENs6ELSE LEAVEk6END IF END REP.r6:TEXT VARt6;BOOL VARu6:=FALSE;WHILEx3<i1REPt6:=getcharety;v6END
+REP;w6;x6(w2,wahl);y6(t6).v6:IFt6=s0THENz6;x3INCR1;a7ELSE LEAVEr6END IF.z6:IF NOTz3ANDx3=0THENp4(f6,0);z3:=TRUE END IF.a7:IFx3=code(w2.e2SUBwahl)THENb7(w2.a2,x3,TRUE);w3:=wahlELSEb7(w2.a2,x3,FALSE)END IF;IFx3=i1THENu6:=TRUE END IF.w6:IFu6AND NOTiserrorTHENp4(f6,-2);IFiserrorTHENclearerrorEND IF END IF.s6:fehlerausgeben;p5;x3:=0.l6:INT VARc7;SELECTg6OF CASE0:d7CASE1:e7CASE2:f7END SELECT.d7:SELECTpos(c4,t6)OF CASE1:g7CASE2:g6:=1CASE3:h7CASE4:i7CASE5:j7CASE6:k7CASE7:l7CASE8:g6:=2OTHERWISEm7END SELECT.e7:SELECTpos(""1""3""10"",t6)OF CASE1:n7CASE2:o7CASE3:p7OTHERWISEout(m2)END SELECT;g6:=0.f7:SELECTpos(""1""27"?qh",t6)OF CASE1:eschopausfuehrenCASE2:q7CASE3:r7CASE4,5:s7OTHERWISEt7END SELECT;g6:=0.h7:w4:=2;LEAVEr5.i7:IFwahl>1THENwahlDECR1ELSEwahl:=length(w2.e2)END IF.j7:w4:=3;LEAVEr5.k7:IFwahl<length(w2.e2)THENwahlINCR1ELSEwahl:=1END IF.l7:k7.m7:IFu7THENv7ELIFw7THENx7ELIFt6<=" "THENpush(n2+t6)END IF.u7:pos("123456",t6)>0.v7:w4:=code(t6)-38;LEAVEr5.w7:c7:=0;REPc7:=pos(w2.d2,t6,c7+1)UNTIL(c7MOD
+2)=0END REP;c7>0ANDy7.y7:code(w2.d2SUBc7-1)<=length(w2.e2).x7:wahl:=code(w2.d2SUBc7-1);x6(w2,wahl);IF(f4(f6)SUBwahl)<>"-"THENz7(w2,wahl,x3);w4:=4;LEAVEr5END IF.n7:wahl:=1.o7:wahl:=1.p7:wahl:=length(w2.e2).t7:IFa8THENwahl:=code(w2.d2SUBc7-1);w4:=4;LEAVEr5ELSEpush(lernsequenzauftaste(t6))END IF.a8:c7:=0;REPc7:=pos(w2.d2,t6,c7+1)UNTIL(c7MOD2)=0CAND(c7=0CORb8)END REP;c7>0.b8:code(w2.d2SUBc7-1)>length(w2.e2).q7:w4:=1;LEAVEr5.r7:TEXT VARc8;feldlesen(w2.b2,wahl,c8);hilfeanbieten(c8,d8);IFiserrorTHENfehlerausgebenEND IF;p4(f6,-2);i6(f).s7:w4:=0;LEAVEr5.g7:IF(f4(f6)SUBwahl)<>"-"THENz7(w2,wahl,x3);w4:=4;LEAVEr5END IF.w4:f6.END PROCr5;PROCi6(FENSTER CONSTf):BOOL VARe6;fensterzugriff(f,e6);fenstergroesse(f,k1,l1,j1,i1);IFe6THENx3:=0;m1(1,1)END IF END PROCi6;PROCx6(MENUE CONSTw2,INT CONSTwahl):INT CONSTe8:=code(w2.e2SUBwahl);IFw3>0THEN IFw3=wahlTHENq6(w2.a2,e8)ELSE INT CONSTf8:=code(w2.e2SUBw3);b7(w2.a2,f8,FALSE);b7(w2.a2,e8,TRUE);w3:=wahlEND IF END IF;m1(1,e8)END PROCx6;PROCy6(TEXT VARg8):
+enablestop;getchar(g8)END PROCy6;PROCz7(MENUE CONSTw2,INT VARwahl,INT CONSTx3):INT CONSTl1:=code(w2.e2SUBwahl);IFh8THENi8END IF;TEXT VARm3;feldlesen(w2.c2,wahl,m3);IFm3<>s0ANDm3<>t0THENdo(m3);bildschirmneu;wahl:=-wahlEND IF.h8:x3>=l1.i8:m1(1,l1);out(u3).END PROCz7;PROCeschopausfuehren:TEXT VARj8:=s0,k8;lernsequenzauftastelegen(""0"",s0);push(""27""1""0""0"");editget(j8,32000,0,""0"","",k8);j8:=lernsequenzauftaste(""0"");IFj8<>s0THENl8ELSEm8END IF.l8:REPgetchar(k8)UNTILpos(""1""2""8""11""12"",k8)=0END REP;lernsequenzauftastelegen(k8,j8).m8:getchar(k8).END PROCeschopausfuehren;INT VARn8,o8,p8;PROCq6(SATZ CONSTa2,INT CONSTq8):m1(1,q8);IF(b4SUBq8)<>t0THENout(b4SUBq8)ELSEfeldbearbeiten(a2,q8,PROC(TEXT CONST,INT CONST,INT CONST)r8)END IF END PROCq6;PROCr8(TEXT CONSTs8,INT CONSTn8,o8):out(s8SUBn8+o8-o8)END PROCr8;PROCb7(SATZ CONSTa2,INT CONSTd3,BOOL CONSTt8):enablestop;IFt8THENq6(a2,d3);out(s3);n8:=3;p8:=1;ELSEm1(1,d3);IF(b4SUBd3)="-"THENout("-");n8:=2ELSEn8:=1END IF;p8:=0END IF;u8(a2,d3)END
+PROCb7;PROCb7(SATZ CONSTa2,INT CONSTd3):n8:=1;p8:=0;u8(a2,d3)END PROCb7;PROCu8(SATZ CONSTa2,INT CONSTd3):IFd3<=felderzahl(a2)THENv8ELSEo8:=0END IF;w8.v8:feldbearbeiten(a2,d3,PROC(TEXT CONST,INT CONST,INT CONST)x8).w8:IFk1+j1>=80ANDp8=0THENout(o2)ELSEj1-o8-p8-1TIMESOUTt0;y8;out(":")END IF.y8:IFp8>0THENout(t3)END IF.END PROCu8;PROCx8(TEXT CONSTz8,INT CONSTa9,b9):INT CONSTc9:=a9-1;n8INCRc9;o8:=min(b9,j1+c9-p8-1);outsubtext(z8,n8,o8);o8DECRc9END PROCx8;PROCz5:LETd9=""27"k";TEXT VARe9;fensterveraendert(g4);f9;g9;REPh9UNTILe9<>d9END REP;IFpos(d4,"!","�",1)>0THENe4:=d4END IF.f9:IFiserrorTHENfehlerausgeben;d4:=e4ELSEd4:=s0END IF.g9:cursor(1,1);out(o3);j1-15TIMESOUTt0;out(t3).h9:cursor(16,1);editget(d4,32000,62,"","kh",e9);IFiserrorTHENclearerrorELIFe9=d9THENd4:=e4ELIFe9=i9THENd4:=s0END IF.END PROCz5;PROCq5(TEXT CONSTr1):errorstop(textdarstellung(r1)+q3)END PROCq5;TYPE AUSWAHL=STRUCT(SATZj9,k9,l9,TEXTm9,n9,o9);BOUND ROW200AUSWAHL VARp9;PROCw1:TEXT VARname:=f1;IFname=s0THENy0(s2)ELSE INT VAR
+index:=link(v2(3),name);IFindex=0THENinsert(v2(3),name,index)END IF;w1(p9(index))END IF END PROCw1;PROCw1(AUSWAHL VARa):x2;IFq9THENr9END IF;y2;s9.x2:satzinitialisieren(a.j9);satzinitialisieren(a.k9);satzinitialisieren(a.l9);a.m9:=s0;a.n9:=s0;a.o9:=s0.q9:r0;u0CANDa1(h0).r9:INT VARd3:=1;REPr0;IFu0THEN LEAVEr9ELSEt9;d3INCR1END IF END REP.t9:feldaendern(a.j9,d3,p0).y2:c3;d3:=1;BOOL VARu9:=TRUE;REPr0;IFu0THENv9;LEAVEy2ELSEe3;d3INCR1END IF END REP.c3:IF NOT(u0CANDa1(d0))THENy0(p2)END IF.v9:IFu9THENy0(t2)END IF.e3:IFu9THENw9ELSEx9END IF.w9:IFpos(p0,k2)>0THENy9;d3:=0;u9:=FALSE ELSEfeldaendern(a.k9,d3,p0)END IF.y9:z9;a.m9:=p0;a10.z9:INT VARb10:=0;REPb10:=pos(p0,k2,b10+1);IFb10>0THENa.n9CATcode(b10)END IF UNTILb10=0END REP.a10:FORb10FROM1UPTOlength(a.n9)-1REPa.o9CATcode(c10-4)END REP;a.o9CAT""0"".c10:code(a.n9SUBb10+1)-code(a.n9SUBb10).x9:feldaendern(a.l9,d3,p0).s9:IF NOTa1(f0)THENy0(r2)END IF.END PROCw1;LETd10=""1""8""10"",e10="+"27"q";LETf10=#716
+#"Fenster zu klein",g10=#717
+#"AUSWAHL: Ankreuzen: 'x' Durchstreichen: 'o' Beenden: ESC q Hilfe: ESC ?";INT VARh10,i10,j10,k10,l10,m10,n10,o10;LET INTVEC=TEXT;INTVEC VARp10;TEXT VARq10;PROCauswahlanbieten(TEXT CONSTname,FENSTER CONSTf,TEXT CONSTr10,PROC(TEXT VAR,INT CONST)s10):s1;INT CONSTindex:=link(v2(3),name);IFindex=0THENq5(name)ELSEr5(p9(index),f,r10,PROC(TEXT VAR,INT CONST)s10)END IF END PROCauswahlanbieten;PROCr5(AUSWAHL CONSTa,FENSTER CONSTf,TEXT CONSTr10,PROC(TEXT VAR,INT CONST)s10):INT VARx3:=0,g6:=0;enablestop;t10;statusanzeigen(g10);u10;v10;w10;REPk6;x10END REP.t10:BOOL VARy10;fensterzugriff(f,y10);fenstergroesse(f,k1,l1,j1,i1).u10:INT VARz10:=1024;h10:=z10;REPz10:=z10DIV2;s10(p0,h10);IFp0=s0THENh10DECRz10ELSEh10INCRz10END IF UNTILz10=1END REP;s10(p0,h10);IFp0=s0THENh10DECR1END IF.w10:INT VARa11:=k10+1,b11:=1,c11:=1;p10:=s0;q10:=a.n9.v10:j10:=felderzahl(a.j9);k10:=j10+felderzahl(a.k9);i10:=length(a.n9);l10:=(h10+i10-1)DIVi10;m10:=k10+l10;n10:=m10+felderzahl(a.l9);o10:=0;IFk10>=i1THENerrorstop(f10)
+END IF.k6:REPr6;IFiserrorTHENclearerror;x3:=0ELSE LEAVEk6END IF END REP.r6:TEXT VARt6;WHILEx3<i1REPt6:=getcharety;v6END REP;x6;y6(t6).v6:IFt6=s0THENx3INCR1;d11ELSE LEAVEr6END IF.d11:INT CONSTe11:=x3+o10;m1(1,x3);IFx3<=j10THENb7(a.j9,x3)ELIFe11<=k10THENb7(a.k9,e11-j10)ELIFe11<=m10THENf11ELSEb7(a.l9,e11-m10)END IF.f11:g11(a,h11,PROC(TEXT VAR,INT CONST)s10).h11:(e11-k10-1)*i10+1.x6:m1(code(q10SUBb11),a11).x10:SELECTg6OF CASE0:d7CASE1:e7CASE2:f7END SELECT.d7:SELECTpos(""1""2""3""8""9""10""13""27" +x-o",t6)OF CASE1:g6:=1CASE2:h7CASE3:i7CASE4:j7CASE5:i11CASE6:k7CASE7:l7CASE8:g6:=2CASE9:j11CASE10,11:k11CASE12,13:l11OTHERWISEm7END SELECT.e7:SELECTpos(""1""2""3""8""10""13"+x-o",t6)OF CASE1:n7CASE2:m11CASE3:o7CASE4:n11CASE5:p7CASE6:o11CASE7,8:p11CASE9,10:q11OTHERWISEout(m2)END SELECT;g6:=0.f7:SELECTpos(""1"19?qh",t6)OF CASE1:eschopausfuehrenCASE2:r11CASE3:s11CASE4:r7CASE5:s7CASE6:errorstop(s0)OTHERWISEt7END SELECT;g6:=0.h7:IFb11<i10ANDc11<h10THENb11INCR1;c11INCR1END IF.i7:IFc11>i10THENa11DECR1;
+c11DECRi10;IFa11<=j10THENa11INCR1;o10DECR1;x3:=j10END IF END IF.j7:IFb11>1THENb11DECR1;c11DECR1END IF.i11:IFb11=i10THENpush(""13"")ELSEpush(""1""2"")END IF.k7:IFc11+i10<=h10THENa11INCR1;c11INCRi10;IFa11>i1THENa11DECR1;o10INCR1;x3:=j10END IF END IF.l7:IFa11+o10<m10THENpush(d10)END IF.j11:push(e10).k11:IFt11(c11)=0ANDc11<=h10THENp10CATc11;IFa11<=x3THENu11(a11,b11,length(p10)DIV2)END IF END IF.l11:INT CONSTv11:=t11(c11);IFv11>0THENw11;x11END IF.w11:change(p10,2*v11-1,2*v11,s0).m7:IFt6<t0THENpush(lernsequenzauftaste(t6))ELSEout(m2)END IF.n7:n11;y11.m11:WHILEc11<h10ANDb11<i10REPc11INCR1;b11INCR1END REP.o7:IFa11=j10+1THENz11ELSEy11END IF.z11:INT VARa12:=min(i1-j10,o10);o10DECRa12;INT CONSTb12:=c12;a11INCRb12;c11DECR(a12-b12)*i10;IFa12>0THENx3:=j10END IF.c12:max(0,k10-j10-o10).y11:WHILEc11>i10ANDa11>j10+1REPa11DECR1;c11DECRi10END REP.n11:c11DECR(b11-1);b11:=1.p7:IFa11=i1THENd12ELSEe12END IF.d12:a12:=min(i1-j10,n10-a11-o10);o10INCRa12;INT CONSTf12:=max(0,a11+o10-m10+g12);a11DECRf12;c11INCR(a12
+-f12)*i10;IFa12>0THENx3:=j10END IF.g12:IFb11-1>h10MODi10THEN1ELSE0END IF.e12:WHILEa11<i1ANDc11+i10<=h10REPa11INCR1;c11INCRi10END REP.o11:o10INCR(a11-j10-1);a11:=j10+1;x3:=j10.p11:INT VARh12;FORh12FROM1UPTOh10REP IFt11(h12)=0THENp10CATh12END IF END REP;x11.q11:p10:=s0;x11.r7:hilfeanbieten(r10,f);statusanzeigen(g10);x3:=0.s7:LEAVEr5.t7:push(lernsequenzauftaste(t6)).r11:a11:=k10+1;c11:=1;b11:=1;o10:=0;x3:=j10.s11:IFm10<=i1THENa11:=m10ELSEa11:=max(j10+1,i1+m10-n10)END IF;o10:=m10-a11;b11:=(h10-1)MODi10+1;c11:=h10;x3:=j10.END PROCr5;PROCx11:INT VARg8,i12,h12;h12:=j12;FORg8FROMk12UPTOl12REP FORi12FROM1UPTOi10REPu11(g8,i12,t11(h12));h12INCR1END REP END REP.j12:max(0,o10-k10+j10)*i10+1.k12:max(j10,k10-o10)+1.l12:min(i1,m10-o10).END PROCx11;TEXT VARm12:="xx";INT PROCt11(INT CONSTn12):replace(m12,1,n12);INT VARl3:=0;REPl3:=pos(p10,m12,l3+1)UNTILl3=0ORl3MOD2=1END REP;(l3+1)DIV2END PROCt11;OP CAT(INTVEC VARo12,INT CONSTwert):replace(m12,1,wert);o12CATm12END OP CAT;PROCg11(AUSWAHL CONSTa,INT CONST
+h11,PROC(TEXT VAR,INT CONST)s10):INT VARl3:=1,n12,i12:=1;FORn12FROMh11UPTOh11+i10-1REPoutsubtext(a.m9,l3,p12-5);q12;s10(p0,n12);INT CONSTr12:=min(s12,length(p0));outsubtext(p0,1,r12);l3:=p12+r12+2;i12INCR1END REP;w8.p12:code(q10SUBi12).q12:INT CONSTt12:=t11(n12);IFt12=0THENout(" o ")ELSEout(text(t12,3));out(" x ")END IF.s12:IFi12=i10THENj1-p12-1ELSEcode(a.o9SUBi12)END IF.w8:outsubtext(a.m9,l3,j1);IFk1+j1>=80THENout(o2)ELSEj1-max(l3,length(a.m9))TIMESOUTt0END IF.END PROCg11;PROCu11(INT CONSTp0,u12,wert):m1(code(q10SUBu12)-4,p0);IFwert=0THENout(" o ")ELSEout(text(wert,3));out(" x ")END IF END PROCu11;INT PROCwahl(INT CONSTv12):IFv12+v12<=length(p10)THENp10ISUBv12ELSE0END IF END PROCwahl;LETw12=200,x12=5000;LET HILFE=STRUCT(INTy12,ROWw12THESAURUSz12,ROWw12SATZa13,ROWx12SATZb13);BOUND HILFE VARc13;INT VARd13,e13,f13,g13;BOOL VARh13:=FALSE;LETi13=#718
+#"Das Hilfsgebiet existiert bereits",j13=#719
+#"Diese Seite ist in der anderen Hilfe nicht vorhanden";PROCx1:TEXT VARname:=f1;BOOL VARk13;IFname=s0THENy0(s2)ELSEl13;m13;n13END IF.l13:INT CONSTo13:=pos(name,"/");TEXT VARp13;IFo13=0THENp13:=nameELSEp13:=subtext(name,1,o13-1)END IF;q13;r13.q13:INT VARs13:=link(v2(1),p13);k13:=FALSE;IFs13=0THENinsert(v2(1),p13,s13);c13.z12(s13):=emptythesaurus;satzinitialisieren(c13.a13(s13));ELIFo13=0THENy0(i13);LEAVEx1ELIFh13THENk13:=TRUE END IF.r13:INT VARt13;TEXT VARu13:=subtext(name,o13+1);IFo13=0THENt13:=1ELSEt13:=link(c13.z12(s13),u13);IFt13=0AND NOTk13THENinsert(c13.z12(s13),u13,t13)END IF END IF.m13:INT VARv13:=c13.y12;IFv13<0THENv13:=0END IF;TEXT VARw13:=s0;r0;WHILEu0CANDa1(j0)REPx13END REP.x13:INT CONSTy13:=c1;TEXT CONSTz13:=f1;IFz13<>s0THENa14;r0ELSEb14END IF.a14:TEXT VARc14;d14(z13,c14);IFy13+y13<=length(c14)THENw13CAT(c14ISUBy13)ELIF NOT(anythingnotedORk13)THENy0(j13)END IF.b14:INT VARd3:=1;IF NOTk13THENv13INCR1;w13CATv13;satzinitialisieren(c13.b13(v13))END IF;REPr0;IFu0THEN LEAVEb14ELIF
+ NOTk13THENfeldaendern(c13.b13(v13),d3,p0);d3INCR1END IF END REP.n13:IF NOTa1(f0)THENy0(r2)END IF;IF NOT(anythingnotedORk13)THENfeldaendern(c13.a13(s13),t13,w13);c13.y12:=v13END IF.END PROCx1;PROCd14(TEXT CONSTname,TEXT VARw13):INT CONSTo13:=pos(name,"/");INT VARp13,t13:=0;IFo13=0THENp13:=link(v2(1),name)ELSEp13:=link(v2(1),subtext(name,1,o13-1));e14END IF;IFt13=0THENt13:=1END IF;IFp13=0THENerrorstop(f14)ELSEfeldlesen(c13.a13(p13),t13,w13)END IF.e14:IFp13>0THENt13:=link(c13.z12(p13),subtext(name,o13+1))END IF.END PROCd14;LETf14=#720
+#"Hilfe existiert nicht",g14=#721
+#"Hilfe ist leer",h14=#722
+#"HILFE: Beenden: ESC q Seite weiter: ESC w Seite zurueck: ESC z";PROChilfeanbieten(TEXT CONSTname,FENSTER CONSTf):enablestop;s1;TEXT VARw13;i14;d14(name,w13);IFw13=s0THENerrorstop(g14)ELSEj14END IF.i14:fensterveraendert(f);fenstergroesse(f,d13,e13,f13,g13).j14:k14;statusanzeigen(h14);INT VARa13:=1;REPl14;m14END REP.l14:INT CONSTn14:=w13ISUBa13;o14(c13.b13(n14)).m14:TEXT VARt6;REPgetchar(t6);IFt6=n2THENgetchar(t6);a6;LEAVEm14ELSEout(m2)END IF END REP.a6:SELECTpos("qwz?"1"",t6)OF CASE1:LEAVEhilfeanbietenCASE2:p14CASE3:q14CASE4:r14CASE5:eschopausfuehrenOTHERWISEout(m2)END SELECT.p14:IF2*a13<length(w13)THENa13INCR1END IF.q14:IFa13>1THENa13DECR1END IF.r14:a13:=1.END PROChilfeanbieten;PROCo14(SATZ CONSTs14):INT VARd3;FORd3FROM1UPTOg13REPcursor(d13,e13+d3-1);feldbearbeiten(s14,d3,PROC(TEXT CONST,INT CONST,INT CONST)t14)END REP;cursor(d13,e13+g13-1)END PROCo14;PROCt14(TEXT CONSTa2,INT CONSTa9,b9):IFb9-a9+1>f13THENo8:=a9+f13-1ELSEo8:=b9END IF;outsubtext(a2,a9,o8);IFd13+f13>=80THENout(
+o2)ELSEf13+a9-o8-1TIMESOUTt0END IF END PROCt14;PROCstatusanzeigen(TEXT CONSTstatus):cursor(1,1);out(status);out(o2);fensterveraendert(g4)END PROCstatusanzeigen;LETd6=""4"",u14=""27"?",v14=""27"q",i9=""27"h";LETw14=#723
+#" ? (j/n) ",x14=#724
+#"jJ",y14=#725
+#"nN",z14=#726
+#"FRAGE: Bejahen: j,J Verneinen: n,N Abbrechen: ESC h Hilfe: ESC ?",a15=#727
+#"EINGABE: Bestätigen: RETURN Abbrechen: ESC h Hilfe: ESC ?",b15=#728
+#"EINGABE: Bestätigen: RETURN Zeigen: ESC z Abbruch: ESC h Hilfe: ESC ?",c15=#729
+#""15"!!! FEHLER !!! "14" Quittieren: ESC q Hilfe zur Meldung: ESC ?";FENSTER VARd8;fensterinitialisieren(d8);INT VARd15,e15,f15,g15,h15;PROCdialogfenster(INT CONSTn1,o1,i15,j15):fenstergroessesetzen(d8,n1,o1,i15,j15);e15:=n1;f15:=o1;g15:=i15;h15:=j15END PROCdialogfenster;PROCneuerdialog:d15:=h15END PROCneuerdialog;PROCdialog:BOOL VARe6;fensterzugriff(d8,e6);d15INCR1;IFd15>h15ORe6THENdialogfensterloeschen;d15:=1END IF;cursor(e15,f15+d15-1).END PROCdialog;PROCdialogfensterloeschen:BOOL CONSTk15:=e15+g15>=80;d15:=0;REPcursor(e15,f15+d15);IFk15THENout(o2)ELSEg15TIMESOUTt0END IF;d15INCR1UNTILd15>=h15END REP.END PROCdialogfensterloeschen;BOOL PROCja(TEXT CONSTl15,r10):REPstatusanzeigen(z14);dialog;out(l15);out(w14);k14;m15END REP;FALSE.m15:TEXT VARt6;REPgetchar(t6);IFpos(x14,t6)>0THENout(t6);LEAVEjaWITH TRUE ELIFpos(y14,t6)>0THENout(t6);LEAVEjaWITH FALSE ELIFt6=n2THENn15ELSEout(m2)END IF END REP.n15:getchar(t6);IFt6="?"THENhilfeanbieten(r10,d8);neuerdialog;LEAVEm15ELIFt6="h"THEN
+errorstop(s0);LEAVEjaWITH FALSE ELIFt6=""1""THENeschopausfuehrenELSEout(m2)END IF.END PROCja;PROCeditget(TEXT CONSTo15,TEXT VARt6,TEXT CONSTp15,r10):TEXT VARe9;q15;dialog;out(o15);out(t0);editget(t6,1000,r15,"","?hq"+p15,e9);IFe9=u14THENhilfeanbieten(r10,d8);neuerdialog;editget(o15,t6,p15,r10)ELIFe9=i9ORe9=v14THENerrorstop(s0)ELIFlength(e9)=2THENt6:=e9END IF.q15:IFpos(p15,"z")>0THENstatusanzeigen(b15)ELSEstatusanzeigen(a15)END IF.r15:g15-length(o15)-1.END PROCeditget;PROCfehlerausgeben:TEXT CONSTh1:=errormessage;IFerrorcode=1THENpage;bildschirmneuEND IF;clearerror;k14;IFh1<>s0THENstatusanzeigen(c15);s15;t15;neuerdialogEND IF.s15:dialog;out(m2);out(">>> ");outsubtext(errormessage,1,g15).t15:TEXT VARt6;getchar(t6);IFt6=n2THENn15END IF.n15:getchar(t6);IFt6="?"THENhilfeanbieten("FEHLER/"+text(errorcode),d8)ELIFt6=""1""THENeschopausfuehrenEND IF.END PROCfehlerausgeben;PROCk14:WHILEgetcharety<>s0REP END REP END PROCk14;LETu15=3,v15=12,w15=14,x15=1070,y15=1068,z15=1069,a16=0,b16=2;ROWu15
+DATASPACE VARz1;ROWu15THESAURUS VARv2;BOOL VARc16:=FALSE;INITFLAG VARd16;PROCs1:IF NOTinitialized(d16)THENe16END IF.e16:BOOL VARb6:=c16;f16;IFb6THENg16ELSEmenueloeschen(FALSE)END IF.f16:INT VARh16;FORh16FROM1UPTOu15WHILEb6REPi16END REP.i16:
+##INT VARj16,k16;FORk16FROM1UPTO10REPforget(z1(h16));z1(h16):=nilspace;pingpong(father,x15+h16,z1(h16),j16);IFj16=a16THEN LEAVEi16ELIFj16<>b16THENpause(15)END IF UNTILj16=b16END REP;forget(z1(h16));z1(h16):=nilspace;
+##b6:=FALSE.END PROCs1;THESAURUS PROCmenuenamen(INT CONSTh16):s1;IFh16<0THENc13.z12(-h16)ELSEv2(h16)END IF END PROCmenuenamen;PROCmenueloeschen(TEXT CONSTname,INT CONSTh16):s1;IFh16<0THENl16(name,c13.z12(-h16))ELSEl16(name,v2(h16))END IF END PROCmenueloeschen;PROCl16(TEXT CONSTname,THESAURUS VARz8):INT CONSTindex:=link(z8,name);IFindex>0THENdelete(z8,index)END IF END PROCl16;PROCmenueloeschen(BOOL CONSTm16):INT VARh16;d16:=TRUE;h13:=m16;FORh16FROM1UPTOu15REPforget(z1(h16));z1(h16):=nilspace;v2(h16):=emptythesaurusEND REP;g16END PROCmenueloeschen;PROCg16:c13:=z1(1);f2:=z1(2);p9:=z1(3)END PROCg16;
+##LETn16=#730
+#"Datei wird von anderer Task geaendert.",o16=#731
+#"Auftrag nur fuer Soehne erlaubt";THESAURUS VARp16:=emptythesaurus;ROW200TASK VARq16;TEXT VARr16;BOUND STRUCT(TEXTname,s16,t16)VARu16;PROCmenuemanager(DATASPACE VARv16,INT CONSTw16,x16,TASK CONSTy16):enablestop;c16:=TRUE;IFw16>=y15ANDw16<=x15+u15THENz16ELSE IFw16=v15ORw16=w15THENa17END IF;freemanager(v16,w16,x16,y16)END IF.z16:IFw16=y15THENb17ELIFw16=z15THENc17ELSEd17END IF.b17:u16:=v16;e17(u16.name,y16);send(y16,a16,v16).c17:u16:=v16;f17(u16.name);send(y16,a16,v16).a17:IFx16=1THENg17ELSEf17(r16)END IF.g17:u16:=v16;r16:=u16.name;IFh17THENerrorstop(n16)END IF.h17:INT VARv12:=link(p16,r16);v12>0CAND NOT(q16(v12)=y16).d17:IFy16<myselfTHENs1;forget(v16);v16:=z1(w16-x15);send(y16,a16,v16)ELSEerrorstop(o16)END IF.END PROCmenuemanager;PROCe17(TEXT CONSTr1,TASK CONSTi17):INT VARl5:=link(p16,r1);IFl5=0THENinsert(p16,r1,l5);j17;q16(l5):=i17ELIFexists(q16(l5))THEN IF NOT(q16(l5)=i17)THENerrorstop(n16)END IF ELSEq16(l5):=i17END IF.j17:IFl5=0THENk17;insert(p16,r1,l5)END IF.k17:TEXT VARl17;l5:=0;
+REPget(p16,l17,l5);IFl5=0THEN LEAVEk17END IF;IF NOTexists(l17)OR NOTexists(q16(l5))THENdelete(p16,l5)END IF END REP.END PROCe17;PROCf17(TEXT CONSTr1):INT VARl5;delete(p16,r1,l5)END PROCf17;PROCglobalmanager:globalmanager(PROC(DATASPACE VAR,INT CONST,INT CONST,TASK CONST)menuemanager)END PROCglobalmanager;
+##PROClock(TEXT CONSTr1,TASK CONSTm17):call(y15,r1,m17)END PROClock;PROCfree(TEXT CONSTr1,TASK CONSTm17):call(z15,r1,m17)END PROCfree;END PACKETeudasmenues;
+
diff --git a/app/eudas/4.3/src/eudas.4 b/app/eudas/4.3/src/eudas.4
new file mode 100644
index 0000000..4605022
--- /dev/null
+++ b/app/eudas/4.3/src/eudas.4
@@ -0,0 +1,150 @@
+PACKETsatzanzeigeDEFINESanzeigefenster,bildausgeben,aendern,einfuegen,suchen,feldauswahl,rollen,exitdurch,exitzeichen:LETb0=256;LETc0=" ",d0="",e0=""5"",f0=""15"",g0=" "14"",h0=" "14" ";ROWb0STRUCT(INTi0,j0)VARk0;INT VARl0,m0,n0:=24,o0:=79,p0:=1,q0:=1,r0,s0,t0:=0,u0:=0,v0:=dateiversion-1,w0:=0;BOOL VARx0:=TRUE,y0:=TRUE,z0:=FALSE,a1;FENSTER VARfenster;fensterinitialisieren(fenster);DATASPACE VARb1,c1;FILE VAReditfile;TEXT VARd1,e1;LETf1=#801
+#"Anzeigefenster zu klein";PROCanzeigefenster(INT CONSTg1,h1,i1,j1):IFi1>=39THENfenstergroessesetzen(fenster,g1,h1,i1,j1);y0:=g1+i1>=80;o0:=i1;n0:=j1;q0:=g1;p0:=h1;x0:=TRUE ELSEerrorstop(f1)END IF END PROCanzeigefenster;PROCk1:BOOL VARfensterveraendert;fensterzugriff(fenster,fensterveraendert);IFfensterveraendertTHENa1:=TRUE END IF END PROCk1;PROCl1:IFm1ORx0THENn1;o1;p1;q1;r1;s1END IF.m1:v0<>dateiversion.n1:l0:=0;WHILEl0<anzahlfelderREPl0INCR1;k0(l0).i0:=l0END REP;m0:=1.o1:INT VARi0;r0:=11;FORi0FROM1UPTOanzahlfelderREPfeldnamenbearbeiten(i0,PROC(TEXT CONST,INT CONST,INT CONST)t1)END REP;r0:=min(r0,o0DIV2);s0:=o0-r0-3.q1:a1:=TRUE.r1:forget(c1);c1:=nilspace;IFm1ANDz0THENforget(b1);z0:=FALSE END IF.s1:v0:=dateiversion;w0:=anzahldateien;x0:=FALSE.END PROCl1;PROCt1(TEXT CONSTu1,INT CONSTv1,w1):r0INCRlength(u1)-length(u1);r0:=max(r0,w1-v1+1)END PROCt1;PROCrollen(INT CONSTx1):m0:=m0+x1;IFm0<1THENm0:=1ELIFm0>y1THENm0:=max(y1,1)END IF;a1:=TRUE.y1:l0-n0+3.END PROCrollen;PROCfeldauswahl(TEXT
+CONSTz1):l1;a2;a1:=TRUE.a2:l0:=length(z1);INT VARb2;FORb2FROM1UPTOl0REPk0(b2).i0:=code(z1SUBb2)END REP;m0:=1.END PROCfeldauswahl;INT VARc2;PROCd2:type(c1,-1);editfile:=sequentialfile(modify,c1);editinfo(editfile,-1);toline(editfile,1);col(editfile,1);maxlinelength(editfile,10000);c2:=1END PROCd2;.e2:c2<=l0.PROCf2(PROC(TEXT CONST,INT CONST)g2):h2;IFeof(editfile)THENg2("",i0)ELIFi2THENj2;k2;g2(e1,i0)ELIFl2THENreadrecord(editfile,e1);k2;g2(e1,i0);down(editfile)ELSEexec(PROC(TEXT CONST,INT CONST)g2,editfile,i0);down(editfile)END IF.h2:INT CONSTv1:=c2,i0:=k0(v1).i0;REPc2INCR1UNTILc2>l0CORm2END REP.m2:k0(c2).i0<>i0.i2:c2-v1>1.j2:e1:="";REPexec(PROC(TEXT CONST,INT CONST)n2,editfile,length(e1));down(editfile)UNTILeof(editfile)ORlineno(editfile)=c2END REP.l2:INT CONSTo2:=len(editfile);subtext(editfile,o2,o2)=c0.END PROCf2;PROCn2(TEXT CONSTp2,INT CONSTq2):IFq2>0CAND(e1SUBq2)<>c0CAND(p2SUB1)<>c0THENe1CATc0END IF;e1CATp2END PROCn2;PROCk2:INT VARo2:=length(e1);WHILE(e1SUBo2)=c0REPo2DECR1END REP;e1
+:=subtext(e1,1,o2)END PROCk2;BOOL VARr2;PROCeinfuegen(PROCs2):enablestop;l1;IFl0>0THENd2;k1;t2(PROCs2);satzeinfuegen;r2:=TRUE;u2END IF END PROCeinfuegen;PROCu2:WHILEe2REPf2(PROC(TEXT CONST,INT CONST)v2)END REP;aenderungeneintragenEND PROCu2;PROCv2(TEXT CONSTw2,INT CONSTi0):IF NOTr2CORw2<>d0THENfeldaendern(i0,w2)END IF END PROCv2;PROCaendern(PROCs2):enablestop;IFdateiendeTHENeinfuegen(PROCs2)ELSEx2END IF.x2:l1;IFl0>0THENd2;k1;y2(a1);z2;t2(PROCs2);r2:=FALSE;u2END IF.z2:a3:=1;WHILEa3<=l0REPfeldbearbeiten(k0(a3).i0,PROC(TEXT CONST,INT CONST,INT CONST)b3);insertrecord(editfile);writerecord(editfile,e1);down(editfile);a3INCR1END REP;toline(editfile,1).END PROCaendern;INT VARa3;PROCb3(TEXT CONSTu1,INT CONSTv1,w1):e1:=subtext(u1,c3,d3).c3:v1+k0(a3).j0.d3:IFe3THENw1ELSEv1+k0(a3+1).j0-1END IF.e3:a3=l0CORk0(a3+1).i0<>k0(a3).i0.END PROCb3;PROCsuchen(PROCs2):enablestop;l1;IFl0>0THENd2;k1;IFsuchversion<>0THENf3END IF;t2(PROCs2);g3END IF.f3:a3:=1;WHILEa3<=l0REPinsertrecord(editfile);h3;down(editfile)
+;a3INCR1END REP;toline(editfile,1).h3:IFk0(a3).j0=0THENsuchbedingunglesen(k0(a3).i0,e1);writerecord(editfile,e1)END IF.g3:suchbedingungloeschen;WHILEe2REPf2(PROC(TEXT CONST,INT CONST)i3)END REP.END PROCsuchen;PROCi3(TEXT CONSTj3,INT CONSTi0):suchbedingung(i0,j3)END PROCi3;PROCbildausgeben(BOOL CONSTk3):enablestop;l1;k1;IFk3ORa1ORl3THENy2(a1);t0:=satznummer;u0:=satzkombination;m3(TRUE)ELSEn3(TRUE)END IF.l3:satznummer<>t0ORu0<>satzkombination.END PROCbildausgeben;INT VARj0;BOOL VARo3;PROCy2(BOOL CONSTp3):INT VARb2:=1,q3:=0;o3:=TRUE;WHILEb2<=l0OR NOTo3REPr3END REP.r3:IFo3CANDk0(b2).i0=q3THENs3ELSE IFt3THENu3END IF;k0(b2).j0:=j0;feldbearbeiten(k0(b2).i0,PROC(TEXT CONST,INT CONST,INT CONST)v3);b2INCR1END IF.s3:IFp3THENw3(b2)ELSEk0(b2).j0:=j0;b2INCR1END IF.t3:b2>l0CORk0(b2).i0<>q3.u3:IFo3THENx3ELSEy3(b2);k0(b2).i0:=q3END IF.x3:q3:=k0(b2).i0;j0:=0.END PROCy2;PROCv3(TEXT CONSTu1,INT CONSTv1,w1):INT CONSTz3:=w1-v1-j0+1;IFz3>s0-2THENj0INCRs0-2;a4;o3:=FALSE ELSEj0INCRz3;o3:=TRUE END IF.a4:INT VAR
+b4:=v1+j0-1;IFc4ANDd4THEN WHILE(u1SUBb4)<>c0REPb4DECR1;j0DECR1END REP END IF.c4:(u1SUBb4)<>c0.d4:pos(u1,c0,b4-s0,b4-1)>0.END PROCv3;PROCy3(INT CONSTb2):INT VARe4;FORe4FROMl0DOWNTOb2REPk0(e4+1):=k0(e4)END REP;l0INCR1;a1:=TRUE END PROCy3;PROCw3(INT CONSTb2):INT VARe4;FORe4FROMb2+1UPTOl0REPk0(e4-1):=k0(e4)END REP;l0DECR1;a1:=TRUE END PROCw3;INT VARf4;TEXT VARg4,h4,i4,j4:="",k4;LETl4=#802
+#""15" Bild verschoben ! ESC 1 druecken ! "14"";LETm4=""3""10"19"11""12"q?hpg";LETn4=1,o4=2,p4=3,q4=4,r4=5,s4=6,t4=7,u4=8,v4=9,w4=10,x4=11;PROCt2(PROCs2):INT VARy4:=m0;lernsequenzauftastelegen("D",date);REPm3(FALSE);z4;a5;b5;c5UNTILd5END REP;toline(editfile,1);col(editfile,1).z4:IFlines(editfile)<l0+1THENoutput(editfile);line(editfile,l0-lines(editfile)+2);modify(editfile)END IF.a5:IFm0<>1THENe5(m0-1,h4)END IF;e5(f5,i4);toline(editfile,y4).f5:min(l0+1,m0+n0-1).b5:openeditor(groesstereditor+1,editfile,TRUE,q0+r0+3,p0,s0,g5);edit(groesstereditor,m4+j4,PROC(TEXT CONST)h5).g5:min(l0-m0+2,n0).c5:y4:=lineno(editfile);i5;SELECTf4OF CASEn4:j5CASEo4:k5CASEp4:l5CASEq4:m5CASEr4:n5CASEs4:o5CASEu4:s2;a1:=TRUE CASEv4:errorstop(d0)CASEw4:p5CASEx4:q5END SELECT.i5:INT CONSTr5:=col(editfile);col(editfile,1);IFm0<>1THENs5(m0-1,h4)END IF;s5(f5,i4);col(editfile,r5).j5:INT VARt5;t5:=y4-m0;rollen(-n0+1);y4:=m0+t5.k5:t5:=y4-m0;rollen(n0-1);y4:=min(m0+t5,l0).l5:rollen(-999);y4:=1.m5:t5:=y4-m0;rollen(999);y4:=
+min(m0+t5,l0).n5:toline(editfile,y4);u5;y3(y4).u5:readrecord(editfile,e1);g4:=subtext(e1,r5);e1:=subtext(e1,1,r5-1);writerecord(editfile,e1);down(editfile);insertrecord(editfile);writerecord(editfile,g4).o5:toline(editfile,y4);IFr5=1AND(v5CANDw5ORx5CANDy5)THENz5ELSEa6END IF.v5:y4<>l0.w5:k0(y4+1).i0=k0(y4).i0.x5:y4<>1.y5:k0(y4-1).i0=k0(y4).i0.z5:deleterecord(editfile);w3(y4).a6:readrecord(editfile,e1);e1:=subtext(e1,1,r5-1);writerecord(editfile,e1).p5:forget(b1);b1:=c1;z0:=TRUE.q5:IFz0THENforget(c1);c1:=b1;editfile:=sequentialfile(modify,c1)END IF.d5:f4=t4.END PROCt2;PROCh5(TEXT CONSTb6):enablestop;setbusyindicator;f4:=pos(m4,b6);IFf4>0THENk4:=b6;quitELIFpos(j4,b6)>0THENf4:=t4;k4:=b6;quitELIFkommandoauftaste(b6)<>d0THENstdkommandointerpreter(b6)ELSEnichtsneuEND IF END PROCh5;PROCe5(INT CONSTb2,TEXT VARc6):toline(editfile,b2);readrecord(editfile,c6);writerecord(editfile,l4)END PROCe5;PROCs5(INT CONSTb2,TEXT CONSTc6):toline(editfile,b2);IFeof(editfile)CORpos(editfile,l4,1)=0THENtoline(
+editfile,1);down(editfile,l4);IFeof(editfile)THENtoline(editfile,b2);insertrecord(editfile)END IF END IF;writerecord(editfile,c6)END PROCs5;PROCexitzeichen(TEXT CONSTd6):j4:=d6END PROCexitzeichen;TEXT PROCexitdurch:k4END PROCexitdurch;INT VARe6;LETf6=#803
+#"ENDE.",g6=#804
+#"SUCH+",h6=#805
+#"SUCH-",i6=#806
+#"MARK+",j6=#807
+#"MARK-",k6=#808
+#" Feld "14" ",l6=#809
+#" Satz ",m6=#810
+#"< KOPPEL >";LETn6=".....",o6=" ";PROCm3(BOOL CONSTp6):INT VARq6:=p0+1,r6:=0;INT CONSTs6:=m0+n0-2;n3(p6);e6:=m0;WHILEe6<=s6REPt6;u6;v6;q6INCR1;e6INCR1END REP;a1:=FALSE.t6:IFa1THENcursor(q0,q6);IFe6<=l0THENw6ELIFe6=l0+1THENx6ELSEy6END IF END IF.w6:out(f0);IFk0(e6).i0=r6THENr0TIMESOUTc0ELSEr6:=k0(e6).i0;feldnamenbearbeiten(r6,PROC(TEXT CONST,INT CONST,INT CONST)z6)END IF;out(g0).x6:out(f0);o0-4TIMESOUT".";out(h0).y6:IFy0THENout(e0)ELSEo0TIMESOUTc0END IF.u6:IFp6ANDe6<=l0THENcursor(q0+r0+3,q6);feldbearbeiten(k0(e6).i0,PROC(TEXT CONST,INT CONST,INT CONST)a7)END IF.v6:IF NOTa1THEN TEXT CONSTinput:=getcharety;IFinput<>d0THENpush(input);IFpos(j4,input)>0THENt0:=0;LEAVEm3END IF END IF END IF.END PROCm3;PROCn3(BOOL CONSTp6):b7;c7;cursor(q0,p0);IF NOTp6THENoutsubtext(d1,1,r0+3);LEAVEn3END IF;replace(d1,r0+7,d7);replace(d1,r0+14,e7);out(d1);cursor(q0+o0-5,p0);out(text(m0)).b7:TEXT VARsatznr;satznr:=text(satznummer);IFanzahlkoppeldateien>0AND NOTaufkoppeldateiTHENsatznrCAT"-";satznrCATtext(
+satzkombination)END IF.c7:replace(d1,7,o6);replace(d1,7,satznr).d7:IFsuchversion=0THENn6ELIFsatzausgewaehltTHENg6ELSEh6END IF.e7:IFdateiendeTHENf6ELIFmarkiertesaetze=0THENn6ELIFsatzmarkiertTHENi6ELSEj6END IF.END PROCn3;PROCz6(TEXT CONSTu1,INT CONSTv1,w1):IFw1-v1>=r0THENoutsubtext(u1,v1,v1+r0-1)ELSEoutsubtext(u1,v1,w1);r0-w1+v1-1TIMESOUTc0END IF END PROCz6;PROCa7(TEXT CONSTu1,INT CONSTv1,w1):INT VARo2;IFe6=l0CORf7THENo2:=w1ELSEo2:=v1+k0(e6+1).j0-1END IF;outsubtext(u1,v1+k0(e6).j0,o2);IFy0THENout(e0)ELSEg7TIMESOUTc0END IF.f7:k0(e6+1).i0<>k0(e6).i0.g7:s0-o2+v1+k0(e6).j0-1.END PROCa7;PROCp1:d1:=text(l6,r0+3);d1CATf0;INT VARe4;INT CONSTh7:=o0-length(d1)-11;FORe4FROM1UPTOh7REPd1CAT"."END REP;d1CATk6;i7.i7:TEXT VARj7;IFaufkoppeldateiTHENj7:=m6ELSEj7:=eudasdateiname(1)END IF;j7:=subtext(j7,1,h7-20);j7CATc0;replace(d1,r0+21,c0);replace(d1,r0+22,j7).END PROCp1;END PACKETsatzanzeige;
+PACKETuebersichtsanzeigeDEFINESuebersicht,uebersichtsfenster:ROW24INT VARb0;ROW24INT VARc0;FENSTER VARfenster;fensterinitialisieren(fenster);INT VARd0:=24,e0:=79,f0:=1,g0:=1,h0,i0:=-1;BOOL VARj0,k0;TEXT VARl0;LETm0="",n0=""15"",o0=""14"",p0=" ",q0=""7"",r0=""5"";LETs0=#901
+#""15"Satznr. ",t0=#902
+#" << DATEIENDE >>",u0=#903
+#"UEBERSICHT: Rollen: HOP OBEN, HOP UNTEN Beenden: ESC q Hilfe: ESC ?";PROCuebersichtsfenster(INT CONSTv0,w0,x0,y0):fenstergroessesetzen(fenster,v0,w0,x0,y0);j0:=v0+x0>=80;d0:=y0;e0:=x0;f0:=w0;g0:=v0END PROCuebersichtsfenster;PROCuebersicht(TEXT CONSTz0,PROCa1):TEXT VARb1;BOOL VARc1;INT VARd1:=1,e1:=0,f1:=1;fensterzugriff(fenster,c1);statusanzeigen(u0);g1;k0:=FALSE;h1;REPi1;j1;k1END REP.g1:IFz0=m0THENl1ELSEl0:=z0;i0:=dateiversionEND IF.l1:IFi0<>dateiversionTHENm1;i0:=dateiversionEND IF.m1:INT VARn1;l0:=m0;FORn1FROM1UPTOanzahlfelderREPl0CATcode(n1)END REP.i1:WHILEe1<d0REPb1:=getcharety;IFb1<>""THEN LEAVEi1END IF;o1;e1INCR1END REP;p1;getchar(b1).o1:IFe1=0THENq1ELIFe1=1THENr1ELSEs1END IF.q1:cursor(g0,f0);out(s0);h0:=e0-10;INT VARfeldindex;FORfeldindexFROM1UPTOlength(l0)WHILEh0>0REPfeldnamenbearbeiten(code(l0SUBfeldindex),PROC(TEXT CONST,INT CONST,INT CONST)t1)END REP;u1;cursor(g0+e0-1,f0);out(o0).r1:v1(1);w1(1);x1.s1:cursor(g0,f0+e1);IFdateiendeTHENb0(e1):=0;h0:=e0;u1ELSEy1;w1(e1);
+x1END IF.y1:weiter(2);z1;b0(e1):=satznummer;c0(e1):=satzkombination.z1:IF NOT(satzausgewaehltORdateiende)THEN LEAVEuebersichtEND IF.j1:IFd1<e1THENw1(d1)END IF;cursor(g0,f0+d1).p1:k0:=TRUE;WHILEb0(d1)=0REPd1DECR1END REP;w1(d1);v1(d1);a2;k0:=FALSE.k1:SELECTf1OF CASE1:b2CASE2:c2CASE3:d2END SELECT.b2:SELECTpos(""3""10""1""27"+-",b1)OF CASE1:e2CASE2:f2CASE3:f1:=2CASE4:f1:=3CASE5:g2CASE6:h2OTHERWISEout(q0)END SELECT.c2:SELECTpos(""3""10""13"",b1)OF CASE1:i2CASE2:j2CASE3:k2OTHERWISEout(q0)END SELECT;f1:=1.d2:SELECTpos("19qh?",b1)OF CASE1:l2CASE2:m2CASE3,4:n2CASE5:o2OTHERWISEout(q0)END SELECT;f1:=1.e2:IFd1>1THENd1DECR1;ELSEp2(1);e1:=1END IF.f2:IF NOTdateiendeTHEN IFd1<d0-1THENd1INCR1ELSEb0(1):=b0(2);c0(1):=c0(2);e1:=1END IF END IF.g2:IF NOTsatzmarkiertTHENmarkierungaendernEND IF.h2:IFsatzmarkiertTHENmarkierungaendernEND IF.i2:IFd1>1THENd1:=1ELSEp2(d0-1);e1:=1END IF.j2:IFd1=d0-1AND NOTdateiendeTHENweiter(2);h1;e1:=1ELSEd1:=d0-1END IF.k2:IFd1<>1THENb0(1):=b0(d1);c0(1):=c0(d1);d1:=1;e1:=1END IF.
+l2:aufsatz(1);IF NOTsatzausgewaehltTHENweiter(2)END IF;h1;d1:=1;e1:=1.m2:aufsatz(32767);h1;p2(d0-2);e1:=1.n2:k0:=true;w1(d1);LEAVEuebersicht.o2:a1;statusanzeigen(u0);e1:=0.END PROCuebersicht;PROCp2(INT CONSTq2):INT VARn1;v1(1);FORn1FROM1UPTOq2WHILEsatznummer>1REPzurueck(2)END REP;h1END PROCp2;PROCv1(INT CONSTr2):aufsatz(b0(r2));WHILEsatzkombination<>c0(r2)REPweiter(1)END REP END PROCv1;PROCh1:b0(1):=satznummer;c0(1):=satzkombinationEND PROCh1;BOOL PROCs2(INT CONSTr2):satznummer=b0(r2)CANDsatzkombination=c0(r2)END PROCs2;PROCt1(TEXT CONSTt2,INT CONSTu2,v2):INT CONSTd0:=min(h0,v2-u2+1);outsubtext(t2,u2,u2+d0-1);h0DECRd0;IFh0>=2THENout(", ");h0DECR2ELIFh0=1THENout(",");h0:=0END IF END PROCt1;PROCw1(INT CONSTr2):cursor(g0,f0+r2);IFk0THENout(n0)ELSEout(p0)END IF;outtext(text(b0(r2)),1,5);IFk0THENout(o0)ELSEout(p0)END IF;h0:=e0-7END PROCw1;PROCu1:IFj0THENout(r0)ELSEh0TIMESOUTp0END IF END PROCu1;PROCx1:IFsatzausgewaehltTHENa2;w2ELIFdateiendeTHENout(t0);h0DECR17ELSEa2;out("<< >>");h0DECR5END
+IF;u1.w2:INT VARfeldindex;FORfeldindexFROM1UPTOlength(l0)WHILEh0>0REPfeldbearbeiten(code(l0SUBfeldindex),PROC(TEXT CONST,INT CONST,INT CONST)t1)END REP.END PROCx1;PROCa2:IFsatzmarkiertTHENout("+ ")ELSEout("- ")END IF;h0DECR2END PROCa2;END PACKETuebersichtsanzeige;
+PACKETeudassteuerungDEFINESeudas,einzelsicherung,suchen,aendern,einfuegen,prueffehlereditieren,feldstruktur,dateiverwaltung,archivverwaltung,edit,dateinamenanfordern,ausfuehrung,einzelausfuehrung:LETb0=1003,c0=3243;LETd0="",e0=" ",f0=""27"z",g0=""4"",h0=""5"";FILE VARi0;DATASPACE VARj0;INT VARk0,l0:=dateiversion-1;FENSTER VARm0,n0,o0,p0;TEXT VARq0;fensterinitialisieren(m0);fensterinitialisieren(n0);fensterinitialisieren(o0);fensterinitialisieren(p0);fenstergroessesetzen(m0,1,2,79,23);fenstergroessesetzen(n0,1,2,15,22);fenstergroessesetzen(o0,16,2,64,22);fenstergroessesetzen(p0,1,24,79,1);dialogfenster(16,2,64,22);anzeigefenster(16,2,64,23);uebersichtsfenster(1,2,79,23);TEXT VARr0;BOOL VARs0:=FALSE;LETt0=#1001
+#"EUDAS.Öffnen",u0=#1002
+#"EUDAS.Einzelsatz",v0=#1003
+#"EUDAS.Gesamtdatei",w0=#1004
+#"EUDAS.Drucken",x0=#1005
+#"EUDAS.Dateien",y0=#1006
+#"EUDAS.Archiv";LETz0=#1007
+#"EUDAS kann nicht unter EUDAS aufgerufen werden",a1=#1008
+#"Suchbedingung einstellen",b1=#1009
+#"Alle Saetze drucken",c1=#1010
+#"Alle markierten Satze drucken",d1=#1011
+#"Aktuellen Satz drucken",e1=#1012
+#"Mit neuer Auswahl noch einmal",f1=#1013
+#"Akt.Datei: ",g1=#1014
+#" Datum: ";PROCh1:cursor(30,6);out("EEEEE U U DDDD A SSSS");cursor(30,7);out("E U U D D A A S");cursor(30,8);out("EEE U U D D AAAAA SSS");cursor(30,9);out("E U U D D A A S");cursor(30,10);out("EEEEE UUU DDDD A A SSSS");cursor(30,12);out("Version 4.3");cursor(30,13);out("Stand: 13.08.87");cursor(30,15);out("(C) COPYRIGHT:");cursor(30,16);out("Thomas Berlage");cursor(30,17);out("Software-Systeme")END PROCh1;PROCeudas:IFaktuellereditor>0THENi1ELIFs0THENerrorstop(z0)ELSEj1END IF.j1:page;bildschirmneu;h1;k0:=heapsize;k1;disablestop;s0:=TRUE;menueanbieten(ROW6TEXT:(t0,u0,v0,w0,x0,y0),n0,TRUE,PROC(INT CONST,INT CONST)l1);s0:=FALSE;enablestop;m1;page;bildschirmneuEND PROCeudas;PROCi1:TEXT VARn1;o1;m1;IFp1THEN LEAVEi1END IF;q1(FALSE);aufsatz(1);r1(n1);REPs1;uebersicht(n1,PROCt1);o1;u1UNTILv1END REP;dateienloeschen(FALSE).p1:INT VARw1;FORw1FROM1UPTOanzahldateienREP IFinhaltveraendert(w1)THEN LEAVEp1WITH TRUE END IF END REP;FALSE.s1:IFja(a1,
+"JA/Suchmuster")THENsuchen;allesneuEND IF.u1:IFmarkiertesaetze=0CANDx1THENdateinamenanfordern(y1);einzelausfuehrung(PROC(TEXT CONST)z1,b0);ELIFmarkiertesaetze>0CANDa2THENdateinamenanfordern(y1);einzelausfuehrung(PROC(TEXT CONST)z1,b0);markierungenloeschenELIFb2THENmarkierungenloeschen;markierungaendern;dateinamenanfordern(y1);einzelausfuehrung(PROC(TEXT CONST)z1,b0);markierungenloeschenEND IF.x1:ja(b1,"JA/alle Satze").a2:ja(c1,"JA/alle markierten").b2:ja(d1,"JA/Einzelsatz drucken").v1:NOTja(e1,"JA/noch einmal").END PROCi1;PROCo1:bildschirmneu;cursor(1,1);out(g0);cursor(15,1);23TIMESOUT(""10":"8"")END PROCo1;PROCz1(TEXT CONSTc2):d2;disablestop;drucke(c2);e2;o1END PROCz1;PROCl1(INT CONSTf2,g2):enablestop;SELECTf2OF CASE0:h2CASE1:i2(g2)CASE2:j2(g2)CASE3:k2(g2)CASE4:l2(g2)CASE5:dateiverwaltung(g2)CASE6:archivverwaltung(g2)END SELECT.h2:IFanzahldateien=0THENm2(FALSE);n2(FALSE)ELIF NOTaendernerlaubtTHENn2(FALSE)END IF;o2;waehlbar(6,6,p2);waehlbar(6,9,NOTp2);IFq2THENwaehlbar(1,8,FALSE);
+waehlbar(6,7,FALSE)END IF.q2:FALSE.END PROCl1;PROCm2(BOOL CONSTr2):INT VARs2;waehlbar(1,4,r2);waehlbar(1,5,r2);waehlbar(1,7,r2);FORs2FROM1UPTO11REPwaehlbar(2,s2,r2)END REP;waehlbar(3,1,r2);waehlbar(3,4,r2);waehlbar(3,6,r2);waehlbar(4,1,r2)END PROCm2;PROCo2:BOOL VARr2:=anzahldateien=1ANDaendernerlaubt;waehlbar(1,6,r2);waehlbar(3,5,r2);r2:=anzahldateien>0ANDanzahldateien<10AND NOTaufkoppeldatei;waehlbar(1,2,r2);waehlbar(1,3,r2)END PROCo2;PROCn2(BOOL CONSTr2):INT VARs2;FORs2FROM7UPTO10REPwaehlbar(2,s2,r2)END REP;waehlbar(3,2,r2);waehlbar(3,3,r2)END PROCn2;PROCk1:fensterveraendert(p0);r0:=""6""23""0"";r0CATf1;IFanzahldateien>0THENr0CAT"""";r0CATeudasdateiname(1);r0CAT""""END IF;IFanzahldateien>1THENr0CAT" .. "END IF;r0CAT""5""6""23"";r0CATcode(79-length(date)-length(g1));r0CATg1;r0CATdateEND PROCk1;PROCt2(TEXT CONSTu2,v2):BOOL VARw2;fensterzugriff(p0,w2);IFw2THENout(r0);cursor(35,24);out(u2);IFv2<>d0THENout("""");outsubtext(v2,1,22-length(u2));out(""" ")END IF END IF END PROCt2;THESAURUS
+VARx2:=emptythesaurus;BOOL VARy2,z2:=FALSE;TASK VARa3;TEXT VARb3:=d0,c3:=d0;LETd3=#1015
+#" Manager: ",e3=#1017
+#"Keine Sicherung noetig.",f3=#1018
+#"Interne Arbeitskopien loeschen",g3=#1019
+#"Arbeitskopie ",h3=#1020
+#" unveraendert.",i3=#1021
+#" veraendert! Sichern",j3=#1022
+#"Alte Version ueberschreiben",k3=#1023
+#"Sondern unter dem Namen:",l3=#1024
+#" ueberschreiben",m3=#1025
+#"Datei wieder sortieren",n3=#1026
+#"Notizen",o3=#1027
+#"Name Managertask:",p3=#1028
+#"Task existiert nicht !",q3=#1029
+#"Wollen Sie etwas veraendern (eine Arbeitskopie anlegen)",r3=#1030
+#"Alle Markierungen gelöscht.",s3=#1032
+#"Pruefbedingungen",t3=#1033
+#"Feldnamen oder Feldtypen aendern",u3=#1034
+#"Feldnamen anfuegen",v3=#1035
+#"Neuer Feldname:",w3=#1036
+#"Neuer Typ (TEXT,DIN,ZAHL,DATUM):",x3=#1037
+#"Neue Feldnamen",y3=#1038
+#"TEXT",z3=#1039
+#"DIN",a4=#1040
+#"ZAHL",b4=#1041
+#"DATUM",c4=#1042
+#"Alte Feldreihenfolge aendern",d4=#1043
+#""7"ACHTUNG: System voll, Dateien loeschen!";PROCi2(INT CONSTg2):SELECTg2OF CASE0:e4CASE1:f4CASE2:g4CASE3:h4CASE4:i4CASE5:j4CASE6:k4CASE7:l4CASE8:m4OTHERWISEn4END SELECT;t2(d3,b3);o4;p4.e4:IFanzahldateien=0THENl1(0,0)END IF.f4:m1;q1(TRUE).g4:disablestop;q4;ausfuehrung(PROC(TEXT CONST)r4,c0);s4;enablestop;o2.h4:disablestop;q4;ausfuehrung(PROC(TEXT CONST)t4,c0);s4;enablestop;o2.i4:IFaendernerlaubtTHENu4ELSEdialog;out(e3);v4END IF;w4.u4:INT VARw1;FORw1FROM1UPTOanzahldateienREPeinzelsicherung(w1)END REP;IFja(f3,"JA/Dateien loeschen")THENx4;dateienloeschen(TRUE)END IF.w4:IFanzahldateien=0THENm2(FALSE);n2(FALSE)END IF;o2;k1.v4:INT CONSTy4:=anzahldateien;dateienloeschen(FALSE);FORw1FROM1UPTOy4REP IFz4(w1)THENa5(eudasdateiname(w1))END IF END REP.j4:b5;dialogfensterloeschen.k4:zugriff(PROC(EUDAT VAR)feldstruktur).l4:c5;dialogfensterloeschen.m4:b3:="";fensterveraendert(p0);editget(o3,b3,"","GET/multi task");IFb3=""THENz2:=FALSE ELIFexists(/b3)THENa3:=task(b3);z2:=TRUE ELSEz2:=FALSE;b3:="";
+errorstop(p3)END IF.p4:IFheapsize-k0>4THENcollectheapgarbage;k0:=heapsizeEND IF.n4:IFg2=-1THENdialogfensterloeschen;fensterveraendert(p0);LEAVEi2END IF.END PROCi2;PROCm1:BOOL VARd5:=FALSE;IFaendernerlaubtTHENe5END IF;IFd5THENdialogEND IF.e5:INT VARw1;FORw1FROM1UPTOanzahldateienREP IFinhaltveraendert(w1)THENeinzelsicherung(w1);d5:=TRUE;f5END IF END REP.f5:IFw1=1CANDstd=eudasdateiname(1)THENlastparam(d0)END IF.END PROCm1;PROCeinzelsicherung(INT CONSTw1):g5;IFinhaltveraendert(w1)THEN IFja(h5,"JA/sichere")THENi5END IF ELSEdialog;out(h5)END IF.g5:TEXT VARh5:=g3;h5CATtextdarstellung(eudasdateiname(w1));IFinhaltveraendert(w1)THENh5CATi3ELSEh5CATh3END IF.i5:TEXT VARname:=eudasdateiname(w1);IFja(j3,"JA/alte version")THENforget(name,quiet)ELIFz4(w1)THENerrorstop(d0)ELSEj5END IF;sichere(w1,name);k5.j5:editget(k3,name,"","GET/Sicherungsname");IFexists(name)THENl5END IF.l5:IFja(textdarstellung(name)+l3,"JA/ueber")THENforget(name,quiet)ELSEeinzelsicherung(w1);LEAVEeinzelsicherungEND IF.k5:EUDAT VAR
+m5;oeffne(m5,name);IFn5CANDo5THENp5;sortiere(m5)END IF.n5:sortierreihenfolge(m5)<>d0CANDunsortiertesaetze(m5)>0.o5:ja(m3,"JA/Sicherungssortierung").END PROCeinzelsicherung;PROCq1(BOOL CONSTq5):IFaendernerlaubtTHENx4END IF;dateienloeschen(TRUE);m2(FALSE);n2(FALSE);forget(j0);disablestop;q4;y2:=q5;einzelausfuehrung(PROC(TEXT CONST)r5,c0);s4;o2;enablestop;IFanzahldateien>0THENm2(TRUE);n2(aendernerlaubt)END IF END PROCq1;PROCq4:IFz2THENx2:=ALLa3END IF END PROCq4;PROCs4:x2:=emptythesaurus;k1END PROCs4;PROCx4:INT VARw1;FORw1FROM1UPTOanzahldateienREP IFz4(w1)THENs5END IF END REP.s5:IFt5THENdisablestop;u5;save(eudasdateiname(w1),a3);v5;enablestop;forget(eudasdateiname(w1),quiet)ELSEfree(eudasdateiname(w1),a3)END IF;w5(w1,FALSE).t5:exists(eudasdateiname(w1)).END PROCx4;PROCx5:IFz4(anzahldateien)ANDaendernerlaubtTHENforget(eudasdateiname(anzahldateien),quiet)END IF END PROCx5;PROCr5(TEXT CONSTc2):BOOL VARy5;z5;oeffne(c2,y5);x5.z5:IFa6ANDy2THENb6(c2);EUDAT VARm5;oeffne(m5,c2);feldstruktur(m5);y5
+:=TRUE ELSEy5:=y2CANDja(q3,"JA/oeffne");c6(c2,y5)END IF.a6:NOTexists(c2)AND NOT(x2CONTAINSc2).END PROCr5;PROCr4(TEXT CONSTc2):c6(c2,aendernerlaubt);kette(c2);x5END PROCr4;PROCt4(TEXT CONSTc2):c6(c2,aendernerlaubt);kopple(c2);x5END PROCt4;PROCc6(TEXT CONSTc2,BOOL CONSTd6):BOOL VARe6:=FALSE;IFz2THENf6END IF;w5(anzahldateien+1,e6).f6:IF(x2CONTAINSc2)CAND(NOTexists(c2)CORg6)THEN IFd6THENlock(c2,a3)END IF;forget(c2,quiet);fetch(c2,a3);e6:=TRUE END IF.g6:ja(textdarstellung(c2)+h6,"JA/fetch").END PROCc6;PROCw5(INT CONSTi6,BOOL CONSTe6):WHILElength(c3)<i6REPc3CATe0END REP;replace(c3,i6,j6).j6:IFe6THEN"-"ELSEe0END IF.END PROCw5;BOOL PROCz4(INT CONSTi6):IFlength(c3)<i6THEN FALSE ELSE(c3SUBi6)<>e0END IF END PROCz4;PROCb5:notizenlesen(3,q0);DATASPACE VARk6:=nilspace;FILE VARf:=sequentialfile(output,k6);disablestop;headline(f,n3);l6(f,q0,m0,"EDIT/Notizen");forget(k6);enablestop;IFaendernerlaubtTHENnotizenaendern(3,q0)END IF END PROCb5;PROCl6(FILE VARf,TEXT VARm6,FENSTER CONSTn6,TEXT CONSTo6):LETp6=
+"#-#";enablestop;q6;r6;s6.q6:INT VARt6:=1,u6;REPu6:=pos(m6,p6,t6);IFu6=0THENputline(f,subtext(m6,t6))ELSEputline(f,subtext(m6,t6,u6-1))END IF;t6:=u6+3UNTILu6=0ORt6>length(m6)END REP.r6:modify(f);edit(f,n6,o6,TRUE).s6:TEXT VARv6;m6:=d0;input(f);WHILE NOTeof(f)REPgetline(f,v6);w6;m6CATv6;m6CATp6END REP.w6:IF(v6SUBlength(v6))=e0THENv6:=subtext(v6,1,length(v6)-1)END IF.END PROCl6;PROCfeldstruktur(EUDAT VARm5):SATZ VARx6;feldnamenlesen(m5,x6);IFy6THENz6END IF;IFja(t3,"JA/Feldaendern")THENa7END IF.y6:IFfelderzahl(x6)>0THENja(u3,"JA/feldnamen")ELSE TRUE END IF.z6:DATASPACE VARk6:=nilspace;FILE VARf:=sequentialfile(output,k6);disablestop;b7(f,x6);forget(k6);enablestop;feldnamenaendern(m5,x6).a7:c7;auswahlanbieten("EUDAS-Felder",o0,"AUSWAHL/Felder",PROC(TEXT VAR,INT CONST)d7);INT VARe7:=1;WHILEwahl(e7)>0REPf7;e7INCR1END REP;feldnamenaendern(m5,x6).c7:satzinitialisieren(g7);FORe7FROM1UPTOfelderzahl(x6)REPfeldlesen(x6,e7,q0);feldaendern(g7,e7,h7+textdarstellung(q0))END REP.h7:"("+i7(feldinfo(m5,
+e7))+") ".f7:TEXT VARj7;feldlesen(x6,wahl(e7),j7);editget(v3,j7,"","GET/feldname");feldaendern(x6,wahl(e7),j7);TEXT VARk7:=i7(feldinfo(m5,wahl(e7)));REPeditget(w3,k7,"","GET/feldtyp")UNTILl7(k7)>=-1END REP;feldinfo(m5,wahl(e7),l7(k7)).END PROCfeldstruktur;PROCc5:enablestop;DATASPACE VARk6:=nilspace;FILE VARf:=sequentialfile(output,k6);headline(f,s3);notizenlesen(1,q0);disablestop;l6(f,q0,m0,"EDIT/Pruefbed");forget(k6);enablestop;IFaendernerlaubtTHENnotizenaendern(1,q0)END IF.END PROCc5;PROCb7(FILE VARf,SATZ VARx6):enablestop;m7;n7.m7:modify(f);headline(f,x3);edit(f,o0,"EDIT/Feldnamen",TRUE).n7:INT VARe7:=felderzahl(x6);input(f);WHILE NOTeof(f)REPgetline(f,q0);w6;e7INCR1;feldaendern(x6,e7,q0)END REP.w6:IF(q0SUBlength(q0))=e0THENq0:=subtext(q0,1,length(q0)-1)END IF.END PROCb7;TEXT PROCi7(INT CONSTk7):SELECTk7+1OF CASE0:y3CASE1:z3CASE2:a4CASE3:b4OTHERWISEd0END SELECT END PROCi7;INT PROCl7(TEXT CONSTo7):IFo7=y3THEN-1ELIFo7=z3THEN0ELIFo7=a4THEN1ELIFo7=b4THEN2ELSE-2END IF END PROCl7;PROCo4:
+INT VARp7,q7;storage(p7,q7);IFq7>p7THENneuerdialog;dialog;out(d4)END IF END PROCo4;BOOL VARr7,s7:=FALSE,t7:=FALSE;LETu7=#1044
+#"SATZ AENDERN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?",v7=#1045
+#"SATZ EINFUEGEN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?",w7=#1046
+#"SUCHMUSTER EINGEBEN: Abbruch: ESC h Beenden: ESC q Hilfe: ESC ?",x7=#1047
+#"Umschalten auf Koppeldatei ",y7=#1048
+#"Koppelfelder uebernehmen",z7=#1049
+#"Ungueltige Satznummer",a8=#1050
+#"Neue Satznummer:",b8=#1051
+#" Bitte warten.. ",c8=#1052
+#"wzK",d8=#1053
+#"wz";LETe8=""6""23""0" :",f8=""6""23""0" :"5"";PROCj2(INT CONSTg2):SELECTg2OF CASE0:g8CASE1:h8CASE2:i8CASE3:j8CASE4:k8CASE5:l8CASE6:m8CASE7:n8CASE8:o8CASE9:p8CASE10:q8CASE11:r8CASE12:s8CASE13:t8CASE14:u8CASE15:v8CASE16:w8OTHERWISEx8END SELECT;o4.g8:exitzeichen(d8).h8:p5;weiter(2);bildausgeben(FALSE).i8:p5;zurueck(2);bildausgeben(FALSE).k8:suchen;bildausgeben(TRUE).l8:suchbedingungloeschen;bildausgeben(FALSE).j8:TEXT VARy8:=d0;z8;editget(a8,y8,"","GET/auf satz");INT CONSTa9:=int(y8);IFy8=d0THENbildausgeben(FALSE)ELIFlastconversionokTHENaufsatz(a9);bildausgeben(FALSE)ELSEerrorstop(z7)END IF.n8:einfuegen;bildausgeben(TRUE).o8:aendern;bildausgeben(TRUE).m8:markierungaendern;bildausgeben(FALSE).p8:b9;z8;dateinamenanfordern(c9);einzelausfuehrung(PROC(TEXT CONST)d9,c0);bildausgeben(TRUE).q8:b9;z8;dateinamenanfordern(e9);einzelausfuehrung(PROC(TEXT CONST)holesatz,c0);bildausgeben(TRUE).r8:TEXT VARf9;z8;g9(f9);IFf9<>d0THENfeldauswahl(f9)END IF;bildausgeben(TRUE).s8:h9
+;rollen(-23);IFanzahldateien>0THENbildausgeben(FALSE)END IF.t8:h9;rollen(23);IFanzahldateien>0THENbildausgeben(FALSE)END IF.u8:h9;rollen(-9999);IFanzahldateien>0THENbildausgeben(FALSE)END IF.v8:h9;rollen(9999);IFanzahldateien>0THENbildausgeben(FALSE)END IF.w8:IFaufkoppeldateiTHENi9ELSEj9END IF;IFanzahldateien>0THENbildausgeben(TRUE)END IF.i9:IF(t7ORs7)THENk9;l9ELSEaufkoppeldatei(0)END IF;o2.k9:z8;IF NOTdateiendeCANDja(y7,"JA/uebernehmen")THENaufkoppeldatei(1)ELSEaufkoppeldatei(0)END IF.l9:s7:=FALSE;IFt7THENt7:=FALSE;aendernELSEm9(TRUE)END IF.x8:IFg2=-2THEN IFanzahldateien>0THENn9;bildausgeben(FALSE)ELSEz8END IF ELSEdialogfensterloeschen;fensterveraendert(p0)END IF.n9:out(e8).z8:out(f8).END PROCj2;PROCsuchen:disablestop;exitzeichen("");statusanzeigen(w7);suchen(PROCo9);exitzeichen(d8)END PROCsuchen;PROCo9:hilfeanbieten("EDIT/Suchen",o0)END PROCo9;PROCp5:statusanzeigen(b8)END PROCp5;PROCeinfuegen:m9(FALSE)END PROCeinfuegen;PROCm9(BOOL CONSTp9):BOOL VARq9:=p9;r9;REPstatusanzeigen(v7);IFq9
+THENaendern(PROCs9);q9:=FALSE ELSEeinfuegen(PROCs9)END IF;t9;u9END REP.u9:SELECTpos(c8,exitdurch)OF CASE0:IFr7THENsatzloeschenENDIF;LEAVEm9CASE1:IFr7THENsatzloeschenELSEp5;weiter(2)END IF CASE2:IFr7THENsatzloeschenELSEp5;zurueck(2)END IF CASE3:j9;IFaufkoppeldateiTHENs7:=TRUE;LEAVEm9END IF;q9:=TRUE END SELECT.END PROCm9;PROCs9:hilfeanbieten("EDIT/Einfuegen",o0)END PROCs9;PROCr9:IFanzahlkoppeldateien>0AND NOTaufkoppeldateiTHENexitzeichen(c8)ELSEexitzeichen(d8)END IF END PROCr9;PROCaendern:r9;kommandoauftastelegen("F","prueffehler editieren");REPstatusanzeigen(u7);aendern(PROCv9);t9;w9END REP.w9:SELECTpos(c8,exitdurch)OF CASE0:IFr7THENsatzloeschenENDIF;LEAVEaendernCASE1:IFr7THENsatzloeschenELSEp5;weiter(2)END IF CASE2:IFr7THENsatzloeschenELSEp5;zurueck(2)END IF CASE3:j9;IFaufkoppeldateiTHENt7:=TRUE;LEAVEaendernEND IF END SELECT.END PROCaendern;PROCv9:hilfeanbieten("EDIT/Aendern",o0)END PROCv9;PROCprueffehlereditieren:IFl0=dateiversionTHENmodify(i0);edit(i0)END IF END
+PROCprueffehlereditieren;PROCj9:INT VARw1:=folgedatei(0);WHILEw1>0REPout( f8);IFx9THENaufkoppeldatei(w1);o2;LEAVEj9END IF;w1:=folgedatei(w1)END REP.x9:ja(x7+textdarstellung(eudasdateiname(w1)),"JA/umschalten").END PROCj9;PROCy9(TEXT CONSTv6,INT CONSTz9):outsubtext(v6,a10);out(h0).a10:pos(v6,e0,6)+1+z9-z9.END PROCy9;PROCt9:feldbearbeiten(1,PROC(TEXT CONST,INT CONST,INT CONST)b10)END PROCt9;PROCb10(TEXT CONSTx6,INT CONSTt6,u6):r7:=t6<3ORt6>length(x6)+u6-u6END PROCb10;PROCh9:cursor(15,24)END PROCh9;PROCd9(TEXT CONSTc2):IFexists(c2)THENc10ELSEb6(c2)END IF;p5;tragesatz(c2).c10:IFd10(c2)<>0THENerrorstop(e10)END IF.END PROCd9;PROCg9(TEXT VARf9):auswahlanbieten("EUDAS-Anzeigefelder",o0,"AUSWAHL/Anzeigefelder",PROC(TEXT VAR,INT CONST)f10);f9:=d0;INT VARy8:=1;WHILEwahl(y8)>0REPf9CATcode(wahl(y8));y8INCR1END REP END PROCg9;LETr8=#1054
+#"Angezeigte Felder auswaehlen",g10=#1055
+#" aufsteigend sortieren";DATASPACE VARh10;PROCk2(INT CONSTg2):SELECTg2OF CASE1:i10CASE2:j10CASE3:k10CASE4:l10CASE5:m10CASE6:n10OTHERWISEn4END SELECT;o4.j10:b9;dateinamenanfordern(c9);einzelausfuehrung(PROC(TEXT CONST)o10,c0).i10:b9;dateinamenanfordern(c9);einzelausfuehrung(PROC(TEXT CONST)p10,c0);dialogfensterloeschen;t2("","").k10:dateinamenanfordern(q10);ausfuehrung(PROC(TEXT CONST)r10,b0);dialogfensterloeschen;t2("","").l10:TEXT VARs10;r1(s10);uebersicht(s10,PROCt1);dialogfensterloeschen;t2("","").m10:zugriff(PROC(EUDAT VAR)t10).n10:markierungenloeschen;dialog;out(r3).n4:IFg2=-1THENdialogfensterloeschen;fensterveraendert(p0)ELIFg2=-2THENt2("","")END IF.END PROCk2;PROCb9:IFd10(std)<>0THENlastparam(d0)END IF END PROCb9;PROCo10(TEXT CONSTc2):BOOL VARu10;IFexists(c2)THENc10;v10ELSEb6(c2);u10:=FALSE END IF;BOOL CONSTw10:=ja(x10,"JA/sortieren");p5;y10;trage(c2,i0,u10);z10;IFw10THEN EUDAT VARm5;oeffne(m5,c2);sortiere(m5)END IF.c10:IFd10(c2)<>0THENerrorstop(e10)END IF.v10:u10:=ja(a11,
+"JA/testen").y10:IFu10THENforget(j0);j0:=nilspace;i0:=sequentialfile(output,j0);l0:=dateiversionELSEforget(j0);l0:=dateiversion-1END IF.z10:IFu10CANDlines(i0)>0THENdialog;put(lines(i0));put(b11)END IF.END PROCo10;PROCr10(TEXT CONSTc2):IF NOTexists(c2)THENc11(c2,"EDIT/Verarbeite")END IF;d2;FILE VARf:=sequentialfile(input,c2);disablestop;verarbeite(f);e2.END PROCr10;PROCr1(TEXT VARs10):s10:=d0;IFja(r8,"JA/Ub.Felder")THENg9(s10)END IF END PROCr1;PROCt1:hilfeanbieten("UEBERSICHT",m0)END PROCt1;PROCp10(TEXT CONSTc2):disablestop;h10:=nilspace;d11(c2);forget(h10)END PROCp10;PROCd11(TEXT CONSTc2):TEXT VARe11:="";FILE VARf;EUDAT VARm5;BOOL VARw10:=FALSE;enablestop;IFexists(c2)THENf11ELSEb6(c2)END IF;editget(g11,e11,"","GET/kopiermuster");IFexists(e11)THENf:=sequentialfile(input,e11)ELSEh11;stdkopiermuster(c2,f)END IF;modify(f);i11;j11.f11:IFd10(c2)<>0THENerrorstop(e10)END IF;oeffne(m5,c2);IFsortierreihenfolge(m5)<>d0THENw10:=ja(x10,"JA/sortieren")END IF.h11:IFe11=d0THENf:=sequentialfile(output,
+h10)ELSEb6(e11);f:=sequentialfile(output,e11)END IF.i11:edit(f,m0,"EDIT/Kopiermuster",TRUE);d2;kopiere(c2,f).j11:IFw10THENoeffne(m5,c2);sortiere(m5)END IF.END PROCd11;INT PROCd10(TEXT CONSTc2):INT VARw1;FORw1FROM1UPTOanzahldateienREP IFeudasdateiname(w1)=c2THEN LEAVEd10WITHw1END IF END REP;0END PROCd10;PROCc11(TEXT CONSTc2,k11):IF NOTexists(c2)THENb6(c2)END IF;FILE VARf:=sequentialfile(modify,c2);edit(f,m0,k11,TRUE)END PROCc11;PROCd2:p5;cursor(1,2);out(g0);bildschirmneuEND PROCd2;PROCt10(EUDAT VARm5):TEXT VARl11:=sortierreihenfolge(m5);IFl11=d0CORm11THENn11;p5;sortiere(m5,l11)ELSEp5;sortiere(m5)END IF.m11:ja(c4,"JA/Sortierfelder").n11:feldnamenlesen(m5,g7);auswahlanbieten("EUDAS-Sortierfelder",o0,"AUSWAHL/Sortierfelder",PROC(TEXT VAR,INT CONST)d7);INT VARe7:=1;l11:=d0;WHILEwahl(e7)<>0REPl11CATcode(wahl(e7));o11;e7INCR1END REP.o11:feldlesen(g7,wahl(e7),q0);IFja(textdarstellung(q0)+g10,"JA/Sortierrichtung")THENl11CAT"+"ELSEl11CAT"-"END IF.END PROCt10;PROCf10(TEXT VARname,INT CONSTy8):IF
+y8<=anzahlfelderTHENfeldnamenlesen(y8,name)ELSEname:=d0END IF END PROCf10;LETp11=#1056
+#"Ausgabe automatisch zum Drucker",q11=#1057
+#"Ausgabe in bestimmte Datei",r11=#1058
+#"Name Ausgabedatei:",x10=#1059
+#"Zieldatei anschliessend sortieren",a11=#1060
+#"Pruefbedingungen testen",b11=#1061
+#"Prueffehler festgestellt",e10=#1062
+#"Zieldatei darf nicht geoeffnet sein",g11=#1063
+#"Name Kopiermuster (RET=Std):";LETs11=#1093
+#" zeilenweise formatieren",t11=#1094
+#" seitenweise formatieren";BOOL VARu11:=FALSE,v11:=FALSE;PROCl2(INT CONSTg2):SELECTg2OF CASE1:w11CASE2:x11CASE3:y11CASE4:z11CASE5:a12OTHERWISEn4END SELECT;o4.w11:dateinamenanfordern(y1);ausfuehrung(PROC(TEXT CONST)b12,b0);dialogfensterloeschen;t2("","").x11:direktdrucken(ja(p11,"JA/direkt drucken"));IF NOTdirektdruckenCANDja(q11,"JA/Druckdatei")THEN TEXT VARc2:=d0;editget(r11,c2,"","GET/Druckdatei");IFc2<>d0THENdruckdatei(c2)END IF END IF.y11:ausfuehrung(PROC(TEXT CONST)c12,b0);dialogfensterloeschen;t2("","").z11:ausfuehrung(PROC(TEXT CONST)print,b0).a12:ausfuehrung(PROC(TEXT CONST)d12,b0);dialogfensterloeschen;t2("","").n4:IFg2=-1THENdialogfensterloeschen;fensterveraendert(p0)ELIFg2=-2THENt2("","")END IF.END PROCl2;PROCe2:IFe12THENclearerrorEND IF.e12:iserrorCANDerrormessage=d0.END PROCe2;PROCb12(TEXT CONSTc2):IF NOTexists(c2)THENc12(c2)END IF;d2;disablestop;drucke(c2);e2END PROCb12;PROCc12(TEXT CONSTc2):c11(c2,"EDIT/Druckmuster")END PROCc12;PROCprint(TEXT CONSTc2):do("print ("+
+textdarstellung(c2)+")")END PROCprint;PROCd12(TEXT CONSTc2):IFja(textdarstellung(c2)+s11,"JA/zeilenform")THENf12END IF;IFja(textdarstellung(c2)+t11,"JA/seitenform")THENseitenformatierenEND IF.f12:IFu11THENautoform(c2)ELSElineform(c2)END IF;page;bildschirmneu.seitenformatieren:IFv11THENautopageform(c2)ELSEpageform(c2)END IF;bildschirmneu.END PROCd12;PROCg12(BOOL CONSTh12,i12):u11:=h12;v11:=i12END PROCg12;TEXT VARj12;LETk12=#1064
+#" Task: ",l12=#1065
+#"Neuer Name:",m12=#1066
+#"Zieldatei:",n12=#1067
+#" belegt ",o12=#1068
+#"KB.",p12=#1069
+#" existiert nicht.",q12=#1070
+#" in dieser Task loeschen",r12=#1071
+#" neu einrichten";PROCdateiverwaltung(INT CONSTg2):enablestop;SELECTg2OF CASE0:s12CASE1:t12CASE2:u12CASE3:v12CASE4:w12CASE5:x12CASE6:y12OTHERWISEn4END SELECT;o4.s12:j12:=name(myself).y12:ausfuehrung(PROC(TEXT CONST)z12,0).v12:ausfuehrung(PROC(TEXT CONST)a13,0).u12:ausfuehrung(PROC(TEXT CONST)a5,0).t12:disablestop;DATASPACE VARb13:=nilspace;FILE VARf:=sequentialfile(output,b13);list(f);IF NOTiserrorTHENedit(f,o0,"SHOW/Uebersicht",FALSE)END IF;forget(b13);enablestop;c13.w12:ausfuehrung(PROC(TEXT CONST)d13,0).x12:ausfuehrung(PROC(TEXT CONST)e13,0).n4:IFg2=-1THENdialogfensterloeschen;fensterveraendert(p0)ELIFg2=-2THENt2(k12,j12)END IF.END PROCdateiverwaltung;PROCc13:WHILEgetcharety<>d0REP END REP END PROCc13;PROCz12(TEXT CONSTc2):IFtype(old(c2))=c0THENreorganisiere(c2)ELSEreorganize(c2)END IF END PROCz12;PROCa13(TEXT CONSTc2):TEXT VARf13:=c2;IFexists(c2)THENeditget(l12,f13,"","GET/rename")END IF;rename(c2,f13)END PROCa13;PROCa5(TEXT CONSTc2):IFg13THENerrorstop(e10)ELIFexists(c2)CANDh13
+THENforget(c2,quiet)END IF.g13:d10(c2)<>0.h13:ja(textdarstellung(c2)+q12,"JA/forget").END PROCa5;PROCd13(TEXT CONSTc2):TEXT VARi13:=d0;editget(m12,i13,"","GET/copy");copy(c2,i13)END PROCd13;PROCe13(TEXT CONSTc2):dialog;out(textdarstellung(c2));IFexists(c2)THENout(n12);put(dspages(old(c2))DIV2);out(o12)ELSEout(p12)END IF END PROCe13;TEXT VARj13:=d0,k13:="ARCHIVE";INT VARl13:=0;THESAURUS VARm13;BOOL VARn13,p2:=TRUE,o13;LETp13=#1072
+#" Ziel: ",q13=#1073
+#"Archiv heisst ",r13=#1074
+#"Name des Archivs:",s13=#1075
+#"Name Zielarchiv:",t13=#1076
+#"Nr. der Zielstation (od. RETURN):",u13=#1077
+#"Ist das Zielarchiv ein Archivmanager",v13=#1078
+#"Archivdiskette vorher formatieren",w13=#1079
+#"Neuer Archivname:",h6=#1080
+#" im System ueberschreiben",x13=#1081
+#" auf Archiv loeschen",y13=#1082
+#"Archiv ",z13=#1083
+#" ueberschreiben",a14=#1084
+#"Archiv initialisieren",b14=#1085
+#" auf Archiv ueberschreiben";LETc14=#1095
+#"Passwort: ",d14=#1096
+#"Passwort stimmt nicht mit der ersten Eingabe überein",e14=#1097
+#"Passwort zur Kontrolle bitte nochmal eingeben.",f14=#1098
+#"Passwort loeschen",g14=#1099
+#"Unzlaessige Stationsnummer",h14=#1100
+#"Angegebene Task ist kein Manager";PROCarchivverwaltung(INT CONSTg2):enablestop;SELECTg2OF CASE0:i14CASE1:j14CASE2:k14CASE3:l14CASE4:m14CASE5:n14CASE6:o14CASE7:p14CASE8:q14CASE9:r14OTHERWISEs14END SELECT;o4.i14:n13:=FALSE.m14:IFp2THENt14END IF;p5;m13:=ALLu14;ausfuehrung(PROC(TEXT CONST)v14,0).l14:disablestop;w14;p5;m13:=ALLu14;IFx14THENm13:=ALLu14END IF;enablestop;y14(PROC(TEXT CONST)z14).n14:IFp2THENt14END IF;p5;m13:=ALLu14;y14(PROC(TEXT CONST)n14).j14:w14;disablestop;p5;DATASPACE VARb13:=nilspace;f:=sequentialfile(output,b13);list(f,u14);IFx14THENlist(f,u14)END IF;IF NOTiserrorTHENmodify(f);toline(f,1);writerecord(f,headline(f));headline(f,d0);edit(f,o0,"SHOW/Uebersicht",FALSE)END IF;forget(b13);c13;enablestop.k14:w14;a15;FILE VARf:=sequentialfile(output,b15);disablestop;p5;list(f,u14);IFx14THENlist(f,u14)END IF;enablestop;modify(f);insertrecord(f);writerecord(f,headline(f));print(b15);forget(b15,quiet).a15:INT VARs2:=0;TEXT VARb15;REPs2INCR1;b15:="Archivliste "+text(s2)UNTIL NOT
+exists(b15)END REP.o14:w14;IFja(v13,"JA/format")THENc15ELIFd15THEN IFe15THEN LEAVEo14END IF ELSE IFf15THEN LEAVEo14END IF END IF;j5;g15.c15:p5;disablestop;u5;format(u14);v5;enablestop.d15:reserve("",u14);p5;disablestop;m13:=ALLu14;BOOL CONSTh15:=x14;clearerror;enablestop;h15.e15:NOTja(y13+textdarstellung(j13)+z13,"JA/archiv loeschen").f15:NOTja(a14,"JA/archiv init").j5:editget(w13,j13,"","GET/Archivname");reserve(j13,u14).g15:p5;disablestop;u5;clear(u14);v5.p14:TEXT VARi15:=k13;IFn13THENrelease(u14);n13:=FALSE END IF;editget(s13,i15,"","GET/Zielarchiv");IFi15=d0THEN LEAVEp14END IF;j15;p2:=ja(u13,"JA/Zielmanager");k15;waehlbar(6,6,p2);waehlbar(6,9,NOTp2);bildschirmneu;t2(p13,l15+k13).j15:TEXT VARm15:=text(station(myself));IFstation(myself)<>0THENeditget(t13,m15,"","GET/Zielstation")END IF.k15:l13:=int(m15);IF NOTlastconversionokTHENerrorstop(g14)END IF;k13:=i15;n15(u14).l15:IFl13=0THENd0ELSEtext(l13)+"/"END IF.r14:TEXT VARo15:=d0;editget(r13,o15,"","GET/Archivname");reserve(o15,u14);n13
+:=TRUE.s14:IFg2=-1THEN IFn13THENrelease(u14)END IF;dialogfensterloeschen;fensterveraendert(p0)ELIFg2=-2THENt2(p13,l15+k13)END IF.END PROCarchivverwaltung;TASK PROCu14:IFl13=0THENtask(k13)ELSEl13/k13END IF END PROCu14;PROCn15(TASK CONSTo7):INT VARs2;IFstation(o7)=station(myself)THEN FORs2FROM1UPTO5REP IFstatus(o7)=2ORstatus(o7)=6THEN LEAVEn15END IF;pause(10)END REP;errorstop(h14)END IF END PROCn15;PROCt14:TEXT VARw13:=j13;editget(r13,w13,"","GET/Archivname");IF NOTn13ORw13<>j13THENreserve(w13,u14);n13:=TRUE END IF;j13:=w13END PROCt14;PROCw14:IF NOTn13ANDp2THENreserve(j13,u14);n13:=TRUE END IF END PROCw14;BOOL PROCx14:IFp2ANDiserrorTHEN TEXT CONSTp15:=errormessage;IFsubtext(p15,1,14)=q13CANDsubtext(p15,16,20)<>"?????"THENclearerror;q15;LEAVEx14WITH TRUE END IF END IF;FALSE.q15:j13:=subtext(p15,16,length(p15)-1);reserve(j13,u14).END PROCx14;PROCv14(TEXT CONSTc2):disablestop;IF NOT(m13CONTAINSc2)CORr15THENs15;p5;u5;save(c2,u14);v5END IF.r15:ja(textdarstellung(c2)+b14,"JA/save").s15:INT
+CONSTy8:=d10(c2);IFy8>0CANDaendernerlaubtCANDinhaltveraendert(y8)THENeinzelsicherung(y8)END IF.END PROCv14;PROCz14(TEXT CONSTc2):disablestop;IF NOTexists(c2)CORg6THENp5;u5;fetch(c2,u14);v5END IF.g6:ja(textdarstellung(c2)+h6,"JA/fetch").END PROCz14;PROCn14(TEXT CONSTc2):disablestop;IF NOT(m13CONTAINSc2)CORn14THENp5;u5;erase(c2,u14);v5END IF.n14:ja(textdarstellung(c2)+x13,"JA/erase").END PROCn14;PROCu5:o13:=commanddialogue;commanddialogue(FALSE)END PROCu5;PROCv5:commanddialogue(o13)END PROCv5;PROCy14(PROC(TEXT CONST)t15):TEXT VARc2:=d0;editget(u15,c2,"z","GET/Dateiname");IFc2=f0THENv15ELSElastparam(c2);t15(c2)END IF.v15:w15(m13,0);auswahlanbieten("EUDAS-Archivauswahl",o0,"AUSWAHL/Archiv",PROC(TEXT VAR,INT CONST)x15);y15(PROC(TEXT CONST)t15).END PROCy14;PROCq14:BOUND ROW2TEXT VARz15;DATASPACE VARk6:=nilspace;z15:=k6;disablestop;a16(z15(1));IFz15(1)=d0THENb16ELSEc16END IF;forget(k6).b16:IFja(f14,"JA/pw loeschen")THENdialog;dialog;enterpassword(d0)END IF.c16:dialog;out(e14);a16(z15(2));IF
+z15(1)<>z15(2)THENerrorstop(d14)ELSEdialog;dialog;enterpassword(z15(1))END IF.END PROCq14;PROCa16(TEXT VARd16):enablestop;dialog;out(c14);getsecretline(d16)END PROCa16;SATZ VARg7;LETu15=#1086
+#"Name der Datei:",c9=#1087
+#"Name der Zieldatei:",q10=#1088
+#"Name der Verarbeitungsvorschrift:",y1=#1089
+#"Name des Druckmusters:",e9=#1090
+#"Name der Quelldatei:";LETe16=#1101
+#"Keine Datei zur Auswahl vorhanden.";TEXT VARf16:=u15,g16;PROCw15(THESAURUS CONSTo7,INT CONSTk7):i16;h16;j16;k16.h16:g16:=d0;INT VARs2;FORs2FROM1UPTOanzahldateienREP INT CONSTl16:=feldindex(g7,eudasdateiname(s2));IFl16>0THENg16CATcode(l16)END IF END REP.i16:INT VARm16:=1,t6:=0;satzinitialisieren(g7);REPget(o7,q0,t6);IFq0=d0THEN LEAVEi16ELIFk7=0CORtype(old(q0))=k7THENfeldaendern(g7,m16,q0);m16INCR1END IF END REP.j16:t6:=0;REPget(x2,q0,t6);IFq0=d0THEN LEAVEj16ELIF NOT(o7CONTAINSq0)THENfeldaendern(g7,m16,q0);m16INCR1END IF END REP.k16:IFm16=1THENdialog;out(e16);errorstop(d0)END IF.END PROCw15;PROCx15(TEXT VARv2,INT CONSTm16):IFm16<256THENfeldlesen(g7,m16,v2);IFpos(g16,code(m16))>0THENv2:="<!> "+textdarstellung(v2)ELIFv2<>d0THENv2:=textdarstellung(v2)END IF ELSEv2:=d0END IF END PROCx15;PROCy15(PROC(TEXT CONST)t15):INT VARm16:=1;REP IFwahl(m16)=0THEN LEAVEy15ELSEfeldlesen(g7,wahl(m16),q0);dialog;out(text(m16,3));out(". ");out(textdarstellung(q0));lastparam(q0);t15(q0)END IF;m16INCR1END REP END
+PROCy15;PROCausfuehrung(PROC(TEXT CONST)t15,INT CONSTk7):enablestop;TEXT VARc2;dateinamenanfordern(c2,k7);IFc2=f0THENy15(PROC(TEXT CONST)t15)ELSElastparam(c2);t15(c2)END IF END PROCausfuehrung;PROCeinzelausfuehrung(PROC(TEXT CONST)t15,INT CONSTk7):enablestop;TEXT VARc2;dateinamenanfordern(c2,k7);IFc2=f0THEN IFwahl(1)=0THENerrorstop(d0)ELSEfeldlesen(g7,wahl(1),c2)END IF END IF;lastparam(c2);t15(c2)END PROCeinzelausfuehrung;PROCdateinamenanfordern(TEXT CONSTu2):f16:=u2END PROCdateinamenanfordern;PROCdateinamenanfordern(TEXT VARc2,INT CONSTk7):IFexists(std)AND(k7=0CORtype(old(std))=k7)THENc2:=stdELSEc2:=d0END IF;disablestop;editget(f16,c2,"z","GET/Dateiname");f16:=u15;enablestop;IFc2=d0THENerrorstop(d0)ELIFc2=f0THENw15(all,k7);auswahlanbieten("EUDAS-Dateiauswahl",o0,"AUSWAHL/Datei",PROC(TEXT VAR,INT CONST)x15);p5END IF END PROCdateinamenanfordern;PROCd7(TEXT VARv2,INT CONSTm16):IFm16<=256THENfeldlesen(g7,m16,v2)ELSEv2:=d0END IF END PROCd7;PROCb6(TEXT CONSTc2):IF NOTja(textdarstellung(c2)+
+r12,"JA/einrichten")THENerrorstop(d0)END IF END PROCb6;LETn16=#1091
+#"EDITIEREN: Abbruch: ESC h Verlassen: ESC q Hilfe: ESC ?",o16=#1092
+#"ZEIGEN: Blättern: HOP OBEN, HOP UNTEN Ende: ESC q Hilfe: ESC ?";INT VARp16;BOOL VARq16,r16;PROCedit(FILE VARf,FENSTER CONSTfenster,TEXT CONSTk11,BOOL CONSTaendern):INT VARs16,t16,u16,v16;fenstergroesse(fenster,s16,t16,u16,v16);fensterveraendert(fenster);enablestop;w16;q16:=aendern;REPx16;openeditor(groesstereditor+1,f,aendern,s16,t16,u16,v16);edit(groesstereditor,"eqvw19dpgn"9"?hF",PROC(TEXT CONST)y16);z16END REP.w16:IFaendernANDt16<3ANDv16>22ANDs16<14ANDu16>75THENr16:=TRUE ELSEr16:=FALSE END IF.z16:SELECTp16OF CASE0:LEAVEeditCASE1:hilfeanbieten(k11,fenster)CASE2:errorstop(d0)END SELECT.END PROCedit;PROCx16:IFq16THENstatusanzeigen(n16)ELSEstatusanzeigen(o16)END IF END PROCx16;PROCy16(TEXT CONSTa17):p16:=pos("?h",a17);IFp16>0THENquitELIFr16CANDa17="F"THENb17;x16ELSEstdkommandointerpreter(a17);x16;bildschirmneuEND IF END PROCy16;PROCb17:IFanzahlfelder>0THENc17;d17;e17END IF.c17:INT VARe7;satzinitialisieren(g7,anzahlfelder);FORe7FROM1UPTOanzahlfelderREPfeldnamenlesen(e7,q0);
+feldaendern(g7,e7,q0)END REP.d17:auswahlanbieten("EUDAS-Editfelder",o0,"AUSWAHL/Feldnamen",PROC(TEXT VAR,INT CONST)d7).e17:INT VARm16:=1;WHILEwahl(m16)>0REP IFm16>1THENpush(e0)END IF;feldnamenlesen(wahl(m16),q0);push("""");push(q0);push("""");m16INCR1END REP.END PROCb17;END PACKETeudassteuerung;
+
diff --git a/app/eudas/4.3/src/eudas.generator b/app/eudas/4.3/src/eudas.generator
new file mode 100644
index 0000000..96269e9
--- /dev/null
+++ b/app/eudas/4.3/src/eudas.generator
@@ -0,0 +1,86 @@
+INT VAR size, used;
+BOOL VAR einzeln,sparen;
+IF (pcb (9) AND 255) = 1 THEN
+ errorstop ("Nicht für Single-User-Systeme geeignet")
+END IF;
+storage (size, used);
+einzeln := size - used < 500;
+soehne loeschen;
+forget ("eudas.generator", quiet);
+page;
+putline ("EUDAS - automatische Generierung");
+putline ("Version 4.3 vom 31.07.87");
+line;
+sparen := no ("Ausfuehrliche Hilfstexte installieren");
+line;
+disable stop;
+do ("TEXT VARt:=additionalcommands");
+IF is error THEN
+ clear error;
+ enable stop;
+ gen ("dummy.text")
+END IF;
+enable stop;
+IF id (0) < 175 THEN
+ gen ("pos.173")
+END IF;
+IF NOT einzeln THEN
+ holen ("eudas.1");
+ holen ("eudas.2");
+ holen ("eudas.3");
+ holen ("eudas.4");
+ holen ("eudas.init");
+ release (archive)
+END IF;
+check off;
+gen ("eudas.1");
+gen ("eudas.2");
+gen ("eudas.3");
+gen ("eudas.4");
+IF anything noted THEN
+ push (""27"q"); note edit; pause (100)
+END IF;
+holen ("eudas.init");
+IF einzeln THEN
+ release (archive)
+END IF;
+IF sparen THEN do ("menue loeschen (TRUE)") END IF;
+do("menuedaten einlesen (""eudas.init"")");
+forget ("eudas.init", quiet);
+check on;
+do ("global manager");
+
+PROC vom archiv (TEXT CONST datei):
+ out (""""); out (datei); putline (""" wird geholt.");
+ fetch (datei, archive)
+END PROC vom archiv;
+
+PROC holen (TEXT CONST datei) :
+ IF NOT exists (datei) THEN vom archiv (datei) END IF
+END PROC holen;
+
+PROC gen (TEXT CONST datei) :
+ holen (datei);
+ out (""""); out (datei); out (""" wird uebersetzt: ");
+ insert (datei);
+ forget (datei, quiet)
+END PROC gen;
+
+PROC soehne loeschen :
+
+ command dialogue (TRUE);
+ access catalogue;
+ TASK VAR sohn := son (myself);
+ WHILE NOT is niltask (sohn) REP
+ TASK CONST naechster := brother (sohn);
+ IF yes ("Sohntask """ + name (sohn) + """ loeschen") THEN
+ end (sohn)
+ ELIF yes ("Generierung abbrechen") THEN
+ errorstop ("")
+ END IF;
+ sohn := naechster
+ END REP
+
+END PROC soehne loeschen;
+
+
diff --git a/app/eudas/4.3/src/eudas.init b/app/eudas/4.3/src/eudas.init
new file mode 100644
index 0000000..54fa28d
--- /dev/null
+++ b/app/eudas/4.3/src/eudas.init
@@ -0,0 +1,1463 @@
+% MENUE "EUDAS.Öffnen"
+% BILD
+--------------
+EUDAS-Datei
+O Öffnen
+E Ketten
+K Koppeln
+--------------
+Arbeitskopie
+S Sichern
+--------------
+Aktuelle Datei
+N Notizen
+F Feldstrukt.
+P Prüfbeding.
+--------------
+Mehrbenutzer
+M Manager
+--------------
+% FELD 1 "EUDAS/1O" "oO"
+% FELD 2 "EUDAS/1E" "eE"
+% FELD 3 "EUDAS/1K" "kK"
+% FELD 4 "EUDAS/1S" "sS"
+% FELD 5 "EUDAS/1N" "nN"
+% FELD 6 "EUDAS/1F" "fF"
+% FELD 7 "EUDAS/1P" "pP"
+% FELD 8 "EUDAS/1M" "mM"
+% ENDE
+% MENUE "EUDAS.Einzelsatz"
+% BILD
+--------------
+Positionieren
+W Weiter
+Z Zurück
+N Satz.Nr
+--------------
+Suchbedingung
+S Setzen
+L Löschen
+M Markierung
+--------------
+Datensatz
+E Einfügen
+A Ändern
+T Tragen
+H Holen
+--------------
+F Feldauswahl
+--------------
+% FELD 1 "EUDAS/2W" "wW"
+% FELD 2 "EUDAS/2Z" "zZ"
+% FELD 3 "EUDAS/2N" "nN"
+% FELD 4 "EUDAS/2S" "sS"
+% FELD 5 "EUDAS/2L" "lL"
+% FELD 6 "EUDAS/2M" "mM"
+% FELD 7 "EUDAS/2E" "eE"
+% FELD 8 "EUDAS/2A" "aA"
+% FELD 9 "EUDAS/2T" "tT"
+% FELD 10 "EUDAS/2H" "hH"
+% FELD 11 "EUDAS/2F" "fF"
+% FELD 12 "" ""3""
+% FELD 13 "" ""10""
+% FELD 14 "" "1"
+% FELD 15 "" "9"
+% FELD 16 "" "K"
+% ENDE
+% MENUE "EUDAS.Gesamtdatei"
+% BILD
+--------------
+Satzauswahl
+K Kopieren
+T Tragen
+V Verändern
+U Übersicht
+--------------
+Aktuelle Datei
+S Sortieren
+--------------
+Alle Markier.
+L Löschen
+--------------
+% FELD 1 "EUDAS/3K" "kK"
+% FELD 2 "EUDAS/3T" "tT"
+% FELD 3 "EUDAS/3V" "vV"
+% FELD 4 "EUDAS/3U" "uU"
+% FELD 5 "EUDAS/3S" "sS"
+% FELD 6 "EUDAS/3L" "lL"
+% ENDE
+% MENUE "EUDAS.Drucken"
+% BILD
+--------------
+Satzauswahl
+D Drucken
+--------------
+Druckausgabe
+R Richtung
+--------------
+Textdatei
+E Editieren
+A Ausdrucken
+N Nachbearb.
+--------------
+% FELD 1 "EUDAS/4D" "dD"
+% FELD 2 "EUDAS/4R" "rR"
+% FELD 3 "EUDAS/4E" "eE"
+% FELD 4 "EUDAS/4A" "aA"
+% FELD 5 "EUDAS/4N" "nN"
+% ENDE
+% MENUE "EUDAS.Dateien"
+% BILD
+--------------
+Dateien System
+U Übersicht
+--------------
+Datei
+L Löschen
+N Umbenennen
+K Kopieren
+P Platzbedarf
+A Aufräumen
+--------------
+% FELD 1 "EUDAS/5U" "Uu"
+% FELD 2 "EUDAS/5L" "Ll"
+% FELD 3 "EUDAS/5N" "Nn"
+% FELD 4 "EUDAS/5K" "Kk"
+% FELD 5 "EUDAS/5P" "Pp"
+% FELD 6 "EUDAS/5R" "Aa"
+% ENDE
+% MENUE "EUDAS.Archiv"
+% BILD
+--------------
+Dateien Archiv
+U Übersicht
+D Üb. Drucken
+--------------
+Datei
+K Kopieren
+ vom Archiv
+S Schreiben
+ auf Archiv
+L Löschen
+ auf Archiv
+--------------
+Archivdiskette
+I Init
+--------------
+Z Zielarchiv
+P Passwort
+R Reservieren
+--------------
+% FELD 1 "EUDAS/6U" "Uu"
+% FELD 2 "EUDAS/6D" "Dd"
+% FELD 3 "EUDAS/6K" "Kk"
+% FELD 4 "EUDAS/6S" "Ss"
+% FELD 5 "EUDAS/6L" "Ll"
+% FELD 6 "EUDAS/6I" "Ii"
+% FELD 7 "EUDAS/6Z" "Zz"
+% FELD 8 "EUDAS/6P" "Pp"
+% FELD 9 "EUDAS/6R" "Rr"
+% ENDE
+% AUSWAHL "EUDAS-Felder"
+% VORSPANN
+--------------------------------------------------------------
+ Bitte die Felder, die geaendert werden sollen, ankreuzen:
+% BILD
+--------------------------------------------------------------
+  
+--------------------------------------------------------------
+% ENDE
+% AUSWAHL "EUDAS-Sortierfelder"
+% VORSPANN
+--------------------------------------------------------------
+ Bitte die Felder, nach denen sortiert werden soll, in Reihen-
+ folge ankreuzen:
+% BILD
+--------------------------------------------------------------
+  
+--------------------------------------------------------------
+% ENDE
+% AUSWAHL "EUDAS-Anzeigefelder"
+% VORSPANN
+--------------------------------------------------------------
+ Bitte die Felder, die angezeigt werden sollen, in Reihenfolge
+ ankreuzen:
+% BILD
+--------------------------------------------------------------
+  
+--------------------------------------------------------------
+% ENDE
+% AUSWAHL "EUDAS-Editfelder"
+% VORSPANN
+--------------------------------------------------------------
+ Bitte die Felder ankreuzen, die in die Datei übernommen
+ werden sollen:
+% BILD
+--------------------------------------------------------------
+  
+--------------------------------------------------------------
+% ENDE
+% AUSWAHL "EUDAS-Archivauswahl"
+% VORSPANN
+--------------------------------------------------------------
+ Auswahl der Dateien auf dem Archiv.
+ Gewuenschte Datei(en) bitte ankreuzen:
+% BILD
+--------------------------------------------------------------
+  
+--------------------------------------------------------------
+% ENDE
+% AUSWAHL "EUDAS-Dateiauswahl"
+% VORSPANN
+--------------------------------------------------------------
+ Auswahl der vorhandenen Dateien.
+ Gewuenschte Datei(en) bitte ankreuzen:
+% BILD
+--------------------------------------------------------------
+  
+--------------------------------------------------------------
+% ENDE
+% HILFE "EUDAS/Allgemein"
+% SEITE 1
+--- MENÜBEDIENUNG ---
+Das Menü dient zur Auswahl von Funktionen. Die Funktionen sind
+durch einen vorangestellten Buchstaben gekennzeichnet. Mit den
+Pfeiltasten können Sie die Markierung zu einer beliebigen
+Position auf und ab bewegen. Diese Funktion können Sie dann
+durch Drücken der Leertaste ausführen. Durch ESC '?' (nachein-
+ander gedrückt) erhalten Sie Informationen zur gerade
+markierten Funktion.
+Funktionen, die im momentanen Zustand nicht ausgeführt werden
+können, sind durch ein Minuszeichen gekennzeichnet.
+In der obersten Bildschirmzeile sind weitere Menüs aufgeführt,
+die Sie aufrufen können. Das aktuelle Menü ist invers
+markiert. Ein anderes Menü wählen Sie durch Drücken der
+Pfeiltasten RECHTS oder LINKS.
+Wollen Sie das Programm wieder verlassen, drücken Sie die
+ESC-Taste und 'q' hintereinander.
+---
+% ENDE
+% HILFE "EUDAS/1O"
+% SEITE 1
+--- Öffnen zum Bearbeiten ---
+Diese Funktion öffnet eine EUDAS-Datei zur anschließenden Bear­
+beitung. Sie können angeben, ob Sie die Datei nur ansehen oder
+auch ändern wollen. Die vorher geöffnete Datei wird ggf. ge­
+sichert. Wenn Sie eine neue Datei angeben, wird diese einge­
+richtet. Dabei müssen Sie die Feldnamen eingeben.
+
+=> Hinweise zur Menübedienung auf der zweiten Seite (ESC 'w')
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/1E"
+% SEITE 1
+--- EUDAS-Datei ketten
+Mit dieser Funktion können Sie eine EUDAS-Datei logisch an die
+bereits geöffnete Datei anketten. Dazu müssen jedoch die beiden
+Dateien in ihrer Feldstruktur übereinstimmen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/1N"
+% SEITE 1
+--- Notizen ansehen/ändern ---
+Mit dieser Funktion können Sie der aktuell geöffneten Datei
+Notizen zuordnen bzw. sich die vorherigen Notizen ansehen. Dazu
+wird der normale Editor verwendet.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/1M"
+% SEITE 1
+--- Manager (Mehrbenutzerbetrieb) ---
+Mit dieser Funktion können Sie die Task festlegen, aus der beim
+Öffnen automatisch EUDAS-Dateien geholt werden können. Dadurch
+können mehrere Benutzer auf die gleiche Datei zugreifen, jedoch
+immer nur einer ändern.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/1F"
+% SEITE 1
+--- Feldstruktur ändern ---
+Mit dieser Funktion können Sie
+
+1. neue Feldnamen anfügen
+ Sie können neue Feldnamen der Datei am Ende anfügen. Sie
+ müssen die Namen untereinander im Editor in der gewünschten
+ Reihenfolge angeben. Vorher werden Sie jedoch gefragt, ob
+ Sie diese Funktion überhaupt ausführen wollen.
+
+2. Feldnamen und Feldtypen ändern
+ In diesem Teil wird Ihnen eine Auswahl aller vorhandenen
+ Felder angeboten, in der jeweils auch der Typ angegeben ist.
+ Wenn Sie diese Funktion nicht ausführen wollen, beenden Sie
+ die Auswahl einfach mit ESC q. Sonst wählen Sie die Felder
+ aus, deren Namen oder Typ Sie ändern wollen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/1P"
+% SEITE 1
+--- Prüfbedingungen ---
+Bei dieser Funktion können Sie im Editor ein Prüfpro­
+gramm eingeben, das mit der Datei gespeichert wird und beim
+Reintragen neuer Sätze ausgeführt wird.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/1K"
+% SEITE 1
+--- EUDAS-Datei koppeln ---
+Mit dieser Funktion können Sie eine Datei angeben, die zu den
+bisher geöffneten Dateien dazugekoppelt wird. Anschließend
+werden zu jedem Satz der existierenden Datei die in den Koppel­
+feldern übereinstimmenden Sätze der Koppeldatei gezeigt.
+Als Koppelfelder werden dabei die ersten Felder der Koppeldatei
+betrachtet, die auch in der geöffneten Datei vorhanden sind.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/3S"
+% SEITE 1
+--- Aktuelle Datei sortieren ---
+Mit dieser Funktion kann die aktuell geöffnete EUDAS-Datei
+sortiert werden. Die Reihenfolge, in der die Felder berücksich­
+tigt werden, kann vorher angegeben werden. Eventuell müssen
+zum richtigen Sortieren Feldtypen vergeben werden (s.
+"Feldstrukt.").
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/1S"
+% SEITE 1
+--- Aktuelle Dateien sichern ---
+EUDAS arbeitet bei Änderungen immer auf Sicherheitskopien der
+Dateien. Wenn Ändern erlaubt ist, müssen geänderte Arbeits­
+kopien mit dieser Funktion gesichert werden. Für eine veränder­
+te Datei kann dabei auch ein neuer Name angegeben werden, damit
+die alte Version erhalten bleibt.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2W"
+% SEITE 1
+--- Satz weiter ---
+Diese Funktion geht zum nächsten Satz und zeigt ihn an. Wenn
+eine Suchbedingung eingestellt ist, werden nicht ausgewählte
+Sätze übersprungen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2Z"
+% SEITE 1
+--- Satz zurück ---
+Diese Funktion geht zum vorigen Satz. Wenn eine Suchbedingung
+eingestellt ist, werden nicht ausgewählte Sätze übersprungen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2S"
+% SEITE 1
+--- Suchbedingung setzen ---
+Mit dieser Funktion kann eine Suchbedingung als Suchmuster
+eingegeben werden, die angibt, welche Sätze bearbeitet werden
+sollen. Die vorher eingestellte Suchbedingung wird automatisch
+gelöscht. Die Bedingungen für die einzelnen Felder können im
+Editor eingegeben werden.
+
+mögliche Bedingungen:
+ Text identisch mit Text.. größergleich
+ *Text endet mit ..Text kleiner
+ Text* beginnt mit Text..Text zwischen
+ *Text* enthält * nicht leer
+
+ --Bed Verneinung
+
+Kombination von Bedingungen:
+ Bedingungen für verschiedene Felder:
+ UND
+ Komma zwischen Bedingungen:
+ lokales ODER (Prio höher als UND)
+ Semikolon zwischen Bedingungen:
+ globales ODER (Prio niedriger als UND)
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2L"
+% SEITE 1
+--- Suchbedingung löschen ---
+Mit dieser Funktion kann eine eingestellte Suchbedingung wieder
+gelöscht werden, so daß wieder alle Sätze sichtbar sind.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2N"
+% SEITE 1
+--- auf Satz Nr. ---
+Mit dieser Funktion kann ein bestimmter Satz direkt angewählt
+werden. Dazu müssen Sie lediglich dessen Satznummer angeben.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2E"
+% SEITE 1
+--- neuen Satz einfügen ---
+Mit dieser Funktion wird vor dem aktuellen Satz ein neuer Satz
+eingefügt. Die Inhalte dieses zunächst leeren Satzes können Sie
+mit Hilfe des Editors neben die einzelnen Feldnamen schreiben.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2A"
+% SEITE 1
+--- Satz ändern ---
+Mit dieser Funktion können Sie die Inhalte des aktuellen Satzes
+verändern. Am Bildschirm können Sie die Daten mit Hilfe des
+Editors ändern, löschen und Neues hinzufügen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2M"
+% SEITE 1
+--- Markierung ein/aus ---
+Mit dieser Funktion können Sie einen Satz markieren, damit
+später nur die markierten Sätze bearbeitet werden. Ist der Satz
+schon markiert, wird die Markierung wieder gelöscht. Wenn min­
+destens ein Satz markiert ist, erscheint die Markierungsinfor­
+mation in der Überschrift.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/3L"
+% SEITE 1
+--- Alle Markierungen loeschen ---
+Mit dieser Funktion werden alle Markierungen in der Datei
+gelöscht. Die Markierungsinformation wird nicht mehr angezeigt.
+Die Markierungen werden auch beim neuen Öffnen gelöscht, da sie
+nicht permanent in der Datei gespeichert sind.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2T"
+% SEITE 1
+--- Einzelsatz tragen ---
+Mit dieser Funktion kann der aktuelle Satz in eine andere Datei
+transportiert werden. Anschließend wird er gelöscht. Der Satz
+wird am Ende der Zieldatei angefügt, wobei diese gegebenenfalls
+eingerichtet wird. Den Namen der Zieldatei können Sie eingeben.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2H"
+% SEITE 1
+--- Einzelsatz holen ---
+Diese Funktion holt den letzten Satz einer anderen Datei und
+fügt ihn vor dem aktuellen Satz ein. Damit wird das letzte
+'Tragen' wieder rückgängig gemacht. Die Dateien müssen gleiche
+Felderzahl haben.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/3U"
+% SEITE 1
+--- Übersicht ---
+Mit dieser Funktion können Sie sich eine Übersicht über mehrere
+Sätze verschaffen. Es werden vom aktuellen Satz an alle durch
+die Suchbedingung spezifizierten Sätze angezeigt, jeder Satz in
+einer Zeile. In dieser Übersicht können Sie blättern und auch
+bestimmte Sätze zur späteren Bearbeitung markieren.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/2F"
+% SEITE 1
+--- Auswahl Felder ---
+Mit dieser Funktion kann gewählt werden, welche Felder in
+welcher Reihenfolge angezeigt werden sollen. Alle Felder
+werden zum Ankreuzen angeboten.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/4D"
+% SEITE 1
+--- Drucken nach Muster ---
+Mit dieser Funktion können die Inhalte der Datei nach einem
+Druckmuster ausgedruckt werden. Das Druckmuster ist eine Text­
+datei und muß vorher erstellt werden. Es gibt die Form des
+Ausdrucks an. Über den Aufbau eines Druckmusters lesen Sie am
+besten das Benutzerhandbuch.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/3T"
+% SEITE 1
+--- Satzauswahl tragen ---
+Diese Funktion trägt alle durch die Suchbedingung oder durch
+Markierung ausgewählten Sätze in eine andere Datei und löscht
+sie danach. Die Zieldatei muß gleiche Felderzahl haben, damit
+keine Information verlorengeht. Beim Tragen können auch die
+Prüfbedingungen der Zieldatei geprüft werden, wenn Sie die
+entsprechende Frage bejahen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/4E"
+% SEITE 1
+--- Textdatei erstellen/aendern ---
+Mit dieser Funktion kann eine Textdatei erstellt, geändert oder
+angesehen werden. Es wird der normale Editor verwendet. Mit
+dieser Funktion werden auch Druckmuster bearbeitet.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/3K"
+% SEITE 1
+--- Satzauswahl kopieren ---
+Diese Funktion kopiert alle durch die Suchbedingung oder durch
+Markierung ausgewählten Sätze in eine andere Datei. Welche
+Felder in welcher Reihenfolge kopiert werden sollen, wird durch
+ein Kopiermuster bestimmt, das nach der Struktur der Zieldatei
+bestimmt wird und dann von Ihnen noch geändert werden kann.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/4R"
+% SEITE 1
+--- Richtung Ausgabe ---
+Mit dieser Funktion können Sie festlegen, ob die Ausgabe des
+Druckvorgangs direkt anschließend ausgedruckt werden soll, oder
+in eine Datei gespeichert wird. Sie können den Namen dieser
+Datei eingeben, anderenfalls wählt sich EUDAS selbst einen
+Namen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/4A"
+% SEITE 1
+--- Textdatei ausdrucken ---
+Mit dieser Funktion wird eine Textdatei direkt ausgedruckt. Die
+Datei kann Anweisungen zur Druckersteuerung enthalten, die Sie
+dem EUMEL-Benutzerhandbuch entnehmen können. Sie können hiermit
+Ausgabedateien des Druckprozesses und das Druckmuster selbst
+ausdrucken.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/3V"
+% SEITE 1
+--- Ändern nach Vorschrift ---
+Diese Funktion ermöglicht es, alle durch die Suchbedingung oder
+durch Markierung ausgewählten Sätze nach einer Vorschrift auto­
+matisch zu ändern. Die Art der Änderungen wird dabei durch ein
+Verarbeitungsmuster festgelegt, das vorher als Textdatei er­
+stellt werden muß. Über die Form des Verarbeitungsmusters s.
+Benutzerhandbuch.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/4N"
+% SEITE 1
+--- Textdatei nachbearbeiten ---
+Mit dieser Funktion können Sie eine Datei zeilenweise und
+seitenweise formatieren (lineform/pageform). Dies dient an
+dieser Stelle zur Bearbeitung von Druckdateien, die
+verschiedene oder Proportionalschriften enthalten. Sie werden
+jeweils für jede der beiden Funktionen gefragt, ob Sie sie
+ausführen wollen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/6S"
+% SEITE 1
+--- Schreiben auf Archiv ---
+Diese Funktion schreibt eine oder mehrere Dateien auf das
+Archiv. Der Archivname muß vorher eingegeben werden. Dann kann
+entweder der Name der gewünschten Datei eingegeben werden oder
+mit ESC 'z' eine Auswahl von Dateien angekreuzt werden.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/5A"
+% SEITE 1
+--- Datei aufräumen ---
+Diese Funktion reorganisiert eine Datei, an der viel geändert
+wurde, zur Platz- und Zeitersparnis.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/5K"
+% SEITE 1
+--- Datei kopieren ---
+Mit dieser Funktion kann eine beliebige Datei logisch kopiert
+werden. Die Kopie ist identisch mit dem Original und belegt den
+gleichen Platz, erst bei Änderungen werden unterschiedliche
+Daten gespeichert.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/5P"
+% SEITE 1
+--- Platzbedarf Datei ---
+Diese Funktion gibt an, wieviel Platz eine Datei im System
+belegt. Dieser Platz kann aber mit anderen Dateien geteilt
+sein.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/6D"
+% SEITE 1
+--- Archivübersicht drucken ---
+Diese Funktion druckt die Übersicht der Archivdateien aus.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/6I"
+% SEITE 1
+--- Archiv initialisieren ---
+Diese Funktion initialisiert einen Archivträger vor dem
+Beschreiben. Sämtliche Daten werden gelöscht. Auf Wunsch kann
+der Datenträger auch formatiert werden (falls vom System
+unterstützt).
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/6Z"
+% SEITE 1
+--- Zielarchiv einstellen ---
+Mit dieser Funktion kann eine Managertask angegeben werden, auf
+die die Archivfunktionen angewendet werden. Dies dient sowohl
+zur Ansteuerung von mehreren Archiven (z.B. über Netz) als auch
+zur Kommunikation mit anderen Managern.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/6P"
+% SEITE 1
+--- Passwort ---
+Mit dieser Funktion können Sie das Passwort einstellen, das
+beim Versenden von Dateien an andere Tasks verwendet wird. Beim
+Schreiben einer Datei wird das Passwort der Datei mitgegeben
+und beim Lesen wird überprüft, ob das Passwort übereinstimmt.
+Das Passwort kann in der Form Schreibpasswort/Lesepasswort
+angegeben werden.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/6R"
+% SEITE 1
+--- Reservieren ---
+Mit dieser Funktion können Sie einen Kanalmanager (z.B.
+DOS-Task) reservieren. Die Reservierung wird beim Verlassen des
+Archivmenüs wieder aufgehoben. Den Parameter zur Reservierung
+(Modus bei DOS-Task) können Sie angeben. Bei normalen Archiv­
+tasks wird die Reservierung automatisch vorgenommen, daher ist
+diese Funktion dann gesperrt.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/6K"
+% SEITE 1
+--- Kopieren vom Archiv ---
+Diese Funktion kopiert eine Datei vom Archiv ins System. Der
+Archivname wird automatisch bestimmt. Sie können dann entweder
+den gewünschten Dateinamen angeben oder mit ESC 'z' eine Aus­
+wahl aller Dateien auf dem Archiv abrufen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/5N"
+% SEITE 1
+--- Datei Namen ändern ---
+Mit dieser Funktion können Sie für eine Datei auf dem System
+einen neuen Namen vergeben. Wenn Sie den neuen Namen eingeben,
+wird Ihnen der alte Name angeboten. Sie können ihn ändern oder
+ganz überschreiben. Dadurch ersparen Sie sich bei kleinen
+Änderungen das Neutippen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/6L"
+% SEITE 1
+--- Löschen auf Archiv ---
+Diese Funktion ermöglicht es, eine Datei auf dem Archiv zu
+löschen. Der Platz dieser Datei wird jedoch nur dann wiederver­
+wendet, wenn keine Dateien mehr dahinter stehen. Der Archivname
+muß eingegeben werden. Sie können bei der Eingabe des Datei­
+namens mit ESC 'z' eine Dateiauswahl abrufen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/5L"
+% SEITE 1
+--- Datei löschen ---
+Diese Funktion löscht eine Datei auf dem System nach Anfrage.
+Sie können den Dateinamen eingeben oder mit ESC 'z' eine Aus­
+wahl aller vorhandenen Dateien abrufen.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/6U"
+% SEITE 1
+--- Übersicht Archiv ---
+Diese Funktion liefert eine Übersicht der Dateien auf dem
+Archiv. Verlassen Sie diese Übersicht mit ESC 'q'.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "EUDAS/5U"
+% SEITE 1
+--- Übersicht Dateien ---
+Diese Funktion liefert eine Übersicht über alle im System vor­
+handenen Dateien. Verlassen Sie diese Übersicht mit ESC 'q'.
+---
+% SEITE 1 "EUDAS/Allgemein"
+% ENDE
+% HILFE "AUSWAHL/Allgemein"
+% SEITE 1
+--- AUSWAHL ---
+Mit Hilfe der Auswahl ist es möglich, aus einem Angebot einen
+Teil auszuwählen. Die gewünschten Namen werden einfach in
+beliebiger Reihenfolge angekreuzt und anschließend in dieser
+Reihenfolge verwendet.
+Die Schreibmarke (Cursor) gibt an, welcher Name gerade ange­
+kreuzt werden kann. Mit den Pfeiltasten kann der Cursor auf den
+Kreisen bewegt werden. 'x' kreuzt einen Namen an, 'o' löscht
+die Ankreuzung wieder.
+Mit ESC 'q' wird die Auswahl verlassen. ESC 'a' bricht die
+Auswahl und die folgende Funktion ab. Falls das Angebot nicht
+auf den Bildschirm paßt, wird es gerollt. ESC '1' positioniert
+immer auf den Anfang und ESC '9' auf das Ende der Auswahl. Mit
+HOP 'x' werden alle noch nicht angekreuzten Namen angekreuzt,
+mit HOP 'o' werden alle Ankreuzungen gelöscht.
+---
+% ENDE
+% HILFE "AUSWAHL/Felder"
+% SEITE 1
+---
+Sie können hier alle Felder ankreuzen, die Sie ändern wollen.
+Ändern können Sie den Feldnamen und den Feldtyp. Wollen Sie
+keine Felder ändern, drücken Sie einfach ESC 'q'.
+---
+% SEITE 1 "AUSWAHL/Allgemein"
+% ENDE
+% HILFE "AUSWAHL/Sortierfelder"
+% SEITE 1
+---
+Kreuzen Sie hier die Felder an, die bei der Sortierung berück­
+sichtigt werden sollen. Die Reihenfolge des Ankreuzens ist
+wichtig. Beim Vergleich zweier Sätze wird erst das als erstes
+angekreuzte Feld verglichen und danach die Einordnung der Sätze
+bestimmt. Ist dieses Feld bei beiden gleich, wird das nächste
+angekreuzte Feld untersucht usw.
+---
+% SEITE 1 "AUSWAHL/Allgemein"
+% ENDE
+% HILFE "AUSWAHL/Anzeigefelder"
+% SEITE 1
+---
+Kreuzen Sie hier alle Felder an, die Sie angezeigt haben möch­
+ten. Die Felder erscheinen in der angekreuzten Reihenfolge. Für
+beide Arten der Anzeige können Sie eine separate Feldauswahl
+einstellen.
+---
+% SEITE 1 "AUSWAHL/Allgemein"
+% ENDE
+% HILFE "AUSWAHL/Feldnamen"
+% SEITE 1
+---
+Durch Blättern in der Auswahl können Sie die Schreibweise der
+Feldnamen ansehen. Die Namen, die Sie ankreuzen, werden danach
+mit Anführungsstrichen in die gerade editierte Datei übernommen.
+---
+% SEITE 1 "AUSWAHL/Allgemein"
+% ENDE
+% HILFE "AUSWAHL/Archiv"
+% SEITE 1
+---
+Diese Auswahl zeigt alle auf dem Archiv vorhandenen Dateien an.
+Kreuzen Sie die Dateien an, die Sie bearbeiten möchten. Die
+Dateien werden in der angekreuzten Reihenfolge verwendet.
+---
+% SEITE 1 "AUSWAHL/Allgemein"
+% ENDE
+% HILFE "AUSWAHL/Datei"
+% SEITE 1
+---
+Diese Auswahl zeigt alle Dateien auf dem System, die Sie ver­
+wenden können. Kreuzen Sie die gewünschte(n) Datei(en) an.
+---
+% SEITE 1 "AUSWAHL/Allgemein"
+% ENDE
+% HILFE "FEHLER/Allgemein"
+% SEITE 1
+--- FEHLERMELDUNGEN ---
+Fehlermeldungen werden von einem Programm abgesetzt, wenn es
+seine Funktion nicht durchführen kann. Der Text der Meldung
+identifiziert die Ursache des Problems. Zur Zeit liegen noch
+keine meldungsspezifischen Informationen vor, schauen Sie ggf.
+in das Benutzerhandbuch.
+---
+% ENDE
+% HILFE "FEHLER/9"
+% SEITE 1
+---
+Diese Fehlermeldung deutet auf einen internen Programmfehler
+(wenn Sie nicht selber ein Programm geschrieben haben). Melden
+Sie diesen Fehler bitte, damit eine Korrektur vorgenommen
+werden kann. Schreiben Sie sich dazu die Begleitumstände auf
+(welche Datei haben Sie benutzt, welche Funktion). Versuchen
+Sie gegebenenfalls, den Fehler zu wiederholen. Es ist nämlich
+z.B. wichtig, ob der Fehler nur bei einer bestimmten Datei
+auftritt oder ganz "zufällig". Wenn Sie vermuten, daß der
+Fehler an einer bestimmten Datei liegt, sichern Sie diese Datei
+bitte auf einer Diskette, um sie eventuell einschicken zu
+können.
+---
+% ENDE
+% HILFE "FEHLER/10"
+% SEITE 1 "FEHLER/9"
+% ENDE
+% HILFE "FEHLER/11"
+% SEITE 1 "FEHLER/9"
+% ENDE
+% HILFE "FEHLER/14"
+% SEITE 1 "FEHLER/9"
+% ENDE
+% HILFE "GET/Allgemein"
+% SEITE 1
+--- EINGABE ---
+Die Eingabe erwartet von Ihnen eine bestimmte Information, die
+Sie eingeben sollen. Die Art der Information wird durch den
+Anforderungstext angegeben. Wenn Sie sich beim Eintippen ver­
+schrieben haben, können Sie mit den Pfeiltasten zurückgehen
+und den Text korrigieren. Eine bereits dastehende Information
+können Sie überschreiben. RUBOUT löscht ein Zeichen, RUBIN
+schaltet in den Einfügemodus (Zeichen werden nicht mehr über­
+schrieben). Beenden Sie die Eingabe mit RETURN. ESC 'h' bricht
+die Eingabe und die folgende Funktion ab. Wenn in der Status­
+zeile angegeben, können Sie mit ESC 'z' eine Auswahl verfüg­
+barer Namen abrufen, die Sie dann Ankreuzen können.
+---
+% ENDE
+% HILFE "GET/Sicherungsname"
+% SEITE 1
+---
+Sie können jetzt den Namen angeben, unter dem die Arbeitskopie
+gespeichert werden soll. Ihnen wird der alte Name zum Über­
+schreiben angeboten. Drücken Sie nur RETURN, wird der alte Name
+genommen und die alte Version überschrieben.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/Dateiname"
+% SEITE 1
+---
+Bitte geben Sie den Namen der Datei ein, mit dem die Operation
+ausgeführt werden soll. Mit ESC 'z' können Sie sich die zur
+Verfügung stehenden Namen auch als Auswahl zeigen lassen.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/feldname"
+% SEITE 1
+---
+Sie können den Namen des angegebenen Feldes ändern, indem Sie
+den alten Namen überschreiben bzw. korrigieren.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/feldtyp"
+% SEITE 1
+---
+Sie können hier einen von vier möglichen Typen eingeben:
+ TEXT normaler Text mit Vergleich nach EUMEL-Code.
+ DIN Text, der nach DIN 5007 verglichen wird (Umlaute rich­
+ tig, Groß-/Kleinschreibung und Sonderzeichen ignoriert).
+ ZAHL Alle nichtnumerischen Zeichen außer Minus und Dezimal­
+ komma werden beim Vergleichen ignoriert.
+ DATUM Datum der Form "tt.mm.jj"
+Die Feldtypen werden beim Sortieren und Suchen beachtet.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/auf Satz"
+% SEITE 1
+---
+Sie können hier die Satznummer des Satzes eingeben, den Sie
+sehen wollen.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/copy"
+% SEITE 1
+---
+ Geben Sie hier den Namen für die logische Kopie der Datei an.
+ Dieser Name darf keine existierende Datei bezeichnen.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/Archivname"
+% SEITE 1
+---
+Geben Sie den Namen des eingelegten Archivs ein (zur Sicher­
+heit). Der zuletzt verwendete Name wird zum Ändern angeboten.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/rename"
+% SEITE 1
+---
+Sie können den alten Namen der Datei durch Überschreiben und
+Korrigieren ändern.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/Druckdatei"
+% SEITE 1
+---
+Geben Sie hier den Namen der Datei ein, in die die Ausgabe des
+Druckprozesses geschrieben werden soll. Diese Datei wird nur
+für den nächsten Druckvorgang verwendet. Sie müssen den Namen
+also jedes Mal wieder neu angeben. Existiert die Datei schon,
+wird die Ausgabe an das Ende angehängt.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/Zielarchiv"
+% SEITE 1
+---
+Geben Sie hier entweder den Namen einer Archivtask ein
+(normalerweise "ARCHIVE") oder einer anderen Managertask. Bei
+Netzbetrieb können Sie auch die Station anschließend angeben.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/Zielstation"
+% SEITE 1
+---
+Geben Sie hier die Stationsnummer der Zieltask ein. Wenn sich
+die Zieltask in Ihrem eigenen System befindet, brauchen Sie nur
+RETURN zu drücken.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/multi task"
+% SEITE 1
+---
+Sie können hier den Namen einer EUDAS-Managertask angeben
+(EUDAS muß in dieser Task insertiert sein). Wenn Sie keinen
+Namen angeben, werden keine entsprechenden Abfragen beim Öffnen
+mehr gemacht.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "GET/kopiermuster"
+% SEITE 1
+---
+Geben Sie den Namen einer Datei ein, in der das Kopiermuster
+stehen soll. Drücken Sie einfach RETURN, wenn Sie das Muster
+nicht aufbewahren wollen. Wenn die Datei noch nicht existiert,
+wird das Standard-Kopiermuster in die Datei geschrieben.
+Anschließend kann das Muster noch im Editor geändert werden.
+---
+% SEITE 1 "GET/Allgemein"
+% ENDE
+% HILFE "JA/Allgemein"
+% SEITE 1
+--- FRAGEN ---
+Das Programm stellt Ihnen eine Frage, die Sie bejahen oder
+verneinen können. Sie bejahen die Frage, indem Sie 'j' drücken
+und verneinen Sie mit 'n' (beides groß oder klein). Mit ESC 'h'
+können Sie die Funktion abbrechen.
+---
+% ENDE
+% HILFE "JA/oeffne"
+% SEITE 1
+---
+Beantworten Sie die Frage mit 'n', wenn Sie die Datei nur anse­
+hen wollen. In diesem Fall wird keine Sicherheitskopie er­
+stellt. Verneinen Sie die Frage, wird eine interen Kopie ange­
+legt, die Sie dann verändern können. Die Kopie muß nach dem
+Ändern gesichert werden.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/alte version"
+% SEITE 1
+---
+Wenn Sie diese Frage bejahen, wird die Arbeitskopie unter dem
+angegebenen Namen gesichert. Die alte Version geht dadurch
+verloren. Wenn Sie die Frage verneinen, haben Sie Gelegenheit,
+einen neuen Namen anzugeben, damit die alte Version erhalten
+bleiben kann.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Datei loeschen"
+% SEITE 1
+---
+Beim Sichern hatten Sie Gelegenheit, alle veränderten Dateien
+zu sichern. Die Sicherheitskopien können damit gelöscht werden.
+Dazu bejahen Sie die Frage. Wenn die Dateien jedoch noch geöff­
+net bleiben sollen, oder Sie eine Datei aus Versehen nicht
+gesichert haben, müssen Sie diese Frage verneinen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/sichere"
+% SEITE 1
+---
+Die interne Arbeitskopie der angegebenen Datei wurde gegenüber
+dem Original verändert. Wenn Sie diese Änderungen behalten
+wollen, müssen Sie die Frage bejahen. Sie haben dann noch die
+Möglichkeit, die geänderte Version unter neuem Namen zu
+sichern, um die alte Version zu behalten. Wenn Sie die Frage
+verneinen, gehen die Änderungen verloren und das Original
+bleibt erhalten.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/ueber"
+% SEITE 1
+---
+Sie haben für die Arbeitskopie einen Namen angegeben, der noch
+existiert. Bejahen Sie die Frage, wird die alte Datei dieses
+Namens überschrieben. Anderenfalls erhalten Sie eine neue Gele­
+genheit, einen Namen einzugeben.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Sicherungssortierung"
+% SEITE 1
+---
+Die angegebene Datei war früher schon einmal sortiert worden.
+Die Sortierung wurde jedoch durch nachfolgende Änderungen
+zerstört. Wenn Sie die Datei wieder sortiert haben wollen,
+beantworten Sie die Frage mit 'j'. Die Sortierung dauert nicht
+lange, wenn nur wenige Sätze verändert wurden.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/feldnamen"
+% SEITE 1
+---
+Falls Sie neue Felder zu den existierenden anfügen wollen,
+müssen Sie diese Frage bejahen. Sie erhalten dann Gelegenheit,
+die neuen Namen im Editor einzugeben.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Sortierfelder"
+% SEITE 1
+---
+Die Reihenfolge, in der die Felder bei der Sortierung berück­
+sichtigt werden, ist in der EUDAS-Datei intern gespeichert.
+Wenn Sie diese Reihenfolge, die beim letzten Sortieren angege­
+ben wurde, ändern möchten, müssen Sie die Frage bejahen. Sie
+können dann die neue Feldreihenfolge auswählen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/sortieren"
+% SEITE 1
+---
+Wenn Sie diese Frage bejahen, wird die Zieldatei nach Ausfüh­
+rung der Funktion in ihrer eingestellten Feldreihenfolge sor­
+tiert.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/forget"
+% SEITE 1
+---
+Wenn Sie diese Frage bejahen, wird die Datei wirklich gelöscht.
+Wenn Sie die Datei irrtümlich gewählt haben, müssen Sie die
+Frage verneinen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/direkt drucken"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, wird das Ergebnis des Druckens am
+Ende des Vorgangs ausgedruckt. Anderenfalls wird das Ergebnis
+in einer Datei zwischengespeichert. Sie können die Ausgabe dann
+noch behandeln, ehe Sie sie ausdrucken.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/einrichten"
+% SEITE 1
+---
+Sie haben eine Datei angegeben, die noch nicht existiert. Wenn
+Sie die Frage bejahen, wird die Datei neu eingerichtet. Ande­
+renfalls wird die Funktion abgebrochen, so daß Sie Gelegenheit
+haben, die Funktion mit einem neuen Namen zu wiederholen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/testen"
+% SEITE 1
+---
+Wenn Sie diese Frage bejahen, werden beim Tragen die Prüfbedin­
+gungen der Zieldatei abgefragt. Sätze, die diese Bedingungen
+nicht erfüllen, werden nicht getragen und können danach geän­
+dert werden. Beim Ändern wird dann jeweils die den Satz betref­
+fende Meldung ausgegeben. Die Prüfbedingungen der Zieldatei
+können Sie mit der Funktion "Feldstruktur aendern" angeben oder
+ändern.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/save"
+% SEITE 1
+---
+Die angegebene Datei befindet sich bereits auf dem Archiv. Wenn
+Sie die Datei überschreiben wollen, müssen Sie die Frage beja­
+hen. Ansonsten wird die Datei nicht auf das Archiv geschrieben
+(keine Wirkung).
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/fetch"
+% SEITE 1
+---
+Die angegebene Datei ist bereits im System vorhanden. Wenn Sie
+diese Datei überschreiben wollen, müssen Sie die Frage bejahen.
+Anderenfalls wird keine Aktion vorgenommen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/erase"
+% SEITE 1
+---
+Zur Sicherheit wird gefragt, ob Sie die angegebene Datei wirk­
+lich auf dem Archiv löschen wollen. Wenn Sie die Frage vernei­
+nen, wird keine Aktion durchgeführt.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Druckdatei"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, können Sie für die Ausgabedatei
+einen bestimmten Namen angeben. Anderenfalls wird ein Name
+"EUDAS-Ausgabe.n" automatisch von EUDAS vergeben.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Zielmanager"
+% SEITE 1
+---
+Ein Archivmanager ist eine Task, die tatsächlich ein
+physikalisches Speichermedium (Diskette) bedient, das für den
+jeweiligen Benutzer reserviert werden muß. Normale Managertasks
+können von mehreren Benutzern gleichzeitig angesprochen werden.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/format"
+% SEITE 1
+---
+Wenn Ihr Rechner dies unterstützt, können Sie Archivdisketten
+vor dem Initialisieren noch physikalisch formatieren. Dies ist
+immer dann notwendig, wenn eine Diskette neu ist (vor der
+ersten Benutzung) oder wenn Schreibfehler aufgetreten sind, die
+sich nicht mehr reparieren lassen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/archiv loeschen"
+% SEITE 1
+---
+Wenn Sie irrtümlich die falsche Diskette eingelegt haben oder
+eine andere Funktion ausführen wollten, können Sie die Funktion
+durch Verneinen der Frage abbrechen. Achten Sie auf den
+angegebenen Archivnamen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/archiv init"
+% SEITE 1
+---
+Wenn Sie aus Versehen die falsche Funktion gewählt haben,
+können Sie die Funktion durch Verneinen der Frage abbrechen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Feld aendern"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, werden Ihnen alle vorhandenen
+Felder zum Ankreuzen angeboten. Sie können dann für die
+angekreuzten Felder die Namen und Feldtypen ändern.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/alle Saetze"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, werden anschließend alle Sätze, die
+in der Übersicht zu sehen waren, gedruckt. Den Namen des
+Druckmusters können Sie dann gleich eingeben. Wenn Sie keinen
+oder nur den aktuellen Satz drucken wollen, müssen Sie die
+Frage verneinen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/alle markierten"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, werden anschließend alle markierten
+Sätze gedruckt. Den Namen des Druckmusters können Sie dann
+gleich eingeben. Wenn Sie keinen oder nur den aktuellen Satz
+drucken wollen, müssen Sie die Frage verneinen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Einzelsatz drucken"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, wird der aktuelle (markierte) Satz
+gedruckt. Den Namen des Druckmusters können Sie dann gleich
+eingeben. Wenn Sie keinen Satz drucken wollen, müssen Sie die
+Frage verneinen.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/noch einmal"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, können Sie noch einmal die Datei
+mit einer neuen Suchbedingung ansehen und erneut drucken. Sonst
+kehren Sie wieder in den Editor zurück.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Ub. Felder"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, können Sie einzelne Felder in einer
+bestimmten Reihenfolge für die Übersichtsanzeige auswählen.
+Anderenfalls werden alle Felder angezeigt.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Suchmuster"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, können Sie eine Suchbedingung für
+die angezeigten Sätze angeben.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/umschalten"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, schalten Sie auf die genannte
+Koppeldatei um. Damit wird diese Datei zeitweise als einzige
+geöffnete betrachtet. Damit können Sie einen bestimmten Satz
+aufsuchen, den Sie später beim Zurückschalten übernehmen
+können. Verneinen Sie die Frage, werden Ihnen weitere mögliche
+Koppeldateien angeboten, oder Sie kehren ohne Schaden zurück.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/uebernehmen"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, werden die Koppelfelder des jetzt
+ausgewählten Satzes in den aktuellen Satz der ersten Datei
+übernommen, an dem Sie dann weiter ändern können.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/Sortierrichtung"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, wird die Datei nach dem genannten
+Feld in aufsteigender Richtung sortiert, anderenfalls in
+absteigender. Für weitere Felder können Sie wieder eine andere
+Richtung angeben.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/zeilenform"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, wird die angegebene Datei
+zeilenweise interaktiv formatiert. Der Text wird unter
+Berücksichtigung der Schrifttypen gleichmäßig auf die Zeilen
+verteilt. Beachten Sie die Wirkung der Absatzmarken!
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/seitenform"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, wird die angegebene Datei
+interaktiv seitenweise formatiert. Der Text wird bis zur
+angegebenen Seitenlänge auf die Seiten verteilt. Dabei werden
+Seitenköpfe und Fußnoten eingefügt. Das Ergebnis steht in der
+Datei "xxx.p".
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "JA/pw loeschen"
+% SEITE 1
+---
+Wenn Sie die Frage bejahen, wird das Passwort gelöscht und das
+leere Passwort eingestellt. Anderenfalls bleibt das alte
+Passwort erhalten.
+---
+% SEITE 1 "JA/Allgemein"
+% ENDE
+% HILFE "EDIT/Allgemein"
+% SEITE 1
+--- EDITOR ---
+Mit dem Editor können Sie einen Text zeilenweise eingeben.
+Dabei können Sie den Cursor mit den Pfeiltasten bewegen. RUBOUT
+löscht ein Zeichen, RUBIN schaltet in den Einfügemodus um. Für
+weitere Informationen zum Editor s. EUMEL-Benutzerhandbuch. ESC
+'q' verläßt den Editor normal. Mit ESC 'h' wird die Funktion
+abgebrochen.
+---
+% ENDE
+% HILFE "EDIT/Feldnamen"
+% SEITE 1
+---
+Sie können hier die neuen Feldnamen in der gewünschten Reihen­
+folge untereinander eingeben. Jeder Feldname muß in einer
+Zeile stehen und ohne Anführungsstriche geschrieben sein.
+---
+% SEITE 1 "EDIT/Allgemein"
+% ENDE
+% HILFE "EDIT/Pruefbed"
+% SEITE 1
+---
+Sie können hier die Prüfbedingungen der Datei eingeben bzw.
+ändern. Die Prüfbedingungen sind ein ELAN-Programm. Da ELAN-
+Programme formatfrei sind, kann es sein, daß Ihr Programm beim
+nächsten Mal anders erscheint, als Sie es eingegeben haben.
+---
+% SEITE 1 "EDIT/Allgemein"
+% ENDE
+% HILFE "EDIT/Notizen"
+% SEITE 1
+---
+Sie können jetzt zu der angegebenen Datei beliebige Notizen
+eingeben bzw. ändern. Sie befinden sich im Editor und können
+die gleichen Funktionen wie bei der normalen Texteingabe
+verwenden.
+---
+% SEITE 1 "EDIT/Allgemein"
+% ENDE
+% HILFE "EDIT/Suchen"
+% SEITE 1
+---
+Sie können jetzt eine Selektionsbedingung einstellen. Dazu
+müssen Sie jeweils neben den Feldnamen eine Bedingung schrei­
+ben. Mögliche Bedingungen sind:
+ Text muß gleich sein
+ Text* muß mit Text anfangen
+ *Text muß mit Text enden
+ *Text* enthält Text
+ Text.. muß größer oder gleich Text sein
+ ..Text muß kleiner als Text sein oder mit Text anfangen
+ Text1..Text2 liegt zwischen den beiden Texten
+"--" verneint eine Bedingung. Weitere Bedingungen und Kombina­
+tion von Bedingungen s. EUDAS-Benutzerhandbuch.
+---
+% SEITE 1 "EDIT/Allgemein"
+% ENDE
+% HILFE "EDIT/Einfuegen"
+% SEITE 1
+---
+Sie können hier die Inhalte eines neuen Satzes eingeben, der
+vor dem aktuellen Satz eingefügt wird.
+Spezielle Tastenkombinationen:
+ ESC RUBOUT Rest der Zeile löschen
+ ESC RUBIN Zeile aufbrechen
+ ESC OBEN nach oben blättern
+ ESC UNTEN nach unten blättern
+ ESC '1' auf erste Zeile
+ ESC '9' auf letzte Zeile
+ ESC 'h' Abbruch, der Satz wird nicht eingefügt
+ ESC 'w' Beenden und gleich den nächsten Satz einfügen
+ ESC 'D' aktuelles Tagesdatum schreiben
+---
+% SEITE 1 "EDIT/Allgemein"
+% ENDE
+% HILFE "EDIT/Aendern"
+% SEITE 1
+---
+Sie können die Inhalte des aktuellen Satzes hier abändern.
+Spezielle Tastenkombinationen:
+ ESC RUBOUT Rest der Zeile löschen
+ ESC RUBIN Zeile aufbrechen
+ ESC OBEN nach oben blättern
+ ESC UNTEN nach unten blättern
+ ESC '1' auf erste Zeile
+ ESC '9' auf letzte Zeile
+ ESC 'h' Abbruch, der Satz bleibt unverändert
+ ESC 'w' Beenden und gleich den nächsten Satz ändern
+ ESC 'D' aktuelles Tagesdatum schreiben
+---
+% SEITE 1 "EDIT/Allgemein"
+% ENDE
+% HILFE "EDIT/Druckmuster"
+% SEITE 1 "EDIT/Allgemein"
+% ENDE
+% HILFE "EDIT/Verarbeite"
+% SEITE 1
+---
+Sie können hier eine Verarbeitungsvorschrift eingeben. Die
+Verarbeitungsvorschrift ist ein ELAN-Programm. Ein Feld wird
+geändert durch den Operator "V":
+ "Feldname" V "neuer Feldinhalt";
+Statt des neuen Feldinhalts kann auch ein beliebiger ELAN-Aus­
+druck angegeben werden. Mit
+ f ("Feldname")
+wird der Inhalt eines Feldes als Text geliefert.
+---
+% SEITE 1 "EDIT/Allgemein"
+% ENDE
+% HILFE "EDIT/Kopiermuster"
+% SEITE 1
+---
+Sie können das hier angegebene Kopiermuster verändern. Sollen
+Felder nicht kopiert werden, brauchen Sie nur die entsprechen­
+den Zeilen zu löschen. Soll eine Feld andere Inhalte bekommen,
+geben Sie in dem Ausdruck
+ "Feldname" K f ("Feldname");
+hinter dem K einen anderen ELAN-Ausdruck ein. Die Reihenfolge
+der K-Ausdrücke bestimmt die Reihenfolge der Feldnamen in der
+Zieldatei, wenn die Zieldatei noch nicht existierte.
+---
+% SEITE 1 "EDIT/Allgemein"
+% ENDE
+% HILFE "UEBERSICHT"
+% SEITE 1
+---
+In diesem Modus können Sie sich alle Sätze der Datei durch
+Blättern ansehen. Der aktuelle Satz ist jeweils markiert. Die
+eingestellte Suchbedingung wird beachtet. Mit den Pfeiltasten
+OBEN und UNTEN bewegen Sie sich vorwärts und rückwärts in der
+Datei. Mit HOP OBEN, HOP UNTEN und HOP RETURN blättern Sie wie
+im Editor. Mit ESC '1' gelangen Sie an den Anfang, mit ESC '9'
+an das Ende der Datei. Mit '+' und '-' können Sie die
+Markierung des aktuellen Satzes für spätere Verarbeitung
+ändern. Verlassen Sie die Übersicht mit ESC 'q'.
+---
+% ENDE
+% HILFE "SHOW/Uebersicht"
+% SEITE 1
+---
+In der gezeigten Dateiübersicht können Sie mit HOP OBEN und HOP
+UNTEN blättern, wenn nicht alle Dateien auf eine Seite passen.
+Verlassen Sie die Übersicht mit ESC 'q'.
+---
+% ENDE
+
diff --git a/app/eudas/4.3/src/pos.173 b/app/eudas/4.3/src/pos.173
new file mode 100644
index 0000000..a9706a3
--- /dev/null
+++ b/app/eudas/4.3/src/pos.173
@@ -0,0 +1,19 @@
+PACKET xpos DEFINES x pos :
+INT PROC x pos (TEXT CONST a, b, INT CONST c, d) :
+ pos (a, b, c, d)
+END PROC x pos;
+END PACKET x pos;
+PACKET pos 173 DEFINES pos:
+INT PROC pos (TEXT CONST a, b, INT CONST c, d) :
+ x pos (a, b, c, d+1)
+END PROC pos;
+END PACKET pos 173;
+PACKET add 173 DEFINES split line, reserve :
+PROC split line (FILE VAR f, INT CONST spalte, BOOL CONST dummy) :
+ split line (f, spalte)
+END PROC split line;
+PROC reserve (TEXT CONST modus, TASK CONST task) :
+ call (19, modus, task)
+END PROC reserve;
+END PACKET add 173;
+