- * One additional format: %b is supported to decode error registers.
- * Usage is:
- * printf("reg=%b\n", regval, "<base><arg>*");
- * Where <base> is the output base expressed as a control character,
- * e.g. \10 gives octal; \20 gives hex. Each arg is a sequence of
- * characters, the first of which gives the bit number to be inspected
- * (origin 1), and the next characters (up to a control character, i.e.
- * a character <= 32), give the name of the register. Thus
- * printf("reg=%b\n", 3, "\10\2BITTWO\1BITONE\n");
- * would produce output:
- * reg=2<BITTWO,BITONE>
- */
-/*VARARGS1*/
-printf(fmt, x1)
- char *fmt;
- unsigned x1;
-{
-
- prf(fmt, &x1);
-}
-
-prf(fmt, adx)
- register char *fmt;
- register u_int *adx;
-{
- register int b, c, i;
- char *s;
- int any;
-
-loop:
- while ((c = *fmt++) != '%') {
- if(c == '\0')
- return;
- putchar(c);
- }
-again:
- c = *fmt++;
- /* THIS CODE IS VAX DEPENDENT IN HANDLING %l? AND %c */
- switch (c) {
-
- case 'l':
- goto again;
- case 'x': case 'X':
- b = 16;
- goto number;
- case 'd': case 'D':
- case 'u': /* what a joke */
- b = 10;
- goto number;
- case 'o': case 'O':
- b = 8;
-number:
- printn((u_long)*adx, b);
- break;
- case 'c':
- b = *adx;
- for (i = 24; i >= 0; i -= 8)
- if (c = (b >> i) & 0x7f)
- putchar(c);
- break;
- case 'b':
- b = *adx++;
- s = (char *)*adx;
- printn((u_long)b, *s++);
- any = 0;
- if (b) {
- putchar('<');
- while (i = *s++) {
- if (b & (1 << (i-1))) {
- if (any)
- putchar(',');
- any = 1;
- for (; (c = *s) > 32; s++)
- putchar(c);
- } else
- for (; *s > 32; s++)
- ;
- }
- putchar('>');
- }
- break;
-
- case 's':
- s = (char *)*adx;
- while (c = *s++)
- putchar(c);
- break;
- }
- adx++;
- goto loop;
-}
-
-/*
- * Printn prints a number n in base b.
- * We don't use recursion to avoid deep kernel stacks.
+ * This code is derived from software contributed to Berkeley by
+ * Computer Consoles Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)prf.c 7.1 (Berkeley) 5/4/91