display(7) (Nur RM400) display(7)
NAME
display - Bildschirmanzeige auf der Systemkonsole
BESCHREIBUNG
Die Systemkonsole besteht (ebenso wie das Terminal des Benutzers) aus
zwei getrennten Komponenten: aus der Tastatur [siehe keyboard(7)] und
dem Bildschirm. Diese Komponenten werden wegen ihrer Komplexität in
zwei getrennten Einträgen abgehandelt.
Die Bildschirmanzeige besteht im Normalfall aus 25 Zeilen zu jeweils
80 Spalten. Die Auswirkungen, die das Schreiben von Zeichen auf die
Konsole oder auf einen ihrer virtuellen Bildschirme (/dev/console oder
/dev/vtxx) hat, hängen von den jeweiligen Zeichen ab. Alle Zeichen,
die nach /dev/console geschrieben werden, werden zunächst durch die
Terminal-Schnittstelle [siehe termio(7)] verarbeitet. So erfolgt bei-
spielsweise vor den nachfolgend beschriebenen Verarbeitungsschritten
die Abbildung von Zeilenendezeichen auf Carriage Return plus Zeilenen-
dezeichen sowie die Erweiterung von Tabulatorzeichen zu Leerzeichen:
x Sofern x nicht eines der folgenden Zeichen ist, wird x ange-
zeigt.
BEL Generiert ein akustisches Signal (hörbarer Ton, keine Modu-
lation).
CR Bewegt den Cursor in Spalte 1 der aktuellen Zeile.
LF, VT Bewegt den Cursor innerhalb der aktuellen Spalte in die
nächste Zeile (führt ein Scrolling durch, wenn Zeile 25 die
aktuelle Zeile ist).
FF Löscht den Bildschirm und bewegt den Cursor in die erste
Spalte der ersten Zeile.
S Die Auswirkung hängt vom zuvor eingegebenen Zeichen ab: bei
einem Unterstrich _ siehe unten; wenn es sich nicht um den
Unterstrich handelt und der Cursor sich nicht in Spalte 1
befindet, wird er innerhalb derselben Zeile um eine Position
nach links bewegt. Wenn der Cursor sich in Spalte 1 (nicht
von Zeile 1) befindet, wird er auf Spalte 79 der vorherge-
henden Zeile positioniert. Wenn der Cursor sich in Spalte 1
von Zeile 1 befindet, bleibt er an seiner Position.
Sx Stellt das Attribut "Unterstrich" für das anzuzeigende Zei-
chen x ein.
ESCx Der Wert x wird unverändert ausgegeben; x ist dabei ein
beliebiger der 256 möglichen Codes mit Ausnahme von c oder
[. Dies hat den Vorteil, daß jedes Zeichen aus dem Grafik-
zeichensatz für die Bildschirmanzeige genutzt werden kann.
Auch hier ist zu beachten, daß die Zeichen durch die
Terminal-Schnittstelle vor dieser Escape-Sequenz verarbeitet
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
display(7) (Nur RM400) display(7)
werden. Daher können einige der 256 möglichen Zeichen nur
angezeigt werden, wenn sie nicht nachverarbeitet werden.
Dies kann am einfachsten erreicht werden, indem OPOST im
Feld coflag [siehe termio(7)] ausgeschaltet wird; auch dies
kann jedoch Nebeneffekte haben.
Die Bildschirmanzeige kann mit Hilfe von ANSI X3.64-Escape-Sequenzen
beeinflußt werden. Hierbei handelt es sich um spezielle Zeichenfolgen,
denen das ASCII-Zeichen ESC vorangestellt ist. Es gibt folgende
Escape-Sequenzen:
ESCc Löscht die Bildschirmanzeige und bewegt den Cursor in
Zeile 1, Spalte 1.
ESCQ n 'string' Belegt die Funktionstaste n mit string. Für string
kann ein beliebiges Begrenzungszeichen festgelegt
werden; das Zeichen darf jedoch nicht in string ent-
halten sein. Den Funktionstasten sind Nummern im
Bereich 0 bis 11 zugeordnet (F1=0, F2=1 usw.)
ESC[ n @ Fügt n Leerzeichen an der aktuellen Cursor-Position
ein.
ESC[ n ` Verschiebt die aktuelle Zeichenposition in die durch
n angegebene Spalte.
ESC[ n A Bewegt den Cursor um n Zeilen nach oben (Standard:
n=1).
ESC[ n a Bewegt die aktuelle Zeichenposition um n Zeichen nach
rechts (Standard: n=1).
ESC[ n B Bewegt den Cursor um n Zeilen nach unten (Standard:
n=1).
ESC[ n C Bewegt den Cursor um n Spalten nach rechts (Standard:
n=1).
ESC[ n c n kann den Wert 0 (Unterstrich als Cursor), 1 (block-
förmiger Cursor), oder 2 (kein Cursor) haben. n hat
standardmäßig den Wert 0.
ESC[ n D Bewegt den Cursor um n Spalten nach links (Standard:
n=1).
ESC[ n d Verschiebt die aktuelle Zeichenposition in die durch
n angegebe Zeile.
ESC[ n E Bewegt den Cursor in Spalte 1 der nächsten Zeile,
dann um n-1 Zeilen nach unten (Standard: n=1).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
display(7) (Nur RM400) display(7)
ESC[ n e Verschiebt die aktuelle Zeichenposition um n Zeilen
nach unten (Standard: n=1).
ESC[ n F Bewegt den Cursor in Spalte 1 der aktuellen Zeile,
dann um n Zeilen nach oben (Standard: n=1).
ESC[ n G Bewegt den Cursor in Spalte n der aktuellen Zeile
(Standard: n=1).
ESC[ n; m H Bewegt den Cursor in Spalte m von Zeile n (Standard:
n=1, m=1).
ESC[ n; m f Bewegt den Cursor in Spalte m von Zeile n (Standard:
n=1, m=1).
ESC[ n J Löscht bei n=0 alle Zeichen zwischen der aktuellen
Cursor-Position und der rechten unteren Ecke des Fen-
sters, bei n=1 vom Beginn des Fensters zur aktuellen
Cursor-Position und bei n=2 das ganze Fenster (Stan-
dard: n=0).
ESC[ n K Löscht bei n=0 alle Zeichen zwischen der aktuellen
Cursor-Position und dem Zeilenende, bei n=1 alle Zei-
chen zwischen dem Zeilenanfang und der aktuellen
Cursor-Position und bei n=2 die ganze Zeile (Stan-
dard: n=0).
ESC[ n L Fügt n Zeilen an der aktuellen Cursor-Position ein
(Standard: n=1).
ESC[ n M Löscht n Zeilen ab der aktuellen Cursor-Position
(Standard: n=1).
ESC[ n P Löscht in einer Zeile n Zeichen ab der aktuellen
Cursor-Position (Standard: n=1).
ESC[ n S Führt im aktuellen Fenster ein Scrolling um n Zeilen
nach oben durch. Die untersten n Zeilen werden
gelöscht und mit Leerzeichen gefüllt (Standard: n=1).
ESC[ n T Führt im aktuellen Fenster ein Scrolling um n Zeilen
nach unten durch. Die obersten n Zeilen werden
gelöscht und mit Leerzeichen gefüllt (Standard: n=1).
ESC[ n X Löscht n Zeichenpositionen ab der aktuellen Cursor-
Position (Standard: n=1).
ESC[ n Z Bewegt die aktuelle Zeichen-Position um n Tabulator-
stopps zurück.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
display(7) (Nur RM400) display(7)
ESC[ 2h Sperrt die Tastatur; bis zur Aufhebung der Sperre
werden die über die Tastatur eingegebenen Zeichen
ignoriert. Die Zeichen werden nicht abgespeichert.
ESC[ 2i Bildschirminhalt an Host-Rechner senden. Die aktuelle
Bildschirmanzeige wird an die Anwendung übermittelt.
ESC[ 2l Tastatursperre aufheben. Die über die Tastatur einge-
gebenen Zeichen werden wieder verarbeitet.
ESC[ Ps ; Ps ; m Zeichen-Attribute - P kann einen der Werte annehmen,
die in der nachfolgenden Tabelle aufgeführt sind.
Wenn zwei oder mehr durch Semikolon voneinander
getrennte Werte angegeben werden, werden an ein und
derselben Zeichenposition zwei oder mehr Zeichenat-
tribute gleichzeitig angezeigt (z. B. fett und
gleichzeitig unterstrichen). (Standard: Ps=0.)
_____________________________________________________
| Ps Bedeutung |
|____________________________________________________|
| 0 Alle Attribute AUS (Normalanzeige) |
| (weiße Zeichen auf schwarzem Grund) |
| 1 Erhöhte Intensität |
| 4 Unterstreichen EIN |
| 7 Inverse Anzeige EIN |
| 8 Leerzeichen (keine Anzeige) |
| 10 Wahl des primären Zeichensatzes |
| 11 Wahl des ersten Alternativ-Zeichensatzes; |
| ASCII-Zeichen mit Codes kleiner 32 werden |
| als ROM-Zeichen angezeigt (nicht imple- |
| mentiert). |
| 12 Wahl eines zweiten Alternativ-Zeichen- |
| satzes; setzt das höchstwertige Bit des |
| erweiterten ASCII-Zeichensatzes, bevor |
| die Zeichen als ROM-Zeichen angezeigt |
| werden. |
|____________________________________________________|
ESC[ Pn d Bewegt den Cursor in die Zeile, die durch Pn angege-
ben wird.
ioctl-Funktionsaufrufe
Mit den folgenden ioctl-Funktionsaufrufen kann die Anzeige für den
betreffenden Bildschirm geändert werden. Wenn der virtuelle Bildschirm
nicht in den Prozeß-Modus (siehe ioctl-Funktion VTSETMODE) geschaltet
worden ist, wird das Umschalten zu einem anderen virtuellen Bildschirm
deaktiviert, wenn der Anzeige-Modus in einen Nicht-Text-Modus umge-
schaltet wird. Erst nachdem der Anzeige-Modus wieder auf einen Text-
Modus zurückgesetzt worden ist, kann wieder zu einem anderen virtuel-
len Bildschirm umgeschaltet werden.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
display(7) (Nur RM400) display(7)
Hinweis: Die nachfolgend aufgeführten ioctl-Funktionsaufrufe werden
entweder auf einen Datei-Deskriptor für die virtuellen Bildschirme
oder auf die Gerätedatei /dev/video ausgeführt. ioctl-Funktions-
aufrufe, die für /dev/video ausgeführt werden, sind mit einem Stern
(*) gekennzeichnet. Damit die ioctl-Funktionsaufrufe für /dev/video
ausgeführt werden können, muß das steuernde tty des Prozesses der vir-
tuelle Bildschirm sein, für den die Operation ausgeführt werden soll.
Wenn tty kein virtueller Bildschirm ist, wird der Rückkehrwert -1 aus-
gegeben und errno auf EINVAL gesetzt.
Wenn ein Anzeigegerät in einen ungültigen Anzeige-Modus umgeschaltet
wird, wird ein Fehler ausgegeben.
KIOCSOUND Tongenerierung. Das Argument ist die gewünschte Fre-
quenz. Mit der Frequenz 0 wird kein Ton erzeugt.
KDGETLED LED-Status der Tastatur abfragen. Das Argument ist ein
Zeiger auf ein Zeichen. Das Zeichen wird mit einer
logischen Verknüpfung der folgenden Werte gefüllt:
LEDSCR 0x01 (Flag-Bit für Scroll Lock)
LEDCAP 0x04 (Flag-Bit für Caps Lock)
LEDNUM 0x02 (Flag-Bit für Num Lock)
KDSETLED LED-Status der Tastatur einstellen. Das Argument ist
ein Zeiger auf ein Zeichen. Das Zeichen wird mit einer
logischen Verknüpfung der unter KDGETLED aufgeführten
Werte gefüllt.
KDMKTONE Ton fester Länge generieren. Das Argument ist ein 32-
Bit-Wert, wobei mit den unteren 16 Bits die Frequenz
und den oberen 16 Bits die Dauer (in Millisekunden)
eingestellt wird.
KDGKBTYPE Tastaturtyp abfragen. Das Argument ist ein Zeiger auf
einen Zeichen-Typ. Das Zeichen wird mit einem der fol-
genden Werte zurückgegeben:
KB84 0x01 (Tastatur mit 84 Tasten)
KB101 0x02 (Tastatur mit 101 Tasten)
KBOTHER 0x03 (Sonstiger Tastaturtyp)
KDSETMODE (*) Konsole in Text- oder Grafikmodus umschalten. Das
Argument ist vom Typ int und sollte einen der folgen-
den Werte enthalten:
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
display(7) (Nur RM400) display(7)
KDTEXT 0x00 (schaltet Konsole in den Text-Modus)
KDGRAPHICS 0x01 (schaltet Konsole in den Grafik-Modus)
Wenn der Modus auf KDGRAPHICS gesetzt und der virtu-
elle Bildschirm sich nicht im Prozeß-Modus (siehe
ioctl-Funktion VTSETMODE) befindet, kann so lange
nicht zu einem anderen virtuellen Bildschirm umge-
schaltet werden, bis der Modus wieder auf KDTEXT,
KDTEXT0 oder KDTEXT1 zurückgesetzt wird.
Hinweis: Die Programmierung der Register auf dem
Farb-/Grafikadapter für den geeigneten Grafikmodus ist
Sache des Benutzers.
KDGETMODE Aktuellen Modus der Konsole abfragen. Gibt ein ganz-
zahliges Argument zurück, das entweder KDTEXT oder
KDGRAPHICS enthält (dies hängt vom ioctl-Funktions-
aufruf KDSETMODE ab).
VTOPENQRY Verfügbaren virtuellen Bildschirm suchen. Das Argument
ist ein Zeiger auf eine Variable vom Typ long. Die
Variable vom Typ long wird mit der Nummer des ersten
verfügbaren virtuellen Bildschirms belegt, der noch
nicht durch einen Prozeß geöffnet worden ist; wenn
kein virtueller Bildschirm verfügbar ist, wird sie mit
dem Zeichen -1 belegt.
VTGETMODE (*) Aktuellen Modus des aktiven virtuellen Bildschirms
ermitteln (entweder VTAUTO oder VTPROCESS). Das
Argument von ioctl ist die Adresse einer Struktur fol-
genden Typs:
struct vtmode
{
char mode; /* Modus des virtuellen Bildschirms */
char waitv; /* Falls gesetzt, warten die Schreib-
anforderungen, wenn der Bildschirm
nicht aktiv ist */
short relsig; /* Signal für Freigabeanforderung */
short acqsig; /* Signal für reservierten Bildschirm */
short frsig; /* Wird auf 0 gesetzt, wenn es nicht
benutzt wird */
};
#define VTAUTO 0x00 /* Automatisches Umschalten zu
anderem virt. Bildschirm */
#define VTPROCESS 0x01 /* Prozeßgesteuertes Umschalten */
Die Struktur vtmode wird mit dem aktuellen Wert für
jedes Feld belegt.
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
display(7) (Nur RM400) display(7)
VTGETSTATE (*) Der ioctl-Funktionsaufruf VTGETSTATE liefert globale
Informationen über den Status des virtuellen Bild-
schirms. Es gibt den aktiven virtuellen Bildschirm im
Feld vactive zurück und die Anzahl der aktiven virtu-
ellen Bildschirme sowie eine Bit-Maske für den globa-
len Status im Feld vtstate. Dabei ist Bit x der Sta-
tus des virtuellen Bildschirms x (1 bedeutet, daß der
virtuelle Bildschirm geöffnet ist).
VTSETMODE (*) Stellt den Modus des virtuellen Bildschirms ein. Das
Argument ist ein Zeiger auf eine vtmode-Struktur
(siehe oben).
VTSENDSIG (*) Der ioctl-Funktionsaufruf VTSENDSIG gibt ein Signal
(in vtsignal) an, das an eine Bit-Maske für virtuelle
Bildschirme (in vtstate) geschickt werden soll.
Die ioctl-Funktionsaufrufe VTGETSTATE und VTSENDSIG
benutzen dabei die folgende Datenstruktur:
struct vtstat
{
ushort vactive; /* Virtueller Bildschirm aktiv */
ushort vsignal; /* Zu übermittelndes Signal
(VTSENDSIG) */
ushort vstate; /* Bit-Maske des virt. Bildschirms
(VTSENDSIG und VTGETSTATE) */
};
Diese Datenstruktur ist in /usr/include/sys/vt.h defi-
niert.
VTRELDISP (*) Hiermit wird die Fensterverwaltung für virtuelle Bild-
schirme darüber informiert, ob die Bildschirmanzeige
durch den Prozeß freigegeben worden ist oder nicht.
Ein Argument ungleich Null bedeutet, daß die Bild-
schirmanzeige freigegeben worden ist; das Argument
Null bedeutet, daß die Bildschirmanzeige nicht freige-
geben wird.
VTACTIVATE Macht den virtuellen Bildschirm mit der im Argument
angegebenen Nummer zum aktiven virtuellen Bildschirm.
Die Fensterverwaltung für virtuelle Bildschirme
bewirkt das Umschalten zu einem anderen virtuellen
Bildschirm, als wäre auf der Tastatur ein Hotkey
gedrückt worden. Wenn der angegebene virtuelle Bild-
schirm nicht geöffnet oder überhaupt nicht vorhanden
ist, wird der Funktionsaufruf abgebrochen; errno wird
dann auf ENXIO gesetzt.
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
display(7) (Nur RM400) display(7)
KIOCINFO Dieser Funktionsaufruf informiert den Benutzer über
den Typ des Geräts.
GIOSCRNMAP (*) Dieser Funktionsaufruf fragt die Bildschirm-Zuord-
nungstabelle aus dem Systemkern ab.
GIOATTR Dieser Funktionsaufruf gibt das aktuelle Bildschirmat-
tribut zurück. Die Bits werden folgendermaßen inter-
pretiert:
Über Bit 0 wird das Unterstreichen für Schwarz-/Weiß-
Bildschirme eingestellt (1 = Unterstreichen EIN).
Über die Bits 0-2 wird die Vordergrundfarbe einge-
stellt (nur Farbbildschirme). Die folgende Liste zeigt
die Farben, die durch die verschiedenen Werte einge-
stellt werden:
Der Wert 0 wählt die Farbe Schwarz.
Der Wert 1 wählt die Farbe Rot.
Der Wert 2 wählt die Farbe Grün.
Der Wert 4 wählt die Farbe Blau.
Der Wert 5 wählt die Farbe Magenta.
Der Wert 6 wählt die Farbe Zyanblau.
Der Wert 7 wählt die Farbe Weiß.
Bit 3 ist das Intensitäts-Bit (1 = Erhöhte Intensität
EIN).
Über die Bits 4-6 wird die Hintergrundfarbe einge-
stellt (nur Farbbildschirme). Die Farben, die über die
verschiedenen Werte eingestellt werden, entnehmen Sie
bitte der obenstehenden Liste.
Bit 7 ist das Blink-Bit (1 = Blinken EIN).
GIOCOLOR (*) Dieser Funktionsaufruf gibt einen Wert ungleich Null
aus, wenn aktuell mit einer Farbanzeige gearbeitet
wird, andernfalls den Wert Null.
PIOSCRNMAP Dieser Funktionsaufruf stellt die Bildschirm-Zuord-
nungstabelle im Systemkern ein.
Die Bildschirm-Zuordnungstabelle bildet die Zeichen
des erweiterten (8-Bit-)ASCII-Zeichensatzes auf ROM-
Zeichen um. Diese Tabelle ist ein Array aus [256] Zei-
chen vom Typ char (typedef scrnmapt); der Zugriff auf
die Elemente in der Tabelle erfolgt über die Werte,
die den Codes im erweiterten ASCII-Zeichensatz
zugeordnet sind. Der jeweilige Wert der Elemente
innerhalb des Arrays entspricht dem anzuzeigenden
ROM-Zeichen.
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98
display(7) (Nur RM400) display(7)
So wird mit dem folgenden Programm-Code erreicht, daß
das ASCII-Zeichen "#" als das britische Währungssymbol
angezeigt wird.
#include <sys/console.h>
changepound()
{
scrnmapt scrntab;
/* Bildschirm-Zuordnungstablle der Standardausgabe
abrufen */
if (ioctl(0,GIOSCRNMAP, scrntab)==-1)
{
perror("screenmap read");
exit(-1);
}
/* 163 ist der ROM-Wert des britischen Währungssymbols
und 35 ist der ASCII-Wert für das Zeichen '#'. */
scrntab[35] = 163;
if (ioctl(0, PIOSCRNMAP, scrntab) == -1)
{
perror("screenmap write");
exit(-1);
}
}
HINWEISE
Obwohl das Schreiben von Zeichenfolgen möglich ist, durch die in jedem
der drei Grafik-Modi beliebige Bits für die Bildschirmanzeige einge-
stellt werden können, wird diese Betriebsart aktuell nicht unter-
stützt.
DATEIEN
/dev/console
/dev/vt00-n
/dev/video
/usr/include/sys/kd.h
SIEHE AUCH
stty(1), ioctl(2), console(7), keyboard(7), termio(7).
Seite 9 Reliant UNIX 5.44 Gedruckt 11/98