xref: /csrg-svn/usr.bin/pascal/px/interp.c (revision 2109)
12080Smckusick /* Copyright (c) 1979 Regents of the University of California */
22080Smckusick 
3*2109Smckusic static char sccsid[] = "@(#)interp.c 1.2 01/10/81";
42080Smckusick 
52080Smckusick #include <math.h>
62080Smckusick #include "vars.h"
72080Smckusick #include "panics.h"
82080Smckusick #include "h02opcs.h"
92080Smckusick #include "machdep.h"
102080Smckusick #include "h01errs.h"
112080Smckusick #include "libpc.h"
122080Smckusick 
132080Smckusick /*
142080Smckusick  * program variables
152080Smckusick  */
16*2109Smckusic union disply	_display;
172080Smckusick struct disp	*_dp;
182080Smckusick long	_lino = 0;
192080Smckusick int	_argc;
202080Smckusick char	**_argv;
212080Smckusick long	_mode;
222080Smckusick long	_nodump;
232080Smckusick long	_stlim = 500000;
242080Smckusick long	_stcnt = 0;
252080Smckusick char	*_minptr = (char *)0x7fffffff;
262080Smckusick char	*_maxptr = (char *)0;
272080Smckusick long	*_pcpcount = (long *)0;
282080Smckusick long	_cntrs = 0;
292080Smckusick long	_rtns = 0;
302080Smckusick 
312080Smckusick /*
322080Smckusick  * file record variables
332080Smckusick  */
342080Smckusick long		_filefre = PREDEF;
352080Smckusick struct iorechd	_fchain = {
362080Smckusick 	0, 0, 0, 0,		/* only use fchain field */
372080Smckusick 	INPUT			/* fchain  */
382080Smckusick };
392080Smckusick struct iorec	*_actfile[MAXFILES] = {
402080Smckusick 	INPUT,
412080Smckusick 	OUTPUT,
422080Smckusick 	ERR
432080Smckusick };
442080Smckusick 
452080Smckusick /*
462080Smckusick  * standard files
472080Smckusick  */
482080Smckusick char		_inwin, _outwin, _errwin;
492080Smckusick struct iorechd	input = {
502080Smckusick 	&_inwin,		/* fileptr */
512080Smckusick 	0,			/* lcount  */
522080Smckusick 	0x7fffffff,		/* llimit  */
532080Smckusick 	&_iob[0],		/* fbuf    */
542080Smckusick 	OUTPUT,			/* fchain  */
552080Smckusick 	STDLVL,			/* flev    */
562080Smckusick 	"standard input",	/* pfname  */
572080Smckusick 	FTEXT | FREAD | SYNC,	/* funit   */
582080Smckusick 	0,			/* fblk    */
592080Smckusick 	1			/* fsize   */
602080Smckusick };
612080Smckusick struct iorechd	output = {
622080Smckusick 	&_outwin,		/* fileptr */
632080Smckusick 	0,			/* lcount  */
642080Smckusick 	0x7fffffff,		/* llimit  */
652080Smckusick 	&_iob[1],		/* fbuf    */
662080Smckusick 	ERR,			/* fchain  */
672080Smckusick 	STDLVL,			/* flev    */
682080Smckusick 	"standard output",	/* pfname  */
692080Smckusick 	FTEXT | FWRITE | EOFF,	/* funit   */
702080Smckusick 	1,			/* fblk    */
712080Smckusick 	1			/* fsize   */
722080Smckusick };
732080Smckusick struct iorechd	_err = {
742080Smckusick 	&_errwin,		/* fileptr */
752080Smckusick 	0,			/* lcount  */
762080Smckusick 	0x7fffffff,		/* llimit  */
772080Smckusick 	&_iob[2],		/* fbuf    */
782080Smckusick 	FILNIL,			/* fchain  */
792080Smckusick 	STDLVL,			/* flev    */
802080Smckusick 	"Message file",		/* pfname  */
812080Smckusick 	FTEXT | FWRITE | EOFF,	/* funit   */
822080Smckusick 	2,			/* fblk    */
832080Smckusick 	1			/* fsize   */
842080Smckusick };
852080Smckusick 
86*2109Smckusic /*
87*2109Smckusic  * Px profile array
88*2109Smckusic  */
89*2109Smckusic #ifdef PROFILE
90*2109Smckusic long _profcnts[NUMOPS];
91*2109Smckusic #endif PROFILE
92*2109Smckusic 
93*2109Smckusic /*
94*2109Smckusic  * debugging variables
95*2109Smckusic  */
96*2109Smckusic #ifdef DEBUG
97*2109Smckusic char opc[10];
98*2109Smckusic long opcptr = 9;
99*2109Smckusic #endif DEBUG
100*2109Smckusic 
1012080Smckusick interpreter(base)
1022080Smckusick 	char *base;
1032080Smckusick {
1042080Smckusick 	union progcntr pc;		/* interpreted program cntr */
1052080Smckusick 	register char *vpc;		/* register used for "pc" */
1062080Smckusick 	struct iorec *curfile;		/* active file */
1072080Smckusick 	register struct stack *stp;	/* active stack frame ptr */
1082080Smckusick 	/*
1092080Smckusick 	 * the following variables are used as scratch
1102080Smckusick 	 */
1112080Smckusick 	double td, td1;
1122080Smckusick 	register long tl, tl1, tl2;
1132080Smckusick 	long *tlp;
1142080Smckusick 	short *tsp, *tsp1;
1152080Smckusick 	register char *tcp;
1162080Smckusick 	char *tcp1;
1172080Smckusick 	struct stack *tstp;
1182080Smckusick 	struct formalrtn *tfp;
1192080Smckusick 	union progcntr tpc;
1202080Smckusick 	struct iorec **ip;
1212080Smckusick 
1222080Smckusick 	/*
1232080Smckusick 	 * necessary only on systems which do not initialize
1242080Smckusick 	 * memory to zero
1252080Smckusick 	 */
1262080Smckusick 	for (ip = &_actfile[3]; ip < &_actfile[MAXFILES]; *ip++ = FILNIL)
1272080Smckusick 		/* void */;
1282080Smckusick 	/*
1292080Smckusick 	 * set up global environment, then ``call'' the main program
1302080Smckusick 	 */
131*2109Smckusic 	_display.frame[0].locvars = pushsp(2 * sizeof(struct iorec *));
132*2109Smckusic 	_display.frame[0].locvars += 8;	/* local offsets are negative */
133*2109Smckusic 	*(struct iorec **)(_display.frame[0].locvars - 4) = OUTPUT;
134*2109Smckusic 	*(struct iorec **)(_display.frame[0].locvars - 8) = INPUT;
135*2109Smckusic 	enableovrflo();
1362080Smckusick 	stp = (struct stack *)pushsp(sizeof(struct stack));
137*2109Smckusic 	_dp = &_display.frame[0];
1382080Smckusick 	pc.cp = base;
1392080Smckusick 	for(;;) {
140*2109Smckusic #		ifdef DEBUG
1412080Smckusick 		if (++opcptr == 10)
1422080Smckusick 			opcptr = 0;
1432080Smckusick 		opc[opcptr] = *pc.ucp;
144*2109Smckusic #		endif DEBUG
145*2109Smckusic #		ifdef PROFILE
146*2109Smckusic 		_profcnts[*pc.ucp]++;
147*2109Smckusic #		endif PROFILE
1482080Smckusick 		switch (*pc.ucp++) {
1492080Smckusick 		default:
1502080Smckusick 			panic(PBADOP);
1512080Smckusick 			continue;
1522080Smckusick 		case O_NODUMP:
1532080Smckusick 			_nodump++;
154*2109Smckusic 			disableovrflo();
1552080Smckusick 			/* and fall through */
1562080Smckusick 		case O_BEG:
1572080Smckusick 			_dp += 1;		/* enter local scope */
1582080Smckusick 			stp->odisp = *_dp;	/* save old display value */
1592080Smckusick 			tl = *pc.ucp++;		/* tl = name size */
1602080Smckusick 			stp->entry = pc.hdrp;	/* pointer to entry info */
161*2109Smckusic 			tl1 = *pc.lp++;		/* tl1 = local variable size */
1622080Smckusick 			pc.lp++;		/* skip over number of args */
1632080Smckusick 			_lino = *pc.usp++;	/* set new lino */
1642080Smckusick 			pc.cp += tl;		/* skip over name text */
1652080Smckusick 			stp->file = curfile;	/* save active file */
1662080Smckusick 			tcp = pushsp(tl1);	/* tcp = new top of stack */
1672080Smckusick 			blkclr(tl1, tcp);	/* zero stack frame */
168*2109Smckusic 			tcp += tl1;		/* offsets of locals are neg */
169*2109Smckusic 			_dp->locvars = tcp;	/* set new display pointer */
170*2109Smckusic 			_dp->stp = stp;
1712080Smckusick 			stp->tos = pushsp(0);	/* set top of stack pointer */
1722080Smckusick 			continue;
1732080Smckusick 		case O_END:
1742080Smckusick 			PCLOSE(_dp->locvars);	/* flush & close local files */
1752080Smckusick 			stp = _dp->stp;
1762080Smckusick 			curfile = stp->file;	/* restore old active file */
1772080Smckusick 			*_dp = stp->odisp;	/* restore old display entry */
178*2109Smckusic 			if (_dp == &_display.frame[1])
1792080Smckusick 				return;		/* exiting main proc ??? */
1802080Smckusick 			_lino = stp->lino;	/* restore lino, pc, dp */
1812080Smckusick 			pc.cp = stp->pc.cp;
1822080Smckusick 			_dp = stp->dp;
183*2109Smckusic 			popsp(stp->entry->framesze +	/* pop local vars */
1842080Smckusick 			      sizeof(struct stack) +	/* pop stack frame */
1852080Smckusick 			      stp->entry->nargs);	/* pop parms */
1862080Smckusick 			continue;
1872080Smckusick 		case O_CALL:
1882080Smckusick 			tl = *pc.cp++;
1892080Smckusick 			tcp = base + *pc.lp++;/* calc new entry point */
1902080Smckusick 			tcp += sizeof(short);
1912080Smckusick 			tcp = base + *(long *)tcp;
1922080Smckusick 			stp = (struct stack *)pushsp(sizeof(struct stack));
1932080Smckusick 			stp->lino = _lino;	/* save lino, pc, dp */
1942080Smckusick 			stp->pc.cp = pc.cp;
1952080Smckusick 			stp->dp = _dp;
196*2109Smckusic 			_dp = &_display.frame[tl]; /* set up new display ptr */
1972080Smckusick 			pc.cp = tcp;
1982080Smckusick 			continue;
1992080Smckusick 		case O_FCALL:
2002080Smckusick 			tl = *pc.cp++;		/* tl = number of args */
2012080Smckusick 			if (tl == 0)
2022080Smckusick 				tl = *pc.lp++;
2032080Smckusick 			tfp = (struct formalrtn *)popaddr();
2042080Smckusick 			stp = (struct stack *)pushsp(sizeof(struct stack));
2052080Smckusick 			stp->lino = _lino;	/* save lino, pc, dp */
2062080Smckusick 			stp->pc.cp = pc.cp;
2072080Smckusick 			stp->dp = _dp;
2082080Smckusick 			pc.cp = tfp->entryaddr;	/* calc new entry point */
2092080Smckusick 			tpc.sp = pc.sp + 1;
2102080Smckusick 			tl -= tpc.hdrp->nargs;
2112080Smckusick 			if (tl != 0) {
2122080Smckusick 				if (tl > 0)
2132080Smckusick 					tl += sizeof(int) - 1;
2142080Smckusick 				else
2152080Smckusick 					tl -= sizeof(int) - 1;
2162080Smckusick 				ERROR(ENARGS, tl / sizeof(int));
2172080Smckusick 			}
218*2109Smckusic 			_dp = &_display.frame[tfp->cbn];/* new display ptr */
2192080Smckusick 			blkcpy(sizeof(struct disp) * tfp->cbn,
220*2109Smckusic 				&_display.frame[1], &tfp->disp[tfp->cbn]);
2212080Smckusick 			blkcpy(sizeof(struct disp) * tfp->cbn,
222*2109Smckusic 				&tfp->disp[0], &_display.frame[1]);
2232080Smckusick 			continue;
2242080Smckusick 		case O_FRTN:
2252080Smckusick 			tl = *pc.cp++;		/* tl = size of return obj */
2262080Smckusick 			if (tl == 0)
2272080Smckusick 				tl = *pc.usp++;
2282080Smckusick 			tcp = pushsp(0);
2292080Smckusick 			tfp = *(struct formalrtn **)(tcp + tl);
2302080Smckusick 			blkcpy(tl, tcp, tcp + sizeof(struct formalrtn *));
2312080Smckusick 			popsp(sizeof(struct formalrtn *));
2322080Smckusick 			blkcpy(sizeof(struct disp) * tfp->cbn,
233*2109Smckusic 				&tfp->disp[tfp->cbn], &_display.frame[1]);
2342080Smckusick 			continue;
2352080Smckusick 		case O_FSAV:
2362080Smckusick 			tfp = (struct formalrtn *)popaddr();
2372080Smckusick 			tfp->cbn = *pc.cp++;	/* blk number of routine */
2382080Smckusick 			tcp = base + *pc.lp++;/* calc new entry point */
2392080Smckusick 			tcp += sizeof(short);
2402080Smckusick 			tfp->entryaddr = base + *(long *)tcp;
2412080Smckusick 			blkcpy(sizeof(struct disp) * tfp->cbn,
242*2109Smckusic 				&_display.frame[1], &tfp->disp[0]);
2432080Smckusick 			pushaddr(tfp);
2442080Smckusick 			continue;
2452080Smckusick 		case O_SDUP2:
2462080Smckusick 			pc.cp++;
2472080Smckusick 			tl = pop2();
2482080Smckusick 			push2(tl);
2492080Smckusick 			push2(tl);
2502080Smckusick 			continue;
2512080Smckusick 		case O_SDUP4:
2522080Smckusick 			pc.cp++;
2532080Smckusick 			tl = pop4();
2542080Smckusick 			push4(tl);
2552080Smckusick 			push4(tl);
2562080Smckusick 			continue;
2572080Smckusick 		case O_TRA:
2582080Smckusick 			pc.cp++;
2592080Smckusick 			pc.cp += *pc.sp;
2602080Smckusick 			continue;
2612080Smckusick 		case O_TRA4:
2622080Smckusick 			pc.cp++;
2632080Smckusick 			pc.cp = base + *pc.lp;
2642080Smckusick 			continue;
2652080Smckusick 		case O_GOTO:
266*2109Smckusic 			tstp = _display.frame[*pc.cp++].stp; /* ptr to
267*2109Smckusic 								exit frame */
2682080Smckusick 			pc.cp = base + *pc.lp;
2692080Smckusick 			stp = _dp->stp;
2702080Smckusick 			while (tstp != stp) {
271*2109Smckusic 				if (_dp == &_display.frame[1])
2722080Smckusick 					ERROR(EGOTO); /* exiting prog ??? */
2732080Smckusick 				PCLOSE(_dp->locvars); /* close local files */
2742080Smckusick 				curfile = stp->file;  /* restore active file */
2752080Smckusick 				*_dp = stp->odisp;    /* old display entry */
2762080Smckusick 				_dp = stp->dp;	      /* restore dp */
2772080Smckusick 				stp = _dp->stp;
2782080Smckusick 			}
2792080Smckusick 			/* pop locals, stack frame, parms, and return values */
2802080Smckusick 			popsp(stp->tos - pushsp(0));
2812080Smckusick 			continue;
2822080Smckusick 		case O_LINO:
2832080Smckusick 			if (_dp->stp->tos != pushsp(0))
2842080Smckusick 				panic(PSTKNEMP);
2852080Smckusick 			_lino = *pc.cp++;	/* set line number */
2862080Smckusick 			if (_lino == 0)
2872080Smckusick 				_lino = *pc.sp++;
2882080Smckusick 			LINO();			/* inc statement count */
2892080Smckusick 			continue;
2902080Smckusick 		case O_PUSH:
2912080Smckusick 			tl = *pc.cp++;
2922080Smckusick 			if (tl == 0)
2932080Smckusick 				tl = *pc.usp++;
2942080Smckusick 			tl = (-tl + 1) & ~1;
2952080Smckusick 			tcp = pushsp(tl);
2962080Smckusick 			blkclr(tl, tcp);
2972080Smckusick 			continue;
2982080Smckusick 		case O_IF:
2992080Smckusick 			pc.cp++;
3002080Smckusick 			if (pop2())
3012080Smckusick 				pc.sp++;
3022080Smckusick 			else
3032080Smckusick 				pc.cp += *pc.sp;
3042080Smckusick 			continue;
3052080Smckusick 		case O_REL2:
3062080Smckusick 			tl = pop2();
3072080Smckusick 			tl1 = pop2();
3082080Smckusick 			goto cmplong;
3092080Smckusick 		case O_REL24:
3102080Smckusick 			tl = pop2();
3112080Smckusick 			tl1 = pop4();
3122080Smckusick 			goto cmplong;
3132080Smckusick 		case O_REL42:
3142080Smckusick 			tl = pop4();
3152080Smckusick 			tl1 = pop2();
3162080Smckusick 			goto cmplong;
3172080Smckusick 		case O_REL4:
3182080Smckusick 			tl = pop4();
3192080Smckusick 			tl1 = pop4();
3202080Smckusick 		cmplong:
3212080Smckusick 			tl2 = *pc.cp++;
3222080Smckusick 			switch (tl2) {
3232080Smckusick 			case releq:
3242080Smckusick 				push2(tl1 == tl);
3252080Smckusick 				continue;
3262080Smckusick 			case relne:
3272080Smckusick 				push2(tl1 != tl);
3282080Smckusick 				continue;
3292080Smckusick 			case rellt:
3302080Smckusick 				push2(tl1 < tl);
3312080Smckusick 				continue;
3322080Smckusick 			case relgt:
3332080Smckusick 				push2(tl1 > tl);
3342080Smckusick 				continue;
3352080Smckusick 			case relle:
3362080Smckusick 				push2(tl1 <= tl);
3372080Smckusick 				continue;
3382080Smckusick 			case relge:
3392080Smckusick 				push2(tl1 >= tl);
3402080Smckusick 				continue;
3412080Smckusick 			default:
3422080Smckusick 				panic(PSYSTEM);
3432080Smckusick 				continue;
3442080Smckusick 			}
3452080Smckusick 		case O_RELG:
3462080Smckusick 			tl2 = *pc.cp++;		/* tc has jump opcode */
3472080Smckusick 			tl = *pc.usp++;		/* tl has comparison length */
3482080Smckusick 			tl1 = (tl + 1) & ~1;	/* tl1 has arg stack length */
3492080Smckusick 			tcp = pushsp(0);	/* tcp pts to first arg */
3502080Smckusick 			switch (tl2) {
3512080Smckusick 			case releq:
3522080Smckusick 				tl = RELEQ(tl, tcp + tl1, tcp);
3532080Smckusick 				break;
3542080Smckusick 			case relne:
3552080Smckusick 				tl = RELNE(tl, tcp + tl1, tcp);
3562080Smckusick 				break;
3572080Smckusick 			case rellt:
3582080Smckusick 				tl = RELSLT(tl, tcp + tl1, tcp);
3592080Smckusick 				break;
3602080Smckusick 			case relgt:
3612080Smckusick 				tl = RELSGT(tl, tcp + tl1, tcp);
3622080Smckusick 				break;
3632080Smckusick 			case relle:
3642080Smckusick 				tl = RELSLE(tl, tcp + tl1, tcp);
3652080Smckusick 				break;
3662080Smckusick 			case relge:
3672080Smckusick 				tl = RELSGE(tl, tcp + tl1, tcp);
3682080Smckusick 				break;
3692080Smckusick 			default:
3702080Smckusick 				panic(PSYSTEM);
3712080Smckusick 				break;
3722080Smckusick 			}
3732080Smckusick 			popsp(tl1 << 1);
3742080Smckusick 			push2(tl);
3752080Smckusick 			continue;
3762080Smckusick 		case O_RELT:
3772080Smckusick 			tl2 = *pc.cp++;		/* tc has jump opcode */
3782080Smckusick 			tl1 = *pc.usp++;	/* tl1 has comparison length */
3792080Smckusick 			tcp = pushsp(0);	/* tcp pts to first arg */
3802080Smckusick 			switch (tl2) {
3812080Smckusick 			case releq:
3822080Smckusick 				tl = RELEQ(tl1, tcp + tl1, tcp);
3832080Smckusick 				break;
3842080Smckusick 			case relne:
3852080Smckusick 				tl = RELNE(tl1, tcp + tl1, tcp);
3862080Smckusick 				break;
3872080Smckusick 			case rellt:
3882080Smckusick 				tl = RELTLT(tl1, tcp + tl1, tcp);
3892080Smckusick 				break;
3902080Smckusick 			case relgt:
3912080Smckusick 				tl = RELTGT(tl1, tcp + tl1, tcp);
3922080Smckusick 				break;
3932080Smckusick 			case relle:
3942080Smckusick 				tl = RELTLE(tl1, tcp + tl1, tcp);
3952080Smckusick 				break;
3962080Smckusick 			case relge:
3972080Smckusick 				tl = RELTGE(tl1, tcp + tl1, tcp);
3982080Smckusick 				break;
3992080Smckusick 			default:
4002080Smckusick 				panic(PSYSTEM);
4012080Smckusick 				break;
4022080Smckusick 			}
4032080Smckusick 			popsp(tl1 << 1);
4042080Smckusick 			push2(tl);
4052080Smckusick 			continue;
4062080Smckusick 		case O_REL28:
4072080Smckusick 			td = pop2();
4082080Smckusick 			td1 = pop8();
4092080Smckusick 			goto cmpdbl;
4102080Smckusick 		case O_REL48:
4112080Smckusick 			td = pop4();
4122080Smckusick 			td1 = pop8();
4132080Smckusick 			goto cmpdbl;
4142080Smckusick 		case O_REL82:
4152080Smckusick 			td = pop8();
4162080Smckusick 			td1 = pop2();
4172080Smckusick 			goto cmpdbl;
4182080Smckusick 		case O_REL84:
4192080Smckusick 			td = pop8();
4202080Smckusick 			td1 = pop4();
4212080Smckusick 			goto cmpdbl;
4222080Smckusick 		case O_REL8:
4232080Smckusick 			td = pop8();
4242080Smckusick 			td1 = pop8();
4252080Smckusick 		cmpdbl:
4262080Smckusick 			switch (*pc.cp++) {
4272080Smckusick 			case releq:
4282080Smckusick 				push2(td1 == td);
4292080Smckusick 				continue;
4302080Smckusick 			case relne:
4312080Smckusick 				push2(td1 != td);
4322080Smckusick 				continue;
4332080Smckusick 			case rellt:
4342080Smckusick 				push2(td1 < td);
4352080Smckusick 				continue;
4362080Smckusick 			case relgt:
4372080Smckusick 				push2(td1 > td);
4382080Smckusick 				continue;
4392080Smckusick 			case relle:
4402080Smckusick 				push2(td1 <= td);
4412080Smckusick 				continue;
4422080Smckusick 			case relge:
4432080Smckusick 				push2(td1 >= td);
4442080Smckusick 				continue;
4452080Smckusick 			default:
4462080Smckusick 				panic(PSYSTEM);
4472080Smckusick 				continue;
4482080Smckusick 			}
4492080Smckusick 		case O_AND:
4502080Smckusick 			pc.cp++;
4512080Smckusick 			push2(pop2() & pop2());
4522080Smckusick 			continue;
4532080Smckusick 		case O_OR:
4542080Smckusick 			pc.cp++;
4552080Smckusick 			push2(pop2() | pop2());
4562080Smckusick 			continue;
4572080Smckusick 		case O_NOT:
4582080Smckusick 			pc.cp++;
4592080Smckusick 			push2(pop2() ^ 1);
4602080Smckusick 			continue;
4612080Smckusick 		case O_AS2:
4622080Smckusick 			pc.cp++;
4632080Smckusick 			tl = pop2();
4642080Smckusick 			*(short *)popaddr() = tl;
4652080Smckusick 			continue;
4662080Smckusick 		case O_AS4:
4672080Smckusick 			pc.cp++;
4682080Smckusick 			tl = pop4();
4692080Smckusick 			*(long *)popaddr() = tl;
4702080Smckusick 			continue;
4712080Smckusick 		case O_AS24:
4722080Smckusick 			pc.cp++;
4732080Smckusick 			tl = pop2();
4742080Smckusick 			*(long *)popaddr() = tl;
4752080Smckusick 			continue;
4762080Smckusick 		case O_AS42:
4772080Smckusick 			pc.cp++;
4782080Smckusick 			tl = pop4();
4792080Smckusick 			*(short *)popaddr() = tl;
4802080Smckusick 			continue;
4812080Smckusick 		case O_AS21:
4822080Smckusick 			pc.cp++;
4832080Smckusick 			tl = pop2();
4842080Smckusick 			*popaddr() = tl;
4852080Smckusick 			continue;
4862080Smckusick 		case O_AS41:
4872080Smckusick 			pc.cp++;
4882080Smckusick 			tl = pop4();
4892080Smckusick 			*popaddr() = tl;
4902080Smckusick 			continue;
4912080Smckusick 		case O_AS28:
4922080Smckusick 			pc.cp++;
4932080Smckusick 			tl = pop2();
4942080Smckusick 			*(double *)popaddr() = tl;
4952080Smckusick 			continue;
4962080Smckusick 		case O_AS48:
4972080Smckusick 			pc.cp++;
4982080Smckusick 			tl = pop4();
4992080Smckusick 			*(double *)popaddr() = tl;
5002080Smckusick 			continue;
5012080Smckusick 		case O_AS8:
5022080Smckusick 			pc.cp++;
5032080Smckusick 			td = pop8();
5042080Smckusick 			*(double *)popaddr() = td;
5052080Smckusick 			continue;
5062080Smckusick 		case O_AS:
5072080Smckusick 			tl = *pc.cp++;
5082080Smckusick 			if (tl == 0)
5092080Smckusick 				tl = *pc.usp++;
5102080Smckusick 			tl1 = (tl + 1) & ~1;
5112080Smckusick 			tcp = pushsp(0);
5122080Smckusick 			blkcpy(tl, tcp, *(char **)(tcp + tl1));
5132080Smckusick 			popsp(tl1 + sizeof(char *));
5142080Smckusick 			continue;
5152080Smckusick 		case O_INX2P2:
5162080Smckusick 			tl = *pc.cp++;		/* tl has shift amount */
5172080Smckusick 			tl1 = (pop2() - *pc.sp++) << tl;
5182080Smckusick 			pushaddr(popaddr() + tl1);
5192080Smckusick 			continue;
5202080Smckusick 		case O_INX4P2:
5212080Smckusick 			tl = *pc.cp++;		/* tl has shift amount */
5222080Smckusick 			tl1 = (pop4() - *pc.sp++) << tl;
5232080Smckusick 			pushaddr(popaddr() + tl1);
5242080Smckusick 			continue;
5252080Smckusick 		case O_INX2:
5262080Smckusick 			tl = *pc.cp++;		/* tl has element size */
5272080Smckusick 			if (tl == 0)
5282080Smckusick 				tl = *pc.usp++;
5292080Smckusick 			tl1 = pop2();		/* index */
5302080Smckusick 			tl2 = *pc.sp++;
531*2109Smckusic 			SUBSC(tl1, tl2, *pc.usp++); /* range check */
5322080Smckusick 			pushaddr(popaddr() + (tl1 - tl2) * tl);
5332080Smckusick 			continue;
5342080Smckusick 		case O_INX4:
5352080Smckusick 			tl = *pc.cp++;		/* tl has element size */
5362080Smckusick 			if (tl == 0)
5372080Smckusick 				tl = *pc.usp++;
5382080Smckusick 			tl1 = pop4();		/* index */
5392080Smckusick 			tl2 = *pc.sp++;
540*2109Smckusic 			SUBSC(tl1, tl2, *pc.usp++); /* range check */
5412080Smckusick 			pushaddr(popaddr() + (tl1 - tl2) * tl);
5422080Smckusick 			continue;
5432080Smckusick 		case O_OFF:
5442080Smckusick 			tl = *pc.cp++;
5452080Smckusick 			if (tl == 0)
5462080Smckusick 				tl = *pc.usp++;
5472080Smckusick 			push4(pop4() + tl);
5482080Smckusick 			continue;
5492080Smckusick 		case O_NIL:
5502080Smckusick 			pc.cp++;
5512080Smckusick 			NIL();
5522080Smckusick 			continue;
5532080Smckusick 		case O_ADD2:
5542080Smckusick 			pc.cp++;
5552080Smckusick 			push4(pop2() + pop2());
5562080Smckusick 			continue;
5572080Smckusick 		case O_ADD4:
5582080Smckusick 			pc.cp++;
5592080Smckusick 			push4(pop4() + pop4());
5602080Smckusick 			continue;
5612080Smckusick 		case O_ADD24:
5622080Smckusick 			pc.cp++;
5632080Smckusick 			tl = pop2();
5642080Smckusick 			push4(pop4() + tl);
5652080Smckusick 			continue;
5662080Smckusick 		case O_ADD42:
5672080Smckusick 			pc.cp++;
5682080Smckusick 			tl = pop4();
5692080Smckusick 			push4(pop2() + tl);
5702080Smckusick 			continue;
5712080Smckusick 		case O_ADD28:
5722080Smckusick 			pc.cp++;
5732080Smckusick 			tl = pop2();
5742080Smckusick 			push8(pop8() + tl);
5752080Smckusick 			continue;
5762080Smckusick 		case O_ADD48:
5772080Smckusick 			pc.cp++;
5782080Smckusick 			tl = pop4();
5792080Smckusick 			push8(pop8() + tl);
5802080Smckusick 			continue;
5812080Smckusick 		case O_ADD82:
5822080Smckusick 			pc.cp++;
5832080Smckusick 			td = pop8();
5842080Smckusick 			push8(pop2() + td);
5852080Smckusick 			continue;
5862080Smckusick 		case O_ADD84:
5872080Smckusick 			pc.cp++;
5882080Smckusick 			td = pop8();
5892080Smckusick 			push8(pop4() + td);
5902080Smckusick 			continue;
5912080Smckusick 		case O_SUB2:
5922080Smckusick 			pc.cp++;
5932080Smckusick 			tl = pop2();
5942080Smckusick 			push4(pop2() - tl);
5952080Smckusick 			continue;
5962080Smckusick 		case O_SUB4:
5972080Smckusick 			pc.cp++;
5982080Smckusick 			tl = pop4();
5992080Smckusick 			push4(pop4() - tl);
6002080Smckusick 			continue;
6012080Smckusick 		case O_SUB24:
6022080Smckusick 			pc.cp++;
6032080Smckusick 			tl = pop2();
6042080Smckusick 			push4(pop4() - tl);
6052080Smckusick 			continue;
6062080Smckusick 		case O_SUB42:
6072080Smckusick 			pc.cp++;
6082080Smckusick 			tl = pop4();
6092080Smckusick 			push4(pop2() - tl);
6102080Smckusick 			continue;
6112080Smckusick 		case O_SUB28:
6122080Smckusick 			pc.cp++;
6132080Smckusick 			tl = pop2();
6142080Smckusick 			push8(pop8() - tl);
6152080Smckusick 			continue;
6162080Smckusick 		case O_SUB48:
6172080Smckusick 			pc.cp++;
6182080Smckusick 			tl = pop4();
6192080Smckusick 			push8(pop8() - tl);
6202080Smckusick 			continue;
6212080Smckusick 		case O_SUB82:
6222080Smckusick 			pc.cp++;
6232080Smckusick 			td = pop8();
6242080Smckusick 			push8(pop2() - td);
6252080Smckusick 			continue;
6262080Smckusick 		case O_SUB84:
6272080Smckusick 			pc.cp++;
6282080Smckusick 			td = pop8();
6292080Smckusick 			push8(pop4() - td);
6302080Smckusick 			continue;
6312080Smckusick 		case O_MUL2:
6322080Smckusick 			pc.cp++;
6332080Smckusick 			push4(pop2() * pop2());
6342080Smckusick 			continue;
6352080Smckusick 		case O_MUL4:
6362080Smckusick 			pc.cp++;
6372080Smckusick 			push4(pop4() * pop4());
6382080Smckusick 			continue;
6392080Smckusick 		case O_MUL24:
6402080Smckusick 			pc.cp++;
6412080Smckusick 			tl = pop2();
6422080Smckusick 			push4(pop4() * tl);
6432080Smckusick 			continue;
6442080Smckusick 		case O_MUL42:
6452080Smckusick 			pc.cp++;
6462080Smckusick 			tl = pop4();
6472080Smckusick 			push4(pop2() * tl);
6482080Smckusick 			continue;
6492080Smckusick 		case O_MUL28:
6502080Smckusick 			pc.cp++;
6512080Smckusick 			tl = pop2();
6522080Smckusick 			push8(pop8() * tl);
6532080Smckusick 			continue;
6542080Smckusick 		case O_MUL48:
6552080Smckusick 			pc.cp++;
6562080Smckusick 			tl = pop4();
6572080Smckusick 			push8(pop8() * tl);
6582080Smckusick 			continue;
6592080Smckusick 		case O_MUL82:
6602080Smckusick 			pc.cp++;
6612080Smckusick 			td = pop8();
6622080Smckusick 			push8(pop2() * td);
6632080Smckusick 			continue;
6642080Smckusick 		case O_MUL84:
6652080Smckusick 			pc.cp++;
6662080Smckusick 			td = pop8();
6672080Smckusick 			push8(pop4() * td);
6682080Smckusick 			continue;
6692080Smckusick 		case O_ABS2:
6702080Smckusick 		case O_ABS4:
6712080Smckusick 			pc.cp++;
6722080Smckusick 			tl = pop4();
6732080Smckusick 			push4(tl >= 0 ? tl : -tl);
6742080Smckusick 			continue;
6752080Smckusick 		case O_ABS8:
6762080Smckusick 			pc.cp++;
6772080Smckusick 			td = pop8();
6782080Smckusick 			push8(td >= 0.0 ? td : -td);
6792080Smckusick 			continue;
6802080Smckusick 		case O_NEG2:
6812080Smckusick 			pc.cp++;
6822080Smckusick 			push4(-pop2());
6832080Smckusick 			continue;
6842080Smckusick 		case O_NEG4:
6852080Smckusick 			pc.cp++;
6862080Smckusick 			push4(-pop4());
6872080Smckusick 			continue;
6882080Smckusick 		case O_NEG8:
6892080Smckusick 			pc.cp++;
6902080Smckusick 			push8(-pop8());
6912080Smckusick 			continue;
6922080Smckusick 		case O_DIV2:
6932080Smckusick 			pc.cp++;
6942080Smckusick 			tl = pop2();
6952080Smckusick 			push4(pop2() / tl);
6962080Smckusick 			continue;
6972080Smckusick 		case O_DIV4:
6982080Smckusick 			pc.cp++;
6992080Smckusick 			tl = pop4();
7002080Smckusick 			push4(pop4() / tl);
7012080Smckusick 			continue;
7022080Smckusick 		case O_DIV24:
7032080Smckusick 			pc.cp++;
7042080Smckusick 			tl = pop2();
7052080Smckusick 			push4(pop4() / tl);
7062080Smckusick 			continue;
7072080Smckusick 		case O_DIV42:
7082080Smckusick 			pc.cp++;
7092080Smckusick 			tl = pop4();
7102080Smckusick 			push4(pop2() / tl);
7112080Smckusick 			continue;
7122080Smckusick 		case O_MOD2:
7132080Smckusick 			pc.cp++;
7142080Smckusick 			tl = pop2();
7152080Smckusick 			push4(pop2() % tl);
7162080Smckusick 			continue;
7172080Smckusick 		case O_MOD4:
7182080Smckusick 			pc.cp++;
7192080Smckusick 			tl = pop4();
7202080Smckusick 			push4(pop4() % tl);
7212080Smckusick 			continue;
7222080Smckusick 		case O_MOD24:
7232080Smckusick 			pc.cp++;
7242080Smckusick 			tl = pop2();
7252080Smckusick 			push4(pop4() % tl);
7262080Smckusick 			continue;
7272080Smckusick 		case O_MOD42:
7282080Smckusick 			pc.cp++;
7292080Smckusick 			tl = pop4();
7302080Smckusick 			push4(pop2() % tl);
7312080Smckusick 			continue;
7322080Smckusick 		case O_ADD8:
7332080Smckusick 			pc.cp++;
7342080Smckusick 			push8(pop8() + pop8());
7352080Smckusick 			continue;
7362080Smckusick 		case O_SUB8:
7372080Smckusick 			pc.cp++;
7382080Smckusick 			td = pop8();
7392080Smckusick 			push8(pop8() - td);
7402080Smckusick 			continue;
7412080Smckusick 		case O_MUL8:
7422080Smckusick 			pc.cp++;
7432080Smckusick 			push8(pop8() * pop8());
7442080Smckusick 			continue;
7452080Smckusick 		case O_DVD8:
7462080Smckusick 			pc.cp++;
7472080Smckusick 			td = pop8();
7482080Smckusick 			push8(pop8() / td);
7492080Smckusick 			continue;
7502080Smckusick 		case O_STOI:
7512080Smckusick 			pc.cp++;
7522080Smckusick 			push4(pop2());
7532080Smckusick 			continue;
7542080Smckusick 		case O_STOD:
7552080Smckusick 			pc.cp++;
7562080Smckusick 			td = pop2();
7572080Smckusick 			push8(td);
7582080Smckusick 			continue;
7592080Smckusick 		case O_ITOD:
7602080Smckusick 			pc.cp++;
7612080Smckusick 			td = pop4();
7622080Smckusick 			push8(td);
7632080Smckusick 			continue;
7642080Smckusick 		case O_ITOS:
7652080Smckusick 			pc.cp++;
7662080Smckusick 			push2(pop4());
7672080Smckusick 			continue;
7682080Smckusick 		case O_DVD2:
7692080Smckusick 			pc.cp++;
7702080Smckusick 			td = pop2();
7712080Smckusick 			push8(pop2() / td);
7722080Smckusick 			continue;
7732080Smckusick 		case O_DVD4:
7742080Smckusick 			pc.cp++;
7752080Smckusick 			td = pop4();
7762080Smckusick 			push8(pop4() / td);
7772080Smckusick 			continue;
7782080Smckusick 		case O_DVD24:
7792080Smckusick 			pc.cp++;
7802080Smckusick 			td = pop2();
7812080Smckusick 			push8(pop4() / td);
7822080Smckusick 			continue;
7832080Smckusick 		case O_DVD42:
7842080Smckusick 			pc.cp++;
7852080Smckusick 			td = pop4();
7862080Smckusick 			push8(pop2() / td);
7872080Smckusick 			continue;
7882080Smckusick 		case O_DVD28:
7892080Smckusick 			pc.cp++;
7902080Smckusick 			td = pop2();
7912080Smckusick 			push8(pop8() / td);
7922080Smckusick 			continue;
7932080Smckusick 		case O_DVD48:
7942080Smckusick 			pc.cp++;
7952080Smckusick 			td = pop4();
7962080Smckusick 			push8(pop8() / td);
7972080Smckusick 			continue;
7982080Smckusick 		case O_DVD82:
7992080Smckusick 			pc.cp++;
8002080Smckusick 			td = pop8();
8012080Smckusick 			push8(pop2() / td);
8022080Smckusick 			continue;
8032080Smckusick 		case O_DVD84:
8042080Smckusick 			pc.cp++;
8052080Smckusick 			td = pop8();
8062080Smckusick 			push8(pop4() / td);
8072080Smckusick 			continue;
8082080Smckusick 		case O_RV1:
809*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8102080Smckusick 			push2(*(tcp + *pc.sp++));
8112080Smckusick 			continue;
8122080Smckusick 		case O_RV14:
813*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8142080Smckusick 			push4(*(tcp + *pc.sp++));
8152080Smckusick 			continue;
8162080Smckusick 		case O_RV2:
817*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8182080Smckusick 			push2(*(short *)(tcp + *pc.sp++));
8192080Smckusick 			continue;
8202080Smckusick 		case O_RV24:
821*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8222080Smckusick 			push4(*(short *)(tcp + *pc.sp++));
8232080Smckusick 			continue;
8242080Smckusick 		case O_RV4:
825*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8262080Smckusick 			push4(*(long *)(tcp + *pc.sp++));
8272080Smckusick 			continue;
8282080Smckusick 		case O_RV8:
829*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8302080Smckusick 			push8(*(double *)(tcp + *pc.sp++));
8312080Smckusick 			continue;
8322080Smckusick 		case O_RV:
833*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8342080Smckusick 			tcp += *pc.sp++;
8352080Smckusick 			tl = *pc.usp++;
8362080Smckusick 			tcp1 = pushsp(tl);
8372080Smckusick 			blkcpy(tl, tcp, tcp1);
8382080Smckusick 			continue;
8392080Smckusick 		case O_LV:
840*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8412080Smckusick 			pushaddr(tcp + *pc.sp++);
8422080Smckusick 			continue;
8432080Smckusick 		case O_LRV1:
844*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8452080Smckusick 			push2(*(tcp + *pc.lp++));
8462080Smckusick 			continue;
8472080Smckusick 		case O_LRV14:
848*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8492080Smckusick 			push4(*(tcp + *pc.lp++));
8502080Smckusick 			continue;
8512080Smckusick 		case O_LRV2:
852*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8532080Smckusick 			push2(*(short *)(tcp + *pc.lp++));
8542080Smckusick 			continue;
8552080Smckusick 		case O_LRV24:
856*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8572080Smckusick 			push4(*(short *)(tcp + *pc.lp++));
8582080Smckusick 			continue;
8592080Smckusick 		case O_LRV4:
860*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8612080Smckusick 			push4(*(long *)(tcp + *pc.lp++));
8622080Smckusick 			continue;
8632080Smckusick 		case O_LRV8:
864*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8652080Smckusick 			push8(*(double *)(tcp + *pc.lp++));
8662080Smckusick 			continue;
8672080Smckusick 		case O_LRV:
868*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8692080Smckusick 			tcp += *pc.lp++;
8702080Smckusick 			tl = *pc.usp++;
8712080Smckusick 			tcp1 = pushsp(tl);
8722080Smckusick 			blkcpy(tl, tcp, tcp1);
8732080Smckusick 			continue;
8742080Smckusick 		case O_LLV:
875*2109Smckusic 			tcp = _display.raw[*pc.ucp++];
8762080Smckusick 			pushaddr(tcp + *pc.lp++);
8772080Smckusick 			continue;
8782080Smckusick 		case O_IND1:
8792080Smckusick 			pc.cp++;
8802080Smckusick 			push2(*popaddr());
8812080Smckusick 			continue;
8822080Smckusick 		case O_IND14:
8832080Smckusick 			pc.cp++;
8842080Smckusick 			push4(*popaddr());
8852080Smckusick 			continue;
8862080Smckusick 		case O_IND2:
8872080Smckusick 			pc.cp++;
8882080Smckusick 			push2(*(short *)(popaddr()));
8892080Smckusick 			continue;
8902080Smckusick 		case O_IND24:
8912080Smckusick 			pc.cp++;
8922080Smckusick 			push4(*(short *)(popaddr()));
8932080Smckusick 			continue;
8942080Smckusick 		case O_IND4:
8952080Smckusick 			pc.cp++;
8962080Smckusick 			push4(*(long *)(popaddr()));
8972080Smckusick 			continue;
8982080Smckusick 		case O_IND8:
8992080Smckusick 			pc.cp++;
9002080Smckusick 			push8(*(double *)(popaddr()));
9012080Smckusick 			continue;
9022080Smckusick 		case O_IND:
9032080Smckusick 			tl = *pc.cp++;
9042080Smckusick 			if (tl == 0)
9052080Smckusick 				tl = *pc.usp++;
9062080Smckusick 			tcp = popaddr();
9072080Smckusick 			tcp1 = pushsp((tl + 1) & ~1);
9082080Smckusick 			blkcpy(tl, tcp, tcp1);
9092080Smckusick 			continue;
9102080Smckusick 		case O_CON1:
9112080Smckusick 			push2(*pc.cp++);
9122080Smckusick 			continue;
9132080Smckusick 		case O_CON14:
9142080Smckusick 			push4(*pc.cp++);
9152080Smckusick 			continue;
9162080Smckusick 		case O_CON2:
9172080Smckusick 			pc.cp++;
9182080Smckusick 			push2(*pc.sp++);
9192080Smckusick 			continue;
9202080Smckusick 		case O_CON24:
9212080Smckusick 			pc.cp++;
9222080Smckusick 			push4(*pc.sp++);
9232080Smckusick 			continue;
9242080Smckusick 		case O_CON4:
9252080Smckusick 			pc.cp++;
9262080Smckusick 			push4(*pc.lp++);
9272080Smckusick 			continue;
9282080Smckusick 		case O_CON8:
9292080Smckusick 			pc.cp++;
9302080Smckusick 			push8(*pc.dp++);
9312080Smckusick 			continue;
9322080Smckusick 		case O_CON:
9332080Smckusick 			tl = *pc.cp++;
9342080Smckusick 			if (tl == 0)
9352080Smckusick 				tl = *pc.usp++;
9362080Smckusick 			tl = (tl + 1) & ~1;
9372080Smckusick 			tcp = pushsp(tl);
9382080Smckusick 			blkcpy(tl, pc.cp, tcp);
9392080Smckusick 			pc.cp += tl;
9402080Smckusick 			continue;
9412080Smckusick 		case O_LVCON:
9422080Smckusick 			tl = *pc.cp++;
9432080Smckusick 			if (tl == 0)
9442080Smckusick 				tl = *pc.usp++;
9452080Smckusick 			tl = (tl + 1) & ~1;
9462080Smckusick 			pushaddr(pc.cp);
9472080Smckusick 			pc.cp += tl;
9482080Smckusick 			continue;
9492080Smckusick 		case O_RANG2:
9502080Smckusick 			tl = *pc.cp++;
9512080Smckusick 			if (tl == 0)
9522080Smckusick 				tl = *pc.sp++;
9532080Smckusick 			tl1 = pop2();
9542080Smckusick 			push2(RANG4(tl1, tl, *pc.sp++));
9552080Smckusick 			continue;
9562080Smckusick 		case O_RANG42:
9572080Smckusick 			tl = *pc.cp++;
9582080Smckusick 			if (tl == 0)
9592080Smckusick 				tl = *pc.sp++;
9602080Smckusick 			tl1 = pop4();
9612080Smckusick 			push4(RANG4(tl1, tl, *pc.sp++));
9622080Smckusick 			continue;
9632080Smckusick 		case O_RSNG2:
9642080Smckusick 			tl = *pc.cp++;
9652080Smckusick 			if (tl == 0)
9662080Smckusick 				tl = *pc.sp++;
9672080Smckusick 			tl1 = pop2();
9682080Smckusick 			push2(RSNG4(tl1, tl));
9692080Smckusick 			continue;
9702080Smckusick 		case O_RSNG42:
9712080Smckusick 			tl = *pc.cp++;
9722080Smckusick 			if (tl == 0)
9732080Smckusick 				tl = *pc.sp++;
9742080Smckusick 			tl1 = pop4();
9752080Smckusick 			push4(RSNG4(tl1, tl));
9762080Smckusick 			continue;
9772080Smckusick 		case O_RANG4:
9782080Smckusick 			pc.cp++;
9792080Smckusick 			tl = *pc.lp++;
9802080Smckusick 			tl1 = pop4();
9812080Smckusick 			push4(RANG4(tl1, tl, *pc.lp++));
9822080Smckusick 			continue;
9832080Smckusick 		case O_RANG24:
9842080Smckusick 			pc.cp++;
9852080Smckusick 			tl = *pc.lp++;
9862080Smckusick 			tl1 = pop2();
9872080Smckusick 			push2(RANG4(tl1, tl, *pc.lp++));
9882080Smckusick 			continue;
9892080Smckusick 		case O_RSNG4:
9902080Smckusick 			pc.cp++;
9912080Smckusick 			tl = pop4();
9922080Smckusick 			push4(RSNG4(tl, *pc.lp++));
9932080Smckusick 			continue;
9942080Smckusick 		case O_RSNG24:
9952080Smckusick 			pc.cp++;
9962080Smckusick 			tl = pop2();
9972080Smckusick 			push2(RSNG4(tl, *pc.lp++));
9982080Smckusick 			continue;
9992080Smckusick 		case O_STLIM:
10002080Smckusick 			pc.cp++;
10012080Smckusick 			_stlim = pop4();
10022080Smckusick 			_stcnt--;
10032080Smckusick 			LINO();
10042080Smckusick 			continue;
10052080Smckusick 		case O_LLIMIT:
10062080Smckusick 			pc.cp++;
10072080Smckusick 			LLIMIT();
10082080Smckusick 			popargs(2);
10092080Smckusick 			continue;
10102080Smckusick 		case O_BUFF:
10112080Smckusick 			BUFF(*pc.cp++);
10122080Smckusick 			continue;
10132080Smckusick 		case O_HALT:
10142080Smckusick 			pc.cp++;
10152080Smckusick 			panic(PHALT);
10162080Smckusick 			continue;
10172080Smckusick 		case O_PXPBUF:
10182080Smckusick 			pc.cp++;
10192080Smckusick 			_cntrs = *pc.lp++;
10202080Smckusick 			_rtns = *pc.lp++;
10212080Smckusick 			_pcpcount = (long *)calloc(_cntrs + 1, sizeof(long));
10222080Smckusick 			continue;
10232080Smckusick 		case O_COUNT:
10242080Smckusick 			pc.cp++;
10252080Smckusick 			_pcpcount[*pc.usp++]++;
10262080Smckusick 			continue;
10272080Smckusick 		case O_CASE1OP:
10282080Smckusick 			tl = *pc.cp++;		/* tl = number of cases */
10292080Smckusick 			if (tl == 0)
10302080Smckusick 				tl = *pc.usp++;
10312080Smckusick 			tsp = pc.sp + tl;	/* ptr to end of jump table */
10322080Smckusick 			tcp = (char *)tsp;	/* tcp = ptr to case values */
10332080Smckusick 			tl1 = pop2();		/* tl1 = element to find */
10342080Smckusick 			for(; tl > 0; tl--)	/* look for element */
10352080Smckusick 				if (tl1 == *tcp++)
10362080Smckusick 					break;
10372080Smckusick 			if (tl == 0)		/* default case => error */
10382080Smckusick 				ERROR(ECASE, tl2);
10392080Smckusick 			pc.cp += *(tsp - tl);
10402080Smckusick 			continue;
10412080Smckusick 		case O_CASE2OP:
10422080Smckusick 			tl = *pc.cp++;		/* tl = number of cases */
10432080Smckusick 			if (tl == 0)
10442080Smckusick 				tl = *pc.usp++;
10452080Smckusick 			tsp = pc.sp + tl;	/* ptr to end of jump table */
10462080Smckusick 			tsp1 = tsp;		/* tsp1 = ptr to case values */
10472080Smckusick 			tl1 = (unsigned short)pop2();/* tl1 = element to find */
10482080Smckusick 			for(; tl > 0; tl--)	/* look for element */
10492080Smckusick 				if (tl1 == *tsp1++)
10502080Smckusick 					break;
10512080Smckusick 			if (tl == 0)		/* default case => error */
10522080Smckusick 				ERROR(ECASE, tl2);
10532080Smckusick 			pc.cp += *(tsp - tl);
10542080Smckusick 			continue;
10552080Smckusick 		case O_CASE4OP:
10562080Smckusick 			tl = *pc.cp++;		/* tl = number of cases */
10572080Smckusick 			if (tl == 0)
10582080Smckusick 				tl = *pc.usp++;
10592080Smckusick 			tsp = pc.sp + tl;	/* ptr to end of jump table */
10602080Smckusick 			tlp = (long *)tsp;	/* tlp = ptr to case values */
10612080Smckusick 			tl1 = pop4();		/* tl1 = element to find */
10622080Smckusick 			for(; tl > 0; tl--)	/* look for element */
10632080Smckusick 				if (tl1 == *tlp++)
10642080Smckusick 					break;
10652080Smckusick 			if (tl == 0)		/* default case => error */
10662080Smckusick 				ERROR(ECASE, tl2);
10672080Smckusick 			pc.cp += *(tsp - tl);
10682080Smckusick 			continue;
10692080Smckusick 		case O_ADDT:
10702080Smckusick 			tl = *pc.cp++;		/* tl has comparison length */
10712080Smckusick 			if (tl == 0)
10722080Smckusick 				tl = *pc.usp++;
10732080Smckusick 			tcp = pushsp(0);	/* tcp pts to first arg */
10742080Smckusick 			ADDT(tcp + tl, tcp + tl, tcp, tl >> 2);
10752080Smckusick 			popsp(tl);
10762080Smckusick 			continue;
10772080Smckusick 		case O_SUBT:
10782080Smckusick 			tl = *pc.cp++;		/* tl has comparison length */
10792080Smckusick 			if (tl == 0)
10802080Smckusick 				tl = *pc.usp++;
10812080Smckusick 			tcp = pushsp(0);	/* tcp pts to first arg */
10822080Smckusick 			SUBT(tcp + tl, tcp + tl, tcp, tl >> 2);
10832080Smckusick 			popsp(tl);
10842080Smckusick 			continue;
10852080Smckusick 		case O_MULT:
10862080Smckusick 			tl = *pc.cp++;		/* tl has comparison length */
10872080Smckusick 			if (tl == 0)
10882080Smckusick 				tl = *pc.usp++;
10892080Smckusick 			tcp = pushsp(0);	/* tcp pts to first arg */
10902080Smckusick 			MULT(tcp + tl, tcp + tl, tcp, tl >> 2);
10912080Smckusick 			popsp(tl);
10922080Smckusick 			continue;
10932080Smckusick 		case O_INCT:
10942080Smckusick 			tl = *pc.cp++;		/* tl has number of args */
10952080Smckusick 			if (tl == 0)
10962080Smckusick 				tl = *pc.usp++;
10972080Smckusick 			tl1 = INCT();
10982080Smckusick 			popargs(tl);
10992080Smckusick 			push2(tl1);
11002080Smckusick 			continue;
11012080Smckusick 		case O_CTTOT:
11022080Smckusick 			tl = *pc.cp++;		/* tl has number of args */
11032080Smckusick 			if (tl == 0)
11042080Smckusick 				tl = *pc.usp++;
11052080Smckusick 			tl1 = tl * sizeof(long);
11062080Smckusick 			tcp = pushsp(0) + tl1;	/* tcp pts to result space */
11072080Smckusick 			CTTOT(tcp);
11082080Smckusick 			popargs(tl);
11092080Smckusick 			continue;
11102080Smckusick 		case O_CARD:
11112080Smckusick 			tl = *pc.cp++;		/* tl has comparison length */
11122080Smckusick 			if (tl == 0)
11132080Smckusick 				tl = *pc.usp++;
11142080Smckusick 			tcp = pushsp(0);	/* tcp pts to set */
11152080Smckusick 			tl1 = CARD(tcp, tl);
11162080Smckusick 			popsp(tl);
11172080Smckusick 			push2(tl1);
11182080Smckusick 			continue;
11192080Smckusick 		case O_IN:
11202080Smckusick 			tl = *pc.cp++;		/* tl has comparison length */
11212080Smckusick 			if (tl == 0)
11222080Smckusick 				tl = *pc.usp++;
11232080Smckusick 			tl1 = pop4();		/* tl1 is the element */
11242080Smckusick 			tcp = pushsp(0);	/* tcp pts to set */
11252080Smckusick 			tl2 = *pc.usp++;	/* lower bound */
11262080Smckusick 			tl1 = IN(tl1, tl2, *pc.usp++, tcp);
11272080Smckusick 			popsp(tl);
11282080Smckusick 			push2(tl1);
11292080Smckusick 			continue;
11302080Smckusick 		case O_ASRT:
11312080Smckusick 			pc.cp++;
1132*2109Smckusic 			ASRT(pop2(), "");
11332080Smckusick 			continue;
11342080Smckusick 		case O_FOR1U:
11352080Smckusick 			pc.cp++;
11362080Smckusick 			tcp = (char *)pop4();	/* tcp = ptr to index var */
11372080Smckusick 			if (*tcp < pop4()) {	/* still going up */
11382080Smckusick 				*tcp += 1;	/* inc index var */
11392080Smckusick 				pc.cp += *pc.sp;/* return to top of loop */
11402080Smckusick 				continue;
11412080Smckusick 			}
11422080Smckusick 			pc.sp++;		/* else fall through */
11432080Smckusick 			continue;
11442080Smckusick 		case O_FOR2U:
11452080Smckusick 			pc.cp++;
11462080Smckusick 			tsp = (short *)pop4();	/* tsp = ptr to index var */
11472080Smckusick 			if (*tsp < pop4()) {	/* still going up */
11482080Smckusick 				*tsp += 1;	/* inc index var */
11492080Smckusick 				pc.cp += *pc.sp;/* return to top of loop */
11502080Smckusick 				continue;
11512080Smckusick 			}
11522080Smckusick 			pc.sp++;		/* else fall through */
11532080Smckusick 			continue;
11542080Smckusick 		case O_FOR4U:
11552080Smckusick 			pc.cp++;
11562080Smckusick 			tlp = (long *)pop4();	/* tlp = ptr to index var */
11572080Smckusick 			if (*tlp < pop4()) {	/* still going up */
11582080Smckusick 				*tlp += 1;	/* inc index var */
11592080Smckusick 				pc.cp += *pc.sp;/* return to top of loop */
11602080Smckusick 				continue;
11612080Smckusick 			}
11622080Smckusick 			pc.sp++;		/* else fall through */
11632080Smckusick 			continue;
11642080Smckusick 		case O_FOR1D:
11652080Smckusick 			pc.cp++;
11662080Smckusick 			tcp = (char *)pop4();	/* tcp = ptr to index var */
11672080Smckusick 			if (*tcp > pop4()) {	/* still going down */
11682080Smckusick 				*tcp -= 1;	/* dec index var */
11692080Smckusick 				pc.cp += *pc.sp;/* return to top of loop */
11702080Smckusick 				continue;
11712080Smckusick 			}
11722080Smckusick 			pc.sp++;		/* else fall through */
11732080Smckusick 			continue;
11742080Smckusick 		case O_FOR2D:
11752080Smckusick 			pc.cp++;
11762080Smckusick 			tsp = (short *)pop4();	/* tsp = ptr to index var */
11772080Smckusick 			if (*tsp > pop4()) {	/* still going down */
11782080Smckusick 				*tsp -= 1;	/* dec index var */
11792080Smckusick 				pc.cp += *pc.sp;/* return to top of loop */
11802080Smckusick 				continue;
11812080Smckusick 			}
11822080Smckusick 			pc.sp++;		/* else fall through */
11832080Smckusick 			continue;
11842080Smckusick 		case O_FOR4D:
11852080Smckusick 			pc.cp++;
11862080Smckusick 			tlp = (long *)pop4();	/* tlp = ptr to index var */
11872080Smckusick 			if (*tlp > pop4()) {	/* still going down */
11882080Smckusick 				*tlp -= 1;	/* dec index var */
11892080Smckusick 				pc.cp += *pc.sp;/* return to top of loop */
11902080Smckusick 				continue;
11912080Smckusick 			}
11922080Smckusick 			pc.sp++;		/* else fall through */
11932080Smckusick 			continue;
11942080Smckusick 		case O_READE:
11952080Smckusick 			pc.cp++;
11962080Smckusick 			push2(READE(curfile, base + *pc.lp++));
11972080Smckusick 			continue;
11982080Smckusick 		case O_READ4:
11992080Smckusick 			pc.cp++;
12002080Smckusick 			push4(READ4(curfile));
12012080Smckusick 			continue;
12022080Smckusick 		case O_READC:
12032080Smckusick 			pc.cp++;
12042080Smckusick 			push2(READC(curfile));
12052080Smckusick 			continue;
12062080Smckusick 		case O_READ8:
12072080Smckusick 			pc.cp++;
12082080Smckusick 			push8(READ8(curfile));
12092080Smckusick 			continue;
12102080Smckusick 		case O_READLN:
12112080Smckusick 			pc.cp++;
12122080Smckusick 			READLN(curfile);
12132080Smckusick 			continue;
12142080Smckusick 		case O_EOF:
12152080Smckusick 			pc.cp++;
12162080Smckusick 			push2(TEOF(popaddr()));
12172080Smckusick 			continue;
12182080Smckusick 		case O_EOLN:
12192080Smckusick 			pc.cp++;
12202080Smckusick 			push2(TEOLN(popaddr()));
12212080Smckusick 			continue;
12222080Smckusick 		case O_WRITEC:
12232080Smckusick 			pc.cp++;
12242080Smckusick 			WRITEC(curfile);
12252080Smckusick 			popargs(2);
12262080Smckusick 			continue;
12272080Smckusick 		case O_WRITES:
12282080Smckusick 			pc.cp++;
12292080Smckusick 			WRITES(curfile);
12302080Smckusick 			popargs(4);
12312080Smckusick 			continue;
12322080Smckusick 		case O_WRITEF:
12332080Smckusick 			WRITEF(curfile);
12342080Smckusick 			popargs(*pc.cp++);
12352080Smckusick 			continue;
12362080Smckusick 		case O_WRITLN:
12372080Smckusick 			pc.cp++;
12382080Smckusick 			WRITLN(curfile);
12392080Smckusick 			continue;
12402080Smckusick 		case O_PAGE:
12412080Smckusick 			pc.cp++;
12422080Smckusick 			PAGE(curfile);
12432080Smckusick 			continue;
12442080Smckusick 		case O_NAM:
12452080Smckusick 			pc.cp++;
12462080Smckusick 			tl = pop4();
12472080Smckusick 			pushaddr(NAM(tl, base + *pc.lp++));
12482080Smckusick 			continue;
12492080Smckusick 		case O_MAX:
12502080Smckusick 			tl = *pc.cp++;
12512080Smckusick 			if (tl == 0)
12522080Smckusick 				tl = *pc.usp++;
12532080Smckusick 			tl1 = pop4();
12542080Smckusick 			push4(MAX(tl1, tl, *pc.usp++));
12552080Smckusick 			continue;
12562080Smckusick 		case O_MIN:
12572080Smckusick 			tl = *pc.cp++;
12582080Smckusick 			if (tl == 0)
12592080Smckusick 				tl = *pc.usp++;
12602080Smckusick 			tl1 = pop4();
12612080Smckusick 			push4(tl1 < tl ? tl1 : tl);
12622080Smckusick 			continue;
12632080Smckusick 		case O_UNIT:
12642080Smckusick 			pc.cp++;
12652080Smckusick 			curfile = UNIT(popaddr());
12662080Smckusick 			continue;
12672080Smckusick 		case O_UNITINP:
12682080Smckusick 			pc.cp++;
12692080Smckusick 			curfile = INPUT;
12702080Smckusick 			continue;
12712080Smckusick 		case O_UNITOUT:
12722080Smckusick 			pc.cp++;
12732080Smckusick 			curfile = OUTPUT;
12742080Smckusick 			continue;
12752080Smckusick 		case O_MESSAGE:
12762080Smckusick 			pc.cp++;
12772080Smckusick 			PFLUSH();
12782080Smckusick 			curfile = ERR;
12792080Smckusick 			continue;
1280*2109Smckusic 		case O_PUT:
1281*2109Smckusic 			pc.cp++;
1282*2109Smckusic 			PUT(curfile);
1283*2109Smckusic 			continue;
12842080Smckusick 		case O_GET:
12852080Smckusick 			pc.cp++;
12862080Smckusick 			GET(curfile);
12872080Smckusick 			continue;
12882080Smckusick 		case O_FNIL:
12892080Smckusick 			pc.cp++;
12902080Smckusick 			pushaddr(FNIL(popaddr()));
12912080Smckusick 			continue;
12922080Smckusick 		case O_DEFNAME:
12932080Smckusick 			pc.cp++;
12942080Smckusick 			DEFNAME();
12952080Smckusick 			popargs(4);
12962080Smckusick 			continue;
12972080Smckusick 		case O_RESET:
12982080Smckusick 			pc.cp++;
12992080Smckusick 			RESET();
13002080Smckusick 			popargs(4);
13012080Smckusick 			continue;
13022080Smckusick 		case O_REWRITE:
13032080Smckusick 			pc.cp++;
13042080Smckusick 			REWRITE();
13052080Smckusick 			popargs(4);
13062080Smckusick 			continue;
13072080Smckusick 		case O_FILE:
13082080Smckusick 			pc.cp++;
13092080Smckusick 			pushaddr(ACTFILE(curfile));
13102080Smckusick 			continue;
13112080Smckusick 		case O_REMOVE:
13122080Smckusick 			pc.cp++;
13132080Smckusick 			REMOVE();
13142080Smckusick 			popargs(2);
13152080Smckusick 			continue;
13162080Smckusick 		case O_FLUSH:
13172080Smckusick 			pc.cp++;
13182080Smckusick 			FLUSH();
13192080Smckusick 			popargs(1);
13202080Smckusick 			continue;
13212080Smckusick 		case O_PACK:
13222080Smckusick 			pc.cp++;
13232080Smckusick 			PACK();
13242080Smckusick 			popargs(7);
13252080Smckusick 			continue;
13262080Smckusick 		case O_UNPACK:
13272080Smckusick 			pc.cp++;
13282080Smckusick 			UNPACK();
13292080Smckusick 			popargs(7);
13302080Smckusick 			continue;
13312080Smckusick 		case O_ARGC:
13322080Smckusick 			pc.cp++;
13332080Smckusick 			push4(_argc);
13342080Smckusick 			continue;
13352080Smckusick 		case O_ARGV:
13362080Smckusick 			tl = *pc.cp++;		/* tl = size of char array */
13372080Smckusick 			if (tl == 0)
13382080Smckusick 				tl = *pc.usp++;
13392080Smckusick 			tcp = popaddr();	/* tcp = addr of char array */
13402080Smckusick 			tl1 = pop4();		/* tl1 = argv subscript */
13412080Smckusick 			ARGV(tl1, tcp, tl);
13422080Smckusick 			continue;
13432080Smckusick 		case O_CLCK:
13442080Smckusick 			pc.cp++;
13452080Smckusick 			push4(CLCK());
13462080Smckusick 			continue;
13472080Smckusick 		case O_WCLCK:
13482080Smckusick 			pc.cp++;
13492080Smckusick 			push4(time(0));
13502080Smckusick 			continue;
13512080Smckusick 		case O_SCLCK:
13522080Smckusick 			pc.cp++;
13532080Smckusick 			push4(SCLCK());
13542080Smckusick 			continue;
13552080Smckusick 		case O_DISPOSE:
13562080Smckusick 			tl = *pc.cp++;		/* tl = size being disposed */
13572080Smckusick 			if (tl == 0)
13582080Smckusick 				tl = *pc.usp++;
13592080Smckusick 			tcp = popaddr();	/* ptr to ptr being disposed */
13602080Smckusick 			DISPOSE(tcp, tl);
13612080Smckusick 			*(char **)tcp = (char *)0;
13622080Smckusick 			continue;
13632080Smckusick 		case O_NEW:
13642080Smckusick 			tl = *pc.cp++;		/* tl = size being new'ed */
13652080Smckusick 			if (tl == 0)
13662080Smckusick 				tl = *pc.usp++;
13672080Smckusick 			tcp = popaddr();	/* ptr to ptr being new'ed */
13682080Smckusick 			NEWZ(tcp, tl);
13692080Smckusick 			continue;
13702080Smckusick 		case O_DATE:
13712080Smckusick 			pc.cp++;
13722080Smckusick 			DATE(popaddr());
13732080Smckusick 			continue;
13742080Smckusick 		case O_TIME:
13752080Smckusick 			pc.cp++;
13762080Smckusick 			TIME(popaddr());
13772080Smckusick 			continue;
13782080Smckusick 		case O_UNDEF:
13792080Smckusick 			pc.cp++;
13802080Smckusick 			pop8();
13812080Smckusick 			push2(0);
13822080Smckusick 			continue;
13832080Smckusick 		case O_ATAN:
13842080Smckusick 			pc.cp++;
13852080Smckusick 			push8(atan(pop8()));
13862080Smckusick 			continue;
13872080Smckusick 		case O_COS:
13882080Smckusick 			pc.cp++;
13892080Smckusick 			push8(cos(pop8()));
13902080Smckusick 			continue;
13912080Smckusick 		case O_EXP:
13922080Smckusick 			pc.cp++;
13932080Smckusick 			push8(exp(pop8()));
13942080Smckusick 			continue;
13952080Smckusick 		case O_LN:
13962080Smckusick 			pc.cp++;
13972080Smckusick 			push8(LN(pop8()));
13982080Smckusick 			continue;
13992080Smckusick 		case O_SIN:
14002080Smckusick 			pc.cp++;
14012080Smckusick 			push8(sin(pop8()));
14022080Smckusick 			continue;
14032080Smckusick 		case O_SQRT:
14042080Smckusick 			pc.cp++;
14052080Smckusick 			push8(SQRT(pop8()));
14062080Smckusick 			continue;
14072080Smckusick 		case O_CHR2:
14082080Smckusick 		case O_CHR4:
14092080Smckusick 			pc.cp++;
14102080Smckusick 			push2(CHR(pop4()));
14112080Smckusick 			continue;
14122080Smckusick 		case O_ODD2:
14132080Smckusick 		case O_ODD4:
14142080Smckusick 			pc.cp++;
14152080Smckusick 			push2(pop4() & 1);
14162080Smckusick 			continue;
14172080Smckusick 		case O_SUCC2:
1418*2109Smckusic 			tl = *pc.cp++;
1419*2109Smckusic 			if (tl == 0)
1420*2109Smckusic 				tl = *pc.sp++;
1421*2109Smckusic 			tl1 = pop4();
1422*2109Smckusic 			push2(SUCC(tl1, tl, *pc.sp++));
14232080Smckusick 			continue;
14242080Smckusick 		case O_SUCC24:
1425*2109Smckusic 			tl = *pc.cp++;
1426*2109Smckusic 			if (tl == 0)
1427*2109Smckusic 				tl = *pc.sp++;
1428*2109Smckusic 			tl1 = pop4();
1429*2109Smckusic 			push4(SUCC(tl1, tl, *pc.sp++));
1430*2109Smckusic 			continue;
14312080Smckusick 		case O_SUCC4:
1432*2109Smckusic 			tl = *pc.cp++;
1433*2109Smckusic 			if (tl == 0)
1434*2109Smckusic 				tl = *pc.lp++;
1435*2109Smckusic 			tl1 = pop4();
1436*2109Smckusic 			push4(SUCC(tl1, tl, *pc.lp++));
14372080Smckusick 			continue;
14382080Smckusick 		case O_PRED2:
1439*2109Smckusic 			tl = *pc.cp++;
1440*2109Smckusic 			if (tl == 0)
1441*2109Smckusic 				tl = *pc.sp++;
1442*2109Smckusic 			tl1 = pop4();
1443*2109Smckusic 			push2(PRED(tl1, tl, *pc.sp++));
14442080Smckusick 			continue;
14452080Smckusick 		case O_PRED24:
1446*2109Smckusic 			tl = *pc.cp++;
1447*2109Smckusic 			if (tl == 0)
1448*2109Smckusic 				tl = *pc.sp++;
1449*2109Smckusic 			tl1 = pop4();
1450*2109Smckusic 			push4(PRED(tl1, tl, *pc.sp++));
1451*2109Smckusic 			continue;
14522080Smckusick 		case O_PRED4:
1453*2109Smckusic 			tl = *pc.cp++;
1454*2109Smckusic 			if (tl == 0)
1455*2109Smckusic 				tl = *pc.lp++;
1456*2109Smckusic 			tl1 = pop4();
1457*2109Smckusic 			push4(PRED(tl1, tl, *pc.lp++));
14582080Smckusick 			continue;
14592080Smckusick 		case O_SEED:
14602080Smckusick 			pc.cp++;
14612080Smckusick 			push4(SEED(pop4()));
14622080Smckusick 			continue;
14632080Smckusick 		case O_RANDOM:
14642080Smckusick 			pc.cp++;
14652080Smckusick 			push8(RANDOM(pop8()));
14662080Smckusick 			continue;
14672080Smckusick 		case O_EXPO:
14682080Smckusick 			pc.cp++;
14692080Smckusick 			push4(EXPO(pop8()));
14702080Smckusick 			continue;
14712080Smckusick 		case O_SQR2:
14722080Smckusick 		case O_SQR4:
14732080Smckusick 			pc.cp++;
14742080Smckusick 			tl = pop4();
14752080Smckusick 			push4(tl * tl);
14762080Smckusick 			continue;
14772080Smckusick 		case O_SQR8:
14782080Smckusick 			pc.cp++;
14792080Smckusick 			td = pop8();
14802080Smckusick 			push8(td * td);
14812080Smckusick 			continue;
14822080Smckusick 		case O_ROUND:
14832080Smckusick 			pc.cp++;
14842080Smckusick 			push4(ROUND(pop8()));
14852080Smckusick 			continue;
14862080Smckusick 		case O_TRUNC:
14872080Smckusick 			pc.cp++;
14882080Smckusick 			push4(TRUNC(pop8()));
14892080Smckusick 			continue;
14902080Smckusick 		}
14912080Smckusick 	}
14922080Smckusick }
1493