1 /**
2 * D header file for POSIX.
3 *
4 * Copyright: Public Domain
5 * License: Public Domain
6 * Authors: Sean Kelly
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8 */
9 module tango.stdc.posix.termios;
10
11 private import tango.stdc.posix.config;
12 public import tango.stdc.posix.sys.types; // for pid_t
13 private import tango.core.Octal;
14 extern (C):
15
16 //
17 // Required
18 //
19 /*
20 cc_t
21 speed_t
22 tcflag_t
23
24 NCCS
25
26 struct termios
27 {
28 tcflag_t c_iflag;
29 tcflag_t c_oflag;
30 tcflag_t c_cflag;
31 tcflag_t c_lflag;
32 cc_t[NCCS] c_cc;
33 }
34
35 VEOF
36 VEOL
37 VERASE
38 VINTR
39 VKILL
40 VMIN
41 VQUIT
42 VSTART
43 VSTOP
44 VSUSP
45 VTIME
46
47 BRKINT
48 ICRNL
49 IGNBRK
50 IGNCR
51 IGNPAR
52 INLCR
53 INPCK
54 ISTRIP
55 IXOFF
56 IXON
57 PARMRK
58
59 OPOST
60
61 B0
62 B50
63 B75
64 B110
65 B134
66 B150
67 B200
68 B300
69 B600
70 B1200
71 B1800
72 B2400
73 B4800
74 B9600
75 B19200
76 B38400
77
78 CSIZE
79 CS5
80 CS6
81 CS7
82 CS8
83 CSTOPB
84 CREAD
85 PARENB
86 PARODD
87 HUPCL
88 CLOCAL
89
90 ECHO
91 ECHOE
92 ECHOK
93 ECHONL
94 ICANON
95 IEXTEN
96 ISIG
97 NOFLSH
98 TOSTOP
99
100 TCSANOW
101 TCSADRAIN
102 TCSAFLUSH
103
104 TCIFLUSH
105 TCIOFLUSH
106 TCOFLUSH
107
108 TCIOFF
109 TCION
110 TCOOFF
111 TCOON
112
113 speed_t cfgetispeed(in termios*);
114 speed_t cfgetospeed(in termios*);
115 int cfsetispeed(termios*, speed_t);
116 int cfsetospeed(termios*, speed_t);
117 int tcdrain(int);
118 int tcflow(int, int);
119 int tcflush(int, int);
120 int tcgetattr(int, termios*);
121 int tcsendbreak(int, int);
122 int tcsetattr(int, int, in termios*);
123 */
124
125 version(OSX)
126 {
127 alias ubyte cc_t;
128 alias uint speed_t;
129 alias uint tcflag_t;
130
131 const NCCS = 20;
132
133 struct termios
134 {
135 tcflag_t c_iflag;
136 tcflag_t c_oflag;
137 tcflag_t c_cflag;
138 tcflag_t c_lflag;
139 cc_t[NCCS] c_cc;
140 speed_t c_ispeed;
141 speed_t c_ospeed;
142 }
143
144 const VEOF = 0;
145 const VEOL = 1;
146 const VERASE = 3;
147 const VINTR = 8;
148 const VKILL = 5;
149 const VMIN = 16;
150 const VQUIT = 9;
151 const VSTART = 12;
152 const VSTOP = 13;
153 const VSUSP = 10;
154 const VTIME = 17;
155
156 const BRKINT = 0x0000002;
157 const ICRNL = 0x0000100;
158 const IGNBRK = 0x0000001;
159 const IGNCR = 0x0000080;
160 const IGNPAR = 0x0000004;
161 const INLCR = 0x0000040;
162 const INPCK = 0x0000010;
163 const ISTRIP = 0x0000020;
164 const IXOFF = 0x0000400;
165 const IXON = 0x0000200;
166 const PARMRK = 0x0000008;
167
168 const OPOST = 0x0000001;
169
170 // Posix baudrates
171 const B0 = 0;
172 const B50 = 50;
173 const B75 = 75;
174 const B110 = 110;
175 const B134 = 134;
176 const B150 = 150;
177 const B200 = 200;
178 const B300 = 300;
179 const B600 = 600;
180 const B1200 = 1200;
181 const B1800 = 1800;
182 const B2400 = 2400;
183 const B4800 = 4800;
184 const B9600 = 9600;
185 const B19200 = 19200;
186 const B38400 = 38400;
187
188 // Non-Posix baudrates
189 const B7200 = 7200;
190 const B14400 = 14400;
191 const B28800 = 28800;
192 const B57600 = 57600;
193 const B76800 = 76800;
194 const B115200 = 115200;
195 const B230400 = 230400;
196
197 const CSIZE = 0x0000300;
198 const CS5 = 0x0000000;
199 const CS6 = 0x0000100;
200 const CS7 = 0x0000200;
201 const CS8 = 0x0000300;
202 const CSTOPB = 0x0000400;
203 const CREAD = 0x0000800;
204 const PARENB = 0x0001000;
205 const PARODD = 0x0002000;
206 const HUPCL = 0x0004000;
207 const CLOCAL = 0x0008000;
208
209 const ECHO = 0x00000008;
210 const ECHOE = 0x00000002;
211 const ECHOK = 0x00000004;
212 const ECHONL = 0x00000010;
213 const ICANON = 0x00000100;
214 const IEXTEN = 0x00000400;
215 const ISIG = 0x00000080;
216 const NOFLSH = 0x80000000;
217 const TOSTOP = 0x00400000;
218
219 const TCSANOW = 0;
220 const TCSADRAIN = 1;
221 const TCSAFLUSH = 2;
222
223 const TCIFLUSH = 1;
224 const TCOFLUSH = 2;
225 const TCIOFLUSH = 3;
226
227 const TCIOFF = 3;
228 const TCION = 4;
229 const TCOOFF = 1;
230 const TCOON = 2;
231
232 speed_t cfgetispeed(in termios*);
233 speed_t cfgetospeed(in termios*);
234 int cfsetispeed(termios*, speed_t);
235 int cfsetospeed(termios*, speed_t);
236 int tcdrain(int);
237 int tcflow(int, int);
238 int tcflush(int, int);
239 int tcgetattr(int, termios*);
240 int tcsendbreak(int, int);
241 int tcsetattr(int, int, in termios*);
242
243 }
244 else version( linux )
245 {
246 alias ubyte cc_t;
247 alias uint speed_t;
248 alias uint tcflag_t;
249
250 const NCCS = 32;
251
252 struct termios
253 {
254 tcflag_t c_iflag;
255 tcflag_t c_oflag;
256 tcflag_t c_cflag;
257 tcflag_t c_lflag;
258 cc_t c_line;
259 cc_t[NCCS] c_cc;
260 speed_t c_ispeed;
261 speed_t c_ospeed;
262 }
263
264 const VEOF = 4;
265 const VEOL = 11;
266 const VERASE = 2;
267 const VINTR = 0;
268 const VKILL = 3;
269 const VMIN = 6;
270 const VQUIT = 1;
271 const VSTART = 8;
272 const VSTOP = 9;
273 const VSUSP = 10;
274 const VTIME = 5;
275
276 const BRKINT = octal!2;
277 const ICRNL = octal!400;
278 const IGNBRK = octal!1;
279 const IGNCR = octal!200;
280 const IGNPAR = octal!4;
281 const INLCR = octal!100;
282 const INPCK = octal!20;
283 const ISTRIP = octal!40;
284 const IXOFF = octal!10000;
285 const IXON = octal!2000;
286 const PARMRK = octal!10;
287
288 const OPOST = octal!1;
289
290 // Posix baudrates
291 const B0 = 0;
292 const B50 = octal!1;
293 const B75 = octal!2;
294 const B110 = octal!3;
295 const B134 = octal!4;
296 const B150 = octal!5;
297 const B200 = octal!6;
298 const B300 = octal!7;
299 const B600 = octal!10;
300 const B1200 = octal!11;
301 const B1800 = octal!12;
302 const B2400 = octal!13;
303 const B4800 = octal!14;
304 const B9600 = octal!15;
305 const B19200 = octal!16;
306 const B38400 = octal!17;
307
308 // Non-Posix baudrates
309 const B57600 = octal!10001;
310 const B115200 = octal!10002;
311 const B230400 = octal!10003;
312 const B460800 = octal!10004;
313 const B500000 = octal!10005;
314 const B576000 = octal!10006;
315 const B921600 = octal!10007;
316 const B1000000 = octal!10010;
317 const B1152000 = octal!10011;
318 const B1500000 = octal!10012;
319 const B2000000 = octal!10013;
320 const B2500000 = octal!10014;
321 const B3000000 = octal!10015;
322 const B3500000 = octal!10016;
323 const B4000000 = octal!10017;
324
325 const CSIZE = octal!60;
326 const CS5 = 0;
327 const CS6 = octal!20;
328 const CS7 = octal!40;
329 const CS8 = octal!60;
330 const CSTOPB = octal!100;
331 const CREAD = octal!200;
332 const PARENB = octal!400;
333 const PARODD = octal!1000;
334 const HUPCL = octal!2000;
335 const CLOCAL = octal!4000;
336
337 const ECHO = octal!10;
338 const ECHOE = octal!20;
339 const ECHOK = octal!40;
340 const ECHONL = octal!100;
341 const ICANON = octal!2;
342 const IEXTEN = octal!100000;
343 const ISIG = octal!1;
344 const NOFLSH = octal!200;
345 const TOSTOP = octal!400;
346
347 const TCSANOW = 0;
348 const TCSADRAIN = 1;
349 const TCSAFLUSH = 2;
350
351 const TCIFLUSH = 0;
352 const TCOFLUSH = 1;
353 const TCIOFLUSH = 2;
354
355 const TCIOFF = 2;
356 const TCION = 3;
357 const TCOOFF = 0;
358 const TCOON = 1;
359
360 speed_t cfgetispeed(in termios*);
361 speed_t cfgetospeed(in termios*);
362 int cfsetispeed(termios*, speed_t);
363 int cfsetospeed(termios*, speed_t);
364 int tcdrain(int);
365 int tcflow(int, int);
366 int tcflush(int, int);
367 int tcgetattr(int, termios*);
368 int tcsendbreak(int, int);
369 int tcsetattr(int, int, in termios*);
370 }
371 else version (FreeBSD)
372 {
373 alias ubyte cc_t;
374 alias uint speed_t;
375 alias uint tcflag_t;
376
377 const NCCS = 20;
378
379 struct termios
380 {
381 tcflag_t c_iflag;
382 tcflag_t c_oflag;
383 tcflag_t c_cflag;
384 tcflag_t c_lflag;
385 cc_t[NCCS] c_cc;
386 speed_t c_ispeed;
387 speed_t c_ospeed;
388 }
389
390 const VEOF = 0;
391 const VEOL = 1;
392 const VERASE = 3;
393 const VINTR = 8;
394 const VKILL = 5;
395 const VMIN = 16;
396 const VQUIT = 9;
397 const VSTART = 12;
398 const VSTOP = 13;
399 const VSUSP = 10;
400 const VTIME = 17;
401
402 const BRKINT = 0x0000002;
403 const ICRNL = 0x0000100;
404 const IGNBRK = 0x0000001;
405 const IGNCR = 0x0000080;
406 const IGNPAR = 0x0000004;
407 const INLCR = 0x0000040;
408 const INPCK = 0x0000010;
409 const ISTRIP = 0x0000020;
410 const IXOFF = 0x0000400;
411 const IXON = 0x0000200;
412 const PARMRK = 0x0000008;
413
414 const OPOST = 0x0000001;
415
416 // Posix baudrates
417 const B0 = 0;
418 const B50 = 50;
419 const B75 = 75;
420 const B110 = 110;
421 const B134 = 134;
422 const B150 = 150;
423 const B200 = 200;
424 const B300 = 300;
425 const B600 = 600;
426 const B1200 = 1200;
427 const B1800 = 1800;
428 const B2400 = 2400;
429 const B4800 = 4800;
430 const B9600 = 9600;
431 const B19200 = 19200;
432 const B38400 = 38400;
433
434 // Non-Posix baudrates
435 const B7200 = 7200;
436 const B14400 = 14400;
437 const B28800 = 28800;
438 const B57600 = 57600;
439 const B76800 = 76800;
440 const B115200 = 115200;
441 const B230400 = 230400;
442 const B460800 = 460800;
443 const B921600 = 921600;
444
445 const CSIZE = 0x0000300;
446 const CS5 = 0x0000000;
447 const CS6 = 0x0000100;
448 const CS7 = 0x0000200;
449 const CS8 = 0x0000300;
450 const CSTOPB = 0x0000400;
451 const CREAD = 0x0000800;
452 const PARENB = 0x0001000;
453 const PARODD = 0x0002000;
454 const HUPCL = 0x0004000;
455 const CLOCAL = 0x0008000;
456
457 const ECHO = 0x00000008;
458 const ECHOE = 0x00000002;
459 const ECHOK = 0x00000004;
460 const ECHONL = 0x00000010;
461 const ICANON = 0x00000100;
462 const IEXTEN = 0x00000400;
463 const ISIG = 0x00000080;
464 const NOFLSH = 0x80000000;
465 const TOSTOP = 0x00400000;
466
467 const TCSANOW = 0;
468 const TCSADRAIN = 1;
469 const TCSAFLUSH = 2;
470
471 const TCIFLUSH = 1;
472 const TCOFLUSH = 2;
473 const TCIOFLUSH = 3;
474
475 const TCIOFF = 3;
476 const TCION = 4;
477 const TCOOFF = 1;
478 const TCOON = 2;
479
480 speed_t cfgetispeed(in termios*);
481 speed_t cfgetospeed(in termios*);
482 int cfsetispeed(termios*, speed_t);
483 int cfsetospeed(termios*, speed_t);
484 int tcdrain(int);
485 int tcflow(int, int);
486 int tcflush(int, int);
487 int tcgetattr(int, termios*);
488 int tcsendbreak(int, int);
489 int tcsetattr(int, int, in termios*);
490
491 }
492 else version ( solaris )
493 {
494 alias ubyte cc_t;
495 alias uint speed_t;
496 alias uint tcflag_t;
497
498 const NCCS = 19;
499
500 struct termios
501 {
502 tcflag_t c_iflag; /* input modes */
503 tcflag_t c_oflag; /* output modes */
504 tcflag_t c_cflag; /* control modes */
505 tcflag_t c_lflag; /* line discipline modes */
506 cc_t[NCCS] c_cc; /* control chars */
507 }
508
509 const VEOF = 4;
510 const VEOL = 5;
511 const VERASE = 2;
512 const VINTR = 0;
513 const VKILL = 3;
514 const VMIN = 4;
515 const VQUIT = 1;
516 const VSTART = 8;
517 const VSTOP = 9;
518 const VSUSP = 11;
519 const VTIME = 5;
520
521 const BRKINT = octal!2;
522 const ICRNL = octal!400;
523 const IGNBRK = octal!1;
524 const IGNCR = octal!200;
525 const IGNPAR = octal!4;
526 const INLCR = octal!100;
527 const INPCK = octal!20;
528 const ISTRIP = octal!40;
529 const IXOFF = octal!10000;
530 const IXON = octal!2000;
531 const PARMRK = octal!10;
532
533 const OPOST = octal!1;
534
535 // Posix baudrates
536 const B0 = 0;
537 const B50 = 1;
538 const B75 = 2;
539 const B110 = 3;
540 const B134 = 4;
541 const B150 = 5;
542 const B200 = 6;
543 const B300 = 7;
544 const B600 = 8;
545 const B1200 = 9;
546 const B1800 = 10;
547 const B2400 = 11;
548 const B4800 = 12;
549 const B9600 = 13;
550 const B19200 = 14;
551 const B38400 = 15;
552
553 // Non-Posix baudrates
554 const B57600 = 16;
555 const B76800 = 17;
556 const B115200 = 18;
557 const B153600 = 19;
558 const B230400 = 20;
559 const B307200 = 21;
560 const B460800 = 22;
561
562 const CSIZE = octal!60;
563 const CS5 = 0;
564 const CS6 = octal!20;
565 const CS7 = octal!40;
566 const CS8 = octal!60;
567 const CSTOPB = octal!100;
568 const CREAD = octal!200;
569 const PARENB = octal!400;
570 const PARODD = octal!1000;
571 const HUPCL = octal!2000;
572 const CLOCAL = octal!4000;
573
574 const ECHO = octal!10;
575 const ECHOE = octal!20;
576 const ECHOK = octal!40;
577 const ECHONL = octal!100;
578 const ICANON = octal!2;
579 const IEXTEN = octal!100000;
580 const ISIG = octal!1;
581 const NOFLSH = octal!200;
582 const TOSTOP = octal!400;
583
584 const TIOC = ('T'<<8);
585
586 const TCSANOW = TIOC|14;
587 const TCSADRAIN = TIOC|15;
588 const TCSAFLUSH = TIOC|16;
589
590 const TCIFLUSH = 0;
591 const TCOFLUSH = 1;
592 const TCIOFLUSH = 2;
593
594 const TCIOFF = 2;
595 const TCION = 3;
596 const TCOOFF = 0;
597 const TCOON = 1;
598
599 speed_t cfgetispeed(in termios*);
600 speed_t cfgetospeed(in termios*);
601 int cfsetispeed(termios*, speed_t);
602 int cfsetospeed(termios*, speed_t);
603 int tcdrain(int);
604 int tcflow(int, int);
605 int tcflush(int, int);
606 int tcgetattr(int, termios*);
607 int tcsendbreak(int, int);
608 int tcsetattr(int, int, in termios*);
609 }
610
611 //
612 // XOpen (XSI)
613 //
614 /*
615 IXANY
616
617 ONLCR
618 OCRNL
619 ONOCR
620 ONLRET
621 OFILL
622 NLDLY
623 NL0
624 NL1
625 CRDLY
626 CR0
627 CR1
628 CR2
629 CR3
630 TABDLY
631 TAB0
632 TAB1
633 TAB2
634 TAB3
635 BSDLY
636 BS0
637 BS1
638 VTDLY
639 VT0
640 VT1
641 FFDLY
642 FF0
643 FF1
644
645 pid_t tcgetsid(int);
646 */
647
648 version( linux )
649 {
650 const IXANY = octal!4000;
651
652 const ONLCR = octal!4;
653 const OCRNL = octal!10;
654 const ONOCR = octal!20;
655 const ONLRET = octal!40;
656 const OFILL = octal!100;
657 const NLDLY = octal!400;
658 const NL0 = 0;
659 const NL1 = octal!400;
660 const CRDLY = octal!3000;
661 const CR0 = 0;
662 const CR1 = octal!1000;
663 const CR2 = octal!2000;
664 const CR3 = octal!3000;
665 const TABDLY = octal!14000;
666 const TAB0 = 0;
667 const TAB1 = octal!4000;
668 const TAB2 = octal!10000;
669 const TAB3 = octal!14000;
670 const BSDLY = octal!20000;
671 const BS0 = 0;
672 const BS1 = octal!20000;
673 const VTDLY = octal!40000;
674 const VT0 = 0;
675 const VT1 = octal!40000;
676 const FFDLY = octal!100000;
677 const FF0 = 0;
678 const FF1 = octal!100000;
679
680 pid_t tcgetsid(int);
681 }
682 else version( solaris )
683 {
684 const IXANY = octal!4000;
685
686 const ONLCR = octal!4;
687 const OCRNL = octal!10;
688 const ONOCR = octal!20;
689 const ONLRET = octal!40;
690 const OFILL = octal!100;
691 const NLDLY = octal!400;
692 const NL0 = 0;
693 const NL1 = octal!400;
694 const CRDLY = octal!3000;
695 const CR0 = 0;
696 const CR1 = octal!1000;
697 const CR2 = octal!2000;
698 const CR3 = octal!3000;
699 const TABDLY = octal!14000;
700 const TAB0 = 0;
701 const TAB1 = octal!4000;
702 const TAB2 = octal!10000;
703 const TAB3 = octal!14000;
704
705 const BSDLY = octal!20000;
706 const BS0 = 0;
707 const BS1 = octal!20000;
708 const VTDLY = octal!40000;
709 const VT0 = 0;
710 const VT1 = octal!40000;
711 const FFDLY = octal!100000;
712 const FF0 = 0;
713 const FF1 = octal!100000;
714
715 pid_t tcgetsid(int);
716 }