Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ display(7) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

stty(1)

ioctl(2)

console(7)

keyboard(7)

termio(7)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026