summaryrefslogtreecommitdiff
path: root/doc/menugenerator/menu-generator handbuch.5
diff options
context:
space:
mode:
Diffstat (limited to 'doc/menugenerator/menu-generator handbuch.5')
-rw-r--r--doc/menugenerator/menu-generator handbuch.5975
1 files changed, 0 insertions, 975 deletions
diff --git a/doc/menugenerator/menu-generator handbuch.5 b/doc/menugenerator/menu-generator handbuch.5
deleted file mode 100644
index c002f1a..0000000
--- a/doc/menugenerator/menu-generator handbuch.5
+++ /dev/null
@@ -1,975 +0,0 @@
-#block##pageblock#
-#pagenr("%",1)##setcount(1)##count per page#
-#headeven#
-gs-Menu-Generator
-#center#____________________________________________________________
-
-#end#
-#headodd#
-#right#gs-Menu-Generator
-#center#____________________________________________________________
-
-#end#
-#bottomeven#
-#center#____________________________________________________________
-5 - % #right#ERGOS
-#end#
-#bottomodd#
-#center#____________________________________________________________
-ERGOS #right# 5 - %
-#end#
-#ib#5  Dialoge innerhalb des Menus#ie#
-
-
-In Kapitel 4 haben Sie erfahren, wie Sie eine eigene Menukarte entwickeln können;
-sicher haben Sie das schon ausprobiert und sich Ihr selbstgestaltetes Menu auf dem
-Bildschirm angesehen. Bislang erscheint aber noch der Hinweis 'unbekanntes Kom­
-mando', wenn Sie eine Menufunktion aktivieren - denn die Prozeduren, die Sie bei
-der Aktivierung der Menufunktion aufrufen, sind ja noch nicht fertiggestellt!
-Bei vielen Menufunktionen ist es notwendig, mit dem Benutzer noch einen Dialog zu
-führen: z.B. muß ein Dateiname erfragt, eine Information ausgegeben und bestätigt,
-eine Auswahl oder eine Entscheidung getroffen werden. In diesem Kapitel sollen
-Ihnen nun die Möglichkeiten vorgestellt werden, die Ihnen zur Verfügung stehen, um
-einen solchen Dialog mit dem Benutzer zu führen. Dieser Dialog wird innerhalb des
-Menus geführt. Alle Prozeduren, die sich auf diesen Menu-Dialog beziehen, enthalten
-deshalb den Wortbestandteil 'menu'.
-
-Hier noch einige Tips! Damit Sie Ihre Menu-Dialoge testen können, empfiehlt
-sich folgendes Vorgehen: Sie erstellen zuerst Ihre Menukarte und tragen schon die
-Namen für die jeweils aufzurufenden Prozeduren ein - wie wir es in Kapitel 4 ge­
-macht haben. Mit 'testinstallation' installieren Sie dann in Ihrer Task die neue Menu­
-karte.
-Nun schreiben Sie Ihre Prozeduren, die Sie unter das Menu legen wollen. Ist eine
-Prozedur "testreif", so müssen Sie sie zunächst insertieren, denn das Menusystem gs-
-DIALOG kann nur auf insertierte Prozeduren zugreifen. Anschließend rufen Sie das
-Menu (z.B. 'SCRIPT') aus der Menukarte mit dem Befehl 'handle menu ("SCRIPT")'
-(Hier ist der jeweilige Menuname einzusetzen!) auf. Wenn Sie den entsprechenden
-Menupunkt aktivieren, müßte Ihr Programm ablaufen.
-Es ist günstig, eine eigene Task zum Testen der Prozeduren anzulegen, damit diese
-hin und wieder gelöscht werden kann.
-
-
-#ib#5.1 Eingabe eines Textes/Namens#ie# ('#ib#menuanswer#ie#')
-
-Wenn der Benutzer in unserem Beispiel die Menufunktion 'Neu erstellen' aktiviert
-hat, muß der Name der Datei erfragt werden, die neu erstellt werden soll. Dafür steht
-die Prozedur 'menuanswer' zur Verfügung. Die in die Menukarte eingetragene Proze­
-dur 'neue datei editieren' (Siehe Kapitel 4.1) könnte dann folgendermaßen aussehen:
-
-
-PROC neue datei editieren:
- TEXT VAR dateiname := menuanswer ("Bitte den gewünschten Dateinamen:",
- "", 5);
- IF dateiname <> "" AND NOT exists (dateiname)
- THEN command dialogue (FALSE); #ib#cursor on#ie#;
- edit (dateiname);
- #ib#cursor off#ie#; command dialogue (TRUE);
- regenerate menuscreen (* sehen Sie dazu Kapitel 5.10 *)
- FI
-END PROC neue datei editieren;
-
-
-Schauen wir uns zuerst die Prozedur 'menuanswer' an. Die Prozedur hat drei Para­
-meter. Mit dem ersten Parameter legen Sie den Text fest, der innerhalb der Box
-ausgegeben wird, die auf dem Bildschirm erscheint. Der Text dient ausschließlich der
-Information des Anwenders.
-Mit dem zweiten Parameter können Sie dem Benutzer einen Vorschlag für die Einga­
-be machen, der zum Editieren ausgegeben wird. Da eine solche Vorgabe aber in die­
-ser Situation sinnlos wäre, verzichten wir darauf ("").
-
-Die auf dem Bildschirm erscheinende Box hat folgendes Aussehen:
-
- +-------------------------------------+
- I Bitte den gewünschten Dateinamen: I
- I I
- I I
- I Eingabe: I
- +-------------------------------------+
-
-
-Die Boxbreite und -höhe wird vom System automatisch anhand des von Ihnen als
-ersten Parameter übergebenen Textes festgelegt. Sie haben noch verschiedene Mög­
-lichkeiten, diesen Text zu gestalten (mehrere Zeilen, Inversdarstellung etc.) - auf
-diese Möglichkeiten gehen wir in Kapitel 5.13 detailliert ein.
-In unserem Beispiel erscheint die Box in der Mitte des Menubildschirms. Diese
-Festlegung treffen wir durch die Angabe der Position '5' als dritten Parameter. Sie
-können hier zwischen 5 verschiedenen Positionen wählen: 1 - oben links, 2 - oben
-rechts, 3 - unten links, 4 - unten rechts, 5 - zentral im Menubildschirm - mehr dazu
-in Kapitel 5.12.
-
-Mit dem Erscheinen der obigen Box auf dem Bildschirm ändert sich automatisch
-auch die Fußzeile im Menu, über die der Benutzer Informationen zur Bedienung
-erhält. Hier erscheint der Hinweis: 'Fertig: <RETURN>  Abbruch: <ESC><h>'.
-Um diese Hinweise brauchen Sie sich aber nicht zu kümmern , da sie alle automa­
-tisch gesetzt werden.
-Die Prozedur 'menuanswer' hat noch folgende Besonderheit: Es ist nicht möglich,
-den Namen 'break' einzugeben! Diese Eingabe wird automatisch abgefangen. Es hat
-sich gezeigt, daß Anwender manchmal versuchen, über <ESC><q> die Eingabe
-zu verlassen. In diesem Falle entstünde hier eine Datei mit Namen 'break' - was aber
-nicht sinnvoll wäre.
-Nach der Eingabe liefert die Prozedur 'menuanswer' als Wert den vom Benutzer
-eingegebenen Text - dabei sind führende und folgende Leerzeichen schon abgeschnit­
-ten ('compress'). Wurde die Prozedur mit <ESC><h> verlassen, so wird niltext
-geliefert.
-
-Wird in obiger Prozedur die Eingabe mit <ESC><h> abgebrochen oder existiert
-bereits eine Datei mit dem eingegebenen Namen, so verschwindet die Box, und der
-Menubildschirm wird automatisch in den alten Zustand gebracht.
-Wenn schon eine Datei mit dem Namen existiert, dann wäre es sinnvoll, den Benutzer
-darauf aufmerksam zu machen. Wie ein solcher Hinweis in das Menu eingeblendet
-werden kann, erklären wir im Kapitel 5.2.
-
-gs-DIALOG ist so geschrieben, daß der Cursor möglichst wenig störend wirkt. Aus
-diesem Grunde wird der Cursor immer an einer Stelle "geparkt". Sofern Ihr System es
-zuläßt und eine entsprechende Anpassung vorliegt, wird der Cursor ganz ausgeschal­
-tet. Denken Sie bitte daran, auch wenn er auf Ihrem Bildschirm ständig sichtbar ist!
-Wenn also jetzt eine Eingabe erfolgen soll, ist es notwendig, den Cursor anzuschalten.
-Wenn Sie wieder in das Menu zurückkehren, sollte der Cursor wieder ausgeschal­
-tet werden, damit er dort nicht stört.
-Wenn Sie die Prozedur 'edit' mit einem neuen Namen als Parameter aufrufen, erfragt
-das System, ob die Datei neu eingerichtet werden soll. Diese Anfrage muß hier unter­
-drückt werden, damit nicht irgendwelche Texte in den Menubildschirm geschrieben
-werden. Das Unterdrücken der Abfrage erreichen Sie durch Ausschalten des Kom­
-mandodialoges. Nach Einrichten der Datei muß der Kommandodialog aber wieder
-eingeschaltet werden, da gs-DIALOG das Eingeschaltetsein für eine fehlerfreie Funk­
-tion voraussetzt!
-
-Mit dem Befehl '#ib#regenerate menuscreen#ie#' (sehen Sie dazu auch Kapitel 5.10) wird der
-aktuelle Menubildschirm erneut vollständig auf den Bildschirm geschrieben (repro­
-duziert). Das ist notwendig, weil die Prozedur 'edit' den Bildschirm benutzt hat.
-Durch diesen Befehl wird der Menubildschirm exakt in der Form hergestellt, wie er
-zuletzt ausgesehen hat. Auch wenn Sie geschachtelte Menubildschirme haben, wer­
-den diese durch den einen Befehl reproduziert. So können Sie in Ihren Verarbei­
-tungsfunktionen mit dem Bildschirm "machen was Sie wollen" - Sie kehren mit dem
-letztgenannten Befehl immer wieder so in das Menu zurück, wie Sie es verlassen
-haben.
-
-
-#ib#5.2 Ausgabe einer Information#ie# ('#ib#menuinfo#ie#')
-
-In der Prozedur 'neue datei editieren' (Kapitel 5.1) wäre es sinnvoll, den Benutzer zu
-informieren, wenn bereits eine Datei mit dem eingegebenen Namen existiert. Hierfür
-steht die Prozedur 'menuinfo' zur Verfügung.
-
-Beispiel:
-
-menuinfo (" Eine Datei mit dem Namen "13" existiert schon!");
-
-Dadurch wird folgende Box ins Menu geschrieben:
-
- +----------------------------+
- I I
- I Eine Datei mit dem Namen I
- I existiert schon I
- I I
- +----------------------------+
-
-Die Box erscheint in der Mitte des Menus (Position 5); in der Fußzeile wird der Hin­
-weis ausgegeben 'Zum Weitermachen bitte irgendeine Taste tippen!'. Dann wartet das
-System so lange, bis eine Taste gedrückt wird. Anschließend wird der aktuelle Menu­
-schirm wiederhergestellt.
-Die Prozedur 'menuinfo' gibt es noch in zwei weiteren Versionen, nämlich mit zwei
-bzw. drei Parametern. Im ersten Fall kann über den zweiten Parameter noch die
-Position (1, 2, 3, 4, 5) innerhalb des Menubildschirmes festgelegt werden (sehen Sie
-dazu Kapitel 5.12). Mit dem dritten Parameter kann ggf. noch die Wartezeit festgelegt
-werden, die das System maximal verstreichen läßt, bevor es von sich aus das Pro­
-gramm fortsetzt.
-
-'menuinfo (" Eine Datei mit dem Namen "13" existiert schon!", 3, 40)'
-
-gibt die oben gezeigte Box aus, aber links unten in der Ecke des Menubildschirms
-(Position 3). Das System wartet (maximal) 4 Sekunden (40 Zehntel) und setzt dann -
-auch ohne Tastendruck - das Programm fort. Diese Prozedur mit gesondert angege­
-bener Wartezeit verwendet man dann, wenn man nicht unbedingt die Kenntnisnahme
-der Information durch den Benutzer bestätigt haben möchte.
-
-
-#ib#5.3 Auswahl eines Namen durch Ankreuzen#ie# ('#ib#menuone#ie#')
-
-Während bei der Neuerstellung einer Datei ein Name neu erfragt werden muß, kann
-man beim Menupunkt 'Ansehen/Ändern' auf schon vorhandene Dateien zugreifen.
-Sie können dem Benutzer z.B. alle Dateien in der Task zur Auswahl anbieten. Sobald
-der Benutzer einen Namen angekreuzt hat, soll die entsprechende Datei geöffnet wer­
-den. Dafür steht der Befehl 'menuone' zur Verfügung:
-
-
-PROC alte datei editieren:
- TEXT CONST kopf :: "Textdatei ansehen/ändern",
- hinweis :: "Bitte gewünschte Datei ankreuzen";
- TEXT VAR dateiname := menuone (ALL myself, kopf, hinweis, FALSE);
- IF dateiname <> ""
- THEN #ib#cursor on#ie#;
- edit (dateiname);
- #ib#cursor off#ie#;
- FI;
- regenerate menuscreen
-END PROC alte datei editieren;
-
-
-Die Prozedur 'menuone' hat 4 Parameter: Als erster Parameter ist ein Thesaurus zu
-übergeben, in dem die zur Auswahl stehenden Namen enthalten sind. Zum Thesau­
-rushandling werden noch einige zusätzliche Funktionen zur Verfügung gestellt (z.B.
-daß nur Dateien eines bestimmten Typs zur Auswahl angeboten werden können) -
-diese Funktionen werden in Kapitel 5.14 erläutert. In unserem Beispiel werden alle
-Dateien zur Auswahl angeboten, die in der Task zur Verfügung stehen.
-Die beiden Texte, die als 2. und 3. Parameter übergeben werden, erscheinen zur
-Kennzeichnung im Kopf der Auswahlliste. Der als zweiter Parameter übergebene Text
-erscheint zentriert und invers dargestellt auf dem Bildschirm, der als dritter Parame­
-ter übergebene Text nur zentriert. Es ist sinnvoll, mit dem ersten Text (2.Parame­
-ter) die zur Zeit aktivierte Menufunktion anzuzeigen, denn der Menubildschirm wird
-ja durch die Auswahlliste überschrieben. So kann sich der Benutzer besser im Menu­
-system orientieren.
-Mit dem 4. Parameter wird festgelegt, ob der Bildschirm nach der Auswahl "ge­
-reinigt", d.h. der alte Menubildschirm wiederhergestellt werden soll. Da in unserem
-Falle normalerweise im Anschluß an die Auswahl eine Datei auf dem Bildschirm
-editiert wird, verzichten wir auf die "automatische Regenerierung" des Menubild­
-schirms. Dieses besorgen wir nach dem Editieren durch das Kommando 'regenerate
-menuscreen' "von Hand".
-Auf das Fenster, das für die Auswahl auf dem Bildschirm angezeigt wird, können Sie
-keinen Einfluß nehmen - es wird vom System selbständig festgelegt. Dadurch können
-Sie die Auswahl, wie auch die anderen Dialogkomponenten ebenso in geschachteleten
-Menus aufrufen, ohne daß es zu Problemen kommt.
-
-
-#ib#5.4 Auswahl mehrerer Namen durch Ankreuzen#ie# ('#ib#menusome#ie#')
-
-Es ist nicht immer sinnvoll, daß der Benutzer nur einen Namen auswählen, d.h.
-ankreuzen kann. Bei der Zeilenformatierung könnte man z.B. zulassen, daß gleich
-mehrere Dateinamen angekreuzt werden können. Im Anschluß an die Auswahl sollen
-dann alle angekreuzten Dateien mit 'lineform' bearbeitet werden. Für diesen Zweck
-steht die Prozedur 'menusome' zur Verfügung. Sie hat die gleichen Parameter wie die
-in 5.3 erläuterte Prozedur 'menuone' - nur daß hier die Auswahl mehrerer Namen
-möglich ist. Verläßt der Benutzer die Auswahl durch <ESC><q>, so wird ein
-Thesaurus mit allen angekreuzten Namen geliefert; bei Verlassen mit <ESC><h>
-ein leerer Thesaurus. Beispiel:
-
-
-PROC zeilen formatieren:
- TEXT CONST kopf :: "Textdateien zeilenweise formatieren",
- hinweis :: "Bitte gewünschte Dateien ankreuzen";
- THESAURUS VAR dateinamen := menusome (ALL myself, kopf, hinweis,
- FALSE);
- cursor on;
- formatiere dateien;
- cursor off;
- regenerate menuscreen.
-
- formatiere dateien:
- INT VAR zaehler;
- FOR zaehler FROM 1 UPTO highest entry (dateinamen) REP
- IF name (dateinamen, zaehler) <> ""
- THEN lineform (name (dateinamen, zaehler))
- FI
- PER
-END PROC zeilen formatieren;
-
-
-
-#ib#5.5 Eingabe eines Textes/Namens - alternativ: Auswahl
- durch Ankreuzen#ie# ('#ib#menuanswerone#ie#','#ib#menuanswersome#ie#')
-
-Sehr häufig kommt es vor, daß der Benutzer auf die zuletzt bearbeitete Datei zurück­
-greifen will. In Kapitel 5.3 haben wir dem Benutzer bei der Menufunktion 'Anse­
-hen/Ändern' gleich alle Dateien zur Auswahl angeboten. Hier wäre es vielleicht gün­
-stiger gewesen, ihm die zuletzt bearbeitete Datei anzubieten und erst auf Wunsch die
-Liste aller Dateien zum Ankreuzen. Das läßt sich auf verschiedene Weise realisieren -
-wir werden Ihnen in diesem und in den folgenden Kapiteln verschiedene Möglich­
-keiten aufzeigen:
-
-Sie können z.B. mit der Prozedur 'menuanswerone' arbeiten. Wie Sie schon aus dem
-Namen entnehmen können, handelt es sich dabei um eine Prozedur, die eigentlich
-aus zwei Prozeduren, nämlich 'menuanswer' und 'menuone' zusammengesetzt ist.
-Stellen Sie sich vor, sie führen den Namen der zuletzt bearbeiteten Datei in Ihrem
-Programm unter der Variablen 'letzte datei'. Dann könnte die Prozedur 'alte datei
-editieren' aus Kapitel 5.3 auch folgendermaßen geschrieben werden:
-
-
-TEXT VAR letzte datei;
-...
-
-
-PROC alte datei editieren:
- TEXT CONST hinweis letzte :: "Zuletzt bearbeitete Datei:",
- kopf :: "Textdatei ansehen/ändern",
- hinweis :: "Bitte gewünschte Datei ankreuzen";
- TEXT VAR dateiname := menuanswerone (hinweis letzte,
- letzte datei,
- ALL myself, kopf,
- hinweis, FALSE);
- IF dateiname <> ""
- THEN cursor on;
- edit (dateiname);
- letzte datei := dateiname;
- cursor off;
- FI;
- regenerate menuscreen
-END PROC alte datei editieren;
-
-
-Insgesamt hat die Prozedur 6 Parameter: Die ersten beiden Parameter beziehen sich
-auf die Eingabe ('menuanswer'). Wie dort kann auch hier der Text festgelegt werden,
-der in der Box auf dem Bildschirm erscheint.
-Der zweite Parameter ist der Text, der dem Benutzer zum Editieren angeboten wird -
-hier der zuletzt benutzte Dateiname. Möchte der Benutzer auf die Datei mit dem an­
-gebotenen Namen zugreifen, braucht er nur mit <RETURN> zu bestätigen.
-Möchte er die Auswahl zum Ankreuzen angeboten bekommen, so braucht er nur die
-Tastenfolge <ESC><z> (für 'Zeigen') zu tippen. Auf diese Auswahl beziehen sich
-die letzten 4 Parameter, die die gleiche Bedeutung haben wie bei der Prozedur
-'menuone'. Auf die Möglichkeit, durch <ESC><z> eine Auswahl angeboten zu
-bekommen, wird in der Fußzeile des Menus hingewiesen.
-
-Aber Achtung! Sie sollten sich einer "Gefahr" bei diesem Vorgehen bewußt sein. Der
-Benutzer hat natürlich so die Möglichkeit, auch einen anderen Namen als den vorge­
-schlagenen anzugeben - einen Namen, der noch nicht in der Dateiliste enthalten ist.
-In einem solchen Falle würde Ihnen bei obiger Prozedur der Menubildschirm "ka­
-puttgeschrieben", denn das System fragt (bei eingeschaltetem Kommandodialog) an,
-ob eine Datei mit dem Namen eingerichtet werden soll. Für diesen Fall sollten Sie also
-unbedingt eine Vorsorge treffen (z.B. indem Sie den Benutzer darauf hinweisen, daß
-der eingegebene Name nicht akzeptiert wird)!
-
-Sie vermuten sicher schon ganz richtig, daß es entsprechend auch die Prozedur
-'menuanswersome' gibt, die zunächst einen Dateinamen erfragt und auf Wunsch
-eine Auswahl anbietet, in der mehrere Dateinamen angekreuzt werden können. Die
-Prozedur hat ebenfalls 6 Parameter, die identisch zur Prozedur 'menuanswerone'
-sind. Allerdings liefert die Prozedur 'menuanswersome' in jedem Fall einen Thesau­
-rus; wurde die Auswahl mit <ESC><h> abgebrochen, so liefert sie einen leeren
-Thesaurus.
-
-
-#ib# 5.6 Die Ja/Nein - Entscheidung#ie# ('#ib#menuyes#ie#','#ib#menuno#ie#')
-
-In Kapitel 5.5 trat das Problem auf, daß der Benutzer einen "unzulässigen" Namen
-eingeben konnte. Dieses Problem können wir umgehen: Wir fragen den Benutzer ein­
-fach, ob er mit der zuletzt bearbeiteten Datei arbeiten will und lassen Ihm nur die
-Chance, mit 'Ja' oder 'Nein' zu antworten. Im ersten Fall bieten wir ihm eben diese
-Datei an - ansonsten die Auswahl zum Ankreuzen.
-
-Hierfür stehen die Prozeduren 'menuyes' und 'menuno' zur Verfügung, die von Ihrer
-Funktion her den Ihnen bekannten Prozeduren 'yes' und 'no' gleichen. Die beiden
-Menu-Prozeduren haben jeweils zwei Parameter:
-
-
-TEXT VAR letzte datei;
-...
-
-PROC alte datei editieren:
- TEXT CONST kopf :: "Textdatei ansehen/ändern",
- hinweis :: "Bitte gewünschte Datei ankreuzen";
- TEXT VAR dateiname;
- IF menuyes (" Wollen Sie mit der Datei "13"" +
- " '" +letzte datei+ "'"13" arbeiten", 5)
- THEN editiere letzte datei
- ELSE dateiname := menuone (ALL myself, kopf, hinweis, FALSE);
- editiere ausgewaehlte datei
- FI;
- regenerate menuscreen.
-
- editiere letzte datei:
- cursor on; edit (letzte datei); cursor off.
-
- editiere ausgewaehlte datei:
- IF dateiname <> ""
- THEN cursor on; edit (dateiname); cursor off;
- letzte datei := dateiname
- FI
-END PROC alte datei editieren;
-
-
-Über den zweiten Parameter legen Sie die Position auf dem Bildschirm innerhalb des
-Menus fest (1, 2, 3, 4, 5; sehen Sie auch Kapitel 5.12). Der erste Parameter ist ein
-Text, welcher der gs-DIALOG-Syntax gehorchen muß (die Codes "13" bewirken
-einen Zeilenvorschub; sehen Sie auch Kapitel 5.13). Er wird in einer Box auf den
-Bildschirm geschrieben und durch 'Ja  Nein' ergänzt:
-
-
- +-----------------------------+
- I I
- I Wollen Sie mit der Datei I
- I 'Dateiname' I
- I arbeiten? I
- I I
- I Ja    Nein I
- I I
- +-----------------------------+
-
-Für 'Dateiname' ist auf Ihrem Bildschirm dann natürlich der aktuelle Inhalt von
-'letzte datei' eingetragen.
-Die Prozedur 'menuyes' liefert TRUE, wenn mit 'Ja' geantwortet wurde und FALSE,
-wenn mit 'Nein' geantwortet wurde. Die Prozedur 'menuno' wirkt wie 'NOT menuyes'.
-Nach Eingabe von 'Ja', 'Nein' (durch Tippen der Anfangsbuchstaben oder Positionie­
-rung auf die Antwort und anschließendem <RETURN>) wird der Menubildschirm
-automatisch regeneriert. Auch die entsprechenden Hinweise in der Fußzeile werden
-natürlich automatisch gesetzt.
-
-
-#ib#5.7 Die Alternativentscheidung#ie# ('#ib#menualternative#ie#')
-
-Im letzten Kapitel haben wir Ihnen die Prozeduren 'menuyes' und 'menuno' in Ihrer
-Wirkungsweise erläutert. Eigentlich sind die beiden Prozeduren nur ein (häufig
-benötigter) Spezialfall der Prozedur 'menualternative'. Die Funktionsweise der Proze­
-dur 'menualternative' dürfte Ihnen schon aus dem 'Archivmenu' bekannt sein: Wenn
-Sie eine neue Zieltask einstellen, werden Ihnen nämlich vier Alternativen zur Auswahl
-angeboten (Archiv, Vatertask, PUBLIC, Sonstige Task).
-Auf unsere Textverarbeitung bezogen könnten wir z.B. vor der Zeilenformatierung
-(lineform) über die Alternativentscheidung den gewünschten Schrifttyp abfragen. Wir
-wollen dem Benutzer in diesem Beispiel fünf Schrifttypen (schmal, elite, pica, letter,
-groß) zur Auswahl anbieten:
-
-
-
-TEXT VAR schrifttyp;
-...
-
-PROC schrifttyp waehlen:
- TEXT CONST info :: " Auswahl der Schrifttypen: "13""13""
- + " s ... schmal (17 Zeichen pro Zoll) "13""
- + " e ... elite (12 Zeichen pro Zoll) "13""
- + " p ... pica (10 Zeichen pro Zoll) "13""
- + " l ... letter (Proportionalschrift) "13""
- + " g ... groß ( 5 Zeichen pro Zoll) ",
-
- liste :: "schmal"13"elite"13"pica"13"letter"13"groß",
- tasten :: "seplgSEPLG";
-
- INT VAR auswahl := menualternative (info, liste, tasten, 5, TRUE);
- SELECT auswahl OF
- CASE 1, 101, 106: schrifttyp := "17"
- CASE 2, 102, 107: schrifttyp := "12"
- CASE 3, 103, 108: schrifttyp := "10"
- CASE 4, 104, 109: schrifttyp := "prop"
- CASE 5, 105, 110: schrifttyp := "5"
- OTHERWISE (* behalte alten Schrifttyp bei *)
- END SELECT
-END PROC schrifttyp waehlen;
-
-
-Hätten wir diese Prozedur in unsere Prozedur 'zeilen formatieren' eingebunden, so
-zeigte sich bei Aktivierung folgende Einblendung in den Menubildschirm:
-
-
-
- +---------------------------------------+
- I I
- I Auswahl der Schrifttypen: I
- I I
- I s ... schmal (17 Zeichen pro Zoll) I
- I e ... elite (12 Zeichen pro Zoll) I
- I p ... pica (10 Zeichen pro Zoll) I
- I l ... letter (Proportionalschrift) I
- I g ... groß ( 5 Zeichen pro Zoll) I
- I I
- I schmal elite pica letter groß I
- I I
- +---------------------------------------+
-
-Die Prozedur 'menualternative' besitzt insgesamt 5 Parameter. Wie Ihnen schon von
-von anderen Prozeduren bekannt ist, wird mit dem vorletzten (4.) Parameter die
-Position innerhalb des Menubildschirms bestimmt - hier also die Plazierung in die
-Mitte des Menubildschirms.
-Mit dem 5. Parameter können Sie noch festlegen, ob der Benutzer die Möglichkeit
-haben soll, die Alternativauswahl mit <ESC><h> abzubrechen (bei TRUE, wie im
-Beispiel) oder eben nicht.
-
-Mit dem 1. Parameter wird der Informationstext festgelegt, der auf dem Bildschirm
-innerhalb der Box erscheinen soll. Für die Funktion der Alternativauswahl ist die­
-ser Inhalt völlig belanglos - er dient ausschließlich der Information des Benutzers.
-Der Text kann - wie hier - z.B. durch eine Einteilung in Zeilen gestaltet werden
-(durch den Code "13").
-Der Text in den Zeilen sollte nicht zu breit sein, da er noch in eine Box innerhalb des
-Menubildschirms hineinpassen muß! Damit es auch bei geschachtelten Menus zu
-keinen Problemen kommt, sollte eine Zeile nicht breiter als 64 Zeichen sein. Aber
-keine Angst: Sie können gs-DIALOG durch zu lange Texte nicht durcheinanderbrin­
-gen - wenn Ihr Text zu breit ist, wird er rigoros abgeschnitten und einfach nicht
-angezeigt.
-
-Mit dem 2. Parameter übergeben Sie die Auswahlliste, die in der letzten Zeile der Box
-dargestellt wird. Hier dürfen insgesamt bis zu 10 Alternativen angegeben werden -
-bedenken Sie dabei aber unbedingt, daß diese Liste ebenfalls nicht zu lang werden
-darf (ebenfalls höchstens 64 Zeichen).
-Zwischen jeder von Ihnen notierten Alternative muß zur Kennung der Code "13"
-eingetragen werden - wie oben im Beispiel gezeigt. Da nachher in der Box zwischen
-den einzelnen Alternativen je drei Leerzeichen eingefügt werden, können Sie sich
-immer an der von Ihnen übergebenen Zeichenkette orientieren. Hat Ihre Auswahlliste
-nicht mehr als 64 Zeichen, dann ist sie in jedem Falle auf dem Bildschirm darstell­
-bar.
-Über diese Auswahlliste erfolgt normalerweise die Auswahl. Mit den Cursortasten links
-und rechts kann der Benutzer auf die gewünschte Alternative positionieren (auf dem
-Bildschirm invers dargestellt) und dann die <RETURN>-Taste tippen.
-Die Prozedur 'menualternative liefert dann einen Zahlenwert, nämlich die Position
-der gewählten Alternative in der als 2. Parameter übergebenen Liste (wird in unse­
-rem Beispiel die Alternative 'letter' gewählt, so liefert die Prozedur den Wert 4).
-Haben Sie den Abbruch durch <ESC><h> zugelassen (5. Parameter), so wird im
-Falle eines solchen Abbruchs der Wert '0' geliefert.
-
-Mit dem 3. Parameter können Sie noch festlegen, über welche Tasten eine Auswahl
-erfolgen soll. Wenn Sie hier niltext ("") angeben, ist eine Auswahl über die Tasten
-nicht möglich. Im Beispiel haben wir hier die Anfangsbuchstaben der im Text ge­
-nannten Schrifttypen gewählt und als Eingabe sowohl Klein- als auch Großbuchsta­
-ben gestattet. Erfolgt nun die Auswahl über das Tippen einer zugelassenen Taste,
-dann wird Ihre Position in der im 3. Parameter übergebenen Zeichenkette ermittelt
-und der Wert '100' dazuaddiert. Tippt in unserem Falle der Benutzer die Taste
-<L>, wird der Wert '109' geliefert.
-
-Es erfolgt übrigens kein Hinweis in der Fußzeile, ob eine Auswahl über das Tippen
-einer Taste möglich ist! Wenn Sie von der Möglichkeit Gebrauch machen, sollten Sie
-dieses durch die Gestaltung Ihres Informationstextes andeuten - wie wir es im Bei­
-spiel auch getan haben.
-
-
-#ib#5.8 Die Menunotiz#ie# ('#ib#write menunotice#ie#', '#ib#erasemenunotice#ie#')
-
-Innerhalb des Menus können Sie für den Benutzer auch eine Notiz ablegen. Wir
-machen z.B. bei der Archivverwaltung Gebrauch davon. Dort wird nämlich ständig
-angezeigt, mit welcher Task kommuniziert wird und - sofern es sich um einen Ar­
-chivmanager handelt - wie die (angemeldete) Diskette heißt. Wenn Sie z.B. dem
-Benutzer das aktuelle Datum im Menu anzeigen wollen, insertieren Sie die folgende
-Prozedur:
-
-
-PROC datum anzeigen:
- write menunotice ("Datum: " + date, 4)
-END PROC datum anzeigen;
-
-
-Die Prozedur 'write menunotice' besitzt zwei Parameter. Mit dem ersten Parameter
-wird der Text übergeben, der in der Box ausgegeben werden soll. Er unterliegt eben­
-falls der gs-DIALOG-Syntax für Texte. Durch den zweiten Parameter wird wieder die
-Position innerhalb des Menus festgelegt (hier rechts unten: Position 4).
-
-Wenn Sie jetzt in Ihrer Menukarte die Prozedur 'oberbegriff  ("Bearbeiten")' in fol­
-gender Weise abändern:
-
-
- oberbegriff ("Bearbeiten", "datum anzeigen", "erase menunotice")
-
-
-dann wird jedesmal, wenn das Pull-Down-Menu unter dem Oberbegriff 'Bearbeiten'
-aufgefaltet wird, unten rechts (Position 4) das aktuelle Datum in einer Box ange­
-zeigt. Diese Notiz verschwindet, wenn in ein anderes Pull-Down-Menu gewechselt
-wird.
-
-Auf den ersten Eindruck scheinen die Prozeduren 'write menunotice' und 'menuinfo'
-gleich zu sein - das ist aber nicht der Fall: Bei 'menuinfo' wird der Text in einer Box
-ausgegeben und so lange gewartet, bis der Benutzer eine Taste getippt hat (oder die
-angegebene Zeit verstrichen ist). Bei 'write menunotice' wird ebenfalls ein Text in
-einer Box auf den Menubildschirm geschrieben. Diese Box bleibt aber über längere
-Zeit bestehen (auf Erscheinen und Verschwinden kann der Benutzer selbst keinen
-Einfluß nehmen!) - und zwar solange, bis die Notiz gelöscht wird (mit 'erase menu­
-notice'; in unserem Beispiel, wenn das Pull-Down-Menu gewechselt wird) oder durch
-ein neues 'write menunotice' überschrieben wird. In einem Menu kann nämlich zu
-einem Zeitpunkt nur eine Menunotiz abgelegt werden.
-Wenn der Bildschirm durch gs-DIALOG-Prozeduren überschrieben wird, wird die
-Menunotiz ebenfalls ständig mitaufgefrischt, und auch, wenn Sie den Befehl 'regene­
-rate menuscreen' oder 'refresh submenu' geben.
-
-
-#ib#5.9 Fußzeilen im Menu#ie# ('#ib#menufootnote#ie#', '#ib#oldmenufootnote#ie#')
-
-In den Fußzeilen innerhalb des Menus werden dem Benutzer Bedienhinweise ange­
-zeigt. Die Fußzeile wird aber auch dazu benutzt, den Benutzer über Prozesse zu
-informieren, die im Hintergrund ablaufen - erst recht dann, wenn Sie einige Zeit in
-Anspruch nehmen. Sie zeigen dem Benutzer an, daß er nicht "unruhig" zu werden
-braucht, sondern das System "mit sich" beschäftigt ist.
-Im allgemeinen braucht sich der Programmierer um diese Fußnoten nicht zu küm­
-mern, denn sie werden von den einzelnen Komponenten des Systems automatisch
-gesetzt. Wir können aber z.B. dem Benutzer einen Hinweis geben, wenn unter dem
-Menupunkt 'Verzeichnis' eine Liste erstellt wird. Die Prozedur könnte dann folgen­
-dermaßen notiert werden:
-
-
-PROC verzeichnis ausgeben:
- menufootnote ("Bitte warten... Ich erstelle eine Dateiliste");
- FILE VAR f :: sequential file (output, "Dateiliste");
- list (f); modify (f);
- old menufootnote;
- entferne eigenen namen;
- zeige liste an;
- forget ("Dateiliste", quiet).
-
- entferne eigenen namen:
- TEXT VAR zeile :: ""; INT VAR i;
- FOR i FROM lines (f) DOWNTO 1 REP
- to line (f, i);
- read record (f, zeile);
- UNTIL pos (zeile, "Dateiliste") > 0 PER;
- delete record (f).
-
- zeige liste an:
- to line (f, 1);
- menuwindowshow (f) (* Sehen Sie Kapitel 5.11.1*)
-END PROC verzeichnis ausgeben;
-
-
-Beachten Sie, daß der Text nicht länger als 64 Zeichen ist, damit er auch bei ge­
-schachtelten Menus vollständig ausgegeben werden kann. Sollte der Text dennoch zu
-lang sein, wird er vom System auf die entsprechende Länge gestutzt.
-Haben Sie mit 'menufootnote' eine eigene Fußzeile gesetzt, so können Sie die da­
-durch gelöschte Zeile durch den Befehl 'old menufootnote' wieder hinschreiben.
-Ansonsten wird Ihre Fußzeile von der nächsten automatisch (d.h. vom System) ge­
-setzten Fußnote überschrieben. In dem obigen Beispiel hätten Sie also gut auf den
-Befehl 'old menufootnote' verzichten können.
-
-Durch 'old menufootnote' wird die letzte Fußnote, die automatisch vom System ge­
-setzt wurde, reproduziert. Der in der obigen Prozedur verwendete Befehl 'menuwin­
-dowshow' ist bisher noch nicht erläutert. Sehen Sie dazu bitte das Kapitel 5.11.1.
-
-
-#ib#5.10 Wiederherstellung des Menubildschirms#ie# ('#ib#regenerate
- menuscreen#ie#','#ib#refresh submenu#ie#')
-
-Der Befehl 'regenerate menuscreen' ist Ihnen schon aus diversen Beispielprogram­
-men dieses Handbuches bekannt. Ist der Menubildschirm "kaputtgeschrieben" oder
-der Bildschirm für andere Zwecke benutzt worden, so läßt sich durch diesen Befehl
-der Menubildschirm in seinem letzten Zustand reproduzieren (auch bei geschachtel­
-ten Menus!). Durch den Befehl wird der Bildschirm gelöscht und komplett neu
-aufgebaut.
-
-Ein vollständiger Bildschirmaufbau ist aber gar nicht immer nötig. Wenn Sie sicher
-sind, daß durch Ihre Operationen nur der Bereich zwischen den beiden durchgezo­
-genen Linien, die die Kopf- und Fußzeile abtrennen, betroffen ist, brauchen Sie nur
-den Befehl 'refresh submenu' zu geben. Hierdurch wird das aktuelle Pull-Down-
-Menu neu aufgebaut und - sofern gesetzt - die Menunotiz. Wenn möglich, ist er dem
-Befehl 'regenerate menuscreen vorzuziehen, da hierfür weniger Zeit benötigt wird
-und weniger "Unruhe" auf dem Bildschirm entsteht.
-Sorgen Sie aber unbedingt dafür, daß der von Ihnen benutzte Bildschirmbereich
-zuvor "gereinigt" wird, denn das besorgt 'refresh subnmenu' nicht!
-
-
-#ib#5.11 Arbeiten im Menufenster#ie#
-
-Neben den vorab aufgezeigten Möglichkeiten können Sie innerhalb des Menus auch
-noch ein Fenster öffnen. Innerhalb dieses Fensters stehen Ihnen alle Möglichkei­
-ten zur Verfügung, die Sie auch sonst zum Beschreiben des gesamten Bildschirms
-haben - und noch einiges mehr.
-Wir machen z.B. intensiv beim Archivhandling Gebrauch davon. So werden Ihnen
-Verzeichnisse angezeigt, Sie können verfolgen, wie die einzelnen Dateien vom Archiv
-geholt werden oder dorthin geschrieben werden und einiges mehr. In diesem Kapitel
-wollen wir Ihnen die Möglichkeiten aufzeigen, die Sie innerhalb des Menufensters
-haben.
-
-Auf die Größe des Menufensters haben Sie keinen Einfluß, sie wird vom System ge­
-setzt ("normales" Menu: 77 Zeichen breit und 20 Zeichen hoch; geschachteltes
-Menu: 71 Zeichen breit und 16 Zeichen hoch). Hierdurch ist sichergestellt, daß alle
-Operationen auch in geschachtelten Menus ohne Probleme ausführbar sind. Alle
-Prozeduren, die sich auf Aktionen im Menufenster beziehen, enthalten die Silbe
-'menuwindow'.
-Sie können mit den hier beschriebenen Prozeduren ähnlich arbeiten, wie mit den
-entsprechenden Prozeduren ohne den Wortbestandteil 'menuwindow' auf dem
-ganzen Bildschirm. Allerdings gibt es einige Unterschiede, auf die Sie achten sollten!
-
-
-5.11.1 Datei anzeigen/editieren
- ('#ib#menuwindowshow#ie#', '#ib#menuwindowedit#ie#')
-
-Von der Prozedur 'menuwindowshow (FILE VAR f)' haben wir im letzten Kapitel
-schon Gebrauch gemacht, um das Verzeichnis der Dateien in der Task innerhalb des
-Menus anzuzeigen. Die Prozedur gibt es in zwei Versionen mit je einem Parameter.
-Einmal kann, wie im vorigen Kapitel, ein FILE angegeben werden, andererseits kann
-auch der Name der anzuzeigenden Datei als Text übergeben werden ('menuwindow­
-show (TEXT CONST dateiliste)'). Durch den Befehl wird innerhalb des Menus ein
-umrandetes Fenster geöffnet, in der das angegebene File/die Datei angezeigt wird. Bei
-'menuwindowshow' kann die Datei nur eingesehen, nicht aber schreibend verändert
-werden.
-Die Prozedur 'menuwindowedit' gibt es ebenfalls in den zwei Ausprägungen. Sie
-verhält sich zur vorgenannten identisch - nur kann hier auch die Datei schreibend
-verändert werden.
-
-
-5.11.2 Menufenster öffnen/anzeigen ('#ib#show menuwindow#ie#')
-
-Wenn Sie eigene Operationen in einem Fenster im Menu ausführen lassen wollen,
-muß dieses Fenster zunächst auf dem Bildschirm angezeigt werden. Durch den
-Befehl 'show menuwindow' wird ein entsprechender Rahmen innerhalb des Menus
-ausgegeben und der Bereich innerhalb dieses Rahmens (das Fenster) gelöscht.
-Auf die Größe des Fensters innerhalb des aktuellen Menus können Sie - wie bereits
-eingangs gesagt - keinen Einfluß nehmen.
-Zu einem Zeitpunkt kann immer nur ein Menufenster geöffnet sein, da das Fenster
-schon den größtmöglichen sinnvollen Bereich des aktuellen Menus belegt. Ein er­
-neutes 'show menuwindow' hätte die gleiche Wirkung wie das nachfolgend beschrie­
-bene 'menuwindowpage' - nur wird hier zusätzlich noch der Rahmen des Fensters
-mitausgegeben.
-
-
-5.11.3 Menufenster löschen (putzen) ('#ib#menuwindowpage#ie#')
-
-Durch den Befehl 'menuwindowpage' wird das Fenster innerhalb des aktuellen
-Menus gelöscht; der Rahmen des Fensters bleibt bestehen, da er nicht mit zum ei­
-gentlichen Fenster gehört. Durch den Befehl wird der Menubildschirm nicht(!)
-rekonstruiert!
-
-
-5.11.4 Positionierungen im Menufenster
- ('#ib#menuwindowline#ie#', '#ib#menuwindowcursor#ie#')
-
-Mit 'menuwindowline' wird, wie auch sonst auf dem Bildschirm, an den Anfang der
-nächsten Zeile positioniert. Diesen Befehl gibt es, ebenso wie den Befehl 'line' (der
-auf dem Gesamtbildschirm operiert) ohne und mit einem Parameter. Durch 'menu­
-windowline (3)' wird an den Anfang der "drittnächsten" Zeile innerhalb des Menu­
-fensters positioniert.
-
-Aber Achtung! Der Befehl 'menuwindowline' weist einen deutlichen Unterschied zum
-Ihnen bekannten Befehl 'line' auf. Wird nämlich die untere Fenstergrenze überschrit­
-ten, so rollt (scrollt) der Bildschirm nicht um die entsprechenden Zeilen nach oben,
-wie Sie es von 'line' gewohnt sind - statt dessen wird der Fensterinhalt gelöscht und
-wieder oben im Fenster zu schreiben begonnen. Es erscheint, als ob auf ein neues
-Fenster positioniert würde.
-Innerhalb des Fensters können Sie auch den Cursor positionieren, wie Sie es vom
-Bildschirm gewohnt sind - allerdings nur innerhalb der aktuell gültigen Grenzen. In
-einem Menu ist das Fenster 77 Zeichen breit und 20 Zeichen hoch; in einem ge­
-schachtelten Menu 71 Zeichen breit und 16 Zeichen hoch.
-Wird außerhalb des aktuellen Menufensters positioniert, wird das Fenster gelöscht
-und die Fensterposition (1, 1) angenommen.
-
-
-5.11.5 Informationen über die aktuelle Menu-Fenster position ('#ib#get
-menuwindowcursor#ie#', '#ib#remaining menuwindowlines#ie#')
-
-Mit der Prozedur 'get menuwindowcursor (INT VAR spalte, zeile)' kann die aktuelle
-Position des Cursors innerhalb des Menufensters erfragt werden. Die Prozedur hat
-zwei Parameter, die als 'INT VAR' deklariert sein müssen. Der erste Parameter enthält
-anschließend die aktuelle Spalte, der zweite die aktuelle Zeile.
-
-Mit der werteliefernden Prozedur 'remaining menuwindowlines' kann die Anzahl der
-noch verbleibenden Zeilen innerhalb des aktuellen Menufensters erfragt werden. Die
-Prozedur wurde deshalb zur Verfügung gestellt, weil der Fensterinhalt - im Gegensatz
-zum normalen Bildschirm - nicht gescrollt werden kann. So können Sie sich vorab
-informieren, ob der Text, der von Ihnen ausgegeben werden soll, noch Platz findet, so
-daß während der Ausgabe nicht plötzlich der Fensterinhalt gelöscht wird.
-
-
-5.11.6 Ausgabe/Eingabe innerhalb des Menufensters
- ('#ib#menuwindowout#ie#', '#ib#menuwindowget#ie#',
- '#ib#menuwindoweditget#ie#', '#ib#menuwindowyes#ie#',
- '#ib#menuwindowno#ie#')
-
-Innerhalb des Menufensters können mit der Prozedur 'menuwindowout' Texte ausge­
-geben werden - die Prozedur hat einen TEXT-Parameter. Sollen INTEGER- oder REAL-
-Werte ausgegeben werden, so müssen diese Werte zuerst in Texte konvertiert werden.
-Bitte beachten Sie unbedingt, daß innerhalb des Fensters nicht gescrollt wird und
-auch kein Zeilenumbruch stattfindet! Ist ein Text länger als die verbleibende Restzei­
-le, so wird der Text bis zum Fensterende ausgegeben und die Ausgabe am Anfang der
-nächsten Zeile fortgesetzt. So ist sichergestellt, daß in keinem Falle die Fenstergren­
-zen überschritten werden.
-Sobald die letzte Position des aktuellen Menufensters beschrieben ist (unten rechts in
-der Fensterecke), wird der Fensterinhalt komplett gelöscht und die Ausgabe in der
-ersten Zeile des "neuen" Fensters fortgesetzt. Auf Zeilenumbruch und Scrolling wurde
-verzichtet, da der Realisierungsaufwand dafür zu hoch gewesen wäre.
-
-Mit der Prozedur 'menuwindowget (TEXT VAR text)' können Sie auch Texte innerhalb
-des Menufensters einlesen - INTEGER-/ REAL-Werte müssen ggf. von Hand konvertiert
-werde. Die Eingabe wird durch <RETURN> abgeschlossen. Es muß mindestens ein
-Zeichen (ungleich Leerzeichen) eingegeben werden. Von der Eingabe werden die
-führenden Leerzeichen abgeschnitten.
-Ist der einzugebende Text länger als die noch verbleibende Restzeile, so wird der Text
-in der Restzeile gescrollt. Sind in der aktuellen Zeile weniger als 7 Zeichen für die
-Eingabe vorhanden, so wird automatisch für die Eingabe an den Anfang der nächsten
-Zeile positioniert.
-
-Ab gs-DIALOG-Version 1.1 steht auch die Prozedur 'menuwindoweditget (TEXT VAR
-text)' zur Verfügung, durch die ein Text zum Editieren vorgegeben werden kann. Es
-ist allerdings darauf zu achten, daß der Text in jedem Falle initialisiert wird!
-
-Die beiden Prozeduren 'menuwindowyes' und 'menuwindowno' ähneln den Ihnen
-bekannten Prozeduren 'yes' und 'no'. Sie operieren nur auf dem Menufenster. Be­
-denken Sie aber bitte, daß, wenn bei der Ausgabe des Textes die Fenstergrenze über­
-schritten wird, der Resttext in der nächsten Zeile ausgegeben wird. Wird dabei sogar
-die untere Fenstergrenze überschritten, so wird der komplette Fensterinhalt gelöscht
-und die Ausgabe in der linken oberen Ecke des "neuen Fensters" fortgesetzt!
-
-
-5.11.7 Weiter Prozeduren ('#ib#menuwindowcenter#ie#',
- '#ib#menuwindowstop#ie#')
-
-Es werden noch zwei weitere Prozeduren für das Menufenster zur Verfügung gestellt,
-die bei der Programmentwicklung ganz nützlich sein können.
-Mit 'menuwindowcenter (TEXT CONST text)' werden vor und hinter dem übergebe­
-nen Text so viele Leerzeichen angefügt, daß der Text zentriert in der Menufenster-Zei­
-le ausgegeben wird. Bevor Sie den Text mit 'menuwindowout' ausgeben, müssen Sie
-an den Anfang einer Zeile positionieren, denn die Anzahl der vorangestellten Blanks
-wird unter Annahme dieser Zeilenposition ermittelt! Innerhalb der Zeile werden ggf.
-vorhandene Texte überschrieben.
-
-Durch die Prozedur 'menuwindowstop' wird an den Anfang der übernächsten Zeile
-positionert und der Text 'Zum Weitermachen bitte irgendeine Taste tippen!' ausgege­
-ben. Danach wird so lange gewartet, bis eine Taste getippt wird. Mit 'menuwindow­
-stop (INT CONST zeilenzahl) kann auch noch die Anzahl der Zeilen bestimmt wer­
-den, die vorwärtspositioniert werden soll (Standard: 2 Zeilen).
-
-
-#ib#5.12 Festlegung der Boxpositionen innerhalb des Menus#ie#
-
-In vielen Fällen kann der Programmierer noch entscheiden, an welcher Position
-innerhalb des Menus die Box erscheinen soll (z. B. bei 'menuanswer', 'menuinfo',
-'menuyes', 'menuno', 'menunotice' etc.). Die Positionen sind von 1 bis 5 durchnu­
-meriert und haben folgende Bedeutung:
-
-+----------------------------------------+
-I I
-+----------------------------------------+
-I I
-I +-----+ +-----+ I
-I I 1 I I 2 I I
-I +-----+ +-----+ I
-I I
-I +-----+ I
-I I 5 I I
-I +-----+ I
-I I
-I +-----+ +-----+ I
-I I 3 I I 4 I I
-I +-----+ +-----+ I
-I I
-+----------------------------------------+
-I I
-+----------------------------------------+
-#page#
-#ib#5.13 gs-DIALOG-Syntax (Regeln zur Erstellung von Texten)#ie#
-
-Werden Texte als Parameter übergeben, die in einer Box ausgegeben werden sollen,
-so kann dieser Text durch Einfügen von Steuerzeichen noch gestaltet werden, z.B.
-kann der Programmierer so den Zeilenaufbau bestimmen.
-Das System analysiert den eingegebenen Text. Jedesmal, wenn innerhalb des Textes
-der Code "13" erscheint, wird innerhalb der Box auf den nächsten Zeilenanfang
-positioniert. So ist eine Einteilung eines Textes in Zeilen leicht möglich. Soll eine
-Leerzeile eingefügt werden, so geben Sie einfach zweimal den Code "13" ("13""13").
-Bei der Textanalyse wird die jeweilige Zeilenlänge vermerkt. Die Box wird vom System
-gerade so breit gewählt, daß die längste vorkommende "Zeile" im Text gerade noch in
-die Box paßt.
-Aber Vorsicht! Die jeweilige Box kann innerhalb des Menus nur eine Maximalgröße
-annehmen (64 Zeichen breit und 14 Zeilen hoch). Wird von einer "Zeile" diese
-Maximalgröße überschritten, so wird die Zeile abgeschnitten und nur bis zur Maxi­
-malbreite der Box ausgegeben.
-
-Ein Text für eine solche Box könnte z.B. so aussehen:
-
-
-menuinfo (" Informationstexte "13" sind meist"13" zu
-lang!")
-
-
-das ergibt folgende Ausgabe in der Box:
-
-
- +-----------------------+
- I I
- I Informationstexte I
- I sind meist I
- I zu lang I
- I I
- +-----------------------+
-
-Es ist auch möglich, in solchen Texten Textpassagen invers darzustellen. Dazu wer­
-den in den Text die Codes zum Ein- ("15") und Ausschalten ("14") der Markierung
-eingefügt. Solche markierten Textpassagen dürfen aber nicht über interne Zeilen­
-grenzen (Code "13") hinausgehen. Sie müßten dann am Zeilenende aus- und am
-nächsten Zeilenanfang wiedereingeschaltet werden.
-Soll in der obigen Box das Wort 'Informationstexte' invers dargestellt werden, so wäre
-z.B. folgendes Kommando zu geben:
-
-
-menuinfo (" "15"Informationstexte"14" "13"" +
- " sind meist"13" zu lang!")
-
-
-#ib#5.14 Thesaurushandling#ie#
-
-Neben den allgemein zur Verfügung gestellten Thesaurusoperationen stellt
-gs-DIALOG einige weitere bereit. Mit der Prozedur 'THESAURUS PROC #ib#infix namen#ie#
-(THESAURUS CONST thes, TEXT CONST infix)' werden aus allen Dateinamen des
-angegebenen Thesaurus die herausgefiltert, die den Wortbestandteil 'infix' enthalten -
-und zwar gleichgültig, an welcher Position! Die herausgefilterten Dateinamen werden
-in einem Thesaurus geliefert. Im Programmsystem 'gs-Herbert und Robbi' mach­
-en wir z.B. Gebrauch davon, wenn wir nur die Landschaften der eigenen Task zur
-Auswahl anbieten wollen:
-
-
-THESAURUS VAR thes :: infix namen (ALL myself, "Flaeche:")
-
-
-Daneben gibt es eine ähnliche Prozedur, mit der man die Dateien eines bestimmten
-Dateityps herausfiltern kann. Mit
-
-
-THESAURUS VAR thes :: infix namen (ALL myself, 1003)
-
-
-werden alle Dateien mit dem Typ '1003' (normale Textfiles) herausgefiltert. Neben
-den beiden gibt es auch noch eine Prozedur, die beide Fälle miteinander koppelt:
-
-
-THESAURUS VAR thes :: infix namen (ALL myself, "gs-MENUKARTE:", 1954)
-
-
-Mit der folgenden Prozedur:
-
-
-THESAURUS VAR thes :: #ib#ohne praefix#ie# (ALL myself, "Flaeche:")
-
-
-wird aus den Dateinamen im angegebenen Thesaurus jeweils der führende Wortbe­
-standteil entfernt. Wir machen z.B. in gs-Herbert und Robbi davon Gebrauch, um
-die Landschaften/Arbeitsfelder anbieten zu können, ohne jeweils den Wortbestandteil
-'Flaeche:' miterscheinen zu lassen.
-
-Ganz nützlich ist auch noch die folgende Informationsprozedur '#ib#not empty#ie#
-(THESAURUS CONST thes)', mit der man z.B. feststellen kann, ob eine Auswahl ohne
-Ankreuzen oder mit <ESC><h> abgebrochen wurde:
-
-
-
-PROC zeilen formatieren:
- TEXT CONST kopf :: "Textdateien zeilenweise formatieren",
- hinweis :: "Bitte gewünschte Dateien ankreuzen";
- THESAURUS VAR dateinamen := menusome (ALL myself, kopf, hinweis,
- FALSE);
-
- IF not empty (dateinamen)
- THEN cursor on;
- formatiere dateien;
- cursor off;
- FI;
- regenerate menuscreen.
-
- formatiere dateien:
- INT VAR zaehler;
- FOR zaehler FROM 1 UPTO highest entry (dateinamen) REP
- IF name (dateinamen, zaehler) <> ""
- THEN lineform (name (dateinamen, zaehler))
- FI
- PER
-END PROC zeilen formatieren;
-
-
-
-#ib#5.15 Aktivieren und Deaktivieren von Menupunkten#ie#
-
-Daß Verarbeitungsfunktionen aktiviert und deaktiviert werden können, haben Sie
-schon in unserem Archiv-Pull-Down-Menu gesehen. Deaktivierte Menupunkte sind
-durch ein vorgestelltes '-'-Zeichen gekennzeichnet; diese Menufunktionen werden
-übersprungen, wenn Sie versuchen, darauf zu positionieren.
-
-Zur Aktivierung und Deaktivierung von Menupunkten stehen die Prozeduren '#ib#activate#ie#
-(TEXT CONST menupunktname)' und '#ib#deactivate#ie# (TEXT CONST menupunktname)'
-zur Verfügung. Zu beachten ist, daß diese Prozeduren nicht ständig aufrufbar sind -
-der jeweils angegebene 'menupunktname' muß sich nämlich auf das aktuelle Pull-
-Down-Menu beziehen! Als Menupunktname muß jeweils der Name angegeben wer­
-den, der bei der entsprechenden Menufunktion als 2. Parameter übergeben wurde.
-Ist der angegebene 'menupunktname' im aktuellen Pull-Down-Menu nicht enthalten,
-so wird die Anweisung ignoriert!
-
-Auch bei den Prozeduren' activate (INT CONST punktnummer)' und 'deactivate (INT
-CONST punktnummer)' gilt diese Einschränkung. Die beiden Prozeduren arbeiten
-schneller als die eben aufgezeigten, denn es muß im aktuellen Pull-Down-menu
-nicht mehr nach der jeweiligen Position gesucht werden. Die Positionen werden von
-oben nach unten durchgezählt. Beachten Sie aber unbedingt, daß die Trennlinien
-mitgezählt werden müssen!
-Die Prozeduren "zeigen nur dann Wirkung", wenn sie von einer Verarbeitungsfunk­
-tion des aktuell entfalteten Pull-Down-Menus aus aufgerufen werden (das geschieht
-im Archivmenu z.B. aus den beiden Menufunktionen 'Reservieren' und 'Initialisieren'
-heraus) oder wenn Sie beim Einstieg in ein Pull-Down-Menu bzw. beim Ausstieg
-daraus aufgerufen werden; d.h. aus einer Prozedur heraus, die bei 'oberbegriff' als
-2./3. Parameter in das Menukarten-Generierungsprogramm eingetragen ist. Beim
-Archiv-Pull-Down-Menu besorgt das die Prozedur 'menu archiv grundeinstellung'
-(sehen Sie dazu auch Kapitel 6.1).
-
-