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

📄 prf.c

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 C
字号:
#/* */#include "../param.h"#include "../seg.h"#include "../buf.h"#include "../conf.h"/* * Address and structure of the * KL-11 console device registers. */struct{	int	rsr;	int	rbr;	int	xsr;	int	xbr;};/* * In case console is off, * panicstr contains argument to last * call to panic. */char	*panicstr;/* * Scaled down version of C Library printf. * Only %s %l %d (==%l) %o 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,x2,x3,x4,x5,x6,x7,x8,x9,xa,xb,xc)char fmt[];{	register char *s;	register *adx, c;	adx = &x1;loop:	while((c = *fmt++) != '%') {		if(c == '\0')			return;		putchar(c);	}	c = *fmt++;	if(c == 'd' || c == 'l' || c == 'o')		printn(*adx, c=='o'? 8: 10);	if(c == 's') {		s = *adx;		while(c = *s++)			putchar(c);	}	adx++;	goto loop;}/* * Print an unsigned integer in base b. */printn(n, b){	register a;	if(a = ldiv(n, b))		printn(a, b);	putchar(lrem(n, b) + '0');}/* * Print a character on console. * Attempts to save and restore device * status. * If the switches are 0, all * printing is inhibited. */putchar(c){	register rc, s;	rc = c;	if(SW->integ == 0)		return;	while((KL->xsr&0200) == 0)		;	if(rc == 0)		return;	s = KL->xsr;	KL->xsr = 0;	KL->xbr = rc;	if(rc == '\n') {		putchar('\r');		putchar(0177);		putchar(0177);	}	putchar(0);	KL->xsr = s;}/* * Panic is called on unresolvable * fatal errors. * It syncs, prints "panic: mesg" and * then loops. */panic(s)char *s;{	panicstr = s;	update();	printf("panic: %s\n", s);	for(;;)		idle();}/* * prdev prints a warning message of the * form "mesg on dev x/y". * x and y are the major and minor parts of * the device argument. */prdev(str, dev){	printf("%s on dev %l/%l\n", str, dev.d_major, dev.d_minor);}/* * deverr prints a diagnostic from * a device driver. * It prints the device, block number, * and an octal word (usually some error * status register) passed as argument. */deverror(bp, o1, o2)int *bp;{	register *rbp;	rbp = bp;	prdev("err", rbp->b_dev);	printf("bn%l er%o %o\n", rbp->b_blkno, o1, o2);}

⌨️ 快捷键说明

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