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
|
#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.
|