termios.inc 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. const
  2. { Disable special character functions }
  3. _POSIX_VDISABLE = 0;
  4. { was #define dname(params) para_def_expr }
  5. { argument types are unknown }
  6. const
  7. IBSHIFT = 16;
  8. { required by termio.h and VCEOF/VCEOL }
  9. const
  10. _NCC = 8;
  11. const
  12. NCC = _NCC;
  13. { some defines required by POSIX }
  14. const
  15. NCCS = 19;
  16. {
  17. * types defined by POSIX. These are better off in types.h, but
  18. * the standard says that they have to be in termios.h.
  19. }
  20. type
  21. tcflag_t = dword;
  22. cc_t = byte;
  23. speed_t = dword;
  24. {
  25. * Ioctl control packet
  26. }
  27. ptermios = ^termios;
  28. termios = record
  29. { input modes }
  30. c_iflag : tcflag_t;
  31. { output modes }
  32. c_oflag : tcflag_t;
  33. { control modes }
  34. c_cflag : tcflag_t;
  35. { line discipline modes }
  36. c_lflag : tcflag_t;
  37. { control chars }
  38. c_cc : array[0..(NCCS)-1] of cc_t;
  39. end;
  40. ttermios = termios;
  41. {
  42. * POSIX termios functions
  43. * These functions get mapped into ioctls.
  44. }
  45. (* Const before type ignored *)
  46. function cfgetospeed(_para1:Ptermios):speed_t;cdecl;external;
  47. function cfsetospeed(_para1:Ptermios; _para2:speed_t):cint;cdecl;external;
  48. (* Const before type ignored *)
  49. function cfgetispeed(_para1:Ptermios):speed_t;cdecl;external;
  50. function cfsetispeed(_para1:Ptermios; _para2:speed_t):cint;cdecl;external;
  51. function tcgetattr(_para1:cint; var _para2:termios):cint;cdecl;external;
  52. function tcgetattr(_para1:cint; _para2:Ptermios):cint;cdecl;external;
  53. (* Const before type ignored *)
  54. function tcsetattr(_para1:cint; _para2:cint; _para3:Ptermios):cint;cdecl;external;
  55. (* Const before type ignored *)
  56. function tcsetattr(_para1:cint; _para2:cint; const _para3:termios):cint;cdecl;
  57. // function tcsendbreak(_para1:cint; _para2:cint):cint;cdecl;
  58. // function tcdrain(_para1:cint):cint;cdecl;
  59. // function tcflush(_para1:cint; _para2:cint):cint;cdecl;
  60. // function tcflow(_para1:cint; _para2:cint):cint;cdecl;
  61. function tcgetsid(_para1:cint):pid_t;cdecl;external;
  62. function tcgetsid:pid_t;cdecl;external;
  63. { control characters }
  64. const
  65. VINTR = 0;
  66. VQUIT = 1;
  67. VERASE = 2;
  68. VKILL = 3;
  69. VEOF = 4;
  70. VEOL = 5;
  71. const
  72. VEOL2 = 6;
  73. const
  74. VMIN = 4;
  75. VTIME = 5;
  76. const
  77. VSWTCH = 7;
  78. const
  79. VSTART = 8;
  80. VSTOP = 9;
  81. VSUSP = 10;
  82. const
  83. VDSUSP = 11;
  84. VREPRINT = 12;
  85. VDISCARD = 13;
  86. VWERASE = 14;
  87. VLNEXT = 15;
  88. { 16 thru 19 reserved for future use }
  89. {
  90. * control characters form Xenix termio.h
  91. }
  92. { RESERVED true EOF char (V7 compatability) }
  93. VCEOF = NCC;
  94. { RESERVED true EOL char }
  95. VCEOL = NCC+1;
  96. CNUL = 0;
  97. CDEL = 0177;
  98. { S5 default control chars }
  99. { CINTR, CERASE and CKILL modified to SunOS traditional values }
  100. CESC = '\\';
  101. { return type might be wrong }
  102. { FS, cntl | }
  103. const
  104. CQUIT = 034;
  105. { DEL }
  106. CERASE = 0177;
  107. { was #define dname def_expr }
  108. const
  109. CEOT = 04;
  110. CEOL = 0;
  111. CEOL2 = 0;
  112. { cntl d }
  113. CEOF = 04;
  114. { cntl q }
  115. CSTART = 021;
  116. { cntl s }
  117. CSTOP = 023;
  118. { cntl z }
  119. CSWTCH = 032;
  120. CNSWTCH = 0;
  121. {
  122. { was #define dname def_expr }
  123. function CSUSP : longint;
  124. { return type might be wrong }
  125. { was #define dname def_expr }
  126. function CDSUSP : longint;
  127. { return type might be wrong }
  128. { was #define dname def_expr }
  129. function CRPRNT : longint;
  130. { return type might be wrong }
  131. { was #define dname def_expr }
  132. function CFLUSH : longint;
  133. { return type might be wrong }
  134. { was #define dname def_expr }
  135. function CWERASE : longint;
  136. { return type might be wrong }
  137. { was #define dname def_expr }
  138. function CLNEXT : longint;
  139. { return type might be wrong }
  140. }
  141. { input modes }
  142. const
  143. IGNBRK = &0000001;
  144. BRKINT = &0000002;
  145. IGNPAR = &0000004;
  146. PARMRK = &0000010;
  147. INPCK = &0000020;
  148. ISTRIP = &0000040;
  149. INLCR = &0000100;
  150. IGNCR = &0000200;
  151. ICRNL = &0000400;
  152. IUCLC = &0001000;
  153. IXON = &0002000;
  154. IXANY = &0004000;
  155. IXOFF = &0010000;
  156. IMAXBEL = &0020000;
  157. { for 386 compatibility }
  158. DOSMODE = 0100000;
  159. { output modes }
  160. OPOST = &0000001;
  161. OLCUC = &0000002;
  162. ONLCR = &0000004;
  163. OCRNL = &0000010;
  164. ONOCR = &0000020;
  165. ONLRET = &0000040;
  166. OFILL = &0000100;
  167. OFDEL = &0000200;
  168. NLDLY = &0000400;
  169. NL0 = 0;
  170. NL1 = &0000400;
  171. CRDLY = &0003000;
  172. CR0 = 0;
  173. CR1 = &0001000;
  174. CR2 = &0002000;
  175. CR3 = &0003000;
  176. TABDLY = &0014000;
  177. TAB0 = 0;
  178. TAB1 = &0004000;
  179. TAB2 = &0010000;
  180. TAB3 = &0014000;
  181. XTABS = &0014000;
  182. BSDLY = &0020000;
  183. BS0 = 0;
  184. BS1 = &0020000;
  185. VTDLY = &0040000;
  186. VT0 = 0;
  187. VT1 = &0040000;
  188. FFDLY = 0100000;
  189. FF0 = 0;
  190. FF1 = 0100000;
  191. PAGEOUT = 0200000;
  192. WRAP = 0400000;
  193. { control modes }
  194. CBAUD = &0000017;
  195. CSIZE = &0000060;
  196. CS5 = 0;
  197. CS6 = &0000020;
  198. CS7 = &0000040;
  199. CS8 = &0000060;
  200. CSTOPB = &0000100;
  201. CREAD = &0000200;
  202. PARENB = &0000400;
  203. PARODD = &0001000;
  204. HUPCL = &0002000;
  205. CLOCAL = &0004000;
  206. RCV1EN = &0010000;
  207. XMT1EN = &0020000;
  208. LOBLK = &0040000;
  209. { *V7* exclusive use coming fron XENIX }
  210. XCLUDE = 0100000;
  211. CRTSXOFF = 010000000000;
  212. CRTSCTS = 020000000000;
  213. CIBAUD = 03600000;
  214. PAREXT = 04000000;
  215. CBAUDEXT = 010000000;
  216. CIBAUDEXT = 020000000;
  217. {
  218. * 4.4BSD hardware flow control flags
  219. }
  220. CRTS_IFLOW = 010000000000;
  221. CCTS_OFLOW = 020000000000;
  222. { line discipline 0 modes }
  223. ISIG = &0000001;
  224. ICANON = &0000002;
  225. XCASE = &0000004;
  226. ECHO = &0000010;
  227. ECHOE = &0000020;
  228. ECHOK = &0000040;
  229. ECHONL = &0000100;
  230. NOFLSH = &0000200;
  231. TOSTOP = &0000400;
  232. ECHOCTL = &0001000;
  233. ECHOPRT = &0002000;
  234. ECHOKE = &0004000;
  235. DEFECHO = &0010000;
  236. FLUSHO = &0020000;
  237. PENDIN = &0040000;
  238. { POSIX flag - enable POSIX extensions }
  239. IEXTEN = &0100000;
  240. _TIOC = ord('T') shl 8;
  241. TIOC = _TIOC;
  242. TCGETA = _TIOC or 1;
  243. TCSETA = _TIOC or 2;
  244. TCSETAW = _TIOC or 3;
  245. TCSETAF = _TIOC or 4;
  246. TCSBRK = _TIOC or 5;
  247. TCXONC = _TIOC or 6;
  248. TCFLSH = _TIOC or 7;
  249. { Slots reserved for 386/XENIX compatibility - keyboard control }
  250. TIOCKBON = _TIOC or 8;
  251. TIOCKBOF = _TIOC or 9;
  252. KBENABLED = _TIOC or 10;
  253. IOCTYPE = $ff00;
  254. TCDSET = _TIOC or 32;
  255. { 386 - "RTS" toggle define 8A1 protocol }
  256. RTS_TOG = _TIOC or 33;
  257. TIOCGWINSZ = _TIOC or 104;
  258. TIOCSWINSZ = _TIOC or 103;
  259. {
  260. * Softcarrier ioctls
  261. }
  262. TIOCGSOFTCAR = _TIOC or 105;
  263. TIOCSSOFTCAR = _TIOC or 106;
  264. { termios ioctls }
  265. TCGETS = _TIOC or 13;
  266. TCSETS = _TIOC or 14;
  267. { same as TCSETS }
  268. TCSANOW = _TIOC or 14;
  269. TCSETSW = _TIOC or 15;
  270. { same as TCSETSW }
  271. TCSADRAIN = _TIOC or 15;
  272. TCSETSF = _TIOC or 16;
  273. {
  274. * NTP PPS ioctls
  275. }
  276. TIOCGPPS = _TIOC or 125;
  277. TIOCSPPS = _TIOC or 126;
  278. TIOCGPPSEV = _TIOC or 127;
  279. { Argument filled in by TIOCGPPSEV }
  280. type
  281. ppsclockev = record
  282. tv : timeval;
  283. serial : cuint;
  284. end;
  285. ppsclockev32 = record
  286. tv : timeval32;
  287. serial : cuint32;
  288. end;
  289. { same as TCSETSF }
  290. const
  291. TCSAFLUSH = _TIOC or 16;
  292. { termios option flags }
  293. { flush data received but not read }
  294. TCIFLUSH = 0;
  295. { flush data written but not transmitted }
  296. TCOFLUSH = 1;
  297. { flush both data both input and output queues }
  298. TCIOFLUSH = 2;
  299. { suspend output }
  300. TCOOFF = 0;
  301. { restart suspended output }
  302. TCOON = 1;
  303. { suspend input }
  304. TCIOFF = 2;
  305. { restart suspended input }
  306. TCION = 3;
  307. { Slots for 386/XENIX compatibility }
  308. { BSD includes these ioctls in ttold.h }
  309. const
  310. TIOCGETD = tIOC or 0;
  311. TIOCSETD = tIOC or 1;
  312. TIOCHPCL = tIOC or 2;
  313. TIOCGETP = tIOC or 8;
  314. TIOCSETP = tIOC or 9;
  315. TIOCSETN = tIOC or 10;
  316. TIOCEXCL = tIOC or 13;
  317. TIOCNXCL = tIOC or 14;
  318. TIOCFLUSH = tIOC or 16;
  319. TIOCSETC = tIOC or 17;
  320. TIOCGETC = tIOC or 18;
  321. {
  322. * BSD ioctls that are not the same as XENIX are included here.
  323. * There are also some relevant ioctls from SUN/BSD sys/ttycom.h
  324. * BSD pty ioctls like TIOCPKT are not supported in SVR4.
  325. }
  326. { bis local mode bits }
  327. TIOCLBIS = tIOC or 127;
  328. { bic local mode bits }
  329. TIOCLBIC = tIOC or 126;
  330. { set entire local mode word }
  331. TIOCLSET = tIOC or 125;
  332. { get local modes }
  333. TIOCLGET = tIOC or 124;
  334. { set break bit }
  335. TIOCSBRK = tIOC or 123;
  336. { clear break bit }
  337. TIOCCBRK = tIOC or 122;
  338. { set data terminal ready }
  339. TIOCSDTR = tIOC or 121;
  340. { clear data terminal ready }
  341. TIOCCDTR = tIOC or 120;
  342. { set local special chars }
  343. TIOCSLTC = tIOC or 117;
  344. { get local special chars }
  345. TIOCGLTC = tIOC or 116;
  346. { driver output queue size }
  347. TIOCOUTQ = tIOC or 115;
  348. { void tty association }
  349. TIOCNOTTY = tIOC or 113;
  350. { stop output, like ^S }
  351. TIOCSTOP = tIOC or 111;
  352. { start output, like ^Q }
  353. TIOCSTART = tIOC or 110;
  354. { private to Sun; do not use }
  355. TIOCSILOOP = tIOC or 109;
  356. { end _SYS_TTOLD_H }
  357. { POSIX job control ioctls }
  358. { get pgrp of tty }
  359. const
  360. TIOCGPGRP = tIOC or 20;
  361. { set pgrp of tty }
  362. TIOCSPGRP = tIOC or 21;
  363. { get session id on ctty }
  364. TIOCGSID = tIOC or 22;
  365. { Miscellaneous }
  366. { simulate terminal input }
  367. TIOCSTI = tIOC or 23;
  368. { Modem control }
  369. { set all modem bits }
  370. TIOCMSET = tIOC or 26;
  371. { bis modem bits }
  372. TIOCMBIS = tIOC or 27;
  373. { bic modem bits }
  374. TIOCMBIC = tIOC or 28;
  375. { get all modem bits }
  376. TIOCMGET = tIOC or 29;
  377. { line enable }
  378. TIOCM_LE = &0001;
  379. { data terminal ready }
  380. TIOCM_DTR = &0002;
  381. { request to send }
  382. TIOCM_RTS = &0004;
  383. { secondary transmit }
  384. TIOCM_ST = &0010;
  385. { secondary receive }
  386. TIOCM_SR = &0020;
  387. { clear to send }
  388. TIOCM_CTS = &0040;
  389. { carrier detect }
  390. TIOCM_CAR = &0100;
  391. TIOCM_CD = TIOCM_CAR;
  392. { ring }
  393. TIOCM_RNG = &0200;
  394. TIOCM_RI = TIOCM_RNG;
  395. { data set ready }
  396. TIOCM_DSR = &0400;
  397. { pseudo-tty }
  398. { remote input editing }
  399. TIOCREMOTE = tIOC or 30;
  400. { pty: send signal to slave }
  401. TIOCSIGNAL = tIOC or 31;
  402. { Some more 386 xenix stuff }
  403. LDIOC = ord('D') shl 8;
  404. LDOPEN = LDIOC or 0;
  405. LDCLOSE = LDIOC or 1;
  406. LDCHG = LDIOC or 2;
  407. LDGETT = LDIOC or 8;
  408. LDSETT = LDIOC or 9;
  409. { Slots for 386 compatibility }
  410. LDSMAP = LDIOC or 110;
  411. LDGMAP = LDIOC or 111;
  412. LDNMAP = LDIOC or 112;
  413. LDEMAP = LDIOC or 113;
  414. LDDMAP = LDIOC or 114;
  415. {
  416. * These are retained for 386/XENIX compatibility.
  417. }
  418. DIOC = ord('d') shl 8;
  419. { V7 }
  420. DIOCGETP = DIOC or 8;
  421. { V7 }
  422. DIOCSETP = DIOC or 9;
  423. {
  424. * Returns a non-zero value if there
  425. * are characters in the input queue.
  426. *
  427. * XXX - somebody is confused here. V7 had no such "ioctl", although XENIX may
  428. * have added it; 4BSD had FIONREAD, which returned the number of characters
  429. * waiting, and was supposed to work on all descriptors (i.e., every driver
  430. * should make a stab at implementing it).
  431. }
  432. { V7 }
  433. FIORDCHK = (ord('f') shl 8) or 3;
  434. {
  435. * Speeds
  436. }
  437. { parameter length, at most 255 bytes }
  438. IOCPARM_MASK = $ff;
  439. { max size of ioctl args }
  440. IOCPARM_MAX = IOCPARM_MASK + 1;
  441. { no parameters }
  442. IOC_VOID = culong($20000000);
  443. { copy parameters out }
  444. IOC_OUT = culong($40000000);
  445. { copy parameters in }
  446. IOC_IN = culong($80000000);
  447. { copy paramters in and out }
  448. IOC_INOUT = (IOC_IN or IOC_OUT);
  449. { mask for IN/OUT/VOID }
  450. IOC_DIRMASK = culong($e0000000);
  451. FIOCLEX = (IOC_VOID or (0 and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 1);
  452. FIONCLEX = (IOC_VOID or (0 and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 2);
  453. FIONREAD = (IOC_OUT or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 127);
  454. FIONBIO = (IOC_IN or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 126);
  455. FIOASYNC = (IOC_IN or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 125);
  456. FIOSETOWN = (IOC_IN or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 124);
  457. FIOGETOWN = (IOC_OUT or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 123);
  458. FIODTYPE = (IOC_OUT or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 122);
  459. const
  460. B0 = 0;
  461. B50 = 1;
  462. B75 = 2;
  463. B110 = 3;
  464. B134 = 4;
  465. B150 = 5;
  466. B200 = 6;
  467. B300 = 7;
  468. B600 = 8;
  469. B1200 = 9;
  470. B1800 = 10;
  471. B2400 = 11;
  472. B4800 = 12;
  473. B9600 = 13;
  474. B19200 = 14;
  475. B38400 = 15;
  476. B57600 = 16;
  477. B76800 = 17;
  478. B115200 = 18;
  479. B153600 = 19;
  480. B230400 = 20;
  481. B307200 = 21;
  482. B460800 = 22;
  483. { Windowing structure to support JWINSIZE/TIOCSWINSZ/TIOCGWINSZ }
  484. { rows, in characters }
  485. { columns, in character }
  486. { horizontal size, pixels }
  487. { vertical size, pixels }
  488. type
  489. winsize = record
  490. ws_row : word;
  491. ws_col : word;
  492. ws_xpixel : word;
  493. ws_ypixel : word;
  494. end;
  495. twinsize = winsize;
  496. pwinsize = ^twinsize;
  497. const
  498. { alias for FPC rtl }
  499. TIOCGETA = _TIOC or 1;
  500. TIOCSETA = _TIOC or 2;
  501. TIOCSETAW = _TIOC or 3;
  502. TIOCSETAF = _TIOC or 4;
  503. { same as TCSETSW }
  504. TIOCDRAIN = _TIOC or 15;