]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/m2/pge-boot/Gtermios.cc
Update copyright years.
[thirdparty/gcc.git] / gcc / m2 / pge-boot / Gtermios.cc
CommitLineData
1eee94d3
GM
1/* Gtermios.c handwritten module for mc.
2
a945c346 3Copyright (C) 2010-2024 Free Software Foundation, Inc.
1eee94d3
GM
4Contributed by Gaius Mulley <gaius@glam.ac.uk>.
5
6This file is part of GNU Modula-2.
7
8GNU Modula-2 is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 3, or (at your option)
11any later version.
12
13GNU Modula-2 is distributed in the hope that it will be useful, but
14WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GNU Modula-2; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
21
22#include "config.h"
23#include "system.h"
24
25#include "gm2-libs-host.h"
26
27#ifdef HAVE_TERMIOS_H
28# include <termios.h>
29#endif
30
31#ifdef TERMIOS_NEEDS_XOPEN_SOURCE
32#define _XOPEN_SOURCE
33#endif
34
35#if defined(__cplusplus)
36#define EXTERN extern "C"
37#else
38#define EXTERN
39#endif
40
41#define EXPORT(X) termios##_##X
42
43typedef enum {
44 vintr,
45 vquit,
46 verase,
47 vkill,
48 veof,
49 vtime,
50 vmin,
51 vswtc,
52 vstart,
53 vstop,
54 vsusp,
55 veol,
56 vreprint,
57 vdiscard,
58 vwerase,
59 vlnext,
60 veol2
61} ControlChar;
62
63typedef enum {
64 /* input flag bits. */
65 ignbrk,
66 ibrkint,
67 ignpar,
68 iparmrk,
69 inpck,
70 istrip,
71 inlcr,
72 igncr,
73 icrnl,
74 iuclc,
75 ixon,
76 ixany,
77 ixoff,
78 imaxbel,
79 /* output flag bits. */
80 opost,
81 olcuc,
82 onlcr,
83 ocrnl,
84 onocr,
85 onlret,
86 ofill,
87 ofdel,
88 onl0,
89 onl1,
90 ocr0,
91 ocr1,
92 ocr2,
93 ocr3,
94 otab0,
95 otab1,
96 otab2,
97 otab3,
98 obs0,
99 obs1,
100 off0,
101 off1,
102 ovt0,
103 ovt1,
104 /* baud rate. */
105 b0,
106 b50,
107 b75,
108 b110,
109 b135,
110 b150,
111 b200,
112 b300,
113 b600,
114 b1200,
115 b1800,
116 b2400,
117 b4800,
118 b9600,
119 b19200,
120 b38400,
121 b57600,
122 b115200,
123 b240400,
124 b460800,
125 b500000,
126 b576000,
127 b921600,
128 b1000000,
129 b1152000,
130 b1500000,
131 b2000000,
132 b2500000,
133 b3000000,
134 b3500000,
135 b4000000,
136 maxbaud,
137 crtscts,
138 /* character size. */
139 cs5,
140 cs6,
141 cs7,
142 cs8,
143 cstopb,
144 cread,
145 parenb,
146 parodd,
147 hupcl,
148 clocal,
149 /* local flags. */
150 lisig,
151 licanon,
152 lxcase,
153 lecho,
154 lechoe,
155 lechok,
156 lechonl,
157 lnoflsh,
158 ltopstop,
159 lechoctl,
160 lechoprt,
161 lechoke,
162 lflusho,
163 lpendin,
164 liexten
165} Flag;
166
167int
168doSetUnset (tcflag_t *bitset, unsigned int mask, int value)
169{
170 if (value)
171 (*bitset) |= mask;
172 else
173 (*bitset) &= (~mask);
174 return 1;
175}
176
177
178#ifdef __cplusplus
179extern "C" {
180#endif
181
182/* InitTermios - new data structure. */
183
184void *
185EXPORT (InitTermios) (void)
186{
187 struct termios *p = (struct termios *)malloc (sizeof (struct termios));
188
189 memset (p, 0, sizeof (struct termios));
190 return p;
191}
192
193/* KillTermios - delete data structure. */
194
195void *
196EXPORT (KillTermios) (struct termios *p)
197{
198 free (p);
199 return NULL;
200}
201
202/* tcsnow - return the value of TCSANOW. */
203
204int
205EXPORT (tcsnow) (void)
206{
207 return TCSANOW;
208}
209
210/* tcsdrain - return the value of TCSADRAIN. */
211
212int
213EXPORT (tcsdrain) (void)
214{
215 return TCSADRAIN;
216}
217
218/* tcsflush - return the value of TCSAFLUSH. */
219
220int
221EXPORT (tcsflush) (void)
222{
223 return TCSAFLUSH;
224}
225
226/* cfgetospeed - return output baud rate. */
227
228int
229EXPORT (cfgetospeed) (struct termios *t)
230{
231 return cfgetospeed (t);
232}
233
234/* cfgetispeed - return input baud rate. */
235
236int
237EXPORT (cfgetispeed) (struct termios *t)
238{
239 return cfgetispeed (t);
240}
241
242/* cfsetospeed - set output baud rate. */
243
244int
245EXPORT (cfsetospeed) (struct termios *t, unsigned int b)
246{
247 return cfsetospeed (t, b);
248}
249
250/* cfsetispeed - set input baud rate. */
251
252int
253EXPORT (cfsetispeed) (struct termios *t, unsigned int b)
254{
255 return cfsetispeed (t, b);
256}
257
258/* cfsetspeed - set input and output baud rate. */
259
260int
261EXPORT (cfsetspeed) (struct termios *t, unsigned int b)
262{
263 int val = cfsetispeed (t, b);
264 if (val == 0)
265 return cfsetospeed (t, b);
266 cfsetospeed (t, b);
267 return val;
268}
269
270/* tcgetattr - get state of, fd, into, t. */
271
272int
273EXPORT (tcgetattr) (int fd, struct termios *t)
274{
275 return tcgetattr (fd, t);
276}
277
278/* tcsetattr - set state of, fd, to, t, using option. */
279
280int
281EXPORT (tcsetattr) (int fd, int option, struct termios *t)
282{
283 return tcsetattr (fd, option, t);
284}
285
286/* cfmakeraw - sets the terminal to raw mode. */
287
288void
289EXPORT (cfmakeraw) (struct termios *t)
290{
291#if defined(HAVE_CFMAKERAW)
292 return cfmakeraw (t);
293#endif
294}
295
296/* tcsendbreak - send zero bits for duration. */
297
298int
299EXPORT (tcsendbreak) (int fd, int duration)
300{
301 return tcsendbreak (fd, duration);
302}
303
304/* tcdrain - waits for pending output to be written on, fd. */
305
306int
307EXPORT (tcdrain) (int fd)
308{
309 return tcdrain (fd);
310}
311
312/* tcflushi - flush input. */
313
314int
315EXPORT (tcflushi) (int fd)
316{
317#if defined(TCIFLUSH)
318 return tcflush (fd, TCIFLUSH);
319#else
320 return 1;
321#endif
322}
323
324/* tcflusho - flush output. */
325
326int
327EXPORT (tcflusho) (int fd)
328{
329#if defined(TCOFLUSH)
330 return tcflush (fd, TCOFLUSH);
331#else
332 return 1;
333#endif
334}
335
336/* tcflushio - flush input and output. */
337
338int
339EXPORT (tcflushio) (int fd)
340{
341#if defined(TCIOFLUSH)
342 return tcflush (fd, TCIOFLUSH);
343#else
344 return 1;
345#endif
346}
347
348/* tcflowoni - restart input on, fd. */
349
350int
351EXPORT (tcflowoni) (int fd)
352{
353#if defined(TCION)
354 return tcflow (fd, TCION);
355#else
356 return 1;
357#endif
358}
359
360/* tcflowoffi - stop input on, fd. */
361
362int
363EXPORT (tcflowoffi) (int fd)
364{
365#if defined(TCIOFF)
366 return tcflow (fd, TCIOFF);
367#else
368 return 1;
369#endif
370}
371
372/* tcflowono - restart output on, fd. */
373
374int
375EXPORT (tcflowono) (int fd)
376{
377#if defined(TCOON)
378 return tcflow (fd, TCOON);
379#else
380 return 1;
381#endif
382}
383
384/* tcflowoffo - stop output on, fd. */
385
386int
387EXPORT (tcflowoffo) (int fd)
388{
389#if defined(TCOOFF)
390 return tcflow (fd, TCOOFF);
391#else
392 return 1;
393#endif
394}
395
396/* GetFlag - sets a flag value from, t, in, b, and returns TRUE if,
397 t, supports, f. */
398
399int
400EXPORT (GetFlag) (struct termios *t, Flag f, int *b)
401{
402 switch (f)
403 {
404
405 case ignbrk:
406#if defined(IGNBRK)
407 *b = ((t->c_iflag & IGNBRK) == IGNBRK);
408 return 1;
409#else
410 return 0;
411#endif
412 case ibrkint:
413#if defined(BRKINT)
414 *b = ((t->c_iflag & BRKINT) == BRKINT);
415 return 1;
416#else
417 return 0;
418#endif
419 case ignpar:
420#if defined(IGNPAR)
421 *b = ((t->c_iflag & IGNPAR) == IGNPAR);
422 return 1;
423#else
424 return 0;
425#endif
426 case iparmrk:
427#if defined(PARMRK)
428 *b = ((t->c_iflag & PARMRK) == PARMRK);
429 return 1;
430#else
431 return 0;
432#endif
433 case inpck:
434#if defined(INPCK)
435 *b = ((t->c_iflag & INPCK) == INPCK);
436 return 1;
437#else
438 return 0;
439#endif
440 case istrip:
441#if defined(ISTRIP)
442 *b = ((t->c_iflag & ISTRIP) == ISTRIP);
443 return 1;
444#else
445 return 0;
446#endif
447 case inlcr:
448#if defined(INLCR)
449 *b = ((t->c_iflag & INLCR) == INLCR);
450 return 1;
451#else
452 return 0;
453#endif
454 case igncr:
455#if defined(IGNCR)
456 *b = ((t->c_iflag & IGNCR) == IGNCR);
457 return 1;
458#else
459 return 0;
460#endif
461 case icrnl:
462#if defined(ICRNL)
463 *b = ((t->c_iflag & ICRNL) == ICRNL);
464 return 1;
465#else
466 return 0;
467#endif
468 case iuclc:
469#if defined(IUCLC)
470 *b = ((t->c_iflag & IUCLC) == IUCLC);
471 return 1;
472#else
473 return 0;
474#endif
475 case ixon:
476#if defined(IXON)
477 *b = ((t->c_iflag & IXON) == IXON);
478 return 1;
479#else
480 return 0;
481#endif
482 case ixany:
483#if defined(IXANY)
484 *b = ((t->c_iflag & IXANY) == IXANY);
485 return 1;
486#else
487 return 0;
488#endif
489 case ixoff:
490#if defined(IXOFF)
491 *b = ((t->c_iflag & IXOFF) == IXOFF);
492 return 1;
493#else
494 return 0;
495#endif
496 case imaxbel:
497#if defined(IMAXBEL)
498 *b = ((t->c_iflag & IMAXBEL) == IMAXBEL);
499 return 1;
500#else
501 return 0;
502#endif
503 case opost:
504#if defined(OPOST)
505 *b = ((t->c_oflag & OPOST) == OPOST);
506 return 1;
507#else
508 return 0;
509#endif
510 case olcuc:
511#if defined(OLCUC)
512 *b = ((t->c_oflag & OLCUC) == OLCUC);
513 return 1;
514#else
515 return 0;
516#endif
517 case onlcr:
518#if defined(ONLCR)
519 *b = ((t->c_oflag & ONLCR) == ONLCR);
520 return 1;
521#else
522 return 0;
523#endif
524 case ocrnl:
525#if defined(OCRNL)
526 *b = ((t->c_oflag & OCRNL) == OCRNL);
527 return 1;
528#else
529 return 0;
530#endif
531 case onocr:
532#if defined(ONOCR)
533 *b = ((t->c_oflag & ONOCR) == ONOCR);
534 return 1;
535#else
536 return 0;
537#endif
538 case onlret:
539#if defined(ONLRET)
540 *b = ((t->c_oflag & ONLRET) == ONLRET);
541 return 1;
542#else
543 return 0;
544#endif
545 case ofill:
546#if defined(OFILL)
547 *b = ((t->c_oflag & OFILL) == OFILL);
548 return 1;
549#else
550 return 0;
551#endif
552 case ofdel:
553#if defined(OFDEL)
554 *b = ((t->c_oflag & OFDEL) == OFDEL);
555 return 1;
556#else
557 return 0;
558#endif
559 case onl0:
560#if defined(NL0)
561 *b = ((t->c_oflag & NL0) == NL0);
562 return 1;
563#else
564 return 0;
565#endif
566 case onl1:
567#if defined(NL1)
568 *b = ((t->c_oflag & NL1) == NL1);
569 return 1;
570#else
571 return 0;
572#endif
573 case ocr0:
574#if defined(CR0)
575 *b = ((t->c_oflag & CR0) == CR0);
576 return 1;
577#else
578 return 0;
579#endif
580 case ocr1:
581#if defined(CR1)
582 *b = ((t->c_oflag & CR1) == CR1);
583 return 1;
584#else
585 return 0;
586#endif
587 case ocr2:
588#if defined(CR2)
589 *b = ((t->c_oflag & CR2) == CR2);
590 return 1;
591#else
592 return 0;
593#endif
594 case ocr3:
595#if defined(CR3)
596 *b = ((t->c_oflag & CR3) == CR3);
597 return 1;
598#else
599 return 0;
600#endif
601 case otab0:
602#if defined(TAB0)
603 *b = ((t->c_oflag & TAB0) == TAB0);
604 return 1;
605#else
606 return 0;
607#endif
608 case otab1:
609#if defined(TAB1)
610 *b = ((t->c_oflag & TAB1) == TAB1);
611 return 1;
612#else
613 return 0;
614#endif
615 case otab2:
616#if defined(TAB2)
617 *b = ((t->c_oflag & TAB2) == TAB2);
618 return 1;
619#else
620 return 0;
621#endif
622 case otab3:
623#if defined(TAB3)
624 *b = ((t->c_oflag & TAB3) == TAB3);
625 return 1;
626#else
627 return 0;
628#endif
629 case obs0:
630#if defined(BS0)
631 *b = ((t->c_oflag & BS0) == BS0);
632 return 1;
633#else
634 return 0;
635#endif
636 case obs1:
637#if defined(BS1)
638 *b = ((t->c_oflag & BS1) == BS1);
639 return 1;
640#else
641 return 0;
642#endif
643 case off0:
644#if defined(FF0)
645 *b = ((t->c_oflag & FF0) == FF0);
646 return 1;
647#else
648 return 0;
649#endif
650 case off1:
651#if defined(FF1)
652 *b = ((t->c_oflag & FF1) == FF1);
653 return 1;
654#else
655 return 0;
656#endif
657 case ovt0:
658#if defined(VT0)
659 *b = ((t->c_oflag & VT0) == VT0);
660 return 1;
661#else
662 return 0;
663#endif
664 case ovt1:
665#if defined(VT1)
666 *b = ((t->c_oflag & VT1) == VT1);
667 return 1;
668#else
669 return 0;
670#endif
671 case b0:
672#if defined(B0)
673 *b = ((t->c_cflag & B0) == B0);
674 return 1;
675#else
676 return 0;
677#endif
678 case b50:
679#if defined(B50)
680 *b = ((t->c_cflag & B50) == B50);
681 return 1;
682#else
683 return 0;
684#endif
685 case b75:
686#if defined(B75)
687 *b = ((t->c_cflag & B75) == B75);
688 return 1;
689#else
690 return 0;
691#endif
692 case b110:
693#if defined(B110)
694 *b = ((t->c_cflag & B110) == B110);
695 return 1;
696#else
697 return 0;
698#endif
699 case b135:
700#if defined(B134)
701 *b = ((t->c_cflag & B134) == B134);
702 return 1;
703#else
704 return 0;
705#endif
706 case b150:
707#if defined(B150)
708 *b = ((t->c_cflag & B150) == B150);
709 return 1;
710#else
711 return 0;
712#endif
713 case b200:
714#if defined(B200)
715 *b = ((t->c_cflag & B200) == B200);
716 return 1;
717#else
718 return 0;
719#endif
720 case b300:
721#if defined(B300)
722 *b = ((t->c_cflag & B300) == B300);
723 return 1;
724#else
725 return 0;
726#endif
727 case b600:
728#if defined(B600)
729 *b = ((t->c_cflag & B600) == B600);
730 return 1;
731#else
732 return 0;
733#endif
734 case b1200:
735#if defined(B1200)
736 *b = ((t->c_cflag & B1200) == B1200);
737 return 1;
738#else
739 return 0;
740#endif
741 case b1800:
742#if defined(B1800)
743 *b = ((t->c_cflag & B1800) == B1800);
744 return 1;
745#else
746 return 0;
747#endif
748 case b2400:
749#if defined(B2400)
750 *b = ((t->c_cflag & B2400) == B2400);
751 return 1;
752#else
753 return 0;
754#endif
755 case b4800:
756#if defined(B4800)
757 *b = ((t->c_cflag & B4800) == B4800);
758 return 1;
759#else
760 return 0;
761#endif
762 case b9600:
763#if defined(B9600)
764 *b = ((t->c_cflag & B9600) == B9600);
765 return 1;
766#else
767 return 0;
768#endif
769 case b19200:
770#if defined(B19200)
771 *b = ((t->c_cflag & B19200) == B19200);
772 return 1;
773#else
774 return 0;
775#endif
776 case b38400:
777#if defined(B38400)
778 *b = ((t->c_cflag & B38400) == B38400);
779 return 1;
780#else
781 return 0;
782#endif
783 case b57600:
784#if defined(B57600)
785 *b = ((t->c_cflag & B57600) == B57600);
786 return 1;
787#else
788 return 0;
789#endif
790 case b115200:
791#if defined(B115200)
792 *b = ((t->c_cflag & B115200) == B115200);
793 return 1;
794#else
795 return 0;
796#endif
797 case b240400:
798#if defined(B230400)
799 *b = ((t->c_cflag & B230400) == B230400);
800 return 1;
801#else
802 return 0;
803#endif
804 case b460800:
805#if defined(B460800)
806 *b = ((t->c_cflag & B460800) == B460800);
807 return 1;
808#else
809 return 0;
810#endif
811 case b500000:
812#if defined(B500000)
813 *b = ((t->c_cflag & B500000) == B500000);
814 return 1;
815#else
816 return 0;
817#endif
818 case b576000:
819#if defined(B576000)
820 *b = ((t->c_cflag & B576000) == B576000);
821 return 1;
822#else
823 return 0;
824#endif
825 case b921600:
826#if defined(B921600)
827 *b = ((t->c_cflag & B921600) == B921600);
828 return 1;
829#else
830 return 0;
831#endif
832 case b1000000:
833#if defined(B1000000)
834 *b = ((t->c_cflag & B1000000) == B1000000);
835 return 1;
836#else
837 return 0;
838#endif
839 case b1152000:
840#if defined(B1152000)
841 *b = ((t->c_cflag & B1152000) == B1152000);
842 return 1;
843#else
844 return 0;
845#endif
846 case b1500000:
847#if defined(B1500000)
848 *b = ((t->c_cflag & B1500000) == B1500000);
849 return 1;
850#else
851 return 0;
852#endif
853 case b2000000:
854#if defined(B2000000)
855 *b = ((t->c_cflag & B2000000) == B2000000);
856 return 1;
857#else
858 return 0;
859#endif
860 case b2500000:
861#if defined(B2500000)
862 *b = ((t->c_cflag & B2500000) == B2500000);
863 return 1;
864#else
865 return 0;
866#endif
867 case b3000000:
868#if defined(B3000000)
869 *b = ((t->c_cflag & B3000000) == B3000000);
870 return 1;
871#else
872 return 0;
873#endif
874 case b3500000:
875#if defined(B3500000)
876 *b = ((t->c_cflag & B3500000) == B3500000);
877 return 1;
878#else
879 return 0;
880#endif
881 case b4000000:
882#if defined(B4000000)
883 *b = ((t->c_cflag & B4000000) == B4000000);
884 return 1;
885#else
886 return 0;
887#endif
888 case maxbaud:
889#if defined(__MAX_BAUD)
890 *b = ((t->c_cflag & __MAX_BAUD) == __MAX_BAUD);
891 return 1;
892#else
893 return 0;
894#endif
895 case crtscts:
896#if defined(CRTSCTS)
897 *b = ((t->c_cflag & CRTSCTS) == CRTSCTS);
898 return 1;
899#else
900 return 0;
901#endif
902 case cs5:
903#if defined(CS5)
904 *b = ((t->c_cflag & CS5) == CS5);
905 return 1;
906#else
907 return 0;
908#endif
909 case cs6:
910#if defined(CS6)
911 *b = ((t->c_cflag & CS6) == CS6);
912 return 1;
913#else
914 return 0;
915#endif
916 case cs7:
917#if defined(CS7)
918 *b = ((t->c_cflag & CS7) == CS7);
919 return 1;
920#else
921 return 0;
922#endif
923 case cs8:
924#if defined(CS8)
925 *b = ((t->c_cflag & CS8) == CS8);
926 return 1;
927#else
928 return 0;
929#endif
930 case cstopb:
931#if defined(CSTOPB)
932 *b = ((t->c_cflag & CSTOPB) == CSTOPB);
933 return 1;
934#else
935 return 0;
936#endif
937 case cread:
938#if defined(CREAD)
939 *b = ((t->c_cflag & CREAD) == CREAD);
940 return 1;
941#else
942 return 0;
943#endif
944 case parenb:
945#if defined(PARENB)
946 *b = ((t->c_cflag & PARENB) == PARENB);
947 return 1;
948#else
949 return 0;
950#endif
951 case parodd:
952#if defined(PARODD)
953 *b = ((t->c_cflag & PARODD) == PARODD);
954 return 1;
955#else
956 return 0;
957#endif
958 case hupcl:
959#if defined(HUPCL)
960 *b = ((t->c_cflag & HUPCL) == HUPCL);
961 return 1;
962#else
963 return 0;
964#endif
965 case clocal:
966#if defined(CLOCAL)
967 *b = ((t->c_cflag & CLOCAL) == CLOCAL);
968 return 1;
969#else
970 return 0;
971#endif
972 case lisig:
973#if defined(ISIG)
974 *b = ((t->c_lflag & ISIG) == ISIG);
975 return 1;
976#else
977 return 0;
978#endif
979 case licanon:
980#if defined(ICANON)
981 *b = ((t->c_lflag & ICANON) == ICANON);
982 return 1;
983#else
984 return 0;
985#endif
986 case lxcase:
987#if defined(XCASE)
988 *b = ((t->c_lflag & XCASE) == XCASE);
989 return 1;
990#else
991 return 0;
992#endif
993 case lecho:
994#if defined(ECHO)
995 *b = ((t->c_lflag & ECHO) == ECHO);
996 return 1;
997#else
998 return 0;
999#endif
1000 case lechoe:
1001#if defined(ECHOE)
1002 *b = ((t->c_lflag & ECHOE) == ECHOE);
1003 return 1;
1004#else
1005 return 0;
1006#endif
1007 case lechok:
1008#if defined(ECHOK)
1009 *b = ((t->c_lflag & ECHOK) == ECHOK);
1010 return 1;
1011#else
1012 return 0;
1013#endif
1014 case lechonl:
1015#if defined(ECHONL)
1016 *b = ((t->c_lflag & ECHONL) == ECHONL);
1017 return 1;
1018#else
1019 return 0;
1020#endif
1021 case lnoflsh:
1022#if defined(NOFLSH)
1023 *b = ((t->c_lflag & NOFLSH) == NOFLSH);
1024 return 1;
1025#else
1026 return 0;
1027#endif
1028 case ltopstop:
1029#if defined(TOSTOP)
1030 *b = ((t->c_lflag & TOSTOP) == TOSTOP);
1031 return 1;
1032#else
1033 return 0;
1034#endif
1035 case lechoctl:
1036#if defined(ECHOCTL)
1037 *b = ((t->c_lflag & ECHOCTL) == ECHOCTL);
1038 return 1;
1039#else
1040 return 0;
1041#endif
1042 case lechoprt:
1043#if defined(ECHOPRT)
1044 *b = ((t->c_lflag & ECHOPRT) == ECHOPRT);
1045 return 1;
1046#else
1047 return 0;
1048#endif
1049 case lechoke:
1050#if defined(ECHOKE)
1051 *b = ((t->c_lflag & ECHOKE) == ECHOKE);
1052 return 1;
1053#else
1054 return 0;
1055#endif
1056 case lflusho:
1057#if defined(FLUSHO)
1058 *b = ((t->c_lflag & FLUSHO) == FLUSHO);
1059 return 1;
1060#else
1061 return 0;
1062#endif
1063 case lpendin:
1064#if defined(PENDIN)
1065 *b = ((t->c_lflag & PENDIN) == PENDIN);
1066 return 1;
1067#else
1068 return 0;
1069#endif
1070 case liexten:
1071#if defined(IEXTEN)
1072 *b = ((t->c_lflag & IEXTEN) == IEXTEN);
1073 return 1;
1074#else
1075 return 0;
1076#endif
1077 }
1078 return 0;
1079}
1080
1081/* SetFlag - sets a flag value in, t, to, b, and returns TRUE if this
1082 flag value is supported. */
1083
1084int
1085EXPORT (SetFlag) (struct termios *t, Flag f, int b)
1086{
1087 switch (f)
1088 {
1089 case ignbrk:
1090#if defined(IGNBRK)
1091 return doSetUnset (&t->c_iflag, IGNBRK, b);
1092#else
1093 return 0;
1094#endif
1095 case ibrkint:
1096#if defined(BRKINT)
1097 return doSetUnset (&t->c_iflag, BRKINT, b);
1098#else
1099 return 0;
1100#endif
1101 case ignpar:
1102#if defined(IGNPAR)
1103 return doSetUnset (&t->c_iflag, IGNPAR, b);
1104#else
1105 return 0;
1106#endif
1107 case iparmrk:
1108#if defined(PARMRK)
1109 return doSetUnset (&t->c_iflag, PARMRK, b);
1110#else
1111 return 0;
1112#endif
1113 case inpck:
1114#if defined(INPCK)
1115 return doSetUnset (&t->c_iflag, INPCK, b);
1116#else
1117 return 0;
1118#endif
1119 case istrip:
1120#if defined(ISTRIP)
1121 return doSetUnset (&t->c_iflag, ISTRIP, b);
1122#else
1123 return 0;
1124#endif
1125 case inlcr:
1126#if defined(INLCR)
1127 return doSetUnset (&t->c_iflag, INLCR, b);
1128#else
1129 return 0;
1130#endif
1131 case igncr:
1132#if defined(IGNCR)
1133 return doSetUnset (&t->c_iflag, IGNCR, b);
1134#else
1135 return 0;
1136#endif
1137 case icrnl:
1138#if defined(ICRNL)
1139 return doSetUnset (&t->c_iflag, ICRNL, b);
1140#else
1141 return 0;
1142#endif
1143 case iuclc:
1144#if defined(IUCLC)
1145 return doSetUnset (&t->c_iflag, IUCLC, b);
1146#else
1147 return 0;
1148#endif
1149 case ixon:
1150#if defined(IXON)
1151 return doSetUnset (&t->c_iflag, IXON, b);
1152#else
1153 return 0;
1154#endif
1155 case ixany:
1156#if defined(IXANY)
1157 return doSetUnset (&t->c_iflag, IXANY, b);
1158#else
1159 return 0;
1160#endif
1161 case ixoff:
1162#if defined(IXOFF)
1163 return doSetUnset (&t->c_iflag, IXOFF, b);
1164#else
1165 return 0;
1166#endif
1167 case imaxbel:
1168#if defined(IMAXBEL)
1169 return doSetUnset (&t->c_iflag, IMAXBEL, b);
1170#else
1171 return 0;
1172#endif
1173 case opost:
1174#if defined(OPOST)
1175 return doSetUnset (&t->c_oflag, OPOST, b);
1176#else
1177 return 0;
1178#endif
1179 case olcuc:
1180#if defined(OLCUC)
1181 return doSetUnset (&t->c_oflag, OLCUC, b);
1182#else
1183 return 0;
1184#endif
1185 case onlcr:
1186#if defined(ONLCR)
1187 return doSetUnset (&t->c_oflag, ONLCR, b);
1188#else
1189 return 0;
1190#endif
1191 case ocrnl:
1192#if defined(OCRNL)
1193 return doSetUnset (&t->c_oflag, OCRNL, b);
1194#else
1195 return 0;
1196#endif
1197 case onocr:
1198#if defined(ONOCR)
1199 return doSetUnset (&t->c_oflag, ONOCR, b);
1200#else
1201 return 0;
1202#endif
1203 case onlret:
1204#if defined(ONLRET)
1205 return doSetUnset (&t->c_oflag, ONLRET, b);
1206#else
1207 return 0;
1208#endif
1209 case ofill:
1210#if defined(OFILL)
1211 return doSetUnset (&t->c_oflag, OFILL, b);
1212#else
1213 return 0;
1214#endif
1215 case ofdel:
1216#if defined(OFDEL)
1217 return doSetUnset (&t->c_oflag, OFDEL, b);
1218#else
1219 return 0;
1220#endif
1221 case onl0:
1222#if defined(NL0)
1223 return doSetUnset (&t->c_oflag, NL0, b);
1224#else
1225 return 0;
1226#endif
1227 case onl1:
1228#if defined(NL1)
1229 return doSetUnset (&t->c_oflag, NL1, b);
1230#else
1231 return 0;
1232#endif
1233 case ocr0:
1234#if defined(CR0)
1235 return doSetUnset (&t->c_oflag, CR0, b);
1236#else
1237 return 0;
1238#endif
1239 case ocr1:
1240#if defined(CR1)
1241 return doSetUnset (&t->c_oflag, CR1, b);
1242#else
1243 return 0;
1244#endif
1245 case ocr2:
1246#if defined(CR2)
1247 return doSetUnset (&t->c_oflag, CR2, b);
1248#else
1249 return 0;
1250#endif
1251 case ocr3:
1252#if defined(CR3)
1253 return doSetUnset (&t->c_oflag, CR3, b);
1254#else
1255 return 0;
1256#endif
1257 case otab0:
1258#if defined(TAB0)
1259 return doSetUnset (&t->c_oflag, TAB0, b);
1260#else
1261 return 0;
1262#endif
1263 case otab1:
1264#if defined(TAB1)
1265 return doSetUnset (&t->c_oflag, TAB1, b);
1266#else
1267 return 0;
1268#endif
1269 case otab2:
1270#if defined(TAB2)
1271 return doSetUnset (&t->c_oflag, TAB2, b);
1272#else
1273 return 0;
1274#endif
1275 case otab3:
1276#if defined(TAB3)
1277 return doSetUnset (&t->c_oflag, TAB3, b);
1278#else
1279 return 0;
1280#endif
1281 case obs0:
1282#if defined(BS0)
1283 return doSetUnset (&t->c_oflag, BS0, b);
1284#else
1285 return 0;
1286#endif
1287 case obs1:
1288#if defined(BS1)
1289 return doSetUnset (&t->c_oflag, BS1, b);
1290#else
1291 return 0;
1292#endif
1293 case off0:
1294#if defined(FF0)
1295 return doSetUnset (&t->c_oflag, FF0, b);
1296#else
1297 return 0;
1298#endif
1299 case off1:
1300#if defined(FF1)
1301 return doSetUnset (&t->c_oflag, FF1, b);
1302#else
1303 return 0;
1304#endif
1305 case ovt0:
1306#if defined(VT0)
1307 return doSetUnset (&t->c_oflag, VT0, b);
1308#else
1309 return 0;
1310#endif
1311 case ovt1:
1312#if defined(VT1)
1313 return doSetUnset (&t->c_oflag, VT1, b);
1314#else
1315 return 0;
1316#endif
1317 case b0:
1318#if defined(B0)
1319 return doSetUnset (&t->c_cflag, B0, b);
1320#else
1321 return 0;
1322#endif
1323 case b50:
1324#if defined(B50)
1325 return doSetUnset (&t->c_cflag, B50, b);
1326#else
1327 return 0;
1328#endif
1329 case b75:
1330#if defined(B75)
1331 return doSetUnset (&t->c_cflag, B75, b);
1332#else
1333 return 0;
1334#endif
1335 case b110:
1336#if defined(B110)
1337 return doSetUnset (&t->c_cflag, B110, b);
1338#else
1339 return 0;
1340#endif
1341 case b135:
1342#if defined(B134)
1343 return doSetUnset (&t->c_cflag, B134, b);
1344#else
1345 return 0;
1346#endif
1347 case b150:
1348#if defined(B150)
1349 return doSetUnset (&t->c_cflag, B150, b);
1350#else
1351 return 0;
1352#endif
1353 case b200:
1354#if defined(B200)
1355 return doSetUnset (&t->c_cflag, B200, b);
1356#else
1357 return 0;
1358#endif
1359 case b300:
1360#if defined(B300)
1361 return doSetUnset (&t->c_cflag, B300, b);
1362#else
1363 return 0;
1364#endif
1365 case b600:
1366#if defined(B600)
1367 return doSetUnset (&t->c_cflag, B600, b);
1368#else
1369 return 0;
1370#endif
1371 case b1200:
1372#if defined(B1200)
1373 return doSetUnset (&t->c_cflag, B1200, b);
1374#else
1375 return 0;
1376#endif
1377 case b1800:
1378#if defined(B1800)
1379 return doSetUnset (&t->c_cflag, B1800, b);
1380#else
1381 return 0;
1382#endif
1383 case b2400:
1384#if defined(B2400)
1385 return doSetUnset (&t->c_cflag, B2400, b);
1386#else
1387 return 0;
1388#endif
1389 case b4800:
1390#if defined(B4800)
1391 return doSetUnset (&t->c_cflag, B4800, b);
1392#else
1393 return 0;
1394#endif
1395 case b9600:
1396#if defined(B9600)
1397 return doSetUnset (&t->c_cflag, B9600, b);
1398#else
1399 return 0;
1400#endif
1401 case b19200:
1402#if defined(B19200)
1403 return doSetUnset (&t->c_cflag, B19200, b);
1404#else
1405 return 0;
1406#endif
1407 case b38400:
1408#if defined(B38400)
1409 return doSetUnset (&t->c_cflag, B38400, b);
1410#else
1411 return 0;
1412#endif
1413 case b57600:
1414#if defined(B57600)
1415 return doSetUnset (&t->c_cflag, B57600, b);
1416#else
1417 return 0;
1418#endif
1419 case b115200:
1420#if defined(B115200)
1421 return doSetUnset (&t->c_cflag, B115200, b);
1422#else
1423 return 0;
1424#endif
1425 case b240400:
1426#if defined(B230400)
1427 return doSetUnset (&t->c_cflag, B230400, b);
1428#else
1429 return 0;
1430#endif
1431 case b460800:
1432#if defined(B460800)
1433 return doSetUnset (&t->c_cflag, B460800, b);
1434#else
1435 return 0;
1436#endif
1437 case b500000:
1438#if defined(B500000)
1439 return doSetUnset (&t->c_cflag, B500000, b);
1440#else
1441 return 0;
1442#endif
1443 case b576000:
1444#if defined(B576000)
1445 return doSetUnset (&t->c_cflag, B576000, b);
1446#else
1447 return 0;
1448#endif
1449 case b921600:
1450#if defined(B921600)
1451 return doSetUnset (&t->c_cflag, B921600, b);
1452#else
1453 return 0;
1454#endif
1455 case b1000000:
1456#if defined(B1000000)
1457 return doSetUnset (&t->c_cflag, B1000000, b);
1458#else
1459 return 0;
1460#endif
1461 case b1152000:
1462#if defined(B1152000)
1463 return doSetUnset (&t->c_cflag, B1152000, b);
1464#else
1465 return 0;
1466#endif
1467 case b1500000:
1468#if defined(B1500000)
1469 return doSetUnset (&t->c_cflag, B1500000, b);
1470#else
1471 return 0;
1472#endif
1473 case b2000000:
1474#if defined(B2000000)
1475 return doSetUnset (&t->c_cflag, B2000000, b);
1476#else
1477 return 0;
1478#endif
1479 case b2500000:
1480#if defined(B2500000)
1481 return doSetUnset (&t->c_cflag, B2500000, b);
1482#else
1483 return 0;
1484#endif
1485 case b3000000:
1486#if defined(B3000000)
1487 return doSetUnset (&t->c_cflag, B3000000, b);
1488#else
1489 return 0;
1490#endif
1491 case b3500000:
1492#if defined(B3500000)
1493 return doSetUnset (&t->c_cflag, B3500000, b);
1494#else
1495 return 0;
1496#endif
1497 case b4000000:
1498#if defined(B4000000)
1499 return doSetUnset (&t->c_cflag, B4000000, b);
1500#else
1501 return 0;
1502#endif
1503 case maxbaud:
1504#if defined(__MAX_BAUD)
1505 return doSetUnset (&t->c_cflag, __MAX_BAUD, b);
1506#else
1507 return 0;
1508#endif
1509 case crtscts:
1510#if defined(CRTSCTS)
1511 return doSetUnset (&t->c_cflag, CRTSCTS, b);
1512#else
1513 return 0;
1514#endif
1515 case cs5:
1516#if defined(CS5)
1517 return doSetUnset (&t->c_cflag, CS5, b);
1518#else
1519 return 0;
1520#endif
1521 case cs6:
1522#if defined(CS6)
1523 return doSetUnset (&t->c_cflag, CS6, b);
1524#else
1525 return 0;
1526#endif
1527 case cs7:
1528#if defined(CS7)
1529 return doSetUnset (&t->c_cflag, CS7, b);
1530#else
1531 return 0;
1532#endif
1533 case cs8:
1534#if defined(CS8)
1535 return doSetUnset (&t->c_cflag, CS8, b);
1536#else
1537 return 0;
1538#endif
1539 case cstopb:
1540#if defined(CSTOPB)
1541 return doSetUnset (&t->c_cflag, CSTOPB, b);
1542#else
1543 return 0;
1544#endif
1545 case cread:
1546#if defined(CREAD)
1547 return doSetUnset (&t->c_cflag, CREAD, b);
1548#else
1549 return 0;
1550#endif
1551 case parenb:
1552#if defined(PARENB)
1553 return doSetUnset (&t->c_cflag, PARENB, b);
1554#else
1555 return 0;
1556#endif
1557 case parodd:
1558#if defined(PARODD)
1559 return doSetUnset (&t->c_cflag, PARODD, b);
1560#else
1561 return 0;
1562#endif
1563 case hupcl:
1564#if defined(HUPCL)
1565 return doSetUnset (&t->c_cflag, HUPCL, b);
1566#else
1567 return 0;
1568#endif
1569 case clocal:
1570#if defined(CLOCAL)
1571 return doSetUnset (&t->c_cflag, CLOCAL, b);
1572#else
1573 return 0;
1574#endif
1575 case lisig:
1576#if defined(ISIG)
1577 return doSetUnset (&t->c_lflag, ISIG, b);
1578#else
1579 return 0;
1580#endif
1581 case licanon:
1582#if defined(ICANON)
1583 return doSetUnset (&t->c_lflag, ICANON, b);
1584#else
1585 return 0;
1586#endif
1587 case lxcase:
1588#if defined(XCASE)
1589 return doSetUnset (&t->c_lflag, XCASE, b);
1590#else
1591 return 0;
1592#endif
1593 case lecho:
1594#if defined(ECHO)
1595 return doSetUnset (&t->c_lflag, ECHO, b);
1596#else
1597 return 0;
1598#endif
1599 case lechoe:
1600#if defined(ECHOE)
1601 return doSetUnset (&t->c_lflag, ECHOE, b);
1602#else
1603 return 0;
1604#endif
1605 case lechok:
1606#if defined(ECHOK)
1607 return doSetUnset (&t->c_lflag, ECHOK, b);
1608#else
1609 return 0;
1610#endif
1611 case lechonl:
1612#if defined(ECHONL)
1613 return doSetUnset (&t->c_lflag, ECHONL, b);
1614#else
1615 return 0;
1616#endif
1617 case lnoflsh:
1618#if defined(NOFLSH)
1619 return doSetUnset (&t->c_lflag, NOFLSH, b);
1620#else
1621 return 0;
1622#endif
1623 case ltopstop:
1624#if defined(TOSTOP)
1625 return doSetUnset (&t->c_lflag, TOSTOP, b);
1626#else
1627 return 0;
1628#endif
1629 case lechoctl:
1630#if defined(ECHOCTL)
1631 return doSetUnset (&t->c_lflag, ECHOCTL, b);
1632#else
1633 return 0;
1634#endif
1635 case lechoprt:
1636#if defined(ECHOPRT)
1637 return doSetUnset (&t->c_lflag, ECHOPRT, b);
1638#else
1639 return 0;
1640#endif
1641 case lechoke:
1642#if defined(ECHOKE)
1643 return doSetUnset (&t->c_lflag, ECHOKE, b);
1644#else
1645 return 0;
1646#endif
1647 case lflusho:
1648#if defined(FLUSHO)
1649 return doSetUnset (&t->c_lflag, FLUSHO, b);
1650#else
1651 return 0;
1652#endif
1653 case lpendin:
1654#if defined(PENDIN)
1655 return doSetUnset (&t->c_lflag, PENDIN, b);
1656#else
1657 return 0;
1658#endif
1659 case liexten:
1660#if defined(IEXTEN)
1661 return doSetUnset (&t->c_lflag, IEXTEN, b);
1662#else
1663 return 0;
1664#endif
1665 }
1666 return 0;
1667}
1668
1669/* GetChar - sets a CHAR, ch, value from, t, and returns TRUE if this
1670 value is supported. */
1671
1672int
1673EXPORT (GetChar) (struct termios *t, ControlChar c, char *ch)
1674{
1675 switch (c)
1676 {
1677
1678 case vintr:
1679#if defined(VINTR)
1680 *ch = t->c_cc[VINTR];
1681 return 1;
1682#else
1683 return 0;
1684#endif
1685 case vquit:
1686#if defined(VQUIT)
1687 *ch = t->c_cc[VQUIT];
1688 return 1;
1689#else
1690 return 0;
1691#endif
1692 case verase:
1693#if defined(VERASE)
1694 *ch = t->c_cc[VERASE];
1695 return 1;
1696#else
1697 return 0;
1698#endif
1699 case vkill:
1700#if defined(VKILL)
1701 *ch = t->c_cc[VKILL];
1702 return 1;
1703#else
1704 return 0;
1705#endif
1706 case veof:
1707#if defined(VEOF)
1708 *ch = t->c_cc[VEOF];
1709 return 1;
1710#else
1711 return 0;
1712#endif
1713 case vtime:
1714#if defined(VTIME)
1715 *ch = t->c_cc[VTIME];
1716 return 1;
1717#else
1718 return 0;
1719#endif
1720 case vmin:
1721#if defined(VMIN)
1722 *ch = t->c_cc[VMIN];
1723 return 1;
1724#else
1725 return 0;
1726#endif
1727 case vswtc:
1728#if defined(VSWTC)
1729 *ch = t->c_cc[VSWTC];
1730 return 1;
1731#else
1732 return 0;
1733#endif
1734 case vstart:
1735#if defined(VSTART)
1736 *ch = t->c_cc[VSTART];
1737 return 1;
1738#else
1739 return 0;
1740#endif
1741 case vstop:
1742#if defined(VSTOP)
1743 *ch = t->c_cc[VSTOP];
1744 return 1;
1745#else
1746 return 0;
1747#endif
1748 case vsusp:
1749#if defined(VSUSP)
1750 *ch = t->c_cc[VSUSP];
1751 return 1;
1752#else
1753 return 0;
1754#endif
1755 case veol:
1756#if defined(VEOL)
1757 *ch = t->c_cc[VEOL];
1758 return 1;
1759#else
1760 return 0;
1761#endif
1762 case vreprint:
1763#if defined(VREPRINT)
1764 *ch = t->c_cc[VREPRINT];
1765 return 1;
1766#else
1767 return 0;
1768#endif
1769 case vdiscard:
1770#if defined(VDISCARD)
1771 *ch = t->c_cc[VDISCARD];
1772 return 1;
1773#else
1774 return 0;
1775#endif
1776 case vwerase:
1777#if defined(VWERASE)
1778 *ch = t->c_cc[VWERASE];
1779 return 1;
1780#else
1781 return 0;
1782#endif
1783 case vlnext:
1784#if defined(VLNEXT)
1785 *ch = t->c_cc[VLNEXT];
1786 return 1;
1787#else
1788 return 0;
1789#endif
1790 case veol2:
1791#if defined(VEOL2)
1792 *ch = t->c_cc[VEOL2];
1793 return 1;
1794#else
1795 return 0;
1796#endif
1797 default:
1798 return 0;
1799 }
1800}
1801
1802/* SetChar - sets a CHAR value in, t, and returns TRUE if, c, is
1803 supported. */
1804
1805int
1806EXPORT (SetChar) (struct termios *t, ControlChar c, char ch)
1807{
1808 switch (c)
1809 {
1810
1811 case vintr:
1812#if defined(VINTR)
1813 t->c_cc[VINTR] = ch;
1814 return 1;
1815#else
1816 return 0;
1817#endif
1818 case vquit:
1819#if defined(VQUIT)
1820 t->c_cc[VQUIT] = ch;
1821 return 1;
1822#else
1823 return 0;
1824#endif
1825 case verase:
1826#if defined(VERASE)
1827 t->c_cc[VERASE] = ch;
1828 return 1;
1829#else
1830 return 0;
1831#endif
1832 case vkill:
1833#if defined(VKILL)
1834 t->c_cc[VKILL] = ch;
1835 return 1;
1836#else
1837 return 0;
1838#endif
1839 case veof:
1840#if defined(VEOF)
1841 t->c_cc[VEOF] = ch;
1842 return 1;
1843#else
1844 return 0;
1845#endif
1846 case vtime:
1847#if defined(VTIME)
1848 t->c_cc[VTIME] = ch;
1849 return 1;
1850#else
1851 return 0;
1852#endif
1853 case vmin:
1854#if defined(VMIN)
1855 t->c_cc[VMIN] = ch;
1856 return 1;
1857#else
1858 return 0;
1859#endif
1860 case vswtc:
1861#if defined(VSWTC)
1862 t->c_cc[VSWTC] = ch;
1863 return 1;
1864#else
1865 return 0;
1866#endif
1867 case vstart:
1868#if defined(VSTART)
1869 t->c_cc[VSTART] = ch;
1870 return 1;
1871#else
1872 return 0;
1873#endif
1874 case vstop:
1875#if defined(VSTOP)
1876 t->c_cc[VSTOP] = ch;
1877 return 1;
1878#else
1879 return 0;
1880#endif
1881 case vsusp:
1882#if defined(VSUSP)
1883 t->c_cc[VSUSP] = ch;
1884 return 1;
1885#else
1886 return 0;
1887#endif
1888 case veol:
1889#if defined(VEOL)
1890 t->c_cc[VEOL] = ch;
1891 return 1;
1892#else
1893 return 0;
1894#endif
1895 case vreprint:
1896#if defined(VREPRINT)
1897 t->c_cc[VREPRINT] = ch;
1898 return 1;
1899#else
1900 return 0;
1901#endif
1902 case vdiscard:
1903#if defined(VDISCARD)
1904 t->c_cc[VDISCARD] = ch;
1905 return 1;
1906#else
1907 return 0;
1908#endif
1909 case vwerase:
1910#if defined(VWERASE)
1911 t->c_cc[VWERASE] = ch;
1912 return 1;
1913#else
1914 return 0;
1915#endif
1916 case vlnext:
1917#if defined(VLNEXT)
1918 t->c_cc[VLNEXT] = ch;
1919 return 1;
1920#else
1921 return 0;
1922#endif
1923 case veol2:
1924#if defined(VEOL2)
1925 t->c_cc[VEOL2] = ch;
1926 return 1;
1927#else
1928 return 0;
1929#endif
1930 default:
1931 return 0;
1932 }
1933}
1934
1935void
1936_M2_termios_init (void)
1937{
1938}
1939
1940void
05652ac4 1941_M2_termios_fini (void)
1eee94d3
GM
1942{
1943}
1944
1945#ifdef __cplusplus
1946}
1947#endif