termios.inc 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. CONST
  2. {
  3. * Special Control Characters
  4. *
  5. * Index into c_cc[] character array.
  6. *
  7. * Name Subscript Enabled by
  8. }
  9. VEOF =0;
  10. VEOL =1;
  11. VEOL2 =2;
  12. VERASE =3;
  13. VWERASE =4;
  14. VKILL =5;
  15. VREPRINT =6;
  16. { =7; spare 1 }
  17. VINTR =8;
  18. VQUIT =9;
  19. VSUSP =10;
  20. VDSUSP =11;
  21. VSTART =12;
  22. VSTOP =13;
  23. VLNEXT =14;
  24. VDISCARD =15;
  25. VMIN =16;
  26. VTIME =17;
  27. VSTATUS =18;
  28. { =19 spare 2 }
  29. NCCS =20;
  30. Type
  31. winsize = packed record
  32. ws_row,
  33. ws_col,
  34. ws_xpixel,
  35. ws_ypixel : word;
  36. end;
  37. TWinSize=winsize;
  38. type
  39. Termios = packed record
  40. c_iflag,
  41. c_oflag,
  42. c_cflag,
  43. c_lflag : longint;
  44. c_line : char;
  45. c_cc : array[0..NCCS-1] of byte;
  46. {$IFDEF BSD}
  47. c_ispeed,
  48. c_ospeed : longint;
  49. {$endif}
  50. end;
  51. TTermios=Termios;
  52. CONST
  53. POSIX_VDISABLE=Chr($ff);
  54. {
  55. #define CCEQ(val, c) ((c) == (val) ? (val) != _POSIX_VDISABLE : 0)
  56. }
  57. { * Input flags - software input processing}
  58. IGNBRK = $1; { ignore BREAK condition }
  59. BRKINT = $2; { map BREAK to SIGINTR }
  60. IGNPAR = $4; { ignore (discard) parity errors }
  61. PARMRK = $8; { mark parity and framing errors }
  62. INPCK = $10; { enable checking of parity errors }
  63. ISTRIP = $20; { strip 8th bit off chars }
  64. INLCR = $40; { map NL into CR }
  65. IGNCR = $80; { ignore CR }
  66. ICRNL = $100; { map CR to NL (ala CRMOD) }
  67. IXON = $200; { enable output flow control }
  68. IXOFF = $400; { enable input flow control }
  69. IXANY = $800; { any char will restart after stop }
  70. IMAXBEL = $2000; { ring bell on input queue full }
  71. {
  72. * Output flags - software output processing
  73. }
  74. OPOST = $1; { enable following output processing }
  75. ONLCR = $2; { map NL to CR-NL (ala CRMOD) }
  76. OXTABS = $4; { expand tabs to spaces }
  77. ONOEOT = $8; { discard EOT's (^D) on output) }
  78. {
  79. * Control flags - hardware control of terminal
  80. }
  81. CIGNORE = $1; { ignore control flags }
  82. CSIZE = $300; { character size mask }
  83. CS5 = $0; { 5 bits (pseudo) }
  84. CS6 = $100; { 6 bits }
  85. CS7 = $200; { 7 bits }
  86. CS8 = $300; { 8 bits }
  87. CSTOPB = $400; { send 2 stop bits }
  88. CREAD = $800; { enable receiver }
  89. PARENB = $1000; { parity enable }
  90. PARODD = $2000; { odd parity, else even }
  91. HUPCL = $4000; { hang up on last close }
  92. CLOCAL = $8000; { ignore modem status lines }
  93. CCTS_OFLOW = $10000; { CTS flow control of output }
  94. CRTS_IFLOW = $20000; { RTS flow control of input }
  95. CRTSCTS = (CCTS_OFLOW or CRTS_IFLOW);
  96. CDTR_IFLOW = $40000; { DTR flow control of input }
  97. CDSR_OFLOW = $80000; { DSR flow control of output }
  98. CCAR_OFLOW = $100000; { DCD flow control of output }
  99. MDMBUF = $100000; { old name for CCAR_OFLOW }
  100. {
  101. * "Local" flags - dumping ground for other state
  102. *
  103. * Warning: some flags in this structure begin with
  104. * the letter "I" and look like they belong in the
  105. * input flag.
  106. }
  107. ECHOKE = $1; { visual erase for line kill }
  108. ECHOE = $2; { visually erase chars }
  109. ECHOK = $4; { echo NL after line kill }
  110. ECHO = $8; { enable echoing }
  111. ECHONL = $10; { echo NL even if ECHO is off }
  112. ECHOPRT = $20; { visual erase mode for hardcopy }
  113. ECHOCTL = $40; { echo control chars as ^(Char) }
  114. ISIG = $80; { enable signals INTR, QUIT, [D]SUSP }
  115. ICANON = $100; { canonicalize input lines }
  116. ALTWERASE = $200; { use alternate WERASE algorithm }
  117. IEXTEN = $400; { enable DISCARD and LNEXT }
  118. EXTPROC = $800; { external processing }
  119. TOSTOP = $400000; { stop background jobs from output }
  120. FLUSHO = $800000; { output being flushed (state) }
  121. NOKERNINFO = $2000000; { no kernel output from VSTATUS }
  122. PENDIN =$20000000; { XXX retype pending input (state) }
  123. NOFLSH =$80000000; { don't flush after interrupt }
  124. {
  125. * Commands passed to tcsetattr() for setting the termios structure.
  126. }
  127. CONST
  128. TCSANOW =0; { make change immediate }
  129. TCSADRAIN =1; { drain output, then change }
  130. TCSAFLUSH =2; { drain output, flush input }
  131. TCSASOFT =$10; { flag - don't alter h.w. state }
  132. {
  133. * Standard speeds
  134. }
  135. B0 = 0;
  136. B50 = 50;
  137. B75 = 75;
  138. B110 = 110;
  139. B134 = 134;
  140. B150 = 150;
  141. B200 = 200;
  142. B300 = 300;
  143. B600 = 600;
  144. B1200 = 1200;
  145. B1800 = 1800;
  146. B2400 = 2400;
  147. B4800 = 4800;
  148. B9600 = 9600;
  149. B19200 = 19200;
  150. B38400 = 38400;
  151. B7200 = 7200;
  152. B14400 = 14400;
  153. B28800 = 28800;
  154. B57600 = 57600;
  155. B76800 = 76800;
  156. B115200 =115200;
  157. B230400 =230400;
  158. EXTA = 19200;
  159. EXTB = 38400;
  160. TCIFLUSH =1;
  161. TCOFLUSH =2;
  162. TCIOFLUSH =3;
  163. TCOOFF =1;
  164. TCOON =2;
  165. TCIOFF =3;
  166. TCION =4;
  167. (*
  168. #include <sys/cdefs.h>
  169. __BEGIN_DECLS
  170. speed_t cfgetispeed __P((const struct termios * ));
  171. speed_t cfgetospeed __P((const struct termios * ));
  172. int cfsetispeed __P((struct termios *, speed_t));
  173. int cfsetospeed __P((struct termios *, speed_t));
  174. int tcgetattr __P((int, struct termios * ));
  175. int tcsetattr __P((int, int, const struct termios * ));
  176. int tcdrain __P((int));
  177. int tcflow __P((int, int));
  178. int tcflush __P((int, int));
  179. int tcsendbreak __P((int, int));
  180. #ifndef _POSIX_SOURCE
  181. void cfmakeraw __P((struct termios * ));
  182. int cfsetspeed __P((struct termios *, speed_t));
  183. #endif { !_POSIX_SOURCE }
  184. __END_DECLS
  185. #endif { !_KERNEL }
  186. struct winsize {
  187. unsigned short ws_row; { rows, in characters }
  188. unsigned short ws_col; { columns, in characters }
  189. unsigned short ws_xpixel; { horizontal size, pixels }
  190. unsigned short ws_ypixel; { vertical size, pixels }
  191. };
  192. *)
  193. IOCTLREAD = $40000000;
  194. IOCTLWRITE = $80000000;
  195. IOCTLVOID = $20000000;
  196. TIOCMODG = IOCTLREAD+$47400+ 3; { get modem control state }
  197. TIOCMODS = IOCTLWRITE+$47400+ 4; { set modem control state }
  198. TIOCM_LE =$0001; { line enable }
  199. TIOCM_DTR =$0002; { data terminal ready }
  200. TIOCM_RTS =$0004; { request to send }
  201. TIOCM_ST =$0010; { secondary transmit }
  202. TIOCM_SR =$0020; { secondary receive }
  203. TIOCM_CTS =$0040; { clear to send }
  204. TIOCM_CAR =$0100; { carrier detect }
  205. TIOCM_CD =TIOCM_CAR;
  206. TIOCM_RNG =$0200; { ring }
  207. TIOCM_RI =TIOCM_RNG;
  208. TIOCM_DSR =$0400; { data set ready }
  209. { 8-10 compat }
  210. TIOCEXCL =IOCTLVOID+$7400+ 13; { set exclusive use of tty }
  211. TIOCNXCL =IOCTLVOID+$7400+ 14; { reset exclusive use of tty }
  212. { 15 unused }
  213. TIOCFLUSH =IOCTLWRITE+$47400+ 16; { flush buffers }
  214. { 17-18 compat }
  215. TIOCGETA =IOCTLREAD+$2C7400+ 19; { get termios struct }
  216. TIOCSETA =IOCTLWRITE+$2C7400+ 20; { set termios struct }
  217. TIOCSETAW =IOCTLWRITE+$2C7400+ 21; { drain output, set }
  218. TIOCSETAF =IOCTLWRITE+$2C7400+ 22; { drn out, fls in, set }
  219. TIOCGETD =IOCTLREAD+$47400+ 26; { get line discipline }
  220. TIOCSETD =IOCTLWRITE+$47400+ 27; { set line discipline }
  221. { 127-124 compat }
  222. TIOCSBRK =IOCTLVOID+$7400+ 123; { set break bit }
  223. TIOCCBRK =IOCTLVOID+$7400+ 122; { clear break bit }
  224. TIOCSDTR =IOCTLVOID+$7400+ 121; { set data terminal ready }
  225. TIOCCDTR =IOCTLVOID+$7400+ 120; { clear data terminal ready }
  226. TIOCGPGRP =IOCTLREAD+$47400+ 119; { get pgrp of tty }
  227. TIOCSPGRP =IOCTLWRITE+$47400+ 118; { set pgrp of tty }
  228. { 117-116 compat }
  229. TIOCOUTQ =IOCTLREAD+$47400+ 115; { output queue size }
  230. TIOCSTI =IOCTLWRITE+$17400+ 114; { simulate terminal input }
  231. TIOCNOTTY =IOCTLVOID+$7400+ 113; { void tty association }
  232. TIOCPKT =IOCTLWRITE+$47400+ 112; { pty: set/clear packet mode }
  233. TIOCPKT_DATA =$00; { data packet }
  234. TIOCPKT_FLUSHREAD =$01; { flush packet }
  235. TIOCPKT_FLUSHWRITE =$02; { flush packet }
  236. TIOCPKT_STOP =$04; { stop output }
  237. TIOCPKT_START =$08; { start output }
  238. TIOCPKT_NOSTOP =$10; { no more ^S, ^Q }
  239. TIOCPKT_DOSTOP =$20; { now do ^S ^Q }
  240. TIOCPKT_IOCTL =$40; { state change of pty driver }
  241. TIOCSTOP =IOCTLVOID+$7400+ 111; { stop output, like ^S }
  242. TIOCSTART =IOCTLVOID+$7400+ 110; { start output, like ^Q }
  243. TIOCMSET =IOCTLWRITE+$47400+ 109; { set all modem bits }
  244. TIOCMBIS =IOCTLWRITE+$47400+ 108; { bis modem bits }
  245. TIOCMBIC =IOCTLWRITE+$47400+ 107; { bic modem bits }
  246. TIOCMGET =IOCTLREAD+$47400+ 106; { get all modem bits }
  247. TIOCREMOTE =IOCTLWRITE+$47400+ 105; { remote input editing }
  248. TIOCGWINSZ =IOCTLREAD+$87400+ 104; { get window size }
  249. TIOCSWINSZ =IOCTLWRITE+$87400+ 103; { set window size }
  250. TIOCUCNTL =IOCTLWRITE+$47400+ 102; { pty: set/clr usr cntl mode }
  251. TIOCSTAT =IOCTLVOID+$7400+ 101; { simulate ^T status message }
  252. // UIOCCMD(n) _IO('u', n) { usr cntl op "n" }
  253. TIOCCONS =IOCTLWRITE+$47400+ 98; { become virtual console }
  254. TIOCSCTTY =IOCTLVOID+$7400+ 97; { become controlling tty }
  255. TIOCEXT =IOCTLWRITE+$47400+ 96; { pty: external processing }
  256. TIOCSIG =IOCTLVOID+$7400+ 95; { pty: generate signal }
  257. TIOCDRAIN =IOCTLVOID+$7400+ 94; { wait till output drained }
  258. TIOCMSDTRWAIT =IOCTLWRITE+$47400+ 91; { modem: set wait on close }
  259. TIOCMGDTRWAIT =IOCTLREAD+$47400+ 90; { modem: get wait on close }
  260. TIOCTIMESTAMP =IOCTLREAD+$87400+ 89; { enable/get timestamp
  261. * of last input event }
  262. TIOCDCDTIMESTAMP =IOCTLREAD+$87400+ 88; { enable/get timestamp
  263. * of last DCd rise }
  264. TIOCSDRAINWAIT =IOCTLWRITE+$47400+ 87; { set ttywait timeout }
  265. TIOCGDRAINWAIT =IOCTLREAD+$47400+ 86; { get ttywait timeout }
  266. TTYDISC =0; { termios tty line discipline }
  267. SLIPDISC =4; { serial IP discipline }
  268. PPPDISC =5; { PPP discipline }
  269. NETGRAPHDISC =6; { Netgraph tty node discipline }
  270. {
  271. * Defaults on "first" open.
  272. }
  273. TTYDEF_IFLAG =(BRKINT or ICRNL or IMAXBEL or IXON or IXANY);
  274. TTYDEF_OFLAG =(OPOST or ONLCR);
  275. TTYDEF_LFLAG =(ECHO or ICANON or ISIG or IEXTEN or ECHOE or ECHOKE or ECHOCTL);
  276. TTYDEF_CFLAG =(CREAD or CS8 or HUPCL);
  277. TTYDEF_SPEED =(B9600);
  278. {
  279. * Control Character Defaults
  280. }
  281. CtrlMask = $1f; {\037}
  282. CEOF =chr( ORD('d') and CtrlMask);
  283. CEOL =chr( $ff and CtrlMask);{ XXX avoid _POSIX_VDISABLE }
  284. CERASE =chr( $7F and CtrlMask);
  285. CINTR =chr(ORD('c') and CtrlMask);
  286. CSTATUS =chr(ORD('t') and CtrlMask);
  287. CKILL =chr(ORD('u') and CtrlMask);
  288. CMIN =chr(1);
  289. CQUIT =chr(034 and CtrlMask); { FS, ^\ }
  290. CSUSP =chr(ORD('z') and CtrlMask);
  291. CTIME =chr(0);
  292. CDSUSP =chr(ORD('y') and CtrlMask);
  293. CSTART =chr(ORD('q') and CtrlMask);
  294. CSTOP =chr(ORD('s') and CtrlMask);
  295. CLNEXT =chr(ORD('v') and CtrlMask);
  296. CDISCARD =chr(ORD('o') and CtrlMask);
  297. CWERASE =chr(ORD('w') and CtrlMask);
  298. CREPRINT =chr(ORD('r') and CtrlMask);
  299. CEOT =CEOF;
  300. { compat }
  301. CBRK =CEOL;
  302. CRPRNT =CREPRINT;
  303. CFLUSH =CDISCARD;
  304. {
  305. * TTYDEFCHARS to include an array of default control characters.
  306. }
  307. ttydefchars : array[0..NCCS-1] OF char =(
  308. CEOF, CEOL, CEOL, CERASE, CWERASE, CKILL, CREPRINT,
  309. POSIX_VDISABLE, CINTR, CQUIT, CSUSP, CDSUSP, CSTART, CSTOP, CLNEXT,
  310. CDISCARD, CMIN, CTIME, CSTATUS, POSIX_VDISABLE);