summaryrefslogtreecommitdiff
path: root/app/gs.menugenerator
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.menugenerator
downloadeumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.gz
eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.bz2
eumel-src-04e68443040c7abad84d66477e98f93bed701760.zip
Initial import
Diffstat (limited to 'app/gs.menugenerator')
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.1100
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.287
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.3155
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.4424
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.5975
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.6235
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.7367
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.81676
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.impressum88
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.index258
-rw-r--r--app/gs.menugenerator/1.0/doc/menu-generator handbuch.inhalt72
-rw-r--r--app/gs.menugenerator/1.0/source-disk1
-rw-r--r--app/gs.menugenerator/1.0/src/Generatordatei: Archivmenu323
-rw-r--r--app/gs.menugenerator/1.0/src/fonttab.ls-Menu-Generatorbin0 -> 2560 bytes
-rw-r--r--app/gs.menugenerator/1.0/src/ls-MENUBASISTEXTEbin0 -> 17408 bytes
-rw-r--r--app/gs.menugenerator/1.0/src/ls-Menu-Generator 147
-rw-r--r--app/gs.menugenerator/1.0/src/ls-Menu-Generator 272
-rw-r--r--app/gs.menugenerator/1.0/src/ls-Menu-Generator-gen30
18 files changed, 4910 insertions, 0 deletions
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.1 b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.1
new file mode 100644
index 0000000..c190c0a
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.1
@@ -0,0 +1,100 @@
+#type ("prop.lq")##limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (3)#
+#headodd#
+#center#ls-Menu-Generator#right#%
+
+#end#
+#headeven#
+%#center#ls-Menu-Generator
+
+#end#
+#type ("prop.breit.lq")#
+#center#1
+
+#center#Was
+#center#kann
+#center#ls-Menu-Generator
+#type ("prop.lq")#
+
+
+ In diesem Kapitel wollen wir Ihnen erläutern, was Sie
+mit #on("b")#ls-Menu-Generator#off("b")# anfangen können. Wir gehen davon
+aus, daß Ihnen die Benutzerschnittstelle #on("b")#ls-DIALOG#off("b")# be­
+kannt ist und daß Sie bereits mit einigen Anwendungen
+unter #on("b")#ls-DIALOG#off("b")# gearbeitet haben. Weiterhin setzen wir
+voraus, daß Sie Programmierkenntnisse (EUMEL/ELAN) be­
+sitzen.
+ Bisher war es Ihnen nur möglich, von uns fertigge­
+stellte Programme unter der komfortablen Benutzer­
+schnittstelle #on("b")#ls-DIALOG#off("b")# laufen zu lassen. Sie haben aber
+sicher erkannt, welche Vorteile es bietet, Programme un­
+ter einer einheitlichen Benutzeroberfläche zu realisie­
+ren:
+ Zunächst profitiert natürlich der Anwender von der
+einfachen und immer einheitlichen Bedienung solcher
+Programme. Der Aufwand, sich in neue Programmsysteme
+einzuarbeiten, wird erheblich reduziert. #on("b")#ls-DIALOG#off("b")# wurde
+ja auch speziell für den Unterricht konzipiert und ent­
+wickelt: Ziel war es, Computerlaien einen Zugang zum
+Computer zu verschaffen und den Umgang mit dem Compu­
+ter zu vereinfachen.
+
+ #on("b")#ls-Menu-Generator#off("b")#ist nun aber kein weiteres Anwen­
+dungsprogramm! #on("b")#ls-Menu-Generator#off("b")# ist stattdessen für
+den Programmierer gedacht, der selbst unter #on("b")#ls-DIALOG#off("b")#
+Anwendungssysteme entwickeln möchte. #on("u")#Wir erhoffen uns
+durch die Bereitstellung dieses Werkzeuges, daß sich auch
+andere engagierte Personen daran beteiligen, qualitativ
+hochwertige Software insbesondere für den Schulbereich
+unter #on("b")#ls-DIALOG#off("b")# zu entwickeln.#off("u")#
+
+ Mit #on("b")#ls-Menu-Generator#off("b")# haben Sie zwei Komponenten
+erworben: Das Generator-Programm zur Erzeugung von
+Menukarten und eine umfangreichen Dokumentation. Dabei
+enthält die Dokumentation nicht nur Informationen dar­
+über, wie Sie mit dem Generator-Programm arbeiten kön­
+nen - das natürlich auch. Darüberhinaus werden Ihnen
+alle Möglichkeiten, die #on("b")#ls-DIALOG#off("b")# zur Programmgestal­
+tung bietet, ausführlich erläutert - das macht den we­
+sentlichen Teil der Dokumentation aus!
+
+ #on("b")#ls-DIALOG#off("b")# ist eigentlich ein "Baukastensystem", auf
+das andere Programme zugreifen können. Sie wissen si­
+cherlich, wieviel Arbeit bei jedem Programm aufzuwen­
+den ist, um die Benutzerschnittstelle zu realisieren. Die
+Gestaltung und Pflege der Benutzerschnittstelle kann
+bis zu 50% der Gesamtarbeit an einem Programm ausmachen.
+#on("b")#ls-Menu-Generator#off("b")# soll Ihnen helfen, diese Arbeit zu
+verringern.
+
+ Alle Informationen, die ein Menu betreffen, sind in
+der sogenannten 'Menukarte' abgelegt. Wird nun ein Pro­
+gramm unter #on("b")#ls-DIALOG#off("b")# aufgerufen, so wird die entspre­
+chende Menukarte aus der "Menukarten - Sammeltask" ('ls-
+MENUKARTEN') geholt und an das System angekoppelt. An­
+schließend wird dem Anwender das Menu auf dem Bildschirm
+angeboten.
+ Das Erstellen solcher Menukarten ist mit dem Genera­
+torprogramm sehr einfach - es wird in Kapitel 4 beschrie­
+ben. Allerdings sollten Sie nicht die Arbeit unterschät­
+zen, die Sie für eine sorgfältig erstellte, mit allen In­
+formationtexten gefüllte Menukarte aufwenden müssen!
+
+ Bei den meisten Programmmen reicht aber ein einfaches
+Menu nicht aus. Bei vielen Verarbeitungsfunktionen ist
+es notwendig, mit dem Anwender einen Dialog zu führen:
+z.B. muß ein Dateiname erfragt, eine Information ausgege­
+ben und bestätigt, eine Auswahl oder eine Entscheidung
+getroffen werden. Alle Möglichkeiten, die #on("b")#ls-DIALOG#off("b")# dazu
+bereitstellt, sind in Kapitel 5 dokumentiert.
+
+ Einige Reihe von Verarbeitungsfunktionen treten in
+nahezu jeder Anwendung auf (Datei- und Archivhandling).
+Hier stellt #on("b")#ls-DIALOG#off("b")# schon vorgefertigte Module zur
+Verfügung. In Kapitel 6 zeigen wir Ihnen, wie Sie auf die­
+se Module zugreifen und sie in Ihr Programmsystem ein­
+binden können. In Kapitel 7 zeigen wir Ihnen außerdem,
+wie Sie eigene Fenster definieren können und welche Ope­
+rationen auf diesen Fenstern zur Verfügung stehen.
+
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.2 b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.2
new file mode 100644
index 0000000..696ed28
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.2
@@ -0,0 +1,87 @@
+#type ("prop.lq")##limit (11.0)##pagelength (16.5)##block#
+#start (2.0,0.0)#
+#page (6)#
+#headodd#
+#center#ls-Menu-Generator#right#%
+
+#end#
+#headeven#
+%#center#ls-Menu-Generator
+
+#end#
+#type ("prop.breit.lq")#
+#center#2
+
+#center#Installation
+#center#von
+#center#ls-Menu-Generator
+#type ("prop.lq")#
+
+
+ Bevor Sie #on("b")#ls-Menu-Generator#off("b")# auf Ihrem System benut­
+zen können, müssen Sie das Programm zunächst installie­
+ren. Wenn #on("b")#ls-Menu-Generator#off("b")# auf Ihrem System schon zur
+Verfügung steht, können Sie dieses Kapitel ruhig über­
+springen.
+
+
+2.1 Voraussetzungen
+
+ Um #on("b")#ls-Menu-Generator#off("b")# auf Ihrem Computer betreiben
+zu können, muß das EUMEL-Betriebssystem (Multi-User-
+Version) installiert und das Programmpaket #on("b")#ls-DIALOG#off("b")#
+(Version 1.1) bereits insertiert sein.
+
+
+2.2 Lieferumfang
+
+ #on("b")#ls-Menu-Generator#off("b")# wird auf einer Diskette geliefert,
+die alle notwendigen Programme enthält. Folgende Dateien
+sollten sich auf der Diskette befinden:
+
+ "fonttab.ls-Menu-Generator"
+ "ls-MENUBASISTEXTE"
+ "Generatordatei: Archivmenu"
+ "ls-Menu-Generator 1"
+ "ls-Menu-Generator 2"
+ "ls-Menu-Generator/gen"
+
+ Eventuell können noch weitere Namen auf der Diskette
+vorhanden sein.
+
+
+2.3 Installation
+
+Die Installation erfolgt in #on("u")#zwei Schritten#off("u")#:
+
+ #on("u")#Zunächst#off("u")# muß die mitgelieferte Fonttabelle
+('fonttab.ls-Menu-Generator') in die Task 'configurator'
+geholt werden. Da Sie aus dem 'UR-Zweig' des EUMEL-
+Systems keinen schreibenden Zugriff auf die Task
+'configurator' haben, müssen Sie die Task 'configurator'
+an Ihr Terminal koppeln und die Datei 'fonttab.ls-Menu-
+Generator' von der Diskette in die Task kopieren.
+ #on("u")#Anschließend#off("u")# kann #on("b")#ls-Menu-Generator#off("b")# in einer Task
+installiert werden, in der bereits das Programm #on("b")#ls-DIALOG#off("b")#
+zur Verfügung steht. Richten Sie also eine Task als Sohn
+der Task ein, in der auf Ihrem Computer bereits #on("b")#ls-DIALOG#off("b")#
+installiert ist. Legen Sie dann die Archivdiskette ein,
+auf der sich #on("b")#ls-Menu-Generator#off("b")# befindet und geben Sie
+die folgenden Kommandos:
+
+ archive("ls-Menu-Generator") <RETURN>
+
+ fetch("ls-Menu-Generator/gen",archive) <RETURN>
+
+ run <RETURN>
+
+ 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-Ein­
+gangsbildschirm erscheint. Die Task, in der die Generie­
+rung stattfindet, wird automatisch zur Managertask, das
+heißt, daß Söhne von ihr eingerichtet werden können.
+
+
+
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.3 b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.3
new file mode 100644
index 0000000..e982988
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.3
@@ -0,0 +1,155 @@
+#block##pageblock#
+#pagenr("%",1)##setcount(1)##count per page#
+#headeven#
+gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#headodd#
+#right#gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#bottomeven#
+#center#____________________________________________________________
+3 - % #right#ERGOS
+#end#
+#bottomodd#
+#center#____________________________________________________________
+ERGOS #right# 3 - %
+#end#
+#ib#3 Die Arbeitsweise von gs-DIALOG#ie#
+
+
+In diesem Kapitel soll die grundsätzliche Arbeitsweise von gs-DIALOG erläutert
+werden. Sie erfahren, wie das Menusystem aufgebaut ist, wie man Menukarten an­
+koppelt und Menus zur Ausführung bringt. Ebenso wird erläutert, wie eine Menukarte
+aufgebaut ist.
+Wenn Sie die hier beschriebenen Vorgänge auf ihrem System nachvollziehen wollen,
+so muß in Ihrer Task das Programm 'gs-DIALOG' zur Verfügung stehen!
+
+
+#ib#3.1 Ankoppeln einer Menukarte - Ausführen eines Menus#ie#
+
+Vereinfacht gesagt ist eine Menukarte ein Datenraum, in dem alle Informationen, die
+zum Menu (zu den Menus) gehören, abgelegt sind. Der genaue Aufbau einer solchen
+Menukarte wird in Kapitel 3.2 beschrieben.
+Alle Menukarten, die auf einem System zur Verfügung stehen, werden in einer zentra­
+len Task ('gs-MENUKARTEN') bereitgehalten. Die Menukarten können von hier
+angefordert werden.
+Lassen Sie sich in Ihrem System eine Übersicht der vorhandenen Menukarten geben
+(list (/"gs-MENUKARTEN") <RETURN> ). Darauf wird Ihnen gegebenenfalls folgen­
+de Übersicht angeboten:
+
+ 01.09.87 "gs-MENUKARTE:Archiv"
+ 01.09.87 "gs-MENUKARTE:Herbert und Robbi"
+ 01.09.87 "gs-MENUKARTE:MP-BAP"
+ ...
+
+Zumindest die erste Menukarte müßte - sofern die gs-DIALOG-Basissoftware instal­
+liert ist - auf Ihrem System vorhanden sein. Die beiden anderen Menukarten sind
+natürlich nur dann vorhanden, wenn Sie die Programme 'gs-Herbert und Robbi'
+und 'gs-MP BAP' installiert haben.
+
+In einer weiteren Task (z.B. 'DIALOG') sind die Programme installiert, die es ermög­
+lichen, diese Menukarten zu handhaben. Alle Sohntasks dieser Task "erben" natür­
+lich diese Fähigkeiten. Von einer solchen Task aus kann nun eine Menukarte ange­
+fordert und ein darin enthaltenes Menu zur Ausführung gebracht werden. Das haben
+Sie sicher schon oft gemacht, z.B. wenn Sie den Befehl 'archiv' gegeben haben. Was
+hinter diesem Befehl steckt, sollen Sie sich jetzt klar machen:
+
+Wenn Sie den Befehl 'archiv' geben, wird zunächst die Menukarte
+'gs-MENUKARTE:Archiv' aus der Task 'gs-MENUKARTEN' angefordert und in Ihre
+Task kopiert. Davon merken Sie normalerweise nichts, denn nachdem die Ankopp­
+lung des Datenraumes (als unbenannter Datenraum) erfolgt ist, wird die Daten­
+raumkopie gelöscht; daher taucht der Name auch nie in Ihrer Dateiliste auf. Intern
+vermerkt das System, welche Menukarte aktuell angekoppelt ist. Soll wiederholt
+dieselbe Menukarte angekoppelt werden, so erübrigt sich das Kopieren aus der zen­
+tralen Bereitstellungstask.
+
+Nach dem Ankoppeln der Menukarte können Sie auf die in der Menukarte enthalte­
+nen Informationen zugreifen. Da in einer Menukarte mehrere Menus enthalten sein
+können, müssen Sie dem System noch mitteilen, welches Menu aktiviert werden soll.
+In der Menukarte 'gs-MENUKARTE:Archiv' ist nur ein Menu enthalten, das den
+Namen 'ARCHIV' hat (der Name des Menus erscheint übrigens bei der Präsentation
+immer oben links in der Kopfzeile).
+
+Sie sollen jetzt, ohne den Befehl 'archiv' zu verwenden, das Menu zur Ausführung
+bringen. Geben Sie dazu die folgenden Kommandos in der 'gib kommando:'- Ebene:
+
+ #ib#install menu#ie# ("gs-MENUKARTE:Archiv");
+ #ib#handle menu#ie# ("ARCHIV")
+
+Mit dem ersten Befehl koppeln Sie die genannte Menukarte an, mit dem zweiten
+Befehl bringen Sie das darin enthaltene Menu 'ARCHIV' zur Ausführung.
+Allerdings stellen Sie sicher auch einen Unterschied zur Ausführung des Befehls
+'archiv' fest, denn dort erscheint nicht erst unser "Software - Emblem" auf dem
+Bildschirm, sondern direkt das Menu.
+
+Wenn Ihnen eines der Programme 'gs-Herbert und Robbi' oder 'gs-MP BAP'
+bekannt ist, haben Sie unser Emblem aber sicher schon gesehen - wir verwenden es
+immer, um unsere Softwareprodukte kenntlich zu machen. Da man aber das Archiv­
+programm sehr häufig benötigt und es dann nur störend wirkt kann die Ausgabe
+unterdrückt werden. Daher gibt es den Befehl 'install menu' in zwei Versionen.
+Versuchen Sie es gleich einmal:
+
+ install menu ("gs-MENUKARTE:Archiv", FALSE);
+ handle menu ("ARCHIV")
+
+Die Präsentation des Menus erfolgt gleich aus zwei Gründen schneller als beim ersten
+Mal: einerseits wurde auf die Ausgabe unseres Software - Emblems verzichtet, ande­
+rerseits brauchte die Menukarte nicht erneut aus der Task 'gs-MENUKARTEN' kopiert
+zu werden, da sie ja schon angekoppelt war.
+Damit sind Sie nun in der Lage, Menukarten anzukoppeln und Menus zur Ausfüh­
+rung zu bringen.
+
+
+#ib#3.2 Aufbau/Inhalt einer Menukarte#ie#
+
+Eine Menukarte ist eine komplexe Datenstruktur, die bis zu 6 vollständige Menus
+aufnehmen kann. Weiterhin sind eine Reihe von Texten in jeder Menukarte abgelegt,
+auf die gs-DIALOG zurückgreift. Darüberhinaus kann der Anwendungsprogram­
+mierer bis zu 2000 Texte in die Menukarte auslagern, um so beim Insertieren seiner
+Programme den Umfang an Paketdaten geringer zu halten.
+Auf den ersten Blick scheint es wenig Sinn zu machen, mehrere Menus in einer
+Menukarte zu verwalten. Nehmen wir aber als Beispiel das Programmsystem
+gs-Herbert und Robbi. Hier ist ein Programm in zwei unterschiedlichen Ausprä­
+gungen zu behandeln. Sowohl das Hamster- als auch das Robotermenu befinden sich
+in einer Menukarte. Bei einem Wechsel zwischen den Modellen braucht also keine
+neue Menukarte angefordert, sondern nur ein neues Menu aus der aktuellen Menu­
+karte aktiviert zu werden.
+Zum anderen ist gs-DIALOG schon auf umfangreichere Programmsysteme vorberei­
+tet: Es ist nämlich möglich, von einem Menu aus ein weiteres Menu aus der aktuellen
+Menukarte zu aktivieren. Auf dem Bildschirm werden die beiden Menus dann ge­
+schachtelt (das zuletzt aktivierte vor dem aufrufenden Menu) angezeigt. Nach Verlas­
+sen der zweiten Menuebene gelangt der Benutzer automatisch in das Ausgangsmenu
+zurück.
+Zwar ist es nicht möglich, mehr als zwei Menus gleichzeitig zu aktivieren (geschach­
+telt auf dem Bildschirm darzustellen), doch können an verschiedenen Stellen des
+Ausgangsmenus ja unterschiedliche Menus aus der aktuellen Menukarte aktiviert
+werden.
+
+Jedes Menu in der Menukarte wird durch einen Namen gekennzeichnet. Dieser Name
+erscheint in der Kopfzeile oben links. Über diesen Namen kann das Menu aktiviert
+werden.
+Ein Menu besteht aus den sogenannten 'Oberbegriffen', die in der Kopfzeile angezeigt
+werden. In einer Kopfzeile können bis zu 10 Oberbegriffe verwaltet werden. Da zu
+jedem Oberbegriff bis zu 15 Verarbeitungsfunktionen (in den Pull-Down-Menus)
+verwaltet werden können, ist es möglich, in einem Menu bis zu 150 Verarbeitungs­
+funktionen abzulegen. Nutzt man alle 6 Menus einer Menukarte, so können maximal
+bis zu 900 Verarbeitungsfunktionen in einer Menukarte verwaltet werden.
+
+Eine Verarbeitungsfunktion besteht aus der/dem
+
+ - 'Ein-Zeichen-Kennung' - die angibt, durch welche Taste die Verarbei­
+ tungsfunktion ggf. aktiviert werden kann;
+ - 'Menupunktbezeichnung' - die im Pull-Down-Menu als Name für die
+ Verarbeitungsfunktion erscheint;
+ - 'Funktionsaufruf' - dem Namen der Prozedur, die bei der Aktivie­
+ rung des Menupunktes zur Ausführung ge­
+ bracht wird;
+ - 'Informationstext' - der zur aktuellen Verarbeitungsfunktion durch
+ Tippen der <?>-Taste abgerufen werden
+ kann.
+
+
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.4 b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.4
new file mode 100644
index 0000000..97e7491
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.4
@@ -0,0 +1,424 @@
+#block##pageblock#
+#pagenr("%",1)##setcount(1)##count per page#
+#headeven#
+gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#headodd#
+#right#gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#bottomeven#
+#center#____________________________________________________________
+4 - % #right#ERGOS
+#end#
+#bottomodd#
+#center#____________________________________________________________
+ERGOS #right# 4 - %
+#end#
+#ib#4 Erstellen einer neuen Menukarte#ie#
+
+
+Aus Kapitel 3 wissen Sie, wie man eine fertige Menukarte ankoppelt und wie man ein
+darin enthaltenes Menu zur Ausführung bringen kann. Außerdem wissen Sie bereits,
+welche Informationen in einer Menukarte untergebracht werden können. In diesem
+Kapitel nun wollen wir Ihnen zeigen, wie Sie eine eigene Menukarte entwickeln
+können.
+Damit Sie sich die Abläufe besser vorstellen können, werden wir die Vorgänge an
+einem Beispiel aufzeigen: Wir wollen eine 'kleine Textverarbeitung' schaffen, deren
+Verarbeitungsfunktionen über ein Menu angeboten werden.
+Es sei aber darauf hingewiesen, daß es nicht darum geht, eine voll funktionsfähige
+Textverarbeitung auszuarbeiten - vielmehr sollen die Erstellung der Menukarte und
+das Nutzen der durch gs-DIALOG bereitgestellten Werkzeuge exemplarisch auf
+gezeigt werden.
+
+
+#ib#4.1  Eintragen der Menupunkte#ie#
+
+Unsere Menukarte soll den Namen 'Kleine Textverarbeitung' erhalten, das darin
+enthaltene Menu den Namen 'SCRIPT'. Unter dem Oberbegriff 'Bearbeiten' sollen 5
+Verarbeitungsfunktionen angeboten werden. Insgesamt soll unser neues Menu fol
+genden Aufbau haben:
+
+SCRIPT: Bearbeiten
+
+ n Neu erstellen
+ a Ansehen/Ändern
+ ----------------
+ v Verzeichnis
+ ----------------
+ z Zeilenformtierung
+ s Seitenformatierung
+
+
+
+Zur Erzeugung der zugehörigen Menukarte schreiben Sie folgendes Pro­
+gramm in eine Datei:
+
+
+oeffne menukarte ("Kleine Textverarbeitung");
+oeffne menu ("SCRIPT");
+
+oberbegriff ("Bearbeiten");
+
+menufunktion ("n", "Neu erstellen", "neue datei editieren","");
+menufunktion ("a", "Ansehen/Ändern", "alte datei editieren","");
+trennlinie;
+menufunktion ("v", "Verzeichnis", "verzeichnis ausgeben","");
+trennlinie;
+menufunktion ("z", "Zeilenformatierung", "zeilen formatieren","");
+menufunktion ("s", "Seitenformatierung", "seiten formatieren","");
+
+schliesse menu;
+schliesse menukarte;
+
+
+Bevor wir Ihnen die Einzelheiten erklären, sollten Sie zuerst einmal Ihr neu erstelltes
+Menu ausprobieren. Verlassen Sie dazu die Datei und geben Sie das Kommando 'run'.
+Nachdem das von Ihnen geschriebene Programm übersetzt worden ist, meldet sich
+der Menu-Generator.
+Die an Sie gestellte Frage 'Sollen auch Anwendungs texte in die Menukarte aufge­
+nommen werden (j/n)?' beantworten Sie einfach mit n(ein). Auf dem Bildschirm
+wird angezeigt, wie die Menukarte erstellt wird. Auf das Ende der Menukartengenerie­
+rung wird hingewiesen. Wenn Sie sich jetzt die Dateiliste Ihrer Task anzeigen lassen,
+taucht dort eine Datei mit Namen 'gs-MENUKARTE:Kleine Textverarbeitung' auf - das
+ist die neue Menukarte.
+Sie möchten sicher gleich ausprobieren, ob das Menu Ihren Vorstellungen entspricht.
+Geben Sie dazu das Kommando 'testinstallation ("gs-MENUKARTE:Kleine Textver­
+arbeitung")'. Bitte geben Sie den Text genauso ein wie hier angegeben!
+Nach kurzer Zeit erscheint der Hinweis 'Installation abgeschlossen!'. Geben Sie nun
+den Befehl 'handle menu ("SCRIPT")'; hierdurch aktivieren Sie das von Ihnen neu
+erstellte Menu - es erscheint auf dem Bildschirm.
+
+Über den Befehl '#ib#testinstallation#ie#' haben Sie sich sicher gewundert. Ihnen ist ja
+schon der Befehl '#ib#install menu#ie#' bekannt. Dieser Befehl aber kann hier nicht ein­
+fach angewendet werden - er ist für den (späteren) "regulären Betrieb" vorgesehen.
+Bedenken Sie bitte zweierlei: Die Menukarte befindet sich nur in Ihrer Task, 'install
+menu' fordert die Menukarte aber aus der Task 'gs-MENU KARTEN' an. Ist eine
+Menukarte schon angekoppelt gewesen, so wird nicht erneut angekoppelt, sondern
+auf die angekoppelte Menukarte zurückgegriffen. Dies alles können wir bei der
+Menukartenerstellung nicht gebrauchen!
+Der Befehl 'testinstallation' sendet automatisch die Menukarte zur Task
+'gs-MENUKARTEN' und kennzeichnet Sie noch durch den eigenen Tasknamen (da
+durch können sich beim Multiuserbetrieb unterschiedliche Anwender mit gleichem
+Menukartennamen nicht gegenseitig stören). Die Menukarte wird anschließend in
+jedem Falle 'frisch' angekoppelt, so daß Sie nach dem Befehl immer die aktuelle
+Menukarte angekoppelt haben. Außerdem bleibt die Menukarte in Ihrer Task erhal­
+ten!
+
+Doch nun zur Erläuterung des oben notierten Programms:
+
+Ein Programm zur Erstellung einer Menukarte muß immer mit dem Befehl '#ib#oeffne
+menukarte#ie#' beginnen und mit dem Befehl '#ib#schliesse menukarte#ie#' abgeschlos­
+sen werden. Der Befehl 'oeffne menukarte' hat einen Parameter (TEXT CONST) -
+hierdurch wird festgelegt, welchen Namen die Menukarte haben soll. Durch das
+Kommando 'oeffne menu karte ("Menu 1")' entsteht also die Menukarte 'gs-MENU
+KARTE:Menu 1".
+In die Menukarte können jetzt bis zu 6 Menus eingetragen werden. Jeder Eintrag
+eines Menus beginnt mit dem Befehl '#ib#oeffne menu#ie#' und endet mit dem Befehl
+'#ib#schliesse menu#ie#'. Der Befehl 'oeffne menu' hat hier einen Parameter (TEXT
+CONST) - hierdurch wird festgelegt, welchen Namen das Menu erhalten soll. Unter
+diesem Namen kann später das Menu angesprochen werden (z.B. 'handle menu
+("SCRIPT")'.
+
+Den Befehl 'oeffne menu' gibt es noch in zwei weiteren Ausführungen:
+Mit drei Textparametern - neben dem Namen des Menus können hier noch zwei
+Prozedurnamen angegeben werden. Diese Prozeduren werden beim Einstieg in das
+Menu bzw. beim Verlassen des Menus aufgerufen. Hiervon wird z.B. Gebrauch ge­
+macht, wenn das Archiv-Menu in eine Menukarte integriert ist: Wenn das Menu
+verlassen wird, soll sichergestellt sein, daß das Archiv automatisch freigege ben wird.
+Mehr hierüber erfahren Sie im Kapitel 6.1, in dem aufgezeigt wird, wie das Archiv-
+Menu in andere Menus eingebunden wird.
+Mit sechs Textparametern - neben den eben genannten drei Parametern können noch
+drei Texte übergeben werden. Diese Texte werden beim Aufruf des Menus unten
+rechts auf dem Bildschirm ausgegeben. Bei unseren Software-Produkten (z.B.
+'gs-Herbert und Robbi') machen wir davon Gebrauch, um Hinweise auf das
+Produkt, die Versionsnummer etc. zu geben. Die Hinweise bleiben nur kurz auf dem
+Bildschirm und verschwinden nach kurzer Zeit automatisch, oder wenn Sie irgen
+deine Taste tippen. Bei der Notation der Texte müssen Sie sich allerdings an einige
+Regeln halten (sehen Sie dazu Kapitel 5.12).
+
+Zwischen den Befehlen 'oeffne menu' und 'schliesse menu' werden nun die Oberbe­
+griffe (Kopfzeile) und die zugehörigen Verarbeitungsfunktionen eingetragen. Dabei
+müssen Sie sich genau an folgende Abfolge halten:
+Zuerst wird jeweils der Oberbegriff genannt, der in der Kopfzeile auftauchen soll.
+Direkt unter dem jeweiligen Oberbegriff werden die Menufunktionen eingetragen, die
+im zugehörigen 'Pull-Down-Menu' als Verarbeitungsfunktionen angeboten werden
+sollen. Die einzelnen Oberbegriffe mit Ihren zugehörigen Verarbeitungsfunktionen
+werden blockweise hintereinander notiert. Dadurch ergibt sich die folgende Struktur:
+
+
+oeffne menu ("Menuname");
+
+oberbegriff ("Oberbegriff 1");
+
+menufunktion ("1", "Verarbeitungsfunktion 1", "", "");
+menufunktion ("2", "Verarbeitungsfunktion 2", "", "");
+...
+
+oberbegriff ("Oberbegriff 2");
+
+menufunktion ("1", "Verarbeitungsfunktion 1", "", "");
+menufunktion ("2", "Verarbeitungsfunktion 2", "", "");
+...
+
+oberbegriff ("Oberbegriff 3");
+
+menufunktion ("1", "Verarbeitungsfunktion 1", "", "");
+menufunktion ("2", "Verarbeitungsfunktion 2", "", "");
+...
+
+... schliesse menu;
+
+
+Die Oberbegriffe werden in die Kopfzeile von links nach rechts eingetragen. Maximal
+können 10 Oberbegriffe eingetragen werden. Wählen Sie die Bezeichnungen nicht zu
+lang, denn sie müssen alle neben dem Namen des Menus in der Kopfzeile Platz
+finden (Ansonsten erhalten Sie hierauf bei der Menukartengenerierung einen Hin­
+weis, die Generierung wird abgebrochen!)!
+
+Den Befehl '#ib#oberbegriff#ie#' gibt es in zwei Versionen:
+In der hier aufgezeigten Version mit einem (TEXT-) Parameter: Hierdurch wird der
+Oberbegriff in der Kopfzeile festgelegt. In der zweiten Version hat der Befehl drei
+(TEXT-)Parameter: Durch den ersten wird - wie eben - die Kopfzeilenbezeichnung
+festgelegt. Daneben können noch zwei Prozedurnamen angegeben werden. Die
+Prozedur mit dem erstgenannten Namen wird beim Einstieg (vor dem "Ausklappen"
+des Pull-Down-Menus) ausgeführt, die Prozedur mit dem zweitgenannten Namen vor
+dem Ausstieg ("Einklappen"). Beim 'Archiv-Pull-Down-Menu' machen wir hiervon
+Gebrauch. Beim Einstieg wird dafür gesorgt, daß nur bestimmte Verarbeitungsfunk­
+tionen aktivierbar sind; beim Ausstieg wird sichergestellt, daß das Archivlaufwerk
+automatisch freigegeben wird.
+
+Unter einem Oberbegriff können Sie bis zu 15 Verarbeitungsfunktionen in ein Pull-
+Down-Menu eintragen. Die Verarbeitungsfunktionen können Sie optisch vonein ander
+trennen. Dafür steht der Befehl '#ib#trennlinie#ie#' zur Verfügung. Aber beachten Sie, er
+belegt den gleichen Platz wie eine Verarbeitungsfunktion.
+
+Zum Eintragen einer Verarbeitungsfunktion steht der Befehl '#ib#menufunktion#ie#' zur
+Verfügung. Der Befehl besitzt vier (TEXT-)Parameter. Die ersten beiden Parameter
+werden auch auf dem Bildschirm ausgegeben.
+Der erste Parameter legt fest, über welche Taste diese Verarbeitungsfunktion direkt
+zur Ausführung gebracht werden kann. Wenn eine Eintragung erfolgt, muß diese aus
+genau einem Zeichen bestehen. Innerhalb eines Pull-Down-Menus muß dieses
+Zeichen eindeutig sein, d.h. es darf nur einmal verwendet werden. Ansonsten er­
+scheint bei der Menugenerierung eine Fehlermeldung.
+Der zweite Parameter ist die Bezeichnung der Verarbeitungsfunktion, die dem Be­
+nutzer im Pull-Down-Menu angeboten wird. Wählen Sie die Bezeichnung bitte immer
+prägnant und möglichst mit dem Buchstaben beginnend, den Sie auch als ersten
+Parameter angegeben haben! Der Länge dieser Bezeichnung ist nur durch die Bild­
+schirmbreite (nicht mehr als 60 Zeichen) begrenzt, allerdings wählt gs-DIALOG die
+Breite des Pull-Down-Menus nach der längsten Bezeichnung, die im jeweiligen Pull-
+Down-Menu auftritt. Wenn die Bezeichnungen ganz unterschiedlich lang sind, sieht
+das nicht sonderlich gut aus, aber probieren Sie es ruhig einmal aus und entscheiden
+Sie selbst.
+
+Der dritte Parameter ist der Name der Prozedur, die bei der Aktivierung der Verarbei­
+tungsfunktion ausgewählt werden soll. Zum Zeitpunkt der Erstellung und des Testens
+des Menusystems braucht diese Prozedur noch nicht zu existieren. Damit ist es
+möglich, die Menuentwicklung völlig unabhängig von der Entwicklung der Verarbei­
+tungsfunktionen zu betreiben; Sie brauchen nur die späteren Namen der aufzurufen­
+den Prozeduren festzulegen! Aktivieren Sie eine solche Verarbeitungsfunktion im
+Pull-Down-Menu, die noch nicht fertiggestellt ist, so erscheint der Hinweis 'unbe­
+kanntes Kommando' - das kann aber auch geschehen, wenn die Verarbeitungsfunk­
+tion schon existiert, Sie aber bei der Eintragung einen (Schreib-)Fehler gemacht
+haben!
+
+Der vierte Parameter ist der Text, der als sogenannter Infotext ausgegeben wird wenn
+Sie auf die entsprechende Verarbeitungsfunktion positioniert haben und hier die
+<?>-Taste tippen. In unserem Beispiel haben wir keinen Infotext eingetragen.
+Versuchen Sie im Menu jetzt die <?>-Taste zu tippen, so erscheint der Hinweis
+'Leider ist zu diesem Menupunkt kein Info-Text eingetragen!'. Für die Handhabung
+des Menus sind diese Informationstexte nicht wichtig, sie dienen ausschließlich der
+Information des Benutzers.
+Die Arbeit zur Formulierung/Abfassung dieser Texte sollten Sie nicht unterschätzen.
+Sie sollten sich bei einer ernsthaften Anwendung aber diese Arbeit machen. Gerade
+der Anfänger, der mit Ihrem Menusystem arbeitet, wird Ihnen diese Arbeit danken.
+Wie Sie diese Texte komfortabel erstellen und in die Menutafel einbinden können,
+erklären wir Ihnen im nächsten Kapitel.
+
+
+#ib#4.2 Erstellung und Einbinden von Informationstexten#ie#
+
+Bisher haben wir noch keine Informationstexte zu den Menupunkten in die Menu­
+karte eingetragen. Diese Eintragung erfolgt über den vierten Parameter des Befehls
+'menufunktion'. Möchten Sie dort nur einige wenige Worte eintragen, so kann das
+direkt geschehen. Meist aber sind die Informationen zu einem Menupunkt doch
+länger, sie erstrecken sich über mehrere Zeilen.
+Zur Übergabe des Informationstextes steht aber nur ein Textparameter zur Verfügung.
+Würde man längere Texte direkt eintragen, wäre das bei der Menukartenerstellung
+sicher sehr unübersichtlich. Zum anderen benötigt gs-DIALOG den Text schon in
+aufbereiteter Form, d.h. es müssen z.B. Zeilenenden etc. kenntlich gemacht wer den.
+Damit Sie sich nun nicht alle Regeln der Texterstellung für gs-DIALOG merken
+müssen, bietet Ihnen gs-Menu-Generator eine komfortable Möglichkeit, diese
+Informationstexte zu entwickeln. Wir wollen das an einem Beispiel verdeutlichen:
+
+Erzeugen Sie sich eine Datei mit dem Namen 'Textprobe' und schreiben Sie z.B.
+folgenden Text, der ein Informationstext zum Menupunkt 'Neu erstellen' sein könnte,
+hinein:
+
+Text neu erstellen
+
+Das System erfragt zunächst den Namen für die Datei, in die
+der neue Text geschrieben werden soll. Anschließend wird eine
+leere Datei mit dem gewünschten Namen zum Beschreiben
+angeboten.
+Das Schreiben in eine solche Datei wird durch viele Hilfen
+erleichtert. Deshalb ist es ratsam, sich nach und nach mit
+den Möglichkeiten, die der Editor bietet, vertraut zu machen.
+Die Möglichkeiten sind im EUMEL-Benutzerhandbuch ausführlich
+beschrieben.
+
+Verlassen Sie nun die Datei und geben Sie in der 'gib kommando:'-Ebene folgendes
+Kommando:
+
+ #ib#textprozedur#ie# ("Textprobe", "mein erster infotext")
+
+Auf dem Bildschirm erscheint zunächst der Hinweis 'Bitte warten ...', anschließend
+werden Sie - wie aus der Textverarbeitung (lineform) bekannt - aufgefordert, entspre­
+chende Trennungen vorzunehmen.
+Das eben eingegebene Kommando bewirkt nämlich, daß der in der Datei 'Textprobe'
+enthaltene Text für gs-DIALOG so aufbereitet wird, daß er in einer Box innerhalb des
+Menus eingeblendet werden kann. Die Zeilen werden auf die entsprechende Länge
+zugeschnitten und der Text in den Zeilen wird geblockt, soweit Sie keine Absatzmarke
+(<RETURN>) gesetzt haben.
+Der so den Regeln von gs-DIALOG entsprechend aufbereitete Text wird automatisch
+in eine Textprozedur "verpackt", die den von Ihnen als zweiten Parameter übergebe­
+nen Namen erhält. Beachten Sie deshalb bei der Festlegung des Namens, daß er mit
+einem Kleinbuchstaben beginnt und weiterhin nur Kleinbuchstaben, Ziffern und
+Leerzeichen enthält!
+Diese Textprozedur finden Sie anschließend in der Datei 'Textprobe.a'. An der En­
+dung '.a' können Sie erkennen, daß in dieser Datei ein "aufbereiteter" Text enthalten
+ist.
+Wenn Sie sich, nachdem auf dem Bildschirm der Hinweis 'Textprozedur ist erstellt!'
+erschienen ist, die Datei 'Textprobe.a' ansehen, so hat diese folgenden Inhalt:
+
+
+TEXT PROC mein erster infotext:
+" Text neu erstellen "13"" +
+" "13"" +
+" Das System erfragt zunächst den Namen für die Datei, in die der "13""+
+" neue Text geschrieben werden soll. Anschließend wird eine leere "13""+
+" Datei mit dem gewünschten Namen zum Beschreiben angeboten. "13""+
+" Das Schreiben in eine solche Datei wird durch viele Hilfen er-"13""+
+" leichtert. Deshalb ist es ratsam, sich nach und nach mit den Mög-"13""+
+" lichkeiten, die der Editor bietet, vertraut zu machen. "13"" +
+" Die Möglichkeiten sind im EUMEL-Benutzerhandbuch ausführlich be-"13""+
+" schrieben. "
+END PROC mein erster infotext;
+
+
+Kopieren Sie nun den Inhalt der Datei 'Textprobe.a' in die Datei, in die Sie das Pro­
+gramm zur Generierung Ihrer Menukarte geschrieben haben und ergänzen Sie die
+Ein tragung beim ersten Menupunkt in folgender Weise:
+
+
+TEXT PROC mein erster infotext:
+" Text neu erstellen "13"" +
+" "13"" +
+" Das System erfragt zunächst den Namen für die Datei, in die der"13""+
+" neue Text geschrieben werden soll. Anschließend wird eine leere"13""+
+" Datei mit dem gewünschten Namen zum Beschreiben angeboten. "13""+
+" Das Schreiben in eine solche Datei wird durch viele Hilfen er-"13""+
+" leichtert. Deshalb ist es ratsam, sich nach und nach mit den Mög-"13""+
+" lichkeiten, die der Editor bietet, vertraut zu machen. "13""+
+" Die Möglichkeiten sind im EUMEL-Benutzerhandbuch ausführlich be-"13""+
+" schrieben. "
+END PROC mein erster infotext;
+
+oeffne menukarte ("Kleine Textverarbeitung");
+oeffne menu ("SCRIPT");
+
+oberbegriff ("Bearbeiten");
+
+menufunktion ("n", "Neu erstellen", "neue datei editieren",
+ mein erster infotext);
+menufunktion ("a", "Ansehen/Ändern","alte datei editieren", "");
+trennlinie;
+menufunktion ("v", "Verzeichnis", "verzeichnis ausgeben", "");
+trennlinie;
+menufunktion ("z", "Zeilenformatierung", "zeilen formatieren", "");
+menufunktion ("s", "Seitenformatierung", "seiten formatieren", "");
+
+schliesse menu;
+schliesse menukarte;
+
+
+Starten Sie erneut das Programm mit 'run' und erstellen Sie dadurch eine neue
+Menukarte. Installieren Sie anschließend die neue Menukarte mit dem Kommando
+'test installation ("gs-MENUKARTE:Kleine Textverarbeitung")' und bringen Sie das
+Menu mit dem Kommando 'handle menu ("SCRIPT")' zur Ausführung. Wenn Sie jetzt
+auf dem Menu punkt 'n Neu erstellen' die <?>-Taste tippen, erscheint der von
+Ihnen eingegebene Infotext in einer Box innerhalb des Menus. Die Größe der Box
+wird automatisch durch den Text bestimmt. Die Box ist maximal 65 Zeichen breit
+und 14 Zeilen hoch.
+
+Nachdem Sie nun in der Lage sind, solche Informationstexte zu erstellen und sie in
+die Menukarte einzubinden, möchten wir Ihnen noch einige Möglichkeiten der
+"Kosmetik solcher Informationstexte" aufzeigen.
+Häufig möchte man die Überschrift eines solchen Informationstextes zentriert über
+dem Text dargestellt haben. Das läßt sich auch hier einfach bewerkstelligen: Schrei­
+ben Sie dazu als erstes Zeichen der Zeile, die zentriert werden soll, das Zeichen '%'
+und schließen Sie die Zeile mit einer Absatzmarke (<RETURN>) ab.
+Möchten Sie innerhalb des Textes eine Textpassage invers dargestellt haben, so kenn­
+zeichnen Sie den Anfang der Inversdarstellung durch das Zeichen '$' und das Ende
+der Inversdarstellung durch das Zeichen '&'. Der Text wird anschließend entspre­
+chend aufbereitet. Allerdings sollte die Textpassage nicht über Zeilengrenzen hinaus­
+gehen!
+Möchten Sie in unserem Beispiel die Überschrift zentriert und invers dargestellt
+haben, so ersetzen Sie die erste Zeile der Datei 'Textprobe' durch die Zeile: %$Text
+neu erstellen&. Wenn Sie anschließend den gesamten oben beschriebenen Vorgang
+wiederholen, erscheint die Überschift zentriert und invers dargestellt innerhalb der
+Box im Menu.
+
+
+#ib#4.3 Auslagerung von anwendungsbezogenen Texten in die
+Menukarte#ie#
+
+Wie schon in Kapitel 3.2 erwähnt, kann der Anwendungsprogrammierer bis zu 2000
+Texte aus seinen Programmen in die Menukarte auslagern, um so den Umfang an
+Paketdaten geringer zu halten, allerdings darf die Gesamtkapazität einer Menukarte
+(eines Datenraumes) dabei nicht überschritten werden.
+
+Die Texte müssen in einer Datei zeilenweise notiert sein. Sie müssen (wie TEXT-Deno­
+ter) in Anführungsstriche eingefaßt sein, allerdings dürfen die Texte länger als
+(normale) TEXT-Denoter (255 Zeichen) sein. Innerhalb der Textzeile dürfen auch die
+Ausgabecodes "4", "5", "7", "10", "13", "14", und "15" verwendet werden. Innerhalb
+der Textzeile darzustellende Anführungszeichen unterliegen den gleichen Besonder­
+heiten wie sonst auch bei TEXT-Denotern.
+Machen wir ein Beispiel! Schreiben Sie in eine Datei mit Namen 'Neue Texte' die
+folgenden Zeilen:
+
+"Dieses ist der erste eingetragene Text!"
+"Hier ist eine "15"Markierung"14" im Text!"
+"Dieses ist die letzte Zeile!"
+
+Um diese Texte in die Menukarte einzubinden, starten Sie jetzt noch einmal Ihr
+Generierungprogramm für die Menukarte. Auf die Frage 'Sollen auch Anwendungstex­
+te in die Menukarte aufgenommen werden (j/n) ?' antworten Sie jetzt allerdings mit
+j(a). Daraufhin werden Ihnen die in Ihrer Task vorhandenen Dateien zur Auswahl
+angeboten. Kreuzen Sie die Datei 'Neue Texte' an, in der ja die eben genannten Texte
+eingetragen sind.
+Bei der Menukartengenerierung werden die Texte aus der Datei in die Menukarte
+eingebunden. Sollten Sie bei Notierung der Texte in der Datei formale Fehler gemacht
+haben, so werden Sie darauf hingewiesen.
+Um nun auf die eingelagerten Texte zurückgreifen zu können, muß erst einmal die
+neue Menukarte angekoppelt werden. Wie das geht, wissen Sie ja schon ('testin stalla­
+tion').
+Mit dem Befehl '#ib#anwendungstext#ie# (INT CONST zeilennummer)' (1 <= zeilen­
+nummer <= 2000) wird Ihnen nun der Text, der in der angegebenen Zeile steht,
+geliefert. Probieren Sie es doch gleich an Ihrer Menukarte aus: 'put (anwendungs­
+text (1))', 'put (anwendungstext (2))' usw.. Die eingelagerten Texte müßten jetzt auf
+dem Bildschirm erscheinen. Geben Sie eine Zeilennummer an, die nicht belegt ist, so
+wird der Text 'Kein Text vorhanden!' geliefert.
+
+Es können natürlich auch Texte abgelegt werden, die von gs-DIALOG aus aufgegrif­
+fen werden. Zur Konvertierung von Informationstexten steht die Prozedur '#ib#text zeile#ie#
+(TEXT CONST dateiname)' zur Verfügung. Diese Prozedur arbeitet genauso wie die
+Prozedur 'textprozedur', nur wird in der Ausgabedatei ('dateiname.a') der formatierte
+Text nicht als Textprozedur, sondern als einzeiliger Text geliefert. Sie können aber
+auch für gs-DIALOG Texte "von Hand" gestalten. Dazu müssen Sie sich an die
+Regeln für die Texte für gs-DIALOG halten, die in Kapitel 5.12 erläutert sind.
+
+
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.5 b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.5
new file mode 100644
index 0000000..c002f1a
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.5
@@ -0,0 +1,975 @@
+#block##pageblock#
+#pagenr("%",1)##setcount(1)##count per page#
+#headeven#
+gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#headodd#
+#right#gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#bottomeven#
+#center#____________________________________________________________
+5 - % #right#ERGOS
+#end#
+#bottomodd#
+#center#____________________________________________________________
+ERGOS #right# 5 - %
+#end#
+#ib#5  Dialoge innerhalb des Menus#ie#
+
+
+In Kapitel 4 haben Sie erfahren, wie Sie eine eigene Menukarte entwickeln können;
+sicher haben Sie das schon ausprobiert und sich Ihr selbstgestaltetes Menu auf dem
+Bildschirm angesehen. Bislang erscheint aber noch der Hinweis 'unbekanntes Kom­
+mando', wenn Sie eine Menufunktion aktivieren - denn die Prozeduren, die Sie bei
+der Aktivierung der Menufunktion aufrufen, sind ja noch nicht fertiggestellt!
+Bei vielen Menufunktionen ist es notwendig, mit dem Benutzer noch einen Dialog zu
+führen: z.B. muß ein Dateiname erfragt, eine Information ausgegeben und bestätigt,
+eine Auswahl oder eine Entscheidung getroffen werden. In diesem Kapitel sollen
+Ihnen nun die Möglichkeiten vorgestellt werden, die Ihnen zur Verfügung stehen, um
+einen solchen Dialog mit dem Benutzer zu führen. Dieser Dialog wird innerhalb des
+Menus geführt. Alle Prozeduren, die sich auf diesen Menu-Dialog beziehen, enthalten
+deshalb den Wortbestandteil 'menu'.
+
+Hier noch einige Tips! Damit Sie Ihre Menu-Dialoge testen können, empfiehlt
+sich folgendes Vorgehen: Sie erstellen zuerst Ihre Menukarte und tragen schon die
+Namen für die jeweils aufzurufenden Prozeduren ein - wie wir es in Kapitel 4 ge­
+macht haben. Mit 'testinstallation' installieren Sie dann in Ihrer Task die neue Menu­
+karte.
+Nun schreiben Sie Ihre Prozeduren, die Sie unter das Menu legen wollen. Ist eine
+Prozedur "testreif", so müssen Sie sie zunächst insertieren, denn das Menusystem gs-
+DIALOG kann nur auf insertierte Prozeduren zugreifen. Anschließend rufen Sie das
+Menu (z.B. 'SCRIPT') aus der Menukarte mit dem Befehl 'handle menu ("SCRIPT")'
+(Hier ist der jeweilige Menuname einzusetzen!) auf. Wenn Sie den entsprechenden
+Menupunkt aktivieren, müßte Ihr Programm ablaufen.
+Es ist günstig, eine eigene Task zum Testen der Prozeduren anzulegen, damit diese
+hin und wieder gelöscht werden kann.
+
+
+#ib#5.1 Eingabe eines Textes/Namens#ie# ('#ib#menuanswer#ie#')
+
+Wenn der Benutzer in unserem Beispiel die Menufunktion 'Neu erstellen' aktiviert
+hat, muß der Name der Datei erfragt werden, die neu erstellt werden soll. Dafür steht
+die Prozedur 'menuanswer' zur Verfügung. Die in die Menukarte eingetragene Proze­
+dur 'neue datei editieren' (Siehe Kapitel 4.1) könnte dann folgendermaßen aussehen:
+
+
+PROC neue datei editieren:
+ TEXT VAR dateiname := menuanswer ("Bitte den gewünschten Dateinamen:",
+ "", 5);
+ IF dateiname <> "" AND NOT exists (dateiname)
+ THEN command dialogue (FALSE); #ib#cursor on#ie#;
+ edit (dateiname);
+ #ib#cursor off#ie#; command dialogue (TRUE);
+ regenerate menuscreen (* sehen Sie dazu Kapitel 5.10 *)
+ FI
+END PROC neue datei editieren;
+
+
+Schauen wir uns zuerst die Prozedur 'menuanswer' an. Die Prozedur hat drei Para­
+meter. Mit dem ersten Parameter legen Sie den Text fest, der innerhalb der Box
+ausgegeben wird, die auf dem Bildschirm erscheint. Der Text dient ausschließlich der
+Information des Anwenders.
+Mit dem zweiten Parameter können Sie dem Benutzer einen Vorschlag für die Einga­
+be machen, der zum Editieren ausgegeben wird. Da eine solche Vorgabe aber in die­
+ser Situation sinnlos wäre, verzichten wir darauf ("").
+
+Die auf dem Bildschirm erscheinende Box hat folgendes Aussehen:
+
+ +-------------------------------------+
+ I Bitte den gewünschten Dateinamen: I
+ I I
+ I I
+ I Eingabe: I
+ +-------------------------------------+
+
+
+Die Boxbreite und -höhe wird vom System automatisch anhand des von Ihnen als
+ersten Parameter übergebenen Textes festgelegt. Sie haben noch verschiedene Mög­
+lichkeiten, diesen Text zu gestalten (mehrere Zeilen, Inversdarstellung etc.) - auf
+diese Möglichkeiten gehen wir in Kapitel 5.13 detailliert ein.
+In unserem Beispiel erscheint die Box in der Mitte des Menubildschirms. Diese
+Festlegung treffen wir durch die Angabe der Position '5' als dritten Parameter. Sie
+können hier zwischen 5 verschiedenen Positionen wählen: 1 - oben links, 2 - oben
+rechts, 3 - unten links, 4 - unten rechts, 5 - zentral im Menubildschirm - mehr dazu
+in Kapitel 5.12.
+
+Mit dem Erscheinen der obigen Box auf dem Bildschirm ändert sich automatisch
+auch die Fußzeile im Menu, über die der Benutzer Informationen zur Bedienung
+erhält. Hier erscheint der Hinweis: 'Fertig: <RETURN>  Abbruch: <ESC><h>'.
+Um diese Hinweise brauchen Sie sich aber nicht zu kümmern , da sie alle automa­
+tisch gesetzt werden.
+Die Prozedur 'menuanswer' hat noch folgende Besonderheit: Es ist nicht möglich,
+den Namen 'break' einzugeben! Diese Eingabe wird automatisch abgefangen. Es hat
+sich gezeigt, daß Anwender manchmal versuchen, über <ESC><q> die Eingabe
+zu verlassen. In diesem Falle entstünde hier eine Datei mit Namen 'break' - was aber
+nicht sinnvoll wäre.
+Nach der Eingabe liefert die Prozedur 'menuanswer' als Wert den vom Benutzer
+eingegebenen Text - dabei sind führende und folgende Leerzeichen schon abgeschnit­
+ten ('compress'). Wurde die Prozedur mit <ESC><h> verlassen, so wird niltext
+geliefert.
+
+Wird in obiger Prozedur die Eingabe mit <ESC><h> abgebrochen oder existiert
+bereits eine Datei mit dem eingegebenen Namen, so verschwindet die Box, und der
+Menubildschirm wird automatisch in den alten Zustand gebracht.
+Wenn schon eine Datei mit dem Namen existiert, dann wäre es sinnvoll, den Benutzer
+darauf aufmerksam zu machen. Wie ein solcher Hinweis in das Menu eingeblendet
+werden kann, erklären wir im Kapitel 5.2.
+
+gs-DIALOG ist so geschrieben, daß der Cursor möglichst wenig störend wirkt. Aus
+diesem Grunde wird der Cursor immer an einer Stelle "geparkt". Sofern Ihr System es
+zuläßt und eine entsprechende Anpassung vorliegt, wird der Cursor ganz ausgeschal­
+tet. Denken Sie bitte daran, auch wenn er auf Ihrem Bildschirm ständig sichtbar ist!
+Wenn also jetzt eine Eingabe erfolgen soll, ist es notwendig, den Cursor anzuschalten.
+Wenn Sie wieder in das Menu zurückkehren, sollte der Cursor wieder ausgeschal­
+tet werden, damit er dort nicht stört.
+Wenn Sie die Prozedur 'edit' mit einem neuen Namen als Parameter aufrufen, erfragt
+das System, ob die Datei neu eingerichtet werden soll. Diese Anfrage muß hier unter­
+drückt werden, damit nicht irgendwelche Texte in den Menubildschirm geschrieben
+werden. Das Unterdrücken der Abfrage erreichen Sie durch Ausschalten des Kom­
+mandodialoges. Nach Einrichten der Datei muß der Kommandodialog aber wieder
+eingeschaltet werden, da gs-DIALOG das Eingeschaltetsein für eine fehlerfreie Funk­
+tion voraussetzt!
+
+Mit dem Befehl '#ib#regenerate menuscreen#ie#' (sehen Sie dazu auch Kapitel 5.10) wird der
+aktuelle Menubildschirm erneut vollständig auf den Bildschirm geschrieben (repro­
+duziert). Das ist notwendig, weil die Prozedur 'edit' den Bildschirm benutzt hat.
+Durch diesen Befehl wird der Menubildschirm exakt in der Form hergestellt, wie er
+zuletzt ausgesehen hat. Auch wenn Sie geschachtelte Menubildschirme haben, wer­
+den diese durch den einen Befehl reproduziert. So können Sie in Ihren Verarbei­
+tungsfunktionen mit dem Bildschirm "machen was Sie wollen" - Sie kehren mit dem
+letztgenannten Befehl immer wieder so in das Menu zurück, wie Sie es verlassen
+haben.
+
+
+#ib#5.2 Ausgabe einer Information#ie# ('#ib#menuinfo#ie#')
+
+In der Prozedur 'neue datei editieren' (Kapitel 5.1) wäre es sinnvoll, den Benutzer zu
+informieren, wenn bereits eine Datei mit dem eingegebenen Namen existiert. Hierfür
+steht die Prozedur 'menuinfo' zur Verfügung.
+
+Beispiel:
+
+menuinfo (" Eine Datei mit dem Namen "13" existiert schon!");
+
+Dadurch wird folgende Box ins Menu geschrieben:
+
+ +----------------------------+
+ I I
+ I Eine Datei mit dem Namen I
+ I existiert schon I
+ I I
+ +----------------------------+
+
+Die Box erscheint in der Mitte des Menus (Position 5); in der Fußzeile wird der Hin­
+weis ausgegeben 'Zum Weitermachen bitte irgendeine Taste tippen!'. Dann wartet das
+System so lange, bis eine Taste gedrückt wird. Anschließend wird der aktuelle Menu­
+schirm wiederhergestellt.
+Die Prozedur 'menuinfo' gibt es noch in zwei weiteren Versionen, nämlich mit zwei
+bzw. drei Parametern. Im ersten Fall kann über den zweiten Parameter noch die
+Position (1, 2, 3, 4, 5) innerhalb des Menubildschirmes festgelegt werden (sehen Sie
+dazu Kapitel 5.12). Mit dem dritten Parameter kann ggf. noch die Wartezeit festgelegt
+werden, die das System maximal verstreichen läßt, bevor es von sich aus das Pro­
+gramm fortsetzt.
+
+'menuinfo (" Eine Datei mit dem Namen "13" existiert schon!", 3, 40)'
+
+gibt die oben gezeigte Box aus, aber links unten in der Ecke des Menubildschirms
+(Position 3). Das System wartet (maximal) 4 Sekunden (40 Zehntel) und setzt dann -
+auch ohne Tastendruck - das Programm fort. Diese Prozedur mit gesondert angege­
+bener Wartezeit verwendet man dann, wenn man nicht unbedingt die Kenntnisnahme
+der Information durch den Benutzer bestätigt haben möchte.
+
+
+#ib#5.3 Auswahl eines Namen durch Ankreuzen#ie# ('#ib#menuone#ie#')
+
+Während bei der Neuerstellung einer Datei ein Name neu erfragt werden muß, kann
+man beim Menupunkt 'Ansehen/Ändern' auf schon vorhandene Dateien zugreifen.
+Sie können dem Benutzer z.B. alle Dateien in der Task zur Auswahl anbieten. Sobald
+der Benutzer einen Namen angekreuzt hat, soll die entsprechende Datei geöffnet wer­
+den. Dafür steht der Befehl 'menuone' zur Verfügung:
+
+
+PROC alte datei editieren:
+ TEXT CONST kopf :: "Textdatei ansehen/ändern",
+ hinweis :: "Bitte gewünschte Datei ankreuzen";
+ TEXT VAR dateiname := menuone (ALL myself, kopf, hinweis, FALSE);
+ IF dateiname <> ""
+ THEN #ib#cursor on#ie#;
+ edit (dateiname);
+ #ib#cursor off#ie#;
+ FI;
+ regenerate menuscreen
+END PROC alte datei editieren;
+
+
+Die Prozedur 'menuone' hat 4 Parameter: Als erster Parameter ist ein Thesaurus zu
+übergeben, in dem die zur Auswahl stehenden Namen enthalten sind. Zum Thesau­
+rushandling werden noch einige zusätzliche Funktionen zur Verfügung gestellt (z.B.
+daß nur Dateien eines bestimmten Typs zur Auswahl angeboten werden können) -
+diese Funktionen werden in Kapitel 5.14 erläutert. In unserem Beispiel werden alle
+Dateien zur Auswahl angeboten, die in der Task zur Verfügung stehen.
+Die beiden Texte, die als 2. und 3. Parameter übergeben werden, erscheinen zur
+Kennzeichnung im Kopf der Auswahlliste. Der als zweiter Parameter übergebene Text
+erscheint zentriert und invers dargestellt auf dem Bildschirm, der als dritter Parame­
+ter übergebene Text nur zentriert. Es ist sinnvoll, mit dem ersten Text (2.Parame­
+ter) die zur Zeit aktivierte Menufunktion anzuzeigen, denn der Menubildschirm wird
+ja durch die Auswahlliste überschrieben. So kann sich der Benutzer besser im Menu­
+system orientieren.
+Mit dem 4. Parameter wird festgelegt, ob der Bildschirm nach der Auswahl "ge­
+reinigt", d.h. der alte Menubildschirm wiederhergestellt werden soll. Da in unserem
+Falle normalerweise im Anschluß an die Auswahl eine Datei auf dem Bildschirm
+editiert wird, verzichten wir auf die "automatische Regenerierung" des Menubild­
+schirms. Dieses besorgen wir nach dem Editieren durch das Kommando 'regenerate
+menuscreen' "von Hand".
+Auf das Fenster, das für die Auswahl auf dem Bildschirm angezeigt wird, können Sie
+keinen Einfluß nehmen - es wird vom System selbständig festgelegt. Dadurch können
+Sie die Auswahl, wie auch die anderen Dialogkomponenten ebenso in geschachteleten
+Menus aufrufen, ohne daß es zu Problemen kommt.
+
+
+#ib#5.4 Auswahl mehrerer Namen durch Ankreuzen#ie# ('#ib#menusome#ie#')
+
+Es ist nicht immer sinnvoll, daß der Benutzer nur einen Namen auswählen, d.h.
+ankreuzen kann. Bei der Zeilenformatierung könnte man z.B. zulassen, daß gleich
+mehrere Dateinamen angekreuzt werden können. Im Anschluß an die Auswahl sollen
+dann alle angekreuzten Dateien mit 'lineform' bearbeitet werden. Für diesen Zweck
+steht die Prozedur 'menusome' zur Verfügung. Sie hat die gleichen Parameter wie die
+in 5.3 erläuterte Prozedur 'menuone' - nur daß hier die Auswahl mehrerer Namen
+möglich ist. Verläßt der Benutzer die Auswahl durch <ESC><q>, so wird ein
+Thesaurus mit allen angekreuzten Namen geliefert; bei Verlassen mit <ESC><h>
+ein leerer Thesaurus. Beispiel:
+
+
+PROC zeilen formatieren:
+ TEXT CONST kopf :: "Textdateien zeilenweise formatieren",
+ hinweis :: "Bitte gewünschte Dateien ankreuzen";
+ THESAURUS VAR dateinamen := menusome (ALL myself, kopf, hinweis,
+ FALSE);
+ cursor on;
+ formatiere dateien;
+ cursor off;
+ regenerate menuscreen.
+
+ formatiere dateien:
+ INT VAR zaehler;
+ FOR zaehler FROM 1 UPTO highest entry (dateinamen) REP
+ IF name (dateinamen, zaehler) <> ""
+ THEN lineform (name (dateinamen, zaehler))
+ FI
+ PER
+END PROC zeilen formatieren;
+
+
+
+#ib#5.5 Eingabe eines Textes/Namens - alternativ: Auswahl
+ durch Ankreuzen#ie# ('#ib#menuanswerone#ie#','#ib#menuanswersome#ie#')
+
+Sehr häufig kommt es vor, daß der Benutzer auf die zuletzt bearbeitete Datei zurück­
+greifen will. In Kapitel 5.3 haben wir dem Benutzer bei der Menufunktion 'Anse­
+hen/Ändern' gleich alle Dateien zur Auswahl angeboten. Hier wäre es vielleicht gün­
+stiger gewesen, ihm die zuletzt bearbeitete Datei anzubieten und erst auf Wunsch die
+Liste aller Dateien zum Ankreuzen. Das läßt sich auf verschiedene Weise realisieren -
+wir werden Ihnen in diesem und in den folgenden Kapiteln verschiedene Möglich­
+keiten aufzeigen:
+
+Sie können z.B. mit der Prozedur 'menuanswerone' arbeiten. Wie Sie schon aus dem
+Namen entnehmen können, handelt es sich dabei um eine Prozedur, die eigentlich
+aus zwei Prozeduren, nämlich 'menuanswer' und 'menuone' zusammengesetzt ist.
+Stellen Sie sich vor, sie führen den Namen der zuletzt bearbeiteten Datei in Ihrem
+Programm unter der Variablen 'letzte datei'. Dann könnte die Prozedur 'alte datei
+editieren' aus Kapitel 5.3 auch folgendermaßen geschrieben werden:
+
+
+TEXT VAR letzte datei;
+...
+
+
+PROC alte datei editieren:
+ TEXT CONST hinweis letzte :: "Zuletzt bearbeitete Datei:",
+ kopf :: "Textdatei ansehen/ändern",
+ hinweis :: "Bitte gewünschte Datei ankreuzen";
+ TEXT VAR dateiname := menuanswerone (hinweis letzte,
+ letzte datei,
+ ALL myself, kopf,
+ hinweis, FALSE);
+ IF dateiname <> ""
+ THEN cursor on;
+ edit (dateiname);
+ letzte datei := dateiname;
+ cursor off;
+ FI;
+ regenerate menuscreen
+END PROC alte datei editieren;
+
+
+Insgesamt hat die Prozedur 6 Parameter: Die ersten beiden Parameter beziehen sich
+auf die Eingabe ('menuanswer'). Wie dort kann auch hier der Text festgelegt werden,
+der in der Box auf dem Bildschirm erscheint.
+Der zweite Parameter ist der Text, der dem Benutzer zum Editieren angeboten wird -
+hier der zuletzt benutzte Dateiname. Möchte der Benutzer auf die Datei mit dem an­
+gebotenen Namen zugreifen, braucht er nur mit <RETURN> zu bestätigen.
+Möchte er die Auswahl zum Ankreuzen angeboten bekommen, so braucht er nur die
+Tastenfolge <ESC><z> (für 'Zeigen') zu tippen. Auf diese Auswahl beziehen sich
+die letzten 4 Parameter, die die gleiche Bedeutung haben wie bei der Prozedur
+'menuone'. Auf die Möglichkeit, durch <ESC><z> eine Auswahl angeboten zu
+bekommen, wird in der Fußzeile des Menus hingewiesen.
+
+Aber Achtung! Sie sollten sich einer "Gefahr" bei diesem Vorgehen bewußt sein. Der
+Benutzer hat natürlich so die Möglichkeit, auch einen anderen Namen als den vorge­
+schlagenen anzugeben - einen Namen, der noch nicht in der Dateiliste enthalten ist.
+In einem solchen Falle würde Ihnen bei obiger Prozedur der Menubildschirm "ka­
+puttgeschrieben", denn das System fragt (bei eingeschaltetem Kommandodialog) an,
+ob eine Datei mit dem Namen eingerichtet werden soll. Für diesen Fall sollten Sie also
+unbedingt eine Vorsorge treffen (z.B. indem Sie den Benutzer darauf hinweisen, daß
+der eingegebene Name nicht akzeptiert wird)!
+
+Sie vermuten sicher schon ganz richtig, daß es entsprechend auch die Prozedur
+'menuanswersome' gibt, die zunächst einen Dateinamen erfragt und auf Wunsch
+eine Auswahl anbietet, in der mehrere Dateinamen angekreuzt werden können. Die
+Prozedur hat ebenfalls 6 Parameter, die identisch zur Prozedur 'menuanswerone'
+sind. Allerdings liefert die Prozedur 'menuanswersome' in jedem Fall einen Thesau­
+rus; wurde die Auswahl mit <ESC><h> abgebrochen, so liefert sie einen leeren
+Thesaurus.
+
+
+#ib# 5.6 Die Ja/Nein - Entscheidung#ie# ('#ib#menuyes#ie#','#ib#menuno#ie#')
+
+In Kapitel 5.5 trat das Problem auf, daß der Benutzer einen "unzulässigen" Namen
+eingeben konnte. Dieses Problem können wir umgehen: Wir fragen den Benutzer ein­
+fach, ob er mit der zuletzt bearbeiteten Datei arbeiten will und lassen Ihm nur die
+Chance, mit 'Ja' oder 'Nein' zu antworten. Im ersten Fall bieten wir ihm eben diese
+Datei an - ansonsten die Auswahl zum Ankreuzen.
+
+Hierfür stehen die Prozeduren 'menuyes' und 'menuno' zur Verfügung, die von Ihrer
+Funktion her den Ihnen bekannten Prozeduren 'yes' und 'no' gleichen. Die beiden
+Menu-Prozeduren haben jeweils zwei Parameter:
+
+
+TEXT VAR letzte datei;
+...
+
+PROC alte datei editieren:
+ TEXT CONST kopf :: "Textdatei ansehen/ändern",
+ hinweis :: "Bitte gewünschte Datei ankreuzen";
+ TEXT VAR dateiname;
+ IF menuyes (" Wollen Sie mit der Datei "13"" +
+ " '" +letzte datei+ "'"13" arbeiten", 5)
+ THEN editiere letzte datei
+ ELSE dateiname := menuone (ALL myself, kopf, hinweis, FALSE);
+ editiere ausgewaehlte datei
+ FI;
+ regenerate menuscreen.
+
+ editiere letzte datei:
+ cursor on; edit (letzte datei); cursor off.
+
+ editiere ausgewaehlte datei:
+ IF dateiname <> ""
+ THEN cursor on; edit (dateiname); cursor off;
+ letzte datei := dateiname
+ FI
+END PROC alte datei editieren;
+
+
+Über den zweiten Parameter legen Sie die Position auf dem Bildschirm innerhalb des
+Menus fest (1, 2, 3, 4, 5; sehen Sie auch Kapitel 5.12). Der erste Parameter ist ein
+Text, welcher der gs-DIALOG-Syntax gehorchen muß (die Codes "13" bewirken
+einen Zeilenvorschub; sehen Sie auch Kapitel 5.13). Er wird in einer Box auf den
+Bildschirm geschrieben und durch 'Ja  Nein' ergänzt:
+
+
+ +-----------------------------+
+ I I
+ I Wollen Sie mit der Datei I
+ I 'Dateiname' I
+ I arbeiten? I
+ I I
+ I Ja    Nein I
+ I I
+ +-----------------------------+
+
+Für 'Dateiname' ist auf Ihrem Bildschirm dann natürlich der aktuelle Inhalt von
+'letzte datei' eingetragen.
+Die Prozedur 'menuyes' liefert TRUE, wenn mit 'Ja' geantwortet wurde und FALSE,
+wenn mit 'Nein' geantwortet wurde. Die Prozedur 'menuno' wirkt wie 'NOT menuyes'.
+Nach Eingabe von 'Ja', 'Nein' (durch Tippen der Anfangsbuchstaben oder Positionie­
+rung auf die Antwort und anschließendem <RETURN>) wird der Menubildschirm
+automatisch regeneriert. Auch die entsprechenden Hinweise in der Fußzeile werden
+natürlich automatisch gesetzt.
+
+
+#ib#5.7 Die Alternativentscheidung#ie# ('#ib#menualternative#ie#')
+
+Im letzten Kapitel haben wir Ihnen die Prozeduren 'menuyes' und 'menuno' in Ihrer
+Wirkungsweise erläutert. Eigentlich sind die beiden Prozeduren nur ein (häufig
+benötigter) Spezialfall der Prozedur 'menualternative'. Die Funktionsweise der Proze­
+dur 'menualternative' dürfte Ihnen schon aus dem 'Archivmenu' bekannt sein: Wenn
+Sie eine neue Zieltask einstellen, werden Ihnen nämlich vier Alternativen zur Auswahl
+angeboten (Archiv, Vatertask, PUBLIC, Sonstige Task).
+Auf unsere Textverarbeitung bezogen könnten wir z.B. vor der Zeilenformatierung
+(lineform) über die Alternativentscheidung den gewünschten Schrifttyp abfragen. Wir
+wollen dem Benutzer in diesem Beispiel fünf Schrifttypen (schmal, elite, pica, letter,
+groß) zur Auswahl anbieten:
+
+
+
+TEXT VAR schrifttyp;
+...
+
+PROC schrifttyp waehlen:
+ TEXT CONST info :: " Auswahl der Schrifttypen: "13""13""
+ + " s ... schmal (17 Zeichen pro Zoll) "13""
+ + " e ... elite (12 Zeichen pro Zoll) "13""
+ + " p ... pica (10 Zeichen pro Zoll) "13""
+ + " l ... letter (Proportionalschrift) "13""
+ + " g ... groß ( 5 Zeichen pro Zoll) ",
+
+ liste :: "schmal"13"elite"13"pica"13"letter"13"groß",
+ tasten :: "seplgSEPLG";
+
+ INT VAR auswahl := menualternative (info, liste, tasten, 5, TRUE);
+ SELECT auswahl OF
+ CASE 1, 101, 106: schrifttyp := "17"
+ CASE 2, 102, 107: schrifttyp := "12"
+ CASE 3, 103, 108: schrifttyp := "10"
+ CASE 4, 104, 109: schrifttyp := "prop"
+ CASE 5, 105, 110: schrifttyp := "5"
+ OTHERWISE (* behalte alten Schrifttyp bei *)
+ END SELECT
+END PROC schrifttyp waehlen;
+
+
+Hätten wir diese Prozedur in unsere Prozedur 'zeilen formatieren' eingebunden, so
+zeigte sich bei Aktivierung folgende Einblendung in den Menubildschirm:
+
+
+
+ +---------------------------------------+
+ I I
+ I Auswahl der Schrifttypen: I
+ I I
+ I s ... schmal (17 Zeichen pro Zoll) I
+ I e ... elite (12 Zeichen pro Zoll) I
+ I p ... pica (10 Zeichen pro Zoll) I
+ I l ... letter (Proportionalschrift) I
+ I g ... groß ( 5 Zeichen pro Zoll) I
+ I I
+ I schmal elite pica letter groß I
+ I I
+ +---------------------------------------+
+
+Die Prozedur 'menualternative' besitzt insgesamt 5 Parameter. Wie Ihnen schon von
+von anderen Prozeduren bekannt ist, wird mit dem vorletzten (4.) Parameter die
+Position innerhalb des Menubildschirms bestimmt - hier also die Plazierung in die
+Mitte des Menubildschirms.
+Mit dem 5. Parameter können Sie noch festlegen, ob der Benutzer die Möglichkeit
+haben soll, die Alternativauswahl mit <ESC><h> abzubrechen (bei TRUE, wie im
+Beispiel) oder eben nicht.
+
+Mit dem 1. Parameter wird der Informationstext festgelegt, der auf dem Bildschirm
+innerhalb der Box erscheinen soll. Für die Funktion der Alternativauswahl ist die­
+ser Inhalt völlig belanglos - er dient ausschließlich der Information des Benutzers.
+Der Text kann - wie hier - z.B. durch eine Einteilung in Zeilen gestaltet werden
+(durch den Code "13").
+Der Text in den Zeilen sollte nicht zu breit sein, da er noch in eine Box innerhalb des
+Menubildschirms hineinpassen muß! Damit es auch bei geschachtelten Menus zu
+keinen Problemen kommt, sollte eine Zeile nicht breiter als 64 Zeichen sein. Aber
+keine Angst: Sie können gs-DIALOG durch zu lange Texte nicht durcheinanderbrin­
+gen - wenn Ihr Text zu breit ist, wird er rigoros abgeschnitten und einfach nicht
+angezeigt.
+
+Mit dem 2. Parameter übergeben Sie die Auswahlliste, die in der letzten Zeile der Box
+dargestellt wird. Hier dürfen insgesamt bis zu 10 Alternativen angegeben werden -
+bedenken Sie dabei aber unbedingt, daß diese Liste ebenfalls nicht zu lang werden
+darf (ebenfalls höchstens 64 Zeichen).
+Zwischen jeder von Ihnen notierten Alternative muß zur Kennung der Code "13"
+eingetragen werden - wie oben im Beispiel gezeigt. Da nachher in der Box zwischen
+den einzelnen Alternativen je drei Leerzeichen eingefügt werden, können Sie sich
+immer an der von Ihnen übergebenen Zeichenkette orientieren. Hat Ihre Auswahlliste
+nicht mehr als 64 Zeichen, dann ist sie in jedem Falle auf dem Bildschirm darstell­
+bar.
+Über diese Auswahlliste erfolgt normalerweise die Auswahl. Mit den Cursortasten links
+und rechts kann der Benutzer auf die gewünschte Alternative positionieren (auf dem
+Bildschirm invers dargestellt) und dann die <RETURN>-Taste tippen.
+Die Prozedur 'menualternative liefert dann einen Zahlenwert, nämlich die Position
+der gewählten Alternative in der als 2. Parameter übergebenen Liste (wird in unse­
+rem Beispiel die Alternative 'letter' gewählt, so liefert die Prozedur den Wert 4).
+Haben Sie den Abbruch durch <ESC><h> zugelassen (5. Parameter), so wird im
+Falle eines solchen Abbruchs der Wert '0' geliefert.
+
+Mit dem 3. Parameter können Sie noch festlegen, über welche Tasten eine Auswahl
+erfolgen soll. Wenn Sie hier niltext ("") angeben, ist eine Auswahl über die Tasten
+nicht möglich. Im Beispiel haben wir hier die Anfangsbuchstaben der im Text ge­
+nannten Schrifttypen gewählt und als Eingabe sowohl Klein- als auch Großbuchsta­
+ben gestattet. Erfolgt nun die Auswahl über das Tippen einer zugelassenen Taste,
+dann wird Ihre Position in der im 3. Parameter übergebenen Zeichenkette ermittelt
+und der Wert '100' dazuaddiert. Tippt in unserem Falle der Benutzer die Taste
+<L>, wird der Wert '109' geliefert.
+
+Es erfolgt übrigens kein Hinweis in der Fußzeile, ob eine Auswahl über das Tippen
+einer Taste möglich ist! Wenn Sie von der Möglichkeit Gebrauch machen, sollten Sie
+dieses durch die Gestaltung Ihres Informationstextes andeuten - wie wir es im Bei­
+spiel auch getan haben.
+
+
+#ib#5.8 Die Menunotiz#ie# ('#ib#write menunotice#ie#', '#ib#erasemenunotice#ie#')
+
+Innerhalb des Menus können Sie für den Benutzer auch eine Notiz ablegen. Wir
+machen z.B. bei der Archivverwaltung Gebrauch davon. Dort wird nämlich ständig
+angezeigt, mit welcher Task kommuniziert wird und - sofern es sich um einen Ar­
+chivmanager handelt - wie die (angemeldete) Diskette heißt. Wenn Sie z.B. dem
+Benutzer das aktuelle Datum im Menu anzeigen wollen, insertieren Sie die folgende
+Prozedur:
+
+
+PROC datum anzeigen:
+ write menunotice ("Datum: " + date, 4)
+END PROC datum anzeigen;
+
+
+Die Prozedur 'write menunotice' besitzt zwei Parameter. Mit dem ersten Parameter
+wird der Text übergeben, der in der Box ausgegeben werden soll. Er unterliegt eben­
+falls der gs-DIALOG-Syntax für Texte. Durch den zweiten Parameter wird wieder die
+Position innerhalb des Menus festgelegt (hier rechts unten: Position 4).
+
+Wenn Sie jetzt in Ihrer Menukarte die Prozedur 'oberbegriff  ("Bearbeiten")' in fol­
+gender Weise abändern:
+
+
+ oberbegriff ("Bearbeiten", "datum anzeigen", "erase menunotice")
+
+
+dann wird jedesmal, wenn das Pull-Down-Menu unter dem Oberbegriff 'Bearbeiten'
+aufgefaltet wird, unten rechts (Position 4) das aktuelle Datum in einer Box ange­
+zeigt. Diese Notiz verschwindet, wenn in ein anderes Pull-Down-Menu gewechselt
+wird.
+
+Auf den ersten Eindruck scheinen die Prozeduren 'write menunotice' und 'menuinfo'
+gleich zu sein - das ist aber nicht der Fall: Bei 'menuinfo' wird der Text in einer Box
+ausgegeben und so lange gewartet, bis der Benutzer eine Taste getippt hat (oder die
+angegebene Zeit verstrichen ist). Bei 'write menunotice' wird ebenfalls ein Text in
+einer Box auf den Menubildschirm geschrieben. Diese Box bleibt aber über längere
+Zeit bestehen (auf Erscheinen und Verschwinden kann der Benutzer selbst keinen
+Einfluß nehmen!) - und zwar solange, bis die Notiz gelöscht wird (mit 'erase menu­
+notice'; in unserem Beispiel, wenn das Pull-Down-Menu gewechselt wird) oder durch
+ein neues 'write menunotice' überschrieben wird. In einem Menu kann nämlich zu
+einem Zeitpunkt nur eine Menunotiz abgelegt werden.
+Wenn der Bildschirm durch gs-DIALOG-Prozeduren überschrieben wird, wird die
+Menunotiz ebenfalls ständig mitaufgefrischt, und auch, wenn Sie den Befehl 'regene­
+rate menuscreen' oder 'refresh submenu' geben.
+
+
+#ib#5.9 Fußzeilen im Menu#ie# ('#ib#menufootnote#ie#', '#ib#oldmenufootnote#ie#')
+
+In den Fußzeilen innerhalb des Menus werden dem Benutzer Bedienhinweise ange­
+zeigt. Die Fußzeile wird aber auch dazu benutzt, den Benutzer über Prozesse zu
+informieren, die im Hintergrund ablaufen - erst recht dann, wenn Sie einige Zeit in
+Anspruch nehmen. Sie zeigen dem Benutzer an, daß er nicht "unruhig" zu werden
+braucht, sondern das System "mit sich" beschäftigt ist.
+Im allgemeinen braucht sich der Programmierer um diese Fußnoten nicht zu küm­
+mern, denn sie werden von den einzelnen Komponenten des Systems automatisch
+gesetzt. Wir können aber z.B. dem Benutzer einen Hinweis geben, wenn unter dem
+Menupunkt 'Verzeichnis' eine Liste erstellt wird. Die Prozedur könnte dann folgen­
+dermaßen notiert werden:
+
+
+PROC verzeichnis ausgeben:
+ menufootnote ("Bitte warten... Ich erstelle eine Dateiliste");
+ FILE VAR f :: sequential file (output, "Dateiliste");
+ list (f); modify (f);
+ old menufootnote;
+ entferne eigenen namen;
+ zeige liste an;
+ forget ("Dateiliste", quiet).
+
+ entferne eigenen namen:
+ TEXT VAR zeile :: ""; INT VAR i;
+ FOR i FROM lines (f) DOWNTO 1 REP
+ to line (f, i);
+ read record (f, zeile);
+ UNTIL pos (zeile, "Dateiliste") > 0 PER;
+ delete record (f).
+
+ zeige liste an:
+ to line (f, 1);
+ menuwindowshow (f) (* Sehen Sie Kapitel 5.11.1*)
+END PROC verzeichnis ausgeben;
+
+
+Beachten Sie, daß der Text nicht länger als 64 Zeichen ist, damit er auch bei ge­
+schachtelten Menus vollständig ausgegeben werden kann. Sollte der Text dennoch zu
+lang sein, wird er vom System auf die entsprechende Länge gestutzt.
+Haben Sie mit 'menufootnote' eine eigene Fußzeile gesetzt, so können Sie die da­
+durch gelöschte Zeile durch den Befehl 'old menufootnote' wieder hinschreiben.
+Ansonsten wird Ihre Fußzeile von der nächsten automatisch (d.h. vom System) ge­
+setzten Fußnote überschrieben. In dem obigen Beispiel hätten Sie also gut auf den
+Befehl 'old menufootnote' verzichten können.
+
+Durch 'old menufootnote' wird die letzte Fußnote, die automatisch vom System ge­
+setzt wurde, reproduziert. Der in der obigen Prozedur verwendete Befehl 'menuwin­
+dowshow' ist bisher noch nicht erläutert. Sehen Sie dazu bitte das Kapitel 5.11.1.
+
+
+#ib#5.10 Wiederherstellung des Menubildschirms#ie# ('#ib#regenerate
+ menuscreen#ie#','#ib#refresh submenu#ie#')
+
+Der Befehl 'regenerate menuscreen' ist Ihnen schon aus diversen Beispielprogram­
+men dieses Handbuches bekannt. Ist der Menubildschirm "kaputtgeschrieben" oder
+der Bildschirm für andere Zwecke benutzt worden, so läßt sich durch diesen Befehl
+der Menubildschirm in seinem letzten Zustand reproduzieren (auch bei geschachtel­
+ten Menus!). Durch den Befehl wird der Bildschirm gelöscht und komplett neu
+aufgebaut.
+
+Ein vollständiger Bildschirmaufbau ist aber gar nicht immer nötig. Wenn Sie sicher
+sind, daß durch Ihre Operationen nur der Bereich zwischen den beiden durchgezo­
+genen Linien, die die Kopf- und Fußzeile abtrennen, betroffen ist, brauchen Sie nur
+den Befehl 'refresh submenu' zu geben. Hierdurch wird das aktuelle Pull-Down-
+Menu neu aufgebaut und - sofern gesetzt - die Menunotiz. Wenn möglich, ist er dem
+Befehl 'regenerate menuscreen vorzuziehen, da hierfür weniger Zeit benötigt wird
+und weniger "Unruhe" auf dem Bildschirm entsteht.
+Sorgen Sie aber unbedingt dafür, daß der von Ihnen benutzte Bildschirmbereich
+zuvor "gereinigt" wird, denn das besorgt 'refresh subnmenu' nicht!
+
+
+#ib#5.11 Arbeiten im Menufenster#ie#
+
+Neben den vorab aufgezeigten Möglichkeiten können Sie innerhalb des Menus auch
+noch ein Fenster öffnen. Innerhalb dieses Fensters stehen Ihnen alle Möglichkei­
+ten zur Verfügung, die Sie auch sonst zum Beschreiben des gesamten Bildschirms
+haben - und noch einiges mehr.
+Wir machen z.B. intensiv beim Archivhandling Gebrauch davon. So werden Ihnen
+Verzeichnisse angezeigt, Sie können verfolgen, wie die einzelnen Dateien vom Archiv
+geholt werden oder dorthin geschrieben werden und einiges mehr. In diesem Kapitel
+wollen wir Ihnen die Möglichkeiten aufzeigen, die Sie innerhalb des Menufensters
+haben.
+
+Auf die Größe des Menufensters haben Sie keinen Einfluß, sie wird vom System ge­
+setzt ("normales" Menu: 77 Zeichen breit und 20 Zeichen hoch; geschachteltes
+Menu: 71 Zeichen breit und 16 Zeichen hoch). Hierdurch ist sichergestellt, daß alle
+Operationen auch in geschachtelten Menus ohne Probleme ausführbar sind. Alle
+Prozeduren, die sich auf Aktionen im Menufenster beziehen, enthalten die Silbe
+'menuwindow'.
+Sie können mit den hier beschriebenen Prozeduren ähnlich arbeiten, wie mit den
+entsprechenden Prozeduren ohne den Wortbestandteil 'menuwindow' auf dem
+ganzen Bildschirm. Allerdings gibt es einige Unterschiede, auf die Sie achten sollten!
+
+
+5.11.1 Datei anzeigen/editieren
+ ('#ib#menuwindowshow#ie#', '#ib#menuwindowedit#ie#')
+
+Von der Prozedur 'menuwindowshow (FILE VAR f)' haben wir im letzten Kapitel
+schon Gebrauch gemacht, um das Verzeichnis der Dateien in der Task innerhalb des
+Menus anzuzeigen. Die Prozedur gibt es in zwei Versionen mit je einem Parameter.
+Einmal kann, wie im vorigen Kapitel, ein FILE angegeben werden, andererseits kann
+auch der Name der anzuzeigenden Datei als Text übergeben werden ('menuwindow­
+show (TEXT CONST dateiliste)'). Durch den Befehl wird innerhalb des Menus ein
+umrandetes Fenster geöffnet, in der das angegebene File/die Datei angezeigt wird. Bei
+'menuwindowshow' kann die Datei nur eingesehen, nicht aber schreibend verändert
+werden.
+Die Prozedur 'menuwindowedit' gibt es ebenfalls in den zwei Ausprägungen. Sie
+verhält sich zur vorgenannten identisch - nur kann hier auch die Datei schreibend
+verändert werden.
+
+
+5.11.2 Menufenster öffnen/anzeigen ('#ib#show menuwindow#ie#')
+
+Wenn Sie eigene Operationen in einem Fenster im Menu ausführen lassen wollen,
+muß dieses Fenster zunächst auf dem Bildschirm angezeigt werden. Durch den
+Befehl 'show menuwindow' wird ein entsprechender Rahmen innerhalb des Menus
+ausgegeben und der Bereich innerhalb dieses Rahmens (das Fenster) gelöscht.
+Auf die Größe des Fensters innerhalb des aktuellen Menus können Sie - wie bereits
+eingangs gesagt - keinen Einfluß nehmen.
+Zu einem Zeitpunkt kann immer nur ein Menufenster geöffnet sein, da das Fenster
+schon den größtmöglichen sinnvollen Bereich des aktuellen Menus belegt. Ein er­
+neutes 'show menuwindow' hätte die gleiche Wirkung wie das nachfolgend beschrie­
+bene 'menuwindowpage' - nur wird hier zusätzlich noch der Rahmen des Fensters
+mitausgegeben.
+
+
+5.11.3 Menufenster löschen (putzen) ('#ib#menuwindowpage#ie#')
+
+Durch den Befehl 'menuwindowpage' wird das Fenster innerhalb des aktuellen
+Menus gelöscht; der Rahmen des Fensters bleibt bestehen, da er nicht mit zum ei­
+gentlichen Fenster gehört. Durch den Befehl wird der Menubildschirm nicht(!)
+rekonstruiert!
+
+
+5.11.4 Positionierungen im Menufenster
+ ('#ib#menuwindowline#ie#', '#ib#menuwindowcursor#ie#')
+
+Mit 'menuwindowline' wird, wie auch sonst auf dem Bildschirm, an den Anfang der
+nächsten Zeile positioniert. Diesen Befehl gibt es, ebenso wie den Befehl 'line' (der
+auf dem Gesamtbildschirm operiert) ohne und mit einem Parameter. Durch 'menu­
+windowline (3)' wird an den Anfang der "drittnächsten" Zeile innerhalb des Menu­
+fensters positioniert.
+
+Aber Achtung! Der Befehl 'menuwindowline' weist einen deutlichen Unterschied zum
+Ihnen bekannten Befehl 'line' auf. Wird nämlich die untere Fenstergrenze überschrit­
+ten, so rollt (scrollt) der Bildschirm nicht um die entsprechenden Zeilen nach oben,
+wie Sie es von 'line' gewohnt sind - statt dessen wird der Fensterinhalt gelöscht und
+wieder oben im Fenster zu schreiben begonnen. Es erscheint, als ob auf ein neues
+Fenster positioniert würde.
+Innerhalb des Fensters können Sie auch den Cursor positionieren, wie Sie es vom
+Bildschirm gewohnt sind - allerdings nur innerhalb der aktuell gültigen Grenzen. In
+einem Menu ist das Fenster 77 Zeichen breit und 20 Zeichen hoch; in einem ge­
+schachtelten Menu 71 Zeichen breit und 16 Zeichen hoch.
+Wird außerhalb des aktuellen Menufensters positioniert, wird das Fenster gelöscht
+und die Fensterposition (1, 1) angenommen.
+
+
+5.11.5 Informationen über die aktuelle Menu-Fenster position ('#ib#get
+menuwindowcursor#ie#', '#ib#remaining menuwindowlines#ie#')
+
+Mit der Prozedur 'get menuwindowcursor (INT VAR spalte, zeile)' kann die aktuelle
+Position des Cursors innerhalb des Menufensters erfragt werden. Die Prozedur hat
+zwei Parameter, die als 'INT VAR' deklariert sein müssen. Der erste Parameter enthält
+anschließend die aktuelle Spalte, der zweite die aktuelle Zeile.
+
+Mit der werteliefernden Prozedur 'remaining menuwindowlines' kann die Anzahl der
+noch verbleibenden Zeilen innerhalb des aktuellen Menufensters erfragt werden. Die
+Prozedur wurde deshalb zur Verfügung gestellt, weil der Fensterinhalt - im Gegensatz
+zum normalen Bildschirm - nicht gescrollt werden kann. So können Sie sich vorab
+informieren, ob der Text, der von Ihnen ausgegeben werden soll, noch Platz findet, so
+daß während der Ausgabe nicht plötzlich der Fensterinhalt gelöscht wird.
+
+
+5.11.6 Ausgabe/Eingabe innerhalb des Menufensters
+ ('#ib#menuwindowout#ie#', '#ib#menuwindowget#ie#',
+ '#ib#menuwindoweditget#ie#', '#ib#menuwindowyes#ie#',
+ '#ib#menuwindowno#ie#')
+
+Innerhalb des Menufensters können mit der Prozedur 'menuwindowout' Texte ausge­
+geben werden - die Prozedur hat einen TEXT-Parameter. Sollen INTEGER- oder REAL-
+Werte ausgegeben werden, so müssen diese Werte zuerst in Texte konvertiert werden.
+Bitte beachten Sie unbedingt, daß innerhalb des Fensters nicht gescrollt wird und
+auch kein Zeilenumbruch stattfindet! Ist ein Text länger als die verbleibende Restzei­
+le, so wird der Text bis zum Fensterende ausgegeben und die Ausgabe am Anfang der
+nächsten Zeile fortgesetzt. So ist sichergestellt, daß in keinem Falle die Fenstergren­
+zen überschritten werden.
+Sobald die letzte Position des aktuellen Menufensters beschrieben ist (unten rechts in
+der Fensterecke), wird der Fensterinhalt komplett gelöscht und die Ausgabe in der
+ersten Zeile des "neuen" Fensters fortgesetzt. Auf Zeilenumbruch und Scrolling wurde
+verzichtet, da der Realisierungsaufwand dafür zu hoch gewesen wäre.
+
+Mit der Prozedur 'menuwindowget (TEXT VAR text)' können Sie auch Texte innerhalb
+des Menufensters einlesen - INTEGER-/ REAL-Werte müssen ggf. von Hand konvertiert
+werde. Die Eingabe wird durch <RETURN> abgeschlossen. Es muß mindestens ein
+Zeichen (ungleich Leerzeichen) eingegeben werden. Von der Eingabe werden die
+führenden Leerzeichen abgeschnitten.
+Ist der einzugebende Text länger als die noch verbleibende Restzeile, so wird der Text
+in der Restzeile gescrollt. Sind in der aktuellen Zeile weniger als 7 Zeichen für die
+Eingabe vorhanden, so wird automatisch für die Eingabe an den Anfang der nächsten
+Zeile positioniert.
+
+Ab gs-DIALOG-Version 1.1 steht auch die Prozedur 'menuwindoweditget (TEXT VAR
+text)' zur Verfügung, durch die ein Text zum Editieren vorgegeben werden kann. Es
+ist allerdings darauf zu achten, daß der Text in jedem Falle initialisiert wird!
+
+Die beiden Prozeduren 'menuwindowyes' und 'menuwindowno' ähneln den Ihnen
+bekannten Prozeduren 'yes' und 'no'. Sie operieren nur auf dem Menufenster. Be­
+denken Sie aber bitte, daß, wenn bei der Ausgabe des Textes die Fenstergrenze über­
+schritten wird, der Resttext in der nächsten Zeile ausgegeben wird. Wird dabei sogar
+die untere Fenstergrenze überschritten, so wird der komplette Fensterinhalt gelöscht
+und die Ausgabe in der linken oberen Ecke des "neuen Fensters" fortgesetzt!
+
+
+5.11.7 Weiter Prozeduren ('#ib#menuwindowcenter#ie#',
+ '#ib#menuwindowstop#ie#')
+
+Es werden noch zwei weitere Prozeduren für das Menufenster zur Verfügung gestellt,
+die bei der Programmentwicklung ganz nützlich sein können.
+Mit 'menuwindowcenter (TEXT CONST text)' werden vor und hinter dem übergebe­
+nen Text so viele Leerzeichen angefügt, daß der Text zentriert in der Menufenster-Zei­
+le ausgegeben wird. Bevor Sie den Text mit 'menuwindowout' ausgeben, müssen Sie
+an den Anfang einer Zeile positionieren, denn die Anzahl der vorangestellten Blanks
+wird unter Annahme dieser Zeilenposition ermittelt! Innerhalb der Zeile werden ggf.
+vorhandene Texte überschrieben.
+
+Durch die Prozedur 'menuwindowstop' wird an den Anfang der übernächsten Zeile
+positionert und der Text 'Zum Weitermachen bitte irgendeine Taste tippen!' ausgege­
+ben. Danach wird so lange gewartet, bis eine Taste getippt wird. Mit 'menuwindow­
+stop (INT CONST zeilenzahl) kann auch noch die Anzahl der Zeilen bestimmt wer­
+den, die vorwärtspositioniert werden soll (Standard: 2 Zeilen).
+
+
+#ib#5.12 Festlegung der Boxpositionen innerhalb des Menus#ie#
+
+In vielen Fällen kann der Programmierer noch entscheiden, an welcher Position
+innerhalb des Menus die Box erscheinen soll (z. B. bei 'menuanswer', 'menuinfo',
+'menuyes', 'menuno', 'menunotice' etc.). Die Positionen sind von 1 bis 5 durchnu­
+meriert und haben folgende Bedeutung:
+
++----------------------------------------+
+I I
++----------------------------------------+
+I I
+I +-----+ +-----+ I
+I I 1 I I 2 I I
+I +-----+ +-----+ I
+I I
+I +-----+ I
+I I 5 I I
+I +-----+ I
+I I
+I +-----+ +-----+ I
+I I 3 I I 4 I I
+I +-----+ +-----+ I
+I I
++----------------------------------------+
+I I
++----------------------------------------+
+#page#
+#ib#5.13 gs-DIALOG-Syntax (Regeln zur Erstellung von Texten)#ie#
+
+Werden Texte als Parameter übergeben, die in einer Box ausgegeben werden sollen,
+so kann dieser Text durch Einfügen von Steuerzeichen noch gestaltet werden, z.B.
+kann der Programmierer so den Zeilenaufbau bestimmen.
+Das System analysiert den eingegebenen Text. Jedesmal, wenn innerhalb des Textes
+der Code "13" erscheint, wird innerhalb der Box auf den nächsten Zeilenanfang
+positioniert. So ist eine Einteilung eines Textes in Zeilen leicht möglich. Soll eine
+Leerzeile eingefügt werden, so geben Sie einfach zweimal den Code "13" ("13""13").
+Bei der Textanalyse wird die jeweilige Zeilenlänge vermerkt. Die Box wird vom System
+gerade so breit gewählt, daß die längste vorkommende "Zeile" im Text gerade noch in
+die Box paßt.
+Aber Vorsicht! Die jeweilige Box kann innerhalb des Menus nur eine Maximalgröße
+annehmen (64 Zeichen breit und 14 Zeilen hoch). Wird von einer "Zeile" diese
+Maximalgröße überschritten, so wird die Zeile abgeschnitten und nur bis zur Maxi­
+malbreite der Box ausgegeben.
+
+Ein Text für eine solche Box könnte z.B. so aussehen:
+
+
+menuinfo (" Informationstexte "13" sind meist"13" zu
+lang!")
+
+
+das ergibt folgende Ausgabe in der Box:
+
+
+ +-----------------------+
+ I I
+ I Informationstexte I
+ I sind meist I
+ I zu lang I
+ I I
+ +-----------------------+
+
+Es ist auch möglich, in solchen Texten Textpassagen invers darzustellen. Dazu wer­
+den in den Text die Codes zum Ein- ("15") und Ausschalten ("14") der Markierung
+eingefügt. Solche markierten Textpassagen dürfen aber nicht über interne Zeilen­
+grenzen (Code "13") hinausgehen. Sie müßten dann am Zeilenende aus- und am
+nächsten Zeilenanfang wiedereingeschaltet werden.
+Soll in der obigen Box das Wort 'Informationstexte' invers dargestellt werden, so wäre
+z.B. folgendes Kommando zu geben:
+
+
+menuinfo (" "15"Informationstexte"14" "13"" +
+ " sind meist"13" zu lang!")
+
+
+#ib#5.14 Thesaurushandling#ie#
+
+Neben den allgemein zur Verfügung gestellten Thesaurusoperationen stellt
+gs-DIALOG einige weitere bereit. Mit der Prozedur 'THESAURUS PROC #ib#infix namen#ie#
+(THESAURUS CONST thes, TEXT CONST infix)' werden aus allen Dateinamen des
+angegebenen Thesaurus die herausgefiltert, die den Wortbestandteil 'infix' enthalten -
+und zwar gleichgültig, an welcher Position! Die herausgefilterten Dateinamen werden
+in einem Thesaurus geliefert. Im Programmsystem 'gs-Herbert und Robbi' mach­
+en wir z.B. Gebrauch davon, wenn wir nur die Landschaften der eigenen Task zur
+Auswahl anbieten wollen:
+
+
+THESAURUS VAR thes :: infix namen (ALL myself, "Flaeche:")
+
+
+Daneben gibt es eine ähnliche Prozedur, mit der man die Dateien eines bestimmten
+Dateityps herausfiltern kann. Mit
+
+
+THESAURUS VAR thes :: infix namen (ALL myself, 1003)
+
+
+werden alle Dateien mit dem Typ '1003' (normale Textfiles) herausgefiltert. Neben
+den beiden gibt es auch noch eine Prozedur, die beide Fälle miteinander koppelt:
+
+
+THESAURUS VAR thes :: infix namen (ALL myself, "gs-MENUKARTE:", 1954)
+
+
+Mit der folgenden Prozedur:
+
+
+THESAURUS VAR thes :: #ib#ohne praefix#ie# (ALL myself, "Flaeche:")
+
+
+wird aus den Dateinamen im angegebenen Thesaurus jeweils der führende Wortbe­
+standteil entfernt. Wir machen z.B. in gs-Herbert und Robbi davon Gebrauch, um
+die Landschaften/Arbeitsfelder anbieten zu können, ohne jeweils den Wortbestandteil
+'Flaeche:' miterscheinen zu lassen.
+
+Ganz nützlich ist auch noch die folgende Informationsprozedur '#ib#not empty#ie#
+(THESAURUS CONST thes)', mit der man z.B. feststellen kann, ob eine Auswahl ohne
+Ankreuzen oder mit <ESC><h> abgebrochen wurde:
+
+
+
+PROC zeilen formatieren:
+ TEXT CONST kopf :: "Textdateien zeilenweise formatieren",
+ hinweis :: "Bitte gewünschte Dateien ankreuzen";
+ THESAURUS VAR dateinamen := menusome (ALL myself, kopf, hinweis,
+ FALSE);
+
+ IF not empty (dateinamen)
+ THEN cursor on;
+ formatiere dateien;
+ cursor off;
+ FI;
+ regenerate menuscreen.
+
+ formatiere dateien:
+ INT VAR zaehler;
+ FOR zaehler FROM 1 UPTO highest entry (dateinamen) REP
+ IF name (dateinamen, zaehler) <> ""
+ THEN lineform (name (dateinamen, zaehler))
+ FI
+ PER
+END PROC zeilen formatieren;
+
+
+
+#ib#5.15 Aktivieren und Deaktivieren von Menupunkten#ie#
+
+Daß Verarbeitungsfunktionen aktiviert und deaktiviert werden können, haben Sie
+schon in unserem Archiv-Pull-Down-Menu gesehen. Deaktivierte Menupunkte sind
+durch ein vorgestelltes '-'-Zeichen gekennzeichnet; diese Menufunktionen werden
+übersprungen, wenn Sie versuchen, darauf zu positionieren.
+
+Zur Aktivierung und Deaktivierung von Menupunkten stehen die Prozeduren '#ib#activate#ie#
+(TEXT CONST menupunktname)' und '#ib#deactivate#ie# (TEXT CONST menupunktname)'
+zur Verfügung. Zu beachten ist, daß diese Prozeduren nicht ständig aufrufbar sind -
+der jeweils angegebene 'menupunktname' muß sich nämlich auf das aktuelle Pull-
+Down-Menu beziehen! Als Menupunktname muß jeweils der Name angegeben wer­
+den, der bei der entsprechenden Menufunktion als 2. Parameter übergeben wurde.
+Ist der angegebene 'menupunktname' im aktuellen Pull-Down-Menu nicht enthalten,
+so wird die Anweisung ignoriert!
+
+Auch bei den Prozeduren' activate (INT CONST punktnummer)' und 'deactivate (INT
+CONST punktnummer)' gilt diese Einschränkung. Die beiden Prozeduren arbeiten
+schneller als die eben aufgezeigten, denn es muß im aktuellen Pull-Down-menu
+nicht mehr nach der jeweiligen Position gesucht werden. Die Positionen werden von
+oben nach unten durchgezählt. Beachten Sie aber unbedingt, daß die Trennlinien
+mitgezählt werden müssen!
+Die Prozeduren "zeigen nur dann Wirkung", wenn sie von einer Verarbeitungsfunk­
+tion des aktuell entfalteten Pull-Down-Menus aus aufgerufen werden (das geschieht
+im Archivmenu z.B. aus den beiden Menufunktionen 'Reservieren' und 'Initialisieren'
+heraus) oder wenn Sie beim Einstieg in ein Pull-Down-Menu bzw. beim Ausstieg
+daraus aufgerufen werden; d.h. aus einer Prozedur heraus, die bei 'oberbegriff' als
+2./3. Parameter in das Menukarten-Generierungsprogramm eingetragen ist. Beim
+Archiv-Pull-Down-Menu besorgt das die Prozedur 'menu archiv grundeinstellung'
+(sehen Sie dazu auch Kapitel 6.1).
+
+
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.6 b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.6
new file mode 100644
index 0000000..a0dd3b5
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.6
@@ -0,0 +1,235 @@
+#block##pageblock#
+#pagenr("%",1)##setcount(1)##count per page#
+#headeven#
+gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#headodd#
+#right#gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#bottomeven#
+#center#____________________________________________________________
+6 - % #right#ERGOS
+#end#
+#bottomodd#
+#center#____________________________________________________________
+ERGOS #right# 6 - %
+#end#
+#ib#6  Einbinden der Datei- und Archivoperationen#ie#
+
+
+Sie haben bereits erfahren, wie Sie eine Menukarte generieren und ankoppeln kön­
+nen. Im letzten Kapitel haben wir Ihnen die Möglichkeiten aufgezeigt, innerhalb des
+Menus einen Dialog mit dem Benutzer zu führen. Sie sind somit in der Lage, Ihre
+eigenen Anwendungen unter der Benutzeroberfläche gs-DIALOG zu erstellen.
+Wie sich gezeigt hat, treten eine Reihe von Verarbeitungsfunktionen in nahezu jeder
+Anwendung auf. Im EUMEL-System benötigt man bei fast allen Anwendungspro­
+grammen auch die Möglichkeiten, Dateien auf dem Archiv zu sichern oder von dort
+zu holen; auch Umbenennen, Kopieren, Drucken, Reorganisieren ... von Dateien
+zählen sicher zu den häufig benötigten Verarbeitungsfunktionen. Wünschenswert ist
+es natürlich, daß in allen Programmen unter einer Benutzeroberfläche die "Stan­
+dard-Verarbeitungsfunktionen" in immer gleicher Weise zur Verfügung stehen!
+
+Dieser Vorteil liegt sogar nicht nur auf der Seite des Anwenders - auch der Anwen­
+dungsprogrammierer profitiert davon: Dann nämlich, wenn er diese Standard-Verar­
+beitungsfunktionen nicht immer neu schreiben muß, sondern auf vorgefertigte
+Prozeduren und natürlich auch auf die zugehörigen Informationstexte zurückgreift.
+
+Wir haben uns deshalb entschlossen, diese Standard-Verarbeitungsfunktionen zum
+Datei- und Archivhandling bereits in das Basissystem gs-DIALOG zu integrieren und
+Ihnen mit gs-Menu-Generator Dateien zur Verfügung zu stellen, in denen die
+Programme zur Einbindung dieser Prozeduren in Ihre eigenen Programmsysteme
+ebenso enthalten sind wie alle dazugehörigen Informationstexte.
+In diesem Kapitel soll nun beschrieben werden, wie Sie diese vorgefertigten Module in
+Ihre Menukarten/Programme einbinden können und was Sie dabei beachten müs­
+sen.
+
+
+#ib#6.1 Einbinden der Archivoperationen#ie#
+
+Auf der von uns gelieferten Diskette 'gs-Menu-Generator', befindet sich auch die
+Datei 'Generatordatei: Archivmenu'. Darin ist das vollständige Menukarten-Generie­
+rungs-Programm zur Generierung der Menukarte 'gs-MENUKARTE: Archiv' inclusive
+aller Informationstexte enthalten. U.a. befindet sich darin eben das folgende Pro­
+gramm:
+
+
+oeffne menukarte ("Archiv");
+oeffne menu ("ARCHIV", "", "menu archiv reservierung aufgeben");
+
+
+oberbegriff ("Dateien");
+
+menufunktion ("v", "Verzeichnis", "menu dateien verzeichnis",
+ dateiverzeichnistext);
+trennlinie;
+menufunktion ("l", "Löschen", "menu dateien loeschen",
+ dateiloeschentext);
+menufunktion ("d", "Drucken", "menu dateien drucken",
+ dateidruckentext);
+trennlinie;
+menufunktion ("k", "Kopieren", "menu dateien kopieren",
+ dateikopierentext);
+menufunktion ("u", "Umbenennen", "menu dateien umbenen­
+ nen",
+ dateiumbenennentext);
+trennlinie;
+menufunktion ("s", "Speicherplatz", "menu dateien speicherplatz",
+ dateispeicherplatztext);
+menufunktion ("a", "Aufräumen", "menu dateien aufraeumen",
+ dateiaufraeumtext);
+
+
+oberbegriff ("Archiv", "menu archiv grundeinstellung (4)",
+ "menu archiv reservierung aufgeben");
+
+menufunktion ("r", "Reservieren", "menu archiv reservieren",
+ archivreserviertext);
+menufunktion ("n", "Neue Diskette", "menu archiv neue diskette",
+ neuediskettetext);
+trennlinie;
+menufunktion ("s", "Schreiben", "menu archiv schreiben",
+ archivschreibtext);
+menufunktion ("c", "Checken", "menu archiv checken",
+ archivchecktext);
+menufunktion ("k", "Kombination", "menu archiv schreibcheck",
+ archivkombinationstext);
+menufunktion ("h", "Holen/Lesen", "menu archiv holen",
+ archivholtext);
+menufunktion ("l", "Löschen", "menu archiv loeschen",
+ archivloeschtext);
+trennlinie;
+menufunktion ("v", "Verzeichnis", "menu archiv verzeichnis",
+ archivverzeichnistext);
+menufunktion ("d", "Drucken", "menu archiv verzeichnis
+ drucken",
+ archivdruckentext);
+trennlinie;
+menufunktion ("i", "Initialisieren", "menu archivinitialisieren",
+ archivinitialisiertext);
+menufunktion ("z", "Zieltask einstellen", "menu archiv zieltask
+ einstellen",
+ archivzieltasktext);
+schliesse menu;
+schliesse menukarte;
+
+
+Wie schon oben erwähnt, sind auch alle Informationstexte in der Datei enthalten, die
+jeweils über den 4. Parameter der Prozeduren 'menufunktion' in die Menukarte
+eingebunden werden. Wir haben Sie hier nicht extra abgedruckt; Sie können ja die
+entsprechende Datei auf der Diskette einsehen!
+
+Zu dem Programm möchten wir jedoch noch einige wichtige Anmerkungen machen,
+damit Sie die entsprechenden Verarbeitungsfunktionen in Ihre Menukarte einbinden
+können.
+
+Wenden wir uns zunächst den Archivoperationen zu. gs-DIALOG stellt die folgenden
+Verarbeitungsfunktionen bereit:
+
+
+ PROC #ib#menu archiv reservieren#ie#,
+ PROC #ib#menu archiv neue diskette#ie#,
+ PROC #ib#menu archiv schreiben#ie#,
+ PROC #ib#menu archiv checken#ie#,
+ PROC #ib#menu archiv schreibcheck#ie#,
+ PROC #ib#menu archiv holen#ie#,
+ PROC #ib#menu archiv loeschen#ie#,
+ PROC #ib#menu archiv verzeichnis#ie#,
+ PROC #ib#menu archiv verzeichnis drucken#ie#,
+ PROC #ib#menu archiv initialisieren#ie#,
+ PROC #ib#menu archiv zieltask einstellen#ie#,
+
+
+Durch diese elf Prozeduren werden die entsprechenden Menufunktionen ausgeführt.
+
+Außerdem werden noch folgende Prozeduren bereitgestellt:
+
+
+ PROC #ib#menu archiv grundeinstellung#ie# (INT CONST ort)
+ PROC #ib#menu archiv reservierung aufgeben#ie#
+
+
+Diesen beiden Prozeduren sollten Sie bei der Einbindung der Archivfunktionen in
+Ihre Menukarten besondere Beachtung schenken. Wie Sie im Programm auf der Seite
+zuvor sehen, taucht die Prozedur 'menu archiv reservierung aufgeben' gleich zweimal
+auf: einmal als 3.Parameter der Prozedur 'oberbegriff' und einmal als 3.Parameter
+der Prozedur 'oeffne menu' - und das aus folgendem Grund:
+
+Wenn der Benutzer die Archivoperationen verläßt, dann sollte automatisch das Archiv
+freigegeben werden, um so - auch bei Multi-User-Betrieb - ein einwandfreies Archiv­
+handling zu gewährleisten. Nun kann der Benutzer das Pull-Down-Menu 'Archiv' aber
+eben auf zweierlei Weise verlassen: Einmal durch den Wechsel in ein anderes Pull-
+Down-Menu der gleichen Menukarte - oder aber er verläßt insgesamt das Menu. Im
+ersten Falle wird das Archiv abgemeldet, weil ja die als 3.Parameter bei 'oberbegriff'
+eingetragene Prozedur ausgeführt wird - im zweiten Falle, weil die als 3.Parameter
+bei 'oeffne menu' eingetragene Prozedur ausgeführt wird. Diese Eintragungen sollten
+Sie auf keinen Fall bei der Einbindung der Archivoperationen vergessen.
+
+Die Prozedur 'menu archiv grundeinstellung (INT CONST ort)' sollte bei den Archiv­
+operationen immer als 2. Parameter in der Prozedur 'oberbegriff' übergeben wer­
+den. Nur wenn diese Prozedur beim Entfallten des Archiv-Pull-Down-Menus ausge­
+führt wird, ist die einwandfreie Funktion des Archivsystems sichergestellt. Dadurch
+geschieht nämlich folgendes:
+
+ 1) Als Zieltask wird das Archiv der eigenen Station eingestellt - unabhängig
+ davon, mit welcher Einstellung das Menu zuvor verlassen wurde.
+
+ 2) Es wird die Zieltask auf dem Bildschirm angezeigt.
+
+ 3) Die entsprechenden Menupunkte werden aktiviert bzw. deaktiviert.
+
+ 4) Es wird festgelegt, an welcher Stelle innerhalb des Menus die Menunotiz zur
+ Anzeige der Zieltask (und ggf. des Archivnamens) ausgegeben wird.
+
+Im Programm oben ist hierfür die Position 4 (rechts unten in der Ecke) gewählt. Wir
+haben diese Festlegung deswegen so getroffen, weil das Archiv-Pull-Down-Menu
+ziemlich weit links auf dem Bildschirm erscheint (es sind nur zwei Oberbegriffe
+eingetragen!). So stören sich Archiv-Pull-Down-Menu und die Menunotiz nicht gegen­
+seitig. In unseren Anwendungssystemen 'gs-Herbert und Robbi' und
+'gs-MP-BAP' haben wir dagegen die Position '3' eingetragen, damit die Menunotiz
+unten links in der Ecke erscheint, weil das Archiv-Pull-Down-Menu ganz rechts auf
+dem Bildschirm entfaltet wird.
+
+Achtung! Uns ist es sehr, sehr wichtig, daß zumindest die Archivfunktionen in allen
+Anwendungen unter gs-DIALOG in gleicher Weise zur Verfügung gestellt werden. Um
+das sicherzustellen, sind die Funktionen so in gs-DIALOG integriert, daß das System
+nur dann reibungslos funktioniert, wenn Sie sich an die eben aufgezeigten Regeln für
+die Einbindung in Ihr Anwendungssystem halten! Für die korrekte Funktionsweise
+muß im Archiv-Pull-Down-Menu auch immer exakt die Reihenfolge (der Aufbau) der
+Verarbeitungsfunktionen eingehalten werden. Auch die Namen sollten immer gleich
+gewählt werden!
+
+Wir hoffen, daß Sie als Programmierer für diese doch etwas rigorose Maßnahme
+Verständnis haben - dafür versichern wir Ihnen, daß wir sehr viel Gedanken und
+Arbeit in die Konstruktion des Archivsystems investiert haben!
+
+Auf eine Einschränkung muß allerdings noch hingewiesen werden:Das Archiv-
+Pull-Down-Menu kann aus technischen Gründen nicht das erste, ganz links in einem
+Menu stehende sein; es kann frühestens unter dem zweiten Oberbegriff in das Menu
+aufgenommen werden! Es ist z.Z. nicht möglich, im ganz links stehenden Pull-
+Down-Menu deaktivierte Menupunkte zu behandeln.
+
+
+#ib#6.2 Einbinden der Dateiopertionen#ie#
+
+gs-DIALOG stellt neben den Archivoperationen standardmäßig auch einige Dateiope­
+rationen bereit. Folgende Prozeduren stehen zur Verfügung:
+
+
+ PROC #ib#menu dateien verzeichnis#ie#,
+ PROC #ib#menu dateien loeschen#ie#,
+ PROC #ib#menu dateien drucken#ie#,
+ PROC #ib#menu dateien kopieren#ie#,
+ PROC #ib#menu dateien umbenennen#ie#,
+ PROC #ib#menu dateien speicherplatz#ie#,
+ PROC #ib#menu dateien aufraeumen#ie#.
+
+
+Die Prozeduren bedürfen in Ihrer Wirkung sicher kaum einer Erklärung. Die Wir­
+kungsweise können Sie einfach ausprobieren, indem Sie die entsprechenden Ver­
+arbeitungsfunktionen im Archiv-Menu einfach einmal aktivieren.
+
+
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.7 b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.7
new file mode 100644
index 0000000..2e6f0ba
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.7
@@ -0,0 +1,367 @@
+#block##pageblock#
+#pagenr("%",1)##setcount(1)##count per page#
+#headeven#
+gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#headodd#
+#right#gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#bottomeven#
+#center#____________________________________________________________
+7 - % #right#ERGOS
+#end#
+#bottomodd#
+#center#____________________________________________________________
+ERGOS #right# 7 - %
+#end#
+#ib#7  Eigene Fenster und Fensteroperationen #ie#
+
+
+In Kapitel 5.11 haben wir Ihnen gezeigt, wie Sie innerhalb des Menus ein Fenster
+(das Menufenster) öffnen können. Innerhalb dieses Bereichs stehen Ihnen die
+wesentlichen Ein- und Ausgabeoperationen zur Verfügung, die Sie auch sonst vom
+Bildschirm her kennen. Auf die Größe des Menufensters können Sie allerdings keinen
+Einfluß nehmen, da die Fenstergröße automatisch vom System (gs-DIALOG) festge­
+legt wird - je nachdem, ob Sie mit einem Menu oder mit geschachtelten Menus
+arbeiten.
+Auf die Einschränkungen bzw. Abweichungen gegenüber den Möglichkeiten, die Sie
+bei Benutzung des ganzen Bildschirms haben, haben wir Sie ausdrücklich hingewie­
+sen: So ist es nicht möglich, den Text innerhalb eines Fensters zu rollen (scrolling);
+statt dessen wird bei Überschreiten der unteren Fenstergrenze der Fensterinhalt
+gelöscht und die Ausgabe oben im "neuen" Fenster fortgesetzt.
+Als wir gs-DIALOG konzipierten und die ersten Anwendungen unter dieser Benutzer­
+schnittstelle entwarfen, fiel uns auf, daß es sehr günstig für die Strukturierung des
+Bildschirms innerhalb der Anwendungsprogramme ist, wenn man den Bildschirm in
+Bereiche (Fenster) einteilen und den Fenstern entsprechende Funktionen zuweisen
+kann (z.B. Eingabe-, Informations-, Kontroll-Fenster etc.). Sinnvoll ist es dann, auch
+die entsprechenden Ein-/Ausgaberoutinen zur Verfügung zu haben, die sich auf die
+einzelnen Fenster beziehen.
+
+In diesem Kapitel werden wir Ihnen zeigen, wie Sie eigene Fenster definieren und
+darin Ein- und Ausgaben realisieren können. Für die Fenster gelten die gleichen
+Einschränkungen wie für das Menufenster - d.h. ein Rollen des Textes (scrolling) ist
+nicht möglich. Die Fensterposition und -größe innerhalb des Bildschirms können Sie
+aber festlegen.
+
+
+#ib#7.1 Definition von Fenstern ('window')#ie#
+
+Das Fensterkonzept in gs-DIALOG ist sehr einfach gehalten: Durch die Definition
+des Fenters werden nur Bereiche auf dem Bildschirm festgelegt, auf die sich
+bestimmte Ein-/Ausgabeprozeduren beziehen.
+
+Wir wollen Ihnen die Verwendung von Fenstern wieder an einem kleinen Beispiel
+verdeutlichen - bleiben wir dazu bei unserer Textverarbeitung: Für die Seitenforma­
+tierung müßte der Benutzer den oberen und linken Rand, die Schreibfeldbreite und
+die Schreibfeldlänge festlegen. Dazu wollen wir dem Benutzer die aktuellen Werte
+anzeigen und ggf. eine Neueinstellung vornehmen lassen. Ein Programm dazu könnte
+so aussehen:
+
+
+WINDOW VAR info :: window ( 2, 2, 32, 9),
+ frage :: window (36, 2, 40, 3),
+ daten :: window (36, 7, 40, 4);
+
+TEXT VAR oberer rand :: " 2.54",
+ linker rand :: " 2.54",
+ feldbreite :: "16.00",
+ feldlaenge :: "24.50";
+
+
+zeige aktuelle werte an;
+frage nach neueinstellung.
+
+zeige aktuelle werte an:
+ page; show (info);
+ out (info, center (info, invers ("Aktuell eingestellte Werte:")));
+ cursor (info, 2, 4);
+ out (info, "Oberer Rand : " + oberer rand + " cm");
+ cursor (info, 2, 5);
+ out (info, "Linker Rand : " + linker rand + " cm");
+ cursor (info, 2, 7);
+ out (info, "Schreibfeldbreite : " + feldbreite + " cm");
+ cursor (info, 2, 8);
+ out (info, "Schreibfeldlänge : " + feldlaenge + " cm").
+
+frage nach neueinstellung:
+ show (frage);
+ cursor (frage, 1, 1);
+ out (frage, center (frage, invers ("Papierformat einstellen:")));
+ cursor (frage, 2, 3);
+ IF yes ("Neueinstellung vornehmen")
+ THEN neue werte erfragen
+ FI.
+
+neue werte erfragen:
+ show (daten);
+ erfrage oberen rand;
+ erfrage linken rand;
+ erfrage feldbreite;
+ erfrage feldlaenge.
+
+erfrage oberen rand:
+ REAL VAR neuer oberer rand;
+ cursor (daten, 1, 1);
+ out (daten, center (daten, invers ("Oberen Rand einstellen:")));
+ cursor (daten, 2, 3);
+ out (daten, "Bitte den neuen Wert: ");
+ get (daten, neuer oberer rand);
+ oberer rand := text (neuer oberer rand, 5, 2);
+ cursor (info, 23, 4);
+ out (info, oberer rand).
+
+erfrage linken rand:
+ (* analog zu 'erfrage oberen rand *).
+
+erfrage feldbreite:
+ (* analog zu 'erfrage oberen rand *).
+
+erfrage feldlaenge:
+ (* analog zu 'erfrage oberen rand *).
+
+
+
+Am Anfang des Programms werden drei Fenster definiert. Das "Infofenster" erscheint
+links oben auf dem Bildschirm, in ihm werden die aktuell eingestellten Werte ange­
+zeigt. Das "Fragefenster" erscheint neben dem ersten Fenster oben rechts auf dem
+Bildschirm.
+Beantwortet der Benutzer die dort ausgegebene Frage 'Neueinstellung vornehmen
+(j/n)?' mit 'ja', dann erscheint unter dem zweiten Fenster ein drittes
+("Datenfenster"). Innerhalb dieses Fensters können nacheinander die neuen Werte
+eingelesen werden (nicht alle Prozeduren sind hier ausgeführt!).
+
+Die Definition eines Fensters erfolgt in folgender Weise:
+
+ #ib#WINDOW#ie# VAR fenstername :: #ib#window#ie# ( x, y, xsize, ysize);
+
+Der Fenstervariablen wird durch 'window' eine Größe zugeordnet. Mit den ersten
+beiden Werten legen Sie die linke obere Ecke des Fensters ('x' bezeichnet die Spalten,
+'y' die Zeilen) auf dem Gesamtbildschirm fest. Mit 'xsize' bestimmen Sie die Fenster­
+breite (Spaltenzahl), mit 'ysize' die Höhe des Fensters (Zeilenzahl). Der Fenster­
+cursor hat die Position (1,1).
+Die linke obere Ecke des ersten Fensters im Programm hat also die Position ( 2, 2).
+Das Fenster ist 32 Spalten breit und 9 Zeilen hoch; es kann unter dem Namen 'info'
+angesprochen werden.
+Bei der Festlegung der Fenstermaße ist der Rahmen des Fensters nicht berücksich­
+tigt - er gehört nicht zum Fenster dazu! Haben Sie die Absicht, das Fenster mit
+Rahmen auszugeben, dann sollten Sie das bei der Fensterdefinition berücksichtigen.
+Wir haben es im Beispielprogramm auch gemacht: Die linke obere Ecke hat gerade
+die Position (2,2) erhalten, damit noch der Rahmen Platz hat. Mit Rahmen ist unser
+Fenster also 34 Spalten breit und 11 Zeilen hoch. Die linke obere Ecke des zweiten
+Fensters ('frage') legen wir deshalb in die 36. Spalte und 2. Zeile, damit auch hier
+Platz für den Rahmen bleibt.
+Eine wichtige Einschränkung sollten Sie unbedingt berücksichtigen: Da manche
+Terminals mit Beschreiben der Position (80,24) automatisch den Bildschirm
+löschen, haben wir die maximale Ausdehnung eines umrandeten Fensters auf (2, 2,
+77, 22) festgelegt. Überschreiten Sie irgendwo diese Grenzen, dann wird kein Rah­
+men mehr erzeugt. Der Rahmen wird auch dann nicht erzeugt, wenn er in der 0.
+Zeile, 0.Spalte, 25 Zeile oder 80 Spalte zu liegen käme - erst recht natürlich nicht,
+wenn diese Werte noch unter- bzw. überschritten werden.
+
+
+#ib#7.2 Anzeigen/Löschen von Fenstern#ie#
+ ('#ib#show#ie#', '#ib#page#ie#', '#ib#erase#ie#', '#ib#out frame#ie#')
+
+Mit dem Befehl 'show (WINDOW VAR w)' wird das Fenster 'w' angezeigt. Der Fenster­
+variablen müssen natürlich zuvor die Maße des Fensters zugewiesen sein. Durch den
+Befehl wird um den angegebenen Fensterbereich ein Rahmen gezogen und der
+"Innenbereich" des Fensters gelöscht. Möchten Sie das Fenster ohne Rahmen ange­
+zeigt haben, so verwenden Sie nur den Befehl 'page (WINDOW VAR w)'. Durch die­
+sen Befehl wird nur der "Innenbereich" des Fensters gelöscht.
+Haben Sie das Fenster einmal mit 'show' ausgegeben und wollen den Fensterinhalt
+löschen, so verwenden Sie auch hier den Befehl 'page (WINDOW VAR w)', denn der
+Rahmen braucht ja nicht erneut ausgegeben zu werden.
+Möchten Sie ein Fenster und den zugehörigen Rahmen löschen, dann steht Ihnen der
+Befehl 'erase (WINDOW VAR w) zur Verfügung: Durch den Befehl wird sowohl der
+"Innenbereich" des Fensters als auch der Rahmen gelöscht.
+Sie können natürlich auch selbst einen Rahmen um ein Fenster setzen. Dafür steht
+der Befehl 'out frame (WINDOW VAR w)' zur Verfügung. Der Rahmen wird ebenfalls
+um den durch 'w' bestimmten Fensterbereich gezogen - der "Innenbereich" bleibt
+unberührt!
+
+Sollten Sie ein Fenster mit dem Befehl 'show' ausgeben (oder mit 'out frame' einen
+Rahmen erzeugen) wollen, aber kein Rahmen auf dem Bildschirm erscheint, so
+haben Sie die zulässigen Fenstergrenzen überschritten. Sehen Sie dazu auch Kapitel
+7.1.
+
+
+#ib#7.3 Operationen innerhalb des Fensters#ie#
+
+Innerhalb des selbstdefinierten Fensters stehen Ihnen die gleichen Operationen zur
+Verfügung wie innerhalb des Menufensters. Bezieht sich eine Operation auf ein
+Fenster, so wird der interne Fensterbezeichner als erster Parameter übergeben.
+
+
+#ib#7.3.1 Datei anzeigen/editieren #ie#('#ib#edit#ie#', '#ib#show#ie#')
+
+Zum Anzeigen einer Datei steht die Prozedur 'show' zur Verfügung. Dabei kann
+einmal ein FILE angegeben werden ('show (WINDOW VAR w, FILE VAR f)') oder aber
+der Name der anzuzeigenden Datei ('show (WINDOW VAR w, TEXT VAR dateiname)').
+Die Datei kann nur eingesehen, nicht aber schreibend verändert werden.
+Die Prozedur 'edit' gibt es ebenfalls in den zwei Ausprägungen. Hier kann die Datei
+im Gegensatz zu 'show' auch schreibend verändert werden.
+Durch diesen Befehl wird jeweils innerhalb des angegebenen Fensters die Datei
+ausgegeben. Sofern die Lage des Fensters es zuläßt, wird automatisch ein Rahmen
+um das Dateifenster gezogen.
+
+
+#ib#7.3.2 Positionierungen im Fenster#ie#
+ ('#ib#cursor#ie#', '#ib#get cursor#ie#', '#ib#line#ie#', '#ib#remaining lines#ie#')
+
+Mit 'cursor (WINDOW VAR w, INT CONST spalte, zeile)' können Sie den Cursor inner­
+halb des angegebenen Fensters positionieren. Werden dabei die Fenstergrenzen über-
+oder unterschritten, so wird der Fensterinhalt gelöscht und auf die Position (1, 1)
+innerhalb des Fensters positioniert.
+Mit der Prozedur 'get cursor (WINDOW VAR w, INT VAR spalte, zeile)' können Sie die
+aktuelle Cursorposition innerhalb des angegebenen Fensters erfragen.
+Wollen Sie an den Anfang der nächsten Zeile positionieren, dann verwenden Sie den
+Befehl 'line (WINDOW VAR w)' - wollen Sie gleich mehrere Zeilen vorwärtspositionie­
+ren, dann benutzen Sie den Befehl 'line (WINDOW VAR w, INT VAR anzahl zeilen)'.
+Wird allerdings bei einem der beiden letzten Befehle die untere Fenstergrenze über­
+schritten, so wird der Fensterinhalt gelöscht und die Operation in der ersten Zeile des
+neuen Fensters fortgesetzt.
+Die Informations-Prozedur 'remaining lines (WINDOW VAR w)' liefert Ihnen die
+Anzahl der unterhalb der aktuellen Zeile noch im Fenster vorhanden Zeilen.
+
+
+#ib#7.3.3 Ein- und Ausgaben innerhalb des Fensters#ie#
+ ('#ib#out#ie#', '#ib#put#ie#', '#ib#putline#ie#', '#ib#get#ie#', '#ib#getline#ie#', '#ib#yes#ie#', '#ib#no#ie#')
+
+Mit der Prozedur 'out (WINDOW VAR w, TEXT CONST text)' können Sie einen Text
+innerhalb des angegebenen Fensters ausgeben. Paßt der Text nicht mehr in die
+aktuelle Zeile, so wird er in der nächsten Zeile fortgesetzt.
+Bedenken Sie, daß innerhalb der Fenster kein Wortumbruch realisiert ist. Ebenso­
+wenig ist das Rollen (scrolling) des Fensterinhalts möglich: Erfolgt die Ausgabe eines
+Textes über die untere Fenstergrenze hinaus, so wird der Fensterinhalt gelöscht und
+die Ausgabe an der Position (1, 1) des Fensters fortgesetzt.
+Zur Ausgabe von Texten stehen noch die beiden Prozeduren 'put (WINDOW VAR w,
+TEXT CONST text)' und 'putline (WINDOW VAR w, TEXT CONST text)' zur Verfügung.
+Bei erstgenannter Prozedur wird gegenüber 'out' an die Ausgabe noch ein Leerzei­
+chen angehängt, bei der zweiten wird zusätzlich an den Anfang der nächsten Zeile
+positioniert.
+Zahlenwerte können mit den Prozeduren 'put (WINDOW VAR w, INT CONST intwert)'
+und 'put (WINDOW VAR w, REAL CONST realwert)' ausgegeben werden. An die
+Zahlenwerte wird jeweils ein Leerzeichen angehängt.
+
+Für das Einlesen von Werten steht die Prozedur 'get' in mehreren Varianten zur
+Verfügung. Mit 'get (WINDOW VAR w, TEXT VAR text)' kann ein Text an der aktuellen
+Position des Fensters eingelesen werden. Stehen in der aktuellen Zeile des Fensters
+weniger als 5 Zeichenpositionen für die Eingabe zur Verfügung, so wird automatisch
+auf den Anfang der nächsten Zeile innerhalb des Fensters positioniert.
+Über einen dritten Parameter können noch zusätzliche Festlegungen getroffen wer­
+den: Soll die Eingabe noch durch weitere Zeichen (außer Positionierungszeichen)
+abgeschlossen werden können, so werden die Zeichen als TEXT übergeben( 'get
+(WINDOW VAR w, TEXT VAR text, TEXT CONST separator)'), soll die Maximallänge des
+einzugebenden Textes festgelegt sein, so wird diese als INT übergeben ('get (WINDOW
+VAR w, TEXT VAR text, INT CONST laenge)').
+
+Mit den Prozeduren 'get (WINDOW VAR w, INT VAR intwert)' und 'get (WINDOW VAR
+w, INT VAR realwert)' können auch Zahlenwerte innerhalb des Fensters eingelesen
+werden.
+
+Damit dem Anwender auch Vorschläge für der Eingabe gemacht werden können,
+steht die Prozedur 'editget' in zwei Variationen zur Verfügung. Bei 'editget' (WINDOW
+VAR w, TEXT VAR ausgabe) wird 'ausgabe zum Editieren ausgegeben. Daneben
+existiert noch ein 'editget' mit 7 Parametern, der detailliert bei der Zusammenstel­
+lung der Befehle erläutert ist.
+
+Ebenso wie auf dem Gesamtbildschirm und innerhalb des Menufensters stehen auch
+hier die beiden Prozeduren 'yes (WINDOW VAR w, TEXT CONST frage)' und 'no
+(WINDOW VAR w, TEXT CONST frage)' zur Verfügung.
+
+
+#ib#7.3.4 Weitere Prozeduren #ie#('#ib#center#ie#', '#ib#stop#ie#')
+
+Mit 'center (WINDOW VAR w, TEXT CONST text)' werden vor dem angegebenen Text
+so viele Leerzeichen angehängt, daß der Text zentriert in der aktuellen Fensterzeile
+ausgegeben wird - wenn der Cursur bei der Ausgabe auf der ersten Position der Zeile
+steht. Dabei werden aber bereits vorhandene Zeileninhalte überschrieben.
+
+Durch die Prozedur 'stop (WINDOW VAR w)' wird innerhalb des angegebenen Fen­
+sters an den Anfang der übernächsten Zeile positioniert und der Text " Zum Weiter­
+machen bitte irgendeine Taste tippen!" ausgegeben. Möchten Sie nicht an den Anfang
+der übernächsten Zeile positionieren, so können Sie die Anzahl der Zeilen auch
+explizit festlegen durch 'stop (WINDOW VAR w, INT CONST zeilenzahl).
+
+
+#ib#7.4 Boxoperationen#ie#
+
+Innerhalb des Menufensters (sehen Sie Kapitel 5) stehen Ihnen die Prozeduren
+'menuanswer', 'menuinfo', 'menuone', 'menusome', 'menuanswerone',
+'menuanswersome', 'menuyes', 'menuno', 'menualternative', 'write menunotice' und
+'menufootnote' zur Verfügung. Alle diese Prozeduren bezogen sich auf das von
+gs-DIALOG automatisch gesetzte Menufenster.
+Auch innerhalb der von Ihnen selbst definierten Fenster können Sie auf ähnliche
+Prozeduren zurückgreifen. Da wir die eben genannten Prozeduren in Kapitel 5 sehr
+detailliert beschrieben haben, werden wir hier nur auf die entsprechenden
+Beschreibungen verweisen und ggf. die Besonderheiten/Abweichnungen erwähnen.
+Zu beachten ist, daß innerhalb des Fensters weder die oberen noch die unteren zwei
+Zeilen von der "Box" beschrieben werden. Die oberen bleiben ständig frei - die unter­
+en werden zur Ausgabe der zugehörigen Benutzerinformation (Fußnote) benutzt -
+das sollten Sie bei der Festlegung der Fenstergröße bzw. bei der Länge der zu über­
+gebenden Texte berücksichtigen. Bei der Übergabe der Texte müssen Sie sich an die
+gs-DIALOG Syntax-Regeln halten, die in Kapitel 5.12 beschrieben sind.
+
+Die Prozedur '#ib#boxanswer#ie# (WINDOW VAR w, TEXT CONST ausgabetext, antwortvorgabe,
+INT CONST position)' arbeitet wie die Prozedur 'menuanswer (TEXT CONST ausgabe­
+text, antwortvorgabe, INT CONST position)' nur innerhalb des Fensters 'w' (sehen Sie
+auch Kapitel 5.1).
+
+Die Prozedur '#ib#boxinfo#ie#' gibt es in zwei Ausführungen: 'boxinfo (WINDOW VAR w, TEXT
+CONST text)' arbeitet wie 'menuinfo (TEXT CONST text)', allerdings auf dem angege­
+benen Fenster. Bei 'boxinfo (WINDOW VAR w, TEXT CONST text, INT CONST position,
+timelimit)' kann über den dritten Parameter noch die relative Position im angegebe­
+nen Fenster (sehen Sie dazu Kapitel 5.12) und über den vierten Parameter die Zeit­
+spanne festgelegt werden, für die die Information erscheint (sehen Sie auch Kap.
+5.2).
+
+Die Prozedur '#ib#boxone#ie# (WINDOW VAR w, THESAURUS CONST thesaurus, TEXT CONST
+text1, text2, BOOL CONST mit reinigung)' arbeitet wie die Prozedur 'menuone
+(THESAURUS CONST thesaurus, TEXT CONST text1, text2, BOOL CONST mit reini­
+gung)'. Zu bedenken ist hier, daß die Auswahl innerhalb des Fensters Platz finden
+muß. Der Aufruf dieser Prozedur ist daher nur möglich, wenn das angegebene Fen­
+ster mindestens 60 Spalten breit und 17 Zeilen hoch ist. Ansonsten kommt es zu
+einer Fehlermeldung (sehen Sie auch Kap. 5.3).
+
+Die Prozedur '#ib#boxsome#ie# (WINDOW VAR w, THESAURUS CONST thesaurus, TEXT
+CONST text1, text2, BOOL CONST mit reinigung)' arbeitet wie die Prozedur
+'menusome (THESAURUS CONST thesaurus, TEXT CONST text1, text2, BOOL CONST
+mit reinigung)'. Hinsichtlich der Fenstergröße gelten die gleichen Einschränkungen
+wie bei 'boxone' (sehen Sie auch Kap. 5.4).
+
+Die Prozeduren '#ib#boxanswerone#ie#' und '#ib#boxanswersome#ie#' entsprechen den Prozeduren
+'menuanswerone' und 'menuanswersome'; es wird nur zusätzlich jeweils als erster
+Parameter das aktuelle Fenster übergeben. Hinsichtlich der Fenstergröße gelten die
+gleichen Einschränkungen wie bei 'boxone' (sehen Sie auch Kap. 5.5).
+
+Die Prozeduren '#ib#boxyes#ie#', '#ib#boxno#ie#' und '#ib#boxalternative#ie#' entsprechen den Prozeduren
+'menuyes', 'menuno' und 'menualternative'; es wird nur zusätzlich jeweils als erster
+Parameter das aktuelle Fenster übergeben (sehen Sie auch Kap. 5.6 und 5.7).
+
+Die Prozedur '#ib#boxnotice#ie#' unterscheidet sich von der Prozedur 'write menunotice'
+erheblich: Letztgenannte Prozedur hat zwei Parameter. Durch den ersten wird der
+Ausgabetext übergeben, mit dem zweiten wird die relative Position innerhalb des
+Menubildschirms festgelegt. Sowohl Text als auch Position werden vom System ge­
+speichert. Bei jedem Neuaufbau eines Pull-Down-Menus oder des Menubildschirms
+wird die Notiz neu mitaufgebaut.
+Die Prozedur 'boxnotice (WINDOW VAR w, TEXT CONST text, INT CONST position, INT
+VAR x, y, xsize, ysize) dagegen hat sieben Parameter. Über den ersten wird das aktuel­
+le Fenster festgelegt. Die beiden nächsten Parameter entsprechen den beiden Para­
+metern von 'write menunotice'. Über die letzten vier Parameter werden die Posi­
+tion/Maße der Box geliefert, die ja erst durch das Aussehen der übergebenen Texte
+festgelegt werden. Weder Text noch Position der Boxnotiz werden vermerkt. Wollen Sie
+die Notiz löschen, so verwenden Sie eine der Prozeduren '#ib#page#ie# (INT CONST x, y, xsize,
+ysize)' oder '#ib#page up#ie# (INT CONST x, y, xsize, ysize)'. Im ersten Falle erscheint es dem
+Betrachter, als ob die Box von oben nach unten "aufgerollt" würde, im zweiten Falle
+von unten nach oben.
+
+Mit den Prozeduren '#ib#out footnote#ie# (WINDOW VAR w, TEXT CONST text)' wird in der
+untersten Zeile des Fensters 'w' der angegebene Text ausgegeben. In der vorletzten
+Zeile des Fensters wird eine Trennlinie ausgegeben. Die Fußnote incl. der Trennline
+kann durch den Befehl '#ib#erase footnote#ie#' gelöscht werden.
+
+
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.8 b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.8
new file mode 100644
index 0000000..66eb6cf
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.8
@@ -0,0 +1,1676 @@
+#block##pageblock#
+#pagenr("%",1)##setcount(1)##count per page#
+#headeven#
+gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#headodd#
+#right#gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#bottomeven#
+#center#____________________________________________________________
+8 - % #right#ERGOS
+#end#
+#bottomodd#
+#center#____________________________________________________________
+ERGOS #right# 8 - %
+#end#
+#ib#8  Kurzbeschreibung der Befehle #ie#
+
+
+Durch #u#(*)#e# gekennzeichnete Prozeduren stehen (zumindest in der hier dokumentier­
+ten Form) erst ab gs-DIALOG Version 1.1 zur Verfügung!
+
+
+#ib#activate#ie#
+PROC activate (TEXT CONST punktname):
+
+Zweck: Mit der Prozedur kann ein (deaktivierter) Menupunkt im aktuellen
+ Pull-Down-Menu aktiviert, d.h. zur Ausführung freigegeben werden. Das
+ '-'-Zeichen vor der Punktbezeichnung verschwindet auf dem Bildschirm,
+ statt dessen erscheint das Zeichen, über den die Menufunktion direkt
+ aktivierbar ist. 'punktname' muß eine Punktbezeichnung sein, die genau
+ in der angegebenen Schreibweise im aktuellen Pull-Down-Menu vorhan­
+ den ist (über den 2. Parameter der Prozedur 'menufunktion' in die
+ Menukarte eingetragen wurde) - ansonsten wird diese Anweisung igno­
+ riert. Die Prozedur "zeigt nur dann Wirkung", wenn sie aus einer Verar­
+ beitungsfunktion des aktuell entfalteten Pull-Down-Menus heraus oder
+ durch die "Startprozedur"/"Leaveprozedur" des aktuellen Pull-Down-
+ Menus (sehen Sie auch 'oberbegriff') aufgerufen wird.
+ Die Veränderung wird nicht sofort auf dem Bildschirm angezeigt, sondern
+ erst, wenn das Pull-Down-Menu das nächste Mal vom System regeneriert
+ wird; ansonsten muß das Kommando 'refresh submenu' gegeben werden.
+
+
+PROC activate (INT CONST punktposition):#u#(*)#e#
+Zweck: arbeitet wie obiges 'activate', allerdings werden die Menupunkte nicht
+ über ihre Bezeichnung, sondern über ihre Position im (aktuellen) Pull-
+ Down-Menu identifiziert. Die Positionen sind von oben nach unten durch­
+ numeriert. Beachten Sie, daß Trennlinien eine Position belegen und
+ mitgezählt werden. Die Prozedur arbeitet schneller als obige!
+
+
+#ib#anwendungstext#ie#
+TEXT PROC anwendungstext (INT CONST zeilennummer):
+
+Zweck: Mit diesem Befehl können Texte angesprochen (geholt) werden, die in die
+ Menukarte ausgelagert wurden. Es wird der Text aus der angekoppelten
+ Menukarte geliefert, der bei der "Einlagerung" in der Zeile 'zeilen­
+ nummer' stand.
+Fehler: Kein Text vorhanden! (In der angekoppelten Menukarte ist unter der
+ 'zeilennummer' kein Anwendungstext eingetragen.)
+ Bitte achten Sie auf folgendes: Wenn Sie eine neue Menukarte generiert
+ haben, muß diese erst an die aktuelle Task gekoppelt werden, bevor Sie
+ auf die dort eingetragenen (Anwendungs-)Texte zugreifen können (z.B.
+ mit 'testinstallation').
+
+
+#ib#areax#ie#
+INT PROC areax (WINDOW VAR w)
+Zweck: Liefert den Wert 'x' des Fensters w.
+
+
+#ib#areaxsize#ie#
+INT PROC areaxsize (WINDOW VAR w)
+Zweck: Liefert den den Wert 'xsize' des Fensters w.
+
+
+#ib#areay#ie#
+INT PROC areay (WINDOW VAR w)
+Zweck: Liefert den den Wert 'y' des Fensters w.
+
+
+#ib#areaysize#ie#
+INT PROC areaysize (WINDOW VAR w)
+Zweck: Liefert den den Wert 'ysize' des Fensters w.
+
+
+#ib#balken links#ie#
+TEXT PROC balken links:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" als "linker
+ Balken" (̄) ausgegeben wird.
+
+
+PROC balken links (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" als "linker Balken" ausgegeben werden soll.
+
+
+#ib#balken oben#ie#
+TEXT PROC balken oben:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" als "oberer
+ Balken" (�) ausgegeben wird.
+
+
+PROC balken oben (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" als "oberer Balken" ausgegeben werden soll.
+
+
+#ib#balken rechts#ie#
+TEXT PROC balken rechts:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" als "rechter
+ Balken" (̃) ausgegeben wird.
+
+
+PROC balken rechts (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" als "rechter Balken" ausgegeben werden soll.
+
+
+#ib#balken unten#ie#
+TEXT PROC balken unten:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" als "unterer
+ Balken" (̂) ausgegeben wird.
+
+
+PROC balken unten (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" als "unterer Balken" ausgegeben werden soll.
+
+
+#ib#boxalternative#ie#
+INT PROC boxalternative (WINDOW VAR w,
+ TEXT CONST infotext,
+ auswahlliste,
+ zusatztasten,
+ INT CONST position,
+ BOOL CONST mit abbruch):
+
+Zweck: Vergl. 'menualternative'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menualternative' automatisch gesetzt wird. Der 'infotext' muß
+ den gs-DIALOG-Syntax-Regel gehorchen! Die 'auswahlliste' muß nach
+ festen Regeln erstellt werden (sehen Sie Kap. 5.7)
+
+
+#ib#boxanswer#ie#
+TEXT PROC boxanswer (WINDOW VAR w,
+ TEXT CONST infotext,
+ vorgabe,
+ INT CONST  position):
+
+Zweck: Vergl. 'menuanswer'. Hier wird nur zusätzlich das Fenster festgelegt, das
+ bei 'menuanswer' automatisch gesetzt wird. Der 'infotext' muß den
+ gs-DIALOG-Syntax-Regel gehorchen!
+
+
+#ib#boxanswerone#ie#
+TEXT PROC boxanswerone (WINDOW VAR w,
+ TEXT CONST infotext,
+ vorgabe,
+ THESAURUS CONST thes,
+ TEXT CONST ueberschrift,
+ hinweis,
+ BOOL CONST mit reinigung):
+
+Zweck: Vergl. 'menuanswerone'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuanswerone' automatisch gesetzt wird.
+Fehler: Fenster für Auswahl zu klein (x < 56, y < 15)
+
+
+#ib#boxanswersome#ie#
+THESAURUS PROC boxanswersome (WINDOW VAR w,
+ TEXT CONST infotext,
+ vorgabe,
+ THESAURUS CONST thes,
+ TEXT CONST ueberschrift,
+ hinweis,
+ BOOL CONST mit reinigung):
+
+Zweck: Vergl. 'menuanswersome'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuanswersome' automatisch gesetzt wird.
+Fehler: Fenster für Auswahl zu klein (x < 56, y < 15)
+
+
+#ib#boxinfo#ie#
+PROC boxinfo (WINDOW VAR w, TEXT CONST infotext,
+ INT CONST position, timelimit):
+
+Zweck: Vergl. 'menuinfo'. Hier wird nur zusätzlich das Fenster festgelegt, das bei
+ 'menuinfo' automatisch gesetzt wird. Der 'infotext' muß den gs-DIALOG-
+ Syntax-Regel gehorchen!
+
+
+PROC boxinfo (WINDOW VAR w, TEXT CONST infotext):
+
+ wirkt wie: boxinfo (w, infotext, 5, maxint)
+
+
+#ib#boxno#ie#
+BOOL PROC boxno (WINDOW VAR w,
+ TEXT CONST frage,
+ INT CONST  position):
+
+ wirkt wie: NOT boxyes (w, frage, position)
+
+
+#ib#boxnotice#ie#
+PROC boxnotice (WINDOW VAR w,
+ TEXT CONST infotext,
+ INT CONST  position
+ INT VAR x, y, xsize, ysize):
+
+Zweck: Mit 'w' wird das aktuelle Fenster festgelegt. In 'infotext' wird der Text
+ übergeben, der als Notiz ausgegeben werden soll, der Text muß den
+ gs-DIALOG-Syntax-Regeln entsprechen. Mit 'position' wird die relative
+ Lage innerhalb des Fensters 'w' bestimmt. Über die letzten vier Parameter
+ werden die Position/Maße der Box geliefert. Weder Text noch Position
+ werden vermerkt.
+
+
+#ib#boxone#ie#
+TEXT PROC boxone (WINDOW VAR w,
+ THESAURUS CONST thes,
+ TEXT CONST ueberschrift,
+ hinweis,
+ BOOL CONST mit reinigung):
+
+Zweck: Vergl. 'menuone'. Hier wird nur zusätzlich das Fenster festgelegt, das bei
+ 'menuone' automatisch gesetzt wird.
+Fehler: Fenster für Auswahl zu klein (x < 56, y < 15)
+
+
+#ib#boxsome#ie#
+THESAURUS PROC boxsome (WINDOW VAR w,
+ THESAURUS CONST thes,
+ TEXT CONST ueberschrift,
+ hinweis,
+ BOOL CONST mit reinigung):
+
+Zweck: Vergl. 'menusome'. Hier wird nur zusätzlich das Fenster festgelegt, das
+ bei 'menusome' automatisch gesetzt wird.
+Fehler: Fenster für Auswahl zu klein (x < 56, y < 15)
+
+
+#ib#boxyes#ie#
+BOOL PROC boxyes (WINDOW VAR w,
+ TEXT CONST frage,
+ INT CONST  position):
+
+Zweck: Vergl. 'menuyes'. Hier wird nur zusätzlich das Fenster festgelegt, das bei
+ 'menuyes' automatisch gesetzt wird. Die 'frage' muß den gs-DIALOG-
+ Syntax-Regel gehorchen!
+
+
+#ib#center#ie#
+TEXT PROC center (WINDOW VAR w, TEXT CONST text):
+
+Zweck: Vergl. 'menuwindowcenter'. Hier wird nur zusätzlich das Fenster festge­
+ legt, das bei 'menuwindowcenter' automatisch gesetzt wird.
+
+
+TEXT PROC center (INT CONST laenge,
+ TEXT CONST text):
+
+Zweck: "Ummantelt" 'text' mit Leerzeichen, so daß 'text' etwa in der Mitte zu
+ stehen kommt. Der gelieferte Text hat die Länge 'laenge'.
+
+
+TEXT PROC center (TEXT CONST text):
+
+ wirkt wie: center (79, text)
+
+
+#ib#clear buffer#ie#
+PROC clear buffer
+
+Zweck: Leert den Zeichenpuffer
+
+
+#ib#clear buffer and count#ie#
+INT PROC clear buffer and count (TEXT CONST
+ zeichen):
+
+Zweck: Leert den Zeichenpuffer und liefert die Häufigkeit des Vorkommens von
+ 'zeichen' im Zeichenpuffer.
+
+
+#ib#current menuwindow#ie#
+WINDOW PROC current menuwindow:
+
+Zweck: liefert das aktuelle Menufenster (die Einzelwerte können dann mit
+ 'areax', 'areay', 'areaxsize' und 'areaysize' erfragt werden).
+
+
+#ib#cursor#ie#
+PROC cursor (WINDOW VAR w, INT CONST spalte,
+ zeile):
+
+Zweck: Vergl. 'menuwindowcursor'. Hier wird nur zusätzlich das Fenster festge­
+ legt, das bei 'menuwindowcursor' automatisch gesetzt wird.
+
+
+#ib#cursor off#ie#
+PROC cursor off:
+
+Zweck: Sofern die EUMEL-Installation die Möglichkeit bietet, wird der Cursor aus
+ dem Bildschirm ausgeblendet.
+ Wenn neue Verarbeitungsfunktionen entwickelt werden, sollte zu Beginn
+ der Cursor eingeschaltet und nach Abschluß der Cursor wieder ausge­
+ schaltet werden (sehen Sie auch Kap. 5.1).
+
+
+PROC cursor off (TEXT CONST zeichenkette):
+
+Zweck: Neufestlegung der 'zeichenkette', die ausgegeben werden soll, um bei der
+ aktuellen EUMEL-Installation den Cursor auf den Befehl 'cursor off' hin
+ auszuschalten.
+
+
+#ib#cursor on#ie#
+PROC cursor on:
+
+Zweck: Sofern die EUMEL-Installation die Möglichkeit bietet, wird der Cursor auf
+ dem Bildschirm angezeigt. Wenn neue Verarbeitungsfunktionen entwik­
+ kelt werden, sollte zu Beginn der Cursor eingeschaltet und nach Abschluß
+ der Cursor wieder ausgeschaltet werden (sehen Sie auch Kap. 5.1).
+
+
+PROC cursor on (TEXT CONST zeichenkette):
+
+Zweck: Neufestlegung der 'zeichenkette', die ausgegeben werden soll, um bei der
+ aktuellen EUMEL-Installation den Cursor auf den Befehl 'cursor on' hin
+ anzuschalten.
+
+
+#ib#deactivate#ie#
+PROC deactivate (TEXT CONST punktname):
+
+Zweck: Vergl. 'activate (TEXT CONST punktname)'.
+ Im Gegensatz zu der Prozedur wird hier 'punktname' deaktiviert und
+ beim (nächsten) Erscheinen der Menupunktbezeichnung ein '-'Zeichen
+ vorangestellt. Es gelten die gleichen Einschränkungen wie bei 'activate'!
+
+
+PROC deactivate (INT CONST punktposition):#u#(*)#e#
+Zweck: arbeitet wie obiges 'deactivate', allerdings werden die Menupunkte nicht
+ über ihre Bezeichnung, sondern über ihre Position im (aktuellen) Pull-
+ Down-Menu identifiziert. Die Positionen sind von oben nach unten durch­
+ numeriert. Beachten Sie, daß Trennlinien eine Position belegen und
+ mitgezählt werden. Die Prozedur arbeitet schneller als obige!
+
+
+#ib#direktstart#ie#
+PROC direktstart (TEXT CONST prozedurname,
+ BOOL CONST mit loeschen):#u#(*)#e#
+Zweck: Macht aus der aktuellen Task eine Manager-Task ('global manager').
+ Werden neue Sohntasks eingerichtet, so melden sich diese nicht - wie
+ gewohnt - mit der 'gib kommando:'-Ebene. Statt dessen wird die Prozedur
+ 'prozedurname' ausgeführt. Das Kommando ist dann sinnvoll, wenn sich
+ die Sohntask gleich mit einem Menu melden soll. In der Prozedur
+ 'prozedurname' muß dann die entsprechende Menukarte angekoppelt
+ und das gewünschte Menu zur Ausführung gebracht werden. Hat 'mit
+ loeschen den Wert 'TRUE', so wird nach Verlassen der Menuebene die
+ Task automatisch gelöscht; bei 'FALSE' wird noch angefragt, ob die Task
+ gelöscht werden soll. Wird die Frage bejaht, wird gelöscht; sonst wird die
+ Task abgekoppelt (break) und kann durch 'continue' wieder angekoppelt
+ werden.
+ In der Task, in der das Kommando 'direktbefehl' gegeben wurde, sollte
+ nicht das Kommando 'monitor' gegeben werden, da dadurch auch die­
+ se Task zu einer Task gemacht würde, die sich direkt mit dem Menu
+ meldet und ggf. bei Verlassen des Menus automatisch gelöscht wird! Die
+ 'gib kommando:'-Ebene ist dadurch unzugänglich!
+
+
+#ib#ecke oben links#ie#
+TEXT PROC ecke oben links:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" links oben in der
+ Ecke (ω) ausgegeben wird.
+
+
+PROC ecke oben links (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" links oben in der Ecke ausgegeben werden soll.
+
+
+#ib#ecke oben rechts#ie#
+TEXT PROC ecke oben rechts:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" rechts oben in
+ der Ecke (�) ausgegeben wird.
+
+
+PROC ecke oben rechts (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" rechts oben in der Ecke ausgegeben werden soll.
+
+
+#ib#ecke unten links#ie#
+TEXT PROC ecke unten links:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" links unten in
+ der Ecke (�) ausgegeben wird.
+
+
+PROC ecke unten links (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" links unten in der Ecke ausgegeben werden soll.
+
+
+#ib#ecke unten rechts#ie#
+TEXT PROC ecke unten rechts:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" rechts unten in
+ der Ecke (�) ausgegeben wird.
+
+
+PROC ecke unten rechts (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" rechts unten in der Ecke ausgegeben werden soll.
+
+
+#ib#edit#ie#
+PROC edit (WINDOW VAR w, TEXT CONST dateiname):
+
+Zweck: Vergl. 'menuwindowedit'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuwindowedit' automatisch gesetzt wird.
+
+
+PROC edit (WINDOW VAR w, FILE VAR f):
+
+Zweck: Vergl. 'menuwindowedit'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuwindowedit' automatisch gesetzt wird.
+
+
+#ib#editget#ie#
+PROC editget (WINDOW VAR w, TEXT VAR text):#u#(*)#e#
+Zweck: Eingabe mit Editiermöglichkeit von 'text'. 'text' wird ausgegeben. Die
+ Eingabe wird mit RETURN beendet. 'text' darf höchstens 79 Zeichen
+ lang sein! Fehler: Text nicht initialisiert.
+
+
+PROC editget (WINDOW VAR w, TEXT VAR text,
+ INT CONST max laenge, scroll,
+ TEXT CONST sep, res,
+ TEXT VAR exit char):#u#(*)#e#
+Zweck: Wie oben. Über 'max laenge' kann festgelegt werden , wie lang der einzu­
+ gebende Text ('text') maximal sein darf. Über 'scroll' wird die Breite des
+ Zeilenfensters festgelegt, bevor gerollt wird (jedoch nicht über die rech­
+ te Fenstergrenze hinaus). Über 'sep' können Zeichen bestimmt werden,
+ bei denen die Eingabe (zusätzlich zu RETURN) beendet werden soll. Über
+ 'res' können reservierte Tasten angegeben werden. Wird eine dieser
+ Tasten mit ESC betätigt, wird die Eingabe beendet. In 'exit char' steht
+ dann ESC und das Zeichen, mit dem der Editor verlassen wurde.
+Fehler: Text nicht initialisiert.
+
+
+#ib#erase#ie#
+PROC erase (WINDOW VAR fenster):
+
+Zweck: Der durch 'fenster' beschrieben Bildschirmbereich wird gelöscht - ein­
+ schließlich des Rahmens, der den Fensterbereich umgibt (vergl. Sie auch
+ 'page')!
+
+
+#ib#erase footnote#ie#
+PROC erase footnote (WINDOW VAR fenster):
+
+Zweck: Die letzten beiden Zeilen in 'fenster' (in der die Fußnote nebst Trennlinie
+ eingetragen sind) werden gelöscht (vergl. Sie auch 'out footnote')!
+
+
+#ib#erase menunotice#ie#
+PROC erase menunotice:
+
+Zweck: Sofern zuvor mit 'write menunotice' (sehen Sie auch dort) eine Menunotiz
+ gesetzt wurde, wird diese gelöscht, ansonsten hat die Prozedur keine
+ Wirkung.
+
+
+#ib#get#ie#
+PROC get (WINDOW VAR w, TEXT CONST eingabe):
+
+Zweck: Vergl. 'menuwindowget'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuwindowget' automatisch gesetzt wird.
+
+
+PROC get (WINDOW VAR w, INT CONST wert):
+
+Zweck: Vergl. 'get (WINDOW VAR w, TEXT CONST eingabe)'. Der eingelesene Wert
+ wird anschließend entsprechend konvertiert.
+
+
+
+PROC get (WINDOW VAR w, REAL CONST wert):
+
+Zweck: Vergl. 'get (WINDOW VAR w, TEXT CONST eingabe)'. Der eingelesene Wert
+ wird anschließend entsprechend konvertiert.
+
+
+PROC get (WINDOW VAR w, TEXT CONST eingabe,
+ INT CONST laenge):
+
+Zweck: Vergl. 'get (WINDOW VAR w, TEXT CONST eingabe)'. Zusätzlich wird die
+ Eingabe beendet, wenn der eingegebene Text die Länge 'laenge' erreicht
+ hat.
+
+
+PROC get (WINDOW VAR w, TEXT CONST eingabe,
+ TEXT CONST separator):
+
+Zweck: Vergl. 'get (WINDOW VAR w, TEXT CONST eingabe)'. Zusätzlich werden
+ über 'separtor' die Zeichen festgelegt, die zusätzlich zu den Positionie­
+ rungszeichen die Eingabe beenden.
+
+
+#ib#get cursor#ie#
+PROC get cursor (WINDOW VAR w, INT VAR spalte,
+ zeile):
+
+Zweck: Vergl. 'get menuwindowcursor'. Hier wird nur zusätzlich das Fenster
+ festgelegt, das bei 'get menuwindowcursor' automatisch gesetzt wird.
+
+
+#ib#getline#ie#
+PROC getline (WINDOW VAR w, TEXT CONST eingabe):
+
+Zweck: Vergl. 'get (WINDOW VAR w, TEXT CONST eingabe). Nur wird hier die
+ Eingabe ausschließlich über die Positionierungstasten - nicht aber über
+ das Leerzeichen beendet.
+
+
+#ib#get menuwindowcursor#ie#
+PROC get menuwindowcursor (INT VAR spalte, zeile):
+
+Zweck: Mit der Prozedur wird die aktuelle Cursorposition innerhalb des Menu­
+ fensters erfragt.
+
+
+#ib#handle menu#ie#
+PROC handle menu (TEXT CONST menuname):
+
+Zweck: Bringt das in der angekoppelten Menukarte enthaltene Menu mit dem
+ Namen 'menuname' zur Ausführung, d.h. das entsprechende Menu wird
+ auf dem Bildschirm präsentiert und kann mit den üblichen Tastenfunk­
+ tionen gehandhabt werden.
+ (Anmerkung: Die Menufunktionen können natürlich nur dann ausge­
+ führt werden, wenn die zugehörigen Programme in der aktuellen Task
+ zuvor insertiert wurden - ansonsten erscheint auf dem Bildschirm jeweils
+ der Hinweis 'unbekanntes Kommando'!)
+Fehler: Das Menu 'menuname' ist nicht in der angekoppelten Menukarte!
+
+
+#ib#infix namen#ie#
+THESAURUS PROC infix namen (THESAURUS CONST thes,
+ TEXT CONST infix):
+
+Zweck: Die Prozedur liefert einen Thesaurus, in dem alle Namen enthalten sind,
+ die in 'thes' übergeben wurden und die den Wortbestandteil 'infix' enthal­
+ ten (gleichgültig an welcher Position).
+
+
+THESAURUS PROC infix namen (THESAURUS CONST thes,
+ INT CONST dateityp):
+
+Zweck: Die Prozedur liefert einen Thesaurus, in dem alle Dateinamen enthalten
+ sind, die in 'thes' übergeben wurden und die den Dateityp 'dateityp'
+ haben.
+
+
+THESAURUS PROC infix namen (THESAURUS CONST thes,
+ TEXT CONST infix,
+ INT CONST dateityp):
+
+ wirkt wie: infix namen (infix namen (thes, infix), dateityp)
+
+
+#ib#install menu#ie#
+PROC install menu (TEXT CONST menukartenname,
+ BOOL CONST mit emblem):
+
+Zweck: Mit diesem Befehl wird die Menukarte mit dem Namen 'menukarten­
+ name' aus der Task 'gs-MENUKARTEN' in die aktuelle Task kopiert. Die
+ Menukarte wird als unbenannter Datenraum an die Task gekoppelt. Der
+ benannte Datenraum wird gelöscht. Der Name der angekoppelten Menu­
+ karte wird vermerkt.
+ Stimmt der Name der angekoppelten Menukarte mit dem Namen der
+ angeforderten Menukarte überein, dann wird nicht erneut eine Kopie
+ angefordert, sondern auf der bereits angekoppelten Menukarte gearbeitet.
+ Hat 'mit emblem' den Wert 'TRUE', dann wird unser 'Software-Emblem'
+ während des Ankoppelvorgangs auf dem Bildschirm ausgegeben, bei
+ 'FALSE' nicht.
+Fehler: Die Menukarte 'menukartenname' existiert nicht in der Task
+ 'gs-MENUKARTEN'.
+
+
+PROC install menu (TEXT CONST menukartenname):
+
+ wirkt wie: install menu (TEXT CONST menukartenname, TRUE)
+
+
+#ib#invers#ie#
+TEXT PROC invers (TEXT CONST text):
+
+Zweck: Liefert den Text 'text' invers dargestellt. An den Text wird zuvor ein Leer­
+ zeichen angehängt.
+
+
+#ib#kreuz#ie#
+TEXT PROC kreuz:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" als "Kreuz" (̗)
+ ausgegeben wird.
+
+
+PROC kreuz (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" als "Kreuz" ausgegeben werden soll.
+
+
+#ib#line#ie#
+PROC line (WINDOW VAR w, INT CONST anzahl):
+
+Zweck: Vergl. 'menuwindowline'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuwindowline' automatisch gesetzt wird.
+
+
+PROC line (WINDOW VAR w):
+
+ wirkt wie: line (w, 1)
+
+
+#ib#menualternative#ie#
+INT PROC menualternative (TEXT CONST infotext,
+ auswahlliste,
+ zusatztasten,
+ INT CONST position,
+ BOOL CONST mit abbruch):
+
+Zweck: Mit der Prozedur können dem Benutzer innerhalb des Menubildschirms
+ mehrere Alternativen zur Entscheidung angeboten werden, von denen er
+ sich für eine entscheiden kann.
+ Auf dem Bildschirm wird innerhalb des Menus eine Box ausgegeben.
+ Boxbreite und -höhe werden vom System automatisch anhand des über­
+ gebenen 'infotext'es (bzw. der 'auswahlliste') festgelegt. Der in 'infotext'
+ übergebene Text wird innerhalb der Box angezeigt. Der Text muß den
+ gs-DIALOG-Syntax-Regeln (sehen Sie Kap. 5.13) entsprechen - er dient
+ ausschließlich der Information des Benutzers.
+ In der letzten Zeile der Box wird die 'auswahlliste' angeboten. Zwischen
+ jeder notierten Alternative muß in 'auswahlliste' der code "13" eingetra­
+ gen sein. In der Box werden zwischen den Alternativen je drei Leerzei­
+ chen eingefügt. Es können maximal 10 Alternativen angegeben werden,
+ die aber incl. der eingefügten Leerzeichen eine Gesamtbreite von 64
+ Zeichen nicht überschreiten dürfen. Über diese Liste erfolgt durch Posi­
+ tionierung und anschließendem <RETURN> die Entscheidung für eine
+ Alternative. Die Prozedur liefert dann als Zahlenwert die Position der
+ gewählten Alternative in der übergebenen Auswahlliste.
+ Über 'mit abbruch' wird festgelegt, ob die Alternativentscheidung durch
+ die Tastenfolge <ESC><h> abgebrochen werden kann oder nicht. Ist
+ das zulässig und geschehen, dann wird der Wert 0 geliefert.
+ Über 'zusatztasten' kann noch festgelegt werden, ob die Entscheidung
+ auch durch Tippen bestimmter Tasten angegeben werden kann. Sind hier
+ Zeichen angegeben und erfolgt die Entscheidung über das Tippen einer
+ zugelassenen Taste, dann wird die Position der getippten Taste in der
+ unter 'zusatztasten' übergebenen Zeichenkette ermittelt und der Wert 100
+ hinzuaddiert (sehen Sie dazu auch Kap. 5.7).
+ Nach der Entscheidung wird der Menubildschirm automatisch in den
+ Ausgangszustand versetzt.
+
+
+#ib#menuanswer#ie#
+TEXT PROC menuanswer (TEXT CONST infotext,
+ vorgabe,
+ INT CONST position):
+
+Zweck: Die Prozedur ermöglicht den Dialog mit dem Benutzer innerhalb des
+ Menus. Sie liefert einen vom Benutzer eingegebenen (bzw. modifizierten)
+ Text/Namen.
+ Auf dem Bildschirm wird innerhalb des Menus eine Box ausgegeben.
+ Boxbreite und -höhe werden vom System automatisch anhand des über­
+ gebenen 'infotext'es festgelegt. Der in 'infotext' übergebene Text wird
+ innerhalb der Box angezeigt. Der Text muß den gs-DIALOG-Syntax-Regeln
+ (sehen Sie Kap. 5.13) entsprechen.
+ In der letzten Zeile der ausgegebenen Box erscheint der Text "Eingabe:".
+ Über 'vorgabe' kann dem Benutzer ein Text zum Editieren angeboten
+ werden. Mit 'position' wird die relative Lage der Box innerhalb des Menu­
+ bildschirms festgelegt (1, 2, 3, 4, 5: sehen Sie dazu Kap. 5.12).
+ Die Eingabe kann durch <RETURN> abgeschlossen oder durch
+ <ESC><h> abgebrochen werden, in letzterem Falle wird niltext ("")
+ geliefert.
+ Der gelieferte Wert ist von führenden und folgenden Leerzeichen befreit
+ (compress). Es ist nicht möglich, den Namen 'break' einzugeben (sehen
+ Sie dazu Kap.5.1).
+
+
+#ib#menuanswerone#ie#
+TEXT PROC menuanswerone (TEXT CONST infotext,
+ vorgabe, THESAURUS CONST thesaurus,
+ TEXT CONST ueberschrift, hinweis,
+ BOOL CONST mit reinigung):
+
+Zweck: Die Prozedur ist aus den zwei Prozeduren 'menuanswer' und 'menuone'
+ zusammengesetzt (sehen Sie auch dort). In einer Box innerhalb des
+ Menus wird der 'infotext' ausgegeben und eine Eingabe erwartet; ggf.
+ kann ein Text in 'vorgabe' zum Editieren ausgegeben werden. Wird die
+ Eingabe mit <RETURN> abgeschlossen, wird der eingegebene Text
+ geliefert. Statt der Eingabe kann der Benutzer sich durch die Tastenfolge
+ <ESC><z> auch die in 'thesaurus' übergebenen Namen zur Auswahl
+ anbieten lassen. Wird ein Name angekreuzt, wird dieser geliefert; wird die
+ Auswahl durch <ESC><h> abgebrochen, wird niltext ("") geliefert.
+Fehler: Fenster für Auswahl zu klein (x < 56, y < 15)
+
+
+#ib#menuanswersome#ie#
+THESAURUS PROC menuanswersome (TEXT CONST
+ infotext, vorgabe,
+ THESAURUS CONST thesaurus,
+ TEXT CONST ueberschrift, hinweis,
+ BOOL CONST mit reinigung):
+
+Zweck: Die Prozedur ist aus den zwei Prozeduren 'menuanswer' und 'menusome'
+ zusammengesetzt (sehen Sie auch dort). In einer Box innerhalb des
+ Menus wird der 'infotext' ausgegeben und eine Eingabe erwartet; ggf.
+ kann ein Text in 'vorgabe' zum Editieren ausgegeben werden. Wird die
+ Eingabe mit <RETURN> abgeschlossen, wird der eingegebene Text in
+ einem Thesaurus geliefert. Statt der Eingabe kann der Benutzer sich
+ durch die Tastenfolge <ESC><z> auch die in 'thesaurus' übergebenen
+ Namen zur Auswahl anbieten lassen. Werden Namen angekreuzt, werden
+ diese in einem Thesaurus geliefert; wird die Auswahl durch
+ <ESC><h> abgebrochen, wird ein leerer Thesaurus geliefert.
+Fehler: Fenster für Auswahl zu klein (x < 56, y < 15)
+
+
+#ib#menu archiv checken#ie#
+PROC menu archiv checken:
+
+Zweck: Über diese Prozedur kann das "Checken" von Dateien auf dem Archiv in
+ das Archiv-Pull-Down-Menu eingebunden werden. Sehen Sie dazu unbe­
+ dingt Kap. 6.1!
+
+
+#ib#menu archiv grundeinstellung#ie#
+PROC menu archiv grundeinstellung (INT CONST ort):
+
+Zweck: Hierüber wird die Grundeinstellung des Archivpakets vorgenommen: Dazu
+ wird als Zieltask das Archiv der eigenen Station eingestellt. Dieses wird
+ auch über eine Menunotiz im Menu angezeigt. Die entsprechenden Menu­
+ punkte werden aktiviert bzw. deaktiviert. Sehen Sie dazu unbedingt Kap.
+ 6.1!
+ Über 'ort' wird festgelegt, an welcher Stelle innerhalb des Menus die
+ Menunotiz zur Anzeige der Zieltask (und ggf. des Archivnamens) ausge­
+ geben wird (sehen Sie dazu Kap. 5.12).
+
+
+#ib#menu archiv holen#ie#
+PROC menu archiv holen:
+
+Zweck: Über diese Prozedur kann das Holen von Dateien vom Archiv in das
+ Archiv-Pull-Down-Menu eingebunden werden. Sehen Sie dazu unbedingt
+ Kap. 6.1!
+
+
+#ib#menu archiv initialisieren#ie#
+PROC menu archiv initialisieren:
+
+Zweck: Über diese Prozedur kann das Formatieren/ Initialisieren eines Archivs in
+ das Archiv-Pull-Down-Menu eingebunden werden. Sehen Sie dazu unbe­
+ dingt Kap. 6.1!
+
+
+#ib#menu archiv loeschen#ie#
+PROC menu archiv loeschen:
+
+Zweck: Über diese Prozedur kann das Löschen von Dateien auf dem Archiv in das
+ Archiv-Pull-Down-Menu eingebunden werden. Sehen Sie dazu unbedingt
+ Kap. 6.1!
+
+
+#ib#menu archiv neue diskette#ie#
+PROC menu archiv neue diskette:
+
+Zweck: Über diese Prozedur kann das Anmelden einer neuen Diskette bei schon
+ reserviertem Archiv in das Archiv-Pull-Down-Menu eingebunden werden.
+ Sehen Sie dazu unbedingt Kap. 6.1!
+
+
+#ib#menu archiv reservieren#ie#
+PROC menu archiv reservieren:
+
+Zweck: Über diese Prozedur kann die Archivreservierung in das Archiv-Pull-
+ Down-Menu eingebunden werden. Sehen Sie dazu unbedingt Kap. 6.1!
+
+
+#ib#menu archiv reservierung aufgeben#ie#
+PROC menu archiv reservierung aufgeben:
+
+Zweck: Über diese Prozedur kann eine bestehende Archivreservierung aus dem
+ Menu heraus aufgegeben werden. Sehen Sie dazu unbedingt Kap. 6.1!
+
+
+#ib#menu archiv schreibcheck#ie#
+PROC menu archiv schreibcheck:
+
+Zweck: Über diese Prozedur kann das Schreiben von Dateien auf das Archiv und
+ das sich automatisch daran anschließende "Checken" der zuvor geschrie­
+ benen Dateien in das Archiv-Pull-Down-Menu eingebunden werden.
+ Sehen Sie dazu unbedingt Kap. 6.1!
+
+
+#ib#menu archiv schreiben#ie#
+PROC menu archiv schreiben:
+
+Zweck: Über diese Prozedur kann das Schreiben von Dateien auf das Archiv in
+ das Archiv-Pull-Down-Menu eingebunden werden. Sehen Sie dazu unbe­
+ dingt Kap. 6.1!
+
+
+#ib#menu archiv verzeichnis#ie#
+PROC menu archiv verzeichnis:
+
+Zweck: Über diese Prozedur kann die Ausgabe eines Inhaltsverzeichnisses des
+ Archivs auf dem Bildschirm in das Archiv-Pull-Down-Menu eingebunden
+ werden. Sehen Sie dazu unbedingt Kap. 6.1!
+
+
+#ib#menu archiv verzeichnis drucken#ie#
+PROC menu archiv verzeichnis drucken:
+
+Zweck: Über diese Prozedur kann die Ausgabe eines Inhaltsverzeichnisses des
+ Archivs über den Drucker in das Archiv-Pull-Down-Menu eingebunden
+ werden. Sehen Sie dazu unbedingt Kap. 6.1!
+
+
+#ib#menu archiv zieltask einstellen#ie#
+PROC menu archiv zieltask einstellen:
+
+Zweck: Über diese Prozedur kann die Festlegung der Zieltask, mit der die Inter­
+ taskkommunikation abgewickelt werden soll, in das Archiv-Pull-Down-
+ Menu eingebunden werden. Sehen Sie dazu unbedingt Kap. 6.1!
+
+
+#ib#menu dateien aufraeumen#ie#
+PROC menu dateien aufraeumen:
+
+Zweck: Durch diese Prozedur wird innerhalb des aktuellen Menus der Name der
+ Datei erfragt, die aufgeräumt, d.h. reorganisiert werden soll. Existiert
+ keine Datei mit dem angegebenen Namen, so erfolgt ein Hinweis darauf.
+ Statt der Eingabe des Dateinamens kann auch die Tastenfolge
+ <ESC><z> getippt werden. Daraufhin werden alle Dateinamen der
+ Task zur Auswahl angeboten. Hier können die gewünschten Dateinamen
+ angekreuzt werden. Anschließend werden die angekreuzten Dateien
+ reorganisiert. Der Vorgang wird auf dem Bildschirm protokolliert. Am
+ Ende des Vorgangs wird der Menubildschirm automatisch regeneriert. Es
+ können natürlich nur Dateien des Typs 1003 (Textfiles) reorganisiert
+ werden; sofern andere Dateien ausgewählt werden, erfolgt ein Hinweis
+ darauf.
+
+
+#ib#menu dateien drucken#ie#
+PROC menu dateien drucken:
+
+Zweck: Durch diese Prozedur wird innerhalb des aktuellen Menus (auch bei
+ geschachtelten(!)) der Name der Datei erfragt, die gedruckt werden soll.
+ Anschließend wird die Datei mit dem angegebenen Namen gedruckt.
+ Existiert keine Datei mit dem angegebenen Namen, so erfolgt ein Hinweis
+ darauf.
+ Statt der Eingabe des Dateinamens kann auch die Tastenfolge
+ <ESC><z> getippt werden. Daraufhin werden alle Dateinamen der
+ Task zur Auswahl angeboten. Alle angekreuzten Dateien werden an­
+ schließend gedruckt. Der Vorgang wird auf dem Bildschirm protokolliert.
+ Am Ende wird der Menubildschirm automatisch regeneriert.
+
+
+#ib#menu dateien kopieren#ie#
+PROC menu dateien kopieren:
+
+Zweck: Durch diese Prozedur wird innerhalb des aktuellen Menus der Name der
+ Datei erfragt, die kopiert werden soll. Existiert keine Datei mit dem
+ angegebenen Namen, so erfolgt ein Hinweis darauf. Statt der Eingabe des
+ Dateinamens kann auch die Tastenfolge <ESC><z> getippt werden.
+ Daraufhin werden alle Dateinamen der Task zur Auswahl angeboten. Hier
+ kann ein Dateiname angekreuzt werden. Nun wird der Name erfragt, den
+ die Kopie erhalten soll. Existiert der Name bereits, erfolgt ein Hinweis
+ darauf, sonst wird die Datei kopiert. Der Menubildschirm wird automa­
+ tisch regeneriert.
+
+
+#ib#menu dateien loeschen#ie#
+PROC menu dateien loeschen:
+
+Zweck: Durch diese Prozedur wird innerhalb des aktuellen Menus der Name der
+ Datei erfragt, die gelöscht werden soll. Anschließend wird die Datei mit
+ dem angegebenen Namen gelöscht, sofern die Sicherheitsabfrage zum
+ Löschen mit 'Ja' beantwortet wurde. Existiert keine Datei mit dem ange­
+ gebenen Namen, so erfolgt ein Hinweis darauf. Statt der Eingabe des
+ Dateinamens kann auch die Tastenfolge <ESC><z> getippt werden.
+ Daraufhin werden alle Dateinamen der Task zur Auswahl angeboten. Alle
+ angekreuzten Dateien werden anschließend (nach jeweiliger Sicherheits­
+ anfrage) gelöscht. Der Vorgang wird auf dem Bildschirm protokolliert. Am
+ Ende wird der Menubildschirm automatisch regeneriert.
+
+
+#ib#menu dateien speicherplatz#ie#
+PROC menu dateien speicherplatz:
+
+Zweck: Durch diese Prozedur wird innerhalb des aktuellen Menus der Name der
+ Datei erfragt, deren Speicherplatz ermittelt werden soll. Existiert keine
+ Datei mit dem angegebenen Namen, so erfolgt ein Hinweis darauf. Statt
+ der Eingabe des Dateinamens kann auch die Tastenfolge <ESC><z>
+ getippt werden. Daraufhin werden alle Dateinamen der Task zur Aus­
+ wahl angeboten. Hier können die gewünschten Dateinamen angekreuzt
+ werden. Anschließend wird der Speicherplatz der angekreuzten Datei(en)
+ ermittelt und im Menufenster ausgegeben. Im Anschluß an die Anzeige
+ wird der Menubildschirm automatisch regeneriert.
+
+
+#ib#menu dateien umbenennen#ie#
+PROC menu dateien umbenennen:
+
+Zweck: Durch diese Prozedur wird innerhalb des aktuellen Menus der Name der
+ Datei erfragt, die umbenannt werden soll. Existiert keine Datei mit dem
+ angegebenen Namen, so erfolgt ein Hinweis darauf. Statt der Eingabe des
+ Dateinamens kann auch die Tastenfolge <ESC><z> getippt werden.
+ Daraufhin werden alle Dateinamen der Task zur Auswahl angeboten. Hier
+ kann ein Dateiname angekreuzt werden. Nun wird der Name erfragt, den
+ die Datei anschließend erhalten soll. Existiert der Name bereits, erfolgt ein
+ Hinweis darauf, sonst wird die Datei umbenannt. Der Menubildschirm
+ wird automatisch regeneriert.
+
+
+#ib#menu dateien verzeichnis#ie#
+PROC menu dateien verzeichnis
+
+Zweck: Mit der Prozedur kann innerhalb des aktuellen Menus ein Verzeichnis der
+ Dateien der eigenen Task ausgegeben werden. Nach Verlassen des Ver­
+ zeichnisses durch <ESC><q> wird der Menubildschirm automatisch
+ regeneriert.
+
+
+#ib#menufootnote#ie#
+PROC menufootnote (TEXT CONST fussnotentext):
+
+Zweck: Mit der Prozedur kann der Text in der "Fußzeile" des aktuellen Menubild­
+ schirms (zumeist Hinweise an den Benutzer) ersetzt werden. Der vorhan­
+ dene Text wird gelöscht und stattdessen 'fussnotentext' notiert. Der Text
+ bleibt so lange erhalten, bis er durch eine andere selbstgesetzte Fußnote
+ ('menufootnote') oder durch die alte vom System gesetzte Fußnote ('old
+ menufootnote'; sehen Sie auch dort) überschrieben wird. Sofern
+ gs-DIALOG-Prozeduren aufgerufen werden, die selbst Ausgaben in der
+ Fußzeile machen, wird die durch 'menufootnote' gesetzte Fußnote eben­
+ falls überschrieben. Wenn der Text länger als die aktuelle Menubild­
+ schirmbreite ist,wird der Text abgeschnitten. Damit der Text auch in
+ geschachtelten Menus vollständig ausgegeben werden kann, sollte er nicht
+ länger als 69 Zeichen sein.
+
+
+#ib#menufunktion#ie#
+PROC menufunktion (TEXT CONST kuerzel,
+ punktbezeichnung,
+ prozedurname,
+ infotext):
+
+Zweck: Der Befehl wird für die Generierung von Menukarten benötigt. Mit diesem
+ Befehl wird in das aktuell geöffnete Menu unter dem aktuellen Oberbe­
+ griff eine Verarbeitungsfunktion eingetragen. Mit 'kuerzel' wird die Taste
+ bestimmt, über die die Verarbeitungsfunktion direkt aktiviert werden
+ kann. 'kuerzel' muß innerhalb eines Pull-Down-Menus eindeutig gewählt
+ sein! Unter 'punktbezeichnung' wird der Text eingetragen, der im Pull-
+ Down-Menu ausgegeben werden soll. In 'prozedurname' steht der Name
+ der Prozedur (als Text(!)), die bei Aktivierung des Menupunktes ausge­
+ führt werden soll. In 'infotext' steht der Text, der als Information zu
+ diesem Menupunkt bei Tippen der <?>-Taste angezeigt werden soll.
+Fehler: Menupunkt-Kürzel ist länger als ein Zeichen.
+ Menupunktkürzel kommt mehrfach vor.
+ Menupunktbezeichnung ist zu lang (> 60 Zeichen).
+ Zu viele Menupunkte in einem Pull-Down-Menu (> 15).
+
+
+#ib#menuinfo#ie#
+PROC menuinfo (TEXT CONST infotext, INT CONST
+ position, timelimit):
+
+Zweck: Die Prozedur ermöglicht es, innerhalb des Menus einen Hinweis (Infor­
+ mationstext) auszugeben. Im Menubildschirm erscheint der 'infotext' in
+ einer Box. Boxbreite und -höhe werden vom System automatisch anhand
+ des übergebenen 'infotext'es festgelegt. 'infotext' muß den gs-DIALOG-
+ Syntax-Regeln (sehen Sie Kap. 5.13) entsprechen. Mit 'position' wird die
+ relative Lage der Box innerhalb des Menubildschirms festgelegt (1, 2, 3,
+ 4, 5: sehen Sie dazu Kap. 5.12). Mit 'timelimit' kann die Zeitdauer (in
+ Zehntelsekunden) festgelegt werden, für die der Hinweis höchstens er­
+ scheint. Die Anzeige kann vom Benutzer durch Tippen einer beliebigen
+ Taste abgebrochen werden.
+
+
+PROC menuinfo (TEXT CONST infotext,
+ INT CONST position):
+
+ wirkt wie: menuinfo (infotext, position, maxint)
+
+
+PROC menuinfo (TEXT CONST infotext):
+
+ wirkt wie: menuinfo (infotext, 5)
+
+
+#ib#menukartenname#ie#
+TEXT PROC menukartenname:#u#(*)#e#
+Zweck: Liefert den Namen der zur zeit angekoppelten Menukarte. Ist keine
+ Menukarte angekoppelt, wird niltext ("") geliefert.
+
+
+#ib#menuno#ie#
+BOOL PROC menuno (TEXT CONST frage,
+ INT CONST position):
+
+ wirkt wie: NOT menuyes (frage, position)
+
+
+#ib#menuone#ie#
+TEXT PROC menuone (THESAURUS CONST thesaurus,
+ TEXT CONST ueberschrift,
+ hinweis,
+ BOOL CONST mit reinigung):
+
+Zweck: Durch die Prozedur werden dem Benutzer innerhalb des Menubild­
+ schirms Namen zur Auswahl angeboten. Nach Ankreuzen eines Namens
+ wird die Auswahl automatisch verlassen. Der angekreuzte Name wird
+ geliefert. Wird die Auswahl durch <ESC><h> abgebrochen, so wird
+ niltext ("") geliefert. In 'thesaurus' wird ein THESAURUS mit den Namen
+ übergeben, die zur Auswahl angeboten werden sollen (sehen Sie dazu
+ auch Kap. 5.14). Die beiden Texte 'ueberschrift' und 'hinweis' erscheinen
+ zur Kennzeichnung im Kopf der Auswahlliste: 'ueberschrift' zentriert und
+ invers dargestellt, 'hinweis' nur zentriert. Hat 'mit reinigung' den Wert
+ TRUE, so wird nach der Auswahl der Menubildschirm automatisch wie­
+ deraufgebaut, bei FALSE wird darauf verzichtet.
+Fehler: Fenster für Auswahl zu klein (x < 56, y < 15)
+
+
+#ib#menusome#ie#
+THESAURUS PROC menusome (THESAURUS CONST
+ thesaurus,
+ TEXT CONST ueberschrift,
+ hinweis,
+ BOOL CONST mit reinigung):
+
+Zweck: Durch die Prozedur werden dem Benutzer innerhalb des Menubild­
+ schirms Namen zur Auswahl angeboten. Die Auswahl kann durch die
+ Tastenfolge <ESC><q> verlassen werden. Der/ die angekreuzte(n)
+ Name(n) wird/werden in einem Thesaurus geliefert. Wird die Auswahl
+ durch die Tastenfolge <ESC><h> abgebrochen oder wurde kein Name
+ angekreuzt, dann wird ein leerer Thesaurus geliefert. In 'thesaurus' wird
+ ein Thesaurus mit den Namen übergeben, die zur Auswahl angeboten
+ werden sollen (sehen Sie dazu auch Kap. 5.14). Die beiden Texte
+ 'ueberschrift' und 'hinweis' erscheinen zur Kennzeichnung im Kopf der
+ Auswahlliste: 'ueberschrift' zentriert und invers dargestellt, 'hinweis' nur
+ zentriert. Hat 'mit reinigung' den Wert TRUE, so wird nach der Auswahl
+ der Menubildschirm automatisch wiederaufgebaut, bei FALSE wird darauf
+ verzichtet.
+Fehler: Fenster für Auswahl zu klein (x < 56, y < 15)
+
+
+#ib#menuwindowcenter#ie#
+TEXT PROC menuwindowcenter (TEXT CONST text):
+
+Zweck: Die Prozedur liefert einen Text, der so lang ist, wie das aktuelle Menufen­
+ ster breit ist. Dazu wird 'text' so mit Leerzeichen "ummantelt" daß 'text'
+ etwa in der Mitte zu stehen kommt. Steht der Cursor bei Ausgabe dieses
+ Textes am Anfang der Zeile, erscheint der Text zentriert in der Zeile
+ (vorhandene Zeileninhalte werden dadurch überschrieben (der Cursor
+ steht dann auf dem rechten Fensterrand!).
+
+
+#ib#menuwindowcursor#ie#
+PROC menuwindowcursor (INT CONST spalte, zeile):
+
+Zweck: Mit diesem Befehl kann der Cursor innerhalb des aktuellen Menufensters
+ positioniert werden. Ein "normales" Menufenster ist 77 Zeichen breit und
+ 20 Zeichen hoch; ein Menufenster in einem geschachtelten Menu ist 71
+ Zeichen breit und 16 Zeichen hoch). (Sehen Sie auch die Informations­
+ prozeduren 'get menuwindowcursor' und 'remaining menuwindowlines').
+Fehler: Wird außerhalb des aktuellen Menufensters positioniert, wird der Fenster­
+ inhalt gelöscht und die Fensterposition (1,1) angenommen.
+
+
+#ib#menuwindowedit#ie#
+PROC menuwindowedit (TEXT CONST dateiname):
+
+Zweck: Durch den Befehl wird innerhalb des Menus ein umrandetes Fenster
+ geöffnet und die Datei mit dem Namen 'dateiname' zum Editieren ausge­
+ geben. Auf die Größe des Menufensters kann kein Einfluß genommen
+ werden - sie wird selbständig vom System gesetzt ("normales" Menu: 77
+ Zeichen breit und 20 Zeichen hoch; geschachteltes Menu 71 Zeichen
+ breit und 16 Zeichen hoch).
+Fehler: Die Datei mit dem Namen 'dateiname' existiert nicht.
+
+
+PROC menuwindowedit (FILE VAR f):
+
+Zweck: Vergl. obige 'menuwindowedit'-Prozedur. Die Datei 'f' muß mit der Verar­
+ beitungsart 'modify' assoziiert worden sein.
+
+
+#ib#menuwindoweditget#ie#
+PROC menuwindoweditget (TEXT VAR text):#u#(*)#e#
+Zweck: Vergl. 'menuwindowget (TEXT VAR text)' Zusätzlich kann hier in 'text' ein
+ Text zum Editieren vorgegeben werden.
+Fehler: Text nicht initialisiert.
+
+
+#ib#menuwindowget#ie#
+PROC menuwindowget (TEXT VAR text):
+
+Zweck: Mit der Prozedur können Texte innerhalb des Menufensters eingelesen
+ werden (INTEGER- und REAL-Werte müssen ggf. "von Hand" konvertiert
+ werden). Die Eingabe wird durch <RETURN> abgeschlossen. Es muß
+ mindestens ein Zeichen (ungleich Leerzeichen) eingegeben werden. Von
+ der Eingabe werden die führenden Leerzeichen abgeschnitten. Ist der
+ einzugebende Text länger als die noch verbleibende Restzeile, so wird der
+ Text in der Restzeile gescrollt. Sind in der aktuellen Zeile weniger als 7
+ Zeichenpositionen für die Eingabe vorhanden, so wird automatisch für die
+ Eingabe an den Anfang der nächsten Zeile positioniert.
+
+
+#ib#menuwindowline#ie#
+PROC menuwindowline (INT CONST anzahl):
+
+Zweck: Die Prozedur 'menuwindowline' hat innerhalb des Menubildschirms eine
+ ähnliche Wirkung wie die Prozedur 'line' auf dem Gesamtbildschirm. Es
+ werden 'anzahl' Zeilenwechsel vorgenommen. Wird allerdings die untere
+ Grenze des Menubildschirms überschritten, dann rollt (scrollt) der Bild­
+ schirm nicht die entsprechende Anzahl Zeilen nach oben, statt dessen
+ wird der Fensterinhalt gelöscht und die Operation oben im Fenster fort­
+ gesetzt.
+
+
+PROC menuwindowline:
+
+ wirkt wie: menuwindowline (1)
+
+
+#ib#menuwindowout#ie#
+PROC menuwindowout (TEXT CONST text):
+
+Zweck: Mit der Prozedur können innerhalb des aktuellen Menufensters Texte
+ ausgegeben werden. Sollen INTEGER- oder REAL-Werte ausgegeben wer­
+ den, müssen diese zunächst in Texte konvertiert werden. Ist der Text
+ länger als die verbleibende Restzeile innerhalb des aktuellen Menufen­
+ sters, so wird der Text bis zum Fensterende (rechts) ausgegeben und die
+ Ausgabe am Anfang der nächsten Zeile fortgesetzt. Sobald die letzte Posi­
+ tion des aktuellen Menufensters (unten rechts in der Fensterecke) be­
+ schrieben wurde, wird der Fensterinhalt gelöscht und die Ausgabe an der
+ Position (1,1) des Fensters fortgesetzt.
+
+
+#ib#menuwindowpage#ie#
+PROC menuwindowpage:
+
+Zweck: Durch den Befehl 'menuwindowpage' wird der Inhalt des Fensters inner­
+ halb des aktuellen Menus gelöscht (das "Menufenster") (vergleichen Sie
+ auch 'show menuwindow'). Der Rahmen des Fensters (der bei 'show
+ menuwindow' ausgegeben wurde), bleibt bestehen, da er nicht mit zum
+ eigentlichen Fenster gehört. Durch den Befehl wird der Menubildschirm
+ nicht rekonstruiert! Soll das Fenster geschlossen werden, ist der Befehl
+ 'regenerate menuscreen' zu geben.
+
+
+#ib#menuwindowshow#ie#
+PROC menuwindowshow (TEXT CONST dateiname):
+
+Zweck: Vergl. 'menuwindowedit'-Prozedur. Die Datei 'dateiname' kann nicht
+ schreibend verändert werden.
+
+
+PROC menuwindowshow (FILE VAR f):
+
+Zweck: Vergl. obige 'menuwindowshow'-Prozedur. Die Datei 'f' muß mit der
+ Verarbeitungsart 'modify' assoziiert worden sein.
+
+
+#ib#menuwindowstop#ie#
+PROC menuwindowstop (INT CONST zeilenzahl):
+
+Zweck: Innerhalb des Menufensters werden 'zeilenzahl' Zeilenwechsel vorge­
+ nommen und der Text " Zum Weitermachen bitte irgendeine Taste tip­
+ pen!" ausgegeben. Danach wird so lange gewartet, bis eine Taste getippt
+ wird.
+
+
+PROC menuwindowstop:
+
+ wirkt wie: menuwindowstop (2)
+
+
+#ib#menuyes#ie#
+BOOL PROC menuyes (TEXT CONST frage,
+ INT CONST position):
+
+Zweck: Die Prozedur dient dazu, innerhalb des Menus eine Ja/Nein-Entscheidung
+ des Benutzers einzuholen. Im Gegensatz zur Standardprozedur 'yes'
+ arbeitet diese Prozedur unabhängig davon, ob der Kommandodialog ein-
+ oder ausgeschaltet ist. Auf dem Bildschirm wird innerhalb des Menus eine
+ Box ausgegeben. Boxbreite und -höhe werden vom System automatisch
+ anhand der übergebenen 'frage' festgelegt. Der in 'frage' übergebene Text
+ wird um ein Fragezeichen (?) ergänzt und innerhalb der Box angezeigt.
+ Der Text muß den gs-DIALOG-Syntax-Regeln (sehen Sie Kap. 5.13)
+ entsprechen. In der letzten Zeile der ausgegebenen Box erscheint der Text
+ "Ja    Nein". Die Prozedur 'menuyes' liefert TRUE, wenn mit 'Ja' geantwor­
+ tet wurde und FALSE, wenn mit 'Nein' geantwortet wurde (durch Tippen
+ der Anfangsbuchstaben oder Positionierung auf die Antwort und ab­
+ schließendes <RETURN>). Der Menubildschirm wird automatisch
+ regeneriert. Mit 'position' wird die relative Lage der Box innerhalb des
+ Menubildschirms festgelegt (1, 2, 3, 4, 5: sehen Sie dazu Kap. 5.12).
+
+
+#ib#no#ie#
+BOOL PROC no (WINDOW VAR w, TEXT CONST frage):
+
+ wirkt wie: NOT yes (w, frage).
+
+
+#ib#not empty#ie#
+BOOL PROC not empty (THESAURUS CONST thes):
+
+Zweck: Dient der Prüfung, ob ein Thesaurus Namen enthält oder nicht. Die
+ Prozedur liefert TRUE, wenn Namen in 'thes' enthalten sind, sonst FALSE.
+
+
+#ib#oberbegriff#ie#
+PROC oberbegriff (TEXT CONST punktname,
+ startprocname,
+ leaveprocname):
+
+Zweck: Der Befehl wird bei der Generierung von Menukarten benötigt. Mit diesem
+ Befehl wird die Bezeichnung 'punktname' in die Kopfzeile des aktuell
+ geöffneten Menus eingetragen. Die in 'startprocname' übergebene Proze­
+ dur wird ausgeführt, bevor das zugehörige Pull-Down-Menu auf dem
+ Bildschirm "ausgeklappt" wird; die in 'leaveprocname' übergebene Pro­
+ zedur, wenn in ein anderes Pull-Down-Menu gewechselt wird (beachten
+ Sie, daß die Prozedurnamen als Texte(!) übergeben werden).
+Fehler: Menukarte noch nicht geöffnet ('oeffne menukarte' fehlt).
+ Menu noch nicht geöffnet ('oeffne menu' fehlt).
+ Zu viele Oberbegriffe im Menu (> 10).
+ Die Kopfzeile ist zu lang (> 70 Zeichen).
+
+
+PROC oberbegriff (TEXT CONST punktname):
+
+ wirkt wie: oberbegriff (punktname, "", "")
+
+
+#ib#oeffne menu#ie#
+PROC oeffne menu (TEXT CONST menuname,
+ einstiegsproc,
+ ausstiegsproc, infotext1,
+ infotext2, infotext3):
+
+Zweck: Der Befehl wird für die Generierung von Menukarten benötigt. Durch den
+ Befehl wird innerhalb der Menukarte ein Menu mit dem Namen
+ 'menuname' angelegt. Über diesen Namen kann das Menu auch später
+ angesprochen werden (mit 'handle menu'). Die unter 'einstiegsproc'
+ übergebene Prozedur wird bei der Aktivierung des Menus ausgeführt, die
+ unter 'ausstiegsproc' übergebene Prozedur, wenn das Menu (mit
+ <ESC><q>) verlassen wird (beachten Sie, daß die Prozedurnamen als
+ Texte(!) übergeben werden!). In 'infotext1', 'infotext2' und 'infotext3'
+ können Hinweise eingetragen werden, die bei Erscheinen des Menus auf
+ dem Bildschirm für kurze Zeit in einer Box rechts unten angezeigt wer­
+ den. Die Erstellung der Boxtexte ist an genaue Regeln gebunden (sehen
+ Sie dazu Kap. 5.13). Sehen Sie auch bei 'schliesse menu'.
+
+
+PROC oeffne menu (TEXT CONST menuname,
+ einstiegsproc,
+ ausstiegsproc):
+
+ wirkt wie: oeffne menu (menuname, einstiegsproc,
+ ausstiegsproc, "", "", "")
+
+
+PROC oeffne menu (TEXT CONST menuname):
+
+ wirkt wie: oeffne menu (menuname, "", "")
+
+
+#ib#oeffne menukarte#ie#
+PROC oeffne menukarte (TEXT CONST menukartenname):
+
+Zweck: Der Befehl wird bei der Generierung von Menukarten benötigt. Ein Pro­
+ gramm zur Erstellung einer Menukarte muß immer mit diesem Befehl
+ beginnen. Durch den Befehl wird ein Datenraum mit dem Namen
+ 'gs-MENUKARTE:menukartenname' eingerichtet; der Wortbestandteil
+ 'gs-MENUKARTE:' wird dabei automatisch vor den angegebenen Namen
+ gesetzt (sehen Sie auch 'schliesse menukarte').
+Fehler: Eine Menukarte mit dem angegebenen Namen existiert bereits in der
+ Task. Bei der Generierung wird dann angefragt, ob die alte Menukarte
+ gelöscht werden darf.
+
+
+#ib#ohne praefix#ie#
+THESAURUS PROC ohne praefix (THESAURUS CONST thes,
+ TEXT CONST praefix):
+
+Zweck: Liefert in einem Thesaurus alle Namen aus dem übergebenen Thesaurus
+ 'thes', die mit dem Wortbestandteil 'praefix' beginnen. Bei den gelie­
+ ferten Namen ist dieser führende Wortbestandteil entfernt.
+
+
+#ib#old menufootnote#ie#
+PROC old menufootnote:
+
+Zweck: Der aktuelle Text in der Fußzeile des aktuellen Menubildschirms wird
+ durch den hier zuletzt vom System gesetzten Text überschrieben. Die
+ Prozedur wird benutzt, um eine selbstgesetzte Fußnote (sehen Sie auch
+ 'write menunotice') zu löschen.
+
+
+#ib#out#ie#
+PROC out (WINDOW VAR w, TEXT CONST text):
+
+Zweck: Vergl. 'menuwindowout'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuwindowout' automatisch gesetzt wird.
+
+
+#ib#out frame#ie#
+PROC out frame (WINDOW VAR fenster):
+
+Zweck: Um den durch 'fenster' angegebenen Bildschirmbereich wird ein Rahmen
+ gezogen.
+
+
+#ib#out footnote#ie#
+PROC out footnote (WINDOW VAR fenster,
+ TEXT CONST textzeile):
+
+Zweck: In der untersten Zeile des Fensters 'fenster' wird 'textzeile' ausgegeben, in
+ der vorletzten Zeile eine Trennzeile. Sehen Sie auch 'erase footnote'.
+
+
+#ib#page#ie#
+PROC page (WINDOW VAR fenster,
+ BOOL CONST mit rahmen):
+
+Zweck: Der durch 'fenster' beschriebene Fensterbereich wird gelöscht. Hat 'mit
+ rahmen' den Wert TRUE, wird der Rahmenbereich ebenfalls gelöscht.
+
+
+PROC page (WINDOW VAR fenster):
+
+ wirkt wie: page (fenster, FALSE).
+
+
+#ib#put#ie#
+PROC put (WINDOW VAR w, TEXT CONST text):
+
+ wirkt wie: out (w, text + " ")
+
+
+PROC put (WINDOW VAR w, INT CONST zahl):
+
+ wirkt wie: put (w, text (zahl))
+
+
+PROC put (WINDOW VAR w, REAL CONST zahl):
+
+ wirkt wie: put (w, text (zahl))
+
+
+#ib#putline#ie#
+PROC putline (WINDOW VAR w, TEXT CONST text):
+
+ wirkt wie: put (w, text); line (w)
+
+
+#ib#regenerate menuscreen#ie#
+PROC regenerate menuscreen:
+
+Zweck: Der Befehl wird verwendet, um den Menubildschirm (z.B. nach der
+ Nutzung für anwendungsbezogene Ausgaben) in seinem letzten Zustand
+ zu reproduzieren. Der Bildschirm wird gelöscht. Anschließend wird der
+ aktuelle Menubildschirm vollständig neu aufgebaut - auch bei geschach­
+ telten Menus. (sehen Sie auch 'refresh submenu')
+
+
+#ib#refresh submenu#ie#
+PROC refresh submenu:
+
+Zweck: Der Befehl dient dazu, das aktuelle Pull-Down-Menu (z.B. nach Über­
+ schreiben) und ggf. eine gesetzte Menunotiz erneut auf den Bildschirm zu
+ schreiben. Betroffen ist nur der Bereich zwischen den Trennlinien der
+ Kopf- und Fußzeile. Für das vorausgehende Löschen verwendeter Bild­
+ schirmbereich ist der Programmierer verantwortlich. Im Gegensatz zu
+ 'regenerate menuscreen' findet hier kein kompletter Bildschirmaufbau
+ statt. Wenn möglich, dann ist dieser Befehl dem Befehl 'regenerate
+ menuscreen' wegen des geringeren Zeitaufwandes vorzuziehen.
+
+
+#ib#remaining lines#ie#
+INT PROC remaining lines (WINDOW VAR w):
+
+Zweck: Die Prozedur liefert die Anzahl der Zeilen im Fenster 'w', die noch
+ zwischen Cursor und unterer Fenstergrenze vorhanden sind.
+
+
+#ib#remaining menuwindowlines#ie#
+INT PROC remaining menuwindowlines
+
+Zweck: Die Prozedur liefert die Anzahl der Zeilen im aktuellen Menufenster, die
+ noch zwischen Cursor und unterer Fenstergrenze vorhanden sind.
+
+
+#ib#reset dialog#ie#
+PROC reset dialog:
+
+Zweck: Das Menusystem wird in den Anfangszustand versetzt. (Keine Menukarte
+ angekoppelt; Anzahl der geöffneten Menus: 0)
+
+
+#ib#schliesse menu#ie#
+PROC schliesse menu:
+
+Zweck: Der Befehl wird bei der Generierung von Menukarten benötigt. Durch den
+ Befehl wird ein Menu in einer Menukarte abgeschlossen (sehen Sie auch
+ 'oeffne menu')
+
+
+#ib#schliesse menukarte#ie#
+PROC schliesse menukarte
+
+Zweck: Der Befehl wird bei der Generierung von Menukarten benötigt. Durch den
+ Befehl wird eine Menukarte abgeschlossen (sehen Sie auch 'oeffne
+ menukarte')
+
+
+#ib#senkrecht#ie#
+TEXT PROC senkrecht:
+
+ Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" als senkrechter
+ Strich (�) ausgegeben wird.
+
+
+PROC senkrecht (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" als senkrechter Strich ausgegeben werden soll.
+
+
+#ib#show#ie#
+PROC show (WINDOW VAR fenster):
+
+Zweck: Das Fenster 'fenster' wird auf dem Bildschirm angezeigt (das Fenster
+ muß zuvor durch 'window' initialisiert worden sein). Um den angegebe­
+ nen Fensterbereich wird automatisch ein Rahmen gezogen. Der Rahmen
+ gehört nicht zum Fenster dazu! (Soll das Fenster ohne Rahmen ausgege­
+ ben werden, dann muß der Befehl 'page' verwendet werden.) Der Bereich
+ innerhalb des Rahmens (Fensterbereich) wird gelöscht.
+
+
+#ib#show#ie#
+PROC show (WINDOW VAR w, TEXT CONST dateiname):
+
+Zweck: Vergl. 'menuwindowshow'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuwindowshow' automatisch gesetzt wird.
+
+
+PROC show (WINDOW VAR w, FILE VAR f):
+
+Zweck: Vergl. 'menuwindowshow'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuwindowshow' automatisch gesetzt wird.
+
+
+#ib#show menuwindow#ie#
+PROC show menuwindow:
+
+Zweck: Durch den Befehl 'show menuwindow' wird ein entsprechender Rahmen
+ innerhalb des Menubildschirms ausgegeben und der Bereich innerhalb
+ dieses Rahmens (das Fenster) gelöscht (sehen Sie auch 'menuwindow­
+ page'). Innerhalb des Fensters können anschließend verschiedene Opera­
+ tionen ausgeführt werden. Auf die Größe des Menufensters kann kein
+ Einfluß genommen werden - sie wird selbständig vom System gesetzt
+ ("normales" Menu: 77 Zeichen breit und 20 Zeichen hoch; geschachteltes
+ Menu 71 Zeichen breit und 16 Zeichen hoch).
+
+
+#ib#stdinfoedit#ie#
+PROC stdinfoedit (TEXT CONST dateiname):#u#(*)#e#
+Zweck: Löscht den Bildschirm und bietet die Datei 'dateiname' in einem festge­
+ legten zum Editieren an. In der Fußzeile wird die Information "Info:
+ <ESC><?>  Verlassen: <ESC><q>" angezeigt. Nach Tippen von
+ <ESC><?> werden Editorinformationen in den Bildschirm einge­
+ blendet.
+
+
+PROC stdinfoedit (FILE VAR f):#u#(*)#e#
+Zweck: Wie obige 'stdinfoedit'-Prozedur'. Die Datei 'f' muß mit der Verarbei­
+ tungsart 'modify' assoziiert worden sein.
+
+
+PROC stdinfoedit (TEXT CONST dateiname,
+ INT CONST oberste zeile):#u#(*)#e#
+Zweck: Wie obige Prozedur (die wie 'stdwinfoedit (w, 1)' wirkt). Allerdings kön­
+ nen bis zu zwei Zeilen oben auf dem Bildschirm unbenutzt bleiben (z.B.
+ um die Kopfzeile des Menus weiterhin anzuzeigen). 'oberste zeile' gibt an,
+ welche Bildschirmzeile die erste von dieser Prozedur benutzte ist
+ (1<= oberste zeile<=3).
+
+
+PROC stdinfoedit (FILE VAR f,
+ INT CONST oberste zeile):#u#(*)#e#
+Zweck: Wie obige 'stdinfoedit'-Prozedur'. Die Datei 'f' muß mit der Verarbei­
+ tungsart 'modify' assoziiert worden sein.
+
+
+#ib#stop#ie#
+PROC stop (WINDOW VAR w, INT CONST zeilenzahl):
+
+Zweck: Vergl. 'menuwindowstop'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuwindowstop' automatisch gesetzt wird.
+
+
+PROC stop (WINDOW VAR w):
+
+ wirkt wie: stop (w, 1).
+
+
+#ib#testinstallation#ie#
+PROC testinstallation (TEXT CONST menutafelname):
+
+Zweck: Die Menutafel mit dem Namen 'menutafelname' (muß mit dem
+ 'gs-MENUKARTE:' beginnen!) wird als aktuelle Menutafel an gs-DIALOG
+ gekoppelt. Durch den Befehl wird die angegebene Menutafel zur Task
+ 'gs-MENUAKRTEN' geschickt. Dem Namen wird zur Kennzeichnung noch
+ der Taskname der Sendertask angehängt (dadurch können sich bei
+ Multi-User-Betrieb verschiedene Anwender mit gleichen Menukarten­
+ namen nicht stören). Die Menukarte wird anschließend in jedem Fall
+ "frisch" angekoppelt. Außerdem bleibt die Menukarte (als benannter
+ Datenraum) in der Task erhalten!
+ (Mit dem Befehl 'handle menu' kann nun ein Menu aus der Menukarte
+ zur Ausführung gebracht werden oder mit 'anwendungstext' auf in die
+ Menukarte ausgelagerte Texte zugegriffen werden.)
+ Hinweis: Von Zeit zu Zeit muß der Systembetreuer die überflüssigen
+ Menukarten aus der Task 'gs-MENUKARTEN' entfernen, da die Anwender
+ aus Ihrer Task die Karten nicht löschen können!
+Fehler: 'menutafelname' gibt es nicht!
+ 'menutafelname' hat falsche(n) Typ/Bezeichnung (keine
+ gs-MENUKARTE)!
+
+
+#ib#trennlinie#ie#
+PROC trennlinie:
+
+Zweck: Der Befehl wird bei der Generierung von Menukarten benötigt. Durch den
+ Befehl wird unter dem aktuellen Oberbegriff eine Trennlinie zur opti­
+ schen Trennung einzelner Menupunkte eingetragen. Die Trennlinie belegt
+ den gleichen Platz wie eine Verarbeitungsfunktion.
+Fehler: Zu viele Menupunkte in einem Pull-Down-Menu (maximal 15 incl. der
+ Trennlinien!).
+
+
+#ib#textprozedur#ie#
+PROC textprozedur (TEXT CONST dateiname,
+ prozedurname):
+
+Zweck: Der Befehl wird benötigt, um Texte entsprechend der gs-DIALOG-Syntax
+ aufzuarbeiten. Der in die Datei 'dateiname' geschrieben Text wird bear­
+ beitet. Die Prozedur eignet sich insbesondere dafür, Informationstexte
+ aufzuarbeiten, die zu den einzelnen Menufunktionen ausgegeben werden,
+ wenn der Benutzer die Tastenfolge <ESC><?> tippt (sehen Sie auch
+ 'textzeile'). Der aufbereitete Text steht anschließend in der Datei 'datei­
+ name.a'. Der Text ist in eine Textprozedur "verpackt", die den Namen hat,
+ der als zweiter Parameter übergeben wird.
+ Die Zeilen werden dabei so zugeschnitten, daß Sie in einer Box in das
+ aktuelle Menu eingeblendet werden können. Boxbreite und -höhe werden
+ automatisch gesetzt (max. 65 Zeichen breit und 14 Zeichen hoch)); die
+ Zeilen werden geblockt, sofern in der Datei keine Absatzmarkierung
+ (<RETURN>) am Ende der Zeile vorhanden ist. Soll eine Zeile zentriert
+ werden, so muß als erstes Zeichen der Zeile das Zeichen '%' notiert sein -
+ die Zeile muß durch eine Absatzmarke abgeschlossen sein. Textpassagen,
+ die invers (markiert) dargestellt werden sollen, müssen duch das Zeichen
+ '$' eingeleitet und durch das Zeichen '&' abgeschlossen werden. Markier­
+ te Textpassagen dürfen (nach dem Zuschnitt!) nicht über Zeilengrenzen
+ hinausgehen!
+Fehler: Datei 'dateiname' existiert nicht!
+ Fonttabelle 'fonttab.gs-Menu-Generator' existiert nicht! (Fonttabelle von
+ gs-Menu-Generator-Diskette in die Task 'configurator' laden!)
+ Text ist zu lang - bitte kürzen! (Text darf in aufbereiteter Form maximal
+ 14 Zeilen umfassen!)
+ Zeilenformatierung mit <ESC> abgebrochen!
+
+
+
+#ib#textzeile#ie#
+PROC textzeile (TEXT CONST dateiname):
+
+Zweck: Der Befehl wird benötigt, um Texte entsprechend der gs-DIALOG-Syntax
+ aufzuarbeiten. Der in die Datei 'dateiname' geschrieben Text wird bear­
+ beitet. Die Prozedur eignet sich insbesondere dafür, anwendungsbezogene
+ Texte aufzuarbeiten, die in die Menukarte ausgelagert werden sollen
+ (sehen Sie auch 'textprozedur'). Der aufbereitete Text steht anschließend
+ in der Datei 'dateiname.a' in einer Zeile notiert.
+
+
+#ib#waagerecht#ie#
+TEXT PROC waagerecht:
+
+Zweck: Liefert das Zeichen, das bei der Darstellung der "Kästen" als waagerechter
+ Strich (̇) ausgegeben wird.
+
+
+PROC waagerecht (TEXT CONST zeichen):
+
+Zweck: Durch diese Prozedur kann das Zeichen festgelegt werden, das bei Dar­
+ stellung der "Kästen" als waagerechter Strich ausgegeben werden soll.
+
+
+#ib#window#ie#
+WINDOW PROC window (INT CONST x, y, xsize, ysize):
+
+Zweck: Einer Fenstervariablen (WINDOW VAR name) wird die Lage und Größe
+ zugeordnet (über den Zuweisungsoperator ':='). Gleichzeitig wird das
+ Fenster initialisiert.
+ Mit den ersten beiden Parametern wird die Lage der linken oberen Ecke
+ des Fensters bestimmt (x: Spalte; y: Zeile). Mit 'xsize' wird die Fenster­
+ breite, mit 'ysize' die Fensterhöhe festgelegt.
+ Das Fenster wird noch nicht(!) angezeigt (sehen Sie dazu 'show' und
+ 'page'). Ein Rahmen wird nicht zum Fenster gezählt; er kann aber mit
+ der Prozedur 'show' ausgegeben werden. Ein Fenster darf nicht breiter als
+ 80 und höher als 24 Zeichen sein. Umrahmte Fenster unterliegen weite­
+ ren Einschränkungen (sehen Sie auch 'show'). Ein Fenster muß min­
+ destens 6 Zeichen breit und 3 Zeichen hoch sein.
+Fehler: 'Window' ungültig
+
+
+#ib#write menunotice#ie#
+PROC write menunotice (TEXT CONST notiztext,
+ INT CONST position):
+
+Zweck: Die Prozedur dient dazu, innerhalb des Menus in einer Box einen "dauer­
+ haften Informationstext" auszugeben. Die Box bleibt nämlich so lange
+ bestehen, bis sie explizit gelöscht (sehen Sie auch 'erase menunotice')
+ oder durch einen neuen Notiztext überschrieben wird. Wenn der Bild­
+ schirm durch gs-DIALOG-Prozeduren überschrieben wird, wird die
+ Menunotiz ebenfalls ständig mitaufgefrischt und auch, wenn der Befehl
+ 'regenerate menuscreen' oder 'refresh submenu' gegeben wird (Sehen Sie
+ im Gegensatz dazu auch 'menuinfo' ("kurzzeitiger Informationstext").
+ Im Menubildschirm erscheint der 'infotext' in einer Box. Boxbreite und
+ -höhe werden vom System automatisch anhand des übergebenen 'notiz­
+ text'es festgelegt. 'notiztext' muß den gs-DIALOG-Syntax-Regeln (sehen Sie
+ Kap. 5.13) entsprechen. Mit 'position' wird die relative Lage der Box
+ innerhalb des Menubildschirms festgelegt (1, 2, 3, 4, 5: sehen Sie dazu
+ Kap. 5.12). In einem Menu kann zu einem Zeitpunkt nur eine Menunotiz
+ abgelegt werden. Durch ein erneutes 'write menunotice' wir eine beste­
+ hende Menunotiz überschrieben.
+
+
+#ib#yes#ie#
+BOOL PROC yes (WINDOW VAR w, TEXT CONST frage):
+
+Zweck: Vergl. 'menuwindowyes'. Hier wird nur zusätzlich das Fenster festgelegt,
+ das bei 'menuwindowyes' automatisch gesetzt wird.
+
+
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.impressum b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.impressum
new file mode 100644
index 0000000..404826d
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.impressum
@@ -0,0 +1,88 @@
+____________________________________________________________________________
+
+
+#on("b")##on ("u")#
+#center#Betriebssystem E U M E L
+#off ("u")#
+
+
+#center#ls Menü-Generator
+
+
+
+
+#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-Menu-Generator
+
+
+#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.menugenerator/1.0/doc/menu-generator handbuch.index b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.index
new file mode 100644
index 0000000..0aacd97
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.index
@@ -0,0 +1,258 @@
+#block##pageblock#
+#pagenr("%",1)##setcount(1)##count per page#
+#headeven#
+gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#headodd#
+#right#gs-Menu-Generator
+#center#____________________________________________________________
+
+#end#
+#bottomeven#
+#center#____________________________________________________________
+I - % #right#ERGOS
+#end#
+#bottomodd#
+#center#____________________________________________________________
+ERGOS #right# I - %
+#end#
+Index
+
+
+activate 5 - 28
+activate 8 - 1
+anwendungstext 4 - 13
+anwendungstext 8 - 2
+areax 8 - 2
+areaxsize 8 - 2
+areay 8 - 2
+areaysize 8 - 2
+balken links 8 - 2
+balken oben 8 - 3
+balken rechts 8 - 3
+balken unten 8 - 3
+boxalternative 8 - 4
+boxalternative 7 - 10
+boxanswer 8 - 4
+boxanswer 7 - 9
+boxanswerone 8 - 4
+boxanswerone 7 - 10
+boxanswersome 8 - 5
+boxanswersome 7 - 10
+boxinfo 8 - 5
+boxinfo 7 - 9
+boxno 8 - 5
+boxno 7 - 10
+boxnotice 8 - 6
+boxnotice 7 - 10
+boxone 8 - 6
+boxone 7 - 10
+boxsome 8 - 6
+boxsome 7 - 10
+boxyes 8 - 7
+boxyes 7 - 10
+center 8 - 7
+center 7 - 8
+clear buffer 8 - 7
+clear buffer and count 8 - 7
+current menuwindow 8 - 8
+cursor 8 - 8
+cursor 7 - 6
+cursor off 8 - 8
+cursor off 5 - 6
+cursor off 5 - 2
+cursor on 8 - 8
+cursor on 5 - 6
+cursor on 5 - 2
+deactivate 8 - 9
+deactivate 5 - 28
+direktstart 8 - 9
+ecke oben links 8 - 10
+ecke oben rechts 8 - 10
+ecke unten links 8 - 10
+ecke unten rechts 8 - 10
+edit 8 - 11
+edit 7 - 6
+editget 8 - 11
+erase 7 - 5
+erase 8 - 11
+erase footnote 8 - 12
+erase footnote 7 - 11
+erase menunotice 8 - 12
+erasemenunotice 5 - 15
+get 8 - 12
+get 7 - 7
+get cursor 8 - 13
+get cursor 7 - 6
+getline 7 - 7
+getline 8 - 13
+get menuwindowcursor 5 - 21
+get menuwindowcursor 8 - 13
+handle menu 3 - 2
+handle menu 8 - 13
+infix namen 8 - 14
+infix namen 5 - 26
+install menu 3 - 2
+install menu 4 - 3
+install menu 8 - 14
+invers 8 - 15
+kreuz 8 - 15
+line 8 - 15
+line 7 - 6
+menualternative 8 - 15
+menualternative 5 - 12
+menuanswer 8 - 17
+menuanswer 5 - 2
+menuanswerone 8 - 17
+menuanswerone 5 - 8
+menuanswersome 5 - 8
+menuanswersome 8 - 18
+menu archiv checken 8 - 18
+menu archiv checken 6 - 4
+menu archiv grundeinstellung 6 - 4
+menu archiv grundeinstellung 8 - 18
+menu archiv holen 8 - 19
+menu archiv holen 6 - 4
+menu archiv initialisieren 8 - 19
+menu archiv initialisieren 6 - 4
+menu archiv loeschen 8 - 19
+menu archiv loeschen 6 - 4
+menu archiv neue diskette 8 - 19
+menu archiv neue diskette 6 - 4
+menu archiv reservieren 6 - 4
+menu archiv reservieren 8 - 19
+menu archiv reservierung aufgeben 6 - 4
+menu archiv reservierung aufgeben 8 - 19
+menu archiv schreibcheck 8 - 20
+menu archiv schreibcheck 6 - 4
+menu archiv schreiben 6 - 4
+menu archiv schreiben 8 - 20
+menu archiv verzeichnis 8 - 20
+menu archiv verzeichnis 6 - 4
+menu archiv verzeichnis drucken 6 - 4
+menu archiv verzeichnis drucken 8 - 20
+menu archiv zieltask einstellen 6 - 4
+menu archiv zieltask einstellen 8 - 20
+menu dateien aufraeumen 8 - 21
+menu dateien aufraeumen 6 - 6
+menu dateien drucken 6 - 6
+menu dateien drucken 8 - 21
+menu dateien kopieren 6 - 6
+menu dateien kopieren 8 - 22
+menu dateien loeschen 8 - 22
+menu dateien loeschen 6 - 6
+menu dateien speicherplatz 6 - 6
+menu dateien speicherplatz 8 - 22
+menu dateien umbenennen 8 - 23
+menu dateien umbenennen 6 - 6
+menu dateien verzeichnis 6 - 6
+menu dateien verzeichnis 8 - 23
+menufootnote 5 - 17
+menufootnote 8 - 23
+menufunktion 4 - 6
+menufunktion 8 - 24
+menuinfo 5 - 4
+menuinfo 8 - 24
+menukartenname 8 - 25
+menuno 8 - 25
+menuno 5 - 10
+menuone 5 - 6
+menuone 8 - 25
+menusome 5 - 7
+menusome 8 - 26
+menuwindowcenter 8 - 26
+menuwindowcenter 5 - 23
+menuwindowcursor 5 - 21
+menuwindowcursor 8 - 27
+menuwindowedit 8 - 27
+menuwindowedit 5 - 19
+menuwindoweditget 8 - 27
+menuwindoweditget 5 - 22
+menuwindowget 8 - 28
+menuwindowget 5 - 22
+menuwindowline 8 - 28
+menuwindowline 5 - 21
+menuwindowno 5 - 22
+menuwindowout 5 - 22
+menuwindowout 8 - 28
+menuwindowpage 8 - 29
+menuwindowpage 5 - 20
+menuwindowshow 5 - 19
+menuwindowshow 8 - 29
+menuwindowstop 5 - 23
+menuwindowstop 8 - 29
+menuwindowyes 5 - 22
+menuyes 5 - 10
+menuyes 8 - 30
+no 8 - 30
+no 7 - 7
+not empty 5 - 27
+not empty 8 - 30
+oberbegriff 8 - 31
+oberbegriff 4 - 5
+oeffne menu 8 - 31
+oeffne menu 4 - 3
+oeffne menukarte 8 - 32
+oeffne menukarte 4 - 3
+ohne praefix 5 - 26
+ohne praefix 8 - 32
+oldmenufootnote 5 - 17
+old menufootnote 8 - 32
+out 7 - 7
+out 8 - 33
+out footnote 7 - 11
+out footnote 8 - 33
+out frame 8 - 33
+out frame 7 - 5
+page 8 - 33
+page 7 - 11
+page 7 - 5
+page up 7 - 11
+put 8 - 33
+put 7 - 7
+putline 8 - 34
+putline 7 - 7
+refresh submenu 5 - 18
+refresh submenu 8 - 34
+regenerate menuscreen 8 - 34
+regenerate menuscreen 5 - 18
+regenerate menuscreen 5 - 4
+remaining lines 8 - 34
+remaining lines 7 - 6
+remaining menuwindowlines 5 - 21
+remaining menuwindowlines 8 - 34
+reset dialog 8 - 35
+schliesse menu 4 - 3
+schliesse menu 8 - 35
+schliesse menukarte 8 - 35
+schliesse menukarte 4 - 3
+senkrecht 8 - 35
+show 8 - 35
+show 7 - 5
+show 8 - 36
+show 7 - 6
+show menuwindow 8 - 36
+show menuwindow 5 - 20
+stdinfoedit 8 - 36
+stop 7 - 8
+stop 8 - 37
+testinstallation 8 - 37
+testinstallation 4 - 3
+textprozedur 4 - 8
+textprozedur 8 - 38
+text zeile 4 - 13
+textzeile 8 - 39
+trennlinie 4 - 6
+trennlinie 8 - 38
+waagerecht 8 - 39
+WINDOW 7 - 2
+window 7 - 4
+window 8 - 40
+write menunotice 8 - 40
+write menunotice 5 - 15
+yes 7 - 7
+yes 8 - 41
+
+
diff --git a/app/gs.menugenerator/1.0/doc/menu-generator handbuch.inhalt b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.inhalt
new file mode 100644
index 0000000..8b1aef4
--- /dev/null
+++ b/app/gs.menugenerator/1.0/doc/menu-generator handbuch.inhalt
@@ -0,0 +1,72 @@
+#type ("elite.lq")##limit (11.5)##pagelength (16.5)##pageblock#
+#start (1.8,0.0)#
+#type ("prop.breit.lq")#
+Inhaltsverzeichnis
+#type ("elite.lq")#
+
+
+1 Was kann ls-Menu-Generator 3
+
+2 Installation von ls-Menu-Generator 6
+2. 1 Voraussetzungen 6
+2. 2 Lieferumfang 6
+2. 3 Installation 7
+
+3 Die Arbeitsweise von ls-DIALOG 8
+3. 1 Ankoppeln einer Menukarte/ 8
+ Ausführen eines Menus
+3. 2 Aufbau/Inhalt einer Menukarte 11
+
+4. Erstellen einer neuen Menukarte 13
+4. 1 Eintragen der Menupunkte 13
+4. 2 Erstellung und Einbinden von 20
+ Informationstexten
+4. 3 Auslagerung von anwendungsbezogenen 24
+ Texten in die Menukarte
+
+5. Dialoge innerhalb des Menus 27
+5. 1 Eingabe eines Textes/Namens 28
+5. 2 Ausgabe einer Information 31
+5. 3 Auswahl eines Namen durch Ankreuzen 32
+5. 4 Auswahl mehrerer Namen durch Ankreuzen 34
+5. 5 Eingabe eines Textes/Namens - alternativ: 35
+ Auswahl durch Ankreuzen
+5. 6 Die Ja/Nein - Entscheidung 37
+5. 7 Die Alternativentscheidung 39
+5. 8 Die Menunotiz 43
+5. 9 Fußzeilen im Menu 44
+5.10 Wiederherstellung des Menubildschirms 46
+5.11 Arbeiten im Menufenster 47
+5.11.1 Datei anzeigen/editieren 48
+5.11.2 Menufenster öffnen/anzeigen 48
+5.11.3 Menufenster löschen(putzen) 49
+5.11.4 Positionierungen im Menufenster 49
+5.11.5 Informationen über die aktuelle 50
+ Menu-Fensterposition
+5.11.6 Aus-/Eingabe innerhalb des Menufensters 51
+5.11.7 Weitere Prozeduren 52
+5.12 Festlegung der Boxpositionen innerhalb 53
+ des Menus
+5.13 ls-DIALOG-Syntax 54
+ (Regeln zur Erstellung von Texten)
+5.14 Thesaurushandling 55
+5.15 Aktivieren/Deaktivieren von Menupunkten 57
+
+6. Einbinden der Datei- und Archivoperationen 59
+6. 1 Einbinden der Archivoperationen 60
+6. 2 Einbinden der Dateioperationen 65
+
+7. Eigene Fenster und Fensteroperationen 66
+7. 1 Definition von Fenstern 67
+7. 2 Anzeigen/Löschen von Fenstern 70
+7. 3 Operationen innerhalb des Fensters 71
+7. 3.1 Datei anzeigen/editieren 71
+7. 3.2 Positionierungen im Fenster 72
+7. 3.3 Ein- und Ausgaben innerhalb des Fensters 73
+7. 3.4 Weitere Prozeduren 74
+7. 4 Boxoperationen 75
+
+8. Kurzbeschreibung der Befehle 78
+
+9. Register 125
+
diff --git a/app/gs.menugenerator/1.0/source-disk b/app/gs.menugenerator/1.0/source-disk
new file mode 100644
index 0000000..f02e499
--- /dev/null
+++ b/app/gs.menugenerator/1.0/source-disk
@@ -0,0 +1 @@
+informatikpaket/06_gs.menugenerator.img
diff --git a/app/gs.menugenerator/1.0/src/Generatordatei: Archivmenu b/app/gs.menugenerator/1.0/src/Generatordatei: Archivmenu
new file mode 100644
index 0000000..76393fc
--- /dev/null
+++ b/app/gs.menugenerator/1.0/src/Generatordatei: Archivmenu
@@ -0,0 +1,323 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-ARCHIV- **
+ ** MENUTAFEL-GENERATOR **
+ ** Version 1.0 **
+ ** **
+ ** (Stand: 30.03.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+TEXT PROC dateiverzeichnistext:
+ " "15" Verzeichnis der vorhandenen Dateien "14""13""13""
+ + " Eine Liste der vorhandenen Dateien wird auf dem "13""
+ + " Bildschirm ausgegeben. "13""13""
+ + " Da die Liste selbst eine Datei ist, kann man sie "13""
+ + " mit der Tastenfolge <ESC> <q> verlassen - das "13""
+ + " wird auch in der Kopfzeile angezeigt. "13""13""
+ + " Innerhalb der Liste kann man sich wie in einer "13""
+ + " Datei bewegen - nicht aber schreiben."
+END PROC dateiverzeichnistext;
+
+TEXT PROC dateiloeschentext:
+ " "15" Dateien löschen "14" "13""13""
+ + " Alle vorhandenen Dateien werden zur Auswahl angebo- "13""
+ + " ten. Anschließend werden die angekreuzten Dateien in "13""
+ + " der Reihenfolge, in der sie angekreuzt wurden, ge- "13""
+ + " löscht. "13""13""
+ + " Zur Sicherheit muß noch einmal für jede einzelne Da- "13""
+ + " tei bestätigt werden, daß sie auch tatsächlich ge- "13""
+ + " löscht werden soll!"
+END PROC dateiloeschentext;
+
+TEXT PROC dateidruckentext:
+ " "15" Dateien drucken "14" "13""13""
+ + " Alle vorhandenen Dateien werden zur Auswahl angebo- "13""
+ + " ten. Anschließend werden die angekreuzten Dateien "13""
+ + " in der Reihenfolge, in der sie angekreuzt wurden, "13""
+ + " zum Drucker geschickt. "13""13""
+ + " Der Vorgang wird auf dem Bildschirm protokolliert."
+END PROC dateidruckentext;
+
+TEXT PROC dateikopierentext:
+ " "15" Datei kopieren "14" "13""13""
+ + " Der Dateiname der Datei, die kopiert werden soll, wird er- "13""
+ + " fragt. Hier kann direkt ein Name eingegeben werden. Mit der "13""
+ + " Tastenfolge <ESC><z> kann man sich auch die vorhandenen Da- "13""
+ + " teien zur Auswahl anbieten lassen und hier einen Namen an- "13""
+ + " kreuzen. Anschließend wird der Name für die Kopie erfragt. "13""13""
+ + " Es muß ein Name eingetragen werden, der noch nicht für eine "13""
+ + " Datei vergeben wurde - ansonsten erfolgt ein Hinweis da- "13""
+ + " rauf und es wird nicht kopiert! "13""
+ + " Da man aber oft für die Kopie einen ähnlichen Namen wie für "13""
+ + " das Original wählt, wird der 'alte' Name vorgeschlagen. Aus "13""
+ + " genannten Gründen muß er aber verändert werden."
+END PROC dateikopierentext;
+
+TEXT PROC dateiumbenennentext:
+ " "15" Datei umbenennen "14" "13""13""
+ + " Der Dateiname der Datei, die umbenannt werden soll, wird er- "13""
+ + " fragt. Hier kann direkt ein Name eingegeben werden. Mit der "13""
+ + " Tastenfolge <ESC><z> kann man sich auch die vorhandenen Da- "13""
+ + " teien zur Auswahl anbieten lassen und dort einen Namen an- "13""
+ + " kreuzen. Anschließend wird der zukünftige Dateiname erfragt. "13""13""
+ + " Es muß ein Name eingetragen werden, der noch nicht für eine "13""
+ + " Datei vergeben wurde - ansonsten erfolgt ein Hinweis und es "13""
+ + " wird nicht umbenannt! "13""
+ + " Da man aber oft den 'neuen' Namen in Anlehnung an den 'alten' "13""
+ + " Namen wählt, wird der 'alte' Name vorgeschlagen. Aus genann- "13""
+ + " ten Gründen muß er aber verändert werden."
+END PROC dateiumbenennentext;
+
+TEXT PROC dateispeicherplatztext:
+ " "15" Datei-Speicherplatz ermitteln "14" "13""13""
+ + " Der Dateiname der Datei, deren Speicherplatz ermittelt "13""
+ + " werden soll, wird erfragt. Hier kann direkt ein Name "13""
+ + " eingegeben werden. Mit der Tastenfolge <ESC><z> kann "13""
+ + " man sich auch die vorhandenen Dateien zur Auswahl an- "13""
+ + " bieten lassen und dort Namen ankreuzen. "13""13""
+ + " Der belegte Speicherplatz der ausgewählten Datei(en) "13""
+ + " wird ermittelt und auf dem Bildschirm angezeigt."
+END PROC dateispeicherplatztext;
+
+TEXT PROC dateiaufraeumtext:
+ " "15" Dateien aufräumen (reorganisieren) "14" "13""13""
+ + " Der Dateiname der Datei, die aufgeräumt (reorganisiert) "13""
+ + " werden soll, wird erfragt. Hier kann direkt ein Name "13""
+ + " eingegeben werden. Mit der Tastenfolge <ESC><z> kann man "13""
+ + " sich auch die vorhandenen Dateien zur Auswahl anbieten "13""
+ + " lassen und dort Namen ankreuzen. "13""13""
+ + " Anschließend werden die ausgewählten Dateien aufgeräumt, "13""
+ + " d.h. die interne Verwaltung der Datei wird optimiert. "13""
+ + " Das führt zumeist dazu, daß die Datei anschließend weni- "13""
+ + " ger Speicherplatz belegt als zuvor. "13""13""
+ + " "15"Achtung! "14" Die Operation ist zeitaufwendig!!!"
+END PROC dateiaufraeumtext;
+
+
+(*------------------------------------------------------------------------*)
+
+
+
+TEXT PROC archivreserviertext:
+ " "15"Reservieren (des Archivlaufwerks) "14" "13""13""
+ + " Das System versucht, auf das Archiv zuzugreifen. Ist das Archiv "13""
+ + " von keiner anderen Task benutzt, dann wird die Frage gestellt, ob "13""
+ + " die Diskette eingelegt ist. Erst zu diesem Zeitpunkt ist sicher- "13""
+ + " gestellt, daß keine andere Task auf das Archiv zugreifen kann!"13""13""
+ + " Nach Bejahen der gestellten Frage ermittelt das System selbstän- "13""
+ + " dig den Namen der eingelegten Diskette, zeigt den Namen auf dem "13""
+ + " Bildschirm an und aktiviert die anderen Menupunkte des Pull-Down- "13""
+ + " Menus. "13""13""
+ + " Beim Verlassen des Pull-Down-Menus oder wenn eine andere Zieltask "13""
+ + " eingestellt wird, wird die Reservierung automatisch aufgehoben!"
+END PROC archivreserviertext;
+
+TEXT PROC neuediskettetext:
+ " "15"Neue Diskette (anmelden) "14" "13""13""
+ + " Der Datenaustausch mit einer Diskette ist nur dann möglich, wenn "13""
+ + " der im System eingestellte Diskettenname (auf dem Bildschirm "13""
+ + " sichtbar) mit dem tatsächlichen Namen der Diskette übereinstimmt. "13""13""
+ + " Nach einem Diskettenwechsel ist das aber zumeist nicht mehr der "13""
+ + " Fall. Nach Aktivieren dieses Menupunktes wird der Name der ein- "13""
+ + " gelegten Diskette ermittelt, im System eingestellt und angezeigt. "13""13""
+ + " Im Gegensatz zum Menupunkt 'Reservieren' greift das System ohne "13""
+ + " Anfrage an den Benutzer auf das Archiv zu (die Reservierung "13""
+ + " bleibt ja bestehen)."
+END PROC neue diskettetext;
+
+TEXT PROC archivschreibtext:
+ " "15"Schreiben (Kopieren) "14" "13""13""
+ + " Alle Dateien der eigenen Task werden zur Auswahl angeboten. An- "13""
+ + " schließend werden Kopien der angekreuzten Dateien in der Reihen- "13""
+ + " folge ihres Ankreuzens in die eingestellte Zieltask geschickt. "13""
+ + " Der Vorgang wird auf dem Bildschirm protokolliert. "13""13""
+ + " Sind in der Zieltask schon Dateien mit gleichem Namen vorhanden, "13""
+ + " so wird erfragt, ob diese dort gelöscht werden sollen. "13""13""
+ + " Normalerweise ist als Zieltask das Archiv der eigenen Station "13""
+ + " eingestellt. Mit dem Menupunkt 'Zieltask einstellen' kann diese "13""
+ + " Einstellung verändert werden."
+END PROC archivschreibtext;
+
+TEXT PROC archivchecktext:
+ " "15"Checken (Prüfen) "14" "13""13""
+ + " Alle Dateien der eingestellten Zieltask (des Archivs) wer- "13""
+ + " den zur Auswahl angeboten. Anschließend werden die ange- "13""
+ + " kreuzten Dateien in der Reihenfolge ihres Ankreuzens 'ge- "13""
+ + " checkt', d.h. daraufhin untersucht, ob sie ohne Fehler ge- "13""
+ + " lesen werden können. Der Vorgang wird auf dem Bildschirm "13""
+ + " protokolliert. "13""13""
+ + " Dieser Menupunkt kann nur ausgeführt werden, wenn der Da- "13""
+ + " teiaustausch mit einem Archiv(manager) erfolgt."
+END PROC archivchecktext;
+
+TEXT PROC archivkombinationstext:
+ " "15"Kombination "14" "13""13""
+ + " Dieser Menupunkt wirkt wie eine Kombination der Menupunkte "13""
+ + " 'Schreiben' und 'Checken' (Weitere Informationen dort). "13""13""
+ + " Alle Dateien der eigenen Task werden zur Auswahl angeboten. "13""
+ + " Die angekreuzten Dateien werden in der Reihenfolge ihres An- "13""
+ + " kreuzens in die eingestellte Zieltask kopiert. Anschließend "13""
+ + " werden alle Dateien, die gerade geschrieben wurden, gecheckt, "13""
+ + " d.h. auf Lesefehler hin untersucht. Beide Vorgänge werden auf "13""
+ + " dem Bildschirm protokolliert. "13""13""
+ + " Dieser Menupunkt kann nur ausgeführt werden, wenn der Datei- "13""
+ + " austausch mit einem Archiv(manager) erfolgt. "
+END PROC archivkombinationstext;
+
+
+TEXT PROC archivholtext:
+ " "15"Holen / Lesen "14" "13""13""
+ + " Alle Dateien der eingestellten Zieltask werden zur Auswahl ange- "13""
+ + " boten. Anschließend werden Kopien der angekreuzten Dateien in der "13""
+ + " Reihenfolge des Ankreuzens in die eigene Task kopiert. Der Vor- "13""
+ + " gang wird auf dem Bildschirm protokolliert. "13""13""
+ + " Sind in der eigenen Task schon Dateien mit gleichem Namen vorhan- "13""
+ + " den, so wird gefragt, ob die 'alten' Dateien überschrieben (ge- "13""
+ + " löscht) werden dürfen. "13""13""
+ + " Normalerweise werden die Dateien vom Archiv der eigenen Station "13""
+ + " geholt. Mit dem Menupunkt 'Zieltask einstellen' kann diese Ein- "13""
+ + " stellung verändert werden."
+END PROC archivholtext;
+
+
+TEXT PROC archivloeschtext:
+ " "15"Löschen "14" "13""13""
+ + " Alle Dateien der eingestellten Zieltask werden zur Auswahl "13""
+ + " angeboten. Anschließend werden die angekreuzten Dateien in "13""
+ + " der Reihenfolge ihres Ankreuzens gelöscht. Zur Sicherheit "13""
+ + " muß noch einmal für jede einzelne Datei bestätigt werden, "13""
+ + " daß sie auch tatsächlich gelöscht werden soll. "13""13""
+ + " Normalerweise ist als Zieltask das Archiv der eigenen Sta- "13""
+ + " tion eingestellt. Mit dem Menupunkt 'Zieltask einstellen' "13""
+ + " kann diese Einstellung verändert werden."
+END PROC archivloeschtext;
+
+TEXT PROC archivverzeichnistext:
+ " "15"Verzeichnis "14" "13""13""
+ + " Eine Liste aller Dateien, die in der Zieltask vorhanden "13""
+ + " sind, wird auf dem Bildschirm ausgegeben. Ist die Ziel- "13""
+ + " task ein Archiv (manager), so wird auch angezeigt, wie- "13""
+ + " viel Platz auf der Diskette belegt ist. "13""13""
+ + " Da die Liste selbt eine Datei ist, kann man sie mit der "13""
+ + " Tastenfolge <ESC> <q> verlassen. Innerhalb der Liste "13""
+ + " kann man sich wie im Editor bewegen."
+END PROC archivverzeichnistext;
+
+TEXT PROC archivdruckentext:
+ " "15"Drucken "14" "13""13""
+ + " Zur Sicherheit fragt das System an, ob ein Datei- "13""
+ + " verzeichnis der Zieltask gedruckt werden soll. Be- "13""
+ + " jaht man diese Frage, so wird ein Dateiverzeichnis "13""
+ + " erstellt und zum Drucker geschickt."
+END PROC archivdruckentext;
+
+TEXT PROC archivinitialisiertext:
+ " "15"Initialisieren (Vollständiges Löschen) "14" "13""13""
+ + " Zunächst erfragt das System, ob die Diskette auch formatiert wer- "13""
+ + " den soll. Bejaht man die Frage, so werden mehrere Formate zur "13""
+ + " Auswahl angeboten - anschließend wird die Diskette formatiert "13""
+ + " (wobei alle Inhalte "15"gelöscht "14" werden). Das Formatieren ist not-"13""
+ + " wendig, wenn man eine 'frische' Diskette verwendet. "13""13""
+ + " In jedem Fall wird dann angefragt, ob die Diskette initialisiert "13""
+ + " bzw. überschrieben werden soll (je nachdem, ob die Diskette schon "13""
+ + " benutzt wurde oder nicht). Nach Bejahen der gestellten Frage wird "13""
+ + " der Name der Diskette erfragt. Bei der Initialisierung erhält die "13""
+ + " Diskette einen (neuen) Namen und wird "15"vollständig gelöscht."14" "13""
+END PROC archivinitialisiertext;
+
+TEXT PROC archivzieltasktext:
+ " "15"Zieltask einstellen "14" "13""13""
+ + " Das System bietet die Alternativen 'Archiv'-'Vatertask'-'PUBLIC' "13""
+ + " und 'Sonstige' zur Auswahl an. Bei der Wahl einer der ersten drei "13""
+ + " Möglichkeiten nimmt das System die vollständige Einstellung vor, "13""
+ + " zeigt den Namen der eingestellten Zieltask an und aktiviert die "13""
+ + " zur Verfügung stehenden Menupunkte. "13""13""
+ + " Als Zieltask kann aber im Prinzip auch jede andere empfangsberei- "13""
+ + " te Task auf der Station oder irgendwo im Netz (wenn installiert) "13""
+ + " gewählt werden. Dazu wählt man die Alternative 'Sonstige'. Nach- "13""
+ + " einander werden der Name der Task und die Stationsnummer erfragt. "13""
+ + " Danach wird erfragt, ob die Zieltask ein Archiv(manager) ist. An- "13""
+ + " schließend verfährt das System wie oben beschrieben."
+END PROC archivzieltasktext;
+
+
+
+
+
+
+
+
+
+oeffne menukarte ("Archiv");
+
+oeffne menu ("ARCHIV", "", "menu archiv reservierung aufgeben");
+
+oberbegriff ("Dateien");
+
+menufunktion ("v", "Verzeichnis", "menu dateien verzeichnis",
+ dateiverzeichnistext);
+trennlinie;
+menufunktion ("l", "Löschen", "menu dateien loeschen",
+ dateiloeschentext);
+menufunktion ("d", "Drucken", "menu dateien drucken",
+ dateidruckentext);
+trennlinie;
+menufunktion ("k", "Kopieren", "menu dateien kopieren",
+ dateikopierentext);
+menufunktion ("u", "Umbenennen", "menu dateien umbenennen",
+ dateiumbenennentext);
+trennlinie;
+menufunktion ("s", "Speicherplatz", "menu dateien speicherplatz",
+ dateispeicherplatztext);
+menufunktion ("a", "Aufräumen", "menu dateien aufraeumen",
+ dateiaufraeumtext);
+
+
+
+oberbegriff ("Archiv", "menu archiv grundeinstellung (4)",
+ "menu archiv reservierung aufgeben");
+
+menufunktion ("r", "Reservieren", "menu archiv reservieren",
+ archivreserviertext);
+menufunktion ("n", "Neue Diskette", "menu archiv neue diskette",
+ neuediskettetext);
+trennlinie;
+menufunktion ("s", "Schreiben", "menu archiv schreiben",
+ archivschreibtext);
+menufunktion ("c", "Checken", "menu archiv checken",
+ archivchecktext);
+menufunktion ("k", "Kombination", "menu archiv schreibcheck",
+ archivkombinationstext);
+menufunktion ("h", "Holen/Lesen", "menu archiv holen",
+ archivholtext);
+menufunktion ("l", "Löschen", "menu archiv loeschen",
+ archivloeschtext);
+trennlinie;
+menufunktion ("v", "Verzeichnis", "menu archiv verzeichnis",
+ archivverzeichnistext);
+menufunktion ("d", "Drucken", "menu archiv verzeichnis drucken",
+ archivdruckentext);
+trennlinie;
+menufunktion ("i", "Initialisieren", "menu archivinitialisieren",
+ archivinitialisiertext);
+menufunktion ("z", "Zieltask einstellen", "menu archiv zieltask einstellen",
+ archivzieltasktext);
+schliesse menu;
+schliesse menukarte;
+
+
diff --git a/app/gs.menugenerator/1.0/src/fonttab.ls-Menu-Generator b/app/gs.menugenerator/1.0/src/fonttab.ls-Menu-Generator
new file mode 100644
index 0000000..a5fd613
--- /dev/null
+++ b/app/gs.menugenerator/1.0/src/fonttab.ls-Menu-Generator
Binary files differ
diff --git a/app/gs.menugenerator/1.0/src/ls-MENUBASISTEXTE b/app/gs.menugenerator/1.0/src/ls-MENUBASISTEXTE
new file mode 100644
index 0000000..48ef277
--- /dev/null
+++ b/app/gs.menugenerator/1.0/src/ls-MENUBASISTEXTE
Binary files differ
diff --git a/app/gs.menugenerator/1.0/src/ls-Menu-Generator 1 b/app/gs.menugenerator/1.0/src/ls-Menu-Generator 1
new file mode 100644
index 0000000..b9dfd73
--- /dev/null
+++ b/app/gs.menugenerator/1.0/src/ls-Menu-Generator 1
@@ -0,0 +1,47 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-Menu-Generator 1 **
+ ** **
+ ** Version 1.0 **
+ ** **
+ ** (Stand: 30.03.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+PACKET ls menu generator 1 DEFINES{} textprozedur,{} textzeile:{}LET maxzeilenzahl = 14,{} maxzeichenzahl = 65,{} zentrierkennung = "%",{} beginmarkkennung = "$",{} endmarkkennung = "&",{} unblockkennung = "�",{} blank = " ",{} dateikennung = ".a";{}LET dateieintrag = "#type (""10"")##limit (16.5)#",{} stdfonttabelle = "fonttab.ls-Menu-Generator";{}ROW 3 TEXT CONST fehlermeldung :: ROW 3 TEXT : ({}"existiert nicht!",{}
+""15"Text ist zu lang - bitte kürzen! "14"",{}""15"Zeilenformatierung mit <ESC> abgebrochen! "14""{});{}ROW 6 TEXT CONST hinweis :: ROW 6 TEXT : ({}"Bitte warten ...",{}"Zulässige Zeilenzahl: ",{}"Tatsächliche Zeilenzahl: ",{}"Textlänge ist in Ordnung!",{}"Textprozedur ist erstellt!",{}"Textzeile ist erstellt!"{});{}PROC textprozedur (TEXT CONST dateiname, prozedurname):{} BOOL VAR mit fehler;{} formatiere (dateiname, mit fehler);{} IF mit fehler{} THEN errorstop (fehlermeldung [3]){} FI;{}
+ bereite den text auf (dateiname);{} erzeuge textprozedur (dateiname, prozedurname);{} out (""7""); out (hinweis [5]);{} last param (dateiname + dateikennung){}END PROC textprozedur;{}PROC textzeile (TEXT CONST dateiname):{} BOOL VAR mit fehler;{} formatiere (dateiname, mit fehler);{} IF mit fehler{} THEN errorstop (fehlermeldung [3]){} FI;{} bereite den text auf (dateiname);{} erzeuge textzeile (dateiname);{} out (""7""); out (hinweis [6]);{} last param (dateiname + dateikennung){}
+END PROC textzeile;{}PROC gib wartehinweis:{} page;{} out (hinweis [1]){}END PROC gib wartehinweis;{}PROC formatiere (TEXT CONST dateiname, BOOL VAR mit fehler):{} TEXT VAR fonttabelle, zeileninhalt;{} kontrolliere existenz;{} stelle fonttabelle ein;{} schreibe font in die datei;{} zeilenformatierung;{} entferne ggf font aus der datei;{} stelle fonttabelle zurueck;{} streiche restleerzeilen weg;{} untersuche ggf datei auf korrektheit.{} kontrolliere existenz:{} IF NOT exists (dateiname){}
+ THEN page; errorstop ("'" + dateiname + "' " + fehlermeldung [1]){} FI.{} stelle fonttabelle ein:{} gib wartehinweis;{} fonttabelle := fonttable;{} fonttable (stdfonttabelle).{} schreibe font in die datei:{} FILE VAR datei :: sequential file (modify, dateiname);{} to line (datei, 1);{} insert record (datei);{} write record (datei, dateieintrag + blank).{} zeilenformatierung:{} disable stop;{} lineform (dateiname);{} IF is error{} THEN clear error;{}
+ mit fehler := TRUE{} ELSE mit fehler := FALSE{} FI;{} enable stop.{} entferne ggf font aus der datei:{} to line (datei, 1);{} read record (datei, zeileninhalt);{} IF pos (zeileninhalt, dateieintrag) > 0{} THEN delete record (datei){} FI.{} stelle fonttabelle zurueck:{} fonttable (fonttabelle).{} streiche restleerzeilen weg:{} REP{} streiche ggf letzte zeile{} UNTIL zeile ist nicht leer PER.{} streiche ggf letzte zeile:{} to line (datei, lines (datei));{}
+ read record (datei, zeileninhalt);{} IF compress (zeileninhalt) = ""{} THEN delete record (datei){} FI.{} zeile ist nicht leer:{} compress (zeileninhalt) <> "".{} untersuche ggf datei auf korrektheit:{} IF NOT mit fehler{} THEN untersuche zeilenzahl{} FI.{} untersuche zeilenzahl:{} IF lines (datei) > maxzeilenzahl{} THEN page;{} out (hinweis [2] + text (maxzeilenzahl)); line;{} out (hinweis [3] + text (lines (datei))); line (2);{} errorstop (fehlermeldung [2]){}
+ ELSE page;{} out (hinweis [4]){} FI.{}END PROC formatiere;{}PROC bereite den text auf (TEXT CONST dateiname):{} INT VAR zaehler;{} TEXT VAR zeileninhalt;{} FILE VAR f :: sequential file (modify, dateiname);{} gib wartehinweis;{} vernichte ggf aufbereitete datei;{} richte datei neu ein;{} uebertrage die zeilen.{} vernichte ggf aufbereitete datei:{} IF exists (dateiname + dateikennung){} THEN forget (dateiname + dateikennung, quiet){} FI.{} richte datei neu ein:{}
+ FILE VAR aus :: sequential file (output, dateiname + dateikennung).{} uebertrage die zeilen:{} FOR zaehler FROM 1 UPTO lines (f) REP{} bereite eine zeile auf{} PER.{} bereite eine zeile auf:{} to line (f, zaehler);{} read record (f, zeileninhalt);{} ersetze alle gaensefuesschen;{} haenge ggf absatzmarke an;{} behandle zeile;{} putline (aus, zeileninhalt).{} ersetze alle gaensefuesschen:{} change all (zeileninhalt, """", "'").{} haenge ggf absatzmarke an:{} IF (zeileninhalt SUB (length (zeileninhalt))) = blank{}
+ THEN IF (zeileninhalt SUB 1) <> zentrierkennung{} THEN zeileninhalt CAT unblockkennung{} FI{} FI.{} behandle zeile:{} IF zeile soll zentriert werden{} THEN zentriere zeile{} ELIF zeile ist leerzeile{} THEN kennzeichne leerzeile{} ELSE blocke zeile auf stdlaenge{} FI.{} zeile soll zentriert werden:{} (zeileninhalt SUB 1) = zentrierkennung.{} zeile ist leerzeile:{} compress (zeileninhalt) = "".{} zentriere zeile:{} zeileninhalt := subtext (zeileninhalt, 2);{}
+ zeileninhalt := anfangsblanks + zeileninhalt;{} zeilenabschluss.{} anfangsblanks:{} ((maxzeichenzahl - length (zeileninhalt)) DIV 2) * blank.{} zeilenabschluss:{} ersetze markierungszeichen;{} setze 13.{} ersetze markierungszeichen:{} change all (zeileninhalt, beginmarkkennung, """15""");{} change all (zeileninhalt, endmarkkennung, """14""").{} setze 13:{} zeileninhalt CAT " ""13""".{} kennzeichne leerzeile:{} zeileninhalt := """13""".{} blocke zeile auf stdlaenge:{}
+ IF zeile darf nicht geblockt werden{} THEN ersetze endezeichen{} ELSE fuehre blockung aus{} FI.{} zeile darf nicht geblockt werden:{} (zeileninhalt SUB length (zeileninhalt)) = unblockkennung.{} ersetze endezeichen:{} zeileninhalt := subtext (zeileninhalt, 1, length (zeileninhalt) - 1);{} ersetze markierungszeichen;{} setze 13.{} fuehre blockung aus:{} ROW maxzeichenzahl INT VAR leerzeichen;{} INT VAR gezaehlte blanks, zu verteilende blanks;{} ordne anfangswerte zu;{}
+ verteile blanks gleichmaessig;{} verteile blanks zufaellig;{} baue zeile zusammen;{} ersetze markierungszeichen;{} setze 13.{} ordne anfangswerte zu:{} bestimme blankanzahl in der zeile;{} bestimme zu verteilende blanks;{} initialisiere die reihung.{} bestimme blankanzahl in der zeile:{} gezaehlte blanks := 0;{} INT VAR zeiger;{} FOR zeiger FROM 1 UPTO length (zeileninhalt) REP{} IF (zeileninhalt SUB zeiger) = blank{} THEN gezaehlte blanks INCR 1{}
+ FI{} PER.{} bestimme zu verteilende blanks:{} zu verteilende blanks := maxzeichenzahl - length (zeileninhalt).{} initialisiere die reihung:{} FOR zeiger FROM 1 UPTO gezaehlte blanks REP{} leerzeichen [zeiger] := 1{} PER.{} verteile blanks gleichmaessig:{} WHILE (zu verteilende blanks DIV gezaehlte blanks) > 0 REP{} schlag je ein blank auf;{} zu verteilende blanks DECR gezaehlte blanks{} PER.{} schlag je ein blank auf:{} FOR zeiger FROM 1 UPTO gezaehlte blanks REP{}
+ leerzeichen [zeiger] INCR 1{} PER.{} verteile blanks zufaellig:{} FOR zeiger FROM 1 UPTO zu verteilende blanks REP{} leerzeichen [random (1, gezaehlte blanks)] INCR 1{} PER.{} baue zeile zusammen:{} TEXT VAR zwischen := zeileninhalt;{} INT VAR aktuelles blank := 0;{} zeileninhalt := "";{} FOR zeiger FROM 1 UPTO length (zwischen) REP{} TEXT VAR aktuelles zeichen :: (zwischen SUB zeiger);{} IF aktuelles zeichen = blank{} THEN aktuelles blank INCR 1;{}
+ zeileninhalt CAT (leerzeichen [aktuelles blank] * blank){} ELSE zeileninhalt CAT aktuelles zeichen{} FI{} PER{}END PROC bereite den text auf;{}PROC erzeuge textprozedur (TEXT CONST dateiname, prozedurname):{} mache aus den zeilen einzeltexte;{} entferne ueberfluessige restzeilen;{} erstelle eine textprozedur.{} mache aus den zeilen einzeltexte:{} INT VAR zeiger;{} FILE VAR ausdatei :: sequential file (modify, dateiname + dateikennung);{} FOR zeiger FROM 1 UPTO lines (ausdatei) REP{}
+ bearbeite eine zeile{} PER.{} bearbeite eine zeile:{} TEXT VAR zeileninhalt;{} to line (ausdatei, zeiger);{} read record (ausdatei, zeileninhalt);{} zeileninhalt := """ " + zeileninhalt + """ +";{} change all (zeileninhalt, "­", "-");{} write record (ausdatei, zeileninhalt).{} entferne ueberfluessige restzeilen:{} REP{} entferne ggf eine zeile{} UNTIL zeileninhalt <> """ ""13"""" +" PER;{} entferne return aus letzter zeile.{} entferne ggf eine zeile:{}
+ IF compress (zeileninhalt) = """ ""13"""" +"{} THEN delete record (ausdatei){} FI.{} entferne return aus letzter zeile:{} to line (ausdatei, lines (ausdatei));{} read record (ausdatei, zeileninhalt);{} zeileninhalt := subtext (zeileninhalt, 1, length (zeileninhalt) - 6);{} write record (ausdatei, zeileninhalt).{} erstelle eine textprozedur:{} schreibe procanfang;{} schreibe procende.{} schreibe procanfang:{} to line (ausdatei, 1);{} insert record (ausdatei);{}
+ write record (ausdatei, "TEXT PROC " + prozedurname + ":").{} schreibe procende:{} to line (ausdatei, lines (ausdatei) + 1);{} insert record (ausdatei);{} write record (ausdatei, "END PROC " + prozedurname + ";").{}END PROC erzeuge textprozedur;{}PROC erzeuge textzeile (TEXT CONST dateiname):{} entferne ueberfluessige restzeilen;{} entferne return aus letzter zeile;{} erstelle eine textzeile.{} entferne ueberfluessige restzeilen:{} TEXT VAR zeileninhalt;{} INT VAR zeiger;{}
+ FILE VAR ausdatei :: sequential file (modify, dateiname + dateikennung);{} REP{} entferne ggf eine zeile{} UNTIL compress (zeileninhalt) <> """13""" PER.{} entferne ggf eine zeile:{} to line (ausdatei, lines (ausdatei));{} read record (ausdatei, zeileninhalt);{} IF compress (zeileninhalt) = """13"""{} THEN delete record (ausdatei){} FI.{} entferne return aus letzter zeile:{} to line (ausdatei, lines (ausdatei));{} read record (ausdatei, zeileninhalt);{} change all (zeileninhalt, """13""", "");{}
+ write record (ausdatei, zeileninhalt).{} erstelle eine textzeile:{} haenge die zeilen aneinander;{} fasse zeile in gaensefuesschen;{} schreibe einzelzeile in ausgabedatei.{} haenge die zeilen aneinander:{} TEXT VAR zeile :: "";{} FOR zeiger FROM 1 UPTO lines (ausdatei) REP{} to line (ausdatei, zeiger);{} read record (ausdatei, zeileninhalt);{} zeile CAT (" " + zeileninhalt){} PER.{} fasse zeile in gaensefuesschen:{} zeile := """" + zeile + """";{} change all (zeile, "­","-").{}
+ schreibe einzelzeile in ausgabedatei:{} forget (dateiname + dateikennung, quiet);{} FILE VAR fertig :: sequential file (modify, dateiname + dateikennung);{} to line (fertig, 1);{} insert record (fertig);{} write record (fertig, zeile){}END PROC erzeuge textzeile;{}END PACKET ls menu generator 1;{}
+
diff --git a/app/gs.menugenerator/1.0/src/ls-Menu-Generator 2 b/app/gs.menugenerator/1.0/src/ls-Menu-Generator 2
new file mode 100644
index 0000000..608f680
--- /dev/null
+++ b/app/gs.menugenerator/1.0/src/ls-Menu-Generator 2
@@ -0,0 +1,72 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-Menu-Generator 2 **
+ ** **
+ ** Version 1.0 **
+ ** **
+ ** (Stand: 30.03.88) **
+ ** **
+ ** **
+ ** Autor: Wolfgang Weber, Bielefeld **
+ ** **
+ ** **
+ ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld **
+ ** **
+ ** Copyright (C) 1988 ERGOS GmbH, Siegburg **
+ ** **
+ *********************************************************
+ *********************************************************
+
+ *)
+
+PACKET ls menu generator 2 DEFINES{} oeffne menukarte,{} oeffne menu,{} oberbegriff,{} menufunktion,{} trennlinie,{} schliesse menu,{} schliesse menukarte,{} testinstallation:{}LET menutafeltype = 1954,{} kennung = "ls - Menu - Generator",{} mm taskname = "ls-MENUKARTEN",{} menutafelpraefix = "ls-MENUKARTE:",{} menu grundtext = "ls-MENUBASISTEXTE",{} zwischenablagename = "MENU-ZWISCHENABLAGEDATEI INTERN";{}
+LET maxmenus = 6,{} maxmenutexte = 300,{} maxinfotexte = 2000,{} maxhauptmenupunkte = 10,{} maxuntermenupunkte = 15,{} maxmenubreite = 71; (* Breite der Hauptmenüzeile - 2 *){}LET blank = " ",{} cleop = ""4"",{} piep = ""7"",{} trennzeilensymbol = "###",{} bleibt leer symbol = "***",{} hauptmenuluecke = " ";{}LET dummyname = "Dummy für Anwendertexte",{}
+ install finished = "Installation abgeschlossen!",{} card finished = "Menukartengenerierung abgeschlossen!",{} filetype = 1003;{}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);{}ROW 14 TEXT CONST aussage :: ROW 14 TEXT : ({}"ACHTUNG - Eine Menukarte mit diesem Namen existiert bereits - ACHTUNG",{}"Kann die bereits existierende Menukarte gelöscht werden",{}
+"Dann kann keine neue Menukarte mit diesem Namen erstellt werden!",{}"Zum Weitermachen bitte irgendeine Taste tippen!",{}"Sollen auch Anwendungstexte in die Menukarte aufgenommen werden",{}"Auswahl der Datei, in der die Anwendungstexte stehen.",{}"Bitte die gewünschte Datei ankreuzen!",{}"Durchgang 1 von 2 Durchgängen - in Arbeit ist Zeile: ",{}"Durchgang 2 von 2 Durchgängen - in Arbeit ist Zeile: ",{}"",{}"Einlesen von Texten aus Datei : ",{}"Bearbeitet wird Menu : ",{}"Eingetragen wird Oberbegriff : ",{}
+"Eingetragen wird Menufunktion : "{});{}ROW 22 TEXT CONST fehlermeldung :: ROW 22 TEXT : ({}"Ohne die Datei '",{}"' "13""10""10" ist die Menuerstellung "15"unmöglich "14"!!",{}"Hier muß unbedingt eine Datei angekreuzt werden!",{}"Ausgewählte Datei hat falschen Typ (<> 1003) )",{}"Zu viele Anwendungstexte in der Datei ",{}"Anführungszeichen fehlt am Anfang oder Ende der Zeile ",{}"Anführungszeichen fehlt irgendwo in Zeile ",{}"Die angegebene Datei existiert nicht!",{}"Menukarte noch nicht geöffnet ('oeffne menukarte' fehlt)! ",{}
+"Vorausgehendes Menu nicht geschlossen! ",{}"Zu viele Menus in der Menukarte (> " + text (maxmenus) + ")!",{}"Menuname ist mehrfach vorhanden!",{}"Menu noch nicht geoeffnet ('oeffne menu' fehlt)!",{}"Zu viele Oberbegriffe in einem Menu (> " + text (maxhauptmenupunkte) + ")!",{}"Die Kopfzeile ist zu lang (> " + text (maxmenubreite) + ")!",{}"Menupunkt-Kürzel ist länger als ein Zeichen!",{}"Menupunkt-Kürzel kommt mehrfach vor (nicht eindeutig)!",{}"Menupunkt-Bezeichnung ist zu lang!",{}"Zu viele (> " + text (maxuntermenupunkte) + ") Menupunkte in einem Pull-Down-Menu!",{}
+"Menukarte '",{}"' gibt es nicht in dieser Task!",{}"' hat falsche(n) Typ/Bezeichnung"{});{}TEXT VAR menuinfotextdateiname,{} aktueller menudateiname;{}BOOL VAR menuleiste ist bereit :: FALSE,{} menu ist geoeffnet :: FALSE;{}BOUND MENULEISTE VAR menuleiste;{}BOUND MENUTEXT VAR basistexte;{}BOUND MENU VAR aktuelles menu;{}DATASPACE VAR ds;{}OP := (MENUTEXT VAR ziel, MENUTEXT VAR quelle):{} INT VAR z;{} ziel.anzahl menutexte := quelle.anzahl menutexte;{} FOR z FROM 1 UPTO quelle.anzahl menutexte REP{}
+ ziel.platz [z] := quelle.platz [z]{} PER{}END OP :=;{}OP := (MENU VAR ziel, MENU CONST quelle):{} CONCR (ziel) := CONCR (quelle){}END OP :=;{}OP := (EINZELMENU VAR ziel, EINZELMENU CONST quelle):{} CONCR (ziel) := CONCR (quelle){}END OP :=;{}OP := (MENUPUNKT VAR ziel, MENUPUNKT CONST quelle):{} CONCR (ziel) := CONCR (quelle){}END OP :=;{}PROC oeffne menukarte (TEXT CONST menukartenname):{} gib bildschirmhinweis aus;{} ueberpruefe voraussetzungen;{} erfrage den namen der datei mit den anwendertexten;{}
+ erstelle neue menuleiste.{} gib bildschirmhinweis aus:{} page; out (center (invers (kennung))).{} ueberpruefe voraussetzungen:{} ueberpruefe ob basistexte vorhanden sind;{} ueberpruefe ob menukarte schon vorhanden ist.{} ueberpruefe ob basistexte vorhanden sind:{} IF NOT exists (menu grundtext){} THEN gib hinweis und brich ab{} FI.{} gib hinweis und brich ab:{} disable stop;{} fetch (menu grundtext, /mm taskname);{} IF is error{} THEN clear error;{} enable stop;{}
+ cursor (1, 4); out (cleop);{} errorstop (fehlermeldung [1] + menu grundtext + fehlermeldung [2]){} ELSE clear error;{} enable stop{} FI.{} ueberpruefe ob menukarte schon vorhanden ist:{} IF exists (menukarte){} THEN gib hinweis auf vorhandene menukarte;{} frage ob die alte karte geloescht werden darf{} FI.{} menukarte:{} menutafelpraefix + menukartenname.{} gib hinweis auf vorhandene menukarte:{} cursor (1, 4); out (cleop);{}
+ cursor (1, 4); out (center (menukarte));{} cursor (1, 6); out (center (invers (aussage [1]))).{} frage ob die alte karte geloescht werden darf:{} cursor (2, 9);{} IF yes (aussage [2]){} THEN forget (menukarte, quiet){} ELSE weiterarbeit ist unmoeglich{} FI.{} weiterarbeit ist unmoeglich:{} cursor (1, 12); out (center (invers (aussage [3])));{} cursor (2, 15); out (aussage [4]);{} cursor (2, 16); pause; page;{} errorstop ("").{} erfrage den namen der datei mit den anwendertexten:{}
+ cursor (1, 4); out (cleop);{} IF yes (aussage [5]){} THEN biete dateiauswahl an{} ELSE erzeuge dateidummy{} FI.{} biete dateiauswahl an:{} menuinfotextdateiname := one (2, 6, 77, 19, ALL myself,{} aussage [6], aussage [7]);{} ueberpruefe den dateinamen;{} ueberpruefe den dateityp.{} ueberpruefe den dateinamen:{} IF compress (menuinfotextdateiname) = ""{} THEN page; errorstop (fehlermeldung [3]){} FI.{} ueberpruefe den dateityp:{}
+ IF datei hat falschen typ{} THEN page; errorstop (fehlermeldung [4]){} FI.{} datei hat falschen typ:{} ds := old (menuinfotextdateiname);{} IF type (ds) <> filetype{} THEN forget (ds); TRUE{} ELSE forget (ds); FALSE{} FI.{} erzeuge dateidummy:{} forget (dummyname, quiet);{} FILE VAR datei :: sequential file (modify, dummyname);{} to line (datei, 1);{} menuinfotextdateiname := dummyname.{} erstelle neue menuleiste:{} INT VAR zeiger;{} TEXT VAR zeileninhalt;{}
+ initialisiere werte;{} aktueller menudateiname := menukarte;{} menuleiste := new (aktueller menudateiname);{} type (old (aktueller menudateiname), menutafeltype);{} menuleiste.belegt := 0;{} menuleiste ist bereit := TRUE;{} trage menubasistexte ein;{} trage anwendungstexte ein.{} initialisiere werte:{} menuleiste ist bereit := FALSE;{} menu ist geoeffnet := FALSE.{} trage menubasistexte ein:{} basistexte := old (menu grundtext);{}
+ menuleiste.menutext := basistexte.{} trage anwendungstexte ein:{} konvertiere (menuinfotextdateiname, zwischenablagename,{} menuleiste.infotext.anzahl infotexte);{} ueberpruefe anwendungstextanzahl;{} trage anwendungstexte in die menuleiste.{} ueberpruefe anwendungstextanzahl:{} IF menuleiste.infotext.anzahl infotexte > maxinfotexte{} THEN forget (zwischenablagename, quiet);{} forget (aktueller menudateiname, quiet);{} errorstop (fehlermeldung [5] + "'" + menuinfotextdateiname + "'"){}
+ FI.{} trage anwendungstexte in die menuleiste:{} gib hinweis auf anwendungstexteintrag;{} FILE VAR ein :: sequential file (input, zwischenablagename);{} FOR zeiger FROM 1 UPTO menuleiste.infotext.anzahl infotexte REP{} getline (ein, zeileninhalt);{} menuleiste.infotext.stelle [zeiger] := zeileninhalt;{} cout (zeiger){} PER;{} forget (zwischenablagename, quiet);{} forget (dummyname , quiet).{} gib hinweis auf anwendungstexteintrag:{} cursor (1, 7); out (aussage [9]).{}
+END PROC oeffne menukarte;{}PROC konvertiere (TEXT CONST eingabedatei, ausgabedatei,{} INT VAR anzahl konvertierter saetze):{} loesche ausgabedatei;{} untersuche eingabedatei;{} konvertiere saetze.{} loesche ausgabedatei:{} IF exists (ausgabedatei){} THEN forget (ausgabedatei, quiet){} FI.{} untersuche eingabedatei:{} IF NOT exists (eingabedatei){} THEN errorstop (fehlermeldung [8]){} FI.{} konvertiere saetze:{} gib hinweis;{} konvertiere satzweise.{}
+ gib hinweis:{} cursor (1, 4); out (cleop);{} cursor (1, 4); out (aussage [11] + "'" + eingabedatei + "'");{} cursor (1, 6); out (aussage [ 8]);{} anzahl konvertierter saetze := 0.{} konvertiere satzweise:{} TEXT VAR zeileninhalt :: "";{} FILE VAR eingabe :: sequential file (input, eingabedatei);{} WHILE NOT eof (eingabe) REP{} behandle eine dateizeile{} PER;{} optimiere ausgabedatei.{} behandle eine dateizeile:{} getline (eingabe, zeileninhalt);{} anzahl konvertierter saetze INCR 1;{}
+ cout (anzahl konvertierter saetze);{} untersuche zeile;{} wandle die zeile um;{} FILE VAR aus :: sequential file (output, ausgabedatei);{} write (aus, textausgabe).{} untersuche zeile:{} zeileninhalt := compress (zeileninhalt);{} IF zeileninhalt = ""{} THEN zeileninhalt := """"""{} FI;{} IF (zeileninhalt SUB 1) <> """"{} OR (zeileninhalt SUB length (zeileninhalt)) <> """"{} THEN bereite abgang vor;{} errorstop (fehlermeldung [6] + text (anzahl konvertierter saetze)){}
+ FI.{} wandle die zeile um:{} TEXT VAR textausgabe :: "", codekette;{} zeileninhalt := subtext (zeileninhalt, 2, length (zeileninhalt) - 1);{} WHILE gaensefuesschenposition > 0 REP{} textausgabe CAT subtext (zeileninhalt, 1, gaensefuesschenposition - 1);{} zeileninhalt := subtext (zeileninhalt, gaensefuesschenposition);{} codekette := subtext (zeileninhalt, 1, pos (zeileninhalt, """", 2));{} IF codekette = """7"""{} THEN textausgabe CAT ""7""{}
+ ELIF codekette = """5"""{} THEN textausgabe CAT ""5""{} ELIF codekette = """4"""{} THEN textausgabe CAT ""4""{} ELIF codekette = """10"""{} THEN textausgabe CAT ""10""{} ELIF codekette = """13"""{} THEN textausgabe CAT ""13""{} ELIF codekette = """14"""{} THEN textausgabe CAT ""14""{} ELIF codekette = """15"""{} THEN textausgabe CAT ""15""{} ELIF codekette = """"""{} THEN textausgabe CAT """"{}
+ ELSE errorstop (fehlermeldung [7] +{} text (anzahl konvertierter saetze)){} FI;{} zeileninhalt := subtext (zeileninhalt, 1 + length (codekette)){} PER;{} textausgabe CAT zeileninhalt.{} gaensefuesschenposition:{} pos (zeileninhalt, """").{} bereite abgang vor:{} forget (ausgabedatei, quiet);{} line (2).{} optimiere ausgabedatei:{} FILE VAR ausgabe :: sequential file (modify, ausgabedatei);{} WHILE lines (ausgabe) > 0 CAND letzter satz ist leer REP{}
+ to line (ausgabe, lines (ausgabe));{} delete record (ausgabe);{} anzahl konvertierter saetze DECR 1;{} cout (anzahl konvertierter saetze ){} PER.{} letzter satz ist leer:{} TEXT VAR satz;{} to line (ausgabe,lines (ausgabe));{} read record (ausgabe, satz);{} IF compress (satz) = "" OR compress (satz) = ""13""{} THEN TRUE{} ELSE FALSE{} FI.{}END PROC konvertiere;{}PROC oeffne menu (TEXT CONST name, einstiegsproc, ausstiegsproc,{} itext, ltext, vtext):{}
+ gib hinweis auf geoeffnetes menu;{} ueberpruefe auf ungereimtheiten;{} nimm eintragungen in datenraum vor.{} gib hinweis auf geoeffnetes menu:{} cursor (1, 4); out (cleop);{} out (aussage [12]); out (invers (name));{} cursor (1, 6).{} ueberpruefe auf ungereimtheiten:{} pruefe auf bereits geoeffnete menuliste;{} pruefe auf noch geoeffnetes menu;{} pruefe auf noch freie menuplaetze;{} pruefe auf schon vorhandenen menunamen.{} pruefe auf bereits geoeffnete menuliste:{} IF NOT menuleiste ist bereit{}
+ THEN bereinige eintragungen (9){} FI.{} pruefe auf noch geoeffnetes menu:{} IF menu ist geoeffnet{} THEN bereinige eintragungen (10){} FI.{} pruefe auf noch freie menuplaetze:{} IF menuleiste.belegt = maxmenus{} THEN bereinige eintragungen (11){} FI.{} pruefe auf schon vorhandenen menunamen:{} IF menuname schon vorhanden{} THEN bereinige eintragungen (12){} FI.{} menuname schon vorhanden:{} INT VAR i;{} FOR i FROM 1 UPTO menuleiste.belegt REP{}
+ untersuche einzelnen menunamen{} PER;{} FALSE.{} untersuche einzelnen menunamen:{} IF menuleiste.menu [i].menuname = compress (name){} THEN LEAVE menuname schon vorhanden WITH TRUE{} FI.{} nimm eintragungen in datenraum vor:{} forget (ds);{} ds := nilspace;{} aktuelles menu := ds;{} init (aktuelles menu);{} aktuelles menu.menuname := compress (name);{} aktuelles menu.menueingangsprozedur := compress (einstiegsproc);{}
+ aktuelles menu.menuausgangsprozedur := compress (ausstiegsproc);{} IF itext <> ""{} THEN aktuelles menu.menuinfo := itext;{} aktuelles menu.lizenznummer := ltext;{} aktuelles menu.versionsnummer := vtext{} ELSE aktuelles menu.menuinfo := bleibt leer symbol;{} aktuelles menu.lizenznummer := "";{} aktuelles menu.versionsnummer := ""{} FI;{} menu ist geoeffnet := TRUE.{}END PROC oeffne menu;{}
+PROC oeffne menu (TEXT CONST name, einstiegsproc, ausstiegsproc):{} oeffne menu (name, einstiegsproc, ausstiegsproc, "", "", ""){}END PROC oeffne menu;{}PROC oeffne menu (TEXT CONST name):{} oeffne menu (name, "", "", "", "", ""){}END PROC oeffne menu;{}PROC bereinige eintragungen (INT CONST nummer):{} forget (ds);{} forget (aktueller menudateiname, quiet);{} menuleiste ist bereit := FALSE;{} menu ist geoeffnet := FALSE;{} errorstop (fehlermeldung [nummer]){}END PROC bereinige eintragungen;{}
+PROC init (MENU VAR m):{} m.menuname := "";{} m.hauptmenuzeiger := 1;{} m.untermenuanfang := 0;{} m.untermenuzeiger := 0;{} m.menueingangsprozedur := "";{} m.menuausgangsprozedur := "";{} m.menuinfo := "";{} m.versionsnummer := "";{} m.anzahl hauptmenupunkte := 0;{} belege hauptmenupunkte.{} belege hauptmenupunkte:{} INT VAR i;{} FOR i FROM 1 UPTO maxhauptmenupunkte REP{}
+ aktuelles einzelmenu.belegt := 0;{} aktuelles einzelmenu.ueberschrift := "";{} aktuelles einzelmenu.anfangsposition := 0;{} aktuelles einzelmenu.maxlaenge := 0;{} aktuelles einzelmenu.aktueller untermenupunkt := 1;{} aktuelles einzelmenu.startprozedurname := "";{} aktuelles einzelmenu.leaveprozedurname := "";{} belege untermenuepunkte{} PER.{} belege untermenuepunkte:{}
+ INT VAR j;{} FOR j FROM 1 UPTO maxuntermenupunkte REP{} aktueller menupunkt.punktkuerzel := "";{} aktueller menupunkt.punktname := "";{} aktueller menupunkt.procname := "";{} aktueller menupunkt.boxtext := "";{} aktueller menupunkt.aktiv := TRUE;{} aktueller menupunkt.angewaehlt := FALSE{} PER.{} aktuelles einzelmenu: m.einzelmenu [i].{} aktueller menupunkt: aktuelles einzelmenu.menupunkt [j].{}END PROC init;{}PROC oberbegriff (TEXT CONST punktname, startprocname, leaveprocname):{}
+ gib hinweis auf oberbegriff;{} untersuche ob menu geoeffnet und bereit ist;{} untersuche oberbegriffe;{} trage neuen oberbegriff ein;{} notiere die anfangsposition;{} notiere start und leaveprozedur;{} erhoehe die anzahl der oberbegriffe.{} gib hinweis auf oberbegriff:{} cursor (1, 6); out (cleop);{} cursor (1, 6); out (aussage [13]); out (invers (punktname)); line.{} untersuche ob menu geoeffnet und bereit ist:{} IF NOT menuleiste ist bereit{} THEN bereinige eintragungen ( 9){}
+ FI;{} IF NOT menu ist geoeffnet{} THEN bereinige eintragungen (13){} FI.{} untersuche oberbegriffe:{} IF zu viele oberbegriffe{} THEN bereinige eintragungen (14){} FI;{} IF gesamtlaenge > maxmenubreite{} THEN bereinige eintragungen (15){} FI.{} zu viele oberbegriffe:{} aktuelles menu.anzahl hauptmenupunkte = maxhauptmenupunkte.{} gesamtlaenge:{} gesamtlaenge ohne letzten punkt + length (compress (punktname)).{} gesamtlaenge ohne letzten punkt:{} length (hauptmenuzeile).{}
+ hauptmenuzeile:{} INT VAR zaehler;{} TEXT VAR zeile :: "";{} schreibe menunamen;{} schreibe oberbegriffe;{} zeile.{} schreibe menunamen:{} IF aktuelles menu. menuname <> ""{} THEN zeile CAT aktuelles menu.menuname;{} zeile CAT ":"{} FI.{} schreibe oberbegriffe:{} FOR zaehler FROM 1 UPTO aktuelles menu.anzahl hauptmenupunkte REP{} zeile CAT hauptmenuluecke;{} zeile CAT aktuelles menu. einzelmenu [zaehler].ueberschrift{} PER;{} zeile CAT hauptmenuluecke.{}
+ trage neuen oberbegriff ein:{} neuer menupunkt.ueberschrift := compress (punktname).{} notiere die anfangsposition:{} neuer menupunkt.anfangsposition := gesamtlaenge ohne letzten punkt + 1.{} notiere start und leaveprozedur:{} neuer menupunkt.startprozedurname := compress (startprocname);{} neuer menupunkt.leaveprozedurname := compress (leaveprocname).{} neuer menupunkt:{} aktuelles menu.einzelmenu [aktuelles menu.anzahl hauptmenupunkte + 1].{} erhoehe die anzahl der oberbegriffe:{}
+ aktuelles menu.anzahl hauptmenupunkte INCR 1.{}END PROC oberbegriff;{}PROC oberbegriff (TEXT CONST punktname):{} oberbegriff (punktname, "", ""){}END PROC oberbegriff;{}PROC menufunktionseintrag (TEXT CONST kuerzel,{} punktbezeichnung,{} prozedurname,{} infotext,{} BOOL CONST ist aktiv):{} gib hinweis auf menufunktionseintrag;{} trage menupunkt ein;{} organisiere menu neu.{}
+ gib hinweis auf menufunktionseintrag:{} line;{} out (aussage [14]);{} out ("'" + kuerzelzeichen + "' - " + punktname).{} kuerzelzeichen:{} IF kuerzel = "" THEN " " ELSE kuerzel FI.{} punktname:{} IF punktbezeichnung = trennzeilensymbol{} THEN "----------"{} ELSE punktbezeichnung{} FI.{} trage menupunkt ein:{} ueberpruefe das kuerzel;{} ueberpruefe die punktbreite;{} ueberpruefe die eintragsnummer;{} aktuelles menu.einzelmenu [stelle].belegt INCR 1;{}
+ aktueller menupunkt.punktkuerzel := compress (kuerzel);{} aktueller menupunkt.punktname := normierter menupunkt;{} aktueller menupunkt.procname := compress (prozedurname);{} aktueller menupunkt.boxtext := infotext;{} aktueller menupunkt.aktiv := ist aktiv;{} aktueller menupunkt.angewaehlt := FALSE.{} aktueller menupunkt:{} aktuelles untermenu.menupunkt [aktuelles untermenu.belegt].{} aktuelles untermenu:{} aktuelles menu.einzelmenu [stelle].{}
+ stelle:{} aktuelles menu.anzahl hauptmenupunkte.{} normierter menupunkt:{} blank + compress (punktbezeichnung).{} ueberpruefe das kuerzel:{} TEXT VAR kurz :: compress (kuerzel);{} IF kuerzel ist zu lang{} THEN bereinige eintragungen (16){} ELIF kuerzel ist schon vorhanden{} THEN bereinige eintragungen (17){} FI.{} kuerzel ist zu lang:{} length (kurz) > 1.{} kuerzel ist schon vorhanden:{} (length (kurz) = 1) AND (pos (vorhandene kuerzel, kurz) > 0).{}
+ vorhandene kuerzel:{} TEXT VAR liste :: "";{} INT VAR zeiger;{} FOR zeiger FROM 1 UPTO aktuelles untermenu.belegt REP{} liste CAT aktuelles untermenu.menupunkt [zeiger].punktkuerzel{} PER;{} liste.{} ueberpruefe die punktbreite:{} IF length (compress (punktbezeichnung)) > maxmenubreite - 10{} THEN bereinige eintragungen (18){} FI.{} ueberpruefe die eintragsnummer:{} IF aktuelles untermenu.belegt = maxuntermenupunkte{} THEN bereinige eintragungen (19){}
+ FI.{} organisiere menu neu:{} IF neue punktlaenge > aktuelles untermenu.maxlaenge{} THEN aktuelles untermenu.maxlaenge := neue punktlaenge{} FI.{} neue punktlaenge:{} length (aktueller menupunkt.punktname).{}END PROC menufunktionseintrag;{}PROC menufunktion (TEXT CONST kuerzel, punktbezeichnung,{} prozedurname, infotext):{} menufunktionseintrag (kuerzel, punktbezeichnung, prozedurname, infotext,{} TRUE){}END PROC menufunktion;{}
+PROC trennlinie:{} menufunktionseintrag ("", trennzeilensymbol, "", "", FALSE){}END PROC trennlinie;{}PROC schliesse menu:{} menuleiste. belegt INCR 1;{} menuleiste.menu [menuleiste.belegt] := aktuelles menu;{} menu ist geoeffnet := FALSE{}END PROC schliesse menu;{}PROC schliesse menukarte:{} forget (ds);{} page; out (piep); put (card finished){}END PROC schliesse menukarte;{}PROC testinstallation (TEXT CONST kartenname):{} ueberpruefe menukarte;{} nimm installation vor.{}
+ ueberpruefe menukarte:{} IF NOT exists (kartenname){} THEN errorstop (fehlermeldung [20] + kartenname + fehlermeldung [21]){} ELIF (pos (kartenname, menutafelpraefix) <> 1){} OR (type (old (kartenname)) <> menutafeltype){} THEN errorstop (fehlermeldung [20] + kartenname + fehlermeldung [22]){} FI.{} nimm installation vor:{} TEXT CONST neuer kartenname{} :: kartenname + " von Task '" + name (myself) + "'";{} command dialogue (FALSE);{}
+ rename (kartenname, neuer kartenname);{} save (neuer kartenname,task (mmtaskname));{} forget (neuer kartenname, quiet);{} reset dialog;{} install menu (neuer kartenname, FALSE);{} fetch (neuer kartenname, task (mmtaskname));{} rename (neuer kartenname, kartenname);{} command dialogue (TRUE);{} page; out (piep); put (install finished){}END PROC testinstallation;{}END PACKET ls menu generator 2;{}
+
diff --git a/app/gs.menugenerator/1.0/src/ls-Menu-Generator-gen b/app/gs.menugenerator/1.0/src/ls-Menu-Generator-gen
new file mode 100644
index 0000000..9a4c3fc
--- /dev/null
+++ b/app/gs.menugenerator/1.0/src/ls-Menu-Generator-gen
@@ -0,0 +1,30 @@
+(*
+
+ *********************************************************
+ *********************************************************
+ ** **
+ ** ls-Menu-Generator **
+ ** GENERATORPROGRAMM **
+ ** Version 1.0 **
+ ** **
+ ** (Stand: 30.03.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 = "Generatordatei: Archivmenu",{} datei 2 = "ls-MENUBASISTEXTE",{} datei 3 = "ls-Menu-Generator 1",{} datei 4 = "ls-Menu-Generator 2";{}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-Menu-Generator/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-Menu-Generator - 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){} THEN hole dateien vom archiv{} FI.{}hole dateien vom archiv:{} cursor (1,3);{} say ("Ist das Archiv angemeldet und die "); line;{} IF yes ("'ls-Menu-Generator'-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);{} cursor (1, 3); out(""4"");{} out (" "15"Die Diskette wird nicht mehr benötigt! "14"");{} release (archive){} FI.{}insertiere die dateien:{} check off;{} schicke (datei 2);{} in (datei 3);{} in (datei 4);{} IF einzeln THEN release (archive) FI;{} check on.{}mache global manager aus der task:{} global manager.{}
+