Annotation of 43BSDReno/share/man/man4/tty.4, revision 1.1.1.1

1.1       root        1: .\" Copyright (c) 1983 Regents of the University of California.
                      2: .\" All rights reserved.  The Berkeley software License Agreement
                      3: .\" specifies the terms and conditions for redistribution.
                      4: .\"
                      5: .\"    @(#)tty.4       6.8 (Berkeley) 2/24/89
                      6: .\"
                      7: .TH TTY 4 "February 24, 1989"
                      8: .UC 4
                      9: .SH NAME
                     10: tty \- general terminal interface
                     11: .SH SYNOPSIS
                     12: .B #include <sgtty.h>
                     13: .SH DESCRIPTION
                     14: This section describes
                     15: both a particular special file
                     16: .B /dev/tty
                     17: and the terminal drivers used for conversational computing.
                     18: .LP
                     19: .B Line disciplines.
                     20: .PP
                     21: The system provides different
                     22: .I "line disciplines"
                     23: for controlling communications lines.
                     24: In this version of the system there are two disciplines available for use
                     25: with terminals:
                     26: .IP "old" 8
                     27: The old (Version 7) terminal driver.  This is sometimes used when using the
                     28: standard shell
                     29: .IR sh (1).
                     30: .IP "new"
                     31: The standard Berkeley terminal driver, with features for job control;
                     32: this must be used when using
                     33: .IR csh (1).
                     34: .LP
                     35: Line discipline switching is accomplished with the TIOCSETD 
                     36: .IR ioctl :
                     37: .IP
                     38: .B "int ldisc = LDISC;"
                     39: .br
                     40: .B "ioctl(f, TIOCSETD, &ldisc);"
                     41: .LP
                     42: where LDISC is OTTYDISC for the standard tty driver
                     43: and NTTYDISC for the ``new'' driver.
                     44: The standard (currently old) tty driver is discipline 0 by convention.
                     45: Other disciplines may exist for special purposes, such as use of communications
                     46: lines for network connections.
                     47: The current line discipline can be obtained with the TIOCGETD
                     48: .IR ioctl .
                     49: Pending input is discarded when the line discipline is changed.
                     50: .PP
                     51: All of the low-speed asynchronous
                     52: communications ports can use any
                     53: of the available line disciplines, no matter what
                     54: hardware is involved.
                     55: The remainder of this section discusses the
                     56: \*(lqold\*(rq and \*(lqnew\*(rq disciplines.
                     57: .LP
                     58: .B "The control terminal."
                     59: .LP
                     60: When a terminal file is opened, it causes the process to wait until a
                     61: connection is established.  In practice, user programs seldom open
                     62: these files; they are opened by
                     63: .IR getty (8)
                     64: or
                     65: .IR rlogind (8C)
                     66: and become a user's standard input and output file.
                     67: .PP
                     68: If a process which has no control terminal opens a terminal file, then
                     69: that terminal file becomes the control terminal for that process.
                     70: The control terminal is thereafter inherited by a child process during a
                     71: .IR fork (2),
                     72: even if the control terminal is closed.
                     73: .LP
                     74: The file
                     75: .B /dev/tty
                     76: is, in each process, a synonym for a
                     77: .I "control terminal"
                     78: associated with that process.  It is useful for programs that wish to
                     79: be sure of writing messages on the terminal
                     80: no matter how output has been redirected.
                     81: It can also be used for programs that demand a file name
                     82: for output, when typed output is desired
                     83: and it is tiresome to find out which terminal
                     84: is currently in use.
                     85: .LP
                     86: A process can remove the association it has with its controlling
                     87: terminal by opening the file
                     88: .B /dev/tty
                     89: and issuing an
                     90: .IP
                     91: .B "ioctl(f, TIOCNOTTY, 0);"
                     92: .LP
                     93: This is often desirable in server processes.
                     94: .LP
                     95: .B "Process groups."
                     96: .LP
                     97: Command processors such as
                     98: .IR csh (1)
                     99: can arbitrate the terminal between different
                    100: .I jobs
                    101: by placing related jobs in a single process group and associating this
                    102: process group with the terminal.  A terminal's associated process group
                    103: may be set using the TIOCSPGRP
                    104: .IR ioctl (2):
                    105: .IP
                    106: .B "ioctl(fildes, TIOCSPGRP, &pgrp);"
                    107: .LP
                    108: or examined using TIOCGPGRP, which returns the current
                    109: process group in
                    110: .IR pgrp .
                    111: The new terminal driver aids in this arbitration by restricting access
                    112: to the terminal by processes which are not in the current process group;
                    113: see
                    114: .B "Job access control"
                    115: below.
                    116: .LP
                    117: .B "Modes."
                    118: .PP
                    119: The terminal drivers have three major modes, characterized by the
                    120: amount of processing on the input and output characters:
                    121: .IP cooked 10
                    122: The normal mode.  In this mode lines of input are collected and input editing
                    123: is done.  The edited line is made available when it is completed by
                    124: a newline,
                    125: or when the \fIt_brkc\fP character (normally undefined)
                    126: or \fIt_eofc\fP character (normally an EOT, control-D, hereafter ^D)
                    127: is entered.
                    128: A carriage return is usually made synonymous with newline in this mode,
                    129: and replaced with a newline whenever it is typed.
                    130: All driver functions
                    131: (input editing, interrupt generation,
                    132: output processing such as delay generation and tab expansion, etc.)
                    133: are available in this mode.
                    134: .IP CBREAK 10
                    135: This mode eliminates the character, word, and line editing input facilities,
                    136: making the input character available to the user program as it is typed.
                    137: Flow control, literal-next and interrupt processing are still done in this mode.
                    138: Output processing is done.
                    139: .IP RAW 10
                    140: This mode eliminates all input processing and makes all input characters
                    141: available as they are typed; no output processing is done either.
                    142: .PP
                    143: The style of input processing can also be very different when
                    144: the terminal is put in non-blocking I/O mode; see
                    145: the FNDELAY flag described in
                    146: .IR fcntl (2).
                    147: In this case a
                    148: .IR read (2)
                    149: from the control terminal will never block, but rather
                    150: return an error indication (EWOULDBLOCK) if there is no
                    151: input available.
                    152: .PP
                    153: A process may also request that a SIGIO signal be sent it whenever input
                    154: is present and also whenever output queues fall below the low-water mark.
                    155: To enable this mode the FASYNC flag should be set using
                    156: .IR fcntl (2).
                    157: .LP
                    158: .B "Input editing."
                    159: .LP
                    160: A UNIX terminal ordinarily operates in full-duplex mode.
                    161: Characters may be typed at any time,
                    162: even while output is occurring, and are only lost when the
                    163: system's character input buffers become completely
                    164: choked, which is rare,
                    165: or when the user has accumulated the maximum allowed number of
                    166: input characters that have not yet been read by some program.
                    167: Currently this limit is 256 characters.
                    168: In RAW mode, the terminal driver
                    169: throws away all input and output without notice when the limit is reached.
                    170: In CBREAK or cooked mode it refuses to accept any further input and,
                    171: if in the new line discipline, rings the terminal bell.
                    172: .PP
                    173: Input characters are normally accepted in either even or odd parity
                    174: with the parity bit being stripped off before the character is given to
                    175: the program.  By clearing either the EVEN or ODD bit in the flags word
                    176: it is possible to have input characters with that parity discarded (see the
                    177: \fBSummary\fR below.)
                    178: .PP
                    179: In all of the line disciplines, it is possible to simulate terminal
                    180: input using the TIOCSTI
                    181: .IR ioctl ,
                    182: which takes, as its third argument,
                    183: the address of a character.  The system pretends that this character
                    184: was typed on the argument terminal, which must be the control terminal except
                    185: for the super-user (this call is not in standard version 7 UNIX).
                    186: .PP
                    187: Input characters are normally echoed by putting them in an output queue
                    188: as they arrive.  This may be disabled by clearing the ECHO bit in the
                    189: flags word using the
                    190: .IR stty (3C)
                    191: call or the TIOCSETN or TIOCSETP
                    192: .IR ioctl s
                    193: (see the \fBSummary\fR below).
                    194: .PP
                    195: In cooked mode, terminal input is processed in units of lines.
                    196: A program attempting
                    197: to read will normally be suspended until an entire line has been
                    198: received
                    199: (but see the description of SIGTTIN in \fBJob access control\fR
                    200: and of FIONREAD in
                    201: \fBSummary\fR, both below.)
                    202: No matter how many characters are requested
                    203: in the read call, at most one line will be returned.
                    204: It is not, however, necessary to read a whole line at
                    205: once; any number of characters may be
                    206: requested in a read, even one, without losing information.
                    207: .PP
                    208: During input, line editing is normally done, with the erase character
                    209: .I sg_erase
                    210: (by default, DELETE)
                    211: logically erasing the last character typed and the
                    212: .I sg_kill
                    213: character (default, ^U: control-U)
                    214: logically erasing the entire current input line.
                    215: These characters
                    216: never erase beyond the beginning of the current input line or an eof.
                    217: These characters may be entered literally by
                    218: preceding them with `\e\|'; the `\e\|' will normally be erased when the
                    219: character is typed.
                    220: .PP
                    221: The drivers normally treat either a carriage return or a newline character
                    222: as terminating an input line, replacing the return with a newline and echoing
                    223: a return and a line feed.
                    224: If the CRMOD bit is cleared in the local mode word then the processing
                    225: for carriage return is disabled, and it is simply echoed as a return,
                    226: and does not terminate cooked mode input.
                    227: .PP
                    228: In the new driver there is a literal-next character (normally ^V)
                    229: which can be typed
                    230: in both cooked and CBREAK mode preceding
                    231: .I any
                    232: character to prevent its special meaning to the terminal handler.
                    233: This is to be preferred to the
                    234: use of `\e\|' escaping erase and kill characters, but `\e\|' is
                    235: retained with its old function in the new line discipline.
                    236: .PP
                    237: The new terminal driver also provides two other editing characters in
                    238: normal mode.  The word-erase character, normally ^W, erases the preceding
                    239: word, but not any spaces before it.  For the purposes of ^W, a word
                    240: is defined as a sequence of non-blank characters, with tabs counted as
                    241: blanks.
                    242: Finally, the reprint character, normally ^R, retypes the pending input beginning
                    243: on a new line.  Retyping occurs automatically in cooked mode if characters
                    244: which would normally be erased from the screen are fouled by program output.
                    245: .LP
                    246: .B "Input echoing and redisplay"
                    247: .LP
                    248: The terminal driver has several modes (not present in standard UNIX
                    249: Version 7 systems) for handling the echoing of
                    250: terminal input, controlled by bits in a local mode word.
                    251: .LP
                    252: .I "Hardcopy terminals."
                    253: When a hardcopy terminal is in use, the LPRTERA bit is normally set in
                    254: the local mode word.  Characters which are logically erased are
                    255: then printed out backwards preceded by `\e\|' and followed by `/' in this mode.
                    256: .LP
                    257: .I "CRT terminals."
                    258: When a CRT terminal is in use, the LCRTBS bit is normally set in the local
                    259: mode word.  The terminal driver then echoes the proper number of erase
                    260: characters when input is erased; in the normal case where the erase
                    261: character is a ^H this causes the cursor of the terminal to back up
                    262: to where it was before the logically erased character was typed.
                    263: If the input has become fouled due to interspersed asynchronous output,
                    264: the input is automatically retyped.
                    265: .LP
                    266: .I "Erasing characters from a CRT."
                    267: When a CRT terminal is in use, the LCRTERA bit may be set to cause
                    268: input to be erased from the screen with a \*(lqbackspace-space-backspace\*(rq
                    269: sequence when character or word deleting sequences are used.
                    270: A LCRTKIL bit may be set as well, causing the input to
                    271: be erased in this manner on line kill sequences as well.
                    272: .LP
                    273: .I "Echoing of control characters."
                    274: If the LCTLECH bit is set in the local state word, then non-printing (control)
                    275: characters are normally echoed as ^X (for some X)
                    276: rather than being echoed unmodified; delete is echoed as ^?.
                    277: .LP
                    278: The normal modes for use on CRT terminals are speed dependent.
                    279: At speeds less than 1200 baud, the LCRTERA and LCRTKILL processing
                    280: is painfully slow, and
                    281: .IR stty (1)
                    282: normally just sets LCRTBS and LCTLECH; at
                    283: speeds of 1200 baud or greater all of these bits are normally set.
                    284: .IR Stty (1)
                    285: summarizes these option settings and the use of the new terminal
                    286: driver as
                    287: \*(lqnewcrt.\*(rq
                    288: .LP
                    289: .B "Output processing."
                    290: .PP
                    291: When one or more
                    292: characters are written, they are actually transmitted
                    293: to the terminal as soon as previously-written characters
                    294: have finished typing.
                    295: (As noted above, input characters are normally 
                    296: echoed by putting them in the output queue
                    297: as they arrive.)
                    298: When a process produces characters more rapidly than they can be typed,
                    299: it will be suspended when its output queue exceeds some limit.
                    300: When the queue has drained down to some threshold
                    301: the program is resumed.
                    302: Even parity is normally generated on output.
                    303: The EOT character is not transmitted in cooked mode to prevent terminals
                    304: that respond to it from hanging up; programs using RAW or CBREAK mode
                    305: should be careful.
                    306: .PP
                    307: The terminal drivers provide necessary processing for cooked and CBREAK mode
                    308: output including delay generation for certain special characters and parity
                    309: generation.   Delays are available after backspaces ^H, form feeds ^L,
                    310: carriage returns ^M, tabs ^I and newlines ^J.  The driver will also optionally
                    311: expand tabs into spaces, where the tab stops are assumed to be set every
                    312: eight columns, and optionally convert newlines to carriage returns
                    313: followed by newline.  These functions are controlled by bits in the tty
                    314: flags word; see \fBSummary\fR below.
                    315: .PP
                    316: The terminal drivers provide for mapping between upper and lower case
                    317: on terminals lacking lower case, and for other special processing on
                    318: deficient terminals.
                    319: .PP
                    320: Finally, in the new terminal driver, there is a output flush character,
                    321: normally ^O, which sets the LFLUSHO bit in the local mode word, causing
                    322: subsequent output to be flushed until it is cleared by a program or more
                    323: input is typed.  This character has effect in both cooked and CBREAK modes
                    324: and causes pending input to be retyped if there is any pending input.
                    325: An
                    326: .I ioctl
                    327: to flush the characters in the input or output queues, TIOCFLUSH,
                    328: is also available.
                    329: .LP
                    330: .B "Upper case terminals and Hazeltines"
                    331: .PP
                    332: If the LCASE bit is set in the tty flags, then
                    333: all upper-case letters are mapped into
                    334: the corresponding lower-case letter.
                    335: The upper-case letter may be generated by preceding
                    336: it by `\\'.
                    337: Upper case letters are preceded by a `\e\|' when output.
                    338: In addition, the following escape sequences can be generated
                    339: on output and accepted on input:
                    340: .PP
                    341: .nf
                    342: for    \`      |       ~       {       }
                    343: use    \e\|\'  \e\|!   \e\|^   \e\|(   \e\|)
                    344: .fi
                    345: .PP
                    346: To deal with Hazeltine terminals, which do not understand that ~ has
                    347: been made into an ASCII character, the LTILDE bit may be set in the local
                    348: mode word; in this case the character
                    349: ~ will be replaced with the character \` on output.
                    350: .LP
                    351: .B "Flow control."
                    352: .PP
                    353: There are two characters (the stop character, normally ^S, and the
                    354: start character, normally ^Q) which cause output to be suspended and
                    355: resumed respectively.  Extra stop characters typed when output
                    356: is already stopped have no effect, unless the start and stop characters
                    357: are made the same, in which case output resumes.
                    358: .PP
                    359: A bit in the flags word may be set to put the terminal into TANDEM mode.
                    360: In this mode the system produces a stop character (default ^S) when
                    361: the input queue is in danger of overflowing, and a start character (default
                    362: ^Q) when the input has drained sufficiently.  This mode is useful
                    363: when the terminal is actually another machine that obeys those
                    364: conventions.
                    365: .LP
                    366: .B "Line control and breaks."
                    367: .LP
                    368: There are several
                    369: .I ioctl
                    370: calls available to control the state of the terminal line.
                    371: The TIOCSBRK
                    372: .I ioctl
                    373: will set the break bit in the hardware interface
                    374: causing a break condition to exist; this can be cleared (usually after a delay
                    375: with
                    376: .IR sleep (3))
                    377: by TIOCCBRK.
                    378: Break conditions in the input are reflected as a null character in RAW mode
                    379: or as the interrupt character in cooked or CBREAK mode.
                    380: The TIOCCDTR
                    381: .I ioctl
                    382: will clear the data terminal ready condition; it can
                    383: be set again by TIOCSDTR.
                    384: .PP
                    385: When the carrier signal from the dataset drops (usually
                    386: because the user has hung up his terminal) a
                    387: SIGHUP hangup signal is sent to the processes in the distinguished
                    388: process group of the terminal; this usually causes them to terminate.
                    389: The SIGHUP can be suppressed by setting the LNOHANG bit in the local
                    390: state word of the driver.
                    391: Access to the terminal by other processes is then normally revoked,
                    392: so any further reads will fail, and programs that read a terminal and test for
                    393: end-of-file on their input will terminate appropriately.
                    394: .PP
                    395: It is possible to ask that the phone line be hung up on the last close
                    396: with the TIOCHPCL
                    397: .IR ioctl ;
                    398: this is normally done on the outgoing lines and dialups.
                    399: .LP
                    400: .B "Interrupt characters."
                    401: .PP
                    402: There are several characters that generate interrupts in cooked and CBREAK
                    403: mode; all are sent to the processes in the control group of the terminal,
                    404: as if a TIOCGPGRP
                    405: .I ioctl
                    406: were done to get the process group and then a
                    407: .IR killpg (2)
                    408: system call were done,
                    409: except that these characters also flush pending input and output when
                    410: typed at a terminal
                    411: (\fI\z'a\`'la\fR TIOCFLUSH).
                    412: The characters shown here are the defaults; the field names in the structures
                    413: (given below)
                    414: are also shown.
                    415: The characters may be changed.
                    416: .IP ^C
                    417: \fBt_intrc\fR (ETX) generates a SIGINT signal.
                    418: This is the normal way to stop a process which is no longer interesting,
                    419: or to regain control in an interactive program.
                    420: .IP ^\e
                    421: \fBt_quitc\fR (FS) generates a SIGQUIT signal.
                    422: This is used to cause a program to terminate and produce a core image,
                    423: if possible,
                    424: in the file
                    425: .B core
                    426: in the current directory.
                    427: .IP ^Z
                    428: \fBt_suspc\fR (EM) generates a SIGTSTP signal, which is used to suspend
                    429: the current process group.
                    430: .IP ^Y
                    431: \fBt_dsuspc\fR (SUB) generates a SIGTSTP signal as ^Z does, but the
                    432: signal is sent when a program attempts to read the ^Y, rather than when
                    433: it is typed.
                    434: .LP
                    435: .B "Job access control."
                    436: .PP
                    437: When using the new terminal driver,
                    438: if a process which is not in the distinguished process group of its
                    439: control terminal attempts to read from that terminal its process group is
                    440: sent a SIGTTIN signal.  This signal normally causes the members of
                    441: that process group to stop. 
                    442: If, however, the process is ignoring SIGTTIN, has SIGTTIN blocked,
                    443: or is in the middle of process creation using
                    444: .IR vfork (2)),
                    445: the read will return \-1 and set
                    446: .I errno
                    447: to EIO.
                    448: .PP
                    449: When using the new terminal driver with the LTOSTOP bit set in the local
                    450: modes, a process is prohibited from writing on its control terminal if it is
                    451: not in the distinguished process group for that terminal.
                    452: Processes which are holding or ignoring SIGTTOU signals
                    453: or which are in the middle of a
                    454: .IR vfork (2)
                    455: are excepted and allowed to produce output.
                    456: .LP
                    457: .B "Terminal/window sizes."
                    458: .LP
                    459: In order to accommodate terminals and workstations with variable-sized
                    460: windows, the terminal driver provides a mechanism for obtaining and setting
                    461: the current terminal size.
                    462: The driver does not use this information internally, but only stores it
                    463: and provides a uniform access mechanism.
                    464: When the size is changed, a SIGWINCH signal is sent to the terminal's process
                    465: group so that knowledgeable programs may detect size changes.
                    466: This facility was added in 4.3BSD and is not available in earlier
                    467: versions of the system.
                    468: .LP
                    469: .B "Summary of modes."
                    470: .LP
                    471: Unfortunately, due to the evolution of the terminal driver,
                    472: there are 4 different structures which contain various portions of the
                    473: driver data.  The first of these (\fBsgttyb\fR)
                    474: contains that part of the information
                    475: largely common between version 6 and version 7 UNIX systems.
                    476: The second contains additional control characters added in version 7.
                    477: The third is a word of local state added in 4BSD,
                    478: and the fourth is another structure of special characters added for the
                    479: new driver.  In the future a single structure may be made available
                    480: to programs which need to access all this information; most programs
                    481: need not concern themselves with all this state.
                    482: .de Ul
                    483: .ie t \\$1\l'|0\(ul'
                    484: .el \fI\\$1\fP
                    485: ..
                    486: .LP
                    487: .Ul "Basic modes: sgtty."
                    488: .PP
                    489: The basic
                    490: .IR ioctl s
                    491: use the structure
                    492: defined in
                    493: .IR <sgtty.h> :
                    494: .PP
                    495: .ta .5i 1i
                    496: .nf
                    497: .ft 3
                    498: struct sgttyb {
                    499:        char    sg_ispeed;
                    500:        char    sg_ospeed;
                    501:        char    sg_erase;
                    502:        char    sg_kill;
                    503:        short   sg_flags;
                    504: };
                    505: .ft R
                    506: .fi
                    507: .PP
                    508: The
                    509: .I sg_ispeed 
                    510: and 
                    511: .I sg_ospeed
                    512: fields describe the input and output speeds of the
                    513: device according to the following table,
                    514: which corresponds to the DEC DH-11 interface.
                    515: If other hardware is used,
                    516: impossible speed changes are ignored.
                    517: Symbolic values in the table are as defined in
                    518: .IR <sgtty.h> .
                    519: .PP
                    520: .nf
                    521: .ta \w'B9600   'u +5n
                    522: B0     0       (hang up dataphone)
                    523: B50    1       50 baud
                    524: B75    2       75 baud
                    525: B110   3       110 baud
                    526: B134   4       134.5 baud
                    527: B150   5       150 baud
                    528: B200   6       200 baud
                    529: B300   7       300 baud
                    530: B600   8       600 baud
                    531: B1200  9       1200 baud
                    532: B1800  10      1800 baud
                    533: B2400  11      2400 baud
                    534: B4800  12      4800 baud
                    535: B9600  13      9600 baud
                    536: EXTA   14      External A
                    537: EXTB   15      External B
                    538: .fi
                    539: .DT
                    540: .PP
                    541: Code conversion and line control required for
                    542: IBM 2741's (134.5 baud)
                    543: must be implemented by the user's
                    544: program.
                    545: The half-duplex line discipline
                    546: required for the 202 dataset (1200 baud)
                    547: is not supplied; full-duplex 212 datasets work fine.
                    548: .PP
                    549: The
                    550: .I sg_erase
                    551: and
                    552: .I sg_kill
                    553: fields of the argument structure
                    554: specify the erase and kill characters respectively.
                    555: (Defaults are DELETE and ^U.)
                    556: .PP
                    557: The
                    558: .I sg_flags
                    559: field of the argument structure
                    560: contains several bits that determine the
                    561: system's treatment of the terminal:
                    562: .PP
                    563: .ta \w'ALLDELAY 'u +\w'0100000 'u
                    564: .nf
                    565: ALLDELAY       0177400 Delay algorithm selection
                    566: BSDELAY        0100000 Select backspace delays (not implemented):
                    567: BS0    0
                    568: BS1    0100000
                    569: VTDELAY        0040000 Select form-feed and vertical-tab delays:
                    570: FF0    0
                    571: FF1    0040000
                    572: CRDELAY        0030000 Select carriage-return delays:
                    573: CR0    0
                    574: CR1    0010000
                    575: CR2    0020000
                    576: CR3    0030000
                    577: TBDELAY        0006000 Select tab delays:
                    578: TAB0   0
                    579: TAB1   0002000
                    580: TAB2   0004000
                    581: XTABS  0006000
                    582: NLDELAY        0001400 Select new-line delays:
                    583: NL0    0
                    584: NL1    0000400
                    585: NL2    0001000
                    586: NL3    0001400
                    587: EVENP  0000200 Even parity allowed on input
                    588: ODDP   0000100 Odd parity allowed on input
                    589: RAW    0000040 Raw mode: wake up on all characters, 8-bit interface
                    590: CRMOD  0000020 Map CR into LF; output LF as CR-LF
                    591: ECHO   0000010 Echo (full duplex)
                    592: LCASE  0000004 Map upper case to lower on input and lower to upper on output
                    593: CBREAK 0000002 Return each character as soon as typed
                    594: TANDEM 0000001 Automatic flow control
                    595: .DT
                    596: .fi
                    597: .PP
                    598: The delay bits specify how long
                    599: transmission stops to allow for mechanical or other movement
                    600: when certain characters are sent to the terminal.
                    601: In all cases a value of 0 indicates no delay.
                    602: .PP
                    603: Backspace delays are currently ignored but might
                    604: be used for Terminet 300's.
                    605: .PP
                    606: If a form-feed/vertical tab delay is specified,
                    607: it lasts for about 2 seconds.
                    608: .PP
                    609: Carriage-return delay type 1 lasts about .08 seconds
                    610: and is suitable for the Terminet 300.
                    611: Delay type 2 lasts about .16 seconds and is suitable
                    612: for the VT05 and the TI 700.
                    613: Delay type 3 is suitable for the concept-100 and pads lines
                    614: to be at least 9 characters at 9600 baud.
                    615: .PP
                    616: New-line delay type 1 is dependent on the current column
                    617: and is tuned for Teletype model 37's.
                    618: Type 2 is useful for the VT05 and is about .10 seconds.
                    619: Type 3 is unimplemented and is 0.
                    620: .PP
                    621: Tab delay type 1 is dependent on the amount of movement
                    622: and is tuned to the Teletype model
                    623: 37.
                    624: Type 3, called XTABS,
                    625: is not a delay at all but causes tabs to be replaced
                    626: by the appropriate number of spaces on output.
                    627: .PP
                    628: The flags for even and odd parity control parity checking on input
                    629: and generation on output in cooked and CBREAK mode
                    630: (unless LPASS8 is enabled, see below).
                    631: Even parity is generated on output unless ODDP is set and EVENP
                    632: is clear, in which case odd parity is generated.
                    633: Input characters with the wrong parity, as determined by EVENP and
                    634: ODDP, are ignored in cooked and CBREAK mode.
                    635: .PP
                    636: RAW
                    637: disables all processing save output flushing with LFLUSHO;
                    638: full 8 bits of input are given as soon as
                    639: it is available; all 8 bits are passed on output.
                    640: A break condition in the input is reported as a null character.
                    641: If the input queue overflows in raw mode all data in the input and output
                    642: queues are discarded; this applies to both new and old drivers.
                    643: .PP
                    644: CRMOD causes input carriage returns to be turned into
                    645: new-lines, and output and echoed new-lines to be output as a carriage return
                    646: followed by a line feed.
                    647: .PP
                    648: CBREAK is a sort of half-cooked (rare?) mode.
                    649: Programs can read each character as soon as typed, instead
                    650: of waiting for a full line;
                    651: all processing is done except the input editing:
                    652: character and word erase and line kill, input reprint,
                    653: and the special treatment of \e and EOT are disabled.
                    654: .PP
                    655: TANDEM mode causes the system to produce
                    656: a stop character (default ^S) whenever the input
                    657: queue is in danger of overflowing, and a start character
                    658: (default ^Q)
                    659: when the input queue has drained sufficiently.
                    660: It is useful for flow control when the `terminal'
                    661: is really another computer which understands the conventions.
                    662: .LP
                    663: .B Note:
                    664: The same ``stop'' and ``start'' characters are used for both directions
                    665: of flow control; the
                    666: .I t_stopc
                    667: character is accepted on input as the character that stops output and is
                    668: produced on output as the character to stop input, and the
                    669: .I t_startc
                    670: character is accepted on input as the character that restarts output and is
                    671: produced on output as the character to restart input.
                    672: .LP
                    673: .Ul "Basic ioctls"
                    674: .PP
                    675: A large number of
                    676: .IR ioctl (2)
                    677: calls apply to terminals.  Some have the general form:
                    678: .PP
                    679: .B #include <sgtty.h>
                    680: .PP
                    681: .B ioctl(fildes, code, arg)
                    682: .br
                    683: .B struct sgttyb *arg;
                    684: .PP
                    685: The applicable codes are:
                    686: .IP TIOCGETP 15
                    687: Fetch the basic parameters associated with the terminal, and store
                    688: in the pointed-to \fIsgttyb\fR structure.
                    689: .IP TIOCSETP
                    690: Set the parameters according to the pointed-to \fIsgttyb\fR structure.
                    691: The interface delays until output is quiescent,
                    692: then throws away any unread characters,
                    693: before changing the modes.
                    694: .IP TIOCSETN
                    695: Set the parameters like TIOCSETP but do not delay or flush input.
                    696: Input is not preserved, however, when changing to or from RAW.
                    697: .PP
                    698: With the following codes
                    699: .I arg
                    700: is ignored.
                    701: .IP TIOCEXCL 15
                    702: Set \*(lqexclusive-use\*(rq mode:
                    703: no further opens are permitted until the file has been closed.
                    704: .IP TIOCNXCL
                    705: Turn off \*(lqexclusive-use\*(rq mode.
                    706: .IP TIOCHPCL
                    707: When the file is closed for the last time,
                    708: hang up the terminal.
                    709: This is useful when the line is associated
                    710: with an ACU used to place outgoing calls.
                    711: .PP
                    712: With the following codes
                    713: .I arg
                    714: is a pointer to an
                    715: .BR int .
                    716: .IP TIOCGETD 15
                    717: .I arg
                    718: is a pointer to an
                    719: .B int
                    720: into which is placed the current line discipline number.
                    721: .IP TIOCSETD
                    722: .I arg
                    723: is a pointer to an
                    724: .B int
                    725: whose value becomes the current line discipline number.
                    726: .IP TIOCFLUSH
                    727: If the
                    728: .B int
                    729: pointed to by
                    730: .I arg
                    731: has a zero value, all characters waiting in input or output queues are flushed.
                    732: Otherwise, the value of the
                    733: .B int
                    734: is for the FREAD and FWRITE bits defined in
                    735: .BR <sys/file.h> ;
                    736: if the FREAD bit is set, all characters waiting in input queues are flushed,
                    737: and if the FWRITE bit is set, all characters waiting in output queues are
                    738: flushed.
                    739: .LP
                    740: The remaining calls are not available in vanilla version 7 UNIX.
                    741: In cases where arguments are required, they are described; \fIarg\fR
                    742: should otherwise be given as 0.
                    743: .IP TIOCSTI 15
                    744: the argument points to a character which the system
                    745: pretends had been typed on the terminal.
                    746: .IP TIOCSBRK 15
                    747: the break bit is set in the terminal.
                    748: .IP TIOCCBRK
                    749: the break bit is cleared.
                    750: .IP TIOCSDTR 
                    751: data terminal ready is set.
                    752: .IP TIOCCDTR
                    753: data terminal ready is cleared.
                    754: .IP TIOCSTOP 15
                    755: output is stopped as if the ``stop'' character had been typed.
                    756: .IP TIOCSTART
                    757: output is restarted as if the ``start'' character had been typed.
                    758: .IP TIOCGPGRP
                    759: .I arg
                    760: is a pointer to an
                    761: .B int
                    762: into which is placed the process group ID of the process group
                    763: for which this terminal is the control terminal.
                    764: .IP TIOCSPGRP
                    765: .I arg
                    766: is a pointer to an
                    767: .B int
                    768: which is the value to which the process group ID
                    769: for this terminal will be set.
                    770: .IP TIOCOUTQ
                    771: returns in the
                    772: .B int
                    773: pointed to by
                    774: .I arg
                    775: the number of characters queued for output to the terminal.
                    776: .IP FIONREAD
                    777: returns in the
                    778: .B int
                    779: pointed to by
                    780: .I arg
                    781: the number of characters immediately readable from the argument descriptor.
                    782: This works for files, pipes, and terminals.
                    783: .PP
                    784: .Ul Tchars
                    785: .PP
                    786: The second structure associated with each terminal specifies
                    787: characters that are special in both the old and new terminal interfaces:
                    788: The following structure is defined in
                    789: .IR <sys/ioctl.h> ,
                    790: which is automatically included in
                    791: .IR <sgtty.h> :
                    792: .PP
                    793: .nf
                    794: .ft 3
                    795: .ta .5i 1i 2i 
                    796: struct tchars {
                    797:        char    t_intrc;        /* interrupt */
                    798:        char    t_quitc;        /* quit */
                    799:        char    t_startc;       /* start output */
                    800:        char    t_stopc;        /* stop output */
                    801:        char    t_eofc;         /* end-of-file */
                    802:        char    t_brkc;         /* input delimiter (like nl) */
                    803: };
                    804: .DT
                    805: .fi
                    806: .ft R
                    807: .PP
                    808: The default values for these characters are
                    809: ^C, ^\e\|, ^Q, ^S, ^D, and \-1.
                    810: A character value of \-1
                    811: eliminates the effect of that character.
                    812: The
                    813: .I t_brkc
                    814: character, by default \-1,
                    815: acts like a new-line in that it terminates a `line,'
                    816: is echoed, and is passed to the program.
                    817: The `stop' and `start' characters may be the same,
                    818: to produce a toggle effect.
                    819: It is probably counterproductive to make
                    820: other special characters (including erase and kill)
                    821: identical.
                    822: The applicable
                    823: .I ioctl
                    824: calls are:
                    825: .IP TIOCGETC 12
                    826: Get the special characters and put them in the specified structure.
                    827: .IP TIOCSETC 12
                    828: Set the special characters to those given in the structure.
                    829: .LP
                    830: .Ul "Local mode"
                    831: .PP
                    832: The third structure associated with each terminal is a local mode word.
                    833: The bits of the local mode word are:
                    834: .sp
                    835: .nf
                    836: LCRTBS 000001  Backspace on erase rather than echoing erase
                    837: LPRTERA        000002  Printing terminal erase mode
                    838: LCRTERA        000004  Erase character echoes as backspace-space-backspace
                    839: LTILDE 000010  Convert ~ to \` on output (for Hazeltine terminals)
                    840: LMDMBUF        000020  Stop/start output when carrier drops
                    841: LLITOUT        000040  Suppress output translations
                    842: LTOSTOP        000100  Send SIGTTOU for background output
                    843: LFLUSHO        000200  Output is being flushed
                    844: LNOHANG        000400  Don't send hangup when carrier drops
                    845: LETXACK        001000  Diablo style buffer hacking (unimplemented)
                    846: LCRTKIL        002000  BS-space-BS erase entire line on line kill
                    847: LPASS8 004000  Pass all 8 bits through on input, in any mode
                    848: LCTLECH        010000  Echo input control chars as ^X, delete as ^?
                    849: LPENDIN        020000  Retype pending input at next read or input character
                    850: LDECCTQ        040000  Only ^Q restarts output after ^S, like DEC systems
                    851: LNOFLSH        100000  Inhibit flushing of pending I/O when an interrupt character is typed.
                    852: .fi
                    853: .sp
                    854: The applicable
                    855: .I ioctl
                    856: functions are:
                    857: .IP TIOCLBIS 15
                    858: .I arg
                    859: is a pointer to an
                    860: .B int
                    861: whose value is a mask containing the bits to be set in the local mode word.
                    862: .IP TIOCLBIC
                    863: .I arg
                    864: is a pointer to an
                    865: .B int
                    866: whose value is a mask containing the bits to be cleared in the local mode word.
                    867: .IP TIOCLSET
                    868: .I arg
                    869: is a pointer to an
                    870: .B int
                    871: whose value is stored in the local mode word.
                    872: .IP TIOCLGET
                    873: .I arg
                    874: is a pointer to an
                    875: .B int
                    876: into which the current local mode word is placed.
                    877: .LP
                    878: .Ul "Local special chars"
                    879: .PP
                    880: The
                    881: final control structure associated with each terminal is the
                    882: .I ltchars
                    883: structure which defines control characters
                    884: for the new terminal driver.
                    885: Its structure is:
                    886: .nf
                    887: .sp
                    888: .ta .5i 1i 2i
                    889: .ft B
                    890: struct ltchars {
                    891:        char    t_suspc;        /* stop process signal */
                    892:        char    t_dsuspc;       /* delayed stop process signal */
                    893:        char    t_rprntc;       /* reprint line */
                    894:        char    t_flushc;       /* flush output (toggles) */
                    895:        char    t_werasc;       /* word erase */
                    896:        char    t_lnextc;       /* literal next character */
                    897: };
                    898: .ft R
                    899: .fi
                    900: .sp
                    901: The default values for these characters are ^Z, ^Y, ^R, ^O, ^W, and ^V.
                    902: A value of \-1 disables the character.
                    903: .PP
                    904: The applicable \fIioctl\fR functions are:
                    905: .IP TIOCSLTC 12
                    906: .I arg
                    907: is a pointer to an
                    908: .I ltchars
                    909: structure which defines the new local special characters.
                    910: .IP TIOCGLTC 12
                    911: .I arg
                    912: is a pointer to an
                    913: .I ltchars
                    914: structure into which is placed the current set of local special characters.
                    915: .LP
                    916: .Ul "Window/terminal sizes"
                    917: .PP
                    918: Each terminal has provision for storage of the current terminal or window
                    919: size in a
                    920: .I winsize
                    921: structure, with format:
                    922: .nf
                    923: .sp
                    924: .ft B
                    925: .ta .5i +\w'unsigned short\ \ \ \ 'u +\w'ws_ypixel;\ \ \ \ \ 'u
                    926: struct winsize {
                    927:        unsigned short  ws_row; /* rows, in characters */
                    928:        unsigned short  ws_col; /* columns, in characters */
                    929:        unsigned short  ws_xpixel;      /* horizontal size, pixels */
                    930:        unsigned short  ws_ypixel;      /* vertical size, pixels */
                    931: };
                    932: .ft R
                    933: .fi
                    934: .LP
                    935: A value of 0 in any field is interpreted as ``undefined;''
                    936: the entire structure is zeroed on final close.
                    937: .PP
                    938: The applicable \fIioctl\fP functions are:
                    939: .IP TIOCGWINSZ
                    940: .I arg
                    941: is a pointer to a
                    942: .B "struct winsize"
                    943: into which will be placed the current terminal or window size information.
                    944: .IP TIOCSWINSZ
                    945: .I arg
                    946: is a pointer to a
                    947: .B "struct winsize"
                    948: which will be used to set the current terminal or window size information.
                    949: If the new information is different than the old information,
                    950: a SIGWINCH signal will be sent to the terminal's process group.
                    951: .SH FILES
                    952: /dev/tty
                    953: .br
                    954: /dev/tty*
                    955: .br
                    956: /dev/console
                    957: .SH SEE ALSO
                    958: csh(1),
                    959: stty(1),
                    960: tset(1),
                    961: ioctl(2),
                    962: sigvec(2),
                    963: stty(3C),
                    964: getty(8)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.