summaryrefslogtreecommitdiff
path: root/app/gs.dialog
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2019-02-04 13:09:03 +0100
committerLars-Dominik Braun <lars@6xq.net>2019-02-04 13:09:03 +0100
commit04e68443040c7abad84d66477e98f93bed701760 (patch)
tree2b6202afae659e773bf6916157d23e83edfa44e3 /app/gs.dialog
downloadeumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.gz
eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.bz2
eumel-src-04e68443040c7abad84d66477e98f93bed701760.zip
Initial import
Diffstat (limited to 'app/gs.dialog')
-rw-r--r--app/gs.dialog/1.2/doc/gs-dialog handbuch.impressum89
-rw-r--r--app/gs.dialog/1.2/doc/gs-dialog-1107
-rw-r--r--app/gs.dialog/1.2/doc/gs-dialog-2215
-rw-r--r--app/gs.dialog/1.2/doc/gs-dialog-3683
-rw-r--r--app/gs.dialog/1.2/doc/gs-dialog-4672
-rw-r--r--app/gs.dialog/1.2/doc/gs-dialog-5176
-rw-r--r--app/gs.dialog/1.2/doc/gs-dialog-Inhaltsverzeichnis45
-rw-r--r--app/gs.dialog/1.2/source-disk1
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG 160
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG 277
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG 348
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG 471
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG 5118
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG 6102
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG 754
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG MENUKARTEN MANAGER28
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG MM-gen27
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG decompress150
-rw-r--r--app/gs.dialog/1.2/src/ls-DIALOG-gen34
-rw-r--r--app/gs.dialog/1.2/src/ls-MENUKARTE:Archivbin0 -> 40960 bytes
20 files changed, 2757 insertions, 0 deletions
diff --git a/app/gs.dialog/1.2/doc/gs-dialog handbuch.impressum b/app/gs.dialog/1.2/doc/gs-dialog handbuch.impressum
new file mode 100644
index 0000000..b470fe4
--- /dev/null
+++ b/app/gs.dialog/1.2/doc/gs-dialog handbuch.impressum
@@ -0,0 +1,89 @@
+____________________________________________________________________________
+
+
+#on("b")##on ("u")#
+#center#Betriebssystem E U M E L
+#off ("u")#
+
+
+#center#gs-Dialog
+
+
+
+
+#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 (4.0)##on("b")#
+#center#gs-Dialog
+
+
+#center#Benutzerhandbuch
+
+
+#center#Version 1.0
+
+
+#off("b")##center#copyright
+#center#Eva Latta-Weber
+#center#Software- und Hardware-Systeme, 1988
+#center#ERGOS GmbH, 1990
+#page#
+#block#
+#center#____________________________________________________________________________
+
+
+Copyright:  ERGOS GmbH   März 1990
+
+ Alle Rechte vorbehalten. Insbesondere ist die Überführung in
+ maschinenlesbare Form sowie das Speichern in Informations­
+ systemen, auch auszugsweise, nur mit schriftlicher Einwilligung
+ der ERGOS GmbH gestattet.
+
+
+#center#____________________________________________________________________________
+
+Es kann keine Gewähr übernommen werden, daß das Programm für eine
+bestimmte Anwendung geeignet ist. Die Verantwortung dafür liegt beim
+Anwender.
+
+Das Handbuch wurde mit größter Sorgfalt erstellt. Für die Korrektheit und
+Vollständigkeit der Angaben kann keine Gewähr übernommen werden. Das
+Handbuch kann jederzeit ohne Ankündigung geändert werden.
+
+Texterstellung :  Dieser Text wurde mit der ERGOS-L3 Textverarbeitung
+ erstellt und aufbereitet und auf einem Kyocera Laser­
+ drucker gedruckt.
+
+
+
+
+#center#___________________________________________________________________________
+
+
+
+Ergonomic Office Software GmbH
+
+Bergstr. 7 Telefon: (02241) 63075
+5200 Siegburg Teletex: 2627-2241413=ERGOS
+ Telefax: (02241) 63078
+
+
+#center#____________________________________________________________________________
+
+
diff --git a/app/gs.dialog/1.2/doc/gs-dialog-1 b/app/gs.dialog/1.2/doc/gs-dialog-1
new file mode 100644
index 0000000..59b98c3
--- /dev/null
+++ b/app/gs.dialog/1.2/doc/gs-dialog-1
@@ -0,0 +1,107 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (3)#
+#headodd#
+#center#gs-DIALOG#right#%
+
+#end#
+#headeven#
+%#center#gs-DIALOG
+
+#end#
+
+#center#1
+
+#center#Was kann gs-DIALOG?
+
+
+
+ In diesem Kapitel wollen wir Ihnen erläutern, was
+#on("b")#gs-DIALOG#off("b")# Ihnen für Vorteile bringen soll. Sie haben
+sicher schon mit einem Computer gearbeitet und sich
+mehrfach darüber geärgert, daß Sie mit jedem neuen Pro­
+gramm auch eine neue Bedienung erlernen müssen. Zwar
+sind Sie als EUMEL-Anwender schon sehr verwöhnt, da das
+System sehr homogen ist und bestimmte Systemelemente,
+wie z.B. der Editor, mit immer gleicher Bedienung immer
+wieder auftauchen. Für die jeweiligen Anwendungspro­
+gramme aber gibt es eine Reihe von Kommandos und Tasten­
+folgen, die Sie sich für die Bedienung merken müssen.
+Brauchen Sie Informationen zu den einzelnen Programm­
+teilen, so müssen Sie zumeist in (den gerade nicht griff­
+bereiten) Handbüchern nachschlagen.
+ Und der Anfänger? Er ist am härtesten betroffen! Er
+muß sich nicht nur mit der neuen Maschine auseinander­
+setzen, die technische Handhabung erlernen - von ihm
+erwartet man, daß er sich innerhalb kurzer Zeit eine Rei­
+he von Kommandos einprägt, die für die Bedienung des
+Grundsystems notwendig sind - und darüber hinaus noch
+die Kommandos für die verschiedenen Anwendungsprogram­
+me. Viele resignieren nach den ersten Gehversuchen.
+ Und der Programmierer? Viele Anwender haben keine
+Vorstellung davon, welche Arbeit in einem Programm
+steckt. Einen großen Teil seiner Arbeit verwendet der
+Programmierer darauf, die Benutzerschnittstelle zu ge­
+stalten - den Teil des Programms, mit dem der Anwender in
+Kontakt kommt, über den er mit dem Programm kommuni­
+ziert, einen Dialog führt. Die Gestaltung und Pflege der
+Benutzerschnittstelle kann dabei bis zu 50% der Gesamt­
+arbeit an einem Programm ausmachen.
+
+ #on("b")#gs-DIALOG#off("b")# ist entwickelt worden, um diese Nachteile zu
+beheben bzw. zumindest zu verringern. Grundelemente von
+#on("b")#gs-DIALOG#off("b")# sind die Pull-Down-Menus (Klappmenus), in de­
+nen die zur Verfügung stehenden Funktionen übersicht­
+lich zur Auswahl angeboten werden. So ist es möglich, daß
+eine Vielzahl von Funktionen verwaltet werden - ohne
+daß der Anwender den Überblick verliert. Dabei können zu
+jeder angebotenen Funktion noch Informationen abge­
+rufen werden, so daß ein Blättern in Handbüchern sich
+zumeist erübrigt.
+ Zunächst einmal ist #on("b")#gs-DIALOG#off("b")# gar kein eigenständiges
+Programm. Es ist vielmehr ein Baukastensystem, auf das
+andere Programme zugreifen können. Davon können sowohl
+der Programmierer und erst recht der Anwender profi­
+tieren:
+ Der Programmierer wird bei seiner Arbeit - insbeson­
+dere bei der Gestaltung der Benutzerschnittstelle we­
+sentlich entlastet, da er auf vorgefertigte Komponenten
+zurückgreifen kann. Er kann sich mehr auf die inhalt­
+liche Ausgestaltung seiner Programme konzentrieren.
+ Sie als Anwender profitieren von der #on("u")#einfachen#off("u")# und
+#on("u")#immer einheitlichen Bedienung#off("u")# solcher Programme. Aus
+den Menupunkten können Sie auf einfache Weise auswählen
+und den gewünschten Teil des Programms zur Ausführung
+bringen. Durch diese Bedienung wird der Aufwand, sich in
+ein neues Programmsystem einzuarbeiten, erheblich redu­
+ziert. Die zur Verfügung stehenden Programmfunktionen
+können effektiver ausgenutzt werden, da sie jederzeit
+offensichtlich sind. Informationen zu den einzelnen Pro­
+grammpunkten können Sie jederzeit abrufen, d.h. zumeist
+können Sie auf ein Nachschlagen in den Handbüchern ver­
+zichten.
+ #on("b")#gs-DIALOG#off("b")# ist aber nicht nur ein Baukastensystem, auf
+das andere Programme zugreifen können. Bei nahezu jeder
+Anwendung ist es notwendig, Dateien auf das Archiv zu
+schreiben oder von dort zu holen. Aus diesem Grunde ist
+eine leistungsfähige, komfortable Archivbehandlung in
+das Programmsystem integriert.
+ Ein Austausch von Dateien ist aber nicht nur mit dem
+Archiv möglich. Sie können auch mit anderen Tasks inner­
+halb Ihres Systems (z.B. mit der Vatertask) oder sogar -
+sofern installiert - mit einer Task irgendwo innerhalb
+des EUMEL-Netzes Dateien austauschen. Daneben werden
+noch Funktionen angeboten, die den Umgang mit den Da­
+teien vereinfachen (Verzeichnis, Umbenennen, Kopieren,
+Löschen, Aufräumen etc.).
+ Diese Funktionen stehen Ihnen unabhängig von ande­
+ren Programmen zu Verfügung, sobald Sie #on("b")#gs-DIALOG#off("b")# in­
+stalliert haben. Andererseits finden Sie diese Funktionen
+in immer gleicher Form auch in den meisten Programmen,
+die auf der Basis von #on("b")#gs-DIALOG#off("b")# entwickelt worden sind
+und entwickelt werden.
+
+
+
+
+
diff --git a/app/gs.dialog/1.2/doc/gs-dialog-2 b/app/gs.dialog/1.2/doc/gs-dialog-2
new file mode 100644
index 0000000..a25d35d
--- /dev/null
+++ b/app/gs.dialog/1.2/doc/gs-dialog-2
@@ -0,0 +1,215 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (6)#
+#headodd#
+#center#gs-DIALOG#right#%
+
+#end#
+#headeven#
+%#center#gs-DIALOG
+
+#end#
+
+#center#2
+
+#center#Installation von gs-DIALOG
+
+
+
+ Bevor Sie #on("b")#gs-DIALOG#off("b")# auf Ihrem System benutzen kön­
+nen, müssen Sie das Programm zunächst installieren. Wenn
+#on("b")#gs-DIALOG#off("b")# auf Ihrem System schon zur Verfügung steht,
+können Sie dieses Kapitel ruhig überspringen.
+
+
+2.1 Voraussetzungen:
+
+ Um #on("b")#gs-DIALOG#off("b")# auf Ihrem Computer betreiben zu können,
+muß das EUMEL-Betriebssystem installiert sein. #on("b")#gs-DIALOG#off("b")#
+setzt die Multi-User-Version voraus und ist lauffähig ab
+Version 1.7.5.
+
+
+2.2 Lieferumfang
+
+ #on("b")#gs-DIALOG#off("b")# wird auf einer Diskette geliefert, die alle
+notwendigen Programme enthält. Um den Inhalt der Dis­
+kette 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 ("gs-DIALOG"); list (archive);
+ release (archive) <RETURN>
+
+ Anschließend erscheint eine Übersicht der auf dem
+Archiv vorhandenen Programme. Folgende Programme soll­
+ten sich in der Übersicht befinden:
+
+ "gs-DIALOG MENUKARTEN MANAGER"
+ "gs-DIALOG MM/gen"
+ "gs-DIALOG 1"
+ "gs-DIALOG 2"
+ "gs-DIALOG 3"
+ "gs-DIALOG 4"
+ "gs-DIALOG 5"
+ "gs-DIALOG 6"
+ "gs-DIALOG 7"
+ "gs-MENUKARTE:Archiv"
+ "gs-DIALOG/gen"
+
+ Eventuell können noch weitere Namen auf der Diskette
+vorhanden sein. Wenn Sie den Inhalt der Diskette kon­
+trolliert haben und diese Programme auf der Diskette
+vorhanden sind, können Sie #on("b")#gs-DIALOG#off("b")# installieren.
+ Sollten Sie statt der Übersicht eine Fehlermeldung
+erhalten, überprüfen Sie bitte, ob die Diskette das rich­
+tige Format besitzt oder ob ihr Diskettenlaufwerk Pro­
+bleme macht. Sollten dagegen Programme fehlen, so rekla­
+mieren Sie die Diskette.
+
+
+2.3 Installation
+
+Die Installation erfolgt in #on("u")#zwei Schritten#off("u")#:
+ #on("u")#Zunächst#off("u")# muß eine Task eingerichtet werden, in der
+später alle Menukarten aufbewahrt werden. Diese Menu­
+karten enthalten alle Informationen, die #on("b")#gs-DIALOG#off("b")# für
+den Aufbau und den Umgang mit den Menus benötigt. #on("u")#Der
+Name dieser Task ist vorgegeben#off("u")# ('gs-MENUKARTEN'), da
+#on("b")#gs-DIALOG#off("b")# später auf diese Task zugreift. Sollten Sie
+hier einen anderen Namen wählen, so wird die Task vom
+Generierungsprogramm automatisch umbenannt, um die
+Funktionsfähigkeit von #on("b")#gs-DIALOG#off("b")# zu garantieren!
+ #on("u")#Anschließend#off("u")# kann das Programmsystem selbst in einer
+anderen Task installiert werden. Wie nehmen hier an, daß
+die Task den Namen 'MENU' erhalten soll. (Sie können für
+diese Task auch einen beliebigen anderen Namen wählen.)
+
+
+1) #on("u")#Einrichten der 'Menukarten - Task'#off("u")#
+
+#on("b")#
+ <SV> (Supervisor - Taste)
+#off("b")#
+
+ --> gib supervisor kommando:
+
+#on("b")#
+ begin ("gs-MENUKARTEN") <RETURN>
+#off("b")#
+
+ --> gib kommando:
+
+
+ (Arbeiten mehrere Personen mit dem Computer, dann ist
+es sinnvoll, diese Task vor unbefugtem Zugriff durch ein
+Passwort zu schützen. Wie das gemacht wird, können Sie in
+Ihrem EUMEL-Benutzerhandbuch erfahren.)
+ Legen Sie dann die Archivdiskette ein, auf der sich
+#on("b")#gs-DIALOG#off("b")# befindet, und geben Sie die folgenden Komman­
+dos:
+
+#on("b")#
+ archive("gs-DIALOG") <RETURN>
+
+ fetch("gs-DIALOG MM/gen",archive) <RETURN>
+
+ run <RETURN>
+#off("b")#
+
+ Sie haben damit das Generatorprogramm gestartet; die
+Installation wird automatisch durchgeführt. Lassen Sie
+während des gesamten Vorgangs die Archivdiskette einge­
+legt. Die Generierung ist beendet, wenn der EUMEL-
+Eingangsbildschirm erscheint.
+
+2) #on("u")#Installation des Programmsystems#off("u")#
+
+
+#on("b")#
+ <SV> (Supervisor - Taste)
+#off("b")#
+
+ --> gib supervisor kommando:
+
+#on("b")#
+ begin ("MENU") <RETURN>
+#off("b")#
+
+ --> gib kommando:
+
+
+ (Sichern Sie, wenn gewünscht, auch diese Task durch
+ein Passwort vor unbefugtem Zugriff.)
+ Legen Sie die #on("b")#gs-DIALOG#off("b")#-Archivdiskette ein und geben
+Sie die folgenden Kommandos:
+
+#on("b")#
+ archive("gs-DIALOG") <RETURN>
+
+ fetch("gs-DIALOG/gen",archive) <RETURN>
+
+ run <RETURN>
+#off("b")#
+
+ Sie haben damit das Generatorprogramm gestartet. Die
+Generierung benötigt jetzt aber wesentlich mehr Zeit als
+die zuvor! Lassen Sie während des gesamten Vorgangs die
+Archivdiskette eingelegt. Die Generierung ist beendet,
+wenn der EUMEL-Eingangsbildschirm erscheint. Die Task,
+in der die Generierung stattfindet, wird automatisch zur
+Managertask, das heißt, daß Söhne von ihr eingerichtet
+werden können. Damit ist die Installation von #on("b")#gs-DIALOG#off("b")#
+abgeschlossen - in allen Sohn- und Enkeltasks können
+Sie nun mit dem Kommando:
+
+#on("b")#
+ archiv <RETURN>
+#off("b")#
+
+die Archivverwaltung aufrufen.
+
+
+2.4 Nutzung der 'Semi-Graphik-Zeichen'
+
+ #on("b")#gs-DIALOG#off("b")# verwendet beim Aufbau der Rahmen inner­
+halb der Menus nur solche Zeichen, die auf jedem Computer
+zur Verfügung stehen. Die meisten Computer/Terminals
+verfügen aber über einen Zeichensatz, der es erlaubt,
+solche Rahmen "schöner" darzustellen. #on("b")#gs-DIALOG#off("b")# ist dar­
+auf vorbereitet, diese Eigenschaften auszunutzen.
+ Allerdings ist der Aufruf dieser Graphikzeichen nicht
+einheitlich festgelegt. Verfügen Sie über einen Computer,
+der 'IBM - kompatibel' ist, oder über ein Terminal 'Beehive
+FT20', dann können Sie die Graphikzeichen ganz einfach
+nutzen, denn dafür sind im Programm bereits Befehle vor­
+bereitet.
+
+ibm  graphic char <RETURN> - Mit diesem Befehl stel­
+ len Sie für #on("b")#gs-DIALOG#off("b")#
+ den 'IBM - Graphikzei­
+ chensatz' ein.
+
+ft20 graphic char <RETURN> - Mit diesem Befehl stel­
+ len Sie für #on("b")#gs-DIALOG#off("b")#
+ den 'Beehive FT20 -
+ Graphikzeichensatz'
+ ein.
+
+std  graphic char <RETURN> - Mit diesem Befehl stel­
+ len Sie wieder den
+ 'Standard - Graphik­
+ zeichensatz' ein.
+
+ Nehmen Sie eine solche Einstellung in einer Task vor,
+so erben alle Sohn- und Enkeltasks diese Einstellung. Sie
+können auch in verschiedenen Task unterschiedliche Ein­
+stellungen wählen.
+
+ Verfügen Sie über andere Computer- oder Terminalty­
+pen, die Grapikzeichen darstellen können, so können Sie
+diese ebenfalls nutzen. Sie müßten sich allerdings ein
+kleines ELAN-Programm schreiben. Aber auch das ist ganz
+einfach, da #on("b")#gs-DIALOG#off("b")# auch darauf vorbereitet ist. Wie
+das gemacht wird, wird aber erst in Kapitel 5 erläutert.
+
diff --git a/app/gs.dialog/1.2/doc/gs-dialog-3 b/app/gs.dialog/1.2/doc/gs-dialog-3
new file mode 100644
index 0000000..044720b
--- /dev/null
+++ b/app/gs.dialog/1.2/doc/gs-dialog-3
@@ -0,0 +1,683 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (12)#
+#headodd#
+#center#gs-DIALOG#right#%
+
+#end#
+#headeven#
+%#center#gs-DIALOG
+
+#end#
+
+#center#3
+
+#center#Umgang mit den Menus
+
+
+#center#Eine Beispielsitzung
+
+
+ Wie schon oben erwähnt, ist in #on("b")#gs-DIALOG#off("b")# eine Archiv­
+verwaltung integriert. Anhand dieses Programms möchten
+wir den Umgang mit und die Arbeitsweise von #on("b")#gs-DIALOG#off("b")#
+vorstellen. Als Beispiel wollen wir eine Datei von einer
+Ihrer Archivdisketten ins System holen.
+ Zunächst zu den Begriffen: Die Disketten, die Sie in den
+Rechner einlegen können, um z.B. Dateien (und Programme)
+von anderen Computern übernehmen zu können, bezeichnet
+man als #on("u")#Archiv#off("u")#. Das Archiv (die Diskette) wird benutzt, um
+Daten und Programme vor Beschädigung und Verlust zu
+sichern. Es ist sehr wichtig, daß Sie Ihre Programme und
+Daten auf Archivdisketten sichern, denn ein einziger
+Hardwarefehler könnte die Arbeit von vielen Stunden
+zunichte machen.
+ Da man diese Operationen, d.h. Programme und Daten
+auf Disketten zu sichern und wieder von dort zu holen,
+sehr häufig benötigt, ist die Archivbehandlung fest in
+das #on("b")#gs-DIALOG#off("b")#-Programmsystem integriert und Bestandteil
+nahezu jeden Programms, das unter #on("b")#gs-DIALOG#off("b")# entwickelt
+wird. Unabhängig von anderen Programmen kann die
+Archivbehandlung aber auch benutzt werden, sobald
+#on("b")#gs-DIALOG#off("b")# installiert ist. Das wollen wir jetzt auspro­
+bieren.
+
+
+3.1 Aufruf der Archivverwaltung:
+
+ Richten Sie eine Task als Sohn der Task ein, in der Sie
+#on("b")#gs-DIALOG#off("b")# installiert haben. Nehmen wir hier an, die neue
+Task soll den Namen 'TEST' erhalten - die Task, in der
+#on("b")#gs-DIALOG#off("b")# installiert ist, habe den Namen 'MENU'.
+
+#on("b")#
+ <SV> (Supervisor - Taste)
+#off("b")#
+ --> gib supervisor kommando:
+#on("b")#
+ begin ("TEST","MENU") <RETURN>
+#off("b")#
+
+ --> gib kommando:
+#on("b")#
+ archiv <RETURN>
+#off("b")#
+
+ Mit dem Befehl 'archiv' können Sie jederzeit die Archiv­
+behandlung aufrufen - es erscheint dann folgendes Menu:
+
+
+#on("b")#
+ARCHIV: Dateien Archiv
+-+-------------------+----------------------------------------------------
+ | v Verzeichnis |
+ | --------------- |
+ | l Löschen |
+ | d Drucken |
+ | --------------- |
+ | k Kopieren |
+ | u Umbenennen |
+ | --------------- |
+ | s Speicherplatz |
+ | a Aufräumen |
+ +-------------------+
+
+
+
+
+
+
+
+--------------------------------------------------------------------------
+Info:<ESC><?>/<?> Wahl:<Pfeile> Ausführen:<RETURN> Verlassen:<ESC><q>
+#off("b")#
+
+
+3.2 Bedienung des Menusystems
+
+- Aufbau der Menus (Bildschirmaufbau)
+
+ Ein Menu ist ein Angebot von Funktionen, die ein Pro­
+gramm ausführen kann. Aus diesem Angebot kann der Pro­
+grammbenutzer auswählen. In diesem Sinne ist ein solches
+Menu durchaus vergleichbar mit einer Speisenkarte in
+einem Restaurant.
+ Jedes Menu unter #on("b")#gs-DIALOG#off("b")# besitzt eine 'Kopfzeile'
+und eine 'Fußzeile'. In der Kopfzeile ist ganz links der
+Name des Programms angegeben, mit dem Sie gerade arbei­
+ten. Daneben enthält die Kopfzeile die 'Oberbegriffe', mit
+denen die einzelnen Untermenus angesprochen werden
+können. Maximal können hier zehn Oberbegriffe auftau­
+chen - in unserem Beispiel sind es nur zwei.
+ Besondere Bedeutung für die Bedienung der Menus
+kommt der Fußzeile zu. Einerseits wird hier jeweils ange­
+zeigt, welche Tasten Sie zum jeweiligen Zeitpunkt benut­
+zen können, andererseits erhalten Sie über diese Fußzeile
+auch Informationen, wenn #on("b")#gs-DIALOG#off("b")# "mit sich selbst be­
+schäftigt ist", d.h. Operationen ausführt. Wissen Sie also
+nicht mehr weiter, so schauen Sie zuerst auf die Fußzeile
+und beachten Sie die hier stehenden Informationen.
+ Im Bereich zwischen der Kopf- und Fußzeile werden die
+Untermenus ausgegeben. Dieser Bereich wird auch dazu
+benutzt, um Informationen an den Benutzer einzublenden,
+Fragen an ihn zu richten, ihn aus einem Angebot (z.B. von
+Dateien) auswählen zu lassen und vieles mehr.
+ Treiben wir den Vergleich mit der Speisenkarte in ei­
+nem Restaurant noch ein wenig weiter. Bei einem großen
+Angebot kann eine Speisenkarte recht umfangreich wer­
+den. Denken Sie beispielsweise an eine Speisenkarte in
+einem chinesischen Restaurant. Dazu sind neben den an­
+gebotenen Gerichten oft noch Zusatzinformationen (Zube­
+reitungsart, Zutaten etc.) angegeben. Um dem Gast die Aus­
+wahl zu erleichtern, ist die Speisenkarte aber zumeist
+untergliedert; man findet Suppen, warme Vorspeisen, kalte
+Vorspeisen, Gerichte mit Schweinefleisch, mit Rindfleisch,
+mit Geflügel, mit Fisch etc.
+ Ein Computerprogramm kann, ebenso wie ein Restau­
+rant, dem Benutzer ein großes Angebot (an Programmfunk­
+tionen) machen. Von großem Nachteil ist allerdings, daß
+ein Computerbildschirm - im Gegensatz zu einer umfang­
+reichen Speisenkarte - viel zu klein ist, um alle Angebote
+und Informationen gleichzeitig darstellen zu können.
+Außerdem würde ein nahezu vollständig beschriebener
+Bildschirm sehr unübersichtlich sein.
+ Aus diesem Grunde haben wir uns entschlossen, immer
+nur einen Teil des vorhandenen Angebotes an Funktionen
+und der vorhandenen Informationen anzuzeigen - immer
+nur soviel, daß Sie sich auf dem Bildschirm orientieren
+können und den Überblick nicht verlieren. Dazu haben Sie
+die Möglichkeit, jeweils zu bestimmen, auf welche Infor­
+mationen Sie Ihre Aufmerksamkeit richten wollen, was Sie
+angezeigt bekommen möchten.
+
+
+- Auswahl der Menupunkte
+
+ Zu jedem Oberbegriff in der Kopfzeile gehört eine
+Liste von Funktionen, die das Programm dazu zur Auswahl
+anbietet. Allerdings ist immer nur eine Liste (ein Unter­
+menu) sichtbar. Das sichtbare Untermenu gehört immer zu
+dem Oberbegriff in der Kopfzeile, der invers dargestellt
+ist. Wir wollen uns zunächst das Untermenu zum zweiten
+Oberbegriff ('Archiv') anzeigen lassen. Zum Wechsel zwi­
+schen den Oberbegriffen in der Kopfzeile benutzt man die
+Pfeiltasten <links> oder <rechts>. Probieren Sie es einmal
+aus. Es erscheint das folgende Bild auf dem Bildschirm:
+
+
+#on("b")#
+ARCHIV: Dateien Archiv
+-------+-------------------------+----------------------------------------
+ | r Reservieren |
+ | - Neue Diskette |
+ | --------------------- |
+ | - Schreiben |
+ | - Checken |
+ | - Kombination |
+ | - Holen/Lesen |
+ | - Löschen |
+ | --------------------- |
+ | - Verzeichnis |
+ | - Drucken |
+ | --------------------- |
+ | i Initialisieren |
+ | z Zieltask einstellen |
+ +-------------------------+ +---------------------+
+ | Dateiaustausch mit: |
+ | Archiv |
+ | Archivname: |
+ | --- |
+ +---------------------+
+--------------------------------------------------------------------------
+Info:<ESC><?>/<?> Wahl:<Pfeile> Ausführen:<RETURN> Verlassen:<ESC><q>
+#off("b")#
+
+
+ Sie können jetzt sehen, daß ein anderer Oberbegriff in
+der Kopfzeile aktiviert, d.h. invers dargestellt ist. Dane­
+ben wurde noch das sichtbare Untermenu "eingeklappt"
+und ein anderes "ausgeklappt". Man könnte die Unterme­
+nus deshalb auch als 'Klappmenus' bezeichnen - gebräuch­
+lich ist allerdings die Bezeichnung 'Pull-Down-Menus', an
+die wir uns auch halten wollen.
+
+ Sicher haben Sie bemerkt, daß es einen Augenblick
+gedauert hat, bis das Pull-Down-Menu unter dem Menu­
+punkt 'Archiv' erschien. Das hat auch seine Ursache, denn
+#on("b")#gs-DIALOG#off("b")# muß einige Einstellungen vornehmen, die etwas
+Zeit in Anspruch nehmen. Neben dem Pull-Down-Menu ist
+unten rechts auf dem Bildschirm noch ein 'Kasten' sicht­
+bar geworden. Er dient Ihnen zur Information. Da
+#on("b")#gs-DIALOG#off("b")# nicht nur den Austausch von Dateien mit dem
+Archiv, sondern auch mit anderen Tasks ermöglicht, wird
+hier immer angezeigt, mit welcher Task der Dateiaus­
+tausch zur Zeit erfolgt. Ist das Archiv eingestellt, so
+wird auch noch der Name der Diskette angezeigt - aber
+erst wenn das Archiv angemeldet worden ist, was ja mo­
+mentan noch nicht der Fall ist. Deshalb werden nur drei
+Striche ausgegeben.
+ Sicher ist Ihnen das Grundprinzip der Menubehand­
+lung schon klar geworden: Sie müssen sich zuerst inner­
+halb der Kopfzeile für einen Oberbegriff entscheiden.
+Zum gewählten Oberbegriff wird dann jeweils das Angebot
+an zugehörigen Programmfunktionen im darunterstehen­
+den Pull-Down-Menu angezeigt. Dieses Vorgehen hat den
+Vorteil, daß man den kleinen Bildschirm im Prinzip "mehr­
+fach nutzen kann". Die Pull-Down-Menus können sich ja
+ruhig überlappen. Sie merken es gar nicht, da ja nicht
+alle gleichzeitig angezeigt werden.
+ Noch ein Vorteil ist da, Sie können sich auf den Teil
+konzentrieren, für den Sie sich gerade interessieren und
+werden nicht durch andere Informationen abgelenkt. An­
+dererseits können Sie jederzeit auch an die Funktionen
+und Informationen gelangen, die gerade nicht sichtbar
+sind.
+ Sie haben sicher bemerkt, daß nicht nur innerhalb der
+Kopfzeile ein Begriff invers dargestellt ist, sondern
+auch einer innerhalb jedes Pull-Down-Menus. Nachdem man
+sich für einen Oberbegriff entschieden hat, kann man
+nämlich noch zwischen den Funktionen innerhalb des
+Pull-Down-Menus wählen.
+ Da das Pull-Down-Menu zum Oberbegriff 'Archiv' noch
+einige Besonderheiten aufweist, wollen wir uns die Funk­
+tionsweise zuerst am Pull-Down-Menu unter dem Oberbe­
+griff 'Dateien' verdeutlichen. Bitte wechseln Sie deshalb
+durch Betätigung der Pfeiltaste <links> oder <rechts> zum
+ersten Pull-Down-Menu zurück.
+ Ähnlich wie in der Kopfzeile, können Sie auch inner­
+halb des Pull-Down-Menus zu einem anderen Punkt wech­
+seln. Das geschieht durch die Pfeiltasten <hoch> und
+<runter>. Dabei werden 'Trennlinien' innerhalb des Pull-
+Down-Menus, die nur der Untergliederung dienen, über­
+sprungen. Vom obersten Menupunkt gelangt man direkt
+zum untersten und umgekehrt. Probieren Sie es einmal
+aus.
+
+
+- Informationen zu einem Menupunkt.
+
+ Zu jedem Punkt eines Pull-Down-Menus können Sie In­
+formationen abrufen. Das ist ganz einfach, denn Sie
+brauchen sich nur auf den gewünschten Menupunkt zu
+begeben (die Pfeiltasten so betätigen, bis der betreffende
+Menupunkt im Pull-Down-Menu invers dargestellt wird).
+Anschließend betätigen Sie die Fragezeichentaste (<?>).
+ Auf dem Bildschirm erscheint ein Kasten in den die
+Informationen zum Menupunkt eingetragen sind. Zwar wird
+dadurch ein Teil des Bildschirms überschrieben, doch kei­
+ne Angst - sobald Sie auf irgendeine Taste tippen, wird
+der alte Bildschirmzustand wieder hergestellt! Ebenso wie
+die Pull-Down-Menus sind diese Informationen normaler­
+weise verborgen. Auf Anforderung werden sie aber sicht­
+bar - ja es wäre gar nicht möglich alle vorhandenen In­
+formationen gleichzeitig auf dem Bildschirm darzustel­
+len. Es wäre auch unsinnig, denn man benötigt diese In­
+formationen zumeist nur, wenn man sich in das Programm
+einarbeitet. Später, wenn Ihnen der Umgang mit dem Pro­
+gramm vertraut ist, sind diese Informationen überflüssig
+und würden, wenn sie immer sichtbar wären, nur stören.
+
+
+- Informationen zur Bedienung des Menus
+
+ Alles das, was hier ausführlich beschrieben ist, kön­
+nen Sie auch in Kurzform auf dem Bildschirm erfahren,
+denn auch die Informationen, wie das Menu bedient wird,
+sind jeweils im Menu vorhanden. Möchten Sie diese Infor­
+mationen auf dem Bildschirm sehen, so tippen Sie die
+Tastenfolge <ESC><?>, d.h. erst die Taste 'ESC' und dann die
+Fragezeichentaste. Danach erscheint folgender Kasten
+auf dem Bildschirm:
+
+#on("b")#
+ +---------------------------------------+
+ | gs-DIALOG |
+ | |
+ | e ... Erläuterungen (allgemein) |
+ | w ... Wahl eines Menupunktes |
+ | a ... Aktivieren des Menupunktes |
+ | b ... Besondere Tasten / Menuende |
+ | |
+ | z ... Zurück in das Menu |
+ | |
+ | e w a b z |
+ +---------------------------------------+
+#off("b")#
+
+ Wenngleich die Informationen kurz gefaßt sind, so
+haben sie doch nicht alle gleichzeitig auf dem Bildschirm
+Platz. Aus diesem Grunde werden Sie aufgefordert, sich
+weiter zu entscheiden, welche Informationen Sie haben
+möchten. Sie können zwischen mehreren Alternativen wäh­
+len. Die Reihenfolge spielt keine Rolle; Sie können auch
+Informationen mehrmals aufrufen.
+ Der Aufruf kann auf zweierlei Weise erfolgen: Entwe­
+der Sie bewegen mit den Pfeiltasten <links> oder <rechts>
+die Markierung in der letzten Zeile des Kastens auf den
+Buchstaben, der vor dem von Ihnen gewünschten Punkt
+steht und tippen anschließend auf die <RETURN>-Taste
+oder Sie tippen direkt die entsprechende Buchstabentaste
+(z.B. <e>). Beide Vorgehensweisen sind zulässig und haben
+die gleiche Wirkung.
+ Daraufhin werden die gewünschten Informationen
+sichtbar. Durch Tippen irgendeiner Taste verschwinden
+die Informationen wieder vom Bildschirm und sichtbar
+wird wieder der oben abgebildete 'Verteiler'. Erst wenn
+man den Punkt 'z ... Zurück in das Menu' wählt, verschwin­
+det auch dieser Kasten und man gelangt zurück in das
+Menu.
+
+
+- Aktivierbare und nicht aktivierbare Menupunkte
+
+ Wir wollen jetzt endlich unserer Absicht nachgehen,
+eine Datei vom Archiv zu holen. Dazu wechseln wir zuerst
+wieder zum Oberbegriff 'Archiv' in der Kopfzeile. Nach
+kurzer Zeit erscheint das Ihnen schon bekannte Pull-
+Down-Menu. Wenn Sie hier versuchen, die einzelnen Menu­
+punkte innerhalb des Pull-Down-Menus anzusteuern, so
+werden Sie feststellen, daß das nicht möglich ist. Alle
+Menupunkte, die ein Minuszeichen ('-') vor der Bezeichnung
+haben, können nicht angewählt werden. Diese Menupunkte
+sind zur Zeit nicht aktivierbar. Solche Menupunkte kön­
+nen in Menus häufiger auftreten.
+ Das kann mehrere Ursachen haben: Einerseits könnte
+auf diese Weise ein Programmierer ein komplettes Menu
+entwerfen, das schon alle Funktionen zeigt, wenn auch die
+zugehörigen Programme dazu noch nicht fertig sind. Das
+ist aber in unserem Falle nicht so. Hier ist die Ursache
+eine andere: Bevor man im EUMEL-System auf das Archiv­
+laufwerk zugreifen kann, muß man es erst für sich re­
+servieren. Dadurch wird sichergestellt, daß nicht gleich­
+zeitig mehrere Benutzer auf eine Archivdiskette zugrei­
+fen und ggf. Dateien unbeabsichtigt zerstören. Erst wenn
+das Laufwerk reserviert worden ist, kann man auf die
+Diskette zugreifen. Das wird im Menu durch die nicht ak­
+tivierbaren Punkte zum Ausdruck gebracht.
+
+
+- Aktivieren von Menupunkten
+
+ Wir müssen also zuerst das Archiv reservieren. Auch
+hier gibt es (zumeist) zwei Möglichkeiten, den gewünsch­
+ten Menupunkt zu aktivieren. Entweder Sie sorgen durch
+Bedienung der Pfeiltasten dafür, daß der gewünschte
+Menupunkt invers dargestellt wird und betätigen an­
+schließend die <RETURN>-Taste oder - sofern vor dem Me­
+nupunkt ein einzelner Buchstabe oder eine Ziffer aufge­
+listet ist - tippen Sie einfach auf die zugehörige Buch­
+staben- oder Zifferntaste. Tippen Sie hier die Taste <r>.
+ Warten Sie einen Moment, denn es wird überprüft, ob
+das Laufwerk von einer anderen Task benutzt wird. Ist
+dies der Fall, erhalten Sie darüber auf dem Bildschirm
+eine Meldung. Ansonsten wird an Sie die Frage gerichtet,
+ob die Diskette eingelegt ist. Wenn diese Frage erscheint,
+befindet sich das Laufwerk schon "in Ihrem Besitz". Erst
+jetzt ist es sinnvoll, wenn auch andere auf das Laufwerk
+zugreifen können, die Diskette in das Laufwerk zu legen.
+Erst wenn die Frage auf dem Bildschirm erscheint, können
+Sie sicher sein, daß keine andere Task mehr auf das Lauf­
+werk zugreifen kann. Legen Sie also beim Erscheinen der
+Frage eine Ihrer EUMEL-Archivdisketten in das Laufwerk
+und bejahen Sie anschließend die gestellte Frage, indem
+Sie die Taste <j> tippen. (Sie können aber auch - wie schon
+in vorausgehenden Situationen - die Inversdarstellung
+innerhalb des Kastens, in dem die Frage auf dem Bild­
+schirm dargestellt wird, auf das 'Ja' positionieren und
+anschließend die <RETURN>-Taste tippen.)
+ #on("b")#gs-DIALOG#off("b")# ermittelt jetzt den Namen der eingelegten
+Diskette und zeigt diesen im Kasten rechts unten auf dem
+Bildschirm an. Außerdem werden die zuvor nicht aktiver­
+baren Punkte aktivierbar gemacht. Das kann man daran
+erkennen, daß auf dem Bildschirm die Minuszeichen vor
+den betreffenden Menupunkten verschwinden (und Buch­
+staben sichtbar werden).
+ Lassen Sie sich zunächst ein Inhaltsverzeichnis der
+Diskette anzeigen. Dazu brauchen Sie nur den Menupunkt
+'v Verzeichnis' wählen. Wie das gemacht wird wissen Sie ja
+schon. Sie können dabei beobachten, daß vor dem Menu­
+punkt das bisherige Zeichen verschwindet und ein Stern
+(*) sichtbar wird. Daran kann man erkennen, daß #on("b")#gs-DIALOG#off("b")#
+den Auftrag bereits ausführt.
+ Es dauert einen Moment, bis das Verzeichnis erstellt
+ist - anschließend wird es auf dem Bildschirm ausgegeben.
+Paßt das Verzeichnis nicht vollständig auf den Bild­
+schirm, so können Sie sich darin bewegen, blättern etc.,
+wie Sie es aus dem Editor gewohnt sind. Ebenso wird das
+Verzeichnis auch wie der Editor verlassen - durch die
+Tastenfolge <ESC><q> (das wird übrigens auch auf dem
+Bildschirm angezeigt!).
+
+
+- Dateiauswahl
+
+ Sie sollen jetzt eine Datei von der Archivdiskette in
+das System holen, d.h. genauer gesagt von der Diskette
+kopieren. Aktivieren Sie also auf gewohnte Weise den
+Menupunkt 'h Holen/Lesen'. Warten Sie anschließend einen
+Moment, denn #on("b")#gs-DIALOG#off("b")# erstellt eine Liste aller vorhan­
+denen Dateien auf der Diskette und bietet Sie Ihnen an­
+schließend so an, daß Sie komfortabel eine Auswahl tref­
+fen können.
+ Haben Sie die #on("b")#gs-DIALOG#off("b")#-Archivdiskette eingelegt, so
+zeigt sich etwa der folgende Bildschirm:
+
+
+#on("b")#
+ARCHIV: Dateien Archiv
+-------+-------------------------+--------------------------------------
+ +--------------------------------------------------------------------+
+ | Dateien holen/lesen (Archiv) |
+ | |
+ | Bitte alle Dateien ankreuzen, die 'geholt' werden sollen! |
+ |====================================================================|
+ | Auswahl m e h r e r e r Dateien durch Ankreuzen |
+ |....................................................................|
+ |==> o gs-DIALOG MENUKARTEN MANAGER" |
+ | o gs-DIALOG MM/gen |
+ | o gs-DIALOG 1 |
+ | o gs-DIALOG 2 |
+ | o gs-DIALOG 3 |
+ | o gs-DIALOG 4 |
+ | o gs-DIALOG 5 |
+ | o gs-DIALOG 6 |
+ | o gs-DIALOG 7 |
+ | o gs-MENUKARTE:Archiv |
+ |..................................................Weitere Dateien!..|
+ +--------------------------------------------------------------------+
+--|Info: <?> Fertig: <ESC><q> Abbrechen: <ESC><h> |
+In+--------------------------------------------------------------------+
+#off("b")#
+
+
+ Auf dem Archiv sind mehrere Dateien vorhanden. Alle
+werden Ihnen zur Auswahl angeboten. In der obersten
+Zeile wird zur Kontrolle die Funktion angezeigt, die Sie
+gerade gewählt haben. Sie können jetzt die Dateien, auf
+die sich die Operation beziehen sollen, in beliebiger Rei­
+henfolge ankreuzen. Wenn Sie abschließend die Auswahl
+verlassen, werden die Dateien in der Ankreuzreihenfolge
+bearbeitet (hier in die Task geholt).
+ Die Handhabung der Dateiauswahl ist ganz einfach. Der
+Pfeil gibt jeweils an, welche Datei aktuell behandelt
+wird. Zunächst wird vor den Namen jeweils nur ein 'o' aus­
+gegeben. Mit den Pfeiltasten <hoch> und <runter> können
+Sie nun mit dem Pfeil vor den Namen fahren, den Sie an­
+kreuzen möchten. Tippen Sie dann die Taste <x> oder
+<RETURN>, so erscheint in der Anzeige ein 'x' vor dem Na­
+men und eine Zahl, die angibt, die wievielte Datei Sie an­
+gekreuzt haben. Haben Sie sich versehen, so können Sie
+das Kreuz auch wieder löschen. Dazu fahren Sie einfach
+erneut vor den betreffenden Namen, wo ja jetzt ein 'x'
+steht, und tippen die Taste <o> (kleines 'o') oder <RUBOUT>.
+Dadurch wird das Kreuz entfernt und gegebenenfalls eine
+Umnumerierung der schon angekreuzten Dateinamen vor­
+genommen. Verlassen Sie jetzt die Auswahl mit der Tasten­
+folge <ESC><q>, so werden die Dateien nacheinander in der
+von Ihnen angekreuzten Reihenfolge in die Task kopiert.
+ Neben dieser Auswahl, in der #on("u")#m e h r e r e#off("u")# Dateien an­
+gekreuzt (ausgewählt) werden können, gibt es auch eine
+Auswahl, in der nur jeweils #on("u")#e i n e#off("u")# Datei angekreuzt wer­
+den darf. Das ist durch die entsprechende Beschriftung
+auf dem Bildschirm kenntlich gemacht. In einem solchen
+Fall wird die Auswahl nach Ankreuzen eines Namens #on("u")#auto­
+matisch#off("u")# verlassen, d.h. man braucht nicht <ESC><q> zu tip­
+pen!.
+ In einer Dateiauswahl können bis zu 200 Dateien ver­
+waltet werden. Da aber nicht alle Namen gleichzeitig auf
+dem Bildschirm angezeigt werden können, wird jeweils in
+der gepunkteten Zeile angezeigt, ob noch #on("u")#weitere Dateien#off("u")#
+in der Liste vorausgehen oder folgen. In unserem Beispiel
+geht als keine Datei voraus, es folgen aber noch weitere
+Dateien hinter der zuletzt angezeigten Datei.
+ Damit Sie noch komfortabler mit dieser Dateiauswahl
+arbeiten können, gibt es weitere Tastenfolgen die nütz­
+lich sein können. Wenn Sie die Fragezeichentaste (<?>) tip­
+pen, werden Sie auf dem Bildschirm angezeigt. Durch Tip­
+pen irgendeiner weiteren Taste können Sie weiterblättern
+bzw. in die Auswahl zurückgelangen. Folgende Tastenkom­
+mandos stehen Ihnen zur Verfügung:
+
+
+ Positionierungen:
+
+ hoch : zum vorausgehenden Namen
+ runter : zum folgenden Namen
+ HOP hoch : auf den ersten Namen der Seite
+ HOP runter : auf den letzten Namen der Seite
+ ESC 1 : auf den ersten Namen der Liste
+ ESC 9 : auf den letzten Namen der Liste
+
+
+ Auswahl treffen:
+
+ RETURN / x : diesen Namen ankreuzen
+(RUBOUT / o : Kreuz vor dem Namen löschen )
+(HOP RETURN/HOP x: alle folgenden Namen ankreuzen)
+(HOP RUBOUT/HOP o: alle folgenden Namen löschen )
+
+
+ Auswahl verlassen:
+
+ ESC q : Auswahl verlassen
+ ESC h : Auswahl abbrechen
+
+
+
+ Die in Klammern gesetzten Tastenfunktionen kann man
+nur verwenden, wenn die Auswahl #on("u")#mehrerer#off("u")# Dateien zuge­
+lassen ist.
+ Wie Sie sehen, orientiert sich die Bedienung an den
+Tastenfunktionen, die Ihnen schon aus dem Editor be­
+kannt sind. Haben Sie aus Versehen einen Menupunkt ge­
+wählt, so daß Ihnen eine solche Auswahl angeboten wird,
+so können Sie die Auswahl durch <ESC><h> (für 'halt') ab­
+brechen.
+
+
+- Ja/Nein - Fragen
+
+ An verschiedenen Stellen werden Fragen an Sie ge­
+richtet, die Sie mit 'ja' oder 'nein' beantworten müssen.
+Tippen Sie dazu entsprechend je nach Entscheidung die
+Taste <j> (für 'ja') bzw. <n> (für 'nein').
+
+
+- Eingaben
+
+ An einigen Stellen werden Sie aufgefordert, eine Ein­
+gabe zu machen (z.B. einen Dateinamen einzugeben). Sofern
+möglich wird Ihnen auch ein Vorschlag für die Eingabe
+gemacht (z.B. wenn Sie Dateien kopieren oder umbenennen
+wollen). Wenn Sie den gemachten Vorschlag akzeptieren,
+dann brauchen Sie zur Bestätigung nur die <RETURN>-
+Taste zu tippen.
+ Gefällt Ihnen der Vorschlag nicht oder wird Ihnen
+kein Vorschlag gemacht, so machen Sie bitte die ge­
+wünschte Angabe. Zum Schreiben stehen Ihnen alle aus dem
+Editor bekannten Funktionen zur Verfügung. Mit der
+Taste <RUBOUT> können Sie Buchstaben löschen, mit
+<RUBIN> einfügen. Die Eingabe wird durch Tippen der
+<RETURN>-Taste abgeschlossen.
+ Ist der von Ihnen gewünschte Name schon in Ihrer Task
+vorhanden und steht in der Fußzeile der Hinweis 'Zeigen:
+<ESC><z>', dann können Sie sich auch alle vorhandenen
+Namen zur Auswahl anbieten lassen und durch Ankreuzen
+den beabsichtigten Namen auswählen.
+
+
+- Alternativen
+
+ Ihnen können auch mehrere Alternativen angeboten
+werden, zwischen denen Sie wählen müssen. In der unter­
+sten Zeile eines solchen Kastens, in denen Ihnen die Al­
+ternativen auf dem Bildschirm eingeblendet werden, sind
+die Möglichkeiten aufgeführt, die darüber beschreiben
+sind. Mit den Pfeiltasten können sie die Markierung auf
+die gewünschte Alternative positionieren und dann durch
+die <RETURN>-Taste zur Ausführung bringen. (Manchmal
+ist das auch durch Tippen der den Alternativen vorange­
+stellten Buchstaben oder Ziffern möglich).
+
+
+- Verlassen des Menus
+
+ Das Menu kann insgesamt mit der Tastenfolge <ESC><q>
+verlassen werden. Damit das nicht versehentlich ge­
+schieht, wird zur Sicherheit die Frage gestellt, ob Sie das
+Menu tatsächlich verlassen wollen. Verneinen Sie die
+Frage, verbleiben Sie im Menu, ansonsten gelangen Sie
+zurück in die 'gib kommando:' - Ebene.
+
+ Mit dieser Beispielsitzung haben Sie jetzt schon fast
+alle Arten des Umgangs mit #on("b")#gs-DIALOG#off("b")# kennengelernt.
+Sicher ist dies beim ersten Mal sehr verwirrend. Mit den
+folgenden vier grundsätzlichen Regeln können Sie
+#on("b")#gs-DIALOG#off("b")# aber immer bedienen:
+
+ 1. Achten Sie darauf, welche Tastenkombinationen in
+ der Fußzeile angegeben sind. Halten Sie sich daran!
+
+ 2. Rufen Sie - sofern vorhanden - die Hilfsfunktio­
+ nen mit <?> oder <ESC><?> auf. Damit erhalten Sie
+ weitere Informationen.
+
+ 3. Funktioniert eine Tastenkombination nicht (geben
+ Sie dem Rechner eine kurze Zeit zum Reagieren),
+ versuchen Sie die Tastenkombination <ESC><q> (Ver­
+ lassen) oder <ESC><h> (Abbruch). Falls sich darauf­
+ hin etwas ändert, verfahren Sie wie unter 1).
+
+ 4. Erfolgt noch immer keine Reaktion, tippen Sie die
+ <SV>-Taste und versuchen Sie das Programm mit
+ 'halt' zu stoppen. Führt auch das nicht zum Erfolg,
+ hat sich der Rechner "aufgehängt". Wenn Sie keine
+ Erfahrungen mit einer solchen Situation haben,
+ wenden Sie sich an Ihren Systembetreuer.
+
+
+3.3 Zusammenfassung/Kurzbeschreibung
+
+Menu: Sie können jede (aktive) Funktion inner­
+ halb eines Pull-Down-Menus mit den
+ Pfeiltasten anwählen und durch Tippen
+ der <RETURN>-Taste zur Ausführung
+ bringen. (Ersatzweise kann - sofern vor
+ dem Menupunkt ein Buchstabe oder eine
+ Ziffer angegeben ist - die Funktion
+ durch Tippen der entsprechenden Taste
+ direkt zur Ausführung gebracht werden.)
+ Zu jeder Funktion kann durch Tippen der
+ Fragezeichentaste eine Hilfestellung
+ angefordert werden. Gibt man die Tasten­
+ folge <ESC><?>, so wird die Bedienung des
+ Menus auf dem Bildschirm kurz erläutert.
+ Mit der Tastenfolge <ESC><q> wird das
+ Menu (nach einer Sicherheitsabfrage)
+ verlassen.
+
+Dateiauswahl: Hier können Sie die gewünschten Namen
+ mit <x> ankreuzen und das Kreuz mit <o>
+ wieder entfernen. Die Auswahl - sofern
+ mehrere Dateien ausgewählt werden kön­
+ nen - wird durch die Tastenfolge
+ <ESC><q> verlassen. Alle Möglichkeiten
+ der Bedienung werden angezeigt, wenn die
+ Fragezeichentaste getippt wird. Die Aus­
+ wahl wird abgebrochen (ohne Kreuze!),
+ wenn die Tastenfolge <ESC><h> eingege­
+ ben wird.
+
+Eingabe: Hier können Sie eine Zeile eingeben oder
+ eine Vorgabe ändern (wie im Editor). Ein­
+ fügen und Löschen mit RUBIN und RUBOUT.
+ Ist in der Fußzeile die Tastenfolge
+ '<ESC><z>: Zeigen' angegeben, so können
+ Sie darüber auch eine Auswahl anfor­
+ dern, in der Sie bereits vorhandene Na­
+ men nur anzukreuzen brauchen. Zumeist
+ ist auch ein Abbruch der Eingabe durch
+ die Tastenfolge <ESC><h> möglich.
+
+Frage: Beantworten Sie die an Sie gerichtete
+ Frage mit <j> oder <n>. Sie können auch
+ auf dem Bildschirm die Markierung auf
+ die gewünschte Antwort setzten und an­
+ schließend die <RETURN>-Taste tippen.
+
+Alternativen: Aus den angegebenen Möglichkeiten kön­
+ nen Sie eine auswählen, indem Sie entwe­
+ der die der Alternative vorangestellte
+ Taste tippen oder in der letzten Zeile des
+ Kastens die Markierung auf die ge­
+ wünschte Kennzeichnung positionieren
+ und anschließend die <RETURN>-Taste
+ tippen.
+
+Fehler: Die Meldung muß durch Tippen einer be­
+ liebigen Taste quittiert werden.
+
+Bitte warten: Der Rechner ist beschäftigt - keine
+ Taste tippen!
+
+
diff --git a/app/gs.dialog/1.2/doc/gs-dialog-4 b/app/gs.dialog/1.2/doc/gs-dialog-4
new file mode 100644
index 0000000..03d8dc4
--- /dev/null
+++ b/app/gs.dialog/1.2/doc/gs-dialog-4
@@ -0,0 +1,672 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (30)#
+#headodd#
+#center#gs-DIALOG#right#%
+
+#end#
+#headeven#
+%#center#gs-DIALOG
+
+#end#
+#center#4
+
+#center#Beschreibung der Menufunktionen
+
+
+4.1 Menufunktionen zum Oberbegriff 'Dateien'
+
+ In diesem Kapitel werden alle die Menufunktionen be­
+schrieben, die Ihnen unter dem Obergeriff 'Dateien' im
+Menu angeboten werden.
+
+#on("u")##on("b")#v Verzeichnis#off("b")##off("u")#
+ Mit dieser Funktion können Sie sich einen Über­
+ blick über die in Ihrer Task vorhandenen Dateien ver­
+ schaffen.
+ Nach Aufruf dieser Funktion wird eine Liste der
+ Dateien auf dem Bildschirm ausgegeben, die sich in
+ Ihrer Task befinden. Da die Liste selbst eine Datei ist,
+ kann sie mit der Tastenkombination <ESC><q> verlassen
+ werden - hierauf wird auch in der Kopfzeile der Datei
+ hingewiesen. Falls nicht alle Dateien auf den Bild­
+ schirm passen, können Sie das Fenster mit <HOP><hoch>
+ bzw. <HOP><runter> rollen.
+
+#on("u")##on("b")#l Löschen#off("b")##off("u")#
+ Mit dieser Funktion können Sie Dateien, die Sie
+ nicht mehr benötigen, die unnötig Platz belegen, lö­
+ schen. Aber Vorsicht! Die Dateien verschwinden durch
+ diese Funktion unwiederbringlich!
+ Zunächst wird der Dateiname der Datei erfragt, die
+ gelöscht werden soll. Hier können Sie direkt den be­
+ treffenden Namen eingeben und die Eingabe mit
+ <RETURN> abschließen. Sie können sich aber auch durch
+ die Tastenfolge <ESC><z> (für 'zeigen') alle in der Task
+ vorhandenen Dateien zur Auswahl anbieten lassen und
+ dort einfach einen Namen ankreuzen.
+ Für jede einzelne Datei wird noch einmal zur
+ Sicherheit angefragt, ob diese auch tatsächlich ge­
+ löscht werden soll. Zur Bestätigung tippen Sie bitte
+ die Taste <j> ('ja') - zur Verhinderung die Taste <n>
+ ('nein').
+
+ Fehlerfälle:
+ - Eine Datei mit dem angegebenen Namen existiert
+ nicht.
+
+#on("u")##on("b")#d Drucken#off("b")##off("u")#
+ Mit dieser Funktion können Sie Dateien über einen
+ angeschlossenen Drucker ausdrucken lassen.
+ Zunächst wird der Dateiname der Datei erfragt, die
+ gedruckt werden soll. Hier können Sie direkt den be­
+ treffenden Namen eingeben und die Eingabe mit
+ <RETURN> abschließen. Sie können sich aber auch durch
+ die Tastenfolge <ESC><z> (für 'zeigen') alle in der Task
+ vorhandenen Dateien zur Auswahl anbieten lassen und
+ dort einfach einen Namen ankreuzen.
+ Die Datei(en) wird/werden anschließend zum Drucker
+ geschickt. Der Vorgang wird auf dem Bildschirm proto­
+ kolliert.
+
+ Fehlerfälle:
+ - Eine Datei mit dem angegebenen Namen existiert
+ nicht.
+ - Die Druckdatei hat einen falschen Typ zum Drucken
+ (ist nicht editierbar).
+ - Der Drucker ist nicht funktionsbereit.
+ - Der Drucker wird nicht über die Task 'PRINTER' be­
+ trieben.
+ - Auf Ihrem System werden die Druckkosten abge­
+ rechnet. Sie müssen sich mit einer Codenummer
+ identifizieren.
+
+#on("u")##on("b")#k Kopieren#off("b")##off("u")#
+ Mit dieser Funktion können Sie sich eine (logische)
+ Kopie einer bereits im System vorhandenen Datei anle­
+ gen. Das ist z.B. dann sinnvoll, wenn Sie sich einen
+ bestimmten Stand einer Datei aufbewahren wollen.
+ Zunächst wird der Dateiname der Datei erfragt, die
+ kopiert werden soll. Hier können Sie direkt den be­
+ treffenden Namen eingeben und die Eingabe mit
+ <RETURN> abschließen. Sie können sich aber auch durch
+ die Tastenfolge <ESC><z> (für 'zeigen') alle in der Task
+ vorhandenen Dateien zur Auswahl anbieten lassen und
+ dort einfach einen Namen ankreuzen.
+ Anschließend wird dieser Name angezeigt und der
+ Name für die Kopie erfragt. Es muß ein Name eingetra­
+ gen werden, der in dieser Task noch nicht für eine
+ Datei vergeben wurde; ansonsten erfolgt ein Hinweis
+ darauf und es wird nicht kopiert!
+ Da man aber oft für die Kopie einen ähnlichen Na­
+ men wie für das Original wählt, wird der 'alte' Name
+ vorgeschlagen. Aus genannten Gründen muß er aber
+ verändert werden. 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 aber eine Menge Tipparbeit,
+ wenn Sie einen langen Namen nur an einer Stelle än­
+ dern wollen.
+
+ Fehlerfälle:
+ - Eine Datei mit dem angegebenen Namen existiert
+ nicht.
+ - Eine Datei mit dem gewünschten Namen existiert
+ bereits in der Task.
+
+#on("u")##on("b")#u Umbenennen#off("b")##off("u")#
+ Mit dieser Funktion können Sie einer bereits vor­
+ handenen Datei einen neuen Namen geben.
+ Zunächst wird der Dateiname der Datei erfragt, die
+ umbenannt werden soll. Hier können Sie direkt den
+ betreffenden Namen eingeben und die Eingabe mit
+ <RETURN> abschließen. Sie können sich aber auch durch
+ die Tastenfolge <ESC><z> (für 'zeigen') alle in der Task
+ vorhandenen Dateien zur Auswahl anbieten lassen und
+ dort einfach einen Namen ankreuzen.
+ Anschließend wird dieser Name angezeigt und der
+ zukünftige Name für die Datei erfragt. Es muß ein
+ Name eingetragen werden, der in dieser Task noch
+ nicht für eine Datei vergeben wurde; ansonsten er­
+ folgt ein Hinweis darauf und die Datei wird nicht
+ umbenannt!
+ Da man aber oft den 'neuen' Namen in Anlehnung an
+ den 'alten' Namen wählt, wird der 'alte' Name vorge­
+ schlagen. Aus genannten Gründen muß er aber verän­
+ dert werden. 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 aber eine Menge Tipparbeit, wenn Sie einen langen
+ Namen nur an einer Stelle ändern wollen.
+
+ Fehlerfälle:
+ - Eine Datei mit dem angegebenen Namen existiert
+ nicht.
+ - Eine Datei mit dem gewünschten Namen existiert
+ bereits in der Task.
+
+#on("u")##on("b")#s Speicherplatz#off("b")##off("u")#
+ Mit dieser Funktionen können Sie sich zu Ihrer
+ Information den Speicherbedarf anzeigen lassen, den
+ eine Datei auf dem Speichermedium einnimmt.
+ Zunächst wird der Dateiname der Datei erfragt,
+ deren Speicherplatz ermittelt werden soll. Hier kön­
+ nen Sie direkt den betreffenden Namen eingeben und
+ die Eingabe mit <RETURN> abschließen. Sie können sich
+ aber auch durch die Tastenfolge <ESC><z> (für 'zeigen')
+ alle in der Task vorhandenen Dateien zur Auswahl
+ anbieten lassen und dort einfach einen Namen ankreu­
+ zen.
+ Anschließend wird der belegte Speicherplatz der
+ ausgewählten Datei(en) auf dem Bildschirm angezeigt.
+ Die Größe wird in KB (Kilobyte) angegeben. Ein KB ent­
+ spricht etwa 1000 Zeichen, also einer halb vollge­
+ schriebenen Bildschirmseite.
+
+ Fehlerfälle:
+ - Eine Datei mit dem angegebenen Namen existiert
+ nicht.
+
+#on("u")##on("b")#a Aufräumen#off("b")##off("u")#
+ Wenn in einer Datei viel geändert wurde, wird der
+ Platzbedarf dieser Datei erheblich vergrößert ("Text­
+ leichen"). Dies tritt vor allem dann auf, wenn sehr
+ häufig eingefügt wurde. Da der Platzbedarf der Datei
+ zunimmt, sind mehr Speicherzugriffe notwendig, als es
+ dem Inhalt entspricht. Zudem führt die interne Orga­
+ nisation einer solchen Datei zu Einbußen bei der Bear­
+ beitungsgeschwindigkeit.
+ Mit dieser Funktion wird die Datei in eine "fri­
+ sche" Datei gewandelt. Diesen Vorgang nennt man 'Re­
+ organisieren' (Aufräumen). Anschließend belegt die
+ Datei zumeist (erheblich) weniger Speicherplatz als
+ zuvor.
+ Diese Funktion ist allerdings nur mit einer Ein­
+ schränkung nutzbar. Sie läßt sich nur auf Textdateien
+ anwenden, nicht auf andere Dateitypen. Das System
+ nimmt aber die Unterscheidung in Dateitypen automa­
+ tisch vor - allerdings kann es vorkommen, daß Sie den
+ Hinweis erhalten: "... kann nicht aufgeräumt werden!".
+ Zunächst wird der Dateiname der Datei erfragt, die
+ aufgeräumt (reorganisiert werden soll. Hier können
+ Sie direkt den betreffenden Namen eingeben und die
+ Eingabe mit <RETURN> abschließen. Sie können sich
+ aber auch durch die Tastenfolge <ESC><z> (für 'zeigen')
+ alle in der Task vorhandenen Dateien zur Auswahl
+ anbieten lassen und dort einfach einen Namen ankreu­
+ zen.
+ Anschließend wird/werden die ausgewählte(n) Da­
+ tei(en) aufgeräumt (reorganisert). #on("u")#Achtung! Die Funk­
+ tion ist zeitaufwendig!#off("u")#
+
+ Fehlerfälle:
+ - Eine Datei mit dem angegebenen Namen existiert
+ nicht.
+#page#
+4.2 Menufunktionen zum Oberbegriff 'Archiv'
+
+ In diesem Kapitel werden alle die Menufunktionen be­
+schrieben, die Ihnen unter dem Oberbegriff 'Archiv' im
+Menu angeboten werden. Mit den Funktionen in diesem
+Menu können Sie aber nicht nur Dateien auf dem Archiv
+behandeln, sondern auch in anderen Tasks im Multi-
+User-System oder über das EUMEL-Netz sogar auf anderen
+Rechnern!
+ Wenn Sie das Pull-Down-Menu (siehe Seite 12) gerade
+aufgeschlagen haben, sind nicht alle Funktionen akti­
+vierbar! Um weitere Funktionen zu aktivieren, muß erst
+einer der aktivierbaren Menupunkte ausgeführt werden.
+
+#on("u")##on("b")#r Reservieren#off("b")##off("u")# (des Archivlaufwerks)
+ Im EUMEL-Multi-User-System haben normalerweise
+ mehrere Personen das Zugriffsrecht auf das Archiv­
+ laufwerk. Allerdings muß der Zugriff so geregelt wer­
+ den, daß sich die Beteiligten dabei nicht gegenseitig
+ "in die Quere kommen". Ein Zugriff auf das Archiv­
+ laufwerk erfordert zunächst eine Anmeldung. Ist diese
+ Anmeldung erfolgt, kann von den anderen Beteiligten
+ nicht mehr auf das Laufwerk zugegriffen werden - bis
+ es wieder freigegeben worden ist.
+ Diese Anmeldung des Archivlaufwerkes erfolgt
+ über die Menufunktion 'r Reservieren'. Greift bereits
+ eine andere Task auf das Laufwerk zu, so erhalten Sie
+ darüber einen Hinweis auf dem Bildschirm. Ansonsten
+ wird an Sie die Frage gestellt, ob die Diskette einge­
+ legt und das Laufwerk geschlossen ist.
+ Erst zu diesem Zeitpunkt ist sichergestellt, daß Sie
+ den alleinigen Zugriff auf das Laufwerk haben. Des­
+ halb sollten Sie, wenn Sie mit mehreren Personen am
+ Computer arbeiten, erst zum Zeitpunkt der Fragestel­
+ lung die Diskette ins Laufwerk einlegen.
+ Nachdem Sie die Diskette eingelegt und die Frage
+ bejaht haben, ermittelt das System selbständig den
+ Namen der eingelegten Diskette, zeigt den Namen auf
+ dem Bildschirm (im kleinen Kasten rechts unten) an und
+ aktiviert die anderen Menupunkte des Pull-Down-
+ Menus.
+ #on("u")#Beim Verlassen des Pull-Down-Menus, wenn eine
+ andere Zieltask eingestellt wird oder wenn das Menu
+ gänzlich verlassen wird, wird die Reservierung auto­
+ matisch aufgehoben!#off("u")#
+
+ Fehlerfälle:
+ - Das Laufwerk ist von einer anderen Task belegt.
+ - Die Diskette ist falsch eingelegt oder das Lauf­
+ werk ist nicht richtig geschlossen.
+ - Die Diskette ist nicht formatiert bzw. initiali­
+ siert.
+ - Die Diskette kann nicht gelesen werden (keine
+ EUMEL-Diskette, Diskette hat ein falsches Format,
+ Diskette ist verschmutzt...).
+
+#on("u")##on("b")#n Neue Diskette#off("b")##off("u")# (anmelden)
+ Der Dateiaustausch mit einer Diskette ist nur dann
+ möglich, wenn der im System eingestellte Diskettenna­
+ me (auf dem Bildschirm im kleinen Kasten unten rechts
+ sichtbar) mit dem tatsächlichen Namen der Diskette
+ übereinstimmt. Nach einem Diskettenwechsel ist das
+ aber in der Regel nicht mehr der Fall. Greift man dann
+ auf die neu eingelegte Diskette zu, so erscheint die
+ Fehlermeldung: 'Falscher Archivname! Bitte neue Dis­
+ kette anmelden!'.
+ Das Anmelden einer neuen Diskette - ohne einen
+ neuen Reserviervorgang - wird durch diese Menufunk­
+ tion ermöglicht. Nach Aktivieren dieses Menupunktes
+ wird der Name der eingelegten Diskette ermittelt, im
+ System eingestellt und auf dem Bildschirm angezeigt.
+ Im Gegensatz zur Menufunktion 'r Reservieren'
+ greift #on("b")#gs-DIALOG#off("b")# ohne Anfrage an den Benutzer auf
+ das Archivlaufwerk zu (die Reservierung bleibt ja
+ bestehen). Ist das Archivlaufwerk reserviert, so ist
+ die Neuanmeldung einer Diskette über diese Menufunk­
+ tion weniger zeitaufwendig.
+
+ Fehlerfälle:
+ - wie unter 'r Reservieren'
+
+#on("u")##on("b")#s Schreiben#off("b")##off("u")# (Kopieren)
+ Alle Dateien der eigenen Task werden zur Auswahl
+ angeboten. Wenn Sie die Auswahl durch die Tastenfolge
+ <ESC><q> verlassen, überprüft #on("b")#gs-DIALOG#off("b")# zunächst, ob
+ die Dateien in der eingestellten Zietask schon vor­
+ handen sind. Ist das der Fall, erfragt #on("b")#gs-DIALOG#off("b")#, ob
+ die dort vorhandenen Dateien überschrieben, d.h. ge­
+ löscht werden dürfen (s.u.). Anschließend werden alle
+ angekreuzten Dateien in der Reihenfolge, in der Sie
+ sie angekreuzt haben, in die eingestellte Zieltask
+ kopiert. Der Vorgang wird auf dem Bildschirm proto­
+ kolliert. Die Originaldateien in der eigenen Task
+ bleiben dabei erhalten.
+ Wenn in der Zieltask schon eine Datei existiert, die
+ den gleichen Namen hat wie eine Datei, die Sie dorthin
+ kopieren möchten, so wird angefragt, ob die vorher
+ schon existierende Datei überschrieben (gelöscht!)
+ werden soll. Bejahen Sie diese Frage, so wird die be­
+ reits in der Zieltask existierende Datei (unwieder­
+ bringlich) gelöscht und die gewünschte Datei dorthin
+ transportiert. Ein Überschreiben aus Versehen ist
+ nicht möglich, wenn Sie die an Sie gestellte Frage
+ sorgfältig beantworten.
+ Verneinen Sie die Frage, so wird die Datei auch
+ nicht hinübertransportiert! Sie können die Datei aber
+ umbenennen (Menufunktion 'u Umbenennen' unter dem
+ Oberbegriff 'Dateien') und anschließend mit anderem
+ Namen hinüberschreiben.
+ Beachten Sie, daß beim Überschreiben einer Datei
+ auf einer Archivdiskette der Speicherplatz der alten
+ (überschriebenen) Version im allgemeinen nicht wie­
+ derverwendet werden kann. In einem solchen Fall
+ könnte die Diskette voll geschrieben werden, obwohl
+ eigentlich genügend Platz vorhanden wäre. Zur Opti­
+ mierung überprüft #on("b")#gs-DIALOG#off("b")# deshalb zuerst, ob die
+ angekreuzten Dateien schon in der Zieltask vorhanden
+ sind und löscht diese, wenn Sie Ihr Einverständnis
+ geben. Erst anschließend werden die Dateien insgesamt
+ kopiert.
+ Normalerweise ist als Zieltask das Archivlaufwerk
+ der eigenen Station eingestellt. Mit der Menufunktion
+ 'z Zieltask einstellen' kann diese Einstellung aber
+ verändert werden.
+
+ Fehlerfälle:
+ - Die Diskette ist falsch eingelegt oder beschädigt.
+ - Die Diskette kann nicht beschrieben werden
+ (Schreibfehler)
+ - Die Diskette ist voll.
+ - Sehen Sie auch unter 'r Reservieren'
+ 'z Zieltask einstellen'
+
+#on("u")##on("b")#c Checken#off("b")##off("u")#
+ Diese Menufunktion kann nur ausgeführt werden,
+ wenn der Dateiaustausch mit einem Archiv(manager)
+ erfolgt - ansonsten ist diese Menufunktion auch
+ nicht aktivierbar. Die Menufunktion dient dazu, auf
+ Diskette geschriebene Dateien auf Lesefehler hin zu
+ prüfen. Es empfiehlt sich, diese Prüfroutine auf neu
+ auf die Diskette geschriebene Dateien anzuwenden.
+ Sehen Sie dazu auch 'k Kombination'
+ Alle Dateien der eingestellten Zieltask (Archiv)
+ werden zur Auswahl angeboten. Wenn Sie die Auswahl
+ durch die Tastenfolge <ESC><q> verlassen, werden alle
+ angekreuzten Dateien in der Reihenfolge, in der Sie
+ sie angekreuzt haben, "gecheckt", d.h. auf Lesefehler
+ hin überprüft. Der Vorgang wird auf dem Bildschirm
+ protokolliert.
+
+ Fehlerfälle:
+ - Lesefehler auf dem Archiv
+ - Sehen Sie auch unter 'r Reservieren'
+
+#on("u")##on("b")#k Kombination#off("b")##off("u")#
+ Diese Menufunktion ist eine Kombination aus den
+ beiden Menufunktionen 's Schreiben' und 'c Checken'
+ (Sehen Sie weitere Informationen auch dort!).
+ Alle Dateien der eigenen Task werden zur Auswahl
+ angeboten. Wenn Sie die Auswahl durch die Tastenfolge
+ <ESC><q> verlassen, werden alle angekreuzten Dateien
+ in der Reihenfolge, in der Sie sie angekreuzt haben,
+ in die eingestellte Zieltask kopiert (gegebenenfalls
+ müssen bereits vorhandene Dateien gleichen Namens in
+ der Zieltask gelöscht werden). Anschließend werden
+ alle Dateien, die gerade geschrieben wurden, gecheckt,
+ d.h. auf Lesefehler hin untersucht. Beide Vorgänge
+ werden auf dem Bildschirm protokolliert.
+ Da die 'Check' - Operation nur bei Archivmanagern
+ zulässig ist, ist diese Menufunktion ebenfalls nur bei
+ Archivmanagern aktivierbar. Zur Erläuterung sehen
+ Sie bitte auch unter 'z Zieltask einstellen'.
+
+#on("u")##on("b")#h Holen/Lesen#off("b")##off("u")#
+ Die Menufunktion dient dazu, Dateien, die bereits
+ auf einer Archivdiskette oder in einer anderen Task
+ existieren, in die eigene Task zu kopieren.
+ Alle Dateien der eingestellten Zieltask werden zur
+ Auswahl angeboten. Anschließend werden Kopien der
+ angekreuzten Dateien in der Reihenfolge des Ankreu­
+ zens in die eigene Task geholt. Das Original in der
+ Zieltask bleibt dabei unverändert! Der Vorgang wird
+ auf dem Bildschirm protokolliert.
+ Sind in der eigenen Task schon Dateien mit glei­
+ chem Namen vorhanden, so wird gefragt, ob die 'alten'
+ Dateien überschrieben (gelöscht) werden dürfen. Nur
+ wenn Sie zustimmen, werden die in Ihrer Task existie­
+ renden Dateien (unwiederbringlich!) gelöscht und Ko­
+ pien der gleichnamigen Dateien aus der Zieltask ange­
+ fertigt.
+ Stimmen Sie dem Löschvorgang nicht zu, dann blei­
+ ben die bisherigen Dateien in Ihrer Task erhalten -
+ die Dateien aus der Zieltask werden dann aber auch
+ nicht in Ihre Task kopiert! Um dennoch die Kopien zu
+ erhalten, können Sie die namensgleichen Dateien in
+ Ihrer Task umbenennen und dann erst die Dateien aus
+ der anderen Task anfordern.
+ Normalerweise werden die Dateien vom Archiv der
+ eigenen Station geholt. Mit dem Menupunkt 'z Zieltask
+ einstellen' kann diese Einstellung verändert werden.
+
+ Fehlerfälle:
+ - Lesefehler auf dem Archiv
+ - Sehen Sie auch unter 'r Reservieren'
+ 's Schreiben'
+ 'z Zieltask einstellen'
+
+#on("u")##on("b")#l Löschen#off("b")##off("u")#
+ Die Menufunktion dient dazu, Dateien in der Ziel­
+ task (unwiederbringlich!) zu löschen. Dazu werden alle
+ Dateien der eingestellten Zieltask zur Auswahl ange­
+ boten. Anschließend werden die angekreuzten Dateien
+ in der Reihenfolge ihres Ankreuzens gelöscht. Zur
+ Sicherheit muß noch einmal für jede einzelne Datei
+ bestätigt werden, daß sie auch tatsächlich gelöscht
+ werden soll.
+ Beachten Sie, daß beim Löschen einer Datei auf ei­
+ ner Archivdiskette der Speicherplatz im allgemeinen
+ nicht wieder verwendet werden kann. In einem solchen
+ Fall könnte die Diskette voll geschrieben werden,
+ obwohl eigentlich genügend Platz vorhanden wäre.
+ Diese Probleme treten bei anderen Tasks, die keine
+ Archivmanager sind, nicht auf, da deren Speicherplatz
+ intelligenter verwaltet wird.
+ Normalerweise ist als Zieltask das Archiv der eige­
+ nen Station eingestellt. Mit dem Menupunkt 'z Zieltask
+ einstellen' kann diese Einstellung verändert werden.
+
+ Fehlerfälle:
+ - Sehen Sie auch unter 'r Reservieren'
+ 's Schreiben'
+ 'z Zieltask einstellen'
+
+#on("u")##on("b")#v Verzeichnis#off("b")##off("u")#
+ Mit dieser Menufunktion können Sie sich einen
+ Überblick über die in der Zieltask (z.B. auf dem Archiv)
+ vorhandenen Dateien verschaffen.
+ Nach Aufruf der Funktion wird eine Liste der Da­
+ teien auf dem Bildschirm ausgegeben, die sich in der
+ Zieltask (z.B. auf dem Archiv) befinden. Ist die Zieltask
+ ein Archiv(manager), so wird auch angezeigt, wieviel
+ Platz auf der Diskette belegt ist. Da die Liste selbst
+ eine Datei ist, kann sie mit der Tastenkombination
+ <ESC><q> verlassen werden. Falls nicht alle Dateinamen
+ auf den Bildschirm passen, können Sie das Fenster mit
+ <HOP><hoch> und <HOP><runter> rollen.
+
+ Fehlerfälle:
+ - Sehen Sie unter 'z Zieltask einstellen'
+
+#on("u")##on("b")#d Drucken#off("b")##off("u")#
+ Das Verzeichnis der Dateien in der Zieltask, das
+ man mit der Menufunktion 'v Verzeichnis' auf dem Bild­
+ schirm angezeigt bekommt, kann mit dieser Menufunk­
+ tion ausgedruckt werden.
+ Zur Sicherheit fragt #on("b")#gs-DIALOG#off("b")# an, ob wirklich ein
+ solches Dateiverzeichnis der Zieltask gedruckt werden
+ soll. Bejaht man die Frage, so wird ein Dateiverzeich­
+ nis erstellt und zum Drucker geschickt.
+
+ Fehlerfälle:
+ - Der Drucker ist nicht funktionsbereit.
+ - Der Drucker wird nicht über die Task 'PRINTER' be­
+ trieben.
+ - Auf Ihrem System werden die Druckkosten abge­
+ rechnet. Sie müssen sich mit einer Codenummer
+ identifizieren.
+
+#on("u")##on("b")#i Initialisieren#off("b")##off("u")#
+ Diese Menufunktion gestattet es, frische Disketten
+ zu formatieren, zu initialisieren bzw. beschriebene
+ Disketten vollständig zu löschen und ggf. dabei umzu­
+ benennen. Bei Aufruf dieser Menufunktion wird - so­
+ fern noch nicht geschehen - das Archivlaufwerk auto­
+ matisch reserviert.
+ Wenn Sie eine fabrikneue Diskette aus der Verpak­
+ kung nehmen, müssen Sie diese zunächst #on("u")#formatieren#off("u")#.
+ Dabei wird die Diskette auf ein festgelegtes physika­
+ lisches Format eingestellt. Ohne daß diese Operation
+ vorausgegangen ist, kann eine Diskette weder be­
+ schrieben noch gelesen werden.
+ Prinzipiell braucht eine Diskette nur ein einziges
+ Mal formatiert zu werden. Sie können Sie jedoch jeder­
+ zeit wieder formatieren - z.B. wenn Sie Disketten ha­
+ ben, von denen Sie nicht genau wissen, für welche
+ Zwecke sie zuvor verwendet wurden.
+ Wenn Sie diese Menufunktion aktivieren, werden Sie
+ zunächst gefragt, ob Sie die Diskette auch formatie­
+ ren wollen. Bejahen Sie die Frage, so werden Ihnen
+ mehrere Formate zur Auswahl angeboten:
+
+#on ("b")#
+ +------------------------------------+
+ | Formatieren einer Diskette |
+ | |
+ | Dies sind die möglichen Formate: |
+ | |
+ | 1 ..... 40 Spur - 360 KB |
+ | 2 ..... 80 Spur - 720 KB |
+ | 3 ..... 5 1/4" - 1,2 MB |
+ | 4 ..... 3 1/2" - 1,4 MB |
+ | s ..... Standard - Format |
+ | |
+ | 1 2 3 4 s |
+ +------------------------------------+
+#off("b")#
+
+ Erkundigen Sie sich bei Ihrem Händler, welches
+ Format Sie bei Ihrem Rechner und den von Ihnen ver­
+ wendeten Disketten einstellen müssen. Manche Rechner
+ unterstützen diese Operation innerhalb des EUMEL-
+ Systems auch gar nicht, das Formatieren muß dann ir­
+ gendwie anders außerhalb des EUMEL-Systems gesche­
+ hen.
+ Wenn Sie die Formatierung abgeschlossen oder auch
+ übersprungen haben, beginnt die eigentliche Initiali­
+ sierung der Diskette. Dabei wird als erstes der Ar­
+ chivname auf die Diskette geschrieben. Alle alten Da­
+ ten, die sich ggf. auf der Diskette befinden, werden
+ auch bei diesem Vorgang unwiederbringlich (!) ge­
+ löscht.
+ Zur Sicherheit überprüft #on("b")#gs-DIALOG#off("b")# in jedem Falle,
+ ob es sich um eine EUMEL - Diskette handelt, und er­
+ fragt Ihr Einverständnis, ob die Diskette wirklich
+ initialisiert werden soll. Geben Sie hierzu Ihr Ein­
+ verständnis, dann erfragt #on("b")#gs-DIALOG#off("b")# noch den (neuen)
+ Archivnamen. Hatte die Diskette schon einen Namen,
+ dann wird dieser zum Überschreiben angeboten. Wollen
+ Sie den alten Archivnamen beibehalten, so brauchen
+ Sie nur die <RETURN>-Taste zu tippen, ansonsten kön­
+ nen Sie den Namen auch zuvor verändern oder einen
+ ganz neuen Namen hinschreiben. Anhand des ausgege­
+ benen Namens können Sie auch überprüfen, ob Sie die
+ richtige Diskette eingelegt haben.
+ Das Initialisieren funktioniert natürlich nur,
+ wenn Sie als Zieltask einen Archivmanager eingestellt
+ haben - ansonsten ist diese Menufunktion gesperrt
+ (nicht aktivierbar!).
+
+ Fehlerfälle:
+ - Formatieren ist nicht auf dem System möglich
+ - Sehen Sie auch unter 'r Reservieren'
+ 'z Zieltask einstellen'
+
+#on("u")##on("b")#z Zieltask einstellen#off("b")##off("u")#
+ Mit dieser Menufunktion können Sie festlegen, mit
+ welcher Zieltask Sie kommunizieren, d.h. z.B. Dateien
+ austauschen möchten. Normalerweise ist hier das Archiv
+ am eigenen Rechner eingestellt. Das wird auch nach
+ Aufklappen des Pull-Down-Menus im Kasten rechts
+ unten angezeigt.
+ Sie können aber auch eine andere Task einstellen
+ (z.B. die Vatertask oder die Task 'PUBLIC'), um mit diesen
+ Dateien auszutauschen oder um sich auch nur einen
+ Überblick über die dort vorhandenen Dateien zu ver­
+ schaffen. Wenn Sie mit Ihrem Rechner in ein EUMEL-Netz
+ integriert sind, können Sie auch auf Tasks anderer
+ Rechner zugreifen oder auch Disketten von Laufwerken
+ anderer Rechner einlesen (z.B. wenn Sie Disketten ande­
+ rer Formate haben, die von Ihrem Rechner nicht gelesen
+ werden können).
+ Dabei werden zwei Anforderungen an die Zieltask
+ gestellt: Sie muß existieren und bereit für den Datei­
+ austausch sein, d.h es muß eine Managertask sein, auf
+ die Sie Zugriff haben. Versuchen Sie auf andere Tasks
+ zuzugreifen, so erhalten Sie entsprechende (Fehler-)­
+ Meldungen.
+ Zu beachten ist noch, daß es im EUMEL-System ver­
+ schiedene Arten von Managertasks gibt - Archivmana­
+ ger und normale Dateimanager. Der Unterschied besteht
+ darin, daß ein Archivmanager vom Benutzer vor dem
+ Zugriff reserviert werden muß - anschließend hat nur
+ dieser Benutzer (bis zur Aufgabe der Reservierung) ein
+ Zugriffsrechts auf den Manager. Normale Dateimanager
+ können dagegen von mehreren Benutzern in beliebiger
+ Reihenfolge angesprochen werden.
+ Ein Archivmanager kann auch auf bestimmte Disket­
+ tenformate spezialisert sein (z.B. auf das Lesen von
+ DOS-Disketten). Manche Rechner haben auch mehrere
+ Archivmanager für verschiedene Laufwerke etc. Durch
+ Einstellen unterschiedlicher Archivmanager können
+ Sie dann auf verschiedenen Laufwerken archivieren.
+ Nach Aktivieren dieses Menupunktes werden Ihnen
+ die folgenden Alternativen angeboten:
+
+#on ("b")#
+ +-------------------------------------------+
+ | Dateiaustausch gewünscht mit: |
+ | |
+ | a ... Archiv (Eigene Station) |
+ | |
+ | v ... Vatertask |
+ | |
+ | p ... 'PUBLIC' (Eigene Station) |
+ | |
+ | s ... Sonstige Task |
+ | |
+ | |
+ | Archiv Vatertask PUBLIC Sonstige |
+ +-------------------------------------------+
+#off("b")#
+
+ Da der Dateiaustausch mit dem Standardarchiv der
+ eigenen Station (Task: 'ARCHIVE'), mit der Vatertask
+ und der Task 'PUBLIC' recht häufig in Anspruch genom­
+ men wird, sind diese drei Optionen unter den Alterna­
+ tiven direkt angegeben. Entscheiden Sie sich für eine
+ dieser drei Tasks, so nimmt #on("b")#gs-DIALOG#off("b")# alle notwendi­
+ gen Einstellungen vor. Möchten Sie dagegen in Kon­
+ takt mit einer anderen Task treten, so wählen Sie die
+ Alternative 's ... Sonstige Task'.
+
+ In diesem Falle haben Sie noch 3 Angaben zu machen:
+
+ - Zunächst werden Sie nach dem Namen der Zieltask
+ gefragt. Geben Sie den Namen der Zieltask - ohne
+ Anführungsstriche (!) - ein und schließen Sie die
+ Eingabe mit der <RETURN>-Taste ab. (Den ausgegebe­
+ nen Namen der z.Z. eingestellten Task können Sie
+ dabei verändern bzw. überschreiben.)
+ - Dann wird die Nummer der Station im EUMEL-Netz
+ erfragt, auf der sich die Zieltask befindet. Die
+ Nummer Ihrer Station wird als Vorschlag ausgege­
+ ben. Wollen Sie mit einer Task auf Ihrem Rechner
+ kommunizieren, so brauchen Sie diesen Vorschlag
+ nur durch Drücken der <RETURN>-Taste zu bestäti­
+ gen; ansonsten tragen Sie zuvor die entsprechende
+ Stationsnummer ein. Ist Ihr Rechner nicht in ein
+ EUMEL-Netz integriert, so wird die Stationsnummer
+ 0 (Null) ausgegeben. Bitte bestätigen Sie diese Sta­
+ tionsnummer durch Tippen der <RETURN>-Taste.
+ - Zum Abschluß müssen Sie noch angeben, ob die ein­
+ gestellte Zieltask ein Archivmanager ist oder
+ nicht.
+
+ #on("b")#gs-DIALOG#off("b")# versucht dann den Kontakt herzustellen.
+ Je nachdem, welche Einstellung Sie vorgenommen ha­
+ ben, sind bestimmte Funktionen innerhalb des Menus
+ nicht aktivierbar. #on("b")#gs-DIALOG#off("b")# läßt nur die Funktionen
+ zu, die aufgrund Ihrer Einstellungen zulässig sind.
+ Im Kasten rechts unten auf dem Bildschirm wird
+ jeweils angezeigt, welche Zieltask eingestellt ist.
+ Erscheint in diesem Kasten auch ein Hinweis auf den
+ Archivnamen, so haben Sie einen Archivmanager einge­
+ stellt. Ist dagegen vor dem Namen der Zieltask noch
+ eine Zahl und ein Schrägstrich angegeben, so haben
+ Sie eine Zieltask auf einem anderen Rechner einge­
+ stellt.
+ Bedenken Sie, daß Operationen mit Tasks auf ande­
+ ren Stationen länger andauern können - werden Sie
+ nicht ungeduldig!
+ Sie können die Einstellung der Zieltask jederzeit
+ wieder verändern!
+
+ Fehlerfälle:
+ - Die eingestellte Zieltask existiert nicht.
+ - Die eingestellte Zieltask existiert zwar, ist aber
+ nicht empfangsbereit, d.h. ein Zugriff von Ihrer
+ Task aus ist nicht möglich!
+ - Das Netz ist nicht funktionsbereit (Collector-Task
+ fehlt).
+ - Die Kommunikation war nicht erfolgreich.
+ - Die gewünschte Operation kann mit der eingestell­
+ ten Zieltask nicht ausgeführt werden (Zieltask ist
+ z.B. gar kein Archivmanager - Sie aber versuchen,
+ das Laufwerk zu reservieren)
+
diff --git a/app/gs.dialog/1.2/doc/gs-dialog-5 b/app/gs.dialog/1.2/doc/gs-dialog-5
new file mode 100644
index 0000000..f2b17cf
--- /dev/null
+++ b/app/gs.dialog/1.2/doc/gs-dialog-5
@@ -0,0 +1,176 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (49)#
+#headodd#
+#center#gs-DIALOG#right#%
+
+#end#
+#headeven#
+%#center#gs-DIALOG
+
+#end#
+#center#5
+
+#center#Informationen für Lehrer/Programmierer
+
+
+5.1 "Verschlüsselung" der Dateien auf der Diskette
+
+ Wenn Sie sich die Inhalte der Dateien angesehen haben,
+in denen die Programme für #on("b")#gs-DIALOG#off("b")# enthalten sind,
+werden Sie festgestellt haben, daß der Code dicht gepackt
+ist. Das war notwendig, um die gesamten Programme auf
+einer Diskette unterzubringen.
+ Allerdings ist der Code #on("u")#nicht#off("u")# verschlüsselt - nur
+dichter gepackt. Auf der gelieferten Diskette befindet
+sich eine Datei mit Namen "gs-DIALOG decompress". In die­
+ser Datei ist das (einfache) Komprimier- und Dekompri­
+mierprogramm enthalten. Insertieren Sie dieses Programm
+in einer Task. Anschließend stehen Ihnen zwei Befehle zur
+Verfügung:
+
+PROC komprimiere (TEXT CONST dateiname):
+ Die angegebene Datei wird komprimiert; die Datei steht
+ anschließend unter gleichem Namen zur Verfügung.
+
+PROC dekomprimiere (TEXT CONST dateiname):
+ Eine zuvor mit 'komprimiere' bearbeitete Datei wird -
+ bis auf die Leerzeilen - in den Ursprungszustand über­
+ führt. Die Datei steht anschließend wieder unter glei­
+ chem Namen zur Verfügung.
+
+ Dieser 'Service' ist vornehmlich für Lehrer gedacht.
+So können Programmteile im Unterricht Gegenstand von
+Betrachtungen sein; Schüler können nach optimaleren
+Algorithmen für Teillösungen suchen - ggf. Anregungen
+geben. Sinnvoll ist es, das eigentliche Programm nicht zu
+verändern, um die Lauffähigkeit der unter #on("b")#gs-DIALOG#off("b")#
+entwickelten Software nicht zu gefährden.
+
+
+5.2 Nutzung der Graphikzeichen auf anderen Rechnern/
+Terminals
+
+ Wie schon unter "2.4 Nutzung der 'Semi - Graphik -
+Zeichen'" erwähnt, ist #on("b")#gs-DIALOG#off("b")# darauf vorbereitet, für
+'IBM - kompatible Rechner' und für Terminals 'Beehive
+FT20' die Umrahmungen der Kästen als durchgezogene Li­
+nien auszugeben - dadurch gewinnt die Bildschirmdar­
+stellung.
+ #on("b")#gs-DIALOG#off("b")# ist aber hinsichtlich der Graphikzeichen
+nur für diese Endgeräte vorbereitet und benutzt in allen
+anderen Fällen Zeichen des normalen Zeichensatzes.
+ Sie können sich aber, sofern Ihr Rechner/Terminal
+über solche Semi - Graphikzeichen verfügt, leicht selbst
+eine Anpassung dafür erstellen. Auch darauf ist
+#on("b")#gs-DIALOG#off("b")# schon vorbereitet. Keine Angst, versuchen Sie
+es ruhig einmal. Sie können nichts falsch machen; denn
+sollte es Ihnen nicht gelingen, so können Sie jederzeit
+mit dem Befehl 'std graphic char' und einem anschließen­
+den <RETURN> die Standardeinstellung wieder vornehmen.
+ Informieren Sie sich in Ihrer Terminal-/Rechner­
+beschreibung, welche Codes ausgegeben werden müssen, um
+die Grahpikzeichen darzustellen. Folgende Zeichen werden
+benötigt:
+
+ Ecke oben links : ω (f)
+ Ecke oben rechts : � (g)
+ Ecke unten links : � (e)
+ Ecke unten rechts : � (h)
+
+ Balken oben : � (n)
+ Balken unten : ̂ (o)
+ Balken links : ̄ (m)
+ Balken rechts : ̃ (l)
+ Kreuz : ̗ (i)
+
+ waagerechte Linie : ̇ (k)
+ senkrechte Linie : � (j)
+
+ ---------------------------------------------
+
+ ( Cursor sichtbar : ( ESC . 1 ) )
+ ( Cursor unsichtbar : ( ESC . 0 ) )
+
+
+ #on("b")#gs-DIALOG#off("b")# müssen nun die speziellen Codes Ihres Rech­
+ners/Terminals mitgeteilt werden. Dafür stehen die fol­
+genden Prozeduren zur Verfügung:
+
+PROC ecke oben links (TEXT CONST zeichenkette);
+PROC ecke oben rechts (TEXT CONST zeichenkette);
+PROC ecke unten links (TEXT CONST zeichenkette);
+PROC ecke unten rechts (TEXT CONST zeichenkette);
+PROC balken oben (TEXT CONST zeichenkette);
+PROC balken unten (TEXT CONST zeichenkette);
+PROC balken links (TEXT CONST zeichenkette);
+PROC balken rechts (TEXT CONST zeichenkette);
+PROC waagerecht (TEXT CONST zeichenkette);
+PROC senkrecht (TEXT CONST zeichenkette);
+PROC kreuz (TEXT CONST zeichenkette);
+
+PROC cursor on (TEXT CONST zeichenkette);
+PROC cursor off (TEXT CONST zeichenkette);
+
+ Sofern möglich, kann auch noch ein Code eingegeben
+werden, damit der Cursor auf dem Bildschirm sichtbar bzw.
+unsichtbar ist.
+ Wie man sich selbst eine Anpassung schreiben kann,
+wollen wir hier an einem Beispiel aufzeigen. Wir schrei­
+ben dazu eine Anpassung für das Terminal 'Ampex 210+'.
+ In der Terminalbeschreibung ist angegeben, wie das
+Terminal konfiguriert sein muß - diese Konfiguartion
+haben wir eingestellt. Weiterhin ist angegeben, daß auf
+die Grapikzeichen durch die Zeichenfolge 'ESC $' umge­
+schaltet und durch die Zeichenfolge 'ESC %' auf den nor­
+malen Zeichensatz zurückgeschaltet wird. Für die jeweils
+speziellen Graphikzeichen sind bestimmte Buchstaben an­
+zugeben (z.B. für die 'Ecke oben links' der Buchstabe 'f').
+Die Zeichen für dieses Terminal sind oben hinter den Gra­
+phikzeichen in Klammern angegeben. Für 'ESC' muß der Code
+'27' ausgegeben werden.
+
+PACKET eigene graphikanpassung DEFINES
+
+ private graphic char:
+
+PROC private graphic char:
+ ecke oben links (""27"$f"27"%");
+ ecke oben rechts (""27"$g"27"%");
+ ecke unten links (""27"$e"27"%");
+ ecke unten rechts (""27"$h"27"%");
+ balken oben (""27"$n"27"%");
+ balken rechts (""27"$l"27"%");
+ balken links (""27"$m"27"%");
+ balken unten (""27"$o"27"%");
+ waagerecht (""27"$k"27"%");
+ senkrecht (""27"$j"27"%");
+ kreuz (""27"$i"27"%");
+ cursor on (""27".1");
+ cursor off (""27".0");
+END PROC private graphic char;
+
+END PACKET eigene graphikanpassung;
+
+ Nachdem das Programm insertiert und der Befehl
+'private graphic char' gegeben ist, steht in dieser Task
+und allen Söhnen davon die Graphikanpassung für das
+Terminal 'Ampex 210+' zur Verfügung.
+
+
+5.3 Fehlerbehandlung
+
+ Haben Sie z.B. das Menu durch Tippen der <SV>-Taste
+verlassen, so kann es vorkommen, daß anschließend das
+Menu auf dem Bildschirm nicht ordnungsgemäß aufgebaut
+wird. Verlassen Sie dann die Menuebene durch die Tasten­
+folge <ESC><q>.
+
+Wenn 'gib kommando:' erscheint, geben Sie den Befehl
+
+ reset dialog <RETURN>
+
+ Dadurch wird das Menusystem in den Anfangszustand
+gesetzt. Anschließend können Sie das von Ihnen ge­
+wünschte Programm (wieder) aufrufen.
+
diff --git a/app/gs.dialog/1.2/doc/gs-dialog-Inhaltsverzeichnis b/app/gs.dialog/1.2/doc/gs-dialog-Inhaltsverzeichnis
new file mode 100644
index 0000000..741744f
--- /dev/null
+++ b/app/gs.dialog/1.2/doc/gs-dialog-Inhaltsverzeichnis
@@ -0,0 +1,45 @@
+#limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+Inhaltsverzeichnis
+
+
+1 Was kann gs-DIALOG 3
+
+2 Installation von gs-DIALOG 6
+2.1 Voraussetzungen 6
+2.2 Lieferumfang 6
+2.3 Installation 6
+2.4 Nutzung der 'Semi-Graphik-Zeichen' 10
+
+3 Umgang mit den Menus; Eine Beispielsitzung 12
+3.1 Aufruf der Archivverwaltung 12
+3.2 Bedienung des Menusystems 14
+ - Aufbau der Menus (Bildschirmaufbau) 14
+ - Auswahl der Menupunkte 15
+ - Informationen zu einem Menupunkt 18
+ - Informationen zur Bedienung des Menus 19
+ - Aktivierbare und nicht aktivierbare
+ Menupunkte 20
+ - Aktivieren von Menupunkten 21
+ - Dateiauswahl 22
+ - Ja/Nein - Fragen 26
+ - Eingaben 26
+ - Alternativen 26
+ - Verlassen des Menus 27
+3.3 Zusammenfassung/Kurzbeschreibung 28
+
+4 Beschreibung der Menufunktionen 30
+4.1 Menufunktionen zum Oberbegriff 'Dateien' 30
+4.2 Menufunktionen zum Oberbegriff 'Archiv' 36
+
+5 Informationen für Lehrer/Programmierer 49
+5.1 "Verschlüsselung" der Dateien auf der
+ Diskette 49
+5.2 Nutzung der Graphikzeichen auf andere
+ Rechnern/Terminals 50
+5.3 Fehlerbehandlung 53
+
+
+
+
+
diff --git a/app/gs.dialog/1.2/source-disk b/app/gs.dialog/1.2/source-disk
new file mode 100644
index 0000000..daf7d81
--- /dev/null
+++ b/app/gs.dialog/1.2/source-disk
@@ -0,0 +1 @@
+informatikpaket/05_gs.dialog.img
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG 1 b/app/gs.dialog/1.2/src/ls-DIALOG 1
new file mode 100644
index 0000000..974bcda
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG 1
@@ -0,0 +1,60 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG 1 **
+ ** **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+PACKET ls dialog 1 DEFINES
+ ecke oben links, balken oben,{} ecke oben rechts, balken rechts,{} ecke unten links, balken links,{} ecke unten rechts, balken unten,{} waagerecht, senkrecht, kreuz,{} cursor on, cursor off,{} clear buffer, clear buffer and count,{} center, invers, page, page up,{} out frame, out menuframe, erase frame,{} std graphic char, ft20 graphic char,{} ibm graphic char, AREA, :=, fill,{} areax, areay, areaxsize, areaysize,{} cursor, get cursor, out, out invers,{}
+ out with beam, out invers with beam,{} erase, erase invers, erase with beam:{}TYPE AREA = STRUCT (INT x, y, xsize, ysize);{}LET blank = " ",{} mark ein = ""15"",{} mark aus = ""14"",{} cleol = ""5"";{}TEXT CONST fehlermeldung :: "Unzulässige Größen!";{}TEXT VAR eol := "+", eor := "+", eul := "+", eur := "+",{} bo := "+", br := "+", bl := "+", bu := "+",{} waa := "-", sen := "|", kr := "+",{} cursor sichtbar := "", cursor unsichtbar := "";{}
+TEXT PROC ecke oben links : eol END PROC ecke oben links ;{}TEXT PROC ecke oben rechts: eor END PROC ecke oben rechts ;{}TEXT PROC ecke unten links : eul END PROC ecke unten links ;{}TEXT PROC ecke unten rechts: eur END PROC ecke unten rechts ;{}TEXT PROC balken oben : bo END PROC balken oben ;{}TEXT PROC balken links : bl END PROC balken links ;{}TEXT PROC balken rechts : br END PROC balken rechts ;{}TEXT PROC balken unten : bu END PROC balken unten ;{}
+TEXT PROC waagerecht : waa END PROC waagerecht ;{}TEXT PROC senkrecht : sen END PROC senkrecht ;{}TEXT PROC kreuz : kr END PROC kreuz ;{}PROC ecke oben links (TEXT CONST t): eol := t END PROC ecke oben links ;{}PROC ecke oben rechts (TEXT CONST t): eor := t END PROC ecke oben rechts ;{}PROC ecke unten links (TEXT CONST t): eul := t END PROC ecke unten links ;{}PROC ecke unten rechts (TEXT CONST t): eur := t END PROC ecke unten rechts ;{}
+PROC balken oben (TEXT CONST t): bo := t END PROC balken oben ;{}PROC balken links (TEXT CONST t): bl := t END PROC balken links ;{}PROC balken rechts (TEXT CONST t): br := t END PROC balken rechts ;{}PROC balken unten (TEXT CONST t): bu := t END PROC balken unten ;{}PROC waagerecht (TEXT CONST t): waa := t END PROC waagerecht ;{}PROC senkrecht (TEXT CONST t): sen := t END PROC senkrecht ;{}PROC kreuz (TEXT CONST t): kr := t END PROC kreuz ;{}
+PROC std graphic char:{} ecke oben links ("+"); ecke oben rechts ("+");{} ecke unten links ("+"); ecke unten rechts ("+");{} balken oben ("+"); balken rechts ("+");{} balken links ("+"); balken unten ("+");{} waagerecht ("-"); senkrecht ("|");{} kreuz ("+");{} cursor sichtbar := ""; cursor unsichtbar := ""{}END PROC std graphic char;{}PROC ft20 graphic char:{} ecke oben links (""27"R�"27"S"); ecke oben rechts (""27"RD"27"S");{} ecke unten links (""27"RH"27"S"); ecke unten rechts (""27"RL"27"S");{}
+ balken oben (""27"RP"27"S"); balken rechts (""27"RT"27"S");{} balken links (""27"RX"27"S"); balken unten (""27"R\"27"S");{} waagerecht (""27"R`"27"S"); senkrecht (""27"Rd"27"S");{} kreuz (""27"Rh"27"S");{} cursor sichtbar := ""27"-1" ; cursor unsichtbar := ""27"-0" ;{} ft20 statuszeilen aus{}END PROC ft20 graphic char;{}PROC ft 20 statuszeilen aus: out (""27".A") END PROC ft 20 statuszeilen aus;{}PROC ft 20 statuszeilen an : out (""27".�") END PROC ft 20 statuszeilen an ;{}
+PROC ibm graphic char:{} ecke oben links (""201""); ecke oben rechts (""187"");{} ecke unten links (""200""); ecke unten rechts (""188"");{} balken oben (""203""); balken rechts (""185"");{} balken links (""204""); balken unten (""202"");{} waagerecht (""205""); senkrecht (""186"");{} kreuz (""206"");{} cursor sichtbar := "" ; cursor unsichtbar := ""{}END PROC ibm graphic char;{}PROC cursor on : out (cursor sichtbar ) END PROC cursor on ;{}
+PROC cursor off : out (cursor unsichtbar) END PROC cursor off;{}PROC cursor on (TEXT CONST t): cursor sichtbar := t END PROC cursor on ;{}PROC cursor off (TEXT CONST t): cursor unsichtbar := t END PROC cursor off;{}PROC clear buffer:{} REP UNTIL incharety = "" PER{}END PROC clear buffer;{}INT PROC clear buffer and count (TEXT CONST zeichen):{} INT VAR zaehler :: 0;{} TEXT VAR zeichenkette :: "", ch;{} IF zeichen = "" THEN clear buffer; LEAVE clear buffer and count WITH 0 FI;{}
+ ermittle die zeichenkette;{} untersuche auf vorhandene zeichen;{} zaehler.{} ermittle die zeichenkette:{} REP{} ch := incharety (1);{} zeichenkette CAT ch{} UNTIL ch = "" PER.{} untersuche auf vorhandene zeichen:{} INT VAR i;{} FOR i FROM 1 UPTO length (zeichenkette) REP{} IF pos (subtext (zeichenkette, i), zeichen) = 1{} THEN zaehler INCR 1{} FI{} PER.{}END PROC clear buffer and count;{}TEXT PROC center (INT CONST xsize, TEXT CONST t):{} TEXT VAR zeile :: compress (t);{}
+ zeile := ((xsize - length (zeile)) DIV 2) * blank + zeile;{} zeile CAT (xsize - length (zeile)) * blank;{} zeile{}END PROC center;{}TEXT PROC center (TEXT CONST t):{} center (79, t){}END PROC center;{}TEXT PROC invers (TEXT CONST t):{} TEXT VAR neu :: mark ein; neu CAT t; neu CAT " "; neu CAT mark aus;{} neu{}END PROC invers;{}PROC page (INT CONST x, y, xsize, ysize):{} INT VAR zeiger;{} IF x + xsize = 80{} THEN in einem streich{} ELSE putze vorsichtig{} FI;{} cursor (x, y).{}
+ in einem streich:{} FOR zeiger FROM y UPTO y + ysize - 1 REP{} cursor (x, zeiger); out (cleol){} PER.{} putze vorsichtig:{} FOR zeiger FROM y UPTO y + ysize - 1 REP{} cursor (x, zeiger); xsize TIMESOUT blank{} PER.{}END PROC page;{}PROC page (AREA CONST a):{} page (a.x, a.y, a.xsize, a.ysize){}END PROC page;{}PROC page up (INT CONST x, y, xsize, ysize):{} INT VAR zeiger;{} IF x + xsize = 80{} THEN in einem streich{} ELSE putze vorsichtig{}
+ FI.{} in einem streich:{} FOR zeiger FROM y + ysize - 1 DOWNTO y REP{} cursor (x, zeiger); out (cleol){} PER.{} putze vorsichtig:{} FOR zeiger FROM y + ysize - 1 DOWNTO y REP{} cursor (x, zeiger); xsize TIMESOUT blank{} PER.{}END PROC page up;{}PROC page up (AREA CONST a):{} page up (a.x, a.y, a.xsize, a.ysize){}END PROC page up;{}PROC out frame (INT CONST x, y, xsize, ysize):{} INT VAR zeiger;{} IF x < 1 COR y < 1 COR xsize < 8 COR ysize < 3 COR{} x + xsize > 80 COR y + ysize > 25{}
+ THEN LEAVE out frame{} FI;{} male oben;{} male seiten;{} male unten.{} male oben:{} cursor (x, y);{} out (ecke oben links);{} (xsize - 2) TIMESOUT waagerecht;{} out (ecke oben rechts).{} male seiten:{} FOR zeiger FROM 1 UPTO ysize - 2 REP{} cursor (x, y + zeiger); out (senkrecht);{} cursor (x + xsize - 1, y + zeiger); out (senkrecht){} PER.{} male unten:{} cursor (x, y + ysize - 1);{} out (ecke unten links);{} (xsize - 2) TIMESOUT waagerecht;{}
+ out (ecke unten rechts){}END PROC out frame;{}PROC out frame (AREA CONST a):{} IF a.x - 1 < 1 OR a.y - 1 < 1{} OR a.xsize + 2 > 79 OR a.ysize + 2 > 24{} OR a.x + a.xsize + 1 > 80{} OR a.y + a.ysize + 1 > 25{} THEN LEAVE out frame{} FI;{} out frame (a.x - 1, a.y - 1, a.xsize + 2, a.ysize + 2){}END PROC out frame;{}PROC out menuframe (INT CONST x, y, xsize, ysize):{} INT VAR i;{} untersuche angaben;{} schreibe rahmen.{} untersuche angaben:{} IF x < 0 COR y < 0 COR x + xsize > 81 COR y + ysize > 26{}
+ THEN LEAVE out menuframe{} FI.{} schreibe rahmen:{} IF x = 0 COR y = 0 COR xsize = 81 COR ysize = 26{} THEN zeichne reduzierten rahmen{} ELSE zeichne vollen rahmen{} FI.{} zeichne reduzierten rahmen:{} zeichne oberlinie;{} zeichne unterlinie.{} zeichne oberlinie:{} cursor (1, 2);{} 79 TIMESOUT waagerecht.{} zeichne unterlinie:{} cursor (1, 23);{} 79 TIMESOUT waagerecht.{} zeichne vollen rahmen:{} schreibe kopf; schreibe rumpf; schreibe fuss;{}
+ schreibe kopfleiste; schreibe fussleiste.{} schreibe kopf:{} cursor (x, y);{} out (ecke oben links);{} (xsize - 2) TIMESOUT waagerecht;{} out (ecke oben rechts).{} schreibe rumpf:{} FOR i FROM y + 1 UPTO y + ysize - 2 REP{} cursor (x, i); out (senkrecht);{} cursor (x + xsize - 1, i); out (senkrecht){} PER.{} schreibe fuss:{} cursor (x, y + ysize - 1);{} out (ecke unten links);{} (xsize - 2) TIMESOUT waagerecht;{} out (ecke unten rechts).{}
+ schreibe kopfleiste:{} cursor (x, y + 2 ); schreibe balkenlinie.{} schreibe fussleiste:{} cursor (x, y + ysize - 3); schreibe balkenlinie.{} schreibe balkenlinie:{} out (balken links); (xsize - 2) TIMESOUT waagerecht; out (balken rechts).{}END PROC out menuframe;{}PROC out menuframe (AREA CONST a):{} out menuframe (a.x - 1, a.y - 1, a.xsize + 2, a.ysize + 2){}END PROC out menuframe;{}PROC erase frame (INT CONST x, y, xsize, ysize):{} INT VAR zeiger;{} loesche oben; loesche seiten; loesche unten.{}
+ loesche oben:{} cursor (x, y); xsize TIMESOUT blank.{} loesche seiten:{} FOR zeiger FROM 1 UPTO ysize - 2 REP{} cursor (x, y + zeiger); out (blank);{} cursor (x + xsize - 1, y + zeiger); out (blank){} PER.{} loesche unten:{} cursor (x, y + ysize - 1); xsize TIMESOUT blank.{}END PROC erase frame;{}OP := (AREA VAR ziel, AREA CONST quelle):{} CONCR (ziel) := CONCR (quelle){}END OP :=;{}PROC fill (AREA VAR ziel, INT CONST a, b, c, d):{} IF a < 1 COR b < 1 COR a > 79 COR b > 24 COR c < 8 COR d < 3{}
+ COR c > 79 COR d > 24 COR a + c > 80 COR b + d > 25{} THEN errorstop (fehlermeldung){} FI;{} ziel.x := a; ziel.y := b; ziel.xsize := c; ziel.ysize := d{}END PROC fill;{}INT PROC areax (AREA CONST a): a.x END PROC areax;{}INT PROC areay (AREA CONST a): a.y END PROC areay;{}INT PROC areaxsize (AREA CONST a): a.xsize END PROC areaxsize;{}INT PROC areaysize (AREA CONST a): a.ysize END PROC areaysize;{}PROC out (TEXT CONST t, INT CONST breite):{} outtext (t, 1, breite){}
+END PROC out;{}PROC erase (INT CONST breite):{} breite TIMESOUT blank{}END PROC erase;{}PROC cursor (AREA CONST a, INT CONST spa, zei):{} cursor (a.x + spa - 1, a.y + zei - 1){}END PROC cursor;{}PROC get cursor (AREA CONST a, INT VAR spalte, zeile):{} INT VAR x, y;{} get cursor (x, y);{} spalte := x - a.x + 1; zeile := y - a.y + 1{}END PROC get cursor;{}PROC out (AREA CONST a, INT CONST spa, zei, TEXT CONST t):{} ueberpruefe cursorangaben; positioniere cursor;{} IF text ist zu lang{} THEN verkuerzte ausgabe{}
+ ELSE out (t){} FI.{} ueberpruefe cursorangaben:{} IF spa > xsize COR zei > a.ysize COR spa < 1 COR zei < 1{} THEN LEAVE out{} FI.{} positioniere cursor:{} cursor (a.x + spa - 1, a.y + zei - 1).{} text ist zu lang:{} length (t) > a.xsize - spa + 1.{} verkuerzte ausgabe:{} outsubtext (t, 1, a.xsize - spa + 1){}END PROC out;{}PROC out (AREA CONST a, INT CONST spa, zei, TEXT CONST t, INT CONST laenge):{} ueberpruefe cursorangaben; positioniere cursor;{} IF laenge ist zu gross{}
+ THEN verkuerzte ausgabe{} ELSE outtext (t, 1, laenge){} FI.{} ueberpruefe cursorangaben:{} IF spa > a.xsize COR zei > a.ysize COR spa < 1 COR zei < 1{} THEN LEAVE out{} FI.{} positioniere cursor:{} cursor (a.x + spa - 1, a.y + zei - 1).{} laenge ist zu gross:{} laenge > a.xsize - spa + 1.{} verkuerzte ausgabe:{} outtext (t, 1, a.xsize - spa + 1){}END PROC out;{}PROC erase (AREA CONST a, INT CONST spa, zei, INT CONST laenge):{} ueberpruefe cursorangaben; positioniere cursor;{}
+ IF laenge ist zu gross{} THEN verkuerzte ausgabe{} ELSE erase (laenge){} FI.{} ueberpruefe cursorangaben:{} IF spa > a.xsize COR zei > a.ysize COR spa < 1 COR zei < 1{} THEN LEAVE erase{} FI.{} positioniere cursor:{} cursor (a.x + spa - 1, a.y + zei - 1).{} laenge ist zu gross:{} laenge > a.xsize - spa + 1.{} verkuerzte ausgabe:{} erase (a.xsize - spa + 1){}END PROC erase;{}PROC out invers (AREA CONST a, INT CONST spa, zei, TEXT CONST t):{} ueberpruefe cursorangaben; positioniere cursor;{}
+ IF text ist zu lang{} THEN verkuerzte ausgabe{} ELSE out (mark ein); out (t); out (blank); out (mark aus){} FI.{} ueberpruefe cursorangaben:{} IF spa > (xsize - 4) COR zei > ysize COR spa < 2 COR zei < 1{} THEN LEAVE out invers{} FI.{} positioniere cursor:{} cursor (a.x + spa - 2, a.y + zei - 1).{} text ist zu lang:{} length (t) > a.xsize - spa - 1.{} verkuerzte ausgabe:{} out (mark ein); outsubtext (t, 1, a.xsize - spa - 1);{} out (blank); out (mark aus){}END PROC out invers;{}
+PROC out invers (AREA CONST a, INT CONST spa, zei,{} TEXT CONST t, INT CONST laenge):{} ueberpruefe cursorangaben; positioniere cursor;{} IF laenge ist zu gross{} THEN verkuerzte ausgabe{} ELSE out (mark ein); outtext (t, 1, laenge); out (blank); out (mark aus){} FI.{} ueberpruefe cursorangaben:{} IF spa > (a.xsize - 4) COR zei > a.ysize COR spa < 2 COR zei < 1{} THEN LEAVE out invers{} FI.{} positioniere cursor:{} cursor (a.x + spa - 2, a.y + zei - 1).{}
+ laenge ist zu gross:{} laenge > a.xsize - spa - 1.{} verkuerzte ausgabe:{} out (mark ein); outsubtext (t, 1, a.xsize - spa - 1);{} out (blank); out (mark aus){}END PROC out invers;{}PROC erase invers (AREA CONST a, INT CONST spa, zei, INT CONST laenge):{} ueberpruefe cursorangaben; positioniere cursor;{} IF laenge ist zu gross{} THEN verkuerzte ausgabe{} ELSE erase (laenge + 3){} FI.{} ueberpruefe cursorangaben:{} IF spa > (a.xsize - 4) COR zei > a.ysize COR spa < 2 COR zei < 1{}
+ THEN LEAVE erase invers{} FI.{} positioniere cursor:{} cursor (a.x + spa - 2, a.y + zei - 1).{} laenge ist zu gross:{} laenge > a.xsize - spa - 1.{} verkuerzte ausgabe:{} erase ( a.xsize - spa + 2).{}END PROC erase invers;{}PROC out with beam (AREA CONST a, INT CONST spa, zei, TEXT CONST t):{} ueberpruefe cursorangaben; positioniere cursor;{} IF text ist zu lang{} THEN verkuerzte ausgabe{} ELSE out (senkrecht); out (blank); out (blank);{} out (t);{} out (blank); out (blank); out (senkrecht){}
+ FI.{} ueberpruefe cursorangaben:{} IF spa > a.xsize - 7 COR zei > a.ysize COR spa < 4 COR zei < 1{} THEN LEAVE out with beam{} FI.{} positioniere cursor:{} cursor (a.x + spa - 4, a.y + zei - 1).{} text ist zu lang:{} length (t) > a.xsize - spa - 2.{} verkuerzte ausgabe:{} out (senkrecht); out (blank); out (blank);{} outsubtext (t, 1, a.xsize - spa - 2);{} out (blank); out (blank); out (senkrecht){}END PROC out with beam;{}PROC out with beam (AREA CONST a, INT CONST spa, zei,{}
+ TEXT CONST t, INT CONST laenge):{} ueberpruefe cursorangaben; positioniere cursor;{} IF laenge ist zu gross{} THEN verkuerzte ausgabe{} ELSE out (senkrecht); out (blank); out (blank);{} outtext (t, 1,laenge);{} out (blank); out (blank); out (senkrecht){} FI.{} ueberpruefe cursorangaben:{} IF spa > a.xsize - 7 COR zei > a.ysize COR spa < 4 COR zei < 1{} THEN LEAVE out with beam{} FI.{} positioniere cursor:{} cursor (a.x + spa - 4, a.y + zei - 1).{}
+ laenge ist zu gross:{} laenge > a.xsize - spa - 2.{} verkuerzte ausgabe:{} out (senkrecht); out (blank); out (blank);{} outsubtext (t, 1, a.xsize - spa - 2);{} out (blank); out (blank); out (senkrecht){}END PROC out with beam;{}PROC erase with beam (AREA CONST a, INT CONST spa, zei, INT CONST laenge):{} ueberpruefe cursorangaben; positioniere cursor;{} IF laenge ist zu gross{} THEN verkuerzte ausgabe{} ELSE erase (laenge + 6){} FI.{} ueberpruefe cursorangaben:{} IF spa > a.xsize - 7 COR zei > a.ysize COR spa < 4 COR zei < 1{}
+ THEN LEAVE erase with beam{} FI.{} positioniere cursor:{} cursor (a.x + spa - 4, a.y + zei - 1).{} laenge ist zu gross:{} laenge > a.xsize - spa - 2.{} verkuerzte ausgabe:{} erase (a.xsize - spa + 4).{}END PROC erase with beam;{}PROC out invers with beam (AREA CONST a, INT CONST spa, zei, TEXT CONST t):{} ueberpruefe cursorangaben; positioniere cursor;{} IF text ist zu lang{} THEN verkuerzte ausgabe{} ELSE out (senkrecht); out (blank); out (mark ein);{} out (t);{}
+ out (blank); out (mark aus); out (senkrecht){} FI.{} ueberpruefe cursorangaben:{} IF spa > a.xsize - 7 COR zei > a.ysize COR spa < 4 COR zei < 1{} THEN LEAVE out invers with beam{} FI.{} positioniere cursor:{} cursor (a.x + spa - 4, a.y + zei - 1).{} text ist zu lang:{} length (t) > a.xsize - spa - 2.{} verkuerzte ausgabe:{} out (senkrecht); out (blank); out (mark ein);{} outsubtext (t, 1, a.xsize - spa - 2);{} out (blank); out (mark aus); out (senkrecht){}
+END PROC out invers with beam;{}PROC out invers with beam (AREA CONST a, INT CONST spa, zei,{} TEXT CONST t, INT CONST laenge):{} ueberpruefe cursorangaben; positioniere cursor;{} IF laenge ist zu gross{} THEN verkuerzte ausgabe{} ELSE out (senkrecht); out (blank); out (mark ein);{} outtext (t, 1, laenge);{} out (blank); out (mark aus); out (senkrecht){} FI.{} ueberpruefe cursorangaben:{} IF spa > a.xsize - 7 COR zei > a.ysize COR spa < 4 COR zei < 1{}
+ THEN LEAVE out invers with beam{} FI.{} positioniere cursor:{} cursor (a.x + spa - 4, a.y + zei - 1).{} laenge ist zu gross:{} laenge > a.xsize - spa - 2.{} verkuerzte ausgabe:{} out (senkrecht); out (blank); out (mark ein);{} outsubtext (t, 1, a.xsize - spa - 2);{} out (blank); out (mark aus); out (senkrecht){}END PROC out invers with beam;{}END PACKET ls dialog 1;{}
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG 2 b/app/gs.dialog/1.2/src/ls-DIALOG 2
new file mode 100644
index 0000000..1750162
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG 2
@@ -0,0 +1,77 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG 2 **
+ ** **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+PACKET ls dialog 2 DEFINES
+ some,{} one,{} infix namen,{} ohne praefix,{} not empty:{}LET maxentries = 200;{}LET zeichenstring = ""1""27""3""10""13""12"xo?",{} oben unten return rubout kreuz kringel = ""3""10""13""12"xo",{} q eins neun h = "q19h";{}LET zurueck = ""8"",{} piep = ""7"";{}LET hop = 1,{} esc = 2,{} oben = 3,{} unten = 4,{} return = 5,{} rubout = 6,{}
+ kreuz = 7,{} kringel = 8,{} frage = 9;{}LET punkt = ".",{} gleich = "=",{} blank = " ";{}INT VAR x,{} y,{} xsize,{} ysize,{} maxeintraege,{} anzahl,{} erste auswahlzeile,{} virtueller cursor,{} reeller cursor;{}TEXT VAR kennzeile 1,{} kennzeile 2,{} registrierkette :: "";{}BOOL VAR abbruch,{} auswahlende;{}BOUND ROW max entries TEXT VAR eintrag;{}ROW 2 TEXT CONST fehlermeldung :: ROW 2 TEXT : ({}
+ "Unzulässige Cursorwerte bei der Auswahl",{} "Fenster für Auswahl zu klein (x < 56 / y < 15)");{}ROW 24 TEXT CONST hinweis :: ROW 24 TEXT : ({} " Bitte warten... Ich sortiere und räume auf!",{} " Info: <?> Fertig: <ESC><q> Abbrechen: <ESC><h>",{} " Zum Weitermachen bitte irgendeine Taste tippen!",{} "Weitere Dateien!",{} "INFORMATIONEN: Auswahl mehrerer Dateien",{} "INFORMATIONEN: Auswahl einer Datei",{} " "15"Positionierungen: "14"",{} " hoch : zum vorausgehenden Namen",{}
+ " runter : zum folgenden Namen",{} " HOP hoch : auf den ersten Namen der Seite", (***********){} " HOP runter : auf den letzten Namen der Seite", (* bitte *){} " ESC 1 : auf den ersten Namen der Liste", (* diese *){} " ESC 9 : auf den letzten Namen der Liste", (* Länge *){} " "15"Auswahl treffen: "14"", (* nicht *){} " RETURN / x : diesen Namen ankreuzen ", (* über- *){}
+ " RUBOUT / o : Kreuz vor dem Namen loeschen", (* schrei-*){} " HOP RETURN / HOP x : alle folgende Namen ankreuzen", (* ten! *){} " HOP RUBOUT / HOP o : alle folgende Kreuze loeschen", (***********){} " "15"Auswahl verlassen: "14"",{} " ESC q : Auswahl verlassen",{} " ESC h : Auswahl abbrechen",{} " Auswahl m e h r e r e r Dateien durch Ankreuzen",{} " Auswahl e i n e r Datei durch Ankreuzen",{} " Bitte warten... Ich breche die Auswahl ab!"{}
+ );{}THESAURUS PROC auswahl (THESAURUS CONST t,{} BOOL CONST mehrere moeglich,{} TEXT CONST t1, t2):{} werte initialisieren;{} namen besorgen;{} bildschirm aufbauen;{} auswaehlen lassen;{} abgang vorbereiten.{} werte initialisieren:{} THESAURUS VAR ausgabe :: empty thesaurus;{} DATASPACE VAR ds := nilspace;{} eintrag := ds;{} kennzeile 1 := t1;{} kennzeile 2 := t2;{} abbruch := FALSE;{}
+ erste auswahlzeile := y + 7;{} anzahl := 0;{} maxeintraege := ysize - 11;{} virtueller cursor := 1;{} reeller cursor := 1.{} namen besorgen:{} fische die namen aus dem thesaurus;{} IF kein eintrag vorhanden{} THEN LEAVE auswahl WITH ausgabe{} FI.{} bildschirm aufbauen:{} schreibe kopfzeile;{} gib hinweis aus (kennzeile 1, kennzeile 2);{} gib erklaerungszeile aus (mehrere moeglich);{} baue bildschirm auf (1);{} footnote (x, y, xsize, ysize, hinweis [2]);{}
+ schreibe fusszeile;{} reellen cursor setzen .{} schreibe kopfzeile:{} cursor (x, y);{} out(ecke oben links);{} (xsize - 2) TIMESOUT waagerecht;{} out(ecke oben rechts).{} schreibe fusszeile:{} cursor (x, y + ysize - 1);{} out (ecke unten links);{} (xsize - 2) TIMESOUT waagerecht;{} out (ecke unten rechts).{} auswaehlen lassen:{} kreuze an (mehrere moeglich).{} abgang vorbereiten:{} IF abbruch{} THEN change footnote (x, y, xsize, ysize, hinweis [24]){}
+ ELSE change footnote (x, y, xsize, ysize, hinweis [ 1]){} FI;{} cursor (x + 1, y + ysize - 1);{} ausgabe erzeugen;{} forget (ds);{} ausgabe.{} fische die namen aus dem thesaurus:{} INT VAR zeiger;{} FOR zeiger FROM 1 UPTO highest entry (t) REP{} IF name (t, zeiger) <> ""{} THEN anzahl INCR 1;{} eintrag [anzahl] := name (t, zeiger){} FI{} PER.{} kein eintrag vorhanden:{} anzahl = 0.{} ausgabe erzeugen:{} TEXT VAR nummer;{} WHILE registrierkette <> "" REP{}
+ nummer := subtext (registrierkette, 1, 3);{} registrierkette := subtext (registrierkette, 5);{} insert (ausgabe, eintrag [ int (nummer)]){} PER.{}END PROC auswahl;{}PROC reellen cursor setzen:{} cursor (x + 1, erste auswahlzeile + reeller cursor - 1);{} out (marke (virtueller cursor, TRUE) + (8 * zurueck)){}END PROC reellen cursor setzen;{}PROC baue bildschirm auf (INT CONST anfang):{} gib kopfzeile aus;{} gib namenstabelle aus;{} gib fusszeile aus;{} loesche ggf restbereich.{}
+ gib kopfzeile aus:{} cursor (x, erste auswahlzeile - 1); out (senkrecht);{} IF reeller cursor = virtueller cursor{} THEN (xsize - 2) TIMESOUT punkt{} ELSE (xsize - length (hinweis [4]) - 5) TIMESOUT punkt;{} out (invers (hinweis [4])){} FI;{} out (senkrecht);{} line.{} gib namenstabelle aus:{} INT VAR zeiger, zaehler :: -1;{} FOR zeiger FROM anfang UPTO grenze REP{} zaehler INCR 1;{} cursor (x, erste auswahlzeile + zaehler);{} out (senkrecht); out (marke (zeiger, FALSE));{}
+ outtext (subtext (eintrag [zeiger], 1, xsize - 10), 1, xsize - 10);{} out (senkrecht);{} PER.{} gib fusszeile aus:{} cursor (x, erste auswahlzeile + zaehler + 1);{} out (senkrecht);{} IF NOT ((virtueller cursor + maxeintraege - reeller cursor) < anzahl){} THEN (xsize - 2) TIMESOUT punkt{} ELSE (xsize - length (hinweis [4]) - 5) TIMESOUT punkt;{} out (invers (hinweis [4])){} FI;{} out (senkrecht).{} loesche ggf restbereich:{} IF zaehler + 1 < maxeintraege{}
+ THEN loesche bildschirmrest{} FI.{} loesche bildschirmrest:{} FOR zeiger FROM restanfang UPTO restende REP{} cursor (x, zeiger); out (senkrecht);{} (xsize - 2) TIMESOUT blank;{} out (senkrecht){} PER.{} restanfang:{} erste auswahlzeile + zaehler + 2.{} restende:{} erste auswahlzeile + maxeintraege.{} grenze:{} min (anzahl, anfang + max eintraege - 1).{}END PROC baue bildschirm auf;{}TEXT PROC marke (INT CONST zeiger, BOOL CONST mit cursor):{}
+ INT VAR platz := nr (zeiger);{} IF platz = 0{} THEN leer{} ELSE mit zahl{} FI.{} mit zahl:{} IF mit cursor{} THEN "==>" + (3 - length (text (platz))) * blank + text (platz) + "x "{} ELSE " " + (3 - length (text (platz))) * blank + text (platz) + "x "{} FI.{} leer:{} IF mit cursor{} THEN "==> o "{} ELSE " o "{} FI.{}END PROC marke;{}INT PROC nr (INT CONST zeiger):{} IF pos (registrierkette, textstring (zeiger)) = 0{} THEN 0{} ELSE (pos (registrierkette, textstring (zeiger)) DIV 4) + 1{}
+ FI{}END PROC nr;{}TEXT PROC textstring (INT CONST nr):{} text (nr, 3) + "!"{}END PROC textstring;{}PROC info (BOOL CONST mehrere):{} notiere hinweisueberschrift;{} notiere positionierhinweise;{} IF noch platz vorhanden{} THEN notiere auswahlmoeglichkeiten auf alter seite{} ELSE wechsle auf naechste seite;{} notiere hinweisueberschrift;{} notiere auswahlmoeglichtkeiten auf neuer seite{} FI;{} stelle alten bildschirmzustand wieder her.{} notiere hinweisueberschrift:{}
+ cursor (x + 1, y + 1);{} IF mehrere{} THEN out (center(xsize - 2, invers (hinweis [5]))){} ELSE out (center(xsize - 2, invers (hinweis [6]))){} FI;{} cursor (x + 1, y + 2); out ("", xsize - 2).{} notiere positionierhinweise:{} cursor (x + 1, y + 3); out (hinweis [ 7], xsize - 2);{} cursor (x + 1, y + 4); out (hinweis [ 8], xsize - 2);{} cursor (x + 1, y + 5); out (hinweis [ 9], xsize - 2);{} cursor (x + 1, y + 6); out (hinweis [10], xsize - 2);{} cursor (x + 1, y + 7); out (hinweis [11], xsize - 2);{}
+ cursor (x + 1, y + 8); out (hinweis [12], xsize - 2);{} cursor (x + 1, y + 9); out (hinweis [13], xsize - 2).{} notiere auswahlmoeglichkeiten auf alter seite:{} cursor (x + 1, y + 10); out ("", xsize - 2);{} cursor (x + 1, y + 11); out (hinweis [14], xsize - 2);{} cursor (x + 1, y + 12); out (hinweis [15], xsize - 2);{} IF mehrere{} THEN gib alle auswahlmoeglichkeiten auf der alten seite an{} ELSE gib eine auswahlmoeglichkeit auf der alten seite an{} FI;{}
+ notiere verlassmoeglichkeiten auf der alten seite;{} loesche die restlichen zeilen;{} change footnote (x, y, xsize, ysize, hinweis [3]);{} cursor in ruhestellung;{} clear buffer.{} gib alle auswahlmoeglichkeiten auf der alten seite an:{} cursor (x + 1, y + 13); out (hinweis [16], xsize - 2);{} cursor (x + 1, y + 14); out (hinweis [17], xsize - 2);{} cursor (x + 1, y + 15); out (hinweis [18], xsize - 2).{} gib eine auswahlmoeglichkeit auf der alten seite an:{} cursor (x + 1, y + 13); out ("", xsize - 2);{}
+ cursor (x + 1, y + 14); out ("", xsize - 2);{} cursor (x + 1, y + 15); out ("", xsize - 2).{} notiere verlassmoeglichkeiten auf der alten seite:{} cursor (x + 1, y + 16); out ("", xsize - 2);{} cursor (x + 1, y + 17); out (hinweis [19], xsize - 2);{} cursor (x + 1, y + 18); out (hinweis [20], xsize - 2);{} cursor (x + 1, y + 19); out (hinweis [21], xsize - 2).{} loesche die restlichen zeilen:{} IF ysize = 24{} THEN cursor (x + 1, y + 20); out ("", xsize - 2){} FI.{}
+ wechsle auf naechste seite:{} loesche seitenrest;{} change footnote (x, y, xsize, ysize, hinweis [3]);{} cursor in ruhestellung;{} clear buffer;{} pause.{} loesche seitenrest:{} INT VAR zaehler;{} FOR zaehler FROM 10 UPTO ysize - 4 REP{} cursor (x + 1, y + zaehler); out ("", xsize - 2){} PER.{} notiere auswahlmoeglichtkeiten auf neuer seite:{} cursor (x + 1, y + 3); out (hinweis [14], xsize - 2);{} cursor (x + 1, y + 4); out (hinweis [15], xsize - 2);{} IF mehrere{}
+ THEN gib alle auswahlmoeglichkeiten auf der neuen seite an{} ELSE gib eine auswahlmoeglichkeit auf der neuen seite an{} FI;{} notiere verlassmoeglichkeiten auf der neuen seite.{} gib alle auswahlmoeglichkeiten auf der neuen seite an:{} cursor (x + 1, y + 5); out (hinweis [16], xsize - 2);{} cursor (x + 1, y + 6); out (hinweis [17], xsize - 2);{} cursor (x + 1, y + 7); out (hinweis [18], xsize - 2).{} gib eine auswahlmoeglichkeit auf der neuen seite an:{} cursor (x + 1, y + 5); out ("", xsize - 2);{}
+ cursor (x + 1, y + 6); out ("", xsize - 2);{} cursor (x + 1, y + 7); out ("", xsize - 2).{} notiere verlassmoeglichkeiten auf der neuen seite:{} cursor (x + 1, y + 8); out ("", xsize - 2);{} cursor (x + 1, y + 9); out (hinweis [19], xsize - 2);{} cursor (x + 1, y + 10); out (hinweis [20], xsize - 2);{} cursor (x + 1, y + 11); out (hinweis [21], xsize - 2);{} cursor in ruhestellung.{} cursor in ruhestellung:{} cursor (x + 1, y + ysize - 2).{} stelle alten bildschirmzustand wieder her:{}
+ clear buffer;{} pause;{} gib hinweis aus (kennzeile 1, kennzeile 2);{} gib erklaerungszeile aus (mehrere);{} virtueller cursor := 1;{} reeller cursor := 1;{} baue bildschirm auf (1);{} change footnote (x, y, xsize, ysize, hinweis [2]);{} reellen cursor setzen.{} noch platz vorhanden:{} (ysize - 4) > 18.{}END PROC info;{}PROC kreuze an (BOOL CONST mehrere):{} auswahlende := FALSE;{} REP{} zeichen lesen; zeichen interpretieren{} UNTIL auswahlende PER.{} zeichen lesen:{}
+ TEXT VAR zeichen;{} getchar (zeichen).{} zeichen interpretieren:{} SELECT pos (zeichenstring, zeichen) OF{} CASE hop : hop kommando verarbeiten (mehrere){} CASE esc : esc kommando verarbeiten{} CASE oben : nach oben{} CASE unten : nach unten{} CASE kreuz : ankreuzen; evtl aufhoeren{} CASE return : ankreuzen weiter; evtl aufhoeren{} CASE rubout : auskreuzen weiter{} CASE kringel : auskreuzen{} CASE frage : info (mehrere){}
+ OTHERWISE out (piep){} END SELECT.{} evtl aufhoeren:{} IF NOT mehrere{} THEN LEAVE kreuze an{} FI.{}END PROC kreuze an;{}PROC hop kommando verarbeiten (BOOL CONST mehrere):{} zweites zeichen lesen;{} zeichen interpretieren.{} zweites zeichen lesen:{} TEXT VAR zweites zeichen;{} getchar(zweites zeichen).{} zeichen interpretieren:{} SELECT pos (oben unten return rubout kreuz kringel, zweites zeichen) OF{} CASE 1 : hop nach oben{} CASE 2 : hop nach unten{}
+ CASE 3, 5 : IF mehrere THEN alle darunter ankreuzen FI{} CASE 4, 6 : IF mehrere THEN alle darunter loeschen FI{} OTHERWISE out (piep){} END SELECT.{} alle darunter ankreuzen:{} INT VAR i;{} FOR i FROM virtueller cursor UPTO anzahl REP{} IF nr (i) = 0{} THEN ankreuzen{} FI{} PER;{} bild aktualisieren ;{} reellen cursor setzen .{} ankreuzen:{} registrierkette CAT textstring (i).{} alle darunter loeschen:{} INT VAR j, position;{} FOR j FROM virtueller cursor UPTO anzahl REP{}
+ position := nr (j);{} IF position > 0{} THEN rausschmeissen;{} FI{} PER;{} bild aktualisieren;{} reellen cursor setzen.{} rausschmeissen:{} registrierkette := subtext (registrierkette, 1, (4 * position) - 4) +{} subtext (registrierkette, (4 * position) + 1).{} hop nach oben:{} IF ganz oben{} THEN out (piep){} ELIF oben auf der seite{} THEN raufblaettern{} ELSE top of page{} FI.{} ganz oben:{} virtueller cursor = 1.{}
+ oben auf der seite:{} reeller cursor = 1.{} raufblaettern:{} virtueller cursor DECR max eintraege;{} virtueller cursor := max (virtueller cursor, 1);{} baue bildschirm auf (virtueller cursor);{} reellen cursor setzen.{} top of page:{} loesche marke;{} virtueller cursor DECR (reeller cursor - 1);{} reeller cursor := 1;{} reellen cursor setzen.{} hop nach unten:{} IF ganz unten{} THEN out (piep){} ELIF unten auf der seite{} THEN runterblaettern{}
+ ELSE bottom of page{} FI.{} ganz unten:{} virtueller cursor = anzahl.{} unten auf der seite:{} reeller cursor > max eintraege - 1.{} runterblaettern:{} INT VAR alter virtueller cursor :: virtueller cursor;{} virtueller cursor INCR max eintraege;{} virtueller cursor := min (virtueller cursor, anzahl);{} reeller cursor := virtueller cursor - alter virtueller cursor;{} baue bildschirm auf (alter virtueller cursor + 1);{} reellen cursor setzen.{} bottom of page:{}
+ loesche marke;{} alter virtueller cursor := virtueller cursor;{} virtueller cursor INCR (max eintraege - reeller cursor);{} virtueller cursor := min (anzahl, virtueller cursor);{} reeller cursor INCR (virtueller cursor - alter virtueller cursor);{} reellen cursor setzen.{}END PROC hop kommando verarbeiten;{}PROC esc kommando verarbeiten:{} TEXT VAR zweites zeichen;{} getchar (zweites zeichen);{} SELECT pos (q eins neun h, zweites zeichen) OF{} CASE 1 : auswahlende := TRUE{}
+ CASE 2 : zeige anfang{} CASE 3 : zeige ende{} CASE 4 : abbruch := TRUE;{} auswahlende := TRUE;{} registrierkette := ""{} OTHERWISE out (piep){} END SELECT.{} zeige anfang:{} IF virtueller cursor = 1{} THEN out (piep){} ELIF virtueller cursor = reeller cursor{} THEN loesche marke;{} virtueller cursor := 1;{} reeller cursor := 1;{} reellen cursor setzen{} ELSE virtueller cursor := 1;{}
+ reeller cursor := 1;{} baue bildschirm auf (1);{} reellen cursor setzen{} FI.{} zeige ende:{} IF virtueller cursor = anzahl{} THEN out (piep){} ELIF ende auf bildschirm{} THEN loesche marke;{} reeller cursor INCR (anzahl - virtueller cursor);{} virtueller cursor := anzahl;{} reellen cursor setzen{} ELSE virtueller cursor := anzahl;{} reeller cursor := max eintraege;{}
+ baue bildschirm auf (anzahl - (max eintraege - 1));{} reellen cursor setzen{} FI.{} ende auf bildschirm:{} (reeller cursor + anzahl - virtueller cursor) < max eintraege + 1.{}END PROC esc kommando verarbeiten;{}PROC ankreuzen:{} INT VAR platz :: nr (virtueller cursor);{} IF platz <> 0{} THEN out (piep);{} LEAVE ankreuzen{} FI;{} registrierkette CAT textstring (virtueller cursor);{} reellen cursor setzen{}END PROC ankreuzen;{}PROC ankreuzen weiter:{}
+ INT VAR platz :: nr (virtueller cursor);{} IF platz <> 0{} THEN out (piep);{} LEAVE ankreuzen weiter{} FI;{} registrierkette CAT textstring (virtueller cursor);{} IF virtueller cursor < anzahl{} THEN nach unten{} FI;{} IF virtueller cursor = anzahl{} THEN reellen cursor setzen{} FI{}END PROC ankreuzen weiter;{}PROC auskreuzen weiter:{} INT VAR position :: nr (virtueller cursor);{} IF position = 0{} THEN out (piep);{} LEAVE auskreuzen weiter{} FI;{} rausschmeissen;{}
+ IF virtueller cursor < anzahl{} THEN nach unten{} ELSE loesche marke{} FI;{} bild aktualisieren;{} reellen cursor setzen.{} rausschmeissen:{} registrierkette := subtext (registrierkette, 1, 4 * position - 4) +{} subtext (registrierkette, 4 * position + 1).{}END PROC auskreuzen weiter;{}PROC auskreuzen:{} INT VAR position :: nr (virtueller cursor);{} IF position = 0{} THEN out (piep);{} LEAVE auskreuzen{} FI;{} rausschmeissen;{} loesche marke;{}
+ bild aktualisieren;{} reellen cursor setzen.{} rausschmeissen:{} registrierkette := subtext (registrierkette, 1, 4 * position - 4) +{} subtext (registrierkette, 4 * position + 1).{}END PROC auskreuzen;{}PROC bild aktualisieren:{} INT VAR ob, un, i, zaehler :: -1;{} ob := virtueller cursor - reeller cursor + 1;{} un := min (ob + max eintraege - 1, anzahl);{} FOR i FROM ob UPTO un REP{} zaehler INCR 1;{} cursor (x + 1, erste auswahlzeile + zaehler);{} out (marke (i,FALSE)) PER{}
+END PROC bild aktualisieren;{}PROC nach oben:{} IF noch nicht oben (*virtuell*){} THEN gehe nach oben{} ELSE out (piep){} FI.{} noch nicht oben:{} virtueller cursor > 1.{} gehe nach oben:{} IF reeller cursor = 1 THEN scroll down ELSE cursor up FI.{} scroll down:{} virtueller cursor DECR 1;{} baue bildschirm auf (virtueller cursor);{} reellen cursor setzen.{} cursor up:{} loesche marke;{} virtueller cursor DECR 1;{} reeller cursor DECR 1;{} reellen cursor setzen{}
+END PROC nach oben;{}PROC nach unten:{} IF noch nicht unten (*virtuell*){} THEN gehe nach unten{} ELSE out (piep){} FI.{} noch nicht unten:{} virtueller cursor < anzahl.{} gehe nach unten:{} IF reeller cursor > max eintraege - 1 THEN scroll up ELSE cursor down FI.{} scroll up:{} virtueller cursor INCR 1;{} baue bildschirm auf (virtueller cursor - (max eintraege - 1));{} reellen cursor setzen.{} cursor down:{} loesche marke;{} virtueller cursor INCR 1;{} reeller cursor INCR 1;{}
+ reellen cursor setzen{}END PROC nach unten;{}PROC loesche marke:{} out (marke (virtueller cursor, FALSE)){}END PROC loesche marke;{}PROC footnote (INT CONST x, y, xsize, ysize, TEXT CONST text):{} cursor (x, y + ysize - 3);{} out (balken links); (xsize - 2) TIMESOUT waagerecht; out (balken rechts);{} change footnote (x, y, xsize, ysize, text){}END PROC footnote;{}PROC change footnote (INT CONST x, y, xsize, ysize, TEXT CONST text):{} cursor (x, y + ysize - 2);{} out (senkrecht); outtext (text, 1, xsize - 2); out (senkrecht){}
+END PROC change footnote;{}PROC gib hinweis aus (TEXT CONST t1, t2):{} cursor (x, y + 1); out (senkrecht);{} out (center (xsize - 2, invers (t1)));{} out (senkrecht);{} cursor (x, y + 2); out (senkrecht);{} out ("", xsize - 2);{} out (senkrecht);{} cursor (x, y + 3); out (senkrecht);{} out (center (xsize - 2, t2));{} out (senkrecht){}END PROC gib hinweis aus;{}PROC gib erklaerungszeile aus (BOOL CONST mehrere):{}
+ cursor (x, y + 4); out (senkrecht);{} out ((xsize - 2) * gleich);{} out (senkrecht);{} cursor (x, y + 5); out (senkrecht);{} IF mehrere{} THEN out (erklaerungszeile mehrere){} ELSE out (erklaerungszeile eine){} FI;{} out (senkrecht).{} erklaerungszeile mehrere:{} invers (text 1 + (rest1 * blank)).{} erklaerungszeile eine:{} invers (text 2 + (rest2 * blank)).{}
+ text1:{} hinweis [22].{} text2:{} hinweis [23].{} rest1: (***************************){} xsize - length (text1) - 5. (* durch 'invers' wird ein *){} (* Blank angehängt und zu- *){} rest2: (* sätzlich noch durch *){} xsize - length (text2) - 5. (* 'relativcenter' - außer-*){}END PROC gib erklaerungszeile aus; (* dem nimmt die Markierung*){} (* selbst eine Position ein*){}
+ (***************************){}THESAURUS PROC infix namen (THESAURUS CONST t, TEXT CONST infix):{} THESAURUS VAR tt :: empty thesaurus;{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} TEXT VAR eintrag :: name (t,i);{} IF eintrag enthaelt infix{} THEN insert (tt, eintrag){} FI{} PER;{} tt.{} eintrag enthaelt infix:{} pos (eintrag, infix) <> 0{}END PROC infix namen;{}THESAURUS PROC infix namen (THESAURUS CONST t, INT CONST dateityp):{}
+ THESAURUS VAR tt :: empty thesaurus;{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} TEXT VAR eintrag :: name (t,i);{} IF eintrag enthaelt infix{} THEN insert (tt, eintrag){} FI{} PER;{} tt.{} eintrag enthaelt infix:{} type (old (eintrag)) = dateityp.{}END PROC infix namen;{}THESAURUS PROC infix namen (THESAURUS CONST t,{} TEXT CONST infix 1, INT CONST dateityp):{} THESAURUS VAR tt :: empty thesaurus;{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{}
+ TEXT VAR eintrag :: name (t,i);{} IF eintrag enthaelt infix{} THEN insert (tt, eintrag){} FI{} PER;{} tt.{} eintrag enthaelt infix:{} (pos (eintrag, infix 1) <> 0) AND (type (old (eintrag)) = dateityp).{}END PROC infix namen;{}THESAURUS PROC infix namen (THESAURUS CONST t,{} TEXT CONST infix 1, infix 2):{} THESAURUS VAR tt :: empty thesaurus;{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} TEXT VAR eintrag :: name (t,i);{} IF eintrag enthaelt infix{}
+ THEN insert (tt, eintrag){} FI{} PER;{} tt.{} eintrag enthaelt infix:{} (pos (eintrag, infix 1) <> 0) OR (pos (eintrag, infix 2) <> 0){}END PROC infix namen;{}THESAURUS PROC infix namen (TEXT CONST infix):{} infix namen (ALL myself, infix){}END PROC infix namen;{}THESAURUS PROC infix namen (TEXT CONST infix 1, infix 2):{} infix namen (ALL myself, infix 1, infix 2){}END PROC infix namen;{}THESAURUS PROC ohne praefix (THESAURUS CONST thesaurus, TEXT CONST praefix):{} THESAURUS VAR t :: empty thesaurus;{}
+ INT VAR zaehler;{} FOR zaehler FROM 1 UPTO highest entry (thesaurus) REP{} IF name (thesaurus, zaehler) <> ""{} AND pos (name (thesaurus, zaehler), praefix) = 1{} THEN insert (t, subtext (name (thesaurus, zaehler),{} length (praefix) + 1)){} FI;{} PER;{} t{}END PROC ohne praefix;{}BOOL PROC not empty (THESAURUS CONST t):{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} IF name (t, i) <> ""{} THEN LEAVE not empty WITH TRUE{}
+ FI{} PER;{} FALSE{}END PROC not empty;{}PROC untersuche bildschirmmasszahlen (TEXT CONST t1, t2):{} IF unzulaessige cursorwerte{} THEN errorstop (fehlermeldung [1]){} ELIF fenster ist zu klein{} THEN errorstop (fehlermeldung [2]){} FI.{} unzulaessige cursorwerte:{} (x + xsize) > 80 COR (y + ysize) > 25 COR x < 1 COR y < 1{} COR xsize > 79 COR ysize > 24.{} fenster ist zu klein:{} (xsize) < 56 COR (ysize) < 15{} COR length (t1) > (xsize - 5) COR length (t2) > (xsize - 5).{}
+END PROC untersuche bildschirmmasszahlen;{}TEXT PROC ggf gekuerzter text (TEXT CONST text):{} IF length (text) > (xsize - 5){} THEN subtext (text, 1, xsize - 7) + ".."{} ELSE text{} FI{}END PROC ggf gekuerzter text;{}THESAURUS PROC some (INT CONST spa, zei, breite, hoehe,{} THESAURUS CONST t,{} TEXT CONST t1, t2):{} TEXT VAR text 1, text 2;{} x := spa;{} y := zei;{} xsize := breite;{} ysize := hoehe;{} text 1 := ggf gekuerzter text (t1);{}
+ text 2 := ggf gekuerzter text (t2);{} untersuche bildschirmmasszahlen (text 1, text 2);{} auswahl (t, TRUE, text 1, text 2){}END PROC some;{}THESAURUS PROC some (INT CONST spa, zei,{} THESAURUS CONST t,{} TEXT CONST t1, t2):{} some (spa, zei, 79 - spa + 1, 24 - zei + 1, t, t1, t2){}END PROC some;{}THESAURUS PROC some (THESAURUS CONST t,{} TEXT CONST t1, t2):{} some (1, 1, 79, 24, t, t1, t2){}END PROC some;{}TEXT PROC one (INT CONST spa, zei, breite, hoehe,{}
+ THESAURUS CONST t,{} TEXT CONST t1, t2):{} TEXT VAR text 1, text 2;{} x := spa;{} y := zei;{} xsize := breite;{} ysize := hoehe;{} text 1 := ggf gekuerzter text (t1);{} text 2 := ggf gekuerzter text (t2);{} untersuche bildschirmmasszahlen (text 1, text 2);{} name (auswahl (t, FALSE, text 1, text 2), 1){}END PROC one;{}TEXT PROC one (INT CONST spa, zei,{} THESAURUS CONST t,{} TEXT CONST t1, t2):{} one (spa, zei, 79 - spa + 1, 24 - zei + 1, t, t1, t2){}
+END PROC one;{}TEXT PROC one (THESAURUS CONST t, TEXT CONST t1, t2):{} one (1, 1, 79, 24, t, t1, t2){}END PROC one;{}END PACKET ls dialog 2;{}
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG 3 b/app/gs.dialog/1.2/src/ls-DIALOG 3
new file mode 100644
index 0000000..dce6507
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG 3
@@ -0,0 +1,48 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG 3 **
+ ** **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+PACKET ls dialog 3 DEFINES{} WINDOW, :=, window,{} show, page, erase,{} line, remaining lines,{} cursor, get cursor,{} out frame, out menuframe,{} out, put, putline, editget,{} get, getline, yes, no,{} edit, center, stop,{} area, areax, areay,{} areaxsize, areaysize:{}LET piep = ""7"",{} cr = ""13"";{}LET janeinkette = "jJyYnN",{} blank = " ",{} niltext = "";{}TYPE WINDOW = STRUCT (AREA fenster,{}
+ INT cspalte, czeile, belegbare zeilen,{} BOOL fensterende erreicht);{}ROW 3 TEXT CONST aussage :: ROW 3 TEXT : ({} " 'Window' ungültig!",{} " (j/n) ?",{} " Zum Weitermachen bitte irgendeine Taste tippen!"{} );{}TEXT VAR number word, exit char;{}OP := (WINDOW VAR links, WINDOW CONST rechts):{} CONCR (links) := CONCR (rechts){}END OP :=;{}WINDOW PROC window (INT CONST x, y, xsize, ysize):{} WINDOW VAR w;{} fill (w.fenster, x, y, xsize, ysize);{} IF fenster ungueltig (w){}
+ THEN errorstop (aussage [1]){} FI;{} initialize (w);{} w{}END PROC window;{}PROC initialize (WINDOW VAR w):{} w.czeile := 1;{} w.cspalte := 1;{} w.fensterende erreicht := FALSE;{} w.belegbare zeilen := areaysize (w.fenster){}END PROC initialize;{}BOOL PROC fenster ungueltig (WINDOW CONST w):{} IF areax (w.fenster) < 1 COR areax (w.fenster) > 79{} COR areay (w.fenster) < 1 COR areay (w.fenster) > 24{} COR areaxsize (w.fenster) < 6 COR areaysize (w.fenster) < 3{}
+ COR areax (w.fenster) + areaxsize (w.fenster) > 80{} COR areay (w.fenster) + areaysize (w.fenster) > 25{} THEN TRUE{} ELSE FALSE{} FI.{}END PROC fenster ungueltig;{}PROC show (WINDOW VAR w):{} zeige rahmen;{} fenster putzen.{} zeige rahmen:{} out frame (w.fenster).{} fenster putzen:{} page (w).{}END PROC show;{}PROC page (WINDOW VAR w):{} initialize (w);{} page (w, FALSE){}END PROC page;{}PROC page (WINDOW CONST w, BOOL CONST mit rahmen ):{} IF areax (w) = 1 AND areay (w) = 1 AND{}
+ areaxsize (w) = 79 AND areaysize (w) = 24{} THEN page;{} ELSE loesche bereich{} FI.{} loesche bereich:{} IF mit rahmen{} THEN page (areax (w) - 1, areay (w) - 1,{} areaxsize (w) + 2, areaysize (w) + 2){} ELSE page (area (w)){} FI{}END PROC page;{}PROC erase (WINDOW VAR w):{} page (w, TRUE){}END PROC erase;{}PROC line (WINDOW VAR w):{} w.cspalte := 1;{} IF w.czeile < w.belegbare zeilen{} THEN w.czeile INCR 1;{} ELSE w.czeile := 1;{}
+ w.fensterende erreicht := TRUE{} FI;{} cursor (w, w.cspalte, w.czeile){}END PROC line;{}PROC line (WINDOW VAR w, INT CONST anzahl):{} INT VAR i; FOR i FROM 1 UPTO anzahl REP line (w) PER{}END PROC line;{}INT PROC remaining lines (WINDOW CONST w):{} INT VAR spalte, zeile;{} get cursor (w, spalte, zeile);{} IF spalte = 0 OR zeile = 0{} THEN 0{} ELSE w.belegbare zeilen - w.czeile{} FI{}END PROC remaining lines;{}PROC cursor (WINDOW VAR w, INT CONST spalte, zeile):{} IF spalte < 1 OR zeile < 1 OR spalte > areaxsize (w) OR zeile > areaysize (w){}
+ THEN page (w);{} ELSE w.cspalte := spalte; w.czeile := zeile;{} FI;{} cursor (w.fenster, w.cspalte, w.czeile){}END PROC cursor;{}PROC get cursor (WINDOW CONST w, INT VAR spalte, zeile):{} IF (w.cspalte < 1) OR (w.cspalte > areaxsize (w.fenster)){} OR{} (w.czeile < 1) OR (w.czeile > areaysize (w.fenster)){} THEN spalte := 0; zeile := 0{} ELSE spalte := w.cspalte; zeile := w.czeile{} FI{}END PROC get cursor;{}PROC out (WINDOW VAR w, TEXT CONST text):{}
+ INT VAR restlaenge;{} IF (w.cspalte >= 1) AND (w.cspalte <= areaxsize (w.fenster)){} AND{} (w.czeile >= 1) AND (w.czeile <= w.belegbare zeilen){} THEN putze ggf fenster;{} cursor (w.fenster, w.cspalte, w.czeile);{} outtext (text, 1, textende);{} setze fenstercursor neu;{} setze ausgabe ggf in naechster zeile fort{} FI.{} putze ggf fenster:{} IF w.fensterende erreicht{} THEN page (w);{} w.fensterende erreicht := FALSE{}
+ FI.{} textende:{} restlaenge := areaxsize (w.fenster) - w.cspalte + 1;{} min (length (text), restlaenge).{} setze fenstercursor neu:{} IF length (text) >= restlaenge{} THEN w.cspalte := 1;{} w.czeile INCR 1;{} schlage ggf neue seite auf{} ELSE w.cspalte INCR length (text){} FI.{} schlage ggf neue seite auf:{} IF w.czeile > w.belegbare zeilen{} THEN page (w);{} w.czeile := 1{} FI.{} setze ausgabe ggf in naechster zeile fort:{}
+ IF length (text) > restlaenge{} THEN out (w, subtext (text, restlaenge + 1)){} FI.{}END PROC out;{}PROC out frame (WINDOW VAR w):{} out frame (area (w)){}END PROC out frame;{}PROC out menuframe (WINDOW VAR w):{} out menu frame (area (w)){}END PROC out menuframe;{}PROC put (WINDOW VAR w, TEXT CONST word):{} out (w, word); out (w, blank){}END PROC put;{}PROC put (WINDOW VAR w, INT CONST number):{} put (w, text (number)){}END PROC put;{}PROC put (WINDOW VAR w, REAL VAR number):{} put (w, text (number)){}
+END PROC put;{}PROC putline (WINDOW VAR w, TEXT CONST textline):{} out (w, textline); line (w){}END PROC putline;{}PROC editget (WINDOW VAR w, TEXT VAR ausgabe,{} INT CONST max laenge, scroll,{} TEXT CONST sep, res, TEXT VAR exit char):{} INT VAR spalte, zeile;{} ggf zur naechsten zeile;{} get cursor (spalte, zeile); cursor on; cursor (spalte, zeile);{} editget (ausgabe, max laenge, min (scroll, restlaenge),{} sep, res, exitchar);{} get cursor (spalte, zeile); cursor off; cursor (spalte, zeile).{}
+ ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{} restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{}END PROC editget;{}PROC editget (WINDOW VAR w, TEXT VAR ausgabe):{} TEXT VAR dummy;{} editget (w, ausgabe, 79, 79, "", "", dummy){}END PROC editget;{}PROC get (WINDOW VAR w, TEXT VAR word):{} INT VAR spa, zei;{} ggf zur naechsten zeile;{} get cursor (spa, zei); cursor on; cursor (spa, zei);{} REP{} word := "";{} editget (word, maxtextlength, restlaenge, " ", "", exit char);{}
+ out (w, subtext (word, 1, restlaenge));{} IF compress (word) <> ""{} THEN echoe exit char (w){} FI{} UNTIL word <> niltext AND word <> blank PER;{} get cursor (spa, zei); cursor off; cursor (spa, zei);{} delete leading blanks.{} ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{} restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{} delete leading blanks:{} WHILE (word SUB 1) = blank REP word := subtext (word, 2) PER.{}END PROC get;{}PROC get (WINDOW VAR w, TEXT VAR word, TEXT CONST separator):{}
+ INT VAR spa, zei;{} ggf zur naechsten zeile;{} get cursor (spa, zei); cursor on; cursor (spa, zei);{} REP{} word := "";{} editget (word, maxtextlength, restlaenge, separator, "", exit char);{} out (w, subtext (word, 1, restlaenge));{} echoe exit char (w);{} UNTIL word <> niltext AND word <> blank PER;{} get cursor (spa, zei); cursor off; cursor (spa, zei).{} ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{} restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{}
+END PROC get;{}PROC get (WINDOW VAR w, TEXT VAR word, INT CONST length):{} INT VAR spa, zei;{} ggf zur naechsten zeile;{} get cursor (spa, zei); cursor on; cursor (spa, zei);{} REP{} word := "";{} editget (word, maxtextlength, laenge, "", "", exit char);{} out (w, subtext (word, 1, laenge));{} echoe exit char (w){} UNTIL word <> niltext AND word <> blank PER;{} get cursor (spa, zei); cursor off; cursor (spa, zei).{} ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{}
+ restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{} laenge:{} min (length, restlaenge).{}END PROC get;{}PROC get (WINDOW VAR w, INT VAR number):{} get (w, number word);{} number := int (number word){}END PROC get;{}PROC get (WINDOW VAR w, REAL VAR number):{} get (w, number word);{} number := real (number word){}END PROC get;{}PROC getline (WINDOW VAR w, TEXT VAR textline):{} INT VAR spa, zei;{} ggf zur naechsten zeile;{} get cursor (spa, zei); cursor on; cursor (spa, zei);{} REP{}
+ textline := "";{} editget (textline, maxtextlength, restlaenge, "", "", exit char);{} out (w, subtext (word, 1, restlaenge));{} echoe exit char (w);{} UNTIL textline <> niltext AND textline <> blank PER;{} get cursor (spa, zei); cursor off; cursor (spa, zei).{} ggf zur naechsten zeile:{} IF restlaenge < 5 THEN line (w) FI.{} restlaenge:{} areaxsize (w.fenster) - w.cspalte - 1.{}END PROC getline;{}PROC echoe exit char (WINDOW VAR fenster):{} IF exit char = cr{} THEN line (fenster){}
+ ELSE out (fenster, exit char){} FI{}END PROC echoe exit char;{}TEXT PROC center (WINDOW CONST w, TEXT CONST text):{} IF length (text) >= areaxsize (w.fenster){} THEN subtext (text, 1, areaxsize (w.fenster)){} ELSE center (areaxsize (w.fenster), text){} FI{}END PROC center;{}BOOL PROC yes (WINDOW VAR w, TEXT CONST frage):{} TEXT VAR zeichen, interne frage :: frage;{} interne frage CAT aussage [2];{} wechsel ggf auf neue seite;{} out (w, interne frage);{} hole eingabezeichen;{}
+ werte zeichen aus.{} wechsel ggf auf neue seite:{} IF remaining lines (w) < 1{} THEN page (w){} FI.{} hole eingabezeichen:{} cursor on; clear buffer;{} REP{} inchar (zeichen);{} piepse ggf{} UNTIL pos (janeinkette, zeichen) > 0 PER;{} out (w, blank + zeichen);{} cursor off; line (w).{} piepse ggf:{} IF pos (janeinkette, zeichen) = 0 THEN out (piep) FI.{} werte zeichen aus:{} IF pos (janeinkette, zeichen) < 5{} THEN TRUE{} ELSE FALSE{} FI.{}
+END PROC yes;{}PROC edit (WINDOW VAR w, FILE VAR f):{} out frame (w.fenster);{} loesche rechte spalten (w);{} cursor on;{} edit (f, areax (w.fenster), areay (w.fenster),{} areaxsize (w.fenster) - 1, areaysize (w.fenster));{} cursor off{}END PROC edit;{}PROC edit (WINDOW VAR w, TEXT CONST dateiname):{} FILE VAR f :: sequential file (modify, dateiname);{} to line (f, 1);{} edit (w, f){}END PROC edit;{}PROC show (WINDOW VAR w, FILE VAR f):{} out frame (w.fenster);{} loesche rechte spalten (w);{}
+ open editor (groesster editor + 1, f, FALSE,{} areax (w.fenster), areay (w.fenster),{} areaxsize (w.fenster) - 1, areaysize (w.fenster));{} cursor on;{} edit (groesster editor, "eqvw19dpgn"9"",{} PROC (TEXT CONST) std kommando interpreter);{} cursor off{}END PROC show;{}PROC show (WINDOW VAR w, TEXT CONST dateiname):{} FILE VAR f :: sequential file (modify, dateiname);{} to line (f, 1);{} show (w, f){}END PROC show;{}PROC loesche rechte spalten (WINDOW VAR w):{}
+ INT VAR i;{} FOR i FROM 1 UPTO areaysize (w.fenster) REP{} cursor (w, areaxsize (w.fenster) - 2, i); out (3 * blank){} PER{}END PROC loesche rechte spalten;{}BOOL PROC no (WINDOW VAR w, TEXT CONST frage):{} NOT yes (w, frage){}END PROC no;{}PROC stop (WINDOW VAR w):{} stop (w, 2){}END PROC stop;{}PROC stop (WINDOW VAR w, INT CONST zeilenzahl):{} INT VAR i; FOR i FROM 1 UPTO zeilenzahl REP line (w) PER;{} out (w, aussage [3]);{} pause{}END PROC stop;{}AREA PROC area (WINDOW CONST w):{}
+ w.fenster{}END PROC area;{}INT PROC areax (WINDOW CONST w):{} areax (w.fenster){}END PROC areax;{}INT PROC areay (WINDOW CONST w):{} areay (w.fenster){}END PROC areay;{}INT PROC areaxsize (WINDOW CONST w):{} areaxsize (w.fenster){}END PROC areaxsize;{}INT PROC areaysize (WINDOW CONST w):{} areaysize (w.fenster){}END PROC areaysize;{}END PACKET ls dialog 3;{}
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG 4 b/app/gs.dialog/1.2/src/ls-DIALOG 4
new file mode 100644
index 0000000..7c9d9c4
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG 4
@@ -0,0 +1,71 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG 4 **
+ ** **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+PACKET ls dialog 4 DEFINES{} boxinfo,{} boxnotice,{} boxalternative,{} boxyes,{} boxno,{} boxanswer,{} boxone,{} boxanswerone,{} boxsome,{} boxanswersome,{} out footnote,{} erase footnote:{}LET mark ein = ""15"",{} mark aus = ""14"",{} delimiter = ""13"",{} piep = ""7"",{} rechts links esc return = ""2""8""27""13"",{}
+ rechts links null return = ""2""8""0""13"" ,{} blank = " ",{} niltext = "",{} janeintasten = "jJyYnN";{}ROW 8 TEXT CONST aussage :: ROW 8 TEXT : ({}" Zum Weitermachen bitte irgendeine Taste tippen!",{}" Ändern: <Pfeile> Bestätigen: <RETURN> Abbruch: <ESC> <h>",{}" Ändern: <Pfeile> Bestätigen: <RETURN> Ja: <j> Nein: <n>",{}" Ändern: <Pfeile> Bestätigen: <RETURN>",{}" Fertig: <RETURN> Zeigen: <ESC><z> Abbruch: <ESC><h>",{}
+" Fertig: <RETURN> Abbruch: <ESC><h>",{}"Ja"13"Nein",{}" Eingabe: "{});{}PROC boxinfo (WINDOW VAR w, TEXT CONST t,{} INT CONST position, timelimit,{} INT VAR x, y, xsize, ysize):{} INT VAR spa, zei;{} get cursor (w, spa, zei);{} schreibe box (w, t, position, timelimit, x, y, xsize, ysize);{} cursor (w, spa, zei);{}END PROC boxinfo;{}PROC boxinfo (WINDOW VAR w, TEXT CONST t, INT CONST position,{} timelimit, BOOL CONST trennlinie weg):{} INT VAR x, y, xsize, ysize, spa, zei;{}
+ get cursor (w, spa, zei);{} schreibe box (w, t, position, timelimit, x, y, xsize, ysize);{} page up (x, y, xsize, ysize);{} IF trennlinie weg{} THEN erase footnote (w, TRUE){} ELSE erase footnote (w, FALSE){} FI;{} cursor (w, spa, zei){}END PROC boxinfo;{}PROC boxinfo (WINDOW VAR w, TEXT CONST t, INT CONST position, timelimit):{} boxinfo (w, t, position, timelimit, TRUE){}END PROC boxinfo;{}PROC boxinfo (WINDOW VAR w, TEXT CONST t):{} boxinfo (w, t, 5, maxint, TRUE){}END PROC boxinfo;{}
+PROC boxnotice (WINDOW VAR w, TEXT CONST t, INT CONST position,{} INT VAR x, y, xsize, ysize):{} INT VAR spa, zei;{} get cursor (w, spa, zei);{} schreibe notiz (w, t, position, x, y, xsize, ysize);{} cursor (w, spa, zei){}END PROC boxnotice;{}INT PROC boxalternative (WINDOW VAR w, TEXT CONST t,{} auswahlliste, zusatztasten,{} INT CONST position, BOOL CONST mit abbruch,{} INT VAR x, y, xsize, ysize):{}
+ INT VAR ergebnis, spa, zei;{} get cursor (w, spa, zei);{} schreibe alternativen (w, t, auswahlliste, zusatztasten, position,{} mit abbruch, x, y, xsize, ysize, ergebnis);{} cursor (w, spa, zei);{} ergebnis{}END PROC boxalternative;{}INT PROC boxalternative (WINDOW VAR w, TEXT CONST t, auswahlliste,{} zusatztasten, INT CONST position,{} BOOL CONST mit abbruch, trennlinie weg):{} INT VAR x, y, xsize, ysize, ergebnis, spa, zei;{}
+ get cursor (w, spa, zei);{} ergebnis := boxalternative (w, t, auswahlliste, zusatztasten, position,{} mit abbruch, x, y, xsize, ysize);{} page up (x, y, xsize, ysize);{} IF trennlinie weg{} THEN erase footnote (w, TRUE){} ELSE erase footnote (w, FALSE){} FI;{} cursor (w, spa, zei);{} ergebnis{}END PROC boxalternative;{}INT PROC boxalternative (WINDOW VAR w, TEXT CONST t,{} auswahlliste, zusatztasten,{} INT CONST position, BOOL CONST mit abbruch):{}
+ boxalternative (w, t, auswahlliste, zusatztasten,{} position, mit abbruch, TRUE){}END PROC boxalternative;{}BOOL PROC boxyes (WINDOW VAR w, TEXT CONST t, INT CONST position,{} INT VAR x, y, xsize, ysize):{} INT VAR spa, zei;{} get cursor (w, spa, zei);{} BOOL CONST wert :: ja (w, t, position, x, y, xsize, ysize);{} cursor (w, spa, zei);{} wert{}END PROC boxyes;{}BOOL PROC boxyes (WINDOW VAR w, TEXT CONST t,{} INT CONST position, BOOL CONST trennlinie weg):{}
+ INT VAR x, y, xsize, ysize, spa, zei;{} get cursor (w, spa, zei);{} BOOL VAR wert :: ja (w, t, position, x, y, xsize, ysize);{} page up (x, y, xsize, ysize);{} IF trennlinie weg{} THEN erase footnote (w, TRUE){} ELSE erase footnote (w, FALSE);{} FI;{} cursor (w, spa, zei);{} wert{}END PROC boxyes;{}BOOL PROC boxyes (WINDOW VAR w, TEXT CONST t, INT CONST position):{} boxyes (w, t, position, TRUE){}END PROC boxyes;{}BOOL PROC boxno (WINDOW VAR w, TEXT CONST t, INT CONST position,{}
+ INT VAR x, y, xsize, ysize):{} NOT boxyes (w, t, position, x, y, xsize, ysize){}END PROC boxno;{}BOOL PROC boxno (WINDOW VAR w, TEXT CONST t,{} INT CONST position, BOOL CONST trennlinie weg):{} NOT boxyes (w, t, position, trennlinie weg){}END PROC boxno;{}BOOL PROC boxno (WINDOW VAR w, TEXT CONST t, INT CONST position):{} boxno (w, t, position){}END PROC boxno;{}TEXT PROC boxanswer (WINDOW VAR w, TEXT CONST t, vorgabe,{} INT CONST position, INT VAR x, y, xsize, ysize):{}
+ INT VAR spa, zei;{} TEXT VAR wert;{} get cursor (w, spa, zei);{} wert := hole antwort (w, t, vorgabe, position, FALSE, x, y, xsize, ysize);{} cursor (spa, zei);{} wert{}END PROC boxanswer;{}TEXT PROC boxanswer (WINDOW VAR w, TEXT CONST t, vorgabe,{} INT CONST position, BOOL CONST trennlinie weg):{} INT VAR x, y, xsize, ysize, spa, zei;{} get cursor (w, spa, zei);{} TEXT VAR wert := hole antwort (w, t, vorgabe, position, FALSE,{} x, y, xsize, ysize);{}
+ page up (x, y, xsize, ysize);{} IF trennlinie weg{} THEN erase footnote (w, TRUE){} ELSE erase footnote (w, FALSE){} FI;{} cursor (w, spa, zei);{} wert{}END PROC boxanswer;{}TEXT PROC boxanswer (WINDOW VAR w, TEXT CONST t, vorgabe,{} INT CONST position):{} boxanswer (w, t, vorgabe, position, TRUE){}END PROC boxanswer;{}TEXT PROC boxone (WINDOW VAR w, THESAURUS CONST thesaurus,{} TEXT CONST text1, text2, BOOL CONST mit reinigung):{}
+ INT VAR spa, zei;{} get cursor (w, spa, zei);{} TEXT VAR wert :: one (areax (w) + 2, areay (w) + 2,{} areaxsize (w) - 4, areaysize (w) - 2,{} thesaurus, text1, text2);{} IF mit reinigung{} THEN page up (areax (w) + 2, areay (w) + 2,{} areaxsize (w) - 4, areaysize (w) - 2);{} erase footnote (w){} FI;{} cursor (w, spa, zei);{} wert{}END PROC boxone;{}TEXT PROC boxanswerone (WINDOW VAR w, TEXT CONST text, vorgabe,{}
+ THESAURUS CONST thesaurus, TEXT CONST t1, t2,{} BOOL CONST mit reinigung, trennlinie weg):{} INT VAR x,y, xsize, ysize, spa, zei;{} get cursor (w, spa, zei);{} TEXT VAR wert := hole antwort (w, text, vorgabe, 5, TRUE,{} x, y, xsize, ysize);{} IF wert = ""27"z"{} THEN lasse auswaehlen{} ELSE uebernimm den wert{} FI;{} cursor (w, spa, zei);{} wert.{} lasse auswaehlen:{} IF mit reinigung{} THEN wert := boxone (w, thesaurus, t1, t2, TRUE ){}
+ ELSE wert := boxone (w, thesaurus, t1, t2, FALSE){} FI.{} uebernimm den wert:{} IF mit reinigung{} THEN page up (x, y, xsize, ysize);{} entferne ggf die trennlinie{} FI.{} entferne ggf die trennlinie:{} IF trennlinie weg{} THEN erase footnote (w, TRUE){} ELSE erase footnote (w, FALSE){} FI.{}END PROC boxanswer one;{}TEXT PROC boxanswerone (WINDOW VAR w, TEXT CONST text, vorgabe,{} THESAURUS CONST thesaurus, TEXT CONST t1, t2,{}
+ BOOL CONST mit reinigung):{} boxanswerone (w, text, vorgabe, thesaurus, t1, t2, mit reinigung, TRUE){}END PROC boxanswer one;{}THESAURUS PROC boxsome (WINDOW VAR w, THESAURUS CONST thesaurus,{} TEXT CONST text1, text2,{} BOOL CONST mit reinigung):{} INT VAR spa, zei;{} get cursor (w, spa, zei);{} THESAURUS VAR wert :: some (areax (w) + 2, areay (w) + 2,{} areaxsize (w) - 4, areaysize (w) - 2,{}
+ thesaurus, text1, text2);{} IF mit reinigung{} THEN page up (areax (w) + 2, areay (w) + 2,{} areaxsize (w) - 4, areaysize (w) - 2);{} erase footnote (w){} FI;{} cursor (w, spa, zei);{} wert{}END PROC boxsome;{}THESAURUS PROC boxanswersome (WINDOW VAR w, TEXT CONST text, vorgabe,{} THESAURUS CONST thesaurus,{} TEXT CONST t1, t2,{} BOOL CONST mit reinigung, trennlinie weg):{}
+ THESAURUS VAR ergebnis :: empty thesaurus;{} INT VAR x, y, xsize, ysize, spa, zei;{} get cursor (w, spa, zei);{} TEXT VAR wert := hole antwort (w, text, vorgabe, 5, TRUE,{} x, y, xsize, ysize);{} IF wert = ""27"z"{} THEN lasse auswaehlen{} ELSE uebernimm den wert{} FI;{} cursor (w, spa, zei);{} ergebnis.{} lasse auswaehlen:{} IF mit reinigung{} THEN ergebnis := boxsome (w, thesaurus, t1, t2, TRUE ){} ELSE ergebnis := boxsome (w, thesaurus, t1, t2, FALSE){}
+ FI.{} uebernimm den wert:{} IF wert <> niltext{} THEN insert (ergebnis, wert){} FI;{} IF mit reinigung{} THEN page up (x, y, xsize, ysize);{} entferne ggf die trennlinie{} FI.{} entferne ggf die trennlinie:{} IF trennlinie weg{} THEN erase footnote (w, TRUE){} ELSE erase footnote (w, FALSE){} FI.{}END PROC boxanswer some;{}THESAURUS PROC boxanswersome (WINDOW VAR w, TEXT CONST text, vorgabe,{} THESAURUS CONST thesaurus,{}
+ TEXT CONST t1, t2,{} BOOL CONST mit reinigung):{} boxanswersome (w, text, vorgabe, thesaurus, t1, t2, mit reinigung, TRUE){}END PROC boxanswersome;{}PROC out footnote (WINDOW VAR w, BOOL CONST mit trennlinie, TEXT CONST text):{} INT VAR spa, zei;{} get cursor (w, spa, zei);{} IF mit trennlinie{} THEN cursor (w, 1, areaysize (w) - 1);{} areaxsize (w) TIMESOUT waagerecht{} FI;{} cursor (w, 1, areaysize (w));{} outtext (text, 1, areaxsize (w));{}
+ cursor (w, spa, zei){}END PROC out footnote;{}PROC out footnote (WINDOW VAR w, TEXT CONST t):{} out footnote (w, TRUE, t){}END PROC out footnote;{}PROC erase footnote (WINDOW VAR w, BOOL CONST auch trennlinie):{} INT VAR spa, zei;{} get cursor (w, spa, zei);{} IF auch trennlinie{} THEN cursor (w, 1, areaysize (w) - 1);{} outtext ("", 1, areaxsize (w)){} FI;{} cursor (w, 1, areaysize (w));{} outtext ("", 1, areaxsize (w));{} cursor (w, spa, zei){}END PROC erase footnote;{}PROC erase footnote (WINDOW VAR w):{}
+ erase footnote (w, TRUE){}END PROC erase footnote;{}PROC schreibe boxtext (WINDOW VAR w, TEXT CONST t,{} INT CONST position, zusatzlaenge,{} mindestbreite, mindesthoehe,{} INT VAR x, y, xsize, ysize):{} ermittle boxbreite und boxhoehe;{} ermittle rahmenwerte;{} schreibe boxkopf;{} schreibe boxrumpf.{} ermittle boxbreite und boxhoehe:{} TEXT VAR intern :: t + delimiter;{} entferne fuehrende delimiter;{} INT VAR anfang :: 1,{}
+ ende :: pos (intern, delimiter, anfang) - 1;{} xsize := 0;{} ysize := 0;{} WHILE ende > 0 REP{} ysize INCR 1;{} lege ggf boxbreite fest;{} bestimme neue positionen{} PER.{} entferne fuehrende delimiter:{} WHILE (intern SUB 1) = delimiter REP{} intern := subtext (intern, 2){} PER.{} lege ggf boxbreite fest:{} IF length (subtext (intern, anfang, ende)) > xsize{} THEN xsize := length (subtext (intern, anfang, ende)){} FI.{} bestimme neue positionen:{}
+ anfang := ende + 2;{} ende := pos (intern, delimiter, anfang) - 1.{} ermittle rahmenwerte:{} schlage notwendige groessen auf;{} kill ueberlaengen;{} lege bildschirmpositionen fest.{} schlage notwendige groessen auf:{} IF xsize < mindestbreite{} THEN xsize := mindestbreite{} FI;{} IF ysize < mindesthoehe{} THEN ysize := mindesthoehe{} FI;{} ysize INCR zusatzlaenge;{} ysize INCR 2; (* Für den Rahmen *){} xsize INCR 2. (* Für den Rahmen *){} kill ueberlaengen:{}
+ IF ysize > (areaysize (w) - 4){} THEN ysize := areaysize (w) - 4{} FI;{} IF xsize > (areaxsize (w) - 4){} THEN xsize := areaxsize (w) - 4{} FI.{} lege bildschirmpositionen fest:{} SELECT position OF{} CASE 1: plazierung links oben{} CASE 2: plazierung rechts oben{} CASE 3: plazierung links unten{} CASE 4: plazierung rechts unten{} OTHERWISE plazierung im zentrum{} END SELECT.{} plazierung links oben:{} x := areax (w) + 2;{} y := areay (w) + 2.{}
+ plazierung rechts oben:{} x := areax (w) + areaxsize (w) - xsize - 2;{} y := areay (w) + 2.{} plazierung links unten:{} x := areax (w) + 2;{} y := areay (w) + areaysize (w) - ysize - 2.{} plazierung rechts unten:{} x := areax (w) + areaxsize (w) - xsize - 2;{} y := areay (w) + areaysize (w) - ysize - 2.{} plazierung im zentrum:{} x := areax (w) + ((areaxsize (w) - (xsize + 2)) DIV 2) + 1;{} y := areay (w) + ((areaysize (w) - ysize) DIV 2).{} schreibe boxkopf:{}
+ cursor (x, y);{} out (ecke oben links);{} (xsize - 2) TIMESOUT waagerecht;{} out (ecke oben rechts).{} schreibe boxrumpf:{} INT VAR i;{} intern := t + delimiter;{} entferne fuehrende delimiter;{} anfang := 1;{} ende := pos (intern, delimiter, anfang) - 1;{} FOR i FROM y + 1 UPTO y + ysize - zusatzlaenge - 2 REP{} cursor (x, i);{} out (senkrecht);{} outtext (subtext (intern, anfang, ende), 1, xsize - 2);{} out (senkrecht);{} anfang := ende + 2;{}
+ ende := pos (intern, delimiter, anfang) - 1{} PER{}END PROC schreibe boxtext;{}PROC schreibe boxfuss (WINDOW VAR w,{} INT CONST x, y, xsize, ysize, limit):{} schreibe abschlusszeile;{} out footnote (w, aussage [1]);{} cursor in position und warten.{} schreibe abschlusszeile:{} cursor (x, y + ysize - 1);{} out (ecke unten links);{} (xsize - 2) TIMESOUT waagerecht;{} out (ecke unten rechts).{} cursor in position und warten:{} cursor parken (w);{}
+ clear buffer;{} pause (limit){}END PROC schreibe boxfuss;{}PROC cursor parken (WINDOW VAR w):{} cursor (w, 1, 2){}END PROC cursor parken;{}PROC schreibe box (WINDOW VAR w, TEXT CONST t,{} INT CONST position, timelimit,{} INT VAR x, y, xsize, ysize):{} schreibe boxtext (w, t, position, 0, 0, 0, x, y, xsize, ysize);{} schreibe boxfuss (w, x, y, xsize, ysize, timelimit){}END PROC schreibe box;{}PROC schreibe notizfuss (WINDOW VAR w, INT CONST x, y, xsize, ysize):{}
+ schreibe abschlusszeile;{} cursor parken (w).{} schreibe abschlusszeile:{} cursor (x, y + ysize - 1);{} out (ecke unten links);{} (xsize - 2) TIMESOUT waagerecht;{} out (ecke unten rechts).{}END PROC schreibe notizfuss;{}PROC schreibe notiz (WINDOW VAR w, TEXT CONST t, INT CONST position,{} INT VAR x, y, xsize, ysize):{} schreibe boxtext (w, t, position, 0, 0, 0, x, y, xsize, ysize);{} schreibe notizfuss (w, x, y, xsize, ysize){}END PROC schreibe notiz;{}PROC schreibe alternativen (WINDOW VAR w, TEXT CONST t, altzeile, sonst,{}
+ INT CONST position, BOOL CONST mit abbruch,{} INT VAR x, y, xsize, ysize, ergebnis):{} ROW 10 STRUCT (TEXT alternat, INT anfang, laenge) VAR altliste;{} normiere alternativen;{} untersuche alternativen;{} schreibe boxtext (w, textintern, position, 2, altbreite,{} 0, x, y, xsize, ysize);{} schreibe alternativenfuss;{} lasse auswaehlen;{} liefere ergebnis.{} textintern:{} IF sonst = janeintasten{} THEN TEXT VAR zwischen;{}
+ zwischen := t;{} kuerze um folgende blanks;{} zwischen + "? "{} ELSE t{} FI.{} kuerze um folgende blanks:{} WHILE (zwischen SUB (length (zwischen))) = blank REP{} zwischen := subtext (zwischen , 1, length (zwischen) - 1){} PER.{} normiere alternativen:{} TEXT VAR altintern :: altzeile;{} altintern CAT delimiter.{} untersuche alternativen:{} INT VAR altanzahl :: 1, altbreite, first :: - 2, anfang :: 1,{} ende :: pos (altintern, delimiter, anfang) - 1;{}
+ WHILE ende > 0 AND altanzahl <= 10 REP{} trage alternative ein;{} trage alternativenanfang ein;{} trage alternativenlaenge ein;{} setze neue positionen fest{} PER;{} ermittle gesamtalternativenbreite.{} trage alternative ein:{} altliste [altanzahl].alternat :={} compress (subtext (altintern, anfang, ende)).{} trage alternativenanfang ein:{} first INCR 3;{} altliste [altanzahl].anfang := first.{} trage alternativenlaenge ein:{}
+ altliste [altanzahl].laenge := length (altliste [altanzahl].alternat);{} first INCR altliste [altanzahl].laenge.{} setze neue positionen fest:{} anfang := ende + 2;{} ende := pos (altintern, delimiter, anfang) - 1;{} altanzahl INCR 1.{} ermittle gesamtalternativenbreite:{} altanzahl DECR 1;{} altbreite := altliste [altanzahl].anfang;{} altbreite INCR (altliste [altanzahl].laenge + 3);{} IF altbreite > areaxsize (w) - 6{} THEN LEAVE schreibe alternativen{}
+ FI.{} schreibe alternativenfuss:{} schreibe leerzeile;{} schreibe antwortmoeglichkeiten;{} schreibe abschlusszeile;{} IF mit abbruch{} THEN out footnote (w, aussage [2]){} ELSE beruecksichtige ja nein hinweis{} FI.{} schreibe leerzeile:{} cursor (x, y + ysize - 3);{} out (senkrecht);{} (xsize - 2) TIMESOUT blank;{} out (senkrecht).{} schreibe antwortmoeglichkeiten:{} cursor (x, y + ysize - 2);{} out (senkrecht);{} einrueckbreite TIMESOUT blank;{}
+ out (antwortleiste);{} rest TIMESOUT blank;{} out (senkrecht).{} einrueckbreite:{} (xsize - 2 - length (antwortleiste)) DIV 2.{} antwortleiste:{} INT VAR zeiger; TEXT VAR ausgabe :: "";{} FOR zeiger FROM 1 UPTO altanzahl REP{} ausgabe CAT altliste [zeiger].alternat;{} ausgabe CAT " "{} PER;{} compress (ausgabe).{} rest:{} xsize - 2 - einrueckbreite - length (antwortleiste).{} schreibe abschlusszeile:{} cursor (x, y + ysize - 1);{} out (ecke unten links);{}
+ (xsize - 2) TIMESOUT waagerecht;{} out (ecke unten rechts).{} beruecksichtige ja nein hinweis:{} IF sonst = janeintasten{} THEN out footnote (w, aussage [3]){} ELSE out footnote (w, aussage [4]){} FI.{} lasse auswaehlen:{} INT VAR altzeiger :: 1;{} stelle erste alternative invers dar;{} REP{} hole eingabe;{} werte eingabe aus und reagiere{} UNTIL alternative gefunden PER.{} stelle erste alternative invers dar:{} cursor (x + einrueckbreite, y + ysize - 2);{}
+ out (mark ein);{} out (altliste [altzeiger].alternat); out (blank);{} out (mark aus);{} cursor (x + einrueckbreite, y + ysize - 2).{} hole eingabe:{} TEXT VAR moegliche, eingabe;{} IF mit abbruch{} THEN moegliche := rechts links esc return + sonst{} ELSE moegliche := rechts links null return + sonst{} FI;{} clear buffer;{} REP{} inchar (eingabe);{} piepse bei unzulaessiger eingabe{} UNTIL pos (moegliche, eingabe) > 0 PER.{} piepse bei unzulaessiger eingabe:{}
+ IF pos (moegliche, eingabe) = 0 THEN out (piep) FI.{} werte eingabe aus und reagiere:{} SELECT pos (moegliche, eingabe) OF{} CASE 1: zur naechsten alternative{} CASE 2: zur vorausgehenden alternative{} CASE 3: esc kommando verarbeiten{} END SELECT.{} zur naechsten alternative:{} loesche aktuelle alternative;{} ermittle rechte alternative;{} stelle neue alternative invers dar.{} zur vorausgehenden alternative:{} loesche aktuelle alternative;{} ermittle linke alternative;{}
+ stelle neue alternative invers dar.{} loesche aktuelle alternative:{} cursor (alternativenanfang - 1, y + ysize - 2);{} out (blank);{} out (altliste [altzeiger].alternat);{} out (2 * blank).{} alternativenanfang:{} x + einrueckbreite + altliste [altzeiger].anfang.{} ermittle rechte alternative:{} IF altzeiger = altanzahl{} THEN altzeiger := 1{} ELSE altzeiger INCR 1{} FI.{} ermittle linke alternative:{} IF altzeiger = 1{} THEN altzeiger := altanzahl{}
+ ELSE altzeiger DECR 1{} FI.{} stelle neue alternative invers dar:{} cursor (alternativenanfang - 1, y + ysize - 2);{} out (mark ein);{} out (altliste [altzeiger].alternat); out (blank);{} out (mark aus);{} cursor (alternativenanfang - 1, y + ysize - 2).{} esc kommando verarbeiten:{} inchar (eingabe);{} IF eingabe = "h"{} THEN ergebnis := 0;{} LEAVE schreibe alternativen{} ELSE out (piep); eingabe := ""{} FI.{} alternative gefunden:{} pos (moegliche, eingabe) > 3.{}
+ liefere ergebnis:{} IF pos (moegliche, eingabe) = 4{} THEN ergebnis := altzeiger{} ELSE ergebnis := 100 + pos (sonst, eingabe){} FI.{}END PROC schreibe alternativen;{}BOOL PROC ja (WINDOW VAR w, TEXT CONST t, INT CONST position,{} INT VAR x, y, xsize, ysize):{} INT VAR ergebnis;{} schreibe alternativen (w, t, aussage [7], janeintasten, position,{} FALSE, x, y, xsize, ysize, ergebnis);{} SELECT ergebnis OF{} CASE 2, 105, 106: FALSE{} OTHERWISE TRUE{}
+ END SELECT.{}END PROC ja;{}TEXT PROC hole antwort (WINDOW VAR w, TEXT CONST t, vorgabe,{} INT CONST position, BOOL CONST mit auswahl,{} INT VAR x, y, xsize, ysize):{} TEXT VAR eingabe :: compress (vorgabe);{} schreibe boxtext (w, t, position, 2, length (aussage [8]) + 12, 2,{} x, y, xsize, ysize);{} schreibe antwortfuss;{} clear buffer;{} REP{} IF eingabe = "break"{} THEN eingabe := ""{} FI;{} lasse eintragen{}
+ UNTIL eingabe <> "break" PER;{} liefere ergebnis.{} schreibe antwortfuss:{} schreibe leerzeile;{} schreibe eingabezeile;{} schreibe abschlusszeile;{} IF mit auswahl{} THEN out footnote (w, aussage [5]){} ELSE out footnote (w, aussage [6]){} FI.{} schreibe leerzeile:{} cursor (x, y + ysize - 3);{} out (senkrecht);{} (xsize - 2) TIMESOUT blank;{} out (senkrecht).{} schreibe eingabezeile:{} cursor (x, y + ysize - 2);{} out (senkrecht);{} out (aussage [8]);{}
+ (xsize - 2 - length (aussage [8])) TIMESOUT blank;{} out (senkrecht).{} schreibe abschlusszeile:{} cursor (x, y + ysize - 1);{} out (ecke unten links);{} (xsize - 2) TIMESOUT waagerecht;{} out (ecke unten rechts).{} lasse eintragen:{} TEXT VAR exit :: "";{} cursor on;{} cursor (x + length (aussage [8]) + 1, y + ysize - 2);{} IF mit auswahl{} THEN editget (eingabe, maxtextlength, textlaenge, "", "hz", exit){} ELSE editget (eingabe, maxtextlength, textlaenge, "", "h", exit){}
+ FI;{} cursor off;{} IF exit = ""27"h"{} THEN eingabe := ""{} ELIF mit auswahl AND (exit = ""27"z"){} THEN eingabe := ""27"z"{} ELSE eingabe := compress (eingabe){} FI.{} textlaenge:{} xsize - 2 - length (aussage [8]).{} liefere ergebnis:{} eingabe.{}END PROC hole antwort;{}END PACKET ls dialog 4;{}
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG 5 b/app/gs.dialog/1.2/src/ls-DIALOG 5
new file mode 100644
index 0000000..1772b99
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG 5
@@ -0,0 +1,118 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG 5 **
+ ** **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+PACKET ls dialog 5 DEFINES{} menufootnote, old menufootnote,{} menuinfo,menualternative,{} menuyes, menuno, menuone,{} menusome,menuanswer,{} menuanswerone, menuanswersome,{} install menu, handle menu,{} refresh submenu, deactivate,{} regenerate menuscreen, activate,{} write menunotice, erase menunotice,{} menubasistext, anwendungstext,{} show menuwindow, menuwindowpage,{} menuwindowout, menuwindowget,{} menuwindoweditget, menuwindowedit,{}
+ menuwindowshow, menuwindowline,{} menuwindowyes, menuwindowno,{} menuwindowcursor, get menuwindowcursor,{} remaining menuwindowlines,{} menuwindowcenter, menuwindowstop,{} editorinformationen,stdinfoedit,{} menukartenname, current menuwindow,{} reset dialog, only intern, ausstieg,{} direktstart:{}LET systemkuerzel = "ls-DIALOG",{} menutafeltaskname = "ls-MENUKARTEN",{} menutafeltype = 1954,{} menutafelpraefix = "ls-MENUKARTE:",{}
+ stdmenukartenname = "ls-MENUKARTE:Archiv",{} versionsnummer = "1.1",{} copyright1 = " (C) 1987/88 Eva Latta-Weber",{} copyright2 = " (C) 1988 ERGOS GmbH";{}LET maxmenus = 6,{} maxmenutexte = 300,{} maxinfotexte = 2000,{} maxhauptmenupunkte = 10,{} maxuntermenupunkte = 15,{} erste untermenuzeile = 3;{}LET blank = " ",{} piep = ""7"",{}
+ cleol = ""5"",{} cleop = ""4"",{} trennzeilensymbol = "###",{} bleibt leer symbol = "***",{} hauptmenuluecke = " ";{}LET auswahlstring1 = ""8""2""10""3""13""27"?";{}TYPE MENUPUNKT = STRUCT (TEXT punktkuerzel,{} punktname,{} procname,{} boxtext,{} BOOL aktiv,{} angewaehlt),{}
+ EINZELMENU = STRUCT (INT belegt,{} TEXT ueberschrift,{} INT anfangsposition,{} maxlaenge,{} ROW maxuntermenupunkte MENUPUNKT menupunkt,{} INT aktueller untermenupunkt,{} TEXT startprozedurname,{} leaveprozedurname),{} MENU = STRUCT (TEXT menuname,{} INT anzahl hauptmenupunkte,{}
+ ROW maxhauptmenupunkte EINZELMENU einzelmenu,{} TEXT menueingangsprozedur,{} menuausgangsprozedur,{} menuinfo,{} lizenznummer,{} versionsnummer,{} INT hauptmenuzeiger,{} untermenuanfang,{} untermenuzeiger),{} INFOTEXT = STRUCT (INT anzahl infotexte,{}
+ ROW maxinfotexte TEXT stelle),{} MENUTEXT = STRUCT (INT anzahl menutexte,{} ROW maxmenutexte TEXT platz),{} MENULEISTE = STRUCT (INT belegt, zeigeraktuell, zeigerhintergrund,{} ROW maxmenus MENU menu,{} MENUTEXT menutext,{} INFOTEXT infotext);{}BOUND MENULEISTE VAR menuleiste;{}DATASPACE VAR ds;{}WINDOW VAR menuwindow, schreibfenster, editorinfofenster;{}
+INITFLAG VAR in this task :: FALSE;{}INT VAR anzahl offener menus :: 0;{}INT VAR menunotizx, menunotizxsize,{} menunotizy, menunotizysize,{} menunotizposition;{}TEXT VAR angekoppelte menutafel :: "",{} permanent footnote :: "",{} menunotiztext;{}BOOL VAR menunotiz ist gesetzt :: FALSE,{} nur interne verwendung :: FALSE,{} mit ausstieg :: FALSE;{}REAL VAR zeitpunkt :: clock (1);{}
+ROW 13 TEXT CONST fehlermeldung :: ROW 13 TEXT : ({}"Die Task '" + menutafeltaskname + "' existiert nicht!",{}"Die Menukarte '",{}"' existiert nicht in der Task '" + menutafeltaskname + "'!",{}"' hat falschen Typ/Bezeichnung (keine 'MENUKARTE')!",{}"Das Menu '",{}"' ist nicht in der angekoppelten Menukarte!",{}"Zu viele geoeffnete Menus ( > 2 )!",{}"Kein Menu geoeffnet!",{}"Menu enthaelt keine Menupunkte!",{}"Menupunkt ist nicht im Menu enthalten!",{}"Kein Text vorhanden!",{}"Zugriff unmöglich!",{}
+"Einschränkung unzulässig!"{});{}ROW 1 TEXT CONST vergleichstext :: ROW 1 TEXT : ({}"gibt es nicht"{});{}ROW 3 TEXT CONST hinweis :: ROW 3 TEXT : ({}"Info:<ESC><?>/<?> Wahl:<Pfeile> Ausführen:<RETURN> Verlassen:<ESC><q>",{}" Zum Weitermachen bitte irgendeine Taste tippen!",{}"Bitte warten ... Ich räume auf!"{});{}ROW 3 TEXT CONST infotext :: ROW 3 TEXT : ({}" Für diesen Menupunkt ist (noch) keine "13""13" Funktion eingetragen!",{}" Möchten Sie dieses Menu tatsächlich verlassen",{}" Leider ist zu diesem Menupunkt "13""13" kein Info - Text eingetragen!"{}
+ );{}PROC install menu (TEXT CONST menutafelname):{} installmenu (menutafelname, TRUE){}END PROC install menu;{}PROC install menu (TEXT CONST menutafelname, BOOL CONST mit kennung):{} TEXT VAR letzter parameter;{} IF mit kennung{} THEN zeige menukennung{} FI;{} initialisiere menu ggf;{} IF menutafel noch nicht angekoppelt{} THEN letzter parameter := std;{} hole menutafel;{} kopple menutafel an;{} last param (letzter parameter){} FI.{} initialisiere menu ggf:{}
+ IF NOT initialized (in this task){} THEN angekoppelte menutafel := "";{} anzahl offener menus := 0;{} menunotiz ist gesetzt := FALSE;{} nur interne verwendung := FALSE{} FI.{} menutafel noch nicht angekoppelt:{} menutafelname <> angekoppelte menutafel.{} hole menutafel:{} IF NOT exists task (menutafeltaskname){} THEN bereinige situation; cursor on;{} errorstop (fehlermeldung [1]){} FI;{} disable stop;{} fetch (menutafelname, /menutafeltaskname);{}
+ IF is error AND pos (errormessage, vergleichstext [1]) > 0{} THEN clear error; enable stop;{} bereinige situation; cursor on;{} errorstop (fehlermeldung [2] + menutafelname +{} fehlermeldung [3]){} ELIF is error{} THEN clear error; enable stop;{} bereinige situation; cursor on;{} errorstop (errormessage){} ELSE enable stop{} FI.{} kopple menutafel an:{} IF type (old (menutafelname)) = menutafeltype{}
+ AND pos (menutafelname,menutafelpraefix) = 1{} THEN forget (ds);{} ds := old (menutafelname);{} menuleiste := ds;{} angekoppelte menutafel := menutafelname;{} forget (menutafelname, quiet){} ELSE bereinige situation; cursor on;{} errorstop ("'" + menutafelname + fehlermeldung [4]){} FI.{}END PROC install menu;{}PROC only intern (BOOL CONST wert):{} nur interne verwendung := wert{}END PROC only intern;{}
+PROC ausstieg (BOOL CONST wert):{} mit ausstieg := wert{}END PROC ausstieg;{}TEXT PROC menukartenname:{} IF NOT initialized (in this task){} THEN angekoppelte menutafel := "";{} anzahl offener menus := 0;{} menunotiz ist gesetzt := FALSE;{} FI;{} angekoppelte menutafel{}END PROC menukartenname;{}PROC handle menu (TEXT CONST menuname):{} nur interne verwendung := FALSE;{} mit ausstieg := TRUE;{} handle menu (menuname, ""){}END PROC handle menu;{}
+PROC handle menu (TEXT CONST menuname, ausstiegsproc):{} cursor off;{} IF nur interne verwendung{} THEN oeffne menu (menuname){} ELSE biete menu an{} FI;{} lasse menupunkte auswaehlen;{} IF nur interne verwendung{} THEN do (ausstiegsproc);{} anzahl offener menus DECR 1;{} IF anzahl offener menus < 1 THEN erase menunotice FI;{} menuleiste.zeigeraktuell := menuleiste.zeigerhintergrund;{} menuwindow := window (1,1,79, 24);{} nur interne verwendung := FALSE;{}
+ mit ausstieg := TRUE;{} cursor on{} ELSE schliesse menu;{} leere ggf den bildschirm{} FI.{} biete menu an:{} REAL VAR zwischenzeit :: clock (1) - zeitpunkt;{} IF zwischenzeit < 2.0{} THEN pause (20 - int (10.0 * zwischenzeit)){} FI;{} oeffne menu (menuname).{} leere ggf den bildschirm:{} IF anzahl offener menus < 1{} THEN erase menunotice;{} page; cursor on{} FI.{} lasse menupunkte auswaehlen:{} TEXT VAR kuerzelkette :: "";{}
+ starte aktuelle untermenuoperationen;{} REP{} cursor in warteposition;{} ermittle aktuelle kuerzelkette;{} nimm zeichen auf;{} interpretiere zeichen;{} UNTIL menu verlassen gewuenscht PER.{} nimm zeichen auf:{} TEXT CONST erlaubte zeichen ::auswahlstring1 + kuerzelkette;{} TEXT VAR eingabezeichen;{} INT VAR zeichenposition;{} REP{} inchar (eingabezeichen);{} zeichenposition := pos (erlaubte zeichen, eingabezeichen);{} piepse ggf{} UNTIL zeichenposition > 0 PER.{}
+ piepse ggf:{} IF zeichenposition = 0 THEN out (piep) FI.{} menu verlassen gewuenscht:{} zeichenposition = 6 AND (zweites zeichen = "q").{} interpretiere zeichen:{} SELECT zeichenposition OF{} CASE 1: gehe einen hauptmenupunkt nach links{} CASE 2: gehe einen hauptmenupunkt nach rechts{} CASE 3: gehe einen untermenupunkt nach unten{} CASE 4: gehe einen untermenupunkt nach oben{} CASE 5: fuehre aktuellen menupunkt aus{} CASE 6: hole esc sequenz{} CASE 7: zeige erklaerungstext im menu an{}
+ OTHERWISE werte kuerzeleingabe aus{} END SELECT.{} gehe einen hauptmenupunkt nach links:{} INT VAR anzahl schritte :: 1;{} beende aktuelle untermenuoperationen;{} loesche aktuelles untermenu auf bildschirm;{} loesche alte hauptmenumarkierung;{} anzahl schritte INCR clear buffer and count (""8"");{} ermittle linke menuposition;{} stelle aktuellen hauptmenupunkt invers dar;{} starte aktuelle untermenuoperationen;{} schreibe aktuelles untermenu auf bildschirm.{} gehe einen hauptmenupunkt nach rechts:{}
+ anzahl schritte := 1;{} beende aktuelle untermenuoperationen;{} loesche aktuelles untermenu auf bildschirm;{} loesche alte hauptmenumarkierung;{} anzahl schritte INCR clear buffer and count (""2"");{} ermittle rechte menuposition;{} stelle aktuellen hauptmenupunkt invers dar;{} starte aktuelle untermenuoperationen;{} schreibe aktuelles untermenu auf bildschirm.{} loesche alte hauptmenumarkierung:{} erase invers (area (menuwindow), startpos, 1, ueberschriftlaenge);{}
+ out (area (menuwindow), startpos, 1, ueberschrifttext).{} startpos:{} aktuelles untermenu.anfangsposition.{} ueberschriftlaenge:{} length (ueberschrifttext).{} ueberschrifttext:{} aktuelles untermenu.ueberschrift.{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} ermittle linke menuposition:{} INT VAR positionszaehler;{} FOR positionszaehler FROM 1 UPTO anzahl schritte REP{}
+ drehe die menuposition um einen wert runter{} PER.{} ermittle rechte menuposition:{} FOR positionszaehler FROM 1 UPTO anzahl schritte REP{} drehe die menuposition um einen wert hoch{} PER.{} drehe die menuposition um einen wert runter:{} IF aktuelles menu.hauptmenuzeiger > 1{} THEN aktuelles menu.hauptmenuzeiger DECR 1{} ELSE aktuelles menu.hauptmenuzeiger{} := aktuelles menu.anzahl hauptmenupunkte{} FI.{} drehe die menuposition um einen wert hoch:{}
+ IF aktuelles menu.hauptmenuzeiger{} < aktuelles menu.anzahl hauptmenupunkte{} THEN aktuelles menu.hauptmenuzeiger INCR 1{} ELSE aktuelles menu.hauptmenuzeiger := 1{} FI.{} gehe einen untermenupunkt nach unten:{} INT VAR naechster aktiver := folgender aktiver untermenupunkt;{} nimm ummarkierung vor.{} gehe einen untermenupunkt nach oben:{} naechster aktiver := vorausgehender aktiver untermenupunkt;{} nimm ummarkierung vor.{} nimm ummarkierung vor:{} IF ueberhaupt aktive menupunkte vorhanden{}
+ THEN demarkiere aktuellen untermenupunkt;{} gehe zum folgenden untermenupunkt;{} markiere aktuellen untermenupunkt{} FI.{} ueberhaupt aktive menupunkte vorhanden:{} (aktuelles untermenu.belegt > 0) CAND (naechster aktiver > 0).{} gehe zum folgenden untermenupunkt:{} aktuelles menu.untermenuzeiger := naechster aktiver.{} stelle aktuellen hauptmenupunkt invers dar:{} out invers (area (menuwindow), startpos, 1, ueberschrifttext).{} fuehre aktuellen menupunkt aus:{}
+ IF nur interne verwendung AND mit ausstieg{} THEN kennzeichne als angetickt;{} disable stop;{} do (ausstiegsproc);{} do (menuanweisung);{} aktueller menupunkt.angewaehlt := FALSE;{} IF is error THEN put error; clear error FI;{} enable stop;{} anzahl offener menus DECR 1;{} menuleiste.zeigeraktuell := menuleiste.zeigerhintergrund;{} menuwindow := window (1,1,79, 24);{} nur interne verwendung := FALSE;{}
+ cursor on;{} LEAVE handle menu{} ELSE kennzeichne als angetickt;{} fuehre operation aus (menuanweisung);{} nimm kennzeichnung zurueck{} FI.{} kennzeichne als angetickt:{} aktueller menupunkt.angewaehlt := TRUE;{} markiere aktuellen untermenupunkt.{} nimm kennzeichnung zurueck:{} aktueller menupunkt.angewaehlt := FALSE;{} markiere aktuellen untermenupunkt.{} menuanweisung:{} compress (aktueller menupunkt.procname).{} aktueller menupunkt:{}
+ aktuelles untermenu.menupunkt [aktuelles menu.untermenuzeiger].{} hole esc sequenz:{} TEXT VAR zweites zeichen;{} inchar (zweites zeichen);{} SELECT pos ("q?$", zweites zeichen) OF{} CASE 1: erfrage abbruch{} CASE 2: zeige menubedienhinweise{} CASE 3: gib info aus{} OTHERWISE out (piep){} END SELECT.{} erfrage abbruch:{} IF menuno (infotext [2], 5){} THEN zweites zeichen := "n" (* gleichgültig, nur nicht 'q' *){} FI.{} zeige menubedienhinweise:{}
+ INT VAR gewaehlt;{} REP{} gewaehlt := menualternative ( alttext, altwahl, altzusatz, 5, FALSE);{} erfuelle den wunsch{} UNTIL ausstieg aus bedienhinweisen gewuenscht PER.{} alttext:{} menuleiste.menutext.platz [1].{} altwahl:{} menuleiste.menutext.platz [2].{} altzusatz:{} menuleiste.menutext.platz [3].{} erfuelle den wunsch:{} SELECT gewaehlt OF{} CASE 1,101,106: menuinfo (menuleiste.menutext.platz [4], 5, maxint){} CASE 2,102,107: menuinfo (menuleiste.menutext.platz [5], 5, maxint){}
+ CASE 3,103,108: menuinfo (menuleiste.menutext.platz [6], 5, maxint){} CASE 4,104,109: menuinfo (menuleiste.menutext.platz [7], 5, maxint){} END SELECT.{} ausstieg aus bedienhinweisen gewuenscht:{} gewaehlt = 5 OR gewaehlt = 105 OR gewaehlt = 110.{} gib info aus:{} menuinfo (menuleiste.menutext.platz [20]).{} zeige erklaerungstext im menu an:{} IF compress (erklaerungstext) = ""{} THEN menuinfo (infotext [3]){} ELSE menuinfo (erklaerungstext){} FI.{} erklaerungstext:{}
+ aktueller menupunkt.boxtext.{} werte kuerzeleingabe aus:{} naechster aktiver := pos (kuerzelkette, eingabezeichen);{} nimm ummarkierung vor;{} fuehre aktuellen menupunkt aus.{} starte aktuelle untermenuoperationen:{} ermittle aktuelle kuerzelkette;{} IF startoperation <> ""{} THEN fuehre operation aus (startoperation){} FI.{} startoperation:{} compress (aktuelles untermenu.startprozedurname).{} ermittle aktuelle kuerzelkette:{} kuerzelkette := "";{} INT VAR kuerzelzeiger;{}
+ FOR kuerzelzeiger FROM 1 UPTO aktuelles untermenu.belegt REP{} IF compress (aktuelles punktkuerzel) = ""{} THEN kuerzelkette CAT ""0"" { beliebiger Code der Länge 1 }{} ELSE haenge ggf kuerzel an{} FI{} PER.{} aktuelles punktkuerzel:{} aktuelles untermenu.menupunkt [kuerzelzeiger].punktkuerzel.{} haenge ggf kuerzel an:{} IF betrachteter punkt ist aktiv{} THEN kuerzelkette CAT aktuelles punktkuerzel{} ELSE kuerzelkette CAT ""0""{} FI.{} betrachteter punkt ist aktiv:{}
+ aktuelles untermenu.menupunkt [kuerzelzeiger].aktiv.{} beende aktuelle untermenuoperationen:{} kuerzelkette := "".{}END PROC handle menu;{}PROC oeffne menu (TEXT CONST menuname):{} cursor off;{} suche eingestelltes menu;{} IF menu existiert nicht{} THEN cursor on;{} page;{} errorstop (fehlermeldung [5] + menuname + fehlermeldung [6]){} FI;{} anzahl offener menus INCR 1;{} ggf neue seite aufschlagen;{} ueberpruefe anzahl offener menus;{} lege ggf aktuelles menu auf eis;{}
+ initialisiere den menubildschirm;{} IF NOT nur interne verwendung{} THEN aktuelles menu.hauptmenuzeiger := 1;{} aktuelles menu.untermenuzeiger := 0;{} aktuelles menu.untermenuanfang := 0;{} FI;{} show menu;{} fuehre ggf menueingangsprozedur aus;{} zeige ggf menukenndaten an.{} suche eingestelltes menu:{} INT VAR i, suchzeiger;{} BOOL VAR gefunden :: FALSE;{} FOR i FROM 1 UPTO menuleiste.belegt REP{} IF menuleiste.menu [i].menuname = menuname{}
+ THEN gefunden := TRUE;{} suchzeiger := i;{} FI{} UNTIL menuleiste.menu [i].menuname = menuname PER.{} menu existiert nicht:{} NOT gefunden.{} ueberpruefe anzahl offener menus:{} IF anzahl offener menus > 2{} THEN anzahl offener menus := 0; cursor on;{} errorstop (fehlermeldung [7]){} FI.{} lege ggf aktuelles menu auf eis:{} IF anzahl offener menus = 2{} THEN menuleiste.zeigerhintergrund := menuleiste.zeigeraktuell{} FI;{} menuleiste.zeigeraktuell := suchzeiger.{}
+ initialisiere den menubildschirm:{} IF anzahl offener menus = 2{} THEN menuwindow := window (6, 4, 73, 20){} ELSE menuwindow := window (1, 1, 79, 24);{} FI.{} fuehre ggf menueingangsprozedur aus:{} IF aktuelles menu.menueingangsprozedur <> ""{} THEN fuehre operation aus (aktuelles menu.menueingangsprozedur){} FI.{} ggf neue seite aufschlagen:{} IF anzahl offener menus = 1 THEN page FI.{} zeige ggf menukenndaten an:{} IF anzahl offener menus = 1 AND aktuelles menu.menuinfo <> bleibt leer symbol{}
+ THEN write menunotice (vollstaendiger infotext, 4);{} pause (100);{} erase menunotice{} FI.{} vollstaendiger infotext:{} aktuelles menu.menuinfo +{} aktuelles menu.lizenznummer +{} aktuelles menu.versionsnummer.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{}END PROC oeffne menu;{}PROC show menu:{} ueberpruefe menudaten;{} stelle hauptmenuleiste zusammen;{} zeige hauptmenu an;{} stelle aktuellen hauptmenupunkt invers dar;{} schreibe aktuelles untermenu auf bildschirm;{}
+ zeige informationszeile an.{} ueberpruefe menudaten:{} IF anzahl offener menus = 0{} THEN errorstop (fehlermeldung [8]){} ELIF aktuelles menu.anzahl hauptmenupunkte < 1{} THEN errorstop (fehlermeldung [9]){} FI.{} stelle hauptmenuleiste zusammen:{} TEXT VAR hauptmenuzeile :: "";{} INT VAR zeiger;{} hauptmenuzeile CAT aktuelles menu.menuname;{} hauptmenuzeile CAT ":";{} FOR zeiger FROM 1 UPTO aktuelles menu.anzahl hauptmenupunkte REP{} haenge hauptmenupunkt an{}
+ PER.{} haenge hauptmenupunkt an:{} hauptmenuzeile CAT hauptmenuluecke;{} hauptmenuzeile CAT hauptmenupunktname.{} hauptmenupunktname:{} aktuelles menu.einzelmenu [zeiger].ueberschrift.{} zeige hauptmenu an:{} page (menuwindow, TRUE);{} out menuframe (area (menuwindow));{} cursor (menuwindow, 1, 1);{} out (menuwindow, hauptmenuzeile).{} stelle aktuellen hauptmenupunkt invers dar:{} cursor (menuwindow, startposition, 1);{} out (menuwindow, invers (ueberschrifttext)).{}
+ startposition:{} aktuelles untermenu.anfangsposition - 1.{} ueberschrifttext:{} aktuelles untermenu.ueberschrift.{} zeige informationszeile an:{} write permanent footnote (hinweis [1]).{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}END PROC show menu;{}PROC schreibe aktuelles untermenu auf bildschirm:{} ermittle linke obere ecke des untermenukastens;{} wirf untermenu aus;{}
+ show menunotice;{} cursor in warteposition.{} ermittle linke obere ecke des untermenukastens:{} aktuelles menu.untermenuanfang := menumitte - halbe menubreite;{} achte auf randextrema.{} menumitte:{} startposition + (length (ueberschrifttext) DIV 2) - 1.{} startposition:{} aktuelles untermenu.anfangsposition.{} ueberschrifttext:{} aktuelles untermenu.ueberschrift.{} halbe menubreite:{} aktuelles untermenu.maxlaenge DIV 2.{} achte auf randextrema:{} gleiche ggf linken rand aus;{}
+ gleiche ggf rechten rand aus.{} gleiche ggf linken rand aus:{} IF aktuelles menu.untermenuanfang < 4{} THEN aktuelles menu.untermenuanfang := 4{} FI.{} gleiche ggf rechten rand aus:{} IF (aktuelles menu.untermenuanfang + aktuelles untermenu.maxlaenge) >{} (areaxsize (menuwindow) - 3){} THEN aktuelles menu.untermenuanfang{} := areaxsize (menuwindow) - aktuelles untermenu.maxlaenge - 3{} FI.{} wirf untermenu aus:{} IF aktuelles menu.untermenuzeiger = 0{}
+ THEN aktuelles menu.untermenuzeiger := folgender aktiver untermenupunkt{} FI;{} wirf untermenukopfzeile aus;{} wirf untermenurumpf aus;{} wirf untermenufusszeile aus;{} markiere aktuellen untermenupunkt.{} wirf untermenukopfzeile aus:{} cursor (menuwindow, spalte, anfangszeile);{} out (balken oben); striche; out (balken oben).{} wirf untermenufusszeile aus:{} cursor (menuwindow, spalte, endezeile);{} out (ecke unten links); striche; out (ecke unten rechts).{} spalte:{}
+ aktuelles menu.untermenuanfang - 3.{} anfangszeile:{} erste untermenuzeile - 1.{} endezeile:{} erste untermenuzeile + aktuelles untermenu.belegt.{} striche:{} (aktuelles untermenu.maxlaenge + 5) TIMESOUT waagerecht.{} wirf untermenurumpf aus:{} INT VAR laufvar;{} INT CONST aktuelle punktlaenge :: aktuelles untermenu.maxlaenge + 1;{} FOR laufvar FROM 1 UPTO aktuelles untermenu.belegt REP{} wirf eine einzelne menuzeile aus{} PER.{} wirf eine einzelne menuzeile aus:{}
+ out with beam (area (menuwindow), menuspalte, menuzeile,{} aktueller punktname, laenge).{} menuspalte:{} aktuelles menu.untermenuanfang.{} menuzeile:{} erste untermenuzeile + laufvar - 1.{} aktueller punktname:{} untermenubezeichnung (laufvar).{} laenge:{} aktuelle punktlaenge.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}END PROC schreibe aktuelles untermenu auf bildschirm;{}
+PROC loesche aktuelles untermenu auf bildschirm:{} beende aktuelle untermenuoperationen;{} loesche untermenu auf bildschirm;{} schreibe balken wieder hin;{} aktuelles menu.untermenuzeiger := 1.{} beende aktuelle untermenuoperationen:{} IF leaveoperation <> ""{} THEN fuehre operation aus (leaveoperation){} FI.{} leaveoperation:{} compress (aktuelles untermenu.leaveprozedurname).{} loesche untermenu auf bildschirm:{} INT VAR laufvar;{} FOR laufvar FROM aktuelles untermenu.belegt + 1 DOWNTO 1 REP{}
+ loesche eine einzelne menuzeile{} PER.{} loesche eine einzelne menuzeile:{} erase with beam (area (menuwindow), menuspalte, menuzeile, laenge).{} menuspalte:{} aktuelles menu.untermenuanfang.{} menuzeile:{} erste untermenuzeile + laufvar - 1.{} laenge:{} aktuelles untermenu.maxlaenge + 1.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{} schreibe balken wieder hin:{}
+ cursor (menuwindow, spalte, anfangszeile);{} (aktuelles untermenu.maxlaenge + 7) TIMESOUT waagerecht.{} spalte:{} aktuelles menu.untermenuanfang - 3.{} anfangszeile:{} erste untermenuzeile - 1.{}END PROC loesche aktuelles untermenu auf bildschirm;{}PROC markiere aktuellen untermenupunkt:{} IF aktuelles menu.untermenuzeiger <> 0{} THEN laufe ggf zum naechsten aktiven menupunkt;{} out invers with beam (area (menuwindow), menuspalte, menuzeile,{} aktueller punktname, laenge){}
+ FI.{} laufe ggf zum naechsten aktiven menupunkt:{} IF NOT aktuelles untermenu.menupunkt [aktuelles menu.untermenuzeiger].aktiv{} THEN aktuelles menu.untermenuzeiger := folgender aktiver untermenupunkt{} FI.{} menuspalte:{} aktuelles menu.untermenuanfang.{} menuzeile:{} erste untermenuzeile - 1 + aktuelles menu.untermenuzeiger.{} aktueller punktname:{} untermenubezeichnung (aktuelles menu.untermenuzeiger).{} laenge:{} aktuelles untermenu.maxlaenge + 1.{} aktuelles menu:{}
+ menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}END PROC markiere aktuellen untermenupunkt;{}PROC demarkiere aktuellen untermenupunkt:{} IF aktuelles menu.untermenuzeiger <> 0{} THEN erase invers (area (menuwindow), menuspalte, menuzeile, laenge);{} out (area (menuwindow), menuspalte, menuzeile,{} aktueller punktname, laenge){} FI.{} menuspalte:{} aktuelles menu.untermenuanfang.{}
+ menuzeile:{} erste untermenuzeile - 1 + aktuelles menu.untermenuzeiger.{} aktueller punktname:{} untermenubezeichnung (aktuelles menu.untermenuzeiger).{} laenge:{} aktuelles untermenu.maxlaenge + 1.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}END PROC demarkiere aktuellen untermenupunkt;{}INT PROC folgender aktiver untermenupunkt:{} INT VAR anzahl aktiver menupunkte :: 0;{}
+ untersuche anzahl aktiver menupunkte;{} IF kein aktiver menupunkt vorhanden{} THEN 0{} ELIF nur ein aktiver menupunkt vorhanden{} THEN liefere einzigen aktiven menupunkt{} ELSE liefere naechsten aktiven menupunkt{} FI.{} untersuche anzahl aktiver menupunkte:{} INT VAR zaehler, position;{} FOR zaehler FROM 1 UPTO aktuelles untermenu.belegt REP{} IF aktuelles untermenu.menupunkt [zaehler].aktiv{} THEN anzahl aktiver menupunkte INCR 1;{} position := zaehler{}
+ FI{} UNTIL anzahl aktiver menupunkte > 1 PER.{} kein aktiver menupunkt vorhanden:{} anzahl aktiver menupunkte = 0.{} nur ein aktiver menupunkt vorhanden:{} anzahl aktiver menupunkte = 1.{} liefere einzigen aktiven menupunkt:{} position.{} liefere naechsten aktiven menupunkt:{} INT VAR interner zeiger;{} stelle internen zeiger auf den naechsten menupunkt;{} WHILE NOT punkt ist aktiv REP{} untersuche naechsten menupunkt{} PER;{} ergebnis.{} stelle internen zeiger auf den naechsten menupunkt:{}
+ IF aktuelles menu.untermenuzeiger = letzter untermenupunkt{} THEN interner zeiger := 1{} ELSE interner zeiger := aktuelles menu.untermenuzeiger + 1{} FI.{} letzter untermenupunkt:{} aktuelles untermenu.belegt.{} punkt ist aktiv:{} aktuelles untermenu.menupunkt [interner zeiger].aktiv.{} untersuche naechsten menupunkt:{} IF interner zeiger = letzter untermenupunkt{} THEN interner zeiger := 1{} ELSE interner zeiger INCR 1{} FI.{}
+ ergebnis:{} interner zeiger.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}END PROC folgender aktiver untermenupunkt;{}INT PROC vorausgehender aktiver untermenupunkt:{} INT VAR anzahl aktiver menupunkte :: 0;{} untersuche anzahl aktiver menupunkte;{} IF kein aktiver menupunkt vorhanden{} THEN 0{} ELIF nur ein aktiver menupunkt vorhanden{} THEN liefere einzigen aktiven menupunkt{}
+ ELSE liefere vorausgehenden aktiven menupunkt{} FI.{} untersuche anzahl aktiver menupunkte:{} INT VAR zaehler, position;{} FOR zaehler FROM 1 UPTO aktuelles untermenu.belegt REP{} IF aktuelles untermenu.menupunkt [zaehler].aktiv{} THEN anzahl aktiver menupunkte INCR 1;{} position := zaehler{} FI{} UNTIL anzahl aktiver menupunkte > 1 PER.{} kein aktiver menupunkt vorhanden:{} anzahl aktiver menupunkte = 0.{} nur ein aktiver menupunkt vorhanden:{} anzahl aktiver menupunkte = 1.{}
+ liefere einzigen aktiven menupunkt:{} position.{} liefere vorausgehenden aktiven menupunkt:{} INT VAR interner zeiger;{} stelle internen zeiger auf vorausgehenden menupunkt;{} WHILE NOT punkt ist aktiv REP{} untersuche vorausgehenden menupunkt{} PER;{} ergebnis.{} stelle internen zeiger auf vorausgehenden menupunkt:{} IF aktuelles menu.untermenuzeiger <= 1{} THEN interner zeiger := letzter untermenupunkt{} ELSE interner zeiger := aktuelles menu.untermenuzeiger - 1{}
+ FI.{} letzter untermenupunkt:{} aktuelles untermenu.belegt.{} punkt ist aktiv:{} aktuelles untermenu.menupunkt [interner zeiger].aktiv.{} untersuche vorausgehenden menupunkt:{} IF interner zeiger = 1{} THEN interner zeiger := letzter untermenupunkt{} ELSE interner zeiger DECR 1{} FI.{} ergebnis:{} interner zeiger.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}
+END PROC vorausgehender aktiver untermenupunkt;{}PROC cursor in warteposition:{} cursor (areax (menuwindow), areay (menuwindow) + 1){}END PROC cursor in warteposition;{}TEXT PROC untermenubezeichnung (INT CONST position):{} TEXT VAR bezeichnung :: "";{} bezeichnung CAT kennzeichnung;{} bezeichnung CAT punktkennung;{} bezeichnung.{} kennzeichnung:{} IF aktueller menupunkt.aktiv{} AND aktueller menupunkt.angewaehlt{} THEN "*"{} ELIF aktueller menupunkt.aktiv{}
+ AND aktueller menupunkt.punktkuerzel <> ""{} THEN aktueller menupunkt.punktkuerzel{} ELIF aktueller menupunkt.aktiv{} AND aktueller menupunkt.punktkuerzel = ""{} THEN blank{} ELSE "-"{} FI.{} punktkennung:{} IF menupunkt ist trennzeile{} THEN strichellinie{} ELSE aktueller menupunkt.punktname{} FI.{} menupunkt ist trennzeile:{} aktueller menupunkt.punktname = (blank + trennzeilensymbol).{} strichellinie:{}
+ (aktuelles untermenu.maxlaenge + 1) * "-".{} aktueller menupunkt:{} aktuelles untermenu.menupunkt [position].{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}END PROC untermenubezeichnung;{}PROC fuehre operation aus (TEXT CONST operation):{} disable stop;{} IF operation = ""{} THEN menuinfo (infotext [1]);{} LEAVE fuehre operation aus{} FI;{} do (operation);{}
+ IF is error{} THEN menuinfo (errormessage, 5);{} clear error{} FI;{} old menufootnote;{} enable stop;{} cursor off{}END PROC fuehre operation aus;{}PROC veraendere aktivierung (TEXT CONST unterpunkt, BOOL CONST eintrag):{} INT VAR unterpunktposition :: 0, zeiger;{} suche unterpunkt;{} aendere aktivierung.{} suche unterpunkt:{} FOR zeiger FROM 1 UPTO untermenuende REP{} IF untermenupunkt = blank + compress (unterpunkt){} THEN unterpunktposition := zeiger;{} LEAVE suche unterpunkt{}
+ FI{} PER;{} LEAVE veraendere aktivierung.{} untermenuende:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].belegt.{} untermenupunkt:{} aktuelles untermenu.menupunkt [zeiger].punktname.{} aendere aktivierung:{} aktuelles untermenu.menupunkt [unterpunktposition].aktiv := eintrag.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}END PROC veraendere aktivierung;{}
+PROC veraendere aktivierung (INT CONST punktnummer, BOOL CONST eintrag):{} IF punktnummer >= 1 AND punktnummer <= untermenuende{} THEN aktuelles untermenu.menupunkt [punktnummer].aktiv := eintrag{} FI.{} untermenuende:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].belegt.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}END PROC veraendere aktivierung;{}PROC veraendere anwahl (TEXT CONST unterpunkt, BOOL CONST eintrag):{}
+ INT VAR unterpunktposition :: 0, zeiger;{} suche unterpunkt;{} aendere anwahl.{} suche unterpunkt:{} FOR zeiger FROM 1 UPTO untermenuende REP{} IF untermenupunkt = blank + compress (unterpunkt){} THEN unterpunktposition := zeiger;{} LEAVE suche unterpunkt{} FI{} PER;{} enable stop;{} errorstop (fehlermeldung [10]).{} untermenuende:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].belegt.{} untermenupunkt:{} aktuelles untermenu.menupunkt [zeiger].punktname.{}
+ aendere anwahl:{} aktuelles untermenu.menupunkt [unterpunktposition].angewaehlt := eintrag.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [aktuelles menu.hauptmenuzeiger].{}END PROC veraendere anwahl;{}PROC activate (TEXT CONST unterpunkt):{} enable stop;{} veraendere aktivierung (unterpunkt, TRUE){}END PROC activate;{}PROC activate (INT CONST punktnummer):{} enable stop;{} veraendere aktivierung (punktnummer, TRUE){}
+END PROC activate;{}PROC deactivate (TEXT CONST unterpunkt):{} enable stop;{} veraendere aktivierung (unterpunkt, FALSE){}END PROC deactivate;{}PROC deactivate (INT CONST punktnummer):{} enable stop;{} veraendere aktivierung (punktnummer, FALSE){}END PROC deactivate;{}PROC select (TEXT CONST unterpunkt):{} enable stop;{} veraendere anwahl (unterpunkt, TRUE){}END PROC select;{}PROC deselect (TEXT CONST unterpunkt):{} enable stop;{} veraendere anwahl (unterpunkt, FALSE){}END PROC deselect;{}
+PROC schliesse menu:{} IF aktuelles menu.menuausgangsprozedur <> ""{} THEN menufootnote (hinweis [3]);{} fuehre operation aus (aktuelles menu.menuausgangsprozedur){} FI;{} anzahl offener menus DECR 1;{} IF anzahl offener menus = 1{} THEN aktiviere das auf eis gelegte menu{} FI.{} aktiviere das auf eis gelegte menu:{} menuleiste.zeigeraktuell := menuleiste.zeigerhintergrund;{} menuwindow := window (1, 1, 79, 24);{} show menu.{} aktuelles menu:{} menuleiste.menu [menuleiste.zeigeraktuell].{}
+END PROC schliesse menu;{}PROC refresh submenu:{} schreibe aktuelles untermenu auf bildschirm;{} show menunotice;{}END PROC refresh submenu;{}PROC regenerate menuscreen:{} IF anzahl offener menus = 0{} THEN errorstop (fehlermeldung [8]){} ELIF anzahl offener menus = 1{} THEN page;{} show menu;{} show menunotice{} ELSE zeige erstes menu an;{} zeige zweites menu an;{} show menunotice{} FI.{} zeige erstes menu an:{} INT VAR menuzeiger :: menuleiste.zeigeraktuell;{}
+ menuleiste.zeigeraktuell := menuleiste.zeigerhintergrund;{} menuwindow := window (1, 1, 79, 24);{} anzahl offener menus := 1;{} show menu.{} zeige zweites menu an:{} menuleiste.zeigeraktuell := menuzeiger;{} menuwindow := window (6, 4, 73, 20);{} anzahl offener menus := 2;{} show menu.{}END PROC regenerate menuscreen;{}PROC menuinfo (TEXT CONST t, INT CONST position, timelimit):{} boxinfo (menuwindow, t, position, timelimit, FALSE);{} schreibe aktuelles untermenu auf bildschirm;{}
+ old menufootnote{}END PROC menuinfo;{}PROC menuinfo (TEXT CONST t, INT CONST position):{} menuinfo (t, position, maxint){}END PROC menuinfo;{}PROC menuinfo (TEXT CONST t):{} menuinfo (t, 5, maxint){}END PROC menuinfo;{}INT PROC menualternative (TEXT CONST t, auswahlliste, zusatztasten,{} INT CONST position, BOOL CONST mit abbruch):{} INT VAR ergebnis := boxalternative (menuwindow, t, auswahlliste,{} zusatztasten, position, mit abbruch, FALSE);{}
+ schreibe aktuelles untermenu auf bildschirm;{} old menufootnote;{} ergebnis{}END PROC menualternative;{}BOOL PROC menuyes (TEXT CONST frage, INT CONST position):{} BOOL VAR wert := boxyes (menuwindow, frage, position, FALSE);{} schreibe aktuelles untermenu auf bildschirm;{} old menufootnote;{} wert{}END PROC menuyes;{}BOOL PROC menuno (TEXT CONST frage, INT CONST position):{} NOT menuyes (frage, position){}END PROC menuno;{}TEXT PROC menuone (THESAURUS CONST thes, TEXT CONST t1, t2,{} BOOL CONST mit reinigung):{}
+ TEXT CONST wert :: boxone (menuwindow, thes, t1, t2, mit reinigung);{} IF mit reinigung{} THEN schreibe aktuelles untermenu auf bildschirm;{} old menufootnote{} FI;{} wert{}END PROC menuone;{}THESAURUS PROC menusome (THESAURUS CONST thes, TEXT CONST t1, t2,{} BOOL CONST mit reinigung):{} THESAURUS CONST thesaurus :: boxsome (menuwindow, thes, t1, t2,{} mit reinigung);{} IF mit reinigung{} THEN schreibe aktuelles untermenu auf bildschirm;{}
+ old menufootnote{} FI;{} thesaurus{}END PROC menusome;{}TEXT PROC menuanswer (TEXT CONST t, vorgabe, INT CONST position):{} TEXT VAR wert :: boxanswer (menuwindow, t, vorgabe, position, FALSE);{} schreibe aktuelles untermenu auf bildschirm;{} old menufootnote;{} wert{}END PROC menuanswer;{}TEXT PROC menuanswerone (TEXT CONST t, vorgabe, THESAURUS CONST thes,{} TEXT CONST t1, t2, BOOL CONST mit reinigung):{} TEXT VAR wert :: boxanswerone (menuwindow, t, vorgabe, thes, t1, t2,{}
+ mit reinigung, FALSE){} IF mit reinigung{} THEN schreibe aktuelles untermenu auf bildschirm;{} old menufootnote{} FI;{} wert{}END PROC menuanswer one;{}THESAURUS PROC menuanswersome (TEXT CONST t, vorgabe, THESAURUS CONST thes,{} TEXT CONST t1, t2, BOOL CONST mit reinigung):{} THESAURUS VAR wert :: boxanswersome (menuwindow, t, vorgabe,{} thes, t1, t2, mit reinigung, FALSE){}
+ IF mit reinigung{} THEN schreibe aktuelles untermenu auf bildschirm;{} old menufootnote{} FI;{} wert{}END PROC menuanswersome;{}PROC menufootnote (TEXT CONST t):{} cursor (menuwindow, 1, areaysize (menuwindow) - 1);{} areaxsize (menuwindow) TIMESOUT waagerecht;{} cursor (menuwindow, 1, areaysize (menuwindow));{} outtext (t, 1, areaxsize (menuwindow)){}END PROC menufootnote;{}PROC old menufootnote:{} menufootnote (permanent footnote){}END PROC old menufootnote;{}TEXT PROC menubasistext (INT CONST nummer):{}
+ IF nummer <= 20{} THEN fehlermeldung [12]{} ELIF nummer > menuleiste.menutext.anzahl menutexte{} THEN fehlermeldung [11]{} ELSE menuleiste.menutext.platz [nummer]{} FI{}END PROC menubasistext;{}TEXT PROC anwendungstext (INT CONST nummer):{} IF nummer > menuleiste.infotext.anzahl infotexte{} THEN fehlermeldung [11]{} ELSE menuleiste.infotext.stelle [nummer]{} FI{}END PROC anwendungstext;{}PROC zeige menukennung:{} IF anzahl offener menus = 0{} THEN zeige angaben und emblem;{}
+ FI.{} zeige angaben und emblem:{} ROW 5 WINDOW VAR w;{} w [ 1] := window (40, 3, 30, 9);{} w [ 2] := window (36, 5, 30, 9);{} w [ 3] := window (30, 7, 30, 9);{} w [ 4] := window (22, 9, 30, 9);{} w [ 5] := window (12, 11, 30, 9);{} page;{} show (w [1]); out (w [1], center (w [1], invers (systemkuerzel)));{} show (w [2]); out (w [2], " Version " + versionsnummer);{} show (w [3]); out (w [3], copyright1);{} show (w [4]); out (w [4], copyright2);{} show (w [5]);{}
+ cursor (w [5], 1, 2);out (w [5], " lll sssssssss ");{} cursor (w [5], 1, 3);out (w [5], " lll sss sss ");{} cursor (w [5], 1, 4);out (w [5], " lll sss ");{} cursor (w [5], 1, 5);out (w [5], " lll sssssssss ");{} cursor (w [5], 1, 6);out (w [5], " lll sss ");{} cursor (w [5], 1, 7);out (w [5], " lll latta soft sss ");{} cursor (w [5], 1, 8);out (w [5], " lllllllll sssssssss ");{} cursor (79, 24);{}
+ zeitpunkt := clock (1);{}END PROC zeige menukennung;{}PROC reset dialog:{} angekoppelte menutafel := "";{} anzahl offener menus := 0{}END PROC reset dialog;{}PROC write permanent footnote (TEXT CONST t):{} permanent footnote := t;{} cursor (menuwindow, 1, areaysize (menuwindow));{} outtext (t, 1, areaxsize (menuwindow)){}END PROC write permanent footnote;{}PROC write menunotice (TEXT CONST t, INT CONST position):{} erase menunotice;{} boxnotice (menuwindow, t, position, menunotizx, menunotizy,{}
+ menunotizxsize, menunotizysize);{} menunotiztext := t;{} menunotizposition := position;{} menunotiz ist gesetzt := TRUE{}END PROC write menunotice;{}PROC show menunotice:{} IF menunotiz ist gesetzt{} THEN boxnotice (menuwindow, menunotiztext, menunotizposition,{} menunotizx, menunotizy, menunotizxsize, menunotizysize);{} FI{}END PROC show menunotice;{}PROC erase menunotice:{} INT VAR spa, zei;{} get cursor (spa, zei);{}
+ IF menunotiz ist gesetzt{} THEN page up (menunotizx, menunotizy, menunotizxsize, menunotizysize);{} menunotiz ist gesetzt := FALSE;{} cursor (spa, zei){} FI{}END PROC erase menunotice;{}PROC initialize menuwindow:{} schreibfenster := window (areax (menuwindow) + 1,{} areay (menuwindow) + 3,{} areaxsize (menuwindow) - 2,{} areaysize (menuwindow) - 4){}END PROC initialize menuwindow;{}
+PROC show menuwindow:{} initialize menuwindow;{} show (schreibfenster);{}END PROC show menuwindow;{}PROC menuwindow page:{} initialize menuwindow;{} page (schreibfenster){}END PROC menuwindow page;{}PROC menuwindowout (TEXT CONST text):{} out (schreibfenster, text){}END PROC menuwindow out;{}PROC menuwindowget (TEXT VAR text):{} get (schreibfenster, text){}END PROC menuwindowget;{}PROC menuwindoweditget (TEXT VAR text):{} editget (schreibfenster, text){}END PROC menuwindoweditget;{}PROC menuwindowedit (TEXT CONST dateiname):{}
+ initialize menuwindow;{} edit (schreibfenster, dateiname){}END PROC menuwindowedit;{}PROC menuwindowedit (FILE VAR f):{} initialize menuwindow;{} edit (schreibfenster, f){}END PROC menuwindowedit;{}PROC menuwindowshow (TEXT CONST dateiname):{} initialize menuwindow;{} show (schreibfenster, dateiname){}END PROC menuwindowshow;{}PROC menuwindowshow (FILE VAR f):{} initialize menuwindow;{} show (schreibfenster, f){}END PROC menuwindowshow;{}BOOL PROC menuwindowyes (TEXT CONST frage):{} yes (schreibfenster, frage){}
+END PROC menuwindowyes;{}BOOL PROC menuwindowno (TEXT CONST frage):{} no (schreibfenster, frage){}END PROC menuwindowno;{}PROC menuwindowline:{} menuwindowline (1){}END PROC menuwindowline;{}PROC menuwindowline (INT CONST anzahl):{} line (schreibfenster, anzahl){}END PROC menuwindowline;{}PROC menuwindowcursor (INT CONST spa, zei):{} cursor (schreibfenster, spa, zei){}END PROC menuwindowcursor;{}PROC get menuwindowcursor (INT VAR spa, zei):{} get cursor (schreibfenster, spa, zei){}END PROC get menuwindowcursor;{}
+INT PROC remaining menuwindowlines:{} remaining lines (schreibfenster){}END PROC remaining menuwindowlines;{}TEXT PROC menuwindowcenter (TEXT CONST t):{} center (schreibfenster, t){}END PROC menuwindowcenter;{}PROC menuwindowstop:{} menuwindowstop (2){}END PROC menuwindowstop;{}PROC menuwindowstop (INT CONST anzahl):{} stop (schreibfenster, anzahl){}END PROC menuwindowstop;{}WINDOW PROC current menuwindow:{} initialize menuwindow;{} schreibfenster{}END PROC current menuwindow;{}PROC stdinfoedit (FILE VAR f, INT CONST oberste zeile):{}
+ IF oberste zeile < 1 OR oberste zeile > 3{} THEN errorstop (fehlermeldung [13]);{} FI;{} garantiere menukarte;{} cursor (1, oberste zeile); out (cleop);{} cursor (1, 23); out(79 * waagerecht);{} cursor (1, 24); outtext (menubasistext (141), 1, 79);{} editorinfofenster := window (1, oberste zeile + 1, 79, 24 - oberste zeile);{} kommando auf taste legen ("?", "editorinformationen");{} command dialogue (FALSE);{} cursor on; edit (f, 1, oberste zeile, 79, 23 - oberste zeile);{} command dialogue (TRUE);{}
+ kommando auf taste legen ("?", "").{} garantiere menukarte:{} TEXT VAR name := compress (menukartenname);{} IF name = ""{} THEN install menu (stdmenukartenname, FALSE){} FI.{}END PROC stdinfoedit;{}PROC stdinfoedit (FILE VAR f):{} stdinfoedit (f, 1){}END PROC stdinfoedit;{}PROC stdinfoedit (TEXT CONST dateiname, INT CONST oberste zeile):{} FILE VAR f :: sequential file (modify, dateiname);{} stdinfoedit (f, oberste zeile);{}END PROC stdinfoedit;{}PROC stdinfoedit (TEXT CONST dateiname):{}
+ stdinfoedit (dateiname, 1){}END PROC stdinfoedit;{}PROC editorinformationen:{} BOOL VAR ende gewuenscht :: FALSE; INT VAR z;{} FOR z FROM startwert UPTO 22 REP{} cursor (1, z); out (cleol);{} PER;{} REP{} INT VAR erg := boxalternative (editorinfofenster,{} menubasistext (149),{} menubasistext (150),{} menubasistext (151),{} 5, FALSE, FALSE);{} erfuelle den wunsch{}
+ UNTIL ende gewuenscht PER;{} cursor (2, 23); 77 TIMESOUT waagerecht;{} cursor (1, 24); outtext (menubasistext (141), 1, 79).{} startwert:{} areay (editorinfofenster) + 1.{} erfuelle den wunsch:{} SELECT erg OF{} CASE 1, 101, 109: boxinfo (editorinfofenster, menubasistext (142), 5, maxint, FALSE){} CASE 2, 102, 110: boxinfo (editorinfofenster, menubasistext (143), 5, maxint, FALSE){} CASE 3, 103, 111: boxinfo (editorinfofenster, menubasistext (144), 5, maxint, FALSE){} CASE 4, 104, 112: boxinfo (editorinfofenster, menubasistext (145), 5, maxint, FALSE){}
+ CASE 5, 105, 113: boxinfo (editorinfofenster, menubasistext (146), 5, maxint, FALSE){} CASE 6, 106, 114: boxinfo (editorinfofenster, menubasistext (147), 5, maxint, FALSE){} CASE 7, 107, 115: boxinfo (editorinfofenster, menubasistext (148), 5, maxint, FALSE){} CASE 8, 108, 116: ende gewuenscht := TRUE{} OTHERWISE (*tue nichts*){} END SELECT{}END PROC editorinformationen;{}PROC bereinige situation:{} page;{} forget (ds);{} reset dialog{}END PROC bereinige situation;{}
+PROC direktstart (TEXT CONST procname, BOOL CONST autoloeschen):{} TEXT VAR datname := "Selbststartergenerierungsdatei", letzter := std;{} kopple archivmenukarte an;{} schreibe programm;{} insertiere programm;{} abkoppeln.{} kopple archivmenukarte an:{} install menu (stdmenukartenname, FALSE).{} schreibe programm:{} forget (datname, quiet);{} FILE VAR f :: sequential file (output, datname);{} putline (f, menubasistext (191));{} putline (f, "do (""reset dialog; erase menunotice; " + procname + """);");{}
+ putline (f, menubasistext (192));{} IF autoloeschen{} THEN putline (f, menubasistext (193)){} ELSE putline (f, menubasistext (194)){} FI;{} putline (f, menubasistext (195));{} putline (f, menubasistext (196)).{} insertiere programm:{} TEXT VAR t := "insert (""" + datname + """)"; do (t).{} abkoppeln:{} forget (datname, quiet); last param (letzter);{} reset dialog;{} global manager.{}END PROC direktstart;{}END PACKET ls dialog 5;{}
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG 6 b/app/gs.dialog/1.2/src/ls-DIALOG 6
new file mode 100644
index 0000000..b27eae2
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG 6
@@ -0,0 +1,102 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG 6 **
+ ** Archiv-/Taskhandling **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+PACKET ls dialog 6 DEFINES{} menu archiv notizort setzen,{} menu archiv grundeinstellung,{} menu archiv zieltask einstellen,{} menu archiv zieltask aendern,{} menu archiv reservieren,{} menu archiv neue diskette,{} menu archiv schreiben,{} menu archiv checken,{} menu archiv schreibcheck,{} menu archiv holen,{} menu archiv loeschen,{} menu archiv verzeichnis,{} menu archiv verzeichnis drucken,{} menu archiv initialisieren,{}
+ menu archiv reservierung aufgeben,{} archiv:{}LET menukartenname = "ls-MENUKARTE:Archiv";{}LET ack = 0,{} schreiben = 1,{} checken = 2,{} schreibcheck = 3,{} holen = 4,{} loeschen = 5,{} list code = 15,{} reserve code = 19;{}BOOL VAR zieltask ist archivmanager :: TRUE,{} archiv gehoert mir :: FALSE,{} fehlerfall :: FALSE,{} kontakt mit zieltask erfolgt :: FALSE;{}
+TEXT VAR zieltaskname :: "ARCHIVE",{} aktueller archivname :: "";{}INT VAR stationsnummer :: station (myself),{} letzte funktion :: 11,{} notizort :: 3;{}PROC archiv:{} install menu (menukartenname, FALSE);{} handle menu ("ARCHIV"){}END PROC archiv;{}PROC melde zieltaskerror (TEXT CONST meldung):{} IF meldung = menubasistext (47){} THEN menuinfo (menubasistext (123)){} ELIF meldung = menubasistext (46){}
+ THEN menuinfo (menubasistext (124)){} ELIF pos (meldung, "inkonsistent") > 0{} THEN menuinfo (menubasistext (125)){} ELIF pos (meldung, "Lesen unmoeglich") > 0{} COR pos (meldung, "Schreiben unmoeglich") > 0{} THEN menuinfo (menubasistext (126)){} ELIF pos (meldung, "Archiv heisst") > 0 AND pos (meldung, "?????") > 0{} THEN menuinfo (menubasistext (127)){} ELIF pos (meldung, "Archiv heisst") > 0{} THEN menuinfo (menubasistext (128)){} ELIF pos (meldung, "Schreibfehler") > 0 CAND pos (meldung, "Archiv") > 0{}
+ THEN menuinfo (menubasistext (129)){} ELIF pos (meldung, "Lesefehler") > 0{} THEN menuinfo (menubasistext (130)){} ELIF pos (meldung, "Kommando") > 0 AND pos (meldung, "unbekannt") > 0{} THEN menuinfo (menubasistext (131)){} ELIF pos (meldung, "falscher Auftrag fuer Task") > 0{} THEN menuinfo (menubasistext (132)){} ELIF meldung = menubasistext (41){} THEN menuinfo (menubasistext (133)){} ELIF meldung = menubasistext (42){} THEN menuinfo (menubasistext (134)){}
+ ELIF pos (meldung, "Collector") > 0 AND pos(meldung, "fehlt") > 0{} THEN menuinfo (menubasistext (135)){} ELIF pos (meldung, "kein Zugriffsrecht auf Task") > 0{} THEN menuinfo (menubasistext (132)){} ELIF pos (meldung, "nicht initialisiert") > 0{} THEN menuinfo (menubasistext (136)){} ELIF pos (meldung, "ungueltiger Format-Code") > 0{} THEN menuinfo (menubasistext (137)){} ELSE menuinfo (invers (meldung)){} FI{}END PROC melde zieltaskerror;{}PROC menu archiv notizort setzen (INT CONST wert):{}
+ SELECT wert OF{} CASE 1,2,3,4,5 : notizort := wert{} OTHERWISE notizort := 3{} END SELECT{}END PROC menu archiv notizort setzen;{}PROC menu archiv grundeinstellung (INT CONST ort):{} menu archiv zieltask aendern ("ARCHIVE", station (myself), TRUE);{} menu archiv notizort setzen (ort);{} zieltask anzeigen{}END PROC menu archiv grundeinstellung;{}PROC menu archiv zieltask einstellen:{} TEXT VAR taskname :: "";{} INT VAR stationsnr, auswahl;{} BOOL VAR ist amanager;{} erfrage daten;{}
+ kontrolliere daten;{} menu archiv zieltask aendern (taskname, stationsnr, ist amanager);{} refresh submenu;{} zieltask anzeigen.{} erfrage daten:{} auswahl := menualternative (menubasistext (51), menubasistext (52),{} menubasistext (53), 5, TRUE);{} SELECT auswahl OF{} CASE 1, 101 : menu archiv zieltask aendern{} ("ARCHIVE", station (myself), TRUE );{} ausstieg{} CASE 2, 102 : menu archiv zieltask aendern{}
+ (name (father), station (myself), FALSE);{} ausstieg{} CASE 3, 103 : menu archiv zieltask aendern{} ("PUBLIC", station (myself), FALSE);{} ausstieg{} CASE 4, 104 : handeinstellung{} OTHERWISE ausstieg{} END SELECT.{} ausstieg:{} refresh submenu;{} zieltask anzeigen;{} LEAVE menu archiv zieltask einstellen.{} handeinstellung:{} taskname := menuanswer (menubasistext (81), zieltaskname, 5);{}
+ stationsnr := int (menuanswer (menubasistext (82),{} text (station (myself)), 5));{} ist amanager := menuyes (menubasistext (83), 5).{} kontrolliere daten:{} IF compress (taskname) = ""{} OR compress (taskname) = "-"{} OR taskname = name (myself){} THEN menuinfo (menubasistext (64));{} LEAVE menu archiv zieltask einstellen{} FI.{}END PROC menu archiv zieltask einstellen;{}PROC menu archiv zieltask aendern (TEXT CONST taskname,{}
+ INT CONST stationsnr,{} BOOL CONST ist archivmanager):{} menufootnote (menubasistext (21) + menubasistext (23));{} gib ggf archiv frei;{} IF ist archivmanager{} THEN archivmanager einstellen{} ELSE sonstige task einstellen{} FI;{} aktiviere gueltige archivmenupunkte.{} gib ggf archiv frei:{} IF archiv gehoert mir{} THEN archivreservierung aufgeben{} FI.{} archivmanager einstellen:{} zieltask ist archivmanager := TRUE;{}
+ zieltaskname := taskname;{} stationsnummer := stationsnr;{} kontakt mit zieltask erfolgt := FALSE;{} aktueller archivname := "";{} archiv gehoert mir := FALSE;{} letzte funktion := 11.{} sonstige task einstellen:{} zieltask ist archivmanager := FALSE;{} zieltaskname := taskname;{} stationsnummer := stationsnr;{} aktueller archivname := "";{} archiv gehoert mir := FALSE;{}
+ letzte funktion := 6.{}END PROC menu archiv zieltask aendern;{}PROC menu archiv reservieren:{} TEXT VAR archivname :: "", meldung :: "";{} kontrolliere einstellung;{} menufootnote (menubasistext (21) + menubasistext (24));{} versuche archiv zu reservieren (meldung);{} werte meldung aus;{} archiv anmelden (archivname, meldung, TRUE);{} IF archivname = ""{} THEN behandle archivfehler{} ELSE aktueller archivname := archivname{} FI;{} aktiviere gueltige archivmenupunkte;{}
+ refresh submenu;{} zieltask anzeigen.{} kontrolliere einstellung:{} IF NOT zieltask ist archivmanager{} THEN aktiviere gueltige archivmenupunkte;{} refresh submenu;{} LEAVE menu archiv reservieren{} ELIF NOT kontakt mit zieltask erfolgt{} THEN versuche kontakt herzustellen{} FI.{} versuche kontakt herzustellen:{} TEXT VAR fehler :: "";{} IF NOT task ist kommunikativ (fehler){} THEN melde zieltaskerror (fehler);{} melde rigoros ab;{}
+ LEAVE menu archiv reservieren{} ELSE kontakt mit zieltask erfolgt := TRUE{} FI.{} werte meldung aus:{} IF meldung <> ""{} THEN melde zieltaskerror (meldung);{} melde rigoros ab;{} LEAVE menu archiv reservieren{} FI.{} behandle archivfehler:{} melde zieltaskerror (meldung);{} archivreservierung aufgeben;{} melde rigoros ab{}END PROC menu archiv reservieren;{}PROC melde rigoros ab:{} aktueller archivname := "";{} archiv gehoert mir := FALSE;{}
+ kontakt mit zieltask erfolgt := FALSE{}END PROC melde rigoros ab;{}PROC versuche archiv zu reservieren (TEXT VAR fehler):{} IF NOT kontakt mit zieltask erfolgt{} THEN fehler := menubasistext (44);{} archiv gehoert mir := FALSE;{} LEAVE versuche archiv zu reservieren{} FI;{} disable stop;{} IF eigene station{} THEN reserve ("beknackter archivename",/zieltaskname ){} ELSE reserve ("beknackter archivename", stationsnummer/zieltaskname){} FI;{} IF is error{} THEN fehler := errormessage;{}
+ melde rigoros ab;{} clear error{} ELSE archiv gehoert mir := TRUE;{} fehler := "";{} FI;{} enable stop{}END PROC versuche archiv zu reservieren;{}PROC archiv anmelden (TEXT VAR archivname, fehler, BOOL CONST mit anfrage):{} ueberpruefe archivbesitz;{} fuehre archivanmeldung aus.{} ueberpruefe archivbesitz:{} IF NOT archiv gehoert mir OR NOT kontakt mit zieltask erfolgt{} THEN fehler := menubasistext (45);{} melde rigoros ab;{} LEAVE archiv anmelden{}
+ FI.{} fuehre archivanmeldung aus:{} IF mit anfrage{} THEN frage nach eingelegter diskette und melde an{} ELSE melde archiv unter richtigem namen an{} FI.{} frage nach eingelegter diskette und melde an:{} IF menuyes (menubasistext (84), 5){} THEN menufootnote (menubasistext (21) + menubasistext (25));{} melde archiv unter richtigem namen an{} ELSE fehler := menubasistext (46);{} aktueller archivname := "";{} LEAVE archiv anmelden{}
+ FI.{} melde archiv unter richtigem namen an:{} disable stop;{} IF eigene station{} THEN reserve ("beknackter archivename",/zieltaskname);{} list (/zieltaskname);{} ELSE reserve ("beknackter archivename", stationsnummer/zieltaskname);{} list (stationsnummer/zieltaskname){} FI;{} IF is error{} THEN fehler := errormessage;{} behandle die fehlermeldung{} ELSE archivname := "beknackter archivename";{} fehler := "";{} enable stop{}
+ FI.{} behandle die fehlermeldung:{} IF subtext (fehler, 1, 14) = menubasistext (61){} CAND subtext (fehler, 16, 20) <> menubasistext (62){} THEN clear error; enable stop;{} archivname := subtext (fehler, 16, length (fehler) - 1);{} melde archiv nun wirklich richtig an;{} fehler := "";{} enable stop{} ELIF subtext (fehler, 1, 14) = menubasistext (61){} CAND subtext (fehler, 16, 20) = menubasistext (62){} THEN clear error; enable stop;{}
+ archivname := "";{} fehler := menubasistext (62){} ELSE clear error; enable stop;{} archivname := ""{} FI.{} melde archiv nun wirklich richtig an:{} IF eigene station{} THEN reserve (archivname,/zieltaskname);{} ELSE reserve (archivname, stationsnummer/zieltaskname){} FI.{}END PROC archiv anmelden;{}PROC menu archiv neue diskette:{} ueberpruefe reservierung;{} melde neue diskette an.{} ueberpruefe reservierung:{} IF NOT (archiv gehoert mir AND kontakt mit zieltask erfolgt){}
+ THEN melde zieltaskerror (menubasistext (47));{} LEAVE menu archiv neue diskette{} FI.{} melde neue diskette an:{} TEXT VAR archivname :: "", meldung :: "";{} menufootnote (menubasistext (21) + menubasistext (26));{} archiv anmelden (archivname, meldung, FALSE);{} IF archivname = ""{} THEN behandle archivfehler{} ELSE aktueller archivname := archivname{} FI;{} zieltask anzeigen.{} behandle archivfehler:{} melde zieltaskerror (meldung);{} aktueller archivname := "".{}
+END PROC menu archiv neue diskette;{}PROC menu archiv schreiben:{} dateioperation mit zieltask (schreiben);{} regenerate menuscreen{}END PROC menu archiv schreiben;{}PROC menu archiv checken:{} dateioperation mit zieltask (checken);{} regenerate menuscreen{}END PROC menu archiv checken;{}PROC menu archiv schreibcheck:{} dateioperation mit zieltask (schreibcheck);{} regenerate menuscreen{}END PROC menu archiv schreibcheck;{}PROC menu archiv holen:{} dateioperation mit zieltask (holen);{} regenerate menuscreen{}
+END PROC menu archiv holen;{}PROC menu archiv loeschen:{} dateioperation mit zieltask (loeschen);{} regenerate menuscreen{}END PROC menu archiv loeschen;{}PROC dateioperation mit zieltask (INT CONST wahl):{} ueberpruefe kommunikationsbasis und sinnhaftigkeit;{} lasse dateien auswaehlen;{} operiere mit ausgewaehlten dateien.{} ueberpruefe kommunikationsbasis und sinnhaftigkeit:{} IF unzulaessiger zieltaskname{} THEN LEAVE dateioperation mit zieltask{} ELIF zieltaskname = name (myself){}
+ THEN melde zieltaskerror (menubasistext (48));{} LEAVE dateioperation mit zieltask{} ELIF zieltask ist archivmanager AND NOT archiv gehoert mir{} THEN melde zieltaskerror (menubasistext (47));{} LEAVE dateioperation mit zieltask{} ELIF NOT zieltask ist archivmanager{} AND (wahl = checken OR wahl = schreibcheck){} THEN gib hinweis auf unmoeglich;{} LEAVE dateioperation mit zieltask{} ELIF NOT zieltask ist archivmanager{}
+ THEN stelle kontakt mit zieltask her{} ELIF wahl < schreiben OR wahl > loeschen{} THEN LEAVE dateioperation mit zieltask{} FI.{} stelle kontakt mit zieltask her:{} TEXT VAR fehler :: "";{} IF task ist kommunikativ (fehler){} THEN kontakt mit zieltask erfolgt := TRUE{} ELSE melde zieltaskerror (fehler);{} LEAVE dateioperation mit zieltask{} FI.{} gib hinweis auf unmoeglich:{} menuinfo (menubasistext (121) + taskname + menubasistext (122)).{}
+ taskname:{} IF eigene station{} THEN zieltaskname{} ELSE text (stationsnummer) + "/" + zieltaskname{} FI.{} lasse dateien auswaehlen:{} THESAURUS VAR angekreuzte;{} disable stop;{} IF wahl = schreiben OR wahl = schreibcheck{} THEN angekreuzte := menusome (ALL myself, operationshinweis,{} ankreuzhinweis, FALSE){} ELSE angekreuzte := menusome (zieltaskthesaurus, operationshinweis,{} ankreuzhinweis, FALSE){}
+ FI;{} fehlerbehandlung.{} zieltaskthesaurus:{} IF eigene station{} THEN ALL /zieltaskname{} ELSE ALL (stationsnummer/zieltaskname){} FI.{} ankreuzhinweis:{} menubasistext (91) + operationskennzeichnung (wahl) + menubasistext (92).{} operationshinweis:{} operationsbezeichnung (wahl) + zieltaskhinweis.{} operiere mit ausgewaehlten dateien:{} bereite bildschirm vor;{} steige ggf bei leerem thesaurus aus;{} IF wahl = schreiben OR wahl = schreibcheck{} THEN zuerst loeschen{}
+ FI;{} IF wahl = schreibcheck{} THEN fehlerfall := FALSE;{} dateioperation ausfuehren (angekreuzte, schreiben, FALSE);{} IF NOT fehlerfall{} THEN dateioperation ausfuehren (angekreuzte, checken, TRUE){} FI{} ELSE dateioperation ausfuehren (angekreuzte, wahl, TRUE){} FI.{} bereite bildschirm vor:{} show menuwindow.{} steige ggf bei leerem thesaurus aus:{} IF NOT not empty (angekreuzte){} THEN menuwindowline (2);{} menuwindowout (menubasistext (94));{}
+ menuwindowstop;{} LEAVE dateioperation mit zieltask{} FI.{} zuerst loeschen:{} menuwindowout (menuwindowcenter (menubasistext (21) + menubasistext (31)));{} menuwindowline;{} IF not empty (angekreuzte){} THEN disable stop;{} THESAURUS CONST zu loeschende ::{} angekreuzte / zieltaskthesaurus;{} fehlerbehandlung;{} biete ggf dateien zum loeschen an{} ELSE menuwindowpage{} FI.{} biete ggf dateien zum loeschen an:{}
+ IF not empty (zu loeschende){} THEN menuwindowout (menuwindowcenter (invers (menubasistext (108))));{} menuwindowline;{} menuwindowout (menuwindowcenter (menubasistext (109)));{} menuwindowline (2);{} dateien rausschmeissen{} ELSE menuwindowpage{} FI.{} dateien rausschmeissen:{} command dialogue (FALSE);{} biete dateien einzeln zum loeschen an;{} menuwindowpage;{} command dialogue (TRUE).{} biete dateien einzeln zum loeschen an:{}
+ INT VAR z, index;{} FOR z FROM 1 UPTO highest entry (zu loeschende) REP{} disable stop;{} IF name (zu loeschende, z) <> ""{} THEN stelle frage und fuehre aus{} FI;{} fehlerbehandlung{} PER.{} stelle frage und fuehre aus:{} IF menuwindowyes ("'" + name (zu loeschende, z) + "' "{} + menubasistext (111)){} THEN erase (name (zu loeschende, z), task (zieltaskname)){} ELSE menuwindowout (menubasistext (110));{} menuwindowline;{}
+ delete (angekreuzte, name (zu loeschende, z), index);{} pause (20){} FI.{} fehlerbehandlung:{} IF is error{} THEN regenerate menuscreen;{} melde zieltaskerror (errormessage);{} clear error; enable stop;{} LEAVE dateioperation mit zieltask{} FI.{}END PROC dateioperation mit zieltask;{}PROC dateioperation ausfuehren (THESAURUS CONST angekreuzte,{} INT CONST wahl,{} BOOL CONST mit schlussbemerkung):{}
+ INT VAR spalte :: 1, zeile :: 3, k, anzahl :: 0;{} menuwindowout (menuwindowcenter (invers (operationsbezeichnung (wahl){} + zieltaskhinweis)));{} command dialogue (FALSE);{} fuehre einzelne operationen aus;{} command dialogue (TRUE);{} IF mit schlussbemerkung{} THEN schreibe schlussbemerkung{} ELSE menuwindowpage{} FI.{} fuehre einzelne operationen aus:{} FOR k FROM 1 UPTO highest entry (angekreuzte) REP{} IF name (angekreuzte, k) <> ""{}
+ THEN disable stop;{} bildschirmausgabe;{} operation ausfuehren;{} anzahl INCR 1;{} fehlerbehandlung{} FI{} PER.{} bildschirmausgabe:{} spalte := 1;{} IF remaining menuwindowlines < 2{} THEN menuwindowpage; zeile := 1{} ELSE zeile INCR 1{} FI;{} menuwindowcursor (spalte, zeile);{} ergaenzter dateiname.{} ergaenzter dateiname:{} INT VAR windowcolumn, windowrow;{} SELECT wahl OF{} CASE schreiben : menuwindowout (menubasistext (105) + dateiname){}
+ CASE checken : get menuwindowcursor (windowcolumn, windowrow);{} menuwindowout (dateiname + menubasistext (106));{} menuwindowcursor (windowcolumn, windowrow);{} CASE holen : menuwindowout (menubasistext (107) + dateiname){} END SELECT.{} dateiname:{} " """ + name (angekreuzte, k) + """ ".{} operation ausfuehren:{} IF eigene station{} THEN fuehre eigenstationoperation aus{} ELSE fuehre fremdstationoperation aus{} FI.{}
+ fuehre eigenstationoperation aus:{} SELECT wahl OF{} CASE schreiben : save (name (angekreuzte, k), /zieltaskname){} CASE checken : check (name (angekreuzte, k), /zieltaskname);{} bestaetige{} CASE holen : ueberschreiben erfragen eigene station{} CASE loeschen : loeschen erfragen eigene station{} END SELECT.{} ueberschreiben erfragen eigene station:{} IF exists (name (angekreuzte, k)){} THEN menuwindowline;{} IF menuwindowyes (dateiname + menubasistext (112)){}
+ THEN zeile INCR 2;{} menuwindowline;{} forget (name (angekreuzte, k), quiet);{} fetch (name (angekreuzte, k), /zieltaskname){} FI{} ELSE fetch (name (angekreuzte, k), /zieltaskname){} FI.{} loeschen erfragen eigene station:{} IF menuwindowyes (dateiname + menubasistext (111)){} THEN erase (name (angekreuzte, k), /zieltaskname){} FI.{} fuehre fremdstationoperation aus:{} SELECT wahl OF{} CASE schreiben : save (name (angekreuzte, k), ziel){}
+ CASE checken : check (name (angekreuzte, k), ziel); bestaetige{} CASE holen : ueberschreiben erfragen fremde station{} CASE loeschen : loeschen erfragen fremde station{} END SELECT.{} ueberschreiben erfragen fremde station:{} IF exists (name (angekreuzte, k)){} THEN menuwindowline;{} IF menuwindowyes (dateiname + menubasistext (112)){} THEN zeile INCR 2;{} menuwindowline;{} forget (name (angekreuzte, k), quiet);{}
+ fetch (name (angekreuzte, k), ziel){} FI{} ELSE fetch (name (angekreuzte, k), ziel){} FI.{} loeschen erfragen fremde station:{} IF menuwindowyes (dateiname + menubasistext (111)){} THEN erase (name (angekreuzte, k), ziel){} FI.{} ziel:{} stationsnummer/zieltaskname.{} bestaetige:{} IF NOT is error{} THEN menuwindowout (dateiname + menubasistext (114)){} FI.{} schreibe schlussbemerkung:{} IF remaining menuwindowlines < 7{} THEN menuwindowpage; menuwindowline{}
+ ELSE menuwindowline (2){} FI;{} IF anzahl > 0{} THEN menuwindowout (menubasistext (93) +{} operationskennzeichnung (wahl)){} ELSE menuwindowout (menubasistext (94)){} FI;{} menuwindowstop.{} fehlerbehandlung:{} IF is error{} THEN fehlerfall := TRUE;{} regenerate menuscreen;{} melde zieltaskerror (errormessage);{} clear error; enable stop;{} LEAVE dateioperation ausfuehren{} FI.{}END PROC dateioperation ausfuehren;{}
+TEXT PROC operationsbezeichnung (INT CONST nr):{} SELECT nr OF{} CASE schreiben : menubasistext (95){} CASE checken : menubasistext (97){} CASE schreibcheck : menubasistext (99){} CASE holen : menubasistext (101){} CASE loeschen : menubasistext (103){} OTHERWISE ""{} END SELECT{}END PROC operationsbezeichnung;{}TEXT PROC operationskennzeichnung (INT CONST nr):{} SELECT nr OF{} CASE schreiben : menubasistext (96){} CASE checken : menubasistext (98){}
+ CASE schreibcheck : menubasistext (100){} CASE holen : menubasistext (102){} CASE loeschen : menubasistext (104){} OTHERWISE ""{} END SELECT{}END PROC operationskennzeichnung;{}BOOL PROC not empty (THESAURUS CONST t):{} INT VAR i;{} FOR i FROM 1 UPTO highest entry (t) REP{} IF name (t, i) <> ""{} THEN LEAVE not empty WITH TRUE{} FI{} PER;{} FALSE{}END PROC not empty;{}TEXT PROC zieltaskhinweis:{} IF zieltaskname = "ARCHIVE"{} THEN "(" + menubasistext (78) + ")"{}
+ ELIF zieltaskname = name (father){} THEN "(" + menubasistext (79) + ")"{} ELSE menubasistext (80) + zieltaskname + ")"{} FI{}END PROC zieltaskhinweis;{}PROC menu archiv verzeichnis:{} forget("Interne Dateiliste bei Archivoperation", quiet);{} ueberpruefe kommunikationsbasis;{} liste dateien der zieltask auf;{} regenerate menuscreen.{} ueberpruefe kommunikationsbasis:{} IF unzulaessiger zieltaskname{} THEN LEAVE menu archiv verzeichnis{} ELIF zieltaskname = name (myself){}
+ THEN LEAVE ueberpruefe kommunikationsbasis{} ELIF zieltask ist archivmanager AND NOT archiv gehoert mir{} THEN melde zieltaskerror (menubasistext (47));{} LEAVE menu archiv verzeichnis{} ELIF NOT zieltask ist archivmanager{} THEN stelle kontakt mit zieltask her{} FI.{} stelle kontakt mit zieltask her:{} TEXT VAR fehler :: "";{} IF task ist kommunikativ (fehler){} THEN kontakt mit zieltask erfolgt := TRUE{} ELSE melde zieltaskerror (fehler);{}
+ LEAVE menu archiv verzeichnis{} FI.{} liste dateien der zieltask auf:{} erstelle liste;{} gib liste aus;{} forget ("Interne Dateiliste bei Archivoperation", quiet).{} erstelle liste:{} menufootnote (menubasistext (21) + menubasistext (28));{} FILE VAR f :: sequential file (output, "Interne Dateiliste bei Archivoperation");{} disable stop;{} IF eigene station{} THEN list (f, /zieltaskname){} ELSE list (f, stationsnummer/zieltaskname){} FI;{} IF is error{}
+ THEN melde zieltaskerror (errormessage);{} forget ("Interne Dateiliste bei Archivoperation", quiet);{} clear error; enable stop;{} LEAVE menu archiv verzeichnis{} FI;{} enable stop.{} gib liste aus:{} modify (f);{} IF NOT (zieltaskname = name (myself)){} THEN to line (f, 1);{} insert record (f);{} notiere kopfzeile;{} headline (f, menubasistext (43));{} ELSE entferne eigenen namen aus der liste{} FI;{}
+ to line (f, 1);{} cursor on; menuwindowshow (f); cursor off.{} notiere kopfzeile:{} IF zieltask ist archivmanager{} THEN write record (f, headline (f));{} ELSE write record (f, zieltaskbezeichnung){} FI.{} entferne eigenen namen aus der liste:{} TEXT VAR zeile :: ""; INT VAR i;{} FOR i FROM lines (f) DOWNTO 1 REP{} to line (f, i);{} read record (f, zeile);{} IF pos (zeile, "Interne Dateiliste bei Archivoperation") > 0{} THEN delete record (f);{}
+ LEAVE entferne eigenen namen aus der liste{} FI{} PER{}END PROC menu archiv verzeichnis;{}PROC menu archiv verzeichnis drucken:{} forget ("Interne Dateiliste bei Archivoperation", quiet);{} ueberpruefe kommunikationsbasis;{} erstelle listing;{} drucke listing aus.{} ueberpruefe kommunikationsbasis:{} IF unzulaessiger zieltaskname{} THEN LEAVE menu archiv verzeichnis drucken{} ELIF zieltaskname = name (myself){} THEN LEAVE ueberpruefe kommunikationsbasis{}
+ ELIF zieltask ist archivmanager AND NOT archiv gehoert mir{} THEN melde zieltaskerror (menubasistext (47));{} LEAVE menu archiv verzeichnis drucken{} ELIF NOT zieltask ist archivmanager{} THEN stelle kontakt mit zieltask her{} FI.{} stelle kontakt mit zieltask her:{} TEXT VAR fehler :: "";{} IF task ist kommunikativ (fehler){} THEN kontakt mit zieltask erfolgt := TRUE{} ELSE melde zieltaskerror (fehler);{} LEAVE menu archiv verzeichnis drucken{}
+ FI.{} erstelle listing:{} LET dummy name pos = 18;{} FILE VAR listfile; INT VAR i; TEXT VAR record :: "";{} TEXT CONST head :: 70 * "=", end :: 70 * "-";{} IF menuno (menubasistext (90), 5){} THEN LEAVE menu archiv verzeichnis drucken{} FI;{} menufootnote (menubasistext (21) + menubasistext (29));{} disable stop;{} listfile := sequential file (output, "Interne Dateiliste bei Archivoperation");{} IF eigene station{} THEN list (listfile, /zieltaskname){} ELSE list (listfile, stationsnummer/zieltaskname){}
+ FI;{} IF is error{} THEN melde zieltaskerror (errormessage);{} forget ("Interne Dateiliste bei Archivoperation", quiet);{} clear error; enable stop;{} LEAVE menu archiv verzeichnis drucken{} FI;{} enable stop.{} drucke listing aus:{} schreibe dateikopf;{} loesche dummy names;{} schreibe fuss;{} drucke und loesche listing.{} schreibe dateikopf:{} modify (listfile);{} to line (listfile, 1);{} FOR i FROM 1 UPTO 6 REP insert record (listfile) PER;{}
+ to line (listfile, 1);{} write record (listfile, "#type (""elanlist"")#"); down (listfile);{} write record (listfile, "#start (2.5,0.0)##limit (20,5)#"{} + "#pagelength (26.0)#"); down (listfile);{} write record (listfile, head); down (listfile);{} schreibe erkennungszeile; down (listfile);{} write record (listfile, " Listing vom " + date + ", "{} + time of day + " Uhr"); down (listfile);{} write record (listfile, head).{}
+ schreibe erkennungszeile:{} IF zieltask ist archivmanager{} THEN write record (listfile, "Archiv: " + headline (listfile)){} ELSE write record (listfile, "Task : " + taskbezeichnung){} FI.{} taskbezeichnung:{} IF eigene station{} THEN zieltaskname{} ELSE text (stationsnummer) + "/" + zieltaskname{} FI.{} loesche dummy names:{} to line (listfile, 8);{} WHILE NOT eof (listfile) REP{} read record (listfile, record);{} IF (record SUB dummy name pos) = "-"{}
+ OR pos (record, "Interne Dateiliste bei Archivoperation") > 0{} THEN delete record (listfile){} ELSE down (listfile){} FI{} PER.{} schreibe fuss:{} output (listfile);{} putline (listfile, end).{} drucke und loesche listing:{} menufootnote (menubasistext (21) + menubasistext (30));{} disable stop;{} print ("Interne Dateiliste bei Archivoperation");{} IF is error{} THEN melde zieltaskerror (errormessage);{} clear error; enable stop;{}
+ forget ("Interne Dateiliste bei Archivoperation", quiet);{} LEAVE menu archiv verzeichnis drucken{} FI;{} enable stop;{} forget ("Interne Dateiliste bei Archivoperation", quiet){}END PROC menu archiv verzeichnis drucken;{}TEXT PROC zieltaskbezeichnung:{} IF eigene station{} THEN menubasistext (77) + taskbezeichnung{} ELSE menubasistext (76) + text (stationsnummer) + " " +{} menubasistext (77) + zieltaskname{} FI.{} taskbezeichnung:{} IF zieltaskname = "ARCHIVE"{}
+ THEN menubasistext (78){} ELIF zieltaskname = name (father){} THEN menubasistext (79) + " (" + zieltaskname + ")"{} ELSE zieltaskname{} FI{}END PROC zieltaskbezeichnung;{}BOOL PROC unzulaessiger zieltaskname:{} IF compress (zieltaskname) = "" OR compress (zieltaskname) = "-"{} THEN TRUE{} ELSE FALSE{} FI{}END PROC unzulaessiger zieltaskname;{}PROC menu archiv initialisieren:{} TEXT VAR archivname :: "", meldung :: "";{} klaere zieltaskart;{} formatiere ggf;{}
+ initialisiere ggf.{} klaere zieltaskart:{} IF NOT zieltask ist archivmanager{} THEN menuinfo (menubasistext (121) + zieltaskname +{} menubasistext (122));{} LEAVE menu archiv initialisieren{} FI.{} formatiere ggf:{} IF menuyes (menubasistext (85), 5){} THEN nimm archiv in beschlag;{} fuehre formatierung aus{} FI.{} nimm archiv in beschlag:{} stelle archivbesitz sicher;{} IF aktueller archivname <> ""{} THEN archivname := aktueller archivname{}
+ ELSE archivname := menubasistext (75){} FI;{} IF eigene station{} THEN reserve (archivname,/zieltaskname){} ELSE reserve (archivname, stationsnummer/zieltaskname){} FI;{} aktueller archivname := archivname;{} archiv gehoert mir := TRUE;{} zieltask anzeigen.{} stelle archivbesitz sicher:{} IF NOT archiv gehoert mir OR NOT kontakt mit zieltask erfolgt{} THEN versuche kommunikation;{} versuche archiv zu reservieren (meldung);{} werte meldung aus{}
+ FI.{} versuche kommunikation:{} TEXT VAR fehler :: "";{} IF NOT task ist kommunikativ (fehler){} THEN melde zieltaskerror (fehler);{} melde rigoros ab;{} LEAVE menu archiv initialisieren{} ELSE kontakt mit zieltask erfolgt := TRUE{} FI.{} werte meldung aus:{} IF meldung <> ""{} THEN melde zieltaskerror (meldung);{} aktueller archivname := "";{} zieltask anzeigen;{} LEAVE menu archiv initialisieren{} FI.{}
+ fuehre formatierung aus:{} INT VAR auswahl :: menualternative (menubasistext (54),{} menubasistext (55),{} menubasistext (56), 5, TRUE);{} IF auswahl = 0{} THEN LEAVE fuehre formatierung aus{} FI;{} IF auswahl > 100{} THEN auswahl DECR 100{} FI;{} command dialogue (FALSE);{} disable stop;{} menufootnote (menubasistext (21) + menubasistext (27));{} IF eigene station{} THEN formatiere auf eigener station{}
+ ELSE formatiere auf fremder station{} FI;{} IF is error{} THEN melde zieltaskerror (errormessage);{} clear error; enable stop;{} command dialogue (TRUE);{} LEAVE formatiere ggf{} ELSE enable stop;{} command dialogue (TRUE);{} aktiviere gueltige archivmenupunkte;{} refresh submenu;{} zieltask anzeigen{} FI.{} formatiere auf eigener station:{} IF auswahl < 5{} THEN format (auswahl, /zieltaskname){}
+ ELSE format (/zieltaskname){} FI.{} formatiere auf fremder station:{} IF auswahl < 5{} THEN format (auswahl, stationsnummer/zieltaskname){} ELSE format (stationsnummer/zieltaskname){} FI.{} initialisiere ggf:{} stelle archivbesitz sicher;{} archiv anmelden (archivname, meldung, FALSE);{} IF archivname <> ""{} THEN aktueller archivname := archivname;{} archiv gehoert mir := TRUE;{} aktiviere gueltige archivmenupunkte;{} refresh submenu;{}
+ zieltask anzeigen;{} frage nach ueberschreiben{} ELIF meldung = menubasistext (63) OR meldung = menubasistext (62){} THEN frage nach initialisieren{} ELSE melde zieltaskerror (meldung);{} aktueller archivname := "";{} zieltask anzeigen;{} LEAVE menu archiv initialisieren{} FI.{} frage nach ueberschreiben:{} IF menuyes (menubasistext (86) + archivname + menubasistext (87), 5){} THEN erfrage neuen namen und initialisiere{}
+ ELSE LEAVE menu archiv initialisieren{} FI.{} frage nach initialisieren:{} IF menuyes (menubasistext (88), 5){} THEN erfrage neuen namen und initialisiere{} ELSE LEAVE menu archiv initialisieren{} FI.{} erfrage neuen namen und initialisiere:{} TEXT VAR neuer name := compress(menuanswer (menubasistext (89),{} aktueller archivname, 5));{} IF neuer name <> ""{} THEN archivname := neuer name{} ELIF neuer name = "" AND archivname = ""{}
+ THEN archivname := menubasistext (75){} FI;{} command dialogue (FALSE);{} disable stop;{} IF eigene station{} THEN reserve (archivname, /zieltaskname);{} clear (/zieltaskname){} ELSE reserve (archivname, stationsnummer/zieltaskname);{} clear (stationsnummer/zieltaskname){} FI;{} IF is error{} THEN melde zieltaskerror (errormessage);{} clear error; enable stop;{} command dialogue (TRUE);{} melde rigoros ab;{}
+ archivreservierung aufgeben;{} aktiviere gueltige archivmenupunkte;{} refresh submenu;{} zieltask anzeigen;{} LEAVE menu archiv initialisieren{} ELSE enable stop; command dialogue (TRUE);{} aktueller archivname := archivname;{} archiv gehoert mir := TRUE;{} aktiviere gueltige archivmenupunkte;{} refresh submenu;{} zieltask anzeigen{} FI{}END PROC menu archiv initialisieren;{}PROC archive (TEXT CONST archive name,task, INT CONST station):{}
+ call (reserve code, archive name, station/task){}END PROC archive;{}PROC menu archiv reservierung aufgeben:{} IF archiv gehoert mir{} THEN menufootnote (menubasistext (21) + menubasistext (22));{} archivreservierung aufgeben;{} FI;{} erase menunotice;{} old menufootnote{}END PROC menu archiv reservierung aufgeben;{}PROC archivreservierung aufgeben:{} command dialogue (FALSE);{} disable stop;{} IF eigene station{} THEN release (/zieltaskname){} ELSE release (stationsnummer/zieltaskname);{}
+ FI;{} IF is error{} THEN clear error{} FI;{} enable stop;{} command dialogue (TRUE);{} archiv gehoert mir := FALSE;{} aktueller archivname := ""{}END PROC archivreservierung aufgeben;{}BOOL PROC eigene station:{} IF stationsnummer = 0 OR stationsnummer = station (myself){} THEN TRUE{} ELSE FALSE{} FI{}END PROC eigene station;{}PROC aktiviere gueltige archivmenupunkte:{} IF zieltask ist archivmanager AND NOT archiv gehoert mir{} THEN aktiviere nur grundfunktionen{}
+ ELSE aktiviere alle momentan gueltigen punkte{} FI.{} aktiviere alle momentan gueltigen punkte:{} IF letzte funktion = 11{} THEN activate (1); activate (2);{} activate (4); activate (5); activate (6); activate (7); activate (8);{} activate (10); activate (11);{} activate (13); activate (14);{} ELIF letzte funktion = 6{} THEN deactivate (1); deactivate (2);{} activate (4); deactivate (5); deactivate (6); activate (7); activate (8);{}
+ activate (10); activate (11);{} deactivate (13); activate (14);{} FI.{} aktiviere nur grundfunktionen:{} activate (1); deactivate (2);{} deactivate (4); deactivate (5); deactivate (6); deactivate (7); deactivate (8);{} deactivate (10); deactivate (11);{} activate (13); activate (14).{}END PROC aktiviere gueltige archivmenupunkte;{}PROC zieltask anzeigen:{} IF zieltask ist archivmanager{} THEN schreibe taskname und archivname{} ELSE schreibe taskname{}
+ FI.{} schreibe taskname:{} write menunotice (menubasistext (59) + ""13"" + name der task, notizort).{} schreibe taskname und archivname:{} write menunotice (menubasistext (59) + ""13"" + name der task +{} ""13"" + menubasistext (60) + ""13"" + archivname,{} notizort).{} name der task:{} IF zieltaskname = "ARCHIVE" AND eigene station{} THEN " " + menubasistext (71){} ELIF zieltaskname = "PUBLIC" AND eigene station{} THEN " " + menubasistext (72){}
+ ELIF zieltaskname = name (father){} THEN " " + menubasistext (73){} ELSE " " + ggf gekuerzter zieltaskname{} FI.{} ggf gekuerzter zieltaskname:{} TEXT VAR interner name;{} IF eigene station{} THEN interner name := zieltaskname;{} ELSE interner name := text (stationsnummer) + "/" + zieltaskname{} FI;{} IF length (interner name) < 20{} THEN ""15"" + interner name + " "14""{} ELSE ""15"" + subtext (interner name, 1 , 18) + ".." + " "14""{} FI.{}
+ archivname:{} IF NOT archiv gehoert mir OR aktueller archivname = ""{} THEN " " + menubasistext (74){} ELSE " "15"" + ggf gekuerzter archivname + " "14""{} FI.{} ggf gekuerzter archivname:{} IF eigene station AND length (aktueller archivname) > 20{} THEN subtext (aktueller archivname, 1, 18) + ".."{} ELIF NOT eigene station AND length (aktueller archivname) > 17{} THEN subtext (aktueller archivname, 1, 15) + ".."{} ELSE aktueller archivname{} FI.{}
+END PROC zieltask anzeigen;{}BOOL PROC task ist kommunikativ (TEXT VAR fehler):{} INT VAR antwort;{} DATASPACE VAR dummy space := nilspace;{} IF zieltask ist archivmanager{} THEN schicke reservierungscode{} ELSE schicke listcode{} FI.{} schicke reservierungscode:{} disable stop;{} IF eigene station{} THEN pingpong (/zieltaskname, reserve code, dummy space, antwort);{} ELSE pingpong (stationsnummer/zieltaskname, reserve code,{} dummy space, antwort){}
+ FI;{} werte antwort aus.{} schicke listcode:{} disable stop;{} IF eigene station{} THEN pingpong (/zieltaskname, list code, dummy space, antwort);{} ELSE pingpong (stationsnummer/zieltaskname, list code,{} dummy space, antwort){} FI;{} werte antwort aus.{} werte antwort aus:{} IF is error{} THEN clear error{} FI;{} BOUND TEXT VAR inhalt := dummy space;{} enable stop;{} IF antwort = 0 THEN fehler := ""{} ELIF antwort = -1 THEN fehler := menubasistext (41){}
+ ELIF antwort = -2 THEN fehler := menubasistext (42){} ELSE fehler := inhalt{} FI;{} forget (dummy space);{} IF antwort = ack{} THEN kontakt mit zieltask erfolgt := TRUE; TRUE{} ELSE kontakt mit zieltask erfolgt := FALSE; FALSE{} FI{}END PROC task ist kommunikativ;{}END PACKET ls dialog 6;{}
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG 7 b/app/gs.dialog/1.2/src/ls-DIALOG 7
new file mode 100644
index 0000000..467f531
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG 7
@@ -0,0 +1,54 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG 7 **
+ ** Dateihandling **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+PACKET ls dialog 7 DEFINES{} menu dateien verzeichnis,{} menu dateien loeschen,{} menu dateien drucken,{} menu dateien kopieren,{} menu dateien umbenennen,{} menu dateien speicherplatz,{} menu dateien aufraeumen:{}LET filetype = 1003,{} maxlaenge = 60,{} breite = 40,{} niltext = "";{}TEXT CONST dateibez :: "Dateiliste bei internen Operationen";{}PROC menu dateien verzeichnis:{} forget (dateibez, quiet);{} liste dateien auf;{}
+ regenerate menuscreen.{} liste dateien auf:{} erstelle liste;{} gib liste aus;{} forget (dateibez, quiet).{} erstelle liste:{} menufootnote (menubasistext (21) + menubasistext (28));{} FILE VAR f :: sequential file (output, dateibez);{} list (f); modify (f);{} headline (f, menubasistext (43));{} to line (f, 1); insert record (f);{} write record (f, menubasistext (161));{} entferne eigenen namen aus der liste.{} entferne eigenen namen aus der liste:{} TEXT VAR zeile :: ""; INT VAR i;{}
+ FOR i FROM lines (f) DOWNTO 1 REP{} to line (f, i); read record (f, zeile);{} IF pos (zeile, dateibez) > 0{} THEN delete record (f);{} LEAVE entferne eigenen namen aus der liste{} FI{} PER.{} gib liste aus:{} to line (f, 1); cursor on; menuwindowshow (f); cursor off{}END PROC menu dateien verzeichnis;{}PROC menu dateien loeschen:{} lasse dateien auswaehlen;{} loesche ausgewaehlte dateien;{} regenerate menuscreen.{} lasse dateien auswaehlen:{} IF NOT not empty (ALL myself){}
+ THEN noch keine datei;{} LEAVE menu dateien loeschen{} ELSE biete auswahl an{} FI.{} biete auswahl an:{} THESAURUS VAR angekreuzte :={} menuanswersome ( center (breite, invers (menubasistext(162))) +{} menubasistext (163), "", ALL myself,{} menubasistext (162), menubasistext (91) +{} menubasistext (104) + menubasistext (92), FALSE).{} loesche ausgewaehlte dateien:{} show menuwindow;{} steige ggf bei leerem thesaurus aus;{}
+ menuwindowout (menuwindowcenter (invers (menubasistext (162))));{} menuwindowline (2);{} command dialogue (FALSE);{} fuehre einzelne operation aus;{} command dialogue (TRUE);{} schlage ggf neue seite auf;{} menuwindowout (menubasistext (93) + menubasistext (104));{} menuwindowstop.{} fuehre einzelne operation aus:{} INT VAR k;{} FOR k FROM 1 UPTO highest entry (angekreuzte) REP{} IF name (angekreuzte, k) = niltext{} THEN LEAVE fuehre einzelne operation aus{}
+ ELIF NOT exists (name (angekreuzte, k)){} THEN menuwindowout (" """ + name (angekreuzte, k) + """");{} menuwindowline;{} menuwindowout (menubasistext (188)); menuwindowline;{} LEAVE fuehre einzelne operation aus{} ELSE disable stop;{} IF menuwindowyes (" """ + name (angekreuzte, k) + """ "{} + menubasistext (111)){} THEN forget (name (angekreuzte, k), quiet){} FI;{}
+ fehlerbehandlung{} FI{} PER.{} steige ggf bei leerem thesaurus aus:{} IF NOT not empty (angekreuzte){} THEN menuwindowline (2);{} menuwindowout (menubasistext (94));{} menuwindowstop;{} regenerate menuscreen;{} LEAVE menu dateien loeschen{} FI.{} schlage ggf neue seite auf:{} IF remaining menuwindowlines < 7{} THEN menuwindowpage; menuwindowline{} ELSE menuwindowline (2){} FI.{} fehlerbehandlung:{} IF is error{}
+ THEN regenerate menuscreen;{} menuinfo (invers (errormessage));{} clear error; enable stop;{} LEAVE menu dateien loeschen{} FI{}END PROC menu dateien loeschen;{}PROC menu dateien drucken:{} lasse programme auswaehlen;{} drucke programme;{} regenerate menuscreen.{} lasse programme auswaehlen:{} IF NOT not empty (ALL myself){} THEN noch keine datei;{} LEAVE menu dateien drucken{} ELSE biete auswahl an{} FI.{} biete auswahl an:{}
+ THESAURUS VAR angekreuzte :={} menuanswersome ( center (breite, invers (menubasistext(164))) +{} menubasistext (163), "", ALL myself,{} menubasistext (164), menubasistext (91) +{} menubasistext (165) + menubasistext (92), FALSE).{} drucke programme:{} show menuwindow;{} steige ggf bei leerem thesaurus aus;{} menuwindowout (menuwindowcenter (invers (menubasistext (164))));{} menuwindowline (2);{} command dialogue (FALSE);{}
+ fuehre einzelne operation aus;{} command dialogue (TRUE);{} schlage ggf neue seite auf;{} menuwindowout (menubasistext (93) + menubasistext (165));{} menuwindowstop.{} fuehre einzelne operation aus:{} INT VAR k;{} FOR k FROM 1 UPTO highest entry (angekreuzte) REP{} IF name (angekreuzte, k) = niltext{} THEN LEAVE fuehre einzelne operation aus{} ELIF NOT exists (name (angekreuzte, k)){} THEN menuwindowout (" """ + name (angekreuzte, k) + """");{}
+ menuwindowline;{} menuwindowout (menubasistext (188)); menuwindowline;{} LEAVE fuehre einzelne operation aus{} ELSE disable stop;{} menuwindowout ( " """ + name (angekreuzte, k) + """ "{} + menubasistext (166));{} menuwindowline;{} print (name (angekreuzte, k));{} fehlerbehandlung{} FI{} PER.{} steige ggf bei leerem thesaurus aus:{} IF NOT not empty (angekreuzte){}
+ THEN menuwindowline (2);{} menuwindowout (menubasistext (94));{} menuwindowstop;{} regenerate menuscreen;{} LEAVE menu dateien drucken{} FI.{} schlage ggf neue seite auf:{} IF remaining menuwindowlines < 7{} THEN menuwindowpage; menuwindowline{} ELSE menuwindowline (2){} FI.{} fehlerbehandlung:{} IF is error{} THEN regenerate menuscreen;{} menuinfo (invers (errormessage));{} clear error; enable stop;{}
+ LEAVE menu dateien drucken{} FI.{}END PROC menu dateien drucken;{}PROC menu dateien kopieren:{} ermittle alten dateinamen;{} erfrage neuen dateinamen;{} kopiere ggf die datei.{} ermittle alten dateinamen:{} IF NOT not empty (ALL myself){} THEN noch keine datei;{} LEAVE menu dateien kopieren{} ELSE hole den namen{} FI.{} hole den namen:{} TEXT VAR alter name :={} menuanswerone ( center (breite, invers (menubasistext(167))) +{} menubasistext (163), "", ALL myself,{}
+ menubasistext (167), menubasistext (168) +{} menubasistext (169) + menubasistext (170), TRUE);{} IF alter name = niltext{} THEN LEAVE menu dateien kopieren{} ELIF NOT exists (alter name){} THEN menuinfo (menubasistext (188));{} LEAVE menu dateien kopieren{} FI.{} erfrage neuen dateinamen:{} TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5).{} ausgabe:{} ueberschrift + menubasistext (171) + bisheriger name{}
+ + menubasistext (172).{} ueberschrift:{} center (maxlaenge, invers (menubasistext (167))) + ""13""13"".{} bisheriger name:{} ""13""13" " + invers (alter name) + ""13""13"".{} kopiere ggf die datei:{} IF neuer name = niltext{} THEN menuinfo (invers (menubasistext (173)));{} LEAVE menu dateien kopieren{} ELIF exists (neuer name){} THEN mache vorwurf;{} LEAVE menu dateien kopieren{} ELSE copy (alter name, neuer name){}
+ FI.{} mache vorwurf:{} menuinfo (menubasistext (174)).{}END PROC menu dateien kopieren;{}PROC menu dateien umbenennen:{} ermittle alten dateinamen;{} erfrage neuen dateinamen;{} benenne ggf die datei um.{} ermittle alten dateinamen:{} IF NOT not empty (ALL myself){} THEN noch keine datei;{} LEAVE menu dateien umbenennen{} ELSE hole den namen{} FI.{} hole den namen:{} TEXT VAR alter name :={} menuanswerone ( center (breite, invers (menubasistext(175))) +{}
+ menubasistext (163), "", ALL myself,{} menubasistext (175), menubasistext (168) +{} menubasistext (176) + menubasistext (170), TRUE);{} IF alter name = niltext{} THEN LEAVE menu dateien umbenennen{} ELIF NOT exists (alter name){} THEN menuinfo (menubasistext (188));{} LEAVE menu dateien umbenennen{} FI.{} erfrage neuen dateinamen:{} TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5).{} ausgabe:{}
+ ueberschrift + menubasistext (171) + bisheriger name{} + menubasistext (177).{} ueberschrift:{} center (maxlaenge, invers (menubasistext (175))) + ""13""13"".{} bisheriger name:{} ""13""13" " + invers (alter name) + ""13""13"".{} benenne ggf die datei um:{} IF neuer name = niltext{} THEN menuinfo (invers (menubasistext (173)));{} LEAVE menu dateien umbenennen{} ELIF exists (neuer name){} THEN mache vorwurf;{} LEAVE menu dateien umbenennen{}
+ ELSE rename (alter name, neuer name){} FI.{} mache vorwurf:{} menuinfo (menubasistext (174)).{}END PROC menu dateien umbenennen;{}PROC menu dateien speicherplatz:{} lasse dateinamen auswaehlen;{} ermittle den speicherplatz;{} regenerate menuscreen.{} lasse dateinamen auswaehlen:{} IF NOT not empty (ALL myself){} THEN noch keine datei;{} LEAVE menu dateien speicherplatz{} ELSE biete auswahl an{} FI.{} biete auswahl an:{} THESAURUS VAR angekreuzte :={}
+ menuanswersome ( center (breite, invers (menubasistext(178))) +{} menubasistext (163), "", ALL myself,{} menubasistext (178), menubasistext (179), FALSE).{} ermittle den speicherplatz:{} show menuwindow;{} steige ggf bei leerem thesaurus aus;{} menuwindowout (menuwindowcenter (invers (menubasistext (178))));{} menuwindowline (2);{} command dialogue (FALSE);{} fuehre einzelne operation aus;{} command dialogue (TRUE);{} schlage ggf neue seite auf;{}
+ menuwindowout (menubasistext (180));{} menuwindowstop.{} fuehre einzelne operation aus:{} INT VAR k;{} FOR k FROM 1 UPTO highest entry (angekreuzte) REP{} IF name (angekreuzte, k) = niltext{} THEN LEAVE fuehre einzelne operation aus{} ELIF NOT exists (name (angekreuzte, k)){} THEN menuwindowout (" """ + name (angekreuzte, k) + """");{} menuwindowline;{} menuwindowout (menubasistext (188)); menuwindowline;{} LEAVE fuehre einzelne operation aus{}
+ ELSE disable stop;{} menuwindowout ( " """ + name (angekreuzte, k) + """ "{} + menubasistext (181){} + speicherplatz (name (angekreuzte, k)));{} menuwindowline;{} fehlerbehandlung{} FI{} PER.{} steige ggf bei leerem thesaurus aus:{} IF NOT not empty (angekreuzte){} THEN menuwindowline (2);{} menuwindowout (menubasistext (94));{} menuwindowstop;{} regenerate menuscreen;{}
+ LEAVE menu dateien speicherplatz{} FI.{} schlage ggf neue seite auf:{} IF remaining menuwindowlines < 7{} THEN menuwindowpage; menuwindowline{} ELSE menuwindowline (2){} FI.{} fehlerbehandlung:{} IF is error{} THEN regenerate menuscreen;{} menuinfo (invers (errormessage));{} clear error; enable stop;{} LEAVE menu dateien speicherplatz{} FI.{}END PROC menu dateien speicherplatz;{}TEXT PROC speicherplatz (TEXT CONST dateiname):{}
+ DATASPACE VAR ds :: old (dateiname);{} INT CONST platz :: storage (ds);{} forget (ds);{} " " + text (platz) + menubasistext (182){}END PROC speicherplatz;{}PROC menu dateien aufraeumen:{} lasse dateinamen auswaehlen;{} raeume die dateien auf;{} regenerate menuscreen.{} lasse dateinamen auswaehlen:{} IF NOT not empty (ALL myself){} THEN noch keine datei;{} LEAVE menu dateien aufraeumen{} ELSE biete auswahl an{} FI.{} biete auswahl an:{} THESAURUS VAR angekreuzte :={}
+ menuanswersome ( center (breite, invers (menubasistext(183))) +{} menubasistext (163), "", ALL myself,{} menubasistext (183), menubasistext (91) +{} menubasistext (184) + menubasistext (92), FALSE).{} raeume die dateien auf:{} show menuwindow;{} steige ggf bei leerem thesaurus aus;{} menuwindowout (menuwindowcenter (invers (menubasistext (183))));{} menuwindowline (2);{} command dialogue (FALSE);{} fuehre einzelne operation aus;{}
+ command dialogue (TRUE);{} schlage ggf neue seite auf;{} menuwindowout (menubasistext (93) + menubasistext (184));{} menuwindowstop.{} fuehre einzelne operation aus:{} INT VAR k;{} FOR k FROM 1 UPTO highest entry (angekreuzte) REP{} IF name (angekreuzte, k) = niltext{} THEN LEAVE fuehre einzelne operation aus{} ELIF NOT exists (name (angekreuzte, k)){} THEN menuwindowout (" """ + name (angekreuzte, k) + """");{} menuwindowline;{} menuwindowout (menubasistext (188)); menuwindowline;{}
+ LEAVE fuehre einzelne operation aus{} ELIF dateityp ist ok{} THEN disable stop;{} menuwindowline;{} menuwindowout ( " """ + name (angekreuzte, k) + """ "{} + menubasistext (185) );{} menuwindowline; menuwindowout (" ");{} reorganize (name (angekreuzte, k));{} fehlerbehandlung{} ELSE menuwindowout ( " """ + name (angekreuzte, k) + """ "{} + menubasistext (186)){}
+ FI{} PER.{} dateityp ist ok:{} type (old (name (angekreuzte, k))) = filetype.{} steige ggf bei leerem thesaurus aus:{} IF NOT not empty (angekreuzte){} THEN menuwindowline (2);{} menuwindowout (menubasistext (94));{} menuwindowstop;{} regenerate menuscreen;{} LEAVE menu dateien aufraeumen{} FI.{} schlage ggf neue seite auf:{} IF remaining menuwindowlines < 7{} THEN menuwindowpage; menuwindowline{} ELSE menuwindowline (2){}
+ FI.{} fehlerbehandlung:{} IF is error{} THEN regenerate menuscreen;{} menuinfo (invers (errormessage));{} clear error; enable stop;{} LEAVE menu dateien aufraeumen{} FI.{}END PROC menu dateien aufraeumen;{}PROC noch keine datei:{} menuinfo (menubasistext ( 187)){}END PROC noch keine datei;{}END PACKET ls dialog 7;{}
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG MENUKARTEN MANAGER b/app/gs.dialog/1.2/src/ls-DIALOG MENUKARTEN MANAGER
new file mode 100644
index 0000000..67799ea
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG MENUKARTEN MANAGER
@@ -0,0 +1,28 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG **
+ ** MENUKARTEN-MANAGER **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+PACKET ls dialog manager DEFINES{} ls dialog manager:{}LET fetch code = 11,{} save code = 12,{} exists code = 13,{} list code = 15,{} continue code = 100;{}LET mm taskname = "ls-MENUKARTEN",{} gibt es schon = "Die Task 'ls-MENUKARTEN' existiert schon!",{} verweis = "Unzulässiger Zugriff auf die Task 'ls-MENUKARTEN'!";{}PROC ls dialog manager:{} stelle richtigen tasknamen ein;{} global manager{} (PROC (DATASPACE VAR, INT CONST, INT CONST, TASK CONST) ls dialog manager){}
+END PROC ls dialog manager;{}PROC stelle richtigen tasknamen ein:{} IF name (myself) <> mm taskname{} THEN nimm umbenennung vor{} FI.{} nimm umbenennung vor:{} IF NOT exists task (mm taskname){} THEN rename myself (mm taskname){} ELSE errorstop (gibt es schon){} FI.{}END PROC stelle richtigen tasknamen ein;{}PROC ls dialog manager (DATASPACE VAR ds, INT CONST order, phase,{} TASK CONST order task):{} IF order task = supervisor{} OR order = fetch code{}
+ OR order = save code{} OR order = exists code{} OR order = list code{} OR order = continue code{} THEN free manager (ds, order, phase, order task){} ELSE errorstop (verweis){} FI{}END PROC ls dialog manager;{}END PACKET ls dialog manager;{}
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG MM-gen b/app/gs.dialog/1.2/src/ls-DIALOG MM-gen
new file mode 100644
index 0000000..ef05853
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG MM-gen
@@ -0,0 +1,27 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG **
+ ** MENUKARTEN MANAGER **
+ ** Generator-Programm **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+LET dateiname = "ls-DIALOG MENUKARTEN MANAGER",{} archivname = "gs-dialog";{}gib bildschirmhinweis;{}hole generatordatei vom archiv;{}insertiere die datei;{}do ("ls dialog manager").{}gib bildschirmhinweis:{} page;{} putline (" "15"ls-DIALOG MENUKARTEN MANAGER - Generierung "14"").{}hole generatordatei vom archiv:{} IF NOT exists (dateiname){} THEN cursor (1, 5); out (""4"");{} putline ("Bitte warten... Ich hole eine Datei von der Diskette!");{} archive (archivname);{}
+ fetch (dateiname, archive);{} release (archive){} FI.{}insertiere die datei:{} cursor (1, 5); out (""4"");{} putline ("Bitte warten... Ich insertiere!");{} check off; insert (dateiname); check on;{} forget ("ls-DIALOG MM/gen", quiet);{} forget (dateiname, quiet).{}
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG decompress b/app/gs.dialog/1.2/src/ls-DIALOG decompress
new file mode 100644
index 0000000..96d9340
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG decompress
@@ -0,0 +1,150 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG - DECOMPRESS **
+ ** **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+PACKET ls dialog decompress DEFINES
+
+ komprimiere,
+ dekomprimiere:
+
+LET verweis = "Angegebene Datei existiert nicht!",
+ falscher typ = "Angegebenen Datei hat falschen Typ!",
+ filetype = 1003;
+
+PROC komprimiere (TEXT CONST dateiname):
+ INT VAR zeiger;
+ ueberpruefe existenz;
+ ueberpruefe dateityp;
+ initialisiere;
+ FOR zeiger FROM 1 UPTO 24 REP
+ getline (ein, eingabezeile);
+ putline (aus, eingabezeile);
+ PER;
+ WHILE NOT eof (ein) REP
+ getline (ein, eingabezeile);
+ zaehler INCR 1; cout (zaehler);
+ zwischenzeile := abgeschnitten (eingabezeile);
+ haenge zeilentrenner an;
+ haenge zwischenzeile an ausgabezeile;
+ schreibe ausgabezeile ggf weg
+ PER;
+ schreibe ausgabezeile weg;
+ mache ausgabedatei zur eingabedatei.
+
+ ueberpruefe existenz:
+ IF NOT exists (dateiname)
+ THEN errorstop (verweis);
+ FI.
+
+ ueberpruefe dateityp:
+ IF type (old (dateiname)) <> filetype
+ THEN errorstop (falscher typ)
+ FI.
+
+ initialisiere:
+ FILE VAR ein := sequential file (input, dateiname);
+ FILE VAR aus := sequential file (output, "KOMPRIM");
+ maxlinelength (aus, 600);
+ INT VAR zaehler :: 1;
+ TEXT VAR eingabezeile :: "", zwischenzeile :: "", ausgabezeile :: "".
+
+ haenge zeilentrenner an:
+ IF zwischenzeile <> ""
+ THEN zwischenzeile CAT "{}"
+ FI.
+
+ haenge zwischenzeile an ausgabezeile:
+ ausgabezeile CAT zwischenzeile.
+
+ schreibe ausgabezeile ggf weg:
+ IF length (ausgabezeile) > 500
+ THEN schreibe ausgabezeile weg
+ FI.
+
+ schreibe ausgabezeile weg:
+ IF ausgabezeile <> ""
+ THEN putline (aus, ausgabezeile);
+ ausgabezeile := ""
+ FI.
+
+mache ausgabedatei zur eingabedatei:
+ forget (dateiname, quiet);
+ rename ("KOMPRIM", dateiname).
+END PROC komprimiere;
+
+TEXT PROC abgeschnitten (TEXT CONST zeile):
+ TEXT VAR t :: zeile;
+ WHILE (t SUB length (t)) = " " REP
+ t := subtext (t, 1, length (t) - 1)
+ PER;
+ t
+END PROC abgeschnitten;
+
+PROC dekomprimiere (TEXT CONST dateiname):
+ INT VAR zeiger;
+ ueberpruefe existenz;
+ ueberpruefe dateityp;
+ initialisiere;
+ FOR zeiger FROM 1 UPTO 24 REP
+ getline (ein, eingabezeile);
+ putline (aus, eingabezeile);
+ PER;
+ WHILE NOT eof (ein) REP
+ getline (ein, eingabezeile);
+ zerlege zeile
+ PER;
+ forget (dateiname, quiet);
+ rename ("DEKOMPRIM", dateiname).
+
+ ueberpruefe existenz:
+ IF NOT exists (dateiname)
+ THEN errorstop (verweis)
+ FI.
+
+ ueberpruefe dateityp:
+ IF type (old (dateiname)) <> filetype
+ THEN errorstop (falscher typ)
+ FI.
+
+ initialisiere:
+ FILE VAR ein := sequential file (input, dateiname);
+ FILE VAR aus := sequential file (output, "DEKOMPRIM");
+ INT VAR zaehler :: 1;
+ TEXT VAR eingabezeile :: "", ausgabezeile :: "".
+
+ zerlege zeile:
+ WHILE eingabezeile <> "" REP
+ nimm das erste stueck und schreibe es weg;
+ entferne den zeilentrenner
+ PER.
+
+ nimm das erste stueck und schreibe es weg:
+ ausgabezeile := subtext (eingabezeile, 1, pos (eingabezeile, "{}") - 1);
+ putline (aus, ausgabezeile);
+ zaehler INCR 1;
+ cout (zaehler).
+
+ entferne den zeilentrenner:
+ eingabezeile := subtext (eingabezeile, pos (eingabezeile, "{}") + 2).
+END PROC dekomprimiere;
+END PACKET ls dialog decompress;
+
diff --git a/app/gs.dialog/1.2/src/ls-DIALOG-gen b/app/gs.dialog/1.2/src/ls-DIALOG-gen
new file mode 100644
index 0000000..e085616
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-DIALOG-gen
@@ -0,0 +1,34 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-DIALOG **
+ ** GENERATORPROGRAMM **
+ ** Version 1.2 **
+ ** **
+ ** (Stand: 04.11.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+LET mm taskname = "ls-MENUKARTEN",{} datei 1 = "ls-DIALOG 1",{} datei 2 = "ls-DIALOG 2",{} datei 3 = "ls-DIALOG 3",{} datei 4 = "ls-DIALOG 4",{} datei 5 = "ls-DIALOG 5",{} datei 6 = "ls-DIALOG 6",{} datei 7 = "ls-DIALOG 7",{} menukarte = "ls-MENUKARTE:Archiv";{}PROC stelle existenz des mm sicher:{} cursor (1, 5); out (""4"");{} IF NOT exists (task (mm taskname)){} THEN errorstop ("Unbedingt erst den 'MENUKARTEN-MANAGER' generieren!");{} FI{}
+END PROC stelle existenz des mm sicher;{}PROC vom archiv (TEXT CONST datei):{} cursor (1,5); out (""4"");{} out (" """); out (datei); putline (""" wird geholt.");{} fetch (datei, archive){}END PROC vom archiv;{}PROC hole (TEXT CONST datei):{} IF NOT exists (datei) THEN vom archiv (datei) FI{}END PROC hole;{}PROC in (TEXT CONST datei):{} hole (datei);{} cursor (1, 5); out (""4"");{} out (" """); out (datei); out (""" wird übersetzt: ");{} insert (datei);{} forget (datei, quiet);{}END PROC in;{}
+PROC schicke (TEXT CONST datei):{} cursor (1, 5); out (""4"");{} out (" """); out(datei);{} out (""" wird zum MENUKARTEN-MANAGER geschickt!");{} command dialogue (FALSE);{} save (datei, task (mm taskname));{} command dialogue (TRUE);{} forget (datei, quiet){}END PROC schicke;{}INT VAR size, used;{}BOOL VAR einzeln;{}storage (size, used);{}einzeln := size - used < 500;{}forget ("ls-DIALOG/gen", quiet);{}wirf kopfzeile aus;{}stelle existenz des mm sicher;{}hole die dateien;{}insertiere die dateien;{}
+mache global manager aus der task.{}wirf kopfzeile aus:{} page;{} putline (" "15"ls-DIALOG - Automatische Generierung "14"").{}hole die dateien:{} IF NOT exists (datei 1) COR NOT exists (datei 2){} COR NOT exists (datei 3) COR NOT exists (datei 4){} COR NOT exists (datei 5) COR NOT exists (datei 6){} COR NOT exists (datei 7) COR NOT exists (menukarte){} THEN hole dateien vom archiv{} FI.{}hole dateien vom archiv:{} cursor (1,3);{} IF yes ("Ist das Archiv angemeldet und die 'ls-DIALOG' - Diskette eingelegt"){}
+ THEN lese ein{} ELSE line (2);{} errorstop ("Ohne die Diskette kann ich das System nicht generieren!"){} FI.{}lese ein:{} cursor (1, 3); out (""4"");{} out (" "15"Bitte die Diskette eingelegt lassen! "14"");{} IF NOT einzeln{} THEN hole (datei 1);{} hole (datei 2);{} hole (datei 3);{} hole (datei 4);{} hole (datei 5);{} hole (datei 6);{} hole (datei 7);{} hole (menukarte);{} cursor (1, 3); out(""4"");{}
+ out (" "15"Die Diskette wird nicht mehr benötigt! "14"");{} release (archive){} FI.{}insertiere die dateien:{} check off;{} in (datei 1);{} in (datei 2);{} in (datei 3);{} in (datei 4);{} in (datei 5);{} in (datei 6);{} in (datei 7);{} schicke (menukarte);{} IF einzeln THEN release (archive) FI;{} check on.{}mache global manager aus der task:{} global manager.{}
+
+
+
+
diff --git a/app/gs.dialog/1.2/src/ls-MENUKARTE:Archiv b/app/gs.dialog/1.2/src/ls-MENUKARTE:Archiv
new file mode 100644
index 0000000..c859d22
--- /dev/null
+++ b/app/gs.dialog/1.2/src/ls-MENUKARTE:Archiv
Binary files differ