%d\n", t, getw(ascbuf));
		break;

	case ANAME:
		t = outname(s);
		printf("~%s=%o\n", t, getw(ascbuf));
		break;

	case RNAME:
		t = outname(s);
		printf("~%s=r%d\n", t, getw(ascbuf));
		break;

	case SWIT:
		t = getw(ascbuf);
		line = getw(ascbuf);
		curbase = funcbase;
		while(swp=getblk(sizeof(*swp)), swp->swlab = getw(ascbuf))
			swp->swval = getw(ascbuf);
		pswitch(funcbase, swp, t);
		break;

	case CBRANCH:
		lbl = getw(ascbuf);
		cond = getw(ascbuf);
	case EXPR:
		line = getw(ascbuf);
		if (sp != &expstack[1]) {
			error("Expression input botch");
			exit(1);
		}
		nstack = 0;
		*sp = optim(*--sp);
		if (lbl)
			cbranch(*sp, lbl, cond, 0);
		else
			rcexpr(*sp, efftab, 0);
		curbase = funcbase;
		break;

	case NAME:
		t = getw(ascbuf);
		if (t==EXTERN) {
			np = getblk(sizeof(*xnp));
			np->type = getw(ascbuf);
			outname(np->name);
		} else {
			np = getblk(sizeof(*np));
			np->type = getw(ascbuf);
			np->nloc = getw(ascbuf);
		}
		np->op = NAME;
		np->class = t;
		np->regno = 0;
		np->offset = 0;
		*sp++ = np;
		break;

	case CON:
		getw(ascbuf);	/* ignore type, assume int */
		*sp++ = tconst(getw(ascbuf));
		break;

	case LCON:
		getw(ascbuf);	/* ignore type, assume long */
		t = getw(ascbuf);
		op = getw(ascbuf);
		if (t==0 && op>=0 || t == -1 && op<0) {
			*sp++ = tnode(ITOL, LONG, tconst(op));
			break;
		}
		lp = getblk(sizeof(*lp));
		lp->op = LCON;
		lp->type = LONG;
		lp->lvalue = itol(t, op);
		*sp++ = lp;
		break;

	case FCON:
		t = getw(ascbuf);
		outname(numbuf);
		fp = getblk(sizeof(*fp));
		fp->op = FCON;
		fp->type = t;
		fp->value = isn++;
		fp->fvalue = atof(numbuf);
		*sp++ = fp;
		break;

	case FSEL:
		*sp = tnode(FSEL, getw(ascbuf), *--sp, NULL);
		t = getw(ascbuf);
		(*sp++)->tr2 = tnode(COMMA, INT, tconst(getw(ascbuf)), tconst(t));
		break;

	case NULLOP:
		*sp++ = tnode(0, 0, NULL, NULL);
		break;

	case LABEL:
		label(getw(ascbuf));
		break;

	case NLABEL:
		t = outname(s);
		printf("_%s:\n", t, t);
		break;

	case RLABEL:
		t = outname(s);
		printf("_%s:\n~~%s:\n", t, t, t);
		break;

	case BRANCH:
		branch(getw(ascbuf), 0);
		break;

	case SETREG:
		nreg = getw(ascbuf)-1;
		break;

	default:
		if (opdope[op]&BINARY) {
			if (sp < &expstack[1]) {
				error("Binary expression botch");
				exit(1);
			}
			t = *--sp;
			*sp++ = tnode(op, getw(ascbuf), *--sp, t);
		} else {
			sp[-1] = tnode(op, getw(ascbuf), sp[-1]);
		}
		break;
	}
	}
}

outname(s)
{
	register char *p, c;
	register n;

	p = s;
	n = 0;
	while (c = getc(ascbuf)) {
		*p++ = c;
		n++;
	}
	do {
		*p++ = 0;
	} while (n++ < 8);
	return(s);
}
		branch(getw(ascbuf), 0);
		break;

	case SETREG:
		nreg = getw(ascbuf)-1;
		break;

	default:
		if (opdope[op]&BINARY) {
			if (sp < &expstack[1]) {
				error("Binary expression botch");
				exit(1);
			}
