Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ttcompat(7) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ioctl(2)

termios(3C)

ldterm(7)

termio(7)

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

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