5 * Special Control Characters
7 * Index into c_cc[] character array.
9 * Name Subscript Enabled by
34 winsize = packed record
44 Termios = packed record
50 c_cc : array[0..NCCS-1] of byte;
61 POSIX_VDISABLE=Chr($ff);
64 #define CCEQ(val, c) ((c) == (val) ? (val) != _POSIX_VDISABLE : 0)
67 { * Input flags - software input processing}
69 IGNBRK = $1; { ignore BREAK condition }
70 BRKINT = $2; { map BREAK to SIGINTR }
71 IGNPAR = $4; { ignore (discard) parity errors }
72 PARMRK = $8; { mark parity and framing errors }
73 INPCK = $10; { enable checking of parity errors }
74 ISTRIP = $20; { strip 8th bit off chars }
75 INLCR = $40; { map NL into CR }
76 IGNCR = $80; { ignore CR }
77 ICRNL = $100; { map CR to NL (ala CRMOD) }
78 IXON = $200; { enable output flow control }
79 IXOFF = $400; { enable input flow control }
80 IXANY = $800; { any char will restart after stop }
81 IMAXBEL = $2000; { ring bell on input queue full }
84 * Output flags - software output processing
86 OPOST = $1; { enable following output processing }
87 ONLCR = $2; { map NL to CR-NL (ala CRMOD) }
88 OXTABS = $4; { expand tabs to spaces }
89 ONOEOT = $8; { discard EOT's (^D) on output) }
92 * Control flags - hardware control of terminal
94 CIGNORE = $1; { ignore control flags }
95 CSIZE = $300; { character size mask }
96 CS5 = $0; { 5 bits (pseudo) }
97 CS6 = $100; { 6 bits }
98 CS7 = $200; { 7 bits }
99 CS8 = $300; { 8 bits }
100 CSTOPB = $400; { send 2 stop bits }
101 CREAD = $800; { enable receiver }
102 PARENB = $1000; { parity enable }
103 PARODD = $2000; { odd parity, else even }
104 HUPCL = $4000; { hang up on last close }
105 CLOCAL = $8000; { ignore modem status lines }
106 CCTS_OFLOW = $10000; { CTS flow control of output }
107 CRTS_IFLOW = $20000; { RTS flow control of input }
108 CRTSCTS = (CCTS_OFLOW or CRTS_IFLOW);
109 CDTR_IFLOW = $40000; { DTR flow control of input }
110 CDSR_OFLOW = $80000; { DSR flow control of output }
111 CCAR_OFLOW = $100000; { DCD flow control of output }
112 MDMBUF = $100000; { old name for CCAR_OFLOW }
115 * "Local" flags - dumping ground for other state
117 * Warning: some flags in this structure begin with
118 * the letter "I" and look like they belong in the
122 ECHOKE = $1; { visual erase for line kill }
123 ECHOE = $2; { visually erase chars }
124 ECHOK = $4; { echo NL after line kill }
125 ECHO = $8; { enable echoing }
126 ECHONL = $10; { echo NL even if ECHO is off }
127 ECHOPRT = $20; { visual erase mode for hardcopy }
128 ECHOCTL = $40; { echo control chars as ^(Char) }
129 ISIG = $80; { enable signals INTR, QUIT, [D]SUSP }
130 ICANON = $100; { canonicalize input lines }
131 ALTWERASE = $200; { use alternate WERASE algorithm }
132 IEXTEN = $400; { enable DISCARD and LNEXT }
133 EXTPROC = $800; { external processing }
134 TOSTOP = $400000; { stop background jobs from output }
135 FLUSHO = $800000; { output being flushed (state) }
136 NOKERNINFO = $2000000; { no kernel output from VSTATUS }
137 PENDIN =$20000000; { XXX retype pending input (state) }
138 NOFLSH =$80000000; { don't flush after interrupt }
143 * Commands passed to tcsetattr() for setting the termios structure.
148 TCSANOW =0; { make change immediate }
149 TCSADRAIN =1; { drain output, then change }
150 TCSAFLUSH =2; { drain output, flush input }
151 TCSASOFT =$10; { flag - don't alter h.w. state }
191 #include <sys/cdefs.h>
194 speed_t cfgetispeed __P((const struct termios *));
195 speed_t cfgetospeed __P((const struct termios *));
196 int cfsetispeed __P((struct termios *, speed_t));
197 int cfsetospeed __P((struct termios *, speed_t));
198 int tcgetattr __P((int, struct termios *));
199 int tcsetattr __P((int, int, const struct termios *));
200 int tcdrain __P((int));
201 int tcflow __P((int, int));
202 int tcflush __P((int, int));
203 int tcsendbreak __P((int, int));
205 #ifndef _POSIX_SOURCE
206 void cfmakeraw __P((struct termios *));
207 int cfsetspeed __P((struct termios *, speed_t));
208 #endif { !_POSIX_SOURCE }
216 unsigned short ws_row; { rows, in characters }
217 unsigned short ws_col; { columns, in characters }
218 unsigned short ws_xpixel; { horizontal size, pixels }
219 unsigned short ws_ypixel; { vertical size, pixels }
223 IOCTLREAD = $40000000;
224 IOCTLWRITE = $80000000;
225 IOCTLVOID = $20000000;
227 TIOCMODG = IOCTLREAD+$47400+ 3; { get modem control state }
228 TIOCMODS = IOCTLWRITE+$47400+ 4; { set modem control state }
229 TIOCM_LE =$0001; { line enable }
230 TIOCM_DTR =$0002; { data terminal ready }
231 TIOCM_RTS =$0004; { request to send }
232 TIOCM_ST =$0010; { secondary transmit }
233 TIOCM_SR =$0020; { secondary receive }
234 TIOCM_CTS =$0040; { clear to send }
235 TIOCM_CAR =$0100; { carrier detect }
237 TIOCM_RNG =$0200; { ring }
239 TIOCM_DSR =$0400; { data set ready }
241 TIOCEXCL =IOCTLVOID+$7400+ 13; { set exclusive use of tty }
242 TIOCNXCL =IOCTLVOID+$7400+ 14; { reset exclusive use of tty }
244 TIOCFLUSH =IOCTLWRITE+$47400+ 16; { flush buffers }
246 TIOCGETA =IOCTLREAD+$2C7400+ 19; { get termios struct }
247 TIOCSETA =IOCTLWRITE+$2C7400+ 20; { set termios struct }
248 TIOCSETAW =IOCTLWRITE+$2C7400+ 21; { drain output, set }
249 TIOCSETAF =IOCTLWRITE+$2C7400+ 22; { drn out, fls in, set }
250 TIOCGETD =IOCTLREAD+$47400+ 26; { get line discipline }
251 TIOCSETD =IOCTLWRITE+$47400+ 27; { set line discipline }
253 TIOCSBRK =IOCTLVOID+$7400+ 123; { set break bit }
254 TIOCCBRK =IOCTLVOID+$7400+ 122; { clear break bit }
255 TIOCSDTR =IOCTLVOID+$7400+ 121; { set data terminal ready }
256 TIOCCDTR =IOCTLVOID+$7400+ 120; { clear data terminal ready }
257 TIOCGPGRP =IOCTLREAD+$47400+ 119; { get pgrp of tty }
258 TIOCSPGRP =IOCTLWRITE+$47400+ 118; { set pgrp of tty }
260 TIOCOUTQ =IOCTLREAD+$47400+ 115; { output queue size }
261 TIOCSTI =IOCTLWRITE+$17400+ 114; { simulate terminal input }
262 TIOCNOTTY =IOCTLVOID+$7400+ 113; { void tty association }
263 TIOCPKT =IOCTLWRITE+$47400+ 112; { pty: set/clear packet mode }
264 TIOCPKT_DATA =$00; { data packet }
265 TIOCPKT_FLUSHREAD =$01; { flush packet }
266 TIOCPKT_FLUSHWRITE =$02; { flush packet }
267 TIOCPKT_STOP =$04; { stop output }
268 TIOCPKT_START =$08; { start output }
269 TIOCPKT_NOSTOP =$10; { no more ^S, ^Q }
270 TIOCPKT_DOSTOP =$20; { now do ^S ^Q }
271 TIOCPKT_IOCTL =$40; { state change of pty driver }
272 TIOCSTOP =IOCTLVOID+$7400+ 111; { stop output, like ^S }
273 TIOCSTART =IOCTLVOID+$7400+ 110; { start output, like ^Q }
274 TIOCMSET =IOCTLWRITE+$47400+ 109; { set all modem bits }
275 TIOCMBIS =IOCTLWRITE+$47400+ 108; { bis modem bits }
276 TIOCMBIC =IOCTLWRITE+$47400+ 107; { bic modem bits }
277 TIOCMGET =IOCTLREAD+$47400+ 106; { get all modem bits }
278 TIOCREMOTE =IOCTLWRITE+$47400+ 105; { remote input editing }
279 TIOCGWINSZ =IOCTLREAD+$87400+ 104; { get window size }
280 TIOCSWINSZ =IOCTLWRITE+$87400+ 103; { set window size }
281 TIOCUCNTL =IOCTLWRITE+$47400+ 102; { pty: set/clr usr cntl mode }
282 TIOCSTAT =IOCTLVOID+$7400+ 101; { simulate ^T status message }
283 // UIOCCMD(n) _IO('u', n) { usr cntl op "n" }
284 TIOCCONS =IOCTLWRITE+$47400+ 98; { become virtual console }
285 TIOCSCTTY =IOCTLVOID+$7400+ 97; { become controlling tty }
286 TIOCEXT =IOCTLWRITE+$47400+ 96; { pty: external processing }
287 TIOCSIG =IOCTLVOID+$7400+ 95; { pty: generate signal }
288 TIOCDRAIN =IOCTLVOID+$7400+ 94; { wait till output drained }
289 TIOCMSDTRWAIT =IOCTLWRITE+$47400+ 91; { modem: set wait on close }
290 TIOCMGDTRWAIT =IOCTLREAD+$47400+ 90; { modem: get wait on close }
291 TIOCTIMESTAMP =IOCTLREAD+$87400+ 89; { enable/get timestamp
292 * of last input event }
293 TIOCDCDTIMESTAMP =IOCTLREAD+$87400+ 88; { enable/get timestamp
295 TIOCSDRAINWAIT =IOCTLWRITE+$47400+ 87; { set ttywait timeout }
296 TIOCGDRAINWAIT =IOCTLREAD+$47400+ 86; { get ttywait timeout }
298 TTYDISC =0; { termios tty line discipline }
299 SLIPDISC =4; { serial IP discipline }
300 PPPDISC =5; { PPP discipline }
301 NETGRAPHDISC =6; { Netgraph tty node discipline }
305 * Defaults on "first" open.
307 TTYDEF_IFLAG =(BRKINT or ICRNL or IMAXBEL or IXON or IXANY);
308 TTYDEF_OFLAG =(OPOST or ONLCR);
309 TTYDEF_LFLAG =(ECHO or ICANON or ISIG or IEXTEN or ECHOE or ECHOKE or ECHOCTL);
310 TTYDEF_CFLAG =(CREAD or CS8 or HUPCL);
311 TTYDEF_SPEED =(B9600);
316 * Control Character Defaults
318 CtrlMask = $1f; {\037}
319 CEOF =chr( ORD('d') and CtrlMask);
320 CEOL =chr( $ff and CtrlMask);{ XXX avoid _POSIX_VDISABLE }
321 CERASE =chr( $7F and CtrlMask);
322 CINTR =chr(ORD('c') and CtrlMask);
323 CSTATUS =chr(ORD('t') and CtrlMask);
324 CKILL =chr(ORD('u') and CtrlMask);
326 CQUIT =chr(034 and CtrlMask); { FS, ^\ }
327 CSUSP =chr(ORD('z') and CtrlMask);
329 CDSUSP =chr(ORD('y') and CtrlMask);
330 CSTART =chr(ORD('q') and CtrlMask);
331 CSTOP =chr(ORD('s') and CtrlMask);
332 CLNEXT =chr(ORD('v') and CtrlMask);
333 CDISCARD =chr(ORD('o') and CtrlMask);
334 CWERASE =chr(ORD('w') and CtrlMask);
335 CREPRINT =chr(ORD('r') and CtrlMask);
344 * TTYDEFCHARS to include an array of default control characters.
346 ttydefchars : array[0..NCCS-1] OF char =(
347 CEOF, CEOL, CEOL, CERASE, CWERASE, CKILL, CREPRINT,
348 POSIX_VDISABLE, CINTR, CQUIT, CSUSP, CDSUSP, CSTART, CSTOP, CLNEXT,
349 CDISCARD, CMIN, CTIME, CSTATUS, POSIX_VDISABLE);