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

📄 prf.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* * Scaled down version of C Library printf. * Only %s %u %d (==%u) %o %x %D are recognized. * Used to print diagnostic information * directly on console tty. * Since it is not interrupt driven, * all system activities are pretty much * suspended. * Printf should not be used for chit-chat. */printf(fmt, x1)register char *fmt;unsigned x1;{	register c;	register unsigned int *adx;	char *s;	adx = &x1;loop:	while((c = *fmt++) != '%') {		if(c == '\0')			return;		putchar(c);	}	c = *fmt++;	if(c == 'd' || c == 'u' || c == 'o' || c == 'x')		printn((long)*adx, c=='o'? 8: (c=='x'? 16:10));	else if(c == 's') {		s = (char *)*adx;		while(c = *s++)			putchar(c);	} else if (c == 'D') {		printn(*(long *)adx, 10);		adx += (sizeof(long) / sizeof(int)) - 1;	} else if (c == 'c')		putchar((char *)*adx);	adx++;	goto loop;}/* * Print an unsigned integer in base b. */printn(n, b)long n;{	register long a;	if (n<0) {	/* shouldn't happen */		putchar('-');		n = -n;	}	if(a = n/b)		printn(a, b);	putchar("0123456789ABCDEF"[(int)(n%b)]);}struct	device	{	int	rcsr,rbuf;	int	tcsr,tbuf;};/* Modifications below allow use of KL11 units 0 and 1 - wkt */struct	device	*KLADDR[2]= {0177560, 0176500};putchar(c)register c;{ putc(c,0); }putc(c,unit)register c;register unit;{	register s;	register unsigned timo;	if (unit>1) unit=0;	/*	 *  If last char was a break or null, don't print	if ((KLADDR[unit]->rbuf&0177) == 0)		return;	*/	timo = 60000;	/*	 * Try waiting for the console tty to come ready,	 * otherwise give up after a reasonable time.	 */	while((KLADDR[unit]->tcsr&0200) == 0)		if(--timo == 0)			break;	if ((unit == 0) && (c == 0)) return;	/* Ignore NULLs on console */	s = KLADDR[unit]->tcsr;	KLADDR[unit]->tcsr = 0;	KLADDR[unit]->tbuf = c;	if (unit==0) {				/* Translate chars on console */	   if (c == '\n') {		putc('\r',0);		putc(0177,0);		putc(0177,0);	   }	   putc(0,0);        }	KLADDR[unit]->tcsr = s;}getchar(){ return(newgetc(0)); }newgetc(unit)register unit;{	register c;	KLADDR[unit]->rcsr = 1;	while((KLADDR[unit]->rcsr&0200)==0);	c = KLADDR[unit]->rbuf&0177;	if (unit==0) {	   if (c=='\r')		c = '\n';	   putc(c,unit);	/* Only echo on console */ 	}	return(c);}gets(buf)char	*buf;{register char *lp;register c;	lp = buf;	for (;;) {		c = getchar() & 0177;		if (c>='A' && c<='Z')			c -= 'A' - 'a';		if (lp != buf && *(lp-1) == '\\') {			lp--;			if (c>='a' && c<='z') {				c += 'A' - 'a';				goto store;			}			switch ( c) {			case '(':				c = '{';				break;			case ')':				c = '}';				break;			case '!':				c = '|';				break;			case '^':				c = '~';				break;			case '\'':				c = '`';				break;			}		}	store:		switch(c) {		case '\n':		case '\r':			c = '\n';			*lp++ = '\0';			return;		case '\b':		case '#':			lp--;			if (lp < buf)				lp = buf;			continue;		case '@':			lp = buf;			putchar('\n');			continue;		default:			*lp++ = c;		}	}}

⌨️ 快捷键说明

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