From 04e68443040c7abad84d66477e98f93bed701760 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 4 Feb 2019 13:09:03 +0100 Subject: Initial import --- .../1.0/doc/menu-generator handbuch.1 | 100 ++ .../1.0/doc/menu-generator handbuch.2 | 87 + .../1.0/doc/menu-generator handbuch.3 | 155 ++ .../1.0/doc/menu-generator handbuch.4 | 424 +++++ .../1.0/doc/menu-generator handbuch.5 | 975 ++++++++++++ .../1.0/doc/menu-generator handbuch.6 | 235 +++ .../1.0/doc/menu-generator handbuch.7 | 367 +++++ .../1.0/doc/menu-generator handbuch.8 | 1676 ++++++++++++++++++++ .../1.0/doc/menu-generator handbuch.impressum | 88 + .../1.0/doc/menu-generator handbuch.index | 258 +++ .../1.0/doc/menu-generator handbuch.inhalt | 72 + app/gs.menugenerator/1.0/source-disk | 1 + .../1.0/src/Generatordatei: Archivmenu | 323 ++++ .../1.0/src/fonttab.ls-Menu-Generator | Bin 0 -> 2560 bytes app/gs.menugenerator/1.0/src/ls-MENUBASISTEXTE | Bin 0 -> 17408 bytes app/gs.menugenerator/1.0/src/ls-Menu-Generator 1 | 47 + app/gs.menugenerator/1.0/src/ls-Menu-Generator 2 | 72 + app/gs.menugenerator/1.0/src/ls-Menu-Generator-gen | 30 + 18 files changed, 4910 insertions(+) create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.1 create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.2 create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.3 create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.4 create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.5 create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.6 create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.7 create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.8 create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.impressum create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.index create mode 100644 app/gs.menugenerator/1.0/doc/menu-generator handbuch.inhalt create mode 100644 app/gs.menugenerator/1.0/source-disk create mode 100644 app/gs.menugenerator/1.0/src/Generatordatei: Archivmenu create mode 100644 app/gs.menugenerator/1.0/src/fonttab.ls-Menu-Generator create mode 100644 app/gs.menugenerator/1.0/src/ls-MENUBASISTEXTE create mode 100644 app/gs.menugenerator/1.0/src/ls-Menu-Generator 1 create mode 100644 app/gs.menugenerator/1.0/src/ls-Menu-Generator 2 create mode 100644 app/gs.menugenerator/1.0/src/ls-Menu-Generator-gen (limited to 'app/gs.menugenerator/1.0') 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") + + fetch("ls-Menu-Generator/gen",archive) + + run + + 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") ). 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 +() 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 () 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:   Abbruch: '. +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 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 verlassen, so wird niltext +geliefert. + +Wird in obiger Prozedur die Eingabe mit 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 , so wird ein +Thesaurus mit allen angekreuzten Namen geliefert; bei Verlassen mit +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 zu bestätigen. +Möchte er die Auswahl zum Ankreuzen angeboten bekommen, so braucht er nur die +Tastenfolge (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 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 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 ) 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 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 -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 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 +, 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 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 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 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 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 abgeschlossen oder durch + 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 abgeschlossen, wird der eingegebene Text + geliefert. Statt der Eingabe kann der Benutzer sich durch die Tastenfolge + auch die in 'thesaurus' übergebenen Namen zur Auswahl + anbieten lassen. Wird ein Name angekreuzt, wird dieser geliefert; wird die + Auswahl durch 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 abgeschlossen, wird der eingegebene Text in + einem Thesaurus geliefert. Statt der Eingabe kann der Benutzer sich + durch die Tastenfolge auch die in 'thesaurus' übergebenen + Namen zur Auswahl anbieten lassen. Werden Namen angekreuzt, werden + diese in einem Thesaurus geliefert; wird die Auswahl durch + 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 + 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 + 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 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 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 + 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 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 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 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 verlassen werden. Der/ die angekreuzte(n) + Name(n) wird/werden in einem Thesaurus geliefert. Wird die Auswahl + durch die Tastenfolge 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 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 ). 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 + ) 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: +   Verlassen: " angezeigt. Nach Tippen von + 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 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 + () 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 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 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 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 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 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 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 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 Binary files /dev/null and b/app/gs.menugenerator/1.0/src/fonttab.ls-Menu-Generator 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 Binary files /dev/null and b/app/gs.menugenerator/1.0/src/ls-MENUBASISTEXTE 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 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.{} + -- cgit v1.2.3