SCCS-vsn: sys/stand.att/printf.c 5.4
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)printf.c 5.3 (Berkeley) %G%
+ * @(#)printf.c 5.4 (Berkeley) %G%
*/
/*
* Scaled down version of printf(3).
*
*/
/*
* Scaled down version of printf(3).
*
- * Used to print diagnostic information directly on the console tty. Since
- * it is not interrupt driven, all system activities are suspended. Printf
- * should not be used for chit-chat.
+ * One additional format:
- * One additional format: %b is supported to decode error registers.
+ * The format %b is supported to decode error registers.
* Its usage is:
*
* printf("reg=%b\n", regval, "<base><arg>*");
* Its usage is:
*
* printf("reg=%b\n", regval, "<base><arg>*");
* reg=3<BITTWO,BITONE>
*/
* reg=3<BITTWO,BITONE>
*/
-#if __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
+#include <sys/cdefs.h>
+
+/*
+ * Note that stdarg.h and the ANSI style va_start macro is used for both
+ * ANSI and traditional C compilers.
+ */
+#define KERNEL
+#include <machine/stdarg.h>
+#undef KERNEL
-static void abort(){} /* Needed by stdarg macros. */
-static void number();
+static void kprintn __P((u_long, int));
void
#if __STDC__
printf(const char *fmt, ...)
#else
void
#if __STDC__
printf(const char *fmt, ...)
#else
+printf(fmt /* , va_alist */)
#endif
{
register char *p;
register int ch, n;
unsigned long ul;
int lflag, set;
#endif
{
register char *p;
register int ch, n;
unsigned long ul;
int lflag, set;
-#else
- va_start(ap);
-#endif
for (;;) {
while ((ch = *fmt++) != '%') {
if (ch == '\0')
for (;;) {
while ((ch = *fmt++) != '%') {
if (ch == '\0')
case 'b':
ul = va_arg(ap, int);
p = va_arg(ap, char *);
case 'b':
ul = va_arg(ap, int);
p = va_arg(ap, char *);
while (ch = *p++)
putchar(ch);
break;
while (ch = *p++)
putchar(ch);
break;
+ case 'D':
+ lflag = 1;
+ /* FALLTHROUGH */
case 'd':
ul = lflag ?
va_arg(ap, long) : va_arg(ap, int);
case 'd':
ul = lflag ?
va_arg(ap, long) : va_arg(ap, int);
putchar('-');
ul = -(long)ul;
}
putchar('-');
ul = -(long)ul;
}
+ case 'O':
+ lflag = 1;
+ /* FALLTHROUGH */
- va_arg(ap, long) : va_arg(ap, unsigned int);
- number(ul, 8);
+ va_arg(ap, u_long) : va_arg(ap, u_int);
+ kprintn(ul, 8);
+ case 'U':
+ lflag = 1;
+ /* FALLTHROUGH */
- va_arg(ap, long) : va_arg(ap, unsigned int);
- number(ul, 10);
+ va_arg(ap, u_long) : va_arg(ap, u_int);
+ kprintn(ul, 10);
+ case 'X':
+ lflag = 1;
+ /* FALLTHROUGH */
- va_arg(ap, long) : va_arg(ap, unsigned int);
- number(ul, 16);
+ va_arg(ap, u_long) : va_arg(ap, u_int);
+ kprintn(ul, 16);
break;
default:
putchar('%');
break;
default:
putchar('%');
unsigned long ul;
int base;
{
unsigned long ul;
int base;
{