xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/posix/termios.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Copyright Sean Kelly 2005 - 2009.
5  * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6  * Authors:   Sean Kelly, Alex Rønne Petersen
7  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8  */
9 
10 /*          Copyright Sean Kelly 2005 - 2009.
11  * Distributed under the Boost Software License, Version 1.0.
12  *    (See accompanying file LICENSE or copy at
13  *          http://www.boost.org/LICENSE_1_0.txt)
14  */
15 module core.sys.posix.termios;
16 
17 import core.sys.posix.config;
18 public import core.sys.posix.sys.types; // for pid_t
19 
20 version (OSX)
21     version = Darwin;
22 else version (iOS)
23     version = Darwin;
24 else version (TVOS)
25     version = Darwin;
26 else version (WatchOS)
27     version = Darwin;
28 
version(Posix)29 version (Posix):
30 extern (C):
31 
32 nothrow:
33 @nogc:
34 @system:
35 
36 //
37 // Required
38 //
39 /*
40 cc_t
41 speed_t
42 tcflag_t
43 
44 NCCS
45 
46 struct termios
47 {
48     tcflag_t   c_iflag;
49     tcflag_t   c_oflag;
50     tcflag_t   c_cflag;
51     tcflag_t   c_lflag;
52     cc_t[NCCS] c_cc;
53 }
54 
55 VEOF
56 VEOL
57 VERASE
58 VINTR
59 VKILL
60 VMIN
61 VQUIT
62 VSTART
63 VSTOP
64 VSUSP
65 VTIME
66 
67 BRKINT
68 ICRNL
69 IGNBRK
70 IGNCR
71 IGNPAR
72 INLCR
73 INPCK
74 ISTRIP
75 IXOFF
76 IXON
77 PARMRK
78 
79 OPOST
80 
81 B0
82 B50
83 B75
84 B110
85 B134
86 B150
87 B200
88 B300
89 B600
90 B1200
91 B1800
92 B2400
93 B4800
94 B9600
95 B19200
96 B38400
97 
98 CSIZE
99     CS5
100     CS6
101     CS7
102     CS8
103 CSTOPB
104 CREAD
105 PARENB
106 PARODD
107 HUPCL
108 CLOCAL
109 
110 ECHO
111 ECHOE
112 ECHOK
113 ECHONL
114 ICANON
115 IEXTEN
116 ISIG
117 NOFLSH
118 TOSTOP
119 
120 TCSANOW
121 TCSADRAIN
122 TCSAFLUSH
123 
124 TCIFLUSH
125 TCIOFLUSH
126 TCOFLUSH
127 
128 TCIOFF
129 TCION
130 TCOOFF
131 TCOON
132 */
133 
134 version (linux)
135 {
136     alias ubyte cc_t;
137     alias uint  speed_t;
138     alias uint  tcflag_t;
139 
140     enum NCCS   = 32;
141 
142     struct termios
143     {
144         tcflag_t   c_iflag;
145         tcflag_t   c_oflag;
146         tcflag_t   c_cflag;
147         tcflag_t   c_lflag;
148         cc_t       c_line;
149         cc_t[NCCS] c_cc;
150         speed_t    c_ispeed;
151         speed_t    c_ospeed;
152     }
153 
154     enum VEOF       = 4;
155     enum VEOL       = 11;
156     enum VERASE     = 2;
157     enum VINTR      = 0;
158     enum VKILL      = 3;
159     enum VMIN       = 6;
160     enum VQUIT      = 1;
161     enum VSTART     = 8;
162     enum VSTOP      = 9;
163     enum VSUSP      = 10;
164     enum VTIME      = 5;
165 
166     enum BRKINT     = 0x0000002; // 0000002
167     enum ICRNL      = 0x0000100; // 0000400
168     enum IGNBRK     = 0x0000001; // 0000001
169     enum IGNCR      = 0x0000080; // 0000200
170     enum IGNPAR     = 0x0000004; // 0000004
171     enum INLCR      = 0x0000040; // 0000100
172     enum INPCK      = 0x0000010; // 0000020
173     enum ISTRIP     = 0x0000020; // 0000040
174     enum IXOFF      = 0x0001000; // 0010000
175     enum IXON       = 0x0000400; // 0002000
176     enum PARMRK     = 0x0000008; // 0000010
177 
178     enum OPOST      = 0x0000001; // 0000001
179 
180     enum B0         = 0x0000000; // 0000000
181     enum B50        = 0x0000001; // 0000001
182     enum B75        = 0x0000002; // 0000002
183     enum B110       = 0x0000003; // 0000003
184     enum B134       = 0x0000004; // 0000004
185     enum B150       = 0x0000005; // 0000005
186     enum B200       = 0x0000006; // 0000006
187     enum B300       = 0x0000007; // 0000007
188     enum B600       = 0x0000008; // 0000010
189     enum B1200      = 0x0000009; // 0000011
190     enum B1800      = 0x000000A; // 0000012
191     enum B2400      = 0x000000B; // 0000013
192     enum B4800      = 0x000000C; // 0000014
193     enum B9600      = 0x000000D; // 0000015
194     enum B19200     = 0x000000E; // 0000016
195     enum B38400     = 0x000000F; // 0000017
196 
197     enum CSIZE      = 0x0000030; // 0000060
198     enum   CS5      = 0x0000000; // 0000000
199     enum   CS6      = 0x0000010; // 0000020
200     enum   CS7      = 0x0000020; // 0000040
201     enum   CS8      = 0x0000030; // 0000060
202     enum CSTOPB     = 0x0000040; // 0000100
203     enum CREAD      = 0x0000080; // 0000200
204     enum PARENB     = 0x0000100; // 0000400
205     enum PARODD     = 0x0000200; // 0001000
206     enum HUPCL      = 0x0000400; // 0002000
207     enum CLOCAL     = 0x0000800; // 0004000
208 
209     enum ECHO       = 0x0000008; // 0000010
210     enum ECHOE      = 0x0000010; // 0000020
211     enum ECHOK      = 0x0000020; // 0000040
212     enum ECHONL     = 0x0000040; // 0000100
213     enum ICANON     = 0x0000002; // 0000002
214     enum IEXTEN     = 0x0008000; // 0100000
215     enum ISIG       = 0x0000001; // 0000001
216     enum NOFLSH     = 0x0000080; // 0000200
217     enum TOSTOP     = 0x0000100; // 0000400
218 
219     enum TCSANOW    = 0;
220     enum TCSADRAIN  = 1;
221     enum TCSAFLUSH  = 2;
222 
223     enum TCIFLUSH   = 0;
224     enum TCOFLUSH   = 1;
225     enum TCIOFLUSH  = 2;
226 
227     enum TCIOFF     = 2;
228     enum TCION      = 3;
229     enum TCOOFF     = 0;
230     enum TCOON      = 1;
231 }
version(Darwin)232 else version (Darwin)
233 {
234     alias ubyte cc_t;
235     alias c_ulong  speed_t;
236     alias c_ulong  tcflag_t;
237 
238     enum NCCS   = 20;
239 
240     struct termios
241     {
242         tcflag_t   c_iflag;
243         tcflag_t   c_oflag;
244         tcflag_t   c_cflag;
245         tcflag_t   c_lflag;
246         cc_t[NCCS] c_cc;
247         speed_t    c_ispeed;
248         speed_t    c_ospeed;
249     }
250 
251     enum VEOF       = 0;
252     enum VEOL       = 1;
253     enum VERASE     = 3;
254     enum VINTR      = 8;
255     enum VKILL      = 5;
256     enum VMIN       = 16;
257     enum VQUIT      = 9;
258     enum VSTART     = 12;
259     enum VSTOP      = 13;
260     enum VSUSP      = 10;
261     enum VTIME      = 17;
262 
263     enum BRKINT     = 0x0000002;
264     enum ICRNL      = 0x0000100;
265     enum IGNBRK     = 0x0000001;
266     enum IGNCR      = 0x0000080;
267     enum IGNPAR     = 0x0000004;
268     enum INLCR      = 0x0000040;
269     enum INPCK      = 0x0000010;
270     enum ISTRIP     = 0x0000020;
271     enum IXOFF      = 0x0000400;
272     enum IXON       = 0x0000200;
273     enum PARMRK     = 0x0000008;
274 
275     enum OPOST      = 0x0000001;
276 
277     enum B0         = 0;
278     enum B50        = 50;
279     enum B75        = 75;
280     enum B110       = 110;
281     enum B134       = 134;
282     enum B150       = 150;
283     enum B200       = 200;
284     enum B300       = 300;
285     enum B600       = 600;
286     enum B1200      = 1200;
287     enum B1800      = 1800;
288     enum B2400      = 2400;
289     enum B4800      = 4800;
290     enum B9600      = 9600;
291     enum B19200     = 19200;
292     enum B38400     = 38400;
293 
294     enum CSIZE      = 0x0000300;
295     enum   CS5      = 0x0000000;
296     enum   CS6      = 0x0000100;
297     enum   CS7      = 0x0000200;
298     enum   CS8      = 0x0000300;
299     enum CSTOPB     = 0x0000400;
300     enum CREAD      = 0x0000800;
301     enum PARENB     = 0x0001000;
302     enum PARODD     = 0x0002000;
303     enum HUPCL      = 0x0004000;
304     enum CLOCAL     = 0x0008000;
305 
306     enum ECHO       = 0x00000008;
307     enum ECHOE      = 0x00000002;
308     enum ECHOK      = 0x00000004;
309     enum ECHONL     = 0x00000010;
310     enum ICANON     = 0x00000100;
311     enum IEXTEN     = 0x00000400;
312     enum ISIG       = 0x00000080;
313     enum NOFLSH     = 0x80000000;
314     enum TOSTOP     = 0x00400000;
315 
316     enum TCSANOW    = 0;
317     enum TCSADRAIN  = 1;
318     enum TCSAFLUSH  = 2;
319 
320     enum TCIFLUSH   = 1;
321     enum TCOFLUSH   = 2;
322     enum TCIOFLUSH  = 3;
323 
324     enum TCIOFF     = 3;
325     enum TCION      = 4;
326     enum TCOOFF     = 1;
327     enum TCOON      = 2;
328 }
version(FreeBSD)329 else version (FreeBSD)
330 {
331     alias ubyte cc_t;
332     alias uint  speed_t;
333     alias uint  tcflag_t;
334 
335     enum NCCS   = 20;
336 
337     struct termios
338     {
339         tcflag_t   c_iflag;
340         tcflag_t   c_oflag;
341         tcflag_t   c_cflag;
342         tcflag_t   c_lflag;
343         cc_t[NCCS] c_cc;
344         speed_t    c_ispeed;
345         speed_t    c_ospeed;
346     }
347 
348     enum VEOF       = 0;
349     enum VEOL       = 1;
350     enum VERASE     = 3;
351     enum VINTR      = 8;
352     enum VKILL      = 5;
353     enum VMIN       = 16;
354     enum VQUIT      = 9;
355     enum VSTART     = 12;
356     enum VSTOP      = 13;
357     enum VSUSP      = 10;
358     enum VTIME      = 17;
359 
360     enum BRKINT     = 0x0000002;
361     enum ICRNL      = 0x0000100;
362     enum IGNBRK     = 0x0000001;
363     enum IGNCR      = 0x0000080;
364     enum IGNPAR     = 0x0000004;
365     enum INLCR      = 0x0000040;
366     enum INPCK      = 0x0000010;
367     enum ISTRIP     = 0x0000020;
368     enum IXOFF      = 0x0000400;
369     enum IXON       = 0x0000200;
370     enum PARMRK     = 0x0000008;
371 
372     enum OPOST      = 0x0000001;
373 
374     enum B0         = 0;
375     enum B50        = 50;
376     enum B75        = 75;
377     enum B110       = 110;
378     enum B134       = 134;
379     enum B150       = 150;
380     enum B200       = 200;
381     enum B300       = 300;
382     enum B600       = 600;
383     enum B1200      = 1200;
384     enum B1800      = 1800;
385     enum B2400      = 2400;
386     enum B4800      = 4800;
387     enum B9600      = 9600;
388     enum B19200     = 19200;
389     enum B38400     = 38400;
390 
391     enum CSIZE      = 0x0000300;
392     enum   CS5      = 0x0000000;
393     enum   CS6      = 0x0000100;
394     enum   CS7      = 0x0000200;
395     enum   CS8      = 0x0000300;
396     enum CSTOPB     = 0x0000400;
397     enum CREAD      = 0x0000800;
398     enum PARENB     = 0x0001000;
399     enum PARODD     = 0x0002000;
400     enum HUPCL      = 0x0004000;
401     enum CLOCAL     = 0x0008000;
402 
403     enum ECHO       = 0x00000008;
404     enum ECHOE      = 0x00000002;
405     enum ECHOK      = 0x00000004;
406     enum ECHONL     = 0x00000010;
407     enum ICANON     = 0x00000100;
408     enum IEXTEN     = 0x00000400;
409     enum ISIG       = 0x00000080;
410     enum NOFLSH     = 0x80000000;
411     enum TOSTOP     = 0x00400000;
412 
413     enum TCSANOW    = 0;
414     enum TCSADRAIN  = 1;
415     enum TCSAFLUSH  = 2;
416 
417     enum TCIFLUSH   = 1;
418     enum TCOFLUSH   = 2;
419     enum TCIOFLUSH  = 3;
420 
421     enum TCIOFF     = 3;
422     enum TCION      = 4;
423     enum TCOOFF     = 1;
424     enum TCOON      = 2;
425 }
version(DragonFlyBSD)426 else version (DragonFlyBSD)
427 {
428     alias ubyte cc_t;
429     alias uint  speed_t;
430     alias uint  tcflag_t;
431 
432     enum NCCS   = 20;
433 
434     struct termios
435     {
436         tcflag_t   c_iflag;
437         tcflag_t   c_oflag;
438         tcflag_t   c_cflag;
439         tcflag_t   c_lflag;
440         cc_t[NCCS] c_cc;
441         speed_t    c_ispeed;
442         speed_t    c_ospeed;
443     }
444 
445     enum VEOF       = 0;
446     enum VEOL       = 1;
447     enum VERASE     = 3;
448     enum VINTR      = 8;
449     enum VKILL      = 5;
450     enum VMIN       = 16;
451     enum VQUIT      = 9;
452     enum VSTART     = 12;
453     enum VSTOP      = 13;
454     enum VSUSP      = 10;
455     enum VTIME      = 17;
456 
457     enum BRKINT     = 0x0000002;
458     enum ICRNL      = 0x0000100;
459     enum IGNBRK     = 0x0000001;
460     enum IGNCR      = 0x0000080;
461     enum IGNPAR     = 0x0000004;
462     enum INLCR      = 0x0000040;
463     enum INPCK      = 0x0000010;
464     enum ISTRIP     = 0x0000020;
465     enum IXOFF      = 0x0000400;
466     enum IXON       = 0x0000200;
467     enum PARMRK     = 0x0000008;
468 
469     enum OPOST      = 0x0000001;
470 
471     enum B0         = 0;
472     enum B50        = 50;
473     enum B75        = 75;
474     enum B110       = 110;
475     enum B134       = 134;
476     enum B150       = 150;
477     enum B200       = 200;
478     enum B300       = 300;
479     enum B600       = 600;
480     enum B1200      = 1200;
481     enum B1800      = 1800;
482     enum B2400      = 2400;
483     enum B4800      = 4800;
484     enum B9600      = 9600;
485     enum B19200     = 19200;
486     enum B38400     = 38400;
487 
488     enum CSIZE      = 0x0000300;
489     enum   CS5      = 0x0000000;
490     enum   CS6      = 0x0000100;
491     enum   CS7      = 0x0000200;
492     enum   CS8      = 0x0000300;
493     enum CSTOPB     = 0x0000400;
494     enum CREAD      = 0x0000800;
495     enum PARENB     = 0x0001000;
496     enum PARODD     = 0x0002000;
497     enum HUPCL      = 0x0004000;
498     enum CLOCAL     = 0x0008000;
499 
500     enum ECHO       = 0x00000008;
501     enum ECHOE      = 0x00000002;
502     enum ECHOK      = 0x00000004;
503     enum ECHONL     = 0x00000010;
504     enum ICANON     = 0x00000100;
505     enum IEXTEN     = 0x00000400;
506     enum ISIG       = 0x00000080;
507     enum NOFLSH     = 0x80000000;
508     enum TOSTOP     = 0x00400000;
509 
510     enum TCSANOW    = 0;
511     enum TCSADRAIN  = 1;
512     enum TCSAFLUSH  = 2;
513 
514     enum TCIFLUSH   = 1;
515     enum TCOFLUSH   = 2;
516     enum TCIOFLUSH  = 3;
517 
518     enum TCIOFF     = 3;
519     enum TCION      = 4;
520     enum TCOOFF     = 1;
521     enum TCOON      = 2;
522 }
version(NetBSD)523 else version (NetBSD)
524 {
525     alias ubyte cc_t;
526     alias uint  speed_t;
527     alias uint  tcflag_t;
528 
529     enum NCCS   = 20;
530 
531     struct termios
532     {
533         tcflag_t   c_iflag;
534         tcflag_t   c_oflag;
535         tcflag_t   c_cflag;
536         tcflag_t   c_lflag;
537         cc_t[NCCS] c_cc;
538         speed_t    c_ispeed;
539         speed_t    c_ospeed;
540     }
541 
542     enum VEOF       = 0;
543     enum VEOL       = 1;
544     enum VERASE     = 3;
545     enum VINTR      = 8;
546     enum VKILL      = 5;
547     enum VMIN       = 16;
548     enum VQUIT      = 9;
549     enum VSTART     = 12;
550     enum VSTOP      = 13;
551     enum VSUSP      = 10;
552     enum VTIME      = 17;
553 
554     enum BRKINT     = 0x0000002;
555     enum ICRNL      = 0x0000100;
556     enum IGNBRK     = 0x0000001;
557     enum IGNCR      = 0x0000080;
558     enum IGNPAR     = 0x0000004;
559     enum INLCR      = 0x0000040;
560     enum INPCK      = 0x0000010;
561     enum ISTRIP     = 0x0000020;
562     enum IXOFF      = 0x0000400;
563     enum IXON       = 0x0000200;
564     enum PARMRK     = 0x0000008;
565 
566     enum OPOST      = 0x0000001;
567 
568     enum B0         = 0;
569     enum B50        = 50;
570     enum B75        = 75;
571     enum B110       = 110;
572     enum B134       = 134;
573     enum B150       = 150;
574     enum B200       = 200;
575     enum B300       = 300;
576     enum B600       = 600;
577     enum B1200      = 1200;
578     enum B1800      = 1800;
579     enum B2400      = 2400;
580     enum B4800      = 4800;
581     enum B9600      = 9600;
582     enum B19200     = 19200;
583     enum B38400     = 38400;
584 
585     enum CSIZE      = 0x0000300;
586     enum   CS5      = 0x0000000;
587     enum   CS6      = 0x0000100;
588     enum   CS7      = 0x0000200;
589     enum   CS8      = 0x0000300;
590     enum CSTOPB     = 0x0000400;
591     enum CREAD      = 0x0000800;
592     enum PARENB     = 0x0001000;
593     enum PARODD     = 0x0002000;
594     enum HUPCL      = 0x0004000;
595     enum CLOCAL     = 0x0008000;
596 
597     enum ECHO       = 0x00000008;
598     enum ECHOE      = 0x00000002;
599     enum ECHOK      = 0x00000004;
600     enum ECHONL     = 0x00000010;
601     enum ICANON     = 0x00000100;
602     enum IEXTEN     = 0x00000400;
603     enum ISIG       = 0x00000080;
604     enum NOFLSH     = 0x80000000;
605     enum TOSTOP     = 0x00400000;
606 
607     enum TCSANOW    = 0;
608     enum TCSADRAIN  = 1;
609     enum TCSAFLUSH  = 2;
610 
611     enum TCIFLUSH   = 1;
612     enum TCOFLUSH   = 2;
613     enum TCIOFLUSH  = 3;
614 
615     enum TCIOFF     = 3;
616     enum TCION      = 4;
617     enum TCOOFF     = 1;
618     enum TCOON      = 2;
619 }
version(OpenBSD)620 else version (OpenBSD)
621 {
622     alias uint  tcflag_t;
623     alias ubyte cc_t;
624     alias uint  speed_t;
625 
626     enum NCCS   = 20;
627 
628     struct termios
629     {
630         tcflag_t   c_iflag;
631         tcflag_t   c_oflag;
632         tcflag_t   c_cflag;
633         tcflag_t   c_lflag;
634         cc_t[NCCS] c_cc;
635         int        c_ispeed;
636         int        c_ospeed;
637     }
638 
639     enum VEOF       = 0;
640     enum VEOL       = 1;
641     enum VERASE     = 3;
642     enum VINTR      = 8;
643     enum VKILL      = 5;
644     enum VMIN       = 16;
645     enum VQUIT      = 9;
646     enum VSTART     = 12;
647     enum VSTOP      = 13;
648     enum VSUSP      = 10;
649     enum VTIME      = 17;
650 
651     enum BRKINT     = 0x0000002;
652     enum ICRNL      = 0x0000100;
653     enum IGNBRK     = 0x0000001;
654     enum IGNCR      = 0x0000080;
655     enum IGNPAR     = 0x0000004;
656     enum INLCR      = 0x0000040;
657     enum INPCK      = 0x0000010;
658     enum ISTRIP     = 0x0000020;
659     enum IXOFF      = 0x0000400;
660     enum IXON       = 0x0000200;
661     enum PARMRK     = 0x0000008;
662 
663     enum OPOST      = 0x0000001;
664 
665     enum B0         = 0;
666     enum B50        = 50;
667     enum B75        = 75;
668     enum B110       = 110;
669     enum B134       = 134;
670     enum B150       = 150;
671     enum B200       = 200;
672     enum B300       = 300;
673     enum B600       = 600;
674     enum B1200      = 1200;
675     enum B1800      = 1800;
676     enum B2400      = 2400;
677     enum B4800      = 4800;
678     enum B9600      = 9600;
679     enum B19200     = 19200;
680     enum B38400     = 38400;
681 
682     enum CSIZE      = 0x0000300;
683     enum   CS5      = 0x0000000;
684     enum   CS6      = 0x0000100;
685     enum   CS7      = 0x0000200;
686     enum   CS8      = 0x0000300;
687     enum CSTOPB     = 0x0000400;
688     enum CREAD      = 0x0000800;
689     enum PARENB     = 0x0001000;
690     enum PARODD     = 0x0002000;
691     enum HUPCL      = 0x0004000;
692     enum CLOCAL     = 0x0008000;
693 
694     enum ECHO       = 0x00000008;
695     enum ECHOE      = 0x00000002;
696     enum ECHOK      = 0x00000004;
697     enum ECHONL     = 0x00000010;
698     enum ICANON     = 0x00000100;
699     enum IEXTEN     = 0x00000400;
700     enum ISIG       = 0x00000080;
701     enum NOFLSH     = 0x80000000;
702     enum TOSTOP     = 0x00400000;
703 
704     enum TCSANOW    = 0;
705     enum TCSADRAIN  = 1;
706     enum TCSAFLUSH  = 2;
707 
708     enum TCIFLUSH   = 1;
709     enum TCOFLUSH   = 2;
710     enum TCIOFLUSH  = 3;
711 
712     enum TCIOFF     = 3;
713     enum TCION      = 4;
714     enum TCOOFF     = 1;
715     enum TCOON      = 2;
716 }
version(Solaris)717 else version (Solaris)
718 {
719     alias tcflag_t = uint;
720     alias cc_t = ubyte;
721     alias speed_t = uint;
722 
723     enum NCCS   = 19;
724 
725     struct termios
726     {
727         tcflag_t   c_iflag;    /* input modes */
728         tcflag_t   c_oflag;    /* output modes */
729         tcflag_t   c_cflag;    /* control modes */
730         tcflag_t   c_lflag;    /* line discipline modes */
731         cc_t[NCCS] c_cc;       /* control chars */
732     }
733 
734     /* control characters */
735     enum VINTR  = 0;
736     enum VQUIT  = 1;
737     enum VERASE = 2;
738     enum VKILL  = 3;
739     enum VEOF   = 4;
740     enum VEOL   = 5;
741     enum VMIN   = 4;
742     enum VTIME  = 5;
743     enum VSTART = 8;
744     enum VSTOP  = 9;
745     enum VSUSP  = 10;
746 
747     /* input modes */
748     enum IGNBRK = 0x000001;
749     enum BRKINT = 0x000002;
750     enum IGNPAR = 0x000004;
751     enum PARMRK = 0x000008;
752     enum INPCK  = 0x000010;
753     enum ISTRIP = 0x000020;
754     enum INLCR  = 0x000040;
755     enum IGNCR  = 0x000080;
756     enum ICRNL  = 0x000100;
757     enum IXON   = 0x000400;
758     enum IXOFF  = 0x001000;
759 
760     /* output modes */
761     enum OPOST  = 0x000001;
762 
763     /* control modes */
764     enum CSIZE  = 0x000030;
765     enum CS5    = 0x000000;
766     enum CS6    = 0x000010;
767     enum CS7    = 0x000020;
768     enum CS8    = 0x000030;
769     enum CSTOPB = 0x000040;
770     enum CREAD  = 0x000080;
771     enum PARENB = 0x000100;
772     enum PARODD = 0x000200;
773     enum HUPCL  = 0x000400;
774     enum CLOCAL = 0x000800;
775 
776     enum CRTSCTS = 0x10000000;
777 
778     /* line discipline 0 modes */
779     enum ISIG   = 0x000001;
780     enum ICANON = 0x000002;
781     enum ECHO   = 0x000008;
782     enum ECHOE  = 0x000010;
783     enum ECHOK  = 0x000020;
784     enum ECHONL = 0x000040;
785     enum NOFLSH = 0x000080;
786     enum TOSTOP = 0x000100;
787 
788     enum ECHOCTL = 0x000200;
789     enum ECHOPRT = 0x000400;
790     enum ECHOKE  = 0x000800;
791 
792     enum IEXTEN = 0x008000;  /* POSIX flag - enable POSIX extensions */
793 
794     enum _TIOC      = ('T'<<8);
795     enum TCSANOW    = (_TIOC|14);
796     enum TCSADRAIN  = (_TIOC|15);
797     enum TCSAFLUSH  = (_TIOC|16);
798 
799     /* termios option flags */
800     enum TCIFLUSH   = 0;  /* flush data received but not read */
801     enum TCOFLUSH   = 1;  /* flush data written but not transmitted */
802     enum TCIOFLUSH  = 2;  /* flush both data both input and output queues */
803 
804     enum TCOOFF     = 0;  /* suspend output */
805     enum TCOON      = 1;  /* restart suspended output */
806     enum TCIOFF     = 2;  /* suspend input */
807     enum TCION      = 3;  /* restart suspended input */
808 
809     /* Speeds */
810     enum B0      = 0;
811     enum B50     = 1;
812     enum B75     = 2;
813     enum B110    = 3;
814     enum B134    = 4;
815     enum B150    = 5;
816     enum B200    = 6;
817     enum B300    = 7;
818     enum B600    = 8;
819     enum B1200   = 9;
820     enum B1800   = 10;
821     enum B2400   = 11;
822     enum B4800   = 12;
823     enum B9600   = 13;
824     enum B19200  = 14;
825     enum B38400  = 15;
826     enum B57600  = 16;
827     enum B76800  = 17;
828     enum B115200 = 18;
829     enum B153600 = 19;
830     enum B230400 = 20;
831     enum B307200 = 21;
832     enum B460800 = 22;
833     enum B921600 = 23;
834 }
835 
836 /*
837 speed_t cfgetispeed(const scope termios*);
838 speed_t cfgetospeed(const scope termios*);
839 int     cfsetispeed(termios*, speed_t);
840 int     cfsetospeed(termios*, speed_t);
841 int     tcdrain(int);
842 int     tcflow(int, int);
843 int     tcflush(int, int);
844 int     tcgetattr(int, termios*);
845 int     tcsendbreak(int, int);
846 int     tcsetattr(int, int, const scope termios*);
847 */
848 
version(CRuntime_Glibc)849 version (CRuntime_Glibc)
850 {
851     speed_t cfgetispeed(const scope termios*);
852     speed_t cfgetospeed(const scope termios*);
853     int     cfsetispeed(termios*, speed_t);
854     int     cfsetospeed(termios*, speed_t);
855     int     tcdrain(int);
856     int     tcflow(int, int);
857     int     tcflush(int, int);
858     int     tcgetattr(int, termios*);
859     int     tcsendbreak(int, int);
860     int     tcsetattr(int, int, const scope termios*);
861 }
version(Darwin)862 else version (Darwin)
863 {
864     speed_t cfgetispeed(const scope termios*);
865     speed_t cfgetospeed(const scope termios*);
866     int     cfsetispeed(termios*, speed_t);
867     int     cfsetospeed(termios*, speed_t);
868     int     tcdrain(int);
869     int     tcflow(int, int);
870     int     tcflush(int, int);
871     int     tcgetattr(int, termios*);
872     int     tcsendbreak(int, int);
873     int     tcsetattr(int, int, const scope termios*);
874 
875 }
version(FreeBSD)876 else version (FreeBSD)
877 {
878     speed_t cfgetispeed(const scope termios*);
879     speed_t cfgetospeed(const scope termios*);
880     int     cfsetispeed(termios*, speed_t);
881     int     cfsetospeed(termios*, speed_t);
882     int     tcdrain(int);
883     int     tcflow(int, int);
884     int     tcflush(int, int);
885     int     tcgetattr(int, termios*);
886     int     tcsendbreak(int, int);
887     int     tcsetattr(int, int, const scope termios*);
888 }
version(DragonFlyBSD)889 else version (DragonFlyBSD)
890 {
891     speed_t cfgetispeed(const scope termios*);
892     speed_t cfgetospeed(const scope termios*);
893     int     cfsetispeed(termios*, speed_t);
894     int     cfsetospeed(termios*, speed_t);
895     int     tcdrain(int);
896     int     tcflow(int, int);
897     int     tcflush(int, int);
898     int     tcgetattr(int, termios*);
899     int     tcsendbreak(int, int);
900     int     tcsetattr(int, int, const scope termios*);
901 }
version(NetBSD)902 else version (NetBSD)
903 {
904     speed_t cfgetispeed(const scope termios*);
905     speed_t cfgetospeed(const scope termios*);
906     int     cfsetispeed(termios*, speed_t);
907     int     cfsetospeed(termios*, speed_t);
908     int     tcdrain(int);
909     int     tcflow(int, int);
910     int     tcflush(int, int);
911     int     tcgetattr(int, termios*);
912     int     tcsendbreak(int, int);
913     int     tcsetattr(int, int, const scope termios*);
914 }
version(OpenBSD)915 else version (OpenBSD)
916 {
917     speed_t cfgetispeed(const scope termios*);
918     speed_t cfgetospeed(const scope termios*);
919     int     cfsetispeed(termios*, speed_t);
920     int     cfsetospeed(termios*, speed_t);
921     int     tcdrain(int);
922     int     tcflow(int, int);
923     int     tcflush(int, int);
924     int     tcgetattr(int, termios*);
925     int     tcsendbreak(int, int);
926     int     tcsetattr(int, int, const scope termios*);
927 }
version(Solaris)928 else version (Solaris)
929 {
930     speed_t cfgetospeed(const scope termios*);
931     int     cfsetospeed(termios*, speed_t);
932     speed_t cfgetispeed(const scope termios*);
933     int     cfsetispeed(termios*, speed_t);
934     int     tcgetattr(int, termios*);
935     int     tcsetattr(int, int, const scope termios*);
936     int     tcsendbreak(int, int);
937     int     tcdrain(int);
938     int     tcflush(int, int);
939     int     tcflow(int, int);
940 }
version(CRuntime_UClibc)941 else version (CRuntime_UClibc)
942 {
943     speed_t cfgetispeed(const scope termios*);
944     speed_t cfgetospeed(const scope termios*);
945     int     cfsetispeed(termios*, speed_t);
946     int     cfsetospeed(termios*, speed_t);
947     int     tcdrain(int);
948     int     tcflow(int, int);
949     int     tcflush(int, int);
950     int     tcgetattr(int, termios*);
951     int     tcsendbreak(int, int);
952     int     tcsetattr(int, int, const scope termios*);
953 }
954 
955 //
956 // XOpen (XSI)
957 //
958 /*
959 IXANY
960 
961 ONLCR
962 OCRNL
963 ONOCR
964 ONLRET
965 OFILL
966 NLDLY
967     NL0
968     NL1
969 CRDLY
970     CR0
971     CR1
972     CR2
973     CR3
974 TABDLY
975     TAB0
976     TAB1
977     TAB2
978     TAB3
979 BSDLY
980     BS0
981     BS1
982 VTDLY
983     VT0
984     VT1
985 FFDLY
986     FF0
987     FF1
988 
989 pid_t   tcgetsid(int);
990 */
991 
version(CRuntime_Glibc)992 version (CRuntime_Glibc)
993 {
994     enum IXANY      = 0x0000800; // 0004000
995 
996     enum ONLCR      = 0x0000004; // 0000004
997     enum OCRNL      = 0x0000008; // 0000010
998     enum ONOCR      = 0x0000010; // 0000020
999     enum ONLRET     = 0x0000020; // 0000040
1000     enum OFILL      = 0x0000040; // 0000100
1001     enum NLDLY      = 0x0000100; // 0000400
1002     enum   NL0      = 0x0000000; // 0000000
1003     enum   NL1      = 0x0000100; // 0000400
1004     enum CRDLY      = 0x0000600; // 0003000
1005     enum   CR0      = 0x0000000; // 0000000
1006     enum   CR1      = 0x0000200; // 0001000
1007     enum   CR2      = 0x0000400; // 0002000
1008     enum   CR3      = 0x0000600; // 0003000
1009     enum TABDLY     = 0x0001800; // 0014000
1010     enum   TAB0     = 0x0000000; // 0000000
1011     enum   TAB1     = 0x0000800; // 0004000
1012     enum   TAB2     = 0x0001000; // 0010000
1013     enum   TAB3     = 0x0001800; // 0014000
1014     enum BSDLY      = 0x0002000; // 0020000
1015     enum   BS0      = 0x0000000; // 0000000
1016     enum   BS1      = 0x0002000; // 0020000
1017     enum VTDLY      = 0x0004000; // 0040000
1018     enum   VT0      = 0x0000000; // 0000000
1019     enum   VT1      = 0x0004000; // 0040000
1020     enum FFDLY      = 0x0008000; // 0100000
1021     enum   FF0      = 0x0000000; // 0000000
1022     enum   FF1      = 0x0008000; // 0100000
1023 
1024     pid_t   tcgetsid(int);
1025 }
1026 
version(Darwin)1027 else version (Darwin)
1028 {
1029     enum IXANY      = 0x00000800;
1030 
1031     enum ONLCR      = 0x00000002;
1032     enum OCRNL      = 0x00000010;
1033     enum ONOCR      = 0x00000020;
1034     enum ONLRET     = 0x00000040;
1035     enum OFILL      = 0x00000080;
1036     enum NLDLY      = 0x00000300;
1037     enum   NL0      = 0x00000000;
1038     enum   NL1      = 0x00000100;
1039     enum CRDLY      = 0x00003000;
1040     enum   CR0      = 0x00000000;
1041     enum   CR1      = 0x00001000;
1042     enum   CR2      = 0x00002000;
1043     enum   CR3      = 0x00003000;
1044     enum TABDLY     = 0x00000c04;
1045     enum   TAB0     = 0x00000000;
1046     enum   TAB1     = 0x00000400;
1047     enum   TAB2     = 0x00000800;
1048     enum   TAB3     = 0x00000004;
1049     enum BSDLY      = 0x00008000;
1050     enum   BS0      = 0x00000000;
1051     enum   BS1      = 0x00008000;
1052     enum VTDLY      = 0x00010000;
1053     enum   VT0      = 0x00000000;
1054     enum   VT1      = 0x00010000;
1055     enum FFDLY      = 0x00004000;
1056     enum   FF0      = 0x00000000;
1057     enum   FF1      = 0x00004000;
1058 
1059     pid_t tcgetsid (int);
1060 }
1061 
version(FreeBSD)1062 else version (FreeBSD)
1063 {
1064     enum IXANY      = 0x00000800;
1065 
1066     enum ONLCR      = 0x00000002;
1067     enum OCRNL      = 0x00000010;
1068     enum ONOCR      = 0x00000020;
1069     enum ONLRET     = 0x00000040;
1070     //enum OFILL
1071     //enum NLDLY
1072     //enum     NL0
1073     //enum     NL1
1074     //enum CRDLY
1075     //enum     CR0
1076     //enum     CR1
1077     //enum     CR2
1078     //enum     CR3
1079     enum TABDLY     = 0x00000004;
1080     enum     TAB0   = 0x00000000;
1081     //enum     TAB1
1082     //enum     TAB2
1083     enum     TAB3   = 0x00000004;
1084     //enum BSDLY
1085     //enum     BS0
1086     //enum     BS1
1087     //enum VTDLY
1088     //enum     VT0
1089     //enum     VT1
1090     //enum FFDLY
1091     //enum     FF0
1092     //enum     FF1
1093 
1094     pid_t   tcgetsid(int);
1095 }
version(DragonFlyBSD)1096 else version (DragonFlyBSD)
1097 {
1098     enum IXANY      = 0x00000800;
1099 
1100     enum ONLCR      = 0x00000002;
1101     enum OCRNL      = 0x00000010;
1102     enum ONOCR      = 0x00000020;
1103     enum ONLRET     = 0x00000040;
1104     //enum OFILL
1105     //enum NLDLY
1106     //enum     NL0
1107     //enum     NL1
1108     //enum CRDLY
1109     //enum     CR0
1110     //enum     CR1
1111     //enum     CR2
1112     //enum     CR3
1113     enum TABDLY     = 0x00000004;
1114     enum     TAB0   = 0x00000000;
1115     //enum     TAB1
1116     //enum     TAB2
1117     enum     TAB3   = 0x00000004;
1118     //enum BSDLY
1119     //enum     BS0
1120     //enum     BS1
1121     //enum VTDLY
1122     //enum     VT0
1123     //enum     VT1
1124     //enum FFDLY
1125     //enum     FF0
1126     //enum     FF1
1127 
1128     pid_t   tcgetsid(int);
1129 }
version(NetBSD)1130 else version (NetBSD)
1131 {
1132     enum IXANY      = 0x00000800;
1133 
1134     enum ONLCR      = 0x00000002;
1135     enum OCRNL      = 0x00000010;
1136     enum ONOCR      = 0x00000020;
1137     enum ONLRET     = 0x00000040;
1138     //enum OFILL
1139     //enum NLDLY
1140     //enum     NL0
1141     //enum     NL1
1142     //enum CRDLY
1143     //enum     CR0
1144     //enum     CR1
1145     //enum     CR2
1146     //enum     CR3
1147     enum TABDLY     = 0x00000004;
1148     enum     TAB0   = 0x00000000;
1149     //enum     TAB1
1150     //enum     TAB2
1151     enum     TAB3   = 0x00000004;
1152     //enum BSDLY
1153     //enum     BS0
1154     //enum     BS1
1155     //enum VTDLY
1156     //enum     VT0
1157     //enum     VT1
1158     //enum FFDLY
1159     //enum     FF0
1160     //enum     FF1
1161 
1162     pid_t   tcgetsid(int);
1163 }
version(OpenBSD)1164 else version (OpenBSD)
1165 {
1166     enum IXANY      = 0x00000800;
1167 
1168     enum ONLCR      = 0x00000002;
1169     enum OCRNL      = 0x00000010;
1170     enum ONOCR      = 0x00000040;
1171     enum ONLRET     = 0x00000080;
1172     //enum OFILL
1173     //enum NLDLY
1174     //enum   NL0
1175     //enum   NL1
1176     //enum CRDLY
1177     //enum   CR0
1178     //enum   CR1
1179     //enum   CR2
1180     //enum   CR3
1181     //enum TABDLY
1182     //enum   TAB0
1183     //enum   TAB1
1184     //enum   TAB2
1185     //enum   TAB3
1186     //enum BSDLY
1187     //enum   BS0
1188     //enum   BS1
1189     //enum VTDLY
1190     //enum   VT0
1191     //enum   VT1
1192     //enum FFDLY
1193     //enum   FF0
1194     //enum   FF1
1195 
1196     pid_t   tcgetsid(int);
1197 }
version(Solaris)1198 else version (Solaris)
1199 {
1200     enum IXANY      = 0x0000800;
1201 
1202     enum ONLCR      = 0x0000004;
1203     enum OCRNL      = 0x0000008;
1204     enum ONOCR      = 0x0000010;
1205     enum ONLRET     = 0x0000020;
1206     enum OFILL      = 0x0000040;
1207     enum OFDEL      = 0x0000080;
1208     enum NLDLY      = 0x0000100;
1209     enum NL0        = 0x0000000;
1210     enum NL1        = 0x0000100;
1211     enum CRDLY      = 0x0000600;
1212     enum CR0        = 0x0000000;
1213     enum CR1        = 0x0000200;
1214     enum CR2        = 0x0000400;
1215     enum CR3        = 0x0000600;
1216     enum TABDLY     = 0x0001800;
1217     enum TAB0       = 0x0000000;
1218     enum TAB1       = 0x0000800;
1219     enum TAB2       = 0x0001000;
1220     enum TAB3       = 0x0001800;
1221     enum BSDLY      = 0x0002000;
1222     enum BS0        = 0x0000000;
1223     enum BS1        = 0x0002000;
1224     enum VTDLY      = 0x0004000;
1225     enum VT0        = 0x0000000;
1226     enum VT1        = 0x0004000;
1227     enum FFDLY      = 0x0008000;
1228     enum FF0        = 0x0000000;
1229     enum FF1        = 0x0008000;
1230     enum XCASE      = 0x0000004;
1231 
1232     pid_t   tcgetsid(int);
1233 }
version(CRuntime_UClibc)1234 else version (CRuntime_UClibc)
1235 {
1236     enum IXANY      = 0x0000800; // 0004000
1237 
1238     enum ONLCR      = 0x0000004; // 0000004
1239     enum OCRNL      = 0x0000008; // 0000010
1240     enum ONOCR      = 0x0000010; // 0000020
1241     enum ONLRET     = 0x0000020; // 0000040
1242     enum OFILL      = 0x0000040; // 0000100
1243     enum NLDLY      = 0x0000100; // 0000400
1244     enum   NL0      = 0x0000000; // 0000000
1245     enum   NL1      = 0x0000100; // 0000400
1246     enum CRDLY      = 0x0000600; // 0003000
1247     enum   CR0      = 0x0000000; // 0000000
1248     enum   CR1      = 0x0000200; // 0001000
1249     enum   CR2      = 0x0000400; // 0002000
1250     enum   CR3      = 0x0000600; // 0003000
1251     enum TABDLY     = 0x0001800; // 0014000
1252     enum   TAB0     = 0x0000000; // 0000000
1253     enum   TAB1     = 0x0000800; // 0004000
1254     enum   TAB2     = 0x0001000; // 0010000
1255     enum   TAB3     = 0x0001800; // 0014000
1256     enum BSDLY      = 0x0002000; // 0020000
1257     enum   BS0      = 0x0000000; // 0000000
1258     enum   BS1      = 0x0002000; // 0020000
1259     enum VTDLY      = 0x0004000; // 0040000
1260     enum   VT0      = 0x0000000; // 0000000
1261     enum   VT1      = 0x0004000; // 0040000
1262     enum FFDLY      = 0x0008000; // 0100000
1263     enum   FF0      = 0x0000000; // 0000000
1264     enum   FF1      = 0x0008000; // 0100000
1265 
1266     pid_t   tcgetsid(int);
1267 }
1268