static char sccsid
[] = "@(#)command.c 4.4 %G%";
CHAR eqformat
[512] = "z";
CHAR stformat
[512] = "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 IF kcore THEN
*(int *)regptr
= dot
; ELSE
* (ADDR
*) (((ADDR
)&u
)+regptr
)=dot
;
ptrace(WUREGS
,pid
,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);