+#define MI_ENTRY(N,T,F,B,M) N "\0"
+
+/* Mode names given on command line */
+static const char mode_name[] ALIGN1 =
+ MI_ENTRY("evenp", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("parity", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("oddp", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("nl", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("ek", combination, OMIT, 0, 0 )
+ MI_ENTRY("sane", combination, OMIT, 0, 0 )
+ MI_ENTRY("cooked", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("raw", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("pass8", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("litout", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("cbreak", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("crt", combination, OMIT, 0, 0 )
+ MI_ENTRY("dec", combination, OMIT, 0, 0 )
+#if IXANY
+ MI_ENTRY("decctlq", combination, REV | OMIT, 0, 0 )
+#endif
+#if TABDLY || OXTABS
+ MI_ENTRY("tabs", combination, REV | OMIT, 0, 0 )
+#endif
+#if XCASE && IUCLC && OLCUC
+ MI_ENTRY("lcase", combination, REV | OMIT, 0, 0 )
+ MI_ENTRY("LCASE", combination, REV | OMIT, 0, 0 )
+#endif
+ MI_ENTRY("parenb", control, REV, PARENB, 0 )
+ MI_ENTRY("parodd", control, REV, PARODD, 0 )
+#if CMSPAR
+ MI_ENTRY("cmspar", control, REV, CMSPAR, 0 )
+#endif
+ MI_ENTRY("cs5", control, 0, CS5, CSIZE)
+ MI_ENTRY("cs6", control, 0, CS6, CSIZE)
+ MI_ENTRY("cs7", control, 0, CS7, CSIZE)
+ MI_ENTRY("cs8", control, 0, CS8, CSIZE)
+ MI_ENTRY("hupcl", control, REV, HUPCL, 0 )
+ MI_ENTRY("hup", control, REV | OMIT, HUPCL, 0 )
+ MI_ENTRY("cstopb", control, REV, CSTOPB, 0 )
+ MI_ENTRY("cread", control, SANE_SET | REV, CREAD, 0 )
+ MI_ENTRY("clocal", control, REV, CLOCAL, 0 )
+#if CRTSCTS
+ MI_ENTRY("crtscts", control, REV, CRTSCTS, 0 )
+#endif
+ MI_ENTRY("ignbrk", input, SANE_UNSET | REV, IGNBRK, 0 )
+ MI_ENTRY("brkint", input, SANE_SET | REV, BRKINT, 0 )
+ MI_ENTRY("ignpar", input, REV, IGNPAR, 0 )
+ MI_ENTRY("parmrk", input, REV, PARMRK, 0 )
+ MI_ENTRY("inpck", input, REV, INPCK, 0 )
+ MI_ENTRY("istrip", input, REV, ISTRIP, 0 )
+ MI_ENTRY("inlcr", input, SANE_UNSET | REV, INLCR, 0 )
+ MI_ENTRY("igncr", input, SANE_UNSET | REV, IGNCR, 0 )
+ MI_ENTRY("icrnl", input, SANE_SET | REV, ICRNL, 0 )
+ MI_ENTRY("ixon", input, REV, IXON, 0 )
+ MI_ENTRY("ixoff", input, SANE_UNSET | REV, IXOFF, 0 )
+ MI_ENTRY("tandem", input, OMIT | REV, IXOFF, 0 )
+#if IUCLC
+ MI_ENTRY("iuclc", input, SANE_UNSET | REV, IUCLC, 0 )
+#endif
+#if IXANY
+ MI_ENTRY("ixany", input, SANE_UNSET | REV, IXANY, 0 )
+#endif
+#if IMAXBEL
+ MI_ENTRY("imaxbel", input, SANE_SET | REV, IMAXBEL, 0 )
+#endif
+#if IUTF8
+ MI_ENTRY("iutf8", input, SANE_UNSET | REV, IUTF8, 0 )
+#endif
+ MI_ENTRY("opost", output, SANE_SET | REV, OPOST, 0 )
+#if OLCUC
+ MI_ENTRY("olcuc", output, SANE_UNSET | REV, OLCUC, 0 )
+#endif
+#if OCRNL
+ MI_ENTRY("ocrnl", output, SANE_UNSET | REV, OCRNL, 0 )
+#endif
+#if ONLCR
+ MI_ENTRY("onlcr", output, SANE_SET | REV, ONLCR, 0 )
+#endif
+#if ONOCR
+ MI_ENTRY("onocr", output, SANE_UNSET | REV, ONOCR, 0 )
+#endif
+#if ONLRET
+ MI_ENTRY("onlret", output, SANE_UNSET | REV, ONLRET, 0 )
+#endif
+#if OFILL
+ MI_ENTRY("ofill", output, SANE_UNSET | REV, OFILL, 0 )
+#endif
+#if OFDEL
+ MI_ENTRY("ofdel", output, SANE_UNSET | REV, OFDEL, 0 )
+#endif
+#if NLDLY
+ MI_ENTRY("nl1", output, SANE_UNSET, NL1, NLDLY)
+ MI_ENTRY("nl0", output, SANE_SET, NL0, NLDLY)
+#endif
+#if CRDLY
+ MI_ENTRY("cr3", output, SANE_UNSET, CR3, CRDLY)
+ MI_ENTRY("cr2", output, SANE_UNSET, CR2, CRDLY)
+ MI_ENTRY("cr1", output, SANE_UNSET, CR1, CRDLY)
+ MI_ENTRY("cr0", output, SANE_SET, CR0, CRDLY)
+#endif
+
+#if TABDLY
+ MI_ENTRY("tab3", output, SANE_UNSET, TAB3, TABDLY)
+# if TAB2
+ MI_ENTRY("tab2", output, SANE_UNSET, TAB2, TABDLY)
+# endif
+# if TAB1
+ MI_ENTRY("tab1", output, SANE_UNSET, TAB1, TABDLY)
+# endif
+ MI_ENTRY("tab0", output, SANE_SET, TAB0, TABDLY)
+#else
+# if OXTABS
+ MI_ENTRY("tab3", output, SANE_UNSET, OXTABS, 0 )
+# endif
+#endif
+
+#if BSDLY
+ MI_ENTRY("bs1", output, SANE_UNSET, BS1, BSDLY)
+ MI_ENTRY("bs0", output, SANE_SET, BS0, BSDLY)
+#endif
+#if VTDLY
+ MI_ENTRY("vt1", output, SANE_UNSET, VT1, VTDLY)
+ MI_ENTRY("vt0", output, SANE_SET, VT0, VTDLY)
+#endif
+#if FFDLY
+ MI_ENTRY("ff1", output, SANE_UNSET, FF1, FFDLY)
+ MI_ENTRY("ff0", output, SANE_SET, FF0, FFDLY)
+#endif
+ MI_ENTRY("isig", local, SANE_SET | REV, ISIG, 0 )
+ MI_ENTRY("icanon", local, SANE_SET | REV, ICANON, 0 )
+#if IEXTEN
+ MI_ENTRY("iexten", local, SANE_SET | REV, IEXTEN, 0 )
+#endif
+ MI_ENTRY("echo", local, SANE_SET | REV, ECHO, 0 )
+ MI_ENTRY("echoe", local, SANE_SET | REV, ECHOE, 0 )
+ MI_ENTRY("crterase", local, OMIT | REV, ECHOE, 0 )
+ MI_ENTRY("echok", local, SANE_SET | REV, ECHOK, 0 )
+ MI_ENTRY("echonl", local, SANE_UNSET | REV, ECHONL, 0 )
+ MI_ENTRY("noflsh", local, SANE_UNSET | REV, NOFLSH, 0 )
+#if XCASE
+ MI_ENTRY("xcase", local, SANE_UNSET | REV, XCASE, 0 )
+#endif
+#if TOSTOP
+ MI_ENTRY("tostop", local, SANE_UNSET | REV, TOSTOP, 0 )
+#endif
+#if ECHOPRT
+ MI_ENTRY("echoprt", local, SANE_UNSET | REV, ECHOPRT, 0 )
+ MI_ENTRY("prterase", local, OMIT | REV, ECHOPRT, 0 )
+#endif
+#if ECHOCTL
+ MI_ENTRY("echoctl", local, SANE_SET | REV, ECHOCTL, 0 )
+ MI_ENTRY("ctlecho", local, OMIT | REV, ECHOCTL, 0 )
+#endif
+#if ECHOKE
+ MI_ENTRY("echoke", local, SANE_SET | REV, ECHOKE, 0 )
+ MI_ENTRY("crtkill", local, OMIT | REV, ECHOKE, 0 )
+#endif
+ MI_ENTRY("flusho", local, SANE_UNSET | REV, FLUSHO, 0 )
+#ifdef EXTPROC
+ MI_ENTRY("extproc", local, SANE_UNSET | REV, EXTPROC, 0 )
+#endif
+ ;
+
+#undef MI_ENTRY
+#define MI_ENTRY(N,T,F,B,M) { T, F, M, B },