Next: Intertask Kommunikation
Up: L3 Referenzhandbuch
Previous: Datenräume
Die für das ELAN System zur Verfügung stehenden Ein-/Ausgaberoutinen lassen sich
in diverse Kategorien einteilen. Die erste Gruppe sind die elementaren Ein/Ausgaben,
die Cursorpositionierung und die Einstellung von Farbattributen. In der folgenden
Übersicht sind die Prozeduren, die in Hinsicht auf Steuerzeichen »EUMEL-
kompatibel« sind, durch (E) markiert.
In der zweiten Gruppe sind die umleitbaren Ein-/Ausgaben zusammengestellt. Diese
Eingaben können auch aus einer Datei bezogen, die Ausgaben in eine Datei gelenkt
werden.
Darauf aufbauend gibt es Operationen zur Abwicklung des Kommandodialogs, also
der Abfrage bei Löschen einer Daten ("xyz" löschen (j/n) ?) und dergleichen.
Die nächste Kategorie umfaßt die Prozeduren, die die Kommunikation mit einem
Ein-/Ausgabe Partner vorbereiten und dessen Konfiguration abfragen.
In 6.6 finden sich Operationen, die in angelsächsischen Handbüchern unter der
Überschrift »Miscellaneaous« zusammengefaßt werden: Operationen, die zwar auch
unter in einer der ersten drei Gruppen unterzubringen wären, auf Grund ihrer
Subtilität und selteneren Anwendung jedoch aus den allgemeinen Operationen
herausgezogen sind. Hierunter fallen z.B. das Auslesen von Scancode und Asciicode
einer Taste oder das explizite Auffrischen der Bildschirmausgaben auf einem
Terminal.
Abschließend ist das Thema ELAN Grafik behandelt. Dieser Abschnitt nimmt durch
seine Hardwarenähe eine Sonderstellung ein. Die beschriebenen Mittel dienen der
Ausnutzung der an der Console verfügbaren Hardware. Die in den Rechner eingebaute Grafikkarte läßt sich in einen Grafik- oder Zeichenmodus schalten und es sind
Ausgaben in diesem Modus möglich. Es handelt bei diesen Prozeduren also nicht um
eine erlesene Grafik-Programmierschnittstelle sondern um einen Hardwarezugriff.
editget
PROC editget (TEXT VAR line)
- Wirkung: Zeileneditor. An der aktuellen Cursorposition wird der Text
'line'ausgegeben. 'line' kann beliebig überschrieben, ergänzt etc.
werden. Die Eingabe wird durch »ENTER« abgeschlossen. Im
Gegensatz zur Prozedur get ist auch eine leere Eingabe möglich.
PROC editget (TEXT VAR line, INT CONST width, scroll,
TEXT CONST sep, res, TEXT VAR exit)
- Wirkung: Wie oben, jedoch ist die Länge des eingegebenen Textes auf
'width' Zeichen begrenzt. Die Eingabe wird durch 'ENTER' oder
durch eine Cursorbewegung über die Position 'width' hinaus
abgeschlossen.
Die Angabe 'scroll' setzt die Breite des Zeilenfensters fest. Wird
diese Breite überschritten, so wird 'line' gescrollt.
In 'sep' (Separator) können Zeichen festgesetzt werden, mit
denen die Eingabe beendet wird (zusätzlich zu »ENTER«).
In 'res' (reservierte Tasten) können Tasten festgelegt werden, die
in Verbindung mit »ESC« die Eingabe beenden.
Wurde der Zeileneditor durch einen Separator verlassen, so steht
in 'exit' der Separator. Wurde der Zeileneditor über eine reservierte Taste verlassen, so enthält 'exit' 'ESC' und die Taste.
PROC editget (TEXT VAR line, INT CONST width, scroll)
- Wirkung: Wie oben, jedoch ohne die Möglichkeit, die Eingabe
mit einem Separator oder einer reservierten Taste zu beenden.
PROC editget (TEXT VAR line, TEXT CONST sep, res, TEXT VAR exit)
- Wirkung: Wie oben, jedoch ohne die Möglichkeit, die Länge des Textes
(Anzahl der Zeichen) zu begrenzen und ohne Scrollmöglichkeit.
PROC editget (TEXT VAR line, INT CONST width, TEXT VAR exit)
- Wirkung: Wie oben, jedoch ohne die Möglichkeit, einen Separator oder eine
reservierte Taste zu benutzen. Die Eingabe kann mit »ENTER« vor
Erreichen von 'width' beendet werden.
in
TEXT PROC in (INT CONST milli)
- Wirkung: Wartet 'milli' Millisekunden auf die Eingabe eines Zeichens.
get secret
PROC get secret (TEXT VAR secretline, INT CONST timeout)
- Wirkung: Liest einen Text ein. Statt der eingegebenen Zeichen werden nur
Punkte ausgegeben. Mit Bachspace kann zurückpositioniert
werden, Return schließt die Eingabe ab. Falls 'timeout' Millisekunden keine Eingabe erfolgte oder die Task vom Terminal
abgekoppelt wurde, wird die Eingabe abgebrochen und 'secretline'
wird niltext zugewiesen.
get secret line
PROC get secret line(TEXT VAR secretline)
- Wirkung: Wie editget (secretline), jedoch werden statt der eingegebenen
Zeichen auf dem Bildschirm nur Punkte ausgegeben.
inchar
PROC inchar (TEXT VAR char)
- Wirkung: Wartet bis ein Zeichen eingegeben wird und schreibt dieses
Zeichen in die Variable 'char'.
incharety
TEXT PROC incharety (INT CONST timelimit)
- Wirkung: Wartet 'timelimit' Zehntelsekunden auf die Eingabe eines
Zeichens. Wenn eine Taste gedrückt wird, also ein Zeichen in den
Eingabepuffer geschrieben wird, wird dieses Zeichen geliefert.
Falls die Wartezeit abgelaufen ist, ohne daß ein Zeichen im
Eingabepuffer steht, wird niltext geliefert.
TEXT PROC incharety
- Wirkung: Wirkt wie incharety (0). Es wird versucht, ein Zeichen aus dem
Eingabepuffer zu holen.
- Beispiel: (* Eingabepuffer leeren ohne die Zeichen zu verwerten *)
REP UNTIL incharety = "" PER
pause
PROC pause (INT CONST limit)
- Wirkung: Wartet 'limit' Zehntelsekunden oder bis eine Taste gedrückt wird.
Das eingegebene Zeichen wird 'verschluckt'.
Ein negativer Wert für 'limit' wirkt wie pause(0).
PROC pause
- Wirkung: Wartet auf die Eingabe eines Zeichens.
cout
PROC cout (INT CONST number)
- Wirkung: 'number' wird beginnend an der aktuellen Cursorposition auf
dem Bildschirm ausgegeben. Danach wird wieder an die
ursprüngliche Cursorposition zurückpositioniert. Falls die Ausgabe
außerhalb der Grenzen x size, y size liegt, wird sie abgeschnitten.
cout benötigt kein Terminal. Falls die Task nicht online ist, bleibt
ein Programm also nicht stehen sondern läuft weiter, wenn die
Ausgabe über cout erfolgt.
out
PROC out (TEXT CONST text)
- Wirkung: Der Text 'text' wird beginnend an der aktuellen Cursorposition auf
dem Bildschirm ausgegeben. Falls die Ausgabe außerhalb der
Grenzen x size, y size liegt, wird sie abgeschnitten.
Falls die Task nicht online ist, wird mit der Ausgabe gewartet bis
die Task wieder einen sysout partner (Bildschirm) hat. Steuerzeichen in 'text' werden nach EUMEL Konvention interpretiert.
outsubtext
PROC outsubtext (TEXT CONST text, INT CONST from, to)
- Wirkung: Ein Teiltext von 'text' wird beginnend an der aktuellen Cursorposition auf dem Bildschirm ausgegeben. Der Teiltext beginnt am
'from'ten Zeichen und endet mit dem 'to'ten Zeichen. Falls 'text'
diesen Rahmen nicht füllt, wird nur bis zum Ende des Textes
ausgegeben. Falls LENGTH (text) < from wird nichts ausgegeben.
Falls die Ausgabe außerhalb der Grenzen x size, y size liegt, wird
sie abgeschnitten.
Falls die Task nicht online ist, wird mit der Ausgabe gewartet bis
die Task wieder einen sysout partner (Bildschirm) hat.
PROC outsubtext (TEXT CONST text, INT CONST from)
- Wirkung: Wie oben, aber ab dem 'from'ten Zeichen bis zum letzten Zeichen
von 'text'.
outtext
PROC outtext (TEXT CONST text, INT CONST from, to)
- Wirkung: Wie outsubtext (text, from, to), jedoch werden für fehlende
Zeichen werden Leerzeichen ausgegeben, so daß auf alle Fälle
to + 1 - from Zeichen ausgegeben werden.
TIMESOUT
OP TIMESOUT (INT CONST times, TEXT CONST text)
- Wirkung: Der Text 'text' wird beginnend an der aktuellen Cursorposition
'times' mal auf dem Bildschirm ausgegeben. Falls die Ausgabe
außerhalb der Grenzen x size, y size liegt, wird sie abgeschnitten.
Falls die Task nicht online ist, wird mit der Ausgabe gewartet bis
die Task wieder einen sysout partner (Bildschirm) hat.
page
PROC page
- Wirkung: Die aktuelle Bildschirmseite wird gelöscht und der Cursor auf die
Position (0,0) gesetzt.
get cursor pos
PROC get cursor pos(INT VAR x, y)
- Wirkung: Liefert in 'x'und 'y' die aktuellen Cursorkoordinaten.
(0,0) ist die linke obere Ecke.
set cursor pos
PROC set cursor pos(INT CONST x, y)
- Wirkung: Setzt den Cursor logisch auf die Koordinaten 'x', 'y'. Der Cursor
wird nur dann wirklich umpositioniert, wenn auch eine Ausgabe
an der neuen Position erfolgt.
Zulässige Werte:
0 <= x <= xsize - 1
0 <= y <= ysize - 1
x,y < 0 ==> x,y := 0
x > xsize ;y > ysize ==> x := xsize; y := ysize -1
show cursor
PROC show cursor (INT CONST x,y)
- Wirkung: Setzt den Cursor an die Position 'x', 'y' und zeigt den Cursor dort
an, auch wenn keine Eingabe erfolgt.
Grenzen: 0 <= x <= xsize - 1
0 <= y <= ysize - 1
cursor on
PROC cursor on
- Wirkung: Der Cursor wird angeschaltet. Falls z.B. irgendein DOS Programm
den Cursor ausgeschaltet hat, kann er mit dieser Prozedur wieder
sichtbar gemacht werden.
- Bemerkung: Funktioniert natürlich nur in Textmodi (siehe 6.7).
cursor off
PROC cursor on
- Wirkung: Der Cursor wird abgeschaltet.
get attribute
PROC get attribute (INT VAR color)
- Wirkung: Liefert in 'color' den eingestellten Attributcode.
set attribute
PROC set attribute (INT CONST color)
- Wirkung: Das Farbattribut für die Bildschirmdarstellung wird auf 'color'
gesetzt. Alle folgenden Ausgaben erscheinen in dieser Farbdarstellung.
- Bemerkung: Bei der Zeichenausgabe auf CGA/EGA/VGA Bildschirmen wird für
jedes Zeichen im darauffolgenden Byte das Farbattribute festgehalten. Die verfügbaren Farben sind Rot, Grün, Blau und daraus
kombinierte.Das Codierungsverfahren ist Folgendes: Das höherwertige Halbbyte legt die Hintergrundfarbe fest, das höchstwertige
Bit gibt an, ob die Darstellung blinkend oder ruhig ist. Das
niederwertige Halbbyte gibt die Schriftfarbe an, das Bit Nummer
3, also das höchstwertige dieses Halbbytes gibt an, ob die Farbe
hell oder matt sein soll. Das Standardattribut ist 0x07 (Hintergrund ruhig schwarz, Vordergrund matt weiß).
Attributbit: 0 Blau
1 Grün Zeichen
2 Rot
3 hell
4 Blau
5 Grün Hintergrund
6 Rot
7 blinkend
- Beispiel: set attibute (0b0111 1100) liefert hellrote Schrift auf ruhigem,
weißem Hintergrund.
display cursor
PROC dsiplay cursor (INT CONST x,y)
- Wirkung: Setzt den Cursor an die Position 'x', 'y' und zeigt den Cursor dort
an, auch wenn keine Eingabe erfolgt.
Grenzen: 0 <= x <= xsize - 1
0 <= y <= ysize - 1
display scroller
PROC display scroller (INT CONST x, y, width, height, lines, code, attr)
- Wirkung: In dem durch die linke obere Ecke ('x','y'), seine Breite 'width'
und seine Höhe 'height' beschriebenen Bildschirmfenster wird der
Fensterinhalt um 'lines' Zeile gescrollt (nach oben oder unten
verschoben). Der durch die Verschiebung freiwerdende Fensterausschnitt wird mit Zeichen 'code' in der Farbdarstellung 'attr'
gefüllt.
Eine negativer Wert für 'lines' bewirkt Verschiebung nach unten,
eine positiver Wert Verschiebung nach oben.
- Beispiel: display scroller
(20, 8, 30, 7, -2, code ("?"),0x7c)
Ab
der Position 20,8 wird ein 30 Zeichen breites und 7 Zeilen hohes
Fenster um 2 Zeilen nach unten Verschoben, der Freiraum wird
mit hellroten Fragezeichen aufgefüllt.
display string
PROC display string (TEXT CONST string)
- Wirkung: Ab der aktuellen Cursorposition wird 'string' in der eingestellten
Farbe ausgegeben.
- Bemerkung: Diese Prozeduren namens »display *« erzeugen eine Ausgabe,
wenn die Task an einem Terminal hängt. Falls dies nicht der Fall
ist, geht die Ausgabe verloren.
Die folgenden Eingabeprozeduren lesen von der Tastatur. Die Eingabequelle kann
jedoch durch die Prozedur sysin umgestellt werden. Falls mit sysin eine Datei
vereinbart wird, so werden die folgenden Eingaben statt von der Tastatur aus dieser
Datei gelesen.
Für die Ausgaben kann mit sysout eine Umleitung vereinbart werden. Die folgenden
Ausgaben werden dann - statt auf das Terminal - in die angegebene Datei geschrieben.
sysin
PROC sysin (TEXT CONST filename)
- Wirkung: Falls 'filename' eine existierende Datei bezeichnet, lesen alle
umlenkbaren Eingaberoutinen aus dieser Datei. Durch sysin("")
wird die Eingabe zurückgestellt.
TEXT PROC sysin
- Wirkung: Liefert den Namen einer eingestellten Sysin-Datei oder niltext, falls
keine Datei eingestellt ist.
get
PROC get (TEXT VAR word, TEXT CONST sep)
- Wirkung: Liest in die Variable 'word' einen Text ein. Die Eingabe wird durch
den Standardseparator 'Zeilenwechsel' (ENTER, ""13"") oder
eines der in 'sep' festgelegten Zeichen beendet. Abschließende
Leerzeichen werden abgeschnitten.
PROC get (TEXT VAR word, INT CONST length)
- Wirkung: Liest in die Variable 'word' einen Text ein. Die Eingabe wird nach
dem 'length'ten Zeichen oder nach der Eingabe von »ENTER«
abgebrochen.
PROC get (TEXT VAR word)
- Wirkung: Liest in die Variable 'word' einen Text ein. Die Eingabe wird durch
»ENTER« oder falls mindestens ein Zeichen eingegeben wurde,
dessen Code > 32 ist - auch durch ein Leerzeichen - beendet.
Führende Leerzeichen werden anschließend abgeschnitten.
PROC get (INT VAR number)
- Wirkung: Wie : TEXT VAR number word;
get (number word);
number := int (number word)
PROC get (DINT VAR dnumber)
- Wirkung: Wie : TEXT VAR number word;
get (number word);
dnumber := dint (number word)
PROC get (INT VAR rnumber)
- Wirkung: Wie : TEXT VAR number word;
get (number word);
rnumber := real (number word)
- Bemerkung: Wenn die Eingabe für obige Prozeduren ungültige Zeichen enthält,
wird die Eingabe bis zur Fehlerstelle ausgewertet und last
conversion ok wird auf FALSE gesetzt. Falls die Eingabe korrekt
abgeschlossen wurde, liefert last conversion 'TRUE'.
getline
PROC getline (TEXT VAR textline)
- Wirkung: Liest in 'textline' einen Text ein. Das Einlesen wird mit der
Eingabe von »ENTER« beendet.
sysout
PROC sysout (TEXT CONST filename)
- Wirkung: Falls 'filename' eine existierende Datei bezeichnet, schreiben alle
umlenkbaren Ausgaberoutinen in diese Datei. Falls 'filename'
<> niltext ist, aber noch nicht existiert, wird eine Datei diese
Namens angelegt und die Ausgaben in diese Datei geschrieben.
Durch sysout("") wird die Ausgabe zurückgestellt.
TEXT PROC sysout
- Wirkung: Liefert den Namen einer eingestellten Sysout-Datei oder niltext,
falls keine Datei eingestellt ist.
line
PROC line (INT CONST lines)
- Wirkung: Es wird um 'lines' Zeilen nach unten auf den Zeilenanfang
positioniert. Dabei wird ggf. gescrollt, der Cursor steht dann auf
der ersten Position der letzten Bildschirmzeile.
PROC line
- Wirkung: Es wird auf den Anfang der nächsten Ausgabezeile positioniert.
put
PROC put (TEXT CONST text)
- Wirkung: Ausgabe von 'text', gefolgt von einem Leerzeichen. Die einzelnen
Ausgaben auf einer Zeile sind also voneinander getrennt. Falls
eine Ausgabe über die Zeilengrenze hinausreichen würde, wird
vorher in die nächste Zeile positioniert.
PROC put (INT CONST number)
- Wirkung: Wie : put (text (number))
PROC put (DINT CONST dnumber)
- Wirkung: Wie : put (text (dnumber))
PROC put (REAL CONST rnumber)
- Wirkung: Wie : put (text (rnumber))
putline
PROC putline (TEXT CONST text)
- Wirkung: Der Inhalt der Variablen 'text' wird ausgegeben. Anschließend
erfolgt ein Zeilenwechsel.
Die Prozedur entspricht also: write (text); line
write
PROC write (TEXT CONST text)
- Wirkung: Der Inhalt der Variablen 'text'wird ausgegeben. Die einzelnen
Ausgaben auf einer Zeile sind nicht voneinander getrennt. Falls
eine Ausgabe über die Zeilengrenze hinausreichen würde, wird
vorher in die nächste Zeile positioniert.
Der Kommandodialog dient zur zentralen Steuerung und einfachen Durchführung
von Dialogen wie
"datei" loeschen (j/n)?
Er wird von allen Systemteilen verwandt, die einen Kommandodialog mit dem Benutzer aufnehmen. Anwenderprozeduren mit ähnlichen Problemen sollten genauso
damit arbeiten.
Der Kommandodialog kann in der Task aus- und eingeschaltet werden.
command dialogue
BOOL PROC command dialogue
- Wirkung: Liefert den aktuellen Zustand des Kommandodialogs:
TRUE - Dialog soll geführt werden!
FALSE - Dialog soll nicht geführt werden!
PROC command dialogue (BOOL CONST status)
- Wirkung: Schaltet den Kommandodialog ein ('status' = TRUE) oder aus
('status' = FALSE). Der alte Zustand wird überschrieben. Soll
später wieder in den alten Zustand zurückgeschaltet werden, muß
er vorher erfragt und gesichert werden.
last param
TEXT PROC last param
- Wirkung: Liefert den zuletzt gesetzten Parameter-Text (siehe folgende
Prozedur). Falls 'command dialogue' = TRUE und die 'param
position' > 0 ist, wird der Parametertext als Standardparameter
an der angegebenen x-Position eine Zeile höher in der Form ("...")
ausgegeben. Diese Prozedur wird von den parameterlosen
Kommandos bzw. Prozeduren wie edit, run usw. verwandt, um
mit dem Standardparameter weiterzuarbeiten.
PROC last param (TEXT CONST new)
- Wirkung: Setzt 'last param' auf 'new'. (Das Setzen muß explizit durchgeführt werden). last param wird beispielsweise von den einparametrigen Prozeduren edit und run gesetzt.
no
BOOL PROC no (TEXT CONST question)
- Wirkung: a) command dialogue -> TRUE
Frage und Antwort wie bei 'yes'. Das Resultat ist
TRUE bei verneinender Antwort (n,N)
FALSE bei bejahender Antwort (j,J,y,Y)
b) command dialogue -> FALSE
Keine Aktion, das Resultat ist FALSE.
param position
PROC param position (INT CONST x)
- Wirkung: Setzt die Echoposition für 'last param'. Bei x=0 wird ein Echo
unterdrückt.
quiet
QUIET PROC quiet
- Wirkung: Unterdrückt die yes/no Abfrage und liefert 'TRUE' für die betreffende Aktion.
- Beispiel: delete (std,
quiet)
die zuletzt bearbeitete Datei wird ohne Dialog gelöscht.
say
PROC say (TEXT CONST message)
- Wirkung: IF command dialogue THEN out (text) FI
std
TEXT PROC std
- Wirkung: Liefert wie 'last param' den zuletzt gesetzten Parameter. Im
Gegensatz dazu wird der Parameter aber nicht ausgegeben.
yes
BOOL PROC yes (TEXT CONST question)
- Wirkung: a) command dialogue -> TRUE
Der übergebene Fragetext wird durch " (j/n)?" ergänzt auf dem
Terminal ausgegeben. Als Antwort wird eine der Tasten <j>,
<J>, <y>, <Y>, <n>, <N> akzeptiert; jede andere Eingabe führt zur Fragewiederholung. Das Resultat der Prozedur ist
TRUE bei bejahender Antwort (j,J,y,Y)
FALSE bei verneinender Antwort (n,N)
b) command dialogue -> FALSE
Keine Aktion, das Resultat ist TRUE.
online
BOOL PROC online
- Wirkung: Liefert 'TRUE', falls die Task an ein Terminal gekoppelt ist.
- Bemerkung: Die Task muß oberstes Element eines Terminalstacks
sein, siehe dazu (9.2) get terminal stack.
BOOL PROC online (TASK CONST taskname)
- Wirkung: Liefert 'TRUE', falls die Task 'taskname' an ein Terminal
gekoppelt ist.
sysin partner
TASK PROC sysin partner
- Wirkung: Liefert den internen Taskbezeichner des aktuell zugeordneten
Tastaturmanagers.
sysout partner
PROC sysout partner
- Wirkung: Liefert den internen Taskbezeichner des aktuell zugeordneten
Bildschirmmanagers.
x size
INT PROC x size
- Wirkung: Liefert die Anzahl der Spalten des zugeordneten Bildschirms.
y size
INT PROC y size
- Wirkung: Liefert die Anzahl der Zeilen des zugeordneten Bildschirms.
copy to screen
PROC copy to screen (INT CONST x, y, attr, TEXT CONST string)
- Wirkung: Der Text 'string' wird an der Bildschirmposition 'x', 'y' in der
Farbe 'attr' ausgegeben. Die Prozedur schreibt direkt in den
Bildschirmspeicher der Task. Es findet keine explizite Überprüfung auf Einhaltung der Bildschirmgrenzen statt. Die Prozedur
fuktioniert nur im Alpha-Modus.
in key
INT PROC in key (INT CONST limit)
- Wirkung: Es wird 'limit' 1/1000 Sekunden gewartet, ob eine Eingabe anliegt.
Falls ja wird diese Eingabe geliefert, falls innerhalb 'limit' keine
Eingabe kam, wird -1 geliefert.
Das unterste Byte enthält den Ascii Code der Taste, das zweitunterste den Scan Code.
Falls die Task nicht angekoppelt ist, (sysin partner = niltask)
wird gewartet, bis die Task wieder angekoppelt ist.
in scan ascii
INT PROC in scan ascii(INT CONST limit)
- Wirkung: Es wird 'limit' 1/1000 Sekunden gewartet, ob eine Eingabe anliegt.
Falls ja wird diese Eingabe geliefert, falls innerhalb 'limit' keine
Eingabe kam, wird -1 geliefert.
Das unterste Byte enthält den Ascii Code der Taste, das zweitunterste den Scan Code.
- Bemerkung: Falls die Task nicht angekoppelt ist, (sysin partner = niltask)
wird -1 geliefert. Falls die Task abgekoppelt wird, während sie auf
Eingabe wartet, wird sofort -1 geliefert.
screen write access
PROC screen write access
- Wirkung: Der Bildschirmmanager erhält die Mitteilung »es wurde
geändert«, der Bildschirminhalt der Task wird ohne die sonst
übliche Analyse von Änderungen ausgegeben.
terminal necessary
PROC terminal necessary (BOOL CONST flag)
- Wirkung: Dem I/O System wird mitgeteilt, ob Ausgaben auf ein Terminal
warten sollen, oder ob ohne Rücksicht auf ein tatsächlich
zugeordnetes Terminal in den Bildschirmspeicher geschrieben
werden soll.
- Bemerkung: Viele »DOS Programme« laufen in der Voreinstellung terminal
necessary (TRUE) nicht ohne Terminal (»im Hintergrund«)
weiter, obwohl nur »unwichtige« Ausgaben, etwa bei einem Suchlauf in einer Datenbank, ausgegeben werden. Durch Einstellung
von terminal necessary (FALSE) kann erreicht werden, daß ein
solches Programm auch nach Abkoppeln weiterläuft.
- ACHTUNG: Bei dieser Einstellung droht busy wait. Viele DOS Programme
warten z.B. in Endlosschleifen auf Eingaben. Wenn mehrere
solcher Programme aktiv sind ist »der Rechner zu«.
BOOL PROC terminal necessary
- Wirkung: Liefert die aktuelle Einstellung. Die Standardeinstellung ist
FALSE.
Die im weiteren beschriebene Behandlung des Bildschirms setzt auf eine »naturgetreue« Nachbildung der PC Hardware auf. Der Bildschirmspeicher ist ein
besonderer Abschnitt des Arbeitsspeichers. Informationen, die in diesen Bereich
geschrieben werden, werden ohne weiteres Zutun auf dem Bildschirm ausgegeben.
Die Ausgabe kann in zwei Modi erfolgen. Im Textmodus wird der Inhalt des
Bildschirmspeichers als Folge von Zeichen und Farbattributen behandelt. Im
Graphikmodus wird der Bildschirmspeicher als zweidimensionales Feld von
Bildpunkten (Pixel) angesehen. Die Darstellung dieser Punkte wird ggf. durch
Schichten von Bildschirmspeicher-Ebenen (Planes) gesteuert. Weitere Details möge
der geneigte Leser der gut und reichlich vorhandenen Literatur entnehmen.
Der Bildschirmspeicher hat also eine Anfangsadresse und eine bestimmte Größe.
Beide Werte sind abhängig von der eingesetzten Hardware, bzw. vom eingestellten
Bildschirmmodus. Desweiteren gehört zu einem Bildschirm noch die Form und
Position des Cursors etc.
SCREEN
TYP SCREEN
- Wirkung: Datentyp Bildschirm. Der Datentyp ist ein BOUND-Typ und muß
mit einem Datenraum verknüpft werden. Ein Objekt vom Type
Bildschirm ist beschrieben durch:
-
Attribute
-
Cursorposition x-Wert, y Wert
-
Cursorform
-
Cursormode
-
Bildschirmmodus
-
Anfangsadresse des Bildschirmspeichers
-
Größe einer Seite im Bildschirmspeicher
-
Größe des Bildschirmspeichers
Bemerkung: Wenn im folgenden Text von »Bildschirm« oder »Bildschirmspeicher« die Rede ist, so sind damit alle diese Informationen
gemeint.
:=
OP := (SCREEN VAR l, SCREEN CONST r)
- Wirkung: Zuweisungsoperator für SCREEN.
screen
SCREEN PROC screen (DATASPACE CONST ds)
- Wirkung: Assoziiert den Datenraum 'ds' mit einer SCREEN. Falls es sich um
einen neuen Datenraum handelt (type (ds) < 0), wird SCREEN
auf alpha 80 initialisiert.
get screen
PROC get screen (SCREEN VAR scr)
- Wirkung: Der aktuelle Inhalt des Bildschirmspeichers wird in 'scr'
gespeichert.
set screen
PROC setscreen (SCREEN CONST scr ds)
- Wirkung: Der in 'scr ds' gespeicherte Bildschirm wird ausgegeben.
print screen
PROC print screen (TEXT CONST sname)
- Wirkung: Der Datenraum 'sname', der den Bildschirmspeicherinhalt
enthält, wird gedruckt.
- Beispiel:
PROC print sc :
DATASPACE VAR ds := nilspace;;
SCREEN VAR s := screen (ds);
TEXT VAR sname := name (myself) + text( (cputime)) ;
get screen (s);
move (ds, sname) ;
print screen (sname);
delete (sname , quiet);
delete (sname + ".screen", quiet);
END PROC print sc;
screen mode
SCREENMODE PROC screen mode (SCREEN CONST screen)
- Wirkung: Liefert die Einstellungen von 'screen'.
get screen page
PROC get screen page (SCREEN CONST scr, INT VAR page base, size)
- Wirkung: Liefert Basisadresse und Seitengröße.
get cursor pos
PROC get cursor pos (SCREEN CONST scr, INT VAR xpos, ypos)
- Wirkung: Liefert Cursorkoordinaten.
get attribute
PROC get attribute (SCREEN CONST scr, INT VAR attr)
- Wirkung: Liefert zuletzt eingestelltes Attribut.
SCREENMODE
TYP SCREENMODE
- Wirkung: Datentyp Bildschirmmodus. Konstanten dieses Typs können die
verschiedenen Bildschirmmodi aufnehmen.
:=
OP := (SCREENMODE VAR l, SCREENMODE CONST r)
- Wirkung: Zuweisungsoperator für SCREENMODE.
=
OP := (SCREENMODE CONST l, r)
- Wirkung: Vergleichsoperator für SCREENMODE.
screenmode
PROC screenmode (SCREENMODE CONST sc mode)
- Wirkung: Versucht den angegebenen Bildschirmmodus zu setzen und
schaltet auf die erste Bildschirmseite. Wird die Prozedur am
Terminal aufgerufen, bleibt der alphanumerische Modus
eingestellt.
- Beispiel:
screenmode(vga)
SCREENMODE PROC screenmode (INT CONST screen width, screen height,
char width, char height, mode, memory base,
memory size, page size)
- Wirkung: Liefert SCREENMODEs.
Folgende SCREENMODE Prozeduren sind definiert:
alpha 80
alpha 40
alpha 80 hr
cga mono
cga colour
ega
vga
mcga
alpha 80 := screenmode : ( 80, 25, 1, 1, 0, 0xb8000, 0x8000, 0x1000)
alpha 40 := screenmode : ( 40, 25, 1, 1, 0, 0xb8000, 0x8000, 0x0800)
cga mono := screenmode : (640, 200, 8, 8, 1, 0xb8000, 0x8000, 0x4000)
cga colour := screenmode : (320, 200, 8, 8, 2, 0xb8000, 0x8000, 0x4000)
ega := screenmode : (640, 350, 8, 14, 4, 0xa0000, 0x10000,0x10000)
vga := screenmode : (640, 480, 8, 16, 4, 0xa0000, 0x10000,0x10000)
mcga := screenmode : (320, 200, 8, 8, 5, 0xa0000, 0x10000,0x10000)
SCREENMODE PROC alpha 80 hr :
INT CONST type := screen hardware;
IF on (type, vga bit)
THEN screenmode : ( 80, 50, 1, 1, 0, 0xb8000, 0x8000, 0x2000)
ELIF on (type, ega bit)
THEN screenmode : ( 80, 43, 1, 1, 0, 0xb8000, 0x8000, 0x2000)
ELSE alpha 80
FI
END PROC alpha 80 hr;
Die einzelnen Werte einer SCREENMODE Konstanten können durch folgende
Prozeduren ausgelesen werden:
char height
INT PROC char height (SCREENMODE CONST sm)
- Wirkung: Liefert die Höhe eines Zeichens im Bildschirmmodus 'sm'. In den
Zeichenmodi ist die Höhe stets 1.
char width
- Wirkung: Liefert die Breite eines Zeichens im Bildschirmmodus 'sm'. In
den Zeichenmodi ist die Höhe stets 1.
memory base
INT PROC memory base (SCREENMODE CONST sm)
- Wirkung: Liefert die Startadresse des Bildschirmspeichers im Modus 'sm'.
memory size
INT PROC memory size (SCREENMODE CONST sm)
- Wirkung: Liefert die Größe des Bildschirmspeichers im Modus 'sm'.
mode
INT PROC mode (SCREENMODE CONST sm)
- Wirkung: Liefert den Typ des Bildschirmspeichers. (siehe auch 13.5).
screen height
INT PROC screen height (SCREENMODE CONST sm)
- Wirkung: Liefert die Höhe des Bildschirmspeichers (= Zeilen im Textmodus, sonst Pixel).
screen width
INT PROC screen width (SCREENMODE CONST sm)
- Wirkung: Liefert die Breite des Bildschirmspeichers (= Spalten im Textmodus, sonst Pixel).
page size
INT PROC page size (SCREENMODE CONST sm)
- Wirkung: Liefert die Größe einer Bildschirmseite.
screen page
PROC screen page (INT CONST page no)
- Wirkung: Wechselt auf die angegebene Bildschirmseite. Die erste Seite hat
die Nummer 0. Falls ein nicht einstellbarer Wert angefordert wird,
wird der nächstmögliche eingestellt.
Next: Intertask Kommunikation
Up: L3 Referenzhandbuch
Previous: Datenräume
Michael Hohmuth
Sun Mar 31 04:49:53 MET DST 1996