10 char BADEQ[] = "unexpected `='";
15 char eqformat[ARB] = "z";
16 char stformat[ARB] = "zMi";
22 WORD adrval, cntval, loopcnt;
25 /* command decoding */
27 command(char *buf, int defcom)
34 static char lastcom = '=', savecom = '=';
45 adrflg=expr(0); /* first address */
52 if (rdc()==',' && expr(0)) { /* count */
62 lastcom=lastc; /* command */
80 if (reg=regname(savc))
81 rput(cormap, reg, dot);
83 error("bad variable");
93 printtrace(nextchar());
110 error("bad command");
113 } while (rdc()==';');
153 snprint(buf, sizeof(buf), "no map for %c", pc);
176 cmdwrite(lastc, map);
182 scanform(cntval, !eqcom, fmt, map, eqcom);
187 cmdsrc(int c, Map *map)
208 while ((ret = get4(map, dot, &w)) > 0 && (w&locmsk) != locval)
209 dot = inkdot(dotinc);
211 while ((ret = get2(map, dot, &sh)) > 0 && (sh&locmsk) != locval)
212 dot = inkdot(dotinc);
217 symoff(buf, 512, dot, CANY);
221 static char badwrite[] = "can't write process memory or text image";
224 cmdwrite(int wcom, Map *map)
239 exform(1, 1, format, map, 0, pass);
242 if (put4(map, dot, expv) <= 0)
245 if (put2(map, dot, expv) <= 0)
250 exform(1, 0, format, map, 0, pass);
257 * collect a register name; return register offset
258 * this is not what i'd call a good division of labour
270 while (isalnum(c = readchar())) {
271 if (p >= buf+sizeof(buf)-1)
272 error("register name too long");
288 char *argp = (char*)lp;
292 if ((unixpid=fork())==0) {
294 execl("/bin/rc", "rc", "-c", argp, nil);
295 exits("execl"); /* botch */
296 } else if (unixpid == -1) {
297 error("cannot fork");
300 while ((rc = waitpid()) != unixpid){
301 if(rc == -1 && mkfault){