| 1 | /* The <termios.h> header is used for controlling tty modes. */ | 
|---|
| 2 |  | 
|---|
| 3 | #ifndef _TERMIOS_H | 
|---|
| 4 | #define _TERMIOS_H | 
|---|
| 5 |  | 
|---|
| 6 | typedef unsigned short tcflag_t; | 
|---|
| 7 | typedef unsigned char cc_t; | 
|---|
| 8 | typedef unsigned int speed_t; | 
|---|
| 9 |  | 
|---|
| 10 | #define NCCS               20   /* size of cc_c array, some extra space | 
|---|
| 11 | * for extensions. */ | 
|---|
| 12 |  | 
|---|
| 13 | /* Primary terminal control structure. POSIX Table 7-1. */ | 
|---|
| 14 | struct termios { | 
|---|
| 15 | tcflag_t c_iflag;             /* input modes */ | 
|---|
| 16 | tcflag_t c_oflag;             /* output modes */ | 
|---|
| 17 | tcflag_t c_cflag;             /* control modes */ | 
|---|
| 18 | tcflag_t c_lflag;             /* local modes */ | 
|---|
| 19 | speed_t  c_ispeed;            /* input speed */ | 
|---|
| 20 | speed_t  c_ospeed;            /* output speed */ | 
|---|
| 21 | cc_t c_cc[NCCS];              /* control characters */ | 
|---|
| 22 | }; | 
|---|
| 23 |  | 
|---|
| 24 | /* Values for termios c_iflag bit map.  POSIX Table 7-2. */ | 
|---|
| 25 | #define BRKINT          0x0001  /* signal interrupt on break */ | 
|---|
| 26 | #define ICRNL           0x0002  /* map CR to NL on input */ | 
|---|
| 27 | #define IGNBRK          0x0004  /* ignore break */ | 
|---|
| 28 | #define IGNCR           0x0008  /* ignore CR */ | 
|---|
| 29 | #define IGNPAR          0x0010  /* ignore characters with parity errors */ | 
|---|
| 30 | #define INLCR           0x0020  /* map NL to CR on input */ | 
|---|
| 31 | #define INPCK           0x0040  /* enable input parity check */ | 
|---|
| 32 | #define ISTRIP          0x0080  /* mask off 8th bit */ | 
|---|
| 33 | #define IXOFF           0x0100  /* enable start/stop input control */ | 
|---|
| 34 | #define IXON            0x0200  /* enable start/stop output control */ | 
|---|
| 35 | #define PARMRK          0x0400  /* mark parity errors in the input queue */ | 
|---|
| 36 |  | 
|---|
| 37 | /* Values for termios c_oflag bit map.  POSIX Sec. 7.1.2.3. */ | 
|---|
| 38 | #define OPOST           0x0001  /* perform output processing */ | 
|---|
| 39 |  | 
|---|
| 40 | /* Values for termios c_cflag bit map.  POSIX Table 7-3. */ | 
|---|
| 41 | #define CLOCAL          0x0001  /* ignore modem status lines */ | 
|---|
| 42 | #define CREAD           0x0002  /* enable receiver */ | 
|---|
| 43 | #define CSIZE           0x000C  /* number of bits per character */ | 
|---|
| 44 | #define         CS5     0x0000  /* if CSIZE is CS5, characters are 5 bits */ | 
|---|
| 45 | #define         CS6     0x0004  /* if CSIZE is CS6, characters are 6 bits */ | 
|---|
| 46 | #define         CS7     0x0008  /* if CSIZE is CS7, characters are 7 bits */ | 
|---|
| 47 | #define         CS8     0x000C  /* if CSIZE is CS8, characters are 8 bits */ | 
|---|
| 48 | #define CSTOPB          0x0010  /* send 2 stop bits if set, else 1 */ | 
|---|
| 49 | #define HUPCL           0x0020  /* hang up on last close */ | 
|---|
| 50 | #define PARENB          0x0040  /* enable parity on output */ | 
|---|
| 51 | #define PARODD          0x0080  /* use odd parity if set, else even */ | 
|---|
| 52 |  | 
|---|
| 53 | /* Values for termios c_lflag bit map.  POSIX Table 7-4. */ | 
|---|
| 54 | #define ECHO            0x0001  /* enable echoing of input characters */ | 
|---|
| 55 | #define ECHOE           0x0002  /* echo ERASE as backspace */ | 
|---|
| 56 | #define ECHOK           0x0004  /* echo KILL */ | 
|---|
| 57 | #define ECHONL          0x0008  /* echo NL */ | 
|---|
| 58 | #define ICANON          0x0010  /* canonical input (erase and kill enabled) */ | 
|---|
| 59 | #define IEXTEN          0x0020  /* enable extended functions */ | 
|---|
| 60 | #define ISIG            0x0040  /* enable signals */ | 
|---|
| 61 | #define NOFLSH          0x0080  /* disable flush after interrupt or quit */ | 
|---|
| 62 | #define TOSTOP          0x0100  /* send SIGTTOU (job control, not implemented*/ | 
|---|
| 63 |  | 
|---|
| 64 | /* Indices into c_cc array.  Default values in parentheses. POSIX Table 7-5. */ | 
|---|
| 65 | #define VEOF                 0  /* cc_c[VEOF] = EOF char (^D) */ | 
|---|
| 66 | #define VEOL                 1  /* cc_c[VEOL] = EOL char (undef) */ | 
|---|
| 67 | #define VERASE               2  /* cc_c[VERASE] = ERASE char (^H) */ | 
|---|
| 68 | #define VINTR                3  /* cc_c[VINTR] = INTR char (DEL) */ | 
|---|
| 69 | #define VKILL                4  /* cc_c[VKILL] = KILL char (^U) */ | 
|---|
| 70 | #define VMIN                 5  /* cc_c[VMIN] = MIN value for timer */ | 
|---|
| 71 | #define VQUIT                6  /* cc_c[VQUIT] = QUIT char (^\) */ | 
|---|
| 72 | #define VTIME                7  /* cc_c[VTIME] = TIME value for timer */ | 
|---|
| 73 | #define VSUSP                8  /* cc_c[VSUSP] = SUSP (^Z, ignored) */ | 
|---|
| 74 | #define VSTART               9  /* cc_c[VSTART] = START char (^S) */ | 
|---|
| 75 | #define VSTOP               10  /* cc_c[VSTOP] = STOP char (^Q) */ | 
|---|
| 76 |  | 
|---|
| 77 | #define _POSIX_VDISABLE   (cc_t)0xFF    /* You can't even generate this | 
|---|
| 78 | * character with 'normal' keyboards. | 
|---|
| 79 | * But some language specific keyboards | 
|---|
| 80 | * can generate 0xFF. It seems that all | 
|---|
| 81 | * 256 are used, so cc_t should be a | 
|---|
| 82 | * short... | 
|---|
| 83 | */ | 
|---|
| 84 |  | 
|---|
| 85 | /* Values for the baud rate settings.  POSIX Table 7-6. */ | 
|---|
| 86 | #define B0              0x0000  /* hang up the line */ | 
|---|
| 87 | #define B50             0x1000  /* 50 baud */ | 
|---|
| 88 | #define B75             0x2000  /* 75 baud */ | 
|---|
| 89 | #define B110            0x3000  /* 110 baud */ | 
|---|
| 90 | #define B134            0x4000  /* 134.5 baud */ | 
|---|
| 91 | #define B150            0x5000  /* 150 baud */ | 
|---|
| 92 | #define B200            0x6000  /* 200 baud */ | 
|---|
| 93 | #define B300            0x7000  /* 300 baud */ | 
|---|
| 94 | #define B600            0x8000  /* 600 baud */ | 
|---|
| 95 | #define B1200           0x9000  /* 1200 baud */ | 
|---|
| 96 | #define B1800           0xA000  /* 1800 baud */ | 
|---|
| 97 | #define B2400           0xB000  /* 2400 baud */ | 
|---|
| 98 | #define B4800           0xC000  /* 4800 baud */ | 
|---|
| 99 | #define B9600           0xD000  /* 9600 baud */ | 
|---|
| 100 | #define B19200          0xE000  /* 19200 baud */ | 
|---|
| 101 | #define B38400          0xF000  /* 38400 baud */ | 
|---|
| 102 |  | 
|---|
| 103 | /* Optional actions for tcsetattr().  POSIX Sec. 7.2.1.2. */ | 
|---|
| 104 | #define TCSANOW            1    /* changes take effect immediately */ | 
|---|
| 105 | #define TCSADRAIN          2    /* changes take effect after output is done */ | 
|---|
| 106 | #define TCSAFLUSH          3    /* wait for output to finish and flush input */ | 
|---|
| 107 |  | 
|---|
| 108 | /* Queue_selector values for tcflush().  POSIX Sec. 7.2.2.2. */ | 
|---|
| 109 | #define TCIFLUSH           1    /* flush accumulated input data */ | 
|---|
| 110 | #define TCOFLUSH           2    /* flush accumulated output data */ | 
|---|
| 111 | #define TCIOFLUSH          3    /* flush accumulated input and output data */ | 
|---|
| 112 |  | 
|---|
| 113 | /* Action values for tcflow().  POSIX Sec. 7.2.2.2. */ | 
|---|
| 114 | #define TCOOFF             1    /* suspend output */ | 
|---|
| 115 | #define TCOON              2    /* restart suspended output */ | 
|---|
| 116 | #define TCIOFF             3    /* transmit a STOP character on the line */ | 
|---|
| 117 | #define TCION              4    /* transmit a START character on the line */ | 
|---|
| 118 |  | 
|---|
| 119 | /* Function Prototypes. */ | 
|---|
| 120 | #ifndef _ANSI_H | 
|---|
| 121 | #include <ansi.h> | 
|---|
| 122 | #endif | 
|---|
| 123 |  | 
|---|
| 124 | _PROTOTYPE( int tcsendbreak, (int _fildes, int _duration)                    ); | 
|---|
| 125 | _PROTOTYPE( int tcdrain, (int _filedes)                                      ); | 
|---|
| 126 | _PROTOTYPE( int tcflush, (int _filedes, int _queue_selector)                 ); | 
|---|
| 127 | _PROTOTYPE( int tcflow, (int _filedes, int _action)                          ); | 
|---|
| 128 | _PROTOTYPE( speed_t cfgetispeed, (const struct termios *_termios_p)          ); | 
|---|
| 129 | _PROTOTYPE( speed_t cfgetospeed, (const struct termios *_termios_p)          ); | 
|---|
| 130 | _PROTOTYPE( int cfsetispeed, (struct termios *_termios_p, speed_t _speed)    ); | 
|---|
| 131 | _PROTOTYPE( int cfsetospeed, (struct termios *_termios_p, speed_t _speed)    ); | 
|---|
| 132 | _PROTOTYPE( int tcgetattr, (int _filedes, struct termios *_termios_p)        ); | 
|---|
| 133 | _PROTOTYPE( int tcsetattr, \ | 
|---|
| 134 | (int _filedes, int _opt_actions, const struct termios *_termios_p)   ); | 
|---|
| 135 |  | 
|---|
| 136 | #define cfgetispeed(termios_p)          ((termios_p)->c_ispeed) | 
|---|
| 137 | #define cfgetospeed(termios_p)          ((termios_p)->c_ospeed) | 
|---|
| 138 | #define cfsetispeed(termios_p, speed)   ((termios_p)->c_ispeed = (speed), 0) | 
|---|
| 139 | #define cfsetospeed(termios_p, speed)   ((termios_p)->c_ospeed = (speed), 0) | 
|---|
| 140 |  | 
|---|
| 141 | #ifdef _MINIX | 
|---|
| 142 | /* Here are the local extensions to the POSIX standard for Minix. Posix | 
|---|
| 143 | * conforming programs are not able to access these, and therefore they are | 
|---|
| 144 | * only defined when a Minix program is compiled. | 
|---|
| 145 | */ | 
|---|
| 146 |  | 
|---|
| 147 | /* Extensions to the termios c_iflag bit map.  */ | 
|---|
| 148 | #define IXANY           0x0800  /* allow any key to continue ouptut */ | 
|---|
| 149 |  | 
|---|
| 150 | /* Extensions to the termios c_oflag bit map. They are only active iff | 
|---|
| 151 | * OPOST is enabled. */ | 
|---|
| 152 | #define ONLCR           0x0002  /* Map NL to CR-NL on output */ | 
|---|
| 153 | #define XTABS           0x0004  /* Expand tabs to spaces */ | 
|---|
| 154 | #define ONOEOT          0x0008  /* discard EOT's (^D) on output) */ | 
|---|
| 155 |  | 
|---|
| 156 | /* Extensions to the termios c_lflag bit map.  */ | 
|---|
| 157 | #define LFLUSHO         0x0200  /* Flush output. */ | 
|---|
| 158 |  | 
|---|
| 159 | /* Extensions to the c_cc array. */ | 
|---|
| 160 | #define VREPRINT          11    /* cc_c[VREPRINT] (^R) */ | 
|---|
| 161 | #define VLNEXT            12    /* cc_c[VLNEXT] (^V) */ | 
|---|
| 162 | #define VDISCARD          13    /* cc_c[VDISCARD] (^O) */ | 
|---|
| 163 |  | 
|---|
| 164 | /* Extensions to baud rate settings. */ | 
|---|
| 165 | #define B57600          0x0100  /* 57600 baud */ | 
|---|
| 166 | #define B115200         0x0200  /* 115200 baud */ | 
|---|
| 167 |  | 
|---|
| 168 | /* These are the default settings used by the kernel and by 'stty sane' */ | 
|---|
| 169 |  | 
|---|
| 170 | #define TCTRL_DEF       (CREAD | CS8 | HUPCL) | 
|---|
| 171 | #define TINPUT_DEF      (BRKINT | ICRNL | IXON | IXANY) | 
|---|
| 172 | #define TOUTPUT_DEF     (OPOST | ONLCR) | 
|---|
| 173 | #define TLOCAL_DEF      (ISIG | IEXTEN | ICANON | ECHO | ECHOE) | 
|---|
| 174 | #define TSPEED_DEF      B9600 | 
|---|
| 175 |  | 
|---|
| 176 | #define TEOF_DEF        '\4'    /* ^D */ | 
|---|
| 177 | #define TEOL_DEF        _POSIX_VDISABLE | 
|---|
| 178 | #define TERASE_DEF      '\10'   /* ^H */ | 
|---|
| 179 | #define TINTR_DEF       '\3'    /* ^C */ | 
|---|
| 180 | #define TKILL_DEF       '\25'   /* ^U */ | 
|---|
| 181 | #define TMIN_DEF        1 | 
|---|
| 182 | #define TQUIT_DEF       '\34'   /* ^\ */ | 
|---|
| 183 | #define TSTART_DEF      '\21'   /* ^Q */ | 
|---|
| 184 | #define TSTOP_DEF       '\23'   /* ^S */ | 
|---|
| 185 | #define TSUSP_DEF       '\32'   /* ^Z */ | 
|---|
| 186 | #define TTIME_DEF       0 | 
|---|
| 187 | #define TREPRINT_DEF    '\22'   /* ^R */ | 
|---|
| 188 | #define TLNEXT_DEF      '\26'   /* ^V */ | 
|---|
| 189 | #define TDISCARD_DEF    '\17'   /* ^O */ | 
|---|
| 190 |  | 
|---|
| 191 | /* Window size. This information is stored in the TTY driver but not used. | 
|---|
| 192 | * This can be used for screen based applications in a window environment. | 
|---|
| 193 | * The ioctls TIOCGWINSZ and TIOCSWINSZ can be used to get and set this | 
|---|
| 194 | * information. | 
|---|
| 195 | */ | 
|---|
| 196 |  | 
|---|
| 197 | struct winsize | 
|---|
| 198 | { | 
|---|
| 199 | unsigned short  ws_row;         /* rows, in characters */ | 
|---|
| 200 | unsigned short  ws_col;         /* columns, in characters */ | 
|---|
| 201 | unsigned short  ws_xpixel;      /* horizontal size, pixels */ | 
|---|
| 202 | unsigned short  ws_ypixel;      /* vertical size, pixels */ | 
|---|
| 203 | }; | 
|---|
| 204 | #endif /* _MINIX */ | 
|---|
| 205 |  | 
|---|
| 206 | #endif /* _TERMIOS_H */ | 
|---|