1 /* $NetBSD: print.c,v 1.23 2013/09/12 19:47:23 christos Exp $ */
4 * Copyright (c) 1991, 1993, 1994
5 * The Regents of the University of California. All rights reserved.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the University nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 #include <sys/cdefs.h>
35 static char sccsid
[] = "@(#)print.c 8.6 (Berkeley) 4/16/94";
37 __RCSID("$NetBSD: print.c,v 1.23 2013/09/12 19:47:23 christos Exp $");
41 #include <sys/types.h>
50 static void binit(const char *);
51 static void bput(const char *);
52 static const char *ccval(const struct cchar
*, int);
55 print(struct termios
*tp
, struct winsize
*wp
, int queue
, const char *ldisc
,
58 const struct cchar
*p
;
61 int cnt
, ispeed
, ospeed
;
62 char buf1
[100], buf2
[100];
67 ispeed
= cfgetispeed(tp
);
68 ospeed
= cfgetospeed(tp
);
71 printf("ispeed %d baud; ospeed %d baud;", ispeed
, ospeed
);
73 cnt
+= printf("speed %d baud;", ispeed
);
74 if (fmt
>= STTY_BSD
) {
75 cnt
+= printf(" %d rows; %d columns;", wp
->ws_row
, wp
->ws_col
);
77 cnt
+= printf(" queue = %d;", queue
);
79 cnt
+= printf(" line = %s;", ldisc
);
85 #define on(f) ((tmp&f) != 0)
86 #define put(n, f, d) \
87 if (fmt >= STTY_BSD || on(f) != d) \
93 put("-icanon", ICANON
, 1);
94 put("-isig", ISIG
, 1);
95 put("-iexten", IEXTEN
, 1);
96 put("-echo", ECHO
, 1);
97 put("-echoe", ECHOE
, 0);
98 put("-echok", ECHOK
, 0);
99 put("-echoke", ECHOKE
, 0);
100 put("-echonl", ECHONL
, 0);
101 put("-echoctl", ECHOCTL
, 0);
102 put("-echoprt", ECHOPRT
, 0);
103 put("-altwerase", ALTWERASE
, 0);
104 put("-noflsh", NOFLSH
, 0);
105 put("-tostop", TOSTOP
, 0);
106 put("-flusho", FLUSHO
, 0);
107 put("-pendin", PENDIN
, 0);
108 put("-nokerninfo", NOKERNINFO
, 0);
109 put("-extproc", EXTPROC
, 0);
114 put("-istrip", ISTRIP
, 0);
115 put("-icrnl", ICRNL
, 1);
116 put("-inlcr", INLCR
, 0);
117 put("-igncr", IGNCR
, 0);
118 put("-ixon", IXON
, 1);
119 put("-ixoff", IXOFF
, 0);
120 put("-ixany", IXANY
, 1);
121 put("-imaxbel", IMAXBEL
, 1);
122 put("-ignbrk", IGNBRK
, 0);
123 put("-brkint", BRKINT
, 1);
124 put("-inpck", INPCK
, 0);
125 put("-ignpar", IGNPAR
, 0);
126 put("-parmrk", PARMRK
, 0);
131 put("-opost", OPOST
, 1);
132 put("-onlcr", ONLCR
, 1);
133 put("-ocrnl", OCRNL
, 0);
134 put("-oxtabs", OXTABS
, 1);
135 put("-onocr", OXTABS
, 0);
136 put("-onlret", OXTABS
, 0);
138 /* control flags (hardware state) */
141 put("-cread", CREAD
, 1);
156 bput("-parenb" + on(PARENB
));
157 put("-parodd", PARODD
, 0);
158 put("-hupcl", HUPCL
, 1);
159 put("-clocal", CLOCAL
, 0);
160 put("-cstopb", CSTOPB
, 0);
161 put("-crtscts", CRTSCTS
, 0);
162 put("-mdmbuf", MDMBUF
, 0);
163 put("-cdtrcts", CDTRCTS
, 0);
165 /* special control characters */
167 if (fmt
== STTY_POSIX
) {
169 for (p
= cchars1
; p
->name
; ++p
) {
170 (void)snprintf(buf1
, sizeof(buf1
), "%s = %s;",
171 p
->name
, ccval(p
, cc
[p
->sub
]));
177 for (p
= cchars1
, cnt
= 0; p
->name
; ++p
) {
178 if (fmt
!= STTY_BSD
&& cc
[p
->sub
] == p
->def
)
181 (void)snprintf(buf1
+ cnt
* 8, 9, WD
, p
->name
);
182 (void)snprintf(buf2
+ cnt
* 8, 9, WD
, ccval(p
, cc
[p
->sub
]));
183 if (++cnt
== LINELENGTH
/ 8) {
185 (void)printf("%s\n", buf1
);
186 (void)printf("%s\n", buf2
);
190 (void)printf("%s\n", buf1
);
191 (void)printf("%s\n", buf2
);
197 static const char *label
;
200 binit(const char *lb
)
215 col
= printf("%s: %s", label
, s
);
218 if ((col
+ strlen(s
)) > LINELENGTH
) {
219 (void)printf("\n\t");
220 col
= printf("%s", s
) + 8;
223 col
+= printf(" %s", s
);
227 ccval(const struct cchar
*p
, int c
)
232 if (c
== _POSIX_VDISABLE
)
235 if (p
->sub
== VMIN
|| p
->sub
== VTIME
) {
236 (void)snprintf(buf
, sizeof(buf
), "%d", c
);