*/
#include "defs.h"
+SCCSID(@(#)command.c 2.4);
MSG BADEQ;
STRING errflg;
CHAR lastc;
-CHAR eqformat[128] "o";
-CHAR stformat[128] "o\"= \"^i";
-POS *endhdr;
+CHAR eqformat[128] = "z";
+CHAR stformat[128] = "X\"= \"^i";
+struct user u;
L_INT dot;
L_INT ditto;
INT dotinc;
-INT lastcom '=';
+INT lastcom = '=';
L_INT var[];
L_INT locval;
L_INT locmsk;
goto trystar;
case '=':
- itype=NSP; ptype=ASYM;
+ itype=NSP; ptype=0;
goto trypr;
case '?':
case 'l':
/*search for exp*/
IF eqcom THEN error(BADEQ); FI
- dotinc=2; savdot=dot;
+ dotinc=(longpr?4:2); savdot=dot;
expr(1); locval=expv;
IF expr(0) THEN locmsk=expv; ELSE locmsk = -1L; FI
- LOOP w=leng(get(dot,itype));
- IF longpr
- THEN w=itol(w,get(inkdot(2),itype));
- FI
+ IF !longpr THEN locmsk &= 0xFFFF; locval &= 0xFFFF; FI
+ LOOP w=get(dot,itype);
IF errflg ORF mkfault ORF (w&locmsk)==locval THEN break; FI
dot=inkdot(dotinc);
POOL
errflg=0; dot=savdot;
IF longpr
THEN put(dot,itype,expv);
+ ELSE put(dot,itype,itol(get(dot+2,itype),expv));
FI
- put((longpr?inkdot(2):dot),itype,shorten(expv));
savdot=dot;
printf("=%8t"); exform(1,wformat,itype,ptype);
newline();
case '>':
lastcom=0; savc=rdc();
IF regptr=getreg(savc)
- THEN endhdr[regptr]=shorten(dot);
- ptrace(WUREGS,pid,2*(512+regptr),endhdr[regptr]);
+ THEN * (ADDR *) (((ADDR)&u)+regptr)=dot;
+ ptrace(WUREGS,pid,2*(512+regptr),* (ADDR *) (((ADDR)&u)+regptr));
ELIF (modifier=varchk(savc)) != -1
THEN var[modifier]=dot;
ELSE error(BADVAR);
case '!':
lastcom=0;
- unox(); break;
+ shell(); break;
case '$':
lastcom=0;