ttcompat(7) ttcompat(7)
NAME
ttcompat - Zu V7, 4BSD und XENIX kompatible STREAMS-Module
SYNTAX
#include <sys/stream.h>
#include <sys/stropt.h>
#include <sys/ttcompat.h>
#include <sys/ttold.h>
ioctl(fd, IPUSH, "ttcompat");
BESCHREIBUNG
Das STREAMS-Modul ttcompat setzt ioctl-Funktionsaufrufe, die durch die
älteren Version 7-, 4BSD- und XENIX-Terminal-Treiber unterstützt wur-
den, in ioctl-Funktionsaufrufe um, die von der termio-Schnittstelle
unterstützt werden [siehe termio(7)]. Alle anderen Meldungen passieren
dieses Modul ohne jegliche Änderung; das Verhalten der Funktionsauf-
rufe read und write wird nicht verändert, ebenso wie die ioctl-Funk-
tionsaufrufe, die nicht von ttcompat unterstützt werden.
Dieses Modul kann automatisch beim Öffnen eines Terminal-Geräts mit
dem autopush-Mechanismus in einen Zeichenstrom gesetzt werden; es muß
nicht explizit in einen Zeichenstrom gesetzt werden. Voraussetzung für
die Benutzung dieses Moduls ist, daß diese Module die termios-Schnitt-
stelle unterstützen und die Anwendung den Treiber auf der Schreibseite
(downstream) einhängen kann. Die ioctl-Funktionsaufrufe TCGETS, TCSETS
und TCSETSF müssen unterstützt werden; wenn Informationen, die durch
diese ioctl-Funktionsaufrufe ausgegeben oder abgerufen werden, durch
die Module und den Treiber auf der Schreibseite nicht unterstützt wer-
den, kann es vorkommen, daß einige der V7/4BSD/XENIX-Funktionen nicht
unterstützt werden. So werden beispielsweise die Funktionen der Felder
sgispeed and sgospeed in der Struktur sgttyb (siehe unten) nicht
unterstützt, wenn die CBAUD-Bits im Feld ccflag nicht unterstützt
werden. Wenn der ioctl-Funktionsaufruf TCFLSH nicht unterstützt wird,
wird auch der ioctl-Funktionsaufruf TIOCFLUSH nicht unterstützt. Wenn
der ioctl-Funktionsaufruf TCXONC nicht unterstützt wird, werden auch
die ioctl-Funktionsaufrufe TIOCSTOP und TIOCSTART nicht unterstützt.
Wenn die ioctl-Funktionsaufrufe TIOCMBIS und TIOCMBIC nicht unter-
stützt werden, werden auch die ioctl-Funktionsaufrufe TIOCSDTR und
TIOCCDTR nicht unterstützt.
Die grundlegenden ioctl-Funktionsaufrufe verwenden die Struktur
sgttyb, die in <sys/ioctl.h> definiert ist:
struct sgttyb
{
char sgispeed;
char sgospeed;
char sgerase;
char sgkill;
int sgflags;
};
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
ttcompat(7) ttcompat(7)
In den Feldern sgispeed und sgospeed wird die Ein-/Ausgabegeschwin-
digkeit des Geräts definiert; außerdem sind hier die Werte des Felds
ccflag in der Struktur termios enthalten. In den Feldern sgerase und
sgkill der Argumentstruktur wird das Erase- bzw. Kill-Zeichen angege-
ben; außerdem sind hier die Werte der Elemente VERASE und VKILL ent-
halten, die im Feld ccc der termios-Struktur gespeichert sind.
Das Feld sgflags der Argumentstruktur enthält eine Reihe von Flags,
über die der Umgang des Systems mit dem Terminal festgelegt wird.
Diese Flags werden auf Flags in Feldern des Terminal-Status abgebil-
det, der in der termios-Struktur festgelegt ist.
Die Verzögerung vom Typ 0 wird auf jeden Fall auf den entsprechenden
Verzögerungs-Typ 0 im Feld coflag der termios-Struktur abgebildet.
Andere Verzögerungs-Typen werden folgendermaßen abgebildet:
sgflags coflag
BS1 BS1
FF1 VT1
CR1 CR2
CR2 CR3
CR3 Nicht unterstützt
TAB1 TAB1
TAB2 TAB2
XTABS TAB3
NL1 ONLRET|CR1
NL2 NL1
Wenn nicht zuvor mit dem ioctl-Funktionsaufruf TIOCLSET oder TIOCLBIS
der Modus LITOUT bzw. PASS8 gewählt worden ist und nicht der Modus RAW
gewählt wurde, wird das Flag ISTRIP im Feld ciflag der termios-Struk-
tur gesetzt, und die Flags EVENP und ODDP steuern die Parität der an
das Terminal übermittelten bzw. der vom Terminal empfangenen Zeichen:
- Es findet weder eine Paritätserzeugung bei der Ausgabe noch eine
Paritätsüberprüfung bei der Eingabe statt; die Zeichengröße wird
auf CS8 gesetzt, und das Flag im Feld ccflag der termios-Struktur
wird gelöscht.
- Zeichen mit gerader Parität müssen bei der Ausgabe erzeugt und bei
der Eingabe akzeptiert werden; das Flag im Feld ciflag der
termios-Struktur wird gesetzt, die Zeichengröße wird auf CS7
gesetzt, und das Flag im Feld ccflag der termios-Struktur wird
gesetzt.
- Zeichen mit ungerader Parität müssen auf der Ausgabe erzeugt und
bei der Eingabe akzeptiert werden; das Flag wird im Feld ciflag
gesetzt, die Zeichengröße wird auf CS7 gesetzt, und die Flags wer-
den im Feld ccflag der termios-Struktur gesetzt.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
ttcompat(7) ttcompat(7)
- Bei der Ausgabe müssen Zeichen mit gerader Parität generiert wer-
den; bei der Eingabe müssen sowohl Zeichen mit gerader als auch
Zeichen mit ungerader Parität akzeptiert werden; das Flag wird im
Feld ciflag gelöscht, die Zeichuengröße wird auf CS7 gesetzt, und
das Flag wird im Feld ccflag der termios-Struktur gesetzt.
Das Flag RAW deaktiviert sämtliche Verarbeitung der Ausgabe (dafür
werden das Flag OPOST im Feld coflag sowie das Flag XCASE im Feld
clflag in der termios-Struktur gelöscht); auch die Verarbeitung der
Eingabe wird durch dieses Flag deaktiviert (im Feld ciflag der
termios-Struktur werden alle Flags mit Ausnahme von IXOFF und IXANY
gelöscht). 8-Bit-Daten ohne Paritätsbit werden bei der Eingabe akzep-
tiert und bei der Ausgabe generiert; die Zeichengröße wird auf CS8
eingestellt, und die Flags PARENB und PARODD im Feld ccflag der
termios-Struktur werden gelöscht. Die Steuerzeichen zum Signalgenerie-
ren und Zeileneditieren werden deaktiviert, indem die Flags ISIG und
ICANON im Feld clflag der termios-Struktur gelöscht werden.
Das Flag CRMOD wandelt RETURN auf der Eingabe in NEWLINE-Zeichen um
und wandelt aus- und wiedergegebene NEWLINE-Zeichen auf der Ausgabe in
RETURN in Kombination mit LINEFEED um. Das Flag ICRNL im Feld ciflag
sowie die Flags OPOST und ONLCR im Feld coflag der termios-Struktur
werden gesetzt.
Das Flag LCASE bildet Großbuchstaben des ASCII-Zeichensatzes auf der
Eingabe in die entsprechenden Kleinbuchstaben um (das Flag IUCLC wird
im Feld ciflag gesetzt); außerdem werden Kleinbuchstaben des ASCII-
Zeichensatzes auf der Ausgabe in die entsprechenden Kleinbuchstaben
umgewandelt (das Flag OLCUC im Feld coflag wird gesetzt). Escape-
Sequenzen werden auf der Eingabe akzeptiert und auf der Ausgabe gene-
riert; damit können bestimmte ASCII-Zeichen benutzt werden, die von
älteren Terminals nicht unterstützt werden (das Flag XCASE wird im
Feld clflag gesetzt).
Andere Flags werden direkt auf Flags in der termios-Struktur abgebil-
det:
sgflags Flags in der termios-Struktur.
CBREAK Gegenstück zu ICANON im Feld clflag
ECHO ECHO im Feld clflag
TANDEM IXOFF im Feld ciflag
In einer weiteren Struktur, die jedem Terminal zugeordnet ist, werden
Zeichen angegeben, die auf die älteren Terminal-Schnittstellen von
Version 7 und die neueren 4BSD-Terminalschnittstellen zugeschnitten
sind. Diese Struktur wird in <sys/ioctl.h> definiert:
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
ttcompat(7) ttcompat(7)
struct tchars
{
char tintrc; /* Unterbrechung */
char tquitc; /* Ende */
char tstartc; /* Beginn der Ausgabe */
char tstopc; /* Ende der Ausgabe */
char teofc; /* Dateiende */
char tbrkc; /* Begrenzungszeichen für die Eingabe (wie nl) */
};
XENIX definiert die tchar-Struktur als tc. Die Zeichen werden folgen-
dermaßen auf Elemente im Feld ccc der termios-Struktur abgebildet:
tchars ccc Index
tintrc VINTR
tquitc VQUIT
tstartc VSTART
tstopc VSTOP
teofc VEOF
tbrkc VEOL
Zusätzlich ist jedem Terminal ein lokales Flag zugeordnet; dieses Flag
gibt die durch die neue 4BSD-Terminal-Schnittstelle definierten Flags
an. Die meisten dieser Flags werden direkt auf Flags in der termios-
Struktur abgebildet:
Lokale Flags Flags in der termios-Struktur
LCRTBS Nicht unterstützt
LPRTERA ECHOPRT im Feld clflag
LCRTERA ECHOE im Feld clflag
LTILDE Nicht unterstützt
LTOSTOP TOSTOP im Feld clflag
LFLUSHO FLUSHO im Feld clflag
LNOHANG CLOCAL im Feld ccflag
LCRTKIL ECHOKE im Feld clflag
LCTLECH CTLECH im Feld clflag
LPENDIN PENDIN im Feld clflag
LDECCTQ Äquivalent zu IXANY im Feld ciflag
LNOFLSH NOFLSH im Feld clflag
Außerdem ist jedem Terminal die ltchars-Struktur zugeordnet, die die
Steuerzeichen für die neue 4BSD-Terminalschnittstelle definiert. Diese
Struktur ist folgendermaßen aufgebaut:
struct ltchars
{
char tsuspc; /* Prozeß-Abbruchsignal */
char tdsuspc; /* Signal für verzögerten Prozeßabbruch */
char trprntc; /* Zeile erneut ausgeben */
char tflushc; /* Ausgabe löschen (EIN/AUS) */
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
ttcompat(7) ttcompat(7)
char twerasc; /* Wort löschen */
char tlnextc; /* Nächstes Zeichen als Literal */
};
Die Zeichen werden folgendermaßen auf Elemente im Feld ccc der
termios-Struktur abgebildet:
ltchars ccc Index
tsuspc VSUSP
tdsuspc VDSUSP
trprntc VREPRINT
tflushc VDISCARD
twerasc VWERASE
tlnextc VLNEXT
IOCTL-FUNKTIONEN
Nachfolgend sind die von ttcompat verarbeiteten ioctl-Funktionsaufrufe
aufgeführt. Die übrigen Funktionsaufrufe werden an das nächste
STREAMS-Modul weitergeleitet.
TIOCGETP Das Argument ist ein Zeiger auf eine sgttyb-Struktur.
Der aktuelle Terminal-Status wird abgefragt; in die-
ser Struktur werden die aus dem Terminal-Status benö-
tigten Zeichen (z. B. die Ein- und Ausgabegeschwin-
digkeit) abgespeichert. Die Werte der Flags im Feld
sgflags werden aus den Flags im Terminal-Status
abgeleitet und in der Struktur abgespeichert.
TIOCEXCL "Exklusivzugriffs"-Modus aktivieren; bis zum Schlie-
ßen der Datei sind keine weiteren open-Systemaufrufe
mehr möglich.
TIOCNXCL "Exklusivzugriffs"-Modus deaktivieren.
TIOCSETP Das Argument ist ein Zeiger auf eine sgttyb-Struktur.
In dieser Struktur werden die entsprechenden Zeichen
ebenso wie die Ein- und Ausgabegeschwindigkeit inner-
halb des Terminal-Status so eingestellt, daß sie zu
den Flags im Feld sgflags dieser Struktur passen.
Zur Änderung des Status wird die ioctl-Funktion
TCSETSF aufgerufen. Dieser Funktionsaufruf bewirkt,
daß die Schnittstelle mit dem Ändern der Modi so
lange wartet, bis keine Ausgabe mehr erfolgt; alle
Zeichen, die dann eingelesen worden sind, werden
gelöscht.
TIOCSETN Das Argument ist ein Zeiger auf eine sgttyb-Struktur.
Der Terminal-Status wird wie durch TIOCSETP geändert;
allerdings sorgt gleichzeitig der ioctl-Funktionsauf-
ruf TCSETS dafür, daß die Schnittstelle weder eine
Verzögerung einbaut noch Eingabezeichen löscht.
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
ttcompat(7) ttcompat(7)
TIOCHPCL Das Argument wird ignoriert. Das Flag HUPCL wird im
Feld ccflag des Terminal-Status gesetzt.
TIOCFLUSH Das Argument ist ein Zeiger auf eine Variable vom Typ
int. Wenn der Wert dieser Variablen Null ist, werden
sämtliche Ein- und Ausgabewarteschlangen gelöscht.
Andernfalls wird der Wert der int-Variablen als logi-
sche ODER-Verknüpfung der Flags FREAD und FWRITE
betrachtet, die in <sys/file.h> definiert werden.
Wenn das FREAD-Bit gesetzt ist, werden sämtliche Ein-
gabewarteschlangen geleert; wenn das FWRITE-Bit
gesetzt ist, werden alle Ausgabewarteschlangen
geleert.
TIOCBRK Das Argument wird ignoriert. Für das Gerät wird das
Halte-Bit gesetzt.
TIOCCBRK Das Argument wird ignoriert. Für das Gerät wird das
Halte-Bit zurückgesetzt.
TIOCSDTR Das Argument wird ignoriert. Für das Gerät wird das
DTR- (Data Terminal Ready-)Bit gesetzt.
TIOCCDTR Das Argument wird ignoriert. Für das Gerät wird das
DTR-Bit zurückgesetzt.
TIOCSTOP Das Argument wird ignoriert. Die Ausgabe wird unter-
brochen, als wäre das STOP-Zeichen eingegeben worden.
TIOCSTART Das Argument wird ignoriert. Die Ausgabe wird fortge-
setzt, als wäre das START-Zeichen eingegeben worden.
TIOCGETC Das Argument ist ein Zeiger auf eine tchars-Struktur.
Der aktuelle Terminal-Status wird abgefragt, und die
entsprechenden Zeichen aus dem Terminal-Status werden
in dieser Struktur gespeichert.
TIOCSETC Das Argument ist ein Zeiger auf eine tchars-Struktur.
Die Werte der entsprechenden Zeichen im Terminal-
Status werden aufgrund der Zeichen in dieser Struktur
eingestellt.
TIOCLGET Das Argument ist ein Zeiger auf eine Variable vom Typ
int. Der aktuelle Terminal-Status wird abgefragt, und
die Werte der lokalen Flags werden aus den lokalen
Flags im Terminal-Status abgeleitet und in der int-
Variablen abgespeichert, auf die das Argument zeigt.
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
ttcompat(7) ttcompat(7)
TIOCLBIS Das Argument ist ein Zeiger auf eine Variable vom Typ
int. Der Wert dieser Variablen ist eine Maske aus
Flags, die im lokalen Flag-Wort gesetzt werden sol-
len. Der aktuelle Terminal-Status wird abgefragt, und
die Werte der lokalen Flag-Wörter werden aus den
Flags im Terminal-Status abgeleitet; die betreffenden
Flags werden gesetzt, und die Flags im Terminal-
Status werden so gesetzt, daß sie zum neuen Wert des
lokalen Flag-Worts passen.
TIOCLBIC Das Argument ist ein Zeiger auf eine Variable vom Typ
int. Diese Variable enthält eine Maske mit Flags, die
im lokalen Flag-Wort zurückgesetzt werden sollen. Der
aktuelle Terminal-Status wird abgefragt, und die
Werte der lokalen Flags werden aus den Flags im
Terminal-Status abgeleitet; die betreffenden Flags
werden gesetzt, und die Flags im Terminal-Status wer-
den so gesetzt, daß sie zum neuen Wert des lokalen
Flag-Worts passen.
TIOCLSET Das Argument ist ein Zeiger auf eine Variable vom Typ
int. Diese Variable enthält einen neuen Satz lokaler
Flags. Die Flags im Terminal-Status werden so einge-
stellt, daß sie zum neuen Wert des lokalen Flag-Worts
passen.
TIOCGLTC Das Argument ist ein Zeiger auf eine ltchars-Struk-
tur. In dieser Struktur werden die Werte der entspre-
chenden Zeichen im Terminal-Status abgespeichert.
TIOCSLTC Das Argument ist ein Zeiger auf eine ltchars-Struk-
tur. Aufgrund der Werte in dieser Struktur werden die
Werte der entsprechenden Zeichen im Terminal-Status
eingestellt.
FIORDCHK FIORDCHK gibt die Anzahl der sofort lesbaren Zeichen
aus. Das Argument wird ignoriert.
FIONREAD FIONREAD gibt die Anzahl der sofort lesbaren Zeichen
aus, die in der Variablen vom Typ int abgelegt sind,
auf die das Argument zeigt.
LDSMAP Ruft die Funktion emsetmap(tp, mp) auf, falls sie in
den Systemkern konfiguriert ist.
LDGMAP Ruft die Funktion emgetmap(tp, mp) auf, falls sie in
den Systemkern konfiguriert ist.
LDNMAP Ruft die Funktion emunmap(tp, mp) auf, falls sie in
den Systemkern konfiguriert ist.
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
ttcompat(7) ttcompat(7)
Für die folgenden ioctl-Funktionsaufrufe wird aus Gründen der Kompati-
blität die erfolgreiche Ausführung gemeldet. Allerdings haben diese
Funktionsaufrufe keine weiteren Auswirkungen (d. h. der Terminal-
Status bleibt vollkommen unverändert).
TIOCSETD LDOPEN
TIOCGETD LDCLOSE
DIOCSETP LDCHG
DIOCSETP LDSETT
DIIOGETP LDGETT
HINWEISE
TIOCBRK und TIOCCBRK sollten durch den Treiber verarbeitet werden.
FIONREAD und FIORDCHK werden im Kopf des Datenstroms verarbeitet.
SIEHE AUCH
ioctl(2), termios(3C), ldterm(7), termio(7).
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98