예제 #1
0
파일: mach.c 프로젝트: kahrs/cda
int
treeconv(void *o, int f1, int f2, int f3, int ch)
{
	Sym *s;
	Tree *t;
	char buf[1000], *bp=buf;
	char prefix[10];
	USED(ch);
	t = *((Tree **) o);
	if (t->op < not) {
		s = t->id;
		bp += sprint(bp, "%s", s->name);
		if (s->pin)
			sprint(bp, "_%P", s);
		strconv(buf, f1, f2, f3);
		return sizeof(Tree *);
	}
	else if (t->op == not && t->left->op == ID) {
		s = t->left->id;
		bp += sprint(bp, "%s,, INV", s->name);
		if (s->pin)
			sprint(bp, "_%P", s);
		strconv(buf, f1, f2, f3);
		return sizeof(Tree *);
	}
	if (!t->id) {
		sprint(buf, "T%3.3d", gsym++);
		t->id = lookup(buf);
		t->id->internal = 1;
	}
	sprint(prefix, t->id->internal ? "" : "x_");
	bp += sprint(bp, "sym, c_%s, %s\n", t->id->name, xname[t->op]);
	bp += sprint(bp, "pin, o, o, %s%s\n", prefix, t->id->name);
	switch (t->op) {
	case and:
	case or:
	case xor:
		bp += sprint(bp, "pin, i0, i, %T\n", t->right);
		bp += sprint(bp, "pin, i1, i, %T\n", t->left);
		break;
	case not:
		bp += sprint(bp, "pin, i, i, %T\n", t->left);
		break;
	default:
		bp += sprint(bp, "pin, op=%s\n", xname[t->op]);
		break;
	}
	sprint(bp, "end\n");
	print("%s", buf);
	if (t->id->name) {
		sprint(buf, "%s%s", prefix, t->id->name);
		strconv(buf, f1, f2, f3);
	}
	return sizeof(Tree *);
}
예제 #2
0
파일: dirmodeconv.c 프로젝트: npe9/harvey
int
dirmodeconv(va_list *arg, Fconv *f)
{
	static char buf[16];
	uint32_t m;

	m = va_arg(*arg, uint32_t);

	if(m & DMDIR)
		buf[0]='d';
	else if(m & DMAPPEND)
		buf[0]='a';
	else
		buf[0]='-';
	if(m & DMEXCL)
		buf[1]='l';
	else
		buf[1]='-';
	rwx((m>>6)&7, buf+2);
	rwx((m>>3)&7, buf+5);
	rwx((m>>0)&7, buf+8);
	buf[11] = 0;

	strconv(buf, f);
	return 0;
}
예제 #3
0
파일: xec.c 프로젝트: UIKit0/newsqueak
int
iconv(va_list *va, Fconv *f)
{
	int i;
	char buf[16];
	void *o;	/* really int (**o)(Proc*) */

	o = va_arg(*va, void*);
	for(i=0; i<NInst; i++)
		if((void*)insttab[i].fp==o){
			strconv(insttab[i].name, f);
			return sizeof o;
		}
	sprint(buf, "  0x%p", o);
	strconv(buf, f);
	return sizeof o;
}
예제 #4
0
파일: format.c 프로젝트: kahrs/cda
int
pformat(Point *p, int f1, int f2, int f3, int chr)
{
	char buf[64];

	sprint(buf, "%d/%d", p->x, p->y);
	strconv(buf, f1, f2, f3);
	return(sizeof(Point));
}
예제 #5
0
파일: format.c 프로젝트: kahrs/cda
int
rformat(Rectangle *r, int f1, int f2, int f3, int chr)
{
	char buf[64];

	sprint(buf, "%p %p", r->min, r->max);
	strconv(buf, f1, f2, f3);
	return(sizeof(Rectangle));
}
예제 #6
0
파일: format.c 프로젝트: kahrs/cda
int
cformat(void *c, int f1, int f2, int f3, int chr)
{
	char buf[64];

	sprint(buf, "%s.%d", ((Coord *) c)->chip, ((Coord *) c)->pin);
	strconv(buf, f1, f2, f3);
	return(sizeof(Coord));
}
예제 #7
0
파일: fcallconv.c 프로젝트: Earnestly/plan9
int
dirconv(va_list *arg, Fconv *f)
{
	char buf[160];

	fdirconv(buf, va_arg(*arg, Dir*));
	strconv(buf, f);
	return(sizeof(Dir*));
}
예제 #8
0
//	成功=0を返す.
int hidasp_init(int type, const char *serial, const char *baud)
{
	int baudrate= BAUD_RATE;
	int portno  = 0;

	strconv(&baudrate,baud);	// 19200
	strconv(&portno,serial);	// comXX

	int com_n = RS_printinfo(portno,baudrate,1);
	if( com_n==0) return -1;		// NG
	RS_init(com_n,baudrate);			// 'COMx:' をオープンする.

#if	0
	int i;
	for(i=0; i<160; i++) {
		RS_putc(0xff);
	}
#endif

	RS_putc(0xaa);
	RS_putc(0x55);
	RS_put_flush();
	return flash_get_status();
}
예제 #9
0
파일: lex.c 프로젝트: UIKit0/newsqueak
int
zconv(va_list *va, Fconv *f)
{
	int o;
	char buf[4096];

	SET(o);
	if(f->chr == 'Z')
		o = va_arg(*va, int);
	if(initializing)
		strcpy(buf, "squint: ");
	else{
		if(f->chr == 'z')
			printfileline(buf, file, file->line, 1);
		else
			printfileline(buf, file, o, 1);
	}
	strconv(buf, f);
	if(f->chr == 'z')
		return 0;
	return sizeof(int);
}
예제 #10
0
파일: mach.c 프로젝트: kahrs/cda
int
pinconv(void *o, int f1, int f2, int f3, int ch)
{
	Sym *s;
	char buf[20];
	char *p, *q;
	int c;
	USED(ch);
	s = *((Sym **) o);
	if (s->hard) {
		for (p = s->pin, q = buf; (c = *p) && !isdigit(c); p++)
			*q++ = c;
		if (isdigit(c))
			sprint(q, "<%s>", p);
		else
			*q = 0;
	}
	else
		sprint(buf, "%s", s->pin);
	strconv(buf, f1, f2, f3);
	return sizeof(Sym *);
}
예제 #11
0
int
eipconv(va_list *arg, Fconv *f)
{
	char buf[8*5];
	static char *efmt = "%.2lux%.2lux%.2lux%.2lux%.2lux%.2lux";
	static char *ifmt = "%d.%d.%d.%d";
	uint8_t *p, ip[16];
	uint32_t *lp;
	uint16_t s;
	int i, j, n, eln, eli;

	switch(f->chr) {
	case 'E':		/* Ethernet address */
		p = va_arg(*arg, uint8_t*);
		sprint(buf, efmt, p[0], p[1], p[2], p[3], p[4], p[5]);
		break;
	case 'I':		/* Ip address */
		p = va_arg(*arg, uint8_t*);
common:
		if(memcmp(p, v4prefix, 12) == 0)
			sprint(buf, ifmt, p[12], p[13], p[14], p[15]);
		else {
			/* find longest elision */
			eln = eli = -1;
			for(i = 0; i < 16; i += 2){
				for(j = i; j < 16; j += 2)
					if(p[j] != 0 || p[j+1] != 0)
						break;
				if(j > i && j - i > eln){
					eli = i;
					eln = j - i;
				}
			}

			/* print with possible elision */
			n = 0;
			for(i = 0; i < 16; i += 2){
				if(i == eli){
					n += sprint(buf+n, "::");
					i += eln;
					if(i >= 16)
						break;
				} else if(i != 0)
					n += sprint(buf+n, ":");
				s = (p[i]<<8) + p[i+1];
				n += sprint(buf+n, "%x", s);
			}
		}
		break;
	case 'i':		/* v6 address as 4 longs */
		lp = va_arg(*arg, uint32_t*);
		for(i = 0; i < 4; i++)
			hnputl(ip+4*i, *lp++);
		p = ip;
		goto common;
	case 'V':		/* v4 ip address */
		p = va_arg(*arg, uint8_t*);
		sprint(buf, ifmt, p[0], p[1], p[2], p[3]);
		break;
	case 'M':		/* ip mask */
		p = va_arg(*arg, uint8_t*);

		/* look for a prefix mask */
		for(i = 0; i < 16; i++)
			if(p[i] != 0xff)
				break;
		if(i < 16){
			if((prefixvals[p[i]] & Isprefix) == 0)
				goto common;
			for(j = i+1; j < 16; j++)
				if(p[j] != 0)
					goto common;
			n = 8*i + (prefixvals[p[i]] & ~Isprefix);
		} else
			n = 8*16;

		/* got one, use /xx format */
		sprint(buf, "/%d", n);
		break;
	default:
		strcpy(buf, "(eipconv)");
	}
	strconv(buf, f);
	return sizeof(uint8_t*);
}
예제 #12
0
파일: fcallconv.c 프로젝트: Earnestly/plan9
int
fcallconv(va_list *arg, Fconv *f1)
{
	Fcall *f;
	int fid, type, tag, n, i;
	char buf[512], tmp[200];
	Dir *d;
	Qid *q;

	f = va_arg(*arg, Fcall*);
	type = f->type;
	fid = f->fid;
	tag = f->tag;
	switch(type){
	case Tversion:	/* 100 */
		sprint(buf, "Tversion tag %ud msize %ud version '%s'", tag, f->msize, f->version);
		break;
	case Rversion:
		sprint(buf, "Rversion tag %ud msize %ud version '%s'", tag, f->msize, f->version);
		break;
	case Tauth:	/* 102 */
		sprint(buf, "Tauth tag %ud afid %d uname %s aname %s", tag,
			f->afid, f->uname, f->aname);
		break;
	case Rauth:
		sprint(buf, "Rauth tag %ud qid " QIDFMT, tag,
			f->aqid.path, f->aqid.vers, qidtype(tmp, f->aqid.type));
		break;
	case Tattach:	/* 104 */
		sprint(buf, "Tattach tag %ud fid %d afid %d uname %s aname %s", tag,
			fid, f->afid, f->uname, f->aname);
		break;
	case Rattach:
		sprint(buf, "Rattach tag %ud qid " QIDFMT, tag,
			f->qid.path, f->qid.vers, qidtype(tmp, f->qid.type));
		break;
	case Rerror:	/* 107; 106 (Terror) illegal */
		sprint(buf, "Rerror tag %ud ename %s", tag, f->ename);
		break;
	case Tflush:	/* 108 */
		sprint(buf, "Tflush tag %ud oldtag %ud", tag, f->oldtag);
		break;
	case Rflush:
		sprint(buf, "Rflush tag %ud", tag);
		break;
	case Twalk:	/* 110 */
		n = sprint(buf, "Twalk tag %ud fid %d newfid %d nwname %d ", tag, fid, f->newfid, f->nwname);
			for(i=0; i<f->nwname; i++)
				n += sprint(buf+n, "%d:%s ", i, f->wname[i]);
		break;
	case Rwalk:
		n = sprint(buf, "Rwalk tag %ud nwqid %ud ", tag, f->nwqid);
		for(i=0; i<f->nwqid; i++){
			q = &f->wqid[i];
			n += sprint(buf+n, "%d:" QIDFMT " ", i,
				q->path, q->vers, qidtype(tmp, q->type));
		}
		break;
	case Topen:	/* 112 */
		sprint(buf, "Topen tag %ud fid %ud mode %d", tag, fid, f->mode);
		break;
	case Ropen:
		sprint(buf, "Ropen tag %ud qid " QIDFMT " iounit %ud ", tag,
			f->qid.path, f->qid.vers, qidtype(tmp, f->qid.type), f->iounit);
		break;
	case Tcreate:	/* 114 */
		sprint(buf, "Tcreate tag %ud fid %ud name %s perm %M mode %d",
			tag, fid, f->name, (ulong)f->perm, f->mode);
		break;
	case Rcreate:
		sprint(buf, "Rcreate tag %ud qid " QIDFMT " iounit %ud ", tag,
			f->qid.path, f->qid.vers, qidtype(tmp, f->qid.type), f->iounit);
		break;
	case Tread:	/* 116 */
		sprint(buf, "Tread tag %ud fid %d offset %lld count %ud",
			tag, fid, f->offset, f->count);
		break;
	case Rread:
		n = sprint(buf, "Rread tag %ud count %ud ", tag, f->count);
			dumpsome(buf+n, f->data, f->count);
		break;
	case Twrite:	/* 118 */
		n = sprint(buf, "Twrite tag %ud fid %d offset %lld count %ud ",
			tag, fid, f->offset, f->count);
		dumpsome(buf+n, f->data, f->count);
		break;
	case Rwrite:
		sprint(buf, "Rwrite tag %ud count %ud", tag, f->count);
		break;
	case Tclunk:	/* 120 */
		sprint(buf, "Tclunk tag %ud fid %ud", tag, fid);
		break;
	case Rclunk:
		sprint(buf, "Rclunk tag %ud", tag);
		break;
	case Tremove:	/* 122 */
		sprint(buf, "Tremove tag %ud fid %ud", tag, fid);
		break;
	case Rremove:
		sprint(buf, "Rremove tag %ud", tag);
		break;
	case Tstat:	/* 124 */
		sprint(buf, "Tstat tag %ud fid %ud", tag, fid);
		break;
	case Rstat:
		n = sprint(buf, "Rstat tag %ud ", tag);
		if(f->nstat > sizeof tmp)
			sprint(buf+n, " stat(%d bytes)", f->nstat);
		else{
			d = (Dir*)tmp;
			(old9p?convM2Dold:convM2D)(f->stat, f->nstat, d, (char*)(d+1));
			sprint(buf+n, " stat ");
			fdirconv(buf+n+6, d);
		}
		break;
	case Twstat:	/* 126 */
		n = sprint(buf, "Twstat tag %ud fid %ud", tag, fid);
		if(f->nstat > sizeof tmp)
			sprint(buf+n, " stat(%d bytes)", f->nstat);
		else{
			d = (Dir*)tmp;
			(old9p?convM2Dold:convM2D)(f->stat, f->nstat, d, (char*)(d+1));
			sprint(buf+n, " stat ");
			fdirconv(buf+n+6, d);
		}
		break;
	case Rwstat:
		sprint(buf, "Rwstat tag %ud", tag);
		break;
	default:
		sprint(buf,  "unknown type %d", type);
	}
	strconv(buf, f1);
	return(sizeof(Fcall*));
}