SCCSID(@(#)command.c 2.4);
CHAR eqformat[128] = "z";
CHAR stformat[128] = "X\"= \"^i";
INT itype, ptype, modifier, regptr;
THEN dot=expv; ditto=dot;
IF rdc()==',' ANDF expr(0)
THEN cntflg=TRUE; cntval=expv;
ELSE cntflg=FALSE; cntval=1; lp--;
ELSE IF adrflg==0 THEN dot=inkdot(dotinc); FI
IF rdc()=='*' THEN lastcom |= QUOTE; ELSE lp--; FI
THEN itype |= STAR; ptype = (DSYM+ISYM)-ptype;
longpr=FALSE; eqcom=lastcom=='=';
UNION{MAP *m; L_INT *mp;}amap;
IF eqcom THEN error(BADEQ); FI
smap=(itype&DSP?&datmap:&txtmap);
WHILE fcount-- ANDF expr(0)
DO *(amap.mp)++ = expv; OD
IF rdc()=='?' THEN smap->ufd=fsym;
ELIF lastc == '/' THEN smap->ufd=fcor;
IF eqcom THEN error(BADEQ); FI
dotinc=(longpr?4:2); savdot=dot;
IF expr(0) THEN locmsk=expv; ELSE locmsk = -1L; FI
IF !longpr THEN locmsk &= 0xFFFF; locval &= 0xFFFF; FI
IF errflg ORF mkfault ORF (w&locmsk)==locval THEN break; FI
THEN dot=savdot; errflg=NOMATCH;
IF eqcom THEN error(BADEQ); FI
wformat[0]=lastc; expr(1);
REP savdot=dot; psymoff(dot,ptype,":%16t"); exform(1,wformat,itype,ptype);
THEN put(dot,itype,expv);
ELSE put(dot,itype,itol(get(dot+2,itype),expv));
printf("=%8t"); exform(1,wformat,itype,ptype);
PER expr(0) ANDF errflg==0 DONE
getformat(eqcom ? eqformat : stformat);
THEN psymoff(dot,ptype,":%16t");
scanform(cntval,(eqcom?eqformat:stformat),itype,ptype);
THEN * (ADDR *) (((ADDR)&u)+regptr)=dot;
ptrace(WUREGS,pid,2*(512+regptr),* (ADDR *) (((ADDR)&u)+regptr));
ELIF (modifier=varchk(savc)) != -1
printtrace(nextchar()); break;
IF buf THEN lp=savlp; ELSE lp--; FI
return(adrflg ANDF dot!=0);