next up previous contents index
Next: Intertask Kommunikation Up: L3 Referenzhandbuch Previous: Datenräume

Ein-/Ausgabe auf dem Bildschirm

Einführung

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.

tabular4748

tabular4763

tabular4768

tabular4773

tabular4778

tabular4784

Elementare Ein-/Ausgabe

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.

Umleitbare Prozeduren

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.

Kommandodialog

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.

Einstellungen

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.

Sonstige

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.

Grafik

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.

tabular5527

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:

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 up previous contents index
Next: Intertask Kommunikation Up: L3 Referenzhandbuch Previous: Datenräume

Michael Hohmuth
Sun Mar 31 04:49:53 MET DST 1996