⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prf.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/* * @(#)prf.c 1.1 92/07/30 Copyright (c) 1985 by Sun Microsystems, Inc. */#include <sys/types.h>#include <mon/sunromvec.h>/* * Scaled down version of C Library printf. * Used to print diagnostic information directly on console tty. * Since it is not interrupt driven, all system activities are * suspended.  Printf should not be used for chit-chat. * * 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;	register char *s;	register int any;loop:	while ((c = *fmt++) != '%') {		if(c == '\0')			return;		putchar(c);	}again:	c = *fmt++;	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;		putchar(b);		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. */printn(n, b)	register u_long n;	register short b;{	char prbuf[11];	register char *cp;	if (b == 10 && (int)n < 0) {		putchar('-');		n = (unsigned)(-(int)n);	}	cp = prbuf;	do {		*cp++ = "0123456789abcdef"[n%b];		n /= b;	} while (n);	do		putchar(*--cp);	while (cp > prbuf);}/* * Print a character on console. */putchar(c)	int c;{	(*romp->v_putchar)(c);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -