plan 9 kernel history: overview | file list | diff list

1999/0714/port/devcons.c (diff list | history)

1990/0227/sys/src/9/port/devcons.c:238,2471990/03042/sys/src/9/port/devcons.c:238,243 (short | long)
1990/0227    
	 */ 
	if(c == 0x14) 
		DEBUG(); 
	else if(c == 0x0c) 
		LANCEDEBUG(); 
	else if(c == 0x02) 
		LANCEPRDEBQ(); 
	if(c == 0x15) 
		putstrn("^U\n", 3); 
	else{ 
1990/03042/sys/src/9/port/devcons.c:144,1531990/03091/sys/src/9/port/devcons.c:144,150 (short | long)
1990/0227    
int 
sprint(char *s, char *fmt, ...) 
{ 
	char *out; 
                 
	out = donprint(s, s+PRINTSIZE, fmt, (&fmt+1)); 
	return out-s; 
1990/03091    
	return donprint(s, s+PRINTSIZE, fmt, (&fmt+1)) - s; 
1990/0227    
} 
 
int 
1990/03042/sys/src/9/port/devcons.c:233,2381990/03091/sys/src/9/port/devcons.c:230,236
1990/0227    
echo(int c) 
{ 
	char ch; 
1990/03091    
 
1990/0227    
	/* 
	 * ^t hack BUG 
	 */ 
1990/03091/sys/src/9/port/devcons.c:323,3291990/0312/sys/src/9/port/devcons.c:323,330 (short | long)
1990/0227    
 
	numbconv(&op, 10); 
	tmp[size-1] = ' '; 
	off %= size; 
1990/0312    
	if(off >= size) 
		return 0; 
1990/0227    
	if(off+n > size) 
		n = size-off; 
	memcpy(buf, tmp+off, n); 
1990/03091/sys/src/9/port/devcons.c:336,3421990/0312/sys/src/9/port/devcons.c:337,344
1990/0227    
	int size; 
 
	size = strlen(str); 
	off %= size; 
1990/0312    
	if(off >= size) 
		return 0; 
1990/0227    
	if(off+n > size) 
		n = size-off; 
	memcpy(buf, str+off, n); 
1990/03091/sys/src/9/port/devcons.c:455,4611990/0312/sys/src/9/port/devcons.c:457,465
1990/0227    
		return i; 
 
	case Qcputime: 
		k = c->offset % sizeof tmp; 
1990/0312    
		k = c->offset; 
		if(k >= sizeof tmp) 
			return 0; 
1990/0227    
		if(k+n > sizeof tmp) 
			n = sizeof tmp - k; 
		/* easiest to format in a separate buffer and copy out */ 
1990/0312/sys/src/9/port/devcons.c:180,1961990/0321/sys/src/9/port/devcons.c:180,197 (short | long)
1990/0227    
 
	c = u->fd[2]; 
	if(c==0 || (c->mode!=OWRITE && c->mode!=ORDWR)) 
		return; 
1990/0321    
		return 0; 
1990/0227    
	n = sprint(buf, "%s %d: ", u->p->text, u->p->pid); 
	n = donprint(buf+n, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
	qlock(c); 
	if(waserror()){ 
		qunlock(c); 
		return; 
1990/0321    
		return 0; 
1990/0227    
	} 
	(*devtab[c->type].write)(c, buf, n); 
	c->offset += n; 
	qunlock(c); 
1990/0321    
	poperror(); 
1990/0227    
	return n; 
} 
 
1990/0321/sys/src/9/port/devcons.c:239,2441990/0504/sys/src/9/port/devcons.c:239,246 (short | long)
1990/0227    
		DEBUG(); 
	if(c == 0x15) 
		putstrn("^U\n", 3); 
1990/0504    
	if(c == 0x16) 
		dumpqueues(); 
1990/0227    
	else{ 
		ch = c; 
		putstrn(&ch, 1); 
1990/0504/sys/src/9/port/devcons.c:144,1501990/06111/sys/src/9/port/devcons.c:144,150 (short | long)
1990/0227    
int 
sprint(char *s, char *fmt, ...) 
{ 
1990/03091    
	return donprint(s, s+PRINTSIZE, fmt, (&fmt+1)) - s; 
1990/06111    
	return doprint(s, s+PRINTSIZE, fmt, (&fmt+1)) - s; 
1990/0227    
} 
 
int 
1990/0504/sys/src/9/port/devcons.c:153,1591990/06111/sys/src/9/port/devcons.c:153,159
1990/0227    
	char buf[PRINTSIZE]; 
	int n; 
 
	n = donprint(buf, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/06111    
	n = doprint(buf, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/0227    
	putstrn(buf, n); 
	return n; 
} 
1990/0504/sys/src/9/port/devcons.c:165,1711990/06111/sys/src/9/port/devcons.c:165,171
1990/0227    
	int n; 
 
	strcpy(buf, "panic: "); 
	n = donprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/06111    
	n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/0227    
	buf[n] = '\n'; 
	putstrn(buf, n+1); 
	exit(); 
1990/0504/sys/src/9/port/devcons.c:182,1881990/06111/sys/src/9/port/devcons.c:182,188
1990/0227    
	if(c==0 || (c->mode!=OWRITE && c->mode!=ORDWR)) 
1990/0321    
		return 0; 
1990/0227    
	n = sprint(buf, "%s %d: ", u->p->text, u->p->pid); 
	n = donprint(buf+n, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/06111    
	n = doprint(buf+n, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/0227    
	qlock(c); 
	if(waserror()){ 
		qunlock(c); 
1990/06111/sys/src/9/port/devcons.c:315,3211990/0614/sys/src/9/port/devcons.c:315,321 (short | long)
1990/0227    
long 
seconds(void) 
{ 
	return boottime + MACHP(0)->ticks*MS2HZ/1000; 
1990/0614    
	return boottime + TK2MS(MACHP(0)->ticks); 
1990/0227    
} 
 
int 
1990/06111/sys/src/9/port/devcons.c:470,4761990/0614/sys/src/9/port/devcons.c:470,476
1990/0227    
			l = u->p->time[i]; 
			if(i == TReal) 
				l = MACHP(0)->ticks - l; 
			l *= MS2HZ; 
1990/0614    
			l = TK2MS(l); 
1990/0227    
			readnum(0, tmp+NUMSIZE*i, NUMSIZE, l, NUMSIZE); 
		} 
		memcpy(buf, tmp+k, n); 
1990/06111/sys/src/9/port/devcons.c:486,4921990/0614/sys/src/9/port/devcons.c:486,492
1990/0227    
		return readnum(c->offset, buf, n, u->p->parentpid, NUMSIZE); 
 
	case Qtime: 
		return readnum(c->offset, buf, n, boottime+MACHP(0)->ticks/(1000/MS2HZ), 12); 
1990/0614    
		return readnum(c->offset, buf, n, boottime+TK2MS(MACHP(0)->ticks), 12); 
1990/0227    
 
	case Quser: 
		return readstr(c->offset, buf, n, u->p->pgrp->user); 
1990/0614/sys/src/9/port/devcons.c:425,4301990/0617/sys/src/9/port/devcons.c:425,434 (short | long)
1990/0227    
 
	case Qcons: 
		qlock(&kbdq); 
1990/0617    
		if(waserror()){ 
			qunlock(&kbdq); 
			nexterror(); 
		} 
1990/0227    
		while(!cangetc(&lineq)){ 
			sleep(&kbdq.r, (int(*)(void*))isbrkc, &kbdq); 
			do{ 
1990/0614/sys/src/9/port/devcons.c:486,4921990/0617/sys/src/9/port/devcons.c:490,496
1990/0227    
		return readnum(c->offset, buf, n, u->p->parentpid, NUMSIZE); 
 
	case Qtime: 
1990/0614    
		return readnum(c->offset, buf, n, boottime+TK2MS(MACHP(0)->ticks), 12); 
1990/0617    
		return readnum(c->offset, buf, n, boottime+TK2SEC(MACHP(0)->ticks), 12); 
1990/0227    
 
	case Quser: 
		return readstr(c->offset, buf, n, u->p->pgrp->user); 
1990/0617/sys/src/9/port/devcons.c:315,3211990/0620/sys/src/9/port/devcons.c:315,321 (short | long)
1990/0227    
long 
seconds(void) 
{ 
1990/0614    
	return boottime + TK2MS(MACHP(0)->ticks); 
1990/0620    
	return boottime + TK2SEC(MACHP(0)->ticks); 
1990/0227    
} 
 
int 
1990/0620/sys/src/9/port/devcons.c:240,2461990/0629/sys/src/9/port/devcons.c:240,246 (short | long)
1990/0227    
	if(c == 0x15) 
		putstrn("^U\n", 3); 
1990/0504    
	if(c == 0x16) 
		dumpqueues(); 
1990/0629    
		urpdump(); 
1990/0227    
	else{ 
		ch = c; 
		putstrn(&ch, 1); 
1990/0629/sys/src/9/port/devcons.c:240,2461990/0707/sys/src/9/port/devcons.c:240,246 (short | long)
1990/0227    
	if(c == 0x15) 
		putstrn("^U\n", 3); 
1990/0504    
	if(c == 0x16) 
1990/0629    
		urpdump(); 
1990/0707    
		dumpqueues(); 
1990/0227    
	else{ 
		ch = c; 
		putstrn(&ch, 1); 
1990/0707/sys/src/9/port/devcons.c:89,941990/0718/sys/src/9/port/devcons.c:89,95 (short | long)
1990/0227    
 
	s = splhi(); 
	lock(&printq); 
1990/0718    
	syslog(str, n); 
1990/0227    
	while(n > 0){ 
		if(*str == '\n') 
			puts("\r", 1); 
1990/0718/sys/src/9/port/devcons.c:290,2951990/0720/sys/src/9/port/devcons.c:290,296 (short | long)
1990/0227    
	Qdir, 
	Qcons, 
	Qcputime, 
1990/0720    
	Qlog, 
1990/0227    
	Qnull, 
	Qpgrpid, 
	Qpid, 
1990/0718/sys/src/9/port/devcons.c:301,3061990/0720/sys/src/9/port/devcons.c:302,308
1990/0227    
Dirtab consdir[]={ 
	"cons",		Qcons,		0,	0600, 
	"cputime",	Qcputime,	72,	0600, 
1990/0720    
	"log",		Qlog,		sizeof(SYSLOG->buf),	0600, 
1990/0227    
	"null",		Qnull,		0,	0600, 
	"pgrpid",	Qpgrpid,	12,	0600, 
	"pid",		Qpid,		12,	0600, 
1990/0718/sys/src/9/port/devcons.c:496,5011990/0720/sys/src/9/port/devcons.c:498,506
1990/0227    
	case Quser: 
		return readstr(c->offset, buf, n, u->p->pgrp->user); 
 
1990/0720    
	case Qlog: 
		return readlog(c->offset, buf, n); 
 
1990/0227    
	case Qnull: 
		return 0; 
 
1990/0718/sys/src/9/port/devcons.c:587,5901990/0720/sys/src/9/port/devcons.c:592,660
1990/0227    
consuserstr(Error *e, char *buf) 
{ 
	strcpy(buf, u->p->pgrp->user); 
1990/0720    
} 
 
/* 
 *  crash info 
 */ 
void 
sysloginit(void) 
{ 
	Syslog *s; 
	char *p; 
 
	s = SYSLOG; 
	if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] 
	|| s->next<s->buf){ 
		s->next = s->buf; 
		s->magic = SYSLOGMAGIC; 
	} 
} 
 
void 
syslog(char *p, int n) 
{ 
	int i; 
	Syslog *s; 
	char *end; 
 
	s = SYSLOG; 
	end = &s->buf[sizeof(s->buf)]; 
	while(n-- > 0){ 
		*s->next++ = *p++; 
		if(s->next >= end) 
			s->next = s->buf; 
	} 
} 
 
long 
readlog(ulong off, char *buf, ulong n) 
{ 
	Syslog *s; 
	int i; 
	char *p; 
	char *end; 
 
	s = SYSLOG; 
 
	/* past end */ 
	if(off >= sizeof(s->buf)) 
		return 0; 
 
	/* trim length */ 
	if(off + n >= sizeof(s->buf)) 
		n = sizeof(s->buf) - off; 
 
	/* point to start of area to be read */ 
	end = &s->buf[sizeof(s->buf)]; 
	p = s->next + off; 
	if(p > end) 
		p -= sizeof(s->buf); 
 
	for(i = 0; i < n; i++){ 
		*buf++ = *p++; 
		if(p >= end) 
			p = s->buf; 
	} 
	return n; 
1990/0227    
} 
1990/0720/sys/src/9/port/devcons.c:169,1741990/0907/sys/src/9/port/devcons.c:169,175 (short | long)
1990/06111    
	n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/0227    
	buf[n] = '\n'; 
	putstrn(buf, n+1); 
1990/0907    
	dumpstack(); 
1990/0227    
	exit(); 
} 
 
1990/0907/sys/src/9/port/devcons.c:303,3091990/0912/sys/src/9/port/devcons.c:303,309 (short | long)
1990/0227    
Dirtab consdir[]={ 
	"cons",		Qcons,		0,	0600, 
	"cputime",	Qcputime,	72,	0600, 
1990/0720    
	"log",		Qlog,		sizeof(SYSLOG->buf),	0600, 
1990/0912    
	"log",		Qlog,		BY2PG-8,	0600, 
1990/0227    
	"null",		Qnull,		0,	0600, 
	"pgrpid",	Qpgrpid,	12,	0600, 
	"pid",		Qpid,		12,	0600, 
1990/0907/sys/src/9/port/devcons.c:596,6031990/0912/sys/src/9/port/devcons.c:596,614
1990/0720    
} 
 
/* 
 *  crash info 
1990/0912    
 *  kernel based system log, passed between crashes 
1990/0720    
 */ 
1990/0912    
#define SYSLOGMAGIC	0x23456789 
#define SYSLOG		((Syslog *)(UNCACHED | KZERO | 0x1B00)) 
typedef struct Syslog	Syslog; 
struct Syslog 
{ 
	ulong	magic; 
	char	*start; 
	char	*next; 
	char	buf[BY2PG - 3*BY2WD]; 
}; 
 
1990/0720    
void 
sysloginit(void) 
{ 
1990/0907/sys/src/9/port/devcons.c:606,6121990/0912/sys/src/9/port/devcons.c:617,624
1990/0720    
 
	s = SYSLOG; 
	if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] 
	|| s->next<s->buf){ 
1990/0912    
	|| s->start>=&s->buf[sizeof(s->buf)] || s->next<s->buf){ 
		s->start = s->buf; 
1990/0720    
		s->next = s->buf; 
		s->magic = SYSLOGMAGIC; 
	} 
1990/0907/sys/src/9/port/devcons.c:615,6311990/0912/sys/src/9/port/devcons.c:627,652
1990/0720    
void 
syslog(char *p, int n) 
{ 
	int i; 
1990/0912    
	int restart; 
1990/0720    
	Syslog *s; 
	char *end; 
 
	s = SYSLOG; 
	end = &s->buf[sizeof(s->buf)]; 
1990/0912    
	restart = 0; 
1990/0720    
	while(n-- > 0){ 
		*s->next++ = *p++; 
		if(s->next >= end) 
			s->next = s->buf; 
1990/0912    
		if(s->next == s->start) 
			restart = 1; 
1990/0720    
	} 
1990/0912    
	if(restart){ 
		s->start = s->next + 1; 
		if(s->start >= end) 
			s->start = s->buf; 
	} 
	wbflush(); 
1990/0720    
} 
 
long 
1990/0907/sys/src/9/port/devcons.c:632,6401990/0912/sys/src/9/port/devcons.c:653,661
1990/0720    
readlog(ulong off, char *buf, ulong n) 
{ 
	Syslog *s; 
	int i; 
	char *p; 
	char *end; 
1990/0912    
	char *a = buf; 
1990/0720    
 
	s = SYSLOG; 
 
1990/0907/sys/src/9/port/devcons.c:642,6611990/0912/sys/src/9/port/devcons.c:663,686
1990/0720    
	if(off >= sizeof(s->buf)) 
		return 0; 
 
	/* trim length */ 
	if(off + n >= sizeof(s->buf)) 
		n = sizeof(s->buf) - off; 
                 
	/* point to start of area to be read */ 
	end = &s->buf[sizeof(s->buf)]; 
	p = s->next + off; 
	if(p > end) 
		p -= sizeof(s->buf); 
1990/0912    
	p = s->start; 
1990/0720    
 
	for(i = 0; i < n; i++){ 
		*buf++ = *p++; 
1990/0912    
	/* skip offset */ 
	while(off-- > 0){ 
		if(p == s->next) 
			return 0; 
		p++; 
	} 
 
	/* copy out */ 
	while(n-- > 0){ 
		if(p == s->next) 
			break; 
		*a++ = *p++; 
1990/0720    
		if(p >= end) 
			p = s->buf; 
	} 
	return n; 
1990/0912    
	return a-buf; 
1990/0227    
} 
1990/0912/sys/src/9/port/devcons.c:36,411990/0928/sys/src/9/port/devcons.c:36,53 (short | long)
1990/0227    
IOQ	kbdq;		/* qlock to getc; interrupt putc's */ 
IOQ	lineq;		/* lock to getc; interrupt putc's */ 
 
1990/0928    
#define SYSLOGMAGIC	0x23456789 
#define SYSLOG		((Syslog *)(UNCACHED | KZERO | 0x1B00)) 
typedef struct Syslog	Syslog; 
struct Syslog 
{ 
	ulong	magic; 
	char	*start; 
	char	*next; 
	char	buf[2*BY2PG - 3*BY2WD]; 
}; 
 
 
1990/0227    
void 
printinit(void) 
{ 
1990/0912/sys/src/9/port/devcons.c:55,601990/0928/sys/src/9/port/devcons.c:67,73
1990/0227    
	unlock(&lineq); 
 
	duartinit(); 
1990/0928    
	sysloginit();		/* must be at the end of printinit */ 
1990/0227    
} 
 
/* 
1990/0912/sys/src/9/port/devcons.c:164,1691990/0928/sys/src/9/port/devcons.c:177,183
1990/0227    
{ 
	char buf[PRINTSIZE]; 
	int n; 
1990/0928    
	Syslog *s; 
1990/0227    
 
	strcpy(buf, "panic: "); 
1990/06111    
	n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/0912/sys/src/9/port/devcons.c:170,1751990/0928/sys/src/9/port/devcons.c:184,191
1990/0227    
	buf[n] = '\n'; 
	putstrn(buf, n+1); 
1990/0907    
	dumpstack(); 
1990/0928    
	s = SYSLOG; 
	print("start/next is %lux/%lux\n", s->start, s->next); 
1990/0227    
	exit(); 
} 
 
1990/0912/sys/src/9/port/devcons.c:598,6271990/0928/sys/src/9/port/devcons.c:614,636
1990/0720    
/* 
1990/0912    
 *  kernel based system log, passed between crashes 
1990/0720    
 */ 
1990/0912    
#define SYSLOGMAGIC	0x23456789 
#define SYSLOG		((Syslog *)(UNCACHED | KZERO | 0x1B00)) 
typedef struct Syslog	Syslog; 
struct Syslog 
{ 
	ulong	magic; 
	char	*start; 
	char	*next; 
	char	buf[BY2PG - 3*BY2WD]; 
}; 
                 
1990/0720    
void 
sysloginit(void) 
{ 
	Syslog *s; 
	char *p; 
1990/0928    
	char *start, *next; 
1990/0720    
 
	s = SYSLOG; 
	if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] 
1990/0912    
	|| s->start>=&s->buf[sizeof(s->buf)] || s->next<s->buf){ 
1990/0928    
	next = s->next; 
	start = s->start; 
	if(s->magic!=SYSLOGMAGIC || next>=&s->buf[sizeof(s->buf)] 
	|| start>=&s->buf[sizeof(s->buf)] || next<s->buf){ 
1990/0912    
		s->start = s->buf; 
1990/0720    
		s->next = s->buf; 
		s->magic = SYSLOGMAGIC; 
	} 
1990/0928    
	print("start/next is %lux/%lux was %lux/%lux\n", s->start, s->next, 
		start, next); 
1990/0720    
} 
 
void 
1990/0928/sys/src/9/port/devcons.c:36,501990/1018/sys/src/9/port/devcons.c:36,50 (short | long)
1990/0227    
IOQ	kbdq;		/* qlock to getc; interrupt putc's */ 
IOQ	lineq;		/* lock to getc; interrupt putc's */ 
 
1990/0928    
#define SYSLOGMAGIC	0x23456789 
#define SYSLOG		((Syslog *)(UNCACHED | KZERO | 0x1B00)) 
1990/1018    
#define SYSLOGMAGIC	0xdeadbeaf 
#define SYSLOG		((Syslog *)(UNCACHED | 0x1B00)) 
1990/0928    
typedef struct Syslog	Syslog; 
struct Syslog 
{ 
	ulong	magic; 
	char	*start; 
1990/1018    
	int	wrapped; 
1990/0928    
	char	*next; 
	char	buf[2*BY2PG - 3*BY2WD]; 
1990/1018    
	char	buf[2*1024]; 
1990/0928    
}; 
 
 
1990/0928/sys/src/9/port/devcons.c:67,731990/1018/sys/src/9/port/devcons.c:67,72
1990/0227    
	unlock(&lineq); 
 
	duartinit(); 
1990/0928    
	sysloginit();		/* must be at the end of printinit */ 
1990/0227    
} 
 
/* 
1990/0928/sys/src/9/port/devcons.c:177,1831990/1018/sys/src/9/port/devcons.c:176,181
1990/0227    
{ 
	char buf[PRINTSIZE]; 
	int n; 
1990/0928    
	Syslog *s; 
1990/0227    
 
	strcpy(buf, "panic: "); 
1990/06111    
	n = doprint(buf+7, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/0928/sys/src/9/port/devcons.c:184,1911990/1018/sys/src/9/port/devcons.c:182,187
1990/0227    
	buf[n] = '\n'; 
	putstrn(buf, n+1); 
1990/0907    
	dumpstack(); 
1990/0928    
	s = SYSLOG; 
	print("start/next is %lux/%lux\n", s->start, s->next); 
1990/0227    
	exit(); 
} 
 
1990/0928/sys/src/9/port/devcons.c:309,3141990/1018/sys/src/9/port/devcons.c:305,311
1990/0227    
	Qcputime, 
1990/0720    
	Qlog, 
1990/0227    
	Qnull, 
1990/1018    
/*	Qpanic, /**/ 
1990/0227    
	Qpgrpid, 
	Qpid, 
	Qppid, 
1990/0928/sys/src/9/port/devcons.c:321,3261990/1018/sys/src/9/port/devcons.c:318,324
1990/0227    
	"cputime",	Qcputime,	72,	0600, 
1990/0912    
	"log",		Qlog,		BY2PG-8,	0600, 
1990/0227    
	"null",		Qnull,		0,	0600, 
1990/1018    
/*	"panic",	Qpanic,		0,	0666, /**/ 
1990/0227    
	"pgrpid",	Qpgrpid,	12,	0600, 
	"pid",		Qpid,		12,	0600, 
	"ppid",		Qppid,		12,	0600, 
1990/0928/sys/src/9/port/devcons.c:618,6951990/1018/sys/src/9/port/devcons.c:616,726
1990/0720    
sysloginit(void) 
{ 
	Syslog *s; 
1990/0928    
	char *start, *next; 
1990/1018    
	int i; 
1990/0720    
 
	s = SYSLOG; 
1990/0928    
	next = s->next; 
	start = s->start; 
	if(s->magic!=SYSLOGMAGIC || next>=&s->buf[sizeof(s->buf)] 
	|| start>=&s->buf[sizeof(s->buf)] || next<s->buf){ 
1990/0912    
		s->start = s->buf; 
1990/1018    
	if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)] || s->next<s->buf){ 
		s->wrapped = 0; 
1990/0720    
		s->next = s->buf; 
		s->magic = SYSLOGMAGIC; 
	} 
1990/0928    
	print("start/next is %lux/%lux was %lux/%lux\n", s->start, s->next, 
		start, next); 
1990/0720    
} 
 
void 
syslog(char *p, int n) 
{ 
1990/0912    
	int restart; 
1990/0720    
	Syslog *s; 
	char *end; 
1990/1018    
	int m; 
1990/0720    
 
1990/1018    
	sysloginit(); 
1990/0720    
	s = SYSLOG; 
	end = &s->buf[sizeof(s->buf)]; 
1990/0912    
	restart = 0; 
1990/0720    
	while(n-- > 0){ 
		*s->next++ = *p++; 
		if(s->next >= end) 
1990/1018    
	while(n){ 
		if(s->next + n > end) 
			m = end - s->next; 
		else 
			m = n; 
		memcpy(s->next, p, m); 
		s->next += m; 
		p += m; 
		n -= m; 
		if(s->next >= end){ 
			s->wrapped = 1; 
1990/0720    
			s->next = s->buf; 
1990/0912    
		if(s->next == s->start) 
			restart = 1; 
1990/1018    
		} 
1990/0720    
	} 
1990/0912    
	if(restart){ 
		s->start = s->next + 1; 
		if(s->start >= end) 
			s->start = s->buf; 
	} 
	wbflush(); 
1990/0720    
} 
 
long 
readlog(ulong off, char *buf, ulong n) 
1990/1018    
readlog(ulong off, char *buf, ulong len) 
1990/0720    
{ 
	Syslog *s; 
	char *p; 
	char *end; 
1990/0912    
	char *a = buf; 
1990/1018    
	char *start; 
	int n, m; 
	char *p; 
1990/0720    
 
1990/1018    
	n = len; 
	p = buf; 
 
	sysloginit(); 
1990/0720    
	s = SYSLOG; 
1990/1018    
	end = &s->buf[sizeof(s->buf)]; 
1990/0720    
 
	/* past end */ 
	if(off >= sizeof(s->buf)) 
1990/1018    
	if(s->wrapped){ 
		start = s->next; 
		m = sizeof(s->buf); 
	} else { 
		start = s->buf; 
		m = s->next - start; 
	} 
 
	if(off > m) 
1990/0720    
		return 0; 
1990/1018    
	if(off + n > m) 
		n = m - off; 
	start += off; 
	if(start > end) 
		start -= sizeof(s->buf); 
1990/0720    
 
	/* point to start of area to be read */ 
1990/1018    
	while(n > 0){ 
		if(start + n > end) 
			m = end - start; 
		else 
			m = n; 
		memcpy(p, start, m); 
		start += m; 
		p += m; 
		n -= m; 
		if(start >= end) 
			start = s->buf; 
	} 
 
	return p-buf; 
} 
 
/* 
 *  Read and write every byte of the log.  This seems to ensure that 
 *  on reboot, the bytes will really be in memory.  I don't understand -- presotto 
 */ 
void 
flushsyslog(void) 
{ 
	Syslog *s; 
	char *p, *end; 
	int x; 
 
	s = SYSLOG; 
1990/0720    
	end = &s->buf[sizeof(s->buf)]; 
1990/0912    
	p = s->start; 
1990/0720    
 
1990/0912    
	/* skip offset */ 
	while(off-- > 0){ 
		if(p == s->next) 
			return 0; 
		p++; 
	} 
1990/1018    
	x = splhi(); 
	lock(&printq); 
	for(p = s->buf; p < end; p++) 
		*p = *p; 
	unlock(&printq); 
	splx(x); 
1990/0912    
 
	/* copy out */ 
	while(n-- > 0){ 
		if(p == s->next) 
			break; 
		*a++ = *p++; 
1990/0720    
		if(p >= end) 
			p = s->buf; 
	} 
1990/0912    
	return a-buf; 
1990/1018    
	wbflush(); 
1990/0227    
} 
1990/1018/sys/src/9/port/devcons.c:311,3161990/11161/sys/src/9/port/devcons.c:311,317 (short | long)
1990/0227    
	Qppid, 
	Qtime, 
	Quser, 
1990/11161    
	Qvmereset, 
1990/0227    
}; 
 
Dirtab consdir[]={ 
1990/1018/sys/src/9/port/devcons.c:324,3291990/11161/sys/src/9/port/devcons.c:325,331
1990/0227    
	"ppid",		Qppid,		12,	0600, 
	"time",		Qtime,		12,	0600, 
	"user",		Quser,		0,	0600, 
1990/11161    
	"vmereset",	Qvmereset,	0,	0600, 
1990/0227    
}; 
 
#define	NCONS	(sizeof consdir/sizeof(Dirtab)) 
1990/1018/sys/src/9/port/devcons.c:579,5841990/11161/sys/src/9/port/devcons.c:581,593
1990/0227    
 
	case Qnull: 
		break; 
1990/11161    
 
	case Qvmereset: 
		if(strcmp(u->p->pgrp->user, "bootes") != 0) 
			error(0, Eperm); 
		vmereset(); 
		break; 
 
1990/0227    
	default: 
		error(0, Egreg); 
	} 
1990/11161/sys/src/9/port/devcons.c:315,3311990/11211/sys/src/9/port/devcons.c:315,331 (short | long)
1990/0227    
}; 
 
Dirtab consdir[]={ 
	"cons",		Qcons,		0,	0600, 
	"cputime",	Qcputime,	72,	0600, 
1990/0912    
	"log",		Qlog,		BY2PG-8,	0600, 
1990/0227    
	"null",		Qnull,		0,	0600, 
1990/1018    
/*	"panic",	Qpanic,		0,	0666, /**/ 
1990/0227    
	"pgrpid",	Qpgrpid,	12,	0600, 
	"pid",		Qpid,		12,	0600, 
	"ppid",		Qppid,		12,	0600, 
	"time",		Qtime,		12,	0600, 
	"user",		Quser,		0,	0600, 
1990/11161    
	"vmereset",	Qvmereset,	0,	0600, 
1990/11211    
	"cons",		{Qcons},	0,	0600, 
	"cputime",	{Qcputime},	72,	0600, 
	"log",		{Qlog},		BY2PG-8,	0600, 
	"null",		{Qnull},	0,	0600, 
/*	"panic",	{Qpanic},	0,	0666, /**/ 
	"pgrpid",	{Qpgrpid},	12,	0600, 
	"pid",		{Qpid},		12,	0600, 
	"ppid",		{Qppid},	12,	0600, 
	"time",		{Qtime},	12,	0600, 
	"user",		{Quser},	0,	0600, 
	"vmereset",	{Qvmereset},	0,	0600, 
1990/0227    
}; 
 
#define	NCONS	(sizeof consdir/sizeof(Dirtab)) 
1990/11161/sys/src/9/port/devcons.c:405,4161990/11211/sys/src/9/port/devcons.c:405,416
1990/0227    
Chan* 
consopen(Chan *c, int omode) 
{ 
	if(c->qid==Quser && omode==(OWRITE|OTRUNC)){ 
1990/11211    
	if(c->qid.path==Quser && omode==(OWRITE|OTRUNC)){ 
1990/0227    
		/* truncate? */ 
		if(strcmp(u->p->pgrp->user, "bootes") == 0)	/* BUG */ 
			u->p->pgrp->user[0] = 0; 
		else 
			error(0, Eperm); 
1990/11211    
			error(Eperm); 
1990/0227    
	} 
	return devopen(c, omode, consdir, NCONS, devgen); 
} 
1990/11161/sys/src/9/port/devcons.c:418,4241990/11211/sys/src/9/port/devcons.c:418,424
1990/0227    
void 
conscreate(Chan *c, char *name, int omode, ulong perm) 
{ 
	error(0, Eperm); 
1990/11211    
	error(Eperm); 
1990/0227    
} 
 
void 
1990/11161/sys/src/9/port/devcons.c:439,4451990/11211/sys/src/9/port/devcons.c:439,445
1990/0227    
 
	if(n <= 0) 
		return n; 
	switch(c->qid&~CHDIR){ 
1990/11211    
	switch(c->qid.path & ~CHDIR){ 
1990/0227    
	case Qdir: 
		return devdirread(c, buf, n, consdir, NCONS, devgen); 
 
1990/11161/sys/src/9/port/devcons.c:535,5411990/11211/sys/src/9/port/devcons.c:535,541
1990/0227    
	long l, m; 
	char *a = va; 
 
	switch(c->qid){ 
1990/11211    
	switch(c->qid.path){ 
1990/0227    
	case Qcons: 
		/* 
		 * Damn. Can't page fault in putstrn, so copy the data locally. 
1990/11161/sys/src/9/port/devcons.c:564,5701990/11211/sys/src/9/port/devcons.c:564,570
1990/0227    
 
	case Quser: 
		if(u->p->pgrp->user[0])		/* trying to overwrite /dev/user */ 
			error(0, Eperm); 
1990/11211    
			error(Eperm); 
1990/0227    
		if(c->offset >= NAMELEN-1) 
			return 0; 
		if(c->offset+n >= NAMELEN-1) 
1990/11161/sys/src/9/port/devcons.c:577,5831990/11211/sys/src/9/port/devcons.c:577,583
1990/0227    
	case Qpgrpid: 
	case Qpid: 
	case Qppid: 
		error(0, Eperm); 
1990/11211    
		error(Eperm); 
1990/0227    
 
	case Qnull: 
		break; 
1990/11161/sys/src/9/port/devcons.c:584,5951990/11211/sys/src/9/port/devcons.c:584,595
1990/11161    
 
	case Qvmereset: 
		if(strcmp(u->p->pgrp->user, "bootes") != 0) 
			error(0, Eperm); 
1990/11211    
			error(Eperm); 
1990/11161    
		vmereset(); 
		break; 
 
1990/0227    
	default: 
		error(0, Egreg); 
1990/11211    
		error(Egreg); 
1990/0227    
	} 
	return n; 
} 
1990/11161/sys/src/9/port/devcons.c:597,6211990/11211/sys/src/9/port/devcons.c:597,609
1990/0227    
void 
consremove(Chan *c) 
{ 
	error(0, Eperm); 
1990/11211    
	error(Eperm); 
1990/0227    
} 
 
void 
conswstat(Chan *c, char *dp) 
{ 
	error(0, Eperm); 
} 
                 
void 
conserrstr(Error *e, char *buf) 
{ 
	rooterrstr(e, buf); 
} 
                 
void 
consuserstr(Error *e, char *buf) 
{ 
	strcpy(buf, u->p->pgrp->user); 
1990/11211    
	error(Eperm); 
1990/0720    
} 
 
/* 
1990/11211/sys/src/9/port/devcons.c:255,2601990/1231/sys/src/9/port/devcons.c:255,264 (short | long)
1990/0227    
		putstrn("^U\n", 3); 
1990/0504    
	if(c == 0x16) 
1990/0707    
		dumpqueues(); 
1990/1231    
	if(c == 0xe) 
		nonettoggle(); 
	if(c == 0xc) 
		lancetoggle(); 
1990/0227    
	else{ 
		ch = c; 
		putstrn(&ch, 1); 
1990/1231/sys/src/9/port/devcons.c:82,881991/0318/sys/src/9/port/devcons.c:82,88 (short | long)
1990/0227    
		printq.c = *s++; 
		n--; 
	} 
	memcpy(printq.in, s, n); 
1991/0318    
	memmove(printq.in, s, n); 
1990/0227    
	printq.in += n; 
	if(printq.in >= printq.buf+sizeof(printq.buf)) 
		printq.in = printq.buf; 
1990/1231/sys/src/9/port/devcons.c:354,3601991/0318/sys/src/9/port/devcons.c:354,360
1990/0312    
		return 0; 
1990/0227    
	if(off+n > size) 
		n = size-off; 
	memcpy(buf, tmp+off, n); 
1991/0318    
	memmove(buf, tmp+off, n); 
1990/0227    
	return n; 
} 
 
1990/1231/sys/src/9/port/devcons.c:368,3741991/0318/sys/src/9/port/devcons.c:368,374
1990/0312    
		return 0; 
1990/0227    
	if(off+n > size) 
		n = size-off; 
	memcpy(buf, str+off, n); 
1991/0318    
	memmove(buf, str+off, n); 
1990/0227    
	return n; 
} 
 
1990/1231/sys/src/9/port/devcons.c:501,5071991/0318/sys/src/9/port/devcons.c:501,507
1990/0614    
			l = TK2MS(l); 
1990/0227    
			readnum(0, tmp+NUMSIZE*i, NUMSIZE, l, NUMSIZE); 
		} 
		memcpy(buf, tmp+k, n); 
1991/0318    
		memmove(buf, tmp+k, n); 
1990/0227    
		return n; 
 
	case Qpgrpid: 
1990/1231/sys/src/9/port/devcons.c:549,5551991/0318/sys/src/9/port/devcons.c:549,555
1990/0227    
			m = l; 
			if(m > sizeof buf) 
				m = sizeof buf; 
			memcpy(buf, a, m); 
1991/0318    
			memmove(buf, a, m); 
1990/0227    
			putstrn(a, m); 
			a += m; 
			l -= m; 
1990/1231/sys/src/9/port/devcons.c:561,5671991/0318/sys/src/9/port/devcons.c:561,567
1990/0227    
			return 0; 
		if(n >= sizeof cbuf) 
			n = sizeof cbuf - 1; 
		memcpy(cbuf, a, n); 
1991/0318    
		memmove(cbuf, a, n); 
1990/0227    
		cbuf[n-1] = 0; 
		boottime = strtoul(a, 0, 0); 
		break; 
1990/1231/sys/src/9/port/devcons.c:573,5791991/0318/sys/src/9/port/devcons.c:573,579
1990/0227    
			return 0; 
		if(c->offset+n >= NAMELEN-1) 
			n = NAMELEN-1 - c->offset; 
		memcpy(u->p->pgrp->user+c->offset, a, n); 
1991/0318    
		memmove(u->p->pgrp->user+c->offset, a, n); 
1990/0227    
		u->p->pgrp->user[c->offset+n] = 0; 
		break; 
 
1990/1231/sys/src/9/port/devcons.c:642,6481991/0318/sys/src/9/port/devcons.c:642,648
1990/1018    
			m = end - s->next; 
		else 
			m = n; 
		memcpy(s->next, p, m); 
1991/0318    
		memmove(s->next, p, m); 
1990/1018    
		s->next += m; 
		p += m; 
		n -= m; 
1990/1231/sys/src/9/port/devcons.c:691,6971991/0318/sys/src/9/port/devcons.c:691,697
1990/1018    
			m = end - start; 
		else 
			m = n; 
		memcpy(p, start, m); 
1991/0318    
		memmove(p, start, m); 
1990/1018    
		start += m; 
		p += m; 
		n -= m; 
1991/0318/sys/src/9/port/devcons.c:249,2541991/0327/sys/src/9/port/devcons.c:249,256 (short | long)
1990/0227    
	/* 
	 * ^t hack BUG 
	 */ 
1991/0327    
	if(c == 0x10) 
		panic("^p"); 
1990/0227    
	if(c == 0x14) 
		DEBUG(); 
	if(c == 0x15) 
1991/0318/sys/src/9/port/devcons.c:272,2771991/0327/sys/src/9/port/devcons.c:274,281
1990/0227    
void 
kbdchar(int c) 
{ 
1991/0327    
	if(c == 0)	/* NULs cause trouble */ 
		return; 
1990/0227    
	if(c == '\r') 
		c = '\n'; 
	echo(c); 
1991/0327/sys/src/9/port/devcons.c:249,2551991/0403/sys/src/9/port/devcons.c:249,255 (short | long)
1990/0227    
	/* 
	 * ^t hack BUG 
	 */ 
1991/0327    
	if(c == 0x10) 
1991/0403    
	if(c == 0x18) 
1991/0327    
		panic("^p"); 
1990/0227    
	if(c == 0x14) 
		DEBUG(); 
1991/0403/sys/src/9/port/devcons.c:197,2101991/0411/sys/src/9/port/devcons.c:197,210 (short | long)
1990/0321    
		return 0; 
1990/0227    
	n = sprint(buf, "%s %d: ", u->p->text, u->p->pid); 
1990/06111    
	n = doprint(buf+n, buf+sizeof(buf), fmt, (&fmt+1)) - buf; 
1990/0227    
	qlock(c); 
1991/0411    
	qlock(&c->wrl); 
1990/0227    
	if(waserror()){ 
		qunlock(c); 
1991/0411    
		qunlock(&c->wrl); 
1990/0321    
		return 0; 
1990/0227    
	} 
	(*devtab[c->type].write)(c, buf, n); 
1991/0411    
	(*devtab[c->type].write)(c, buf, n, c->offset); 
1990/0227    
	c->offset += n; 
	qunlock(c); 
1991/0411    
	qunlock(&c->wrl); 
1990/0321    
	poperror(); 
1990/0227    
	return n; 
} 
1991/0403/sys/src/9/port/devcons.c:435,4411991/0411/sys/src/9/port/devcons.c:435,441
1990/0227    
} 
 
long 
consread(Chan *c, void *buf, long n) 
1991/0411    
consread(Chan *c, void *buf, long n, ulong offset) 
1990/0227    
{ 
	int ch, i, j, k; 
	ulong l; 
1991/0403/sys/src/9/port/devcons.c:492,4981991/0411/sys/src/9/port/devcons.c:492,498
1990/0227    
		return i; 
 
	case Qcputime: 
1990/0312    
		k = c->offset; 
1991/0411    
		k = offset; 
1990/0312    
		if(k >= sizeof tmp) 
			return 0; 
1990/0227    
		if(k+n > sizeof tmp) 
1991/0403/sys/src/9/port/devcons.c:509,5301991/0411/sys/src/9/port/devcons.c:509,530
1990/0227    
		return n; 
 
	case Qpgrpid: 
		return readnum(c->offset, buf, n, u->p->pgrp->pgrpid, NUMSIZE); 
1991/0411    
		return readnum(offset, buf, n, u->p->pgrp->pgrpid, NUMSIZE); 
1990/0227    
 
	case Qpid: 
		return readnum(c->offset, buf, n, u->p->pid, NUMSIZE); 
1991/0411    
		return readnum(offset, buf, n, u->p->pid, NUMSIZE); 
1990/0227    
 
	case Qppid: 
		return readnum(c->offset, buf, n, u->p->parentpid, NUMSIZE); 
1991/0411    
		return readnum(offset, buf, n, u->p->parentpid, NUMSIZE); 
1990/0227    
 
	case Qtime: 
1990/0617    
		return readnum(c->offset, buf, n, boottime+TK2SEC(MACHP(0)->ticks), 12); 
1991/0411    
		return readnum(offset, buf, n, boottime+TK2SEC(MACHP(0)->ticks), 12); 
1990/0227    
 
	case Quser: 
		return readstr(c->offset, buf, n, u->p->pgrp->user); 
1991/0411    
		return readstr(offset, buf, n, u->p->pgrp->user); 
1990/0227    
 
1990/0720    
	case Qlog: 
		return readlog(c->offset, buf, n); 
1991/0411    
		return readlog(offset, buf, n); 
1990/0720    
 
1990/0227    
	case Qnull: 
		return 0; 
1991/0403/sys/src/9/port/devcons.c:536,5421991/0411/sys/src/9/port/devcons.c:536,542
1990/0227    
} 
 
long 
conswrite(Chan *c, void *va, long n) 
1991/0411    
conswrite(Chan *c, void *va, long n, ulong offset) 
1990/0227    
{ 
	char cbuf[64]; 
	char buf[256]; 
1991/0403/sys/src/9/port/devcons.c:573,5841991/0411/sys/src/9/port/devcons.c:573,584
1990/0227    
	case Quser: 
		if(u->p->pgrp->user[0])		/* trying to overwrite /dev/user */ 
1990/11211    
			error(Eperm); 
1990/0227    
		if(c->offset >= NAMELEN-1) 
1991/0411    
		if(offset >= NAMELEN-1) 
1990/0227    
			return 0; 
		if(c->offset+n >= NAMELEN-1) 
			n = NAMELEN-1 - c->offset; 
1991/0318    
		memmove(u->p->pgrp->user+c->offset, a, n); 
1990/0227    
		u->p->pgrp->user[c->offset+n] = 0; 
1991/0411    
		if(offset+n >= NAMELEN-1) 
			n = NAMELEN-1 - offset; 
		memmove(u->p->pgrp->user+offset, a, n); 
		u->p->pgrp->user[offset+n] = 0; 
1990/0227    
		break; 
 
	case Qcputime: 
1991/0411/sys/src/9/port/devcons.c:404,4091991/0419/sys/src/9/port/devcons.c:404,415 (short | long)
1990/0227    
	return devwalk(c, name, consdir, NCONS, devgen); 
} 
 
1991/0419    
Chan* 
consclwalk(Chan *c, char *name) 
{ 
	return devclwalk(c, name); 
} 
 
1990/0227    
void 
consstat(Chan *c, char *dp) 
{ 
Too many diffs (26 > 25). Stopping.


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)