| @@ -1,305 +1,314 @@ | | | @@ -1,305 +1,314 @@ |
1 | .\" $NetBSD: kprintf.9,v 1.29 2010/02/17 22:04:14 cnst Exp $ | | 1 | .\" $NetBSD: kprintf.9,v 1.30 2011/01/21 17:51:19 dyoung Exp $ |
2 | .\" | | 2 | .\" |
3 | .\" Copyright (c) 1998, 2002, 2007 The NetBSD Foundation, Inc. | | 3 | .\" Copyright (c) 1998, 2002, 2007, 2011 The NetBSD Foundation, Inc. |
4 | .\" All rights reserved. | | 4 | .\" All rights reserved. |
5 | .\" | | 5 | .\" |
6 | .\" This code is derived from software contributed to The NetBSD Foundation | | 6 | .\" This code is derived from software contributed to The NetBSD Foundation |
7 | .\" by Jeremy Cooper and by Jason R. Thorpe. | | 7 | .\" by Jeremy Cooper and by Jason R. Thorpe. |
8 | .\" | | 8 | .\" |
9 | .\" Redistribution and use in source and binary forms, with or without | | 9 | .\" Redistribution and use in source and binary forms, with or without |
10 | .\" modification, are permitted provided that the following conditions | | 10 | .\" modification, are permitted provided that the following conditions |
11 | .\" are met: | | 11 | .\" are met: |
12 | .\" 1. Redistributions of source code must retain the above copyright | | 12 | .\" 1. Redistributions of source code must retain the above copyright |
13 | .\" notice, this list of conditions and the following disclaimer. | | 13 | .\" notice, this list of conditions and the following disclaimer. |
14 | .\" 2. Redistributions in binary form must reproduce the above copyright | | 14 | .\" 2. Redistributions in binary form must reproduce the above copyright |
15 | .\" notice, this list of conditions and the following disclaimer in the | | 15 | .\" notice, this list of conditions and the following disclaimer in the |
16 | .\" documentation and/or other materials provided with the distribution. | | 16 | .\" documentation and/or other materials provided with the distribution. |
17 | .\" | | 17 | .\" |
18 | .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | | 18 | .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
19 | .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | | 19 | .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
20 | .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | | 20 | .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
21 | .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | | 21 | .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
22 | .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | | 22 | .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
23 | .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | | 23 | .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
24 | .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | | 24 | .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
25 | .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | | 25 | .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
26 | .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | | 26 | .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
27 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | | 27 | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
28 | .\" POSSIBILITY OF SUCH DAMAGE. | | 28 | .\" POSSIBILITY OF SUCH DAMAGE. |
29 | .\" | | 29 | .\" |
30 | .Dd September 4, 2009 | | 30 | .Dd January 21, 2011 |
31 | .Dt KPRINTF 9 | | 31 | .Dt KPRINTF 9 |
32 | .Os | | 32 | .Os |
33 | .Sh NAME | | 33 | .Sh NAME |
| | | 34 | .Nm device_printf , |
34 | .Nm printf , | | 35 | .Nm printf , |
35 | .Nm snprintf , | | 36 | .Nm snprintf , |
36 | .Nm vprintf , | | 37 | .Nm vprintf , |
37 | .Nm vsnprintf , | | 38 | .Nm vsnprintf , |
38 | .Nm uprintf , | | 39 | .Nm uprintf , |
39 | .Nm ttyprintf , | | 40 | .Nm ttyprintf , |
40 | .Nm tprintf , | | 41 | .Nm tprintf , |
41 | .Nm aprint | | 42 | .Nm aprint |
42 | .Nd kernel formatted output conversion | | 43 | .Nd kernel formatted output conversion |
43 | .Sh SYNOPSIS | | 44 | .Sh SYNOPSIS |
44 | .In sys/systm.h | | 45 | .In sys/systm.h |
45 | .Ft void | | 46 | .Ft void |
| | | 47 | .Fn "device_printf" "device_t" "const char *format" "..." |
| | | 48 | .Ft void |
46 | .Fn "printf" "const char *format" "..." | | 49 | .Fn "printf" "const char *format" "..." |
47 | .Ft void | | 50 | .Ft void |
48 | .Fn "printf_nolog" "const char *format" "..." | | 51 | .Fn "printf_nolog" "const char *format" "..." |
49 | .Ft int | | 52 | .Ft int |
50 | .Fn "snprintf" "char *buf" "size_t size" "const char *format" "..." | | 53 | .Fn "snprintf" "char *buf" "size_t size" "const char *format" "..." |
51 | .In machine/stdarg.h | | 54 | .In machine/stdarg.h |
52 | .Ft void | | 55 | .Ft void |
53 | .Fn "vprintf" "const char *format" "va_list ap" | | 56 | .Fn "vprintf" "const char *format" "va_list ap" |
54 | .Ft int | | 57 | .Ft int |
55 | .Fn "vsnprintf" "char *buf" "size_t size" "const char *format" "va_list ap" | | 58 | .Fn "vsnprintf" "char *buf" "size_t size" "const char *format" "va_list ap" |
56 | .Ft void | | 59 | .Ft void |
57 | .Fn "uprintf" "const char *format" "..." | | 60 | .Fn "uprintf" "const char *format" "..." |
58 | .Ft void | | 61 | .Ft void |
59 | .Fn "ttyprintf" "struct tty *tty" "const char *format" "..." | | 62 | .Fn "ttyprintf" "struct tty *tty" "const char *format" "..." |
60 | .In sys/tprintf.h | | 63 | .In sys/tprintf.h |
61 | .Ft tpr_t | | 64 | .Ft tpr_t |
62 | .Fn "tprintf_open" "struct proc *p" | | 65 | .Fn "tprintf_open" "struct proc *p" |
63 | .Ft void | | 66 | .Ft void |
64 | .Fn "tprintf" "tpr_t tpr" "const char *format" "..." | | 67 | .Fn "tprintf" "tpr_t tpr" "const char *format" "..." |
65 | .Ft void | | 68 | .Ft void |
66 | .Fn "tprintf_close" "tpr_t tpr" | | 69 | .Fn "tprintf_close" "tpr_t tpr" |
67 | .Ft void | | 70 | .Ft void |
68 | .Fn "aprint_normal" "const char *format" "..." | | 71 | .Fn "aprint_normal" "const char *format" "..." |
69 | .Ft void | | 72 | .Ft void |
70 | .Fn "aprint_naive" "const char *format" "..." | | 73 | .Fn "aprint_naive" "const char *format" "..." |
71 | .Ft void | | 74 | .Ft void |
72 | .Fn "aprint_verbose" "const char *format" "..." | | 75 | .Fn "aprint_verbose" "const char *format" "..." |
73 | .Ft void | | 76 | .Ft void |
74 | .Fn "aprint_debug" "const char *format" "..." | | 77 | .Fn "aprint_debug" "const char *format" "..." |
75 | .Ft void | | 78 | .Ft void |
76 | .Fn "aprint_error" "const char *format" "..." | | 79 | .Fn "aprint_error" "const char *format" "..." |
77 | .Ft void | | 80 | .Ft void |
78 | .Fn "aprint_normal_dev" "device_t" "const char *format" "..." | | 81 | .Fn "aprint_normal_dev" "device_t" "const char *format" "..." |
79 | .Ft void | | 82 | .Ft void |
80 | .Fn "aprint_naive_dev" "device_t" "const char *format" "..." | | 83 | .Fn "aprint_naive_dev" "device_t" "const char *format" "..." |
81 | .Ft void | | 84 | .Ft void |
82 | .Fn "aprint_verbose_dev" "device_t" "const char *format" "..." | | 85 | .Fn "aprint_verbose_dev" "device_t" "const char *format" "..." |
83 | .Ft void | | 86 | .Ft void |
84 | .Fn "aprint_debug_dev" "device_t" "const char *format" "..." | | 87 | .Fn "aprint_debug_dev" "device_t" "const char *format" "..." |
85 | .Ft void | | 88 | .Ft void |
86 | .Fn "aprint_error_dev" "device_t" "const char *format" "..." | | 89 | .Fn "aprint_error_dev" "device_t" "const char *format" "..." |
87 | .Ft void | | 90 | .Ft void |
88 | .Fn "aprint_normal_ifnet" "struct ifnet *" "const char *format" "..." | | 91 | .Fn "aprint_normal_ifnet" "struct ifnet *" "const char *format" "..." |
89 | .Ft void | | 92 | .Ft void |
90 | .Fn "aprint_naive_ifnet" "struct ifnet *" "const char *format" "..." | | 93 | .Fn "aprint_naive_ifnet" "struct ifnet *" "const char *format" "..." |
91 | .Ft void | | 94 | .Ft void |
92 | .Fn "aprint_verbose_ifnet" "struct ifnet *" "const char *format" "..." | | 95 | .Fn "aprint_verbose_ifnet" "struct ifnet *" "const char *format" "..." |
93 | .Ft void | | 96 | .Ft void |
94 | .Fn "aprint_debug_ifnet" "struct ifnet *" "const char *format" "..." | | 97 | .Fn "aprint_debug_ifnet" "struct ifnet *" "const char *format" "..." |
95 | .Ft void | | 98 | .Ft void |
96 | .Fn "aprint_error_ifnet" "struct ifnet *" "const char *format" "..." | | 99 | .Fn "aprint_error_ifnet" "struct ifnet *" "const char *format" "..." |
97 | .Ft int | | 100 | .Ft int |
98 | .Fn "aprint_get_error_count" "void" | | 101 | .Fn "aprint_get_error_count" "void" |
99 | .Sh DESCRIPTION | | 102 | .Sh DESCRIPTION |
100 | The | | 103 | The |
101 | .Fn printf | | 104 | .Fn printf |
102 | family of functions allows the kernel to send formatted messages to various | | 105 | family of functions allows the kernel to send formatted messages to various |
103 | output devices. | | 106 | output devices. |
104 | The functions | | 107 | The functions |
105 | .Fn printf | | 108 | .Fn printf |
106 | and | | 109 | and |
107 | .Fn vprintf | | 110 | .Fn vprintf |
108 | send formatted strings to the system console. | | 111 | send formatted strings to the system console. |
109 | The | | 112 | The |
| | | 113 | .Fn device_printf |
| | | 114 | function is identical to |
| | | 115 | .Fn printf , |
| | | 116 | except that it prefixes the log message with the corresponding |
| | | 117 | device name. |
| | | 118 | The |
110 | .Fn printf_nolog | | 119 | .Fn printf_nolog |
111 | function is identical to | | 120 | function is identical to |
112 | .Fn printf , | | 121 | .Fn printf , |
113 | except it does not send the data to the system log. | | 122 | except it does not send the data to the system log. |
114 | The functions | | 123 | The functions |
115 | .Fn snprintf | | 124 | .Fn snprintf |
116 | and | | 125 | and |
117 | .Fn vsnprintf | | 126 | .Fn vsnprintf |
118 | write output to a string buffer. | | 127 | write output to a string buffer. |
119 | These four functions work similarly to their user space counterparts, | | 128 | These four functions work similarly to their user space counterparts, |
120 | and are not described in detail here. | | 129 | and are not described in detail here. |
121 | .Pp | | 130 | .Pp |
122 | The functions | | 131 | The functions |
123 | .Fn uprintf | | 132 | .Fn uprintf |
124 | and | | 133 | and |
125 | .Fn ttyprintf | | 134 | .Fn ttyprintf |
126 | send formatted strings to the current process's controlling tty and a specific | | 135 | send formatted strings to the current process's controlling tty and a specific |
127 | tty, respectively. | | 136 | tty, respectively. |
128 | .Pp | | 137 | .Pp |
129 | The | | 138 | The |
130 | .Fn tprintf | | 139 | .Fn tprintf |
131 | function sends formatted strings to a process's controlling tty, | | 140 | function sends formatted strings to a process's controlling tty, |
132 | via a handle of type tpr_t. | | 141 | via a handle of type tpr_t. |
133 | This allows multiple write operations to the tty with a guarantee that the | | 142 | This allows multiple write operations to the tty with a guarantee that the |
134 | tty will be valid across calls. | | 143 | tty will be valid across calls. |
135 | A handle is acquired by calling | | 144 | A handle is acquired by calling |
136 | .Fn tprintf_open | | 145 | .Fn tprintf_open |
137 | with the target process as an argument. | | 146 | with the target process as an argument. |
138 | This handle must be closed with a matching call to | | 147 | This handle must be closed with a matching call to |
139 | .Fn tprintf_close . | | 148 | .Fn tprintf_close . |
140 | .Pp | | 149 | .Pp |
141 | The functions | | 150 | The functions |
142 | .Fn aprint_normal , | | 151 | .Fn aprint_normal , |
143 | .Fn aprint_naive , | | 152 | .Fn aprint_naive , |
144 | .Fn aprint_verbose , | | 153 | .Fn aprint_verbose , |
145 | .Fn aprint_debug , | | 154 | .Fn aprint_debug , |
146 | and | | 155 | and |
147 | .Fn aprint_error | | 156 | .Fn aprint_error |
148 | are intended to be used to print | | 157 | are intended to be used to print |
149 | .Xr autoconf 9 | | 158 | .Xr autoconf 9 |
150 | messages. | | 159 | messages. |
151 | Their verbosity depends on flags set in the | | 160 | Their verbosity depends on flags set in the |
152 | .Va boothowto | | 161 | .Va boothowto |
153 | variable, through options passed during bootstrap; see | | 162 | variable, through options passed during bootstrap; see |
154 | .Xr boothowto 9 | | 163 | .Xr boothowto 9 |
155 | and | | 164 | and |
156 | .Sx Interactive mode | | 165 | .Sx Interactive mode |
157 | in | | 166 | in |
158 | .Xr boot 8 : | | 167 | .Xr boot 8 : |
159 | .Bl -tag -width AB_VERBOSE | | 168 | .Bl -tag -width AB_VERBOSE |
160 | .It Dv AB_SILENT | | 169 | .It Dv AB_SILENT |
161 | silent mode, enabled by | | 170 | silent mode, enabled by |
162 | .Ic boot | | 171 | .Ic boot |
163 | .Fl z . | | 172 | .Fl z . |
164 | .It Dv AB_QUIET | | 173 | .It Dv AB_QUIET |
165 | quiet mode, enabled by | | 174 | quiet mode, enabled by |
166 | .Ic boot | | 175 | .Ic boot |
167 | .Fl q . | | 176 | .Fl q . |
168 | .It Dv AB_VERBOSE | | 177 | .It Dv AB_VERBOSE |
169 | verbose mode, enabled by | | 178 | verbose mode, enabled by |
170 | .Ic boot | | 179 | .Ic boot |
171 | .Fl v . | | 180 | .Fl v . |
172 | .It Dv AB_DEBUG | | 181 | .It Dv AB_DEBUG |
173 | debug mode, enabled by | | 182 | debug mode, enabled by |
174 | .Ic boot | | 183 | .Ic boot |
175 | .Fl x . | | 184 | .Fl x . |
176 | .El | | 185 | .El |
177 | .Pp | | 186 | .Pp |
178 | The | | 187 | The |
179 | .Fn aprint_* | | 188 | .Fn aprint_* |
180 | functions have the following behaviour, based on the above | | 189 | functions have the following behaviour, based on the above |
181 | mentioned flags: | | 190 | mentioned flags: |
182 | .Bl -tag -width Xaprint_verboseXXX | | 191 | .Bl -tag -width Xaprint_verboseXXX |
183 | .It Fn aprint_normal | | 192 | .It Fn aprint_normal |
184 | Sends to the console unless | | 193 | Sends to the console unless |
185 | .Dv AB_QUIET | | 194 | .Dv AB_QUIET |
186 | is set. | | 195 | is set. |
187 | Always sends to the log. | | 196 | Always sends to the log. |
188 | .It Fn aprint_naive | | 197 | .It Fn aprint_naive |
189 | Sends to the console only if | | 198 | Sends to the console only if |
190 | .Dv AB_QUIET | | 199 | .Dv AB_QUIET |
191 | is set. | | 200 | is set. |
192 | Never sends to the log. | | 201 | Never sends to the log. |
193 | .It Fn aprint_verbose | | 202 | .It Fn aprint_verbose |
194 | Sends to the console only if | | 203 | Sends to the console only if |
195 | .Dv AB_VERBOSE | | 204 | .Dv AB_VERBOSE |
196 | is set. | | 205 | is set. |
197 | Always sends to the log. | | 206 | Always sends to the log. |
198 | .It Fn aprint_debug | | 207 | .It Fn aprint_debug |
199 | Sends to the console and the log only if | | 208 | Sends to the console and the log only if |
200 | .Dv AB_DEBUG | | 209 | .Dv AB_DEBUG |
201 | is set. | | 210 | is set. |
202 | .It Fn aprint_error | | 211 | .It Fn aprint_error |
203 | Like | | 212 | Like |
204 | .Fn aprint_normal , | | 213 | .Fn aprint_normal , |
205 | but also keeps track of the number of times called. | | 214 | but also keeps track of the number of times called. |
206 | This allows a subsystem to report the number of errors that occurred | | 215 | This allows a subsystem to report the number of errors that occurred |
207 | during a quiet or silent initialization phase. | | 216 | during a quiet or silent initialization phase. |
208 | .El | | 217 | .El |
209 | .Pp | | 218 | .Pp |
210 | For the | | 219 | For the |
211 | .Fn aprint_* | | 220 | .Fn aprint_* |
212 | functions there are two additional families of functions with the | | 221 | functions there are two additional families of functions with the |
213 | suffixes | | 222 | suffixes |
214 | .Dv _dev | | 223 | .Dv _dev |
215 | and | | 224 | and |
216 | .Dv _ifnet | | 225 | .Dv _ifnet |
217 | which work like their counterparts without the suffixes, except that | | 226 | which work like their counterparts without the suffixes, except that |
218 | they take a | | 227 | they take a |
219 | .Ft device_t | | 228 | .Ft device_t |
220 | and | | 229 | and |
221 | .Ft struct ifnet * , | | 230 | .Ft struct ifnet * , |
222 | respectively, as first argument, | | 231 | respectively, as first argument, |
223 | and prefix the log message with the | | 232 | and prefix the log message with the |
224 | corresponding device or interface name. | | 233 | corresponding device or interface name. |
225 | .Pp | | 234 | .Pp |
226 | The | | 235 | The |
227 | .Fn aprint_get_error_count | | 236 | .Fn aprint_get_error_count |
228 | function reports the number of errors and resets the counter to 0. | | 237 | function reports the number of errors and resets the counter to 0. |
229 | .Pp | | 238 | .Pp |
230 | If | | 239 | If |
231 | .Dv AB_SILENT | | 240 | .Dv AB_SILENT |
232 | is set, none of the autoconfiguration message printing routines send output | | 241 | is set, none of the autoconfiguration message printing routines send output |
233 | to the console. | | 242 | to the console. |
234 | The | | 243 | The |
235 | .Dv AB_VERBOSE | | 244 | .Dv AB_VERBOSE |
236 | and | | 245 | and |
237 | .Dv AB_DEBUG | | 246 | .Dv AB_DEBUG |
238 | flags override | | 247 | flags override |
239 | .Dv AB_SILENT . | | 248 | .Dv AB_SILENT . |
240 | .Sh RETURN VALUES | | 249 | .Sh RETURN VALUES |
241 | The | | 250 | The |
242 | .Fn snprintf | | 251 | .Fn snprintf |
243 | and | | 252 | and |
244 | .Fn vsnprintf | | 253 | .Fn vsnprintf |
245 | functions return the number of characters placed in the buffer | | 254 | functions return the number of characters placed in the buffer |
246 | .Fa buf . | | 255 | .Fa buf . |
247 | This is different to the user-space functions of the same name. | | 256 | This is different to the user-space functions of the same name. |
248 | .Pp | | 257 | .Pp |
249 | The | | 258 | The |
250 | .Fn tprintf_open | | 259 | .Fn tprintf_open |
251 | function returns | | 260 | function returns |
252 | .Dv NULL | | 261 | .Dv NULL |
253 | if no terminal handle could be acquired. | | 262 | if no terminal handle could be acquired. |
254 | .Sh SEE ALSO | | 263 | .Sh SEE ALSO |
255 | .Xr printf 1 , | | 264 | .Xr printf 1 , |
256 | .Xr printf 3 , | | 265 | .Xr printf 3 , |
257 | .Xr snprintb 3 , | | 266 | .Xr snprintb 3 , |
258 | .Xr boot 8 , | | 267 | .Xr boot 8 , |
259 | .Xr autoconf 9 , | | 268 | .Xr autoconf 9 , |
260 | .Xr boothowto 9 | | 269 | .Xr boothowto 9 |
261 | .Sh CODE REFERENCES | | 270 | .Sh CODE REFERENCES |
262 | .Pa sys/kern/subr_prf.c | | 271 | .Pa sys/kern/subr_prf.c |
263 | .Sh HISTORY | | 272 | .Sh HISTORY |
264 | The | | 273 | The |
265 | .Fn sprintf | | 274 | .Fn sprintf |
266 | and | | 275 | and |
267 | .Fn vsprintf | | 276 | .Fn vsprintf |
268 | unsized string formatting functions are supported for compatibility only, | | 277 | unsized string formatting functions are supported for compatibility only, |
269 | and are not documented here. | | 278 | and are not documented here. |
270 | New code should use the size-limited | | 279 | New code should use the size-limited |
271 | .Fn snprintf | | 280 | .Fn snprintf |
272 | and | | 281 | and |
273 | .Fn vsnprintf | | 282 | .Fn vsnprintf |
274 | functions instead. | | 283 | functions instead. |
275 | .Pp | | 284 | .Pp |
276 | In | | 285 | In |
277 | .Nx 1.5 | | 286 | .Nx 1.5 |
278 | and earlier, | | 287 | and earlier, |
279 | .Fn printf | | 288 | .Fn printf |
280 | supported more format strings than the user space | | 289 | supported more format strings than the user space |
281 | .Fn printf . | | 290 | .Fn printf . |
282 | These nonstandard format strings are no longer supported. | | 291 | These nonstandard format strings are no longer supported. |
283 | For the functionality provided by the former | | 292 | For the functionality provided by the former |
284 | .Li %b | | 293 | .Li %b |
285 | format string, see | | 294 | format string, see |
286 | .Xr snprintb 3 . | | 295 | .Xr snprintb 3 . |
287 | .Pp | | 296 | .Pp |
288 | The | | 297 | The |
289 | .Fn aprint_normal , | | 298 | .Fn aprint_normal , |
290 | .Fn aprint_naive , | | 299 | .Fn aprint_naive , |
291 | .Fn aprint_verbose , | | 300 | .Fn aprint_verbose , |
292 | and | | 301 | and |
293 | .Fn aprint_debug | | 302 | .Fn aprint_debug |
294 | functions first appeared in | | 303 | functions first appeared in |
295 | .Bsx . | | 304 | .Bsx . |
296 | .Sh BUGS | | 305 | .Sh BUGS |
297 | The | | 306 | The |
298 | .Fn uprintf | | 307 | .Fn uprintf |
299 | and | | 308 | and |
300 | .Fn ttyprintf | | 309 | .Fn ttyprintf |
301 | functions should be used sparingly, if at all. | | 310 | functions should be used sparingly, if at all. |
302 | Where multiple lines of output are required to reach a process's | | 311 | Where multiple lines of output are required to reach a process's |
303 | controlling terminal, | | 312 | controlling terminal, |
304 | .Fn tprintf | | 313 | .Fn tprintf |
305 | is preferred. | | 314 | is preferred. |