#limit (11.0)##pagelength (16.5)##block# #start (2.0,0.0)# #page (97)# #headodd# #center#EUDAS#right#% #end# #headeven# %#center#EUDAS #end# #center#1 10 Programmierung der Menüs 10.1 Menüformat EUDAS verwendet drei verschiedene Strukturen zur Benutzerunter­ stützung: Menü, Auswahl und Hilfestellung. Ein Menü dient zur Auswahl von Funktionen, eine Auswahl bietet Feld- oder Datei­ namen an und eine Hilfestellung zeigt einen Informationstext. Alle diese Strukturen werden aus einer Initialisierungsdatei eingelesen. Die Initialisierungsdatei ist eine normale Textdatei. Ihr Format soll in diesem Abschnitt beschrieben werden. Die Strukturen können in beliebiger Reihenfolge in der Initiali­ sierungsdatei stehen. Jede Struktur wird durch eine spezielle Anweisung eingeleitet. Anweisungen beginnen ähnlich wie im Druckmuster mit einem Prozentzeichen. Dementsprechend gibt es die drei Anweisungen % MENUE "Name" % AUSWAHL "Name" % HILFE "Gebiet/Name" die jeweils eine Struktur einleiten. Beendet wird eine Definition immer mit % ENDE #on("b")#Menü#off("b")# Für ein Menü wird noch der Text angegeben, der auf dem Bildschirm erscheinen soll. Er wird durch die Anweisung % BILD eingeleitet. Danach folgen Zeilen mit dem Bildschirminhalt in der gewünschten Größe (die tatsächliche Anzeigegröße wird erst beim Aufruf angegeben). Dabei werden die Auswahlpositionen, auf denen der Cursor sich bewegen kann, durch ein geschütztes Leerzeichen in Spalte 2 festgelegt. Nach der Angabe des Bildes muß für jede mögliche Auswahl­ position noch eine weitere Angabe gemacht werden. Die Auswahl­ positionen (oder Felder) werden dabei von oben nach unten durch­ gezählt. Begonnen wird mit der Nummer 1. Eine Felddefinition hat das Format % FELD nr "Hilfstext" "Tasten" Die Nummer identifiziert das Feld. Der Hilfstext gibt den Namen der Hilfestellung an, die gezeigt werden soll, wenn auf diesem Feld ESC '?' gedrückt wird. Die Tasten sind alle Zeichen, die gedrückt werden können, um dieses Feld direkt auszuführen. Anschließend an die Felddefinition kann in weiteren Zeilen noch ein ELAN-Programm folgen, das bei Auswahl des Feldes aus­ geführt wird. #on("b")#Auswahl#off("b")# Für eine Auswahl muß zuerst ein Vorspann angegeben werden, der immer in den ersten Bildschirmzeilen der Auswahl an­ gezeigt wird. Dieser wird durch % VORSPANN eingeleitet. Danach folgt das Bild. Das Bild setzt sich aus drei Tei­ len zusammen. Die erste Zeile, in der ein geschütztes Leerzeichen vorkommt, bildet den Wiederholungsteil. Diese Zeile wird nachher so oft wie nötig mit entsprechenden Inhalten wiederholt, wobei das geschützte Leerzeichen als Bindestrich dargestellt wird, auf dem sich der Cursor bewegen kann. Die Teile davor und danach werden jeweils bei Bedarf mitgerollt. Die Wiederholungszeile darf mehrere geschützte Leerzeichen enthalten. Die Inhalte werden dann in mehreren Spalten angezeigt. Zu beachten ist, daß vor einem Trennstrich noch mindestens fünf Zeichen Platz für eine laufende Nummer bleiben müssen. #on("b")#Hilfe#off("b")# Der Name einer Hilfestellung setzt sich aus zwei Teilen zusammen, die durch einen Schrägstrich getrennt werden. Der erste Name gibt die Kategorie der Hilfestellung an, der zweite Name den Einzeltext. Dies dient dazu, die relativ große Zahl der Hilfstexte überschaubar zu machen. Als Beispiel % HILFE "JA/Allgemein" Eine Hilfestellung besteht einfach aus mehreren Seiten Text. Jede Seite wird durch die AnweisungQ Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈ Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈ Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈ Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈ Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q̈Q Q̈Q̈Q̈Q̈Q̈Q̈Q̈estellung, wobei die Seiten einfach von 1 an durch­ gezählt werden. Anschließend darf für diese Seite natürlich kein Text folgen. 10.2 Verwaltung der Menüs Alle Menüdaten werden intern in Datenräumen gehalten. Dabei sind die einzelnen Strukturen getrennt. Mit 'menuedaten einlesen' kön­ nen Menüdaten aus einer Struktur gelesen und abgespeichert wer­ den. Existierende Strukturen werden dabei überschrieben, neue hinzugefügt. Mit 'menuenamen' können die vorhandenen Strukturen abgefragt werden. Mit 'menue loeschen' werden einzelne Strukturen oder alle Menüdaten gelöscht. Damit die Datenräume mit den Menüdaten auch an Söhne übergeben werden, ist der 'global manager' entsprechend geändert. Dies wird im einzelnen durch 'menue manager' bewirkt. Der neue Global Manager akzeptiert auch Anfragen von Tasks, die nicht Söhne oder Enkel sind. PROC menuedaten einlesen (TEXT CONST dateiname) Die in der Datei enthaltenen Strukturen werden eingelesen und abgespeichert. Treten bei diesem Prozeß Fehler auf, so wird eine entsprechende Meldung ins EUMEL-Notizbuch geschrieben und nachher im Paralleleditor angezeigt. THESAURUS PROC menuenamen (INT CONST index) Liefert die Namen der Strukturen. Der Index hat folgende Be­ deutung: 1: Hilfskategorien 2: Menüs 3: Auswahlen Ist der Index negativ, so werden die Hilfsnamen der entspre­ chenden Hilfskategorie geliefert, die im Thesaurus den Index mit umgekehrtem Vorzeichen hat. PROC menue loeschen (TEXT CONST name, INT CONST index) Löscht den Namen in dem Thesaurus mit dem angegebenen In­ dex, falls dort der Name vorhanden ist. PROC menue loeschen (BOOL CONST hilfen reduzieren) Löscht alle Menüdaten. Ist 'hilfen reduzieren' verlangt, wird beim späteren Einlesen der Hilfstexte jeweils nur der erste Text einer Kategorie gespeichert, um Platz zu sparen. PROC global manager Geänderter Manager, der die Menüdatenräume in Söhne trans­ portiert und Sperren setzen kann. Ersetzt den normalen 'free global manager'. Nur im Multi-User-System vorhanden. PROC menue manager (DATASPACE VAR ds, INT CONST order, phase, TASK CONST order task) Eigentliche Manager-Routine. Kann dazu dienen, Managererwei­ terungen vorzunehmen. Nur im Multi-User-System vorhanden. Beispiel: der Manager soll nur Aufträge von Söhnen annehmen. PROC new manager (DATASPACE VAR ds, INT CONST order, phase, TASK CONST order task): LET begin code = 4; IF order task < myself OR order = begin code OR order task = supervisor THEN menue manager (ds, order, phase, order task) ELSE errorstop ("kein Sohn") END IF END PROC new manager; global manager (PROC new manager) (* startet den Manager *) 10.3 Aufruf Menüs werden mit der Prozedur 'menue anbieten' aufgerufen. Dabei muß neben den Namen ein Fenster übergeben werden, in dem die Menüs dann angezeigt werden. Es ist darauf zu achten, daß das Fenster groß genug ist, um wenigstens die Auswahlpositionen im Bild zu haben. Außerdem muß eine Prozedur übergeben werden, die die einzel­ nen Funktionen ausführt. Diese Prozedur erhält als Parameter die Nummer der ausgewählten Funktion. Mit 'waehlbar' können Auswahlen gesperrt werden. Diese Anga­ be kann jedoch nicht vor Aufruf von 'menue anbieten' erfolgen, da dann alle Sperren erstmal gelöscht werden. Zum Setzen der Sperren beim Betreten eines Menüs dient ein besonderer Code, mit dem die übergebene Prozedur aufgerufen wird. Eine Auswahl wird mit der Prozedur 'auswahl anbieten' aufge­ rufen. Diese bekommt ebenfalls ein Fenster übergeben, außerdem den Namen einer Hilfestellung, die bei Bedarf aufgerufen werden kann. Weiterhin muß eine Prozedur übergeben werden, die die aus­ zuwählenden Texte erzeugt. Die gewählten Texte können anschlie­ ßend mit der Prozedur 'wahl' abgefragt werden. Eine Hilfestellung wird durch die Prozedur 'hilfe anbieten' ausgegeben. Dabei muß außer dem Namen auch noch ein Fenster übergeben werden. Mit 'status anzeigen' kann ein Text in der Statuszeile ausge­ geben werden. Die Menüprogramme tun dies für ihren Bereich jedoch selbst. PROC menue anbieten (ROW 6 TEXT CONST menuenamen, FENSTER VAR f, BOOL CONST esc erlaubt, PROC (INT CONST, INT CONST) interpreter) Die angegebenen Menüs werden in dem Fenster 'f' angezeigt. Das Fenster wird nach Beendigung des Menüs als verändert gekennzeichnet. Die Namen der 6 Menüs werden in die Titelzeile aufgenommen. Die Menünamen sollten mit einer Menüidentifika­ tion versehen sein, zum Beispiel "EUDAS.Öffnen". Der Text vor dem Punkt wird an den Anfang der Titelzeile gestellt und bei den einzelnen Menünamen unterdrückt. Nicht benötigte Menüs müssen als "" angegeben werden. 'esc erlaubt' gibt an, ob mit ESC ESC ein Kommandodialog ge­ führt werden kann. Die übergebene Prozedur muß die einzelnen Funktionen ausführen, die als Zahl übergeben werden. Der Interpreter wird im 'disable stop' aufgerufen, daher ist in der Regel ein 'enable stop' erforderlich. Die Parameter für 'interpreter' haben folgende Bedeutung: Par. 1: 0 Aufruf zur Initialisierung der Sperren oder anderen Initialisierungen zu Beginn 1..6 Angabe des aktuellen Menüs Par. 2: 1..23 Aufruf der entsprechenden Funktion 0 Eintritt in ein neues Menü (wird vor der Ausgabe dieses Menüs aufgerufen) -1 Verlassen des Menüs -2 Bildschirmupdate (nach Eintritt in das Menü, wenn das Menü ganz ausgegeben ist, oder wenn der Bildschirm nach 'Gib Kommando:' zerstört worden ist) FEHLER: #on("i")#"Name" existiert nicht.#off("i")# Das angegebene Menü ist nicht vorhanden. PROC waehlbar (INT CONST menuenr, funktionsnr BOOL CONST moeglich) Setzt die Funktionssperre der angegebenen Funktion. Muß in­ nerhalb von 'menue anbieten' aufgerufen werden. Zu Beginn von 'menue anbieten' sind jeweils alle Funktionen erlaubt. PROC ausfuehrtaste (TEXT CONST taste) Setzt die Taste, die Funktionen ausführt. Ist standardmäßig die Leertaste. FEHLER: #on("i")#falsche Ausfuehrtaste#off("i")# Es muß ein einzelnes Zeichen angegeben werden, das nicht bereits anderweitig verwendet wird. PROC auswahl anbieten (TEXT CONST name, FENSTER CONST f, TEXT CONST hilfe, PROC (TEXT VAR, INT CONST) inhalt) Ruft die Auswahl in dem angegebenen Fenster auf. 'hilfe' wird als Hilfestellung verwendet. Die Prozedur 'inhalt' liefert den Text, der an der n-ten Position stehen soll. Wenn keine wei­ teren Texte vorhanden sind, muß für alle weiteren Positionen "" geliefert werden. FEHLER: #on("i")#"Name" existiert nicht.#off("i")# Die angegebene Auswahl ist nicht vorhanden. INT PROC wahl (INT CONST stelle) Liefert die Nummer des Textes, der an der n-ten Stelle ausge­ wählt wurde. Wurde kein weiterer Text mehr gewählt, so wird 0 geliefert. PROC hilfe anbieten (TEXT CONST name, FENSTER CONST f) Bietet den Hilfstext in dem angegebenen Fenster an. Existiert die Hilfe innerhalb der angegebenen Kategorie nicht, wird die erste Hilfe der Kategorie angezeigt. FEHLER: #on("i")#Hilfe existiert nicht#off("i")# Die angegebene Hilfskategorie ist nicht vorhanden. PROC status anzeigen (TEXT CONST zeile) Zeigt den angegebenen Text in der obersten Bildschirmzeile an. 10.4 Dialog EUDAS führt den Benutzerdialog in einem Fenster, dessen Größe durch 'dialogfenster' eingestellt wird. Das Dialogfenster wird zei­ lenweise belegt. 'dialog' reserviert eine neue Zeile für eine beliebi­ ge Ausgabe. Wenn das Fenster voll ist oder überschrieben wurde, wird in der ersten Zeile wieder angefangen. Den gleichen Effekt kann man mit 'neuer dialog' erreichen. Mit 'ja' kann man im Dialogfenster eine Frage stellen. Als Ant­ wort kann auch eine Hilfestellung angefordert werden oder die Funktion abgebrochen werden. Mit 'editget' kann man nach Auffor­ derung einen Text eingeben lassen. Dabei stehen die gleichen zusätzlichen Möglichkeiten zur Verfügung. Mit 'fehler ausgeben' kann eine durch 'errorstop' erzeugte Feh­ lermeldung im Dialogfenster angezeigt werden. Der Benutzer muß erst eine Taste drücken, ehe er weitermachen kann. Auch hier kann eine Hilfestellung zu der Fehlermeldung abgerufen werden. PROC dialogfenster (INT CONST x, y, xl, yl) Gibt die Fenstergröße und -position des Dialogfensters an. Für den ganzen Bildschirm müßte (1, 1, 79, 24) angegeben werden. PROC dialog Positioniert den Cursor auf die nächste Dialogzeile im Dialog­ fenster. Wurde das Fenster verändert, wird das Fenster ge­ löscht und auf die erste Zeile positioniert. PROC neuer dialog Sorgt dafür, daß der nächste Aufruf von 'dialog' wieder in einem leeren Fenster beginnt. BOOL PROC ja (TEXT CONST frage, hilfe) Stellt die angegebene Frage. Es kann die angegebene Hilfsin­ formation abgerufen werden. Außerdem wird durch ESC 'h' ein Abbruch (errorstop ("")) erzeugt. PROC editget (TEXT CONST prompt, TEXT VAR eingabe, TEXT CONST res, hilfe) Gibt den Text 'prompt' aus und editiert dahinter 'eingabe'. Es kann die angegebene Hilfsinformation abgerufen werden. 'res' gibt an, bei welchen ESC-Folgetasten das Editieren beendet werden soll. In einem solchen Fall wird als Eingabe (ESC + die gedrückte Taste) zurückgeliefert. PROC fehler ausgeben Im Dialogfenster wird die letzte Fehlermeldung ausgegeben. Gleichzeitig wird der Fehlerzustand gelöscht. Der Benutzer muß eine Taste drücken, um weiterzumachen. Alternativ kann die Hilfsinformation "FEHLER/" + text (errorcode) abgerufen wer­ den.