1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
|
#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.
|